@stack-spot/ai-chat-widget 0.11.0 → 1.0.0-dev.1768324407795
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/CHANGELOG.md +972 -0
- package/README.md +1 -0
- package/dist/StackspotAIWidget.d.ts +48 -7
- package/dist/StackspotAIWidget.d.ts.map +1 -1
- package/dist/StackspotAIWidget.js +22 -23
- package/dist/StackspotAIWidget.js.map +1 -1
- package/dist/app-metadata.json +175 -0
- package/dist/assets/placeholder.png +0 -0
- package/dist/chat-interceptors/CustomInputs.d.ts +4 -1
- package/dist/chat-interceptors/CustomInputs.d.ts.map +1 -1
- package/dist/chat-interceptors/CustomInputs.js +10 -1
- package/dist/chat-interceptors/CustomInputs.js.map +1 -1
- package/dist/chat-interceptors/quick-command-questions.d.ts +10 -0
- package/dist/chat-interceptors/quick-command-questions.d.ts.map +1 -1
- package/dist/chat-interceptors/quick-command-questions.js +12 -2
- package/dist/chat-interceptors/quick-command-questions.js.map +1 -1
- package/dist/chat-interceptors/quick-commands.d.ts +11 -0
- package/dist/chat-interceptors/quick-commands.d.ts.map +1 -1
- package/dist/chat-interceptors/quick-commands.js +241 -48
- package/dist/chat-interceptors/quick-commands.js.map +1 -1
- package/dist/chat-interceptors/send-message.d.ts +26 -1
- package/dist/chat-interceptors/send-message.d.ts.map +1 -1
- package/dist/chat-interceptors/send-message.js +227 -26
- package/dist/chat-interceptors/send-message.js.map +1 -1
- package/dist/components/AdaptiveTextArea.d.ts +15 -3
- package/dist/components/AdaptiveTextArea.d.ts.map +1 -1
- package/dist/components/AdaptiveTextArea.js +22 -10
- package/dist/components/AdaptiveTextArea.js.map +1 -1
- package/dist/components/AgentCard/AgentCardCreate.d.ts +4 -0
- package/dist/components/AgentCard/AgentCardCreate.d.ts.map +1 -0
- package/dist/components/AgentCard/AgentCardCreate.js +33 -0
- package/dist/components/AgentCard/AgentCardCreate.js.map +1 -0
- package/dist/components/AgentCard/dictionary.d.ts +23 -0
- package/dist/components/AgentCard/dictionary.d.ts.map +1 -0
- package/dist/components/AgentCard/dictionary.js +23 -0
- package/dist/components/AgentCard/dictionary.js.map +1 -0
- package/dist/components/AgentCard/index.d.ts +5 -0
- package/dist/components/AgentCard/index.d.ts.map +1 -0
- package/dist/components/AgentCard/index.js +55 -0
- package/dist/components/AgentCard/index.js.map +1 -0
- package/dist/components/AnimatedOpacity.d.ts +8 -0
- package/dist/components/AnimatedOpacity.d.ts.map +1 -0
- package/dist/components/AnimatedOpacity.js +46 -0
- package/dist/components/AnimatedOpacity.js.map +1 -0
- package/dist/components/AutoFocus.d.ts +23 -0
- package/dist/components/AutoFocus.d.ts.map +1 -0
- package/dist/components/AutoFocus.js +23 -0
- package/dist/components/AutoFocus.js.map +1 -0
- package/dist/components/ButtonFavorite.d.ts +40 -0
- package/dist/components/ButtonFavorite.d.ts.map +1 -0
- package/dist/components/ButtonFavorite.js +25 -0
- package/dist/components/ButtonFavorite.js.map +1 -0
- package/dist/components/Code.d.ts +2 -1
- package/dist/components/Code.d.ts.map +1 -1
- package/dist/components/Code.js +52 -24
- package/dist/components/Code.js.map +1 -1
- package/dist/components/ComponentNavigator.d.ts +38 -0
- package/dist/components/ComponentNavigator.d.ts.map +1 -0
- package/dist/components/ComponentNavigator.js +31 -0
- package/dist/components/ComponentNavigator.js.map +1 -0
- package/dist/components/Fading.d.ts +32 -0
- package/dist/components/Fading.d.ts.map +1 -0
- package/dist/components/Fading.js +33 -0
- package/dist/components/Fading.js.map +1 -0
- package/dist/components/FadingOverflow.d.ts +25 -0
- package/dist/components/FadingOverflow.d.ts.map +1 -1
- package/dist/components/FadingOverflow.js +16 -8
- package/dist/components/FadingOverflow.js.map +1 -1
- package/dist/components/FileDescription.d.ts +10 -0
- package/dist/components/FileDescription.d.ts.map +1 -0
- package/dist/components/FileDescription.js +84 -0
- package/dist/components/FileDescription.js.map +1 -0
- package/dist/components/HistoryList.d.ts +15 -0
- package/dist/components/HistoryList.d.ts.map +1 -1
- package/dist/components/HistoryList.js +6 -2
- package/dist/components/HistoryList.js.map +1 -1
- package/dist/components/ListResource.d.ts +29 -0
- package/dist/components/ListResource.d.ts.map +1 -0
- package/dist/components/ListResource.js +17 -0
- package/dist/components/ListResource.js.map +1 -0
- package/dist/components/Markdown.d.ts.map +1 -1
- package/dist/components/Markdown.js +2 -2
- package/dist/components/Markdown.js.map +1 -1
- package/dist/components/Modal.d.ts +9 -0
- package/dist/components/Modal.d.ts.map +1 -0
- package/dist/components/Modal.js +56 -0
- package/dist/components/Modal.js.map +1 -0
- package/dist/components/QuickStartButton.d.ts +2 -4
- package/dist/components/QuickStartButton.d.ts.map +1 -1
- package/dist/components/QuickStartButton.js +7 -39
- package/dist/components/QuickStartButton.js.map +1 -1
- package/dist/components/RightPanelContentList.d.ts +10 -0
- package/dist/components/RightPanelContentList.d.ts.map +1 -0
- package/dist/components/RightPanelContentList.js +7 -0
- package/dist/components/RightPanelContentList.js.map +1 -0
- package/dist/components/RightPanelForm.d.ts +3 -0
- package/dist/components/RightPanelForm.d.ts.map +1 -1
- package/dist/components/RightPanelForm.js +57 -17
- package/dist/components/RightPanelForm.js.map +1 -1
- package/dist/components/RightPanelTabs.d.ts +4 -4
- package/dist/components/RightPanelTabs.d.ts.map +1 -1
- package/dist/components/RightPanelTabs.js +7 -16
- package/dist/components/RightPanelTabs.js.map +1 -1
- package/dist/components/Selector/index.d.ts +54 -0
- package/dist/components/Selector/index.d.ts.map +1 -0
- package/dist/components/Selector/index.js +143 -0
- package/dist/components/Selector/index.js.map +1 -0
- package/dist/components/Selector/styled.d.ts +4 -0
- package/dist/components/Selector/styled.d.ts.map +1 -0
- package/dist/components/Selector/styled.js +157 -0
- package/dist/components/Selector/styled.js.map +1 -0
- package/dist/components/StackedBadge.d.ts +14 -0
- package/dist/components/StackedBadge.d.ts.map +1 -0
- package/dist/components/StackedBadge.js +56 -0
- package/dist/components/StackedBadge.js.map +1 -0
- package/dist/components/TabManager.d.ts +6 -0
- package/dist/components/TabManager.d.ts.map +1 -1
- package/dist/components/TabManager.js +16 -28
- package/dist/components/TabManager.js.map +1 -1
- package/dist/components/ToolBadge.d.ts +9 -0
- package/dist/components/ToolBadge.d.ts.map +1 -0
- package/dist/components/ToolBadge.js +34 -0
- package/dist/components/ToolBadge.js.map +1 -0
- package/dist/components/WorkspaceTabNavigator.d.ts +17 -0
- package/dist/components/WorkspaceTabNavigator.d.ts.map +1 -0
- package/dist/components/WorkspaceTabNavigator.js +93 -0
- package/dist/components/WorkspaceTabNavigator.js.map +1 -0
- package/dist/components/form/DescribedCheckboxGroup.d.ts +30 -2
- package/dist/components/form/DescribedCheckboxGroup.d.ts.map +1 -1
- package/dist/components/form/DescribedCheckboxGroup.js +75 -21
- package/dist/components/form/DescribedCheckboxGroup.js.map +1 -1
- package/dist/components/form/DescribedRadioGroup.d.ts +31 -2
- package/dist/components/form/DescribedRadioGroup.d.ts.map +1 -1
- package/dist/components/form/DescribedRadioGroup.js +65 -16
- package/dist/components/form/DescribedRadioGroup.js.map +1 -1
- package/dist/components/form/dictionary.d.ts +19 -0
- package/dist/components/form/dictionary.d.ts.map +1 -0
- package/dist/components/form/dictionary.js +19 -0
- package/dist/components/form/dictionary.js.map +1 -0
- package/dist/components/form/styled.d.ts.map +1 -1
- package/dist/components/form/styled.js +1 -2
- package/dist/components/form/styled.js.map +1 -1
- package/dist/components/form/types.d.ts +42 -0
- package/dist/components/form/types.d.ts.map +1 -1
- package/dist/context/AIWidgetProvider.d.ts +19 -0
- package/dist/context/AIWidgetProvider.d.ts.map +1 -1
- package/dist/context/AIWidgetProvider.js +19 -0
- package/dist/context/AIWidgetProvider.js.map +1 -1
- package/dist/context/hooks.d.ts +61 -4
- package/dist/context/hooks.d.ts.map +1 -1
- package/dist/context/hooks.js +83 -13
- package/dist/context/hooks.js.map +1 -1
- package/dist/features.d.ts +72 -10
- package/dist/features.d.ts.map +1 -1
- package/dist/features.js +23 -8
- package/dist/features.js.map +1 -1
- package/dist/hooks/midnight-update-view.d.ts +5 -0
- package/dist/hooks/midnight-update-view.d.ts.map +1 -0
- package/dist/hooks/midnight-update-view.js +30 -0
- package/dist/hooks/midnight-update-view.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/layout.css +95 -28
- package/dist/regex.d.ts +3 -0
- package/dist/regex.d.ts.map +1 -0
- package/dist/regex.js +3 -0
- package/dist/regex.js.map +1 -0
- package/dist/right-panel/DefaultPanel.d.ts +3 -0
- package/dist/right-panel/DefaultPanel.d.ts.map +1 -1
- package/dist/right-panel/DefaultPanel.js +5 -4
- package/dist/right-panel/DefaultPanel.js.map +1 -1
- package/dist/right-panel/RightPanel.d.ts +3 -0
- package/dist/right-panel/RightPanel.d.ts.map +1 -1
- package/dist/right-panel/RightPanel.js +3 -0
- package/dist/right-panel/RightPanel.js.map +1 -1
- package/dist/right-panel/RightPanelProvider.d.ts +15 -0
- package/dist/right-panel/RightPanelProvider.d.ts.map +1 -1
- package/dist/right-panel/RightPanelProvider.js.map +1 -1
- package/dist/right-panel/constants.d.ts +2 -0
- package/dist/right-panel/constants.d.ts.map +1 -0
- package/dist/right-panel/constants.js +2 -0
- package/dist/right-panel/constants.js.map +1 -0
- package/dist/right-panel/hooks.d.ts +6 -0
- package/dist/right-panel/hooks.d.ts.map +1 -1
- package/dist/right-panel/hooks.js +8 -1
- package/dist/right-panel/hooks.js.map +1 -1
- package/dist/state/ChatEntry.d.ts +182 -8
- package/dist/state/ChatEntry.d.ts.map +1 -1
- package/dist/state/ChatEntry.js +26 -3
- package/dist/state/ChatEntry.js.map +1 -1
- package/dist/state/ChatState.d.ts +116 -14
- package/dist/state/ChatState.d.ts.map +1 -1
- package/dist/state/ChatState.js +49 -8
- package/dist/state/ChatState.js.map +1 -1
- package/dist/state/ChatTabsController.d.ts +50 -1
- package/dist/state/ChatTabsController.d.ts.map +1 -1
- package/dist/state/ChatTabsController.js +77 -8
- package/dist/state/ChatTabsController.js.map +1 -1
- package/dist/state/ObservableState.d.ts +14 -0
- package/dist/state/ObservableState.d.ts.map +1 -1
- package/dist/state/ObservableState.js +14 -0
- package/dist/state/ObservableState.js.map +1 -1
- package/dist/state/WidgetState.d.ts +62 -2
- package/dist/state/WidgetState.d.ts.map +1 -1
- package/dist/state/WidgetState.js +49 -2
- package/dist/state/WidgetState.js.map +1 -1
- package/dist/state/constants.d.ts +5 -0
- package/dist/state/constants.d.ts.map +1 -0
- package/dist/state/constants.js +10 -0
- package/dist/state/constants.js.map +1 -0
- package/dist/state/types.d.ts +10 -1
- package/dist/state/types.d.ts.map +1 -1
- package/dist/types.d.ts +20 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/chat.d.ts +11 -4
- package/dist/utils/chat.d.ts.map +1 -1
- package/dist/utils/chat.js +13 -11
- package/dist/utils/chat.js.map +1 -1
- package/dist/utils/check-is-trial.d.ts +2 -0
- package/dist/utils/check-is-trial.d.ts.map +1 -0
- package/dist/utils/check-is-trial.js +6 -0
- package/dist/utils/check-is-trial.js.map +1 -0
- package/dist/utils/copy-to-clipboard.d.ts +6 -0
- package/dist/utils/copy-to-clipboard.d.ts.map +1 -0
- package/dist/utils/copy-to-clipboard.js +30 -0
- package/dist/utils/copy-to-clipboard.js.map +1 -0
- package/dist/utils/date.d.ts +26 -2
- package/dist/utils/date.d.ts.map +1 -1
- package/dist/utils/date.js +28 -3
- package/dist/utils/date.js.map +1 -1
- package/dist/utils/download.d.ts +5 -0
- package/dist/utils/download.d.ts.map +1 -1
- package/dist/utils/download.js +5 -0
- package/dist/utils/download.js.map +1 -1
- package/dist/utils/error.d.ts +2 -0
- package/dist/utils/error.d.ts.map +1 -0
- package/dist/utils/error.js +54 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/knowledge-source.d.ts +12 -2
- package/dist/utils/knowledge-source.d.ts.map +1 -1
- package/dist/utils/knowledge-source.js +16 -0
- package/dist/utils/knowledge-source.js.map +1 -1
- package/dist/utils/planning-tool.d.ts +17 -0
- package/dist/utils/planning-tool.d.ts.map +1 -0
- package/dist/utils/planning-tool.js +32 -0
- package/dist/utils/planning-tool.js.map +1 -0
- package/dist/utils/programming-languages.d.ts.map +1 -1
- package/dist/utils/programming-languages.js +10 -0
- package/dist/utils/programming-languages.js.map +1 -1
- package/dist/utils/string.d.ts +5 -0
- package/dist/utils/string.d.ts.map +1 -1
- package/dist/utils/string.js +5 -1
- package/dist/utils/string.js.map +1 -1
- package/dist/utils/tools.d.ts +23 -0
- package/dist/utils/tools.d.ts.map +1 -0
- package/dist/utils/tools.js +23 -0
- package/dist/utils/tools.js.map +1 -0
- package/dist/utils/update-tool-step.d.ts +3 -0
- package/dist/utils/update-tool-step.d.ts.map +1 -0
- package/dist/utils/update-tool-step.js +23 -0
- package/dist/utils/update-tool-step.js.map +1 -0
- package/dist/utils/upload/FileUpload.d.ts +21 -0
- package/dist/utils/upload/FileUpload.d.ts.map +1 -0
- package/dist/utils/upload/FileUpload.js +54 -0
- package/dist/utils/upload/FileUpload.js.map +1 -0
- package/dist/utils/upload/UploadManager.d.ts +42 -0
- package/dist/utils/upload/UploadManager.d.ts.map +1 -0
- package/dist/utils/upload/UploadManager.js +138 -0
- package/dist/utils/upload/UploadManager.js.map +1 -0
- package/dist/utils/upload/context.d.ts +15 -0
- package/dist/utils/upload/context.d.ts.map +1 -0
- package/dist/utils/upload/context.js +37 -0
- package/dist/utils/upload/context.js.map +1 -0
- package/dist/utils/upload/errors.d.ts +17 -0
- package/dist/utils/upload/errors.d.ts.map +1 -0
- package/dist/utils/upload/errors.js +27 -0
- package/dist/utils/upload/errors.js.map +1 -0
- package/dist/utils/upload/types.d.ts +7 -0
- package/dist/utils/upload/types.d.ts.map +1 -0
- package/dist/{components/Tooltip → utils/upload}/types.js.map +1 -1
- package/dist/utils/upload/use-paste-upload.d.ts +8 -0
- package/dist/utils/upload/use-paste-upload.d.ts.map +1 -0
- package/dist/utils/upload/use-paste-upload.js +19 -0
- package/dist/utils/upload/use-paste-upload.js.map +1 -0
- package/dist/utils/upload/utils.d.ts +4 -0
- package/dist/utils/upload/utils.d.ts.map +1 -0
- package/dist/utils/upload/utils.js +10 -0
- package/dist/utils/upload/utils.js.map +1 -0
- package/dist/utils/url.d.ts +2 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/url.js +8 -0
- package/dist/utils/url.js.map +1 -0
- package/dist/views/Agents/AgentDescription.d.ts +4 -0
- package/dist/views/Agents/AgentDescription.d.ts.map +1 -0
- package/dist/views/Agents/AgentDescription.js +38 -0
- package/dist/views/Agents/AgentDescription.js.map +1 -0
- package/dist/views/Agents/AgentsPanel.d.ts +5 -0
- package/dist/views/Agents/AgentsPanel.d.ts.map +1 -0
- package/dist/views/Agents/AgentsPanel.js +45 -0
- package/dist/views/Agents/AgentsPanel.js.map +1 -0
- package/dist/views/Agents/AgentsTab.d.ts +11 -0
- package/dist/views/Agents/AgentsTab.d.ts.map +1 -0
- package/dist/views/Agents/AgentsTab.js +82 -0
- package/dist/views/Agents/AgentsTab.js.map +1 -0
- package/dist/views/Agents/dictionary.d.ts +2 -0
- package/dist/views/Agents/dictionary.d.ts.map +1 -0
- package/dist/views/Agents/dictionary.js +43 -0
- package/dist/views/Agents/dictionary.js.map +1 -0
- package/dist/views/Agents/index.d.ts +5 -0
- package/dist/views/Agents/index.d.ts.map +1 -0
- package/dist/views/Agents/index.js +21 -0
- package/dist/views/Agents/index.js.map +1 -0
- package/dist/views/Agents/styled.d.ts +3 -0
- package/dist/views/Agents/styled.d.ts.map +1 -0
- package/dist/views/Agents/styled.js +68 -0
- package/dist/views/Agents/styled.js.map +1 -0
- package/dist/views/Agents/useAgentFavorites.d.ts +8 -0
- package/dist/views/Agents/useAgentFavorites.d.ts.map +1 -0
- package/dist/views/Agents/useAgentFavorites.js +59 -0
- package/dist/views/Agents/useAgentFavorites.js.map +1 -0
- package/dist/views/Chat/AgentInfo.d.ts +5 -1
- package/dist/views/Chat/AgentInfo.d.ts.map +1 -1
- package/dist/views/Chat/AgentInfo.js +6 -5
- package/dist/views/Chat/AgentInfo.js.map +1 -1
- package/dist/views/Chat/ButtonExecutionDetail.d.ts +5 -0
- package/dist/views/Chat/ButtonExecutionDetail.d.ts.map +1 -0
- package/dist/views/Chat/ButtonExecutionDetail.js +34 -0
- package/dist/views/Chat/ButtonExecutionDetail.js.map +1 -0
- package/dist/views/Chat/ChatMessage.d.ts +56 -4
- package/dist/views/Chat/ChatMessage.d.ts.map +1 -1
- package/dist/views/Chat/ChatMessage.js +160 -24
- package/dist/views/Chat/ChatMessage.js.map +1 -1
- package/dist/views/Chat/ChatMessages.d.ts +6 -2
- package/dist/views/Chat/ChatMessages.d.ts.map +1 -1
- package/dist/views/Chat/ChatMessages.js +5 -2
- package/dist/views/Chat/ChatMessages.js.map +1 -1
- package/dist/views/Chat/StepsList.d.ts +14 -0
- package/dist/views/Chat/StepsList.d.ts.map +1 -0
- package/dist/views/Chat/StepsList.js +192 -0
- package/dist/views/Chat/StepsList.js.map +1 -0
- package/dist/views/Chat/chat-scroll.d.ts +1 -1
- package/dist/views/Chat/chat-scroll.js +1 -1
- package/dist/views/Chat/events.d.ts +22 -0
- package/dist/views/Chat/events.d.ts.map +1 -0
- package/dist/views/Chat/events.js +67 -0
- package/dist/views/Chat/events.js.map +1 -0
- package/dist/views/Chat/index.d.ts +9 -2
- package/dist/views/Chat/index.d.ts.map +1 -1
- package/dist/views/Chat/index.js +5 -2
- package/dist/views/Chat/index.js.map +1 -1
- package/dist/views/Chat/styled.d.ts +3 -1
- package/dist/views/Chat/styled.d.ts.map +1 -1
- package/dist/views/Chat/styled.js +152 -31
- package/dist/views/Chat/styled.js.map +1 -1
- package/dist/views/ChatHistory/ChatHistoryPanel.d.ts +4 -4
- package/dist/views/ChatHistory/ChatHistoryPanel.d.ts.map +1 -1
- package/dist/views/ChatHistory/ChatHistoryPanel.js +6 -2
- package/dist/views/ChatHistory/ChatHistoryPanel.js.map +1 -1
- package/dist/views/ChatHistory/HistoryItem.d.ts +4 -3
- package/dist/views/ChatHistory/HistoryItem.d.ts.map +1 -1
- package/dist/views/ChatHistory/HistoryItem.js +16 -37
- package/dist/views/ChatHistory/HistoryItem.js.map +1 -1
- package/dist/views/ChatHistory/dictionary.d.ts +1 -1
- package/dist/views/ChatHistory/index.d.ts +4 -4
- package/dist/views/ChatHistory/index.d.ts.map +1 -1
- package/dist/views/ChatHistory/index.js +6 -3
- package/dist/views/ChatHistory/index.js.map +1 -1
- package/dist/views/ChatHistory/styled.d.ts.map +1 -1
- package/dist/views/ChatHistory/styled.js +3 -5
- package/dist/views/ChatHistory/styled.js.map +1 -1
- package/dist/views/ChatHistory/utils.d.ts +17 -2
- package/dist/views/ChatHistory/utils.d.ts.map +1 -1
- package/dist/views/ChatHistory/utils.js +140 -9
- package/dist/views/ChatHistory/utils.js.map +1 -1
- package/dist/views/ChatTabSelection.d.ts +6 -4
- package/dist/views/ChatTabSelection.d.ts.map +1 -1
- package/dist/views/ChatTabSelection.js +40 -15
- package/dist/views/ChatTabSelection.js.map +1 -1
- package/dist/views/Editor.d.ts +3 -0
- package/dist/views/Editor.d.ts.map +1 -1
- package/dist/views/Editor.js +23 -16
- package/dist/views/Editor.js.map +1 -1
- package/dist/views/Home/BuiltInAgent.d.ts +6 -0
- package/dist/views/Home/BuiltInAgent.d.ts.map +1 -0
- package/dist/views/Home/BuiltInAgent.js +37 -0
- package/dist/views/Home/BuiltInAgent.js.map +1 -0
- package/dist/views/Home/CustomAgent.d.ts +5 -0
- package/dist/views/Home/CustomAgent.d.ts.map +1 -0
- package/dist/views/Home/CustomAgent.js +23 -0
- package/dist/views/Home/CustomAgent.js.map +1 -0
- package/dist/views/Home/index.d.ts +8 -0
- package/dist/views/Home/index.d.ts.map +1 -0
- package/dist/views/Home/index.js +34 -0
- package/dist/views/Home/index.js.map +1 -0
- package/dist/views/Home/styled.d.ts +2 -0
- package/dist/views/Home/styled.d.ts.map +1 -0
- package/dist/views/Home/styled.js +74 -0
- package/dist/views/Home/styled.js.map +1 -0
- package/dist/views/Home/types.d.ts +16 -0
- package/dist/views/Home/types.d.ts.map +1 -0
- package/dist/views/Home/types.js +2 -0
- package/dist/views/Home/types.js.map +1 -0
- package/dist/views/KSDocument.d.ts +3 -0
- package/dist/views/KSDocument.d.ts.map +1 -1
- package/dist/views/KSDocument.js +7 -4
- package/dist/views/KSDocument.js.map +1 -1
- package/dist/views/KnowledgeSources.d.ts +12 -0
- package/dist/views/KnowledgeSources.d.ts.map +1 -1
- package/dist/views/KnowledgeSources.js +123 -33
- package/dist/views/KnowledgeSources.js.map +1 -1
- package/dist/views/MessageInput/AgentSelector.d.ts +5 -0
- package/dist/views/MessageInput/AgentSelector.d.ts.map +1 -0
- package/dist/views/MessageInput/AgentSelector.js +66 -0
- package/dist/views/MessageInput/AgentSelector.js.map +1 -0
- package/dist/views/MessageInput/ButtonAgent.d.ts +2 -0
- package/dist/views/MessageInput/ButtonAgent.d.ts.map +1 -0
- package/dist/views/MessageInput/ButtonAgent.js +35 -0
- package/dist/views/MessageInput/ButtonAgent.js.map +1 -0
- package/dist/views/MessageInput/ButtonBar.d.ts +13 -0
- package/dist/views/MessageInput/ButtonBar.d.ts.map +1 -0
- package/dist/views/MessageInput/ButtonBar.js +15 -0
- package/dist/views/MessageInput/ButtonBar.js.map +1 -0
- package/dist/views/MessageInput/ContextBar.d.ts +9 -0
- package/dist/views/MessageInput/ContextBar.d.ts.map +1 -0
- package/dist/views/MessageInput/ContextBar.js +51 -0
- package/dist/views/MessageInput/ContextBar.js.map +1 -0
- package/dist/views/MessageInput/ModelSwitcher/index.d.ts +2 -0
- package/dist/views/MessageInput/ModelSwitcher/index.d.ts.map +1 -0
- package/dist/views/MessageInput/ModelSwitcher/index.js +25 -0
- package/dist/views/MessageInput/ModelSwitcher/index.js.map +1 -0
- package/dist/views/MessageInput/ModelSwitcher/utils.d.ts +30 -0
- package/dist/views/MessageInput/ModelSwitcher/utils.d.ts.map +1 -0
- package/dist/views/MessageInput/ModelSwitcher/utils.js +91 -0
- package/dist/views/MessageInput/ModelSwitcher/utils.js.map +1 -0
- package/dist/views/MessageInput/QuickCommandSelector.d.ts +5 -0
- package/dist/views/MessageInput/QuickCommandSelector.d.ts.map +1 -0
- package/dist/views/MessageInput/QuickCommandSelector.js +104 -0
- package/dist/views/MessageInput/QuickCommandSelector.js.map +1 -0
- package/dist/views/MessageInput/SelectContent.d.ts +2 -0
- package/dist/views/MessageInput/SelectContent.d.ts.map +1 -0
- package/dist/views/MessageInput/SelectContent.js +84 -0
- package/dist/views/MessageInput/SelectContent.js.map +1 -0
- package/dist/views/MessageInput/UploadBar.d.ts +2 -0
- package/dist/views/MessageInput/UploadBar.d.ts.map +1 -0
- package/dist/views/MessageInput/UploadBar.js +74 -0
- package/dist/views/MessageInput/UploadBar.js.map +1 -0
- package/dist/views/MessageInput/UploadDragNDrop.d.ts +14 -0
- package/dist/views/MessageInput/UploadDragNDrop.d.ts.map +1 -0
- package/dist/views/MessageInput/UploadDragNDrop.js +51 -0
- package/dist/views/MessageInput/UploadDragNDrop.js.map +1 -0
- package/dist/views/MessageInput/chat-entry-history.d.ts +11 -0
- package/dist/views/MessageInput/chat-entry-history.d.ts.map +1 -0
- package/dist/views/MessageInput/chat-entry-history.js +78 -0
- package/dist/views/MessageInput/chat-entry-history.js.map +1 -0
- package/dist/views/MessageInput/dictionary.d.ts +1 -1
- package/dist/views/MessageInput/dictionary.d.ts.map +1 -1
- package/dist/views/MessageInput/dictionary.js +52 -10
- package/dist/views/MessageInput/dictionary.js.map +1 -1
- package/dist/views/MessageInput/index.d.ts +9 -6
- package/dist/views/MessageInput/index.d.ts.map +1 -1
- package/dist/views/MessageInput/index.js +112 -20
- package/dist/views/MessageInput/index.js.map +1 -1
- package/dist/views/MessageInput/styled.d.ts +13 -1
- package/dist/views/MessageInput/styled.d.ts.map +1 -1
- package/dist/views/MessageInput/styled.js +223 -85
- package/dist/views/MessageInput/styled.js.map +1 -1
- package/dist/views/MinimizedHeader.d.ts +4 -0
- package/dist/views/MinimizedHeader.d.ts.map +1 -1
- package/dist/views/MinimizedHeader.js +9 -7
- package/dist/views/MinimizedHeader.js.map +1 -1
- package/dist/views/Resources.d.ts +2 -0
- package/dist/views/Resources.d.ts.map +1 -0
- package/dist/views/Resources.js +69 -0
- package/dist/views/Resources.js.map +1 -0
- package/dist/views/Stacks.d.ts +12 -0
- package/dist/views/Stacks.d.ts.map +1 -1
- package/dist/views/Stacks.js +117 -21
- package/dist/views/Stacks.js.map +1 -1
- package/dist/views/Steps/FlowChart/HandleGroup.d.ts +10 -0
- package/dist/views/Steps/FlowChart/HandleGroup.d.ts.map +1 -0
- package/dist/views/Steps/FlowChart/HandleGroup.js +4 -0
- package/dist/views/Steps/FlowChart/HandleGroup.js.map +1 -0
- package/dist/views/Steps/FlowChart/NodeDynamic.d.ts +15 -0
- package/dist/views/Steps/FlowChart/NodeDynamic.d.ts.map +1 -0
- package/dist/views/Steps/FlowChart/NodeDynamic.js +41 -0
- package/dist/views/Steps/FlowChart/NodeDynamic.js.map +1 -0
- package/dist/views/Steps/FlowChart/NodeStep.d.ts +10 -0
- package/dist/views/Steps/FlowChart/NodeStep.d.ts.map +1 -0
- package/dist/views/Steps/FlowChart/NodeStep.js +13 -0
- package/dist/views/Steps/FlowChart/NodeStep.js.map +1 -0
- package/dist/views/Steps/FlowChart/hooks.d.ts +7 -0
- package/dist/views/Steps/FlowChart/hooks.d.ts.map +1 -0
- package/dist/views/Steps/FlowChart/hooks.js +31 -0
- package/dist/views/Steps/FlowChart/hooks.js.map +1 -0
- package/dist/views/Steps/FlowChart/index.d.ts +12 -0
- package/dist/views/Steps/FlowChart/index.d.ts.map +1 -0
- package/dist/views/Steps/FlowChart/index.js +78 -0
- package/dist/views/Steps/FlowChart/index.js.map +1 -0
- package/dist/views/Steps/FlowChart/layout.d.ts +8 -0
- package/dist/views/Steps/FlowChart/layout.d.ts.map +1 -0
- package/dist/views/Steps/FlowChart/layout.js +59 -0
- package/dist/views/Steps/FlowChart/layout.js.map +1 -0
- package/dist/views/Steps/FlowChart/styled.d.ts +14 -0
- package/dist/views/Steps/FlowChart/styled.d.ts.map +1 -0
- package/dist/views/Steps/FlowChart/styled.js +156 -0
- package/dist/views/Steps/FlowChart/styled.js.map +1 -0
- package/dist/views/Steps/FlowChart/types.d.ts +25 -0
- package/dist/views/Steps/FlowChart/types.d.ts.map +1 -0
- package/dist/views/Steps/FlowChart/types.js +2 -0
- package/dist/views/Steps/FlowChart/types.js.map +1 -0
- package/dist/views/Steps/StepModal.d.ts +10 -0
- package/dist/views/Steps/StepModal.d.ts.map +1 -0
- package/dist/views/Steps/StepModal.js +139 -0
- package/dist/views/Steps/StepModal.js.map +1 -0
- package/dist/views/Steps/StepsPanel.d.ts +6 -0
- package/dist/views/Steps/StepsPanel.d.ts.map +1 -0
- package/dist/views/Steps/StepsPanel.js +18 -0
- package/dist/views/Steps/StepsPanel.js.map +1 -0
- package/dist/views/Steps/dictionary.d.ts +43 -0
- package/dist/views/Steps/dictionary.d.ts.map +1 -0
- package/dist/views/Steps/dictionary.js +45 -0
- package/dist/views/Steps/dictionary.js.map +1 -0
- package/dist/views/Steps/index.d.ts +5 -0
- package/dist/views/Steps/index.d.ts.map +1 -0
- package/dist/views/Steps/index.js +30 -0
- package/dist/views/Steps/index.js.map +1 -0
- package/dist/views/Steps/utils.d.ts +7 -0
- package/dist/views/Steps/utils.d.ts.map +1 -0
- package/dist/views/Steps/utils.js +32 -0
- package/dist/views/Steps/utils.js.map +1 -0
- package/dist/views/Tools.d.ts +2 -0
- package/dist/views/Tools.d.ts.map +1 -0
- package/dist/views/Tools.js +53 -0
- package/dist/views/Tools.js.map +1 -0
- package/dist/views/Workspaces/WorkspacesTab.d.ts +20 -0
- package/dist/views/Workspaces/WorkspacesTab.d.ts.map +1 -0
- package/dist/views/Workspaces/WorkspacesTab.js +61 -0
- package/dist/views/Workspaces/WorkspacesTab.js.map +1 -0
- package/dist/views/Workspaces/index.d.ts +5 -0
- package/dist/views/Workspaces/index.d.ts.map +1 -0
- package/dist/views/Workspaces/index.js +69 -0
- package/dist/views/Workspaces/index.js.map +1 -0
- package/package.dev.json +3 -0
- package/package.json +21 -13
- package/package.stg.json +4 -0
- package/src/StackspotAIWidget.tsx +96 -37
- package/src/app-metadata.json +175 -0
- package/src/assets/placeholder.png +0 -0
- package/src/chat-interceptors/CustomInputs.ts +14 -1
- package/src/chat-interceptors/quick-command-questions.ts +12 -2
- package/src/chat-interceptors/quick-commands.ts +286 -52
- package/src/chat-interceptors/send-message.ts +253 -25
- package/src/components/AdaptiveTextArea.tsx +36 -11
- package/src/components/AgentCard/AgentCardCreate.tsx +42 -0
- package/src/components/AgentCard/dictionary.ts +25 -0
- package/src/components/AgentCard/index.tsx +82 -0
- package/src/components/AnimatedOpacity.tsx +55 -0
- package/src/components/AutoFocus.tsx +42 -0
- package/src/components/ButtonFavorite.tsx +78 -0
- package/src/components/Code.tsx +94 -59
- package/src/components/ComponentNavigator.tsx +99 -0
- package/src/components/Fading.tsx +66 -0
- package/src/components/FadingOverflow.tsx +39 -12
- package/src/components/FileDescription.tsx +118 -0
- package/src/components/HistoryList.tsx +19 -2
- package/src/components/ListResource.tsx +60 -0
- package/src/components/Markdown.tsx +2 -1
- package/src/components/Modal.tsx +85 -0
- package/src/components/QuickStartButton.tsx +15 -47
- package/src/components/RightPanelContentList.tsx +15 -0
- package/src/components/RightPanelForm.tsx +64 -22
- package/src/components/RightPanelTabs.tsx +7 -32
- package/src/components/Selector/index.tsx +312 -0
- package/src/components/Selector/styled.ts +158 -0
- package/src/components/StackedBadge.tsx +77 -0
- package/src/components/TabManager.tsx +36 -36
- package/src/components/ToolBadge.tsx +67 -0
- package/src/components/WorkspaceTabNavigator.tsx +172 -0
- package/src/components/form/DescribedCheckboxGroup.tsx +135 -33
- package/src/components/form/DescribedRadioGroup.tsx +136 -32
- package/src/components/form/dictionary.ts +18 -0
- package/src/components/form/styled.ts +1 -2
- package/src/components/form/types.ts +45 -1
- package/src/context/AIWidgetProvider.tsx +19 -0
- package/src/context/hooks.ts +86 -16
- package/src/features.ts +90 -16
- package/src/hooks/midnight-update-view.ts +36 -0
- package/src/images.d.ts +5 -0
- package/src/index.ts +16 -0
- package/src/layout.css +95 -28
- package/src/regex.ts +2 -0
- package/src/right-panel/DefaultPanel.tsx +7 -7
- package/src/right-panel/RightPanel.tsx +3 -0
- package/src/right-panel/RightPanelProvider.tsx +15 -0
- package/src/right-panel/constants.ts +1 -0
- package/src/right-panel/hooks.tsx +8 -1
- package/src/state/ChatEntry.ts +189 -9
- package/src/state/ChatState.ts +131 -14
- package/src/state/ChatTabsController.ts +78 -8
- package/src/state/ObservableState.ts +14 -0
- package/src/state/WidgetState.ts +86 -3
- package/src/state/constants.ts +13 -0
- package/src/state/types.ts +12 -1
- package/src/types.ts +21 -4
- package/src/utils/chat.ts +15 -14
- package/src/utils/check-is-trial.ts +6 -0
- package/src/utils/copy-to-clipboard.ts +29 -0
- package/src/utils/date.ts +28 -4
- package/src/utils/download.ts +5 -0
- package/src/utils/error.ts +56 -0
- package/src/utils/knowledge-source.ts +18 -2
- package/src/utils/planning-tool.ts +41 -0
- package/src/utils/programming-languages.ts +10 -0
- package/src/utils/string.ts +5 -1
- package/src/utils/tools.ts +32 -0
- package/src/utils/update-tool-step.tsx +27 -0
- package/src/utils/upload/FileUpload.ts +63 -0
- package/src/utils/upload/UploadManager.ts +156 -0
- package/src/utils/upload/context.tsx +44 -0
- package/src/utils/upload/errors.ts +34 -0
- package/src/utils/upload/types.ts +7 -0
- package/src/utils/upload/use-paste-upload.tsx +30 -0
- package/src/utils/upload/utils.ts +12 -0
- package/src/utils/url.ts +8 -0
- package/src/views/Agents/AgentDescription.tsx +107 -0
- package/src/views/Agents/AgentsPanel.tsx +57 -0
- package/src/views/Agents/AgentsTab.tsx +126 -0
- package/src/views/Agents/dictionary.ts +45 -0
- package/src/views/Agents/index.tsx +26 -0
- package/src/views/Agents/styled.ts +69 -0
- package/src/views/Agents/useAgentFavorites.ts +63 -0
- package/src/views/Chat/AgentInfo.tsx +13 -8
- package/src/views/Chat/ButtonExecutionDetail.tsx +46 -0
- package/src/views/Chat/ChatMessage.tsx +465 -79
- package/src/views/Chat/ChatMessages.tsx +15 -4
- package/src/views/Chat/StepsList.tsx +394 -0
- package/src/views/Chat/chat-scroll.ts +1 -1
- package/src/views/Chat/events.ts +71 -0
- package/src/views/Chat/index.tsx +17 -3
- package/src/views/Chat/styled.ts +158 -32
- package/src/views/ChatHistory/ChatHistoryPanel.tsx +8 -5
- package/src/views/ChatHistory/HistoryItem.tsx +23 -44
- package/src/views/ChatHistory/index.tsx +6 -4
- package/src/views/ChatHistory/styled.ts +3 -5
- package/src/views/ChatHistory/utils.ts +144 -11
- package/src/views/ChatTabSelection.tsx +47 -20
- package/src/views/Editor.tsx +28 -18
- package/src/views/Home/BuiltInAgent.tsx +67 -0
- package/src/views/Home/CustomAgent.tsx +36 -0
- package/src/views/Home/index.tsx +48 -0
- package/src/views/Home/styled.ts +74 -0
- package/src/views/Home/types.ts +16 -0
- package/src/views/KSDocument.tsx +11 -8
- package/src/views/KnowledgeSources.tsx +169 -62
- package/src/views/MessageInput/AgentSelector.tsx +92 -0
- package/src/views/MessageInput/ButtonAgent.tsx +73 -0
- package/src/views/MessageInput/ButtonBar.tsx +57 -0
- package/src/views/MessageInput/ContextBar.tsx +117 -0
- package/src/views/MessageInput/ModelSwitcher/index.tsx +69 -0
- package/src/views/MessageInput/ModelSwitcher/utils.tsx +143 -0
- package/src/views/MessageInput/QuickCommandSelector.tsx +137 -0
- package/src/views/MessageInput/SelectContent.tsx +99 -0
- package/src/views/MessageInput/UploadBar.tsx +107 -0
- package/src/views/MessageInput/UploadDragNDrop.tsx +79 -0
- package/src/views/MessageInput/chat-entry-history.ts +97 -0
- package/src/views/MessageInput/dictionary.ts +52 -10
- package/src/views/MessageInput/index.tsx +154 -51
- package/src/views/MessageInput/styled.ts +226 -85
- package/src/views/MinimizedHeader.tsx +11 -10
- package/src/views/Resources.tsx +108 -0
- package/src/views/Stacks.tsx +152 -39
- package/src/views/Steps/FlowChart/HandleGroup.tsx +14 -0
- package/src/views/Steps/FlowChart/NodeDynamic.tsx +97 -0
- package/src/views/Steps/FlowChart/NodeStep.tsx +49 -0
- package/src/views/Steps/FlowChart/hooks.ts +41 -0
- package/src/views/Steps/FlowChart/index.tsx +111 -0
- package/src/views/Steps/FlowChart/layout.ts +73 -0
- package/src/views/Steps/FlowChart/styled.ts +157 -0
- package/src/views/Steps/FlowChart/types.ts +28 -0
- package/src/views/Steps/StepModal.tsx +233 -0
- package/src/views/Steps/StepsPanel.tsx +31 -0
- package/src/views/Steps/dictionary.ts +48 -0
- package/src/views/Steps/index.tsx +36 -0
- package/src/views/Steps/utils.tsx +34 -0
- package/src/views/Tools.tsx +77 -0
- package/src/views/Workspaces/WorkspacesTab.tsx +116 -0
- package/src/views/Workspaces/index.tsx +78 -0
- package/tsconfig.json +8 -3
- package/dist/components/Accordion.d.ts +0 -10
- package/dist/components/Accordion.d.ts.map +0 -1
- package/dist/components/Accordion.js +0 -46
- package/dist/components/Accordion.js.map +0 -1
- package/dist/components/FallbackBoundary/ErrorBoundary.d.ts +0 -30
- package/dist/components/FallbackBoundary/ErrorBoundary.d.ts.map +0 -1
- package/dist/components/FallbackBoundary/ErrorBoundary.js +0 -38
- package/dist/components/FallbackBoundary/ErrorBoundary.js.map +0 -1
- package/dist/components/FallbackBoundary/Loading.d.ts +0 -2
- package/dist/components/FallbackBoundary/Loading.d.ts.map +0 -1
- package/dist/components/FallbackBoundary/Loading.js +0 -12
- package/dist/components/FallbackBoundary/Loading.js.map +0 -1
- package/dist/components/FallbackBoundary/index.d.ts +0 -6
- package/dist/components/FallbackBoundary/index.d.ts.map +0 -1
- package/dist/components/FallbackBoundary/index.js +0 -9
- package/dist/components/FallbackBoundary/index.js.map +0 -1
- package/dist/components/IconInput.d.ts +0 -7
- package/dist/components/IconInput.d.ts.map +0 -1
- package/dist/components/IconInput.js +0 -58
- package/dist/components/IconInput.js.map +0 -1
- package/dist/components/OverlayMenu.d.ts +0 -10
- package/dist/components/OverlayMenu.d.ts.map +0 -1
- package/dist/components/OverlayMenu.js +0 -58
- package/dist/components/OverlayMenu.js.map +0 -1
- package/dist/components/ProgressBar.d.ts +0 -11
- package/dist/components/ProgressBar.d.ts.map +0 -1
- package/dist/components/ProgressBar.js +0 -126
- package/dist/components/ProgressBar.js.map +0 -1
- package/dist/components/Tooltip/Tooltip.d.ts +0 -12
- package/dist/components/Tooltip/Tooltip.d.ts.map +0 -1
- package/dist/components/Tooltip/Tooltip.js +0 -17
- package/dist/components/Tooltip/Tooltip.js.map +0 -1
- package/dist/components/Tooltip/TooltipAPI.d.ts +0 -13
- package/dist/components/Tooltip/TooltipAPI.d.ts.map +0 -1
- package/dist/components/Tooltip/TooltipAPI.js +0 -90
- package/dist/components/Tooltip/TooltipAPI.js.map +0 -1
- package/dist/components/Tooltip/context.d.ts +0 -5
- package/dist/components/Tooltip/context.d.ts.map +0 -1
- package/dist/components/Tooltip/context.js +0 -18
- package/dist/components/Tooltip/context.js.map +0 -1
- package/dist/components/Tooltip/index.d.ts +0 -3
- package/dist/components/Tooltip/index.d.ts.map +0 -1
- package/dist/components/Tooltip/index.js +0 -3
- package/dist/components/Tooltip/index.js.map +0 -1
- package/dist/components/Tooltip/style.d.ts +0 -4
- package/dist/components/Tooltip/style.d.ts.map +0 -1
- package/dist/components/Tooltip/style.js +0 -22
- package/dist/components/Tooltip/style.js.map +0 -1
- package/dist/components/Tooltip/types.d.ts +0 -14
- package/dist/components/Tooltip/types.d.ts.map +0 -1
- package/dist/views/Agents.d.ts +0 -2
- package/dist/views/Agents.d.ts.map +0 -1
- package/dist/views/Agents.js +0 -143
- package/dist/views/Agents.js.map +0 -1
- package/dist/views/Home.d.ts +0 -6
- package/dist/views/Home.d.ts.map +0 -1
- package/dist/views/Home.js +0 -68
- package/dist/views/Home.js.map +0 -1
- package/dist/views/MessageInput/ButtonGroup.d.ts +0 -12
- package/dist/views/MessageInput/ButtonGroup.d.ts.map +0 -1
- package/dist/views/MessageInput/ButtonGroup.js +0 -24
- package/dist/views/MessageInput/ButtonGroup.js.map +0 -1
- package/dist/views/MessageInput/InfoBar.d.ts +0 -2
- package/dist/views/MessageInput/InfoBar.d.ts.map +0 -1
- package/dist/views/MessageInput/InfoBar.js +0 -35
- package/dist/views/MessageInput/InfoBar.js.map +0 -1
- package/dist/views/Workspaces.d.ts +0 -2
- package/dist/views/Workspaces.d.ts.map +0 -1
- package/dist/views/Workspaces.js +0 -62
- package/dist/views/Workspaces.js.map +0 -1
- package/src/components/Accordion.tsx +0 -64
- package/src/components/FallbackBoundary/ErrorBoundary.tsx +0 -48
- package/src/components/FallbackBoundary/Loading.tsx +0 -14
- package/src/components/FallbackBoundary/index.tsx +0 -15
- package/src/components/IconInput.tsx +0 -70
- package/src/components/OverlayMenu.tsx +0 -77
- package/src/components/ProgressBar.tsx +0 -153
- package/src/components/Tooltip/Tooltip.tsx +0 -36
- package/src/components/Tooltip/TooltipAPI.ts +0 -84
- package/src/components/Tooltip/context.tsx +0 -24
- package/src/components/Tooltip/index.ts +0 -2
- package/src/components/Tooltip/style.tsx +0 -24
- package/src/components/Tooltip/types.ts +0 -15
- package/src/views/Agents.tsx +0 -200
- package/src/views/Home.tsx +0 -109
- package/src/views/MessageInput/ButtonGroup.tsx +0 -91
- package/src/views/MessageInput/InfoBar.tsx +0 -82
- package/src/views/Workspaces.tsx +0 -92
- /package/dist/{components/Tooltip → utils/upload}/types.js +0 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { BaseFavoriteProps, Favorite } from '@stack-spot/citric-react'
|
|
2
|
+
import { useTranslate } from '@stack-spot/portal-translate'
|
|
3
|
+
import { useEffect, useState } from 'react'
|
|
4
|
+
import { dictionaryFavorites } from './form/dictionary'
|
|
5
|
+
|
|
6
|
+
export interface ItemFavorite {
|
|
7
|
+
id?: string,
|
|
8
|
+
slug?: string,
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface Favorite<T extends ItemFavorite> {
|
|
12
|
+
/**
|
|
13
|
+
* id or slug to be used on functions
|
|
14
|
+
*/
|
|
15
|
+
idOrSlug: string,
|
|
16
|
+
/**
|
|
17
|
+
* Array containing the list of favorite items.
|
|
18
|
+
*/
|
|
19
|
+
listFavorites?: T[],
|
|
20
|
+
/**
|
|
21
|
+
* Function to add an item to the list of favorites.
|
|
22
|
+
* @param idOrSlug - The ID or slug of the content to be added to the favorites list.
|
|
23
|
+
* @returns void
|
|
24
|
+
*/
|
|
25
|
+
onAddFavorite?: (idOrSlug: string) => Promise<boolean>,
|
|
26
|
+
/**
|
|
27
|
+
* Function to remove an item from the list of favorites.
|
|
28
|
+
* @param idOrSlug - The ID or slug of the content to be removed from the favorites list.
|
|
29
|
+
* @returns void
|
|
30
|
+
*/
|
|
31
|
+
onRemoveFavorite?: (idOrSlug: string) => Promise<boolean>,
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
interface Props<T extends ItemFavorite> {
|
|
35
|
+
/**
|
|
36
|
+
* An object containing favorite items and related operations.
|
|
37
|
+
*/
|
|
38
|
+
favorite: Favorite<T>,
|
|
39
|
+
/**
|
|
40
|
+
* @default 'square'
|
|
41
|
+
*/
|
|
42
|
+
appearance?: BaseFavoriteProps['appearance'],
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export const ButtonFavorite = <T extends ItemFavorite>({ favorite, appearance = 'square' }: Props<T>) => {
|
|
46
|
+
const [isFavorite, setIsFavorite] = useState(false)
|
|
47
|
+
const { idOrSlug, listFavorites } = favorite || {}
|
|
48
|
+
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
setIsFavorite(!!listFavorites?.some((fav) => fav.slug === idOrSlug || fav.id === idOrSlug))
|
|
51
|
+
}, [listFavorites])
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<ButtonWrapper isFavorite={isFavorite} favorite={favorite} appearance={appearance} />
|
|
55
|
+
)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const ButtonWrapper = <T extends ItemFavorite>({ isFavorite, favorite, appearance }:
|
|
59
|
+
{ isFavorite: boolean, favorite: Favorite<T>, appearance: BaseFavoriteProps['appearance'] }) => {
|
|
60
|
+
const t = useTranslate(dictionaryFavorites)
|
|
61
|
+
const { idOrSlug, onAddFavorite, onRemoveFavorite } = favorite
|
|
62
|
+
const [loading, setLoading] = useState(false)
|
|
63
|
+
|
|
64
|
+
const handleAction = async (idOrSlug: string, action?: (idOrSlug: string) => Promise<boolean>) => {
|
|
65
|
+
setLoading(true)
|
|
66
|
+
await action?.(idOrSlug)
|
|
67
|
+
setLoading(false)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return <Favorite
|
|
71
|
+
loading={loading}
|
|
72
|
+
appearance={appearance}
|
|
73
|
+
aria-label={`${t[isFavorite ? 'remove' : 'become']} ${t.favorite}`}
|
|
74
|
+
title={`${t[isFavorite ? 'remove' : 'become']} ${t.favorite}`}
|
|
75
|
+
value={isFavorite}
|
|
76
|
+
onChange={checked => handleAction(idOrSlug, checked ? onAddFavorite : onRemoveFavorite)}
|
|
77
|
+
/>
|
|
78
|
+
}
|
package/src/components/Code.tsx
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
* Copied from the extension's webview.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
import { IconButton } from '@citric/ui'
|
|
5
|
+
import { IconButton, Text } from '@stack-spot/citric-react'
|
|
7
6
|
import { theme, useThemeKind } from '@stack-spot/portal-theme'
|
|
8
7
|
import { Dictionary, useTranslate } from '@stack-spot/portal-translate'
|
|
9
8
|
import { CSSProperties, useState } from 'react'
|
|
@@ -12,6 +11,8 @@ import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'
|
|
|
12
11
|
import { materialDark, vs } from 'react-syntax-highlighter/dist/esm/styles/prism'
|
|
13
12
|
import styled from 'styled-components'
|
|
14
13
|
import { WithChildren } from '../types'
|
|
14
|
+
import { copyTextToClipboardWithFallback } from '../utils/copy-to-clipboard'
|
|
15
|
+
import { languages } from '../utils/programming-languages'
|
|
15
16
|
|
|
16
17
|
export type CodeAction = (
|
|
17
18
|
code: string,
|
|
@@ -29,6 +30,7 @@ export interface Props extends WithChildren {
|
|
|
29
30
|
onNewFile?: CodeAction,
|
|
30
31
|
onCopyCode?: CodeAction,
|
|
31
32
|
language?: string,
|
|
33
|
+
showLineNumbers?: boolean,
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
const CodeBox = styled.code`
|
|
@@ -52,23 +54,34 @@ const CodeBox = styled.code`
|
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
56
|
|
|
55
|
-
.
|
|
57
|
+
.header-code {
|
|
56
58
|
display: flex;
|
|
57
59
|
flex-direction: row;
|
|
58
|
-
justify-content:
|
|
60
|
+
justify-content: space-between;
|
|
59
61
|
background: ${theme.color.light[600]};
|
|
60
62
|
padding: 4px 6px;
|
|
61
63
|
border-top-left-radius: 6px;
|
|
62
64
|
border-top-right-radius: 6px;
|
|
63
65
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
.action-bar {
|
|
67
|
+
display: flex;
|
|
68
|
+
flex-direction: row;
|
|
69
|
+
|
|
70
|
+
button {
|
|
71
|
+
background: transparent;
|
|
72
|
+
border: none;
|
|
73
|
+
opacity: 0.75;
|
|
74
|
+
transition: opacity 0.2s;
|
|
75
|
+
|
|
76
|
+
&:hover {
|
|
77
|
+
opacity: 1;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
69
80
|
|
|
70
|
-
|
|
71
|
-
|
|
81
|
+
.copy-btn {
|
|
82
|
+
&:after {
|
|
83
|
+
left: -30px; // prevents scrolling in the horizontal axis.
|
|
84
|
+
}
|
|
72
85
|
}
|
|
73
86
|
}
|
|
74
87
|
}
|
|
@@ -98,14 +111,16 @@ export const Code = ({
|
|
|
98
111
|
language,
|
|
99
112
|
children,
|
|
100
113
|
showActionBar,
|
|
114
|
+
showLineNumbers = true,
|
|
101
115
|
...props
|
|
102
116
|
}: Pick<CodeProps, 'className' | 'messageId'> & Props) => {
|
|
103
117
|
const t = useTranslate(dictionary)
|
|
104
118
|
const themeKind = useThemeKind()
|
|
105
|
-
const [showLines, setShowLines] = useState(
|
|
119
|
+
const [showLines, setShowLines] = useState(showLineNumbers)
|
|
106
120
|
const match = /language-(\w+)/.exec(className || '')
|
|
107
121
|
const computedLanguage = language ?? (match ?? [])[1]?.toLowerCase() ?? 'txt'
|
|
108
122
|
const content = String(children ?? '').replaceAll(/\n\t/g, '\n').trim()
|
|
123
|
+
const languageExtension = languages.find(l => l.value === computedLanguage)?.extensions?.[0] ?? '.txt'
|
|
109
124
|
|
|
110
125
|
function onClickInsert() {
|
|
111
126
|
onInsertCode?.(content, computedLanguage)
|
|
@@ -117,14 +132,11 @@ export const Code = ({
|
|
|
117
132
|
|
|
118
133
|
function onClickCopy() {
|
|
119
134
|
onCopyCode?.(content, computedLanguage)
|
|
120
|
-
|
|
121
|
-
try {
|
|
122
|
-
navigator.clipboard.writeText(content)
|
|
123
|
-
} catch { /* empty */ }
|
|
135
|
+
copyTextToClipboardWithFallback(content)
|
|
124
136
|
}
|
|
125
137
|
|
|
126
138
|
if (children === undefined) return <></>
|
|
127
|
-
if (
|
|
139
|
+
if (computedLanguage === 'txt') {
|
|
128
140
|
return (
|
|
129
141
|
<code {...props} className={className}>
|
|
130
142
|
{children}
|
|
@@ -133,49 +145,66 @@ export const Code = ({
|
|
|
133
145
|
}
|
|
134
146
|
|
|
135
147
|
return (
|
|
136
|
-
<CodeBox className={['code-box', themeKind].join(' ')}>
|
|
148
|
+
<CodeBox className={['code-box', themeKind, className].join(' ')}>
|
|
137
149
|
{showActionBar && (
|
|
138
|
-
<div className="
|
|
139
|
-
<
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
150
|
+
<div className="header-code">
|
|
151
|
+
<div>
|
|
152
|
+
<Text appearance="code2">{computedLanguage ?? ''}</Text>
|
|
153
|
+
</div>
|
|
154
|
+
<div className="action-bar" role="toolbar">
|
|
155
|
+
<IconButton
|
|
156
|
+
icon="Collapse"
|
|
157
|
+
aria-label={showLines ? t.hideLines : t.showLines}
|
|
158
|
+
title={showLines ? t.hideLines : t.showLines}
|
|
159
|
+
onClick={() => setShowLines(v => !v)}
|
|
160
|
+
style={{ position: 'relative', transform: showLines ? undefined : 'rotate(180deg)', transition: 'transform 0.2s' }}
|
|
161
|
+
/>
|
|
162
|
+
<IconButton
|
|
163
|
+
icon="Download"
|
|
164
|
+
aria-label={t.downloadCode}
|
|
165
|
+
title={t.downloadCode}
|
|
166
|
+
onClick={() => {
|
|
167
|
+
try {
|
|
168
|
+
const extension = languageExtension
|
|
169
|
+
const filename = `download${extension}`
|
|
170
|
+
const blob = new Blob([content], { type: 'text/plain;charset=utf-8' })
|
|
171
|
+
const link = document.createElement('a')
|
|
172
|
+
link.href = URL.createObjectURL(blob)
|
|
173
|
+
link.download = filename
|
|
174
|
+
document.body.appendChild(link)
|
|
175
|
+
link.click()
|
|
176
|
+
document.body.removeChild(link)
|
|
177
|
+
URL.revokeObjectURL(link.href)
|
|
178
|
+
} catch (e) {
|
|
179
|
+
// eslint-disable-next-line no-console
|
|
180
|
+
console.error(t.downloadError, e)
|
|
181
|
+
}
|
|
182
|
+
}}
|
|
183
|
+
/>
|
|
184
|
+
<IconButton
|
|
185
|
+
icon="Copy"
|
|
186
|
+
aria-label={t.copy}
|
|
187
|
+
title={t.copy}
|
|
188
|
+
onClick={onClickCopy}
|
|
189
|
+
style={{ position: 'relative' }}
|
|
190
|
+
feedback={t.copied}
|
|
191
|
+
className="copy-btn"
|
|
192
|
+
/>
|
|
193
|
+
{onInsertCode ? <IconButton
|
|
194
|
+
icon="ChevronDoubleDown"
|
|
195
|
+
aria-label={t.insert}
|
|
196
|
+
title={t.insert}
|
|
197
|
+
onClick={onClickInsert}
|
|
198
|
+
style={{ position: 'relative', transform: 'rotate(90deg)' }}
|
|
199
|
+
/> : null}
|
|
200
|
+
{onNewFile ? <IconButton
|
|
201
|
+
icon="AddCode"
|
|
202
|
+
aria-label={t.newFile}
|
|
203
|
+
title={t.newFile}
|
|
204
|
+
onClick={onClickNewFile}
|
|
205
|
+
style={{ position: 'relative' }}
|
|
206
|
+
/> : null}
|
|
207
|
+
</div>
|
|
179
208
|
</div>
|
|
180
209
|
)}
|
|
181
210
|
<div>
|
|
@@ -199,16 +228,22 @@ export const Code = ({
|
|
|
199
228
|
const dictionary = {
|
|
200
229
|
en: {
|
|
201
230
|
copy: 'Copy code to the clipboard',
|
|
231
|
+
copied: 'Copied',
|
|
202
232
|
insert: 'Inject code into editor',
|
|
203
233
|
newFile: 'Creates a new file with this code as its content',
|
|
204
234
|
hideLines: 'Hide line numbers',
|
|
205
235
|
showLines: 'Show line numbers',
|
|
236
|
+
downloadCode: 'Download the code',
|
|
237
|
+
downloadError: 'Error downloading code',
|
|
206
238
|
},
|
|
207
239
|
pt: {
|
|
208
240
|
copy: 'Copiar código para a área de transferência',
|
|
241
|
+
copied: 'Copiado',
|
|
209
242
|
insert: 'Inserir código no editor',
|
|
210
243
|
newFile: 'Criar um novo arquivo com este código como conteúdo',
|
|
211
244
|
hideLines: 'Esconder números das linhas',
|
|
212
245
|
showLines: 'Mostrar números das linhas',
|
|
246
|
+
downloadCode: 'Fazer download do código',
|
|
247
|
+
downloadError: 'Erro ao fazer download do código',
|
|
213
248
|
},
|
|
214
249
|
} satisfies Dictionary
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { IconButton, Row } from '@stack-spot/citric-react'
|
|
2
|
+
import { createContext, useCallback, useContext, useMemo, useState } from 'react'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Map of string keys to React components.
|
|
6
|
+
*/
|
|
7
|
+
export type NavigationMap = Record<string, React.ComponentType<any>>
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Navigation component describing which component to render and its props.
|
|
11
|
+
*/
|
|
12
|
+
export type NavigationComponent<T extends NavigationMap, K extends keyof T = keyof T> = {
|
|
13
|
+
/** Component key to render. */
|
|
14
|
+
component: K,
|
|
15
|
+
|
|
16
|
+
/** Props for the component. */
|
|
17
|
+
props?: T[K] extends React.ComponentType<infer P> ? P : never,
|
|
18
|
+
|
|
19
|
+
/** Render in fullscreen mode. */
|
|
20
|
+
fullScreen?: boolean,
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface NavigationContextType<T extends NavigationMap> {
|
|
24
|
+
/** Navigate to a new component. */
|
|
25
|
+
navigate: <K extends keyof T>(item: NavigationComponent<T, K>) => Promise<void>,
|
|
26
|
+
|
|
27
|
+
/** Go back to previous component. */
|
|
28
|
+
goBack: () => void,
|
|
29
|
+
|
|
30
|
+
/** True if can go back. */
|
|
31
|
+
canGoBack: boolean,
|
|
32
|
+
|
|
33
|
+
/** Current component. */
|
|
34
|
+
currentItem: NavigationComponent<T>,
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface ComponentNavigatorProps<T extends NavigationMap, K extends keyof T> {
|
|
38
|
+
/** Initial component to render. */
|
|
39
|
+
initialItem: NavigationComponent<T, K>,
|
|
40
|
+
|
|
41
|
+
/** Map of available components. */
|
|
42
|
+
components: T,
|
|
43
|
+
|
|
44
|
+
/** Optional title renderer. */
|
|
45
|
+
renderTitle?: (item: NavigationComponent<T, keyof T>) => React.ReactNode,
|
|
46
|
+
|
|
47
|
+
/** Optional CSS class. */
|
|
48
|
+
className?: string,
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const NavigationContext = createContext<NavigationContextType<NavigationMap> | null>(null)
|
|
52
|
+
|
|
53
|
+
export function ComponentNavigator<T extends NavigationMap, K extends keyof T>({
|
|
54
|
+
initialItem,
|
|
55
|
+
components,
|
|
56
|
+
renderTitle,
|
|
57
|
+
className,
|
|
58
|
+
}: ComponentNavigatorProps<T, K>) {
|
|
59
|
+
const [navigationStack, setNavigationStack] = useState<NavigationComponent<T>[]>([initialItem])
|
|
60
|
+
const currentItem = navigationStack[navigationStack.length - 1]
|
|
61
|
+
|
|
62
|
+
const navigate = useCallback((item: NavigationComponent<T>) => { setNavigationStack((prev) => [...prev, item]) }, [])
|
|
63
|
+
const canGoBack = navigationStack.length > 1
|
|
64
|
+
const goBack = useCallback(() => {
|
|
65
|
+
if (canGoBack) {
|
|
66
|
+
setNavigationStack((prev) => prev.slice(0, -1))
|
|
67
|
+
}
|
|
68
|
+
}, [canGoBack])
|
|
69
|
+
|
|
70
|
+
const navigationContext = useMemo(() => ({ navigate, goBack, canGoBack, currentItem }), [navigate, goBack, canGoBack, currentItem])
|
|
71
|
+
const Component = components[currentItem.component]
|
|
72
|
+
const isFullScreen = currentItem.fullScreen
|
|
73
|
+
|
|
74
|
+
if (!Component) {
|
|
75
|
+
// eslint-disable-next-line no-console
|
|
76
|
+
console.error(`Componente not found: ${String(currentItem.component)}`)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return (<NavigationContext.Provider value={navigationContext as NavigationContextType<NavigationMap>}>
|
|
80
|
+
<div className={`content-navigator ${className || isFullScreen ? 'full' : ''}`} role="navigation">
|
|
81
|
+
{canGoBack && (
|
|
82
|
+
<Row gap="12px" style={{ alignSelf: 'stretch' }}>
|
|
83
|
+
<IconButton icon="ArrowLeft" onClick={goBack} className="back-button" aria-label="Back" />
|
|
84
|
+
{renderTitle?.(currentItem)}
|
|
85
|
+
</Row>
|
|
86
|
+
)}
|
|
87
|
+
<Component {...(currentItem.props as any)} />
|
|
88
|
+
</div>
|
|
89
|
+
</NavigationContext.Provider>
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function useComponentNavigation<T extends NavigationMap>(): NavigationContextType<T> {
|
|
94
|
+
const context = useContext(NavigationContext)
|
|
95
|
+
if (!context) {
|
|
96
|
+
throw new Error('useComponentNavigation should be used inside ComponentNavigator')
|
|
97
|
+
}
|
|
98
|
+
return context
|
|
99
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/* eslint-disable react/display-name */
|
|
2
|
+
import { WithStyle } from '@stack-spot/portal-theme'
|
|
3
|
+
import { forwardRef, useEffect, useRef, useState } from 'react'
|
|
4
|
+
import { WithChildren } from '../types'
|
|
5
|
+
|
|
6
|
+
interface Props extends WithChildren, WithStyle {
|
|
7
|
+
/**
|
|
8
|
+
* Whether or not the content is visible.
|
|
9
|
+
*/
|
|
10
|
+
visible: boolean,
|
|
11
|
+
/**
|
|
12
|
+
* Duration of the animation in ms.
|
|
13
|
+
* @default 300
|
|
14
|
+
*/
|
|
15
|
+
duration?: number,
|
|
16
|
+
/**
|
|
17
|
+
* Function to run right before animation to show the content starts.
|
|
18
|
+
*/
|
|
19
|
+
beforeFadeIn?: () => void,
|
|
20
|
+
/**
|
|
21
|
+
* Function to run right before animation to hide the content starts.
|
|
22
|
+
*/
|
|
23
|
+
beforeFadeOut?: () => void,
|
|
24
|
+
/**
|
|
25
|
+
* Function to run right after the animation to show the content ends.
|
|
26
|
+
*/
|
|
27
|
+
afterFadeIn?: () => void,
|
|
28
|
+
/**
|
|
29
|
+
* Function to run right after the animation to hide the content ends.
|
|
30
|
+
*/
|
|
31
|
+
afterFadeOut?: () => void,
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export const Fading = forwardRef<HTMLDivElement, Props>((
|
|
35
|
+
{ visible, children, duration = 300, afterFadeIn, afterFadeOut, beforeFadeIn, beforeFadeOut, className, style },
|
|
36
|
+
ref,
|
|
37
|
+
) => {
|
|
38
|
+
const [isOpaque, setOpaque] = useState(visible)
|
|
39
|
+
const [isRendered, setRendered] = useState(visible)
|
|
40
|
+
const previous = useRef(visible)
|
|
41
|
+
const timeout = useRef<number[]>([])
|
|
42
|
+
const opacity: React.CSSProperties = { transition: `opacity ${duration / 1000}s`, opacity: isOpaque ? 1 : 0 }
|
|
43
|
+
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
if (previous.current === visible) return
|
|
46
|
+
timeout.current.forEach(window.clearTimeout)
|
|
47
|
+
timeout.current = []
|
|
48
|
+
if (visible) {
|
|
49
|
+
setRendered(true)
|
|
50
|
+
if (afterFadeIn) timeout.current.push(window.setTimeout(afterFadeIn, duration))
|
|
51
|
+
beforeFadeIn?.()
|
|
52
|
+
timeout.current.push(window.setTimeout(() => setOpaque(true), 0))
|
|
53
|
+
|
|
54
|
+
} else {
|
|
55
|
+
setOpaque(false)
|
|
56
|
+
beforeFadeOut?.()
|
|
57
|
+
timeout.current.push(window.setTimeout(() => {
|
|
58
|
+
setRendered(false)
|
|
59
|
+
afterFadeOut?.()
|
|
60
|
+
}, duration))
|
|
61
|
+
}
|
|
62
|
+
previous.current = visible
|
|
63
|
+
}, [visible])
|
|
64
|
+
|
|
65
|
+
return isRendered ? <div ref={ref} className={className} style={{ ...style, ...opacity }}>{children}</div> : null
|
|
66
|
+
})
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ChevronDown, ChevronLeft, ChevronRight, ChevronUp } from '@citric/icons'
|
|
1
|
+
import { Icon } from '@stack-spot/citric-icons'
|
|
3
2
|
import { listToClass, theme, WithStyle } from '@stack-spot/portal-theme'
|
|
4
3
|
import { debounce } from 'lodash'
|
|
5
4
|
import { useEffect, useRef } from 'react'
|
|
@@ -10,17 +9,43 @@ type Side = 'top' | 'right' | 'left' | 'bottom'
|
|
|
10
9
|
type ScrollType = 'none' | 'wheel' | 'bar' | 'arrows'
|
|
11
10
|
|
|
12
11
|
interface Props extends WithChildren, WithStyle {
|
|
12
|
+
/**
|
|
13
|
+
* How to scroll the content.
|
|
14
|
+
* - none: overflow is hidden. No scrolling.
|
|
15
|
+
* - wheel: the content is solely scrollable through the mouse wheel and keyboard arrows, no scroll bars are rendered.
|
|
16
|
+
* - bar: this is the normal browser scroll. The content will be scrollable through the mouse wheel, keyboard and scrollbar.
|
|
17
|
+
* - arrows: arrows will be placed in the far edges of the sides that must be scrolled. The content is scrolled through the mouse wheel,
|
|
18
|
+
* keyboard and these arrows. Hovering an arrow slowly scrolls the content, clicking the arrow fully scrolls the content in its direction.
|
|
19
|
+
* There are no scrollbars in this scenario.
|
|
20
|
+
* @default 'none'
|
|
21
|
+
*/
|
|
13
22
|
scroll?: ScrollType,
|
|
23
|
+
/**
|
|
24
|
+
* If true, a horizontal scroll can be performed by using the vertical mouse wheel.
|
|
25
|
+
* @default false
|
|
26
|
+
*/
|
|
14
27
|
enableHorizontalScrollWithVerticalWheel?: boolean,
|
|
28
|
+
/**
|
|
29
|
+
* Which sides to fade when the content overflows.
|
|
30
|
+
*
|
|
31
|
+
* Important: it seems the current solution doesn't support mixing vertical and horizontal scrolls. I'm not sure if this is possible, I
|
|
32
|
+
* believed combining linear gradients would work, but it doesn't.
|
|
33
|
+
*/
|
|
15
34
|
sides?: Side[],
|
|
16
35
|
}
|
|
17
36
|
|
|
37
|
+
// Scrolling can be very fast, this sets a lower limit for us to run listeners without impacting performance.
|
|
18
38
|
const MIN_CHECK_INTERVAL_MS = 20
|
|
39
|
+
// The interval which to scroll the content when a scroll arrow is hovered.
|
|
40
|
+
const SCROLL_INTERVAL_MS = 20
|
|
41
|
+
// This sets the speed of the scroll when the user hovers a scroll arrow.
|
|
42
|
+
const SCROLL_PX = 4
|
|
43
|
+
// Fade masks
|
|
19
44
|
const masks = {
|
|
20
45
|
right: 'linear-gradient(to left, rgb(0, 0, 0, 0) 0%, rgb(0, 0, 0) min(30%, 100px), rgba(0, 0, 0) 100%)',
|
|
21
46
|
left: 'linear-gradient(to right, rgb(0, 0, 0, 0) 0%, rgb(0, 0, 0) min(30%, 100px), rgba(0, 0, 0) 100%)',
|
|
22
|
-
top: 'linear-gradient(to
|
|
23
|
-
bottom: 'linear-gradient(to
|
|
47
|
+
top: 'linear-gradient(to top, rgb(0, 0, 0, 0) 0%, rgb(0, 0, 0) min(30%, 100px), rgba(0, 0, 0) 100%)',
|
|
48
|
+
bottom: 'linear-gradient(to bottom, rgb(0, 0, 0, 0) 0%, rgb(0, 0, 0) min(30%, 100px), rgba(0, 0, 0) 100%)',
|
|
24
49
|
horizontal: 'linear-gradient(to left, rgb(0, 0, 0, 0) 0%, rgb(0, 0, 0) min(30%, 100px), rgb(0, 0, 0) max(70%, calc(100% - 100px)), rgba(0, 0, 0, 0) 100%)',
|
|
25
50
|
vertical: 'linear-gradient(to top, rgb(0, 0, 0, 0) 0%, rgb(0, 0, 0) min(30%, 100px), rgb(0, 0, 0) max(70%, calc(100% - 100px)), rgba(0, 0, 0, 0) 100%)',
|
|
26
51
|
}
|
|
@@ -54,7 +79,7 @@ const OverflowBox = styled.div`
|
|
|
54
79
|
pointer-events: none;
|
|
55
80
|
transition: opacity 0.3s;
|
|
56
81
|
|
|
57
|
-
|
|
82
|
+
.citric-icon {
|
|
58
83
|
background-color: ${theme.color.light[300]};
|
|
59
84
|
border-radius: 50%;
|
|
60
85
|
width: 16px;
|
|
@@ -95,9 +120,11 @@ const OverflowBox = styled.div`
|
|
|
95
120
|
}
|
|
96
121
|
`
|
|
97
122
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
123
|
+
/**
|
|
124
|
+
* This component applies a fading graphical effect to its content if it overflows in any of the sides specified by the props.
|
|
125
|
+
*
|
|
126
|
+
* This also controls how this overflow is scrolled, introducing a new scrolling technique, which applies arrows to the overflowing side.
|
|
127
|
+
*/
|
|
101
128
|
export const FadingOverflow = (
|
|
102
129
|
{ children, scroll = 'none', sides, enableHorizontalScrollWithVerticalWheel, className, ...props }: Props,
|
|
103
130
|
) => {
|
|
@@ -225,10 +252,10 @@ export const FadingOverflow = (
|
|
|
225
252
|
return scroll === 'arrows' ? (
|
|
226
253
|
<OverflowBox {...props} className={listToClass(['scroll-arrows', className])}>
|
|
227
254
|
<div className="content" ref={ref}>{children}</div>
|
|
228
|
-
<div className="scroll-to-left" aria-hidden><
|
|
229
|
-
<div className="scroll-to-right" aria-hidden><
|
|
230
|
-
<div className="scroll-to-top" aria-hidden><
|
|
231
|
-
<div className="scroll-to-bottom" aria-hidden><
|
|
255
|
+
<div className="scroll-to-left" aria-hidden><Icon icon="ChevronLeft" size="xs" /></div>
|
|
256
|
+
<div className="scroll-to-right" aria-hidden><Icon icon="ChevronRight" size="xs" /></div>
|
|
257
|
+
<div className="scroll-to-top" aria-hidden><Icon icon="ChevronUp" size="xs" /></div>
|
|
258
|
+
<div className="scroll-to-bottom" aria-hidden><Icon icon="ChevronDown" size="xs" /></div>
|
|
232
259
|
</OverflowBox>
|
|
233
260
|
) : <OverflowBox {...props} className={className} ref={ref}>{children}</OverflowBox>
|
|
234
261
|
}
|