@altimateai/ui-components 0.0.80 → 0.0.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/131.js.map +1 -1
- package/dist/315.js +46633 -0
- package/dist/315.js.LICENSE.txt +73 -0
- package/dist/chatbotV2.css +20 -0
- package/dist/components/chatbotV2/components/modeSelector/ModeSelector.d.ts +2 -0
- package/dist/components/chatbotV2/components/modeSelector/ModeSelector.d.ts.map +1 -0
- package/dist/components/chatbotV2/store/chatSlice.d.ts +1 -1
- package/dist/components/chatbotV2/store/chatSlice.d.ts.map +1 -1
- package/dist/components/chatbotV2/store/index.d.ts +3 -3
- package/dist/components/chatbotV2/store/index.d.ts.map +1 -1
- package/dist/components/lineage/graph.d.ts.map +1 -1
- package/dist/dbtDocs.css.map +1 -1
- package/dist/lineage.css.map +1 -1
- package/dist/lineage.js.map +1 -1
- package/dist/static/svg/robot2.svg +179 -0
- package/dist/static/svg/user.svg +4 -0
- package/dist/styles.css.map +1 -1
- package/dist/teammate.css.map +1 -1
- package/dist/user.css.map +1 -1
- package/package.json +10 -24
package/dist/lineage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lineage.js","sources":["../src/components/lineage/context/LineageSlice.ts","../src/components/lineage/constants.ts","../src/components/lineage/utils.ts","webpack://@altimateai/ui-components/./src/components/lineage/components/styles.module.scss?bf9b","../src/components/lineage/assets/icons/tests.svg","../src/components/lineage/assets/icons/ephemeral.svg","../src/components/lineage/assets/icons/external-project.svg","../src/components/lineage/assets/icons/boolean.svg","../src/components/lineage/assets/icons/text.svg","../src/components/lineage/assets/icons/number.svg","../src/components/lineage/assets/icons/object.svg","../src/components/lineage/assets/icons/datetime.svg","../src/components/lineage/assets/icons/geospatial.svg","../src/components/lineage/assets/icons/model.svg","../src/components/lineage/assets/icons/seed.svg","../src/components/lineage/assets/icons/source.svg","../src/components/lineage/assets/icons/exposure.svg","../src/components/lineage/assets/icons/analysis.svg","../src/components/lineage/assets/icons/snapshot.svg","../src/components/lineage/assets/icons/metrics.svg","../src/components/lineage/assets/icons/macros.svg","../src/components/lineage/assets/icons/chevron-up.svg","../src/components/lineage/assets/icons/chevron-down.svg","../src/components/lineage/assets/icons/x-close.svg","../src/components/lineage/assets/icons/expand-lineage.svg","../src/components/lineage/assets/icons/thumbsup.svg","../src/components/lineage/assets/icons/thumbsdown.svg","../src/components/lineage/assets/icons/thumbsup-selected.svg","../src/components/lineage/assets/icons/thumbsdown-selected.svg","../src/components/lineage/assets/icons/expand.svg","../src/components/lineage/assets/icons/arrow-left-double.svg","../src/components/lineage/assets/icons/arrow-right-double.svg","../src/components/lineage/assets/icons/arrow-left.svg","../src/components/lineage/assets/icons/arrow-right.svg","../src/components/lineage/assets/icons/dbt_node_metrics_dark.svg","../src/components/lineage/assets/icons/dbt_node_cte.svg","../src/components/lineage/assets/icons/dbt_node_subquery_light.svg","../src/components/lineage/assets/icons/dbt_node_subquery_dark.svg","../src/components/lineage/assets/icons/dbt_node_model.svg","../src/components/lineage/assets/icons/dbt_node_seed.svg","../src/components/lineage/assets/icons/dbt_node_source.svg","../src/components/lineage/assets/icons/dbt_node_exposure.svg","../src/components/lineage/assets/icons/dbt_node_snapshot.svg","../src/components/lineage/assets/icons/dbt_node_metrics_light.svg","../src/components/lineage/assets/icons/sql_filter.svg","../src/components/lineage/assets/icons/sql_group_by.svg","../src/components/lineage/assets/icons/sql_inner_join.svg","../src/components/lineage/assets/icons/sql_left_join.svg","../src/components/lineage/assets/icons/sql_limit.svg","../src/components/lineage/assets/icons/sql_order_by.svg","../src/components/lineage/assets/icons/sql_outer_join.svg","../src/components/lineage/assets/icons/sql_right_join.svg","../src/components/lineage/assets/icons/sql_cross_join.svg","../src/components/lineage/assets/icons/sql_lateral_join.svg","../src/components/lineage/assets/icons/sql_full_join.svg","../src/components/lineage/assets/icons/sql_union.svg","../src/components/lineage/assets/icons/sql_select.svg","../src/components/lineage/assets/icons/alert-error.svg","../src/components/lineage/assets/icons/function.svg","../src/components/lineage/assets/icons/dbt_node_function.svg","../src/assets/icons/bolt.svg","../src/assets/icons/dbt.svg","../src/assets/icons/index.tsx","../src/components/lineage/components/ViewsTypeBadge.tsx","../src/components/lineage/components/LineageLegend.tsx","../src/components/api/useQuery.ts","../src/components/api/useMutation.ts","../src/components/api/index.ts","../src/components/lineage/api/index.ts","../src/components/lineage/cllUtils.ts","../src/components/lineage/components/Column.tsx","../src/components/lineage/graph.ts","../src/shared/utils.ts","../src/components/lineage/components/CustomNodes.tsx","../src/components/lineage/components/sidebarModal/SidebarModal.tsx","../src/components/lineage/components/Form.tsx","../src/components/lineage/components/MoreTables.tsx","../src/shared/Collapse.tsx","../src/shared/Table.tsx","webpack://@altimateai/ui-components/./src/components/lineage/components/Loader/styles.module.scss?5241","../src/components/lineage/components/Loader/index.tsx","webpack://@altimateai/ui-components/./src/components/lineage/components/Tags/styles.module.scss?dfd9","../src/components/lineage/components/Tags/index.tsx","../src/components/lineage/components/Purpose.tsx","../src/components/lineage/components/TableDetails.tsx","../src/components/lineage/components/ColumnRow.tsx","../src/components/lineage/components/Chip.tsx","../src/components/lineage/components/ExposureDetails.tsx","../src/components/lineage/components/DashboardDetails.tsx","../src/components/lineage/components/Feedback.tsx","../src/components/lineage/components/Settings.tsx","../src/components/lineage/components/BetterPopover.tsx","../src/components/lineage/components/AutoExpansionPopover.tsx","../src/components/lineage/components/ExpandWithConfidenceCard.tsx","../src/components/lineage/components/SettingsButton.tsx","../src/components/lineage/components/ResetButton.tsx","../src/components/lineage/components/ExportFinalLineageModal.tsx","../src/components/lineage/components/LineageModals.tsx","../src/components/lineage/components/ExportButton.tsx","../src/components/lineage/components/SnowflakeStageDetails.tsx","../src/components/lineage/components/FunctionDetails.tsx","../src/components/lineage/components/SidebarErrorBoundary.tsx","../src/components/lineage/components/DynamicLineage.tsx","../src/components/lineage/components/StaticLineage.tsx","../src/components/lineage/components/SqlLineage.tsx","../src/components/lineage/context/LineageProvider.tsx"],"sourcesContent":["import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { LineageState } from \"./types\";\nimport { ColumnLineage, Confidence, CollectColumn } from \"../types\";\n\nconst initialState = {\n selectedTable: \"\",\n moreTables: {},\n sidebarScreen: \"\",\n selectedColumn: undefined,\n collectColumns: {},\n confidence: { confidence: \"high\" },\n leftExpansion: 0,\n rightExpansion: 0,\n minRange: [0, 0],\n nodeCount: 0,\n selectCheck: true,\n nonSelectCheck: true,\n defaultExpansion: 1,\n aiEnabled: false,\n modalArgs: null,\n theme: \"dark\",\n lineageType: \"dynamic\",\n highlightedNodes: [],\n externalSidePanel: false,\n selectedNode: \"\",\n nodeSavingsPerformance: {},\n nodesCost: {},\n errors: {},\n lightdashEnabled: false,\n showCodeModal: false,\n renderTags: undefined,\n config: { exportFinalLineage: false },\n client: \"extension\",\n} as LineageState;\n\nconst lineageSlice = createSlice({\n name: \"lineageState\",\n initialState,\n reducers: {\n setAllowSyncColumnsWithDB: (\n state,\n action: PayloadAction<LineageState[\"allowSyncColumnsWithDB\"]>\n ) => {\n state.allowSyncColumnsWithDB = action.payload;\n },\n setStaticLineage: (state, action: PayloadAction<LineageState[\"sqlLineage\"]>) => {\n state.sqlLineage = action.payload;\n },\n setLineageType: (state, action: PayloadAction<LineageState[\"lineageType\"]>) => {\n state.lineageType = action.payload;\n },\n setTheme: (state, action: PayloadAction<LineageState[\"theme\"]>) => {\n state.theme = action.payload;\n },\n setSelectedTable: (state, action: PayloadAction<LineageState[\"selectedTable\"]>) => {\n state.selectedTable = action.payload;\n },\n setModalArgs: (state, action: PayloadAction<LineageState[\"modalArgs\"]>) => {\n state.modalArgs = action.payload;\n },\n setAiEnabled: (state, action: PayloadAction<LineageState[\"aiEnabled\"]>) => {\n state.aiEnabled = action.payload;\n },\n setMoreTables: (state, action: PayloadAction<LineageState[\"moreTables\"]>) => {\n state.moreTables = action.payload;\n },\n mergeSeeMoreTables: (state, action: PayloadAction<ColumnLineage[]>) => {\n state.moreTables = {\n ...state.moreTables,\n lineage: [...(state.moreTables.lineage || []), ...action.payload],\n };\n },\n setSidebarScreen: (state, action: PayloadAction<LineageState[\"sidebarScreen\"]>) => {\n state.sidebarScreen = action.payload;\n },\n setSelectedColumn: (state, action: PayloadAction<LineageState[\"selectedColumn\"]>) => {\n state.selectedColumn = action.payload;\n },\n setCollectColumns: (state, action: PayloadAction<LineageState[\"collectColumns\"]>) => {\n state.collectColumns = action.payload;\n },\n mergeCollectColumns: (state, action: PayloadAction<Record<string, CollectColumn[]>>) => {\n const newCollectColumns = action.payload;\n const collectColumns: Record<string, CollectColumn[]> = {\n ...state.collectColumns,\n };\n for (const t in newCollectColumns) {\n const _columns = newCollectColumns[t];\n if (!(t in collectColumns)) {\n collectColumns[t] = _columns;\n continue;\n }\n // merge _columns with collectColumns[t]\n const updatedColumns = _columns\n .map(c => {\n const existing = collectColumns[t].findIndex(x => x.column === c.column);\n if (existing === -1) return c;\n if (c.viewsType) collectColumns[t][existing].viewsType = c.viewsType;\n return null;\n })\n .filter((c): c is CollectColumn => c !== null);\n collectColumns[t].push(...updatedColumns);\n }\n state.collectColumns = collectColumns;\n },\n setConfidence: (state, action: PayloadAction<LineageState[\"confidence\"]>) => {\n state.confidence = action.payload;\n },\n updateConfidenceWithOperatorList: (\n state,\n action: PayloadAction<{ operatorList: Confidence[\"operator_list\"] }>\n ) => {\n const newConfidence = { ...state.confidence, confidence: \"low\" };\n newConfidence.operator_list = newConfidence.operator_list || [];\n newConfidence.operator_list.push(...(action.payload.operatorList || []));\n state.confidence = newConfidence;\n },\n setLeftExpansion: (state, action: PayloadAction<LineageState[\"leftExpansion\"]>) => {\n state.leftExpansion = action.payload;\n },\n setRightExpansion: (state, action: PayloadAction<LineageState[\"rightExpansion\"]>) => {\n state.rightExpansion = action.payload;\n },\n setMinRange: (state, action: PayloadAction<LineageState[\"minRange\"]>) => {\n state.minRange = action.payload;\n },\n setNodeCount: (state, action: PayloadAction<LineageState[\"nodeCount\"]>) => {\n state.nodeCount = action.payload;\n },\n setSelectCheck: (state, action: PayloadAction<LineageState[\"selectCheck\"]>) => {\n state.selectCheck = action.payload;\n },\n setNonSelectCheck: (state, action: PayloadAction<LineageState[\"nonSelectCheck\"]>) => {\n state.nonSelectCheck = action.payload;\n },\n setDefaultExpansion: (state, action: PayloadAction<LineageState[\"defaultExpansion\"]>) => {\n state.defaultExpansion = action.payload;\n },\n setSqlLineageDetails: (state, action: PayloadAction<LineageState[\"sqlLineage\"]>) => {\n state.sqlLineage = action.payload;\n },\n setHighlightedNodes: (state, action: PayloadAction<LineageState[\"highlightedNodes\"]>) => {\n state.highlightedNodes = action.payload;\n },\n setSelectedNode: (state, action: PayloadAction<LineageState[\"selectedNode\"]>) => {\n state.selectedNode = action.payload;\n },\n setNodesSavingsPerformance: (\n state,\n action: PayloadAction<LineageState[\"nodeSavingsPerformance\"]>\n ) => {\n state.nodeSavingsPerformance = action.payload;\n },\n setNodesCost: (state, action: PayloadAction<LineageState[\"nodesCost\"]>) => {\n state.nodesCost = action.payload;\n },\n setErrors: (state, action: PayloadAction<LineageState[\"errors\"]>) => {\n state.errors = action.payload;\n },\n setLightdashEnabled: (state, action: PayloadAction<LineageState[\"lightdashEnabled\"]>) => {\n state.lightdashEnabled = action.payload;\n },\n setShowCodeModal: (state, action: PayloadAction<LineageState[\"showCodeModal\"]>) => {\n state.showCodeModal = action.payload;\n },\n setRenderTags: (state, action: PayloadAction<LineageState[\"renderTags\"]>) => {\n state.renderTags = action.payload;\n },\n setConfig: (state, action: PayloadAction<LineageState[\"config\"]>) => {\n state.config = action.payload;\n },\n setClient: (state, action: PayloadAction<LineageState[\"client\"]>) => {\n state.client = action.payload;\n },\n },\n});\n\nexport const {\n setSelectedTable,\n setMoreTables,\n mergeSeeMoreTables,\n setSidebarScreen,\n setSelectedColumn,\n setCollectColumns,\n mergeCollectColumns,\n setConfidence,\n updateConfidenceWithOperatorList,\n setLeftExpansion,\n setRightExpansion,\n setMinRange,\n setNodeCount,\n setSelectCheck,\n setNonSelectCheck,\n setDefaultExpansion,\n setAiEnabled,\n setModalArgs,\n setTheme,\n setLineageType,\n setStaticLineage,\n setAllowSyncColumnsWithDB,\n setSqlLineageDetails,\n setHighlightedNodes,\n setSelectedNode,\n setNodesSavingsPerformance,\n setNodesCost,\n setErrors,\n setLightdashEnabled,\n setShowCodeModal,\n setRenderTags,\n setConfig,\n setClient,\n} = lineageSlice.actions;\nexport default lineageSlice;\n","// value constants\nexport const COLUMNS_SIDEBAR = \"columns\";\nexport const EXPOSURE_SIDEBAR = \"exposure\";\nexport const SNOWFLAKE_STAGE_SIDEBAR = \"snowflake_stage\";\nexport const DASHBOARD_SIDEBAR = \"dashboard\";\nexport const FUNCTION_SIDEBAR = \"function\";\nexport const TABLES_SIDEBAR = \"tables\";\nexport const FEEDBACK_SIDEBAR = \"feedback\";\nexport const HELP_SIDEBAR = \"help\";\nexport const SETTINGS_SIDEBAR = \"settings\";\n\n// react flow prefix for node types\nexport const COLUMN_PREFIX = \"column-\";\nexport const SEE_MORE_PREFIX = \"see-more-\";\n","import { Edge, MarkerType, Node } from \"reactflow\";\nimport { Table } from \"./types\";\nimport React from \"react\";\nimport { COLUMN_PREFIX, SEE_MORE_PREFIX } from \"./constants\";\n\n// config constants\nexport const MAX_EXPAND_TABLE = 5;\n\n// dimensions\nexport const F_OFFSET_X = 100;\nexport const F_OFFSET_Y = 100;\nexport const T_NODE_W = 300;\nexport const T_NODE_H = 80;\nexport const C_OFFSET_X = 12;\nexport const C_OFFSET_Y = T_NODE_H;\nconst C_NODE_H = 30;\nconst C_PADDING_Y = 4;\nexport const T_LEVEL_SEPARATION = 280;\nexport const LEVEL_SEPARATION_VERTICAL = 80;\nexport const T_NODE_Y_SEPARATION = 80;\nexport const T_NODE_Y_SEPARATION_VERTICAL = 250;\n\nexport const DEFAULT_MIN_ZOOM = 0.05;\n// node styles\nconst DEFAULT_COLOR = \"#7A899E\";\nconst HIGHLIGHT_COLOR = \"#E38E00\";\n\nexport const VIEWS_TYPE_COLOR = {\n Original: \"#FDD835\",\n Alias: \"#40C8AE\",\n Transformation: \"#FF754C\",\n Unchanged: \"#BC3FBC\",\n \"Not sure\": \"#247efe\",\n \"Non select\": \"#BC3FBC\",\n};\n\nexport type ViewsTypes = keyof typeof VIEWS_TYPE_COLOR;\n\nexport const defaultEdgeStyle: React.CSSProperties = {\n stroke: DEFAULT_COLOR,\n strokeWidth: 1,\n};\nexport const highlightEdgeStyle: React.CSSProperties = {\n stroke: HIGHLIGHT_COLOR,\n strokeWidth: 2,\n};\nexport const indirectHighlightEdgeStyle: React.CSSProperties = {\n stroke: HIGHLIGHT_COLOR,\n strokeWidth: 1,\n strokeDasharray: 10,\n};\nexport const defaultMarker = {\n type: \"arrow\" as MarkerType,\n strokeWidth: 1,\n width: 24,\n height: 24,\n color: DEFAULT_COLOR,\n};\nexport const highlightMarker = {\n type: \"arrow\" as MarkerType,\n strokeWidth: 1,\n width: 16,\n height: 16,\n color: HIGHLIGHT_COLOR,\n};\n\nexport const isColumn = (x: { id: string }) => x.id.startsWith(COLUMN_PREFIX);\nexport const isSeeMore = (x: { id: string }) => x.id.startsWith(SEE_MORE_PREFIX);\nexport const isNotColumn = (x: { id: string }) => !x.id.startsWith(COLUMN_PREFIX);\n\nexport const createTableEdge = (\n n1Level: number,\n n2Level: number,\n n1: string,\n n2: string,\n right: boolean,\n isVertical = false,\n from = \"\"\n): Edge => {\n const [src, dst] = right ? [n1, n2] : [n2, n1];\n const [sourceHandle, targetHandle] = right\n ? getSourceTargetHandles(n1Level, n2Level, isVertical)\n : getSourceTargetHandles(n2Level, n1Level, isVertical);\n console.log(from); // unused\n return {\n id: `${src}-${dst}`,\n source: src,\n target: dst,\n sourceHandle,\n targetHandle,\n style: defaultEdgeStyle,\n markerEnd: defaultMarker,\n type: n1 === n2 ? \"selfConnecting\" : n1Level === n2Level ? \"smoothstep\" : \"default\",\n // label: from,\n };\n};\n\nexport const createTableNode = (_table: Table, level: number, parent: string): Node => {\n return {\n id: _table.table,\n data: { ..._table, level, parent },\n position: { x: 100, y: 100 },\n type: _table.nodeType === \"dashboard\" ? _table.nodeType : \"table\",\n width: T_NODE_W,\n height: T_NODE_H,\n };\n};\n\nexport const createOpNode = (\n id: string,\n level: number,\n parent: string,\n data: { name?: string; type: string }\n): Node => {\n return {\n id,\n data: { ...data, level, parent, id },\n position: { x: 100, y: 100 },\n type: \"operator\",\n width: T_NODE_W,\n height: T_NODE_H,\n };\n};\n\nexport const createColumnNode = (\n t: string,\n c: string,\n viewsType: ViewsTypes | undefined,\n viewsCode: Record<string, [string, string][]>,\n nodeType: string,\n datatype: string = \"\"\n): Node => {\n return {\n id: getColumnId(t, c),\n data: { column: c, table: t, viewsType, viewsCode, nodeType, datatype },\n parentNode: t,\n extent: \"parent\",\n draggable: false,\n type: \"column\",\n position: { x: 100, y: 100 },\n height: C_NODE_H,\n };\n};\n\nexport type EdgeVisibility = Record<string, boolean>;\n\nexport const createColumnEdge = (\n source: string,\n target: string,\n srcLevel: number,\n dstLevel: number,\n type: string,\n edgeVisibility: EdgeVisibility\n): Edge => {\n const edgeId = getColumnEdgeId(source, target);\n const [sourceHandle, targetHandle] = getSourceTargetHandles(srcLevel, dstLevel, false);\n return {\n id: edgeId,\n data: { type },\n source,\n target,\n sourceHandle,\n targetHandle,\n style: type === \"direct\" ? highlightEdgeStyle : indirectHighlightEdgeStyle,\n zIndex: 1000,\n markerEnd: highlightMarker,\n type: srcLevel === dstLevel ? \"smoothstep\" : \"default\",\n hidden: !edgeVisibility[type],\n };\n};\n\nexport const getColumnEdgeId = (source: string, target: string) =>\n COLUMN_PREFIX + `${source}-${target}`;\n\nexport const applyNodeStyling = (n: Node, highlight: boolean) => {\n n.style = { opacity: highlight ? 1 : 0.5 };\n};\nexport const applyEdgeStyling = (e: Edge, highlight: boolean) => {\n e.style = highlight\n ? e.data?.type === \"indirect\"\n ? indirectHighlightEdgeStyle\n : highlightEdgeStyle\n : defaultEdgeStyle;\n e.markerEnd = highlight ? highlightMarker : defaultMarker;\n};\n\nexport const getSourceTargetHandles = (l0: number, l1: number, isVertical: boolean) => {\n if (isVertical) {\n if (l0 < l1) return [\"bottom\", \"top\"];\n if (l0 > l1) return [\"top\", \"bottom\"];\n if (l0 < 0) return [\"top\", \"top\"];\n return [\"bottom\", \"bottom\"];\n }\n if (l0 < l1) return [\"right\", \"left\"];\n if (l0 > l1) return [\"left\", \"right\"];\n if (l0 < 0) return [\"left\", \"left\"];\n return [\"right\", \"right\"];\n};\n\nexport const getHelperDataForCLL = (nodes: Node[], edges: Edge[]) => {\n const levelMap: Record<string, number> = {};\n nodes.forEach(n => {\n if (isNotColumn(n)) levelMap[n.id] = n.data.level;\n });\n const tableNodes: Record<string, boolean> = {};\n nodes.filter(_n => _n.type === \"table\").forEach(_n => (tableNodes[_n.id] = true));\n const seeMoreIdTableReverseMap: Record<string, string> = {};\n for (const e of edges) {\n if (isColumn(e)) continue;\n const sourceTableExist = tableNodes[e.source];\n const targetTableExist = tableNodes[e.target];\n if (sourceTableExist && targetTableExist) {\n continue;\n }\n if (sourceTableExist) {\n const _n = nodes.find(_n => _n.id === e.target)!;\n _n.data.tables.forEach((_t: { table: string }) => {\n seeMoreIdTableReverseMap[_t.table] = e.target;\n });\n continue;\n }\n if (targetTableExist) {\n const _n = nodes.find(_n => _n.id === e.source)!;\n _n.data.tables.forEach((_t: { table: string }) => {\n seeMoreIdTableReverseMap[_t.table] = e.source;\n });\n }\n }\n\n return { levelMap, tableNodes, seeMoreIdTableReverseMap };\n};\n\nexport const getColumnId = (t: string, c: string) => COLUMN_PREFIX + `${t}/${c}`;\nexport const getSeeMoreId = (t: string, right: boolean) =>\n SEE_MORE_PREFIX + t + \"-\" + (right ? \"1\" : \"0\");\n\nexport const contains = (arr: [string, string][], x: [string, string]) => {\n for (const item of arr) {\n if (item[0] === x[0] && item[1] === x[1]) return true;\n }\n return false;\n};\n\nexport const safeConcat = <T>(obj: Record<string, T[]>, key: string, values: T[]) => {\n obj[key] = obj[key] || [];\n obj[key].push(...values);\n};\n\nexport const getColY = (columnNum: number, tableNum = 1) =>\n columnNum * (C_NODE_H + C_PADDING_Y) + tableNum * C_PADDING_Y;\nexport const withinInclusive = (a: number, b: number) => (v: number) => a <= v && v <= b;\nexport const withinExclusive = (a: number, b: number) => (v: number) => a < v && v < b;\n\nexport const deleteIfExists = <T extends Node | Edge>(arr: T[], id: string) => {\n const index = arr.findIndex(x => x.id === id);\n if (index === -1) return;\n arr.splice(index, 1);\n};\n\nexport const calculateExpand = (minVal: number, maxVal: number, defaultVal: number) => {\n if (minVal === -1) return maxVal;\n if (defaultVal >= maxVal) return maxVal;\n if (defaultVal >= minVal) return defaultVal;\n return minVal;\n};\n\nexport const toggleModelEdges = (edges: Edge[], isVisible: boolean, highlight = true) => {\n edges.forEach(e => {\n if (!isColumn(e)) {\n e.hidden = !isVisible;\n if (highlight) applyEdgeStyling(e, isVisible);\n }\n });\n};\n\nexport const toggleColumnEdges = (edges: Edge[], isVisible: boolean, highlight = true) => {\n edges.forEach(e => {\n if (isColumn(e)) {\n e.hidden = !isVisible;\n if (highlight) applyEdgeStyling(e, isVisible);\n }\n });\n};\n\nexport function findSourcesSinks(edges: [string, string][]) {\n const _inDegree: Record<string, number> = {};\n const _outDegree: Record<string, number> = {};\n edges.forEach(([u, v]) => {\n _inDegree[u] = _inDegree[u] || 0;\n _inDegree[v] = (_inDegree[v] || 0) + 1;\n _outDegree[u] = (_outDegree[u] || 0) + 1;\n _outDegree[v] = _outDegree[v] || 0;\n });\n const sources = Object.keys(_inDegree).filter(k => _inDegree[k] === 0);\n const sinks = Object.keys(_outDegree).filter(k => _outDegree[k] === 0);\n return { sources, sinks };\n}\n\n// Navigation utilities\nexport interface NavigationInfo {\n url?: string;\n id?: string;\n table: string;\n}\n\n/**\n * Helper function to get current table ID from URL (web environment only)\n * Returns undefined in extension environments or if parsing fails\n */\nexport const getCurrentTableId = (): string | undefined => {\n if (typeof window === \"undefined\") return undefined;\n\n try {\n const currentUrl = window.location.href;\n const urlParts = currentUrl.split(\"/\");\n\n for (let i = 0; i < urlParts.length; i++) {\n if (urlParts[i] === \"datasets\" || urlParts[i] === \"dbt_models\") {\n if (i + 1 < urlParts.length) {\n return urlParts[i + 1].split(\"?\")[0];\n }\n }\n }\n } catch (e) {\n console.warn(\"Could not parse current table ID from URL:\", e);\n }\n return undefined;\n};\n\n/**\n * Navigation handler for table details components\n * Handles both direct URLs and ID-based navigation\n * Gracefully degrades in extension environments\n */\nexport const handleTableNavigation = ({ url, id, table }: NavigationInfo): void => {\n if (typeof window === \"undefined\") {\n console.warn(\"Navigation not available in this environment\");\n return;\n }\n\n if (url) {\n window.location.href = url;\n return;\n }\n\n if (id) {\n try {\n const currentUrl = window.location.href;\n const urlParts = currentUrl.split(\"/\");\n\n // Find the base path (datasets or dbt_models)\n for (let i = 0; i < urlParts.length; i++) {\n if (urlParts[i] === \"datasets\" || urlParts[i] === \"dbt_models\") {\n // Replace the ID part with the new id\n if (i + 1 < urlParts.length) {\n const idPart = urlParts[i + 1].split(\"?\");\n const encodedId = urlParts[i] === \"dbt_models\" ? btoa(table) : id;\n urlParts[i + 1] = encodedId + (idPart.length > 1 ? \"?\" + idPart[1] : \"\");\n window.location.href = urlParts.join(\"/\");\n return;\n }\n\n // If no ID is found, add it\n const encodedId = urlParts[i] === \"dbt_models\" ? btoa(table) : id;\n urlParts.splice(i + 1, 0, encodedId);\n window.location.href = urlParts.join(\"/\");\n return;\n }\n }\n\n // If no datasets or dbt_models path is found, default to datasets\n window.location.href = `${window.location.origin}/datasets/${id}?tab=1`;\n } catch (e) {\n console.error(\"Failed to navigate:\", e);\n }\n }\n};\n","// extracted by css-extract-rspack-plugin\nexport default {\"table_node\":\"table_node-HZasbd\",\"tableNode\":\"table_node-HZasbd\",\"header\":\"header-EsFnof\",\"collapse\":\"collapse-kaHZJ2\",\"selected\":\"selected-aXy70D\",\"content\":\"content-bkoNoL\",\"table_header\":\"table_header-h7SLMC\",\"tableHeader\":\"table_header-h7SLMC\",\"seed\":\"seed-Ydi9CF\",\"model\":\"model-SOXlD8\",\"source\":\"source-jFNX0O\",\"exposure\":\"exposure-KWo0IA\",\"snapshot\":\"snapshot-in_UPD\",\"metrics\":\"metrics-xAyaQS\",\"macros\":\"macros-UnHe_G\",\"analysis\":\"analysis-VEMRfe\",\"dashboard\":\"dashboard-bq_grI\",\"function_node\":\"function_node-og3pSu\",\"functionNode\":\"function_node-og3pSu\",\"node_icon\":\"node_icon-GCPtEs\",\"nodeIcon\":\"node_icon-GCPtEs\",\"dialect_icon\":\"dialect_icon-q66s69\",\"dialectIcon\":\"dialect_icon-q66s69\",\"table_handle\":\"table_handle-VNQhFj\",\"tableHandle\":\"table_handle-VNQhFj\",\"see_more_node\":\"see_more_node-ZO0lv_\",\"seeMoreNode\":\"see_more_node-ZO0lv_\",\"table_card\":\"table_card-NQQBnN\",\"tableCard\":\"table_card-NQQBnN\",\"disabled\":\"disabled-Tpd9YG\",\"column_card\":\"column_card-jHEwxl\",\"columnCard\":\"column_card-jHEwxl\",\"edit_icon\":\"edit_icon-TaMt42\",\"editIcon\":\"edit_icon-TaMt42\",\"active\":\"active-HrsGi3\",\"expand_lineage_icon\":\"expand_lineage_icon-VX8baJ\",\"expandLineageIcon\":\"expand_lineage_icon-VX8baJ\",\"processing_div\":\"processing_div-sU7CZh\",\"processingDiv\":\"processing_div-sU7CZh\",\"gif_img\":\"gif_img-C9jw5n\",\"gifImg\":\"gif_img-C9jw5n\",\"card\":\"card-Z7RjN7\",\"column_node\":\"column_node-cZSan4\",\"columnNode\":\"column_node-cZSan4\",\"default\":\"default-NvTGqD\",\"column_name\":\"column_name-eI8nyT\",\"columnName\":\"column_name-eI8nyT\",\"column_top_right\":\"column_top_right-HuJzaQ\",\"columnTopRight\":\"column_top_right-HuJzaQ\",\"divider\":\"divider-PDv5xe\",\"table_details_header\":\"table_details_header-sHSEq1\",\"tableDetailsHeader\":\"table_details_header-sHSEq1\",\"verticle_divider\":\"verticle_divider-a2wwX_\",\"verticleDivider\":\"verticle_divider-a2wwX_\",\"low_confidence\":\"low_confidence-BR7DRM\",\"lowConfidence\":\"low_confidence-BR7DRM\",\"high_confidence\":\"high_confidence-e61FlL\",\"highConfidence\":\"high_confidence-e61FlL\",\"alert_icon\":\"alert_icon-SQQhdn\",\"alertIcon\":\"alert_icon-SQQhdn\",\"menu_card\":\"menu_card-oNPIOq\",\"menuCard\":\"menu_card-oNPIOq\",\"menu_card_container\":\"menu_card_container-JQeVLV\",\"menuCardContainer\":\"menu_card_container-JQeVLV\",\"table_details_tabs\":\"table_details_tabs-zIUxNq\",\"tableDetailsTabs\":\"table_details_tabs-zIUxNq\",\"tab\":\"tab-UFR0vo\",\"table_node_pill\":\"table_node_pill-jHPFnf\",\"tableNodePill\":\"table_node_pill-jHPFnf\",\"icon\":\"icon-vsMnWn\",\"node-checkbox\":\"node-checkbox-AVY0v0\",\"nodeCheckbox\":\"node-checkbox-AVY0v0\",\"non_select_node_checkbox\":\"non_select_node_checkbox-migo1T\",\"nonSelectNodeCheckbox\":\"non_select_node_checkbox-migo1T\",\"select_node_checkbox\":\"select_node_checkbox-Wm4MGe\",\"selectNodeCheckbox\":\"select_node_checkbox-Wm4MGe\",\"node_extra_info\":\"node_extra_info-qk6aaB\",\"nodeExtraInfo\":\"node_extra_info-qk6aaB\",\"help_body\":\"help_body-NH8ylK\",\"helpBody\":\"help_body-NH8ylK\",\"feedback_body\":\"feedback_body-HUrd6c\",\"feedbackBody\":\"feedback_body-HUrd6c\",\"cancel_btn\":\"cancel_btn-C218Iw\",\"cancelBtn\":\"cancel_btn-C218Iw\",\"expand_nav\":\"expand_nav-ATZTAG\",\"expandNav\":\"expand_nav-ATZTAG\",\"expand_nav_btn\":\"expand_nav_btn-holMPO\",\"expandNavBtn\":\"expand_nav_btn-holMPO\",\"column_legend\":\"column_legend-WEW67H\",\"columnLegend\":\"column_legend-WEW67H\",\"dot\":\"dot-Y9ikcu\",\"model_views_type\":\"model_views_type-Y8oeBi\",\"modelViewsType\":\"model_views_type-Y8oeBi\",\"close_button\":\"close_button-tD_u_4\",\"closeButton\":\"close_button-tD_u_4\",\"op_node\":\"op_node-A_hzkb\",\"opNode\":\"op_node-A_hzkb\",\"light_mode\":\"light_mode-JH0Zpb\",\"lightMode\":\"light_mode-JH0Zpb\",\"dark_mode\":\"dark_mode-JhEmfP\",\"darkMode\":\"dark_mode-JhEmfP\",\"highlighted\":\"highlighted-S5Gm1b\",\"cost_data\":\"cost_data-Ust0EF\",\"costData\":\"cost_data-Ust0EF\",\"op_type_text\":\"op_type_text-zT3J7f\",\"opTypeText\":\"op_type_text-zT3J7f\",\"node_stats\":\"node_stats-uZ7tTI\",\"nodeStats\":\"node_stats-uZ7tTI\",\"savings-performance\":\"savings-performance-yvA0hz\",\"savingsPerformance\":\"savings-performance-yvA0hz\",\"performance\":\"performance-ocbi9R\",\"savings\":\"savings-XoEs9e\",\"value\":\"value-U5QTm0\",\"percent\":\"percent-hc11lh\",\"static_table_node\":\"static_table_node-wgYPzr\",\"staticTableNode\":\"static_table_node-wgYPzr\",\"details_btn\":\"details_btn-p_k6sY\",\"detailsBtn\":\"details_btn-p_k6sY\",\"enable\":\"enable-zjV1J8\",\"disable\":\"disable-mMWEBh\",\"code_editor_container\":\"code_editor_container-l8Jz9w\",\"codeEditorContainer\":\"code_editor_container-l8Jz9w\",\"code_editor\":\"code_editor-NCl4Dj\",\"codeEditor\":\"code_editor-NCl4Dj\",\"tooltip_container\":\"tooltip_container-CRWMSg\",\"tooltipContainer\":\"tooltip_container-CRWMSg\",\"tooltip_text\":\"tooltip_text-SYu0GE\",\"tooltipText\":\"tooltip_text-SYu0GE\",\"views_type_badge\":\"views_type_badge-t9r656\",\"viewsTypeBadge\":\"views_type_badge-t9r656\",\"lineage_legend\":\"lineage_legend-EO_VCR\",\"lineageLegend\":\"lineage_legend-EO_VCR\",\"column_code_icon\":\"column_code_icon-U9iaFg\",\"columnCodeIcon\":\"column_code_icon-U9iaFg\",\"edge_select\":\"edge_select-O3X0VW\",\"edgeSelect\":\"edge_select-O3X0VW\",\"edge_non_select\":\"edge_non_select-njevKn\",\"edgeNonSelect\":\"edge_non_select-njevKn\",\"modal_views_code_container\":\"modal_views_code_container-hRDFwN\",\"modalViewsCodeContainer\":\"modal_views_code_container-hRDFwN\",\"custom_node_code_block\":\"custom_node_code_block-kYkJoY\",\"customNodeCodeBlock\":\"custom_node_code_block-kYkJoY\",\"reset_btn\":\"reset_btn-sxy4vp\",\"resetBtn\":\"reset_btn-sxy4vp\",\"error_tooltip\":\"error_tooltip-MEczjk\",\"errorTooltip\":\"error_tooltip-MEczjk\",\"tableWrapper\":\"tableWrapper-bjPDSp\",\"dataTable\":\"dataTable-uBNuzX\"};","import * as React from \"react\";\nconst SvgTests = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" d=\"m14.414 13.795-2.646-1.853a.808.808 0 0 1 .927-1.322l2.645 1.853a.807.807 0 1 1-.926 1.322M6.235 10.767a1.6 1.6 0 0 0 1.137-.472l2.68-2.704a1.55 1.55 0 0 0-.029-2.21 1.61 1.61 0 0 0-2.246.028L6.205 6.994l-.275-.263a1.61 1.61 0 0 0-2.247.03c-.61.619-.596 1.61.032 2.211l1.412 1.352c.299.286.692.443 1.108.443M4.418 7.465a.57.57 0 0 1 .798-.011l.642.614c.202.194.526.19.723-.01l1.93-1.945a.57.57 0 0 1 .797-.01.55.55 0 0 1 .01.785L6.638 9.59a.573.573 0 0 1-.796.01L4.429 8.25a.55.55 0 0 1-.011-.785\" /><path fill=\"currentColor\" d=\"M1.27 8.463a.509.509 0 1 0-1.01.124q.056.46.177.911a6.58 6.58 0 0 0 3.085 4.022 6.58 6.58 0 0 0 5.026.661 6.58 6.58 0 0 0 4.022-3.087 6.58 6.58 0 0 0 .663-5.028 6.63 6.63 0 0 0-8.111-4.682 6.61 6.61 0 0 0-4.76 4.994.509.509 0 1 0 .994.216 5.59 5.59 0 0 1 4.03-4.227A5.61 5.61 0 0 1 12.25 6.33a5.57 5.57 0 0 1-.561 4.255 5.57 5.57 0 0 1-3.404 2.613 5.57 5.57 0 0 1-4.254-.56A5.57 5.57 0 0 1 1.42 9.236a6 6 0 0 1-.15-.772\" /></svg>;\nexport default SvgTests;","import * as React from \"react\";\nconst SvgEphemeral = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 15 15\" {...props}><circle cx={7.5} cy={7.5} r={6.9} stroke=\"currentColor\" strokeWidth={1.2} /><path stroke=\"currentColor\" strokeWidth={0.9} d=\"M7.05 7.5v.45H11c.155 0 .287.064.368.15a.31.31 0 0 1 .082.293A4.05 4.05 0 1 1 6.607 3.55a.31.31 0 0 1 .292.082c.087.08.151.213.151.368z\" /></svg>;\nexport default SvgEphemeral;","import * as React from \"react\";\nconst SvgExternalProject = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={15} height={15} fill=\"none\" viewBox=\"0 0 11 10\" {...props}><g fill=\"#FFCE73\" clipPath=\"url(#external-project_svg__a)\"><path d=\"M8.875 5.274a.39.39 0 0 0-.39.39v1.573a1.147 1.147 0 0 1-1.146 1.145H2.864A1.147 1.147 0 0 1 1.72 7.237V2.763a1.147 1.147 0 0 1 1.145-1.146h1.573a.39.39 0 1 0 0-.781H2.864A1.93 1.93 0 0 0 .938 2.763v4.474a1.93 1.93 0 0 0 1.926 1.927H7.34a1.93 1.93 0 0 0 1.926-1.927V5.665a.39.39 0 0 0-.39-.391\" /><path d=\"M8.866.832H6.438a.39.39 0 0 0-.39.383c-.005.22.18.398.399.398h1.486l-3.11 3.112a.39.39 0 0 0 .552.552l3.112-3.11v1.491a.39.39 0 1 0 .78 0V1.233a.4.4 0 0 0-.4-.401\" /></g><defs><clipPath id=\"external-project_svg__a\"><path fill=\"#fff\" d=\"M.101 0h10v10h-10z\" /></clipPath></defs></svg>;\nexport default SvgExternalProject;","import * as React from \"react\";\nconst SvgBoolean = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 17\" {...props}><path fill=\"currentColor\" d=\"M4.969 9.825V7.14H4V6.5h2.679v.641H5.68v2.684zM6.604 10.485 8.575 6.5h.665l-1.966 3.985zM9.753 9.825V6.5h.713v3.325zm.328-1.32v-.613h1.72v.612zm0-1.364V6.5H12v.641z\" /><circle cx={8} cy={8.5} r={6.5} stroke=\"currentColor\" /></svg>;\nexport default SvgBoolean;","import * as React from \"react\";\nconst SvgText = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 17\" {...props}><path fill=\"currentColor\" d=\"m3 13.3 3.794-9.8h1.54l3.766 9.8h-1.61L8.25 7.392a8 8 0 0 1-.168-.476 26 26 0 0 0-.266-.84l-.28-.84a15 15 0 0 0-.168-.504l.322-.014-.21.602q-.113.365-.252.77a25 25 0 0 1-.462 1.358L4.54 13.3zm1.68-2.436.56-1.456h4.452l.644 1.456z\" /></svg>;\nexport default SvgText;","import * as React from \"react\";\nconst SvgNumber = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 17\" {...props}><path fill=\"currentColor\" d=\"m8.138 13.5 1.68-9.8h1.26l-1.68 9.8zm-4.704-2.422V9.916h8.106v1.162zm.98 2.422 1.68-9.8h1.26l-1.68 9.8zm-.448-6.342V5.996h8.092v1.162z\" /></svg>;\nexport default SvgNumber;","import * as React from \"react\";\nconst SvgObject = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 17\" {...props}><path fill=\"currentColor\" d=\"M3.863 12.5a4 4 0 0 1-.775-.238 1.7 1.7 0 0 1-.537-.352 1.3 1.3 0 0 1-.318-.494 2 2 0 0 1-.096-.652l.008-.837q0-.467-.202-.696-.203-.237-.582-.246H1v-.97h.379q.378-.009.573-.238.193-.228.193-.704l-.008-.837q0-.723.405-1.128.414-.414 1.321-.608l.256.881a3 3 0 0 0-.529.23.64.64 0 0 0-.264.307q-.07.186-.07.511l.017.767q0 .51-.29.855-.283.343-.882.493v-.097q.6.168.881.511.291.344.291.846l-.018.766q0 .309.071.485a.65.65 0 0 0 .264.3q.195.114.529.229zM5.052 12.377V4.535h2.502v1.04H6.18l.053-.07v5.938l-.089-.106h1.41v1.04zM8.436 12.377v-1.04H9.81l-.053.07V5.47l.088.106h-1.41v-1.04h2.503v7.842zM12.137 12.5l-.265-.881q.335-.114.52-.23a.64.64 0 0 0 .264-.308q.089-.184.088-.51l-.017-.767q0-.51.282-.855.29-.343.88-.493l.01.097q-.6-.168-.89-.511a1.3 1.3 0 0 1-.282-.846l.018-.767q0-.316-.08-.493a.66.66 0 0 0-.264-.29 2.6 2.6 0 0 0-.529-.23l.265-.916q.45.088.766.238.326.14.538.352.22.203.317.494.105.282.106.652l-.01.837q0 .466.203.704.203.23.582.238H15v.97h-.379q-.378.008-.572.237-.195.23-.194.705l.008.837q0 .723-.414 1.128-.414.414-1.312.608\" /></svg>;\nexport default SvgObject;","import * as React from \"react\";\nconst SvgDatetime = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 17\" {...props}><path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit={10} d=\"M5.333 1.834v2M10.667 1.834v2M2.333 6.56h11.334M14 11.407v-5.24c0-2-1-3.333-3.333-3.333H5.333C3 2.834 2 4.167 2 6.167v5.667c0 2 1 3.333 3.333 3.333h4.914\" /><path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit={10} d=\"M2 6.595v5.24c0 2 1 3.333 3.333 3.333h5.334C13 15.168 14 13.835 14 11.835V6.168c0-2-1-3.333-3.333-3.333H5.753\" /><path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M10.496 9h.008M10.496 12h.008M5.496 9h.008M5.496 12h.008\" /></svg>;\nexport default SvgDatetime;","import * as React from \"react\";\nconst SvgGeospatial = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 17\" {...props}><path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M13 7.41c0 3.817-5 7.09-5 7.09s-5-3.273-5-7.09c0-1.303.527-2.552 1.464-3.472A5.05 5.05 0 0 1 8 2.5c1.326 0 2.598.517 3.536 1.438A4.86 4.86 0 0 1 13 7.409\" /><path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M8 9.5a2 2 0 1 0 0-4 2 2 0 0 0 0 4\" /></svg>;\nexport default SvgGeospatial;","import * as React from \"react\";\nconst SvgModel = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M2.21 4.094a.5.5 0 0 1 .66-.254L8 6.12l5.13-2.28a.5.5 0 0 1 .407.914l-5.333 2.37a.5.5 0 0 1-.407 0l-5.333-2.37a.5.5 0 0 1-.254-.66\" clipRule=\"evenodd\" /><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M6.714 1.359a3.17 3.17 0 0 1 2.572 0L12.62 2.84a3.17 3.17 0 0 1 1.88 2.894v4.534a3.17 3.17 0 0 1-1.88 2.894l-3.334 1.481a3.17 3.17 0 0 1-2.572 0L3.38 13.162A3.17 3.17 0 0 1 1.5 10.268V5.734c0-1.251.737-2.385 1.88-2.894zm2.166.914a2.17 2.17 0 0 0-1.76 0L3.787 3.754A2.17 2.17 0 0 0 2.5 5.734v4.534c0 .856.504 1.632 1.287 1.98L7.12 13.73c.56.248 1.2.248 1.76 0l3.333-1.482a2.17 2.17 0 0 0 1.287-1.98V5.734c0-.856-.504-1.632-1.287-1.98z\" clipRule=\"evenodd\" /><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M8 6.164a.5.5 0 0 1 .5.5v7.333a.5.5 0 0 1-1 0V6.664a.5.5 0 0 1 .5-.5\" clipRule=\"evenodd\" /></svg>;\nexport default SvgModel;","import * as React from \"react\";\nconst SvgSeed = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" d=\"M13.545 3.322 10.532.469A1.72 1.72 0 0 0 9.351 0H3.613c-.947 0-1.718.772-1.718 1.719V14.28c0 .947.771 1.719 1.718 1.719h8.75c.947 0 1.719-.772 1.719-1.719V4.57c0-.469-.197-.925-.538-1.247m-.91.428h-2.334a.155.155 0 0 1-.156-.156v-2.2zm-.272 11.313h-8.75a.78.78 0 0 1-.781-.782V1.72c0-.431.35-.782.781-.782h5.594v2.657c0 .603.49 1.094 1.094 1.094h2.844v9.593c0 .431-.35.781-.782.781\" /><path fill=\"currentColor\" d=\"M11.332 6.25H4.457a.468.468 0 1 0 0 .938h6.875a.468.468 0 1 0 0-.938M11.332 8.75H4.457a.468.468 0 1 0 0 .938h6.875a.468.468 0 1 0 0-.938M6.729 11.25H4.457a.468.468 0 1 0 0 .938h2.272a.468.468 0 1 0 0-.938\" /></svg>;\nexport default SvgSeed;","import * as React from \"react\";\nconst SvgSource = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" d=\"M14.946 3.202c-.016-.856-.8-1.617-2.214-2.142C11.465.59 9.787.328 8.014.328c-1.777 0-3.452.261-4.722.732-1.414.525-2.2 1.29-2.214 2.145v9.883c0 .87.787 1.637 2.214 2.17 1.27.473 2.945.73 4.722.73 1.776 0 3.451-.26 4.721-.73 1.427-.53 2.214-1.3 2.214-2.17v-9.86q-.004-.012-.003-.026m-1.019 9.887c0 .767-2.305 1.88-5.917 1.88s-5.916-1.113-5.916-1.88v-1.714a5.7 5.7 0 0 0 1.195.597c1.273.47 2.948.732 4.725.732s3.454-.262 4.721-.732q.705-.264 1.195-.597v1.714zm0-3.301V9.8c0 .767-2.305 1.88-5.917 1.88s-5.916-1.113-5.916-1.88V8.086q.49.334 1.195.598c1.27.474 2.945.731 4.721.731s3.452-.26 4.722-.731q.706-.262 1.195-.598zm0-3.285v.013c0 .767-2.305 1.88-5.917 1.88s-5.916-1.113-5.916-1.88V4.802q.49.333 1.195.594c1.27.473 2.945.731 4.721.731s3.452-.26 4.722-.731a5.7 5.7 0 0 0 1.195-.594zM8.014 5.109c-3.612 0-5.917-1.114-5.917-1.881 0-.768 2.305-1.881 5.917-1.881s5.916 1.113 5.916 1.88c-.003.768-2.305 1.882-5.916 1.882\" /></svg>;\nexport default SvgSource;","import * as React from \"react\";\nconst SvgExposure = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" d=\"M14.487 5.369a7 7 0 1 1-3.744-3.81.413.413 0 0 1-.008.762.4.4 0 0 1-.315-.004 6.2 6.2 0 0 0-2.009-.467v.39a.412.412 0 0 1-.823 0v-.39a6 6 0 0 0-3.65 1.51l.273.28a.412.412 0 0 1-.576.576l-.28-.275a6.04 6.04 0 0 0-1.512 3.651h.392a.412.412 0 1 1 0 .824h-.392a6.03 6.03 0 0 0 1.512 3.65l.28-.274a.411.411 0 0 1 .576.576l-.277.278a6 6 0 0 0 3.654 1.512v-.39a.412.412 0 1 1 .823 0v.39a6 6 0 0 0 3.651-1.51l-.274-.28a.411.411 0 0 1 .576-.576l.278.278a6.02 6.02 0 0 0 1.514-3.654h-.392a.412.412 0 1 1 0-.824h.392a6.1 6.1 0 0 0-.432-1.912.412.412 0 1 1 .763-.31zm-5.353.918L12.65 2.77a.412.412 0 1 1 .583.583L9.716 6.869A2.059 2.059 0 1 1 8 5.945c.403 0 .797.12 1.133.343zm.1 1.717a1.235 1.235 0 1 0-2.47 0 1.235 1.235 0 0 0 2.47 0\" /></svg>;\nexport default SvgExposure;","import * as React from \"react\";\nconst SvgAnalysis = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 28 28\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M3.66 10.03 7.84 6.41a1.5 1.5 0 0 1-.09-.502c0-.807.661-1.46 1.476-1.46s1.45.628 1.474 1.414l3.303 1.145c.27-.315.673-.514 1.123-.514.254 0 .493.063.701.175l3.807-3.22a1.4 1.4 0 0 1-.083-.486c0-.807.66-1.461 1.475-1.461s1.475.654 1.475 1.46c0 .808-.66 1.461-1.475 1.461-.254 0-.493-.063-.701-.175l-3.807 3.221q.082.229.083.485c0 .807-.66 1.461-1.475 1.461s-1.45-.63-1.474-1.414l-3.302-1.145c-.27.314-.674.514-1.124.514-.248 0-.481-.061-.686-.168l-4.178 3.622q.088.235.09.502c0 .807-.661 1.46-1.476 1.46a1.47 1.47 0 0 1-1.475-1.46c0-.807.66-1.461 1.475-1.461.248 0 .481.06.686.168m16.242-2.724a.664.664 0 0 0-.666.66v13.46c0 .364.3.66.666.66h.913a.664.664 0 0 0 .666-.66V7.967c0-.364-.3-.66-.666-.66zm-5.9 5.38a.664.664 0 0 0-.666.66v8.219c0 .363.3.66.666.66h.913a.664.664 0 0 0 .666-.66v-8.22c0-.363-.3-.66-.666-.66zm-5.9-1.932a.664.664 0 0 0-.666.66v10.289c0 .363.3.66.666.66h.913a.664.664 0 0 0 .666-.66v-10.29c0-.363-.3-.66-.666-.66zm-5.9 5.678h.913c.367 0 .666.296.666.659v4.75c0 .363-.3.659-.666.659h-.913a.664.664 0 0 1-.666-.66v-4.749c0-.363.3-.66.666-.66\" clipRule=\"evenodd\" /></svg>;\nexport default SvgAnalysis;","import * as React from \"react\";\nconst SvgSnapshot = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" d=\"M13.674 3.5h-2.147l-.25-.75A1.82 1.82 0 0 0 9.545 1.5h-3.09a1.82 1.82 0 0 0-1.732 1.25l-.25.75H2.326A1.83 1.83 0 0 0 .5 5.326v7.35A1.83 1.83 0 0 0 2.326 14.5h11.35a1.83 1.83 0 0 0 1.824-1.826v-7.35A1.83 1.83 0 0 0 13.674 3.5m.826 9.174a.827.827 0 0 1-.826.826H2.326a.827.827 0 0 1-.826-.826v-7.35a.827.827 0 0 1 .826-.824h2.508a.5.5 0 0 0 .474-.342l.364-1.094a.825.825 0 0 1 .784-.564h3.088a.825.825 0 0 1 .784.565l.365 1.093a.5.5 0 0 0 .473.342h2.508a.827.827 0 0 1 .826.826z\" /><path fill=\"currentColor\" d=\"M8 5a3.75 3.75 0 1 0 0 7.5A3.75 3.75 0 0 0 8 5m0 6.5A2.75 2.75 0 1 1 8 6a2.75 2.75 0 0 1 0 5.5M13 6.5a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1\" /></svg>;\nexport default SvgSnapshot;","import * as React from \"react\";\nconst SvgMetrics = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><g clipPath=\"url(#metrics_svg__a)\"><mask id=\"metrics_svg__b\" width={16} height={16} x={0} y={0} maskUnits=\"userSpaceOnUse\" style={{\n maskType: \"luminance\"\n }}><path fill=\"#fff\" d=\"M0 0h16v16H0z\" /></mask><g stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit={10} strokeWidth={0.8} mask=\"url(#metrics_svg__b)\"><path d=\"M.469 15.531H15.53M3 11.781H1.75a.313.313 0 0 0-.312.313v3.437h1.875v-3.437A.313.313 0 0 0 3 11.78M6.75 10.656H5.5a.313.313 0 0 0-.312.313v4.562h1.875V10.97a.313.313 0 0 0-.313-.313M10.5 8.938H9.25a.31.31 0 0 0-.312.312v6.281h1.874V9.25a.31.31 0 0 0-.312-.312M14.25 5.813H13a.31.31 0 0 0-.312.312v9.406h1.874V6.125a.31.31 0 0 0-.312-.312M.469 9.602c6.157 0 12.314-4.707 14.295-9.135\" /><path d=\"M11.9 1.239 14.763.47l.768 2.865\" /></g></g><defs><clipPath id=\"metrics_svg__a\"><path fill=\"#fff\" d=\"M0 0h16v16H0z\" /></clipPath></defs></svg>;\nexport default SvgMetrics;","import * as React from \"react\";\nconst SvgMacros = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><g fill=\"currentColor\" clipPath=\"url(#macros_svg__a)\"><path d=\"m14.939 11.357-2.626-1.474 2.626-1.474a.47.47 0 0 0 0-.818l-2.626-1.474 2.626-1.474a.469.469 0 0 0 0-.817L8.229.06a.47.47 0 0 0-.458 0L1.06 3.826a.47.47 0 0 0 0 .817l2.627 1.474L1.06 7.591a.47.47 0 0 0 0 .818l2.627 1.474-2.627 1.474a.469.469 0 0 0 0 .817l6.71 3.766c.142.08.316.08.458 0l6.71-3.766a.47.47 0 0 0 0-.817M8 1.007l5.752 3.227L8 7.462 2.248 4.234zM4.645 6.654l3.126 1.754c.142.08.316.08.459 0l3.125-1.754L13.752 8 8 11.228 2.248 8zM8 14.994l-5.752-3.228 2.397-1.346 3.126 1.754c.142.08.316.08.458 0l3.126-1.754 2.397 1.346z\" /><path d=\"M8 10.148a.469.469 0 1 0 0-.937.469.469 0 0 0 0 .937M6.283 9.25a.469.469 0 1 0 0-.937.469.469 0 0 0 0 .937M4.567 8.39a.469.469 0 1 0 0-.937.469.469 0 0 0 0 .938M9.717 9.25a.469.469 0 1 0 0-.937.469.469 0 0 0 0 .937M11.433 8.39a.469.469 0 1 0 0-.937.469.469 0 0 0 0 .938\" /></g><defs><clipPath id=\"macros_svg__a\"><path fill=\"#fff\" d=\"M0 0h16v16H0z\" /></clipPath></defs></svg>;\nexport default SvgMacros;","import * as React from \"react\";\nconst SvgChevronUp = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={11} height={6} fill=\"none\" viewBox=\"0 0 11 6\" {...props}><path fill=\"currentColor\" d=\"M.813 5.52a.5.5 0 0 0 .651.049l.056-.049 4.313-4.313 4.313 4.313a.5.5 0 0 0 .651.049l.056-.049a.5.5 0 0 0 .049-.65l-.049-.057L6.187.146a.5.5 0 0 0-.651-.048L5.48.146.813 4.813a.5.5 0 0 0 0 .707\" /></svg>;\nexport default SvgChevronUp;","import * as React from \"react\";\nconst SvgChevronDown = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={11} height={6} fill=\"none\" viewBox=\"0 0 11 6\" {...props}><path fill=\"currentColor\" d=\"M.813.48A.5.5 0 0 1 1.464.43L1.52.48l4.313 4.313L10.146.48a.5.5 0 0 1 .651-.049l.056.049a.5.5 0 0 1 .049.65l-.049.057-4.666 4.667a.5.5 0 0 1-.651.048l-.056-.048L.813 1.187a.5.5 0 0 1 0-.707\" /></svg>;\nexport default SvgChevronDown;","import * as React from \"react\";\nconst SvgXClose = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={16} height={16} fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"m12 4-8 8m0-8 8 8\" /></svg>;\nexport default SvgXClose;","import * as React from \"react\";\nconst SvgExpandLineage = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 10 10\" {...props}><g clipPath=\"url(#expand-lineage_svg__a)\"><path fill=\"#fff\" d=\"M6.468 1.25v.417H4.169a.21.21 0 0 0-.209.208v2.917H2.498v-.417a.624.624 0 0 0-.627-.625H.826a.63.63 0 0 0-.627.625v1.25a.624.624 0 0 0 .627.625h1.045a.63.63 0 0 0 .627-.625v-.417H3.96v2.917a.21.21 0 0 0 .21.208h2.298v.417a.624.624 0 0 0 .627.625h1.044a.63.63 0 0 0 .627-.625V7.5a.624.624 0 0 0-.627-.625H7.095a.63.63 0 0 0-.627.625v.417h-2.09V5.208h2.09v.417a.624.624 0 0 0 .627.625h1.044a.63.63 0 0 0 .627-.625v-1.25a.624.624 0 0 0-.627-.625H7.095a.63.63 0 0 0-.627.625v.417h-2.09V2.083h2.09V2.5a.624.624 0 0 0 .627.625h1.044a.63.63 0 0 0 .627-.625V1.25A.624.624 0 0 0 8.14.625H7.095a.63.63 0 0 0-.627.625M1.87 5.833H.826a.21.21 0 0 1-.209-.208v-1.25a.21.21 0 0 1 .21-.208H1.87a.21.21 0 0 1 .209.208v1.25a.21.21 0 0 1-.21.208m5.224 1.459h1.044a.21.21 0 0 1 .21.208v1.25a.21.21 0 0 1-.21.208H7.095a.21.21 0 0 1-.21-.208V7.5a.21.21 0 0 1 .21-.208m0-3.125h1.044a.21.21 0 0 1 .21.208v1.25a.21.21 0 0 1-.21.208H7.095a.21.21 0 0 1-.21-.208v-1.25a.21.21 0 0 1 .21-.208m1.044-3.125a.21.21 0 0 1 .21.208V2.5a.21.21 0 0 1-.21.208H7.095a.21.21 0 0 1-.21-.208V1.25a.21.21 0 0 1 .21-.208z\" /></g><defs><clipPath id=\"expand-lineage_svg__a\"><path fill=\"#fff\" d=\"M0 10V0h10v10z\" /></clipPath></defs></svg>;\nexport default SvgExpandLineage;","import * as React from \"react\";\nconst SvgThumbsup = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={32} height={32} fill=\"none\" viewBox=\"0 0 32 32\" {...props}><rect width={31} height={31} x={-0.5} y={0.5} stroke=\"#8390A3\" rx={4.5} transform=\"matrix(-1 0 0 1 31 0)\" /><path stroke=\"#8390A3\" d=\"m16.038 8.913-.002-.003c-.11-.165-.325-.336-.604-.434a1.2 1.2 0 0 0-.813-.015l-.007.003-.008.003c-.589.198-.973.874-.854 1.43l.003.012.002.014.433 2.725.002.012c.051.383-.052.746-.282 1.03l-.008.01-.008.01c-.232.26-.574.424-.948.424H9.52c-.523 0-.925.21-1.15.523-.208.296-.267.705-.103 1.17l.003.01 2.05 6.241.006.018.005.017c.198.795 1.11 1.496 2.014 1.496h3.25c.229 0 .516-.04.782-.12.277-.082.47-.189.565-.283l.022-.023.025-.02 1.067-.824c.288-.224.456-.562.456-.921V12.95a1.2 1.2 0 0 0-.2-.656zM22.519 11.826h-.859c-.6 0-.894.12-1.048.266-.147.14-.268.404-.268.96v8.383c0 .56.121.826.269.967.153.146.448.266 1.047.266h.859c.6 0 .894-.12 1.047-.266.148-.14.27-.407.27-.967V13.06c0-.56-.122-.827-.27-.968-.153-.146-.448-.266-1.047-.266Z\" /></svg>;\nexport default SvgThumbsup;","import * as React from \"react\";\nconst SvgThumbsdown = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={32} height={32} fill=\"none\" viewBox=\"0 0 32 32\" {...props}><rect width={31} height={31} x={0.5} y={-0.5} stroke=\"#8390A3\" rx={4.5} transform=\"matrix(1 0 0 -1 0 31)\" /><path stroke=\"#8390A3\" strokeMiterlimit={10} strokeWidth={1.2} d=\"m12.233 10.708 2.584-2c.333-.333 1.083-.5 1.583-.5h3.167c1 0 2.083.75 2.333 1.75l2 6.084c.417 1.166-.333 2.166-1.583 2.166h-3.334c-.5 0-.916.417-.833 1l.417 2.667c.166.75-.334 1.583-1.084 1.833-.666.25-1.5-.083-1.833-.583l-3.417-5.083\" /><path stroke=\"#8390A3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.2} d=\"M7.983 10.708v8.167c0 1.167.5 1.583 1.667 1.583h.833c1.167 0 1.667-.416 1.667-1.583v-8.167c0-1.166-.5-1.583-1.667-1.583H9.65c-1.167 0-1.667.417-1.667 1.583\" /></svg>;\nexport default SvgThumbsdown;","import * as React from \"react\";\nconst SvgThumbsupSelected = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={32} height={32} fill=\"none\" viewBox=\"0 0 32 32\" {...props}><rect width={32} height={32} fill=\"#3F8CFF\" rx={5} transform=\"matrix(-1 0 0 1 32 0)\" /><path fill=\"#fff\" d=\"M19.011 21.418V12.95c0-.333-.1-.658-.283-.933l-2.275-3.384c-.359-.541-1.25-.925-2.009-.641-.816.275-1.358 1.191-1.183 2.008l.433 2.725a.84.84 0 0 1-.175.65.78.78 0 0 1-.575.258H9.52c-.658 0-1.225.267-1.558.734-.317.45-.375 1.033-.167 1.625l2.05 6.241c.259 1.034 1.384 1.875 2.5 1.875h3.25c.559 0 1.342-.191 1.7-.55l1.067-.825c.408-.316.65-.8.65-1.316M21.66 11.326h.859c1.291 0 1.816.5 1.816 1.734v8.375c0 1.233-.525 1.733-1.816 1.733h-.859c-1.291 0-1.816-.5-1.816-1.733V13.05c0-1.225.525-1.725 1.816-1.725\" /></svg>;\nexport default SvgThumbsupSelected;","import * as React from \"react\";\nconst SvgThumbsdownSelected = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={32} height={32} fill=\"none\" viewBox=\"0 0 32 32\" {...props}><rect width={31} height={31} x={0.5} y={-0.5} fill=\"#247EFE\" stroke=\"#247EFE\" rx={4.5} transform=\"matrix(1 0 0 -1 0 31)\" /><path fill=\"#fff\" d=\"m12.233 10.708 2.584-2c.333-.333 1.083-.5 1.583-.5h3.167c1 0 2.083.75 2.333 1.75l2 6.084c.417 1.166-.333 2.166-1.583 2.166h-3.334c-.5 0-.916.417-.833 1l.417 2.667c.166.75-.334 1.583-1.084 1.833-.666.25-1.5-.083-1.833-.583l-3.417-5.083\" /><path fill=\"#fff\" stroke=\"#247EFE\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.2} d=\"M7.983 10.708v8.167c0 1.167.5 1.583 1.667 1.583h.833c1.167 0 1.667-.416 1.667-1.583v-8.167c0-1.166-.5-1.583-1.667-1.583H9.65c-1.167 0-1.667.417-1.667 1.583\" /></svg>;\nexport default SvgThumbsdownSelected;","import * as React from \"react\";\nconst SvgExpand = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={16} height={16} fill=\"none\" viewBox=\"0 0 16 16\" {...props}><g clipPath=\"url(#expand_svg__a)\"><mask id=\"expand_svg__b\" width={16} height={16} x={0} y={0} maskUnits=\"userSpaceOnUse\" style={{\n maskType: \"luminance\"\n }}><path fill=\"#fff\" d=\"M16 0H0v16h16z\" /></mask><g fill=\"currentColor\" mask=\"url(#expand_svg__b)\"><path d=\"M13.581 0A2.384 2.384 0 0 0 11.2 2.381a2.384 2.384 0 0 0 2.381 2.38 2.384 2.384 0 0 0 2.38-2.38A2.384 2.384 0 0 0 13.582 0m0 3.968a1.59 1.59 0 0 1-1.587-1.587A1.59 1.59 0 0 1 13.58.794a1.59 1.59 0 0 1 1.587 1.587 1.59 1.59 0 0 1-1.587 1.587M13.581 11.2a2.384 2.384 0 0 0-2.381 2.38 2.384 2.384 0 0 0 2.381 2.381 2.384 2.384 0 0 0 2.38-2.38 2.384 2.384 0 0 0-2.38-2.382m0 3.968a1.59 1.59 0 0 1-1.587-1.588c0-.875.712-1.587 1.587-1.587a1.59 1.59 0 0 1 1.587 1.587 1.59 1.59 0 0 1-1.587 1.588M2.381 0A2.384 2.384 0 0 0 0 2.381a2.384 2.384 0 0 0 2.381 2.38 2.384 2.384 0 0 0 2.38-2.38A2.384 2.384 0 0 0 2.382 0m0 3.968A1.59 1.59 0 0 1 .794 2.381 1.59 1.59 0 0 1 2.38.794 1.59 1.59 0 0 1 3.968 2.38a1.59 1.59 0 0 1-1.587 1.587M2.381 11.2A2.384 2.384 0 0 0 0 13.58a2.384 2.384 0 0 0 2.381 2.381 2.384 2.384 0 0 0 2.38-2.38 2.384 2.384 0 0 0-2.38-2.382m0 3.968A1.59 1.59 0 0 1 .794 13.58a1.59 1.59 0 0 1 1.587-1.587 1.59 1.59 0 0 1 1.587 1.587 1.59 1.59 0 0 1-1.587 1.588\" /><path d=\"M4.155 12.645 12.64 4.16l-.905-.905L3.25 11.74z\" /><path d=\"m3.25 4.16 8.485 8.485.905-.906-8.485-8.485z\" /><path d=\"M7.977 10.833a2.857 2.857 0 1 0 0-5.714 2.857 2.857 0 0 0 0 5.714\" /></g></g><defs><clipPath id=\"expand_svg__a\"><path fill=\"#fff\" d=\"M0 0h16v16H0z\" /></clipPath></defs></svg>;\nexport default SvgExpand;","import * as React from \"react\";\nconst SvgArrowLeftDouble = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={16} height={16} fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" d=\"M7.951 12.344a.48.48 0 0 0 .047-.626l-.047-.054L3.807 7.52l4.144-4.144a.48.48 0 0 0 .047-.625l-.047-.054a.48.48 0 0 0-.625-.047l-.054.047L2.788 7.18a.48.48 0 0 0-.047.625l.047.054 4.484 4.484a.48.48 0 0 0 .68 0\" /><path fill=\"currentColor\" d=\"M12.343 12.344a.48.48 0 0 0 .047-.626l-.047-.054L8.2 7.52l4.144-4.144a.48.48 0 0 0 .047-.625l-.047-.054a.48.48 0 0 0-.625-.047l-.054.047L7.18 7.18a.48.48 0 0 0-.046.625l.046.054 4.484 4.484a.48.48 0 0 0 .68 0\" /></svg>;\nexport default SvgArrowLeftDouble;","import * as React from \"react\";\nconst SvgArrowRightDouble = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={16} height={16} fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" d=\"M8.049 12.344a.48.48 0 0 1-.047-.626l.047-.054 4.144-4.144-4.144-4.144a.48.48 0 0 1-.047-.625l.047-.054a.48.48 0 0 1 .625-.047l.054.047 4.484 4.484a.48.48 0 0 1 .047.625l-.047.054-4.484 4.484a.48.48 0 0 1-.68 0\" /><path fill=\"currentColor\" d=\"M3.657 12.344a.48.48 0 0 1-.047-.626l.047-.054L7.8 7.52 3.657 3.376a.48.48 0 0 1-.047-.625l.047-.054a.48.48 0 0 1 .625-.047l.054.047L8.82 7.18a.48.48 0 0 1 .046.625l-.046.054-4.484 4.484a.48.48 0 0 1-.68 0\" /></svg>;\nexport default SvgArrowRightDouble;","import * as React from \"react\";\nconst SvgArrowLeft = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={17} height={16} fill=\"none\" viewBox=\"0 0 17 16\" {...props}><path fill=\"currentColor\" d=\"M10.834 3.11a.48.48 0 0 1 .046.625l-.046.054L6.69 7.933l4.144 4.144a.48.48 0 0 1 .046.626l-.046.053a.48.48 0 0 1-.626.047l-.054-.047L5.67 8.273a.48.48 0 0 1-.046-.626l.046-.054 4.484-4.484a.48.48 0 0 1 .68 0\" /></svg>;\nexport default SvgArrowLeft;","import * as React from \"react\";\nconst SvgArrowRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={17} height={16} fill=\"none\" viewBox=\"0 0 17 16\" {...props}><path fill=\"currentColor\" d=\"M6.166 3.11a.48.48 0 0 0-.046.625l.046.054 4.144 4.144-4.144 4.144a.48.48 0 0 0-.046.626l.046.053a.48.48 0 0 0 .626.047l.054-.047 4.484-4.483a.48.48 0 0 0 .046-.626l-.046-.054L6.846 3.11a.48.48 0 0 0-.68 0\" /></svg>;\nexport default SvgArrowRight;","import * as React from \"react\";\nconst SvgDbtNodeMetricsDark = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"#4D4F3B\" rx={5} /><mask id=\"dbt_node_metrics_dark_svg__a\" width={14} height={14} x={11} y={7} maskUnits=\"userSpaceOnUse\" style={{\n maskType: \"luminance\"\n }}><path fill=\"#fff\" d=\"M11 7h14v14H11z\" /></mask><g stroke=\"#FFF200\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit={10} strokeWidth={0.8} mask=\"url(#dbt_node_metrics_dark_svg__a)\"><path d=\"M11.41 20.59h13.18M13.625 17.309h-1.094a.273.273 0 0 0-.273.273v3.008h1.64v-3.008a.273.273 0 0 0-.273-.273M16.906 16.324h-1.093a.273.273 0 0 0-.274.274v3.992h1.64v-3.992a.273.273 0 0 0-.273-.274M20.188 14.82h-1.094a.273.273 0 0 0-.274.274v5.496h1.64v-5.496a.273.273 0 0 0-.273-.274M23.469 12.086h-1.094a.273.273 0 0 0-.273.273v8.23h1.64v-8.23a.273.273 0 0 0-.273-.273M11.41 15.402c5.387 0 10.775-4.118 12.508-7.992\" /><path d=\"m21.412 8.083 2.507-.672.671 2.507\" /></g><path fill=\"#FFF200\" d=\"M12.771 28v-4.2h.738l1.53 2.49-.432-.006 1.548-2.484h.702V28h-.774v-1.578q0-.54.024-.972.03-.432.096-.858l.096.258-1.302 2.01h-.396l-1.26-1.992.084-.276q.066.402.09.828.03.42.03 1.002V28zm5.215 0v-4.2h2.748v.708h-1.98v2.784h2.004V28zm.36-1.8v-.696h2.082v.696zm4.23 1.8v-3.48h-1.2v-.72h3.216v.72h-1.236V28z\" /></svg>;\nexport default SvgDbtNodeMetricsDark;","import * as React from \"react\";\nconst SvgDbtNodeCte = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"currentColor\" rx={5} /><path fill=\"#E7A427\" d=\"M24.167 22H11.833C10.822 22 10 21.16 10 20.125V8.875C10 7.841 10.822 7 11.833 7h12.334C25.178 7 26 7.84 26 8.875v11.25C26 21.16 25.178 22 24.167 22M11.833 8.023a.844.844 0 0 0-.833.852v11.25c0 .47.374.852.833.852h12.334c.459 0 .833-.382.833-.852V8.875a.844.844 0 0 0-.833-.852z\" /><path fill=\"#E7A427\" d=\"M25.5 12h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1M25.5 15.5h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1M25.5 19h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1\" /><path fill=\"#E7A427\" d=\"M14 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 14 22M18 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 18 22M22 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 22 22M20.55 29v-4.2h2.748v.709h-1.98v2.784h2.004V29zm.36-1.8v-.695h2.082v.696zM17.77 29v-3.48h-1.2v-.72h3.215v.72H18.55V29zM14.61 29.06q-.456 0-.834-.156a1.9 1.9 0 0 1-.654-.444 2.2 2.2 0 0 1-.432-.69q-.15-.402-.15-.876 0-.456.162-.846a2.1 2.1 0 0 1 .45-.684q.288-.294.672-.456a2.12 2.12 0 0 1 1.428-.072q.288.09.528.252.24.156.402.366l-.498.546a1.8 1.8 0 0 0-.324-.27 1.2 1.2 0 0 0-.342-.168 1.1 1.1 0 0 0-.36-.06 1.4 1.4 0 0 0-.522.102q-.24.102-.42.288a1.4 1.4 0 0 0-.276.444 1.5 1.5 0 0 0-.102.564q0 .318.096.576.102.258.282.444.186.186.438.288.258.096.564.096a1.37 1.37 0 0 0 .726-.204 1.7 1.7 0 0 0 .294-.234l.384.618a1.4 1.4 0 0 1-.384.294 2.34 2.34 0 0 1-1.128.282\" /></svg>;\nexport default SvgDbtNodeCte;","import * as React from \"react\";\nconst SvgDbtNodeSubqueryLight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"#FDF6EA\" rx={5} /><path fill=\"#E7A427\" d=\"M24.167 22H11.833C10.822 22 10 21.16 10 20.125V8.875C10 7.841 10.822 7 11.833 7h12.334C25.178 7 26 7.84 26 8.875v11.25C26 21.16 25.178 22 24.167 22M11.833 8.023a.844.844 0 0 0-.833.852v11.25c0 .47.374.852.833.852h12.334c.459 0 .833-.382.833-.852V8.875a.844.844 0 0 0-.833-.852z\" /><path fill=\"#E7A427\" d=\"M25.5 12h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1M25.5 15.5h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1M25.5 19h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1\" /><path fill=\"#E7A427\" d=\"M14 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 14 22M18 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 18 22M22 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 22 22M13.491 29a2 2 0 0 1-.598-.083 1.7 1.7 0 0 1-.498-.25 2 2 0 0 1-.395-.423l.418-.472q.277.39.531.54.255.15.604.15.215 0 .39-.068a.7.7 0 0 0 .277-.183.4.4 0 0 0 .102-.267.5.5 0 0 0-.034-.188.45.45 0 0 0-.107-.162.7.7 0 0 0-.181-.133 1.2 1.2 0 0 0-.255-.105 2 2 0 0 0-.338-.084 2.6 2.6 0 0 1-.531-.16 1.3 1.3 0 0 1-.379-.25 1 1 0 0 1-.226-.34 1.2 1.2 0 0 1-.073-.433q0-.234.101-.433.108-.201.289-.345.186-.15.435-.228a1.7 1.7 0 0 1 .536-.083q.306 0 .56.078a1.37 1.37 0 0 1 .779.605l-.43.417a1.3 1.3 0 0 0-.254-.306.9.9 0 0 0-.31-.188 1 1 0 0 0-.362-.067q-.22 0-.384.067a.6.6 0 0 0-.26.188.44.44 0 0 0-.09.278q0 .117.045.217.045.094.136.172.095.072.254.133.158.055.378.1.31.067.554.173.244.1.412.239a.9.9 0 0 1 .254.31q.09.174.09.373 0 .372-.174.644a1.15 1.15 0 0 1-.497.423q-.322.144-.769.144M17.333 28.978a1.7 1.7 0 0 1-.82-.195 1.5 1.5 0 0 1-.57-.544 1.54 1.54 0 0 1-.203-.789v-2.4h.61v2.35q0 .284.135.511.136.222.356.356a.95.95 0 0 0 .492.133 1.016 1.016 0 0 0 .876-.489 1 1 0 0 0 .135-.511v-2.35h.582v2.4q0 .44-.21.789-.203.345-.564.544-.361.195-.82.195M19.978 28.944v-3.888h1.65q.377 0 .638.11a.8.8 0 0 1 .39.334q.135.216.135.533t-.18.54a.9.9 0 0 1-.492.305v-.111q.265.055.463.2.198.138.305.35.113.21.113.483 0 .278-.09.494a.9.9 0 0 1-.26.356q-.169.144-.413.222a2 2 0 0 1-.553.072zm.61-.577h1.062q.231 0 .39-.067a.53.53 0 0 0 .248-.194.55.55 0 0 0 .09-.317.46.46 0 0 0-.095-.295.54.54 0 0 0-.26-.183 1.1 1.1 0 0 0-.401-.067h-1.034zm0-1.7h1.005a.65.65 0 0 0 .3-.067.5.5 0 0 0 .288-.45.46.46 0 0 0-.17-.383q-.169-.134-.485-.134h-.938z\" /></svg>;\nexport default SvgDbtNodeSubqueryLight;","import * as React from \"react\";\nconst SvgDbtNodeSubqueryDark = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"#4B473F\" rx={5} /><path fill=\"#E7A427\" d=\"M24.167 22H11.833C10.822 22 10 21.16 10 20.125V8.875C10 7.841 10.822 7 11.833 7h12.334C25.178 7 26 7.84 26 8.875v11.25C26 21.16 25.178 22 24.167 22M11.833 8.023a.844.844 0 0 0-.833.852v11.25c0 .47.374.852.833.852h12.334c.459 0 .833-.382.833-.852V8.875a.844.844 0 0 0-.833-.852z\" /><path fill=\"#E7A427\" d=\"M25.5 12h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1M25.5 15.5h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1M25.5 19h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1\" /><path fill=\"#E7A427\" d=\"M14 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 14 22M18 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 18 22M22 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 22 22M13.491 29a2 2 0 0 1-.598-.083 1.7 1.7 0 0 1-.498-.25 2 2 0 0 1-.395-.423l.418-.472q.277.39.531.54.255.15.604.15.215 0 .39-.068a.7.7 0 0 0 .277-.183.4.4 0 0 0 .102-.267.5.5 0 0 0-.034-.188.45.45 0 0 0-.107-.162.7.7 0 0 0-.181-.133 1.2 1.2 0 0 0-.255-.105 2 2 0 0 0-.338-.084 2.6 2.6 0 0 1-.531-.16 1.3 1.3 0 0 1-.379-.25 1 1 0 0 1-.226-.34 1.2 1.2 0 0 1-.073-.433q0-.234.101-.433.108-.201.289-.345.186-.15.435-.228a1.7 1.7 0 0 1 .536-.083q.306 0 .56.078a1.37 1.37 0 0 1 .779.605l-.43.417a1.3 1.3 0 0 0-.254-.306.9.9 0 0 0-.31-.188 1 1 0 0 0-.362-.067q-.22 0-.384.067a.6.6 0 0 0-.26.188.44.44 0 0 0-.09.278q0 .117.045.217.045.094.136.172.095.072.254.133.158.055.378.1.31.067.554.173.244.1.412.239a.9.9 0 0 1 .254.31q.09.174.09.373 0 .372-.174.644a1.15 1.15 0 0 1-.497.423q-.322.144-.769.144M17.333 28.978a1.7 1.7 0 0 1-.82-.195 1.5 1.5 0 0 1-.57-.544 1.54 1.54 0 0 1-.203-.789v-2.4h.61v2.35q0 .284.135.511.136.222.356.356a.95.95 0 0 0 .492.133 1.016 1.016 0 0 0 .876-.489 1 1 0 0 0 .135-.511v-2.35h.582v2.4q0 .44-.21.789-.203.345-.564.544-.361.195-.82.195M19.978 28.944v-3.888h1.65q.377 0 .638.11a.8.8 0 0 1 .39.334q.135.216.135.533t-.18.54a.9.9 0 0 1-.492.305v-.111q.265.055.463.2.198.138.305.35.113.21.113.483 0 .278-.09.494a.9.9 0 0 1-.26.356q-.169.144-.413.222a2 2 0 0 1-.553.072zm.61-.577h1.062q.231 0 .39-.067a.53.53 0 0 0 .248-.194.55.55 0 0 0 .09-.317.46.46 0 0 0-.095-.295.54.54 0 0 0-.26-.183 1.1 1.1 0 0 0-.401-.067h-1.034zm0-1.7h1.005a.65.65 0 0 0 .3-.067.5.5 0 0 0 .288-.45.46.46 0 0 0-.17-.383q-.169-.134-.485-.134h-.938z\" /></svg>;\nexport default SvgDbtNodeSubqueryDark;","import * as React from \"react\";\nconst SvgDbtNodeModel = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"currentColor\" rx={5} /><path fill=\"#FF754C\" fillRule=\"evenodd\" d=\"M11.821 9.371a.58.58 0 0 1 .764-.294l5.935 2.638 5.935-2.638a.578.578 0 1 1 .47 1.057l-6.17 2.743a.58.58 0 0 1-.47 0l-6.17-2.743a.58.58 0 0 1-.294-.763\" clipRule=\"evenodd\" /><path fill=\"#FF754C\" fillRule=\"evenodd\" d=\"M17.032 6.21a3.66 3.66 0 0 1 2.976 0l3.856 1.714a3.66 3.66 0 0 1 2.175 3.348v5.245c0 1.448-.852 2.76-2.175 3.348l-3.856 1.714a3.66 3.66 0 0 1-2.976 0l-3.856-1.714A3.66 3.66 0 0 1 11 16.517v-5.245c0-1.448.853-2.76 2.176-3.348zm2.506 1.057a2.5 2.5 0 0 0-2.036 0l-3.857 1.714a2.51 2.51 0 0 0-1.488 2.29v5.246c0 .99.583 1.888 1.488 2.29l3.857 1.715a2.5 2.5 0 0 0 2.036 0l3.856-1.714a2.51 2.51 0 0 0 1.489-2.29v-5.246c0-.99-.584-1.888-1.489-2.29z\" clipRule=\"evenodd\" /><path fill=\"#FF754C\" fillRule=\"evenodd\" d=\"M18.52 11.77c.32 0 .578.258.578.578v8.484a.578.578 0 1 1-1.157 0v-8.484c0-.32.26-.578.579-.578\" clipRule=\"evenodd\" /><path fill=\"#FF754C\" d=\"M21.637 29v-4.2h.78v3.48h1.938V29zM17.096 29v-4.2h1.686q.456 0 .822.15.372.15.636.433.27.282.408.666.144.384.144.852t-.144.858a1.9 1.9 0 0 1-.402.666 1.8 1.8 0 0 1-.636.426q-.372.15-.828.15zm.78-.605-.06-.114h.936q.294 0 .522-.096.234-.096.396-.276t.246-.432Q20 27.219 20 26.9t-.084-.57a1.16 1.16 0 0 0-.642-.714 1.3 1.3 0 0 0-.522-.096h-.954l.078-.102zM11.881 29v-4.2h.738l1.53 2.49-.432-.005 1.548-2.484h.702V29h-.774v-1.578q0-.54.024-.972.03-.432.096-.858l.096.258-1.302 2.01h-.396l-1.26-1.992.084-.276q.066.402.09.828.03.42.03 1.002V29z\" /></svg>;\nexport default SvgDbtNodeModel;","import * as React from \"react\";\nconst SvgDbtNodeSeed = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"currentColor\" rx={5} /><path fill=\"#01CD8C\" d=\"M22.85 10.907 20.214 8.41A1.5 1.5 0 0 0 19.181 8h-5.02c-.83 0-1.505.675-1.505 1.504v10.992c0 .829.676 1.504 1.504 1.504h7.656c.829 0 1.504-.675 1.504-1.504v-8.498c0-.41-.172-.81-.47-1.091m-.796.374h-2.042a.135.135 0 0 1-.137-.136V9.22zm-.238 9.899H14.16a.684.684 0 0 1-.683-.684V9.504c0-.377.306-.684.683-.684h4.895v2.325c0 .527.429.957.957.957H22.5v8.394a.684.684 0 0 1-.684.684\" /><path fill=\"#01CD8C\" d=\"M20.915 13.469h-6.016a.41.41 0 1 0 0 .82h6.016a.41.41 0 1 0 0-.82M20.915 15.656h-6.016a.41.41 0 1 0 0 .82h6.016a.41.41 0 1 0 0-.82M16.887 17.844h-1.988a.41.41 0 1 0 0 .82h1.988a.41.41 0 1 0 0-.82M21.719 27.942v-4.087h1.64q.444.001.8.146.363.147.619.42.262.276.397.649.14.373.14.829 0 .454-.14.834-.135.375-.391.648a1.75 1.75 0 0 1-.619.415q-.362.146-.806.146zm.759-.59-.059-.11h.911q.285 0 .508-.094.228-.093.385-.269.158-.174.24-.42.081-.25.081-.56t-.081-.555a1.13 1.13 0 0 0-.625-.695 1.3 1.3 0 0 0-.508-.093h-.928l.076-.1zM18.07 27.942v-4.087h2.674v.69h-1.926v2.708h1.95v.689zm.35-1.751v-.678h2.026v.678zM14.422 27.942v-4.087h2.674v.69h-1.927v2.708h1.95v.689zm.35-1.751v-.678h2.026v.678zM12.058 28q-.357 0-.654-.087a1.8 1.8 0 0 1-.537-.275 2 2 0 0 1-.426-.438l.496-.56q.285.396.56.549.275.15.62.151.197 0 .361-.058a.66.66 0 0 0 .257-.17.4.4 0 0 0 .053-.432.4.4 0 0 0-.111-.151 1 1 0 0 0-.187-.128 1.4 1.4 0 0 0-.251-.1 4 4 0 0 0-.31-.076q-.32-.064-.56-.169a1.5 1.5 0 0 1-.403-.268 1 1 0 0 1-.24-.362 1.3 1.3 0 0 1-.075-.462q0-.255.11-.473.118-.215.316-.373t.461-.245a1.8 1.8 0 0 1 .566-.088q.345 0 .613.082.274.081.48.245.21.158.344.385l-.502.497a1.2 1.2 0 0 0-.263-.298 1 1 0 0 0-.316-.181 1 1 0 0 0-.356-.064q-.21 0-.367.058a.55.55 0 0 0-.24.17.4.4 0 0 0-.087.256q0 .117.052.21.053.088.146.158.1.07.251.123.152.052.345.093.32.064.578.175.256.105.438.257.18.146.274.339a.9.9 0 0 1 .093.42q0 .402-.192.695-.187.285-.532.443-.345.152-.805.152\" /></svg>;\nexport default SvgDbtNodeSeed;","import * as React from \"react\";\nconst SvgDbtNodeSource = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"currentColor\" rx={5} /><path fill=\"#247EFE\" d=\"M24.397 10.569c-.014-.765-.715-1.445-1.979-1.915C21.286 8.234 19.785 8 18.2 8c-1.588 0-3.085.234-4.22.654-1.265.47-1.968 1.153-1.98 1.918v8.836c0 .776.704 1.462 1.98 1.938 1.135.423 2.632.654 4.22.654s3.086-.233 4.221-.654c1.276-.473 1.98-1.162 1.98-1.938v-8.816q-.005-.01-.004-.023m-.91 8.839c0 .686-2.061 1.681-5.29 1.681s-5.29-.995-5.29-1.681v-1.533q.439.298 1.07.535c1.138.42 2.635.653 4.223.653s3.089-.233 4.221-.653q.63-.237 1.069-.535v1.533zm0-2.951v.011c0 .686-2.061 1.682-5.29 1.682s-5.29-.996-5.29-1.682v-1.532q.439.297 1.07.534c1.135.423 2.632.654 4.22.654s3.086-.234 4.221-.654c.42-.155.777-.336 1.069-.534zm0-2.937v.012c0 .686-2.061 1.681-5.29 1.681s-5.29-.995-5.29-1.681v-1.533q.439.3 1.07.531c1.135.424 2.632.654 4.22.654s3.086-.233 4.221-.654a5 5 0 0 0 1.069-.53zM18.2 12.274c-3.228 0-5.29-.996-5.29-1.682s2.062-1.681 5.29-1.681 5.29.995 5.29 1.681c-.003.686-2.061 1.682-5.29 1.682M21.999 28.334q-.456 0-.834-.157a1.9 1.9 0 0 1-.654-.444 2.2 2.2 0 0 1-.432-.69q-.15-.401-.15-.875 0-.457.162-.846a2.1 2.1 0 0 1 .45-.684q.288-.295.672-.457a2.12 2.12 0 0 1 1.428-.072q.288.09.528.252.24.156.402.366l-.498.546a1.8 1.8 0 0 0-.324-.27 1.2 1.2 0 0 0-.342-.168 1.1 1.1 0 0 0-.36-.06 1.4 1.4 0 0 0-.522.103q-.24.1-.42.288a1.4 1.4 0 0 0-.276.444 1.5 1.5 0 0 0-.102.564q0 .318.096.576.102.258.282.444.186.185.438.288.258.096.564.096a1.37 1.37 0 0 0 .726-.204 1.7 1.7 0 0 0 .294-.234l.384.617a1.4 1.4 0 0 1-.384.294 2.34 2.34 0 0 1-1.128.283M16.092 28.27v-4.2h1.824q.378 0 .69.18.312.174.492.48.186.3.186.678 0 .36-.186.666a1.35 1.35 0 0 1-1.182.654h-1.062v1.542zm2.436 0-1.068-1.896.804-.15 1.188 2.052zm-1.674-2.22h1.068a.56.56 0 0 0 .3-.078.56.56 0 0 0 .204-.228.7.7 0 0 0 .072-.318.63.63 0 0 0-.09-.342.63.63 0 0 0-.252-.228.8.8 0 0 0-.372-.084h-.93zM13.662 28.332q-.366 0-.672-.09a1.8 1.8 0 0 1-.552-.282 2.1 2.1 0 0 1-.438-.45l.51-.576q.294.408.576.564t.636.156q.204 0 .372-.06a.7.7 0 0 0 .264-.174.41.41 0 0 0 .054-.444.4.4 0 0 0-.114-.156 1 1 0 0 0-.192-.132 1.4 1.4 0 0 0-.258-.102 4 4 0 0 0-.318-.078 2.8 2.8 0 0 1-.576-.174 1.5 1.5 0 0 1-.414-.276 1.1 1.1 0 0 1-.246-.372 1.4 1.4 0 0 1-.078-.474q0-.264.114-.486a1.2 1.2 0 0 1 .324-.384q.204-.162.474-.252t.582-.09q.354 0 .63.084.282.084.492.252.216.162.354.396l-.516.51a1.3 1.3 0 0 0-.27-.306 1 1 0 0 0-.324-.186 1 1 0 0 0-.366-.066q-.216 0-.378.06a.56.56 0 0 0-.246.174.4.4 0 0 0-.09.264q0 .12.054.216a.6.6 0 0 0 .15.162q.102.072.258.126t.354.096q.33.066.594.18.264.108.45.264.186.15.282.348a.95.95 0 0 1 .096.432q0 .414-.198.714-.192.294-.546.456a2 2 0 0 1-.828.156\" /></svg>;\nexport default SvgDbtNodeSource;","import * as React from \"react\";\nconst SvgDbtNodeExposure = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"currentColor\" rx={5} /><g fill=\"#EF5DA8\" clipPath=\"url(#dbt_node_exposure_svg__a)\"><path d=\"M23.04 9.144a.275.275 0 0 0-.39-.015.274.274 0 0 0-.004.394.276.276 0 0 0 .39.013.274.274 0 0 0 .005-.392\" /><path stroke=\"#EF5DA8\" strokeWidth={0.2} d=\"M21.474 8.68A6.33 6.33 0 0 0 18 7.647 6.36 6.36 0 0 0 11.647 14 6.36 6.36 0 0 0 18 20.353 6.36 6.36 0 0 0 24.353 14a6.34 6.34 0 0 0-.963-3.365l.085-.053zm0 0a.373.373 0 0 0 .517-.108m-.517.108.517-.108m0 0a.373.373 0 0 0-.108-.517m.108.517-.108-.517m0 0A7.07 7.07 0 0 0 18 6.9c-1.896 0-3.68.739-5.02 2.08m8.903-.925-8.903.925m0 0A7.05 7.05 0 0 0 10.9 14c0 1.896.739 3.68 2.08 5.02l.07-.07m-.07-9.97.07 9.97m0 0-.07.07A7.06 7.06 0 0 0 18 21.1c1.896 0 3.68-.739 5.02-2.08l-.07-.07.07.07A7.06 7.06 0 0 0 25.1 14a7.1 7.1 0 0 0-1.077-3.761z\" /><path d=\"M21.42 10.58a.436.436 0 0 0-.616 0l-2.638 2.639a1.395 1.395 0 0 0-1.873 1.873l-.165.165a.435.435 0 1 0 .616.616l.166-.167a1.395 1.395 0 0 0 1.87-1.87l2.64-2.64a.436.436 0 0 0 0-.615m-3.885 4.403a.52.52 0 0 1-.364-.148l-.003-.003-.005-.005a.52.52 0 0 1 .372-.89.523.523 0 0 1 0 1.046M17.018 17.854a.275.275 0 0 0-.387 0 .275.275 0 0 0 0 .386.275.275 0 0 0 .386 0 .275.275 0 0 0 0-.387M19.176 17.773H17.89a.273.273 0 0 0 0 .547h1.285a.273.273 0 1 0 0-.547\" /></g><path fill=\"#EF5DA8\" d=\"M12.681 28v-4.2h2.748v.708h-1.98v2.784h2.004V28zm.36-1.8v-.696h2.082v.696zm5.916 1.8-1.302-1.884-1.668-2.316h.972l1.272 1.86L19.93 28zm-3 0 1.602-2.286.552.474L16.87 28zm2.37-1.95-.546-.456 1.176-1.794h.912zM20.585 28v-4.2h1.746q.36 0 .649.174.293.174.468.474.174.3.174.672 0 .378-.174.684-.175.3-.468.48-.288.18-.649.18h-.965V28zm.78-2.256h.913q.15 0 .27-.084a.6.6 0 0 0 .198-.222.6.6 0 0 0 .078-.312.6.6 0 0 0-.079-.306.54.54 0 0 0-.198-.216.46.46 0 0 0-.27-.084h-.912z\" /><defs><clipPath id=\"dbt_node_exposure_svg__a\"><path fill=\"#fff\" d=\"M10 6h16v16H10z\" /></clipPath></defs></svg>;\nexport default SvgDbtNodeExposure;","import * as React from \"react\";\nconst SvgDbtNodeSnapshot = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"currentColor\" rx={5} /><path fill=\"#9B8AFF\" d=\"M22.636 20h-1.772c-.355 0-.591-.236-.591-.59 0-.355.236-.592.59-.592h1.773c.65 0 1.182-.532 1.182-1.182v-1.772c0-.355.236-.591.591-.591s.591.236.591.59v1.773A2.37 2.37 0 0 1 22.636 20m-6.5 0h-1.772A2.37 2.37 0 0 1 12 17.636v-1.772c0-.355.236-.591.59-.591.355 0 .592.236.592.59v1.773c0 .65.532 1.182 1.182 1.182h1.772c.355 0 .591.236.591.591s-.236.591-.59.591m2.364-4.136a2.37 2.37 0 0 1-2.364-2.364 2.37 2.37 0 0 1 2.364-2.364 2.37 2.37 0 0 1 2.364 2.364 2.37 2.37 0 0 1-2.364 2.364m0-3.546c-.65 0-1.182.532-1.182 1.182s.532 1.182 1.182 1.182 1.182-.532 1.182-1.182-.532-1.182-1.182-1.182m5.91-.59c-.355 0-.592-.237-.592-.592V9.364c0-.65-.532-1.182-1.182-1.182h-1.772c-.355 0-.591-.237-.591-.591 0-.355.236-.591.59-.591h1.773A2.37 2.37 0 0 1 25 9.364v1.772c0 .355-.236.591-.59.591m-11.82 0c-.354 0-.59-.237-.59-.592V9.364A2.37 2.37 0 0 1 14.364 7h1.772c.355 0 .591.236.591.59 0 .355-.236.592-.59.592h-1.773c-.65 0-1.182.532-1.182 1.182v1.772c0 .355-.237.591-.591.591M14.19 28.06q-.365 0-.671-.09a1.8 1.8 0 0 1-.552-.282 2.1 2.1 0 0 1-.438-.45l.51-.576q.294.408.576.564t.636.156q.204 0 .372-.06a.7.7 0 0 0 .264-.174.41.41 0 0 0 .054-.444.4.4 0 0 0-.114-.156 1 1 0 0 0-.192-.132 1.4 1.4 0 0 0-.258-.102 4 4 0 0 0-.318-.078 2.8 2.8 0 0 1-.576-.174 1.5 1.5 0 0 1-.414-.276 1.1 1.1 0 0 1-.246-.372 1.4 1.4 0 0 1-.078-.474q0-.264.114-.486a1.2 1.2 0 0 1 .324-.384q.204-.162.474-.252t.582-.09q.354 0 .63.084.282.084.492.252.216.162.354.396l-.516.51a1.3 1.3 0 0 0-.27-.306 1 1 0 0 0-.324-.186 1 1 0 0 0-.366-.066q-.216 0-.378.06a.56.56 0 0 0-.246.174.4.4 0 0 0-.09.264q0 .12.054.216a.6.6 0 0 0 .15.162q.102.072.258.126t.354.096q.33.066.594.18.264.108.45.264.186.15.282.348a.95.95 0 0 1 .096.432q0 .414-.198.714-.192.294-.546.456a2 2 0 0 1-.828.156m2.43-.06v-4.2h.703l2.436 3.282-.132.024a9 9 0 0 1-.042-.342l-.036-.372-.024-.402-.012-.438q-.006-.234-.006-.492V23.8h.774V28h-.714l-2.448-3.234.156-.042q.03.336.048.576a13 13 0 0 1 .054.69q.012.114.012.21.006.09.006.174V28zm4.788 0v-4.2h1.746q.36 0 .648.174.294.174.468.474t.174.672q0 .378-.174.684-.174.3-.468.48-.288.18-.648.18h-.966V28zm.78-2.256h.912q.15 0 .27-.084a.6.6 0 0 0 .198-.222.6.6 0 0 0 .078-.312.6.6 0 0 0-.078-.306.54.54 0 0 0-.198-.216.46.46 0 0 0-.27-.084h-.912z\" /></svg>;\nexport default SvgDbtNodeSnapshot;","import * as React from \"react\";\nconst SvgDbtNodeMetricsLight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"#E6EEF9\" rx={5} /><mask id=\"dbt_node_metrics_light_svg__a\" width={14} height={14} x={11} y={7} maskUnits=\"userSpaceOnUse\" style={{\n maskType: \"luminance\"\n }}><path fill=\"#fff\" d=\"M11 7h14v14H11z\" /></mask><g stroke=\"#004FBF\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit={10} strokeWidth={0.8} mask=\"url(#dbt_node_metrics_light_svg__a)\"><path d=\"M11.41 20.59h13.18M13.625 17.309h-1.094a.273.273 0 0 0-.273.273v3.008h1.64v-3.008a.273.273 0 0 0-.273-.273M16.906 16.324h-1.093a.273.273 0 0 0-.274.274v3.992h1.64v-3.992a.273.273 0 0 0-.273-.274M20.188 14.82h-1.094a.273.273 0 0 0-.274.274v5.496h1.64v-5.496a.273.273 0 0 0-.273-.274M23.469 12.086h-1.094a.273.273 0 0 0-.273.273v8.23h1.64v-8.23a.273.273 0 0 0-.273-.273M11.41 15.402c5.387 0 10.775-4.118 12.508-7.992\" /><path d=\"m21.412 8.083 2.507-.672.671 2.507\" /></g><path fill=\"#004FBF\" d=\"M12.771 28v-4.2h.738l1.53 2.49-.432-.006 1.548-2.484h.702V28h-.774v-1.578q0-.54.024-.972.03-.432.096-.858l.096.258-1.302 2.01h-.396l-1.26-1.992.084-.276q.066.402.09.828.03.42.03 1.002V28zm5.215 0v-4.2h2.748v.708h-1.98v2.784h2.004V28zm.36-1.8v-.696h2.082v.696zm4.23 1.8v-3.48h-1.2v-.72h3.216v.72h-1.236V28z\" /></svg>;\nexport default SvgDbtNodeMetricsLight;","import * as React from \"react\";\nconst SvgSqlFilter = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M18.54 3.248H5.46a2.21 2.21 0 0 0-1.68 3.65l5.17 6.03c.19.23.3.52.3.81v5.64c0 .61.31 1.17.83 1.49.28.17.6.26.92.26.27 0 .53-.06.78-.19l2-1c.6-.3.97-.9.97-1.57v-4.64c0-.3.11-.59.3-.81l5.17-6.03a2.21 2.21 0 0 0-1.68-3.65zm.54 2.67-5.17 6.03c-.43.5-.66 1.13-.66 1.79v4.64c0 .1-.05.18-.14.22l-2 1c-.11.06-.2.02-.24-.01s-.12-.09-.12-.21v-5.64c0-.66-.23-1.29-.66-1.79l-5.17-6.03a.7.7 0 0 1-.17-.46c0-.39.32-.71.71-.71h13.08c.39 0 .71.32.71.71 0 .17-.06.33-.17.46\" /></svg>;\nexport default SvgSqlFilter;","import * as React from \"react\";\nconst SvgSqlGroupBy = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M18.93 14.5a3.5 3.5 0 0 0-.812.098L14.54 8.395a3.498 3.498 0 1 0-5.082.003l-3.577 6.2A3.5 3.5 0 1 0 8.407 19h7.186a3.492 3.492 0 1 0 3.337-4.5M12 4.5a1.499 1.499 0 1 1-.385 2.948 1.4 1.4 0 0 1-.368-.156A1.497 1.497 0 0 1 12 4.499m-.814 4.905c.023.005.047.003.07.008a3.3 3.3 0 0 0 1.496 0c.02-.005.041-.003.061-.008l3.574 6.194c-.013.014-.021.03-.034.045q-.259.279-.453.607v.002a3.5 3.5 0 0 0-.298.686c-.007.021-.02.04-.026.06H8.424c-.006-.02-.019-.037-.025-.056a3.5 3.5 0 0 0-.767-1.319l-.019-.025zM5.07 19.5a1.5 1.5 0 1 1 0-3c.266-.002.526.07.753.208A1.497 1.497 0 0 1 5.07 19.5m13.86 0a1.496 1.496 0 0 1-.74-2.8c.223-.133.48-.203.74-.2a1.5 1.5 0 0 1 0 3\" /></svg>;\nexport default SvgSqlGroupBy;","import * as React from \"react\";\nconst SvgSqlInnerJoin = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path stroke=\"#247EFE\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M13.75 12a5.25 5.25 0 1 1-10.5 0 5.25 5.25 0 0 1 10.5 0\" /><path stroke=\"#247EFE\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M20.75 12a5.25 5.25 0 1 1-10.5 0 5.25 5.25 0 0 1 10.5 0\" /><path fill=\"#247EFE\" d=\"M14.4 12c0-1.982-.95-3.726-2.4-4.8A5.96 5.96 0 0 0 9.6 12c0 1.98.95 3.725 2.4 4.8a5.96 5.96 0 0 0 2.4-4.8\" /></svg>;\nexport default SvgSqlInnerJoin;","import * as React from \"react\";\nconst SvgSqlLeftJoin = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M12 16.24c.13.11.27.21.41.31.14.09.29.18.44.26.78.44 1.69.69 2.65.69 3.03 0 5.5-2.47 5.5-5.5s-2.47-5.5-5.5-5.5c-.96 0-1.87.25-2.65.69-.15.08-.3.17-.44.26-.14.1-.28.2-.41.31a6 6 0 0 0-.41-.31 6 6 0 0 0-.44-.26c.13-.13.27-.24.41-.35s.29-.21.44-.31a6.45 6.45 0 0 1 3.5-1.03c3.58 0 6.5 2.92 6.5 6.5s-2.92 6.5-6.5 6.5a6.45 6.45 0 0 1-3.94-1.34c-.14-.11-.28-.22-.41-.35.15-.08.3-.17.44-.26.14-.1.28-.2.41-.31\" /><path fill=\"#247EFE\" d=\"M8.5 5.5a6.45 6.45 0 0 1 3.94 1.34c.14.11.28.22.41.35A6.44 6.44 0 0 1 15 12c0 1.91-.83 3.63-2.15 4.81-.13.13-.27.24-.41.35s-.29.21-.44.31a6.45 6.45 0 0 1-3.5 1.03C4.92 18.5 2 15.58 2 12s2.92-6.5 6.5-6.5M12 16.24c-1.22-1.01-2-2.54-2-4.24s.78-3.23 2-4.24a6 6 0 0 0-.41-.31 6 6 0 0 0-.44-.26A6.44 6.44 0 0 0 9 12c0 1.91.83 3.63 2.15 4.81.15-.08.3-.17.44-.26.14-.1.28-.2.41-.31\" /></svg>;\nexport default SvgSqlLeftJoin;","import * as React from \"react\";\nconst SvgSqlLimit = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M22 13.795a9.58 9.58 0 0 1-2.02 5.901.79.79 0 0 1-1.094.149.756.756 0 0 1-.151-1.072 8.08 8.08 0 0 0 1.703-4.978c0-4.57-3.777-8.264-8.438-8.264-4.664 0-8.437 3.697-8.437 8.264a8.08 8.08 0 0 0 1.702 4.978.755.755 0 0 1-.151 1.072.79.79 0 0 1-1.095-.149A9.58 9.58 0 0 1 2 13.794C2 8.378 6.476 4 12 4c5.527 0 10 4.381 10 9.795m-5.05-4.611a.755.755 0 0 1 0 1.083l-2.546 2.495c.21.379.329.812.329 1.272 0 1.477-1.226 2.678-2.733 2.678s-2.733-1.2-2.733-2.677 1.226-2.678 2.733-2.678c.47 0 .912.117 1.299.322l2.546-2.495a.793.793 0 0 1 1.105 0m-3.78 4.85A1.16 1.16 0 0 0 12 12.889a1.16 1.16 0 0 0-1.17 1.147A1.16 1.16 0 0 0 12 15.18a1.16 1.16 0 0 0 1.17-1.146\" /></svg>;\nexport default SvgSqlLimit;","import * as React from \"react\";\nconst SvgSqlOrderBy = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M7 6.25a1.22 1.22 0 0 1-.88-.37L5 4.77 3.88 5.88a1.23 1.23 0 0 1-1.76 0 1.23 1.23 0 0 1 0-1.76l2-2a1.23 1.23 0 0 1 1.76 0l2 2A1.25 1.25 0 0 1 7 6.25M5 22.25a1.22 1.22 0 0 1-.88-.37l-2-2A1.25 1.25 0 0 1 3 17.75a1.22 1.22 0 0 1 .88.37L5 19.23l1.12-1.11a1.245 1.245 0 0 1 1.76 1.76l-2 2a1.22 1.22 0 0 1-.88.37\" /><path fill=\"#247EFE\" d=\"M5 22.25A1.25 1.25 0 0 1 3.75 21V3a1.25 1.25 0 0 1 2.5 0v18A1.25 1.25 0 0 1 5 22.25M11 6.25a1.25 1.25 0 0 1 0-2.5h10a1.25 1.25 0 0 1 0 2.5zM11 11.25a1.25 1.25 0 0 1 0-2.5h8a1.25 1.25 0 0 1 0 2.5zM11 16.25a1.25 1.25 0 0 1 0-2.5h6a1.25 1.25 0 0 1 0 2.5zM11 21.25a1.25 1.25 0 0 1 0-2.5h4a1.25 1.25 0 0 1 0 2.5z\" /></svg>;\nexport default SvgSqlOrderBy;","import * as React from \"react\";\nconst SvgSqlOuterJoin = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M15.5 6c-1.31 0-2.51.42-3.5 1.13A5.97 5.97 0 0 0 8.5 6c-3.31 0-6 2.69-6 6s2.69 6 6 6c1.31 0 2.51-.42 3.5-1.13A5.97 5.97 0 0 0 15.5 18c3.31 0 6-2.69 6-6s-2.69-6-6-6\" /><path fill=\"#fff\" d=\"M14.4 12c0-1.975-.948-3.721-2.4-4.8A5.94 5.94 0 0 0 9.6 12c0 1.982.948 3.72 2.4 4.8a5.94 5.94 0 0 0 2.4-4.8\" /></svg>;\nexport default SvgSqlOuterJoin;","import * as React from \"react\";\nconst SvgSqlRightJoin = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M12 16.24c-.13.11-.27.21-.41.31-.14.09-.29.18-.44.26-.78.44-1.69.69-2.65.69A5.51 5.51 0 0 1 3 12c0-3.03 2.47-5.5 5.5-5.5.96 0 1.87.25 2.65.69.15.08.3.17.44.26.14.1.28.2.41.31.13-.11.27-.21.41-.31.14-.09.29-.18.44-.26-.13-.13-.27-.24-.41-.35s-.29-.21-.44-.31A6.45 6.45 0 0 0 8.5 5.5C4.92 5.5 2 8.42 2 12s2.92 6.5 6.5 6.5a6.45 6.45 0 0 0 3.94-1.34c.14-.11.28-.22.41-.35-.15-.08-.3-.17-.44-.26-.14-.1-.28-.2-.41-.31\" /><path fill=\"#247EFE\" d=\"M15.5 5.5a6.45 6.45 0 0 0-3.94 1.34c-.14.11-.28.22-.41.35A6.44 6.44 0 0 0 9 12c0 1.91.83 3.63 2.15 4.81.13.13.27.24.41.35s.29.21.44.31c1.01.65 2.21 1.03 3.5 1.03 3.58 0 6.5-2.92 6.5-6.5s-2.92-6.5-6.5-6.5M12 16.24c1.22-1.01 2-2.54 2-4.24s-.78-3.23-2-4.24c.13-.11.27-.21.41-.31.14-.09.29-.18.44-.26A6.44 6.44 0 0 1 15 12c0 1.91-.83 3.63-2.15 4.81-.15-.08-.3-.17-.44-.26-.14-.1-.28-.2-.41-.31\" /></svg>;\nexport default SvgSqlRightJoin;","import * as React from \"react\";\nconst SvgSqlCrossJoin = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" stroke=\"#fff\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={0.4} d=\"M14.717 12a6.8 6.8 0 1 1-13.6 0 6.8 6.8 0 0 1 13.6 0\" /><path fill=\"#247EFE\" stroke=\"#fff\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={0.4} d=\"M22.884 12a6.8 6.8 0 1 1-13.6 0 6.8 6.8 0 0 1 13.6 0\" /><path fill=\"#247EFE\" stroke=\"#fff\" strokeWidth={0.6} d=\"M9.5 11.998c0-2.13.984-4.014 2.5-5.221a6.65 6.65 0 0 1 2.5 5.221c0 2.131-.983 4.015-2.5 5.222a6.65 6.65 0 0 1-2.5-5.222Z\" /><path stroke=\"#fff\" strokeLinecap=\"round\" strokeWidth={0.6} d=\"M18.137 15.574 5.9 8.51M5.9 15.57l12.237-7.065\" /></svg>;\nexport default SvgSqlCrossJoin;","import * as React from \"react\";\nconst SvgSqlLateralJoin = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M12 15.727a2.64 2.64 0 0 0-2.584 3.164H6.164v-1.4l.33.331a.527.527 0 0 0 .746-.746l-1.23-1.23a.527.527 0 0 0-.746 0l-1.23 1.23a.527.527 0 0 0 .745.746l.33-.33v1.926c0 .291.236.527.528.527h4.255a2.634 2.634 0 0 0 4.745-1.582A2.64 2.64 0 0 0 12 15.727m0 4.218c-.872 0-1.582-.71-1.582-1.582s.71-1.582 1.582-1.582 1.582.71 1.582 1.582-.71 1.582-1.582 1.582M8.273 12A2.64 2.64 0 0 0 5.11 9.416V6.164h1.4l-.331.33a.527.527 0 1 0 .746.746l1.23-1.23a.527.527 0 0 0 0-.746l-1.23-1.23a.527.527 0 1 0-.746.745l.33.33H4.582a.527.527 0 0 0-.527.528v4.255a2.634 2.634 0 0 0 1.582 4.745A2.64 2.64 0 0 0 8.273 12m-4.218 0c0-.872.71-1.582 1.582-1.582s1.582.71 1.582 1.582-.71 1.582-1.582 1.582-1.582-.71-1.582-1.582M21 12a2.64 2.64 0 0 0-2.637-2.637A2.64 2.64 0 0 0 15.727 12a2.64 2.64 0 0 0 3.164 2.584v3.252h-1.4l.331-.33a.527.527 0 0 0-.746-.746l-1.23 1.23a.527.527 0 0 0 0 .746l1.23 1.23a.527.527 0 1 0 .746-.745l-.33-.33h1.926a.527.527 0 0 0 .527-.528v-4.255A2.63 2.63 0 0 0 21 12m-2.637 1.582c-.872 0-1.582-.71-1.582-1.582s.71-1.582 1.582-1.582 1.582.71 1.582 1.582-.71 1.582-1.582 1.582M17.836 5.11v1.398l-.33-.33a.527.527 0 0 0-.746.746l1.23 1.23c.206.206.54.206.746 0l1.23-1.23a.527.527 0 1 0-.745-.746l-.33.33V4.582a.527.527 0 0 0-.528-.527h-4.255A2.63 2.63 0 0 0 12 3a2.64 2.64 0 0 0-2.637 2.637A2.64 2.64 0 0 0 12 8.273a2.64 2.64 0 0 0 2.584-3.164zM12 7.218c-.872 0-1.582-.71-1.582-1.582s.71-1.582 1.582-1.582 1.582.71 1.582 1.582-.71 1.582-1.582 1.582\" /></svg>;\nexport default SvgSqlLateralJoin;","import * as React from \"react\";\nconst SvgSqlFullJoin = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 40 40\" {...props}><path fill=\"#247EFE\" d=\"M24.383 20c0-3.517-1.733-6.634-4.383-8.534-2.65 1.917-4.383 5.017-4.383 8.534 0 3.516 1.733 6.633 4.383 8.533 2.65-1.917 4.383-5.017 4.383-8.533\" /><path fill=\"#247EFE\" d=\"M15.617 20c0-3.517 1.733-6.634 4.383-8.534a10.45 10.45 0 0 0-6.133-1.983C8.05 9.483 3.333 14.2 3.333 20.016c0 5.817 4.717 10.534 10.534 10.534 2.3 0 4.416-.75 6.133-1.984-2.65-1.916-4.383-5.016-4.383-8.533zM26.133 9.466c-2.3 0-4.416.75-6.133 1.984 2.65 1.916 4.383 5.016 4.383 8.533S22.65 26.616 20 28.516a10.45 10.45 0 0 0 6.133 1.984c5.817 0 10.534-4.717 10.534-10.534 0-5.816-4.717-10.533-10.534-10.533z\" /><path fill=\"#fff\" d=\"M20 13.633C21.717 15.3 22.717 17.6 22.717 20s-1 4.716-2.717 6.366C18.283 24.7 17.283 22.4 17.283 20s1-4.717 2.717-6.367m0-2.167c-2.65 1.917-4.383 5.017-4.383 8.534 0 3.516 1.733 6.633 4.383 8.533 2.65-1.917 4.383-5.017 4.383-8.533 0-3.517-1.733-6.634-4.383-8.534\" /></svg>;\nexport default SvgSqlFullJoin;","import * as React from \"react\";\nconst SvgSqlUnion = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M19 8h-3V5a3 3 0 0 0-3-3H5a3 3 0 0 0-3 3v8a3 3 0 0 0 3 3h3v3a3 3 0 0 0 3 3h8a3 3 0 0 0 3-3v-8a3 3 0 0 0-3-3m1 11a1 1 0 0 1-1 1h-8a1 1 0 0 1-1-1v-4a1 1 0 0 0-1-1H5a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v4a1 1 0 0 0 1 1h4a1 1 0 0 1 1 1z\" /></svg>;\nexport default SvgSqlUnion;","import * as React from \"react\";\nconst SvgSqlSelect = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 15\" {...props}><path fill=\"#247EFE\" d=\"M14.167 15H1.833C.822 15 0 14.16 0 13.125V1.875C0 .841.822 0 1.833 0h12.334C15.178 0 16 .84 16 1.875v11.25C16 14.16 15.178 15 14.167 15M1.833 1.023A.844.844 0 0 0 1 1.875v11.25c0 .47.374.852.833.852h12.334c.459 0 .833-.382.833-.852V1.875a.844.844 0 0 0-.833-.852z\" /><path fill=\"#247EFE\" d=\"M15.5 5H.5a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1\" /><path fill=\"#247EFE\" d=\"M8 15a.51.51 0 0 1-.5-.516V4.516C7.5 4.23 7.724 4 8 4s.5.231.5.516v9.968A.51.51 0 0 1 8 15\" /></svg>;\nexport default SvgSqlSelect;","import * as React from \"react\";\nconst SvgAlertError = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 12 12\" {...props}><circle cx={6} cy={6} r={6} fill=\"#CC3E44\" /><path fill=\"#fff\" d=\"M9.076 6.937 6.796 2.99a.97.97 0 0 0-1.685 0l-2.28 3.948A.974.974 0 0 0 3.672 8.4h4.552c.752 0 1.223-.818.85-1.463m-3.124.587a.366.366 0 0 1-.363-.363c0-.198.165-.363.363-.363.199 0 .363.165.355.373.01.188-.164.353-.355.353m.331-2.346-.05.842c-.007.091-.007.174-.007.264a.273.273 0 0 1-.274.264.267.267 0 0 1-.273-.256c-.024-.438-.05-.868-.073-1.306L5.58 4.64c0-.19.107-.347.281-.396a.364.364 0 0 1 .422.206.4.4 0 0 1 .034.182c-.008.184-.026.366-.034.547\" /></svg>;\nexport default SvgAlertError;","import * as React from \"react\";\nconst SvgFunction = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" d=\"M5.5 2A1.5 1.5 0 0 0 4 3.5v2A1.5 1.5 0 0 1 2.5 7H2v2h.5A1.5 1.5 0 0 1 4 10.5v2A1.5 1.5 0 0 0 5.5 14H6v-2h-.5a.5.5 0 0 1-.5-.5v-2A1.5 1.5 0 0 0 3.5 8 1.5 1.5 0 0 0 5 6.5v-2a.5.5 0 0 1 .5-.5H6V2zM10.5 2A1.5 1.5 0 0 1 12 3.5v2A1.5 1.5 0 0 0 13.5 7h.5v2h-.5a1.5 1.5 0 0 0-1.5 1.5v2a1.5 1.5 0 0 1-1.5 1.5H10v-2h.5a.5.5 0 0 0 .5-.5v-2A1.5 1.5 0 0 1 12.5 8 1.5 1.5 0 0 1 11 6.5v-2a.5.5 0 0 0-.5-.5H10V2zM7 6h2v1.25H7.75v1.5H9V10H7z\" /></svg>;\nexport default SvgFunction;","import * as React from \"react\";\nconst SvgDbtNodeFunction = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"currentColor\" rx={5} /><path fill=\"#a78bfa\" d=\"M14.5 8A1.5 1.5 0 0 0 13 9.5v2a1.5 1.5 0 0 1-1.5 1.5H11v2h.5a1.5 1.5 0 0 1 1.5 1.5v2a1.5 1.5 0 0 0 1.5 1.5h.5v-2h-.5a.5.5 0 0 1-.5-.5v-2a1.5 1.5 0 0 0-1.5-1.5 1.5 1.5 0 0 0 1.5-1.5v-2a.5.5 0 0 1 .5-.5h.5V8zM21.5 8A1.5 1.5 0 0 1 23 9.5v2a1.5 1.5 0 0 0 1.5 1.5h.5v2h-.5a1.5 1.5 0 0 0-1.5 1.5v2a1.5 1.5 0 0 1-1.5 1.5H21v-2h.5a.5.5 0 0 0 .5-.5v-2a1.5 1.5 0 0 1 1.5-1.5 1.5 1.5 0 0 1-1.5-1.5v-2a.5.5 0 0 0-.5-.5H21V8zM16.5 12h3v1.5h-2v2h2V17h-3z\" /><g fill=\"#a78bfa\"><path d=\"M14.256 29v-4.2h2.748v.709h-1.98V27.2h1.848v.696h-1.848V29zM18.17 29v-4.2h.703l2.436 3.283-.132.024a9 9 0 0 1-.042-.342l-.036-.372-.024-.402-.012-.438q-.006-.234-.006-.492V24.8h.774V29h-.714l-2.448-3.234.156-.042q.03.336.048.576a13 13 0 0 1 .054.69q.012.114.012.21.006.09.006.174V29z\" /></g></svg>;\nexport default SvgDbtNodeFunction;","import * as React from \"react\";\nconst SvgBolt = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={13} height={12} fill=\"none\" viewBox=\"0 0 13 12\" {...props}><g clipPath=\"url(#bolt_svg__a)\"><path fill=\"currentColor\" d=\"M5.556 12a.35.35 0 0 1-.341-.436l1.189-4.786H3.2a.352.352 0 0 1-.327-.478L5.223.225A.35.35 0 0 1 5.55 0h3.234a.352.352 0 0 1 .321.493L7.714 3.652h2.752a.352.352 0 0 1 .296.541l-4.91 7.645a.35.35 0 0 1-.296.162\" /></g><defs><clipPath id=\"bolt_svg__a\"><path fill=\"currentColor\" d=\"M.833 0h12v12h-12z\" /></clipPath></defs></svg>;\nexport default SvgBolt;","import * as React from \"react\";\nconst SvgDbt = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 103 103\" {...props}><path fill=\"#FF694A\" d=\"M98.23 4.285c2.407 2.327 3.99 5.405 4.357 8.749 0 1.399-.367 2.327-1.203 4.094s-11.134 19.647-14.2 24.58c-1.76 2.887-2.685 6.333-2.685 9.69s.925 6.803 2.686 9.69c3.065 4.934 13.363 22.914 14.199 24.682s1.203 2.606 1.203 4.005c-.367 3.357-1.849 6.422-4.268 8.66-2.318 2.416-5.384 4.005-8.627 4.285-1.393 0-2.317-.369-3.99-1.208-1.671-.839-19.848-10.897-24.763-13.975-.367-.19-.747-.47-1.203-.648L35.429 72.456c.557 4.654 2.596 9.13 5.94 12.385a19 19 0 0 0 2.04 1.768c-.558.28-1.204.56-1.761.928-4.915 3.078-22.825 13.416-24.586 14.255S14.465 103 12.983 103c-3.344-.369-6.396-1.857-8.626-4.285C1.951 96.388.367 93.31 0 89.966c.089-1.399.469-2.797 1.203-4.005.836-1.768 11.134-19.748 14.2-24.682 1.76-2.887 2.685-6.244 2.685-9.69s-.925-6.803-2.686-9.69C12.338 36.775 1.951 18.807 1.204 17.04.456 15.832.09 14.434 0 13.035c.367-3.357 1.85-6.422 4.269-8.749C6.574 1.857 9.627.37 12.97 0a9.4 9.4 0 0 1 4.078 1.208c1.482.649 14.567 8.29 21.521 12.386l1.583.928c.558.368 1.026.648 1.394.839l.747.47 24.763 14.713c-.557-5.582-3.432-10.707-7.891-14.153.557-.28 1.203-.56 1.76-.928 4.915-3.078 22.826-13.505 24.587-14.255C86.716.47 88.109.089 89.59 0a14.13 14.13 0 0 1 8.626 4.285zM52.592 58.112l5.282-5.302c.747-.75.747-1.857 0-2.607L52.592 44.9c-.748-.75-1.85-.75-2.597 0l-5.282 5.303c-.747.75-.747 1.856 0 2.607l5.282 5.302c.646.649 1.85.649 2.597 0M98.23 4.285c2.407 2.327 3.99 5.405 4.357 8.749 0 1.399-.367 2.327-1.203 4.094s-11.134 19.647-14.2 24.58c-1.76 2.887-2.685 6.333-2.685 9.69s.925 6.803 2.686 9.69c3.065 4.934 13.363 22.914 14.199 24.682s1.203 2.606 1.203 4.005c-.367 3.357-1.849 6.422-4.268 8.66-2.318 2.416-5.384 4.005-8.627 4.285-1.393 0-2.317-.369-3.99-1.208-1.671-.839-19.848-10.897-24.763-13.975-.367-.19-.747-.47-1.203-.648L35.429 72.456c.557 4.654 2.596 9.13 5.94 12.385a19 19 0 0 0 2.04 1.768c-.558.28-1.204.56-1.761.928-4.915 3.078-22.825 13.416-24.586 14.255S14.465 103 12.983 103c-3.344-.369-6.396-1.857-8.626-4.285C1.951 96.388.367 93.31 0 89.966c.089-1.399.469-2.797 1.203-4.005.836-1.768 11.134-19.748 14.2-24.682 1.76-2.887 2.685-6.244 2.685-9.69s-.925-6.803-2.686-9.69C12.338 36.775 1.951 18.807 1.204 17.04.456 15.832.09 14.434 0 13.035c.367-3.357 1.85-6.422 4.269-8.749C6.574 1.857 9.627.37 12.97 0a9.4 9.4 0 0 1 4.078 1.208c1.482.649 14.567 8.29 21.521 12.386l1.583.928c.558.368 1.026.648 1.394.839l.747.47 24.763 14.713c-.557-5.582-3.432-10.707-7.891-14.153.557-.28 1.203-.56 1.76-.928 4.915-3.078 22.826-13.505 24.587-14.255C86.716.47 88.109.089 89.59 0a14.13 14.13 0 0 1 8.626 4.285zM52.592 58.112l5.282-5.302c.747-.75.747-1.857 0-2.607L52.592 44.9c-.748-.75-1.85-.75-2.597 0l-5.282 5.303c-.747.75-.747 1.856 0 2.607l5.282 5.302c.646.649 1.85.649 2.597 0\" /></svg>;\nexport default SvgDbt;","import BoltIcon from \"./bolt.svg?react\";\nimport BracketsIcon from \"./brackets.svg?url\";\nimport HalfCircleIcon from \"./half-circle.svg?url\";\nimport CaseSensitiveIcon from \"./case-sensitive.svg?url\";\nimport SplitHorizontalIcon from \"./split-horizontal.svg?url\";\n\nimport { HTMLAttributes } from \"react\";\n\nexport { default as ThinkingIcon } from \"./thinking.svg?react\";\nexport { default as CircleIcon } from \"./circle.svg?react\";\nexport { default as DownloadIcon } from \"./download.svg?react\";\nexport { default as ArrowRightIcon } from \"./arrow-right.svg?react\";\nexport { default as DatabaseIcon } from \"./database.svg?react\";\nexport { default as GitMergeIcon } from \"./git-merge.svg?react\";\nexport { default as ArrowLeftIcon } from \"./arrow-left.svg?react\";\nexport { default as DbtIcon } from \"./dbt.svg?react\";\n\ninterface Props {\n icon: string;\n}\nconst Icon = ({\n icon,\n className = \"\",\n ...rest\n}: Props & HTMLAttributes<HTMLElement>) => (\n <i className={`${className} codicon codicon-${icon}`} {...rest} />\n);\n\nexport const RemoveIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"remove\" {...props} />\n);\n\nexport const CodeIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"code\" {...props} />\n);\n\nexport const AddIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"add\" {...props} />\n);\n\nexport const DeleteIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"trash\" {...props} />\n);\n\nexport const GlobeIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"globe\" {...props} />\n);\n\nexport const GithubIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"github-inverted\" {...props} />\n);\n\nexport const FilesIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"files\" {...props} />\n);\n\nexport const CommentAddIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"comment-add\" {...props} />;\n\nexport const CommentDiscussionIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"comment-discussion\" {...props} />;\n\nexport const CommentUnresolvedIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"comment-unresolved\" {...props} />;\n\nexport const CheckNoOutlineIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"check\" {...props} />;\n\nexport const CheckedIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"pass-filled\" {...props} />;\n\nexport const PassIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"pass\" {...props} />\n);\n\nexport const RefreshIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"debug-restart\" {...props} />;\n\nexport const SettingsIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"gear\" {...props} />;\n\nexport const ChevronUpIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"chevron-up\" {...props} />;\n\nexport const ChevronDownIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"chevron-down\" {...props} />;\n\nexport const ChevronRightIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"chevron-right\" {...props} />;\n\nexport const ChevronLeftIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"chevron-left\" {...props} />;\n\nexport const MoreIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"more\" {...props} />\n);\n\nexport const InfoCircleIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"info\" {...props} />;\n\nexport const AskIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"send\" {...props} />\n);\n\nexport const CloseIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"close\" {...props} />\n);\n\nexport const EditIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"pencil\" {...props} />\n);\n\nexport const ShareIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"share\" {...props} />\n);\n\nexport const SearchIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"search\" {...props} />\n);\n\nexport const FileIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"file\" {...props} />\n);\n\nexport const WarningIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"warning\" {...props} />;\n\nexport const SendIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"send\" {...props} />\n);\n\nexport {\n BoltIcon,\n BracketsIcon,\n HalfCircleIcon,\n SplitHorizontalIcon,\n CaseSensitiveIcon,\n};\n","import { VIEWS_TYPE_COLOR, ViewsTypes } from \"../utils\";\nimport styles from \"./styles.module.scss\";\nimport { Tooltip } from \"@altimateai/lego\";\n\nconst ViewsTypeBadge = ({ viewsType }: { viewsType: string }) => (\n <Tooltip title={viewsType}>\n <div\n style={{\n [\"--views-color\" as string]: VIEWS_TYPE_COLOR[viewsType as ViewsTypes],\n }}\n className={styles.views_type_badge}\n >\n {viewsType[0]}\n </div>\n </Tooltip>\n);\n\nexport default ViewsTypeBadge;\n","import { VIEWS_TYPE_COLOR } from \"../utils\";\nimport styles from \"./styles.module.scss\";\nimport { useEffect, useState } from \"react\";\nimport { UpIcon, DownIcon } from \"../assets/icons\";\nimport { CodeIcon } from \"../../../assets/icons\";\nimport ViewsTypeBadge from \"./ViewsTypeBadge\";\nimport { Button, PopoverTrigger, Popover, PopoverContent } from \"@altimateai/lego\";\nimport { Stack } from \"@altimateai/lego\";\n\nconst LineageLegend = () => {\n const [showLegend, setShowLegend] = useState(false);\n useEffect(() => {\n setTimeout(() => {\n setShowLegend(true);\n }, 500);\n const id = setTimeout(() => {\n setShowLegend(false);\n }, 3500);\n return () => clearTimeout(id);\n }, []);\n\n return (\n <Popover open={showLegend} onOpenChange={setShowLegend}>\n <PopoverTrigger asChild>\n <Button className={styles.lineage_legend} variant=\"outline\">\n Legend\n {showLegend ? <DownIcon /> : <UpIcon />}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"al-tw-scope\">\n {Object.keys(VIEWS_TYPE_COLOR).map(k => (\n <Stack key={k} direction=\"row\" gap=\"sm\" align=\"center\" className=\"mb-1\">\n <ViewsTypeBadge viewsType={k} />\n <div>{k}</div>\n </Stack>\n ))}\n <Stack direction=\"row\" gap=\"sm\" align=\"center\" className=\"mb-1\">\n <div className={styles.column_code_icon}>\n <CodeIcon />\n </div>\n <div>Code</div>\n </Stack>\n <Stack direction=\"row\" gap=\"sm\" align=\"center\" className=\"mb-1\">\n <div className={styles.edge_select}>\n <div />\n </div>\n <div>Select</div>\n </Stack>\n <Stack direction=\"row\" gap=\"sm\" align=\"center\" className=\"mb-1\">\n <div className={styles.edge_non_select}>\n <div />\n </div>\n <div>Non select</div>\n </Stack>\n </PopoverContent>\n </Popover>\n );\n};\n\nexport default LineageLegend;\n","import { useCallback, useEffect, useState } from \"react\";\n\ninterface Props<R> {\n queryFn: () => Promise<R>;\n enabled?: boolean;\n}\n\nconst useQuery = <R>({ queryFn, enabled = true }: Props<R>) => {\n const [error, setError] = useState<Error | undefined>();\n const [loading, setLoading] = useState(false);\n const [data, setData] = useState<R | undefined>();\n\n const fetchData = useCallback(async () => {\n setLoading(true);\n try {\n const response = (await queryFn()) as R;\n setData(response);\n } catch (error) {\n setError(error as Error);\n } finally {\n setLoading(false);\n }\n }, [queryFn]);\n\n useEffect(() => {\n if (enabled) {\n fetchData();\n }\n }, [fetchData, enabled]);\n\n const refetch = () => {\n fetchData();\n };\n\n return {\n error,\n data,\n loading,\n refetch,\n };\n};\n\nexport default useQuery;\n","import { useState } from \"react\";\n\ninterface Props<TArgs, TResponse> {\n queryFn: (args: TArgs) => Promise<TResponse>;\n onSuccess?: (data: TResponse) => void;\n}\n\nconst useMutation = <TArgs = void, TResponse = void>({\n queryFn,\n onSuccess,\n}: Props<TArgs, TResponse>) => {\n const [error, setError] = useState<Error | undefined>();\n const [loading, setLoading] = useState(false);\n const [data, setData] = useState<TResponse | undefined>();\n\n const mutate = async (args: TArgs) => {\n setLoading(true);\n try {\n const response = await queryFn(args);\n setData(response);\n onSuccess?.(response);\n } catch (error) {\n setError(error as Error);\n } finally {\n setLoading(false);\n }\n };\n\n return {\n error,\n data,\n loading,\n mutate,\n };\n};\n\nexport default useMutation;\n","export const ApiHelper = {\n get: async <T>(_url: string, _data?: Record<string, unknown>, _request?: RequestInit) =>\n ({}) as T,\n post: async <T>(_url: string, _data: Record<string, unknown>, _request?: RequestInit) =>\n ({}) as T,\n};\n\nexport { default as useQuery } from \"./useQuery\";\nexport { default as useMutation } from \"./useMutation\";\n","import { ApiHelper } from \"../../api/index\";\nimport {\n ColumnLineage,\n Columns,\n DbtInfoResponse,\n ExposureMetaData,\n FunctionMetaData,\n SnowflakeStageMetadata,\n StaticLineage,\n Table,\n} from \"../types\";\nimport { CllEvents } from \"../cllUtils\";\n\ninterface ColumnLineageResponse {\n column_lineage: ColumnLineage[];\n confidence?: { confidence: string; operator_list?: string[] };\n errors?: Record<string, string[]>;\n}\n\ninterface LineageSettings {\n showSelectEdges: boolean;\n showNonSelectEdges: boolean;\n defaultExpansion: number;\n}\n\nexport const upstreamTables = (table: string) => {\n return ApiHelper.get<{\n tables: Table[];\n }>(\"upstreamTables\", { table });\n};\n\nexport const downstreamTables = (table: string) => {\n return ApiHelper.get<{\n tables: Table[];\n }>(\"downstreamTables\", { table });\n};\n\nexport const getExposureDetails = (name: string) => {\n return ApiHelper.get<ExposureMetaData>(\"getExposureDetails\", {\n name,\n });\n};\n\nexport const getFunctionDetails = (name: string) => {\n return ApiHelper.get<FunctionMetaData>(\"getFunctionDetails\", {\n name,\n });\n};\n\nexport const getSnowflakeStageDetails = (table_rk: string) => {\n return ApiHelper.get<SnowflakeStageMetadata>(\"getSnowflakeStageDetails\", {\n table_rk,\n });\n};\n\nexport const getDbtInfo = (table_rk: string) => {\n return ApiHelper.get<DbtInfoResponse>(\"getDbtInfo\", {\n table_rk,\n });\n};\n\nexport const getColumns = (table: string, refresh: boolean) => {\n return ApiHelper.get<Columns>(\"getColumns\", {\n table,\n refresh,\n });\n};\n\nexport const getConnectedColumns = (body: {\n targets: [string, string][];\n upstreamExpansion: boolean;\n currAnd1HopTables: string[];\n selectedColumn: { name: string; table: string };\n showIndirectEdges: boolean;\n}) => {\n return ApiHelper.get<ColumnLineageResponse>(\"getConnectedColumns\", body);\n};\n\nexport const sendFeedback = (body: { feedback_value: \"good\" | \"bad\"; feedback_text: string }) => {\n return ApiHelper.get<{ ok: boolean }>(\"sendFeedback\", body);\n};\n\nexport const getLineageSettings = () => {\n return ApiHelper.get<LineageSettings>(\"getLineageSettings\", {});\n};\n\nexport const persistLineageSettings = (body: Partial<LineageSettings>) => {\n return ApiHelper.get<{\n ok: boolean;\n }>(\"persistLineageSettings\", body);\n};\n\nexport const initLineage = () => {\n return ApiHelper.get(\"init\", {});\n};\n\nexport const openFile = (url: string) => {\n return ApiHelper.get(\"openFile\", { url });\n};\n\nexport const openChat = () => {\n return ApiHelper.get(\"openChat\", {});\n};\n\nexport const showInfoNotification = (message: string) => {\n return ApiHelper.get(\"showInfoNotification\", { message });\n};\n\nexport const previewFeature = () => {\n return ApiHelper.get(\"previewFeature\", {});\n};\n\nexport const columnLineage = (event: CllEvents) => {\n return ApiHelper.get(\"columnLineage\", { event });\n};\n\nexport const telemetryEvents = (data: Record<string, unknown>) => {\n return ApiHelper.get(\"telemetryEvents\", data);\n};\n\nexport const showExternalViewCodeModal = (data: Record<string, unknown>) => {\n return ApiHelper.get(\"showViewCodeModal\", data);\n};\n\nexport const exportLineage = (data: { name: string; lineage_data: StaticLineage }) => {\n return ApiHelper.post<{ url: string }>(\"dbt/v4/export-lineage\", data);\n};\n\nexport const finalLineageDownload = (data: { column_rk: string }): Promise<void> => {\n return ApiHelper.get<void>(\"finalColumnsDownload\", data);\n};\n","// column lineage with cancellation\n\nimport { columnLineage, showInfoNotification, telemetryEvents } from \"./api\";\n\nexport enum CllEvents {\n CANCEL = \"cancel\",\n END = \"end\",\n START = \"start\",\n}\n\nexport class CLL {\n static isCancelled = false;\n static inProgress = false;\n static linkCount = 0;\n\n static onCancel() {\n CLL.isCancelled = true;\n CLL.inProgress = false;\n }\n\n static cancel() {\n // this is used to cancel from webview\n CLL.onCancel();\n columnLineage(CllEvents.CANCEL);\n const event = new CustomEvent(\"cll_cancelled\", { detail: undefined });\n document.dispatchEvent(event);\n }\n\n static start() {\n CLL.inProgress = true;\n CLL.isCancelled = false;\n CLL.linkCount = 0;\n columnLineage(CllEvents.START);\n }\n\n static end() {\n CLL.inProgress = false;\n columnLineage(CllEvents.END);\n telemetryEvents({\n id: \"columnLineageNumLinks\",\n params: { num: CLL.linkCount },\n });\n CLL.linkCount = 0;\n }\n\n static addLinks(n: number) {\n CLL.linkCount += n;\n }\n\n static showCllInProgressMsg() {\n showInfoNotification(\n \"Column lineage is in progress. Either wait for it to complete or cancel the current one.\"\n );\n }\n}\n","import { FunctionComponent, ReactElement, ReactNode, useMemo } from \"react\";\nimport {\n MacrosIcon,\n MetricsIcon,\n SnapshotIcon,\n AnalysisIcon,\n ExposureIcon,\n SourceIcon,\n SeedIcon,\n ModelIcon,\n GeospatialIcon,\n DatetimeIcon,\n ObjectIcon,\n NumberIcon,\n BooleanIcon,\n TextIcon,\n CteIcon,\n DbtNodeExposureIcon,\n MetricsDarkIcon,\n MetricsLightIcon,\n DbtNodeModelIcon,\n DbtNodeSeedIcon,\n DbtNodeSnapshotIcon,\n DbtNodeSourceIcon,\n DbtNodeSubqueryLightIcon,\n DbtNodeSubqueryDarkIcon,\n FunctionIcon,\n DbtNodeFunctionIcon,\n} from \"../assets/icons\";\nimport styles from \"./styles.module.scss\";\nimport { Tooltip } from \"@altimateai/lego\";\nimport { Stack } from \"@altimateai/lego\";\nimport { useLineageContext } from \"../context/LineageProvider\";\nimport { DIALECT_ICON } from \"./CustomNodes\";\nimport { IconHeartRateMonitor } from \"@tabler/icons-react\";\n\nexport const ColumnDatatype: FunctionComponent<{\n datatype: string;\n color?: string;\n size?: string;\n}> = ({ datatype, color, size = \"1rem\" }) => {\n const [Icon, compColor] = useMemo(() => {\n switch (datatype.toLowerCase()) {\n case \"integer\":\n case \"float\":\n case \"double precision\":\n case \"double\":\n case \"bigint\":\n return [NumberIcon, \"#FF754C\"];\n case \"bool\":\n case \"boolean\":\n return [BooleanIcon, \"#00A5DB\"];\n case \"text\":\n case \"character\":\n case \"character varying\":\n case \"varchar\":\n return [TextIcon, \"#3F8CFF\"];\n case \"geospatial\":\n return [GeospatialIcon, \"#01CD8C\"];\n case \"date\":\n case \"timestamp\":\n case \"timestamp with time zone\":\n return [DatetimeIcon, \"#247EFE\"];\n default:\n return [ObjectIcon, \"#6A24FE\"];\n }\n }, [datatype]);\n\n return (\n <Stack style={{ color: color || compColor }} align=\"center\">\n <Icon width={size} height={size} />\n </Stack>\n );\n};\n\nconst NodeTypeIconsWithColors: Record<string, { light: ReactNode; dark: ReactNode }> = {\n seed: {\n light: <DbtNodeSeedIcon style={{ color: \"#E6FAF4\" }} />,\n dark: <DbtNodeSeedIcon style={{ color: \"#344B49\" }} />,\n },\n model: {\n light: <DbtNodeModelIcon style={{ color: \"#FFECE6\" }} />,\n dark: <DbtNodeModelIcon style={{ color: \"#4D4343\" }} />,\n },\n cte: {\n light: <CteIcon style={{ color: \"#FDF6EA\" }} />,\n dark: <CteIcon style={{ color: \"#4B473F\" }} />,\n },\n subquery: {\n light: <DbtNodeSubqueryLightIcon style={{ color: \"#FDF6EA\" }} />,\n dark: <DbtNodeSubqueryDarkIcon style={{ color: \"#4B473F\" }} />,\n },\n source: {\n light: <DbtNodeSourceIcon style={{ color: \"#EAF3FF\" }} />,\n dark: <DbtNodeSourceIcon style={{ color: \"#384454\" }} />,\n },\n exposure: {\n light: <DbtNodeExposureIcon style={{ color: \"#FEEFF7\" }} />,\n dark: <DbtNodeExposureIcon style={{ color: \"#4C404C\" }} />,\n },\n analysis: { light: <AnalysisIcon />, dark: <AnalysisIcon /> },\n snapshot: {\n light: <DbtNodeSnapshotIcon style={{ color: \"#F6F4FF\" }} />,\n dark: <DbtNodeSnapshotIcon style={{ color: \"#444554\" }} />,\n },\n semantic_model: { light: <MetricsLightIcon />, dark: <MetricsDarkIcon /> },\n macros: { light: <MacrosIcon />, dark: <MacrosIcon /> },\n function: {\n light: <DbtNodeFunctionIcon style={{ color: \"#F0EAFF\" }} />,\n dark: <DbtNodeFunctionIcon style={{ color: \"#3D3654\" }} />,\n },\n unknown: {\n light: <DbtNodeModelIcon style={{ color: \"#FFECE6\" }} />,\n dark: <DbtNodeModelIcon style={{ color: \"#4D4343\" }} />,\n },\n};\n\nexport const NodeTypeIcon: FunctionComponent<{ nodeType: string }> = ({ nodeType }) => (\n <div>\n {nodeType === \"seed\" && <SeedIcon />}\n {nodeType === \"model\" && <ModelIcon />}\n {nodeType === \"cte\" && <ModelIcon />}\n {nodeType === \"subquery\" && <ModelIcon />}\n {nodeType === \"source\" && <SourceIcon />}\n {nodeType === \"exposure\" && <ExposureIcon />}\n {nodeType === \"analysis\" && <AnalysisIcon />}\n {nodeType === \"snapshot\" && <SnapshotIcon />}\n {nodeType === \"semantic_model\" && <MetricsIcon />}\n {nodeType === \"macros\" && <MacrosIcon />}\n {nodeType === \"unknown\" && <ModelIcon />}\n {nodeType === \"function\" && <FunctionIcon />}\n {nodeType === \"dashboard\" && <IconHeartRateMonitor />}\n </div>\n);\n\nexport const NodeIcon = ({ nodeType }: { nodeType: string }) => {\n return nodeType in NODE_TYPE_SHORTHAND ? (\n <NodeTypeIcon nodeType={nodeType} />\n ) : nodeType in DIALECT_ICON ? (\n <img\n src={DIALECT_ICON[nodeType as keyof typeof DIALECT_ICON]}\n className={styles.dialect_icon}\n alt={`${nodeType} dialect icon`}\n />\n ) : (\n <div />\n );\n};\n\nexport const NodeTypeIconForSQL: FunctionComponent<{\n nodeType: string;\n}> = ({ nodeType }) => {\n const {\n state: { theme },\n } = useLineageContext();\n return <>{NodeTypeIconsWithColors[nodeType][theme]}</>;\n};\n\nexport const TableNodePill: FunctionComponent<{\n id: string;\n icon: ReactElement;\n label: string;\n text: string;\n}> = ({ id, icon, text, label }) => (\n <Tooltip title={label}>\n <div className={styles.table_node_pill} id={id}>\n <div className={styles.icon}>{icon}</div>\n <div>{text}</div>\n </div>\n </Tooltip>\n);\n\nexport const NODE_TYPE_STYLES = {\n seed: styles.seed,\n model: styles.model,\n source: styles.source,\n exposure: styles.exposure,\n snapshot: styles.snapshot,\n semantic_model: styles.metrics,\n macros: styles.macros,\n analysis: styles.analysis,\n cte: styles.model,\n subquery: styles.model,\n unknown: styles.exposure,\n function: styles.function_node,\n dashboard: styles.dashboard,\n};\n\nexport const NODE_TYPE_SHORTHAND = {\n seed: \"SED\",\n model: \"MDL\",\n source: \"SRC\",\n exposure: \"EXP\",\n snapshot: \"SNP\",\n semantic_model: \"MET\",\n macros: \"SEM\",\n analysis: \"ANY\",\n cte: \"CTE\",\n subquery: \"SUB\",\n function: \"FNC\",\n dashboard: \"BI\",\n unknown: \"UNK\",\n};\n","import { Edge, isNode, Node, ReactFlowInstance } from \"reactflow\";\nimport {\n applyEdgeStyling,\n C_OFFSET_X,\n C_OFFSET_Y,\n contains,\n createColumnEdge,\n createColumnNode,\n createTableEdge,\n createTableNode,\n deleteIfExists,\n getColumnEdgeId,\n getColumnId,\n getHelperDataForCLL,\n getSeeMoreId,\n isColumn,\n isNotColumn,\n T_LEVEL_SEPARATION,\n MAX_EXPAND_TABLE,\n F_OFFSET_X,\n F_OFFSET_Y,\n safeConcat,\n T_NODE_H,\n T_NODE_W,\n T_NODE_Y_SEPARATION,\n getColY,\n withinExclusive,\n isSeeMore,\n EdgeVisibility,\n ViewsTypes,\n applyNodeStyling,\n toggleModelEdges,\n toggleColumnEdges,\n LEVEL_SEPARATION_VERTICAL,\n T_NODE_Y_SEPARATION_VERTICAL,\n defaultEdgeStyle,\n createOpNode,\n highlightEdgeStyle,\n indirectHighlightEdgeStyle,\n} from \"./utils\";\nimport { CollectColumn, ColumnLineage, Confidence, Details, SelectedColumn, Table } from \"./types\";\nimport { COLUMN_PREFIX } from \"./constants\";\nimport { TMoreTables } from \"./components/MoreTables\";\nimport { CLL } from \"./cllUtils\";\nimport { downstreamTables, getConnectedColumns, upstreamTables } from \"./api\";\nimport { NODE_TYPE_SHORTHAND } from \"./components/Column\";\nimport { Dispatch, ReducerWithoutAction } from \"react\";\n\nconst getConnectedTables = (right: boolean, table: string) =>\n right ? upstreamTables(table) : downstreamTables(table);\nconst calculateNewLevel = (right: boolean, i: number) => (right ? i + 1 : i - 1);\n\nexport const createNewNodesEdges = (\n nodes: Node[],\n edges: Edge[],\n tables: Table[],\n t: string,\n right: boolean,\n level: number,\n max_expand_table = MAX_EXPAND_TABLE,\n isVertical = false,\n details?: Details | null\n) => {\n const newLevel = calculateNewLevel(right, level);\n\n const addUniqueEdge = (to: string, source?: string) => {\n const toLevel = nodes.find(n => n.id === to)?.data?.level || 0;\n const _edge = createTableEdge(level, toLevel, t, to, right, isVertical, source);\n const existingEdge = edges.find(e => e.id === _edge.id);\n if (!existingEdge) edges.push(_edge);\n };\n\n let tableAdded = 0;\n for (const _t of tables) {\n if (tableAdded >= max_expand_table) {\n const nodeId = getSeeMoreId(t, right);\n nodes.push({\n id: nodeId,\n data: { tables, prevTable: t, right, level: newLevel },\n position: { x: 100, y: 100 },\n type: \"seeMore\",\n width: T_NODE_W,\n height: 100,\n });\n addUniqueEdge(nodeId);\n break;\n }\n const existingNode = nodes.find(_n => _n.id === _t.table);\n if (!existingNode) {\n tableAdded++;\n if (!details) {\n nodes.push(createTableNode(_t, newLevel, t));\n } else {\n const opType = details[_t.table].type;\n if (opType in NODE_TYPE_SHORTHAND) {\n nodes.push(createTableNode(_t, newLevel, t));\n } else {\n nodes.push(createOpNode(_t.table, newLevel, t, details[_t.table]));\n }\n }\n }\n addUniqueEdge(_t.table, _t.source);\n }\n};\n\nexport const layoutElementsOnCanvas = (nodes: Node[], edges: Edge[], isVertical = false) => {\n let minLevel = Infinity;\n let maxLevel = -Infinity;\n const tableWiseColumnCount: Record<string, number> = {};\n\n for (const n of nodes) {\n if (isColumn(n) && n.parentNode) {\n // assign position to columns earlier as they are relative to parent\n if (!(n.parentNode in tableWiseColumnCount)) {\n tableWiseColumnCount[n.parentNode] = 0;\n }\n\n n.position = {\n x: C_OFFSET_X,\n y: C_OFFSET_Y + getColY(tableWiseColumnCount[n.parentNode]),\n };\n tableWiseColumnCount[n.parentNode]++;\n } else {\n // calculate bounds along x axis\n const { level } = n.data;\n minLevel = Math.min(minLevel, level);\n maxLevel = Math.max(maxLevel, level);\n }\n }\n\n const tableWiseLevelColumnCount: Record<string, number> = {};\n const levelWiseTables: Record<number, string[]> = {};\n const tableWiseLevelPos: Record<string, number> = {};\n const visited: Record<string, boolean> = {};\n\n // create neightbours list for convenience\n const adjacencyListRight: Record<string, string[]> = {};\n const adjacencyListLeft: Record<string, string[]> = {};\n for (const e of edges) {\n if (isColumn(e)) continue;\n if (\n isSeeMore(nodes.find(x => x.id === e.source)!) ||\n isSeeMore(nodes.find(x => x.id === e.target)!)\n )\n continue;\n adjacencyListRight[e.source] = adjacencyListRight[e.source] || [];\n adjacencyListRight[e.source].push(e.target);\n adjacencyListLeft[e.target] = adjacencyListLeft[e.target] || [];\n adjacencyListLeft[e.target].push(e.source);\n }\n\n // calculate metadata such as tables and columns per level\n // to get tables position along y axis\n const processNode = (n: Node) => {\n const { level } = n.data;\n levelWiseTables[level] = levelWiseTables[level] || [];\n if (!levelWiseTables[level].includes(n.id)) {\n tableWiseLevelPos[n.id] = levelWiseTables[level].length;\n tableWiseLevelColumnCount[n.id] = 0;\n for (const curr of levelWiseTables[level])\n tableWiseLevelColumnCount[n.id] += tableWiseColumnCount[curr] || 0;\n levelWiseTables[level].push(n.id);\n }\n };\n const dfs = (n: string, adjacencyList: Record<string, string[]>) => {\n if (visited[n]) return;\n visited[n] = true;\n processNode(nodes.find(item => item.id === n)!);\n for (const m of adjacencyList[n] || []) dfs(m, adjacencyList);\n };\n\n for (const n of nodes) {\n if (isColumn(n)) continue;\n if (isSeeMore(n)) continue;\n if (visited[n.id]) continue;\n dfs(n.id, adjacencyListRight);\n visited[n.id] = false;\n dfs(n.id, adjacencyListLeft);\n }\n // will place see more node at the end of level\n for (const n of nodes) {\n if (isColumn(n)) continue;\n if (!isSeeMore(n)) continue;\n processNode(n);\n }\n\n // assign position to table and see more nodes\n const getY = (n: Node) => {\n const _index = tableWiseLevelPos[n.id] || 0;\n const _columnCount = tableWiseLevelColumnCount[n.id] || 0;\n return F_OFFSET_Y + _index * (T_NODE_H + T_NODE_Y_SEPARATION) + getColY(_columnCount, _index);\n };\n\n const getX = (level: number) => {\n const basisLevel = level - minLevel;\n return basisLevel * (T_NODE_W + T_LEVEL_SEPARATION) + F_OFFSET_X;\n };\n\n const getYVertical = (level: number) => {\n const basisLevel = level - minLevel;\n return basisLevel * (T_NODE_H + LEVEL_SEPARATION_VERTICAL) + F_OFFSET_Y;\n };\n\n const getXVertical = (n: Node) => {\n const _index = tableWiseLevelPos[n.id] || 0;\n const _columnCount = tableWiseLevelColumnCount[n.id] || 0;\n return (\n F_OFFSET_Y +\n _index * (T_NODE_H + T_NODE_Y_SEPARATION_VERTICAL) +\n getColY(_columnCount, _index)\n );\n };\n\n for (const n of nodes) {\n if (isColumn(n)) continue;\n const { level } = n.data;\n n.position = isVertical\n ? { x: getXVertical(n), y: getYVertical(level) }\n : { x: getX(level), y: getY(n) };\n }\n};\n\nexport const resetTableHighlights = (nodes: Node[], edges: Edge[]): [Node[], Edge[]] => {\n nodes.forEach(n => applyNodeStyling(n, true));\n edges.forEach(e => applyEdgeStyling(e, false));\n return [nodes, edges];\n};\n\nexport const highlightTableConnections = (\n nodes: Node[],\n edges: Edge[],\n table: string\n): [Node[], Edge[]] => {\n // Model edges might be hidden when column lineage was selected\n // hide column lineage edges and show all other edges\n toggleModelEdges(edges, true);\n toggleColumnEdges(edges, false);\n\n const highlightNode: Record<string, boolean> = {};\n const highlightEdge: Record<string, boolean> = {};\n const bfsTraversal = (src: \"source\" | \"target\", dst: \"source\" | \"target\") => {\n const queue = [table];\n const visited: Record<string, boolean> = {};\n while (queue.length > 0) {\n const curr = queue.shift()!;\n visited[curr] = true;\n highlightNode[curr] = true;\n edges.forEach(e => {\n if (e[src] === curr) {\n highlightEdge[e.id] = true;\n if (!visited[e[dst]]) queue.push(e[dst]);\n }\n });\n }\n };\n bfsTraversal(\"source\", \"target\");\n bfsTraversal(\"target\", \"source\");\n\n // apply styling\n const newEdges = [...edges];\n newEdges.forEach(_e => applyEdgeStyling(_e, highlightEdge[_e.id]));\n\n const newNodes = [...nodes];\n newNodes.forEach(_n => applyNodeStyling(_n, Boolean(highlightNode[_n.id])));\n\n return [newNodes, newEdges];\n};\n\nexport const setHighlightedTableConnections = (flow: ReactFlowInstance, table: string) => {\n const _nodes = flow.getNodes();\n const _edges = flow.getEdges();\n const [nodes, edges] = highlightTableConnections(_nodes, _edges, table);\n flow.setNodes(nodes);\n flow.setEdges(edges);\n};\n\n// TODO: fix member_profile-> expand left, expand right, collapse left, collapse right\nexport const removeRelatedNodesEdges = (\n prevNodes: Node[],\n prevEdges: Edge[],\n table: string,\n right: boolean,\n level: number\n): [Node[], Edge[]] => {\n const nodesToRemove: Record<string, boolean> = {};\n const edgesToRemove: Record<string, boolean> = {};\n const src = right ? \"source\" : \"target\";\n const dst = !right ? \"source\" : \"target\";\n\n const nodesIdMap: Record<string, Node> = {};\n for (const n of prevNodes) {\n if (isColumn(n)) continue;\n nodesIdMap[n.id] = n;\n }\n\n // TODO: check visited == nodesToRemove\n const queue = [table];\n const visited: Record<string, boolean> = {};\n while (queue.length > 0) {\n const curr = queue.shift()!;\n visited[curr] = true;\n prevEdges.forEach(e => {\n const performVisit = (src: \"source\" | \"target\", dst: \"source\" | \"target\") => {\n if (e[src] !== curr) return;\n const _t = e[dst];\n if (visited[_t]) return;\n const _level = nodesIdMap[_t].data.level;\n if ((right && _level > level) || (!right && _level < level)) {\n queue.push(_t);\n nodesToRemove[_t] = true;\n }\n };\n performVisit(src, dst);\n performVisit(dst, src);\n });\n }\n\n const columnNodesToRemove: Record<string, boolean> = {};\n const columnEdgesToRemove: Record<string, boolean> = {};\n\n prevNodes.forEach(n => {\n if (!nodesToRemove[n.parentNode || \"\"]) return;\n columnNodesToRemove[n.id] = true;\n });\n\n prevEdges.forEach(e => {\n if (isNotColumn(e)) {\n edgesToRemove[e.id] = nodesToRemove[e.source] || nodesToRemove[e.target] || e[src] === table;\n } else {\n columnEdgesToRemove[e.id] = columnNodesToRemove[e.source] || columnNodesToRemove[e.target];\n }\n });\n\n const remove = (dict: Record<string, boolean>) => (x: { id: string | number }) => !dict[x.id];\n\n const newNodes = prevNodes.filter(remove(columnNodesToRemove)).filter(remove(nodesToRemove));\n const newEdges = prevEdges.filter(remove(columnEdgesToRemove)).filter(remove(edgesToRemove));\n\n return [newNodes, newEdges];\n};\n\nconst processColumnLineage = async (\n prevNodes: Node[],\n levelMap: Record<string, number>,\n seeMoreIdTableReverseMap: Record<string, string>,\n tableNodes: Record<string, boolean>,\n curr: [string, string][],\n right: boolean,\n currAnd1HopTables: string[],\n selectedColumn: SelectedColumn,\n edgeVisibility: EdgeVisibility,\n setErrors: Dispatch<ReducerWithoutAction<Record<string, string[]>>>\n) => {\n const nodes: Node[] = [];\n const edges: Edge[] = [];\n\n const { column_lineage, confidence, errors } = await getConnectedColumns({\n targets: curr,\n upstreamExpansion: right,\n currAnd1HopTables,\n selectedColumn,\n showIndirectEdges: edgeVisibility[\"indirect\"],\n });\n setErrors(prev => ({ ...prev, ...errors }));\n CLL.addLinks(column_lineage.length);\n const columnLineage = column_lineage.filter(e =>\n right ? contains(curr, e.source) : contains(curr, e.target)\n );\n const newCurr = columnLineage.map(e => (right ? e.target : e.source));\n const collectColumns: Record<string, CollectColumn[]> = {};\n\n const addToCollectColumns = ([_table, _column]: [string, string], viewsType?: ViewsTypes) => {\n collectColumns[_table] = collectColumns[_table] || [];\n const _existingColumn = collectColumns[_table].find(c => c.column === _column);\n if (!_existingColumn) {\n collectColumns[_table].push({ column: _column, viewsType });\n } else if (viewsType === \"Transformation\") {\n _existingColumn.viewsType = viewsType;\n }\n };\n\n const addToEdges = (id1: string, id2: string, source: string, target: string, type: string) => {\n const id = getColumnEdgeId(source, target);\n if (edges.find(e => e.id === id)) return;\n edges.push(\n createColumnEdge(source, target, levelMap[id1], levelMap[id2], type, edgeVisibility)\n );\n };\n\n const seeMoreLineage: ColumnLineage[] = [];\n for (const e of columnLineage) {\n addToCollectColumns(e.source);\n addToCollectColumns(e.target, e.viewsType);\n const [t0] = e.source;\n const [t1] = e.target;\n\n const sourceTableExist = tableNodes[t0];\n const targetTableExist = tableNodes[t1];\n const sourceId = e.source.join(\"/\");\n const targetId = e.target.join(\"/\");\n const source = COLUMN_PREFIX + sourceId;\n const target = COLUMN_PREFIX + targetId;\n\n const edgeType = e.type;\n if (sourceTableExist && targetTableExist) {\n addToEdges(t0, t1, source, target, edgeType);\n } else if (sourceTableExist) {\n const seeMoreId = seeMoreIdTableReverseMap[t1];\n addToEdges(t0, seeMoreId, source, seeMoreId, edgeType);\n seeMoreLineage.push(e);\n } else if (targetTableExist) {\n const seeMoreId = seeMoreIdTableReverseMap[t0];\n addToEdges(seeMoreId, t1, seeMoreId, target, edgeType);\n seeMoreLineage.push(e);\n } else {\n seeMoreLineage.push(e);\n // TODO: check is nothing to do in this case\n }\n }\n\n for (const t in collectColumns) {\n if (!tableNodes[t]) continue;\n const arr = [...collectColumns[t]];\n arr.sort((a, b) => a.column.localeCompare(b.column));\n for (const c of arr) {\n const viewsCodes: Record<string, [string, string][]> = {};\n columnLineage\n .filter(e => e.target.join(\"/\") === `${t}/${c.column}`)\n .forEach(e => {\n if (e.type === \"indirect\") return;\n viewsCodes[e.source.join(\"/\")] = e.viewsCode || [];\n });\n nodes.push(\n createColumnNode(\n t,\n c.column,\n c.viewsType,\n viewsCodes,\n prevNodes.find(n => (n.id = t))?.data?.nodeType\n )\n );\n }\n }\n\n return { nodes, edges, collectColumns, newCurr, confidence, seeMoreLineage };\n};\n\nexport const staticProcessColumnLineage = async (\n _nodes: Node[],\n _edges: Edge[],\n column_rk: string,\n postConnectedColumns: (args: {\n column_fqn: string;\n edges: { src: string; dst: string }[];\n }) => Promise<{\n collect_columns: Record<string, CollectColumn[]>;\n highlight_edges: [string, string, string][];\n }>\n) => {\n let nodes = _nodes.filter(isNotColumn);\n let edges = _edges.filter(isNotColumn);\n [nodes, edges] = resetTableHighlights(nodes, edges);\n\n const levelMap: Record<string, number> = {};\n nodes.forEach(n => (levelMap[n.id] = n.data.level));\n\n const tableNodes: Record<string, boolean> = {};\n _nodes.filter(_n => _n.type === \"table\").forEach(_n => (tableNodes[_n.id] = true));\n const seeMoreIdTableReverseMap: Record<string, string> = {};\n const edgesPayload = [];\n for (const e of _edges) {\n if (e.id.startsWith(COLUMN_PREFIX)) continue;\n const sourceTableExist = tableNodes[e.source];\n const targetTableExist = tableNodes[e.target];\n if (sourceTableExist && targetTableExist) {\n edgesPayload.push({ src: e.source, dst: e.target });\n } else if (sourceTableExist) {\n const _n = _nodes.find(_n => _n.id === e.target)!;\n _n.data.tables?.forEach((_t: Table) => {\n edgesPayload.push({ src: e.source, dst: _t.table });\n seeMoreIdTableReverseMap[_t.table] = e.target;\n });\n } else if (targetTableExist) {\n const _n = _nodes.find(_n => _n.id === e.source)!;\n _n.data.tables?.forEach((_t: Table) => {\n edgesPayload.push({ src: _t.table, dst: e.target });\n seeMoreIdTableReverseMap[_t.table] = e.source;\n });\n } else {\n // TODO: check is nothing to do in this case\n }\n }\n\n const { collect_columns, highlight_edges } = await postConnectedColumns({\n column_fqn: column_rk,\n edges: edgesPayload,\n });\n\n for (const t in collect_columns) {\n if (!tableNodes[t]) continue;\n const arr = [...collect_columns[t]];\n arr.sort((a, b) => a.column.localeCompare(b.column));\n for (const c of arr) {\n const nodeType = _nodes.find(n => n.id === t)?.data?.nodeType;\n nodes.push(createColumnNode(t, c.column, c.viewsType, {}, nodeType));\n }\n }\n\n edges.forEach(_e => (_e.style = defaultEdgeStyle));\n const addToEdges = (\n id1: string,\n id2: string,\n source: string,\n target: string,\n edgeType: string\n ) => {\n const id = getColumnEdgeId(source, target);\n if (edges.find(e => e.id === id)) return;\n edges.push(\n createColumnEdge(source, target, levelMap[id1], levelMap[id2], edgeType, {\n direct: edgeType === \"direct\",\n indirect: edgeType === \"indirect\",\n })\n );\n };\n const seeMoreLineage = [];\n\n for (const e of highlight_edges) {\n const [t0] = e[0].split(\"/\");\n const [t1] = e[1].split(\"/\");\n const sourceTableExist = tableNodes[t0];\n const targetTableExist = tableNodes[t1];\n const source = COLUMN_PREFIX + e[0];\n const target = COLUMN_PREFIX + e[1];\n const edgeType = e[2] || \"direct\";\n if (sourceTableExist && targetTableExist) {\n addToEdges(t0, t1, source, target, edgeType);\n } else if (sourceTableExist) {\n const seeMoreId = seeMoreIdTableReverseMap[t1];\n addToEdges(t0, seeMoreId, source, seeMoreId, edgeType);\n seeMoreLineage.push(e);\n } else if (targetTableExist) {\n const seeMoreId = seeMoreIdTableReverseMap[t0];\n addToEdges(seeMoreId, t1, seeMoreId, target, edgeType);\n seeMoreLineage.push(e);\n } else {\n seeMoreLineage.push(e);\n // TODO: check is nothing to do in this case\n }\n }\n\n layoutElementsOnCanvas(nodes, edges);\n\n return { nodes, edges, collect_columns };\n};\n\nconst mergeNodesEdges = (\n prevState: { nodes: Node[]; edges: Edge[] },\n patchState: { nodes: Node[]; edges: Edge[] },\n selectedColumn: SelectedColumn,\n right: boolean\n): [Node[], Edge[]] => {\n const nodes = [...prevState.nodes];\n const edges = [...prevState.edges];\n patchState.nodes.forEach(n => {\n const existing = nodes.find(x => x.id === n.id);\n if (!existing) {\n nodes.push(n);\n } else {\n const viewsCode =\n n.data.viewsCode && Object.keys(n.data.viewsCode).length\n ? n.data.viewsCode\n : existing.data.viewsCode;\n existing.data = {\n ...existing.data,\n ...n.data,\n viewsCode,\n viewsType: existing.data.viewsType || n.data.viewsType,\n };\n }\n });\n\n patchState.edges.forEach(e => {\n if (edges.find(e1 => e1.id === e.id)) return;\n edges.push(e);\n });\n\n if (selectedColumn.name) {\n const edgeType: Record<string, string> = {};\n const start = getColumnId(selectedColumn.table, selectedColumn.name);\n const columnEdgeType: Record<string, string> = { [start]: \"direct\" };\n const queue = [start];\n const visited: Record<string, boolean> = {};\n const src = right ? \"source\" : \"target\";\n const dst = !right ? \"source\" : \"target\";\n while (queue.length > 0) {\n const curr = queue.shift()!;\n if (visited[curr]) continue;\n visited[curr] = true;\n // 1st pass to collect which type of edge comes towards target column\n for (const e of edges) {\n if (e[src] !== curr) continue;\n queue.push(e[dst]);\n if (columnEdgeType[e[dst]] === \"direct\") continue;\n columnEdgeType[e[dst]] = columnEdgeType[e[src]] === \"direct\" ? e.data.type : \"indirect\";\n }\n // 2nd pass to assign type to edge\n for (const e of edges) {\n if (e[src] !== curr) continue;\n edgeType[e.id] = columnEdgeType[e[dst]];\n }\n }\n for (const e of edges) {\n if (isNotColumn(e)) continue;\n e.data.type = edgeType[e.id] || e.data.type;\n e.style = e.data.type === \"direct\" ? highlightEdgeStyle : indirectHighlightEdgeStyle;\n }\n }\n\n layoutElementsOnCanvas(nodes, edges);\n return [nodes, edges];\n};\n\nexport const removeColumnNodes = (_nodes: Node[], _edges: Edge[]): [Node[], Edge[]] => {\n const nodes = _nodes.filter(n => isNotColumn(n));\n const edges = _edges.filter(n => isNotColumn(n));\n return [nodes, edges];\n};\n\nexport const expandTableLineage = async (\n _nodes: Node[],\n _edges: Edge[],\n table: string,\n right: boolean\n): Promise<[Node[], Edge[]]> => {\n const nodes = [..._nodes];\n const edges = [..._edges];\n const queue: { table: string; level: number }[] = [\n { table, level: nodes.find(n => n.id === table)!.data.level },\n ];\n const visited: Record<string, boolean> = {};\n while (queue.length > 0) {\n const { table, level } = queue.shift()!;\n if (visited[table]) continue;\n visited[table] = true;\n const { tables } = await getConnectedTables(right, table);\n createNewNodesEdges(nodes, edges, tables, table, right, level);\n tables.forEach(t => {\n const _t = nodes.find(n => n.id === t.table);\n if (_t?.data.materialization === \"ephemeral\") {\n queue.push({ table: t.table, level: _t.data.level });\n }\n });\n }\n return [nodes, edges];\n};\n\nexport const expandTableLineageLevelWise = async (\n _nodes: Node[],\n _edges: Edge[],\n _table: string,\n lb: number, // lower bound\n ub: number, // upper bound\n max_expand_table: number = MAX_EXPAND_TABLE\n): Promise<[Node[], Edge[]]> => {\n const nodes = [..._nodes];\n const edges = [..._edges];\n if (lb >= ub) return [nodes, edges];\n const withinExcBounds = withinExclusive(lb, ub);\n const rootLevel = nodes.find(n => n.id === _table)!.data.level;\n const bfs = async (right: boolean) => {\n const queue: { table: string; level: number }[] = [{ table: _table, level: rootLevel }];\n const visited: Record<string, boolean> = {};\n while (queue.length > 0) {\n const curr = queue.shift()!;\n if (visited[curr.table]) continue;\n visited[curr.table] = true;\n const { tables = [] } = await getConnectedTables(right, curr.table);\n createNewNodesEdges(nodes, edges, tables, curr.table, right, curr.level, max_expand_table);\n const newLevel = calculateNewLevel(right, curr.level);\n if (withinExcBounds(newLevel)) {\n queue.push(...tables.map(t => ({ table: t.table, level: newLevel })));\n } else {\n queue.push(\n ...tables\n .filter(t => t.materialization === \"ephemeral\")\n .map(t => ({ table: t.table, level: newLevel }))\n );\n }\n }\n };\n if (ub > rootLevel) await bfs(true);\n if (lb < rootLevel) await bfs(false);\n\n return [nodes, edges];\n};\n\nconst _calculateMinLevel = (\n nodes: Node[],\n edges: Edge[],\n table: string,\n right: boolean\n): number => {\n if (!table) return -1;\n const src = right ? \"source\" : \"target\";\n const dst = right ? \"target\" : \"source\";\n const countKey = right ? \"upstreamCount\" : \"downstreamCount\";\n\n const nodesMap: Record<string, Node> = {};\n const adjacencyList: Record<string, string[]> = {};\n for (const n of nodes) {\n if (isColumn(n)) continue;\n nodesMap[n.id] = n;\n adjacencyList[n.id] = [];\n }\n for (const e of edges) {\n if (isColumn(e)) continue;\n adjacencyList[e[src]].push(e[dst]);\n }\n\n // get the node with lowest level which can be expanded but not yet expanded\n const bfs = () => {\n const queue = [table];\n const visited: Record<string, boolean> = {};\n while (queue.length > 0) {\n const curr = queue.shift()!;\n if (visited[curr]) continue;\n visited[curr] = true;\n const nodeData = nodesMap[curr].data;\n if (nodeData[countKey] === 0) continue;\n if (adjacencyList[curr].length < nodeData[countKey]) return curr;\n for (const n of adjacencyList[curr]) queue.push(n);\n }\n };\n const targetNode = bfs();\n\n // unable to find such node means everything is already expanded\n if (!targetNode) return -1;\n const { level: rootLevel } = nodesMap[table].data;\n const { level: targetLevel } = nodesMap[targetNode].data;\n return right ? targetLevel - rootLevel : rootLevel - targetLevel;\n};\n\nexport const calculateMinLevel = (\n nodes: Node[],\n edges: Edge[],\n table: string\n): [number, number] => [\n _calculateMinLevel(nodes, edges, table, false),\n _calculateMinLevel(nodes, edges, table, true),\n];\n\nexport const bfsTraversal = async (\n nodes: Node[],\n edges: Edge[],\n right: boolean,\n columns: { name: string; table: string }[],\n setConfidence: (operatorList: Confidence[\"operator_list\"]) => void,\n setMoreTables: (moreTables: ColumnLineage[]) => void,\n mergeCollectColumns: (newCollectColumns: Record<string, CollectColumn[]>) => void,\n getNodesEdges: () => [Node[], Edge[]],\n setNodesEdges: (ns: Node[], es: Edge[]) => void,\n selectedColumn: SelectedColumn,\n edgeVisibility: EdgeVisibility,\n setErrors: Dispatch<ReducerWithoutAction<Record<string, string[]>>>\n): Promise<boolean> => {\n let isLineage = false;\n // creating helper data for current lineage once\n const { levelMap, tableNodes, seeMoreIdTableReverseMap } = getHelperDataForCLL(nodes, edges);\n\n const _getNode = (id: string) => nodes.find(n => n.id === id);\n\n const visited: Record<string, boolean> = {};\n const ephemeralAncestors: Record<string, [string, string][]> = {};\n let currTargetColumns: [string, string][] = columns.map(c => [c.table, c.name]);\n let currEphemeralNodes: string[] = [];\n setErrors(() => ({}));\n while (true as boolean) {\n if (CLL.isCancelled) break;\n currTargetColumns = currTargetColumns.filter(x => !visited[x.join(\"/\")]);\n if (currTargetColumns.length === 0 && currEphemeralNodes.length === 0) {\n break;\n }\n const currTargetTables: Record<string, boolean> = {};\n currTargetColumns.forEach(x => {\n visited[x.join(\"/\")] = true;\n currTargetTables[x[0]] = true;\n });\n\n const [src, dst]: (\"source\" | \"target\")[] = right ? [\"source\", \"target\"] : [\"target\", \"source\"];\n const hop1Tables: string[] = [];\n const _currEphemeralNodes: string[] = [];\n const collectEphemeralAncestors: string[] = [];\n let noDependents = false;\n for (const e of edges) {\n if (isColumn(e)) continue;\n const srcTable = e[src];\n const dstNode = e[dst];\n const dstTables = tableNodes[dstNode]\n ? [_getNode(dstNode)?.data as Table]\n : (_getNode(dstNode)?.data as TMoreTables)?.tables?.filter(t => !tableNodes[t.table]);\n // eslint-disable-next-line no-loop-func\n dstTables?.forEach(dstTableData => {\n if (!dstTableData) return;\n const { table: dstTable, materialization } = dstTableData;\n if (currTargetTables[srcTable]) {\n noDependents = true;\n if (materialization === \"ephemeral\") {\n // carry forward\n safeConcat(\n ephemeralAncestors,\n dstTable,\n currTargetColumns.filter(c => c[0] === srcTable)\n );\n _currEphemeralNodes.push(dstTable);\n } else {\n hop1Tables.push(dstTable);\n }\n } else if (currEphemeralNodes.includes(srcTable)) {\n noDependents = true;\n if (materialization === \"ephemeral\") {\n // carry forward follow through\n safeConcat(ephemeralAncestors, dstTable, ephemeralAncestors[srcTable]);\n _currEphemeralNodes.push(dstTable);\n } else {\n collectEphemeralAncestors.push(srcTable);\n hop1Tables.push(dstTable);\n }\n }\n });\n }\n if (!noDependents) {\n break;\n }\n currEphemeralNodes = _currEphemeralNodes;\n\n const currAnd1HopTables = Object.keys(currTargetTables).concat(hop1Tables);\n\n // eslint-disable-next-line no-loop-func\n collectEphemeralAncestors.forEach(t => {\n currTargetColumns.push(...ephemeralAncestors[t]);\n currAnd1HopTables.push(...ephemeralAncestors[t].map(c => c[0]));\n });\n const patchState = await processColumnLineage(\n nodes,\n levelMap,\n seeMoreIdTableReverseMap,\n tableNodes,\n currTargetColumns,\n right,\n Array.from(new Set(currAnd1HopTables)),\n selectedColumn,\n edgeVisibility,\n setErrors\n );\n if (patchState.confidence?.confidence === \"low\") {\n setConfidence(patchState.confidence?.operator_list || []);\n }\n currTargetColumns = patchState.newCurr;\n if (!isLineage && currTargetColumns.length > 0) {\n isLineage = true;\n }\n currTargetColumns = currTargetColumns.filter(\n c => edges.filter(e => (right ? e.source : e.target) === c[0]).length > 0\n );\n const [ns, es] = getNodesEdges();\n const [_nodes, _edges] = mergeNodesEdges(\n { nodes: ns, edges: es },\n patchState,\n selectedColumn,\n right\n );\n\n setMoreTables(patchState.seeMoreLineage);\n\n layoutElementsOnCanvas(_nodes, _edges);\n setNodesEdges(_nodes, _edges);\n mergeCollectColumns(patchState.collectColumns);\n }\n return isLineage;\n};\n\nexport const moveTableFromSeeMoreToCanvas = (\n nodes: Node[],\n edges: Edge[],\n _table: Table,\n { prevTable, tables, right, level, lineage }: TMoreTables,\n edgeVisibility: EdgeVisibility\n): boolean => {\n const { table } = _table;\n const node = nodes.find(n => n.id === table);\n if (node) return false;\n nodes.push(createTableNode(_table, level!, prevTable!));\n const fromLevel = nodes.find(n => n.id === prevTable)?.data.level;\n edges.push(createTableEdge(fromLevel, level!, prevTable!, table, right!, false, _table.source));\n lineage?.forEach(e => {\n const src = getColumnId(e.source[0], e.source[1]);\n const dst = getColumnId(e.target[0], e.target[1]);\n const viewsCodes: Record<string, [string, string][]> = {};\n if (right) {\n lineage\n .filter(e1 => e1.target.join(\"/\") === e.target.join(\"/\"))\n .forEach(e1 => {\n viewsCodes[e1.source.join(\"/\")] = e1.viewsCode || [];\n });\n }\n if (right) {\n if (e.target[0] !== table) return;\n nodes.push(\n createColumnNode(e.target[0], e.target[1], e.viewsType, viewsCodes, _table.nodeType)\n );\n edges.push(createColumnEdge(src, dst, level! - 1, level!, e.type, edgeVisibility));\n } else {\n if (e.source[0] !== table) return;\n nodes.push(\n createColumnNode(e.source[0], e.source[1], e.viewsType, viewsCodes, _table.nodeType)\n );\n edges.push(createColumnEdge(src, dst, level!, level! + 1, e.type, edgeVisibility));\n }\n });\n\n if (tables!.every(t => !!nodes.find(n => n.id === t.table))) {\n const seeMoreNodeId = getSeeMoreId(prevTable!, right!);\n const seeMoreEdgeId = right ? `${prevTable}-${seeMoreNodeId}` : `${seeMoreNodeId}-${prevTable}`;\n deleteIfExists(nodes, seeMoreNodeId);\n deleteIfExists(edges, seeMoreEdgeId);\n return true;\n }\n return false;\n};\n\nexport const calculateNodeCount = async (\n nodes: Node[],\n edges: Edge[],\n selectedTable: string,\n leftExpansion: number,\n rightExpansion: number\n): Promise<number> => {\n if (!selectedTable) return 0;\n const selectedTableData = nodes.find(n => n.id === selectedTable)?.data;\n if (!selectedTableData) return 0;\n const { level } = selectedTableData;\n const startingNodesNum = nodes.length;\n const [newNodes] = await expandTableLineageLevelWise(\n nodes,\n edges,\n selectedTable,\n level - leftExpansion,\n level + rightExpansion,\n Infinity\n );\n return newNodes.length - startingNodesNum;\n};\n\nconst getTracedNode = (node: Node, nodes: Node[], edges: Edge[], isIncomer: boolean) => {\n if (!isNode(node)) {\n return { nodes: [], edgeIds: [] };\n }\n\n const tracedEdges = edges.filter(e => {\n const id = isIncomer ? e.target : e.source;\n\n return id === node.id;\n });\n\n return {\n nodes: nodes.filter(n => tracedEdges.find(e => e.source === n.id || e.target === n.id)),\n edgeIds: tracedEdges.map(e => getColumnEdgeId(e.source, e.target)),\n };\n};\n\nexport const getAllTracedNodes = (\n node: Node,\n nodes: Node[],\n edges: Edge[],\n prevTraced = [] as Node[],\n isIncomer: boolean\n) => {\n const { nodes: tracedNodes, edgeIds } = getTracedNode(node, nodes, edges, isIncomer);\n\n return tracedNodes.reduce(\n (memo, tracedNode) => {\n memo.nodes.push(tracedNode);\n memo.edges = Array.from(new Set([...memo.edges, ...edgeIds]));\n\n if (prevTraced.findIndex(n => n.id === tracedNode.id) === -1) {\n prevTraced.push(tracedNode);\n\n const { nodes: _nodes, edges: _edgeIds } = getAllTracedNodes(\n tracedNode,\n nodes,\n edges,\n prevTraced,\n isIncomer\n );\n _nodes.forEach(foundNode => {\n memo.nodes.push(foundNode);\n\n if (prevTraced.findIndex(n => n.id === foundNode.id) === -1) {\n prevTraced.push(foundNode);\n }\n });\n memo.edges = Array.from(new Set([...memo.edges, ..._edgeIds]));\n }\n\n return memo;\n },\n { nodes: [] as Node[], edges: [] as string[] }\n );\n};\n\nexport const highlightColumnConnections = (node: Node, flow: ReactFlowInstance) => {\n const nodes = flow.getNodes().filter(n => isColumn(n));\n const edges = flow.getEdges();\n\n // TODO check why styles are not applied when nodes and edges are directly from flow instance\n nodes.forEach(n => {\n const node = flow.getNode(n.id);\n if (node) {\n applyNodeStyling(node, false);\n }\n });\n edges.forEach(e => {\n const edge = flow.getEdge(e.id);\n if (edge) {\n edge.hidden = true;\n applyEdgeStyling(edge, false);\n }\n });\n\n const incomingNodes = getAllTracedNodes(node, nodes, edges, [], true);\n const outgoingNodes = getAllTracedNodes(node, nodes, edges, [], false);\n\n [incomingNodes, outgoingNodes].forEach(({ nodes: tracedNodes, edges }) => {\n tracedNodes.forEach(n => {\n const node = flow.getNode(n.id);\n if (node) {\n applyNodeStyling(node, true);\n }\n });\n edges.forEach(edgeId => {\n const edge = flow.getEdge(edgeId);\n if (edge) {\n edge.hidden = false;\n applyEdgeStyling(edge, true);\n }\n });\n });\n};\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React, {\n FunctionComponent,\n MouseEvent,\n PropsWithChildren,\n ReducerWithoutAction,\n useCallback,\n useMemo,\n} from \"react\";\nimport { BaseEdge, EdgeProps, Handle, NodeProps, Position, useReactFlow } from \"reactflow\";\nimport styles from \"./styles.module.scss\";\nimport classNames from \"classnames\";\nimport {\n bfsTraversal,\n calculateMinLevel,\n calculateNodeCount,\n expandTableLineage,\n highlightColumnConnections,\n highlightTableConnections,\n layoutElementsOnCanvas,\n setHighlightedTableConnections,\n} from \"../graph\";\nimport {\n getColumnId,\n getColY,\n getSeeMoreId,\n VIEWS_TYPE_COLOR,\n toggleColumnEdges,\n toggleModelEdges,\n ViewsTypes,\n T_NODE_W,\n} from \"../utils\";\nimport { TMoreTables } from \"./MoreTables\";\n\nimport {\n TestsIcon,\n EphemeralIcon,\n ExternalProjectIcon,\n SqlFilterIcon,\n SqlGroupByIcon,\n SqlInnerJoinIcon,\n SqlLeftJoinIcon,\n SqlLimitIcon,\n SqlOrderByIcon,\n SqlOuterJoinIcon,\n SqlRightJoinIcon,\n SqlCrossJoinIcon,\n SqlLateralJoinIcon,\n SqlFullJoinIcon,\n SqlUnionIcon,\n SqlSelectIcon,\n ArrowRightDoubleIcon,\n PostgresIcon,\n SnowflakeIcon,\n S3Icon,\n AlertErrorIcon,\n SeedIcon,\n} from \"../assets/icons\";\n\nimport {\n COLUMNS_SIDEBAR,\n EXPOSURE_SIDEBAR,\n FUNCTION_SIDEBAR,\n SNOWFLAKE_STAGE_SIDEBAR,\n DASHBOARD_SIDEBAR,\n TABLES_SIDEBAR,\n} from \"../constants\";\nimport { NODE_TYPE_SHORTHAND, NodeTypeIconForSQL } from \"./Column\";\nimport { NODE_TYPE_STYLES, NodeTypeIcon, TableNodePill } from \"./Column\";\nimport { Stack } from \"@altimateai/lego\";\nimport { Tooltip } from \"@altimateai/lego\";\nimport { useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport {\n mergeCollectColumns,\n mergeSeeMoreTables,\n setMinRange,\n setMoreTables,\n setNodeCount,\n setSelectedColumn,\n setSelectedTable,\n setSidebarScreen,\n setModalArgs,\n updateConfidenceWithOperatorList,\n setErrors,\n} from \"../context/LineageSlice\";\nimport { openFile, showExternalViewCodeModal } from \"../api\";\nimport { CLL } from \"../cllUtils\";\nimport { Confidence, ColumnLineage, CollectColumn } from \"../types\";\nimport { CodeIcon } from \"../../../assets/icons\";\nimport ViewsTypeBadge from \"./ViewsTypeBadge\";\nimport { PercentValue } from \"../context/types\";\nimport { Typography } from \"@altimateai/lego\";\nimport { cn } from \"../../../shared/utils\";\nimport { IconExclamationCircle } from \"@tabler/icons-react\";\nimport dayjs from \"dayjs\";\n\nconst HANDLE_OFFSET = \"-1px\";\n\nconst BidirectionalHandles = () => (\n <>\n <Handle\n id=\"left\"\n type=\"source\"\n className=\"invisible\"\n isConnectable={false}\n position={Position.Left}\n style={{ left: HANDLE_OFFSET }}\n />\n <Handle\n id=\"right\"\n type=\"source\"\n className=\"invisible\"\n isConnectable={false}\n position={Position.Right}\n style={{ right: HANDLE_OFFSET }}\n />\n <Handle\n id=\"left\"\n type=\"target\"\n className=\"invisible\"\n isConnectable={false}\n position={Position.Left}\n style={{ left: HANDLE_OFFSET }}\n />\n <Handle\n id=\"right\"\n type=\"target\"\n className=\"invisible\"\n isConnectable={false}\n position={Position.Right}\n style={{ right: HANDLE_OFFSET }}\n />\n <Handle\n id=\"top\"\n type=\"source\"\n className=\"invisible\"\n isConnectable={false}\n position={Position.Top}\n style={{ top: HANDLE_OFFSET }}\n />\n <Handle\n id=\"bottom\"\n type=\"source\"\n className=\"invisible\"\n isConnectable={false}\n position={Position.Bottom}\n style={{ bottom: HANDLE_OFFSET }}\n />\n <Handle\n id=\"top\"\n type=\"target\"\n className=\"invisible\"\n isConnectable={false}\n position={Position.Top}\n style={{ top: HANDLE_OFFSET }}\n />\n <Handle\n id=\"bottom\"\n type=\"target\"\n className=\"invisible\"\n isConnectable={false}\n position={Position.Bottom}\n style={{ bottom: HANDLE_OFFSET }}\n />\n </>\n);\n\nexport const TableNode: FunctionComponent<NodeProps> = ({ data }) => {\n const {\n label,\n table,\n url,\n upstreamCount,\n downstreamCount,\n nodeType,\n tests,\n materialization,\n isExternalProject,\n schema,\n stale,\n lastSeen,\n } = data;\n const flow = useReactFlow();\n\n const {\n state: {\n selectedTable,\n collectColumns,\n selectedColumn,\n leftExpansion,\n rightExpansion,\n selectCheck,\n nonSelectCheck,\n errors,\n },\n rerender,\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n\n const _columnLen = Object.keys(collectColumns[table] || {}).length;\n const _showColumns = _columnLen > 0;\n const selected = selectedTable === table;\n\n const expand = async (right: boolean) => {\n if (CLL.inProgress) {\n CLL.showCllInProgressMsg();\n return;\n }\n let [nodes, edges] = await expandTableLineage(flow.getNodes(), flow.getEdges(), table, right);\n [nodes, edges] = highlightTableConnections(nodes, edges, selectedTable);\n layoutElementsOnCanvas(nodes, edges);\n flow.setNodes(nodes);\n flow.setEdges(edges);\n lineageDispatch(setMinRange(calculateMinLevel(nodes, edges, selectedTable)));\n lineageDispatch(\n setNodeCount(\n await calculateNodeCount(nodes, edges, selectedTable, leftExpansion, rightExpansion)\n )\n );\n rerender();\n if (!selectedColumn?.name) return;\n try {\n CLL.start();\n const currentEdges = flow.getEdges();\n // Model edges should be hidden when column lineage is selected\n toggleModelEdges(currentEdges, false);\n toggleColumnEdges(currentEdges, true);\n flow.setEdges(currentEdges);\n await bfsTraversal(\n nodes,\n edges,\n right,\n collectColumns[table].map(c => ({ table, name: c.column })),\n (operatorList: Confidence[\"operator_list\"]) => {\n lineageDispatch(updateConfidenceWithOperatorList({ operatorList }));\n },\n (moreTables: ColumnLineage[]) => {\n lineageDispatch(mergeSeeMoreTables(moreTables));\n },\n (newCollectColumns: Record<string, CollectColumn[]>) => {\n lineageDispatch(mergeCollectColumns(newCollectColumns));\n },\n () => [flow.getNodes(), flow.getEdges()],\n (ns, es) => {\n flow.setNodes(ns);\n flow.setEdges(es);\n },\n selectedColumn,\n { direct: selectCheck, indirect: nonSelectCheck },\n (fn: ReducerWithoutAction<Record<string, string[]>>) =>\n lineageDispatch(setErrors(fn(errors)))\n );\n rerender();\n } catch (e) {\n console.log(\"cll:error:\", e);\n } finally {\n CLL.end();\n }\n };\n\n const expandRight = () => expand(true);\n const expandLeft = () => expand(false);\n\n const onDetailsClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (nodeType === \"semantic_model\") {\n return;\n }\n lineageDispatch(setSelectedTable(table));\n const sidebarMap: Record<string, string> = {\n exposure: EXPOSURE_SIDEBAR,\n function: FUNCTION_SIDEBAR,\n snowflake_stage: SNOWFLAKE_STAGE_SIDEBAR,\n dashboard: DASHBOARD_SIDEBAR,\n };\n lineageDispatch(setSidebarScreen(sidebarMap[nodeType] || COLUMNS_SIDEBAR));\n };\n\n const _edges = flow.getEdges();\n const tableId = table.replace(/[^a-zA-Z0-9]/g, \"-\");\n return (\n <div\n className=\"al-position-relative\"\n style={{\n opacity: !selectedColumn?.name ? 1 : _showColumns ? 1 : 0.5,\n }}\n >\n <div\n className={styles.table_node}\n onClick={async () => {\n const nodes = flow.getNodes();\n const edges = flow.getEdges();\n lineageDispatch(setMinRange(calculateMinLevel(nodes, edges, table)));\n lineageDispatch(\n setNodeCount(\n await calculateNodeCount(nodes, edges, table, leftExpansion, rightExpansion)\n )\n );\n setHighlightedTableConnections(flow, table);\n lineageDispatch(setSelectedTable(table));\n if (url) {\n openFile(url);\n }\n }}\n >\n <Stack\n direction=\"column\"\n align=\"start\"\n gap=\"xs\"\n className={classNames(styles.header, {\n [styles.selected]: selected,\n [styles.collapse]: !_showColumns,\n })}\n >\n <Stack direction=\"column\" align=\"start\" gap=\"xs\" className=\"al-w-full\">\n <div className={styles.table_header}>\n {nodeType in NODE_TYPE_SHORTHAND && (\n <>\n <div\n className={classNames(\n styles.node_icon,\n NODE_TYPE_STYLES[nodeType as keyof typeof NODE_TYPE_STYLES]\n )}\n >\n <NodeTypeIcon nodeType={nodeType} />\n <div>{NODE_TYPE_SHORTHAND[nodeType as keyof typeof NODE_TYPE_STYLES]}</div>\n </div>\n </>\n )}\n {nodeType in DIALECT_ICON && (\n <img\n src={DIALECT_ICON[nodeType as keyof typeof DIALECT_ICON]}\n className={styles.dialect_icon}\n alt={`${nodeType} dialect icon`}\n />\n )}\n {nodeType === \"snowflake_stage\" && (\n <Stack direction=\"column\" align=\"center\" gap=\"none\" className=\"al-text-primary\">\n <SeedIcon className=\"icon-sm\" />\n <Typography\n variant=\"caption\"\n size=\"sm\"\n className=\"al-text-xs al-mb-0 al-text-primary\"\n >\n STG\n </Typography>\n </Stack>\n )}\n <div className=\"overflow-x\">\n <div className={schema ? \"text-overflow\" : \"lines-2\"}>{label}</div>\n {schema && (\n <div className=\"text-muted\" style={{ fontSize: \"0.75em\" }}>\n {schema}\n </div>\n )}\n </div>\n {errors?.[table]?.length && (\n <Tooltip\n title={\n <div className={styles.error_tooltip}>\n {errors[table].map((line, i) => (\n <div key={i} className=\"mb-1\">\n {i + 1}. {line}\n </div>\n ))}\n </div>\n }\n >\n <AlertErrorIcon />\n </Tooltip>\n )}\n </div>\n <Stack\n direction=\"row\"\n align=\"center\"\n justify=\"between\"\n gap=\"xs\"\n className={classNames(\"al-w-full\", styles.node_extra_info)}\n >\n <Stack>\n <div\n className={classNames(\"nodrag\", styles.table_handle, {\n invisible:\n downstreamCount === 0 ||\n downstreamCount === _edges.filter(e => e.target === table).length ||\n flow.getNode(getSeeMoreId(table, false)),\n })}\n onClick={e => {\n e.stopPropagation();\n expandLeft();\n }}\n data-testid={\"expand-left-btn-\" + table}\n >\n +\n </div>\n {tests?.length > 0 && (\n <TableNodePill\n id={\"table-node-tests-\" + tableId}\n icon={<TestsIcon />}\n text={tests.length.toString()}\n label=\"Tests\"\n />\n )}\n {materialization && (\n <TableNodePill\n id={\"table-node-materilization-\" + tableId}\n icon={<EphemeralIcon />}\n text={materialization}\n label=\"Materialization\"\n />\n )}\n {stale && lastSeen && (\n <TableNodePill\n id={\"table-node-stale-\" + tableId}\n icon={<IconExclamationCircle />}\n text={\"Stale\"}\n label={`Last seen on ${dayjs(lastSeen).format(\"DD MMM YYYY, hh:mm A\")}`}\n />\n )}\n {isExternalProject ? (\n <TableNodePill\n id={\"table-node-is-external-\" + tableId}\n icon={<ExternalProjectIcon />}\n text=\"ext\"\n label={`External Project: ${table}`}\n />\n ) : null}\n </Stack>\n <Stack>\n <div\n className={classNames(\n \"nodrag\",\n selected && nodeType !== \"semantic_model\" ? \"text-blue\" : \"text-grey\"\n )}\n onClick={onDetailsClick}\n data-testid={\"view-details-btn-\" + table}\n >\n Details\n </div>\n <div\n className={classNames(\"nodrag\", styles.table_handle, {\n invisible:\n upstreamCount === 0 ||\n upstreamCount === _edges.filter(e => e.source === table).length ||\n flow.getNode(getSeeMoreId(table, true)),\n })}\n onClick={e => {\n e.stopPropagation();\n expandRight();\n }}\n data-testid={\"expand-right-btn-\" + table}\n >\n +\n </div>\n </Stack>\n </Stack>\n </Stack>\n </Stack>\n {_showColumns && (\n <>\n <div className={styles.divider} />\n <div\n className={classNames(styles.content, {\n [styles.selected]: selected,\n })}\n style={{ height: getColY(_columnLen) }}\n />\n </>\n )}\n </div>\n\n <BidirectionalHandles />\n </div>\n );\n};\n\nexport const DashboardNode: FunctionComponent<NodeProps> = ({ data }) => {\n const {\n dashboard_name,\n workbook_name,\n dashboard_url: _dashboard_url,\n description: _description,\n created_by: _created_by,\n last_modified: _last_modified,\n table,\n } = data;\n const flow = useReactFlow();\n\n const {\n state: {\n selectedTable,\n collectColumns: _collectColumns,\n selectedColumn,\n leftExpansion,\n rightExpansion,\n selectCheck: _selectCheck,\n nonSelectCheck: _nonSelectCheck,\n errors,\n },\n rerender: _rerender,\n } = useLineageContext();\n\n const lineageDispatch = useLineageDispatch();\n const selected = selectedTable === table;\n\n const onDetailsClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n lineageDispatch(setSelectedTable(table));\n lineageDispatch(setSidebarScreen(DASHBOARD_SIDEBAR));\n };\n\n return (\n <div\n className=\"al-relative\"\n style={{\n opacity: !selectedColumn?.name ? 1 : 0.5,\n }}\n >\n <div\n className={styles.table_node}\n onClick={async () => {\n const nodes = flow.getNodes();\n const edges = flow.getEdges();\n lineageDispatch(setMinRange(calculateMinLevel(nodes, edges, table)));\n lineageDispatch(\n setNodeCount(\n await calculateNodeCount(nodes, edges, table, leftExpansion, rightExpansion)\n )\n );\n setHighlightedTableConnections(flow, table);\n lineageDispatch(setSelectedTable(table));\n }}\n >\n <Stack\n direction=\"column\"\n align=\"start\"\n gap=\"xs\"\n className={classNames(styles.header, {\n [styles.selected]: selected,\n [styles.collapse]: true, // Dashboard nodes don't show columns, so always collapsed\n })}\n >\n <Stack direction=\"column\" align=\"start\" gap=\"xs\" className=\"al-w-full\">\n <div className={styles.table_header}>\n <div\n className={classNames(\n styles.node_icon,\n NODE_TYPE_STYLES[\"dashboard\" as keyof typeof NODE_TYPE_STYLES]\n )}\n >\n <NodeTypeIcon nodeType=\"dashboard\" />\n <div>{NODE_TYPE_SHORTHAND[\"dashboard\" as keyof typeof NODE_TYPE_SHORTHAND]}</div>\n </div>\n <div className=\"overflow-x\">\n <div className=\"al-truncate\">{dashboard_name}</div>\n {workbook_name && (\n <div className=\"al-text-muted-foreground al-text-[0.75em]\">{workbook_name}</div>\n )}\n </div>\n {errors?.[table]?.length && (\n <Tooltip\n title={\n <div className={styles.error_tooltip}>\n {errors[table].map((line, i) => (\n <div key={i} className=\"al-mb-1\">\n {i + 1}. {line}\n </div>\n ))}\n </div>\n }\n >\n <AlertErrorIcon />\n </Tooltip>\n )}\n </div>\n <Stack\n direction=\"row\"\n align=\"center\"\n justify=\"between\"\n gap=\"xs\"\n className=\"al-w-full al-h-[1.6em]\"\n >\n <Stack justify=\"end\" className=\"al-w-full\">\n <div\n className={cn(\"nodrag\", selected ? \"al-text-brand\" : \"al-text-muted-foreground\")}\n onClick={onDetailsClick}\n data-testid={\"view-details-btn-\" + table}\n >\n Details\n </div>\n </Stack>\n </Stack>\n </Stack>\n </Stack>\n </div>\n <BidirectionalHandles />\n </div>\n );\n};\n\nconst SavingsPerformanceBadge = ({\n percentValue,\n className,\n}: PropsWithChildren<{ percentValue?: PercentValue; className: string }>) => {\n if (!percentValue) return null;\n return (\n <Tooltip title={percentValue.tooltip}>\n <div className={className}>\n <div className={styles.value}>{percentValue.value}</div>\n <div className={styles.percent}>{percentValue.percent}</div>\n </div>\n </Tooltip>\n );\n};\n\nexport const SqlTableNode: FunctionComponent<NodeProps> = ({ data }) => {\n const { table, nodeType, label } = data;\n\n const {\n state: {\n sqlLineage,\n highlightedNodes,\n externalSidePanel,\n selectedNode,\n nodeSavingsPerformance,\n nodesCost,\n },\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n const nType = (nodeType || \"unknown\") as keyof typeof NODE_TYPE_SHORTHAND;\n return (\n <div className=\"al-position-relative\">\n <div className={styles.node_stats}>\n <SavingsPerformanceBadge\n percentValue={nodeSavingsPerformance[table]?.savings}\n className={styles.savings}\n />\n <SavingsPerformanceBadge\n percentValue={nodeSavingsPerformance[table]?.performance}\n className={styles.performance}\n />\n </div>\n <div\n className={styles.static_table_node}\n onClick={() => {\n document.dispatchEvent(new CustomEvent(\"selectedNode\", { detail: table }));\n }}\n >\n <Stack\n direction=\"column\"\n align=\"start\"\n className={classNames(styles.header, {\n [styles.collapse]: true,\n [styles.highlighted]: highlightedNodes.includes(table),\n [styles.selected]: selectedNode === table,\n })}\n >\n <Stack\n direction=\"row\"\n justify=\"between\"\n align=\"center\"\n gap=\"xxs\"\n className=\"al-w-full al-px-2\"\n >\n {nodesCost[table] && (\n <Tooltip title={nodesCost[table].tooltip}>\n <div className={classNames(styles.cost_data)}>\n <div>{nodesCost[table].value}</div>\n <div>{nodesCost[table].percent}</div>\n </div>\n </Tooltip>\n )}\n <div className={classNames(styles.node_icon, NODE_TYPE_STYLES[nType])}>\n <NodeTypeIconForSQL nodeType={nType} />\n </div>\n <div />\n <div className=\"lines-2\">{label}</div>\n <div className=\"spacer\" />\n <div />\n <div\n className={classNames(\n styles.details_btn,\n !sqlLineage || nType === \"unknown\" ? styles.disable : styles.enable\n )}\n onClick={e => {\n e.stopPropagation();\n if (nType === \"unknown\") return;\n if (externalSidePanel) return;\n lineageDispatch(setSelectedTable(table));\n }}\n >\n <ArrowRightDoubleIcon />\n </div>\n </Stack>\n </Stack>\n </div>\n <BidirectionalHandles />\n </div>\n );\n};\n\nexport const SeeMoreNode: FunctionComponent<NodeProps> = ({ data }) => {\n const { tables = [], prevTable, right, level } = data as TMoreTables;\n const {\n state: { moreTables },\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n const flow = useReactFlow();\n\n const handleClick = useCallback(\n (e: MouseEvent) => {\n e.stopPropagation();\n lineageDispatch(setSidebarScreen(TABLES_SIDEBAR));\n lineageDispatch(setMoreTables({ ...moreTables, tables, prevTable, right, level }));\n },\n [level, lineageDispatch, moreTables, prevTable, right, tables]\n );\n\n return (\n <div className={styles.see_more_node} onClick={handleClick}>\n <div className=\"fw-semibold\">See more</div>\n <div className=\"spacer\" />\n <div>{tables.filter(t => !flow.getNode(t.table)).length || \"\"}</div>\n <BidirectionalHandles />\n </div>\n );\n};\n\nexport const SelfConnectingEdge: FunctionComponent<EdgeProps> = props => {\n const { sourceX, sourceY, targetX, targetY, markerEnd } = props;\n const radiusX = (sourceX - targetX) * 0.6;\n const radiusY = 50;\n const edgePath = `M ${sourceX - 5} ${sourceY} A ${radiusX} ${radiusY} 0 1 0 ${\n targetX + 2\n } ${targetY}`;\n\n return <BaseEdge path={edgePath} markerEnd={markerEnd} />;\n};\n\nexport const ColumnNode: FunctionComponent<NodeProps> = ({ data }) => {\n const { column, table, viewsType, viewsCode, nodeType, datatype } = data;\n const {\n state: { selectedColumn, showCodeModal },\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n const isSelected = selectedColumn?.table === table && selectedColumn?.name === column;\n\n const viewsColor = viewsType && VIEWS_TYPE_COLOR[viewsType as ViewsTypes];\n const customStyles = viewsColor ? { borderColor: viewsColor } : {};\n const flow = useReactFlow();\n\n const handleClick = () => {\n const currentNode = flow.getNode(getColumnId(table, column));\n if (!currentNode) {\n return;\n }\n lineageDispatch(setSelectedTable(\"\"));\n lineageDispatch(setSelectedColumn({ name: column, table }));\n highlightColumnConnections(currentNode, flow);\n };\n\n const hasCode = useMemo(() => {\n return (\n Object.values((viewsCode as Record<string, [string, string][]>) || {})\n .flat()\n .filter(([, query_hash]) => Boolean(query_hash))\n .map(([code]) => code).length > 0\n );\n }, [viewsCode]);\n\n return (\n <div\n className={classNames(styles.column_node, isSelected ? styles.selected : styles.default)}\n style={customStyles}\n onClick={handleClick}\n >\n <div className={styles.column_name}>{column}</div>\n <BidirectionalHandles />\n <div className={styles.column_top_right}>\n {hasCode && (\n <Tooltip title={\"Click to view code\"}>\n <div\n className={styles.column_code_icon}\n onClick={e => {\n e.stopPropagation();\n if (showCodeModal) {\n lineageDispatch(\n setModalArgs({\n type: \"views_code\",\n args: {\n table,\n viewsType,\n viewsCode,\n nodeType,\n column,\n datatype,\n },\n })\n );\n } else {\n showExternalViewCodeModal({\n table,\n viewsType,\n viewsCode,\n nodeType,\n column,\n datatype,\n label: flow.getNode(table)?.data?.label,\n });\n }\n }}\n >\n <CodeIcon />\n </div>\n </Tooltip>\n )}\n {viewsType && viewsType !== \"Non select\" && <ViewsTypeBadge viewsType={viewsType} />}\n </div>\n </div>\n );\n};\n\nexport const SQL_ICONS: Record<string, React.ReactNode> = {\n INNER_JOIN: <SqlInnerJoinIcon />,\n OUTER_JOIN: <SqlOuterJoinIcon />,\n LEFT_JOIN: <SqlLeftJoinIcon />,\n FULL_JOIN: <SqlFullJoinIcon />,\n RIGHT_JOIN: <SqlRightJoinIcon />,\n CROSS_JOIN: <SqlCrossJoinIcon />,\n LATERAL_JOIN: <SqlLateralJoinIcon />,\n FILTER: <SqlFilterIcon />,\n GROUP: <SqlGroupByIcon />,\n LIMIT: <SqlLimitIcon />,\n SORT: <SqlOrderByIcon />,\n UNION: <SqlUnionIcon />,\n SELECT: <SqlSelectIcon className={\"!al-size-6\"} />,\n};\n\nexport const DIALECT_ICON = {\n postgres: PostgresIcon,\n snowflake: SnowflakeIcon,\n s3: S3Icon,\n};\n\nexport const OpNode: FunctionComponent<NodeProps> = ({ data }) => {\n const { type, expression, id } = data;\n const {\n state: {\n theme,\n highlightedNodes,\n externalSidePanel,\n selectedNode,\n nodeSavingsPerformance,\n nodesCost,\n },\n } = useLineageContext();\n const isDarkMode = theme === \"dark\";\n const lineageDispatch = useLineageDispatch();\n return (\n <div style={{ width: T_NODE_W, display: \"flex\", justifyContent: \"center\" }}>\n <BidirectionalHandles />\n <Stack direction=\"column\">\n <div\n className={classNames(styles.op_node, {\n [styles.highlighted]: highlightedNodes.includes(id),\n [styles.selected]: selectedNode === id,\n })}\n onClick={() => {\n if (externalSidePanel) {\n document.dispatchEvent(new CustomEvent(\"selectedNode\", { detail: id }));\n } else {\n lineageDispatch(\n setModalArgs({\n type: \"op_node\",\n args: { op_code: expression, op_type: type },\n })\n );\n }\n }}\n >\n {nodesCost[id] && (\n <Tooltip title={nodesCost[id].tooltip}>\n <div className={classNames(styles.cost_data)}>\n <div>{nodesCost[id].value}</div>\n <div>{nodesCost[id].percent}</div>\n </div>\n </Tooltip>\n )}\n <div\n className={classNames(\n styles.node_icon,\n isDarkMode ? styles.dark_mode : styles.light_mode\n )}\n >\n {SQL_ICONS[type]}\n </div>\n <div />\n <div className={styles.op_type_text}>\n <span>{type}</span>\n <div className={styles.node_stats}>\n <SavingsPerformanceBadge\n percentValue={nodeSavingsPerformance[id]?.savings}\n className={styles.savings}\n />\n <SavingsPerformanceBadge\n percentValue={nodeSavingsPerformance[id]?.performance}\n className={styles.performance}\n />\n </div>\n </div>\n <div />\n </div>\n </Stack>\n </div>\n );\n};\n","import { PropsWithChildren } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport \"./SidebarModal.scss\";\nimport { CloseIcon } from \"../../assets/icons\";\n\nfunction SidebarModal({\n isOpen,\n closeModal,\n width = 350,\n children,\n}: PropsWithChildren<{\n isOpen: boolean;\n closeModal: () => void;\n width: number | string;\n}>) {\n const sidebarElem = document.getElementById(\"lineage-sidebar\");\n if (!sidebarElem) return null;\n const widthString = typeof width === \"number\" ? `${width}px` : width;\n return createPortal(\n <div className={`sidebar-modal ${isOpen ? \"\" : \"d-none\"}`}>\n {isOpen && (\n <>\n <div className=\"sidebar-background-screen\" onClick={closeModal} />\n <div className=\"sidebar-modal-content\" style={{ width: widthString }}>\n <div className=\"sidebar-close-button\" onClick={closeModal}>\n <CloseIcon />\n </div>\n {children}\n </div>\n </>\n )}\n </div>,\n sidebarElem\n );\n}\n\nexport { SidebarModal };\n","import { ComponentProps } from \"react\";\nimport { Input, Textarea } from \"@altimateai/lego\";\n\nexport function CustomInput(props: ComponentProps<typeof Input>) {\n return <Input className=\"custom-input\" {...props} />;\n}\n\nexport function CustomMultilineInput(props: Omit<ComponentProps<typeof Textarea>, \"rows\">) {\n return <Textarea className=\"custom-input\" {...props} rows={4} />;\n}\n","import { PropsWithChildren, useMemo, useState } from \"react\";\nimport { Stack } from \"@altimateai/lego\";\nimport styles from \"./styles.module.scss\";\nimport classNames from \"classnames\";\nimport { useReactFlow } from \"reactflow\";\nimport { layoutElementsOnCanvas, moveTableFromSeeMoreToCanvas } from \"../graph\";\nimport { ColumnLineage, Table } from \"../types\";\nimport { CustomInput } from \"./Form\";\nimport { TestsIcon, EphemeralIcon, ExpandLineageIcon } from \"../assets/icons\";\nimport { NODE_TYPE_SHORTHAND, NodeIcon } from \"./Column\";\nimport { NODE_TYPE_STYLES, TableNodePill } from \"./Column\";\nimport { useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport { setSidebarScreen } from \"../context/LineageSlice\";\n\nexport type TMoreTables = {\n prevTable?: string;\n tables?: Table[];\n right?: boolean;\n level?: number;\n lineage?: ColumnLineage[];\n};\n\nfunction TableHeader({\n nodeType,\n label,\n table,\n tests,\n materialization,\n canLineageExpand,\n}: PropsWithChildren<{\n nodeType: string;\n label: string;\n table: string;\n tests: { key: string; path: string }[];\n materialization?: string | undefined;\n canLineageExpand: boolean;\n}>) {\n const nType = nodeType as keyof typeof NODE_TYPE_SHORTHAND;\n const tableId = table.replace(/[^a-zA-Z0-9]/g, \"-\");\n return (\n <Stack direction=\"column\" align=\"start\" gap=\"xs\" className=\"al-w-full\">\n <div className={styles.table_header}>\n <div className={classNames(styles.node_icon, NODE_TYPE_STYLES[nType])}>\n <NodeIcon nodeType={nodeType} />\n <div>{NODE_TYPE_SHORTHAND[nType]}</div>\n </div>\n <div className=\"lines-2\">{label}</div>\n {canLineageExpand && (\n <div className={classNames(styles.expand_lineage_icon, \"al-w-6 al-h-6\")}>\n <ExpandLineageIcon />\n </div>\n )}\n </div>\n {(tests?.length > 0 || materialization) && (\n <Stack direction=\"row\" gap=\"xs\" className={classNames(styles.node_extra_info)}>\n {tests?.length > 0 && (\n <TableNodePill\n id={\"table-node-tests-\" + tableId}\n icon={<TestsIcon />}\n text={tests.length.toString()}\n label=\"Tests\"\n />\n )}\n {materialization && (\n <TableNodePill\n id={\"table-node-materilization-\" + tableId}\n icon={<EphemeralIcon />}\n text={materialization}\n label=\"Materialization\"\n />\n )}\n </Stack>\n )}\n </Stack>\n );\n}\n\nfunction MoreTables() {\n const {\n state: { moreTables, selectCheck, nonSelectCheck },\n rerender,\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n const { tables: _tables, level, lineage } = moreTables as TMoreTables;\n const flow = useReactFlow();\n\n const tables = useMemo(() => {\n const _lineageTables = new Set();\n for (const item of lineage || []) {\n _lineageTables.add(item.source[0]);\n _lineageTables.add(item.target[0]);\n }\n return _tables\n ?.map(t => ({ ...t, canLineageExpand: _lineageTables.has(t.table) }))\n ?.sort((a, b) => (a.canLineageExpand ? -1 : b.canLineageExpand ? 1 : 0));\n }, [_tables, lineage]);\n\n const onItemClick = async (_table: Table) => {\n const nodes = [...flow.getNodes()];\n const edges = [...flow.getEdges()];\n const allTablesAdded = moveTableFromSeeMoreToCanvas(nodes, edges, _table, moreTables, {\n direct: selectCheck,\n indirect: nonSelectCheck,\n });\n if (allTablesAdded) {\n lineageDispatch(setSidebarScreen(\"\"));\n }\n\n layoutElementsOnCanvas(nodes, edges);\n flow.setNodes(nodes);\n flow.setEdges(edges);\n rerender();\n };\n\n const selectAllTables = () => {\n if (!tables || tables.length === 0) return;\n\n const nodes = [...flow.getNodes()];\n const edges = [...flow.getEdges()];\n\n // Process all tables that aren't already on the canvas\n let allTablesAdded = true;\n for (const table of tables) {\n const _node = flow.getNode(table.table);\n const isNodeOnOtherLevel = _node && _node.data.level !== level;\n\n if (!_node && !isNodeOnOtherLevel) {\n const result = moveTableFromSeeMoreToCanvas(nodes, edges, table, moreTables, {\n direct: selectCheck,\n indirect: nonSelectCheck,\n });\n if (!result) {\n allTablesAdded = false;\n }\n }\n }\n\n if (allTablesAdded) {\n lineageDispatch(setSidebarScreen(\"\"));\n }\n\n layoutElementsOnCanvas(nodes, edges);\n flow.setNodes(nodes);\n flow.setEdges(edges);\n rerender();\n };\n\n const [filteredTables, setFilteredTables] = useState(tables);\n return (\n <Stack direction=\"column\" className=\"p-2 al-h-full\">\n <Stack direction=\"row\" justify=\"between\" align=\"center\" className=\"mb-2\">\n <div className=\"fw-semibold fs-5\">Tables</div>\n <button\n className=\"btn btn-sm btn-outline-primary\"\n onClick={selectAllTables}\n disabled={!filteredTables || filteredTables.length === 0}\n >\n Select All\n </button>\n </Stack>\n <CustomInput\n placeholder=\"Search by table name\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n const _search = e.target.value.toLowerCase();\n setFilteredTables(tables!.filter(t => t.table.toLowerCase().includes(_search)));\n }}\n />\n <div className=\"mb-3\" />\n <div className=\"al-h-full al-overflow-y\">\n <Stack direction=\"column\" gap=\"sm\">\n {filteredTables!.map(t => {\n const _node = flow.getNode(t.table);\n const isNodeOnOtherLevel = _node && _node.data.level !== level;\n return (\n <div\n key={t.table}\n className={classNames(styles.table_card, {\n [styles.selected]: _node,\n // [styles.disabled]: isNodeOnOtherLevel,\n })}\n onClick={e => {\n e.stopPropagation();\n if (isNodeOnOtherLevel) return;\n onItemClick(t);\n }}\n >\n <TableHeader\n nodeType={t.nodeType}\n label={t.label}\n table={t.table}\n tests={t.tests}\n materialization={t.materialization}\n canLineageExpand={t.canLineageExpand}\n />\n </div>\n );\n })}\n </Stack>\n </div>\n </Stack>\n );\n}\n\nexport { MoreTables };\n","import { forwardRef, HTMLAttributes } from \"react\";\nimport { cn } from \"./utils\";\n\ninterface CollapseProps extends HTMLAttributes<HTMLDivElement> {\n isOpen?: boolean;\n}\n\nconst Collapse = forwardRef<HTMLDivElement, CollapseProps>(\n ({ className, isOpen = false, children, ...props }, ref) => {\n if (!isOpen) return null;\n\n return (\n <div ref={ref} className={cn(\"al-transition-all\", className)} {...props}>\n {children}\n </div>\n );\n },\n);\n\nCollapse.displayName = \"Collapse\";\n\nexport default Collapse;\n","import { forwardRef, HTMLAttributes } from \"react\";\nimport { cn } from \"./utils\";\n\nconst Table = forwardRef<HTMLTableElement, HTMLAttributes<HTMLTableElement>>(\n ({ className, ...props }, ref) => (\n <table\n ref={ref}\n className={cn(\"al-w-full al-caption-bottom al-text-sm\", className)}\n {...props}\n />\n ),\n);\nTable.displayName = \"Table\";\n\nexport default Table;\n","// extracted by css-extract-rspack-plugin\nexport default {\"component\":\"component-A82MOD\",\"spin\":\"spin-mK3tpt\"};","import { FunctionComponent } from \"react\";\nimport styles from \"./styles.module.scss\";\n// import Lottie from \"react-lottie\";\n// import * as animationData from \"../assets/animation/Loader.json\";\n\n// const defaultOptions = {\n// loop: true,\n// autoplay: true,\n// animationData: animationData,\n// rendererSettings: {\n// preserveAspectRatio: \"xMidYMid slice\",\n// },\n// };\n\nexport const ComponentLoader: FunctionComponent<{\n top?: number;\n left?: number;\n label?: string;\n}> = ({ top = 50, left = 50, label }) => {\n return (\n <div className={styles.component} style={{ top: `${top}%`, left: `${left}%` }}>\n {/* <Lottie options={defaultOptions} width={200} height={200} /> */}\n <div style={{ marginTop: \"-70px\" }}>{label}</div>\n </div>\n );\n};\n","// extracted by css-extract-rspack-plugin\nexport default {\"level_tag\":\"level_tag-lfobAk\",\"levelTag\":\"level_tag-lfobAk\"};","import { FunctionComponent } from \"react\";\nimport styles from \"./styles.module.scss\";\nimport classNames from \"classnames\";\n\nexport const ColorTag: FunctionComponent<{ label: string }> = ({ label }) => (\n <div className={classNames(styles.level_tag)}>{label}</div>\n);\n","import { FunctionComponent } from \"react\";\nimport styles from \"./styles.module.scss\";\nimport classNames from \"classnames\";\nimport { Stack } from \"@altimateai/lego\";\n\nconst PurposeSection: FunctionComponent<{\n purpose: string;\n}> = ({ purpose }) => {\n return (\n <div className={classNames(styles.card, \"purpose-section\")}>\n <Stack direction=\"column\" gap=\"sm\">\n <Stack direction=\"column\" gap=\"xs\">\n <div className=\"fs-5 fw-semibold\">Description</div>\n <div className={classNames(styles.column_card)}>\n <div className=\"font-normal fs-xxs\">{purpose}</div>\n </div>\n </Stack>\n </Stack>\n </div>\n );\n};\n\nexport default PurposeSection;\n","import {\n useState,\n useEffect,\n FunctionComponent,\n Dispatch,\n SetStateAction,\n PropsWithoutRef,\n useContext,\n ReducerWithoutAction,\n} from \"react\";\nimport { useReactFlow } from \"reactflow\";\nimport styles from \"./styles.module.scss\";\nimport classNames from \"classnames\";\nimport { Collapse, Table as UITable } from \"../../../shared\";\nimport { CLL } from \"../cllUtils\";\nimport {\n bfsTraversal,\n expandTableLineage,\n layoutElementsOnCanvas,\n removeColumnNodes,\n resetTableHighlights,\n setHighlightedTableConnections,\n} from \"../graph\";\n\n// ui components\nimport { ComponentLoader } from \"./Loader\";\nimport { ColumnDatatype, NodeIcon } from \"./Column\";\nimport { ColorTag } from \"./Tags\";\n\n// assets\nimport { ExpandLineageIcon } from \"../assets/icons\";\nimport { CustomInput } from \"./Form\";\nimport { defaultEdgeStyle, isNotColumn, toggleColumnEdges, toggleModelEdges } from \"../utils\";\nimport PurposeSection from \"./Purpose\";\nimport {\n Column,\n ColumnLineage,\n Columns,\n Confidence,\n Table,\n CollectColumn,\n DbtInfo,\n} from \"../types\";\nimport { getColumns, getDbtInfo, previewFeature, showInfoNotification } from \"../api\";\nimport { LineageContext, useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport {\n setSelectedColumn,\n setCollectColumns,\n setSidebarScreen,\n setConfidence,\n updateConfidenceWithOperatorList,\n mergeSeeMoreTables,\n mergeCollectColumns,\n setErrors,\n setModalArgs,\n} from \"../context/LineageSlice\";\nimport { CodeBlock, IconButton, Stack } from \"@altimateai/lego\";\nimport { LineageType } from \"../context/types\";\nimport {\n BoltIcon,\n BracketsIcon,\n CaseSensitiveIcon,\n ChevronDownIcon,\n ChevronUpIcon,\n DbtIcon,\n HalfCircleIcon,\n ShareIcon,\n SplitHorizontalIcon,\n} from \"../../../assets/icons\";\nimport { Button, Card, CardContent } from \"@altimateai/lego\";\nimport ViewsTypeBadge from \"./ViewsTypeBadge\";\n\ninterface TableData {\n [key: string]: string | number | boolean | null | undefined;\n}\n\ninterface LightDashNode {\n type: string;\n name: string;\n description?: string;\n meta?: Record<string, unknown>;\n sql?: string;\n time_intervals?: string[];\n hidden?: boolean;\n round?: boolean;\n format?: string;\n compact?: boolean;\n groups?: string[];\n urls?: string[];\n required_attributes?: string[];\n colors?: string[];\n joins?: unknown[];\n}\n\nconst ColumnCard: FunctionComponent<{\n column: Column & { code?: string };\n handleClick: () => void;\n selected: boolean;\n isSelectable: boolean;\n}> = ({ column, handleClick, selected, isSelectable }) => {\n const {\n state: { theme, config, renderTags },\n dispatch,\n } = useContext(LineageContext);\n return (\n <div\n className={classNames(styles.column_card, {\n [styles.selected]: selected,\n \"cursor-pointer\": isSelectable,\n })}\n onClick={handleClick}\n data-testid={\"table-details-\" + column.name}\n >\n <Stack align=\"center\" gap=\"xs\">\n <ColumnDatatype datatype={column.datatype || \"\"} />\n <div className=\"lines-2\">{column.name}</div>\n <div className=\"spacer\" />\n {column.is_transformation && <ViewsTypeBadge viewsType={\"Transformation\"} />}\n {config.exportFinalLineage && (\n <IconButton\n title=\"Export full lineage in CSV\"\n className=\"al-w-8 al-h-8\"\n onClick={async e => {\n e.stopPropagation();\n dispatch(\n setModalArgs({\n type: \"export_final_lineage\",\n args: { table: column.table, column: column.name },\n })\n );\n }}\n >\n <ShareIcon />\n </IconButton>\n )}\n {column.can_lineage_expand && (\n <div className={styles.expand_lineage_icon}>\n <ExpandLineageIcon />\n </div>\n )}\n {column.datatype && <ColorTag label={column.datatype} />}\n </Stack>\n {column.description && (\n <Stack direction=\"column\">\n <div className=\"al-font-normal al-text-xs al-text-gray-500\">{column.description}</div>\n </Stack>\n )}\n {renderTags && renderTags({ column, table_rk: column.table })}\n {column.code && (\n <CodeBlock code={column.code} language=\"sql\" editorTheme=\"tomorrow\" theme={theme} />\n )}\n </div>\n );\n};\n\nconst ColumnSection: FunctionComponent<{\n columns: Column[];\n filteredColumn: Column[];\n setFilteredColumn: Dispatch<SetStateAction<Column[]>>;\n handleColumnClick: (_x: Column) => Promise<void>;\n selectedTable: Table | null;\n selectedColumn?: { name: string; table: string };\n setData: Dispatch<SetStateAction<Columns | null>>;\n allowSyncColumnsWithDB?: boolean;\n lineageType: LineageType;\n}> = ({\n columns,\n filteredColumn,\n setFilteredColumn,\n handleColumnClick,\n selectedTable,\n selectedColumn,\n setData,\n allowSyncColumnsWithDB,\n lineageType,\n}) => {\n const isEphemeral = selectedTable?.materialization === \"ephemeral\";\n const isAnalysis = selectedTable?.nodeType === \"analysis\";\n return (\n <div className={classNames(styles.card, \"al-flex-grow column-section\")}>\n <Stack direction=\"column\" gap=\"md\" className=\"al-h-full al-p-2\">\n <Stack align=\"center\" gap=\"xs\">\n <div className=\"al-text-xl al-font-semibold\">Columns</div>\n <div className=\"spacer\" />\n {allowSyncColumnsWithDB && !isEphemeral && !isAnalysis && (\n <Button\n onClick={() => {\n if (!selectedTable) return;\n getColumns(selectedTable.table, true).then(_data => {\n if (_data) {\n setData(_data);\n setFilteredColumn(_data.columns);\n }\n });\n }}\n >\n Sync with DB\n </Button>\n )}\n </Stack>\n <CustomInput\n type=\"text\"\n placeholder=\"Search by column name\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n const _search = e.target.value.toLowerCase();\n setFilteredColumn(columns.filter(c => c.name.toLowerCase().includes(_search)));\n }}\n />\n <Stack align=\"center\" gap=\"xs\">\n {!isEphemeral && <div className=\"al-text-xs\">Select column for lineage</div>}\n <div className=\"spacer\" />\n <div className=\"al-text-xs al-text-gray-500\">{filteredColumn.length} columns</div>\n </Stack>\n <Stack direction=\"column\" gap=\"md\">\n {filteredColumn.map(_column => (\n <ColumnCard\n key={_column.name}\n column={_column}\n handleClick={() => {\n if (isEphemeral) return;\n handleColumnClick(_column);\n }}\n selected={\n _column.name === selectedColumn?.name && _column.table === selectedColumn?.table\n }\n isSelectable={!isEphemeral && lineageType === \"dynamic\"}\n />\n ))}\n </Stack>\n </Stack>\n </div>\n );\n};\n\nconst TestSection: FunctionComponent<{\n tests: { key: string; path: string }[];\n}> = ({ tests }) => {\n const [filteredTests, setFilteredTests] = useState(tests);\n return (\n <div className={classNames(styles.card, \"al-flex-grow column-section\")}>\n <Stack direction=\"column\" gap=\"md\" className=\"al-h-full al-p-2\">\n <div className=\"al-text-xl al-font-semibold\">Tests</div>\n <CustomInput\n type=\"text\"\n placeholder=\"Search by test\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n const _search = e.target.value.toLowerCase();\n setFilteredTests(tests.filter(t => t.key.toLowerCase().includes(_search)));\n }}\n />\n <Stack align=\"center\" gap=\"xs\">\n <div className=\"al-text-xs al-text-gray-500\">{filteredTests.length} tests</div>\n </Stack>\n <Stack direction=\"column\" gap=\"md\">\n {filteredTests.map(_test => (\n <div key={_test.key} className={styles.column_card}>\n <Stack align=\"center\" gap=\"xs\">\n <div className=\"lines-2\">{_test.key}</div>\n </Stack>\n </div>\n ))}\n </Stack>\n </Stack>\n </div>\n );\n};\n\nconst icons = [BracketsIcon, HalfCircleIcon, CaseSensitiveIcon, SplitHorizontalIcon];\n\nconst getIconForType = (type: string): string => {\n switch (type) {\n case \"dimension\":\n return BracketsIcon;\n case \"Order Type\":\n return HalfCircleIcon;\n case \"metrics\":\n return CaseSensitiveIcon;\n case \"table\":\n return SplitHorizontalIcon;\n default:\n return icons[Math.floor(Math.random() * icons.length)];\n }\n};\n\nconst tableMetaKeys = [\n \"label\",\n \"type\",\n \"description\",\n \"sql\",\n \"time_intervals\",\n \"hidden\",\n \"round\",\n \"format\",\n \"compact\",\n \"groups\",\n \"urls\",\n \"required_attributes\",\n \"colors\",\n \"joins\",\n];\n\nconst DataTable = ({ data }: { data: TableData }) => {\n return (\n <UITable>\n <tbody>\n {Object.entries(data).map(([key, value]) => (\n <tr key={key}>\n <td>{key}</td>\n <td>{String(value)}</td>\n </tr>\n ))}\n </tbody>\n </UITable>\n );\n};\n\nconst renderValue = (value: unknown): JSX.Element | string => {\n if (typeof value === \"object\" && value !== null) {\n return <DataTable data={value as TableData} />;\n }\n return String(value);\n};\n\nexport const LightDashSection: FunctionComponent<{ node: LightDashNode }> = ({ node }) => {\n const [openSections, setOpenSections] = useState<Record<string, boolean>>({});\n\n const toggleCollapse = (key: string) => {\n setOpenSections(prev => ({ ...prev, [key]: !prev[key] }));\n };\n\n return (\n <Stack direction=\"column\" gap=\"md\">\n {tableMetaKeys.map(key => {\n const value = node[key as keyof LightDashNode];\n if (!value) return null;\n\n return (\n <Card key={key}>\n <CardContent className=\"al-p-2 al-pt-2 al-pb-2\">\n <div className=\"al-cursor-pointer\" onClick={() => toggleCollapse(key)}>\n <Stack align=\"center\" gap=\"xs\">\n <NodeIcon nodeType={getIconForType(key)} />\n <div className=\"al-capitalize\">{key}</div>\n <div className=\"spacer\" />\n {openSections[key] ? <ChevronUpIcon /> : <ChevronDownIcon />}\n </Stack>\n </div>\n <Collapse isOpen={openSections[key]}>\n <div className=\"al-mt-2\">{renderValue(value)}</div>\n </Collapse>\n </CardContent>\n </Card>\n );\n })}\n </Stack>\n );\n};\n\nexport const HeaderSection = ({\n nodeType,\n table,\n tableData,\n currentTableId,\n onNavigate,\n}: PropsWithoutRef<{\n nodeType: string;\n table: string;\n tableData?: Table;\n currentTableId?: string;\n onNavigate?: (_navigationInfo: { url?: string; id?: string; table: string }) => void;\n}>) => {\n const {\n state: { client },\n } = useLineageContext();\n\n // Check if we should show the button based on provided currentTableId and client\n const shouldShowButton = () => {\n // Only show button in SaaS client (not in extension client)\n if (client !== \"saas\") return false;\n\n if (!tableData?.id && !tableData?.url) return false;\n if (tableData?.url) return true;\n\n // Don't show the button if the current ID is the same as tableData.id\n return currentTableId !== tableData.id;\n };\n\n const handleNavigateClick = () => {\n if (!onNavigate || !tableData) return;\n\n onNavigate({\n url: tableData.url as string | undefined,\n id: tableData.id,\n table: tableData.table,\n });\n };\n\n return (\n <div className={styles.table_details_header}>\n <NodeIcon nodeType={nodeType} />\n <Stack align=\"center\">\n <div className=\"al-font-semibold al-text-xl lines-2\">{table}</div>\n {(tableData?.url || tableData?.id) && shouldShowButton() && (\n <>\n <div className=\"spacer\" />\n <Button size=\"sm\" onClick={handleNavigateClick}>\n View Details\n </Button>\n </>\n )}\n </Stack>\n </div>\n );\n};\n\nconst TableDetails = ({\n lineageType,\n currentTableId,\n onNavigate,\n}: {\n lineageType: LineageType;\n currentTableId?: string;\n onNavigate?: (navigationInfo: { url?: string; id?: string; table: string }) => void;\n}) => {\n const {\n rerender,\n state: {\n selectedTable,\n selectedColumn,\n selectCheck,\n nonSelectCheck,\n aiEnabled,\n allowSyncColumnsWithDB,\n errors,\n theme,\n lightdashEnabled,\n },\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n\n const flow = useReactFlow();\n const [filteredColumn, setFilteredColumn] = useState<Column[]>([]);\n const [data, setData] = useState<Columns | null>(null);\n const [dbtInfo, setDbtInfo] = useState<DbtInfo | null>(null);\n const [tab, setTab] = useState(0);\n\n const [isLoading, setIsLoading] = useState(true);\n useEffect(() => {\n if (!selectedTable) return;\n setIsLoading(true);\n getColumns(selectedTable, false)\n .then(_data => {\n setData(_data);\n setFilteredColumn(_data.columns);\n setIsLoading(false);\n })\n .catch(() => {\n setIsLoading(false);\n });\n getDbtInfo(selectedTable)\n .then(_data => {\n setDbtInfo(_data.dbt_info);\n setIsLoading(false);\n })\n .catch(() => {\n setDbtInfo(null);\n setIsLoading(false);\n });\n }, [selectedTable]);\n\n const handleColumnClick = async (_column: Column) => {\n if (!aiEnabled) {\n previewFeature();\n return;\n }\n\n if (CLL.inProgress) {\n CLL.showCllInProgressMsg();\n return;\n }\n\n // remove column selection when already selected\n if (selectedColumn?.table === _column.table && selectedColumn?.name === _column.name) {\n const [_nodes, _edges] = removeColumnNodes(flow.getNodes(), flow.getEdges());\n // Model edges will be hidden when column lineage is selected, so unhide them\n toggleModelEdges(_edges, true);\n toggleColumnEdges(_edges, true);\n\n flow.setNodes(_nodes);\n flow.setEdges(_edges);\n lineageDispatch(setSelectedColumn({ table: \"\", name: \"\" }));\n lineageDispatch(setCollectColumns({}));\n lineageDispatch(setSidebarScreen(\"\"));\n return;\n }\n\n const tableNodeData = flow.getNode(_column.table)?.data;\n if (!tableNodeData) {\n throw new Error(`table node ${_column.table} isn't visible`);\n }\n\n // expand 1st level if not already\n let _nodes = flow.getNodes();\n let _edges = flow.getEdges();\n // Model edges should be hidden when column lineage is selected\n toggleModelEdges(_edges, false);\n toggleColumnEdges(_edges, true);\n\n const addNodesEdges = async (right: boolean) => {\n [_nodes, _edges] = await expandTableLineage(_nodes, _edges, _column.table, right);\n layoutElementsOnCanvas(_nodes, _edges);\n };\n const { upstreamCount, downstreamCount } = tableNodeData;\n if (upstreamCount > 0 && _edges.filter(e => e.source === _column.table).length < upstreamCount)\n await addNodesEdges(true);\n if (\n downstreamCount > 0 &&\n _edges.filter(e => e.target === _column.table).length < downstreamCount\n )\n await addNodesEdges(false);\n\n // initializing states\n lineageDispatch(setSelectedColumn({ ..._column }));\n lineageDispatch(setSidebarScreen(\"\"));\n lineageDispatch(setCollectColumns({}));\n lineageDispatch(setConfidence({ confidence: \"high\" }));\n\n // resetting canvas\n const [nodes, edges] = resetTableHighlights(\n _nodes.filter(isNotColumn),\n _edges.filter(isNotColumn)\n );\n edges.forEach(_e => (_e.style = defaultEdgeStyle));\n flow.setNodes(nodes);\n flow.setEdges(edges);\n rerender();\n\n // starting column lineage\n const _bfsTraversal = (right: boolean) =>\n bfsTraversal(\n nodes,\n edges,\n right,\n [_column],\n (operatorList: Confidence[\"operator_list\"]) => {\n lineageDispatch(updateConfidenceWithOperatorList({ operatorList }));\n },\n (moreTables: ColumnLineage[]) => {\n lineageDispatch(mergeSeeMoreTables(moreTables));\n },\n (newCollectColumns: Record<string, CollectColumn[]>) => {\n lineageDispatch(mergeCollectColumns(newCollectColumns));\n },\n () => [flow.getNodes(), flow.getEdges()],\n (ns, es) => {\n flow.setNodes(ns);\n flow.setEdges(es);\n },\n _column,\n { direct: selectCheck, indirect: nonSelectCheck },\n (fn: ReducerWithoutAction<Record<string, string[]>>) =>\n lineageDispatch(setErrors(fn(errors)))\n );\n try {\n CLL.start();\n const result = await Promise.all([_bfsTraversal(true), _bfsTraversal(false)]);\n if (result.every(isLineage => !isLineage)) {\n lineageDispatch(setSelectedColumn({ table: \"\", name: \"\" }));\n setHighlightedTableConnections(flow, _column.table);\n if (!CLL.isCancelled) {\n showInfoNotification(\n `No lineage found for model ${_column.table} and column ${_column.name}`\n );\n }\n }\n } catch (e) {\n console.error(\"Error while performing cll for \", _column.table, _column.name, \", error:\", e);\n lineageDispatch(setSelectedColumn({ table: \"\", name: \"\" }));\n setHighlightedTableConnections(flow, _column.table);\n } finally {\n CLL.end();\n }\n };\n const selectedTableData = flow.getNode(selectedTable)?.data;\n if (isLoading || !data || !selectedTable) return <ComponentLoader />;\n const tabs = [\"Column\"];\n if (selectedTableData.tests.length) tabs.push(\"Tests\");\n if (lightdashEnabled) {\n tabs.push(\"Lightdash\");\n }\n if (dbtInfo !== null) {\n tabs.push(\"dbt\");\n }\n\n return (\n <Stack direction=\"column\" gap=\"2xl\" className=\"al-p-2 al-h-full al-overflow-y-auto\">\n <HeaderSection\n nodeType={selectedTableData.nodeType}\n table={selectedTableData.label}\n tableData={selectedTableData}\n currentTableId={currentTableId}\n onNavigate={onNavigate}\n />\n {data.purpose && <PurposeSection purpose={data.purpose} />}\n {tabs.length > 1 && (\n <div className={styles.table_details_tabs}>\n {tabs.map((label, i) => (\n <div\n key={label}\n className={classNames(styles.tab, {\n [styles.selected]: tab === i,\n })}\n onClick={() => setTab(i)}\n >\n <Stack align=\"center\" justify=\"center\" gap=\"md\">\n <div\n className={theme === \"light\" && tab !== i ? \"al-text-primary\" : \"al-text-white\"}\n >\n {label === \"Lightdash\" ? <BoltIcon /> : null}\n {label === \"dbt\" ? <DbtIcon className={\"al-w-4 al-h-4\"} /> : null}\n </div>\n {label}\n </Stack>\n </div>\n ))}\n </div>\n )}\n {tabs[tab] === \"Column\" && (\n <ColumnSection\n selectedTable={selectedTableData}\n selectedColumn={selectedColumn}\n filteredColumn={filteredColumn}\n setFilteredColumn={setFilteredColumn}\n columns={data.columns}\n handleColumnClick={handleColumnClick}\n setData={setData}\n allowSyncColumnsWithDB={allowSyncColumnsWithDB}\n lineageType={lineageType}\n />\n )}\n {tabs[tab] === \"Tests\" && <TestSection tests={selectedTableData.tests} />}\n {tabs[tab] === \"Lightdash\" && <LightDashSection node={selectedTableData} />}\n {tabs[tab] === \"dbt\" && <Stack align={\"center\"}>{renderValue(dbtInfo)}</Stack>}\n </Stack>\n );\n};\n\nexport const StaticTableDetails = ({\n currentTableId,\n onNavigate,\n}: {\n currentTableId?: string;\n onNavigate?: (navigationInfo: { url?: string; id?: string; table: string }) => void;\n} = {}) => {\n const {\n state: { theme },\n } = useContext(LineageContext);\n const {\n state: { sqlLineage, selectedTable, allowSyncColumnsWithDB },\n } = useLineageContext();\n\n const _columns = sqlLineage?.details?.[selectedTable]?.columns?.map(item => ({\n ...item,\n description: item.expression,\n }));\n const [columns, setColumns] = useState(_columns);\n const [filteredColumn, setFilteredColumn] = useState(_columns);\n const table = sqlLineage?.details?.[selectedTable];\n if (!table) {\n return null;\n }\n const { sql, type, nodeId } = table;\n\n // Create a tableData object with available information\n const tableData = {\n table: selectedTable,\n label: selectedTable,\n nodeType: type || \"cte\",\n downstreamCount: 0,\n upstreamCount: 0,\n isExternalProject: false,\n tests: [],\n nodeId,\n };\n\n return (\n <Stack direction=\"column\" gap=\"2xl\" className=\"al-p-2 al-h-full al-overflow-y-auto\">\n <HeaderSection\n nodeType={type || \"cte\"}\n table={selectedTable}\n tableData={tableData as Table}\n currentTableId={currentTableId}\n onNavigate={onNavigate}\n />\n {sql && (\n <div className={classNames(styles.card, \"al-mb-0 purpose-section\")}>\n <Stack direction=\"column\" gap=\"md\">\n <div className=\"al-text-xl al-font-semibold\">SQL</div>\n <CodeBlock\n code={sql}\n language=\"sql\"\n editorTheme=\"tomorrow\"\n showLineNumbers\n theme={theme}\n />\n </Stack>\n </div>\n )}\n <div className={classNames(styles.card, \"al-mb-0 al-flex-grow column-section\")}>\n <Stack direction=\"column\" gap=\"md\" className=\"al-h-full\">\n <Stack align=\"center\" gap=\"xs\">\n <div className=\"al-text-xl al-font-semibold\">Column</div>\n <div className=\"spacer\" />\n {allowSyncColumnsWithDB && nodeId && [\"table\", \"final\"].includes(type || \"\") && (\n <Button\n onClick={() => {\n getColumns(nodeId, true).then(_data => {\n setColumns(_data.columns);\n setFilteredColumn(_data.columns);\n });\n }}\n >\n Sync with DB\n </Button>\n )}\n </Stack>\n <CustomInput\n placeholder=\"Search by column name\"\n type=\"text\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n const _search = e.target.value.toLowerCase();\n setFilteredColumn(columns?.filter(c => c.name.toLowerCase().includes(_search)));\n }}\n />\n <Stack align=\"center\" gap=\"xs\">\n <div>{filteredColumn?.length} columns</div>\n </Stack>\n <Stack direction=\"column\" gap=\"md\" className=\"al-overflow-y-auto\">\n {filteredColumn?.map(_column => (\n <ColumnCard\n key={_column.name}\n column={{\n name: _column.name,\n table: selectedTable,\n can_lineage_expand: false,\n description: \"\",\n code: _column.expression,\n }}\n handleClick={() => {}}\n selected={false}\n isSelectable={false}\n />\n ))}\n </Stack>\n </Stack>\n </div>\n </Stack>\n );\n};\n\nexport { TableDetails };\n","import classNames from \"classnames\";\nimport styles from \"./styles.module.scss\";\nimport { ReactNode } from \"react\";\nimport { Stack } from \"@altimateai/lego\";\n\ntype Props = {\n title: string;\n value: string | ReactNode;\n};\nconst ColumnRow = ({ title, value }: Props) => {\n return (\n <div className={classNames(styles.column_card, {})}>\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <div className=\"lines-2\">{title}</div>\n <div className=\"spacer\" />\n </Stack>\n <Stack direction=\"column\">\n <div className=\"font-normal fs-xxs text-grey\">{value}</div>\n </Stack>\n </div>\n );\n};\n\nexport default ColumnRow;\n","type Props = {\n label: string;\n};\nconst Chip = ({ label }: Props) => {\n return <div>{label}</div>;\n};\n\nexport default Chip;\n","import { useEffect, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { ComponentLoader } from \"./Loader\";\nimport styles from \"./styles.module.scss\";\nimport { NodeTypeIcon } from \"./Column\";\nimport { useReactFlow } from \"reactflow\";\nimport { useLineageContext } from \"../context/LineageProvider\";\nimport { ExposureMetaData } from \"../types\";\nimport { getExposureDetails } from \"../api\";\nimport PurposeSection from \"./Purpose\";\nimport ColumnRow from \"./ColumnRow\";\nimport Chip from \"./Chip\";\nimport { Stack } from \"@altimateai/lego\";\n\n/**\n * Component to display exposure details\n */\nconst ExposureDetails = () => {\n const flow = useReactFlow();\n const {\n state: { selectedTable },\n } = useLineageContext();\n const [data, setData] = useState<ExposureMetaData | null>(null);\n const selectedTableData = flow.getNode(selectedTable)?.data;\n const [isLoading, setIsLoading] = useState(true);\n useEffect(() => {\n if (!selectedTable) return;\n getExposureDetails(selectedTable).then(_data => {\n setData(_data);\n setIsLoading(false);\n });\n }, [selectedTable]);\n\n if (isLoading || !data || !selectedTable) return <ComponentLoader />;\n\n return (\n <Stack direction=\"column\" gap=\"md\" className=\"p-2 al-h-full al-overflow-y\">\n <div className={styles.table_details_header}>\n <NodeTypeIcon nodeType={selectedTableData.nodeType} />\n <Stack direction=\"row\" align=\"center\">\n <div className=\"fw-semibold fs-5 lines-2\">{selectedTableData.label}</div>\n </Stack>\n </div>\n {data.description ? <PurposeSection purpose={data.description} /> : null}\n <div className={classNames(styles.card, \"flex-grow column-section\")}>\n <ColumnRow title=\"Owner\" value={`${data.owner.name} - ${data.owner.email}`} />\n <ColumnRow title=\"Url\" value={data.url} />\n <ColumnRow\n title=\"Tags\"\n value={data.tags.map(tag => (\n <Chip label={tag} key={tag} />\n ))}\n />\n <ColumnRow title=\"Maturity\" value={data.maturity} />\n </div>\n </Stack>\n );\n};\n\nexport default ExposureDetails;\n","import React, { useEffect, useState } from \"react\";\nimport { ComponentLoader } from \"./Loader\";\nimport styles from \"./styles.module.scss\";\nimport { useLineageContext } from \"../context/LineageProvider\";\nimport { Stack } from \"@altimateai/lego\";\nimport { ApiHelper } from \"../../api/index\";\n\nimport { Button, Typography } from \"@altimateai/lego\";\nimport {\n IconBook,\n IconCalendar,\n IconEye,\n IconHeartRateMonitor,\n IconLibraryFilled,\n IconPremiumRights,\n IconRefresh,\n IconServer,\n IconSitemap,\n IconUser,\n IconUsers,\n IconWorld,\n} from \"@tabler/icons-react\";\n\ninterface DashboardData {\n rk: string;\n dashboard: string;\n workbook: string;\n owner: string;\n refreshFrequency: string;\n insights: Array<{\n name: string;\n description: string;\n }>;\n views_30d: number;\n refreshes_30d: number;\n views: number;\n refreshes: number;\n tableauTags: string[];\n site_name: string;\n project_name: string;\n last_viewed: string;\n user_count: number;\n instance_name: string;\n total_cost: number;\n cost_attribution_type: string | null;\n instrumentation_snippet: string | null;\n dashboard_url: string;\n}\n\n// Color mapping for tags\nconst COLOR_MAP: Record<string, string> = {\n blue: \"#247efe\",\n orange: \"#ff754c\",\n red: \"#ee140f\",\n green: \"#01cd8c\",\n dark_green: \"#19504d\",\n yellow: \"#783a00\",\n purple: \"#392091\",\n};\n\nconst COLOR_BG_MAP: Record<string, string> = {\n blue: \"rgba(36, 126, 254, 0.15)\",\n orange: \"rgba(255, 117, 76, 0.15)\",\n red: \"rgba(238, 20, 15, 0.15)\",\n green: \"rgba(1, 205, 140, 0.15)\",\n dark_green: \"#d3f8f8\",\n yellow: \"#fff4c3\",\n purple: \"#e6ddff\",\n};\n\n// Available colors for hash-based selection\nconst AVAILABLE_COLORS = [\"blue\", \"orange\", \"red\", \"green\", \"yellow\", \"purple\"];\n\n// Simple hash function to convert string to consistent color\nconst getHashColor = (str: string): string => {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n const index = Math.abs(hash) % AVAILABLE_COLORS.length;\n return AVAILABLE_COLORS[index];\n};\n\n// Local ColorTag component following altimate-components standards\nconst LocalColorTag = ({ label, color = \"blue\" }: { label: string; color?: string }) => {\n const backgroundColor = COLOR_BG_MAP[color] || COLOR_BG_MAP.blue;\n const textColor = COLOR_MAP[color] || COLOR_MAP.blue;\n\n return (\n <div\n className=\"al-inline-flex al-items-center al-px-3 al-py-1 al-rounded-full al-whitespace-nowrap al-text-xs al-font-medium al-truncate al-bg-background al-leading-5\"\n style={{\n backgroundColor,\n color: textColor,\n }}\n >\n {label}\n </div>\n );\n};\n\n// Custom Row Component for same-line title and value display\nconst CustomRow = ({ title, value }: { title: React.ReactNode; value: React.ReactNode }) => (\n <div className=\"al-px-3 al-py-4 al-rounded-lg al-border al-border-gray-200 al-bg-background\">\n <Stack direction=\"row\" align=\"center\" justify=\"between\" gap=\"md\">\n <div className=\"al-flex-shrink-0\">{title}</div>\n <div className=\"al-text-right al-text-sm al-text-gray-600\">{value}</div>\n </Stack>\n </div>\n);\n\n/**\n * Component to display dashboard details\n */\nconst DashboardDetails = ({\n onNavigate,\n}: {\n onNavigate?: (navigationInfo: { url?: string; id?: string; table: string }) => void;\n} = {}) => {\n const {\n state: { selectedTable },\n } = useLineageContext();\n const [data, setData] = useState<DashboardData | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n if (!selectedTable) return;\n setIsLoading(true);\n\n ApiHelper.get(\"getDashboardById\", { dashboard_id: selectedTable })\n //@ts-expect-error just for now\n .then((_data: DashboardData) => {\n setData(_data);\n setIsLoading(false);\n })\n .catch(error => {\n console.error(\"Error fetching dashboard details:\", error);\n setData(null);\n setIsLoading(false);\n });\n }, [selectedTable]);\n\n if (isLoading || !data || !selectedTable) return <ComponentLoader />;\n\n // Format cost value\n const formatCost = (cost: number) => {\n if (cost >= 1000) {\n return `$${(cost / 1000).toFixed(1)}k`;\n }\n return `$${cost.toFixed(2)}`;\n };\n\n // Format large numbers\n const formatNumber = (num: number) => {\n if (num >= 1000) {\n return `${(num / 1000).toFixed(1)}k`;\n }\n return num.toLocaleString();\n };\n\n // Format date\n const formatDate = (dateString: string) => {\n try {\n return new Date(dateString).toLocaleDateString();\n } catch {\n return dateString;\n }\n };\n\n return (\n <Stack direction=\"column\" gap=\"md\" className=\"al-p-4 al-h-full al-overflow-y-auto\">\n {/* Header */}\n <div className={styles.table_details_header}>\n <IconHeartRateMonitor className=\"al-w-6 al-h-6 al-text-blue-500\" />\n <Stack direction=\"row\" align=\"center\">\n <div className=\"al-font-semibold al-text-lg al-line-clamp-2 al-w-full\">\n {data.dashboard}\n </div>\n {data.total_cost != null && (\n <Stack justify=\"end\" className=\"al-w-full\">\n <Button\n size=\"sm\"\n onClick={() => {\n if (!onNavigate || !data) return;\n onNavigate({\n url: `/query/tableau-jobs/${encodeURIComponent(data.rk)}`,\n id: data.rk,\n table: data.dashboard,\n });\n }}\n >\n Cost Analysis\n </Button>\n </Stack>\n )}\n </Stack>\n </div>\n\n {data.insights && data.insights.length > 0 && (\n <div className=\"al-mt-3\">\n <Stack direction=\"row\" gap=\"xs\" className=\"al-flex-wrap al-my-3\">\n {data.insights.map((insight, index) => (\n <LocalColorTag label={insight.name} color={getHashColor(insight.name)} key={index} />\n ))}\n </Stack>\n </div>\n )}\n\n {/* Dashboard Details */}\n <div className=\"al-flex-grow al-rounded-lg al-p-4 al-bg-gray-100\">\n <Stack direction=\"column\" gap=\"md\">\n <Typography variant=\"caption\" className=\"al-font-semibold\">\n Dashboard Details\n </Typography>\n {data.total_cost !== null && (\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconPremiumRights className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Total Cost</span>\n </Stack>\n }\n value={<span className=\"al-font-semibold\">{formatCost(data.total_cost)}</span>}\n />\n )}\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconUser className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Owner</span>\n </Stack>\n }\n value={data.owner}\n />\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconBook className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Workbook</span>\n </Stack>\n }\n value={data.workbook}\n />\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconLibraryFilled className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Project</span>\n </Stack>\n }\n value={data.project_name}\n />\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconSitemap className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Site</span>\n </Stack>\n }\n value={data.site_name}\n />\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconServer className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Instance</span>\n </Stack>\n }\n value={data.instance_name}\n />\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconEye className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Views (30 days)</span>\n </Stack>\n }\n value={<span className=\"al-font-semibold\">{formatNumber(data.views)}</span>}\n />\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconRefresh className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Refreshes (30 days)</span>\n </Stack>\n }\n value={data.refreshes.toString()}\n />\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconUsers className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Unique Users</span>\n </Stack>\n }\n value={data.user_count.toString()}\n />\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconCalendar className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Last Viewed</span>\n </Stack>\n }\n value={formatDate(data.last_viewed)}\n />\n\n {data.dashboard_url && (\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconWorld className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Dashboard URL</span>\n </Stack>\n }\n value={\n <a\n href={data.dashboard_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"al-text-blue-600 al-underline al-truncate\"\n >\n Open Dashboard\n </a>\n }\n />\n )}\n </Stack>\n </div>\n </Stack>\n );\n};\n\nexport default DashboardDetails;\n","import {\n ThumbsupIcon,\n ThumbsdownIcon,\n ThumbsupSelectedIcon,\n ThumbsdownSelectedIcon,\n} from \"../assets/icons\";\nimport { Stack } from \"@altimateai/lego\";\nimport { Button } from \"@altimateai/lego\";\nimport styles from \"./styles.module.scss\";\nimport { useState } from \"react\";\nimport { CustomMultilineInput } from \"./Form\";\nimport { openChat, sendFeedback } from \"../api\";\n\nenum FeedbackState {\n None = \"\",\n Positive = \"good\",\n Negative = \"bad\",\n}\n\nfunction Feedback({ close }: { close: () => void }) {\n const [feedbackState, setFeedbackState] = useState(FeedbackState.None);\n const [feedbackInput, setFeedbackInput] = useState(\"\");\n const [isSubmitted, setIsSubmitted] = useState(false);\n return (\n <Stack direction=\"column\" className=\"p-2 al-h-full\">\n <Stack direction=\"row\" className=\"mb-2\">\n <div className=\"fw-semibold fs-5\">Feedback</div>\n <div className=\"spacer\"></div>\n <Button\n size=\"sm\"\n onClick={e => {\n e.stopPropagation();\n openChat();\n }}\n >\n Chat with us\n </Button>\n </Stack>\n <div className={styles.feedback_body}>\n {!isSubmitted && (\n <>\n <Stack direction=\"row\" gap=\"sm\" className=\"m-2\">\n {feedbackState === FeedbackState.Positive ? (\n <ThumbsupSelectedIcon\n className=\"cursor-pointer\"\n onClick={() => setFeedbackState(FeedbackState.None)}\n />\n ) : (\n <ThumbsupIcon\n className=\"cursor-pointer\"\n onClick={() => setFeedbackState(FeedbackState.Positive)}\n />\n )}\n {feedbackState === FeedbackState.Negative ? (\n <ThumbsdownSelectedIcon\n className=\"cursor-pointer\"\n onClick={() => setFeedbackState(FeedbackState.None)}\n />\n ) : (\n <ThumbsdownIcon\n className=\"cursor-pointer\"\n onClick={() => setFeedbackState(FeedbackState.Negative)}\n />\n )}\n </Stack>\n <p>AI still needs humans sometimes, please help it out 🙂</p>\n <CustomMultilineInput\n value={feedbackInput}\n onChange={(e: React.ChangeEvent<HTMLTextAreaElement>) =>\n setFeedbackInput(e.target.value)\n }\n placeholder=\"What did AI do wrong? What it should have done?\"\n />\n <Stack direction=\"row\" gap=\"sm\" className=\"mt-3\">\n <Button\n size=\"sm\"\n onClick={async e => {\n e.stopPropagation();\n if (feedbackState === FeedbackState.None) return;\n await sendFeedback({\n feedback_value: feedbackState,\n feedback_text: feedbackInput,\n });\n setIsSubmitted(true);\n }}\n >\n Submit\n </Button>\n <Button\n size=\"sm\"\n variant=\"link\"\n className={styles.cancel_btn}\n onClick={e => {\n e.stopPropagation();\n close();\n }}\n >\n Cancel\n </Button>\n </Stack>\n </>\n )}\n {isSubmitted && (\n <>\n <p>Many thanks for your feedback!</p>\n <Button\n size=\"sm\"\n onClick={e => {\n e.stopPropagation();\n close();\n }}\n >\n Close\n </Button>\n </>\n )}\n </div>\n </Stack>\n );\n}\n\nexport { Feedback };\n","import \"reactflow/dist/style.css\";\nimport { Stack } from \"@altimateai/lego\";\nimport { Label, Typography, Input } from \"@altimateai/lego\";\nimport styles from \"./styles.module.scss\";\nimport { CLL } from \"../cllUtils\";\nimport { CustomInput } from \"./Form\";\nimport { useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport { setDefaultExpansion, setNonSelectCheck, setSelectCheck } from \"../context/LineageSlice\";\nimport { persistLineageSettings } from \"../api\";\n\nfunction Settings({ applyDefault }: { applyDefault: (v: number) => void }) {\n const {\n state: { selectCheck, nonSelectCheck, defaultExpansion, aiEnabled },\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n\n return (\n <Stack className=\"al-p-2 al-h-full\" direction=\"column\">\n <Typography variant=\"h4\">Settings</Typography>\n <Stack direction=\"column\">\n <div>\n <Label htmlFor=\"default-expansion\" className=\"fs-6 mb-1\">\n Default Expansion\n </Label>\n <CustomInput\n id=\"default-expansion\"\n value={defaultExpansion}\n type=\"number\"\n onChange={e => {\n const value = Math.max(parseInt(e.target.value), 0);\n lineageDispatch(setDefaultExpansion(value));\n persistLineageSettings({ defaultExpansion: value });\n applyDefault(value);\n }}\n />\n </div>\n {aiEnabled && (\n <>\n <div className=\"fs-6\">Edges visibility</div>\n <div className={styles.select_node_checkbox}>\n <Input\n type=\"checkbox\"\n id=\"select-check\"\n className=\"mt-2\"\n checked={selectCheck}\n onChange={e => {\n if (CLL.inProgress) {\n CLL.showCllInProgressMsg();\n return;\n }\n lineageDispatch(setSelectCheck(e.target.checked));\n persistLineageSettings({\n showSelectEdges: e.target.checked,\n });\n }}\n />\n <Stack direction=\"column\">\n <Label htmlFor=\"select-check\" className=\"fs-6\">\n Select\n </Label>\n <div className=\"text-grey\">\n Select linkages are shown if there is direct flow of data between columns through\n select statements.\n </div>\n </Stack>\n </div>\n <div className={styles.non_select_node_checkbox}>\n <Input\n type=\"checkbox\"\n id=\"non-select-check\"\n className=\"mt-2\"\n checked={nonSelectCheck}\n onChange={e => {\n if (CLL.inProgress) {\n CLL.showCllInProgressMsg();\n return;\n }\n lineageDispatch(setNonSelectCheck(e.target.checked));\n persistLineageSettings({\n showNonSelectEdges: e.target.checked,\n });\n }}\n />\n <Stack direction=\"column\">\n <Label htmlFor=\"non-select-check\" className=\"fs-6\">\n Non-Select\n </Label>\n <div className=\"text-grey\">\n Non-Select linkages are shown if columns appear in condition/clauses like where,\n join, having, etc.\n </div>\n </Stack>\n </div>\n </>\n )}\n </Stack>\n </Stack>\n );\n}\n\nexport { Settings };\n","import {\n Dispatch,\n PropsWithoutRef,\n ReactNode,\n SetStateAction,\n createContext,\n useContext,\n} from \"react\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"@altimateai/lego\";\n\nconst PopoverContext = createContext<{\n openedPopover: string;\n setOpenedPopover: Dispatch<SetStateAction<string>>;\n}>({ openedPopover: \"\", setOpenedPopover: () => {} });\n\nfunction BetterPopover({\n id,\n trigger,\n render,\n}: PropsWithoutRef<{\n id: string;\n trigger: ReactNode;\n render: (_args: { close: () => void }) => ReactNode;\n}>) {\n const { openedPopover, setOpenedPopover } = useContext(PopoverContext);\n\n return (\n <Popover open={openedPopover === id} onOpenChange={open => setOpenedPopover(open ? id : \"\")}>\n <PopoverTrigger asChild>\n <div\n id={id}\n onClick={e => {\n e.stopPropagation();\n }}\n >\n {trigger}\n </div>\n </PopoverTrigger>\n <PopoverContent className=\"al-tw-scope\">\n <div>{render({ close: () => setOpenedPopover(\"\") })}</div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { BetterPopover, PopoverContext };\n","import { useCallback, useContext, useEffect, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport { calculateExpand, DEFAULT_MIN_ZOOM } from \"../utils\";\nimport {\n calculateMinLevel,\n calculateNodeCount,\n expandTableLineageLevelWise,\n highlightTableConnections,\n layoutElementsOnCanvas,\n} from \"../graph\";\nimport { Button } from \"@altimateai/lego\";\nimport { Stack } from \"@altimateai/lego\";\nimport {\n setLeftExpansion,\n setMinRange,\n setNodeCount,\n setRightExpansion,\n} from \"../context/LineageSlice\";\nimport { useReactFlow } from \"reactflow\";\nimport styles from \"./styles.module.scss\";\nimport { BetterPopover, PopoverContext } from \"./BetterPopover\";\nimport {\n ArrowLeftDoubleIcon,\n ArrowLeftIcon,\n ArrowRightDoubleIcon,\n ArrowRightIcon,\n ExpandIcon,\n} from \"../assets/icons\";\n\nconst AutoExpansionPopover = () => {\n const flow = useReactFlow();\n const {\n state: { selectedTable, leftExpansion, rightExpansion, minRange, nodeCount, defaultExpansion },\n rerender,\n } = useLineageContext();\n const [maxRange, setMaxRange] = useState<[number, number]>([0, 0]);\n const lineageDispatch = useLineageDispatch();\n\n const { openedPopover } = useContext(PopoverContext);\n const popoverId = \"auto-expansion-popover\";\n const isPopoverOpen = openedPopover === popoverId;\n\n useEffect(() => {\n lineageDispatch(setLeftExpansion(calculateExpand(minRange[0], maxRange[0], defaultExpansion)));\n lineageDispatch(setRightExpansion(calculateExpand(minRange[1], maxRange[1], defaultExpansion)));\n }, [defaultExpansion, lineageDispatch, maxRange, minRange]);\n\n useEffect(() => {\n (async () => {\n lineageDispatch(\n setNodeCount(\n await calculateNodeCount(\n flow.getNodes(),\n flow.getEdges(),\n selectedTable,\n leftExpansion,\n rightExpansion\n )\n )\n );\n })();\n }, [flow, leftExpansion, lineageDispatch, rightExpansion, selectedTable]);\n\n useEffect(() => {\n (async () => {\n if (!isPopoverOpen) return;\n if (!selectedTable) return;\n const selectedTableData = flow.getNode(selectedTable)?.data;\n if (!selectedTableData) return;\n const { level } = selectedTableData;\n const nodes = flow.getNodes();\n const edges = flow.getEdges();\n const [newNodes] = await expandTableLineageLevelWise(\n nodes,\n edges,\n selectedTable,\n -Infinity,\n Infinity,\n Infinity\n );\n let minLevel = Infinity;\n let maxLevel = -Infinity;\n for (const n of newNodes) {\n minLevel = Math.min(minLevel, n.data.level);\n maxLevel = Math.max(maxLevel, n.data.level);\n }\n setMaxRange([level - minLevel, maxLevel - level]);\n })();\n }, [flow, selectedTable, isPopoverOpen]);\n\n const updateLeftExpansion = useCallback(() => {\n lineageDispatch(\n setLeftExpansion(leftExpansion + 1 <= maxRange[0] ? leftExpansion + 1 : leftExpansion)\n );\n }, [leftExpansion, lineageDispatch, maxRange]);\n\n const updateRightExpansion = useCallback(() => {\n lineageDispatch(\n setRightExpansion(rightExpansion + 1 <= maxRange[0] ? rightExpansion + 1 : rightExpansion)\n );\n }, [rightExpansion, lineageDispatch, maxRange]);\n\n return (\n <BetterPopover\n id={popoverId}\n trigger={\n <Button variant=\"outline\" size=\"xs\" type=\"button\">\n <ExpandIcon />\n Expand\n </Button>\n }\n render={({ close }) => (\n <Stack direction=\"column\" gap=\"xs\">\n <Stack direction=\"row\" className=\"al-w-full\" gap=\"xl\" justify=\"between\" align=\"center\">\n <div\n className={classNames(styles.expand_nav, {\n [styles.disabled]: minRange[0] === -1,\n })}\n >\n <div className={styles.expand_nav_btn}>\n <div\n className={styles.icon}\n onClick={e => {\n e.stopPropagation();\n if (!selectedTable) return;\n lineageDispatch(setLeftExpansion(maxRange[0]));\n }}\n >\n <ArrowLeftDoubleIcon />\n </div>\n <div className={styles.divider} />\n <div\n className={styles.icon}\n onClick={e => {\n e.stopPropagation();\n if (!selectedTable) return;\n updateLeftExpansion();\n }}\n >\n <ArrowLeftIcon />\n </div>\n </div>\n <div className=\"text-blue px-2 py-1\">{leftExpansion}</div>\n </div>\n <div\n className={classNames(styles.expand_nav, {\n [styles.disabled]: minRange[1] === -1,\n })}\n >\n <div className=\"text-blue px-2 py-1\">{rightExpansion}</div>\n <div className={styles.expand_nav_btn}>\n <div\n className={styles.icon}\n onClick={e => {\n e.stopPropagation();\n if (!selectedTable) return;\n updateRightExpansion();\n }}\n >\n <ArrowRightIcon />\n </div>\n <div className={styles.divider} />\n <div\n className={styles.icon}\n onClick={e => {\n e.stopPropagation();\n if (!selectedTable) return;\n lineageDispatch(setRightExpansion(maxRange[1]));\n }}\n >\n <ArrowRightDoubleIcon />\n </div>\n </div>\n </div>\n </Stack>\n <Stack direction=\"row\" className=\"al-w-full\" gap=\"xl\" justify=\"between\" align=\"center\">\n <div className=\"normal-text\">Parents</div>\n <div className=\"normal-text\">Children</div>\n </Stack>\n <Button\n variant={nodeCount === 0 ? \"secondary\" : \"default\"}\n size=\"sm\"\n disabled={nodeCount === 0}\n onClick={async e => {\n e.stopPropagation();\n if (!selectedTable) return;\n const selectedTableData = flow.getNode(selectedTable)?.data;\n if (!selectedTableData) return;\n const [nodes, edges] = await expandTableLineageLevelWise(\n flow.getNodes(),\n flow.getEdges(),\n selectedTable,\n selectedTableData.level - leftExpansion,\n selectedTableData.level + rightExpansion,\n Infinity\n );\n highlightTableConnections(nodes, edges, selectedTable);\n layoutElementsOnCanvas(nodes, edges);\n flow.setNodes(nodes);\n flow.setEdges(edges);\n flow.fitView({ minZoom: DEFAULT_MIN_ZOOM });\n lineageDispatch(setMinRange(calculateMinLevel(nodes, edges, selectedTable)));\n lineageDispatch(\n setNodeCount(\n await calculateNodeCount(\n nodes,\n edges,\n selectedTable,\n leftExpansion,\n rightExpansion\n )\n )\n );\n rerender();\n close();\n }}\n >\n Add {nodeCount} tables\n </Button>\n </Stack>\n )}\n />\n );\n};\n\nexport default AutoExpansionPopover;\n","import { IconButton, Stack } from \"@altimateai/lego\";\nimport { Card, CardContent } from \"@altimateai/lego\";\nimport styles from \"./styles.module.scss\";\nimport AutoExpansionPopover from \"./AutoExpansionPopover\";\nimport { InfoCircleIcon } from \"../../../assets/icons\";\nimport { createPortal } from \"react-dom\";\nimport { useLineageContext } from \"../context/LineageProvider\";\n\nconst ExpandWithConfidenceCard = () => {\n const {\n state: { selectedColumn, confidence, aiEnabled },\n } = useLineageContext();\n const expandContainer = document.getElementById(\"expand-container\");\n if (!expandContainer) {\n return null;\n }\n return createPortal(\n <Card className={styles.menu_card_container}>\n <CardContent className={`${styles.menu_card} pt-4`}>\n <Stack direction=\"row\" gap=\"sm\">\n <AutoExpansionPopover />\n {aiEnabled && selectedColumn?.name && confidence.confidence === \"low\" && (\n <>\n <div className={styles.verticle_divider} />\n <Stack direction=\"row\" gap=\"xxs\" align=\"center\">\n <div>Confidence</div>\n <IconButton\n title={\n \"Depending on the SQL dialect and complexity of queries, \" +\n \"there may be situations where we are not completely \" +\n \"confident about the lineage shown in this view\"\n }\n id=\"confidence\"\n >\n <InfoCircleIcon />\n </IconButton>\n <div className={styles.low_confidence}>Low</div>\n </Stack>\n </>\n )}\n </Stack>\n </CardContent>\n </Card>,\n expandContainer\n );\n};\n\nexport default ExpandWithConfidenceCard;\n","import { SettingsIcon } from \"../../../assets/icons\";\nimport { Button } from \"@altimateai/lego\";\nimport { createPortal } from \"react-dom\";\nimport { SETTINGS_SIDEBAR } from \"../constants\";\nimport { useLineageDispatch } from \"../context/LineageProvider\";\nimport { setSidebarScreen } from \"../context/LineageSlice\";\n\nconst SettingsButton = () => {\n const settingsContainer = document.getElementById(\"settings-container\");\n const lineageDispatch = useLineageDispatch();\n if (!settingsContainer) {\n return null;\n }\n return createPortal(\n <Button\n variant=\"default\"\n size=\"xs\"\n onClick={() => lineageDispatch(setSidebarScreen(SETTINGS_SIDEBAR))}\n >\n <SettingsIcon />\n Settings\n </Button>,\n settingsContainer\n );\n};\n\nexport default SettingsButton;\n","import { RefreshIcon } from \"../../../assets/icons\";\nimport { Button } from \"@altimateai/lego\";\nimport { useLineageDispatch } from \"../context/LineageProvider\";\nimport { CLL } from \"../cllUtils\";\nimport { initLineage } from \"../api\";\nimport { setCollectColumns, setMoreTables, setSelectedColumn } from \"../context/LineageSlice\";\nimport { createPortal } from \"react-dom\";\nimport { ReactFlowInstance } from \"reactflow\";\nimport styles from \"./styles.module.scss\";\n\nconst ResetButton = ({ flow }: { flow: ReactFlowInstance }) => {\n const resetContainer = document.getElementById(\"reset-container\");\n const lineageDispatch = useLineageDispatch();\n if (!resetContainer) {\n return null;\n }\n return createPortal(\n <Button\n variant=\"default\"\n size=\"xs\"\n onClick={() => {\n flow.setNodes([]);\n flow.setEdges([]);\n lineageDispatch(setSelectedColumn({ table: \"\", name: \"\" }));\n lineageDispatch(setCollectColumns({}));\n lineageDispatch(setMoreTables({}));\n initLineage();\n CLL.cancel();\n }}\n data-testid=\"reset-btn\"\n className={styles.reset_btn}\n >\n <RefreshIcon />\n <span>Reset</span>\n </Button>,\n resetContainer\n );\n};\n\nexport default ResetButton;\n","import { Stack } from \"@altimateai/lego\";\nimport { Button, Checkbox, Label, Typography } from \"@altimateai/lego\";\nimport { finalLineageDownload } from \"../api\";\nimport { ExportFinalLineageArgs } from \"../types\";\nimport { useState } from \"react\";\nimport { useMutation } from \"../../api/index\";\n\nconst FormInput = ({\n id,\n label,\n params,\n setParams,\n}: {\n id: string;\n label: string;\n params: Record<string, boolean>;\n setParams: React.Dispatch<React.SetStateAction<Record<string, boolean>>>;\n}) => (\n <Stack>\n <Checkbox\n id={id}\n checked={params[id]}\n onCheckedChange={e => setParams(prev => ({ ...prev, [id]: e as boolean }))}\n />\n <Label htmlFor={id}>{label}</Label>\n </Stack>\n);\n\nexport const ExportFinalLineageModal = ({ modalArgs }: { modalArgs: ExportFinalLineageArgs }) => {\n const { table, column } = modalArgs;\n const [params, setParams] = useState<Record<string, boolean>>({\n upstream: true,\n downstream: false,\n direct: true,\n indirect: false,\n });\n const { mutate, loading: isExporting } = useMutation({\n queryFn: () => finalLineageDownload({ column_rk: `${table}/${column}`, ...params }),\n });\n const handleExport = async () => {\n if (isExporting) return;\n if (!params.upstream && !params.downstream) return;\n if (!params.direct && !params.indirect) return;\n mutate();\n };\n\n return (\n <Stack direction=\"column\">\n <Typography weight=\"medium\" className=\"al-mb-0 al-text-primary\">\n {table}/{column}\n </Typography>\n <Stack direction=\"column\" gap=\"xxs\">\n <Typography weight=\"medium\" size=\"sm\" className=\"al-mb-0\">\n Lineage Type\n </Typography>\n <FormInput id=\"direct\" label=\"Select\" params={params} setParams={setParams} />\n <FormInput id=\"indirect\" label=\"Non select\" params={params} setParams={setParams} />\n </Stack>\n <Stack direction=\"column\" gap=\"xxs\">\n <Typography weight=\"medium\" size=\"sm\" className=\"al-mb-0\">\n Lineage Direction\n </Typography>\n <FormInput id=\"upstream\" label=\"Upstream\" params={params} setParams={setParams} />\n <FormInput id=\"downstream\" label=\"Downstream\" params={params} setParams={setParams} />\n </Stack>\n <Button onClick={handleExport}>Export</Button>\n {!params.upstream && !params.downstream && (\n <Stack className=\"al-bg-bg-red al-p-2 al-rounded-md\">\n <Typography variant=\"caption\" size=\"sm\" className=\"al-text-xs\">\n Select atleast one of the upstream or downstream\n </Typography>\n </Stack>\n )}\n {!params.direct && !params.indirect && (\n <Stack className=\"al-bg-bg-red al-p-2 al-rounded-md\">\n <Typography variant=\"caption\" size=\"sm\" className=\"al-text-xs\">\n Select atleast one of the direct or non direct\n </Typography>\n </Stack>\n )}\n {isExporting && (\n <Stack className=\"al-bg-gray-15 al-p-2 al-rounded-md\">\n <div\n className=\"al-animate-spin al-h-4 al-w-4 al-border-2 al-border-primary al-border-t-transparent al-rounded-full\"\n role=\"progressbar\"\n aria-label=\"Loading\"\n aria-hidden=\"false\"\n />\n <Typography variant=\"caption\" size=\"sm\" className=\"al-text-xs\">\n Export in progress. This may take up to a minute.\n </Typography>\n </Stack>\n )}\n </Stack>\n );\n};\n","import { useContext, useMemo } from \"react\";\nimport { CodeBlock, Stack } from \"@altimateai/lego\";\nimport styles from \"./styles.module.scss\";\nimport { HeaderSection } from \"./TableDetails\";\nimport { CloseIcon } from \"../assets/icons\";\nimport \"prismjs/themes/prism-tomorrow.css\";\nimport { useReactFlow } from \"reactflow\";\nimport { LineageContext, useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport { setModalArgs } from \"../context/LineageSlice\";\nimport ViewsTypeBadge from \"./ViewsTypeBadge\";\nimport { ExportFinalLineageArgs, OpNodeArgs, ViewsCodeModalArgs } from \"../types\";\nimport { SQL_ICONS } from \"./CustomNodes\";\nimport { ExportFinalLineageModal } from \"./ExportFinalLineageModal\";\nimport { Dialog, DialogContent, DialogOverlay, DialogPortal } from \"@altimateai/lego\";\nimport { cn } from \"../../../shared/utils\";\n\nconst ViewsCodeModal = ({ viewsCodeArgs }: { viewsCodeArgs: ViewsCodeModalArgs }) => {\n const {\n state: { theme },\n } = useContext(LineageContext);\n const lineageDispatch = useLineageDispatch();\n\n const flow = useReactFlow();\n const table = useMemo(() => {\n if (!viewsCodeArgs) return \"\";\n return flow.getNode(viewsCodeArgs.table)?.data?.label;\n }, [flow, viewsCodeArgs]);\n\n const viewsCodesFlat = useMemo(() => {\n const arr = Object.values(viewsCodeArgs?.viewsCode || [])\n .flat()\n .filter(([, type]) => type === \"Transformation\")\n .map(([code]) => code);\n const result: string[] = [];\n for (const item of arr) {\n if (result.includes(item)) continue;\n result.push(item);\n }\n return result;\n }, [viewsCodeArgs?.viewsCode]);\n\n return (\n <>\n <div className={styles.close_button} onClick={() => lineageDispatch(setModalArgs(null))}>\n <CloseIcon />\n </div>\n <Stack direction=\"column\" gap=\"sm\">\n {table && <HeaderSection nodeType={viewsCodeArgs.nodeType} table={table} />}\n <Stack direction=\"column\" gap=\"xs\">\n <div className=\"text-dark-grey fs-xs\">Column</div>\n <div className={styles.model_views_type}>{viewsCodeArgs.column}</div>\n </Stack>\n <Stack direction=\"column\" gap=\"xs\">\n <div className=\"text-dark-grey fs-xs\">Type</div>\n <div className={styles.model_views_type}>\n <ViewsTypeBadge viewsType={viewsCodeArgs.viewsType} />\n {viewsCodeArgs.viewsType}\n </div>\n </Stack>\n {viewsCodesFlat.length > 0 && (\n <Stack direction=\"column\" gap=\"xs\">\n <div className=\"text-dark-grey fs-xs\">List of transformations</div>\n {viewsCodesFlat.map(code => (\n <CodeBlock\n key={code}\n code={code}\n language=\"sql\"\n editorTheme=\"tomorrow\"\n theme={theme}\n />\n ))}\n </Stack>\n )}\n </Stack>\n </>\n );\n};\n\nfunction OpNodeModal({ opNodeArgs }: { opNodeArgs: OpNodeArgs }) {\n const {\n state: { theme },\n } = useContext(LineageContext);\n return (\n <Stack direction=\"column\" gap=\"sm\">\n <div className={styles.table_details_header}>\n {SQL_ICONS[opNodeArgs.op_type]}\n <Stack direction=\"row\" align=\"center\">\n <div className=\"fw-semibold fs-5 lines-2\">{opNodeArgs.op_type}</div>\n </Stack>\n </div>\n <Stack direction=\"column\" gap=\"xs\">\n <div className=\"text-dark-grey fs-xs\">Code</div>\n <CodeBlock code={opNodeArgs.op_code} language=\"sql\" editorTheme=\"tomorrow\" theme={theme} />\n </Stack>\n </Stack>\n );\n}\n\nexport const LineageModal = () => {\n const {\n state: { modalArgs },\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n if (!modalArgs) return null;\n return (\n <Dialog\n open={modalArgs.type !== \"none\"}\n onOpenChange={() => lineageDispatch(setModalArgs({ type: \"none\" }))}\n >\n <DialogPortal>\n <DialogOverlay />\n <DialogContent\n className={cn(\n \"al-tw-scope al-fixed al-left-[50%] al-top-[50%] al-z-50 al-grid al-w-full al-max-w-lg al-translate-x-[-50%] al-translate-y-[-50%] al-gap-4 al-border al-bg-background al-p-6 al-shadow-lg al-duration-200 data-[state=open]:al-animate-in data-[state=closed]:al-animate-out data-[state=closed]:al-fade-out-0 data-[state=open]:al-fade-in-0 data-[state=closed]:al-zoom-out-95 data-[state=open]:al-zoom-in-95 data-[state=closed]:al-slide-out-to-left-1/2 data-[state=closed]:al-slide-out-to-top-[48%] data-[state=open]:al-slide-in-from-left-1/2 data-[state=open]:al-slide-in-from-top-[48%] sm:al-rounded-lg\"\n )}\n >\n <div\n className={styles.close_button}\n onClick={() => lineageDispatch(setModalArgs({ type: \"none\" }))}\n >\n <CloseIcon />\n </div>\n {modalArgs.type === \"views_code\" && (\n <ViewsCodeModal viewsCodeArgs={modalArgs.args as ViewsCodeModalArgs} />\n )}\n {modalArgs.type === \"op_node\" && (\n <OpNodeModal opNodeArgs={modalArgs.args as OpNodeArgs} />\n )}\n {modalArgs.type === \"export_final_lineage\" && (\n <ExportFinalLineageModal modalArgs={modalArgs.args as ExportFinalLineageArgs} />\n )}\n </DialogContent>\n </DialogPortal>\n </Dialog>\n );\n};\n","import { ShareIcon } from \"../../../assets/icons\";\nimport { Button } from \"@altimateai/lego\";\nimport { createPortal } from \"react-dom\";\nimport { useLineageContext } from \"../context/LineageProvider\";\nimport { ReactFlowInstance } from \"reactflow\";\nimport { isColumn, isNotColumn } from \"../utils\";\nimport { BetterPopover } from \"./BetterPopover\";\nimport { useState } from \"react\";\nimport { CustomInput } from \"./Form\";\nimport { exportLineage, getColumns, showInfoNotification } from \"../api\";\nimport { Details, StaticLineage } from \"../types\";\n\nconst ExportButton = ({ flow }: { flow: ReactFlowInstance }) => {\n const exportContainer = document.getElementById(\"export-container\");\n const {\n state: { selectedColumn, collectColumns },\n } = useLineageContext();\n const [name, setName] = useState(\"\");\n const handleExportLineage = async (close: () => void) => {\n const edges = flow.getEdges();\n const tableEdges = edges\n .filter(e => isNotColumn(e))\n .map(e => [e.source, e.target] as [string, string]);\n const columnEdges = edges\n .filter(e => isColumn(e))\n .map(\n e =>\n // remove column prefix for edge\n [e.source.slice(7), e.target.slice(7), e.data?.type] as [string, string, string]\n );\n const details: Details = {};\n await Promise.all(\n flow.getNodes().map(async n => {\n if (isColumn(n)) return;\n const data = await getColumns(n.id, false);\n details[n.id] = {\n type: n.data.nodeType,\n nodeId: n.id,\n name: n.data.label,\n ...data,\n };\n })\n );\n\n const lineage_data: StaticLineage = {\n selectedColumn: selectedColumn!,\n collectColumns,\n tableEdges,\n columnEdges,\n details,\n };\n const response = await exportLineage({ name, lineage_data });\n if (response?.url) {\n showInfoNotification(`Lineage is exported at [link](${response.url})`);\n }\n close();\n setName(\"\");\n };\n if (!exportContainer) {\n return null;\n }\n return createPortal(\n <BetterPopover\n id=\"export-popover\"\n trigger={\n <Button variant=\"default\" size=\"xs\">\n <ShareIcon />\n Export\n </Button>\n }\n render={({ close }) => {\n return (\n <div>\n <CustomInput\n id=\"export-name\"\n value={name}\n type=\"text\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setName(e.target.value)}\n className=\"mb-2\"\n placeholder=\"Enter name\"\n />\n <Button\n variant={name === \"\" ? \"secondary\" : \"default\"}\n size=\"sm\"\n onClick={() => handleExportLineage(close)}\n disabled={name === \"\"}\n >\n <ShareIcon />\n Export\n </Button>\n </div>\n );\n }}\n />,\n exportContainer\n );\n};\n\nexport default ExportButton;\n","import classNames from \"classnames\";\nimport { ComponentLoader } from \"./Loader\";\nimport styles from \"./styles.module.scss\";\nimport { useReactFlow } from \"reactflow\";\nimport { useLineageContext } from \"../context/LineageProvider\";\nimport { SnowflakeStageMetadata } from \"../types\";\nimport { getSnowflakeStageDetails } from \"../api\";\nimport { Stack } from \"@altimateai/lego\";\nimport { SeedIcon } from \"../assets/icons\";\nimport { Card, Typography } from \"@altimateai/lego\";\nimport { useQuery } from \"../../api/index\";\nimport { useCallback } from \"react\";\n\nconst SnowflakeStageDetails = () => {\n const flow = useReactFlow();\n const {\n state: { selectedTable },\n } = useLineageContext();\n const selectedTableData = flow.getNode(selectedTable)?.data;\n const fetchDetails = useCallback(() => getSnowflakeStageDetails(selectedTable), [selectedTable]);\n\n const { data, loading } = useQuery<SnowflakeStageMetadata>({\n queryFn: fetchDetails,\n });\n\n if (loading || !data || !selectedTable) return <ComponentLoader />;\n\n return (\n <Stack direction=\"column\" className=\"al-p-2 al-h-full al-overflow-y\">\n <div className={styles.table_details_header}>\n <Stack direction=\"column\" align=\"center\" gap=\"none\" className=\"al-text-primary\">\n <SeedIcon className=\"icon-sm\" />\n <Typography variant=\"caption\" size=\"sm\" className=\"al-text-xs al-mb-0 al-text-primary\">\n STG\n </Typography>\n </Stack>\n <Stack align=\"center\">\n <Typography weight=\"medium\" className=\"lines-2 al-mb-0\">\n {selectedTableData?.label}\n </Typography>\n </Stack>\n </div>\n <div className={classNames(styles.card, \"column-section\")}>\n {[\n { label: \"Stage Url\", value: data.stage_url },\n { label: \"Stage Region\", value: data.stage_region },\n { label: \"Stage Type\", value: data.stage_type },\n { label: \"Stage Owner\", value: data.stage_owner },\n ].map(({ label, value }) => (\n <Card key={label} className=\"al-mb-2 al-p-2\">\n <Stack>\n <Typography weight=\"medium\" size=\"sm\" className=\"al-mb-0\">\n {label}:\n </Typography>\n <Typography weight=\"regular\" size=\"sm\" className=\"al-mb-0\">\n {value}\n </Typography>\n </Stack>\n </Card>\n ))}\n </div>\n </Stack>\n );\n};\n\nexport default SnowflakeStageDetails;\n","import { useEffect, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { ComponentLoader } from \"./Loader\";\nimport styles from \"./styles.module.scss\";\nimport { NodeTypeIcon } from \"./Column\";\nimport { useReactFlow } from \"reactflow\";\nimport { useLineageContext } from \"../context/LineageProvider\";\nimport { FunctionMetaData } from \"../types\";\nimport { getFunctionDetails } from \"../api\";\nimport PurposeSection from \"./Purpose\";\nimport ColumnRow from \"./ColumnRow\";\nimport { Stack } from \"@altimateai/lego\";\n\nconst FunctionDetails = () => {\n const flow = useReactFlow();\n const {\n state: { selectedTable },\n } = useLineageContext();\n const [data, setData] = useState<FunctionMetaData | null>(null);\n const selectedTableData = flow.getNode(selectedTable)?.data;\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n useEffect(() => {\n if (!selectedTable) return;\n setIsLoading(true);\n setError(null);\n getFunctionDetails(selectedTable)\n .then(_data => {\n setData(_data);\n setIsLoading(false);\n })\n .catch(err => {\n setError(String(err?.message || err));\n setIsLoading(false);\n });\n }, [selectedTable]);\n\n if (isLoading) return <ComponentLoader />;\n if (error || !data || !selectedTable) {\n return (\n <Stack direction=\"column\" gap=\"md\" className=\"al-p-4\">\n <div className=\"al-text-sm al-text-destructive-foreground\">\n {error ? `Failed to load function details: ${error}` : \"No data available\"}\n </div>\n </Stack>\n );\n }\n\n return (\n <Stack direction=\"column\" gap=\"md\" className=\"al-p-2 al-h-full al-overflow-y-auto\">\n <div className={styles.table_details_header}>\n <NodeTypeIcon nodeType={selectedTableData.nodeType} />\n <Stack direction=\"row\" align=\"center\">\n <div className=\"fw-semibold fs-5 lines-2\">{selectedTableData.label}</div>\n </Stack>\n </div>\n {data.description ? <PurposeSection purpose={data.description} /> : null}\n <div className={classNames(styles.card, \"flex-grow column-section\")}>\n {data.config?.type && <ColumnRow title=\"Type\" value={data.config.type} />}\n {data.config?.volatility && <ColumnRow title=\"Volatility\" value={data.config.volatility} />}\n {data.config?.runtime_version && (\n <ColumnRow title=\"Runtime\" value={data.config.runtime_version} />\n )}\n {data.config?.entry_point && (\n <ColumnRow title=\"Entry Point\" value={data.config.entry_point} />\n )}\n {data.package_name && <ColumnRow title=\"Package\" value={data.package_name} />}\n {data.returns && (\n <ColumnRow\n title=\"Returns\"\n value={`${data.returns.data_type}${data.returns.description ? ` — ${data.returns.description}` : \"\"}`}\n />\n )}\n {data.arguments && data.arguments.length > 0 && (\n <ColumnRow\n title=\"Arguments\"\n value={data.arguments\n .map(arg => {\n let s = `${arg.name}: ${arg.data_type}`;\n if (arg.default_value) s += ` = ${arg.default_value}`;\n return s;\n })\n .join(\", \")}\n />\n )}\n </div>\n </Stack>\n );\n};\n\nexport default FunctionDetails;\n","import { Component, PropsWithChildren } from \"react\";\nimport { Stack } from \"@altimateai/lego\";\n\ninterface State {\n error: string | null;\n}\n\nclass SidebarErrorBoundary extends Component<PropsWithChildren, State> {\n state: State = { error: null };\n\n static getDerivedStateFromError(error: unknown) {\n return { error: String(error instanceof Error ? error.message : error) };\n }\n\n render() {\n if (this.state.error) {\n return (\n <Stack direction=\"column\" gap=\"md\" className=\"al-p-4\">\n <div className=\"al-text-sm al-font-medium\">Something went wrong</div>\n <div className=\"al-text-xs al-text-muted-foreground\">{this.state.error}</div>\n </Stack>\n );\n }\n return this.props.children;\n }\n}\n\nexport default SidebarErrorBoundary;\n","import ReactFlow, {\n Background,\n Controls,\n Edge,\n Node,\n NodeTypes,\n ReactFlowInstance,\n ReactFlowProvider,\n} from \"reactflow\";\nimport {\n createTableNode,\n DEFAULT_MIN_ZOOM,\n toggleColumnEdges,\n toggleModelEdges,\n getCurrentTableId,\n handleTableNavigation,\n} from \"../utils\";\nimport LineageLegend from \"./LineageLegend\";\nimport { MutableRefObject, useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n ColumnNode,\n SeeMoreNode,\n SelfConnectingEdge,\n TableNode,\n DashboardNode,\n} from \"./CustomNodes\";\nimport { useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport { SidebarModal } from \"./sidebarModal/SidebarModal\";\nimport {\n setAiEnabled,\n setCollectColumns,\n setConfig,\n setDefaultExpansion,\n setLightdashEnabled,\n setMinRange,\n setMoreTables,\n setNodeCount,\n setNonSelectCheck,\n setSelectCheck,\n setSelectedColumn,\n setSelectedTable,\n setShowCodeModal,\n setSidebarScreen,\n} from \"../context/LineageSlice\";\nimport { MoreTables } from \"./MoreTables\";\nimport {\n TABLES_SIDEBAR,\n COLUMNS_SIDEBAR,\n EXPOSURE_SIDEBAR,\n FEEDBACK_SIDEBAR,\n SETTINGS_SIDEBAR,\n SNOWFLAKE_STAGE_SIDEBAR,\n DASHBOARD_SIDEBAR,\n FUNCTION_SIDEBAR,\n} from \"../constants\";\nimport { TableDetails } from \"./TableDetails\";\nimport ExposureDetails from \"./ExposureDetails\";\nimport DashboardDetails from \"./DashboardDetails\";\nimport { Feedback } from \"./Feedback\";\nimport { Settings } from \"./Settings\";\nimport { getLineageSettings, initLineage } from \"../api\";\nimport \"./index.scss\";\nimport { PopoverContext } from \"./BetterPopover\";\nimport ExpandWithConfidenceCard from \"./ExpandWithConfidenceCard\";\nimport SettingsButton from \"./SettingsButton\";\nimport ResetButton from \"./ResetButton\";\nimport { Table } from \"../types\";\nimport {\n calculateMinLevel,\n calculateNodeCount,\n expandTableLineageLevelWise,\n highlightTableConnections,\n layoutElementsOnCanvas,\n} from \"../graph\";\nimport { LineageModal } from \"./LineageModals\";\nimport ExportButton from \"./ExportButton\";\nimport SnowflakeStageDetails from \"./SnowflakeStageDetails\";\nimport FunctionDetails from \"./FunctionDetails\";\nimport SidebarErrorBoundary from \"./SidebarErrorBoundary\";\n\nconst nodeTypes: NodeTypes = {\n table: TableNode,\n seeMore: SeeMoreNode,\n dashboard: DashboardNode,\n column: ColumnNode,\n};\nconst edgeTypes = { selfConnecting: SelfConnectingEdge };\n\nconst DynamicLineage = ({\n flow,\n theme,\n}: {\n flow: MutableRefObject<ReactFlowInstance<unknown, unknown> | undefined>;\n theme: \"dark\" | \"light\";\n}) => {\n const [openedPopover, setOpenedPopover] = useState(\"\");\n const {\n state: {\n selectCheck,\n nonSelectCheck,\n sidebarScreen,\n leftExpansion,\n rightExpansion,\n selectedColumn,\n defaultExpansion,\n errors,\n },\n rerender,\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n // hack for default expansion\n const defaultExpansionRef = useRef(defaultExpansion);\n\n const onCllCancelled = useCallback(() => {\n if (flow.current) {\n const edges = flow.current.getEdges();\n toggleModelEdges(edges, true);\n toggleColumnEdges(edges, false);\n flow.current.setEdges(edges);\n }\n }, [flow]);\n\n const renderStartNode = useCallback(\n async (args: {\n node?: Table;\n aiEnabled: boolean;\n lightdashEnabled: boolean;\n showCodeModal: boolean;\n config: { exportFinalLineage: boolean };\n }) => {\n lineageDispatch(setSidebarScreen(\"\"));\n if (!args) return;\n lineageDispatch(setAiEnabled(args.aiEnabled));\n lineageDispatch(setLightdashEnabled(args.lightdashEnabled));\n lineageDispatch(setShowCodeModal(args.showCodeModal));\n lineageDispatch(setConfig(args.config));\n const { node } = args;\n const _flow = flow.current;\n if (!_flow || !node) return;\n const existingNode = _flow.getNode(node.table);\n if (existingNode) {\n lineageDispatch(setSelectedTable(node.table));\n let nodes = _flow.getNodes();\n let edges = _flow.getEdges();\n if (!selectedColumn?.name) {\n [nodes, edges] = highlightTableConnections(nodes, edges, node.table);\n _flow.setNodes(nodes);\n _flow.setEdges(edges);\n }\n lineageDispatch(setMinRange(calculateMinLevel(nodes, edges, node.table)));\n lineageDispatch(\n setNodeCount(\n await calculateNodeCount(nodes, edges, node.table, leftExpansion, rightExpansion)\n )\n );\n return;\n }\n let nodes: Node[] = [];\n let edges: Edge[] = [];\n nodes = [createTableNode(node, 0, \"\")];\n [nodes, edges] = await expandTableLineageLevelWise(\n nodes,\n edges,\n node.table,\n -defaultExpansionRef.current,\n defaultExpansionRef.current\n );\n lineageDispatch(setSelectedTable(node.table));\n lineageDispatch(setSelectedColumn({ table: \"\", name: \"\" }));\n lineageDispatch(setCollectColumns({}));\n lineageDispatch(setMoreTables({}));\n [nodes, edges] = highlightTableConnections(nodes, edges, node.table);\n layoutElementsOnCanvas(nodes, edges);\n _flow.setNodes(nodes);\n _flow.setEdges(edges);\n _flow.fitView({ minZoom: DEFAULT_MIN_ZOOM, duration: 500 });\n lineageDispatch(setMinRange(calculateMinLevel(nodes, edges, node.table)));\n lineageDispatch(\n setNodeCount(\n await calculateNodeCount(nodes, edges, node.table, leftExpansion, rightExpansion)\n )\n );\n rerender();\n },\n [lineageDispatch, flow, leftExpansion, rightExpansion, rerender, selectedColumn?.name]\n );\n\n useEffect(() => {\n document.addEventListener(\"cll_cancelled\", onCllCancelled);\n const handleRenderStartNode = (e: CustomEvent) => {\n console.log(\"renderStartNode\", e.detail);\n renderStartNode(e.detail);\n };\n // @ts-ignore\n document.addEventListener(\"renderStartNode\", handleRenderStartNode);\n\n return () => {\n document.removeEventListener(\"cll_cancelled\", onCllCancelled);\n // @ts-ignore\n document.removeEventListener(\"renderStartNode\", handleRenderStartNode);\n };\n }, [onCllCancelled, renderStartNode]);\n\n const applySettings = useCallback(async () => {\n const settings = await getLineageSettings();\n lineageDispatch(setSelectCheck(settings.showSelectEdges));\n lineageDispatch(setNonSelectCheck(settings.showNonSelectEdges));\n lineageDispatch(setDefaultExpansion(settings.defaultExpansion));\n defaultExpansionRef.current = settings.defaultExpansion;\n }, [lineageDispatch]);\n\n useEffect(() => {\n applySettings();\n }, [applySettings]);\n\n useEffect(() => {\n const _flow = flow.current;\n if (!_flow) return;\n const handleEdgeVisibilityChanges = async () => {\n const _column = selectedColumn;\n if (!_column?.name) return;\n const _edges = _flow.getEdges();\n if ((selectCheck && nonSelectCheck) || (!selectCheck && !nonSelectCheck)) {\n for (const e of _edges) e.hidden = false;\n _flow.setEdges(_edges);\n return;\n }\n for (const e of _edges) {\n e.hidden = false;\n const _type = (e.data as { type: string })?.type;\n if (!_type) continue;\n if (_type === \"direct\") e.hidden = !selectCheck;\n if (_type === \"indirect\") e.hidden = !nonSelectCheck;\n }\n _flow.setEdges(_edges);\n };\n handleEdgeVisibilityChanges();\n }, [selectCheck, nonSelectCheck, flow, selectedColumn, lineageDispatch, errors]);\n\n const afterFlowRender = (flowInstance: ReactFlowInstance) => {\n flow.current = flowInstance;\n initLineage();\n };\n\n return (\n <div\n className=\"lineage_flow_component\"\n style={{ width: \"100%\", height: \"100%\" }}\n data-theme={theme}\n >\n <PopoverContext.Provider value={{ openedPopover, setOpenedPopover }}>\n <ReactFlowProvider>\n <ReactFlow\n defaultNodes={[]}\n defaultEdges={[]}\n onInit={_flow => afterFlowRender(_flow)}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n style={{ background: \"var(--bg-color)\" }}\n proOptions={{ hideAttribution: true }}\n minZoom={DEFAULT_MIN_ZOOM}\n >\n <Background />\n <Controls />\n </ReactFlow>\n <LineageLegend />\n <SidebarModal\n isOpen={sidebarScreen !== \"\"}\n closeModal={() => lineageDispatch(setSidebarScreen(\"\"))}\n width=\"30vw\"\n >\n <SidebarErrorBoundary key={sidebarScreen}>\n {sidebarScreen === TABLES_SIDEBAR && <MoreTables />}\n {sidebarScreen === COLUMNS_SIDEBAR && (\n <TableDetails\n lineageType=\"dynamic\"\n currentTableId={getCurrentTableId()}\n onNavigate={handleTableNavigation}\n />\n )}\n {sidebarScreen === EXPOSURE_SIDEBAR && <ExposureDetails />}\n {sidebarScreen === DASHBOARD_SIDEBAR && (\n <DashboardDetails onNavigate={handleTableNavigation} />\n )}\n {sidebarScreen === SNOWFLAKE_STAGE_SIDEBAR && <SnowflakeStageDetails />}\n {sidebarScreen === FUNCTION_SIDEBAR && <FunctionDetails />}\n {sidebarScreen === FEEDBACK_SIDEBAR && (\n <Feedback close={() => setSidebarScreen(\"\")} />\n )}\n {sidebarScreen === SETTINGS_SIDEBAR && (\n <Settings applyDefault={(v: number) => (defaultExpansionRef.current = v)} />\n )}\n </SidebarErrorBoundary>\n </SidebarModal>\n {flow.current ? <ExportButton flow={flow.current} /> : null}\n <ExpandWithConfidenceCard />\n <SettingsButton />\n {flow.current ? <ResetButton flow={flow.current} /> : null}\n <LineageModal />\n </ReactFlowProvider>\n </PopoverContext.Provider>\n </div>\n );\n};\n\nexport default DynamicLineage;\n","import { MutableRefObject, useEffect } from \"react\";\nimport { CollectColumn, Details } from \"../types\";\nimport { ColumnNode, SeeMoreNode, SelfConnectingEdge, TableNode } from \"./CustomNodes\";\nimport ReactFlow, {\n Background,\n Controls,\n Edge,\n Node,\n ReactFlowInstance,\n ReactFlowProvider,\n} from \"reactflow\";\nimport { createNewNodesEdges, layoutElementsOnCanvas, staticProcessColumnLineage } from \"../graph\";\nimport { useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport { setCollectColumns, setSidebarScreen } from \"../context/LineageSlice\";\nimport { LineageModal } from \"./LineageModals\";\nimport { findSourcesSinks, getCurrentTableId, handleTableNavigation } from \"../utils\";\nimport { SidebarModal } from \"./sidebarModal/SidebarModal\";\nimport { MoreTables } from \"./MoreTables\";\nimport { TableDetails } from \"./TableDetails\";\nimport ExposureDetails from \"./ExposureDetails\";\nimport FunctionDetails from \"./FunctionDetails\";\nimport SidebarErrorBoundary from \"./SidebarErrorBoundary\";\nimport { COLUMNS_SIDEBAR, EXPOSURE_SIDEBAR, FUNCTION_SIDEBAR, TABLES_SIDEBAR } from \"../constants\";\nimport LineageLegend from \"./LineageLegend\";\n\nconst nodeTypes = {\n table: TableNode,\n seeMore: SeeMoreNode,\n column: ColumnNode,\n};\nconst edgeTypes = {\n selfConnecting: SelfConnectingEdge,\n};\n\ntype StaticLineageProps = {\n flow: MutableRefObject<ReactFlowInstance<unknown, unknown> | undefined>;\n selectedColumn: { table: string; name: string };\n collectColumns: Record<string, CollectColumn[]>;\n columnEdges?: [string, string, string][];\n tableEdges: [string, string][];\n details: Details;\n};\n\nconst StaticLineage = ({\n flow,\n selectedColumn,\n collectColumns,\n columnEdges = [],\n tableEdges,\n details,\n}: StaticLineageProps) => {\n const {\n state: { sidebarScreen },\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n\n useEffect(() => {\n lineageDispatch(setCollectColumns(collectColumns));\n setTimeout(async () => {\n const _createTable = (table: string) => ({\n table,\n label: details[table].name!,\n upstreamCount: 0,\n downstreamCount: 0,\n nodeType: details[table].type || \"cte\",\n isExternalProject: false,\n tests: [],\n });\n const { sources } = findSourcesSinks(tableEdges);\n let nodes: Node[] = [];\n let edges: Edge[] = [];\n const queue = [...sources];\n const visited: Record<string, boolean> = {};\n const getConnectedTables = (right: boolean, curr: string) => {\n const connectedTables = right\n ? tableEdges.filter(([src]) => src === curr).map(([, dst]) => dst)\n : tableEdges.filter(([, dst]) => dst === curr).map(([src]) => src);\n const currLevel = nodes.find(n => n.id === curr)?.data?.level || 0;\n createNewNodesEdges(\n nodes,\n edges,\n connectedTables.map(_createTable),\n curr,\n right,\n currLevel,\n 10000,\n false,\n details\n );\n return connectedTables;\n };\n while (queue.length > 0) {\n const curr = queue.pop()!;\n if (visited[curr]) continue;\n visited[curr] = true;\n queue.push(...getConnectedTables(true, curr), ...getConnectedTables(false, curr));\n }\n\n if (selectedColumn) {\n const columnRK = `${selectedColumn.table}/${selectedColumn.name}`;\n const { nodes: _nodes, edges: _edges } = await staticProcessColumnLineage(\n nodes,\n edges,\n columnRK,\n async () => ({\n collect_columns: collectColumns,\n highlight_edges: columnEdges,\n })\n );\n nodes = _nodes;\n edges = _edges;\n }\n\n layoutElementsOnCanvas(nodes, edges, false);\n flow.current?.setNodes(nodes);\n flow.current?.setEdges(edges);\n }, 500);\n }, [collectColumns, columnEdges, details, flow, lineageDispatch, selectedColumn, tableEdges]);\n\n useEffect(() => {\n const timerId = setTimeout(() => {\n flow.current?.fitView({ duration: 500 });\n }, 1000);\n return () => clearInterval(timerId);\n }, [flow]);\n\n return (\n <div style={{ width: \"100%\", height: \"100%\" }}>\n <div style={{ width: \"100%\", height: \"100%\" }}>\n <ReactFlowProvider>\n <ReactFlow\n defaultNodes={[]}\n defaultEdges={[]}\n onInit={_flow => (flow.current = _flow)}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n style={{ background: \"var(--bg-color)\" }}\n proOptions={{ hideAttribution: true }}\n minZoom={0.05}\n >\n <Background />\n <Controls />\n </ReactFlow>\n <LineageLegend />\n <SidebarModal\n isOpen={sidebarScreen !== \"\"}\n closeModal={() => lineageDispatch(setSidebarScreen(\"\"))}\n width=\"30vw\"\n >\n <SidebarErrorBoundary key={sidebarScreen}>\n {sidebarScreen === TABLES_SIDEBAR && <MoreTables />}\n {sidebarScreen === COLUMNS_SIDEBAR && (\n <TableDetails\n lineageType=\"static\"\n currentTableId={getCurrentTableId()}\n onNavigate={handleTableNavigation}\n />\n )}\n {sidebarScreen === EXPOSURE_SIDEBAR && <ExposureDetails />}\n {sidebarScreen === FUNCTION_SIDEBAR && <FunctionDetails />}\n </SidebarErrorBoundary>\n </SidebarModal>\n </ReactFlowProvider>\n </div>\n <LineageModal />\n </div>\n );\n};\n\nexport default StaticLineage;\n","import { MutableRefObject, useEffect } from \"react\";\nimport { StaticLineageDetails } from \"../types\";\nimport { ColumnNode, SeeMoreNode, SelfConnectingEdge, SqlTableNode, OpNode } from \"./CustomNodes\";\nimport ReactFlow, {\n Background,\n Controls,\n Edge,\n Node,\n ReactFlowInstance,\n ReactFlowProvider,\n} from \"reactflow\";\nimport { createNewNodesEdges, layoutElementsOnCanvas } from \"../graph\";\nimport { SidebarModal } from \"./sidebarModal/SidebarModal\";\nimport { useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport { StaticTableDetails } from \"./TableDetails\";\nimport {\n setHighlightedNodes,\n setNodesCost,\n setNodesSavingsPerformance,\n setSelectedNode,\n setSelectedTable,\n setSqlLineageDetails,\n} from \"../context/LineageSlice\";\nimport {\n createOpNode,\n createTableEdge,\n createTableNode,\n findSourcesSinks,\n getCurrentTableId,\n handleTableNavigation,\n} from \"../utils\";\nimport { LineageModal } from \"./LineageModals\";\nimport { NODE_TYPE_SHORTHAND } from \"./Column\";\nimport { LineageState } from \"../context/types\";\n\nconst nodeTypes = {\n table: SqlTableNode,\n seeMore: SeeMoreNode,\n column: ColumnNode,\n operator: OpNode,\n};\nconst edgeTypes = {\n selfConnecting: SelfConnectingEdge,\n};\n\ntype SqlLineageProps = {\n tableEdges: [string, string][];\n details: StaticLineageDetails;\n flow: MutableRefObject<ReactFlowInstance<unknown, unknown> | undefined>;\n nodePositions?: Record<string, [number, number]>;\n};\n\nconst SqlLineage = ({ flow, tableEdges, details, nodePositions }: SqlLineageProps) => {\n const {\n state: { selectedTable },\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n\n useEffect(() => {\n lineageDispatch(setSqlLineageDetails({ details, tableEdges }));\n }, [details, lineageDispatch, tableEdges]);\n\n useEffect(() => {\n setTimeout(async () => {\n const _createTable = (table: string) => ({\n table,\n label: details[table].name || table,\n upstreamCount: 0,\n downstreamCount: 0,\n nodeType: details[table].type || \"cte\",\n isExternalProject: false,\n tests: [],\n });\n if (nodePositions) {\n const nodes: Node[] = Object.keys(nodePositions).map(n => {\n const opType = details[n].type;\n if (opType in NODE_TYPE_SHORTHAND) {\n return createTableNode(_createTable(n), 0, \"\");\n }\n return createOpNode(n, 0, \"\", details[n]);\n });\n const edges = tableEdges.map(([src, dst]) =>\n createTableEdge(nodePositions[src][1], nodePositions[dst][1], src, dst, true, true)\n );\n\n for (const n of nodes) {\n if (!nodePositions[n.id]) continue;\n const [x, y] = nodePositions[n.id];\n n.position = { x, y };\n }\n flow.current?.setNodes(nodes);\n flow.current?.setEdges(edges);\n return;\n }\n const { sinks } = findSourcesSinks(tableEdges);\n let nodes: Node[] = sinks.map(n => createTableNode(_createTable(n), 0, \"\"));\n let edges: Edge[] = [];\n const queue = [...sinks];\n const visited: Record<string, boolean> = {};\n const getConnectedTables = (right: boolean, curr: string) => {\n const connectedTables = right\n ? tableEdges.filter(([src]) => src === curr).map(([, dst]) => dst)\n : tableEdges.filter(([, dst]) => dst === curr).map(([src]) => src);\n const currLevel = nodes.find(n => n.id === curr)?.data?.level || 0;\n createNewNodesEdges(\n nodes,\n edges,\n connectedTables.map(_createTable),\n curr,\n right,\n currLevel,\n 10000,\n true,\n details\n );\n return connectedTables;\n };\n while (queue.length > 0) {\n const curr = queue.pop()!;\n if (visited[curr]) continue;\n visited[curr] = true;\n queue.push(...getConnectedTables(false, curr));\n }\n\n layoutElementsOnCanvas(nodes, edges, true);\n flow.current?.setNodes(nodes);\n flow.current?.setEdges(edges);\n }, 500);\n }, [details, flow, tableEdges, nodePositions]);\n\n useEffect(() => {\n const timerId = setTimeout(() => {\n flow.current?.fitView({ duration: 500 });\n }, 1000);\n return () => clearInterval(timerId);\n }, [flow]);\n\n useEffect(() => {\n const handleHighlightedNodes = (e: CustomEvent<string[]>) => {\n lineageDispatch(setHighlightedNodes(e.detail));\n };\n\n const handleSelectedNodes = (e: CustomEvent<string>) => {\n lineageDispatch(setSelectedNode(e.detail));\n };\n\n const handleFitView = () => {\n setTimeout(() => {\n flow.current?.fitView({ duration: 500 });\n }, 500);\n };\n\n const handleNodesSavingsPerformance = (\n e: CustomEvent<LineageState[\"nodeSavingsPerformance\"]>\n ) => {\n lineageDispatch(setNodesSavingsPerformance(e.detail));\n };\n\n const handleNodesCost = (e: CustomEvent<LineageState[\"nodesCost\"]>) => {\n lineageDispatch(setNodesCost(e.detail));\n };\n // @ts-ignore\n document.addEventListener(\"onHighlightedNodes\", handleHighlightedNodes);\n // @ts-ignore\n document.addEventListener(\"onSelectedNodes\", handleSelectedNodes);\n // @ts-ignore\n document.addEventListener(\"onNodesSavingsPerformance\", handleNodesSavingsPerformance);\n // @ts-ignore\n document.addEventListener(\"onNodesCost\", handleNodesCost);\n document.addEventListener(\"fitView\", handleFitView);\n\n return () => {\n // @ts-ignore\n document.removeEventListener(\"highlightedNodes\", handleHighlightedNodes);\n // @ts-ignore\n document.removeEventListener(\"onSelectedNodes\", handleSelectedNodes);\n // @ts-ignore\n document.removeEventListener(\"onNodesSavingsPerformance\", handleNodesSavingsPerformance);\n // @ts-ignore\n document.removeEventListener(\"onNodesCost\", handleNodesCost);\n document.removeEventListener(\"fitView\", handleFitView);\n };\n }, [flow, lineageDispatch]);\n\n return (\n <div style={{ width: \"100%\", height: \"100%\" }}>\n <div style={{ width: \"100%\", height: \"100%\" }}>\n <ReactFlowProvider>\n <ReactFlow\n defaultNodes={[]}\n defaultEdges={[]}\n onInit={_flow => (flow.current = _flow)}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n style={{ background: \"var(--bg-color)\" }}\n proOptions={{ hideAttribution: true }}\n minZoom={0.05}\n >\n <Background />\n <Controls />\n </ReactFlow>\n </ReactFlowProvider>\n </div>\n <LineageModal />\n <SidebarModal\n isOpen={Boolean(selectedTable)}\n closeModal={() => lineageDispatch(setSelectedTable(\"\"))}\n width=\"30vw\"\n >\n {Boolean(selectedTable) && (\n <StaticTableDetails\n currentTableId={getCurrentTableId()}\n onNavigate={handleTableNavigation}\n />\n )}\n </SidebarModal>\n </div>\n );\n};\n\nexport default SqlLineage;\n","import {\n createContext,\n forwardRef,\n ForwardRefRenderFunction,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useReducer,\n useRef,\n useState,\n} from \"react\";\nimport { LineageState, LineageType, SqlLineage } from \"./types\";\nimport { UnknownAction } from \"@reduxjs/toolkit\";\nimport lineageSlice, { setTheme } from \"./LineageSlice\";\nimport { Column, StaticLineage, Table } from \"../types\";\nimport { ReactFlowInstance } from \"reactflow\";\nimport DynamicLineageComponent from \"../components/DynamicLineage\";\nimport StaticLineageComponent from \"../components/StaticLineage\";\nimport SqlLineageComponent from \"../components/SqlLineage\";\n\nexport interface LineageProviderProps {\n dynamicLineage?: { node?: Table; aiEnabled: boolean };\n sqlLineage?: SqlLineage;\n staticLineage?: StaticLineage;\n theme: \"dark\" | \"light\";\n lineageType: LineageType;\n allowSyncColumnsWithDB?: boolean;\n externalSidePanel?: boolean;\n renderTags?: (entity: { column: Column; table_rk: string }) => ReactNode;\n client?: \"saas\" | \"extension\";\n}\n\ninterface ContextProps {\n state: LineageState;\n dispatch: React.Dispatch<UnknownAction>;\n rerender: () => void;\n}\n\nexport const LineageContext = createContext<ContextProps>({\n state: lineageSlice.getInitialState(),\n dispatch: () => null,\n rerender: () => null,\n});\n\nexport interface LineageRef {\n rerender: () => void;\n}\n\nconst LineageProvider: ForwardRefRenderFunction<LineageRef, LineageProviderProps> = (\n {\n theme = \"dark\",\n lineageType,\n sqlLineage,\n dynamicLineage,\n staticLineage,\n allowSyncColumnsWithDB,\n externalSidePanel = false,\n renderTags,\n client = \"extension\",\n },\n lineageRef\n) => {\n const [state, dispatch] = useReducer(lineageSlice.reducer, {\n ...lineageSlice.getInitialState(),\n theme,\n lineageType,\n sqlLineage,\n allowSyncColumnsWithDB,\n externalSidePanel,\n renderTags,\n client,\n });\n\n const flow = useRef<ReactFlowInstance<unknown, unknown>>();\n const [_rerenderVal, _rerender] = useState(0);\n const rerender = useCallback(() => _rerender(x => (x + 1) % 100), []);\n\n useEffect(() => {\n flow.current?.fitView({});\n }, [_rerenderVal]);\n\n useImperativeHandle(lineageRef, () => ({\n rerender,\n }));\n\n useEffect(() => {\n dispatch(setTheme(theme));\n }, [theme]);\n\n const values = useMemo(\n () => ({\n state,\n dispatch,\n rerender,\n }),\n [state, dispatch, rerender]\n );\n\n return (\n <LineageContext.Provider value={values}>\n <div className=\"lineage-component\">\n {lineageType === \"sql\" && sqlLineage && (\n <SqlLineageComponent\n flow={flow}\n details={sqlLineage.details}\n tableEdges={sqlLineage.tableEdges}\n nodePositions={sqlLineage.nodePositions}\n />\n )}\n {lineageType === \"dynamic\" && dynamicLineage && (\n <DynamicLineageComponent flow={flow} theme={theme} />\n )}\n {lineageType === \"static\" && staticLineage && (\n <StaticLineageComponent flow={flow} {...staticLineage} />\n )}\n <div id=\"lineage-sidebar\"></div>\n </div>\n </LineageContext.Provider>\n );\n};\n\nexport default forwardRef(LineageProvider);\n\nexport const useLineageContext = () => {\n return useContext(LineageContext);\n};\n\nexport const useLineageDispatch = () => {\n const { dispatch } = useContext(LineageContext);\n return dispatch;\n};\n"],"names":["initialState","undefined","lineageSlice","createSlice","state","action","newCollectColumns","collectColumns","t","_columns","updatedColumns","c","existing","x","newConfidence","setSelectedTable","setMoreTables","mergeSeeMoreTables","setSidebarScreen","setSelectedColumn","setCollectColumns","mergeCollectColumns","setConfidence","updateConfidenceWithOperatorList","setLeftExpansion","setRightExpansion","setMinRange","setNodeCount","setSelectCheck","setNonSelectCheck","setDefaultExpansion","setAiEnabled","setModalArgs","setTheme","setLineageType","setStaticLineage","setAllowSyncColumnsWithDB","setSqlLineageDetails","setHighlightedNodes","setSelectedNode","setNodesSavingsPerformance","setNodesCost","setErrors","setLightdashEnabled","setShowCodeModal","setRenderTags","setConfig","setClient","COLUMNS_SIDEBAR","EXPOSURE_SIDEBAR","SNOWFLAKE_STAGE_SIDEBAR","DASHBOARD_SIDEBAR","FUNCTION_SIDEBAR","FEEDBACK_SIDEBAR","SETTINGS_SIDEBAR","COLUMN_PREFIX","SEE_MORE_PREFIX","MAX_EXPAND_TABLE","F_OFFSET_X","F_OFFSET_Y","T_NODE_W","T_NODE_H","C_OFFSET_X","C_OFFSET_Y","C_NODE_H","C_PADDING_Y","T_LEVEL_SEPARATION","LEVEL_SEPARATION_VERTICAL","T_NODE_Y_SEPARATION","T_NODE_Y_SEPARATION_VERTICAL","DEFAULT_MIN_ZOOM","DEFAULT_COLOR","HIGHLIGHT_COLOR","VIEWS_TYPE_COLOR","defaultEdgeStyle","highlightEdgeStyle","indirectHighlightEdgeStyle","defaultMarker","highlightMarker","isColumn","isSeeMore","isNotColumn","createTableEdge","n1Level","n2Level","n1","n2","right","isVertical","from","src","dst","sourceHandle","targetHandle","getSourceTargetHandles","console","createTableNode","_table","level","parent","createOpNode","id","data","createColumnNode","viewsType","viewsCode","nodeType","datatype","getColumnId","createColumnEdge","source","target","srcLevel","dstLevel","type","edgeVisibility","edgeId","getColumnEdgeId","applyNodeStyling","n","highlight","applyEdgeStyling","e","l0","l1","getHelperDataForCLL","nodes","edges","levelMap","tableNodes","_n","seeMoreIdTableReverseMap","sourceTableExist","targetTableExist","_t","getSeeMoreId","contains","arr","item","safeConcat","obj","key","values","getColY","columnNum","tableNum","withinExclusive","a","b","v","deleteIfExists","index","calculateExpand","minVal","maxVal","defaultVal","toggleModelEdges","isVisible","toggleColumnEdges","findSourcesSinks","_inDegree","_outDegree","u","sources","Object","k","sinks","getCurrentTableId","window","currentUrl","urlParts","i","handleTableNavigation","url","table","idPart","encodedId","btoa","SvgTests","props","SvgEphemeral","SvgExternalProject","SvgBoolean","SvgText","SvgNumber","SvgObject","SvgDatetime","SvgGeospatial","SvgModel","SvgSeed","SvgSource","SvgExposure","SvgAnalysis","SvgSnapshot","SvgMetrics","SvgMacros","SvgChevronUp","SvgChevronDown","SvgXClose","SvgExpandLineage","SvgThumbsup","SvgThumbsdown","SvgThumbsupSelected","SvgThumbsdownSelected","SvgExpand","SvgArrowLeftDouble","SvgArrowRightDouble","SvgArrowLeft","SvgArrowRight","SvgDbtNodeMetricsDark","SvgDbtNodeCte","SvgDbtNodeSubqueryLight","SvgDbtNodeSubqueryDark","SvgDbtNodeModel","SvgDbtNodeSeed","SvgDbtNodeSource","SvgDbtNodeExposure","SvgDbtNodeSnapshot","SvgDbtNodeMetricsLight","SvgSqlFilter","SvgSqlGroupBy","SvgSqlInnerJoin","SvgSqlLeftJoin","SvgSqlLimit","SvgSqlOrderBy","SvgSqlOuterJoin","SvgSqlRightJoin","SvgSqlCrossJoin","SvgSqlLateralJoin","SvgSqlFullJoin","SvgSqlUnion","SvgSqlSelect","SvgAlertError","SvgFunction","SvgDbtNodeFunction","SvgBolt","SvgDbt","Icon","icon","className","rest","CodeIcon","RefreshIcon","SettingsIcon","ChevronUpIcon","ChevronDownIcon","InfoCircleIcon","ShareIcon","ViewsTypeBadge","Tooltip","styles","LineageLegend","showLegend","setShowLegend","useState","useEffect","setTimeout","clearTimeout","Popover","PopoverTrigger","Button","DownIcon","UpIcon","PopoverContent","Stack","useQuery","queryFn","enabled","error","setError","loading","setLoading","setData","fetchData","useCallback","response","refetch","useMutation","onSuccess","mutate","args","ApiHelper","_url","_data","_request","upstreamTables","downstreamTables","getExposureDetails","name","getFunctionDetails","getSnowflakeStageDetails","table_rk","getDbtInfo","getColumns","refresh","getConnectedColumns","body","sendFeedback","getLineageSettings","persistLineageSettings","initLineage","openFile","openChat","showInfoNotification","message","previewFeature","columnLineage","event","telemetryEvents","showExternalViewCodeModal","exportLineage","finalLineageDownload","CllEvents","CLL","CustomEvent","document","ColumnDatatype","color","size","compColor","useMemo","NumberIcon","BooleanIcon","TextIcon","GeospatialIcon","DatetimeIcon","ObjectIcon","NodeTypeIconsWithColors","DbtNodeSeedIcon","DbtNodeModelIcon","CteIcon","DbtNodeSubqueryLightIcon","DbtNodeSubqueryDarkIcon","DbtNodeSourceIcon","DbtNodeExposureIcon","AnalysisIcon","DbtNodeSnapshotIcon","MetricsLightIcon","MetricsDarkIcon","MacrosIcon","DbtNodeFunctionIcon","NodeTypeIcon","SeedIcon","ModelIcon","SourceIcon","ExposureIcon","SnapshotIcon","MetricsIcon","FunctionIcon","IconHeartRateMonitor","NodeIcon","NODE_TYPE_SHORTHAND","DIALECT_ICON","NodeTypeIconForSQL","theme","useLineageContext","TableNodePill","text","label","NODE_TYPE_STYLES","getConnectedTables","calculateNewLevel","createNewNodesEdges","tables","max_expand_table","details","newLevel","addUniqueEdge","to","toLevel","_edge","existingEdge","tableAdded","nodeId","existingNode","opType","layoutElementsOnCanvas","minLevel","Infinity","maxLevel","tableWiseColumnCount","Math","tableWiseLevelColumnCount","levelWiseTables","tableWiseLevelPos","visited","adjacencyListRight","adjacencyListLeft","processNode","curr","dfs","adjacencyList","m","getY","_index","_columnCount","getX","basisLevel","getYVertical","getXVertical","resetTableHighlights","highlightTableConnections","highlightNode","highlightEdge","bfsTraversal","queue","newEdges","_e","newNodes","Boolean","setHighlightedTableConnections","flow","_nodes","_edges","processColumnLineage","prevNodes","currAnd1HopTables","selectedColumn","column_lineage","confidence","errors","prev","newCurr","addToCollectColumns","_column","_existingColumn","addToEdges","id1","id2","seeMoreLineage","t0","t1","sourceId","targetId","edgeType","seeMoreId","viewsCodes","staticProcessColumnLineage","column_rk","postConnectedColumns","edgesPayload","collect_columns","highlight_edges","mergeNodesEdges","prevState","patchState","e1","start","columnEdgeType","removeColumnNodes","expandTableLineage","expandTableLineageLevelWise","lb","ub","withinExcBounds","rootLevel","bfs","_calculateMinLevel","countKey","nodesMap","nodeData","targetNode","targetLevel","calculateMinLevel","columns","getNodesEdges","setNodesEdges","isLineage","_getNode","ephemeralAncestors","currTargetColumns","currEphemeralNodes","currTargetTables","hop1Tables","_currEphemeralNodes","collectEphemeralAncestors","noDependents","srcTable","dstNode","dstTables","dstTableData","dstTable","materialization","Array","Set","ns","es","moveTableFromSeeMoreToCanvas","prevTable","lineage","node","fromLevel","seeMoreNodeId","seeMoreEdgeId","calculateNodeCount","selectedTable","leftExpansion","rightExpansion","selectedTableData","startingNodesNum","getTracedNode","isIncomer","isNode","tracedEdges","getAllTracedNodes","prevTraced","tracedNodes","edgeIds","memo","tracedNode","_edgeIds","foundNode","highlightColumnConnections","edge","incomingNodes","outgoingNodes","cn","inputs","twMerge","clsx","HANDLE_OFFSET","BidirectionalHandles","Handle","Position","TableNode","upstreamCount","downstreamCount","tests","isExternalProject","schema","stale","lastSeen","useReactFlow","selectCheck","nonSelectCheck","rerender","lineageDispatch","useLineageDispatch","_columnLen","_showColumns","selected","expand","currentEdges","operatorList","moreTables","fn","expandRight","expandLeft","onDetailsClick","sidebarMap","tableId","classNames","Typography","line","AlertErrorIcon","TestsIcon","EphemeralIcon","IconExclamationCircle","dayjs","ExternalProjectIcon","DashboardNode","dashboard_name","workbook_name","_dashboard_url","_description","_created_by","_last_modified","_collectColumns","_selectCheck","_nonSelectCheck","_rerender","SavingsPerformanceBadge","percentValue","SqlTableNode","sqlLineage","highlightedNodes","externalSidePanel","selectedNode","nodeSavingsPerformance","nodesCost","nType","ArrowRightDoubleIcon","SeeMoreNode","handleClick","TABLES_SIDEBAR","SelfConnectingEdge","sourceX","sourceY","targetX","targetY","markerEnd","radiusX","radiusY","edgePath","BaseEdge","ColumnNode","column","showCodeModal","isSelected","viewsColor","customStyles","currentNode","hasCode","query_hash","code","SQL_ICONS","SqlInnerJoinIcon","SqlOuterJoinIcon","SqlLeftJoinIcon","SqlFullJoinIcon","SqlRightJoinIcon","SqlCrossJoinIcon","SqlLateralJoinIcon","SqlFilterIcon","SqlGroupByIcon","SqlLimitIcon","SqlOrderByIcon","SqlUnionIcon","SqlSelectIcon","PostgresIcon","SnowflakeIcon","S3Icon","OpNode","expression","isDarkMode","SidebarModal","isOpen","closeModal","width","children","sidebarElem","widthString","createPortal","CloseIcon","CustomInput","Input","CustomMultilineInput","Textarea","TableHeader","canLineageExpand","ExpandLineageIcon","MoreTables","_tables","_lineageTables","onItemClick","allTablesAdded","selectAllTables","_node","isNodeOnOtherLevel","result","filteredTables","setFilteredTables","_search","Collapse","forwardRef","ref","Table","ComponentLoader","top","left","ColorTag","PurposeSection","purpose","ColumnCard","isSelectable","config","renderTags","dispatch","useContext","LineageContext","IconButton","CodeBlock","ColumnSection","filteredColumn","setFilteredColumn","handleColumnClick","allowSyncColumnsWithDB","lineageType","isEphemeral","isAnalysis","TestSection","filteredTests","setFilteredTests","_test","icons","BracketsIcon","HalfCircleIcon","CaseSensitiveIcon","SplitHorizontalIcon","getIconForType","tableMetaKeys","DataTable","UITable","value","String","renderValue","LightDashSection","openSections","setOpenSections","toggleCollapse","Card","CardContent","HeaderSection","tableData","currentTableId","onNavigate","client","shouldShowButton","handleNavigateClick","TableDetails","aiEnabled","lightdashEnabled","dbtInfo","setDbtInfo","tab","setTab","isLoading","setIsLoading","tableNodeData","Error","addNodesEdges","_bfsTraversal","Promise","tabs","BoltIcon","DbtIcon","StaticTableDetails","setColumns","sql","ColumnRow","title","Chip","ExposureDetails","tag","COLOR_MAP","COLOR_BG_MAP","AVAILABLE_COLORS","getHashColor","str","hash","char","LocalColorTag","backgroundColor","textColor","CustomRow","DashboardDetails","formatCost","cost","formatNumber","num","formatDate","dateString","Date","encodeURIComponent","insight","IconPremiumRights","IconUser","IconBook","IconLibraryFilled","IconSitemap","IconServer","IconEye","IconRefresh","IconUsers","IconCalendar","IconWorld","Feedback","close","feedbackState","setFeedbackState","feedbackInput","setFeedbackInput","isSubmitted","setIsSubmitted","ThumbsupSelectedIcon","ThumbsupIcon","ThumbsdownSelectedIcon","ThumbsdownIcon","Settings","applyDefault","defaultExpansion","Label","parseInt","PopoverContext","createContext","BetterPopover","trigger","render","openedPopover","setOpenedPopover","open","AutoExpansionPopover","minRange","nodeCount","maxRange","setMaxRange","popoverId","isPopoverOpen","updateLeftExpansion","updateRightExpansion","ExpandIcon","ArrowLeftDoubleIcon","ArrowLeftIcon","ArrowRightIcon","ExpandWithConfidenceCard","expandContainer","SettingsButton","settingsContainer","ResetButton","resetContainer","FormInput","params","setParams","Checkbox","ExportFinalLineageModal","modalArgs","isExporting","handleExport","ViewsCodeModal","viewsCodeArgs","viewsCodesFlat","OpNodeModal","opNodeArgs","LineageModal","Dialog","DialogPortal","DialogOverlay","DialogContent","ExportButton","exportContainer","setName","handleExportLineage","tableEdges","columnEdges","lineage_data","SnowflakeStageDetails","fetchDetails","FunctionDetails","err","arg","s","SidebarErrorBoundary","Component","nodeTypes","edgeTypes","DynamicLineage","sidebarScreen","defaultExpansionRef","useRef","onCllCancelled","renderStartNode","_flow","handleRenderStartNode","applySettings","settings","handleEdgeVisibilityChanges","_type","afterFlowRender","flowInstance","ReactFlowProvider","ReactFlow","Background","Controls","StaticLineage","_createTable","connectedTables","currLevel","columnRK","timerId","clearInterval","SqlLineage","nodePositions","y","handleHighlightedNodes","handleSelectedNodes","handleFitView","handleNodesSavingsPerformance","handleNodesCost","LineageProvider","dynamicLineage","staticLineage","lineageRef","useReducer","_rerenderVal","useImperativeHandle","SqlLineageComponent","DynamicLineageComponent","StaticLineageComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lineage.js","sources":["../src/components/lineage/context/LineageSlice.ts","../src/components/lineage/constants.ts","../src/components/lineage/utils.ts","webpack://@altimateai/ui-components/./src/components/lineage/components/styles.module.scss?bf9b","../src/components/lineage/assets/icons/tests.svg","../src/components/lineage/assets/icons/ephemeral.svg","../src/components/lineage/assets/icons/external-project.svg","../src/components/lineage/assets/icons/boolean.svg","../src/components/lineage/assets/icons/text.svg","../src/components/lineage/assets/icons/number.svg","../src/components/lineage/assets/icons/object.svg","../src/components/lineage/assets/icons/datetime.svg","../src/components/lineage/assets/icons/geospatial.svg","../src/components/lineage/assets/icons/model.svg","../src/components/lineage/assets/icons/seed.svg","../src/components/lineage/assets/icons/source.svg","../src/components/lineage/assets/icons/exposure.svg","../src/components/lineage/assets/icons/analysis.svg","../src/components/lineage/assets/icons/snapshot.svg","../src/components/lineage/assets/icons/metrics.svg","../src/components/lineage/assets/icons/macros.svg","../src/components/lineage/assets/icons/chevron-up.svg","../src/components/lineage/assets/icons/chevron-down.svg","../src/components/lineage/assets/icons/x-close.svg","../src/components/lineage/assets/icons/expand-lineage.svg","../src/components/lineage/assets/icons/thumbsup.svg","../src/components/lineage/assets/icons/thumbsdown.svg","../src/components/lineage/assets/icons/thumbsup-selected.svg","../src/components/lineage/assets/icons/thumbsdown-selected.svg","../src/components/lineage/assets/icons/expand.svg","../src/components/lineage/assets/icons/arrow-left-double.svg","../src/components/lineage/assets/icons/arrow-right-double.svg","../src/components/lineage/assets/icons/arrow-left.svg","../src/components/lineage/assets/icons/arrow-right.svg","../src/components/lineage/assets/icons/dbt_node_metrics_dark.svg","../src/components/lineage/assets/icons/dbt_node_cte.svg","../src/components/lineage/assets/icons/dbt_node_subquery_light.svg","../src/components/lineage/assets/icons/dbt_node_subquery_dark.svg","../src/components/lineage/assets/icons/dbt_node_model.svg","../src/components/lineage/assets/icons/dbt_node_seed.svg","../src/components/lineage/assets/icons/dbt_node_source.svg","../src/components/lineage/assets/icons/dbt_node_exposure.svg","../src/components/lineage/assets/icons/dbt_node_snapshot.svg","../src/components/lineage/assets/icons/dbt_node_metrics_light.svg","../src/components/lineage/assets/icons/sql_filter.svg","../src/components/lineage/assets/icons/sql_group_by.svg","../src/components/lineage/assets/icons/sql_inner_join.svg","../src/components/lineage/assets/icons/sql_left_join.svg","../src/components/lineage/assets/icons/sql_limit.svg","../src/components/lineage/assets/icons/sql_order_by.svg","../src/components/lineage/assets/icons/sql_outer_join.svg","../src/components/lineage/assets/icons/sql_right_join.svg","../src/components/lineage/assets/icons/sql_cross_join.svg","../src/components/lineage/assets/icons/sql_lateral_join.svg","../src/components/lineage/assets/icons/sql_full_join.svg","../src/components/lineage/assets/icons/sql_union.svg","../src/components/lineage/assets/icons/sql_select.svg","../src/components/lineage/assets/icons/alert-error.svg","../src/components/lineage/assets/icons/function.svg","../src/components/lineage/assets/icons/dbt_node_function.svg","../src/assets/icons/bolt.svg","../src/assets/icons/dbt.svg","../src/assets/icons/index.tsx","../src/components/lineage/components/ViewsTypeBadge.tsx","../src/components/lineage/components/LineageLegend.tsx","../src/components/api/useQuery.ts","../src/components/api/useMutation.ts","../src/components/api/index.ts","../src/components/lineage/api/index.ts","../src/components/lineage/cllUtils.ts","../src/components/lineage/components/Column.tsx","../src/components/lineage/graph.ts","../src/shared/utils.ts","../src/components/lineage/components/CustomNodes.tsx","../src/components/lineage/components/sidebarModal/SidebarModal.tsx","../src/components/lineage/components/Form.tsx","../src/components/lineage/components/MoreTables.tsx","../src/shared/Collapse.tsx","../src/shared/Table.tsx","webpack://@altimateai/ui-components/./src/components/lineage/components/Loader/styles.module.scss?5241","../src/components/lineage/components/Loader/index.tsx","webpack://@altimateai/ui-components/./src/components/lineage/components/Tags/styles.module.scss?dfd9","../src/components/lineage/components/Tags/index.tsx","../src/components/lineage/components/Purpose.tsx","../src/components/lineage/components/TableDetails.tsx","../src/components/lineage/components/ColumnRow.tsx","../src/components/lineage/components/Chip.tsx","../src/components/lineage/components/ExposureDetails.tsx","../src/components/lineage/components/DashboardDetails.tsx","../src/components/lineage/components/Feedback.tsx","../src/components/lineage/components/Settings.tsx","../src/components/lineage/components/BetterPopover.tsx","../src/components/lineage/components/AutoExpansionPopover.tsx","../src/components/lineage/components/ExpandWithConfidenceCard.tsx","../src/components/lineage/components/SettingsButton.tsx","../src/components/lineage/components/ResetButton.tsx","../src/components/lineage/components/ExportFinalLineageModal.tsx","../src/components/lineage/components/LineageModals.tsx","../src/components/lineage/components/ExportButton.tsx","../src/components/lineage/components/SnowflakeStageDetails.tsx","../src/components/lineage/components/FunctionDetails.tsx","../src/components/lineage/components/SidebarErrorBoundary.tsx","../src/components/lineage/components/DynamicLineage.tsx","../src/components/lineage/components/StaticLineage.tsx","../src/components/lineage/components/SqlLineage.tsx","../src/components/lineage/context/LineageProvider.tsx"],"sourcesContent":["import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { LineageState } from \"./types\";\nimport { ColumnLineage, Confidence, CollectColumn } from \"../types\";\n\nconst initialState = {\n selectedTable: \"\",\n moreTables: {},\n sidebarScreen: \"\",\n selectedColumn: undefined,\n collectColumns: {},\n confidence: { confidence: \"high\" },\n leftExpansion: 0,\n rightExpansion: 0,\n minRange: [0, 0],\n nodeCount: 0,\n selectCheck: true,\n nonSelectCheck: true,\n defaultExpansion: 1,\n aiEnabled: false,\n modalArgs: null,\n theme: \"dark\",\n lineageType: \"dynamic\",\n highlightedNodes: [],\n externalSidePanel: false,\n selectedNode: \"\",\n nodeSavingsPerformance: {},\n nodesCost: {},\n errors: {},\n lightdashEnabled: false,\n showCodeModal: false,\n renderTags: undefined,\n config: { exportFinalLineage: false },\n client: \"extension\",\n} as LineageState;\n\nconst lineageSlice = createSlice({\n name: \"lineageState\",\n initialState,\n reducers: {\n setAllowSyncColumnsWithDB: (\n state,\n action: PayloadAction<LineageState[\"allowSyncColumnsWithDB\"]>\n ) => {\n state.allowSyncColumnsWithDB = action.payload;\n },\n setStaticLineage: (state, action: PayloadAction<LineageState[\"sqlLineage\"]>) => {\n state.sqlLineage = action.payload;\n },\n setLineageType: (state, action: PayloadAction<LineageState[\"lineageType\"]>) => {\n state.lineageType = action.payload;\n },\n setTheme: (state, action: PayloadAction<LineageState[\"theme\"]>) => {\n state.theme = action.payload;\n },\n setSelectedTable: (state, action: PayloadAction<LineageState[\"selectedTable\"]>) => {\n state.selectedTable = action.payload;\n },\n setModalArgs: (state, action: PayloadAction<LineageState[\"modalArgs\"]>) => {\n state.modalArgs = action.payload;\n },\n setAiEnabled: (state, action: PayloadAction<LineageState[\"aiEnabled\"]>) => {\n state.aiEnabled = action.payload;\n },\n setMoreTables: (state, action: PayloadAction<LineageState[\"moreTables\"]>) => {\n state.moreTables = action.payload;\n },\n mergeSeeMoreTables: (state, action: PayloadAction<ColumnLineage[]>) => {\n state.moreTables = {\n ...state.moreTables,\n lineage: [...(state.moreTables.lineage || []), ...action.payload],\n };\n },\n setSidebarScreen: (state, action: PayloadAction<LineageState[\"sidebarScreen\"]>) => {\n state.sidebarScreen = action.payload;\n },\n setSelectedColumn: (state, action: PayloadAction<LineageState[\"selectedColumn\"]>) => {\n state.selectedColumn = action.payload;\n },\n setCollectColumns: (state, action: PayloadAction<LineageState[\"collectColumns\"]>) => {\n state.collectColumns = action.payload;\n },\n mergeCollectColumns: (state, action: PayloadAction<Record<string, CollectColumn[]>>) => {\n const newCollectColumns = action.payload;\n const collectColumns: Record<string, CollectColumn[]> = {\n ...state.collectColumns,\n };\n for (const t in newCollectColumns) {\n const _columns = newCollectColumns[t];\n if (!(t in collectColumns)) {\n collectColumns[t] = _columns;\n continue;\n }\n // merge _columns with collectColumns[t]\n const updatedColumns = _columns\n .map(c => {\n const existing = collectColumns[t].findIndex(x => x.column === c.column);\n if (existing === -1) return c;\n if (c.viewsType) collectColumns[t][existing].viewsType = c.viewsType;\n return null;\n })\n .filter((c): c is CollectColumn => c !== null);\n collectColumns[t].push(...updatedColumns);\n }\n state.collectColumns = collectColumns;\n },\n setConfidence: (state, action: PayloadAction<LineageState[\"confidence\"]>) => {\n state.confidence = action.payload;\n },\n updateConfidenceWithOperatorList: (\n state,\n action: PayloadAction<{ operatorList: Confidence[\"operator_list\"] }>\n ) => {\n const newConfidence = { ...state.confidence, confidence: \"low\" };\n newConfidence.operator_list = newConfidence.operator_list || [];\n newConfidence.operator_list.push(...(action.payload.operatorList || []));\n state.confidence = newConfidence;\n },\n setLeftExpansion: (state, action: PayloadAction<LineageState[\"leftExpansion\"]>) => {\n state.leftExpansion = action.payload;\n },\n setRightExpansion: (state, action: PayloadAction<LineageState[\"rightExpansion\"]>) => {\n state.rightExpansion = action.payload;\n },\n setMinRange: (state, action: PayloadAction<LineageState[\"minRange\"]>) => {\n state.minRange = action.payload;\n },\n setNodeCount: (state, action: PayloadAction<LineageState[\"nodeCount\"]>) => {\n state.nodeCount = action.payload;\n },\n setSelectCheck: (state, action: PayloadAction<LineageState[\"selectCheck\"]>) => {\n state.selectCheck = action.payload;\n },\n setNonSelectCheck: (state, action: PayloadAction<LineageState[\"nonSelectCheck\"]>) => {\n state.nonSelectCheck = action.payload;\n },\n setDefaultExpansion: (state, action: PayloadAction<LineageState[\"defaultExpansion\"]>) => {\n state.defaultExpansion = action.payload;\n },\n setSqlLineageDetails: (state, action: PayloadAction<LineageState[\"sqlLineage\"]>) => {\n state.sqlLineage = action.payload;\n },\n setHighlightedNodes: (state, action: PayloadAction<LineageState[\"highlightedNodes\"]>) => {\n state.highlightedNodes = action.payload;\n },\n setSelectedNode: (state, action: PayloadAction<LineageState[\"selectedNode\"]>) => {\n state.selectedNode = action.payload;\n },\n setNodesSavingsPerformance: (\n state,\n action: PayloadAction<LineageState[\"nodeSavingsPerformance\"]>\n ) => {\n state.nodeSavingsPerformance = action.payload;\n },\n setNodesCost: (state, action: PayloadAction<LineageState[\"nodesCost\"]>) => {\n state.nodesCost = action.payload;\n },\n setErrors: (state, action: PayloadAction<LineageState[\"errors\"]>) => {\n state.errors = action.payload;\n },\n setLightdashEnabled: (state, action: PayloadAction<LineageState[\"lightdashEnabled\"]>) => {\n state.lightdashEnabled = action.payload;\n },\n setShowCodeModal: (state, action: PayloadAction<LineageState[\"showCodeModal\"]>) => {\n state.showCodeModal = action.payload;\n },\n setRenderTags: (state, action: PayloadAction<LineageState[\"renderTags\"]>) => {\n state.renderTags = action.payload;\n },\n setConfig: (state, action: PayloadAction<LineageState[\"config\"]>) => {\n state.config = action.payload;\n },\n setClient: (state, action: PayloadAction<LineageState[\"client\"]>) => {\n state.client = action.payload;\n },\n },\n});\n\nexport const {\n setSelectedTable,\n setMoreTables,\n mergeSeeMoreTables,\n setSidebarScreen,\n setSelectedColumn,\n setCollectColumns,\n mergeCollectColumns,\n setConfidence,\n updateConfidenceWithOperatorList,\n setLeftExpansion,\n setRightExpansion,\n setMinRange,\n setNodeCount,\n setSelectCheck,\n setNonSelectCheck,\n setDefaultExpansion,\n setAiEnabled,\n setModalArgs,\n setTheme,\n setLineageType,\n setStaticLineage,\n setAllowSyncColumnsWithDB,\n setSqlLineageDetails,\n setHighlightedNodes,\n setSelectedNode,\n setNodesSavingsPerformance,\n setNodesCost,\n setErrors,\n setLightdashEnabled,\n setShowCodeModal,\n setRenderTags,\n setConfig,\n setClient,\n} = lineageSlice.actions;\nexport default lineageSlice;\n","// value constants\nexport const COLUMNS_SIDEBAR = \"columns\";\nexport const EXPOSURE_SIDEBAR = \"exposure\";\nexport const SNOWFLAKE_STAGE_SIDEBAR = \"snowflake_stage\";\nexport const DASHBOARD_SIDEBAR = \"dashboard\";\nexport const FUNCTION_SIDEBAR = \"function\";\nexport const TABLES_SIDEBAR = \"tables\";\nexport const FEEDBACK_SIDEBAR = \"feedback\";\nexport const HELP_SIDEBAR = \"help\";\nexport const SETTINGS_SIDEBAR = \"settings\";\n\n// react flow prefix for node types\nexport const COLUMN_PREFIX = \"column-\";\nexport const SEE_MORE_PREFIX = \"see-more-\";\n","import { Edge, MarkerType, Node } from \"reactflow\";\nimport { Table } from \"./types\";\nimport React from \"react\";\nimport { COLUMN_PREFIX, SEE_MORE_PREFIX } from \"./constants\";\n\n// config constants\nexport const MAX_EXPAND_TABLE = 5;\n\n// dimensions\nexport const F_OFFSET_X = 100;\nexport const F_OFFSET_Y = 100;\nexport const T_NODE_W = 300;\nexport const T_NODE_H = 80;\nexport const C_OFFSET_X = 12;\nexport const C_OFFSET_Y = T_NODE_H;\nconst C_NODE_H = 30;\nconst C_PADDING_Y = 4;\nexport const T_LEVEL_SEPARATION = 280;\nexport const LEVEL_SEPARATION_VERTICAL = 80;\nexport const T_NODE_Y_SEPARATION = 80;\nexport const T_NODE_Y_SEPARATION_VERTICAL = 250;\n\nexport const DEFAULT_MIN_ZOOM = 0.05;\n// node styles\nconst DEFAULT_COLOR = \"#7A899E\";\nconst HIGHLIGHT_COLOR = \"#E38E00\";\n\nexport const VIEWS_TYPE_COLOR = {\n Original: \"#FDD835\",\n Alias: \"#40C8AE\",\n Transformation: \"#FF754C\",\n Unchanged: \"#BC3FBC\",\n \"Not sure\": \"#247efe\",\n \"Non select\": \"#BC3FBC\",\n};\n\nexport type ViewsTypes = keyof typeof VIEWS_TYPE_COLOR;\n\nexport const defaultEdgeStyle: React.CSSProperties = {\n stroke: DEFAULT_COLOR,\n strokeWidth: 1,\n};\nexport const highlightEdgeStyle: React.CSSProperties = {\n stroke: HIGHLIGHT_COLOR,\n strokeWidth: 2,\n};\nexport const indirectHighlightEdgeStyle: React.CSSProperties = {\n stroke: HIGHLIGHT_COLOR,\n strokeWidth: 1,\n strokeDasharray: 10,\n};\nexport const defaultMarker = {\n type: \"arrow\" as MarkerType,\n strokeWidth: 1,\n width: 24,\n height: 24,\n color: DEFAULT_COLOR,\n};\nexport const highlightMarker = {\n type: \"arrow\" as MarkerType,\n strokeWidth: 1,\n width: 16,\n height: 16,\n color: HIGHLIGHT_COLOR,\n};\n\nexport const isColumn = (x: { id: string }) => x.id.startsWith(COLUMN_PREFIX);\nexport const isSeeMore = (x: { id: string }) => x.id.startsWith(SEE_MORE_PREFIX);\nexport const isNotColumn = (x: { id: string }) => !x.id.startsWith(COLUMN_PREFIX);\n\nexport const createTableEdge = (\n n1Level: number,\n n2Level: number,\n n1: string,\n n2: string,\n right: boolean,\n isVertical = false,\n from = \"\"\n): Edge => {\n const [src, dst] = right ? [n1, n2] : [n2, n1];\n const [sourceHandle, targetHandle] = right\n ? getSourceTargetHandles(n1Level, n2Level, isVertical)\n : getSourceTargetHandles(n2Level, n1Level, isVertical);\n console.log(from); // unused\n return {\n id: `${src}-${dst}`,\n source: src,\n target: dst,\n sourceHandle,\n targetHandle,\n style: defaultEdgeStyle,\n markerEnd: defaultMarker,\n type: n1 === n2 ? \"selfConnecting\" : n1Level === n2Level ? \"smoothstep\" : \"default\",\n // label: from,\n };\n};\n\nexport const createTableNode = (_table: Table, level: number, parent: string): Node => {\n return {\n id: _table.table,\n data: { ..._table, level, parent },\n position: { x: 100, y: 100 },\n type: _table.nodeType === \"dashboard\" ? _table.nodeType : \"table\",\n width: T_NODE_W,\n height: T_NODE_H,\n };\n};\n\nexport const createOpNode = (\n id: string,\n level: number,\n parent: string,\n data: { name?: string; type: string }\n): Node => {\n return {\n id,\n data: { ...data, level, parent, id },\n position: { x: 100, y: 100 },\n type: \"operator\",\n width: T_NODE_W,\n height: T_NODE_H,\n };\n};\n\nexport const createColumnNode = (\n t: string,\n c: string,\n viewsType: ViewsTypes | undefined,\n viewsCode: Record<string, [string, string][]>,\n nodeType: string,\n datatype: string = \"\"\n): Node => {\n return {\n id: getColumnId(t, c),\n data: { column: c, table: t, viewsType, viewsCode, nodeType, datatype },\n parentNode: t,\n extent: \"parent\",\n draggable: false,\n type: \"column\",\n position: { x: 100, y: 100 },\n height: C_NODE_H,\n };\n};\n\nexport type EdgeVisibility = Record<string, boolean>;\n\nexport const createColumnEdge = (\n source: string,\n target: string,\n srcLevel: number,\n dstLevel: number,\n type: string,\n edgeVisibility: EdgeVisibility\n): Edge => {\n const edgeId = getColumnEdgeId(source, target);\n const [sourceHandle, targetHandle] = getSourceTargetHandles(srcLevel, dstLevel, false);\n return {\n id: edgeId,\n data: { type },\n source,\n target,\n sourceHandle,\n targetHandle,\n style: type === \"direct\" ? highlightEdgeStyle : indirectHighlightEdgeStyle,\n zIndex: 1000,\n markerEnd: highlightMarker,\n type: srcLevel === dstLevel ? \"smoothstep\" : \"default\",\n hidden: !edgeVisibility[type],\n };\n};\n\nexport const getColumnEdgeId = (source: string, target: string) =>\n COLUMN_PREFIX + `${source}-${target}`;\n\nexport const applyNodeStyling = (n: Node, highlight: boolean) => {\n n.style = { opacity: highlight ? 1 : 0.5 };\n};\nexport const applyEdgeStyling = (e: Edge, highlight: boolean) => {\n e.style = highlight\n ? e.data?.type === \"indirect\"\n ? indirectHighlightEdgeStyle\n : highlightEdgeStyle\n : defaultEdgeStyle;\n e.markerEnd = highlight ? highlightMarker : defaultMarker;\n};\n\nexport const getSourceTargetHandles = (l0: number, l1: number, isVertical: boolean) => {\n if (isVertical) {\n if (l0 < l1) return [\"bottom\", \"top\"];\n if (l0 > l1) return [\"top\", \"bottom\"];\n if (l0 < 0) return [\"top\", \"top\"];\n return [\"bottom\", \"bottom\"];\n }\n if (l0 < l1) return [\"right\", \"left\"];\n if (l0 > l1) return [\"left\", \"right\"];\n if (l0 < 0) return [\"left\", \"left\"];\n return [\"right\", \"right\"];\n};\n\nexport const getHelperDataForCLL = (nodes: Node[], edges: Edge[]) => {\n const levelMap: Record<string, number> = {};\n nodes.forEach(n => {\n if (isNotColumn(n)) levelMap[n.id] = n.data.level;\n });\n const tableNodes: Record<string, boolean> = {};\n nodes.filter(_n => _n.type === \"table\").forEach(_n => (tableNodes[_n.id] = true));\n const seeMoreIdTableReverseMap: Record<string, string> = {};\n for (const e of edges) {\n if (isColumn(e)) continue;\n const sourceTableExist = tableNodes[e.source];\n const targetTableExist = tableNodes[e.target];\n if (sourceTableExist && targetTableExist) {\n continue;\n }\n if (sourceTableExist) {\n const _n = nodes.find(_n => _n.id === e.target)!;\n _n.data.tables.forEach((_t: { table: string }) => {\n seeMoreIdTableReverseMap[_t.table] = e.target;\n });\n continue;\n }\n if (targetTableExist) {\n const _n = nodes.find(_n => _n.id === e.source)!;\n _n.data.tables.forEach((_t: { table: string }) => {\n seeMoreIdTableReverseMap[_t.table] = e.source;\n });\n }\n }\n\n return { levelMap, tableNodes, seeMoreIdTableReverseMap };\n};\n\nexport const getColumnId = (t: string, c: string) => COLUMN_PREFIX + `${t}/${c}`;\nexport const getSeeMoreId = (t: string, right: boolean) =>\n SEE_MORE_PREFIX + t + \"-\" + (right ? \"1\" : \"0\");\n\nexport const contains = (arr: [string, string][], x: [string, string]) => {\n for (const item of arr) {\n if (item[0] === x[0] && item[1] === x[1]) return true;\n }\n return false;\n};\n\nexport const safeConcat = <T>(obj: Record<string, T[]>, key: string, values: T[]) => {\n obj[key] = obj[key] || [];\n obj[key].push(...values);\n};\n\nexport const getColY = (columnNum: number, tableNum = 1) =>\n columnNum * (C_NODE_H + C_PADDING_Y) + tableNum * C_PADDING_Y;\nexport const withinInclusive = (a: number, b: number) => (v: number) => a <= v && v <= b;\nexport const withinExclusive = (a: number, b: number) => (v: number) => a < v && v < b;\n\nexport const deleteIfExists = <T extends Node | Edge>(arr: T[], id: string) => {\n const index = arr.findIndex(x => x.id === id);\n if (index === -1) return;\n arr.splice(index, 1);\n};\n\nexport const calculateExpand = (minVal: number, maxVal: number, defaultVal: number) => {\n if (minVal === -1) return maxVal;\n if (defaultVal >= maxVal) return maxVal;\n if (defaultVal >= minVal) return defaultVal;\n return minVal;\n};\n\nexport const toggleModelEdges = (edges: Edge[], isVisible: boolean, highlight = true) => {\n edges.forEach(e => {\n if (!isColumn(e)) {\n e.hidden = !isVisible;\n if (highlight) applyEdgeStyling(e, isVisible);\n }\n });\n};\n\nexport const toggleColumnEdges = (edges: Edge[], isVisible: boolean, highlight = true) => {\n edges.forEach(e => {\n if (isColumn(e)) {\n e.hidden = !isVisible;\n if (highlight) applyEdgeStyling(e, isVisible);\n }\n });\n};\n\nexport function findSourcesSinks(edges: [string, string][]) {\n const _inDegree: Record<string, number> = {};\n const _outDegree: Record<string, number> = {};\n edges.forEach(([u, v]) => {\n _inDegree[u] = _inDegree[u] || 0;\n _inDegree[v] = (_inDegree[v] || 0) + 1;\n _outDegree[u] = (_outDegree[u] || 0) + 1;\n _outDegree[v] = _outDegree[v] || 0;\n });\n const sources = Object.keys(_inDegree).filter(k => _inDegree[k] === 0);\n const sinks = Object.keys(_outDegree).filter(k => _outDegree[k] === 0);\n return { sources, sinks };\n}\n\n// Navigation utilities\nexport interface NavigationInfo {\n url?: string;\n id?: string;\n table: string;\n}\n\n/**\n * Helper function to get current table ID from URL (web environment only)\n * Returns undefined in extension environments or if parsing fails\n */\nexport const getCurrentTableId = (): string | undefined => {\n if (typeof window === \"undefined\") return undefined;\n\n try {\n const currentUrl = window.location.href;\n const urlParts = currentUrl.split(\"/\");\n\n for (let i = 0; i < urlParts.length; i++) {\n if (urlParts[i] === \"datasets\" || urlParts[i] === \"dbt_models\") {\n if (i + 1 < urlParts.length) {\n return urlParts[i + 1].split(\"?\")[0];\n }\n }\n }\n } catch (e) {\n console.warn(\"Could not parse current table ID from URL:\", e);\n }\n return undefined;\n};\n\n/**\n * Navigation handler for table details components\n * Handles both direct URLs and ID-based navigation\n * Gracefully degrades in extension environments\n */\nexport const handleTableNavigation = ({ url, id, table }: NavigationInfo): void => {\n if (typeof window === \"undefined\") {\n console.warn(\"Navigation not available in this environment\");\n return;\n }\n\n if (url) {\n window.location.href = url;\n return;\n }\n\n if (id) {\n try {\n const currentUrl = window.location.href;\n const urlParts = currentUrl.split(\"/\");\n\n // Find the base path (datasets or dbt_models)\n for (let i = 0; i < urlParts.length; i++) {\n if (urlParts[i] === \"datasets\" || urlParts[i] === \"dbt_models\") {\n // Replace the ID part with the new id\n if (i + 1 < urlParts.length) {\n const idPart = urlParts[i + 1].split(\"?\");\n const encodedId = urlParts[i] === \"dbt_models\" ? btoa(table) : id;\n urlParts[i + 1] = encodedId + (idPart.length > 1 ? \"?\" + idPart[1] : \"\");\n window.location.href = urlParts.join(\"/\");\n return;\n }\n\n // If no ID is found, add it\n const encodedId = urlParts[i] === \"dbt_models\" ? btoa(table) : id;\n urlParts.splice(i + 1, 0, encodedId);\n window.location.href = urlParts.join(\"/\");\n return;\n }\n }\n\n // If no datasets or dbt_models path is found, default to datasets\n window.location.href = `${window.location.origin}/datasets/${id}?tab=1`;\n } catch (e) {\n console.error(\"Failed to navigate:\", e);\n }\n }\n};\n","// extracted by css-extract-rspack-plugin\nexport default {\"table_node\":\"table_node-HZasbd\",\"tableNode\":\"table_node-HZasbd\",\"header\":\"header-EsFnof\",\"collapse\":\"collapse-kaHZJ2\",\"selected\":\"selected-aXy70D\",\"content\":\"content-bkoNoL\",\"table_header\":\"table_header-h7SLMC\",\"tableHeader\":\"table_header-h7SLMC\",\"seed\":\"seed-Ydi9CF\",\"model\":\"model-SOXlD8\",\"source\":\"source-jFNX0O\",\"exposure\":\"exposure-KWo0IA\",\"snapshot\":\"snapshot-in_UPD\",\"metrics\":\"metrics-xAyaQS\",\"macros\":\"macros-UnHe_G\",\"analysis\":\"analysis-VEMRfe\",\"dashboard\":\"dashboard-bq_grI\",\"function_node\":\"function_node-og3pSu\",\"functionNode\":\"function_node-og3pSu\",\"node_icon\":\"node_icon-GCPtEs\",\"nodeIcon\":\"node_icon-GCPtEs\",\"dialect_icon\":\"dialect_icon-q66s69\",\"dialectIcon\":\"dialect_icon-q66s69\",\"table_handle\":\"table_handle-VNQhFj\",\"tableHandle\":\"table_handle-VNQhFj\",\"see_more_node\":\"see_more_node-ZO0lv_\",\"seeMoreNode\":\"see_more_node-ZO0lv_\",\"table_card\":\"table_card-NQQBnN\",\"tableCard\":\"table_card-NQQBnN\",\"disabled\":\"disabled-Tpd9YG\",\"column_card\":\"column_card-jHEwxl\",\"columnCard\":\"column_card-jHEwxl\",\"edit_icon\":\"edit_icon-TaMt42\",\"editIcon\":\"edit_icon-TaMt42\",\"active\":\"active-HrsGi3\",\"expand_lineage_icon\":\"expand_lineage_icon-VX8baJ\",\"expandLineageIcon\":\"expand_lineage_icon-VX8baJ\",\"processing_div\":\"processing_div-sU7CZh\",\"processingDiv\":\"processing_div-sU7CZh\",\"gif_img\":\"gif_img-C9jw5n\",\"gifImg\":\"gif_img-C9jw5n\",\"card\":\"card-Z7RjN7\",\"column_node\":\"column_node-cZSan4\",\"columnNode\":\"column_node-cZSan4\",\"default\":\"default-NvTGqD\",\"column_name\":\"column_name-eI8nyT\",\"columnName\":\"column_name-eI8nyT\",\"column_top_right\":\"column_top_right-HuJzaQ\",\"columnTopRight\":\"column_top_right-HuJzaQ\",\"divider\":\"divider-PDv5xe\",\"table_details_header\":\"table_details_header-sHSEq1\",\"tableDetailsHeader\":\"table_details_header-sHSEq1\",\"verticle_divider\":\"verticle_divider-a2wwX_\",\"verticleDivider\":\"verticle_divider-a2wwX_\",\"low_confidence\":\"low_confidence-BR7DRM\",\"lowConfidence\":\"low_confidence-BR7DRM\",\"high_confidence\":\"high_confidence-e61FlL\",\"highConfidence\":\"high_confidence-e61FlL\",\"alert_icon\":\"alert_icon-SQQhdn\",\"alertIcon\":\"alert_icon-SQQhdn\",\"menu_card\":\"menu_card-oNPIOq\",\"menuCard\":\"menu_card-oNPIOq\",\"menu_card_container\":\"menu_card_container-JQeVLV\",\"menuCardContainer\":\"menu_card_container-JQeVLV\",\"table_details_tabs\":\"table_details_tabs-zIUxNq\",\"tableDetailsTabs\":\"table_details_tabs-zIUxNq\",\"tab\":\"tab-UFR0vo\",\"table_node_pill\":\"table_node_pill-jHPFnf\",\"tableNodePill\":\"table_node_pill-jHPFnf\",\"icon\":\"icon-vsMnWn\",\"node-checkbox\":\"node-checkbox-AVY0v0\",\"nodeCheckbox\":\"node-checkbox-AVY0v0\",\"non_select_node_checkbox\":\"non_select_node_checkbox-migo1T\",\"nonSelectNodeCheckbox\":\"non_select_node_checkbox-migo1T\",\"select_node_checkbox\":\"select_node_checkbox-Wm4MGe\",\"selectNodeCheckbox\":\"select_node_checkbox-Wm4MGe\",\"node_extra_info\":\"node_extra_info-qk6aaB\",\"nodeExtraInfo\":\"node_extra_info-qk6aaB\",\"help_body\":\"help_body-NH8ylK\",\"helpBody\":\"help_body-NH8ylK\",\"feedback_body\":\"feedback_body-HUrd6c\",\"feedbackBody\":\"feedback_body-HUrd6c\",\"cancel_btn\":\"cancel_btn-C218Iw\",\"cancelBtn\":\"cancel_btn-C218Iw\",\"expand_nav\":\"expand_nav-ATZTAG\",\"expandNav\":\"expand_nav-ATZTAG\",\"expand_nav_btn\":\"expand_nav_btn-holMPO\",\"expandNavBtn\":\"expand_nav_btn-holMPO\",\"column_legend\":\"column_legend-WEW67H\",\"columnLegend\":\"column_legend-WEW67H\",\"dot\":\"dot-Y9ikcu\",\"model_views_type\":\"model_views_type-Y8oeBi\",\"modelViewsType\":\"model_views_type-Y8oeBi\",\"close_button\":\"close_button-tD_u_4\",\"closeButton\":\"close_button-tD_u_4\",\"op_node\":\"op_node-A_hzkb\",\"opNode\":\"op_node-A_hzkb\",\"light_mode\":\"light_mode-JH0Zpb\",\"lightMode\":\"light_mode-JH0Zpb\",\"dark_mode\":\"dark_mode-JhEmfP\",\"darkMode\":\"dark_mode-JhEmfP\",\"highlighted\":\"highlighted-S5Gm1b\",\"cost_data\":\"cost_data-Ust0EF\",\"costData\":\"cost_data-Ust0EF\",\"op_type_text\":\"op_type_text-zT3J7f\",\"opTypeText\":\"op_type_text-zT3J7f\",\"node_stats\":\"node_stats-uZ7tTI\",\"nodeStats\":\"node_stats-uZ7tTI\",\"savings-performance\":\"savings-performance-yvA0hz\",\"savingsPerformance\":\"savings-performance-yvA0hz\",\"performance\":\"performance-ocbi9R\",\"savings\":\"savings-XoEs9e\",\"value\":\"value-U5QTm0\",\"percent\":\"percent-hc11lh\",\"static_table_node\":\"static_table_node-wgYPzr\",\"staticTableNode\":\"static_table_node-wgYPzr\",\"details_btn\":\"details_btn-p_k6sY\",\"detailsBtn\":\"details_btn-p_k6sY\",\"enable\":\"enable-zjV1J8\",\"disable\":\"disable-mMWEBh\",\"code_editor_container\":\"code_editor_container-l8Jz9w\",\"codeEditorContainer\":\"code_editor_container-l8Jz9w\",\"code_editor\":\"code_editor-NCl4Dj\",\"codeEditor\":\"code_editor-NCl4Dj\",\"tooltip_container\":\"tooltip_container-CRWMSg\",\"tooltipContainer\":\"tooltip_container-CRWMSg\",\"tooltip_text\":\"tooltip_text-SYu0GE\",\"tooltipText\":\"tooltip_text-SYu0GE\",\"views_type_badge\":\"views_type_badge-t9r656\",\"viewsTypeBadge\":\"views_type_badge-t9r656\",\"lineage_legend\":\"lineage_legend-EO_VCR\",\"lineageLegend\":\"lineage_legend-EO_VCR\",\"column_code_icon\":\"column_code_icon-U9iaFg\",\"columnCodeIcon\":\"column_code_icon-U9iaFg\",\"edge_select\":\"edge_select-O3X0VW\",\"edgeSelect\":\"edge_select-O3X0VW\",\"edge_non_select\":\"edge_non_select-njevKn\",\"edgeNonSelect\":\"edge_non_select-njevKn\",\"modal_views_code_container\":\"modal_views_code_container-hRDFwN\",\"modalViewsCodeContainer\":\"modal_views_code_container-hRDFwN\",\"custom_node_code_block\":\"custom_node_code_block-kYkJoY\",\"customNodeCodeBlock\":\"custom_node_code_block-kYkJoY\",\"reset_btn\":\"reset_btn-sxy4vp\",\"resetBtn\":\"reset_btn-sxy4vp\",\"error_tooltip\":\"error_tooltip-MEczjk\",\"errorTooltip\":\"error_tooltip-MEczjk\",\"tableWrapper\":\"tableWrapper-bjPDSp\",\"dataTable\":\"dataTable-uBNuzX\"};","import * as React from \"react\";\nconst SvgTests = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" d=\"m14.414 13.795-2.646-1.853a.808.808 0 0 1 .927-1.322l2.645 1.853a.807.807 0 1 1-.926 1.322M6.235 10.767a1.6 1.6 0 0 0 1.137-.472l2.68-2.704a1.55 1.55 0 0 0-.029-2.21 1.61 1.61 0 0 0-2.246.028L6.205 6.994l-.275-.263a1.61 1.61 0 0 0-2.247.03c-.61.619-.596 1.61.032 2.211l1.412 1.352c.299.286.692.443 1.108.443M4.418 7.465a.57.57 0 0 1 .798-.011l.642.614c.202.194.526.19.723-.01l1.93-1.945a.57.57 0 0 1 .797-.01.55.55 0 0 1 .01.785L6.638 9.59a.573.573 0 0 1-.796.01L4.429 8.25a.55.55 0 0 1-.011-.785\" /><path fill=\"currentColor\" d=\"M1.27 8.463a.509.509 0 1 0-1.01.124q.056.46.177.911a6.58 6.58 0 0 0 3.085 4.022 6.58 6.58 0 0 0 5.026.661 6.58 6.58 0 0 0 4.022-3.087 6.58 6.58 0 0 0 .663-5.028 6.63 6.63 0 0 0-8.111-4.682 6.61 6.61 0 0 0-4.76 4.994.509.509 0 1 0 .994.216 5.59 5.59 0 0 1 4.03-4.227A5.61 5.61 0 0 1 12.25 6.33a5.57 5.57 0 0 1-.561 4.255 5.57 5.57 0 0 1-3.404 2.613 5.57 5.57 0 0 1-4.254-.56A5.57 5.57 0 0 1 1.42 9.236a6 6 0 0 1-.15-.772\" /></svg>;\nexport default SvgTests;","import * as React from \"react\";\nconst SvgEphemeral = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 15 15\" {...props}><circle cx={7.5} cy={7.5} r={6.9} stroke=\"currentColor\" strokeWidth={1.2} /><path stroke=\"currentColor\" strokeWidth={0.9} d=\"M7.05 7.5v.45H11c.155 0 .287.064.368.15a.31.31 0 0 1 .082.293A4.05 4.05 0 1 1 6.607 3.55a.31.31 0 0 1 .292.082c.087.08.151.213.151.368z\" /></svg>;\nexport default SvgEphemeral;","import * as React from \"react\";\nconst SvgExternalProject = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={15} height={15} fill=\"none\" viewBox=\"0 0 11 10\" {...props}><g fill=\"#FFCE73\" clipPath=\"url(#external-project_svg__a)\"><path d=\"M8.875 5.274a.39.39 0 0 0-.39.39v1.573a1.147 1.147 0 0 1-1.146 1.145H2.864A1.147 1.147 0 0 1 1.72 7.237V2.763a1.147 1.147 0 0 1 1.145-1.146h1.573a.39.39 0 1 0 0-.781H2.864A1.93 1.93 0 0 0 .938 2.763v4.474a1.93 1.93 0 0 0 1.926 1.927H7.34a1.93 1.93 0 0 0 1.926-1.927V5.665a.39.39 0 0 0-.39-.391\" /><path d=\"M8.866.832H6.438a.39.39 0 0 0-.39.383c-.005.22.18.398.399.398h1.486l-3.11 3.112a.39.39 0 0 0 .552.552l3.112-3.11v1.491a.39.39 0 1 0 .78 0V1.233a.4.4 0 0 0-.4-.401\" /></g><defs><clipPath id=\"external-project_svg__a\"><path fill=\"#fff\" d=\"M.101 0h10v10h-10z\" /></clipPath></defs></svg>;\nexport default SvgExternalProject;","import * as React from \"react\";\nconst SvgBoolean = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 17\" {...props}><path fill=\"currentColor\" d=\"M4.969 9.825V7.14H4V6.5h2.679v.641H5.68v2.684zM6.604 10.485 8.575 6.5h.665l-1.966 3.985zM9.753 9.825V6.5h.713v3.325zm.328-1.32v-.613h1.72v.612zm0-1.364V6.5H12v.641z\" /><circle cx={8} cy={8.5} r={6.5} stroke=\"currentColor\" /></svg>;\nexport default SvgBoolean;","import * as React from \"react\";\nconst SvgText = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 17\" {...props}><path fill=\"currentColor\" d=\"m3 13.3 3.794-9.8h1.54l3.766 9.8h-1.61L8.25 7.392a8 8 0 0 1-.168-.476 26 26 0 0 0-.266-.84l-.28-.84a15 15 0 0 0-.168-.504l.322-.014-.21.602q-.113.365-.252.77a25 25 0 0 1-.462 1.358L4.54 13.3zm1.68-2.436.56-1.456h4.452l.644 1.456z\" /></svg>;\nexport default SvgText;","import * as React from \"react\";\nconst SvgNumber = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 17\" {...props}><path fill=\"currentColor\" d=\"m8.138 13.5 1.68-9.8h1.26l-1.68 9.8zm-4.704-2.422V9.916h8.106v1.162zm.98 2.422 1.68-9.8h1.26l-1.68 9.8zm-.448-6.342V5.996h8.092v1.162z\" /></svg>;\nexport default SvgNumber;","import * as React from \"react\";\nconst SvgObject = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 17\" {...props}><path fill=\"currentColor\" d=\"M3.863 12.5a4 4 0 0 1-.775-.238 1.7 1.7 0 0 1-.537-.352 1.3 1.3 0 0 1-.318-.494 2 2 0 0 1-.096-.652l.008-.837q0-.467-.202-.696-.203-.237-.582-.246H1v-.97h.379q.378-.009.573-.238.193-.228.193-.704l-.008-.837q0-.723.405-1.128.414-.414 1.321-.608l.256.881a3 3 0 0 0-.529.23.64.64 0 0 0-.264.307q-.07.186-.07.511l.017.767q0 .51-.29.855-.283.343-.882.493v-.097q.6.168.881.511.291.344.291.846l-.018.766q0 .309.071.485a.65.65 0 0 0 .264.3q.195.114.529.229zM5.052 12.377V4.535h2.502v1.04H6.18l.053-.07v5.938l-.089-.106h1.41v1.04zM8.436 12.377v-1.04H9.81l-.053.07V5.47l.088.106h-1.41v-1.04h2.503v7.842zM12.137 12.5l-.265-.881q.335-.114.52-.23a.64.64 0 0 0 .264-.308q.089-.184.088-.51l-.017-.767q0-.51.282-.855.29-.343.88-.493l.01.097q-.6-.168-.89-.511a1.3 1.3 0 0 1-.282-.846l.018-.767q0-.316-.08-.493a.66.66 0 0 0-.264-.29 2.6 2.6 0 0 0-.529-.23l.265-.916q.45.088.766.238.326.14.538.352.22.203.317.494.105.282.106.652l-.01.837q0 .466.203.704.203.23.582.238H15v.97h-.379q-.378.008-.572.237-.195.23-.194.705l.008.837q0 .723-.414 1.128-.414.414-1.312.608\" /></svg>;\nexport default SvgObject;","import * as React from \"react\";\nconst SvgDatetime = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 17\" {...props}><path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit={10} d=\"M5.333 1.834v2M10.667 1.834v2M2.333 6.56h11.334M14 11.407v-5.24c0-2-1-3.333-3.333-3.333H5.333C3 2.834 2 4.167 2 6.167v5.667c0 2 1 3.333 3.333 3.333h4.914\" /><path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit={10} d=\"M2 6.595v5.24c0 2 1 3.333 3.333 3.333h5.334C13 15.168 14 13.835 14 11.835V6.168c0-2-1-3.333-3.333-3.333H5.753\" /><path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M10.496 9h.008M10.496 12h.008M5.496 9h.008M5.496 12h.008\" /></svg>;\nexport default SvgDatetime;","import * as React from \"react\";\nconst SvgGeospatial = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 17\" {...props}><path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M13 7.41c0 3.817-5 7.09-5 7.09s-5-3.273-5-7.09c0-1.303.527-2.552 1.464-3.472A5.05 5.05 0 0 1 8 2.5c1.326 0 2.598.517 3.536 1.438A4.86 4.86 0 0 1 13 7.409\" /><path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M8 9.5a2 2 0 1 0 0-4 2 2 0 0 0 0 4\" /></svg>;\nexport default SvgGeospatial;","import * as React from \"react\";\nconst SvgModel = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M2.21 4.094a.5.5 0 0 1 .66-.254L8 6.12l5.13-2.28a.5.5 0 0 1 .407.914l-5.333 2.37a.5.5 0 0 1-.407 0l-5.333-2.37a.5.5 0 0 1-.254-.66\" clipRule=\"evenodd\" /><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M6.714 1.359a3.17 3.17 0 0 1 2.572 0L12.62 2.84a3.17 3.17 0 0 1 1.88 2.894v4.534a3.17 3.17 0 0 1-1.88 2.894l-3.334 1.481a3.17 3.17 0 0 1-2.572 0L3.38 13.162A3.17 3.17 0 0 1 1.5 10.268V5.734c0-1.251.737-2.385 1.88-2.894zm2.166.914a2.17 2.17 0 0 0-1.76 0L3.787 3.754A2.17 2.17 0 0 0 2.5 5.734v4.534c0 .856.504 1.632 1.287 1.98L7.12 13.73c.56.248 1.2.248 1.76 0l3.333-1.482a2.17 2.17 0 0 0 1.287-1.98V5.734c0-.856-.504-1.632-1.287-1.98z\" clipRule=\"evenodd\" /><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M8 6.164a.5.5 0 0 1 .5.5v7.333a.5.5 0 0 1-1 0V6.664a.5.5 0 0 1 .5-.5\" clipRule=\"evenodd\" /></svg>;\nexport default SvgModel;","import * as React from \"react\";\nconst SvgSeed = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" d=\"M13.545 3.322 10.532.469A1.72 1.72 0 0 0 9.351 0H3.613c-.947 0-1.718.772-1.718 1.719V14.28c0 .947.771 1.719 1.718 1.719h8.75c.947 0 1.719-.772 1.719-1.719V4.57c0-.469-.197-.925-.538-1.247m-.91.428h-2.334a.155.155 0 0 1-.156-.156v-2.2zm-.272 11.313h-8.75a.78.78 0 0 1-.781-.782V1.72c0-.431.35-.782.781-.782h5.594v2.657c0 .603.49 1.094 1.094 1.094h2.844v9.593c0 .431-.35.781-.782.781\" /><path fill=\"currentColor\" d=\"M11.332 6.25H4.457a.468.468 0 1 0 0 .938h6.875a.468.468 0 1 0 0-.938M11.332 8.75H4.457a.468.468 0 1 0 0 .938h6.875a.468.468 0 1 0 0-.938M6.729 11.25H4.457a.468.468 0 1 0 0 .938h2.272a.468.468 0 1 0 0-.938\" /></svg>;\nexport default SvgSeed;","import * as React from \"react\";\nconst SvgSource = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" d=\"M14.946 3.202c-.016-.856-.8-1.617-2.214-2.142C11.465.59 9.787.328 8.014.328c-1.777 0-3.452.261-4.722.732-1.414.525-2.2 1.29-2.214 2.145v9.883c0 .87.787 1.637 2.214 2.17 1.27.473 2.945.73 4.722.73 1.776 0 3.451-.26 4.721-.73 1.427-.53 2.214-1.3 2.214-2.17v-9.86q-.004-.012-.003-.026m-1.019 9.887c0 .767-2.305 1.88-5.917 1.88s-5.916-1.113-5.916-1.88v-1.714a5.7 5.7 0 0 0 1.195.597c1.273.47 2.948.732 4.725.732s3.454-.262 4.721-.732q.705-.264 1.195-.597v1.714zm0-3.301V9.8c0 .767-2.305 1.88-5.917 1.88s-5.916-1.113-5.916-1.88V8.086q.49.334 1.195.598c1.27.474 2.945.731 4.721.731s3.452-.26 4.722-.731q.706-.262 1.195-.598zm0-3.285v.013c0 .767-2.305 1.88-5.917 1.88s-5.916-1.113-5.916-1.88V4.802q.49.333 1.195.594c1.27.473 2.945.731 4.721.731s3.452-.26 4.722-.731a5.7 5.7 0 0 0 1.195-.594zM8.014 5.109c-3.612 0-5.917-1.114-5.917-1.881 0-.768 2.305-1.881 5.917-1.881s5.916 1.113 5.916 1.88c-.003.768-2.305 1.882-5.916 1.882\" /></svg>;\nexport default SvgSource;","import * as React from \"react\";\nconst SvgExposure = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" d=\"M14.487 5.369a7 7 0 1 1-3.744-3.81.413.413 0 0 1-.008.762.4.4 0 0 1-.315-.004 6.2 6.2 0 0 0-2.009-.467v.39a.412.412 0 0 1-.823 0v-.39a6 6 0 0 0-3.65 1.51l.273.28a.412.412 0 0 1-.576.576l-.28-.275a6.04 6.04 0 0 0-1.512 3.651h.392a.412.412 0 1 1 0 .824h-.392a6.03 6.03 0 0 0 1.512 3.65l.28-.274a.411.411 0 0 1 .576.576l-.277.278a6 6 0 0 0 3.654 1.512v-.39a.412.412 0 1 1 .823 0v.39a6 6 0 0 0 3.651-1.51l-.274-.28a.411.411 0 0 1 .576-.576l.278.278a6.02 6.02 0 0 0 1.514-3.654h-.392a.412.412 0 1 1 0-.824h.392a6.1 6.1 0 0 0-.432-1.912.412.412 0 1 1 .763-.31zm-5.353.918L12.65 2.77a.412.412 0 1 1 .583.583L9.716 6.869A2.059 2.059 0 1 1 8 5.945c.403 0 .797.12 1.133.343zm.1 1.717a1.235 1.235 0 1 0-2.47 0 1.235 1.235 0 0 0 2.47 0\" /></svg>;\nexport default SvgExposure;","import * as React from \"react\";\nconst SvgAnalysis = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 28 28\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M3.66 10.03 7.84 6.41a1.5 1.5 0 0 1-.09-.502c0-.807.661-1.46 1.476-1.46s1.45.628 1.474 1.414l3.303 1.145c.27-.315.673-.514 1.123-.514.254 0 .493.063.701.175l3.807-3.22a1.4 1.4 0 0 1-.083-.486c0-.807.66-1.461 1.475-1.461s1.475.654 1.475 1.46c0 .808-.66 1.461-1.475 1.461-.254 0-.493-.063-.701-.175l-3.807 3.221q.082.229.083.485c0 .807-.66 1.461-1.475 1.461s-1.45-.63-1.474-1.414l-3.302-1.145c-.27.314-.674.514-1.124.514-.248 0-.481-.061-.686-.168l-4.178 3.622q.088.235.09.502c0 .807-.661 1.46-1.476 1.46a1.47 1.47 0 0 1-1.475-1.46c0-.807.66-1.461 1.475-1.461.248 0 .481.06.686.168m16.242-2.724a.664.664 0 0 0-.666.66v13.46c0 .364.3.66.666.66h.913a.664.664 0 0 0 .666-.66V7.967c0-.364-.3-.66-.666-.66zm-5.9 5.38a.664.664 0 0 0-.666.66v8.219c0 .363.3.66.666.66h.913a.664.664 0 0 0 .666-.66v-8.22c0-.363-.3-.66-.666-.66zm-5.9-1.932a.664.664 0 0 0-.666.66v10.289c0 .363.3.66.666.66h.913a.664.664 0 0 0 .666-.66v-10.29c0-.363-.3-.66-.666-.66zm-5.9 5.678h.913c.367 0 .666.296.666.659v4.75c0 .363-.3.659-.666.659h-.913a.664.664 0 0 1-.666-.66v-4.749c0-.363.3-.66.666-.66\" clipRule=\"evenodd\" /></svg>;\nexport default SvgAnalysis;","import * as React from \"react\";\nconst SvgSnapshot = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" d=\"M13.674 3.5h-2.147l-.25-.75A1.82 1.82 0 0 0 9.545 1.5h-3.09a1.82 1.82 0 0 0-1.732 1.25l-.25.75H2.326A1.83 1.83 0 0 0 .5 5.326v7.35A1.83 1.83 0 0 0 2.326 14.5h11.35a1.83 1.83 0 0 0 1.824-1.826v-7.35A1.83 1.83 0 0 0 13.674 3.5m.826 9.174a.827.827 0 0 1-.826.826H2.326a.827.827 0 0 1-.826-.826v-7.35a.827.827 0 0 1 .826-.824h2.508a.5.5 0 0 0 .474-.342l.364-1.094a.825.825 0 0 1 .784-.564h3.088a.825.825 0 0 1 .784.565l.365 1.093a.5.5 0 0 0 .473.342h2.508a.827.827 0 0 1 .826.826z\" /><path fill=\"currentColor\" d=\"M8 5a3.75 3.75 0 1 0 0 7.5A3.75 3.75 0 0 0 8 5m0 6.5A2.75 2.75 0 1 1 8 6a2.75 2.75 0 0 1 0 5.5M13 6.5a.5.5 0 1 0 0-1 .5.5 0 0 0 0 1\" /></svg>;\nexport default SvgSnapshot;","import * as React from \"react\";\nconst SvgMetrics = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><g clipPath=\"url(#metrics_svg__a)\"><mask id=\"metrics_svg__b\" width={16} height={16} x={0} y={0} maskUnits=\"userSpaceOnUse\" style={{\n maskType: \"luminance\"\n }}><path fill=\"#fff\" d=\"M0 0h16v16H0z\" /></mask><g stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit={10} strokeWidth={0.8} mask=\"url(#metrics_svg__b)\"><path d=\"M.469 15.531H15.53M3 11.781H1.75a.313.313 0 0 0-.312.313v3.437h1.875v-3.437A.313.313 0 0 0 3 11.78M6.75 10.656H5.5a.313.313 0 0 0-.312.313v4.562h1.875V10.97a.313.313 0 0 0-.313-.313M10.5 8.938H9.25a.31.31 0 0 0-.312.312v6.281h1.874V9.25a.31.31 0 0 0-.312-.312M14.25 5.813H13a.31.31 0 0 0-.312.312v9.406h1.874V6.125a.31.31 0 0 0-.312-.312M.469 9.602c6.157 0 12.314-4.707 14.295-9.135\" /><path d=\"M11.9 1.239 14.763.47l.768 2.865\" /></g></g><defs><clipPath id=\"metrics_svg__a\"><path fill=\"#fff\" d=\"M0 0h16v16H0z\" /></clipPath></defs></svg>;\nexport default SvgMetrics;","import * as React from \"react\";\nconst SvgMacros = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><g fill=\"currentColor\" clipPath=\"url(#macros_svg__a)\"><path d=\"m14.939 11.357-2.626-1.474 2.626-1.474a.47.47 0 0 0 0-.818l-2.626-1.474 2.626-1.474a.469.469 0 0 0 0-.817L8.229.06a.47.47 0 0 0-.458 0L1.06 3.826a.47.47 0 0 0 0 .817l2.627 1.474L1.06 7.591a.47.47 0 0 0 0 .818l2.627 1.474-2.627 1.474a.469.469 0 0 0 0 .817l6.71 3.766c.142.08.316.08.458 0l6.71-3.766a.47.47 0 0 0 0-.817M8 1.007l5.752 3.227L8 7.462 2.248 4.234zM4.645 6.654l3.126 1.754c.142.08.316.08.459 0l3.125-1.754L13.752 8 8 11.228 2.248 8zM8 14.994l-5.752-3.228 2.397-1.346 3.126 1.754c.142.08.316.08.458 0l3.126-1.754 2.397 1.346z\" /><path d=\"M8 10.148a.469.469 0 1 0 0-.937.469.469 0 0 0 0 .937M6.283 9.25a.469.469 0 1 0 0-.937.469.469 0 0 0 0 .937M4.567 8.39a.469.469 0 1 0 0-.937.469.469 0 0 0 0 .938M9.717 9.25a.469.469 0 1 0 0-.937.469.469 0 0 0 0 .937M11.433 8.39a.469.469 0 1 0 0-.937.469.469 0 0 0 0 .938\" /></g><defs><clipPath id=\"macros_svg__a\"><path fill=\"#fff\" d=\"M0 0h16v16H0z\" /></clipPath></defs></svg>;\nexport default SvgMacros;","import * as React from \"react\";\nconst SvgChevronUp = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={11} height={6} fill=\"none\" viewBox=\"0 0 11 6\" {...props}><path fill=\"currentColor\" d=\"M.813 5.52a.5.5 0 0 0 .651.049l.056-.049 4.313-4.313 4.313 4.313a.5.5 0 0 0 .651.049l.056-.049a.5.5 0 0 0 .049-.65l-.049-.057L6.187.146a.5.5 0 0 0-.651-.048L5.48.146.813 4.813a.5.5 0 0 0 0 .707\" /></svg>;\nexport default SvgChevronUp;","import * as React from \"react\";\nconst SvgChevronDown = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={11} height={6} fill=\"none\" viewBox=\"0 0 11 6\" {...props}><path fill=\"currentColor\" d=\"M.813.48A.5.5 0 0 1 1.464.43L1.52.48l4.313 4.313L10.146.48a.5.5 0 0 1 .651-.049l.056.049a.5.5 0 0 1 .049.65l-.049.057-4.666 4.667a.5.5 0 0 1-.651.048l-.056-.048L.813 1.187a.5.5 0 0 1 0-.707\" /></svg>;\nexport default SvgChevronDown;","import * as React from \"react\";\nconst SvgXClose = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={16} height={16} fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"m12 4-8 8m0-8 8 8\" /></svg>;\nexport default SvgXClose;","import * as React from \"react\";\nconst SvgExpandLineage = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 10 10\" {...props}><g clipPath=\"url(#expand-lineage_svg__a)\"><path fill=\"#fff\" d=\"M6.468 1.25v.417H4.169a.21.21 0 0 0-.209.208v2.917H2.498v-.417a.624.624 0 0 0-.627-.625H.826a.63.63 0 0 0-.627.625v1.25a.624.624 0 0 0 .627.625h1.045a.63.63 0 0 0 .627-.625v-.417H3.96v2.917a.21.21 0 0 0 .21.208h2.298v.417a.624.624 0 0 0 .627.625h1.044a.63.63 0 0 0 .627-.625V7.5a.624.624 0 0 0-.627-.625H7.095a.63.63 0 0 0-.627.625v.417h-2.09V5.208h2.09v.417a.624.624 0 0 0 .627.625h1.044a.63.63 0 0 0 .627-.625v-1.25a.624.624 0 0 0-.627-.625H7.095a.63.63 0 0 0-.627.625v.417h-2.09V2.083h2.09V2.5a.624.624 0 0 0 .627.625h1.044a.63.63 0 0 0 .627-.625V1.25A.624.624 0 0 0 8.14.625H7.095a.63.63 0 0 0-.627.625M1.87 5.833H.826a.21.21 0 0 1-.209-.208v-1.25a.21.21 0 0 1 .21-.208H1.87a.21.21 0 0 1 .209.208v1.25a.21.21 0 0 1-.21.208m5.224 1.459h1.044a.21.21 0 0 1 .21.208v1.25a.21.21 0 0 1-.21.208H7.095a.21.21 0 0 1-.21-.208V7.5a.21.21 0 0 1 .21-.208m0-3.125h1.044a.21.21 0 0 1 .21.208v1.25a.21.21 0 0 1-.21.208H7.095a.21.21 0 0 1-.21-.208v-1.25a.21.21 0 0 1 .21-.208m1.044-3.125a.21.21 0 0 1 .21.208V2.5a.21.21 0 0 1-.21.208H7.095a.21.21 0 0 1-.21-.208V1.25a.21.21 0 0 1 .21-.208z\" /></g><defs><clipPath id=\"expand-lineage_svg__a\"><path fill=\"#fff\" d=\"M0 10V0h10v10z\" /></clipPath></defs></svg>;\nexport default SvgExpandLineage;","import * as React from \"react\";\nconst SvgThumbsup = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={32} height={32} fill=\"none\" viewBox=\"0 0 32 32\" {...props}><rect width={31} height={31} x={-0.5} y={0.5} stroke=\"#8390A3\" rx={4.5} transform=\"matrix(-1 0 0 1 31 0)\" /><path stroke=\"#8390A3\" d=\"m16.038 8.913-.002-.003c-.11-.165-.325-.336-.604-.434a1.2 1.2 0 0 0-.813-.015l-.007.003-.008.003c-.589.198-.973.874-.854 1.43l.003.012.002.014.433 2.725.002.012c.051.383-.052.746-.282 1.03l-.008.01-.008.01c-.232.26-.574.424-.948.424H9.52c-.523 0-.925.21-1.15.523-.208.296-.267.705-.103 1.17l.003.01 2.05 6.241.006.018.005.017c.198.795 1.11 1.496 2.014 1.496h3.25c.229 0 .516-.04.782-.12.277-.082.47-.189.565-.283l.022-.023.025-.02 1.067-.824c.288-.224.456-.562.456-.921V12.95a1.2 1.2 0 0 0-.2-.656zM22.519 11.826h-.859c-.6 0-.894.12-1.048.266-.147.14-.268.404-.268.96v8.383c0 .56.121.826.269.967.153.146.448.266 1.047.266h.859c.6 0 .894-.12 1.047-.266.148-.14.27-.407.27-.967V13.06c0-.56-.122-.827-.27-.968-.153-.146-.448-.266-1.047-.266Z\" /></svg>;\nexport default SvgThumbsup;","import * as React from \"react\";\nconst SvgThumbsdown = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={32} height={32} fill=\"none\" viewBox=\"0 0 32 32\" {...props}><rect width={31} height={31} x={0.5} y={-0.5} stroke=\"#8390A3\" rx={4.5} transform=\"matrix(1 0 0 -1 0 31)\" /><path stroke=\"#8390A3\" strokeMiterlimit={10} strokeWidth={1.2} d=\"m12.233 10.708 2.584-2c.333-.333 1.083-.5 1.583-.5h3.167c1 0 2.083.75 2.333 1.75l2 6.084c.417 1.166-.333 2.166-1.583 2.166h-3.334c-.5 0-.916.417-.833 1l.417 2.667c.166.75-.334 1.583-1.084 1.833-.666.25-1.5-.083-1.833-.583l-3.417-5.083\" /><path stroke=\"#8390A3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.2} d=\"M7.983 10.708v8.167c0 1.167.5 1.583 1.667 1.583h.833c1.167 0 1.667-.416 1.667-1.583v-8.167c0-1.166-.5-1.583-1.667-1.583H9.65c-1.167 0-1.667.417-1.667 1.583\" /></svg>;\nexport default SvgThumbsdown;","import * as React from \"react\";\nconst SvgThumbsupSelected = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={32} height={32} fill=\"none\" viewBox=\"0 0 32 32\" {...props}><rect width={32} height={32} fill=\"#3F8CFF\" rx={5} transform=\"matrix(-1 0 0 1 32 0)\" /><path fill=\"#fff\" d=\"M19.011 21.418V12.95c0-.333-.1-.658-.283-.933l-2.275-3.384c-.359-.541-1.25-.925-2.009-.641-.816.275-1.358 1.191-1.183 2.008l.433 2.725a.84.84 0 0 1-.175.65.78.78 0 0 1-.575.258H9.52c-.658 0-1.225.267-1.558.734-.317.45-.375 1.033-.167 1.625l2.05 6.241c.259 1.034 1.384 1.875 2.5 1.875h3.25c.559 0 1.342-.191 1.7-.55l1.067-.825c.408-.316.65-.8.65-1.316M21.66 11.326h.859c1.291 0 1.816.5 1.816 1.734v8.375c0 1.233-.525 1.733-1.816 1.733h-.859c-1.291 0-1.816-.5-1.816-1.733V13.05c0-1.225.525-1.725 1.816-1.725\" /></svg>;\nexport default SvgThumbsupSelected;","import * as React from \"react\";\nconst SvgThumbsdownSelected = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={32} height={32} fill=\"none\" viewBox=\"0 0 32 32\" {...props}><rect width={31} height={31} x={0.5} y={-0.5} fill=\"#247EFE\" stroke=\"#247EFE\" rx={4.5} transform=\"matrix(1 0 0 -1 0 31)\" /><path fill=\"#fff\" d=\"m12.233 10.708 2.584-2c.333-.333 1.083-.5 1.583-.5h3.167c1 0 2.083.75 2.333 1.75l2 6.084c.417 1.166-.333 2.166-1.583 2.166h-3.334c-.5 0-.916.417-.833 1l.417 2.667c.166.75-.334 1.583-1.084 1.833-.666.25-1.5-.083-1.833-.583l-3.417-5.083\" /><path fill=\"#fff\" stroke=\"#247EFE\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.2} d=\"M7.983 10.708v8.167c0 1.167.5 1.583 1.667 1.583h.833c1.167 0 1.667-.416 1.667-1.583v-8.167c0-1.166-.5-1.583-1.667-1.583H9.65c-1.167 0-1.667.417-1.667 1.583\" /></svg>;\nexport default SvgThumbsdownSelected;","import * as React from \"react\";\nconst SvgExpand = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={16} height={16} fill=\"none\" viewBox=\"0 0 16 16\" {...props}><g clipPath=\"url(#expand_svg__a)\"><mask id=\"expand_svg__b\" width={16} height={16} x={0} y={0} maskUnits=\"userSpaceOnUse\" style={{\n maskType: \"luminance\"\n }}><path fill=\"#fff\" d=\"M16 0H0v16h16z\" /></mask><g fill=\"currentColor\" mask=\"url(#expand_svg__b)\"><path d=\"M13.581 0A2.384 2.384 0 0 0 11.2 2.381a2.384 2.384 0 0 0 2.381 2.38 2.384 2.384 0 0 0 2.38-2.38A2.384 2.384 0 0 0 13.582 0m0 3.968a1.59 1.59 0 0 1-1.587-1.587A1.59 1.59 0 0 1 13.58.794a1.59 1.59 0 0 1 1.587 1.587 1.59 1.59 0 0 1-1.587 1.587M13.581 11.2a2.384 2.384 0 0 0-2.381 2.38 2.384 2.384 0 0 0 2.381 2.381 2.384 2.384 0 0 0 2.38-2.38 2.384 2.384 0 0 0-2.38-2.382m0 3.968a1.59 1.59 0 0 1-1.587-1.588c0-.875.712-1.587 1.587-1.587a1.59 1.59 0 0 1 1.587 1.587 1.59 1.59 0 0 1-1.587 1.588M2.381 0A2.384 2.384 0 0 0 0 2.381a2.384 2.384 0 0 0 2.381 2.38 2.384 2.384 0 0 0 2.38-2.38A2.384 2.384 0 0 0 2.382 0m0 3.968A1.59 1.59 0 0 1 .794 2.381 1.59 1.59 0 0 1 2.38.794 1.59 1.59 0 0 1 3.968 2.38a1.59 1.59 0 0 1-1.587 1.587M2.381 11.2A2.384 2.384 0 0 0 0 13.58a2.384 2.384 0 0 0 2.381 2.381 2.384 2.384 0 0 0 2.38-2.38 2.384 2.384 0 0 0-2.38-2.382m0 3.968A1.59 1.59 0 0 1 .794 13.58a1.59 1.59 0 0 1 1.587-1.587 1.59 1.59 0 0 1 1.587 1.587 1.59 1.59 0 0 1-1.587 1.588\" /><path d=\"M4.155 12.645 12.64 4.16l-.905-.905L3.25 11.74z\" /><path d=\"m3.25 4.16 8.485 8.485.905-.906-8.485-8.485z\" /><path d=\"M7.977 10.833a2.857 2.857 0 1 0 0-5.714 2.857 2.857 0 0 0 0 5.714\" /></g></g><defs><clipPath id=\"expand_svg__a\"><path fill=\"#fff\" d=\"M0 0h16v16H0z\" /></clipPath></defs></svg>;\nexport default SvgExpand;","import * as React from \"react\";\nconst SvgArrowLeftDouble = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={16} height={16} fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" d=\"M7.951 12.344a.48.48 0 0 0 .047-.626l-.047-.054L3.807 7.52l4.144-4.144a.48.48 0 0 0 .047-.625l-.047-.054a.48.48 0 0 0-.625-.047l-.054.047L2.788 7.18a.48.48 0 0 0-.047.625l.047.054 4.484 4.484a.48.48 0 0 0 .68 0\" /><path fill=\"currentColor\" d=\"M12.343 12.344a.48.48 0 0 0 .047-.626l-.047-.054L8.2 7.52l4.144-4.144a.48.48 0 0 0 .047-.625l-.047-.054a.48.48 0 0 0-.625-.047l-.054.047L7.18 7.18a.48.48 0 0 0-.046.625l.046.054 4.484 4.484a.48.48 0 0 0 .68 0\" /></svg>;\nexport default SvgArrowLeftDouble;","import * as React from \"react\";\nconst SvgArrowRightDouble = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={16} height={16} fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" d=\"M8.049 12.344a.48.48 0 0 1-.047-.626l.047-.054 4.144-4.144-4.144-4.144a.48.48 0 0 1-.047-.625l.047-.054a.48.48 0 0 1 .625-.047l.054.047 4.484 4.484a.48.48 0 0 1 .047.625l-.047.054-4.484 4.484a.48.48 0 0 1-.68 0\" /><path fill=\"currentColor\" d=\"M3.657 12.344a.48.48 0 0 1-.047-.626l.047-.054L7.8 7.52 3.657 3.376a.48.48 0 0 1-.047-.625l.047-.054a.48.48 0 0 1 .625-.047l.054.047L8.82 7.18a.48.48 0 0 1 .046.625l-.046.054-4.484 4.484a.48.48 0 0 1-.68 0\" /></svg>;\nexport default SvgArrowRightDouble;","import * as React from \"react\";\nconst SvgArrowLeft = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={17} height={16} fill=\"none\" viewBox=\"0 0 17 16\" {...props}><path fill=\"currentColor\" d=\"M10.834 3.11a.48.48 0 0 1 .046.625l-.046.054L6.69 7.933l4.144 4.144a.48.48 0 0 1 .046.626l-.046.053a.48.48 0 0 1-.626.047l-.054-.047L5.67 8.273a.48.48 0 0 1-.046-.626l.046-.054 4.484-4.484a.48.48 0 0 1 .68 0\" /></svg>;\nexport default SvgArrowLeft;","import * as React from \"react\";\nconst SvgArrowRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={17} height={16} fill=\"none\" viewBox=\"0 0 17 16\" {...props}><path fill=\"currentColor\" d=\"M6.166 3.11a.48.48 0 0 0-.046.625l.046.054 4.144 4.144-4.144 4.144a.48.48 0 0 0-.046.626l.046.053a.48.48 0 0 0 .626.047l.054-.047 4.484-4.483a.48.48 0 0 0 .046-.626l-.046-.054L6.846 3.11a.48.48 0 0 0-.68 0\" /></svg>;\nexport default SvgArrowRight;","import * as React from \"react\";\nconst SvgDbtNodeMetricsDark = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"#4D4F3B\" rx={5} /><mask id=\"dbt_node_metrics_dark_svg__a\" width={14} height={14} x={11} y={7} maskUnits=\"userSpaceOnUse\" style={{\n maskType: \"luminance\"\n }}><path fill=\"#fff\" d=\"M11 7h14v14H11z\" /></mask><g stroke=\"#FFF200\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit={10} strokeWidth={0.8} mask=\"url(#dbt_node_metrics_dark_svg__a)\"><path d=\"M11.41 20.59h13.18M13.625 17.309h-1.094a.273.273 0 0 0-.273.273v3.008h1.64v-3.008a.273.273 0 0 0-.273-.273M16.906 16.324h-1.093a.273.273 0 0 0-.274.274v3.992h1.64v-3.992a.273.273 0 0 0-.273-.274M20.188 14.82h-1.094a.273.273 0 0 0-.274.274v5.496h1.64v-5.496a.273.273 0 0 0-.273-.274M23.469 12.086h-1.094a.273.273 0 0 0-.273.273v8.23h1.64v-8.23a.273.273 0 0 0-.273-.273M11.41 15.402c5.387 0 10.775-4.118 12.508-7.992\" /><path d=\"m21.412 8.083 2.507-.672.671 2.507\" /></g><path fill=\"#FFF200\" d=\"M12.771 28v-4.2h.738l1.53 2.49-.432-.006 1.548-2.484h.702V28h-.774v-1.578q0-.54.024-.972.03-.432.096-.858l.096.258-1.302 2.01h-.396l-1.26-1.992.084-.276q.066.402.09.828.03.42.03 1.002V28zm5.215 0v-4.2h2.748v.708h-1.98v2.784h2.004V28zm.36-1.8v-.696h2.082v.696zm4.23 1.8v-3.48h-1.2v-.72h3.216v.72h-1.236V28z\" /></svg>;\nexport default SvgDbtNodeMetricsDark;","import * as React from \"react\";\nconst SvgDbtNodeCte = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"currentColor\" rx={5} /><path fill=\"#E7A427\" d=\"M24.167 22H11.833C10.822 22 10 21.16 10 20.125V8.875C10 7.841 10.822 7 11.833 7h12.334C25.178 7 26 7.84 26 8.875v11.25C26 21.16 25.178 22 24.167 22M11.833 8.023a.844.844 0 0 0-.833.852v11.25c0 .47.374.852.833.852h12.334c.459 0 .833-.382.833-.852V8.875a.844.844 0 0 0-.833-.852z\" /><path fill=\"#E7A427\" d=\"M25.5 12h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1M25.5 15.5h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1M25.5 19h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1\" /><path fill=\"#E7A427\" d=\"M14 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 14 22M18 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 18 22M22 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 22 22M20.55 29v-4.2h2.748v.709h-1.98v2.784h2.004V29zm.36-1.8v-.695h2.082v.696zM17.77 29v-3.48h-1.2v-.72h3.215v.72H18.55V29zM14.61 29.06q-.456 0-.834-.156a1.9 1.9 0 0 1-.654-.444 2.2 2.2 0 0 1-.432-.69q-.15-.402-.15-.876 0-.456.162-.846a2.1 2.1 0 0 1 .45-.684q.288-.294.672-.456a2.12 2.12 0 0 1 1.428-.072q.288.09.528.252.24.156.402.366l-.498.546a1.8 1.8 0 0 0-.324-.27 1.2 1.2 0 0 0-.342-.168 1.1 1.1 0 0 0-.36-.06 1.4 1.4 0 0 0-.522.102q-.24.102-.42.288a1.4 1.4 0 0 0-.276.444 1.5 1.5 0 0 0-.102.564q0 .318.096.576.102.258.282.444.186.186.438.288.258.096.564.096a1.37 1.37 0 0 0 .726-.204 1.7 1.7 0 0 0 .294-.234l.384.618a1.4 1.4 0 0 1-.384.294 2.34 2.34 0 0 1-1.128.282\" /></svg>;\nexport default SvgDbtNodeCte;","import * as React from \"react\";\nconst SvgDbtNodeSubqueryLight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"#FDF6EA\" rx={5} /><path fill=\"#E7A427\" d=\"M24.167 22H11.833C10.822 22 10 21.16 10 20.125V8.875C10 7.841 10.822 7 11.833 7h12.334C25.178 7 26 7.84 26 8.875v11.25C26 21.16 25.178 22 24.167 22M11.833 8.023a.844.844 0 0 0-.833.852v11.25c0 .47.374.852.833.852h12.334c.459 0 .833-.382.833-.852V8.875a.844.844 0 0 0-.833-.852z\" /><path fill=\"#E7A427\" d=\"M25.5 12h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1M25.5 15.5h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1M25.5 19h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1\" /><path fill=\"#E7A427\" d=\"M14 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 14 22M18 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 18 22M22 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 22 22M13.491 29a2 2 0 0 1-.598-.083 1.7 1.7 0 0 1-.498-.25 2 2 0 0 1-.395-.423l.418-.472q.277.39.531.54.255.15.604.15.215 0 .39-.068a.7.7 0 0 0 .277-.183.4.4 0 0 0 .102-.267.5.5 0 0 0-.034-.188.45.45 0 0 0-.107-.162.7.7 0 0 0-.181-.133 1.2 1.2 0 0 0-.255-.105 2 2 0 0 0-.338-.084 2.6 2.6 0 0 1-.531-.16 1.3 1.3 0 0 1-.379-.25 1 1 0 0 1-.226-.34 1.2 1.2 0 0 1-.073-.433q0-.234.101-.433.108-.201.289-.345.186-.15.435-.228a1.7 1.7 0 0 1 .536-.083q.306 0 .56.078a1.37 1.37 0 0 1 .779.605l-.43.417a1.3 1.3 0 0 0-.254-.306.9.9 0 0 0-.31-.188 1 1 0 0 0-.362-.067q-.22 0-.384.067a.6.6 0 0 0-.26.188.44.44 0 0 0-.09.278q0 .117.045.217.045.094.136.172.095.072.254.133.158.055.378.1.31.067.554.173.244.1.412.239a.9.9 0 0 1 .254.31q.09.174.09.373 0 .372-.174.644a1.15 1.15 0 0 1-.497.423q-.322.144-.769.144M17.333 28.978a1.7 1.7 0 0 1-.82-.195 1.5 1.5 0 0 1-.57-.544 1.54 1.54 0 0 1-.203-.789v-2.4h.61v2.35q0 .284.135.511.136.222.356.356a.95.95 0 0 0 .492.133 1.016 1.016 0 0 0 .876-.489 1 1 0 0 0 .135-.511v-2.35h.582v2.4q0 .44-.21.789-.203.345-.564.544-.361.195-.82.195M19.978 28.944v-3.888h1.65q.377 0 .638.11a.8.8 0 0 1 .39.334q.135.216.135.533t-.18.54a.9.9 0 0 1-.492.305v-.111q.265.055.463.2.198.138.305.35.113.21.113.483 0 .278-.09.494a.9.9 0 0 1-.26.356q-.169.144-.413.222a2 2 0 0 1-.553.072zm.61-.577h1.062q.231 0 .39-.067a.53.53 0 0 0 .248-.194.55.55 0 0 0 .09-.317.46.46 0 0 0-.095-.295.54.54 0 0 0-.26-.183 1.1 1.1 0 0 0-.401-.067h-1.034zm0-1.7h1.005a.65.65 0 0 0 .3-.067.5.5 0 0 0 .288-.45.46.46 0 0 0-.17-.383q-.169-.134-.485-.134h-.938z\" /></svg>;\nexport default SvgDbtNodeSubqueryLight;","import * as React from \"react\";\nconst SvgDbtNodeSubqueryDark = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"#4B473F\" rx={5} /><path fill=\"#E7A427\" d=\"M24.167 22H11.833C10.822 22 10 21.16 10 20.125V8.875C10 7.841 10.822 7 11.833 7h12.334C25.178 7 26 7.84 26 8.875v11.25C26 21.16 25.178 22 24.167 22M11.833 8.023a.844.844 0 0 0-.833.852v11.25c0 .47.374.852.833.852h12.334c.459 0 .833-.382.833-.852V8.875a.844.844 0 0 0-.833-.852z\" /><path fill=\"#E7A427\" d=\"M25.5 12h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1M25.5 15.5h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1M25.5 19h-15a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1\" /><path fill=\"#E7A427\" d=\"M14 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 14 22M18 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 18 22M22 22a.51.51 0 0 1-.5-.516v-9.968c0-.285.224-.516.5-.516s.5.231.5.516v9.968A.51.51 0 0 1 22 22M13.491 29a2 2 0 0 1-.598-.083 1.7 1.7 0 0 1-.498-.25 2 2 0 0 1-.395-.423l.418-.472q.277.39.531.54.255.15.604.15.215 0 .39-.068a.7.7 0 0 0 .277-.183.4.4 0 0 0 .102-.267.5.5 0 0 0-.034-.188.45.45 0 0 0-.107-.162.7.7 0 0 0-.181-.133 1.2 1.2 0 0 0-.255-.105 2 2 0 0 0-.338-.084 2.6 2.6 0 0 1-.531-.16 1.3 1.3 0 0 1-.379-.25 1 1 0 0 1-.226-.34 1.2 1.2 0 0 1-.073-.433q0-.234.101-.433.108-.201.289-.345.186-.15.435-.228a1.7 1.7 0 0 1 .536-.083q.306 0 .56.078a1.37 1.37 0 0 1 .779.605l-.43.417a1.3 1.3 0 0 0-.254-.306.9.9 0 0 0-.31-.188 1 1 0 0 0-.362-.067q-.22 0-.384.067a.6.6 0 0 0-.26.188.44.44 0 0 0-.09.278q0 .117.045.217.045.094.136.172.095.072.254.133.158.055.378.1.31.067.554.173.244.1.412.239a.9.9 0 0 1 .254.31q.09.174.09.373 0 .372-.174.644a1.15 1.15 0 0 1-.497.423q-.322.144-.769.144M17.333 28.978a1.7 1.7 0 0 1-.82-.195 1.5 1.5 0 0 1-.57-.544 1.54 1.54 0 0 1-.203-.789v-2.4h.61v2.35q0 .284.135.511.136.222.356.356a.95.95 0 0 0 .492.133 1.016 1.016 0 0 0 .876-.489 1 1 0 0 0 .135-.511v-2.35h.582v2.4q0 .44-.21.789-.203.345-.564.544-.361.195-.82.195M19.978 28.944v-3.888h1.65q.377 0 .638.11a.8.8 0 0 1 .39.334q.135.216.135.533t-.18.54a.9.9 0 0 1-.492.305v-.111q.265.055.463.2.198.138.305.35.113.21.113.483 0 .278-.09.494a.9.9 0 0 1-.26.356q-.169.144-.413.222a2 2 0 0 1-.553.072zm.61-.577h1.062q.231 0 .39-.067a.53.53 0 0 0 .248-.194.55.55 0 0 0 .09-.317.46.46 0 0 0-.095-.295.54.54 0 0 0-.26-.183 1.1 1.1 0 0 0-.401-.067h-1.034zm0-1.7h1.005a.65.65 0 0 0 .3-.067.5.5 0 0 0 .288-.45.46.46 0 0 0-.17-.383q-.169-.134-.485-.134h-.938z\" /></svg>;\nexport default SvgDbtNodeSubqueryDark;","import * as React from \"react\";\nconst SvgDbtNodeModel = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"currentColor\" rx={5} /><path fill=\"#FF754C\" fillRule=\"evenodd\" d=\"M11.821 9.371a.58.58 0 0 1 .764-.294l5.935 2.638 5.935-2.638a.578.578 0 1 1 .47 1.057l-6.17 2.743a.58.58 0 0 1-.47 0l-6.17-2.743a.58.58 0 0 1-.294-.763\" clipRule=\"evenodd\" /><path fill=\"#FF754C\" fillRule=\"evenodd\" d=\"M17.032 6.21a3.66 3.66 0 0 1 2.976 0l3.856 1.714a3.66 3.66 0 0 1 2.175 3.348v5.245c0 1.448-.852 2.76-2.175 3.348l-3.856 1.714a3.66 3.66 0 0 1-2.976 0l-3.856-1.714A3.66 3.66 0 0 1 11 16.517v-5.245c0-1.448.853-2.76 2.176-3.348zm2.506 1.057a2.5 2.5 0 0 0-2.036 0l-3.857 1.714a2.51 2.51 0 0 0-1.488 2.29v5.246c0 .99.583 1.888 1.488 2.29l3.857 1.715a2.5 2.5 0 0 0 2.036 0l3.856-1.714a2.51 2.51 0 0 0 1.489-2.29v-5.246c0-.99-.584-1.888-1.489-2.29z\" clipRule=\"evenodd\" /><path fill=\"#FF754C\" fillRule=\"evenodd\" d=\"M18.52 11.77c.32 0 .578.258.578.578v8.484a.578.578 0 1 1-1.157 0v-8.484c0-.32.26-.578.579-.578\" clipRule=\"evenodd\" /><path fill=\"#FF754C\" d=\"M21.637 29v-4.2h.78v3.48h1.938V29zM17.096 29v-4.2h1.686q.456 0 .822.15.372.15.636.433.27.282.408.666.144.384.144.852t-.144.858a1.9 1.9 0 0 1-.402.666 1.8 1.8 0 0 1-.636.426q-.372.15-.828.15zm.78-.605-.06-.114h.936q.294 0 .522-.096.234-.096.396-.276t.246-.432Q20 27.219 20 26.9t-.084-.57a1.16 1.16 0 0 0-.642-.714 1.3 1.3 0 0 0-.522-.096h-.954l.078-.102zM11.881 29v-4.2h.738l1.53 2.49-.432-.005 1.548-2.484h.702V29h-.774v-1.578q0-.54.024-.972.03-.432.096-.858l.096.258-1.302 2.01h-.396l-1.26-1.992.084-.276q.066.402.09.828.03.42.03 1.002V29z\" /></svg>;\nexport default SvgDbtNodeModel;","import * as React from \"react\";\nconst SvgDbtNodeSeed = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"currentColor\" rx={5} /><path fill=\"#01CD8C\" d=\"M22.85 10.907 20.214 8.41A1.5 1.5 0 0 0 19.181 8h-5.02c-.83 0-1.505.675-1.505 1.504v10.992c0 .829.676 1.504 1.504 1.504h7.656c.829 0 1.504-.675 1.504-1.504v-8.498c0-.41-.172-.81-.47-1.091m-.796.374h-2.042a.135.135 0 0 1-.137-.136V9.22zm-.238 9.899H14.16a.684.684 0 0 1-.683-.684V9.504c0-.377.306-.684.683-.684h4.895v2.325c0 .527.429.957.957.957H22.5v8.394a.684.684 0 0 1-.684.684\" /><path fill=\"#01CD8C\" d=\"M20.915 13.469h-6.016a.41.41 0 1 0 0 .82h6.016a.41.41 0 1 0 0-.82M20.915 15.656h-6.016a.41.41 0 1 0 0 .82h6.016a.41.41 0 1 0 0-.82M16.887 17.844h-1.988a.41.41 0 1 0 0 .82h1.988a.41.41 0 1 0 0-.82M21.719 27.942v-4.087h1.64q.444.001.8.146.363.147.619.42.262.276.397.649.14.373.14.829 0 .454-.14.834-.135.375-.391.648a1.75 1.75 0 0 1-.619.415q-.362.146-.806.146zm.759-.59-.059-.11h.911q.285 0 .508-.094.228-.093.385-.269.158-.174.24-.42.081-.25.081-.56t-.081-.555a1.13 1.13 0 0 0-.625-.695 1.3 1.3 0 0 0-.508-.093h-.928l.076-.1zM18.07 27.942v-4.087h2.674v.69h-1.926v2.708h1.95v.689zm.35-1.751v-.678h2.026v.678zM14.422 27.942v-4.087h2.674v.69h-1.927v2.708h1.95v.689zm.35-1.751v-.678h2.026v.678zM12.058 28q-.357 0-.654-.087a1.8 1.8 0 0 1-.537-.275 2 2 0 0 1-.426-.438l.496-.56q.285.396.56.549.275.15.62.151.197 0 .361-.058a.66.66 0 0 0 .257-.17.4.4 0 0 0 .053-.432.4.4 0 0 0-.111-.151 1 1 0 0 0-.187-.128 1.4 1.4 0 0 0-.251-.1 4 4 0 0 0-.31-.076q-.32-.064-.56-.169a1.5 1.5 0 0 1-.403-.268 1 1 0 0 1-.24-.362 1.3 1.3 0 0 1-.075-.462q0-.255.11-.473.118-.215.316-.373t.461-.245a1.8 1.8 0 0 1 .566-.088q.345 0 .613.082.274.081.48.245.21.158.344.385l-.502.497a1.2 1.2 0 0 0-.263-.298 1 1 0 0 0-.316-.181 1 1 0 0 0-.356-.064q-.21 0-.367.058a.55.55 0 0 0-.24.17.4.4 0 0 0-.087.256q0 .117.052.21.053.088.146.158.1.07.251.123.152.052.345.093.32.064.578.175.256.105.438.257.18.146.274.339a.9.9 0 0 1 .093.42q0 .402-.192.695-.187.285-.532.443-.345.152-.805.152\" /></svg>;\nexport default SvgDbtNodeSeed;","import * as React from \"react\";\nconst SvgDbtNodeSource = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"currentColor\" rx={5} /><path fill=\"#247EFE\" d=\"M24.397 10.569c-.014-.765-.715-1.445-1.979-1.915C21.286 8.234 19.785 8 18.2 8c-1.588 0-3.085.234-4.22.654-1.265.47-1.968 1.153-1.98 1.918v8.836c0 .776.704 1.462 1.98 1.938 1.135.423 2.632.654 4.22.654s3.086-.233 4.221-.654c1.276-.473 1.98-1.162 1.98-1.938v-8.816q-.005-.01-.004-.023m-.91 8.839c0 .686-2.061 1.681-5.29 1.681s-5.29-.995-5.29-1.681v-1.533q.439.298 1.07.535c1.138.42 2.635.653 4.223.653s3.089-.233 4.221-.653q.63-.237 1.069-.535v1.533zm0-2.951v.011c0 .686-2.061 1.682-5.29 1.682s-5.29-.996-5.29-1.682v-1.532q.439.297 1.07.534c1.135.423 2.632.654 4.22.654s3.086-.234 4.221-.654c.42-.155.777-.336 1.069-.534zm0-2.937v.012c0 .686-2.061 1.681-5.29 1.681s-5.29-.995-5.29-1.681v-1.533q.439.3 1.07.531c1.135.424 2.632.654 4.22.654s3.086-.233 4.221-.654a5 5 0 0 0 1.069-.53zM18.2 12.274c-3.228 0-5.29-.996-5.29-1.682s2.062-1.681 5.29-1.681 5.29.995 5.29 1.681c-.003.686-2.061 1.682-5.29 1.682M21.999 28.334q-.456 0-.834-.157a1.9 1.9 0 0 1-.654-.444 2.2 2.2 0 0 1-.432-.69q-.15-.401-.15-.875 0-.457.162-.846a2.1 2.1 0 0 1 .45-.684q.288-.295.672-.457a2.12 2.12 0 0 1 1.428-.072q.288.09.528.252.24.156.402.366l-.498.546a1.8 1.8 0 0 0-.324-.27 1.2 1.2 0 0 0-.342-.168 1.1 1.1 0 0 0-.36-.06 1.4 1.4 0 0 0-.522.103q-.24.1-.42.288a1.4 1.4 0 0 0-.276.444 1.5 1.5 0 0 0-.102.564q0 .318.096.576.102.258.282.444.186.185.438.288.258.096.564.096a1.37 1.37 0 0 0 .726-.204 1.7 1.7 0 0 0 .294-.234l.384.617a1.4 1.4 0 0 1-.384.294 2.34 2.34 0 0 1-1.128.283M16.092 28.27v-4.2h1.824q.378 0 .69.18.312.174.492.48.186.3.186.678 0 .36-.186.666a1.35 1.35 0 0 1-1.182.654h-1.062v1.542zm2.436 0-1.068-1.896.804-.15 1.188 2.052zm-1.674-2.22h1.068a.56.56 0 0 0 .3-.078.56.56 0 0 0 .204-.228.7.7 0 0 0 .072-.318.63.63 0 0 0-.09-.342.63.63 0 0 0-.252-.228.8.8 0 0 0-.372-.084h-.93zM13.662 28.332q-.366 0-.672-.09a1.8 1.8 0 0 1-.552-.282 2.1 2.1 0 0 1-.438-.45l.51-.576q.294.408.576.564t.636.156q.204 0 .372-.06a.7.7 0 0 0 .264-.174.41.41 0 0 0 .054-.444.4.4 0 0 0-.114-.156 1 1 0 0 0-.192-.132 1.4 1.4 0 0 0-.258-.102 4 4 0 0 0-.318-.078 2.8 2.8 0 0 1-.576-.174 1.5 1.5 0 0 1-.414-.276 1.1 1.1 0 0 1-.246-.372 1.4 1.4 0 0 1-.078-.474q0-.264.114-.486a1.2 1.2 0 0 1 .324-.384q.204-.162.474-.252t.582-.09q.354 0 .63.084.282.084.492.252.216.162.354.396l-.516.51a1.3 1.3 0 0 0-.27-.306 1 1 0 0 0-.324-.186 1 1 0 0 0-.366-.066q-.216 0-.378.06a.56.56 0 0 0-.246.174.4.4 0 0 0-.09.264q0 .12.054.216a.6.6 0 0 0 .15.162q.102.072.258.126t.354.096q.33.066.594.18.264.108.45.264.186.15.282.348a.95.95 0 0 1 .096.432q0 .414-.198.714-.192.294-.546.456a2 2 0 0 1-.828.156\" /></svg>;\nexport default SvgDbtNodeSource;","import * as React from \"react\";\nconst SvgDbtNodeExposure = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"currentColor\" rx={5} /><g fill=\"#EF5DA8\" clipPath=\"url(#dbt_node_exposure_svg__a)\"><path d=\"M23.04 9.144a.275.275 0 0 0-.39-.015.274.274 0 0 0-.004.394.276.276 0 0 0 .39.013.274.274 0 0 0 .005-.392\" /><path stroke=\"#EF5DA8\" strokeWidth={0.2} d=\"M21.474 8.68A6.33 6.33 0 0 0 18 7.647 6.36 6.36 0 0 0 11.647 14 6.36 6.36 0 0 0 18 20.353 6.36 6.36 0 0 0 24.353 14a6.34 6.34 0 0 0-.963-3.365l.085-.053zm0 0a.373.373 0 0 0 .517-.108m-.517.108.517-.108m0 0a.373.373 0 0 0-.108-.517m.108.517-.108-.517m0 0A7.07 7.07 0 0 0 18 6.9c-1.896 0-3.68.739-5.02 2.08m8.903-.925-8.903.925m0 0A7.05 7.05 0 0 0 10.9 14c0 1.896.739 3.68 2.08 5.02l.07-.07m-.07-9.97.07 9.97m0 0-.07.07A7.06 7.06 0 0 0 18 21.1c1.896 0 3.68-.739 5.02-2.08l-.07-.07.07.07A7.06 7.06 0 0 0 25.1 14a7.1 7.1 0 0 0-1.077-3.761z\" /><path d=\"M21.42 10.58a.436.436 0 0 0-.616 0l-2.638 2.639a1.395 1.395 0 0 0-1.873 1.873l-.165.165a.435.435 0 1 0 .616.616l.166-.167a1.395 1.395 0 0 0 1.87-1.87l2.64-2.64a.436.436 0 0 0 0-.615m-3.885 4.403a.52.52 0 0 1-.364-.148l-.003-.003-.005-.005a.52.52 0 0 1 .372-.89.523.523 0 0 1 0 1.046M17.018 17.854a.275.275 0 0 0-.387 0 .275.275 0 0 0 0 .386.275.275 0 0 0 .386 0 .275.275 0 0 0 0-.387M19.176 17.773H17.89a.273.273 0 0 0 0 .547h1.285a.273.273 0 1 0 0-.547\" /></g><path fill=\"#EF5DA8\" d=\"M12.681 28v-4.2h2.748v.708h-1.98v2.784h2.004V28zm.36-1.8v-.696h2.082v.696zm5.916 1.8-1.302-1.884-1.668-2.316h.972l1.272 1.86L19.93 28zm-3 0 1.602-2.286.552.474L16.87 28zm2.37-1.95-.546-.456 1.176-1.794h.912zM20.585 28v-4.2h1.746q.36 0 .649.174.293.174.468.474.174.3.174.672 0 .378-.174.684-.175.3-.468.48-.288.18-.649.18h-.965V28zm.78-2.256h.913q.15 0 .27-.084a.6.6 0 0 0 .198-.222.6.6 0 0 0 .078-.312.6.6 0 0 0-.079-.306.54.54 0 0 0-.198-.216.46.46 0 0 0-.27-.084h-.912z\" /><defs><clipPath id=\"dbt_node_exposure_svg__a\"><path fill=\"#fff\" d=\"M10 6h16v16H10z\" /></clipPath></defs></svg>;\nexport default SvgDbtNodeExposure;","import * as React from \"react\";\nconst SvgDbtNodeSnapshot = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"currentColor\" rx={5} /><path fill=\"#9B8AFF\" d=\"M22.636 20h-1.772c-.355 0-.591-.236-.591-.59 0-.355.236-.592.59-.592h1.773c.65 0 1.182-.532 1.182-1.182v-1.772c0-.355.236-.591.591-.591s.591.236.591.59v1.773A2.37 2.37 0 0 1 22.636 20m-6.5 0h-1.772A2.37 2.37 0 0 1 12 17.636v-1.772c0-.355.236-.591.59-.591.355 0 .592.236.592.59v1.773c0 .65.532 1.182 1.182 1.182h1.772c.355 0 .591.236.591.591s-.236.591-.59.591m2.364-4.136a2.37 2.37 0 0 1-2.364-2.364 2.37 2.37 0 0 1 2.364-2.364 2.37 2.37 0 0 1 2.364 2.364 2.37 2.37 0 0 1-2.364 2.364m0-3.546c-.65 0-1.182.532-1.182 1.182s.532 1.182 1.182 1.182 1.182-.532 1.182-1.182-.532-1.182-1.182-1.182m5.91-.59c-.355 0-.592-.237-.592-.592V9.364c0-.65-.532-1.182-1.182-1.182h-1.772c-.355 0-.591-.237-.591-.591 0-.355.236-.591.59-.591h1.773A2.37 2.37 0 0 1 25 9.364v1.772c0 .355-.236.591-.59.591m-11.82 0c-.354 0-.59-.237-.59-.592V9.364A2.37 2.37 0 0 1 14.364 7h1.772c.355 0 .591.236.591.59 0 .355-.236.592-.59.592h-1.773c-.65 0-1.182.532-1.182 1.182v1.772c0 .355-.237.591-.591.591M14.19 28.06q-.365 0-.671-.09a1.8 1.8 0 0 1-.552-.282 2.1 2.1 0 0 1-.438-.45l.51-.576q.294.408.576.564t.636.156q.204 0 .372-.06a.7.7 0 0 0 .264-.174.41.41 0 0 0 .054-.444.4.4 0 0 0-.114-.156 1 1 0 0 0-.192-.132 1.4 1.4 0 0 0-.258-.102 4 4 0 0 0-.318-.078 2.8 2.8 0 0 1-.576-.174 1.5 1.5 0 0 1-.414-.276 1.1 1.1 0 0 1-.246-.372 1.4 1.4 0 0 1-.078-.474q0-.264.114-.486a1.2 1.2 0 0 1 .324-.384q.204-.162.474-.252t.582-.09q.354 0 .63.084.282.084.492.252.216.162.354.396l-.516.51a1.3 1.3 0 0 0-.27-.306 1 1 0 0 0-.324-.186 1 1 0 0 0-.366-.066q-.216 0-.378.06a.56.56 0 0 0-.246.174.4.4 0 0 0-.09.264q0 .12.054.216a.6.6 0 0 0 .15.162q.102.072.258.126t.354.096q.33.066.594.18.264.108.45.264.186.15.282.348a.95.95 0 0 1 .096.432q0 .414-.198.714-.192.294-.546.456a2 2 0 0 1-.828.156m2.43-.06v-4.2h.703l2.436 3.282-.132.024a9 9 0 0 1-.042-.342l-.036-.372-.024-.402-.012-.438q-.006-.234-.006-.492V23.8h.774V28h-.714l-2.448-3.234.156-.042q.03.336.048.576a13 13 0 0 1 .054.69q.012.114.012.21.006.09.006.174V28zm4.788 0v-4.2h1.746q.36 0 .648.174.294.174.468.474t.174.672q0 .378-.174.684-.174.3-.468.48-.288.18-.648.18h-.966V28zm.78-2.256h.912q.15 0 .27-.084a.6.6 0 0 0 .198-.222.6.6 0 0 0 .078-.312.6.6 0 0 0-.078-.306.54.54 0 0 0-.198-.216.46.46 0 0 0-.27-.084h-.912z\" /></svg>;\nexport default SvgDbtNodeSnapshot;","import * as React from \"react\";\nconst SvgDbtNodeMetricsLight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"#E6EEF9\" rx={5} /><mask id=\"dbt_node_metrics_light_svg__a\" width={14} height={14} x={11} y={7} maskUnits=\"userSpaceOnUse\" style={{\n maskType: \"luminance\"\n }}><path fill=\"#fff\" d=\"M11 7h14v14H11z\" /></mask><g stroke=\"#004FBF\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeMiterlimit={10} strokeWidth={0.8} mask=\"url(#dbt_node_metrics_light_svg__a)\"><path d=\"M11.41 20.59h13.18M13.625 17.309h-1.094a.273.273 0 0 0-.273.273v3.008h1.64v-3.008a.273.273 0 0 0-.273-.273M16.906 16.324h-1.093a.273.273 0 0 0-.274.274v3.992h1.64v-3.992a.273.273 0 0 0-.273-.274M20.188 14.82h-1.094a.273.273 0 0 0-.274.274v5.496h1.64v-5.496a.273.273 0 0 0-.273-.274M23.469 12.086h-1.094a.273.273 0 0 0-.273.273v8.23h1.64v-8.23a.273.273 0 0 0-.273-.273M11.41 15.402c5.387 0 10.775-4.118 12.508-7.992\" /><path d=\"m21.412 8.083 2.507-.672.671 2.507\" /></g><path fill=\"#004FBF\" d=\"M12.771 28v-4.2h.738l1.53 2.49-.432-.006 1.548-2.484h.702V28h-.774v-1.578q0-.54.024-.972.03-.432.096-.858l.096.258-1.302 2.01h-.396l-1.26-1.992.084-.276q.066.402.09.828.03.42.03 1.002V28zm5.215 0v-4.2h2.748v.708h-1.98v2.784h2.004V28zm.36-1.8v-.696h2.082v.696zm4.23 1.8v-3.48h-1.2v-.72h3.216v.72h-1.236V28z\" /></svg>;\nexport default SvgDbtNodeMetricsLight;","import * as React from \"react\";\nconst SvgSqlFilter = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M18.54 3.248H5.46a2.21 2.21 0 0 0-1.68 3.65l5.17 6.03c.19.23.3.52.3.81v5.64c0 .61.31 1.17.83 1.49.28.17.6.26.92.26.27 0 .53-.06.78-.19l2-1c.6-.3.97-.9.97-1.57v-4.64c0-.3.11-.59.3-.81l5.17-6.03a2.21 2.21 0 0 0-1.68-3.65zm.54 2.67-5.17 6.03c-.43.5-.66 1.13-.66 1.79v4.64c0 .1-.05.18-.14.22l-2 1c-.11.06-.2.02-.24-.01s-.12-.09-.12-.21v-5.64c0-.66-.23-1.29-.66-1.79l-5.17-6.03a.7.7 0 0 1-.17-.46c0-.39.32-.71.71-.71h13.08c.39 0 .71.32.71.71 0 .17-.06.33-.17.46\" /></svg>;\nexport default SvgSqlFilter;","import * as React from \"react\";\nconst SvgSqlGroupBy = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M18.93 14.5a3.5 3.5 0 0 0-.812.098L14.54 8.395a3.498 3.498 0 1 0-5.082.003l-3.577 6.2A3.5 3.5 0 1 0 8.407 19h7.186a3.492 3.492 0 1 0 3.337-4.5M12 4.5a1.499 1.499 0 1 1-.385 2.948 1.4 1.4 0 0 1-.368-.156A1.497 1.497 0 0 1 12 4.499m-.814 4.905c.023.005.047.003.07.008a3.3 3.3 0 0 0 1.496 0c.02-.005.041-.003.061-.008l3.574 6.194c-.013.014-.021.03-.034.045q-.259.279-.453.607v.002a3.5 3.5 0 0 0-.298.686c-.007.021-.02.04-.026.06H8.424c-.006-.02-.019-.037-.025-.056a3.5 3.5 0 0 0-.767-1.319l-.019-.025zM5.07 19.5a1.5 1.5 0 1 1 0-3c.266-.002.526.07.753.208A1.497 1.497 0 0 1 5.07 19.5m13.86 0a1.496 1.496 0 0 1-.74-2.8c.223-.133.48-.203.74-.2a1.5 1.5 0 0 1 0 3\" /></svg>;\nexport default SvgSqlGroupBy;","import * as React from \"react\";\nconst SvgSqlInnerJoin = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path stroke=\"#247EFE\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M13.75 12a5.25 5.25 0 1 1-10.5 0 5.25 5.25 0 0 1 10.5 0\" /><path stroke=\"#247EFE\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M20.75 12a5.25 5.25 0 1 1-10.5 0 5.25 5.25 0 0 1 10.5 0\" /><path fill=\"#247EFE\" d=\"M14.4 12c0-1.982-.95-3.726-2.4-4.8A5.96 5.96 0 0 0 9.6 12c0 1.98.95 3.725 2.4 4.8a5.96 5.96 0 0 0 2.4-4.8\" /></svg>;\nexport default SvgSqlInnerJoin;","import * as React from \"react\";\nconst SvgSqlLeftJoin = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M12 16.24c.13.11.27.21.41.31.14.09.29.18.44.26.78.44 1.69.69 2.65.69 3.03 0 5.5-2.47 5.5-5.5s-2.47-5.5-5.5-5.5c-.96 0-1.87.25-2.65.69-.15.08-.3.17-.44.26-.14.1-.28.2-.41.31a6 6 0 0 0-.41-.31 6 6 0 0 0-.44-.26c.13-.13.27-.24.41-.35s.29-.21.44-.31a6.45 6.45 0 0 1 3.5-1.03c3.58 0 6.5 2.92 6.5 6.5s-2.92 6.5-6.5 6.5a6.45 6.45 0 0 1-3.94-1.34c-.14-.11-.28-.22-.41-.35.15-.08.3-.17.44-.26.14-.1.28-.2.41-.31\" /><path fill=\"#247EFE\" d=\"M8.5 5.5a6.45 6.45 0 0 1 3.94 1.34c.14.11.28.22.41.35A6.44 6.44 0 0 1 15 12c0 1.91-.83 3.63-2.15 4.81-.13.13-.27.24-.41.35s-.29.21-.44.31a6.45 6.45 0 0 1-3.5 1.03C4.92 18.5 2 15.58 2 12s2.92-6.5 6.5-6.5M12 16.24c-1.22-1.01-2-2.54-2-4.24s.78-3.23 2-4.24a6 6 0 0 0-.41-.31 6 6 0 0 0-.44-.26A6.44 6.44 0 0 0 9 12c0 1.91.83 3.63 2.15 4.81.15-.08.3-.17.44-.26.14-.1.28-.2.41-.31\" /></svg>;\nexport default SvgSqlLeftJoin;","import * as React from \"react\";\nconst SvgSqlLimit = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M22 13.795a9.58 9.58 0 0 1-2.02 5.901.79.79 0 0 1-1.094.149.756.756 0 0 1-.151-1.072 8.08 8.08 0 0 0 1.703-4.978c0-4.57-3.777-8.264-8.438-8.264-4.664 0-8.437 3.697-8.437 8.264a8.08 8.08 0 0 0 1.702 4.978.755.755 0 0 1-.151 1.072.79.79 0 0 1-1.095-.149A9.58 9.58 0 0 1 2 13.794C2 8.378 6.476 4 12 4c5.527 0 10 4.381 10 9.795m-5.05-4.611a.755.755 0 0 1 0 1.083l-2.546 2.495c.21.379.329.812.329 1.272 0 1.477-1.226 2.678-2.733 2.678s-2.733-1.2-2.733-2.677 1.226-2.678 2.733-2.678c.47 0 .912.117 1.299.322l2.546-2.495a.793.793 0 0 1 1.105 0m-3.78 4.85A1.16 1.16 0 0 0 12 12.889a1.16 1.16 0 0 0-1.17 1.147A1.16 1.16 0 0 0 12 15.18a1.16 1.16 0 0 0 1.17-1.146\" /></svg>;\nexport default SvgSqlLimit;","import * as React from \"react\";\nconst SvgSqlOrderBy = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M7 6.25a1.22 1.22 0 0 1-.88-.37L5 4.77 3.88 5.88a1.23 1.23 0 0 1-1.76 0 1.23 1.23 0 0 1 0-1.76l2-2a1.23 1.23 0 0 1 1.76 0l2 2A1.25 1.25 0 0 1 7 6.25M5 22.25a1.22 1.22 0 0 1-.88-.37l-2-2A1.25 1.25 0 0 1 3 17.75a1.22 1.22 0 0 1 .88.37L5 19.23l1.12-1.11a1.245 1.245 0 0 1 1.76 1.76l-2 2a1.22 1.22 0 0 1-.88.37\" /><path fill=\"#247EFE\" d=\"M5 22.25A1.25 1.25 0 0 1 3.75 21V3a1.25 1.25 0 0 1 2.5 0v18A1.25 1.25 0 0 1 5 22.25M11 6.25a1.25 1.25 0 0 1 0-2.5h10a1.25 1.25 0 0 1 0 2.5zM11 11.25a1.25 1.25 0 0 1 0-2.5h8a1.25 1.25 0 0 1 0 2.5zM11 16.25a1.25 1.25 0 0 1 0-2.5h6a1.25 1.25 0 0 1 0 2.5zM11 21.25a1.25 1.25 0 0 1 0-2.5h4a1.25 1.25 0 0 1 0 2.5z\" /></svg>;\nexport default SvgSqlOrderBy;","import * as React from \"react\";\nconst SvgSqlOuterJoin = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M15.5 6c-1.31 0-2.51.42-3.5 1.13A5.97 5.97 0 0 0 8.5 6c-3.31 0-6 2.69-6 6s2.69 6 6 6c1.31 0 2.51-.42 3.5-1.13A5.97 5.97 0 0 0 15.5 18c3.31 0 6-2.69 6-6s-2.69-6-6-6\" /><path fill=\"#fff\" d=\"M14.4 12c0-1.975-.948-3.721-2.4-4.8A5.94 5.94 0 0 0 9.6 12c0 1.982.948 3.72 2.4 4.8a5.94 5.94 0 0 0 2.4-4.8\" /></svg>;\nexport default SvgSqlOuterJoin;","import * as React from \"react\";\nconst SvgSqlRightJoin = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M12 16.24c-.13.11-.27.21-.41.31-.14.09-.29.18-.44.26-.78.44-1.69.69-2.65.69A5.51 5.51 0 0 1 3 12c0-3.03 2.47-5.5 5.5-5.5.96 0 1.87.25 2.65.69.15.08.3.17.44.26.14.1.28.2.41.31.13-.11.27-.21.41-.31.14-.09.29-.18.44-.26-.13-.13-.27-.24-.41-.35s-.29-.21-.44-.31A6.45 6.45 0 0 0 8.5 5.5C4.92 5.5 2 8.42 2 12s2.92 6.5 6.5 6.5a6.45 6.45 0 0 0 3.94-1.34c.14-.11.28-.22.41-.35-.15-.08-.3-.17-.44-.26-.14-.1-.28-.2-.41-.31\" /><path fill=\"#247EFE\" d=\"M15.5 5.5a6.45 6.45 0 0 0-3.94 1.34c-.14.11-.28.22-.41.35A6.44 6.44 0 0 0 9 12c0 1.91.83 3.63 2.15 4.81.13.13.27.24.41.35s.29.21.44.31c1.01.65 2.21 1.03 3.5 1.03 3.58 0 6.5-2.92 6.5-6.5s-2.92-6.5-6.5-6.5M12 16.24c1.22-1.01 2-2.54 2-4.24s-.78-3.23-2-4.24c.13-.11.27-.21.41-.31.14-.09.29-.18.44-.26A6.44 6.44 0 0 1 15 12c0 1.91-.83 3.63-2.15 4.81-.15-.08-.3-.17-.44-.26-.14-.1-.28-.2-.41-.31\" /></svg>;\nexport default SvgSqlRightJoin;","import * as React from \"react\";\nconst SvgSqlCrossJoin = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" stroke=\"#fff\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={0.4} d=\"M14.717 12a6.8 6.8 0 1 1-13.6 0 6.8 6.8 0 0 1 13.6 0\" /><path fill=\"#247EFE\" stroke=\"#fff\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={0.4} d=\"M22.884 12a6.8 6.8 0 1 1-13.6 0 6.8 6.8 0 0 1 13.6 0\" /><path fill=\"#247EFE\" stroke=\"#fff\" strokeWidth={0.6} d=\"M9.5 11.998c0-2.13.984-4.014 2.5-5.221a6.65 6.65 0 0 1 2.5 5.221c0 2.131-.983 4.015-2.5 5.222a6.65 6.65 0 0 1-2.5-5.222Z\" /><path stroke=\"#fff\" strokeLinecap=\"round\" strokeWidth={0.6} d=\"M18.137 15.574 5.9 8.51M5.9 15.57l12.237-7.065\" /></svg>;\nexport default SvgSqlCrossJoin;","import * as React from \"react\";\nconst SvgSqlLateralJoin = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M12 15.727a2.64 2.64 0 0 0-2.584 3.164H6.164v-1.4l.33.331a.527.527 0 0 0 .746-.746l-1.23-1.23a.527.527 0 0 0-.746 0l-1.23 1.23a.527.527 0 0 0 .745.746l.33-.33v1.926c0 .291.236.527.528.527h4.255a2.634 2.634 0 0 0 4.745-1.582A2.64 2.64 0 0 0 12 15.727m0 4.218c-.872 0-1.582-.71-1.582-1.582s.71-1.582 1.582-1.582 1.582.71 1.582 1.582-.71 1.582-1.582 1.582M8.273 12A2.64 2.64 0 0 0 5.11 9.416V6.164h1.4l-.331.33a.527.527 0 1 0 .746.746l1.23-1.23a.527.527 0 0 0 0-.746l-1.23-1.23a.527.527 0 1 0-.746.745l.33.33H4.582a.527.527 0 0 0-.527.528v4.255a2.634 2.634 0 0 0 1.582 4.745A2.64 2.64 0 0 0 8.273 12m-4.218 0c0-.872.71-1.582 1.582-1.582s1.582.71 1.582 1.582-.71 1.582-1.582 1.582-1.582-.71-1.582-1.582M21 12a2.64 2.64 0 0 0-2.637-2.637A2.64 2.64 0 0 0 15.727 12a2.64 2.64 0 0 0 3.164 2.584v3.252h-1.4l.331-.33a.527.527 0 0 0-.746-.746l-1.23 1.23a.527.527 0 0 0 0 .746l1.23 1.23a.527.527 0 1 0 .746-.745l-.33-.33h1.926a.527.527 0 0 0 .527-.528v-4.255A2.63 2.63 0 0 0 21 12m-2.637 1.582c-.872 0-1.582-.71-1.582-1.582s.71-1.582 1.582-1.582 1.582.71 1.582 1.582-.71 1.582-1.582 1.582M17.836 5.11v1.398l-.33-.33a.527.527 0 0 0-.746.746l1.23 1.23c.206.206.54.206.746 0l1.23-1.23a.527.527 0 1 0-.745-.746l-.33.33V4.582a.527.527 0 0 0-.528-.527h-4.255A2.63 2.63 0 0 0 12 3a2.64 2.64 0 0 0-2.637 2.637A2.64 2.64 0 0 0 12 8.273a2.64 2.64 0 0 0 2.584-3.164zM12 7.218c-.872 0-1.582-.71-1.582-1.582s.71-1.582 1.582-1.582 1.582.71 1.582 1.582-.71 1.582-1.582 1.582\" /></svg>;\nexport default SvgSqlLateralJoin;","import * as React from \"react\";\nconst SvgSqlFullJoin = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 40 40\" {...props}><path fill=\"#247EFE\" d=\"M24.383 20c0-3.517-1.733-6.634-4.383-8.534-2.65 1.917-4.383 5.017-4.383 8.534 0 3.516 1.733 6.633 4.383 8.533 2.65-1.917 4.383-5.017 4.383-8.533\" /><path fill=\"#247EFE\" d=\"M15.617 20c0-3.517 1.733-6.634 4.383-8.534a10.45 10.45 0 0 0-6.133-1.983C8.05 9.483 3.333 14.2 3.333 20.016c0 5.817 4.717 10.534 10.534 10.534 2.3 0 4.416-.75 6.133-1.984-2.65-1.916-4.383-5.016-4.383-8.533zM26.133 9.466c-2.3 0-4.416.75-6.133 1.984 2.65 1.916 4.383 5.016 4.383 8.533S22.65 26.616 20 28.516a10.45 10.45 0 0 0 6.133 1.984c5.817 0 10.534-4.717 10.534-10.534 0-5.816-4.717-10.533-10.534-10.533z\" /><path fill=\"#fff\" d=\"M20 13.633C21.717 15.3 22.717 17.6 22.717 20s-1 4.716-2.717 6.366C18.283 24.7 17.283 22.4 17.283 20s1-4.717 2.717-6.367m0-2.167c-2.65 1.917-4.383 5.017-4.383 8.534 0 3.516 1.733 6.633 4.383 8.533 2.65-1.917 4.383-5.017 4.383-8.533 0-3.517-1.733-6.634-4.383-8.534\" /></svg>;\nexport default SvgSqlFullJoin;","import * as React from \"react\";\nconst SvgSqlUnion = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#247EFE\" d=\"M19 8h-3V5a3 3 0 0 0-3-3H5a3 3 0 0 0-3 3v8a3 3 0 0 0 3 3h3v3a3 3 0 0 0 3 3h8a3 3 0 0 0 3-3v-8a3 3 0 0 0-3-3m1 11a1 1 0 0 1-1 1h-8a1 1 0 0 1-1-1v-4a1 1 0 0 0-1-1H5a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v4a1 1 0 0 0 1 1h4a1 1 0 0 1 1 1z\" /></svg>;\nexport default SvgSqlUnion;","import * as React from \"react\";\nconst SvgSqlSelect = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 15\" {...props}><path fill=\"#247EFE\" d=\"M14.167 15H1.833C.822 15 0 14.16 0 13.125V1.875C0 .841.822 0 1.833 0h12.334C15.178 0 16 .84 16 1.875v11.25C16 14.16 15.178 15 14.167 15M1.833 1.023A.844.844 0 0 0 1 1.875v11.25c0 .47.374.852.833.852h12.334c.459 0 .833-.382.833-.852V1.875a.844.844 0 0 0-.833-.852z\" /><path fill=\"#247EFE\" d=\"M15.5 5H.5a.5.5 0 0 1 0-1h15a.5.5 0 0 1 0 1\" /><path fill=\"#247EFE\" d=\"M8 15a.51.51 0 0 1-.5-.516V4.516C7.5 4.23 7.724 4 8 4s.5.231.5.516v9.968A.51.51 0 0 1 8 15\" /></svg>;\nexport default SvgSqlSelect;","import * as React from \"react\";\nconst SvgAlertError = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 12 12\" {...props}><circle cx={6} cy={6} r={6} fill=\"#CC3E44\" /><path fill=\"#fff\" d=\"M9.076 6.937 6.796 2.99a.97.97 0 0 0-1.685 0l-2.28 3.948A.974.974 0 0 0 3.672 8.4h4.552c.752 0 1.223-.818.85-1.463m-3.124.587a.366.366 0 0 1-.363-.363c0-.198.165-.363.363-.363.199 0 .363.165.355.373.01.188-.164.353-.355.353m.331-2.346-.05.842c-.007.091-.007.174-.007.264a.273.273 0 0 1-.274.264.267.267 0 0 1-.273-.256c-.024-.438-.05-.868-.073-1.306L5.58 4.64c0-.19.107-.347.281-.396a.364.364 0 0 1 .422.206.4.4 0 0 1 .034.182c-.008.184-.026.366-.034.547\" /></svg>;\nexport default SvgAlertError;","import * as React from \"react\";\nconst SvgFunction = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" d=\"M5.5 2A1.5 1.5 0 0 0 4 3.5v2A1.5 1.5 0 0 1 2.5 7H2v2h.5A1.5 1.5 0 0 1 4 10.5v2A1.5 1.5 0 0 0 5.5 14H6v-2h-.5a.5.5 0 0 1-.5-.5v-2A1.5 1.5 0 0 0 3.5 8 1.5 1.5 0 0 0 5 6.5v-2a.5.5 0 0 1 .5-.5H6V2zM10.5 2A1.5 1.5 0 0 1 12 3.5v2A1.5 1.5 0 0 0 13.5 7h.5v2h-.5a1.5 1.5 0 0 0-1.5 1.5v2a1.5 1.5 0 0 1-1.5 1.5H10v-2h.5a.5.5 0 0 0 .5-.5v-2A1.5 1.5 0 0 1 12.5 8 1.5 1.5 0 0 1 11 6.5v-2a.5.5 0 0 0-.5-.5H10V2zM7 6h2v1.25H7.75v1.5H9V10H7z\" /></svg>;\nexport default SvgFunction;","import * as React from \"react\";\nconst SvgDbtNodeFunction = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 36 36\" {...props}><rect width={36} height={36} fill=\"currentColor\" rx={5} /><path fill=\"#a78bfa\" d=\"M14.5 8A1.5 1.5 0 0 0 13 9.5v2a1.5 1.5 0 0 1-1.5 1.5H11v2h.5a1.5 1.5 0 0 1 1.5 1.5v2a1.5 1.5 0 0 0 1.5 1.5h.5v-2h-.5a.5.5 0 0 1-.5-.5v-2a1.5 1.5 0 0 0-1.5-1.5 1.5 1.5 0 0 0 1.5-1.5v-2a.5.5 0 0 1 .5-.5h.5V8zM21.5 8A1.5 1.5 0 0 1 23 9.5v2a1.5 1.5 0 0 0 1.5 1.5h.5v2h-.5a1.5 1.5 0 0 0-1.5 1.5v2a1.5 1.5 0 0 1-1.5 1.5H21v-2h.5a.5.5 0 0 0 .5-.5v-2a1.5 1.5 0 0 1 1.5-1.5 1.5 1.5 0 0 1-1.5-1.5v-2a.5.5 0 0 0-.5-.5H21V8zM16.5 12h3v1.5h-2v2h2V17h-3z\" /><g fill=\"#a78bfa\"><path d=\"M14.256 29v-4.2h2.748v.709h-1.98V27.2h1.848v.696h-1.848V29zM18.17 29v-4.2h.703l2.436 3.283-.132.024a9 9 0 0 1-.042-.342l-.036-.372-.024-.402-.012-.438q-.006-.234-.006-.492V24.8h.774V29h-.714l-2.448-3.234.156-.042q.03.336.048.576a13 13 0 0 1 .054.69q.012.114.012.21.006.09.006.174V29z\" /></g></svg>;\nexport default SvgDbtNodeFunction;","import * as React from \"react\";\nconst SvgBolt = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={13} height={12} fill=\"none\" viewBox=\"0 0 13 12\" {...props}><g clipPath=\"url(#bolt_svg__a)\"><path fill=\"currentColor\" d=\"M5.556 12a.35.35 0 0 1-.341-.436l1.189-4.786H3.2a.352.352 0 0 1-.327-.478L5.223.225A.35.35 0 0 1 5.55 0h3.234a.352.352 0 0 1 .321.493L7.714 3.652h2.752a.352.352 0 0 1 .296.541l-4.91 7.645a.35.35 0 0 1-.296.162\" /></g><defs><clipPath id=\"bolt_svg__a\"><path fill=\"currentColor\" d=\"M.833 0h12v12h-12z\" /></clipPath></defs></svg>;\nexport default SvgBolt;","import * as React from \"react\";\nconst SvgDbt = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 103 103\" {...props}><path fill=\"#FF694A\" d=\"M98.23 4.285c2.407 2.327 3.99 5.405 4.357 8.749 0 1.399-.367 2.327-1.203 4.094s-11.134 19.647-14.2 24.58c-1.76 2.887-2.685 6.333-2.685 9.69s.925 6.803 2.686 9.69c3.065 4.934 13.363 22.914 14.199 24.682s1.203 2.606 1.203 4.005c-.367 3.357-1.849 6.422-4.268 8.66-2.318 2.416-5.384 4.005-8.627 4.285-1.393 0-2.317-.369-3.99-1.208-1.671-.839-19.848-10.897-24.763-13.975-.367-.19-.747-.47-1.203-.648L35.429 72.456c.557 4.654 2.596 9.13 5.94 12.385a19 19 0 0 0 2.04 1.768c-.558.28-1.204.56-1.761.928-4.915 3.078-22.825 13.416-24.586 14.255S14.465 103 12.983 103c-3.344-.369-6.396-1.857-8.626-4.285C1.951 96.388.367 93.31 0 89.966c.089-1.399.469-2.797 1.203-4.005.836-1.768 11.134-19.748 14.2-24.682 1.76-2.887 2.685-6.244 2.685-9.69s-.925-6.803-2.686-9.69C12.338 36.775 1.951 18.807 1.204 17.04.456 15.832.09 14.434 0 13.035c.367-3.357 1.85-6.422 4.269-8.749C6.574 1.857 9.627.37 12.97 0a9.4 9.4 0 0 1 4.078 1.208c1.482.649 14.567 8.29 21.521 12.386l1.583.928c.558.368 1.026.648 1.394.839l.747.47 24.763 14.713c-.557-5.582-3.432-10.707-7.891-14.153.557-.28 1.203-.56 1.76-.928 4.915-3.078 22.826-13.505 24.587-14.255C86.716.47 88.109.089 89.59 0a14.13 14.13 0 0 1 8.626 4.285zM52.592 58.112l5.282-5.302c.747-.75.747-1.857 0-2.607L52.592 44.9c-.748-.75-1.85-.75-2.597 0l-5.282 5.303c-.747.75-.747 1.856 0 2.607l5.282 5.302c.646.649 1.85.649 2.597 0M98.23 4.285c2.407 2.327 3.99 5.405 4.357 8.749 0 1.399-.367 2.327-1.203 4.094s-11.134 19.647-14.2 24.58c-1.76 2.887-2.685 6.333-2.685 9.69s.925 6.803 2.686 9.69c3.065 4.934 13.363 22.914 14.199 24.682s1.203 2.606 1.203 4.005c-.367 3.357-1.849 6.422-4.268 8.66-2.318 2.416-5.384 4.005-8.627 4.285-1.393 0-2.317-.369-3.99-1.208-1.671-.839-19.848-10.897-24.763-13.975-.367-.19-.747-.47-1.203-.648L35.429 72.456c.557 4.654 2.596 9.13 5.94 12.385a19 19 0 0 0 2.04 1.768c-.558.28-1.204.56-1.761.928-4.915 3.078-22.825 13.416-24.586 14.255S14.465 103 12.983 103c-3.344-.369-6.396-1.857-8.626-4.285C1.951 96.388.367 93.31 0 89.966c.089-1.399.469-2.797 1.203-4.005.836-1.768 11.134-19.748 14.2-24.682 1.76-2.887 2.685-6.244 2.685-9.69s-.925-6.803-2.686-9.69C12.338 36.775 1.951 18.807 1.204 17.04.456 15.832.09 14.434 0 13.035c.367-3.357 1.85-6.422 4.269-8.749C6.574 1.857 9.627.37 12.97 0a9.4 9.4 0 0 1 4.078 1.208c1.482.649 14.567 8.29 21.521 12.386l1.583.928c.558.368 1.026.648 1.394.839l.747.47 24.763 14.713c-.557-5.582-3.432-10.707-7.891-14.153.557-.28 1.203-.56 1.76-.928 4.915-3.078 22.826-13.505 24.587-14.255C86.716.47 88.109.089 89.59 0a14.13 14.13 0 0 1 8.626 4.285zM52.592 58.112l5.282-5.302c.747-.75.747-1.857 0-2.607L52.592 44.9c-.748-.75-1.85-.75-2.597 0l-5.282 5.303c-.747.75-.747 1.856 0 2.607l5.282 5.302c.646.649 1.85.649 2.597 0\" /></svg>;\nexport default SvgDbt;","import BoltIcon from \"./bolt.svg?react\";\nimport BracketsIcon from \"./brackets.svg?url\";\nimport HalfCircleIcon from \"./half-circle.svg?url\";\nimport CaseSensitiveIcon from \"./case-sensitive.svg?url\";\nimport SplitHorizontalIcon from \"./split-horizontal.svg?url\";\n\nimport { HTMLAttributes } from \"react\";\n\nexport { default as ThinkingIcon } from \"./thinking.svg?react\";\nexport { default as CircleIcon } from \"./circle.svg?react\";\nexport { default as DownloadIcon } from \"./download.svg?react\";\nexport { default as ArrowRightIcon } from \"./arrow-right.svg?react\";\nexport { default as DatabaseIcon } from \"./database.svg?react\";\nexport { default as GitMergeIcon } from \"./git-merge.svg?react\";\nexport { default as ArrowLeftIcon } from \"./arrow-left.svg?react\";\nexport { default as DbtIcon } from \"./dbt.svg?react\";\n\ninterface Props {\n icon: string;\n}\nconst Icon = ({\n icon,\n className = \"\",\n ...rest\n}: Props & HTMLAttributes<HTMLElement>) => (\n <i className={`${className} codicon codicon-${icon}`} {...rest} />\n);\n\nexport const RemoveIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"remove\" {...props} />\n);\n\nexport const CodeIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"code\" {...props} />\n);\n\nexport const AddIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"add\" {...props} />\n);\n\nexport const DeleteIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"trash\" {...props} />\n);\n\nexport const GlobeIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"globe\" {...props} />\n);\n\nexport const GithubIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"github-inverted\" {...props} />\n);\n\nexport const FilesIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"files\" {...props} />\n);\n\nexport const CommentAddIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"comment-add\" {...props} />;\n\nexport const CommentDiscussionIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"comment-discussion\" {...props} />;\n\nexport const CommentUnresolvedIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"comment-unresolved\" {...props} />;\n\nexport const CheckNoOutlineIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"check\" {...props} />;\n\nexport const CheckedIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"pass-filled\" {...props} />;\n\nexport const PassIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"pass\" {...props} />\n);\n\nexport const RefreshIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"debug-restart\" {...props} />;\n\nexport const SettingsIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"gear\" {...props} />;\n\nexport const ChevronUpIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"chevron-up\" {...props} />;\n\nexport const ChevronDownIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"chevron-down\" {...props} />;\n\nexport const ChevronRightIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"chevron-right\" {...props} />;\n\nexport const ChevronLeftIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"chevron-left\" {...props} />;\n\nexport const MoreIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"more\" {...props} />\n);\n\nexport const InfoCircleIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"info\" {...props} />;\n\nexport const AskIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"send\" {...props} />\n);\n\nexport const CloseIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"close\" {...props} />\n);\n\nexport const EditIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"pencil\" {...props} />\n);\n\nexport const ShareIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"share\" {...props} />\n);\n\nexport const SearchIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"search\" {...props} />\n);\n\nexport const FileIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"file\" {...props} />\n);\n\nexport const WarningIcon = (\n props: HTMLAttributes<HTMLElement>,\n): JSX.Element => <Icon icon=\"warning\" {...props} />;\n\nexport const SendIcon = (props: HTMLAttributes<HTMLElement>): JSX.Element => (\n <Icon icon=\"send\" {...props} />\n);\n\nexport {\n BoltIcon,\n BracketsIcon,\n HalfCircleIcon,\n SplitHorizontalIcon,\n CaseSensitiveIcon,\n};\n","import { VIEWS_TYPE_COLOR, ViewsTypes } from \"../utils\";\nimport styles from \"./styles.module.scss\";\nimport { Tooltip } from \"@altimateai/lego\";\n\nconst ViewsTypeBadge = ({ viewsType }: { viewsType: string }) => (\n <Tooltip title={viewsType}>\n <div\n style={{\n [\"--views-color\" as string]: VIEWS_TYPE_COLOR[viewsType as ViewsTypes],\n }}\n className={styles.views_type_badge}\n >\n {viewsType[0]}\n </div>\n </Tooltip>\n);\n\nexport default ViewsTypeBadge;\n","import { VIEWS_TYPE_COLOR } from \"../utils\";\nimport styles from \"./styles.module.scss\";\nimport { useEffect, useState } from \"react\";\nimport { UpIcon, DownIcon } from \"../assets/icons\";\nimport { CodeIcon } from \"../../../assets/icons\";\nimport ViewsTypeBadge from \"./ViewsTypeBadge\";\nimport { Button, PopoverTrigger, Popover, PopoverContent } from \"@altimateai/lego\";\nimport { Stack } from \"@altimateai/lego\";\n\nconst LineageLegend = () => {\n const [showLegend, setShowLegend] = useState(false);\n useEffect(() => {\n setTimeout(() => {\n setShowLegend(true);\n }, 500);\n const id = setTimeout(() => {\n setShowLegend(false);\n }, 3500);\n return () => clearTimeout(id);\n }, []);\n\n return (\n <Popover open={showLegend} onOpenChange={setShowLegend}>\n <PopoverTrigger asChild>\n <Button className={styles.lineage_legend} variant=\"outline\">\n Legend\n {showLegend ? <DownIcon /> : <UpIcon />}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"al-tw-scope\">\n {Object.keys(VIEWS_TYPE_COLOR).map(k => (\n <Stack key={k} direction=\"row\" gap=\"sm\" align=\"center\" className=\"mb-1\">\n <ViewsTypeBadge viewsType={k} />\n <div>{k}</div>\n </Stack>\n ))}\n <Stack direction=\"row\" gap=\"sm\" align=\"center\" className=\"mb-1\">\n <div className={styles.column_code_icon}>\n <CodeIcon />\n </div>\n <div>Code</div>\n </Stack>\n <Stack direction=\"row\" gap=\"sm\" align=\"center\" className=\"mb-1\">\n <div className={styles.edge_select}>\n <div />\n </div>\n <div>Select</div>\n </Stack>\n <Stack direction=\"row\" gap=\"sm\" align=\"center\" className=\"mb-1\">\n <div className={styles.edge_non_select}>\n <div />\n </div>\n <div>Non select</div>\n </Stack>\n </PopoverContent>\n </Popover>\n );\n};\n\nexport default LineageLegend;\n","import { useCallback, useEffect, useState } from \"react\";\n\ninterface Props<R> {\n queryFn: () => Promise<R>;\n enabled?: boolean;\n}\n\nconst useQuery = <R>({ queryFn, enabled = true }: Props<R>) => {\n const [error, setError] = useState<Error | undefined>();\n const [loading, setLoading] = useState(false);\n const [data, setData] = useState<R | undefined>();\n\n const fetchData = useCallback(async () => {\n setLoading(true);\n try {\n const response = (await queryFn()) as R;\n setData(response);\n } catch (error) {\n setError(error as Error);\n } finally {\n setLoading(false);\n }\n }, [queryFn]);\n\n useEffect(() => {\n if (enabled) {\n fetchData();\n }\n }, [fetchData, enabled]);\n\n const refetch = () => {\n fetchData();\n };\n\n return {\n error,\n data,\n loading,\n refetch,\n };\n};\n\nexport default useQuery;\n","import { useState } from \"react\";\n\ninterface Props<TArgs, TResponse> {\n queryFn: (args: TArgs) => Promise<TResponse>;\n onSuccess?: (data: TResponse) => void;\n}\n\nconst useMutation = <TArgs = void, TResponse = void>({\n queryFn,\n onSuccess,\n}: Props<TArgs, TResponse>) => {\n const [error, setError] = useState<Error | undefined>();\n const [loading, setLoading] = useState(false);\n const [data, setData] = useState<TResponse | undefined>();\n\n const mutate = async (args: TArgs) => {\n setLoading(true);\n try {\n const response = await queryFn(args);\n setData(response);\n onSuccess?.(response);\n } catch (error) {\n setError(error as Error);\n } finally {\n setLoading(false);\n }\n };\n\n return {\n error,\n data,\n loading,\n mutate,\n };\n};\n\nexport default useMutation;\n","export const ApiHelper = {\n get: async <T>(_url: string, _data?: Record<string, unknown>, _request?: RequestInit) =>\n ({}) as T,\n post: async <T>(_url: string, _data: Record<string, unknown>, _request?: RequestInit) =>\n ({}) as T,\n};\n\nexport { default as useQuery } from \"./useQuery\";\nexport { default as useMutation } from \"./useMutation\";\n","import { ApiHelper } from \"../../api/index\";\nimport {\n ColumnLineage,\n Columns,\n DbtInfoResponse,\n ExposureMetaData,\n FunctionMetaData,\n SnowflakeStageMetadata,\n StaticLineage,\n Table,\n} from \"../types\";\nimport { CllEvents } from \"../cllUtils\";\n\ninterface ColumnLineageResponse {\n column_lineage: ColumnLineage[];\n confidence?: { confidence: string; operator_list?: string[] };\n errors?: Record<string, string[]>;\n}\n\ninterface LineageSettings {\n showSelectEdges: boolean;\n showNonSelectEdges: boolean;\n defaultExpansion: number;\n}\n\nexport const upstreamTables = (table: string) => {\n return ApiHelper.get<{\n tables: Table[];\n }>(\"upstreamTables\", { table });\n};\n\nexport const downstreamTables = (table: string) => {\n return ApiHelper.get<{\n tables: Table[];\n }>(\"downstreamTables\", { table });\n};\n\nexport const getExposureDetails = (name: string) => {\n return ApiHelper.get<ExposureMetaData>(\"getExposureDetails\", {\n name,\n });\n};\n\nexport const getFunctionDetails = (name: string) => {\n return ApiHelper.get<FunctionMetaData>(\"getFunctionDetails\", {\n name,\n });\n};\n\nexport const getSnowflakeStageDetails = (table_rk: string) => {\n return ApiHelper.get<SnowflakeStageMetadata>(\"getSnowflakeStageDetails\", {\n table_rk,\n });\n};\n\nexport const getDbtInfo = (table_rk: string) => {\n return ApiHelper.get<DbtInfoResponse>(\"getDbtInfo\", {\n table_rk,\n });\n};\n\nexport const getColumns = (table: string, refresh: boolean) => {\n return ApiHelper.get<Columns>(\"getColumns\", {\n table,\n refresh,\n });\n};\n\nexport const getConnectedColumns = (body: {\n targets: [string, string][];\n upstreamExpansion: boolean;\n currAnd1HopTables: string[];\n selectedColumn: { name: string; table: string };\n showIndirectEdges: boolean;\n}) => {\n return ApiHelper.get<ColumnLineageResponse>(\"getConnectedColumns\", body);\n};\n\nexport const sendFeedback = (body: { feedback_value: \"good\" | \"bad\"; feedback_text: string }) => {\n return ApiHelper.get<{ ok: boolean }>(\"sendFeedback\", body);\n};\n\nexport const getLineageSettings = () => {\n return ApiHelper.get<LineageSettings>(\"getLineageSettings\", {});\n};\n\nexport const persistLineageSettings = (body: Partial<LineageSettings>) => {\n return ApiHelper.get<{\n ok: boolean;\n }>(\"persistLineageSettings\", body);\n};\n\nexport const initLineage = () => {\n return ApiHelper.get(\"init\", {});\n};\n\nexport const openFile = (url: string) => {\n return ApiHelper.get(\"openFile\", { url });\n};\n\nexport const openChat = () => {\n return ApiHelper.get(\"openChat\", {});\n};\n\nexport const showInfoNotification = (message: string) => {\n return ApiHelper.get(\"showInfoNotification\", { message });\n};\n\nexport const previewFeature = () => {\n return ApiHelper.get(\"previewFeature\", {});\n};\n\nexport const columnLineage = (event: CllEvents) => {\n return ApiHelper.get(\"columnLineage\", { event });\n};\n\nexport const telemetryEvents = (data: Record<string, unknown>) => {\n return ApiHelper.get(\"telemetryEvents\", data);\n};\n\nexport const showExternalViewCodeModal = (data: Record<string, unknown>) => {\n return ApiHelper.get(\"showViewCodeModal\", data);\n};\n\nexport const exportLineage = (data: { name: string; lineage_data: StaticLineage }) => {\n return ApiHelper.post<{ url: string }>(\"dbt/v4/export-lineage\", data);\n};\n\nexport const finalLineageDownload = (data: { column_rk: string }): Promise<void> => {\n return ApiHelper.get<void>(\"finalColumnsDownload\", data);\n};\n","// column lineage with cancellation\n\nimport { columnLineage, showInfoNotification, telemetryEvents } from \"./api\";\n\nexport enum CllEvents {\n CANCEL = \"cancel\",\n END = \"end\",\n START = \"start\",\n}\n\nexport class CLL {\n static isCancelled = false;\n static inProgress = false;\n static linkCount = 0;\n\n static onCancel() {\n CLL.isCancelled = true;\n CLL.inProgress = false;\n }\n\n static cancel() {\n // this is used to cancel from webview\n CLL.onCancel();\n columnLineage(CllEvents.CANCEL);\n const event = new CustomEvent(\"cll_cancelled\", { detail: undefined });\n document.dispatchEvent(event);\n }\n\n static start() {\n CLL.inProgress = true;\n CLL.isCancelled = false;\n CLL.linkCount = 0;\n columnLineage(CllEvents.START);\n }\n\n static end() {\n CLL.inProgress = false;\n columnLineage(CllEvents.END);\n telemetryEvents({\n id: \"columnLineageNumLinks\",\n params: { num: CLL.linkCount },\n });\n CLL.linkCount = 0;\n }\n\n static addLinks(n: number) {\n CLL.linkCount += n;\n }\n\n static showCllInProgressMsg() {\n showInfoNotification(\n \"Column lineage is in progress. Either wait for it to complete or cancel the current one.\"\n );\n }\n}\n","import { FunctionComponent, ReactElement, ReactNode, useMemo } from \"react\";\nimport {\n MacrosIcon,\n MetricsIcon,\n SnapshotIcon,\n AnalysisIcon,\n ExposureIcon,\n SourceIcon,\n SeedIcon,\n ModelIcon,\n GeospatialIcon,\n DatetimeIcon,\n ObjectIcon,\n NumberIcon,\n BooleanIcon,\n TextIcon,\n CteIcon,\n DbtNodeExposureIcon,\n MetricsDarkIcon,\n MetricsLightIcon,\n DbtNodeModelIcon,\n DbtNodeSeedIcon,\n DbtNodeSnapshotIcon,\n DbtNodeSourceIcon,\n DbtNodeSubqueryLightIcon,\n DbtNodeSubqueryDarkIcon,\n FunctionIcon,\n DbtNodeFunctionIcon,\n} from \"../assets/icons\";\nimport styles from \"./styles.module.scss\";\nimport { Tooltip } from \"@altimateai/lego\";\nimport { Stack } from \"@altimateai/lego\";\nimport { useLineageContext } from \"../context/LineageProvider\";\nimport { DIALECT_ICON } from \"./CustomNodes\";\nimport { IconHeartRateMonitor } from \"@tabler/icons-react\";\n\nexport const ColumnDatatype: FunctionComponent<{\n datatype: string;\n color?: string;\n size?: string;\n}> = ({ datatype, color, size = \"1rem\" }) => {\n const [Icon, compColor] = useMemo(() => {\n switch (datatype.toLowerCase()) {\n case \"integer\":\n case \"float\":\n case \"double precision\":\n case \"double\":\n case \"bigint\":\n return [NumberIcon, \"#FF754C\"];\n case \"bool\":\n case \"boolean\":\n return [BooleanIcon, \"#00A5DB\"];\n case \"text\":\n case \"character\":\n case \"character varying\":\n case \"varchar\":\n return [TextIcon, \"#3F8CFF\"];\n case \"geospatial\":\n return [GeospatialIcon, \"#01CD8C\"];\n case \"date\":\n case \"timestamp\":\n case \"timestamp with time zone\":\n return [DatetimeIcon, \"#247EFE\"];\n default:\n return [ObjectIcon, \"#6A24FE\"];\n }\n }, [datatype]);\n\n return (\n <Stack style={{ color: color || compColor }} align=\"center\">\n <Icon width={size} height={size} />\n </Stack>\n );\n};\n\nconst NodeTypeIconsWithColors: Record<string, { light: ReactNode; dark: ReactNode }> = {\n seed: {\n light: <DbtNodeSeedIcon style={{ color: \"#E6FAF4\" }} />,\n dark: <DbtNodeSeedIcon style={{ color: \"#344B49\" }} />,\n },\n model: {\n light: <DbtNodeModelIcon style={{ color: \"#FFECE6\" }} />,\n dark: <DbtNodeModelIcon style={{ color: \"#4D4343\" }} />,\n },\n cte: {\n light: <CteIcon style={{ color: \"#FDF6EA\" }} />,\n dark: <CteIcon style={{ color: \"#4B473F\" }} />,\n },\n subquery: {\n light: <DbtNodeSubqueryLightIcon style={{ color: \"#FDF6EA\" }} />,\n dark: <DbtNodeSubqueryDarkIcon style={{ color: \"#4B473F\" }} />,\n },\n source: {\n light: <DbtNodeSourceIcon style={{ color: \"#EAF3FF\" }} />,\n dark: <DbtNodeSourceIcon style={{ color: \"#384454\" }} />,\n },\n exposure: {\n light: <DbtNodeExposureIcon style={{ color: \"#FEEFF7\" }} />,\n dark: <DbtNodeExposureIcon style={{ color: \"#4C404C\" }} />,\n },\n analysis: { light: <AnalysisIcon />, dark: <AnalysisIcon /> },\n snapshot: {\n light: <DbtNodeSnapshotIcon style={{ color: \"#F6F4FF\" }} />,\n dark: <DbtNodeSnapshotIcon style={{ color: \"#444554\" }} />,\n },\n semantic_model: { light: <MetricsLightIcon />, dark: <MetricsDarkIcon /> },\n macros: { light: <MacrosIcon />, dark: <MacrosIcon /> },\n function: {\n light: <DbtNodeFunctionIcon style={{ color: \"#F0EAFF\" }} />,\n dark: <DbtNodeFunctionIcon style={{ color: \"#3D3654\" }} />,\n },\n unknown: {\n light: <DbtNodeModelIcon style={{ color: \"#FFECE6\" }} />,\n dark: <DbtNodeModelIcon style={{ color: \"#4D4343\" }} />,\n },\n};\n\nexport const NodeTypeIcon: FunctionComponent<{ nodeType: string }> = ({ nodeType }) => (\n <div>\n {nodeType === \"seed\" && <SeedIcon />}\n {nodeType === \"model\" && <ModelIcon />}\n {nodeType === \"cte\" && <ModelIcon />}\n {nodeType === \"subquery\" && <ModelIcon />}\n {nodeType === \"source\" && <SourceIcon />}\n {nodeType === \"exposure\" && <ExposureIcon />}\n {nodeType === \"analysis\" && <AnalysisIcon />}\n {nodeType === \"snapshot\" && <SnapshotIcon />}\n {nodeType === \"semantic_model\" && <MetricsIcon />}\n {nodeType === \"macros\" && <MacrosIcon />}\n {nodeType === \"unknown\" && <ModelIcon />}\n {nodeType === \"function\" && <FunctionIcon />}\n {nodeType === \"dashboard\" && <IconHeartRateMonitor />}\n </div>\n);\n\nexport const NodeIcon = ({ nodeType }: { nodeType: string }) => {\n return nodeType in NODE_TYPE_SHORTHAND ? (\n <NodeTypeIcon nodeType={nodeType} />\n ) : nodeType in DIALECT_ICON ? (\n <img\n src={DIALECT_ICON[nodeType as keyof typeof DIALECT_ICON]}\n className={styles.dialect_icon}\n alt={`${nodeType} dialect icon`}\n />\n ) : (\n <div />\n );\n};\n\nexport const NodeTypeIconForSQL: FunctionComponent<{\n nodeType: string;\n}> = ({ nodeType }) => {\n const {\n state: { theme },\n } = useLineageContext();\n return <>{NodeTypeIconsWithColors[nodeType][theme]}</>;\n};\n\nexport const TableNodePill: FunctionComponent<{\n id: string;\n icon: ReactElement;\n label: string;\n text: string;\n}> = ({ id, icon, text, label }) => (\n <Tooltip title={label}>\n <div className={styles.table_node_pill} id={id}>\n <div className={styles.icon}>{icon}</div>\n <div>{text}</div>\n </div>\n </Tooltip>\n);\n\nexport const NODE_TYPE_STYLES = {\n seed: styles.seed,\n model: styles.model,\n source: styles.source,\n exposure: styles.exposure,\n snapshot: styles.snapshot,\n semantic_model: styles.metrics,\n macros: styles.macros,\n analysis: styles.analysis,\n cte: styles.model,\n subquery: styles.model,\n unknown: styles.exposure,\n function: styles.function_node,\n dashboard: styles.dashboard,\n};\n\nexport const NODE_TYPE_SHORTHAND = {\n seed: \"SED\",\n model: \"MDL\",\n source: \"SRC\",\n exposure: \"EXP\",\n snapshot: \"SNP\",\n semantic_model: \"MET\",\n macros: \"SEM\",\n analysis: \"ANY\",\n cte: \"CTE\",\n subquery: \"SUB\",\n function: \"FNC\",\n dashboard: \"BI\",\n unknown: \"UNK\",\n};\n","import { Edge, isNode, Node, ReactFlowInstance } from \"reactflow\";\nimport {\n applyEdgeStyling,\n C_OFFSET_X,\n C_OFFSET_Y,\n contains,\n createColumnEdge,\n createColumnNode,\n createTableEdge,\n createTableNode,\n deleteIfExists,\n getColumnEdgeId,\n getColumnId,\n getHelperDataForCLL,\n getSeeMoreId,\n isColumn,\n isNotColumn,\n T_LEVEL_SEPARATION,\n MAX_EXPAND_TABLE,\n F_OFFSET_X,\n F_OFFSET_Y,\n safeConcat,\n T_NODE_H,\n T_NODE_W,\n T_NODE_Y_SEPARATION,\n getColY,\n withinExclusive,\n isSeeMore,\n EdgeVisibility,\n ViewsTypes,\n applyNodeStyling,\n toggleModelEdges,\n toggleColumnEdges,\n LEVEL_SEPARATION_VERTICAL,\n T_NODE_Y_SEPARATION_VERTICAL,\n defaultEdgeStyle,\n createOpNode,\n highlightEdgeStyle,\n indirectHighlightEdgeStyle,\n} from \"./utils\";\nimport { CollectColumn, ColumnLineage, Confidence, Details, SelectedColumn, Table } from \"./types\";\nimport { COLUMN_PREFIX } from \"./constants\";\nimport { TMoreTables } from \"./components/MoreTables\";\nimport { CLL } from \"./cllUtils\";\nimport { downstreamTables, getConnectedColumns, upstreamTables } from \"./api\";\nimport { NODE_TYPE_SHORTHAND } from \"./components/Column\";\nimport { Dispatch, ReducerWithoutAction } from \"react\";\n\nconst getConnectedTables = (right: boolean, table: string) =>\n right ? upstreamTables(table) : downstreamTables(table);\nconst calculateNewLevel = (right: boolean, i: number) => (right ? i + 1 : i - 1);\n\nexport const createNewNodesEdges = (\n nodes: Node[],\n edges: Edge[],\n tables: Table[],\n t: string,\n right: boolean,\n level: number,\n max_expand_table = MAX_EXPAND_TABLE,\n isVertical = false,\n details?: Details | null\n) => {\n const newLevel = calculateNewLevel(right, level);\n\n const addUniqueEdge = (to: string, source?: string) => {\n const toLevel = nodes.find(n => n.id === to)?.data?.level || 0;\n const _edge = createTableEdge(level, toLevel, t, to, right, isVertical, source);\n const existingEdge = edges.find(e => e.id === _edge.id);\n if (!existingEdge) edges.push(_edge);\n };\n\n let tableAdded = 0;\n for (const _t of tables) {\n if (tableAdded >= max_expand_table) {\n const nodeId = getSeeMoreId(t, right);\n nodes.push({\n id: nodeId,\n data: { tables, prevTable: t, right, level: newLevel },\n position: { x: 100, y: 100 },\n type: \"seeMore\",\n width: T_NODE_W,\n height: 100,\n });\n addUniqueEdge(nodeId);\n break;\n }\n const existingNode = nodes.find(_n => _n.id === _t.table);\n if (!existingNode) {\n tableAdded++;\n if (!details) {\n nodes.push(createTableNode(_t, newLevel, t));\n } else {\n const opType = details[_t.table].type;\n if (opType in NODE_TYPE_SHORTHAND) {\n nodes.push(createTableNode(_t, newLevel, t));\n } else {\n nodes.push(createOpNode(_t.table, newLevel, t, details[_t.table]));\n }\n }\n }\n addUniqueEdge(_t.table, _t.source);\n }\n};\n\nexport const layoutElementsOnCanvas = (nodes: Node[], edges: Edge[], isVertical = false) => {\n let minLevel = Infinity;\n let maxLevel = -Infinity;\n const tableWiseColumnCount: Record<string, number> = {};\n\n for (const n of nodes) {\n if (isColumn(n) && n.parentNode) {\n // assign position to columns earlier as they are relative to parent\n if (!(n.parentNode in tableWiseColumnCount)) {\n tableWiseColumnCount[n.parentNode] = 0;\n }\n\n n.position = {\n x: C_OFFSET_X,\n y: C_OFFSET_Y + getColY(tableWiseColumnCount[n.parentNode]),\n };\n tableWiseColumnCount[n.parentNode]++;\n } else {\n // calculate bounds along x axis\n const { level } = n.data;\n minLevel = Math.min(minLevel, level);\n maxLevel = Math.max(maxLevel, level);\n }\n }\n\n const tableWiseLevelColumnCount: Record<string, number> = {};\n const levelWiseTables: Record<number, string[]> = {};\n const tableWiseLevelPos: Record<string, number> = {};\n const visited: Record<string, boolean> = {};\n\n // create neightbours list for convenience\n const adjacencyListRight: Record<string, string[]> = {};\n const adjacencyListLeft: Record<string, string[]> = {};\n for (const e of edges) {\n if (isColumn(e)) continue;\n if (\n isSeeMore(nodes.find(x => x.id === e.source)!) ||\n isSeeMore(nodes.find(x => x.id === e.target)!)\n )\n continue;\n adjacencyListRight[e.source] = adjacencyListRight[e.source] || [];\n adjacencyListRight[e.source].push(e.target);\n adjacencyListLeft[e.target] = adjacencyListLeft[e.target] || [];\n adjacencyListLeft[e.target].push(e.source);\n }\n\n // calculate metadata such as tables and columns per level\n // to get tables position along y axis\n const processNode = (n: Node) => {\n const { level } = n.data;\n levelWiseTables[level] = levelWiseTables[level] || [];\n if (!levelWiseTables[level].includes(n.id)) {\n tableWiseLevelPos[n.id] = levelWiseTables[level].length;\n tableWiseLevelColumnCount[n.id] = 0;\n for (const curr of levelWiseTables[level])\n tableWiseLevelColumnCount[n.id] += tableWiseColumnCount[curr] || 0;\n levelWiseTables[level].push(n.id);\n }\n };\n const dfs = (n: string, adjacencyList: Record<string, string[]>) => {\n if (visited[n]) return;\n visited[n] = true;\n processNode(nodes.find(item => item.id === n)!);\n for (const m of adjacencyList[n] || []) dfs(m, adjacencyList);\n };\n\n for (const n of nodes) {\n if (isColumn(n)) continue;\n if (isSeeMore(n)) continue;\n if (visited[n.id]) continue;\n dfs(n.id, adjacencyListRight);\n visited[n.id] = false;\n dfs(n.id, adjacencyListLeft);\n }\n // will place see more node at the end of level\n for (const n of nodes) {\n if (isColumn(n)) continue;\n if (!isSeeMore(n)) continue;\n processNode(n);\n }\n\n // assign position to table and see more nodes\n const getY = (n: Node) => {\n const _index = tableWiseLevelPos[n.id] || 0;\n const _columnCount = tableWiseLevelColumnCount[n.id] || 0;\n return F_OFFSET_Y + _index * (T_NODE_H + T_NODE_Y_SEPARATION) + getColY(_columnCount, _index);\n };\n\n const getX = (level: number) => {\n const basisLevel = level - minLevel;\n return basisLevel * (T_NODE_W + T_LEVEL_SEPARATION) + F_OFFSET_X;\n };\n\n const getYVertical = (level: number) => {\n const basisLevel = level - minLevel;\n return basisLevel * (T_NODE_H + LEVEL_SEPARATION_VERTICAL) + F_OFFSET_Y;\n };\n\n const getXVertical = (n: Node) => {\n const _index = tableWiseLevelPos[n.id] || 0;\n const _columnCount = tableWiseLevelColumnCount[n.id] || 0;\n return (\n F_OFFSET_Y +\n _index * (T_NODE_H + T_NODE_Y_SEPARATION_VERTICAL) +\n getColY(_columnCount, _index)\n );\n };\n\n for (const n of nodes) {\n if (isColumn(n)) continue;\n const { level } = n.data;\n n.position = isVertical\n ? { x: getXVertical(n), y: getYVertical(level) }\n : { x: getX(level), y: getY(n) };\n }\n};\n\nexport const resetTableHighlights = (nodes: Node[], edges: Edge[]): [Node[], Edge[]] => {\n nodes.forEach(n => applyNodeStyling(n, true));\n edges.forEach(e => applyEdgeStyling(e, false));\n return [nodes, edges];\n};\n\nexport const highlightTableConnections = (\n nodes: Node[],\n edges: Edge[],\n table: string\n): [Node[], Edge[]] => {\n // Model edges might be hidden when column lineage was selected\n // hide column lineage edges and show all other edges\n toggleModelEdges(edges, true);\n toggleColumnEdges(edges, false);\n\n const highlightNode: Record<string, boolean> = {};\n const highlightEdge: Record<string, boolean> = {};\n const bfsTraversal = (src: \"source\" | \"target\", dst: \"source\" | \"target\") => {\n const queue = [table];\n const visited: Record<string, boolean> = {};\n while (queue.length > 0) {\n const curr = queue.shift()!;\n visited[curr] = true;\n highlightNode[curr] = true;\n edges.forEach(e => {\n if (e[src] === curr) {\n highlightEdge[e.id] = true;\n if (!visited[e[dst]]) queue.push(e[dst]);\n }\n });\n }\n };\n bfsTraversal(\"source\", \"target\");\n bfsTraversal(\"target\", \"source\");\n\n // apply styling\n const newEdges = [...edges];\n newEdges.forEach(_e => applyEdgeStyling(_e, highlightEdge[_e.id]));\n\n const newNodes = [...nodes];\n newNodes.forEach(_n => applyNodeStyling(_n, Boolean(highlightNode[_n.id])));\n\n return [newNodes, newEdges];\n};\n\nexport const setHighlightedTableConnections = (flow: ReactFlowInstance, table: string) => {\n const _nodes = flow.getNodes();\n const _edges = flow.getEdges();\n const [nodes, edges] = highlightTableConnections(_nodes, _edges, table);\n flow.setNodes(nodes);\n flow.setEdges(edges);\n};\n\n// TODO: fix member_profile-> expand left, expand right, collapse left, collapse right\nexport const removeRelatedNodesEdges = (\n prevNodes: Node[],\n prevEdges: Edge[],\n table: string,\n right: boolean,\n level: number\n): [Node[], Edge[]] => {\n const nodesToRemove: Record<string, boolean> = {};\n const edgesToRemove: Record<string, boolean> = {};\n const src = right ? \"source\" : \"target\";\n const dst = !right ? \"source\" : \"target\";\n\n const nodesIdMap: Record<string, Node> = {};\n for (const n of prevNodes) {\n if (isColumn(n)) continue;\n nodesIdMap[n.id] = n;\n }\n\n // TODO: check visited == nodesToRemove\n const queue = [table];\n const visited: Record<string, boolean> = {};\n while (queue.length > 0) {\n const curr = queue.shift()!;\n visited[curr] = true;\n prevEdges.forEach(e => {\n const performVisit = (src: \"source\" | \"target\", dst: \"source\" | \"target\") => {\n if (e[src] !== curr) return;\n const _t = e[dst];\n if (visited[_t]) return;\n const _level = nodesIdMap[_t].data.level;\n if ((right && _level > level) || (!right && _level < level)) {\n queue.push(_t);\n nodesToRemove[_t] = true;\n }\n };\n performVisit(src, dst);\n performVisit(dst, src);\n });\n }\n\n const columnNodesToRemove: Record<string, boolean> = {};\n const columnEdgesToRemove: Record<string, boolean> = {};\n\n prevNodes.forEach(n => {\n if (!nodesToRemove[n.parentNode || \"\"]) return;\n columnNodesToRemove[n.id] = true;\n });\n\n prevEdges.forEach(e => {\n if (isNotColumn(e)) {\n edgesToRemove[e.id] = nodesToRemove[e.source] || nodesToRemove[e.target] || e[src] === table;\n } else {\n columnEdgesToRemove[e.id] = columnNodesToRemove[e.source] || columnNodesToRemove[e.target];\n }\n });\n\n const remove = (dict: Record<string, boolean>) => (x: { id: string | number }) => !dict[x.id];\n\n const newNodes = prevNodes.filter(remove(columnNodesToRemove)).filter(remove(nodesToRemove));\n const newEdges = prevEdges.filter(remove(columnEdgesToRemove)).filter(remove(edgesToRemove));\n\n return [newNodes, newEdges];\n};\n\nconst processColumnLineage = async (\n prevNodes: Node[],\n levelMap: Record<string, number>,\n seeMoreIdTableReverseMap: Record<string, string>,\n tableNodes: Record<string, boolean>,\n curr: [string, string][],\n right: boolean,\n currAnd1HopTables: string[],\n selectedColumn: SelectedColumn,\n edgeVisibility: EdgeVisibility,\n setErrors: Dispatch<ReducerWithoutAction<Record<string, string[]>>>\n) => {\n const nodes: Node[] = [];\n const edges: Edge[] = [];\n\n const { column_lineage, confidence, errors } = await getConnectedColumns({\n targets: curr,\n upstreamExpansion: right,\n currAnd1HopTables,\n selectedColumn,\n showIndirectEdges: edgeVisibility[\"indirect\"],\n });\n setErrors(prev => ({ ...prev, ...errors }));\n CLL.addLinks(column_lineage.length);\n const columnLineage = column_lineage.filter(e =>\n right ? contains(curr, e.source) : contains(curr, e.target)\n );\n const newCurr = columnLineage.map(e => (right ? e.target : e.source));\n const collectColumns: Record<string, CollectColumn[]> = {};\n\n const addToCollectColumns = ([_table, _column]: [string, string], viewsType?: ViewsTypes) => {\n collectColumns[_table] = collectColumns[_table] || [];\n const _existingColumn = collectColumns[_table].find(c => c.column === _column);\n if (!_existingColumn) {\n collectColumns[_table].push({ column: _column, viewsType });\n } else if (viewsType === \"Transformation\") {\n _existingColumn.viewsType = viewsType;\n }\n };\n\n const addToEdges = (id1: string, id2: string, source: string, target: string, type: string) => {\n const id = getColumnEdgeId(source, target);\n if (edges.find(e => e.id === id)) return;\n edges.push(\n createColumnEdge(source, target, levelMap[id1], levelMap[id2], type, edgeVisibility)\n );\n };\n\n const seeMoreLineage: ColumnLineage[] = [];\n for (const e of columnLineage) {\n addToCollectColumns(e.source);\n addToCollectColumns(e.target, e.viewsType);\n const [t0] = e.source;\n const [t1] = e.target;\n\n const sourceTableExist = tableNodes[t0];\n const targetTableExist = tableNodes[t1];\n const sourceId = e.source.join(\"/\");\n const targetId = e.target.join(\"/\");\n const source = COLUMN_PREFIX + sourceId;\n const target = COLUMN_PREFIX + targetId;\n\n const edgeType = e.type;\n if (sourceTableExist && targetTableExist) {\n addToEdges(t0, t1, source, target, edgeType);\n } else if (sourceTableExist) {\n const seeMoreId = seeMoreIdTableReverseMap[t1];\n addToEdges(t0, seeMoreId, source, seeMoreId, edgeType);\n seeMoreLineage.push(e);\n } else if (targetTableExist) {\n const seeMoreId = seeMoreIdTableReverseMap[t0];\n addToEdges(seeMoreId, t1, seeMoreId, target, edgeType);\n seeMoreLineage.push(e);\n } else {\n seeMoreLineage.push(e);\n // TODO: check is nothing to do in this case\n }\n }\n\n for (const t in collectColumns) {\n if (!tableNodes[t]) continue;\n const arr = [...collectColumns[t]];\n arr.sort((a, b) => a.column.localeCompare(b.column));\n for (const c of arr) {\n const viewsCodes: Record<string, [string, string][]> = {};\n columnLineage\n .filter(e => e.target.join(\"/\") === `${t}/${c.column}`)\n .forEach(e => {\n if (e.type === \"indirect\") return;\n viewsCodes[e.source.join(\"/\")] = e.viewsCode || [];\n });\n nodes.push(\n createColumnNode(\n t,\n c.column,\n c.viewsType,\n viewsCodes,\n prevNodes.find(n => (n.id = t))?.data?.nodeType\n )\n );\n }\n }\n\n return { nodes, edges, collectColumns, newCurr, confidence, seeMoreLineage };\n};\n\nexport const staticProcessColumnLineage = async (\n _nodes: Node[],\n _edges: Edge[],\n column_rk: string,\n postConnectedColumns: (args: {\n column_fqn: string;\n edges: { src: string; dst: string }[];\n }) => Promise<{\n collect_columns: Record<string, CollectColumn[]>;\n highlight_edges: [string, string, string][];\n }>\n) => {\n let nodes = _nodes.filter(isNotColumn);\n let edges = _edges.filter(isNotColumn);\n [nodes, edges] = resetTableHighlights(nodes, edges);\n\n const levelMap: Record<string, number> = {};\n nodes.forEach(n => (levelMap[n.id] = n.data.level));\n\n const tableNodes: Record<string, boolean> = {};\n _nodes.filter(_n => _n.type === \"table\").forEach(_n => (tableNodes[_n.id] = true));\n const seeMoreIdTableReverseMap: Record<string, string> = {};\n const edgesPayload = [];\n for (const e of _edges) {\n if (e.id.startsWith(COLUMN_PREFIX)) continue;\n const sourceTableExist = tableNodes[e.source];\n const targetTableExist = tableNodes[e.target];\n if (sourceTableExist && targetTableExist) {\n edgesPayload.push({ src: e.source, dst: e.target });\n } else if (sourceTableExist) {\n const _n = _nodes.find(_n => _n.id === e.target)!;\n _n.data.tables?.forEach((_t: Table) => {\n edgesPayload.push({ src: e.source, dst: _t.table });\n seeMoreIdTableReverseMap[_t.table] = e.target;\n });\n } else if (targetTableExist) {\n const _n = _nodes.find(_n => _n.id === e.source)!;\n _n.data.tables?.forEach((_t: Table) => {\n edgesPayload.push({ src: _t.table, dst: e.target });\n seeMoreIdTableReverseMap[_t.table] = e.source;\n });\n } else {\n // TODO: check is nothing to do in this case\n }\n }\n\n const { collect_columns, highlight_edges } = await postConnectedColumns({\n column_fqn: column_rk,\n edges: edgesPayload,\n });\n\n for (const t in collect_columns) {\n if (!tableNodes[t]) continue;\n const arr = [...collect_columns[t]];\n arr.sort((a, b) => a.column.localeCompare(b.column));\n for (const c of arr) {\n const nodeType = _nodes.find(n => n.id === t)?.data?.nodeType;\n nodes.push(createColumnNode(t, c.column, c.viewsType, {}, nodeType));\n }\n }\n\n edges.forEach(_e => (_e.style = defaultEdgeStyle));\n const addToEdges = (\n id1: string,\n id2: string,\n source: string,\n target: string,\n edgeType: string\n ) => {\n const id = getColumnEdgeId(source, target);\n if (edges.find(e => e.id === id)) return;\n edges.push(\n createColumnEdge(source, target, levelMap[id1], levelMap[id2], edgeType, {\n direct: edgeType === \"direct\",\n indirect: edgeType === \"indirect\",\n })\n );\n };\n const seeMoreLineage = [];\n\n for (const e of highlight_edges) {\n const [t0] = e[0].split(\"/\");\n const [t1] = e[1].split(\"/\");\n const sourceTableExist = tableNodes[t0];\n const targetTableExist = tableNodes[t1];\n const source = COLUMN_PREFIX + e[0];\n const target = COLUMN_PREFIX + e[1];\n const edgeType = e[2] || \"direct\";\n if (sourceTableExist && targetTableExist) {\n addToEdges(t0, t1, source, target, edgeType);\n } else if (sourceTableExist) {\n const seeMoreId = seeMoreIdTableReverseMap[t1];\n addToEdges(t0, seeMoreId, source, seeMoreId, edgeType);\n seeMoreLineage.push(e);\n } else if (targetTableExist) {\n const seeMoreId = seeMoreIdTableReverseMap[t0];\n addToEdges(seeMoreId, t1, seeMoreId, target, edgeType);\n seeMoreLineage.push(e);\n } else {\n seeMoreLineage.push(e);\n // TODO: check is nothing to do in this case\n }\n }\n\n layoutElementsOnCanvas(nodes, edges);\n\n return { nodes, edges, collect_columns };\n};\n\nconst mergeNodesEdges = (\n prevState: { nodes: Node[]; edges: Edge[] },\n patchState: { nodes: Node[]; edges: Edge[] },\n selectedColumn: SelectedColumn,\n right: boolean\n): [Node[], Edge[]] => {\n const nodes = [...prevState.nodes];\n const edges = [...prevState.edges];\n patchState.nodes.forEach(n => {\n const existing = nodes.find(x => x.id === n.id);\n if (!existing) {\n nodes.push(n);\n } else {\n const viewsCode =\n n.data.viewsCode && Object.keys(n.data.viewsCode).length\n ? n.data.viewsCode\n : existing.data.viewsCode;\n existing.data = {\n ...existing.data,\n ...n.data,\n viewsCode,\n viewsType: existing.data.viewsType || n.data.viewsType,\n };\n }\n });\n\n patchState.edges.forEach(e => {\n if (edges.find(e1 => e1.id === e.id)) return;\n edges.push(e);\n });\n\n if (selectedColumn.name) {\n const edgeType: Record<string, string> = {};\n const start = getColumnId(selectedColumn.table, selectedColumn.name);\n const columnEdgeType: Record<string, string> = { [start]: \"direct\" };\n const queue = [start];\n const visited: Record<string, boolean> = {};\n const src = right ? \"source\" : \"target\";\n const dst = !right ? \"source\" : \"target\";\n while (queue.length > 0) {\n const curr = queue.shift()!;\n if (visited[curr]) continue;\n visited[curr] = true;\n // 1st pass to collect which type of edge comes towards target column\n for (const e of edges) {\n if (e[src] !== curr) continue;\n queue.push(e[dst]);\n if (columnEdgeType[e[dst]] === \"direct\") continue;\n columnEdgeType[e[dst]] = columnEdgeType[e[src]] === \"direct\" ? e.data.type : \"indirect\";\n }\n // 2nd pass to assign type to edge\n for (const e of edges) {\n if (e[src] !== curr) continue;\n edgeType[e.id] = columnEdgeType[e[dst]];\n }\n }\n for (const e of edges) {\n if (isNotColumn(e)) continue;\n e.data.type = edgeType[e.id] || e.data.type;\n e.style = e.data.type === \"direct\" ? highlightEdgeStyle : indirectHighlightEdgeStyle;\n }\n }\n\n layoutElementsOnCanvas(nodes, edges);\n return [nodes, edges];\n};\n\nexport const removeColumnNodes = (_nodes: Node[], _edges: Edge[]): [Node[], Edge[]] => {\n const nodes = _nodes.filter(n => isNotColumn(n));\n const edges = _edges.filter(n => isNotColumn(n));\n return [nodes, edges];\n};\n\nexport const expandTableLineage = async (\n _nodes: Node[],\n _edges: Edge[],\n table: string,\n right: boolean\n): Promise<[Node[], Edge[]]> => {\n const nodes = [..._nodes];\n const edges = [..._edges];\n const queue: { table: string; level: number }[] = [\n { table, level: nodes.find(n => n.id === table)!.data.level },\n ];\n const visited: Record<string, boolean> = {};\n while (queue.length > 0) {\n const { table, level } = queue.shift()!;\n if (visited[table]) continue;\n visited[table] = true;\n const { tables } = await getConnectedTables(right, table);\n createNewNodesEdges(nodes, edges, tables, table, right, level);\n tables.forEach(t => {\n const _t = nodes.find(n => n.id === t.table);\n if (_t?.data.materialization === \"ephemeral\") {\n queue.push({ table: t.table, level: _t.data.level });\n }\n });\n }\n return [nodes, edges];\n};\n\nexport const expandTableLineageLevelWise = async (\n _nodes: Node[],\n _edges: Edge[],\n _table: string,\n lb: number, // lower bound\n ub: number, // upper bound\n max_expand_table: number = MAX_EXPAND_TABLE\n): Promise<[Node[], Edge[]]> => {\n const nodes = [..._nodes];\n const edges = [..._edges];\n if (lb >= ub) return [nodes, edges];\n const withinExcBounds = withinExclusive(lb, ub);\n const rootLevel = nodes.find(n => n.id === _table)!.data.level;\n const bfs = async (right: boolean) => {\n const queue: { table: string; level: number }[] = [{ table: _table, level: rootLevel }];\n const visited: Record<string, boolean> = {};\n while (queue.length > 0) {\n const curr = queue.shift()!;\n if (visited[curr.table]) continue;\n visited[curr.table] = true;\n const { tables = [] } = await getConnectedTables(right, curr.table);\n createNewNodesEdges(nodes, edges, tables, curr.table, right, curr.level, max_expand_table);\n const newLevel = calculateNewLevel(right, curr.level);\n if (withinExcBounds(newLevel)) {\n queue.push(...tables.map(t => ({ table: t.table, level: newLevel })));\n } else {\n queue.push(\n ...tables\n .filter(t => t.materialization === \"ephemeral\")\n .map(t => ({ table: t.table, level: newLevel }))\n );\n }\n }\n };\n if (ub > rootLevel) await bfs(true);\n if (lb < rootLevel) await bfs(false);\n\n return [nodes, edges];\n};\n\nconst _calculateMinLevel = (\n nodes: Node[],\n edges: Edge[],\n table: string,\n right: boolean\n): number => {\n if (!table) return -1;\n const src = right ? \"source\" : \"target\";\n const dst = right ? \"target\" : \"source\";\n const countKey = right ? \"upstreamCount\" : \"downstreamCount\";\n\n const nodesMap: Record<string, Node> = {};\n const adjacencyList: Record<string, string[]> = {};\n for (const n of nodes) {\n if (isColumn(n)) continue;\n nodesMap[n.id] = n;\n adjacencyList[n.id] = [];\n }\n for (const e of edges) {\n if (isColumn(e)) continue;\n adjacencyList[e[src]].push(e[dst]);\n }\n\n // get the node with lowest level which can be expanded but not yet expanded\n const bfs = () => {\n const queue = [table];\n const visited: Record<string, boolean> = {};\n while (queue.length > 0) {\n const curr = queue.shift()!;\n if (visited[curr]) continue;\n visited[curr] = true;\n const nodeData = nodesMap[curr].data;\n if (nodeData[countKey] === 0) continue;\n if (adjacencyList[curr].length < nodeData[countKey]) return curr;\n for (const n of adjacencyList[curr]) queue.push(n);\n }\n };\n const targetNode = bfs();\n\n // unable to find such node means everything is already expanded\n if (!targetNode) return -1;\n const { level: rootLevel } = nodesMap[table].data;\n const { level: targetLevel } = nodesMap[targetNode].data;\n return right ? targetLevel - rootLevel : rootLevel - targetLevel;\n};\n\nexport const calculateMinLevel = (\n nodes: Node[],\n edges: Edge[],\n table: string\n): [number, number] => [\n _calculateMinLevel(nodes, edges, table, false),\n _calculateMinLevel(nodes, edges, table, true),\n];\n\nexport const bfsTraversal = async (\n nodes: Node[],\n edges: Edge[],\n right: boolean,\n columns: { name: string; table: string }[],\n setConfidence: (operatorList: Confidence[\"operator_list\"]) => void,\n setMoreTables: (moreTables: ColumnLineage[]) => void,\n mergeCollectColumns: (newCollectColumns: Record<string, CollectColumn[]>) => void,\n getNodesEdges: () => [Node[], Edge[]],\n setNodesEdges: (ns: Node[], es: Edge[]) => void,\n selectedColumn: SelectedColumn,\n edgeVisibility: EdgeVisibility,\n setErrors: Dispatch<ReducerWithoutAction<Record<string, string[]>>>\n): Promise<boolean> => {\n let isLineage = false;\n // creating helper data for current lineage once\n const { levelMap, tableNodes, seeMoreIdTableReverseMap } = getHelperDataForCLL(nodes, edges);\n\n const _getNode = (id: string) => nodes.find(n => n.id === id);\n\n const visited: Record<string, boolean> = {};\n const ephemeralAncestors: Record<string, [string, string][]> = {};\n let currTargetColumns: [string, string][] = columns.map(c => [c.table, c.name]);\n let currEphemeralNodes: string[] = [];\n setErrors(() => ({}));\n while (true as boolean) {\n if (CLL.isCancelled) break;\n currTargetColumns = currTargetColumns.filter(x => !visited[x.join(\"/\")]);\n if (currTargetColumns.length === 0 && currEphemeralNodes.length === 0) {\n break;\n }\n const currTargetTables: Record<string, boolean> = {};\n currTargetColumns.forEach(x => {\n visited[x.join(\"/\")] = true;\n currTargetTables[x[0]] = true;\n });\n\n const [src, dst]: (\"source\" | \"target\")[] = right ? [\"source\", \"target\"] : [\"target\", \"source\"];\n const hop1Tables: string[] = [];\n const _currEphemeralNodes: string[] = [];\n const collectEphemeralAncestors: string[] = [];\n let noDependents = false;\n for (const e of edges) {\n if (isColumn(e)) continue;\n const srcTable = e[src];\n const dstNode = e[dst];\n const dstTables = tableNodes[dstNode]\n ? [_getNode(dstNode)?.data as Table]\n : (_getNode(dstNode)?.data as TMoreTables)?.tables?.filter(t => !tableNodes[t.table]);\n dstTables?.forEach(dstTableData => {\n if (!dstTableData) return;\n const { table: dstTable, materialization } = dstTableData;\n if (currTargetTables[srcTable]) {\n noDependents = true;\n if (materialization === \"ephemeral\") {\n // carry forward\n safeConcat(\n ephemeralAncestors,\n dstTable,\n currTargetColumns.filter(c => c[0] === srcTable)\n );\n _currEphemeralNodes.push(dstTable);\n } else {\n hop1Tables.push(dstTable);\n }\n } else if (currEphemeralNodes.includes(srcTable)) {\n noDependents = true;\n if (materialization === \"ephemeral\") {\n // carry forward follow through\n safeConcat(ephemeralAncestors, dstTable, ephemeralAncestors[srcTable]);\n _currEphemeralNodes.push(dstTable);\n } else {\n collectEphemeralAncestors.push(srcTable);\n hop1Tables.push(dstTable);\n }\n }\n });\n }\n if (!noDependents) {\n break;\n }\n currEphemeralNodes = _currEphemeralNodes;\n\n const currAnd1HopTables = Object.keys(currTargetTables).concat(hop1Tables);\n\n collectEphemeralAncestors.forEach(t => {\n currTargetColumns.push(...ephemeralAncestors[t]);\n currAnd1HopTables.push(...ephemeralAncestors[t].map(c => c[0]));\n });\n const patchState = await processColumnLineage(\n nodes,\n levelMap,\n seeMoreIdTableReverseMap,\n tableNodes,\n currTargetColumns,\n right,\n Array.from(new Set(currAnd1HopTables)),\n selectedColumn,\n edgeVisibility,\n setErrors\n );\n if (patchState.confidence?.confidence === \"low\") {\n setConfidence(patchState.confidence?.operator_list || []);\n }\n currTargetColumns = patchState.newCurr;\n if (!isLineage && currTargetColumns.length > 0) {\n isLineage = true;\n }\n currTargetColumns = currTargetColumns.filter(\n c => edges.filter(e => (right ? e.source : e.target) === c[0]).length > 0\n );\n const [ns, es] = getNodesEdges();\n const [_nodes, _edges] = mergeNodesEdges(\n { nodes: ns, edges: es },\n patchState,\n selectedColumn,\n right\n );\n\n setMoreTables(patchState.seeMoreLineage);\n\n layoutElementsOnCanvas(_nodes, _edges);\n setNodesEdges(_nodes, _edges);\n mergeCollectColumns(patchState.collectColumns);\n }\n return isLineage;\n};\n\nexport const moveTableFromSeeMoreToCanvas = (\n nodes: Node[],\n edges: Edge[],\n _table: Table,\n { prevTable, tables, right, level, lineage }: TMoreTables,\n edgeVisibility: EdgeVisibility\n): boolean => {\n const { table } = _table;\n const node = nodes.find(n => n.id === table);\n if (node) return false;\n nodes.push(createTableNode(_table, level!, prevTable!));\n const fromLevel = nodes.find(n => n.id === prevTable)?.data.level;\n edges.push(createTableEdge(fromLevel, level!, prevTable!, table, right!, false, _table.source));\n lineage?.forEach(e => {\n const src = getColumnId(e.source[0], e.source[1]);\n const dst = getColumnId(e.target[0], e.target[1]);\n const viewsCodes: Record<string, [string, string][]> = {};\n if (right) {\n lineage\n .filter(e1 => e1.target.join(\"/\") === e.target.join(\"/\"))\n .forEach(e1 => {\n viewsCodes[e1.source.join(\"/\")] = e1.viewsCode || [];\n });\n }\n if (right) {\n if (e.target[0] !== table) return;\n nodes.push(\n createColumnNode(e.target[0], e.target[1], e.viewsType, viewsCodes, _table.nodeType)\n );\n edges.push(createColumnEdge(src, dst, level! - 1, level!, e.type, edgeVisibility));\n } else {\n if (e.source[0] !== table) return;\n nodes.push(\n createColumnNode(e.source[0], e.source[1], e.viewsType, viewsCodes, _table.nodeType)\n );\n edges.push(createColumnEdge(src, dst, level!, level! + 1, e.type, edgeVisibility));\n }\n });\n\n if (tables!.every(t => !!nodes.find(n => n.id === t.table))) {\n const seeMoreNodeId = getSeeMoreId(prevTable!, right!);\n const seeMoreEdgeId = right ? `${prevTable}-${seeMoreNodeId}` : `${seeMoreNodeId}-${prevTable}`;\n deleteIfExists(nodes, seeMoreNodeId);\n deleteIfExists(edges, seeMoreEdgeId);\n return true;\n }\n return false;\n};\n\nexport const calculateNodeCount = async (\n nodes: Node[],\n edges: Edge[],\n selectedTable: string,\n leftExpansion: number,\n rightExpansion: number\n): Promise<number> => {\n if (!selectedTable) return 0;\n const selectedTableData = nodes.find(n => n.id === selectedTable)?.data;\n if (!selectedTableData) return 0;\n const { level } = selectedTableData;\n const startingNodesNum = nodes.length;\n const [newNodes] = await expandTableLineageLevelWise(\n nodes,\n edges,\n selectedTable,\n level - leftExpansion,\n level + rightExpansion,\n Infinity\n );\n return newNodes.length - startingNodesNum;\n};\n\nconst getTracedNode = (node: Node, nodes: Node[], edges: Edge[], isIncomer: boolean) => {\n if (!isNode(node)) {\n return { nodes: [], edgeIds: [] };\n }\n\n const tracedEdges = edges.filter(e => {\n const id = isIncomer ? e.target : e.source;\n\n return id === node.id;\n });\n\n return {\n nodes: nodes.filter(n => tracedEdges.find(e => e.source === n.id || e.target === n.id)),\n edgeIds: tracedEdges.map(e => getColumnEdgeId(e.source, e.target)),\n };\n};\n\nexport const getAllTracedNodes = (\n node: Node,\n nodes: Node[],\n edges: Edge[],\n prevTraced = [] as Node[],\n isIncomer: boolean\n) => {\n const { nodes: tracedNodes, edgeIds } = getTracedNode(node, nodes, edges, isIncomer);\n\n return tracedNodes.reduce(\n (memo, tracedNode) => {\n memo.nodes.push(tracedNode);\n memo.edges = Array.from(new Set([...memo.edges, ...edgeIds]));\n\n if (prevTraced.findIndex(n => n.id === tracedNode.id) === -1) {\n prevTraced.push(tracedNode);\n\n const { nodes: _nodes, edges: _edgeIds } = getAllTracedNodes(\n tracedNode,\n nodes,\n edges,\n prevTraced,\n isIncomer\n );\n _nodes.forEach(foundNode => {\n memo.nodes.push(foundNode);\n\n if (prevTraced.findIndex(n => n.id === foundNode.id) === -1) {\n prevTraced.push(foundNode);\n }\n });\n memo.edges = Array.from(new Set([...memo.edges, ..._edgeIds]));\n }\n\n return memo;\n },\n { nodes: [] as Node[], edges: [] as string[] }\n );\n};\n\nexport const highlightColumnConnections = (node: Node, flow: ReactFlowInstance) => {\n const nodes = flow.getNodes().filter(n => isColumn(n));\n const edges = flow.getEdges();\n\n // TODO check why styles are not applied when nodes and edges are directly from flow instance\n nodes.forEach(n => {\n const node = flow.getNode(n.id);\n if (node) {\n applyNodeStyling(node, false);\n }\n });\n edges.forEach(e => {\n const edge = flow.getEdge(e.id);\n if (edge) {\n edge.hidden = true;\n applyEdgeStyling(edge, false);\n }\n });\n\n const incomingNodes = getAllTracedNodes(node, nodes, edges, [], true);\n const outgoingNodes = getAllTracedNodes(node, nodes, edges, [], false);\n\n [incomingNodes, outgoingNodes].forEach(({ nodes: tracedNodes, edges }) => {\n tracedNodes.forEach(n => {\n const node = flow.getNode(n.id);\n if (node) {\n applyNodeStyling(node, true);\n }\n });\n edges.forEach(edgeId => {\n const edge = flow.getEdge(edgeId);\n if (edge) {\n edge.hidden = false;\n applyEdgeStyling(edge, true);\n }\n });\n });\n};\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React, {\n FunctionComponent,\n MouseEvent,\n PropsWithChildren,\n ReducerWithoutAction,\n useCallback,\n useMemo,\n} from \"react\";\nimport { BaseEdge, EdgeProps, Handle, NodeProps, Position, useReactFlow } from \"reactflow\";\nimport styles from \"./styles.module.scss\";\nimport classNames from \"classnames\";\nimport {\n bfsTraversal,\n calculateMinLevel,\n calculateNodeCount,\n expandTableLineage,\n highlightColumnConnections,\n highlightTableConnections,\n layoutElementsOnCanvas,\n setHighlightedTableConnections,\n} from \"../graph\";\nimport {\n getColumnId,\n getColY,\n getSeeMoreId,\n VIEWS_TYPE_COLOR,\n toggleColumnEdges,\n toggleModelEdges,\n ViewsTypes,\n T_NODE_W,\n} from \"../utils\";\nimport { TMoreTables } from \"./MoreTables\";\n\nimport {\n TestsIcon,\n EphemeralIcon,\n ExternalProjectIcon,\n SqlFilterIcon,\n SqlGroupByIcon,\n SqlInnerJoinIcon,\n SqlLeftJoinIcon,\n SqlLimitIcon,\n SqlOrderByIcon,\n SqlOuterJoinIcon,\n SqlRightJoinIcon,\n SqlCrossJoinIcon,\n SqlLateralJoinIcon,\n SqlFullJoinIcon,\n SqlUnionIcon,\n SqlSelectIcon,\n ArrowRightDoubleIcon,\n PostgresIcon,\n SnowflakeIcon,\n S3Icon,\n AlertErrorIcon,\n SeedIcon,\n} from \"../assets/icons\";\n\nimport {\n COLUMNS_SIDEBAR,\n EXPOSURE_SIDEBAR,\n FUNCTION_SIDEBAR,\n SNOWFLAKE_STAGE_SIDEBAR,\n DASHBOARD_SIDEBAR,\n TABLES_SIDEBAR,\n} from \"../constants\";\nimport { NODE_TYPE_SHORTHAND, NodeTypeIconForSQL } from \"./Column\";\nimport { NODE_TYPE_STYLES, NodeTypeIcon, TableNodePill } from \"./Column\";\nimport { Stack } from \"@altimateai/lego\";\nimport { Tooltip } from \"@altimateai/lego\";\nimport { useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport {\n mergeCollectColumns,\n mergeSeeMoreTables,\n setMinRange,\n setMoreTables,\n setNodeCount,\n setSelectedColumn,\n setSelectedTable,\n setSidebarScreen,\n setModalArgs,\n updateConfidenceWithOperatorList,\n setErrors,\n} from \"../context/LineageSlice\";\nimport { openFile, showExternalViewCodeModal } from \"../api\";\nimport { CLL } from \"../cllUtils\";\nimport { Confidence, ColumnLineage, CollectColumn } from \"../types\";\nimport { CodeIcon } from \"../../../assets/icons\";\nimport ViewsTypeBadge from \"./ViewsTypeBadge\";\nimport { PercentValue } from \"../context/types\";\nimport { Typography } from \"@altimateai/lego\";\nimport { cn } from \"../../../shared/utils\";\nimport { IconExclamationCircle } from \"@tabler/icons-react\";\nimport dayjs from \"dayjs\";\n\nconst HANDLE_OFFSET = \"-1px\";\n\nconst BidirectionalHandles = () => (\n <>\n <Handle\n id=\"left\"\n type=\"source\"\n className=\"invisible\"\n isConnectable={false}\n position={Position.Left}\n style={{ left: HANDLE_OFFSET }}\n />\n <Handle\n id=\"right\"\n type=\"source\"\n className=\"invisible\"\n isConnectable={false}\n position={Position.Right}\n style={{ right: HANDLE_OFFSET }}\n />\n <Handle\n id=\"left\"\n type=\"target\"\n className=\"invisible\"\n isConnectable={false}\n position={Position.Left}\n style={{ left: HANDLE_OFFSET }}\n />\n <Handle\n id=\"right\"\n type=\"target\"\n className=\"invisible\"\n isConnectable={false}\n position={Position.Right}\n style={{ right: HANDLE_OFFSET }}\n />\n <Handle\n id=\"top\"\n type=\"source\"\n className=\"invisible\"\n isConnectable={false}\n position={Position.Top}\n style={{ top: HANDLE_OFFSET }}\n />\n <Handle\n id=\"bottom\"\n type=\"source\"\n className=\"invisible\"\n isConnectable={false}\n position={Position.Bottom}\n style={{ bottom: HANDLE_OFFSET }}\n />\n <Handle\n id=\"top\"\n type=\"target\"\n className=\"invisible\"\n isConnectable={false}\n position={Position.Top}\n style={{ top: HANDLE_OFFSET }}\n />\n <Handle\n id=\"bottom\"\n type=\"target\"\n className=\"invisible\"\n isConnectable={false}\n position={Position.Bottom}\n style={{ bottom: HANDLE_OFFSET }}\n />\n </>\n);\n\nexport const TableNode: FunctionComponent<NodeProps> = ({ data }) => {\n const {\n label,\n table,\n url,\n upstreamCount,\n downstreamCount,\n nodeType,\n tests,\n materialization,\n isExternalProject,\n schema,\n stale,\n lastSeen,\n } = data;\n const flow = useReactFlow();\n\n const {\n state: {\n selectedTable,\n collectColumns,\n selectedColumn,\n leftExpansion,\n rightExpansion,\n selectCheck,\n nonSelectCheck,\n errors,\n },\n rerender,\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n\n const _columnLen = Object.keys(collectColumns[table] || {}).length;\n const _showColumns = _columnLen > 0;\n const selected = selectedTable === table;\n\n const expand = async (right: boolean) => {\n if (CLL.inProgress) {\n CLL.showCllInProgressMsg();\n return;\n }\n let [nodes, edges] = await expandTableLineage(flow.getNodes(), flow.getEdges(), table, right);\n [nodes, edges] = highlightTableConnections(nodes, edges, selectedTable);\n layoutElementsOnCanvas(nodes, edges);\n flow.setNodes(nodes);\n flow.setEdges(edges);\n lineageDispatch(setMinRange(calculateMinLevel(nodes, edges, selectedTable)));\n lineageDispatch(\n setNodeCount(\n await calculateNodeCount(nodes, edges, selectedTable, leftExpansion, rightExpansion)\n )\n );\n rerender();\n if (!selectedColumn?.name) return;\n try {\n CLL.start();\n const currentEdges = flow.getEdges();\n // Model edges should be hidden when column lineage is selected\n toggleModelEdges(currentEdges, false);\n toggleColumnEdges(currentEdges, true);\n flow.setEdges(currentEdges);\n await bfsTraversal(\n nodes,\n edges,\n right,\n collectColumns[table].map(c => ({ table, name: c.column })),\n (operatorList: Confidence[\"operator_list\"]) => {\n lineageDispatch(updateConfidenceWithOperatorList({ operatorList }));\n },\n (moreTables: ColumnLineage[]) => {\n lineageDispatch(mergeSeeMoreTables(moreTables));\n },\n (newCollectColumns: Record<string, CollectColumn[]>) => {\n lineageDispatch(mergeCollectColumns(newCollectColumns));\n },\n () => [flow.getNodes(), flow.getEdges()],\n (ns, es) => {\n flow.setNodes(ns);\n flow.setEdges(es);\n },\n selectedColumn,\n { direct: selectCheck, indirect: nonSelectCheck },\n (fn: ReducerWithoutAction<Record<string, string[]>>) =>\n lineageDispatch(setErrors(fn(errors)))\n );\n rerender();\n } catch (e) {\n console.log(\"cll:error:\", e);\n } finally {\n CLL.end();\n }\n };\n\n const expandRight = () => expand(true);\n const expandLeft = () => expand(false);\n\n const onDetailsClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (nodeType === \"semantic_model\") {\n return;\n }\n lineageDispatch(setSelectedTable(table));\n const sidebarMap: Record<string, string> = {\n exposure: EXPOSURE_SIDEBAR,\n function: FUNCTION_SIDEBAR,\n snowflake_stage: SNOWFLAKE_STAGE_SIDEBAR,\n dashboard: DASHBOARD_SIDEBAR,\n };\n lineageDispatch(setSidebarScreen(sidebarMap[nodeType] || COLUMNS_SIDEBAR));\n };\n\n const _edges = flow.getEdges();\n const tableId = table.replace(/[^a-zA-Z0-9]/g, \"-\");\n return (\n <div\n className=\"al-position-relative\"\n style={{\n opacity: !selectedColumn?.name ? 1 : _showColumns ? 1 : 0.5,\n }}\n >\n <div\n className={styles.table_node}\n onClick={async () => {\n const nodes = flow.getNodes();\n const edges = flow.getEdges();\n lineageDispatch(setMinRange(calculateMinLevel(nodes, edges, table)));\n lineageDispatch(\n setNodeCount(\n await calculateNodeCount(nodes, edges, table, leftExpansion, rightExpansion)\n )\n );\n setHighlightedTableConnections(flow, table);\n lineageDispatch(setSelectedTable(table));\n if (url) {\n openFile(url);\n }\n }}\n >\n <Stack\n direction=\"column\"\n align=\"start\"\n gap=\"xs\"\n className={classNames(styles.header, {\n [styles.selected]: selected,\n [styles.collapse]: !_showColumns,\n })}\n >\n <Stack direction=\"column\" align=\"start\" gap=\"xs\" className=\"al-w-full\">\n <div className={styles.table_header}>\n {nodeType in NODE_TYPE_SHORTHAND && (\n <>\n <div\n className={classNames(\n styles.node_icon,\n NODE_TYPE_STYLES[nodeType as keyof typeof NODE_TYPE_STYLES]\n )}\n >\n <NodeTypeIcon nodeType={nodeType} />\n <div>{NODE_TYPE_SHORTHAND[nodeType as keyof typeof NODE_TYPE_STYLES]}</div>\n </div>\n </>\n )}\n {nodeType in DIALECT_ICON && (\n <img\n src={DIALECT_ICON[nodeType as keyof typeof DIALECT_ICON]}\n className={styles.dialect_icon}\n alt={`${nodeType} dialect icon`}\n />\n )}\n {nodeType === \"snowflake_stage\" && (\n <Stack direction=\"column\" align=\"center\" gap=\"none\" className=\"al-text-primary\">\n <SeedIcon className=\"icon-sm\" />\n <Typography\n variant=\"caption\"\n size=\"sm\"\n className=\"al-text-xs al-mb-0 al-text-primary\"\n >\n STG\n </Typography>\n </Stack>\n )}\n <div className=\"overflow-x\">\n <div className={schema ? \"text-overflow\" : \"lines-2\"}>{label}</div>\n {schema && (\n <div className=\"text-muted\" style={{ fontSize: \"0.75em\" }}>\n {schema}\n </div>\n )}\n </div>\n {errors?.[table]?.length && (\n <Tooltip\n title={\n <div className={styles.error_tooltip}>\n {errors[table].map((line, i) => (\n <div key={i} className=\"mb-1\">\n {i + 1}. {line}\n </div>\n ))}\n </div>\n }\n >\n <AlertErrorIcon />\n </Tooltip>\n )}\n </div>\n <Stack\n direction=\"row\"\n align=\"center\"\n justify=\"between\"\n gap=\"xs\"\n className={classNames(\"al-w-full\", styles.node_extra_info)}\n >\n <Stack>\n <div\n className={classNames(\"nodrag\", styles.table_handle, {\n invisible:\n downstreamCount === 0 ||\n downstreamCount === _edges.filter(e => e.target === table).length ||\n flow.getNode(getSeeMoreId(table, false)),\n })}\n onClick={e => {\n e.stopPropagation();\n expandLeft();\n }}\n data-testid={\"expand-left-btn-\" + table}\n >\n +\n </div>\n {tests?.length > 0 && (\n <TableNodePill\n id={\"table-node-tests-\" + tableId}\n icon={<TestsIcon />}\n text={tests.length.toString()}\n label=\"Tests\"\n />\n )}\n {materialization && (\n <TableNodePill\n id={\"table-node-materilization-\" + tableId}\n icon={<EphemeralIcon />}\n text={materialization}\n label=\"Materialization\"\n />\n )}\n {stale && lastSeen && (\n <TableNodePill\n id={\"table-node-stale-\" + tableId}\n icon={<IconExclamationCircle />}\n text={\"Stale\"}\n label={`Last seen on ${dayjs(lastSeen).format(\"DD MMM YYYY, hh:mm A\")}`}\n />\n )}\n {isExternalProject ? (\n <TableNodePill\n id={\"table-node-is-external-\" + tableId}\n icon={<ExternalProjectIcon />}\n text=\"ext\"\n label={`External Project: ${table}`}\n />\n ) : null}\n </Stack>\n <Stack>\n <div\n className={classNames(\n \"nodrag\",\n selected && nodeType !== \"semantic_model\" ? \"text-blue\" : \"text-grey\"\n )}\n onClick={onDetailsClick}\n data-testid={\"view-details-btn-\" + table}\n >\n Details\n </div>\n <div\n className={classNames(\"nodrag\", styles.table_handle, {\n invisible:\n upstreamCount === 0 ||\n upstreamCount === _edges.filter(e => e.source === table).length ||\n flow.getNode(getSeeMoreId(table, true)),\n })}\n onClick={e => {\n e.stopPropagation();\n expandRight();\n }}\n data-testid={\"expand-right-btn-\" + table}\n >\n +\n </div>\n </Stack>\n </Stack>\n </Stack>\n </Stack>\n {_showColumns && (\n <>\n <div className={styles.divider} />\n <div\n className={classNames(styles.content, {\n [styles.selected]: selected,\n })}\n style={{ height: getColY(_columnLen) }}\n />\n </>\n )}\n </div>\n\n <BidirectionalHandles />\n </div>\n );\n};\n\nexport const DashboardNode: FunctionComponent<NodeProps> = ({ data }) => {\n const {\n dashboard_name,\n workbook_name,\n dashboard_url: _dashboard_url,\n description: _description,\n created_by: _created_by,\n last_modified: _last_modified,\n table,\n } = data;\n const flow = useReactFlow();\n\n const {\n state: {\n selectedTable,\n collectColumns: _collectColumns,\n selectedColumn,\n leftExpansion,\n rightExpansion,\n selectCheck: _selectCheck,\n nonSelectCheck: _nonSelectCheck,\n errors,\n },\n rerender: _rerender,\n } = useLineageContext();\n\n const lineageDispatch = useLineageDispatch();\n const selected = selectedTable === table;\n\n const onDetailsClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n lineageDispatch(setSelectedTable(table));\n lineageDispatch(setSidebarScreen(DASHBOARD_SIDEBAR));\n };\n\n return (\n <div\n className=\"al-relative\"\n style={{\n opacity: !selectedColumn?.name ? 1 : 0.5,\n }}\n >\n <div\n className={styles.table_node}\n onClick={async () => {\n const nodes = flow.getNodes();\n const edges = flow.getEdges();\n lineageDispatch(setMinRange(calculateMinLevel(nodes, edges, table)));\n lineageDispatch(\n setNodeCount(\n await calculateNodeCount(nodes, edges, table, leftExpansion, rightExpansion)\n )\n );\n setHighlightedTableConnections(flow, table);\n lineageDispatch(setSelectedTable(table));\n }}\n >\n <Stack\n direction=\"column\"\n align=\"start\"\n gap=\"xs\"\n className={classNames(styles.header, {\n [styles.selected]: selected,\n [styles.collapse]: true, // Dashboard nodes don't show columns, so always collapsed\n })}\n >\n <Stack direction=\"column\" align=\"start\" gap=\"xs\" className=\"al-w-full\">\n <div className={styles.table_header}>\n <div\n className={classNames(\n styles.node_icon,\n NODE_TYPE_STYLES[\"dashboard\" as keyof typeof NODE_TYPE_STYLES]\n )}\n >\n <NodeTypeIcon nodeType=\"dashboard\" />\n <div>{NODE_TYPE_SHORTHAND[\"dashboard\" as keyof typeof NODE_TYPE_SHORTHAND]}</div>\n </div>\n <div className=\"overflow-x\">\n <div className=\"al-truncate\">{dashboard_name}</div>\n {workbook_name && (\n <div className=\"al-text-muted-foreground al-text-[0.75em]\">{workbook_name}</div>\n )}\n </div>\n {errors?.[table]?.length && (\n <Tooltip\n title={\n <div className={styles.error_tooltip}>\n {errors[table].map((line, i) => (\n <div key={i} className=\"al-mb-1\">\n {i + 1}. {line}\n </div>\n ))}\n </div>\n }\n >\n <AlertErrorIcon />\n </Tooltip>\n )}\n </div>\n <Stack\n direction=\"row\"\n align=\"center\"\n justify=\"between\"\n gap=\"xs\"\n className=\"al-w-full al-h-[1.6em]\"\n >\n <Stack justify=\"end\" className=\"al-w-full\">\n <div\n className={cn(\"nodrag\", selected ? \"al-text-brand\" : \"al-text-muted-foreground\")}\n onClick={onDetailsClick}\n data-testid={\"view-details-btn-\" + table}\n >\n Details\n </div>\n </Stack>\n </Stack>\n </Stack>\n </Stack>\n </div>\n <BidirectionalHandles />\n </div>\n );\n};\n\nconst SavingsPerformanceBadge = ({\n percentValue,\n className,\n}: PropsWithChildren<{ percentValue?: PercentValue; className: string }>) => {\n if (!percentValue) return null;\n return (\n <Tooltip title={percentValue.tooltip}>\n <div className={className}>\n <div className={styles.value}>{percentValue.value}</div>\n <div className={styles.percent}>{percentValue.percent}</div>\n </div>\n </Tooltip>\n );\n};\n\nexport const SqlTableNode: FunctionComponent<NodeProps> = ({ data }) => {\n const { table, nodeType, label } = data;\n\n const {\n state: {\n sqlLineage,\n highlightedNodes,\n externalSidePanel,\n selectedNode,\n nodeSavingsPerformance,\n nodesCost,\n },\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n const nType = (nodeType || \"unknown\") as keyof typeof NODE_TYPE_SHORTHAND;\n return (\n <div className=\"al-position-relative\">\n <div className={styles.node_stats}>\n <SavingsPerformanceBadge\n percentValue={nodeSavingsPerformance[table]?.savings}\n className={styles.savings}\n />\n <SavingsPerformanceBadge\n percentValue={nodeSavingsPerformance[table]?.performance}\n className={styles.performance}\n />\n </div>\n <div\n className={styles.static_table_node}\n onClick={() => {\n document.dispatchEvent(new CustomEvent(\"selectedNode\", { detail: table }));\n }}\n >\n <Stack\n direction=\"column\"\n align=\"start\"\n className={classNames(styles.header, {\n [styles.collapse]: true,\n [styles.highlighted]: highlightedNodes.includes(table),\n [styles.selected]: selectedNode === table,\n })}\n >\n <Stack\n direction=\"row\"\n justify=\"between\"\n align=\"center\"\n gap=\"xxs\"\n className=\"al-w-full al-px-2\"\n >\n {nodesCost[table] && (\n <Tooltip title={nodesCost[table].tooltip}>\n <div className={classNames(styles.cost_data)}>\n <div>{nodesCost[table].value}</div>\n <div>{nodesCost[table].percent}</div>\n </div>\n </Tooltip>\n )}\n <div className={classNames(styles.node_icon, NODE_TYPE_STYLES[nType])}>\n <NodeTypeIconForSQL nodeType={nType} />\n </div>\n <div />\n <div className=\"lines-2\">{label}</div>\n <div className=\"spacer\" />\n <div />\n <div\n className={classNames(\n styles.details_btn,\n !sqlLineage || nType === \"unknown\" ? styles.disable : styles.enable\n )}\n onClick={e => {\n e.stopPropagation();\n if (nType === \"unknown\") return;\n if (externalSidePanel) return;\n lineageDispatch(setSelectedTable(table));\n }}\n >\n <ArrowRightDoubleIcon />\n </div>\n </Stack>\n </Stack>\n </div>\n <BidirectionalHandles />\n </div>\n );\n};\n\nexport const SeeMoreNode: FunctionComponent<NodeProps> = ({ data }) => {\n const { tables = [], prevTable, right, level } = data as TMoreTables;\n const {\n state: { moreTables },\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n const flow = useReactFlow();\n\n const handleClick = useCallback(\n (e: MouseEvent) => {\n e.stopPropagation();\n lineageDispatch(setSidebarScreen(TABLES_SIDEBAR));\n lineageDispatch(setMoreTables({ ...moreTables, tables, prevTable, right, level }));\n },\n [level, lineageDispatch, moreTables, prevTable, right, tables]\n );\n\n return (\n <div className={styles.see_more_node} onClick={handleClick}>\n <div className=\"fw-semibold\">See more</div>\n <div className=\"spacer\" />\n <div>{tables.filter(t => !flow.getNode(t.table)).length || \"\"}</div>\n <BidirectionalHandles />\n </div>\n );\n};\n\nexport const SelfConnectingEdge: FunctionComponent<EdgeProps> = props => {\n const { sourceX, sourceY, targetX, targetY, markerEnd } = props;\n const radiusX = (sourceX - targetX) * 0.6;\n const radiusY = 50;\n const edgePath = `M ${sourceX - 5} ${sourceY} A ${radiusX} ${radiusY} 0 1 0 ${\n targetX + 2\n } ${targetY}`;\n\n return <BaseEdge path={edgePath} markerEnd={markerEnd} />;\n};\n\nexport const ColumnNode: FunctionComponent<NodeProps> = ({ data }) => {\n const { column, table, viewsType, viewsCode, nodeType, datatype } = data;\n const {\n state: { selectedColumn, showCodeModal },\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n const isSelected = selectedColumn?.table === table && selectedColumn?.name === column;\n\n const viewsColor = viewsType && VIEWS_TYPE_COLOR[viewsType as ViewsTypes];\n const customStyles = viewsColor ? { borderColor: viewsColor } : {};\n const flow = useReactFlow();\n\n const handleClick = () => {\n const currentNode = flow.getNode(getColumnId(table, column));\n if (!currentNode) {\n return;\n }\n lineageDispatch(setSelectedTable(\"\"));\n lineageDispatch(setSelectedColumn({ name: column, table }));\n highlightColumnConnections(currentNode, flow);\n };\n\n const hasCode = useMemo(() => {\n return (\n Object.values((viewsCode as Record<string, [string, string][]>) || {})\n .flat()\n .filter(([, query_hash]) => Boolean(query_hash))\n .map(([code]) => code).length > 0\n );\n }, [viewsCode]);\n\n return (\n <div\n className={classNames(styles.column_node, isSelected ? styles.selected : styles.default)}\n style={customStyles}\n onClick={handleClick}\n >\n <div className={styles.column_name}>{column}</div>\n <BidirectionalHandles />\n <div className={styles.column_top_right}>\n {hasCode && (\n <Tooltip title={\"Click to view code\"}>\n <div\n className={styles.column_code_icon}\n onClick={e => {\n e.stopPropagation();\n if (showCodeModal) {\n lineageDispatch(\n setModalArgs({\n type: \"views_code\",\n args: {\n table,\n viewsType,\n viewsCode,\n nodeType,\n column,\n datatype,\n },\n })\n );\n } else {\n showExternalViewCodeModal({\n table,\n viewsType,\n viewsCode,\n nodeType,\n column,\n datatype,\n label: flow.getNode(table)?.data?.label,\n });\n }\n }}\n >\n <CodeIcon />\n </div>\n </Tooltip>\n )}\n {viewsType && viewsType !== \"Non select\" && <ViewsTypeBadge viewsType={viewsType} />}\n </div>\n </div>\n );\n};\n\nexport const SQL_ICONS: Record<string, React.ReactNode> = {\n INNER_JOIN: <SqlInnerJoinIcon />,\n OUTER_JOIN: <SqlOuterJoinIcon />,\n LEFT_JOIN: <SqlLeftJoinIcon />,\n FULL_JOIN: <SqlFullJoinIcon />,\n RIGHT_JOIN: <SqlRightJoinIcon />,\n CROSS_JOIN: <SqlCrossJoinIcon />,\n LATERAL_JOIN: <SqlLateralJoinIcon />,\n FILTER: <SqlFilterIcon />,\n GROUP: <SqlGroupByIcon />,\n LIMIT: <SqlLimitIcon />,\n SORT: <SqlOrderByIcon />,\n UNION: <SqlUnionIcon />,\n SELECT: <SqlSelectIcon className={\"!al-size-6\"} />,\n};\n\nexport const DIALECT_ICON = {\n postgres: PostgresIcon,\n snowflake: SnowflakeIcon,\n s3: S3Icon,\n};\n\nexport const OpNode: FunctionComponent<NodeProps> = ({ data }) => {\n const { type, expression, id } = data;\n const {\n state: {\n theme,\n highlightedNodes,\n externalSidePanel,\n selectedNode,\n nodeSavingsPerformance,\n nodesCost,\n },\n } = useLineageContext();\n const isDarkMode = theme === \"dark\";\n const lineageDispatch = useLineageDispatch();\n return (\n <div style={{ width: T_NODE_W, display: \"flex\", justifyContent: \"center\" }}>\n <BidirectionalHandles />\n <Stack direction=\"column\">\n <div\n className={classNames(styles.op_node, {\n [styles.highlighted]: highlightedNodes.includes(id),\n [styles.selected]: selectedNode === id,\n })}\n onClick={() => {\n if (externalSidePanel) {\n document.dispatchEvent(new CustomEvent(\"selectedNode\", { detail: id }));\n } else {\n lineageDispatch(\n setModalArgs({\n type: \"op_node\",\n args: { op_code: expression, op_type: type },\n })\n );\n }\n }}\n >\n {nodesCost[id] && (\n <Tooltip title={nodesCost[id].tooltip}>\n <div className={classNames(styles.cost_data)}>\n <div>{nodesCost[id].value}</div>\n <div>{nodesCost[id].percent}</div>\n </div>\n </Tooltip>\n )}\n <div\n className={classNames(\n styles.node_icon,\n isDarkMode ? styles.dark_mode : styles.light_mode\n )}\n >\n {SQL_ICONS[type]}\n </div>\n <div />\n <div className={styles.op_type_text}>\n <span>{type}</span>\n <div className={styles.node_stats}>\n <SavingsPerformanceBadge\n percentValue={nodeSavingsPerformance[id]?.savings}\n className={styles.savings}\n />\n <SavingsPerformanceBadge\n percentValue={nodeSavingsPerformance[id]?.performance}\n className={styles.performance}\n />\n </div>\n </div>\n <div />\n </div>\n </Stack>\n </div>\n );\n};\n","import { PropsWithChildren } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport \"./SidebarModal.scss\";\nimport { CloseIcon } from \"../../assets/icons\";\n\nfunction SidebarModal({\n isOpen,\n closeModal,\n width = 350,\n children,\n}: PropsWithChildren<{\n isOpen: boolean;\n closeModal: () => void;\n width: number | string;\n}>) {\n const sidebarElem = document.getElementById(\"lineage-sidebar\");\n if (!sidebarElem) return null;\n const widthString = typeof width === \"number\" ? `${width}px` : width;\n return createPortal(\n <div className={`sidebar-modal ${isOpen ? \"\" : \"d-none\"}`}>\n {isOpen && (\n <>\n <div className=\"sidebar-background-screen\" onClick={closeModal} />\n <div className=\"sidebar-modal-content\" style={{ width: widthString }}>\n <div className=\"sidebar-close-button\" onClick={closeModal}>\n <CloseIcon />\n </div>\n {children}\n </div>\n </>\n )}\n </div>,\n sidebarElem\n );\n}\n\nexport { SidebarModal };\n","import { ComponentProps } from \"react\";\nimport { Input, Textarea } from \"@altimateai/lego\";\n\nexport function CustomInput(props: ComponentProps<typeof Input>) {\n return <Input className=\"custom-input\" {...props} />;\n}\n\nexport function CustomMultilineInput(props: Omit<ComponentProps<typeof Textarea>, \"rows\">) {\n return <Textarea className=\"custom-input\" {...props} rows={4} />;\n}\n","import { PropsWithChildren, useMemo, useState } from \"react\";\nimport { Stack } from \"@altimateai/lego\";\nimport styles from \"./styles.module.scss\";\nimport classNames from \"classnames\";\nimport { useReactFlow } from \"reactflow\";\nimport { layoutElementsOnCanvas, moveTableFromSeeMoreToCanvas } from \"../graph\";\nimport { ColumnLineage, Table } from \"../types\";\nimport { CustomInput } from \"./Form\";\nimport { TestsIcon, EphemeralIcon, ExpandLineageIcon } from \"../assets/icons\";\nimport { NODE_TYPE_SHORTHAND, NodeIcon } from \"./Column\";\nimport { NODE_TYPE_STYLES, TableNodePill } from \"./Column\";\nimport { useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport { setSidebarScreen } from \"../context/LineageSlice\";\n\nexport type TMoreTables = {\n prevTable?: string;\n tables?: Table[];\n right?: boolean;\n level?: number;\n lineage?: ColumnLineage[];\n};\n\nfunction TableHeader({\n nodeType,\n label,\n table,\n tests,\n materialization,\n canLineageExpand,\n}: PropsWithChildren<{\n nodeType: string;\n label: string;\n table: string;\n tests: { key: string; path: string }[];\n materialization?: string | undefined;\n canLineageExpand: boolean;\n}>) {\n const nType = nodeType as keyof typeof NODE_TYPE_SHORTHAND;\n const tableId = table.replace(/[^a-zA-Z0-9]/g, \"-\");\n return (\n <Stack direction=\"column\" align=\"start\" gap=\"xs\" className=\"al-w-full\">\n <div className={styles.table_header}>\n <div className={classNames(styles.node_icon, NODE_TYPE_STYLES[nType])}>\n <NodeIcon nodeType={nodeType} />\n <div>{NODE_TYPE_SHORTHAND[nType]}</div>\n </div>\n <div className=\"lines-2\">{label}</div>\n {canLineageExpand && (\n <div className={classNames(styles.expand_lineage_icon, \"al-w-6 al-h-6\")}>\n <ExpandLineageIcon />\n </div>\n )}\n </div>\n {(tests?.length > 0 || materialization) && (\n <Stack direction=\"row\" gap=\"xs\" className={classNames(styles.node_extra_info)}>\n {tests?.length > 0 && (\n <TableNodePill\n id={\"table-node-tests-\" + tableId}\n icon={<TestsIcon />}\n text={tests.length.toString()}\n label=\"Tests\"\n />\n )}\n {materialization && (\n <TableNodePill\n id={\"table-node-materilization-\" + tableId}\n icon={<EphemeralIcon />}\n text={materialization}\n label=\"Materialization\"\n />\n )}\n </Stack>\n )}\n </Stack>\n );\n}\n\nfunction MoreTables() {\n const {\n state: { moreTables, selectCheck, nonSelectCheck },\n rerender,\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n const { tables: _tables, level, lineage } = moreTables as TMoreTables;\n const flow = useReactFlow();\n\n const tables = useMemo(() => {\n const _lineageTables = new Set();\n for (const item of lineage || []) {\n _lineageTables.add(item.source[0]);\n _lineageTables.add(item.target[0]);\n }\n return _tables\n ?.map(t => ({ ...t, canLineageExpand: _lineageTables.has(t.table) }))\n ?.sort((a, b) => (a.canLineageExpand ? -1 : b.canLineageExpand ? 1 : 0));\n }, [_tables, lineage]);\n\n const onItemClick = async (_table: Table) => {\n const nodes = [...flow.getNodes()];\n const edges = [...flow.getEdges()];\n const allTablesAdded = moveTableFromSeeMoreToCanvas(nodes, edges, _table, moreTables, {\n direct: selectCheck,\n indirect: nonSelectCheck,\n });\n if (allTablesAdded) {\n lineageDispatch(setSidebarScreen(\"\"));\n }\n\n layoutElementsOnCanvas(nodes, edges);\n flow.setNodes(nodes);\n flow.setEdges(edges);\n rerender();\n };\n\n const selectAllTables = () => {\n if (!tables || tables.length === 0) return;\n\n const nodes = [...flow.getNodes()];\n const edges = [...flow.getEdges()];\n\n // Process all tables that aren't already on the canvas\n let allTablesAdded = true;\n for (const table of tables) {\n const _node = flow.getNode(table.table);\n const isNodeOnOtherLevel = _node && _node.data.level !== level;\n\n if (!_node && !isNodeOnOtherLevel) {\n const result = moveTableFromSeeMoreToCanvas(nodes, edges, table, moreTables, {\n direct: selectCheck,\n indirect: nonSelectCheck,\n });\n if (!result) {\n allTablesAdded = false;\n }\n }\n }\n\n if (allTablesAdded) {\n lineageDispatch(setSidebarScreen(\"\"));\n }\n\n layoutElementsOnCanvas(nodes, edges);\n flow.setNodes(nodes);\n flow.setEdges(edges);\n rerender();\n };\n\n const [filteredTables, setFilteredTables] = useState(tables);\n return (\n <Stack direction=\"column\" className=\"p-2 al-h-full\">\n <Stack direction=\"row\" justify=\"between\" align=\"center\" className=\"mb-2\">\n <div className=\"fw-semibold fs-5\">Tables</div>\n <button\n className=\"btn btn-sm btn-outline-primary\"\n onClick={selectAllTables}\n disabled={!filteredTables || filteredTables.length === 0}\n >\n Select All\n </button>\n </Stack>\n <CustomInput\n placeholder=\"Search by table name\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n const _search = e.target.value.toLowerCase();\n setFilteredTables(tables!.filter(t => t.table.toLowerCase().includes(_search)));\n }}\n />\n <div className=\"mb-3\" />\n <div className=\"al-h-full al-overflow-y\">\n <Stack direction=\"column\" gap=\"sm\">\n {filteredTables!.map(t => {\n const _node = flow.getNode(t.table);\n const isNodeOnOtherLevel = _node && _node.data.level !== level;\n return (\n <div\n key={t.table}\n className={classNames(styles.table_card, {\n [styles.selected]: _node,\n // [styles.disabled]: isNodeOnOtherLevel,\n })}\n onClick={e => {\n e.stopPropagation();\n if (isNodeOnOtherLevel) return;\n onItemClick(t);\n }}\n >\n <TableHeader\n nodeType={t.nodeType}\n label={t.label}\n table={t.table}\n tests={t.tests}\n materialization={t.materialization}\n canLineageExpand={t.canLineageExpand}\n />\n </div>\n );\n })}\n </Stack>\n </div>\n </Stack>\n );\n}\n\nexport { MoreTables };\n","import { forwardRef, HTMLAttributes } from \"react\";\nimport { cn } from \"./utils\";\n\ninterface CollapseProps extends HTMLAttributes<HTMLDivElement> {\n isOpen?: boolean;\n}\n\nconst Collapse = forwardRef<HTMLDivElement, CollapseProps>(\n ({ className, isOpen = false, children, ...props }, ref) => {\n if (!isOpen) return null;\n\n return (\n <div ref={ref} className={cn(\"al-transition-all\", className)} {...props}>\n {children}\n </div>\n );\n },\n);\n\nCollapse.displayName = \"Collapse\";\n\nexport default Collapse;\n","import { forwardRef, HTMLAttributes } from \"react\";\nimport { cn } from \"./utils\";\n\nconst Table = forwardRef<HTMLTableElement, HTMLAttributes<HTMLTableElement>>(\n ({ className, ...props }, ref) => (\n <table\n ref={ref}\n className={cn(\"al-w-full al-caption-bottom al-text-sm\", className)}\n {...props}\n />\n ),\n);\nTable.displayName = \"Table\";\n\nexport default Table;\n","// extracted by css-extract-rspack-plugin\nexport default {\"component\":\"component-A82MOD\",\"spin\":\"spin-mK3tpt\"};","import { FunctionComponent } from \"react\";\nimport styles from \"./styles.module.scss\";\n// import Lottie from \"react-lottie\";\n// import * as animationData from \"../assets/animation/Loader.json\";\n\n// const defaultOptions = {\n// loop: true,\n// autoplay: true,\n// animationData: animationData,\n// rendererSettings: {\n// preserveAspectRatio: \"xMidYMid slice\",\n// },\n// };\n\nexport const ComponentLoader: FunctionComponent<{\n top?: number;\n left?: number;\n label?: string;\n}> = ({ top = 50, left = 50, label }) => {\n return (\n <div className={styles.component} style={{ top: `${top}%`, left: `${left}%` }}>\n {/* <Lottie options={defaultOptions} width={200} height={200} /> */}\n <div style={{ marginTop: \"-70px\" }}>{label}</div>\n </div>\n );\n};\n","// extracted by css-extract-rspack-plugin\nexport default {\"level_tag\":\"level_tag-lfobAk\",\"levelTag\":\"level_tag-lfobAk\"};","import { FunctionComponent } from \"react\";\nimport styles from \"./styles.module.scss\";\nimport classNames from \"classnames\";\n\nexport const ColorTag: FunctionComponent<{ label: string }> = ({ label }) => (\n <div className={classNames(styles.level_tag)}>{label}</div>\n);\n","import { FunctionComponent } from \"react\";\nimport styles from \"./styles.module.scss\";\nimport classNames from \"classnames\";\nimport { Stack } from \"@altimateai/lego\";\n\nconst PurposeSection: FunctionComponent<{\n purpose: string;\n}> = ({ purpose }) => {\n return (\n <div className={classNames(styles.card, \"purpose-section\")}>\n <Stack direction=\"column\" gap=\"sm\">\n <Stack direction=\"column\" gap=\"xs\">\n <div className=\"fs-5 fw-semibold\">Description</div>\n <div className={classNames(styles.column_card)}>\n <div className=\"font-normal fs-xxs\">{purpose}</div>\n </div>\n </Stack>\n </Stack>\n </div>\n );\n};\n\nexport default PurposeSection;\n","import {\n useState,\n useEffect,\n FunctionComponent,\n Dispatch,\n SetStateAction,\n PropsWithoutRef,\n useContext,\n ReducerWithoutAction,\n} from \"react\";\nimport { useReactFlow } from \"reactflow\";\nimport styles from \"./styles.module.scss\";\nimport classNames from \"classnames\";\nimport { Collapse, Table as UITable } from \"../../../shared\";\nimport { CLL } from \"../cllUtils\";\nimport {\n bfsTraversal,\n expandTableLineage,\n layoutElementsOnCanvas,\n removeColumnNodes,\n resetTableHighlights,\n setHighlightedTableConnections,\n} from \"../graph\";\n\n// ui components\nimport { ComponentLoader } from \"./Loader\";\nimport { ColumnDatatype, NodeIcon } from \"./Column\";\nimport { ColorTag } from \"./Tags\";\n\n// assets\nimport { ExpandLineageIcon } from \"../assets/icons\";\nimport { CustomInput } from \"./Form\";\nimport { defaultEdgeStyle, isNotColumn, toggleColumnEdges, toggleModelEdges } from \"../utils\";\nimport PurposeSection from \"./Purpose\";\nimport {\n Column,\n ColumnLineage,\n Columns,\n Confidence,\n Table,\n CollectColumn,\n DbtInfo,\n} from \"../types\";\nimport { getColumns, getDbtInfo, previewFeature, showInfoNotification } from \"../api\";\nimport { LineageContext, useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport {\n setSelectedColumn,\n setCollectColumns,\n setSidebarScreen,\n setConfidence,\n updateConfidenceWithOperatorList,\n mergeSeeMoreTables,\n mergeCollectColumns,\n setErrors,\n setModalArgs,\n} from \"../context/LineageSlice\";\nimport { CodeBlock, IconButton, Stack } from \"@altimateai/lego\";\nimport { LineageType } from \"../context/types\";\nimport {\n BoltIcon,\n BracketsIcon,\n CaseSensitiveIcon,\n ChevronDownIcon,\n ChevronUpIcon,\n DbtIcon,\n HalfCircleIcon,\n ShareIcon,\n SplitHorizontalIcon,\n} from \"../../../assets/icons\";\nimport { Button, Card, CardContent } from \"@altimateai/lego\";\nimport ViewsTypeBadge from \"./ViewsTypeBadge\";\n\ninterface TableData {\n [key: string]: string | number | boolean | null | undefined;\n}\n\ninterface LightDashNode {\n type: string;\n name: string;\n description?: string;\n meta?: Record<string, unknown>;\n sql?: string;\n time_intervals?: string[];\n hidden?: boolean;\n round?: boolean;\n format?: string;\n compact?: boolean;\n groups?: string[];\n urls?: string[];\n required_attributes?: string[];\n colors?: string[];\n joins?: unknown[];\n}\n\nconst ColumnCard: FunctionComponent<{\n column: Column & { code?: string };\n handleClick: () => void;\n selected: boolean;\n isSelectable: boolean;\n}> = ({ column, handleClick, selected, isSelectable }) => {\n const {\n state: { theme, config, renderTags },\n dispatch,\n } = useContext(LineageContext);\n return (\n <div\n className={classNames(styles.column_card, {\n [styles.selected]: selected,\n \"cursor-pointer\": isSelectable,\n })}\n onClick={handleClick}\n data-testid={\"table-details-\" + column.name}\n >\n <Stack align=\"center\" gap=\"xs\">\n <ColumnDatatype datatype={column.datatype || \"\"} />\n <div className=\"lines-2\">{column.name}</div>\n <div className=\"spacer\" />\n {column.is_transformation && <ViewsTypeBadge viewsType={\"Transformation\"} />}\n {config.exportFinalLineage && (\n <IconButton\n title=\"Export full lineage in CSV\"\n className=\"al-w-8 al-h-8\"\n onClick={async e => {\n e.stopPropagation();\n dispatch(\n setModalArgs({\n type: \"export_final_lineage\",\n args: { table: column.table, column: column.name },\n })\n );\n }}\n >\n <ShareIcon />\n </IconButton>\n )}\n {column.can_lineage_expand && (\n <div className={styles.expand_lineage_icon}>\n <ExpandLineageIcon />\n </div>\n )}\n {column.datatype && <ColorTag label={column.datatype} />}\n </Stack>\n {column.description && (\n <Stack direction=\"column\">\n <div className=\"al-font-normal al-text-xs al-text-gray-500\">{column.description}</div>\n </Stack>\n )}\n {renderTags && renderTags({ column, table_rk: column.table })}\n {column.code && (\n <CodeBlock code={column.code} language=\"sql\" editorTheme=\"tomorrow\" theme={theme} />\n )}\n </div>\n );\n};\n\nconst ColumnSection: FunctionComponent<{\n columns: Column[];\n filteredColumn: Column[];\n setFilteredColumn: Dispatch<SetStateAction<Column[]>>;\n handleColumnClick: (_x: Column) => Promise<void>;\n selectedTable: Table | null;\n selectedColumn?: { name: string; table: string };\n setData: Dispatch<SetStateAction<Columns | null>>;\n allowSyncColumnsWithDB?: boolean;\n lineageType: LineageType;\n}> = ({\n columns,\n filteredColumn,\n setFilteredColumn,\n handleColumnClick,\n selectedTable,\n selectedColumn,\n setData,\n allowSyncColumnsWithDB,\n lineageType,\n}) => {\n const isEphemeral = selectedTable?.materialization === \"ephemeral\";\n const isAnalysis = selectedTable?.nodeType === \"analysis\";\n return (\n <div className={classNames(styles.card, \"al-flex-grow column-section\")}>\n <Stack direction=\"column\" gap=\"md\" className=\"al-h-full al-p-2\">\n <Stack align=\"center\" gap=\"xs\">\n <div className=\"al-text-xl al-font-semibold\">Columns</div>\n <div className=\"spacer\" />\n {allowSyncColumnsWithDB && !isEphemeral && !isAnalysis && (\n <Button\n onClick={() => {\n if (!selectedTable) return;\n getColumns(selectedTable.table, true).then(_data => {\n if (_data) {\n setData(_data);\n setFilteredColumn(_data.columns);\n }\n });\n }}\n >\n Sync with DB\n </Button>\n )}\n </Stack>\n <CustomInput\n type=\"text\"\n placeholder=\"Search by column name\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n const _search = e.target.value.toLowerCase();\n setFilteredColumn(columns.filter(c => c.name.toLowerCase().includes(_search)));\n }}\n />\n <Stack align=\"center\" gap=\"xs\">\n {!isEphemeral && <div className=\"al-text-xs\">Select column for lineage</div>}\n <div className=\"spacer\" />\n <div className=\"al-text-xs al-text-gray-500\">{filteredColumn.length} columns</div>\n </Stack>\n <Stack direction=\"column\" gap=\"md\">\n {filteredColumn.map(_column => (\n <ColumnCard\n key={_column.name}\n column={_column}\n handleClick={() => {\n if (isEphemeral) return;\n handleColumnClick(_column);\n }}\n selected={\n _column.name === selectedColumn?.name && _column.table === selectedColumn?.table\n }\n isSelectable={!isEphemeral && lineageType === \"dynamic\"}\n />\n ))}\n </Stack>\n </Stack>\n </div>\n );\n};\n\nconst TestSection: FunctionComponent<{\n tests: { key: string; path: string }[];\n}> = ({ tests }) => {\n const [filteredTests, setFilteredTests] = useState(tests);\n return (\n <div className={classNames(styles.card, \"al-flex-grow column-section\")}>\n <Stack direction=\"column\" gap=\"md\" className=\"al-h-full al-p-2\">\n <div className=\"al-text-xl al-font-semibold\">Tests</div>\n <CustomInput\n type=\"text\"\n placeholder=\"Search by test\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n const _search = e.target.value.toLowerCase();\n setFilteredTests(tests.filter(t => t.key.toLowerCase().includes(_search)));\n }}\n />\n <Stack align=\"center\" gap=\"xs\">\n <div className=\"al-text-xs al-text-gray-500\">{filteredTests.length} tests</div>\n </Stack>\n <Stack direction=\"column\" gap=\"md\">\n {filteredTests.map(_test => (\n <div key={_test.key} className={styles.column_card}>\n <Stack align=\"center\" gap=\"xs\">\n <div className=\"lines-2\">{_test.key}</div>\n </Stack>\n </div>\n ))}\n </Stack>\n </Stack>\n </div>\n );\n};\n\nconst icons = [BracketsIcon, HalfCircleIcon, CaseSensitiveIcon, SplitHorizontalIcon];\n\nconst getIconForType = (type: string): string => {\n switch (type) {\n case \"dimension\":\n return BracketsIcon;\n case \"Order Type\":\n return HalfCircleIcon;\n case \"metrics\":\n return CaseSensitiveIcon;\n case \"table\":\n return SplitHorizontalIcon;\n default:\n return icons[Math.floor(Math.random() * icons.length)];\n }\n};\n\nconst tableMetaKeys = [\n \"label\",\n \"type\",\n \"description\",\n \"sql\",\n \"time_intervals\",\n \"hidden\",\n \"round\",\n \"format\",\n \"compact\",\n \"groups\",\n \"urls\",\n \"required_attributes\",\n \"colors\",\n \"joins\",\n];\n\nconst DataTable = ({ data }: { data: TableData }) => {\n return (\n <UITable>\n <tbody>\n {Object.entries(data).map(([key, value]) => (\n <tr key={key}>\n <td>{key}</td>\n <td>{String(value)}</td>\n </tr>\n ))}\n </tbody>\n </UITable>\n );\n};\n\nconst renderValue = (value: unknown): JSX.Element | string => {\n if (typeof value === \"object\" && value !== null) {\n return <DataTable data={value as TableData} />;\n }\n return String(value);\n};\n\nexport const LightDashSection: FunctionComponent<{ node: LightDashNode }> = ({ node }) => {\n const [openSections, setOpenSections] = useState<Record<string, boolean>>({});\n\n const toggleCollapse = (key: string) => {\n setOpenSections(prev => ({ ...prev, [key]: !prev[key] }));\n };\n\n return (\n <Stack direction=\"column\" gap=\"md\">\n {tableMetaKeys.map(key => {\n const value = node[key as keyof LightDashNode];\n if (!value) return null;\n\n return (\n <Card key={key}>\n <CardContent className=\"al-p-2 al-pt-2 al-pb-2\">\n <div className=\"al-cursor-pointer\" onClick={() => toggleCollapse(key)}>\n <Stack align=\"center\" gap=\"xs\">\n <NodeIcon nodeType={getIconForType(key)} />\n <div className=\"al-capitalize\">{key}</div>\n <div className=\"spacer\" />\n {openSections[key] ? <ChevronUpIcon /> : <ChevronDownIcon />}\n </Stack>\n </div>\n <Collapse isOpen={openSections[key]}>\n <div className=\"al-mt-2\">{renderValue(value)}</div>\n </Collapse>\n </CardContent>\n </Card>\n );\n })}\n </Stack>\n );\n};\n\nexport const HeaderSection = ({\n nodeType,\n table,\n tableData,\n currentTableId,\n onNavigate,\n}: PropsWithoutRef<{\n nodeType: string;\n table: string;\n tableData?: Table;\n currentTableId?: string;\n onNavigate?: (_navigationInfo: { url?: string; id?: string; table: string }) => void;\n}>) => {\n const {\n state: { client },\n } = useLineageContext();\n\n // Check if we should show the button based on provided currentTableId and client\n const shouldShowButton = () => {\n // Only show button in SaaS client (not in extension client)\n if (client !== \"saas\") return false;\n\n if (!tableData?.id && !tableData?.url) return false;\n if (tableData?.url) return true;\n\n // Don't show the button if the current ID is the same as tableData.id\n return currentTableId !== tableData.id;\n };\n\n const handleNavigateClick = () => {\n if (!onNavigate || !tableData) return;\n\n onNavigate({\n url: tableData.url as string | undefined,\n id: tableData.id,\n table: tableData.table,\n });\n };\n\n return (\n <div className={styles.table_details_header}>\n <NodeIcon nodeType={nodeType} />\n <Stack align=\"center\">\n <div className=\"al-font-semibold al-text-xl lines-2\">{table}</div>\n {(tableData?.url || tableData?.id) && shouldShowButton() && (\n <>\n <div className=\"spacer\" />\n <Button size=\"sm\" onClick={handleNavigateClick}>\n View Details\n </Button>\n </>\n )}\n </Stack>\n </div>\n );\n};\n\nconst TableDetails = ({\n lineageType,\n currentTableId,\n onNavigate,\n}: {\n lineageType: LineageType;\n currentTableId?: string;\n onNavigate?: (navigationInfo: { url?: string; id?: string; table: string }) => void;\n}) => {\n const {\n rerender,\n state: {\n selectedTable,\n selectedColumn,\n selectCheck,\n nonSelectCheck,\n aiEnabled,\n allowSyncColumnsWithDB,\n errors,\n theme,\n lightdashEnabled,\n },\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n\n const flow = useReactFlow();\n const [filteredColumn, setFilteredColumn] = useState<Column[]>([]);\n const [data, setData] = useState<Columns | null>(null);\n const [dbtInfo, setDbtInfo] = useState<DbtInfo | null>(null);\n const [tab, setTab] = useState(0);\n\n const [isLoading, setIsLoading] = useState(true);\n useEffect(() => {\n if (!selectedTable) return;\n setIsLoading(true);\n getColumns(selectedTable, false)\n .then(_data => {\n setData(_data);\n setFilteredColumn(_data.columns);\n setIsLoading(false);\n })\n .catch(() => {\n setIsLoading(false);\n });\n getDbtInfo(selectedTable)\n .then(_data => {\n setDbtInfo(_data.dbt_info);\n setIsLoading(false);\n })\n .catch(() => {\n setDbtInfo(null);\n setIsLoading(false);\n });\n }, [selectedTable]);\n\n const handleColumnClick = async (_column: Column) => {\n if (!aiEnabled) {\n previewFeature();\n return;\n }\n\n if (CLL.inProgress) {\n CLL.showCllInProgressMsg();\n return;\n }\n\n // remove column selection when already selected\n if (selectedColumn?.table === _column.table && selectedColumn?.name === _column.name) {\n const [_nodes, _edges] = removeColumnNodes(flow.getNodes(), flow.getEdges());\n // Model edges will be hidden when column lineage is selected, so unhide them\n toggleModelEdges(_edges, true);\n toggleColumnEdges(_edges, true);\n\n flow.setNodes(_nodes);\n flow.setEdges(_edges);\n lineageDispatch(setSelectedColumn({ table: \"\", name: \"\" }));\n lineageDispatch(setCollectColumns({}));\n lineageDispatch(setSidebarScreen(\"\"));\n return;\n }\n\n const tableNodeData = flow.getNode(_column.table)?.data;\n if (!tableNodeData) {\n throw new Error(`table node ${_column.table} isn't visible`);\n }\n\n // expand 1st level if not already\n let _nodes = flow.getNodes();\n let _edges = flow.getEdges();\n // Model edges should be hidden when column lineage is selected\n toggleModelEdges(_edges, false);\n toggleColumnEdges(_edges, true);\n\n const addNodesEdges = async (right: boolean) => {\n [_nodes, _edges] = await expandTableLineage(_nodes, _edges, _column.table, right);\n layoutElementsOnCanvas(_nodes, _edges);\n };\n const { upstreamCount, downstreamCount } = tableNodeData;\n if (upstreamCount > 0 && _edges.filter(e => e.source === _column.table).length < upstreamCount)\n await addNodesEdges(true);\n if (\n downstreamCount > 0 &&\n _edges.filter(e => e.target === _column.table).length < downstreamCount\n )\n await addNodesEdges(false);\n\n // initializing states\n lineageDispatch(setSelectedColumn({ ..._column }));\n lineageDispatch(setSidebarScreen(\"\"));\n lineageDispatch(setCollectColumns({}));\n lineageDispatch(setConfidence({ confidence: \"high\" }));\n\n // resetting canvas\n const [nodes, edges] = resetTableHighlights(\n _nodes.filter(isNotColumn),\n _edges.filter(isNotColumn)\n );\n edges.forEach(_e => (_e.style = defaultEdgeStyle));\n flow.setNodes(nodes);\n flow.setEdges(edges);\n rerender();\n\n // starting column lineage\n const _bfsTraversal = (right: boolean) =>\n bfsTraversal(\n nodes,\n edges,\n right,\n [_column],\n (operatorList: Confidence[\"operator_list\"]) => {\n lineageDispatch(updateConfidenceWithOperatorList({ operatorList }));\n },\n (moreTables: ColumnLineage[]) => {\n lineageDispatch(mergeSeeMoreTables(moreTables));\n },\n (newCollectColumns: Record<string, CollectColumn[]>) => {\n lineageDispatch(mergeCollectColumns(newCollectColumns));\n },\n () => [flow.getNodes(), flow.getEdges()],\n (ns, es) => {\n flow.setNodes(ns);\n flow.setEdges(es);\n },\n _column,\n { direct: selectCheck, indirect: nonSelectCheck },\n (fn: ReducerWithoutAction<Record<string, string[]>>) =>\n lineageDispatch(setErrors(fn(errors)))\n );\n try {\n CLL.start();\n const result = await Promise.all([_bfsTraversal(true), _bfsTraversal(false)]);\n if (result.every(isLineage => !isLineage)) {\n lineageDispatch(setSelectedColumn({ table: \"\", name: \"\" }));\n setHighlightedTableConnections(flow, _column.table);\n if (!CLL.isCancelled) {\n showInfoNotification(\n `No lineage found for model ${_column.table} and column ${_column.name}`\n );\n }\n }\n } catch (e) {\n console.error(\"Error while performing cll for \", _column.table, _column.name, \", error:\", e);\n lineageDispatch(setSelectedColumn({ table: \"\", name: \"\" }));\n setHighlightedTableConnections(flow, _column.table);\n } finally {\n CLL.end();\n }\n };\n const selectedTableData = flow.getNode(selectedTable)?.data;\n if (isLoading || !data || !selectedTable) return <ComponentLoader />;\n const tabs = [\"Column\"];\n if (selectedTableData.tests.length) tabs.push(\"Tests\");\n if (lightdashEnabled) {\n tabs.push(\"Lightdash\");\n }\n if (dbtInfo !== null) {\n tabs.push(\"dbt\");\n }\n\n return (\n <Stack direction=\"column\" gap=\"2xl\" className=\"al-p-2 al-h-full al-overflow-y-auto\">\n <HeaderSection\n nodeType={selectedTableData.nodeType}\n table={selectedTableData.label}\n tableData={selectedTableData}\n currentTableId={currentTableId}\n onNavigate={onNavigate}\n />\n {data.purpose && <PurposeSection purpose={data.purpose} />}\n {tabs.length > 1 && (\n <div className={styles.table_details_tabs}>\n {tabs.map((label, i) => (\n <div\n key={label}\n className={classNames(styles.tab, {\n [styles.selected]: tab === i,\n })}\n onClick={() => setTab(i)}\n >\n <Stack align=\"center\" justify=\"center\" gap=\"md\">\n <div\n className={theme === \"light\" && tab !== i ? \"al-text-primary\" : \"al-text-white\"}\n >\n {label === \"Lightdash\" ? <BoltIcon /> : null}\n {label === \"dbt\" ? <DbtIcon className={\"al-w-4 al-h-4\"} /> : null}\n </div>\n {label}\n </Stack>\n </div>\n ))}\n </div>\n )}\n {tabs[tab] === \"Column\" && (\n <ColumnSection\n selectedTable={selectedTableData}\n selectedColumn={selectedColumn}\n filteredColumn={filteredColumn}\n setFilteredColumn={setFilteredColumn}\n columns={data.columns}\n handleColumnClick={handleColumnClick}\n setData={setData}\n allowSyncColumnsWithDB={allowSyncColumnsWithDB}\n lineageType={lineageType}\n />\n )}\n {tabs[tab] === \"Tests\" && <TestSection tests={selectedTableData.tests} />}\n {tabs[tab] === \"Lightdash\" && <LightDashSection node={selectedTableData} />}\n {tabs[tab] === \"dbt\" && <Stack align={\"center\"}>{renderValue(dbtInfo)}</Stack>}\n </Stack>\n );\n};\n\nexport const StaticTableDetails = ({\n currentTableId,\n onNavigate,\n}: {\n currentTableId?: string;\n onNavigate?: (navigationInfo: { url?: string; id?: string; table: string }) => void;\n} = {}) => {\n const {\n state: { theme },\n } = useContext(LineageContext);\n const {\n state: { sqlLineage, selectedTable, allowSyncColumnsWithDB },\n } = useLineageContext();\n\n const _columns = sqlLineage?.details?.[selectedTable]?.columns?.map(item => ({\n ...item,\n description: item.expression,\n }));\n const [columns, setColumns] = useState(_columns);\n const [filteredColumn, setFilteredColumn] = useState(_columns);\n const table = sqlLineage?.details?.[selectedTable];\n if (!table) {\n return null;\n }\n const { sql, type, nodeId } = table;\n\n // Create a tableData object with available information\n const tableData = {\n table: selectedTable,\n label: selectedTable,\n nodeType: type || \"cte\",\n downstreamCount: 0,\n upstreamCount: 0,\n isExternalProject: false,\n tests: [],\n nodeId,\n };\n\n return (\n <Stack direction=\"column\" gap=\"2xl\" className=\"al-p-2 al-h-full al-overflow-y-auto\">\n <HeaderSection\n nodeType={type || \"cte\"}\n table={selectedTable}\n tableData={tableData as Table}\n currentTableId={currentTableId}\n onNavigate={onNavigate}\n />\n {sql && (\n <div className={classNames(styles.card, \"al-mb-0 purpose-section\")}>\n <Stack direction=\"column\" gap=\"md\">\n <div className=\"al-text-xl al-font-semibold\">SQL</div>\n <CodeBlock\n code={sql}\n language=\"sql\"\n editorTheme=\"tomorrow\"\n showLineNumbers\n theme={theme}\n />\n </Stack>\n </div>\n )}\n <div className={classNames(styles.card, \"al-mb-0 al-flex-grow column-section\")}>\n <Stack direction=\"column\" gap=\"md\" className=\"al-h-full\">\n <Stack align=\"center\" gap=\"xs\">\n <div className=\"al-text-xl al-font-semibold\">Column</div>\n <div className=\"spacer\" />\n {allowSyncColumnsWithDB && nodeId && [\"table\", \"final\"].includes(type || \"\") && (\n <Button\n onClick={() => {\n getColumns(nodeId, true).then(_data => {\n setColumns(_data.columns);\n setFilteredColumn(_data.columns);\n });\n }}\n >\n Sync with DB\n </Button>\n )}\n </Stack>\n <CustomInput\n placeholder=\"Search by column name\"\n type=\"text\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n const _search = e.target.value.toLowerCase();\n setFilteredColumn(columns?.filter(c => c.name.toLowerCase().includes(_search)));\n }}\n />\n <Stack align=\"center\" gap=\"xs\">\n <div>{filteredColumn?.length} columns</div>\n </Stack>\n <Stack direction=\"column\" gap=\"md\" className=\"al-overflow-y-auto\">\n {filteredColumn?.map(_column => (\n <ColumnCard\n key={_column.name}\n column={{\n name: _column.name,\n table: selectedTable,\n can_lineage_expand: false,\n description: \"\",\n code: _column.expression,\n }}\n handleClick={() => {}}\n selected={false}\n isSelectable={false}\n />\n ))}\n </Stack>\n </Stack>\n </div>\n </Stack>\n );\n};\n\nexport { TableDetails };\n","import classNames from \"classnames\";\nimport styles from \"./styles.module.scss\";\nimport { ReactNode } from \"react\";\nimport { Stack } from \"@altimateai/lego\";\n\ntype Props = {\n title: string;\n value: string | ReactNode;\n};\nconst ColumnRow = ({ title, value }: Props) => {\n return (\n <div className={classNames(styles.column_card, {})}>\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <div className=\"lines-2\">{title}</div>\n <div className=\"spacer\" />\n </Stack>\n <Stack direction=\"column\">\n <div className=\"font-normal fs-xxs text-grey\">{value}</div>\n </Stack>\n </div>\n );\n};\n\nexport default ColumnRow;\n","type Props = {\n label: string;\n};\nconst Chip = ({ label }: Props) => {\n return <div>{label}</div>;\n};\n\nexport default Chip;\n","import { useEffect, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { ComponentLoader } from \"./Loader\";\nimport styles from \"./styles.module.scss\";\nimport { NodeTypeIcon } from \"./Column\";\nimport { useReactFlow } from \"reactflow\";\nimport { useLineageContext } from \"../context/LineageProvider\";\nimport { ExposureMetaData } from \"../types\";\nimport { getExposureDetails } from \"../api\";\nimport PurposeSection from \"./Purpose\";\nimport ColumnRow from \"./ColumnRow\";\nimport Chip from \"./Chip\";\nimport { Stack } from \"@altimateai/lego\";\n\n/**\n * Component to display exposure details\n */\nconst ExposureDetails = () => {\n const flow = useReactFlow();\n const {\n state: { selectedTable },\n } = useLineageContext();\n const [data, setData] = useState<ExposureMetaData | null>(null);\n const selectedTableData = flow.getNode(selectedTable)?.data;\n const [isLoading, setIsLoading] = useState(true);\n useEffect(() => {\n if (!selectedTable) return;\n getExposureDetails(selectedTable).then(_data => {\n setData(_data);\n setIsLoading(false);\n });\n }, [selectedTable]);\n\n if (isLoading || !data || !selectedTable) return <ComponentLoader />;\n\n return (\n <Stack direction=\"column\" gap=\"md\" className=\"p-2 al-h-full al-overflow-y\">\n <div className={styles.table_details_header}>\n <NodeTypeIcon nodeType={selectedTableData.nodeType} />\n <Stack direction=\"row\" align=\"center\">\n <div className=\"fw-semibold fs-5 lines-2\">{selectedTableData.label}</div>\n </Stack>\n </div>\n {data.description ? <PurposeSection purpose={data.description} /> : null}\n <div className={classNames(styles.card, \"flex-grow column-section\")}>\n <ColumnRow title=\"Owner\" value={`${data.owner.name} - ${data.owner.email}`} />\n <ColumnRow title=\"Url\" value={data.url} />\n <ColumnRow\n title=\"Tags\"\n value={data.tags.map(tag => (\n <Chip label={tag} key={tag} />\n ))}\n />\n <ColumnRow title=\"Maturity\" value={data.maturity} />\n </div>\n </Stack>\n );\n};\n\nexport default ExposureDetails;\n","import React, { useEffect, useState } from \"react\";\nimport { ComponentLoader } from \"./Loader\";\nimport styles from \"./styles.module.scss\";\nimport { useLineageContext } from \"../context/LineageProvider\";\nimport { Stack } from \"@altimateai/lego\";\nimport { ApiHelper } from \"../../api/index\";\n\nimport { Button, Typography } from \"@altimateai/lego\";\nimport {\n IconBook,\n IconCalendar,\n IconEye,\n IconHeartRateMonitor,\n IconLibraryFilled,\n IconPremiumRights,\n IconRefresh,\n IconServer,\n IconSitemap,\n IconUser,\n IconUsers,\n IconWorld,\n} from \"@tabler/icons-react\";\n\ninterface DashboardData {\n rk: string;\n dashboard: string;\n workbook: string;\n owner: string;\n refreshFrequency: string;\n insights: Array<{\n name: string;\n description: string;\n }>;\n views_30d: number;\n refreshes_30d: number;\n views: number;\n refreshes: number;\n tableauTags: string[];\n site_name: string;\n project_name: string;\n last_viewed: string;\n user_count: number;\n instance_name: string;\n total_cost: number;\n cost_attribution_type: string | null;\n instrumentation_snippet: string | null;\n dashboard_url: string;\n}\n\n// Color mapping for tags\nconst COLOR_MAP: Record<string, string> = {\n blue: \"#247efe\",\n orange: \"#ff754c\",\n red: \"#ee140f\",\n green: \"#01cd8c\",\n dark_green: \"#19504d\",\n yellow: \"#783a00\",\n purple: \"#392091\",\n};\n\nconst COLOR_BG_MAP: Record<string, string> = {\n blue: \"rgba(36, 126, 254, 0.15)\",\n orange: \"rgba(255, 117, 76, 0.15)\",\n red: \"rgba(238, 20, 15, 0.15)\",\n green: \"rgba(1, 205, 140, 0.15)\",\n dark_green: \"#d3f8f8\",\n yellow: \"#fff4c3\",\n purple: \"#e6ddff\",\n};\n\n// Available colors for hash-based selection\nconst AVAILABLE_COLORS = [\"blue\", \"orange\", \"red\", \"green\", \"yellow\", \"purple\"];\n\n// Simple hash function to convert string to consistent color\nconst getHashColor = (str: string): string => {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n const index = Math.abs(hash) % AVAILABLE_COLORS.length;\n return AVAILABLE_COLORS[index];\n};\n\n// Local ColorTag component following altimate-components standards\nconst LocalColorTag = ({ label, color = \"blue\" }: { label: string; color?: string }) => {\n const backgroundColor = COLOR_BG_MAP[color] || COLOR_BG_MAP.blue;\n const textColor = COLOR_MAP[color] || COLOR_MAP.blue;\n\n return (\n <div\n className=\"al-inline-flex al-items-center al-px-3 al-py-1 al-rounded-full al-whitespace-nowrap al-text-xs al-font-medium al-truncate al-bg-background al-leading-5\"\n style={{\n backgroundColor,\n color: textColor,\n }}\n >\n {label}\n </div>\n );\n};\n\n// Custom Row Component for same-line title and value display\nconst CustomRow = ({ title, value }: { title: React.ReactNode; value: React.ReactNode }) => (\n <div className=\"al-px-3 al-py-4 al-rounded-lg al-border al-border-gray-200 al-bg-background\">\n <Stack direction=\"row\" align=\"center\" justify=\"between\" gap=\"md\">\n <div className=\"al-flex-shrink-0\">{title}</div>\n <div className=\"al-text-right al-text-sm al-text-gray-600\">{value}</div>\n </Stack>\n </div>\n);\n\n/**\n * Component to display dashboard details\n */\nconst DashboardDetails = ({\n onNavigate,\n}: {\n onNavigate?: (navigationInfo: { url?: string; id?: string; table: string }) => void;\n} = {}) => {\n const {\n state: { selectedTable },\n } = useLineageContext();\n const [data, setData] = useState<DashboardData | null>(null);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n if (!selectedTable) return;\n setIsLoading(true);\n\n ApiHelper.get(\"getDashboardById\", { dashboard_id: selectedTable })\n //@ts-expect-error just for now\n .then((_data: DashboardData) => {\n setData(_data);\n setIsLoading(false);\n })\n .catch(error => {\n console.error(\"Error fetching dashboard details:\", error);\n setData(null);\n setIsLoading(false);\n });\n }, [selectedTable]);\n\n if (isLoading || !data || !selectedTable) return <ComponentLoader />;\n\n // Format cost value\n const formatCost = (cost: number) => {\n if (cost >= 1000) {\n return `$${(cost / 1000).toFixed(1)}k`;\n }\n return `$${cost.toFixed(2)}`;\n };\n\n // Format large numbers\n const formatNumber = (num: number) => {\n if (num >= 1000) {\n return `${(num / 1000).toFixed(1)}k`;\n }\n return num.toLocaleString();\n };\n\n // Format date\n const formatDate = (dateString: string) => {\n try {\n return new Date(dateString).toLocaleDateString();\n } catch {\n return dateString;\n }\n };\n\n return (\n <Stack direction=\"column\" gap=\"md\" className=\"al-p-4 al-h-full al-overflow-y-auto\">\n {/* Header */}\n <div className={styles.table_details_header}>\n <IconHeartRateMonitor className=\"al-w-6 al-h-6 al-text-blue-500\" />\n <Stack direction=\"row\" align=\"center\">\n <div className=\"al-font-semibold al-text-lg al-line-clamp-2 al-w-full\">\n {data.dashboard}\n </div>\n {data.total_cost != null && (\n <Stack justify=\"end\" className=\"al-w-full\">\n <Button\n size=\"sm\"\n onClick={() => {\n if (!onNavigate || !data) return;\n onNavigate({\n url: `/query/tableau-jobs/${encodeURIComponent(data.rk)}`,\n id: data.rk,\n table: data.dashboard,\n });\n }}\n >\n Cost Analysis\n </Button>\n </Stack>\n )}\n </Stack>\n </div>\n\n {data.insights && data.insights.length > 0 && (\n <div className=\"al-mt-3\">\n <Stack direction=\"row\" gap=\"xs\" className=\"al-flex-wrap al-my-3\">\n {data.insights.map((insight, index) => (\n <LocalColorTag label={insight.name} color={getHashColor(insight.name)} key={index} />\n ))}\n </Stack>\n </div>\n )}\n\n {/* Dashboard Details */}\n <div className=\"al-flex-grow al-rounded-lg al-p-4 al-bg-gray-100\">\n <Stack direction=\"column\" gap=\"md\">\n <Typography variant=\"caption\" className=\"al-font-semibold\">\n Dashboard Details\n </Typography>\n {data.total_cost !== null && (\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconPremiumRights className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Total Cost</span>\n </Stack>\n }\n value={<span className=\"al-font-semibold\">{formatCost(data.total_cost)}</span>}\n />\n )}\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconUser className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Owner</span>\n </Stack>\n }\n value={data.owner}\n />\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconBook className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Workbook</span>\n </Stack>\n }\n value={data.workbook}\n />\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconLibraryFilled className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Project</span>\n </Stack>\n }\n value={data.project_name}\n />\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconSitemap className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Site</span>\n </Stack>\n }\n value={data.site_name}\n />\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconServer className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Instance</span>\n </Stack>\n }\n value={data.instance_name}\n />\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconEye className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Views (30 days)</span>\n </Stack>\n }\n value={<span className=\"al-font-semibold\">{formatNumber(data.views)}</span>}\n />\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconRefresh className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Refreshes (30 days)</span>\n </Stack>\n }\n value={data.refreshes.toString()}\n />\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconUsers className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Unique Users</span>\n </Stack>\n }\n value={data.user_count.toString()}\n />\n\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconCalendar className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Last Viewed</span>\n </Stack>\n }\n value={formatDate(data.last_viewed)}\n />\n\n {data.dashboard_url && (\n <CustomRow\n title={\n <Stack direction=\"row\" align=\"center\" gap=\"xs\">\n <IconWorld className=\"al-w-4 al-h-4 al-text-blue-600\" />\n <span className=\"al-font-medium\">Dashboard URL</span>\n </Stack>\n }\n value={\n <a\n href={data.dashboard_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"al-text-blue-600 al-underline al-truncate\"\n >\n Open Dashboard\n </a>\n }\n />\n )}\n </Stack>\n </div>\n </Stack>\n );\n};\n\nexport default DashboardDetails;\n","import {\n ThumbsupIcon,\n ThumbsdownIcon,\n ThumbsupSelectedIcon,\n ThumbsdownSelectedIcon,\n} from \"../assets/icons\";\nimport { Stack } from \"@altimateai/lego\";\nimport { Button } from \"@altimateai/lego\";\nimport styles from \"./styles.module.scss\";\nimport { useState } from \"react\";\nimport { CustomMultilineInput } from \"./Form\";\nimport { openChat, sendFeedback } from \"../api\";\n\nenum FeedbackState {\n None = \"\",\n Positive = \"good\",\n Negative = \"bad\",\n}\n\nfunction Feedback({ close }: { close: () => void }) {\n const [feedbackState, setFeedbackState] = useState(FeedbackState.None);\n const [feedbackInput, setFeedbackInput] = useState(\"\");\n const [isSubmitted, setIsSubmitted] = useState(false);\n return (\n <Stack direction=\"column\" className=\"p-2 al-h-full\">\n <Stack direction=\"row\" className=\"mb-2\">\n <div className=\"fw-semibold fs-5\">Feedback</div>\n <div className=\"spacer\"></div>\n <Button\n size=\"sm\"\n onClick={e => {\n e.stopPropagation();\n openChat();\n }}\n >\n Chat with us\n </Button>\n </Stack>\n <div className={styles.feedback_body}>\n {!isSubmitted && (\n <>\n <Stack direction=\"row\" gap=\"sm\" className=\"m-2\">\n {feedbackState === FeedbackState.Positive ? (\n <ThumbsupSelectedIcon\n className=\"cursor-pointer\"\n onClick={() => setFeedbackState(FeedbackState.None)}\n />\n ) : (\n <ThumbsupIcon\n className=\"cursor-pointer\"\n onClick={() => setFeedbackState(FeedbackState.Positive)}\n />\n )}\n {feedbackState === FeedbackState.Negative ? (\n <ThumbsdownSelectedIcon\n className=\"cursor-pointer\"\n onClick={() => setFeedbackState(FeedbackState.None)}\n />\n ) : (\n <ThumbsdownIcon\n className=\"cursor-pointer\"\n onClick={() => setFeedbackState(FeedbackState.Negative)}\n />\n )}\n </Stack>\n <p>AI still needs humans sometimes, please help it out 🙂</p>\n <CustomMultilineInput\n value={feedbackInput}\n onChange={(e: React.ChangeEvent<HTMLTextAreaElement>) =>\n setFeedbackInput(e.target.value)\n }\n placeholder=\"What did AI do wrong? What it should have done?\"\n />\n <Stack direction=\"row\" gap=\"sm\" className=\"mt-3\">\n <Button\n size=\"sm\"\n onClick={async e => {\n e.stopPropagation();\n if (feedbackState === FeedbackState.None) return;\n await sendFeedback({\n feedback_value: feedbackState,\n feedback_text: feedbackInput,\n });\n setIsSubmitted(true);\n }}\n >\n Submit\n </Button>\n <Button\n size=\"sm\"\n variant=\"link\"\n className={styles.cancel_btn}\n onClick={e => {\n e.stopPropagation();\n close();\n }}\n >\n Cancel\n </Button>\n </Stack>\n </>\n )}\n {isSubmitted && (\n <>\n <p>Many thanks for your feedback!</p>\n <Button\n size=\"sm\"\n onClick={e => {\n e.stopPropagation();\n close();\n }}\n >\n Close\n </Button>\n </>\n )}\n </div>\n </Stack>\n );\n}\n\nexport { Feedback };\n","import \"reactflow/dist/style.css\";\nimport { Stack } from \"@altimateai/lego\";\nimport { Label, Typography, Input } from \"@altimateai/lego\";\nimport styles from \"./styles.module.scss\";\nimport { CLL } from \"../cllUtils\";\nimport { CustomInput } from \"./Form\";\nimport { useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport { setDefaultExpansion, setNonSelectCheck, setSelectCheck } from \"../context/LineageSlice\";\nimport { persistLineageSettings } from \"../api\";\n\nfunction Settings({ applyDefault }: { applyDefault: (v: number) => void }) {\n const {\n state: { selectCheck, nonSelectCheck, defaultExpansion, aiEnabled },\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n\n return (\n <Stack className=\"al-p-2 al-h-full\" direction=\"column\">\n <Typography variant=\"h4\">Settings</Typography>\n <Stack direction=\"column\">\n <div>\n <Label htmlFor=\"default-expansion\" className=\"fs-6 mb-1\">\n Default Expansion\n </Label>\n <CustomInput\n id=\"default-expansion\"\n value={defaultExpansion}\n type=\"number\"\n onChange={e => {\n const value = Math.max(parseInt(e.target.value), 0);\n lineageDispatch(setDefaultExpansion(value));\n persistLineageSettings({ defaultExpansion: value });\n applyDefault(value);\n }}\n />\n </div>\n {aiEnabled && (\n <>\n <div className=\"fs-6\">Edges visibility</div>\n <div className={styles.select_node_checkbox}>\n <Input\n type=\"checkbox\"\n id=\"select-check\"\n className=\"mt-2\"\n checked={selectCheck}\n onChange={e => {\n if (CLL.inProgress) {\n CLL.showCllInProgressMsg();\n return;\n }\n lineageDispatch(setSelectCheck(e.target.checked));\n persistLineageSettings({\n showSelectEdges: e.target.checked,\n });\n }}\n />\n <Stack direction=\"column\">\n <Label htmlFor=\"select-check\" className=\"fs-6\">\n Select\n </Label>\n <div className=\"text-grey\">\n Select linkages are shown if there is direct flow of data between columns through\n select statements.\n </div>\n </Stack>\n </div>\n <div className={styles.non_select_node_checkbox}>\n <Input\n type=\"checkbox\"\n id=\"non-select-check\"\n className=\"mt-2\"\n checked={nonSelectCheck}\n onChange={e => {\n if (CLL.inProgress) {\n CLL.showCllInProgressMsg();\n return;\n }\n lineageDispatch(setNonSelectCheck(e.target.checked));\n persistLineageSettings({\n showNonSelectEdges: e.target.checked,\n });\n }}\n />\n <Stack direction=\"column\">\n <Label htmlFor=\"non-select-check\" className=\"fs-6\">\n Non-Select\n </Label>\n <div className=\"text-grey\">\n Non-Select linkages are shown if columns appear in condition/clauses like where,\n join, having, etc.\n </div>\n </Stack>\n </div>\n </>\n )}\n </Stack>\n </Stack>\n );\n}\n\nexport { Settings };\n","import {\n Dispatch,\n PropsWithoutRef,\n ReactNode,\n SetStateAction,\n createContext,\n useContext,\n} from \"react\";\nimport { Popover, PopoverTrigger, PopoverContent } from \"@altimateai/lego\";\n\nconst PopoverContext = createContext<{\n openedPopover: string;\n setOpenedPopover: Dispatch<SetStateAction<string>>;\n}>({ openedPopover: \"\", setOpenedPopover: () => {} });\n\nfunction BetterPopover({\n id,\n trigger,\n render,\n}: PropsWithoutRef<{\n id: string;\n trigger: ReactNode;\n render: (_args: { close: () => void }) => ReactNode;\n}>) {\n const { openedPopover, setOpenedPopover } = useContext(PopoverContext);\n\n return (\n <Popover open={openedPopover === id} onOpenChange={open => setOpenedPopover(open ? id : \"\")}>\n <PopoverTrigger asChild>\n <div\n id={id}\n onClick={e => {\n e.stopPropagation();\n }}\n >\n {trigger}\n </div>\n </PopoverTrigger>\n <PopoverContent className=\"al-tw-scope\">\n <div>{render({ close: () => setOpenedPopover(\"\") })}</div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { BetterPopover, PopoverContext };\n","import { useCallback, useContext, useEffect, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport { calculateExpand, DEFAULT_MIN_ZOOM } from \"../utils\";\nimport {\n calculateMinLevel,\n calculateNodeCount,\n expandTableLineageLevelWise,\n highlightTableConnections,\n layoutElementsOnCanvas,\n} from \"../graph\";\nimport { Button } from \"@altimateai/lego\";\nimport { Stack } from \"@altimateai/lego\";\nimport {\n setLeftExpansion,\n setMinRange,\n setNodeCount,\n setRightExpansion,\n} from \"../context/LineageSlice\";\nimport { useReactFlow } from \"reactflow\";\nimport styles from \"./styles.module.scss\";\nimport { BetterPopover, PopoverContext } from \"./BetterPopover\";\nimport {\n ArrowLeftDoubleIcon,\n ArrowLeftIcon,\n ArrowRightDoubleIcon,\n ArrowRightIcon,\n ExpandIcon,\n} from \"../assets/icons\";\n\nconst AutoExpansionPopover = () => {\n const flow = useReactFlow();\n const {\n state: { selectedTable, leftExpansion, rightExpansion, minRange, nodeCount, defaultExpansion },\n rerender,\n } = useLineageContext();\n const [maxRange, setMaxRange] = useState<[number, number]>([0, 0]);\n const lineageDispatch = useLineageDispatch();\n\n const { openedPopover } = useContext(PopoverContext);\n const popoverId = \"auto-expansion-popover\";\n const isPopoverOpen = openedPopover === popoverId;\n\n useEffect(() => {\n lineageDispatch(setLeftExpansion(calculateExpand(minRange[0], maxRange[0], defaultExpansion)));\n lineageDispatch(setRightExpansion(calculateExpand(minRange[1], maxRange[1], defaultExpansion)));\n }, [defaultExpansion, lineageDispatch, maxRange, minRange]);\n\n useEffect(() => {\n (async () => {\n lineageDispatch(\n setNodeCount(\n await calculateNodeCount(\n flow.getNodes(),\n flow.getEdges(),\n selectedTable,\n leftExpansion,\n rightExpansion\n )\n )\n );\n })();\n }, [flow, leftExpansion, lineageDispatch, rightExpansion, selectedTable]);\n\n useEffect(() => {\n (async () => {\n if (!isPopoverOpen) return;\n if (!selectedTable) return;\n const selectedTableData = flow.getNode(selectedTable)?.data;\n if (!selectedTableData) return;\n const { level } = selectedTableData;\n const nodes = flow.getNodes();\n const edges = flow.getEdges();\n const [newNodes] = await expandTableLineageLevelWise(\n nodes,\n edges,\n selectedTable,\n -Infinity,\n Infinity,\n Infinity\n );\n let minLevel = Infinity;\n let maxLevel = -Infinity;\n for (const n of newNodes) {\n minLevel = Math.min(minLevel, n.data.level);\n maxLevel = Math.max(maxLevel, n.data.level);\n }\n setMaxRange([level - minLevel, maxLevel - level]);\n })();\n }, [flow, selectedTable, isPopoverOpen]);\n\n const updateLeftExpansion = useCallback(() => {\n lineageDispatch(\n setLeftExpansion(leftExpansion + 1 <= maxRange[0] ? leftExpansion + 1 : leftExpansion)\n );\n }, [leftExpansion, lineageDispatch, maxRange]);\n\n const updateRightExpansion = useCallback(() => {\n lineageDispatch(\n setRightExpansion(rightExpansion + 1 <= maxRange[0] ? rightExpansion + 1 : rightExpansion)\n );\n }, [rightExpansion, lineageDispatch, maxRange]);\n\n return (\n <BetterPopover\n id={popoverId}\n trigger={\n <Button variant=\"outline\" size=\"xs\" type=\"button\">\n <ExpandIcon />\n Expand\n </Button>\n }\n render={({ close }) => (\n <Stack direction=\"column\" gap=\"xs\">\n <Stack direction=\"row\" className=\"al-w-full\" gap=\"xl\" justify=\"between\" align=\"center\">\n <div\n className={classNames(styles.expand_nav, {\n [styles.disabled]: minRange[0] === -1,\n })}\n >\n <div className={styles.expand_nav_btn}>\n <div\n className={styles.icon}\n onClick={e => {\n e.stopPropagation();\n if (!selectedTable) return;\n lineageDispatch(setLeftExpansion(maxRange[0]));\n }}\n >\n <ArrowLeftDoubleIcon />\n </div>\n <div className={styles.divider} />\n <div\n className={styles.icon}\n onClick={e => {\n e.stopPropagation();\n if (!selectedTable) return;\n updateLeftExpansion();\n }}\n >\n <ArrowLeftIcon />\n </div>\n </div>\n <div className=\"text-blue px-2 py-1\">{leftExpansion}</div>\n </div>\n <div\n className={classNames(styles.expand_nav, {\n [styles.disabled]: minRange[1] === -1,\n })}\n >\n <div className=\"text-blue px-2 py-1\">{rightExpansion}</div>\n <div className={styles.expand_nav_btn}>\n <div\n className={styles.icon}\n onClick={e => {\n e.stopPropagation();\n if (!selectedTable) return;\n updateRightExpansion();\n }}\n >\n <ArrowRightIcon />\n </div>\n <div className={styles.divider} />\n <div\n className={styles.icon}\n onClick={e => {\n e.stopPropagation();\n if (!selectedTable) return;\n lineageDispatch(setRightExpansion(maxRange[1]));\n }}\n >\n <ArrowRightDoubleIcon />\n </div>\n </div>\n </div>\n </Stack>\n <Stack direction=\"row\" className=\"al-w-full\" gap=\"xl\" justify=\"between\" align=\"center\">\n <div className=\"normal-text\">Parents</div>\n <div className=\"normal-text\">Children</div>\n </Stack>\n <Button\n variant={nodeCount === 0 ? \"secondary\" : \"default\"}\n size=\"sm\"\n disabled={nodeCount === 0}\n onClick={async e => {\n e.stopPropagation();\n if (!selectedTable) return;\n const selectedTableData = flow.getNode(selectedTable)?.data;\n if (!selectedTableData) return;\n const [nodes, edges] = await expandTableLineageLevelWise(\n flow.getNodes(),\n flow.getEdges(),\n selectedTable,\n selectedTableData.level - leftExpansion,\n selectedTableData.level + rightExpansion,\n Infinity\n );\n highlightTableConnections(nodes, edges, selectedTable);\n layoutElementsOnCanvas(nodes, edges);\n flow.setNodes(nodes);\n flow.setEdges(edges);\n flow.fitView({ minZoom: DEFAULT_MIN_ZOOM });\n lineageDispatch(setMinRange(calculateMinLevel(nodes, edges, selectedTable)));\n lineageDispatch(\n setNodeCount(\n await calculateNodeCount(\n nodes,\n edges,\n selectedTable,\n leftExpansion,\n rightExpansion\n )\n )\n );\n rerender();\n close();\n }}\n >\n Add {nodeCount} tables\n </Button>\n </Stack>\n )}\n />\n );\n};\n\nexport default AutoExpansionPopover;\n","import { IconButton, Stack } from \"@altimateai/lego\";\nimport { Card, CardContent } from \"@altimateai/lego\";\nimport styles from \"./styles.module.scss\";\nimport AutoExpansionPopover from \"./AutoExpansionPopover\";\nimport { InfoCircleIcon } from \"../../../assets/icons\";\nimport { createPortal } from \"react-dom\";\nimport { useLineageContext } from \"../context/LineageProvider\";\n\nconst ExpandWithConfidenceCard = () => {\n const {\n state: { selectedColumn, confidence, aiEnabled },\n } = useLineageContext();\n const expandContainer = document.getElementById(\"expand-container\");\n if (!expandContainer) {\n return null;\n }\n return createPortal(\n <Card className={styles.menu_card_container}>\n <CardContent className={`${styles.menu_card} pt-4`}>\n <Stack direction=\"row\" gap=\"sm\">\n <AutoExpansionPopover />\n {aiEnabled && selectedColumn?.name && confidence.confidence === \"low\" && (\n <>\n <div className={styles.verticle_divider} />\n <Stack direction=\"row\" gap=\"xxs\" align=\"center\">\n <div>Confidence</div>\n <IconButton\n title={\n \"Depending on the SQL dialect and complexity of queries, \" +\n \"there may be situations where we are not completely \" +\n \"confident about the lineage shown in this view\"\n }\n id=\"confidence\"\n >\n <InfoCircleIcon />\n </IconButton>\n <div className={styles.low_confidence}>Low</div>\n </Stack>\n </>\n )}\n </Stack>\n </CardContent>\n </Card>,\n expandContainer\n );\n};\n\nexport default ExpandWithConfidenceCard;\n","import { SettingsIcon } from \"../../../assets/icons\";\nimport { Button } from \"@altimateai/lego\";\nimport { createPortal } from \"react-dom\";\nimport { SETTINGS_SIDEBAR } from \"../constants\";\nimport { useLineageDispatch } from \"../context/LineageProvider\";\nimport { setSidebarScreen } from \"../context/LineageSlice\";\n\nconst SettingsButton = () => {\n const settingsContainer = document.getElementById(\"settings-container\");\n const lineageDispatch = useLineageDispatch();\n if (!settingsContainer) {\n return null;\n }\n return createPortal(\n <Button\n variant=\"default\"\n size=\"xs\"\n onClick={() => lineageDispatch(setSidebarScreen(SETTINGS_SIDEBAR))}\n >\n <SettingsIcon />\n Settings\n </Button>,\n settingsContainer\n );\n};\n\nexport default SettingsButton;\n","import { RefreshIcon } from \"../../../assets/icons\";\nimport { Button } from \"@altimateai/lego\";\nimport { useLineageDispatch } from \"../context/LineageProvider\";\nimport { CLL } from \"../cllUtils\";\nimport { initLineage } from \"../api\";\nimport { setCollectColumns, setMoreTables, setSelectedColumn } from \"../context/LineageSlice\";\nimport { createPortal } from \"react-dom\";\nimport { ReactFlowInstance } from \"reactflow\";\nimport styles from \"./styles.module.scss\";\n\nconst ResetButton = ({ flow }: { flow: ReactFlowInstance }) => {\n const resetContainer = document.getElementById(\"reset-container\");\n const lineageDispatch = useLineageDispatch();\n if (!resetContainer) {\n return null;\n }\n return createPortal(\n <Button\n variant=\"default\"\n size=\"xs\"\n onClick={() => {\n flow.setNodes([]);\n flow.setEdges([]);\n lineageDispatch(setSelectedColumn({ table: \"\", name: \"\" }));\n lineageDispatch(setCollectColumns({}));\n lineageDispatch(setMoreTables({}));\n initLineage();\n CLL.cancel();\n }}\n data-testid=\"reset-btn\"\n className={styles.reset_btn}\n >\n <RefreshIcon />\n <span>Reset</span>\n </Button>,\n resetContainer\n );\n};\n\nexport default ResetButton;\n","import { Stack } from \"@altimateai/lego\";\nimport { Button, Checkbox, Label, Typography } from \"@altimateai/lego\";\nimport { finalLineageDownload } from \"../api\";\nimport { ExportFinalLineageArgs } from \"../types\";\nimport { useState } from \"react\";\nimport { useMutation } from \"../../api/index\";\n\nconst FormInput = ({\n id,\n label,\n params,\n setParams,\n}: {\n id: string;\n label: string;\n params: Record<string, boolean>;\n setParams: React.Dispatch<React.SetStateAction<Record<string, boolean>>>;\n}) => (\n <Stack>\n <Checkbox\n id={id}\n checked={params[id]}\n onCheckedChange={e => setParams(prev => ({ ...prev, [id]: e as boolean }))}\n />\n <Label htmlFor={id}>{label}</Label>\n </Stack>\n);\n\nexport const ExportFinalLineageModal = ({ modalArgs }: { modalArgs: ExportFinalLineageArgs }) => {\n const { table, column } = modalArgs;\n const [params, setParams] = useState<Record<string, boolean>>({\n upstream: true,\n downstream: false,\n direct: true,\n indirect: false,\n });\n const { mutate, loading: isExporting } = useMutation({\n queryFn: () => finalLineageDownload({ column_rk: `${table}/${column}`, ...params }),\n });\n const handleExport = async () => {\n if (isExporting) return;\n if (!params.upstream && !params.downstream) return;\n if (!params.direct && !params.indirect) return;\n mutate();\n };\n\n return (\n <Stack direction=\"column\">\n <Typography weight=\"medium\" className=\"al-mb-0 al-text-primary\">\n {table}/{column}\n </Typography>\n <Stack direction=\"column\" gap=\"xxs\">\n <Typography weight=\"medium\" size=\"sm\" className=\"al-mb-0\">\n Lineage Type\n </Typography>\n <FormInput id=\"direct\" label=\"Select\" params={params} setParams={setParams} />\n <FormInput id=\"indirect\" label=\"Non select\" params={params} setParams={setParams} />\n </Stack>\n <Stack direction=\"column\" gap=\"xxs\">\n <Typography weight=\"medium\" size=\"sm\" className=\"al-mb-0\">\n Lineage Direction\n </Typography>\n <FormInput id=\"upstream\" label=\"Upstream\" params={params} setParams={setParams} />\n <FormInput id=\"downstream\" label=\"Downstream\" params={params} setParams={setParams} />\n </Stack>\n <Button onClick={handleExport}>Export</Button>\n {!params.upstream && !params.downstream && (\n <Stack className=\"al-bg-bg-red al-p-2 al-rounded-md\">\n <Typography variant=\"caption\" size=\"sm\" className=\"al-text-xs\">\n Select atleast one of the upstream or downstream\n </Typography>\n </Stack>\n )}\n {!params.direct && !params.indirect && (\n <Stack className=\"al-bg-bg-red al-p-2 al-rounded-md\">\n <Typography variant=\"caption\" size=\"sm\" className=\"al-text-xs\">\n Select atleast one of the direct or non direct\n </Typography>\n </Stack>\n )}\n {isExporting && (\n <Stack className=\"al-bg-gray-15 al-p-2 al-rounded-md\">\n <div\n className=\"al-animate-spin al-h-4 al-w-4 al-border-2 al-border-primary al-border-t-transparent al-rounded-full\"\n role=\"progressbar\"\n aria-label=\"Loading\"\n aria-hidden=\"false\"\n />\n <Typography variant=\"caption\" size=\"sm\" className=\"al-text-xs\">\n Export in progress. This may take up to a minute.\n </Typography>\n </Stack>\n )}\n </Stack>\n );\n};\n","import { useContext, useMemo } from \"react\";\nimport { CodeBlock, Stack } from \"@altimateai/lego\";\nimport styles from \"./styles.module.scss\";\nimport { HeaderSection } from \"./TableDetails\";\nimport { CloseIcon } from \"../assets/icons\";\nimport \"prismjs/themes/prism-tomorrow.css\";\nimport { useReactFlow } from \"reactflow\";\nimport { LineageContext, useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport { setModalArgs } from \"../context/LineageSlice\";\nimport ViewsTypeBadge from \"./ViewsTypeBadge\";\nimport { ExportFinalLineageArgs, OpNodeArgs, ViewsCodeModalArgs } from \"../types\";\nimport { SQL_ICONS } from \"./CustomNodes\";\nimport { ExportFinalLineageModal } from \"./ExportFinalLineageModal\";\nimport { Dialog, DialogContent, DialogOverlay, DialogPortal } from \"@altimateai/lego\";\nimport { cn } from \"../../../shared/utils\";\n\nconst ViewsCodeModal = ({ viewsCodeArgs }: { viewsCodeArgs: ViewsCodeModalArgs }) => {\n const {\n state: { theme },\n } = useContext(LineageContext);\n const lineageDispatch = useLineageDispatch();\n\n const flow = useReactFlow();\n const table = useMemo(() => {\n if (!viewsCodeArgs) return \"\";\n return flow.getNode(viewsCodeArgs.table)?.data?.label;\n }, [flow, viewsCodeArgs]);\n\n const viewsCodesFlat = useMemo(() => {\n const arr = Object.values(viewsCodeArgs?.viewsCode || [])\n .flat()\n .filter(([, type]) => type === \"Transformation\")\n .map(([code]) => code);\n const result: string[] = [];\n for (const item of arr) {\n if (result.includes(item)) continue;\n result.push(item);\n }\n return result;\n }, [viewsCodeArgs?.viewsCode]);\n\n return (\n <>\n <div className={styles.close_button} onClick={() => lineageDispatch(setModalArgs(null))}>\n <CloseIcon />\n </div>\n <Stack direction=\"column\" gap=\"sm\">\n {table && <HeaderSection nodeType={viewsCodeArgs.nodeType} table={table} />}\n <Stack direction=\"column\" gap=\"xs\">\n <div className=\"text-dark-grey fs-xs\">Column</div>\n <div className={styles.model_views_type}>{viewsCodeArgs.column}</div>\n </Stack>\n <Stack direction=\"column\" gap=\"xs\">\n <div className=\"text-dark-grey fs-xs\">Type</div>\n <div className={styles.model_views_type}>\n <ViewsTypeBadge viewsType={viewsCodeArgs.viewsType} />\n {viewsCodeArgs.viewsType}\n </div>\n </Stack>\n {viewsCodesFlat.length > 0 && (\n <Stack direction=\"column\" gap=\"xs\">\n <div className=\"text-dark-grey fs-xs\">List of transformations</div>\n {viewsCodesFlat.map(code => (\n <CodeBlock\n key={code}\n code={code}\n language=\"sql\"\n editorTheme=\"tomorrow\"\n theme={theme}\n />\n ))}\n </Stack>\n )}\n </Stack>\n </>\n );\n};\n\nfunction OpNodeModal({ opNodeArgs }: { opNodeArgs: OpNodeArgs }) {\n const {\n state: { theme },\n } = useContext(LineageContext);\n return (\n <Stack direction=\"column\" gap=\"sm\">\n <div className={styles.table_details_header}>\n {SQL_ICONS[opNodeArgs.op_type]}\n <Stack direction=\"row\" align=\"center\">\n <div className=\"fw-semibold fs-5 lines-2\">{opNodeArgs.op_type}</div>\n </Stack>\n </div>\n <Stack direction=\"column\" gap=\"xs\">\n <div className=\"text-dark-grey fs-xs\">Code</div>\n <CodeBlock code={opNodeArgs.op_code} language=\"sql\" editorTheme=\"tomorrow\" theme={theme} />\n </Stack>\n </Stack>\n );\n}\n\nexport const LineageModal = () => {\n const {\n state: { modalArgs },\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n if (!modalArgs) return null;\n return (\n <Dialog\n open={modalArgs.type !== \"none\"}\n onOpenChange={() => lineageDispatch(setModalArgs({ type: \"none\" }))}\n >\n <DialogPortal>\n <DialogOverlay />\n <DialogContent\n className={cn(\n \"al-tw-scope al-fixed al-left-[50%] al-top-[50%] al-z-50 al-grid al-w-full al-max-w-lg al-translate-x-[-50%] al-translate-y-[-50%] al-gap-4 al-border al-bg-background al-p-6 al-shadow-lg al-duration-200 data-[state=open]:al-animate-in data-[state=closed]:al-animate-out data-[state=closed]:al-fade-out-0 data-[state=open]:al-fade-in-0 data-[state=closed]:al-zoom-out-95 data-[state=open]:al-zoom-in-95 data-[state=closed]:al-slide-out-to-left-1/2 data-[state=closed]:al-slide-out-to-top-[48%] data-[state=open]:al-slide-in-from-left-1/2 data-[state=open]:al-slide-in-from-top-[48%] sm:al-rounded-lg\"\n )}\n >\n <div\n className={styles.close_button}\n onClick={() => lineageDispatch(setModalArgs({ type: \"none\" }))}\n >\n <CloseIcon />\n </div>\n {modalArgs.type === \"views_code\" && (\n <ViewsCodeModal viewsCodeArgs={modalArgs.args as ViewsCodeModalArgs} />\n )}\n {modalArgs.type === \"op_node\" && (\n <OpNodeModal opNodeArgs={modalArgs.args as OpNodeArgs} />\n )}\n {modalArgs.type === \"export_final_lineage\" && (\n <ExportFinalLineageModal modalArgs={modalArgs.args as ExportFinalLineageArgs} />\n )}\n </DialogContent>\n </DialogPortal>\n </Dialog>\n );\n};\n","import { ShareIcon } from \"../../../assets/icons\";\nimport { Button } from \"@altimateai/lego\";\nimport { createPortal } from \"react-dom\";\nimport { useLineageContext } from \"../context/LineageProvider\";\nimport { ReactFlowInstance } from \"reactflow\";\nimport { isColumn, isNotColumn } from \"../utils\";\nimport { BetterPopover } from \"./BetterPopover\";\nimport { useState } from \"react\";\nimport { CustomInput } from \"./Form\";\nimport { exportLineage, getColumns, showInfoNotification } from \"../api\";\nimport { Details, StaticLineage } from \"../types\";\n\nconst ExportButton = ({ flow }: { flow: ReactFlowInstance }) => {\n const exportContainer = document.getElementById(\"export-container\");\n const {\n state: { selectedColumn, collectColumns },\n } = useLineageContext();\n const [name, setName] = useState(\"\");\n const handleExportLineage = async (close: () => void) => {\n const edges = flow.getEdges();\n const tableEdges = edges\n .filter(e => isNotColumn(e))\n .map(e => [e.source, e.target] as [string, string]);\n const columnEdges = edges\n .filter(e => isColumn(e))\n .map(\n e =>\n // remove column prefix for edge\n [e.source.slice(7), e.target.slice(7), e.data?.type] as [string, string, string]\n );\n const details: Details = {};\n await Promise.all(\n flow.getNodes().map(async n => {\n if (isColumn(n)) return;\n const data = await getColumns(n.id, false);\n details[n.id] = {\n type: n.data.nodeType,\n nodeId: n.id,\n name: n.data.label,\n ...data,\n };\n })\n );\n\n const lineage_data: StaticLineage = {\n selectedColumn: selectedColumn!,\n collectColumns,\n tableEdges,\n columnEdges,\n details,\n };\n const response = await exportLineage({ name, lineage_data });\n if (response?.url) {\n showInfoNotification(`Lineage is exported at [link](${response.url})`);\n }\n close();\n setName(\"\");\n };\n if (!exportContainer) {\n return null;\n }\n return createPortal(\n <BetterPopover\n id=\"export-popover\"\n trigger={\n <Button variant=\"default\" size=\"xs\">\n <ShareIcon />\n Export\n </Button>\n }\n render={({ close }) => {\n return (\n <div>\n <CustomInput\n id=\"export-name\"\n value={name}\n type=\"text\"\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setName(e.target.value)}\n className=\"mb-2\"\n placeholder=\"Enter name\"\n />\n <Button\n variant={name === \"\" ? \"secondary\" : \"default\"}\n size=\"sm\"\n onClick={() => handleExportLineage(close)}\n disabled={name === \"\"}\n >\n <ShareIcon />\n Export\n </Button>\n </div>\n );\n }}\n />,\n exportContainer\n );\n};\n\nexport default ExportButton;\n","import classNames from \"classnames\";\nimport { ComponentLoader } from \"./Loader\";\nimport styles from \"./styles.module.scss\";\nimport { useReactFlow } from \"reactflow\";\nimport { useLineageContext } from \"../context/LineageProvider\";\nimport { SnowflakeStageMetadata } from \"../types\";\nimport { getSnowflakeStageDetails } from \"../api\";\nimport { Stack } from \"@altimateai/lego\";\nimport { SeedIcon } from \"../assets/icons\";\nimport { Card, Typography } from \"@altimateai/lego\";\nimport { useQuery } from \"../../api/index\";\nimport { useCallback } from \"react\";\n\nconst SnowflakeStageDetails = () => {\n const flow = useReactFlow();\n const {\n state: { selectedTable },\n } = useLineageContext();\n const selectedTableData = flow.getNode(selectedTable)?.data;\n const fetchDetails = useCallback(() => getSnowflakeStageDetails(selectedTable), [selectedTable]);\n\n const { data, loading } = useQuery<SnowflakeStageMetadata>({\n queryFn: fetchDetails,\n });\n\n if (loading || !data || !selectedTable) return <ComponentLoader />;\n\n return (\n <Stack direction=\"column\" className=\"al-p-2 al-h-full al-overflow-y\">\n <div className={styles.table_details_header}>\n <Stack direction=\"column\" align=\"center\" gap=\"none\" className=\"al-text-primary\">\n <SeedIcon className=\"icon-sm\" />\n <Typography variant=\"caption\" size=\"sm\" className=\"al-text-xs al-mb-0 al-text-primary\">\n STG\n </Typography>\n </Stack>\n <Stack align=\"center\">\n <Typography weight=\"medium\" className=\"lines-2 al-mb-0\">\n {selectedTableData?.label}\n </Typography>\n </Stack>\n </div>\n <div className={classNames(styles.card, \"column-section\")}>\n {[\n { label: \"Stage Url\", value: data.stage_url },\n { label: \"Stage Region\", value: data.stage_region },\n { label: \"Stage Type\", value: data.stage_type },\n { label: \"Stage Owner\", value: data.stage_owner },\n ].map(({ label, value }) => (\n <Card key={label} className=\"al-mb-2 al-p-2\">\n <Stack>\n <Typography weight=\"medium\" size=\"sm\" className=\"al-mb-0\">\n {label}:\n </Typography>\n <Typography weight=\"regular\" size=\"sm\" className=\"al-mb-0\">\n {value}\n </Typography>\n </Stack>\n </Card>\n ))}\n </div>\n </Stack>\n );\n};\n\nexport default SnowflakeStageDetails;\n","import { useEffect, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { ComponentLoader } from \"./Loader\";\nimport styles from \"./styles.module.scss\";\nimport { NodeTypeIcon } from \"./Column\";\nimport { useReactFlow } from \"reactflow\";\nimport { useLineageContext } from \"../context/LineageProvider\";\nimport { FunctionMetaData } from \"../types\";\nimport { getFunctionDetails } from \"../api\";\nimport PurposeSection from \"./Purpose\";\nimport ColumnRow from \"./ColumnRow\";\nimport { Stack } from \"@altimateai/lego\";\n\nconst FunctionDetails = () => {\n const flow = useReactFlow();\n const {\n state: { selectedTable },\n } = useLineageContext();\n const [data, setData] = useState<FunctionMetaData | null>(null);\n const selectedTableData = flow.getNode(selectedTable)?.data;\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n useEffect(() => {\n if (!selectedTable) return;\n setIsLoading(true);\n setError(null);\n getFunctionDetails(selectedTable)\n .then(_data => {\n setData(_data);\n setIsLoading(false);\n })\n .catch(err => {\n setError(String(err?.message || err));\n setIsLoading(false);\n });\n }, [selectedTable]);\n\n if (isLoading) return <ComponentLoader />;\n if (error || !data || !selectedTable) {\n return (\n <Stack direction=\"column\" gap=\"md\" className=\"al-p-4\">\n <div className=\"al-text-sm al-text-destructive-foreground\">\n {error ? `Failed to load function details: ${error}` : \"No data available\"}\n </div>\n </Stack>\n );\n }\n\n return (\n <Stack direction=\"column\" gap=\"md\" className=\"al-p-2 al-h-full al-overflow-y-auto\">\n <div className={styles.table_details_header}>\n <NodeTypeIcon nodeType={selectedTableData.nodeType} />\n <Stack direction=\"row\" align=\"center\">\n <div className=\"fw-semibold fs-5 lines-2\">{selectedTableData.label}</div>\n </Stack>\n </div>\n {data.description ? <PurposeSection purpose={data.description} /> : null}\n <div className={classNames(styles.card, \"flex-grow column-section\")}>\n {data.config?.type && <ColumnRow title=\"Type\" value={data.config.type} />}\n {data.config?.volatility && <ColumnRow title=\"Volatility\" value={data.config.volatility} />}\n {data.config?.runtime_version && (\n <ColumnRow title=\"Runtime\" value={data.config.runtime_version} />\n )}\n {data.config?.entry_point && (\n <ColumnRow title=\"Entry Point\" value={data.config.entry_point} />\n )}\n {data.package_name && <ColumnRow title=\"Package\" value={data.package_name} />}\n {data.returns && (\n <ColumnRow\n title=\"Returns\"\n value={`${data.returns.data_type}${data.returns.description ? ` — ${data.returns.description}` : \"\"}`}\n />\n )}\n {data.arguments && data.arguments.length > 0 && (\n <ColumnRow\n title=\"Arguments\"\n value={data.arguments\n .map(arg => {\n let s = `${arg.name}: ${arg.data_type}`;\n if (arg.default_value) s += ` = ${arg.default_value}`;\n return s;\n })\n .join(\", \")}\n />\n )}\n </div>\n </Stack>\n );\n};\n\nexport default FunctionDetails;\n","import { Component, PropsWithChildren } from \"react\";\nimport { Stack } from \"@altimateai/lego\";\n\ninterface State {\n error: string | null;\n}\n\nclass SidebarErrorBoundary extends Component<PropsWithChildren, State> {\n state: State = { error: null };\n\n static getDerivedStateFromError(error: unknown) {\n return { error: String(error instanceof Error ? error.message : error) };\n }\n\n render() {\n if (this.state.error) {\n return (\n <Stack direction=\"column\" gap=\"md\" className=\"al-p-4\">\n <div className=\"al-text-sm al-font-medium\">Something went wrong</div>\n <div className=\"al-text-xs al-text-muted-foreground\">{this.state.error}</div>\n </Stack>\n );\n }\n return this.props.children;\n }\n}\n\nexport default SidebarErrorBoundary;\n","import ReactFlow, {\n Background,\n Controls,\n Edge,\n Node,\n NodeTypes,\n ReactFlowInstance,\n ReactFlowProvider,\n} from \"reactflow\";\nimport {\n createTableNode,\n DEFAULT_MIN_ZOOM,\n toggleColumnEdges,\n toggleModelEdges,\n getCurrentTableId,\n handleTableNavigation,\n} from \"../utils\";\nimport LineageLegend from \"./LineageLegend\";\nimport { MutableRefObject, useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n ColumnNode,\n SeeMoreNode,\n SelfConnectingEdge,\n TableNode,\n DashboardNode,\n} from \"./CustomNodes\";\nimport { useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport { SidebarModal } from \"./sidebarModal/SidebarModal\";\nimport {\n setAiEnabled,\n setCollectColumns,\n setConfig,\n setDefaultExpansion,\n setLightdashEnabled,\n setMinRange,\n setMoreTables,\n setNodeCount,\n setNonSelectCheck,\n setSelectCheck,\n setSelectedColumn,\n setSelectedTable,\n setShowCodeModal,\n setSidebarScreen,\n} from \"../context/LineageSlice\";\nimport { MoreTables } from \"./MoreTables\";\nimport {\n TABLES_SIDEBAR,\n COLUMNS_SIDEBAR,\n EXPOSURE_SIDEBAR,\n FEEDBACK_SIDEBAR,\n SETTINGS_SIDEBAR,\n SNOWFLAKE_STAGE_SIDEBAR,\n DASHBOARD_SIDEBAR,\n FUNCTION_SIDEBAR,\n} from \"../constants\";\nimport { TableDetails } from \"./TableDetails\";\nimport ExposureDetails from \"./ExposureDetails\";\nimport DashboardDetails from \"./DashboardDetails\";\nimport { Feedback } from \"./Feedback\";\nimport { Settings } from \"./Settings\";\nimport { getLineageSettings, initLineage } from \"../api\";\nimport \"./index.scss\";\nimport { PopoverContext } from \"./BetterPopover\";\nimport ExpandWithConfidenceCard from \"./ExpandWithConfidenceCard\";\nimport SettingsButton from \"./SettingsButton\";\nimport ResetButton from \"./ResetButton\";\nimport { Table } from \"../types\";\nimport {\n calculateMinLevel,\n calculateNodeCount,\n expandTableLineageLevelWise,\n highlightTableConnections,\n layoutElementsOnCanvas,\n} from \"../graph\";\nimport { LineageModal } from \"./LineageModals\";\nimport ExportButton from \"./ExportButton\";\nimport SnowflakeStageDetails from \"./SnowflakeStageDetails\";\nimport FunctionDetails from \"./FunctionDetails\";\nimport SidebarErrorBoundary from \"./SidebarErrorBoundary\";\n\nconst nodeTypes: NodeTypes = {\n table: TableNode,\n seeMore: SeeMoreNode,\n dashboard: DashboardNode,\n column: ColumnNode,\n};\nconst edgeTypes = { selfConnecting: SelfConnectingEdge };\n\nconst DynamicLineage = ({\n flow,\n theme,\n}: {\n flow: MutableRefObject<ReactFlowInstance<unknown, unknown> | undefined>;\n theme: \"dark\" | \"light\";\n}) => {\n const [openedPopover, setOpenedPopover] = useState(\"\");\n const {\n state: {\n selectCheck,\n nonSelectCheck,\n sidebarScreen,\n leftExpansion,\n rightExpansion,\n selectedColumn,\n defaultExpansion,\n errors,\n },\n rerender,\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n // hack for default expansion\n const defaultExpansionRef = useRef(defaultExpansion);\n\n const onCllCancelled = useCallback(() => {\n if (flow.current) {\n const edges = flow.current.getEdges();\n toggleModelEdges(edges, true);\n toggleColumnEdges(edges, false);\n flow.current.setEdges(edges);\n }\n }, [flow]);\n\n const renderStartNode = useCallback(\n async (args: {\n node?: Table;\n aiEnabled: boolean;\n lightdashEnabled: boolean;\n showCodeModal: boolean;\n config: { exportFinalLineage: boolean };\n }) => {\n lineageDispatch(setSidebarScreen(\"\"));\n if (!args) return;\n lineageDispatch(setAiEnabled(args.aiEnabled));\n lineageDispatch(setLightdashEnabled(args.lightdashEnabled));\n lineageDispatch(setShowCodeModal(args.showCodeModal));\n lineageDispatch(setConfig(args.config));\n const { node } = args;\n const _flow = flow.current;\n if (!_flow || !node) return;\n const existingNode = _flow.getNode(node.table);\n if (existingNode) {\n lineageDispatch(setSelectedTable(node.table));\n let nodes = _flow.getNodes();\n let edges = _flow.getEdges();\n if (!selectedColumn?.name) {\n [nodes, edges] = highlightTableConnections(nodes, edges, node.table);\n _flow.setNodes(nodes);\n _flow.setEdges(edges);\n }\n lineageDispatch(setMinRange(calculateMinLevel(nodes, edges, node.table)));\n lineageDispatch(\n setNodeCount(\n await calculateNodeCount(nodes, edges, node.table, leftExpansion, rightExpansion)\n )\n );\n return;\n }\n let nodes: Node[] = [];\n let edges: Edge[] = [];\n nodes = [createTableNode(node, 0, \"\")];\n [nodes, edges] = await expandTableLineageLevelWise(\n nodes,\n edges,\n node.table,\n -defaultExpansionRef.current,\n defaultExpansionRef.current\n );\n lineageDispatch(setSelectedTable(node.table));\n lineageDispatch(setSelectedColumn({ table: \"\", name: \"\" }));\n lineageDispatch(setCollectColumns({}));\n lineageDispatch(setMoreTables({}));\n [nodes, edges] = highlightTableConnections(nodes, edges, node.table);\n layoutElementsOnCanvas(nodes, edges);\n _flow.setNodes(nodes);\n _flow.setEdges(edges);\n _flow.fitView({ minZoom: DEFAULT_MIN_ZOOM, duration: 500 });\n lineageDispatch(setMinRange(calculateMinLevel(nodes, edges, node.table)));\n lineageDispatch(\n setNodeCount(\n await calculateNodeCount(nodes, edges, node.table, leftExpansion, rightExpansion)\n )\n );\n rerender();\n },\n [lineageDispatch, flow, leftExpansion, rightExpansion, rerender, selectedColumn?.name]\n );\n\n useEffect(() => {\n document.addEventListener(\"cll_cancelled\", onCllCancelled);\n const handleRenderStartNode = (e: CustomEvent) => {\n console.log(\"renderStartNode\", e.detail);\n renderStartNode(e.detail);\n };\n // @ts-ignore\n document.addEventListener(\"renderStartNode\", handleRenderStartNode);\n\n return () => {\n document.removeEventListener(\"cll_cancelled\", onCllCancelled);\n // @ts-ignore\n document.removeEventListener(\"renderStartNode\", handleRenderStartNode);\n };\n }, [onCllCancelled, renderStartNode]);\n\n const applySettings = useCallback(async () => {\n const settings = await getLineageSettings();\n lineageDispatch(setSelectCheck(settings.showSelectEdges));\n lineageDispatch(setNonSelectCheck(settings.showNonSelectEdges));\n lineageDispatch(setDefaultExpansion(settings.defaultExpansion));\n defaultExpansionRef.current = settings.defaultExpansion;\n }, [lineageDispatch]);\n\n useEffect(() => {\n applySettings();\n }, [applySettings]);\n\n useEffect(() => {\n const _flow = flow.current;\n if (!_flow) return;\n const handleEdgeVisibilityChanges = async () => {\n const _column = selectedColumn;\n if (!_column?.name) return;\n const _edges = _flow.getEdges();\n if ((selectCheck && nonSelectCheck) || (!selectCheck && !nonSelectCheck)) {\n for (const e of _edges) e.hidden = false;\n _flow.setEdges(_edges);\n return;\n }\n for (const e of _edges) {\n e.hidden = false;\n const _type = (e.data as { type: string })?.type;\n if (!_type) continue;\n if (_type === \"direct\") e.hidden = !selectCheck;\n if (_type === \"indirect\") e.hidden = !nonSelectCheck;\n }\n _flow.setEdges(_edges);\n };\n handleEdgeVisibilityChanges();\n }, [selectCheck, nonSelectCheck, flow, selectedColumn, lineageDispatch, errors]);\n\n const afterFlowRender = (flowInstance: ReactFlowInstance) => {\n flow.current = flowInstance;\n initLineage();\n };\n\n return (\n <div\n className=\"lineage_flow_component\"\n style={{ width: \"100%\", height: \"100%\" }}\n data-theme={theme}\n >\n <PopoverContext.Provider value={{ openedPopover, setOpenedPopover }}>\n <ReactFlowProvider>\n <ReactFlow\n defaultNodes={[]}\n defaultEdges={[]}\n onInit={_flow => afterFlowRender(_flow)}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n style={{ background: \"var(--bg-color)\" }}\n proOptions={{ hideAttribution: true }}\n minZoom={DEFAULT_MIN_ZOOM}\n >\n <Background />\n <Controls />\n </ReactFlow>\n <LineageLegend />\n <SidebarModal\n isOpen={sidebarScreen !== \"\"}\n closeModal={() => lineageDispatch(setSidebarScreen(\"\"))}\n width=\"30vw\"\n >\n <SidebarErrorBoundary key={sidebarScreen}>\n {sidebarScreen === TABLES_SIDEBAR && <MoreTables />}\n {sidebarScreen === COLUMNS_SIDEBAR && (\n <TableDetails\n lineageType=\"dynamic\"\n currentTableId={getCurrentTableId()}\n onNavigate={handleTableNavigation}\n />\n )}\n {sidebarScreen === EXPOSURE_SIDEBAR && <ExposureDetails />}\n {sidebarScreen === DASHBOARD_SIDEBAR && (\n <DashboardDetails onNavigate={handleTableNavigation} />\n )}\n {sidebarScreen === SNOWFLAKE_STAGE_SIDEBAR && <SnowflakeStageDetails />}\n {sidebarScreen === FUNCTION_SIDEBAR && <FunctionDetails />}\n {sidebarScreen === FEEDBACK_SIDEBAR && (\n <Feedback close={() => setSidebarScreen(\"\")} />\n )}\n {sidebarScreen === SETTINGS_SIDEBAR && (\n <Settings applyDefault={(v: number) => (defaultExpansionRef.current = v)} />\n )}\n </SidebarErrorBoundary>\n </SidebarModal>\n {flow.current ? <ExportButton flow={flow.current} /> : null}\n <ExpandWithConfidenceCard />\n <SettingsButton />\n {flow.current ? <ResetButton flow={flow.current} /> : null}\n <LineageModal />\n </ReactFlowProvider>\n </PopoverContext.Provider>\n </div>\n );\n};\n\nexport default DynamicLineage;\n","import { MutableRefObject, useEffect } from \"react\";\nimport { CollectColumn, Details } from \"../types\";\nimport { ColumnNode, SeeMoreNode, SelfConnectingEdge, TableNode } from \"./CustomNodes\";\nimport ReactFlow, {\n Background,\n Controls,\n Edge,\n Node,\n ReactFlowInstance,\n ReactFlowProvider,\n} from \"reactflow\";\nimport { createNewNodesEdges, layoutElementsOnCanvas, staticProcessColumnLineage } from \"../graph\";\nimport { useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport { setCollectColumns, setSidebarScreen } from \"../context/LineageSlice\";\nimport { LineageModal } from \"./LineageModals\";\nimport { findSourcesSinks, getCurrentTableId, handleTableNavigation } from \"../utils\";\nimport { SidebarModal } from \"./sidebarModal/SidebarModal\";\nimport { MoreTables } from \"./MoreTables\";\nimport { TableDetails } from \"./TableDetails\";\nimport ExposureDetails from \"./ExposureDetails\";\nimport FunctionDetails from \"./FunctionDetails\";\nimport SidebarErrorBoundary from \"./SidebarErrorBoundary\";\nimport { COLUMNS_SIDEBAR, EXPOSURE_SIDEBAR, FUNCTION_SIDEBAR, TABLES_SIDEBAR } from \"../constants\";\nimport LineageLegend from \"./LineageLegend\";\n\nconst nodeTypes = {\n table: TableNode,\n seeMore: SeeMoreNode,\n column: ColumnNode,\n};\nconst edgeTypes = {\n selfConnecting: SelfConnectingEdge,\n};\n\ntype StaticLineageProps = {\n flow: MutableRefObject<ReactFlowInstance<unknown, unknown> | undefined>;\n selectedColumn: { table: string; name: string };\n collectColumns: Record<string, CollectColumn[]>;\n columnEdges?: [string, string, string][];\n tableEdges: [string, string][];\n details: Details;\n};\n\nconst StaticLineage = ({\n flow,\n selectedColumn,\n collectColumns,\n columnEdges = [],\n tableEdges,\n details,\n}: StaticLineageProps) => {\n const {\n state: { sidebarScreen },\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n\n useEffect(() => {\n lineageDispatch(setCollectColumns(collectColumns));\n setTimeout(async () => {\n const _createTable = (table: string) => ({\n table,\n label: details[table].name!,\n upstreamCount: 0,\n downstreamCount: 0,\n nodeType: details[table].type || \"cte\",\n isExternalProject: false,\n tests: [],\n });\n const { sources } = findSourcesSinks(tableEdges);\n let nodes: Node[] = [];\n let edges: Edge[] = [];\n const queue = [...sources];\n const visited: Record<string, boolean> = {};\n const getConnectedTables = (right: boolean, curr: string) => {\n const connectedTables = right\n ? tableEdges.filter(([src]) => src === curr).map(([, dst]) => dst)\n : tableEdges.filter(([, dst]) => dst === curr).map(([src]) => src);\n const currLevel = nodes.find(n => n.id === curr)?.data?.level || 0;\n createNewNodesEdges(\n nodes,\n edges,\n connectedTables.map(_createTable),\n curr,\n right,\n currLevel,\n 10000,\n false,\n details\n );\n return connectedTables;\n };\n while (queue.length > 0) {\n const curr = queue.pop()!;\n if (visited[curr]) continue;\n visited[curr] = true;\n queue.push(...getConnectedTables(true, curr), ...getConnectedTables(false, curr));\n }\n\n if (selectedColumn) {\n const columnRK = `${selectedColumn.table}/${selectedColumn.name}`;\n const { nodes: _nodes, edges: _edges } = await staticProcessColumnLineage(\n nodes,\n edges,\n columnRK,\n async () => ({\n collect_columns: collectColumns,\n highlight_edges: columnEdges,\n })\n );\n nodes = _nodes;\n edges = _edges;\n }\n\n layoutElementsOnCanvas(nodes, edges, false);\n flow.current?.setNodes(nodes);\n flow.current?.setEdges(edges);\n }, 500);\n }, [collectColumns, columnEdges, details, flow, lineageDispatch, selectedColumn, tableEdges]);\n\n useEffect(() => {\n const timerId = setTimeout(() => {\n flow.current?.fitView({ duration: 500 });\n }, 1000);\n return () => clearInterval(timerId);\n }, [flow]);\n\n return (\n <div style={{ width: \"100%\", height: \"100%\" }}>\n <div style={{ width: \"100%\", height: \"100%\" }}>\n <ReactFlowProvider>\n <ReactFlow\n defaultNodes={[]}\n defaultEdges={[]}\n onInit={_flow => (flow.current = _flow)}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n style={{ background: \"var(--bg-color)\" }}\n proOptions={{ hideAttribution: true }}\n minZoom={0.05}\n >\n <Background />\n <Controls />\n </ReactFlow>\n <LineageLegend />\n <SidebarModal\n isOpen={sidebarScreen !== \"\"}\n closeModal={() => lineageDispatch(setSidebarScreen(\"\"))}\n width=\"30vw\"\n >\n <SidebarErrorBoundary key={sidebarScreen}>\n {sidebarScreen === TABLES_SIDEBAR && <MoreTables />}\n {sidebarScreen === COLUMNS_SIDEBAR && (\n <TableDetails\n lineageType=\"static\"\n currentTableId={getCurrentTableId()}\n onNavigate={handleTableNavigation}\n />\n )}\n {sidebarScreen === EXPOSURE_SIDEBAR && <ExposureDetails />}\n {sidebarScreen === FUNCTION_SIDEBAR && <FunctionDetails />}\n </SidebarErrorBoundary>\n </SidebarModal>\n </ReactFlowProvider>\n </div>\n <LineageModal />\n </div>\n );\n};\n\nexport default StaticLineage;\n","import { MutableRefObject, useEffect } from \"react\";\nimport { StaticLineageDetails } from \"../types\";\nimport { ColumnNode, SeeMoreNode, SelfConnectingEdge, SqlTableNode, OpNode } from \"./CustomNodes\";\nimport ReactFlow, {\n Background,\n Controls,\n Edge,\n Node,\n ReactFlowInstance,\n ReactFlowProvider,\n} from \"reactflow\";\nimport { createNewNodesEdges, layoutElementsOnCanvas } from \"../graph\";\nimport { SidebarModal } from \"./sidebarModal/SidebarModal\";\nimport { useLineageContext, useLineageDispatch } from \"../context/LineageProvider\";\nimport { StaticTableDetails } from \"./TableDetails\";\nimport {\n setHighlightedNodes,\n setNodesCost,\n setNodesSavingsPerformance,\n setSelectedNode,\n setSelectedTable,\n setSqlLineageDetails,\n} from \"../context/LineageSlice\";\nimport {\n createOpNode,\n createTableEdge,\n createTableNode,\n findSourcesSinks,\n getCurrentTableId,\n handleTableNavigation,\n} from \"../utils\";\nimport { LineageModal } from \"./LineageModals\";\nimport { NODE_TYPE_SHORTHAND } from \"./Column\";\nimport { LineageState } from \"../context/types\";\n\nconst nodeTypes = {\n table: SqlTableNode,\n seeMore: SeeMoreNode,\n column: ColumnNode,\n operator: OpNode,\n};\nconst edgeTypes = {\n selfConnecting: SelfConnectingEdge,\n};\n\ntype SqlLineageProps = {\n tableEdges: [string, string][];\n details: StaticLineageDetails;\n flow: MutableRefObject<ReactFlowInstance<unknown, unknown> | undefined>;\n nodePositions?: Record<string, [number, number]>;\n};\n\nconst SqlLineage = ({ flow, tableEdges, details, nodePositions }: SqlLineageProps) => {\n const {\n state: { selectedTable },\n } = useLineageContext();\n const lineageDispatch = useLineageDispatch();\n\n useEffect(() => {\n lineageDispatch(setSqlLineageDetails({ details, tableEdges }));\n }, [details, lineageDispatch, tableEdges]);\n\n useEffect(() => {\n setTimeout(async () => {\n const _createTable = (table: string) => ({\n table,\n label: details[table].name || table,\n upstreamCount: 0,\n downstreamCount: 0,\n nodeType: details[table].type || \"cte\",\n isExternalProject: false,\n tests: [],\n });\n if (nodePositions) {\n const nodes: Node[] = Object.keys(nodePositions).map(n => {\n const opType = details[n].type;\n if (opType in NODE_TYPE_SHORTHAND) {\n return createTableNode(_createTable(n), 0, \"\");\n }\n return createOpNode(n, 0, \"\", details[n]);\n });\n const edges = tableEdges.map(([src, dst]) =>\n createTableEdge(nodePositions[src][1], nodePositions[dst][1], src, dst, true, true)\n );\n\n for (const n of nodes) {\n if (!nodePositions[n.id]) continue;\n const [x, y] = nodePositions[n.id];\n n.position = { x, y };\n }\n flow.current?.setNodes(nodes);\n flow.current?.setEdges(edges);\n return;\n }\n const { sinks } = findSourcesSinks(tableEdges);\n let nodes: Node[] = sinks.map(n => createTableNode(_createTable(n), 0, \"\"));\n let edges: Edge[] = [];\n const queue = [...sinks];\n const visited: Record<string, boolean> = {};\n const getConnectedTables = (right: boolean, curr: string) => {\n const connectedTables = right\n ? tableEdges.filter(([src]) => src === curr).map(([, dst]) => dst)\n : tableEdges.filter(([, dst]) => dst === curr).map(([src]) => src);\n const currLevel = nodes.find(n => n.id === curr)?.data?.level || 0;\n createNewNodesEdges(\n nodes,\n edges,\n connectedTables.map(_createTable),\n curr,\n right,\n currLevel,\n 10000,\n true,\n details\n );\n return connectedTables;\n };\n while (queue.length > 0) {\n const curr = queue.pop()!;\n if (visited[curr]) continue;\n visited[curr] = true;\n queue.push(...getConnectedTables(false, curr));\n }\n\n layoutElementsOnCanvas(nodes, edges, true);\n flow.current?.setNodes(nodes);\n flow.current?.setEdges(edges);\n }, 500);\n }, [details, flow, tableEdges, nodePositions]);\n\n useEffect(() => {\n const timerId = setTimeout(() => {\n flow.current?.fitView({ duration: 500 });\n }, 1000);\n return () => clearInterval(timerId);\n }, [flow]);\n\n useEffect(() => {\n const handleHighlightedNodes = (e: CustomEvent<string[]>) => {\n lineageDispatch(setHighlightedNodes(e.detail));\n };\n\n const handleSelectedNodes = (e: CustomEvent<string>) => {\n lineageDispatch(setSelectedNode(e.detail));\n };\n\n const handleFitView = () => {\n setTimeout(() => {\n flow.current?.fitView({ duration: 500 });\n }, 500);\n };\n\n const handleNodesSavingsPerformance = (\n e: CustomEvent<LineageState[\"nodeSavingsPerformance\"]>\n ) => {\n lineageDispatch(setNodesSavingsPerformance(e.detail));\n };\n\n const handleNodesCost = (e: CustomEvent<LineageState[\"nodesCost\"]>) => {\n lineageDispatch(setNodesCost(e.detail));\n };\n // @ts-ignore\n document.addEventListener(\"onHighlightedNodes\", handleHighlightedNodes);\n // @ts-ignore\n document.addEventListener(\"onSelectedNodes\", handleSelectedNodes);\n // @ts-ignore\n document.addEventListener(\"onNodesSavingsPerformance\", handleNodesSavingsPerformance);\n // @ts-ignore\n document.addEventListener(\"onNodesCost\", handleNodesCost);\n document.addEventListener(\"fitView\", handleFitView);\n\n return () => {\n // @ts-ignore\n document.removeEventListener(\"highlightedNodes\", handleHighlightedNodes);\n // @ts-ignore\n document.removeEventListener(\"onSelectedNodes\", handleSelectedNodes);\n // @ts-ignore\n document.removeEventListener(\"onNodesSavingsPerformance\", handleNodesSavingsPerformance);\n // @ts-ignore\n document.removeEventListener(\"onNodesCost\", handleNodesCost);\n document.removeEventListener(\"fitView\", handleFitView);\n };\n }, [flow, lineageDispatch]);\n\n return (\n <div style={{ width: \"100%\", height: \"100%\" }}>\n <div style={{ width: \"100%\", height: \"100%\" }}>\n <ReactFlowProvider>\n <ReactFlow\n defaultNodes={[]}\n defaultEdges={[]}\n onInit={_flow => (flow.current = _flow)}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n style={{ background: \"var(--bg-color)\" }}\n proOptions={{ hideAttribution: true }}\n minZoom={0.05}\n >\n <Background />\n <Controls />\n </ReactFlow>\n </ReactFlowProvider>\n </div>\n <LineageModal />\n <SidebarModal\n isOpen={Boolean(selectedTable)}\n closeModal={() => lineageDispatch(setSelectedTable(\"\"))}\n width=\"30vw\"\n >\n {Boolean(selectedTable) && (\n <StaticTableDetails\n currentTableId={getCurrentTableId()}\n onNavigate={handleTableNavigation}\n />\n )}\n </SidebarModal>\n </div>\n );\n};\n\nexport default SqlLineage;\n","import {\n createContext,\n forwardRef,\n ForwardRefRenderFunction,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useImperativeHandle,\n useMemo,\n useReducer,\n useRef,\n useState,\n} from \"react\";\nimport { LineageState, LineageType, SqlLineage } from \"./types\";\nimport { UnknownAction } from \"@reduxjs/toolkit\";\nimport lineageSlice, { setTheme } from \"./LineageSlice\";\nimport { Column, StaticLineage, Table } from \"../types\";\nimport { ReactFlowInstance } from \"reactflow\";\nimport DynamicLineageComponent from \"../components/DynamicLineage\";\nimport StaticLineageComponent from \"../components/StaticLineage\";\nimport SqlLineageComponent from \"../components/SqlLineage\";\n\nexport interface LineageProviderProps {\n dynamicLineage?: { node?: Table; aiEnabled: boolean };\n sqlLineage?: SqlLineage;\n staticLineage?: StaticLineage;\n theme: \"dark\" | \"light\";\n lineageType: LineageType;\n allowSyncColumnsWithDB?: boolean;\n externalSidePanel?: boolean;\n renderTags?: (entity: { column: Column; table_rk: string }) => ReactNode;\n client?: \"saas\" | \"extension\";\n}\n\ninterface ContextProps {\n state: LineageState;\n dispatch: React.Dispatch<UnknownAction>;\n rerender: () => void;\n}\n\nexport const LineageContext = createContext<ContextProps>({\n state: lineageSlice.getInitialState(),\n dispatch: () => null,\n rerender: () => null,\n});\n\nexport interface LineageRef {\n rerender: () => void;\n}\n\nconst LineageProvider: ForwardRefRenderFunction<LineageRef, LineageProviderProps> = (\n {\n theme = \"dark\",\n lineageType,\n sqlLineage,\n dynamicLineage,\n staticLineage,\n allowSyncColumnsWithDB,\n externalSidePanel = false,\n renderTags,\n client = \"extension\",\n },\n lineageRef\n) => {\n const [state, dispatch] = useReducer(lineageSlice.reducer, {\n ...lineageSlice.getInitialState(),\n theme,\n lineageType,\n sqlLineage,\n allowSyncColumnsWithDB,\n externalSidePanel,\n renderTags,\n client,\n });\n\n const flow = useRef<ReactFlowInstance<unknown, unknown>>();\n const [_rerenderVal, _rerender] = useState(0);\n const rerender = useCallback(() => _rerender(x => (x + 1) % 100), []);\n\n useEffect(() => {\n flow.current?.fitView({});\n }, [_rerenderVal]);\n\n useImperativeHandle(lineageRef, () => ({\n rerender,\n }));\n\n useEffect(() => {\n dispatch(setTheme(theme));\n }, [theme]);\n\n const values = useMemo(\n () => ({\n state,\n dispatch,\n rerender,\n }),\n [state, dispatch, rerender]\n );\n\n return (\n <LineageContext.Provider value={values}>\n <div className=\"lineage-component\">\n {lineageType === \"sql\" && sqlLineage && (\n <SqlLineageComponent\n flow={flow}\n details={sqlLineage.details}\n tableEdges={sqlLineage.tableEdges}\n nodePositions={sqlLineage.nodePositions}\n />\n )}\n {lineageType === \"dynamic\" && dynamicLineage && (\n <DynamicLineageComponent flow={flow} theme={theme} />\n )}\n {lineageType === \"static\" && staticLineage && (\n <StaticLineageComponent flow={flow} {...staticLineage} />\n )}\n <div id=\"lineage-sidebar\"></div>\n </div>\n </LineageContext.Provider>\n );\n};\n\nexport default forwardRef(LineageProvider);\n\nexport const useLineageContext = () => {\n return useContext(LineageContext);\n};\n\nexport const useLineageDispatch = () => {\n const { dispatch } = useContext(LineageContext);\n return dispatch;\n};\n"],"names":["initialState","undefined","lineageSlice","createSlice","state","action","newCollectColumns","collectColumns","t","_columns","updatedColumns","c","existing","x","newConfidence","setSelectedTable","setMoreTables","mergeSeeMoreTables","setSidebarScreen","setSelectedColumn","setCollectColumns","mergeCollectColumns","setConfidence","updateConfidenceWithOperatorList","setLeftExpansion","setRightExpansion","setMinRange","setNodeCount","setSelectCheck","setNonSelectCheck","setDefaultExpansion","setAiEnabled","setModalArgs","setTheme","setLineageType","setStaticLineage","setAllowSyncColumnsWithDB","setSqlLineageDetails","setHighlightedNodes","setSelectedNode","setNodesSavingsPerformance","setNodesCost","setErrors","setLightdashEnabled","setShowCodeModal","setRenderTags","setConfig","setClient","COLUMNS_SIDEBAR","EXPOSURE_SIDEBAR","SNOWFLAKE_STAGE_SIDEBAR","DASHBOARD_SIDEBAR","FUNCTION_SIDEBAR","FEEDBACK_SIDEBAR","SETTINGS_SIDEBAR","COLUMN_PREFIX","SEE_MORE_PREFIX","MAX_EXPAND_TABLE","F_OFFSET_X","F_OFFSET_Y","T_NODE_W","T_NODE_H","C_OFFSET_X","C_OFFSET_Y","C_NODE_H","C_PADDING_Y","T_LEVEL_SEPARATION","LEVEL_SEPARATION_VERTICAL","T_NODE_Y_SEPARATION","T_NODE_Y_SEPARATION_VERTICAL","DEFAULT_MIN_ZOOM","DEFAULT_COLOR","HIGHLIGHT_COLOR","VIEWS_TYPE_COLOR","defaultEdgeStyle","highlightEdgeStyle","indirectHighlightEdgeStyle","defaultMarker","highlightMarker","isColumn","isSeeMore","isNotColumn","createTableEdge","n1Level","n2Level","n1","n2","right","isVertical","from","src","dst","sourceHandle","targetHandle","getSourceTargetHandles","console","createTableNode","_table","level","parent","createOpNode","id","data","createColumnNode","viewsType","viewsCode","nodeType","datatype","getColumnId","createColumnEdge","source","target","srcLevel","dstLevel","type","edgeVisibility","edgeId","getColumnEdgeId","applyNodeStyling","n","highlight","applyEdgeStyling","e","l0","l1","getHelperDataForCLL","nodes","edges","levelMap","tableNodes","_n","seeMoreIdTableReverseMap","sourceTableExist","targetTableExist","_t","getSeeMoreId","contains","arr","item","safeConcat","obj","key","values","getColY","columnNum","tableNum","withinExclusive","a","b","v","deleteIfExists","index","calculateExpand","minVal","maxVal","defaultVal","toggleModelEdges","isVisible","toggleColumnEdges","findSourcesSinks","_inDegree","_outDegree","u","sources","Object","k","sinks","getCurrentTableId","window","currentUrl","urlParts","i","handleTableNavigation","url","table","idPart","encodedId","btoa","SvgTests","props","SvgEphemeral","SvgExternalProject","SvgBoolean","SvgText","SvgNumber","SvgObject","SvgDatetime","SvgGeospatial","SvgModel","SvgSeed","SvgSource","SvgExposure","SvgAnalysis","SvgSnapshot","SvgMetrics","SvgMacros","SvgChevronUp","SvgChevronDown","SvgXClose","SvgExpandLineage","SvgThumbsup","SvgThumbsdown","SvgThumbsupSelected","SvgThumbsdownSelected","SvgExpand","SvgArrowLeftDouble","SvgArrowRightDouble","SvgArrowLeft","SvgArrowRight","SvgDbtNodeMetricsDark","SvgDbtNodeCte","SvgDbtNodeSubqueryLight","SvgDbtNodeSubqueryDark","SvgDbtNodeModel","SvgDbtNodeSeed","SvgDbtNodeSource","SvgDbtNodeExposure","SvgDbtNodeSnapshot","SvgDbtNodeMetricsLight","SvgSqlFilter","SvgSqlGroupBy","SvgSqlInnerJoin","SvgSqlLeftJoin","SvgSqlLimit","SvgSqlOrderBy","SvgSqlOuterJoin","SvgSqlRightJoin","SvgSqlCrossJoin","SvgSqlLateralJoin","SvgSqlFullJoin","SvgSqlUnion","SvgSqlSelect","SvgAlertError","SvgFunction","SvgDbtNodeFunction","SvgBolt","SvgDbt","Icon","icon","className","rest","CodeIcon","RefreshIcon","SettingsIcon","ChevronUpIcon","ChevronDownIcon","InfoCircleIcon","ShareIcon","ViewsTypeBadge","Tooltip","styles","LineageLegend","showLegend","setShowLegend","useState","useEffect","setTimeout","clearTimeout","Popover","PopoverTrigger","Button","DownIcon","UpIcon","PopoverContent","Stack","useQuery","queryFn","enabled","error","setError","loading","setLoading","setData","fetchData","useCallback","response","refetch","useMutation","onSuccess","mutate","args","ApiHelper","_url","_data","_request","upstreamTables","downstreamTables","getExposureDetails","name","getFunctionDetails","getSnowflakeStageDetails","table_rk","getDbtInfo","getColumns","refresh","getConnectedColumns","body","sendFeedback","getLineageSettings","persistLineageSettings","initLineage","openFile","openChat","showInfoNotification","message","previewFeature","columnLineage","event","telemetryEvents","showExternalViewCodeModal","exportLineage","finalLineageDownload","CllEvents","CLL","CustomEvent","document","ColumnDatatype","color","size","compColor","useMemo","NumberIcon","BooleanIcon","TextIcon","GeospatialIcon","DatetimeIcon","ObjectIcon","NodeTypeIconsWithColors","DbtNodeSeedIcon","DbtNodeModelIcon","CteIcon","DbtNodeSubqueryLightIcon","DbtNodeSubqueryDarkIcon","DbtNodeSourceIcon","DbtNodeExposureIcon","AnalysisIcon","DbtNodeSnapshotIcon","MetricsLightIcon","MetricsDarkIcon","MacrosIcon","DbtNodeFunctionIcon","NodeTypeIcon","SeedIcon","ModelIcon","SourceIcon","ExposureIcon","SnapshotIcon","MetricsIcon","FunctionIcon","IconHeartRateMonitor","NodeIcon","NODE_TYPE_SHORTHAND","DIALECT_ICON","NodeTypeIconForSQL","theme","useLineageContext","TableNodePill","text","label","NODE_TYPE_STYLES","getConnectedTables","calculateNewLevel","createNewNodesEdges","tables","max_expand_table","details","newLevel","addUniqueEdge","to","toLevel","_edge","existingEdge","tableAdded","nodeId","existingNode","opType","layoutElementsOnCanvas","minLevel","Infinity","maxLevel","tableWiseColumnCount","Math","tableWiseLevelColumnCount","levelWiseTables","tableWiseLevelPos","visited","adjacencyListRight","adjacencyListLeft","processNode","curr","dfs","adjacencyList","m","getY","_index","_columnCount","getX","basisLevel","getYVertical","getXVertical","resetTableHighlights","highlightTableConnections","highlightNode","highlightEdge","bfsTraversal","queue","newEdges","_e","newNodes","Boolean","setHighlightedTableConnections","flow","_nodes","_edges","processColumnLineage","prevNodes","currAnd1HopTables","selectedColumn","column_lineage","confidence","errors","prev","newCurr","addToCollectColumns","_column","_existingColumn","addToEdges","id1","id2","seeMoreLineage","t0","t1","sourceId","targetId","edgeType","seeMoreId","viewsCodes","staticProcessColumnLineage","column_rk","postConnectedColumns","edgesPayload","collect_columns","highlight_edges","mergeNodesEdges","prevState","patchState","e1","start","columnEdgeType","removeColumnNodes","expandTableLineage","expandTableLineageLevelWise","lb","ub","withinExcBounds","rootLevel","bfs","_calculateMinLevel","countKey","nodesMap","nodeData","targetNode","targetLevel","calculateMinLevel","columns","getNodesEdges","setNodesEdges","isLineage","_getNode","ephemeralAncestors","currTargetColumns","currEphemeralNodes","currTargetTables","hop1Tables","_currEphemeralNodes","collectEphemeralAncestors","noDependents","srcTable","dstNode","dstTables","dstTableData","dstTable","materialization","Array","Set","ns","es","moveTableFromSeeMoreToCanvas","prevTable","lineage","node","fromLevel","seeMoreNodeId","seeMoreEdgeId","calculateNodeCount","selectedTable","leftExpansion","rightExpansion","selectedTableData","startingNodesNum","getTracedNode","isIncomer","isNode","tracedEdges","getAllTracedNodes","prevTraced","tracedNodes","edgeIds","memo","tracedNode","_edgeIds","foundNode","highlightColumnConnections","edge","incomingNodes","outgoingNodes","cn","inputs","twMerge","clsx","HANDLE_OFFSET","BidirectionalHandles","Handle","Position","TableNode","upstreamCount","downstreamCount","tests","isExternalProject","schema","stale","lastSeen","useReactFlow","selectCheck","nonSelectCheck","rerender","lineageDispatch","useLineageDispatch","_columnLen","_showColumns","selected","expand","currentEdges","operatorList","moreTables","fn","expandRight","expandLeft","onDetailsClick","sidebarMap","tableId","classNames","Typography","line","AlertErrorIcon","TestsIcon","EphemeralIcon","IconExclamationCircle","dayjs","ExternalProjectIcon","DashboardNode","dashboard_name","workbook_name","_dashboard_url","_description","_created_by","_last_modified","_collectColumns","_selectCheck","_nonSelectCheck","_rerender","SavingsPerformanceBadge","percentValue","SqlTableNode","sqlLineage","highlightedNodes","externalSidePanel","selectedNode","nodeSavingsPerformance","nodesCost","nType","ArrowRightDoubleIcon","SeeMoreNode","handleClick","TABLES_SIDEBAR","SelfConnectingEdge","sourceX","sourceY","targetX","targetY","markerEnd","radiusX","radiusY","edgePath","BaseEdge","ColumnNode","column","showCodeModal","isSelected","viewsColor","customStyles","currentNode","hasCode","query_hash","code","SQL_ICONS","SqlInnerJoinIcon","SqlOuterJoinIcon","SqlLeftJoinIcon","SqlFullJoinIcon","SqlRightJoinIcon","SqlCrossJoinIcon","SqlLateralJoinIcon","SqlFilterIcon","SqlGroupByIcon","SqlLimitIcon","SqlOrderByIcon","SqlUnionIcon","SqlSelectIcon","PostgresIcon","SnowflakeIcon","S3Icon","OpNode","expression","isDarkMode","SidebarModal","isOpen","closeModal","width","children","sidebarElem","widthString","createPortal","CloseIcon","CustomInput","Input","CustomMultilineInput","Textarea","TableHeader","canLineageExpand","ExpandLineageIcon","MoreTables","_tables","_lineageTables","onItemClick","allTablesAdded","selectAllTables","_node","isNodeOnOtherLevel","result","filteredTables","setFilteredTables","_search","Collapse","forwardRef","ref","Table","ComponentLoader","top","left","ColorTag","PurposeSection","purpose","ColumnCard","isSelectable","config","renderTags","dispatch","useContext","LineageContext","IconButton","CodeBlock","ColumnSection","filteredColumn","setFilteredColumn","handleColumnClick","allowSyncColumnsWithDB","lineageType","isEphemeral","isAnalysis","TestSection","filteredTests","setFilteredTests","_test","icons","BracketsIcon","HalfCircleIcon","CaseSensitiveIcon","SplitHorizontalIcon","getIconForType","tableMetaKeys","DataTable","UITable","value","String","renderValue","LightDashSection","openSections","setOpenSections","toggleCollapse","Card","CardContent","HeaderSection","tableData","currentTableId","onNavigate","client","shouldShowButton","handleNavigateClick","TableDetails","aiEnabled","lightdashEnabled","dbtInfo","setDbtInfo","tab","setTab","isLoading","setIsLoading","tableNodeData","Error","addNodesEdges","_bfsTraversal","Promise","tabs","BoltIcon","DbtIcon","StaticTableDetails","setColumns","sql","ColumnRow","title","Chip","ExposureDetails","tag","COLOR_MAP","COLOR_BG_MAP","AVAILABLE_COLORS","getHashColor","str","hash","char","LocalColorTag","backgroundColor","textColor","CustomRow","DashboardDetails","formatCost","cost","formatNumber","num","formatDate","dateString","Date","encodeURIComponent","insight","IconPremiumRights","IconUser","IconBook","IconLibraryFilled","IconSitemap","IconServer","IconEye","IconRefresh","IconUsers","IconCalendar","IconWorld","Feedback","close","feedbackState","setFeedbackState","feedbackInput","setFeedbackInput","isSubmitted","setIsSubmitted","ThumbsupSelectedIcon","ThumbsupIcon","ThumbsdownSelectedIcon","ThumbsdownIcon","Settings","applyDefault","defaultExpansion","Label","parseInt","PopoverContext","createContext","BetterPopover","trigger","render","openedPopover","setOpenedPopover","open","AutoExpansionPopover","minRange","nodeCount","maxRange","setMaxRange","popoverId","isPopoverOpen","updateLeftExpansion","updateRightExpansion","ExpandIcon","ArrowLeftDoubleIcon","ArrowLeftIcon","ArrowRightIcon","ExpandWithConfidenceCard","expandContainer","SettingsButton","settingsContainer","ResetButton","resetContainer","FormInput","params","setParams","Checkbox","ExportFinalLineageModal","modalArgs","isExporting","handleExport","ViewsCodeModal","viewsCodeArgs","viewsCodesFlat","OpNodeModal","opNodeArgs","LineageModal","Dialog","DialogPortal","DialogOverlay","DialogContent","ExportButton","exportContainer","setName","handleExportLineage","tableEdges","columnEdges","lineage_data","SnowflakeStageDetails","fetchDetails","FunctionDetails","err","arg","s","SidebarErrorBoundary","Component","nodeTypes","edgeTypes","DynamicLineage","sidebarScreen","defaultExpansionRef","useRef","onCllCancelled","renderStartNode","_flow","handleRenderStartNode","applySettings","settings","handleEdgeVisibilityChanges","_type","afterFlowRender","flowInstance","ReactFlowProvider","ReactFlow","Background","Controls","StaticLineage","_createTable","connectedTables","currLevel","columnRK","timerId","clearInterval","SqlLineage","nodePositions","y","handleHighlightedNodes","handleSelectedNodes","handleFitView","handleNodesSavingsPerformance","handleNodesCost","LineageProvider","dynamicLineage","staticLineage","lineageRef","useReducer","_rerenderVal","useImperativeHandle","SqlLineageComponent","DynamicLineageComponent","StaticLineageComponent"],"mappings":"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"}
|