@taskforcehq/taskforce 0.3.170 → 0.3.301
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/README.md +71 -21
- package/dist/Taskforce.module.css +3394 -5981
- package/dist/TaskforceCore.CategoryFallback.test.js +5 -2
- package/dist/TaskforceCore.filter-persistence.test.js +402 -0
- package/dist/TaskforceCore.js +388 -71
- package/dist/TaskforceCore.routing.test.js +311 -0
- package/dist/TaskforceCore.test.js +3344 -615
- package/dist/TaskforceWidget.js +3 -2
- package/dist/__tests__/localizationCatalogs.test.js +48 -31
- package/dist/__tests__/workflowSimulation.test.js +2 -2
- package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.d.ts +60 -0
- package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.js +324 -0
- package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.test.js +278 -0
- package/dist/annotatedAttachments/payload.d.ts +2 -0
- package/dist/annotatedAttachments/payload.js +54 -0
- package/dist/annotatedAttachments/payload.test.js +67 -0
- package/dist/annotatedAttachments/service.d.ts +49 -0
- package/dist/annotatedAttachments/service.js +121 -0
- package/dist/annotatedAttachments/types.d.ts +86 -0
- package/dist/cli.js +74 -25
- package/dist/compat/deploymentCompat.d.ts +12 -0
- package/dist/compat/deploymentCompat.js +43 -0
- package/dist/compat/workspaceSyncCompat.d.ts +6 -0
- package/dist/compat/workspaceSyncCompat.js +79 -0
- package/dist/compat/workspaceSyncCompat.test.js +87 -0
- package/dist/components/features/AgentsModule.d.ts +5 -0
- package/dist/components/features/AgentsModule.js +131 -0
- package/dist/components/features/AgentsModule.test.js +102 -0
- package/dist/components/features/AnnotatedAttachmentWorkspace.d.ts +24 -0
- package/dist/components/features/AnnotatedAttachmentWorkspace.js +1942 -0
- package/dist/components/features/AnnotatedAttachmentWorkspace.test.js +2831 -0
- package/dist/components/features/DocumentGenerateModal.js +8 -16
- package/dist/components/features/DocumentIndex.d.ts +3 -4
- package/dist/components/features/DocumentIndex.js +22 -10
- package/dist/components/features/DocumentViewer.d.ts +6 -2
- package/dist/components/features/DocumentViewer.js +1000 -18
- package/dist/components/features/DocumentWorkspace.d.ts +40 -2
- package/dist/components/features/DocumentWorkspace.js +96 -16
- package/dist/components/features/DocumentWorkspace.test.js +1202 -0
- package/dist/components/features/InitiativesModule.d.ts +22 -0
- package/dist/components/features/InitiativesModule.js +33 -0
- package/dist/components/features/TaskSettings.d.ts +41 -32
- package/dist/components/features/TaskSettings.js +798 -313
- package/dist/components/features/TaskSettings.test.js +1221 -47
- package/dist/components/features/WorkflowsModule.d.ts +27 -0
- package/dist/components/features/WorkflowsModule.js +21 -0
- package/dist/components/features/documentWorkspaceFilters.d.ts +10 -0
- package/dist/components/features/documentWorkspaceFilters.js +11 -0
- package/dist/components/features/settings/CategoryManager.d.ts +2 -0
- package/dist/components/features/settings/CategoryManager.js +15 -8
- package/dist/components/features/settings/PriorityManager.d.ts +18 -0
- package/dist/components/features/settings/PriorityManager.js +51 -0
- package/dist/components/features/settings/TaxonomyEditor.d.ts +2 -1
- package/dist/components/features/settings/TaxonomyEditor.js +41 -18
- package/dist/components/features/settings/TaxonomyLibraryManager.d.ts +26 -0
- package/dist/components/features/settings/TaxonomyLibraryManager.js +301 -0
- package/dist/components/features/settings/TaxonomyLibraryManager.test.js +141 -0
- package/dist/components/features/settings/TaxonomyManager.d.ts +35 -12
- package/dist/components/features/settings/TaxonomyManager.js +59 -27
- package/dist/components/features/settings/TypeManager.d.ts +11 -0
- package/dist/components/features/settings/TypeManager.js +48 -11
- package/dist/components/features/settings/{WorkflowEditorPrototype.d.ts → WorkflowEditor.d.ts} +2 -2
- package/dist/components/features/settings/{WorkflowEditorPrototype.js → WorkflowEditor.js} +3 -3
- package/dist/components/task/TaskActionHeader.d.ts +12 -2
- package/dist/components/task/TaskActionHeader.js +64 -8
- package/dist/components/task/TaskActionHeader.test.js +73 -0
- package/dist/components/task/TaskCard.d.ts +14 -16
- package/dist/components/task/TaskCard.js +144 -174
- package/dist/components/task/TaskCard.test.js +416 -64
- package/dist/components/task/TaskContextUpload.d.ts +6 -5
- package/dist/components/task/TaskContextUpload.js +199 -64
- package/dist/components/task/TaskContextUpload.test.js +331 -14
- package/dist/components/task/TaskForm.d.ts +23 -29
- package/dist/components/task/TaskForm.js +348 -169
- package/dist/components/task/TaskForm.test.js +419 -23
- package/dist/components/task/TaskKanban.d.ts +20 -21
- package/dist/components/task/TaskKanban.js +176 -316
- package/dist/components/task/TaskKanban.planning-drop.test.js +93 -0
- package/dist/components/task/TaskList.d.ts +22 -11
- package/dist/components/task/TaskList.js +98 -12
- package/dist/components/task/TaskList.test.js +206 -7
- package/dist/components/task/TaskReferenceBadge.d.ts +12 -0
- package/dist/components/task/TaskReferenceBadge.js +5 -0
- package/dist/components/task/TaskStatusActions.d.ts +12 -0
- package/dist/components/task/TaskStatusActions.js +18 -0
- package/dist/components/task/TaskStatusActions.test.js +45 -0
- package/dist/components/ui/ImageReferenceBadge.d.ts +12 -0
- package/dist/components/ui/ImageReferenceBadge.js +5 -0
- package/dist/components/ui/LevelSelector.d.ts +2 -1
- package/dist/components/ui/LevelSelector.js +2 -2
- package/dist/components/ui/Markdown.d.ts +1 -2
- package/dist/components/ui/Markdown.js +2 -13
- package/dist/components/ui/Modal.d.ts +3 -2
- package/dist/components/ui/Modal.js +4 -3
- package/dist/components/ui/MultiSelectFilter.d.ts +3 -1
- package/dist/components/ui/MultiSelectFilter.js +2 -2
- package/dist/components/ui/ReferenceBadgeButton.d.ts +13 -0
- package/dist/components/ui/ReferenceBadgeButton.js +6 -0
- package/dist/components/ui/TaxonomyDropdown.d.ts +7 -1
- package/dist/components/ui/TaxonomyDropdown.js +58 -23
- package/dist/components/ui/TopNoticeLayer.d.ts +7 -0
- package/dist/components/ui/TopNoticeLayer.js +14 -0
- package/dist/components/ui/TopNoticeLayer.test.js +25 -0
- package/dist/components/views/AppShellHeader.d.ts +13 -0
- package/dist/components/views/AppShellHeader.js +19 -0
- package/dist/components/views/AppShellHeader.test.js +21 -0
- package/dist/components/views/PlanComparisonPage.d.ts +73 -0
- package/dist/components/views/PlanComparisonPage.js +196 -0
- package/dist/components/views/PlanComparisonPage.test.js +251 -0
- package/dist/components/views/PlansPage.d.ts +14 -0
- package/dist/components/views/PlansPage.js +355 -0
- package/dist/components/views/StandaloneLayout.d.ts +2 -2
- package/dist/components/views/StandaloneLayout.js +2227 -1188
- package/dist/components/views/WidgetView.d.ts +2 -2
- package/dist/components/views/WidgetView.js +149 -43
- package/dist/components/views/chrome/WorkspaceChromeSections.d.ts +57 -0
- package/dist/components/views/chrome/WorkspaceChromeSections.js +38 -0
- package/dist/components/views/chrome/WorkspaceChromeSections.test.js +54 -0
- package/dist/components/views/chrome/workspaceChrome.d.ts +31 -0
- package/dist/components/views/chrome/workspaceChrome.js +108 -0
- package/dist/components/views/chrome/workspaceChrome.test.js +52 -0
- package/dist/components/views/panels/DocumentFilterToolbar.d.ts +10 -0
- package/dist/components/views/panels/DocumentFilterToolbar.js +7 -0
- package/dist/components/views/panels/DocumentFilterToolbar.test.js +19 -0
- package/dist/components/views/panels/FilterToolbar.d.ts +68 -0
- package/dist/components/views/panels/FilterToolbar.js +21 -0
- package/dist/components/views/panels/FilterToolbar.test.d.ts +1 -0
- package/dist/components/views/panels/FilterToolbar.test.js +45 -0
- package/dist/components/views/panels/FilterToolbarControls.d.ts +47 -0
- package/dist/components/views/panels/FilterToolbarControls.js +61 -0
- package/dist/components/views/panels/PlanningDrawer.d.ts +115 -0
- package/dist/components/views/panels/PlanningDrawer.js +220 -0
- package/dist/components/views/panels/ScheduleSidebar.d.ts +52 -0
- package/dist/components/views/panels/ScheduleSidebar.js +127 -0
- package/dist/components/views/panels/scheduleUtils.d.ts +14 -0
- package/dist/components/views/panels/scheduleUtils.js +79 -0
- package/dist/components/views/teamManagementAccess.d.ts +6 -0
- package/dist/components/views/teamManagementAccess.js +18 -0
- package/dist/components/views/teamManagementAccess.test.d.ts +1 -0
- package/dist/components/views/teamManagementAccess.test.js +44 -0
- package/dist/config/clientDeployment.d.ts +2 -0
- package/dist/config/clientDeployment.js +13 -0
- package/dist/config/cloudEnvironment.d.ts +15 -0
- package/dist/config/cloudEnvironment.js +60 -0
- package/dist/config/deployment.d.ts +20 -0
- package/dist/config/deployment.js +67 -0
- package/dist/config/deployment.test.d.ts +1 -0
- package/dist/config/deployment.test.js +88 -0
- package/dist/config/envSchema.js +36 -8
- package/dist/config/envSchema.test.js +28 -0
- package/dist/core/AiProfileService.d.ts +66 -0
- package/dist/core/AiProfileService.js +320 -0
- package/dist/core/AiProfileService.test.d.ts +1 -0
- package/dist/core/AiProfileService.test.js +164 -0
- package/dist/core/AiProfiles.test.d.ts +1 -0
- package/dist/core/AiProfiles.test.js +449 -0
- package/dist/core/AttachmentLinkService.d.ts +15 -0
- package/dist/core/AttachmentLinkService.js +157 -0
- package/dist/core/AuthTokenService.d.ts +44 -0
- package/dist/core/AuthTokenService.js +207 -0
- package/dist/core/CreatedBy.test.js +134 -6
- package/dist/core/DeletedTaskLifecycleService.d.ts +33 -0
- package/dist/core/DeletedTaskLifecycleService.js +158 -0
- package/dist/core/DeletedTaskTrash.test.d.ts +1 -0
- package/dist/core/DeletedTaskTrash.test.js +104 -0
- package/dist/core/EntitlementsPolicy.test.js +78 -5
- package/dist/core/GlobalSettingsService.d.ts +16 -0
- package/dist/core/GlobalSettingsService.js +370 -0
- package/dist/core/JsonBackupRuntime.test.d.ts +1 -0
- package/dist/core/JsonBackupRuntime.test.js +155 -0
- package/dist/core/McpTokenService.d.ts +118 -0
- package/dist/core/McpTokenService.js +921 -0
- package/dist/core/PlanEntitlementService.d.ts +201 -0
- package/dist/core/PlanEntitlementService.js +1442 -0
- package/dist/core/PlanVersionPolicy.test.d.ts +1 -0
- package/dist/core/PlanVersionPolicy.test.js +178 -0
- package/dist/core/PlanningEntities.test.d.ts +1 -0
- package/dist/core/PlanningEntities.test.js +95 -0
- package/dist/core/ScheduleFields.test.js +15 -19
- package/dist/core/SignupMonetizationSettings.test.d.ts +1 -0
- package/dist/core/SignupMonetizationSettings.test.js +159 -0
- package/dist/core/Stats.test.d.ts +1 -0
- package/dist/core/Stats.test.js +36 -0
- package/dist/core/SyncReconciliationService.d.ts +93 -0
- package/dist/core/SyncReconciliationService.js +406 -0
- package/dist/core/SystemAdmin.test.js +578 -13
- package/dist/core/TaskActivityService.d.ts +21 -0
- package/dist/core/TaskActivityService.js +130 -0
- package/dist/core/TaskAttachmentsCanonical.test.d.ts +1 -0
- package/dist/core/TaskAttachmentsCanonical.test.js +306 -0
- package/dist/core/TaskAuditTimeline.test.d.ts +1 -0
- package/dist/core/TaskAuditTimeline.test.js +132 -0
- package/dist/core/TaskTaxonomyValidation.test.js +338 -15
- package/dist/core/Taskforce.d.ts +930 -183
- package/dist/core/Taskforce.ids.test.js +252 -0
- package/dist/core/Taskforce.js +3848 -2532
- package/dist/core/Taskforce.mcpAuth.test.d.ts +1 -0
- package/dist/core/Taskforce.mcpAuth.test.js +343 -0
- package/dist/core/Taskforce.realtimeMutation.test.js +57 -2
- package/dist/core/TaxonomySettingsService.d.ts +18 -0
- package/dist/core/TaxonomySettingsService.js +162 -0
- package/dist/core/WorkspaceDelete.test.js +32 -13
- package/dist/core/WorkspaceLifecycleService.d.ts +11 -0
- package/dist/core/WorkspaceLifecycleService.js +88 -0
- package/dist/core/WorkspacePermissions.test.js +95 -0
- package/dist/core/WorkspacePlanMode.test.js +114 -1
- package/dist/core/WorkspacePreferenceService.d.ts +41 -0
- package/dist/core/WorkspacePreferenceService.js +246 -0
- package/dist/core/WorkspaceSyncSettings.test.d.ts +1 -0
- package/dist/core/WorkspaceSyncSettings.test.js +65 -0
- package/dist/core/__tests__/TaskAttachmentsCanonical.test.d.ts +1 -0
- package/dist/core/__tests__/TaskAttachmentsCanonical.test.js +212 -0
- package/dist/core/shared.d.ts +36 -0
- package/dist/core/shared.js +128 -0
- package/dist/core/types.d.ts +614 -0
- package/dist/core/types.js +27 -0
- package/dist/documentReviews/DocumentReviewCommentStore.d.ts +56 -0
- package/dist/documentReviews/DocumentReviewCommentStore.js +230 -0
- package/dist/documentReviews/DocumentReviewSessionStore.d.ts +52 -0
- package/dist/documentReviews/DocumentReviewSessionStore.js +193 -0
- package/dist/documentReviews/DocumentReviewSessionStore.test.d.ts +1 -0
- package/dist/documentReviews/DocumentReviewSessionStore.test.js +127 -0
- package/dist/documentReviews/service.d.ts +68 -0
- package/dist/documentReviews/service.js +210 -0
- package/dist/documentReviews/types.d.ts +58 -0
- package/dist/documentReviews/types.js +1 -0
- package/dist/hooks/auth/useAuthGuardPolicy.d.ts +2 -0
- package/dist/hooks/auth/useAuthGuardPolicy.js +1 -0
- package/dist/hooks/tasks/useCurrentTaskRelations.d.ts +15 -0
- package/dist/hooks/tasks/useCurrentTaskRelations.js +37 -0
- package/dist/hooks/tasks/useTaskActions.d.ts +3 -0
- package/dist/hooks/tasks/useTaskActions.js +2 -0
- package/dist/hooks/tasks/useTaskEditorNavigation.d.ts +65 -0
- package/dist/hooks/tasks/useTaskEditorNavigation.js +235 -0
- package/dist/hooks/tasks/useTaskFilters.d.ts +2 -0
- package/dist/hooks/tasks/useTaskFilters.js +2 -0
- package/dist/hooks/tasks/useTaskFormActions.d.ts +58 -0
- package/dist/hooks/tasks/useTaskFormActions.js +365 -0
- package/dist/hooks/tasks/useTaskRelationships.d.ts +16 -0
- package/dist/hooks/tasks/useTaskRelationships.js +64 -0
- package/dist/hooks/ui/useResourceExport.d.ts +19 -0
- package/dist/hooks/ui/useResourceExport.js +84 -0
- package/dist/hooks/ui/useSettingsModel.d.ts +203 -0
- package/dist/hooks/ui/useSettingsModel.js +125 -0
- package/dist/hooks/ui/useSettingsPersistence.d.ts +36 -0
- package/dist/hooks/ui/useSettingsPersistence.js +254 -0
- package/dist/hooks/ui/useSettingsTaxonomyManagement.d.ts +119 -0
- package/dist/hooks/ui/useSettingsTaxonomyManagement.js +536 -0
- package/dist/hooks/ui/useUiNotice.d.ts +1 -0
- package/dist/hooks/ui/useUiNotice.js +1 -0
- package/dist/hooks/ui/useWorkflowTemplates.d.ts +37 -0
- package/dist/hooks/ui/useWorkflowTemplates.js +111 -0
- package/dist/hooks/ui/useZenMode.d.ts +5 -0
- package/dist/hooks/ui/useZenMode.js +32 -0
- package/dist/hooks/useFilterSort.d.ts +60 -0
- package/dist/hooks/useFilterSort.js +362 -0
- package/dist/hooks/useFilterSort.test.d.ts +1 -0
- package/dist/hooks/useFilterSort.test.js +333 -0
- package/dist/hooks/useRealtimeSync.d.ts +1 -0
- package/dist/hooks/useRealtimeSync.js +24 -9
- package/dist/hooks/useRealtimeSync.test.js +28 -1
- package/dist/hooks/useSyncOrchestrator.aiProfiles.test.d.ts +1 -0
- package/dist/hooks/useSyncOrchestrator.aiProfiles.test.js +34 -0
- package/dist/hooks/useSyncOrchestrator.d.ts +65 -103
- package/dist/hooks/useSyncOrchestrator.js +1538 -670
- package/dist/hooks/useSyncOrchestrator.retry-closure.test.js +700 -174
- package/dist/hooks/useTaskData.d.ts +35 -0
- package/dist/hooks/useTaskData.js +243 -0
- package/dist/hooks/useTaskData.test.d.ts +1 -0
- package/dist/hooks/useTaskData.test.js +180 -0
- package/dist/hooks/useTaskMutations.d.ts +46 -0
- package/dist/hooks/useTaskMutations.js +472 -0
- package/dist/hooks/useTaskMutations.test.d.ts +1 -0
- package/dist/hooks/useTaskMutations.test.js +80 -0
- package/dist/hooks/useTaskforce.contract.test.d.ts +1 -0
- package/dist/hooks/useTaskforce.contract.test.js +7 -0
- package/dist/hooks/useTaskforce.d.ts +260 -295
- package/dist/hooks/useTaskforce.js +1954 -2623
- package/dist/hooks/useTaskforce.priority-filters.test.js +6 -11
- package/dist/hooks/useTaskforce.sync-behavior.test.d.ts +1 -0
- package/dist/hooks/useTaskforce.sync-behavior.test.js +1120 -0
- package/dist/hooks/useUiNotice.d.ts +16 -0
- package/dist/hooks/useUiNotice.js +49 -0
- package/dist/hooks/useWorkspaceSyncController.d.ts +23 -46
- package/dist/hooks/useWorkspaceSyncController.js +280 -461
- package/dist/hooks/useWorkspaceSyncController.test.js +106 -199
- package/dist/hooks/workspace/useTaskforceApiRouting.d.ts +8 -0
- package/dist/hooks/workspace/useTaskforceApiRouting.js +91 -0
- package/dist/hooks/workspace/useTaskforceApiRouting.test.d.ts +1 -0
- package/dist/hooks/workspace/useTaskforceApiRouting.test.js +60 -0
- package/dist/hooks/workspace/useWorkspaceSyncController.d.ts +1 -0
- package/dist/hooks/workspace/useWorkspaceSyncController.js +1 -0
- package/dist/hooks/workspace/workspaceLocalState.d.ts +30 -0
- package/dist/hooks/workspace/workspaceLocalState.js +101 -0
- package/dist/localization/locales/en-US.d.ts +1 -8
- package/dist/localization/locales/en-US.js +4 -11
- package/dist/localization/locales/es-419.js +2 -9
- package/dist/localization/locales/pt-BR.js +2 -9
- package/dist/localization/localizationCatalogs.test.d.ts +1 -0
- package/dist/localization/localizationCatalogs.test.js +37 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +9 -15
- package/dist/mcp/clientIntegrations.d.ts +33 -0
- package/dist/mcp/clientIntegrations.js +199 -0
- package/dist/mcp/clientIntegrations.test.d.ts +1 -0
- package/dist/mcp/clientIntegrations.test.js +110 -0
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.js +2 -0
- package/dist/mcp/optionResolution.test.js +6 -2
- package/dist/mcp/runtime.d.ts +120 -0
- package/dist/mcp/runtime.js +5668 -0
- package/dist/mcp/runtime.test.d.ts +1 -0
- package/dist/mcp/runtime.test.js +3299 -0
- package/dist/mcp/server.js +2 -1793
- package/dist/mcp/structuredCommentValidation.test.d.ts +1 -0
- package/dist/{__tests__ → mcp}/structuredCommentValidation.test.js +1 -1
- package/dist/mcp/structuredDocValidation.js +1 -2
- package/dist/mcp/structuredDocValidation.test.d.ts +1 -0
- package/dist/{__tests__ → mcp}/structuredDocValidation.test.js +9 -4
- package/dist/mcp/toolRegistry.d.ts +570 -0
- package/dist/mcp/toolRegistry.js +90 -0
- package/dist/mcp/toolRegistry.test.d.ts +1 -0
- package/dist/mcp/toolRegistry.test.js +30 -0
- package/dist/migrations/billingSchemaParity.test.js +111 -0
- package/dist/migrations/taskSchemaMigrations.d.ts +5 -0
- package/dist/migrations/taskSchemaMigrations.js +681 -39
- package/dist/migrations/taskSchemaMigrations.test.d.ts +1 -0
- package/dist/migrations/taskSchemaMigrations.test.js +210 -0
- package/dist/plugins/vite.js +13 -7
- package/dist/public/apple-touch-icon.png +0 -0
- package/dist/public/archive/phoenix/apple-touch-icon.png +0 -0
- package/dist/public/archive/phoenix/favicon.ico +0 -0
- package/dist/public/archive/phoenix/site.webmanifest +1 -0
- package/dist/public/favicon-96x96.png +0 -0
- package/dist/public/favicon.ico +0 -0
- package/dist/public/favicon.svg +17 -0
- package/dist/public/site.webmanifest +21 -1
- package/dist/public/web-app-manifest-192x192.png +0 -0
- package/dist/public/web-app-manifest-512x512.png +0 -0
- package/dist/releaseVersion.test.d.ts +1 -0
- package/dist/{__tests__/releaseVersion.test.js → releaseVersion.test.js} +1 -1
- package/dist/resources/templates/WORKFLOW_V2_POLICY.md +1 -1
- package/dist/resources/templates/workflow-sources/workflowDocs.mjs +62 -52
- package/dist/resources/templates/workflows/collaborate.yaml +11 -5
- package/dist/resources/templates/workflows/do.yaml +8 -2
- package/dist/resources/templates/workflows/evaluate.yaml +13 -7
- package/dist/resources/templates/workflows/execute.yaml +40 -23
- package/dist/resources/templates/workflows/plan.yaml +15 -8
- package/dist/resources/templates/workflows/review.yaml +14 -8
- package/dist/runtime/appGateDefinitions.d.ts +32 -0
- package/dist/runtime/appGateDefinitions.js +32 -0
- package/dist/runtime/appGates.d.ts +29 -0
- package/dist/runtime/appGates.js +53 -0
- package/dist/runtime/appGates.test.d.ts +1 -0
- package/dist/runtime/appGates.test.js +42 -0
- package/dist/runtime/migrationFlags.d.ts +1 -0
- package/dist/runtime/migrationFlags.js +1 -0
- package/dist/server/annotatedAttachmentsRoutes.test.d.ts +1 -0
- package/dist/server/annotatedAttachmentsRoutes.test.js +473 -0
- package/dist/server/auth.js +14 -2
- package/dist/server/auth.test.js +21 -1
- package/dist/server/cors.js +11 -5
- package/dist/server/cors.test.js +6 -0
- package/dist/server/documentReviewRoutes.test.d.ts +1 -0
- package/dist/server/documentReviewRoutes.test.js +157 -0
- package/dist/server/index.cookieProxy.test.js +46 -1
- package/dist/server/index.d.ts +20 -0
- package/dist/server/index.js +168 -41
- package/dist/server/index.rateLimit.test.js +6 -0
- package/dist/server/index.test.js +133 -2
- package/dist/server/mockStripe.d.ts +72 -0
- package/dist/server/mockStripe.js +357 -0
- package/dist/server/realtimeSyncWs.js +4 -0
- package/dist/server/routes/admin.d.ts +114 -0
- package/dist/server/routes/admin.js +2226 -0
- package/dist/server/routes/annotatedAttachments.d.ts +24 -0
- package/dist/server/routes/annotatedAttachments.js +235 -0
- package/dist/server/routes/auth.d.ts +61 -0
- package/dist/server/routes/auth.js +1296 -0
- package/dist/server/{routes.billing.d.ts → routes/billing.d.ts} +3 -2
- package/dist/server/routes/billing.js +2001 -0
- package/dist/server/routes/billing.test.d.ts +1 -0
- package/dist/server/routes/billing.test.js +1631 -0
- package/dist/server/routes/documentReviews.d.ts +11 -0
- package/dist/server/routes/documentReviews.js +191 -0
- package/dist/server/routes/documents.d.ts +118 -0
- package/dist/server/routes/documents.js +1113 -0
- package/dist/server/routes/resources.d.ts +25 -0
- package/dist/server/routes/resources.js +225 -0
- package/dist/server/routes/shared.d.ts +35 -0
- package/dist/server/routes/shared.js +305 -0
- package/dist/server/routes/shared.test.d.ts +1 -0
- package/dist/server/routes/shared.test.js +32 -0
- package/dist/server/{routes.sync.d.ts → routes/sync.d.ts} +5 -5
- package/dist/server/routes/sync.integration.test.d.ts +1 -0
- package/dist/server/routes/sync.integration.test.js +2003 -0
- package/dist/server/routes/sync.js +3143 -0
- package/dist/server/routes/tasks.d.ts +72 -0
- package/dist/server/routes/tasks.js +1252 -0
- package/dist/server/routes/workspaces.d.ts +32 -0
- package/dist/server/routes/workspaces.js +307 -0
- package/dist/server/routes.d.ts +8 -9
- package/dist/server/routes.js +968 -4092
- package/dist/server/routes.test.js +9043 -2415
- package/dist/server/runtimeMode.d.ts +1 -1
- package/dist/server/runtimeMode.js +3 -18
- package/dist/server/runtimeMode.test.js +3 -3
- package/dist/server/securityHeaders.d.ts +1 -1
- package/dist/server/securityHeaders.js +65 -6
- package/dist/server/securityHeaders.test.js +40 -2
- package/dist/services/templateEngine.test.d.ts +1 -0
- package/dist/{__tests__ → services}/templateEngine.test.js +1 -1
- package/dist/services/templates.test.d.ts +1 -0
- package/dist/{__tests__ → services}/templates.test.js +1 -1
- package/dist/services/workflowDocumentFixtures.test.d.ts +1 -0
- package/dist/{__tests__ → services}/workflowDocumentFixtures.test.js +4 -4
- package/dist/services/workflowExportMatrix.test.d.ts +1 -0
- package/dist/{__tests__ → services}/workflowExportMatrix.test.js +1 -1
- package/dist/services/workflowExportSnapshots.test.d.ts +1 -0
- package/dist/services/workflowGeneration.test.d.ts +1 -0
- package/dist/services/workflowSimulation.test.d.ts +1 -0
- package/dist/services/workflowSimulation.test.js +113 -0
- package/dist/services/workflowV2Policy.test.d.ts +1 -0
- package/dist/{__tests__ → services}/workflowV2Policy.test.js +2 -2
- package/dist/shared/aiProfileSurfaceType.d.ts +9 -0
- package/dist/shared/aiProfileSurfaceType.js +49 -0
- package/dist/shared/customTaxonomyLibrary.d.ts +11 -0
- package/dist/shared/customTaxonomyLibrary.js +276 -0
- package/dist/shared/customTaxonomyLibrary.test.d.ts +1 -0
- package/dist/shared/customTaxonomyLibrary.test.js +20 -0
- package/dist/shared/taxonomyCatalog.d.ts +19 -0
- package/dist/shared/taxonomyCatalog.js +36 -0
- package/dist/shared/taxonomyDefaults.d.ts +29 -0
- package/dist/shared/taxonomyDefaults.js +26 -0
- package/dist/shared/taxonomyLibrary.d.ts +15 -0
- package/dist/shared/taxonomyLibrary.js +98 -0
- package/dist/shared/taxonomyLibrary.test.d.ts +1 -0
- package/dist/shared/taxonomyLibrary.test.js +26 -0
- package/dist/shared/taxonomyState.d.ts +36 -0
- package/dist/shared/taxonomyState.js +73 -0
- package/dist/shared/taxonomyState.test.d.ts +1 -0
- package/dist/shared/taxonomyState.test.js +71 -0
- package/dist/shared/workflowDefaults.d.ts +9 -0
- package/dist/shared/workflowDefaults.js +11 -0
- package/dist/storage/documentIntegrity.d.ts +2 -0
- package/dist/storage/documentIntegrity.js +34 -17
- package/dist/storage/documentPurge.d.ts +2 -1
- package/dist/storage/documentPurge.js +35 -8
- package/dist/storage/index.d.ts +4 -0
- package/dist/storage/index.js +2 -0
- package/dist/storage/objectStorage.d.ts +1 -1
- package/dist/storage/objectStorageClient.d.ts +6 -4
- package/dist/storage/objectStorageClient.js +77 -29
- package/dist/storage/objectStorageClient.test.d.ts +1 -0
- package/dist/storage/objectStorageClient.test.js +57 -0
- package/dist/storage/objectStorageConfig.js +3 -1
- package/dist/storage/objectStorageConfig.test.d.ts +1 -0
- package/dist/storage/objectStorageConfig.test.js +38 -0
- package/dist/storage/postgresAdapter.d.ts +5 -0
- package/dist/storage/postgresAdapter.js +2 -2
- package/dist/storage/postgresAdapter.test.d.ts +1 -0
- package/dist/storage/postgresAdapter.test.js +29 -0
- package/dist/storage/taskAssetStore.d.ts +7 -4
- package/dist/storage/taskAssetStore.js +65 -60
- package/dist/storage/workspaceAssetStore.d.ts +122 -0
- package/dist/storage/workspaceAssetStore.js +496 -0
- package/dist/storage/workspaceAssetStore.test.d.ts +1 -0
- package/dist/storage/workspaceAssetStore.test.js +501 -0
- package/dist/sync/cloudSyncApi.d.ts +33 -2
- package/dist/sync/cloudSyncApi.js +37 -15
- package/dist/sync/cloudSyncApi.test.js +60 -3
- package/dist/sync/index.d.ts +2 -0
- package/dist/sync/index.js +3 -0
- package/dist/sync/syncService.d.ts +25 -0
- package/dist/sync/syncService.js +184 -16
- package/dist/sync/syncService.test.js +289 -25
- package/dist/sync/workspaceRepair.d.ts +114 -0
- package/dist/sync/workspaceRepair.js +566 -0
- package/dist/sync/workspaceSyncModel.d.ts +230 -2
- package/dist/sync/workspaceSyncModel.js +456 -17
- package/dist/sync/workspaceSyncModel.test.js +642 -0
- package/dist/sync/workspaceSyncState.d.ts +12 -0
- package/dist/sync/workspaceSyncState.js +12 -0
- package/dist/sync/workspaceSyncSurface.d.ts +33 -0
- package/dist/sync/workspaceSyncSurface.js +74 -0
- package/dist/types.d.ts +143 -18
- package/dist/types.js +9 -24
- package/dist/ui/assets/AgentsModule-Bdq3T1Ts.js +1 -0
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-BaS2VwIr.css +1 -0
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-jKUVo-PJ.js +3 -0
- package/dist/ui/assets/DocumentWorkspace-C_8T8oz-.css +1 -0
- package/dist/ui/assets/DocumentWorkspace-DuQa-uIC.js +250 -0
- package/dist/ui/assets/InitiativesModule-C8Pi2VTk.js +1 -0
- package/dist/ui/assets/PlansPage-B6BDECSi.js +1 -0
- package/dist/ui/assets/PlansPage-BlVC_lRq.css +1 -0
- package/dist/ui/assets/TaskSettings-BwB9NtmJ.css +1 -0
- package/dist/ui/assets/TaskSettings-DUJgRTPU.js +8 -0
- package/dist/ui/assets/WorkflowsModule-b6TLuHwJ.js +5 -0
- package/dist/ui/assets/index-BiiF1cLQ.css +1 -0
- package/dist/ui/assets/index-xBWLPOEb.js +6 -0
- package/dist/ui/assets/vendor-dnd-DRzYolkg.js +5 -0
- package/dist/ui/assets/{vendor-icons-ZFG3SGwo.js → vendor-icons-QZyhEwgT.js} +1 -1
- package/dist/ui/assets/{vendor-markdown-CKYkQHfj.js → vendor-markdown-BUxTU7dS.js} +1 -1
- package/dist/ui/assets/vendor-react-CKJs5o3c.js +61 -0
- package/dist/ui/assets/vendor-router-BbWMxlnO.js +3 -0
- package/dist/ui/branding/logos/logo.png +0 -0
- package/dist/ui/branding/logos/logo_dark.svg +27 -0
- package/dist/ui/branding/logos/logo_favicon.svg +35 -0
- package/dist/ui/branding/logos/logo_light.svg +27 -0
- package/dist/ui/favicon/apple-touch-icon.png +0 -0
- package/dist/ui/favicon/archive/phoenix/apple-touch-icon.png +0 -0
- package/dist/ui/favicon/archive/phoenix/favicon.ico +0 -0
- package/dist/ui/favicon/archive/phoenix/site.webmanifest +1 -0
- package/dist/ui/favicon/favicon-96x96.png +0 -0
- package/dist/ui/favicon/favicon.ico +0 -0
- package/dist/ui/favicon/favicon.svg +17 -0
- package/dist/ui/favicon/site.webmanifest +21 -1
- package/dist/ui/favicon/web-app-manifest-192x192.png +0 -0
- package/dist/ui/favicon/web-app-manifest-512x512.png +0 -0
- package/dist/ui/index.html +10 -7
- package/dist/ui/product/screen_01.png +0 -0
- package/dist/ui/product/screen_02.png +0 -0
- package/dist/ui/product/screen_03.png +0 -0
- package/dist/utils/annotatedAttachments.d.ts +20 -0
- package/dist/utils/annotatedAttachments.js +74 -0
- package/dist/utils/annotatedAttachments.test.d.ts +1 -0
- package/dist/utils/annotatedAttachments.test.js +108 -0
- package/dist/utils/assignees.d.ts +26 -0
- package/dist/utils/assignees.js +132 -0
- package/dist/utils/canonicalAssetKind.d.ts +16 -0
- package/dist/utils/canonicalAssetKind.js +39 -0
- package/dist/utils/canonicalAssetKind.test.d.ts +1 -0
- package/dist/utils/canonicalAssetKind.test.js +24 -0
- package/dist/utils/coalescedRefresh.d.ts +5 -0
- package/dist/utils/coalescedRefresh.js +16 -0
- package/dist/utils/coalescedRefresh.test.d.ts +1 -0
- package/dist/utils/coalescedRefresh.test.js +30 -0
- package/dist/utils/constants.d.ts +16 -3
- package/dist/utils/constants.icons.test.js +2 -1
- package/dist/utils/constants.js +70 -13
- package/dist/utils/contextAssetEvents.d.ts +7 -0
- package/dist/utils/contextAssetEvents.js +6 -0
- package/dist/utils/contextFiles.d.ts +14 -3
- package/dist/utils/contextFiles.js +40 -8
- package/dist/utils/documentManagerApi.d.ts +6 -0
- package/dist/utils/documentManagerApi.js +19 -0
- package/dist/utils/documentNames.d.ts +24 -0
- package/dist/utils/documentNames.js +91 -0
- package/dist/utils/documentReferences.d.ts +9 -0
- package/dist/utils/documentReferences.js +11 -0
- package/dist/utils/entityReferences.d.ts +9 -0
- package/dist/utils/entityReferences.js +32 -0
- package/dist/utils/imageReferences.d.ts +9 -0
- package/dist/utils/imageReferences.js +11 -0
- package/dist/utils/planParser.d.ts +2 -2
- package/dist/utils/planParser.js +11 -11
- package/dist/utils/planParser.test.d.ts +1 -0
- package/dist/{__tests__ → utils}/planParser.test.js +22 -22
- package/dist/utils/planningReferences.d.ts +17 -0
- package/dist/utils/planningReferences.js +30 -0
- package/dist/utils/planningReferences.test.d.ts +1 -0
- package/dist/utils/planningReferences.test.js +17 -0
- package/dist/utils/taskActivity.d.ts +9 -0
- package/dist/utils/taskActivity.js +147 -0
- package/dist/utils/taskActivity.test.d.ts +1 -0
- package/dist/utils/taskActivity.test.js +34 -0
- package/dist/utils/taskDraftDefaults.d.ts +21 -0
- package/dist/utils/taskDraftDefaults.js +40 -0
- package/dist/utils/taskDraftDefaults.test.d.ts +1 -0
- package/dist/utils/taskDraftDefaults.test.js +34 -0
- package/dist/utils/taskNormalization.d.ts +25 -0
- package/dist/utils/taskNormalization.js +161 -0
- package/dist/utils/taskNormalization.test.d.ts +1 -0
- package/dist/utils/taskNormalization.test.js +158 -0
- package/dist/utils/taskReferences.d.ts +5 -0
- package/dist/utils/taskReferences.js +11 -0
- package/dist/utils/taskforceApiClient.d.ts +2 -0
- package/dist/utils/taskforceApiClient.js +101 -3
- package/dist/utils/taskforceApiClient.test.d.ts +1 -0
- package/dist/utils/taskforceApiClient.test.js +44 -0
- package/dist/utils/taxonomyFilterOptions.d.ts +2 -0
- package/dist/utils/taxonomyFilterOptions.js +17 -0
- package/dist/utils/taxonomyFormDefaults.d.ts +3 -0
- package/dist/utils/taxonomyFormDefaults.js +28 -0
- package/dist/utils/taxonomyFormDefaults.test.d.ts +1 -0
- package/dist/utils/taxonomyFormDefaults.test.js +63 -0
- package/dist/utils/taxonomyLifecycle.d.ts +3 -0
- package/dist/utils/taxonomyLifecycle.js +17 -0
- package/dist/utils/taxonomySorting.d.ts +7 -0
- package/dist/utils/taxonomySorting.js +74 -0
- package/dist/utils/theme.d.ts +15 -0
- package/dist/utils/theme.js +23 -0
- package/dist/utils/uiNotice.d.ts +7 -0
- package/dist/utils/uiNotice.js +6 -0
- package/dist/utils/uiNotice.test.d.ts +1 -0
- package/dist/utils/uiNotice.test.js +18 -0
- package/dist/utils/workspaceIdentity.d.ts +14 -0
- package/dist/utils/workspaceIdentity.js +21 -0
- package/dist/utils/workspaceIdentity.test.js +30 -1
- package/dist/utils/workspaceSyncPresentation.d.ts +20 -0
- package/dist/utils/workspaceSyncPresentation.js +21 -0
- package/dist/utils/workspaceSyncPresentation.test.d.ts +1 -0
- package/dist/utils/workspaceSyncPresentation.test.js +36 -0
- package/package.json +30 -23
- package/scripts/bootstrap-playwright-auth.mjs +155 -0
- package/scripts/check-compat-boundaries.mjs +41 -0
- package/scripts/check-env.ts +9 -2
- package/scripts/debug-login.mjs +32 -0
- package/scripts/deploy-prod.sh +41 -0
- package/scripts/deploy-staging.sh +23 -0
- package/scripts/migrate-planning-model.ts +233 -0
- package/scripts/migrate-task-data-assets.mjs +408 -0
- package/scripts/playwright-auth.sh +11 -0
- package/scripts/run-dev-proxy.sh +2 -0
- package/scripts/update-homebrew-formula.sh +2 -2
- package/scripts/with-esbuild.sh +11 -0
- package/src/resources/templates/WORKFLOW_V2_POLICY.md +1 -1
- package/src/resources/templates/workflow-sources/workflowDocs.mjs +62 -52
- package/src/resources/templates/workflows/collaborate.yaml +11 -5
- package/src/resources/templates/workflows/do.yaml +8 -2
- package/src/resources/templates/workflows/evaluate.yaml +13 -7
- package/src/resources/templates/workflows/execute.yaml +40 -23
- package/src/resources/templates/workflows/plan.yaml +15 -8
- package/src/resources/templates/workflows/review.yaml +14 -8
- package/dist/TaskforceScreenshot.d.ts +0 -11
- package/dist/TaskforceScreenshot.js +0 -113
- package/dist/compat/priorityCompat.d.ts +0 -2
- package/dist/compat/priorityCompat.js +0 -24
- package/dist/components/features/settings/TaxonomyManager 2.d.ts +0 -52
- package/dist/components/features/settings/TaxonomyManager 2.js +0 -75
- package/dist/components/task/TaskKanban 2.d.ts +0 -76
- package/dist/components/task/TaskKanban 2.js +0 -1004
- package/dist/components/task/TaskScreenshotSection.d.ts +0 -15
- package/dist/components/task/TaskScreenshotSection.js +0 -22
- package/dist/components/views/StandaloneLayout 2.d.ts +0 -8
- package/dist/components/views/StandaloneLayout 2.js +0 -1660
- package/dist/core/InitiativeTemplates.test.js +0 -50
- package/dist/core/ParentLifecycle.test.js +0 -98
- package/dist/migrations/clientMigrations.d.ts +0 -9
- package/dist/migrations/clientMigrations.js +0 -74
- package/dist/migrations/flags.d.ts +0 -6
- package/dist/migrations/flags.js +0 -8
- package/dist/migrations/taskMigrations.d.ts +0 -71
- package/dist/migrations/taskMigrations.js +0 -236
- package/dist/migrations/taskMigrations.test.js +0 -34
- package/dist/server/routes.billing.js +0 -991
- package/dist/server/routes.billing.test.js +0 -387
- package/dist/server/routes.sync.integration.test.js +0 -470
- package/dist/server/routes.sync.js +0 -1141
- package/dist/soak/syncSoakHarness.d.ts +0 -6
- package/dist/soak/syncSoakHarness.js +0 -10
- package/dist/ui/assets/index-0W5vyCpn.css +0 -1
- package/dist/ui/assets/index-MCZuNNfn.js +0 -23
- package/dist/ui/assets/logo_white_01-0Vx-iIIv.png +0 -0
- package/dist/ui/assets/vendor-dnd-BI1K77C1.js +0 -5
- package/dist/ui/assets/vendor-react-DdIDsh7f.js +0 -9
- package/dist/ui/assets/vendor-router-BtiNU7Dl.js +0 -3
- package/dist/utils/taskHierarchy.d.ts +0 -4
- package/dist/utils/taskHierarchy.js +0 -69
- package/dist/utils/taskHierarchy.test.js +0 -38
- package/dist/utils/taskParenting.d.ts +0 -3
- package/dist/utils/taskParenting.js +0 -24
- package/dist/utils/taskParenting.test.js +0 -21
- package/dist/utils/taskRelations.d.ts +0 -6
- package/dist/utils/taskRelations.js +0 -24
- package/dist/utils/taskRelations.test.js +0 -34
- package/scripts/check-compat-boundaries.js +0 -48
- /package/dist/{__tests__/planParser.test.d.ts → TaskforceCore.filter-persistence.test.d.ts} +0 -0
- /package/dist/{__tests__/releaseVersion.test.d.ts → TaskforceCore.routing.test.d.ts} +0 -0
- /package/dist/{__tests__/structuredCommentValidation.test.d.ts → annotatedAttachments/AnnotatedAttachmentSessionStore.test.d.ts} +0 -0
- /package/dist/{__tests__/structuredDocValidation.test.d.ts → annotatedAttachments/payload.test.d.ts} +0 -0
- /package/dist/{__tests__/templateEngine.test.d.ts → annotatedAttachments/types.js} +0 -0
- /package/dist/{__tests__/templates.test.d.ts → compat/workspaceSyncCompat.test.d.ts} +0 -0
- /package/dist/{__tests__/workflowDocumentFixtures.test.d.ts → components/features/AgentsModule.test.d.ts} +0 -0
- /package/dist/{__tests__/workflowExportMatrix.test.d.ts → components/features/AnnotatedAttachmentWorkspace.test.d.ts} +0 -0
- /package/dist/{__tests__/workflowExportSnapshots.test.d.ts → components/features/DocumentWorkspace.test.d.ts} +0 -0
- /package/dist/{__tests__/workflowGeneration.test.d.ts → components/features/settings/TaxonomyLibraryManager.test.d.ts} +0 -0
- /package/dist/{__tests__/workflowV2Policy.test.d.ts → components/task/TaskActionHeader.test.d.ts} +0 -0
- /package/dist/{core/InitiativeTemplates.test.d.ts → components/task/TaskKanban.planning-drop.test.d.ts} +0 -0
- /package/dist/{core/ParentLifecycle.test.d.ts → components/task/TaskStatusActions.test.d.ts} +0 -0
- /package/dist/{migrations/taskMigrations.test.d.ts → components/ui/TopNoticeLayer.test.d.ts} +0 -0
- /package/dist/{server/routes.billing.test.d.ts → components/views/AppShellHeader.test.d.ts} +0 -0
- /package/dist/{server/routes.sync.integration.test.d.ts → components/views/PlanComparisonPage.test.d.ts} +0 -0
- /package/dist/{utils/taskHierarchy.test.d.ts → components/views/chrome/WorkspaceChromeSections.test.d.ts} +0 -0
- /package/dist/{utils/taskParenting.test.d.ts → components/views/chrome/workspaceChrome.test.d.ts} +0 -0
- /package/dist/{utils/taskRelations.test.d.ts → components/views/panels/DocumentFilterToolbar.test.d.ts} +0 -0
- /package/dist/public/{android-chrome-192x192.png → archive/phoenix/android-chrome-192x192.png} +0 -0
- /package/dist/public/{android-chrome-512x512.png → archive/phoenix/android-chrome-512x512.png} +0 -0
- /package/dist/public/{favicon-16x16.png → archive/phoenix/favicon-16x16.png} +0 -0
- /package/dist/public/{favicon-32x32.png → archive/phoenix/favicon-32x32.png} +0 -0
- /package/dist/public/{favicon.png → archive/phoenix/favicon.png} +0 -0
- /package/dist/{__tests__ → services}/workflowExportSnapshots.test.js +0 -0
- /package/dist/{__tests__ → services}/workflowGeneration.test.js +0 -0
- /package/dist/ui/favicon/{android-chrome-192x192.png → archive/phoenix/android-chrome-192x192.png} +0 -0
- /package/dist/ui/favicon/{android-chrome-512x512.png → archive/phoenix/android-chrome-512x512.png} +0 -0
- /package/dist/ui/favicon/{favicon-16x16.png → archive/phoenix/favicon-16x16.png} +0 -0
- /package/dist/ui/favicon/{favicon-32x32.png → archive/phoenix/favicon-32x32.png} +0 -0
- /package/dist/ui/favicon/{favicon.png → archive/phoenix/favicon.png} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._plansWrapper_b8yvs_1{--plans-accent: var(--brand-primary, #6366f1);--plans-accent-strong: var(--brand-primary-strong, #7c3aed);--plans-accent-soft: var(--brand-primary-soft, rgba(99, 102, 241, .1));--plans-accent-border: var(--brand-primary-border, rgba(99, 102, 241, .24));--plans-surface: color-mix(in srgb, var(--surface-panel) 84%, var(--surface-page));--plans-surface-elevated: color-mix(in srgb, var(--surface-elevated) 88%, var(--surface-panel));--plans-surface-strong: color-mix(in srgb, var(--surface-page) 70%, var(--surface-panel));--plans-shadow: 0 22px 44px rgba(0, 0, 0, .18);overflow-y:auto;display:flex;flex-direction:column;align-items:stretch;align-self:stretch;width:100%;flex:1;min-height:100%;min-width:0;padding:64px 24px;box-sizing:border-box;background:radial-gradient(900px 520px at 18% -4%,color-mix(in srgb,var(--plans-accent) 18%,transparent),transparent 62%),radial-gradient(780px 480px at 88% 2%,color-mix(in srgb,var(--brand-cloud-accent, #dd6b20) 12%,transparent),transparent 60%),linear-gradient(180deg,color-mix(in srgb,var(--surface-page) 94%,var(--surface-panel)),var(--surface-page));scrollbar-gutter:stable}._contentFrame_b8yvs_28{width:min(1100px,100%);max-width:1100px;margin:0 auto;display:flex;flex-direction:column}._shellOwnsScroll_b8yvs_36{overflow:visible;min-height:100%;scrollbar-gutter:auto}._withChrome_b8yvs_42{padding-top:52px}._siteVariant_b8yvs_46{background:radial-gradient(1200px 700px at 20% -10%,rgba(56,189,248,.25),transparent 60%),radial-gradient(900px 600px at 90% 0%,rgba(45,212,191,.18),transparent 65%),linear-gradient(150deg,#0b1022,#111936);padding:56px 24px 80px}._siteVariant_b8yvs_46 ._title_b8yvs_54{background:none;-webkit-text-fill-color:var(--text-primary);color:var(--text-primary);font-size:clamp(34px,6vw,58px);letter-spacing:-.03em;margin-bottom:0}._siteVariant_b8yvs_46 ._subtitle_b8yvs_63{color:#a6b3d9}._siteVariant_b8yvs_46 ._header_b8yvs_67{width:100%;max-width:1040px;border:1px solid rgba(203,213,255,.2);border-radius:20px;padding:42px 28px;background:#090e208c;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);text-align:left;margin-bottom:20px}._siteVariant_b8yvs_46 ._planCard_b8yvs_79{background:#090e20b3;border-color:#cbd5ff33;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);border-radius:16px;padding:22px 20px}._siteVariant_b8yvs_46 ._planCard_b8yvs_79:hover{transform:translateY(-3px);box-shadow:none}._siteVariant_b8yvs_46 ._grid_b8yvs_92{max-width:1040px;gap:12px;grid-template-columns:repeat(3,minmax(0,1fr))}._siteVariant_b8yvs_46 ._planName_b8yvs_98{font-size:22px}._siteVariant_b8yvs_46 ._featureText_b8yvs_102{color:#a6b3d9}._siteVariant_b8yvs_46 ._currentBadge_b8yvs_106{font-size:11px}._siteVariant_b8yvs_46 ._navAction_b8yvs_110,._siteVariant_b8yvs_46 ._backBtn_b8yvs_111{border:1px solid rgba(203,213,255,.2);background:#141d3c99;color:#f6f8ff}._siteVariant_b8yvs_46 ._backBtn_b8yvs_111:hover,._siteVariant_b8yvs_46 ._navAction_b8yvs_110:hover{background:#141d3cd9}._siteVariant_b8yvs_46 ._priceRows_b8yvs_122{border-top-color:#cbd5ff33}._header_b8yvs_67{width:100%;text-align:left;margin-bottom:32px;padding:32px;border-radius:28px;border:1px solid var(--border-default);background:linear-gradient(180deg,color-mix(in srgb,var(--plans-surface-elevated) 92%,transparent),color-mix(in srgb,var(--plans-surface) 96%,transparent)),var(--plans-surface);box-shadow:var(--plans-shadow)}._headerBar_b8yvs_139{width:100%;display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:24px}._headerActions_b8yvs_148{display:flex;align-items:center;justify-content:flex-end;gap:12px;flex-wrap:wrap}._title_b8yvs_54{font-size:clamp(38px,5vw,54px);font-weight:800;margin-bottom:16px;background:linear-gradient(135deg,var(--text-primary),color-mix(in srgb,var(--plans-accent) 72%,var(--text-primary)));background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;letter-spacing:-.04em;line-height:.98}._subtitle_b8yvs_63{max-width:720px;font-size:18px;color:var(--text-secondary);line-height:1.7}._debugMeta_b8yvs_175{margin-top:16px;font-size:13px;color:var(--text-secondary);opacity:.8}._grid_b8yvs_92{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:20px;width:100%}._planCard_b8yvs_79{background:linear-gradient(180deg,color-mix(in srgb,var(--plans-surface-elevated) 90%,transparent),color-mix(in srgb,var(--plans-surface) 96%,transparent)),var(--plans-surface);border:1px solid var(--border-default);border-radius:22px;padding:28px;display:flex;flex-direction:column;position:relative;overflow:hidden;box-shadow:0 12px 28px #0000001f;transition:transform .24s ease,box-shadow .24s ease,border-color .24s ease,background .24s ease}._clickablePlanCard_b8yvs_204{cursor:pointer}._clickablePlanCard_b8yvs_204:focus-visible{outline:2px solid var(--plans-accent);outline-offset:4px}._planCard_b8yvs_79:hover{transform:translateY(-4px);border-color:var(--plans-accent-border);box-shadow:0 20px 36px #0000002e}._activePlanCard_b8yvs_219{border:1px solid color-mix(in srgb,var(--plans-accent) 38%,var(--border-default));background:linear-gradient(180deg,color-mix(in srgb,var(--plans-accent) 10%,var(--plans-surface-elevated)),color-mix(in srgb,var(--plans-accent) 4%,var(--plans-surface))),var(--plans-surface);box-shadow:0 18px 34px #0000002e,inset 0 0 0 1px color-mix(in srgb,var(--plans-accent) 16%,transparent)}._currentBadge_b8yvs_106{position:absolute;top:20px;right:20px;background:color-mix(in srgb,var(--plans-accent) 16%,var(--surface-page));color:var(--plans-accent-strong);font-size:12px;font-weight:700;padding:6px 12px;border-radius:999px;border:1px solid color-mix(in srgb,var(--plans-accent) 26%,transparent);text-transform:uppercase;letter-spacing:.08em}._planName_b8yvs_98{font-size:28px;font-weight:700;color:var(--text-primary);margin-bottom:14px}._priceDisplay_b8yvs_251{margin-bottom:32px;display:flex;align-items:baseline;gap:8px}._priceAmount_b8yvs_258{font-size:56px;font-weight:800;color:var(--text-primary);letter-spacing:-2px;line-height:1}._priceInterval_b8yvs_266{font-size:16px;color:var(--text-secondary);font-weight:500}._callToAction_b8yvs_272{width:100%;padding:14px 18px;border-radius:12px;font-size:15px;font-weight:600;border:1px solid transparent;cursor:pointer;transition:all .2s ease;margin-bottom:0}._primaryCta_b8yvs_284{background:var(--button-primary-bg);border-color:var(--button-primary-border);color:var(--button-primary-text, white)}._primaryCta_b8yvs_284:hover{transform:translateY(-1px);box-shadow:0 10px 22px var(--brand-primary-glow)}._secondaryCta_b8yvs_295{background:var(--button-secondary-bg);color:var(--button-secondary-text);border-color:var(--button-secondary-border)}._secondaryCta_b8yvs_295:hover{background:var(--button-secondary-hover-bg);border-color:var(--button-secondary-hover-border);color:var(--button-secondary-hover-text)}._currentCta_b8yvs_307{background:color-mix(in srgb,var(--plans-accent) 9%,var(--plans-surface-strong));color:var(--text-primary);border-color:color-mix(in srgb,var(--plans-accent) 24%,var(--border-default));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--plans-accent) 10%,transparent);cursor:pointer}._currentCta_b8yvs_307:hover{background:color-mix(in srgb,var(--plans-accent) 14%,var(--plans-surface-strong));border-color:color-mix(in srgb,var(--plans-accent) 32%,var(--border-default));transform:translateY(-1px)}._featuresList_b8yvs_321{flex:1;display:flex;flex-direction:column;gap:20px;margin-bottom:28px}._priceRows_b8yvs_122{display:flex;flex-direction:column;gap:10px;margin-top:auto;margin-bottom:16px;border-top:1px solid var(--border-default);padding-top:16px}._priceRow_b8yvs_122{display:flex;align-items:baseline;justify-content:space-between;gap:10px}._priceRowAmount_b8yvs_346{font-size:22px;font-weight:700;color:var(--text-primary)}._priceRowInterval_b8yvs_352{color:var(--text-secondary);font-weight:600}._ctaRow_b8yvs_357{display:grid;grid-template-columns:1fr 1fr;gap:10px}._featureItem_b8yvs_363{display:flex;align-items:flex-start;gap:16px}._featureIcon_b8yvs_369{color:var(--plans-accent);flex-shrink:0;width:20px;height:20px;margin-top:2px}._featureText_b8yvs_102{font-size:16px;line-height:1.5;color:var(--text-primary)}._emptyState_b8yvs_383{text-align:center;padding:64px;background:var(--bg-secondary);border-radius:24px;border:1px dashed var(--border-color, var(--border-primary, rgba(255, 255, 255, .14)));width:100%}._marketingEmptyState_b8yvs_392{max-width:920px;border-style:solid;border-radius:28px;padding:72px 48px;background:radial-gradient(560px 260px at 15% 10%,rgba(34,197,94,.15),transparent 60%),radial-gradient(620px 320px at 85% 0%,rgba(251,191,36,.16),transparent 62%),linear-gradient(145deg,#0f172af5,#111827eb);box-shadow:0 28px 90px #00000047}._marketingEmptyState_b8yvs_392 h2{margin:18px 0 14px;font-size:clamp(32px,4vw,52px);line-height:1.02;letter-spacing:-.04em;color:#f8fafc}._marketingEmptyState_b8yvs_392 p{margin:0 auto;max-width:680px;font-size:18px;line-height:1.7;color:#cbd5e1}._emptyBadge_b8yvs_420{display:inline-flex;align-items:center;justify-content:center;padding:8px 16px;border-radius:999px;background:#f8fafc14;border:1px solid rgba(248,250,252,.18);color:#f8fafc;font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase}._emptyHighlights_b8yvs_435{display:flex;flex-wrap:wrap;justify-content:center;gap:12px;margin-top:28px}._emptyHighlights_b8yvs_435 span{display:inline-flex;align-items:center;gap:8px;padding:10px 14px;border-radius:999px;background:#94a3b81f;border:1px solid rgba(148,163,184,.18);color:#e2e8f0;font-size:13px;font-weight:700;letter-spacing:.02em}._loader_b8yvs_457{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:50vh;gap:24px;color:var(--text-secondary)}._spinner_b8yvs_467{animation:_spin_b8yvs_467 1s linear infinite;color:var(--accent-primary, #6366f1)}@keyframes _spin_b8yvs_467{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._backBtn_b8yvs_111{background:var(--button-secondary-bg);border:1px solid var(--button-secondary-border);color:var(--button-secondary-text);display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600;cursor:pointer;padding:10px 16px;border-radius:12px;transition:all .2s ease}._backBtn_b8yvs_111:hover{background:var(--button-secondary-hover-bg);border-color:var(--button-secondary-hover-border);color:var(--button-secondary-hover-text)}._navAction_b8yvs_110{background:var(--button-secondary-bg);border:1px solid var(--button-secondary-border);color:var(--button-secondary-text);padding:10px 20px;border-radius:12px;font-weight:600;cursor:pointer;transition:all .2s ease}._navAction_b8yvs_110:hover{background:var(--button-secondary-hover-bg);border-color:var(--button-secondary-hover-border);color:var(--button-secondary-hover-text)}._statusBanner_b8yvs_520{margin-top:24px;padding:12px 24px;border-radius:12px;font-weight:500;font-size:14px}._successBanner_b8yvs_528{background:color-mix(in srgb,var(--status-success) 12%,var(--plans-surface-elevated));color:var(--status-success);border:1px solid color-mix(in srgb,var(--status-success) 24%,transparent)}._errorBanner_b8yvs_534{background:color-mix(in srgb,var(--status-error) 12%,var(--plans-surface-elevated));color:var(--status-error);border:1px solid color-mix(in srgb,var(--status-error) 24%,transparent)}@media(max-width:768px){._plansWrapper_b8yvs_1{padding:28px 14px}._withChrome_b8yvs_42{padding-top:36px}._header_b8yvs_67{margin-bottom:24px;padding:22px 18px}._headerBar_b8yvs_139{gap:10px;flex-wrap:wrap;margin-bottom:18px}._title_b8yvs_54{font-size:34px;margin-bottom:12px}._grid_b8yvs_92{grid-template-columns:1fr;gap:18px}._siteVariant_b8yvs_46 ._grid_b8yvs_92{grid-template-columns:1fr}._siteVariant_b8yvs_46 ._header_b8yvs_67{padding:26px 18px}._planCard_b8yvs_79{padding:22px}._marketingEmptyState_b8yvs_392{padding:56px 24px}._marketingEmptyState_b8yvs_392 h2{font-size:34px}._marketingEmptyState_b8yvs_392 p{font-size:16px}._headerActions_b8yvs_148{width:100%;justify-content:flex-start}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
._categoryManagerContainer_1ibti_1{display:flex;flex-direction:column;gap:0;height:100%;min-height:0}._pathInputGroupStretch_1ibti_9{align-items:stretch}._emptyStateItalic_1ibti_13{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:40px;text-align:center;border:1px dashed rgba(139,92,246,.2);border-radius:16px;font-style:italic;color:var(--text-secondary);min-height:300px}._emptyStateBox_1ibti_28{flex:1;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:40px;text-align:center;background:#8b5cf60a;border:1px dashed rgba(139,92,246,.2);border-radius:16px;font-style:italic;color:var(--text-secondary);min-height:200px}._emptyStateBare_1ibti_44{border:none;background:transparent}._emptyStateIcon_1ibti_49{display:block;margin:0 auto 8px;opacity:.5}._taxonomyGrid_1ibti_55{display:grid;grid-template-columns:1fr 1fr;gap:20px}._checkboxRow_1ibti_61{display:flex;gap:24px;margin-top:16px}._checkboxLabel_1ibti_67{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13px}._checkboxSmall_1ibti_75{width:16px;height:16px}._flexGap8_1ibti_80{display:flex;gap:8px}._optionOrderButtons_1ibti_85{display:flex;align-items:center;gap:6px;margin-left:12px}._addTaxonomyBtnSmall_1ibti_92{display:flex;align-items:center;gap:4px;padding:4px 12px;border-radius:6px;font-size:11px;font-weight:500;transition:all .2s;background:var(--bg-primary);border:1px solid var(--border-color);color:var(--text-secondary);cursor:pointer}._addTaxonomyBtnSmall_1ibti_92:hover{background:var(--bg-hover);color:var(--text-primary);border-color:var(--primary-color)}._taxonomyDrillDown_1oekr_1{display:flex;flex-direction:column;height:100%}._drillDownList_1oekr_7{display:flex;flex-direction:column;gap:24px}._librarySection_1oekr_13{display:flex;flex-direction:column}._libraryLauncher_1oekr_18{display:flex;align-items:center;justify-content:space-between;gap:16px;width:100%;padding:16px 18px;background:linear-gradient(180deg,var(--surface-panel),var(--bg-secondary));border:1px solid var(--border-subtle);border-radius:12px;color:var(--text-primary);cursor:pointer;text-align:left;transition:border-color .2s ease,background .2s ease,box-shadow .2s ease}._libraryLauncher_1oekr_18:hover{border-color:var(--brand-primary-border);background:linear-gradient(180deg,rgba(139,92,246,.08),var(--bg-secondary));box-shadow:0 0 0 1px #8b5cf61f}._libraryLauncherInfo_1oekr_40{display:flex;align-items:flex-start;gap:12px;min-width:0}._libraryLauncherIcon_1oekr_47{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:10px;color:var(--brand-primary);background:#8b5cf61f;border:1px solid rgba(139,92,246,.18);flex-shrink:0}._libraryLauncherText_1oekr_60{display:flex;flex-direction:column;gap:4px;min-width:0}._libraryLauncherLabel_1oekr_67{font-size:15px;font-weight:700;color:var(--text-primary)}._libraryLauncherSubtext_1oekr_73{font-size:12px;line-height:1.5;color:var(--text-secondary)}._libraryLauncherMeta_1oekr_79{display:inline-flex;align-items:center;gap:8px;flex-shrink:0;font-size:12px;font-weight:600;color:var(--text-secondary)}._drillDownSection_1oekr_89{display:flex;flex-direction:column;gap:8px}._drillDownSectionHeader_1oekr_95{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}._drillDownSectionTitle_1oekr_102{font-size:13px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;margin:0}._drillDownItem_1oekr_111{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:var(--bg-secondary);border:1px solid var(--border-subtle);border-radius:8px;cursor:pointer;text-align:left;transition:all .2s;width:100%;color:var(--text-primary)}._drillDownItemAction_1oekr_126{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;background:transparent;border:none;color:inherit;cursor:pointer;padding:0;text-align:left}._drillDownItem_1oekr_111:hover{background:var(--bg-hover);border-color:var(--border-primary)}._drillDownItemDimmed_1oekr_145{opacity:.55}._drillDownItemDimmed_1oekr_145:hover{opacity:.75}._drillDownItemInfo_1oekr_153{display:flex;align-items:center;gap:12px}._drillDownItemText_1oekr_159{display:flex;flex-direction:column;gap:2px}._drillDownItemLabel_1oekr_165{font-weight:500;font-size:14px}._drillDownItemSubtext_1oekr_170{font-size:12px;color:var(--text-muted)}._systemIcon_1oekr_175{color:var(--text-secondary)}._chevron_1oekr_179{color:var(--text-muted);opacity:.5}._orderButtons_1oekr_184{display:flex;align-items:center;gap:6px;margin-left:12px}._drillDownItem_1oekr_111:hover ._chevron_1oekr_179{opacity:1}._createOverlay_1oekr_195{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}._createDialog_1oekr_209{background:var(--bg-secondary-alt);border:1px solid var(--border-primary);border-radius:12px;padding:24px;width:400px;box-shadow:0 20px 40px #0003}._createDialogTitle_1oekr_218{margin:0 0 20px;font-size:18px;font-weight:600}._inputGroup_1oekr_224{margin-bottom:20px}._dialogActions_1oekr_228{display:flex;justify-content:flex-end;gap:12px}._createSubmit_1oekr_234,._createCancel_1oekr_238{padding:8px 16px}._taxonomyDetailView_1oekr_242{display:flex;flex-direction:column;height:100%;gap:20px}._detailHeader_1oekr_249{display:flex;align-items:center;padding-bottom:20px;border-bottom:1px solid var(--border-subtle);margin-bottom:4px}._taxonomyBreadcrumbs_1oekr_257{display:flex;align-items:center;gap:10px}._breadcrumbPrev_1oekr_263{background:#ffffff0d;border:1px solid var(--border-subtle);color:var(--text-secondary);font-size:13px;font-weight:600;cursor:pointer;padding:4px 10px;border-radius:6px;display:flex;align-items:center;transition:all .2s}._breadcrumbPrev_1oekr_263:hover{color:var(--text-primary);background:#8b5cf61a;border-color:#8b5cf64d;transform:translate(-2px)}._breadcrumbIcon_1oekr_284{margin-right:6px}._breadcrumbDivider_1oekr_288{color:var(--text-muted);opacity:.5}._breadcrumbActive_1oekr_293{margin:0;font-size:18px;font-weight:700;color:var(--text-primary);letter-spacing:-.01em}._detailContent_1oekr_301{flex:1;overflow-y:auto}._libraryContainer_1dwmv_1{display:flex;flex-direction:column;gap:20px}._introCard_1dwmv_7{display:flex;flex-direction:column;gap:8px;padding:18px 20px;border-radius:12px;border:1px solid var(--border-subtle);background:linear-gradient(180deg,var(--surface-panel),var(--bg-secondary))}._eyebrow_1dwmv_17{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary)}._introTitle_1dwmv_28{margin:0;font-size:20px;font-weight:700;color:var(--text-primary)}._introCopy_1dwmv_35{margin:0;font-size:13px;line-height:1.55;color:var(--text-secondary);max-width:70ch}._prototypeNotice_1dwmv_43{margin:0;font-size:12px;color:var(--text-muted)}._libraryGrid_1dwmv_49{display:grid;grid-template-columns:minmax(0,1fr) minmax(320px,.95fr);gap:20px;align-items:start}._packList_1dwmv_56{display:flex;flex-direction:column;gap:12px}._packCard_1dwmv_62{display:flex;flex-direction:column;gap:14px;padding:16px;border-radius:12px;border:1px solid var(--border-subtle);background:var(--bg-secondary);transition:border-color .2s ease,background .2s ease,box-shadow .2s ease}._packCardActive_1dwmv_73{border-color:var(--brand-primary-border);background:linear-gradient(180deg,rgba(139,92,246,.08),var(--bg-secondary));box-shadow:0 0 0 1px #8b5cf61f}._packHeader_1dwmv_79{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}._packHeaderText_1dwmv_86{display:flex;flex-direction:column;gap:6px;min-width:0}._packTitleRow_1dwmv_93{display:flex;align-items:center;gap:8px;flex-wrap:wrap}._packTitle_1dwmv_93{margin:0;font-size:16px;font-weight:700;color:var(--text-primary)}._packBadge_1dwmv_107{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;border:1px solid rgba(37,228,207,.25);background:#25e4cf1a;color:#7ff5e7;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}._packDescription_1dwmv_122{margin:0;font-size:13px;line-height:1.5;color:var(--text-secondary)}._packBestFor_1dwmv_129{margin:0;font-size:12px;line-height:1.5;color:var(--text-muted)}._packCounts_1dwmv_136,._packTaxonomyPreview_1dwmv_142{display:flex;gap:8px;flex-wrap:wrap}._packTaxonomyChip_1dwmv_148{display:inline-flex;align-items:center;padding:4px 8px;border-radius:999px;background:#ffffff08;border:1px solid rgba(255,255,255,.05);color:var(--text-primary);font-size:11px;font-weight:600}._packTaxonomyMore_1dwmv_160{display:inline-flex;align-items:center;padding:4px 8px;border-radius:999px;color:var(--text-muted);font-size:11px;font-weight:600}._packCountChip_1dwmv_170{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;background:#ffffff0a;border:1px solid var(--border-subtle);color:var(--text-secondary);font-size:11px;font-weight:600}._packActions_1dwmv_183{display:flex;gap:10px;flex-wrap:wrap}._previewPanel_1dwmv_189{display:flex;flex-direction:column;gap:16px;padding:18px;border-radius:14px;border:1px solid var(--border-subtle);background:linear-gradient(180deg,var(--surface-panel),var(--surface-page));position:sticky;top:0}._previewHeader_1dwmv_201{display:flex;flex-direction:column;gap:6px}._previewSummaryRow_1dwmv_207{display:flex;gap:8px;flex-wrap:wrap}._previewTitle_1dwmv_213{margin:0;font-size:18px;font-weight:700;color:var(--text-primary)}._previewBestFor_1dwmv_220{margin:0;font-size:12px;line-height:1.5;color:var(--text-secondary)}._previewSubtext_1dwmv_227{margin:0;font-size:12px;color:var(--text-muted)}._previewSection_1dwmv_233{display:flex;flex-direction:column;gap:10px}._previewSectionTitle_1dwmv_239{margin:0;font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-secondary)}._previewList_1dwmv_248{display:flex;flex-direction:column;gap:8px}._previewItem_1dwmv_254{display:flex;justify-content:space-between;gap:10px;align-items:center;padding:10px 12px;border-radius:10px;background:#ffffff08;border:1px solid rgba(255,255,255,.04)}._previewItemLabel_1dwmv_265{display:inline-flex;align-items:center;gap:8px;min-width:0;font-size:13px;font-weight:600;color:var(--text-primary)}._previewItemMeta_1dwmv_275{flex-shrink:0;font-size:11px;color:var(--text-muted)}._customTaxonomyCard_1dwmv_281{display:flex;flex-direction:column;gap:12px;padding:14px;border-radius:12px;border:1px solid var(--border-subtle);background:#ffffff05}._customTaxonomyHeader_1dwmv_291{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}._customTaxonomyDescription_1dwmv_298{margin:6px 0 0;font-size:13px;line-height:1.5;color:var(--text-secondary)}._customTaxonomyBadges_1dwmv_305{display:flex;flex-wrap:wrap;gap:8px}._customTaxonomyBadge_1dwmv_305{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:999px;border:1px solid var(--border-subtle);background:#ffffff0d;color:var(--text-secondary);font-size:11px;font-weight:600}._applyPanel_1dwmv_324{display:flex;flex-direction:column;gap:12px;padding:14px;border-radius:12px;border:1px solid rgba(37,110,228,.18);background:#256ee414}._applyTitle_1dwmv_334{margin:0;font-size:14px;font-weight:700;color:var(--text-primary)}._applyCopy_1dwmv_341{margin:0;font-size:12px;line-height:1.5;color:var(--text-secondary)}._analysisPanel_1dwmv_348{display:flex;flex-direction:column;gap:8px;padding:12px;border-radius:10px;border:1px solid rgba(255,255,255,.08);background:#ffffff0a}._analysisCopy_1dwmv_358{margin:0;font-size:12px;line-height:1.5;color:var(--text-secondary)}._analysisWarning_1dwmv_365{margin:0;font-size:12px;line-height:1.5;color:#ffd08a}._checkboxList_1dwmv_372{display:flex;flex-direction:column;gap:8px}._checkboxLabel_1dwmv_378{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--text-primary)}._prototypeResult_1dwmv_386{margin:0;font-size:12px;color:#8ce6d7}._prototypeError_1dwmv_392{color:#ff9e9e}@media(max-width:1100px){._libraryGrid_1dwmv_49{grid-template-columns:1fr}._previewPanel_1dwmv_189{position:static}}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{r as i,j as e,R as Re}from"./vendor-react-CKJs5o3c.js";import{t as s,T as Cs,P as Fe,A as ws,I as ne,r as J,D as nn,a as la,b as ln,l as xa,c as on,d as oa}from"./index-xBWLPOEb.js";import{T as ze,m as Qe,X as Ns,g as ga,f as ba,I as pt,a0 as es,o as rn,h as Te,r as ya,a1 as ra,k as xe,d as cn,a2 as ca,a3 as da,a4 as ht,L as va,a5 as dn,b as ge,i as be,a6 as pn,a7 as un,q as mn,a8 as xt,a as fs,a9 as hn,Z as js,B as pa,c as ut,p as xn,aa as gn,ab as bn,ac as yn,ad as fa,ae as vn,af as fn,ag as jn,ah as kn}from"./vendor-icons-QZyhEwgT.js";import"./vendor-markdown-BUxTU7dS.js";import"./vendor-dnd-DRzYolkg.js";import"./vendor-router-BbWMxlnO.js";const mt=[{id:"cursor",label:"Cursor"},{id:"cline",label:"Cline"},{id:"vscode",label:"VS Code / Copilot"},{id:"windsurf",label:"Windsurf"},{id:"antigravity",label:"Antigravity"},{id:"openclaw",label:"OpenClaw"},{id:"codex",label:"Codex"},{id:"claude-code",label:"Claude Code CLI"},{id:"gemini-cli",label:"Gemini CLI"}];function gt(l,r){return String(l||"").toLowerCase().replace(/[^a-zA-Z0-9_-]+/g,"-").replace(/-+/g,"-").replace(/^[-_]+|[-_]+$/g,"")||r.toLowerCase()}function Nn(l,r){const y=gt(l||r||"workspace","workspace").slice(0,25)||"workspace";return gt(`taskforce-${y}`,"taskforce-workspace")}function Cn(l,r){return r}function wn(l){const r={Authorization:`Bearer ${l.tokenValue}`},g=String(l.aiProfileName||"").trim(),y=String(l.aiProfileToken||"").trim(),T=String(l.aiProfileDescription||"").trim(),S=String(l.aiProfileRole||"").trim(),C=String(l.aiProfileProvider||"").trim(),_=String(l.aiProfileModel||"").trim(),L=String(l.aiProfileSurfaceType||"").trim();return g&&(r["X-Taskforce-AI-Name"]=g),y&&(r["X-Taskforce-AI-Profile-Token"]=y),T&&(r["X-Taskforce-AI-Description"]=T),S&&(r["X-Taskforce-AI-Role"]=S),C&&(r["X-Taskforce-AI-Provider"]=C),_&&(r["X-Taskforce-AI-Model"]=_),L&&(r["X-Taskforce-AI-Surface-Type"]=L),r}function Tn(l){const{clientId:r,endpoint:g,tokenValue:y,serverId:T}=l,S=wn(l);S.Authorization;const C=Object.entries(S).filter(([_])=>_!=="Authorization").map(([_,L])=>` --header "${_}: ${L}"`).join("");switch(r){case"cursor":return{clientId:r,kind:"json",rootKey:"mcpServers",serverConfig:{url:g,headers:S},instructionLabel:"Cursor Configuration Instructions",instructionText:"Open Cursor settings, find MCP servers, and paste this config. For automated AI workers, include X-Taskforce-AI-Name and later X-Taskforce-AI-Profile-Token in the headers to let Taskforce bind the same AI profile automatically."};case"cline":return{clientId:r,kind:"json",rootKey:"mcpServers",serverConfig:{url:g,type:"streamableHttp",headers:S},instructionLabel:"Cline Configuration Instructions",instructionText:"Open Cline MCP Servers, add a remote server, or paste this into the Cline MCP config with Streamable HTTP selected. For automated AI workers, include X-Taskforce-AI-Name and later X-Taskforce-AI-Profile-Token in the headers to let Taskforce bind the same AI profile automatically."};case"vscode":return{clientId:r,kind:"json",rootKey:"servers",serverConfig:{type:"http",url:g,headers:S},instructionLabel:"VS Code Configuration Instructions",instructionText:"Open .vscode/mcp.json or MCP: Open User Configuration and add this server under the servers object. For automated AI workers, include X-Taskforce-AI-Name and later X-Taskforce-AI-Profile-Token in the headers to let Taskforce bind the same AI profile automatically."};case"windsurf":return{clientId:r,kind:"json",rootKey:"mcpServers",serverConfig:{serverUrl:g,headers:S},instructionLabel:"Windsurf Configuration Instructions",instructionText:"Open Windsurf MCP settings, add a server, and paste this config. For automated AI workers, include X-Taskforce-AI-Name and later X-Taskforce-AI-Profile-Token in the headers to let Taskforce bind the same AI profile automatically."};case"antigravity":return{clientId:r,kind:"json",rootKey:"mcpServers",serverConfig:{serverUrl:g,headers:S},instructionLabel:"Antigravity Configuration Instructions",instructionText:"Open Antigravity MCP settings, view the raw config, and paste this Antigravity-specific configuration. For automated AI workers, include X-Taskforce-AI-Name and later X-Taskforce-AI-Profile-Token in the headers to let Taskforce bind the same AI profile automatically."};case"openclaw":return{clientId:r,kind:"json",rootKey:"servers",wrapperKeys:["mcp"],serverConfig:{transport:"streamable-http",url:g,headers:S},instructionLabel:"OpenClaw Configuration Instructions",instructionText:"Open ~/.openclaw/openclaw.json and add this server under mcp.servers. For automated AI workers, include X-Taskforce-AI-Name and later X-Taskforce-AI-Profile-Token in the headers to let Taskforce bind the same AI profile automatically."};case"codex":return{clientId:r,kind:"text",renderedText:[`[mcp_servers.${T}]`,`url = "${g}"`,`http_headers = { ${Object.entries(S).map(([_,L])=>`${_} = "${L}"`).join(", ")} }`].join(`
|
|
2
|
+
`),instructionLabel:"Codex Configuration Instructions",instructionText:"Open ~/.codex/config.toml and add this Codex MCP entry. For automated AI workers, set X-Taskforce-AI-Name and later X-Taskforce-AI-Profile-Token here so Taskforce binds the same AI profile automatically."};case"claude-code":return{clientId:r,kind:"text",renderedText:`claude mcp add --transport http ${T} ${g} --header "Authorization: Bearer ${y}"${C}`,instructionLabel:"Claude Code Configuration Instructions",instructionText:"Run this Claude Code command in your terminal to add the remote Taskforce MCP server. For automated AI workers, keep the X-Taskforce-AI-Name header and later add X-Taskforce-AI-Profile-Token so Taskforce binds the same AI profile automatically."};case"gemini-cli":return{clientId:r,kind:"text",renderedText:`gemini mcp add ${T} ${g} --transport http --header "Authorization: Bearer ${y}"${C}`,instructionLabel:"Gemini CLI Configuration Instructions",instructionText:"Run this Gemini CLI command in your terminal to add the remote Taskforce MCP server. Add --scope user if you want it available across all projects. For automated AI workers, keep the X-Taskforce-AI-Name header and later add X-Taskforce-AI-Profile-Token so Taskforce binds the same AI profile automatically."};case"claude-desktop":return{clientId:r,kind:"text",renderedText:Cn(r,g),instructionLabel:"Claude Desktop Configuration Instructions",instructionText:"Open Claude Desktop Settings > Connectors, paste this MCP server URL, and complete the Taskforce OAuth flow to authorize one workspace."};case"chatgpt-desktop":return{clientId:r,kind:"text",renderedText:g,instructionLabel:"ChatGPT Desktop Configuration Instructions",instructionText:"Open ChatGPT Apps & Connectors / developer mode, paste this MCP server URL, and complete the Taskforce OAuth authorize flow when ChatGPT opens it."};default:{const _=r;throw new Error(`Unsupported MCP client: ${_}`)}}}const Sn="_categoryManagerContainer_1ibti_1",$n="_pathInputGroupStretch_1ibti_9",In="_emptyStateItalic_1ibti_13",_n="_emptyStateBox_1ibti_28",An="_emptyStateBare_1ibti_44",Ln="_emptyStateIcon_1ibti_49",Bn="_taxonomyGrid_1ibti_55",Pn="_checkboxRow_1ibti_61",Dn="_checkboxLabel_1ibti_67",Mn="_checkboxSmall_1ibti_75",En="_flexGap8_1ibti_80",Gn="_optionOrderButtons_1ibti_85",Rn="_addTaxonomyBtnSmall_1ibti_92",E={categoryManagerContainer:Sn,pathInputGroupStretch:$n,emptyStateItalic:In,emptyStateBox:_n,emptyStateBare:An,emptyStateIcon:Ln,taxonomyGrid:Bn,checkboxRow:Pn,checkboxLabel:Dn,checkboxSmall:Mn,flexGap8:En,optionOrderButtons:Gn,addTaxonomyBtnSmall:Rn},Fn="_taxonomyDrillDown_1oekr_1",zn="_drillDownList_1oekr_7",On="_librarySection_1oekr_13",Hn="_libraryLauncher_1oekr_18",Wn="_libraryLauncherInfo_1oekr_40",Un="_libraryLauncherIcon_1oekr_47",Vn="_libraryLauncherText_1oekr_60",Kn="_libraryLauncherLabel_1oekr_67",qn="_libraryLauncherSubtext_1oekr_73",Xn="_libraryLauncherMeta_1oekr_79",Jn="_drillDownSection_1oekr_89",Yn="_drillDownSectionHeader_1oekr_95",Zn="_drillDownSectionTitle_1oekr_102",Qn="_drillDownItem_1oekr_111",ei="_drillDownItemAction_1oekr_126",si="_drillDownItemDimmed_1oekr_145",ti="_drillDownItemInfo_1oekr_153",ai="_drillDownItemText_1oekr_159",ni="_drillDownItemLabel_1oekr_165",ii="_drillDownItemSubtext_1oekr_170",li="_systemIcon_1oekr_175",oi="_chevron_1oekr_179",ri="_orderButtons_1oekr_184",ci="_createOverlay_1oekr_195",di="_createDialog_1oekr_209",pi="_createDialogTitle_1oekr_218",ui="_inputGroup_1oekr_224",mi="_dialogActions_1oekr_228",hi="_createSubmit_1oekr_234",xi="_createCancel_1oekr_238",gi="_taxonomyDetailView_1oekr_242",bi="_detailHeader_1oekr_249",yi="_taxonomyBreadcrumbs_1oekr_257",vi="_breadcrumbPrev_1oekr_263",fi="_breadcrumbIcon_1oekr_284",ji="_breadcrumbDivider_1oekr_288",ki="_breadcrumbActive_1oekr_293",Ni="_detailContent_1oekr_301",b={taxonomyDrillDown:Fn,drillDownList:zn,librarySection:On,libraryLauncher:Hn,libraryLauncherInfo:Wn,libraryLauncherIcon:Un,libraryLauncherText:Vn,libraryLauncherLabel:Kn,libraryLauncherSubtext:qn,libraryLauncherMeta:Xn,drillDownSection:Jn,drillDownSectionHeader:Yn,drillDownSectionTitle:Zn,drillDownItem:Qn,drillDownItemAction:ei,drillDownItemDimmed:si,drillDownItemInfo:ti,drillDownItemText:ai,drillDownItemLabel:ni,drillDownItemSubtext:ii,systemIcon:li,chevron:oi,orderButtons:ri,createOverlay:ci,createDialog:di,createDialogTitle:pi,inputGroup:ui,dialogActions:mi,createSubmit:hi,createCancel:xi,taxonomyDetailView:gi,detailHeader:bi,taxonomyBreadcrumbs:yi,breadcrumbPrev:vi,breadcrumbIcon:fi,breadcrumbDivider:ji,breadcrumbActive:ki,detailContent:Ni};function Ci(l){const r=[{id:"categories",label:l.displayLabels?.category||"Categories",kind:"system",summary:`${l.categories.length} configured`},{id:"types",label:l.displayLabels?.type||"Task Types",kind:"system",summary:`${l.types.length} active`},{id:"priorities",label:l.displayLabels?.priority||"Priority Levels",kind:"system",summary:`${l.priorities.length} levels`},{id:"complexities",label:"Complexity",kind:"attribute",summary:l.manualComplexityEnabled?"Enabled":"Disabled (default)"}],g=l.taxonomies.map(y=>({id:y.id,label:y.label,kind:"custom",summary:`${y.options.length} options${y.status==="retired"?" · Retired":""}`,taxonomy:y}));return[...r,...g]}function wi({taxonomy:l,onUpdateTaxonomy:r,onRemoveTaxonomy:g,onRestoreTaxonomy:y}){const[T,S]=i.useState(""),[C,_]=i.useState(!1),[L,G]=i.useState(""),[z,j]=i.useState(l.label),[I,B]=i.useState((l.aliases||[]).join(", ")),[H,P]=i.useState(""),[x,w]=i.useState(null),D=n=>{const c=n.split(",").map(A=>A.trim()).filter(Boolean);return c.length>0?Array.from(new Set(c)):void 0};i.useEffect(()=>{j(l.label),B((l.aliases||[]).join(", "));const n=l.options.find(c=>String(c.value)===String(T));w(n||null),P((n?.aliases||[]).join(", "))},[l,T]);const m=n=>{r({...l,...n})},R=()=>{if(!L.trim())return;const n=L.toLowerCase().trim().replace(/\s+/g,"-");if(l.options.some(A=>A.value===n)){alert("Option value already exists");return}const c={value:n,label:L.trim(),color:Fe[l.options.length%Fe.length],status:"active"};m({options:[...l.options,c]}),G(""),_(!1),S(n)},u=(n,c)=>{m({options:l.options.map(A=>String(A.value)===String(n)?{...A,...c}:A)})},W=n=>{u(n,{status:"retired"})},h=n=>{u(n,{status:"active"})},$=(n,c)=>{const A=l.options.findIndex(F=>String(F.value)===String(n));if(A<0)return;const v=A+c;if(v<0||v>=l.options.length)return;const O=[...l.options],[p]=O.splice(A,1);O.splice(v,0,p),m({options:O})};return e.jsxs("div",{className:E.categoryManagerContainer,children:[e.jsxs("div",{className:`${s.categoryConfigPanel} ${s.configPanel} ${s.marginBottom24}`,children:[e.jsxs("div",{className:`${s.flexBetween} ${s.marginBottom16}`,children:[e.jsx("div",{className:s.flex1,children:e.jsx("label",{className:`${s.subLabel} ${s.subLabelBlock} ${s.marginBottom8}`,children:"Taxonomy Settings"})}),!l.isSystem&&(l.status==="retired"?e.jsx("button",{type:"button",className:s.saveSettingsBtn,onClick:()=>y?.(l.id),children:"Restore Taxonomy"}):g&&e.jsxs("button",{type:"button",className:`${s.destructiveBtn} ${s.deleteBtnSmall}`,onClick:()=>{confirm(`Retire taxonomy "${l.label}"? Existing task data will be preserved as legacy values.`)&&g(l.id)},children:[e.jsx(ze,{size:14,className:s.trashIcon})," Retire Taxonomy"]}))]}),l.status==="retired"&&e.jsx("p",{className:s.settingsHint,style:{marginTop:"-4px",marginBottom:"16px"},children:"This taxonomy is retired. Existing tasks keep their values, but it is hidden from normal new-task entry unless a task already uses it."}),e.jsxs("div",{className:E.taxonomyGrid,children:[e.jsxs("div",{className:s.settingGroup,style:{margin:0},children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Display Label"}),e.jsx("input",{className:s.input,value:z,onChange:n=>j(n.target.value),onBlur:()=>m({label:z}),disabled:l.isSystem,placeholder:"e.g. Sprint, Phase..."})]}),e.jsxs("div",{className:s.settingGroup,style:{margin:0},children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Description"}),e.jsx("textarea",{className:s.textarea,value:l.description||"",onChange:n=>m({description:n.target.value}),placeholder:"Optional guidance for when and how to use this taxonomy...",rows:3,style:{minHeight:"88px"}})]}),e.jsxs("div",{className:s.settingGroup,style:{margin:0},children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Aliases"}),e.jsx("input",{className:s.input,value:I,onChange:n=>B(n.target.value),onBlur:()=>m({aliases:D(I)}),placeholder:"Optional aliases, comma-separated"})]}),e.jsxs("div",{className:s.settingGroup,style:{margin:0},children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Widget Type"}),e.jsxs("select",{className:s.select,value:l.widgetType,onChange:n=>{const c=n.target.value;m({widgetType:c,multiSelect:c==="level"?!1:l.multiSelect})},children:[e.jsx("option",{value:"select",children:"Dropdown (Select Box)"}),e.jsx("option",{value:"level",children:"Level Selector (Segmented)"})]})]})]}),e.jsxs("div",{className:E.checkboxRow,children:[e.jsxs("label",{className:E.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:l.isRequired,onChange:n=>m({isRequired:n.target.checked}),className:E.checkboxSmall}),"Mark as Required"]}),e.jsxs("label",{className:`${E.checkboxLabel} ${l.widgetType==="level"?s.opacity50:""}`,children:[e.jsx("input",{type:"checkbox",checked:l.multiSelect,onChange:n=>m({multiSelect:n.target.checked}),disabled:l.widgetType==="level",className:E.checkboxSmall}),"Allow Multi-select"]})]}),e.jsxs("div",{className:E.checkboxRow,children:[e.jsxs("label",{className:E.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:l.formEnabled!==!1,onChange:n=>m({formEnabled:n.target.checked}),className:E.checkboxSmall}),"Show in Task Form"]}),e.jsxs("label",{className:E.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:l.filterEnabled!==!1,onChange:n=>m({filterEnabled:n.target.checked}),className:E.checkboxSmall}),"Show in Filters"]}),e.jsxs("label",{className:E.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:l.sortEnabled===!0,onChange:n=>m({sortEnabled:n.target.checked}),className:E.checkboxSmall}),"Show in Sorts"]})]})]}),e.jsx("div",{className:`${s.configDivider} ${s.configDividerMargin24}`}),e.jsxs("div",{className:`${s.configPanel} ${s.flex1} ${s.flexCol}`,children:[e.jsxs("div",{className:`${s.headerFlex}`,style:{marginBottom:x&&!C||C?"16px":"0"},children:[e.jsx("div",{style:{flex:1},children:e.jsx(Cs,{value:T,options:[{value:"",label:"Select an option to configure...",icon:"HelpCircle",color:"var(--text-secondary)"},...l.options.map(n=>({value:n.value,label:n.status==="retired"?`${n.label} (Retired)`:n.label,icon:n.icon,color:n.color}))],onChange:n=>{S(n),_(!1)},disabled:C})}),C?e.jsx("button",{type:"button",onClick:()=>_(!1),title:"Cancel",className:`${s.browseBtn} ${s.cancelBtnRed}`,children:e.jsx(Ns,{size:18})}):e.jsx("button",{type:"button",className:s.browseBtn,onClick:()=>_(!0),title:"Add Option",children:e.jsx(Qe,{size:18})})]}),C&&e.jsx("div",{className:`${s.configItem} ${s.marginBottom16}`,children:e.jsxs("div",{className:E.flexGap8,children:[e.jsx("input",{type:"text",className:s.input,placeholder:"New option label...",value:L,onChange:n=>G(n.target.value),onKeyDown:n=>{n.key==="Enter"&&R()},autoFocus:!0}),e.jsx("button",{type:"button",className:s.saveSettingsBtn,onClick:R,disabled:!L.trim(),children:"Add Option"})]})}),x&&!C&&e.jsxs("div",{className:s.flex1,children:[e.jsx("div",{className:`${s.configDivider} ${s.marginBottom20}`}),e.jsxs("div",{className:`${s.flexBetweenCenter} ${s.marginBottom20}`,children:[e.jsxs("div",{className:`${s.flexColGap4} ${s.flex1}`,children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Option Label"}),e.jsxs("div",{className:s.gridConfig,children:[e.jsx("input",{className:s.input,value:x.label,onChange:n=>u(x.value,{label:n.target.value}),placeholder:"Option Label"}),x.status==="retired"?e.jsx("button",{type:"button",className:s.saveSettingsBtn,onClick:()=>h(x.value),title:"Restore Option",children:"Restore"}):e.jsxs("button",{type:"button",className:`${s.destructiveBtn} ${s.deleteBtnMedium}`,onClick:()=>W(x.value),title:"Retire Option",children:[e.jsx(ze,{size:14,className:s.trashIcon})," Retire"]})]})]}),e.jsxs("div",{className:E.optionOrderButtons,children:[e.jsx("button",{type:"button",className:s.browseBtn,title:"Move option up",onClick:()=>$(x.value,-1),disabled:l.options[0]?.value===x.value,children:e.jsx(ga,{size:16})}),e.jsx("button",{type:"button",className:s.browseBtn,title:"Move option down",onClick:()=>$(x.value,1),disabled:l.options[l.options.length-1]?.value===x.value,children:e.jsx(ba,{size:16})})]})]}),e.jsx("p",{className:s.settingsHint,style:{marginBottom:"20px"},children:"Retired options stay visible for existing tasks and filters, but they should not be used for new work."}),e.jsxs("div",{className:s.settingGroup,style:{marginBottom:"20px"},children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Aliases"}),e.jsx("input",{className:s.input,value:H,onChange:n=>P(n.target.value),onBlur:()=>u(x.value,{aliases:D(H)}),placeholder:"Optional aliases, comma-separated"})]}),e.jsx("div",{className:`${s.configDivider} ${s.configDividerMargin}`}),e.jsxs("div",{className:s.configSection,children:[e.jsx("label",{className:`${s.label} ${s.inputLabelBlock}`,children:"Visual Style"}),e.jsxs("div",{className:s.categorySubConfig,children:[e.jsx("div",{className:s.colorPickerGrid,children:Fe.map(n=>{const c=J(n)||"#000000",A=x.color===n,v=x.icon&&pt[x.icon]?pt[x.icon]:es;return e.jsx("button",{type:"button",className:`${s.colorSwatch} ${A?s.colorSwatchActive:""}`,style:{borderColor:A?c:void 0,"--swatch-color":c,"--swatch-border-color":`${c}80`},onClick:()=>u(x.value,{color:n}),title:n,children:e.jsx(v,{size:14,style:{color:c}})},n)})}),e.jsx("div",{className:s.iconGrid,children:ws.map(n=>{const c=pt[n]||ne[n]||es;return e.jsx("button",{type:"button",className:`${s.iconPickerBtn} ${x.icon===n?s.iconPickerBtnActive:""}`,style:x.icon===n?{borderColor:J(x.color),color:J(x.color),background:`${J(x.color)}15`}:{},onClick:()=>u(x.value,{icon:n}),title:n,children:e.jsx(c,{size:16})},n)})})]})]})]}),!x&&!C&&e.jsxs("div",{className:`${E.emptyStateBox} ${E.emptyStateBare}`,children:[e.jsx(rn,{size:24,className:E.emptyStateIcon}),"Select an option above to configure its appearance"]})]})]})}function Ti(l){const{displayLabel:r,categories:g,pathValidation:y,onUpdateDisplayLabel:T,onUpdateCategory:S,onRemoveCategory:C,onSaveCategory:_,onAddPath:L,onRemovePath:G,onUpdateCategoryIcon:z,onUpdateCategoryColor:j,onBrowseFolders:I}=l,[B,H]=i.useState(""),[P,x]=i.useState(!1),[w,D]=i.useState(""),[m,R]=i.useState(""),[u,W]=i.useState(r||""),[h,$]=i.useState("");i.useEffect(()=>{W(r||"")},[r]),i.useEffect(()=>{const p=g.find(F=>F.value===B);p&&R(p.label)},[B,g]);const n=()=>{if(!w.trim())return;_(w);const p=w.trim().toLowerCase().replace(/\s+/g,"-");D(""),x(!1),setTimeout(()=>H(p),100)},c=p=>{m&&m!==p.label&&S({...p,label:m},p.label)},A=p=>{const F=[];if(p.path&&F.push(p.path),p.paths&&p.paths.length>0)for(const K of p.paths)F.includes(K)||F.push(K);return F},v=g.find(p=>p.value===B),O=v?.value===nn;return e.jsxs("div",{className:`${s.configPanel} ${s.flex1}`,children:[e.jsxs("div",{className:`${s.headerFlex}`,style:{marginBottom:v&&!P||P?"20px":"0"},children:[e.jsxs("div",{style:{flex:1},children:[e.jsx("label",{id:"category-config-label",className:s.label,style:{display:"none"},children:"Select Category"}),e.jsx(Cs,{value:B,options:[{value:"",label:"Select a category to configure...",icon:"HelpCircle",color:"var(--text-secondary)"},...g.map(p=>({value:p.value,label:`${p.label}${p.disabled?" (Legacy)":""}`,icon:p.icon,color:p.color}))],onChange:p=>{H(String(p)),x(!1)},disabled:P,ariaLabelledBy:"category-config-label"})]}),P?e.jsx("button",{type:"button",className:`${s.browseBtn} ${s.cancelBtnRed}`,onClick:()=>x(!1),title:"Cancel creation",children:e.jsx(Ns,{size:18})}):e.jsx("button",{type:"button",className:s.browseBtn,onClick:()=>x(!0),title:"Create new category",children:e.jsx(Qe,{size:18})})]}),P&&e.jsxs("div",{className:`${s.configItem} ${s.marginBottom16}`,children:[e.jsx("div",{className:`${s.labelRow} ${s.marginBottom8}`,children:e.jsx("label",{className:s.settingsLabel,children:"New Category Name"})}),e.jsxs("div",{style:{display:"flex",gap:"8px"},children:[e.jsx("input",{type:"text",className:s.input,placeholder:"e.g. Backend, Frontend, API...",value:w,onChange:p=>D(p.target.value),onKeyDown:p=>{p.key==="Enter"&&n()},autoFocus:!0}),e.jsx("button",{type:"button",className:s.saveSettingsBtn,onClick:n,disabled:!w.trim(),children:"Create"})]})]}),v&&!P&&e.jsxs("div",{className:s.flex1,style:{overflowY:"auto",marginRight:"-8px",paddingRight:"8px"},children:[e.jsx("div",{className:`${s.configDivider} ${s.marginBottom20}`}),e.jsxs("div",{className:`${s.configSection} ${s.marginBottom20}`,children:[e.jsxs("div",{className:s.flexBetween,children:[e.jsx("label",{className:`${s.subLabel} ${s.subLabelBlock}`,children:"General"}),!O&&e.jsxs("button",{type:"button",onClick:()=>{confirm(`Retire category "${v.label}"? Existing tasks will be reassigned to ${la}.`)&&(C(v.value),H(""))},title:"Retire Category",className:`${s.destructiveBtn} ${s.deleteBtnSmall}`,children:[e.jsx(ze,{size:14,className:s.trashIcon})," Retire"]})]}),O&&e.jsxs("p",{className:s.settingsHint,style:{marginBottom:"12px"},children:[la," is the protected fallback category and cannot be retired."]}),e.jsxs("div",{className:s.gridConfig,children:[e.jsxs("div",{className:s.flexColGap4,children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Display Label"}),e.jsx("input",{className:s.input,value:u,onChange:p=>W(p.target.value),onBlur:()=>T?.(u.trim())})]}),e.jsxs("div",{className:s.flexColGap4,children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Label"}),e.jsx("input",{className:s.input,value:m,onChange:p=>R(p.target.value),onBlur:()=>c(v),onKeyDown:p=>{p.key==="Enter"&&(c(v),p.target.blur())}})]}),e.jsxs("div",{className:s.flexColGap4Center,children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Available for New Tasks"}),e.jsx("input",{type:"checkbox",checked:!v.disabled,onChange:()=>S({...v,disabled:!v.disabled}),className:s.checkboxInput})]})]}),e.jsx("p",{className:s.settingsHint,style:{marginTop:"12px"},children:"Turn this off to keep the category on existing tasks while removing it from new task selection by default."})]}),e.jsx("div",{className:`${s.configDivider} ${s.configDividerMargin}`}),e.jsxs("div",{className:`${s.configSection} ${s.marginBottom20}`,children:[e.jsx("label",{className:s.subLabel,style:{fontSize:"14px",fontWeight:600,display:"block",marginBottom:"8px"},children:"Context Paths"}),e.jsx("p",{className:s.settingsHint,style:{marginBottom:"12px"},children:"Files in these paths will be included as context for tasks in this category."}),A(v).length>0&&e.jsx("div",{className:`${s.pathList} ${s.pathListMargin}`,children:A(v).map((p,F)=>{const K=y[p],ie=K?.exists,Oe=K?.isFile;return e.jsxs("div",{className:`${s.pathChip} ${ie===!1?s.pathInvalid:ie?s.pathValid:""}`,children:[ie===void 0?e.jsx(Te,{size:12,className:s.spinner}):ie?Oe?e.jsx(ya,{size:12,className:s.pathValidIcon}):e.jsx(ra,{size:12,className:s.pathValidIcon}):e.jsx(xe,{size:12,className:s.pathInvalidIcon}),e.jsx("span",{className:s.pathText,title:p,children:p}),e.jsx("button",{type:"button",className:s.removePathBtn,onClick:()=>G(v.value,p),title:"Remove path",children:e.jsx(Ns,{size:10})})]},F)})}),e.jsxs("div",{className:`${s.pathInputGroup} ${E.pathInputGroupStretch}`,children:[e.jsx("input",{type:"text",className:s.input,value:h,onChange:p=>$(p.target.value),onKeyDown:p=>{p.key==="Enter"&&(p.preventDefault(),h.trim()&&(L(v.value,h.trim()),$("")))},placeholder:"Add path (e.g. frontend/src/...)"}),e.jsx("button",{type:"button",className:s.browseBtn,onClick:()=>{h.trim()&&(L(v.value,h.trim()),$(""))},disabled:!h.trim(),title:"Add path",children:e.jsx(Qe,{size:18})}),e.jsx("button",{type:"button",className:s.browseBtn,onClick:()=>I(v.value),title:"Browse folders",children:e.jsx(ra,{size:16})})]})]}),e.jsx("div",{className:`${s.configDivider} ${s.configDividerMargin}`}),e.jsxs("div",{className:s.configSection,children:[e.jsx("label",{className:`${s.subLabel} ${s.subLabelBlock} ${s.subLabelBlock12}`,children:"Visual Style"}),e.jsxs("div",{className:s.categorySubConfig,children:[e.jsx("div",{className:s.colorPickerGrid,children:Fe.map(p=>{const F=J(p)||"#000000",K=v.color===p,ie=v.icon&&ne[v.icon]?ne[v.icon]:cn;return e.jsx("button",{type:"button",className:`${s.colorSwatch} ${K?s.colorSwatchActive:""}`,style:{borderColor:K?F:void 0,"--swatch-color":F,"--swatch-border-color":`${F}80`},onClick:()=>j(v.value,p),title:p,children:e.jsx(ie,{size:14,style:{color:F}})},p)})}),e.jsx("div",{className:s.iconGrid,children:ws.map(p=>{const F=ne[p];return e.jsx("button",{type:"button",className:`${s.iconPickerBtn} ${v.icon===p?s.iconPickerBtnActive:""}`,style:v.icon===p?{borderColor:J(v.color),color:J(v.color),background:`${J(v.color)}15`}:{},onClick:()=>z(v.value,p),title:p,children:e.jsx(F,{size:16})},p)})})]})]})]}),!v&&!P&&e.jsx("div",{className:`${E.emptyStateItalic} ${E.emptyStateBare}`,children:"Select a category above to configure settings"})]})}function Si(l){const{types:r,onSaveType:g,onRemoveType:y,onUpdateType:T,displayLabel:S,onUpdateDisplayLabel:C}=l,[_,L]=i.useState(""),[G,z]=i.useState(!1),[j,I]=i.useState(""),[B,H]=i.useState(""),[P,x]=i.useState(S||"");i.useEffect(()=>{const u=r.find(W=>W.value===_);u&&H(u.label)},[_,r]),i.useEffect(()=>{x(S||"")},[S]);const w=r.find(u=>u.value===_),D=w?.value===ln,m=w?.status==="retired",R=()=>{if(!j.trim())return;g(j);const u=j.trim().toLowerCase().replace(/\s+/g,"-");I(""),z(!1),setTimeout(()=>L(u),100)};return e.jsxs("div",{className:`${s.configPanel} ${s.flex1}`,children:[e.jsxs("div",{className:`${s.headerFlex}`,style:{marginBottom:w&&!G||G?"20px":"0"},children:[e.jsxs("div",{style:{flex:1},children:[e.jsx("label",{id:"type-config-label",className:s.label,style:{display:"none"},children:"Select Type"}),e.jsx(Cs,{value:_,options:[{value:"",label:"Select a type to configure...",icon:"HelpCircle",color:"var(--text-secondary)"},...r.map(u=>({value:u.value,label:u.status==="retired"?`${u.label} (Retired)`:u.label,icon:u.icon||"Box",color:u.color||"violet-500"}))],onChange:u=>{L(String(u)),z(!1)},disabled:G,ariaLabelledBy:"type-config-label"})]}),G?e.jsx("button",{type:"button",className:`${s.browseBtn} ${s.cancelBtnRed}`,onClick:()=>z(!1),title:"Cancel creation",children:e.jsx(Ns,{size:18})}):e.jsx("button",{type:"button",className:s.browseBtn,onClick:()=>z(!0),title:"Create new type",children:e.jsx(Qe,{size:18})})]}),G&&e.jsxs("div",{className:`${s.configItem} ${s.marginBottom16}`,children:[e.jsx("div",{className:`${s.labelRow} ${s.marginBottom8}`,children:e.jsx("label",{className:s.settingsLabel,children:"New Type Label"})}),e.jsxs("div",{style:{display:"flex",gap:"8px"},children:[e.jsx("input",{type:"text",className:s.input,placeholder:"e.g. Bug, Feature, Chore...",value:j,onChange:u=>I(u.target.value),onKeyDown:u=>{u.key==="Enter"&&R()},autoFocus:!0}),e.jsx("button",{type:"button",className:s.saveSettingsBtn,onClick:R,disabled:!j.trim(),children:"Create"})]})]}),w&&!G&&e.jsxs("div",{className:s.flex1,children:[e.jsx("div",{className:`${s.configDivider} ${s.marginBottom20}`}),e.jsx("div",{className:s.flexBetweenCenter,children:e.jsxs("div",{className:`${s.flexColGap4} ${s.flex1}`,children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Display Label"}),e.jsx("input",{className:s.input,value:P,onChange:u=>x(u.target.value),onBlur:()=>C?.(P.trim())}),e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Label"}),e.jsxs("div",{className:s.gridConfig,children:[e.jsx("input",{className:s.input,value:B,onChange:u=>H(u.target.value),onBlur:()=>T(w.value,{label:B}),onKeyDown:u=>{u.key==="Enter"&&u.currentTarget.blur()}}),!D&&e.jsxs("button",{type:"button",onClick:()=>{if(m){T(w.value,{status:"active"});return}confirm(`Retire type "${w.label}"? Existing tasks using it will keep it as a legacy type until reassigned.`)&&y(w.value)},title:m?"Restore Type":"Retire Type",className:`${s.destructiveBtn} ${s.deleteBtnMedium}`,children:[e.jsx(ze,{size:14,className:s.trashIcon})," ",m?"Restore":"Retire"]})]})]})}),e.jsx("p",{className:`${s.settingsHint} ${s.marginTop12}`,children:D?"Task is the protected fallback type and cannot be retired.":m?"Retired types stay available as legacy values on existing tasks until you reassign them.":"Retiring a type removes it from new task selection while preserving it as a legacy value on tasks that already use it."}),e.jsx("div",{className:`${s.configDivider} ${s.configDividerMargin}`}),e.jsxs("div",{className:s.configSection,children:[e.jsx("label",{className:`${s.subLabel} ${s.subLabelBlock} ${s.subLabelBlock12}`,children:"Visual Style"}),e.jsxs("div",{className:s.categorySubConfig,children:[e.jsx("div",{className:s.colorPickerGrid,children:Fe.map(u=>{const W=J(u)||"#000000",h=w.color===u,$=w.icon&&ne[w.icon]?ne[w.icon]:es;return e.jsx("button",{type:"button",className:`${s.colorSwatch} ${h?s.colorSwatchActive:""}`,style:{borderColor:h?W:void 0,"--swatch-color":W,"--swatch-border-color":`${W}80`},onClick:()=>T(w.value,{color:u}),title:u,children:e.jsx($,{size:14,style:{color:W}})},u)})}),e.jsx("div",{className:s.iconGrid,children:ws.map(u=>{const W=ne[u];return e.jsx("button",{type:"button",className:`${s.iconPickerBtn} ${w.icon===u?s.iconPickerBtnActive:""}`,style:w.icon===u?{borderColor:J(w.color),color:J(w.color),background:`${J(w.color)}15`}:{},onClick:()=>T(w.value,{icon:u}),title:u,children:e.jsx(W,{size:16})},u)})})]})]})]}),!w&&!G&&e.jsx("div",{className:`${E.emptyStateItalic} ${E.emptyStateBare}`,children:"Select a type above to manage"})]})}function $i({priorities:l,onUpdatePriorities:r,displayLabel:g,onUpdateDisplayLabel:y}){const[T,S]=i.useState(""),[C,_]=i.useState(null),[L,G]=i.useState(g||"");i.useEffect(()=>{const j=l.find(I=>String(I.value)===String(T))||null;_(j)},[l,T]),i.useEffect(()=>{G(g||"")},[g]);const z=(j,I)=>{r(l.map(B=>String(B.value)===String(j)?{...B,...I}:B))};return e.jsxs("div",{className:`${s.configPanel} ${s.flex1}`,children:[e.jsxs("div",{className:s.marginBottom20,children:[e.jsx("label",{id:"priority-config-label",className:s.label,style:{display:"none"},children:"Select Priority"}),e.jsx(Cs,{value:T,options:[{value:"",label:"Select a priority level to configure...",icon:"HelpCircle",color:"var(--text-secondary)"},...l.map(j=>({value:j.value,label:j.label,icon:j.icon||"Gauge",color:j.color||"blue-500"}))],onChange:j=>S(j),ariaLabelledBy:"priority-config-label"})]}),C?e.jsxs("div",{className:s.flex1,style:{overflowY:"auto",marginRight:"-8px",paddingRight:"8px"},children:[e.jsx("div",{className:`${s.configDivider} ${s.marginBottom20}`}),e.jsxs("div",{className:`${s.configSection} ${s.marginBottom20}`,children:[e.jsx("label",{className:`${s.subLabel} ${s.subLabelBlock}`,children:"General"}),e.jsx("p",{className:s.settingsHint,style:{marginBottom:"12px"},children:"Priority uses a fixed ordered scale. You can rename and restyle levels, but not add, remove, or reorder them here."}),e.jsxs("div",{className:s.gridConfig,children:[e.jsxs("div",{className:s.flexColGap4,children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Display Label"}),e.jsx("input",{className:s.input,value:L,onChange:j=>G(j.target.value),onBlur:()=>y?.(L.trim())})]}),e.jsxs("div",{className:s.flexColGap4,children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Label"}),e.jsx("input",{className:s.input,value:C.label,onChange:j=>z(C.value,{label:j.target.value})})]})]})]}),e.jsx("div",{className:`${s.configDivider} ${s.configDividerMargin}`}),e.jsxs("div",{className:s.configSection,children:[e.jsx("label",{className:`${s.subLabel} ${s.subLabelBlock} ${s.subLabelBlock12}`,children:"Visual Style"}),e.jsxs("div",{className:s.categorySubConfig,children:[e.jsx("div",{className:s.colorPickerGrid,children:Fe.map(j=>{const I=J(j)||"#000000",B=C.color===j,H=C.icon&&ne[C.icon]?ne[C.icon]:ca;return e.jsx("button",{type:"button",className:`${s.colorSwatch} ${B?s.colorSwatchActive:""}`,style:{borderColor:B?I:void 0,"--swatch-color":I,"--swatch-border-color":`${I}80`},onClick:()=>z(C.value,{color:j}),title:j,children:e.jsx(H,{size:14,style:{color:I}})},j)})}),e.jsx("div",{className:s.iconGrid,children:ws.map(j=>{const I=ne[j]||ca;return e.jsx("button",{type:"button",className:`${s.iconPickerBtn} ${C.icon===j?s.iconPickerBtnActive:""}`,style:C.icon===j?{borderColor:J(C.color),color:J(C.color),background:`${J(C.color)}15`}:{},onClick:()=>z(C.value,{icon:j}),title:j,children:e.jsx(I,{size:16})},j)})})]})]})]}):e.jsx("div",{className:`${E.emptyStateItalic} ${E.emptyStateBare}`,children:"Select a priority above to manage"})]})}function Ii(l){return l.map(r=>({...r,aliases:Array.isArray(r.aliases)?[...r.aliases]:void 0}))}function _i(l){return l.map(r=>({...r,aliases:Array.isArray(r.aliases)?[...r.aliases]:void 0,options:Ii(Array.isArray(r.options)?r.options:[])}))}const Ai=[{id:"client-delivery",label:"Client Delivery",description:"Taxonomies for client-facing work, approvals, and service commitments.",domainTag:"operations",bestFor:"Agencies, consulting, and service delivery work.",taxonomies:[{id:"approval-stage",label:"Approval Stage",description:"Track where work sits in the client or internal approval pipeline.",widgetType:"select",isSystem:!1,multiSelect:!1,isRequired:!1,formEnabled:!0,filterEnabled:!0,sortEnabled:!0,status:"active",options:[{value:"draft",label:"Draft",color:"blue-200",icon:"Pencil",status:"active"},{value:"internal-review",label:"Internal Review",color:"blue-500",icon:"Users",status:"active"},{value:"client-review",label:"Client Review",color:"amber-500",icon:"MessageSquare",status:"active"},{value:"approved",label:"Approved",color:"emerald-500",icon:"CheckCircle",status:"active"}]},{id:"service-line",label:"Service Line",description:"Identify which delivery lane owns or contributes to this work.",widgetType:"select",isSystem:!1,multiSelect:!0,isRequired:!1,formEnabled:!0,filterEnabled:!0,sortEnabled:!1,status:"active",options:[{value:"strategy",label:"Strategy",color:"violet-500",icon:"Target",status:"active"},{value:"content",label:"Content",color:"sky-500",icon:"Pencil",status:"active"},{value:"delivery",label:"Delivery",color:"emerald-500",icon:"Briefcase",status:"active"},{value:"reporting",label:"Reporting",color:"amber-500",icon:"Activity",status:"active"}]}]},{id:"content-operations",label:"Content Operations",description:"Reusable taxonomies for channels, publishing readiness, and editorial planning.",domainTag:"content",bestFor:"Editorial calendars, content teams, and publishing operations.",taxonomies:[{id:"content-channel",label:"Content Channel",description:"Show where a piece of work will be published or reused.",widgetType:"select",isSystem:!1,multiSelect:!0,isRequired:!1,formEnabled:!0,filterEnabled:!0,sortEnabled:!1,status:"active",options:[{value:"blog",label:"Blog",color:"blue-500",icon:"FileText",status:"active"},{value:"email",label:"Email",color:"amber-500",icon:"Mail",status:"active"},{value:"social",label:"Social",color:"violet-500",icon:"Flag",status:"active"},{value:"webinar",label:"Webinar",color:"violet-500",icon:"Video",status:"active"}]},{id:"publish-readiness",label:"Publish Readiness",description:"Track whether a content task is ready to move into scheduling or release.",widgetType:"select",isSystem:!1,multiSelect:!1,isRequired:!0,formEnabled:!0,filterEnabled:!0,sortEnabled:!0,status:"active",options:[{value:"not-started",label:"Not Started",color:"blue-200",icon:"Circle",status:"active"},{value:"in-review",label:"In Review",color:"amber-500",icon:"Search",status:"active"},{value:"ready",label:"Ready",color:"emerald-500",icon:"Rocket",status:"active"}]},{id:"effort-band",label:"Effort Band",description:"A lightweight numeric scale for content effort without using complexity.",widgetType:"level",isSystem:!1,multiSelect:!1,isRequired:!1,formEnabled:!1,filterEnabled:!0,sortEnabled:!0,status:"active",options:[{value:1,label:"Light",color:"teal-500",icon:"Wind",status:"active"},{value:2,label:"Standard",color:"blue-500",icon:"Minus",status:"active"},{value:3,label:"Heavy",color:"orange-500",icon:"Gauge",status:"active"}]}]},{id:"product-delivery",label:"Product Delivery",description:"Useful planning taxonomies for delivery stages, stakeholders, and delivery risk.",domainTag:"product",bestFor:"Product teams, implementation work, and cross-functional delivery.",taxonomies:[{id:"delivery-stage",label:"Delivery Stage",description:"Track how work moves from intake through active delivery.",widgetType:"select",isSystem:!1,multiSelect:!1,isRequired:!0,formEnabled:!0,filterEnabled:!0,sortEnabled:!0,status:"active",options:[{value:"backlog",label:"Backlog",color:"blue-200",icon:"Inbox",status:"active"},{value:"scoping",label:"Scoping",color:"sky-500",icon:"Search",status:"active"},{value:"ready",label:"Ready",color:"blue-500",icon:"Check",status:"active"},{value:"in-flight",label:"In Flight",color:"indigo-500",icon:"Play",status:"active"},{value:"blocked",label:"Blocked",color:"amber-500",icon:"Pause",status:"active"},{value:"done",label:"Done",color:"green-500",icon:"CheckCircle",status:"active"}]},{id:"stakeholder",label:"Stakeholder",description:"Show which audience or stakeholder group is most relevant to the work.",widgetType:"select",isSystem:!1,multiSelect:!0,isRequired:!1,formEnabled:!0,filterEnabled:!0,sortEnabled:!1,status:"active",options:[{value:"internal",label:"Internal",color:"blue-500",icon:"Users",status:"active"},{value:"client",label:"Client",color:"amber-500",icon:"Briefcase",status:"active"},{value:"leadership",label:"Leadership",color:"violet-500",icon:"Flag",status:"active"},{value:"partner",label:"Partner",color:"teal-500",icon:"Globe",status:"active"}]},{id:"risk-level",label:"Risk Level",description:"A simple signal for delivery or coordination risk.",widgetType:"level",isSystem:!1,multiSelect:!1,isRequired:!1,formEnabled:!1,filterEnabled:!0,sortEnabled:!0,status:"active",options:[{value:1,label:"Low",color:"teal-500",icon:"Wind",status:"active"},{value:2,label:"Medium",color:"amber-500",icon:"Gauge",status:"active"},{value:3,label:"High",color:"red-500",icon:"TriangleAlert",status:"active"}]}]},{id:"content-production",label:"Content Production",description:"Production-oriented taxonomies for content stages, channels, and asset effort.",domainTag:"marketing",bestFor:"Marketing teams, campaigns, and multi-channel asset production.",taxonomies:[{id:"content-stage",label:"Content Stage",description:"Track where a content asset sits in the production lifecycle.",widgetType:"select",isSystem:!1,multiSelect:!1,isRequired:!0,formEnabled:!0,filterEnabled:!0,sortEnabled:!0,status:"active",options:[{value:"outline",label:"Outline",color:"blue-200",icon:"Pencil",status:"active"},{value:"draft",label:"Draft",color:"blue-500",icon:"FileText",status:"active"},{value:"review",label:"Review",color:"amber-500",icon:"Search",status:"active"},{value:"approved",label:"Approved",color:"green-500",icon:"CheckCircle",status:"active"},{value:"published",label:"Published",color:"violet-500",icon:"Rocket",status:"active"}]},{id:"distribution-channel",label:"Distribution Channel",description:"Capture where the asset will be published or promoted.",widgetType:"select",isSystem:!1,multiSelect:!0,isRequired:!1,formEnabled:!0,filterEnabled:!0,sortEnabled:!1,status:"active",options:[{value:"blog",label:"Blog",color:"blue-500",icon:"FileText",status:"active"},{value:"email",label:"Email",color:"amber-500",icon:"Mail",status:"active"},{value:"video",label:"Video",color:"violet-500",icon:"Video",status:"active"},{value:"social",label:"Social",color:"indigo-500",icon:"Flag",status:"active"},{value:"docs",label:"Docs",color:"sky-500",icon:"Book",status:"active"}]},{id:"asset-effort",label:"Asset Effort",description:"Estimate the relative production effort for a content asset.",widgetType:"level",isSystem:!1,multiSelect:!1,isRequired:!1,formEnabled:!1,filterEnabled:!0,sortEnabled:!0,status:"active",options:[{value:1,label:"Quick",color:"teal-500",icon:"Wind",status:"active"},{value:2,label:"Standard",color:"blue-500",icon:"Minus",status:"active"},{value:3,label:"Campaign",color:"orange-500",icon:"Rocket",status:"active"}]}]}];function Li(){return Ai.map(l=>({...l,taxonomies:_i(l.taxonomies)}))}const Bi="_libraryContainer_1dwmv_1",Pi="_introCard_1dwmv_7",Di="_eyebrow_1dwmv_17",Mi="_introTitle_1dwmv_28",Ei="_introCopy_1dwmv_35",Gi="_prototypeNotice_1dwmv_43",Ri="_libraryGrid_1dwmv_49",Fi="_packList_1dwmv_56",zi="_packCard_1dwmv_62",Oi="_packCardActive_1dwmv_73",Hi="_packHeader_1dwmv_79",Wi="_packHeaderText_1dwmv_86",Ui="_packTitleRow_1dwmv_93",Vi="_packTitle_1dwmv_93",Ki="_packBadge_1dwmv_107",qi="_packDescription_1dwmv_122",Xi="_packBestFor_1dwmv_129",Ji="_packCounts_1dwmv_136",Yi="_packTaxonomyPreview_1dwmv_142",Zi="_packTaxonomyChip_1dwmv_148",Qi="_packTaxonomyMore_1dwmv_160",el="_packCountChip_1dwmv_170",sl="_packActions_1dwmv_183",tl="_previewPanel_1dwmv_189",al="_previewHeader_1dwmv_201",nl="_previewSummaryRow_1dwmv_207",il="_previewTitle_1dwmv_213",ll="_previewBestFor_1dwmv_220",ol="_previewSubtext_1dwmv_227",rl="_previewSection_1dwmv_233",cl="_previewSectionTitle_1dwmv_239",dl="_previewList_1dwmv_248",pl="_previewItem_1dwmv_254",ul="_previewItemLabel_1dwmv_265",ml="_previewItemMeta_1dwmv_275",hl="_customTaxonomyCard_1dwmv_281",xl="_customTaxonomyHeader_1dwmv_291",gl="_customTaxonomyDescription_1dwmv_298",bl="_customTaxonomyBadges_1dwmv_305",yl="_customTaxonomyBadge_1dwmv_305",vl="_applyPanel_1dwmv_324",fl="_applyTitle_1dwmv_334",jl="_applyCopy_1dwmv_341",kl="_analysisPanel_1dwmv_348",Nl="_analysisCopy_1dwmv_358",Cl="_analysisWarning_1dwmv_365",wl="_checkboxList_1dwmv_372",Tl="_checkboxLabel_1dwmv_378",Sl="_prototypeResult_1dwmv_386",$l="_prototypeError_1dwmv_392",o={libraryContainer:Bi,introCard:Pi,eyebrow:Di,introTitle:Mi,introCopy:Ei,prototypeNotice:Gi,libraryGrid:Ri,packList:Fi,packCard:zi,packCardActive:Oi,packHeader:Hi,packHeaderText:Wi,packTitleRow:Ui,packTitle:Vi,packBadge:Ki,packDescription:qi,packBestFor:Xi,packCounts:Ji,packTaxonomyPreview:Yi,packTaxonomyChip:Zi,packTaxonomyMore:Qi,packCountChip:el,packActions:sl,previewPanel:tl,previewHeader:al,previewSummaryRow:nl,previewTitle:il,previewBestFor:ll,previewSubtext:ol,previewSection:rl,previewSectionTitle:cl,previewList:dl,previewItem:pl,previewItemLabel:ul,previewItemMeta:ml,customTaxonomyCard:hl,customTaxonomyHeader:xl,customTaxonomyDescription:gl,customTaxonomyBadges:bl,customTaxonomyBadge:yl,applyPanel:vl,applyTitle:fl,applyCopy:jl,analysisPanel:kl,analysisCopy:Nl,analysisWarning:Cl,checkboxList:wl,checkboxLabel:Tl,prototypeResult:Sl,prototypeError:$l};function Il(l,r="Layers"){const g=ne[l||r]||ne[r];return e.jsx(g,{size:15})}function ua(l){return{categories:l.categories.length>0,types:l.types.length>0,priorities:l.priorities.length>0}}function ks(l){const{title:r,items:g}=l;return e.jsxs("section",{className:o.previewSection,children:[e.jsx("h4",{className:o.previewSectionTitle,children:r}),e.jsx("div",{className:o.previewList,children:g.map(y=>e.jsxs("div",{className:o.previewItem,children:[e.jsxs("span",{className:o.previewItemLabel,children:[e.jsx("span",{style:{color:y.color?`var(--color-${y.color}, var(--text-secondary))`:"var(--text-secondary)"},children:Il(y.icon)}),e.jsx("span",{children:y.label})]}),y.meta?e.jsx("span",{className:o.previewItemMeta,children:y.meta}):null]},y.key))})]})}function ma(l){let r=0,g=0,y=0,T=0;return l.taxonomies.forEach(S=>{S.multiSelect&&(r+=1),S.widgetType==="level"&&(g+=1),S.isRequired&&(y+=1),S.formEnabled!==!1&&(T+=1)}),{multiSelectCount:r,numericCount:g,requiredCount:y,formEnabledCount:T}}function _l(l){const r=[];return r.push(l.widgetType==="level"?"Numeric":"Descriptive"),l.multiSelect&&r.push("Multi-select"),l.isRequired&&r.push("Required"),l.formEnabled!==!1&&r.push("Shows in forms"),l.filterEnabled&&r.push("Filterable"),l.sortEnabled&&r.push("Sortable"),r}function Al(l){return{...l,aliases:Array.isArray(l.aliases)?[...l.aliases]:void 0,options:Array.isArray(l.options)?l.options.map(r=>({...r,aliases:Array.isArray(r.aliases)?[...r.aliases]:void 0})):[]}}function Ll(l){const{onAnalyzeSystemTaxonomyPack:r,onApplySystemTaxonomyPack:g}=l,y=i.useMemo(()=>xa(),[]),[T,S]=i.useState(y),[C,_]=i.useState(y[0]?.id||""),[L,G]=i.useState(()=>y[0]?ua(y[0]):{categories:!0,types:!0,priorities:!0}),[z,j]=i.useState(!1),[I,B]=i.useState(null),[H,P]=i.useState(!1),[x,w]=i.useState(!1),D=T.find(h=>h.id===C)||T[0]||null,m=i.useMemo(()=>!D||!r?null:r(D),[r,D]);i.useEffect(()=>{let h=!1;return P(!0),fetch("/api/taskforce/taxonomy-library").then(async $=>{if(!$.ok)return null;const n=await $.json().catch(()=>({})),c=Array.isArray(n?.packs)?n.packs:[];return!h&&c.length>0&&(S(c),_(A=>c.some(v=>v.id===A)?A:c[0].id)),null}).catch(()=>null).finally(()=>{h||P(!1)}),()=>{h=!0}},[]);const R=h=>{const $=T.find(n=>n.id===h);_(h),G($?ua($):{categories:!0,types:!0,priorities:!0}),j(!1),B(null)},u=h=>{G($=>({...$,[h]:!$[h]}))},W=()=>{if(!D)return;if(Object.entries(L).filter(([,$])=>$).map(([$])=>$).length===0){B({type:"error",message:"Select at least one taxonomy section to apply."});return}if(!g){B({type:"error",message:"System taxonomy pack apply is not available in this surface yet."});return}w(!0),B(null),g({pack:D,sections:L,remapExistingValuesToDefault:z}).then($=>{if($?.success){B({type:"success",message:`${D.label} was applied to the selected taxonomy sections.`});return}B({type:"error",message:$?.error||"Failed to apply the selected taxonomy pack."})}).catch($=>{B({type:"error",message:$ instanceof Error?$.message:"Failed to apply the selected taxonomy pack."})}).finally(()=>{w(!1)})};return D?e.jsxs("div",{className:o.libraryContainer,children:[e.jsxs("section",{className:o.introCard,children:[e.jsxs("span",{className:o.eyebrow,children:[e.jsx(ht,{size:14}),"System Taxonomy Library"]}),e.jsx("h3",{className:o.introTitle,children:"Browse starter packs before you replace anything."}),e.jsx("p",{className:o.introCopy,children:"Library packs give you coordinated categories, task types, and priority scales. Apply replaces only the sections you choose."}),H?e.jsx("p",{className:o.prototypeNotice,children:"Loading available packs…"}):null]}),e.jsxs("div",{className:o.libraryGrid,children:[e.jsx("div",{className:o.packList,children:T.map(h=>{const $=h.id===C;return e.jsxs("article",{className:`${o.packCard} ${$?o.packCardActive:""}`,children:[e.jsx("div",{className:o.packHeader,children:e.jsxs("div",{className:o.packHeaderText,children:[e.jsx("div",{className:o.packTitleRow,children:e.jsx("h4",{className:o.packTitle,children:h.label})}),e.jsx("p",{className:o.packDescription,children:h.description})]})}),e.jsxs("div",{className:o.packCounts,children:[e.jsxs("span",{className:o.packCountChip,children:[e.jsx(va,{size:13}),h.categories.length," categories"]}),e.jsxs("span",{className:o.packCountChip,children:[e.jsx(dn,{size:13}),h.types.length," types"]}),e.jsxs("span",{className:o.packCountChip,children:[e.jsx(ge,{size:13}),h.priorities.length," priority levels"]})]}),e.jsxs("div",{className:o.packActions,children:[e.jsx("button",{type:"button",className:s.cancelBtn,onClick:()=>R(h.id),children:$?"Previewing":"Preview"}),e.jsx("button",{type:"button",className:s.submitBtn,onClick:()=>R(h.id),children:"Apply"})]})]},h.id)})}),e.jsxs("aside",{className:o.previewPanel,children:[e.jsxs("div",{className:o.previewHeader,children:[e.jsx("h3",{className:o.previewTitle,children:D.label}),e.jsx("p",{className:o.previewSubtext,children:"Read-only preview. Applying this pack will replace only the sections you choose."})]}),e.jsx(ks,{title:"Categories",items:D.categories.map(h=>({key:h.value,label:h.label,icon:h.icon,color:h.color}))}),e.jsx(ks,{title:"Task Types",items:D.types.map(h=>({key:h.value,label:h.label,icon:h.icon,color:h.color,meta:h.status==="retired"?"Retired":void 0}))}),e.jsx(ks,{title:"Priority Levels",items:D.priorities.map(h=>({key:String(h.value),label:h.label,icon:h.icon,color:h.color,meta:`Level ${h.value}`}))}),e.jsxs("section",{className:o.applyPanel,children:[e.jsx("h4",{className:o.applyTitle,children:"Apply Selected Sections"}),e.jsx("p",{className:o.applyCopy,children:"Applying this pack will replace the selected taxonomy sections in this workspace."}),m?e.jsxs("div",{className:o.analysisPanel,children:[m.unmatchedCategoryValues.length>0?e.jsxs("p",{className:o.analysisCopy,children:[m.unmatchedCategoryValues.length," category value",m.unmatchedCategoryValues.length===1?"":"s"," will be preserved as legacy unless you remap to default."]}):null,m.unmatchedTypeValues.length>0?e.jsxs("p",{className:o.analysisCopy,children:[m.unmatchedTypeValues.length," type value",m.unmatchedTypeValues.length===1?"":"s"," will be preserved as legacy unless you remap to default."]}):null,m.incompatiblePriorityValues.length>0?e.jsxs("p",{className:o.analysisWarning,children:["Existing tasks use priority level",m.incompatiblePriorityValues.length===1?"":"s"," ",m.incompatiblePriorityValues.join(", "),". Priority replacement will be blocked unless you remap unmatched existing values to default."]}):null,m.unmatchedCategoryValues.length===0&&m.unmatchedTypeValues.length===0&&m.incompatiblePriorityValues.length===0?e.jsx("p",{className:o.analysisCopy,children:"This pack lines up with the current workspace values for the selected taxonomy sections."}):null]}):null,e.jsxs("div",{className:o.checkboxList,children:[e.jsxs("label",{className:o.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:L.categories,onChange:()=>u("categories")}),e.jsx("span",{children:"Categories"})]}),e.jsxs("label",{className:o.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:L.types,onChange:()=>u("types")}),e.jsx("span",{children:"Types"})]}),e.jsxs("label",{className:o.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:L.priorities,onChange:()=>u("priorities")}),e.jsx("span",{children:"Priorities"})]})]}),e.jsxs("label",{className:o.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:z,onChange:()=>j(h=>!h)}),e.jsx("span",{children:"Remap unmatched existing values to default"})]}),e.jsx("p",{className:o.applyCopy,children:"Leave this off to preserve unmatched category and type values as legacy entries. Priority replacement will be blocked if existing tasks use values outside the selected pack."}),e.jsx("div",{className:o.packActions,children:e.jsx("button",{type:"button",className:s.submitBtn,onClick:W,disabled:x,children:x?"Applying…":"Apply Pack"})}),I?e.jsx("p",{className:`${o.prototypeResult} ${I.type==="error"?o.prototypeError:""}`,children:I.message}):null]})]})]})]}):e.jsx("div",{className:s.emptyState,children:e.jsx("p",{className:"tf-empty-copy",children:"No system taxonomy library packs are available."})})}function Bl(l){const{taxonomies:r=[],onUpdateCustomTaxonomies:g}=l,y=i.useMemo(()=>Li(),[]),[T,S]=i.useState(y),[C,_]=i.useState(y[0]?.id||""),[L,G]=i.useState(!1),[z,j]=i.useState(null),[I,B]=i.useState(y[0]?.taxonomies.map(n=>n.id)||[]),[H,P]=i.useState(null),x=T.find(n=>n.id===C)||T[0]||null,w=x?ma(x):null,D=i.useMemo(()=>x?x.taxonomies.filter(n=>I.includes(n.id)):[],[x,I]),m=i.useMemo(()=>new Set(I),[I]),R=i.useMemo(()=>{const n=new Set(r.map(c=>c.id));return D.map(c=>c.id).filter(c=>n.has(c))},[D,r]),u=i.useMemo(()=>{if(!x)return[];const n=new Set(r.map(c=>c.id));return x.taxonomies.filter(c=>m.has(c.id)&&!n.has(c.id))},[x,m,r]);if(i.useEffect(()=>{let n=!1;return G(!0),j(null),fetch("/api/taskforce/custom-taxonomy-library").then(async c=>{if(!c.ok)throw new Error(`Failed to load custom taxonomy packs (${c.status})`);const A=await c.json().catch(()=>({})),v=Array.isArray(A?.packs)?A.packs:[];!n&&v.length>0&&(S(v),_(O=>v.some(p=>p.id===O)?O:v[0].id))}).catch(c=>{n||j(c instanceof Error?c.message:"Failed to load custom taxonomy packs.")}).finally(()=>{n||G(!1)}),()=>{n=!0}},[]),i.useEffect(()=>{B(x?.taxonomies.map(n=>n.id)||[]),P(null)},[C,x]),!x)return e.jsx("div",{className:s.emptyState,children:e.jsx("p",{className:"tf-empty-copy",children:"No custom taxonomy library packs are available."})});const W=n=>{B(c=>c.includes(n)?c.filter(A=>A!==n):[...c,n]),P(null)},h=()=>{B(u.map(n=>n.id)),P(null)},$=()=>{if(I.length===0){P({type:"error",message:"Select at least one taxonomy to install."});return}if(R.length>0){P({type:"error",message:`This workspace already has ${R.length} taxonomy ${R.length===1?"id":"ids"} that match your current selection. Deselect conflicting taxonomies before installing this pack.`});return}if(!g){P({type:"error",message:"Custom taxonomy install is not available in this surface yet."});return}g([...r,...u.map(n=>Al(n))]),P({type:"success",message:`${u.length} custom ${u.length===1?"taxonomy was":"taxonomies were"} added to this workspace.`})};return e.jsxs("div",{className:o.libraryContainer,children:[e.jsxs("section",{className:o.introCard,children:[e.jsxs("span",{className:o.eyebrow,children:[e.jsx(da,{size:14}),"Custom Taxonomy Library"]}),e.jsx("h3",{className:o.introTitle,children:"Browse reusable custom taxonomy packs."}),e.jsx("p",{className:o.introCopy,children:"These packs install workspace-owned custom taxonomies such as approval stages, channels, and effort bands. Review a pack, choose the taxonomies you want, and install them into this workspace."}),L?e.jsx("p",{className:o.prototypeNotice,children:"Loading available packs…"}):null,z?e.jsx("p",{className:`${o.prototypeResult} ${o.prototypeError}`,children:z}):null]}),e.jsxs("div",{className:o.libraryGrid,children:[e.jsx("div",{className:o.packList,children:T.map(n=>{const c=n.id===C,A=ma(n),v=n.taxonomies.slice(0,3).map(O=>O.label);return e.jsxs("article",{className:`${o.packCard} ${c?o.packCardActive:""}`,children:[e.jsx("div",{className:o.packHeader,children:e.jsxs("div",{className:o.packHeaderText,children:[e.jsxs("div",{className:o.packTitleRow,children:[e.jsx("h4",{className:o.packTitle,children:n.label}),n.domainTag?e.jsx("span",{className:o.packBadge,children:n.domainTag}):null]}),e.jsx("p",{className:o.packDescription,children:n.description}),n.bestFor?e.jsxs("p",{className:o.packBestFor,children:[e.jsx("strong",{children:"Best for:"})," ",n.bestFor]}):null]})}),e.jsxs("div",{className:o.packCounts,children:[e.jsxs("span",{className:o.packCountChip,children:[e.jsx(da,{size:13}),n.taxonomies.length," taxonomies"]}),A.multiSelectCount>0?e.jsx("span",{className:o.packCountChip,children:"Multi-select"}):null,A.numericCount>0?e.jsx("span",{className:o.packCountChip,children:"Numeric"}):null,A.requiredCount>0?e.jsx("span",{className:o.packCountChip,children:"Required"}):null]}),e.jsxs("div",{className:o.packTaxonomyPreview,children:[v.map(O=>e.jsx("span",{className:o.packTaxonomyChip,children:O},O)),n.taxonomies.length>v.length?e.jsxs("span",{className:o.packTaxonomyMore,children:["+",n.taxonomies.length-v.length," more"]}):null]}),e.jsx("div",{className:o.packActions,children:e.jsx("button",{type:"button",className:s.cancelBtn,onClick:()=>_(n.id),children:c?"Previewing":"Preview"})})]},n.id)})}),e.jsxs("aside",{className:o.previewPanel,children:[e.jsxs("div",{className:o.previewHeader,children:[e.jsx("h3",{className:o.previewTitle,children:x.label}),x.bestFor?e.jsxs("p",{className:o.previewBestFor,children:[e.jsx("strong",{children:"Best for:"})," ",x.bestFor]}):null,e.jsx("p",{className:o.previewSubtext,children:"Review each taxonomy before installing it into this workspace. Installed taxonomies become normal workspace-owned custom taxonomies."})]}),e.jsxs("div",{className:o.previewSummaryRow,children:[e.jsxs("span",{className:o.packCountChip,children:[x.taxonomies.length," taxonomies"]}),(w?.formEnabledCount||0)>0?e.jsxs("span",{className:o.packCountChip,children:[w.formEnabledCount," show in forms"]}):null,(w?.numericCount||0)>0?e.jsxs("span",{className:o.packCountChip,children:[w.numericCount," numeric"]}):null,(w?.requiredCount||0)>0?e.jsxs("span",{className:o.packCountChip,children:[w.requiredCount," required"]}):null]}),e.jsxs("section",{className:o.applyPanel,children:[e.jsx("h4",{className:o.applyTitle,children:"Choose Taxonomies to Install"}),e.jsx("p",{className:o.applyCopy,children:"Select only the taxonomies you want to add. This first pass installs new custom taxonomies only and asks you to skip conflicts rather than replace them."}),e.jsx("div",{className:o.checkboxList,children:x.taxonomies.map(n=>e.jsxs("label",{className:o.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:I.includes(n.id),onChange:()=>W(n.id)}),e.jsxs("span",{children:[n.label,r.some(c=>c.id===n.id)?" (Already installed)":""]})]},n.id))}),e.jsxs("div",{className:o.analysisPanel,children:[e.jsxs("p",{className:o.analysisCopy,children:[I.length," ",I.length===1?"taxonomy is":"taxonomies are"," currently selected from this pack."]}),u.length>0?e.jsxs("p",{className:o.analysisCopy,children:[u.length," selected ",u.length===1?"taxonomy is":"taxonomies are"," ready to install right now."]}):e.jsx("p",{className:o.analysisCopy,children:"No selected taxonomies are currently installable."}),R.length>0?e.jsxs("p",{className:o.analysisWarning,children:[R.length," selected ",R.length===1?"taxonomy conflicts":"taxonomies conflict"," with existing workspace ids: ",R.join(", "),"."]}):null]}),e.jsxs("div",{className:o.packActions,children:[R.length>0?e.jsx("button",{type:"button",className:s.cancelBtn,onClick:h,children:"Select Installable Only"}):null,e.jsx("button",{type:"button",className:s.submitBtn,onClick:$,disabled:I.length===0||u.length===0,children:"Install Selected Taxonomies"})]}),H?e.jsx("p",{className:`${o.prototypeResult} ${H.type==="error"?o.prototypeError:""}`,children:H.message}):null]}),x.taxonomies.map(n=>e.jsxs("section",{className:o.customTaxonomyCard,children:[e.jsx("div",{className:o.customTaxonomyHeader,children:e.jsxs("div",{children:[e.jsx("h4",{className:o.previewSectionTitle,children:n.label}),n.description?e.jsx("p",{className:o.customTaxonomyDescription,children:n.description}):null]})}),R.includes(n.id)?e.jsx("p",{className:o.analysisWarning,children:"Conflicts with an existing taxonomy id in this workspace."}):null,e.jsx("div",{className:o.customTaxonomyBadges,children:_l(n).map(c=>e.jsx("span",{className:o.customTaxonomyBadge,children:c},c))}),e.jsx(ks,{title:n.widgetType==="level"?"Levels":"Options",items:n.options.map(c=>({key:`${n.id}:${c.value}`,label:c.label,icon:c.icon,color:c.color,meta:n.widgetType==="level"?`Level ${c.value}`:String(c.value)}))})]},n.id))]})]})]})}function ha(l){const{mode:r="system",taxonomies:g,onUpdateCustomTaxonomies:y,onAnalyzeSystemTaxonomyPack:T,onApplySystemTaxonomyPack:S}=l;return r==="custom"?e.jsx(Bl,{taxonomies:g,onUpdateCustomTaxonomies:y}):e.jsx(Ll,{onAnalyzeSystemTaxonomyPack:T,onApplySystemTaxonomyPack:S})}function Pl(l){const{taxonomies:r,onUpdateTaxonomies:g,taxonomyDisplayLabels:y,onUpdateTaxonomyDisplayLabels:T,categories:S,pathValidation:C,onUpdateCategory:_,onRemoveCategory:L,onSaveCategory:G,onAddPath:z,onRemovePath:j,onUpdateCategoryIcon:I,onUpdateCategoryColor:B,onBrowseFolders:H,types:P,onSaveType:x,onRemoveType:w,onUpdateType:D,priorities:m,onUpdatePriorities:R,onAnalyzeSystemTaxonomyPack:u,onApplySystemTaxonomyPack:W,manualComplexityEnabled:h,onManualComplexityEnabledChange:$,initialTab:n}=l,[c,A]=i.useState(n||""),[v,O]=i.useState(n?"detail":"list"),[p,F]=i.useState(!1),[K,ie]=i.useState(""),Oe=i.useMemo(()=>xa().length,[]),He=i.useMemo(()=>Ci({categories:S,types:P,priorities:m,taxonomies:r,manualComplexityEnabled:h,displayLabels:y}),[S,h,m,r,y,P]),Ts=()=>{if(!K.trim())return;const f=K.toLowerCase().trim().replace(/\s+/g,"-");if(r.some(Y=>Y.id===f)){alert("A taxonomy with this ID already exists");return}const q={id:f,label:K.trim(),options:[],widgetType:"select",isSystem:!1,multiSelect:!1,formEnabled:!1,filterEnabled:!0,sortEnabled:!1};g([...r,q]),ie(""),F(!1),A(f),O("detail")},Ss=f=>{g(r.map(q=>q.id===f.id?f:q))},$s=f=>{const q=r.map(Y=>Y.id===f?{...Y,status:"retired"}:Y);g(q),O("list")},Is=f=>{const q=r.map(Y=>Y.id===f?{...Y,status:"active"}:Y);g(q)},Se=f=>{A(f),O("detail")},ss=(f,q)=>{const Y=r.findIndex(Ls=>Ls.id===f);if(Y<0)return;const We=Y+q;if(We<0||We>=r.length)return;const Ue=[...r],[As]=Ue.splice(Y,1);Ue.splice(We,0,As),g(Ue)},ts=He.find(f=>f.id===c),as=ts?.taxonomy,_s=He.filter(f=>f.kind!=="custom"),ke=He.filter(f=>f.kind==="custom");return v==="list"?e.jsxs("div",{className:b.taxonomyDrillDown,children:[e.jsxs("div",{className:b.drillDownList,children:[e.jsx("section",{className:b.librarySection,children:e.jsxs("button",{className:b.libraryLauncher,onClick:()=>Se("library"),children:[e.jsxs("div",{className:b.libraryLauncherInfo,children:[e.jsx("span",{className:b.libraryLauncherIcon,children:e.jsx(ht,{size:18})}),e.jsxs("div",{className:b.libraryLauncherText,children:[e.jsx("span",{className:b.libraryLauncherLabel,children:"System Taxonomy Library"}),e.jsx("span",{className:b.libraryLauncherSubtext,children:"Browse curated packs for categories, task types, and priority scales."})]})]}),e.jsxs("span",{className:b.libraryLauncherMeta,children:[Oe," curated packs",e.jsx(be,{size:16,className:b.chevron})]})]})}),e.jsxs("div",{className:b.drillDownSection,children:[e.jsx("h4",{className:b.drillDownSectionTitle,children:"System Taxonomies"}),_s.map(f=>e.jsxs("button",{className:`${b.drillDownItem} ${f.id==="complexities"&&!h?b.drillDownItemDimmed:""}`,onClick:()=>Se(f.id),children:[e.jsxs("div",{className:b.drillDownItemInfo,children:[e.jsx(pn,{size:16,className:b.systemIcon}),e.jsxs("div",{className:b.drillDownItemText,children:[e.jsx("span",{className:b.drillDownItemLabel,children:f.label}),e.jsx("span",{className:b.drillDownItemSubtext,children:f.summary})]})]}),e.jsx(be,{size:16,className:b.chevron})]},f.id))]}),e.jsxs("div",{className:b.drillDownSection,children:[e.jsxs("div",{className:b.drillDownSectionHeader,children:[e.jsx("h4",{className:b.drillDownSectionTitle,children:"Custom Taxonomies"}),e.jsxs("button",{className:E.addTaxonomyBtnSmall,onClick:()=>F(!0),title:"Add Custom Taxonomy",children:[e.jsx(Qe,{size:14})," New"]})]}),e.jsxs("button",{className:b.drillDownItem,onClick:()=>Se("custom-library"),children:[e.jsxs("div",{className:b.drillDownItemInfo,children:[e.jsx(ht,{size:16,className:b.systemIcon}),e.jsxs("div",{className:b.drillDownItemText,children:[e.jsx("span",{className:b.drillDownItemLabel,children:"Custom Taxonomy Library"}),e.jsx("span",{className:b.drillDownItemSubtext,children:"Reusable templates for future custom taxonomy packs"})]})]}),e.jsx(be,{size:16,className:b.chevron})]}),ke.length===0?e.jsx("div",{className:s.emptyState,children:e.jsx("p",{className:"tf-empty-copy",children:"No custom taxonomies yet."})}):ke.map(f=>e.jsxs("div",{className:`${b.drillDownItem} ${f.taxonomy?.status==="retired"?b.drillDownItemDimmed:""}`,children:[e.jsxs("button",{className:b.drillDownItemAction,onClick:()=>Se(f.id),children:[e.jsxs("div",{className:b.drillDownItemInfo,children:[e.jsx(un,{size:16}),e.jsxs("div",{className:b.drillDownItemText,children:[e.jsx("span",{className:b.drillDownItemLabel,children:f.taxonomy?.status==="retired"?`${f.label} (Retired)`:f.label}),e.jsx("span",{className:b.drillDownItemSubtext,children:f.summary})]})]}),e.jsx(be,{size:16,className:b.chevron})]}),e.jsxs("div",{className:b.orderButtons,children:[e.jsx("button",{type:"button",className:s.browseBtn,title:"Move taxonomy up",onClick:q=>{q.stopPropagation(),ss(f.id,-1)},disabled:ke[0]?.id===f.id,children:e.jsx(ga,{size:16})}),e.jsx("button",{type:"button",className:s.browseBtn,title:"Move taxonomy down",onClick:q=>{q.stopPropagation(),ss(f.id,1)},disabled:ke[ke.length-1]?.id===f.id,children:e.jsx(ba,{size:16})})]})]},f.id))]})]}),p&&e.jsx("div",{className:b.createOverlay,children:e.jsxs("div",{className:b.createDialog,children:[e.jsx("h3",{className:b.createDialogTitle,children:"New Taxonomy"}),e.jsxs("div",{className:b.inputGroup,children:[e.jsx("label",{className:s.label,children:"Name"}),e.jsx("input",{className:s.input,placeholder:"e.g. Sprint, Phase",value:K,onChange:f=>ie(f.target.value),autoFocus:!0})]}),e.jsxs("div",{className:b.dialogActions,children:[e.jsx("button",{className:`${s.submitBtn} ${b.createSubmit}`,onClick:Ts,disabled:!K.trim(),children:"Create"}),e.jsx("button",{className:`${s.cancelBtn} ${b.createCancel}`,onClick:()=>{F(!1),ie("")},children:"Cancel"})]})]})})]}):e.jsxs("div",{className:b.taxonomyDetailView,children:[e.jsx("div",{className:b.detailHeader,children:e.jsxs("div",{className:b.taxonomyBreadcrumbs,children:[e.jsxs("button",{className:b.breadcrumbPrev,onClick:()=>O("list"),title:"Back to All Taxonomies",children:[e.jsx(mn,{size:16,className:b.breadcrumbIcon}),"Taxonomies"]}),e.jsx(be,{size:14,className:b.breadcrumbDivider}),e.jsx("h3",{className:b.breadcrumbActive,children:c==="library"?"System Taxonomy Library":c==="custom-library"?"Custom Taxonomy Library":ts?.label||"Taxonomy"})]})}),e.jsx("div",{className:b.detailContent,children:c==="library"?e.jsx(ha,{mode:"system",onAnalyzeSystemTaxonomyPack:u,onApplySystemTaxonomyPack:W}):c==="custom-library"?e.jsx(ha,{mode:"custom",taxonomies:r,onUpdateCustomTaxonomies:g}):c==="categories"?e.jsx(Ti,{displayLabel:y?.category,onUpdateDisplayLabel:f=>T?.({category:f}),categories:S,pathValidation:C,onUpdateCategory:_,onRemoveCategory:L,onSaveCategory:G,onAddPath:z,onRemovePath:j,onUpdateCategoryIcon:I,onUpdateCategoryColor:B,onBrowseFolders:H}):c==="types"?e.jsx(Si,{displayLabel:y?.type,onUpdateDisplayLabel:f=>T?.({type:f}),types:P,onSaveType:x,onRemoveType:w,onUpdateType:D}):c==="complexities"?e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h4",{className:s.settingSubtitle,children:"Complexity"}),e.jsx("p",{className:s.settingsHint,children:"Complexity is estimated by AI and system logic by default."}),e.jsx("p",{className:s.settingsHint,children:"Enable this to let users set complexity manually and show the Complexity field in Add/Edit Task. When disabled, the Complexity field is hidden from the task form."}),e.jsxs("label",{className:s.archiveToggle,children:[e.jsx("input",{type:"checkbox",checked:h,onChange:f=>{$(f.target.checked)}}),e.jsx("span",{children:"Manual Complexity"})]})]}):as?e.jsx(wi,{taxonomy:as,onUpdateTaxonomy:Ss,onRemoveTaxonomy:$s,onRestoreTaxonomy:Is}):c==="priorities"?e.jsx($i,{displayLabel:y?.priority,onUpdateDisplayLabel:f=>T?.({priority:f}),priorities:m,onUpdatePriorities:R}):e.jsxs("div",{className:s.emptyState,children:[e.jsx("p",{className:"tf-empty-copy",children:"Taxonomy not found."}),e.jsx("button",{className:s.submitBtn,onClick:()=>O("list"),children:"Return to List"})]})})]})}const Dl={sun:kn,wind:fa,moon:jn,sparkles:xt};function Ul(l){const{settingsModel:r,onSectionChange:g}=l,{currentTheme:y,globalTheme:T,themeUseGlobalDefault:S,keyShortcut:C,jsonBackupEnabled:_,globalJsonBackupEnabled:L,globalWeekStartsOn:G,locale:z="en-US",supportedLocales:j=["en-US","es-419","pt-BR"],jsonBackupUseGlobalDefault:I,manualComplexityEnabled:B,checklistDropdownEnabled:H=!0,showTaskCardStatusLabel:P=!0,exportWorkflowsPath:x,exportingResource:w,exportResult:D,initialSection:m,onThemeChange:R,onSaveTheme:u,onSaveGlobalTheme:W,onResetProjectToGlobal:h,onKeyShortcutChange:$,onJsonBackupEnabledChange:n,onSaveGlobalJsonBackupEnabled:c,onSaveGlobalWeekStartsOn:A,onSaveLocale:v,onManualComplexityEnabledChange:O,onChecklistDropdownEnabledChange:p,onShowTaskCardStatusLabelChange:F,onSaveSettings:K,onExportWorkflowsPathChange:ie,onShowFolderBrowserChange:Oe,onBrowserTargetChange:He,onFetchFolders:Ts,categories:Ss,pathValidation:$s,taxonomyDisplayLabels:Is,onUpdateCategory:Se,onRemoveCategory:ss,onSaveCategory:ts,onAddPath:as,onRemovePath:_s,onUpdateCategoryIcon:ke,onUpdateCategoryColor:f,types:q,onSaveType:Y,onRemoveType:We,onUpdateType:Ue,taxonomies:As,onUpdateTaxonomies:Ls,priorities:ja,onUpdatePriorities:ka,onAnalyzeSystemTaxonomyPack:Na,onApplySystemTaxonomyPack:Ca,onUpdateTaxonomyDisplayLabels:wa,projectRoot:$e,projectName:Ve,mcpHostRoot:Bs,serverHostRoot:Ps,mcpScriptPath:ce,tenantId:Ta,workspaceId:le,runtimeMode:Ne="local",cloudAuthBaseUrl:Ds="",cloudMcpBaseUrl:Ms="",fetchCloudAuthApi:Ie,workspaceSwitchingEnabled:Sa=!1,currentWorkspaceRole:$a="member",currentWorkspaceName:_e="",onDeleteWorkspace:Es,onMcpHostRootChange:Ia,isAuthenticated:Gs=!1,exportEnvironment:bt,setupState:se=null,buildInfo:Ml=null,onExportEnvironmentChange:_a,onSaveSetupMode:El,onSaveWorkspaceProfile:Rs,availableWorkflows:Ae=[],onExportWorkflows:Aa,initiativeTemplates:Le=[],onRefreshInitiativeTemplates:Fs,onCreateInitiativeFromTemplate:zs,onRefreshWorkflows:La}=r,yt=Ne!=="cloud",[Ke,ns]=i.useState([]);i.useEffect(()=>{Ae.length>0&&Ke.length===0&&ns(Ae)},[Ae]);const Ba=t=>{ns(a=>a.includes(t)?a.filter(d=>d!==t):[...a,t])},Pa=()=>ns(Ae),Da=()=>ns([]),[Be,U]=i.useState(null),[is,Ma]=i.useState(()=>se?.mode==="operations"?"operations":"core"),[vt,ft]=i.useState(()=>String(se?.workspace?.name||"").trim()),[jt,kt]=i.useState(()=>String(se?.workspace?.description||"")),[qe,Nt]=i.useState(""),[Os,Ea]=i.useState(""),[Ct,wt]=i.useState(!1),[M,te]=i.useState("general"),[Hs,Xe]=i.useState(!0),[de,ls]=i.useState(()=>"project"),[oe,Tt]=i.useState([]),[Ws,St]=i.useState(!1),[ye,Us]=i.useState(null),[os,rs]=i.useState(null),cs=Re.useCallback(async()=>{if(le){St(!0);try{const t=typeof window<"u"?new URL(`/api/taskforce/workspace/assignee-options?workspaceId=${encodeURIComponent(le)}`,window.location.origin).toString():`/api/taskforce/workspace/assignee-options?workspaceId=${encodeURIComponent(le)}`,a=await fetch(t,{credentials:"include"});if(!a.ok)return;const d=await a.json().catch(()=>({})),N=Array.isArray(d?.assignees)?d.assignees.filter(k=>k.kind==="agent").map(k=>({id:String(k.value||""),name:String(k.label||""),profileToken:typeof k.profileToken=="string"?k.profileToken:null,username:String(k.username||k.value||""),icon:String(k.icon||"Bot"),color:String(k.color||"#6B7280"),kind:"agent",description:typeof k.description=="string"?k.description:null,role:typeof k.role=="string"?k.role:null,provider:typeof k.provider=="string"?k.provider:null,model:typeof k.model=="string"?k.model:null,surfaceType:typeof k.surfaceType=="string"?k.surfaceType:null})):[];Tt(N)}catch{Tt([])}finally{St(!1)}}},[le]),Ga=Re.useCallback(async(t,a)=>{if(le){rs(null);try{const d=await fetch("/api/taskforce/workspace/ai-profiles/merge",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({workspaceId:le,keepId:t,mergeId:a})}),N=await d.json().catch(()=>({}));d.ok?(rs({type:"success",message:"Profiles merged successfully."}),Us(null),await cs()):rs({type:"error",message:N?.error||"Merge failed."})}catch{rs({type:"error",message:"Network error during merge."})}}},[le,cs]);i.useEffect(()=>{(M==="agents"||M==="mcp")&&cs()},[M,cs]),i.useEffect(()=>{Le.length>0&&!qe&&Nt(Le[0].id)},[Le,qe]),i.useEffect(()=>{if(!Be)return;const t=setTimeout(()=>U(null),2500);return()=>clearTimeout(t)},[Be]),i.useEffect(()=>{Ma(se?.mode==="operations"?"operations":"core")},[se?.mode]),i.useEffect(()=>{ft(String(se?.workspace?.name||"").trim()),kt(String(se?.workspace?.description||""))},[se?.workspace?.name,se?.workspace?.description]);const Ra=async t=>{R(t);const a=await u(t);U({type:a?"success":"error",message:a?"Project theme saved.":"Failed to save project theme."})},$t=(t,a,d)=>{const N=Dl[t.icon];return e.jsxs("button",{className:`${s.themeBtn} tf-button-tile ${a===t.id?s.activeTheme:""}`,onClick:()=>{d(t.id)},children:[e.jsx(N,{size:20})," ",t.label]},t.id)},Pe=Ne==="cloud"||Gs,Vs=Ne==="cloud"||Gs?"cloud":"local",[ds,Ks]=i.useState(Vs),[ve,It]=i.useState(!1),[Je,_t]=i.useState(!0),[At,Lt]=i.useState(!1),[qs,Bt]=i.useState(!1),[Xs,Pt]=i.useState(!0),[Js,Ys]=i.useState([]),[Fa,Dt]=i.useState(!1),[Mt,Zs]=i.useState(null),[ps,us]=i.useState(null),ms=i.useMemo(()=>`${String(_e||se?.workspace?.name||Ve||le||"Taskforce Workspace").trim()} MCP`,[_e,se?.workspace?.name,Ve,le]),[Et,Qs]=i.useState(ms),[Ye,za]=i.useState(["tasks:read","tasks:write","workspace:read"]),[et,Gt]=i.useState(""),[hs,re]=i.useState(null),[X,Rt]=i.useState(null),[ae,Ft]=i.useState("cursor"),[De,st]=i.useState(""),[Me,tt]=i.useState(""),[zt,at]=i.useState(""),[Ot,Ht]=i.useState(!1),[Z,fe]=i.useState(null),[xs,Wt]=i.useState([]),[Oa,Ut]=i.useState(!1),[Vt,Ee]=i.useState(null),[Kt,qt]=i.useState(null);i.useEffect(()=>{Ks(Vs)},[Vs]),i.useEffect(()=>{Qs(t=>t.trim().length>0?t:ms)},[ms]),i.useEffect(()=>{if(!hs)return;const t=setTimeout(()=>re(null),3500);return()=>clearTimeout(t)},[hs]),i.useEffect(()=>{X&&(at(X),fe(null))},[X]);const nt=i.useMemo(()=>{const t=on(Ms||Ds||""),a=String(t||Ms||Ds||"").trim().replace(/\/+$/,"");return a?`${a}/mcp`:typeof window>"u"?"/mcp":`${window.location.origin.replace(/\/+$/,"")}/mcp`},[Ms,Ds]),Ha=Ne!=="cloud"&&Pe,it=Ne==="cloud"||ds==="cloud",Wa=Ne!=="cloud"&&(!Pe||ds==="local"),Ua=i.useMemo(()=>{const t={active:0,expired:1,revoked:2};return[...Js].sort((a,d)=>{const N=(t[a.status]??99)-(t[d.status]??99);return N!==0?N:String(d.createdAt||"").localeCompare(String(a.createdAt||""))})},[Js]),Ge=i.useMemo(()=>Nn(_e||null,Ve||null),[_e,Ve]),gs=X||"<<GENERATE_TOKEN>>",lt=i.useMemo(()=>{if(Me){const t=oe.find(a=>String(a.profileToken||"").trim()===Me.trim());if(t)return t.id}if(De){const t=oe.find(a=>a.name===De.trim());if(t)return t.id}return""},[oe,De,Me]),pe=i.useMemo(()=>oe.find(t=>t.id===lt)||null,[oe,lt]),ue=i.useMemo(()=>{switch(ae){case"codex":return{description:"OpenAI Codex coding agent connected through MCP.",role:"Coding Agent",provider:"OpenAI",model:"Codex",surfaceType:"coding_tool"};case"chatgpt-desktop":return{description:"ChatGPT desktop app connected through the Taskforce MCP connector.",role:"AI Assistant",provider:"OpenAI",model:"ChatGPT",surfaceType:"chat_app"};case"claude-code":return{description:"Claude Code coding agent connected through MCP.",role:"Coding Agent",provider:"Anthropic",model:"Claude Code",surfaceType:"coding_tool"};case"claude-desktop":return{description:"Claude Desktop connected through the Taskforce MCP connector.",role:"AI Assistant",provider:"Anthropic",model:"Claude",surfaceType:"chat_app"};case"gemini-cli":return{description:"Gemini CLI coding agent connected through MCP.",role:"Coding Agent",provider:"Google",model:"Gemini",surfaceType:"coding_tool"};case"vscode":return{description:"VS Code MCP-connected coding agent.",role:"Coding Agent",provider:null,model:null,surfaceType:"ide"};case"cline":case"windsurf":case"antigravity":case"openclaw":return{description:`${mt.find(t=>t.id===ae)?.label||"MCP"} coding agent connected through MCP.`,role:"Coding Agent",provider:null,model:null,surfaceType:"coding_tool"};default:return{description:null,role:null,provider:null,model:null,surfaceType:null}}},[ae]),V=i.useMemo(()=>Tn({clientId:ae,endpoint:nt,tokenValue:gs,serverId:Ge,aiProfileName:De,aiProfileToken:Me,aiProfileDescription:pe?.description??ue.description,aiProfileRole:pe?.role??ue.role,aiProfileProvider:pe?.provider??ue.provider,aiProfileModel:pe?.model??ue.model,aiProfileSurfaceType:pe?.surfaceType??ue.surfaceType}),[De,Me,nt,Ge,gs,ue.description,ue.model,ue.provider,ue.role,ue.surfaceType,pe?.description,pe?.model,pe?.provider,pe?.role,pe?.surfaceType,ae]),bs=V.kind==="json"?V.serverConfig??null:null,Xt=ae==="chatgpt-desktop"||ae==="claude-desktop",Jt=i.useMemo(()=>xs.find(t=>t.provider==="chatgpt"&&t.status==="active")||null,[xs]),Yt=i.useMemo(()=>xs.find(t=>t.provider==="claude"&&t.status==="active")||null,[xs]),ys=ae==="chatgpt-desktop"?Jt:ae==="claude-desktop"?Yt:null,Va=i.useMemo(()=>{if(V.kind==="text")return V.renderedText||"";let t={[V.rootKey||"mcpServers"]:{[Ge]:V.serverConfig}};for(const a of[...V.wrapperKeys||[]].reverse())t={[a]:t};return JSON.stringify(t,null,2)},[V,Ge]),ot=(t,a,d="mcpServers",N=[])=>{const k={color:"var(--text-helper)"},Q={color:"var(--brand-primary-strong)",fontWeight:"bold"},ee={color:"var(--text-secondary)"},Ce={color:"var(--text-primary, #fff)"},Ze=gs,we=[...N,d],je=" ".repeat(we.length+1),ia=JSON.stringify(a,null,2).split(`
|
|
3
|
+
`).map((he,me)=>me===0?he:`${je}${he}`).join(`
|
|
4
|
+
`).split(Ze);return e.jsxs(e.Fragment,{children:[e.jsx("span",{style:ee,children:"{"}),`
|
|
5
|
+
`,we.map((he,me)=>e.jsxs(Re.Fragment,{children:[`${" ".repeat(me+1)}`,e.jsx("span",{style:k,children:`"${he}"`}),e.jsx("span",{style:k,children:":"})," ",e.jsx("span",{style:ee,children:"{"}),`
|
|
6
|
+
`]},`mcp-container-open-${he}-${me}`)),je,e.jsxs("span",{style:Ce,children:[`"${t}"`,": ",ia.map((he,me)=>e.jsxs(Re.Fragment,{children:[he,me<ia.length-1&&e.jsx("span",{style:Q,children:Ze})]},`config-segment-${me}`))]}),`
|
|
7
|
+
`,[...we].reverse().map((he,me)=>e.jsxs(Re.Fragment,{children:[`${" ".repeat(we.length-me)}`,e.jsx("span",{style:ee,children:"}"}),`
|
|
8
|
+
`]},`mcp-container-close-${he}-${me}`)),e.jsx("span",{style:ee,children:"}"})]})},Zt=t=>{const a={color:"var(--text-primary, #fff)"},d={color:"var(--brand-primary-strong)",fontWeight:"bold"},N=gs,k=String(t||"").split(N);return k.map((Q,ee)=>e.jsxs(Re.Fragment,{children:[e.jsx("span",{style:a,children:Q}),ee<k.length-1&&e.jsx("span",{style:d,children:N})]},`text-config-${ee}`))},rt=t=>{za(a=>a.includes(t)?a.length===1?a:a.filter(d=>d!==t):[...a,t])},vs=(t,a)=>{navigator.clipboard.writeText(t),It(a),setTimeout(()=>It(!1),2e3)},Qt=()=>{if(!Xt&&!X){re({type:"error",message:"Generate a token before copying the Cloud MCP configuration."});return}vs(Va,"full")},ea=()=>{let t=ce||"",a=$e||"";const d=Bs||Ps;if(d&&$e){if(ce&&ce.startsWith($e))t=ce.replace($e,d);else if(ce&&ce.includes("/node_modules/")){const na=ce.indexOf("/node_modules/");t=d+ce.substring(na)}a=d}const N=(ce||"").endsWith(".ts"),k=Ve||($e?$e.split(/[/\\]/).pop():"project"),Q=gt(`taskforce-${k}`,"taskforce-project"),ee=(Ta||"").trim()||"your-tenant-id",Ce=(le||se?.workspaceId||"").trim(),we={TASKFORCE_TENANT_ID:ee,TASKFORCE_WORKSPACE_ID:Ce&&Ce!=="default"?Ce:"your-workspace-id"},je=Je?{command:"taskforce",args:["mcp",a||"."],env:we}:{command:N?"npx":"node",args:N?["-y","tsx",t,a]:[t,a],env:we};return!Je&&!je.args[je.args.length-1]&&(je.args[je.args.length-1]=".../path/to/project/root"),{serverId:Q,serverConfig:je}},Ka=(t="full")=>{if(!ce&&!Je)return;const{serverId:a,serverConfig:d}=ea(),N=t==="full"?JSON.stringify({mcpServers:{[a]:d}},null,2):`"${a}": ${JSON.stringify(d,null,2)}`;vs(N,t)},sa=async()=>{if(Pe){Dt(!0),Zs(null);try{const t=await Ie("/api/taskforce/settings/mcp/tokens",{method:"GET",credentials:"include"}),a=await t.json().catch(()=>({}));if(!t.ok){Zs(String(a?.error||"Failed to load MCP tokens."));return}Ys(Array.isArray(a?.items)?a.items:[])}catch{Zs("Failed to load MCP tokens.")}finally{Dt(!1)}}},ct=async()=>{if(Pe){Ut(!0),Ee(null);try{const t=await Ie("/api/taskforce/settings/mcp/connectors",{method:"GET",credentials:"include"}),a=await t.json().catch(()=>({}));if(!t.ok){Ee(String(a?.error||"Failed to load MCP connectors."));return}Wt(Array.isArray(a?.items)?a.items:[])}catch{Ee("Failed to load MCP connectors.")}finally{Ut(!1)}}},qa=async()=>{const t=Et.trim();if(!t){re({type:"error",message:"Token name is required."});return}us("create"),re(null);try{const a=await Ie("/api/taskforce/settings/mcp/tokens",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t,scopes:Ye,expiresAt:et?new Date(`${et}T00:00:00`).toISOString():null})}),d=await a.json().catch(()=>({}));if(!a.ok){re({type:"error",message:String(d?.error||"Failed to create token.")});return}Rt(String(d?.token||"")),Qs(ms),Gt(""),Ys(N=>d?.record?[d.record,...N.filter(Q=>Q.id!==d.record.id)]:N)}catch{re({type:"error",message:"Failed to create token."})}finally{us(null)}},ta=async(t,a)=>{us(`${a}:${t}`),re(null);try{const d=await Ie(`/api/taskforce/settings/mcp/tokens/${encodeURIComponent(t)}/${a}`,{method:"POST",credentials:"include"}),N=await d.json().catch(()=>({}));if(!d.ok){re({type:"error",message:String(N?.error||`Failed to ${a} token.`)});return}a==="regenerate"?(Rt(String(N?.token||"")),re({type:"success",message:"Token regenerated. Copy the new value now."})):re({type:"success",message:"Token revoked."});const k=N?.record||null;k?.id?Ys(Q=>Q.map(ee=>ee.id===k.id?k:ee)):await sa()}catch{re({type:"error",message:`Failed to ${a} token.`})}finally{us(null)}},Xa=async()=>{const t=zt.trim();if(!t){fe({type:"error",message:"Paste a token to test the MCP connection."});return}Ht(!0),fe(null);try{const a=await Ie("/api/taskforce/settings/mcp/test-connection",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t,requiredScopes:Ye})}),d=await a.json().catch(()=>({}));if(!a.ok){const k=d?.details&&typeof d.details=="object"?d.details:{},Q=Array.isArray(k?.missingScopes)?k.missingScopes.map(Ze=>String(Ze)):[],ee=typeof k?.tokenWorkspaceId=="string"?String(k.tokenWorkspaceId):void 0,Ce=d?.code==="MCP_TOKEN_MISSING_SCOPES"&&Q.length>0?`Token is missing required scopes: ${Q.join(", ")}.`:String(d?.error||"Failed to test MCP connection.");fe({type:"error",message:Ce,workspaceName:ee});return}const N=d?.result&&typeof d.result=="object"?d.result:{};fe({type:"success",message:"Connection looks good for this workspace.",scopes:Array.isArray(N?.scopes)?N.scopes.map(k=>String(k)):[],workspaceName:typeof N?.workspaceName=="string"?String(N.workspaceName):"",workspaceId:typeof N?.workspaceId=="string"?String(N.workspaceId):""})}catch{fe({type:"error",message:"Failed to test MCP connection."})}finally{Ht(!1)}},Ja=async t=>{qt(t),Ee(null);try{const a=await Ie(`/api/taskforce/settings/mcp/connectors/${encodeURIComponent(t)}/disconnect`,{method:"POST",credentials:"include"}),d=await a.json().catch(()=>({}));if(!a.ok){Ee(String(d?.error||"Failed to disconnect connector."));return}const N=d?.record||null;N?.id?Wt(k=>k.map(Q=>Q.id===N.id?N:Q)):await ct()}catch{Ee("Failed to disconnect connector.")}finally{qt(null)}};i.useEffect(()=>{if(Pe){if(M==="mcp"&&it){sa(),ct();return}M==="integrations"&&ct()}},[M,it,Pe]),i.useEffect(()=>{M==="initiatives"&&Le.length===0&&Fs?.()},[M,Le.length,Fs]);const Ya=r.availableEnvironments||[],Za=t=>{switch(t){case"Bot":return e.jsx(pa,{size:16});case"Terminal":return e.jsx(fn,{size:16});case"Sparkles":return e.jsx(xt,{size:16});case"Command":return e.jsx(vn,{size:16});case"Wind":return e.jsx(fa,{size:16});case"Github":return e.jsx(yn,{size:16});case"Zap":return e.jsx(js,{size:16});case"Box":return e.jsx(es,{size:16});default:return e.jsx(bn,{size:16})}};i.useEffect(()=>{m&&(m==="categories"||m==="types"?te("taxonomy"):m==="documents"?te("general"):m==="appearance-application"?(Xe(!0),te("appearanceApplication")):m==="appearance-task-cards"?(Xe(!0),te("appearanceTaskCards")):m==="appearance-task-forms"?(Xe(!0),te("appearanceTaskForms")):te(m==="resources"||m==="commands"?"commands":m==="initiatives"?"initiatives":m==="agents"?"agents":m==="integrations"?"integrations":m))},[m]),i.useEffect(()=>{(M==="appearanceApplication"||M==="appearanceTaskCards"||M==="appearanceTaskForms")&&Xe(!0)},[M]);const Qa=t=>{He({type:"category",value:t}),Ts(""),Oe(!0)},aa=[{key:"general",label:"General",icon:e.jsx(xn,{size:14}),section:"general"},{key:"taxonomy",label:"Taxonomy",icon:e.jsx(va,{size:14}),section:"taxonomy"},{key:"integrations",label:"Integrations",icon:e.jsx(gn,{size:14}),section:"integrations"},{key:"mcp",label:"MCP",icon:e.jsx(es,{size:14}),section:"mcp"}],en=[{key:"appearanceApplication",label:"Application",section:"appearance-application"},{key:"appearanceTaskCards",label:"Task cards",section:"appearance-task-cards"},{key:"appearanceTaskForms",label:"Task forms",section:"appearance-task-forms"}],dt=(t,a)=>{te(t),g?.(a)},sn=()=>e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h3",{className:`${s.settingTitle} tf-heading-section`,children:"Theme"}),e.jsx("div",{className:s.buttonGrid,children:oa.map(t=>$t(t,y,Ra))})]}),tn=()=>e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h3",{className:`${s.settingTitle} tf-heading-section`,children:"Theme Defaults"}),e.jsx("div",{className:s.buttonGrid,children:oa.map(t=>$t(t,T,async a=>{const d=await W(a);U({type:d?"success":"error",message:d?"Global theme saved.":"Failed to save global theme."})}))})]}),an=()=>e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h3",{className:`${s.settingTitle} tf-heading-section`,children:"Task Form"}),e.jsxs("label",{className:s.archiveToggle,children:[e.jsx("input",{type:"checkbox",checked:H,onChange:async t=>{if(!p)return;const a=await p(t.target.checked);U({type:a?"success":"error",message:a?"Checklist dropdown setting saved.":"Failed to save checklist dropdown setting."})},disabled:!p}),e.jsx("span",{children:"Enable checklist dropdown in task form"})]})]});return e.jsx("div",{className:s.settingsTab,children:e.jsxs("div",{className:s.settingsLayout,children:[e.jsxs("aside",{className:s.settingsSidebar,children:[e.jsx("div",{className:s.settingsSidebarHeader,children:"Sections"}),e.jsxs("div",{className:`${s.settingsSidebarNav} tf-scrollbar tf-scrollbar--track-transparent tf-scrollbar--compact`,children:[aa.filter(t=>t.key==="general").map(t=>e.jsxs("button",{className:`${s.settingsSidebarBtn} ${M===t.key?s.settingsSidebarBtnActive:""}`,onClick:()=>dt(t.key,t.section),children:[t.icon,e.jsx("span",{children:t.label})]},t.key)),e.jsxs("div",{className:s.settingsSidebarGroup,children:[e.jsxs("button",{className:`${s.settingsSidebarBtn} ${s.settingsSidebarGroupBtn} ${M==="appearanceApplication"||M==="appearanceTaskCards"||M==="appearanceTaskForms"?s.settingsSidebarBtnActive:""}`,onClick:()=>Xe(t=>!t),"aria-expanded":Hs,"aria-controls":"settings-appearance-nav",children:[e.jsx(xt,{size:14}),e.jsx("span",{className:s.settingsSidebarGroupLabel,children:"Appearance"}),e.jsx("span",{className:s.settingsSidebarGroupChevron,children:Hs?e.jsx(fs,{size:14}):e.jsx(be,{size:14})})]}),Hs&&e.jsx("div",{id:"settings-appearance-nav",className:s.settingsSidebarSubnav,children:en.map(t=>e.jsx("button",{className:`${s.settingsSidebarSubBtn} ${M===t.key?s.settingsSidebarBtnActive:""}`,onClick:()=>dt(t.key,t.section),children:e.jsx("span",{children:t.label})},t.key))})]}),aa.filter(t=>t.key!=="general").map(t=>e.jsxs("button",{className:`${s.settingsSidebarBtn} ${M===t.key?s.settingsSidebarBtnActive:""}`,onClick:()=>dt(t.key,t.section),children:[t.icon,e.jsx("span",{children:t.label})]},t.key))]})]}),e.jsxs("div",{className:s.settingsContent,children:[Be&&e.jsxs("div",{className:`${s.settingsToast} ${Be.type==="success"?s.settingsToastSuccess:s.settingsToastError}`,children:[Be.type==="success"?e.jsx(ge,{size:14}):e.jsx(xe,{size:14}),e.jsx("span",{children:Be.message})]}),M==="general"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:s.settingGroup,children:[e.jsxs("div",{className:`${s.settingsTabs} tf-scrollbar tf-scrollbar--track-transparent tf-scrollbar--compact`,children:[e.jsx("button",{className:`${s.settingsTabBtn} ${de==="project"?s.settingsTabBtnActive:""}`,onClick:()=>ls("project"),children:"Project"}),e.jsx("button",{className:`${s.settingsTabBtn} ${de==="global"?s.settingsTabBtnActive:""}`,onClick:()=>ls("global"),children:"Global"})]}),de==="project"&&e.jsx("div",{className:s.pathInputGroup,style:{justifyContent:"flex-end"},children:e.jsx("button",{onClick:async()=>{if(!window.confirm("Reset project Theme and Backups to global defaults?"))return;const a=await h();U({type:a?"success":"error",message:a?"Project settings reset to global.":"Failed to reset project settings."})},className:s.copyBtn,children:"Reset to Global"})})]}),de==="project"&&e.jsxs("div",{className:s.settingGroup,children:[e.jsxs("div",{className:s.pathInputGroup,children:[e.jsxs("label",{className:s.label,style:{minWidth:"110px"},children:[is==="operations"?"Mission":"Project"," name:"]}),e.jsx("input",{className:s.input,type:"text",value:vt,onChange:t=>ft(t.target.value),placeholder:is==="operations"?"Mission name":"Project name"})]}),e.jsxs("div",{className:s.pathInputGroup,children:[e.jsx("label",{className:s.label,style:{minWidth:"110px"},children:"Description:"}),e.jsx("textarea",{className:s.textarea,value:jt,onChange:t=>kt(t.target.value),placeholder:is==="operations"?"Mission description (optional)":"Project description (optional)",rows:3})]}),e.jsx("div",{className:s.pathInputGroup,style:{justifyContent:"flex-end"},children:e.jsx("button",{onClick:async()=>{if(!Rs)return;const t=await Rs({workspaceId:se?.workspaceId,name:vt,description:jt});U({type:t.success?"success":"error",message:t.success?`${is==="operations"?"Mission":"Project"} profile saved.`:t.error||"Failed to save workspace profile."})},className:s.copyBtn,disabled:!Rs,children:"Save"})})]}),de==="project"&&e.jsx("div",{className:s.settingGroup,children:yt&&e.jsxs(e.Fragment,{children:[e.jsx("h3",{className:s.settingTitle,children:"Backup"}),e.jsxs("label",{className:s.archiveToggle,children:[e.jsx("input",{type:"checkbox",checked:_,onChange:async t=>{const a=await n(t.target.checked);U({type:a?"success":"error",message:a?"Project backup setting saved.":"Failed to save project backup setting."})}}),e.jsx("span",{children:"Enable automatic JSON backup (`.taskforce/tasks.json`)"})]})]})}),de==="global"&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:s.settingGroup,children:yt&&e.jsxs(e.Fragment,{children:[e.jsx("h3",{className:s.settingTitle,children:"Backup"}),e.jsxs("label",{className:s.archiveToggle,children:[e.jsx("input",{type:"checkbox",checked:L,onChange:async t=>{const a=await c(t.target.checked);U({type:a?"success":"error",message:a?"Global backup default saved.":"Failed to save global backup default."})}}),e.jsx("span",{children:"Enable global JSON backup default"})]})]})}),e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h3",{className:s.settingTitle,children:"Regional"}),e.jsxs("div",{className:s.pathInputGroup,children:[e.jsx("label",{className:s.label,style:{minWidth:"110px"},children:"Calendar start:"}),e.jsxs("select",{className:s.input,value:G,onChange:async t=>{const a=t.target.value,d=await A(a);U({type:d?"success":"error",message:d?`Week start saved (${a==="sunday"?"Sunday":"Monday"}).`:"Failed to save week start."})},style:{maxWidth:"220px"},children:[e.jsx("option",{value:"sunday",children:"Sunday"}),e.jsx("option",{value:"monday",children:"Monday"})]})]}),e.jsxs("div",{className:s.pathInputGroup,children:[e.jsx("label",{className:s.label,style:{minWidth:"110px"},children:"Language:"}),e.jsx("select",{className:s.input,value:z,onChange:async t=>{const a=t.target.value;if(!v)return;const d=await v(a);U({type:d?"success":"error",message:d?`Language saved (${a}).`:"Failed to save language."})},style:{maxWidth:"220px"},disabled:!v,children:j.map(t=>e.jsx("option",{value:t,children:t},t))})]})]}),e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h3",{className:s.settingTitle,children:"Keyboard Shortcut"}),e.jsxs("div",{className:s.pathInputGroup,children:[e.jsxs("div",{className:s.shortcutInputWrapper,children:[e.jsx(hn,{size:16,className:s.inputIcon}),e.jsx("input",{type:"text",value:C,onChange:t=>$(t.target.value),placeholder:"e.g. Alt+T, Ctrl+Shift+K",className:`${s.input} ${s.shortcutInput}`})]}),e.jsx("button",{onClick:async()=>{const t=await K();U({type:t?"success":"error",message:t?"Global shortcut saved.":"Failed to save global shortcut."})},className:`${s.saveSettingsBtn} ${s.saveSettingsBtnWrapper}`,children:"Save"})]}),e.jsxs("p",{className:s.settingHelper,children:["Supported modifiers: Alt, Option, Ctrl, Shift, Meta (Cmd). Example: ",e.jsx("code",{children:"Alt+T"})," or ",e.jsx("code",{children:"Ctrl+Shift+L"}),"."]})]})]}),de==="project"&&Ne==="cloud"&&e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h3",{className:s.settingTitle,children:"Danger Zone"}),Sa?Gs?$a!=="owner"?e.jsx("p",{className:s.settingHelper,children:"Only workspace owners can delete a workspace."}):e.jsx("div",{className:s.pathInputGroup,children:e.jsxs("button",{className:s.destructiveBtn,onClick:async()=>{if(!Es)return;const t=String(le||"").trim();if(!t||t==="default"){U({type:"error",message:"A non-default workspace is required for deletion."});return}const a=String(_e||"").trim(),d=window.prompt(`Type "${a}" to permanently delete this workspace.`);if(d===null)return;if(d.trim()!==a){U({type:"error",message:"Workspace name confirmation did not match."});return}const N=await Es(t);if(!N.success){U({type:"error",message:N.error||"Failed to delete workspace."});return}const k=Array.isArray(N.cleanupWarnings)?N.cleanupWarnings.length:0;U({type:k>0?"error":"success",message:k>0?`Workspace deleted with ${k} cleanup warning(s).`:"Workspace deleted."})},disabled:!Es,children:[e.jsx(ze,{size:14,style:{marginRight:8}}),"Delete Workspace"]})}):e.jsx("p",{className:s.settingHelper,children:"Sign in to manage workspace deletion."}):e.jsx("p",{className:s.settingHelper,children:"Workspace deletion is available in cloud runtime only."})]})]}),M==="appearanceApplication"&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:s.settingGroup,children:e.jsxs("div",{className:`${s.settingsTabs} tf-scrollbar tf-scrollbar--track-transparent tf-scrollbar--compact`,children:[e.jsx("button",{className:`${s.settingsTabBtn} ${de==="project"?s.settingsTabBtnActive:""}`,onClick:()=>ls("project"),children:"Project"}),e.jsx("button",{className:`${s.settingsTabBtn} ${de==="global"?s.settingsTabBtnActive:""}`,onClick:()=>ls("global"),children:"Global"})]})}),de==="project"?sn():tn()]}),M==="appearanceTaskCards"&&e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h3",{className:`${s.settingTitle} tf-heading-section`,children:"Task Cards"}),e.jsxs("label",{className:s.archiveToggle,children:[e.jsx("input",{type:"checkbox",checked:P,onChange:async t=>{if(!F)return;const a=await F(t.target.checked);U({type:a?"success":"error",message:a?"Task card status label setting saved.":"Failed to save task card status label setting."})},disabled:!F}),e.jsx("span",{children:"Show status label"})]})]}),M==="appearanceTaskForms"&&an(),M==="commands"&&e.jsx(e.Fragment,{children:e.jsxs("div",{className:s.settingGroup,children:[e.jsx("div",{className:s.settingTitleRow,children:e.jsx("h3",{className:s.settingTitle,children:"Command Workflows"})}),e.jsx("p",{className:`${s.settingsHint} ${s.marginBottom12}`,children:"Export standard workflows to your project to verify and commit them."}),e.jsxs("div",{className:`${s.exportRow} ${s.exportRowGrid}`,children:[e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h4",{className:`${s.settingSubtitle} ${s.settingSubtitleCustom}`,children:"Target Environment"}),e.jsx("div",{className:s.buttonGrid,children:Ya.map(t=>e.jsxs("button",{onClick:()=>_a(t.id),className:`${s.themeBtn} ${bt===t.id?s.activeTheme:""} ${s.capitalize}`,children:[Za(t.icon),t.name]},t.id))})]}),e.jsxs("div",{className:s.exportItem,children:[e.jsxs("div",{className:s.labelGroupFlex,children:[e.jsx("label",{className:s.label,children:"Workflows"}),e.jsxs("span",{className:s.settingDescription,children:["Destination: ",e.jsx("code",{className:s.code,children:x})]})]}),e.jsxs("div",{className:s.workflowList,children:[e.jsxs("div",{className:s.workflowActions,children:[e.jsx("button",{onClick:Pa,className:s.textBtn,children:"All"}),e.jsx("button",{onClick:Da,className:s.textBtn,children:"None"})]}),e.jsx("div",{className:s.workflowGrid,children:Ae.length===0?e.jsxs("div",{className:s.emptyState,children:["No workflow templates found.",e.jsx("button",{onClick:()=>La?.(!0),className:s.secondaryBtn,style:{marginTop:"8px"},children:"Retry Fetch"})]}):Ae.map(t=>e.jsxs("label",{className:s.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:Ke.includes(t),onChange:()=>Ba(t)}),t]},t))})]}),e.jsxs("button",{className:`${s.secondaryHeaderBtn} ${s.marginTop12}`,onClick:()=>Aa?.(bt,Ke),disabled:w==="workflows"||Ke.length===0,children:[w==="workflows"?e.jsx(Te,{size:14,className:s.spinner}):e.jsx(ya,{size:14}),"Export Selected (",Ke.length,")"]})]})]}),D&&e.jsxs("div",{className:`${D.type==="success"?s.successMessage:s.errorMessage} ${s.marginTop12}`,children:[D.type==="success"?e.jsx(ge,{size:14}):e.jsx(xe,{size:14}),D.message]})]})}),M==="initiatives"&&e.jsxs("div",{className:s.settingGroup,children:[e.jsxs("div",{className:s.settingTitleRow,children:[e.jsx("h3",{className:s.settingTitle,children:"Initiative Templates"}),e.jsx("button",{className:s.copyBtn,onClick:()=>{Fs?.()},children:"Refresh"})]}),e.jsx("p",{className:`${s.settingsHint} ${s.marginBottom12}`,children:"Create launch, migration, or incident initiatives from reusable templates."}),e.jsxs("div",{className:s.exportItem,children:[e.jsx("label",{className:s.label,children:"Template"}),e.jsx("select",{className:s.input,value:qe,onChange:t=>{const a=t.target.value;Nt(a)},children:Le.map(t=>e.jsx("option",{value:t.id,children:t.name},t.id))})]}),e.jsxs("div",{className:`${s.exportItem} ${s.marginTop12}`,children:[e.jsx("label",{className:s.label,children:"Initiative Title"}),e.jsx("input",{className:s.input,placeholder:"e.g. Taskforce Private Beta Launch",value:Os,onChange:t=>Ea(t.target.value)})]}),e.jsxs("button",{className:`${s.secondaryHeaderBtn} ${s.marginTop12}`,disabled:Ct||!qe||!Os.trim()||!zs,onClick:async()=>{if(!zs)return;wt(!0);const t=await zs({templateId:qe,title:Os.trim()});wt(!1),U({type:t.success?"success":"error",message:t.success?"Initiative created from template.":t.error||"Failed to create initiative."})},children:[Ct?e.jsx(Te,{size:14,className:s.spinner}):e.jsx(js,{size:14}),"Create Initiative"]})]}),M==="agents"&&e.jsx("div",{className:s.settingGroup,children:e.jsxs("div",{children:[e.jsx("h4",{className:s.settingSubTitle,children:"Registered AI Profiles"}),e.jsx("p",{className:`${s.settingsHint} ${s.marginBottom12}`,children:"AI agents register profiles when connecting via MCP. Merge duplicates created when a token was lost."}),Ws&&e.jsxs("div",{className:s.settingsHint,children:[e.jsx(Te,{size:13,className:s.spinner})," Loading profiles…"]}),!Ws&&oe.length===0&&e.jsx("div",{className:s.settingsHint,children:"No AI profiles registered yet."}),!Ws&&oe.length>0&&(()=>{const t=new Map;for(const a of oe){const d=a.name.toLowerCase();t.has(d)||t.set(d,[]),t.get(d).push(a)}return e.jsx("div",{className:s.aiProfilesList,children:Array.from(t.entries()).map(([,a])=>e.jsxs("div",{className:`${s.aiProfileGroup} ${a.length>1?s.aiProfileGroupDuplicate:""}`,children:[e.jsxs("div",{className:s.aiProfileGroupHeader,children:[e.jsx(pa,{size:13,style:{color:a[0].color}}),e.jsx("span",{className:s.aiProfileName,children:a[0].name}),a.length>1&&e.jsxs("span",{className:s.aiProfileDuplicateBadge,children:[e.jsx(xe,{size:11})," ",a.length," duplicates"]})]}),e.jsxs("div",{className:s.settingsHint,style:{marginTop:6},children:["@",a[0].username,a[0].role?` · ${a[0].role}`:""]}),a[0].description&&e.jsx("div",{className:s.settingsHint,style:{marginTop:4},children:a[0].description}),(a[0].provider||a[0].model)&&e.jsx("div",{className:s.settingsHint,style:{marginTop:4},children:[a[0].provider,a[0].model].filter(Boolean).join(" · ")}),a.length>1&&e.jsxs("div",{className:s.aiProfileMergeSection,children:[a.map(d=>e.jsxs("div",{className:s.aiProfileMergeRow,children:[e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[e.jsx("span",{className:s.aiProfileIdChip,children:d.id}),e.jsxs("span",{className:s.settingsHint,children:["@",d.username]})]}),ye?.keepId!==d.id&&e.jsx("button",{className:s.secondaryHeaderBtn,title:"Keep this profile, merge others into it",onClick:()=>{const N=a.find(k=>k.id!==d.id)?.id;N&&Us({keepId:d.id,mergeId:N})},children:"Keep this"}),ye?.keepId===d.id&&e.jsx("span",{className:s.aiProfileKeepBadge,children:"✓ keeping"})]},d.id)),ye&&a.some(d=>d.id===ye.keepId)&&e.jsxs("div",{className:s.aiProfileMergeActions,children:[e.jsxs("button",{className:s.dangerBtn,onClick:()=>Ga(ye.keepId,ye.mergeId),children:["Merge (keep ",ye.keepId.slice(-6),", delete ",ye.mergeId.slice(-6),")"]}),e.jsx("button",{className:s.secondaryHeaderBtn,onClick:()=>Us(null),children:"Cancel"})]})]})]},a[0].id))})})(),os&&e.jsxs("div",{className:`${os.type==="success"?s.successMessage:s.errorMessage} ${s.marginTop12}`,children:[os.type==="success"?e.jsx(ge,{size:14}):e.jsx(xe,{size:14}),os.message]})]})}),M==="taxonomy"&&e.jsxs("div",{className:`${s.settingGroup} ${s.flex1} ${s.flexCol}`,children:[e.jsx("h3",{className:s.settingTitle,children:"Taxonomy & Classification"}),e.jsx("p",{className:s.settingsHint,children:"Configure categories, task types, and custom classification systems."}),e.jsx(Pl,{taxonomies:As,onUpdateTaxonomies:Ls,onApplySystemTaxonomyPack:Ca,taxonomyDisplayLabels:Is,onUpdateTaxonomyDisplayLabels:wa,categories:Ss,pathValidation:$s,onUpdateCategory:Se,onRemoveCategory:ss,onSaveCategory:ts,onAddPath:as,onRemovePath:_s,onUpdateCategoryIcon:ke,onUpdateCategoryColor:f,onBrowseFolders:Qa,types:q,onSaveType:Y,onRemoveType:We,onUpdateType:Ue,priorities:ja,onUpdatePriorities:ka,onAnalyzeSystemTaxonomyPack:Na,manualComplexityEnabled:B,onManualComplexityEnabledChange:async t=>{const a=await O(t);U({type:a?"success":"error",message:a?"Project complexity setting saved.":"Failed to save project complexity setting."})},initialTab:m==="categories"||m==="types"||m==="priorities"?m:void 0})]}),M==="mcp"&&e.jsxs("div",{className:s.settingsGroup,children:[Ha&&e.jsxs("div",{className:s.settingsTabs,children:[e.jsx("button",{className:`${s.settingsTabBtn} ${ds==="cloud"?s.settingsTabBtnActive:""}`,onClick:()=>Ks("cloud"),children:"Cloud MCP"}),e.jsx("button",{className:`${s.settingsTabBtn} ${ds==="local"?s.settingsTabBtnActive:""}`,onClick:()=>Ks("local"),children:"Local MCP"})]}),it&&e.jsx(e.Fragment,{children:Xt?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:`${s.settingGroup} ${s.marginTop16}`,children:[e.jsxs("div",{className:s.settingLabelGroup,children:[e.jsx("h3",{className:s.settingTitle,children:"OAuth Connector Setup"}),e.jsx("span",{className:s.settingDescription,children:ae==="chatgpt-desktop"?"ChatGPT Desktop uses the Taskforce OAuth connector flow instead of a personal MCP token.":"Claude Desktop uses the Taskforce OAuth connector flow instead of a personal MCP token."})]}),e.jsx("div",{className:`${ys?s.successMessage:s.settingHelper} ${s.marginTop12}`,children:ys?e.jsxs(e.Fragment,{children:[e.jsx(ge,{size:14}),e.jsxs("div",{children:[e.jsx("div",{children:"Connector already authorized for this workspace."}),e.jsxs("div",{className:s.settingHelper,children:["Last used ",ys.lastUsedAt?new Date(ys.lastUsedAt).toLocaleString():"not yet"]})]})]}):"No active connector authorization for this workspace yet."}),e.jsx("div",{className:s.settingDescription,style:{marginTop:"12px"},children:"Use the server URL above in your client, then finish the OAuth authorization flow from the Integrations tab."}),e.jsx("div",{style:{display:"flex",justifyContent:"flex-end",width:"100%",marginTop:"12px"},children:e.jsx("button",{className:s.copyBtn,onClick:()=>te("integrations"),children:"Open Integrations"})})]}),e.jsxs("div",{className:`${s.settingGroup} ${s.marginTop16}`,children:[e.jsxs("div",{className:`${s.codeBlockWrapper} ${s.codeBlockWrapperCustom} ${s.marginTop12}`,style:{minHeight:"260px"},children:[e.jsxs("div",{className:s.codeHeader,children:[e.jsx("span",{className:s.codeLabel,children:"Cloud MCP Configuration"}),e.jsxs("div",{className:s.codeHeaderActions,children:[e.jsx("select",{className:s.settingInput,value:ae,onChange:t=>Ft(t.target.value),"aria-label":"MCP client",style:{width:"auto",minWidth:"170px",padding:"6px 12px",fontSize:"12px",borderRadius:"8px"},children:mt.map(t=>e.jsx("option",{value:t.id,disabled:t.disabled,children:t.label},t.id))}),e.jsx("button",{className:`${s.copyBtn} ${ve==="full"?s.copyBtnActive:""}`,onClick:Qt,title:"Copy full configuration file",children:ve==="full"?e.jsx(ge,{size:14}):e.jsx(ut,{size:14})})]})]}),e.jsx("pre",{className:s.codeBlock,children:e.jsx("code",{children:bs?ot(Ge,bs,V.rootKey||"mcpServers",V.wrapperKeys||[]):Zt(V.renderedText||"")})})]}),e.jsxs("div",{className:`${s.codeBlockWrapper} ${s.marginTop12}`,children:[e.jsx("div",{className:s.codeHeader,children:e.jsx("span",{className:s.codeLabel,children:V.instructionLabel})}),e.jsx("div",{style:{padding:"16px 20px"},children:e.jsx("div",{className:s.settingDescription,children:V.instructionText})})]})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:`${s.settingGroup} ${s.marginTop16}`,children:[e.jsxs("div",{className:s.settingLabelGroup,children:[e.jsx("h3",{className:s.settingTitle,children:"Generate Token"}),e.jsx("span",{className:s.settingDescription,children:"Tokens are shown once. Default scopes allow task read/write. Add workspace read if you want config and skills metadata in the client."})]}),e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"minmax(0, 2fr) minmax(220px, 1fr)",gap:"12px",alignItems:"end"},children:[e.jsxs("div",{className:s.settingsItem,children:[e.jsx("div",{className:s.settingLabelGroup,children:e.jsx("span",{className:s.settingDescription,children:"Token Name"})}),e.jsx("input",{type:"text",className:s.settingInput,placeholder:"Cursor on MacBook",value:Et,onChange:t=>Qs(t.target.value)})]}),e.jsxs("div",{className:s.settingsItem,children:[e.jsx("div",{className:s.settingLabelGroup,children:e.jsx("span",{className:s.settingDescription,children:"Expiry (Optional)"})}),e.jsx("input",{type:"date",className:`${s.settingInput} ${s.taskFormDateInput}`,value:et,onChange:t=>Gt(t.target.value)})]})]}),e.jsxs("div",{className:`${s.settingsItem} ${s.marginTop12}`,children:[e.jsx("div",{className:s.settingLabelGroup,children:e.jsx("span",{className:s.settingDescription,children:"Scopes"})}),e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"96px repeat(3, minmax(110px, 1fr))",gap:"10px 16px",alignItems:"center"},children:[e.jsx("span",{}),e.jsx("span",{className:s.settingDescription,children:"Tasks"}),e.jsx("span",{className:s.settingDescription,children:"Workspace"}),e.jsx("span",{className:s.settingDescription,style:{opacity:.55},children:"Attachments"}),e.jsx("span",{className:s.settingDescription,children:"Read"}),e.jsx("label",{className:s.checkboxLabel,children:e.jsx("input",{type:"checkbox",className:s.checkboxSmall,checked:Ye.includes("tasks:read"),onChange:()=>rt("tasks:read")})}),e.jsx("label",{className:s.checkboxLabel,children:e.jsx("input",{type:"checkbox",className:s.checkboxSmall,checked:Ye.includes("workspace:read"),onChange:()=>rt("workspace:read")})}),e.jsx("label",{className:s.checkboxLabel,style:{opacity:.55},children:e.jsx("input",{type:"checkbox",className:s.checkboxSmall,checked:!1,disabled:!0})}),e.jsx("span",{className:s.settingDescription,children:"Write"}),e.jsx("label",{className:s.checkboxLabel,children:e.jsx("input",{type:"checkbox",className:s.checkboxSmall,checked:Ye.includes("tasks:write"),onChange:()=>rt("tasks:write")})}),e.jsx("label",{className:s.checkboxLabel,children:e.jsx("input",{type:"checkbox",className:s.checkboxSmall,checked:!1,disabled:!0})}),e.jsx("label",{className:s.checkboxLabel,style:{opacity:.55},children:e.jsx("input",{type:"checkbox",className:s.checkboxSmall,checked:!1,disabled:!0})})]})]})]}),e.jsxs("div",{className:`${s.settingGroup} ${s.marginTop16}`,children:[e.jsxs("div",{className:s.settingLabelGroup,children:[e.jsx("h3",{className:s.settingTitle,children:"Automation Identity (Optional)"}),e.jsx("span",{className:s.settingDescription,children:"For recurring or background AI workers, set an AI name here so the generated MCP config includes Taskforce automation headers. After the first run, paste the returned profile token too so the same AI profile is reused across runs without extra bootstrap steps."})]}),oe.length>0&&e.jsxs("div",{className:`${s.settingsItem} ${s.marginTop12}`,children:[e.jsx("div",{className:s.settingLabelGroup,children:e.jsx("span",{className:s.settingDescription,children:"Use Existing AI Profile"})}),e.jsxs("select",{className:s.settingInput,"aria-label":"Use existing AI profile",value:lt,onChange:t=>{const a=t.target.value;if(!a){st(""),tt("");return}const d=oe.find(N=>N.id===a);d&&(st(d.name),tt(String(d.profileToken||"")))},children:[e.jsx("option",{value:"",children:"Custom…"}),oe.map(t=>e.jsxs("option",{value:t.id,children:[t.name," (@",t.username,")"]},t.id))]})]}),e.jsxs("div",{style:{display:"grid",gridTemplateColumns:"minmax(0, 1fr) minmax(0, 1fr)",gap:"12px",alignItems:"end"},children:[e.jsxs("div",{className:s.settingsItem,children:[e.jsx("div",{className:s.settingLabelGroup,children:e.jsx("span",{className:s.settingDescription,children:"AI Name Header"})}),e.jsx("input",{type:"text",className:s.settingInput,placeholder:"Automation Codex",value:De,onChange:t=>st(t.target.value)})]}),e.jsxs("div",{className:s.settingsItem,children:[e.jsx("div",{className:s.settingLabelGroup,children:e.jsx("span",{className:s.settingDescription,children:"AI Profile Token Header"})}),e.jsx("input",{type:"text",className:s.settingInput,placeholder:"tfp_...",value:Me,onChange:t=>tt(t.target.value)})]})]})]}),e.jsxs("div",{className:`${s.settingGroup} ${s.marginTop16}`,children:[e.jsx("div",{className:s.settingHelper,children:"Generated tokens are only shown once. Copy the token before leaving this page."}),(()=>{const t=ve==="token"?"Copied to clipboard":X||"";return e.jsx("div",{style:{display:"flex",gap:"8px",alignItems:"stretch"},children:e.jsx("div",{className:s.codeBlockWrapper,style:{flex:1,cursor:X?"pointer":"default"},onClick:()=>X&&vs(X,"token"),role:X?"button":void 0,tabIndex:X?0:-1,onKeyDown:a=>{X&&(a.key==="Enter"||a.key===" ")&&(a.preventDefault(),vs(X,"token"))},title:X?ve==="token"?"Token copied":"Click to copy token":void 0,children:e.jsx("pre",{className:s.codeBlock,style:{textAlign:"center"},children:e.jsx("code",{children:t})})})})})()]}),e.jsxs("div",{className:`${s.settingGroup} ${s.marginTop16}`,children:[hs?.type==="error"&&e.jsxs("div",{className:`${s.errorMessage} ${s.marginTop12}`,children:[e.jsx(xe,{size:14}),hs.message]}),e.jsxs("div",{className:`${s.codeBlockWrapper} ${s.codeBlockWrapperCustom} ${s.marginTop12}`,style:{minHeight:"260px"},children:[e.jsxs("div",{className:s.codeHeader,children:[e.jsx("span",{className:s.codeLabel,children:"Cloud MCP Configuration"}),e.jsxs("div",{className:s.codeHeaderActions,children:[e.jsx("select",{className:s.settingInput,value:ae,onChange:t=>Ft(t.target.value),"aria-label":"MCP client",style:{width:"auto",minWidth:"170px",padding:"6px 12px",fontSize:"12px",borderRadius:"8px"},children:mt.map(t=>e.jsx("option",{value:t.id,disabled:t.disabled,children:t.label},t.id))}),e.jsxs("button",{className:s.copyBtn,onClick:()=>{qa()},disabled:ps==="create",title:"Generate Token","aria-label":"Generate Token",children:[ps==="create"?e.jsx(Te,{size:14,className:s.spinIcon}):e.jsx(js,{size:14}),e.jsx("span",{children:"GENERATE TOKEN"})]}),e.jsx("button",{className:`${s.copyBtn} ${ve==="full"?s.copyBtnActive:""}`,onClick:Qt,title:"Copy full configuration file",children:ve==="full"?e.jsx(ge,{size:14}):e.jsx(ut,{size:14})})]})]}),e.jsx("pre",{className:s.codeBlock,children:e.jsx("code",{children:bs?ot(Ge,bs,V.rootKey||"mcpServers",V.wrapperKeys||[]):Zt(V.renderedText||"")})})]}),e.jsxs("div",{className:`${s.codeBlockWrapper} ${s.marginTop12}`,children:[e.jsx("div",{className:s.codeHeader,children:e.jsx("span",{className:s.codeLabel,children:V.instructionLabel})}),e.jsx("div",{style:{padding:"16px 20px"},children:e.jsx("div",{className:s.settingDescription,children:V.instructionText})})]})]}),e.jsxs("div",{className:`${s.settingGroup} ${s.marginTop16}`,children:[e.jsxs("div",{className:s.toggleHeading,onClick:()=>Bt(t=>!t),onKeyDown:t=>{(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),Bt(a=>!a))},role:"button",tabIndex:0,title:qs?"Hide connection test":"Show connection test",children:[e.jsx("label",{className:s.label,children:"Test Connection"}),qs?e.jsx(fs,{size:14}):e.jsx(be,{size:14})]}),qs&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:`${s.settingDescription} ${s.marginTop12}`,children:"Validate that a token works for this workspace before you paste it into your MCP client."}),e.jsxs("div",{className:`${s.settingsItem} ${s.marginTop12}`,children:[e.jsx("div",{className:s.settingLabelGroup,children:e.jsx("span",{className:s.settingDescription,children:"Token to Test"})}),e.jsx("input",{type:"text",className:s.settingInput,placeholder:"tfmcp_xxxxx_replace-me",value:zt,onChange:t=>{at(t.target.value),fe(null)}})]}),e.jsxs("div",{className:s.marginTop12,style:{display:"flex",gap:"8px",flexWrap:"wrap",justifyContent:"flex-end"},children:[X&&e.jsx("button",{className:s.copyBtn,onClick:()=>{at(X),fe(null)},children:"Use Generated Token"}),e.jsxs("button",{className:s.copyBtn,onClick:()=>{Xa()},disabled:Ot,children:[Ot?e.jsx(Te,{size:14,className:s.spinIcon}):e.jsx(js,{size:14}),"Test Connection"]})]}),Z&&e.jsxs("div",{className:`${Z.type==="success"?s.successMessage:s.errorMessage} ${s.marginTop12}`,children:[Z.type==="success"?e.jsx(ge,{size:14}):e.jsx(xe,{size:14}),e.jsxs("div",{children:[e.jsx("div",{children:Z.message}),Z.type==="success"&&(Z.workspaceName||Z.workspaceId)&&e.jsxs("div",{className:s.settingHelper,children:["Workspace: ",Z.workspaceName||Z.workspaceId,Z.workspaceId?` (${Z.workspaceId})`:""]}),Z.type==="success"&&Array.isArray(Z.scopes)&&Z.scopes.length>0&&e.jsxs("div",{className:s.settingHelper,children:["Granted scopes: ",Z.scopes.join(", ")]})]})]})]})]}),e.jsxs("div",{className:`${s.settingGroup} ${s.marginTop16}`,children:[e.jsxs("div",{className:s.toggleHeading,onClick:()=>Pt(t=>!t),onKeyDown:t=>{(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),Pt(a=>!a))},role:"button",tabIndex:0,title:Xs?"Hide workspace tokens":"Show workspace tokens",children:[e.jsx("label",{className:s.label,children:"Your Tokens"}),Xs?e.jsx(fs,{size:14}):e.jsx(be,{size:14})]}),Xs&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:`${s.settingDescription} ${s.marginTop12}`,children:"Manage tokens created for this workspace."}),Fa?e.jsx("p",{className:s.settingHelper,children:"Loading tokens…"}):Mt?e.jsxs("div",{className:s.errorMessage,children:[e.jsx(xe,{size:14}),Mt]}):Js.length===0?e.jsx("p",{className:s.settingHelper,children:"No MCP tokens yet."}):e.jsx("div",{className:s.settingGroup,children:Ua.map(t=>e.jsxs("div",{className:`${s.settingsItem} ${s.marginTop12}`,style:{padding:"14px 16px",borderRadius:"12px",border:"1px solid var(--border-primary, rgba(255, 255, 255, 0.1))",background:"rgba(255, 255, 255, 0.03)"},children:[e.jsxs("div",{className:s.settingLabelGroup,children:[e.jsxs("div",{className:s.labelGroupFlex,children:[e.jsx("label",{className:s.settingLabel,children:t.name}),e.jsx("span",{className:`${s.configBadge} ${t.status==="revoked"?s.configBadgeRevoked:t.status==="expired"?s.configBadgeExpired:s.configBadgeActive}`,children:t.status})]}),e.jsx("span",{className:s.settingDescription,style:{fontFamily:'"JetBrains Mono", "Fira Code", monospace'},children:t.tokenPrefix}),e.jsxs("span",{className:s.settingDescription,children:["Scopes: ",t.scopes.join(", ")]}),e.jsxs("span",{className:s.settingDescription,children:["Created ",new Date(t.createdAt).toLocaleDateString(),t.lastUsedAt?` · Last used ${new Date(t.lastUsedAt).toLocaleString()}`:" · Never used"]})]}),e.jsxs("div",{style:{display:"flex",gap:"8px",flexWrap:"wrap",justifyContent:"flex-end"},children:[t.status!=="revoked"&&e.jsx("button",{className:s.copyBtn,onClick:()=>{ta(t.id,"regenerate")},disabled:ps===`regenerate:${t.id}`,children:"Regenerate"}),t.status==="active"&&e.jsx("button",{className:s.copyBtn,onClick:()=>{ta(t.id,"revoke")},disabled:ps===`revoke:${t.id}`,children:"Revoke"})]})]},t.id))})]})]})]})}),Wa&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:`${s.settingGroup} ${s.marginTop16}`,children:e.jsxs("div",{className:s.settingLabelGroup,children:[e.jsx("h3",{className:s.settingTitle,children:"Local MCP"}),e.jsx("span",{className:s.settingDescription,children:"Local MCP runs over stdio and does not require a cloud token. Use this for Codex, Claude Code CLI, Gemini CLI, and similar local MCP clients."})]})}),e.jsxs("div",{className:`${s.codeBlockWrapper} ${s.codeBlockWrapperCustom}`,children:[e.jsxs("div",{className:s.codeHeader,children:[e.jsx("span",{className:s.codeLabel,children:"Local MCP Configuration"}),e.jsx("div",{className:s.codeHeaderActions,children:e.jsx("button",{className:`${s.copyBtn} ${ve==="full"?s.copyBtnActive:""}`,onClick:()=>Ka("full"),title:"Copy full configuration file",children:ve==="full"?e.jsx(ge,{size:14}):e.jsx(ut,{size:14})})})]}),e.jsx("pre",{className:s.codeBlock,children:e.jsx("code",{children:(()=>{const{serverId:t,serverConfig:a}=ea();return ot(t,a)})()})})]}),e.jsx("div",{className:`${s.settingGroup} ${s.marginTop12}`,children:e.jsxs("div",{className:s.toggleHeading,onClick:()=>Lt(t=>!t),onKeyDown:t=>{(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),Lt(a=>!a))},role:"button",tabIndex:0,title:"Show advanced MCP install options",children:[e.jsx("label",{className:s.label,children:"Advanced"}),At?e.jsx(fs,{size:14}):e.jsx(be,{size:14})]})}),At&&e.jsxs("div",{className:`${s.settingGroup} ${s.marginTop12}`,children:[e.jsxs("div",{className:s.settingLabelGroup,children:[e.jsx("h3",{className:s.settingTitle,children:"Advanced Installation Mode"}),e.jsx("span",{className:s.settingDescription,children:"Global mode is recommended. Local / npx is intended for Taskforce development workflows."})]}),e.jsxs("div",{className:s.buttonGrid,children:[e.jsx("button",{className:`${s.themeBtn} ${Je?s.activeTheme:""}`,onClick:()=>_t(!0),children:"Global"}),e.jsx("button",{className:`${s.themeBtn} ${Je?"":s.activeTheme}`,onClick:()=>_t(!1),children:"Local / npx (Dev)"})]}),e.jsxs("div",{className:`${s.settingsItem} ${s.marginTop16}`,children:[e.jsxs("div",{className:s.settingLabelGroup,children:[e.jsxs("div",{className:s.labelGroupFlex,children:[e.jsx("label",{className:s.settingLabel,children:"MCP Path Mapping (Host Root)"}),Ps&&!Bs&&e.jsx("span",{className:s.configBadge,children:"Server Configured"})]}),e.jsx("span",{className:s.settingDescription,children:"If running in Docker, WSL, or Remote Dev, provide the absolute path to this project as seen by your host OS."})]}),e.jsx("div",{className:s.pathInputWrapper,children:e.jsx("input",{type:"text",className:s.settingInput,placeholder:Ps||"/Users/username/Projects/my-project or C:\\Projects\\my-project",value:Bs||"",onChange:t=>Ia?.(t.target.value)})})]})]})]})]}),M==="integrations"&&e.jsxs("div",{className:s.settingsGroup,children:[e.jsx("div",{className:s.settingGroup,children:e.jsxs("div",{className:s.settingLabelGroup,children:[e.jsx("h3",{className:s.settingTitle,children:"Integrations"}),e.jsx("span",{className:s.settingDescription,children:"Manage OAuth-based app connectors separately from MCP tokens and local client setup."})]})}),e.jsxs("div",{className:`${s.settingGroup} ${s.marginTop16}`,children:[[{key:"chatgpt",label:"ChatGPT Connector",description:"Use the dedicated MCP host in ChatGPT Apps & Connectors. Taskforce handles OAuth and binds each connector authorization to one workspace.",emptyMessage:"No active ChatGPT connector grant for this workspace yet.",connector:Jt},{key:"claude",label:"Claude Desktop Connector",description:"Use the dedicated MCP host in Claude Desktop Settings > Connectors. Taskforce handles OAuth and binds each connector authorization to one workspace.",emptyMessage:"No active Claude Desktop connector grant for this workspace yet.",connector:Yt}].map(t=>{const a=t.connector;return e.jsxs("div",{className:`${s.settingsItem} ${s.marginTop12}`,style:{padding:"16px",borderRadius:"14px",border:"1px solid var(--border-primary, rgba(255, 255, 255, 0.1))",background:"rgba(255, 255, 255, 0.03)"},children:[e.jsxs("div",{className:s.settingLabelGroup,children:[e.jsxs("div",{className:s.labelGroupFlex,children:[e.jsx("label",{className:s.settingLabel,children:t.label}),e.jsx("span",{className:`${s.configBadge} ${a?s.configBadgeActive:s.configBadgeRevoked}`,children:a?"connected":"not connected"})]}),e.jsx("span",{className:s.settingDescription,children:t.description}),e.jsx("span",{className:s.settingDescription,style:{fontFamily:'"JetBrains Mono", "Fira Code", monospace'},children:nt}),a?e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:s.settingDescription,children:["Authorized workspace: ",_e||a.workspaceId]}),e.jsxs("span",{className:s.settingDescription,children:["Granted scopes: ",a.scopes.join(", ")]}),e.jsxs("span",{className:s.settingDescription,children:["Connected ",new Date(a.createdAt).toLocaleString(),a.lastUsedAt?` · Last used ${new Date(a.lastUsedAt).toLocaleString()}`:" · Never used"]})]}):e.jsx("span",{className:s.settingDescription,children:t.emptyMessage})]}),e.jsx("div",{style:{display:"flex",justifyContent:"flex-end",gap:"8px",flexWrap:"wrap"},children:a&&e.jsxs("button",{className:s.copyBtn,onClick:()=>{Ja(a.id)},disabled:Kt===a.id,children:[Kt===a.id?e.jsx(Te,{size:14,className:s.spinIcon}):e.jsx(ze,{size:14}),"Disconnect"]})})]},t.key)}),Oa&&e.jsx("p",{className:`${s.settingHelper} ${s.marginTop12}`,children:"Loading connector grants…"}),Vt&&e.jsxs("div",{className:`${s.errorMessage} ${s.marginTop12}`,children:[e.jsx(xe,{size:14}),Vt]})]})]})]})]})})}export{Ul as TaskSettings};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{r as i,j as e}from"./vendor-react-CKJs5o3c.js";import{t as s}from"./index-xBWLPOEb.js";import{h as R,R as ae,c as le,r as ie,b as ne,k as oe}from"./vendor-icons-QZyhEwgT.js";import"./vendor-markdown-BUxTU7dS.js";import"./vendor-dnd-DRzYolkg.js";import"./vendor-router-BbWMxlnO.js";const re={do:["aliasesText","dispatchDefault","criticalToolsText","contentDefault"],execute:["aliasesText","dispatchDefault","criticalToolsText","contentDefault"]},V=["do","evaluate","collaborate","plan","review","execute"];function w(o){return{description:o.description||"",aliasesText:(o.dispatch?.aliases||[]).join(", "),dispatchDefault:o.dispatch?.default||"",criticalToolsText:(o.compat?.requiredToolsCritical||[]).join(`
|
|
2
|
+
`),optionalToolsText:(o.compat?.requiredToolsOptional||[]).join(`
|
|
3
|
+
`),contentDefault:o.content?.default||""}}function g(o){return o.split(/\n|,/).map(f=>f.trim()).filter(Boolean)}function ce(o){return Array.from(new Set(o.map(f=>f.trim()).filter(Boolean)))}function de(o){const{availableWorkflows:f,onFetchWorkflowTemplate:j,onFetchWorkflowOverrideNames:T,onSaveWorkflowTemplateDraft:k,onResetWorkflowTemplateDraft:v}=o,[c,D]=i.useState(""),[A,b]=i.useState(!1),[C,y]=i.useState(null),[d,m]=i.useState(null),[a,h]=i.useState(null),[r,u]=i.useState(null),[S,W]=i.useState(!1),[P,E]=i.useState(!1),[X,L]=i.useState([]),[H,_]=i.useState(""),[O,K]=i.useState(""),[F,U]=i.useState(""),B=i.useMemo(()=>{const t=V.filter(n=>f.includes(n)),l=f.filter(n=>!V.includes(n)).sort((n,x)=>n.localeCompare(x));return[...t,...l]},[f]);i.useEffect(()=>{!c&&B.length>0&&D(B[0])},[B,c]),i.useEffect(()=>{let t=!1;return(async()=>{if(!T)return;const n=await T();t||L(n)})(),()=>{t=!0}},[T,f]),i.useEffect(()=>{let t=!1;return(async()=>{if(!c||!j)return;b(!0),y(null);const n=await j(c);if(t)return;if(!n){m(null),h(null),y("Unable to load workflow template. Reload Taskforce, and if needed restart the dev/server process."),b(!1);return}const x=n;m(x),h(w(x)),b(!1)})(),()=>{t=!0}},[c,j]);const $=i.useMemo(()=>{if(!a)return[];const t=[];return a.description.trim()||t.push("Description is required."),a.dispatchDefault.trim()||t.push("Dispatch default is required."),g(a.criticalToolsText).length===0&&t.push("At least one critical tool is required."),a.contentDefault.trim()||t.push("Default content cannot be empty."),t},[a]),I=i.useMemo(()=>re[c]||[],[c]),p=t=>I.includes(t),M=i.useMemo(()=>{if(!d||!a)return[];const t=w(d),l=[];return t.description!==a.description&&l.push("description"),t.aliasesText!==a.aliasesText&&l.push("aliases"),t.dispatchDefault!==a.dispatchDefault&&l.push("dispatch.default"),t.criticalToolsText!==a.criticalToolsText&&l.push("compat.requiredToolsCritical"),t.optionalToolsText!==a.optionalToolsText&&l.push("compat.requiredToolsOptional"),t.contentDefault!==a.contentDefault&&l.push("content.default"),l},[d,a]),G=i.useMemo(()=>!d||!a?"":[`# ${d.name} Preview`,"",`Description: ${a.description}`,`Aliases: ${a.aliasesText||"(none)"}`,`Dispatch default: ${a.dispatchDefault||"(none)"}`,"","## Critical Tools",...g(a.criticalToolsText).map(t=>`- ${t}`),"","## Optional Tools",...g(a.optionalToolsText).map(t=>`- ${t}`),"","## Prompt Content Preview",a.contentDefault].join(`
|
|
4
|
+
`),[d,a]),N=i.useMemo(()=>d?w(d):null,[d]),Y=i.useMemo(()=>{if(!N||!a)return[];const t=[],l=(n,x,Q)=>{x!==Q&&t.push({field:n,before:x,after:Q})};return l("description",N.description,a.description),l("aliases",N.aliasesText,a.aliasesText),l("dispatch.default",N.dispatchDefault,a.dispatchDefault),l("compat.requiredToolsCritical",N.criticalToolsText,a.criticalToolsText),l("compat.requiredToolsOptional",N.optionalToolsText,a.optionalToolsText),l("content.default",N.contentDefault,a.contentDefault),t},[N,a]),Z=()=>{d&&h(w(d))},ee=async()=>{G&&await navigator.clipboard.writeText(G)},se=async()=>{if(!c||!a||$.length>0||!k)return;W(!0),u(null);const t=await k(c,a);if(!t.success){u({type:"error",message:t.error||"Failed to save workflow draft."}),W(!1);return}const l=j?await j(c):null;if(l&&(m(l),h(w(l))),u({type:"success",message:"Workflow draft saved and templates regenerated."}),T){const n=await T();L(n)}W(!1)},te=async()=>{if(!c||!v)return;E(!0),u(null);const t=await v(c);if(!t.success){u({type:"error",message:t.error||"Failed to reset workflow override."}),E(!1);return}const l=j?await j(c):null;if(l&&(m(l),h(w(l))),u({type:"success",message:"Workflow override reset and templates regenerated."}),T){const n=await T();L(n)}E(!1)},J=(t,l)=>{if(!a)return;const n=ce(l).join(`
|
|
5
|
+
`);h({...a,[t]:n})},q=(t,l)=>{const n=g(a?.[t]||"");J(t,n.filter(x=>x!==l))},z=(t,l,n)=>{if(!a||!l.trim())return;const x=g(a[t]||"");J(t,[...x,l]),n()};return e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h3",{className:s.settingTitle,children:"Workflow Editor"}),e.jsx("p",{className:s.settingsHint,children:"Inspect workflow structure, edit a draft, validate, preview, and save via the override layer. Critical fields are locked for `do` and `execute`."}),e.jsxs("div",{className:s.pathInputGroup,children:[e.jsx("label",{className:s.label,htmlFor:"workflow-editor-select",children:"Workflow"}),e.jsx("select",{id:"workflow-editor-select",className:s.input,value:c,onChange:t=>D(t.target.value),children:B.map(t=>e.jsx("option",{value:t,children:X.includes(t)?`${t} (override)`:t},t))})]}),A&&e.jsxs("div",{className:s.settingsHint,children:[e.jsx(R,{size:14,className:s.spinner})," Loading template..."]}),C&&e.jsx("div",{className:s.errorMessage,children:C}),a&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:`${s.exportRow} ${s.exportRowGrid}`,style:{marginTop:12},children:[e.jsxs("div",{className:s.exportItem,children:[e.jsx("label",{className:s.label,children:"Description"}),e.jsx("input",{className:s.input,value:a.description,onChange:t=>h({...a,description:t.target.value}),disabled:p("description")}),e.jsx("label",{className:s.label,children:"Aliases (comma-separated)"}),e.jsxs("div",{className:s.pathInputGroup,children:[e.jsx("input",{className:s.input,value:H,onChange:t=>_(t.target.value),placeholder:"Add alias (e.g. /execute)",disabled:p("aliasesText")}),e.jsx("button",{className:s.secondaryHeaderBtn,onClick:()=>z("aliasesText",H,()=>_("")),disabled:p("aliasesText")||!H.trim(),children:"Add"})]}),e.jsx("div",{className:s.workflowActions,children:g(a.aliasesText).map(t=>e.jsxs("button",{className:s.textBtn,onClick:()=>q("aliasesText",t),disabled:p("aliasesText"),children:[t," ×"]},t))}),e.jsx("label",{className:s.label,children:"Dispatch Default"}),e.jsx("input",{className:s.input,value:a.dispatchDefault,onChange:t=>h({...a,dispatchDefault:t.target.value}),disabled:p("dispatchDefault")})]}),e.jsxs("div",{className:s.exportItem,children:[e.jsx("label",{className:s.label,children:"Critical Tools (one per line)"}),e.jsxs("div",{className:s.pathInputGroup,children:[e.jsx("input",{className:s.input,value:O,onChange:t=>K(t.target.value),placeholder:"Add critical tool id",disabled:p("criticalToolsText")}),e.jsx("button",{className:s.secondaryHeaderBtn,onClick:()=>z("criticalToolsText",O,()=>K("")),disabled:p("criticalToolsText")||!O.trim(),children:"Add"})]}),e.jsx("div",{className:s.workflowActions,children:g(a.criticalToolsText).map(t=>e.jsxs("button",{className:s.textBtn,onClick:()=>q("criticalToolsText",t),disabled:p("criticalToolsText"),children:[t," ×"]},t))}),e.jsx("label",{className:s.label,children:"Optional Tools (one per line)"}),e.jsxs("div",{className:s.pathInputGroup,children:[e.jsx("input",{className:s.input,value:F,onChange:t=>U(t.target.value),placeholder:"Add optional tool id",disabled:p("optionalToolsText")}),e.jsx("button",{className:s.secondaryHeaderBtn,onClick:()=>z("optionalToolsText",F,()=>U("")),disabled:p("optionalToolsText")||!F.trim(),children:"Add"})]}),e.jsx("div",{className:s.workflowActions,children:g(a.optionalToolsText).map(t=>e.jsxs("button",{className:s.textBtn,onClick:()=>q("optionalToolsText",t),disabled:p("optionalToolsText"),children:[t," ×"]},t))})]})]}),e.jsx("label",{className:s.label,children:"Default Prompt Content"}),e.jsx("textarea",{className:s.input,rows:12,value:a.contentDefault,onChange:t=>h({...a,contentDefault:t.target.value}),disabled:p("contentDefault")}),e.jsxs("div",{className:s.pathInputGroup,style:{marginTop:12},children:[e.jsxs("button",{className:s.secondaryHeaderBtn,onClick:Z,children:[e.jsx(ae,{size:14}),"Reset Draft"]}),e.jsxs("button",{className:s.secondaryHeaderBtn,onClick:ee,children:[e.jsx(le,{size:14}),"Copy Preview"]}),e.jsxs("button",{className:s.secondaryHeaderBtn,onClick:se,disabled:S||$.length>0||M.length===0,children:[S?e.jsx(R,{size:14,className:s.spinner}):null,"Save Draft"]}),e.jsxs("button",{className:s.secondaryHeaderBtn,onClick:te,disabled:P,children:[P?e.jsx(R,{size:14,className:s.spinner}):null,"Rollback Override"]})]}),M.length>0&&e.jsxs("div",{className:s.settingsHint,children:["Changed fields: ",M.join(", ")]}),I.length>0&&e.jsxs("div",{className:s.settingsHint,children:["Locked fields for `",c,"`: ",I.join(", ")]}),$.length===0?e.jsx("div",{className:s.successMessage,children:"Draft validation: ready for review."}):e.jsx("div",{className:s.errorMessage,children:$.map(t=>e.jsx("div",{children:t},t))}),r&&e.jsx("div",{className:r.type==="success"?s.successMessage:s.errorMessage,children:r.message}),Y.length>0&&e.jsxs("div",{className:s.codeBlockWrapper,style:{marginTop:12},children:[e.jsx("div",{className:s.codeHeader,children:e.jsx("span",{className:s.codeLabel,children:"Field Diff (Before / After)"})}),Y.map(t=>e.jsxs("div",{style:{marginBottom:12},children:[e.jsx("div",{className:s.settingsHint,children:e.jsx("strong",{children:t.field})}),e.jsxs("div",{className:`${s.exportRow} ${s.exportRowGrid}`,children:[e.jsxs("div",{className:s.exportItem,children:[e.jsx("div",{className:s.settingsHint,children:"Before"}),e.jsx("pre",{className:s.codeBlock,children:t.before||"(empty)"})]}),e.jsxs("div",{className:s.exportItem,children:[e.jsx("div",{className:s.settingsHint,children:"After"}),e.jsx("pre",{className:s.codeBlock,children:t.after||"(empty)"})]})]})]},t.field))]}),e.jsxs("div",{className:s.codeBlockWrapper,style:{marginTop:12},children:[e.jsx("div",{className:s.codeHeader,children:e.jsx("span",{className:s.codeLabel,children:"Workflow Preview"})}),e.jsx("pre",{className:s.codeBlock,children:G})]})]})]})}function je({availableWorkflows:o,availableEnvironments:f,exportEnvironment:j,exportWorkflowsPath:T,exportingResource:k,exportResult:v,onExportEnvironmentChange:c,onExportWorkflows:D,onRefreshWorkflows:A,onFetchWorkflowTemplate:b,onFetchWorkflowOverrideNames:C,onSaveWorkflowTemplateDraft:y,onResetWorkflowTemplateDraft:d}){const[m,a]=i.useState([]);i.useEffect(()=>{if(o.length>0&&m.length===0){a(o);return}a(r=>r.filter(u=>o.includes(u)))},[o,m.length]);const h=r=>{a(u=>u.includes(r)?u.filter(S=>S!==r):[...u,r])};return e.jsx("div",{className:`${s.standalonePage} ${s.standaloneContent}`,style:{overflow:"auto"},children:e.jsxs("div",{className:s.settingsContent,style:{maxWidth:1080,margin:"0 auto",width:"100%"},children:[e.jsxs("div",{className:s.settingGroup,children:[e.jsx("div",{className:s.settingTitleRow,children:e.jsx("h2",{className:s.settingTitle,children:"Workflows"})}),e.jsx("p",{className:`${s.settingsHint} ${s.marginBottom12}`,children:"Export standard workflows to your project and edit workflow templates in one place."}),e.jsxs("div",{className:`${s.exportRow} ${s.exportRowGrid}`,children:[e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h4",{className:`${s.settingSubtitle} ${s.settingSubtitleCustom}`,children:"Target Environment"}),e.jsx("div",{className:s.buttonGrid,children:f.map(r=>e.jsx("button",{onClick:()=>c(r.id),className:`${s.themeBtn} ${j===r.id?s.activeTheme:""} ${s.capitalize}`,children:r.name},r.id))})]}),e.jsxs("div",{className:s.exportItem,children:[e.jsxs("div",{className:s.labelGroupFlex,children:[e.jsx("label",{className:s.label,children:"Workflow Export"}),e.jsxs("span",{className:s.settingDescription,children:["Destination: ",e.jsx("code",{className:s.code,children:T})]})]}),e.jsxs("div",{className:s.workflowList,children:[e.jsxs("div",{className:s.workflowActions,children:[e.jsx("button",{onClick:()=>a(o),className:s.textBtn,children:"All"}),e.jsx("button",{onClick:()=>a([]),className:s.textBtn,children:"None"})]}),e.jsx("div",{className:s.workflowGrid,children:o.length===0?e.jsxs("div",{className:s.emptyState,children:[e.jsx("p",{className:"tf-empty-copy",children:"No workflow templates found."}),e.jsx("button",{onClick:()=>A?.(!0),className:s.secondaryBtn,style:{marginTop:"8px"},children:"Retry Fetch"})]}):o.map(r=>e.jsxs("label",{className:s.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:m.includes(r),onChange:()=>h(r)}),r]},r))})]}),e.jsxs("button",{className:`${s.secondaryHeaderBtn} ${s.marginTop12}`,onClick:()=>D(j,m),disabled:k==="workflows"||m.length===0,children:[k==="workflows"?e.jsx(R,{size:14,className:s.spinner}):e.jsx(ie,{size:14}),"Export Selected (",m.length,")"]})]})]}),v&&e.jsxs("div",{className:`${v.type==="success"?s.successMessage:s.errorMessage} ${s.marginTop12}`,children:[v.type==="success"?e.jsx(ne,{size:14}):e.jsx(oe,{size:14}),v.message]})]}),e.jsx(de,{availableWorkflows:o,onFetchWorkflowTemplate:b,onFetchWorkflowOverrideNames:C,onSaveWorkflowTemplateDraft:y,onResetWorkflowTemplateDraft:d})]})})}export{je as WorkflowsModule};
|