diff --git a/app/cdap/api/artifact.js b/app/cdap/api/artifact.js index b87d9ad2116..e79b31d542f 100644 --- a/app/cdap/api/artifact.js +++ b/app/cdap/api/artifact.js @@ -20,6 +20,7 @@ let dataSrc = DataSourceConfigurer.getInstance(); const basepath = '/namespaces/:namespace/artifacts'; const baseArtifactPath = basepath + '/:artifactId/versions/:version'; const basePluginArtifactJSON = baseArtifactPath + '/properties'; +const extensionsBasePath = `${basepath}/:pipelineType/versions/:version/extensions`; export const MyArtifactApi = { get: apiCreator(dataSrc, 'GET', 'REQUEST', baseArtifactPath), @@ -39,6 +40,7 @@ export const MyArtifactApi = { delete: apiCreator(dataSrc, 'DELETE', 'REQUEST', baseArtifactPath), loadPluginConfiguration: apiCreator(dataSrc, 'PUT', 'REQUEST', basePluginArtifactJSON), list: apiCreator(dataSrc, 'GET', 'REQUEST', basepath), + listScopedArtifacts: apiCreator(dataSrc, 'GET', 'REQUEST', `${basepath}?scope=:scope`), reloadSystemArtifacts: apiCreator(dataSrc, 'POST', 'REQUEST', '/namespaces/system/artifacts'), fetchPluginDetails: apiCreator( dataSrc, @@ -58,4 +60,5 @@ export const MyArtifactApi = { 'REQUEST', '/namespaces/:namespace/artifacts/:artifactName?scope=:scope' ), + fetchExtensions: apiCreator(dataSrc, 'GET', 'REQUEST', `${extensionsBasePath}?scope=system`), }; diff --git a/app/cdap/api/pipeline.js b/app/cdap/api/pipeline.js index ce1bd15d0ea..55db237b5f4 100644 --- a/app/cdap/api/pipeline.js +++ b/app/cdap/api/pipeline.js @@ -36,8 +36,9 @@ const extensionsFetchBase = '/namespaces/:namespace/artifacts/:pipelineType/versions/:version/extensions'; const pluginFetchBase = `${extensionsFetchBase}/:extensionType`; const pluginsFetchPath = `${pluginFetchBase}?scope=system`; -var pipelineV1AppPath = '/namespaces/system/apps/pipeline/services/studio/methods/v1'; -var pipelineV1AppContextPath = `${pipelineV1AppPath}/contexts/:context`; +const pipelineV1AppPath = '/namespaces/system/apps/pipeline/services/studio/methods/v1'; +const pipelineV1AppContextPath = `${pipelineV1AppPath}/contexts/:context`; +const allArtifactPropertiesPath = '/namespaces/:namespace/artifactproperties'; export const MyPipelineApi = { list: apiCreator(dataSrc, 'GET', 'REQUEST', '/namespaces/:namespace/apps'), @@ -80,4 +81,13 @@ export const MyPipelineApi = { ), getAppVersions: apiCreator(dataSrc, 'GET', 'REQUEST', `${basepath}/versions`), + + fetchExtensions: apiCreator(dataSrc, 'GET', 'REQUEST', `${extensionsFetchBase}?scope=system`), + fetchAllPluginsProperties: apiCreator(dataSrc, 'POST', 'REQUEST', allArtifactPropertiesPath), + fetchPluginProperties: apiCreator( + dataSrc, + 'POST', + 'REQUEST', + `${pluginFetchBase}/plugins/:pluginName?scope=system` + ), }; diff --git a/app/cdap/api/settings.js b/app/cdap/api/settings.js new file mode 100644 index 00000000000..d9b642d8a44 --- /dev/null +++ b/app/cdap/api/settings.js @@ -0,0 +1,27 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import DataSourceConfigurer from 'services/datasource/DataSourceConfigurer'; +import { apiCreator } from 'services/resource-helper'; + +const dataSrc = DataSourceConfigurer.getInstance(); +const basePath = '/namespaces/:namespace/configuration'; +const userSettingsPath = `${basePath}/user`; + +export const SettingsApi = { + getUserSettings: apiCreator(dataSrc, 'GET', 'REQUEST', `${userSettingsPath}`), + updateUserSettings: apiCreator(dataSrc, 'PUT', 'REQUEST', `${userSettingsPath}`), +}; diff --git a/app/cdap/components/FooterContext/index.ts b/app/cdap/components/FooterContext/index.ts new file mode 100644 index 00000000000..a71cc8cb24a --- /dev/null +++ b/app/cdap/components/FooterContext/index.ts @@ -0,0 +1,41 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { createContext, useContext, useEffect } from 'react'; + +interface IFooterContext { + show: boolean; + setShow(val?: boolean): void; +} + +export const FooterContext = createContext({ + show: true, + setShow() { + return; + }, +}); + +export function useHideFooterInPage() { + const { setShow } = useContext(FooterContext); + + useEffect(() => { + setShow(false); + + return () => setShow(true); + }, []); + + return setShow; +} diff --git a/app/cdap/components/Home/index.js b/app/cdap/components/Home/index.js index 07d2f6d9f2f..26780cbbe53 100644 --- a/app/cdap/components/Home/index.js +++ b/app/cdap/components/Home/index.js @@ -27,6 +27,10 @@ import ToggleExperiment from 'components/Lab/ToggleExperiment'; import ee from 'event-emitter'; require('./Home.scss'); +const StudioV2 = Loadable({ + loader: () => import(/* webpackChunkName: "StudioV2" */ 'components/StudioV2'), + loading: LoadingSVGCentered, +}); const EntityListView = Loadable({ loader: () => import(/* webpackChunkName: "EntityListView" */ 'components/EntityListView'), loading: LoadingSVGCentered, @@ -144,6 +148,7 @@ export default class Home extends Component { + + + + + + + + + + + +`; + +function appendMarkersSvg() { + const markers = Array.from(document.querySelectorAll(`marker[id*="${END_MARKER_PREFIX}"]`)); + if (!markers.length) { + const svgWrapperEl = document.createElement('div'); + svgWrapperEl.innerHTML = endMarkersSvg; + document.body.appendChild(svgWrapperEl); + } +} + +function getEdgePath( + sourceX: number, + sourceY: number, + sourcePosition: Position, + targetX: number, + targetY: number, + targetPosition: Position, + inProgress: boolean = false +) { + const distX = Math.abs(targetX - sourceX); + const distY = Math.abs(targetY - sourceY); + if (inProgress && distX < EDGE_BORDER_RADIUS && distY < 2 * EDGE_BORDER_RADIUS) { + return getSimpleBezierPath({ + sourceX, + sourceY, + sourcePosition, + targetX, + targetY, + targetPosition, + }); + } + + return getSmoothStepPath({ + sourceX, + sourceY, + sourcePosition, + targetX, + targetY, + targetPosition, + borderRadius: EDGE_BORDER_RADIUS, + }); +} + +export function StandardEdge({ id, sourceX, sourceY, targetX, targetY, selected }: EdgeProps) { + const [path] = getEdgePath(sourceX, sourceY, Position.Right, targetX, targetY, Position.Left); + + useEffect(() => { + appendMarkersSvg(); + }, []); + + let markerEnd = selected + ? `url(#${EndMarkers.FILLED_TRIANGLE_SELECTED})` + : `url(#${EndMarkers.FILLED_TRIANGLE})`; + if (Math.abs(targetX - sourceX) < EDGE_BORDER_RADIUS) { + markerEnd = ''; + } + + return ; +} + +export function EdgeInProgress({ + fromX, + fromY, + toX, + toY, + fromPosition, + toPosition, +}: ConnectionLineComponentProps) { + const pathRef = useRef(null); + const [path] = useMemo( + () => getEdgePath(fromX, fromY, fromPosition, toX, toY, toPosition, true), + [fromX, fromY, toX, toY, toPosition] + ); + + useEffect(() => { + if (pathRef.current) { + pathRef.current.setAttribute('d', path); + } + }, [path, pathRef.current]); + + useEffect(() => { + appendMarkersSvg(); + }, []); + + return ( + + ); +} + +export const EDGE_TYPES = { + default: StandardEdge, + standard: StandardEdge, +}; diff --git a/app/cdap/components/StudioV2/CreatePipelineView/DAGNodes.tsx b/app/cdap/components/StudioV2/CreatePipelineView/DAGNodes.tsx new file mode 100644 index 00000000000..3837bb8c144 --- /dev/null +++ b/app/cdap/components/StudioV2/CreatePipelineView/DAGNodes.tsx @@ -0,0 +1,248 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React from 'react'; +import { useSelector } from 'react-redux'; +import styled from 'styled-components'; +import { Handle, NodeProps, Position } from 'reactflow'; +import CommentIcon from '@material-ui/icons/Comment'; +import { + getCustomIconSrc, + shouldShowCustomIcon, +} from 'components/hydrator/components/SidePanel/helpers'; +import { Button, IconButton } from '@material-ui/core'; +import MenuIcon from '@material-ui/icons/Menu'; +import { setActiveNodeId } from '../store/nodes/actions'; +import { + setMetricsTabActive, + setSelectedPlugin, +} from 'services/PipelineMetricsStore/ActionCreator'; + +const targetHandleStyle = {}; +const sourceHandleStyle = { + width: '12px', + height: '12px', + borderRadius: '6px', + right: '-5px', + background: '#b1b1b7', +}; + +const NODE_HIGHLIGHT_COLORS = { + batchsource: '#48c038', + transform: '#4586f3', + batchsink: '#8367df', + action: '#988470', + condition: '#4e5568', + alertpublisher: '#ffba01', + errortransform: '#d40001', +}; + +const DEFAULT_TEXT_COLOR = '#4a4a4a'; +const DEFAULT_HIGHLIGHT_COLOR = 'rgba(0, 0, 0, 0.5)'; +const DEFAULT_SHADOW_COLOR = 'rgba(0, 0, 0, 0.3)'; + +function getNodeBorder(nodeType, selected) { + const color = NODE_HIGHLIGHT_COLORS[nodeType] || DEFAULT_HIGHLIGHT_COLOR; + const width = selected ? '2px' : '1px'; + + return `${width} ${color} solid`; +} + +function getNodeShadow(nodeType, selected) { + const color = selected + ? NODE_HIGHLIGHT_COLORS[nodeType] || DEFAULT_SHADOW_COLOR + : DEFAULT_SHADOW_COLOR; + const spread = selected ? '15px' : '10px'; + + return `0 0 ${spread} ${color}`; +} + +const NodeContainer = styled.div` + position: relative; + margin-left: 2px; + padding: 8px 12px 4px 12px; + + background: white; + width: 200px; + height: 100px; + border-radius: 8px; + box-shadow: ${({ nodeType, selected }) => getNodeShadow(nodeType, selected)}; + border: ${({ nodeType, selected }) => getNodeBorder(nodeType, selected)}; + box-sizing: content-box; +`; + +const CommentsIconContainer = styled.div` + position: absolute; + right: 0; + top: -30px; +`; + +const NodeErrorsAndWarningsCount = styled.div` + position: absolute; + top: 3px; + right: 3px; + + display: inline-block; + padding: 0.5em; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25em; + background: ${({ isWarning }) => (isWarning ? '#ffcc00' : 'ff6666')}; + color: white; +`; + +const NodeInnerLayout = styled.div` + display: flex; + flex-direction: column; + align-items: stretch; + justify-content: space-between; + height: 100%; +`; + +const NodeInfoContainer = styled.div` + display: flex; + justify-content: flex-start; +`; + +const PluginIconContainer = styled.div` + width: 25px; + height: 25px; + min-width: 25px; + min-height: 25px; + + margin-right: 10px; + margin-top: 4px; +`; + +const PluginIconImage = styled.img` + width: 25px; + height: 25px; +`; + +const PluginIconDefault = styled.div` + width: 25px; + height: 25px; + font-size: 25px; +`; + +const PluginMetaContainer = styled.div` + overflow: hidden; + text-overflow: ellipsis; +`; + +const PluginName = styled.div` + font-size: 14px; + font-weight: 600; + margin-bottom: 2px; + color: ${DEFAULT_TEXT_COLOR}; +`; + +const PluginVersion = styled.div` + font-size: 11px; + color: ${DEFAULT_TEXT_COLOR}; +`; + +const NodeButtonsContainer = styled.div` + display: flex; + align-items: center; + justify-content: space-between; +`; + +export function PipelineComments({ comments }) { + if (comments.length < 1) { + return null; + } + + return ( + + + + ); +} + +export function PipelineNode({ id, data, selected }: NodeProps) { + const pluginsMap = useSelector((state) => state.availablePlugins.pluginsMap); + const node = data.pluginNode; + const hasCustomIcon = shouldShowCustomIcon(node.plugin, pluginsMap); + + // console.log(data, hasCustomIcon, pluginsMap); + function resetActiveNodeForComment() { + // TODO: Add logic here + } + + function closeMetricsPopover(node) { + // TODO: Add logic here + } + + function onPropertiesClick() { + resetActiveNodeForComment(); + closeMetricsPopover(node); + setMetricsTabActive(false); + setSelectedPlugin(node.type, node.plugin.name); + setActiveNodeId(node.name); + } + + return ( + <> + + + + {node.errorCount && ( + + {node.errorCount} + + )} + + + + {hasCustomIcon ? ( + + ) : ( + + )} + + + {data.label} + {node.plugin.artifact.version} + + + + + + + + + + + + + ); +} + +export const NODE_TYPES = { + default: PipelineNode, + pipelineNode: PipelineNode, +}; diff --git a/app/cdap/components/StudioV2/CreatePipelineView/DAGOverrides.css b/app/cdap/components/StudioV2/CreatePipelineView/DAGOverrides.css new file mode 100644 index 00000000000..4225590306e --- /dev/null +++ b/app/cdap/components/StudioV2/CreatePipelineView/DAGOverrides.css @@ -0,0 +1,33 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +.react-flow__handle.target { + height: calc(100% + 10px); + width: 1px; + min-width: 0; + left: 0; + pointer-events: none; + border-radius: 0; + opacity: 0.2; +} + +path.react-flow__edge-path { + stroke-width: 2; +} + +path.react-flow__edge-path:hover { + stroke-width: 4; +} \ No newline at end of file diff --git a/app/cdap/components/StudioV2/CreatePipelineView/DagComponent.tsx b/app/cdap/components/StudioV2/CreatePipelineView/DagComponent.tsx new file mode 100644 index 00000000000..46166803c8d --- /dev/null +++ b/app/cdap/components/StudioV2/CreatePipelineView/DagComponent.tsx @@ -0,0 +1,70 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React, { useCallback, useEffect } from 'react'; +import { useSelector } from 'react-redux'; +import { + ReactFlow, + useNodesState, + useEdgesState, + Controls, + MiniMap, + Background, + BackgroundVariant, + addEdge, + useReactFlow, + ConnectionLineType, +} from 'reactflow'; + +import 'reactflow/dist/style.css'; +import './DAGOverrides.css'; +import { useDAGController } from './useDAG'; +import { NODE_TYPES } from './DAGNodes'; +import { EDGE_TYPES, EdgeInProgress } from './DAGEdges'; + +const noop = () => 1; + +const proOptions = { hideAttribution: true }; + +export default function DagComponent() { + const reactflow = useReactFlow(); + const { nodes, edges, onNodesChange, onConnect, onEdgesChange } = useDAGController(); + + useEffect(() => { + console.log('zoom = ', reactflow.getZoom()); + // reactflow.zoomTo(0.5); + }); + + return ( + + + + + + ); +} diff --git a/app/cdap/components/StudioV2/CreatePipelineView/LeftPanelV2.tsx b/app/cdap/components/StudioV2/CreatePipelineView/LeftPanelV2.tsx new file mode 100644 index 00000000000..046d12a5320 --- /dev/null +++ b/app/cdap/components/StudioV2/CreatePipelineView/LeftPanelV2.tsx @@ -0,0 +1,81 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React, { useEffect } from 'react'; +import styled from 'styled-components'; +import { useSelector } from 'react-redux'; +import { LeftPanel } from 'components/hydrator/components/LeftPanel/LeftPanel'; +import { fetchSystemArtifacts, setSelectedArtifact } from '../store/common/actions'; +import { useLeftPanelController } from './useLeftPanel'; +import { usePanelCollapseController } from 'components/layouts/SectionWithPanel'; + +const ScrollableDiv = styled.div` + width: 100%; + height: 100%; + overflow-y: auto; + + scrollbar-width: none; + -ms-overflow-style: none; + &::-webkit-scrollbar { + display: none; + } +`; + +// @ts-ignore +function noop() {} + +export default function LeftPanelV2() { + const { + artifacts, + selectedArtifact, + pluginsMap, + + onArtifactChange, + onItemClicked, + createPluginTemplate, + } = useLeftPanelController(); + + // console.log(artifacts || 'hello'); + // console.log({ pluginsMap }); + + const { isCollapsed, collapse, expand } = usePanelCollapseController(); + function handleToggleExpanded() { + if (isCollapsed()) { + expand(); + } else { + collapse(); + } + } + + return ( + + + + ); +} diff --git a/app/cdap/components/StudioV2/CreatePipelineView/RightPanel.tsx b/app/cdap/components/StudioV2/CreatePipelineView/RightPanel.tsx new file mode 100644 index 00000000000..ec07ab25b6f --- /dev/null +++ b/app/cdap/components/StudioV2/CreatePipelineView/RightPanel.tsx @@ -0,0 +1,30 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React from 'react'; +import { useSelector } from 'react-redux'; + +export default function RightPanel() { + const uiState = useSelector((state) => state.uiState); + const { rightPanelToRender, rightPanelOnClose } = uiState; + + return ( +
+ {rightPanelToRender} + +
+ ); +} diff --git a/app/cdap/components/StudioV2/CreatePipelineView/index.tsx b/app/cdap/components/StudioV2/CreatePipelineView/index.tsx new file mode 100644 index 00000000000..4d023702cfd --- /dev/null +++ b/app/cdap/components/StudioV2/CreatePipelineView/index.tsx @@ -0,0 +1,155 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React, { useEffect } from 'react'; +import { useHideFooterInPage } from 'components/FooterContext'; +import { Provider } from 'react-redux'; +import { CanvasWrapper, DagWrapper, LeftPanelWrapper, RightWrapper } from '../styles'; +import { IScheduleInfo, TopPanel } from 'components/hydrator/components/TopPanel/TopPanel'; +import DagComponent from './DagComponent'; +import AuthRefresher from 'components/AuthRefresher'; +import LeftPanelV2 from './LeftPanelV2'; +import StudioV2Store from '../store'; +import StudioModalsManager from '../modals/StudioModalsManager'; +import { ReactFlowProvider } from 'reactflow'; +import SectionWithPanel from 'components/layouts/SectionWithPanel'; +import RightPanel from './RightPanel'; + +// @ts-ignore +function noop() {} + +export default function CreatePipelineView() { + useHideFooterInPage(); + useEffect(() => { + document.body.classList.add('theme-cdap'); + document.body.classList.add('state-hydrator-create'); + + return () => { + document.body.classList.remove('theme-cdap'); + document.body.classList.remove('state-hydrator-create'); + }; + }, []); + + function getSchedulerInfo(): IScheduleInfo { + return { + schedule: '', + maxConcurrentRuns: 1, + }; + } + + function getPostActions() { + return []; + } + + function getConfigForExport() { + return { + config: {}, + }; + } + + console.log('IN THE PAGE'); + return ( + + + } + > + } + > + + + + + + + + + + + + + + + ); +} diff --git a/app/cdap/components/StudioV2/CreatePipelineView/useDAG.tsx b/app/cdap/components/StudioV2/CreatePipelineView/useDAG.tsx new file mode 100644 index 00000000000..b2f61b0b1fa --- /dev/null +++ b/app/cdap/components/StudioV2/CreatePipelineView/useDAG.tsx @@ -0,0 +1,204 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React from 'react'; +import { + Connection, + Edge, + EdgeChange, + MarkerType, + Node, + NodeChange, + addEdge, + useEdgesState, + useNodesState, +} from 'reactflow'; +import { useSelector, useDispatch } from 'react-redux'; +import { getConnections, getNodes } from '../store/nodes/queries'; +import { getNodes as getConfigNodes } from '../store/config/queries'; +import { useCallback, useEffect, useLayoutEffect, useState } from 'react'; +import { NodesActions } from '../store/nodes/reducer'; +import { usePanelCollapseController } from 'components/layouts/SectionWithPanel'; +import { UiActions } from '../store/uistate/actions'; + +interface IDAGController { + nodes: Node[]; + edges: Edge[]; + onNodesChange: (changes: NodeChange[]) => void; + onEdgesChange: (changes: EdgeChange[]) => void; + onConnect: (conn: Connection) => void; +} + +function getNodesComparisonKey(nodes) { + return JSON.stringify( + nodes.map((node) => node.data.pluginNode), + (key, value) => (key === '_uiPosition' ? undefined : value) + ); +} + +export function useDAGController(): IDAGController { + const dispatch = useDispatch(); + const nodesState = useSelector((state) => state.nodes); + const configState = useSelector((state) => state.config); + const uiState = useSelector((state) => state.uiState); + const { isCollapsed, collapse, expand } = usePanelCollapseController(); + + const pluginNodes = getNodes(nodesState); + const connections = getConnections(nodesState); + + const uiNodes = pluginNodes.map((node) => ({ + id: node.name, + type: 'pipelineNode', + position: { + x: node._uiPosition.left, + y: node._uiPosition.top, + }, + data: { + label: node.plugin.label, + pluginNode: node, + }, + })); + + // console.log(pluginNodes); + + const uiEdges = connections.map(({ from, to }) => ({ + id: `edge-${from}-${to}`, + type: 'standard', + source: from, + target: to, + })); + + const [nodes, setNodes, onNodesChange] = useNodesState(uiNodes); + const [edges, setEdges, onEdgesChange] = useEdgesState(uiEdges); + + useLayoutEffect(() => { + setNodes(uiNodes); + setEdges(uiEdges); + }, [getNodesComparisonKey(uiNodes), JSON.stringify(uiEdges)]); + + useEffect(() => { + setActiveNode(nodesState.activeNodeId); + }, [nodesState.activeNodeId]); + + useEffect(() => { + setStateAndUpdateConfigStore(); + }, [nodesState]); + + function setStateAndUpdateConfigStore() { + // TODO: add logic here + } + + function setActiveNode(nodeId) { + console.log('***********************'); + console.log(uiState.rightPanelShown, nodeId); + if (!nodeId || uiState.rightPanelShown) { + return; + } + + let pluginNode; + let nodeFromNodesStore; + const nodeFromConfigStore = getConfigNodes(configState).filter((node) => node.name === nodeId); + if (nodeFromConfigStore.length) { + pluginNode = nodeFromConfigStore[0]; + } else { + nodeFromNodesStore = getNodes(nodesState).filter((node) => node.name === nodeId); + pluginNode = nodeFromNodesStore[0]; + } + + const closeRightPanel = () => { + collapse(); + dispatch({ + type: UiActions.CLOSE_RIGHT_PANEL, + }); + dispatch({ + type: NodesActions.RESET_ACTIVE_NODE, + }); + }; + + dispatch({ + type: UiActions.OPEN_RIGHT_PANEL, + payload: { + render:

Plugin properties

, + onClose: closeRightPanel, + }, + }); + expand(); + } + + const getNodeById = useCallback( + (nodeid) => { + return nodes.find((n) => n.id === nodeid) || null; + }, + [nodes] + ); + + const handleNodesChange = useCallback( + (changes) => { + onNodesChange(changes); + for (const change of changes) { + if (change.type === 'position' && change.dragging === false) { + const node = getNodeById(change.id); + const { position } = node; + const nodeConfig = { + _uiPosition: { + top: position.y, + left: position.x, + }, + }; + + dispatch({ + type: NodesActions.UPDATE_NODE, + payload: { + nodeId: node.data.pluginNode.id, + nodeConfig, + }, + }); + } + } + }, + [getNodeById] + ); + + const handleEdgesChange = useCallback((changes) => { + onEdgesChange(changes); + console.log('EDGES CHANGE: ', changes); + for (const change of changes) { + } + }, []); + + const onConnect = useCallback( + (conn) => { + setEdges((oldEdges) => addEdge(conn, oldEdges)); + const { source, target } = conn; + dispatch({ + type: NodesActions.ADD_CONNECTION, + payload: { + from: source, + to: target, + }, + }); + }, + [setEdges, getNodeById] + ); + + return { + nodes, + edges, + onNodesChange: handleNodesChange, + onEdgesChange: handleEdgesChange, + onConnect, + }; +} diff --git a/app/cdap/components/StudioV2/CreatePipelineView/useLeftPanel.tsx b/app/cdap/components/StudioV2/CreatePipelineView/useLeftPanel.tsx new file mode 100644 index 00000000000..f41839e8f9b --- /dev/null +++ b/app/cdap/components/StudioV2/CreatePipelineView/useLeftPanel.tsx @@ -0,0 +1,269 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React, { useState, useEffect } from 'react'; +import { useSelector, useDispatch } from 'react-redux'; +import { useLocation } from 'react-router'; +import qs from 'query-string'; +import _isEqual from 'lodash/isEqual'; +import _get from 'lodash/get'; + +import { getPluginIcon, getPluginTypeDisplayName, orderPluginTypes } from '../utils/pluginUtils'; +import { ILabeledArtifactSummary } from '../types'; +import { fetchSystemArtifacts, setSelectedArtifact } from '../store/common/actions'; +import { UiActions } from '../store/uistate/actions'; +import { render } from '@testing-library/react'; +import Defer from '../utils/defer'; +import DirtyStateConfirmationModal from '../modals/DirtyStateConfirmationModal'; +import { MyPipelineApi } from 'api/pipeline'; +import { fetchPlugins } from '../store/availablePlugins/actions'; +import { getCurrentNamespace } from 'services/NamespaceStore'; +import VersionStore from 'services/VersionStore'; +import { fetchPluginsDefaultVersions, updatePluginDefaultVersion } from '../store/plugins/actions'; +import { addNode, resetSelectedNode } from '../store/nodes/actions'; +import { getNodes } from '../store/config/queries'; +import { getNodeInitialPosition } from '../store/nodes/queries'; + +export type TStudioUiMode = 'create' | 'edit'; + +interface ILeftPanelController { + artifacts: any[]; + selectedArtifact: any; + pluginsMap: any[]; + + onArtifactChange: (value: any) => void; + onItemClicked: (event: React.MouseEvent, node: any) => void; + createPluginTemplate: (node: any, mode: TStudioUiMode) => void; +} + +export function useLeftPanelController(): ILeftPanelController { + const dispatch = useDispatch(); + + const cdapVersion = VersionStore.getState().version; + const artifacts = useSelector((state) => state.common.artifacts); + const selectedArtifact = useSelector((state) => state.common.selectedArtifact); + + const extensions = useSelector((state) => state.plugins.extensions); + const pluginTypes = useSelector((state) => state.plugins.pluginTypes); + const configState = useSelector((state) => state.config); + const nodesState = useSelector((state) => state.nodes); + const availablePluginsMap = useSelector((state) => state.availablePlugins.pluginsMap); + + const location = useLocation(); + const queryParams = qs.parse(location.search); + const isEdit = queryParams.isEdit === 'true'; + console.log(isEdit, queryParams); + + useEffect(() => { + fetchSystemArtifacts(); + init(); + }, []); + + let pluginsMap = []; + const fetchPluginsFromMap = (ext) => { + return pluginsMap.filter((pluginObj) => pluginObj.name === getPluginTypeDisplayName(ext)); + }; + + extensions.forEach((ext) => { + const plugins = pluginTypes[ext]; + const fetchedPluginsMap = fetchPluginsFromMap(ext); + + if (!fetchedPluginsMap.length) { + pluginsMap.push({ + name: getPluginTypeDisplayName(ext), + plugins, + pluginTypes: [ext], + }); + } else { + fetchedPluginsMap[0].plugins = fetchedPluginsMap[0].plugins.concat(plugins); + fetchedPluginsMap[0].pluginTypes.push(ext); + } + }); + pluginsMap = orderPluginTypes(pluginsMap); + + async function init() { + await fetchPluginsDefaultVersions(); + + fetchPlugins({ + namespace: getCurrentNamespace(), + pipelineType: selectedArtifact.name, + version: cdapVersion, + }); + } + + function checkAndShowConfirmationModalOnDirtyState() { + const proceedDefer = new Defer(); + const closeModal = (shouldProceed) => { + proceedDefer.resolve(shouldProceed); + dispatch({ + type: UiActions.CLOSE_MODAL, + }); + }; + + dispatch({ + type: UiActions.OPEN_MODAL, + payload: { + render: , + onClose: closeModal, + }, + }); + + return proceedDefer.promise; + } + + async function onArtifactChange(newArtifact) { + const newSelectedArtifact = artifacts.find((artifact) => artifact.name === newArtifact); + const proceedToNextStep = await checkAndShowConfirmationModalOnDirtyState(); + if (!proceedToNextStep) { + return; + } + + setSelectedArtifact(newSelectedArtifact); + // TODO: set relevant configs for the selected artifact + } + + // TODO: Add correct type for node + function onItemClicked(event: React.MouseEvent, node: any) { + if (event) { + event.stopPropagation(); + } + + if (node.action === 'createTemplate') { + createPluginTemplate(node.contentData, 'create'); + } else if (node.action === 'deleteTemplate') { + deletePluginTemplate(node.contentData); + } else if (node.action === 'editTemplate') { + createPluginTemplate(node.contentData, 'edit'); + } else { + addPluginToCanvas(event, node); + } + } + + // TODO: add correct types for node + async function createPluginTemplate(node: any, mode: TStudioUiMode) {} + + // TODO: add correct types for node + async function deletePluginTemplate(node: any) {} + + // TODO: add correct types for node + async function addPluginToCanvas(event: React.MouseEvent, node: any) { + const getMatchedPlugin = (plugin) => { + if (plugin.pluginTemplate) { + return plugin; + } + let item = [plugin]; + const plugins = pluginTypes[node.type]; + const matchedPlugin = plugins.filter( + (plug) => plug.name === node.name && !plug.pluginTemplate + ); + if (matchedPlugin.length) { + item = matchedPlugin[0].allArtifacts.filter((plug) => + _isEqual(plug.artifact, plugin.defaultArtifact) + ); + } + return item[0]; + }; + + let item; + if (node.templateName) { + item = node; + } else { + item = getMatchedPlugin(node); + updatePluginDefaultVersion(item); + } + + resetSelectedNode(); + let name = item.name || item.pluginTemplate; + const configProperties = {}; + let configurationGroups; + let widgets; + + if (!item.pluginTemplate) { + const itemArtifact = item.artifact; + const key = `${item.name}-${item.type}-${itemArtifact.name}-${itemArtifact.version}-${itemArtifact.scope}`; + widgets = _get(availablePluginsMap, `${key}.widgets`); + const displayName = _get(widgets, 'display-name'); + configurationGroups = _get(widgets, 'configuration-groups'); + if (configurationGroups && configurationGroups.length > 0) { + configurationGroups.forEach((cg) => { + cg.properties.forEach((prop) => { + configProperties[prop.name] = _get(prop, 'widget-attributes.default'); + }); + }); + } + + name = displayName || name; + } + + const filteredNodes = getNodes(configState).filter((node) => + node.plugin.label ? node.plugin.label.includes(name) : false + ); + let config; + + if (item.pluginTemplate) { + config = { + plugin: { + label: + filteredNodes.length > 0 + ? item.pluginTemplate + (filteredNodes.length + 1) + : item.pluginTemplate, + name: item.pluginName, + artifact: item.artifact, + properties: item.properties, + type: item.pluginType, + }, + icon: getPluginIcon(item.pluginName), + type: item.pluginType, + outputSchema: item.outputSchema, + inputSchema: item.inputSchema, + pluginTemplate: item.pluginTemplate, + description: item.description, + lock: item.lock, + configGroups: configurationGroups, + filters: widgets && widgets.filters, + }; + } else { + config = { + plugin: { + label: filteredNodes.length > 0 ? name + (filteredNodes.length + 1) : name, + artifact: item.artifact, + name: item.name, + properties: configProperties, + type: item.type, + }, + icon: item.icon, + description: item.description, + type: item.type, + warning: true, + configGroups: configurationGroups, + filters: widgets && widgets.filters, + }; + } + + config._uiPosition = getNodeInitialPosition(nodesState, config.type); + addNode(config); + } + + return { + artifacts, + selectedArtifact, + pluginsMap, + + onArtifactChange, + onItemClicked, + createPluginTemplate, + }; +} diff --git a/app/cdap/components/StudioV2/CreatePipelineView/usePluginNode.tsx b/app/cdap/components/StudioV2/CreatePipelineView/usePluginNode.tsx new file mode 100644 index 00000000000..e69de29bb2d diff --git a/app/cdap/components/StudioV2/Layouts/SectionWithLeftPanel.tsx b/app/cdap/components/StudioV2/Layouts/SectionWithLeftPanel.tsx new file mode 100644 index 00000000000..d10b7535015 --- /dev/null +++ b/app/cdap/components/StudioV2/Layouts/SectionWithLeftPanel.tsx @@ -0,0 +1,249 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React, { PropsWithChildren, createContext, useContext, useRef, useState } from 'react'; +import styled from 'styled-components'; +import { sleep } from '../utils/time'; + +export interface ISectionWithLeftPanelProps { + panel: JSX.Element; + defaultWidth?: number; + resizable?: boolean; + collapsedWidth?: number; + isInitiallyCollapsed?: boolean; +} + +const DEFAULT_PANEL_WIDTH = 200; +const DEFAULT_PANEL_COLLAPSED_WIDTH = 64; +const DIVIDER_WIDTH = 8; +const DEFAULT_COLLAPSE_DURATION_IN_MS = 100; + +const SectionWithLeftPanelWrapper = styled.div` + position: relative; + display: flex; + width: 100%; + height: 100%; + flex-direction: row; + align-items: stretch; + overflow: hidden; + flex-wrap: nowrap; +`; + +interface IPanelSectionsProps { + disablePointer?: boolean; +} + +const PanelWrapper = styled.div` + width: ${DEFAULT_PANEL_WIDTH}px; + height: 100%; + ${({ disablePointer }) => (disablePointer ? 'pointerEvents: none; user-select: none;' : '')}; +`; + +interface IPanelDividerProps { + isResizable?: boolean; + defaultCollapsedWidth?: number; + defaultWidth?: number; +} + +const PanelDivider = styled.div` + position: absolute; + top: 0; + bottom: 0; + left: ${(props) => + Math.max( + props.defaultCollapsedWidth || DEFAULT_PANEL_COLLAPSED_WIDTH, + props.defaultWidth || DEFAULT_PANEL_WIDTH + ) - DIVIDER_WIDTH}px; + + box-sizing: border-box; + width: ${DIVIDER_WIDTH}px; + padding-left: ${DIVIDER_WIDTH - 1}px; + background: transparent; + touch-action: none; + + ${({ isResizable }) => + isResizable + ? ` + &::before { + position: absolute; + content: ' '; + + width: 3px; + height: 22px; + top: 50%; + margin-top: -11px; + left: 1.5px; + background: rgb(128, 134, 139); + border-radius: 1.5px; + } + + &:hover, &:focus, &:active { + &::before { + background: var(--cm-sys-color-primary, #3367d6); + } + cursor: ew-resize; + + & > div { + background: var(--cm-sys-color-primary, #3367d6); + cursor: ew-resize; + } + } + ` + : ''}; +`; + +const DividerLine = styled.div` + width: 1px; + height: 100%; + background: var(--cm-sys-color-hairline, rgba(0, 0, 0, 0.12)); +`; + +const MainWrapper = styled.div` + flex-grow: 1; + ${({ disablePointer }) => (disablePointer ? 'pointer-events: none; user-select: none;' : '')} +`; + +interface ILeftPanelController { + isCollapsed(): boolean; + collapse(): void; + expand(): void; +} + +const defaultLeftPanelController: ILeftPanelController = { + isCollapsed() { + return false; + }, + collapse() {}, + expand() {}, +}; + +const LeftPanelControllerContext = createContext(defaultLeftPanelController); + +export default function SectionWithLeftPanel({ + panel, + defaultWidth = DEFAULT_PANEL_WIDTH, + resizable = false, + collapsedWidth = DEFAULT_PANEL_COLLAPSED_WIDTH, + isInitiallyCollapsed = false, + children, +}: PropsWithChildren) { + const [collapsed, setCollapsed] = useState(isInitiallyCollapsed); + const [isResizing, setIsResizing] = useState(false); + const panelWrapperRef = useRef(null); + const dividerRef = useRef(null); + + function canResize() { + return resizable && panelWrapperRef.current && dividerRef.current && !collapsed; + } + + function handlePanelResize(event: React.MouseEvent): void { + if (!canResize() || !isResizing) { + return; + } + + event.preventDefault(); + event.stopPropagation(); + + const boundingRect = panelWrapperRef.current.getBoundingClientRect(); + const { width } = boundingRect; + const diff = event.clientX - width; + const newPanelWidth = Math.max(width + diff, collapsedWidth); + resizePanelTo(newPanelWidth); + } + + async function resizePanelTo(newWidth: number, durationInMs: number = 0): Promise { + if (!panelWrapperRef.current || !dividerRef.current) { + return; + } + + const oldPanelWrapperTransition = panelWrapperRef.current.style.transition; + const oldDividerTransition = dividerRef.current.style.transition; + + if (durationInMs) { + panelWrapperRef.current.style.transition = `width ${durationInMs / 1000}s linear`; + dividerRef.current.style.transition = `left ${durationInMs / 1000}s linear`; + } + panelWrapperRef.current.style.width = `${newWidth}px`; + dividerRef.current.style.left = `${newWidth - DIVIDER_WIDTH}px`; + + if (durationInMs) { + await sleep(durationInMs); + panelWrapperRef.current.style.transition = oldPanelWrapperTransition; + dividerRef.current.style.transition = oldDividerTransition; + } + } + + function setResizingState() { + if (!canResize()) { + return; + } + setIsResizing(true); + } + + function unsetResizingState() { + if (!canResize()) { + return; + } + setIsResizing(false); + } + + function collapse() { + setCollapsed(true); + resizePanelTo(collapsedWidth, DEFAULT_COLLAPSE_DURATION_IN_MS); + } + + function expand() { + setCollapsed(false); + resizePanelTo(defaultWidth, DEFAULT_COLLAPSE_DURATION_IN_MS); + } + + function isCollapsed() { + return collapsed; + } + + const leftPanelController: ILeftPanelController = { + collapse, + expand, + isCollapsed, + }; + + return ( + + + + {panel} + + + + + {children} + + + ); +} + +export function useLeftPanelCollapseController() { + return useContext(LeftPanelControllerContext); +} diff --git a/app/cdap/components/StudioV2/Layouts/SectionWithPanel.tsx b/app/cdap/components/StudioV2/Layouts/SectionWithPanel.tsx new file mode 100644 index 00000000000..831e6b87736 --- /dev/null +++ b/app/cdap/components/StudioV2/Layouts/SectionWithPanel.tsx @@ -0,0 +1,454 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React, { PropsWithChildren, createContext, useContext, useRef, useState } from 'react'; +import styled from 'styled-components'; +import { sleep } from '../utils/time'; + +export type PanelOpeningDirection = 'left' | 'top' | 'right' | 'bottom'; + +function isHorizontal(direction: PanelOpeningDirection): boolean { + return ['left', 'right'].includes(direction); +} + +function isPanelFirst(direction: PanelOpeningDirection): boolean { + return ['left', 'top'].includes(direction); +} + +export interface ISectionWithPanelProps { + panel: JSX.Element; + defaultSize?: number; + resizable?: boolean; + collapsedSize?: number; + isInitiallyCollapsed?: boolean; + opensFrom: PanelOpeningDirection; +} + +const DEFAULT_PANEL_SIZE = 200; +const DEFAULT_PANEL_COLLAPSED_SIZE = 48; +const DIVIDER_SIZE = 8; +const DEFAULT_COLLAPSE_DURATION_IN_MS = 100; +const DIVIDER_HIGHLIGHT_COLOR = '#3367d6'; + +interface IDirectionalPanelProps { + opensFrom: PanelOpeningDirection; +} + +const SectionWithPanelWrapper = styled.div` + position: relative; + display: flex; + width: 100%; + height: 100%; + flex-direction: ${({ opensFrom }) => (isHorizontal(opensFrom) ? 'row' : 'column')}; + align-items: stretch; + overflow: hidden; + flex-wrap: nowrap; +`; + +interface IPanelSectionsProps extends IDirectionalPanelProps { + disablePointer?: boolean; + defaultSize?: number; +} + +const PanelWrapper = styled.div` + overflow: hidden; + ${({ opensFrom, defaultSize }) => + isHorizontal(opensFrom) + ? ` + width: ${defaultSize || DEFAULT_PANEL_SIZE}px; + height: 100%; + ` + : ` + width: 100%; + height: ${defaultSize || DEFAULT_PANEL_SIZE}px; + `} + + ${({ disablePointer }) => (disablePointer ? 'pointerEvents: none; user-select: none;' : '')}; +`; + +interface IPanelDividerProps extends IDirectionalPanelProps { + isResizable?: boolean; + defaultCollapsedSize?: number; + defaultSize?: number; +} + +function getDividerRect( + panelOpensFrom: PanelOpeningDirection, + defaultCollapsedSize: number, + defaultSize: number +): string { + const dividerPosition = + Math.max( + defaultCollapsedSize || DEFAULT_PANEL_COLLAPSED_SIZE, + defaultSize || DEFAULT_PANEL_SIZE + ) - DIVIDER_SIZE; + + switch (panelOpensFrom) { + case 'left': + return ` + top: 0; + bottom: 0; + left: ${dividerPosition}px; + width: ${DIVIDER_SIZE}px; + padding-left: ${DIVIDER_SIZE - 1}px; + `; + case 'top': + return ` + left: 0; + right: 0; + top: ${dividerPosition}px; + height: ${DIVIDER_SIZE}px; + padding-top: ${DIVIDER_SIZE - 1}px; + `; + case 'right': + return ` + top: 0; + bottom: 0; + right: ${dividerPosition}px; + width: ${DIVIDER_SIZE}px; + padding-right: ${DIVIDER_SIZE - 1}px; + `; + case 'bottom': + return ` + left: 0; + right: 0; + bottom: ${dividerPosition}px; + height: ${DIVIDER_SIZE}px; + padding-bottom: ${DIVIDER_SIZE - 1}px; + `; + default: + return ''; + } +} + +function getDividerResizeHandleRect(panelOpensFrom: PanelOpeningDirection): string { + switch (panelOpensFrom) { + case 'left': + return ` + width: 3px; + height: 22px; + top: 50%; + margin-top: -11px; + left: 1.5px; + `; + case 'top': + return ` + height: 3px; + width: 22px; + left: 50%; + margin-left: -11px; + top: 1.5px; + `; + case 'right': + return ` + width: 3px; + height: 22px; + top: 50%; + margin-top: -11px; + right: 1.5px; + `; + case 'bottom': + return ` + height: 3px; + width: 22px; + left: 50%; + margin-left: -11px; + bottom: 1.5px; + `; + default: + return ''; + } +} + +const PanelDivider = styled.div` + position: absolute; + box-sizing: border-box; + background: transparent; + touch-action: none; + + ${(props) => getDividerRect(props.opensFrom, props.defaultCollapsedSize, props.defaultSize)} + + ${(props) => + props.isResizable + ? ` + &::before { + position: absolute; + content: ' '; + background: rgb(128, 134, 139); + border-radius: 1.5px; + ${getDividerResizeHandleRect(props.opensFrom)} + } + + &:hover, &:focus, &:active { + &::before { + background: var(--cm-sys-color-primary, ${DIVIDER_HIGHLIGHT_COLOR}); + } + cursor: ${isHorizontal(props.opensFrom) ? 'ew-resize' : 'ns-resize'}; + + & > div { + background: var(--cm-sys-color-primary, ${DIVIDER_HIGHLIGHT_COLOR}); + cursor: ${isHorizontal(props.opensFrom) ? 'ew-resize' : 'ns-resize'}; + } + } + ` + : ''}; +`; + +const DividerLine = styled.div` + ${({ opensFrom }) => + isHorizontal(opensFrom) ? 'width: 1px; height: 100%;' : 'height: 1px; width: 100%;'} + + background: var(--cm-sys-color-hairline, rgba(0, 0, 0, 0.12)); +`; + +const MainWrapper = styled.div` + flex-grow: 1; + flex-shrink: 1; + flex-basis: 0; + min-width: 0; + min-height: 0; + overflow: hidden; + ${({ disablePointer }) => (disablePointer ? 'pointer-events: none; user-select: none;' : '')} +`; + +interface IPanelCollapseController { + isCollapsed(): boolean; + collapse(): void; + expand(): void; +} + +const defaultPanelCollapseController: IPanelCollapseController = { + isCollapsed() { + return false; + }, + collapse() {}, + expand() {}, +}; + +const PanelCollapseControllerContext = createContext( + defaultPanelCollapseController +); + +function getUpdatedPanelSize( + panelOpensFrom: PanelOpeningDirection, + minPanelSize: number, + panelWrapperEl: HTMLElement, + resizingEvent: React.PointerEvent +): number { + const vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0); + const vh = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0); + + const boundingRect = panelWrapperEl.getBoundingClientRect(); + const { width, height, left, top, right, bottom } = boundingRect; + + let distFromEdge = 0; + let currentPanelSize = 0; + let currentResizingEdgePos = 0; + + switch (panelOpensFrom) { + case 'left': + distFromEdge = resizingEvent.clientX; + currentPanelSize = width; + currentResizingEdgePos = right; + break; + case 'top': + distFromEdge = resizingEvent.clientY; + currentPanelSize = height; + currentResizingEdgePos = bottom; + break; + case 'right': + distFromEdge = vw - resizingEvent.clientX; + currentPanelSize = width; + currentResizingEdgePos = vw - left; + break; + case 'bottom': + distFromEdge = vh - resizingEvent.clientY; + currentPanelSize = height; + currentResizingEdgePos = vh - top; + break; + default: + return 0; + } + + const diff = distFromEdge - currentResizingEdgePos; + return Math.max(currentPanelSize + diff, minPanelSize); +} + +export default function SectionWithPanel({ + panel, + opensFrom, + defaultSize = DEFAULT_PANEL_SIZE, + resizable = false, + collapsedSize = DEFAULT_PANEL_COLLAPSED_SIZE, + isInitiallyCollapsed = false, + children, +}: PropsWithChildren) { + const [collapsed, setCollapsed] = useState(isInitiallyCollapsed); + const [isResizing, setIsResizing] = useState(false); + const panelWrapperRef = useRef(null); + const dividerRef = useRef(null); + + function canResize() { + return resizable && panelWrapperRef.current && dividerRef.current && !collapsed; + } + + function handlePanelResize(event: React.PointerEvent): void { + if (!canResize() || !isResizing) { + return; + } + + event.preventDefault(); + event.stopPropagation(); + + const newPanelSize = getUpdatedPanelSize( + opensFrom, + collapsedSize, + panelWrapperRef.current, + event + ); + resizePanelTo(opensFrom, newPanelSize); + } + + async function resizePanelTo( + opensFrom: PanelOpeningDirection, + newSize: number, + durationInMs: number = 0 + ): Promise { + if (!panelWrapperRef.current || !dividerRef.current) { + return; + } + + const oldPanelWrapperTransition = panelWrapperRef.current.style.transition; + const oldDividerTransition = dividerRef.current.style.transition; + + const transitioningDimension = isHorizontal(opensFrom) ? 'width' : 'height'; + + if (durationInMs) { + panelWrapperRef.current.style.transition = `${transitioningDimension} ${durationInMs / + 1000}s linear`; + dividerRef.current.style.transition = `${opensFrom} ${durationInMs / 1000}s linear`; + } + panelWrapperRef.current.style[transitioningDimension] = `${newSize}px`; + dividerRef.current.style[opensFrom] = `${newSize - DIVIDER_SIZE}px`; + + if (durationInMs) { + await sleep(durationInMs); + panelWrapperRef.current.style.transition = oldPanelWrapperTransition; + dividerRef.current.style.transition = oldDividerTransition; + } + } + + function setResizingState() { + if (!canResize()) { + return; + } + setIsResizing(true); + } + + function unsetResizingState() { + if (!canResize()) { + return; + } + setIsResizing(false); + } + + function collapse() { + setCollapsed(true); + resizePanelTo(opensFrom, collapsedSize, DEFAULT_COLLAPSE_DURATION_IN_MS); + } + + function expand() { + setCollapsed(false); + resizePanelTo(opensFrom, defaultSize, DEFAULT_COLLAPSE_DURATION_IN_MS); + } + + function isCollapsed() { + return collapsed; + } + + const panelCollapseController: IPanelCollapseController = { + collapse, + expand, + isCollapsed, + }; + + function renderPanel() { + return ( + + {panel} + + ); + } + + function renderDivider() { + return ( + + + + ); + } + + function renderMain() { + return ( + + {children} + + ); + } + + function renderPanelAndMainInOrder() { + if (isPanelFirst(opensFrom)) { + return ( + <> + {renderPanel()} + {renderDivider()} + {renderMain()} + + ); + } + + return ( + <> + {renderMain()} + {renderDivider()} + {renderPanel()} + + ); + } + + return ( + + + {renderPanelAndMainInOrder()} + + + ); +} + +export function usePanelCollapseController() { + return useContext(PanelCollapseControllerContext); +} diff --git a/app/cdap/components/StudioV2/PipelineDetailsView/index.tsx b/app/cdap/components/StudioV2/PipelineDetailsView/index.tsx new file mode 100644 index 00000000000..82a1237a95a --- /dev/null +++ b/app/cdap/components/StudioV2/PipelineDetailsView/index.tsx @@ -0,0 +1,121 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React from 'react'; +import styled from 'styled-components'; +import { useLocation } from 'react-router'; +import SectionWithPanel, { usePanelCollapseController } from '../Layouts/SectionWithPanel'; +import { useHideFooterInPage } from 'components/FooterContext'; +import { IconButton } from '@material-ui/core'; +import KeyboardCapslockIcon from '@material-ui/icons/KeyboardCapslock'; + +const Paper = styled.div` + background: white; +`; + +const PanelHeader = styled.div` + height: 48px; + border-bottom: 1px rgba(0, 0, 0, 0.12) solid; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 12px; +`; + +const Rotated = styled.div` + transform: rotate(${({ angle }) => angle}deg); + transition: transform 0.1s linear; + flex-grow: 1; +`; + +const PanelName = styled.span` + flex-shrink: 1; + min-width: 0; + width: 100px; +`; + +function GenericPanelComp({ direction }) { + const panelCollapseController = usePanelCollapseController(); + + function getCollapseAngle() { + if (direction === 'Left') { + return 270; + } else if (direction === 'Top') { + return 0; + } else if (direction === 'Right') { + return 90; + } else if (direction === 'Bottom') { + return 180; + } else { + return 0; + } + } + + function renderCollapseIcon() { + return ( + + + + ); + } + + function renderExpandIcon() { + return ( + + + + ); + } + + return ( + + + {direction !== 'Right' && {direction} panel} + + {panelCollapseController.isCollapsed() ? renderExpandIcon() : renderCollapseIcon()} + + {direction === 'Right' && {direction} panel} + + + ); +} + +export default function PipelineDetailsView() { + const location = useLocation(); + useHideFooterInPage(); + + return ( + } resizable> + } resizable> + } resizable> + } + resizable + > + Main + + + + + ); +} diff --git a/app/cdap/components/StudioV2/app.css b/app/cdap/components/StudioV2/app.css new file mode 100644 index 00000000000..cc399c14dd2 --- /dev/null +++ b/app/cdap/components/StudioV2/app.css @@ -0,0 +1,10731 @@ +/* + * Copyright © 2015-2018 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + @font-face { + font-family: 'icomoon'; + src: url('/cdap_assets/fonts/icomoon.eot'); + src: url('/cdap_assets/fonts/icomoon.eot') format('embedded-opentype'), url('/cdap_assets/fonts/icomoon.woff') format('woff'), url('/cdap_assets/fonts/icomoon.ttf') format('truetype'), url('/cdap_assets/fonts/icomoon.svg') format('svg'); + font-weight: normal; + font-style: normal; +} +[class^="icon-"], +[class*=" icon-"] { + font-family: 'icomoon'; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +[class^="icon-"].fa, +[class*=" icon-"].fa { + font-family: 'icomoon'; +} +.icon-gce:before { + content: "\ea20"; +} +.icon-aws:before { + content: "\ea21"; +} +.icon-parquet:before { + content: "\ea18"; +} +.icon-tokenizeranalytics:before { + content: "\ea19"; +} +.icon-logisticregressionanalytics:before { + content: "\ea1a"; +} +.icon-hashingtffeaturegenerator:before { + content: "\ea1b"; +} +.icon-decisiontreeanalytics:before { + content: "\ea1c"; +} +.icon-skipgram:before { + content: "\ea1d"; +} +.icon-pipeline:before { + content: "\ea1e"; +} +.icon-cdapstream:before { + content: "\ea1f"; +} +.icon-recordsplitter:before { + content: "\ea11"; +} +.icon-OrientDB:before { + content: "\ea12"; +} +.icon-DateTransform:before { + content: "\ea13"; +} +.icon-apachekudu:before { + content: "\ea14"; +} +.icon-Verticabulkexport:before { + content: "\ea15"; +} +.icon-snowflake:before { + content: "\ea16"; +} +.icon-redshifttoS3:before { + content: "\ea17"; +} +.icon-S3toredshift:before { + content: "\ea2e"; +} +.icon-library:before { + content: "\ea45"; +} +.icon-FileAppender:before { + content: "\ea0f"; +} +.icon-Repartitioner:before { + content: "\ea10"; +} +.icon-Redshiftbulkload:before { + content: "\ea0e"; +} +.icon-FTPcopy:before { + content: "\ea05"; +} +.icon-FTPdelete:before { + content: "\ea06"; +} +.icon-Filereader:before { + content: "\ea07"; +} +.icon-XMLvalidator:before { + content: "\ea08"; +} +.icon-Staterestore:before { + content: "\ea09"; +} +.icon-Dataformatter:before { + content: "\ea0a"; +} +.icon-Datamasking:before { + content: "\ea0b"; +} +.icon-XMLschemagenerator:before { + content: "\ea0c"; +} +.icon-Verticabulkload:before { + content: "\ea0d"; +} +.icon-Shovel:before { + content: "\ea04"; +} +.icon-Solution:before { + content: "\ea02"; +} +.icon-DataPreparation:before { + content: "\ea03"; +} +.icon-TrashSink:before { + content: "\ea00"; +} +.icon-TopN:before { + content: "\ea01"; +} +.icon-0:before { + content: "\e9dc"; +} +.icon-1:before { + content: "\e9dd"; +} +.icon-2:before { + content: "\e9de"; +} +.icon-3:before { + content: "\e9df"; +} +.icon-4:before { + content: "\e9e0"; +} +.icon-5:before { + content: "\e9e1"; +} +.icon-6:before { + content: "\e9e2"; +} +.icon-7:before { + content: "\e9e3"; +} +.icon-8:before { + content: "\e9e4"; +} +.icon-9:before { + content: "\e9e5"; +} +.icon-A:before { + content: "\e9e6"; +} +.icon-B:before { + content: "\e9e7"; +} +.icon-C:before { + content: "\e9e8"; +} +.icon-D:before { + content: "\e9e9"; +} +.icon-E:before { + content: "\e9ea"; +} +.icon-F:before { + content: "\e9eb"; +} +.icon-G:before { + content: "\e9ec"; +} +.icon-H:before { + content: "\e9ed"; +} +.icon-I:before { + content: "\e9ee"; +} +.icon-J:before { + content: "\e9ef"; +} +.icon-K:before { + content: "\e9f0"; +} +.icon-L:before { + content: "\e9f1"; +} +.icon-M:before { + content: "\e9f2"; +} +.icon-N:before { + content: "\e9f3"; +} +.icon-O:before { + content: "\e9f4"; +} +.icon-P:before { + content: "\e9f5"; +} +.icon-Q:before { + content: "\e9f6"; +} +.icon-R:before { + content: "\e9f7"; +} +.icon-S:before { + content: "\e9f8"; +} +.icon-T:before { + content: "\e9f9"; +} +.icon-U:before { + content: "\e9fa"; +} +.icon-V:before { + content: "\e9fb"; +} +.icon-W:before { + content: "\e9fc"; +} +.icon-X:before { + content: "\e9fd"; +} +.icon-Y:before { + content: "\e9fe"; +} +.icon-Z:before { + content: "\e9ff"; +} +.icon-rulesengine:before { + content: "\e9d1"; +} +.icon-failpipeline:before { + content: "\e9d2"; +} +.icon-fastfilter:before { + content: "\e9d3"; +} +.icon-http:before { + content: "\e9d4"; +} +.icon-httptohdfs:before { + content: "\e9d5"; +} +.icon-sampling:before { + content: "\e9d6"; +} +.icon-dynamoDB:before { + content: "\e9d7"; +} +.icon-cloudera:before { + content: "\e9d8"; +} +.icon-datawarehouse:before { + content: "\e9d9"; +} +.icon-Hortonworks:before { + content: "\e9da"; +} +.icon-mapr:before { + content: "\e9db"; +} +.icon-SQL:before { + content: "\e9d0"; +} +.icon-GenericAction:before { + content: "\e9c6"; +} +.icon-GenericSink:before { + content: "\e9c7"; +} +.icon-GenericSource:before { + content: "\e9c8"; +} +.icon-GenericTransform:before { + content: "\e9c9"; +} +.icon-OracleExport:before { + content: "\e9ca"; +} +.icon-JavaTransform:before { + content: "\e9cb"; +} +.icon-RunTransform:before { + content: "\e9cc"; +} +.icon-MainframeReader:before { + content: "\e9cd"; +} +.icon-WordCount:before { + content: "\e9ce"; +} +.icon-HelloWorld:before { + content: "\e9cf"; +} +.icon-SnapshotTextSink:before { + content: "\e9c5"; +} +.icon-hdfsdelete:before { + content: "\e9b4"; +} +.icon-hdfsmove:before { + content: "\e9b5"; +} +.icon-windowssharecopy:before { + content: "\e9b6"; +} +.icon-desiciontreepredictor:before { + content: "\e9b7"; +} +.icon-desiciontreetrainer .path1:before { + content: "\e9b8"; + color: #585858; +} +.icon-desiciontreetrainer .path2:before { + content: "\e9b9"; + margin-left: -1em; + color: #585858; +} +.icon-desiciontreetrainer .path3:before { + content: "\e9ba"; + margin-left: -1em; + color: #ffffff; +} +.icon-skipgramfeaturegenerator:before { + content: "\e9bb"; +} +.icon-skipgramtrainer:before { + content: "\e9bc"; +} +.icon-LogisticRegressiontrainer:before { + content: "\e9bd"; +} +.icon-window:before { + content: "\e9be"; +} +.icon-httppoller:before { + content: "\e9bf"; +} +.icon-LogisticRegressionclassifier:before { + content: "\e9c0"; +} +.icon-HashingTF:before { + content: "\e9c1"; +} +.icon-XMLtoJSON:before { + content: "\e9c2"; +} +.icon-XMLmultiparser:before { + content: "\e9c3"; +} +.icon-normalize:before { + content: "\e9c4"; +} +.icon-substring:before { + content: "\e9ad"; +} +.icon-lowercase:before { + content: "\e9ae"; +} +.icon-uppercase:before { + content: "\e9af"; +} +.icon-trim:before { + content: "\e9b0"; +} +.icon-titlecase:before { + content: "\e9b1"; +} +.icon-merge:before { + content: "\e9b2"; +} +.icon-split:before { + content: "\e9b3"; +} +.icon-DataWrangler:before { + content: "\e9a6"; +} +.icon-NGram:before { + content: "\e9a7"; +} +.icon-Run:before { + content: "\e9a8"; +} +.icon-FeatureGenerator:before { + content: "\e9a9"; +} +.icon-OracleDump:before { + content: "\e9aa"; +} +.icon-Tokenizer:before { + content: "\e9ab"; +} +.icon-DesicionTree:before { + content: "\e9ac"; +} +.icon-tagmanagement:before { + content: "\e99b"; +} +.icon-viewinvalidtransactions:before { + content: "\e99c"; +} +.icon-deletealldatasets:before { + content: "\e99d"; +} +.icon-resetinstance:before { + content: "\e99e"; +} +.icon-manageroles:before { + content: "\e99f"; +} +.icon-addroles:before { + content: "\e9a0"; +} +.icon-instancepreference:before { + content: "\e9a1"; +} +.icon-managenamespaces:before { + content: "\e9a2"; +} +.icon-deletenamespaces:before { + content: "\e9a3"; +} +.icon-addnamespaces:before { + content: "\e9a4"; +} +.icon-viewconfiguration:before { + content: "\e9a5"; +} +.icon-CDAPExtensions:before { + content: "\e999"; +} +.icon-datapacks:before { + content: "\e993"; +} +.icon-usecases:before { + content: "\e994"; +} +.icon-pipelines:before { + content: "\e995"; +} +.icon-artifacts:before { + content: "\e996"; +} +.icon-all:before { + content: "\e997"; +} +.icon-support:before { + content: "\e98f"; +} +.icon-logout:before { + content: "\e990"; +} +.icon-caskhome:before { + content: "\e991"; +} +.icon-documentation:before { + content: "\e992"; +} +.icon-Encryptor:before { + content: "\e98e"; +} +.icon-Decryptor:before { + content: "\e97c"; +} +.icon-Amazon-Kinesis:before { + content: "\e97d"; +} +.icon-Big-Query:before { + content: "\e97e"; +} +.icon-ORC:before { + content: "\e97f"; +} +.icon-rowdenormalizer:before { + content: "\e980"; +} +.icon-joiner:before { + content: "\e981"; +} +.icon-COBOLcopybookreader:before { + content: "\e982"; +} +.icon-deduplicator:before { + content: "\e983"; +} +.icon-azureblobstore:before { + content: "\e984"; +} +.icon-FTP:before { + content: "\e985"; +} +.icon-groupby:before { + content: "\e986"; +} +.icon-sparkmachinelearning:before { + content: "\e987"; +} +.icon-excelinputsource:before { + content: "\e988"; +} +.icon-solr:before { + content: "\e989"; +} +.icon-XMLparser:before { + content: "\e98a"; +} +.icon-XMLreader:before { + content: "\e98b"; +} +.icon-valuemapper:before { + content: "\e98c"; +} +.icon-sparkstreaming:before { + content: "\e98d"; +} +.icon-rename:before { + content: "\e979"; +} +.icon-archive:before { + content: "\e97a"; +} +.icon-ssh:before { + content: "\e97b"; +} +.icon-runtimestart:before { + content: "\e975"; +} +.icon-runtimestarttime:before { + content: "\e976"; +} +.icon-runtimestop:before { + content: "\e977"; +} +.icon-runtimestoptime:before { + content: "\e978"; +} +.icon-emailaction:before { + content: "\e96f"; +} +.icon-filecopyaction:before { + content: "\e970"; +} +.icon-filemoveaction:before { + content: "\e971"; +} +.icon-impalahiveaction:before { + content: "\e972"; +} +.icon-SQLaction:before { + content: "\e973"; +} +.icon-sshaction:before { + content: "\e974"; +} +.icon-lock_close:before { + content: "\e96d"; +} +.icon-lock_open:before { + content: "\e96e"; +} +.icon-disable:before { + content: "\e969"; +} +.icon-enable:before { + content: "\e96a"; +} +.icon-needle_sl:before { + content: "\e96b"; +} +.icon-needle_lg:before { + content: "\e96c"; +} +.icon-collapse:before { + content: "\e964"; +} +.icon-config:before { + content: "\e965"; +} +.icon-expend:before { + content: "\e966"; +} +.icon-eye:before { + content: "\e967"; +} +.icon-logview:before { + content: "\e968"; +} +.icon-deduper:before { + content: "\e95e"; +} +.icon-distinct:before { + content: "\e95f"; +} +.icon-naivebayestrainer:before { + content: "\e960"; +} +.icon-groupbyaggregate:before { + content: "\e961"; +} +.icon-naivebayesclassifier:before { + content: "\e962"; +} +.icon-upload:before { + content: "\e963"; +} +.icon-streamview:before { + content: "\e95d"; +} +.icon-tracker:before { + content: "\e95c"; +} +.icon-javascript:before { + content: "\e95b"; +} +.icon-jsonformatter:before { + content: "\e95a"; +} +.icon-structuredrecord:before { + content: "\e93f"; +} +.icon-csvformatter:before { + content: "\e940"; +} +.icon-csvparser:before { + content: "\e949"; +} +.icon-jsonparser:before { + content: "\e94a"; +} +.icon-clonerecord:before { + content: "\e94b"; +} +.icon-streamformatter:before { + content: "\e94c"; +} +.icon-compressor:before { + content: "\e94d"; +} +.icon-decompressor:before { + content: "\e94e"; +} +.icon-hasher:before { + content: "\e94f"; +} +.icon-decoder:before { + content: "\e950"; +} +.icon-encoder:before { + content: "\e951"; +} +.icon-pythonevaluator:before { + content: "\e952"; +} +.icon-mongodb:before { + content: "\e953"; +} +.icon-teradata:before { + content: "\e954"; +} +.icon-cassandra:before { + content: "\e955"; +} +.icon-elasticsearch:before { + content: "\e956"; +} +.icon-hive:before { + content: "\e957"; +} +.icon-hdfs:before { + content: "\e958"; +} +.icon-hbase:before { + content: "\e959"; +} +.icon-jms:before { + content: "\e93e"; +} +.icon-amazonsqs:before { + content: "\e900"; +} +.icon-corevalidator:before { + content: "\e901"; +} +.icon-cube:before { + content: "\e902"; +} +.icon-database:before { + content: "\e903"; +} +.icon-datagenerator:before { + content: "\e904"; +} +.icon-file:before { + content: "\e905"; +} +.icon-kafka:before { + content: "\e906"; +} +.icon-kvtable:before { + content: "\e907"; +} +.icon-logparser:before { + content: "\e908"; +} +.icon-s3:before { + content: "\e909"; +} +.icon-s3avro:before { + content: "\e90a"; +} +.icon-s3parquet:before { + content: "\e90b"; +} +.icon-script:before { + content: "\e90c"; +} +.icon-scriptfilter:before { + content: "\e90d"; +} +.icon-sink:before { + content: "\e90e"; +} +.icon-snapshotavro:before { + content: "\e90f"; +} +.icon-snapshotparquet:before { + content: "\e910"; +} +.icon-streams:before { + content: "\e911"; +} +.icon-table:before { + content: "\e912"; +} +.icon-tpfsavro:before { + content: "\e913"; +} +.icon-tpfsparquet:before { + content: "\e914"; +} +.icon-twitter:before { + content: "\e915"; +} +.icon-validator:before { + content: "\e916"; +} +.icon-adapter:before { + content: "\e917"; +} +.icon-app:before { + content: "\e918"; +} +.icon-applicationtemplates:before { + content: "\e919"; +} +.icon-avro:before { + content: "\e91a"; +} +.icon-calendar:before { + content: "\e91b"; +} +.icon-clean:before { + content: "\e91c"; +} +.icon-clone:before { + content: "\e91d"; +} +.icon-configuration:before { + content: "\e91e"; +} +.icon-datasets:before { + content: "\e91f"; +} +.icon-datatypes:before { + content: "\e920"; +} +.icon-delete:before { + content: "\e921"; +} +.icon-draft:before { + content: "\e922"; +} +.icon-ETLBatch:before, +.icon-cdap-etl-batch:before { + content: "\e923"; +} +.icon-ETLRealtime:before, +.icon-cdap-etl-realtime:before { + content: "\e924"; +} +.icon-ETLsinks:before { + content: "\e925"; +} +.icon-ETLsources:before { + content: "\e926"; +} +.icon-ETLtemplates:before { + content: "\e927"; +} +.icon-ETLtransforms:before { + content: "\e928"; +} +.icon-export:before { + content: "\e929"; +} +.icon-failed:before { + content: "\e92a"; +} +.icon-fist:before { + content: "\e92b"; +} +.icon-fit:before { + content: "\e92c"; +} +.icon-hydrator:before { + content: "\e92d"; +} +.icon-import:before { + content: "\e92e"; +} +.icon-mapreduce:before { + content: "\e92f"; +} +.icon-paused:before { + content: "\e930"; +} +.icon-plugin-stream:before { + content: "\e931"; +} +.icon-programtypes:before { + content: "\e932"; +} +.icon-projection:before { + content: "\e933"; +} +.icon-publish:before { + content: "\e934"; +} +.icon-reset:before { + content: "\e935"; +} +.icon-running:before { + content: "\e936"; +} +.icon-savedraft:before { + content: "\e937"; +} +.icon-schemaedge:before { + content: "\e938"; +} +.icon-service:before { + content: "\e939"; +} +.icon-spark:before { + content: "\e93a"; +} +.icon-start:before { + content: "\e93b"; +} +.icon-stopped:before { + content: "\e93c"; +} +.icon-suspend:before { + content: "\e93d"; +} +.icon-systempreferences:before { + content: "\e941"; +} +.icon-systemsecurity:before { + content: "\e942"; +} +.icon-tigon:before { + content: "\e943"; +} +.icon-validate:before { + content: "\e944"; +} +.icon-worker:before { + content: "\e945"; +} +.icon-workflow:before { + content: "\e946"; +} +.icon-zoomIn:before { + content: "\e947"; +} +.icon-zoomout:before { + content: "\e948"; +} +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +/* + * Copyright © 2018 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +.cdap-modal.modal-dialog { + margin-top: 125px; +} +.cdap-modal.modal-dialog .modal-content { + border-radius: 0; + border: 0; +} +.cdap-modal.modal-dialog .modal-header { + padding: 0 10px; + background-color: #464a57; + border-bottom: 0; + height: 40px; + display: flex; + align-items: center; +} +.cdap-modal.modal-dialog .modal-header .modal-title { + font-weight: normal; + font-size: 14px; + color: white; + line-height: 40px; + width: 100%; +} +.cdap-modal.modal-dialog .modal-header .modal-title .fa { + cursor: pointer; +} +.cdap-modal.modal-dialog .modal-header button.close { + background: transparent; + border: 0; + color: white; + font-weight: bold; + font-size: 18px; + opacity: 1; + text-shadow: none; + padding: 0; + float: none; + margin: 0; +} +.cdap-modal.modal-dialog .modal-header button.close:hover, +.cdap-modal.modal-dialog .modal-header button.close:active, +.cdap-modal.modal-dialog .modal-header button.close:focus { + outline: none; +} +.cdap-modal.modal-dialog .modal-body { + padding: 10px; +} +.cdap-modal.modal-dialog .modal-body.loading { + padding: 25px; +} +.cdap-modal.modal-dialog .modal-body.loading h3 { + margin: 0; + font-size: 45px; +} +.cdap-modal.modal-dialog .modal-footer { + text-align: left; + padding: 10px; +} +.cdap-modal.modal-dialog .modal-footer .btn { + margin: 0; +} +.cdap-modal.modal-dialog .modal-footer .btn:first-of-type { + margin-right: 10px; +} +/* +NOTE: Need to have these definitions here so that these CSS variables have default +values in Angular apps +*/ +:root { + --brand-primary-color: #3b78e7; + --navbar-color: #333333; + --font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; +} +html { + position: relative; + min-height: 100%; + font-size: 13px; +} +body { + margin-bottom: 80px; + font-family: var(--font-family); +} +body .dropdown-menu > li > a, +body .dropdown-menu > li.dropdown-header { + padding-left: 14px; +} +body .dropdown-menu > li > a > span.fa-fw { + margin-right: 5px; +} +body .dropdown-menu.typeahead { + cursor: default; + max-height: 200px; + overflow: auto; +} +body div.progress { + margin: 1px; + /* by default they have just margin-bottom: 20px */ +} +body main.container > div { + margin-bottom: 80px; +} +body main.container .sidebar ul li a { + display: block; +} +body main.container .sidebar ul li a.abstract.pull-left { + width: 80%; +} +body main.container .sidebar ul li a.abstract + a { + display: inline-block; + width: 20%; +} +.caret { + border-width: 6px 6px 0 6px; + margin-bottom: 1px; +} +.alerts { + position: absolute; + z-index: 999; + top: 90px; + left: 0; + right: 0; +} +.alerts .message-content { + color: white; +} +body.state-login .alerts { + top: 0; +} +.modal.center .modal-dialog { + position: fixed; + top: 40%; + left: 50%; + min-width: 320px; + max-width: 630px; + width: 50%; + transform: translateX(-50%) translateY(-50%); +} +.modal .modal-body { + max-height: 75vh; + overflow: auto; +} +.modal .modal-body .alerts { + position: fixed; +} +.modal-backdrop { + z-index: 1049; + height: 100%; +} +fieldset.row { + margin-bottom: 1px; +} +fieldset.tab-pane { + padding-top: 1em; +} +fieldset.tab-pane.am-fade.active-add { + animation-name: fadeIn; +} +span.fa-asterisk { + color: #d15668; + font-size: 11px; +} +.form-control.ng-dirty.ng-invalid { + border-color: #a94442; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} +.form-control.ng-dirty.ng-invalid:focus { + border-color: #843534; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483; +} +@media (max-width: 767px) { + .form-control.ng-dirty.ng-invalid { + margin-bottom: 1px; + } +} +span.text-info[bs-tooltip] { + cursor: help; +} +hr { + border-color: #b3b3b3; +} +.jumbotron { + margin-top: 1em; +} +.nav-tabs > li > a { + cursor: pointer; +} +footer.app-footer { + font-size: 14px; + position: absolute; + bottom: 0; + z-index: 999; + width: 100%; +} +footer.app-footer > .container { + padding-right: 15px; + padding-left: 15px; +} +footer.app-footer div.text-muted { + margin: 10px 0; +} +@media (min-width: 1199px) { + footer.app-footer div.text-muted > div:first-child { + text-align: left; + } + footer.app-footer div.text-muted > div:last-child { + text-align: right; + } +} +@media (max-width: 1199px) { + footer.app-footer div.text-muted > div { + text-align: center; + } +} +footer.app-footer img { + height: 26px; + width: 26px; + margin-right: 8px; +} +footer.app-footer p, +footer.app-footer ul { + height: 32px; + margin: 0; +} +footer.app-footer span, +footer.app-footer li { + line-height: 32px; + vertical-align: middle; +} +.mapreduce-components { + margin-top: 15px; +} +.mapreduce-components .run-status-box { + background: #e6e6e6; + margin-left: 0; + border-radius: 4px; +} +.mapreduce-components .run-status-box .item { + border-right: 1px solid #93969f; + min-height: 60px; + padding-top: 15px; + text-align: left; +} +.mapreduce-components .run-status-box .item:last-child { + border-right: 0; +} +.mapreduce-components .component-box .task-item { + width: 12.5%; + float: left; + padding-left: 15px; + padding-right: 15px; + text-align: center; +} +.breadcrumb { + margin: 0; + padding: 0; +} +[cdap-object-heading] { + margin-top: 20px; +} +.btn-cdap { + background-color: #0077dc; + color: #ffffff; +} +.btn-cdap:hover, +.btn-cdap:active, +.btn-cdap:focus { + color: #ffffff; +} +.modeless-container { + background: #dbdbdb; + position: absolute; + z-index: 999; + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.5); + color: #333333; + background-color: white; + margin-bottom: 60px; +} +.modeless-container .modeless-header { + background-color: #f5f5f5; + height: 60px; + padding: 0; + border-radius: 4px 4px 0 0; + display: flex; + align-items: center; + justify-content: space-between; + border-bottom: 1px solid #cccccc; + border-radius: 0; +} +.modeless-container .modeless-header .modeless-title { + color: #333333; + padding-left: 15px; + max-width: 80%; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + font-weight: 500; + margin: 0 auto 0 0; + font-size: 16px; + line-height: 20px; +} +.modeless-container .modeless-header .btn .fa-remove, +.modeless-container .modeless-header .btn .icon-close { + color: #333333; + width: 16px; + height: 16px; + font-size: 16px; + margin-right: 5px; +} +.modeless-container .modeless-content { + display: flex; + height: calc(100% - 60px); +} +/* This is the fallback for browsers that doesn't support css grid */ +.grid.grid-container { + display: table; + width: 100%; + border-collapse: collapse; +} +.grid.grid-container.disabled, +.grid.grid-container.disabled * { + cursor: not-allowed !important; +} +.grid.grid-container .grid-row { + width: 100%; + display: table-row; +} +.grid.grid-container .grid-row > strong, +.grid.grid-container .grid-row > div { + display: table-cell; +} +.grid.grid-container .grid-header { + display: table-header-group; +} +.grid.grid-container .grid-header .grid-row > * { + display: table-cell; + padding: 10px; +} +.grid.grid-container .grid-body { + display: table-row-group; +} +.grid.grid-container .grid-body .grid-row:hover { + background: #f5f5f5; +} +.grid.grid-container .grid-body .grid-row:first-of-type > div { + border-top: 0; +} +.grid.grid-container .grid-body .grid-row:last-of-type > div { + border-bottom: 0; +} +/* End of css grid fallback */ +.grid.grid-container { + max-height: 200px; + overflow-y: auto; + display: grid; +} +.grid.grid-container.border-top-bottom { + border-top: 2px solid #bbbbbb; + border-bottom: 2px solid #bbbbbb; +} +.grid.grid-container.border-top-bottom .grid-body > .grid-row:last-child { + border-bottom: 0; +} +.grid.grid-container.disabled, +.grid.grid-container.disabled * { + cursor: not-allowed !important; +} +.grid.grid-container .grid-row { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(10px, 1fr)); +} +.grid.grid-container .grid-row > strong, +.grid.grid-container .grid-row > div { + border-left: 0; + border-bottom: 0; + padding: 5px; + max-width: 100%; + overflow: hidden; + word-break: inherit; + text-overflow: ellipsis; +} +.grid.grid-container .grid-header { + position: sticky; + display: grid; + top: 0; + background: white; +} +.grid.grid-container .grid-header > .grid-row { + border-bottom: 1px solid #bbbbbb; + padding: 0; + border-left: 0; + border-right: 0; + border-top: 0; +} +.grid.grid-container .grid-header.header-light { + color: #bbbbbb; +} +.grid.grid-container .grid-body { + display: grid; +} +.grid.grid-container .grid-body .grid-row { + padding: 7px 5px; + align-content: center; + align-items: center; + border-bottom: 1px solid #bbbbbb; +} +.grid.grid-container .grid-body .grid-row.grid-link { + cursor: pointer; +} +.grid.grid-container .grid-body .grid-row:hover { + background: #f5f5f5; +} +.grid.grid-container .grid-body .grid-row.highlighted { + border: 2px solid #8af302; + background-color: rgba(138, 243, 2, 0.1); +} +.grid.grid-container .grid-body a { + text-decoration: none; +} +.grid.grid-container.grid-compact .grid-header .grid-row > div, +.grid.grid-container.grid-compact .grid-body .grid-row > div { + padding: 5px 7px; +} +.grid.grid-container.grid-compact .grid-header { + background: #f5f5f5; + color: #666666; + font-weight: 600; +} +.grid.grid-container.grid-compact .grid-row { + border-bottom: 1px solid #dbdbdb; + min-height: 29px; + padding: 0; +} +.grid.grid-container.grid-compact .grid-body .grid-row > div { + border-right: none; +} +/* Truncate text with ellipsis helper */ +.truncate { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +body header.navbar-cdap { + margin-bottom: 0; +} +body.theme-cdap header.navbar-cdap { + background-color: #3c4355; +} +body header.navbar-hydrator { + border-top-width: 1px; + height: 60px; + margin: 0; +} +body.theme-cdap header.navbar-hydrator { +} +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +body.theme-cdap .btn-default, +body.theme-cdap .btn-primary, +body.theme-cdap .btn-success, +body.theme-cdap .btn-info, +body.theme-cdap .btn-warning, +body.theme-cdap .btn-danger { + background-image: none; +} +body.theme-cdap .btn-default:active, +body.theme-cdap .btn-primary:active, +body.theme-cdap .btn-success:active, +body.theme-cdap .btn-info:active, +body.theme-cdap .btn-warning:active, +body.theme-cdap .btn-danger:active, +body.theme-cdap .btn-default.active, +body.theme-cdap .btn-primary.active, +body.theme-cdap .btn-success.active, +body.theme-cdap .btn-info.active, +body.theme-cdap .btn-warning.active, +body.theme-cdap .btn-danger.active { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} +body.theme-cdap .btn-default .badge, +body.theme-cdap .btn-primary .badge, +body.theme-cdap .btn-success .badge, +body.theme-cdap .btn-info .badge, +body.theme-cdap .btn-warning .badge, +body.theme-cdap .btn-danger .badge { + text-shadow: none; +} +body.theme-cdap .btn:focus { + outline: none; +} +body.theme-cdap .btn:active, +body.theme-cdap .btn.active { + background-image: none; +} +body.theme-cdap .btn-default { + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b5bccc; + background-image: none; + border-color: #dfe2e9; +} +body.theme-cdap .btn-default:hover, +body.theme-cdap .btn-default:focus { + background-position: 0 -15px; + color: #6a7387; +} +body.theme-cdap .btn-default.active { + background-color: #e0e0e0; + border-color: #b5bccc; +} +body.theme-cdap .btn-default:active, +body.theme-cdap .btn-default:focus { + background-color: #fff; + border-color: #dfe2e9; +} +body.theme-cdap .btn-default:hover { + background-color: #e0e0e0; +} +body.theme-cdap .btn-default:disabled, +body.theme-cdap .btn-default[disabled] { + background-color: #e0e0e0; + background-image: none; + color: #6a7387; +} +body.theme-cdap .btn-primary { + background-image: linear-gradient(to bottom, #5a84e4 0%, #255ddb 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5a84e4', endColorstr='#ff255ddb', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #2359d4; + background-image: none; + border: none; +} +body.theme-cdap .btn-primary:hover, +body.theme-cdap .btn-primary:focus { + background-position: 0 -15px; + color: #ffffff; +} +body.theme-cdap .btn-primary.active { + background-color: #255ddb; + border-color: #2359d4; +} +body.theme-cdap .btn-primary:active, +body.theme-cdap .btn-primary:focus { + background-color: #5a84e4; + border-color: #5a84e4; +} +body.theme-cdap .btn-primary:hover { + background-color: #255ddb; +} +body.theme-cdap .btn-primary:disabled, +body.theme-cdap .btn-primary[disabled] { + background-color: #255ddb; + background-image: none; + color: #ffffff; +} +body.theme-cdap .btn-success { + background-image: linear-gradient(to bottom, #4ab63c 0%, #37882d 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4ab63c', endColorstr='#ff37882d', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #34802a; + background-image: none; + border: none; +} +body.theme-cdap .btn-success:hover, +body.theme-cdap .btn-success:focus { + background-position: 0 -15px; + color: #ffffff; +} +body.theme-cdap .btn-success.active { + background-color: #37882d; + border-color: #34802a; +} +body.theme-cdap .btn-success:active, +body.theme-cdap .btn-success:focus { + background-color: #4ab63c; + border-color: #4ab63c; +} +body.theme-cdap .btn-success:hover { + background-color: #37882d; +} +body.theme-cdap .btn-success:disabled, +body.theme-cdap .btn-success[disabled] { + background-color: #37882d; + background-image: none; + color: #ffffff; +} +body.theme-cdap .btn-info { + background-image: linear-gradient(to bottom, #666e83 0%, #4b5161 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff666e83', endColorstr='#ff4b5161', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #474c5b; + background-image: none; + border: none; +} +body.theme-cdap .btn-info:hover, +body.theme-cdap .btn-info:focus { + background-position: 0 -15px; + color: #ffffff; +} +body.theme-cdap .btn-info.active { + background-color: #4b5161; + border-color: #474c5b; +} +body.theme-cdap .btn-info:active, +body.theme-cdap .btn-info:focus { + background-color: #666e83; + border-color: #666e83; +} +body.theme-cdap .btn-info:hover { + background-color: #4b5161; +} +body.theme-cdap .btn-info:disabled, +body.theme-cdap .btn-info[disabled] { + background-color: #4b5161; + background-image: none; + color: #ffffff; +} +body.theme-cdap .btn-warning { + background-image: linear-gradient(to bottom, #f4b400 0%, #b78700 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff4b400', endColorstr='#ffb78700', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #ad7f00; + background-image: none; + border: none; +} +body.theme-cdap .btn-warning:hover, +body.theme-cdap .btn-warning:focus { + background-position: 0 -15px; + color: #ffffff; +} +body.theme-cdap .btn-warning.active { + background-color: #b78700; + border-color: #ad7f00; +} +body.theme-cdap .btn-warning:active, +body.theme-cdap .btn-warning:focus { + background-color: #f4b400; + border-color: #f4b400; +} +body.theme-cdap .btn-warning:hover { + background-color: #b78700; +} +body.theme-cdap .btn-warning:disabled, +body.theme-cdap .btn-warning[disabled] { + background-color: #b78700; + background-image: none; + color: #ffffff; +} +body.theme-cdap .btn-danger { + background-image: linear-gradient(to bottom, #d15668 0%, #b83246 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd15668', endColorstr='#ffb83246', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b03043; + background-image: none; + border: none; +} +body.theme-cdap .btn-danger:hover, +body.theme-cdap .btn-danger:focus { + background-position: 0 -15px; + color: #ffffff; +} +body.theme-cdap .btn-danger.active { + background-color: #b83246; + border-color: #b03043; +} +body.theme-cdap .btn-danger:active, +body.theme-cdap .btn-danger:focus { + background-color: #d15668; + border-color: #d15668; +} +body.theme-cdap .btn-danger:hover { + background-color: #b83246; +} +body.theme-cdap .btn-danger:disabled, +body.theme-cdap .btn-danger[disabled] { + background-color: #b83246; + background-image: none; + color: #ffffff; +} +body.theme-cdap .btn-blue { + background-image: linear-gradient(to bottom, #098cf9 0%, #056bc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff098cf9', endColorstr='#ff056bc0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #0465b6; + background-image: none; + border: none; + background-color: #098cf9; + color: white; +} +body.theme-cdap .btn-blue:hover, +body.theme-cdap .btn-blue:focus { + background-position: 0 -15px; + color: #ffffff; +} +body.theme-cdap .btn-blue.active { + background-color: #056bc0; + border-color: #0465b6; +} +body.theme-cdap .btn-blue:active, +body.theme-cdap .btn-blue:focus { + background-color: #098cf9; + border-color: #098cf9; +} +body.theme-cdap .btn-blue:hover { + background-color: #056bc0; +} +body.theme-cdap .btn-blue:disabled, +body.theme-cdap .btn-blue[disabled] { + background-color: #056bc0; + background-image: none; + color: #ffffff; +} +body.theme-cdap .btn-grey-cancel { + background-image: linear-gradient(to bottom, #cccccc 0%, #adadad 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffcccccc', endColorstr='#ffadadad', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #a8a8a8; + background-image: none; + border: none; + background-color: #cccccc; + color: white; +} +body.theme-cdap .btn-grey-cancel:hover, +body.theme-cdap .btn-grey-cancel:focus { + background-position: 0 -15px; + color: #ffffff; +} +body.theme-cdap .btn-grey-cancel.active { + background-color: #adadad; + border-color: #a8a8a8; +} +body.theme-cdap .btn-grey-cancel:active, +body.theme-cdap .btn-grey-cancel:focus { + background-color: #cccccc; + border-color: #cccccc; +} +body.theme-cdap .btn-grey-cancel:hover { + background-color: #adadad; +} +body.theme-cdap .btn-grey-cancel:disabled, +body.theme-cdap .btn-grey-cancel[disabled] { + background-color: #adadad; + background-image: none; + color: #ffffff; +} +body.theme-cdap .btn-transparent { + background-color: #5a84e4; +} +body.theme-cdap .btn-transparent:hover, +body.theme-cdap .btn-transparent:focus { + background-color: #255ddb; +} +body.theme-cdap .nested-tabs .btn-default { + border: 1px solid #d1d3da; + font-weight: 500; + padding: 10px 30px; +} +body.theme-cdap .nested-tabs .btn-default:first-child { + border-radius: 4px 0 0 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .nested-tabs .btn-default:last-child { + border-radius: 0 4px 4px 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .nested-tabs .btn-default.active { + background-color: #6a7387; + color: white; +} +body.theme-cdap .btn-default.dropdown-toggle { + background-color: #3c4355; + border: 0; + color: white; +} +body.theme-cdap .btn-default.dropdown-toggle + .dropdown-menu { + background-color: transparent; + border: 0; + margin: 0; + padding: 0; + max-height: 500px; + overflow-y: auto; +} +body.theme-cdap .btn-default.dropdown-toggle + .dropdown-menu > li > a { + padding: 10px; + cursor: pointer; +} +body.theme-cdap .btn-default.dropdown-toggle + .dropdown-menu > li span.fa { + margin-top: 3px; + margin-right: 0; + text-align: right; +} +body.theme-cdap .btn-default.dropdown-toggle + .dropdown-menu > li > a { + background-color: #3c4355; + color: white; +} +body.theme-cdap .btn-default.dropdown-toggle + .dropdown-menu > li > a:hover, +body.theme-cdap .btn-default.dropdown-toggle + .dropdown-menu > li > a:focus { + background-color: white; + color: #3c4355; +} +body.theme-cdap .btn-default.dropdown-toggle .btn.dropdown-toggle { + border-radius: 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .btn-default.dropdown-toggle .btn.dropdown-toggle + .dropdown-menu { + border-radius: 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .btn-default.dropdown-toggle .btn.dropdown-toggle + .dropdown-menu > li:first-child a { + border-radius: 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .btn-default.dropdown-toggle .btn.dropdown-toggle + .dropdown-menu > li:last-child a, +body.theme-cdap .btn-default.dropdown-toggle .btn.dropdown-toggle + .dropdown-menu > li:only-child a { + border-radius: 0 0 4px 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .btn-default.dropdown-toggle.open .btn.dropdown-toggle { + border-radius: 4px 4px 4px 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .btn-default.dropdown-toggle.open .btn.dropdown-toggle + .dropdown-menu { + border-radius: 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .dropdown-right .btn.dropdown-toggle { + border-radius: 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .dropdown-right .btn.dropdown-toggle + .dropdown-menu { + border-radius: 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .dropdown-right .btn.dropdown-toggle + .dropdown-menu > li:first-child a { + border-radius: 4px 0 0 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .dropdown-right .btn.dropdown-toggle + .dropdown-menu > li:last-child a { + border-radius: 0 0 4px 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .dropdown-right .btn.dropdown-toggle + .dropdown-menu > li:only-child a { + border-radius: 4px 0 4px 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .dropdown-right.open .btn.dropdown-toggle { + border-radius: 4px 4px 0 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .btn-default.dropdown-toggle.white-dropdown { + background-color: #ffffff; + border: 1px solid #dfe2e9; + color: #6a7387; +} +body.theme-cdap .btn-default.dropdown-toggle.white-dropdown + .dropdown-menu > li > a { + background-color: #ffffff; + color: #6a7387; +} +body.theme-cdap .btn-default.dropdown-toggle.white-dropdown + .dropdown-menu > li > a:hover, +body.theme-cdap .btn-default.dropdown-toggle.white-dropdown + .dropdown-menu > li > a:focus { + background-color: #3c4355; + color: white; +} +body.theme-cdap .dropdown-left .btn.dropdown-toggle { + border-radius: 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .dropdown-left .btn.dropdown-toggle + .dropdown-menu { + border-radius: 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .dropdown-left .btn.dropdown-toggle + .dropdown-menu > li:first-child a { + border-radius: 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .dropdown-left .btn.dropdown-toggle + .dropdown-menu > li:last-child a, +body.theme-cdap .dropdown-left .btn.dropdown-toggle + .dropdown-menu > li:only-child a { + border-radius: 0 0 4px 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .dropdown-left.open .btn.dropdown-toggle { + border-radius: 4px 4px 4px 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .dropdown-left.open .btn.dropdown-toggle + .dropdown-menu { + border-radius: 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .btn-success.dropdown-toggle { + border: 0; +} +body.theme-cdap .btn-success.dropdown-toggle + .dropdown-menu { + background-color: transparent; + border: 0; + margin: 0; + padding: 0; + max-height: 500px; + overflow-y: auto; +} +body.theme-cdap .btn-success.dropdown-toggle + .dropdown-menu > li > a { + padding: 10px; + cursor: pointer; +} +body.theme-cdap .btn-success.dropdown-toggle + .dropdown-menu > li span.fa { + margin-top: 3px; + margin-right: 0; + text-align: right; +} +body.theme-cdap .btn-success.dropdown-toggle .btn.dropdown-toggle { + border-radius: 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .btn-success.dropdown-toggle .btn.dropdown-toggle + .dropdown-menu { + border-radius: 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .btn-success.dropdown-toggle .btn.dropdown-toggle + .dropdown-menu > li:first-child a { + border-radius: 4px 0 0 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .btn-success.dropdown-toggle .btn.dropdown-toggle + .dropdown-menu > li:last-child a { + border-radius: 0 0 4px 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .btn-success.dropdown-toggle .btn.dropdown-toggle + .dropdown-menu > li:only-child a { + border-radius: 4px 0 4px 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .btn-success.dropdown-toggle.open .btn.dropdown-toggle { + border-radius: 4px 4px 0 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .txt-running { + color: #4ab63c; + font-weight: 700; +} +body.theme-cdap .txt-failed { + color: #d15668; + font-weight: 700; +} +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +body.theme-cdap.state-dashboard main.container { + width: 100%; +} +body.theme-cdap > div.alerts div.alert { + position: relative; + padding-right: 30px; +} +body.theme-cdap > div.alerts button.close { + font-size: 30px; + line-height: 1; + position: absolute; + top: 2px; + right: 15px; +} +body.theme-cdap .alert { + border: 0; + color: white; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); + width: 100%; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + margin-bottom: 0; + padding-top: 10px; + padding-bottom: 10px; + border-radius: 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); +} +body.theme-cdap .alert button.close { + font-weight: 400; + line-height: 12px; + margin-left: 10px; + text-shadow: none; + opacity: 0.4; + filter: alpha(opacity=40); +} +body.theme-cdap .alert button.close:focus { + outline: 0; +} +body.theme-cdap .alert-success { + background-color: #4ab63c; +} +body.theme-cdap .alert-info { + background-color: #5a84e4; +} +body.theme-cdap .alert-warning { + background-color: #f4b400; +} +body.theme-cdap .alert-danger { + background-color: #fa4347; +} +body.theme-cdap .text-success { + color: #4ab63c; +} +body.theme-cdap .text-danger { + color: #d15668; +} +body.theme-cdap .text-warning { + color: #f4b400; +} +body.theme-cdap .bg-success { + background-color: #4ab63c; +} +body.theme-cdap .bg-danger { + background-color: #d15668; +} +body.theme-cdap .pagination > li > a, +body.theme-cdap .pagination > li > span { + color: #3c4355; +} +body.theme-cdap .pagination > .active > a, +body.theme-cdap .pagination > .active > span { + background-color: #3c4355; + border-color: #3c4355; + color: white; +} +body.theme-cdap .pagination > .active > a:hover, +body.theme-cdap .pagination > .active > span:hover, +body.theme-cdap .pagination > .active > a:focus, +body.theme-cdap .pagination > .active > span:focus { + background-color: #3c4355; + border-color: #3c4355; +} +body.theme-cdap .progress { + background-image: linear-gradient(to bottom, #d1d4dd 0%, #dddfe6 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd1d4dd', endColorstr='#ffdddfe6', GradientType=0); +} +body.theme-cdap .progress-bar { + background-image: linear-gradient(to bottom, #5a84e4 0%, #2e63dd 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5a84e4', endColorstr='#ff2e63dd', GradientType=0); +} +body.theme-cdap .progress-bar-success { + background-image: linear-gradient(to bottom, #4ab63c 0%, #3a902f 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4ab63c', endColorstr='#ff3a902f', GradientType=0); +} +body.theme-cdap .progress-bar-info { + background-image: linear-gradient(to bottom, #666e83 0%, #505666 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff666e83', endColorstr='#ff505666', GradientType=0); +} +body.theme-cdap .progress-bar-warning { + background-image: linear-gradient(to bottom, #f4b400 0%, #c18e00 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff4b400', endColorstr='#ffc18e00', GradientType=0); +} +body.theme-cdap .progress-bar-danger { + background-image: linear-gradient(to bottom, #d15668 0%, #c03449 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd15668', endColorstr='#ffc03449', GradientType=0); +} +body.theme-cdap .progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} +body.theme-cdap .table { + background-color: #f6f6f6; + margin-top: 10px; +} +body.theme-cdap .table[cask-sortable] thead .empty { + cursor: default; +} +body.theme-cdap .table tbody { + color: #666e82; +} +body.theme-cdap .table tbody a:not(.btn-success) { + color: #6f7c9d; +} +body.theme-cdap .table tbody a:hover, +body.theme-cdap .table tbody a:focus { + cursor: pointer; + text-decoration: none; +} +body.theme-cdap .table tbody a.btn-danger { + background: transparent; + border: 0; + border-radius: 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + color: #d15668; + font-size: 14px; + outline: none; + padding: 0; + white-space: normal; +} +body.theme-cdap .table tbody a.btn-danger:hover, +body.theme-cdap .table tbody a.btn-danger:focus { + text-decoration: none; +} +body.theme-cdap .table th, +body.theme-cdap .table td { + padding: 10px; +} +body.theme-cdap .table th:hover, +body.theme-cdap .table td:hover, +body.theme-cdap .table th:focus, +body.theme-cdap .table td:focus { + outline: none; +} +body.theme-cdap .table th { + font-size: 16px; +} +body.theme-cdap .table th:hover, +body.theme-cdap .table th:focus { + background-color: transparent; + cursor: pointer; +} +body.theme-cdap .table td { + font-size: 14px; +} +body.theme-cdap .table[cask-sortable] tr.sort-enabled th:hover { + background-color: transparent; +} +body.theme-cdap .table-curved { + border-collapse: separate; + border: 1px solid #dddddd; + border-radius: 8px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border-left: 0; +} +body.theme-cdap .table-curved thead tr th { + font-weight: 400; +} +body.theme-cdap .table-curved td, +body.theme-cdap .table-curved th { + border-left: 1px solid #dddddd; + border-top: 1px solid #dddddd; +} +body.theme-cdap .table-curved th { + border-top: 0; + border-bottom: 0; +} +body.theme-cdap .table-curved th:first-child { + border-radius: 8px 0 0 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .table-curved th:last-child { + border-radius: 0 8px 0 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .table-curved th:only-child { + border-radius: 8px 8px 0 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .table-curved tr:last-child > td:first-child { + border-radius: 0 0 0 8px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .table-curved tr:last-child > td:last-child { + border-radius: 0 0 8px 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .table-curved tr:last-child > td:only-child { + border-radius: 0 0 8px 8px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .table.table-status th, +body.theme-cdap .table.table-status td { + border-left: 0; +} +body.theme-cdap .table.table-status th:first-child, +body.theme-cdap .table.table-status td:first-child { + border-right: 1px solid #dddddd; +} +body.theme-cdap .table.table-status th { + color: #3c4355; + cursor: default; +} +body.theme-cdap .table.table-status td { + border-top: 0; +} +body.theme-cdap .table.table-status td strong { + color: #3c4355; + display: block; + font-size: 18px; + line-height: 1; +} +@media (min-width: 992px) { + body.theme-cdap .table.table-status td .row .col-xs-6:first-child > div { + border-right: 1px solid #dddddd; + width: 75%; + } +} +body.theme-cdap .instances .table tbody { + background-color: white; +} +body.theme-cdap .instances .table td { + border: 0; +} +body.theme-cdap .list-group { + border-radius: 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + box-shadow: 0 0px 0px rgba(0, 0, 0, 0.075); +} +body.theme-cdap .list-group-item.active, +body.theme-cdap .list-group-item.active:hover, +body.theme-cdap .list-group-item.active:focus { + text-shadow: 0 -1px 0 #2e63dd; + background-image: linear-gradient(to bottom, #5a84e4 0%, #396bdf 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5a84e4', endColorstr='#ff396bdf', GradientType=0); + border-color: #396bdf; +} +body.theme-cdap .list-group-item.active .badge, +body.theme-cdap .list-group-item.active:hover .badge, +body.theme-cdap .list-group-item.active:focus .badge { + text-shadow: none; +} +body.theme-cdap .panel-message { + background: white; + border: 1px solid #d1d4dc; + margin-bottom: 20px; + padding: 10px; + border-radius: 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .panel-message p { + margin-bottom: 0; +} +body.theme-cdap .panel-message .btn-close { + background: #666e83; + border: 0; + border-radius: 28px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + color: #6a7387; + font-size: 14px; + outline: none; + padding: 0; + white-space: normal; + cursor: pointer; + line-height: 0; +} +body.theme-cdap .panel-message .btn-close:hover, +body.theme-cdap .panel-message .btn-close:focus { + text-decoration: none; +} +body.theme-cdap .panel-message .btn-close .fa-close { + color: white; + padding: 8px 10px; + vertical-align: text-top; +} +body.theme-cdap .panel { + box-shadow: none; +} +body.theme-cdap .panel-title span.fa { + font-size: 10px; + margin-right: 10px; + height: 15px; + vertical-align: middle; + border-radius: 25px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .panel-explore { + background-color: transparent; + color: #3c4355; +} +body.theme-cdap .panel-explore > .panel-heading { + background: white; + border: 1px solid lightgray; + padding: 20px; + cursor: pointer; + border-radius: 8px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .panel-explore > .panel-collapse > .panel-body { + border-top: 0; + padding-right: 0; + padding-left: 0; +} +body.theme-cdap .panel-explore > .panel-collapse > .panel-body pre { + background-color: #dcdce4; + color: #3c4355; + border-radius: 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .panel-default > .panel-heading { + background: #666e83; + border: 0; +} +body.theme-cdap .panel-primary > .panel-heading { + background-image: linear-gradient(to bottom, #5a84e4 0%, #4474e0 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5a84e4', endColorstr='#ff4474e0', GradientType=0); +} +body.theme-cdap .panel-success > .panel-heading { + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); +} +body.theme-cdap .panel-info > .panel-heading { + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); +} +body.theme-cdap .panel-warning > .panel-heading { + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); +} +body.theme-cdap .panel-danger > .panel-heading { + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); +} +body.theme-cdap .well { + background-color: #dcdce4; + border-color: #dcdcdc; + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); +} +body.theme-cdap .well p { + color: #3c4355; +} +body.theme-cdap .well a { + cursor: pointer; +} +body.theme-cdap .well *:only-child { + margin: 0; +} +body.theme-cdap .well.dark { + margin-top: 0; + background: #666e82; +} +body.theme-cdap .modal.center .modal-dialog { + max-width: 80%; +} +@media (min-width: 992px) { + body.theme-cdap .modal.center .modal-dialog { + width: 900px; + } +} +body.theme-cdap .modal.center .modal-sm { + max-width: 630px; +} +body.theme-cdap .modal.hydrator-modal .modal-lg .panel, +body.theme-cdap .modal.tracker-modal .modal-lg .panel { + background-color: transparent; +} +body.theme-cdap .modal.hydrator-modal .modal-lg .fa-plus, +body.theme-cdap .modal.tracker-modal .modal-lg .fa-plus { + padding-top: 2px; +} +body.theme-cdap .modal.hydrator-modal .modal-lg .modal-footer, +body.theme-cdap .modal.tracker-modal .modal-lg .modal-footer { + text-align: right; +} +body.theme-cdap .modal.hydrator-modal .modal-sm, +body.theme-cdap .modal.tracker-modal .modal-sm { + text-align: center; +} +body.theme-cdap .modal.hydrator-modal .modal-sm .modal-footer, +body.theme-cdap .modal.tracker-modal .modal-sm .modal-footer { + text-align: center; +} +body.theme-cdap .modal.hydrator-modal .modal-header, +body.theme-cdap .modal.tracker-modal .modal-header { + background-color: #ebecf1; + border-bottom: 1px solid #c9ccd6; + margin-bottom: 5px; + padding: 0; + border-radius: 4px 4px 0 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); +} +body.theme-cdap .modal.hydrator-modal .modal-header > div, +body.theme-cdap .modal.tracker-modal .modal-header > div { + margin: 0; + padding-left: 15px; +} +@media (max-width: 991px) { + body.theme-cdap .modal.hydrator-modal .modal-header > div h3, + body.theme-cdap .modal.tracker-modal .modal-header > div h3, + body.theme-cdap .modal.hydrator-modal .modal-header > div p, + body.theme-cdap .modal.tracker-modal .modal-header > div p { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + } +} +body.theme-cdap .modal.hydrator-modal .modal-header > div h3, +body.theme-cdap .modal.tracker-modal .modal-header > div h3 { + padding-top: 5px; +} +body.theme-cdap .modal.hydrator-modal .modal-header > div h3:only-child, +body.theme-cdap .modal.tracker-modal .modal-header > div h3:only-child { + line-height: 60px; + padding-top: 0; +} +body.theme-cdap .modal.hydrator-modal .modal-header > h3, +body.theme-cdap .modal.tracker-modal .modal-header > h3 { + line-height: 60px; + padding-left: 15px; +} +@media (max-width: 991px) { + body.theme-cdap .modal.hydrator-modal .modal-header > h3, + body.theme-cdap .modal.tracker-modal .modal-header > h3 { + max-width: 200px; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + } +} +body.theme-cdap .modal.hydrator-modal .modal-header h3, +body.theme-cdap .modal.tracker-modal .modal-header h3 { + color: #3c4355; + font-weight: 500; + margin: 0; +} +body.theme-cdap .modal.hydrator-modal .modal-header h3:only-child, +body.theme-cdap .modal.tracker-modal .modal-header h3:only-child { + line-height: 60px; + padding-top: 0; +} +body.theme-cdap .modal.hydrator-modal .modal-header p, +body.theme-cdap .modal.tracker-modal .modal-header p { + color: #666e83; + margin: 0; + max-width: 740px; +} +body.theme-cdap .modal.hydrator-modal .modal-header > a.btn, +body.theme-cdap .modal.tracker-modal .modal-header > a.btn { + background: transparent; + border: 1px solid transparent; + border-radius: 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + color: #3c4355; + font-size: 18px; + outline: none; + padding: 0; + white-space: normal; + border-left: 1px solid #c9ccd6; + width: 60px; + height: 60px; + line-height: 60px; + transition: all 0.2s ease; +} +body.theme-cdap .modal.hydrator-modal .modal-header > a.btn:hover, +body.theme-cdap .modal.tracker-modal .modal-header > a.btn:hover, +body.theme-cdap .modal.hydrator-modal .modal-header > a.btn:focus, +body.theme-cdap .modal.tracker-modal .modal-header > a.btn:focus { + text-decoration: none; +} +body.theme-cdap .modal.hydrator-modal .modal-header > a.btn:hover, +body.theme-cdap .modal.tracker-modal .modal-header > a.btn:hover, +body.theme-cdap .modal.hydrator-modal .modal-header > a.btn:focus, +body.theme-cdap .modal.tracker-modal .modal-header > a.btn:focus { + background-color: #3c4355; + border: 1px solid #3c4355; + color: white; + border-radius: 0 4px 0 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .modal.hydrator-modal .modal-content, +body.theme-cdap .modal.tracker-modal .modal-content { + color: #3c4355; + background-color: white; +} +body.theme-cdap .modal.hydrator-modal .modal-body, +body.theme-cdap .modal.tracker-modal .modal-body { + padding: 10px; + width: 100%; +} +body.theme-cdap .modal.hydrator-modal .modal-body div.alerts, +body.theme-cdap .modal.tracker-modal .modal-body div.alerts { + top: 60px; +} +body.theme-cdap .modal.hydrator-modal .modal-footer, +body.theme-cdap .modal.tracker-modal .modal-footer { + border-top: 0; +} +body.theme-cdap .modal.hydrator-modal h3, +body.theme-cdap .modal.tracker-modal h3, +body.theme-cdap .modal.hydrator-modal h4, +body.theme-cdap .modal.tracker-modal h4 { + color: #3c4355; +} +body.theme-cdap .modal.hydrator-modal .control-label, +body.theme-cdap .modal.tracker-modal .control-label { + font-weight: 400; +} +body.theme-cdap .modal.hydrator-modal .form-control, +body.theme-cdap .modal.tracker-modal .form-control { + border-radius: 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + box-shadow: none; + text-align: left; +} +body.theme-cdap .modal.hydrator-modal .form-control:focus, +body.theme-cdap .modal.tracker-modal .form-control:focus { + box-shadow: none; +} +body.theme-cdap .modal.hydrator-modal .form-control.mp-dropdown-toggle, +body.theme-cdap .modal.tracker-modal .form-control.mp-dropdown-toggle { + border-radius: 4px 0 0 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border-right: 1px solid #cccccc; +} +body.theme-cdap .modal.hydrator-modal .form-control.mp-input-group-input, +body.theme-cdap .modal.tracker-modal .form-control.mp-input-group-input { + border-radius: 0 4px 4px 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .modal.hydrator-modal .input-group-addon + .form-control, +body.theme-cdap .modal.tracker-modal .input-group-addon + .form-control { + border-left: 1px solid lightgray; + border-radius: 0 4px 4px 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .modal.hydrator-modal textarea.form-control, +body.theme-cdap .modal.tracker-modal textarea.form-control { + min-height: 100px; + resize: none; +} +body.theme-cdap .modal.hydrator-modal button.form-control:focus, +body.theme-cdap .modal.tracker-modal button.form-control:focus { + outline: none; +} +body.theme-cdap .modal.hydrator-modal .btn[disabled], +body.theme-cdap .modal.tracker-modal .btn[disabled] { + background-color: #c0c0c0; + color: #3c4355; +} +body.theme-cdap .modal.hydrator-modal .table, +body.theme-cdap .modal.tracker-modal .table { + background-color: white; + border: 1px solid #c9ccd6; + margin: 0; +} +body.theme-cdap .modal.hydrator-modal .table thead th, +body.theme-cdap .modal.tracker-modal .table thead th { + border-right: 1px solid #c9ccd6; + border-bottom-width: 1px; + color: #3c4355; +} +body.theme-cdap .modal.hydrator-modal .table tbody, +body.theme-cdap .modal.tracker-modal .table tbody { + text-align: left; +} +body.theme-cdap .modal.hydrator-modal .table tbody td, +body.theme-cdap .modal.tracker-modal .table tbody td { + border-right: 1px solid #c9ccd6; + padding-right: 8px; + padding-left: 8px; +} +body.theme-cdap .modal.hydrator-modal .pagination, +body.theme-cdap .modal.tracker-modal .pagination { + margin: 0 0 10px; +} +body.theme-cdap .modal.hydrator-modal .alert.alert-danger.alert-dismissible, +body.theme-cdap .modal.tracker-modal .alert.alert-danger.alert-dismissible { + padding: 5px; + margin-bottom: 0; +} +body.theme-cdap .modal.hydrator-modal .alert.alert-danger.alert-dismissible .close, +body.theme-cdap .modal.tracker-modal .alert.alert-danger.alert-dismissible .close { + right: 0; +} +body.theme-cdap .tooltip { + font-size: 11px; +} +body.theme-cdap .tooltip.top { + margin-top: -2px; +} +body.theme-cdap .tooltip.top .tooltip-arrow { + bottom: 1px; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #3c4355; +} +body.theme-cdap .tooltip.right { + margin-left: 2px; +} +body.theme-cdap .tooltip.right .tooltip-arrow { + top: 50%; + left: 1px; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-right: 5px solid #3c4355; +} +body.theme-cdap .tooltip.bottom { + margin-top: -2px; +} +body.theme-cdap .tooltip.bottom .tooltip-arrow { + top: 1px; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 5px solid #3c4355; +} +body.theme-cdap .tooltip.left { + margin-left: -2px; +} +body.theme-cdap .tooltip.left .tooltip-arrow { + top: 50%; + right: 1px; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #3c4355; +} +body.theme-cdap .tooltip-inner { + background-color: #3c4355; + border: 1px solid #3c4355; + color: white; + padding: 7px; + word-wrap: break-word; + text-align: left; + border-radius: 3px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +body.theme-cdap main .slanted-tabs.nav-tabs > li, +body.theme-cdap main my-tabs .nav-tabs > li { + min-width: 80px; +} +body.theme-cdap main .slanted-tabs.nav-tabs > li > a, +body.theme-cdap main my-tabs .nav-tabs > li > a { + color: #6f7c9f; + font-weight: 500; + font-size: 14px; +} +body.theme-cdap main .slanted-tabs.nav-tabs > li > a:hover, +body.theme-cdap main my-tabs .nav-tabs > li > a:hover { + background-color: transparent; + border: 1px solid transparent; + color: var(--brand-primary-color); + cursor: pointer; +} +body.theme-cdap main .slanted-tabs.nav-tabs > li > a:focus, +body.theme-cdap main my-tabs .nav-tabs > li > a:focus { + outline: none; +} +body.theme-cdap main .slanted-tabs.nav-tabs > li.active > a, +body.theme-cdap main my-tabs .nav-tabs > li.active > a { + border-right: 1px solid transparent; +} +body.theme-cdap main .slanted-tabs.nav-tabs > li.active > a:hover, +body.theme-cdap main my-tabs .nav-tabs > li.active > a:hover { + background-color: #ebecf1; + border-right: 1px solid transparent; + border-top: 1px solid #d1d3da; + border-left: 1px solid #d1d3da; + border-bottom: 1px solid transparent; + color: #6f7c9f; + cursor: default; +} +body.theme-cdap main .slanted-tabs.nav-tabs > li.active.bottom-border-tab > a, +body.theme-cdap main my-tabs .nav-tabs > li.active.bottom-border-tab > a, +body.theme-cdap main .slanted-tabs.nav-tabs > li.active.bottom-border-tab > a:hover, +body.theme-cdap main my-tabs .nav-tabs > li.active.bottom-border-tab > a:hover, +body.theme-cdap main .slanted-tabs.nav-tabs > li.active.bottom-border-tab:after, +body.theme-cdap main my-tabs .nav-tabs > li.active.bottom-border-tab:after { + border-bottom: 1px solid #d1d3da; +} +body.theme-cdap main .slanted-tabs.nav-tabs > li.active.bottom-border-tab > a, +body.theme-cdap main my-tabs .nav-tabs > li.active.bottom-border-tab > a, +body.theme-cdap main .slanted-tabs.nav-tabs > li.active.bottom-border-tab > a:hover, +body.theme-cdap main my-tabs .nav-tabs > li.active.bottom-border-tab > a:hover { + border-right: 0; +} +body.theme-cdap main .slanted-tabs.nav-tabs > li.active:after, +body.theme-cdap main my-tabs .nav-tabs > li.active:after { + content: ''; + height: 100%; + width: 15%; + border-right: 1px solid #d1d3da; + border-top: 1px solid #d1d3da; + transform: skewX(15deg) skewY(0); + position: absolute; + top: 0; + right: -5px; + background-color: #ebecf1; +} +body.theme-cdap { + visibility: visible; +} +body.theme-cdap main.container { + /* we need to be able to calc tab height + for .cdap-subnav-end to work */ +} +body.theme-cdap main.container blockquote { + border: 0; +} +body.theme-cdap main.container h1 { + color: #5f6674; + font-size: 30px; + font-weight: 400; +} +body.theme-cdap main.container h2 { + color: #5f6674; + font-size: 20px; + font-weight: 300; +} +body.theme-cdap main.container h2 > span { + display: block; + margin-bottom: 8px; +} +body.theme-cdap main.container h3 { + color: #5f6673; + font-size: 18px; + font-weight: 300; +} +body.theme-cdap main.container h4 { + color: #5f6674; + font-size: 16px; + font-weight: 300; +} +body.theme-cdap main.container section.tab-pane h2 { + margin: 0; + font-weight: 400px; + font-size: 20px; +} +body.theme-cdap main.container .nav-tabs > li > a { + line-height: 20px; +} +body.theme-cdap main.container .cdap-subnav-end { + content: ' '; + background-color: white; + position: absolute; + z-index: -1; + right: 0; + width: 100%; + height: 300px; + margin-top: -258px; + border-bottom: 1px solid #d1d3da; +} +body.theme-cdap main.container .cdap-subnav-end.immediate { + margin-top: -300px; +} +body.theme-cdap main.container .type-block { + padding-bottom: 5px; +} +body.theme-cdap main.container .type-block h2, +body.theme-cdap main.container .type-block [class*="icon-"] { + font-size: 21px; +} +body.theme-cdap main.container .type-block h2 { + margin: 0; +} +body.theme-cdap main.container .type-block [class*="icon-"] { + color: #5a84e4; + margin-right: 5px; + vertical-align: middle; +} +body.theme-cdap main.container .type-block + p { + color: #969696; + font-size: 14px; + margin-bottom: 0; +} +body.theme-cdap main.container [class*="icon-"] { + font-size: 15px; +} +body.theme-cdap main.container div.levels { + background-color: #f6f6f6; + color: #969696; +} +@media (max-width: 767px) { + body.theme-cdap main.container div.button-bar { + display: none; + } +} +body.theme-cdap main.container div.button-bar my-start-stop-button > .btn-group, +body.theme-cdap main.container div.button-bar > .btn-group { + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.2); +} +@media (max-width: 767px) { + body.theme-cdap main.container div.button-bar my-start-stop-button > .btn-group, + body.theme-cdap main.container div.button-bar > .btn-group { + display: block; + margin-top: 20px; + } +} +body.theme-cdap main.container div.button-bar my-start-stop-button > .btn-group .btn-default, +body.theme-cdap main.container div.button-bar > .btn-group .btn-default { + border-radius: 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + padding-right: 0; + padding-left: 0; + width: 100px; +} +body.theme-cdap main.container div.button-bar my-start-stop-button > .btn-group .btn-default.dropdown-toggle + .dropdown-menu, +body.theme-cdap main.container div.button-bar > .btn-group .btn-default.dropdown-toggle + .dropdown-menu { + background-color: transparent; + border: 0; + margin: 0; + padding: 0; + max-height: 500px; + overflow-y: auto; +} +body.theme-cdap main.container div.button-bar my-start-stop-button > .btn-group .btn-default.dropdown-toggle + .dropdown-menu > li > a, +body.theme-cdap main.container div.button-bar > .btn-group .btn-default.dropdown-toggle + .dropdown-menu > li > a { + padding: 10px; + cursor: pointer; +} +body.theme-cdap main.container div.button-bar my-start-stop-button > .btn-group .btn-default.dropdown-toggle + .dropdown-menu > li span.fa, +body.theme-cdap main.container div.button-bar > .btn-group .btn-default.dropdown-toggle + .dropdown-menu > li span.fa { + margin-top: 3px; + margin-right: 0; + text-align: center; +} +body.theme-cdap main.container div.button-bar my-start-stop-button > .btn-group .btn-default > span, +body.theme-cdap main.container div.button-bar > .btn-group .btn-default > span { + display: block; +} +body.theme-cdap main.container div.button-bar my-start-stop-button > .btn-group .btn-default > span:last-child, +body.theme-cdap main.container div.button-bar > .btn-group .btn-default > span:last-child { + font-size: 12px; + margin-top: 5px; +} +body.theme-cdap main.container div.button-bar my-start-stop-button > .btn-group ul.dropdown-menu, +body.theme-cdap main.container div.button-bar > .btn-group ul.dropdown-menu { + min-width: 0; +} +body.theme-cdap main.container div.button-bar .btn-default.dropdown-toggle { + background-color: white; + border: 1px solid #dfe2e9; + color: #6a7387; +} +body.theme-cdap main.container div.button-bar .btn-default[disabled] { + border-right-color: #b5bccc; +} +body.theme-cdap main.container div.button-bar > .btn-group { + margin-left: -5px; +} +body.theme-cdap main.container div.button-bar > .btn-group.open .dropdown-toggle { + background-color: #e0e0e0; +} +@media (min-width: 992px) { + body.theme-cdap main.container div.run-level { + border-top: 1px solid #dddddd; + border-bottom: 1px solid #dddddd; + } +} +body.theme-cdap main.container div.run-level .run-level-inner { + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: center; + justify-content: flex-start; +} +@media (min-width: 992px) { + body.theme-cdap main.container div.run-level .run-level-inner { + border-right: 1px solid #dddddd; + } +} +body.theme-cdap main.container div.run-level .dropdown { + border-right: 1px solid #dddddd; + border-left: 1px solid #dddddd; + width: 335px; + height: 60px; + order: 1; +} +@media (max-width: 991px) { + body.theme-cdap main.container div.run-level .dropdown { + border-top: 1px solid #dddddd; + } +} +body.theme-cdap main.container div.run-level .dropdown span.fa-circle, +body.theme-cdap main.container div.run-level .dropdown span.fa-caret-down { + line-height: 48px; + vertical-align: top; +} +body.theme-cdap main.container div.run-level .dropdown span.runid-text { + padding: 0 15px; + vertical-align: middle; +} +body.theme-cdap main.container div.run-level .dropdown span.runid-text span { + display: block; +} +body.theme-cdap main.container div.run-level .dropdown span.runid-text span:first-child { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + width: 255px; +} +body.theme-cdap main.container div.run-level .dropdown span.runid-text span:last-child { + color: #969696; +} +body.theme-cdap main.container div.run-level .dropdown .dropdown-toggle { + background: transparent; + border: 0; + border-radius: 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + color: #6a7387; + font-size: 14px; + outline: none; + padding: 0 15px; + white-space: normal; + display: table; + height: 100%; +} +body.theme-cdap main.container div.run-level .dropdown .dropdown-toggle:hover, +body.theme-cdap main.container div.run-level .dropdown .dropdown-toggle:focus { + text-decoration: none; +} +body.theme-cdap main.container div.run-level .dropdown .dropdown-toggle:active { + box-shadow: none; +} +body.theme-cdap main.container div.run-level .dropdown .dropdown-toggle > span { + display: table-cell; + font-weight: bold; +} +body.theme-cdap main.container div.run-level .dropdown .dropdown-menu { + width: 100%; +} +body.theme-cdap main.container div.run-level .dropdown .dropdown-menu li { + height: 60px; +} +body.theme-cdap main.container div.run-level .dropdown .dropdown-menu li a { + background-color: #f6f6f6; + color: #6a7387; + font-weight: bold; + padding: 0 15px; + display: table; + white-space: nowrap; + height: 100%; + width: 100%; +} +body.theme-cdap main.container div.run-level .dropdown .dropdown-menu li a:hover, +body.theme-cdap main.container div.run-level .dropdown .dropdown-menu li a:focus { + background-color: #d3d3d3; + color: #6a7387; +} +body.theme-cdap main.container div.run-level .dropdown .dropdown-menu li a > span { + display: table-cell; +} +body.theme-cdap main.container div.run-level div.stop-run { + order: 3; +} +@media (max-width: 767px) { + body.theme-cdap main.container div.run-level div.stop-run { + display: none; + } +} +@media (min-width: 768px) { + body.theme-cdap main.container div.run-level div.stop-run { + margin-left: auto; + } +} +body.theme-cdap main.container div.run-level div.stop-run > div { + display: inline-block; +} +body.theme-cdap main.container div.run-level div.stop-run > div > .btn { + background: white; + border: 1px solid white; + border-radius: 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + color: #6a7387; + font-size: 12px; + outline: none; + padding: 0; + white-space: normal; + border-left-color: #dddddd; + width: 100px; + height: 60px; + line-height: 60px; + transition: all 0.2s ease; +} +body.theme-cdap main.container div.run-level div.stop-run > div > .btn:hover, +body.theme-cdap main.container div.run-level div.stop-run > div > .btn:focus { + text-decoration: none; +} +@media (max-width: 991px) { + body.theme-cdap main.container div.run-level div.stop-run > div > .btn { + border-color: #dddddd; + } +} +@media (max-width: 1199px) { + body.theme-cdap main.container div.run-level div.stop-run > div > .btn { + width: 60px; + } +} +body.theme-cdap main.container div.run-level div.stop-run > div > .btn.btn-pause { + margin-left: -4px; +} +body.theme-cdap main.container div.run-level div.stop-run > div > .btn:hover { + background-color: #e0e0e0; + border-top-color: #e0e0e0; + border-bottom-color: #e0e0e0; +} +body.theme-cdap main.container div.run-level div.stop-run > div > .btn > span span { + display: block; +} +body.theme-cdap main.container div.run-level div.stop-run > div > .btn > span span.fa-stop { + margin-bottom: 3px; +} +body.theme-cdap main.container div.tabs-level { + border-bottom: 1px solid #dddddd; + margin-top: 25px; +} +body.theme-cdap main.container div.tabs-level ul.slanted-tabs { + border-bottom: 0; +} +body.theme-cdap main.container div.tabs-level ul.slanted-tabs > li.active > a:hover { + border-right: 1px solid transparent; +} +body.theme-cdap main.container div.tab-view { + margin-top: 20px; +} +body.theme-cdap #loading-bar .bar { + height: 5px; +} +body.theme-cdap footer.app-footer { + background-color: white; + font-size: 11px; + font-weight: 600; + z-index: 0; +} +body.theme-cdap footer.app-footer span.cask-logo { + display: inline-block; + margin-top: -4px; + margin-right: 3px; + height: 40px; + width: 45px; + vertical-align: top; +} + +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +body.theme-cdap .modal.custom-loading-modal { + top: 36%; +} +body.theme-cdap .modal.custom-loading-modal .modal-body .icon-fist { + font-size: 84px; + color: var(--brand-primary-color); +} +body.theme-cdap .modal.custom-loading-modal .modal-body .icon-loading-bars { + background-color: rgba(255, 255, 255, 0.7); + color: #666666; + font-size: 84px; +} +body.theme-cdap .modal.custom-loading-modal .modal-body .icon-loading-bars > .loading-bar { + transform: translateY(-75%) scale(2); +} +body.theme-cdap .modal.custom-loading-modal .modal-body .icon-loading-bars > .loading-bar rect { + fill: var(--brand-primary-color); +} +body.theme-cdap [app-level-loading-icon] h2 { + margin-top: 0; +} + +/* + * Copyright © 2015-2018 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +cask-dropdown-text-combo .dropdown-control-group { + position: relative; + margin-bottom: 10px; + margin-right: 36px; + padding: 9px 10px 5px; + border: 1px solid #eeeeee; +} +cask-dropdown-text-combo .dropdown-control-group div.input-group { + margin-bottom: 1px; +} +cask-dropdown-text-combo .dropdown-control-group:before, +cask-dropdown-text-combo .dropdown-control-group:after { + content: " "; + display: table; +} +cask-dropdown-text-combo .dropdown-control-group:after { + clear: both; +} +cask-dropdown-text-combo .dropdown-control-group p.remove { + position: absolute; + right: -36px; + top: 0; +} + +/* + * Copyright © 2015-2018 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +textarea[cask-json-edit] { + font-family: monospace; +} + +/* + * Copyright © 2015-2018 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +table[cask-sortable] th { + text-transform: capitalize; + -webkit-user-select: none; + user-select: none; + white-space: nowrap; +} +table[cask-sortable] th > i { + visibility: hidden; + margin-left: 10px; +} +table[cask-sortable] th[skip-sort] i { + display: none; +} +table[cask-sortable] tr.sort-enabled th { + cursor: pointer; +} +table[cask-sortable] tr.sort-enabled th.predicate > i { + visibility: visible; +} +table[cask-sortable] tr.sort-enabled th:hover { + background-color: lightyellow; +} + +/* + * Copyright © 2019 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +/* + * Copyright © 2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +.dag-minimap { + position: absolute; + bottom: 20px; + right: 20px; + width: calc(250px + 5px * 2 + 2px * 2); + height: calc(150px + 5px * 2 + 2px * 2); + border: 2px solid #999999; + border-radius: 4px; + background-color: #dbdbdb; + padding: 5px; + overflow: hidden; + box-shadow: 0 5px 15px 0 rgba(0, 0, 0, 0.4); + z-index: 10; +} +.dag-minimap .nodes-container { + position: relative; + height: 100%; + width: 100%; +} +.dag-minimap .node { + position: absolute; + background-color: #4586f3; + border: 1px solid #666666; +} +.dag-minimap .node.realtimesource, +.dag-minimap .node.streamingsource, +.dag-minimap .node.batchsource { + background-color: #48c038; +} +.dag-minimap .node.realtimesink, +.dag-minimap .node.batchsink, +.dag-minimap .node.sparksink { + background-color: #8367df; +} +.dag-minimap .node.transform { + background-color: #4586f3; +} +.dag-minimap .node.errortransform { + background-color: #d40001; +} +.dag-minimap .node.alertpublisher { + background-color: #ffba01; +} +.dag-minimap .node.action { + background-color: #988470; +} +.dag-minimap .node.sparkprogram { + background-color: #454a57; +} +.dag-minimap .node.condition { + background-color: #4e5568; +} +.dag-minimap .viewport-container { + position: absolute; + height: 100%; + width: 100%; + top: 0; + left: 0; +} +.dag-minimap .viewport-box { + position: absolute; + background-color: rgba(88, 183, 246, 0.3); + border: 2px solid #5a84e4; +} + +/* + * Copyright © 2016 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +my-complex-schema div.complex-schema-container [class*="col-"] { + padding-right: 0; + padding-left: 7px; +} +my-complex-schema div.complex-schema-container fieldset.schema-fields-container.disabled { + background-color: #eeeeee; +} +my-complex-schema div.complex-schema-container fieldset.schema-fields-container.disabled .tab-header-inner { + background-color: #eeeeee; +} +my-complex-schema div.complex-schema-container fieldset.schema-fields-container.disabled my-embedded-schema-selector div.tab-toggle.expanded:before { + background-color: #eeeeee; +} +my-complex-schema div.complex-schema-container .field-row .form-control { + background-color: transparent; + border: 0; + box-shadow: none; + border-radius: 0; + outline-offset: -4px; + color: #666666; + font-weight: 500; +} +my-complex-schema div.complex-schema-container .field-row .form-control.disabled { + background-color: #eeeeee; +} +my-complex-schema div.complex-schema-container .field-row:not(.nested-row) { + box-shadow: 2px 0 2px 0 rgba(1, 0, 0, 0.2); +} +my-complex-schema div.complex-schema-container .error-row { + border: 2px solid #a40403; +} +my-complex-schema div.complex-schema-container .nested-row { + border-top: 1px solid #dddddd; +} +my-complex-schema div.complex-schema-container .type-column { + width: 90px; + float: left; +} +my-complex-schema div.complex-schema-container .type-column.header { + padding-left: 10px; +} +my-complex-schema div.complex-schema-container .input-column { + float: left; + width: calc(100% - 75px - 90px); +} +my-complex-schema div.complex-schema-container .input-column.no-type { + width: calc(100% - 75px - 90px); +} +my-complex-schema div.complex-schema-container .input-column .form-control { + padding-left: 5px; + text-indent: 2px; +} +my-complex-schema div.complex-schema-container .input-column.header { + padding-left: 4px; +} +my-complex-schema div.complex-schema-container .select-wrapper { + height: 33px; + z-index: 100; + background-color: transparent; + display: inline-block; + position: relative; + width: 100%; +} +my-complex-schema div.complex-schema-container .select-wrapper:after { + color: #3c4355; + content: "\f0d7"; + font-family: 'FontAwesome'; + position: absolute; + top: 25%; + right: 7px; + z-index: 5; +} +my-complex-schema div.complex-schema-container .select-wrapper select.form-control { + background-color: transparent; + padding-right: 20px; + position: relative; + z-index: 10; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + -o-appearance: none; + color: #555555; +} +my-complex-schema div.complex-schema-container .select-wrapper select.form-control ::-ms-expand { + display: none; +} +my-complex-schema div.complex-schema-container .input-column h6, +my-complex-schema div.complex-schema-container .type-column h6, +my-complex-schema div.complex-schema-container .fields-actions h6 { + font-weight: bold; +} +my-complex-schema div.complex-schema-container div.tab-header { + border-radius: 4px 4px 0 0; + box-shadow: rgba(1, 0, 0, 0.25) 0 0 10px; + height: 26px; + position: relative; + z-index: 100; +} +my-complex-schema div.complex-schema-container div.tab-header .form-control { + height: 22px; + padding: 0 5px; +} +my-complex-schema div.complex-schema-container div.tab-header div.tab-header-inner { + border-radius: 4px 4px 0 0; + height: 33px; +} +my-complex-schema div.complex-schema-container div.tab-header div.tab-header-inner div.select-wrapper { + height: 26px; +} +my-complex-schema div.complex-schema-container div.tab-header div.tab-header-inner div.select-wrapper:after { + top: 5px; +} +my-complex-schema div.complex-schema-container .error { + color: #d15668; +} +my-complex-schema div.complex-schema-container .map-fields { + width: 50px; + line-height: 32px; + padding-left: 5px; +} +my-complex-schema div.complex-schema-container .key-field .map-input-group.tab-header .map-input-column, +my-complex-schema div.complex-schema-container .value-field .map-input-group.tab-header .map-input-column { + line-height: 32px; +} +my-complex-schema div.complex-schema-container .key-field .map-input-group.tab-header .select-wrapper:after, +my-complex-schema div.complex-schema-container .value-field .map-input-group.tab-header .select-wrapper:after { + top: -4px; +} +my-complex-schema div.complex-schema-container .map-input-group { + display: inline-block; +} +my-complex-schema div.complex-schema-container .map-input-column { + float: left; +} +my-complex-schema div.complex-schema-container .fields-actions { + float: right; + height: 33px; +} +my-complex-schema div.complex-schema-container .fields-actions .nullable-header { + margin-right: 42px; +} +my-complex-schema div.complex-schema-container .fields-actions .checkbox { + width: 35px; + margin-top: 7px; +} +my-complex-schema div.complex-schema-container .fields-actions .checkbox.no-trash { + margin-right: 25px; +} +my-complex-schema div.complex-schema-container .fields-actions .actions-buttons { + margin-top: -5px; + width: 60px; + padding-right: 10px; +} +my-complex-schema div.complex-schema-container .fields-actions .actions-buttons.no-checkbox { + margin-top: 7px; +} +my-complex-schema div.complex-schema-container .fields-actions .actions-buttons .btn-link { + padding: 0; +} +my-complex-schema div.complex-schema-container .fields-actions .actions-buttons .fa-plus { + color: #666666; +} +my-complex-schema div.complex-schema-container.disabled .input-column { + /** + * On disabled mode, there is not trash or plus button. Therefore only need to + * substract 50px for the Null checkbox + **/ + width: calc(100% - 50px - 90px); +} +my-complex-schema div.complex-schema-container.disabled .fields-actions .nullable-header { + margin-right: 18px; +} +my-complex-schema div.complex-schema-container.disabled .fields-actions .checkbox, +my-complex-schema div.complex-schema-container.disabled .fields-actions .checkbox.no-trash { + margin-right: 0; +} +my-complex-schema div.complex-schema-container.disabled my-embedded-schema-selector [class*="col-"]:after { + width: 130px; +} +my-complex-schema my-embedded-schema-selector [class*="col-"] { + box-shadow: 0 2px 3px 0 rgba(1, 0, 0, 0.1); + position: relative; +} +my-complex-schema my-embedded-schema-selector [class*="col-"]:before { + box-shadow: -2px 0 3px 0 rgba(1, 0, 0, 0.25); + content: ''; + display: block; + position: absolute; + top: -8px; + left: 0; + bottom: 0; + width: 1px; +} +my-complex-schema my-embedded-schema-selector [class*="col-"]:after { + box-shadow: 0 -2px 3px 0 rgba(1, 0, 0, 0.25); + content: ''; + display: block; + position: absolute; + top: 0; + right: 0; + height: 1px; + width: 100%; +} +my-complex-schema my-embedded-schema-selector div.tab-toggle { + position: relative; +} +my-complex-schema my-embedded-schema-selector div.tab-toggle.expanded:before { + content: ''; + display: block; + position: absolute; + bottom: -3px; + left: 0; + height: 3px; + z-index: 100; + width: calc(100% - 75px - 90px); +} +my-complex-schema my-embedded-schema-selector span.fa { + color: #098cf9; + position: absolute; + z-index: 150; + top: -15px; + left: 5px; +} +my-complex-schema my-embedded-schema-selector span.fa:hover, +my-complex-schema my-embedded-schema-selector span.fa:focus { + cursor: pointer; +} +my-complex-schema my-embedded-schema-selector div.map-schema-container .key-field + my-embedded-schema-selector > div > div.tab-toggle span.fa, +my-complex-schema my-embedded-schema-selector div.map-schema-container .value-field + my-embedded-schema-selector > div > div.tab-toggle span.fa { + top: -12px; +} +my-complex-schema my-embedded-schema-selector my-record-schema > my-complex-schema > .complex-schema-container .nested-row { + border-top: 0; +} +.column-content > my-complex-schema > .complex-schema-container > fieldset > div.field-row:not(.nested-row) { + box-shadow: -7px 0 6px -6px rgba(1, 0, 0, 0.25); + margin-left: 4px; +} + +/* + * Copyright © 2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ + +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +my-dag-plus .zoom-control { + z-index: 998; + right: 15px; +} +my-dag-plus .zoom-control button.btn.btn-default[disabled] { + opacity: 1; + background-color: white; +} +my-dag-plus .zoom-control button.btn.btn-default[disabled] i.fa { + opacity: 0.5; +} +my-dag-plus .zoom-control .toggle-comments-action-btn.toggle-enabled { + background-color: #6a7387; + color: white; +} +my-dag-plus .zoom-control .toggle-comments-action-btn.toggle-enabled:before { + background-color: #7cd2eb; +} +my-dag-plus .zoom-control .toggle-comments-action-btn:before { + content: ' '; + position: absolute; + height: 5px; + width: 5px; + background: #1a73e8; + border-radius: 50%; + right: 5px; +} +my-dag-plus .my-js-dag.preview-mode .box.action .node { + box-shadow: none; + filter: drop-shadow(0 0 10px #f7dc6f); +} +my-dag-plus .my-js-dag.preview-mode .box .node { + box-shadow: 0 0 0 2px #f7dc6f; +} +my-dag-plus .my-js-dag.preview-mode .box .node .node-splitter-popover > .arrow { + border-right-color: #f7dc6f; +} +my-dag-plus .my-js-dag.preview-mode .box .node .node-splitter-popover .popover-content { + box-shadow: 0 0 0 2px #f7dc6f; +} +my-dag-plus .my-js-dag { + width: inherit; + height: inherit; + /* metrics overlay */ +} +my-dag-plus .my-js-dag #diagram-container { + position: relative; + width: inherit; + height: inherit; + overflow: hidden; + cursor: crosshair; +} +my-dag-plus .my-js-dag #diagram-container.move-mode, +my-dag-plus .my-js-dag #diagram-container.disabled { + cursor: move; +} +my-dag-plus .my-js-dag.disabled { + background-image: none; + border: 0; + background-color: #f6f6f6; + border-radius: 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +my-dag-plus .my-js-dag.disabled.normal-cursor #dag-container * { + cursor: default; +} +my-dag-plus .my-js-dag.disabled .box { + height: 100px; + border: 2px solid currentColor; +} +my-dag-plus .my-js-dag.disabled .box:hover { + border-width: 4px; + margin: -2px; + width: 204px; + height: 104px; + cursor: pointer; +} +my-dag-plus .my-js-dag.disabled .box.drag-hover { + border-width: 4px; + margin: -2px; + width: 204px; + height: 104px; +} +my-dag-plus .my-js-dag.disabled .box.drag-hover .node { + background-color: #e4f1fd; +} +my-dag-plus .my-js-dag.disabled .box .node { + cursor: initial; +} +my-dag-plus .my-js-dag.disabled .box .node .endpoint-circle { + top: 41px; +} +my-dag-plus .my-js-dag.disabled .jsplumb-connector, +my-dag-plus .my-js-dag.disabled .jsplumb-endpoint { + cursor: initial; +} +my-dag-plus .my-js-dag .box { + position: absolute; + cursor: move; + top: 150px; + padding: 0; + height: 100px; + width: 200px; + z-index: 2; + border: 2px solid currentColor; + left: 30vw; + -webkit-user-select: none; + user-select: none; + color: #4586f3; +} +my-dag-plus .my-js-dag .box:hover { + border-width: 4px; + margin: -2px; + width: 204px; + height: 104px; + cursor: pointer; +} +my-dag-plus .my-js-dag .box.drag-hover { + border-width: 4px; + margin: -2px; + width: 204px; + height: 104px; +} +my-dag-plus .my-js-dag .box.drag-hover .node { + background-color: #e4f1fd; +} +my-dag-plus .my-js-dag .box.selected { + border-color: #4586f3; + color: white; +} +my-dag-plus .my-js-dag .box.selected .node { + background-color: #4586f3; +} +my-dag-plus .my-js-dag .box.selected .node .node-configure-btn { + background-color: transparent; +} +my-dag-plus .my-js-dag .box.selected .node .node-configure-btn:hover { + background-color: #1567f0; +} +my-dag-plus .my-js-dag .box.selected .node .node-configure-btn .node-configure-btn-label { + color: white; +} +my-dag-plus .my-js-dag .box.selected .node .node-preview-data-btn a { + color: white; +} +my-dag-plus .my-js-dag .box.selected .node:not(.disabled):hover .menu-icon-node { + color: white; +} +my-dag-plus .my-js-dag .box.node-menu-open { + z-index: 3; +} +my-dag-plus .my-js-dag .box .comments-wrapper { + position: absolute; + top: -30px; + right: 0; + color: #1a73e8; + z-index: 2; +} +my-dag-plus .my-js-dag .box .comments-wrapper [comment] { + display: block; +} +my-dag-plus .my-js-dag .box .node { + position: relative; + background-color: white; + margin: 0 auto; + padding: 12px; + height: 100%; + box-shadow: 0 10px 18px -9px rgba(0, 0, 0, 0.5); + transition: background-color 50ms linear; + transition: color 50ms linear; + background-clip: border-box; + z-index: 1; +} +my-dag-plus .my-js-dag .box .node .endpoint-circle { + width: 14px; + height: 14px; + background-color: #4e5568; + border-radius: 100%; + position: absolute; + right: -7px; + top: 41px; + display: flex; + align-items: center; + justify-content: center; +} +my-dag-plus .my-js-dag .box .node .endpoint-circle:before { + content: ''; + position: absolute; + left: 100%; + width: 5px; + border-bottom: 2px solid #58b7f6; + display: none; +} +my-dag-plus .my-js-dag .box .node .endpoint-circle:after { + content: ''; + width: 0; + height: 0; + border-top: 7px solid transparent; + border-bottom: 7px solid transparent; + border-left: 7px solid #58b7f6; + transform: translateX(12px); + display: none; +} +my-dag-plus .my-js-dag .box .node .endpoint-circle .endpoint-caret { + width: 0; + height: 0; + border-top: 4px solid transparent; + border-bottom: 4px solid transparent; + border-left: 7px solid #bac0d6; + transform: translateX(1px); +} +my-dag-plus .my-js-dag .box .node .endpoint-circle:hover:not(.disabled):not(.node-splitter-endpoint), +my-dag-plus .my-js-dag .box .node .endpoint-circle.hover:not(.disabled):not(.node-splitter-endpoint) { + background-color: #58b7f6; +} +my-dag-plus .my-js-dag .box .node .endpoint-circle:hover:not(.disabled):not(.node-splitter-endpoint):before, +my-dag-plus .my-js-dag .box .node .endpoint-circle.hover:not(.disabled):not(.node-splitter-endpoint):before, +my-dag-plus .my-js-dag .box .node .endpoint-circle:hover:not(.disabled):not(.node-splitter-endpoint):after, +my-dag-plus .my-js-dag .box .node .endpoint-circle.hover:not(.disabled):not(.node-splitter-endpoint):after { + display: block; +} +my-dag-plus .my-js-dag .box .node .endpoint-circle:hover:not(.disabled):not(.node-splitter-endpoint) .endpoint-caret, +my-dag-plus .my-js-dag .box .node .endpoint-circle.hover:not(.disabled):not(.node-splitter-endpoint) .endpoint-caret { + visibility: hidden; +} +my-dag-plus .my-js-dag .box .node .endpoint-circle.node-splitter-endpoint .node-spitter-num-ports { + color: #bac0d6; +} +my-dag-plus .my-js-dag .box .node .endpoint-circle.endpoint-circle-bottom { + bottom: -7px; + right: 43px; +} +my-dag-plus .my-js-dag .box .node .endpoint-circle.endpoint-circle-bottom:before { + left: 6px; + top: 100%; + border-bottom: none; + border-left: 2px solid; + height: 5px; +} +my-dag-plus .my-js-dag .box .node .endpoint-circle.endpoint-circle-bottom:after { + border-top: 7px solid #58b7f6; + border-left: 7px solid transparent; + border-right: 7px solid transparent; + transform: translate(-4px, 19px); +} +my-dag-plus .my-js-dag .box .node .endpoint-circle.endpoint-circle-bottom .endpoint-caret { + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 7px solid #bac0d6; + transform: translateY(3px); +} +my-dag-plus .my-js-dag .box .node .node-info { + display: grid; + overflow: hidden; + grid-template-columns: 25px minmax(auto, 140px); + align-items: flex-start; +} +my-dag-plus .my-js-dag .box .node .node-info.node-no-errors { + grid-template-columns: 25px minmax(auto, 148px); +} +my-dag-plus .my-js-dag .box .node .node-info .node-icon { + font-size: 25px; + display: inline-block; +} +my-dag-plus .my-js-dag .box .node .node-info .node-icon.icon-container img { + height: 25px; + width: 25px; + vertical-align: top; +} +my-dag-plus .my-js-dag .box .node .node-info .node-metadata { + display: inline-block; + margin-left: 8px; + line-height: 1.2; +} +my-dag-plus .my-js-dag .box .node .node-info .node-metadata .node-name, +my-dag-plus .my-js-dag .box .node .node-info .node-metadata .node-version { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} +my-dag-plus .my-js-dag .box .node .node-info .node-metadata .node-name { + font-size: 14px; + font-weight: bold; + margin-bottom: 5px; +} +my-dag-plus .my-js-dag .box .node .node-info .node-metadata .node-version { + font-size: 11px; +} +my-dag-plus .my-js-dag .box .node .node-metrics { + position: absolute; + bottom: 24px; + /* 24px = left & right padding of node content (12px x 2) */ + width: calc(100% - 24px); +} +my-dag-plus .my-js-dag .box .node .node-preview-data-btn { + position: absolute; + bottom: 20px; + left: 13px; +} +my-dag-plus .my-js-dag .box .node .node-alerts-errors { + position: absolute; + bottom: 3px; + color: #b9c0d8; +} +my-dag-plus .my-js-dag .box .node .node-alerts-errors .node-alerts, +my-dag-plus .my-js-dag .box .node .node-alerts-errors .node-errors { + display: inline-block; + position: relative; +} +my-dag-plus .my-js-dag .box .node .node-alerts-errors .node-alerts .endpoint-circle.endpoint-circle-bottom, +my-dag-plus .my-js-dag .box .node .node-alerts-errors .node-errors .endpoint-circle.endpoint-circle-bottom { + right: 6px; + top: 16px; + bottom: 0; +} +my-dag-plus .my-js-dag .box .node .node-alerts-errors .node-errors { + margin-left: 5px; +} +my-dag-plus .my-js-dag .box .node .node-actions { + display: flex; + position: absolute; + bottom: 0; + right: 0; + padding-bottom: 10px; + align-items: center; +} +my-dag-plus .my-js-dag .box .node .node-actions .menu-icon-node { + padding-right: 12px; + margin-left: auto; +} +my-dag-plus .my-js-dag .box .node .node-actions .menu-icon-node.fa.fa-bars.disabled { + cursor: not-allowed; +} +my-dag-plus .my-js-dag .box .node .node-actions .menu-icon-node.fa.fa-bars:not(.disabled):hover { + color: #454a57; +} +my-dag-plus .my-js-dag .box .node .error-node-notification { + color: white; + position: absolute; + top: 1px; + right: 3px; +} +my-dag-plus .my-js-dag .box .node .error-node-notification .badge:hover { + background-color: #0099ff; +} +my-dag-plus .my-js-dag .box .node .error-node-notification .badge-warning { + background-color: #ffcc00; +} +my-dag-plus .my-js-dag .box .node .error-node-notification .badge-danger { + background-color: #e33d3d; +} +my-dag-plus .my-js-dag .box .node .node-configure-btn { + font-size: 13px; + border: 1px solid currentColor; + padding: 3px 7px; + background-color: white; + border-radius: 5px; + display: none; +} +my-dag-plus .my-js-dag .box .node .node-configure-btn .node-configure-btn-label { + color: #5c6788; +} +my-dag-plus .my-js-dag .box .node .node-configure-btn:hover { + background-color: #f5f5f5; +} +my-dag-plus .my-js-dag .box .node .node-configure-btn:focus { + outline: none; +} +my-dag-plus .my-js-dag .box .node .node-configure-btn.btn-shown { + display: initial; +} +my-dag-plus .my-js-dag .box .node .node-configure-btn.btn-disabled { + cursor: not-allowed; +} +my-dag-plus .my-js-dag .box .node:hover .node-version, +my-dag-plus .my-js-dag .box .node:focus .node-version { + display: none; +} +my-dag-plus .my-js-dag .box .node:hover .node-configure-btn, +my-dag-plus .my-js-dag .box .node:focus .node-configure-btn { + display: initial; +} +my-dag-plus .my-js-dag .box .node:hover .menu-icon-node:not(.disabled), +my-dag-plus .my-js-dag .box .node:focus .menu-icon-node:not(.disabled) { + color: #5c6788; +} +my-dag-plus .my-js-dag .box .menu-icon { + font-size: 16px; + color: #b9c0d8; +} +my-dag-plus .my-js-dag .box.realtimesource, +my-dag-plus .my-js-dag .box.streamingsource, +my-dag-plus .my-js-dag .box.batchsource { + color: #48c038; + left: 10vw; +} +my-dag-plus .my-js-dag .box.realtimesource.selected, +my-dag-plus .my-js-dag .box.streamingsource.selected, +my-dag-plus .my-js-dag .box.batchsource.selected { + border-color: #48c038; + color: white; +} +my-dag-plus .my-js-dag .box.realtimesource.selected .node, +my-dag-plus .my-js-dag .box.streamingsource.selected .node, +my-dag-plus .my-js-dag .box.batchsource.selected .node { + background-color: #48c038; +} +my-dag-plus .my-js-dag .box.realtimesource.selected .node .node-configure-btn, +my-dag-plus .my-js-dag .box.streamingsource.selected .node .node-configure-btn, +my-dag-plus .my-js-dag .box.batchsource.selected .node .node-configure-btn { + background-color: transparent; +} +my-dag-plus .my-js-dag .box.realtimesource.selected .node .node-configure-btn:hover, +my-dag-plus .my-js-dag .box.streamingsource.selected .node .node-configure-btn:hover, +my-dag-plus .my-js-dag .box.batchsource.selected .node .node-configure-btn:hover { + background-color: #39992c; +} +my-dag-plus .my-js-dag .box.realtimesource.selected .node .node-configure-btn .node-configure-btn-label, +my-dag-plus .my-js-dag .box.streamingsource.selected .node .node-configure-btn .node-configure-btn-label, +my-dag-plus .my-js-dag .box.batchsource.selected .node .node-configure-btn .node-configure-btn-label { + color: white; +} +my-dag-plus .my-js-dag .box.realtimesource.selected .node .node-preview-data-btn a, +my-dag-plus .my-js-dag .box.streamingsource.selected .node .node-preview-data-btn a, +my-dag-plus .my-js-dag .box.batchsource.selected .node .node-preview-data-btn a { + color: white; +} +my-dag-plus .my-js-dag .box.realtimesource.selected .node:not(.disabled):hover .menu-icon-node, +my-dag-plus .my-js-dag .box.streamingsource.selected .node:not(.disabled):hover .menu-icon-node, +my-dag-plus .my-js-dag .box.batchsource.selected .node:not(.disabled):hover .menu-icon-node { + color: white; +} +my-dag-plus .my-js-dag .box.realtimesink, +my-dag-plus .my-js-dag .box.batchsink, +my-dag-plus .my-js-dag .box.sparksink { + color: #8367df; +} +my-dag-plus .my-js-dag .box.realtimesink.selected, +my-dag-plus .my-js-dag .box.batchsink.selected, +my-dag-plus .my-js-dag .box.sparksink.selected { + border-color: #8367df; + color: white; +} +my-dag-plus .my-js-dag .box.realtimesink.selected .node, +my-dag-plus .my-js-dag .box.batchsink.selected .node, +my-dag-plus .my-js-dag .box.sparksink.selected .node { + background-color: #8367df; +} +my-dag-plus .my-js-dag .box.realtimesink.selected .node .node-configure-btn, +my-dag-plus .my-js-dag .box.batchsink.selected .node .node-configure-btn, +my-dag-plus .my-js-dag .box.sparksink.selected .node .node-configure-btn { + background-color: transparent; +} +my-dag-plus .my-js-dag .box.realtimesink.selected .node .node-configure-btn:hover, +my-dag-plus .my-js-dag .box.batchsink.selected .node .node-configure-btn:hover, +my-dag-plus .my-js-dag .box.sparksink.selected .node .node-configure-btn:hover { + background-color: #613dd6; +} +my-dag-plus .my-js-dag .box.realtimesink.selected .node .node-configure-btn .node-configure-btn-label, +my-dag-plus .my-js-dag .box.batchsink.selected .node .node-configure-btn .node-configure-btn-label, +my-dag-plus .my-js-dag .box.sparksink.selected .node .node-configure-btn .node-configure-btn-label { + color: white; +} +my-dag-plus .my-js-dag .box.realtimesink.selected .node .node-preview-data-btn a, +my-dag-plus .my-js-dag .box.batchsink.selected .node .node-preview-data-btn a, +my-dag-plus .my-js-dag .box.sparksink.selected .node .node-preview-data-btn a { + color: white; +} +my-dag-plus .my-js-dag .box.realtimesink.selected .node:not(.disabled):hover .menu-icon-node, +my-dag-plus .my-js-dag .box.batchsink.selected .node:not(.disabled):hover .menu-icon-node, +my-dag-plus .my-js-dag .box.sparksink.selected .node:not(.disabled):hover .menu-icon-node { + color: white; +} +my-dag-plus .my-js-dag .box.errortransform { + color: #d40001; + left: 50vw; +} +my-dag-plus .my-js-dag .box.errortransform.selected { + border-color: #d40001; + color: white; +} +my-dag-plus .my-js-dag .box.errortransform.selected .node { + background-color: #d40001; +} +my-dag-plus .my-js-dag .box.errortransform.selected .node .node-configure-btn { + background-color: transparent; +} +my-dag-plus .my-js-dag .box.errortransform.selected .node .node-configure-btn:hover { + background-color: #a10001; +} +my-dag-plus .my-js-dag .box.errortransform.selected .node .node-configure-btn .node-configure-btn-label { + color: white; +} +my-dag-plus .my-js-dag .box.errortransform.selected .node .node-preview-data-btn a { + color: white; +} +my-dag-plus .my-js-dag .box.errortransform.selected .node:not(.disabled):hover .menu-icon-node { + color: white; +} +my-dag-plus .my-js-dag .box.alertpublisher { + color: #ffba01; + left: 50vw; +} +my-dag-plus .my-js-dag .box.alertpublisher.selected { + border-color: #ffba01; + color: white; +} +my-dag-plus .my-js-dag .box.alertpublisher.selected .node { + background-color: #ffba01; +} +my-dag-plus .my-js-dag .box.alertpublisher.selected .node .node-configure-btn { + background-color: transparent; +} +my-dag-plus .my-js-dag .box.alertpublisher.selected .node .node-configure-btn:hover { + background-color: #cd9500; +} +my-dag-plus .my-js-dag .box.alertpublisher.selected .node .node-configure-btn .node-configure-btn-label { + color: white; +} +my-dag-plus .my-js-dag .box.alertpublisher.selected .node .node-preview-data-btn a { + color: white; +} +my-dag-plus .my-js-dag .box.alertpublisher.selected .node:not(.disabled):hover .menu-icon-node { + color: white; +} +my-dag-plus .my-js-dag .box.action, +my-dag-plus .my-js-dag .box.sparkprogram { + left: 10vw; + top: 30vw; +} +my-dag-plus .my-js-dag .box.action { + color: #988470; +} +my-dag-plus .my-js-dag .box.action.selected { + border-color: #988470; + color: white; +} +my-dag-plus .my-js-dag .box.action.selected .node { + background-color: #988470; +} +my-dag-plus .my-js-dag .box.action.selected .node .node-configure-btn { + background-color: transparent; +} +my-dag-plus .my-js-dag .box.action.selected .node .node-configure-btn:hover { + background-color: #7c6b59; +} +my-dag-plus .my-js-dag .box.action.selected .node .node-configure-btn .node-configure-btn-label { + color: white; +} +my-dag-plus .my-js-dag .box.action.selected .node .node-preview-data-btn a { + color: white; +} +my-dag-plus .my-js-dag .box.action.selected .node:not(.disabled):hover .menu-icon-node { + color: white; +} +my-dag-plus .my-js-dag .box.sparkprogram { + color: #454a57; +} +my-dag-plus .my-js-dag .box.sparkprogram.selected { + border-color: #454a57; + color: white; +} +my-dag-plus .my-js-dag .box.sparkprogram.selected .node { + background-color: #454a57; +} +my-dag-plus .my-js-dag .box.sparkprogram.selected .node .node-configure-btn { + background-color: transparent; +} +my-dag-plus .my-js-dag .box.sparkprogram.selected .node .node-configure-btn:hover { + background-color: #2e323b; +} +my-dag-plus .my-js-dag .box.sparkprogram.selected .node .node-configure-btn .node-configure-btn-label { + color: white; +} +my-dag-plus .my-js-dag .box.sparkprogram.selected .node .node-preview-data-btn a { + color: white; +} +my-dag-plus .my-js-dag .box.sparkprogram.selected .node:not(.disabled):hover .menu-icon-node { + color: white; +} +my-dag-plus .my-js-dag .box.condition { + color: #4e5568; + left: 30vw; + width: 105px; + height: 105px; + border: 2px solid currentColor; +} +my-dag-plus .my-js-dag .box.condition.selected { + border-color: #4e5568; + color: white; +} +my-dag-plus .my-js-dag .box.condition.selected .node { + background-color: #4e5568; +} +my-dag-plus .my-js-dag .box.condition.selected .node .node-configure-btn { + background-color: transparent; +} +my-dag-plus .my-js-dag .box.condition.selected .node .node-configure-btn:hover { + background-color: #383d4b; +} +my-dag-plus .my-js-dag .box.condition.selected .node .node-configure-btn .node-configure-btn-label { + color: white; +} +my-dag-plus .my-js-dag .box.condition.selected .node .node-preview-data-btn a { + color: white; +} +my-dag-plus .my-js-dag .box.condition.selected .node:not(.disabled):hover .menu-icon-node { + color: white; +} +my-dag-plus .my-js-dag .box.condition:hover { + border-width: 4px; + margin: -2px; + width: 109px; + height: 109px; + cursor: pointer; +} +my-dag-plus .my-js-dag .box.condition.drag-hover { + border-width: 4px; + margin: -2px; + width: 109px; + height: 109px; +} +my-dag-plus .my-js-dag .box.condition.drag-hover .node { + background-color: #e4f1fd; +} +my-dag-plus .my-js-dag .box.condition .node { + padding: 5px 0; +} +my-dag-plus .my-js-dag .box.condition .node .endpoint-circle { + top: 44px; + background-color: #0099ff; +} +my-dag-plus .my-js-dag .box.condition .node .endpoint-circle:before { + border-bottom-color: #0099ff; +} +my-dag-plus .my-js-dag .box.condition .node .endpoint-circle:after { + border-left-color: #0099ff; +} +my-dag-plus .my-js-dag .box.condition .node .endpoint-circle:hover:not(.disabled), +my-dag-plus .my-js-dag .box.condition .node .endpoint-circle.hover:not(.disabled) { + background-color: #0099ff; +} +my-dag-plus .my-js-dag .box.condition .node .endpoint-circle.endpoint-circle-bottom { + top: initial; + background-color: #999999; +} +my-dag-plus .my-js-dag .box.condition .node .endpoint-circle.endpoint-circle-bottom:before { + border-left-color: #999999; + border-bottom-color: transparent; +} +my-dag-plus .my-js-dag .box.condition .node .endpoint-circle.endpoint-circle-bottom:after { + border-top-color: #999999; + border-left-color: transparent; +} +my-dag-plus .my-js-dag .box.condition .node .endpoint-circle.endpoint-circle-bottom:hover:not(.disabled), +my-dag-plus .my-js-dag .box.condition .node .endpoint-circle.endpoint-circle-bottom.hover:not(.disabled) { + background-color: #999999; +} +my-dag-plus .my-js-dag .box.condition .node .node-info { + display: initial; + text-align: center; +} +my-dag-plus .my-js-dag .box.condition .node .node-info .node-icon, +my-dag-plus .my-js-dag .box.condition .node .node-info .node-metadata { + display: block; +} +my-dag-plus .my-js-dag .box.condition .node .node-info .node-metadata { + transform: initial; + margin: initial; + padding: 0 7px; + white-space: nowrap; +} +my-dag-plus .my-js-dag .box.condition .node .node-actions { + padding-bottom: 5px; + padding-right: 7px; +} +my-dag-plus .my-js-dag .box.condition .node .node-actions .menu-icon-node { + padding-right: 0; +} +my-dag-plus .my-js-dag .box.condition .node-popover-menu { + right: -60px; + top: 75px; +} +my-dag-plus .my-js-dag .node-popover-menu { + width: 120px; + border: 1px solid black; + background-color: white; + z-index: 1000; + position: absolute; + right: calc(30px - 120px); + top: 65px; +} +my-dag-plus .my-js-dag .node-popover-menu .menu-icon { + color: #454a57; + padding: 5px; +} +my-dag-plus .my-js-dag .node-popover-menu .menu-content { + color: #5c6788; +} +my-dag-plus .my-js-dag .node-popover-menu .menu-content hr { + margin: 0; +} +my-dag-plus .my-js-dag .node-popover-menu .menu-content .menu-content-action { + padding: 5px 10px; +} +my-dag-plus .my-js-dag .node-popover-menu .menu-content .menu-content-action:hover { + background-color: #eeeeee; +} +my-dag-plus .my-js-dag .node-popover-menu .menu-content .menu-content-action.disabled { + cursor: not-allowed; + opacity: 0.5; +} +my-dag-plus .my-js-dag .node-popover-menu .menu-content .menu-content-action.menu-content-delete { + cursor: pointer; + color: #cc0821; +} +my-dag-plus .my-js-dag .comment-box { + position: absolute; + width: 200px; + min-height: 50px; + background-color: #ffffcc; + border-radius: 4px; + cursor: move; +} +my-dag-plus .my-js-dag .comment-box div.comment-content { + padding: 15px; + word-break: break-all; +} +my-dag-plus .my-js-dag .comment-box textarea.form-control { + height: 100px; + background-color: #ffffcc; + resize: none; +} +my-dag-plus .my-js-dag .comment-box textarea.form-control:focus { + border: none; +} +my-dag-plus .my-js-dag .comment-box .fa.fa-close { + position: absolute; + right: 3px; + top: 3px; + cursor: pointer; + opacity: 0; + filter: alpha(opacity=0); + transition: opacity 0.2s ease; +} +my-dag-plus .my-js-dag .comment-box:hover .fa.fa-close { + opacity: 1; + filter: alpha(opacity=100); +} +my-dag-plus .my-js-dag .error-container { + position: fixed; + bottom: 50px; + left: 0; + right: 0; + width: 75%; + margin: 0 auto; +} +my-dag-plus .my-js-dag .error-container .error-close-icon { + cursor: pointer; +} +my-dag-plus .my-js-dag .error-container.well { + background-color: #d15668; + border-radius: 8px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + color: white; +} +my-dag-plus .my-js-dag #dag-container { + height: 100%; + width: inherit; + position: absolute; +} +my-dag-plus .my-js-dag svg.jsplumb-dragging path { + stroke: #58b7f6; + stroke-width: 2; +} +my-dag-plus .my-js-dag svg.jsplumb-dragging path:last-child { + fill: #58b7f6; +} +my-dag-plus .my-js-dag .jsplumb-endpoint { + cursor: pointer; + z-index: 2; +} +my-dag-plus .my-js-dag .jsplumb-endpoint svg * { + fill: transparent; + stroke: transparent; +} +my-dag-plus .my-js-dag .jsplumb-connector { + cursor: pointer; +} +my-dag-plus .my-js-dag .jsplumb-connector path:last-child { + stroke-width: 0; +} +my-dag-plus .my-js-dag .jsplumb-dragging { + z-index: 2; +} +my-dag-plus .my-js-dag .condition-label { + color: #dddddd; + background: #4e5568; + padding: 6px; + width: 42px; + z-index: 2; + border-radius: 15%; + text-align: center; + font-size: 11px; + line-height: 6px; +} +my-dag-plus .my-js-dag .metric-label-text { + color: #397cf1; + font-size: 12px; +} +my-dag-plus .my-js-dag .metric-error-label { + color: #d15668; +} +my-dag-plus div.jsplumb-overlay div.label-container { + cursor: pointer; + height: 14px; + width: 14px; + text-align: center; + background-color: white; + line-height: 14px; + font-size: 10px; + color: #4f5464; + vertical-align: middle; + border-radius: 1px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.2); +} +my-dag-plus div.jsplumb-overlay div.label-container:hover, +my-dag-plus div.jsplumb-overlay div.label-container:focus { + background-color: #4f5464; + color: white; +} +my-dag-plus div.jsplumb-overlay div.label-container i.icon-schemaedge { + font-size: 9px; +} +my-dag-plus .metric-label { + display: inline-block; + width: 100px; +} +.tooltip .tooltip-inner ul { + padding-left: 20px; +} +.badge-warning { + background-color: #f4b400; +} +.badge-error { + background-color: #d15668; +} +.theme-cdap .tooltip-warning.tooltip.top .tooltip-arrow { + border-top-color: #f4b400; +} +.theme-cdap .tooltip-warning .tooltip-inner { + background-color: #f4b400; + border-color: #f4b400; +} +.theme-cdap .tooltip-error.tooltip.top .tooltip-arrow { + border-top-color: #d15668; +} +.theme-cdap .tooltip-error .tooltip-inner { + background-color: #d15668; + border-color: #d15668; +} +.popover { + min-width: 250px; + max-width: 400px; +} +.popover .popover-title { + background-color: white; + border-bottom: 0; + padding: 11px 10px; +} +.popover .popover-title h4 span { + font-weight: 500; +} +.popover .popover-title i.fa.fa-times { + color: #b4b4b6; + cursor: pointer; +} +.popover .popover-content { + padding: 0 10px 10px; +} + +/* + * Copyright © 2016 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +my-datetime-picker { + /** + * Slider Styling + * Source: https://css-tricks.com/styling-cross-browser-compatible-range-inputs-css/ + **/ + /* END OF SLIDER STYLES */ +} +my-datetime-picker .datetime-range { + width: 400px; +} +my-datetime-picker .datetime-range .time-picker { + padding: 15px; + background-color: #eeeeee; +} +my-datetime-picker .datetime-range .time-picker .time-text, +my-datetime-picker .datetime-range .time-picker .time-slider { + width: 49%; + display: inline-block; + vertical-align: middle; +} +my-datetime-picker .datetime-range .time-picker input::-webkit-outer-spin-button, +my-datetime-picker .datetime-range .time-picker input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} +my-datetime-picker .datetime-range .time-picker input[type=number] { + -moz-appearance: textfield; +} +my-datetime-picker .datetime-range .time-picker label { + margin-bottom: 0; +} +my-datetime-picker .datetime-range .time-picker .colon { + font-size: 30px; + font-weight: 400; +} +my-datetime-picker .datetime-range .time-input { + height: 50px; + width: 70px; + font-size: 30px; + background-color: #464a56; + color: white; + border: 0; + border-radius: 4px; + text-align: center; +} +my-datetime-picker .datetime-range .minutes-slider { + margin-top: 15px; +} +my-datetime-picker .datetime-range .uib-yearpicker, +my-datetime-picker .datetime-range .uib-monthpicker, +my-datetime-picker .datetime-range .uib-daypicker { + width: 100%; +} +my-datetime-picker .datetime-range .uib-yearpicker .btn-default, +my-datetime-picker .datetime-range .uib-monthpicker .btn-default, +my-datetime-picker .datetime-range .uib-daypicker .btn-default { + border: 0; +} +my-datetime-picker .datetime-range .uib-yearpicker .btn-default.btn-info, +my-datetime-picker .datetime-range .uib-monthpicker .btn-default.btn-info, +my-datetime-picker .datetime-range .uib-daypicker .btn-default.btn-info { + background-color: #35c853; +} +my-datetime-picker .datetime-range .uib-yearpicker .btn-default.btn-info span, +my-datetime-picker .datetime-range .uib-monthpicker .btn-default.btn-info span, +my-datetime-picker .datetime-range .uib-daypicker .btn-default.btn-info span { + color: white; +} +my-datetime-picker .datetime-range .uib-yearpicker .btn-default.active, +my-datetime-picker .datetime-range .uib-monthpicker .btn-default.active, +my-datetime-picker .datetime-range .uib-daypicker .btn-default.active { + background-color: white; + box-shadow: none; +} +my-datetime-picker .datetime-range .uib-yearpicker .btn-default.active.btn-info, +my-datetime-picker .datetime-range .uib-monthpicker .btn-default.active.btn-info, +my-datetime-picker .datetime-range .uib-daypicker .btn-default.active.btn-info { + background-color: #35c853; +} +my-datetime-picker .datetime-range .uib-yearpicker .btn-default.active.btn-info span, +my-datetime-picker .datetime-range .uib-monthpicker .btn-default.active.btn-info span, +my-datetime-picker .datetime-range .uib-daypicker .btn-default.active.btn-info span { + color: white; +} +my-datetime-picker input[type=range] { + -webkit-appearance: none; + margin: 5px 0; + width: 100%; +} +my-datetime-picker input[type=range]:focus { + outline: none; +} +my-datetime-picker input[type=range]::-webkit-slider-runnable-track { + width: 100%; + height: 5px; + cursor: pointer; + animate: 0.2s; + box-shadow: 0 0 0 #222222, 0 0 0 #2f2f2f; + background: #464a56; + border-radius: 5px; + border: 0 solid black; +} +my-datetime-picker input[type=range]::-webkit-slider-thumb { + box-shadow: 1px 1px 3px #111111, 0 0 1px #1e1e1e; + border: 0 solid white; + height: 15px; + width: 15px; + border-radius: 50%; + background: white; + cursor: pointer; + -webkit-appearance: none; + margin-top: -5px; +} +my-datetime-picker input[type=range]:focus::-webkit-slider-runnable-track { + background: #464a56; +} +my-datetime-picker input[type=range]::-moz-range-track { + width: 100%; + height: 5px; + cursor: pointer; + animate: 0.2s; + box-shadow: 0 0 0 #222222, 0 0 0 #2f2f2f; + background: #464a56; + border-radius: 5px; + border: 0 solid black; +} +my-datetime-picker input[type=range]::-moz-range-thumb { + box-shadow: 1px 1px 3px #111111, 0 0 1px #1e1e1e; + border: 0 solid white; + height: 15px; + width: 15px; + border-radius: 50%; + background: white; + cursor: pointer; +} +my-datetime-picker input[type=range]::-ms-track { + width: 100%; + height: 5px; + cursor: pointer; + animate: 0.2s; + background: transparent; + border-color: transparent; + border-width: 15px 0; + color: transparent; +} +my-datetime-picker input[type=range]::-ms-fill-lower { + background: #464a56; + border: 0 solid black; + border-radius: 10px; + box-shadow: 0 0 0 #222222, 0 0 0 #2f2f2f; +} +my-datetime-picker input[type=range]::-ms-fill-upper { + background: #464a56; + border: 0 solid black; + border-radius: 10px; + box-shadow: 0 0 0 #222222, 0 0 0 #2f2f2f; +} +my-datetime-picker input[type=range]::-ms-thumb { + box-shadow: 1px 1px 3px #111111, 0 0 1px #1e1e1e; + border: 0 solid white; + height: 15px; + width: 15px; + border-radius: 50%; + background: white; + cursor: pointer; +} +my-datetime-picker input[type=range]:focus::-ms-fill-lower { + background: #464a56; +} +my-datetime-picker input[type=range]:focus::-ms-fill-upper { + background: #464a56; +} + +/* + * Copyright © 2016 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +my-datetime-range .date-text-input { + margin-bottom: 10px; +} +my-datetime-range .datetime-range { + width: 400px; + padding-top: 10px; + margin-top: -11px; + z-index: 900; + display: inline-block; +} +my-datetime-range .datetime-range.open { + background-color: white; + position: absolute; + border-radius: 4px; + box-shadow: 0 5px 15px 1px rgba(0, 0, 0, 0.4); +} +my-datetime-range .datetime-input { + width: 45%; + display: inline-block; +} +my-datetime-range .datetime-input > span { + display: block; + width: 100%; + height: 32px; + padding: 6px 12px; + background-color: white; + border: 1px solid #cccccc; + border-radius: 4px; + cursor: pointer; +} +my-datetime-range .datetime-input > span.active { + border: 2px solid #35c853; +} +my-datetime-range .done-button { + font-weight: 500; + padding-top: 10px; + padding-bottom: 10px; + border-radius: 0; + color: #464a56; + border-bottom: 0; + border-right: 0; + border-left: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +body.theme-cdap .btn-group .dropdown-toggle + .dropdown-menu.dropdown-menu-right { + border-radius: 4px 0 4px 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .btn-group .dropdown-toggle + .dropdown-menu.dropdown-menu-right > li my-file-select > a { + background-color: #3c4355; + color: white; + cursor: pointer; + display: block; + padding: 10px; + border-radius: 4px 0 4px 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .btn-group .dropdown-toggle + .dropdown-menu.dropdown-menu-right > li my-file-select > a:hover, +body.theme-cdap .btn-group .dropdown-toggle + .dropdown-menu.dropdown-menu-right > li my-file-select > a:focus { + background-color: white; + color: #3c4355; + text-decoration: none; +} +body.theme-cdap .btn-group .dropdown-toggle + .dropdown-menu.dropdown-menu-right > li:only-child my-file-select > a { + border-radius: 4px 0 4px 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +body.theme-cdap .btn-group .dropdown-toggle.white-dropdown + .dropdown-menu.dropdown-menu-right > li my-file-select > a { + cursor: pointer; + display: block; + padding: 10px; + background-color: #ffffff; + color: #6a7387; +} +body.theme-cdap .btn-group .dropdown-toggle.white-dropdown + .dropdown-menu.dropdown-menu-right > li my-file-select > a:hover, +body.theme-cdap .btn-group .dropdown-toggle.white-dropdown + .dropdown-menu.dropdown-menu-right > li my-file-select > a:focus { + background: #3c4355; + color: white; + text-decoration: none; +} +body.theme-cdap .btn-group .dropdown-toggle.white-dropdown + .dropdown-menu.dropdown-menu-right > li:only-child my-file-select > a { + border-radius: 4px 0 4px 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} + +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +my-side-panel, +.my-side-panel { + height: 100%; +} +my-side-panel .icon-container img, +.my-side-panel .icon-container img { + height: 32px; + width: 32px; + vertical-align: top; +} +my-side-panel .side-panel, +.my-side-panel .side-panel { + height: 100%; +} +my-side-panel .side-panel *, +.my-side-panel .side-panel * { + user-select: none; + -webkit-user-select: none; +} +my-side-panel .side-panel .groups-container, +.my-side-panel .side-panel .groups-container { + bottom: 0; + top: 75px; + left: 0; + right: 0; +} +my-side-panel .side-panel .groups-container .plugin-item, +.my-side-panel .side-panel .groups-container .plugin-item, +my-side-panel .side-panel .groups-container .item-heading, +.my-side-panel .side-panel .groups-container .item-heading { + cursor: pointer; +} +my-side-panel .side-panel .icon-container img, +.my-side-panel .side-panel .icon-container img { + height: 32px; + width: 32px; + vertical-align: top; +} +my-side-panel .side-panel .hydrator-filter, +.my-side-panel .side-panel .hydrator-filter { + padding: 0 0 0 10px; +} +my-side-panel .side-panel .hydrator-filter input, +.my-side-panel .side-panel .hydrator-filter input { + border: 0; + height: 28px; + width: 130px; + box-shadow: none; + margin: 1px 5px 0 3px; + border-radius: 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + color: #9A9A9A; + font-weight: 600; +} +my-side-panel .side-panel .hydrator-filter > *, +.my-side-panel .side-panel .hydrator-filter > * { + margin-right: 8px; +} +my-side-panel .side-panel .hydrator-filter > *:last-child, +.my-side-panel .side-panel .hydrator-filter > *:last-child { + margin-right: 0; +} +my-side-panel .side-panel .hydrator-filter > *:first-child, +.my-side-panel .side-panel .hydrator-filter > *:first-child { + margin-left: 0; +} + +/* + * Copyright © 2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +.macro-widget-toggle.active { + background-color: #dedede; + padding: 5px 0; + margin-right: -10px; + margin-left: -10px; +} +.macro-widget-toggle.active .macro-indicator.active .icon-M { + color: white; +} +.macro-widget-toggle .macro-indicator { + color: #098cf9; + cursor: pointer; + transform: scale(0.7); + line-height: 2em; +} +.macro-widget-toggle .macro-indicator.disabled { + cursor: initial; +} +.macro-widget-toggle .macro-indicator .fa.icon-M { + line-height: inherit; +} + +/* + * Copyright © 2018 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. +*/ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +.configurations-side-panel { + border-right: 1px solid #cccccc; +} +.configurations-side-panel .configurations-tabs .configuration-tab { + height: 40px; + display: flex; + align-items: center; + padding-left: 23px; + font-size: 14px; + cursor: pointer; + width: 170px; + border-bottom: 1px solid #cccccc; +} +.configurations-side-panel .configurations-tabs .configuration-tab:hover { + color: var(--brand-primary-color); +} +.configurations-side-panel .configurations-tabs .configuration-tab.active { + background-color: #eeeeee; + color: var(--brand-primary-color); + font-weight: bold; +} +.configurations-side-panel .configurations-tabs .configuration-tab.disabled { + pointer-events: none; + color: #cccccc; +} +.configurations-side-panel .configurations-tabs .configuration-tab.toggle-advanced-options { + padding-left: 0; +} +.configurations-side-panel .configurations-tabs .configuration-tab.toggle-advanced-options .fa-caret-right, +.configurations-side-panel .configurations-tabs .configuration-tab.toggle-advanced-options .fa-caret-down, +.configurations-side-panel .configurations-tabs .configuration-tab.toggle-advanced-options .icon-caret-right, +.configurations-side-panel .configurations-tabs .configuration-tab.toggle-advanced-options .icon-caret-down { + height: 14px; + width: 14px; + margin: 0 1px 0 9px; +} +my-batch-pipeline-config my-number-widget, +my-realtime-pipeline-config my-number-widget, +my-sql-pipeline-config my-number-widget { + margin-right: 5px; + width: 60px; +} +my-batch-pipeline-config .pipeline-configurations-content .configuration-content .configuration-content-container, +my-realtime-pipeline-config .pipeline-configurations-content .configuration-content .configuration-content-container, +my-sql-pipeline-config .pipeline-configurations-content .configuration-content .configuration-content-container { + border-bottom: 0; +} +my-batch-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content#runtime-arguments-key-value-pairs-wrapper, +my-realtime-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content#runtime-arguments-key-value-pairs-wrapper, +my-sql-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content#runtime-arguments-key-value-pairs-wrapper { + height: calc(100% - 75px); +} +my-batch-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content#runtime-arguments-key-value-pairs-wrapper .runtime-arguments-labels, +my-realtime-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content#runtime-arguments-key-value-pairs-wrapper .runtime-arguments-labels, +my-sql-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content#runtime-arguments-key-value-pairs-wrapper .runtime-arguments-labels { + grid-template-columns: 1fr 1fr 0.8fr; +} +my-batch-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content#runtime-arguments-key-value-pairs-wrapper .runtime-arguments-labels.key-value-pair-labels > .provided-label, +my-realtime-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content#runtime-arguments-key-value-pairs-wrapper .runtime-arguments-labels.key-value-pair-labels > .provided-label, +my-sql-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content#runtime-arguments-key-value-pairs-wrapper .runtime-arguments-labels.key-value-pair-labels > .provided-label { + display: flex; + justify-content: center; + width: 100%; +} +my-batch-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content .custom-config-labels.key-value-pair-labels, +my-realtime-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content .custom-config-labels.key-value-pair-labels, +my-sql-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content .custom-config-labels.key-value-pair-labels { + display: grid; + grid-template-columns: 1fr 1fr 62px 100px; + grid-gap: 10px; + margin-right: -25px; +} +my-batch-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content .custom-config-values, +my-realtime-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content .custom-config-values, +my-sql-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content .custom-config-values { + /* + 101px = (32+15) * 2 + 7 + 32 = height of key-value-row + 15 = margin-bottom of each key-value-row + 7 = get a glimpse of next row if any. + */ + max-height: 101px; +} +my-batch-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content .custom-config-values .key-value-pair-preference, +my-realtime-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content .custom-config-values .key-value-pair-preference, +my-sql-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content .custom-config-values .key-value-pair-preference { + display: grid; + grid-template-columns: 1fr 1fr auto 100px; + grid-gap: 10px; +} +my-batch-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content .custom-config-values .key-value-pair-preference input, +my-realtime-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content .custom-config-values .key-value-pair-preference input, +my-sql-pipeline-config .pipeline-configurations-content .configuration-content #engine-config-tab-content.configuration-step-content .custom-config-values .key-value-pair-preference input { + width: 100%; +} +my-batch-pipeline-config .pipeline-configurations-content .configuration-content .configuration-step-navigation, +my-realtime-pipeline-config .pipeline-configurations-content .configuration-content .configuration-step-navigation, +my-sql-pipeline-config .pipeline-configurations-content .configuration-content .configuration-step-navigation { + border-top: 1px solid #cccccc; + padding-top: 10px; +} + +/* + * Copyright © 2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. +*/ +my-pipeline-runtime-args .runtime-arguments-labels .provided-label { + cursor: pointer; + width: auto; + margin-left: 0; +} +my-pipeline-runtime-args .runtime-arguments-labels .provided-label .dropdown.open .dropdown-menu { + display: block; + min-width: 80px; +} +my-pipeline-runtime-args .runtime-arguments-labels .provided-label .dropdown.open .dropdown-menu li { + padding: 5px 10px; +} +my-pipeline-runtime-args .runtime-arguments-labels .provided-label .dropdown.open .dropdown-menu li:hover { + background-color: #eeeeee; + cursor: pointer; +} +my-pipeline-runtime-args .runtime-arguments-labels.key-value-pair-labels { + display: grid; + grid-template-columns: 1fr 1fr 62px 100px; + grid-gap: 10px; + margin-right: -25px; +} +my-pipeline-runtime-args .step-content-heading .step-content-subtitle { + font-weight: normal; +} +my-pipeline-runtime-args .runtime-arguments-values { + height: calc(100% - 135px); + overflow: auto; +} +my-pipeline-runtime-args .runtime-arguments-values .key-value-pair-preference { + margin-bottom: 15px; + justify-content: initial; + display: grid; + grid-template-columns: 1fr 1fr auto 100px; + grid-gap: 10px; +} +my-pipeline-runtime-args .runtime-arguments-values .key-value-pair-preference input { + width: 100%; +} +my-pipeline-runtime-args .runtime-arguments-values .key-value-pair-preference input[type="checkbox"] { + width: 12px; + height: 12px; + display: inline-block; + margin-right: 10px; +} + +/* + * Copyright © 2019 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. +*/ +.my-link-button fieldset:disabled { + cursor: not-allowed; +} + +/* + * Copyright © 2016 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +body.theme-cdap .my-cdap-popover .popover-content ul.list-group li.list-group-item h5 { + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* + * Copyright © 2016-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +my-post-run-actions .well.well-sm { + cursor: pointer; + margin-bottom: 0; + padding: 0; + border: 0; + background: #ebebeb; + border-radius: 0; +} +my-post-run-actions .well.well-sm h1 { + padding-bottom: 7px; +} +my-post-run-actions .well.well-sm.empty-table { + background: transparent; + border: 2px dashed #b1b1b1; + margin: 10px; +} +my-post-run-actions .well.well-sm.empty-table.disabled { + padding: 10px; + cursor: not-allowed; +} +my-post-run-actions .table.table-bordered { + table-layout: fixed; + margin: 0; +} +my-post-run-actions .table.table-bordered tbody { + display: block; + overflow: auto; + /* 192px = 32px (height of row) * 6 */ + max-height: 192px; +} +my-post-run-actions .table.table-bordered tr { + width: 100%; + display: table; +} +my-post-run-actions .table.table-bordered th, +my-post-run-actions .table.table-bordered td { + font-size: 14px; + padding: 5px; +} +my-post-run-actions .table.table-bordered th:first-child, +my-post-run-actions .table.table-bordered td:first-child { + width: 258px; +} +my-post-run-actions .table.table-bordered th:nth-child(2), +my-post-run-actions .table.table-bordered td:nth-child(2) { + width: 192px; +} +my-post-run-actions .table.table-bordered th:nth-child(3), +my-post-run-actions .table.table-bordered td:nth-child(3) { + width: 55px; +} +my-post-run-actions .table.table-bordered th:last-child, +my-post-run-actions .table.table-bordered td:last-child { + width: 53px; +} + +/* + * Copyright © 2016 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +[pipeline-summary] { + width: 100%; +} + +/* + * Copyright © 2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. +*/ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +.metrics-content { + font-size: 11px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.metrics-content.disabled { + cursor: not-allowed; +} +.metrics-content.disabled .node-metrics-labels { + cursor: inherit; +} +.metrics-content .node-metrics-labels { + cursor: pointer; +} +.metrics-content .node-metrics-labels .metric-records-out { + color: #0099ff; +} +.metrics-content .node-metrics-labels .metric-errors { + color: #D15668; +} + +/* + * Copyright © 2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. +*/ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +.box .node .node-splitter-endpoint .node-splitter-popover { + min-height: 40px; + position: absolute; + left: 24px; + padding: 1px; + font-size: 13px; + border: 1px solid #0076dc; + background-color: white; + border-style: solid; + z-index: 1; + background-clip: padding-box; + border-radius: 6px; + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); +} +.box .node .node-splitter-endpoint .node-splitter-popover > .arrow, +.box .node .node-splitter-endpoint .node-splitter-popover > .arrow:after { + position: absolute; + border-color: transparent; + border-style: solid; +} +.box .node .node-splitter-endpoint .node-splitter-popover > .arrow { + top: 50%; + border-width: 11px 11px 11px 0; + margin-top: -11px; + left: -11px; + border-right-color: #0076dc; +} +.box .node .node-splitter-endpoint .node-splitter-popover > .arrow:after { + border-width: 11px; + content: ''; + left: 1px; + bottom: -11px; + border-left-width: 0; + border-right-color: white; +} +.box .node .node-splitter-endpoint .node-splitter-popover .popover-content { + padding: 10px 0 10px 10px; + color: #333333; + margin-right: -8px; + white-space: nowrap; +} +.box .node .node-splitter-endpoint .node-splitter-popover .popover-content .splitter-popover-row { + display: grid; + grid-template-columns: 1fr 14px; + grid-template-rows: 13px; + padding: 3px 0; + grid-gap: 10px; + align-items: center; +} +.box .node .node-splitter-endpoint .node-splitter-popover .popover-content .splitter-popover-row:first-child { + padding-top: 0; +} +.box .node .node-splitter-endpoint .node-splitter-popover .popover-content .splitter-popover-row:last-child { + padding-bottom: 0; +} +.box .node .node-splitter-endpoint .node-splitter-popover .popover-content .endpoint-circle { + position: static; +} +.box .node .node-splitter-endpoint .node-splitter-popover .popover-content .endpoint-circle:before { + transform: translateX(7px); +} + +/* + * Copyright © 2016 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +.modal.cdap-modal.post-run-actions-modal .modal-header > h4 { + margin-top: 10px; + padding-left: 10px; +} +.modal.cdap-modal.post-run-actions-modal .modal-header a.btn { + background: transparent; + border: 1px solid transparent; + border-radius: 0; + background-clip: padding-box; + color: #3c4355; + font-size: 18px; + outline: none; + padding: 0; + white-space: normal; + border-left: 1px solid #c9ccd6; + width: 60px; + height: 60px; + line-height: 60px; +} +.modal.cdap-modal.post-run-actions-modal .modal-header a.btn:hover { + background-color: #3c4355; + border: 1px solid #3c4355; + color: white; + background-clip: padding-box; +} +body.theme-cdap.state-hydrator-detail .modal.hydrator-modal.node-config-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body { + height: unset; + max-height: calc(100% - 120px); + overflow-y: auto; +} +body.theme-cdap.state-hydrator-detail .modal.hydrator-modal.node-config-modal.post-run-actions-modal .modal-dialog .modal-content .modal-footer { + padding: 10px; +} + +/* + * Copyright © 2022 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +.post-run-actions-modal .wizard-nav, +my-post-run-action-wizard .wizard-nav { + display: flex; + justify-content: space-between; + margin: 5px 0; +} +.post-run-actions-modal .wizard-nav .capsule, +my-post-run-action-wizard .wizard-nav .capsule { + display: flex; + align-items: center; + background-color: transparent; + color: #b1b1b1; + font-weight: 500; + padding: 2px 10px 2px 0; + border-radius: 15px; +} +.post-run-actions-modal .wizard-nav .capsule.current, +my-post-run-action-wizard .wizard-nav .capsule.current { + background-color: #038dfa; + color: white; + padding-left: 5px; +} +.post-run-actions-modal .wizard-nav .capsule.current .badge, +my-post-run-action-wizard .wizard-nav .capsule.current .badge { + color: #038dfa; + background-color: white; + border: 0; +} +.post-run-actions-modal .wizard-nav .capsule.complete .nav-title, +my-post-run-action-wizard .wizard-nav .capsule.complete .nav-title, +.post-run-actions-modal .wizard-nav .capsule.complete .badge, +my-post-run-action-wizard .wizard-nav .capsule.complete .badge { + color: #038dfa; +} +.post-run-actions-modal .wizard-nav .capsule.complete .badge, +my-post-run-action-wizard .wizard-nav .capsule.complete .badge { + border-color: #038dfa; + padding: 3px 3px; + font-size: smaller; +} +.post-run-actions-modal .wizard-nav .capsule .badge, +my-post-run-action-wizard .wizard-nav .capsule .badge { + margin-right: 4px; + background-color: white; + color: #b1b1b1; + padding: 5px 7px; + border-radius: 12px; + border: 2px solid; + border-color: #b1b1b1; +} +.post-run-actions-modal .wizard-nav .line, +my-post-run-action-wizard .wizard-nav .line { + height: 1px; + border-top: 1px dashed #b1b1b1; + width: 20%; + position: relative; + top: 14px; +} +.post-run-actions-modal .wizard-nav .line.complete, +my-post-run-action-wizard .wizard-nav .line.complete { + border-top-color: #038dfa; +} +.post-run-actions-modal .wizard-nav .line:last-child, +my-post-run-action-wizard .wizard-nav .line:last-child { + width: 0; +} +.post-run-actions-modal .modal-header .plugin-version, +my-post-run-action-wizard .modal-header .plugin-version { + margin-left: 5px; +} +.post-run-actions-modal .close-button, +my-post-run-action-wizard .close-button { + margin-bottom: 15px; +} + +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +my-validators { + /* AND/OR SWITCH */ +} +my-validators .row { + margin-top: 5px; +} +my-validators .form-group { + margin-top: 10px; +} +my-validators .panel.panel-default .panel-heading { + cursor: pointer; +} +my-validators .panel.panel-default .panel-body .row .rule-box .form-control { + height: 30px; +} +my-validators .panel.panel-default .panel-body .panel.panel-default.panel-nested { + margin-bottom: 10px; +} +my-validators .panel.panel-default .panel-body .panel.panel-default.panel-nested .panel-body, +my-validators .panel.panel-default .panel-body .panel.panel-default.panel-nested .panel-heading { + padding: 5px 15px; +} +my-validators .panel.panel-default .panel-body .panel.panel-default.panel-nested .panel-title span, +my-validators .panel.panel-default .panel-body .panel.panel-default.panel-nested .panel-title i { + line-height: 23px; + vertical-align: middle; +} +my-validators .rule-box { + padding: 0 10px; + display: flex; +} +my-validators .rule-box .main-rule, +my-validators .rule-box .rule-arguments { + flex-grow: 1; + max-width: 200px; + margin-right: 10px; +} +my-validators .rule-box .trash { + margin-left: auto; +} +my-validators .rule-box .trash > button.btn.btn-danger { + height: 30px; +} +my-validators .rule-box .rule-arguments { + margin-right: 10px; + max-width: 150px; +} +my-validators .add-rule { + padding: 0 10px; +} +my-validators .error-dataset { + margin-bottom: 25px; +} +my-validators .onoffswitch { + height: 27px; + margin-right: 5px; + position: relative; + width: 73px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} +my-validators .onoffswitch-checkbox { + display: none; +} +my-validators .onoffswitch-label { + display: block; + overflow: hidden; + cursor: pointer; + border: 2px solid #999999; + border-radius: 4px; +} +my-validators .onoffswitch-inner { + display: block; + width: 200%; + margin-left: -100%; + transition: margin 0.3s ease-in 0s; +} +my-validators .onoffswitch-inner:before, +my-validators .onoffswitch-inner:after { + display: block; + float: left; + width: 50%; + height: 25px; + padding: 0; + line-height: 25px; + font-size: 13px; + color: white; + font-family: Trebuchet, Arial, sans-serif; + font-weight: bold; + box-sizing: border-box; +} +my-validators .onoffswitch-inner:before { + content: "AND"; + padding-left: 10px; + background-color: #ff6600; + color: #ffffff; +} +my-validators .onoffswitch-inner:after { + content: "OR"; + padding-right: 10px; + background-color: #ff6600; + color: #ffffff; + text-align: right; +} +my-validators .onoffswitch-switch { + display: block; + width: 23px; + margin: 1px; + background: #ffffff; + position: absolute; + top: 2px; + bottom: 0; + right: 44px; + border: 2px solid #999999; + border-radius: 4px; + transition: all 0.3s ease-in 0s; +} +my-validators .onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner { + margin-left: 0; +} +my-validators .onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch { + right: 0; +} + +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +my-timestamp-picker .input-group > input.form-control { + width: 50%; +} +my-timestamp-picker .input-group > input.form-control.last-child { + position: relative; + left: -1px; +} +my-timestamp-picker .input-group > input.form-control.last-child:focus { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +my-timestamp-picker .dropdown-menu.datepicker, +my-timestamp-picker .dropdown-menu.timepicker { + width: auto; + padding: 0.5em; +} +my-timestamp-picker .dropdown-menu.datepicker button, +my-timestamp-picker .dropdown-menu.timepicker button { + outline: none; + border: none; + text-shadow: none; +} +my-timestamp-picker .dropdown-menu.datepicker { + min-width: 350px; +} +my-timestamp-picker .dropdown-menu.datepicker thead th { + padding: 0.5em 0; +} +my-timestamp-picker .dropdown-menu.datepicker tbody td { + padding: 3px; +} +my-timestamp-picker .dropdown-menu.timepicker tbody td { + padding: 3px 0; +} + +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +.my-widget-container .empty-container { + padding: 0; +} +.my-widget-container my-timestamp-picker .form-control { + margin-right: 0; +} +.my-widget-container textarea { + resize: vertical; + min-height: 100px; +} + +/* + * Copyright © 2016 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +plugin-templates .form-content { + overflow-x: hidden; + overflow-y: auto; +} +plugin-templates .plugin-template-field-row { + margin-top: 15px; + margin-bottom: 25px; +} +plugin-templates .modal-body.plugin-template-modal-body { + overflow: hidden; +} + +/* + * Copyright © 2016 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +wizard-select-action-step .actions-list-section { + display: flex; + justify-content: space-between; + flex-flow: wrap; + margin: 10px 0; +} +wizard-select-action-step .actions-list-section .btn.btn-default { + flex-grow: 1; + box-shadow: 1px 4px 7px -5px rgba(0, 0, 0, 0.65); + border: 1px solid #dddddd; + margin: 10px; +} +body.theme-cdap.state-hydrator-create .my-cdap-popover.non-template-popover .list-group-item .template-label { + display: none; +} + +/* + * Copyright © 2016-2019 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +.theme-cdap .modal.hydrator-modal .confirm-step-content { + max-height: calc(100% - 100px); + overflow: auto; + overflow-x: hidden; +} +.theme-cdap .modal.hydrator-modal .confirm-step-wizard-footer { + border-top: 1px solid #cccccc; + padding-top: 10px; + margin-left: -10px; + margin-right: -10px; + padding-right: 10px; +} +.theme-cdap .modal.hydrator-modal .confirm-step-wizard-footer .confirm-step-next-btn[disabled="disabled"] { + background-color: #056bc0; + color: white; +} + +/* + * Copyright © 2016 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +my-ds-multiple-values .values-container { + background-color: #ebecf1; + border: 1px solid #dddddd; + border-radius: 4px; + padding: 20px 10px; +} +my-ds-multiple-values .values-container .empty-container { + padding-left: 15px; +} +my-ds-multiple-values .row { + margin-bottom: 10px; + position: relative; +} +my-ds-multiple-values .row > div > input.form-control, +my-ds-multiple-values .row select.form-control { + display: inline-block; + width: 48%; +} +my-ds-multiple-values .row .field-actions { + position: absolute; + right: 0; + bottom: 0; +} +@media (max-width: 1043px) { + my-ds-multiple-values .row .field-actions.last { + bottom: -32px; + } +} +my-ds-multiple-values .row .field-actions .btn { + padding: 6px 5px; +} +my-ds-multiple-values .labels [class*="col-"] { + margin-bottom: 10px; +} + +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +my-function-dropdown-with-alias { + padding: 5px; + display: block; +} +my-function-dropdown-with-alias .row { + margin-bottom: 5px; +} +my-function-dropdown-with-alias .row > div > input.form-control, +my-function-dropdown-with-alias .row > div select.form-control { + display: inline-block; + width: 46%; +} +my-function-dropdown-with-alias .row > div > select.form-control { + margin-left: 5px; +} +my-function-dropdown-with-alias .row > div .alias-wrapper span { + margin-right: 4px; +} +my-function-dropdown-with-alias .row > div .alias-wrapper input.form-control { + width: 73%; + display: inline-block; +} +my-function-dropdown-with-alias .row [class*="col-xs-"] { + padding-left: 0; + padding-right: 5px; +} +my-function-dropdown-with-alias .row [class*="col-xs-"]:first-child { + padding-right: 0; + padding-left: 15px; +} +my-function-dropdown-with-alias .row .field-actions > span { + cursor: pointer; + line-height: 32px; +} + +/* + * Copyright © 2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. +*/ +.widget-schema-container .schema-title { + cursor: pointer; +} + +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +my-dsv .dsv-container { + background-color: #ebecf1; + border: 1px solid #dddddd; + padding: 20px 10px; + border-radius: 4px; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} +my-dsv .dsv-container .row { + margin-bottom: 2px; +} +my-dsv .dsv-container .row .field-actions .btn { + padding: 6px 5px; +} +@media (max-width: 941px) { + my-dsv .dsv-container .row .btn-info { + margin-top: 5px; + } +} +my-dsv .dsv-container .empty-container .btn.btn-info { + margin-top: 10px; +} + +/* + * Copyright © 2016 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +my-input-schema .title { + margin: 10px 0; + cursor: pointer; +} +my-input-schema .content { + margin-left: 10px; +} + +/* + * Copyright © 2016 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +my-join-types .multi-checkboxes-container { + background-color: #efefef; + padding: 15px 10px; +} +my-join-types .multi-checkboxes-container.empty { + background-color: initial; + padding: initial; +} +my-join-types .multi-checkboxes-container h4 { + margin-bottom: 0; +} +my-join-types .multi-checkboxes-container .checkboxes-group .subtitle { + color: #3c4355; + font-size: 13px; + font-weight: 500; + margin-top: 15px; + margin-bottom: 5px; +} +my-join-types .multi-checkboxes-container .checkboxes-group .text-warning { + margin-bottom: 5px; +} +my-join-types .multi-checkboxes-container .checkboxes-group .checkboxes { + margin-right: 0; + margin-left: 0; +} +my-join-types .multi-checkboxes-container .checkboxes-group .checkboxes > .col-xs-6 { + padding-right: 75px; +} +my-join-types .multi-checkboxes-container .checkboxes-group .checkboxes input[type="checkbox"] { + margin-top: 3px; +} + +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +my-key-value .keyvalue-container { + background-color: #ebecf1; + border: 1px solid #dddddd; + border-radius: 4px; + padding: 20px 10px; +} +my-key-value .keyvalue-container .empty-container { + padding-left: 15px; +} +my-key-value .row { + margin-bottom: 2px; +} +my-key-value .row > div > input.form-control, +my-key-value .row select.form-control { + display: inline-block; + width: 48%; +} +my-key-value .row .field-actions .btn { + padding: 6px 5px; +} +my-key-value .labels [class*="col-"] { + margin-bottom: 10px; +} + +/* + * Copyright © 2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +my-key-value-encoded .keyvalue-container { + background-color: #ebecf1; + border: 1px solid #dddddd; + border-radius: 4px; + padding: 20px 10px; +} +my-key-value-encoded .keyvalue-container .empty-container { + padding-left: 15px; +} +my-key-value-encoded .row { + margin-bottom: 2px; + display: flex; + padding-left: 16px; +} +my-key-value-encoded .row > div > input.form-control, +my-key-value-encoded .row select.form-control { + display: inline-block; + width: 48%; +} +my-key-value-encoded .row .inputs-container { + flex: 0.96; + display: flex; +} +my-key-value-encoded .row .inputs-container > input { + margin-right: 5px; +} +my-key-value-encoded .row .inputs-container > input:first-child { + flex: 0.3; +} +my-key-value-encoded .row .inputs-container > input:last-child { + flex: 0.7; +} +my-key-value-encoded .row .btns-container .btn { + padding: 6px 5px; +} +my-key-value-encoded .labels [class*="col-"] { + margin-bottom: 10px; +} + +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +[my-ace-editor] { + width: 100%; + margin-right: 5px; + display: inline-block; + vertical-align: top; +} +[my-ace-editor] .ace_gutter { + border: 1px solid #bbbbbb; + border-right: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +[my-ace-editor] .ace_scroller { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border: 1px solid #bbbbbb; + border-left: 0; +} +[my-ace-editor] .ace_print-margin-layer .ace_print-margin { + display: none; +} + +/* + * Copyright © 2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +my-json-textbox .widget-json-editor .textarea-container { + position: relative; +} +my-json-textbox .widget-json-editor .textarea-container textarea { + padding-right: 55px; + font-family: monospace; +} +my-json-textbox .widget-json-editor .textarea-container .tidy-button { + position: absolute; + top: 0; + right: 0; +} + +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +my-number-widget .form-control.invalid-number, +my-number-widget .form-control:focus.invalid-number { + border-color: #d15668; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +/* + * Copyright © 2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. +*/ +body.state-hydrator-create.state-hydrator .modal.rules-engine-modal { + margin-top: 48px; +} +body.state-hydrator-create.state-hydrator .modal.rules-engine-modal .modal-dialog { + margin-top: 0; + margin-bottom: 0; +} +body.state-hydrator-create.state-hydrator .modal.rules-engine-modal .modal-dialog .rules-engine-home .nav.nav-tabs { + padding-left: 0; + margin-bottom: 0; + list-style: none; + border-bottom: 1px solid #d1d3da; +} +body.state-hydrator-create.state-hydrator .modal.rules-engine-modal .modal-dialog .rules-engine-home .nav.nav-tabs .nav-link { + padding: 10px; +} +body.state-hydrator-create.state-hydrator .modal.rules-engine-modal .modal-dialog .rules-engine-home .nav.nav-tabs .nav-link.active { + background: #f5f5f5; +} +body.state-hydrator-create.state-hydrator .modal.rules-engine-modal .modal-dialog .rules-engine-home .right-panel .rule-book-menu .dropdown-item { + display: block; + width: 100%; + clear: both; + font-weight: normal; + color: #373a3c; + text-align: inherit; + white-space: nowrap; + background: none; + border: 0; +} +body.state-hydrator-create.state-hydrator .modal.rules-engine-modal .modal-dialog .rules-engine-home .right-panel .rule-book-menu .dropdown-item.divider { + margin-top: 2px; + margin-bottom: 2px; +} +my-rules-engine-editor .rules-engine-button { + margin-bottom: 5px; +} + +/* + * Copyright © 2018 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. +*/ +.widget-radio-group.widget-radio-group-inline { + display: flex; + justify-content: flex-start; + flex-wrap: wrap; +} +.widget-radio-group.widget-radio-group-inline .radio-inline { + margin: 0 5px; + font-weight: normal; +} +.widget-radio-group.widget-radio-group-inline .radio-inline > label { + font-weight: normal; + margin-bottom: 0; +} +.widget-radio-group.widget-radio-group-inline .radio-inline > label > input[type="radio"] { + margin-top: 2px; +} +.widget-radio-group .radio > label > input[type="radio"] { + margin-top: 2px; +} + +/* + * Copyright © 2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +my-password .password-text-wrapper { + position: relative; + padding: 0; +} +my-password .password-text-wrapper input { + padding-left: 26px; +} +my-password .password-text-wrapper i { + color: var(--brand-primary-color); + position: absolute; + left: 3px; + top: 6px; + font-size: 20px; + cursor: pointer; + font-weight: lighter; +} + +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +my-schema-editor .table td.active-cell { + outline: 1px solid var(--brand-primary-color); +} +my-schema-editor .table td.active-cell:hover { + outline: 1px solid var(--brand-primary-color); +} +my-schema-editor .table td.trash .btn { + padding: 0; + background: transparent; +} + +/* + * Copyright © 2016 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +my-sql-selector .sql-select-fields-container { + position: relative; + padding-top: 10px; +} +my-sql-selector .sql-select-fields-container .button-container { + position: absolute; + right: 0; + top: 0; +} +my-sql-selector .sql-select-fields-container .button-container .btn { + padding: 2px 7px; + font-weight: 500; + font-size: 12px; +} +my-sql-selector .sql-select-fields-container .button-container .btn-default { + color: #999999; + border: 2px solid #cccccc; +} +my-sql-selector .sql-select-fields-container .button-container .btn-reset { + background-color: #cccccc; + color: white; +} +my-sql-selector .sql-select-fields-container .error-message { + margin-bottom: 10px; +} +my-sql-selector .sql-select-fields-container .empty-message { + margin-bottom: 0; +} +my-sql-selector .sql-select-fields-container .stage-container h4 { + cursor: pointer; +} +my-sql-selector .sql-select-fields-container .stage-container h4 span { + color: #666666; +} +my-sql-selector .sql-select-fields-container .stage-container h4.expanded { + margin-bottom: 5px; +} +my-sql-selector .sql-select-fields-container .stage-container h4.expanded span { + color: #333333; +} +my-sql-selector .sql-select-fields-container .stage-container h4.expanded span.badge-danger { + color: white; +} +my-sql-selector .sql-select-fields-container .stage-container .badge-danger { + background-color: #ff6666; + color: white; + font-size: 9px; + margin-bottom: 3px; +} +my-sql-selector .sql-select-fields-container .stage-container .table-container { + background-color: #eeeeee; + padding: 10px; + margin-bottom: 5px; +} +my-sql-selector .sql-select-fields-container .stage-container .table-container .table .checkbox-column { + width: 100px; +} +my-sql-selector .sql-select-fields-container .stage-container .table-container .table thead th, +my-sql-selector .sql-select-fields-container .stage-container .table-container .table thead th:hover, +my-sql-selector .sql-select-fields-container .stage-container .table-container .table thead th:focus { + cursor: default; +} +my-sql-selector .sql-select-fields-container .stage-container .table-container .table thead tr > th { + font-size: 13px; + padding-left: 5px; +} +my-sql-selector .sql-select-fields-container .stage-container .table-container .table thead tr > th.checkbox-column { + padding-bottom: 5px; +} +my-sql-selector .sql-select-fields-container .stage-container .table-container .table thead tr > th:first-child, +my-sql-selector .sql-select-fields-container .stage-container .table-container .table thead tr > th:last-child { + padding-bottom: 10px; +} +my-sql-selector .sql-select-fields-container .stage-container .table-container .table thead .btn-default { + border: 0; + padding: 5px 7px; +} +my-sql-selector .sql-select-fields-container .stage-container .table-container .table thead .btn-default span { + margin-left: 7px; +} +my-sql-selector .sql-select-fields-container .stage-container .table-container .table tbody tr { + border: 0; + border-top: 1px solid #dedede; +} +my-sql-selector .sql-select-fields-container .stage-container .table-container .table tbody tr td { + border: 0; +} +my-sql-selector .sql-select-fields-container .stage-container .table-container .table tbody tr.error { + background-color: #fde2e2; + border: 1px solid #ff6666; +} +my-sql-selector .sql-select-fields-container .stage-container .table-container .table tbody tr .checkbox-column { + padding-left: 15px; +} +.sql-select-dropwdown { + z-index: 1050; + margin-top: 0; + border: 0; +} + +/* + * Copyright © 2018 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +toggle-switch { + height: 32px; +} + +/* + * Copyright © 2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. +*/ +my-wrangler-directives .wrangler-button { + margin-top: 5px; +} +my-wrangler-directives .wrangler-button .disabled { + pointer-events: none; +} + +/* + * Copyright © 2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. +*/ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog { + margin-top: 0; + margin-bottom: 0; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog .dataprephome-wrapper .dataprep-connections-container .connections-content .loading-svg-centered { + top: 0; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog .dataprephome-wrapper .dataprep-connections-container .top-panel { + height: 50px; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog .dataprephome-wrapper .dataprep-connections-container .top-panel .title > h5 { + margin-top: 0; + line-height: 50px; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep { + display: block; + height: 100%; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep > div { + height: 100%; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .dataprep-loading { + z-index: 1063; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .top-panel .left-title { + width: auto; + margin-top: 5px; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .top-panel .left-title .workspace-tab { + padding: 0 10px; + cursor: pointer; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .top-panel .left-title .workspace-tab .fa.fa-pencil { + margin-left: 5px; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .top-panel .left-title .tag { + display: inline-block; + padding: 3px; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + border-radius: 4px; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .top-panel .left-title .tag.tag-success { + background-color: #5cb85c; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .top-panel .action-buttons { + min-width: auto; + padding: 12px 20px 10px 10px; + display: flex; + flex: 0.6; + align-items: center; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .top-panel .action-buttons > span.text-danger { + margin-right: 10px; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .top-panel .action-buttons .dropdown .dropdown-menu > button, +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .top-panel .action-buttons .dropdown .dropdown-menu:focus { + outline: none; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .top-panel .action-buttons .upgrade-button .btn-info { + background-color: #5bc0de; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .top-panel .action-buttons .upgrade-button .btn-info:hover { + background-color: #2aabd2; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .top-panel .action-buttons .more-dropdown .popper { + margin-right: 30px; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .dataprep-main .dataprep-cli .dataprep-auto-complete-container .result-row .directive-usage pre { + background: transparent; + border: 0; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .dataprep-table .table thead th { + font-size: 14px; + padding: 0; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .dataprep-table .table thead th input { + padding: 0; + width: auto; + height: 20px; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .dataprep-table .table thead th:last-child { + border-right: 0; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .dataprep-table .table tbody { + color: #373a3c; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .dataprep-table .table tbody tr { + background-color: white; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container #cut-directive { + z-index: 1; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container #cut-directive .table.table-bordered tr { + background-color: transparent; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .dataprep-side-panel .columns-tab .columns-tab-heading .dropdown .btn.btn-secondary.active, +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .dataprep-side-panel .columns-tab .columns-tab-heading .dropdown .btn.btn-secondary:active, +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .dataprep-side-panel .columns-tab .columns-tab-heading .dropdown .btn.btn-secondary:focus, +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .dataprep-side-panel .columns-tab .columns-tab-heading .dropdown .btn.btn-secondary:hover { + box-shadow: none; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .dataprep-side-panel .columns-tab .columns-list table thead th { + padding: 0.3rem; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .dataprep-side-panel .columns-tab .columns-list table thead .columns-tab-toggle-all-dropdown .dropdown-menu .toggle-all-option { + padding: 5px 10px; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .dataprep-side-panel .columns-tab .dropdown-item { + display: block; + width: 100%; + padding: 3px 1.5rem; + clear: both; + font-weight: normal; + color: #373a3c; + text-align: inherit; + white-space: nowrap; + background: none; + border: 0; + font-size: 13px; +} +body.state-hydrator-create.state-hydrator .modal.wrangler-modal .modal-dialog dataprep .dataprep-container .dataprep-side-panel .columns-tab .dropdown-item:hover { + cursor: pointer; + background-color: #eeeeee; +} +body.state-hydrator-create.state-hydrator .workspace-management-modal h4, +body.state-hydrator-create.state-hydrator .workspace-management-modal h5, +body.state-hydrator-create.state-hydrator .workspace-management-modal h6 { + font-weight: 400; + margin-top: 0; +} +body.state-hydrator-create.state-hydrator .workspace-management-modal h4 { + font-size: 20px; +} +body.state-hydrator-create.state-hydrator .workspace-management-modal h5 { + font-size: 16px; +} +body.state-hydrator-create.state-hydrator .workspace-management-modal h6 { + font-size: 14px; +} +body.state-hydrator-create.state-hydrator .popover.column_actions_dropdown-element, +body.state-hydrator-create.state-hydrator .popover.columns-tab-toggle-all-dropdown, +body.state-hydrator-create.state-hydrator .highlight-popover-element { + display: block; + z-index: 1061; + min-width: initial; +} +body.state-hydrator-create.state-hydrator .popover[class*="highlight-popover-out-of-bounds-"] { + display: none; +} +body.state-hydrator-create.state-hydrator .dataprep-columns-action-dropdown .action-item { + font-size: 12px; + font-weight: normal; +} +body.state-hydrator-create.state-hydrator .dataprep-columns-action-dropdown .action-item .second-level-popover { + font-size: 11px; +} +body.state-hydrator-create.state-hydrator .dataprep-columns-action-dropdown hr { + margin: 10px -10px; +} +body.state-hydrator-create.state-hydrator .dataprep-columns-action-dropdown .column-action-divider hr { + margin: 2px 0; +} +body.state-hydrator-create.state-hydrator .dataprep-columns-action-dropdown h5 { + font-size: 13px; + margin-top: 0; +} +body.state-hydrator-create.state-hydrator .dataprep-columns-action-dropdown .action-buttons { + min-width: auto; +} +body.state-hydrator-create.state-hydrator .dataprep-parse-modal .dropdown-item { + display: block; + width: 100%; + padding: 3px 1.5rem; + clear: both; + font-weight: 400; + color: #373a3c; + text-align: inherit; + white-space: nowrap; + background: none; + border: 0; +} +body.state-hydrator-create.state-hydrator .dataprep-parse-modal .dropdown-item:focus, +body.state-hydrator-create.state-hydrator .dataprep-parse-modal .dropdown-item:hover { + color: #2b2d2f; + text-decoration: none; + background-color: #f5f5f5; +} +body.state-hydrator-create.state-hydrator .dataprep-parse-modal .dropdown-toggle:after { + display: inline-block; + width: 0; + height: 0; + margin-left: 0.3em; + vertical-align: middle; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-left: 0.3em solid transparent; +} + +/* + * Copyright © 2016 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +my-sql-conditions .sql-conditions-container .rule { + margin-bottom: 10px; +} +my-sql-conditions .sql-conditions-container .empty-message { + margin-bottom: 0; +} +my-sql-conditions .sql-conditions-container .text-danger { + white-space: pre-line; +} +my-sql-conditions .sql-conditions-container .select-fields-group { + position: relative; + left: 0; + background-color: #eeeeee; + padding: 0 10px 5px; + display: inline-block; + width: calc(100% - 50px); +} +my-sql-conditions .sql-conditions-container .select-fields-group .delete-field-button { + color: white; + background-color: #d15668; + padding: 0 5px 1px 5px; + border-radius: 50%; + position: absolute; + right: -5px; + top: -5px; + cursor: pointer; +} +my-sql-conditions .sql-conditions-container .select-fields-group .delete-field-button:hover { + text-decoration: none; +} +my-sql-conditions .sql-conditions-container .select-fields-group .select-field { + width: 43%; + display: inline-block; + margin-top: 5px; +} +my-sql-conditions .sql-conditions-container .select-fields-group .field-equality { + display: inline-block; + color: white; + background-color: #555555; + padding: 0 5px; + margin-left: 5px; +} +my-sql-conditions .sql-conditions-container .rule-action-buttons { + padding-left: 5px; + display: inline-block; + vertical-align: bottom; +} +my-sql-conditions .sql-conditions-container .rule-action-buttons .btn.btn-field-actions { + vertical-align: bottom; + border-radius: 0; + color: white; + background-color: #555555; + padding: 5px; +} +my-sql-conditions .sql-conditions-container .rule-action-buttons .btn.btn-field-actions.plus { + padding: 5px 10px; +} + +/* + * Copyright © 2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +.widget-textarea-validate .textarea-container { + position: relative; +} +.widget-textarea-validate .textarea-container textarea { + padding-right: 75px; + font-family: monospace; +} +.widget-textarea-validate .textarea-container .validate-button { + position: absolute; + top: 0; + right: 0; +} + +/* + * Copyright © 2018 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +.modal.hydrator-modal.get-property-value-modal .modal-dialog > .modal-content .modal-body > fieldset > my-json-textbox textarea { + height: 200px; + resize: vertical; +} + +/* + * Copyright © 2016 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +get-schema { + position: relative; +} +.modal.hydrator-modal.get-schema-modal [my-ace-editor] { + margin: 10px 0; +} +.modal.hydrator-modal.get-schema-modal .btn.btn-default { + margin: 0 0 10px 0; +} + +/* + * Copyright © 2016-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +output-schema { + position: relative; +} +.nullable { + width: 35px; +} +body.theme-cdap .modal.hydrator-modal.output-schema-modal .modal-dialog { + max-height: 75vh; +} +body.theme-cdap .modal.hydrator-modal.output-schema-modal .modal-dialog .modal-content .modal-body { + max-height: 55vh; + overflow-y: auto; +} +body.theme-cdap .modal.hydrator-modal.output-schema-modal .modal-dialog .modal-content .modal-body .get-schema-modal-schema { + padding-bottom: 10px; +} +body.theme-cdap .modal.hydrator-modal.output-schema-modal .modal-dialog .modal-content .modal-body .action-button-container { + margin-top: 10px; + margin-bottom: 10px; +} + +/* + * Copyright © 2015-2018 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +body.theme-cdap.state-hydrator { + margin-bottom: 50px; +} +body.theme-cdap.state-hydrator main.container { + width: 100%; + padding-right: 0; + padding-left: 0; +} +body.theme-cdap.state-hydrator main.container > div { + margin-bottom: 0; +} +body.theme-cdap.state-hydrator .canvas-wrapper .left-panel-wrapper .left-panel { + height: 100%; +} +body.theme-cdap.state-hydrator my-dag-plus { + width: 100%; + height: calc(100vh - 158px); + display: block; +} +body.theme-cdap.state-hydrator .my-js-dag { + overflow: hidden; +} +body.theme-cdap.state-hydrator i.fa-exclamation-circle { + margin-left: 3px; + outline: none; +} +body.theme-cdap.state-hydrator .fa-plus-square { + color: #3c4355; +} +body.theme-cdap.state-hydrator .icon-info-circle, +body.theme-cdap.state-hydrator .fa-info-circle { + color: #5a84e4; +} +body.theme-cdap.state-hydrator .icon-asterisk, +body.theme-cdap.state-hydrator .fa-asterisk { + font-size: 9px; + color: #d15668; + top: -2px; + position: relative; + margin-right: 1px; +} +body.theme-cdap.state-hydrator fieldset.view-plugin-json { + height: 100%; +} +body.theme-cdap.state-hydrator fieldset.view-plugin-json .widget-json-editor, +body.theme-cdap.state-hydrator fieldset.view-plugin-json .textarea-container { + height: 100%; +} +body.theme-cdap.state-hydrator fieldset.view-plugin-json textarea { + resize: none; + height: calc(100% - 15px); +} +body.theme-cdap.state-hydrator .col-xs-12.text-right > .btn.btn-default { + margin-bottom: 20px; +} +body.theme-cdap.state-hydrator .tab-header-inner { + background-color: white; +} +body.theme-cdap.state-hydrator my-complex-schema my-embedded-schema-selector div.tab-toggle.expanded:before { + background-color: white; +} +body.theme-cdap.state-hydrator-detail .btn.btn-orange, +body.theme-cdap.state-hydrator-create .btn.btn-orange, +body.theme-cdap.state-hydrator-detail .btn.btn-grey, +body.theme-cdap.state-hydrator-create .btn.btn-grey { + color: white; +} +body.theme-cdap.state-hydrator-detail .btn.btn-orange, +body.theme-cdap.state-hydrator-create .btn.btn-orange { + background-color: var(--brand-primary-color); +} +body.theme-cdap.state-hydrator-detail .btn.btn-grey, +body.theme-cdap.state-hydrator-create .btn.btn-grey { + background-color: #cccccc; +} +body.theme-cdap.state-hydrator-detail .btn.btn-default.dropdown-toggle, +body.theme-cdap.state-hydrator-create .btn.btn-default.dropdown-toggle { + background-color: white; + color: #666666; + border: 1px solid #999999; + padding: 5px 15px; +} +body.theme-cdap.state-hydrator-detail .dropdown-menu.output-schema-actions, +body.theme-cdap.state-hydrator-create .dropdown-menu.output-schema-actions { + top: 0; +} +body.theme-cdap.state-hydrator-detail .dropdown-menu.output-schema-actions > li.disabled, +body.theme-cdap.state-hydrator-create .dropdown-menu.output-schema-actions > li.disabled { + cursor: not-allowed; +} +body.theme-cdap.state-hydrator-detail .dropdown-menu.output-schema-actions > li.disabled > a, +body.theme-cdap.state-hydrator-create .dropdown-menu.output-schema-actions > li.disabled > a { + pointer-events: none; + color: #eeeeee; +} +body.theme-cdap.state-hydrator-detail .dropdown-menu.output-schema-actions > li > a, +body.theme-cdap.state-hydrator-create .dropdown-menu.output-schema-actions > li > a { + background-color: white; + color: #666666; +} +body.theme-cdap.state-hydrator-detail .dropdown-menu.output-schema-actions > li > a:hover, +body.theme-cdap.state-hydrator-create .dropdown-menu.output-schema-actions > li > a:hover { + background-color: #098cf9; + color: white; +} +body.theme-cdap.state-hydrator-detail .zoom-control, +body.theme-cdap.state-hydrator-create .zoom-control { + position: fixed; +} +body.theme-cdap.state-hydrator-detail .btn-group-vertical > .btn:not(:last-child), +body.theme-cdap.state-hydrator-create .btn-group-vertical > .btn:not(:last-child) { + border-bottom: 0; +} +body.theme-cdap.state-hydrator-detail .btn-group-vertical button.move-mode-selected, +body.theme-cdap.state-hydrator-create .btn-group-vertical button.move-mode-selected { + background-color: #4e5568; +} +body.theme-cdap.state-hydrator-detail .btn-group-vertical button.move-mode-selected i.fa.fa-arrows, +body.theme-cdap.state-hydrator-create .btn-group-vertical button.move-mode-selected i.fa.fa-arrows { + color: white; +} +body.theme-cdap.state-hydrator-detail .detail-canvas-container { + position: relative; +} +body.theme-cdap.state-hydrator-detail .detail-canvas-container .run-level-information { + padding: 20px 20px 0px 20px; + position: absolute; + width: 100%; + z-index: 998; + display: inline-flex; + background: #f6f6f6; +} +body.theme-cdap.state-hydrator-detail .detail-canvas-container .run-level-information > span { + margin: 0; + display: inline-flex; + justify-content: center; + align-items: center; + padding: 0 5px; +} +body.theme-cdap.state-hydrator-detail .detail-canvas-container .run-level-information > span > span { + line-height: 1; +} +body.theme-cdap.state-hydrator-detail .detail-canvas-container .run-level-information > span > strong { + padding-right: 5px; + line-height: 1; +} +body.theme-cdap.state-hydrator-detail .detail-canvas-container .run-level-information span.status-bubble { + display: inline-block; + width: 13px; + height: 13px; + margin-right: 5px; + border-radius: 50%; +} +body.theme-cdap.state-hydrator-detail .detail-canvas-container .run-level-information span.status-bubble.status-green { + background-color: #4ab63c; +} +body.theme-cdap.state-hydrator-detail .detail-canvas-container .run-level-information span.status-bubble.status-red { + background-color: #d15668; +} +body.theme-cdap.state-hydrator-detail .detail-canvas-container .run-level-information span.status-bubble.status-grey { + background-color: #6f7c9f; +} +body.theme-cdap.state-hydrator-detail .detail-canvas-container .run-level-information span.status-bubble.status-light-grey { + background-color: #999999; +} +body.theme-cdap.state-hydrator-detail .detail-canvas-container .run-level-information span.status-bubble.status-light-green { + background-color: #00C853; +} +body.theme-cdap.state-hydrator-detail .detail-canvas-container .run-level-information span.status-bubble.status-blue { + background-color: #4761e7; +} +body.theme-cdap.state-hydrator-detail .detail-canvas-container .run-level-information span.status-bubble.status-light-red { + background-color: #D15668; +} +body.theme-cdap.state-hydrator-detail .detail-canvas-container .run-level-information span.status-bubble ~ span { + padding-left: 5px; +} +body.theme-cdap.state-hydrator-detail .detail-canvas-container .run-level-information h3 { + margin: 0 10px; + margin-right: 20px; + font-weight: 500; + color: black; +} +body.theme-cdap.state-hydrator-detail .detail-canvas-container .run-level-information.no-runs > span { + padding: 0 15px; +} +body.theme-cdap.state-hydrator-detail my-program-history ul.pagination { + margin-right: 15px; +} +body.theme-cdap.state-hydrator-detail main.container { + margin-top: 50px; +} +body.theme-cdap.state-hydrator-create { + height: 100%; +} +body.theme-cdap.state-hydrator-create my-dag-plus { + height: calc(100vh - 142px); +} +body.theme-cdap.state-hydrator-create .alerts, +body.theme-cdap.state-hydrator-list .alerts, +body.theme-cdap.state-hydrator-create .alerts { + top: 48px; + z-index: 1062; +} +body.theme-cdap.state-hydrator-detail .alerts { + z-index: 999; +} +body.theme-cdap.state-hydrator-detail .zoom-control { + top: 170px; +} +body.theme-cdap.state-hydrator-create { + background-color: #e2e3e5; +} +body.theme-cdap.state-hydrator-create main.container { + background-color: transparent; + background-image: none; + margin-top: 60px; +} +body.theme-cdap.state-hydrator-create main.container > div { + margin-bottom: 0; +} +body.theme-cdap.state-hydrator-create .tiles-container { + background-color: white; + border-radius: 5px; +} +body.theme-cdap.state-hydrator-create .tiles-container a:hover { + text-decoration: none; +} +body.theme-cdap.state-hydrator-create .tiles-container .info { + margin-bottom: 35px; +} +body.theme-cdap.state-hydrator-create .tiles-container .info h4 { + font-weight: 400; + font-size: 14px; + letter-spacing: 0.3px; +} +body.theme-cdap.state-hydrator-create .hydrator-start { + margin-top: 90px; +} +body.theme-cdap.state-hydrator-create .hydrator-preconfigured { + margin-bottom: 50px; +} +body.theme-cdap.state-hydrator-create .hydrator-preconfigured .well { + padding: 15px; +} +body.theme-cdap.state-hydrator-create .templates-filters .has-feedback > .form-control-feedback { + line-height: 32px; +} +body.theme-cdap.state-hydrator-create .templates-filters .btn-group-vertical { + width: 100%; + margin: 15px 0; +} +body.theme-cdap.state-hydrator-create .templates-filters .btn-group-vertical button:focus { + background-color: #e2e3e5; +} +body.theme-cdap.state-hydrator-create div.template-link { + cursor: pointer; + width: 100%; +} +body.theme-cdap.state-hydrator-create div.template-link p { + color: #3c4355; + margin-bottom: 2px; +} +body.theme-cdap.state-hydrator-create div.template-link:hover { + background-color: #3c4355; + text-decoration: none; +} +body.theme-cdap.state-hydrator-create div.template-link:hover h4, +body.theme-cdap.state-hydrator-create div.template-link:hover p { + color: white; +} +body.theme-cdap.state-hydrator-create div.template-link:hover hr { + border-color: white; +} +body.theme-cdap.state-hydrator-create div.template-link hr { + border: 0; + height: 0; + width: 100%; + border-top: 1px solid #3c4355; + margin: 10px auto; +} +body.theme-cdap.state-hydrator-create .start-well { + background-color: white; + border-radius: 6px; + font-weight: 500; + margin-right: auto; + margin-left: auto; + height: 180px; + width: 180px; + cursor: pointer; + display: flex; + flex-direction: column; + justify-content: center; +} +body.theme-cdap.state-hydrator-create .start-well h4, +body.theme-cdap.state-hydrator-create .start-well a { + font-weight: 500; +} +body.theme-cdap.state-hydrator-create .start-well h4 { + color: #3c4355; +} +body.theme-cdap.state-hydrator-create .start-well h4.template-name { + margin-bottom: 10px; +} +body.theme-cdap.state-hydrator-create .start-well p { + font-size: 12px; + color: #3c4355; +} +body.theme-cdap.state-hydrator-create .start-well:hover { + background-color: #3c4355; +} +body.theme-cdap.state-hydrator-create .start-well:hover h4 { + color: white; +} +body.theme-cdap.state-hydrator-create .zoom-control { + top: 135px; +} +body.theme-cdap.state-hydrator-create .alert .message-content { + white-space: normal; +} +body.theme-cdap.state-hydrator-list main.container { + width: 100%; + padding-right: 0; + padding-left: 0; + margin-top: 50px; +} +body.theme-cdap.state-hydrator-list .my-pipelines { + margin-top: 8px; +} +body.theme-cdap.state-hydrator-list .my-pipelines table.table { + background-color: white; +} +body.theme-cdap.state-hydrator-list .my-pipelines table.table th, +body.theme-cdap.state-hydrator-list .my-pipelines table.table td { + color: #333333; + padding-right: 15px; + padding-left: 15px; +} +body.theme-cdap.state-hydrator-list .my-pipelines table.table th.pipeline-name, +body.theme-cdap.state-hydrator-list .my-pipelines table.table td.pipeline-name { + max-width: 300px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +body.theme-cdap.state-hydrator-list .my-pipelines table.table th { + font-weight: 500; + text-transform: initial; +} +body.theme-cdap.state-hydrator-list .my-pipelines table.table td > span.status-bubble { + margin-right: 5px; +} +body.theme-cdap.state-hydrator-list .my-pipelines table.table td > span.status-bubble.status-green { + color: #4ab63c; +} +body.theme-cdap.state-hydrator-list .my-pipelines table.table td > span.status-bubble.status-red { + color: #d15668; +} +body.theme-cdap.state-hydrator-list .my-pipelines table.table td > span.status-bubble.status-grey { + color: #6f7c9f; +} +body.theme-cdap.state-hydrator-list .my-pipelines table.table td > span.status-bubble.status-light-grey { + color: #999999; +} +body.theme-cdap.state-hydrator-list .my-pipelines table.table td > span.status-bubble.status-light-green { + color: #00C853; +} +body.theme-cdap.state-hydrator-list .my-pipelines table.table td > span.status-bubble.status-blue { + color: #4761e7; +} +body.theme-cdap.state-hydrator-list .my-pipelines table.table td > span.status-bubble.status-light-red { + color: #D15668; +} +body.theme-cdap.state-hydrator-list .my-pipelines table.table td > span.status-bubble .icon-svg { + font-size: 12px; +} +body.theme-cdap.state-hydrator-list .my-pipelines table.table .delete-draft { + cursor: pointer; +} +body.theme-cdap.state-hydrator-list .my-pipelines .well { + margin-top: 10px; +} +.popover.metrics-popover .popover-title { + padding-bottom: 5px; + padding-left: 15px; +} +.popover.metrics-popover .popover-title h4, +.popover.metrics-popover .popover-title h5 { + color: initial; +} +.popover.metrics-popover .popover-title h4 { + margin-bottom: -3px; +} +.popover.metrics-popover .popover-content { + padding-left: 15px; +} +.popover.metrics-popover .popover-content .metrics-content { + background-color: white; +} +.popover.metrics-popover .popover-content .metrics-content .metrics-records-out, +.popover.metrics-popover .popover-content .metrics-content .metrics-errors { + display: inline-block; + min-width: 50%; +} +.popover.metrics-popover .popover-content .metrics-content .metrics-records-out h5, +.popover.metrics-popover .popover-content .metrics-content .metrics-errors h5 { + margin-top: 0; + margin-bottom: 4px; + font-weight: 600; +} +.popover.metrics-popover .popover-content .metrics-content .metrics-records-out { + color: #0099ff; +} +.popover.metrics-popover .popover-content .metrics-content .metrics-errors { + color: #D15668; +} + +/* + * Copyright © 2015-2019 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +body.theme-cdap.state-hydrator.state-hydrator-detail { + background-color: #f6f6f6; +} +body.theme-cdap.state-hydrator.state-hydrator-detail my-dag-plus .my-js-dag { + border-bottom: 0; +} +body.theme-cdap.state-hydrator.state-hydrator-detail div.console div.console-tabs ul.nav-tabs li { + margin-bottom: -1px; +} +body.theme-cdap.state-hydrator.state-hydrator-detail div.console div.console-type { + overflow-x: hidden; + padding: 0; + width: 100%; +} +body.theme-cdap.state-hydrator.state-hydrator-detail div.console div.console-type .p-10 { + padding: 10px; +} +body.theme-cdap.state-hydrator.state-hydrator-detail div.console div.console-type button.btn-grey { + margin-top: 10px; +} +body.theme-cdap.state-hydrator.state-hydrator-detail div.console div.bottompanel-body { + width: 100%; +} +body.theme-cdap.state-hydrator.state-hydrator-detail div.console .history-table .table { + border: 1px solid #dddddd; +} +body.theme-cdap.state-hydrator.state-hydrator-detail div.console .table th { + height: 30px; + padding: 0 5px; + vertical-align: middle; +} +body.theme-cdap.state-hydrator.state-hydrator-detail div.console .table td.metric-cell { + padding: 0; +} +body.theme-cdap.state-hydrator.state-hydrator-detail div.console .table.metric-table tr:first-child > td { + border-top: 0; +} +body.theme-cdap.state-hydrator.state-hydrator-detail div.console .table.metric-table tr:last-child > td { + border-bottom: 0; +} +body.theme-cdap.state-hydrator.state-hydrator-detail div.console .table.metric-table td:first-child { + border-left: 0; +} +body.theme-cdap.state-hydrator.state-hydrator-detail div.console .table.metric-table td:last-child { + border-right: 0; +} +body.theme-cdap.state-hydrator.state-hydrator-detail div.console select.cron-select:hover { + cursor: not-allowed; +} +body.theme-cdap.state-hydrator.state-hydrator-detail div.console.maximized { + top: 93px; +} +body.theme-cdap.state-hydrator div.console { + background-color: white; + position: relative; + width: 100%; + min-height: calc(40vh - 113px); + z-index: 999; + transition: height 0.2s ease; +} +@media (min-height: 800px) { + body.theme-cdap.state-hydrator div.console { + min-height: calc(60vh - 113px); + } +} +body.theme-cdap.state-hydrator div.console.minimized { + position: fixed; + right: 0; + bottom: 53px; + min-height: 0; + z-index: 999; +} +body.theme-cdap.state-hydrator div.console.minimized .console-type { + display: none; + height: 0; + min-height: 0; +} +body.theme-cdap.state-hydrator div.console:not(.minimized) span.badge { + position: relative; +} +body.theme-cdap.state-hydrator div.console.maximized { + position: fixed; + right: 0; + left: 0; + bottom: 53px; + overflow-y: scroll; + overflow-x: hidden; + z-index: 999; +} +body.theme-cdap.state-hydrator div.console.maximized div.console-tabs { + border-top: 0; +} +body.theme-cdap.state-hydrator div.console.maximized .post-actions-tab .post-actions-sidebar { + top: 41px; +} +body.theme-cdap.state-hydrator div.left-panel-wrapper ~ .right-wrapper div.console:not(.maximized) { + width: calc(100vw - 130px); + transition: width 0.2s ease; +} +body.theme-cdap.state-hydrator div.left-panel-wrapper.expanded ~ .right-wrapper div.console:not(.maximized) { + width: calc(100vw - 290px); +} +body.theme-cdap.state-hydrator div.console-tabs { + background-color: #ebecf1; + border-top: 1px solid #dddddd; + position: relative; +} +body.theme-cdap.state-hydrator div.console-tabs ul.nav-tabs { + border-bottom: 0; +} +body.theme-cdap.state-hydrator div.console-tabs ul.nav-tabs li { + margin-bottom: 0; + border-radius: 0; + border: 0; + border-bottom: 1px solid #ebecf1; + color: #666666; + font-weight: 500; + line-height: inherit; + margin-right: 0; + padding: 10px 15px; + transition: all 0.2s ease; +} +body.theme-cdap.state-hydrator div.console-tabs ul.nav-tabs li:hover, +body.theme-cdap.state-hydrator div.console-tabs ul.nav-tabs li:focus { + background-color: transparent; + border: 0; + border-bottom: 2px solid transparent; + cursor: pointer; +} +body.theme-cdap.state-hydrator div.console-tabs ul.nav-tabs li.bg-danger { + background-color: rgba(209, 86, 104, 0.4); +} +body.theme-cdap.state-hydrator div.console-tabs ul.nav-tabs li.bg-success { + background-color: rgba(74, 182, 60, 0.4); +} +body.theme-cdap.state-hydrator div.console-tabs ul.nav-tabs li.bg-primary { + background-color: rgba(90, 132, 228, 0.4); +} +body.theme-cdap.state-hydrator div.console-tabs ul.nav-tabs li.active { + border-bottom: 2px solid var(--brand-primary-color); +} +body.theme-cdap.state-hydrator div.console-tabs ul.nav-tabs li .badge { + display: inline; + margin-left: 5px; +} +body.theme-cdap.state-hydrator div.console-tabs > div { + margin: 0 10px; +} +body.theme-cdap.state-hydrator div.console-tabs > div a { + color: #5a84e4; + cursor: default; + display: inline-block; + padding: 10px; + transition: all 0.2s ease; +} +body.theme-cdap.state-hydrator div.console-tabs > div a:hover, +body.theme-cdap.state-hydrator div.console-tabs > div a:focus { + color: var(--brand-primary-color); + cursor: pointer; +} +body.theme-cdap.state-hydrator .form-input-attr { + padding-right: 0; +} +body.theme-cdap.state-hydrator .form-input-attr.col-xs-11 { + padding-left: 100px; +} +body.theme-cdap.state-hydrator .form-input-attr .highlight-error { + border: 1px solid #d15668; + border-radius: 4px; +} +body.theme-cdap.state-hydrator .info-attr { + padding-left: 5px; +} +body.theme-cdap.state-hydrator div.console-type { + border-top: 1px solid #dddddd; +} +body.theme-cdap.state-hydrator div.console-type h4 { + color: #666666; + font-size: 14px; + font-weight: 500; + margin-top: 0; +} +body.theme-cdap.state-hydrator div.console-type .plugin-group-description { + color: #999999; +} +body.theme-cdap.state-hydrator div.console-type .field-header.subtitle { + color: #999999; + border-bottom: 1px solid #666666; + clear: both; + width: 100%; + margin-bottom: 0; + display: flex; + align-items: center; +} +body.theme-cdap.state-hydrator div.console-type .field-header.subtitle h4 { + display: inline-block; + background-color: #ffffff; + padding-right: 5px; + font-size: 16px; + font-weight: bold; + margin-bottom: 4px; +} +body.theme-cdap.state-hydrator div.console-type .select-wrapper { + background-color: transparent; + display: inline-block; + position: relative; + width: 100%; +} +body.theme-cdap.state-hydrator div.console-type .select-wrapper:after { + color: #3c4355; + content: "\f0d7"; + font-family: 'FontAwesome'; + position: absolute; + top: 25%; + right: 10px; + z-index: 5; +} +body.theme-cdap.state-hydrator div.console-type .select-wrapper select.form-control { + background-color: transparent; + padding-right: 20px; + position: relative; + z-index: 10; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + -o-appearance: none; + color: #555555; +} +body.theme-cdap.state-hydrator div.console-type .select-wrapper select.form-control ::-ms-expand { + display: none; +} +body.theme-cdap.state-hydrator div.console-type fieldset { + width: 100%; +} +body.theme-cdap.state-hydrator div.console-type fieldset .widget-group-container a.btn { + padding-right: 6px; + padding-left: 6px; +} +body.theme-cdap.state-hydrator div.console-type fieldset .widget-group-container.well .form-group { + margin-bottom: 10px; +} +body.theme-cdap.state-hydrator div.console-type fieldset .widget-group-container.no-config .macro-indicator-container { + line-height: 32px; +} +body.theme-cdap.state-hydrator div.console-type fieldset .widget-group-container.no-config .macro-indicator-container .macro-indicator { + color: #098cf9; + transform: scale(0.7); +} +body.theme-cdap.state-hydrator div.console-type fieldset .widget-group-container.no-config .macro-indicator-container .macro-indicator .icon-M { + line-height: inherit; +} +body.theme-cdap.state-hydrator div.console-type fieldset .panel-body { + min-height: 50px; +} +body.theme-cdap.state-hydrator div.console-type .sink-output-schema .output-schema { + margin-top: 20px; +} +body.theme-cdap.state-hydrator div.console-type .old-output-schema-container { + padding-bottom: 10px; +} +body.theme-cdap.state-hydrator div.console-type .output-schema { + height: 100%; +} +body.theme-cdap.state-hydrator div.console-type .output-schema .schema-propagation-confirm { + padding-top: 10px; +} +body.theme-cdap.state-hydrator div.console-type .output-schema .confirmation-button { + margin-top: 5px; +} +body.theme-cdap.state-hydrator div.console-type .output-schema .btn-group .btn { + margin-right: 5px; +} +body.theme-cdap.state-hydrator div.console-type plugin-schema-editor { + height: 100%; + display: block; +} +body.theme-cdap.state-hydrator div.console-type .input-schema { + height: 100%; +} +body.theme-cdap.state-hydrator div.console-type .input-schema .schema-inner { + height: 100%; +} +@media (max-width: 1199px) { + body.theme-cdap.state-hydrator div.console-type .input-schema { + margin-bottom: 15px; + } +} +body.theme-cdap.state-hydrator div.console-type .schema-error ul:only-child { + margin-bottom: 0; +} +body.theme-cdap.state-hydrator div.console-type .schema-inner > textarea { + height: auto; + resize: vertical; +} +body.theme-cdap.state-hydrator div.console-type .table { + background-color: transparent; + margin: 0; +} +body.theme-cdap.state-hydrator div.console-type .table th, +body.theme-cdap.state-hydrator div.console-type .table td { + max-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +body.theme-cdap.state-hydrator div.console-type .table th { + border: 0; + padding: 0; +} +body.theme-cdap.state-hydrator div.console-type .table th label { + margin-bottom: 0; + vertical-align: top; +} +body.theme-cdap.state-hydrator div.console-type .table td { + border: 1px solid #dddddd; + border-collapse: collapse; + height: 36px; + padding: 0 5px; + vertical-align: middle; +} +body.theme-cdap.state-hydrator div.console-type .table td div.select-wrapper:after { + right: 5px; +} +body.theme-cdap.state-hydrator div.console-type .table td select.form-control { + padding-right: 20px; +} +body.theme-cdap.state-hydrator div.console-type .table td.nullable { + width: 35px; +} +body.theme-cdap.state-hydrator div.console-type .table td.trash { + width: 35px; +} +body.theme-cdap.state-hydrator div.console-type .table td.trash a { + padding-left: 0; + padding-right: 0; +} +body.theme-cdap.state-hydrator div.console-type .table td.trash .btn:active { + box-shadow: none; +} +body.theme-cdap.state-hydrator div.console-type .table.table-curved tr:first-child td { + border-top: 0; +} +body.theme-cdap.state-hydrator div.console-type .table.table-curved tr:first-child td:first-child { + border-radius: 8px 0 0 0; +} +body.theme-cdap.state-hydrator div.console-type .table.table-curved tr:first-child td:last-child { + border-radius: 0 8px 0 0; +} +body.theme-cdap.state-hydrator div.console-type .table.table-curved td { + border-width: 1px 0 0 1px; +} +body.theme-cdap.state-hydrator div.console-type .table .control-label { + font-size: 13px; +} +body.theme-cdap.state-hydrator div.console-type .table .form-control { + border: 0; + padding: 0; +} +body.theme-cdap.state-hydrator div.console-type .table input[type="text"] { + padding-left: 5px; +} +body.theme-cdap.state-hydrator div.console-type .table input[type="checkbox"] { + margin: 0; +} +body.theme-cdap.state-hydrator div.console-type .table .fa-trash { + color: #d15668; + font-size: 15px; +} +body.theme-cdap.state-hydrator div.console-type .form-control { + box-shadow: none; +} +body.theme-cdap.state-hydrator div.console-type .form-control:focus { + border-color: #dddddd; + outline: 1px solid #098cf9; + box-shadow: none; +} +body.theme-cdap.state-hydrator div.console-type td.active-cell input:focus, +body.theme-cdap.state-hydrator div.console-type td.active-cell select:focus { + outline: 0; +} +body.theme-cdap.state-hydrator div.console-type .loading-message { + margin-left: 10px; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-header { + border-bottom: 1px solid #dddddd; + padding: 10px; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-header > div:first-child { + max-width: 80%; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-header h3 { + color: #333333; + font-size: 16px; + font-weight: 500; + margin: 0 0 5px; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-header p { + color: #9d9d9d; + margin-bottom: 0; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-header .btn-group > div { + display: inline-block; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body { + padding: 20px 10px; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body .engine-panel { + padding-left: 20px; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body .engine-panel label { + font-weight: 500; + line-height: 21px; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body .engine-panel h2 { + margin-top: 0; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body .engine-panel h2 .fa.fa-info-circle { + vertical-align: middle; + font-size: 16px; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body .engine-panel h2 .popover { + border-radius: 0; + background: #333333; + color: white; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body .engine-panel h2 .popover .popover-content { + padding-top: 5px; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body .engine-panel h2 .popover .arrow { + border-right-color: #333333; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body .engine-panel h2 .popover .arrow:after { + border-right-color: #333333; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body .engine-panel form { + margin: 15px 0 0 20px; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body .engine-panel form label:not(:first-child) { + margin-top: 10px; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body .empty-hidden-properties-message { + margin: 0 0 5px 0; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body .label-input-container { + padding: 10px; + width: calc(100% - 40px); +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body .config-table form[plugin-property-edit-view] .form-group { + display: flex; + align-items: center; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body .config-table form[plugin-property-edit-view] .form-group .control-label { + padding-top: 0; + padding-right: 0; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body .config-table form[plugin-property-edit-view] .form-group .form-input-attr { + position: relative; + padding-right: 0; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body .config-table form[plugin-property-edit-view] .form-group ul.validation-errors-list { + list-style-position: inside; +} +body.theme-cdap.state-hydrator div.console-type .bottompanel-body .config-table form[plugin-property-edit-view] .form-group ul.validation-errors-list > li { + padding: 0; +} +@media (min-width: 1200px) { + body.theme-cdap.state-hydrator div.console-type .action-table form[plugin-property-edit-view] .form-input-attr.code-editor { + padding-left: 200px; + } +} +@media (min-width: 1800px) { + body.theme-cdap.state-hydrator div.console-type .action-table form[plugin-property-edit-view] .form-input-attr.code-editor { + padding-left: 300px; + } +} +@media (min-width: 2400px) { + body.theme-cdap.state-hydrator div.console-type .action-table form[plugin-property-edit-view] .form-input-attr.code-editor { + padding-left: 400px; + } +} +body.theme-cdap.state-hydrator div.console-type .post-actions-detail .table th, +body.theme-cdap.state-hydrator div.console-type .post-actions-tab .table th, +body.theme-cdap.state-hydrator div.console-type .post-actions-detail .table td, +body.theme-cdap.state-hydrator div.console-type .post-actions-tab .table td { + padding: 10px; + font-size: 13px; + font-weight: 500; +} +body.theme-cdap.state-hydrator div.console-type .post-actions-detail .table th, +body.theme-cdap.state-hydrator div.console-type .post-actions-tab .table th { + border: 1px solid #dddddd; + cursor: default; +} +body.theme-cdap.state-hydrator div.console-type .post-actions-detail .table td, +body.theme-cdap.state-hydrator div.console-type .post-actions-tab .table td { + color: #999999; +} +body.theme-cdap.state-hydrator div.console-type .post-actions-detail .table td:first-child, +body.theme-cdap.state-hydrator div.console-type .post-actions-tab .table td:first-child { + width: 200px; +} +body.theme-cdap.state-hydrator div.console-type .post-actions-detail .table td:nth-child(3), +body.theme-cdap.state-hydrator div.console-type .post-actions-tab .table td:nth-child(3) { + width: 200px; +} +body.theme-cdap.state-hydrator div.console-type .post-actions-detail .table td:last-child, +body.theme-cdap.state-hydrator div.console-type .post-actions-tab .table td:last-child { + width: 80px; +} +body.theme-cdap.state-hydrator div.console-type .post-actions-detail .table td:last-child a, +body.theme-cdap.state-hydrator div.console-type .post-actions-tab .table td:last-child a { + color: #098cf9; +} +body.theme-cdap.state-hydrator div.console-type .post-actions-detail .table td:last-child i, +body.theme-cdap.state-hydrator div.console-type .post-actions-tab .table td:last-child i { + cursor: pointer; +} +body.theme-cdap.state-hydrator div.console-type .post-actions-tab .post-actions-sidebar { + width: 150px; + border-right: 1px solid #d4d4d4; + background-color: #eeeeee; + position: absolute; + top: 42px; + bottom: 0; +} +body.theme-cdap.state-hydrator div.console-type .post-actions-tab .post-actions-sidebar ul li { + height: 40px; + line-height: 40px; + font-weight: 500; + color: #999999; + cursor: pointer; + border-bottom: 1px solid #d4d4d4; + padding-left: 15px; +} +body.theme-cdap.state-hydrator div.console-type .post-actions-tab .post-actions-sidebar ul li.active { + background-color: white; + color: #098cf9; + width: calc(100% + 1px); +} +body.theme-cdap.state-hydrator div.console-type .post-actions-tab .post-actions-content { + width: calc(100% - 151px); + float: right; + min-height: 40vh; +} +body.theme-cdap.state-hydrator div.console-type .post-actions-tab .post-actions-content .main-container { + padding: 10px 20px 10px 10px; +} +body.theme-cdap.state-hydrator div.console-type .post-actions-tab .post-actions-content .main-container .empty-message { + margin-top: 100px; + margin-bottom: 100px; +} +body.theme-cdap.state-hydrator div.console-type .post-actions-tab .post-actions-content .main-container .action-buttons button { + margin-left: 15px; + width: 80px; +} +body.theme-cdap.state-hydrator div.console-type pre { + background-color: transparent; + border: 0; + display: inline; + padding: 0; + white-space: pre-wrap; +} +body.theme-cdap.state-hydrator div.console-type pre:after { + display: block; + content: ''; + margin-bottom: 10px; +} +body.theme-cdap.state-hydrator .tooltip.tooltip-pane { + z-index: 9999; +} +body.theme-cdap.state-hydrator footer.app-footer { + border-top: 1px solid #dddddd; + position: fixed; + z-index: 999; +} + +/* + * Copyright © 2016-2019 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +.modal.hydrator-modal.confirm-modal .modal-dialog { + max-width: 400px; +} +.modal.hydrator-modal.confirm-modal .modal-dialog .modal-body { + font-weight: 500; + font-size: 16px; + padding-top: 25px; +} +.modal.hydrator-modal.confirm-modal .modal-dialog .modal-body strong { + font-size: 22px; +} +.modal.hydrator-modal.confirm-modal .modal-dialog .modal-body .fa.fa-times { + color: #999999; + cursor: pointer; +} +.modal.hydrator-modal.confirm-modal .modal-dialog .modal-footer .btn { + width: 100px; +} +.modal.hydrator-modal .modal-dialog .modal-header { + display: grid; + grid-template-columns: auto 1fr auto auto; + grid-template-rows: 60px; + align-items: center; +} +.modal.hydrator-modal .modal-dialog .modal-header .modal-title { + padding-left: 15px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + font-weight: 500; + line-height: 1.4; +} +.modal.hydrator-modal .modal-dialog .modal-header .modal-title.with-jump { + max-width: calc(100% - 180px); +} +.modal.hydrator-modal .modal-dialog .modal-header .modal-title p { + min-width: 100%; + text-overflow: ellipsis; + overflow-wrap: break-word; + overflow: hidden; + white-space: nowrap; + line-height: 1.4; +} +.modal.hydrator-modal .modal-dialog .modal-header .plugin-modal-btns > * { + display: inline-block; + vertical-align: middle; +} +.modal.hydrator-modal .modal-dialog .modal-header .plugin-modal-btns .plugin-comments-wrapper { + margin-right: 10px; +} +.modal.hydrator-modal .modal-dialog .modal-header div.btn-group { + max-width: none; +} +@media (max-width: 991px) { + .modal.hydrator-modal .modal-dialog .modal-header > div { + max-width: none; + } +} +.modal.hydrator-modal .modal-dialog .modal-header > div.btn-group { + max-width: none; +} +.modal.hydrator-modal .modal-dialog .modal-header .validate-btn { + margin: 15px; + border-radius: 4px; + width: 75px; +} +.modal.hydrator-modal .modal-dialog .modal-header my-link-button { + padding: 0; + border: 0; + display: inline; + cursor: default; + margin: 0; + padding-right: 10px; +} +.modal.hydrator-modal .modal-dialog .modal-header my-link-button .btn.btn-my-link { + border-left: 0; + padding: 6px; + background: gray; + display: inline; + color: white; + border-radius: 4px; + border-top-right-radius: 4px; + font-size: 12px; +} +.modal.hydrator-modal .modal-dialog .modal-header my-link-button:active { + box-shadow: none; +} +.modal.hydrator-modal .modal-dialog .modal-header a.btn { + background: transparent; + border: 0; + border-radius: 0; + background-clip: padding-box; + color: #3c4355; + font-size: 18px; + outline: none; + padding: 0; + white-space: normal; + border-left: 1px solid #c9ccd6; + width: 60px; + height: 60px; + line-height: 60px; +} +.modal.hydrator-modal .modal-dialog .modal-header a.btn:hover { + background-color: #3c4355; + border: 0; + color: white; + background-clip: padding-box; +} +.modal.hydrator-modal .modal-dialog .modal-body { + padding: 10px 20px 0; +} +.modal.hydrator-modal .modal-dialog textarea.query-input { + margin-bottom: 10px; +} +.modal.hydrator-modal .modal-dialog textarea.query-input + button { + margin-bottom: 10px; +} +.modal.hydrator-modal .modal-dialog .modal-footer { + padding-left: 20px; + padding-right: 20px; +} +.modal.hydrator-modal.get-schema-modal .modal-dialog textarea.form-control { + width: 90%; + margin-bottom: 10px; +} +.modal.hydrator-modal.node-config-modal, +.modal.hydrator-modal.post-run-actions-modal { + overflow: hidden; +} +.modal.hydrator-modal.node-config-modal .modal-dialog, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog { + width: 100%; + height: calc(100vh - 50px); + overflow-y: hidden; + margin: 0; + margin-top: 50px; +} +.modal.hydrator-modal.node-config-modal .modal-dialog.expand, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog.expand { + margin-left: 0; + width: 100%; + height: calc(100vh - 100px); + margin-bottom: 0; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content { + height: inherit; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body { + padding: 10px 10px 0; + overflow: hidden; + max-height: unset; + height: calc(100% - 60px); +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type { + border: 1px solid #dddddd; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .plugin-function-bottom plugin-functions > *, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .plugin-function-bottom plugin-functions > * { + top: 25px; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .plugin-functions-container, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .plugin-functions-container { + display: flex; + justify-content: flex-end; + margin: 10px 0; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config ul.nav.nav-tabs li, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config ul.nav.nav-tabs li { + color: #666666; + font-weight: 500; + padding: 10px 15px; + cursor: pointer; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config ul.nav.nav-tabs li.active, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config ul.nav.nav-tabs li.active { + border-bottom: 3px solid #3b78e7; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config ul.nav.nav-tabs li.disabled, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config ul.nav.nav-tabs li.disabled { + cursor: not-allowed; + color: #cccccc; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body { + padding: 0 0 10px 0; + height: calc(100vh - 180px); + overflow-y: auto; + overflow-x: hidden; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body .reference-tab, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body .reference-tab { + padding: 0 10px; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body .btn-hydrator, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body .btn-hydrator { + background-color: #098cf9; + color: white; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body .config-table.sink-table > div .row, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body .config-table.sink-table > div .row { + display: block; +} +@media (min-width: 992px) { + .modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body .no-plugin-properties-message, + .modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body .no-plugin-properties-message { + margin: 10px; + } + .modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body > p, + .modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body > p, + .modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body .validator-plugin > div, + .modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body .validator-plugin > div { + padding: 20px 10px; + } + .modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.config-table, + .modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.config-table { + display: grid; + width: 100%; + height: calc(100vh - 180px); + } + .modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.config-table > div, + .modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.config-table > div { + padding: 10px 10px; + vertical-align: top; + overflow-y: auto; + } + .modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.config-table > div .output-schema-container, + .modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.config-table > div .output-schema-container { + height: 100%; + } + .modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.source-table, + .modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.source-table { + grid-template-columns: 67% 33%; + } + .modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.source-table > div:first-child, + .modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.source-table > div:first-child { + border-right: 1px solid #dddddd; + } + .modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.transform-table, + .modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.transform-table { + grid-template-columns: minmax(250px, 25%) 50% minmax(250px, 25%); + } + .modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.transform-table > div:nth-child(2), + .modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.transform-table > div:nth-child(2) { + border-right: 1px solid #dddddd; + border-left: 1px solid #dddddd; + } + .modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.sink-table, + .modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.sink-table { + grid-template-columns: 33% 67%; + } + .modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.sink-table > div:first-child, + .modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .bottompanel-body div.sink-table > div:first-child { + border-right: 1px solid #dddddd; + } +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .row.preview-no-data h3, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .row.preview-no-data h3 { + font-size: 16px; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .row.preview-tab, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .row.preview-tab { + margin-left: 0; + margin-right: 0; + height: 100%; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records { + padding: 0; + height: 100%; + overflow: auto; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records:first-child, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records:first-child { + border-right: 2px solid #dddddd; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records h4, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records h4 { + padding-left: 5px; + margin-top: 20px; + font-size: 18px; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records h4.message, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records h4.message { + font-size: 16px; + font-weight: 300; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records .schema-toggle, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records .schema-toggle { + padding-left: 15px; + cursor: pointer; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records h5.stage-title, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records h5.stage-title { + margin-left: 5px; + margin-top: 20px; + font-size: 15px; + font-weight: 500; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records table.table, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records table.table { + margin-top: 10px; + border: 0; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records table.table th, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records table.table th { + font-size: 13px; + padding-left: 5px; + padding-bottom: 5px; + max-width: initial; + overflow: initial; + text-overflow: initial; + white-space: initial; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records table.table th:hover, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records table.table th:hover, +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records table.table th:focus, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records table.table th:focus { + cursor: default; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records table.table tr > td, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records table.table tr > td { + max-width: initial; + overflow: initial; + text-overflow: initial; + white-space: initial; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records table.table tr > td:first-child, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records table.table tr > td:first-child { + border-left: 0; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records table.table tr > td:last-child, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .console-type .node-config .preview-records table.table tr > td:last-child { + border-right: 0; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .control-label, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .control-label { + font-weight: 500; + padding-right: 0; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .control-label .required:after, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body .control-label .required:after { + color: #d15668; + content: "*"; + font-size: 16px; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body table.table .control-label, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body table.table .control-label { + font-weight: bold; +} +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body div.header > h4, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body div.header > h4, +.modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body div.nullable-header > h4, +.modal.hydrator-modal.post-run-actions-modal .modal-dialog .modal-content .modal-body div.nullable-header > h4 { + color: #666666; + font-size: 14px; + font-weight: 500; +} +.modal.hydrator-modal.layered-modal .modal-dialog { + margin: 90px auto 0; + width: 50%; +} +body.theme-cdap.state-hydrator-detail .modal.hydrator-modal.node-config-modal .modal-dialog { + margin-top: 0; + margin-top: 50px; + height: calc(100vh - 50px); + width: 100%; +} +body.theme-cdap.state-hydrator-detail .modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-header .modal-title { + max-width: calc(100% - 180px); +} +body.theme-cdap.state-hydrator-detail .modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body { + max-height: unset; +} +body.theme-cdap.state-hydrator-detail .modal.hydrator-modal.node-config-modal .modal-dialog .modal-content .modal-body .console-type .node-config div.config-table { + height: calc(100vh - 180px); +} +.modal.wrangler-modal, +.modal.rules-engine-modal { + overflow-y: hidden; + margin-top: 48px; +} +.modal.wrangler-modal .modal-dialog, +.modal.rules-engine-modal .modal-dialog { + width: 100vw; + margin-top: 0; +} +.modal.wrangler-modal .modal-dialog .modal-content, +.modal.rules-engine-modal .modal-dialog .modal-content { + height: calc(100vh - 48px); + border-radius: 0; +} +.modal.wrangler-modal .modal-dialog .modal-content .modal-header, +.modal.rules-engine-modal .modal-dialog .modal-content .modal-header { + height: 50px; + display: flex; + align-items: center; + justify-content: space-between; + background-color: #ebecf1; + border-bottom: 1px solid #c9ccd6; + padding: 0; +} +.modal.wrangler-modal .modal-dialog .modal-content .modal-header > h4, +.modal.rules-engine-modal .modal-dialog .modal-content .modal-header > h4, +.modal.wrangler-modal .modal-dialog .modal-content .modal-header .modal-title, +.modal.rules-engine-modal .modal-dialog .modal-content .modal-header .modal-title { + padding-left: 15px; + max-width: 80%; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + font-weight: 500; + margin-right: auto; +} +.modal.wrangler-modal .modal-dialog .modal-content .modal-header div.btn-group, +.modal.rules-engine-modal .modal-dialog .modal-content .modal-header div.btn-group { + margin-left: auto; +} +.modal.wrangler-modal .modal-dialog .modal-content .modal-header a.btn, +.modal.rules-engine-modal .modal-dialog .modal-content .modal-header a.btn { + background: transparent; + border: 0; + border-radius: 0; + background-clip: padding-box; + color: #3c4355; + font-size: 18px; + outline: none; + padding: 0; + white-space: normal; + border-left: 1px solid #c9ccd6; + width: 61px; + height: 50px; + line-height: 50px; +} +.modal.wrangler-modal .modal-dialog .modal-content .modal-header a.btn:last-child, +.modal.rules-engine-modal .modal-dialog .modal-content .modal-header a.btn:last-child { + margin-right: -1px; +} +.modal.wrangler-modal .modal-dialog .modal-content .modal-header a.btn:hover, +.modal.rules-engine-modal .modal-dialog .modal-content .modal-header a.btn:hover { + background-color: #3c4355; + border: 0; + color: white; + background-clip: padding-box; +} +.modal.wrangler-modal .modal-dialog .modal-content .modal-body, +.modal.rules-engine-modal .modal-dialog .modal-content .modal-body { + height: calc(100vh - 50px); + max-height: initial; + padding: 0; + overflow: hidden; +} +.modal.wrangler-modal .modal-dialog .modal-content .modal-body .data-table, +.modal.rules-engine-modal .modal-dialog .modal-content .modal-body .data-table { + overflow-y: hidden; + height: calc(100% - 62px); +} +.modal.wrangler-modal .modal-dialog .modal-content .modal-body .table, +.modal.rules-engine-modal .modal-dialog .modal-content .modal-body .table { + margin-top: 0; +} +.modal.wrangler-modal .modal-dialog .modal-content .modal-body .table th, +.modal.rules-engine-modal .modal-dialog .modal-content .modal-body .table th { + padding: 8px; + font-size: 13px; +} +.modal.upgrade-modal.hydrator-modal.node-config-modal .modal-content .modal-body { + padding-top: 0; + max-height: calc(100vh - 175px); + overflow: hidden; + padding-bottom: 0; + overflow-y: auto; +} +.modal.upgrade-modal.hydrator-modal.node-config-modal .modal-content .modal-body .modal-footer { + border-top: 1px solid #cccccc; +} +.modal.upgrade-modal.hydrator-modal.node-config-modal .import-error-row { + padding: 10px; + border-bottom: 1px solid #c9ccd6; +} +.modal.upgrade-modal.hydrator-modal.node-config-modal .modal-body { + overflow-x: hidden; +} +.modal.upgrade-modal.hydrator-modal.node-config-modal h4 { + font-weight: 500; +} +.modal.upgrade-modal.hydrator-modal.node-config-modal .error-description { + margin-bottom: 5px; +} +.modal.upgrade-modal.hydrator-modal.node-config-modal .error-suggestion span:not(:first-child) { + margin-left: 20px; +} +.modal.upgrade-modal.hydrator-modal.node-config-modal .source { + color: #48c038; +} +.modal.upgrade-modal.hydrator-modal.node-config-modal .transform { + color: #4586f3; +} +.modal.upgrade-modal.hydrator-modal.node-config-modal .sink { + color: #8367df; +} +.modal.upgrade-modal.hydrator-modal.node-config-modal .error { + color: #d40001; +} +.modal.upgrade-modal.hydrator-modal.node-config-modal .action { + color: #988470; +} +.modal.upgrade-modal.hydrator-modal.node-config-modal .action.sparkprogram { + color: #454a57; +} +.modal.upgrade-modal.hydrator-modal.node-config-modal .alertpublisher { + color: #ffba01; +} + +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +body.theme-cdap.state-hydrator-create .left-panel-wrapper { + position: fixed; + top: 50px; + bottom: 53px; + left: 0; + z-index: 999; + background: #e1e1e1; + transition: width 0.2s ease; + width: 130px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded { + width: 290px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .left-top-section { + padding: 6.5px 0; + background: white; + border-right: 1px solid #dddddd; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .left-top-section select.form-control { + width: 270px; + margin-left: 10px; + height: 30px; + background: #999999; + color: white; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .left-top-section .btn.btn-default { + width: 47.5%; + height: 26px; + line-height: 12px; + margin: 8px 0; + font-weight: 600; + color: #9a9a9a; + font-size: 12px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .left-top-section .import-section { + padding-left: 10px; + margin-top: 1px; + display: block; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .left-top-section .import-section strong { + font-size: 12px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .left-top-section .import-section strong:last-child { + margin-left: 20px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .left-top-section .import-section strong a { + text-decoration: none; + color: #bebebe; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .left-top-section .import-section strong a:focus { + outline: 0; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel { + display: block; + border-right: 1px solid #dddddd; + border-top: 1px solid #dddddd; + height: calc(100% - 43px); + height: -webkit-calc(100% - 43px); +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .hydrator-filter, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .hydrator-filter { + min-height: 50px; + padding: 9px 5px 9px 10px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .hydrator-filter .btn-group, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .hydrator-filter .btn-group, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .hydrator-filter input.form-control, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .hydrator-filter input.form-control { + display: inline-block; + height: 32px; + vertical-align: top; + margin: 0; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .hydrator-filter input.form-control, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .hydrator-filter input.form-control { + border: 1px solid #dfe2e9; + width: 175px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .hydrator-filter .btn-group, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .hydrator-filter .btn-group { + display: inline-block; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .hydrator-filter .btn-group .btn.btn-default, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .hydrator-filter .btn-group .btn.btn-default { + height: 32px; + margin-top: 0; + border: 1px solid #dfe2e9; + box-shadow: none; + line-height: 20px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .hydrator-filter .btn-group .btn.btn-default.active, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .hydrator-filter .btn-group .btn.btn-default.active { + background: #bebebe; + color: white; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container { + position: static; + border-top: 1px solid #d4d4d4; + height: calc(100% - 50px); + height: -webkit-calc(100% - 50px); +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item { + color: #666e83; + font-size: 14px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body .name, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body .name, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-heading .name, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-heading .name { + width: auto; + display: inline-block; + vertical-align: top; + overflow-x: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-weight: 500; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body .name.plugin-name, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body .name.plugin-name, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-heading .name.plugin-name, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-heading .name.plugin-name { + text-overflow: initial; + white-space: normal; + overflow-x: auto; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item.item-open .item-heading, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item.item-open .item-heading { + border-bottom-color: transparent; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item.item-open .item-body-wrapper, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item.item-open .item-body-wrapper { + height: calc(100% - 35px); +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-heading, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-heading { + color: black; + font-weight: bold; + padding: 0 15px 0 10px; + height: 35px; + line-height: 35px; + width: 100%; + border-bottom: 1px solid #d4d4d4; + background-color: #e8e8e8; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-heading span.name, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-heading span.name { + font-size: 13px; + line-height: inherit; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body-wrapper, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body-wrapper { + overflow-y: auto; + overflow-x: hidden; + border-top: 1px solid #cbcbcb; + border-bottom: 1px solid #cbcbcb; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body.view-icon, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body.view-icon { + padding: 10px 5px 0; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: baseline; + min-width: 100%; +} +@media (max-height: 550px) { + body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body.view-icon, + body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body.view-icon { + max-height: 20vh; + } +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body.view-icon .plugin-item, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body.view-icon .plugin-item { + text-align: center; + position: relative; + background-color: white; + color: #666666; + line-height: 32px; + margin-bottom: 7px; + padding: 0 6px; + width: 33%; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body.view-icon .plugin-item.hovered, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body.view-icon .plugin-item.hovered { + background-color: #ebebeb; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body.view-icon .plugin-item .name, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body.view-icon .plugin-item .name { + display: inline-block; + max-width: 90px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body.view-icon .plugin-item .plugin-badge, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body.view-icon .plugin-item .plugin-badge { + display: none; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body.view-icon .plugin-item.plugin-templates .plugin-badge, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body.view-icon .plugin-item.plugin-templates .plugin-badge { + display: block; + font-size: 8px; + position: absolute; + left: 90%; + background: #d8d8d8; + border-radius: 2px; + margin: 0; + padding: 3px 3px; + line-height: 8px; + top: 3px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body.view-icon .plugin-item > .fa, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body.view-icon .plugin-item > .fa { + font-size: 32px; + width: 32px; + line-height: 32px; + vertical-align: top; + display: block; + margin: 0px auto; + padding-top: 8px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body.view-icon .plugin-item .name, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body.view-icon .plugin-item .name { + font-size: 11px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body.view-icon .plugin-item .name.plugin-name, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body.view-icon .plugin-item .name.plugin-name { + line-height: 14px; + padding-top: 8px; + overflow: hidden; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body.view-list .plugin-item, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body.view-list .plugin-item { + margin: 10px 12px; + text-align: left; + width: 100%; + position: relative; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body.view-list .plugin-item .plugin-badge, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body.view-list .plugin-item .plugin-badge { + display: none; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body.view-list .plugin-item.plugin-templates .plugin-badge, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body.view-list .plugin-item.plugin-templates .plugin-badge { + display: inline-block; + font-size: 8px; + background: #adadad; + color: white; + border-radius: 2px; + margin: 0; + padding: 3px 3px; + line-height: 8px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body.view-list .plugin-item > .fa, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body.view-list .plugin-item > .fa { + font-size: 13px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body.view-list .plugin-item .name, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body.view-list .plugin-item .name { + font-size: 12px; + vertical-align: text-top; + display: inline-block; + max-width: 85%; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel my-side-panel .groups-container .item .item-body .no-item-message, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .my-side-panel .groups-container .item .item-body .no-item-message { + width: 100%; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .btn-left-panel-toggle { + position: absolute; + left: 260px; + top: 53px; + height: 32px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .btn-left-panel-toggle .btn.btn-default { + line-height: 20px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded .left-panel .btn-left-panel-add-plugin { + position: absolute; + left: 144px; + top: 90px; + height: 32px; + line-height: 21px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded ~ .top-panel div.side-panel.top, +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded ~ .top-panel .pipeline-settings { + left: 290px; + max-width: calc(100% - 290px); + max-width: -webkit-calc(100% - 290px); +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded ~ .top-panel div.side-panel.top .hydrator-metadata { + width: calc(100vw - 805px); + width: -webkit-calc(100vw - 805px); +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded ~ .top-panel div.side-panel.top .hydrator-metadata.expanded { + width: calc(100vw - 290px); + width: -webkit-calc(100vw - 290px); +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper.expanded ~ .right-wrapper { + margin-left: 290px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper ~ .top-panel div.side-panel.top .hydrator-metadata { + width: calc(100vw - 644px); + width: -webkit-calc(100vw - 644px); +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper ~ .top-panel div.side-panel.top .hydrator-metadata.expanded { + width: calc(100vw - 130px); + width: -webkit-calc(100vw - 130px); +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper ~ .right-wrapper { + margin-left: 130px; + height: 100%; + position: relative; + transition: all 0.2s ease; + top: 30px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper .left-top-section { + height: 46px; + padding: 6.5px; + background: white; + border-right: 1px solid #dddddd; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper .left-top-section select.form-control { + width: 100%; + height: 30px; + background: #999999; + color: white; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper .left-top-section .btn.btn-default { + width: 100%; + height: 26px; + line-height: 12px; + color: #9a9a9a; + font-weight: 600; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper .left-top-section .btn.btn-default:first-child { + margin: 5px 0; + padding-left: 6px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper .left-top-section .btn.btn-default:last-child { + margin: 0; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .side-panel, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .side-panel { + height: calc(100% - 55px); +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .side-panel ::-webkit-scrollbar, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .side-panel ::-webkit-scrollbar { + display: none; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container { + top: 88px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item { + color: #666e83; + font-size: 14px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item.item-open .name, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item.item-open .name { + font-weight: 500; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item.item-open .item-body-wrapper, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item.item-open .item-body-wrapper { + height: calc(100% - 35px); + overflow-y: auto; + background-color: #ffffff; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item .item-heading, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item .item-heading { + color: black; + font-weight: bold; + padding: 0 5px 0 5px; + height: 35px; + line-height: 35px; + width: 100%; + border-bottom: 1px solid #d4d4d4; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item .item-heading span.name, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item .item-heading span.name { + font-size: 13px; + line-height: inherit; + width: 90px; + display: inline-block; + vertical-align: top; + overflow-x: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-weight: 500; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item .item-heading .badge, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item .item-heading .badge { + padding: 0; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item .item-body.view-icon, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item .item-body.view-icon { + padding: 10px 10px 0; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: baseline; +} +@media (max-height: 550px) { + body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item .item-body.view-icon, + body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item .item-body.view-icon { + max-height: 20vh; + } +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item .item-body.view-icon .plugin-item, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item .item-body.view-icon .plugin-item { + text-align: center; + width: 48%; + position: relative; + background-color: white; + border: 1px solid transparent; + color: #666666; + line-height: 30px; + padding: 0; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item .item-body.view-icon .plugin-item.hovered, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item .item-body.view-icon .plugin-item.hovered { + background-color: #ebebeb; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item .item-body.view-icon .plugin-item .name, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item .item-body.view-icon .plugin-item .name { + display: none; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item .item-body.view-icon .plugin-item .plugin-badge, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item .item-body.view-icon .plugin-item .plugin-badge { + display: none; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item .item-body.view-icon .plugin-item.plugin-templates .plugin-badge, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item .item-body.view-icon .plugin-item.plugin-templates .plugin-badge { + display: block; + font-size: 6px; + position: absolute; + left: 75%; + background: #d8d8d8; + border-radius: 2px; + margin: 0; + padding: 3px 3px; + line-height: 6px; + top: 2px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item .item-body.view-icon .plugin-item > .fa, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item .item-body.view-icon .plugin-item > .fa { + font-size: 32px; + width: 32px; + line-height: 32px; + vertical-align: top; + display: block; + margin: 0px auto; + padding: 7px 0; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item .item-body.view-icon .plugin-item .name, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item .item-body.view-icon .plugin-item .name { + font-size: 11px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item .item-body.view-list .plugin-item, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item .item-body.view-list .plugin-item { + text-align: left; + margin: 5px; + overflow: hidden; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item .item-body.view-list .plugin-item .plugin-badge, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item .item-body.view-list .plugin-item .plugin-badge { + display: none; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item .item-body.view-list .plugin-item.plugin-templates .plugin-badge, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item .item-body.view-list .plugin-item.plugin-templates .plugin-badge { + display: inline-block; + font-size: 8px; + background: #adadad; + color: white; + border-radius: 2px; + margin: 0; + padding: 3px 3px; + line-height: 8px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .groups-container .item .item-body.view-list .plugin-item .name, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .groups-container .item .item-body.view-list .plugin-item .name { + max-width: 70%; + text-overflow: ellipsis; + padding-right: 5px; + overflow: hidden; + font-size: 12px; + vertical-align: text-top; + display: inline-block; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .hydrator-filter, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .hydrator-filter { + padding: 6px 5px 9px 5px; + background: #eeeeee; + min-height: 41px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .hydrator-filter .btn-group, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .hydrator-filter .btn-group { + display: none; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper my-side-panel .hydrator-filter input.form-control, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .my-side-panel .hydrator-filter input.form-control { + width: 90px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper .btn-left-panel-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + position: absolute; + left: 102px; + top: 49px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper .btn-left-panel-add-plugin { + position: absolute; + left: 5px; + top: 108px; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper .badge { + background-color: transparent; + color: #666666; + vertical-align: text-bottom; +} +body.theme-cdap.state-hydrator-create .left-panel-wrapper .badge:before, +body.theme-cdap.state-hydrator-create .left-panel-wrapper .badge:after { + padding: 2px; +} +body.theme-cdap.state-hydrator-create .my-cdap-popover { + padding: 0; + outline: none; + border-radius: 0; +} +body.theme-cdap.state-hydrator-create .my-cdap-popover .arrow { + border-right-color: black; +} +body.theme-cdap.state-hydrator-create .my-cdap-popover .arrow:after { + border-right-color: black; +} +body.theme-cdap.state-hydrator-create .my-cdap-popover:focus { + outline: none; +} +body.theme-cdap.state-hydrator-create .my-cdap-popover .popover-content { + padding: 5px; + background: black; +} +body.theme-cdap.state-hydrator-create .my-cdap-popover .popover-content .list-group { + margin: 0; +} +body.theme-cdap.state-hydrator-create .my-cdap-popover .popover-content .list-group .list-group-item { + padding: 4px 4px; + border: 0; + background: black; + color: white; +} +body.theme-cdap.state-hydrator-create .my-cdap-popover .popover-content .list-group .list-group-item h6:not(:first-child) { + margin-left: 5px; +} +body.theme-cdap.state-hydrator-create .my-cdap-popover .popover-content .list-group .list-group-item h6:not(:first-child) a { + text-decoration: none; +} +body.theme-cdap.state-hydrator-create .my-cdap-popover .popover-content .list-group .list-group-item h6:not(:first-child) a:not(:last-child) { + margin-right: 5px; +} +body.theme-cdap.state-hydrator-create .my-cdap-popover .popover-content .list-group .list-group-item h5, +body.theme-cdap.state-hydrator-create .my-cdap-popover .popover-content .list-group .list-group-item h6 { + margin: 0; + font-weight: bold; + display: inline-block; +} +body.theme-cdap.state-hydrator-create .my-cdap-popover .popover-content .list-group .list-group-item h5 a, +body.theme-cdap.state-hydrator-create .my-cdap-popover .popover-content .list-group .list-group-item h6 a { + text-decoration: none; + margin-left: 3px; +} +body.theme-cdap.state-hydrator-create .modal.plugin-templates-modal { + overflow: hidden; +} +body.theme-cdap.state-hydrator-create .modal.plugin-templates-modal plugin-templates { + display: block; + overflow-y: auto; + overflow-x: hidden; + height: 100%; +} +body.theme-cdap.state-hydrator-create .modal.plugin-templates-modal plugin-templates .modal-dialog { + height: 100%; +} +body.theme-cdap.state-hydrator-create .modal.plugin-templates-modal plugin-templates .modal-body.plugin-template-modal-body { + max-height: calc(100vh - 178px); + overflow-y: auto; +} +body.theme-cdap.state-hydrator-create .modal.plugin-templates-modal plugin-templates .modal-footer { + border-top: 1px solid #ccc; +} +body.theme-cdap.state-hydrator-create .modal.plugin-templates-modal plugin-templates h3 strong { + word-break: break-all; +} +body.theme-cdap.state-hydrator-create .modal.load-artifact-modal .modal-content .inner-section { + border: 2px dotted grey; + height: 200px; + border-radius: 8px; + padding-top: 50px; + background: transparent; + width: 100%; +} +body.theme-cdap.state-hydrator-create .modal.load-artifact-modal .modal-content .inner-section .fa.fa-cloud-upload, +body.theme-cdap.state-hydrator-create .modal.load-artifact-modal .modal-content .inner-section .fa.fa-refresh.fa-spin { + font-size: 64px; +} +body.theme-cdap.state-hydrator-create .modal.load-artifact-modal .modal-content .inner-section .upload-file-name { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +body.theme-cdap.state-hydrator-create .modal.load-artifact-modal .modal-content .inner-section .upload-message { + margin-top: 20px; +} +body.theme-cdap.state-hydrator-create .modal.load-artifact-modal .modal-content .row { + height: 200px; +} +body.theme-cdap.state-hydrator-create .modal.confirm-modal.hydrator-modal .modal-dialog { + max-width: 500px; +} +body.theme-cdap.state-hydrator-create .react-version .canvas-wrapper { + display: flex; + top: 50px; + bottom: 53px; + right: 0; + left: 0; + position: fixed; +} +body.theme-cdap.state-hydrator-create .react-version .left-control { + width: 100%; + display: flex; + z-index: 1; +} +body.theme-cdap.state-hydrator-create .react-version .top-panel { + width: 100%; + z-index: 1; + height: 42px; + flex-shrink: 0; +} +body.theme-cdap.state-hydrator-create .react-version .top-panel .top { + position: inherit; + flex-grow: 10; +} +body.theme-cdap.state-hydrator-create .react-version .top-panel .top .hydrator-metadata { + flex-grow: 2; +} +body.theme-cdap.state-hydrator-create .react-version .top-panel .top .action-buttons { + flex-grow: 1; + justify-content: flex-end; +} +body.theme-cdap.state-hydrator-create .react-version .right-wrapper { + position: absolute; + z-index: 0; + left: 190px; + right: 0; + top: 0; + bottom: 0; +} +body.theme-cdap.state-hydrator-create .react-version .right-wrapper my-dag-plus { + height: 100vh; +} +body.theme-cdap.state-hydrator-create .react-version .left-panel-wrapper { + position: inherit; + width: 190px; + height: 100%; +} +body.theme-cdap.state-hydrator-create .react-version .left-panel-wrapper.expanded { + width: 270px; +} +body.theme-cdap.state-hydrator-create .react-version .left-panel-wrapper.expanded .left-panel .left-top-section { + display: flex; + padding: 4.5px; +} +body.theme-cdap.state-hydrator-create .react-version .left-panel-wrapper.expanded .left-panel .left-top-section select.form-control { + width: unset; +} +body.theme-cdap.state-hydrator-create .react-version .left-panel-wrapper.expanded .left-panel .item-body-wrapper { + width: 100%; +} +body.theme-cdap.state-hydrator-create .react-version .left-panel-wrapper.expanded .left-panel .item-body.view-icon .plugin-item { + max-width: 213px; +} +body.theme-cdap.state-hydrator-create .react-version .left-panel-wrapper .left-panel .left-top-section { + display: flex; +} +body.theme-cdap.state-hydrator-create .react-version .left-panel-wrapper .my-side-panel .side-panel { + max-width: 100%; +} +body.theme-cdap.state-hydrator-create .react-version .left-panel-wrapper .my-side-panel .hydrator-filter { + display: flex; +} +body.theme-cdap.state-hydrator-create .react-version .left-panel-wrapper .my-side-panel .hydrator-filter input.form-control { + width: 106px; +} +body.theme-cdap.state-hydrator-create .react-version .left-panel-wrapper .my-side-panel .hydrator-filter .btn-group { + display: block; +} +@media (min-width: 992px) { + body.theme-cdap.state-hydrator-create .modal.load-artifact-modal .modal-lg { + width: 600px; + } +} + +/* + * Copyright © 2015-2018 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + * Copyright © 2015-2017 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +/* + New start. Define colors used throughout CDAP. Use these colors from now on. +*/ +/* + * Copyright © 2015 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +body.theme-cdap.state-hydrator div.side-panel.top { + background-color: white; + border-bottom: 1px solid #dddddd; + position: fixed; + top: 50px; + right: 0; + z-index: 999; + border-left: 0; + border-top: 0; +} +body.theme-cdap.state-hydrator div.side-panel.top .text-light-running { + background-color: #4761e7; + border-radius: 50%; + height: 20px; + width: 20px; + margin: -2px; + margin-right: 10px; +} +body.theme-cdap.state-hydrator div.side-panel.top .text-outline-grey { + color: white; + border: 3px solid #999999; + border-radius: 50%; + height: 20px; + width: 20px; + margin: -2px; + margin-right: 10px; +} +body.theme-cdap.state-hydrator div.side-panel.top div.pipeline-type { + color: #397cf1; + text-decoration: none; +} +body.theme-cdap.state-hydrator div.side-panel.top div.pipeline-type span { + display: inline-block; + font-size: 1.8em; +} +@media (min-width: 768px) { + body.theme-cdap.state-hydrator div.side-panel.top div.pipeline-type span { + font-size: 20px; + } +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn { + background: white; + border: 0; + border-radius: 0; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; + color: #666; + font-size: 14px; + outline: none; + padding: 3px 0; + white-space: normal; + border-right: 1px solid transparent; + transition: all 0.2s ease; + width: 60px; + margin-left: 0; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn:hover, +body.theme-cdap.state-hydrator div.side-panel.top div.btn:focus { + text-decoration: none; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn .btn-container { + border-left: 1px solid #999999; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn.border-right .btn-container { + border-right: 1px solid #999999; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn.margin-left { + margin-left: 2px; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn[disabled] { + opacity: 1; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn[disabled] span.fa, +body.theme-cdap.state-hydrator div.side-panel.top div.btn[disabled] .button-label { + opacity: 0.65; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn > span:first-child { + line-height: 15px; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn span.fa-play, +body.theme-cdap.state-hydrator div.side-panel.top div.btn span.fa-stop { + font-size: 18px; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn span.fa-info-circle { + color: #666666; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn span.fa-spinner { + line-height: 30px; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn:hover, +body.theme-cdap.state-hydrator div.side-panel.top div.btn:focus, +body.theme-cdap.state-hydrator div.side-panel.top div.btn.btn-select { + background-color: #ebebeb; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn:not([disabled]):active { + background-color: #828da0; + border-top: 1px solid #828da0; + border-right: 1px solid #828da0; + border-bottom: 1px solid #828da0; + color: white; + box-shadow: inset 0 0 20px 0 rgba(0, 0, 0, 0.25); +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn [class*="fa-"] { + font-size: 16px; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn .fa-sliders { + transform: rotate(90deg); +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn.active { + background-color: #cdcdcd; + border-top-color: #cdcdcd; + border-bottom-color: #cdcdcd; + border-right-color: #cdcdcd; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn.run-time { + cursor: default; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn.run-time .btn-container > span { + font-size: 18px; + line-height: 15px; + font-weight: 500; + color: #098cf9; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn.run-time:hover { + background-color: white; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn.run-time:active, +body.theme-cdap.state-hydrator div.side-panel.top div.btn.run-time:focus { + box-shadow: none; + border-top-color: transparent; + border-bottom-color: transparent; + border-right-color: transparent; + background-color: white; +} +body.theme-cdap.state-hydrator div.side-panel.top div.btn div.button-label { + font-size: 11px; +} +@media (max-width: 767px) { + body.theme-cdap.state-hydrator div.side-panel.top div.btn { + display: none; + } +} +body.theme-cdap.state-hydrator .toppanel-tooltip.in { + opacity: 1; +} +body.theme-cdap.state-hydrator .toppanel-tooltip.top .tooltip-arrow { + border-top: 5px solid #666666; +} +body.theme-cdap.state-hydrator .toppanel-tooltip.right { + width: 100%; +} +body.theme-cdap.state-hydrator .toppanel-tooltip.right .tooltip-arrow { + border-right: 5px solid #666666; +} +body.theme-cdap.state-hydrator .toppanel-tooltip.bottom .tooltip-arrow { + border-bottom: 5px solid #666666; +} +body.theme-cdap.state-hydrator .toppanel-tooltip.icon-tooltip { + width: auto; +} +body.theme-cdap.state-hydrator .toppanel-tooltip .tooltip-inner { + background-color: #666666; + border: 1px solid #666666; + padding-right: 10px; + padding-left: 10px; +} +body.theme-cdap.state-hydrator .error-tooltip { + z-index: 999; +} +body.theme-cdap.state-hydrator .error-tooltip.error-node-config { + z-index: 1061; +} +body.theme-cdap.state-hydrator .error-tooltip.top .tooltip-arrow { + border-top: 5px solid #d15668; +} +body.theme-cdap.state-hydrator .error-tooltip.right { + width: 100%; +} +body.theme-cdap.state-hydrator .error-tooltip.right .tooltip-arrow { + border-right: 5px solid #d15668; +} +body.theme-cdap.state-hydrator .error-tooltip.bottom .tooltip-arrow { + border-bottom: 5px solid #d15668; +} +body.theme-cdap.state-hydrator .error-tooltip .tooltip-inner { + background-color: #d15668; + border: 1px solid #d15668; +} +body.theme-cdap.state-hydrator .pipeline-settings { + background: lightgray; + position: fixed; + top: 93px; + max-height: calc(100vh - 143px); + max-height: -webkit-calc(100vh - 143px); + overflow: auto; + right: 0; + z-index: 999; +} +body.theme-cdap.state-hydrator .pipeline-settings:not(.pipeline-logs-section) { + box-shadow: 0 7px 7px rgba(0, 0, 0, 0.1), 0 19px 59px rgba(0, 0, 0, 0.2); +} +body.theme-cdap.state-hydrator .pipeline-settings h5 { + margin: 10px 10px 0; +} +body.theme-cdap.state-hydrator .pipeline-settings .arguments-container { + padding: 5px 10px; + width: 100%; + max-height: calc(100vh - 216px); + max-height: -webkit-calc(100vh - 216px); + overflow-y: auto; + overflow-x: hidden; +} +body.theme-cdap.state-hydrator .pipeline-settings .clearfix { + padding: 0 10px 5px 10px; +} +body.theme-cdap.state-hydrator .pipeline-settings-backdrop { + position: fixed; + height: 100vh; + width: 100vw; + background: black; + top: 0; + left: 0; + opacity: 0; + z-index: 999; +} +body.theme-cdap.state-hydrator .pipeline-configurations { + height: 0; +} +body.theme-cdap.state-hydrator-create div.pipeline-type span { + line-height: 35px; +} +@media (min-width: 768px) { + body.theme-cdap.state-hydrator-create div.pipeline-type span { + font-size: 20px; + } +} +body.theme-cdap.state-hydrator-create .canvas-wrapper .top-panel .pipeline-settings.pipeline-logs-section { + left: 0; + max-width: initial; + max-height: initial; +} +body.theme-cdap.state-hydrator-create .canvas-wrapper .top-panel .pipeline-settings.pipeline-logs-section preview-logs { + width: 100%; + height: 100%; + overflow: hidden; +} +body.theme-cdap.state-hydrator-create .pipeline-settings { + top: 91px; + max-height: calc(100vh - 143px); + max-height: -webkit-calc(100vh - 143px); + overflow: auto; +} +body.theme-cdap.state-hydrator-create .pipeline-settings > div { + width: 100%; + padding: 10px; +} +body.theme-cdap.state-hydrator-create div.side-panel.top, +body.theme-cdap.state-hydrator-create .pipeline-settings { + max-width: calc(100% - 130px); + left: 130px; + transition: all 0.2s ease; + display: flex; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata { + flex-wrap: wrap; + display: flex; + background-color: transparent; + z-index: 999; + box-shadow: none; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata:hover, +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata:focus { + cursor: pointer; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata div.pipeline-type { + display: inline-block; + padding-left: 7px; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata div.metadata { + margin-left: 10px; + width: calc(100% - 50px); + width: -webkit-calc(100% - 50px); +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata div.metadata > div { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata div.metadata > div:before { + content: none; + color: gray; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata div.metadata > div:first-child { + font-size: 14px; + margin-top: 5px; + line-height: 17px; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata div.metadata > div:first-child.placeholder:before { + content: "Name your pipeline"; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata div.metadata > div:last-child { + font-size: 12px; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata div.metadata > div:last-child.placeholder:before { + content: "Enter a description for your pipeline"; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata div.metadata .pipeline-name.error { + color: #d15668; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata div.metadata .pipeline-name.error:before { + color: #d15668; + font-weight: bold; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata input, +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata textarea { + background-color: transparent; + display: inline-block; + font-size: 12px; + border: 1px solid #dddddd; + padding: 10px 12px; + width: 100%; + max-width: 100%; + border-radius: 6px; + color: gray; + font-weight: 500; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata input:hover, +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata textarea:hover, +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata input:focus, +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata textarea:focus { + cursor: auto; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata input:focus, +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata textarea:focus { + outline: 0; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata input { + height: 43px; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata textarea { + font-weight: 400; + resize: none; + margin-bottom: 7px; + margin-top: 10px; + min-height: 65px; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata button { + font-weight: 500; + text-decoration: none; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata button.btn { + width: 0; + height: 0; + opacity: 0; + visibility: hidden; + transition: all 0.5s ease; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata.expanded { + background-color: white; + height: 185px; + cursor: auto; + padding: 10px; + width: 100%; + position: absolute; + box-shadow: 0 7px 7px rgba(0, 0, 0, 0.1), 0 19px 59px rgba(0, 0, 0, 0.2); +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata.expanded div.pipeline-type span { + line-height: 1; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata.expanded div.pipeline-name { + padding: 10px; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata.expanded div.pipeline-name:after { + content: none; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata.expanded div.btn-group .btn { + display: inline-block; + width: auto; + height: 32px; + padding: 0 10px; + border-radius: 4px; + opacity: 1; + transition: all 0.2s ease; + visibility: visible; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata.expanded div.btn-group .btn.save-button, +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata.expanded div.btn-group .btn.cancel-button { + font-weight: initial; +} +body.theme-cdap.state-hydrator-create .side-panel.top div.hydrator-metadata.expanded div.btn-group .btn.save-button { + margin-right: 10px; +} +body.theme-cdap.state-hydrator-create .side-panel.top cask-resource-center-button { + width: 58px; + display: inline-block; + margin-left: 20px; +} +body.theme-cdap.state-hydrator-create .side-panel.top cask-resource-center-button .cask-resourcecenter-button { + top: 64px; +} +body.theme-cdap.state-hydrator-create .side-panel.top .btn-group .btn .fa-caret-down { + position: absolute; + top: 25px; + left: 32px; + line-height: 1; +} +body.theme-cdap.state-hydrator-create .side-panel.top .btn-group .btn span.icon-runtimestarttime { + font-size: 21px; + line-height: 11px; + transform: translateY(3px); +} +body.theme-cdap.state-hydrator-create .action-buttons { + min-width: 430px; +} +body.theme-cdap.state-hydrator-create .action-buttons .btn.ng-animate.ng-leave { + display: none; +} +body.theme-cdap.state-hydrator-create .pipeline-configurations-content { + top: 91px; + right: 15px; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top { + left: 0; + display: flex; + justify-content: space-between; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .run-specific-section { + display: flex; + width: calc(100vw - 428px); + width: -webkit-calc(100vw - 428px); + border-right: 0; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .run-specific-section .hydrator-detail-metadata { + display: flex; + align-items: center; + overflow: hidden; + padding: 0 10px; + /* + - Two buttons for schedule & start now + - App status container + - Right side pipeline specific section (6 buttons) + - 20px of padding for metadata section + 48 * 2 + 275 + 288 (48 * 6) + 20 = 679; + FIXME: This is not scalable. + Flexbox has a growth and shrink factor but that is not based on the content, + but based on the browser size. We need to dynamically have more space for description + and still be able to have run specific section stick to metadata section. + */ + max-width: calc(100% - 412px); + max-width: -webkit-calc(100% - 412px); + min-width: 200px; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .run-specific-section .hydrator-detail-metadata div.pipeline-type { + line-height: 1; + text-decoration: none; + padding: 0 10px 0 0; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .run-specific-section .hydrator-detail-metadata div.pipeline-name { + text-align: left; + overflow: hidden; + width: 100%; + height: 42px; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .run-specific-section .hydrator-detail-metadata h1, +body.theme-cdap.state-hydrator-detail div.side-panel.top .run-specific-section .hydrator-detail-metadata p { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 100%; + height: 21px; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .run-specific-section .hydrator-detail-metadata h1 { + font-size: 16px; + font-weight: 500; + margin: 0; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .run-specific-section .hydrator-detail-metadata h1.name-only { + height: 42px; + line-height: 2.5; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .run-specific-section .hydrator-detail-metadata h1:not(.name-only) { + padding-top: 2px; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .run-specific-section .hydrator-detail-metadata p { + color: #666666; + font-size: 12px; + font-weight: 400; + margin: 0; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .run-specific-section .app-status-container { + display: flex; + min-width: 425px; + position: relative; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .run-specific-section .app-status-container .btn.scheduler { + width: 70px; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top div.btn { + align-items: center; + height: 45px; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top div.btn .fa.fa-caret-down { + position: absolute; + top: 17px; + left: 18px; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top div.btn.scheduler .icon-runtimestarttime { + font-size: 24px; + line-height: 20px; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top div.btn.scheduler .button-label { + line-height: 10px; + margin-top: -2px; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top div.btn.scheduler .fa-spinner { + line-height: 34px; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .pipeline-specific-section { + border-left: 0; + display: flex; + width: 370px; + justify-content: flex-end; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .pipeline-specific-section span.metric-value { + color: #636363; + font-size: 13px; + font-weight: 500; + margin-right: 5px; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .pipeline-specific-section span.metric-label { + color: rgba(0, 0, 0, 0.4); + font-weight: 600; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .pipeline-specific-section .btn.disabled { + color: #cccccc; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .pipeline-settings { + width: 100%; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .pipeline-settings.pipeline-summary > div { + padding: 0; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .pipeline-settings > div { + width: 100%; + padding: 10px; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .pipeline-settings.pipeline-run-section { + position: absolute; + left: 0; + top: 43px; + background: #ebebeb; + width: 700px; + z-index: 1000; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .pipeline-settings.pipeline-run-section .macro-error-container { + width: 70%; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .pipeline-settings.pipeline-logs-section { + height: calc(100vh - 146px); + height: -webkit-calc(100vh - 146px); + box-shadow: none; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .pipeline-settings.pipeline-logs-section .logs-table { + height: calc(100vh - 263px); + height: -webkit-calc(100vh - 263px); +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .pipeline-settings.pipeline-logs-section .logs-table tbody .message-holder td { + border-bottom: 0; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top .pipeline-settings.pipeline-logs-section .fa.fa-expand { + display: none; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top cask-resource-center-button { + width: 58px; + display: inline-block; + margin-left: 20px; +} +body.theme-cdap.state-hydrator-detail div.side-panel.top cask-resource-center-button .cask-resourcecenter-button { + top: 65px; +} +body.theme-cdap.state-hydrator-list div.side-panel.top { + font-weight: 500; + left: 0; + z-index: 999; + height: 60px; + box-shadow: 0 7px 7px rgba(0, 0, 0, 0.1), 0 10px 59px rgba(0, 0, 0, 0.25); +} +body.theme-cdap.state-hydrator-list div.side-panel.top h1:not(.fa) { + border-right: 1px solid #dddddd; + display: inline-block; + font-size: 20px; + line-height: 60px; + margin: 0; + padding: 0 15px; +} +body.theme-cdap.state-hydrator-list div.side-panel.top > div { + padding: 7px 15px; +} +body.theme-cdap.state-hydrator-list div.side-panel.top > div span { + display: block; +} +body.theme-cdap.state-hydrator-list div.side-panel.top > div span:first-child { + font-size: 15px; +} +body.theme-cdap.state-hydrator-list div.side-panel.top > div span:last-child { + font-size: 18px; +} +body.theme-cdap.state-hydrator-list div.side-panel.top ul { + line-height: 60px; + margin: 0; +} +body.theme-cdap.state-hydrator-list div.side-panel.top ul li { + padding: 0 15px; +} +body.theme-cdap.state-hydrator-list div.side-panel.top ul li i { + font-size: 22px; + margin-right: 10px; + vertical-align: sub; +} +body.theme-cdap.state-hydrator-list div.side-panel.top ul li span { + font-size: 15px; +} +body.theme-cdap.state-hydrator-list div.side-panel.top ul li span:first-child { + padding-right: 5px; +} +body.theme-cdap.state-hydrator-list div.side-panel.top a.btn-primary { + position: absolute; + right: 40px; + top: 35px; + padding: 12px 16px; + border-radius: 50%; +} +body.theme-cdap.state-hydrator-list div.side-panel.top a.btn-primary span.fa { + font-size: 24px; + vertical-align: middle; +} +body.theme-cdap.state-hydrator-list div.side-panel.top cask-resource-center-button { + width: 58px; + display: inline-block; + margin-left: 20px; +} +body.theme-cdap.state-hydrator-list div.side-panel.top cask-resource-center-button .cask-resourcecenter-button { + top: 78px; +} +body.theme-cdap .pipeline-run-section { + position: absolute; + right: 80px; + top: 94px; + background: #ebebeb; + width: 700px; + z-index: 999; + box-shadow: 0 7px 7px rgba(0, 0, 0, 0.1), 0 19px 59px rgba(0, 0, 0, 0.2); +} +body.theme-cdap .pipeline-run-section .macro-error-container { + width: 70%; +} +body.theme-cdap .pipeline-run-section h5 { + margin: 10px 10px 0; +} +body.theme-cdap .pipeline-run-section .arguments-container { + padding: 10px; + width: 100%; + max-height: calc(100vh - 216px); + max-height: -webkit-calc(100vh - 216px); + overflow-y: auto; + overflow-x: hidden; +} +body.theme-cdap .pipeline-run-section .clearfix { + padding: 10px; +} +body.theme-cdap .pipeline-run-section .preview-start-section { + display: flex; + align-items: center; +} +body.theme-cdap .pipeline-run-section .preview-start-section .preview-start-button { + margin-left: auto; +} diff --git a/app/cdap/components/StudioV2/index.tsx b/app/cdap/components/StudioV2/index.tsx new file mode 100644 index 00000000000..12e44251b8d --- /dev/null +++ b/app/cdap/components/StudioV2/index.tsx @@ -0,0 +1,30 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React from 'react'; +import { Route, Switch } from 'react-router'; +import CreatePipelineView from './CreatePipelineView'; +import PipelineDetailsView from './PipelineDetailsView'; +import './app.css'; + +export default function StudioV2() { + return ( + + + + + ); +} diff --git a/app/cdap/components/StudioV2/modals/DirtyStateConfirmationModal.tsx b/app/cdap/components/StudioV2/modals/DirtyStateConfirmationModal.tsx new file mode 100644 index 00000000000..e0dd026cfd2 --- /dev/null +++ b/app/cdap/components/StudioV2/modals/DirtyStateConfirmationModal.tsx @@ -0,0 +1,56 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { Button, DialogActions, DialogTitle } from '@material-ui/core'; +import T from 'i18n-react'; +import React from 'react'; +import { useDispatch } from 'react-redux'; + +const PREFIX = 'features.Studio.modals.unsavedPipelineConfirmation'; + +export default function DirtyStateConfirmationModal({ onClose }) { + const dispatch = useDispatch(); + + function handleSave() { + // save pipeline draft + onClose(true); + } + + function handleCloseNoSave() { + onClose(true); + } + + function handleCancel() { + onClose(false); + } + + return ( + <> + {T.translate(`${PREFIX}.text`)} + + + + + + + ); +} diff --git a/app/cdap/components/StudioV2/modals/StudioModalsManager.tsx b/app/cdap/components/StudioV2/modals/StudioModalsManager.tsx new file mode 100644 index 00000000000..ad79447e575 --- /dev/null +++ b/app/cdap/components/StudioV2/modals/StudioModalsManager.tsx @@ -0,0 +1,38 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React from 'react'; +import { Dialog } from '@material-ui/core'; +import { useSelector, useDispatch } from 'react-redux'; +import { UiActions } from '../store/uistate/actions'; + +export default function StudioModalsManager() { + const { modalShown, modalToRender, modalOnClose } = useSelector((state) => state.uiState); + const dispatch = useDispatch(); + + function handleClose() { + if (modalOnClose) { + modalOnClose(); + } + dispatch({ type: UiActions.CLOSE_MODAL }); + } + + return ( + + {modalToRender} + + ); +} diff --git a/app/cdap/components/StudioV2/store/actions.ts b/app/cdap/components/StudioV2/store/actions.ts new file mode 100644 index 00000000000..2de05287ba4 --- /dev/null +++ b/app/cdap/components/StudioV2/store/actions.ts @@ -0,0 +1,17 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +export const actions = {}; diff --git a/app/cdap/components/StudioV2/store/availablePlugins/actions.ts b/app/cdap/components/StudioV2/store/availablePlugins/actions.ts new file mode 100644 index 00000000000..0ac72b27715 --- /dev/null +++ b/app/cdap/components/StudioV2/store/availablePlugins/actions.ts @@ -0,0 +1,277 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { MyPipelineApi } from 'api/pipeline'; +import _get from 'lodash/get'; +import StudioV2Store from '..'; +import { GLOBALS } from 'services/global-constants'; +import { forkJoin } from 'rxjs/observable/forkJoin'; +import { PluginsActions } from '../plugins/actions'; +import { + getDefaultVersionForPlugin, + getPluginIcon, + getPluginToArtifactMap, +} from 'components/StudioV2/utils/pluginUtils'; +import { camelToTitle } from 'components/StudioV2/utils/stringUtils'; +import { findHighestVersion } from 'services/VersionRange/VersionUtilities'; +import MySettingsService from 'components/StudioV2/utils/settings'; + +const PREFIX = 'AVAILABLE_PLUGINS'; + +export const AvailablePluginsActions = { + SET_PLUGINS_MAP: `${PREFIX}/SET_PLUGINS_MAP`, + RESET: `${PREFIX}/RESET`, +}; + +export function setAvailablePluginsMap(payload) { + StudioV2Store.dispatch({ + type: AvailablePluginsActions.SET_PLUGINS_MAP, + payload, + }); +} + +export function resetAvailablePluginsMap() { + StudioV2Store.dispatch({ + type: AvailablePluginsActions.RESET, + }); +} + +export interface IFetchExtensionsParams { + namespace: string; + pipelineType: string; + version: string; +} + +export interface IFetchPluginsParams extends IFetchExtensionsParams { + extensionType: string; +} + +// TODO: Determine correct type for res. +export function fetchPlugins(extensionsParams: IFetchExtensionsParams) { + MyPipelineApi.fetchExtensions(extensionsParams).subscribe( + (res) => { + const extensionsList = GLOBALS.pluginTypes[extensionsParams.pipelineType]; + const extensionsMap = Object.values(extensionsList); + const supportedExtensions = res.filter((ext) => extensionsMap.includes(ext)); + fetchPluginsInternal(extensionsParams, supportedExtensions); + }, + (err) => { + // TODO: Handle this error properly. In legacy code, it was passed to a defered promise + } + ); +} + +// TODO: Add correct type for supportedExtensions +function fetchPluginsInternal(params: IFetchExtensionsParams, extensions: any[]) { + const fetchList = extensions.map((ext) => + MyPipelineApi.fetchPlugins({ + ...params, + extensionType: ext, + }) + ); + + forkJoin(fetchList).subscribe( + (res) => { + const pluginTypes = formatPluginsResponse(res, extensions); + StudioV2Store.dispatch({ + type: PluginsActions.FETCH_ALL_PLUGINS, + payload: { + pluginTypes, + extensions, + }, + }); + + StudioV2Store.dispatch({ + type: PluginsActions.CHECK_AND_UPDATE_PLUGIN_DEFAULT_VERSION, + }); + + prepareInfoRequest(params.namespace, res); + fetchTemplates(params.namespace, params.pipelineType); + }, + (err) => {} + ); +} + +// TODO: Add types +function formatPluginsResponse(pluginsList, extensions) { + return extensions.reduce((acc, ext, i) => { + const plugins = pluginsList[i]; + const pluginToArtifactArrayMap = getPluginToArtifactMap(plugins); + const pluginsWithAddedInfo = getPluginsWithAddedInfo(plugins, pluginToArtifactArrayMap, ext); + const versionMap = StudioV2Store.getState().plugins.pluginToVersionMap; + + acc[ext] = pluginsWithAddedInfo.map((plugin) => ({ + ...plugin, + defaultArtifact: getDefaultVersionForPlugin(plugin, versionMap), + })); + + return acc; + }, {}); +} + +// TODO: Add types +function getPluginsWithAddedInfo(plugins = [], pluginToArtifactArrayMap = {}, extension = '') { + if (plugins.length === 0 || extension.length === 0) { + return plugins; + } + + // TODO: Add types + const getExtraProperties = (plugin: any = {}, extension: string = '') => ({ + type: extension, + icon: getPluginIcon(plugin.name || plugin.pluginName), + label: camelToTitle(plugin.name || plugin.pluginName), + }); + + // TODO: Add types + const getAllArtifacts = ( + _pluginToArtifactArrayMap: any = {}, + plugin: any = {}, + extension: string = '' + ) => { + if (Object.keys(_pluginToArtifactArrayMap).length === 0 || Object.keys(plugin).length === 0) { + return []; + } + + const _pluginArtifacts = _pluginToArtifactArrayMap[plugin.name || plugin.pluginName]; + if (!Array.isArray(_pluginArtifacts)) { + return []; + } + return _pluginArtifacts.map((plug) => ({ + ...plug, + ...getExtraProperties(plug, extension), + })); + }; + + // TODO: Add types + const getArtifact = (_pluginToArtifactArrayMap: any = {}, plugin: any = {}) => { + if (!Object.keys(plugin).length) { + return {}; + } + const allPluginVersions = _pluginToArtifactArrayMap[plugin.name]; + const highestVersion = findHighestVersion( + allPluginVersions.map((plugin) => _get(plugin, 'artifact.version')), + true + ); + const latestPluginVersion = allPluginVersions.find( + (plugin) => _get(plugin, 'artifact.version') === highestVersion + ); + return latestPluginVersion.artifact; + }; + + return Object.keys(pluginToArtifactArrayMap).map((pluginName) => { + const [plugin] = pluginToArtifactArrayMap[pluginName]; + return { + ...plugin, + ...getExtraProperties(plugin, extension), + artifact: getArtifact(pluginToArtifactArrayMap, plugin), + allArtifacts: getAllArtifacts(pluginToArtifactArrayMap, plugin, extension), + }; + }); +} + +function prepareInfoRequest(namespace, pluginsList) { + // Create request body for artifactproperties batch call + const plugins = []; + const availablePluginsMap = {}; + + pluginsList.forEach((extension) => { + extension.forEach((plugin) => { + const pluginInfo = createPluginInfo(plugin); + availablePluginsMap[pluginInfo.key] = { + pluginInfo: plugin, + }; + + plugins.push(pluginInfo); + }); + }); + + fetchInfo(availablePluginsMap, namespace, plugins); +} + +function createPluginInfo(plugin) { + const pluginKey = `${plugin.name}-${plugin.type}`; + const availablePluginKey = `${pluginKey}-${getArtifactKey(plugin.artifact)}`; + + const info = { + ...plugin.artifact, + properties: [`widgets.${pluginKey}`, `doc.${pluginKey}`], + }; + + return { + info, + key: availablePluginKey, + }; +} + +function getArtifactKey(artifact) { + return `${artifact.name}-${artifact.version}-${artifact.scope}`; +} + +function fetchInfo(availablePluginsMap, namespace, plugins) { + const reqBody = plugins.map((plugin) => plugin.info); + + const getKeyFromPluginProps = (pluginProperties) => { + const key = _get(pluginProperties, '0'); + return key ? key.split('.')[1] : ''; + }; + + MyPipelineApi.fetchAllPluginsProperties({ namespace }, reqBody).subscribe((res) => { + res.forEach((plugin) => { + const pluginProperties = Object.keys(plugin.properties); + if (pluginProperties.length === 0) { + return; + } + + const pluginKey = getKeyFromPluginProps(pluginProperties); + const key = `${pluginKey}-${getArtifactKey(plugin)}`; + + availablePluginsMap[key].doc = plugin.properties[`doc.${pluginKey}`]; + + let parsedWidgets; + const widgets = plugin.properties[`widgets.${pluginKey}`]; + + if (widgets) { + try { + parsedWidgets = JSON.parse(widgets); + } catch (e) { + console.log('failed to parse widgets', e, pluginKey); + } + } + availablePluginsMap[key].widgets = parsedWidgets; + }); + + StudioV2Store.dispatch({ + type: AvailablePluginsActions.SET_PLUGINS_MAP, + payload: availablePluginsMap, + }); + }); +} + +async function fetchTemplates(namespace, pipelineType) { + const templates = await MySettingsService.getInstance().get('pluginTemplates'); + if (!templates) { + return; + } + + StudioV2Store.dispatch({ + type: PluginsActions.FETCH_PLUGIN_TEMPLATE, + payload: { + templates, + pipelineType, + namespace, + }, + }); +} diff --git a/app/cdap/components/StudioV2/store/availablePlugins/reducer.ts b/app/cdap/components/StudioV2/store/availablePlugins/reducer.ts new file mode 100644 index 00000000000..6818ed29aa4 --- /dev/null +++ b/app/cdap/components/StudioV2/store/availablePlugins/reducer.ts @@ -0,0 +1,41 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { AvailablePluginsActions } from './actions'; + +interface IAvailablePluginsState { + pluginsMap: any; +} + +export const availablePluginsInitialState: IAvailablePluginsState = { + pluginsMap: {}, +}; + +export const availablePlugins = ( + state: IAvailablePluginsState = availablePluginsInitialState, + action? +): IAvailablePluginsState => { + switch (action.type) { + case AvailablePluginsActions.SET_PLUGINS_MAP: + return { ...state, pluginsMap: action.payload }; + + case AvailablePluginsActions.RESET: + return { ...availablePluginsInitialState }; + + default: + return state; + } +}; diff --git a/app/cdap/components/StudioV2/store/common/actions.ts b/app/cdap/components/StudioV2/store/common/actions.ts new file mode 100644 index 00000000000..2565a793e05 --- /dev/null +++ b/app/cdap/components/StudioV2/store/common/actions.ts @@ -0,0 +1,68 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { MyArtifactApi } from 'api/artifact'; +import { IArtifactSummary, ILabeledArtifactSummary } from 'components/StudioV2/types'; +import { getArtifactDisaplayName } from 'components/StudioV2/utils/artifactUtils'; +import { getCurrentNamespace } from 'services/NamespaceStore'; +import { Theme } from 'services/ThemeHelper'; +import VersionStore from 'services/VersionStore'; +import { GLOBALS } from 'services/global-constants'; +import StudioV2Store from '..'; +import { CommonActions } from './reducer'; + +export const fetchSystemArtifacts = () => { + const cdapVersion = VersionStore.getState().version; + const namespace = getCurrentNamespace(); + + const uiSupportedArtifacts = [GLOBALS.etlDataPipeline]; + if (Theme.showRealtimePipeline !== false) { + uiSupportedArtifacts.push(GLOBALS.etlDataStreams); + } + if (Theme.showSqlPipeline !== false) { + uiSupportedArtifacts.push(GLOBALS.eltSqlPipeline); + } + + MyArtifactApi.listScopedArtifacts({ + namespace, + scope: 'SYSTEM', + }).subscribe((res: IArtifactSummary[]) => { + if (!res.length) { + return; + } + + const filteredArtifacts = res.filter( + (artifact) => artifact.version === cdapVersion && uiSupportedArtifacts.includes(artifact.name) + ); + + const labeledArtifacts = filteredArtifacts.map((artifact) => ({ + ...artifact, + label: getArtifactDisaplayName(artifact.name), + })); + + StudioV2Store.dispatch({ + type: CommonActions.SET_ARTIFACTS, + payload: labeledArtifacts, + }); + }); +}; + +export const setSelectedArtifact = (artifact: ILabeledArtifactSummary) => { + StudioV2Store.dispatch({ + type: CommonActions.SET_SELECTED_ARTIFACT, + payload: artifact, + }); +}; diff --git a/app/cdap/components/StudioV2/store/common/reducer.ts b/app/cdap/components/StudioV2/store/common/reducer.ts new file mode 100644 index 00000000000..c854158740e --- /dev/null +++ b/app/cdap/components/StudioV2/store/common/reducer.ts @@ -0,0 +1,52 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { ILabeledArtifactSummary } from 'components/StudioV2/types'; +import { getArtifactDisaplayName } from 'components/StudioV2/utils/artifactUtils'; +import { GLOBALS } from 'services/global-constants'; + +interface ICommonState { + artifacts: ILabeledArtifactSummary[]; + selectedArtifact: ILabeledArtifactSummary; +} + +export const defaultSelectedArtifact: ILabeledArtifactSummary = { + name: GLOBALS.etlDataPipeline, + version: '', + scope: 'SYSTEM', + label: getArtifactDisaplayName(GLOBALS.etlDataPipeline), +}; + +export const commonDefaultInitialState: ICommonState = { + artifacts: [], + selectedArtifact: defaultSelectedArtifact, +}; + +export const CommonActions = { + SET_ARTIFACTS: 'STUDIO_V2_SET_ARTIFACTS', + SET_SELECTED_ARTIFACT: 'STUDIO_V2_SET_SELECTED_ARTIFACT', +}; + +export const common = (state: ICommonState = commonDefaultInitialState, action?): ICommonState => { + switch (action.type) { + case CommonActions.SET_ARTIFACTS: + return { ...state, artifacts: action.payload }; + case CommonActions.SET_SELECTED_ARTIFACT: + return { ...state, selectedArtifact: action.payload }; + default: + return state; + } +}; diff --git a/app/cdap/components/StudioV2/store/config/actions.ts b/app/cdap/components/StudioV2/store/config/actions.ts new file mode 100644 index 00000000000..d1cf7a5a701 --- /dev/null +++ b/app/cdap/components/StudioV2/store/config/actions.ts @@ -0,0 +1,97 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import _get from 'lodash/get'; +import _cloneDeep from 'lodash/cloneDeep'; +import _isEqual from 'lodash/isEqual'; +import _assign from 'lodash/assign'; + +import { IPipelineConfig } from 'components/StudioV2/types'; +import StudioV2Store from '..'; +import { IConfigState, configInitialState } from './reducer'; +import { + setArtifact_mutating, + setBatchInterval_mutating, + setCheckpointDir_mutating, + setCheckpointing_mutating, + setClientResources_mutating, + setComments_mutating, + setDriverResources_mutating, + setEngine_mutating, + setGracefulStop_mutating, + setInstrumentation_mutating, + setMaxConcurrentRuns_mutating, + setNodes_mutating, + setNumRecordsPreview_mutating, + setProperties_mutating, + setRangeRecordsPreview_mutating, + setResources_mutating, + setServiceAccountPath_mutating, + setStageLogging_mutating, +} from './mutations'; +import { GLOBALS } from 'services/global-constants'; + +const PREFIX = 'CONFIG_ACTIONS'; + +export const ConfigActions = { + SET_STATE: `${PREFIX}/SET_STATE`, +}; + +export function setConfigState(payload: IConfigState) { + StudioV2Store.dispatch({ + type: ConfigActions.SET_STATE, + payload, + }); +} + +export function initCofigStore(config?: any) { + let stateCopy = _cloneDeep(configInitialState); + if (config) { + stateCopy = _assign(stateCopy, config); + + setComments_mutating(stateCopy, stateCopy.config.comments); + setArtifact_mutating(stateCopy, stateCopy.artifact); + setProperties_mutating(stateCopy, stateCopy.config.properties); + setDriverResources_mutating(stateCopy, stateCopy.config.driverResources); + setResources_mutating(stateCopy, stateCopy.config.resources); + setInstrumentation_mutating(stateCopy, stateCopy.config.processTimingEnabled); + setStageLogging_mutating(stateCopy, stateCopy.config.stageLoggingEnabled); + setNodes_mutating(stateCopy, stateCopy.config.stages || []); + + if (stateCopy.artifact.name === GLOBALS.etlDataStreams) { + setClientResources_mutating(stateCopy, stateCopy.config.clientResources); + setCheckpointing_mutating(stateCopy, stateCopy.config.disableCheckpoints); + setCheckpointDir_mutating( + stateCopy, + stateCopy.config.checkpointDir || window.CDAP_CONFIG.hydrator.defaultCheckpointDir + ); + setGracefulStop_mutating(stateCopy, stateCopy.config.stopGracefully); + setBatchInterval_mutating(stateCopy, stateCopy.config.batchInterval); + } else if (stateCopy.artifact.name === GLOBALS.eltSqlPipeline) { + setServiceAccountPath_mutating(stateCopy, stateCopy.config.serviceAccountPath); + } else { + setEngine_mutating(stateCopy, stateCopy.config.engine); + setRangeRecordsPreview_mutating(stateCopy, stateCopy.artifact.config || {}); + setNumRecordsPreview_mutating(stateCopy, stateCopy.config.numOfRecordsPreview); + setMaxConcurrentRuns_mutating(stateCopy, stateCopy.config.maxConcurrentRuns); + } + } + + stateCopy.__defaultState = _cloneDeep(stateCopy); + setConfigState(stateCopy); +} + +export function onEngineChange() {} diff --git a/app/cdap/components/StudioV2/store/config/mutations.ts b/app/cdap/components/StudioV2/store/config/mutations.ts new file mode 100644 index 00000000000..a4249ff00de --- /dev/null +++ b/app/cdap/components/StudioV2/store/config/mutations.ts @@ -0,0 +1,488 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import _get from 'lodash/get'; +import _cloneDeep from 'lodash/cloneDeep'; +import _isEqual from 'lodash/isEqual'; +import _assign from 'lodash/assign'; +import { IConfigState } from './reducer'; +import { IArtifactSummary } from 'components/StudioV2/types'; +import { GLOBALS, HYDRATOR_DEFAULT_VALUES } from 'services/global-constants'; +import { + DEPRECATED_SPARK_MASTER, + ENGINE_OPTIONS, + SPARK_BACKPRESSURE_ENABLED, + SPARK_EXECUTOR_INSTANCES, +} from 'components/PipelineConfigurations/PipelineConfigConstants'; +import { getAppType, getEngine, getName } from './queries'; +import { generateNodeConfig } from 'services/HydratorPluginConfigFactory'; +import { formatSchemaToAvro } from 'components/StudioV2/utils/schemaUtils'; +import { fetchBackendProperties } from 'components/StudioV2/utils/nodeUtils'; +import { + allConnectionsValid, + allNodesConnected, + hasAtLeastOneSink, + hasAtleastOneSource, + hasNoBackendProperties, + hasValidClientResources, + hasValidDriverResources, + hasValidName, + hasValidResources, + isRequiredFieldsFilled, + isUniqueNodeNames, +} from 'services/PipelineErrorFactory'; +import { addConsoleMessages, resetConsoleMessages } from '../console/actions'; +import { filterByCondition } from 'components/shared/ConfigurationGroup/utilities/DynamicPluginFilters'; +import { setConfigState } from './actions'; +import { MyPipelineApi } from 'api/pipeline'; +import { getCurrentNamespace } from 'services/NamespaceStore'; + +export function setComments_mutating(state: IConfigState, comments) { + state.config.comments = comments; +} + +export function setArtifact_mutating(state: IConfigState, artifact: IArtifactSummary) { + state.artifact.name = artifact.name; + state.artifact.version = artifact.version; + state.artifact.scope = artifact.scope; + + if ( + GLOBALS.etlBatchPipelines.includes(artifact.name) || + artifact.name === GLOBALS.eltSqlPipeline + ) { + state.config.schedule = state.config.schedule || HYDRATOR_DEFAULT_VALUES.schedule; + } else if (artifact.name === GLOBALS.etlRealtime) { + state.config.instances = state.config.instances || HYDRATOR_DEFAULT_VALUES.instance; + } +} + +export function setProperties_mutating(state: IConfigState, properties?: any) { + const numExecutorKey = SPARK_EXECUTOR_INSTANCES; + const numExecutorOldKey = DEPRECATED_SPARK_MASTER; + const backPressureKey = SPARK_BACKPRESSURE_ENABLED; + + if (typeof properties !== 'undefined' && Object.keys(properties).length > 0) { + state.config.properties = properties; + } else { + state.config.properties = {}; + } + + if (state.artifact.name === GLOBALS.etlDataStreams) { + if (typeof state.config.properties[backPressureKey] === 'undefined') { + state.config.properties[backPressureKey] = true; + } + } + + if (getEngine(state) === ENGINE_OPTIONS.SPARK || state.artifact.name === GLOBALS.etlDataStreams) { + if (state.config.properties.hasOwnProperty(numExecutorOldKey)) { + // format on standalone is 'local[{number}] === local[2]' + // So the magic number 6 here is for skipping 'local[' and get the number + let numOfExecutors = state.config.properties[numExecutorOldKey]; + numOfExecutors = + typeof numOfExecutors === 'string' + ? numOfExecutors.substring(6, numOfExecutors.length - 1) + : numOfExecutors.toString(); + state.config.properties[numExecutorKey] = numOfExecutors; + delete state.config.properties[numExecutorOldKey]; + } + } + + state.config.properties = Object.keys(state.config.properties).reduce( + (obj, key) => ((obj[key] = state.config.properties[key].toString()), obj), + {} + ); +} + +export function setDriverResources_mutating(state: IConfigState, driverResources) { + state.config.driverResources = driverResources || _cloneDeep(HYDRATOR_DEFAULT_VALUES.resources); +} + +export function setResources_mutating(state: IConfigState, resources) { + state.config.resources = resources || _cloneDeep(HYDRATOR_DEFAULT_VALUES.resources); +} + +export function setInstrumentation_mutating(state: IConfigState, val: boolean = true) { + state.config.processTimingEnabled = val; +} + +export function setStageLogging_mutating(state: IConfigState, val: boolean = true) { + state.config.stageLoggingEnabled = val; +} + +export function setClientResources_mutating(state: IConfigState, clientResources?) { + state.config.clientResources = clientResources || _cloneDeep(HYDRATOR_DEFAULT_VALUES.resources); +} + +export function setCheckpointing_mutating(state: IConfigState, val: boolean = false) { + state.config.disableCheckpoints = val; +} + +export function setCheckpointDir_mutating(state: IConfigState, val?: boolean | string) { + if (val !== false) { + state.config.checkpointDir = val; + } else { + state.config.checkpointDir = ''; + } +} + +export function setGracefulStop_mutating(state: IConfigState, val: boolean = true) { + state.config.stopGracefully = val; +} + +export function setBatchInterval_mutating(state: IConfigState, interval?: string) { + state.config.batchInterval = interval || HYDRATOR_DEFAULT_VALUES.batchInterval; +} + +export function setServiceAccountPath_mutating(state: IConfigState, path: string = '') { + state.config.serviceAccountPath = path; +} + +export function setEngine_mutating(state: IConfigState, engine?: string) { + state.config.engine = engine || HYDRATOR_DEFAULT_VALUES.engine; +} + +export function setRangeRecordsPreview_mutating( + state: IConfigState, + { + minRecordsPreview = HYDRATOR_DEFAULT_VALUES.minRecordsPreview, + maxRecordsPreview = window.CDAP_CONFIG.cdap.maxRecordsPreview || + HYDRATOR_DEFAULT_VALUES.maxRecordsPreview, + }: { [key: string]: number } +) { + if (GLOBALS.etlBatchPipelines.includes(state.artifact.name)) { + state.config.rangeRecordsPreview = { + min: minRecordsPreview, + max: maxRecordsPreview, + }; + } +} + +export function setNumRecordsPreview_mutating( + state: IConfigState, + val: number = HYDRATOR_DEFAULT_VALUES.numOfRecordsPreview +) { + if (GLOBALS.etlBatchPipelines.includes(state.artifact.name)) { + const { max } = state.config.rangeRecordsPreview; + if (max) { + state.config.numOfRecordsPreview = Math.min(max, val); + } + } +} + +export function setMaxConcurrentRuns_mutating(state: IConfigState, num: number = 1) { + state.config.maxConcurrentRuns = num; +} + +export function setNodes_mutating(state: IConfigState, nodes = []) { + state.__ui__.nodes = nodes; + const listOfPromises = []; + const parseNodeConfig = (node, res) => { + const nodeConfig = generateNodeConfig(node._backendProperties, res); + node.implicitSchema = nodeConfig.outputSchema.implicitSchema; + node.outputSchemaProperty = nodeConfig.outputSchema.outputSchemaProperty; + + if (Array.isArray(node.outputSchemaProperty)) { + node.outputSchemaProperty = node.outputSchemaProperty[0]; + node.watchProperty = nodeConfig.outputSchema.schemaProperties['property-watch']; + } + + if (node.outputSchemaProperty) { + node.outputSchema = node.plugin.properties[node.outputSchemaProperty]; + } + + if (nodeConfig.outputSchema.implicitSchema) { + const outputSchema = formatSchemaToAvro(nodeConfig.outputSchema.implicitSchema); + node.outputSchema = outputSchema; + } + + if (!node.outputSchema && nodeConfig.outputSchema.schemaProperties['default-schema']) { + node.outputSchema = JSON.stringify( + nodeConfig.outputSchema.schemaProperties['default-schema'] + ); + node.plugin.properties[node.outputSchemaProperty] = node.outputSchema; + } + + node.configGroups = res['configuration-groups']; + node.outputs = res.outputs; + node.filters = res.filters; + }; + + if (state.__ui__.nodes && state.__ui__.nodes.length) { + state.__ui__.nodes + .filter((n) => !n._backendProperties) + .forEach((n) => { + listOfPromises.push(fetchBackendProperties(n, getAppType(state))); + }); + } else { + listOfPromises.push(Promise.resolve(true)); + } + + if (listOfPromises.length) { + Promise.all(listOfPromises).then( + () => { + if (!validateState_mutating(state)) { + setConfigState(state); + } + + // Once the backend properties are fetched for all nodes, fetch their config jsons. + // This will be used for schema propagation where we import/use a predefined app/open a published pipeline + // the user should directly click on the last node and see what is the incoming schema + // without having to open the subsequent nodes. + const reqBody = []; + state.__ui__.nodes.forEach((n) => { + // This could happen when the user doesn't provide an artifact information for a plugin & deploys it + // using CLI or REST and opens up in UI and clones it. Without this check it will throw a JS error. + if (!n.plugin || !n.plugin.artifact) { + return; + } + const pluginInfo = { + name: n.plugin.artifact.name, + version: n.plugin.artifact.version, + scope: n.plugin.artifact.scope, + properties: [`widgets.${n.plugin.name}-${n.type}`], + }; + + reqBody.push(pluginInfo); + }); + + MyPipelineApi.fetchAllPluginsProperties( + { namespace: getCurrentNamespace() }, + reqBody + ).subscribe((resInfo) => { + resInfo.forEach((pluginInfo, index) => { + const pluginProperties = Object.keys(pluginInfo.properties); + if (pluginProperties.length === 0) { + return; + } + + try { + const config = JSON.parse(pluginInfo.properties[pluginProperties[0]]); + parseNodeConfig(state.__ui__.nodes[index], config); + } catch (e) { + // no-op + } + }); + validateState_mutating(state); + }); + }, + (err) => { + console.log('ERROR fetching backend properties for nodes', err); + validateState_mutating(state); + } + ); + } +} + +function validateState_mutating( + state, + validationConfig: any = { + showConsoleMessage: false, + validateBeforePreview: false, + } +) { + let isStateValid = true; + const name = getName(state); + + const daglevelvalidation = [hasAtleastOneSource, hasAtLeastOneSink]; + + const nodes = state.__ui__.nodes; + const connections = _cloneDeep(state.config.connections); + + // resetting any existing errors or warnings + nodes.forEach((node) => { + node.errorCount = 0; + delete node.warning; + delete node.error; + }); + + const errors = []; + resetConsoleMessages(); + + const setErrorWarningFlagOnNode = (node) => { + if (node.error) { + delete node.warning; + } else { + node.warning = true; + } + if (validationConfig.showConsoleMessage) { + node.error = true; + delete node.warning; + } + }; + + /** + * A pipeline consisting of only custom actions is a valid pipeline, + * so we are skipping the at least 1 source and sink check + **/ + + const countActions = nodes.filter((node) => { + return GLOBALS.pluginConvert[node.type] === 'action'; + }).length; + + if (countActions !== nodes.length || nodes.length === 0) { + daglevelvalidation.forEach((validationFn) => { + validationFn(nodes, (err, node) => { + if (err) { + isStateValid = false; + if (node) { + node.errorCount += 1; + setErrorWarningFlagOnNode(node); + } + errors.push({ + type: err, + }); + } + }); + }); + } + + if (!validationConfig.validateBeforePreview) { + hasValidName(name, (err) => { + if (err) { + isStateValid = false; + errors.push({ + type: err, + }); + } + }); + } + + hasNoBackendProperties(nodes, (errorNodes) => { + if (errorNodes) { + isStateValid = false; + errorNodes.forEach((node) => { + node.error = true; + node.errorCount += 1; + setErrorWarningFlagOnNode(node); + }); + errors.push({ + type: 'NO-BACKEND-PROPS', + payload: { + nodes: errorNodes.map((node) => node.name || node.plugin.name), + }, + }); + } + }); + + // compute field visibility so that required field validation will be done accordingly. + nodes.forEach((node) => { + let visibilityMap = {}; + if (node.configGroups && node._backendProperties && node.plugin.properties) { + try { + const filteredConfigGroups = filterByCondition( + node.configGroups, + node, + node._backendProperties, + node.plugin.properties + ); + visibilityMap = filteredConfigGroups.reduce((fieldsMap, group) => { + group.properties.forEach((property) => { + fieldsMap[property.name] = property.show; + }); + return fieldsMap; + }, {}); + if (node._backendProperties.connection) { + node._backendProperties.connection.required = + node.plugin.properties.useConnection === 'true'; + } + } catch (e) {} + } + node.visibilityMap = visibilityMap; + }); + + isRequiredFieldsFilled(nodes, (err, node, unFilledRequiredFields) => { + if (err) { + isStateValid = false; + node.warning = true; + node.errorCount += unFilledRequiredFields; + setErrorWarningFlagOnNode(node); + } + }); + + isUniqueNodeNames(nodes, (err, node) => { + if (err) { + isStateValid = false; + node.errorCount += 1; + setErrorWarningFlagOnNode(node); + } + }); + + const strayNodes = []; + allNodesConnected(nodes, connections, (errorNode) => { + if (errorNode) { + isStateValid = false; + strayNodes.push(errorNode); + } + }); + if (strayNodes.length) { + errors.push({ + type: 'STRAY-NODES', + payload: { nodes: strayNodes }, + }); + } + + const invalidConnections = []; + allConnectionsValid(nodes, connections, (errorConnection) => { + if (errorConnection) { + isStateValid = false; + invalidConnections.push(errorConnection); + } + }); + if (invalidConnections.length) { + errors.push({ + type: 'INVALID-CONNECTIONS', + payload: { connections: invalidConnections }, + }); + } + + hasValidResources(state.config, (err) => { + if (err) { + isStateValid = false; + errors.push({ + type: 'error', + content: GLOBALS.en.hydrator.studio.error[err], + }); + } + }); + + hasValidDriverResources(state.config, (err) => { + if (err) { + isStateValid = false; + errors.push({ + type: 'error', + content: GLOBALS.en.hydrator.studio.error[err], + }); + } + }); + + if (state.artifact.name === GLOBALS.etlDataStreams) { + hasValidClientResources(state.config, (err) => { + if (err) { + isStateValid = false; + errors.push({ + type: 'error', + content: GLOBALS.en.hydrator.studio.error[err], + }); + } + }); + } + + if (errors.length && validationConfig.showConsoleMessage) { + addConsoleMessages(errors); + } + + return isStateValid; +} diff --git a/app/cdap/components/StudioV2/store/config/queries.ts b/app/cdap/components/StudioV2/store/config/queries.ts new file mode 100644 index 00000000000..74895c455e4 --- /dev/null +++ b/app/cdap/components/StudioV2/store/config/queries.ts @@ -0,0 +1,34 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { HYDRATOR_DEFAULT_VALUES } from 'services/global-constants'; +import { IConfigState } from './reducer'; + +export function getEngine(state: IConfigState) { + return state.config.engine || HYDRATOR_DEFAULT_VALUES.engine; +} + +export function getAppType(state: IConfigState) { + return state.artifact.name; +} + +export function getName(state: IConfigState) { + return state.name; +} + +export function getNodes(state: IConfigState) { + return state?.__ui__?.nodes || []; +} diff --git a/app/cdap/components/StudioV2/store/config/reducer.ts b/app/cdap/components/StudioV2/store/config/reducer.ts new file mode 100644 index 00000000000..0173427ea14 --- /dev/null +++ b/app/cdap/components/StudioV2/store/config/reducer.ts @@ -0,0 +1,77 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import _get from 'lodash/get'; +import _cloneDeep from 'lodash/cloneDeep'; +import _isEqual from 'lodash/isEqual'; +import _assign from 'lodash/assign'; + +import { IArtifactSummary, IPipelineConfig } from 'components/StudioV2/types'; +import { ConfigActions } from './actions'; +import { HYDRATOR_DEFAULT_VALUES } from 'services/global-constants'; + +export interface IConfigState { + artifact?: IArtifactSummary; + __ui__?: { + nodes?: any[]; + }; + name?: string; + description?: string; + change?: { + description?: string; + }; + parentVersion?: string; + config?: IPipelineConfig; + + __defaultState?: IConfigState; +} + +export const configInitialState: IConfigState = { + artifact: { + name: '', + scope: 'SYSTEM', + version: '', + }, + __ui__: { + nodes: [], + }, + description: '', + name: '', + change: { + description: '', + }, + parentVersion: '', + config: { + resources: _cloneDeep(HYDRATOR_DEFAULT_VALUES.resources), + driverResources: _cloneDeep(HYDRATOR_DEFAULT_VALUES.resources), + connections: [], + comments: [], + postActions: [], + properties: {}, + processTimingEnabled: true, + stageLoggingEnabled: HYDRATOR_DEFAULT_VALUES.stageLoggingEnabled, + }, +}; + +export const config = (state: IConfigState = configInitialState, action?): IConfigState => { + switch (action.type) { + case ConfigActions.SET_STATE: + return _assign(_cloneDeep(state), action.payload); + + default: + return state; + } +}; diff --git a/app/cdap/components/StudioV2/store/console/actions.ts b/app/cdap/components/StudioV2/store/console/actions.ts new file mode 100644 index 00000000000..d8f5df8d7b3 --- /dev/null +++ b/app/cdap/components/StudioV2/store/console/actions.ts @@ -0,0 +1,45 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import StudioV2Store from '..'; + +const PREFIX = 'CONSOLE_ACTIONS'; + +export const ConsoleActions = { + ADD_MESSAGE: `${PREFIX}/ADD_MESSAGE`, + ADD_MESSAGES: `${PREFIX}/ADD_MESSAGES`, + RESET: `${PREFIX}/RESET`, +}; + +export function resetConsoleMessages() { + StudioV2Store.dispatch({ + type: ConsoleActions.RESET, + }); +} + +export function addConsoleMessage(payload) { + StudioV2Store.dispatch({ + type: ConsoleActions.ADD_MESSAGE, + payload, + }); +} + +export function addConsoleMessages(payload) { + StudioV2Store.dispatch({ + type: ConsoleActions.ADD_MESSAGES, + payload, + }); +} diff --git a/app/cdap/components/StudioV2/store/console/reducer.ts b/app/cdap/components/StudioV2/store/console/reducer.ts new file mode 100644 index 00000000000..282b7e6f7ff --- /dev/null +++ b/app/cdap/components/StudioV2/store/console/reducer.ts @@ -0,0 +1,44 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { ConsoleActions } from './actions'; + +interface IConsoleState { + messages: any[]; +} + +export const consoleInitialState: IConsoleState = { + messages: [], +}; + +export const consoleReducer = ( + state: IConsoleState = consoleInitialState, + action? +): IConsoleState => { + switch (action.type) { + case ConsoleActions.ADD_MESSAGE: + return { ...state, messages: [...state.messages, action.payload] }; + + case ConsoleActions.ADD_MESSAGES: + return { ...state, messages: action.payload }; + + case ConsoleActions.RESET: + return { ...consoleInitialState }; + + default: + return state; + } +}; diff --git a/app/cdap/components/StudioV2/store/index.ts b/app/cdap/components/StudioV2/store/index.ts new file mode 100644 index 00000000000..84e465646df --- /dev/null +++ b/app/cdap/components/StudioV2/store/index.ts @@ -0,0 +1,53 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { combineReducers, createStore } from 'redux'; +import { common, commonDefaultInitialState } from './common/reducer'; +import { availablePlugins, availablePluginsInitialState } from './availablePlugins/reducer'; +import { consoleReducer, consoleInitialState } from './console/reducer'; +import { plugins, pluginsInitialState } from './plugins/reducer'; +import { preview, previewInitialState } from './preview/reducer'; +import { uiState, uiInitialState } from './uistate/reducer'; +import { config, configInitialState } from './config/reducer'; +import { nodes, nodesInitialState } from './nodes/reducer'; + +const defaultInitialState = { + common: commonDefaultInitialState, + availablePlugins: availablePluginsInitialState, + console: consoleInitialState, + plugins: pluginsInitialState, + preview: previewInitialState, + uiState: uiInitialState, + config: configInitialState, + nodes: nodesInitialState, +}; + +const StudioV2Store = createStore( + combineReducers({ + common, + availablePlugins, + plugins, + preview, + uiState, + config, + nodes, + console: consoleReducer, + }), + defaultInitialState, + (window as any).__REDUX_DEVTOOLS_EXTENSION__ && (window as any).__REDUX_DEVTOOLS_EXTENSION__() +); + +export default StudioV2Store; diff --git a/app/cdap/components/StudioV2/store/nodes/actions.ts b/app/cdap/components/StudioV2/store/nodes/actions.ts new file mode 100644 index 00000000000..d19b555d77c --- /dev/null +++ b/app/cdap/components/StudioV2/store/nodes/actions.ts @@ -0,0 +1,82 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import StudioV2Store from '..'; +import { INodesState, NodesActions } from './reducer'; + +export function resetNodesState() { + StudioV2Store.dispatch({ + type: NodesActions.RESET, + }); +} + +export function setState(payload: INodesState, patchCurrent: boolean = true) { + StudioV2Store.dispatch({ + type: NodesActions.SET_STATE, + payload, + meta: { + patchCurrent, + }, + }); +} + +export function undoActions() { + StudioV2Store.dispatch({ + type: NodesActions.UNDO_ACTIONS, + }); +} + +export function resetSelectedNode() { + StudioV2Store.dispatch({ + type: NodesActions.RESET_ACTIVE_NODE, + }); +} + +export function addNode(nodeConfig) { + StudioV2Store.dispatch({ + type: NodesActions.ADD_NODE, + payload: nodeConfig, + }); +} + +export function updateNode(nodeId, nodeConfig) { + StudioV2Store.dispatch({ + type: NodesActions.UPDATE_NODE, + payload: { + nodeId, + nodeConfig, + }, + }); +} + +export function setActiveNodeId(nodeId) { + StudioV2Store.dispatch({ + type: NodesActions.SET_ACTIVE_NODE, + payload: nodeId, + }); +} + +export function updateNodePosition(nodeId, position) { + const nodeConfig = { + _uiPosition: position, + }; + console.log(nodeId, nodeConfig); + updateNode(nodeId, nodeConfig); +} + +export function logNodePos(nodeId, pos) { + console.log(nodeId, pos); +} diff --git a/app/cdap/components/StudioV2/store/nodes/mutations.ts b/app/cdap/components/StudioV2/store/nodes/mutations.ts new file mode 100644 index 00000000000..a76dfbaea64 --- /dev/null +++ b/app/cdap/components/StudioV2/store/nodes/mutations.ts @@ -0,0 +1,326 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import _get from 'lodash/get'; +import _cloneDeep from 'lodash/cloneDeep'; +import _isEqual from 'lodash/isEqual'; +import _assign from 'lodash/assign'; +import uuid from 'uuid'; + +import { INodesState } from './reducer'; +import { santizeStringForHTMLID } from 'services/helpers'; +import { GLOBALS } from 'services/global-constants'; + +export function addSourceCount_mutating(state: INodesState): INodesState { + state.currentSourceCount++; + return state; +} + +export function addTrasformCount_mutating(state: INodesState): INodesState { + state.currentTransformCount++; + return state; +} + +export function addSinkCount_mutating(state: INodesState): INodesState { + state.currentSinkCount++; + return state; +} + +export function resetSourceCount_mutating(state: INodesState): INodesState { + state.currentSourceCount = 0; + return state; +} + +export function resetTransformCount_mutating(state: INodesState): INodesState { + state.currentTransformCount = 0; + return state; +} + +export function resetSinkCount_mutating(state: INodesState): INodesState { + state.currentSinkCount = 0; + return state; +} + +export function resetPluginCount_mutating(state: INodesState): INodesState { + state.currentSourceCount = 0; + state.currentTransformCount = 0; + state.currentSinkCount = 0; + return state; +} + +export function setCanvasPanning_mutating( + state: INodesState, + panning: { + top: number; + left: number; + } +): INodesState { + state.canvasPanning.top = panning.top; + state.canvasPanning.left = panning.left; + return state; +} + +export function addNode_mutating(state: INodesState, nodeConfig): INodesState { + if (!nodeConfig.name) { + nodeConfig.name = nodeConfig.plugin.label + '_' + uuid.v4(); + } + + if (!nodeConfig.id) { + nodeConfig.id = santizeStringForHTMLID(nodeConfig.plugin.label) + '_' + uuid.v4(); + } + + addStateToHistory_mutating(state); + switch (GLOBALS.pluginConvert[nodeConfig.type]) { + case 'source': + addSourceCount_mutating(state); + break; + case 'sink': + addSinkCount_mutating(state); + break; + default: + addTrasformCount_mutating(state); + break; + } + + state.nodes.push(nodeConfig); + if (!state.adjacencyMap[nodeConfig.id]) { + state.adjacencyMap[nodeConfig.id] = []; + } + + return state; +} + +export function addStateToHistory_mutating(state: INodesState, resetFuture: boolean = true) { + const currentState = _cloneDeep(state); + delete currentState.stateHistory; + + state.stateHistory.past.push(currentState); + if (resetFuture) { + return resetFututeStates_mutating(state); + } + + return state; +} + +export function resetFututeStates_mutating(state: INodesState): INodesState { + state.stateHistory.future = []; + return state; +} + +export function removePreviousState_mutating(state: INodesState): INodesState { + state.stateHistory.past.pop(); + return state; +} + +export function undoActions_mutating(state: INodesState): INodesState { + const past = _get(state, `stateHistory.past`, []); + if (past.length) { + const previousState = state.stateHistory.past.pop(); + const presentState = _cloneDeep(state); + delete presentState.stateHistory; + state.stateHistory.future.unshift(presentState); + previousState.stateHistory = state.stateHistory; + return previousState; + } + + return state; +} + +export function redoActions_mutating(state: INodesState): INodesState { + const future = _get(state, 'stateHistory.future', []); + if (future.length) { + const nextState = state.stateHistory.future.shift(); + const presentState = _cloneDeep(state); + delete presentState.stateHistory; + state.stateHistory.past.push(presentState); + nextState.stateHistory = state.stateHistory; + return nextState; + } + + return state; +} + +export function updateNode_mutating(state: INodesState, nodeId: string, config): INodesState { + const matchNode = state.nodes.filter((node) => node.id === nodeId)[0]; + if (!matchNode) { + return state; + } + + addStateToHistory_mutating(state); + _assign(matchNode, config); + return state; +} + +export function removeNode_mutating(state: INodesState, nodeId: string): INodesState { + const match = state.nodes.filter((node) => node.id === nodeId)[0]; + if (!match) { + return state; + } + + addStateToHistory_mutating(state); + switch (GLOBALS.pluginConvert[match.type]) { + case 'source': + state.currentSourceCount--; + break; + case 'sink': + state.currentSinkCount--; + break; + default: + state.currentTransformCount--; + break; + } + state.nodes.splice(state.nodes.indexOf(match), 1); + state.connections = state.connections.filter( + (conn) => conn.from !== match.name && conn.to !== match.name + ); + state.activeNodeId = null; + delete state.adjacencyMap[nodeId]; + Object.keys(state.adjacencyMap).forEach((key) => { + state.adjacencyMap[key] = state.adjacencyMap[key].filter((n) => n !== nodeId); + }); + + return state; +} + +export function setNodes_mutating(state: INodesState, nodes): INodesState { + state.adjacencyMap = {}; + nodes.forEach((node) => { + if (!node.name) { + node.name = node.label + '_' + uuid.v4(); + } + if (!node.id) { + node.id = santizeStringForHTMLID(node.label) + '_' + uuid.v4(); + } + if (!node.type) { + node.type = node.plugin.type; + } + if (!state.adjacencyMap[node.id]) { + state.adjacencyMap[node.id] = []; + } + }); + state.nodes = _cloneDeep(nodes); + + return state; +} + +export function setActiveNodeId_mutating(state: INodesState, nodeId: string): INodesState { + addStateToHistory_mutating(state, false); + state.activeNodeId = nodeId; + return state; +} + +export function resetActiveNodeId_mutating(state: INodesState): INodesState { + state.activeNodeId = null; + state.nodes.forEach((node) => { + node.selected = false; + }); + + return state; +} + +export function addConnection_mutating(state: INodesState, connection): INodesState { + addStateToHistory_mutating(state); + state.connections.push(_cloneDeep(connection)); + + const { from, to } = connection; + const sourceNode = state.nodes.find((node) => node.name === from); + const targetNode = state.nodes.find((node) => node.name === to); + const sourceNodeId = sourceNode.id || sourceNode.name; + const targetNodeId = targetNode.id || targetNode.name; + + if (!state.adjacencyMap[sourceNodeId]) { + state.adjacencyMap[sourceNodeId] = [targetNodeId]; + } else { + state.adjacencyMap[sourceNodeId].push(targetNodeId); + } + + return state; +} + +export function updateConnections(state: INodesState, connections): INodesState { + addStateToHistory_mutating(state); + setConnections_mutating(state, connections); + return state; +} + +export function removeConnection_mutating(state: INodesState, connection): INodesState { + addStateToHistory_mutating(state); + const { from, to } = connection; + const index = state.connections.findIndex((conn) => conn.from === from && conn.to === to); + const sourceNode = state.nodes.find((node) => node.name === from); + const targetNode = state.nodes.find((node) => node.name === to); + const sourceNodeId = sourceNode.id || sourceNode.name; + const targetNodeId = targetNode.id || targetNode.name; + + state.adjacencyMap[sourceNodeId] = state.adjacencyMap[sourceNodeId].filter( + (target) => target !== targetNodeId + ); + state.connections.splice(index, 1); + + return state; +} + +export function setConnections_mutating(state: INodesState, connections): INodesState { + Object.keys(state.adjacencyMap).forEach((key) => { + state.adjacencyMap[key] = []; + }); + connections.forEach(({ from, to }) => { + const sourceNode = state.nodes.find((node) => node.name === from); + const targetNode = state.nodes.find((node) => node.name === to); + const sourceNodeId = sourceNode.id || sourceNode.name; + const targetNodeId = targetNode.id || targetNode.name; + + if (!state.adjacencyMap[sourceNodeId]) { + state.adjacencyMap[sourceNodeId] = [targetNodeId]; + } else { + state.adjacencyMap[sourceNodeId].push(targetNodeId); + } + }); + state.connections = _cloneDeep(connections); + + return state; +} + +export function setNodesAndConnections_mutating( + state: INodesState, + nodes, + connections +): INodesState { + setNodes_mutating(state, nodes); + state.connections = _cloneDeep(connections); + state.adjacencyMap = {}; + + nodes.forEach((node) => { + let nodeId = node; + if (typeof node === 'object' && typeof node.id === 'string') { + nodeId = node.id; + } + if (!nodeId) { + return; + } + state.adjacencyMap[nodeId] = []; + }); + + connections.forEach(({ from, to }) => { + const sourceNode = state.nodes.find((node) => node.name === from); + const targetNode = state.nodes.find((node) => node.name === to); + const sourceNodeId = sourceNode.id || sourceNode.name; + const targetNodeId = targetNode.id || targetNode.name; + state.adjacencyMap[sourceNodeId].push(targetNodeId); + }); + + return state; +} diff --git a/app/cdap/components/StudioV2/store/nodes/queries.ts b/app/cdap/components/StudioV2/store/nodes/queries.ts new file mode 100644 index 00000000000..e123ab934f4 --- /dev/null +++ b/app/cdap/components/StudioV2/store/nodes/queries.ts @@ -0,0 +1,108 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import _get from 'lodash/get'; +import _cloneDeep from 'lodash/cloneDeep'; +import _isEqual from 'lodash/isEqual'; +import _assign from 'lodash/assign'; +import { INodesState } from './reducer'; +import { GLOBALS } from 'services/global-constants'; + +export function getSourceCount(state: INodesState) { + return state.currentSourceCount; +} + +export function getTransformCount(state: INodesState) { + return state.currentTransformCount; +} + +export function getSinkCount(state: INodesState) { + return state.currentSinkCount; +} + +export function getCanvasPanning(state: INodesState) { + return state.canvasPanning; +} + +export function getAdjacencyMap(state: INodesState) { + return state.adjacencyMap; +} + +export function getNodes(state: INodesState) { + return state.nodes; +} + +export function getNodesAsObjects(state: INodesState) { + return state.nodes.reduce((acc, node) => { + acc[node.name] = node; + return acc; + }, {}); +} + +export function getActiveNodeId(state: INodesState) { + return state.activeNodeId; +} + +export function getConnections(state: INodesState) { + return _cloneDeep(state.connections); +} + +export function getUndoStates(state: INodesState) { + return state.stateHistory.past; +} + +export function getRedoStates(state: INodesState) { + return state.stateHistory.future; +} + +export function getNodeInitialPosition(state: INodesState, nodeType: string) { + const canvasPanning = getCanvasPanning(state); + const sourcePosition = { + top: 150 - canvasPanning.top, + left: (10 / 100) * document.documentElement.clientWidth - canvasPanning.left, + }; + const transformPosition = { + top: 150 - canvasPanning.top, + left: (30 / 100) * document.documentElement.clientWidth - canvasPanning.left, + }; + const sinkPosition = { + top: 150 - canvasPanning.top, + left: (50 / 100) * document.documentElement.clientWidth - canvasPanning.left, + }; + + const offset = 35; + + switch (GLOBALS.pluginConvert[nodeType]) { + case 'source': + const sourceOffset = getSourceCount(state) * offset; + return { + top: sourcePosition.top + sourceOffset, + left: sourcePosition.left + sourceOffset, + }; + case 'sink': + const sinkOffset = getSinkCount(state) * offset; + return { + top: sinkPosition.top + sinkOffset, + left: sinkPosition.left + sinkOffset, + }; + default: + const transformOffset = getTransformCount(state) * offset; + return { + top: transformPosition.top + transformOffset, + left: transformPosition.left + transformOffset, + }; + } +} diff --git a/app/cdap/components/StudioV2/store/nodes/reducer.ts b/app/cdap/components/StudioV2/store/nodes/reducer.ts new file mode 100644 index 00000000000..4a3933f8a32 --- /dev/null +++ b/app/cdap/components/StudioV2/store/nodes/reducer.ts @@ -0,0 +1,117 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import _get from 'lodash/get'; +import _cloneDeep from 'lodash/cloneDeep'; +import _isEqual from 'lodash/isEqual'; +import _assign from 'lodash/assign'; + +import { + addConnection_mutating, + addNode_mutating, + resetActiveNodeId_mutating, + setActiveNodeId_mutating, + undoActions_mutating, + updateNode_mutating, +} from './mutations'; +import { cloneAndApply } from 'components/StudioV2/utils/objectUtils'; + +const PREFIX = 'NODES_ACTIONS'; +export const NodesActions = { + RESET: `${PREFIX}/RESET`, + SET_STATE: `${PREFIX}/SET_STATE`, + UNDO_ACTIONS: `${PREFIX}/UNDO_ACTIONS`, + RESET_ACTIVE_NODE: `${PREFIX}/RESET_ACTIVE_NODE`, + ADD_NODE: `${PREFIX}/ADD_NODE`, + UPDATE_NODE: `${PREFIX}/UPDATE_NODE`, + ADD_CONNECTION: `${PREFIX}/ADD_CONNECTION`, + SET_ACTIVE_NODE: `${PREFIX}/SET_ACTIVE_NODE`, +}; + +export interface INodesState { + nodes: any[]; + connections: any[]; + activeNodeId?: string | null; + currentSourceCount: number; + currentTransformCount: number; + currentSinkCount: number; + canvasPanning: { + top: number; + left: number; + }; + stateHistory?: { + past: INodesState[]; + future: INodesState[]; + }; + adjacencyMap: any; +} + +export const nodesInitialState: INodesState = { + nodes: [], + connections: [], + activeNodeId: null, + currentSourceCount: 0, + currentTransformCount: 0, + currentSinkCount: 0, + canvasPanning: { + top: 0, + left: 0, + }, + stateHistory: { + past: [], + future: [], + }, + adjacencyMap: {}, +}; + +export const nodes = (state: INodesState = nodesInitialState, action?): INodesState => { + switch (action.type) { + case NodesActions.RESET: + return _cloneDeep(nodesInitialState); + + case NodesActions.SET_STATE: { + const patchCurrent = action?.meta?.patchCurrent; + if (!patchCurrent) { + return _cloneDeep(action.payload); + } + + return _assign(_cloneDeep(state), action.payload); + } + + case NodesActions.UNDO_ACTIONS: + return cloneAndApply(state, undoActions_mutating); + + case NodesActions.RESET_ACTIVE_NODE: + return cloneAndApply(state, resetActiveNodeId_mutating); + + case NodesActions.SET_ACTIVE_NODE: + return cloneAndApply(state, (draft) => setActiveNodeId_mutating(draft, action.payload)); + + case NodesActions.ADD_NODE: + return cloneAndApply(state, (draft) => addNode_mutating(draft, action.payload)); + + case NodesActions.UPDATE_NODE: + return cloneAndApply(state, (draft) => + updateNode_mutating(draft, action.payload.nodeId, action.payload.nodeConfig) + ); + + case NodesActions.ADD_CONNECTION: + return cloneAndApply(state, (draft) => addConnection_mutating(state, action.payload)); + + default: + return state; + } +}; diff --git a/app/cdap/components/StudioV2/store/plugins/actions.ts b/app/cdap/components/StudioV2/store/plugins/actions.ts new file mode 100644 index 00000000000..dcaecc6fdc7 --- /dev/null +++ b/app/cdap/components/StudioV2/store/plugins/actions.ts @@ -0,0 +1,90 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { MyArtifactApi } from 'api/artifact'; +import { GLOBALS } from 'services/global-constants'; +import { getPluginIcon } from 'components/StudioV2/utils/pluginUtils'; +import StudioV2Store from '..'; +import MySettingsService from 'components/StudioV2/utils/settings'; + +const PREFIX = 'PLUGINS_ACTIONS'; + +export const PluginsActions = { + FETCH_PLUGINS: `${PREFIX}/FETCH_PLUGINS`, + FETCH_ALL_PLUGINS: `${PREFIX}/FETCH_ALL_PLUGINS`, + FETCH_PLUGIN_TEMPLATE: `${PREFIX}/FETCH_PLUGIN_TEMPLATE`, + FETCH_PLUGINS_DEFAULT_VERSIONS: `${PREFIX}/FETCH_PLUGINS_DEFAULT_VERSIONS`, + UPDATE_PLUGINS_DEFAULT_VERSIONS: `${PREFIX}/UPDATE_PLUGINS_DEFAULT_VERSIONS`, + CHECK_AND_UPDATE_PLUGIN_DEFAULT_VERSION: `${PREFIX}/CHECK_AND_UPDATE_PLUGIN_DEFAULT_VERSION`, + FETCH_EXTENSIONS: `${PREFIX}/FETCH_EXTENSIONS`, + RESET: `${PREFIX}/RESET`, +}; + +export const getTemplatesWithAddedInfo = (templates = [], extension = '') => + templates.map((template) => ({ + ...template, + nodeClass: 'plugin-templates', + name: template.pluginTemplate, + pluginName: template.pluginName, + type: extension, + icon: getPluginIcon(template.pluginName), + // TODO: should we need the following ? + // template: popoverTemplate, + allArtifacts: [template.artifact], + })); + +const keepUiSupportedExtensions = (pipelineType) => (extension) => { + const extensionMap = GLOBALS.pluginTypes[pipelineType]; + return Object.keys(extensionMap).filter((ext) => extensionMap[ext] === extension).length; +}; + +export async function fetchPluginsDefaultVersions() { + try { + const pluginDefalutVersion = await MySettingsService.getInstance().get( + 'plugin-default-version' + ); + if (!pluginDefalutVersion) { + return; + } + + StudioV2Store.dispatch({ + type: PluginsActions.FETCH_PLUGINS_DEFAULT_VERSIONS, + payload: pluginDefalutVersion, + }); + } catch (err) { + return; + } +} + +export async function updatePluginDefaultVersion(plugin) { + try { + let pluginDefalutVersion = + (await MySettingsService.getInstance().get('plugin-default-version')) || {}; + const key = `${plugin.name}-${plugin.type}-${plugin.artifact.name}`; + pluginDefalutVersion[key] = plugin.artifact; + await MySettingsService.getInstance().set('plugin-default-version', pluginDefalutVersion); + pluginDefalutVersion = await MySettingsService.getInstance().get('plugin-default-version'); + if (!pluginDefalutVersion) { + return; + } + StudioV2Store.dispatch({ + type: PluginsActions.FETCH_PLUGINS_DEFAULT_VERSIONS, + payload: pluginDefalutVersion, + }); + } catch (err) { + return; + } +} diff --git a/app/cdap/components/StudioV2/store/plugins/reducer.ts b/app/cdap/components/StudioV2/store/plugins/reducer.ts new file mode 100644 index 00000000000..b23a6410bfe --- /dev/null +++ b/app/cdap/components/StudioV2/store/plugins/reducer.ts @@ -0,0 +1,122 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import _get from 'lodash/get'; +import _cloneDeep from 'lodash/cloneDeep'; +import _isEqual from 'lodash/isEqual'; + +import { ILabeledArtifactSummary } from 'components/StudioV2/types'; +import { getArtifactDisaplayName } from 'components/StudioV2/utils/artifactUtils'; +import { GLOBALS } from 'services/global-constants'; +import { PluginsActions, getTemplatesWithAddedInfo } from './actions'; +import { getDefaultVersionForPlugin } from 'components/StudioV2/utils/pluginUtils'; + +interface IPluginsState { + pluginTypes: any; + pluginToVersionMap: any; + extensions: any[]; +} + +export const pluginsInitialState: IPluginsState = { + pluginTypes: {}, + pluginToVersionMap: {}, + extensions: [], +}; + +export const plugins = (state: IPluginsState = pluginsInitialState, action?): IPluginsState => { + switch (action.type) { + case PluginsActions.FETCH_PLUGINS_DEFAULT_VERSIONS: { + const defaultPluginVersionsMap = action.payload || {}; + const pluginTypesCopy = {}; + + if (Object.keys(defaultPluginVersionsMap).length) { + const pluginTypes = Object.keys(state.pluginTypes); + // If this is fetched after the all the plugins have been fetched from the backend then we will update them. + pluginTypes.forEach((pluginType) => { + const _plugins = state.pluginTypes[pluginType]; + pluginTypesCopy[pluginType] = _plugins.map((plugin) => { + plugin.defaultArtifact = getDefaultVersionForPlugin(plugin, defaultPluginVersionsMap); + return plugin; + }); + }); + + return { + ...state, + pluginTypes: pluginTypesCopy, + pluginToVersionMap: defaultPluginVersionsMap, + }; + } + return state; + } + + case PluginsActions.CHECK_AND_UPDATE_PLUGIN_DEFAULT_VERSION: { + console.log({ state }); + const pluginTypesKeys = Object.keys(state.pluginTypes); + if (!pluginTypesKeys.length) { + return state; + } + + const pluginToVersionMap = _cloneDeep(state.pluginToVersionMap); + console.log({ pluginTypesKeys }); + pluginTypesKeys.forEach((pluginType) => { + state.pluginTypes[pluginType].forEach((plugin) => { + if (plugin.pluginTemplate) { + return; + } + const key = `${plugin.name}-${plugin.type}-${plugin.artifact.name}`; + const isArtifactExistsInBackend = plugin.allArtifacts.filter((plug) => + _isEqual(plug.artifact, pluginToVersionMap[key]) + ); + if (!isArtifactExistsInBackend.length) { + delete pluginToVersionMap[key]; + } + }); + }); + return { ...state, pluginToVersionMap }; + } + + case PluginsActions.FETCH_PLUGIN_TEMPLATE: { + const { pipelineType, namespace, templates } = action.payload; + const templatesList = _get(templates, `${namespace}.${pipelineType}`); + if (!templatesList) { + return state; + } + + const stateCopy = _cloneDeep(state); + Object.entries(templatesList).forEach(([key, plugins]) => { + const _templates = Object.values(plugins); + const _pluginWithoutTemplates = (state.pluginTypes[key] || []).filter( + (plug) => !plug.pluginTemplate + ); + stateCopy.pluginTypes[key] = getTemplatesWithAddedInfo(_templates, key).concat( + _pluginWithoutTemplates + ); + }); + + return stateCopy; + } + + case PluginsActions.FETCH_ALL_PLUGINS: + return { + ...state, + pluginTypes: _cloneDeep(action.payload.pluginTypes), + extensions: _cloneDeep(action.payload.extensions), + }; + + default: + return state; + } +}; diff --git a/app/cdap/components/StudioV2/store/preview/actions.ts b/app/cdap/components/StudioV2/store/preview/actions.ts new file mode 100644 index 00000000000..e92a59e6b25 --- /dev/null +++ b/app/cdap/components/StudioV2/store/preview/actions.ts @@ -0,0 +1,23 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import StudioV2Store from '..'; + +const PREFIX = 'PREVIEW_ACTIONS'; + +export const PreviewActions = { + DUMMY_ACTION: `${PREFIX}/DUMMY_ACTION`, +}; diff --git a/app/cdap/components/StudioV2/store/preview/reducer.ts b/app/cdap/components/StudioV2/store/preview/reducer.ts new file mode 100644 index 00000000000..ce017ab584f --- /dev/null +++ b/app/cdap/components/StudioV2/store/preview/reducer.ts @@ -0,0 +1,32 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { PreviewActions } from './actions'; + +interface IPreviewState { + // fill in +} + +export const previewInitialState: IPreviewState = { + // fill in +}; + +export const preview = (state: IPreviewState = previewInitialState, action?): IPreviewState => { + switch (action.type) { + default: + return state; + } +}; diff --git a/app/cdap/components/StudioV2/store/uistate/actions.ts b/app/cdap/components/StudioV2/store/uistate/actions.ts new file mode 100644 index 00000000000..cfe352e6bfc --- /dev/null +++ b/app/cdap/components/StudioV2/store/uistate/actions.ts @@ -0,0 +1,27 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import StudioV2Store from '..'; + +const PREFIX = 'UI_ACTIONS'; + +export const UiActions = { + OPEN_MODAL: `${PREFIX}/OPEN_MODAL_COMPONENT`, + CLOSE_MODAL: `${PREFIX}/CLOSE_CURRENT_MODAL`, + + OPEN_RIGHT_PANEL: `${PREFIX}/OPEN_RIGHT_PANEL`, + CLOSE_RIGHT_PANEL: `${PREFIX}/CLOSE_RIGHT_PANEL`, +}; diff --git a/app/cdap/components/StudioV2/store/uistate/reducer.ts b/app/cdap/components/StudioV2/store/uistate/reducer.ts new file mode 100644 index 00000000000..8e3de736bd4 --- /dev/null +++ b/app/cdap/components/StudioV2/store/uistate/reducer.ts @@ -0,0 +1,76 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import React from 'react'; +import { UiActions } from './actions'; + +interface IUiState { + modalShown: boolean; + modalToRender?: React.ReactNode; + modalOnClose?: () => void; + + rightPanelShown: boolean; + rightPanelToRender?: React.ReactNode; + rightPanelOnClose?: () => void; + // fill in +} + +export const uiInitialState: IUiState = { + modalShown: false, + modalToRender: null, + rightPanelShown: false, + rightPanelToRender: null, + // fill in +}; + +export const uiState = (state: IUiState = uiInitialState, action?): IUiState => { + switch (action.type) { + case UiActions.OPEN_MODAL: + return { + ...state, + modalShown: true, + modalToRender: action.payload.render, + modalOnClose: action.payload.onClose, + }; + + case UiActions.CLOSE_MODAL: + return { + ...state, + modalShown: false, + modalToRender: null, + modalOnClose: null, + }; + + case UiActions.OPEN_RIGHT_PANEL: + return { + ...state, + rightPanelShown: true, + rightPanelToRender: action.payload.render, + rightPanelOnClose: action.payload.onClose, + }; + + case UiActions.CLOSE_RIGHT_PANEL: + return { + ...state, + rightPanelShown: false, + rightPanelToRender: null, + rightPanelOnClose: null, + }; + + default: + return state; + } +}; diff --git a/app/cdap/components/StudioV2/styles.ts b/app/cdap/components/StudioV2/styles.ts new file mode 100644 index 00000000000..7ce6b246e45 --- /dev/null +++ b/app/cdap/components/StudioV2/styles.ts @@ -0,0 +1,47 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import styled from 'styled-components'; + +export const CanvasWrapper = styled.div` + display: flex; + top: 50px; + bottom: 0; + right: 0; + left: 0; + position: fixed; + background: #fafafa; +`; + +export const LeftPanelWrapper = styled.div` + display: flex; + width: 270px; + overflow: auto; + z-index: 1; +`; + +export const RightWrapper = styled.div` + z-index: 0; + display: flex; + flex-direction: column; + align-items: stretch; + justify-content: flex-start; + height: 100%; +`; + +export const DagWrapper = styled.div` + flex-grow: 1; +`; diff --git a/app/cdap/components/StudioV2/types.ts b/app/cdap/components/StudioV2/types.ts new file mode 100644 index 00000000000..3c1624dc7f9 --- /dev/null +++ b/app/cdap/components/StudioV2/types.ts @@ -0,0 +1,57 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +export type ArtifactScope = 'USER' | 'SYSTEM'; + +export interface IArtifactSummary { + name: string; + version: string; + scope: ArtifactScope; +} + +export interface ILabeledArtifactSummary extends IArtifactSummary { + label: string; +} + +export interface IPipelineConfig { + resources?: any; + driverResources?: any; + connections?: any[]; + comments?: any[]; + postActions?: any[]; + properties?: any; + + processTimingEnabled?: boolean; + stageLoggingEnabled?: boolean; + + schedule?: string; + instances?: number; + engine?: string; + + clientResources?: any; + disableCheckpoints?: boolean; + checkpointDir?: string | boolean; + stopGracefully?: boolean; + batchInterval?: string; + + serviceAccountPath?: string; + rangeRecordsPreview?: { + min?: number; + max?: number; + }; + numOfRecordsPreview?: number; + maxConcurrentRuns?: number; +} diff --git a/app/cdap/components/StudioV2/utils/artifactUtils.ts b/app/cdap/components/StudioV2/utils/artifactUtils.ts new file mode 100644 index 00000000000..0fbe2e83a26 --- /dev/null +++ b/app/cdap/components/StudioV2/utils/artifactUtils.ts @@ -0,0 +1,21 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { GLOBALS } from 'services/global-constants'; + +export function getArtifactDisaplayName(artifactName: string): string { + return GLOBALS.artifactConvert[artifactName] || artifactName; +} diff --git a/app/cdap/components/StudioV2/utils/defer.ts b/app/cdap/components/StudioV2/utils/defer.ts new file mode 100644 index 00000000000..2be76be4814 --- /dev/null +++ b/app/cdap/components/StudioV2/utils/defer.ts @@ -0,0 +1,28 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +export default class Defer { + public promise: Promise; + public resolve: (value: T | PromiseLike) => void; + public reject: (error?: any) => void; + + constructor() { + this.promise = new Promise((resolve, reject) => { + this.resolve = resolve; + this.reject = reject; + }); + } +} diff --git a/app/cdap/components/StudioV2/utils/geometry.ts b/app/cdap/components/StudioV2/utils/geometry.ts new file mode 100644 index 00000000000..362fbb38f8a --- /dev/null +++ b/app/cdap/components/StudioV2/utils/geometry.ts @@ -0,0 +1,19 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +export function cartesianDistance(fromX: number, fromY: number, toX: number, toY: number): number { + return Math.sqrt(Math.pow(toX - fromX, 2) + Math.pow(toY - fromY, 2)); +} diff --git a/app/cdap/components/StudioV2/utils/nodeUtils.ts b/app/cdap/components/StudioV2/utils/nodeUtils.ts new file mode 100644 index 00000000000..5d479000d68 --- /dev/null +++ b/app/cdap/components/StudioV2/utils/nodeUtils.ts @@ -0,0 +1,59 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { getCurrentNamespace } from 'services/NamespaceStore'; +import Defer from './defer'; +import VersionStore from 'services/VersionStore'; +import { MyPipelineApi } from 'api/pipeline'; + +// TODO add types +export function fetchBackendProperties(node, appType, artifactVersion?) { + const defer = new Defer(); + + // This needs to pass on a scope always. Right now there is no cleanup + // happening + const params = { + namespace: getCurrentNamespace(), + pipelineType: appType, + version: artifactVersion || VersionStore.getState().version, + extensionType: node.type || node.plugin.type, + pluginName: node.plugin.name, + artifactVersion: node.plugin.artifact.version, + artifactName: node.plugin.artifact.name, + artifactScope: node.plugin.artifact.scope, + limit: 1, + order: 'DESC', + }; + + MyPipelineApi.fetchPluginProperties(params).subscribe( + (res = []) => { + // Since now we have added plugin artifact information to be passed in query params + // We don't get a list (or list of different versions of the plugin) anymore. Its always a list of 1 item. + // Overwriting artifact as UI could have artifact ranges while importing draft. + const lastElementIndex = res.length - 1; + node._backendProperties = res[lastElementIndex].properties || {}; + node.description = res[lastElementIndex].description; + node.plugin.artifact = res[lastElementIndex].artifact; + defer.resolve(node); + }, + (err) => { + defer.reject(err); + // TODO handle error case + } + ); + + return defer.promise; +} diff --git a/app/cdap/components/StudioV2/utils/objectUtils.ts b/app/cdap/components/StudioV2/utils/objectUtils.ts new file mode 100644 index 00000000000..324840b560b --- /dev/null +++ b/app/cdap/components/StudioV2/utils/objectUtils.ts @@ -0,0 +1,22 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import _cloneDeep from 'lodash/cloneDeep'; + +export function cloneAndApply(object: T, mutation: (draft: T) => T): T { + const draft: T = _cloneDeep(object); + return mutation(draft); +} diff --git a/app/cdap/components/StudioV2/utils/pluginUtils.ts b/app/cdap/components/StudioV2/utils/pluginUtils.ts new file mode 100644 index 00000000000..62238a89b55 --- /dev/null +++ b/app/cdap/components/StudioV2/utils/pluginUtils.ts @@ -0,0 +1,239 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import _isEqual from 'lodash/isEqual'; +import _get from 'lodash/get'; +import _cloneDeep from 'lodash/cloneDeep'; +import { findHighestVersion } from 'services/VersionRange/VersionUtilities'; +import { GLOBALS } from 'services/global-constants'; + +export function getPluginIcon(pluginName: string): string { + const iconMap = { + script: 'icon-script', + scriptfilter: 'icon-scriptfilter', + twitter: 'icon-twitter', + cube: 'icon-cube', + data: 'fa-database', + database: 'icon-database', + table: 'icon-table', + kafka: 'icon-kafka', + jms: 'icon-jms', + projection: 'icon-projection', + amazonsqs: 'icon-amazonsqs', + datagenerator: 'icon-datagenerator', + validator: 'icon-validator', + corevalidator: 'corevalidator', + logparser: 'icon-logparser', + file: 'icon-file', + kvtable: 'icon-kvtable', + s3: 'icon-s3', + s3avro: 'icon-s3avro', + s3parquet: 'icon-s3parquet', + snapshotavro: 'icon-snapshotavro', + snapshotparquet: 'icon-snapshotparquet', + tpfsavro: 'icon-tpfsavro', + tpfsparquet: 'icon-tpfsparquet', + sink: 'icon-sink', + hive: 'icon-hive', + structuredrecordtogenericrecord: 'icon-structuredrecord', + cassandra: 'icon-cassandra', + teradata: 'icon-teradata', + elasticsearch: 'icon-elasticsearch', + hbase: 'icon-hbase', + mongodb: 'icon-mongodb', + pythonevaluator: 'icon-pythonevaluator', + csvformatter: 'icon-csvformatter', + csvparser: 'icon-csvparser', + clonerecord: 'icon-clonerecord', + compressor: 'icon-compressor', + decompressor: 'icon-decompressor', + encoder: 'icon-encoder', + decoder: 'icon-decoder', + jsonformatter: 'icon-jsonformatter', + jsonparser: 'icon-jsonparser', + hdfs: 'icon-hdfs', + hasher: 'icon-hasher', + javascript: 'icon-javascript', + deduper: 'icon-deduper', + distinct: 'icon-distinct', + naivebayestrainer: 'icon-naivebayestrainer', + groupbyaggregate: 'icon-groupbyaggregate', + naivebayesclassifier: 'icon-naivebayesclassifier', + azureblobstore: 'icon-azureblobstore', + xmlreader: 'icon-XMLreader', + xmlparser: 'icon-XMLparser', + ftp: 'icon-FTP', + joiner: 'icon-joiner', + deduplicate: 'icon-deduplicator', + valuemapper: 'icon-valuemapper', + rowdenormalizer: 'icon-rowdenormalizer', + ssh: 'icon-ssh', + sshaction: 'icon-sshaction', + copybookreader: 'icon-COBOLcopybookreader', + excel: 'icon-excelinputsource', + encryptor: 'icon-Encryptor', + decryptor: 'icon-Decryptor', + hdfsfilemoveaction: 'icon-filemoveaction', + hdfsfilecopyaction: 'icon-filecopyaction', + sqlaction: 'icon-SQLaction', + impalahiveaction: 'icon-impalahiveaction', + email: 'icon-emailaction', + kinesissink: 'icon-Amazon-Kinesis', + bigquerysource: 'icon-Big-Query', + tpfsorc: 'icon-ORC', + groupby: 'icon-groupby', + sparkmachinelearning: 'icon-sparkmachinelearning', + solrsearch: 'icon-solr', + sparkstreaming: 'icon-sparkstreaming', + rename: 'icon-rename', + archive: 'icon-archive', + wrangler: 'icon-DataPreparation', + normalize: 'icon-normalize', + xmlmultiparser: 'icon-XMLmultiparser', + xmltojson: 'icon-XMLtoJSON', + decisiontreepredictor: 'icon-decisiontreeanalytics', + decisiontreetrainer: 'icon-DesicionTree', + hashingtffeaturegenerator: 'icon-HashingTF', + ngramtransform: 'icon-NGram', + tokenizer: 'icon-tokenizeranalytics', + skipgramfeaturegenerator: 'icon-skipgram', + skipgramtrainer: 'icon-skipgramtrainer', + logisticregressionclassifier: 'icon-logisticregressionanalytics', + logisticregressiontrainer: 'icon-LogisticRegressionclassifier', + hdfsdelete: 'icon-hdfsdelete', + hdfsmove: 'icon-hdfsmove', + windowssharecopy: 'icon-windowssharecopy', + httppoller: 'icon-httppoller', + window: 'icon-window', + run: 'icon-Run', + oracleexport: 'icon-OracleDump', + snapshottext: 'icon-SnapshotTextSink', + errorcollector: 'fa-exclamation-triangle', + mainframereader: 'icon-MainframeReader', + fastfilter: 'icon-fastfilter', + trash: 'icon-TrashSink', + staterestore: 'icon-Staterestore', + topn: 'icon-TopN', + wordcount: 'icon-WordCount', + datetransform: 'icon-DateTransform', + sftpcopy: 'icon-FTPcopy', + sftpdelete: 'icon-FTPdelete', + validatingxmlconverter: 'icon-XMLvalidator', + wholefilereader: 'icon-Filereader', + xmlschemaaction: 'icon-XMLschemagenerator', + s3toredshift: 'icon-S3toredshift', + redshifttos3: 'icon-redshifttoS3', + verticabulkexportaction: 'icon-Verticabulkexport', + verticabulkimportaction: 'icon-Verticabulkload', + loadtosnowflake: 'icon-snowflake', + kudu: 'icon-apachekudu', + orientdb: 'icon-OrientDB', + recordsplitter: 'icon-recordsplitter', + scalasparkprogram: 'icon-spark', + scalasparkcompute: 'icon-spark', + cdcdatabase: 'icon-database', + cdchbase: 'icon-hbase', + cdckudu: 'icon-apachekudu', + changetrackingsqlserver: 'icon-database', + conditional: 'fa-question-circle-o', + }; + + const actualPluginName = pluginName ? pluginName.toLowerCase() : ''; + const icon = iconMap[actualPluginName] ? iconMap[actualPluginName] : 'fa-plug'; + return icon; +} + +export function getPluginTypeDisplayName(pluginType: string): string { + return GLOBALS.pluginTypeToLabel[pluginType] || pluginType; +} + +export function orderPluginTypes(pluginsMap) { + if (!pluginsMap.length) { + return pluginsMap; + } + + const orderedTypes = []; + const action = pluginsMap.filter((p) => p.name === GLOBALS.pluginLabels.action); + const source = pluginsMap.filter((p) => p.name === GLOBALS.pluginLabels.source); + const transform = pluginsMap.filter((p) => p.name === GLOBALS.pluginLabels.transform); + const sink = pluginsMap.filter((p) => p.name === GLOBALS.pluginLabels.sink); + const analytics = pluginsMap.filter((p) => p.name === GLOBALS.pluginLabels.analytics); + const errorHandlers = pluginsMap.filter((p) => p.name === GLOBALS.pluginLabels.erroralert); + + if (source.length) { + orderedTypes.push(source[0]); + } + if (transform.length) { + orderedTypes.push(transform[0]); + } + if (analytics.length) { + orderedTypes.push(analytics[0]); + } + if (sink.length) { + orderedTypes.push(sink[0]); + } + if (action.length) { + orderedTypes.push(action[0]); + } + if (errorHandlers.length) { + orderedTypes.push(errorHandlers[0]); + } + + // Doing this so that the SidePanel does not lose the reference of the original + // array object. + const pluginsMapCopy = _cloneDeep(pluginsMap); + orderedTypes.forEach((type, index) => { + pluginsMapCopy[index] = type; + }); + + return pluginsMapCopy; +} + +export function getPluginToArtifactMap(plugins = []) { + const typeMap = {}; + plugins.forEach((plugin) => { + typeMap[plugin.name] = typeMap[plugin.name] || []; + typeMap[plugin.name].push(plugin); + }); + return typeMap; +} + +// TODO: Add types +export function getDefaultVersionForPlugin(plugin: any = {}, defaultVersionMap: any = {}) { + if (Object.keys(plugin).length === 0) { + return {}; + } + + const defaultVersionsList = Object.keys(defaultVersionMap); + const key = `${plugin.name}-${plugin.type}-${plugin.artifact.name}`; + const isDefaultVersionExists = defaultVersionsList.includes(key); + const isArtifactExistsInBackend = (plugin.allArtifacts || []).filter((plug) => + _isEqual(plug.artifact, defaultVersionMap[key]) + ); + + if (!isDefaultVersionExists || isArtifactExistsInBackend.length === 0) { + const highestVersion = findHighestVersion( + plugin.allArtifacts.map((plugin) => plugin.artifact.version), + true + ); + const latestPluginVersion = plugin.allArtifacts.find( + (plugin) => plugin.artifact.version === highestVersion + ); + return _get(latestPluginVersion, 'artifact'); + } + + return _cloneDeep(defaultVersionMap[key]); +} diff --git a/app/cdap/components/StudioV2/utils/schemaUtils.ts b/app/cdap/components/StudioV2/utils/schemaUtils.ts new file mode 100644 index 00000000000..b5dc36d8ab4 --- /dev/null +++ b/app/cdap/components/StudioV2/utils/schemaUtils.ts @@ -0,0 +1,65 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import _cloneDeep from 'lodash/cloneDeep'; +import { GLOBALS } from 'services/global-constants'; + +export function formatSchemaToAvro(schema) { + const typeMap = 'map'; + const mapObj = { + type: 'map', + keys: 'string', + values: 'string', + }; + let fields = []; + let outputSchema; + + if (typeof schema === 'string') { + try { + outputSchema = JSON.parse(schema); + } catch (e) { + console.log('ERROR: Parsing schema JSON ', e); + return schema; + } + } else if (schema === null || typeof schema === 'undefined') { + return ''; + } else { + outputSchema = _cloneDeep(schema); + } + + if (outputSchema.name && outputSchema.type && outputSchema.fields) { + return JSON.stringify(outputSchema); + } + + fields = Object.keys(outputSchema).map((field) => { + if (outputSchema[field] === typeMap) { + return { + name: field, + type: mapObj, + }; + } + return { + name: field, + type: outputSchema[field], + }; + }); + + return JSON.stringify({ + name: outputSchema.name || GLOBALS.defaultSchemaName, + type: outputSchema.type || 'record', + fields: outputSchema.fields || fields, + }); +} diff --git a/app/cdap/components/StudioV2/utils/settings.ts b/app/cdap/components/StudioV2/utils/settings.ts new file mode 100644 index 00000000000..35064cb9a14 --- /dev/null +++ b/app/cdap/components/StudioV2/utils/settings.ts @@ -0,0 +1,93 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +import { SettingsApi } from 'api/settings'; +import _set from 'lodash/set'; +import _get from 'lodash/get'; +import { getCurrentNamespace } from 'services/NamespaceStore'; +import Defer from './defer'; + +export default class MySettingsService { + public static instance: MySettingsService = null; + + public static getInstance() { + if (!MySettingsService.instance) { + MySettingsService.instance = new MySettingsService(); + } + + return MySettingsService.instance; + } + + public data: any; + public pending: Promise; + + constructor() { + if (MySettingsService.instance) { + return MySettingsService.instance; + } + this.data = {}; + this.pending = null; + MySettingsService.instance = this; + } + + public set = (key: string, value) => { + const defefred = new Defer(); + this.data = _set(this.data, key, value); + SettingsApi.updateUserSettings({ namespace: getCurrentNamespace() }, this.data).subscribe( + (res) => { + defefred.resolve(res); + }, + (err) => { + defefred.reject(err); + } + ); + + return defefred.promise; + }; + + public get = async (key: string, force?: boolean) => { + const val = _get(this.data, key); + if (!force && val) { + return val; + } + + if (this.pending) { + await this.pending; + return _get(this.data, key); + } + + const deferred = new Defer(); + this.pending = deferred.promise; + SettingsApi.getUserSettings({ namespace: getCurrentNamespace() }).subscribe( + (res) => { + this.data = res.property; + deferred.resolve(_get(this.data, key)); + }, + (err) => { + deferred.reject(err); + } + ); + + try { + const val = await this.pending; + this.pending = null; + return val; + } catch (err) { + this.pending = null; + return undefined; + } + }; +} diff --git a/app/cdap/components/StudioV2/utils/stringUtils.ts b/app/cdap/components/StudioV2/utils/stringUtils.ts new file mode 100644 index 00000000000..cf09e491ca8 --- /dev/null +++ b/app/cdap/components/StudioV2/utils/stringUtils.ts @@ -0,0 +1,45 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +// TODO: Much hardcoding in this formatter, +// find a better way to handle these exceptaional cases +export function camelToTitle(input: string): string { + // Handle "HBase" or "OCaml" case with no change to input. + const result = input.match(/^[A-Z][A-Z][a-z]+/); + // FIXME: specifically for 'JavaScript' case which we don't want to split. + const jsresult = input.match(/^JavaScript?/); + + if (result || jsresult) { + return input; + } + + // FIXME: Hardcoded for now since we don't want to modify algorithm for these 2 cases. + // Also we don't know where exactly to split either + // Ideally this should come from the backend + if (input === 'CDCHBase') { + return 'CDC HBase'; + } + + if (input === 'ChangeTrackingSQLServer') { + return 'Change Tracking SQLServer'; + } + + return input + .replace(/([a-z])([A-Z])/g, '$1 $2') + .replace(/([A-Z])([a-z])/g, ' $1$2') + .replace(/\ +/g, ' ') + .trim(); +} diff --git a/app/cdap/components/StudioV2/utils/time.ts b/app/cdap/components/StudioV2/utils/time.ts new file mode 100644 index 00000000000..80b7c8165a7 --- /dev/null +++ b/app/cdap/components/StudioV2/utils/time.ts @@ -0,0 +1,19 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +export function sleep(durationInMs: number): Promise { + return new Promise((resolve) => setTimeout(resolve, durationInMs)); +} diff --git a/app/cdap/components/hydrator/components/LeftPanel/LeftPanel.tsx b/app/cdap/components/hydrator/components/LeftPanel/LeftPanel.tsx index 22acca62c99..680190d251f 100644 --- a/app/cdap/components/hydrator/components/LeftPanel/LeftPanel.tsx +++ b/app/cdap/components/hydrator/components/LeftPanel/LeftPanel.tsx @@ -24,6 +24,7 @@ import { Button } from '@material-ui/core'; import styled from 'styled-components'; import AvailablePluginsStore from 'services/AvailablePluginsStore'; import { useOnUnmount } from 'services/react/customHooks/useOnUnmount'; +import StudioV2Store from 'components/StudioV2/store'; interface ILeftPanelProps { onArtifactChange: (value: any) => void; @@ -34,10 +35,10 @@ interface ILeftPanelProps { groups: any[]; groupGenericName: string; onPanelItemClick: (event: any, plugin: any) => void; - toggleSideBar: () => void; - isSideBarExpanded: boolean; isEdit: boolean; + isV2?: boolean; createPluginTemplate: (node: any, mode: 'edit' | 'create') => void; + toggleExpanded?(): void; } const StyledSelect = styled(Select)` @@ -57,14 +58,24 @@ export const LeftPanel = ({ onPanelItemClick, isEdit, createPluginTemplate, + isV2, + toggleExpanded, }: ILeftPanelProps) => { // angular has this saved in local storage - is this necessary? + const AvlPluginStore = isV2 ? StudioV2Store : AvailablePluginsStore; + let initialAvlPluginsState = AvlPluginStore.getState(); + initialAvlPluginsState = isV2 + ? { plugins: initialAvlPluginsState.availablePlugins } + : initialAvlPluginsState; + const [isExpanded, setIsExpanded] = useState(true); - const [availablePlugins, setAvailablePlugins] = useState(AvailablePluginsStore.getState()); + const [availablePlugins, setAvailablePlugins] = useState(initialAvlPluginsState); + let unsub; useEffect(() => { - unsub = AvailablePluginsStore.subscribe(() => { - const avp = AvailablePluginsStore.getState(); + unsub = AvlPluginStore.subscribe(() => { + let avp = AvlPluginStore.getState(); + avp = isV2 ? { plugins: avp.availablePlugins } : avp; if (avp.plugins) { setAvailablePlugins(avp); } @@ -75,6 +86,13 @@ export const LeftPanel = ({ unsub(); }); + function handleWidthToggle() { + setIsExpanded((x) => !x); + if (typeof toggleExpanded === 'function') { + toggleExpanded(); + } + } + return (
@@ -101,7 +119,7 @@ export const LeftPanel = ({ })}
@@ -408,12 +409,36 @@ class CDAP extends Component { CDAP.propTypes = { children: PropTypes.node, + showFooter: PropTypes.bool, }; +CDAP.defaultProps = { + showFooter: true, +}; + +function CdapWithFooterContext() { + const [show, setShow] = useState(true); + + useEffect(() => { + const appContainer = document.getElementById('app-container'); + if (!show) { + appContainer.classList.add('no-footer'); + } else { + appContainer.classList.remove('no-footer'); + } + }, [show]); + + return ( + + + + ); +} + const RootComp = hot(() => { return ( - } /> + } /> ); }); diff --git a/app/cdap/text/text-en.yaml b/app/cdap/text/text-en.yaml index ba117d14ae1..16f3a0800c9 100644 --- a/app/cdap/text/text-en.yaml +++ b/app/cdap/text/text-en.yaml @@ -3307,6 +3307,15 @@ features: StatusAlertMessage: message: 'Services are back online' + + Studio: + modals: + unsavedPipelineConfirmation: + text: "Do you wish to save your work before navigating away?" + dontSaveButton: "Don't save" + cancelButton: Cancel + saveButton: Save + Tags: allTags: All Tags labelWithCount: Tags ({count}) diff --git a/app/cdap/utils/time.ts b/app/cdap/utils/time.ts new file mode 100644 index 00000000000..80b7c8165a7 --- /dev/null +++ b/app/cdap/utils/time.ts @@ -0,0 +1,19 @@ +/* + * Copyright © 2024 Cask Data, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +export function sleep(durationInMs: number): Promise { + return new Promise((resolve) => setTimeout(resolve, durationInMs)); +} diff --git a/app/directives/dag-plus/my-dag-ctrl.js b/app/directives/dag-plus/my-dag-ctrl.js index 2ebb85583e2..a44f25639d5 100644 --- a/app/directives/dag-plus/my-dag-ctrl.js +++ b/app/directives/dag-plus/my-dag-ctrl.js @@ -1343,6 +1343,7 @@ angular.module(PKG.name + '.commons') }; vm.onNodeClick = function(event, node) { + console.log("PROPERTIES CLICKED"); vm.resetActivePluginForComment(); closeMetricsPopover(node); @@ -1810,7 +1811,7 @@ angular.module(PKG.name + '.commons') vm.initPipelineComments(); $scope.$watch('runId', function() { - // Watch for runId change to update pipeline graph with + // Watch for runId change to update pipeline graph with // corresponding version if ($scope.runId) { // prevent duplicated rendering on first time page landing diff --git a/app/directives/dag-plus/my-dag-tmp.html b/app/directives/dag-plus/my-dag-tmp.html new file mode 100644 index 00000000000..fb3cce7088a --- /dev/null +++ b/app/directives/dag-plus/my-dag-tmp.html @@ -0,0 +1,384 @@ + + + + +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + {{node.errorCount}} + +
+
+
+
+ +
+ +
+ + + +
+ +
+ + +
+
+
+ Alert +
+
+
+
+
+
+
+
+ Error +
+
+
+ + +
+
+
+ + +
+
+ +
+
+
+
+ + +
+
+
+ + diff --git a/app/hydrator/controllers/create/leftpanel-ctrl.js b/app/hydrator/controllers/create/leftpanel-ctrl.js index 0eaabcdb153..c834deb0524 100644 --- a/app/hydrator/controllers/create/leftpanel-ctrl.js +++ b/app/hydrator/controllers/create/leftpanel-ctrl.js @@ -15,16 +15,47 @@ */ class HydratorPlusPlusLeftPanelCtrl { - constructor($rootScope, HydratorPlusPlusLeftPanelStore, $scope, $stateParams, rVersion, HydratorPlusPlusConfigStore, HydratorPlusPlusPluginActions, DAGPlusPlusFactory, DAGPlusPlusNodesActionsFactory, NonStorePipelineErrorFactory, $uibModal, myAlertOnValium, $state, $q, rArtifacts, PluginTemplatesDirActions, HydratorPlusPlusOrderingFactory, LEFTPANELSTORE_ACTIONS, myHelpers, $timeout, mySettings, PipelineAvailablePluginsActions, AvailablePluginsStore, AVAILABLE_PLUGINS_ACTIONS) { - this.$state = $state; + constructor( + $state, + $rootScope, + $scope, + $stateParams, + $uibModal, + $q, + $timeout, + + rArtifacts, + rVersion, + + HydratorPlusPlusLeftPanelStore, + LEFTPANELSTORE_ACTIONS, + PluginTemplatesDirActions, + ////////////// + HydratorPlusPlusConfigStore, + HydratorPlusPlusPluginActions, + ////////////// + AvailablePluginsStore, + PipelineAvailablePluginsActions, + AVAILABLE_PLUGINS_ACTIONS, + + DAGPlusPlusFactory, + DAGPlusPlusNodesActionsFactory, + NonStorePipelineErrorFactory, + HydratorPlusPlusOrderingFactory, + + myAlertOnValium, + myHelpers, + mySettings, + ){ + this.$state = $state; // equivalent of react-router history this.$scope = $scope; this.$stateParams = $stateParams; this.HydratorPlusPlusConfigStore = HydratorPlusPlusConfigStore; this.DAGPlusPlusFactory = DAGPlusPlusFactory; - this.DAGPlusPlusNodesActionsFactory = DAGPlusPlusNodesActionsFactory; - this.NonStorePipelineErrorFactory = NonStorePipelineErrorFactory; + this.hydratorNodeActions = DAGPlusPlusNodesActionsFactory; + this.NonStorePipelineErrorFactory = NonStorePipelineErrorFactory; // ignore: unused this.PluginTemplatesDirActions = PluginTemplatesDirActions; - this.rVersion = rVersion; + this.cdapVersion = rVersion.version; this.useRootScopeStore = false; if ($rootScope.stores) { this.leftpanelStore = $rootScope.stores; @@ -33,16 +64,18 @@ class HydratorPlusPlusLeftPanelCtrl { this.leftpanelStore = HydratorPlusPlusLeftPanelStore; } - this.myAlertOnValium = myAlertOnValium; - this.$q = $q; - this.HydratorPlusPlusOrderingFactory = HydratorPlusPlusOrderingFactory; + console.log("useRootScoprStore = ", this.useRootScopeStore); + + this.myAlertOnValium = myAlertOnValium; // ignore: unused + this.$q = $q; // use rx-js instead + this.HydratorPlusPlusOrderingFactory = HydratorPlusPlusOrderingFactory; // import individual functions from utils this.leftpanelActions = HydratorPlusPlusPluginActions; this.LEFTPANELSTORE_ACTIONS = LEFTPANELSTORE_ACTIONS; - this.myHelpers = myHelpers; + this.myHelpers = myHelpers; // only uses ObjectQuery, use _get instead this.mySettings = mySettings; - this.PipelineAvailablePluginsActions = PipelineAvailablePluginsActions; - this.AvailablePluginsStore = AvailablePluginsStore; - this.AVAILABLE_PLUGINS_ACTIONS = AVAILABLE_PLUGINS_ACTIONS; + this.PipelineAvailablePluginsActions = PipelineAvailablePluginsActions; // consolidate with left panel actions + this.AvailablePluginsStore = AvailablePluginsStore; // consolidate with left panel store + this.AVAILABLE_PLUGINS_ACTIONS = AVAILABLE_PLUGINS_ACTIONS; // consolidate with left panel actions this.pluginsMap = []; this.sourcesToVersionMap = {}; @@ -106,11 +139,11 @@ class HydratorPlusPlusLeftPanelCtrl { const defaultVersionMap = this.leftpanelStore.getState().plugins.pluginToVersionMap; this.mySettings.get('CURRENT_CDAP_VERSION') .then((defaultCDAPVersion) => { - if (this.rVersion.version !== defaultCDAPVersion) { + if (this.cdapVersion !== defaultCDAPVersion) { return this.mySettings .set('plugin-default-version', {}) .then(() => { - this.mySettings.set('CURRENT_CDAP_VERSION', this.rVersion.version); + this.mySettings.set('CURRENT_CDAP_VERSION', this.cdapVersion); }); } this.mySettings.set('plugin-default-version', defaultVersionMap); @@ -125,7 +158,7 @@ class HydratorPlusPlusLeftPanelCtrl { eventEmitter.on(globalEvents.ARTIFACTUPLOAD, this.leftPanelStoreFetchExtension); - this.$uibModal = $uibModal; + this.uiModalActions = $uibModal; this.$scope.$on('$destroy', () => { this.leftpanelStore.dispatch({ type: this.LEFTPANELSTORE_ACTIONS.RESET}); sub(); @@ -143,12 +176,12 @@ class HydratorPlusPlusLeftPanelCtrl { { namespace: this.$stateParams.namespace, pipelineType: this.selectedArtifact.name, - version: this.rVersion.version, + version: this.cdapVersion, scope: this.$scope } ); - - if (this.useRootScopeStore) { + + if (this.useRootScopeStore /* This is FALSE . IGNORE*/) { this.leftpanelActions.fetchDefaultVersion(); } else { this.leftpanelStore.dispatch( @@ -203,7 +236,7 @@ class HydratorPlusPlusLeftPanelCtrl { let goTonextStep = true; let isStoreDirty = this.HydratorPlusPlusConfigStore.getIsStateDirty(); if (isStoreDirty) { - return this.$uibModal.open({ + return this.uiModalActions.open({ templateUrl: '/assets/features/hydrator/templates/create/popovers/canvas-overwrite-confirmation.html', size: 'lg', backdrop: 'static', @@ -276,6 +309,7 @@ class HydratorPlusPlusLeftPanelCtrl { } } + // Ignore: NOT IN USE, use the above v2 instead onLeftSidePanelItemClicked(event, node) { event.stopPropagation(); if (node.action === 'createTemplate') { @@ -291,7 +325,7 @@ class HydratorPlusPlusLeftPanelCtrl { deletePluginTemplate(node) { let templateType = this.HydratorPlusPlusConfigStore.getArtifact().name; - this.$uibModal + this.uiModalActions .open({ templateUrl: '/assets/features/hydrator/templates/partial/plugin-delete-confirmation.html', size: 'lg', @@ -308,7 +342,7 @@ class HydratorPlusPlusLeftPanelCtrl { createPluginTemplate(node, mode) { let templateType = this.HydratorPlusPlusConfigStore.getArtifact().name; - this.$uibModal + this.uiModalActions .open({ templateUrl: '/assets/features/hydrator/templates/create/popovers/plugin-templates.html', size: 'lg', @@ -355,7 +389,7 @@ class HydratorPlusPlusLeftPanelCtrl { ); } - this.DAGPlusPlusNodesActionsFactory.resetSelectedNode(); + this.hydratorNodeActions.resetSelectedNode(); let name = item.name || item.pluginTemplate; const configProperties = {}; let configurationGroups; @@ -390,7 +424,7 @@ class HydratorPlusPlusLeftPanelCtrl { artifact: item.artifact, properties: item.properties, }, - icon: this.DAGPlusPlusFactory.getIcon(item.pluginName), + icon: this.DAGPlusPlusFactory.getIcon(item.pluginName), // use getPluginIcon from utils type: item.pluginType, outputSchema: item.outputSchema, inputSchema: item.inputSchema, @@ -416,7 +450,7 @@ class HydratorPlusPlusLeftPanelCtrl { filters: widgets && widgets.filters }; } - this.DAGPlusPlusNodesActionsFactory.addNode(config); + this.hydratorNodeActions.addNode(config); } } diff --git a/app/hydrator/services/create/stores/left-panel-store.js b/app/hydrator/services/create/stores/left-panel-store.js index 9ba316a3a3d..f39b95c8a4e 100644 --- a/app/hydrator/services/create/stores/left-panel-store.js +++ b/app/hydrator/services/create/stores/left-panel-store.js @@ -58,6 +58,7 @@ const getTemplatesWithAddedInfo = (templates = [], extension = '') => { }; const getPluginsWithAddedInfo = (plugins = [], pluginToArtifactArrayMap = {}, extension = '') => { + // if plugins.length === 0 or extension.length == 0 return plugins if ([plugins.length, extension.length].indexOf(0) !== -1) { return plugins; } diff --git a/app/hydrator/services/plugin-config-factory.js b/app/hydrator/services/plugin-config-factory.js index 59ce2660499..2c2c45e4967 100644 --- a/app/hydrator/services/plugin-config-factory.js +++ b/app/hydrator/services/plugin-config-factory.js @@ -72,6 +72,7 @@ class HydratorPlusPlusPluginConfigFactory { } generateNodeConfig(backendProperties, nodeConfig) { + console.log(nodeConfig); var specVersion = this.myHelpers.objectQuery(nodeConfig, 'metadata', 'spec-version') || '0.0'; switch (specVersion) { case '0.0': diff --git a/package.json b/package.json index ca8b7a40174..09f90c8ed44 100644 --- a/package.json +++ b/package.json @@ -52,14 +52,16 @@ "@babel/plugin-proposal-export-namespace-from": "7.7.4", "@babel/plugin-proposal-function-sent": "7.7.4", "@babel/plugin-proposal-json-strings": "7.7.4", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", "@babel/plugin-proposal-numeric-separator": "7.7.4", "@babel/plugin-proposal-object-rest-spread": "7.7.4", + "@babel/plugin-proposal-optional-chaining": "^7.21.0", "@babel/plugin-proposal-throw-expressions": "7.7.4", "@babel/plugin-syntax-dynamic-import": "7.7.4", "@babel/plugin-syntax-import-meta": "7.7.4", "@babel/plugin-transform-modules-commonjs": "7.7.4", - "@babel/preset-env": "7.7.4", - "@babel/preset-react": "7.7.4", + "@babel/preset-env": "^7.24.7", + "@babel/preset-react": "^7.24.7", "@babel/preset-typescript": "7.7.4", "@babel/runtime": "7.7.4", "@cypress/webpack-preprocessor": "5.4.11", @@ -85,7 +87,7 @@ "autoprefixer": "9.7.3", "babel-eslint": "7.2.3", "babel-jest": "26.6.1", - "babel-loader": "8.0.6", + "babel-loader": "8.2.5", "babel-plugin-lodash": "3.3.4", "babel-upgrade": "1.0.1", "case-sensitive-paths-webpack-plugin": "2.2.0", @@ -281,6 +283,7 @@ "react-timeago": "4.4.0", "react-transition-group": "4.3.0", "react-vis": "1.11.7", + "reactflow": "^11.11.4", "reactstrap": "8.4.0", "redux": "4.0.5", "redux-thunk": "2.3.0", @@ -304,7 +307,9 @@ "yml-loader": "2.1.0" }, "resolutions": { - "**/cypress": "5.6.0" + "**/cypress": "5.6.0", + "@reactflow/**/@types/d3": "7.4.0", + "@types/d3": "link:./node_modules/.cache/null" }, "engines": { "yarn": ">= 1.0.0" diff --git a/server/uiThemeWrapper.js b/server/uiThemeWrapper.js index b53464bcbe0..2e91bb511ab 100644 --- a/server/uiThemeWrapper.js +++ b/server/uiThemeWrapper.js @@ -25,7 +25,7 @@ const log = log4js.getLogger('default'); const uiThemePropertyName = 'ui.theme.file'; export function extractUIThemeWrapper(cdapConfig) { - const uiThemePath = cdapConfig[uiThemePropertyName]; + const uiThemePath = 'server/config/themes/light.json'; // cdapConfig[uiThemePropertyName]; return extractUITheme(cdapConfig, uiThemePath); } diff --git a/webpack.config.cdap.dev.js b/webpack.config.cdap.dev.js index cfc07ad73a6..114d466c441 100644 --- a/webpack.config.cdap.dev.js +++ b/webpack.config.cdap.dev.js @@ -69,7 +69,7 @@ const getWebpackDllPlugins = (mode) => { var plugins = [ new CleanWebpackPlugin(cleanOptions), new CaseSensitivePathsPlugin(), - ...getWebpackDllPlugins(mode), + //...getWebpackDllPlugins(mode), new LodashModuleReplacementPlugin({ shorthands: true, collections: true, diff --git a/webpack.config.cdap.js b/webpack.config.cdap.js index 65e75e5808b..4f1ce290f8b 100644 --- a/webpack.config.cdap.js +++ b/webpack.config.cdap.js @@ -70,7 +70,7 @@ const getWebpackDllPlugins = (mode) => { var plugins = [ new CleanWebpackPlugin(cleanOptions), new CaseSensitivePathsPlugin(), - ...getWebpackDllPlugins(mode), + //...getWebpackDllPlugins(mode), new LodashModuleReplacementPlugin({ shorthands: true, collections: true, @@ -171,6 +171,19 @@ var rules = [ exclude: loaderExclude, include: [path.join(__dirname, 'app'), path.join(__dirname, '.storybook')], }, + { + test: /node_modules[\/\\]@?reactflow[\/\\].*.js$/, + use: { + loader: 'babel-loader', + options: { + presets: ['@babel/preset-env', "@babel/preset-react"], + plugins: [ + "@babel/plugin-proposal-optional-chaining", + "@babel/plugin-proposal-nullish-coalescing-operator", + ] + } + } + }, { test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, use: [ diff --git a/yarn.lock b/yarn.lock index 22b89ccb901..00f852e217e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -145,6 +145,14 @@ dependencies: "@babel/highlight" "^7.14.5" +"@babel/code-frame@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== + dependencies: + "@babel/highlight" "^7.24.7" + picocolors "^1.0.0" + "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.15.0": version "7.15.0" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" @@ -155,6 +163,11 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.8.tgz#5b783b9808f15cef71547f1b691f34f8ff6003a6" integrity sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.24.8": + version "7.24.9" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.9.tgz#53eee4e68f1c1d0282aa0eb05ddb02d033fc43a0" + integrity sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng== + "@babel/core@7.12.9": version "7.12.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" @@ -267,6 +280,16 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.24.8": + version "7.24.10" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.10.tgz#a4ab681ec2a78bbb9ba22a3941195e28a81d8e76" + integrity sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg== + dependencies: + "@babel/types" "^7.24.9" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.14.5", "@babel/helper-annotate-as-pure@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835" @@ -281,13 +304,12 @@ dependencies: "@babel/types" "^7.12.13" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" - integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== +"@babel/helper-annotate-as-pure@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" + integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== dependencies: - "@babel/helper-explode-assignable-expression" "^7.12.13" - "@babel/types" "^7.12.13" + "@babel/types" "^7.24.7" "@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": version "7.15.4" @@ -297,6 +319,14 @@ "@babel/helper-explode-assignable-expression" "^7.15.4" "@babel/types" "^7.15.4" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" + integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.8": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.8.tgz#02bdb22783439afb11b2f009814bdd88384bd468" @@ -317,6 +347,17 @@ browserslist "^4.16.6" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7", "@babel/helper-compilation-targets@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz#b607c3161cd9d1744977d4f97139572fe778c271" + integrity sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw== + dependencies: + "@babel/compat-data" "^7.24.8" + "@babel/helper-validator-option" "^7.24.8" + browserslist "^4.23.1" + lru-cache "^5.1.1" + semver "^6.3.1" + "@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.7.4": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.8.tgz#0367bd0a7505156ce018ca464f7ac91ba58c1a04" @@ -340,6 +381,21 @@ "@babel/helper-replace-supers" "^7.15.4" "@babel/helper-split-export-declaration" "^7.15.4" +"@babel/helper-create-class-features-plugin@^7.24.7": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.8.tgz#47f546408d13c200c0867f9d935184eaa0851b09" + integrity sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.24.8" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/helper-replace-supers" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" + semver "^6.3.1" + "@babel/helper-create-regexp-features-plugin@^7.12.13": version "7.12.17" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz#a2ac87e9e319269ac655b8d4415e94d38d663cb7" @@ -356,6 +412,15 @@ "@babel/helper-annotate-as-pure" "^7.14.5" regexpu-core "^4.7.1" +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz#be4f435a80dc2b053c76eeb4b7d16dd22cfc89da" + integrity sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + regexpu-core "^5.3.1" + semver "^6.3.1" + "@babel/helper-define-polyfill-provider@^0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz#3c2f91b7971b9fc11fe779c945c014065dea340e" @@ -384,12 +449,23 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-explode-assignable-expression@^7.12.13": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" - integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== +"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== dependencies: - "@babel/types" "^7.13.0" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-environment-visitor@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" + integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== + dependencies: + "@babel/types" "^7.24.7" "@babel/helper-explode-assignable-expression@^7.15.4": version "7.15.4" @@ -416,6 +492,14 @@ "@babel/template" "^7.15.4" "@babel/types" "^7.15.4" +"@babel/helper-function-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" + integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== + dependencies: + "@babel/template" "^7.24.7" + "@babel/types" "^7.24.7" + "@babel/helper-get-function-arity@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" @@ -430,14 +514,6 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-hoist-variables@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz#5d5882e855b5c5eda91e0cadc26c6e7a2c8593d8" - integrity sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g== - dependencies: - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - "@babel/helper-hoist-variables@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df" @@ -445,6 +521,13 @@ dependencies: "@babel/types" "^7.15.4" +"@babel/helper-hoist-variables@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" + integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== + dependencies: + "@babel/types" "^7.24.7" + "@babel/helper-member-expression-to-functions@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz#6aa4bb678e0f8c22f58cdb79451d30494461b091" @@ -459,7 +542,15 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.7.4": +"@babel/helper-member-expression-to-functions@^7.24.7", "@babel/helper-member-expression-to-functions@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz#6155e079c913357d24a4c20480db7c712a5c3fb6" + integrity sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA== + dependencies: + "@babel/traverse" "^7.24.8" + "@babel/types" "^7.24.8" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== @@ -473,6 +564,14 @@ dependencies: "@babel/types" "^7.15.4" +"@babel/helper-module-imports@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" + integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + "@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.4", "@babel/helper-module-transforms@^7.15.8": version "7.15.8" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz#d8c0e75a87a52e374a8f25f855174786a09498b2" @@ -502,6 +601,17 @@ "@babel/types" "^7.13.0" lodash "^4.17.19" +"@babel/helper-module-transforms@^7.24.7", "@babel/helper-module-transforms@^7.24.8": + version "7.24.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz#e13d26306b89eea569180868e652e7f514de9d29" + integrity sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw== + dependencies: + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" + "@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" @@ -516,6 +626,13 @@ dependencies: "@babel/types" "^7.15.4" +"@babel/helper-optimise-call-expression@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" + integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== + dependencies: + "@babel/types" "^7.24.7" + "@babel/helper-plugin-utils@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" @@ -531,14 +648,10 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== -"@babel/helper-remap-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" - integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-wrap-function" "^7.13.0" - "@babel/types" "^7.13.0" +"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz#94ee67e8ec0e5d44ea7baeb51e571bd26af07878" + integrity sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg== "@babel/helper-remap-async-to-generator@^7.14.5", "@babel/helper-remap-async-to-generator@^7.15.4": version "7.15.4" @@ -549,7 +662,16 @@ "@babel/helper-wrap-function" "^7.15.4" "@babel/types" "^7.15.4" -"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.0": +"@babel/helper-remap-async-to-generator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz#b3f0f203628522713849d49403f1a414468be4c7" + integrity sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-wrap-function" "^7.24.7" + +"@babel/helper-replace-supers@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz#6034b7b51943094cb41627848cb219cb02be1d24" integrity sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw== @@ -569,6 +691,15 @@ "@babel/traverse" "^7.15.4" "@babel/types" "^7.15.4" +"@babel/helper-replace-supers@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz#f933b7eed81a1c0265740edc91491ce51250f765" + integrity sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg== + dependencies: + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.24.7" + "@babel/helper-optimise-call-expression" "^7.24.7" + "@babel/helper-simple-access@^7.12.13", "@babel/helper-simple-access@^7.7.4": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" @@ -583,12 +714,13 @@ dependencies: "@babel/types" "^7.15.4" -"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" - integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== +"@babel/helper-simple-access@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" + integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== dependencies: - "@babel/types" "^7.12.1" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" "@babel/helper-skip-transparent-expression-wrappers@^7.14.5", "@babel/helper-skip-transparent-expression-wrappers@^7.15.4": version "7.15.4" @@ -597,6 +729,14 @@ dependencies: "@babel/types" "^7.15.4" +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" + integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== + dependencies: + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + "@babel/helper-split-export-declaration@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" @@ -611,6 +751,18 @@ dependencies: "@babel/types" "^7.15.4" +"@babel/helper-split-export-declaration@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" + integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-string-parser@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz#5b3329c9a58803d5df425e5785865881a81ca48d" + integrity sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ== + "@babel/helper-validator-identifier@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" @@ -626,6 +778,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== +"@babel/helper-validator-identifier@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" + integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== + "@babel/helper-validator-option@^7.12.17": version "7.12.17" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" @@ -636,15 +793,10 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== -"@babel/helper-wrap-function@^7.13.0", "@babel/helper-wrap-function@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" - integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" +"@babel/helper-validator-option@^7.24.7", "@babel/helper-validator-option@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz#3725cdeea8b480e86d34df15304806a06975e33d" + integrity sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q== "@babel/helper-wrap-function@^7.15.4": version "7.15.4" @@ -656,6 +808,26 @@ "@babel/traverse" "^7.15.4" "@babel/types" "^7.15.4" +"@babel/helper-wrap-function@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz#52d893af7e42edca7c6d2c6764549826336aae1f" + integrity sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw== + dependencies: + "@babel/helper-function-name" "^7.24.7" + "@babel/template" "^7.24.7" + "@babel/traverse" "^7.24.7" + "@babel/types" "^7.24.7" + +"@babel/helper-wrap-function@^7.7.4": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" + integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== + dependencies: + "@babel/helper-function-name" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + "@babel/helpers@^7.12.5", "@babel/helpers@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43" @@ -692,6 +864,16 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" + integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== + dependencies: + "@babel/helper-validator-identifier" "^7.24.7" + chalk "^2.4.2" + js-tokens "^4.0.0" + picocolors "^1.0.0" + "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.4", "@babel/parser@^7.7.4": version "7.13.9" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.9.tgz#ca34cb95e1c2dd126863a84465ae8ef66114be99" @@ -707,6 +889,26 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.5.tgz#d33a58ca69facc05b26adfe4abebfed56c1c2dac" integrity sha512-2hQstc6I7T6tQsWzlboMh3SgMRPaS4H6H7cPQsJkdzTzEGqQrpLDsE2BGASU5sBPoEQyHzeqU6C8uKbFeEk6sg== +"@babel/parser@^7.24.7", "@babel/parser@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.8.tgz#58a4dbbcad7eb1d48930524a3fd93d93e9084c6f" + integrity sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w== + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz#fd059fd27b184ea2b4c7e646868a9a381bbc3055" + integrity sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ== + dependencies: + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz#468096ca44bbcbe8fcc570574e12eb1950e18107" + integrity sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz#dbdeabb1e80f622d9f0b583efb2999605e0a567e" @@ -716,6 +918,23 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" "@babel/plugin-proposal-optional-chaining" "^7.14.5" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" + integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.7" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz#71b21bb0286d5810e63a1538aa901c58e87375ec" + integrity sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg== + dependencies: + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-proposal-async-generator-functions@^7.15.8": version "7.15.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz#a3100f785fab4357987c4223ab1b02b599048403" @@ -725,15 +944,6 @@ "@babel/helper-remap-async-to-generator" "^7.15.4" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-async-generator-functions@^7.7.4": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz#87aacb574b3bc4b5603f6fe41458d72a5a2ec4b1" - integrity sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-proposal-class-properties@7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.7.4.tgz#2f964f0cb18b948450362742e33e15211e77c2ba" @@ -785,14 +995,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-proposal-dynamic-import@^7.7.4": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz#876a1f6966e1dec332e8c9451afda3bebcdf2e1d" - integrity sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-export-default-from@^7.12.1": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.14.5.tgz#8931a6560632c650f92a8e5948f6e73019d6d321" @@ -842,14 +1044,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-proposal-json-strings@^7.7.4": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz#bf1fb362547075afda3634ed31571c5901afef7b" - integrity sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-proposal-logical-assignment-operators@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" @@ -866,6 +1060,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-proposal-numeric-separator@7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.7.4.tgz#7819a17445f4197bb9575e5750ed349776da858a" @@ -910,17 +1112,6 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-transform-parameters" "^7.15.4" -"@babel/plugin-proposal-object-rest-spread@^7.7.4": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz#5d210a4d727d6ce3b18f9de82cc99a3964eed60a" - integrity sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g== - dependencies: - "@babel/compat-data" "^7.13.8" - "@babel/helper-compilation-targets" "^7.13.8" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.13.0" - "@babel/plugin-proposal-optional-catch-binding@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" @@ -929,14 +1120,6 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-catch-binding@^7.7.4": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz#3ad6bd5901506ea996fc31bdcf3ccfa2bed71107" - integrity sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining@^7.12.7", "@babel/plugin-proposal-optional-chaining@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" @@ -946,6 +1129,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" +"@babel/plugin-proposal-optional-chaining@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-proposal-private-methods@^7.12.1", "@babel/plugin-proposal-private-methods@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" @@ -954,6 +1146,11 @@ "@babel/helper-create-class-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + "@babel/plugin-proposal-private-property-in-object@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz#55c5e3b4d0261fd44fe637e3f624cfb0f484e3e5" @@ -980,7 +1177,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.7.4": +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== @@ -988,7 +1185,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.12.13" "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-syntax-async-generators@^7.7.4", "@babel/plugin-syntax-async-generators@^7.8.4": +"@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== @@ -1037,7 +1234,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-dynamic-import@^7.7.4", "@babel/plugin-syntax-dynamic-import@^7.8.3": +"@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== @@ -1072,6 +1269,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" +"@babel/plugin-syntax-import-assertions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz#2a0b406b5871a20a841240586b1300ce2088a778" + integrity sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-syntax-import-attributes@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz#b4f9ea95a79e6912480c4b626739f86a076624ca" + integrity sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-import-meta@7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.7.4.tgz#3e9e4630780df5885b801f53c5f68d75e99e5261" @@ -1079,7 +1290,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-import-meta@^7.8.3": +"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== @@ -1100,13 +1311,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-jsx@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz#044fb81ebad6698fe62c478875575bcbb9b70f15" - integrity sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-jsx@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz#000e2e25d8673cce49300517a3eda44c263e4201" @@ -1114,6 +1318,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-syntax-jsx@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" + integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -1142,7 +1353,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-optional-catch-binding@^7.7.4", "@babel/plugin-syntax-optional-catch-binding@^7.8.3": +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== @@ -1177,7 +1388,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-top-level-await@^7.7.4", "@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-top-level-await@^7.8.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== @@ -1198,6 +1409,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-transform-arrow-functions@^7.12.1", "@babel/plugin-transform-arrow-functions@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" @@ -1205,12 +1424,22 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-arrow-functions@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" - integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== +"@babel/plugin-transform-arrow-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" + integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-async-generator-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz#7330a5c50e05181ca52351b8fd01642000c96cfd" + integrity sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g== + dependencies: + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-remap-async-to-generator" "^7.24.7" + "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-transform-async-to-generator@^7.14.5": version "7.14.5" @@ -1221,14 +1450,14 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-remap-async-to-generator" "^7.14.5" -"@babel/plugin-transform-async-to-generator@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" - integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== +"@babel/plugin-transform-async-to-generator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" + integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-remap-async-to-generator" "^7.24.7" "@babel/plugin-transform-block-scoped-functions@^7.14.5": version "7.14.5" @@ -1237,12 +1466,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-block-scoped-functions@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" - integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== +"@babel/plugin-transform-block-scoped-functions@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" + integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-block-scoping@^7.12.12", "@babel/plugin-transform-block-scoping@^7.15.3": version "7.15.3" @@ -1251,12 +1480,29 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-block-scoping@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz#f36e55076d06f41dfd78557ea039c1b581642e61" - integrity sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ== +"@babel/plugin-transform-block-scoping@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz#42063e4deb850c7bd7c55e626bf4e7ab48e6ce02" + integrity sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-class-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz#256879467b57b0b68c7ddfc5b76584f398cd6834" + integrity sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-class-static-block@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" + integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-transform-classes@^7.12.1", "@babel/plugin-transform-classes@^7.15.4": version "7.15.4" @@ -1271,17 +1517,18 @@ "@babel/helper-split-export-declaration" "^7.15.4" globals "^11.1.0" -"@babel/plugin-transform-classes@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz#0265155075c42918bf4d3a4053134176ad9b533b" - integrity sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-replace-supers" "^7.13.0" - "@babel/helper-split-export-declaration" "^7.12.13" +"@babel/plugin-transform-classes@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.8.tgz#ad23301fe5bc153ca4cf7fb572a9bc8b0b711cf7" + integrity sha512-VXy91c47uujj758ud9wx+OMgheXm4qJfyhj1P18YvlrQkNOSrwsteHk+EFS3OMGfhMhpZa0A+81eE7G4QC+3CA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-replace-supers" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.14.5": @@ -1291,12 +1538,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-computed-properties@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" - integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== +"@babel/plugin-transform-computed-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" + integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/template" "^7.24.7" "@babel/plugin-transform-destructuring@^7.12.1", "@babel/plugin-transform-destructuring@^7.14.7": version "7.14.7" @@ -1305,12 +1553,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-destructuring@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz#c5dce270014d4e1ebb1d806116694c12b7028963" - integrity sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA== +"@babel/plugin-transform-destructuring@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz#c828e814dbe42a2718a838c2a2e16a408e055550" + integrity sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-transform-dotall-regex@^7.14.5": version "7.14.5" @@ -1320,7 +1568,15 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.7.4": +"@babel/plugin-transform-dotall-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" + integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-dotall-regex@^7.4.4": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== @@ -1335,12 +1591,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-duplicate-keys@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" - integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== +"@babel/plugin-transform-duplicate-keys@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" + integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-dynamic-import@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" + integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-transform-exponentiation-operator@^7.14.5": version "7.14.5" @@ -1350,13 +1614,21 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-exponentiation-operator@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" - integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== +"@babel/plugin-transform-exponentiation-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" + integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-export-namespace-from@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" + integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-transform-flow-strip-types@^7.14.5": version "7.14.5" @@ -1373,12 +1645,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-for-of@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" - integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== +"@babel/plugin-transform-for-of@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" + integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-transform-function-name@^7.14.5": version "7.14.5" @@ -1388,13 +1661,22 @@ "@babel/helper-function-name" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-function-name@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" - integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== +"@babel/plugin-transform-function-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz#6d8601fbffe665c894440ab4470bc721dd9131d6" + integrity sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w== dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-json-strings@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" + integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-transform-literals@^7.14.5": version "7.14.5" @@ -1403,12 +1685,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-literals@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" - integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== +"@babel/plugin-transform-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz#36b505c1e655151a9d7607799a9988fc5467d06c" + integrity sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-logical-assignment-operators@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" + integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-transform-member-expression-literals@^7.14.5": version "7.14.5" @@ -1417,12 +1707,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-member-expression-literals@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" - integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== +"@babel/plugin-transform-member-expression-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" + integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-modules-amd@^7.14.5": version "7.14.5" @@ -1433,14 +1723,13 @@ "@babel/helper-plugin-utils" "^7.14.5" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-amd@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz#19f511d60e3d8753cc5a6d4e775d3a5184866cc3" - integrity sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ== +"@babel/plugin-transform-modules-amd@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" + integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-modules-commonjs@7.7.4": version "7.7.4" @@ -1462,15 +1751,14 @@ "@babel/helper-simple-access" "^7.15.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.7.4": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz#7b01ad7c2dcf2275b06fa1781e00d13d420b3e1b" - integrity sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw== +"@babel/plugin-transform-modules-commonjs@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz#ab6421e564b717cb475d6fff70ae7f103536ea3c" + integrity sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA== dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-simple-access" "^7.12.13" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-simple-access" "^7.24.7" "@babel/plugin-transform-modules-systemjs@^7.15.4": version "7.15.4" @@ -1483,16 +1771,15 @@ "@babel/helper-validator-identifier" "^7.14.9" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.7.4": - version "7.13.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" - integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== +"@babel/plugin-transform-modules-systemjs@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz#f8012316c5098f6e8dee6ecd58e2bc6f003d0ce7" + integrity sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw== dependencies: - "@babel/helper-hoist-variables" "^7.13.0" - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-identifier" "^7.12.11" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-hoist-variables" "^7.24.7" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-identifier" "^7.24.7" "@babel/plugin-transform-modules-umd@^7.14.5": version "7.14.5" @@ -1502,13 +1789,13 @@ "@babel/helper-module-transforms" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-modules-umd@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz#8a3d96a97d199705b9fd021580082af81c06e70b" - integrity sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw== +"@babel/plugin-transform-modules-umd@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" + integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== dependencies: - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-module-transforms" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-named-capturing-groups-regex@^7.14.9": version "7.14.9" @@ -1517,12 +1804,13 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.14.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" - integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" + integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-new-target@^7.14.5": version "7.14.5" @@ -1531,12 +1819,38 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-new-target@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" - integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== +"@babel/plugin-transform-new-target@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" + integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" + integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-transform-numeric-separator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" + integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-transform-object-rest-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" + integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== + dependencies: + "@babel/helper-compilation-targets" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.24.7" "@babel/plugin-transform-object-super@^7.14.5": version "7.14.5" @@ -1546,13 +1860,30 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-replace-supers" "^7.14.5" -"@babel/plugin-transform-object-super@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" - integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== +"@babel/plugin-transform-object-super@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" + integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-replace-supers" "^7.24.7" + +"@babel/plugin-transform-optional-catch-binding@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" + integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.24.7", "@babel/plugin-transform-optional-chaining@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz#bb02a67b60ff0406085c13d104c99a835cdf365d" + integrity sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.15.4": version "7.15.4" @@ -1561,12 +1892,30 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-parameters@^7.13.0", "@babel/plugin-transform-parameters@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz#8fa7603e3097f9c0b7ca1a4821bc2fb52e9e5007" - integrity sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw== +"@babel/plugin-transform-parameters@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" + integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-private-methods@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz#e6318746b2ae70a59d023d5cc1344a2ba7a75f5e" + integrity sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-private-property-in-object@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" + integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-transform-property-literals@^7.14.5": version "7.14.5" @@ -1575,12 +1924,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" - integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== +"@babel/plugin-transform-property-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" + integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-react-display-name@^7.14.5": version "7.15.1" @@ -1589,12 +1938,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-react-display-name@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz#c28effd771b276f4647411c9733dbb2d2da954bd" - integrity sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA== +"@babel/plugin-transform-react-display-name@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz#9caff79836803bc666bcfe210aeb6626230c293b" + integrity sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-react-jsx-development@^7.14.5": version "7.14.5" @@ -1603,19 +1952,12 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.14.5" -"@babel/plugin-transform-react-jsx-self@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.13.tgz#422d99d122d592acab9c35ea22a6cfd9bf189f60" - integrity sha512-FXYw98TTJ125GVCCkFLZXlZ1qGcsYqNQhVBQcZjyrwf8FEUtVfKIoidnO8S0q+KBQpDYNTmiGo1gn67Vti04lQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-react-jsx-source@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.13.tgz#051d76126bee5c9a6aa3ba37be2f6c1698856bcb" - integrity sha512-O5JJi6fyfih0WfDgIJXksSPhGP/G0fQpfxYy87sDc+1sFmsCS6wr3aAn+whbzkhbjtq4VMqLRaSzR6IsshIC0Q== +"@babel/plugin-transform-react-jsx-development@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz#eaee12f15a93f6496d852509a850085e6361470b" + integrity sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/plugin-transform-react-jsx" "^7.24.7" "@babel/plugin-transform-react-jsx@^7.12.12", "@babel/plugin-transform-react-jsx@^7.14.5": version "7.14.9" @@ -1628,16 +1970,16 @@ "@babel/plugin-syntax-jsx" "^7.14.5" "@babel/types" "^7.14.9" -"@babel/plugin-transform-react-jsx@^7.7.4": - version "7.12.17" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.17.tgz#dd2c1299f5e26de584939892de3cfc1807a38f24" - integrity sha512-mwaVNcXV+l6qJOuRhpdTEj8sT/Z0owAVWf9QujTZ0d2ye9X/K+MTOTSizcgKOj18PGnTc/7g1I4+cIUjsKhBcw== +"@babel/plugin-transform-react-jsx@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz#17cd06b75a9f0e2bd076503400e7c4b99beedac4" + integrity sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA== dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/plugin-syntax-jsx" "^7.12.13" - "@babel/types" "^7.12.17" + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-module-imports" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-syntax-jsx" "^7.24.7" + "@babel/types" "^7.24.7" "@babel/plugin-transform-react-pure-annotations@^7.14.5": version "7.14.5" @@ -1647,6 +1989,14 @@ "@babel/helper-annotate-as-pure" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-react-pure-annotations@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz#bdd9d140d1c318b4f28b29a00fb94f97ecab1595" + integrity sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-transform-regenerator@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" @@ -1654,12 +2004,13 @@ dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-regenerator@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz#b628bcc9c85260ac1aeb05b45bde25210194a2f5" - integrity sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA== +"@babel/plugin-transform-regenerator@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" + integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== dependencies: - regenerator-transform "^0.14.2" + "@babel/helper-plugin-utils" "^7.24.7" + regenerator-transform "^0.15.2" "@babel/plugin-transform-reserved-words@^7.14.5": version "7.14.5" @@ -1668,12 +2019,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-reserved-words@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" - integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== +"@babel/plugin-transform-reserved-words@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" + integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-shorthand-properties@^7.12.1", "@babel/plugin-transform-shorthand-properties@^7.14.5": version "7.14.5" @@ -1682,12 +2033,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-shorthand-properties@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" - integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== +"@babel/plugin-transform-shorthand-properties@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" + integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-spread@^7.12.1", "@babel/plugin-transform-spread@^7.15.8": version "7.15.8" @@ -1697,13 +2048,13 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.15.4" -"@babel/plugin-transform-spread@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" - integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== +"@babel/plugin-transform-spread@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" + integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" "@babel/plugin-transform-sticky-regex@^7.14.5": version "7.14.5" @@ -1712,12 +2063,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-sticky-regex@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" - integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== +"@babel/plugin-transform-sticky-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" + integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-template-literals@^7.12.1", "@babel/plugin-transform-template-literals@^7.14.5": version "7.14.5" @@ -1726,12 +2077,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-template-literals@^7.7.4": - version "7.13.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" - integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== +"@babel/plugin-transform-template-literals@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" + integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== dependencies: - "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/plugin-transform-typeof-symbol@^7.14.5": version "7.14.5" @@ -1740,12 +2091,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-typeof-symbol@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" - integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== +"@babel/plugin-transform-typeof-symbol@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz#383dab37fb073f5bfe6e60c654caac309f92ba1c" + integrity sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw== dependencies: - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-plugin-utils" "^7.24.8" "@babel/plugin-transform-typescript@^7.15.0": version "7.15.8" @@ -1772,6 +2123,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" +"@babel/plugin-transform-unicode-escapes@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" + integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-unicode-property-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" + integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/plugin-transform-unicode-regex@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" @@ -1780,13 +2146,21 @@ "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-unicode-regex@^7.7.4": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" - integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== +"@babel/plugin-transform-unicode-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" + integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" + +"@babel/plugin-transform-unicode-sets-regex@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz#d40705d67523803a576e29c63cef6e516b858ed9" + integrity sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.24.7" + "@babel/helper-plugin-utils" "^7.24.7" "@babel/polyfill@7.0.0": version "7.0.0" @@ -1804,63 +2178,6 @@ core-js "^2.6.5" regenerator-runtime "^0.13.4" -"@babel/preset-env@7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.4.tgz#ccaf309ae8d1ee2409c85a4e2b5e280ceee830f8" - integrity sha512-Dg+ciGJjwvC1NIe/DGblMbcGq1HOtKbw8RLl4nIjlfcILKEOkWT/vRqPpumswABEBVudii6dnVwrBtzD7ibm4g== - dependencies: - "@babel/helper-module-imports" "^7.7.4" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.7.4" - "@babel/plugin-proposal-dynamic-import" "^7.7.4" - "@babel/plugin-proposal-json-strings" "^7.7.4" - "@babel/plugin-proposal-object-rest-spread" "^7.7.4" - "@babel/plugin-proposal-optional-catch-binding" "^7.7.4" - "@babel/plugin-proposal-unicode-property-regex" "^7.7.4" - "@babel/plugin-syntax-async-generators" "^7.7.4" - "@babel/plugin-syntax-dynamic-import" "^7.7.4" - "@babel/plugin-syntax-json-strings" "^7.7.4" - "@babel/plugin-syntax-object-rest-spread" "^7.7.4" - "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" - "@babel/plugin-syntax-top-level-await" "^7.7.4" - "@babel/plugin-transform-arrow-functions" "^7.7.4" - "@babel/plugin-transform-async-to-generator" "^7.7.4" - "@babel/plugin-transform-block-scoped-functions" "^7.7.4" - "@babel/plugin-transform-block-scoping" "^7.7.4" - "@babel/plugin-transform-classes" "^7.7.4" - "@babel/plugin-transform-computed-properties" "^7.7.4" - "@babel/plugin-transform-destructuring" "^7.7.4" - "@babel/plugin-transform-dotall-regex" "^7.7.4" - "@babel/plugin-transform-duplicate-keys" "^7.7.4" - "@babel/plugin-transform-exponentiation-operator" "^7.7.4" - "@babel/plugin-transform-for-of" "^7.7.4" - "@babel/plugin-transform-function-name" "^7.7.4" - "@babel/plugin-transform-literals" "^7.7.4" - "@babel/plugin-transform-member-expression-literals" "^7.7.4" - "@babel/plugin-transform-modules-amd" "^7.7.4" - "@babel/plugin-transform-modules-commonjs" "^7.7.4" - "@babel/plugin-transform-modules-systemjs" "^7.7.4" - "@babel/plugin-transform-modules-umd" "^7.7.4" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4" - "@babel/plugin-transform-new-target" "^7.7.4" - "@babel/plugin-transform-object-super" "^7.7.4" - "@babel/plugin-transform-parameters" "^7.7.4" - "@babel/plugin-transform-property-literals" "^7.7.4" - "@babel/plugin-transform-regenerator" "^7.7.4" - "@babel/plugin-transform-reserved-words" "^7.7.4" - "@babel/plugin-transform-shorthand-properties" "^7.7.4" - "@babel/plugin-transform-spread" "^7.7.4" - "@babel/plugin-transform-sticky-regex" "^7.7.4" - "@babel/plugin-transform-template-literals" "^7.7.4" - "@babel/plugin-transform-typeof-symbol" "^7.7.4" - "@babel/plugin-transform-unicode-regex" "^7.7.4" - "@babel/types" "^7.7.4" - browserslist "^4.6.0" - core-js-compat "^3.1.1" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.5.0" - "@babel/preset-env@^7.12.11": version "7.15.8" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.15.8.tgz#f527ce5bcb121cd199f6b502bf23e420b3ff8dba" @@ -1940,6 +2257,93 @@ core-js-compat "^3.16.0" semver "^6.3.0" +"@babel/preset-env@^7.24.7": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.8.tgz#e0db94d7f17d6f0e2564e8d29190bc8cdacec2d1" + integrity sha512-vObvMZB6hNWuDxhSaEPTKCwcqkAIuDtE+bQGn4XMXne1DSLzFVY8Vmj1bm+mUQXYNN8NmaQEO+r8MMbzPr1jBQ== + dependencies: + "@babel/compat-data" "^7.24.8" + "@babel/helper-compilation-targets" "^7.24.8" + "@babel/helper-plugin-utils" "^7.24.8" + "@babel/helper-validator-option" "^7.24.8" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.7" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.24.7" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.24.7" + "@babel/plugin-transform-async-generator-functions" "^7.24.7" + "@babel/plugin-transform-async-to-generator" "^7.24.7" + "@babel/plugin-transform-block-scoped-functions" "^7.24.7" + "@babel/plugin-transform-block-scoping" "^7.24.7" + "@babel/plugin-transform-class-properties" "^7.24.7" + "@babel/plugin-transform-class-static-block" "^7.24.7" + "@babel/plugin-transform-classes" "^7.24.8" + "@babel/plugin-transform-computed-properties" "^7.24.7" + "@babel/plugin-transform-destructuring" "^7.24.8" + "@babel/plugin-transform-dotall-regex" "^7.24.7" + "@babel/plugin-transform-duplicate-keys" "^7.24.7" + "@babel/plugin-transform-dynamic-import" "^7.24.7" + "@babel/plugin-transform-exponentiation-operator" "^7.24.7" + "@babel/plugin-transform-export-namespace-from" "^7.24.7" + "@babel/plugin-transform-for-of" "^7.24.7" + "@babel/plugin-transform-function-name" "^7.24.7" + "@babel/plugin-transform-json-strings" "^7.24.7" + "@babel/plugin-transform-literals" "^7.24.7" + "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" + "@babel/plugin-transform-member-expression-literals" "^7.24.7" + "@babel/plugin-transform-modules-amd" "^7.24.7" + "@babel/plugin-transform-modules-commonjs" "^7.24.8" + "@babel/plugin-transform-modules-systemjs" "^7.24.7" + "@babel/plugin-transform-modules-umd" "^7.24.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" + "@babel/plugin-transform-new-target" "^7.24.7" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" + "@babel/plugin-transform-numeric-separator" "^7.24.7" + "@babel/plugin-transform-object-rest-spread" "^7.24.7" + "@babel/plugin-transform-object-super" "^7.24.7" + "@babel/plugin-transform-optional-catch-binding" "^7.24.7" + "@babel/plugin-transform-optional-chaining" "^7.24.8" + "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/plugin-transform-private-methods" "^7.24.7" + "@babel/plugin-transform-private-property-in-object" "^7.24.7" + "@babel/plugin-transform-property-literals" "^7.24.7" + "@babel/plugin-transform-regenerator" "^7.24.7" + "@babel/plugin-transform-reserved-words" "^7.24.7" + "@babel/plugin-transform-shorthand-properties" "^7.24.7" + "@babel/plugin-transform-spread" "^7.24.7" + "@babel/plugin-transform-sticky-regex" "^7.24.7" + "@babel/plugin-transform-template-literals" "^7.24.7" + "@babel/plugin-transform-typeof-symbol" "^7.24.8" + "@babel/plugin-transform-unicode-escapes" "^7.24.7" + "@babel/plugin-transform-unicode-property-regex" "^7.24.7" + "@babel/plugin-transform-unicode-regex" "^7.24.7" + "@babel/plugin-transform-unicode-sets-regex" "^7.24.7" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.4" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.37.1" + semver "^6.3.1" + "@babel/preset-flow@^7.12.1": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.14.5.tgz#a1810b0780c8b48ab0bece8e7ab8d0d37712751c" @@ -1949,6 +2353,15 @@ "@babel/helper-validator-option" "^7.14.5" "@babel/plugin-transform-flow-strip-types" "^7.14.5" +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + "@babel/preset-modules@^0.1.4": version "0.1.4" resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" @@ -1960,17 +2373,6 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@7.7.4": - version "7.7.4" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.7.4.tgz#3fe2ea698d8fb536d8e7881a592c3c1ee8bf5707" - integrity sha512-j+vZtg0/8pQr1H8wKoaJyGL2IEk3rG/GIvua7Sec7meXVIvGycihlGMx5xcU00kqCJbwzHs18xTu3YfREOqQ+g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-transform-react-display-name" "^7.7.4" - "@babel/plugin-transform-react-jsx" "^7.7.4" - "@babel/plugin-transform-react-jsx-self" "^7.7.4" - "@babel/plugin-transform-react-jsx-source" "^7.7.4" - "@babel/preset-react@^7.12.10": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz#0fbb769513f899c2c56f3a882fa79673c2d4ab3c" @@ -1983,6 +2385,18 @@ "@babel/plugin-transform-react-jsx-development" "^7.14.5" "@babel/plugin-transform-react-pure-annotations" "^7.14.5" +"@babel/preset-react@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.24.7.tgz#480aeb389b2a798880bf1f889199e3641cbb22dc" + integrity sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag== + dependencies: + "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-validator-option" "^7.24.7" + "@babel/plugin-transform-react-display-name" "^7.24.7" + "@babel/plugin-transform-react-jsx" "^7.24.7" + "@babel/plugin-transform-react-jsx-development" "^7.24.7" + "@babel/plugin-transform-react-pure-annotations" "^7.24.7" + "@babel/preset-typescript@7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.7.4.tgz#780059a78e6fa7f7a4c87f027292a86b31ce080a" @@ -2011,6 +2425,11 @@ pirates "^4.0.0" source-map-support "^0.5.16" +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + "@babel/runtime-corejs3@^7.10.2": version "7.13.9" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.13.9.tgz#b2fa9a6e5690ef8d4c4f2d30cac3ec1a8bb633ce" @@ -2063,6 +2482,15 @@ "@babel/parser" "^7.15.4" "@babel/types" "^7.15.4" +"@babel/template@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315" + integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/parser" "^7.24.7" + "@babel/types" "^7.24.7" + "@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.7.4": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" @@ -2093,7 +2521,23 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.17", "@babel/types@^7.13.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.4": +"@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8": + version "7.24.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.8.tgz#6c14ed5232b7549df3371d820fbd9abfcd7dfab7" + integrity sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ== + dependencies: + "@babel/code-frame" "^7.24.7" + "@babel/generator" "^7.24.8" + "@babel/helper-environment-visitor" "^7.24.7" + "@babel/helper-function-name" "^7.24.7" + "@babel/helper-hoist-variables" "^7.24.7" + "@babel/helper-split-export-declaration" "^7.24.7" + "@babel/parser" "^7.24.8" + "@babel/types" "^7.24.8" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.7.4": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80" integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA== @@ -2118,6 +2562,15 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" +"@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.24.9": + version "7.24.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.9.tgz#228ce953d7b0d16646e755acf204f4cf3d08cc73" + integrity sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ== + dependencies: + "@babel/helper-string-parser" "^7.24.8" + "@babel/helper-validator-identifier" "^7.24.7" + to-fast-properties "^2.0.0" + "@base2/pretty-print-object@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.0.tgz#860ce718b0b73f4009e153541faff2cb6b85d047" @@ -2708,6 +3161,38 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + "@material-ui/core@^4.12.3": version "4.12.3" resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.12.3.tgz#80d665caf0f1f034e52355c5450c0e38b099d3ca" @@ -2964,6 +3449,72 @@ prop-types "^15.6.1" react-lifecycles-compat "^3.0.4" +"@reactflow/background@11.3.14": + version "11.3.14" + resolved "https://registry.yarnpkg.com/@reactflow/background/-/background-11.3.14.tgz#778ca30174f3de77fc321459ab3789e66e71a699" + integrity sha512-Gewd7blEVT5Lh6jqrvOgd4G6Qk17eGKQfsDXgyRSqM+CTwDqRldG2LsWN4sNeno6sbqVIC2fZ+rAUBFA9ZEUDA== + dependencies: + "@reactflow/core" "11.11.4" + classcat "^5.0.3" + zustand "^4.4.1" + +"@reactflow/controls@11.2.14": + version "11.2.14" + resolved "https://registry.yarnpkg.com/@reactflow/controls/-/controls-11.2.14.tgz#508ed2c40d23341b3b0919dd11e76fd49cf850c7" + integrity sha512-MiJp5VldFD7FrqaBNIrQ85dxChrG6ivuZ+dcFhPQUwOK3HfYgX2RHdBua+gx+40p5Vw5It3dVNp/my4Z3jF0dw== + dependencies: + "@reactflow/core" "11.11.4" + classcat "^5.0.3" + zustand "^4.4.1" + +"@reactflow/core@11.11.4": + version "11.11.4" + resolved "https://registry.yarnpkg.com/@reactflow/core/-/core-11.11.4.tgz#89bd86d1862aa1416f3f49926cede7e8c2aab6a7" + integrity sha512-H4vODklsjAq3AMq6Np4LE12i1I4Ta9PrDHuBR9GmL8uzTt2l2jh4CiQbEMpvMDcp7xi4be0hgXj+Ysodde/i7Q== + dependencies: + "@types/d3" "^7.4.0" + "@types/d3-drag" "^3.0.1" + "@types/d3-selection" "^3.0.3" + "@types/d3-zoom" "^3.0.1" + classcat "^5.0.3" + d3-drag "^3.0.0" + d3-selection "^3.0.0" + d3-zoom "^3.0.0" + zustand "^4.4.1" + +"@reactflow/minimap@11.7.14": + version "11.7.14" + resolved "https://registry.yarnpkg.com/@reactflow/minimap/-/minimap-11.7.14.tgz#298d7a63cb1da06b2518c99744f716560c88ca73" + integrity sha512-mpwLKKrEAofgFJdkhwR5UQ1JYWlcAAL/ZU/bctBkuNTT1yqV+y0buoNVImsRehVYhJwffSWeSHaBR5/GJjlCSQ== + dependencies: + "@reactflow/core" "11.11.4" + "@types/d3-selection" "^3.0.3" + "@types/d3-zoom" "^3.0.1" + classcat "^5.0.3" + d3-selection "^3.0.0" + d3-zoom "^3.0.0" + zustand "^4.4.1" + +"@reactflow/node-resizer@2.2.14": + version "2.2.14" + resolved "https://registry.yarnpkg.com/@reactflow/node-resizer/-/node-resizer-2.2.14.tgz#1810c0ce51aeb936f179466a6660d1e02c7a77a8" + integrity sha512-fwqnks83jUlYr6OHcdFEedumWKChTHRGw/kbCxj0oqBd+ekfs+SIp4ddyNU0pdx96JIm5iNFS0oNrmEiJbbSaA== + dependencies: + "@reactflow/core" "11.11.4" + classcat "^5.0.4" + d3-drag "^3.0.0" + d3-selection "^3.0.0" + zustand "^4.4.1" + +"@reactflow/node-toolbar@1.3.14": + version "1.3.14" + resolved "https://registry.yarnpkg.com/@reactflow/node-toolbar/-/node-toolbar-1.3.14.tgz#c6ffc76f82acacdce654f2160dc9852162d6e7c9" + integrity sha512-rbynXQnH/xFNu4P9H+hVqlEUafDCkEoCy0Dg9mG22Sg+rY/0ck6KkrAQrYrTgXusd+cEJOMK0uOOFCK2/5rSGQ== + dependencies: + "@reactflow/core" "11.11.4" + classcat "^5.0.3" + zustand "^4.4.1" + "@reduxjs/toolkit@^1.7.1": version "1.7.1" resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.7.1.tgz#994962aeb7df3c77be343dd2ad1aa48221dbaa0c" @@ -4096,6 +4647,224 @@ resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.10.tgz#61cc8469849e5bcdd0c7044122265c39cec10cf4" integrity sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ== +"@types/d3-array@*": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@types/d3-array/-/d3-array-3.2.1.tgz#1f6658e3d2006c4fceac53fde464166859f8b8c5" + integrity sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg== + +"@types/d3-axis@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-axis/-/d3-axis-3.0.6.tgz#e760e5765b8188b1defa32bc8bb6062f81e4c795" + integrity sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-brush@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-brush/-/d3-brush-3.0.6.tgz#c2f4362b045d472e1b186cdbec329ba52bdaee6c" + integrity sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-chord@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-chord/-/d3-chord-3.0.6.tgz#1706ca40cf7ea59a0add8f4456efff8f8775793d" + integrity sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg== + +"@types/d3-color@*": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@types/d3-color/-/d3-color-3.1.3.tgz#368c961a18de721da8200e80bf3943fb53136af2" + integrity sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A== + +"@types/d3-contour@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-contour/-/d3-contour-3.0.6.tgz#9ada3fa9c4d00e3a5093fed0356c7ab929604231" + integrity sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg== + dependencies: + "@types/d3-array" "*" + "@types/geojson" "*" + +"@types/d3-delaunay@*": + version "6.0.4" + resolved "https://registry.yarnpkg.com/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz#185c1a80cc807fdda2a3fe960f7c11c4a27952e1" + integrity sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw== + +"@types/d3-dispatch@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz#096efdf55eb97480e3f5621ff9a8da552f0961e7" + integrity sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ== + +"@types/d3-drag@*", "@types/d3-drag@^3.0.1": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@types/d3-drag/-/d3-drag-3.0.7.tgz#b13aba8b2442b4068c9a9e6d1d82f8bcea77fc02" + integrity sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-dsv@*": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@types/d3-dsv/-/d3-dsv-3.0.7.tgz#0a351f996dc99b37f4fa58b492c2d1c04e3dac17" + integrity sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g== + +"@types/d3-ease@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/d3-ease/-/d3-ease-3.0.2.tgz#e28db1bfbfa617076f7770dd1d9a48eaa3b6c51b" + integrity sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA== + +"@types/d3-fetch@*": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@types/d3-fetch/-/d3-fetch-3.0.7.tgz#c04a2b4f23181aa376f30af0283dbc7b3b569980" + integrity sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA== + dependencies: + "@types/d3-dsv" "*" + +"@types/d3-force@*": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@types/d3-force/-/d3-force-3.0.10.tgz#6dc8fc6e1f35704f3b057090beeeb7ac674bff1a" + integrity sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw== + +"@types/d3-format@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/d3-format/-/d3-format-3.0.4.tgz#b1e4465644ddb3fdf3a263febb240a6cd616de90" + integrity sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g== + +"@types/d3-geo@*": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/d3-geo/-/d3-geo-3.1.0.tgz#b9e56a079449174f0a2c8684a9a4df3f60522440" + integrity sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ== + dependencies: + "@types/geojson" "*" + +"@types/d3-hierarchy@*": + version "3.1.7" + resolved "https://registry.yarnpkg.com/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz#6023fb3b2d463229f2d680f9ac4b47466f71f17b" + integrity sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg== + +"@types/d3-interpolate@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz#412b90e84870285f2ff8a846c6eb60344f12a41c" + integrity sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA== + dependencies: + "@types/d3-color" "*" + +"@types/d3-path@*": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@types/d3-path/-/d3-path-3.1.0.tgz#2b907adce762a78e98828f0b438eaca339ae410a" + integrity sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ== + +"@types/d3-polygon@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/d3-polygon/-/d3-polygon-3.0.2.tgz#dfae54a6d35d19e76ac9565bcb32a8e54693189c" + integrity sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA== + +"@types/d3-quadtree@*": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz#d4740b0fe35b1c58b66e1488f4e7ed02952f570f" + integrity sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg== + +"@types/d3-random@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/d3-random/-/d3-random-3.0.3.tgz#ed995c71ecb15e0cd31e22d9d5d23942e3300cfb" + integrity sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ== + +"@types/d3-scale-chromatic@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.3.tgz#fc0db9c10e789c351f4c42d96f31f2e4df8f5644" + integrity sha512-laXM4+1o5ImZv3RpFAsTRn3TEkzqkytiOY0Dz0sq5cnd1dtNlk6sHLon4OvqaiJb28T0S/TdsBI3Sjsy+keJrw== + +"@types/d3-scale@*": + version "4.0.8" + resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-4.0.8.tgz#d409b5f9dcf63074464bf8ddfb8ee5a1f95945bb" + integrity sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ== + dependencies: + "@types/d3-time" "*" + +"@types/d3-selection@*", "@types/d3-selection@^3.0.3": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@types/d3-selection/-/d3-selection-3.0.10.tgz#98cdcf986d0986de6912b5892e7c015a95ca27fe" + integrity sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg== + +"@types/d3-shape@*": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@types/d3-shape/-/d3-shape-3.1.6.tgz#65d40d5a548f0a023821773e39012805e6e31a72" + integrity sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA== + dependencies: + "@types/d3-path" "*" + +"@types/d3-time-format@*": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/d3-time-format/-/d3-time-format-4.0.3.tgz#d6bc1e6b6a7db69cccfbbdd4c34b70632d9e9db2" + integrity sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg== + +"@types/d3-time@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-3.0.3.tgz#3c186bbd9d12b9d84253b6be6487ca56b54f88be" + integrity sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw== + +"@types/d3-timer@*": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/d3-timer/-/d3-timer-3.0.2.tgz#70bbda77dc23aa727413e22e214afa3f0e852f70" + integrity sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw== + +"@types/d3-transition@*": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@types/d3-transition/-/d3-transition-3.0.8.tgz#677707f5eed5b24c66a1918cde05963021351a8f" + integrity sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ== + dependencies: + "@types/d3-selection" "*" + +"@types/d3-zoom@*", "@types/d3-zoom@^3.0.1": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@types/d3-zoom/-/d3-zoom-3.0.8.tgz#dccb32d1c56b1e1c6e0f1180d994896f038bc40b" + integrity sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw== + dependencies: + "@types/d3-interpolate" "*" + "@types/d3-selection" "*" + +"@types/d3@7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@types/d3/-/d3-7.4.0.tgz#fc5cac5b1756fc592a3cf1f3dc881bf08225f515" + integrity sha512-jIfNVK0ZlxcuRDKtRS/SypEyOQ6UHaFQBKv032X45VvxSJ6Yi5G9behy9h6tNTHTDGh5Vq+KbmBjUWLgY4meCA== + dependencies: + "@types/d3-array" "*" + "@types/d3-axis" "*" + "@types/d3-brush" "*" + "@types/d3-chord" "*" + "@types/d3-color" "*" + "@types/d3-contour" "*" + "@types/d3-delaunay" "*" + "@types/d3-dispatch" "*" + "@types/d3-drag" "*" + "@types/d3-dsv" "*" + "@types/d3-ease" "*" + "@types/d3-fetch" "*" + "@types/d3-force" "*" + "@types/d3-format" "*" + "@types/d3-geo" "*" + "@types/d3-hierarchy" "*" + "@types/d3-interpolate" "*" + "@types/d3-path" "*" + "@types/d3-polygon" "*" + "@types/d3-quadtree" "*" + "@types/d3-random" "*" + "@types/d3-scale" "*" + "@types/d3-scale-chromatic" "*" + "@types/d3-selection" "*" + "@types/d3-shape" "*" + "@types/d3-time" "*" + "@types/d3-time-format" "*" + "@types/d3-timer" "*" + "@types/d3-transition" "*" + "@types/d3-zoom" "*" + +"@types/d3@^7.4.0": + version "0.0.0" + uid "" + +"@types/d3@link:./node_modules/.cache/null": + version "0.0.0" + uid "" + "@types/express-serve-static-core@*", "@types/express-serve-static-core@4.17.18", "@types/express-serve-static-core@^4.17.18": version "4.17.18" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.18.tgz#8371e260f40e0e1ca0c116a9afcd9426fa094c40" @@ -4141,6 +4910,11 @@ dependencies: "@types/node" "*" +"@types/geojson@*": + version "7946.0.14" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.14.tgz#319b63ad6df705ee2a65a73ef042c8271e696613" + integrity sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg== + "@types/glob-base@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@types/glob-base/-/glob-base-0.3.0.tgz#a581d688347e10e50dd7c17d6f2880a10354319d" @@ -6102,15 +6876,15 @@ babel-jest@^26.6.3: graceful-fs "^4.2.4" slash "^3.0.0" -babel-loader@8.0.6: - version "8.0.6" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" - integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== +babel-loader@8.2.5: + version "8.2.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.5.tgz#d45f585e654d5a5d90f5350a779d7647c5ed512e" + integrity sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ== dependencies: - find-cache-dir "^2.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.1" - pify "^4.0.1" + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" babel-loader@^8.2.2: version "8.2.2" @@ -6236,6 +7010,15 @@ babel-plugin-polyfill-corejs2@^0.2.2: "@babel/helper-define-polyfill-provider" "^0.2.2" semver "^6.1.1" +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.11" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.2" + semver "^6.3.1" + babel-plugin-polyfill-corejs3@^0.1.0: version "0.1.7" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz#80449d9d6f2274912e05d9e182b54816904befd0" @@ -6244,6 +7027,14 @@ babel-plugin-polyfill-corejs3@^0.1.0: "@babel/helper-define-polyfill-provider" "^0.1.5" core-js-compat "^3.8.1" +babel-plugin-polyfill-corejs3@^0.10.4: + version "0.10.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" + integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.1" + core-js-compat "^3.36.1" + babel-plugin-polyfill-corejs3@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz#2779846a16a1652244ae268b1e906ada107faf92" @@ -6259,6 +7050,13 @@ babel-plugin-polyfill-regenerator@^0.2.2: dependencies: "@babel/helper-define-polyfill-provider" "^0.2.2" +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.2" + babel-plugin-react-docgen@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz#7cc8e2f94e8dc057a06e953162f0810e4e72257b" @@ -6713,7 +7511,7 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" -browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.3, browserslist@^4.6.0, browserslist@^4.8.0: +browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.8.0: version "4.16.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== @@ -6735,6 +7533,16 @@ browserslist@^4.16.6, browserslist@^4.17.3: node-releases "^2.0.0" picocolors "^1.0.0" +browserslist@^4.23.0, browserslist@^4.23.1: + version "4.23.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.2.tgz#244fe803641f1c19c28c48c4b6ec9736eb3d32ed" + integrity sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA== + dependencies: + caniuse-lite "^1.0.30001640" + electron-to-chromium "^1.4.820" + node-releases "^2.0.14" + update-browserslist-db "^1.1.0" + bs-logger@0.x: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" @@ -7056,6 +7864,11 @@ caniuse-lite@^1.0.30001012, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.300011 resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001429.tgz" integrity sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg== +caniuse-lite@^1.0.30001640: + version "1.0.30001643" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz#9c004caef315de9452ab970c3da71085f8241dbd" + integrity sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg== + canvas-prebuilt@^1.6: version "1.6.11" resolved "https://registry.yarnpkg.com/canvas-prebuilt/-/canvas-prebuilt-1.6.11.tgz#9b37071aa0ddd4f7c2b4a9e279b63fb2dc30db9b" @@ -7312,6 +8125,11 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +classcat@^5.0.3, classcat@^5.0.4: + version "5.0.5" + resolved "https://registry.yarnpkg.com/classcat/-/classcat-5.0.5.tgz#8c209f359a93ac302404a10161b501eba9c09c77" + integrity sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w== + classnames@2.2.6, classnames@^2.2.3: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" @@ -7973,14 +8791,6 @@ copy-webpack-plugin@5.0.5: serialize-javascript "^2.1.0" webpack-log "^2.0.0" -core-js-compat@^3.1.1: - version "3.9.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.9.1.tgz#4e572acfe90aff69d76d8c37759d21a5c59bb455" - integrity sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA== - dependencies: - browserslist "^4.16.3" - semver "7.0.0" - core-js-compat@^3.16.0, core-js-compat@^3.16.2, core-js-compat@^3.8.1: version "3.18.3" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.18.3.tgz#e0e7e87abc55efb547e7fa19169e45fa9df27a67" @@ -7989,6 +8799,13 @@ core-js-compat@^3.16.0, core-js-compat@^3.16.2, core-js-compat@^3.8.1: browserslist "^4.17.3" semver "7.0.0" +core-js-compat@^3.36.1, core-js-compat@^3.37.1: + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.1.tgz#c844310c7852f4bdf49b8d339730b97e17ff09ee" + integrity sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg== + dependencies: + browserslist "^4.23.0" + core-js-pure@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.9.1.tgz#677b322267172bd490e4464696f790cbc355bec5" @@ -8602,7 +9419,7 @@ d3-drag@1: d3-dispatch "1" d3-selection "1" -"d3-drag@2 - 3", d3-drag@3: +"d3-drag@2 - 3", d3-drag@3, d3-drag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-3.0.0.tgz#994aae9cd23c719f53b5e10e3a0a6108c69607ba" integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg== @@ -8857,7 +9674,7 @@ d3-selection@1, d3-selection@^1.1.0: resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.2.tgz#dcaa49522c0dbf32d6c1858afc26b6094555bc5c" integrity sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg== -"d3-selection@2 - 3", d3-selection@3: +"d3-selection@2 - 3", d3-selection@3, d3-selection@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-3.0.0.tgz#c25338207efa72cc5b9bd1458a1a41901f1e1b31" integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ== @@ -8951,7 +9768,7 @@ d3-zoom@1: d3-selection "1" d3-transition "1" -d3-zoom@3: +d3-zoom@3, d3-zoom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-3.0.0.tgz#d13f4165c73217ffeaa54295cd6969b3e7aee8f3" integrity sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw== @@ -9143,6 +9960,13 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: dependencies: ms "2.1.2" +debug@^4.3.1: + version "4.3.5" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" + integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== + dependencies: + ms "2.1.2" + decamelize-keys@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" @@ -9718,6 +10542,11 @@ electron-to-chromium@^1.3.867: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.871.tgz#6e87365fd72037a6c898fb46050ad4be3ac9ef62" integrity sha512-qcLvDUPf8DSIMWarHT2ptgcqrYg62n3vPA7vhrOF24d8UNzbUBaHu2CySiENR3nEDzYgaN60071t0F6KLYMQ7Q== +electron-to-chromium@^1.4.820: + version "1.5.0" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz#0d3123a9f09189b9c7ab4b5d6848d71b3c1fd0e8" + integrity sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA== + elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -10019,6 +10848,11 @@ escalade@^3.0.2, escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -13978,11 +14812,6 @@ js-file-download@0.4.9: resolved "https://registry.yarnpkg.com/js-file-download/-/js-file-download-0.4.9.tgz#3d837d5914442940d09af454e852d0840ce3bc64" integrity sha512-/qFei3bAo/BmV05ScKp3KDUMf57qD6UVkMa1gfOnwpLHuuHXRNXW42QbcQPi8+1Kn5LSrTEM28V2cooeHsU66w== -js-levenshtein@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== - js-message@1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/js-message/-/js-message-1.0.7.tgz#fbddd053c7a47021871bb8b2c95397cc17c20e47" @@ -16037,6 +16866,11 @@ node-releases@^2.0.0: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.0.tgz#67dc74903100a7deb044037b8a2e5f453bb05400" integrity sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA== +node-releases@^2.0.14: + version "2.0.18" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.18.tgz#f010e8d35e2fe8d6b2944f03f70213ecedc4ca3f" + integrity sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g== + node-status-codes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f" @@ -16962,6 +17796,11 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" + integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== + picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: version "2.2.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" @@ -18681,6 +19520,18 @@ reactcss@^1.2.0: dependencies: lodash "^4.0.1" +reactflow@^11.11.4: + version "11.11.4" + resolved "https://registry.yarnpkg.com/reactflow/-/reactflow-11.11.4.tgz#e3593e313420542caed81aecbd73fb9bc6576653" + integrity sha512-70FOtJkUWH3BAOsN+LU9lCrKoKbtOPnz2uq0CV2PLdNSwxTXOhCbsZr50GmZ+Rtw3jx8Uv7/vBFtCGixLfd4Og== + dependencies: + "@reactflow/background" "11.3.14" + "@reactflow/controls" "11.2.14" + "@reactflow/core" "11.11.4" + "@reactflow/minimap" "11.7.14" + "@reactflow/node-resizer" "2.2.14" + "@reactflow/node-toolbar" "1.3.14" + reactstrap@8.4.0: version "8.4.0" resolved "https://registry.yarnpkg.com/reactstrap/-/reactstrap-8.4.0.tgz#318961ae8150ec1790fec5ee2f81816c9e32d7a1" @@ -18970,6 +19821,13 @@ refractor@^3.1.0: parse-entities "^2.0.0" prismjs "~1.25.0" +regenerate-unicode-properties@^10.1.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" + integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" @@ -18977,7 +19835,7 @@ regenerate-unicode-properties@^8.2.0: dependencies: regenerate "^1.4.0" -regenerate@^1.4.0: +regenerate@^1.4.0, regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== @@ -18999,6 +19857,13 @@ regenerator-transform@^0.14.2: dependencies: "@babel/runtime" "^7.8.4" +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -19032,6 +19897,18 @@ regexpu-core@^4.7.1: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.2.0" +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + registry-auth-token@^3.0.1: version "3.4.0" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" @@ -19059,6 +19936,13 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + relateurl@0.2.x, relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" @@ -19800,6 +20684,11 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" @@ -21749,6 +22638,11 @@ unicode-canonical-property-names-ecmascript@^1.0.4: resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + unicode-match-property-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" @@ -21757,16 +22651,34 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + unicode-property-aliases-ecmascript@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + unidecode@0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/unidecode/-/unidecode-0.1.8.tgz#efbb301538bc45246a9ac8c559d72f015305053e" @@ -21989,6 +22901,14 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +update-browserslist-db@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" + integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== + dependencies: + escalade "^3.1.2" + picocolors "^1.0.1" + update-notifier@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-1.0.3.tgz#8f92c515482bd6831b7c93013e70f87552c7cf5a" @@ -22087,6 +23007,11 @@ use-latest@^1.0.0: dependencies: use-isomorphic-layout-effect "^1.0.0" +use-sync-external-store@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -23576,6 +24501,13 @@ zen-observable@^0.8.0: resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== +zustand@^4.4.1: + version "4.5.4" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.5.4.tgz#63abdd81edfb190bc61e0bbae045cc4d52158a05" + integrity sha512-/BPMyLKJPtFEvVL0E9E9BTUM63MNyhPGlvxk1XjrfWTUlV+BR8jufjsovHzrtR6YNcBEcL7cMHovL1n9xHawEg== + dependencies: + use-sync-external-store "1.2.0" + zwitch@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"