@altimateai/ui-components 0.0.79 → 0.0.80
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/0~315.js +46635 -0
- package/dist/0~315.js.LICENSE.txt +73 -0
- package/dist/0~315.js.map +1 -0
- package/dist/131.js +14352 -0
- package/dist/131.js.map +1 -0
- package/dist/3~315.js +46635 -0
- package/dist/3~315.js.LICENSE.txt +73 -0
- package/dist/3~315.js.map +1 -0
- package/dist/582.js +1299 -0
- package/dist/582.js.map +1 -0
- package/dist/assets/icons/index.d.ts +45 -110
- package/dist/assets/icons/index.d.ts.map +1 -0
- package/dist/chatbotV2.js +5233 -0
- package/dist/chatbotV2.js.map +1 -0
- package/dist/components/api/index.d.ts +7 -0
- package/dist/components/api/index.d.ts.map +1 -0
- package/dist/components/api/useMutation.d.ts +12 -0
- package/dist/components/api/useMutation.d.ts.map +1 -0
- package/dist/components/api/useQuery.d.ts +12 -0
- package/dist/components/api/useQuery.d.ts.map +1 -0
- package/dist/components/chatbotV2/ChatProvider.d.ts +17 -0
- package/dist/components/chatbotV2/ChatProvider.d.ts.map +1 -0
- package/dist/components/chatbotV2/Chatbot.d.ts +4 -0
- package/dist/components/chatbotV2/Chatbot.d.ts.map +1 -0
- package/dist/components/chatbotV2/HelloMessageSample.d.ts +3 -0
- package/dist/components/chatbotV2/HelloMessageSample.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/action-buttons/DownloadMessage.d.ts +9 -0
- package/dist/components/chatbotV2/components/action-buttons/DownloadMessage.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/action-buttons/ShareMessage.d.ts +9 -0
- package/dist/components/chatbotV2/components/action-buttons/ShareMessage.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/artifacts/Artifacts.d.ts +8 -0
- package/dist/components/chatbotV2/components/artifacts/Artifacts.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/artifacts/index.d.ts +2 -0
- package/dist/components/chatbotV2/components/artifacts/index.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/attachmentList/AttachmentList.d.ts +8 -0
- package/dist/components/chatbotV2/components/attachmentList/AttachmentList.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/attachmentList/index.d.ts +2 -0
- package/dist/components/chatbotV2/components/attachmentList/index.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/cancelGenerationButton/CancelGenerationButton.d.ts +3 -0
- package/dist/components/chatbotV2/components/cancelGenerationButton/CancelGenerationButton.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/cancelGenerationButton/index.d.ts +2 -0
- package/dist/components/chatbotV2/components/cancelGenerationButton/index.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/chatMessageActions/ChatFeedbackActions.d.ts +8 -0
- package/dist/components/chatbotV2/components/chatMessageActions/ChatFeedbackActions.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/chatMessageActions/ChatLastMessageActions.d.ts +8 -0
- package/dist/components/chatbotV2/components/chatMessageActions/ChatLastMessageActions.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/chatMessageActions/ChatMessageActions.d.ts +10 -0
- package/dist/components/chatbotV2/components/chatMessageActions/ChatMessageActions.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/chatMessageActions/ChatMessageEndActions.d.ts +9 -0
- package/dist/components/chatbotV2/components/chatMessageActions/ChatMessageEndActions.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/chatMessageActions/index.d.ts +4 -0
- package/dist/components/chatbotV2/components/chatMessageActions/index.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/chatTriggerLink/ChatTriggerLink.d.ts +7 -0
- package/dist/components/chatbotV2/components/chatTriggerLink/ChatTriggerLink.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/citations/Citations.d.ts +28 -0
- package/dist/components/chatbotV2/components/citations/Citations.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/coachAI/CoachAI.d.ts +2 -0
- package/dist/components/chatbotV2/components/coachAI/CoachAI.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/coachAI/index.d.ts +2 -0
- package/dist/components/chatbotV2/components/coachAI/index.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/contextPanel/ContextPanel.d.ts +13 -0
- package/dist/components/chatbotV2/components/contextPanel/ContextPanel.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/contextPanel/index.d.ts +2 -0
- package/dist/components/chatbotV2/components/contextPanel/index.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/emailDialog/EmailDialog.d.ts +10 -0
- package/dist/components/chatbotV2/components/emailDialog/EmailDialog.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/entityItem/EntityItem.d.ts +7 -0
- package/dist/components/chatbotV2/components/entityItem/EntityItem.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/entityItem/index.d.ts +2 -0
- package/dist/components/chatbotV2/components/entityItem/index.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/followup/Followup.d.ts +3 -0
- package/dist/components/chatbotV2/components/followup/Followup.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/index.d.ts +18 -0
- package/dist/components/chatbotV2/components/index.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/interactionPrompt/InteractionPrompt.d.ts +8 -0
- package/dist/components/chatbotV2/components/interactionPrompt/InteractionPrompt.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/interactionPrompt/index.d.ts +2 -0
- package/dist/components/chatbotV2/components/interactionPrompt/index.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/loadingIndicator/LoadingIndicator.d.ts +3 -0
- package/dist/components/chatbotV2/components/loadingIndicator/LoadingIndicator.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/loadingIndicator/index.d.ts +2 -0
- package/dist/components/chatbotV2/components/loadingIndicator/index.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/messageItem/MessageItem.d.ts +12 -0
- package/dist/components/chatbotV2/components/messageItem/MessageItem.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/messageItem/index.d.ts +2 -0
- package/dist/components/chatbotV2/components/messageItem/index.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/messageList/MessageList.d.ts +11 -0
- package/dist/components/chatbotV2/components/messageList/MessageList.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/messageList/index.d.ts +2 -0
- package/dist/components/chatbotV2/components/messageList/index.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/questionForm/QuestionForm.d.ts +15 -0
- package/dist/components/chatbotV2/components/questionForm/QuestionForm.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/questionForm/index.d.ts +2 -0
- package/dist/components/chatbotV2/components/questionForm/index.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/refetchSession/RefetchSession.d.ts +8 -0
- package/dist/components/chatbotV2/components/refetchSession/RefetchSession.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/regenerateButton/RegenerateButton.d.ts +7 -0
- package/dist/components/chatbotV2/components/regenerateButton/RegenerateButton.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/regenerateButton/index.d.ts +2 -0
- package/dist/components/chatbotV2/components/regenerateButton/index.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/selectedContexts/SelectedContexts.d.ts +8 -0
- package/dist/components/chatbotV2/components/selectedContexts/SelectedContexts.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/statusUpdates/StatusUpdates.d.ts +10 -0
- package/dist/components/chatbotV2/components/statusUpdates/StatusUpdates.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/statusUpdates/index.d.ts +2 -0
- package/dist/components/chatbotV2/components/statusUpdates/index.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/todoProgress/TodoProgress.d.ts +8 -0
- package/dist/components/chatbotV2/components/todoProgress/TodoProgress.d.ts.map +1 -0
- package/dist/components/chatbotV2/components/todoProgress/index.d.ts +2 -0
- package/dist/components/chatbotV2/components/todoProgress/index.d.ts.map +1 -0
- package/dist/components/chatbotV2/hooks/transports.d.ts +126 -0
- package/dist/components/chatbotV2/hooks/transports.d.ts.map +1 -0
- package/dist/components/chatbotV2/hooks/useAgentChat.d.ts +41 -0
- package/dist/components/chatbotV2/hooks/useAgentChat.d.ts.map +1 -0
- package/dist/components/chatbotV2/hooks/useEntityDetection.d.ts +4 -0
- package/dist/components/chatbotV2/hooks/useEntityDetection.d.ts.map +1 -0
- package/dist/components/chatbotV2/hooks/useFeedback.d.ts +5 -0
- package/dist/components/chatbotV2/hooks/useFeedback.d.ts.map +1 -0
- package/dist/components/chatbotV2/index.d.ts +22 -0
- package/dist/components/chatbotV2/index.d.ts.map +1 -0
- package/dist/components/chatbotV2/store/chatSlice.d.ts +65 -0
- package/dist/components/chatbotV2/store/chatSlice.d.ts.map +1 -0
- package/dist/components/chatbotV2/store/index.d.ts +10 -0
- package/dist/components/chatbotV2/store/index.d.ts.map +1 -0
- package/dist/{types-ByRPUpXR.d.ts → components/chatbotV2/types.d.ts} +77 -195
- package/dist/components/chatbotV2/types.d.ts.map +1 -0
- package/dist/components/chatbotV2/utils/entityDetection.d.ts +12 -0
- package/dist/components/chatbotV2/utils/entityDetection.d.ts.map +1 -0
- package/dist/components/chatbotV2/utils/streamProcessor.d.ts +98 -0
- package/dist/components/chatbotV2/utils/streamProcessor.d.ts.map +1 -0
- package/dist/components/chatbotV2/utils.d.ts +3 -0
- package/dist/components/chatbotV2/utils.d.ts.map +1 -0
- package/dist/components/dbtDocs/api/index.d.ts +16 -0
- package/dist/components/dbtDocs/api/index.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/ConversationHighlighter.d.ts +6 -0
- package/dist/components/dbtDocs/collaboration/ConversationHighlighter.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/ConversationInputForm.d.ts +13 -0
- package/dist/components/dbtDocs/collaboration/ConversationInputForm.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/ConversationsHighlighter.d.ts +3 -0
- package/dist/components/dbtDocs/collaboration/ConversationsHighlighter.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/DbtDocsCollaborationComponents.d.ts +3 -0
- package/dist/components/dbtDocs/collaboration/DbtDocsCollaborationComponents.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/DbtDocsCollaborationProvider.d.ts +22 -0
- package/dist/components/dbtDocs/collaboration/DbtDocsCollaborationProvider.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/DbtDocsConversationsRightPanel.d.ts +3 -0
- package/dist/components/dbtDocs/collaboration/DbtDocsConversationsRightPanel.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/DbtDocsReducer.d.ts +1931 -0
- package/dist/components/dbtDocs/collaboration/DbtDocsReducer.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/HighlightAnchor.d.ts +12 -0
- package/dist/components/dbtDocs/collaboration/HighlightAnchor.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/HighlightBlocker.d.ts +7 -0
- package/dist/components/dbtDocs/collaboration/HighlightBlocker.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/HotspotButton.d.ts +7 -0
- package/dist/components/dbtDocs/collaboration/HotspotButton.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/NewConversationForm.d.ts +3 -0
- package/dist/components/dbtDocs/collaboration/NewConversationForm.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/ShowConversationsButton.d.ts +3 -0
- package/dist/components/dbtDocs/collaboration/ShowConversationsButton.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/constants.d.ts +20 -0
- package/dist/components/dbtDocs/collaboration/constants.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/conversations/Conversation.d.ts +9 -0
- package/dist/components/dbtDocs/collaboration/conversations/Conversation.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/conversations/ConversationGroup.d.ts +10 -0
- package/dist/components/dbtDocs/collaboration/conversations/ConversationGroup.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/conversations/ConversationGroups.d.ts +3 -0
- package/dist/components/dbtDocs/collaboration/conversations/ConversationGroups.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/conversations/ConversationHeader.d.ts +13 -0
- package/dist/components/dbtDocs/collaboration/conversations/ConversationHeader.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/conversations/ConversationHighlightText.d.ts +6 -0
- package/dist/components/dbtDocs/collaboration/conversations/ConversationHighlightText.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/conversations/ConversationReplyForm.d.ts +9 -0
- package/dist/components/dbtDocs/collaboration/conversations/ConversationReplyForm.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/conversations/ResolveButton.d.ts +8 -0
- package/dist/components/dbtDocs/collaboration/conversations/ResolveButton.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/conversations/context/ConversationsProvider.d.ts +18 -0
- package/dist/components/dbtDocs/collaboration/conversations/context/ConversationsProvider.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/conversations/context/types.d.ts +44 -0
- package/dist/components/dbtDocs/collaboration/conversations/context/types.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/conversations/useConversations.d.ts +5 -0
- package/dist/components/dbtDocs/collaboration/conversations/useConversations.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/highlightUtils.d.ts +28 -0
- package/dist/components/dbtDocs/collaboration/highlightUtils.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/mentions/MentionsInput.d.ts +11 -0
- package/dist/components/dbtDocs/collaboration/mentions/MentionsInput.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/mentions/index.d.ts +32 -0
- package/dist/components/dbtDocs/collaboration/mentions/index.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/newConversationUtils.d.ts +15 -0
- package/dist/components/dbtDocs/collaboration/newConversationUtils.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/selectionEndEvent.d.ts +17 -0
- package/dist/components/dbtDocs/collaboration/selectionEndEvent.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/types.d.ts +15 -0
- package/dist/components/dbtDocs/collaboration/types.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/useConversationUsers.d.ts +5 -0
- package/dist/components/dbtDocs/collaboration/useConversationUsers.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/useDbtDocsCollaboration.d.ts +7 -0
- package/dist/components/dbtDocs/collaboration/useDbtDocsCollaboration.d.ts.map +1 -0
- package/dist/components/dbtDocs/collaboration/useHighlight.d.ts +12 -0
- package/dist/components/dbtDocs/collaboration/useHighlight.d.ts.map +1 -0
- package/dist/components/dbtDocs/details/AddCommentButton.d.ts +3 -0
- package/dist/components/dbtDocs/details/AddCommentButton.d.ts.map +1 -0
- package/dist/components/dbtDocs/details/AddCommentOnCodeButton.d.ts +3 -0
- package/dist/components/dbtDocs/details/AddCommentOnCodeButton.d.ts.map +1 -0
- package/dist/components/dbtDocs/details/AddCommentOnModelDescriptionButton.d.ts +3 -0
- package/dist/components/dbtDocs/details/AddCommentOnModelDescriptionButton.d.ts.map +1 -0
- package/dist/components/dbtDocs/details/DbtDocs.d.ts +10 -0
- package/dist/components/dbtDocs/details/DbtDocs.d.ts.map +1 -0
- package/dist/components/dbtDocs/details/DbtDocsDetails.d.ts +3 -0
- package/dist/components/dbtDocs/details/DbtDocsDetails.d.ts.map +1 -0
- package/dist/components/dbtDocs/details/DbtDocsRenderer.d.ts +8 -0
- package/dist/components/dbtDocs/details/DbtDocsRenderer.d.ts.map +1 -0
- package/dist/components/dbtDocs/details/dbtDocsUtils.d.ts +5 -0
- package/dist/components/dbtDocs/details/dbtDocsUtils.d.ts.map +1 -0
- package/dist/components/dbtDocs/index.d.ts +8 -0
- package/dist/components/dbtDocs/index.d.ts.map +1 -0
- package/dist/components/dbtDocs/resources/dbtDocsAngularApp.d.ts +3 -0
- package/dist/components/dbtDocs/resources/dbtDocsAngularApp.d.ts.map +1 -0
- package/dist/components/lineage/api/index.d.ts +65 -0
- package/dist/components/lineage/api/index.d.ts.map +1 -0
- package/dist/components/lineage/assets/icons/index.d.ts +61 -0
- package/dist/components/lineage/assets/icons/index.d.ts.map +1 -0
- package/dist/components/lineage/cllUtils.d.ts +17 -0
- package/dist/components/lineage/cllUtils.d.ts.map +1 -0
- package/dist/components/lineage/components/AutoExpansionPopover.d.ts +3 -0
- package/dist/components/lineage/components/AutoExpansionPopover.d.ts.map +1 -0
- package/dist/components/lineage/components/BetterPopover.d.ts +14 -0
- package/dist/components/lineage/components/BetterPopover.d.ts.map +1 -0
- package/dist/components/lineage/components/Chip.d.ts +6 -0
- package/dist/components/lineage/components/Chip.d.ts.map +1 -0
- package/dist/components/lineage/components/Column.d.ts +52 -0
- package/dist/components/lineage/components/Column.d.ts.map +1 -0
- package/dist/components/lineage/components/ColumnRow.d.ts +8 -0
- package/dist/components/lineage/components/ColumnRow.d.ts.map +1 -0
- package/dist/components/lineage/components/CustomNodes.d.ts +16 -0
- package/dist/components/lineage/components/CustomNodes.d.ts.map +1 -0
- package/dist/components/lineage/components/DashboardDetails.d.ts +12 -0
- package/dist/components/lineage/components/DashboardDetails.d.ts.map +1 -0
- package/dist/components/lineage/components/DynamicLineage.d.ts +9 -0
- package/dist/components/lineage/components/DynamicLineage.d.ts.map +1 -0
- package/dist/components/lineage/components/ExpandWithConfidenceCard.d.ts +3 -0
- package/dist/components/lineage/components/ExpandWithConfidenceCard.d.ts.map +1 -0
- package/dist/components/lineage/components/ExportButton.d.ts +6 -0
- package/dist/components/lineage/components/ExportButton.d.ts.map +1 -0
- package/dist/components/lineage/components/ExportFinalLineageModal.d.ts +5 -0
- package/dist/components/lineage/components/ExportFinalLineageModal.d.ts.map +1 -0
- package/dist/components/lineage/components/ExposureDetails.d.ts +6 -0
- package/dist/components/lineage/components/ExposureDetails.d.ts.map +1 -0
- package/dist/components/lineage/components/Feedback.d.ts +5 -0
- package/dist/components/lineage/components/Feedback.d.ts.map +1 -0
- package/dist/components/lineage/components/Form.d.ts +5 -0
- package/dist/components/lineage/components/Form.d.ts.map +1 -0
- package/dist/components/lineage/components/FunctionDetails.d.ts +3 -0
- package/dist/components/lineage/components/FunctionDetails.d.ts.map +1 -0
- package/dist/components/lineage/components/LineageLegend.d.ts +3 -0
- package/dist/components/lineage/components/LineageLegend.d.ts.map +1 -0
- package/dist/components/lineage/components/LineageModals.d.ts +3 -0
- package/dist/components/lineage/components/LineageModals.d.ts.map +1 -0
- package/dist/components/lineage/components/Loader/index.d.ts +7 -0
- package/dist/components/lineage/components/Loader/index.d.ts.map +1 -0
- package/dist/components/lineage/components/MoreTables.d.ts +11 -0
- package/dist/components/lineage/components/MoreTables.d.ts.map +1 -0
- package/dist/components/lineage/components/Purpose.d.ts +6 -0
- package/dist/components/lineage/components/Purpose.d.ts.map +1 -0
- package/dist/components/lineage/components/ResetButton.d.ts +6 -0
- package/dist/components/lineage/components/ResetButton.d.ts.map +1 -0
- package/dist/components/lineage/components/Settings.d.ts +6 -0
- package/dist/components/lineage/components/Settings.d.ts.map +1 -0
- package/dist/components/lineage/components/SettingsButton.d.ts +3 -0
- package/dist/components/lineage/components/SettingsButton.d.ts.map +1 -0
- package/dist/components/lineage/components/SidebarErrorBoundary.d.ts +13 -0
- package/dist/components/lineage/components/SidebarErrorBoundary.d.ts.map +1 -0
- package/dist/components/lineage/components/SnowflakeStageDetails.d.ts +3 -0
- package/dist/components/lineage/components/SnowflakeStageDetails.d.ts.map +1 -0
- package/dist/components/lineage/components/SqlLineage.d.ts +12 -0
- package/dist/components/lineage/components/SqlLineage.d.ts.map +1 -0
- package/dist/components/lineage/components/StaticLineage.d.ts +17 -0
- package/dist/components/lineage/components/StaticLineage.d.ts.map +1 -0
- package/dist/components/lineage/components/TableDetails.d.ts +53 -0
- package/dist/components/lineage/components/TableDetails.d.ts.map +1 -0
- package/dist/components/lineage/components/Tags/index.d.ts +5 -0
- package/dist/components/lineage/components/Tags/index.d.ts.map +1 -0
- package/dist/components/lineage/components/ViewsTypeBadge.d.ts +5 -0
- package/dist/components/lineage/components/ViewsTypeBadge.d.ts.map +1 -0
- package/dist/components/lineage/components/sidebarModal/SidebarModal.d.ts +9 -0
- package/dist/components/lineage/components/sidebarModal/SidebarModal.d.ts.map +1 -0
- package/dist/components/lineage/constants.d.ts +12 -0
- package/dist/components/lineage/constants.d.ts.map +1 -0
- package/dist/components/lineage/context/LineageProvider.d.ts +35 -0
- package/dist/components/lineage/context/LineageProvider.d.ts.map +1 -0
- package/dist/components/lineage/context/LineageSlice.d.ts +4673 -0
- package/dist/components/lineage/context/LineageSlice.d.ts.map +1 -0
- package/dist/components/lineage/context/types.d.ts +57 -0
- package/dist/components/lineage/context/types.d.ts.map +1 -0
- package/dist/components/lineage/graph.d.ts +43 -0
- package/dist/components/lineage/graph.d.ts.map +1 -0
- package/dist/components/lineage/index.d.ts +8 -0
- package/dist/components/lineage/index.d.ts.map +1 -0
- package/dist/{lineage/index.d.ts → components/lineage/types.d.ts} +59 -92
- package/dist/components/lineage/types.d.ts.map +1 -0
- package/dist/components/lineage/utils.d.ts +100 -0
- package/dist/components/lineage/utils.d.ts.map +1 -0
- package/dist/components/shared/index.d.ts +2 -0
- package/dist/components/shared/index.d.ts.map +1 -0
- package/dist/components/shared/types.d.ts +18 -0
- package/dist/components/shared/types.d.ts.map +1 -0
- package/dist/components/teammate/AddLearningForm.d.ts +13 -0
- package/dist/components/teammate/AddLearningForm.d.ts.map +1 -0
- package/dist/components/teammate/CoachForm.d.ts +10 -0
- package/dist/components/teammate/CoachForm.d.ts.map +1 -0
- package/dist/components/teammate/CoachFormButton.d.ts +3 -0
- package/dist/components/teammate/CoachFormButton.d.ts.map +1 -0
- package/dist/components/teammate/CoachFormInput.d.ts +8 -0
- package/dist/components/teammate/CoachFormInput.d.ts.map +1 -0
- package/dist/components/teammate/LearningRow.d.ts +10 -0
- package/dist/components/teammate/LearningRow.d.ts.map +1 -0
- package/dist/components/teammate/LearningsList.d.ts +11 -0
- package/dist/components/teammate/LearningsList.d.ts.map +1 -0
- package/dist/components/teammate/TeamMateProvider.d.ts +8 -0
- package/dist/components/teammate/TeamMateProvider.d.ts.map +1 -0
- package/dist/components/teammate/TeamMates.d.ts +10 -0
- package/dist/components/teammate/TeamMates.d.ts.map +1 -0
- package/dist/components/teammate/TeamMatesCard.d.ts +10 -0
- package/dist/components/teammate/TeamMatesCard.d.ts.map +1 -0
- package/dist/components/teammate/alertManager/AlertManagerDisplay.d.ts +4 -0
- package/dist/components/teammate/alertManager/AlertManagerDisplay.d.ts.map +1 -0
- package/dist/components/teammate/assets/index.d.ts +8 -0
- package/dist/components/teammate/assets/index.d.ts.map +1 -0
- package/dist/components/teammate/index.d.ts +11 -0
- package/dist/components/teammate/index.d.ts.map +1 -0
- package/dist/components/teammate/projectGovernor/ChecksInput.d.ts +7 -0
- package/dist/components/teammate/projectGovernor/ChecksInput.d.ts.map +1 -0
- package/dist/components/teammate/projectGovernor/ProjectGovernanceCheck.d.ts +8 -0
- package/dist/components/teammate/projectGovernor/ProjectGovernanceCheck.d.ts.map +1 -0
- package/dist/components/teammate/projectGovernor/ProjectGovernorDisplay.d.ts +3 -0
- package/dist/components/teammate/projectGovernor/ProjectGovernorDisplay.d.ts.map +1 -0
- package/dist/components/teammate/projectGovernor/ProjectGovernorForm.d.ts +7 -0
- package/dist/components/teammate/projectGovernor/ProjectGovernorForm.d.ts.map +1 -0
- package/dist/components/teammate/projectGovernor/types.d.ts +48 -0
- package/dist/components/teammate/projectGovernor/types.d.ts.map +1 -0
- package/dist/components/teammate/teamMateSlice.d.ts +15 -0
- package/dist/components/teammate/teamMateSlice.d.ts.map +1 -0
- package/dist/components/teammate/teamMatesConfig.d.ts +3 -0
- package/dist/components/teammate/teamMatesConfig.d.ts.map +1 -0
- package/dist/components/teammate/teradata/HelloMessage.d.ts +3 -0
- package/dist/components/teammate/teradata/HelloMessage.d.ts.map +1 -0
- package/dist/components/teammate/teradata/MigratorDisplay.d.ts +4 -0
- package/dist/components/teammate/teradata/MigratorDisplay.d.ts.map +1 -0
- package/dist/components/teammate/types.d.ts +113 -0
- package/dist/components/teammate/types.d.ts.map +1 -0
- package/dist/components/teammate/useTeamMateContext.d.ts +3 -0
- package/dist/components/teammate/useTeamMateContext.d.ts.map +1 -0
- package/dist/components/user/ProfileImageByUser.d.ts +7 -0
- package/dist/components/user/ProfileImageByUser.d.ts.map +1 -0
- package/dist/components/user/index.d.ts +3 -0
- package/dist/components/user/index.d.ts.map +1 -0
- package/dist/components/user/types.d.ts +7 -0
- package/dist/components/user/types.d.ts.map +1 -0
- package/dist/dbtDocs.css +297 -0
- package/dist/dbtDocs.css.map +1 -0
- package/dist/dbtDocs.js +1 -0
- package/dist/index.d.ts +14 -285
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -40
- package/dist/lineage.css +1221 -0
- package/dist/lineage.css.map +1 -0
- package/dist/lineage.js +7267 -0
- package/dist/lineage.js.map +1 -0
- package/dist/rslib-runtime.js +20 -0
- package/dist/rslib-runtime.js.map +1 -0
- package/dist/shared/AutosizeTextarea.d.ts +19 -0
- package/dist/shared/AutosizeTextarea.d.ts.map +1 -0
- package/dist/shared/Collapse.d.ts +7 -0
- package/dist/shared/Collapse.d.ts.map +1 -0
- package/dist/shared/Table.d.ts +4 -0
- package/dist/shared/Table.d.ts.map +1 -0
- package/dist/shared/index.d.ts +3 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/utils.d.ts +3 -0
- package/dist/shared/utils.d.ts.map +1 -0
- package/dist/static/image/postgres.png +0 -0
- package/dist/static/image/s3.png +0 -0
- package/dist/static/image/snowflake.png +0 -0
- package/dist/static/svg/botIcon.svg +15 -0
- package/dist/static/svg/brackets.svg +5 -0
- package/dist/static/svg/case-sensitive.svg +5 -0
- package/dist/static/svg/docgen.svg +23 -0
- package/dist/static/svg/half-circle.svg +5 -0
- package/dist/static/svg/opportunities.svg +25 -0
- package/dist/static/svg/split-horizontal.svg +5 -0
- package/dist/static/svg/sqlExpert.svg +24 -0
- package/dist/static/svg/summary.svg +25 -0
- package/dist/styles.css +1638 -0
- package/dist/styles.css.map +1 -0
- package/dist/teammate.css +124 -0
- package/dist/teammate.css.map +1 -0
- package/dist/teammate.js +5655 -0
- package/dist/teammate.js.map +1 -0
- package/dist/user.css +14 -0
- package/dist/user.css.map +1 -0
- package/dist/user.js +13 -0
- package/dist/user.js.map +1 -0
- package/package.json +116 -34
- package/dist/Button-42Dj_nRE.d.ts +0 -28
- package/dist/CoachForm.css +0 -1
- package/dist/CoachForm.js +0 -44445
- package/dist/DbtDocsRenderer.js +0 -45647
- package/dist/IconEye.js +0 -11
- package/dist/Stack.js +0 -7170
- package/dist/Switch.js +0 -128
- package/dist/ToggleGroup.js +0 -8543
- package/dist/_basePickBy.js +0 -151
- package/dist/_baseUniq.js +0 -615
- package/dist/arc.js +0 -83
- package/dist/architecture-U656AL7Q.js +0 -5
- package/dist/architectureDiagram-VXUJARFQ.js +0 -4666
- package/dist/assets/icons/index.js +0 -56
- package/dist/blockDiagram-VD42YOAC.js +0 -2266
- package/dist/c4Diagram-YG6GDRKO.js +0 -1582
- package/dist/channel.js +0 -5
- package/dist/chatbotV2/index.d.ts +0 -359
- package/dist/chatbotV2/index.js +0 -58
- package/dist/chunk-4BX2VUAB.js +0 -9
- package/dist/chunk-55IACEB6.js +0 -9
- package/dist/chunk-B4BG7PRW.js +0 -1377
- package/dist/chunk-DI55MBZ5.js +0 -1382
- package/dist/chunk-FMBD7UC4.js +0 -19
- package/dist/chunk-QN33PNHL.js +0 -20
- package/dist/chunk-QZHKN3VN.js +0 -15
- package/dist/chunk-TZMSLE5B.js +0 -64
- package/dist/classDiagram-2ON5EDUG.js +0 -17
- package/dist/classDiagram-v2-WZHVMYZB.js +0 -17
- package/dist/clone.js +0 -8
- package/dist/cose-bilkent-S5V4N54A.js +0 -2606
- package/dist/cytoscape.esm.js +0 -18731
- package/dist/dagre-6UL2VRFP.js +0 -447
- package/dist/dayjs.min.js +0 -302
- package/dist/defaultLocale.js +0 -171
- package/dist/diagram-PSM6KHXK.js +0 -535
- package/dist/diagram-QEK2KX5R.js +0 -221
- package/dist/diagram-S2PKOQOG.js +0 -143
- package/dist/erDiagram-Q2GNP2WA.js +0 -843
- package/dist/flowDiagram-NV44I4VS.js +0 -1628
- package/dist/ganttDiagram-LVOFAZNH.js +0 -2500
- package/dist/gitGraph-F6HP7TQM.js +0 -5
- package/dist/gitGraphDiagram-NY62KEGX.js +0 -713
- package/dist/graph.js +0 -247
- package/dist/index.css +0 -1
- package/dist/index2.js +0 -689
- package/dist/info-NVLQJR56.js +0 -5
- package/dist/infoDiagram-F6ZHWCRC.js +0 -24
- package/dist/init.js +0 -16
- package/dist/journeyDiagram-XKPGCS4Q.js +0 -837
- package/dist/kanban-definition-3W4ZIXB7.js +0 -720
- package/dist/katex.js +0 -11691
- package/dist/layout.js +0 -1324
- package/dist/lineage/index.js +0 -7328
- package/dist/linear.js +0 -259
- package/dist/main.css +0 -1
- package/dist/main.js +0 -4566
- package/dist/mermaid-parser.core.js +0 -12921
- package/dist/mindmap-definition-VGOIOE7T.js +0 -786
- package/dist/ordinal.js +0 -61
- package/dist/packet-BFZMPI3H.js +0 -5
- package/dist/pie-7BOR55EZ.js +0 -5
- package/dist/pieDiagram-ADFJNKIX.js +0 -163
- package/dist/quadrantDiagram-AYHSOK5B.js +0 -1025
- package/dist/radar-NHE76QYJ.js +0 -5
- package/dist/redux-toolkit.css +0 -1
- package/dist/redux-toolkit.modern.js +0 -12525
- package/dist/requirementDiagram-UZGBJVZJ.js +0 -852
- package/dist/sankeyDiagram-TZEHDZUN.js +0 -811
- package/dist/sequenceDiagram-WL72ISMW.js +0 -2523
- package/dist/shadcn/index.d.ts +0 -761
- package/dist/shadcn/index.js +0 -8680
- package/dist/stateDiagram-FKZM4ZOC.js +0 -264
- package/dist/stateDiagram-v2-4FDKWEC3.js +0 -17
- package/dist/storybook/Accordion.stories.tsx +0 -52
- package/dist/storybook/Alert.stories.tsx +0 -101
- package/dist/storybook/AlertDialog.stories.tsx +0 -161
- package/dist/storybook/AutosizeTextarea.stories.tsx +0 -52
- package/dist/storybook/Avatar.stories.tsx +0 -58
- package/dist/storybook/Badge.stories.tsx +0 -43
- package/dist/storybook/Button.stories.tsx +0 -67
- package/dist/storybook/Calendar.stories.tsx +0 -103
- package/dist/storybook/Card.stories.tsx +0 -69
- package/dist/storybook/Carousel.stories.tsx +0 -274
- package/dist/storybook/Checkbox.stories.tsx +0 -65
- package/dist/storybook/Combobox.stories.tsx +0 -1629
- package/dist/storybook/Command.stories.tsx +0 -35
- package/dist/storybook/DateRange.stories.tsx +0 -540
- package/dist/storybook/DebouncedInput.stories.tsx +0 -179
- package/dist/storybook/DropdownMenu.stories.tsx +0 -36
- package/dist/storybook/Form.stories.tsx +0 -114
- package/dist/storybook/HoverCard.stories.tsx +0 -99
- package/dist/storybook/Input.stories.tsx +0 -156
- package/dist/storybook/InputGroup.stories.tsx +0 -352
- package/dist/storybook/Label.stories.tsx +0 -42
- package/dist/storybook/Menubar.stories.tsx +0 -159
- package/dist/storybook/Pagination.stories.tsx +0 -152
- package/dist/storybook/Popover.stories.tsx +0 -23
- package/dist/storybook/Progress.stories.tsx +0 -89
- package/dist/storybook/RadioGroup.stories.tsx +0 -58
- package/dist/storybook/Resizable.stories.tsx +0 -119
- package/dist/storybook/ScrollArea.stories.tsx +0 -101
- package/dist/storybook/Select.stories.tsx +0 -145
- package/dist/storybook/Sheet.stories.tsx +0 -69
- package/dist/storybook/Sidebar.stories.tsx +0 -97
- package/dist/storybook/Slider.stories.tsx +0 -79
- package/dist/storybook/Switch.stories.tsx +0 -90
- package/dist/storybook/Tabs.stories.tsx +0 -147
- package/dist/storybook/TagsInput.stories.tsx +0 -261
- package/dist/storybook/Textarea.stories.tsx +0 -50
- package/dist/storybook/Toast.stories.tsx +0 -107
- package/dist/storybook/Toggle.stories.tsx +0 -106
- package/dist/storybook/ToggleGroup.stories.tsx +0 -178
- package/dist/storybook/Tooltip.stories.tsx +0 -25
- package/dist/storybook/Typography.stories.tsx +0 -231
- package/dist/storybook/drag-and-drop-file-upload.stories.tsx +0 -99
- package/dist/timeline-definition-IT6M3QCI.js +0 -802
- package/dist/treemap-KMMF4GRG.js +0 -5
- package/dist/xychartDiagram-PRI3JC2R.js +0 -1341
- package/readme.md +0 -11
package/dist/131.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"131.js","sources":["../src/components/api/useQuery.ts","../src/components/api/useMutation.ts","../src/components/api/index.ts","../src/components/dbtDocs/collaboration/conversations/context/types.ts","../src/components/dbtDocs/details/dbtDocsUtils.ts","../src/components/dbtDocs/collaboration/constants.ts","../src/components/dbtDocs/collaboration/highlightUtils.ts","../src/components/dbtDocs/collaboration/DbtDocsReducer.ts","../src/components/dbtDocs/collaboration/DbtDocsCollaborationProvider.tsx","../src/assets/icons/bolt.svg","../src/assets/icons/thinking.svg","../src/assets/icons/circle.svg","../src/assets/icons/download.svg","../src/assets/icons/arrow-right.svg","../src/assets/icons/database.svg","../src/assets/icons/git-merge.svg","../src/assets/icons/arrow-left.svg","../src/assets/icons/dbt.svg","../src/assets/icons/index.tsx","../src/components/dbtDocs/collaboration/HighlightAnchor.tsx","../src/components/dbtDocs/collaboration/ShowConversationsButton.tsx","../src/components/dbtDocs/api/index.ts","../src/components/dbtDocs/collaboration/useDbtDocsCollaboration.ts","../src/components/dbtDocs/collaboration/useHighlight.ts","../src/components/dbtDocs/collaboration/ConversationHighlighter.tsx","../src/components/dbtDocs/collaboration/ConversationsHighlighter.tsx","webpack://@altimateai/ui-components/./src/components/dbtDocs/details/styles.module.scss?3a90","webpack://@altimateai/ui-components/./src/components/user/styles.module.scss?8a81","../src/components/user/ProfileImageByUser.tsx","../src/components/dbtDocs/collaboration/mentions/index.ts","../src/components/dbtDocs/collaboration/mentions/MentionsInput.tsx","../src/components/dbtDocs/collaboration/ConversationInputForm.tsx","../src/components/dbtDocs/collaboration/conversations/ConversationHighlightText.tsx","../src/components/dbtDocs/collaboration/NewConversationForm.tsx","../src/components/dbtDocs/collaboration/conversations/ResolveButton.tsx","../src/components/dbtDocs/collaboration/conversations/ConversationHeader.tsx","../src/components/dbtDocs/collaboration/conversations/Conversation.tsx","../src/components/dbtDocs/collaboration/conversations/ConversationReplyForm.tsx","../src/components/dbtDocs/collaboration/conversations/ConversationGroup.tsx","../src/components/dbtDocs/collaboration/conversations/context/ConversationsProvider.tsx","../src/components/dbtDocs/collaboration/conversations/ConversationGroups.tsx","../src/components/dbtDocs/collaboration/DbtDocsConversationsRightPanel.tsx","../src/components/dbtDocs/collaboration/conversations/useConversations.ts","../src/components/dbtDocs/collaboration/useConversationUsers.ts","../src/components/dbtDocs/collaboration/DbtDocsCollaborationComponents.tsx","../src/components/dbtDocs/collaboration/HotspotButton.tsx","../src/components/dbtDocs/details/AddCommentOnCodeButton.tsx","../src/components/dbtDocs/details/AddCommentOnModelDescriptionButton.tsx","../src/components/dbtDocs/details/AddCommentButton.tsx","../src/components/dbtDocs/details/DbtDocsDetails.tsx","../src/components/dbtDocs/details/DbtDocs.tsx","../src/components/teammate/teamMateSlice.ts","../src/components/teammate/TeamMateProvider.tsx","../src/components/teammate/CoachFormInput.tsx","../src/components/teammate/AddLearningForm.tsx","../src/components/teammate/assets/noLearnings.svg","../src/components/teammate/projectGovernor/types.ts","../src/components/teammate/projectGovernor/ChecksInput.tsx","../src/components/teammate/projectGovernor/ProjectGovernorForm.tsx","../src/components/teammate/projectGovernor/ProjectGovernanceCheck.tsx","../src/components/teammate/projectGovernor/ProjectGovernorDisplay.tsx","../src/components/chatbotV2/types.ts","../../../node_modules/uuid/dist/esm-browser/rng.js","../../../node_modules/uuid/dist/esm-browser/regex.js","../../../node_modules/uuid/dist/esm-browser/validate.js","../../../node_modules/uuid/dist/esm-browser/stringify.js","../../../node_modules/uuid/dist/esm-browser/v4.js","../src/components/chatbotV2/utils.ts","../src/components/chatbotV2/store/chatSlice.ts","../src/components/chatbotV2/ChatProvider.tsx","../src/components/chatbotV2/utils/streamProcessor.ts","../src/components/chatbotV2/hooks/transports.ts","../src/components/chatbotV2/hooks/useAgentChat.ts","../src/components/chatbotV2/components/todoProgress/TodoProgress.tsx","../src/shared/utils.ts","../src/components/chatbotV2/components/refetchSession/RefetchSession.tsx","../src/components/chatbotV2/Chatbot.tsx","../src/components/chatbotV2/components/artifacts/Artifacts.tsx","../src/components/chatbotV2/components/cancelGenerationButton/CancelGenerationButton.tsx","../src/components/chatbotV2/components/coachAI/CoachAI.tsx","../src/components/chatbotV2/components/contextPanel/ContextPanel.tsx","../src/components/chatbotV2/components/regenerateButton/RegenerateButton.tsx","../src/components/chatbotV2/components/chatMessageActions/ChatLastMessageActions.tsx","../src/components/chatbotV2/hooks/useFeedback.ts","../src/components/chatbotV2/components/chatMessageActions/ChatFeedbackActions.tsx","../src/components/chatbotV2/components/emailDialog/EmailDialog.tsx","../src/components/chatbotV2/components/action-buttons/ShareMessage.tsx","../src/components/chatbotV2/components/action-buttons/DownloadMessage.tsx","../src/components/chatbotV2/components/chatMessageActions/ChatMessageActions.tsx","../src/components/chatbotV2/components/interactionPrompt/InteractionPrompt.tsx","../src/components/chatbotV2/components/loadingIndicator/LoadingIndicator.tsx","../src/components/chatbotV2/components/statusUpdates/StatusUpdates.tsx","../src/components/chatbotV2/components/citations/Citations.tsx","../src/components/chatbotV2/components/followup/Followup.tsx","../src/components/chatbotV2/components/attachmentList/AttachmentList.tsx","../src/components/chatbotV2/components/messageItem/MessageItem.tsx","../src/components/chatbotV2/components/messageList/MessageList.tsx","../src/components/chatbotV2/utils/entityDetection.ts","../src/components/chatbotV2/hooks/useEntityDetection.ts","../src/components/chatbotV2/components/entityItem/EntityItem.tsx","../src/components/chatbotV2/components/selectedContexts/SelectedContexts.tsx","../src/components/chatbotV2/components/questionForm/QuestionForm.tsx","../src/components/teammate/types.ts","../src/components/teammate/teradata/HelloMessage.tsx","../src/components/teammate/teradata/MigratorDisplay.tsx","../src/components/chatbotV2/components/chatTriggerLink/ChatTriggerLink.tsx","../src/components/teammate/alertManager/AlertManagerDisplay.tsx","../src/components/teammate/teamMatesConfig.ts","../src/components/teammate/CoachForm.tsx","../src/components/teammate/useTeamMateContext.ts","../src/components/teammate/CoachFormButton.tsx","../src/shared/Collapse.tsx","../src/shared/Table.tsx","../src/components/teammate/LearningRow.tsx","../src/components/teammate/LearningsList.tsx","../src/components/teammate/TeamMatesCard.tsx","../src/components/teammate/TeamMates.tsx","../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/components/lineage/components/ViewsTypeBadge.tsx","../src/components/lineage/components/LineageLegend.tsx","../src/components/lineage/api/index.ts","../src/components/lineage/cllUtils.ts","../src/components/lineage/components/Column.tsx","../src/components/lineage/graph.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","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 { 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 { User } from \"../../../../user/types\";\nimport { DbtDocsShareDetails } from \"../../types\";\n\nexport interface Conversation {\n timestamp: string;\n user_id: number;\n message: string;\n conversation_id: number;\n}\n\nexport interface ConversationGroup {\n owner: number;\n conversation_group_id: number;\n conversations: Conversation[];\n status: \"Pending\" | \"Expired\";\n meta: {\n field?: \"description\";\n column?: string;\n filePath: string;\n highlight: string;\n uniqueId?: string;\n resource_type?: string;\n range: {\n end: { line: number; character: number };\n start: { line: number; character: number };\n };\n };\n}\n\nexport enum ConversationSources {\n DBT_DOCS = \"dbt-docs\",\n DOCUMENTATION_EDITOR = \"documentation-editor\",\n SAAS = \"saas\",\n}\n\nexport interface ConversationGroupStateProps {\n currentUserId: User[\"id\"] | undefined;\n conversationGroup: ConversationGroup;\n shareId: DbtDocsShareDetails[\"share_id\"];\n isSelected: boolean;\n}\n","export const getResourceTypeAndPageFromUrlHash = () => {\n const hashParts = window.location.hash?.split(\"#\")[1]?.replace(\"!/\", \"\")?.split(\"/\");\n return { name: hashParts?.[1], resourceType: hashParts?.[0] };\n};\n","export const ALTIMATE_MAIN_ID = \"altimate_main\";\nexport const HIGHLIGHT_CLASS_NAME = \"altimate-post-highlight\";\nexport const SELECTED_POST_CLASS_NAME = \"altimate-post-selected\";\nexport const HIGHLIGHT_MASK_CLASS_NAME = `${HIGHLIGHT_CLASS_NAME}-mask`;\nexport const ALTIMATE_DISPLAY_ELEMENT_ID_PREFIX = \"altimate-display-\";\nexport const BODY_ON_COMMENT_CLASS_NAME = \"altimate-on-post\";\nexport const HIGHLIGHT_MASK_ID = `${ALTIMATE_DISPLAY_ELEMENT_ID_PREFIX}highlight-mask`;\nexport const HIGHLIGHT_MASK_CLIP_ID = `${ALTIMATE_DISPLAY_ELEMENT_ID_PREFIX}highlight-mask-clip`;\nexport const HIGHLIGHT_CURSOR_CLASS_NAME = \"altimate-post-highlight-cursor\";\nexport const BODY_XPATH = \"/html/body\";\nexport const RECTANGLE_SCREENSHOT_SUFFIX = \"-rc\";\n\nexport const EXTENSION_ROOT_ELEMENT_ID = \"\";\n\nexport const HIGHLIGHT_CLASS = `${ALTIMATE_DISPLAY_ELEMENT_ID_PREFIX}-highlight`;\nexport const HIGHLIGHT_HOVER_CLASS = `${ALTIMATE_DISPLAY_ELEMENT_ID_PREFIX}-highlight-hover`;\nexport const ACTIVE_HIGHLIGHT_CLASS = `${ALTIMATE_DISPLAY_ELEMENT_ID_PREFIX}-active-highlight`;\nexport const ACTIVE_HIGHLIGHT_HOVER_CLASS = `${ALTIMATE_DISPLAY_ELEMENT_ID_PREFIX}-active-highlight-hover`;\nexport const HIGHLIGHT_WRAPPER_TAGNAME = \"altimate-highlight-wrapper\";\nexport const ACTIVE_HIGHLIGHT_WRAPPER_TAGNAME = \"altimate-active-highlight-wrapper\";\n\nexport const ZIndex = 1049;\n","import Highlighter from \"web-highlighter\";\nimport { DomNode, SelectedNode } from \"web-highlighter/dist/types\";\nimport { ACTIVE_HIGHLIGHT_CLASS, HIGHLIGHT_CLASS, HIGHLIGHT_HOVER_CLASS } from \"./constants\";\nimport { ConversationGroup } from \"./conversations/context/types\";\n\nconst highlighter = new Highlighter({\n style: {\n className: HIGHLIGHT_CLASS,\n },\n // wrapTag: HIGHLIGHT_WRAPPER_TAGNAME,\n});\nexport const activeHighlighter = new Highlighter({\n style: {\n className: ACTIVE_HIGHLIGHT_CLASS,\n },\n // wrapTag: ACTIVE_HIGHLIGHT_WRAPPER_TAGNAME,\n});\n\nconst selectedNodesHook = (_id: unknown, selectedNodes: unknown) =>\n (selectedNodes as SelectedNode[]).filter(node => node.$node.nodeValue?.trim() !== \"\");\n\nconst serializeRestoreHook = (_hs: unknown, start: unknown, end: unknown) => {\n const startNode = start as DomNode;\n const endNode = end as DomNode;\n const nodeNameBlacklist = [\"BR\", \"HR\"];\n\n // BR nodes break the highlighting\n // let's set the restored range start/end their parents instead\n // it's unlikely that BRs will also have BRs as parents.\n // filter here any nodes that break highlighting in the future\n if (nodeNameBlacklist.includes(startNode.$node.nodeName) && startNode.$node.parentNode) {\n startNode.$node = startNode.$node.parentNode;\n }\n if (nodeNameBlacklist.includes(endNode.$node.nodeName) && endNode.$node.parentNode) {\n endNode.$node = endNode.$node.parentNode;\n }\n\n return [startNode, endNode];\n};\n\nhighlighter.hooks.Render.SelectedNodes.tap(selectedNodesHook);\nhighlighter.hooks.Serialize.Restore.tap(serializeRestoreHook);\nactiveHighlighter.hooks.Render.SelectedNodes.tap(selectedNodesHook);\nactiveHighlighter.hooks.Serialize.Restore.tap(serializeRestoreHook);\n\n// TODO: hover for active highlight if we want\nhighlighter\n .on(\"selection:hover\", ({ id }) => {\n // display different bg color when hover\n highlighter.addClass(HIGHLIGHT_HOVER_CLASS, id);\n })\n .on(\"selection:hover-out\", ({ id }) => {\n // remove the hover effect when leaving\n highlighter.removeClass(HIGHLIGHT_HOVER_CLASS, id);\n });\n\nexport type HighlightSource = ReturnType<typeof highlighter.fromRange>;\n\nexport default highlighter;\n\nexport const getHighlightSourceFromPostAnchor = (\n post: Partial<ConversationGroup>\n): HighlightSource | null => {\n if (!post.meta?.highlight) {\n return null;\n }\n\n return JSON.parse(post.meta?.highlight);\n};\n\nexport const removeHighlight = (anchor: Partial<ConversationGroup>): void => {\n const hs = getHighlightSourceFromPostAnchor(anchor);\n\n if (!hs) {\n return;\n }\n\n highlighter.remove(hs.id);\n activeHighlighter.remove(hs.id);\n};\n\nexport const addHighlight = (\n anchor: Partial<ConversationGroup> & { id?: string },\n active?: boolean\n): HighlightSource | null => {\n const hs = getHighlightSourceFromPostAnchor(anchor);\n\n const highlighterToUse = active ? activeHighlighter : highlighter;\n\n if (!hs) {\n return null;\n }\n\n return highlighterToUse.fromStore(hs.startMeta, hs.endMeta, hs.text, hs.id, {\n id: anchor.id,\n });\n};\nexport const getCodeBlockElementInPage = () => {\n const modelParts = getModelPartsFromLocationHash();\n // analysis page has element id as sql, other pages have code as id\n const codeSection =\n modelParts?.[1] === \"analysis\"\n ? document.getElementById(\"sql\")\n : document.getElementById(\"code\");\n return codeSection?.parentElement\n ?.querySelector(\"code-block\")\n ?.querySelector(\"code.ng-binding.highlight\") as HTMLElement | null;\n};\n\nexport const getModelPartsFromLocationHash = () => {\n const hashParts = window.location.hash.split(\"#\");\n return hashParts.find(text => text.startsWith(\"!\"))?.split(\"/\");\n};\n\nexport const getModelDescriptionElement = () => {\n return document.querySelector('[marked=\"model.description\"]') as HTMLElement | null;\n};\n\nexport const getConversationGroupTargetElement = (meta: ConversationGroup[\"meta\"]) => {\n if (!meta.field) {\n return getCodeBlockElementInPage();\n }\n\n // desc for column\n if (meta.column) {\n const columnDescriptionTd = Array.from(\n document.querySelectorAll(\"column-details tr:not(.ng-hide) td:first-child\")\n )\n .find(el => (el as HTMLElement).innerText === meta.column)\n ?.parentElement?.querySelector(\"td:nth-child(3)\");\n return columnDescriptionTd as HTMLElement | null;\n }\n\n // desc for model\n return getModelDescriptionElement()?.firstChild as HTMLElement | null;\n};\n\nexport const getField = (element: HTMLElement): ConversationGroup[\"meta\"][\"field\"] => {\n if (element.getAttribute(\"marked\") === \"model.description\") {\n return \"description\";\n }\n};\n\nexport const getSelectionRange = (\n field: ConversationGroup[\"meta\"][\"field\"],\n target: HTMLElement,\n highlightedText: string,\n selectionEnd: { y: number },\n selectionStart: { y: number }\n) => {\n if (field === \"description\") {\n return {\n start: 0,\n end: 0,\n x: 0,\n y: 0,\n };\n }\n // For code element\n const lineNumbers = target.querySelectorAll(`.line-numbers-rows > span`);\n\n const selectedLines = highlightedText.split(\"\\n\");\n\n // Find y which is higher to negate whether user selects from bottom to top or top to bottom\n const endY = Math.max(selectionStart.y, selectionEnd.y);\n\n // Find which line number is in between the node dimensions\n const end = Array.from(lineNumbers).findIndex(node => {\n const { height, y } = node.getBoundingClientRect();\n return endY >= y && endY <= y + height;\n });\n\n const endLineNumberElement = lineNumbers[end] as HTMLElement;\n\n const start = end - selectedLines.length + 1;\n\n console.log(\"start and end lines found\", start, end);\n\n return {\n x: endLineNumberElement.offsetLeft,\n y: endLineNumberElement.offsetTop + endLineNumberElement.offsetHeight / 2,\n start,\n end,\n };\n};\n\nexport const getSelectionAllowedElements = () => {\n return [getCodeBlockElementInPage()?.parentElement, getModelDescriptionElement()];\n};\n","import { User } from \"../../user/types\";\nimport { getResourceTypeAndPageFromUrlHash } from \"../details/dbtDocsUtils\";\nimport { ConversationGroup, ConversationSources } from \"./conversations/context/types\";\nimport { getModelPartsFromLocationHash } from \"./highlightUtils\";\nimport { LoadingState, NewConversation } from \"./types\";\nimport { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\n\nexport interface Manifest {\n exposures?: Record<string, { name: string; original_file_path: string; unique_id: string }>;\n macros?: Record<string, { name: string; original_file_path: string; unique_id: string }>;\n nodes?: Record<\n string,\n {\n name: string;\n original_file_path: string;\n unique_id: string;\n raw_code: string;\n }\n >;\n sources?: Record<string, { name: string; original_file_path: string; unique_id: string }>;\n}\nexport interface DbtDocsState {\n users: Record<number, User>;\n currentUserId: User[\"id\"] | undefined;\n isRightPanelOpen: boolean;\n selectedConversationId: ConversationGroup[\"conversation_group_id\"] | undefined;\n conversations: Record<number, ConversationGroup>;\n conversationsLoadingState: LoadingState;\n newConversation: NewConversation | undefined;\n shareId: number | undefined;\n docsAppRendered: boolean;\n currentPage: {\n resourceType: string;\n name: string;\n };\n codeblockLoaded: boolean;\n source: ConversationSources;\n manifest: Manifest;\n}\n\nexport const initialState = {\n users: {},\n isRightPanelOpen: false,\n selectedConversationId: undefined,\n conversations: {},\n conversationsLoadingState: LoadingState.UNINITIALIZED,\n newConversation: undefined,\n shareId: undefined,\n docsAppRendered: false,\n currentPage: getResourceTypeAndPageFromUrlHash(),\n codeblockLoaded: false,\n source: ConversationSources.DBT_DOCS,\n manifest: {},\n} as DbtDocsState;\n\nconst conversationsSlice = createSlice({\n name: \"appState\",\n initialState,\n reducers: {\n setDocsAppRendered: (state, action: PayloadAction<DbtDocsState[\"docsAppRendered\"]>) => {\n state.docsAppRendered = action.payload;\n },\n setManifest: (state, action: PayloadAction<DbtDocsState[\"manifest\"]>) => {\n state.manifest = action.payload;\n },\n updateCurrentPage: (state, action: PayloadAction<DbtDocsState[\"currentPage\"]>) => {\n state.currentPage = action.payload;\n },\n setConversationSource: (state, action: PayloadAction<DbtDocsState[\"source\"]>) => {\n state.source = action.payload;\n },\n updateCodeblockLoaded: (state, action: PayloadAction<DbtDocsState[\"codeblockLoaded\"]>) => {\n state.codeblockLoaded = action.payload;\n },\n setShareId: (state, action: PayloadAction<DbtDocsState[\"shareId\"]>) => {\n state.shareId = action.payload;\n },\n setCurrentUserId: (state, action: PayloadAction<DbtDocsState[\"currentUserId\"]>) => {\n state.currentUserId = action.payload;\n },\n setConversationsLoadingState: (\n state,\n action: PayloadAction<DbtDocsState[\"conversationsLoadingState\"]>\n ) => {\n state.conversationsLoadingState = action.payload;\n },\n refetchConversations: state => {\n state.conversationsLoadingState = LoadingState.UNINITIALIZED;\n },\n setUsers: (state, action: PayloadAction<User[] | undefined>) => {\n if (!action.payload?.length) {\n return state;\n }\n return {\n ...state,\n users: action.payload.reduce((acc: Record<string, User>, user) => {\n acc[user.id] = user;\n return acc;\n }, {}),\n };\n },\n updateRightPanelState: (state, action: PayloadAction<DbtDocsState[\"isRightPanelOpen\"]>) => {\n state.isRightPanelOpen = action.payload;\n },\n updateSelectedConversationId: (\n state,\n action: PayloadAction<DbtDocsState[\"selectedConversationId\"]>\n ) => {\n state.selectedConversationId = action.payload;\n },\n upsertConversation: (state, action: PayloadAction<ConversationGroup>) => {\n state.conversations = {\n ...state.conversations,\n [action.payload.conversation_group_id]: {\n ...state.conversations[action.payload.conversation_group_id],\n ...action.payload,\n },\n };\n },\n resolveConversationGroup: (\n state,\n {\n payload: { conversationGroupId },\n }: PayloadAction<{ shareId: number; conversationGroupId: number }>\n ) => {\n if (state.conversations[conversationGroupId]) {\n delete state.conversations[conversationGroupId];\n }\n },\n updateNewConversation: (state, action: PayloadAction<NewConversation>) => {\n const updated = { ...action.payload };\n if (!updated.meta) {\n console.log(\"Invalid meta\");\n return;\n }\n const modelParts = getModelPartsFromLocationHash();\n if (!modelParts || modelParts.length < 3) {\n console.error(\"Unable to find model parts\", modelParts);\n return;\n }\n\n console.log(\"model parts found\", modelParts);\n updated.meta.uniqueId = modelParts[2];\n updated.meta.resource_type = modelParts[1];\n if (!updated.meta.range) {\n updated.meta.range = {\n end: { line: 0, character: 0 },\n start: { line: 0, character: 0 },\n };\n }\n if (updated.meta.uniqueId) {\n const node =\n state.manifest.nodes?.[updated.meta.uniqueId] ||\n state.manifest.macros?.[updated.meta.uniqueId];\n updated.meta.filePath = node?.original_file_path || \"\";\n }\n state.newConversation = updated;\n },\n resetNewConversation: state => {\n state.newConversation = undefined;\n },\n setConversations: (state, action: PayloadAction<ConversationGroup[] | undefined>) => {\n if (!action.payload) {\n return;\n }\n state.conversations = action.payload.reduce(\n (acc: Record<string, ConversationGroup>, conversation) => {\n acc[conversation.conversation_group_id] = conversation;\n return acc;\n },\n {}\n );\n\n // Setting this to default\n state.selectedConversationId =\n state.selectedConversationId || action.payload[0].conversation_group_id;\n },\n },\n});\n\nexport const {\n setCurrentUserId,\n setShareId,\n updateSelectedConversationId,\n updateRightPanelState,\n setUsers,\n setConversations,\n resetNewConversation,\n updateNewConversation,\n upsertConversation,\n setDocsAppRendered,\n updateCurrentPage,\n updateCodeblockLoaded,\n resolveConversationGroup,\n setConversationsLoadingState,\n refetchConversations,\n setConversationSource,\n setManifest,\n} = conversationsSlice.actions;\nexport default conversationsSlice;\n","import { createContext, ReactNode, useCallback, useContext, useMemo, useReducer } from \"react\";\nimport conversationsSlice, { DbtDocsState } from \"./DbtDocsReducer\";\nimport { UnknownAction } from \"@reduxjs/toolkit\";\nimport { ConversationSources } from \"./conversations/context/types\";\n\ninterface ContextProps {\n state: DbtDocsState;\n dispatch: React.Dispatch<UnknownAction>;\n getValue: (callback: (state: DbtDocsState) => unknown) => unknown;\n}\n\nexport const DbtDocsCollaborationContext = createContext<ContextProps>({\n state: conversationsSlice.getInitialState(),\n dispatch: () => null,\n getValue: () => null,\n});\n\nconst DbtDocsCollaborationProvider = ({\n children,\n shareId,\n userId,\n conversationGroupId,\n source,\n}: {\n children: ReactNode;\n shareId: number;\n userId?: number;\n conversationGroupId?: number;\n source: ConversationSources;\n}) => {\n const [state, dispatch] = useReducer(conversationsSlice.reducer, {\n ...conversationsSlice.getInitialState(),\n shareId,\n currentUserId: userId,\n selectedConversationId: conversationGroupId,\n isRightPanelOpen: Boolean(conversationGroupId),\n source,\n });\n\n const getValue = useCallback(\n (callback: (state: DbtDocsState) => unknown) => {\n return callback(state as DbtDocsState);\n },\n [state]\n );\n\n const values = useMemo(\n () => ({\n state,\n dispatch,\n getValue,\n }),\n [state, dispatch, getValue]\n );\n\n return (\n <DbtDocsCollaborationContext.Provider value={values}>\n {children}\n </DbtDocsCollaborationContext.Provider>\n );\n};\n\nexport default DbtDocsCollaborationProvider;\n\nexport const useDbtDocsCollaborationContext = () => {\n return useContext(DbtDocsCollaborationContext);\n};\n\nexport const useDbtDocsCollaborationSelector = (callback: (state: DbtDocsState) => unknown) => {\n const { getValue } = useContext(DbtDocsCollaborationContext);\n return getValue(callback);\n};\n\nexport const useDbtDocsCollaborationDispatch = () => {\n const { dispatch } = useContext(DbtDocsCollaborationContext);\n return dispatch;\n};\n","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 SvgThinking = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={24} height={24} fill=\"none\" viewBox=\"0 0 24 24\" {...props}><path fill=\"#082247\" d=\"M16.117 8.288c.168.487.253.998.253 1.518 0 .207-.164.37-.37.37a.37.37 0 0 1-.37-.37 3.903 3.903 0 0 0-2.602-3.69.37.37 0 0 1 .248-.697 4.64 4.64 0 0 1 2.84 2.869m1.683 1.865a6.03 6.03 0 0 1-2.086 4.256 4.72 4.72 0 0 0-1.604 3.352c1.21-.07 1.862 1.453.985 2.269.853.787.262 2.282-.914 2.268h-.394a1.59 1.59 0 0 1-1.58 1.655H9.41c-.9.005-1.617-.76-1.58-1.655h-.393c-1.177.015-1.768-1.48-.915-2.268-.75-.67-.389-2.007.586-2.222a2.2 2.2 0 0 1-.45-.722c-1.767.131-3.107-1.688-2.526-3.333-2.227-1.008-2.227-4.275 0-5.283-.581-1.64.76-3.46 2.526-3.333.844-2.235 4.149-1.664 4.177.741v10.467c0 .544-.202 1.036-.534 1.416h1.04V4.566c-.01-.474.431-.886.905-.835 3.21.23 5.789 3.207 5.555 6.422m-9.84 5.025a.37.37 0 0 1-.215.478.65.65 0 0 0-.249.16c-.28.28-.206.745-.196.801.351 1.669 2.77 1.44 2.803-.267V5.883c-.01-1.514-2.077-1.95-2.696-.581.497.098 1.97 1.354.914 1.589-.356-.01-.426-.479-.712-.638-1.388-1.101-3.366.408-2.761 2.011a2.08 2.08 0 0 1 1.875.722.367.367 0 0 1-.047.52.367.367 0 0 1-.52-.047 1.352 1.352 0 0 0-1.42-.422c-1.913.563-2.068 3.282-.249 4.065.249-.399 1.711-1.514 1.969-.736a.37.37 0 0 1-.267.45c-2.105.52-1.814 3.478.356 3.534.01-.31.094-.727.426-1.06.24-.248.793-.571.99-.112m5.091 7.12H8.575a.85.85 0 0 0 .839.915h2.798c.492.004.872-.427.84-.915m1.711-1.317a.58.58 0 0 0-.581-.581H7.445a.581.581 0 1 0 0 1.163h6.74a.586.586 0 0 0 .577-.582m-7.317-2.48c-.764.02-.764 1.14 0 1.158h6.74a.581.581 0 1 0 0-1.162h-6.74zm4.734-14.034c-.065.005-.094.028-.103.099V17.76h1.284a5.48 5.48 0 0 1 1.866-3.91c3.567-3.051 1.608-9.004-3.047-9.384m4.763.685 1.71-1.711c.338-.347-.173-.863-.524-.525l-1.711 1.71c-.338.352.178.863.525.526m4.218 4.34h-2.418c-.488.01-.488.731 0 .74h2.418c.488-.009.488-.73 0-.74m-4.218 5.077c-.347-.338-.863.173-.525.525l1.71 1.71c.352.338.863-.173.526-.524zM12.08 2.83V.413c-.01-.488-.731-.488-.74 0V2.83c.009.488.73.488.74 0\" /></svg>;\nexport default SvgThinking;","import * as React from \"react\";\nconst SvgCircle = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={24} height={24} fill=\"none\" viewBox=\"0 0 24 24\" {...props}><circle cx={12} cy={12} r={10} stroke=\"currentColor\" strokeWidth={2} /></svg>;\nexport default SvgCircle;","import * as React from \"react\";\nconst SvgDownload = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={24} height={24} fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} className=\"download_svg__lucide download_svg__lucide-download\" viewBox=\"0 0 24 24\" {...props}><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4M7 10l5 5 5-5M12 15V3\" /></svg>;\nexport default SvgDownload;","import * as React from \"react\";\nconst SvgArrowRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={24} height={24} fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} className=\"arrow-right_svg__lucide arrow-right_svg__lucide-arrow-right\" viewBox=\"0 0 24 24\" {...props}><path d=\"M5 12h14M12 5l7 7-7 7\" /></svg>;\nexport default SvgArrowRight;","import * as React from \"react\";\nconst SvgDatabase = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={24} height={24} fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} className=\"database_svg__lucide database_svg__lucide-database\" viewBox=\"0 0 24 24\" {...props}><ellipse cx={12} cy={5} rx={9} ry={3} /><path d=\"M3 5v14a9 3 0 0 0 18 0V5\" /><path d=\"M3 12a9 3 0 0 0 18 0\" /></svg>;\nexport default SvgDatabase;","import * as React from \"react\";\nconst SvgGitMerge = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={24} height={24} fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} className=\"git-merge_svg__lucide git-merge_svg__lucide-git-merge\" viewBox=\"0 0 24 24\" {...props}><circle cx={18} cy={18} r={3} /><circle cx={6} cy={6} r={3} /><path d=\"M6 21V9a9 9 0 0 0 9 9\" /></svg>;\nexport default SvgGitMerge;","import * as React from \"react\";\nconst SvgArrowLeft = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={24} height={24} fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} className=\"arrow-left_svg__lucide arrow-left_svg__lucide-git-merge\" viewBox=\"0 0 24 24\" {...props}><circle cx={18} cy={18} r={3} /><circle cx={6} cy={6} r={3} /><path d=\"M6 21V9a9 9 0 0 0 9 9\" /></svg>;\nexport default SvgArrowLeft;","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 { AnimatePresence } from \"framer-motion\";\nimport { ALTIMATE_DISPLAY_ELEMENT_ID_PREFIX, ZIndex } from \"./constants\";\nimport { AddIcon } from \"../../../assets/icons\";\nimport { Button } from \"@altimateai/lego\";\nimport { createPortal } from \"react-dom\";\nimport { MouseEvent } from \"react\";\n\ninterface Props {\n pos: { x: number; y: number; element: HTMLElement };\n onAddComment: (e: MouseEvent) => void;\n}\nconst HighlightAnchor = ({ pos, onAddComment }: Props) => {\n return createPortal(\n <AnimatePresence>\n {pos && (\n <Button\n onClick={onAddComment}\n id={`${ALTIMATE_DISPLAY_ELEMENT_ID_PREFIX}-highlight`}\n style={{\n position: \"absolute\",\n top: pos.y,\n left: pos.x,\n // right: \"15px\",\n zIndex: ZIndex + 5,\n cursor: \"pointer\",\n background: \"#007AFF\",\n width: 26,\n height: 26,\n borderRadius: \"100%\",\n boxShadow: \"none\",\n border: \"none\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n fontSize: \"13px\",\n fontWeight: \"bold\",\n color: \"#fff\",\n padding: 0,\n }}\n >\n <AddIcon />\n </Button>\n )}\n </AnimatePresence>,\n pos.element.parentElement!,\n );\n};\n\nexport default HighlightAnchor;\n","import { Button } from \"@altimateai/lego\";\nimport { updateRightPanelState } from \"./DbtDocsReducer\";\nimport {\n useDbtDocsCollaborationContext,\n useDbtDocsCollaborationDispatch,\n} from \"./DbtDocsCollaborationProvider\";\n\nconst ShowConversationsButton = () => {\n const {\n state: { isRightPanelOpen },\n } = useDbtDocsCollaborationContext();\n const dispatch = useDbtDocsCollaborationDispatch();\n\n const toggleRightPanel = () => {\n dispatch(updateRightPanelState(!isRightPanelOpen));\n };\n return (\n <Button onClick={toggleRightPanel}>\n {isRightPanelOpen ? \"Hide conversations\" : \"Show conversations\"}\n </Button>\n );\n};\n\nexport default ShowConversationsButton;\n","import { ApiHelper } from \"../../api/index\";\nimport { DbtDocsShareDetails } from \"../collaboration/types\";\nimport { User } from \"../../user/types\";\nimport {\n Conversation,\n ConversationGroup,\n} from \"../collaboration/conversations/context/types\";\n\n// Dbt docs conversation apis\nexport const getDbtDocsShareDetailsById = (\n shareId: DbtDocsShareDetails[\"share_id\"],\n) => ApiHelper.get<DbtDocsShareDetails | null>(`dbt/dbt_docs_share/${shareId}`);\n\nexport const createNewConversationGroup = (\n shareId: DbtDocsShareDetails[\"share_id\"],\n data: Partial<ConversationGroup> & { message: string },\n source: string,\n) =>\n ApiHelper.post<{\n conversation_group_id: ConversationGroup[\"conversation_group_id\"];\n }>(`dbt/dbt_docs_share/${shareId}/conversation_group`, {\n ...data,\n telemetry: {\n eventName: \"dbtCollaboration:create\",\n properties: { source },\n },\n });\n\nexport const addConversationToGroup = (\n shareId: DbtDocsShareDetails[\"share_id\"],\n conversationGroupId: ConversationGroup[\"conversation_group_id\"],\n data: Partial<Conversation>,\n source: string,\n) =>\n ApiHelper.post(\n `dbt/dbt_docs_share/${shareId}/conversation_group/${conversationGroupId}/conversation`,\n {\n ...data,\n telemetry: {\n eventName: \"dbtCollaboration:reply\",\n properties: { source },\n },\n },\n );\n\nexport const getConversationsByShareId = (\n shareId: DbtDocsShareDetails[\"share_id\"],\n) =>\n ApiHelper.get<{ dbt_docs_share_conversations: ConversationGroup[] }>(\n `dbt/dbt_docs_share/${shareId}/conversations`,\n );\n\nexport const getUserList = (company?: string) =>\n ApiHelper.get<User[]>(\"users/chat\", { company });\n\nexport const resolveConversationGroup = (\n shareId: DbtDocsShareDetails[\"share_id\"],\n conversationGroupId: ConversationGroup[\"conversation_group_id\"],\n source: string,\n) =>\n ApiHelper.post(\n `dbt/dbt_docs_share/${shareId}/conversation_group/${conversationGroupId}/resolve`,\n {\n resolved: true,\n telemetry: {\n eventName: \"dbtCollaboration:resolve\",\n properties: { source },\n },\n },\n );\n","import { useCallback, useEffect, useState } from \"react\";\nimport { getDbtDocsShareDetailsById } from \"../api/index\";\nimport { DbtDocsState, setManifest } from \"./DbtDocsReducer\";\nimport {\n useDbtDocsCollaborationDispatch,\n useDbtDocsCollaborationSelector,\n} from \"./DbtDocsCollaborationProvider\";\nimport { DbtDocsShareDetails } from \"./types\";\n\nconst useDbtDocsCollaboration = () => {\n const shareId = useDbtDocsCollaborationSelector(\n state => state.shareId\n ) as DbtDocsState[\"shareId\"];\n const [shareDetails, setShareDetails] = useState<DbtDocsShareDetails | null>(null);\n const [loading, setLoading] = useState(false);\n const dispatch = useDbtDocsCollaborationDispatch();\n\n useEffect(() => {\n if (!shareDetails?.manifest_presigned_url) {\n return;\n }\n\n fetch(shareDetails.manifest_presigned_url)\n .then(response => response.json())\n .then(response => {\n dispatch(setManifest(response));\n })\n .catch(error =>\n console.error(\"error loading manifest\", error, shareDetails.manifest_presigned_url)\n );\n }, [dispatch, shareDetails?.manifest_presigned_url]);\n\n const loadDetails = useCallback(async () => {\n if (!shareId) {\n return;\n }\n setLoading(true);\n const response = await getDbtDocsShareDetailsById(shareId);\n if (response) {\n setShareDetails(response);\n // Hack to close the sidebar when dbt docs is shown\n const leftArrowBtn = document.getElementById(\"collapse-sidebar\");\n leftArrowBtn?.click();\n }\n setLoading(false);\n }, [shareId]);\n\n useEffect(() => {\n if (!shareId || shareDetails || loading) {\n return;\n }\n loadDetails();\n }, [shareId, shareDetails, loadDetails, loading]);\n\n return { shareDetails, loading };\n};\n\nexport default useDbtDocsCollaboration;\n","import { useState, useEffect, useCallback } from \"react\";\nimport { getField, getSelectionRange, removeHighlight } from \"./highlightUtils\";\nimport { NewConversation } from \"./types\";\nimport {\n useDbtDocsCollaborationDispatch,\n useDbtDocsCollaborationSelector,\n} from \"./DbtDocsCollaborationProvider\";\nimport { SelectionRange } from \"./selectionEndEvent\";\nimport { resetNewConversation } from \"./DbtDocsReducer\";\nimport { ConversationGroup } from \"./conversations/context/types\";\n\nconst useHighlight = () => {\n const selectedConversation = useDbtDocsCollaborationSelector(state =>\n state.selectedConversationId ? state.conversations[state.selectedConversationId] : null\n ) as ConversationGroup | null;\n const isDocsAppRendered = useDbtDocsCollaborationSelector(\n state => state.docsAppRendered\n ) as boolean;\n const newConversation = useDbtDocsCollaborationSelector(\n state => state.newConversation\n ) as NewConversation;\n\n const dispatch = useDbtDocsCollaborationDispatch();\n const [highlightPostData, setHighlightPostData] = useState<NewConversation | null>(null);\n // Set the position to be used to show the highlight popover\n const [pos, setPos] = useState<{\n x: number;\n y: number;\n element: HTMLElement;\n } | null>(null);\n\n useEffect(() => {\n if (newConversation) {\n setHighlightPostData(null);\n setPos(null);\n }\n }, [newConversation]);\n\n const resetHighlights = useCallback(() => {\n console.log(\"resetHighlights\");\n if (highlightPostData) {\n removeHighlight(highlightPostData);\n }\n setPos(null);\n setHighlightPostData(null);\n }, [highlightPostData]);\n\n useEffect(() => {\n if (!selectedConversation || !isDocsAppRendered) {\n return;\n }\n if (selectedConversation.meta.resource_type && selectedConversation.meta.uniqueId) {\n window.location.hash = `#!/${selectedConversation.meta.resource_type}/${selectedConversation.meta.uniqueId}`;\n }\n }, [selectedConversation, isDocsAppRendered, dispatch]);\n\n const onSelectionEnd = (event: CustomEvent) => {\n const target = event.target as HTMLElement;\n const field = getField(target);\n const { end: selectionEnd, start: selectionStart } = event.detail\n .selectionRange as SelectionRange;\n const selection = document.getSelection();\n if (!selection || !selection.rangeCount) {\n resetHighlights();\n return null;\n }\n\n const range = selection.getRangeAt(0);\n\n const highlightedText = range.toString();\n\n const code = target?.innerText;\n if (!highlightedText || !code) {\n return;\n }\n\n const { end, start, x, y } = getSelectionRange(\n field,\n target,\n highlightedText,\n selectionEnd,\n selectionStart\n );\n\n console.log(\"selection range\", end, start, x, y);\n const data = {\n meta: {\n filePath: \"\",\n field,\n highlight: highlightedText,\n range: {\n end: { line: end, character: 0 },\n start: { line: start, character: 0 },\n },\n },\n };\n\n dispatch(resetNewConversation());\n setPos({\n x,\n y,\n element: target,\n });\n\n document.body.addEventListener(\"click\", resetHighlights, { once: true });\n setHighlightPostData(data);\n };\n\n return {\n getHighlightedSelectionData: () => highlightPostData,\n pos,\n onSelectionEnd,\n };\n};\n\nexport default useHighlight;\n","import { useEffect, useMemo, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { updateSelectedConversationId } from \"./DbtDocsReducer\";\nimport { getConversationGroupTargetElement } from \"./highlightUtils\";\nimport { ConversationGroup } from \"./conversations/context/types\";\nimport {\n useDbtDocsCollaborationDispatch,\n useDbtDocsCollaborationSelector,\n} from \"./DbtDocsCollaborationProvider\";\nimport { CommentUnresolvedIcon } from \"../../../assets/icons\";\n\nconst ConversationHighlighter = ({\n conversationGroup,\n}: {\n conversationGroup: ConversationGroup;\n}) => {\n const selectedConversationId = useDbtDocsCollaborationSelector(\n (state) => state.selectedConversationId,\n ) as ConversationGroup[\"conversation_group_id\"] | undefined;\n const dispatch = useDbtDocsCollaborationDispatch();\n const highlightRef = useRef<HTMLDivElement | null>(null);\n const target = useMemo(() => {\n return getConversationGroupTargetElement(conversationGroup.meta);\n }, [conversationGroup.meta]);\n\n const handleClick = () => {\n dispatch(\n updateSelectedConversationId(conversationGroup.conversation_group_id),\n );\n };\n\n const position = useMemo(() => {\n if (!target) {\n return;\n }\n\n if (conversationGroup.meta.field === \"description\") {\n return { top: 0, bottom: target.offsetHeight };\n }\n\n let top = 0;\n let bottom = 0;\n for (\n let i = conversationGroup.meta.range.start.line;\n i <= conversationGroup.meta.range.end.line;\n i++\n ) {\n const lineNumber = target.querySelector(\n `.line-numbers-rows > span:nth-child(${i + 1})`,\n );\n if (lineNumber) {\n if (i === conversationGroup.meta.range.start.line) {\n top = (lineNumber as HTMLSpanElement).offsetTop + 15;\n }\n if (i === conversationGroup.meta.range.end.line) {\n bottom =\n (lineNumber as HTMLSpanElement).offsetTop +\n (lineNumber as HTMLSpanElement).offsetHeight;\n }\n // (lineNumber as HTMLSpanElement).classList.add(\"altimate-highlight\");\n }\n }\n return { top, bottom };\n }, [\n target,\n conversationGroup.meta.field,\n conversationGroup.meta.range.start.line,\n conversationGroup.meta.range.end.line,\n ]);\n\n useEffect(() => {\n if (selectedConversationId !== conversationGroup.conversation_group_id) {\n return;\n }\n\n highlightRef.current?.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n });\n }, [conversationGroup.conversation_group_id, selectedConversationId]);\n\n if (!position || !target?.parentElement) {\n return null;\n }\n\n return createPortal(\n <div\n ref={highlightRef}\n className={`altimate-highlighter ${selectedConversationId === conversationGroup.conversation_group_id ? \"active\" : \"\"}`}\n style={{ top: position.top, height: position.bottom - position.top }}\n onClick={handleClick}\n >\n <CommentUnresolvedIcon />\n </div>,\n target.parentElement,\n );\n};\n\nexport default ConversationHighlighter;\n","import { DbtDocsState } from \"./DbtDocsReducer\";\nimport { useDbtDocsCollaborationSelector } from \"./DbtDocsCollaborationProvider\";\nimport ConversationHighlighter from \"./ConversationHighlighter\";\nimport { ConversationGroup } from \"./conversations/context/types\";\n\nconst ConversationsHighlighter = () => {\n const conversationGroups = useDbtDocsCollaborationSelector(state =>\n Object.values(state.conversations || {})\n ) as ConversationGroup[] | undefined;\n const codeblockLoaded = useDbtDocsCollaborationSelector(\n state => state.codeblockLoaded\n ) as boolean;\n const currentPage = useDbtDocsCollaborationSelector(\n state => state.currentPage\n ) as DbtDocsState[\"currentPage\"];\n\n const conversationsInCurrentPage = conversationGroups?.filter(\n conversationGroup =>\n conversationGroup.meta.resource_type === currentPage.resourceType &&\n conversationGroup.meta.uniqueId === currentPage.name\n );\n\n if (!conversationsInCurrentPage?.length || !codeblockLoaded) {\n return null;\n }\n\n return (\n <>\n {conversationsInCurrentPage.map(conversationGroup => (\n <ConversationHighlighter\n conversationGroup={conversationGroup}\n key={conversationGroup.conversation_group_id}\n />\n ))}\n </>\n );\n};\n\nexport default ConversationsHighlighter;\n","// extracted by css-extract-rspack-plugin\nexport default {\"dbtDocs\":\"dbtDocs-fMtUb6\",\"hotspotButton\":\"hotspotButton-dTVyi_\",\"pulse\":\"pulse-b0fWZW\",\"conversationRightPanelCloseButton\":\"conversationRightPanelCloseButton-UrkRMu\",\"conversationRightPanel\":\"conversationRightPanel-sztyiY\",\"newConversationForm\":\"newConversationForm-K9GEep\",\"highlightText\":\"highlightText-LYVCe1\",\"conversationInputForm\":\"conversationInputForm-SdxXJT\",\"conversationGroup\":\"conversationGroup-hiNZQ0\",\"replyForm\":\"replyForm-qvHtmB\",\"resolveButton\":\"resolveButton-roENjF\"};","// extracted by css-extract-rspack-plugin\nexport default {\"profileImage\":\"profileImage-tkto2K\"};","import { User } from \"./types\";\nimport classes from \"./styles.module.scss\";\n\ninterface Props {\n user?: User | null;\n}\nconst ProfileImageByUser = ({ user }: Props) => {\n return <div className={classes.profileImage}>{user?.first_name?.[0] || \"\"}</div>;\n};\n\nexport default ProfileImageByUser;\n","export const StyleMentionInput = {\n \"&multiLine\": {\n minHeight: \"40px\",\n },\n input: {\n border: \"none\",\n outline: \"none\",\n fontWeight: \"500\",\n fontSize: \"15px\",\n color: \"rgba(0, 5, 15, 0.85)\",\n },\n suggestions: {\n backgroundColor: \"var(--background--01)\",\n border: \"1px solid rgba(0,0,0,0.1)\",\n borderRadius: \"8px\",\n padding: \"5px\",\n boxShadow: \"0px 0px 10px rgba(0,0,0,0.1)\",\n minWidth: \"150px\",\n maxHeight: \"200px\",\n overflowY: \"auto\" as const,\n item: {\n fontSize: \"15px\",\n padding: \"4px 11px 4px 11px\",\n borderRadius: \"4px\",\n fontWeight: \"500\",\n \"&focused\": {\n backgroundColor: \"var(--background--04)\",\n },\n },\n },\n};\n","import { KeyboardEvent as ReactKeyboardEvent } from \"react\";\nimport { MentionsInput, Mention } from \"react-mentions\";\nimport { StyleMentionInput } from \".\";\nimport { User } from \"../../../user/types\";\n\ninterface Props {\n value: string;\n setValue: (v: string) => void;\n users: User[];\n placeholder?: string;\n onEnterKeypress?: () => void;\n}\n\nconst MentionsInputComponent = ({\n value,\n setValue,\n users: propsUsers,\n placeholder = \"Type your reply here...\",\n onEnterKeypress,\n}: Props) => {\n const users = propsUsers.map(user => ({\n ...user,\n display: user.display_name,\n }));\n const onKeyDown = (\n e: ReactKeyboardEvent<HTMLInputElement> | ReactKeyboardEvent<HTMLTextAreaElement>\n ) => {\n // dbt docs has shortcut `T` to open search. when typing in this textbox, search is opened whenever t key is pressed\n e.stopPropagation();\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n onEnterKeypress?.();\n }\n };\n\n const onAdd = (id: string | number, display: string) => {\n console.info(`[MentionsInputComponent] on mention select`, { id, display });\n };\n\n const handleChange = (e: { target: { value: string } }) => {\n setValue(e.target.value);\n };\n\n return (\n <MentionsInput\n autoFocus\n value={value}\n onChange={handleChange}\n style={{\n ...StyleMentionInput,\n minHeight: \"40px\",\n marginBottom: \"10px\",\n }}\n placeholder={placeholder}\n className=\"mentions-input\"\n onKeyDown={onKeyDown}\n >\n <Mention\n displayTransform={(_id, display) => `@${display}`}\n trigger=\"@\"\n markup=\"@[__id__](__display__)\"\n data={users}\n appendSpaceOnAdd\n renderSuggestion={(highlightedDisplay, focused) => (\n <div className={`user ${focused ? \"focused\" : \"\"}`}>{highlightedDisplay.display}</div>\n )}\n onAdd={onAdd}\n />\n </MentionsInput>\n );\n};\n\nexport default MentionsInputComponent;\n","import { LoadingButton } from \"@altimateai/lego\";\nimport ProfileImageByUser from \"../../user/ProfileImageByUser\";\nimport { User } from \"../../user/types\";\nimport MentionsInputComponent from \"./mentions/MentionsInput\";\nimport classes from \"../details/styles.module.scss\";\nimport { AskIcon } from \"../../../assets/icons\";\n\ninterface Props {\n comment: string;\n setComment: (comment: string) => void;\n loading: boolean;\n users: User[];\n currentUser: User | null;\n placeholder?: string;\n onEnterKeypress?: () => void;\n}\nconst ConversationInputForm = ({\n comment,\n setComment,\n loading,\n users,\n currentUser,\n placeholder,\n onEnterKeypress,\n}: Props) => {\n return (\n <div className={classes.conversationInputForm}>\n {currentUser ? <ProfileImageByUser user={currentUser} /> : null}\n <MentionsInputComponent\n value={comment}\n setValue={setComment}\n users={users}\n placeholder={placeholder}\n onEnterKeypress={onEnterKeypress}\n />\n <LoadingButton loading={loading} color=\"primary\">\n <AskIcon />\n </LoadingButton>\n </div>\n );\n};\n\nexport default ConversationInputForm;\n","import { CodeBlock } from \"@altimateai/lego\";\nimport { ConversationGroup } from \"./context/types\";\nimport classes from \"../../details/styles.module.scss\";\n\nconst ConversationHighlightText = ({\n meta: { highlight: text, filePath, field, column },\n}: {\n meta: ConversationGroup[\"meta\"];\n}) => {\n if (!text) {\n return null;\n }\n\n const path = column ? `${filePath} (${column})` : filePath;\n\n return (\n <div className={classes.highlightText}>\n <CodeBlock\n code={text}\n language={field ? \"markdown\" : \"sql\"}\n // show line numbers only for sql\n showLineNumbers={!field}\n fileName={path}\n theme=\"light\" // TODO: fix this\n />\n </div>\n );\n};\n\nexport default ConversationHighlightText;\n","import { FormEvent, useState } from \"react\";\nimport { Card, CardContent } from \"@altimateai/lego\";\nimport { createNewConversationGroup } from \"../api/index\";\nimport {\n DbtDocsState,\n refetchConversations,\n resetNewConversation,\n updateRightPanelState,\n} from \"./DbtDocsReducer\";\nimport classes from \"../details/styles.module.scss\";\nimport ConversationInputForm from \"./ConversationInputForm\";\nimport ConversationHighlightText from \"./conversations/ConversationHighlightText\";\nimport { User } from \"../../user/types\";\nimport {\n useDbtDocsCollaborationDispatch,\n useDbtDocsCollaborationSelector,\n} from \"./DbtDocsCollaborationProvider\";\nimport { ConversationGroup } from \"./conversations/context/types\";\n\nconst NewConversationForm = () => {\n const usersList = useDbtDocsCollaborationSelector(\n (state) => state.users,\n ) as Record<string, User>;\n const newConversation = useDbtDocsCollaborationSelector(\n (state) => state.newConversation,\n ) as DbtDocsState[\"newConversation\"];\n const currentUser = useDbtDocsCollaborationSelector((state) =>\n state.currentUserId ? state.users[state.currentUserId] : null,\n ) as User | null;\n\n const shareId = useDbtDocsCollaborationSelector(\n (state) => state.shareId,\n ) as DbtDocsState[\"shareId\"];\n const dispatch = useDbtDocsCollaborationDispatch();\n\n const [loading, setLoading] = useState(false);\n const [comment, setComment] = useState(\"\");\n\n const handleSubmit = async (e?: FormEvent) => {\n e?.stopPropagation();\n e?.preventDefault();\n\n if (!newConversation || !shareId) {\n return;\n }\n\n setLoading(true);\n try {\n console.log(\"saving conversation\", newConversation, comment);\n const createGroupResponse = await createNewConversationGroup(\n shareId,\n {\n ...newConversation,\n message: comment,\n },\n \"dbt-docs\", // this component is used only from dbt docs page\n );\n if (!createGroupResponse.conversation_group_id) {\n console.error(\n \"Unable to create conversation group\",\n createGroupResponse,\n );\n return;\n }\n console.log(\n \"Successfully created conversation group\",\n createGroupResponse,\n );\n } catch (err) {\n console.error(\"error while saving conversation\", newConversation, err);\n }\n dispatch(refetchConversations());\n setLoading(false);\n dispatch(updateRightPanelState(true));\n dispatch(resetNewConversation());\n setComment(\"\");\n };\n\n return (\n <Card className={classes.newConversationForm}>\n <CardContent className=\"al-pt-4\">\n <form onSubmit={handleSubmit}>\n <h4>Add comment</h4>\n <ConversationHighlightText\n meta={newConversation?.meta || ({} as ConversationGroup[\"meta\"])}\n />\n <ConversationInputForm\n comment={comment}\n setComment={setComment}\n loading={loading}\n users={Object.values(usersList)}\n currentUser={currentUser}\n placeholder=\"Start a conversation or add others with @\"\n onEnterKeypress={handleSubmit}\n />\n </form>\n </CardContent>\n </Card>\n );\n};\n\nexport default NewConversationForm;\n","import { IconButton } from \"@altimateai/lego\";\nimport { CheckNoOutlineIcon } from \"../../../../assets/icons\";\nimport classes from \"../../details/styles.module.scss\";\nimport { useState } from \"react\";\nimport { resolveConversationGroup as resolveConversationGroupApi } from \"../../api\";\nimport { DbtDocsShareDetails } from \"../types\";\nimport { ConversationGroup } from \"./context/types\";\nimport { useConversationGroupContext } from \"./context/ConversationsProvider\";\n\nconst ResolveButton = ({\n conversationGroupId,\n shareId,\n}: {\n conversationGroupId?: ConversationGroup[\"conversation_group_id\"];\n shareId: DbtDocsShareDetails[\"share_id\"];\n}) => {\n const { onResolve, source } = useConversationGroupContext();\n const [loading, setLoading] = useState(false);\n const handleClick = async () => {\n if (!conversationGroupId) {\n return;\n }\n setLoading(true);\n await resolveConversationGroupApi(shareId, conversationGroupId, source);\n onResolve();\n setLoading(false);\n };\n if (!conversationGroupId) {\n return null;\n }\n return (\n <IconButton\n disabled={loading}\n className={classes.resolveButton}\n title=\"Resolve conversation\"\n onClick={handleClick}\n >\n <CheckNoOutlineIcon />\n </IconButton>\n );\n};\n\nexport default ResolveButton;\n","import dayjs from \"dayjs\";\nimport { CardTitle } from \"@altimateai/lego\";\nimport ProfileImageByUser from \"../../../user/ProfileImageByUser\";\nimport { User } from \"../../../user/types\";\nimport ResolveButton from \"./ResolveButton\";\nimport { ConversationGroup } from \"./context/types\";\nimport { DbtDocsShareDetails } from \"../types\";\nimport { Stack } from \"@altimateai/lego\";\n\ninterface Props {\n user?: User;\n timestamp: string;\n showResolveButton?: boolean;\n shareId: DbtDocsShareDetails[\"share_id\"];\n conversationGroupId?: ConversationGroup[\"conversation_group_id\"];\n}\nconst ConversationHeader = ({\n user,\n timestamp,\n showResolveButton,\n conversationGroupId,\n shareId,\n}: Props) => {\n return (\n <CardTitle>\n <Stack align=\"center\" justify=\"between\" className=\"mb-0\">\n <Stack align=\"center\">\n <ProfileImageByUser user={user} />\n <h4>\n {user?.first_name} {user?.last_name}\n </h4>\n <span>{dayjs(timestamp).format(\"HH:mm, DD MMM YY\")}</span>\n </Stack>\n {showResolveButton ? (\n <ResolveButton\n conversationGroupId={conversationGroupId}\n shareId={shareId}\n />\n ) : null}\n </Stack>\n </CardTitle>\n );\n};\n\nexport default ConversationHeader;\n","import { Card, CardContent } from \"@altimateai/lego\";\nimport { useConversationGroupContext } from \"./context/ConversationsProvider\";\nimport ConversationHeader from \"./ConversationHeader\";\nimport { Conversation } from \"./context/types\";\nimport { DbtDocsShareDetails } from \"../types\";\nimport { useMemo } from \"react\";\n\ninterface Props {\n conversation: Conversation;\n shareId: DbtDocsShareDetails[\"share_id\"];\n}\nconst ConversationComponent = ({ conversation, shareId }: Props) => {\n const { users } = useConversationGroupContext();\n const user = useMemo(() => {\n if (!conversation?.user_id) {\n return;\n }\n\n return users[conversation.user_id];\n }, [conversation.user_id, users]);\n\n return (\n <Card>\n <ConversationHeader\n user={user}\n timestamp={conversation.timestamp}\n shareId={shareId}\n />\n <CardContent>\n <p>{conversation.message.replace(/@\\[(.*?)\\]\\((.*?)\\)/g, \"@$2\")}</p>\n </CardContent>\n </Card>\n );\n};\n\nexport default ConversationComponent;\n","import { FormEvent, useState } from \"react\";\nimport { addConversationToGroup } from \"../../api/index\";\nimport { useConversationGroupContext } from \"./context/ConversationsProvider\";\nimport classes from \"../../details/styles.module.scss\";\nimport ConversationInputForm from \"../ConversationInputForm\";\nimport { ConversationGroup } from \"./context/types\";\nimport { DbtDocsShareDetails } from \"../types\";\n\ninterface Props {\n conversationGroupId: ConversationGroup[\"conversation_group_id\"];\n shareId: DbtDocsShareDetails[\"share_id\"];\n}\n\nconst ConversationReplyForm = ({ conversationGroupId, shareId }: Props) => {\n const { currentUser, users, onReplyAdd, source } = useConversationGroupContext();\n const usersList = Object.values(users);\n const [replyText, setReplyText] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n\n const submitReply = async (e?: FormEvent) => {\n e?.stopPropagation();\n e?.preventDefault();\n\n if (!shareId || !conversationGroupId) {\n return;\n }\n setIsLoading(true);\n console.log(\"saving reply\", shareId, conversationGroupId, {\n message: replyText,\n });\n try {\n await addConversationToGroup(\n shareId,\n conversationGroupId,\n {\n message: replyText,\n },\n source\n );\n onReplyAdd();\n } catch (err) {\n console.error(\"error while saving reply\", err);\n }\n\n setIsLoading(false);\n setReplyText(\"\");\n };\n\n return (\n <div className={classes.replyForm}>\n <form onSubmit={submitReply} className=\"\">\n <ConversationInputForm\n comment={replyText}\n setComment={setReplyText}\n loading={isLoading}\n users={Object.values(usersList)}\n currentUser={currentUser || null}\n onEnterKeypress={submitReply}\n />\n </form>\n </div>\n );\n};\n\nexport default ConversationReplyForm;\n","import { useCallback, useMemo, useState } from \"react\";\nimport { Card, CardContent } from \"@altimateai/lego\";\nimport { ConversationGroup } from \"./context/types\";\nimport Conversation from \"./Conversation\";\nimport ConversationHeader from \"./ConversationHeader\";\nimport ConversationReplyForm from \"./ConversationReplyForm\";\nimport classes from \"../../details/styles.module.scss\";\nimport ConversationHighlightText from \"./ConversationHighlightText\";\nimport { useConversationGroupContext } from \"./context/ConversationsProvider\";\nimport { DbtDocsShareDetails } from \"../types\";\nimport { Button } from \"@altimateai/lego\";\n\ninterface Props {\n conversationGroup: ConversationGroup;\n shareId: DbtDocsShareDetails[\"share_id\"];\n onSelect: () => void;\n}\n\nconst ConversationGroupComponent = ({\n conversationGroup,\n shareId,\n onSelect,\n}: Props) => {\n const { users } = useConversationGroupContext();\n const user = useMemo(() => {\n if (!conversationGroup.owner) {\n return;\n }\n\n return users[conversationGroup.owner];\n }, [conversationGroup.owner, users]);\n\n // const codeblockLoaded = useConversationGroupSelector(\n // (state) => state.codeblockLoaded\n // ) as boolean | undefined;\n\n const { isSelected } = useConversationGroupContext();\n const [showReplies, setShowReplies] = useState(false);\n\n const onRender = useCallback(\n (node: HTMLElement | null) => {\n if (!isSelected || !node) {\n return;\n }\n\n console.log(\n \"ConversationGroupComponent scrolling\",\n conversationGroup.conversation_group_id,\n );\n setTimeout(() => {\n (node as unknown as HTMLElement).scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n });\n // adding this timeout of 500ms to wait for ConversationHighlighter to complete scrolling\n }, 1000);\n },\n [conversationGroup.conversation_group_id, isSelected],\n );\n\n if (\n !conversationGroup?.conversations?.length ||\n conversationGroup?.status !== \"Pending\"\n ) {\n return null;\n }\n\n const [first, ...rest] = conversationGroup.conversations;\n const replyButtonText = rest.length\n ? rest.length > 1\n ? `${rest.length} replies`\n : `${rest.length} reply`\n : \"Reply\";\n\n return (\n <div ref={onRender} className={classes.conversationGroup}>\n <Card className={`${isSelected ? \"active\" : \"\"}`} onClick={onSelect}>\n <ConversationHeader\n user={user}\n timestamp={first.timestamp}\n showResolveButton\n conversationGroupId={conversationGroup.conversation_group_id}\n shareId={shareId}\n />\n <CardContent>\n <ConversationHighlightText meta={conversationGroup.meta} />\n <p>{first.message.replace(/@\\[(.*?)\\]\\((.*?)\\)/g, \"@$2\")}</p>\n <Button\n onClick={() => setShowReplies((prev) => !prev)}\n variant=\"link\"\n >\n {replyButtonText}\n </Button>\n {rest.length ? (\n <>\n {showReplies ? (\n <>\n {rest.map((c) => (\n <Conversation\n key={c.conversation_id}\n conversation={c}\n shareId={shareId}\n />\n ))}\n </>\n ) : null}\n </>\n ) : null}\n {showReplies ? (\n <ConversationReplyForm\n conversationGroupId={conversationGroup.conversation_group_id}\n shareId={shareId}\n />\n ) : null}\n </CardContent>\n </Card>\n </div>\n );\n};\n\nexport default ConversationGroupComponent;\n","import { createContext, useMemo, useContext } from \"react\";\nimport { ConversationGroup, ConversationSources } from \"./types\";\nimport ConversationGroupComponent from \"../ConversationGroup\";\nimport { User } from \"../../../../user/types\";\nimport { DbtDocsShareDetails } from \"../../types\";\n\ninterface Props {\n currentUser?: User;\n conversationGroup?: ConversationGroup;\n shareId?: DbtDocsShareDetails[\"share_id\"];\n isSelected: boolean;\n users: Record<User[\"id\"], User>;\n onSelect: () => void;\n onResolve: () => void;\n onReplyAdd: () => void;\n source: ConversationSources;\n}\n\nconst ConversationGroupContext = createContext<Props>({\n users: {},\n conversationGroup: undefined,\n currentUser: undefined,\n isSelected: false,\n shareId: undefined,\n onSelect: () => null,\n onResolve: () => null,\n onReplyAdd: () => null,\n source: ConversationSources.DBT_DOCS,\n});\n\nconst ConversationGroupProvider = ({\n currentUser,\n conversationGroup,\n shareId,\n onSelect,\n isSelected,\n users,\n onResolve,\n onReplyAdd,\n source,\n}: Props): JSX.Element | null => {\n const values = useMemo(\n () => ({\n currentUser,\n conversationGroup,\n shareId,\n onSelect,\n isSelected,\n users,\n onResolve,\n onReplyAdd,\n source,\n }),\n [\n currentUser,\n conversationGroup,\n shareId,\n onSelect,\n isSelected,\n users,\n onResolve,\n onReplyAdd,\n source,\n ]\n );\n\n if (!conversationGroup || !shareId) {\n return null;\n }\n\n return (\n <ConversationGroupContext.Provider value={values}>\n <ConversationGroupComponent\n conversationGroup={conversationGroup}\n shareId={shareId}\n onSelect={onSelect}\n />\n </ConversationGroupContext.Provider>\n );\n};\n\nexport default ConversationGroupProvider;\n\nexport const useConversationGroupContext = () => useContext(ConversationGroupContext);\n","import { User } from \"../../../user/types\";\nimport {\n useDbtDocsCollaborationDispatch,\n useDbtDocsCollaborationSelector,\n} from \"../DbtDocsCollaborationProvider\";\nimport {\n DbtDocsState,\n refetchConversations,\n resolveConversationGroup,\n updateSelectedConversationId,\n} from \"../DbtDocsReducer\";\nimport ConversationGroupProvider from \"./context/ConversationsProvider\";\nimport { ConversationGroup } from \"./context/types\";\n\nconst ConversationGroups = () => {\n const source = useDbtDocsCollaborationSelector(state => state.source) as DbtDocsState[\"source\"];\n const conversationGroups = useDbtDocsCollaborationSelector(\n state => state.conversations\n ) as DbtDocsState[\"conversations\"];\n const selectedConversationId = useDbtDocsCollaborationSelector(\n state => state.selectedConversationId\n ) as DbtDocsState[\"selectedConversationId\"];\n const shareId = useDbtDocsCollaborationSelector(\n state => state.shareId\n ) as DbtDocsState[\"shareId\"];\n\n const users = useDbtDocsCollaborationSelector(state => state.users) as Record<number, User>;\n const currentUserId = useDbtDocsCollaborationSelector(state => state.currentUserId) as User[\"id\"];\n\n const dispatch = useDbtDocsCollaborationDispatch();\n\n if (!currentUserId || !shareId) {\n return null;\n }\n\n const user = users[currentUserId];\n\n const onResolve = (conversationGroupId: ConversationGroup[\"conversation_group_id\"]) => {\n dispatch(resolveConversationGroup({ shareId, conversationGroupId }));\n };\n const onSelect = (conversationGroupId: ConversationGroup[\"conversation_group_id\"]) => {\n dispatch(updateSelectedConversationId(conversationGroupId));\n };\n\n const onReplyAdd = (conversationGroupId: ConversationGroup[\"conversation_group_id\"]) => {\n console.log(\"onReplyAdd\", conversationGroupId);\n dispatch(refetchConversations());\n };\n\n if (!conversationGroups || !Object.keys(conversationGroups).length) {\n return <div>No conversations yet!</div>;\n }\n\n return (\n <div>\n {Object.values(conversationGroups).map(conversationGroup => (\n <ConversationGroupProvider\n key={conversationGroup.conversation_group_id}\n conversationGroup={conversationGroup}\n shareId={shareId as unknown as number}\n isSelected={selectedConversationId === conversationGroup.conversation_group_id}\n currentUser={user}\n onResolve={() => onResolve(conversationGroup.conversation_group_id)}\n onSelect={() => onSelect(conversationGroup.conversation_group_id)}\n users={users}\n onReplyAdd={() => onReplyAdd(conversationGroup.conversation_group_id)}\n source={source}\n />\n ))}\n </div>\n );\n};\n\nexport default ConversationGroups;\n","import classes from \"../details/styles.module.scss\";\nimport NewConversationForm from \"./NewConversationForm\";\nimport ConversationGroups from \"./conversations/ConversationGroups\";\nimport { Button } from \"@altimateai/lego\";\nimport {\n resetNewConversation,\n updateRightPanelState,\n updateSelectedConversationId,\n} from \"./DbtDocsReducer\";\nimport {\n useDbtDocsCollaborationDispatch,\n useDbtDocsCollaborationSelector,\n} from \"./DbtDocsCollaborationProvider\";\nimport { CloseIcon } from \"../../../assets/icons\";\n\nconst DbtDocsConversationsRightPanel = () => {\n const isRightPanelOpen = useDbtDocsCollaborationSelector(\n (state) => state.isRightPanelOpen,\n );\n const selectedConversationId = useDbtDocsCollaborationSelector(\n (state) => state.selectedConversationId,\n ) as string | undefined;\n const newConversation = useDbtDocsCollaborationSelector(\n (state) => state.newConversation,\n );\n const dispatch = useDbtDocsCollaborationDispatch();\n\n const handleClose = () => {\n dispatch(updateRightPanelState(false));\n dispatch(updateSelectedConversationId(undefined));\n\n dispatch(resetNewConversation());\n };\n const isOpen =\n !!newConversation || isRightPanelOpen || selectedConversationId;\n if (!isOpen) {\n return null;\n }\n\n return (\n <>\n <Button\n variant=\"ghost\"\n onClick={handleClose}\n className={classes.conversationRightPanelCloseButton}\n >\n <CloseIcon />\n </Button>\n\n <div className={classes.conversationRightPanel}>\n <h3>Comments</h3>\n {newConversation ? <NewConversationForm /> : <ConversationGroups />}\n </div>\n </>\n );\n};\n\nexport default DbtDocsConversationsRightPanel;\n","import { useCallback, useEffect, useRef } from \"react\";\nimport { getConversationsByShareId } from \"../../api/index\";\nimport { DbtDocsState, setConversations, setConversationsLoadingState } from \"../DbtDocsReducer\";\nimport { DbtDocsShareDetails, LoadingState } from \"../types\";\nimport { ConversationGroup } from \"./context/types\";\nimport {\n useDbtDocsCollaborationDispatch,\n useDbtDocsCollaborationSelector,\n} from \"../DbtDocsCollaborationProvider\";\n\nconst PollingInterval = 10;\nconst useConversations = () => {\n const timer = useRef<NodeJS.Timeout | undefined>();\n const shareId = useDbtDocsCollaborationSelector(\n state => state.shareId\n ) as DbtDocsState[\"shareId\"];\n const loadingState = useDbtDocsCollaborationSelector(\n state => state.conversationsLoadingState\n ) as LoadingState;\n const dispatch = useDbtDocsCollaborationDispatch();\n const conversations = useDbtDocsCollaborationSelector(state =>\n Object.keys(state.conversations || {})\n ) as ConversationGroup[\"conversation_group_id\"][];\n\n const fetchConversations = useCallback(\n (shareId: DbtDocsShareDetails[\"share_id\"]) => {\n clearTimeout(timer.current);\n getConversationsByShareId(shareId)\n .then(data => {\n console.log(\"useConversations\", data);\n dispatch(setConversations(data?.dbt_docs_share_conversations));\n timer.current = setTimeout(() => {\n fetchConversations(shareId);\n }, PollingInterval * 1000);\n })\n .catch(err => console.error(\"error while fetching conversations list\", err))\n .finally(() => {\n dispatch(setConversationsLoadingState(LoadingState.INITIALIZED));\n });\n },\n [dispatch]\n );\n\n useEffect(() => {\n if (loadingState !== LoadingState.UNINITIALIZED || !shareId) {\n return;\n }\n dispatch(setConversationsLoadingState(LoadingState.LOADING));\n fetchConversations(shareId);\n }, [dispatch, loadingState, conversations, shareId, fetchConversations]);\n\n return { isLoading: loadingState === LoadingState.LOADING };\n};\n\nexport default useConversations;\n","import { useEffect, useState } from \"react\";\nimport { User } from \"../../user/types\";\nimport { getUserList } from \"../api/index\";\nimport { setUsers } from \"./DbtDocsReducer\";\nimport {\n useDbtDocsCollaborationDispatch,\n useDbtDocsCollaborationSelector,\n} from \"./DbtDocsCollaborationProvider\";\nimport { LoadingState } from \"./types\";\n\nconst useConversationUsers = () => {\n const dispatch = useDbtDocsCollaborationDispatch();\n const users = useDbtDocsCollaborationSelector(state =>\n Object.keys(state.users || {})\n ) as User[\"id\"][];\n\n const [loadingState, setLoadingState] = useState(LoadingState.UNINITIALIZED);\n\n useEffect(() => {\n if (loadingState !== LoadingState.UNINITIALIZED || Object.keys(users).length) {\n return;\n }\n setLoadingState(LoadingState.LOADING);\n getUserList()\n .then(data => {\n console.log(\"useConversationUsers\", data);\n dispatch(setUsers(data));\n })\n .catch(err => console.error(\"error while fetching users list\", err))\n .finally(() => {\n setLoadingState(LoadingState.INITIALIZED);\n });\n }, [dispatch, loadingState, users]);\n\n return { isLoading: loadingState === LoadingState.LOADING };\n};\n\nexport default useConversationUsers;\n","// import DbtDocsCodeblock from \"./DbtDocsCodeblock\";\nimport ConversationsHighlighter from \"./ConversationsHighlighter\";\nimport DbtDocsConversationsRightPanel from \"./DbtDocsConversationsRightPanel\";\nimport useConversations from \"./conversations/useConversations\";\nimport useConversationUsers from \"./useConversationUsers\";\n\nconst DbtDocsCollaborationComponents = () => {\n useConversationUsers();\n useConversations();\n\n return (\n <div>\n <DbtDocsConversationsRightPanel />\n <ConversationsHighlighter />\n </div>\n );\n};\n\nexport default DbtDocsCollaborationComponents;\n","import { AddIcon } from \"../../../assets/icons\";\nimport { ButtonProps, IconButton } from \"@altimateai/lego\";\nimport classes from \"../details/styles.module.scss\";\nimport { createPortal } from \"react-dom\";\n\ntype Props = ButtonProps & {\n target: HTMLElement;\n};\nconst HotspotButton = ({ target, ...rest }: Props) => {\n return createPortal(\n <IconButton\n className={classes.hotspotButton}\n title=\"Click to start conversation\"\n {...rest}\n >\n <AddIcon />\n </IconButton>,\n target,\n );\n};\n\nexport default HotspotButton;\n","import { useCallback, useEffect, useState } from \"react\";\nimport {\n useDbtDocsCollaborationSelector,\n useDbtDocsCollaborationDispatch,\n} from \"../collaboration/DbtDocsCollaborationProvider\";\nimport HotspotButton from \"../collaboration/HotspotButton\";\nimport {\n getCodeBlockElementInPage,\n getModelPartsFromLocationHash,\n} from \"../collaboration/highlightUtils\";\nimport { Manifest, updateNewConversation } from \"../collaboration/DbtDocsReducer\";\nimport { ConversationGroup } from \"../collaboration/conversations/context/types\";\n\nconst AddCommentOnCodeButton = () => {\n const dispatch = useDbtDocsCollaborationDispatch();\n const codeBlockUpdated = useDbtDocsCollaborationSelector(\n state => state.codeblockLoaded\n ) as boolean;\n const manifest = useDbtDocsCollaborationSelector(state => state.manifest) as Manifest;\n const [lineNumber, setLineNumber] = useState(0);\n const codeElement = getCodeBlockElementInPage()?.parentElement;\n\n const handleClick = () => {\n if (!codeElement || !manifest.nodes) {\n return;\n }\n const modelParts = getModelPartsFromLocationHash();\n if (!modelParts || modelParts.length < 3) {\n console.error(\"Unable to find model parts\", modelParts);\n return;\n }\n const code = manifest.nodes[modelParts[2]]?.raw_code;\n const data = {\n highlight: code.split(\"\\n\")[lineNumber],\n range: {\n end: { line: lineNumber, character: 0 },\n start: { line: lineNumber, character: 0 },\n },\n } as unknown as ConversationGroup[\"meta\"];\n\n dispatch(updateNewConversation({ meta: data }));\n };\n\n const onMouseMove = useCallback(\n (e: MouseEvent) => {\n if (!codeElement) {\n return;\n }\n const endY = e.y;\n const lineNumbers = codeElement.querySelectorAll(`.line-numbers-rows > span`);\n const end = Array.from(lineNumbers).findIndex(node => {\n const { height, y } = node.getBoundingClientRect();\n return endY >= y && endY <= y + height;\n });\n setLineNumber(end);\n },\n [codeElement]\n );\n\n useEffect(() => {\n if (!codeBlockUpdated || !codeElement) {\n return;\n }\n\n codeElement.addEventListener(\"mousemove\", onMouseMove);\n\n return () => {\n codeElement.removeEventListener(\"mousemove\", onMouseMove);\n };\n }, [codeBlockUpdated, codeElement, onMouseMove]);\n\n if (!codeBlockUpdated || !codeElement) {\n return null;\n }\n return (\n <HotspotButton target={codeElement} onClick={handleClick} style={{ top: lineNumber * 21.2 }} />\n );\n};\n\nexport default AddCommentOnCodeButton;\n","import { updateNewConversation } from \"../collaboration/DbtDocsReducer\";\nimport {\n useDbtDocsCollaborationSelector,\n useDbtDocsCollaborationDispatch,\n} from \"../collaboration/DbtDocsCollaborationProvider\";\nimport HotspotButton from \"../collaboration/HotspotButton\";\nimport { getModelDescriptionElement } from \"../collaboration/highlightUtils\";\nimport { ConversationGroup } from \"../collaboration/conversations/context/types\";\n\nconst AddCommentOnModelDescriptionButton = () => {\n const dispatch = useDbtDocsCollaborationDispatch();\n const codeBlockUpdated = useDbtDocsCollaborationSelector(\n state => state.codeblockLoaded\n ) as boolean;\n const descriptionElement = getModelDescriptionElement();\n\n const handleClick = () => {\n const data = {\n field: \"description\",\n highlight: descriptionElement?.innerText,\n } as unknown as ConversationGroup[\"meta\"];\n\n dispatch(updateNewConversation({ meta: data }));\n };\n\n if (!codeBlockUpdated || !descriptionElement) {\n return null;\n }\n return <HotspotButton target={descriptionElement} onClick={handleClick} />;\n};\n\nexport default AddCommentOnModelDescriptionButton;\n","import AddCommentOnCodeButton from \"./AddCommentOnCodeButton\";\nimport AddCommentOnModelDescriptionButton from \"./AddCommentOnModelDescriptionButton\";\n\nconst AddCommentButton = () => {\n return (\n <>\n <AddCommentOnModelDescriptionButton />\n <AddCommentOnCodeButton />\n </>\n );\n};\n\nexport default AddCommentButton;\n","import { MouseEvent, lazy } from \"react\";\nimport { updateNewConversation } from \"../collaboration/DbtDocsReducer\";\nimport HighlightAnchor from \"../collaboration/HighlightAnchor\";\nimport ShowConversationsButton from \"../collaboration/ShowConversationsButton\";\nimport useDbtDocsCollaboration from \"../collaboration/useDbtDocsCollaboration\";\nimport useHighlight from \"../collaboration/useHighlight\";\nimport DbtDocsCollaborationComponents from \"../collaboration/DbtDocsCollaborationComponents\";\nimport AddCommentButton from \"./AddCommentButton\";\nimport { useDbtDocsCollaborationDispatch } from \"../collaboration/DbtDocsCollaborationProvider\";\nimport { Stack } from \"@altimateai/lego\";\n\nconst DbtDocsRenderer = lazy(() => import(\"./DbtDocsRenderer\"));\n\nconst DbtDocsDetails = () => {\n const { loading, shareDetails } = useDbtDocsCollaboration();\n const dispatch = useDbtDocsCollaborationDispatch();\n const { getHighlightedSelectionData, pos, onSelectionEnd } = useHighlight();\n const onAddComment = (e: MouseEvent) => {\n e.stopPropagation();\n const data = getHighlightedSelectionData();\n if (data) {\n dispatch(updateNewConversation(data));\n }\n };\n\n if (loading) {\n return <div>Loading...</div>;\n }\n\n if (!shareDetails?.catalog_presigned_url || !shareDetails?.manifest_presigned_url) {\n return <div>Unable to load required artifacts. Please try again.</div>;\n }\n return (\n <div>\n <Stack direction=\"row\" justify=\"end\" className=\"mb-2\">\n <AddCommentButton />\n <ShowConversationsButton />\n </Stack>\n <DbtDocsCollaborationComponents />\n <DbtDocsRenderer shareDetails={shareDetails} onSelectionEnd={onSelectionEnd} />\n {pos ? <HighlightAnchor pos={pos} onAddComment={onAddComment} /> : null}\n </div>\n );\n};\n\nexport default DbtDocsDetails;\n","import { ConversationSources } from \"../collaboration/conversations/context/types\";\nimport DbtDocsCollaborationProvider from \"../collaboration/DbtDocsCollaborationProvider\";\nimport DbtDocsDetails from \"./DbtDocsDetails\";\n\nexport interface Props {\n shareId: number;\n userId?: number;\n conversationGroupId?: number;\n source: ConversationSources;\n}\n\nconst DbtDocs = ({ shareId, userId, conversationGroupId, source }: Props) => {\n return (\n <div className=\"altimate-component\">\n <DbtDocsCollaborationProvider\n shareId={shareId}\n userId={userId}\n conversationGroupId={conversationGroupId}\n source={source}\n >\n <DbtDocsDetails />\n </DbtDocsCollaborationProvider>\n </div>\n );\n};\n\nexport default DbtDocs;\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { TeamMateState } from \"./types\";\n\nexport const initialState: TeamMateState = {\n showCoachingForm: false,\n};\n\nconst teamMateSlice = createSlice({\n name: \"teamMate\",\n initialState,\n reducers: {\n setShowCoachingForm: (state, action: PayloadAction<TeamMateState[\"showCoachingForm\"]>) => {\n state.showCoachingForm = action.payload;\n },\n },\n});\n\nexport const TeammateActions = teamMateSlice.actions;\nexport default teamMateSlice;\n","import { createContext, ReactNode, useMemo, useReducer } from \"react\";\nimport teamMateSlice, { initialState } from \"./teamMateSlice\";\nimport { TeamMateContextProps } from \"./types\";\n\nexport const TeamMateContext = createContext<TeamMateContextProps>({\n state: initialState,\n dispatch: () => null,\n});\n\nconst TeamMateProvider = ({ children }: { children: ReactNode }): JSX.Element => {\n const [state, dispatch] = useReducer(teamMateSlice.reducer, teamMateSlice.getInitialState());\n\n const values = useMemo(\n () => ({\n state,\n dispatch,\n }),\n [state, dispatch]\n );\n\n return <TeamMateContext.Provider value={values}>{children}</TeamMateContext.Provider>;\n};\n\nexport default TeamMateProvider;\n","import { Stack, LoadingButton } from \"@altimateai/lego\";\nimport { useEffect } from \"react\";\nimport { ApiHelper, useMutation } from \"../api/index\";\nimport { CoachAiResponse, TaskLabels } from \"./types\";\nimport { CoachFormValues, coachFormSchema } from \"./AddLearningForm\";\nimport { Button, Textarea } from \"@altimateai/lego\";\nimport { useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\n\nconst CoachFormInput = ({\n taskLabel,\n onSuccess,\n onCancel,\n}: {\n taskLabel: keyof typeof TaskLabels;\n onSuccess: (data: CoachAiResponse) => void;\n onCancel: () => void;\n}) => {\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting },\n setError,\n } = useForm<CoachFormValues>({\n resolver: zodResolver(coachFormSchema),\n defaultValues: {\n content: \"\",\n },\n });\n\n const { mutate, error, loading } = useMutation<CoachFormValues, CoachAiResponse>({\n queryFn: async (values: CoachFormValues) => {\n return await ApiHelper.post<CoachAiResponse>(`coach/training`, {\n ...values,\n taskLabel,\n });\n },\n onSuccess: (data: CoachAiResponse) => {\n onSuccess(data);\n },\n });\n\n useEffect(() => {\n if (error?.message) {\n setError(\"content\", { message: error.message });\n }\n }, [error, setError]);\n\n const onSubmit = (values: CoachFormValues) => {\n mutate(values);\n };\n\n return (\n <form onSubmit={handleSubmit(onSubmit)}>\n <div className=\"al-space-y-2\">\n <Textarea {...register(\"content\")} className={errors.content ? \"al-border-red-500\" : \"\"} />\n {errors.content && (\n <p className=\"al-text-sm al-font-medium al-text-destructive\">{errors.content.message}</p>\n )}\n </div>\n <Stack justify=\"end\" className=\"mt-2\">\n <Button variant=\"outline\" onClick={onCancel} type=\"button\">\n Cancel\n </Button>\n <LoadingButton loading={loading || isSubmitting} type=\"submit\">\n Coach AI\n </LoadingButton>\n </Stack>\n </form>\n );\n};\n\nexport default CoachFormInput;\n","import { LoadingButton, Stack } from \"@altimateai/lego\";\nimport { Card, CardContent, CardFooter, Alert, Textarea } from \"@altimateai/lego\";\nimport { z } from \"zod\";\nimport { ApiHelper, useMutation } from \"../api/index\";\nimport { CoachAiConfirmationResponse, CoachAiResponse } from \"./types\";\nimport { useState } from \"react\";\nimport CoachFormInput from \"./CoachFormInput\";\nimport { CoachFormProps } from \"./CoachForm\";\nimport { Button } from \"@altimateai/lego\";\n\nexport const coachFormSchema = z.object({\n content: z\n .string()\n .min(10, { message: \"Feedback must be at least 10 characters\" })\n .max(500, { message: \"Feedback must not exceed 500 characters\" })\n .min(1, { message: \"Feedback is required\" }),\n});\n\nexport type CoachFormValues = z.infer<typeof coachFormSchema>;\n\nconst AddLearningForm = ({ taskLabel, context, onClose, extra = {} }: CoachFormProps) => {\n const [coachAiResponse, setCoachAiResponse] = useState<CoachAiResponse>();\n const [aiLearningEditable, setAiLearningEditable] = useState(false);\n\n const onSuccess = (data: CoachAiResponse) => {\n setCoachAiResponse(data);\n };\n\n const makeAiLearningEditable = () => {\n setAiLearningEditable(true);\n };\n\n const makeAiLearningNonEditable = () => {\n setAiLearningEditable(false);\n };\n\n const saveAiLearning = async (): Promise<CoachAiConfirmationResponse> => {\n if (!coachAiResponse) throw new Error(\"No AI response to save\");\n makeAiLearningNonEditable();\n return await ApiHelper.post<CoachAiConfirmationResponse>(`coach/training/confirm`, {\n content: coachAiResponse.ai_response,\n category: coachAiResponse.category,\n taskLabel: taskLabel,\n personalizationScope: coachAiResponse.personalizationScope,\n metadata: context,\n ...extra,\n });\n };\n\n const {\n mutate,\n error,\n loading: isSaving,\n data,\n } = useMutation<void, CoachAiConfirmationResponse>({\n queryFn: saveAiLearning,\n onSuccess: () => {\n setAiLearningEditable(false);\n },\n });\n\n const handleSave = () => {\n mutate();\n };\n\n if (data?.frontend_url) {\n return (\n <Alert>\n Thank you for coaching Datapilot. Click the link to{\" \"}\n <a\n className=\"al-underline al-font-medium\"\n href={`${data.frontend_url}/teammates/${taskLabel}?learning=${data.train_doc_uid}`}\n >\n View learnings\n </a>\n </Alert>\n );\n }\n\n return (\n <Stack direction=\"column\">\n <p className=\"m-0\">\n Here, you can provide instructions in natural language including your terminology, rules or\n conventions to improve the quality of responses\n </p>\n <CoachFormInput taskLabel={taskLabel} onSuccess={onSuccess} onCancel={onClose} />\n {coachAiResponse && (\n <Card className=\"mt-4\">\n <CardContent className=\"al-pt-4\">\n <p>Below are the learnings by AI based on the entered instructions:</p>\n <div>\n {aiLearningEditable ? (\n <Textarea\n value={coachAiResponse.ai_response}\n onChange={e => {\n setCoachAiResponse({\n ...coachAiResponse,\n ai_response: e.target.value,\n });\n }}\n className=\"al-min-h-[100px]\"\n />\n ) : (\n coachAiResponse.ai_response\n )}\n </div>\n {error && <div className=\"al-mt-4 al-text-destructive\">{error.message}</div>}\n </CardContent>\n <CardFooter className=\"border-0\">\n <Stack direction=\"row\" justify=\"end\" gap=\"md\">\n {!aiLearningEditable ? (\n <Button variant=\"secondary\" onClick={makeAiLearningEditable}>\n Edit\n </Button>\n ) : (\n <Button variant=\"outline\" onClick={makeAiLearningNonEditable}>\n Cancel\n </Button>\n )}\n <LoadingButton loading={isSaving} onClick={handleSave} color=\"primary\">\n Save\n </LoadingButton>\n </Stack>\n </CardFooter>\n </Card>\n )}\n </Stack>\n );\n};\n\nexport default AddLearningForm;\n","import * as React from \"react\";\nconst SvgNoLearnings = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={131} height={131} fill=\"none\" viewBox=\"0 0 131 131\" {...props}><path fill=\"#EAEEF9\" d=\"M65 130c35.899 0 65-29.101 65-65S100.899 0 65 0 0 29.102 0 65c0 35.899 29.102 65 65 65\" /><mask id=\"noLearnings_svg__a\" width={132} height={132} x={-1} y={-1} maskUnits=\"userSpaceOnUse\" style={{\n maskType: \"alpha\"\n }}><path fill=\"#F1F3F9\" stroke=\"#D6DCE8\" strokeMiterlimit={10} strokeWidth={2} d=\"M65 130c35.899 0 65-29.101 65-65S100.899 0 65 0 0 29.102 0 65c0 35.899 29.102 65 65 65Z\" /></mask><g mask=\"url(#noLearnings_svg__a)\"><g filter=\"url(#noLearnings_svg__b)\"><path fill=\"url(#noLearnings_svg__c)\" d=\"m110.116 47.378 1.17 78.192c0 2.575-2.107 4.682-4.916 4.682H30.051c-2.575 0-4.916-2.107-4.916-4.682V25.138c0-2.575 2.107-4.682 4.916-4.682h55.25z\" /></g><path fill=\"#D5DDEA\" d=\"M85.3 20.456v21.538c0 3.043 2.576 5.384 5.62 5.384h19.196\" /></g><path fill=\"#989FB0\" d=\"m119.221 27.592 1.443-.641a.5.5 0 0 0 0-.961l-1.443-.641a8.13 8.13 0 0 1-4.006-4.006l-.64-1.442a.501.501 0 0 0-.962 0l-.641 1.442a8.12 8.12 0 0 1-4.006 4.006l-1.442.64a.5.5 0 0 0 0 .962l1.442.641a8.12 8.12 0 0 1 4.006 4.006l.641 1.442c.16.48.801.48.962 0l.64-1.442c.641-1.763 2.084-3.205 4.006-4.006M103.678 18.459l.962-.481c.32-.16.32-.481 0-.641l-.962-.32a4.58 4.58 0 0 1-2.724-2.725l-.48-.961c-.161-.32-.481-.32-.641 0l-.32.961c-.642 1.282-1.603 2.244-2.725 2.724l-1.121.481c-.16 0-.16.48 0 .48l.961.482c1.282.48 2.243 1.442 2.884 2.724l.481.96c.16.321.481.321.641 0l.32-.96a4.58 4.58 0 0 1 2.724-2.724M116.016 9.165l.801-.32q.241-.24 0-.481l-.801-.32c-.961-.321-1.602-1.122-2.083-2.084l-.32-.801q-.241-.24-.481 0l-.321.801c-.32.962-1.121 1.602-2.083 2.083l-.48.32c-.321.16-.321.481 0 .481l.801.32c.961.321 1.602 1.123 2.083 2.084l.32.801q.241.24.481 0l.321-.801c.16-.961.961-1.763 1.762-2.083\" /><path fill=\"#ADB6C8\" d=\"M53.786 71.855c-3.575 0-6.578-2.285-7.722-5.571-.286-.715.143-1.429.858-1.715.715-.285 1.43.143 1.716.858.715 2.142 2.86 3.714 5.148 3.714s4.433-1.429 5.148-3.714c.287-.715 1.002-1.143 1.717-.858s1.144 1 .858 1.715c-1.144 3.428-4.148 5.571-7.723 5.571M75.38 71.855c-3.575 0-6.578-2.285-7.722-5.571-.286-.715.143-1.429.858-1.715.715-.285 1.43.143 1.716.858.715 2.142 2.86 3.714 5.148 3.714s4.433-1.429 5.148-3.714c.286-.715 1.001-1.143 1.716-.858s1.144 1 .858 1.715c-1.144 3.428-4.147 5.571-7.722 5.571M64.655 89.347a3.287 3.287 0 0 0 3.289-3.286 3.287 3.287 0 0 0-3.29-3.286 3.287 3.287 0 0 0-3.288 3.286 3.287 3.287 0 0 0 3.289 3.286\" /><defs><linearGradient id=\"noLearnings_svg__c\" x1={68.182} x2={68.182} y1={17.916} y2={131.436} gradientUnits=\"userSpaceOnUse\"><stop stopColor=\"#FDFEFF\" /><stop offset={0.996} stopColor=\"#ECF0F5\" /></linearGradient><filter id=\"noLearnings_svg__b\" width={130.151} height={153.796} x={3.135} y={9.456} colorInterpolationFilters=\"sRGB\" filterUnits=\"userSpaceOnUse\"><feFlood floodOpacity={0} result=\"BackgroundImageFix\" /><feColorMatrix in=\"SourceAlpha\" result=\"hardAlpha\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" /><feOffset dy={11} /><feGaussianBlur stdDeviation={11} /><feColorMatrix values=\"0 0 0 0 0.397708 0 0 0 0 0.47749 0 0 0 0 0.575 0 0 0 0.27 0\" /><feBlend in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_3506_13710\" /><feBlend in=\"SourceGraphic\" in2=\"effect1_dropShadow_3506_13710\" result=\"shape\" /></filter></defs></svg>;\nexport default SvgNoLearnings;","import { z } from \"zod\";\n\nexport enum ProjectGovernorCheckTypes {\n DOCUMENTATION = \"documentation\",\n TESTS = \"tests\",\n MODEL = \"model\",\n FILE_STRUCTURE = \"file_structure\",\n}\n\nexport enum ProjectGovernorAllowedFiles {\n Manifest = \"Manifest\",\n Catalog = \"Catalog\",\n}\n\nexport interface ProjectGovernorCheckFormValues {\n description: string;\n type: ProjectGovernorCheckTypes;\n}\n\nexport interface ProjectGovernorCheckValidateResponse {\n name: string;\n description: string;\n}\n\nexport interface ProjectGovernorCheckConfirmationResponse {\n ok: boolean;\n}\n\nexport const ProjectGovernorCheckSchema = z.object({\n name: z.string(),\n alias: z.string(),\n type: z.enum(Object.values(ProjectGovernorCheckTypes) as [string, ...string[]]),\n description: z.string(),\n files_required: z.array(\n z.enum(Object.values(ProjectGovernorAllowedFiles) as [string, ...string[]])\n ),\n config: z.record(z.unknown()),\n});\n\nexport interface ProjectGovernorCheck extends z.infer<typeof ProjectGovernorCheckSchema> {\n id: string;\n}\n","import { Stack, LoadingButton } from \"@altimateai/lego\";\nimport { KeyboardEvent, useEffect } from \"react\";\nimport { ApiHelper, useMutation } from \"../../api/index\";\nimport {\n ProjectGovernorCheckFormValues,\n ProjectGovernorCheckTypes,\n ProjectGovernorCheckValidateResponse,\n} from \"./types\";\nimport {\n Button,\n NativeSelect,\n Label,\n FormItem,\n FormMessage as FormFeedback,\n Textarea,\n} from \"@altimateai/lego\";\nimport { useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { z } from \"zod\";\n\n// Define validation schema\nconst checkFormSchema = z.object({\n description: z.string().min(1, { message: \"Description is required\" }),\n type: z.nativeEnum(ProjectGovernorCheckTypes),\n});\n\nconst ChecksInput = ({\n onSuccess,\n onCancel,\n}: {\n onSuccess: (data: ProjectGovernorCheckValidateResponse, type: ProjectGovernorCheckTypes) => void;\n onCancel: () => void;\n}) => {\n const {\n register,\n handleSubmit,\n formState: { errors, isSubmitting, isValid },\n setError,\n watch,\n setValue,\n } = useForm<ProjectGovernorCheckFormValues>({\n resolver: zodResolver(checkFormSchema),\n defaultValues: {\n description: \"\",\n type: ProjectGovernorCheckTypes.MODEL,\n },\n });\n\n const values = watch();\n\n const onSubmit = async (data: ProjectGovernorCheckFormValues) => {\n return await ApiHelper.post<ProjectGovernorCheckValidateResponse>(\n `project_governance/check/validate`,\n { ...data }\n );\n };\n\n const { error, loading } = useMutation({\n queryFn: () => onSubmit(values),\n onSuccess: (data: ProjectGovernorCheckValidateResponse) => {\n onSuccess(data, values.type);\n },\n });\n\n useEffect(() => {\n if (error?.message) {\n setError(\"description\", { message: error.message });\n }\n }, [error, setError]);\n\n const handleKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n const input = e.target as HTMLTextAreaElement;\n input.style.height = \"inherit\";\n input.style.height = `${Math.min(input.scrollHeight + 5, 200)}px`;\n };\n\n return (\n <form onSubmit={handleSubmit(data => onSubmit(data).then(res => onSuccess(res, data.type)))}>\n <FormItem className=\"al-mb-4\">\n <Textarea\n {...register(\"description\")}\n onKeyDown={handleKeyDown}\n placeholder=\"Describe the check in natural language\"\n className={\n errors.description ? \"al-border-destructive al-min-h-[100px]\" : \"al-min-h-[100px]\"\n }\n />\n {errors.description ? <FormFeedback>{errors.description.message}</FormFeedback> : null}\n </FormItem>\n <FormItem>\n <Label>Type: </Label>\n <NativeSelect\n style={{ width: 200 }}\n placeholder=\"Select type\"\n value={values.type}\n onChange={(value: string) => setValue(\"type\", value as ProjectGovernorCheckTypes)}\n options={Object.entries(ProjectGovernorCheckTypes).map(([, value]) => ({\n value: value,\n label: value,\n }))}\n />\n </FormItem>\n <Stack className=\"al-justify-end\">\n <Button variant=\"ghost\" onClick={onCancel} type=\"button\">\n Cancel\n </Button>\n <LoadingButton\n color=\"primary\"\n loading={loading || isSubmitting}\n type=\"submit\"\n disabled={!isValid || values?.description?.length === 0}\n >\n Submit\n </LoadingButton>\n </Stack>\n </form>\n );\n};\n\nexport default ChecksInput;\n","import { LoadingButton, Stack } from \"@altimateai/lego\";\nimport { Alert, Card, CardContent, CardFooter } from \"@altimateai/lego\";\nimport ChecksInput from \"./ChecksInput\";\nimport {\n ProjectGovernorCheckTypes,\n ProjectGovernorCheckValidateResponse,\n ProjectGovernorCheckConfirmationResponse,\n} from \"./types\";\nimport { useState } from \"react\";\nimport { ApiHelper, useMutation } from \"../../api/index\";\nimport { TeamMateComponentProps } from \"../types\";\nimport { Button } from \"@altimateai/lego\";\n\ninterface Props extends TeamMateComponentProps<ProjectGovernorCheckConfirmationResponse> {}\n\nconst ProjectGovernorForm = ({ onClose = () => {} }: Props) => {\n const [projectGovernorValidateResponse, setProjectGovernorValidateResponse] = useState<\n ProjectGovernorCheckValidateResponse & {\n type: ProjectGovernorCheckTypes;\n }\n >();\n\n const onSuccess = (\n data: ProjectGovernorCheckValidateResponse,\n type: ProjectGovernorCheckTypes\n ) => {\n setProjectGovernorValidateResponse({ ...data, type });\n };\n\n const {\n mutate,\n error,\n loading: isSaving,\n data,\n } = useMutation<void, ProjectGovernorCheckConfirmationResponse>({\n queryFn: () => {\n return ApiHelper.post<ProjectGovernorCheckConfirmationResponse>(`project_governance/check`, {\n ...projectGovernorValidateResponse,\n });\n },\n });\n\n if (data) {\n return (\n <Alert>\n Project governance check saved successfully{\" \"}\n <Button variant=\"secondary\" onClick={() => onClose(data)}>\n View\n </Button>\n </Alert>\n );\n }\n\n return (\n <Stack direction=\"column\">\n <p className=\"al-m-0\">\n Here, you can provide instructions in natural language to create project governance checks\n </p>\n\n <ChecksInput onSuccess={onSuccess} onCancel={onClose} />\n\n {projectGovernorValidateResponse ? (\n <Card className=\"al-mt-4\">\n <CardContent className=\"al-pt-4\">\n <p>Please validate the following check: </p>\n <p>{projectGovernorValidateResponse.name}</p>\n <p>{projectGovernorValidateResponse.description}</p>\n <p>Type: {projectGovernorValidateResponse.type}</p>\n {error && <div className=\"text-danger\">{error.message}</div>}\n </CardContent>\n <CardFooter className=\"al-mt-2 border-0\">\n <Stack justify=\"end\" className=\"al-gap-2\">\n <LoadingButton loading={isSaving} onClick={() => mutate()} color=\"primary\">\n Save\n </LoadingButton>\n </Stack>\n </CardFooter>\n </Card>\n ) : null}\n </Stack>\n );\n};\n\nexport default ProjectGovernorForm;\n","import { IconButton, LoadingButton, Popconfirm, Stack } from \"@altimateai/lego\";\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n FormItem,\n Input,\n Textarea,\n} from \"@altimateai/lego\";\nimport { ProjectGovernorCheck, ProjectGovernorCheckSchema } from \"./types\";\nimport { EditIcon, DeleteIcon } from \"../../../assets/icons\";\nimport { useMutation, ApiHelper } from \"../../api/index\";\nimport { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\nimport { Button, toast } from \"@altimateai/lego\";\nimport { FormMessage as FormFeedback } from \"@altimateai/lego\";\n\ninterface Props {\n check: ProjectGovernorCheck;\n refetch: () => void;\n}\nconst ProjectGovernanceCheck = ({ check, refetch }: Props) => {\n const [isInEditMode, setIsInEditMode] = useState(false);\n const isSelected = new URLSearchParams(window.location.search).get(\"id\") === `${check.id}`;\n\n // Create a type that omits the id field for form validation\n type ProjectGovernorCheckFormData = Omit<ProjectGovernorCheck, \"id\">;\n\n const {\n register,\n handleSubmit,\n formState: { errors, isValid, isSubmitting },\n reset,\n } = useForm<ProjectGovernorCheckFormData>({\n defaultValues: check,\n resolver: zodResolver(ProjectGovernorCheckSchema),\n });\n\n const onSubmit = async (values: ProjectGovernorCheckFormData) => {\n try {\n await ApiHelper.post(`project_governance/check/${check.id}`, values, {\n method: \"PUT\",\n });\n setIsInEditMode(false);\n refetch();\n } catch (error) {\n toast({\n title: \"Failed to update project governance check\",\n description: (error as Error).message || (error as string),\n variant: \"destructive\",\n });\n }\n };\n\n const { mutate, loading: isDeleting } = useMutation({\n queryFn: (checkName: string) =>\n ApiHelper.post(\n `project_governance/check/${check.id}`,\n { data: { check_name: checkName } },\n { method: \"DELETE\" }\n ),\n onSuccess: () => {\n refetch();\n },\n });\n\n const onEditClick = () => {\n setIsInEditMode(true);\n };\n\n const onEditCancel = () => {\n setIsInEditMode(false);\n reset(check);\n };\n\n return (\n <Card className={isSelected ? \"al-border-primary\" : \"\"} style={{ borderWidth: 1 }}>\n <form onSubmit={handleSubmit(onSubmit)}>\n <CardHeader>\n <CardTitle>\n <Stack justify=\"between\">\n {isInEditMode ? (\n <FormItem>\n <Input\n {...register(\"name\")}\n placeholder=\"Project governance check name...\"\n className={errors.name ? \"al-border-destructive\" : \"\"}\n />\n {errors.name ? <FormFeedback>{errors.name.message}</FormFeedback> : null}\n </FormItem>\n ) : (\n check.name\n )}\n\n <Stack align=\"center\" gap=\"none\">\n {isInEditMode ? (\n <Stack>\n <Button onClick={onEditCancel} variant=\"outline\" size=\"sm\">\n Cancel\n </Button>\n <LoadingButton\n size=\"sm\"\n loading={isSubmitting}\n disabled={isSubmitting || !isValid}\n type=\"submit\"\n >\n Save\n </LoadingButton>\n </Stack>\n ) : (\n <>\n <IconButton variant=\"ghost\" title=\"Edit this learning\" onClick={onEditClick}>\n <EditIcon />\n </IconButton>\n\n <Popconfirm\n title=\"Delete the check\"\n description=\"Are you sure to delete this check?\"\n onConfirm={() => mutate(check.name)}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <LoadingButton\n variant=\"ghost\"\n title=\"Delete check\"\n color=\"link\"\n loading={isDeleting}\n >\n <DeleteIcon />\n </LoadingButton>\n </Popconfirm>\n </>\n )}\n </Stack>\n </Stack>\n </CardTitle>\n </CardHeader>\n <CardContent>\n <p>\n {isInEditMode ? (\n <FormItem>\n <Textarea\n {...register(\"description\")}\n placeholder=\"Describe the project governance check...\"\n className={\n errors.description\n ? \"al-border-destructive al-min-h-[100px]\"\n : \"al-min-h-[100px]\"\n }\n />\n {errors.description ? (\n <FormFeedback>{errors.description.message}</FormFeedback>\n ) : null}\n </FormItem>\n ) : (\n check.description\n )}\n </p>\n <p>Type: {check.type}</p>\n <p>Files required: {check.files_required.join(\", \")}</p>\n </CardContent>\n </form>\n </Card>\n );\n};\n\nexport default ProjectGovernanceCheck;\n","import { ApiHelper, useQuery } from \"../../api/index\";\nimport { ProjectGovernorCheck } from \"./types\";\nimport { Spinner } from \"@altimateai/lego\";\nimport { useEffect } from \"react\";\nimport ProjectGovernorForm from \"./ProjectGovernorForm\";\nimport { Stack } from \"@altimateai/lego\";\nimport ProjectGovernanceCheck from \"./ProjectGovernanceCheck\";\nimport {\n Button,\n Sheet,\n SheetContent,\n SheetHeader,\n SheetTitle,\n SheetTrigger,\n} from \"@altimateai/lego\";\nimport { Alert } from \"@altimateai/lego\";\n\nconst ProjectGovernorDisplay = () => {\n const {\n data: checks,\n error,\n loading,\n refetch,\n } = useQuery<ProjectGovernorCheck[]>({\n queryFn: () => ApiHelper.get<ProjectGovernorCheck[]>(`project_governance/checks`),\n enabled: false,\n });\n\n useEffect(() => {\n refetch();\n // avoid refetching on every render\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (loading) {\n return <Spinner />;\n }\n if (error) {\n return <Alert color=\"danger\">Error loading checks: {error.message}</Alert>;\n }\n\n return (\n <>\n <div>\n <Stack className=\"al-justify-end\">\n <Sheet>\n <SheetTrigger asChild>\n <Button variant=\"secondary\">+ Add new check</Button>\n </SheetTrigger>\n <SheetContent>\n <SheetHeader>\n <SheetTitle>Add new check</SheetTitle>\n </SheetHeader>\n <ProjectGovernorForm\n onClose={() => {\n refetch();\n }}\n />\n </SheetContent>\n </Sheet>\n </Stack>\n <Stack direction=\"column\" className=\"al-mt-2\">\n {checks?.length ? (\n checks.map(check => {\n return <ProjectGovernanceCheck key={check.id} check={check} refetch={refetch} />;\n })\n ) : (\n <div>No checks added yet!</div>\n )}\n </Stack>\n </div>\n </>\n );\n};\n\nexport default ProjectGovernorDisplay;\n","import { ReactNode } from \"react\";\nimport { Citation, TaskLabels } from \"../shared/types\";\nimport { z } from \"zod\";\n\nexport type ChatEventStatus = \"idle\" | \"pending\" | \"streaming\" | \"complete\" | \"error\" | \"cancelled\";\n\nexport type ChatEvent =\n | { type: \"session_created\"; sessionId: string }\n | { type: \"status_change\"; status: ChatEventStatus; sessionId: string };\n\nexport interface AgentAction {\n id?: string;\n type: \"info\" | \"analysis\";\n content: string;\n timestamp: number;\n artifacts?: Artifact[];\n}\n\nexport enum LoadingState {\n LOADING = \"LOADING\",\n LOADED = \"LOADED\",\n ERROR = \"ERROR\",\n UNINITIALIZED = \"UNINITIALIZED\",\n CANCELLED = \"cancelled\",\n}\n\nexport interface AssistantMeta {\n avatar: string;\n name: string;\n}\n\nexport interface Feedback {\n rating?: \"up\" | \"down\";\n comment?: string;\n}\n\nexport type ContextOption =\n | {\n label: string;\n key: string;\n type: \"submenu\";\n options: { id: string; label: string }[];\n icon?: ReactNode;\n }\n | {\n label: string;\n key: string;\n type: \"trigger\";\n handler?: () => void;\n icon?: ReactNode;\n };\n\nexport interface ChatSession {\n id: string;\n messages: ChatMessage[];\n context?: {\n files?: File[];\n [x: string]: unknown;\n };\n selectedModel?: string | null;\n datamates?: string[];\n status?: SessionStatusEnum;\n}\n\nexport interface FileUploadProps {\n allowedFiles: string; // e.g. \".txt,.json,.md\"\n contextFieldKey: string;\n}\n\nexport interface ChatbotUrls {\n origin?: string;\n askPath?: string;\n proceedPath?: string;\n frontendUrl?: string;\n followupPath?: string;\n entityDetectionUrl?: string;\n feedbackPath?: string;\n}\n\nexport interface Datamate {\n id: string;\n label: string;\n}\n\nexport enum EntityType {\n SNOWFLAKE_ACCOUNT = \"snowflake_account\",\n SNOWFLAKE_WAREHOUSE = \"snowflake_warehouse\",\n SNOWFLAKE_DATABASE = \"snowflake_database\",\n SNOWFLAKE_TABLE = \"snowflake_table\",\n SNOWFLAKE_USER = \"snowflake_user\",\n SNOWFLAKE_ROLE = \"snowflake_role\",\n UNKNOWN = \"unknown\",\n}\n\nexport interface DetectedEntity {\n name: string;\n types_found: EntityType[];\n selected_type: EntityType;\n}\n\nexport interface EntityDetectionRequest {\n text: string;\n detected_entities?: string[];\n}\n\nexport interface EntityDetectionResponse {\n entities: Pick<DetectedEntity, \"name\" | \"types_found\">[];\n original_text: string;\n}\n\nexport interface ChatbotProps {\n helloMessage?: ReactNode;\n assistantMeta?: AssistantMeta;\n context?: Record<string, unknown>;\n fileUploadProps?: FileUploadProps;\n contextOptions?: ContextOption[];\n placeholder?: string;\n autoFocus?: boolean;\n classNames?: {\n chatbot?: string;\n chatMessages?: string;\n messageItem?: string;\n };\n initialMessage?: string;\n submitInitialMessageOnMount?: boolean;\n questionFormLeftActions?: ReactNode[];\n refetchSession?: () => Promise<unknown>;\n chatboxStartPosition?: \"middle\" | \"bottom\";\n helloMessageFooter?: ReactNode;\n handleSavePrompt?: (message: ChatMessage) => void;\n showSavePromptButton?: boolean;\n}\n\nexport interface ChatbotProviderProps extends ChatbotProps {\n taskLabel?: keyof typeof TaskLabels;\n initialValidation?: ChatState[\"initialValidation\"];\n onError?: (error: unknown) => void;\n onEvent?: (event: ChatEvent) => void;\n urls?: ChatbotUrls;\n disableContext?: boolean;\n requestParams?: RequestInit;\n components?: {\n feedback?: ReactNode;\n questionFormButtons?: (\n userPrompt: string,\n onAccept: (improvedPrompt: string) => void\n ) => ReactNode;\n };\n contextOptions?: ContextOption[];\n isMarkdownResponse?: boolean;\n models?: { label: string; value: string }[];\n placeholder?: string;\n sessions?: Record<string, ChatSession>;\n currentSessionId?: string;\n selectedDatamateId?: string;\n handleSavePrompt?: (message: ChatMessage) => void;\n}\n\nexport type InteractionType = \"text\" | \"select\" | \"multiSelect\" | \"confirm\";\n\nexport interface InteractionChoice {\n id: string;\n label: string;\n value: string;\n}\n\nexport interface InteractionRequest {\n type: InteractionType;\n id: string;\n prompt: string;\n required?: boolean;\n choices?: InteractionChoice[];\n validation?: {\n pattern?: string;\n message?: string;\n };\n}\n\nexport interface UploadedFile {\n filename: string;\n content: string; // base64 encoded content\n content_type: string;\n size: number;\n}\n\nexport interface MessageAttachment {\n id: string;\n attachment_name: string;\n file_type: string | null;\n s3_url: string | null;\n extracted_content: string | null;\n order: number;\n attachment_type: string; // 'file', 'datamate', 'knowledge_base'\n attachment_reference_id: string | null;\n file_size: number | null;\n created_on: string; // ISO date string\n}\n\nexport interface ChatMessage {\n id: string;\n content: string;\n role: \"user\" | \"assistant\";\n timestamp: number;\n actions?: AgentAction[];\n interaction?: InteractionRequest;\n artifacts?: Artifact[];\n heading: string;\n citations?: Citation[];\n todos?: TodoItem[];\n attachments?: MessageAttachment[];\n confidence_str?: string;\n}\n\nexport interface Artifact {\n content: string;\n entity: string;\n name: string;\n type: string;\n}\n\nexport interface ChatResponse {\n content: string;\n actions?: AgentAction[];\n interaction?: InteractionRequest;\n role: \"assistant\" | \"user\";\n timestamp: number;\n artifacts?: Artifact[];\n heading: string;\n todos?: TodoItem[];\n}\n\n// Session Status Enum\nexport const sessionStatusSchema = z.enum([\"failed\", \"completed\", \"pending\", \"cancelled\"]);\nexport type SessionStatusEnum = z.infer<typeof sessionStatusSchema>;\n\nexport interface ChatState {\n sessions: Record<string, ChatSession>;\n currentSessionId: string | null;\n loadingState: LoadingState;\n error: string | null;\n abortController: AbortController | null;\n currentActions: AgentAction[];\n currentTodos: TodoItem[];\n taskLabel?: keyof typeof TaskLabels;\n initialValidation?: (data: { context: ChatSession[\"context\"] }) => Promise<void>;\n urls?: ChatbotUrls;\n disableContext?: boolean;\n requestParams?: RequestInit;\n isMarkdownResponse?: boolean;\n models?: { label: string; value: string }[];\n classNames?: {\n chatbot?: string;\n chatMessages?: string;\n messageItem?: string;\n questionForm?: string;\n chatbotScrollingContent?: string;\n };\n components?: {\n feedback?: ReactNode;\n questionFormButtons?: (\n userPrompt: string,\n onAccept: (improvedPrompt: string) => void\n ) => ReactNode;\n };\n}\n\nexport const todoItemSchema = z.object({\n id: z.string(),\n content: z.string(),\n status: z.enum([\"pending\", \"in_progress\", \"completed\"]),\n priority: z.enum([\"high\", \"medium\", \"low\"]),\n});\n\nexport type TodoItem = z.infer<typeof todoItemSchema>;\n\nexport interface ToolUsageData {\n tool: string;\n id: string;\n}\n\nexport interface ProgressUpdate {\n timestamp: string;\n todos: TodoItem[];\n}\n\nexport interface FinalResponseData {\n tool_usage?: ToolUsageData[];\n turns?: number;\n tools_used?: number;\n progress_updates?: ProgressUpdate[];\n total_progress_updates?: number;\n}\n\nexport const agentStreamResponseSchema = z.object({\n id: z.coerce.string().optional(),\n type: z.enum([\n \"info\",\n \"agent_outcome\",\n \"require_user_action\",\n \"analysis\",\n \"error\",\n \"citations\",\n \"text\",\n \"tool_use\",\n \"final_response\",\n \"complete\",\n \"stream_complete\", // Backend uses this as end marker\n \"custom\",\n ]),\n heading: z.string().optional(),\n content: z.string().optional(),\n tool: z.string().optional(),\n todos: z.array(todoItemSchema).optional(),\n response: z.string().optional(),\n data: z\n .object({\n tool_usage: z\n .array(\n z.object({\n tool: z.string(),\n id: z.string(),\n })\n )\n .optional(),\n })\n .optional(),\n interaction: z\n .object({\n type: z.enum([\"text\", \"multiSelect\", \"confirm\", \"select\"]),\n id: z.string(),\n prompt: z.string(),\n required: z.boolean().optional(),\n choices: z\n .array(\n z.object({\n id: z.string(),\n label: z.string(),\n value: z.string(),\n })\n )\n .optional(),\n })\n .optional(),\n artifacts: z\n .array(\n z.object({\n content: z.string(),\n entity: z.string(),\n name: z.string(),\n type: z.string(),\n })\n )\n .optional(),\n citations: z\n .array(\n z.object({\n content: z.string(),\n entity: z.string(),\n name: z.string(),\n type: z.string(),\n })\n )\n .optional(),\n confidence_str: z.string().optional(),\n});\n\nexport interface AgentStreamResponse {\n id?: string;\n type:\n | \"info\"\n | \"agent_outcome\"\n | \"require_user_action\"\n | \"analysis\"\n | \"error\"\n | \"citations\"\n | \"text\"\n | \"tool_use\"\n | \"final_response\"\n | \"complete\"\n | \"stream_complete\"; // Backend uses this as end marker\n heading?: string;\n content?: string;\n tool?: string;\n todos?: TodoItem[];\n response?: string;\n data?: FinalResponseData;\n interaction?: {\n type: \"text\" | \"multiSelect\" | \"confirm\" | \"select\";\n id: string;\n prompt: string;\n required?: boolean;\n choices?: Array<{\n id: string;\n label: string;\n value: string;\n }>;\n };\n artifacts?: Artifact[];\n citations?: Citation[];\n confidence_str?: string;\n}\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","import { AgentAction } from \"./types\";\n\nexport const addOrUpdateAction = (actions: AgentAction[], action: AgentAction) => {\n const existingAction = actions.find(a => action.id && a.id === action.id);\n if (existingAction) {\n if (action.type === \"analysis\") {\n // analysis is streamed, so we need to append to the existing action\n return [\n ...actions.filter(a => a.id !== action.id),\n { ...existingAction, content: existingAction.content + action.content },\n ];\n }\n return [...actions.filter(a => a.id !== action.id), action];\n }\n return [...actions, action];\n};\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport {\n AgentAction,\n Artifact,\n ChatSession,\n ChatState,\n Feedback,\n InteractionRequest,\n LoadingState,\n MessageAttachment,\n TodoItem,\n DetectedEntity,\n EntityType,\n} from \"../types\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { addOrUpdateAction } from \"../utils\";\nimport { Citation } from \"../../shared/types\";\n\ninterface AddMessagePayload {\n sessionId: string;\n id: string;\n content: string;\n role: \"user\" | \"assistant\";\n timestamp: number;\n actions?: AgentAction[];\n interaction?: InteractionRequest;\n artifacts?: Artifact[];\n heading: string;\n citations?: Citation[];\n todos?: TodoItem[];\n attachments?: MessageAttachment[];\n confidence_str?: string;\n}\n\ninterface DeleteMessagePayload {\n sessionId: string;\n messageId: string;\n}\n\ninterface UpdateContextPayload {\n sessionId: string;\n context: Record<string, unknown>;\n}\n\ninterface UpdateDatamateInSessionPayload {\n sessionId: string;\n datamates: string[];\n}\n\ninterface UpdateEntitiesPayload {\n sessionId: string;\n entities: DetectedEntity[];\n}\n\ninterface UpdateEntityTypePayload {\n sessionId: string;\n entityName: string;\n newType: EntityType;\n}\n\nexport const initialState: ChatState = {\n sessions: {},\n currentSessionId: null,\n loadingState: LoadingState.UNINITIALIZED,\n error: null,\n abortController: null,\n currentActions: [],\n currentTodos: [],\n};\n\nconst chatSlice = createSlice({\n name: \"chat\",\n initialState,\n reducers: {\n createSession: (\n state,\n action: PayloadAction<{\n context?: Record<string, unknown>;\n models?: { label: string; value: string }[];\n }>,\n ) => {\n const sessionId = uuidv4();\n state.sessions[sessionId] = {\n id: sessionId,\n messages: [],\n context: action.payload.context || {},\n selectedModel: action.payload?.models?.[0]?.value || null,\n };\n state.currentSessionId = sessionId;\n },\n setSelectedModel: (\n state,\n action: PayloadAction<{ sessionId: string; model: string }>,\n ) => {\n if (state.sessions[action.payload.sessionId]) {\n state.sessions[action.payload.sessionId].selectedModel =\n action.payload.model;\n }\n },\n setCurrentSession: (state, action: PayloadAction<string | null>) => {\n state.currentSessionId = action.payload;\n },\n addMessage: (state, action: PayloadAction<AddMessagePayload>) => {\n const { sessionId, ...message } = action.payload;\n const session = state.sessions[sessionId];\n if (session) {\n const currentMessageIndex = session.messages.findIndex(\n (m) => m.id === message.id,\n );\n if (currentMessageIndex !== -1) {\n session.messages[currentMessageIndex] = {\n ...message,\n attachments: message.attachments || [],\n };\n } else {\n session.messages.push({\n ...message,\n attachments: message.attachments || [],\n });\n }\n }\n },\n updateMessageFeedback: (\n state,\n action: PayloadAction<{\n messageId: string;\n feedback: Feedback;\n }>,\n ) => {\n if (state.currentSessionId) {\n const message = state.sessions[state.currentSessionId].messages.find(\n (m) => m.id === action.payload.messageId,\n );\n if (message) {\n // TODO: Implement feedback submission\n // message.feedback = action.payload.feedback;\n }\n }\n },\n clearHistory: (state) => {\n if (state.currentSessionId) {\n state.sessions[state.currentSessionId].messages = [];\n }\n },\n deleteMessage: (state, action: PayloadAction<DeleteMessagePayload>) => {\n const { sessionId, messageId } = action.payload;\n const session = state.sessions[sessionId];\n if (session) {\n session.messages = session.messages.filter(\n (message) => message.id !== messageId,\n );\n }\n },\n setLoadingState: (\n state,\n action: PayloadAction<{\n state: LoadingState;\n sessionId: ChatState[\"currentSessionId\"];\n }>,\n ) => {\n if (state.currentSessionId === action.payload.sessionId) {\n state.loadingState = action.payload.state;\n }\n },\n setError: (state, action: PayloadAction<string | null>) => {\n state.error = action.payload;\n },\n setAbortController: (\n state,\n action: PayloadAction<AbortController | null>,\n ) => {\n state.abortController = action.payload;\n },\n addAction: (state, action: PayloadAction<AgentAction>) => {\n state.currentActions = addOrUpdateAction(\n state.currentActions,\n action.payload,\n );\n },\n clearActions: (state) => {\n state.currentActions = [];\n },\n setTodos: (state, action: PayloadAction<TodoItem[]>) => {\n state.currentTodos = action.payload;\n },\n clearTodos: (state) => {\n state.currentTodos = [];\n },\n updateContext: (state, action: PayloadAction<UpdateContextPayload>) => {\n const { sessionId, context } = action.payload;\n if (state.sessions[sessionId]) {\n state.sessions[sessionId].context = {\n ...state.sessions[sessionId].context,\n ...context,\n };\n }\n },\n clearContext: (state, action: PayloadAction<{ sessionId: string }>) => {\n const { sessionId } = action.payload;\n if (state.sessions[sessionId]) {\n state.sessions[sessionId].context = {};\n }\n },\n updateDatamateInSession: (\n state,\n action: PayloadAction<UpdateDatamateInSessionPayload>,\n ) => {\n const { sessionId, datamates } = action.payload;\n if (state.sessions[sessionId]) {\n state.sessions[sessionId].datamates = datamates;\n }\n },\n updateEntities: (state, action: PayloadAction<UpdateEntitiesPayload>) => {\n const { sessionId, entities } = action.payload;\n if (state.sessions[sessionId]) {\n state.sessions[sessionId].context = {\n ...state.sessions[sessionId].context,\n entities,\n };\n }\n },\n updateEntityType: (\n state,\n action: PayloadAction<UpdateEntityTypePayload>,\n ) => {\n const { sessionId, entityName, newType } = action.payload;\n if (state.sessions[sessionId]) {\n const entities =\n (state.sessions[sessionId].context?.entities as DetectedEntity[]) ||\n [];\n const updatedEntities = entities.map((entity) =>\n entity.name === entityName\n ? { ...entity, selected_type: newType }\n : entity,\n );\n state.sessions[sessionId].context = {\n ...state.sessions[sessionId].context,\n entities: updatedEntities,\n };\n }\n },\n setSessions: (\n state,\n action: PayloadAction<Record<string, ChatSession>>,\n ) => {\n // merge the new sessions with the existing sessions\n state.sessions = { ...state.sessions, ...action.payload };\n // If current session has messages, set the state to loaded instead of uninitialzed to show action buttons\n if (\n state.currentSessionId &&\n state.loadingState === LoadingState.UNINITIALIZED\n ) {\n const currentSession = state.sessions[state.currentSessionId];\n if (currentSession?.messages.length) {\n state.loadingState = LoadingState.LOADED;\n }\n }\n },\n resetSession: (state) => {\n state.currentSessionId = null;\n state.loadingState = LoadingState.UNINITIALIZED;\n state.error = null;\n },\n },\n});\n\nexport const {\n createSession,\n setSelectedModel,\n setCurrentSession,\n addMessage,\n updateMessageFeedback,\n clearHistory,\n deleteMessage,\n setLoadingState,\n setError,\n setAbortController,\n addAction,\n clearActions,\n setTodos,\n clearTodos,\n updateContext,\n clearContext,\n updateDatamateInSession,\n updateEntities,\n updateEntityType,\n setSessions,\n resetSession,\n} = chatSlice.actions;\n\nexport const chatReducer = chatSlice.reducer;\n","import React, {\n createContext,\n useContext,\n useEffect,\n useReducer,\n forwardRef,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport {\n chatReducer,\n initialState as chatInitialState,\n createSession,\n setCurrentSession,\n setSessions,\n resetSession,\n setLoadingState,\n} from \"./store/chatSlice\";\nimport {\n ChatbotProviderProps,\n ChatEventStatus,\n ChatSession,\n ChatState,\n LoadingState,\n} from \"./types\";\nimport { UnknownAction } from \"@reduxjs/toolkit\";\nimport { ChatbotV2 } from \"./components\";\nimport { PromptInputProvider } from \"@altimateai/lego\";\n\nexport interface ChatContextType extends ChatState {\n dispatch: React.Dispatch<UnknownAction>;\n}\n\nexport interface ChatProviderRef {\n resetSession: () => void;\n setUserInput: (text: string) => void;\n resetStatus: () => void;\n getSessionById: (_sessionId: string) => ChatSession | null;\n getSessionId: () => string | null;\n}\n\nexport const ChatContext = createContext<ChatContextType | undefined>(\n undefined,\n);\n\nexport const useChatContext = () => {\n const context = useContext(ChatContext);\n if (!context) {\n throw new Error(\"useChatContext must be used within a ChatProvider\");\n }\n return context;\n};\n\nexport const ChatProvider = forwardRef<ChatProviderRef, ChatbotProviderProps>(\n (\n {\n taskLabel,\n initialValidation,\n urls,\n disableContext,\n requestParams,\n components,\n helloMessage,\n assistantMeta,\n context,\n contextOptions,\n fileUploadProps,\n isMarkdownResponse,\n models,\n placeholder,\n autoFocus,\n classNames,\n sessions,\n currentSessionId,\n initialMessage,\n submitInitialMessageOnMount,\n questionFormLeftActions,\n refetchSession,\n chatboxStartPosition,\n helloMessageFooter,\n handleSavePrompt,\n showSavePromptButton,\n onEvent,\n },\n ref,\n ) => {\n const [state, dispatch] = useReducer(chatReducer, {\n ...chatInitialState,\n sessions: sessions || {},\n currentSessionId: currentSessionId || null,\n });\n\n // Ref to access PromptInputProvider's setInput function\n const setInputRef = useRef<((_text: string) => void) | undefined>();\n\n useImperativeHandle(ref, () => ({\n getSessionById: (sessionId: string) => {\n return state.sessions[sessionId];\n },\n getSessionId: () => {\n return state.currentSessionId;\n },\n // delete current session id and create a new session\n resetSession: () => {\n dispatch(resetSession());\n setTimeout(() => {\n dispatch(createSession({ context, models }));\n }, 0);\n },\n setUserInput: (text: string) => {\n if (state.currentSessionId && setInputRef.current) {\n setInputRef.current(text);\n }\n },\n resetStatus: () => {\n dispatch(\n setLoadingState({\n state: LoadingState.UNINITIALIZED,\n sessionId: state.currentSessionId,\n }),\n );\n },\n }));\n\n useEffect(() => {\n if (sessions && Object.keys(sessions || {}).length > 0) {\n dispatch(setSessions(sessions));\n }\n }, [sessions]);\n\n useEffect(() => {\n if (!currentSessionId) {\n dispatch(createSession({ context, models }));\n } else {\n dispatch(setCurrentSession(currentSessionId));\n }\n }, [currentSessionId, dispatch, context, models]);\n\n // Notify parent when session is created\n useEffect(() => {\n if (state.currentSessionId && onEvent) {\n onEvent({ type: \"session_created\", sessionId: state.currentSessionId });\n }\n }, [state.currentSessionId, onEvent]);\n\n // Notify parent when loading state changes\n useEffect(() => {\n if (onEvent && state.currentSessionId) {\n const statusMap: Record<LoadingState, ChatEventStatus> = {\n [LoadingState.UNINITIALIZED]: \"idle\",\n [LoadingState.LOADING]: \"pending\",\n [LoadingState.LOADED]: \"complete\",\n [LoadingState.ERROR]: \"error\",\n [LoadingState.CANCELLED]: \"cancelled\",\n };\n onEvent({\n type: \"status_change\",\n status: statusMap[state.loadingState],\n sessionId: state.currentSessionId,\n });\n }\n }, [state.loadingState, state.currentSessionId, onEvent]);\n\n return (\n <ChatContext.Provider\n value={{\n ...state,\n taskLabel,\n initialValidation,\n urls,\n dispatch,\n disableContext,\n requestParams,\n components,\n isMarkdownResponse,\n models,\n classNames,\n }}\n >\n <PromptInputProvider\n initialInput={initialMessage}\n setInputRef={setInputRef}\n >\n <ChatbotV2\n assistantMeta={assistantMeta}\n helloMessage={helloMessage}\n fileUploadProps={fileUploadProps}\n context={context}\n contextOptions={contextOptions}\n placeholder={placeholder}\n autoFocus={autoFocus}\n initialMessage={initialMessage}\n submitInitialMessageOnMount={submitInitialMessageOnMount}\n questionFormLeftActions={questionFormLeftActions}\n refetchSession={refetchSession}\n chatboxStartPosition={chatboxStartPosition}\n helloMessageFooter={helloMessageFooter}\n handleSavePrompt={handleSavePrompt}\n showSavePromptButton={showSavePromptButton}\n />\n </PromptInputProvider>\n </ChatContext.Provider>\n );\n },\n);\n\nChatProvider.displayName = \"ChatProvider\";\n","import {\n AgentStreamResponse,\n AgentAction,\n TodoItem,\n Artifact,\n MessageAttachment,\n SessionStatusEnum,\n} from \"../types\";\nimport { Citation } from \"../../teammate/types\";\n\nexport interface ProcessedStreamMessage {\n type: \"action\" | \"citation\" | \"final_response\" | \"error\" | \"complete\";\n data: unknown;\n citations?: Citation[];\n todos?: TodoItem[];\n artifacts?: Artifact[];\n}\n\nexport interface StreamProcessorCallbacks {\n onAction?: (action: AgentAction) => void;\n onCitation?: (citations: Citation[]) => void;\n onTodos?: (todos: TodoItem[]) => void;\n onMarkdownChunk?: (content: string) => void;\n onFinalResponse?: (response: {\n content: string;\n artifacts?: Artifact[];\n heading?: string;\n interaction?: AgentStreamResponse[\"interaction\"];\n }) => void;\n onError?: (error: string) => void;\n onComplete?: () => void;\n}\n\nexport interface StreamProcessorOptions {\n isMarkdownResponse?: boolean;\n callbacks?: StreamProcessorCallbacks;\n}\n\nexport interface ProcessedStreamResult {\n content: string;\n actions: AgentAction[];\n citations?: Citation[];\n todos?: TodoItem[];\n artifacts?: Artifact[];\n heading?: string;\n interaction?: AgentStreamResponse[\"interaction\"];\n confidence_str?: string;\n}\n\n/**\n * Processes a stream of AgentStreamResponse messages\n * @param reader - ReadableStreamDefaultReader for the response stream\n * @param options - Configuration options and callbacks\n * @returns Promise with final processed response\n */\nexport async function processAgentStream(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n options: StreamProcessorOptions = {}\n): Promise<ProcessedStreamResult> {\n const { isMarkdownResponse = false, callbacks } = options;\n const decoder = new TextDecoder();\n\n let actions: AgentAction[] = [];\n let citations: Citation[] | undefined = undefined;\n let todos: TodoItem[] | undefined = undefined;\n let stepHeading = \"\";\n let isReading = true;\n let markdownBuffer = \"\";\n let finalContent = \"\";\n let finalArtifacts: Artifact[] = [];\n let finalInteraction: AgentStreamResponse[\"interaction\"] | undefined;\n let finalConfidenceStr: string | undefined;\n let incompleteLineBuffer = \"\"; // Buffer for incomplete lines across chunks\n\n const addOrUpdateAction = (actionsList: AgentAction[], newAction: AgentAction): AgentAction[] => {\n const existingIndex = actionsList.findIndex(action => action.id && action.id === newAction.id);\n if (existingIndex !== -1) {\n // Update existing action\n const updated = [...actionsList];\n updated[existingIndex] = { ...updated[existingIndex], ...newAction };\n return updated;\n } else {\n // Add new action\n return [...actionsList, newAction];\n }\n };\n\n const handleJSONStr = (jsonStr: string) => {\n try {\n const msg = JSON.parse(jsonStr) as AgentStreamResponse;\n\n stepHeading = msg.heading || stepHeading;\n\n if (msg.type === \"info\" || msg.type === \"analysis\") {\n const action: AgentAction = {\n type: msg.type,\n id: msg.id,\n content: msg.content || \"\",\n timestamp: Date.now(),\n artifacts: msg.artifacts,\n };\n actions = addOrUpdateAction(actions, action);\n callbacks?.onAction?.(action);\n } else if (msg.type === \"text\") {\n // Handle text messages - add as info action\n if (msg.content) {\n const action: AgentAction = {\n type: \"info\",\n content: msg.content,\n timestamp: Date.now(),\n };\n actions = addOrUpdateAction(actions, action);\n callbacks?.onAction?.(action);\n }\n } else if (msg.type === \"tool_use\") {\n // Handle tool usage\n if (msg.tool !== \"TodoWrite\") {\n // For non-TodoWrite tools, add as info action\n const toolContent = msg.tool ? `Using tool: ${msg.tool}` : \"Tool usage\";\n const action: AgentAction = {\n type: \"info\",\n id: msg.id,\n content: toolContent,\n timestamp: Date.now(),\n };\n actions = addOrUpdateAction(actions, action);\n callbacks?.onAction?.(action);\n }\n\n // If todos are present, update the todos list\n if (msg.todos && msg.todos.length > 0) {\n todos = msg.todos;\n callbacks?.onTodos?.(msg.todos);\n }\n } else if (msg.type === \"citations\") {\n citations = msg.citations;\n callbacks?.onCitation?.(msg.citations || []);\n } else if (msg.type === \"require_user_action\") {\n finalContent = msg.content || \"\";\n finalArtifacts = msg.artifacts || [];\n finalInteraction = msg.interaction;\n } else if (msg.type === \"agent_outcome\" || msg.type === \"error\") {\n citations = msg.citations;\n finalContent = msg.content || \"\";\n finalArtifacts = msg.artifacts || [];\n\n // Only capture confidence_str from agent_outcome messages\n if (msg.type === \"agent_outcome\") {\n finalConfidenceStr = msg.confidence_str;\n }\n\n if (msg.type === \"error\") {\n callbacks?.onError?.(msg.content || \"Unknown error\");\n }\n } else if (msg.type === \"final_response\") {\n finalContent = msg.response || \"\";\n finalArtifacts = msg.artifacts || [];\n\n // Add tool usage summary if present\n if (msg.data?.tool_usage) {\n const toolSummary = `Tools used: ${msg.data.tool_usage.map(t => t.tool).join(\", \")}`;\n const summaryAction: AgentAction = {\n type: \"info\",\n content: toolSummary,\n timestamp: Date.now(),\n };\n actions = addOrUpdateAction(actions, summaryAction);\n callbacks?.onAction?.(summaryAction);\n }\n } else if (msg.type === \"complete\") {\n // Stream complete\n if (!finalContent) {\n finalContent = \"Process completed\";\n }\n callbacks?.onComplete?.();\n }\n } catch (e) {\n // Only log actual JSON parsing errors\n if (jsonStr.trim() && jsonStr.startsWith(\"{\")) {\n console.error(\"Failed to parse message:\", jsonStr, e);\n callbacks?.onError?.(`Failed to parse message: ${e}`);\n } else if (jsonStr.trim() && !jsonStr.startsWith(\"{\")) {\n // For non-JSON content (markdown/plain text), accumulate it\n markdownBuffer += jsonStr + \"\\n\";\n finalContent = markdownBuffer;\n callbacks?.onMarkdownChunk?.(markdownBuffer);\n }\n // Ignore empty lines and whitespace-only lines\n }\n };\n\n while (isReading) {\n const { done, value } = await reader.read();\n if (done) {\n isReading = false;\n // Process any remaining incomplete line buffer before breaking\n if (incompleteLineBuffer.trim() && !isMarkdownResponse) {\n const sseMatch = incompleteLineBuffer.match(/^data:\\s*(.+)$/);\n const jsonStr = sseMatch ? sseMatch[1] : incompleteLineBuffer;\n\n try {\n handleJSONStr(jsonStr);\n } catch (e) {\n if (jsonStr.trim() && !jsonStr.startsWith(\"{\")) {\n markdownBuffer += \"\\n\" + jsonStr;\n finalContent = markdownBuffer;\n callbacks?.onMarkdownChunk?.(markdownBuffer);\n }\n }\n }\n break;\n }\n\n const chunk = decoder.decode(value);\n\n if (isMarkdownResponse) {\n // For markdown responses, accumulate the text\n markdownBuffer += chunk;\n finalContent = markdownBuffer;\n\n // Call the markdown chunk callback for streaming updates\n callbacks?.onMarkdownChunk?.(markdownBuffer);\n } else {\n // Prepend any incomplete line from previous chunk\n const fullChunk = incompleteLineBuffer + chunk;\n\n // Split by newlines, but keep track of whether the chunk ended with a newline\n const lines = fullChunk.split(\"\\n\");\n\n // If the chunk didn't end with a newline, the last element is incomplete\n // Store it for the next iteration\n if (!chunk.endsWith(\"\\n\")) {\n incompleteLineBuffer = lines.pop() || \"\";\n } else {\n incompleteLineBuffer = \"\";\n }\n\n // Process only complete lines\n const completeLines = lines.filter(Boolean);\n\n for (const line of completeLines) {\n // Handle SSE format: data: {...}\n const sseMatch = line.match(/^data:\\s*(.+)$/);\n const jsonStr = sseMatch ? sseMatch[1] : line;\n\n handleJSONStr(jsonStr);\n }\n }\n }\n\n const finalResponse: ProcessedStreamResult = {\n content: finalContent || (isMarkdownResponse ? markdownBuffer : \"\"),\n actions,\n citations,\n todos,\n artifacts: finalArtifacts,\n heading: stepHeading,\n interaction: finalInteraction,\n confidence_str: finalConfidenceStr,\n };\n\n callbacks?.onFinalResponse?.({\n content: finalResponse.content,\n artifacts: finalResponse.artifacts,\n heading: finalResponse.heading,\n interaction: finalResponse.interaction,\n });\n\n return finalResponse;\n}\n\n/**\n * Converts processed stream response to AgentStreamResponse format\n */\nexport function streamResponseToAgentMessages(\n streamResponse: ProcessedStreamResult\n): AgentStreamResponse[] {\n const messages: AgentStreamResponse[] = [];\n\n // Add info actions as separate messages\n streamResponse.actions.forEach(action => {\n messages.push({\n type: action.type,\n content: action.content,\n id: action.id,\n artifacts: action.artifacts,\n });\n });\n\n // Add final agent outcome\n if (streamResponse.content) {\n messages.push({\n type: \"agent_outcome\",\n content: streamResponse.content,\n citations: streamResponse.citations,\n artifacts: streamResponse.artifacts,\n heading: streamResponse.heading,\n interaction: streamResponse.interaction,\n confidence_str: streamResponse.confidence_str,\n });\n }\n\n return messages;\n}\n\n/**\n * Processes existing conversation data (not from stream) using the same logic as processAgentStream\n * Useful for loading historical conversations or existing chat data\n */\nexport function processExistingConversation(\n conversationTurns: Array<{\n role: \"user\" | \"assistant\";\n content: AgentStreamResponse[];\n }>\n): ProcessedStreamResult[] {\n return conversationTurns.map(turn => {\n if (turn.role === \"user\") {\n // For user messages, just return the content as is\n return {\n content: turn.content.map(msg => msg.content || \"\").join(\" \"),\n actions: [],\n citations: undefined,\n todos: undefined,\n artifacts: undefined,\n heading: undefined,\n interaction: undefined,\n };\n } else {\n // For assistant messages, process like stream processor\n return processAgentMessageContent(turn.content);\n }\n });\n}\n\n/**\n * Processes a single assistant message's content using the same logic as the stream processor\n * This function is used by both processExistingConversation and can be used standalone\n */\nexport function processAgentMessageContent(content: AgentStreamResponse[]): ProcessedStreamResult {\n let actions: AgentAction[] = [];\n let citations: Citation[] | undefined = undefined;\n let todos: TodoItem[] | undefined = undefined;\n let finalContent = \"\";\n let finalArtifacts: Artifact[] = [];\n let finalHeading = \"\";\n let finalInteraction: AgentStreamResponse[\"interaction\"] | undefined;\n let finalConfidenceStr: string | undefined;\n\n content.forEach(msg => {\n if (msg.type === \"info\" || msg.type === \"analysis\") {\n actions.push({\n type: msg.type,\n id: msg.id,\n content: msg.content || \"\",\n timestamp: Date.now(),\n artifacts: msg.artifacts,\n });\n } else if (msg.type === \"text\") {\n // Handle text messages as info actions\n if (msg.content) {\n actions.push({\n type: \"info\",\n content: msg.content,\n timestamp: Date.now(),\n });\n }\n } else if (msg.type === \"tool_use\") {\n if (msg.tool !== \"TodoWrite\") {\n const toolContent = msg.tool ? `Using tool: ${msg.tool}` : \"Tool usage\";\n actions.push({\n type: \"info\",\n id: msg.id,\n content: toolContent,\n timestamp: Date.now(),\n });\n }\n if (msg.todos && msg.todos.length > 0) {\n todos = msg.todos;\n }\n } else if (msg.type === \"citations\") {\n citations = msg.citations;\n } else if (msg.type === \"require_user_action\") {\n finalContent = msg.content || \"\";\n finalArtifacts = msg.artifacts || [];\n finalInteraction = msg.interaction;\n finalHeading = msg.heading || \"\";\n } else if (msg.type === \"agent_outcome\" || msg.type === \"error\") {\n citations = msg.citations;\n finalContent = msg.content || \"\";\n finalArtifacts = msg.artifacts || [];\n finalHeading = msg.heading || \"\";\n\n // Only capture confidence_str from agent_outcome messages\n if (msg.type === \"agent_outcome\") {\n finalConfidenceStr = msg.confidence_str;\n }\n } else if (msg.type === \"final_response\") {\n finalContent = msg.response || \"\";\n finalArtifacts = msg.artifacts || [];\n finalHeading = msg.heading || \"\";\n\n // Add tool usage summary if present\n if (msg.data?.tool_usage) {\n const toolSummary = `Tools used: ${msg.data.tool_usage.map(t => t.tool).join(\", \")}`;\n actions.push({\n type: \"info\",\n content: toolSummary,\n timestamp: Date.now(),\n });\n }\n } else if (msg.type === \"complete\") {\n if (!finalContent) {\n finalContent = \"Process completed\";\n }\n }\n });\n\n return {\n content: finalContent,\n actions,\n citations,\n todos,\n artifacts: finalArtifacts,\n heading: finalHeading,\n interaction: finalInteraction,\n confidence_str: finalConfidenceStr,\n };\n}\n\n/**\n * Processes playground session turns into chat sessions format\n * This is specifically for playground usage where we need to convert session turns\n * into a format that can be consumed by the ChatProvider\n */\nexport function processPlaygroundSessionTurns(\n turns: Array<{\n role: \"user\" | \"assistant\";\n content: AgentStreamResponse[];\n id?: string;\n timestamp?: number;\n attachments?: MessageAttachment[];\n }>,\n sessionId: string,\n datamates: string[],\n context: Record<string, unknown> = {},\n status: SessionStatusEnum\n): Record<\n string,\n {\n id: string;\n messages: Array<{\n id: string;\n role: \"user\" | \"assistant\";\n content: string;\n timestamp: number;\n heading: string;\n actions?: AgentAction[];\n artifacts?: Artifact[];\n citations?: Citation[];\n todos?: TodoItem[];\n interaction?: AgentStreamResponse[\"interaction\"];\n attachments?: MessageAttachment[];\n }>;\n }\n> {\n const session: Record<\n string,\n {\n id: string;\n datamates: string[];\n context: Record<string, unknown>;\n status: SessionStatusEnum;\n messages: Array<{\n id: string;\n role: \"user\" | \"assistant\";\n content: string;\n timestamp: number;\n heading: string;\n actions?: AgentAction[];\n artifacts?: Artifact[];\n citations?: Citation[];\n todos?: TodoItem[];\n interaction?: AgentStreamResponse[\"interaction\"];\n attachments?: MessageAttachment[];\n }>;\n }\n > = {\n [sessionId.toString()]: {\n id: sessionId,\n messages: [],\n datamates,\n context,\n status,\n },\n };\n\n turns.forEach((turn, index) => {\n const messageId = turn.id || `${turn.role}-${index}`;\n const timestamp = turn.timestamp || Date.now() - (turns.length - index) * 1000;\n\n if (turn.role === \"user\") {\n // For user messages, extract text content\n const content = turn.content\n .filter(msg => msg.type === \"text\" || msg.content)\n .map(msg => msg.content || \"\")\n .join(\" \");\n\n session[sessionId].messages.push({\n id: messageId,\n role: \"user\",\n content,\n timestamp,\n heading: \"User\",\n attachments: turn.attachments || [],\n });\n } else {\n // For assistant messages, process using our common function\n const processed = processAgentMessageContent(turn.content);\n\n session[sessionId].messages.push({\n id: messageId,\n role: \"assistant\",\n content: processed.content,\n timestamp,\n heading: processed.heading || \"\",\n actions: processed.actions,\n artifacts: processed.artifacts,\n citations: processed.citations,\n todos: processed.todos,\n interaction: processed.interaction,\n attachments: turn.attachments || [],\n });\n }\n });\n\n return session;\n}\n\n/**\n * Helper function to create a fetch request and process the stream\n */\nexport async function sendMessageAndProcessStream(\n url: string,\n data: Record<string, unknown>,\n options: {\n headers?: Record<string, string>;\n signal?: AbortSignal;\n isMarkdownResponse?: boolean;\n callbacks?: StreamProcessorCallbacks;\n } = {}\n): Promise<ProcessedStreamResult> {\n const { headers = {}, signal, isMarkdownResponse, callbacks } = options;\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify(data),\n signal,\n });\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error(\"No response stream available\");\n }\n\n return processAgentStream(reader, { isMarkdownResponse, callbacks });\n}\n","/**\n * Chat Transports - Custom transport implementations for AI SDK 6\n *\n * These transports transform our backend's raw JSON format to AI SDK's UIMessageChunk format.\n *\n * - LegacyBackendTransport: For standard agent chat (JSON streaming)\n * - MarkdownStreamTransport: For Query Analysis mode (markdown streaming)\n */\n\nimport { DefaultChatTransport, type UIMessageChunk } from \"ai\";\nimport type { UIMessage } from \"@ai-sdk/react\";\nimport type { AgentAction, Artifact, InteractionRequest, TodoItem } from \"../types\";\nimport type { Citation } from \"../../teammate\";\nimport { PromptInputMessage } from \"@altimateai/lego\";\n\n// ==========================================================================\n// ACCUMULATED STREAM DATA\n// During streaming, we extract and store rich metadata that AI SDK doesn't\n// natively support. This data is exposed through the hook for V1 compatibility.\n// ==========================================================================\n\n/**\n * Data accumulated during stream processing.\n * This captures all the rich metadata from agent_outcome and other messages.\n */\nexport interface AccumulatedStreamData {\n /** Full text content accumulated from all text deltas */\n content: string;\n /** Actions (info/analysis messages) */\n actions: AgentAction[];\n /** Artifacts from agent_outcome */\n artifacts: Artifact[];\n /** Citations from citations messages */\n citations: Citation[];\n /** Todos from tool_use (TodoWrite) messages */\n todos: TodoItem[];\n /** Interaction prompt from require_user_action */\n interaction: InteractionRequest | undefined;\n /** Heading from agent_outcome */\n heading: string;\n /** Confidence string from agent_outcome */\n confidence_str: string | undefined;\n}\n\n/**\n * Creates an empty accumulated data object\n */\nexport const createEmptyAccumulatedData = (): AccumulatedStreamData => ({\n content: \"\",\n actions: [],\n artifacts: [],\n citations: [],\n todos: [],\n interaction: undefined,\n heading: \"\",\n confidence_str: undefined,\n});\n\n/**\n * Callback type for receiving accumulated stream data.\n */\nexport type TransportDataCallback = (_data: Partial<AccumulatedStreamData>) => void;\n\n/**\n * Transport for handling markdown streams (e.g., Query Analysis mode).\n *\n * This class extends DefaultChatTransport to handle markdown streams with\n * data accumulation for V1 compatibility.\n */\nexport class MarkdownStreamTransport extends DefaultChatTransport<UIMessage> {\n private getBody: () => Record<string, unknown>;\n private apiUrl: string;\n private customHeaders: Record<string, string> | undefined;\n private onData?: TransportDataCallback;\n private currentAbortSignal?: AbortSignal;\n\n constructor(\n options: ConstructorParameters<typeof DefaultChatTransport>[0] & {\n /**\n * Callback to get fresh body data at request time.\n * This ensures session data (mode, datamates, etc.) is always current.\n */\n getBody?: () => Record<string, unknown>;\n /**\n * Callback to receive accumulated stream data directly.\n */\n onData?: TransportDataCallback;\n }\n ) {\n super(options);\n this.getBody = options?.getBody ?? (() => (options?.body as Record<string, unknown>) || {});\n this.apiUrl = options?.api || \"\";\n this.customHeaders = options?.headers as Record<string, string> | undefined;\n this.onData = options?.onData;\n }\n\n /**\n * Emit accumulated data to the registered callback.\n * Checks abort signal to prevent stale callbacks after request cancellation.\n */\n private emitData(data: Partial<AccumulatedStreamData>): void {\n // Don't emit data if request was aborted - prevents stale callbacks\n // from overwriting data after a new request has started\n if (this.currentAbortSignal?.aborted) {\n return;\n }\n\n if (this.onData) {\n this.onData(data);\n }\n }\n\n /**\n * Override sendMessages to make the fetch request and process the markdown stream.\n */\n async sendMessages({\n messages,\n abortSignal,\n }: {\n messages: UIMessage[];\n abortSignal?: AbortSignal;\n }): Promise<ReadableStream<UIMessageChunk>> {\n // Store abort signal for checking in emitData\n this.currentAbortSignal = abortSignal;\n\n const latestUserMessage = [...messages].reverse().find(m => m.role === \"user\");\n const messageText =\n latestUserMessage?.parts\n ?.filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map(p => p.text)\n .join(\"\\n\") || \"\";\n\n const freshBody = this.getBody();\n const requestBody = {\n ...freshBody,\n message: messageText,\n mode: \"ask\",\n };\n\n const response = await fetch(this.apiUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...this.customHeaders,\n },\n body: JSON.stringify(requestBody),\n signal: abortSignal,\n });\n\n if (!response.ok) {\n throw new Error(\"Failed to send message\");\n }\n\n if (!response.body) {\n throw new Error(\"No response body for markdown stream\");\n }\n\n return this.processResponseStream(response.body);\n }\n\n protected processResponseStream(\n stream: ReadableStream<Uint8Array>\n ): ReadableStream<UIMessageChunk> {\n const decoder = new TextDecoder();\n // Capture the abort signal for THIS request at the start of processing.\n // This prevents stale callbacks from emitting data after a new request has started.\n const capturedAbortSignal = this.currentAbortSignal;\n const emitDataForThisRequest = (data: Partial<AccumulatedStreamData>) => {\n // Check the CAPTURED signal, not the current one (which may have been replaced)\n if (capturedAbortSignal?.aborted) {\n return;\n }\n // Call the original emitData (which also has a check, but for belt-and-suspenders)\n this.emitData(data);\n };\n let accumulatedContent = \"\";\n const messageId = `msg-${Date.now()}`;\n let hasStarted = false;\n let hasEnded = false;\n\n return new ReadableStream<UIMessageChunk>({\n async start(controller) {\n const reader = stream.getReader();\n\n try {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n const chunk = decoder.decode(value, { stream: true });\n\n if (!hasStarted && chunk.trim()) {\n controller.enqueue({\n type: \"text-start\",\n id: messageId,\n });\n hasStarted = true;\n }\n\n if (chunk) {\n accumulatedContent += chunk;\n controller.enqueue({\n type: \"text-delta\",\n delta: chunk,\n id: messageId,\n });\n emitDataForThisRequest({ content: accumulatedContent });\n }\n }\n\n if (hasStarted && !hasEnded) {\n hasEnded = true;\n\n emitDataForThisRequest({\n content: accumulatedContent,\n actions: [],\n artifacts: [],\n citations: [],\n todos: [],\n interaction: undefined,\n heading: \"\",\n confidence_str: undefined,\n });\n\n controller.enqueue({\n type: \"text-end\",\n id: messageId,\n });\n controller.enqueue({\n type: \"finish\",\n finishReason: \"stop\",\n });\n }\n\n controller.close();\n } catch (error) {\n controller.error(error);\n }\n },\n });\n }\n}\n\n/**\n * Custom transport that transforms our backend's raw JSON format\n * to AI SDK's UIMessageChunk format.\n *\n * Our backend sends:\n * - `{\"type\":\"text\",\"content\":\"...\"}` → UIMessageChunk text-delta\n * - `{\"type\":\"tool_use\",\"tool\":\"...\"}` → UIMessageChunk tool-call\n * - `{\"type\":\"agent_outcome\",\"content\":\"...\"}` → UIMessageChunk text-delta + message-end\n * - `{\"type\":\"stream_complete\"}` → UIMessageChunk message-end\n *\n * IMPORTANT: Our backend expects legacy format with `message` string field,\n * not AI SDK's `messages` array format.\n */\nexport class LegacyBackendTransport extends DefaultChatTransport<UIMessage> {\n private getBody: () => Record<string, unknown>;\n private apiUrl: string;\n private customHeaders: Record<string, string> | undefined;\n private onData?: TransportDataCallback;\n private currentAbortSignal?: AbortSignal;\n\n constructor(\n options: ConstructorParameters<typeof DefaultChatTransport>[0] & {\n /**\n * Callback to get fresh body data at request time.\n * This ensures session data (mode, datamates, etc.) is always current.\n */\n getBody?: () => Record<string, unknown>;\n /**\n * Callback to receive accumulated stream data directly.\n */\n onData?: TransportDataCallback;\n }\n ) {\n super(options);\n this.getBody = options?.getBody ?? (() => (options?.body as Record<string, unknown>) || {});\n this.apiUrl = options?.api || \"\";\n this.customHeaders = options?.headers as Record<string, string> | undefined;\n this.onData = options?.onData;\n }\n\n /**\n * Emit accumulated data to the registered callback.\n * Checks abort signal to prevent stale callbacks after request cancellation.\n */\n private emitData(data: Partial<AccumulatedStreamData>): void {\n // Don't emit data if request was aborted - prevents stale callbacks\n // from overwriting data after a new request has started\n if (this.currentAbortSignal?.aborted) {\n return;\n }\n\n if (this.onData) {\n this.onData(data);\n }\n }\n\n /**\n * Override sendMessages to use legacy request body format.\n * Our backend expects: { message: string, context: {...}, session_id: string, ... }\n * Not: { messages: [{role, parts}], ... }\n */\n async sendMessages({\n messages,\n abortSignal,\n }: {\n messages: UIMessage[];\n abortSignal?: AbortSignal;\n }): Promise<ReadableStream<UIMessageChunk>> {\n // Store abort signal for checking in emitData\n this.currentAbortSignal = abortSignal;\n\n const latestUserMessage = [...messages].reverse().find(m => m.role === \"user\");\n const messageText =\n latestUserMessage?.parts\n ?.filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map(p => p.text)\n .join(\"\\n\") || \"\";\n const files = latestUserMessage?.parts\n ?.filter((p): p is PromptInputMessage[\"files\"][number] => p.type === \"file\")\n .map((file: PromptInputMessage[\"files\"][number]) => {\n const base64Content = file.url?.split(\",\")[1] || \"\"; // Remove data:type;base64, prefix,\n return {\n filename: file.filename || \"\",\n content: base64Content,\n content_type: file.mediaType || \"application/octet-stream\",\n size: file.size || base64Content.length,\n };\n });\n\n const freshBody = this.getBody();\n\n const legacyRequestBody = {\n ...freshBody,\n context: {\n ...(freshBody.context as Record<string, unknown>),\n uploaded_files: files,\n },\n message: messageText,\n mode: \"ask\",\n };\n\n const response = await fetch(this.apiUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...this.customHeaders,\n },\n body: JSON.stringify(legacyRequestBody),\n signal: abortSignal,\n });\n\n if (!response.ok) {\n throw new Error(\"Failed to send message\");\n }\n\n if (!response.body) {\n throw new Error(\"No response body\");\n }\n\n return this.processResponseStream(response.body);\n }\n\n protected processResponseStream(\n stream: ReadableStream<Uint8Array>\n ): ReadableStream<UIMessageChunk> {\n const decoder = new TextDecoder();\n // Capture the abort signal for THIS request at the start of processing.\n // This prevents stale callbacks from emitting data after a new request has started.\n const capturedAbortSignal = this.currentAbortSignal;\n const emitDataForThisRequest = (data: Partial<AccumulatedStreamData>) => {\n // Check the CAPTURED signal, not the current one (which may have been replaced)\n if (capturedAbortSignal?.aborted) {\n return;\n }\n // Call the original emitData (which also has a check, but for belt-and-suspenders)\n this.emitData(data);\n };\n let buffer = \"\";\n const messageId = `msg-${Date.now()}`;\n let hasStarted = false;\n let hasEnded = false;\n\n // Accumulated data for V1 compatibility\n let accumulatedContent = \"\";\n const accumulatedActions: AgentAction[] = [];\n const accumulatedArtifacts: Artifact[] = [];\n const accumulatedCitations: Citation[] = [];\n const accumulatedTodos: TodoItem[] = [];\n let accumulatedInteraction: InteractionRequest | undefined = undefined;\n let accumulatedHeading = \"\";\n let accumulatedConfidence: string | undefined = undefined;\n\n return new ReadableStream<UIMessageChunk>({\n async start(controller) {\n const reader = stream.getReader();\n\n try {\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n const chunk = decoder.decode(value, { stream: true });\n buffer += chunk;\n\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n\n try {\n const msg = JSON.parse(trimmed);\n\n if (!hasStarted) {\n controller.enqueue({\n type: \"text-start\",\n id: messageId,\n });\n hasStarted = true;\n }\n\n switch (msg.type) {\n case \"text\":\n if (msg.content) {\n const textAction: AgentAction = {\n id: msg.id || `action-${Date.now()}-${accumulatedActions.length}`,\n type: \"info\",\n content: msg.content,\n timestamp: Date.now(),\n };\n accumulatedActions.push(textAction);\n emitDataForThisRequest({\n actions: [...accumulatedActions],\n });\n }\n break;\n\n case \"info\":\n case \"analysis\":\n if (msg.content) {\n const action: AgentAction = {\n id: msg.id || `action-${Date.now()}`,\n type: msg.type as \"info\" | \"analysis\",\n content: msg.content,\n timestamp: Date.now(),\n artifacts: msg.artifacts,\n };\n accumulatedActions.push(action);\n emitDataForThisRequest({\n actions: [...accumulatedActions],\n });\n }\n break;\n\n case \"agent_outcome\":\n case \"final_response\":\n if (msg.content) {\n accumulatedContent = msg.content;\n controller.enqueue({\n type: \"text-delta\",\n delta: msg.content,\n id: messageId,\n });\n }\n\n if (msg.artifacts && Array.isArray(msg.artifacts)) {\n accumulatedArtifacts.push(...msg.artifacts);\n }\n\n if (msg.heading) {\n accumulatedHeading = msg.heading;\n }\n\n if (msg.confidence_str) {\n accumulatedConfidence = msg.confidence_str;\n }\n\n emitDataForThisRequest({\n content: accumulatedContent,\n artifacts: [...accumulatedArtifacts],\n heading: accumulatedHeading,\n confidence_str: accumulatedConfidence,\n });\n break;\n\n case \"tool_use\": {\n const toolName = msg.tool || \"unknown\";\n const toolCallId = `tool-${messageId}-${Date.now()}`;\n const toolInput = msg.todos || msg.input || {};\n\n if (toolName === \"TodoWrite\" && msg.todos && Array.isArray(msg.todos)) {\n accumulatedTodos.length = 0;\n accumulatedTodos.push(...msg.todos);\n emitDataForThisRequest({ todos: [...accumulatedTodos] });\n }\n\n controller.enqueue({\n type: \"tool-input-start\",\n toolCallId,\n toolName,\n });\n\n controller.enqueue({\n type: \"tool-input-delta\",\n toolCallId,\n inputTextDelta: JSON.stringify(toolInput),\n });\n\n controller.enqueue({\n type: \"tool-input-available\",\n toolCallId,\n toolName,\n input: toolInput,\n });\n break;\n }\n\n case \"citations\":\n if (msg.citations && Array.isArray(msg.citations)) {\n accumulatedCitations.push(...msg.citations);\n emitDataForThisRequest({\n citations: [...accumulatedCitations],\n });\n }\n break;\n\n case \"require_user_action\":\n if (msg.interaction) {\n accumulatedInteraction = msg.interaction as InteractionRequest;\n emitDataForThisRequest({\n interaction: accumulatedInteraction,\n });\n controller.enqueue({\n type: \"text-delta\",\n delta: `\\n[Interaction Required: ${msg.interaction.type}]\\n${msg.interaction.prompt}\\n`,\n id: messageId,\n });\n }\n break;\n\n case \"error\":\n controller.enqueue({\n type: \"error\",\n errorText: msg.content || msg.error || \"Unknown error\",\n });\n break;\n\n case \"complete\":\n case \"stream_complete\":\n if (!hasEnded) {\n hasEnded = true;\n\n emitDataForThisRequest({\n content: accumulatedContent,\n actions: [...accumulatedActions],\n artifacts: [...accumulatedArtifacts],\n citations: [...accumulatedCitations],\n todos: [...accumulatedTodos],\n interaction: accumulatedInteraction,\n heading: accumulatedHeading,\n confidence_str: accumulatedConfidence,\n });\n\n controller.enqueue({\n type: \"text-end\",\n id: messageId,\n });\n controller.enqueue({\n type: \"finish\",\n finishReason: \"stop\",\n });\n }\n break;\n\n default:\n // Unknown message type - ignore\n break;\n }\n } catch {\n // Not JSON - might be markdown stream, pass as text\n if (trimmed && !trimmed.startsWith(\"{\")) {\n if (!hasStarted) {\n controller.enqueue({\n type: \"text-start\",\n id: messageId,\n });\n hasStarted = true;\n }\n accumulatedContent += trimmed + \"\\n\";\n controller.enqueue({\n type: \"text-delta\",\n delta: trimmed + \"\\n\",\n id: messageId,\n });\n emitDataForThisRequest({ content: accumulatedContent });\n }\n }\n }\n }\n\n // End message if we started but didn't get explicit end\n if (hasStarted && !hasEnded) {\n hasEnded = true;\n\n emitDataForThisRequest({\n content: accumulatedContent,\n actions: [...accumulatedActions],\n artifacts: [...accumulatedArtifacts],\n citations: [...accumulatedCitations],\n todos: [...accumulatedTodos],\n interaction: accumulatedInteraction,\n heading: accumulatedHeading,\n confidence_str: accumulatedConfidence,\n });\n\n controller.enqueue({\n type: \"text-end\",\n id: messageId,\n });\n controller.enqueue({\n type: \"finish\",\n finishReason: \"stop\",\n });\n }\n\n controller.close();\n } catch (error) {\n controller.error(error);\n }\n },\n });\n }\n}\n","/**\n * useAgentChat - Primary chat hook with AI SDK 6 integration\n *\n * This hook provides the main chat interface, using AI SDK 6's useChat\n * with custom transports for our backend format.\n *\n * Architecture:\n * - Uses LegacyBackendTransport for standard JSON streaming\n * - Uses MarkdownStreamTransport for Query Analysis mode\n * - Dispatches to Redux for component consumption\n * - V1 fallback for proceed endpoint (isResponseToPrompt)\n */\n\nimport { useChat, type UIMessage } from \"@ai-sdk/react\";\nimport { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport {\n ChatResponse,\n LoadingState,\n MessageAttachment,\n ChatMessage,\n} from \"../types\";\nimport { useChatContext } from \"../ChatProvider\";\nimport {\n setAbortController,\n clearActions,\n addAction,\n setLoadingState,\n addMessage,\n setError,\n updateContext,\n setTodos,\n clearTodos,\n} from \"../store/chatSlice\";\nimport { processAgentStream } from \"../utils/streamProcessor\";\nimport {\n AccumulatedStreamData,\n createEmptyAccumulatedData,\n LegacyBackendTransport,\n MarkdownStreamTransport,\n TransportDataCallback,\n} from \"./transports\";\nimport { ChatRequestOptions } from \"ai\";\nimport { PromptInputMessage } from \"@altimateai/lego\";\n\n// Re-export types for consumers\nexport type { UIMessage, AccumulatedStreamData };\n\n// ==========================================================================\n// HOOK RETURN TYPE\n// ==========================================================================\n\n/**\n * Return type for useAgentChat hook\n */\nexport interface UseAgentChatReturn {\n sendMessage: (params: {\n message: string;\n isResponseToPrompt?: boolean;\n context?: Record<string, unknown>;\n dontAddUserMessage?: boolean;\n files?: PromptInputMessage[\"files\"][number][];\n }) => Promise<ChatResponse>;\n updateContextAndSendMessage: (\n message: string,\n context: Record<string, unknown>,\n ) => Promise<void>;\n regenerate: (\n params?: {\n messageId?: string;\n } & ChatRequestOptions,\n ) => Promise<void>;\n loadV1Session: (v1Messages: ChatMessage[]) => void;\n getV1Messages: () => ChatMessage[];\n messages: UIMessage[];\n status: string;\n accumulatedDataRef: React.MutableRefObject<AccumulatedStreamData>;\n}\n\n// ==========================================================================\n// V1 COMPATIBILITY UTILITIES\n// Convert between AI SDK UIMessage format and V1 ChatMessage/ChatResponse\n// ==========================================================================\n\n/**\n * Extract text content from UIMessage parts array\n */\nconst extractTextFromParts = (parts: UIMessage[\"parts\"]): string => {\n return (\n parts\n ?.filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\") || \"\"\n );\n};\n\n/**\n * Convert AccumulatedStreamData to V1 ChatResponse.\n */\nconst toV1ChatResponse = (accData: AccumulatedStreamData): ChatResponse => ({\n content: accData.content,\n role: \"assistant\",\n timestamp: Date.now(),\n heading: accData.heading || \"\",\n actions: accData.actions,\n artifacts: accData.artifacts,\n todos: accData.todos.length > 0 ? accData.todos : undefined,\n interaction: accData.interaction,\n});\n\n/**\n * Convert V1 ChatMessage to V2 UIMessage format.\n */\nconst fromV1ChatMessage = (message: ChatMessage): UIMessage => ({\n id: message.id,\n role: message.role,\n parts: [{ type: \"text\" as const, text: message.content }],\n});\n\n/**\n * Convert array of V1 ChatMessages to V2 UIMessages.\n */\nconst fromV1ChatMessages = (messages: ChatMessage[]): UIMessage[] => {\n return messages.map(fromV1ChatMessage);\n};\n\n/**\n * Extract AccumulatedStreamData from a V1 ChatMessage.\n */\nconst extractAccumulatedDataFromV1 = (\n message: ChatMessage,\n): AccumulatedStreamData => ({\n content: message.content,\n actions: message.actions || [],\n artifacts: message.artifacts || [],\n citations: message.citations || [],\n todos: message.todos || [],\n interaction: message.interaction,\n heading: message.heading || \"\",\n confidence_str: message.confidence_str,\n});\n\n// ==========================================================================\n// MAIN HOOK\n// ==========================================================================\n\nexport const useAgentChat = (): UseAgentChatReturn => {\n const {\n dispatch,\n currentSessionId,\n sessions,\n initialValidation,\n urls,\n requestParams,\n isMarkdownResponse,\n } = useChatContext();\n\n // ==========================================================================\n // ACCUMULATED DATA MANAGEMENT\n // ==========================================================================\n\n // Accumulated data from the current/last stream\n const accumulatedDataRef = useRef<AccumulatedStreamData>(\n createEmptyAccumulatedData(),\n );\n\n // Pending request resolution - used to await stream completion\n const pendingRequestRef = useRef<{\n resolve: (_response: ChatResponse) => void;\n reject: (_error: Error) => void;\n } | null>(null);\n\n // Track dispatched actions/todos/content to avoid duplicates during progressive updates\n const dispatchedActionsCountRef = useRef<number>(0);\n const lastDispatchedContentLengthRef = useRef<number>(0);\n // Stable message ID for the current streaming message (upsert pattern)\n const streamingMessageIdRef = useRef<string | null>(null);\n\n // Request ID tracking to prevent race conditions after cancel\n // When a request is cancelled and a new one starts, old callbacks might still arrive\n // We use this to detect and ignore stale callbacks\n const currentRequestIdRef = useRef<number>(0);\n const callbackRequestIdRef = useRef<number>(0);\n\n // Refs to avoid stale closures in the transport callback\n const dispatchRef = useRef(dispatch);\n const currentSessionIdRef = useRef(currentSessionId);\n\n // Keep refs in sync with current values\n useEffect(() => {\n dispatchRef.current = dispatch;\n currentSessionIdRef.current = currentSessionId;\n }, [dispatch, currentSessionId]);\n\n // Stable callback for transport to call directly (avoids global Map issues)\n const handleTransportData = useCallback<TransportDataCallback>(\n (data: Partial<AccumulatedStreamData>) => {\n // Guard against stale callbacks from cancelled requests\n // When a request is cancelled and a new one starts immediately, old callbacks might still arrive\n // We detect this by comparing the callback's request ID with the current active request\n if (callbackRequestIdRef.current !== currentRequestIdRef.current) {\n // This callback is from an old cancelled request, ignore it\n return;\n }\n\n // Merge new data into accumulated data\n const current = accumulatedDataRef.current;\n accumulatedDataRef.current = {\n content: data.content ?? current.content,\n actions: data.actions ?? current.actions,\n artifacts: data.artifacts ?? current.artifacts,\n citations: data.citations ?? current.citations,\n todos: data.todos ?? current.todos,\n interaction: data.interaction ?? current.interaction,\n heading: data.heading ?? current.heading,\n confidence_str: data.confidence_str ?? current.confidence_str,\n };\n\n // Progressive streaming dispatch\n const accData = accumulatedDataRef.current;\n const currentDispatch = dispatchRef.current;\n const sessionId = currentSessionIdRef.current;\n\n // Dispatch new actions that haven't been dispatched yet\n if (accData.actions.length > dispatchedActionsCountRef.current) {\n const newActions = accData.actions.slice(\n dispatchedActionsCountRef.current,\n );\n newActions.forEach((action) => {\n currentDispatch(addAction(action));\n });\n dispatchedActionsCountRef.current = accData.actions.length;\n }\n\n // Dispatch new todos that haven't been dispatched yet\n currentDispatch(setTodos(accData.todos));\n\n // Progressive content streaming\n if (\n accData.content.length > lastDispatchedContentLengthRef.current &&\n sessionId &&\n streamingMessageIdRef.current\n ) {\n const contentLenDiff =\n accData.content.length - lastDispatchedContentLengthRef.current;\n // Throttle updates: only dispatch if content grew by at least 50 chars\n if (contentLenDiff >= 50 || accData.content.length < 50) {\n currentDispatch(\n addMessage({\n sessionId,\n id: streamingMessageIdRef.current,\n content: accData.content,\n role: \"assistant\",\n timestamp: Date.now(),\n heading: accData.heading || \"\",\n actions: accData.actions || [],\n artifacts: accData.artifacts || [],\n citations: accData.citations || [],\n todos: accData.todos || [],\n interaction: accData.interaction,\n confidence_str: accData.confidence_str,\n }),\n );\n lastDispatchedContentLengthRef.current = accData.content.length;\n }\n }\n },\n [],\n ); // Empty deps - uses refs for all changing values\n\n // ==========================================================================\n // TRANSPORT SETUP\n // ==========================================================================\n\n const currentSession = sessions[currentSessionId || \"\"];\n const currentContext = currentSession?.context || {};\n const apiUrl = `${urls?.origin || \"\"}${urls?.askPath || \"/agent/ask\"}`;\n\n const headersRecord = useMemo((): Record<string, string> | undefined => {\n if (!requestParams?.headers) return undefined;\n if (requestParams.headers instanceof Headers) {\n return Object.fromEntries(requestParams.headers.entries());\n }\n if (Array.isArray(requestParams.headers)) {\n return Object.fromEntries(requestParams.headers);\n }\n return requestParams.headers as Record<string, string>;\n }, [requestParams?.headers]);\n\n // Fresh session data pattern - store in ref so transport can access current values\n // Updated synchronously during render (before any effects) to ensure getBody always has latest data\n const sessionDataRef = useRef({\n context: currentContext,\n session_id: currentSessionId,\n model_type: currentSession?.selectedModel,\n mode: \"ask\",\n datamates: currentSession?.datamates,\n });\n\n // Update ref synchronously during render - this ensures getBody() always reads the latest data\n // even if called immediately after a re-render (before effects run)\n sessionDataRef.current = {\n context: currentSession?.context || {},\n session_id: currentSessionId,\n model_type: currentSession?.selectedModel,\n mode: \"ask\",\n datamates: currentSession?.datamates,\n };\n\n const getBody = useCallback((): Record<string, unknown> => {\n const body = { ...sessionDataRef.current };\n // Filter out null/undefined model_type to maintain backwards compatibility\n if (body.model_type === null || body.model_type === undefined) {\n delete body.model_type;\n }\n return body;\n }, []);\n\n const transport = useMemo(() => {\n return isMarkdownResponse\n ? new MarkdownStreamTransport({\n api: apiUrl,\n headers: headersRecord,\n getBody,\n onData: handleTransportData,\n })\n : new LegacyBackendTransport({\n api: apiUrl,\n headers: headersRecord,\n getBody,\n onData: handleTransportData,\n });\n }, [apiUrl, isMarkdownResponse, headersRecord, getBody, handleTransportData]);\n\n // ==========================================================================\n // AI SDK useChat INTEGRATION\n // ==========================================================================\n\n const {\n messages,\n setMessages,\n sendMessage: sdkSendMessage,\n status,\n stop: sdkStop,\n regenerate: sdkRegenerate,\n } = useChat({\n messages: fromV1ChatMessages(currentSession?.messages || []),\n id: currentSessionId || undefined,\n transport,\n onFinish: () => {\n // Resolve pending request with V1-compatible ChatResponse\n if (pendingRequestRef.current) {\n const response = toV1ChatResponse(accumulatedDataRef.current);\n pendingRequestRef.current.resolve(response);\n pendingRequestRef.current = null;\n }\n },\n onError: (err) => {\n // Don't reject for AbortError - the error will propagate through sdkSendMessage throw\n // This prevents race conditions where a newer request has started and\n // overwritten pendingRequestRef before this (old) request's onError is called\n const isAbortError = err instanceof Error && err.name === \"AbortError\";\n if (isAbortError) {\n return;\n }\n if (pendingRequestRef.current) {\n pendingRequestRef.current.reject(\n err instanceof Error ? err : new Error(String(err)),\n );\n pendingRequestRef.current = null;\n }\n },\n });\n\n // Track LATEST messages for synchronous access (fixes stale closure issue)\n const latestMessagesRef = useRef<UIMessage[]>([]);\n\n useEffect(() => {\n latestMessagesRef.current = [...messages];\n }, [messages]);\n\n // ==========================================================================\n // HELPER FUNCTIONS\n // ==========================================================================\n\n const createAttachmentsFromContext = (\n files: PromptInputMessage[\"files\"][number][],\n ): MessageAttachment[] => {\n const attachmentsData: MessageAttachment[] = [];\n\n if (files.length > 0) {\n files.forEach(\n (file: PromptInputMessage[\"files\"][number], index: number) => {\n attachmentsData.push({\n id: `temp-${Date.now()}-${index}`,\n attachment_name: file.filename || \"unnamed\",\n file_type: file.mediaType || null,\n s3_url: null,\n extracted_content: null,\n order: index,\n attachment_type: \"file\",\n attachment_reference_id: null,\n file_size: file.size || null,\n created_on: new Date().toISOString(),\n });\n },\n );\n }\n\n return attachmentsData;\n };\n\n // ==========================================================================\n // V1 COMPATIBILITY API\n // ==========================================================================\n\n /**\n * Load an existing V1 session.\n */\n const loadV1Session = useCallback(\n (v1Messages: ChatMessage[]) => {\n const uiMessages = fromV1ChatMessages(v1Messages);\n setMessages(uiMessages);\n\n const lastAssistant = [...v1Messages]\n .reverse()\n .find((m) => m.role === \"assistant\");\n if (lastAssistant) {\n accumulatedDataRef.current =\n extractAccumulatedDataFromV1(lastAssistant);\n } else {\n accumulatedDataRef.current = createEmptyAccumulatedData();\n }\n },\n [setMessages],\n );\n\n /**\n * Get all messages in V1 ChatMessage format.\n */\n const getV1Messages = useCallback((): ChatMessage[] => {\n return messages.map((msg, index) => {\n const isLastAssistant =\n msg.role === \"assistant\" && index === messages.length - 1;\n const accData = isLastAssistant\n ? accumulatedDataRef.current\n : createEmptyAccumulatedData();\n\n return {\n id: msg.id,\n content: accData.content || extractTextFromParts(msg.parts),\n role: msg.role as \"user\" | \"assistant\",\n timestamp: Date.now(),\n heading: accData.heading || \"\",\n actions: accData.actions,\n artifacts: accData.artifacts,\n citations: accData.citations.length > 0 ? accData.citations : undefined,\n todos: accData.todos.length > 0 ? accData.todos : undefined,\n interaction: accData.interaction,\n confidence_str: accData.confidence_str,\n };\n });\n }, [messages]);\n\n // ==========================================================================\n // MAIN SEND MESSAGE FUNCTION\n // ==========================================================================\n\n const updateContextAndSendMessage = async (\n message: string,\n context: Record<string, unknown>,\n ) => {\n dispatch(\n updateContext({\n sessionId: currentSessionId!,\n context,\n }),\n );\n await sendMessage({\n message,\n context,\n });\n };\n\n const sendMessage = async ({\n message,\n isResponseToPrompt = false,\n context: newContext,\n dontAddUserMessage = false,\n files = [],\n }: {\n message: string;\n isResponseToPrompt?: boolean;\n context?: Record<string, unknown>;\n dontAddUserMessage?: boolean;\n files?: PromptInputMessage[\"files\"][number][];\n }): Promise<ChatResponse> => {\n if (!currentSessionId) {\n throw new Error(\"No active session\");\n }\n\n const context = {\n ...(sessions[currentSessionId]?.context || {}),\n ...newContext,\n };\n\n // Add user message with attachments\n if (!dontAddUserMessage) {\n const attachments = createAttachmentsFromContext(files);\n dispatch(\n addMessage({\n sessionId: currentSessionId,\n id: Date.now().toString(),\n content: message,\n role: \"user\",\n timestamp: Date.now(),\n heading: \"\",\n attachments: attachments.length > 0 ? attachments : undefined,\n }),\n );\n }\n\n // Create new AbortController and clear previous actions and todos\n const abortController = new AbortController();\n\n // Connect our abort controller to the AI SDK's stop function\n // When CancelGenerationButton aborts our controller, this will also stop the SDK request\n const handleAbort = () => {\n sdkStop();\n };\n abortController.signal.addEventListener(\"abort\", handleAbort);\n\n dispatch(\n setLoadingState({\n state: LoadingState.LOADING,\n sessionId: currentSessionId,\n }),\n );\n dispatch(setAbortController(abortController));\n dispatch(clearActions());\n dispatch(clearTodos());\n\n // Reset progressive dispatch counters for new message\n dispatchedActionsCountRef.current = 0;\n lastDispatchedContentLengthRef.current = 0;\n streamingMessageIdRef.current = (Date.now() + 1).toString();\n\n // Increment request ID to invalidate any pending callbacks from previous requests\n // This must happen BEFORE resetting accumulated data so stale callbacks are ignored\n currentRequestIdRef.current++;\n callbackRequestIdRef.current = currentRequestIdRef.current;\n\n // Reset accumulated data for new request\n accumulatedDataRef.current = createEmptyAccumulatedData();\n\n let hasError = false;\n try {\n await initialValidation?.({ context });\n\n // PRIMARY PATH: AI SDK 6 (for normal requests)\n if (!isResponseToPrompt) {\n // Create a promise that resolves when onFinish is called\n const responsePromise = new Promise<ChatResponse>((resolve, reject) => {\n pendingRequestRef.current = { resolve, reject };\n });\n\n // Send via AI SDK\n if (files.length) {\n await sdkSendMessage({\n text: message,\n files,\n });\n } else {\n await sdkSendMessage({\n role: \"user\",\n parts: [{ type: \"text\", text: message }],\n });\n }\n\n // Wait for stream completion\n const v2Response = await responsePromise;\n\n // Dispatch final message to Redux\n const accData = accumulatedDataRef.current;\n const finalId =\n streamingMessageIdRef.current || (Date.now() + 1).toString();\n dispatch(\n addMessage({\n sessionId: currentSessionId,\n id: finalId,\n content: v2Response.content,\n role: \"assistant\",\n timestamp: Date.now(),\n interaction: v2Response.interaction,\n heading: v2Response.heading,\n actions: v2Response.actions,\n artifacts: v2Response.artifacts,\n citations: accData?.citations,\n todos: v2Response.todos,\n confidence_str: accData?.confidence_str,\n }),\n );\n streamingMessageIdRef.current = null;\n\n return v2Response;\n }\n\n // ==========================================================================\n // FALLBACK: V1 for proceed endpoint (isResponseToPrompt)\n // ==========================================================================\n\n const data = {\n values: message,\n session_id: currentSessionId,\n };\n\n const url = urls?.origin || \"https://api.getaltimate.com\";\n const response = await fetch(\n `${url}${urls?.proceedPath || \"/agent/proceed\"}`,\n {\n ...requestParams,\n method: \"POST\",\n headers: {\n ...requestParams?.headers,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(data),\n signal: abortController.signal,\n },\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to send message\");\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new Error(\"No response stream available\");\n }\n\n const id = (Date.now() + 1).toString();\n let isAlreadyStreamed = false;\n\n const streamResult = await processAgentStream(reader, {\n isMarkdownResponse,\n callbacks: {\n onAction: (action) => {\n dispatch(addAction(action));\n },\n onCitation: () => {\n // Citations handled in onFinalResponse\n },\n onTodos: (todos) => {\n dispatch(setTodos(todos));\n },\n onMarkdownChunk: (content: string) => {\n isAlreadyStreamed = true;\n dispatch(\n addMessage({\n sessionId: currentSessionId,\n id,\n content,\n role: \"assistant\",\n timestamp: Date.now(),\n heading: \"Markdown Response\",\n actions: [],\n artifacts: [],\n citations: undefined,\n todos: undefined,\n }),\n );\n },\n onError: (error) => {\n console.error(\"Stream processing error:\", error);\n },\n onComplete: () => {\n // Stream processing complete\n },\n },\n });\n\n const finalResponse: ChatResponse = {\n content: streamResult.content,\n role: \"assistant\",\n timestamp: Date.now(),\n actions: streamResult.actions,\n artifacts: streamResult.artifacts || [],\n heading:\n streamResult.heading ||\n (isMarkdownResponse ? \"Markdown Response\" : \"\"),\n interaction: streamResult.interaction,\n todos: streamResult.todos,\n };\n\n if (!isAlreadyStreamed) {\n const finalId = (Date.now() + 1).toString();\n dispatch(\n addMessage({\n sessionId: currentSessionId,\n id: finalId,\n content: finalResponse.content,\n role: \"assistant\",\n timestamp: Date.now(),\n interaction: finalResponse.interaction,\n heading: finalResponse.heading,\n actions: finalResponse.actions,\n artifacts: finalResponse.artifacts,\n citations: streamResult.citations,\n todos: finalResponse.todos,\n confidence_str: streamResult.confidence_str,\n }),\n );\n }\n\n return finalResponse;\n } catch (error) {\n const isAbortError =\n error instanceof Error && error.name === \"AbortError\";\n hasError = true;\n\n if (!isAbortError) {\n // Handle non-abort errors gracefully - show error in UI via setError\n // RefetchSession component will display the error message\n const errorMessage =\n error instanceof Error ? error.message : \"Failed to send message\";\n dispatch(setError(errorMessage));\n // Don't rethrow - error is handled and shown in UI\n // Return undefined to signal no response (but not an unhandled error)\n return undefined as unknown as ChatResponse;\n }\n throw error;\n } finally {\n // Clean up abort event listener\n abortController.signal.removeEventListener(\"abort\", handleAbort);\n\n if (!abortController.signal.aborted) {\n dispatch(setAbortController(null));\n dispatch(\n setLoadingState({\n state: hasError ? LoadingState.ERROR : LoadingState.LOADED,\n sessionId: currentSessionId,\n }),\n );\n }\n\n // Clear uploaded_files from context after request completes (success, error, or cancel)\n // This must happen AFTER the request so the transport doesn't read the cleared value\n if (!dontAddUserMessage) {\n dispatch(\n updateContext({\n sessionId: currentSessionId,\n context: { ...context, uploaded_files: [] },\n }),\n );\n }\n }\n };\n\n return {\n sendMessage,\n updateContextAndSendMessage,\n regenerate: sdkRegenerate,\n // V1 compatibility\n loadV1Session,\n getV1Messages,\n // AI SDK state (for advanced use cases)\n messages,\n status,\n accumulatedDataRef,\n };\n};\n","import { FC } from \"react\";\nimport { TodoItem } from \"../../types\";\nimport {\n Queue,\n QueueSection,\n QueueSectionTrigger,\n QueueSectionLabel,\n QueueSectionContent,\n QueueList,\n QueueItem,\n QueueItemIndicator,\n QueueItemContent,\n} from \"@altimateai/lego\";\nimport { Stack } from \"@altimateai/lego\";\nimport { IconChecklist } from \"@tabler/icons-react\";\n\ninterface TodoProgressProps {\n todos: TodoItem[];\n}\n\nexport const TodoProgress: FC<TodoProgressProps> = ({ todos }) => {\n const completedCount = todos.filter(\n (todo) => todo.status === \"completed\",\n ).length;\n const totalCount = todos.length;\n\n return (\n <Queue className=\"al-w-fit\">\n <QueueSection defaultOpen>\n <QueueSectionTrigger>\n <QueueSectionLabel\n count={completedCount}\n label={`of ${totalCount} tasks complete`}\n icon={<IconChecklist className=\"al-size-4\" />}\n />\n </QueueSectionTrigger>\n <QueueSectionContent>\n <QueueList>\n {todos.map((todo) => (\n <QueueItem key={todo.id}>\n <Stack align=\"center\">\n <QueueItemIndicator status={todo.status} />\n <QueueItemContent status={todo.status}>\n {todo.content}\n </QueueItemContent>\n </Stack>\n </QueueItem>\n ))}\n </QueueList>\n </QueueSectionContent>\n </QueueSection>\n </Queue>\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 { Spinner, Stack } from \"@altimateai/lego\";\nimport { ChatbotProps, ChatSession, sessionStatusSchema } from \"../../types\";\nimport { useEffect } from \"react\";\n\nconst RefetchSession = ({\n error,\n currentSession,\n refetchSession,\n}: {\n error: string | null;\n currentSession: ChatSession | null;\n refetchSession?: ChatbotProps[\"refetchSession\"];\n}) => {\n useEffect(() => {\n if (\n (!error && currentSession?.status !== sessionStatusSchema.enum.pending) ||\n !refetchSession\n ) {\n return;\n }\n let intervalId: NodeJS.Timeout;\n const startRefetching = () => {\n intervalId = setInterval(() => {\n refetchSession();\n }, 30000); // refetch every 30 seconds\n };\n\n if (currentSession?.status === sessionStatusSchema.enum.pending) {\n startRefetching();\n }\n\n return () => {\n if (intervalId) {\n clearInterval(intervalId);\n }\n };\n }, [error, refetchSession, currentSession?.status]);\n\n if (currentSession?.status === sessionStatusSchema.enum.pending) {\n return (\n <Stack align=\"center\" role=\"alert\">\n <Spinner />\n Please wait until we process your request...\n </Stack>\n );\n }\n\n if (error) {\n return (\n <div\n className=\"al-text-red-500 al-p-4 al-rounded al-bg-red-50 al-mt-4\"\n role=\"alert\"\n >\n {error}\n </div>\n );\n }\n\n return null;\n};\n\nexport default RefetchSession;\n","import { FC, useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { Card, NativeSelect, ScrollArea } from \"@altimateai/lego\";\nimport { Stack } from \"@altimateai/lego\";\nimport { ChatbotProps, LoadingState } from \"./types\";\nimport { useChatContext } from \"./ChatProvider\";\nimport {\n clearActions,\n setSelectedModel,\n updateContext,\n} from \"./store/chatSlice\";\nimport {\n ContextPanel,\n LoadingIndicator,\n MessageList,\n QuestionForm,\n StatusUpdates,\n} from \"./components\";\nimport { useAgentChat } from \"./hooks/useAgentChat\";\nimport { ApiHelper } from \"../api/index\";\nimport { TodoProgress } from \"./components/todoProgress\";\nimport { cn } from \"../../shared/utils\";\nimport RefetchSession from \"./components/refetchSession/RefetchSession\";\n\nexport const Chatbot: FC<ChatbotProps> = ({\n helloMessage,\n context,\n fileUploadProps,\n contextOptions,\n placeholder,\n autoFocus,\n initialMessage,\n submitInitialMessageOnMount,\n questionFormLeftActions,\n refetchSession,\n chatboxStartPosition = \"bottom\",\n helloMessageFooter,\n handleSavePrompt,\n showSavePromptButton = false,\n}) => {\n const {\n dispatch,\n currentSessionId,\n sessions,\n loadingState,\n error,\n currentActions,\n currentTodos = [],\n requestParams,\n urls,\n models,\n classNames,\n components,\n } = useChatContext();\n const { sendMessage } = useAgentChat();\n\n // Add refs for scroll management\n const messagesContainerRef = useRef<HTMLDivElement>(null);\n const lastMessageRef = useRef<HTMLDivElement>(null);\n const currentSession = currentSessionId ? sessions[currentSessionId] : null;\n // Guard to prevent multiple initial message submissions (fixes infinite loop with V2 verification)\n const initialMessageSubmittedRef = useRef(false);\n\n // Reset the guard when session changes to a fresh session (no messages),\n // so that subsequent \"Analyse the query\" clicks can auto-submit again\n useEffect(() => {\n if (currentSessionId && !currentSession?.messages?.length) {\n initialMessageSubmittedRef.current = false;\n }\n }, [currentSessionId, currentSession?.messages?.length]);\n\n // Add ref to track if we were at bottom before update\n const wasAtBottomRef = useRef(true);\n\n useEffect(() => {\n // @ts-ignore\n ApiHelper.get = async (\n url: string,\n data: Record<string, unknown>,\n request: RequestInit = {},\n ) => {\n console.log(\"api helper get\", url, data, request);\n const queryParams = new URLSearchParams();\n Object.entries(data).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n queryParams.append(key, String(value));\n }\n });\n const queryString = queryParams.toString();\n const fullUrl = `${urls?.origin || \"https://api.getaltimate.com\"}${url}${\n queryString ? `?${queryString}` : \"\"\n }`;\n const response = await fetch(fullUrl, {\n ...requestParams,\n method: \"GET\",\n headers: {\n ...requestParams?.headers,\n \"Content-Type\": \"application/json\",\n },\n });\n if (!response.ok) {\n const json = (await response.json()) || {};\n throw new Error(json.detail?.detail || \"Failed to fetch\");\n }\n return response.json();\n };\n // @ts-ignore\n ApiHelper.post = async (\n url: string,\n data: Record<string, unknown>,\n request: RequestInit = {},\n ) => {\n console.log(\"api helper post\", url, data, request);\n const response = await fetch(\n `${urls?.origin || \"https://api.getaltimate.com\"}/${url}`,\n {\n ...requestParams,\n method: \"POST\",\n body: JSON.stringify(data),\n headers: {\n ...requestParams?.headers,\n \"Content-Type\": \"application/json\",\n },\n },\n );\n if (!response.ok) {\n const json = (await response.json()) || {};\n throw new Error(json.detail?.detail || \"Failed to fetch\");\n }\n return response.json();\n };\n }, [requestParams, urls?.origin]);\n\n useEffect(() => {\n if (currentSessionId) {\n dispatch(\n updateContext({ sessionId: currentSessionId, context: context || {} }),\n );\n }\n }, [currentSessionId, dispatch, context]);\n\n // Reset actions when loading state changes to loaded\n useEffect(() => {\n if (loadingState === LoadingState.LOADED) {\n dispatch(clearActions());\n }\n }, [loadingState, dispatch]);\n\n const hasMessages = !!currentSession?.messages?.length;\n const shouldShowMessagesContent =\n hasMessages || loadingState === LoadingState.LOADING || !!error;\n\n // Guard against showing duplicate StatusUpdates - if the last message already has actions\n // embedded, don't also show them via currentActions (prevents double rendering during streaming)\n const lastMessage =\n currentSession?.messages?.[currentSession.messages.length - 1];\n const lastMessageHasActions =\n lastMessage?.role === \"assistant\" &&\n (lastMessage?.actions?.length ?? 0) > 0;\n\n // Update isScrolledToBottom to be more reliable\n const isScrolledToBottom = () => {\n const container = messagesContainerRef.current;\n if (!container) return false;\n\n const threshold = 50;\n return (\n container.scrollHeight - container.scrollTop - container.clientHeight <\n threshold\n );\n };\n\n // Add scroll event listener to track scroll position\n useEffect(() => {\n const container = messagesContainerRef.current;\n if (!container) return;\n\n const handleScroll = () => {\n wasAtBottomRef.current = isScrolledToBottom();\n };\n\n container.addEventListener(\"scroll\", handleScroll);\n return () => container.removeEventListener(\"scroll\", handleScroll);\n }, []);\n\n // Modify scroll effect to use wasAtBottom state\n useEffect(() => {\n // Only scroll if we were at bottom before new content\n if (wasAtBottomRef.current) {\n const container = messagesContainerRef.current;\n if (container) {\n // Use requestAnimationFrame to ensure DOM has updated\n requestAnimationFrame(() => {\n container.scrollTop = container.scrollHeight;\n });\n }\n }\n }, [currentSession?.messages, currentActions]);\n\n // Add separate effect for loading and error states\n useEffect(() => {\n if (loadingState === LoadingState.LOADING || error) {\n const container = messagesContainerRef.current;\n if (container && wasAtBottomRef.current) {\n requestAnimationFrame(() => {\n container.scrollTop = container.scrollHeight;\n });\n }\n }\n }, [loadingState, error]);\n\n // Handle model selection\n const handleModelChange = useCallback(\n (model: string) => {\n if (currentSessionId) {\n dispatch(setSelectedModel({ sessionId: currentSessionId, model }));\n }\n },\n [currentSessionId, dispatch],\n );\n\n const handleSubmitQuestion = useCallback(\n async (message: string) => {\n if (!currentSessionId) return;\n\n try {\n await sendMessage({ message });\n } catch (e) {\n console.log(e);\n }\n },\n [currentSessionId, sendMessage],\n );\n\n // Auto-submit initial message on mount if enabled\n useEffect(() => {\n if (\n submitInitialMessageOnMount &&\n initialMessage &&\n currentSessionId &&\n !hasMessages &&\n !initialMessageSubmittedRef.current\n ) {\n initialMessageSubmittedRef.current = true;\n handleSubmitQuestion(initialMessage);\n }\n }, [\n submitInitialMessageOnMount,\n currentSessionId,\n initialMessage,\n hasMessages,\n handleSubmitQuestion,\n ]);\n\n // Create memoized array combining custom and default actions\n const allActions = useMemo(() => {\n const actions = [];\n\n // Add custom actions from props\n if (questionFormLeftActions) {\n actions.push(...questionFormLeftActions);\n }\n\n // Add ContextPanel\n actions.push(\n <ContextPanel\n fileUploadProps={fileUploadProps}\n contextOptions={contextOptions}\n />,\n );\n\n // Add Model selector if available\n if (models && models.length > 0) {\n actions.push(\n <NativeSelect\n aria-label=\"Model selection\"\n options={models}\n value={currentSession?.selectedModel || undefined}\n onChange={handleModelChange}\n placeholder=\"Select model\"\n variant=\"outline\"\n size=\"sm\"\n className=\"al-w-48\"\n />,\n );\n }\n\n return actions;\n }, [\n questionFormLeftActions,\n fileUploadProps,\n contextOptions,\n models,\n currentSession?.selectedModel,\n handleModelChange,\n ]);\n\n const justificationClass =\n !hasMessages && chatboxStartPosition === \"middle\"\n ? \"al-justify-center\"\n : !hasMessages && chatboxStartPosition === \"bottom\"\n ? \"al-justify-end\"\n : \"\";\n\n return (\n <Card\n className={cn(\n \"al-w-full al-h-full al-max-w-5xl al-flex al-flex-col\",\n classNames?.chatbot,\n )}\n role=\"region\"\n aria-label=\"Chat interface\"\n data-session-id={currentSessionId}\n >\n <ScrollArea\n ref={messagesContainerRef}\n className={cn(\n \"al-w-full\",\n \"al-transition-[flex-grow] al-duration-300 ease-in-out\",\n // added for fixing horizontal scroll issue due to display:table inside scrollarea\n \"[&_[aria-label='scrollable-content']>div]:!al-block\",\n {\n \"al-p-4\": shouldShowMessagesContent,\n \"al-flex-grow\": hasMessages,\n \"al-flex-grow-0\": !hasMessages,\n },\n classNames?.chatMessages,\n )}\n role=\"region\"\n aria-label=\"Chat messages\"\n >\n <div\n className={cn(\n \"al-w-full al-pb-2\",\n classNames?.chatbotScrollingContent,\n )}\n // ref={contentRef}\n >\n <Stack direction=\"column\" gap=\"5xl\">\n {hasMessages && (\n <MessageList\n messages={currentSession?.messages || []}\n handleSavePrompt={handleSavePrompt}\n showSavePromptButton={showSavePromptButton}\n />\n )}\n {loadingState === LoadingState.LOADING && (\n <>\n {currentActions.length > 0 && !lastMessageHasActions && (\n <div className=\"al-mt-2\">\n <StatusUpdates\n actions={currentActions}\n isComplete={false}\n aria-live=\"polite\"\n heading=\"\"\n />\n </div>\n )}\n {currentTodos.length > 0 && (\n <div className=\"al-mt-2\">\n <TodoProgress todos={currentTodos} />\n </div>\n )}\n {!currentActions.length && !currentTodos.length ? (\n <LoadingIndicator aria-label=\"Loading response\" />\n ) : null}\n </>\n )}\n <RefetchSession\n error={error}\n currentSession={currentSession}\n refetchSession={refetchSession}\n />\n </Stack>\n {/* Add an empty div as last element for scroll detection */}\n <div ref={lastMessageRef} />\n </div>\n </ScrollArea>\n <div\n className={cn(\n \"al-p-4 al-pb-0 al-transition-[flex-grow] al-duration-300 ease-in-out\",\n \"al-flex al-flex-col\",\n {\n \"al-flex-grow\": !hasMessages,\n \"al-flex-grow-0\": hasMessages,\n },\n justificationClass,\n classNames?.questionForm,\n )}\n role=\"region\"\n aria-label=\"Message input\"\n >\n <Stack direction=\"column\" gap=\"none\">\n {helloMessage && !hasMessages && (\n <div className=\"al-mb-4\" role=\"status\">\n {helloMessage}\n </div>\n )}\n <QuestionForm\n isLoading={loadingState === LoadingState.LOADING}\n placeholder={placeholder}\n autoFocus={autoFocus}\n // if submitted on mount, dont set in question form input\n initialMessage={\n submitInitialMessageOnMount ? undefined : initialMessage\n }\n contextOptions={contextOptions}\n components={{\n questionFormLeftActions: (\n <Stack align=\"center\">\n {allActions.map((action, index) => (\n <div key={index}>{action}</div>\n ))}\n </Stack>\n ),\n questionFormButtons: components?.questionFormButtons,\n }}\n />\n {helloMessageFooter && !hasMessages && (\n <div className=\"al-mt-4\" role=\"status\">\n {helloMessageFooter}\n </div>\n )}\n </Stack>\n </div>\n </Card>\n );\n};\n","import { FC, useState } from \"react\";\nimport {\n Badge,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n Button,\n} from \"@altimateai/lego\";\nimport { Artifact } from \"../../types\";\nimport { CodeBlock, Stack } from \"@altimateai/lego\";\nimport {\n DownloadIcon,\n ChevronDownIcon,\n ChevronUpIcon,\n} from \"../../../../assets/icons\";\nimport JSZip from \"jszip\";\n\ninterface ArtifactsProps {\n artifacts: Artifact[];\n}\n\nexport const Artifacts: FC<ArtifactsProps> = ({ artifacts }) => {\n const [selectedArtifact, setSelectedArtifact] = useState<Artifact | null>(\n null,\n );\n const [showAll, setShowAll] = useState(false);\n\n if (!artifacts?.length) return null;\n\n const visibleArtifacts = showAll ? artifacts : artifacts.slice(0, 3);\n const hasMore = artifacts.length > 3;\n\n const handleDownloadAll = async () => {\n const zip = new JSZip();\n\n // Add each artifact as a file to the zip\n artifacts.forEach((artifact) => {\n const fileName = `${artifact.name}.${artifact.type}`;\n zip.file(fileName, artifact.content);\n });\n\n try {\n // Generate the zip file\n const content = await zip.generateAsync({ type: \"blob\" });\n\n // Create a download link and trigger download\n const url = window.URL.createObjectURL(content);\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = \"artifacts.zip\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n } catch (error) {\n console.error(\"Error creating zip file:\", error);\n }\n };\n\n return (\n <div className=\"al-mt-4\" role=\"region\" aria-label=\"Artifacts\">\n <Stack direction=\"row\" justify=\"start\" align=\"center\" className=\"al-mb-2\">\n <div className=\"al-text-sm al-font-medium\">Artifacts:</div>\n <Button\n variant=\"link\"\n size=\"sm\"\n onClick={handleDownloadAll}\n className=\"al-gap-2\"\n >\n <DownloadIcon className=\"al-h-4 al-w-4\" />\n Download All\n </Button>\n </Stack>\n <Stack direction=\"row\" wrap align=\"center\">\n {visibleArtifacts.map((artifact) => (\n <button\n key={artifact.name}\n onClick={() => setSelectedArtifact(artifact)}\n className=\"al-p-0 al-m-0 al-border-0 al-bg-transparent\"\n aria-label={`View ${artifact.name} content`}\n >\n <Badge\n variant=\"outline\"\n className=\"hover:al-bg-gray-100 al-cursor-pointer\"\n >\n {artifact.name}\n </Badge>\n </button>\n ))}\n {hasMore && (\n <Button\n variant=\"link\"\n size=\"sm\"\n onClick={() => setShowAll(!showAll)}\n className=\"al-gap-1 al-text-gray-500\"\n aria-expanded={showAll}\n aria-label={showAll ? \"Show less artifacts\" : \"Show more artifacts\"}\n >\n {showAll ? (\n <>\n Show Less <ChevronUpIcon className=\"al-h-4 al-w-4\" />\n </>\n ) : (\n <>\n Show More ({artifacts.length - 3}){\" \"}\n <ChevronDownIcon className=\"al-h-4 al-w-4\" />\n </>\n )}\n </Button>\n )}\n </Stack>\n\n <Dialog\n open={!!selectedArtifact}\n onOpenChange={() => setSelectedArtifact(null)}\n >\n <DialogContent>\n <DialogHeader>\n <DialogTitle>{selectedArtifact?.name}</DialogTitle>\n </DialogHeader>\n <div className=\"al-mt-4\">\n <CodeBlock\n code={selectedArtifact?.content || \"\"}\n // @ts-expect-error valid type\n language={selectedArtifact?.type || \"sql\"}\n editorTheme=\"tomorrow\"\n theme=\"light\"\n />\n </div>\n </DialogContent>\n </Dialog>\n </div>\n );\n};\n","import React from \"react\";\nimport { Button } from \"@altimateai/lego\";\nimport { IconPlayerStopFilled } from \"@tabler/icons-react\";\nimport { ApiHelper } from \"../../../api/index\";\nimport { useChatContext } from \"../../ChatProvider\";\nimport { setLoadingState, updateContext } from \"../../store/chatSlice\";\nimport { LoadingState } from \"../../types\";\n\nexport const CancelGenerationButton: React.FC = () => {\n const { dispatch, abortController, currentSessionId, sessions } = useChatContext();\n\n const handleCancel = async () => {\n if (abortController) {\n abortController.abort();\n dispatch(\n setLoadingState({\n state: LoadingState.CANCELLED,\n sessionId: currentSessionId,\n })\n );\n\n // Clear uploaded_files when cancelling to ensure subsequent requests start fresh\n if (currentSessionId) {\n const currentContext = sessions[currentSessionId]?.context || {};\n dispatch(\n updateContext({\n sessionId: currentSessionId,\n context: { ...currentContext, uploaded_files: [] },\n })\n );\n }\n }\n\n // Call the cancel API with session ID\n if (currentSessionId) {\n try {\n await ApiHelper.post(\"studio/cancel\", {\n session_id: currentSessionId,\n });\n dispatch(\n setLoadingState({\n state: LoadingState.CANCELLED,\n sessionId: currentSessionId,\n })\n );\n } catch (error) {\n console.error(\"Failed to call cancel API:\", error);\n // Continue with the cancellation even if the API call fails\n }\n }\n };\n\n return (\n <Button\n variant=\"destructive\"\n size=\"icon\"\n className=\"!al-h-9 al-bg-red-100 hover:al-bg-red-200\"\n onClick={handleCancel}\n aria-label=\"Cancel generation\"\n title=\"Cancel generation\"\n >\n <IconPlayerStopFilled className=\"!al-h-6 !al-w-6 al-text-[#ef4444]\" />\n </Button>\n );\n};\n","import { Button } from \"@altimateai/lego\";\nimport { useState } from \"react\";\nimport CoachForm from \"../../../teammate/CoachForm\";\nimport { useChatContext } from \"../../ChatProvider\";\nimport { ThinkingIcon } from \"../../../../assets/icons\";\n\nexport const CoachAI = () => {\n const { taskLabel } = useChatContext();\n const [showCoachForm, setShowCoachForm] = useState(false);\n\n if (!taskLabel) return null;\n return (\n <>\n {showCoachForm ? (\n <CoachForm\n taskLabel={taskLabel}\n onClose={() => setShowCoachForm(false)}\n />\n ) : (\n <Button\n size=\"sm\"\n onClick={() => setShowCoachForm(true)}\n variant=\"outline\"\n >\n <ThinkingIcon />\n Coach Agent\n </Button>\n )}\n </>\n );\n};\n","import { FC, ReactNode, useId } from \"react\";\nimport {\n Button,\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n PromptInputActionAddAttachments,\n} from \"@altimateai/lego\";\nimport { useChatContext } from \"../../ChatProvider\";\nimport { Stack } from \"@altimateai/lego\";\nimport { updateContext } from \"../../store/chatSlice\";\nimport { ContextOption, LoadingState } from \"../../types\";\nimport {\n IconPlus,\n IconSquare,\n IconSquareCheckFilled,\n} from \"@tabler/icons-react\";\n\ninterface ContextPanelProps {\n fileUploadProps?: {\n allowedFiles: string;\n contextFieldKey: string;\n };\n contextOptions?: ContextOption[];\n children?: ReactNode[];\n}\n\nexport const ContextPanel: FC<ContextPanelProps> = ({\n children,\n fileUploadProps,\n contextOptions,\n}) => {\n const panelId = useId();\n const listboxId = useId();\n // const [selectedOptions, setSelectedOptions] = useState<{ [x: string]: string[] }>({});\n\n const { dispatch, currentSessionId, disableContext, loadingState, sessions } =\n useChatContext();\n const currentContext = currentSessionId\n ? sessions[currentSessionId]?.context || {}\n : {};\n\n const handleOptionSelect = (\n option: { id: string; label: string },\n key: string,\n ) => {\n const getSelectedOptions = () => {\n const values = currentContext[key] as string[] | undefined;\n if (values?.includes(option.id)) {\n return {\n ...currentContext,\n [key]: values?.filter((id) => id !== option.id),\n };\n }\n return { ...currentContext, [key]: [...(values || []), option.id] };\n };\n\n if (currentSessionId) {\n dispatch(\n updateContext({\n sessionId: currentSessionId,\n context: getSelectedOptions(),\n }),\n );\n }\n };\n\n if (disableContext) {\n return <div />;\n }\n\n return (\n <Stack\n id={panelId}\n role=\"region\"\n aria-label=\"Context selection\"\n direction=\"row\"\n align=\"center\"\n className=\"al-gap-2\"\n >\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <div className=\"al-relative\">\n <Button\n type=\"button\"\n variant=\"outline\"\n title=\"Add context or files\"\n aria-controls={listboxId}\n aria-haspopup=\"listbox\"\n aria-label=\"Add Context\"\n disabled={loadingState === LoadingState.LOADING}\n >\n <IconPlus className=\"al-h-5 al-w-5\" aria-hidden=\"true\" />\n </Button>\n </div>\n </DropdownMenuTrigger>\n <DropdownMenuContent className=\"al-p-0\" align=\"start\">\n {fileUploadProps && <PromptInputActionAddAttachments />}\n {contextOptions?.map((contextOption) => {\n if (contextOption.type === \"submenu\") {\n return (\n <DropdownMenuSub key={contextOption.key}>\n <DropdownMenuSubTrigger>\n {contextOption.icon}\n {contextOption.label}\n </DropdownMenuSubTrigger>\n <DropdownMenuSubContent className=\"!al-p-0\">\n {/*\n We can't use a standard <Combobox> here because nesting it inside a <DropdownMenu>\n causes issues with event handling and focus management, leading to unexpected\n behavior and crashes.\n\n Instead, we use a <Command> component inside a <DropdownMenuItem>. The item's\n `onSelect` event is prevented from closing the dropdown, allowing the user to\n interact with the searchable, multi-select list provided by the <Command> component.\n */}\n <DropdownMenuItem\n onSelect={(e) => e.preventDefault()}\n className=\"!al-p-0 al-cursor-default focus:al-bg-transparent\"\n >\n <Command className={\"!al-p-0\"}>\n <CommandInput placeholder=\"Search...\" />\n <CommandList className={\"!al-p-0\"}>\n <CommandEmpty>No results found.</CommandEmpty>\n <CommandGroup>\n {contextOption.options?.map((option) => (\n <CommandItem\n key={option.id}\n value={option.label}\n onSelect={() =>\n handleOptionSelect(option, contextOption.key)\n }\n className=\"al-flex al-items-center\"\n >\n {(\n currentContext[contextOption.key] as string[]\n )?.includes(option.id) ? (\n <IconSquareCheckFilled\n className=\"al-h-4 al-w-4 al-text-primary\"\n role=\"checkbox\"\n aria-checked=\"true\"\n />\n ) : (\n <IconSquare\n role=\"checkbox\"\n aria-checked=\"false\"\n className=\"al-h-4 al-w-4 al-text-muted-foreground\"\n />\n )}\n {option.label}\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n </DropdownMenuItem>\n </DropdownMenuSubContent>\n </DropdownMenuSub>\n );\n }\n if (contextOption.type === \"trigger\") {\n return (\n <DropdownMenuItem\n key={contextOption.key}\n onSelect={contextOption.handler}\n >\n {contextOption.icon}\n {contextOption.label}\n </DropdownMenuItem>\n );\n }\n return null;\n })}\n {children}\n </DropdownMenuContent>\n </DropdownMenu>\n </Stack>\n );\n};\n","import { FC } from \"react\";\nimport { useChatContext } from \"../../ChatProvider\";\nimport {\n setLoadingState,\n setError,\n deleteMessage,\n} from \"../../store/chatSlice\";\nimport { LoadingState } from \"../../types\";\nimport { useAgentChat } from \"../../hooks/useAgentChat\";\nimport { IconRefresh } from \"@tabler/icons-react\";\nimport { Button, Tooltip } from \"@altimateai/lego\";\n\ninterface RegenerateButtonProps {\n messageId: string;\n}\n\nexport const RegenerateButton: FC<RegenerateButtonProps> = ({ messageId }) => {\n const { sendMessage } = useAgentChat();\n const { dispatch, currentSessionId, sessions } = useChatContext();\n\n const handleRegenerate = async () => {\n if (!currentSessionId) return;\n\n const currentSession = sessions[currentSessionId];\n if (!currentSession) return;\n\n try {\n dispatch(\n setLoadingState({\n state: LoadingState.LOADING,\n sessionId: currentSessionId,\n }),\n );\n\n // Get the last user message before this assistant message\n const messages = currentSession.messages;\n const currentIndex = messages.findIndex((msg) => msg.id === messageId);\n if (currentIndex === -1) return;\n\n const lastUserMessage = messages\n .slice(0, currentIndex)\n .filter((msg) => msg.role === \"user\")\n .pop();\n\n if (!lastUserMessage) {\n throw new Error(\"No user message found to regenerate\");\n }\n\n // Delete the current assistant message\n dispatch(\n deleteMessage({\n sessionId: currentSessionId,\n messageId,\n }),\n );\n\n // Call API with the last user message\n await sendMessage({\n message: lastUserMessage.content,\n dontAddUserMessage: true,\n });\n } catch (err) {\n dispatch(\n setError(\n err instanceof Error ? err.message : \"Failed to regenerate response\",\n ),\n );\n } finally {\n dispatch(\n setLoadingState({\n state: LoadingState.UNINITIALIZED,\n sessionId: currentSessionId,\n }),\n );\n }\n };\n\n return (\n <Tooltip title={\"Regenerate response\"}>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={\"al-text-gray-500\"}\n onClick={handleRegenerate}\n aria-label=\"Regenerate response\"\n >\n <IconRefresh aria-hidden=\"true\" />\n </Button>\n </Tooltip>\n );\n};\n","import { FC } from \"react\";\nimport { Button, Tooltip } from \"@altimateai/lego\";\nimport { RegenerateButton } from \"../regenerateButton\";\nimport { Stack } from \"@altimateai/lego\";\nimport { IconCopy } from \"@tabler/icons-react\";\n\ninterface MessageMenuProps {\n messageId: string;\n content: string;\n}\n\nexport const ChatLastMessageActions: FC<MessageMenuProps> = ({\n messageId,\n content,\n}) => {\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(content);\n } catch (err) {\n console.error(\"Failed to copy message:\", err);\n }\n };\n\n return (\n <Stack direction=\"row\">\n <RegenerateButton messageId={messageId} />\n <Tooltip title={\"Copy message\"}>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={\"al-text-gray-500\"}\n onClick={handleCopy}\n aria-label=\"Copy response\"\n >\n <IconCopy aria-hidden=\"true\" />\n </Button>\n </Tooltip>\n </Stack>\n );\n};\n","import { useChatContext } from \"../ChatProvider\";\nimport { Feedback } from \"../types\";\nimport { updateMessageFeedback } from \"../store/chatSlice\";\n\nexport const useFeedback = () => {\n const { dispatch, currentSessionId, urls, requestParams } = useChatContext();\n\n const submitFeedback = async (messageId: string, feedback: Feedback) => {\n try {\n // Make API call to submit feedback\n const feedbackPath = urls?.feedbackPath || \"/agent/feedback\";\n const feedbackUrl = urls?.origin ? `${urls.origin}${feedbackPath}` : feedbackPath;\n const response = await fetch(feedbackUrl, {\n method: \"POST\",\n headers: {\n ...(requestParams?.headers || {}),\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n messageId: messageId.toString(),\n sessionId: currentSessionId,\n feedback,\n }),\n });\n\n if (!response.ok) {\n throw new Error(\"Failed to submit feedback\");\n }\n\n // Update local state\n dispatch(\n updateMessageFeedback({\n messageId,\n feedback,\n })\n );\n } catch (error) {\n console.error(\"Failed to submit feedback:\", error);\n throw error;\n }\n };\n\n return { submitFeedback };\n};\n","import { LoadingButton, Stack } from \"@altimateai/lego\";\nimport { Button, Textarea } from \"@altimateai/lego\";\nimport { FC, ReactNode, useState } from \"react\";\nimport { useChatContext } from \"../../ChatProvider\";\nimport { useFeedback } from \"../../hooks/useFeedback\";\nimport { IconThumbDown, IconThumbUp } from \"@tabler/icons-react\";\n\ninterface ChatFeedbackActionsProps {\n messageId: string;\n children?: ReactNode;\n}\n\nexport const ChatFeedbackActions: FC<ChatFeedbackActionsProps> = ({\n messageId,\n children,\n}) => {\n const { components } = useChatContext();\n const [showComment, setShowComment] = useState(false);\n const [comment, setComment] = useState(\"\");\n const [selectedRating, setSelectedRating] = useState<\n \"up\" | \"down\" | undefined\n >();\n const [isSubmitting, setIsSubmitting] = useState(false);\n const { submitFeedback } = useFeedback();\n\n const handleRatingClick = async (rating: \"up\" | \"down\") => {\n if (rating === selectedRating) {\n setSelectedRating(undefined);\n setShowComment(false);\n await submitFeedback(messageId, { rating: undefined });\n } else {\n setSelectedRating(rating);\n setShowComment(true);\n }\n };\n\n const handleSubmitFeedback = async () => {\n if (!selectedRating) return;\n\n setIsSubmitting(true);\n try {\n await submitFeedback(messageId, {\n rating: selectedRating,\n comment: comment.trim() || undefined,\n });\n setShowComment(false);\n } catch (error) {\n console.error(\"Failed to submit feedback:\", error);\n } finally {\n setIsSubmitting(false);\n }\n };\n\n if (components?.feedback) {\n return components.feedback;\n }\n\n return (\n <>\n <Stack\n direction=\"row\"\n justify={\"end\"}\n role=\"group\"\n aria-label=\"Message feedback\"\n >\n {children}\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={\n selectedRating === \"up\"\n ? \"al-bg-green-100 al-text-green-600\"\n : \"al-text-gray-500\"\n }\n onClick={() => handleRatingClick(\"up\")}\n disabled={isSubmitting}\n title=\"Like response\"\n aria-pressed={selectedRating === \"up\"}\n >\n <IconThumbUp aria-hidden=\"true\" />\n </Button>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n className={\n selectedRating === \"down\"\n ? \"al-bg-red-100 al-text-red-600\"\n : \"al-text-gray-500\"\n }\n onClick={() => handleRatingClick(\"down\")}\n disabled={isSubmitting}\n title=\"Dislike response\"\n aria-pressed={selectedRating === \"down\"}\n >\n <IconThumbDown aria-hidden=\"true\" />\n </Button>\n </Stack>\n {showComment && (\n <div className=\"al-mt-2 al-space-y-2 al-w-full al-basis-full al-px-2\">\n <Textarea\n placeholder=\"Tell us more about your feedback...\"\n value={comment}\n onChange={(e) => setComment(e.target.value)}\n className=\"al-min-h-20\"\n disabled={isSubmitting}\n aria-label=\"Feedback comment\"\n autoFocus\n />\n <Stack direction=\"row\">\n <LoadingButton\n size=\"sm\"\n onClick={handleSubmitFeedback}\n disabled={isSubmitting}\n aria-busy={isSubmitting}\n loading={isSubmitting}\n loadingText={\"Submitting...\"}\n >\n Submit Feedback\n </LoadingButton>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setShowComment(false)}\n disabled={isSubmitting}\n >\n Cancel\n </Button>\n </Stack>\n </div>\n )}\n </>\n );\n};\n","import { useState, FC, useCallback } from \"react\";\nimport { Button, toast } from \"@altimateai/lego\";\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogFooter,\n} from \"@altimateai/lego\";\nimport { Stack } from \"@altimateai/lego\";\nimport {\n TagsInput,\n TagsInputLabel,\n TagsInputList,\n TagsInputInput,\n TagsInputItem,\n TagsInputClear,\n} from \"@altimateai/lego\";\nimport { RefreshIcon } from \"../../../../assets/icons\";\n\ninterface EmailDialogProps {\n open: boolean;\n onClose: () => void;\n onSendEmail: (emails: string[]) => Promise<void>;\n isLoading?: boolean;\n}\n\nconst validateEmail = (email: string): boolean => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email.trim());\n};\n\nexport const EmailDialog: FC<EmailDialogProps> = ({\n open,\n onClose,\n onSendEmail,\n isLoading = false,\n}) => {\n const [emails, setEmails] = useState<string[]>([]);\n\n const handleValidateEmail = useCallback((email: string): boolean => {\n return validateEmail(email);\n }, []);\n\n const handleSendEmail = async () => {\n const validEmails = emails.filter((email) => validateEmail(email));\n\n if (validEmails.length === 0) {\n return;\n }\n\n try {\n await onSendEmail(validEmails);\n toast({\n title: \"Success\",\n description: `Email sent to ${validEmails.length} recipient${\n validEmails.length > 1 ? \"s\" : \"\"\n }.`,\n });\n // Clear form on success\n setEmails([]);\n onClose();\n } catch (error) {\n toast({\n title: \"Error\",\n description: \"Failed to send email. Please try again.\",\n variant: \"destructive\",\n });\n console.error(\"Failed to send email:\", error);\n }\n };\n\n const handleClose = () => {\n setEmails([]);\n onClose();\n };\n\n const validEmailCount = emails.filter((email) => validateEmail(email)).length;\n const hasInvalidEmails = emails.some((email) => !validateEmail(email));\n\n return (\n <Dialog open={open} onOpenChange={handleClose}>\n <DialogContent className=\"al-max-w-md\">\n <DialogHeader>\n <DialogTitle>Email Response</DialogTitle>\n </DialogHeader>\n\n <div className=\"al-space-y-4\">\n <TagsInput\n value={emails}\n onValueChange={(next) =>\n setEmails((prev) => {\n if (\n prev.length > 0 &&\n next.length === 1 &&\n !prev.includes(next[0])\n ) {\n return [...prev, next[0]];\n }\n return next;\n })\n }\n onValidate={handleValidateEmail}\n addOnPaste\n addOnTab\n delimiter=\",\"\n className=\"al-w-full\"\n disabled={isLoading}\n >\n <TagsInputLabel>Email Recipients</TagsInputLabel>\n <TagsInputList>\n {emails.map((email) => (\n <TagsInputItem\n key={email}\n value={email}\n className={\n validateEmail(email)\n ? \"al-bg-blue-100 al-text-blue-800 al-border-blue-200\"\n : \"al-bg-red-100 al-text-red-800 al-border-red-200\"\n }\n >\n {email}\n </TagsInputItem>\n ))}\n <TagsInputInput\n placeholder={\n emails.length === 0 ? \"Enter email addresses...\" : \"\"\n }\n disabled={isLoading}\n aria-label=\"add emails\"\n />\n </TagsInputList>\n <TagsInputClear asChild>\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"al-flex al-items-center al-gap-2 al-mt-2\"\n disabled={isLoading || emails.length === 0}\n >\n <RefreshIcon className=\"al-h-4 al-w-4\" />\n Clear All\n </Button>\n </TagsInputClear>\n </TagsInput>\n\n <div className=\"al-space-y-2\">\n <p className=\"al-text-xs al-text-gray-400\">\n Press Enter, Tab, or comma to add an email. Use Backspace to\n remove emails.\n </p>\n {hasInvalidEmails && (\n <p className=\"al-text-xs al-text-red-600\">\n Some email addresses are invalid and will be ignored.\n </p>\n )}\n {validEmailCount > 0 && (\n <div className=\"al-text-xs al-text-blue-400\">\n Ready to send to {validEmailCount} recipient\n {validEmailCount !== 1 ? \"s\" : \"\"}\n </div>\n )}\n </div>\n </div>\n\n <DialogFooter>\n <Stack direction=\"row\" justify=\"end\" gap=\"sm\">\n <Button variant=\"ghost\" onClick={handleClose} disabled={isLoading}>\n Cancel\n </Button>\n <Button\n onClick={handleSendEmail}\n disabled={validEmailCount === 0 || isLoading}\n aria-busy={isLoading}\n >\n {isLoading\n ? \"Sending...\"\n : `Send Email${validEmailCount > 1 ? \"s\" : \"\"}`}\n </Button>\n </Stack>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n};\n","import { IconShare3 } from \"@tabler/icons-react\";\nimport { Button } from \"@altimateai/lego\";\nimport { FC, useCallback, useState } from \"react\";\nimport { EmailDialog } from \"../emailDialog/EmailDialog\";\nimport { ApiHelper } from \"../../../api/index\";\n\ninterface ShareMessageProps {\n messageId: string;\n messageContent?: string;\n sessionId?: string;\n}\n\nexport const ShareMessage: FC<ShareMessageProps> = ({ messageId, messageContent, sessionId }) => {\n const [showEmailDialog, setShowEmailDialog] = useState(false);\n const [isEmailing, setIsEmailing] = useState(false);\n\n const handleSendEmail = useCallback(\n async (emails: string[]) => {\n if (!messageContent) {\n throw new Error(\"No message content available for email\");\n }\n\n setIsEmailing(true);\n try {\n const payload = {\n markdown: messageContent,\n emails: emails,\n message_id: messageId.toString(),\n session_id: sessionId,\n };\n\n await ApiHelper.post<{ success: boolean }>(\n \"studio/markdown_to_email_mailing_list\",\n payload\n );\n\n // Success - dialog will close automatically\n } catch (error) {\n console.error(\"Failed to send email:\", error);\n throw error; // Re-throw to let dialog handle error display\n } finally {\n setIsEmailing(false);\n }\n },\n [messageId, messageContent, sessionId]\n );\n\n return (\n <>\n <Button\n variant=\"outline\"\n className={\"al-bg-transparent al-text-gray-500\"}\n size=\"sm\"\n onClick={() => setShowEmailDialog(true)}\n disabled={!messageContent}\n aria-label=\"Email response\"\n >\n <IconShare3 aria-hidden=\"true\" />\n Share\n </Button>\n <EmailDialog\n open={showEmailDialog}\n onClose={() => setShowEmailDialog(false)}\n onSendEmail={handleSendEmail}\n isLoading={isEmailing}\n />\n </>\n );\n};\n","import { LoadingButton } from \"@altimateai/lego\";\nimport { IconDownload } from \"@tabler/icons-react\";\nimport { FC, useCallback, useState } from \"react\";\nimport { toast } from \"@altimateai/lego\";\nimport { useChatContext } from \"../../ChatProvider\";\n\ninterface DownloadMessageProps {\n messageId: string;\n messageContent?: string;\n sessionId?: string;\n}\n\nexport const DownloadMessage: FC<DownloadMessageProps> = ({\n messageId,\n messageContent,\n sessionId,\n}) => {\n const { urls, requestParams } = useChatContext();\n const [isDownloading, setIsDownloading] = useState(false);\n\n const handleDownloadPdf = useCallback(async () => {\n if (!messageContent) {\n console.warn(\"No message content available for PDF export\");\n return;\n }\n\n try {\n setIsDownloading(true);\n\n const endpoint = `${urls?.origin || \"\"}/studio/markdown_to_pdf`;\n const payload = { markdown: messageContent };\n\n const response = await fetch(endpoint, {\n method: \"POST\",\n headers: {\n ...(requestParams?.headers || {}),\n \"Content-Type\": \"application/json\",\n Accept: \"application/pdf\",\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n throw new Error(\"Failed to generate PDF\");\n }\n\n const blob = await response.blob();\n\n // Create filename with session and message ID\n const filename = sessionId\n ? `session-${sessionId}-assistant-response-${messageId}.pdf`\n : `assistant-response-${messageId}.pdf`;\n\n // Trigger download\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n a.remove();\n window.URL.revokeObjectURL(url);\n toast({\n title: \"Success\",\n description: \"PDF downloaded successfully.\",\n });\n } catch (e) {\n console.error(\"Failed to download PDF:\", e);\n toast({\n title: \"Error\",\n description: \"Failed to download PDF.\",\n variant: \"destructive\",\n });\n } finally {\n setIsDownloading(false);\n }\n }, [messageId, messageContent, sessionId, requestParams?.headers, urls?.origin]);\n\n return (\n <LoadingButton\n variant=\"outline\"\n className={\"al-bg-transparent al-text-gray-500\"}\n size=\"sm\"\n onClick={handleDownloadPdf}\n disabled={isDownloading || !messageContent}\n loading={isDownloading}\n loadingText={\"Downloading...\"}\n aria-label=\"Download as PDF\"\n >\n <IconDownload aria-hidden=\"true\" />\n Download\n </LoadingButton>\n );\n};\n","import { FC } from \"react\";\nimport { ShareMessage } from \"../action-buttons/ShareMessage\";\nimport { DownloadMessage } from \"../action-buttons/DownloadMessage\";\nimport { useChatContext } from \"../../ChatProvider\";\nimport { ChatFeedbackActions } from \"./ChatFeedbackActions\";\nimport { ChatLastMessageActions } from \"./ChatLastMessageActions\";\nimport { CoachAI } from \"../coachAI\";\n\ninterface ChatMessageActionsProps {\n messageId: string;\n messageContent: string;\n sessionId?: string;\n isLastMessage: boolean;\n}\n\nexport const ChatMessageActions: FC<ChatMessageActionsProps> = ({\n messageId,\n messageContent,\n sessionId,\n isLastMessage,\n}) => {\n const { components } = useChatContext();\n\n // Allow custom feedback component override\n if (components?.feedback) {\n return components.feedback;\n }\n\n return (\n <div\n role=\"group\"\n aria-label=\"Message actions\"\n className=\"al-mt-4 al-pt-4 al-border-t al-border-gray-200\"\n >\n {/* Flex container with wrap to allow feedback form on next line */}\n <div className=\"al-flex al-flex-row al-flex-wrap al-items-center al-justify-between al-gap-2\">\n {/* Left group: Share and Download */}\n <div\n className=\"al-flex al-flex-row al-items-center al-gap-1\"\n role=\"group\"\n aria-label=\"Message share and download\"\n >\n <ShareMessage\n messageId={messageId}\n messageContent={messageContent}\n sessionId={sessionId}\n />\n <DownloadMessage\n messageId={messageId}\n messageContent={messageContent}\n sessionId={sessionId}\n />\n {isLastMessage && <CoachAI />}\n </div>\n\n {/* Right group: Regenerate, Copy, Feedback buttons */}\n <ChatFeedbackActions messageId={messageId}>\n {isLastMessage && (\n <ChatLastMessageActions messageId={messageId} content={messageContent} />\n )}\n </ChatFeedbackActions>\n </div>\n </div>\n );\n};\n","import React, { FormEvent } from \"react\";\nimport { Checkbox, Button, Textarea } from \"@altimateai/lego\";\nimport { InteractionRequest } from \"../../types\";\nimport { useAgentChat } from \"../../hooks/useAgentChat\";\nimport { Markdown, Stack } from \"@altimateai/lego\";\n\ninterface InteractionPromptProps {\n interaction: InteractionRequest;\n}\n\nenum FormState {\n INITIAL,\n SUBMITTING,\n COMPLETED,\n}\n\nexport const InteractionPrompt: React.FC<InteractionPromptProps> = ({\n interaction,\n}) => {\n const { sendMessage } = useAgentChat();\n const [textValue, setTextValue] = React.useState(\"\");\n const [selectedValues, setSelectedValues] = React.useState<string[]>([]);\n const [formState, setFormState] = React.useState<FormState>(\n FormState.INITIAL,\n );\n\n const handleSubmit = async (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n setFormState(FormState.SUBMITTING);\n\n let value: string;\n switch (interaction.type) {\n case \"text\":\n value = textValue;\n break;\n case \"select\":\n value = selectedValues[0] || \"\";\n break;\n case \"multiSelect\":\n value = selectedValues.join(\",\");\n break;\n case \"confirm\":\n value = ((e.nativeEvent as SubmitEvent)?.submitter as HTMLButtonElement)\n ?.value;\n break;\n default:\n value = \"\";\n }\n\n try {\n await sendMessage({\n message: value,\n isResponseToPrompt: true,\n });\n } catch (error) {\n console.error(\"Failed to submit interaction:\", error);\n } finally {\n setFormState(FormState.COMPLETED);\n }\n };\n\n const handleCancel = async () => {\n try {\n await sendMessage({\n message: JSON.stringify({\n interactionId: interaction.id,\n value: \"cancelled\",\n }),\n });\n } catch (error) {\n console.error(\"Failed to cancel interaction:\", error);\n }\n };\n\n const renderInput = () => {\n switch (interaction.type) {\n case \"text\":\n return (\n <Textarea\n value={textValue}\n onChange={(e) => setTextValue(e.target.value)}\n required={interaction.required}\n aria-label=\"Prompt input\"\n />\n );\n case \"select\":\n case \"multiSelect\":\n return (\n <div className=\"al-space-y-2\">\n {interaction.choices?.map((choice) => (\n <label\n key={choice.id}\n className=\"al-flex al-items-center al-gap-2\"\n >\n {\" \"}\n <Checkbox\n checked={selectedValues.includes(choice.value)}\n onCheckedChange={(checked) => {\n if (interaction.type === \"select\") {\n setSelectedValues(checked ? [choice.value] : []);\n } else {\n setSelectedValues((prev) =>\n checked\n ? [...prev, choice.value]\n : prev.filter((v) => v !== choice.value),\n );\n }\n }}\n />\n <span>{choice.label}</span>\n </label>\n ))}\n </div>\n );\n case \"confirm\":\n return (\n <Stack direction=\"row\">\n <Button\n disabled={\n formState === FormState.SUBMITTING ||\n formState === FormState.COMPLETED\n }\n value=\"yes\"\n >\n Yes\n </Button>\n <Button\n variant=\"outline\"\n value=\"no\"\n disabled={\n formState === FormState.SUBMITTING ||\n formState === FormState.COMPLETED\n }\n >\n No\n </Button>\n </Stack>\n );\n }\n };\n\n return (\n <form\n onSubmit={handleSubmit}\n className=\"al-space-y-4\"\n role=\"region\"\n aria-label=\"Interaction\"\n >\n <div className=\"al-font-medium\">\n <Markdown content={interaction.prompt} />\n </div>\n {renderInput()}\n {interaction.type !== \"confirm\" && (\n <Stack direction=\"row\">\n <Button\n type=\"submit\"\n disabled={\n formState === FormState.SUBMITTING ||\n formState === FormState.COMPLETED\n }\n >\n Submit\n </Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n onClick={handleCancel}\n disabled={\n formState === FormState.SUBMITTING ||\n formState === FormState.COMPLETED\n }\n >\n Cancel\n </Button>\n </Stack>\n )}\n </form>\n );\n};\n","import { FC } from \"react\";\nimport { Card } from \"@altimateai/lego\";\nimport { Stack } from \"@altimateai/lego\";\n\nexport const LoadingIndicator: FC = () => {\n return (\n <Card className=\"al-p-4 al-mb-4 al-border-0 al-shadow-none\">\n <Stack direction=\"row\" align=\"center\" role=\"status\" aria-live=\"polite\">\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 <span className=\"al-sr-only\">Loading response</span>\n </Stack>\n </Card>\n );\n};\n","import { FC, useState } from \"react\";\nimport { AgentAction } from \"../../types\";\nimport { Markdown, Stack } from \"@altimateai/lego\";\nimport { Artifacts } from \"../artifacts\";\nimport {\n ChainOfThought,\n ChainOfThoughtHeader,\n ChainOfThoughtContent,\n ChainOfThoughtStep,\n} from \"@altimateai/lego\";\nimport {\n IconSearch,\n IconMail,\n IconCode,\n IconDatabase,\n IconBrain,\n IconLoader2,\n} from \"@tabler/icons-react\";\nimport { cn } from \"../../../../shared/utils\";\n\ninterface StatusUpdatesProps {\n actions: AgentAction[];\n isComplete?: boolean;\n heading: string;\n}\n\n// Helper function to detect icon component from content\nconst getIconComponentForAction = (content: string) => {\n const lowerContent = content.toLowerCase();\n\n if (lowerContent.includes(\"search\") || lowerContent.includes(\"finding\")) {\n return IconSearch;\n }\n if (lowerContent.includes(\"mail\") || lowerContent.includes(\"email\")) {\n return IconMail;\n }\n if (\n lowerContent.includes(\"code\") ||\n lowerContent.includes(\"query\") ||\n lowerContent.includes(\"sql\")\n ) {\n return IconCode;\n }\n if (lowerContent.includes(\"database\") || lowerContent.includes(\"table\")) {\n return IconDatabase;\n }\n // Default icon for generic steps\n return IconBrain;\n};\n\n// Helper function to render content with URL pills\nconst renderContentWithURLPills = (content: string) => {\n // Match URLs in the content\n const urlRegex = /(https?:\\/\\/[^\\s]+)/g;\n const parts = content.split(urlRegex);\n\n return (\n <span>\n {parts.map((part, index) => {\n if (part.match(urlRegex)) {\n try {\n const hostname = new URL(part).hostname;\n return (\n <span\n key={index}\n className=\"al-inline-block al-bg-blue-100 al-text-blue-700 al-px-2 al-py-0.5 al-rounded-full al-text-xs al-mx-1 al-font-normal\"\n >\n {hostname}\n </span>\n );\n } catch {\n // If URL parsing fails, render as text\n return <span key={index}>{part}</span>;\n }\n }\n return (\n <span key={index} className=\"al-italic\">\n <Markdown\n content={part}\n className=\"al-text-[1em]\"\n components={{\n p: ({ className, ...props }) => (\n <p className={cn(\"al-text-small\", className)} {...props} />\n ),\n }}\n />\n </span>\n );\n })}\n </span>\n );\n};\n\nexport const StatusUpdates: FC<StatusUpdatesProps> = ({\n actions,\n isComplete = false,\n heading,\n}) => {\n const infoActions = actions.filter((a) => a.type === \"info\");\n const analysisActions = actions.filter((a) => a.type === \"analysis\");\n const [isOpen, setIsOpen] = useState(!isComplete);\n\n if (!actions.length) return null;\n\n return (\n <Stack\n direction=\"column\"\n className=\"al-mb-4 \"\n role=\"log\"\n aria-live=\"polite\"\n aria-label=\"Action status updates\"\n >\n <ChainOfThought\n open={isOpen}\n onOpenChange={setIsOpen}\n style={{ maxWidth: \"100%\" }}\n >\n <ChainOfThoughtHeader>\n <Stack\n direction=\"row\"\n align=\"center\"\n justify=\"between\"\n className=\"al-w-full\"\n >\n <span>{heading || \"Assistant\"}</span>\n <span className=\"al-text-brand al-text-xs\">\n {!isComplete ? \"Thinking\" : \"View detailed steps\"}\n </span>\n </Stack>\n </ChainOfThoughtHeader>\n\n <ChainOfThoughtContent>\n {infoActions.map((action, index) => {\n const isActive = !isComplete && index === infoActions.length - 1;\n const hasRichContent =\n !!action.artifacts && action.artifacts.length > 0;\n const IconComponent = getIconComponentForAction(\n action.content || \"\",\n );\n\n return (\n <ChainOfThoughtStep\n key={action.id || `action-${index}`}\n icon={isActive ? IconLoader2 : IconComponent}\n status={isActive ? \"active\" : \"complete\"}\n label={\n <div\n role=\"status\"\n className={cn(\n \"al-text-muted-foreground al-text-sm\",\n hasRichContent && \"al-bg-gray-50 al-p-3 al-rounded-md\",\n )}\n >\n {/* Render content with URL pills */}\n <div className=\"al-leading-relaxed\">\n {renderContentWithURLPills(action.content || \"\")}\n </div>\n\n {/* Artifacts with spacing */}\n {action.artifacts && (\n <div className=\"al-mt-3\">\n <Artifacts artifacts={action.artifacts} />\n </div>\n )}\n </div>\n }\n />\n );\n })}\n </ChainOfThoughtContent>\n </ChainOfThought>\n\n {/* Analysis actions displayed separately (outside collapsible) */}\n {analysisActions.length > 0 && (\n <Stack direction=\"column\" className=\"al-text-sm al-text-dark al-mt-2\">\n {analysisActions.map((action) => (\n <Markdown\n key={action.id}\n content={action.content || \"\"}\n id={action.id}\n />\n ))}\n </Stack>\n )}\n\n {/* Processing indicator */}\n {!isComplete && (\n <Stack direction=\"row\" align=\"center\" gap=\"xs\" className=\"al-mt-2\">\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 aria-hidden=\"true\"\n />\n <span className=\"al-text-sm al-text-muted-foreground\">\n Processing\n </span>\n </Stack>\n )}\n </Stack>\n );\n};\n","import {\n InlineCitation,\n InlineCitationText,\n InlineCitationCard,\n InlineCitationCardTrigger,\n InlineCitationCardBody,\n InlineCitationCarousel,\n InlineCitationCarouselHeader,\n InlineCitationCarouselIndex,\n InlineCitationCarouselPrev,\n InlineCitationCarouselNext,\n InlineCitationCarouselContent,\n InlineCitationCarouselItem,\n InlineCitationSource,\n} from \"@altimateai/lego\";\nimport { Citation } from \"../../../../components/teammate/types\";\n\ninterface CitationsProps {\n citations?: Citation[];\n frontEndUrl: string;\n text?: string;\n}\n\n/**\n * Citations - AI SDK Elements version of Citations\n *\n * Renders inline citation pills with hover popover showing citation details.\n * Maintains API compatibility with the legacy Citations component while using\n * AI SDK Elements InlineCitation components.\n *\n * @example\n * ```tsx\n * <Citations\n * citations={[\n * { id: \"1\", content: \"Learn about React hooks\", taskLabel: TaskLabels.DocGen },\n * { id: \"2\", content: \"State management patterns\", taskLabel: TaskLabels.DocGen }\n * ]}\n * frontEndUrl=\"https://example.com\"\n * text=\"React uses hooks for state management\"\n * />\n * ```\n */\nconst Citations = ({\n citations,\n frontEndUrl,\n text = \"Learnings applied\",\n}: CitationsProps): JSX.Element | null => {\n if (!citations?.length || !frontEndUrl) {\n return null;\n }\n\n // Convert citations to source URLs for the InlineCitationCardTrigger\n const sources = citations.map(\n (citation) =>\n `${frontEndUrl}/teammates/${citation.taskLabel}?learning=${citation.id}`,\n );\n\n return (\n <InlineCitation>\n <InlineCitationText>{text}</InlineCitationText>\n <InlineCitationCard>\n <InlineCitationCardTrigger sources={sources} />\n <InlineCitationCardBody>\n <InlineCitationCarousel>\n <InlineCitationCarouselHeader>\n <InlineCitationCarouselPrev />\n <InlineCitationCarouselIndex />\n <InlineCitationCarouselNext />\n </InlineCitationCarouselHeader>\n <InlineCitationCarouselContent>\n {citations.map((citation, index) => {\n const url = `${frontEndUrl}/teammates/${citation.taskLabel}?learning=${citation.id}`;\n return (\n <InlineCitationCarouselItem key={citation.id}>\n <InlineCitationSource\n title={`Learning ${index + 1}`}\n url={url}\n description={citation.content}\n />\n </InlineCitationCarouselItem>\n );\n })}\n </InlineCitationCarouselContent>\n </InlineCitationCarousel>\n </InlineCitationCardBody>\n </InlineCitationCard>\n </InlineCitation>\n );\n};\n\nexport default Citations;\n","import { Stack, Suggestion, Suggestions } from \"@altimateai/lego\";\nimport { ApiHelper, useQuery } from \"../../../api/index\";\nimport { useChatContext } from \"../../ChatProvider\";\nimport { useAgentChat } from \"../../hooks/useAgentChat\";\nimport { useEffect } from \"react\";\n\nconst Followup = () => {\n const { currentSessionId, urls } = useChatContext();\n const { sendMessage } = useAgentChat();\n const { data, refetch } = useQuery<{ questions: string[] }>({\n queryFn: () =>\n ApiHelper.get(urls?.followupPath!, { session_id: currentSessionId }),\n enabled: false,\n });\n\n useEffect(() => {\n if (currentSessionId && urls?.followupPath) {\n refetch();\n }\n // adding refetch as deps will trigger api call repeatedly\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentSessionId, urls?.followupPath]);\n\n if (!data?.questions?.length || !urls?.followupPath || !currentSessionId) {\n return null;\n }\n\n const handleSuggestionClick = (suggestion: string) => {\n sendMessage({ message: suggestion });\n };\n\n return (\n <Stack direction=\"column\" gap=\"sm\" className=\"al-mt-4\">\n {/* Label matching Figma design: font-size/s (12px), font-weight 500, color #7A899E */}\n <p className=\" al-text-xs al-font-medium al-text-[#7A899E] al-leading-4\">\n Ask a follow up:\n </p>\n\n {/* Horizontal scrollable suggestions using AI SDK Elements */}\n {/* Figma specs: gap 4px, white bg, #D5DBE4 border, #374C6A text, py-2 px-4 */}\n <Suggestions>\n {data.questions.map((question) => (\n <Suggestion\n key={question}\n suggestion={question}\n onClick={handleSuggestionClick}\n />\n ))}\n </Suggestions>\n </Stack>\n );\n};\n\nexport default Followup;\n","import { FC } from \"react\";\nimport { IconBook2, IconFile, IconFileTypePdf } from \"@tabler/icons-react\";\nimport { Stack } from \"@altimateai/lego\";\nimport { MessageAttachment } from \"../../types\";\n\ninterface AttachmentListProps {\n attachments: MessageAttachment[];\n}\n\nconst getAttachmentIcon = (attachment: MessageAttachment) => {\n if (attachment.attachment_type === \"knowledge_base\") {\n return <IconBook2 className=\"al-h-6 al-w-6 al-text-brand\" />;\n }\n\n if (attachment.attachment_type === \"file\") {\n const fileType = attachment.file_type?.toLowerCase() || \"\";\n const fileName = attachment.attachment_name?.toLowerCase() || \"\";\n\n // Check both MIME type and file extension for PDF\n if (fileType === \"application/pdf\" || fileName.endsWith(\".pdf\")) {\n return <IconFileTypePdf className=\"al-h-6 al-w-6 al-text-brand\" />;\n }\n\n return <IconFile className=\"al-h-6 al-w-6 al-text-brand\" />;\n }\n\n // Default for other types\n return <IconFile className=\"al-h-6 al-w-6 al-text-brand\" />;\n};\n\nconst formatFileSize = (bytes: number | null): string => {\n if (!bytes) return \"\";\n\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024)\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n};\n\nexport const AttachmentList: FC<AttachmentListProps> = ({ attachments }) => {\n if (!attachments || attachments.length === 0) {\n return null;\n }\n\n // Sort attachments by order\n const sortedAttachments = [...attachments].sort((a, b) => a.order - b.order);\n\n return (\n <Stack\n direction=\"column\"\n className=\"al-gap-2 al-mb-3 al-overflow-x-auto al-flex-nowrap al-pb-2 al-max-w-[20rem] al-min-w-[20rem]\"\n role=\"list\"\n aria-label=\"Message attachments\"\n >\n {sortedAttachments.map((attachment) => (\n <Stack\n key={attachment.id}\n direction=\"row\"\n align=\"center\"\n className=\"al-bg-blue-50 al-border al-border-blue-500 al-px-3 al-py-2 al-rounded-md al-gap-2 al-flex-shrink-0 al-min-w-0\"\n role=\"listitem\"\n >\n <div className=\"al-min-w-6 al-min-h-6\">\n {getAttachmentIcon(attachment)}\n </div>\n <Stack direction=\"column\" className=\"al-min-w-0\">\n <span\n className=\"al-text-sm al-font-medium al-truncate\"\n title={attachment.attachment_name}\n >\n {attachment.attachment_name}\n </span>\n {attachment.file_size && (\n <span className=\"al-text-xs al-text-gray-500\">\n {formatFileSize(attachment.file_size)}\n </span>\n )}\n </Stack>\n </Stack>\n ))}\n </Stack>\n );\n};\n","import { FC } from \"react\";\nimport { ChatMessage, LoadingState } from \"../../types\";\nimport { StatusUpdates } from \"../statusUpdates\";\nimport { InteractionPrompt } from \"../interactionPrompt\";\nimport { ChatMessageActions } from \"../chatMessageActions\";\nimport { Markdown, Stack } from \"@altimateai/lego\";\nimport { Artifacts } from \"../artifacts\";\nimport Citations from \"../citations/Citations\";\nimport Followup from \"../followup/Followup\";\nimport { useChatContext } from \"../../ChatProvider\";\nimport { TodoProgress } from \"../todoProgress\";\nimport { AttachmentList } from \"../attachmentList\";\nimport { Button } from \"@altimateai/lego\";\nimport { IconDeviceFloppy } from \"@tabler/icons-react\";\nimport { Message, MessageContent } from \"@altimateai/lego\";\nimport { cn } from \"../../../../shared/utils\";\n\ninterface MessageItemProps {\n message: ChatMessage;\n isLastMessage?: boolean;\n isFirstMessage?: boolean;\n handleSavePrompt?: (message: ChatMessage) => void;\n showSavePromptButton?: boolean;\n}\n\nexport const MessageItem: FC<MessageItemProps> = ({\n message,\n isLastMessage,\n isFirstMessage,\n handleSavePrompt,\n showSavePromptButton,\n}) => {\n const isAssistant = message.role === \"assistant\";\n const {\n currentSessionId,\n loadingState,\n urls,\n classNames = {},\n } = useChatContext();\n\n return (\n <Message from={message.role} key={message.id}>\n <Stack direction=\"column\" gap=\"none\">\n {message.attachments && message.attachments.length > 0 && (\n <Stack gap=\"sm\" justify={isAssistant ? \"start\" : \"end\"}>\n <div id={`message-${message.id}-attachments`}>\n <AttachmentList attachments={message.attachments} />\n </div>\n </Stack>\n )}\n <Stack justify=\"end\">\n {isFirstMessage && showSavePromptButton && handleSavePrompt && (\n <Button\n variant={\"ghost\"}\n size={\"icon\"}\n onClick={() => handleSavePrompt(message)}\n className=\"al-text-muted-foreground !al-p-0 al-h-auto al-w-auto al-mt-2\"\n aria-label=\"Save prompt\"\n title=\"Add to Prompt Library\"\n type=\"button\"\n >\n <IconDeviceFloppy className={\"!al-size-5\"} />\n </Button>\n )}\n <MessageContent>\n <Stack\n gap=\"sm\"\n direction=\"column\"\n className=\"group-[.is-assistant]:al-w-full\"\n >\n <div\n id={`message-${message.id}`}\n className={cn(\n `al-flex al-items-start al-gap-2`,\n !isAssistant ? \"al-justify-end\" : \"\",\n classNames.messageItem ?? \"\",\n )}\n role=\"article\"\n aria-label={`${isAssistant ? \"Assistant\" : \"User\"} message`}\n >\n <Stack\n direction=\"row\"\n className=\"group-[.is-assistant]:al-w-full\"\n >\n <div className=\"al-max-w-full al-flex-1\">\n {message.role === \"assistant\" &&\n message.actions &&\n message.actions.length > 0 && (\n <div id={`message-${message.id}-status`}>\n <StatusUpdates\n actions={message.actions}\n isComplete={true}\n heading={message.heading}\n />\n </div>\n )}\n\n {message.role === \"assistant\" &&\n message.todos &&\n message.todos.length > 0 && (\n <div id={`message-${message.id}-todos`}>\n <TodoProgress todos={message.todos} />\n </div>\n )}\n {/* {message.role === \"assistant\" && message.confidence_str && (\n <Alert className=\"al-my-3\" variant=\"warning\">\n <Stack gap=\"xl\" align=\"center\">\n <IconAlertSquareRounded className=\"al-min-h-6 al-min-w-6\" />\n <Typography variant=\"body\" className=\"al-flex-1\">\n {message.confidence_str}\n </Typography>\n </Stack>\n </Alert>\n )} */}\n <div id={`message-${message.id}-content`}>\n <Markdown\n content={message.content || \"\"}\n id={message.id}\n />\n </div>\n\n {message.artifacts && (\n <div id={`message-${message.id}-artifacts`}>\n <Artifacts artifacts={message.artifacts} />\n </div>\n )}\n\n {message.interaction && (\n <div\n className=\"al-mt-4\"\n id={`message-${message.id}-interaction`}\n >\n <InteractionPrompt interaction={message.interaction} />\n </div>\n )}\n\n {message.citations && message.citations.length > 0 && (\n <div\n className=\"al-mt-4\"\n id={`message-${message.id}-citations`}\n >\n <Citations\n citations={message.citations}\n frontEndUrl={urls?.frontendUrl || \"\"}\n />\n </div>\n )}\n\n {isAssistant && loadingState === LoadingState.LOADED && (\n <div id={`message-${message.id}-actions`}>\n <ChatMessageActions\n messageId={message.id}\n messageContent={message.content}\n sessionId={currentSessionId || undefined}\n isLastMessage={isLastMessage || false}\n />\n </div>\n )}\n </div>\n </Stack>\n </div>\n {isLastMessage &&\n currentSessionId &&\n loadingState === LoadingState.LOADED && <Followup />}\n </Stack>\n </MessageContent>\n </Stack>\n </Stack>\n </Message>\n );\n};\n","import { FC } from \"react\";\nimport { ChatMessage } from \"../../types\";\nimport { MessageItem } from \"../messageItem\";\nimport { Conversation, ConversationEmptyState } from \"@altimateai/lego\";\n\ninterface MessageListProps {\n messages: ChatMessage[];\n handleSavePrompt?: (message: ChatMessage) => void;\n showSavePromptButton?: boolean;\n emptyStateContent?: React.ReactNode;\n}\n\nexport const MessageList: FC<MessageListProps> = ({\n messages,\n handleSavePrompt,\n showSavePromptButton = false,\n emptyStateContent,\n}) => {\n if (messages.length === 0 && emptyStateContent) {\n return (\n <Conversation className=\"al-w-full\">\n <ConversationEmptyState>{emptyStateContent}</ConversationEmptyState>\n </Conversation>\n );\n }\n\n return (\n <>\n {messages.map((message, index) => (\n <MessageItem\n key={message.id}\n message={message}\n isLastMessage={index === messages.length - 1}\n isFirstMessage={index === 0}\n handleSavePrompt={index === 0 ? handleSavePrompt : undefined}\n showSavePromptButton={index === 0 ? showSavePromptButton : false}\n />\n ))}\n </>\n );\n};\n","import { EntityDetectionRequest, EntityDetectionResponse } from \"../types\";\n\nexport class EntityDetectionService {\n private debounceTimer: NodeJS.Timeout | null = null;\n private pendingRequest: Promise<EntityDetectionResponse | null> | null = null;\n private latestRequest: EntityDetectionRequest | null = null;\n private readonly debounceDelay: number;\n\n constructor(debounceDelay: number = 500) {\n this.debounceDelay = debounceDelay;\n }\n\n async detectEntities(\n url: string,\n request: EntityDetectionRequest,\n requestParams?: RequestInit\n ): Promise<EntityDetectionResponse | null> {\n return new Promise(resolve => {\n // Store the latest request\n this.latestRequest = request;\n\n // Cancel previous timer\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n\n this.debounceTimer = setTimeout(async () => {\n // If there's a pending request, wait for it to complete first\n if (this.pendingRequest) {\n await this.pendingRequest;\n }\n\n // Check if this is still the latest request\n if (this.latestRequest === request) {\n try {\n // Create and store the new request promise\n this.pendingRequest = this.makeRequest(url, request, requestParams);\n const result = await this.pendingRequest;\n\n // Clear pending request after completion\n this.pendingRequest = null;\n resolve(result);\n } catch (error) {\n console.error(\"Entity detection error:\", error);\n this.pendingRequest = null;\n resolve(null);\n }\n } else {\n // This request is stale, resolve with null\n resolve(null);\n }\n }, this.debounceDelay);\n });\n }\n\n private async makeRequest(\n url: string,\n request: EntityDetectionRequest,\n requestParams?: RequestInit\n ): Promise<EntityDetectionResponse | null> {\n const response = await fetch(url, {\n ...requestParams,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...requestParams?.headers,\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n throw new Error(`Entity detection failed: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n cleanup() {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = null;\n }\n // Reset pending request reference (we can't abort a promise)\n this.pendingRequest = null;\n this.latestRequest = null;\n }\n}\n","import { useEffect, useRef, useCallback } from \"react\";\nimport { EntityDetectionService } from \"../utils/entityDetection\";\nimport { useChatContext } from \"../ChatProvider\";\nimport { updateEntities } from \"../store/chatSlice\";\nimport { EntityDetectionRequest, EntityType } from \"../types\";\n\nexport const useEntityDetection = () => {\n const { dispatch, currentSessionId, sessions, urls, requestParams } = useChatContext();\n\n const entityServiceRef = useRef<EntityDetectionService | null>(null);\n const currentSessionIdRef = useRef(currentSessionId);\n const sessionsRef = useRef(sessions);\n\n // Update refs on every render\n currentSessionIdRef.current = currentSessionId;\n sessionsRef.current = sessions;\n\n // Initialize entity detection service\n useEffect(() => {\n entityServiceRef.current = new EntityDetectionService(500); // 500ms debounce\n\n return () => {\n entityServiceRef.current?.cleanup();\n };\n }, []);\n\n const detectEntities = useCallback(\n async (text: string) => {\n if (!entityServiceRef.current || !urls?.entityDetectionUrl) {\n return;\n }\n\n // Get current session data from refs at call time\n const sessionId = currentSessionIdRef.current;\n if (!sessionId) return;\n\n const currentContext = sessionsRef.current[sessionId]?.context;\n const existingEntities = (currentContext?.entities || []) as { name: string }[];\n const previouslyDetectedEntities = existingEntities.map(entity => entity.name);\n\n const request: EntityDetectionRequest = {\n text,\n detected_entities:\n previouslyDetectedEntities.length > 0 ? previouslyDetectedEntities : undefined,\n };\n\n try {\n const response = await entityServiceRef.current.detectEntities(\n `${urls.origin}${urls.entityDetectionUrl}`,\n request,\n requestParams\n );\n\n if (response && sessionId) {\n // Get existing entities to preserve selected_type for entities that already exist\n const currentContext = sessionsRef.current[sessionId]?.context;\n const existingEntities = (currentContext?.entities || []) as {\n name: string;\n selected_type?: EntityType;\n }[];\n const existingEntityMap = new Map(existingEntities.map(e => [e.name, e.selected_type]));\n\n // Set selected_type to existing value or first type in types_found for new entities\n const entitiesWithSelectedType = response.entities.map(entity => ({\n ...entity,\n selected_type:\n existingEntityMap.get(entity.name) || entity.types_found[0] || EntityType.UNKNOWN,\n }));\n\n // Update entities in the store\n dispatch(\n updateEntities({\n sessionId,\n entities: entitiesWithSelectedType,\n })\n );\n }\n } catch (error) {\n console.error(\"Entity detection failed:\", error);\n }\n },\n [urls?.entityDetectionUrl, urls?.origin, requestParams, dispatch]\n );\n\n return { detectEntities };\n};\n","import { Combobox, ComboboxOption } from \"@altimateai/lego\";\nimport { Stack } from \"@altimateai/lego\";\nimport { DetectedEntity, EntityType } from \"../../types\";\nimport { useChatContext } from \"../../ChatProvider\";\nimport { updateEntityType } from \"../../store/chatSlice\";\n\ninterface EntityItemProps {\n entity: DetectedEntity;\n}\n\nconst entityTypeOptions: ComboboxOption[] = Object.values(EntityType).map(\n (type) => ({\n value: type,\n label: type.replace(/_/g, \" \").replace(/\\b\\w/g, (l) => l.toUpperCase()),\n }),\n);\n\nexport const EntityItem: React.FC<EntityItemProps> = ({ entity }) => {\n const { dispatch, currentSessionId } = useChatContext();\n const isUnknown = entity.selected_type === EntityType.UNKNOWN;\n\n const handleTypeChange = (newType: string) => {\n if (currentSessionId) {\n dispatch(\n updateEntityType({\n sessionId: currentSessionId,\n entityName: entity.name,\n newType: newType as EntityType,\n }),\n );\n }\n };\n\n return (\n <Stack\n direction=\"row\"\n align=\"center\"\n className={`al-px-3 al-py-1 al-rounded-md al-gap-2 al-whitespace-nowrap ${\n isUnknown\n ? \"al-bg-red-50 al-border al-border-red-200\"\n : \"al-bg-purple-50\"\n }`}\n role=\"listitem\"\n >\n <span className=\"al-text-sm al-font-medium\">{entity.name}</span>\n <span className=\"al-text-xs al-text-gray-600\">is</span>\n\n <div className=\"al-flex-shrink-0 al-relative\">\n <Combobox\n options={entityTypeOptions}\n value={entity.selected_type}\n onChange={handleTypeChange}\n placeholder=\"Select type...\"\n buttonProps={{\n variant: \"outline\",\n size: \"sm\",\n className: `al-h-7 al-text-xs al-px-2 ${\n isUnknown ? \"al-border-red-300 al-text-red-700 al-bg-red-50\" : \"\"\n }`,\n }}\n />\n {isUnknown && (\n <span className=\"al-absolute al--top-1 al--right-1 al-text-red-500 al-text-xs\">\n *\n </span>\n )}\n </div>\n </Stack>\n );\n};\n","import { useEffect, useMemo, useState } from \"react\";\nimport {\n Button,\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n Carousel,\n CarouselContent,\n CarouselPrevious,\n CarouselNext,\n CarouselItem,\n} from \"@altimateai/lego\";\nimport { IconBook2, IconX } from \"@tabler/icons-react\";\nimport { useChatContext } from \"../../ChatProvider\";\nimport { CodeBlock, Stack } from \"@altimateai/lego\";\nimport { ContextOption, DetectedEntity, LoadingState } from \"../../types\";\nimport { EntityItem } from \"../entityItem\";\nimport {\n usePromptInputAttachments,\n Attachment,\n AttachmentPreview,\n AttachmentRemove,\n AttachmentsContext,\n} from \"@altimateai/lego\";\nimport { updateContext } from \"../../store/chatSlice\";\n\ninterface SelectedContextsProps {\n contextOptions?: ContextOption[];\n onRemoveContext: (id: string, key?: string) => void;\n}\n\nexport const SelectedContexts: React.FC<SelectedContextsProps> = ({\n contextOptions,\n onRemoveContext,\n}) => {\n const { currentSessionId, sessions, loadingState, dispatch } =\n useChatContext();\n const currentContext = useMemo(\n () => (currentSessionId ? sessions[currentSessionId]?.context : {}),\n [currentSessionId, sessions],\n );\n const [selectedContextKey] = useState<string | null>(null);\n const [isDialogOpen, setIsDialogOpen] = useState(false);\n\n // Build selectedOptions from context for SelectedContexts component\n const getSelectedOptionsFromContext = () => {\n const options: { [x: string]: string[] } = {};\n if (contextOptions && currentContext) {\n contextOptions.forEach((contextOption) => {\n if (\n contextOption.type === \"submenu\" &&\n currentContext[contextOption.key]\n ) {\n options[contextOption.key] = currentContext[\n contextOption.key\n ] as string[];\n }\n });\n }\n return options;\n };\n\n const selectedOptions = getSelectedOptionsFromContext();\n // Get attachments from prompt input\n const attachments = usePromptInputAttachments();\n\n // Get entities from context\n const entities = (currentContext?.entities as DetectedEntity[]) || [];\n\n // Check if we have any items to display in carousel\n const hasItems =\n attachments.files.length > 0 ||\n Object.values(selectedOptions).some((options) => options.length > 0) ||\n entities.length > 0;\n\n // Also clear when loading state changes to LOADING (when message is being sent)\n useEffect(() => {\n if (loadingState === LoadingState.LOADING && currentSessionId) {\n attachments.clear();\n const options: { [x: string]: string[] } = {};\n if (contextOptions && currentContext) {\n contextOptions.forEach((contextOption) => {\n if (contextOption.type === \"submenu\") {\n options[contextOption.key] = [];\n }\n });\n }\n dispatch(\n updateContext({\n sessionId: currentSessionId,\n context: options,\n }),\n );\n }\n // dont add attachments, dipatch and currentContext to dependencies to avoid infinite loop\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [loadingState, contextOptions, currentSessionId]);\n\n if (!hasItems) {\n return null;\n }\n\n return (\n <>\n {/* Display all contexts: attachments, knowledge base items, and entities */}\n <div\n className=\"al-w-full al-px-10 al-pb-2\"\n role=\"region\"\n aria-label=\"Selected contexts\"\n >\n <Carousel\n orientation={\"horizontal\"}\n className=\"al-w-full\"\n opts={{\n align: \"start\",\n slidesToScroll: \"auto\",\n }}\n >\n <CarouselContent>\n {/* Display attachments first */}\n <AttachmentsContext.Provider value={{ variant: \"inline\" }}>\n {attachments.files.map((attachment) => (\n <CarouselItem key={attachment.id}>\n <Attachment\n data={attachment}\n onRemove={() => attachments.remove(attachment.id)}\n className=\"al-bg-blue-50 al-px-3 al-py-1 al-rounded-md al-gap-2 al-w-64\"\n >\n <AttachmentPreview />\n <AttachmentRemove\n label={`Remove ${attachment.filename} file`}\n />\n </Attachment>\n </CarouselItem>\n ))}\n </AttachmentsContext.Provider>\n\n {/* Display selected options (Knowledge base items) */}\n {Object.entries(selectedOptions).map(([key, options]) =>\n options.map((optionId) => {\n // Find the option label in the current context\n const contextOption = contextOptions?.find(\n (opt) => opt.key === key,\n );\n const option =\n contextOption?.type === \"submenu\"\n ? contextOption.options?.find(\n (opt: { id: string; label: string }) =>\n opt.id === optionId,\n )\n : null;\n if (!option) return null;\n return (\n <CarouselItem key={optionId}>\n <Stack\n direction=\"row\"\n align=\"center\"\n className=\"al-bg-blue-50 al-px-3 al-py-1 al-rounded-md al-gap-2 al-w-64\"\n role=\"listitem\"\n >\n <IconBook2 className=\"al-h-6 al-w-6 al-flex-shrink-0 al-text-brand\" />\n <span className=\"al-text-sm al-truncate al-flex-1\">\n {option.label}\n </span>\n <Button\n variant=\"ghost\"\n size=\"xs\"\n className=\"al-p-0 al-h-4 al-w-4 al-ml-1 al-flex-shrink-0 al-text-gray-500\"\n onClick={() => onRemoveContext(optionId, key)}\n aria-label={`Remove ${option.label} context`}\n >\n <IconX aria-hidden={\"true\"} />\n </Button>\n </Stack>\n </CarouselItem>\n );\n }),\n )}\n\n {/* Display detected entities */}\n {entities.map((entity) => (\n <CarouselItem key={entity.name}>\n <EntityItem key={entity.name} entity={entity} />\n </CarouselItem>\n ))}\n </CarouselContent>\n <CarouselPrevious\n className={\"al-bg-white\"}\n size={\"xs\"}\n type=\"button\"\n title=\"Show previous\"\n />\n <CarouselNext\n className={\"al-bg-white\"}\n size={\"xs\"}\n type=\"button\"\n title=\"Show next\"\n />\n </Carousel>\n </div>\n\n {/* Context Value Dialog */}\n <Dialog open={isDialogOpen} onOpenChange={setIsDialogOpen}>\n <DialogContent\n className=\"al-max-w-2xl al-max-h-[50vh] al-overflow-y-hidden\"\n aria-describedby=\"context-content-description\"\n >\n <DialogHeader>\n <DialogTitle>\n {selectedContextKey && `Context: ${selectedContextKey}`}\n </DialogTitle>\n <DialogDescription id=\"context-content-description\">\n Content of the selected context file\n </DialogDescription>\n </DialogHeader>\n <div\n className=\"al-overflow-x-auto\"\n style={{ maxHeight: \"40%\", minHeight: \"85px\" }}\n >\n {selectedContextKey && (\n <CodeBlock\n language=\"json\"\n code={currentContext?.[selectedContextKey] as string}\n theme=\"dark\"\n editorTheme=\"tomorrow\"\n />\n )}\n </div>\n </DialogContent>\n </Dialog>\n </>\n );\n};\n","import { useEffect } from \"react\";\nimport { IconBrandTelegram } from \"@tabler/icons-react\";\nimport {\n PromptInput,\n PromptInputBody,\n PromptInputTextarea,\n PromptInputFooter,\n PromptInputTools,\n PromptInputButton,\n PromptInputHeader,\n PromptInputMessage,\n useOptionalPromptInputController,\n} from \"@altimateai/lego\";\nimport { useChatContext } from \"../../ChatProvider\";\nimport { CancelGenerationButton } from \"../cancelGenerationButton\";\nimport { useEntityDetection } from \"../../hooks/useEntityDetection\";\nimport { DetectedEntity, EntityType, ContextOption } from \"../../types\";\nimport { SelectedContexts } from \"../selectedContexts/SelectedContexts\";\nimport { useAgentChat } from \"../../hooks/useAgentChat\";\nimport { updateContext } from \"../../store/chatSlice\";\n\ninterface QuestionFormProps {\n isLoading: boolean;\n placeholder?: string;\n autoFocus?: boolean;\n components?: {\n questionFormLeftActions?: React.ReactNode;\n questionFormButtons?: (userInput: string, onAccept: (text: string) => void) => React.ReactNode;\n };\n initialMessage?: string;\n contextOptions?: ContextOption[];\n}\n\nexport const QuestionForm: React.FC<QuestionFormProps> = ({\n isLoading,\n placeholder = \"Ask anything, take any action...\",\n autoFocus = false,\n initialMessage: _initialMessage = \"\",\n components: componentsFromProps,\n contextOptions,\n}) => {\n const { currentSessionId, sessions, dispatch } = useChatContext();\n const { sendMessage } = useAgentChat();\n const { detectEntities } = useEntityDetection();\n const controller = useOptionalPromptInputController();\n\n const userInput = controller?.textInput.value || \"\";\n const currentContext = currentSessionId ? sessions[currentSessionId]?.context : {};\n\n // Check for unknown entities\n const entities =\n (currentSessionId && (sessions[currentSessionId]?.context?.entities as DetectedEntity[])) || [];\n const unknownEntities = entities.filter(entity => entity.selected_type === EntityType.UNKNOWN);\n const hasUnknownEntities = unknownEntities.length > 0;\n const canSubmitForm = !hasUnknownEntities;\n\n const handleSubmit = async (message: PromptInputMessage, e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n if (!message.text.trim() || isLoading || !canSubmitForm) return;\n\n if (!currentSessionId) return;\n\n try {\n controller?.textInput.setInput(\"\");\n await sendMessage({\n message: message.text,\n files: message.files,\n });\n } catch (e) {\n console.log(e);\n }\n };\n\n // Trigger entity detection when user types\n useEffect(() => {\n if (userInput.trim().length > 2) {\n detectEntities(userInput.trim());\n }\n }, [userInput, detectEntities]);\n\n // Handler to remove context\n const handleRemoveContext = (id: string, key?: string) => {\n if (!currentSessionId || !key) return;\n\n const currentOptions = (currentContext?.[key] as string[]) || [];\n const updatedOptions = currentOptions.filter(optionId => optionId !== id);\n\n dispatch(\n updateContext({\n sessionId: currentSessionId,\n context: { [key]: updatedOptions },\n })\n );\n };\n\n return (\n <div className=\"al-w-full \">\n <PromptInput\n globalDrop\n multiple\n onSubmit={handleSubmit}\n className=\"al-shadow-lg al-rounded-2xl al-border al-border-gray-300 al-bg-white [&_[data-slot='input-group']]:!al-rounded-2xl [&_[data-slot='input-group']]:!al-ring-0 [&_[data-slot='input-group']]:!al-ring-offset-0 [&_*]:focus:!al-outline-none [&_*]:focus:!al-ring-0 [&_*]:focus:!al-ring-offset-0\"\n >\n <PromptInputHeader align={\"block-start\"}>\n <SelectedContexts contextOptions={contextOptions} onRemoveContext={handleRemoveContext} />\n </PromptInputHeader>\n <PromptInputBody className=\"al-w-full\">\n {/* Main textarea */}\n <PromptInputTextarea\n placeholder={placeholder}\n autoFocus={autoFocus}\n disabled={isLoading}\n className=\"al-px-4 al-pt-0 al-overflow-y-auto al-resize-none placeholder:al-italic placeholder:al-font-normal placeholder:al-text-sm placeholder:al-leading-5 placeholder:al-text-[#7A899E] focus:al-outline-none\"\n aria-label=\"Question input\"\n aria-required=\"true\"\n aria-invalid={false}\n />\n </PromptInputBody>\n\n {/* Bottom footer with all actions */}\n <PromptInputFooter className=\"al-w-full al-px-3 al-pb-2 al-pt-2\">\n <div className=\"al-flex al-items-center al-justify-between al-w-full al-gap-2\">\n {/* Left side: Left actions */}\n <div className=\"al-flex al-items-center al-gap-2 al-flex-1 al-min-w-0\">\n {/* Left actions slot (e.g., \"+ Add Datamate\") */}\n {componentsFromProps?.questionFormLeftActions && (\n <div className=\"al-flex al-items-center al-gap-2 al-flex-shrink-0\">\n {componentsFromProps.questionFormLeftActions}\n </div>\n )}\n </div>\n\n {/* Right side: Question form buttons + settings + submit/cancel (FIXED, never wraps) */}\n <PromptInputTools className=\"al-flex-shrink-0\">\n {/* Question form custom buttons (e.g., ImprovePromptButton with sparkles icon) */}\n {componentsFromProps?.questionFormButtons?.(userInput, (improvedPrompt: string) => {\n controller?.textInput.setInput(improvedPrompt);\n })}\n\n {/* Cancel or Send button */}\n {isLoading ? (\n <CancelGenerationButton />\n ) : (\n <PromptInputButton\n type=\"submit\"\n disabled={isLoading || !userInput.trim() || !canSubmitForm}\n className=\"!al-w-10 !al-h-10 al-min-h-6 al-rounded-md al-bg-[#247EFE] hover:al-bg-[#1e6ad9] disabled:al-opacity-50 disabled:al-cursor-not-allowed al-flex al-items-center al-justify-center al-flex-shrink-0\"\n aria-busy={isLoading}\n aria-label={\n isLoading\n ? \"Sending message...\"\n : hasUnknownEntities\n ? \"Cannot send - unknown entities need types selected\"\n : \"Send message\"\n }\n title={\n isLoading\n ? \"Cancel generation\"\n : hasUnknownEntities\n ? `Please select right type for ${unknownEntities.map(e => e.name).join(\", \")}`\n : \"Send message\"\n }\n >\n <IconBrandTelegram className=\"al-h-3 al-w-3 al-text-white\" />\n <span className=\"al-sr-only\">\n {isLoading ? \" message in progress\" : \" message\"}\n </span>\n </PromptInputButton>\n )}\n </PromptInputTools>\n </div>\n </PromptInputFooter>\n </PromptInput>\n\n {/* Screen reader hint */}\n <div className=\"al-sr-only\">Press Enter to send, Shift + Enter for new line</div>\n </div>\n );\n};\n","import { ComponentType, Dispatch } from \"react\";\nimport { UnknownAction } from \"@reduxjs/toolkit\";\nimport { z } from \"zod\";\nimport { ChatbotUrls, ChatSession, ContextOption } from \"../chatbotV2\";\n\nexport interface TeamMateState {\n showCoachingForm: boolean;\n}\n\nexport interface TeamMateContextProps {\n state: TeamMateState;\n dispatch: Dispatch<UnknownAction>;\n}\n\nexport interface CoachAiResponse {\n ai_response: string;\n category: string;\n personalizationScope: string;\n}\n\nexport interface CoachAiConfirmationResponse {\n ok: boolean;\n train_doc_uid: string;\n frontend_url: string;\n}\n\nexport enum ContentCategory {\n TERM_CLARIFICATION = \"TermClarification\",\n GENERAL_GUIDELINES = \"GeneralGuidelines\",\n BUSINESS_EXPLANATION = \"BusinessExplanation\",\n}\n\nexport enum TaskLabels {\n DocGen = \"DocGen\",\n ChartBot = \"ChartBot\",\n SqlBot = \"SqlExpert\",\n OpportunitiesBot = \"OpportunitiesBot\",\n ProjectGovernor = \"ProjectGovernor\",\n TeradataToSnowflakeMigrator = \"TeradataToSnowflakeMigrator\",\n AlertManager = \"AlertManager\",\n}\n\nexport enum PersonalizationScope {\n USER_SPECIFIC = \"UserSpecific\",\n ALL_USERS = \"AllUsers\",\n}\n\nexport const learningSchema = z.object({\n train_doc_uid: z.string(),\n userId: z.string(),\n display_name: z.string(),\n taskLabel: z.string(),\n category: z.enum(Object.values(ContentCategory) as [string, ...string[]]),\n personalizationScope: z\n .enum(Object.values(PersonalizationScope) as [string, ...string[]])\n .default(PersonalizationScope.USER_SPECIFIC),\n createdDate: z.string(),\n updatedDate: z.string(),\n content: z\n .string()\n .min(10, { message: \"Learning must be at least 10 characters\" })\n .max(500, { message: \"Learning must not exceed 500 characters\" })\n .min(1, { message: \"Learning is required\" }),\n metadata: z.record(z.unknown()).optional(),\n isActive: z.boolean().default(true),\n});\n\nexport interface Learning extends z.infer<typeof learningSchema> {}\n\nexport enum TeamMateAvailability {\n EXTENSION = \"VSCode Extension\",\n SAAS = \"SaaS\",\n}\n\nexport interface TeamMateComponentProps<T = void> {\n onClose?: (data?: T) => void;\n frontendUrl?: string;\n urls?: ChatbotUrls;\n requestParams?: RequestInit;\n context?: ChatSession[\"context\"];\n contextOptions?: ContextOption[];\n}\n\nexport interface TeamMateConfig<T = unknown> {\n name: string;\n avatar: string;\n description: string;\n availability: TeamMateAvailability[];\n key: TaskLabels;\n seeInAction?: boolean;\n comingSoon?: boolean | (() => boolean);\n displayComponent?: ComponentType<TeamMateComponentProps<T>>;\n formComponent?: ComponentType<TeamMateComponentProps<T>>;\n}\n\nexport enum TeamMateActionType {\n SEE_IN_ACTION = \"SEE_IN_ACTION\",\n REQUEST_ACCESS = \"REQUEST_ACCESS\",\n VIEW_DETAILS = \"VIEW_DETAILS\",\n}\n\nexport const TeamMatesConfig: TeamMateConfig[] = [\n // ... existing code ...\n];\n\nexport interface Citation {\n id: string;\n content: string;\n taskLabel: TaskLabels;\n}\n","import { Button, Card, Textarea } from \"@altimateai/lego\";\nimport { useChatContext } from \"../../chatbotV2/ChatProvider\";\nimport { useAgentChat } from \"../../chatbotV2/hooks/useAgentChat\";\nimport { useState } from \"react\";\nimport { addMessage } from \"../../chatbotV2/store/chatSlice\";\n\nconst HelloMessage = () => {\n const { sessions, currentSessionId, dispatch } = useChatContext();\n const { updateContextAndSendMessage } = useAgentChat();\n const [textValue, setTextValue] = useState(\"\");\n const handleSubmit = async () => {\n dispatch(\n addMessage({\n sessionId: currentSessionId!,\n id: Date.now().toString(),\n content: `##### Migrating your query:\\n\\`\\`\\`\\n${textValue}\\n\\`\\`\\``,\n role: \"user\",\n timestamp: Date.now(),\n heading: \"\",\n })\n );\n await updateContextAndSendMessage(\"Migrate the query\", {\n query: textValue,\n });\n };\n\n const context = currentSessionId ? sessions[currentSessionId]?.context : {};\n\n return (\n <div>\n Hello, I am your Teradata to Snowflake migration assistant.\n {!context?.query ? (\n <Card className=\"al-bg-muted al-p-4 al-rounded-md al-shadow-md al-space-y-2 al-mt-2\">\n <p>\n Please enter a query below or select a file using Add Context button to start the\n migration.\n </p>\n <Textarea\n value={textValue}\n onChange={e => setTextValue(e.target.value)}\n placeholder=\"Please enter a query\"\n required={true}\n />\n <Button onClick={handleSubmit}>Submit</Button>\n </Card>\n ) : null}\n </div>\n );\n};\n\nexport default HelloMessage;\n","import { Card, Button, Typography } from \"@altimateai/lego\";\nimport {\n ArrowRightIcon,\n DatabaseIcon,\n GitMergeIcon,\n CodeIcon,\n ArrowLeftIcon,\n} from \"../../../assets/icons\";\nimport { useState } from \"react\";\nimport { ChatProvider, ChatSession } from \"../../chatbotV2/components\";\nimport { TaskLabels, TeamMateComponentProps } from \"../types\";\nimport HelloMessage from \"./HelloMessage\";\nimport { Stack } from \"@altimateai/lego\";\n\nconst TeradataToSnowflakeMigratorDisplay = ({\n urls,\n}: TeamMateComponentProps) => {\n const [isStarted, setIsStarted] = useState(false);\n\n const handleStart = () => {\n setIsStarted(true);\n };\n\n const handleBack = () => {\n setIsStarted(false);\n };\n\n const validateRequest = async (data: { context: ChatSession[\"context\"] }) => {\n if (!data.context?.query) {\n throw new Error(\"Missing query\");\n }\n };\n\n return (\n <div className=\"al-relative al-overflow-hidden\">\n {/* Wrapper for sliding animation */}\n <Stack\n className={`al-transition-transform al-duration-500 al-ease-in-out ${\n isStarted ? \"al--translate-x-full\" : \"al-translate-x-0\"\n }`}\n >\n {/* Landing Content */}\n <div className=\"al-w-full al-flex-shrink-0\">\n <div className=\"al-px-2 al-py-2 al-max-w-4xl\">\n {/* Hero Section */}\n <Card className=\"al-mb-12 al-overflow-hidden al-relative al-bg-gradient-to-r al-from-primary/10 al-to-primary/5\">\n <Stack\n direction=\"column\"\n className=\"md:al-flex-row al-items-center al-gap-8 al-p-8\"\n >\n {/* AI Agent Visual */}\n <div className=\"al-w-48 al-h-48 al-relative\">\n <div className=\"al-absolute al-inset-0 al-bg-primary/20 al-rounded-full al-animate-pulse\"></div>\n <div className=\"al-absolute al-inset-4 al-bg-primary/30 al-rounded-full al-animate-pulse [animation-delay:0.2s]\"></div>\n <div className=\"al-absolute al-inset-8 al-bg-primary/40 al-rounded-full al-animate-pulse [animation-delay:0.4s]\"></div>\n <Stack className=\"al-absolute al-inset-12 al-bg-primary al-rounded-full al-items-center al-justify-center\">\n <span className=\"al-text-white al-text-4xl\">🤖</span>\n </Stack>\n </div>\n\n {/* Content */}\n <div className=\"al-flex-1 al-text-left\">\n <Typography variant=\"h4\" className=\"al-mb-4\">\n Your AI Migration Companion\n </Typography>\n <p className=\"al-text-lg al-text-muted-foreground al-mb-6\">\n Let me guide you through a seamless Teradata to Snowflake\n transformation. Intelligent, efficient, and error-free\n migrations await.\n </p>\n <Button\n size=\"lg\"\n className=\"al-gap-2 al-bg-primary/90 hover:al-bg-primary\"\n onClick={handleStart}\n >\n Start Migration <ArrowRightIcon className=\"al-h-4 al-w-4\" />\n </Button>\n </div>\n </Stack>\n </Card>\n\n {/* Features Timeline */}\n <div className=\"al-relative al-mb-12\">\n {/* Connection Line */}\n <div className=\"al-absolute al-left-1/2 al-top-0 al-bottom-0 al-w-0.5 al-bg-primary/20 al-transform al-translate-x-[-50%]\"></div>\n\n {/* Feature Steps */}\n <div className=\"al-space-y-12\">\n {/* Schema Migration Step */}\n <Stack align=\"center\" className=\"al-gap-8\">\n <div className=\"al-flex-1 al-text-right\">\n <Card className=\"al-inline-block al-p-4\">\n <h3 className=\"al-text-xl al-font-semibold al-mb-2\">\n <Stack align=\"center\" className=\"al-gap-2\">\n <span>\n <DatabaseIcon className=\"al-h-6 al-w-6 al-text-primary\" />\n Schema Migration\n </span>\n </Stack>\n </h3>\n <p className=\"al-text-muted-foreground al-m-0\">\n Automatically convert Teradata schemas to\n Snowflake-compatible formats while preserving data\n structures\n </p>\n </Card>\n </div>\n <Stack className=\"al-w-12 al-h-12 al-rounded-full al-bg-primary al-items-center al-justify-center al-relative al-z-10\">\n <span className=\"al-text-white\">1</span>\n </Stack>\n <div className=\"al-flex-1\"></div>\n </Stack>\n\n {/* Data Transfer Step */}\n <Stack align=\"center\" className=\"al-gap-8\">\n <div className=\"al-flex-1\"></div>\n <Stack className=\"al-w-12 al-h-12 al-rounded-full al-bg-primary al-items-center al-justify-center al-relative al-z-10\">\n <span className=\"al-text-white\">2</span>\n </Stack>\n <div className=\"al-flex-1\">\n <Card className=\"al-inline-block al-p-4\">\n <h3 className=\"al-text-xl al-font-semibold al-mb-2\">\n <Stack align=\"center\" className=\"al-gap-2\">\n <span>\n <GitMergeIcon className=\"al-h-6 al-w-6 al-text-primary\" />\n Data Transfer\n </span>\n </Stack>\n </h3>\n <p className=\"al-text-muted-foreground al-m-0\">\n Secure and efficient data migration with progress\n tracking and validation\n </p>\n </Card>\n </div>\n </Stack>\n\n {/* Query Conversion Step */}\n <Stack align=\"center\" className=\"al-gap-8\">\n <div className=\"al-flex-1 al-text-right\">\n <Card className=\"al-inline-block al-p-4\">\n <h3 className=\"al-text-xl al-font-semibold al-mb-2\">\n <Stack align=\"center\" className=\"al-gap-2\">\n <span>\n <CodeIcon className=\"al-h-6 al-w-6 al-text-primary\" />\n Query Conversion\n </span>\n </Stack>\n </h3>\n <p className=\"al-text-muted-foreground al-m-0\">\n Transform Teradata SQL queries to Snowflake syntax with\n intelligent optimization\n </p>\n </Card>\n </div>\n <Stack className=\"al-w-12 al-h-12 al-rounded-full al-bg-primary al-items-center al-justify-center al-relative al-z-10\">\n <span className=\"al-text-white\">3</span>\n </Stack>\n <div className=\"al-flex-1\"></div>\n </Stack>\n </div>\n </div>\n\n {/* Benefits Section */}\n <Card className=\"al-p-6 al-mb-12 al-bg-gradient-to-b al-from-primary/5\">\n <Typography variant=\"h4\" className=\"al-mb-6 al-text-center\">\n AI-Powered Advantages\n </Typography>\n <div className=\"al-grid al-grid-cols-2 al-gap-6\">\n <Stack align=\"start\" className=\"al-gap-3\">\n <Stack className=\"al-h-8 al-w-8 al-items-center al-justify-center al-bg-primary/10 al-rounded-lg\">\n ✨\n </Stack>\n <div>\n <h4 className=\"al-font-semibold al-mb-1\">\n Smart Conversion\n </h4>\n <p className=\"al-text-sm al-text-muted-foreground\">\n AI-powered conversion ensures accurate and optimized\n migrations\n </p>\n </div>\n </Stack>\n <Stack align=\"start\" className=\"al-gap-3\">\n <Stack className=\"al-h-8 al-w-8 al-items-center al-justify-center al-bg-primary/10 al-rounded-lg\">\n 🚀\n </Stack>\n <div>\n <h4 className=\"al-font-semibold al-mb-1\">Lightning Fast</h4>\n <p className=\"al-text-sm al-text-muted-foreground\">\n Significantly reduce migration time and effort\n </p>\n </div>\n </Stack>\n <Stack align=\"start\" className=\"al-gap-3\">\n <Stack className=\"al-h-8 al-w-8 al-items-center al-justify-center al-bg-primary/10 al-rounded-lg\">\n 🛡️\n </Stack>\n <div>\n <h4 className=\"al-font-semibold al-mb-1\">\n Reliable & Secure\n </h4>\n <p className=\"al-text-sm al-text-muted-foreground\">\n Built-in validation and error handling for reliable\n migrations\n </p>\n </div>\n </Stack>\n <Stack align=\"start\" className=\"al-gap-3\">\n <Stack className=\"al-h-8 al-w-8 al-items-center al-justify-center al-bg-primary/10 al-rounded-lg\">\n 📊\n </Stack>\n <div>\n <h4 className=\"al-font-semibold al-mb-1\">\n Full Visibility\n </h4>\n <p className=\"al-text-sm al-text-muted-foreground\">\n Detailed reporting and progress tracking throughout the\n process\n </p>\n </div>\n </Stack>\n </div>\n </Card>\n\n {/* CTA Section */}\n <Card className=\"al-text-center al-p-8 al-bg-primary/5\">\n <Typography variant=\"h4\" className=\"al-mb-4\">\n Ready to Transform Your Database?\n </Typography>\n <p className=\"al-text-muted-foreground al-mb-6\">\n Start your intelligent migration journey today\n </p>\n <Button size=\"lg\" className=\"al-gap-2\" onClick={handleStart}>\n Begin Migration <ArrowRightIcon className=\"al-h-4 al-w-4\" />\n </Button>\n </Card>\n </div>\n </div>\n\n {/* Migration Interface */}\n <div className=\"al-w-full al-flex-shrink-0\">\n <div className=\"al-h-full al-w-full\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Back\"\n onClick={handleBack}\n className=\"al-h-8 al-w-8 al-ml-4\"\n >\n <ArrowLeftIcon className=\"al-h-4 al-w-4\" />\n Back\n </Button>\n <ChatProvider\n initialValidation={validateRequest}\n taskLabel={TaskLabels.TeradataToSnowflakeMigrator}\n helloMessage={<HelloMessage />}\n fileUploadProps={{\n allowedFiles: \".sql\",\n contextFieldKey: \"query\",\n }}\n urls={urls}\n />\n </div>\n </div>\n </Stack>\n </div>\n );\n};\n\nexport default TeradataToSnowflakeMigratorDisplay;\n","import { Button, ButtonProps } from \"@altimateai/lego\";\nimport { useAgentChat } from \"../../hooks/useAgentChat\";\nimport { cn } from \"../../../../shared/utils\";\n\nconst ChatTriggerLink = ({\n text,\n buttonProps,\n}: {\n text: string;\n buttonProps?: ButtonProps;\n}) => {\n const { sendMessage } = useAgentChat();\n\n return (\n <Button\n variant=\"secondary\"\n onClick={() => sendMessage({ message: text })}\n color=\"link\"\n key={text}\n {...buttonProps}\n className={cn(\n \"al-border al-border-primary-500 al-rounded-full al-p-2 !al-justify-start al-text-left al-h-auto\",\n buttonProps?.className,\n )}\n style={{ whiteSpace: \"normal\", ...buttonProps?.style }}\n >\n {text}\n </Button>\n );\n};\n\nexport default ChatTriggerLink;\n","import { ChatProvider, ChatSession } from \"../../chatbotV2\";\nimport { TaskLabels, TeamMateComponentProps } from \"../types\";\n\nconst AlertManagerDisplay = ({\n urls,\n requestParams,\n context,\n contextOptions,\n}: TeamMateComponentProps) => {\n const validateRequest = async (data: { context: ChatSession[\"context\"] }) => {\n console.log(data);\n };\n return (\n <div className=\"al-w-full al-flex-shrink-0\">\n <div className=\"al-h-full al-w-full\">\n <ChatProvider\n initialValidation={validateRequest}\n taskLabel={TaskLabels.AlertManager}\n urls={urls}\n helloMessage={\n <div>\n {\n \"I'm your AI teammate, here to create alerts for you. Tell me what do you want to set alert for?\"\n }\n </div>\n }\n fileUploadProps={{\n allowedFiles: \".sql\",\n contextFieldKey: \"query\",\n }}\n requestParams={requestParams}\n context={context}\n contextOptions={contextOptions}\n placeholder=\"Alert me when warehouse COMPUTE_WH incurs more than $1000 in the last 7 days\"\n />\n </div>\n </div>\n );\n};\n\nexport default AlertManagerDisplay;\n","import { BotIcon } from \"./assets\";\nimport ProjectGovernorDisplay from \"./projectGovernor/ProjectGovernorDisplay\";\nimport ProjectGovernorForm from \"./projectGovernor/ProjectGovernorForm\";\nimport TeradataToSnowflakeMigratorDisplay from \"./teradata/MigratorDisplay\";\nimport { TaskLabels, TeamMateAvailability, TeamMateConfig } from \"./types\";\nimport AlertManagerDisplay from \"./alertManager/AlertManagerDisplay\";\n\nexport const TeamMatesConfig: TeamMateConfig[] = [\n {\n name: \"Write Documents\",\n avatar: BotIcon,\n description:\n \"Coach AI to write your dbt model, table and column descriptions for you, like you!\",\n availability: [TeamMateAvailability.EXTENSION],\n key: TaskLabels.DocGen,\n },\n {\n name: \"Chart Analyzer\",\n avatar: BotIcon,\n description: \"Coach AI to analyze charts, find insights and answer your specific questions\",\n availability: [TeamMateAvailability.SAAS],\n key: TaskLabels.ChartBot,\n seeInAction: false,\n },\n {\n name: \"Translate SQL dialects\",\n avatar: BotIcon,\n description: \"Coach AI to translate or explain SQL queries in other dialects\",\n availability: [TeamMateAvailability.SAAS],\n key: TaskLabels.SqlBot,\n },\n {\n name: \"Govern dbt Projects\",\n avatar: BotIcon,\n description: \"Coach AI to help you create checks or rules for project governance config\",\n availability: [TeamMateAvailability.SAAS],\n key: TaskLabels.ProjectGovernor,\n displayComponent: ProjectGovernorDisplay,\n formComponent: ProjectGovernorForm,\n },\n {\n name: \"Save Snowflake Costs\",\n avatar: BotIcon,\n description: \"Coach AI to analyze your spends, costs and find opportunities to save money\",\n availability: [TeamMateAvailability.SAAS],\n key: TaskLabels.OpportunitiesBot,\n comingSoon: true,\n },\n {\n name: \"Migrate Teradata to Snowflake\",\n avatar: BotIcon,\n description: \"Coach AI to streamline your database migration journey\",\n availability: [TeamMateAvailability.SAAS],\n key: TaskLabels.TeradataToSnowflakeMigrator,\n displayComponent: TeradataToSnowflakeMigratorDisplay,\n comingSoon: () => new URLSearchParams(window.location.search).get(\"tsm\") !== \"1\",\n },\n {\n name: \"Setup Alerts\",\n avatar: BotIcon,\n description: \"Coach AI to manage your alerts and notifications\",\n availability: [TeamMateAvailability.SAAS],\n key: TaskLabels.AlertManager,\n displayComponent: AlertManagerDisplay,\n comingSoon: false,\n },\n];\n","import React from \"react\";\nimport AddLearningForm from \"./AddLearningForm\";\nimport { TeamMatesConfig } from \"./teamMatesConfig\";\nimport { TaskLabels } from \"./types\";\n\nexport interface CoachFormProps {\n taskLabel: keyof typeof TaskLabels;\n context?: Record<string, unknown>;\n extra?: Record<string, unknown>;\n onClose: (data?: unknown) => void;\n}\n\nconst CoachForm = (props: CoachFormProps) => {\n const teammate = TeamMatesConfig.find(t => t.key === props.taskLabel);\n if (teammate?.formComponent) {\n // Handle ESM/CJS interop - component might be wrapped in { default: Component }\n const FormComponent =\n typeof teammate.formComponent === \"function\"\n ? teammate.formComponent\n : (teammate.formComponent as { default: React.ComponentType<CoachFormProps> }).default;\n\n if (FormComponent) {\n return <FormComponent {...props} />;\n }\n }\n\n return <AddLearningForm {...props} />;\n};\n\nexport default CoachForm;\n","import { useContext } from \"react\";\nimport { TeamMateContext } from \"./TeamMateProvider\";\n\nconst useTeamMateContext = () => {\n const context = useContext(TeamMateContext);\n if (context === undefined) {\n throw new Error(\"useTeamMateContext must be used within a TeamMateProvider\");\n }\n return context;\n};\n\nexport default useTeamMateContext;\n","import { IconButton } from \"@altimateai/lego\";\nimport useTeamMateContext from \"./useTeamMateContext\";\nimport { TeammateActions } from \"./teamMateSlice\";\n\nconst CoachFormButton = () => {\n const { dispatch } = useTeamMateContext();\n const toggleCoachingForm = () => {\n dispatch(TeammateActions.setShowCoachingForm(true));\n };\n return (\n <IconButton title=\"Show Coaching Form\" onClick={toggleCoachingForm}>\n Show Coaching Form\n </IconButton>\n );\n};\n\nexport default CoachFormButton;\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","import { IconButton, Popconfirm, Stack } from \"@altimateai/lego\";\nimport {\n Alert,\n FormItem,\n FormMessage as FormFeedback,\n Tooltip,\n Typography,\n} from \"@altimateai/lego\";\nimport { ContentCategory, Learning, learningSchema, PersonalizationScope } from \"./types\";\nimport { Collapse } from \"../../shared\";\nimport { Card, CardContent, CardHeader, Switch, Textarea } from \"@altimateai/lego\";\nimport dayjs from \"dayjs\";\nimport { ChevronDownIcon, ChevronUpIcon, DeleteIcon, EditIcon } from \"../../assets/icons\";\nimport { ApiHelper, useMutation } from \"../api/index\";\nimport { Button, NativeSelect } from \"@altimateai/lego\";\nimport { MouseEvent, SyntheticEvent, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { zodResolver } from \"@hookform/resolvers/zod\";\n\ninterface Props {\n learning: Learning;\n afterDelete: () => void;\n toggle: (id: string) => void;\n openId?: string | null;\n}\nconst LearningRow = ({ learning, afterDelete, toggle, openId }: Props) => {\n const [isInEditMode, setIsInEditMode] = useState(false);\n const {\n register,\n handleSubmit,\n formState: { errors, isValid, isSubmitting },\n watch,\n setValue,\n } = useForm({\n defaultValues: learning,\n resolver: zodResolver(learningSchema),\n });\n\n const values = watch();\n\n const onSubmit = async (data: Learning) => {\n await ApiHelper.post(`coach/training/${learning.train_doc_uid}`, data, {\n method: \"PUT\",\n });\n setIsInEditMode(false);\n };\n\n const deleteLearning = async () => {\n return await ApiHelper.post(\n `coach/training/${learning.train_doc_uid}`,\n {},\n { method: \"DELETE\" }\n );\n };\n\n const { loading, error, mutate } = useMutation({\n queryFn: deleteLearning,\n onSuccess: afterDelete,\n });\n\n const stopPropagation = (e?: SyntheticEvent) => {\n e?.stopPropagation();\n };\n\n const onConfirm = () => {\n stopPropagation();\n mutate();\n };\n\n const onEditCancel = (e: MouseEvent) => {\n stopPropagation(e);\n setIsInEditMode(false);\n };\n const onEditClick = (e: MouseEvent) => {\n stopPropagation(e);\n toggle(learning.train_doc_uid);\n setIsInEditMode(true);\n };\n\n const isOpen = openId === learning.train_doc_uid;\n\n return (\n <Card className={isOpen ? \"al-border-blue-500\" : \"\"}>\n <form onSubmit={handleSubmit(onSubmit)}>\n <CardHeader>\n <Stack align=\"start\">\n <div className=\"al-flex-1\">\n <div>\n {isInEditMode ? (\n <FormItem>\n <Textarea\n {...register(\"content\")}\n placeholder=\"Enter your coaching feedback here...\"\n aria-invalid={!!errors.content}\n onClick={stopPropagation}\n // @ts-ignore\n style={{ fieldSizing: \"content\" }}\n />\n {errors.content ? <FormFeedback>{errors.content.message}</FormFeedback> : null}\n </FormItem>\n ) : (\n <Typography className={!isOpen ? \"lines-2\" : \"\"}>{values.content}</Typography>\n )}\n </div>\n\n <Stack>\n <dl>\n <Stack>\n <dt>Created on:</dt>\n <dd>{dayjs(learning.createdDate).format(\"MMMM D, YYYY h:mm A\")}</dd>\n </Stack>\n <Stack>\n <dt>Updated on:</dt>\n <dd>{dayjs(learning.updatedDate).format(\"MMMM D, YYYY h:mm A\")} </dd>\n </Stack>\n <Stack>\n <dt>Created by:</dt> <dd>{learning.display_name}</dd>\n </Stack>\n </dl>\n </Stack>\n </div>\n <Stack className=\"align-items-top gap-0\">\n <FormItem className=\"al-mt-2\">\n <Tooltip\n title={!values.isActive ? \"Enable this learning\" : \"Disable this learning\"}\n >\n <span>\n <Switch\n id={`toggle-${learning.train_doc_uid}`}\n checked={values.isActive}\n onCheckedChange={checked => {\n setValue(\"isActive\", checked);\n handleSubmit(onSubmit)();\n }}\n />\n </span>\n </Tooltip>\n </FormItem>\n <Popconfirm\n title=\"Delete the task\"\n description=\"Are you sure to delete this task?\"\n onConfirm={onConfirm}\n onCancel={stopPropagation}\n okText=\"Yes\"\n cancelText=\"No\"\n >\n <IconButton\n title=\"Delete this learning\"\n className=\"pt-1 pb-0\"\n disabled={loading}\n onClick={stopPropagation}\n >\n <DeleteIcon />\n </IconButton>\n </Popconfirm>\n {isInEditMode ? (\n <Stack className=\"align-items-baseline\">\n <Button onClick={onEditCancel} variant=\"outline\" size=\"sm\">\n Cancel\n </Button>\n <Button size=\"sm\" disabled={isSubmitting || !isValid} type=\"submit\">\n Save\n </Button>\n </Stack>\n ) : (\n <IconButton title=\"Edit this learning\" onClick={onEditClick}>\n <EditIcon />\n </IconButton>\n )}\n\n <IconButton\n title={isOpen ? \"Collapse\" : \"Expand\"}\n onClick={() => toggle(learning.train_doc_uid)}\n >\n {isOpen ? <ChevronUpIcon /> : <ChevronDownIcon />}\n </IconButton>\n </Stack>\n </Stack>\n </CardHeader>\n <Collapse isOpen={isOpen}>\n <CardContent>\n {error && <Alert color=\"danger\">{error.message}</Alert>}\n <Stack className=\"gap-4\">\n <div>\n <strong>Category:</strong>{\" \"}\n {isInEditMode ? (\n <NativeSelect\n style={{ minWidth: 160 }}\n options={Object.values(ContentCategory).map(c => ({\n value: c,\n label: c,\n }))}\n value={values.category}\n onChange={(value: string) => {\n setValue(\"category\", value as ContentCategory);\n }}\n />\n ) : (\n learning.category\n )}\n </div>\n <div>\n <strong>Task Label:</strong> {learning.taskLabel}\n </div>\n <div>\n <strong>Personalization Scope:</strong>{\" \"}\n {isInEditMode ? (\n <NativeSelect\n style={{ minWidth: 100 }}\n options={Object.values(PersonalizationScope).map(c => ({\n value: c,\n label: c,\n }))}\n value={values.personalizationScope}\n onChange={(value: string) => {\n setValue(\"personalizationScope\", value as PersonalizationScope);\n }}\n />\n ) : (\n learning.personalizationScope\n )}\n </div>\n {learning.metadata &&\n Object.keys(learning.metadata).map(key => (\n <div key={key}>\n <strong>{key}:</strong> <>{learning.metadata?.[key] || \"\"}</>\n </div>\n ))}\n </Stack>\n </CardContent>\n </Collapse>\n </form>\n </Card>\n );\n};\n\nexport default LearningRow;\n","import { Stack } from \"@altimateai/lego\";\nimport { ApiHelper } from \"../api/index\";\nimport { useQuery } from \"../api\";\nimport { Learning, TaskLabels } from \"./types\";\nimport LearningRow from \"./LearningRow\";\nimport { useEffect, useState } from \"react\";\nimport \"./learnings.scss\";\nimport { NoLearningsImage } from \"./assets\";\nimport { Alert } from \"@altimateai/lego\";\n\ninterface Props {\n filters?: {\n taskLabel?: keyof typeof TaskLabels;\n };\n learning?: string | null;\n}\n\nconst LearningsPage = ({ filters, learning }: Props) => {\n const [openId, setOpenId] = useState<string | undefined | null>(learning);\n const { error, data, loading, refetch } = useQuery<{\n train_docs: Learning[];\n }>({\n queryFn: () => ApiHelper.get(`coach/training`, filters),\n enabled: false,\n });\n\n useEffect(() => {\n refetch();\n // avoid refetching on every render\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const toggle = (id: string) => {\n setOpenId(prevId => (prevId === id ? undefined : id));\n };\n\n return (\n <Stack direction=\"column\" className=\"learnings\">\n {loading ? (\n <p>Loading learnings...</p>\n ) : error ? (\n <Alert color=\"danger\">Error loading learnings: {error.message}</Alert>\n ) : data?.train_docs?.length ? (\n <>\n {data.train_docs.map(learning => (\n <LearningRow\n key={learning.train_doc_uid}\n learning={learning}\n afterDelete={refetch}\n toggle={toggle}\n openId={openId}\n />\n ))}\n </>\n ) : (\n <Stack direction=\"column\" className=\"align-items-center\">\n <NoLearningsImage />\n <h4>No learnings added yet!</h4>\n </Stack>\n )}\n </Stack>\n );\n};\n\nexport default LearningsPage;\n","import { LoadingButton, Stack } from \"@altimateai/lego\";\nimport { Badge, Card, CardContent, Typography } from \"@altimateai/lego\";\nimport { TeamMatesConfig } from \"./teamMatesConfig\";\nimport { TeamMateActionType, TeamMateAvailability } from \"./types\";\nimport { useMutation } from \"../api/index\";\nimport { Button } from \"@altimateai/lego\";\n\ninterface Props {\n config: (typeof TeamMatesConfig)[0];\n onSelect: (\n config: (typeof TeamMatesConfig)[0],\n action: TeamMateActionType\n ) => Promise<boolean | undefined>;\n client: keyof typeof TeamMateAvailability;\n}\nconst TeamMatesCard = ({ config, client, onSelect }: Props) => {\n const handleRequestAccess = async () => {\n return await onSelect(config, TeamMateActionType.REQUEST_ACCESS);\n };\n const { loading, mutate, data } = useMutation({\n queryFn: handleRequestAccess,\n });\n const isComingSoon =\n typeof config.comingSoon === \"function\" ? config.comingSoon() : config.comingSoon;\n\n return (\n <Stack direction=\"column\">\n <Card>\n <CardContent className=\"al-pt-4\">\n <Stack justify=\"between\" align=\"center\" className=\"al-mb-2\">\n <img alt=\"Teammate\" src={config.avatar} className=\"al-w-16 al-h-16 al-rounded\" />\n <div className=\"al-ml-2 al-mt-2\">\n <Typography variant=\"subheading\">{config.name}</Typography>\n <Typography>{config.description}</Typography>\n </div>\n </Stack>\n <Stack justify=\"between\" align=\"center\">\n <Stack justify=\"start\" align=\"center\">\n {isComingSoon ? (\n <>\n <LoadingButton\n size=\"sm\"\n className=\"al-cursor-pointer\"\n onClick={() => mutate()}\n color=\"primary\"\n loading={loading}\n disabled={!!data}\n >\n Request Access\n </LoadingButton>\n {data ? <p className=\"al-m-0\">Our team will reach out soon</p> : null}\n </>\n ) : (\n <Button\n size=\"sm\"\n className=\"al-cursor-pointer\"\n onClick={() => onSelect(config, TeamMateActionType.VIEW_DETAILS)}\n >\n View details\n </Button>\n )}\n {config.seeInAction && config.availability.includes(TeamMateAvailability[client]) && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n className=\"al-cursor-pointer\"\n onClick={() => onSelect(config, TeamMateActionType.SEE_IN_ACTION)}\n >\n See in action\n </Button>\n )}\n </Stack>\n {config.availability.map(availability => (\n <Badge variant=\"success\" key={availability} className={availability}>\n {isComingSoon ? \"Coming soon\" : \"Available\"} in {availability}\n </Badge>\n ))}\n </Stack>\n </CardContent>\n </Card>\n </Stack>\n );\n};\n\nexport default TeamMatesCard;\n","import \"./teammates.scss\";\nimport { TeamMatesConfig } from \"./teamMatesConfig\";\nimport TeamMatesCard from \"./TeamMatesCard\";\nimport { TeamMateActionType, TeamMateAvailability } from \"./types\";\n\ninterface Props {\n onSelect: (\n selected: (typeof TeamMatesConfig)[0],\n action: TeamMateActionType\n ) => Promise<boolean | undefined>;\n client: keyof typeof TeamMateAvailability;\n}\n\nconst TeamMates = ({ onSelect, client }: Props) => {\n return (\n <div className=\"teammates\">\n <div className=\"al-grid al-grid-cols-1 md:al-grid-cols-2 lg:al-grid-cols-3 al-gap-4\">\n {TeamMatesConfig.map(config => (\n <TeamMatesCard key={config.name} config={config} client={client} onSelect={onSelect} />\n ))}\n </div>\n </div>\n );\n};\n\nexport default TeamMates;\n","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 { 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 { 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 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","// 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":["useQuery","queryFn","enabled","error","setError","useState","loading","setLoading","data","setData","fetchData","useCallback","response","useEffect","refetch","useMutation","onSuccess","mutate","args","ApiHelper","_url","_data","_request","ConversationSources","getResourceTypeAndPageFromUrlHash","hashParts","window","ALTIMATE_DISPLAY_ELEMENT_ID_PREFIX","HIGHLIGHT_CLASS","HIGHLIGHT_HOVER_CLASS","ACTIVE_HIGHLIGHT_CLASS","highlighter","Highlighter","activeHighlighter","selectedNodesHook","_id","selectedNodes","node","serializeRestoreHook","_hs","start","end","startNode","endNode","nodeNameBlacklist","id","getHighlightSourceFromPostAnchor","post","JSON","removeHighlight","anchor","hs","getCodeBlockElementInPage","modelParts","getModelPartsFromLocationHash","codeSection","document","text","getModelDescriptionElement","getConversationGroupTargetElement","meta","columnDescriptionTd","Array","el","getField","element","getSelectionRange","field","target","highlightedText","selectionEnd","selectionStart","lineNumbers","selectedLines","endY","Math","height","y","endLineNumberElement","console","getSelectionAllowedElements","initialState","undefined","LoadingState","conversationsSlice","createSlice","state","action","acc","user","conversationGroupId","updated","conversation","setCurrentUserId","setShareId","updateSelectedConversationId","updateRightPanelState","setUsers","setConversations","resetNewConversation","updateNewConversation","upsertConversation","setDocsAppRendered","updateCurrentPage","updateCodeblockLoaded","resolveConversationGroup","setConversationsLoadingState","refetchConversations","setConversationSource","setManifest","DbtDocsCollaborationContext","createContext","DbtDocsCollaborationProvider","children","shareId","userId","source","dispatch","useReducer","Boolean","getValue","callback","values","useMemo","useDbtDocsCollaborationContext","useContext","useDbtDocsCollaborationSelector","useDbtDocsCollaborationDispatch","SvgBolt","props","SvgThinking","SvgCircle","SvgDownload","SvgArrowRight","SvgDatabase","SvgGitMerge","SvgArrowLeft","SvgDbt","Icon","icon","className","rest","RemoveIcon","CodeIcon","AddIcon","DeleteIcon","GlobeIcon","GithubIcon","FilesIcon","CommentAddIcon","CommentDiscussionIcon","CommentUnresolvedIcon","CheckNoOutlineIcon","CheckedIcon","PassIcon","RefreshIcon","SettingsIcon","ChevronUpIcon","ChevronDownIcon","ChevronRightIcon","ChevronLeftIcon","MoreIcon","InfoCircleIcon","AskIcon","CloseIcon","EditIcon","ShareIcon","SearchIcon","FileIcon","WarningIcon","SendIcon","HighlightAnchor","pos","onAddComment","createPortal","AnimatePresence","Button","ZIndex","ShowConversationsButton","isRightPanelOpen","toggleRightPanel","getDbtDocsShareDetailsById","createNewConversationGroup","addConversationToGroup","getConversationsByShareId","getUserList","company","useDbtDocsCollaboration","shareDetails","setShareDetails","fetch","loadDetails","leftArrowBtn","useHighlight","selectedConversation","isDocsAppRendered","newConversation","highlightPostData","setHighlightPostData","setPos","resetHighlights","onSelectionEnd","event","selection","range","code","x","ConversationHighlighter","conversationGroup","selectedConversationId","highlightRef","useRef","handleClick","position","top","bottom","i","lineNumber","ConversationsHighlighter","conversationGroups","Object","codeblockLoaded","currentPage","conversationsInCurrentPage","ProfileImageByUser","classes","StyleMentionInput","MentionsInputComponent","value","setValue","propsUsers","placeholder","onEnterKeypress","users","onKeyDown","e","onAdd","display","handleChange","MentionsInput","Mention","highlightedDisplay","focused","ConversationInputForm","comment","setComment","currentUser","LoadingButton","ConversationHighlightText","filePath","column","path","CodeBlock","NewConversationForm","usersList","handleSubmit","createGroupResponse","err","Card","CardContent","ResolveButton","onResolve","useConversationGroupContext","resolveConversationGroupApi","IconButton","ConversationHeader","timestamp","showResolveButton","CardTitle","Stack","dayjs","ConversationComponent","ConversationReplyForm","onReplyAdd","replyText","setReplyText","isLoading","setIsLoading","submitReply","ConversationGroupComponent","onSelect","isSelected","showReplies","setShowReplies","onRender","setTimeout","first","replyButtonText","prev","c","Conversation","ConversationGroupContext","ConversationGroupProvider","ConversationGroups","currentUserId","DbtDocsConversationsRightPanel","handleClose","isOpen","PollingInterval","useConversations","timer","loadingState","conversations","fetchConversations","clearTimeout","useConversationUsers","setLoadingState","DbtDocsCollaborationComponents","HotspotButton","AddCommentOnCodeButton","codeBlockUpdated","manifest","setLineNumber","codeElement","onMouseMove","AddCommentOnModelDescriptionButton","descriptionElement","AddCommentButton","DbtDocsRenderer","lazy","DbtDocsDetails","getHighlightedSelectionData","DbtDocs","teamMateSlice","TeammateActions","TeamMateContext","TeamMateProvider","CoachFormInput","taskLabel","onCancel","register","errors","isSubmitting","useForm","zodResolver","coachFormSchema","onSubmit","Textarea","z","AddLearningForm","context","onClose","extra","coachAiResponse","setCoachAiResponse","aiLearningEditable","setAiLearningEditable","makeAiLearningEditable","makeAiLearningNonEditable","saveAiLearning","Error","isSaving","handleSave","Alert","CardFooter","SvgNoLearnings","ProjectGovernorCheckTypes","ProjectGovernorAllowedFiles","ProjectGovernorCheckSchema","checkFormSchema","ChecksInput","isValid","watch","handleKeyDown","input","res","FormItem","FormFeedback","Label","NativeSelect","ProjectGovernorForm","projectGovernorValidateResponse","setProjectGovernorValidateResponse","type","ProjectGovernanceCheck","check","isInEditMode","setIsInEditMode","URLSearchParams","reset","toast","isDeleting","checkName","onEditClick","onEditCancel","CardHeader","Input","Popconfirm","ProjectGovernorDisplay","checks","Spinner","Sheet","SheetTrigger","SheetContent","SheetHeader","SheetTitle","EntityType","sessionStatusSchema","todoItemSchema","agentStreamResponseSchema","getRandomValues","rnds8","Uint8Array","rng","crypto","msCrypto","validate","uuid","byteToHex","stringify","arr","offset","arguments","TypeError","v4","options","buf","rnds","addOrUpdateAction","actions","existingAction","a","chatSlice","sessionId","uuidv4","message","session","currentMessageIndex","m","messageId","datamates","entities","entityName","newType","updatedEntities","entity","currentSession","createSession","setSelectedModel","setCurrentSession","addMessage","updateMessageFeedback","clearHistory","deleteMessage","setAbortController","addAction","clearActions","setTodos","clearTodos","updateContext","clearContext","updateDatamateInSession","updateEntities","updateEntityType","setSessions","resetSession","chatReducer","ChatContext","useChatContext","ChatProvider","forwardRef","initialValidation","urls","disableContext","requestParams","components","helloMessage","assistantMeta","contextOptions","fileUploadProps","isMarkdownResponse","models","autoFocus","classNames","sessions","currentSessionId","initialMessage","submitInitialMessageOnMount","questionFormLeftActions","refetchSession","chatboxStartPosition","helloMessageFooter","handleSavePrompt","showSavePromptButton","onEvent","ref","chatInitialState","setInputRef","useImperativeHandle","statusMap","PromptInputProvider","ChatbotV2","processAgentStream","reader","callbacks","decoder","TextDecoder","citations","todos","stepHeading","isReading","markdownBuffer","finalContent","finalArtifacts","finalInteraction","finalConfidenceStr","incompleteLineBuffer","actionsList","newAction","existingIndex","handleJSONStr","jsonStr","msg","Date","toolContent","toolSummary","t","summaryAction","done","sseMatch","chunk","fullChunk","lines","completeLines","line","finalResponse","streamResponseToAgentMessages","streamResponse","messages","processExistingConversation","conversationTurns","turn","processAgentMessageContent","content","finalHeading","processPlaygroundSessionTurns","turns","status","index","processed","sendMessageAndProcessStream","url","headers","signal","createEmptyAccumulatedData","MarkdownStreamTransport","DefaultChatTransport","abortSignal","latestUserMessage","messageText","p","freshBody","requestBody","stream","capturedAbortSignal","emitDataForThisRequest","accumulatedContent","hasStarted","hasEnded","ReadableStream","controller","LegacyBackendTransport","files","file","base64Content","legacyRequestBody","buffer","accumulatedActions","accumulatedArtifacts","accumulatedCitations","accumulatedTodos","accumulatedInteraction","accumulatedHeading","accumulatedConfidence","trimmed","textAction","toolName","toolCallId","toolInput","extractTextFromParts","parts","toV1ChatResponse","accData","fromV1ChatMessage","fromV1ChatMessages","extractAccumulatedDataFromV1","useAgentChat","accumulatedDataRef","pendingRequestRef","dispatchedActionsCountRef","lastDispatchedContentLengthRef","streamingMessageIdRef","currentRequestIdRef","callbackRequestIdRef","dispatchRef","currentSessionIdRef","handleTransportData","current","currentDispatch","newActions","contentLenDiff","currentContext","apiUrl","headersRecord","Headers","sessionDataRef","getBody","body","transport","setMessages","sdkSendMessage","sdkStop","sdkRegenerate","useChat","isAbortError","String","latestMessagesRef","createAttachmentsFromContext","attachmentsData","loadV1Session","v1Messages","uiMessages","lastAssistant","getV1Messages","isLastAssistant","updateContextAndSendMessage","sendMessage","isResponseToPrompt","newContext","dontAddUserMessage","attachments","abortController","AbortController","handleAbort","hasError","responsePromise","Promise","resolve","reject","v2Response","finalId","isAlreadyStreamed","streamResult","errorMessage","TodoProgress","completedCount","todo","totalCount","Queue","QueueSection","QueueSectionTrigger","QueueSectionLabel","IconChecklist","QueueSectionContent","QueueList","QueueItem","QueueItemIndicator","QueueItemContent","cn","inputs","twMerge","clsx","RefetchSession","intervalId","startRefetching","setInterval","clearInterval","Chatbot","currentActions","currentTodos","messagesContainerRef","lastMessageRef","initialMessageSubmittedRef","wasAtBottomRef","request","queryParams","key","queryString","fullUrl","json","hasMessages","shouldShowMessagesContent","lastMessage","lastMessageHasActions","isScrolledToBottom","container","threshold","handleScroll","requestAnimationFrame","handleModelChange","model","handleSubmitQuestion","allActions","ContextPanel","justificationClass","ScrollArea","MessageList","StatusUpdates","LoadingIndicator","QuestionForm","Artifacts","artifacts","selectedArtifact","setSelectedArtifact","showAll","setShowAll","visibleArtifacts","hasMore","handleDownloadAll","zip","JSZip","artifact","fileName","link","DownloadIcon","Badge","Dialog","DialogContent","DialogHeader","DialogTitle","CancelGenerationButton","handleCancel","IconPlayerStopFilled","CoachAI","showCoachForm","setShowCoachForm","CoachForm","ThinkingIcon","panelId","useId","listboxId","handleOptionSelect","option","getSelectedOptions","DropdownMenu","DropdownMenuTrigger","IconPlus","DropdownMenuContent","PromptInputActionAddAttachments","contextOption","DropdownMenuSub","DropdownMenuSubTrigger","DropdownMenuSubContent","DropdownMenuItem","Command","CommandInput","CommandList","CommandEmpty","CommandGroup","CommandItem","IconSquareCheckFilled","IconSquare","RegenerateButton","handleRegenerate","currentIndex","lastUserMessage","Tooltip","IconRefresh","ChatLastMessageActions","handleCopy","navigator","IconCopy","useFeedback","submitFeedback","feedback","feedbackPath","feedbackUrl","ChatFeedbackActions","showComment","setShowComment","selectedRating","setSelectedRating","setIsSubmitting","handleRatingClick","rating","handleSubmitFeedback","IconThumbUp","IconThumbDown","validateEmail","email","emailRegex","EmailDialog","open","onSendEmail","emails","setEmails","handleValidateEmail","handleSendEmail","validEmails","validEmailCount","hasInvalidEmails","TagsInput","next","TagsInputLabel","TagsInputList","TagsInputItem","TagsInputInput","TagsInputClear","DialogFooter","ShareMessage","messageContent","showEmailDialog","setShowEmailDialog","isEmailing","setIsEmailing","payload","IconShare3","DownloadMessage","isDownloading","setIsDownloading","handleDownloadPdf","endpoint","blob","filename","IconDownload","ChatMessageActions","isLastMessage","InteractionPrompt","interaction","textValue","setTextValue","React","selectedValues","setSelectedValues","formState","setFormState","renderInput","choice","Checkbox","checked","v","Markdown","getIconComponentForAction","lowerContent","IconSearch","IconMail","IconCode","IconDatabase","IconBrain","renderContentWithURLPills","urlRegex","part","hostname","URL","isComplete","heading","infoActions","analysisActions","setIsOpen","ChainOfThought","ChainOfThoughtHeader","ChainOfThoughtContent","isActive","hasRichContent","IconComponent","ChainOfThoughtStep","IconLoader2","Citations","frontEndUrl","sources","citation","InlineCitation","InlineCitationText","InlineCitationCard","InlineCitationCardTrigger","InlineCitationCardBody","InlineCitationCarousel","InlineCitationCarouselHeader","InlineCitationCarouselPrev","InlineCitationCarouselIndex","InlineCitationCarouselNext","InlineCitationCarouselContent","InlineCitationCarouselItem","InlineCitationSource","Followup","handleSuggestionClick","suggestion","Suggestions","question","Suggestion","getAttachmentIcon","attachment","IconBook2","fileType","IconFileTypePdf","IconFile","formatFileSize","bytes","AttachmentList","sortedAttachments","b","MessageItem","isFirstMessage","isAssistant","Message","IconDeviceFloppy","MessageContent","emptyStateContent","ConversationEmptyState","EntityDetectionService","result","debounceDelay","useEntityDetection","entityServiceRef","sessionsRef","detectEntities","existingEntities","previouslyDetectedEntities","existingEntityMap","Map","entitiesWithSelectedType","entityTypeOptions","l","EntityItem","isUnknown","handleTypeChange","Combobox","SelectedContexts","onRemoveContext","selectedContextKey","isDialogOpen","setIsDialogOpen","getSelectedOptionsFromContext","selectedOptions","usePromptInputAttachments","hasItems","Carousel","CarouselContent","AttachmentsContext","CarouselItem","Attachment","AttachmentPreview","AttachmentRemove","optionId","opt","IconX","CarouselPrevious","CarouselNext","DialogDescription","_initialMessage","componentsFromProps","useOptionalPromptInputController","userInput","unknownEntities","hasUnknownEntities","canSubmitForm","handleRemoveContext","currentOptions","updatedOptions","PromptInput","PromptInputHeader","PromptInputBody","PromptInputTextarea","PromptInputFooter","PromptInputTools","improvedPrompt","PromptInputButton","IconBrandTelegram","ContentCategory","TaskLabels","PersonalizationScope","learningSchema","TeamMateAvailability","TeamMateActionType","HelloMessage","TeradataToSnowflakeMigratorDisplay","isStarted","setIsStarted","handleStart","handleBack","validateRequest","Typography","ArrowRightIcon","DatabaseIcon","GitMergeIcon","ArrowLeftIcon","ChatTriggerLink","buttonProps","AlertManagerDisplay","TeamMatesConfig","BotIcon","teammate","FormComponent","useTeamMateContext","CoachFormButton","toggleCoachingForm","Collapse","Table","LearningRow","learning","afterDelete","toggle","openId","deleteLearning","stopPropagation","onConfirm","Switch","LearningsPage","filters","setOpenId","prevId","NoLearningsImage","TeamMatesCard","config","client","handleRequestAccess","isComingSoon","availability","TeamMates","lineageSlice","newCollectColumns","collectColumns","_columns","updatedColumns","existing","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","createTableNode","_table","level","parent","createOpNode","createColumnNode","viewsType","viewsCode","nodeType","datatype","getColumnId","createColumnEdge","srcLevel","dstLevel","edgeVisibility","edgeId","getColumnEdgeId","applyNodeStyling","n","highlight","applyEdgeStyling","l0","l1","getHelperDataForCLL","nodes","edges","levelMap","tableNodes","_n","seeMoreIdTableReverseMap","sourceTableExist","targetTableExist","_t","getSeeMoreId","contains","item","safeConcat","obj","getColY","columnNum","tableNum","withinExclusive","deleteIfExists","calculateExpand","minVal","maxVal","defaultVal","toggleModelEdges","isVisible","toggleColumnEdges","findSourcesSinks","_inDegree","_outDegree","u","k","sinks","getCurrentTableId","currentUrl","urlParts","handleTableNavigation","table","idPart","encodedId","btoa","SvgTests","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","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","ViewsTypeBadge","styles","LineageLegend","showLegend","setShowLegend","Popover","PopoverTrigger","DownIcon","UpIcon","PopoverContent","upstreamTables","downstreamTables","getExposureDetails","name","getFunctionDetails","getSnowflakeStageDetails","table_rk","getDbtInfo","getColumns","refresh","getConnectedColumns","sendFeedback","getLineageSettings","persistLineageSettings","initLineage","openFile","openChat","showInfoNotification","previewFeature","columnLineage","telemetryEvents","showExternalViewCodeModal","exportLineage","finalLineageDownload","CllEvents","CLL","CustomEvent","ColumnDatatype","color","size","compColor","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","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","tableWiseLevelColumnCount","levelWiseTables","tableWiseLevelPos","visited","adjacencyListRight","adjacencyListLeft","processNode","curr","dfs","adjacencyList","getY","_index","_columnCount","getX","basisLevel","getYVertical","getXVertical","resetTableHighlights","highlightTableConnections","highlightNode","highlightEdge","bfsTraversal","queue","newEdges","_e","newNodes","setHighlightedTableConnections","flow","_nodes","_edges","processColumnLineage","prevNodes","currAnd1HopTables","selectedColumn","column_lineage","confidence","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","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","Set","ns","es","moveTableFromSeeMoreToCanvas","prevTable","lineage","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","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","AlertErrorIcon","TestsIcon","EphemeralIcon","IconExclamationCircle","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","TABLES_SIDEBAR","SelfConnectingEdge","sourceX","sourceY","targetX","targetY","markerEnd","radiusX","radiusY","edgePath","BaseEdge","ColumnNode","showCodeModal","viewsColor","customStyles","currentNode","hasCode","query_hash","SQL_ICONS","SqlInnerJoinIcon","SqlOuterJoinIcon","SqlLeftJoinIcon","SqlFullJoinIcon","SqlRightJoinIcon","SqlCrossJoinIcon","SqlLateralJoinIcon","SqlFilterIcon","SqlGroupByIcon","SqlLimitIcon","SqlOrderByIcon","SqlUnionIcon","SqlSelectIcon","PostgresIcon","SnowflakeIcon","S3Icon","OpNode","expression","isDarkMode","SidebarModal","closeModal","width","sidebarElem","widthString","CustomInput","CustomMultilineInput","TableHeader","canLineageExpand","ExpandLineageIcon","MoreTables","_tables","_lineageTables","onItemClick","allTablesAdded","selectAllTables","_node","isNodeOnOtherLevel","filteredTables","setFilteredTables","_search","ComponentLoader","left","ColorTag","PurposeSection","purpose","ColumnCard","isSelectable","renderTags","LineageContext","ColumnSection","filteredColumn","setFilteredColumn","handleColumnClick","allowSyncColumnsWithDB","lineageType","isEphemeral","isAnalysis","TestSection","filteredTests","setFilteredTests","_test","icons","BracketsIcon","HalfCircleIcon","CaseSensitiveIcon","SplitHorizontalIcon","getIconForType","tableMetaKeys","DataTable","UITable","renderValue","LightDashSection","openSections","setOpenSections","toggleCollapse","HeaderSection","tableData","currentTableId","onNavigate","shouldShowButton","handleNavigateClick","TableDetails","aiEnabled","lightdashEnabled","dbtInfo","setDbtInfo","tab","setTab","tableNodeData","addNodesEdges","_bfsTraversal","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","encodeURIComponent","insight","IconPremiumRights","IconUser","IconBook","IconLibraryFilled","IconSitemap","IconServer","IconEye","IconUsers","IconCalendar","IconWorld","Feedback","close","feedbackState","setFeedbackState","feedbackInput","setFeedbackInput","isSubmitted","setIsSubmitted","ThumbsupSelectedIcon","ThumbsupIcon","ThumbsdownSelectedIcon","ThumbsdownIcon","Settings","applyDefault","defaultExpansion","parseInt","PopoverContext","BetterPopover","trigger","render","openedPopover","setOpenedPopover","AutoExpansionPopover","minRange","nodeCount","maxRange","setMaxRange","popoverId","isPopoverOpen","updateLeftExpansion","updateRightExpansion","ExpandIcon","ArrowLeftDoubleIcon","ExpandWithConfidenceCard","expandContainer","SettingsButton","settingsContainer","ResetButton","resetContainer","FormInput","params","setParams","ExportFinalLineageModal","modalArgs","isExporting","handleExport","ViewsCodeModal","viewsCodeArgs","viewsCodesFlat","OpNodeModal","opNodeArgs","LineageModal","DialogPortal","DialogOverlay","ExportButton","exportContainer","setName","handleExportLineage","tableEdges","columnEdges","lineage_data","SnowflakeStageDetails","fetchDetails","FunctionDetails","arg","s","SidebarErrorBoundary","Component","nodeTypes","edgeTypes","DynamicLineage","sidebarScreen","defaultExpansionRef","onCllCancelled","renderStartNode","_flow","handleRenderStartNode","applySettings","settings","handleEdgeVisibilityChanges","_type","afterFlowRender","flowInstance","ReactFlowProvider","ReactFlow","Background","Controls","StaticLineage","_createTable","connectedTables","currLevel","columnRK","timerId","SqlLineage","nodePositions","handleHighlightedNodes","handleSelectedNodes","handleFitView","handleNodesSavingsPerformance","handleNodesCost","LineageProvider","dynamicLineage","staticLineage","lineageRef","_rerenderVal","SqlLineageComponent","DynamicLineageComponent","StaticLineageComponent"],"mappings":"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"}
|