@parhelia/core 0.1.12889 → 0.1.12891
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/agents-view/AgentCard.js +7 -12
- package/dist/agents-view/AgentCard.js.map +1 -1
- package/dist/agents-view/AgentGalleryCard.js +2 -3
- package/dist/agents-view/AgentGalleryCard.js.map +1 -1
- package/dist/agents-view/AgentGalleryView.js +6 -6
- package/dist/agents-view/AgentGalleryView.js.map +1 -1
- package/dist/agents-view/AgentProfileIcon.d.ts +9 -0
- package/dist/agents-view/AgentProfileIcon.js +28 -0
- package/dist/agents-view/AgentProfileIcon.js.map +1 -0
- package/dist/agents-view/AgentsSidebar.js +2 -2
- package/dist/agents-view/AgentsSidebar.js.map +1 -1
- package/dist/agents-view/AgentsTitlebar.d.ts +1 -2
- package/dist/agents-view/AgentsTitlebar.js +5 -6
- package/dist/agents-view/AgentsTitlebar.js.map +1 -1
- package/dist/agents-view/AgentsView.d.ts +8 -1
- package/dist/agents-view/AgentsView.js +8 -8
- package/dist/agents-view/AgentsView.js.map +1 -1
- package/dist/agents-view/AgentsWorkspaceView.js +30 -22
- package/dist/agents-view/AgentsWorkspaceView.js.map +1 -1
- package/dist/agents-view/CreateAgentView.js +1 -1
- package/dist/agents-view/CreateAgentView.js.map +1 -1
- package/dist/agents-view/DateAgentsGroup.js +1 -1
- package/dist/agents-view/DateAgentsGroup.js.map +1 -1
- package/dist/agents-view/ProfileAgentsGroup.js +3 -6
- package/dist/agents-view/ProfileAgentsGroup.js.map +1 -1
- package/dist/components/FilterInput.d.ts +2 -0
- package/dist/components/FilterInput.js +2 -2
- package/dist/components/FilterInput.js.map +1 -1
- package/dist/components/MarkdownDisplay.js +4 -4
- package/dist/components/MarkdownDisplay.js.map +1 -1
- package/dist/components/PageHeader.js +1 -1
- package/dist/components/PageHeader.js.map +1 -1
- package/dist/components/ui/LanguageSelectionGrid.js +1 -1
- package/dist/components/ui/LanguageSelectionGrid.js.map +1 -1
- package/dist/components/ui/alert-dialog.js +1 -1
- package/dist/components/ui/alert-dialog.js.map +1 -1
- package/dist/components/ui/card.d.ts +2 -1
- package/dist/components/ui/card.js +2 -2
- package/dist/components/ui/card.js.map +1 -1
- package/dist/components/ui/multi-switch-button.d.ts +22 -0
- package/dist/components/ui/multi-switch-button.js +12 -0
- package/dist/components/ui/multi-switch-button.js.map +1 -0
- package/dist/components/ui/styled-dialog-title.js +1 -1
- package/dist/components/ui/styled-dialog-title.js.map +1 -1
- package/dist/config/config.js +6 -4
- package/dist/config/config.js.map +1 -1
- package/dist/config/types/sidebar.d.ts +2 -0
- package/dist/config/types.d.ts +1 -0
- package/dist/config/types.js.map +1 -1
- package/dist/editor/AdminRequiredView.js +1 -1
- package/dist/editor/AdminRequiredView.js.map +1 -1
- package/dist/editor/ContentTree.js +1 -1
- package/dist/editor/ContentTree.js.map +1 -1
- package/dist/editor/FieldActionsOverlay.js +2 -2
- package/dist/editor/FieldActionsOverlay.js.map +1 -1
- package/dist/editor/FieldHistory.js +2 -2
- package/dist/editor/FieldHistory.js.map +1 -1
- package/dist/editor/GlobalMenuBar.js +3 -1
- package/dist/editor/GlobalMenuBar.js.map +1 -1
- package/dist/editor/LinkEditorDialog.js +10 -9
- package/dist/editor/LinkEditorDialog.js.map +1 -1
- package/dist/editor/MainLayout.js +11 -9
- package/dist/editor/MainLayout.js.map +1 -1
- package/dist/editor/MigrationsView.js +4 -4
- package/dist/editor/MigrationsView.js.map +1 -1
- package/dist/editor/Titlebar.d.ts +1 -1
- package/dist/editor/Titlebar.js +2 -2
- package/dist/editor/Titlebar.js.map +1 -1
- package/dist/editor/WorkspaceTitleSwitcher.d.ts +5 -0
- package/dist/editor/WorkspaceTitleSwitcher.js +86 -0
- package/dist/editor/WorkspaceTitleSwitcher.js.map +1 -0
- package/dist/editor/ai/AgentProfileSelector.js +2 -2
- package/dist/editor/ai/AgentProfileSelector.js.map +1 -1
- package/dist/editor/ai/Agents.js +155 -43
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/ai/HeartbeatDiagnosticsPanel.js +1 -1
- package/dist/editor/ai/HeartbeatDiagnosticsPanel.js.map +1 -1
- package/dist/editor/ai/InlineAiDialog.js +4 -4
- package/dist/editor/ai/InlineAiDialog.js.map +1 -1
- package/dist/editor/ai/InlineAiTextEditTooltip.js +1 -1
- package/dist/editor/ai/InlineAiTextEditTooltip.js.map +1 -1
- package/dist/editor/ai/InlineAiTrigger.js +1 -1
- package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
- package/dist/editor/ai/agentMessageMarkdown.js +3 -3
- package/dist/editor/ai/agentMessageMarkdown.js.map +1 -1
- package/dist/editor/ai/dialogs/ComponentTypeSelectorInline.js +2 -2
- package/dist/editor/ai/dialogs/ComponentTypeSelectorInline.js.map +1 -1
- package/dist/editor/ai/dialogs/QuestionnaireInline.js +2 -2
- package/dist/editor/ai/dialogs/QuestionnaireInline.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentBanners.js +2 -2
- package/dist/editor/ai/terminal/components/AgentBanners.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentBrowserClaimBanner.js +1 -1
- package/dist/editor/ai/terminal/components/AgentBrowserClaimBanner.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentCostDisplay.js +1 -1
- package/dist/editor/ai/terminal/components/AgentCostDisplay.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentFullPromptControls.js +1 -1
- package/dist/editor/ai/terminal/components/AgentFullPromptControls.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentGreeting.js +1 -1
- package/dist/editor/ai/terminal/components/AgentGreeting.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentProjectProgress.js +1 -1
- package/dist/editor/ai/terminal/components/AgentProjectProgress.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js +3 -3
- package/dist/editor/ai/terminal/components/AgentPromptActionButtons.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptComposer.d.ts +2 -1
- package/dist/editor/ai/terminal/components/AgentPromptComposer.js +5 -2
- package/dist/editor/ai/terminal/components/AgentPromptComposer.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.d.ts +2 -1
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.js +5 -3
- package/dist/editor/ai/terminal/components/AgentPromptInputArea.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js +3 -1
- package/dist/editor/ai/terminal/components/AgentTerminalFullLayout.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js +3 -3
- package/dist/editor/ai/terminal/components/AgentTerminalStatusBar.js.map +1 -1
- package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js +2 -1
- package/dist/editor/ai/terminal/components/AgentTerminalSummaryLayout.js.map +1 -1
- package/dist/editor/ai/terminal/components/AiResponseMessage.js +8 -8
- package/dist/editor/ai/terminal/components/AiResponseMessage.js.map +1 -1
- package/dist/editor/ai/terminal/components/QuestionnaireRecap.js +2 -2
- package/dist/editor/ai/terminal/components/QuestionnaireRecap.js.map +1 -1
- package/dist/editor/ai/terminal/components/ToolCallDisplay.js +5 -5
- package/dist/editor/ai/terminal/components/ToolCallDisplay.js.map +1 -1
- package/dist/editor/ai-image-editor/AiImageEditorDialog.js +3 -3
- package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
- package/dist/editor/bridge/protocol.d.ts +0 -5
- package/dist/editor/bridge/protocol.js.map +1 -1
- package/dist/editor/client/AboutDialog.js +1 -1
- package/dist/editor/client/AboutDialog.js.map +1 -1
- package/dist/editor/client/EditorShell.js +15 -8
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/operations.js +1 -1
- package/dist/editor/client/operations.js.map +1 -1
- package/dist/editor/client/pageModelBuilder.d.ts +1 -0
- package/dist/editor/client/pageModelBuilder.js +22 -13
- package/dist/editor/client/pageModelBuilder.js.map +1 -1
- package/dist/editor/content-tree/IndicatorSettings.js +3 -2
- package/dist/editor/content-tree/IndicatorSettings.js.map +1 -1
- package/dist/editor/media-selector/Preview.js +1 -1
- package/dist/editor/media-selector/Preview.js.map +1 -1
- package/dist/editor/media-selector/TreeSelector.js +1 -1
- package/dist/editor/media-selector/TreeSelector.js.map +1 -1
- package/dist/editor/menubar/ItemLanguageVersion.js +3 -14
- package/dist/editor/menubar/ItemLanguageVersion.js.map +1 -1
- package/dist/editor/menubar/VersionSelector.d.ts +3 -2
- package/dist/editor/menubar/VersionSelector.js +28 -12
- package/dist/editor/menubar/VersionSelector.js.map +1 -1
- package/dist/editor/menubar/WorkflowButton.js +9 -8
- package/dist/editor/menubar/WorkflowButton.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js +7 -7
- package/dist/editor/menubar/toolbar-sections/ManualBrowser.js.map +1 -1
- package/dist/editor/notifications/NotificationCenter.js +1 -1
- package/dist/editor/notifications/NotificationCenter.js.map +1 -1
- package/dist/editor/notifications/NotificationItem.js +4 -3
- package/dist/editor/notifications/NotificationItem.js.map +1 -1
- package/dist/editor/notifications/watchEventOptions.js +3 -2
- package/dist/editor/notifications/watchEventOptions.js.map +1 -1
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js +10 -4
- package/dist/editor/page-editor-chrome/BridgeInlineFormatOverlay.js.map +1 -1
- package/dist/editor/page-editor-chrome/FeedbackHighlightBadge.js +1 -1
- package/dist/editor/page-editor-chrome/FeedbackHighlightBadge.js.map +1 -1
- package/dist/editor/page-viewer/EditorFormHintPopover.js +1 -1
- package/dist/editor/page-viewer/EditorFormHintPopover.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.js +67 -0
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/page-viewer/RenderingParametersSection.js +1 -1
- package/dist/editor/page-viewer/RenderingParametersSection.js.map +1 -1
- package/dist/editor/personalization/PersonalizationPanel.js +3 -3
- package/dist/editor/personalization/PersonalizationPanel.js.map +1 -1
- package/dist/editor/personalization/RuleElementPicker.js +1 -1
- package/dist/editor/personalization/RuleElementPicker.js.map +1 -1
- package/dist/editor/reviews/CommentDisplayPopover.js +1 -1
- package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
- package/dist/editor/reviews/CommentEditor.js +1 -1
- package/dist/editor/reviews/CommentEditor.js.map +1 -1
- package/dist/editor/reviews/CommentPopover.js +1 -1
- package/dist/editor/reviews/CommentPopover.js.map +1 -1
- package/dist/editor/reviews/CommentView.js +2 -2
- package/dist/editor/reviews/CommentView.js.map +1 -1
- package/dist/editor/reviews/CreateReviewConfirmStep.js +2 -2
- package/dist/editor/reviews/CreateReviewConfirmStep.js.map +1 -1
- package/dist/editor/reviews/CreateReviewDetailsStep.js +6 -6
- package/dist/editor/reviews/CreateReviewDetailsStep.js.map +1 -1
- package/dist/editor/reviews/CreateReviewSuccessStep.js +2 -2
- package/dist/editor/reviews/CreateReviewSuccessStep.js.map +1 -1
- package/dist/editor/reviews/DecisionsMatrix.js +3 -3
- package/dist/editor/reviews/DecisionsMatrix.js.map +1 -1
- package/dist/editor/reviews/EditReviewSettingsDialog.js +7 -7
- package/dist/editor/reviews/EditReviewSettingsDialog.js.map +1 -1
- package/dist/editor/reviews/LatestFeedback.js +1 -1
- package/dist/editor/reviews/LatestFeedback.js.map +1 -1
- package/dist/editor/reviews/ReviewDetail.js +2 -2
- package/dist/editor/reviews/ReviewDetail.js.map +1 -1
- package/dist/editor/reviews/ReviewersPanel.js +1 -1
- package/dist/editor/reviews/ReviewersPanel.js.map +1 -1
- package/dist/editor/reviews/SuggestedEdit.js +5 -5
- package/dist/editor/reviews/SuggestedEdit.js.map +1 -1
- package/dist/editor/reviews/SuggestionDisplayPopover.js +1 -1
- package/dist/editor/reviews/SuggestionDisplayPopover.js.map +1 -1
- package/dist/editor/settings/About.js +4 -4
- package/dist/editor/settings/About.js.map +1 -1
- package/dist/editor/settings/QuotaInfo.js +6 -6
- package/dist/editor/settings/QuotaInfo.js.map +1 -1
- package/dist/editor/settings/SettingsCard.d.ts +4 -0
- package/dist/editor/settings/SettingsCard.js +7 -0
- package/dist/editor/settings/SettingsCard.js.map +1 -0
- package/dist/editor/settings/SettingsView.js +1 -1
- package/dist/editor/settings/SettingsView.js.map +1 -1
- package/dist/editor/settings/index/AdvancedSettings.js +1 -1
- package/dist/editor/settings/index/AdvancedSettings.js.map +1 -1
- package/dist/editor/settings/index/EmbeddingProviderInfo.js +1 -1
- package/dist/editor/settings/index/EmbeddingProviderInfo.js.map +1 -1
- package/dist/editor/settings/index/IndexStatusCards.js +1 -1
- package/dist/editor/settings/index/IndexStatusCards.js.map +1 -1
- package/dist/editor/settings/index/LatestEmbeddingsList.js +1 -1
- package/dist/editor/settings/index/LatestEmbeddingsList.js.map +1 -1
- package/dist/editor/settings/index/RebuildIndexSection.js +1 -1
- package/dist/editor/settings/index/RebuildIndexSection.js.map +1 -1
- package/dist/editor/settings/index/RecentBatchesList.js +1 -1
- package/dist/editor/settings/index/RecentBatchesList.js.map +1 -1
- package/dist/editor/settings/panels/AgentProfileConfigPanel.js +3 -2
- package/dist/editor/settings/panels/AgentProfileConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/AgentToolsPanel.js +1 -1
- package/dist/editor/settings/panels/AgentToolsPanel.js.map +1 -1
- package/dist/editor/settings/panels/AgentsPanel.js +1 -1
- package/dist/editor/settings/panels/AgentsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ClusterInstancesPanel.js +3 -3
- package/dist/editor/settings/panels/ClusterInstancesPanel.js.map +1 -1
- package/dist/editor/settings/panels/FieldTypeSerializersPanel.js +1 -1
- package/dist/editor/settings/panels/FieldTypeSerializersPanel.js.map +1 -1
- package/dist/editor/settings/panels/GroupedFieldConfigPanel.js +2 -2
- package/dist/editor/settings/panels/GroupedFieldConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js +3 -2
- package/dist/editor/settings/panels/JavaScriptToolAgentPanel.js.map +1 -1
- package/dist/editor/settings/panels/JavaScriptToolsPanel.js +2 -2
- package/dist/editor/settings/panels/JavaScriptToolsPanel.js.map +1 -1
- package/dist/editor/settings/panels/McpToolsPanel.js +1 -1
- package/dist/editor/settings/panels/McpToolsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ModelConfigPanel.js +1 -1
- package/dist/editor/settings/panels/ModelConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/ModelsPanel.js +2 -2
- package/dist/editor/settings/panels/ModelsPanel.js.map +1 -1
- package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js +1 -1
- package/dist/editor/settings/panels/NotificationSubscriptionsPanel.js.map +1 -1
- package/dist/editor/settings/panels/PersistentLogsPanel.js +3 -3
- package/dist/editor/settings/panels/PersistentLogsPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js +3 -2
- package/dist/editor/settings/panels/ProjectTemplateAgentPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplateSelector.js +1 -1
- package/dist/editor/settings/panels/ProjectTemplateSelector.js.map +1 -1
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js +3 -3
- package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
- package/dist/editor/settings/panels/ProviderIcon.js +1 -1
- package/dist/editor/settings/panels/ProviderIcon.js.map +1 -1
- package/dist/editor/settings/panels/SearchConfigPanel.js +1 -1
- package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -1
- package/dist/editor/settings/panels/SettingsPanel.js +1 -1
- package/dist/editor/settings/panels/SettingsPanel.js.map +1 -1
- package/dist/editor/settings/panels/StatusPanel.js +1 -1
- package/dist/editor/settings/panels/StatusPanel.js.map +1 -1
- package/dist/editor/settings/panels/SystemSettingsPanel.js +1 -1
- package/dist/editor/settings/panels/SystemSettingsPanel.js.map +1 -1
- package/dist/editor/settings/panels/UserPreferencesPanel.js +1 -1
- package/dist/editor/settings/panels/UserPreferencesPanel.js.map +1 -1
- package/dist/editor/setup-wizard/steps/CreateSettingsStep.js +1 -1
- package/dist/editor/setup-wizard/steps/CreateSettingsStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/LicenseActivationStep.js +1 -1
- package/dist/editor/setup-wizard/steps/LicenseActivationStep.js.map +1 -1
- package/dist/editor/setup-wizard/steps/ProviderStep.js +6 -6
- package/dist/editor/setup-wizard/steps/ProviderStep.js.map +1 -1
- package/dist/editor/sidebar/Favorites.js +1 -1
- package/dist/editor/sidebar/Favorites.js.map +1 -1
- package/dist/editor/sidebar/SidebarPanel.js +3 -1
- package/dist/editor/sidebar/SidebarPanel.js.map +1 -1
- package/dist/editor/sidebar/SidebarStack.js +1 -0
- package/dist/editor/sidebar/SidebarStack.js.map +1 -1
- package/dist/editor/sidebar/Workbox.js +1 -1
- package/dist/editor/sidebar/Workbox.js.map +1 -1
- package/dist/editor/template-wizard/TemplateStructureInlineEditor.js +12 -11
- package/dist/editor/template-wizard/TemplateStructureInlineEditor.js.map +1 -1
- package/dist/editor/tree-indicators/GutterColumns.js +3 -2
- package/dist/editor/tree-indicators/GutterColumns.js.map +1 -1
- package/dist/editor/ui/Icons.js +1 -1
- package/dist/editor/ui/Icons.js.map +1 -1
- package/dist/editor/ui/ItemCollectionEditor.js +2 -2
- package/dist/editor/ui/ItemCollectionEditor.js.map +1 -1
- package/dist/editor/ui/PublishItemDialog.js +2 -2
- package/dist/editor/ui/PublishItemDialog.js.map +1 -1
- package/dist/editor/ui/PublishRestrictionsDialog.js +5 -5
- package/dist/editor/ui/PublishRestrictionsDialog.js.map +1 -1
- package/dist/editor/ui/Section.js +1 -1
- package/dist/editor/ui/Section.js.map +1 -1
- package/dist/editor/ui/SimpleMenu.js +3 -3
- package/dist/editor/ui/SimpleMenu.js.map +1 -1
- package/dist/editor/ui/SimpleTabs.d.ts +2 -1
- package/dist/editor/ui/SimpleTabs.js +23 -5
- package/dist/editor/ui/SimpleTabs.js.map +1 -1
- package/dist/editor/ui/Splitter.js +120 -3
- package/dist/editor/ui/Splitter.js.map +1 -1
- package/dist/editor/ui/TemplateSelectorDialog.js +2 -2
- package/dist/editor/ui/TemplateSelectorDialog.js.map +1 -1
- package/dist/editor/ui/splitterResizeEvent.d.ts +7 -0
- package/dist/editor/ui/splitterResizeEvent.js +6 -0
- package/dist/editor/ui/splitterResizeEvent.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/licensing/LicenseOverlay.js +2 -2
- package/dist/licensing/LicenseOverlay.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/setup/wizard/steps/ImportModelDialog.js +3 -3
- package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -1
- package/dist/splash-screen/ModernSplashScreen.js +26 -17
- package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
- package/dist/splash-screen/ParheliaAssistantChat.js +2 -2
- package/dist/splash-screen/ParheliaAssistantChat.js.map +1 -1
- package/dist/splash-screen/RecentPages.js +2 -2
- package/dist/splash-screen/RecentPages.js.map +1 -1
- package/dist/task-board/TaskBoardWorkspace.js +153 -164
- package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
- package/dist/task-board/components/CommentsList.js +1 -1
- package/dist/task-board/components/CommentsList.js.map +1 -1
- package/dist/task-board/components/CreateTaskDialog.js +10 -6
- package/dist/task-board/components/CreateTaskDialog.js.map +1 -1
- package/dist/task-board/components/ItemCollectionEditorDialog.js +1 -1
- package/dist/task-board/components/ItemCollectionEditorDialog.js.map +1 -1
- package/dist/task-board/components/ProjectDashboard.d.ts +12 -22
- package/dist/task-board/components/ProjectDashboard.js +121 -109
- package/dist/task-board/components/ProjectDashboard.js.map +1 -1
- package/dist/task-board/components/ProjectListContent.js +5 -5
- package/dist/task-board/components/ProjectListContent.js.map +1 -1
- package/dist/task-board/components/ProjectOverviewContent.js +7 -4
- package/dist/task-board/components/ProjectOverviewContent.js.map +1 -1
- package/dist/task-board/components/ProjectPropertiesPanel.d.ts +2 -0
- package/dist/task-board/components/ProjectPropertiesPanel.js +12 -9
- package/dist/task-board/components/ProjectPropertiesPanel.js.map +1 -1
- package/dist/task-board/components/ProjectSettingsDialog.d.ts +18 -0
- package/dist/task-board/components/ProjectSettingsDialog.js +57 -47
- package/dist/task-board/components/ProjectSettingsDialog.js.map +1 -1
- package/dist/task-board/components/TaskAgentPanel.js +6 -5
- package/dist/task-board/components/TaskAgentPanel.js.map +1 -1
- package/dist/task-board/components/TaskAssigneePicker.js +3 -2
- package/dist/task-board/components/TaskAssigneePicker.js.map +1 -1
- package/dist/task-board/components/TaskAttachmentsSection.js +2 -2
- package/dist/task-board/components/TaskAttachmentsSection.js.map +1 -1
- package/dist/task-board/components/TaskBoardHomeView.d.ts +1 -21
- package/dist/task-board/components/TaskBoardHomeView.js +18 -155
- package/dist/task-board/components/TaskBoardHomeView.js.map +1 -1
- package/dist/task-board/components/TaskBoardMyTasksSidebar.js +4 -4
- package/dist/task-board/components/TaskBoardMyTasksSidebar.js.map +1 -1
- package/dist/task-board/components/TaskBoardProjectListSidebar.js +71 -14
- package/dist/task-board/components/TaskBoardProjectListSidebar.js.map +1 -1
- package/dist/task-board/components/TaskBoardTitlebar.js +9 -52
- package/dist/task-board/components/TaskBoardTitlebar.js.map +1 -1
- package/dist/task-board/components/TaskCard.js +7 -24
- package/dist/task-board/components/TaskCard.js.map +1 -1
- package/dist/task-board/components/TaskDetailPanel.js +18 -12
- package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
- package/dist/task-board/components/TaskRow.js +19 -18
- package/dist/task-board/components/TaskRow.js.map +1 -1
- package/dist/task-board/components/TaskboardPersistentLogPanel.js +1 -1
- package/dist/task-board/components/TaskboardPersistentLogPanel.js.map +1 -1
- package/dist/task-board/components/WizardCommunicationCards.js +4 -4
- package/dist/task-board/components/WizardCommunicationCards.js.map +1 -1
- package/dist/task-board/components/WizardCommunicationShared.js +3 -3
- package/dist/task-board/components/WizardTaskDetailsPanel.js +2 -2
- package/dist/task-board/components/WizardTaskDetailsPanel.js.map +1 -1
- package/dist/task-board/taskBoardNavStore.d.ts +0 -2
- package/dist/task-board/taskBoardNavStore.js +0 -2
- package/dist/task-board/taskBoardNavStore.js.map +1 -1
- package/dist/task-board/taskStatus.js +2 -2
- package/dist/task-board/taskStatus.js.map +1 -1
- package/dist/task-board/views/DependencyGraphView.js +19 -8
- package/dist/task-board/views/DependencyGraphView.js.map +1 -1
- package/dist/task-board/views/KanbanView.js +240 -39
- package/dist/task-board/views/KanbanView.js.map +1 -1
- package/dist/task-board/views/ListView.js +2 -3
- package/dist/task-board/views/ListView.js.map +1 -1
- package/dist/task-board/views/WizardView.d.ts +2 -0
- package/dist/task-board/views/WizardView.js +11 -8
- package/dist/task-board/views/WizardView.js.map +1 -1
- package/package.json +2 -1
- package/styles.css +6 -0
|
@@ -3,7 +3,7 @@ import { lazy, Suspense, useCallback, useEffect, useMemo, useRef, useState, } fr
|
|
|
3
3
|
import { toast } from "sonner";
|
|
4
4
|
import { cn } from "../lib/utils";
|
|
5
5
|
import { Splitter } from "../editor/ui/Splitter";
|
|
6
|
-
import { deleteProject, getExecutionState, getGraphLayout, getProject, getProjects, getTasks, getMyTasks, getDependencies, restartProject, runOrchestrator, triggerPlanning,
|
|
6
|
+
import { deleteProject, getExecutionState, getGraphLayout, getProject, getProjects, getTasks, getMyTasks, getDependencies, restartProject, runOrchestrator, triggerPlanning, updateTask, } from "./services/taskService";
|
|
7
7
|
import { loadAiProfiles } from "../editor/services/aiService";
|
|
8
8
|
import { useEditContext } from "../editor/client/editContext";
|
|
9
9
|
import { LicenseFeatures, useFeature } from "../licensing";
|
|
@@ -13,10 +13,11 @@ import { WizardView } from "./views/WizardView";
|
|
|
13
13
|
import { SimpleTabs } from "../editor/ui/SimpleTabs";
|
|
14
14
|
import { TaskDetailPanel, } from "./components/TaskDetailPanel";
|
|
15
15
|
import { TaskAgentPanel } from "./components/TaskAgentPanel";
|
|
16
|
-
import { ProjectDashboard, } from "./components/ProjectDashboard";
|
|
16
|
+
import { ProjectDashboard, ProjectKpisPanel, } from "./components/ProjectDashboard";
|
|
17
17
|
import { CreateTaskDialog } from "./components/CreateTaskDialog";
|
|
18
18
|
import { CreateProjectDialog } from "./components/CreateProjectDialog";
|
|
19
|
-
import {
|
|
19
|
+
import { ProjectSettingsPanel } from "./components/ProjectSettingsDialog";
|
|
20
|
+
import { ProjectPropertiesPanel } from "./components/ProjectPropertiesPanel";
|
|
20
21
|
import { TaskBoardHomeView } from "./components/TaskBoardHomeView";
|
|
21
22
|
import { EditorSlotContextProvider } from "../editor/views/editorSlotContext";
|
|
22
23
|
import { SingleEditView } from "../editor/views/SingleEditView";
|
|
@@ -30,8 +31,7 @@ import { normalizeTaskStatus } from "./taskStatus";
|
|
|
30
31
|
import { getTaskExecutionDisplay, } from "./taskExecutionStatus";
|
|
31
32
|
import { indexTaskExecutionRecords, overlayTaskExecutionList, } from "./taskExecutionRecords";
|
|
32
33
|
import { WizardCommunicationCenter } from "./components/WizardCommunicationCenter";
|
|
33
|
-
import {
|
|
34
|
-
import { Loader2, Plus } from "lucide-react";
|
|
34
|
+
import { Loader2 } from "lucide-react";
|
|
35
35
|
import { MainContentTree } from "../editor/sidebar/MainContentTree";
|
|
36
36
|
import { useTaskBoardAgentPanelState } from "./useTaskBoardAgentPanelState";
|
|
37
37
|
const DependencyGraphView = lazy(() => import("./views/DependencyGraphView").then((module) => ({
|
|
@@ -48,8 +48,19 @@ function TaskboardPreviewEditor() {
|
|
|
48
48
|
const TASKBOARD_PROJECT_QUERY_KEY = "tbProjectId";
|
|
49
49
|
const TASKBOARD_TASK_QUERY_KEY = "tbTaskId";
|
|
50
50
|
const TASKBOARD_VIEW_QUERY_KEY = "tbView";
|
|
51
|
-
const TASKBOARD_WIZARD_QUERY_KEY = "tbWizard";
|
|
52
51
|
const WS_REFRESH_DELAY_MS = 500;
|
|
52
|
+
const TASKBOARD_VIEW_TAB_IDS = [
|
|
53
|
+
"overview",
|
|
54
|
+
"kanban",
|
|
55
|
+
"list",
|
|
56
|
+
"graph",
|
|
57
|
+
"kpis",
|
|
58
|
+
"settings",
|
|
59
|
+
"properties",
|
|
60
|
+
];
|
|
61
|
+
function getTaskBoardViewTabIndex(view) {
|
|
62
|
+
return TASKBOARD_VIEW_TAB_IDS.indexOf(view);
|
|
63
|
+
}
|
|
53
64
|
function getInitialQueryValue(queryKey) {
|
|
54
65
|
if (typeof window === "undefined")
|
|
55
66
|
return null;
|
|
@@ -58,15 +69,14 @@ function getInitialQueryValue(queryKey) {
|
|
|
58
69
|
}
|
|
59
70
|
function getInitialViewTabIndex() {
|
|
60
71
|
const view = getInitialQueryValue(TASKBOARD_VIEW_QUERY_KEY)?.toLowerCase();
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
return value === "true" || value === "1";
|
|
72
|
+
const index = TASKBOARD_VIEW_TAB_IDS.indexOf(view);
|
|
73
|
+
if (index < 0) {
|
|
74
|
+
const legacyWizardMode = getInitialQueryValue("tbWizard")?.toLowerCase();
|
|
75
|
+
if (legacyWizardMode === "true" || legacyWizardMode === "1") {
|
|
76
|
+
return getTaskBoardViewTabIndex("overview");
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return index >= 0 ? index : getTaskBoardViewTabIndex("kanban");
|
|
70
80
|
}
|
|
71
81
|
function getTaskBoardStateFromUrl() {
|
|
72
82
|
const projectId = getInitialQueryValue(TASKBOARD_PROJECT_QUERY_KEY);
|
|
@@ -74,7 +84,6 @@ function getTaskBoardStateFromUrl() {
|
|
|
74
84
|
projectId,
|
|
75
85
|
taskId: projectId ? getInitialQueryValue(TASKBOARD_TASK_QUERY_KEY) : null,
|
|
76
86
|
activeTab: getInitialViewTabIndex(),
|
|
77
|
-
isWizardMode: getInitialWizardMode(),
|
|
78
87
|
};
|
|
79
88
|
}
|
|
80
89
|
function getTaskExecutionRecordById(recordsByTaskId, taskId) {
|
|
@@ -145,7 +154,6 @@ export function TaskBoardWorkspace() {
|
|
|
145
154
|
const currentItemDescriptor = editContext?.currentItemDescriptor;
|
|
146
155
|
const [projects, setProjects] = useState([]);
|
|
147
156
|
const [mobileActiveTab, setMobileActiveTab] = useState(0);
|
|
148
|
-
const [homeActiveTab, setHomeActiveTab] = useState(0);
|
|
149
157
|
const [selectedProjectId, setSelectedProjectId] = useState(() => getInitialQueryValue(TASKBOARD_PROJECT_QUERY_KEY));
|
|
150
158
|
const [tasks, setTasks] = useState([]);
|
|
151
159
|
const [isTasksLoading, setIsTasksLoading] = useState(false);
|
|
@@ -155,11 +163,15 @@ export function TaskBoardWorkspace() {
|
|
|
155
163
|
const [selectedTaskId, setSelectedTaskId] = useState(() => getInitialQueryValue(TASKBOARD_TASK_QUERY_KEY));
|
|
156
164
|
const [selectedTaskSource, setSelectedTaskSource] = useState(() => getInitialQueryValue(TASKBOARD_TASK_QUERY_KEY) ? "system" : null);
|
|
157
165
|
const [activeTab, setActiveTab] = useState(() => getInitialViewTabIndex());
|
|
158
|
-
const
|
|
166
|
+
const activeViewTabId = TASKBOARD_VIEW_TAB_IDS[activeTab] ?? "kanban";
|
|
167
|
+
const isOverviewView = activeViewTabId === "overview";
|
|
168
|
+
const isListView = activeViewTabId === "list";
|
|
169
|
+
const isGraphView = activeViewTabId === "graph";
|
|
170
|
+
const isKpisView = activeViewTabId === "kpis";
|
|
171
|
+
const isSettingsView = activeViewTabId === "settings";
|
|
172
|
+
const isPropertiesView = activeViewTabId === "properties";
|
|
159
173
|
const [createDialogOpen, setCreateDialogOpen] = useState(false);
|
|
160
174
|
const [createProjectOpen, setCreateProjectOpen] = useState(false);
|
|
161
|
-
const [settingsProjectId, setSettingsProjectId] = useState(null);
|
|
162
|
-
const [savingProjectStatus, setSavingProjectStatus] = useState(false);
|
|
163
175
|
const [runningOrchestrator, setRunningOrchestrator] = useState(false);
|
|
164
176
|
const [showAllProjects, setShowAllProjects] = useState(false);
|
|
165
177
|
const [isProjectsLoading, setIsProjectsLoading] = useState(false);
|
|
@@ -219,22 +231,11 @@ export function TaskBoardWorkspace() {
|
|
|
219
231
|
const previousTaskStatusesRef = useRef({});
|
|
220
232
|
const previousWizardAttentionSignatureRef = useRef("");
|
|
221
233
|
const autoSelectedProjectIdsRef = useRef(new Set());
|
|
222
|
-
const userFirstName = useMemo(() => {
|
|
223
|
-
const user = editContext?.user;
|
|
224
|
-
if (!user)
|
|
225
|
-
return "";
|
|
226
|
-
if (user.fullName) {
|
|
227
|
-
return user.fullName.trim().split(/\s+/)[0] ?? "";
|
|
228
|
-
}
|
|
229
|
-
const namePart = user.name?.split("\\").pop() ?? user.name ?? "";
|
|
230
|
-
return namePart;
|
|
231
|
-
}, [editContext?.user]);
|
|
232
234
|
const syncTaskBoardStateFromUrl = useCallback(() => {
|
|
233
235
|
const nextState = getTaskBoardStateFromUrl();
|
|
234
236
|
setSelectedProjectId(nextState.projectId);
|
|
235
237
|
setTaskSelection(nextState.taskId, { source: "system" });
|
|
236
238
|
setActiveTab(nextState.activeTab);
|
|
237
|
-
setIsWizardMode(nextState.isWizardMode);
|
|
238
239
|
setWizardForceOverview(false);
|
|
239
240
|
}, [setTaskSelection]);
|
|
240
241
|
const isProjectWithinSelectedTree = useCallback((projectId, currentProjectId) => {
|
|
@@ -322,7 +323,6 @@ export function TaskBoardWorkspace() {
|
|
|
322
323
|
}, [editContext?.user?.name]);
|
|
323
324
|
const tasksWithDisplayAssignees = useMemo(() => addAgentDisplayNames(overlayTaskExecutionList(tasks, executionRecordsByTaskId), agentProfileTitlesById), [tasks, executionRecordsByTaskId, agentProfileTitlesById]);
|
|
324
325
|
const selectedProject = useMemo(() => projects.find((p) => p.project.projectId === selectedProjectId) ?? null, [projects, selectedProjectId]);
|
|
325
|
-
const settingsProject = useMemo(() => projects.find((p) => p.project.projectId === settingsProjectId) ?? null, [projects, settingsProjectId]);
|
|
326
326
|
const selectedProjectTaskCounts = useMemo(() => buildTaskCounts(tasksWithDisplayAssignees), [tasksWithDisplayAssignees]);
|
|
327
327
|
const directSubprojects = useMemo(() => selectedProjectId
|
|
328
328
|
? projects
|
|
@@ -360,9 +360,13 @@ export function TaskBoardWorkspace() {
|
|
|
360
360
|
}
|
|
361
361
|
return merged;
|
|
362
362
|
}, [executionRecordsByTaskId, subprojectExecutionRecordsByProjectId]);
|
|
363
|
-
const taskSelectionUniverse = useMemo(() =>
|
|
363
|
+
const taskSelectionUniverse = useMemo(() => isOverviewView
|
|
364
364
|
? wizardTasksWithDisplayAssignees
|
|
365
|
-
: tasksWithDisplayAssignees, [
|
|
365
|
+
: tasksWithDisplayAssignees, [
|
|
366
|
+
isOverviewView,
|
|
367
|
+
wizardTasksWithDisplayAssignees,
|
|
368
|
+
tasksWithDisplayAssignees,
|
|
369
|
+
]);
|
|
366
370
|
const selectedProjectCumulativeCostUsed = useMemo(() => {
|
|
367
371
|
if (!selectedProjectId)
|
|
368
372
|
return 0;
|
|
@@ -445,14 +449,15 @@ export function TaskBoardWorkspace() {
|
|
|
445
449
|
selectedProject?.permission === "Editor";
|
|
446
450
|
const canEditTasks = canCreate;
|
|
447
451
|
const viewTabs = useMemo(() => [
|
|
452
|
+
{ id: "overview", label: "Task overview", content: null },
|
|
448
453
|
{ id: "kanban", label: "Kanban", content: null },
|
|
449
454
|
{ id: "list", label: "List", content: null },
|
|
450
455
|
{ id: "graph", label: "Graph", content: null },
|
|
456
|
+
{ id: "kpis", label: "KPIs", content: null },
|
|
457
|
+
{ id: "settings", label: "Settings", content: null },
|
|
458
|
+
{ id: "properties", label: "Properties", content: null },
|
|
451
459
|
], []);
|
|
452
|
-
const
|
|
453
|
-
const isListView = viewTabIds[activeTab] === "list";
|
|
454
|
-
const isGraphView = viewTabIds[activeTab] === "graph";
|
|
455
|
-
const sharedViewSwitcher = useMemo(() => (_jsxs("div", { className: "flex items-center justify-end gap-2", children: [_jsx(SimpleTabs, { tabs: viewTabs, activeTab: activeTab, setActiveTab: setActiveTab, hideContent: true, className: "bg-neutral-grey-5/50 rounded-lg border-0 p-1", testId: "taskboard-view-switcher" }), _jsxs(Button, { size: "sm", onClick: () => setCreateDialogOpen(true), disabled: !canEditTasks, className: "h-8 px-3", "data-testid": "taskboard-create-task-button", children: [_jsx(Plus, { className: "h-4 w-4 sm:mr-1.5" }), _jsx("span", { className: "hidden sm:inline", children: "New Task" })] })] })), [activeTab, canEditTasks, viewTabs]);
|
|
460
|
+
const sharedViewSwitcher = useMemo(() => (_jsx("div", { className: "border-border-default mt-[18px] border-b", children: _jsx(SimpleTabs, { tabs: viewTabs, activeTab: activeTab, setActiveTab: setActiveTab, hideContent: true, variant: "large", className: "gap-8", tabClassName: "px-2 pt-3 pb-[9px] text-sm", testId: "taskboard-view-switcher" }) })), [activeTab, viewTabs]);
|
|
456
461
|
const handleSelectProject = useCallback((projectId) => {
|
|
457
462
|
setSelectedProjectId((previousProjectId) => {
|
|
458
463
|
if (previousProjectId !== projectId) {
|
|
@@ -595,10 +600,10 @@ export function TaskBoardWorkspace() {
|
|
|
595
600
|
}
|
|
596
601
|
}, []);
|
|
597
602
|
useEffect(() => {
|
|
598
|
-
if (!
|
|
603
|
+
if (!isOverviewView) {
|
|
599
604
|
clearWizardCloseTransitionTimeout();
|
|
600
605
|
}
|
|
601
|
-
}, [
|
|
606
|
+
}, [isOverviewView, clearWizardCloseTransitionTimeout]);
|
|
602
607
|
useEffect(() => {
|
|
603
608
|
clearWizardCloseTransitionTimeout();
|
|
604
609
|
}, [selectedProjectId, clearWizardCloseTransitionTimeout]);
|
|
@@ -674,7 +679,7 @@ export function TaskBoardWorkspace() {
|
|
|
674
679
|
if (typeof window === "undefined")
|
|
675
680
|
return;
|
|
676
681
|
const current = new URLSearchParams(window.location.search);
|
|
677
|
-
const view =
|
|
682
|
+
const view = TASKBOARD_VIEW_TAB_IDS[activeTab] ?? "kanban";
|
|
678
683
|
if (selectedProjectId) {
|
|
679
684
|
current.set(TASKBOARD_PROJECT_QUERY_KEY, selectedProjectId);
|
|
680
685
|
}
|
|
@@ -688,12 +693,7 @@ export function TaskBoardWorkspace() {
|
|
|
688
693
|
current.delete(TASKBOARD_TASK_QUERY_KEY);
|
|
689
694
|
}
|
|
690
695
|
current.set(TASKBOARD_VIEW_QUERY_KEY, view);
|
|
691
|
-
|
|
692
|
-
current.set(TASKBOARD_WIZARD_QUERY_KEY, "true");
|
|
693
|
-
}
|
|
694
|
-
else {
|
|
695
|
-
current.delete(TASKBOARD_WIZARD_QUERY_KEY);
|
|
696
|
-
}
|
|
696
|
+
current.delete("tbWizard");
|
|
697
697
|
const browserPathname = window.location.pathname;
|
|
698
698
|
const queryString = current.toString();
|
|
699
699
|
const newUrl = queryString
|
|
@@ -703,7 +703,7 @@ export function TaskBoardWorkspace() {
|
|
|
703
703
|
if (newUrl !== oldUrl) {
|
|
704
704
|
window.history.replaceState(null, "", newUrl);
|
|
705
705
|
}
|
|
706
|
-
}, [selectedProjectId, selectedTaskId, activeTab
|
|
706
|
+
}, [selectedProjectId, selectedTaskId, activeTab]);
|
|
707
707
|
useEffect(() => {
|
|
708
708
|
const handlePopState = () => {
|
|
709
709
|
syncTaskBoardStateFromUrl();
|
|
@@ -807,13 +807,13 @@ export function TaskBoardWorkspace() {
|
|
|
807
807
|
nextExecutionByProjectId[projectId] = executionByTaskId;
|
|
808
808
|
}
|
|
809
809
|
setSubprojectTaskCounts(nextCounts);
|
|
810
|
-
setSubprojectTasksByProjectId(
|
|
811
|
-
setSubprojectExecutionRecordsByProjectId(
|
|
810
|
+
setSubprojectTasksByProjectId(isOverviewView ? nextTasksByProjectId : {});
|
|
811
|
+
setSubprojectExecutionRecordsByProjectId(isOverviewView ? nextExecutionByProjectId : {});
|
|
812
812
|
}
|
|
813
813
|
finally {
|
|
814
814
|
setSubprojectCountsLoading(false);
|
|
815
815
|
}
|
|
816
|
-
}, [directSubprojects,
|
|
816
|
+
}, [directSubprojects, isOverviewView, selectedProjectId]);
|
|
817
817
|
// If a project only has a single task, auto-select it once when loading.
|
|
818
818
|
// Do not auto-reselect after the user explicitly closes task details.
|
|
819
819
|
useEffect(() => {
|
|
@@ -843,7 +843,7 @@ export function TaskBoardWorkspace() {
|
|
|
843
843
|
// switch away when another subproject also gets Questions (wizardAttentionState
|
|
844
844
|
// would pick a different task and we'd lose the questionnaire to agent mismatch).
|
|
845
845
|
useEffect(() => {
|
|
846
|
-
if (!
|
|
846
|
+
if (!isOverviewView)
|
|
847
847
|
return;
|
|
848
848
|
if (wizardForceOverview)
|
|
849
849
|
return;
|
|
@@ -860,7 +860,7 @@ export function TaskBoardWorkspace() {
|
|
|
860
860
|
return;
|
|
861
861
|
setWizardPinnedTask(wizardDisplayedTask.taskId, "system");
|
|
862
862
|
}, [
|
|
863
|
-
|
|
863
|
+
isOverviewView,
|
|
864
864
|
wizardForceOverview,
|
|
865
865
|
selectedTaskId,
|
|
866
866
|
wizardPinnedTaskId,
|
|
@@ -869,7 +869,7 @@ export function TaskBoardWorkspace() {
|
|
|
869
869
|
setWizardPinnedTask,
|
|
870
870
|
]);
|
|
871
871
|
useEffect(() => {
|
|
872
|
-
if (!
|
|
872
|
+
if (!isOverviewView)
|
|
873
873
|
return;
|
|
874
874
|
if (selectedTaskId)
|
|
875
875
|
return;
|
|
@@ -890,7 +890,7 @@ export function TaskBoardWorkspace() {
|
|
|
890
890
|
}
|
|
891
891
|
setWizardPinnedTaskId(attentionTaskId);
|
|
892
892
|
}, [
|
|
893
|
-
|
|
893
|
+
isOverviewView,
|
|
894
894
|
selectedTaskId,
|
|
895
895
|
selectedTaskSource,
|
|
896
896
|
wizardDisplayedExecutionDisplay?.label,
|
|
@@ -901,7 +901,7 @@ export function TaskBoardWorkspace() {
|
|
|
901
901
|
wizardAttentionState.task?.taskId,
|
|
902
902
|
]);
|
|
903
903
|
useEffect(() => {
|
|
904
|
-
if (!
|
|
904
|
+
if (!isOverviewView)
|
|
905
905
|
return;
|
|
906
906
|
if (selectedTaskSource === "user")
|
|
907
907
|
return;
|
|
@@ -923,23 +923,23 @@ export function TaskBoardWorkspace() {
|
|
|
923
923
|
setTaskSelection(null, { pinInWizard: false });
|
|
924
924
|
}, [
|
|
925
925
|
findNextAttentionTaskId,
|
|
926
|
-
|
|
926
|
+
isOverviewView,
|
|
927
927
|
selectedTask,
|
|
928
928
|
selectedTaskSource,
|
|
929
929
|
setTaskSelection,
|
|
930
930
|
]);
|
|
931
931
|
useEffect(() => {
|
|
932
|
-
if (
|
|
932
|
+
if (isOverviewView)
|
|
933
933
|
return;
|
|
934
934
|
if (!wizardPinnedTaskId)
|
|
935
935
|
return;
|
|
936
936
|
setWizardPinnedTask(null);
|
|
937
|
-
}, [
|
|
937
|
+
}, [isOverviewView, setWizardPinnedTask, wizardPinnedTaskId]);
|
|
938
938
|
useEffect(() => {
|
|
939
|
-
if (!
|
|
939
|
+
if (!isOverviewView && wizardForceOverview) {
|
|
940
940
|
setWizardForceOverview(false);
|
|
941
941
|
}
|
|
942
|
-
}, [
|
|
942
|
+
}, [isOverviewView, wizardForceOverview]);
|
|
943
943
|
useEffect(() => {
|
|
944
944
|
setWizardPinnedTask(null);
|
|
945
945
|
setWizardForceOverview(false);
|
|
@@ -1297,32 +1297,6 @@ export function TaskBoardWorkspace() {
|
|
|
1297
1297
|
setTaskSelection,
|
|
1298
1298
|
tasks,
|
|
1299
1299
|
]);
|
|
1300
|
-
const handleProjectStatusChange = useCallback(async (status) => {
|
|
1301
|
-
if (!selectedProject)
|
|
1302
|
-
return;
|
|
1303
|
-
if (selectedProject.permission !== "Owner")
|
|
1304
|
-
return;
|
|
1305
|
-
if (selectedProject.project.status === status)
|
|
1306
|
-
return;
|
|
1307
|
-
setSavingProjectStatus(true);
|
|
1308
|
-
try {
|
|
1309
|
-
const result = await updateProject({
|
|
1310
|
-
projectId: selectedProject.project.projectId,
|
|
1311
|
-
title: selectedProject.project.title,
|
|
1312
|
-
description: selectedProject.project.description ?? "",
|
|
1313
|
-
costLimit: selectedProject.project.costLimit ?? null,
|
|
1314
|
-
status,
|
|
1315
|
-
});
|
|
1316
|
-
if (result.type !== "success") {
|
|
1317
|
-
toast.error(result.summary || "Failed to update project status");
|
|
1318
|
-
return;
|
|
1319
|
-
}
|
|
1320
|
-
await refreshProjects();
|
|
1321
|
-
}
|
|
1322
|
-
finally {
|
|
1323
|
-
setSavingProjectStatus(false);
|
|
1324
|
-
}
|
|
1325
|
-
}, [selectedProject, refreshProjects]);
|
|
1326
1300
|
const handleSelectMyTask = useCallback((task) => {
|
|
1327
1301
|
handleSelectProject(task.projectId);
|
|
1328
1302
|
setTaskSelection(task.taskId, { source: "user" });
|
|
@@ -1344,6 +1318,41 @@ export function TaskBoardWorkspace() {
|
|
|
1344
1318
|
},
|
|
1345
1319
|
});
|
|
1346
1320
|
}, [editContext]);
|
|
1321
|
+
const handleDeleteProject = useCallback((projectId, title) => {
|
|
1322
|
+
const runDelete = async () => {
|
|
1323
|
+
const result = await deleteProject(projectId);
|
|
1324
|
+
if (result.type !== "success") {
|
|
1325
|
+
toast.error(result.summary || "Failed to delete project");
|
|
1326
|
+
return;
|
|
1327
|
+
}
|
|
1328
|
+
toast.success("Project deleted");
|
|
1329
|
+
const fallbackProjectId = projects.find((p) => p.project.projectId !== projectId)?.project
|
|
1330
|
+
.projectId ?? null;
|
|
1331
|
+
await refreshProjects();
|
|
1332
|
+
if (selectedProjectId === projectId) {
|
|
1333
|
+
handleSelectProject(fallbackProjectId);
|
|
1334
|
+
}
|
|
1335
|
+
};
|
|
1336
|
+
if (editContext?.confirm) {
|
|
1337
|
+
editContext.confirm({
|
|
1338
|
+
header: "Delete project",
|
|
1339
|
+
message: `Are you sure you want to delete "${title}"?\n\nAny subprojects under this project will also be deleted. This action cannot be undone.`,
|
|
1340
|
+
acceptLabel: "Delete",
|
|
1341
|
+
showCancel: true,
|
|
1342
|
+
accept: () => {
|
|
1343
|
+
void runDelete();
|
|
1344
|
+
},
|
|
1345
|
+
});
|
|
1346
|
+
return;
|
|
1347
|
+
}
|
|
1348
|
+
void runDelete();
|
|
1349
|
+
}, [
|
|
1350
|
+
editContext,
|
|
1351
|
+
handleSelectProject,
|
|
1352
|
+
projects,
|
|
1353
|
+
refreshProjects,
|
|
1354
|
+
selectedProjectId,
|
|
1355
|
+
]);
|
|
1347
1356
|
useEffect(() => {
|
|
1348
1357
|
setTaskBoardNavState({
|
|
1349
1358
|
projectTitle: selectedProject?.project.title ?? "Tasks",
|
|
@@ -1352,7 +1361,6 @@ export function TaskBoardWorkspace() {
|
|
|
1352
1361
|
: "Select a project to get started",
|
|
1353
1362
|
permissionLabel: selectedProject?.permission ?? "No project selected",
|
|
1354
1363
|
activeTab,
|
|
1355
|
-
isWizardMode,
|
|
1356
1364
|
isAdministrator,
|
|
1357
1365
|
showAllProjects: isAdministrator && showAllProjects,
|
|
1358
1366
|
isProjectsLoading,
|
|
@@ -1379,36 +1387,12 @@ export function TaskBoardWorkspace() {
|
|
|
1379
1387
|
onSetActiveTab: setActiveTab,
|
|
1380
1388
|
onCreateProject: () => setCreateProjectOpen(true),
|
|
1381
1389
|
onOpenProjectTemplates: handleOpenProjectTemplates,
|
|
1382
|
-
onOpenProjectSettings: (projectId) =>
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
if (result.type !== "success") {
|
|
1387
|
-
toast.error(result.summary || "Failed to delete project");
|
|
1388
|
-
return;
|
|
1389
|
-
}
|
|
1390
|
-
toast.success("Project deleted");
|
|
1391
|
-
const fallbackProjectId = projects.find((p) => p.project.projectId !== projectId)?.project
|
|
1392
|
-
.projectId ?? null;
|
|
1393
|
-
await refreshProjects();
|
|
1394
|
-
if (selectedProjectId === projectId) {
|
|
1395
|
-
handleSelectProject(fallbackProjectId);
|
|
1396
|
-
}
|
|
1397
|
-
};
|
|
1398
|
-
if (editContext?.confirm) {
|
|
1399
|
-
editContext.confirm({
|
|
1400
|
-
header: "Delete project",
|
|
1401
|
-
message: `Are you sure you want to delete "${title}"?\n\nAny subprojects under this project will also be deleted. This action cannot be undone.`,
|
|
1402
|
-
acceptLabel: "Delete",
|
|
1403
|
-
showCancel: true,
|
|
1404
|
-
accept: () => {
|
|
1405
|
-
void runDelete();
|
|
1406
|
-
},
|
|
1407
|
-
});
|
|
1408
|
-
return;
|
|
1409
|
-
}
|
|
1410
|
-
void runDelete();
|
|
1390
|
+
onOpenProjectSettings: (projectId) => {
|
|
1391
|
+
handleSelectProject(projectId);
|
|
1392
|
+
setWizardForceOverview(false);
|
|
1393
|
+
setActiveTab(getTaskBoardViewTabIndex("settings"));
|
|
1411
1394
|
},
|
|
1395
|
+
onDeleteProject: handleDeleteProject,
|
|
1412
1396
|
onRestartProject: (projectId, title) => {
|
|
1413
1397
|
const runRestart = async () => {
|
|
1414
1398
|
const result = await restartProject(projectId);
|
|
@@ -1443,7 +1427,6 @@ export function TaskBoardWorkspace() {
|
|
|
1443
1427
|
setShowAllProjects(enabled);
|
|
1444
1428
|
void refreshProjects({ includeAll: isAdministrator && enabled });
|
|
1445
1429
|
},
|
|
1446
|
-
onToggleWizardMode: (enabled) => setIsWizardMode(enabled),
|
|
1447
1430
|
onCreateTask: () => setCreateDialogOpen(true),
|
|
1448
1431
|
onRunOrchestrator: handleRunOrchestrator,
|
|
1449
1432
|
});
|
|
@@ -1452,7 +1435,6 @@ export function TaskBoardWorkspace() {
|
|
|
1452
1435
|
selectedProject?.project.description,
|
|
1453
1436
|
selectedProject?.permission,
|
|
1454
1437
|
activeTab,
|
|
1455
|
-
isWizardMode,
|
|
1456
1438
|
isAdministrator,
|
|
1457
1439
|
showAllProjects,
|
|
1458
1440
|
isProjectsLoading,
|
|
@@ -1467,6 +1449,7 @@ export function TaskBoardWorkspace() {
|
|
|
1467
1449
|
handleSelectMyTask,
|
|
1468
1450
|
handleSelectProject,
|
|
1469
1451
|
handleOpenProjectTemplates,
|
|
1452
|
+
handleDeleteProject,
|
|
1470
1453
|
handleRunOrchestrator,
|
|
1471
1454
|
selectedProject,
|
|
1472
1455
|
]);
|
|
@@ -1735,7 +1718,6 @@ export function TaskBoardWorkspace() {
|
|
|
1735
1718
|
setTaskSelection(null);
|
|
1736
1719
|
}
|
|
1737
1720
|
}, [
|
|
1738
|
-
isWizardMode,
|
|
1739
1721
|
selectedTaskId,
|
|
1740
1722
|
selectedTaskSource,
|
|
1741
1723
|
setTaskSelection,
|
|
@@ -1814,42 +1796,58 @@ export function TaskBoardWorkspace() {
|
|
|
1814
1796
|
return (_jsx("div", { className: "border-border-default bg-neutral-grey-5/70 flex h-full min-h-[240px] items-center justify-center rounded-lg border border-dashed", "data-testid": "taskboard-project-loading-state", children: _jsxs("div", { className: "text-muted-foreground flex flex-col items-center gap-3 text-sm", children: [_jsx(Loader2, { className: "h-6 w-6 animate-spin" }), _jsx("div", { children: "Loading project..." })] }) }));
|
|
1815
1797
|
}
|
|
1816
1798
|
if (!selectedProjectId || (!selectedProject && !isProjectsLoading)) {
|
|
1817
|
-
return
|
|
1799
|
+
return _jsx(TaskBoardHomeView, { nav: nav });
|
|
1800
|
+
}
|
|
1801
|
+
if (isOverviewView) {
|
|
1802
|
+
return (_jsxs("div", { className: "flex h-full min-h-0 min-w-0 flex-col gap-3", children: [_jsx(ProjectDashboard, { projectId: selectedProjectId, selectedProjectTitle: selectedProject?.project.title ?? "No project selected", selectedProjectDescription: selectedProject?.project.description, selectedProjectCostUsed: selectedProjectCumulativeCostUsed, selectedProjectCostLimit: selectedProject?.project.costLimit ?? null, selectedProjectTaskCounts: selectedProjectTaskCounts, subprojects: directSubprojects, taskCountsByProjectId: subprojectTaskCounts, parentProjectId: parentProject?.project.projectId ?? null, parentProjectTitle: parentProject?.project.title ?? null, onSelectProject: handleSelectProject, canCreateTask: canEditTasks, onCreateTask: () => setCreateDialogOpen(true) }), sharedViewSwitcher, _jsx("div", { className: "mt-3 min-h-0 flex-1", children: _jsx(WizardView, { projectId: selectedProjectId, tasks: tasksWithDisplayAssignees, projectTasksLoading: isTasksLoading, dependencies: dependencies, subprojectTaskLists: wizardSubprojectTaskLists, subprojectTasksLoading: subprojectCountsLoading, selectedTaskId: wizardDisplayedTask?.taskId ?? null, onSelectTask: (id) => {
|
|
1803
|
+
setWizardForceOverview(false);
|
|
1804
|
+
setTaskSelection(id, { source: "user", pinInWizard: true });
|
|
1805
|
+
}, projectTitle: selectedProject?.project.title ?? "No project selected", projectDescription: selectedProject?.project.description, projectCostUsed: selectedProjectCumulativeCostUsed, projectCostLimit: selectedProject?.project.costLimit ?? null, canEditProperties: selectedProject?.permission === "Owner", showProperties: false, showCost: false, communicationPanel: wizardCommunicationPanel }) })] }));
|
|
1806
|
+
}
|
|
1807
|
+
if (isSettingsView) {
|
|
1808
|
+
return (_jsxs("div", { className: "flex h-full min-h-0 min-w-0 flex-col gap-3", children: [_jsx(ProjectDashboard, { projectId: selectedProjectId, selectedProjectTitle: selectedProject?.project.title ?? "No project selected", selectedProjectDescription: selectedProject?.project.description, selectedProjectCostUsed: selectedProjectCumulativeCostUsed, selectedProjectCostLimit: selectedProject?.project.costLimit ?? null, selectedProjectTaskCounts: selectedProjectTaskCounts, subprojects: directSubprojects, taskCountsByProjectId: subprojectTaskCounts, parentProjectId: parentProject?.project.projectId ?? null, parentProjectTitle: parentProject?.project.title ?? null, onSelectProject: handleSelectProject, canCreateTask: canEditTasks, onCreateTask: () => setCreateDialogOpen(true), showCreateTaskButton: false }), sharedViewSwitcher, _jsx("div", { className: "mt-3", children: _jsx(ProjectSettingsPanel, { projectId: selectedProjectId, selectedProject: selectedProject, projects: projects, canOpenSourceTemplate: isAdministrator, onOpenSourceTemplate: handleOpenSourceTemplate, onDeleteProject: handleDeleteProject, onChanged: async () => {
|
|
1809
|
+
await refreshProjects();
|
|
1810
|
+
await refreshVisibleTaskData();
|
|
1811
|
+
} }) })] }));
|
|
1818
1812
|
}
|
|
1819
|
-
if (
|
|
1820
|
-
return (_jsx(
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1813
|
+
if (isKpisView) {
|
|
1814
|
+
return (_jsxs("div", { className: "flex h-full min-h-0 min-w-0 flex-col gap-3", children: [_jsx(ProjectDashboard, { projectId: selectedProjectId, selectedProjectTitle: selectedProject?.project.title ?? "No project selected", selectedProjectDescription: selectedProject?.project.description, selectedProjectCostUsed: selectedProjectCumulativeCostUsed, selectedProjectCostLimit: selectedProject?.project.costLimit ?? null, selectedProjectTaskCounts: selectedProjectTaskCounts, subprojects: directSubprojects, taskCountsByProjectId: subprojectTaskCounts, parentProjectId: parentProject?.project.projectId ?? null, parentProjectTitle: parentProject?.project.title ?? null, onSelectProject: handleSelectProject, canCreateTask: canEditTasks, onCreateTask: () => setCreateDialogOpen(true), showCreateTaskButton: false }), sharedViewSwitcher, _jsx("div", { className: "mt-3 max-w-[1000px]", children: _jsx(ProjectKpisPanel, { selectedProjectCostUsed: selectedProjectCumulativeCostUsed, selectedProjectCostLimit: selectedProject?.project.costLimit ?? null, selectedProjectTaskCounts: selectedProjectTaskCounts, selectedProjectAttention: selectedProject?.overview?.attention, subprojects: directSubprojects, taskCountsByProjectId: subprojectTaskCounts }) })] }));
|
|
1815
|
+
}
|
|
1816
|
+
if (isPropertiesView) {
|
|
1817
|
+
return (_jsxs("div", { className: "flex h-full min-h-0 min-w-0 flex-col gap-3", children: [_jsx(ProjectDashboard, { projectId: selectedProjectId, selectedProjectTitle: selectedProject?.project.title ?? "No project selected", selectedProjectDescription: selectedProject?.project.description, selectedProjectCostUsed: selectedProjectCumulativeCostUsed, selectedProjectCostLimit: selectedProject?.project.costLimit ?? null, selectedProjectTaskCounts: selectedProjectTaskCounts, subprojects: directSubprojects, taskCountsByProjectId: subprojectTaskCounts, parentProjectId: parentProject?.project.projectId ?? null, parentProjectTitle: parentProject?.project.title ?? null, onSelectProject: handleSelectProject, canCreateTask: canEditTasks, onCreateTask: () => setCreateDialogOpen(true), showCreateTaskButton: false }), sharedViewSwitcher, _jsx(ProjectPropertiesPanel, { projectId: selectedProjectId, canEdit: selectedProject?.permission === "Owner", defaultExpanded: true, showHeader: false, className: "border-border-default mt-3 rounded-md border bg-white p-4" })] }));
|
|
1824
1818
|
}
|
|
1825
1819
|
if (isListView) {
|
|
1826
|
-
return (_jsxs("div", { className: "grid gap-3", children: [_jsx(ProjectDashboard, { projectId: selectedProjectId, selectedProjectTitle: selectedProject?.project.title ?? "No project selected", selectedProjectDescription: selectedProject?.project.description,
|
|
1827
|
-
|
|
1828
|
-
|
|
1820
|
+
return (_jsxs("div", { className: "grid gap-3", children: [_jsx(ProjectDashboard, { projectId: selectedProjectId, selectedProjectTitle: selectedProject?.project.title ?? "No project selected", selectedProjectDescription: selectedProject?.project.description, selectedProjectCostUsed: selectedProjectCumulativeCostUsed, selectedProjectCostLimit: selectedProject?.project.costLimit ?? null, selectedProjectTaskCounts: selectedProjectTaskCounts, subprojects: directSubprojects, taskCountsByProjectId: subprojectTaskCounts, parentProjectId: parentProject?.project.projectId ?? null, parentProjectTitle: parentProject?.project.title ?? null, onSelectProject: handleSelectProject, canCreateTask: canEditTasks, onCreateTask: () => setCreateDialogOpen(true) }), sharedViewSwitcher, _jsx("div", { className: "mt-3 max-w-[1000px]", children: _jsx(ListView, { tasks: tasksWithDisplayAssignees, onSelectTask: (id) => setTaskSelection(id, { source: "user" }), selectedTaskId: selectedTaskId, onTasksChanged: () => {
|
|
1821
|
+
void refreshVisibleTaskData();
|
|
1822
|
+
}, projectId: selectedProjectId, permission: selectedProject?.permission }) })] }));
|
|
1829
1823
|
}
|
|
1830
1824
|
if (isGraphView) {
|
|
1831
|
-
return (_jsxs("div", { className: "flex h-full min-h-0 min-w-0 flex-col gap-3", children: [_jsx(ProjectDashboard, { projectId: selectedProjectId, selectedProjectTitle: selectedProject?.project.title ?? "No project selected", selectedProjectDescription: selectedProject?.project.description,
|
|
1825
|
+
return (_jsxs("div", { className: "flex h-full min-h-0 min-w-0 flex-col gap-3", children: [_jsx(ProjectDashboard, { projectId: selectedProjectId, selectedProjectTitle: selectedProject?.project.title ?? "No project selected", selectedProjectDescription: selectedProject?.project.description, selectedProjectCostUsed: selectedProjectCumulativeCostUsed, selectedProjectCostLimit: selectedProject?.project.costLimit ?? null, selectedProjectTaskCounts: selectedProjectTaskCounts, subprojects: directSubprojects, taskCountsByProjectId: subprojectTaskCounts, parentProjectId: parentProject?.project.projectId ?? null, parentProjectTitle: parentProject?.project.title ?? null, onSelectProject: handleSelectProject, canCreateTask: canEditTasks, onCreateTask: () => setCreateDialogOpen(true) }), sharedViewSwitcher, _jsx("div", { className: "mt-3 min-h-0 flex-1", children: _jsx(Suspense, { fallback: _jsx("div", { className: "text-muted-foreground flex h-full items-center justify-center text-sm", children: "Loading dependency graph..." }), children: _jsx(DependencyGraphView, { projectId: selectedProjectId, tasks: tasksWithDisplayAssignees, dependencies: dependencies, miniMapWidth: 160, miniMapHeight: 120, orientation: "horizontal", autoLayoutStrategy: "hierarchy", showOrientationToggle: true, savedLayout: graphLayout, selectedTaskId: selectedTaskId, onSelectTask: (id) => setTaskSelection(id, { source: "user" }), permission: selectedProject?.permission, onLayoutSaved: (layout) => setGraphLayout(layout && selectedProjectId
|
|
1832
1826
|
? {
|
|
1833
1827
|
projectId: selectedProjectId,
|
|
1834
1828
|
...layout,
|
|
1835
1829
|
}
|
|
1836
1830
|
: null) }) }) })] }));
|
|
1837
1831
|
}
|
|
1838
|
-
return (_jsxs("div", { className: "flex h-full min-h-0 min-w-0 flex-col gap-3", children: [_jsx(ProjectDashboard, { projectId: selectedProjectId, selectedProjectTitle: selectedProject?.project.title ?? "No project selected", selectedProjectDescription: selectedProject?.project.description,
|
|
1839
|
-
|
|
1840
|
-
|
|
1832
|
+
return (_jsxs("div", { className: "flex h-full min-h-0 min-w-0 flex-col gap-3", children: [_jsx(ProjectDashboard, { projectId: selectedProjectId, selectedProjectTitle: selectedProject?.project.title ?? "No project selected", selectedProjectDescription: selectedProject?.project.description, selectedProjectCostUsed: selectedProjectCumulativeCostUsed, selectedProjectCostLimit: selectedProject?.project.costLimit ?? null, selectedProjectTaskCounts: selectedProjectTaskCounts, subprojects: directSubprojects, taskCountsByProjectId: subprojectTaskCounts, parentProjectId: parentProject?.project.projectId ?? null, parentProjectTitle: parentProject?.project.title ?? null, onSelectProject: handleSelectProject, canCreateTask: canEditTasks, onCreateTask: () => setCreateDialogOpen(true) }), sharedViewSwitcher, _jsx("div", { className: "mt-3 flex min-h-0 flex-1 flex-col", children: _jsx(KanbanView, { tasks: tasksWithDisplayAssignees, dependencies: dependencies, onSelectTask: (id) => setTaskSelection(id, { source: "user" }), selectedTaskId: selectedTaskId, onTasksChanged: () => {
|
|
1833
|
+
void refreshVisibleTaskData();
|
|
1834
|
+
}, projectId: selectedProjectId, permission: selectedProject?.permission }) })] }));
|
|
1841
1835
|
}, [
|
|
1842
1836
|
isProjectViewLoading,
|
|
1843
1837
|
selectedProjectId,
|
|
1844
1838
|
selectedProject,
|
|
1845
1839
|
isProjectsLoading,
|
|
1846
|
-
|
|
1840
|
+
isOverviewView,
|
|
1847
1841
|
isListView,
|
|
1848
1842
|
isGraphView,
|
|
1843
|
+
isKpisView,
|
|
1844
|
+
isSettingsView,
|
|
1845
|
+
isPropertiesView,
|
|
1846
|
+
graphLayout,
|
|
1847
|
+
isAdministrator,
|
|
1849
1848
|
selectedProjectCumulativeCostUsed,
|
|
1850
|
-
savingProjectStatus,
|
|
1851
|
-
handleProjectStatusChange,
|
|
1852
1849
|
handleOpenSourceTemplate,
|
|
1850
|
+
handleDeleteProject,
|
|
1853
1851
|
selectedProjectTaskCounts,
|
|
1854
1852
|
directSubprojects,
|
|
1855
1853
|
subprojectTaskCounts,
|
|
@@ -1858,19 +1856,18 @@ export function TaskBoardWorkspace() {
|
|
|
1858
1856
|
parentProject?.project.title,
|
|
1859
1857
|
handleSelectProject,
|
|
1860
1858
|
sharedViewSwitcher,
|
|
1859
|
+
projects,
|
|
1861
1860
|
tasksWithDisplayAssignees,
|
|
1862
1861
|
dependencies,
|
|
1863
1862
|
selectedTaskId,
|
|
1864
|
-
activeTab,
|
|
1865
1863
|
canEditTasks,
|
|
1866
1864
|
nav,
|
|
1867
|
-
homeActiveTab,
|
|
1868
|
-
userFirstName,
|
|
1869
1865
|
isTasksLoading,
|
|
1870
1866
|
wizardSubprojectTaskLists,
|
|
1871
1867
|
wizardDisplayedTask?.taskId,
|
|
1872
1868
|
wizardCommunicationPanel,
|
|
1873
1869
|
setTaskSelection,
|
|
1870
|
+
refreshProjects,
|
|
1874
1871
|
refreshVisibleTaskData,
|
|
1875
1872
|
]);
|
|
1876
1873
|
const taskDetailAgentLaunch = useMemo(() => {
|
|
@@ -1913,6 +1910,7 @@ export function TaskBoardWorkspace() {
|
|
|
1913
1910
|
void refreshVisibleTaskData();
|
|
1914
1911
|
}, onSelectTask: (taskId) => setTaskSelection(taskId, { source: "user" }), onClose: () => setTaskSelection(null), variant: "panel", agentLaunch: taskDetailAgentLaunch })), [
|
|
1915
1912
|
selectedTaskProject,
|
|
1913
|
+
projects,
|
|
1916
1914
|
selectedTask,
|
|
1917
1915
|
taskSelectionUniverse,
|
|
1918
1916
|
dependencies,
|
|
@@ -2035,29 +2033,29 @@ export function TaskBoardWorkspace() {
|
|
|
2035
2033
|
const showAgentColumnForSelectedTask = !!selectedProjectId &&
|
|
2036
2034
|
!shouldHideAgentPanelForSelectedTask &&
|
|
2037
2035
|
agentPanelMode === "agent";
|
|
2038
|
-
if (
|
|
2039
|
-
const
|
|
2036
|
+
if (isOverviewView || isKpisView) {
|
|
2037
|
+
const overviewPanels = [
|
|
2040
2038
|
{
|
|
2041
|
-
name: "
|
|
2042
|
-
defaultSize:
|
|
2043
|
-
content: (_jsx("div", { className: "bg-neutral-grey-5/
|
|
2039
|
+
name: "task-list",
|
|
2040
|
+
defaultSize: "auto",
|
|
2041
|
+
content: (_jsx("div", { className: cn("bg-neutral-grey-5/60 flex h-full min-h-0 flex-col overflow-x-hidden overflow-y-auto", selectedProjectId && "p-3 pt-3 md:p-8 md:pt-8 md:pl-10"), children: taskBoardContent })),
|
|
2044
2042
|
},
|
|
2045
2043
|
];
|
|
2046
2044
|
if (showEditorPanel) {
|
|
2047
|
-
|
|
2045
|
+
overviewPanels.push({
|
|
2048
2046
|
name: "editor-preview",
|
|
2049
|
-
defaultSize:
|
|
2047
|
+
defaultSize: 500,
|
|
2050
2048
|
content: (_jsx("div", { className: "border-border-default bg-neutral-grey-5 h-full overflow-hidden border-l", children: itemPreviewPanel })),
|
|
2051
2049
|
});
|
|
2052
2050
|
}
|
|
2053
|
-
return
|
|
2051
|
+
return overviewPanels;
|
|
2054
2052
|
}
|
|
2055
2053
|
if (isListView) {
|
|
2056
2054
|
const listPanels = [
|
|
2057
2055
|
{
|
|
2058
2056
|
name: "task-list",
|
|
2059
2057
|
defaultSize: "auto",
|
|
2060
|
-
content: (_jsx("div", { className: "bg-neutral-grey-5/
|
|
2058
|
+
content: (_jsx("div", { className: "bg-neutral-grey-5/60 h-full overflow-x-auto overflow-y-auto p-3 pt-3 md:p-8 md:pt-8 md:pl-10", children: taskBoardContent })),
|
|
2061
2059
|
},
|
|
2062
2060
|
...buildRightHandPanels(showAgentColumnForSelectedTask),
|
|
2063
2061
|
];
|
|
@@ -2075,7 +2073,7 @@ export function TaskBoardWorkspace() {
|
|
|
2075
2073
|
{
|
|
2076
2074
|
name: "task-list",
|
|
2077
2075
|
defaultSize: "auto",
|
|
2078
|
-
content: (_jsx("div", { className: cn("bg-neutral-grey-5/
|
|
2076
|
+
content: (_jsx("div", { className: cn("bg-neutral-grey-5/60 flex h-full min-h-0 flex-col overflow-x-hidden overflow-y-auto", selectedProjectId && "p-3 pt-3 md:p-8 md:pt-8 md:pl-10"), children: taskBoardContent })),
|
|
2079
2077
|
},
|
|
2080
2078
|
...buildRightHandPanels(showAgentColumnForSelectedTask),
|
|
2081
2079
|
];
|
|
@@ -2092,7 +2090,7 @@ export function TaskBoardWorkspace() {
|
|
|
2092
2090
|
{
|
|
2093
2091
|
name: "task-list",
|
|
2094
2092
|
defaultSize: "auto",
|
|
2095
|
-
content: (_jsx("div", { className: cn("bg-neutral-grey-5/
|
|
2093
|
+
content: (_jsx("div", { className: cn("bg-neutral-grey-5/60 flex h-full min-h-0 flex-col overflow-x-hidden overflow-y-auto", selectedProjectId && "p-3 pt-3 md:p-8 md:pt-8 md:pl-10"), children: taskBoardContent })),
|
|
2096
2094
|
},
|
|
2097
2095
|
...buildRightHandPanels(showAgentColumnForSelectedTask),
|
|
2098
2096
|
];
|
|
@@ -2105,7 +2103,8 @@ export function TaskBoardWorkspace() {
|
|
|
2105
2103
|
}
|
|
2106
2104
|
return kanbanPanels;
|
|
2107
2105
|
}, [
|
|
2108
|
-
|
|
2106
|
+
isOverviewView,
|
|
2107
|
+
isKpisView,
|
|
2109
2108
|
isListView,
|
|
2110
2109
|
isGraphView,
|
|
2111
2110
|
selectedProjectId,
|
|
@@ -2133,30 +2132,20 @@ export function TaskBoardWorkspace() {
|
|
|
2133
2132
|
...(showEditorPanel
|
|
2134
2133
|
? [{ id: "editor", label: "Editor", content: null }]
|
|
2135
2134
|
: []),
|
|
2136
|
-
], activeTab: mobileActiveTab, setActiveTab: setMobileActiveTab, hideContent: true, className: "gap-6" }) })), _jsxs("div", { className: "min-h-0 flex-1 overflow-hidden", children: [mobileActiveTab === 0 && (_jsx("div", { className: cn("bg-neutral-grey-5/50 flex h-full overflow-y-auto", selectedProjectId &&
|
|
2137
|
-
!isWizardMode &&
|
|
2138
|
-
"p-2 pt-2 md:p-4 md:pt-3"), children: taskBoardContent })), mobileActiveTab === 1 && (_jsx("div", { className: "h-full overflow-y-auto bg-white", children: taskDetailPanel })), mobileActiveTab === 2 && (_jsx("div", { className: "h-full overflow-hidden bg-white", children: shouldHideAgentPanelForSelectedTask
|
|
2135
|
+
], activeTab: mobileActiveTab, setActiveTab: setMobileActiveTab, hideContent: true, className: "gap-6" }) })), _jsxs("div", { className: "min-h-0 flex-1 overflow-hidden", children: [mobileActiveTab === 0 && (_jsx("div", { className: cn("bg-neutral-grey-5/50 flex h-full overflow-y-auto", selectedProjectId && "p-2 pt-2 md:p-4 md:pt-3"), children: taskBoardContent })), mobileActiveTab === 1 && (_jsx("div", { className: "h-full overflow-y-auto bg-white", children: taskDetailPanel })), mobileActiveTab === 2 && (_jsx("div", { className: "h-full overflow-hidden bg-white", children: shouldHideAgentPanelForSelectedTask
|
|
2139
2136
|
? taskDetailPanel
|
|
2140
|
-
: agentTerminalPanel })), mobileActiveTab === 3 && showEditorPanel && (_jsx("div", { className: "bg-neutral-grey-5 h-full overflow-hidden", children: itemPreviewPanel }))] })] })) : (_jsx(Splitter, { panels: panels, direction: "horizontal", localStorageKey:
|
|
2141
|
-
? "task-board-wizard-splitter-v2"
|
|
2142
|
-
: "task-board-main-splitter" })) }), selectedProjectId && (_jsx(CreateTaskDialog, { open: createDialogOpen, onOpenChange: setCreateDialogOpen, projectId: selectedProjectId, availableParentTasks: tasks, onCreated: () => {
|
|
2137
|
+
: agentTerminalPanel })), mobileActiveTab === 3 && showEditorPanel && (_jsx("div", { className: "bg-neutral-grey-5 h-full overflow-hidden", children: itemPreviewPanel }))] })] })) : (_jsx(Splitter, { panels: panels, direction: "horizontal", localStorageKey: "task-board-main-splitter" })) }), selectedProjectId && (_jsx(CreateTaskDialog, { open: createDialogOpen, onOpenChange: setCreateDialogOpen, projectId: selectedProjectId, availableParentTasks: tasks, onCreated: () => {
|
|
2143
2138
|
void refreshTasks(selectedProjectId);
|
|
2144
2139
|
void refreshExecutionState(selectedProjectId);
|
|
2145
2140
|
void refreshDependencies(selectedProjectId);
|
|
2146
2141
|
} })), _jsx(CreateProjectDialog, { open: createProjectOpen, onOpenChange: setCreateProjectOpen, projects: projects, onCreated: async ({ projectId: newProjectId, openInWizardMode }) => {
|
|
2147
2142
|
if (openInWizardMode) {
|
|
2148
|
-
|
|
2143
|
+
setActiveTab(getTaskBoardViewTabIndex("overview"));
|
|
2149
2144
|
setWizardForceOverview(false);
|
|
2150
2145
|
}
|
|
2151
2146
|
if (newProjectId)
|
|
2152
2147
|
handleSelectProject(newProjectId);
|
|
2153
2148
|
await refreshProjects();
|
|
2154
|
-
} }), _jsx(ProjectSettingsDialog, { open: !!settingsProjectId, onOpenChange: (open) => {
|
|
2155
|
-
if (!open)
|
|
2156
|
-
setSettingsProjectId(null);
|
|
2157
|
-
}, projectId: settingsProjectId, selectedProject: settingsProject, projects: projects, onChanged: async () => {
|
|
2158
|
-
await refreshProjects();
|
|
2159
|
-
await refreshVisibleTaskData();
|
|
2160
2149
|
} })] }));
|
|
2161
2150
|
}
|
|
2162
2151
|
//# sourceMappingURL=TaskBoardWorkspace.js.map
|