@taskforcehq/taskforce 0.3.304 → 0.3.306
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 +140 -247
- package/dist/Taskforce.module.css +295 -89
- package/dist/TaskforceCore.js +378 -111
- package/dist/TaskforceCore.test.js +1221 -107
- package/dist/assets/fonts/CourierPrime-Bold.woff2 +0 -0
- package/dist/assets/fonts/CourierPrime-BoldItalic.woff2 +0 -0
- package/dist/assets/fonts/CourierPrime-Italic.woff2 +0 -0
- package/dist/assets/fonts/CourierPrime-Regular.woff2 +0 -0
- package/dist/assets/fonts/Noir_medium.woff2 +0 -0
- package/dist/assets/fonts/Noir_regular.woff2 +0 -0
- package/dist/assets/fonts/RussoOne-Regular.woff2 +0 -0
- package/dist/assets/fonts/SpecialElite-Regular.woff2 +0 -0
- package/dist/compat/workspaceSyncCompat.js +52 -2
- package/dist/compat/workspaceSyncCompat.test.js +38 -1
- package/dist/components/context/ContextAttachmentManager.d.ts +14 -0
- package/dist/components/context/ContextAttachmentManager.js +549 -0
- package/dist/components/features/AgentsModule.d.ts +10 -1
- package/dist/components/features/AgentsModule.js +260 -15
- package/dist/components/features/AgentsModule.test.js +255 -5
- package/dist/components/features/DocumentIndex.d.ts +1 -1
- package/dist/components/features/DocumentIndex.js +1 -1
- package/dist/components/features/DocumentViewer.d.ts +6 -2
- package/dist/components/features/DocumentViewer.js +90 -10
- package/dist/components/features/DocumentWorkspace.d.ts +5 -22
- package/dist/components/features/DocumentWorkspace.js +12 -155
- package/dist/components/features/DocumentWorkspace.test.js +226 -6
- package/dist/components/features/TaskSettings.js +29 -3
- package/dist/components/features/TaskSettings.test.js +42 -1
- package/dist/components/features/documentWorkspaceModel.d.ts +24 -0
- package/dist/components/features/documentWorkspaceModel.js +57 -0
- package/dist/components/features/useDocumentWorkspaceController.d.ts +34 -0
- package/dist/components/features/useDocumentWorkspaceController.js +113 -0
- package/dist/components/task/TaskCard.js +19 -28
- package/dist/components/task/TaskCard.test.js +38 -3
- package/dist/components/task/TaskContextUpload.js +4 -526
- package/dist/components/task/TaskForm.d.ts +8 -8
- package/dist/components/task/TaskForm.js +362 -230
- package/dist/components/task/TaskForm.test.js +558 -381
- package/dist/components/task/TaskKanban.d.ts +2 -1
- package/dist/components/task/TaskKanban.js +96 -14
- package/dist/components/task/TaskKanban.test.js +36 -0
- package/dist/components/ui/EditableAvatarButton.d.ts +18 -0
- package/dist/components/ui/EditableAvatarButton.js +18 -0
- package/dist/components/views/PlanComparisonPage.d.ts +9 -1
- package/dist/components/views/PlanComparisonPage.js +70 -17
- package/dist/components/views/PlanComparisonPage.test.js +289 -41
- package/dist/components/views/PlansPage.js +239 -106
- package/dist/components/views/PlansPage.test.js +593 -42
- package/dist/components/views/StandaloneLayout.js +310 -554
- package/dist/components/views/panels/FilterToolbar.test.js +6 -4
- package/dist/components/views/panels/PlanningDrawer.d.ts +8 -1
- package/dist/components/views/panels/PlanningDrawer.js +18 -11
- package/dist/components/views/panels/PlanningDrawer.test.d.ts +1 -0
- package/dist/components/views/panels/PlanningDrawer.test.js +141 -0
- package/dist/components/views/planningScope.d.ts +20 -0
- package/dist/components/views/planningScope.js +25 -0
- package/dist/components/views/planningScope.test.d.ts +1 -0
- package/dist/components/views/planningScope.test.js +60 -0
- package/dist/components/views/standalone/modals/AccountHubModal.d.ts +27 -14
- package/dist/components/views/standalone/modals/AccountHubModal.js +87 -15
- package/dist/components/views/standalone/modals/AccountHubModal.test.js +42 -2
- package/dist/components/views/standalone/modals/AvatarImageManagerModal.d.ts +20 -0
- package/dist/components/views/standalone/modals/AvatarImageManagerModal.js +127 -0
- package/dist/components/views/standalone/modals/EditProfileModal.d.ts +2 -9
- package/dist/components/views/standalone/modals/EditProfileModal.js +3 -2
- package/dist/components/views/standalone/modals/SyncEnableWarningModal.d.ts +9 -0
- package/dist/components/views/standalone/modals/SyncEnableWarningModal.js +6 -0
- package/dist/components/views/standalone/modals/SyncEnableWarningModal.test.d.ts +1 -0
- package/dist/components/views/standalone/modals/SyncEnableWarningModal.test.js +24 -0
- package/dist/components/views/standalone/modals/SyncStatusModal.d.ts +2 -1
- package/dist/components/views/standalone/modals/SyncStatusModal.js +2 -2
- package/dist/config/envSchema.js +1 -1
- package/dist/core/AiProfileService.d.ts +45 -3
- package/dist/core/AiProfileService.js +774 -63
- package/dist/core/AiProfileService.test.js +22 -2
- package/dist/core/AiProfiles.test.js +761 -2
- package/dist/core/AttachmentLinkService.js +57 -15
- package/dist/core/AuthIdentityService.d.ts +107 -0
- package/dist/core/AuthIdentityService.js +284 -0
- package/dist/core/AuthTokenService.d.ts +4 -0
- package/dist/core/AuthTokenService.js +34 -6
- package/dist/core/AuthTokenService.test.d.ts +1 -0
- package/dist/core/AuthTokenService.test.js +78 -0
- package/dist/core/EntitlementsPolicy.test.js +77 -15
- package/dist/core/GlobalSettingsService.js +115 -6
- package/dist/core/PlanEntitlementService.d.ts +30 -3
- package/dist/core/PlanEntitlementService.js +454 -93
- package/dist/core/PlanFeatureCatalog.test.d.ts +1 -0
- package/dist/core/PlanFeatureCatalog.test.js +84 -0
- package/dist/core/PlanVersionPolicy.test.js +54 -28
- package/dist/core/PlanningEntities.test.js +52 -0
- package/dist/core/SignupMonetizationSettings.test.js +241 -44
- package/dist/core/SyncReconciliationService.js +2 -65
- package/dist/core/SystemAdmin.test.js +244 -88
- package/dist/core/TaskAttachmentsCanonical.test.js +51 -1
- package/dist/core/TaskTaxonomyValidation.test.js +53 -0
- package/dist/core/Taskforce.d.ts +228 -14
- package/dist/core/Taskforce.js +814 -201
- package/dist/core/Taskforce.listTasksSlim.test.d.ts +1 -0
- package/dist/core/Taskforce.listTasksSlim.test.js +91 -0
- package/dist/core/UserProfileAvatarDrafts.test.js +30 -3
- package/dist/core/WorkspaceLifecycleService.js +0 -5
- package/dist/core/WorkspacePermissions.test.js +25 -1
- package/dist/core/WorkspacePlanMode.test.js +128 -27
- package/dist/core/shared.d.ts +3 -1
- package/dist/core/shared.js +16 -1
- package/dist/core/types.d.ts +68 -2
- package/dist/hooks/auth/useTaskforceAuthBootstrap.js +26 -1
- package/dist/hooks/sync/auth.js +3 -1
- package/dist/hooks/sync/bootstrap.js +2 -0
- package/dist/hooks/sync/controlPlane.d.ts +37 -0
- package/dist/hooks/sync/controlPlane.js +78 -0
- package/dist/hooks/sync/controlPlane.test.d.ts +1 -0
- package/dist/hooks/sync/controlPlane.test.js +121 -0
- package/dist/hooks/sync/lifecyclePolicy.d.ts +45 -0
- package/dist/hooks/sync/lifecyclePolicy.js +93 -0
- package/dist/hooks/sync/lifecyclePolicy.test.d.ts +1 -0
- package/dist/hooks/sync/lifecyclePolicy.test.js +124 -0
- package/dist/hooks/sync/orchestratorShared.d.ts +10 -1
- package/dist/hooks/sync/orchestratorShared.js +68 -47
- package/dist/hooks/sync/orchestratorShared.test.js +50 -1
- package/dist/hooks/sync/pullLifecycle.d.ts +31 -0
- package/dist/hooks/sync/pullLifecycle.js +24 -0
- package/dist/hooks/sync/pullLifecycle.test.d.ts +1 -0
- package/dist/hooks/sync/pullLifecycle.test.js +80 -0
- package/dist/hooks/sync/recovery.d.ts +16 -2
- package/dist/hooks/sync/recovery.js +171 -53
- package/dist/hooks/sync/recovery.test.d.ts +1 -0
- package/dist/hooks/sync/recovery.test.js +292 -0
- package/dist/hooks/sync/transfers.d.ts +16 -3
- package/dist/hooks/sync/transfers.js +186 -65
- package/dist/hooks/sync/transfers.test.d.ts +1 -0
- package/dist/hooks/sync/transfers.test.js +396 -0
- package/dist/hooks/sync/useRecentSyncEvents.d.ts +21 -0
- package/dist/hooks/sync/useRecentSyncEvents.js +92 -0
- package/dist/hooks/sync/useRecentSyncEvents.test.d.ts +1 -0
- package/dist/hooks/sync/useRecentSyncEvents.test.js +124 -0
- package/dist/hooks/sync/useSyncStatusActions.d.ts +30 -0
- package/dist/hooks/sync/useSyncStatusActions.js +88 -0
- package/dist/hooks/sync/useSyncStatusActions.test.d.ts +1 -0
- package/dist/hooks/sync/useSyncStatusActions.test.js +133 -0
- package/dist/hooks/sync/useSyncStatusControls.d.ts +25 -0
- package/dist/hooks/sync/useSyncStatusControls.js +60 -0
- package/dist/hooks/sync/useSyncStatusControls.test.d.ts +1 -0
- package/dist/hooks/sync/useSyncStatusControls.test.js +88 -0
- package/dist/hooks/useSyncOrchestrator.aiProfiles.test.js +12 -0
- package/dist/hooks/useSyncOrchestrator.d.ts +16 -6
- package/dist/hooks/useSyncOrchestrator.js +424 -175
- package/dist/hooks/useSyncOrchestrator.retry-closure.test.js +487 -10
- package/dist/hooks/useTaskData.js +8 -3
- package/dist/hooks/useTaskData.test.js +45 -0
- package/dist/hooks/useTaskMutations.d.ts +2 -1
- package/dist/hooks/useTaskMutations.js +12 -1
- package/dist/hooks/useTaskMutations.test.js +30 -1
- package/dist/hooks/useTaskforce.d.ts +65 -4
- package/dist/hooks/useTaskforce.js +564 -243
- package/dist/hooks/useTaskforce.runtime-routing.test.d.ts +1 -0
- package/dist/hooks/useTaskforce.runtime-routing.test.js +152 -0
- package/dist/hooks/useTaskforce.sync-behavior.test.js +2454 -208
- package/dist/hooks/useWorkspaceSyncController.d.ts +4 -1
- package/dist/hooks/useWorkspaceSyncController.js +17 -2
- package/dist/hooks/useWorkspaceSyncController.test.js +1 -0
- package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.d.ts +16 -0
- package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.js +316 -35
- package/dist/localization/locales/en-US.d.ts +0 -1
- package/dist/localization/locales/en-US.js +0 -1
- package/dist/localization/locales/es-419.js +0 -1
- package/dist/localization/locales/pt-BR.js +0 -1
- package/dist/mcp/adminWorkspaceRegistrar.d.ts +2 -0
- package/dist/mcp/adminWorkspaceRegistrar.js +154 -0
- package/dist/mcp/collaborationRegistrar.d.ts +2 -0
- package/dist/mcp/collaborationRegistrar.js +71 -0
- package/dist/mcp/documentAssetRegistrar.d.ts +2 -0
- package/dist/mcp/documentAssetRegistrar.js +346 -0
- package/dist/mcp/runtime.d.ts +2 -0
- package/dist/mcp/runtime.js +2433 -3534
- package/dist/mcp/runtime.test.js +440 -2
- package/dist/mcp/taskPlanningRegistrar.d.ts +2 -0
- package/dist/mcp/taskPlanningRegistrar.js +418 -0
- package/dist/mcp/toolCatalog.d.ts +35 -0
- package/dist/mcp/toolCatalog.js +3 -0
- package/dist/migrations/taskSchemaMigrations.d.ts +1 -1
- package/dist/migrations/taskSchemaMigrations.js +171 -61
- package/dist/migrations/taskSchemaMigrations.test.js +15 -0
- package/dist/resources/templates/workflow-sources/workflowDocs.mjs +6 -6
- package/dist/resources/templates/workflows/collaborate.yaml +1 -1
- package/dist/resources/templates/workflows/evaluate.yaml +2 -2
- package/dist/resources/templates/workflows/plan.yaml +1 -1
- package/dist/resources/templates/workflows/review.yaml +2 -2
- package/dist/server/annotatedAttachmentsRoutes.test.js +3 -3
- package/dist/server/auth/providers/apple.d.ts +33 -0
- package/dist/server/auth/providers/apple.js +82 -0
- package/dist/server/auth/providers/appleClientSecret.d.ts +37 -0
- package/dist/server/auth/providers/appleClientSecret.js +65 -0
- package/dist/server/auth/providers/github.d.ts +26 -0
- package/dist/server/auth/providers/github.js +86 -0
- package/dist/server/auth/providers/google.d.ts +21 -0
- package/dist/server/auth/providers/google.js +56 -0
- package/dist/server/auth/providers/types.d.ts +21 -0
- package/dist/server/auth/providers/types.js +1 -0
- package/dist/server/auth.d.ts +2 -0
- package/dist/server/auth.js +6 -3
- package/dist/server/documentReviewRoutes.test.js +36 -3
- package/dist/server/index.cookieProxy.test.js +1 -0
- package/dist/server/index.d.ts +12 -0
- package/dist/server/index.js +120 -9
- package/dist/server/index.rateLimit.test.js +3 -0
- package/dist/server/index.test.js +106 -3
- package/dist/server/routes/admin.d.ts +4 -5
- package/dist/server/routes/admin.js +410 -80
- package/dist/server/routes/annotatedAttachments.d.ts +1 -1
- package/dist/server/routes/annotatedAttachments.js +1 -1
- package/dist/server/routes/auth.d.ts +16 -6
- package/dist/server/routes/auth.js +1015 -118
- package/dist/server/routes/authSupport.d.ts +30 -0
- package/dist/server/routes/authSupport.js +81 -0
- package/dist/server/routes/billing.d.ts +1 -1
- package/dist/server/routes/billing.js +276 -34
- package/dist/server/routes/billing.test.js +760 -52
- package/dist/server/routes/documentReviews.d.ts +1 -1
- package/dist/server/routes/documentReviews.js +1 -1
- package/dist/server/routes/documents.d.ts +5 -2
- package/dist/server/routes/documents.js +242 -74
- package/dist/server/routes/primitives.d.ts +11 -0
- package/dist/server/routes/primitives.js +73 -0
- package/dist/server/routes/resources.d.ts +1 -1
- package/dist/server/routes/resources.js +1 -1
- package/dist/server/routes/shared.d.ts +29 -3
- package/dist/server/routes/shared.js +69 -4
- package/dist/server/routes/sync.d.ts +1 -1
- package/dist/server/routes/sync.integration.test.js +437 -39
- package/dist/server/routes/sync.js +62 -606
- package/dist/server/routes/syncAuxRoutes.d.ts +15 -0
- package/dist/server/routes/syncAuxRoutes.js +91 -0
- package/dist/server/routes/syncAuxRoutes.test.d.ts +1 -0
- package/dist/server/routes/syncAuxRoutes.test.js +158 -0
- package/dist/server/routes/syncPullApplyRoutes.d.ts +36 -0
- package/dist/server/routes/syncPullApplyRoutes.js +204 -0
- package/dist/server/routes/syncPushRoutes.d.ts +24 -0
- package/dist/server/routes/syncPushRoutes.js +212 -0
- package/dist/server/routes/syncRouteGuards.d.ts +36 -0
- package/dist/server/routes/syncRouteGuards.js +67 -0
- package/dist/server/routes/syncRouteGuards.test.d.ts +1 -0
- package/dist/server/routes/syncRouteGuards.test.js +94 -0
- package/dist/server/routes/syncRouteTypes.d.ts +13 -0
- package/dist/server/routes/syncRouteTypes.js +1 -0
- package/dist/server/routes/syncSnapshotRoutes.d.ts +66 -0
- package/dist/server/routes/syncSnapshotRoutes.js +180 -0
- package/dist/server/routes/tasks.d.ts +1 -1
- package/dist/server/routes/tasks.js +44 -2
- package/dist/server/routes/workspaces.d.ts +1 -1
- package/dist/server/routes/workspaces.js +37 -6
- package/dist/server/routes.d.ts +2 -9
- package/dist/server/routes.js +136 -165
- package/dist/server/routes.test.js +2457 -162
- package/dist/services/workflowExportSnapshots.test.js +2 -0
- package/dist/shared/aiProfileSeatScope.d.ts +5 -0
- package/dist/shared/aiProfileSeatScope.js +21 -0
- package/dist/shared/passwordPolicy.d.ts +13 -0
- package/dist/shared/passwordPolicy.js +84 -0
- package/dist/shared/passwordPolicy.test.d.ts +1 -0
- package/dist/shared/passwordPolicy.test.js +34 -0
- package/dist/storage/workspaceAssetStore.d.ts +15 -3
- package/dist/storage/workspaceAssetStore.js +132 -44
- package/dist/storage/workspaceAssetStore.test.js +93 -6
- package/dist/styles/fonts.css +70 -0
- package/dist/sync/collaborationSyncPayload.d.ts +6 -1
- package/dist/sync/collaborationSyncPayload.js +17 -11
- package/dist/sync/collaborationSyncPayload.test.js +13 -1
- package/dist/sync/contentSyncState.d.ts +4 -8
- package/dist/sync/contentSyncState.js +33 -77
- package/dist/sync/syncApplyHandlers.d.ts +7 -0
- package/dist/sync/syncApplyHandlers.js +28 -13
- package/dist/sync/syncApplyHandlers.test.js +72 -3
- package/dist/sync/syncFieldSemantics.d.ts +12 -0
- package/dist/sync/syncFieldSemantics.js +55 -0
- package/dist/sync/syncResourceAdapters.d.ts +44 -0
- package/dist/sync/syncResourceAdapters.js +77 -0
- package/dist/sync/syncService.d.ts +6 -0
- package/dist/sync/syncService.js +60 -0
- package/dist/sync/syncService.test.js +71 -3
- package/dist/sync/taskSyncChangeKey.d.ts +2 -0
- package/dist/sync/taskSyncChangeKey.js +143 -0
- package/dist/sync/taskSyncPayload.js +3 -8
- package/dist/sync/workspacePullFeed.js +4 -3
- package/dist/sync/workspacePullFeed.test.js +43 -0
- package/dist/sync/workspaceRepair.js +5 -2
- package/dist/sync/workspaceSyncModel.d.ts +48 -0
- package/dist/sync/workspaceSyncModel.js +195 -31
- package/dist/sync/workspaceSyncModel.test.js +325 -12
- package/dist/sync/workspaceSyncState.d.ts +19 -0
- package/dist/sync/workspaceSyncState.js +3 -1
- package/dist/sync/workspaceSyncSurface.js +3 -8
- package/dist/types.d.ts +17 -0
- package/dist/ui/assets/AgentsModule-DrLawwNl.js +1 -0
- package/dist/ui/assets/{AnnotatedAttachmentWorkspace-BlS-cqnl.js → AnnotatedAttachmentWorkspace-Z9_whf7F.js} +1 -1
- package/dist/ui/assets/CourierPrime-Bold-BuLj_dpw.woff2 +0 -0
- package/dist/ui/assets/CourierPrime-BoldItalic-BrK2pUkZ.woff2 +0 -0
- package/dist/ui/assets/CourierPrime-Italic-DFUZK5Ey.woff2 +0 -0
- package/dist/ui/assets/CourierPrime-Regular-BsKphzVf.woff2 +0 -0
- package/dist/ui/assets/DocumentWorkspace-B03MaSkw.js +252 -0
- package/dist/ui/assets/DocumentWorkspace-Dhdso07p.css +1 -0
- package/dist/ui/assets/{InitiativesModule-BjR6iBf9.js → InitiativesModule-9E6ParrY.js} +1 -1
- package/dist/ui/assets/Noir_medium-bxQwKGzB.woff2 +0 -0
- package/dist/ui/assets/Noir_regular-ojf2kxlG.woff2 +0 -0
- package/dist/ui/assets/PlansPage-CvfnMiWq.css +1 -0
- package/dist/ui/assets/PlansPage-DRXscYxH.js +1 -0
- package/dist/ui/assets/RussoOne-Regular-Cu_qq_qC.woff2 +0 -0
- package/dist/ui/assets/SpecialElite-Regular-Di6gSvAS.woff2 +0 -0
- package/dist/ui/assets/TaskSettings-DZX4jk7e.js +9 -0
- package/dist/ui/assets/{WorkflowsModule-DnFqdUME.js → WorkflowsModule-BA7jcEpH.js} +1 -1
- package/dist/ui/assets/index-9eT8e0Lu.css +1 -0
- package/dist/ui/assets/index-C6k75jr8.js +6 -0
- package/dist/ui/assets/{vendor-icons-I7ZwG1z_.js → vendor-icons-DuEd_65c.js} +1 -1
- package/dist/ui/fonts/CourierPrime-Bold.ttf +0 -0
- package/dist/ui/fonts/CourierPrime-Bold.woff2 +0 -0
- package/dist/ui/fonts/CourierPrime-BoldItalic.ttf +0 -0
- package/dist/ui/fonts/CourierPrime-BoldItalic.woff2 +0 -0
- package/dist/ui/fonts/CourierPrime-Italic.ttf +0 -0
- package/dist/ui/fonts/CourierPrime-Italic.woff2 +0 -0
- package/dist/ui/fonts/CourierPrime-Regular.ttf +0 -0
- package/dist/ui/fonts/CourierPrime-Regular.woff2 +0 -0
- package/dist/ui/fonts/Noir_medium.otf +0 -0
- package/dist/ui/fonts/Noir_medium.woff2 +0 -0
- package/dist/ui/fonts/Noir_regular.otf +0 -0
- package/dist/ui/fonts/Noir_regular.woff2 +0 -0
- package/dist/ui/fonts/RussoOne-Regular.woff2 +0 -0
- package/dist/ui/fonts/SpecialElite-Regular.ttf +0 -0
- package/dist/ui/fonts/SpecialElite-Regular.woff2 +0 -0
- package/dist/ui/index.html +3 -3
- package/dist/utils/accountProfileSummaryCache.d.ts +5 -0
- package/dist/utils/assignees.d.ts +2 -0
- package/dist/utils/assignees.js +2 -0
- package/dist/utils/avatarUpload.d.ts +27 -0
- package/dist/utils/avatarUpload.js +132 -0
- package/dist/utils/avatarUpload.test.d.ts +1 -0
- package/dist/utils/avatarUpload.test.js +40 -0
- package/dist/utils/bootstrapTrace.d.ts +7 -0
- package/dist/utils/bootstrapTrace.js +29 -0
- package/dist/utils/commercialLifecyclePresentation.d.ts +19 -0
- package/dist/utils/commercialLifecyclePresentation.js +199 -0
- package/dist/utils/contextAssetEvents.d.ts +2 -0
- package/dist/utils/syncEventDetails.d.ts +3 -0
- package/dist/utils/syncEventDetails.js +64 -0
- package/dist/utils/syncEventDetails.test.d.ts +1 -0
- package/dist/utils/syncEventDetails.test.js +23 -0
- package/dist/utils/syncEventPresentation.d.ts +15 -0
- package/dist/utils/syncEventPresentation.js +129 -0
- package/dist/utils/syncEventPresentation.test.d.ts +1 -0
- package/dist/utils/syncEventPresentation.test.js +64 -0
- package/dist/utils/syncStatusPresentation.d.ts +72 -0
- package/dist/utils/syncStatusPresentation.js +217 -0
- package/dist/utils/syncStatusPresentation.test.d.ts +1 -0
- package/dist/utils/syncStatusPresentation.test.js +164 -0
- package/dist/utils/taskActivity.d.ts +2 -0
- package/dist/utils/taskActivity.js +228 -22
- package/dist/utils/taskActivity.test.js +119 -8
- package/dist/utils/workspaceSyncPresentation.d.ts +4 -0
- package/dist/utils/workspaceSyncPresentation.js +68 -2
- package/dist/utils/workspaceSyncPresentation.test.js +36 -1
- package/package.json +10 -2
- package/scripts/check-cloud-mcp.mjs +83 -0
- package/scripts/export-sqlite-to-postgres.mjs +7 -9
- package/scripts/playwright-auth.sh +5 -1
- package/scripts/run-billing-performance-smoke.sh +24 -0
- package/scripts/run-e2e-realtime.sh +17 -3
- package/scripts/run-smoke.sh +17 -5
- package/scripts/run-soak.sh +17 -5
- package/src/resources/templates/workflow-sources/workflowDocs.mjs +6 -6
- package/src/resources/templates/workflows/collaborate.yaml +1 -1
- package/src/resources/templates/workflows/evaluate.yaml +2 -2
- package/src/resources/templates/workflows/plan.yaml +1 -1
- package/src/resources/templates/workflows/review.yaml +2 -2
- package/dist/ui/assets/AgentsModule-BLWVbuKP.js +0 -1
- package/dist/ui/assets/DocumentWorkspace-BH_6DF6x.js +0 -250
- package/dist/ui/assets/DocumentWorkspace-C_8T8oz-.css +0 -1
- package/dist/ui/assets/PlansPage-C2dd2n1X.css +0 -1
- package/dist/ui/assets/PlansPage-CSDQ4sLa.js +0 -1
- package/dist/ui/assets/RussoOne-Regular-C3BxZIj7.ttf +0 -0
- package/dist/ui/assets/TaskSettings-CEDy34Jo.js +0 -9
- package/dist/ui/assets/index-DXUdtH1B.js +0 -6
- package/dist/ui/assets/index-Ii0B0rTO.css +0 -1
- package/scripts/migrate-planning-model.ts +0 -233
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/TaskSettings-CEDy34Jo.js","assets/vendor-react-CKJs5o3c.js","assets/vendor-icons-I7ZwG1z_.js","assets/vendor-markdown-BUxTU7dS.js","assets/vendor-dnd-DRzYolkg.js","assets/vendor-router-BbWMxlnO.js","assets/TaskSettings-CnIBL_Eb.css","assets/AnnotatedAttachmentWorkspace-BlS-cqnl.js","assets/AnnotatedAttachmentWorkspace-BaS2VwIr.css","assets/DocumentWorkspace-BH_6DF6x.js","assets/DocumentWorkspace-C_8T8oz-.css","assets/WorkflowsModule-DnFqdUME.js","assets/AgentsModule-BLWVbuKP.js","assets/InitiativesModule-BjR6iBf9.js","assets/PlansPage-CSDQ4sLa.js","assets/PlansPage-C2dd2n1X.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{r as a,j as t,R as pt,a as Ni,b as fg}from"./vendor-react-CKJs5o3c.js";import{I as Hr,C as ji,a as Ac,b as eo,c as Ol,F as hg,A as gg,R as cu,T as Hl,L as Im,d as Ri,e as yg,X as Mi,f as vf,g as kf,h as Pa,i as Ei,j as om,k as Tc,P as vg,D as _p,l as kg,B as tu,U as Lo,m as is,n as Sg,S as wg,G as bg,o as xg,p as Sf,q as _g,r as Nm,s as wf,t as Cg,u as Ag,v as xc,w as bf,x as Tg,y as xf,z as Ig,E as Ng,H as jg,M as Cp,J as Ap,K as Rg,N as Dg,Z as Eg,O as Pg,Q as Mg,V as Lg,W as Bg,Y as _f,_ as Wg,$ as Fg,a0 as Og,a1 as $g}from"./vendor-icons-I7ZwG1z_.js";import{M as Ug,r as zg,a as Hg}from"./vendor-markdown-BUxTU7dS.js";import{u as Cf,a as jm,b as Gg,D as Af,c as Vg,S as Tf,v as If,P as Nf,d as jf,C as zm,e as Zg,p as qg,f as Tp,s as Kg,K as Yg,g as Kl,h as Jg,i as wu,j as Xg}from"./vendor-dnd-DRzYolkg.js";import{u as Rf,a as Df,b as Qg,M as ey,N as Ip,B as ty}from"./vendor-router-BbWMxlnO.js";(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))s(o);new MutationObserver(o=>{for(const d of o)if(d.type==="childList")for(const i of d.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&s(i)}).observe(document,{childList:!0,subtree:!0});function r(o){const d={};return o.integrity&&(d.integrity=o.integrity),o.referrerPolicy&&(d.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?d.credentials="include":o.crossOrigin==="anonymous"?d.credentials="omit":d.credentials="same-origin",d}function s(o){if(o.ep)return;o.ep=!0;const d=r(o);fetch(o.href,d)}})();const _c="default",bu="General",wr="task",ny=2,ay=[{value:_c,label:bu,icon:"Inbox"}],Ef=[{value:wr,label:"Task",icon:"CheckSquare",color:"blue-500"}],ry=[{value:ny,label:"Medium",color:"blue-500",icon:"Minus"}];function sy(){return ay.map(e=>({...e}))}function oy(){return Ef.map(e=>({...e}))}function iy(e){const n=String(e||"").trim().toLowerCase();return Ef.find(r=>r.value===n)}function Pf(){return ry.map(e=>({...e}))}const cy="default",ly=[{value:cy,label:"Default",color:"slate-500",icon:"Circle"},{value:"evaluate",label:"Evaluate",color:"amber-500",icon:"Search"},{value:"collaborate",label:"Collaborate",color:"blue-500",icon:"Users"},{value:"plan",label:"Plan",color:"teal-500",icon:"FileText"},{value:"review",label:"Review",color:"violet-500",icon:"Microscope"}];function Mf(){return ly.map(e=>({...e}))}const dy={categories:sy(),types:oy(),priorities:Pf(),approaches:Mf(),taxonomies:[],apiEndpoint:"/api/taskforce/task",apiBaseUrl:void 0,cloudAuthBaseUrl:void 0,cloudMcpBaseUrl:void 0,wsBaseUrl:void 0,position:"bottom-right",offsetY:70,theme:"dark",shortcut:"Alt+T",manualComplexityEnabled:!1,checklistDropdownEnabled:!0,showTaskCardStatusLabel:!0},uy=["light","dawn","dark","midnight"],lu="dark",my=[{id:"light",label:"Light",family:"light",icon:"sun"},{id:"dawn",label:"Dawn",family:"light",icon:"wind"},{id:"dark",label:"Dark",family:"dark",icon:"moon"},{id:"midnight",label:"Midnight",family:"dark",icon:"sparkles"}],py=new Set(uy),fy=new Set(my.filter(e=>e.family==="light").map(e=>e.id));function hy(e){return typeof e=="string"&&py.has(e)}function kc(e){if(typeof e!="string")return null;const n=e.trim().toLowerCase();return hy(n)?n:null}function Lf(e){const n=kc(e);return n!==null&&fy.has(n)}function Rm(e){const n=typeof e=="number"?e:Number(e);if(!Number.isFinite(n))return null;const r=Math.floor(n);return r>0?r:null}function Ic(e,n){const r=Rm(typeof n=="object"&&n!==null?n.referenceNumber:n);return r?`${e}${r}`:""}function Hm(e,n){const r=String(e||"").trim(),s=String(n||"").trim();if(!r||!s)return null;const o=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=s.match(new RegExp(`^${o}(\\d+)$`,"i"));return d?Rm(d[1]):null}function Yl(e,n){return n?typeof n.referenceLabel=="string"&&n.referenceLabel.trim().length>0?n.referenceLabel.trim():Ic(e,n.referenceNumber):""}const Gm="T-",Np="LT-";function gy(e){return Ic(Gm,e)}function Bf(e){return typeof e=="number"||e===null||e===void 0?Ic(Np,e):Ic(Np,{referenceNumber:e.localReferenceNumber??null})}function Wf(e){return Hm(Gm,e)}function Cs(e){if(!e)return"";if(typeof e.referenceLabel=="string"&&e.referenceLabel.trim().length>0)return e.referenceLabel.trim();const n=Yl(Gm,e);return n||Bf(e.localReferenceNumber)}function yy(e){return!e?.referenceNumber&&!!e?.localReferenceNumber}function Ff(e){return{label:Cs(e),isProvisional:yy(e)}}Pf();const vy={low:1,medium:2,high:3,critical:4,"on-hold":1},ky={1:"low",2:"medium",3:"high",4:"critical",5:"critical"};function Sy(e){const n=String(e||"").trim().toLowerCase();return n==="blocked"||n==="on hold"||n==="on-hold"?"on-hold":n==="task"||n==="on-hold"||n==="in-progress"||n==="review"||n==="done"||n==="cancelled"?n:"task"}function du(e){if(typeof e=="number"&&Number.isFinite(e))return Math.max(1,Math.round(e));const n=Number(e);return Number.isFinite(n)?Math.max(1,Math.round(n)):vy[String(e||"").trim().toLowerCase()]??2}function wy(e,n){return ky[String(e)]||n}function to(e){const n=typeof e.referenceNumber=="number"?e.referenceNumber:Number.isFinite(Number(e.referenceNumber))?Number(e.referenceNumber):null,r=typeof e.localReferenceNumber=="number"?e.localReferenceNumber:Number.isFinite(Number(e.localReferenceNumber))?Number(e.localReferenceNumber):null;return{...e,referenceNumber:n&&n>0?Math.floor(n):null,localReferenceNumber:r&&r>0?Math.floor(r):null,referenceLabel:typeof e.referenceLabel=="string"&&e.referenceLabel.trim().length>0?e.referenceLabel.trim():n?gy(n):Bf(r),assignee:(()=>{const s=String(e.assignee||"").trim(),o=s.toLowerCase();return o==="agent"||o==="ai"?"agent":!s||o==="user"||o==="human"||o==="unassigned"||o==="none"||o==="null"?"unassigned":s})(),category:typeof e.category=="string"?e.category:e.category?.value||"default",type:(typeof e.type=="string"?e.type:e.type?.label||"task").toLowerCase(),priority:du(e.priority),complexity:typeof e.complexity=="number"?e.complexity:3,status:Sy(e.status)}}function by(e,n,r){if(!e||typeof e!="object")return{tasks:n,archivedTasks:r};const s=to(e),o=String(s.id||"").trim();if(!o)return{tasks:n,archivedTasks:r};const d=!!s.isArchived,i=d?{...s,isArchived:!0}:{...s,isArchived:!1},u=x=>[...x].sort((S,v)=>{const g=Date.parse(String(S.updatedAt||S.createdAt||"")),w=Date.parse(String(v.updatedAt||v.createdAt||""));if(Number.isFinite(g)&&Number.isFinite(w)&&g!==w)return w-g;if(Number.isFinite(g)!==Number.isFinite(w))return Number.isFinite(w)?1:-1;const I=Date.parse(String(v.createdAt||""))-Date.parse(String(S.createdAt||""));return Number.isFinite(I)&&I!==0?I:String(S.id).localeCompare(String(v.id))}),f=n.filter(x=>x.id!==o),k=r.filter(x=>x.id!==o);return d?k.push(i):f.push(i),{tasks:u(f),archivedTasks:u(k)}}function xy(e,n){if(!n.length||!e.length)return[];const r=new Set(n.map(o=>Number(o.value))),s=Array.from(new Set(e.map(o=>Number(o)).filter(o=>Number.isFinite(o)&&r.has(o))));return s.length>0?s:n.map(o=>Number(o.value))}function im(e,n){return n.some(r=>String(r)===String(e))}function _y(e,n){if(!e.length||!n.length)return e;const r=new Set(n.map(o=>o.value)),s=Array.from(new Set(e.filter(o=>r.has(o))));return s.length>0?s:n.map(o=>o.value)}const Cy={taskForm:{commentsSectionTitle:"Activity & Comments",hideComments:"Hide Comments",showComments:"Show Comments",noComments:"No comments yet. Start the conversation!",you:"You",commentPlaceholder:"Type a comment...",scheduledLabel:"Scheduled:",dueLabel:"Due:",createdLabel:"Created:",updatedLabel:"Updated:",completedLabel:"Completed:",emptyValue:"—",parentCannotSchedule:"Parent tasks cannot be scheduled. Schedule leaf tasks instead.",dueBeforeScheduled:"Due date is before scheduled date.",overdue:"This task is overdue."},schedule:{},taskList:{searchPlaceholder:"Search tasks...",clearSearchTitle:"Clear search",categoryLabel:"Category",typeLabel:"Type",priorityLabel:"Priority",statusLabel:"Status",assigneeLabel:"Assignee",sortByLabel:"Sort By:",sortCreated:"Created",sortUpdated:"Updated",sortPriority:"Priority",sortDirectionDescTitle:"Sort: Last First",sortDirectionAscTitle:"Sort: First First",resetFiltersTitle:"Reset all filters",archiveAllTitle:"Archive all completed and cancelled tasks",noTasksToArchiveTitle:"No tasks to archive",archiveFinished:"Archive Finished",linksLabel:"Links",linksAll:"All",linksParents:"Parents",linksLinked:"Linked",linksUnlinked:"Unlinked",includeArchive:"Archived",noMatchingTasks:"No matching tasks",noActiveTasks:"No active tasks",addTaskToCategoryTitle:"Add task to {category}"},actionHeader:{saveChangesTitle:"Save Changes",update:"Update",copyTaskIdTitle:"Click to copy Task ID",startWorking:"Start Working",stopWorking:"Stop Working",unlockAndContinue:"Unlock & Continue Work",readyForReview:"Ready for Review",markComplete:"Mark Complete",unmarkComplete:"Unmark Complete",cancelTask:"Cancel Task",unmarkCancelled:"Unmark Cancelled",archiveNow:"Archive Now",completeTaskToArchive:"Complete task to archive",clearFormTitle:"Clear Form",clear:"Clear",addTaskTitle:"Add Task",addTask:"Add Task"},standalone:{searchPlaceholder:"Search tasks...",clearSearchTitle:"Clear search",sortLabel:"Sort:",sortCreated:"Created",sortUpdated:"Updated",sortPriority:"Priority",sortComplexity:"Complexity",sortDirectionDescTitle:"Sort: Last First",sortDirectionAscTitle:"Sort: First First",groupLabel:"Group:",groupCategory:"Category",groupType:"Type",groupPriority:"Priority",groupComplexity:"Complexity",groupApproach:"Workflow",groupAssignee:"Assignee",groupStatus:"Status",groupHierarchy:"Hierarchy",groupSchedule:"Schedule",showEmptyColumns:"Show Empty Columns",compressEmptyColumns:"Compress Empty Columns",hideEmptyColumns:"Hide Empty Columns",expandCards:"Expand Cards",compressCards:"Compress Cards",exitZenMode:"Exit Zen Mode",enterZenMode:"Enter Zen Mode",toggleFilters:"Toggle Filters",addTask:"Add Task",helpTutorial:"Help / Tutorial",settings:"Settings",filtersCaps:"FILTERS:",categoryLabel:"Category",typeLabel:"Type",priorityLabel:"Priority",statusLabel:"Status",assigneeLabel:"Assignee",linksLabel:"Links:",chooseLinksTitle:"Choose which linked tasks are shown",linksAll:"All",linksParents:"Parents",linksLinked:"Linked",linksUnlinked:"Unlinked",includeArchiveTitle:"Include archived tasks",includeArchive:"Archived",clearFilters:"Clear Filters",noTasksMatchFilters:"No tasks match current filters.",showingWithLinksHint:"Showing: {parentFilterLabel}. Switch Links to All or clear filters.",visibleActiveTasksTitle:"Visible active tasks / total active tasks",totalActiveTasksTitle:"Total active tasks"},setup:{headingCheckFailed:"Setup Check Failed",headingGlobalRequired:"Global Setup Required",headingWorkspaceRequired:"Configure your new workspace.",subtitleUnreadable:"Taskforce could not read setup state. Retry to continue.",subtitleGlobalRequired:"Choose your default operating mode to continue.",subtitleWorkspaceRequired:"",runtimeLabel:"Runtime",workspaceTermProject:"Project",workspaceTermMission:"Mission",coreModeOption:"Core Mode: {workspaceLabel} planning defaults",operationsModeOption:"Operations Mode: Mission-first terminology and flows",workspaceNamePlaceholder:"{workspaceLabel} name",workspaceDescriptionPlaceholder:"{workspaceLabel} description (optional)",saving:"Saving...",saveGlobalSetup:"Save Global Setup",saveWorkspaceSetup:"Save {workspaceLabel} Setup",globalSetupSaved:"Global setup saved.",workspaceSetupSaved:"{workspaceLabel} setup saved.",saveFailedWithStatus:"Failed to save setup ({status})",saveFailed:"Failed to save setup.",saveWorkspaceFailed:"Failed to save workspace profile.",retrySetupCheck:"Retry Setup Check",signOut:"Sign Out"}},Ay={taskForm:{commentsSectionTitle:"Actividad y comentarios",hideComments:"Ocultar comentarios",showComments:"Mostrar comentarios",noComments:"Aun no hay comentarios. Inicia la conversacion.",you:"Tu",commentPlaceholder:"Escribe un comentario...",scheduledLabel:"Programado:",dueLabel:"Vence:",createdLabel:"Creado:",updatedLabel:"Actualizado:",completedLabel:"Completado:",emptyValue:"—",parentCannotSchedule:"Las tareas padre no se pueden programar. Programa tareas hoja en su lugar.",dueBeforeScheduled:"La fecha de vencimiento es anterior a la fecha programada.",overdue:"Esta tarea esta vencida."},schedule:{},taskList:{searchPlaceholder:"Buscar tareas...",clearSearchTitle:"Limpiar busqueda",categoryLabel:"Categoria",typeLabel:"Tipo",priorityLabel:"Prioridad",statusLabel:"Estado",assigneeLabel:"Asignado a",sortByLabel:"Ordenar por:",sortCreated:"Creado",sortUpdated:"Actualizado",sortPriority:"Prioridad",sortDirectionDescTitle:"Orden: mas reciente primero",sortDirectionAscTitle:"Orden: mas antiguo primero",resetFiltersTitle:"Restablecer todos los filtros",archiveAllTitle:"Archivar todas las tareas completadas y canceladas",noTasksToArchiveTitle:"No hay tareas para archivar",archiveFinished:"Archivar finalizadas",linksLabel:"Vinculos",linksAll:"Todas",linksParents:"Padres",linksLinked:"Vinculadas",linksUnlinked:"Sin vinculo",includeArchive:"Incluir archivo",noMatchingTasks:"No hay tareas coincidentes",noActiveTasks:"No hay tareas activas",addTaskToCategoryTitle:"Agregar tarea a {category}"},actionHeader:{saveChangesTitle:"Guardar cambios",update:"Actualizar",copyTaskIdTitle:"Haz clic para copiar el ID de la tarea",startWorking:"Comenzar trabajo",stopWorking:"Detener trabajo",unlockAndContinue:"Desbloquear y continuar",readyForReview:"Lista para revision",markComplete:"Marcar como completada",unmarkComplete:"Quitar completada",cancelTask:"Cancelar tarea",unmarkCancelled:"Quitar cancelada",archiveNow:"Archivar ahora",completeTaskToArchive:"Completa la tarea para archivar",clearFormTitle:"Limpiar formulario",clear:"Limpiar",addTaskTitle:"Agregar tarea",addTask:"Agregar tarea"},standalone:{searchPlaceholder:"Buscar tareas...",clearSearchTitle:"Limpiar busqueda",sortLabel:"Orden:",sortCreated:"Creado",sortUpdated:"Actualizado",sortPriority:"Prioridad",sortComplexity:"Complejidad",sortDirectionDescTitle:"Orden: mas reciente primero",sortDirectionAscTitle:"Orden: mas antiguo primero",groupLabel:"Agrupar:",groupCategory:"Categoria",groupType:"Tipo",groupPriority:"Prioridad",groupComplexity:"Complejidad",groupApproach:"Flujo de trabajo",groupAssignee:"Asignado a",groupStatus:"Estado",groupHierarchy:"Jerarquia",groupSchedule:"Calendario",showEmptyColumns:"Mostrar columnas vacias",compressEmptyColumns:"Comprimir columnas vacias",hideEmptyColumns:"Ocultar columnas vacias",expandCards:"Expandir tarjetas",compressCards:"Comprimir tarjetas",exitZenMode:"Salir del modo zen",enterZenMode:"Entrar en modo zen",toggleFilters:"Alternar filtros",addTask:"Agregar tarea",helpTutorial:"Ayuda / Tutorial",settings:"Configuracion",filtersCaps:"FILTROS:",categoryLabel:"Categoria",typeLabel:"Tipo",priorityLabel:"Prioridad",statusLabel:"Estado",assigneeLabel:"Asignado a",linksLabel:"Vinculos:",chooseLinksTitle:"Elige que tareas vinculadas se muestran",linksAll:"Todas",linksParents:"Padres",linksLinked:"Vinculadas",linksUnlinked:"Sin vinculo",includeArchiveTitle:"Incluir tareas archivadas",includeArchive:"Incluir archivo",clearFilters:"Limpiar filtros",noTasksMatchFilters:"Ninguna tarea coincide con los filtros actuales.",showingWithLinksHint:"Mostrando: {parentFilterLabel}. Cambia Vinculos a Todas o limpia filtros.",visibleActiveTasksTitle:"Tareas activas visibles / total de tareas activas",totalActiveTasksTitle:"Total de tareas activas"},setup:{headingCheckFailed:"Fallo en verificacion de configuracion",headingGlobalRequired:"Configuracion global requerida",headingWorkspaceRequired:"Configuracion del espacio requerida",subtitleUnreadable:"Taskforce no pudo leer el estado de configuracion. Reintenta para continuar.",subtitleGlobalRequired:"Elige tu modo operativo predeterminado para continuar.",subtitleWorkspaceRequired:"Configura el perfil de tu espacio para continuar.",runtimeLabel:"Entorno",workspaceTermProject:"Proyecto",workspaceTermMission:"Mision",coreModeOption:"Modo Core: valores predeterminados de planificacion para {workspaceLabel}",operationsModeOption:"Modo Operaciones: terminologia y flujos orientados a Mision",workspaceNamePlaceholder:"Nombre de {workspaceLabel}",workspaceDescriptionPlaceholder:"Descripcion de {workspaceLabel} (opcional)",saving:"Guardando...",saveGlobalSetup:"Guardar configuracion global",saveWorkspaceSetup:"Guardar configuracion de {workspaceLabel}",globalSetupSaved:"Configuracion global guardada.",workspaceSetupSaved:"Configuracion de {workspaceLabel} guardada.",saveFailedWithStatus:"Error al guardar la configuracion ({status})",saveFailed:"Error al guardar la configuracion.",saveWorkspaceFailed:"Error al guardar el perfil del espacio.",retrySetupCheck:"Reintentar verificacion",signOut:"Cerrar sesion"}},Ty={taskForm:{commentsSectionTitle:"Atividade e comentarios",hideComments:"Ocultar comentarios",showComments:"Mostrar comentarios",noComments:"Ainda nao ha comentarios. Inicie a conversa.",you:"Voce",commentPlaceholder:"Digite um comentario...",scheduledLabel:"Agendado:",dueLabel:"Vencimento:",createdLabel:"Criado:",updatedLabel:"Atualizado:",completedLabel:"Concluido:",emptyValue:"—",parentCannotSchedule:"Tarefas pai nao podem ser agendadas. Agende as tarefas folha.",dueBeforeScheduled:"A data de vencimento e anterior a data agendada.",overdue:"Esta tarefa esta atrasada."},schedule:{},taskList:{searchPlaceholder:"Buscar tarefas...",clearSearchTitle:"Limpar busca",categoryLabel:"Categoria",typeLabel:"Tipo",priorityLabel:"Prioridade",statusLabel:"Status",assigneeLabel:"Atribuido para",sortByLabel:"Ordenar por:",sortCreated:"Criado",sortUpdated:"Atualizado",sortPriority:"Prioridade",sortDirectionDescTitle:"Ordem: mais recente primeiro",sortDirectionAscTitle:"Ordem: mais antigo primeiro",resetFiltersTitle:"Redefinir todos os filtros",archiveAllTitle:"Arquivar todas as tarefas concluidas e canceladas",noTasksToArchiveTitle:"Nao ha tarefas para arquivar",archiveFinished:"Arquivar finalizadas",linksLabel:"Vinculos",linksAll:"Todas",linksParents:"Pais",linksLinked:"Vinculadas",linksUnlinked:"Sem vinculo",includeArchive:"Incluir arquivo",noMatchingTasks:"Nenhuma tarefa correspondente",noActiveTasks:"Nenhuma tarefa ativa",addTaskToCategoryTitle:"Adicionar tarefa a {category}"},actionHeader:{saveChangesTitle:"Salvar alteracoes",update:"Atualizar",copyTaskIdTitle:"Clique para copiar o ID da tarefa",startWorking:"Iniciar trabalho",stopWorking:"Parar trabalho",unlockAndContinue:"Desbloquear e continuar",readyForReview:"Pronto para revisao",markComplete:"Marcar como concluida",unmarkComplete:"Desmarcar concluida",cancelTask:"Cancelar tarefa",unmarkCancelled:"Desmarcar cancelada",archiveNow:"Arquivar agora",completeTaskToArchive:"Conclua a tarefa para arquivar",clearFormTitle:"Limpar formulario",clear:"Limpar",addTaskTitle:"Adicionar tarefa",addTask:"Adicionar tarefa"},standalone:{searchPlaceholder:"Buscar tarefas...",clearSearchTitle:"Limpar busca",sortLabel:"Ordenar:",sortCreated:"Criado",sortUpdated:"Atualizado",sortPriority:"Prioridade",sortComplexity:"Complexidade",sortDirectionDescTitle:"Ordem: mais recente primeiro",sortDirectionAscTitle:"Ordem: mais antigo primeiro",groupLabel:"Agrupar:",groupCategory:"Categoria",groupType:"Tipo",groupPriority:"Prioridade",groupComplexity:"Complexidade",groupApproach:"Fluxo de trabalho",groupAssignee:"Atribuido para",groupStatus:"Status",groupHierarchy:"Hierarquia",groupSchedule:"Agenda",showEmptyColumns:"Mostrar colunas vazias",compressEmptyColumns:"Comprimir colunas vazias",hideEmptyColumns:"Ocultar colunas vazias",expandCards:"Expandir cards",compressCards:"Comprimir cards",exitZenMode:"Sair do modo zen",enterZenMode:"Entrar no modo zen",toggleFilters:"Alternar filtros",addTask:"Adicionar tarefa",helpTutorial:"Ajuda / Tutorial",settings:"Configuracoes",filtersCaps:"FILTROS:",categoryLabel:"Categoria",typeLabel:"Tipo",priorityLabel:"Prioridade",statusLabel:"Status",assigneeLabel:"Atribuido para",linksLabel:"Vinculos:",chooseLinksTitle:"Escolha quais tarefas vinculadas sao exibidas",linksAll:"Todas",linksParents:"Pais",linksLinked:"Vinculadas",linksUnlinked:"Sem vinculo",includeArchiveTitle:"Incluir tarefas arquivadas",includeArchive:"Incluir arquivo",clearFilters:"Limpar filtros",noTasksMatchFilters:"Nenhuma tarefa corresponde aos filtros atuais.",showingWithLinksHint:"Mostrando: {parentFilterLabel}. Mude Vinculos para Todas ou limpe os filtros.",visibleActiveTasksTitle:"Tarefas ativas visiveis / total de tarefas ativas",totalActiveTasksTitle:"Total de tarefas ativas"},setup:{headingCheckFailed:"Falha na verificacao da configuracao",headingGlobalRequired:"Configuracao global obrigatoria",headingWorkspaceRequired:"Configuracao do espaco obrigatoria",subtitleUnreadable:"Taskforce nao conseguiu ler o estado da configuracao. Tente novamente para continuar.",subtitleGlobalRequired:"Escolha seu modo operacional padrao para continuar.",subtitleWorkspaceRequired:"Configure o perfil do seu espaco para continuar.",runtimeLabel:"Ambiente",workspaceTermProject:"Projeto",workspaceTermMission:"Missao",coreModeOption:"Modo Core: padroes de planejamento para {workspaceLabel}",operationsModeOption:"Modo Operacoes: terminologia e fluxos orientados por Missao",workspaceNamePlaceholder:"Nome de {workspaceLabel}",workspaceDescriptionPlaceholder:"Descricao de {workspaceLabel} (opcional)",saving:"Salvando...",saveGlobalSetup:"Salvar configuracao global",saveWorkspaceSetup:"Salvar configuracao de {workspaceLabel}",globalSetupSaved:"Configuracao global salva.",workspaceSetupSaved:"Configuracao de {workspaceLabel} salva.",saveFailedWithStatus:"Falha ao salvar configuracao ({status})",saveFailed:"Falha ao salvar configuracao.",saveWorkspaceFailed:"Falha ao salvar perfil do espaco.",retrySetupCheck:"Tentar verificacao novamente",signOut:"Sair"}},Of=["en-US","es-419","pt-BR"],uu="en-US",cm={"en-US":Cy,"es-419":Ay,"pt-BR":Ty},$f={en:"en-US",es:"es-419",pt:"pt-BR"};let Di=uu;function Iy(e){return e.split(".").filter(Boolean)}function lm(e,n){let r=e;for(const s of n){if(!r||typeof r!="object")return;r=r[s]}return typeof r=="string"?r:void 0}function Uf(e){if(!e)return uu;const n=Of.find(s=>s.toLowerCase()===e.toLowerCase());if(n)return n;const r=e.split("-")[0]?.toLowerCase()||"";return $f[r]||uu}function dm(e,n){return n?e.replace(/\{([^}]+)\}/g,(r,s)=>{const o=n[s];return o==null?"":String(o)}):e}function zf(){return Di}function Ny(){return[...Of]}function Hf(e){const n=Uf(e);return Di=n,n}function jy(e){const n=typeof navigator<"u"?navigator.language:null;return Di=Uf(n),Di}function De(e,n){const r=Iy(e),s=lm(cm[Di],r);if(s)return dm(s,n);const o=Di.split("-")[0]?.toLowerCase()||"",d=$f[o];if(d&&d!==Di){const u=lm(cm[d],r);if(u)return dm(u,n)}const i=lm(cm[uu],r);return i?dm(i,n):e}const Ry="default",Fo="bootstrap";function Dy(e){let n=2166136261;for(let r=0;r<e.length;r+=1)n^=e.charCodeAt(r),n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}function Vm(e){const n=String(e||"").trim().toLowerCase();return n?`${(n.replace(/[^a-z0-9._-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")||"project").slice(0,56)}-${Dy(n)}`:Fo}function Gf(e){const n=String(e||"").trim().toLowerCase();if(!n)return Fo;const r=n.replace(/[^a-z0-9._-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"");return r?r.slice(0,96):Fo}function Vf(e){const n=String(e||"").trim();return n?Vm(n):Fo}function Ey(e){return(e.runtimeMode==="cloud"?"cloud":"local")==="cloud"?Fo:Vf(e.projectRoot)}function Py(e){if((e.runtimeMode==="cloud"?"cloud":"local")==="cloud"){const r=String(e.workspaceId||"").trim();return r&&!Zm(r)?Vm(`cloud-workspace:${r}`):Fo}return Vf(e.projectRoot)}function Zm(e){return String(e||"").trim().toLowerCase()===Ry}const My={local:{runtimeMode:"local",authSource:"cloud",workspaceMode:"single-local",workspaceSwitchingEnabled:!1},cloud:{runtimeMode:"cloud",authSource:"cloud",workspaceMode:"multi-cloud",workspaceSwitchingEnabled:!0}};function Ly(e){return String(e||"").trim().toLowerCase()==="cloud"?"cloud":"local"}function By(e){return My[Ly(e)]}const Gl={production:{appBaseUrl:"https://app.taskforcehq.ai",mcpBaseUrl:"https://mcp.taskforcehq.ai",label:"Production",themeToken:"production"},staging:{appBaseUrl:"https://staging-app.taskforcehq.ai",mcpBaseUrl:"https://staging-mcp.taskforcehq.ai",label:"Staging",themeToken:"staging"},performance:{appBaseUrl:"https://performance-app.taskforcehq.ai",mcpBaseUrl:"https://performance-mcp.taskforcehq.ai",label:"Performance",themeToken:"performance"}};function xu(e){const n=String(e||"").trim().toLowerCase();return n==="production"||n==="staging"||n==="performance"?n:null}function Wy(e){return xu(e)||"production"}function jp(e){return Gl[Wy(String(e||""))]}function Fy(e){const n=String(e||"").trim().toLowerCase();if(!n)return null;for(const[r,s]of Object.entries(Gl))if(new URL(s.appBaseUrl).hostname.toLowerCase()===n||new URL(s.mcpBaseUrl).hostname.toLowerCase()===n)return r;return null}function qm(e){const n=String(e||"").trim();if(!n)return null;try{return Fy(new URL(n).hostname)}catch{return null}}function Oy(e){const n=qm(e);return n?Gl[n].mcpBaseUrl:null}function xi(e,n){return String(e[n]||"").trim()}function Rp(e,n,r){e.push(n),r?.(n)}function $y(e,n){const r=[],s=xi(e,"ENV"),o=xu(s);if(o)return Rp(r,`[Taskforce compat] ENV=${s} is deprecated; set TASKFORCE_CLOUD_ENVIRONMENT=${o} instead.`,n),{cloudEnvironment:o,warnings:r};const d=[{key:"TASKFORCE_CLOUD_PROXY_BASE_URL",value:xi(e,"TASKFORCE_CLOUD_PROXY_BASE_URL")},{key:"VITE_TASKFORCE_CLOUD_AUTH_BASE_URL",value:xi(e,"VITE_TASKFORCE_CLOUD_AUTH_BASE_URL")},{key:"VITE_TASKFORCE_CLOUD_MCP_BASE_URL",value:xi(e,"VITE_TASKFORCE_CLOUD_MCP_BASE_URL")},{key:"VITE_TASKFORCE_API_BASE_URL",value:xi(e,"VITE_TASKFORCE_API_BASE_URL")},{key:"VITE_TASKFORCE_BASE_URL",value:xi(e,"VITE_TASKFORCE_BASE_URL")},{key:"TASKFORCE_BASE_URL",value:xi(e,"TASKFORCE_BASE_URL")}];for(const i of d){if(!i.value)continue;const u=qm(i.value);if(u)return Rp(r,`[Taskforce compat] ${i.key} is being used to infer TASKFORCE_CLOUD_ENVIRONMENT=${u}. Set TASKFORCE_CLOUD_ENVIRONMENT explicitly.`,n),{cloudEnvironment:u,warnings:r}}return{cloudEnvironment:null,warnings:r}}function xs(e,n){return String(e[n]||"").trim()}function Uy(e){return e.toLowerCase()==="cloud"?"cloud":"local"}function yc(e){return String(e||"").trim().replace(/\/+$/,"")}function zy(e){return String(e||"").trim().replace(/\/+$/,"")}function Ys(...e){for(const n of e)if(String(n||"").trim())return String(n||"").trim();return""}function Hy(e,n={}){const r=[],s=T=>{r.push(T),n.onWarning?.(T)},o=Uy(xs(e,"TASKFORCE_RUNTIME_MODE")),d=xu(xs(e,"TASKFORCE_CLOUD_ENVIRONMENT")),i=d?{cloudEnvironment:d}:$y(e,s),u=d||i.cloudEnvironment,f=yc(String(n.requestBaseUrl||"")),k=yc(Ys(xs(e,"VITE_TASKFORCE_BASE_URL"),xs(e,"TASKFORCE_BASE_URL"))),x=yc(xs(e,"VITE_TASKFORCE_API_BASE_URL")),S=yc(xs(e,"VITE_TASKFORCE_CLOUD_AUTH_BASE_URL")),v=yc(Ys(xs(e,"VITE_TASKFORCE_CLOUD_MCP_BASE_URL"),xs(e,"TASKFORCE_CLOUD_MCP_BASE_URL"))),g=yc(xs(e,"TASKFORCE_CLOUD_PROXY_BASE_URL")),w=zy(xs(e,"VITE_TASKFORCE_WS_BASE_URL")),I=u?Gl[u].appBaseUrl:"",b=u?Gl[u].mcpBaseUrl:"",N=Ys(g,S,x,k,I),W=Ys(v,b,N),M=Ys(f,k,x,S,N),oe=Ys(f,x,k,N),te=Ys(S,k,x,N),ie=o==="local"?Ys(w,f,x,k,g,S,I,N):Ys(f,w,oe,M,N);return{runtimeMode:o,cloudEnvironment:u,cloudBaseUrl:N,cloudMcpBaseUrl:W,baseUrl:M,apiBaseUrl:oe,cloudAuthBaseUrl:te,wsBaseUrl:ie,cloudAuthViaLocalProxy:o==="local"||!!g,warnings:r}}function Km(e){return Hy({TASKFORCE_CLOUD_ENVIRONMENT:"",VITE_TASKFORCE_BASE_URL:e.VITE_TASKFORCE_BASE_URL,VITE_TASKFORCE_API_BASE_URL:e.VITE_TASKFORCE_API_BASE_URL,VITE_TASKFORCE_CLOUD_AUTH_BASE_URL:e.VITE_TASKFORCE_CLOUD_AUTH_BASE_URL,VITE_TASKFORCE_CLOUD_MCP_BASE_URL:e.VITE_TASKFORCE_CLOUD_MCP_BASE_URL,VITE_TASKFORCE_WS_BASE_URL:e.VITE_TASKFORCE_WS_BASE_URL})}const mu="unassigned",Zf="agent",Gy="user",Vy=/^[0-9a-f]{8,}$/i;function qf(e){const n=String(e||"").trim().toLowerCase();return n===Zf||n==="ai"||n.startsWith("ai-profile-")}function Kf(e){const n=String(e||"").trim().toLowerCase();return!n||n===mu||n==="none"||n==="null"||n===Gy}function pu(e){return qf(e)?"agent":Kf(e)?"unassigned":"member"}function Zy(e){const n=String(e.displayName||"").trim(),r=String(e.email||"").trim().toLowerCase();return n||r||String(e.userId||"").trim()||"Workspace member"}function Wo(){return[{value:mu,label:"Unassigned",icon:"HelpCircle",color:"var(--text-secondary)",kind:"unassigned"}]}function qy(e){const n=new Map;for(const r of e){const s=String(r.userId||"").trim();s&&n.set(s,{value:s,label:Zy(r),icon:"User",color:"#22c55e",kind:"member"})}return Vl(Array.from(n.values()))}function Vl(e){const n=new Map;for(const s of Wo())n.set(s.value,s);for(const s of Array.isArray(e)?e:[]){const o=String(s?.value||"").trim();!o||o===mu||o===Zf||n.set(o,{value:o,label:String(s.label||o).trim()||o,icon:String(s.icon||(s.kind==="agent"?"Bot":"User")),color:String(s.color||(s.kind==="agent"?"#8b5cf6":"#22c55e")),kind:s.kind==="agent"?"agent":"member"})}const r=[mu];return Array.from(n.values()).sort((s,o)=>{const d=r.indexOf(s.value),i=r.indexOf(o.value);return d>=0||i>=0?d<0?1:i<0?-1:d-i:s.label.localeCompare(o.label,void 0,{sensitivity:"base"})})}function Ky(e,n){const r=String(n||"").trim();if(!r||e.some(d=>d.value===r))return e;const s=r.replace(/^ai-profile-/i,"").replace(/[-_]+/g," ").replace(/\s+/g," ").trim(),o=s?s.split(" ").map(d=>d.charAt(0).toUpperCase()+d.slice(1)).join(" "):r;if(pu(r)==="agent"){const d=String(r).toLowerCase().startsWith("ai-profile-")&&s.split(" ").every(i=>Vy.test(i));return Vl([...e,{value:r,label:d?"AI":o||"AI",icon:"Bot",color:"#8b5cf6",kind:"agent"}])}return pu(r)==="member"?Vl([...e,{value:r,label:o||r,icon:"User",color:"#22c55e",kind:"member"}]):e}function Yf(e){const n=Array.isArray(e)?e.filter(Boolean):[];return Vl(n)}function Ti(e,n){const r=String(e||"").trim(),o=Yf(n).find(d=>d.value===r);return o?o.label:qf(r)?"AI":Kf(r)?"Unassigned":r||"Unassigned"}const Jf="taskforce.workspaceContext.v2",Yy="taskforce.uiState.app.v1",Jy="taskforce.bootstrapDebug.v1",Dp=5e3,Vd=new Map;function Xy(){if(typeof window>"u")return!1;try{const e=String(window.localStorage.getItem(Jy)||"").trim().toLowerCase();return e==="1"||e==="true"||e==="on"||e==="yes"}catch{return!1}}function Fn(e,n){if(!Xy())return;console.info("[Taskforce Bootstrap]",e,n&&typeof n=="object"?n:{})}function Qy(e,n){const r=String(e).trim()||"default";return`${String(n).trim()||"default"}::${r}`}async function Ym(e){const n=String(e.stateKey||"default").trim()||"default",r=String(e.workspaceId||"").trim(),s=e.patch&&typeof e.patch=="object"?e.patch:{},o=JSON.stringify(s),d=Qy(n,r||"default"),i=Date.now(),u=Vd.get(d);if(u&&u.serializedPatch===o){if(u.status==="success"&&e.skipIfUnchanged!==!1)return Fn("ui_state_persist_skipped",{stateKey:n,workspaceId:r||"default",reason:"unchanged"}),{skipped:!0,reason:"unchanged"};if(e.respectFailureCooldown!==!1&&u.retryAfter>i)return Fn("ui_state_persist_skipped",{stateKey:n,workspaceId:r||"default",reason:"cooldown",retryAfterMs:u.retryAfter-i}),{skipped:!0,reason:"cooldown"}}try{const f=await fetch("/api/taskforce/ui-state",{method:"POST",headers:{"Content-Type":"application/json",...e.headers||{}},credentials:"include",body:JSON.stringify({stateKey:n,...r?{workspaceId:r}:{},patch:s})}),k=await f.json().catch(()=>({}));if(f.ok&&k?.success!==!1)return Vd.set(d,{serializedPatch:o,status:"success",retryAfter:0}),{skipped:!1,response:f,payload:k};if(Vd.set(d,{serializedPatch:o,status:"failure",retryAfter:i+(e.failureRetryMs??Dp)}),Fn("ui_state_persist_failed",{stateKey:n,workspaceId:r||"default",status:f.status,error:String(k?.error||"")}),e.throwOnError)throw new Error(String(k?.error||`Failed to persist UI state (${f.status})`));return{skipped:!1,response:f,payload:k}}catch(f){if(Vd.set(d,{serializedPatch:o,status:"failure",retryAfter:i+(e.failureRetryMs??Dp)}),Fn("ui_state_persist_failed",{stateKey:n,workspaceId:r||"default",error:f instanceof Error?f.message:String(f)}),e.throwOnError)throw f;return{skipped:!1,payload:null}}}function Jm(e){const n=Vm(e);return`${Jf}.${n}`}function Xf(e){const n=Gf(e);return`${Jf}.${n}`}function Dm(e){if(typeof window>"u")return"";try{const n=Jm(e),r=String(window.localStorage.getItem(n)||"").trim();if(r&&r.length<=120&&!/\s/.test(r))return r;const s=Xf(e),o=String(window.localStorage.getItem(s)||"").trim();return o&&o.length<=120&&!/\s/.test(o)?(window.localStorage.setItem(n,o),o):""}catch{return""}}function ev(e,n){if(typeof window>"u")return;const r=String(e||"").trim();try{if(!r||Zm(r))return;const s=Jm(n),o=String(window.localStorage.getItem(s)||"").trim();if(!r&&o&&o.toLowerCase()!=="default")return;window.localStorage.setItem(s,r)}catch{}}function Ep(e){if(!(typeof window>"u"))try{window.localStorage.removeItem(Jm(e)),window.localStorage.removeItem(Xf(e))}catch{}}function Qf(e){const n=Gf(e);return`${Yy}.${n}`}function Pp(e){if(typeof window>"u")return null;try{const n=window.localStorage.getItem(Qf(e));if(!n)return null;const r=JSON.parse(n);return r&&typeof r=="object"?r:null}catch{return null}}function tv(e,n){if(!(typeof window>"u"))try{window.localStorage.setItem(Qf(n),JSON.stringify(e))}catch{}}const Em="taskforce.localMutationActorUserId.v1";function eh(e){return typeof e=="string"?e.trim().replace(/\/+$/,""):""}function nv(e){const n=String(e||"").trim().toLowerCase();return n==="localhost"||n==="127.0.0.1"||n==="::1"||n==="[::1]"}function Ll(e){if(!(typeof window>"u"))try{const n=String(e||"").trim();if(!n||n==="anonymous"){window.sessionStorage.removeItem(Em);return}window.sessionStorage.setItem(Em,n)}catch{}}function Xm(){if(typeof window>"u")return"";try{return String(window.sessionStorage.getItem(Em)||"").trim()}catch{return""}}function av(e,n){if(typeof window>"u"||!e.startsWith("/api/taskforce/")||!nv(window.location.hostname))return!1;try{return new URL(n,window.location.origin).origin===window.location.origin}catch{return e.startsWith("/")}}function rv(e,n,r){if(!av(e,n))return r;const s=Xm();if(!s)return r;const o=new Headers(r?.headers||void 0);return o.has("x-taskforce-user-id")||o.set("x-taskforce-user-id",s),{...r,headers:o}}function sv(e,n){if(!e.startsWith("/"))return e;const r=eh(n);return r?`${r}${e}`:e}async function um(e,n,r){const s=sv(e,r),o=eh(r).length>0,d=rv(e,s,n),i=typeof performance<"u"?performance.now():Date.now();try{const u=await fetch(s,d);if(!(o&&s!==e&&e.startsWith("/api/taskforce/")&&(u.status===401||u.status===403)))return u;Fn("taskforce_api_auth_fallback_retry",{path:e,primaryUrl:s,fallbackUrl:e,status:u.status,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-i)});try{const k=await fetch(e,d);return Fn("taskforce_api_auth_fallback_completed",{path:e,primaryUrl:s,fallbackUrl:e,primaryStatus:u.status,fallbackStatus:k.status,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-i)}),k}catch{return Fn("taskforce_api_auth_fallback_failed",{path:e,primaryUrl:s,fallbackUrl:e,status:u.status,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-i)}),u}}catch(u){if(!o||!e.startsWith("/"))throw u;Fn("taskforce_api_network_fallback_retry",{path:e,primaryUrl:s,fallbackUrl:e,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-i),error:u instanceof Error?u.message:String(u)});const f=await fetch(e,d);return Fn("taskforce_api_network_fallback_completed",{path:e,primaryUrl:s,fallbackUrl:e,fallbackStatus:f.status,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-i)}),f}}function ov(e){const n=Number(e?.status);return Number.isFinite(n)&&n>0?Math.floor(n):0}async function jc(e){try{const n=await e,r=await n.text().catch(()=>"");let s={};if(r)try{s=JSON.parse(r)}catch{s={error:!n.ok&&n.statusText?`${n.status} ${n.statusText}`:r.slice(0,400)}}else!n.ok&&n.statusText&&(s={error:`${n.status} ${n.statusText}`});const o=n.headers.get("retry-after");let d;if(o){const i=Number.parseInt(o,10);if(Number.isFinite(i)&&i>0)d=i*1e3;else{const u=Date.parse(o);if(Number.isFinite(u)){const f=u-Date.now();f>0&&(d=f)}}}return{ok:n.ok,status:n.status,data:s,retryAfterMs:d}}catch(n){return{ok:!1,status:ov(n),data:{}}}}async function iv(e){return jc(fetch(e("/api/taskforce/sync/user-settings"),{method:"GET",credentials:"include"}))}async function cv(e,n){return jc(fetch(e("/api/taskforce/sync/user-settings"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(n)}))}async function Mp(e,n){return jc(fetch(e("/api/taskforce/sync/workspace/handshake"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({workspaceId:n})}))}async function lv(e,n){return jc(fetch(e("/api/taskforce/sync/workspace/provision"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(n)}))}async function dv(e,n){const r=new URLSearchParams({limit:String(n.limit),workspaceId:n.workspaceId});n.cursor&&r.set("cursor",n.cursor),n.repairMode===!0&&r.set("repair","1");const s=e("/api/taskforce/sync/workspace/pull"),o=s.includes("?")?"&":"?";return jc(fetch(`${s}${o}${r.toString()}`,{method:"GET",credentials:"include"}))}async function uv(e,n){return jc(fetch(e("/api/taskforce/sync/workspace/push"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({...n,...n.repairMode===!0?{repair:!0}:{}})}))}async function Pm(e,n,r){const s=JSON.stringify({workspaceId:e,changes:n,workspaceMembers:Array.isArray(r?.workspaceMembers)?r.workspaceMembers:void 0,...r?.repairMode===!0?{repair:!0}:{},bootstrapSnapshot:r?.bootstrapSnapshot?{currentAnnotatedAttachmentSessionIds:Array.isArray(r.bootstrapSnapshot.currentAnnotatedAttachmentSessionIds)?r.bootstrapSnapshot.currentAnnotatedAttachmentSessionIds:[]}:void 0}),o="/api/taskforce/sync/workspace/apply-local",d=[];try{const i=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json","x-taskforce-workspace-id":e},credentials:"include",body:s});if(i.ok){const k=await i.json().catch(()=>({}));return{ok:!0,status:i.status,data:k,failures:d}}const u=await i.text().catch(()=>"");let f={};if(u)try{f=JSON.parse(u)}catch{f={error:u.slice(0,400)}}else i.statusText&&(f={error:`${i.status} ${i.statusText}`});return d.push(`${o}:${i.status}`),{ok:!1,status:i.status,data:f,failures:d}}catch{d.push(`${o}:network`)}return{ok:!1,status:0,data:{},failures:d}}const Mm="V1:AESGCM:",Qm="AES-GCM",mv=12;async function th(e){const n=Buffer.from(e,"base64");if(n.length!==32)throw new Error("Encryption key must be exactly 32 bytes (256-bit).");return crypto.subtle.importKey("raw",n,{name:Qm},!1,["encrypt","decrypt"])}async function Lp(e,n){if(!e)return e;const r=crypto.getRandomValues(new Uint8Array(mv)),s=await th(n),d=new TextEncoder().encode(e),i=await crypto.subtle.encrypt({name:Qm,iv:r},s,d),u=Buffer.from(i).toString("base64"),f=Buffer.from(r).toString("base64");return`${Mm}${f}:${u}`}async function Bp(e,n){if(!e||!e.startsWith(Mm))return e;const r=e.slice(Mm.length),[s,o]=r.split(":");if(!s||!o)throw new Error("Malformed encrypted document payload.");const d=Buffer.from(s,"base64"),i=Buffer.from(o,"base64"),u=await th(n);try{const f=await crypto.subtle.decrypt({name:Qm,iv:d},u,i);return new TextDecoder("utf-8").decode(f)}catch(f){throw new Error(`Failed to decrypt document: ${f.message}`)}}var Sc={};function As(e){return e&&typeof e=="object"?e:{}}function no(e){const n=Number(e||0);return n===0||n===429||n>=500}function pv(e,n){const r=String(e.code||"").trim().toUpperCase(),s=String(e.error||"").trim();return r==="WORKSPACE_ID_ALREADY_EXISTS"||s.toLowerCase()==="workspace id already exists"?"This workspace is already linked to another cloud account. Sign in with the original account, ask the workspace owner to grant you access, or keep this workspace local-only.":s||`Workspace provisioning failed (${n})`}async function fv(e){if(!e.cloudAuthConfigured)return{success:!1,error:"Cloud auth endpoint is not configured."};if(e.runtimeMode!=="local")return{success:!1,error:"Workspace sync is only available in local runtime."};if(!e.isAuthenticated)return{success:!1,error:"Authentication required."};try{let n=await Mp(e.resolveCloudAuthUrl,e.workspaceId);if(n.ok)return{success:!0,provisioned:!1};const r=As(n.data);if(n.status===401)return{success:!1,statusCode:401,transient:!1,error:String(r.error||"Authentication required for workspace sync.")};if(n.status===429)return{success:!1,statusCode:429,retryAfterMs:n.retryAfterMs,transient:!0,error:String(r.error||"Workspace sync rate limited. Please retry later.")};if(n.status===409&&r.code==="WORKSPACE_ID_MISMATCH"){const s=await lv(e.resolveCloudAuthUrl,{workspaceId:e.workspaceId,name:e.workspaceName||e.workspaceId});if(!s.ok){const o=As(s.data);return{success:!1,statusCode:s.status,error:pv(o,s.status)}}if(n=await Mp(e.resolveCloudAuthUrl,e.workspaceId),!n.ok){const o=As(n.data);return n.status===401?{success:!1,statusCode:401,transient:!1,error:String(o.error||"Authentication required for workspace sync.")}:n.status===429?{success:!1,statusCode:429,retryAfterMs:n.retryAfterMs,transient:!0,error:String(o.error||"Workspace sync rate limited. Please retry later.")}:{success:!1,statusCode:n.status,transient:no(n.status),error:String(o.error||`Workspace sync handshake failed (${n.status})`)}}return{success:!0,provisioned:!0}}return{success:!1,statusCode:n.status,transient:no(n.status),error:String(r.error||`Workspace sync handshake failed (${n.status})`)}}catch{return{success:!1,statusCode:0,transient:!0,error:"Failed to validate workspace sync access."}}}async function hv(e,n){const r=JSON.stringify([e,n]);try{const s=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(r));return Array.from(new Uint8Array(s)).map(o=>o.toString(16).padStart(2,"0")).join("")}catch{let s=2166136261;for(let d=0;d<r.length;d+=1)s^=r.charCodeAt(d),s=Math.imul(s,16777619);const o=(s>>>0).toString(16).padStart(8,"0");return`${e}:fallback:${o}`}}async function gv(e){const n=e.payload.changes.length,r=e.payload.deleteTaskIds.size,s=await hv(e.workspaceId,e.payload.changes);let o=0,d=e.payload.changes;if(typeof process<"u"&&Sc?.TASKFORCE_SYNC_KEY){const S=Sc.TASKFORCE_SYNC_KEY,v=[];for(const g of d)g.op==="document-upsert"&&typeof g.content=="string"?v.push({...g,content:await Lp(g.content,S)}):g.op==="asset-upsert"&&typeof g.contentBase64=="string"&&g.contentBase64.length>0?v.push({...g,contentBase64:await Lp(g.contentBase64,S)}):v.push(g);d=v}const i=async()=>{const S=Date.now(),v=await uv(e.resolveCloudAuthUrl,{workspaceId:e.workspaceId,idempotencyKey:s,changes:d,repairMode:e.repairMode===!0});return o+=Date.now()-S,v};let u=await i();if(!u.ok&&(u.status===403||u.status===409)&&(await e.ensureCloudWorkspaceReadyForSync()).success&&(u=await i()),!u.ok){const S=As(u.data);return{success:!1,status:u.status,error:typeof S.error=="string"?S.error:void 0,code:typeof S.code=="string"?S.code:void 0,retryAfterMs:u.retryAfterMs,transient:no(u.status),requestMs:o,changeCount:n,deleteCount:r,currentTaskIds:e.payload.currentTaskIds,deleteTaskIds:e.payload.deleteTaskIds,currentInitiativeIds:e.payload.currentInitiativeIds,currentInitiativeWatermarks:e.payload.currentInitiativeWatermarks,currentWorkstreamIds:e.payload.currentWorkstreamIds,currentWorkstreamWatermarks:e.payload.currentWorkstreamWatermarks,currentAiProfileIds:e.payload.currentAiProfileIds,currentAiProfileWatermarks:e.payload.currentAiProfileWatermarks,currentDocumentPaths:e.payload.currentDocumentPaths,deleteDocumentPaths:e.payload.deleteDocumentPaths,currentDocumentWatermarks:e.payload.currentDocumentWatermarks,currentAssetPaths:e.payload.currentAssetPaths,deleteAssetPaths:e.payload.deleteAssetPaths,currentAssetWatermarks:e.payload.currentAssetWatermarks,currentDocumentReviewSessionIds:e.payload.currentDocumentReviewSessionIds,deleteDocumentReviewSessionIds:e.payload.deleteDocumentReviewSessionIds,currentDocumentReviewSessionWatermarks:e.payload.currentDocumentReviewSessionWatermarks,currentDocumentReviewCommentIds:e.payload.currentDocumentReviewCommentIds,deleteDocumentReviewCommentIds:e.payload.deleteDocumentReviewCommentIds,currentDocumentReviewCommentWatermarks:e.payload.currentDocumentReviewCommentWatermarks,currentAnnotatedAttachmentSessionIds:e.payload.currentAnnotatedAttachmentSessionIds,deleteAnnotatedAttachmentSessionIds:e.payload.deleteAnnotatedAttachmentSessionIds,currentAnnotatedAttachmentSessionWatermarks:e.payload.currentAnnotatedAttachmentSessionWatermarks,currentTaskEventWatermarks:e.payload.currentTaskEventWatermarks,pushedWatermarks:new Map,emittedEventIds:[],appliedTaskUpserts:[]}}const f=As(u.data),k=Array.isArray(f.emittedEventIds)?Array.from(new Set(f.emittedEventIds.map(S=>String(S||"").trim()).filter(Boolean))):[],x=Array.isArray(f.appliedTaskUpserts)?f.appliedTaskUpserts.map(S=>{const v=S&&typeof S=="object"?S:{},g=v.task&&typeof v.task=="object"?v.task:null,w=String(g?.id||"").trim();return!g||!w?null:{archived:v.archived===!0,task:g}}).filter(S=>!!S):[];return{success:!0,syncedAt:new Date().toISOString(),requestMs:o,changeCount:n,deleteCount:r,currentTaskIds:e.payload.currentTaskIds,deleteTaskIds:e.payload.deleteTaskIds,currentInitiativeIds:e.payload.currentInitiativeIds,currentInitiativeWatermarks:e.payload.currentInitiativeWatermarks,currentWorkstreamIds:e.payload.currentWorkstreamIds,currentWorkstreamWatermarks:e.payload.currentWorkstreamWatermarks,currentAiProfileIds:e.payload.currentAiProfileIds,currentAiProfileWatermarks:e.payload.currentAiProfileWatermarks,currentDocumentPaths:e.payload.currentDocumentPaths,deleteDocumentPaths:e.payload.deleteDocumentPaths,currentDocumentWatermarks:e.payload.currentDocumentWatermarks,currentAssetPaths:e.payload.currentAssetPaths,deleteAssetPaths:e.payload.deleteAssetPaths,currentAssetWatermarks:e.payload.currentAssetWatermarks,currentDocumentReviewSessionIds:e.payload.currentDocumentReviewSessionIds,deleteDocumentReviewSessionIds:e.payload.deleteDocumentReviewSessionIds,currentDocumentReviewSessionWatermarks:e.payload.currentDocumentReviewSessionWatermarks,currentDocumentReviewCommentIds:e.payload.currentDocumentReviewCommentIds,deleteDocumentReviewCommentIds:e.payload.deleteDocumentReviewCommentIds,currentDocumentReviewCommentWatermarks:e.payload.currentDocumentReviewCommentWatermarks,currentAnnotatedAttachmentSessionIds:e.payload.currentAnnotatedAttachmentSessionIds,deleteAnnotatedAttachmentSessionIds:e.payload.deleteAnnotatedAttachmentSessionIds,currentAnnotatedAttachmentSessionWatermarks:e.payload.currentAnnotatedAttachmentSessionWatermarks,currentTaskEventWatermarks:e.payload.currentTaskEventWatermarks,pushedWatermarks:e.payload.pushedWatermarks,emittedEventIds:k,appliedTaskUpserts:x}}async function yv(e){let n=e.cursor,r=!0,s=0,o=0,d=0,i=0;const u=new Set;let f=!1,k=!1,x=!1;const S=new Set,v=new Set,g=new Set;let w=null;const I=Number.isFinite(Number(e.maxPages))?Math.max(1,Math.floor(Number(e.maxPages))):20;try{for(;r&&s<I;){const b=async()=>{const T=Date.now(),ve=await dv(e.resolveCloudAuthUrl,{workspaceId:e.workspaceId,cursor:n,limit:e.bootstrap?500:200,repairMode:e.repairMode===!0});return d+=Date.now()-T,ve};let N=await b();if(!N.ok&&N.status===403&&e.ensureCloudWorkspaceReadyForSync&&(await e.ensureCloudWorkspaceReadyForSync()).success&&(N=await b()),!N.ok)return{success:!1,kind:"pull_http",status:N.status,retryAfterMs:N.retryAfterMs,transient:no(N.status),cursor:n,pages:s,appliedChanges:o,pullRequestMs:d,applyMs:i,pulledDeleteTaskIds:u,pulledActiveUpserts:f,pulledArchivedUpserts:k,pulledTaskEventUpserts:x,documentDecryptFailures:Array.from(S),serverDiagnostics:null};const W=N.data||{},M=Array.isArray(W?.changes)?W.changes:[],oe=W?.diagnostics&&typeof W.diagnostics=="object"?W.diagnostics:null;w=oe;const te=Array.isArray(W?.workspaceMembers),ie=te?W.workspaceMembers:void 0;for(const T of M){if(T.op==="upsert"){T?.archived===!0||T?.task?.isArchived===!0?k=!0:f=!0;continue}if(T.op==="annotated-attachment-session-upsert"){const O=String(T?.session?.id||"").trim();O&&g.add(O);continue}if(T.op==="task-event-upsert"){x=!0;continue}if(T.op==="document-upsert"){if(typeof T.content=="string"&&typeof process<"u"&&Sc?.TASKFORCE_SYNC_KEY)try{T.content=await Bp(T.content,Sc.TASKFORCE_SYNC_KEY)}catch{const O=String(T.path||"").trim();O&&S.add(O)}continue}if(T.op==="asset-upsert"){if(typeof T.contentBase64=="string"&&typeof process<"u"&&Sc?.TASKFORCE_SYNC_KEY)try{T.contentBase64=await Bp(T.contentBase64,Sc.TASKFORCE_SYNC_KEY)}catch{const O=String(T.path||"").trim();O&&S.add(O)}continue}if(T.op!=="delete")continue;const ve=String(T.taskId||"").trim();ve&&u.add(ve)}if(e.onPagePulled&&e.onPagePulled(),M.length>0||te){const T=Date.now(),ve=await Pm(e.workspaceId,M,{...te?{workspaceMembers:ie}:{},repairMode:e.repairMode===!0}),O=ve.failures;if(!ve.ok){i+=Date.now()-T;const le=As(ve.data);if(O.some(R=>R.endsWith(":401")))return{success:!1,kind:"apply_auth",status:401,transient:!1,failures:O,cursor:n,pages:s,appliedChanges:o,pullRequestMs:d,applyMs:i,pulledDeleteTaskIds:u,pulledActiveUpserts:f,pulledArchivedUpserts:k,pulledTaskEventUpserts:x,documentDecryptFailures:Array.from(S),serverDiagnostics:oe};const X=O.some(R=>{if(R.endsWith(":network"))return!0;const U=R.split(":").pop()||"",Z=Number.parseInt(U,10);return Number.isFinite(Z)&&(Z===429||Z>=500)});return{success:!1,kind:"apply_all_candidates",status:ve.status||void 0,transient:X,error:String(le.error||"").trim()||void 0,failures:O,hasTransientApplyFailure:X,cursor:n,pages:s,appliedChanges:o,pullRequestMs:d,applyMs:i,pulledDeleteTaskIds:u,pulledActiveUpserts:f,pulledArchivedUpserts:k,pulledTaskEventUpserts:x,documentDecryptFailures:Array.from(S),emittedEventIds:Array.from(v),serverDiagnostics:w}}const J=As(ve.data);if(J.success===!1)return i+=Date.now()-T,{success:!1,kind:"apply_payload",transient:!1,error:String(J.error||"Workspace sync apply failed."),cursor:n,pages:s,appliedChanges:o,pullRequestMs:d,applyMs:i,pulledDeleteTaskIds:u,pulledActiveUpserts:f,pulledArchivedUpserts:k,pulledTaskEventUpserts:x,documentDecryptFailures:Array.from(S),emittedEventIds:Array.from(v),serverDiagnostics:w};if(i+=Date.now()-T,o+=M.length,Array.isArray(J.emittedEventIds))for(const le of J.emittedEventIds)v.add(String(le));e.onChangesApplied&&e.onChangesApplied(M.length)}W&&"nextCursor"in W&&(W.nextCursor===null||typeof W.nextCursor=="string")&&(n=W.nextCursor),r=!!W?.hasMore,s+=1}if(e.bootstrap){const b=Date.now(),N=await Pm(e.workspaceId,[],{bootstrapSnapshot:{currentAnnotatedAttachmentSessionIds:Array.from(g)}}),W=N.failures;if(!N.ok){i+=Date.now()-b;const M=As(N.data);if(W.some(ie=>ie.endsWith(":401")))return{success:!1,kind:"apply_auth",status:401,transient:!1,failures:W,cursor:n,pages:s,appliedChanges:o,pullRequestMs:d,applyMs:i,pulledDeleteTaskIds:u,pulledActiveUpserts:f,pulledArchivedUpserts:k,pulledTaskEventUpserts:x,documentDecryptFailures:Array.from(S),emittedEventIds:Array.from(v),serverDiagnostics:w};const te=W.some(ie=>{if(ie.endsWith(":network"))return!0;const T=ie.split(":").pop()||"",ve=Number.parseInt(T,10);return Number.isFinite(ve)&&(ve===429||ve>=500)});return{success:!1,kind:"apply_all_candidates",status:N.status||void 0,transient:te,error:String(M.error||"").trim()||void 0,failures:W,hasTransientApplyFailure:te,cursor:n,pages:s,appliedChanges:o,pullRequestMs:d,applyMs:i,pulledDeleteTaskIds:u,pulledActiveUpserts:f,pulledArchivedUpserts:k,pulledTaskEventUpserts:x,documentDecryptFailures:Array.from(S),emittedEventIds:Array.from(v),serverDiagnostics:w}}i+=Date.now()-b}return{success:!0,syncedAt:new Date().toISOString(),cursor:n||null,pages:s,appliedChanges:o,pullRequestMs:d,applyMs:i,pulledDeleteTaskIds:u,pulledActiveUpserts:f,pulledArchivedUpserts:k,pulledTaskEventUpserts:x,documentDecryptFailures:Array.from(S),emittedEventIds:Array.from(v),serverDiagnostics:w}}catch(b){return{success:!1,kind:"exception",status:0,transient:!0,error:String(b?.message||b||"Workspace sync pull failed unexpectedly."),cursor:n||null,pages:s,appliedChanges:o,pullRequestMs:d,applyMs:i,pulledDeleteTaskIds:u,pulledActiveUpserts:f,pulledArchivedUpserts:k,pulledTaskEventUpserts:x,documentDecryptFailures:Array.from(S),emittedEventIds:Array.from(v),serverDiagnostics:null}}}async function vv(e){const n=await iv(e.resolveCloudAuthUrl);if(!n.ok){const v=Number(n.status||0);return{success:!1,error:`Sync pull failed (${n.status})`,statusCode:n.status,retryAfterMs:n.retryAfterMs,transient:no(v)}}const r=As(n.data),s=r.settings&&typeof r.settings=="object"?r.settings:{},o=typeof r.updatedAt=="string"&&r.updatedAt.trim().length>0?r.updatedAt.trim():null,d=e.getLocalUpdatedAt(e.userId),i=d?Date.parse(d):NaN,u=o?Date.parse(o):NaN;if(!d&&e.preferCloudOnFirstSync&&Number.isFinite(u))return await e.applyRemoteSettings(s),{success:!0,mode:"pulled",updatedAt:o};if(Number.isFinite(u)&&(!Number.isFinite(i)||u>i))return await e.applyRemoteSettings(s),{success:!0,mode:"pulled",updatedAt:o};const f=d||new Date().toISOString(),k=await cv(e.resolveCloudAuthUrl,{settings:e.buildLocalSettings(),updatedAt:f});if(!k.ok){const v=Number(k.status||0);return{success:!1,error:`Sync push failed (${k.status})`,statusCode:k.status,retryAfterMs:k.retryAfterMs,transient:no(v)}}const x=As(k.data);return{success:!0,mode:"pushed",updatedAt:typeof x.updatedAt=="string"&&x.updatedAt.trim().length>0?x.updatedAt.trim():f}}function kv(e){const n=Math.max(1,Math.floor(Number(e)||1)),r=Math.min(12e4,1500*2**Math.max(0,n-1)),s=Math.floor(r*(.15*Math.random()));return r+s}const Sv=["chat_app","ide","coding_tool","agent","other"],gL=["chat_app","ide","coding_tool","agent","other","unclassified"],wv={chat_app:"Chat app",ide:"IDE",coding_tool:"Coding tool",agent:"Agent",other:"Other"},bv={chat_app:"Chat Apps",ide:"IDEs",coding_tool:"Coding Tools",agent:"Agents",other:"Other",unclassified:"Unclassified"};function xv(e){return typeof e=="string"&&Sv.includes(e)}function nh(e){if(typeof e!="string")return null;const n=e.trim();return xv(n)?n:null}function yL(e){return wv[e]}function vL(e){return e??"unclassified"}function kL(e){return bv[e]}function Zd(e){if(e==null)return;const n=String(e).trim();return n.length>0?n:void 0}function qd(e){if(e===void 0)return;if(e===null)return null;const n=String(e).trim();return n.length>0?n:null}function _v(e){return typeof e=="boolean"?e:void 0}function Kd(e,n){if(e===void 0)return;if(e===null||e==="")return n?.nullable?null:void 0;const r=typeof e=="number"?e:Number(e);if(!Number.isFinite(r))return n?.nullable?null:void 0;const s=Math.floor(r);return Number.isFinite(n?.min)&&s<Number(n?.min)?n?.nullable?null:void 0:s}function Cv(e){if(!e||typeof e!="object"||Array.isArray(e))return;const r=Object.entries(e).reduce((s,[o,d])=>Array.isArray(d)?(s[o]=d.map(i=>String(i??"")),s):(d==null||(s[o]=String(d)),s),{});return Object.keys(r).length>0?r:{}}function Av(e){return Array.isArray(e)?e:void 0}function Tv(e){return Array.isArray(e)?e:void 0}function Iv(e){return Array.isArray(e)?e:void 0}function Nv(e){const n=e&&typeof e=="object"?e:{};return{id:String(n.id||"").trim(),title:String(n.title||"").trim(),description:n.description===void 0?void 0:n.description||null,status:String(n.status||"task").trim()||"task",priority:Kd(n.priority,{min:1})??void 0,complexity:Kd(n.complexity,{min:1,nullable:!0}),type:String(n.type||"").trim(),category:String(n.category||"").trim(),approach:Zd(n.approach),canceledReason:n.canceledReason===void 0?void 0:n.canceledReason||null,createdAt:String(n.createdAt||"").trim(),updatedAt:Zd(n.updatedAt),completedAt:n.completedAt===void 0?void 0:n.completedAt||null,isArchived:_v(n.isArchived),taxonomies:Cv(n.taxonomies),createdBy:Zd(n.createdBy),assignee:Zd(n.assignee),scheduledDate:qd(n.scheduledDate),dueDate:qd(n.dueDate),scheduledWeekKey:qd(n.scheduledWeekKey),orderInDay:Kd(n.orderInDay,{min:0,nullable:!0}),workstreamId:qd(n.workstreamId),referenceNumber:Kd(n.referenceNumber,{min:1,nullable:!0}),comments:Av(n.comments),attachments:Tv(n.attachments),checklistItems:Iv(n.checklistItems)}}function Wp(e){return Nv(e)}function jv(e){return[...e].sort((n,r)=>{const s=String(n?.createdAt||"").trim(),o=String(r?.createdAt||"").trim(),d=s.localeCompare(o);return d!==0?d:String(n?.id||"").trim().localeCompare(String(r?.id||"").trim())})}function Fp(e){return[...e].sort((n,r)=>{const s=String(n?.id||"").trim(),o=String(r?.id||"").trim();return s.localeCompare(o)})}function Rv(e){const n=new Date().toISOString(),r=new Set(Array.from(e.pendingDeletedTaskIds).map(c=>String(c||"").trim()).filter(c=>c.length>0)),s=e.lastPushedWatermarks,o=c=>{if((c?.referenceNumber===void 0||c?.referenceNumber===null)&&Number.isFinite(Number(c?.localReferenceNumber))||!s||s.size===0)return!0;const Ue=String(c?.id||"").trim();if(!Ue)return!1;const At=String(c?.updatedAt||c?.createdAt||"").trim();return s.get(Ue)!==At},d=Fp(e.tasks||[]),i=Fp(e.archivedTasks||[]),u=new Map,f=d.filter(c=>!r.has(String(c?.id||"").trim())&&o(c)).map(c=>{const Ue=String(c?.id||"").trim(),At=String(c?.updatedAt||c?.createdAt||"").trim();return Ue&&u.set(Ue,At),{op:"upsert",archived:!1,task:Wp(c)}}),k=i.filter(c=>!r.has(String(c?.id||"").trim())&&o(c)).map(c=>{const Ue=String(c?.id||"").trim(),At=String(c?.updatedAt||c?.createdAt||"").trim();return Ue&&u.set(Ue,At),{op:"upsert",archived:!0,task:Wp(c)}}),x=new Set;for(const c of e.tasks||[]){const Ue=String(c?.id||"").trim();Ue&&x.add(Ue)}for(const c of e.archivedTasks||[]){const Ue=String(c?.id||"").trim();Ue&&x.add(Ue)}const S=Array.from(e.lastPushedTaskIds).filter(c=>!x.has(c)).map(c=>({op:"delete",taskId:c})),v=Array.from(r).map(c=>({op:"delete",taskId:c})),g=new Set([...S.map(c=>String(c.taskId)),...v.map(c=>String(c.taskId))]),w=new Set((Array.isArray(e.initiatives)?e.initiatives:[]).map(c=>String(c?.id||"").trim()).filter(c=>c.length>0)),I=new Map((Array.isArray(e.initiatives)?e.initiatives:[]).map(c=>[String(c?.id||"").trim(),String(c?.updatedAt||c?.createdAt||"").trim()]).filter(([c])=>c.length>0)),b=e.lastPushedInitiativeWatermarks,N=!b||b.size===0,W=(Array.isArray(e.initiatives)?e.initiatives:[]).map(c=>({op:"initiative-upsert",initiative:{id:String(c?.id||"").trim(),referenceNumber:Number.isFinite(Number(c?.referenceNumber))?Math.max(1,Math.floor(Number(c.referenceNumber))):null,referenceLabel:typeof c?.referenceLabel=="string"&&c.referenceLabel.trim().length>0?c.referenceLabel.trim():void 0,title:String(c?.title||"").trim(),description:typeof c?.description=="string"?c.description:null,ownerId:typeof c?.ownerId=="string"&&c.ownerId.trim().length>0?c.ownerId.trim():null,createdAt:String(c?.createdAt||"").trim(),updatedAt:String(c?.updatedAt||c?.createdAt||"").trim(),order:Number.isFinite(Number(c?.order))?Math.floor(Number(c.order)):null,isArchived:!!c?.isArchived}})).filter(c=>c.initiative.id.length>0).filter(c=>N?!0:b.get(c.initiative.id)!==c.initiative.updatedAt),M=new Set((Array.isArray(e.workstreams)?e.workstreams:[]).map(c=>String(c?.id||"").trim()).filter(c=>c.length>0)),oe=new Map((Array.isArray(e.workstreams)?e.workstreams:[]).map(c=>[String(c?.id||"").trim(),String(c?.updatedAt||c?.createdAt||"").trim()]).filter(([c])=>c.length>0)),te=e.lastPushedWorkstreamWatermarks,ie=!te||te.size===0,T=(Array.isArray(e.workstreams)?e.workstreams:[]).map(c=>({op:"workstream-upsert",workstream:{id:String(c?.id||"").trim(),referenceNumber:Number.isFinite(Number(c?.referenceNumber))?Math.max(1,Math.floor(Number(c.referenceNumber))):null,referenceLabel:typeof c?.referenceLabel=="string"&&c.referenceLabel.trim().length>0?c.referenceLabel.trim():void 0,initiativeId:typeof c?.initiativeId=="string"&&c.initiativeId.trim().length>0?c.initiativeId.trim():null,title:String(c?.title||"").trim(),description:typeof c?.description=="string"?c.description:null,ownerId:typeof c?.ownerId=="string"&&c.ownerId.trim().length>0?c.ownerId.trim():null,createdAt:String(c?.createdAt||"").trim(),updatedAt:String(c?.updatedAt||c?.createdAt||"").trim(),order:Number.isFinite(Number(c?.order))?Math.floor(Number(c.order)):null,isArchived:!!c?.isArchived}})).filter(c=>c.workstream.id.length>0).filter(c=>ie?!0:te.get(c.workstream.id)!==c.workstream.updatedAt),ve=new Set((Array.isArray(e.aiProfiles)?e.aiProfiles:[]).map(c=>String(c?.id||"").trim()).filter(c=>c.length>0)),O=new Map((Array.isArray(e.aiProfiles)?e.aiProfiles:[]).map(c=>[String(c?.id||"").trim(),String(c?.updatedAt||c?.createdAt||"").trim()]).filter(([c])=>c.length>0)),J=e.lastPushedAiProfileWatermarks,le=!J||J.size===0,ge=(Array.isArray(e.aiProfiles)?e.aiProfiles:[]).map(c=>({op:"ai-profile-upsert",profile:{id:String(c.id||"").trim(),workspaceId:String(c.workspaceId||"").trim(),profileToken:String(c.profileToken||"").trim(),name:String(c.name||"").trim(),username:String(c.username||"").trim(),icon:String(c.icon||"Bot").trim()||"Bot",color:String(c.color||"#8b5cf6").trim()||"#8b5cf6",description:typeof c.description=="string"&&c.description.trim()||null,role:typeof c.role=="string"&&c.role.trim()||null,provider:typeof c.provider=="string"&&c.provider.trim()||null,model:typeof c.model=="string"&&c.model.trim()||null,surfaceType:nh(c.surfaceType),providerMetadata:c.providerMetadata&&typeof c.providerMetadata=="object"&&!Array.isArray(c.providerMetadata)?c.providerMetadata:null,createdAt:String(c.createdAt||"").trim(),updatedAt:String(c.updatedAt||c.createdAt||"").trim(),lastActiveAt:typeof c.lastActiveAt=="string"&&c.lastActiveAt.trim().length>0?c.lastActiveAt.trim():null}})).filter(c=>c.profile.id.length>0&&c.profile.workspaceId.length>0).filter(c=>le?!0:J.get(c.profile.id)!==c.profile.updatedAt),X=new Set((Array.isArray(e.documents)?e.documents:[]).map(c=>String(c?.path||"").trim()).filter(c=>c.length>0)),R=new Set(Array.from(e.lastPushedDocumentPaths||new Set).map(c=>String(c||"").trim()).filter(c=>c.length>0&&!X.has(c))),U=new Map((Array.isArray(e.documents)?e.documents:[]).map(c=>[String(c?.path||"").trim(),String(c?.updatedAt||"").trim()]).filter(([c])=>c.length>0)),Z=e.lastPushedDocumentWatermarks,he=!Z||Z.size===0,Q=(Array.isArray(e.documents)?e.documents:[]).map(c=>({op:"document-upsert",path:String(c.path||"").trim(),updatedAt:String(c.updatedAt||"").trim(),content:typeof c.content=="string"?c.content:"",assetId:typeof c.assetId=="string"&&c.assetId.trim().length>0?c.assetId.trim():void 0,documentId:typeof c.documentId=="string"&&c.documentId.trim().length>0?c.documentId.trim():null,referenceNumber:Number.isFinite(Number(c.referenceNumber))?Math.max(1,Math.floor(Number(c.referenceNumber))):null,version:Number.isFinite(Number(c.version))?Math.max(1,Math.floor(Number(c.version))):null,taskId:typeof c.taskId=="string"&&c.taskId.trim().length>0?c.taskId.trim():null,logicalName:typeof c.logicalName=="string"&&c.logicalName.trim().length>0?c.logicalName.trim():null,caption:typeof c.caption=="string"&&c.caption.trim().length>0?c.caption.trim():null,originalFilename:typeof c.originalFilename=="string"&&c.originalFilename.trim().length>0?c.originalFilename.trim():null,linkRole:c.linkRole==="reference"?"reference":"attachment"})).filter(c=>c.path.length>0).filter(c=>he?!0:Z.get(c.path)!==c.updatedAt),we=new Set((Array.isArray(e.assets)?e.assets:[]).map(c=>String(c?.path||"").trim()).filter(c=>c.length>0)),ke=new Set(Array.from(e.lastPushedAssetPaths||new Set).map(c=>String(c||"").trim()).filter(c=>c.length>0&&!we.has(c))),be=new Map((Array.isArray(e.assets)?e.assets:[]).map(c=>[String(c?.path||"").trim(),String(c?.updatedAt||"").trim()]).filter(([c])=>c.length>0)),me=e.lastPushedAssetWatermarks,Re=!me||me.size===0,Te=(Array.isArray(e.assets)?e.assets:[]).map(c=>({op:"asset-upsert",path:String(c.path||"").trim(),updatedAt:String(c.updatedAt||"").trim(),contentBase64:typeof c.contentBase64=="string"?c.contentBase64:"",assetId:typeof c.assetId=="string"&&c.assetId.trim().length>0?c.assetId.trim():void 0,kind:c.kind==="image"?"image":"file",mimeType:typeof c.mimeType=="string"&&c.mimeType.trim().length>0?c.mimeType.trim():"application/octet-stream",referenceNumber:Number.isFinite(Number(c.referenceNumber))?Math.max(1,Math.floor(Number(c.referenceNumber))):null,taskId:typeof c.taskId=="string"&&c.taskId.trim().length>0?c.taskId.trim():null,logicalName:typeof c.logicalName=="string"&&c.logicalName.trim().length>0?c.logicalName.trim():null,caption:typeof c.caption=="string"&&c.caption.trim().length>0?c.caption.trim():null,originalFilename:typeof c.originalFilename=="string"&&c.originalFilename.trim().length>0?c.originalFilename.trim():null,linkRole:c.linkRole==="reference"?"reference":c.linkRole==="image"?"image":"attachment"})).filter(c=>c.path.length>0&&c.contentBase64.length>0).filter(c=>Re?!0:me.get(c.path)!==c.updatedAt),se=Array.isArray(e.documentReviewSessions)?e.documentReviewSessions:[],F=new Set(se.filter(c=>String(c?.deletedAt||"").trim().length===0).map(c=>String(c?.id||"").trim()).filter(c=>c.length>0)),D=new Set([...Array.from(e.lastPushedDocumentReviewSessionIds||new Set).map(c=>String(c||"").trim()).filter(c=>c.length>0&&!F.has(c)),...se.filter(c=>String(c?.deletedAt||"").trim().length>0).map(c=>String(c?.id||"").trim()).filter(c=>c.length>0)]),E=new Map(se.map(c=>[String(c?.id||"").trim(),String(c?.updatedAt||c?.createdAt||"").trim()]).filter(([c])=>c.length>0)),y=e.lastPushedDocumentReviewSessionWatermarks,C=!y||y.size===0,P=se.map(c=>({op:"document-review-session-upsert",session:{id:String(c.id||"").trim(),assetId:String(c.assetId||"").trim(),documentId:typeof c.documentId=="string"&&c.documentId.trim().length>0?c.documentId.trim():null,documentVersion:Number.isFinite(Number(c.documentVersion))?Math.max(1,Math.floor(Number(c.documentVersion))):null,title:typeof c.title=="string"&&c.title.trim().length>0?c.title.trim():null,status:c.status==="resolved"?"resolved":"open",comments:[],createdByActorId:typeof c.createdByActorId=="string"&&c.createdByActorId.trim().length>0?c.createdByActorId.trim():null,updatedByActorId:typeof c.updatedByActorId=="string"&&c.updatedByActorId.trim().length>0?c.updatedByActorId.trim():null,createdAt:String(c.createdAt||"").trim(),updatedAt:String(c.updatedAt||c.createdAt||"").trim(),deletedAt:typeof c.deletedAt=="string"&&c.deletedAt.trim().length>0?c.deletedAt.trim():null}})).filter(c=>c.session.id.length>0&&c.session.assetId.length>0&&!c.session.deletedAt).filter(c=>C?!0:y.get(c.session.id)!==c.session.updatedAt),j=Array.isArray(e.documentReviewComments)?e.documentReviewComments:[],ae=new Set(j.filter(c=>String(c?.deletedAt||"").trim().length===0).map(c=>String(c?.id||"").trim()).filter(c=>c.length>0)),L=new Set([...Array.from(e.lastPushedDocumentReviewCommentIds||new Set).map(c=>String(c||"").trim()).filter(c=>c.length>0&&!ae.has(c)),...j.filter(c=>String(c?.deletedAt||"").trim().length>0).map(c=>String(c?.id||"").trim()).filter(c=>c.length>0)]),de=new Map(j.map(c=>[String(c?.id||"").trim(),String(c?.updatedAt||c?.createdAt||"").trim()]).filter(([c])=>c.length>0)),K=e.lastPushedDocumentReviewCommentWatermarks,ue=!K||K.size===0,B=j.map(c=>({op:"document-review-comment-upsert",comment:{id:String(c.id||"").trim(),sessionId:String(c.sessionId||"").trim(),body:String(c.body||"").trim(),anchor:c.anchor??null,order:Number.isFinite(Number(c.order))?Math.max(0,Math.floor(Number(c.order))):0,authorActorId:typeof c.authorActorId=="string"&&c.authorActorId.trim().length>0?c.authorActorId.trim():null,createdAt:String(c.createdAt||"").trim(),updatedAt:String(c.updatedAt||c.createdAt||"").trim(),deletedAt:typeof c.deletedAt=="string"&&c.deletedAt.trim().length>0?c.deletedAt.trim():null}})).filter(c=>c.comment.id.length>0&&c.comment.sessionId.length>0&&!c.comment.deletedAt).filter(c=>ue?!0:K.get(c.comment.id)!==c.comment.updatedAt),re=Array.isArray(e.annotatedAttachmentSessions)?e.annotatedAttachmentSessions:[],xe=new Set(re.filter(c=>String(c?.deletedAt||"").trim().length===0).map(c=>String(c?.id||"").trim()).filter(c=>c.length>0)),Ee=new Set([...Array.from(e.lastPushedAnnotatedAttachmentSessionIds||new Set).map(c=>String(c||"").trim()).filter(c=>c.length>0&&!xe.has(c)),...re.filter(c=>String(c?.deletedAt||"").trim().length>0).map(c=>String(c?.id||"").trim()).filter(c=>c.length>0)]),ye=new Map(re.map(c=>[String(c?.id||"").trim(),String(c?.updatedAt||c?.createdAt||"").trim()]).filter(([c])=>c.length>0)),Pe=e.lastPushedAnnotatedAttachmentSessionWatermarks,vt=!Pe||Pe.size===0,Ke=re.map(c=>({op:"annotated-attachment-session-upsert",session:{id:String(c.id||"").trim(),workspaceId:String(c.workspaceId||"").trim(),taskId:String(c.taskId||"").trim(),baseImageAssetId:String(c.baseImageAssetId||"").trim(),title:typeof c.title=="string"&&c.title.trim().length>0?c.title.trim():null,globalInstruction:typeof c.globalInstruction=="string"&&c.globalInstruction.trim().length>0?c.globalInstruction.trim():null,annotations:Array.isArray(c.annotations)?c.annotations:[],createdByActorId:typeof c.createdByActorId=="string"&&c.createdByActorId.trim().length>0?c.createdByActorId.trim():null,updatedByActorId:typeof c.updatedByActorId=="string"&&c.updatedByActorId.trim().length>0?c.updatedByActorId.trim():null,createdAt:String(c.createdAt||"").trim(),updatedAt:String(c.updatedAt||c.createdAt||"").trim(),deletedAt:typeof c.deletedAt=="string"&&c.deletedAt.trim().length>0?c.deletedAt.trim():null}})).filter(c=>c.session.id.length>0&&c.session.workspaceId.length>0&&c.session.baseImageAssetId.length>0&&!c.session.deletedAt).filter(c=>vt?!0:Pe.get(c.session.id)!==c.session.updatedAt),bt=jv(Array.isArray(e.taskEvents)?e.taskEvents:[]),Ze=new Map(bt.map(c=>[String(c?.id||"").trim(),String(c?.createdAt||"").trim()]).filter(([c])=>c.length>0)),Qe=e.lastPushedTaskEventWatermarks,St=!Qe||Qe.size===0,Me=bt.map(c=>({op:"task-event-upsert",event:{id:String(c.id||"").trim(),taskId:String(c.taskId||"").trim(),workspaceId:String(c.workspaceId||"").trim(),action:String(c.action||"").trim(),actor:String(c.actor||"system").trim()||"system",actorType:c.actorType==="ai"||c.actorType==="human"||c.actorType==="system"?c.actorType:"system",details:c.details&&typeof c.details=="object"&&!Array.isArray(c.details)?c.details:{},createdAt:String(c.createdAt||"").trim()}})).filter(c=>c.event.id.length>0&&c.event.taskId.length>0&&c.event.workspaceId.length>0&&c.event.action.length>0&&Number.isFinite(Date.parse(c.event.createdAt))).filter(c=>St?!0:Qe.get(c.event.id)!==c.event.createdAt);return{changes:[...W,...T,...e.taxonomyState&&typeof e.taxonomyState=="object"?[{op:"taxonomy-upsert",taxonomyState:e.taxonomyState,updatedAt:n}]:Array.isArray(e.taxonomies)?[{op:"taxonomy-upsert",taxonomies:e.taxonomies,updatedAt:n}]:[],...ge,...Q,...Array.from(R).map(c=>({op:"document-delete",path:c,deletedAt:n})),...Te,...Array.from(ke).map(c=>({op:"asset-delete",path:c,deletedAt:n})),...P,...Array.from(D).map(c=>({op:"document-review-session-delete",sessionId:c,deletedAt:n})),...B,...Array.from(L).map(c=>({op:"document-review-comment-delete",commentId:c,deletedAt:n})),...Ke,...Array.from(Ee).map(c=>({op:"annotated-attachment-session-delete",sessionId:c,deletedAt:n})),...Me,...f,...k,...Array.from(g).map(c=>({op:"delete",taskId:c}))],currentTaskIds:new Set(Array.from(x).filter(c=>!r.has(c))),deleteTaskIds:g,currentInitiativeIds:w,currentInitiativeWatermarks:I,currentWorkstreamIds:M,currentWorkstreamWatermarks:oe,currentAiProfileIds:ve,currentAiProfileWatermarks:O,currentDocumentPaths:X,deleteDocumentPaths:R,currentDocumentWatermarks:U,currentAssetPaths:we,deleteAssetPaths:ke,currentAssetWatermarks:be,currentDocumentReviewSessionIds:F,deleteDocumentReviewSessionIds:D,currentDocumentReviewSessionWatermarks:E,currentDocumentReviewCommentIds:ae,deleteDocumentReviewCommentIds:L,currentDocumentReviewCommentWatermarks:de,currentAnnotatedAttachmentSessionIds:xe,deleteAnnotatedAttachmentSessionIds:Ee,currentAnnotatedAttachmentSessionWatermarks:ye,currentTaskEventWatermarks:Ze,pushedWatermarks:u}}function Dv(e){const n=(e.tasks||[]).map(i=>`${i.id}:${i.updatedAt||i.createdAt||""}:${i.status}`).sort(),r=(e.archivedTasks||[]).map(i=>`${i.id}:${i.updatedAt||i.createdAt||""}:${i.status}`).sort(),s=e.pendingDeletedTaskIds?Array.from(e.pendingDeletedTaskIds).sort():[],o=(e.initiatives||[]).map(i=>({id:String(i.id||"").trim(),updatedAt:String(i.updatedAt||i.createdAt||"").trim(),title:String(i.title||"").trim(),ownerId:typeof i.ownerId=="string"?i.ownerId.trim():"",isArchived:!!i.isArchived})).filter(i=>i.id.length>0).sort((i,u)=>i.id.localeCompare(u.id)),d=(e.workstreams||[]).map(i=>({id:String(i.id||"").trim(),updatedAt:String(i.updatedAt||i.createdAt||"").trim(),initiativeId:typeof i.initiativeId=="string"?i.initiativeId.trim():"",title:String(i.title||"").trim(),ownerId:typeof i.ownerId=="string"?i.ownerId.trim():"",isArchived:!!i.isArchived})).filter(i=>i.id.length>0).sort((i,u)=>i.id.localeCompare(u.id));return JSON.stringify({workspaceId:e.workspaceId,initiatives:o,workstreams:d,taxonomyState:e.taxonomyState&&typeof e.taxonomyState=="object"?e.taxonomyState:null,taxonomies:Array.isArray(e.taxonomies)?e.taxonomies:[],aiProfiles:Array.isArray(e.aiProfiles)?e.aiProfiles.map(i=>({id:String(i.id||"").trim(),updatedAt:String(i.updatedAt||i.createdAt||"").trim(),name:String(i.name||"").trim(),username:String(i.username||"").trim()})).filter(i=>i.id.length>0).sort((i,u)=>i.id.localeCompare(u.id)):[],taskEvents:Array.isArray(e.taskEvents)?e.taskEvents.map(i=>({id:String(i.id||"").trim(),taskId:String(i.taskId||"").trim(),action:String(i.action||"").trim(),actor:String(i.actor||"").trim(),actorType:i.actorType==="ai"||i.actorType==="human"||i.actorType==="system"?i.actorType:"system",createdAt:String(i.createdAt||"").trim()})).filter(i=>i.id.length>0&&i.taskId.length>0).sort((i,u)=>i.id.localeCompare(u.id)):[],documents:Array.isArray(e.documents)?e.documents.map(i=>({path:String(i.path||"").trim(),updatedAt:String(i.updatedAt||"").trim(),length:typeof i.content=="string"?i.content.length:0})).filter(i=>i.path.length>0).sort((i,u)=>i.path.localeCompare(u.path)):[],assets:Array.isArray(e.assets)?e.assets.map(i=>({path:String(i.path||"").trim(),updatedAt:String(i.updatedAt||"").trim(),length:typeof i.contentBase64=="string"?i.contentBase64.length:0,kind:i.kind==="image"?"image":"file"})).filter(i=>i.path.length>0).sort((i,u)=>i.path.localeCompare(u.path)):[],documentReviewSessions:Array.isArray(e.documentReviewSessions)?e.documentReviewSessions.map(i=>({id:String(i.id||"").trim(),updatedAt:String(i.updatedAt||i.createdAt||"").trim(),assetId:String(i.assetId||"").trim(),status:i.status==="resolved"?"resolved":"open",deletedAt:String(i.deletedAt||"").trim(),commentCount:Array.isArray(i.comments)?i.comments.length:0})).filter(i=>i.id.length>0).sort((i,u)=>i.id.localeCompare(u.id)):[],documentReviewComments:Array.isArray(e.documentReviewComments)?e.documentReviewComments.map(i=>({id:String(i.id||"").trim(),sessionId:String(i.sessionId||"").trim(),updatedAt:String(i.updatedAt||i.createdAt||"").trim(),deletedAt:String(i.deletedAt||"").trim(),bodyLength:String(i.body||"").length})).filter(i=>i.id.length>0).sort((i,u)=>i.id.localeCompare(u.id)):[],annotatedAttachmentSessions:Array.isArray(e.annotatedAttachmentSessions)?e.annotatedAttachmentSessions.map(i=>({id:String(i.id||"").trim(),updatedAt:String(i.updatedAt||i.createdAt||"").trim(),taskId:String(i.taskId||"").trim(),baseImageAssetId:String(i.baseImageAssetId||"").trim(),deletedAt:String(i.deletedAt||"").trim(),annotationCount:Array.isArray(i.annotations)?i.annotations.length:0})).filter(i=>i.id.length>0).sort((i,u)=>i.id.localeCompare(u.id)):[],active:n,archived:r,pendingDeletes:s})}function nu(){return{version:2,enabled:!1,phase:"idle",pullCursor:null,lastPullAt:null,lastPushAt:null,lastSyncedAt:null,lastErrorMessage:null}}function Mo(e){const n=String(e||"").trim();return n.length>0?n:null}function Ev(e,n){if(!!!(e.enabled??e.cloudSyncEnabled))return"idle";const s=String(e.phase||"").trim().toLowerCase();if(s==="idle"||s==="provision-local"||s==="attach-cloud"||s==="active"||s==="error")return s;const o=String(e.bootstrapMode||"").trim().toLowerCase();if(o==="provision-local"||o==="attach-cloud")return o;const d=String(e.sourceOfTruth||"").trim().toLowerCase();return e.onboardingCompleted?"active":d==="cloud"?n.lastPullAt?"active":"attach-cloud":d==="local"?n.lastPullAt||n.lastPushAt?"active":"provision-local":(n.lastPullAt||n.lastPushAt,"active")}function Pv(e){const n=nu();if(!e||typeof e!="object")return{state:n,changed:!1};const r=e,s=r.lastErrorMessage,o=typeof s=="string"&&s.trim().length>0?s:null,d={version:2,enabled:!!(r.enabled??r.cloudSyncEnabled),phase:"idle",pullCursor:Mo(r.pullCursor),lastPullAt:Mo(r.lastPullAt),lastPushAt:Mo(r.lastPushAt),lastSyncedAt:Mo(r.lastSyncedAt),lastErrorMessage:o};d.phase=Ev(r,d),d.enabled||(d.phase="idle",d.pullCursor=null);const u=Number(r.version||0)!==2||!!(r.enabled??r.cloudSyncEnabled)!==d.enabled||String(r.phase||"").trim()!==d.phase||Mo(r.pullCursor)!==d.pullCursor||Mo(r.lastPullAt)!==d.lastPullAt||Mo(r.lastPushAt)!==d.lastPushAt||Mo(r.lastSyncedAt)!==d.lastSyncedAt||o!==d.lastErrorMessage;return{state:d,changed:u}}const Mv="taskforce.sync.lease.v1",Lv="taskforce.sync.lease.v1",Bv=2500,Wv=9e3;function Dl(e){const n=String(e||"").trim();return n.length>0&&n.toLowerCase()!=="default"}function Yd(e){const n=String(e||"").trim();return n.length>0?n:null}function mm(e){return`${Mv}.${e}`}function Fv(e){if(!e)return null;try{const n=JSON.parse(e),r=String(n?.ownerId||"").trim(),s=String(n?.workspaceId||"").trim(),o=String(n?.operation||"").trim(),d=String(n?.heartbeatAt||"").trim(),i=String(n?.expiresAt||"").trim();return!r||!s||!d||!i||o!=="pull"&&o!=="push"&&o!=="repair"?null:{ownerId:r,workspaceId:s,operation:o,heartbeatAt:d,expiresAt:i}}catch{return null}}function Ov(e,n,r,s){return{ownerId:e,workspaceId:n,operation:r,heartbeatAt:new Date(s).toISOString(),expiresAt:new Date(s+Wv).toISOString()}}function $v(e,n=Date.now()){if(!e)return!0;const r=Date.parse(e.expiresAt);return!Number.isFinite(r)||r<=n}function pm(e,n){const r={...e,...n,version:2,phase:n.phase||e.phase,pullCursor:n.pullCursor===void 0?e.pullCursor:Yd(n.pullCursor),lastPullAt:n.lastPullAt===void 0?e.lastPullAt:Yd(n.lastPullAt),lastPushAt:n.lastPushAt===void 0?e.lastPushAt:Yd(n.lastPushAt),lastSyncedAt:n.lastSyncedAt===void 0?e.lastSyncedAt:Yd(n.lastSyncedAt),lastErrorMessage:n.lastErrorMessage===void 0?e.lastErrorMessage:n.lastErrorMessage??null};return r.enabled||(r.phase="idle",r.pullCursor=null),r}function Uv(e){const{currentWorkspaceId:n,setWorkspaceCloudSyncEnabled:r,setWorkspaceSyncPhase:s,setWorkspaceLastPullAt:o,setWorkspaceLastPushAt:d,setWorkspaceLastErrorMessage:i}=e,[u,f]=a.useState(null),k=a.useRef(null),x=a.useRef(null),S=a.useRef(0),v=a.useRef(!1),g=a.useRef(!1),w=a.useRef(""),I=a.useRef(""),b=a.useRef(new Set),N=a.useRef(new Set),W=a.useRef(null),M=a.useRef(nu()),oe=a.useRef(""),te=a.useRef(null),ie=a.useRef(null),T=a.useRef(null),ve=a.useRef(null);if(!oe.current){const se=Date.now().toString(36),F=Math.random().toString(36).slice(2,10);oe.current=`sync-lease-${se}-${F}`}const O=a.useCallback(()=>{S.current=0,x.current=null,k.current!==null&&typeof window<"u"&&(window.clearTimeout(k.current),k.current=null),f(null)},[]),J=a.useCallback((se,F)=>{if(typeof window>"u")return;const D=Math.max(1,S.current+1);S.current=D;const E=kv(D),y=Number(F?.minDelayMs),C=Number.isFinite(y)&&y>0?Math.max(E,Math.floor(y)):E,P=Date.now()+C;x.current=P,f(new Date(P).toISOString()),k.current!==null&&window.clearTimeout(k.current),k.current=window.setTimeout(()=>{k.current=null,x.current=null,f(null),se()},C)},[]),le=a.useCallback(()=>{const se=x.current;return typeof se=="number"&&Number.isFinite(se)&&se>Date.now()},[]),ge=a.useCallback(se=>{if(typeof window>"u")return null;const F=String(se||"").trim();return Dl(F)?Fv(window.localStorage.getItem(mm(F))):null},[]),X=a.useCallback(se=>{const F=String(se||"").trim();if(F)try{ve.current?.postMessage({workspaceId:F})}catch{}},[]),R=a.useCallback((se,F)=>{if(typeof window>"u")return null;const D=String(se||"").trim();if(!Dl(D))return null;const E=Ov(oe.current,D,F,Date.now());try{window.localStorage.setItem(mm(D),JSON.stringify(E))}catch{return null}return X(D),E},[X]),U=a.useCallback(()=>{T.current!==null&&typeof window<"u"&&(window.clearInterval(T.current),T.current=null)},[]),Z=a.useCallback((se,F)=>{if(typeof window>"u")return;const D=String(se||te.current||"").trim();if(!D)return;const E=ge(D),y=E?.ownerId===oe.current;if(!(!F?.force&&E&&!y)){U();try{window.localStorage.removeItem(mm(D))}catch{}te.current=null,ie.current=null,X(D)}},[X,ge,U]),he=a.useCallback((se,F)=>{typeof window>"u"||(U(),T.current=window.setInterval(()=>{const D=String(te.current||"").trim(),E=ie.current;if(!D||!E){U();return}if(ge(D)?.ownerId!==oe.current){U(),te.current=null,ie.current=null;return}R(D,E)},Bv),te.current=se,ie.current=F)},[ge,U,R]),Q=a.useCallback(async(se,F)=>{if(typeof window>"u")return!0;const D=String(se||"").trim();if(!Dl(D))return!1;const E=ge(D);if(E?.ownerId===oe.current)return R(D,F)?(he(D,F),!0):!1;if(E&&!$v(E)||!R(D,F))return!1;const P=ge(D);return!P||P.ownerId!==oe.current?!1:(he(D,F),!0)},[ge,he,R]),we=a.useCallback(se=>{Z(se,{force:!0})},[Z]),ke=a.useCallback(se=>{const F=M.current,D=pm(F,{enabled:!!se.enabled,phase:se.phase||F.phase,pullCursor:se.pullCursor,lastPullAt:se.lastPullAt,lastPushAt:se.lastPushAt,lastSyncedAt:se.lastSyncedAt,lastErrorMessage:se.lastErrorMessage});M.current=D,W.current=D.pullCursor,r(D.enabled),s(D.phase),o(D.lastPullAt),d(D.lastPushAt),i(D.lastErrorMessage??null)},[r,s,o,d,i]),be=a.useCallback(se=>{const F=pm(M.current,se);return ke(F),F},[ke]),me=a.useCallback(async se=>{const F=pm(M.current,se);M.current=F,W.current=F.pullCursor;const D=await Ym({workspaceId:n,stateKey:"workspace-sync",patch:F,throwOnError:!0,respectFailureCooldown:!1}),E=D.response,y=D.payload;if(D.skipped)return ke(F),F;if(!E)throw new Error("Failed to persist workspace sync state (missing response)");if(!E.ok||y?.success===!1)throw new Error(y?.error||`Failed to persist workspace sync state (${E.status})`);return ke(F),F},[ke,n]),Re=a.useCallback(async()=>{if(!Dl(n)){const se=nu();M.current=se,ke(se);return}try{const se=await fetch(`/api/taskforce/ui-state?key=workspace-sync&workspaceId=${encodeURIComponent(n)}`,{method:"GET",credentials:"include"});if(!se.ok)return;const F=await se.json().catch(()=>({})),D=Pv(F?.state&&typeof F.state=="object"?F.state:null);M.current=D.state,ke(D.state),D.changed&&me(D.state)}catch{}},[ke,n,me]),Te=a.useCallback(async(se,F)=>{if(!Dl(n))return{success:!1,error:"Workspace setup is required before enabling sync."};try{if(!se.enabled)return await me({enabled:!1,phase:"idle",pullCursor:null}),{success:!0};if(!F.isAuthenticated)return{success:!1,error:"Sign in is required before enabling workspace sync."};if(!F.cloudAuthConfigured)return{success:!1,error:"Cloud authentication endpoint is not configured."};const D=await F.ensureCloudWorkspaceReadyForSync();return D.success?(await me({enabled:!0,phase:D.provisioned?"provision-local":"attach-cloud",pullCursor:null,lastPullAt:null,lastPushAt:null,lastSyncedAt:null}),{success:!0}):{success:!1,error:D.error||"Workspace sync handshake failed."}}catch{return{success:!1,error:"Failed to save workspace sync settings."}}},[n,me]);return a.useEffect(()=>{w.current="",I.current="",b.current=new Set,N.current=new Set,W.current=null,M.current=nu(),v.current=!1,g.current=!1,Z(),O()},[O,n,Z]),a.useEffect(()=>{if(typeof window>"u"||typeof BroadcastChannel>"u")return;const se=new BroadcastChannel(Lv);return ve.current=se,()=>{se.close(),ve.current===se&&(ve.current=null)}},[]),a.useEffect(()=>()=>{k.current!==null&&typeof window<"u"&&(window.clearTimeout(k.current),k.current=null),Z()},[Z]),{workspaceRetryAt:u,isWorkspaceRetryPending:le,workspacePushInFlightRef:v,workspacePullInFlightRef:g,workspaceLastPushedSignatureRef:w,workspacePendingSignatureRef:I,workspaceLastPushedTaskIdsRef:b,workspaceDeletedTaskIdsRef:N,workspacePullCursorRef:W,clearWorkspaceRetry:O,scheduleWorkspaceRetry:J,persistWorkspaceSyncPatch:me,applyWorkspaceSyncPatchLocally:be,loadWorkspaceSyncState:Re,applyWorkspaceSyncStateSnapshot:ke,saveWorkspaceCloudSyncSettings:Te,acquireWorkspaceSyncLease:Q,releaseWorkspaceSyncLease:Z,forceClearWorkspaceSyncLease:we,readWorkspaceSyncLease:ge}}class zv{constructor(n=2048){this.maxSeenEventIds=n}seenEventIds=new Set;seenEventIdQueue=[];activeEpoch="";lastSeq=null;telemetry={accepted:0,duplicateDiscarded:0,outOfOrderDiscarded:0,invalidDiscarded:0,recoveryTriggered:0};process(n){const r=typeof n.eventId=="string"?n.eventId.trim():"";if(r&&this.seenEventIds.has(r))return this.telemetry.duplicateDiscarded+=1,{accepted:!1,reason:"duplicate",shouldRecover:!1};const s=typeof n.serverEpoch=="string"?n.serverEpoch.trim():"",o=Number(n.seq);if(!(s.length>0&&Number.isFinite(o)&&o>=0))return r?(this.rememberEventId(r),this.telemetry.accepted+=1,{accepted:!0,shouldRecover:!1}):(this.telemetry.invalidDiscarded+=1,{accepted:!1,reason:"invalid",shouldRecover:!1});const i=Math.floor(o);if(this.activeEpoch&&this.activeEpoch!==s)return this.activeEpoch=s,this.lastSeq=i,r&&this.rememberEventId(r),this.telemetry.accepted+=1,{accepted:!0,shouldRecover:!1};if(!this.activeEpoch)return this.activeEpoch=s,this.lastSeq=i,r&&this.rememberEventId(r),this.telemetry.accepted+=1,{accepted:!0,shouldRecover:!1};const u=this.lastSeq;if(typeof u=="number"){if(i<=u){this.telemetry.outOfOrderDiscarded+=i===u?0:1,this.telemetry.duplicateDiscarded+=i===u?1:0;const f=i<u;return f&&(this.telemetry.recoveryTriggered+=1),{accepted:!1,reason:i===u?"duplicate":"out-of-order",shouldRecover:f}}if(i>u+1)return this.telemetry.outOfOrderDiscarded+=1,this.telemetry.recoveryTriggered+=1,{accepted:!1,reason:"out-of-order",shouldRecover:!0}}return this.lastSeq=i,r&&this.rememberEventId(r),this.telemetry.accepted+=1,{accepted:!0,shouldRecover:!1}}getTelemetry(){return{...this.telemetry}}rememberEventId(n){for(this.seenEventIds.add(n),this.seenEventIdQueue.push(n);this.seenEventIdQueue.length>this.maxSeenEventIds;){const r=this.seenEventIdQueue.shift();r&&this.seenEventIds.delete(r)}}}function ah(e){const{enabled:n,workspaceId:r,websocketUrl:s,reconnectBaseMs:o=400,reconnectMaxMs:d=1e4,degradeAfterAttempts:i=5,replayLimit:u=200,onSignal:f,onTelemetry:k,userId:x}=e,[S,v]=a.useState("degraded-fallback"),g=a.useRef(null),w=a.useRef(null),I=a.useRef(0),b=a.useRef(""),N=a.useRef(!1),W=a.useRef(null),M=a.useRef(null),oe=a.useRef(new zv),te=a.useRef(f),ie=a.useRef(k);a.useEffect(()=>{te.current=f},[f]),a.useEffect(()=>{ie.current=k},[k]);const[T,ve]=a.useState({accepted:0,duplicateDiscarded:0,outOfOrderDiscarded:0,invalidDiscarded:0,recoveryTriggered:0}),O=a.useMemo(()=>String(r||"").trim(),[r]),J=a.useMemo(()=>String(s||"").trim(),[s]);return a.useEffect(()=>{let le=!1;const ge=()=>{w.current!==null&&(window.clearTimeout(w.current),w.current=null)},X=()=>{const me=g.current;if(g.current=null,me)try{me.close()}catch{}},R=me=>me==="taskforce:replay-gap"||me==="taskforce:replay-reset"?4:me==="taskforce:mutation"||me==="taskforce:replay"?3:1,U=me=>{const Re=M.current;if(Re){const Te=R(Re.type),se=R(me.type);if(se<Te||se===Te&&Re.eventId&&!me.eventId)return}M.current=me,W.current!==null&&window.clearTimeout(W.current),W.current=window.setTimeout(()=>{W.current=null;const Te=te.current;if(!M.current||typeof Te!="function")return;const se=M.current;M.current=null,Te(se)},80)},Z=me=>{try{const Re=JSON.parse(String(me.data||""));return!Re||typeof Re!="object"?null:Re}catch{return null}},he=me=>{const Re=typeof me.serverEpoch=="string"?me.serverEpoch.trim():"",Te=Number(me.seq);!Re||!Number.isFinite(Te)||Te<0||(b.current=`${Re}:${Math.floor(Te)}`,N.current=!1)},Q=()=>{const me=oe.current.getTelemetry();ve(me);const Re=ie.current;typeof Re=="function"&&Re(me)},we=me=>{const Re={type:"taskforce:replay",workspaceId:O,limit:u},Te=b.current;Te&&(Re.cursor=Te),me.send(JSON.stringify(Re))},ke=()=>{if(!n||le)return;ge(),I.current+=1;const me=I.current,Re=Math.max(50,Math.floor(o)),Te=Math.max(Re,Math.floor(d)),se=Math.min(Te,Re*Math.pow(2,Math.max(0,me-1)));v(me>=i?"degraded-fallback":"reconnecting"),w.current=window.setTimeout(()=>{le||(w.current=null,be())},se)},be=()=>{if(!n||le||!O||!J)return;X();let me;try{me=new WebSocket(J)}catch{ke();return}g.current=me,me.addEventListener("open",()=>{I.current=0,v("connected"),me.send(JSON.stringify({type:"taskforce:subscribe",workspaceId:O,userId:x||void 0})),we(me)}),me.addEventListener("message",Re=>{const Te=Z(Re);if(!Te||typeof Te.type!="string")return;const se=typeof Te.workspaceId=="string"?Te.workspaceId.trim():O;if(!(!se||se!==O)){if(Te.type==="taskforce:update"){U({type:"taskforce:update",workspaceId:O,eventId:typeof Te.eventId=="string"?Te.eventId.trim():void 0});return}if(Te.type==="taskforce:mutation"){const F=oe.current.process({eventId:Te.eventId,serverEpoch:Te.serverEpoch,seq:Te.seq});if(!F.accepted){Q(),F.shouldRecover&&(b.current="",N.current||(N.current=!0,U({type:"taskforce:replay-gap",workspaceId:O})));return}he(Te),Q(),U({type:Te.type,workspaceId:O,eventId:typeof Te.eventId=="string"?Te.eventId.trim():void 0});return}if(Te.type==="taskforce:replay"){const F=Array.isArray(Te.events)?Te.events:[];let D=0;for(const E of F)oe.current.process({eventId:E.eventId,serverEpoch:E.serverEpoch,seq:E.seq}).accepted&&(D+=1,he(E));N.current=!1,Q(),(D>0||Te.truncated===!0)&&U({type:"taskforce:replay",workspaceId:O}),Te.truncated===!0&&we(me);return}if(Te.type==="taskforce:replay-gap"||Te.type==="taskforce:replay-reset"){if(b.current="",N.current)return;N.current=!0,U({type:Te.type,workspaceId:O})}}}),me.addEventListener("close",Re=>{if(g.current===me&&(g.current=null),!le&&n){const Te=Number(Re?.code||0),se=String(Re?.reason||"").trim();console.warn(`[Taskforce] Realtime socket closed workspace=${O} user=${String(x||"anonymous").trim()||"anonymous"} code=${Te}${se?` reason=${se}`:""}`)}ke()}),me.addEventListener("error",()=>{try{me.close()}catch{}})};return!n||!O||!J?(v("degraded-fallback"),ge(),X(),()=>{ge(),X()}):(v("reconnecting"),be(),()=>{le=!0,ge(),W.current!==null&&(window.clearTimeout(W.current),W.current=null),M.current=null,X()})},[n,O,J,o,d,i,u,x]),{connectionState:S,telemetry:T}}const Lm="taskforce:context-assets-mutated";function Hv(e){typeof window>"u"||typeof window.dispatchEvent!="function"||window.dispatchEvent(new CustomEvent(Lm,{detail:e}))}const rh="taskforce.userGlobalSyncMeta.v1",Gv="taskforce.syncDebug.v1",Vv=12e4,sh="taskforce.syncWatermarks.v3",Zv=300*1e3,Op="Another local window is already syncing this workspace. Wait a few seconds, or press Repair in that window.";function Bo(e){const n=String(e||"").trim();return n.length>0&&n.toLowerCase()!=="default"}function qv(){if(typeof window>"u")return!1;try{const e=String(window.localStorage.getItem(Gv)||"").trim().toLowerCase();return e==="1"||e==="true"||e==="on"||e==="yes"}catch{return!1}}function Za(e,n){if(!qv())return;console.info("[Taskforce Sync]",e,n&&typeof n=="object"?n:{})}function Kv(e){const n=e?.providerMetadata??e?.provider_metadata??null;return{id:String(e?.id||"").trim(),workspaceId:String(e?.workspaceId||e?.workspace_id||"").trim(),profileToken:String(e?.profileToken||e?.profile_token||"").trim(),name:String(e?.name||"").trim(),username:String(e?.username||"").trim(),icon:String(e?.icon||"Bot").trim()||"Bot",color:String(e?.color||"#8b5cf6").trim()||"#8b5cf6",description:typeof e?.description=="string"&&e.description.trim().length>0?e.description.trim():null,role:typeof e?.role=="string"&&e.role.trim().length>0?e.role.trim():null,provider:typeof e?.provider=="string"&&e.provider.trim().length>0?e.provider.trim():null,model:typeof e?.model=="string"&&e.model.trim().length>0?e.model.trim():null,surfaceType:nh(e?.surfaceType??e?.surface_type),providerMetadata:n&&typeof n=="object"&&!Array.isArray(n)?n:null,createdAt:String(e?.createdAt||e?.created_at||"").trim(),updatedAt:String(e?.updatedAt||e?.updated_at||e?.createdAt||e?.created_at||"").trim(),lastActiveAt:typeof e?.lastActiveAt=="string"&&e.lastActiveAt.trim().length>0?e.lastActiveAt.trim():typeof e?.last_active_at=="string"&&e.last_active_at.trim().length>0?e.last_active_at.trim():null}}function $p(){if(typeof window>"u")return{};try{const e=window.localStorage.getItem(rh);if(!e)return{};const n=JSON.parse(e);return n&&typeof n=="object"?n:{}}catch{return{}}}function Yv(e){if(!(typeof window>"u"))try{window.localStorage.setItem(rh,JSON.stringify(e))}catch{}}function Jv(e){try{return JSON.stringify(e&&typeof e=="object"?e:null)}catch{return"null"}}function Xv(e){return e.flatMap(n=>{const r=String(n?.id||"").trim();return!r||!Array.isArray(n?.comments)?[]:n.comments.map(s=>({id:String(s?.id||"").trim(),sessionId:r,body:String(s?.body||""),anchor:s?.anchor??null,order:Number.isFinite(Number(s?.order))?Math.max(0,Math.floor(Number(s.order))):0,authorActorId:typeof s?.authorActorId=="string"&&s.authorActorId.trim().length>0?s.authorActorId.trim():null,createdAt:String(s?.createdAt||"").trim(),updatedAt:String(s?.updatedAt||s?.createdAt||"").trim(),deletedAt:typeof s?.deletedAt=="string"&&s.deletedAt.trim().length>0?s.deletedAt.trim():null})).filter(s=>s.id.length>0&&s.sessionId.length>0)})}function Jd(e,n){const r=new Map;for(const s of[...e||[],...n||[]]){const o=Array.isArray(s?.taskEvents)?s.taskEvents:[];for(const d of o){const i=String(d?.id||"").trim(),u=String(d?.taskId||s?.id||"").trim(),f=String(d?.workspaceId||"").trim(),k=String(d?.createdAt||"").trim();if(!i||!u||!f||!k)continue;const x={id:i,taskId:u,workspaceId:f,action:String(d?.action||"").trim(),actor:String(d?.actor||"system").trim()||"system",actorType:d?.actorType==="ai"||d?.actorType==="human"||d?.actorType==="system"?d.actorType:"system",details:d?.details,createdAt:k},S=r.get(i);(!S||x.createdAt>S.createdAt)&&r.set(i,x)}}return Array.from(r.values()).sort((s,o)=>s.createdAt!==o.createdAt?s.createdAt.localeCompare(o.createdAt):s.id.localeCompare(o.id))}function Qv(e,n){if(typeof window>"u")return null;try{const r=`${sh}.${e}`,s=window.localStorage.getItem(r);if(!s)return null;const o=JSON.parse(s);if(!o||o.v!==2&&o.v!==3&&o.v!==4&&o.v!==5&&o.v!==6&&o.v!==7&&o.v!==8)return null;const d=typeof o.taxonomyStateFingerprint=="string"?o.taxonomyStateFingerprint:"";return{taskWatermarks:!n||!d||d===n?new Map(Array.isArray(o.taskWatermarks)?o.taskWatermarks:[]):new Map,initiativeWatermarks:new Map(Array.isArray(o.initiativeWatermarks)?o.initiativeWatermarks:[]),workstreamWatermarks:new Map(Array.isArray(o.workstreamWatermarks)?o.workstreamWatermarks:[]),documentWatermarks:new Map(Array.isArray(o.documentWatermarks)?o.documentWatermarks:[]),assetWatermarks:new Map(Array.isArray(o.assetWatermarks)?o.assetWatermarks:[]),documentReviewSessionWatermarks:new Map(Array.isArray(o.documentReviewSessionWatermarks)?o.documentReviewSessionWatermarks:[]),documentReviewCommentWatermarks:new Map(Array.isArray(o.documentReviewCommentWatermarks)?o.documentReviewCommentWatermarks:[]),annotatedAttachmentSessionWatermarks:new Map(Array.isArray(o.annotatedAttachmentSessionWatermarks)?o.annotatedAttachmentSessionWatermarks:[]),taskEventWatermarks:new Map(Array.isArray(o.taskEventWatermarks)?o.taskEventWatermarks:[])}}catch{return null}}function oh(e,n){if(!(typeof window>"u"))try{const r=`${sh}.${e}`;window.localStorage.setItem(r,JSON.stringify({v:8,savedAt:new Date().toISOString(),taskWatermarks:Array.from(n.taskWatermarks.entries()),initiativeWatermarks:Array.from(n.initiativeWatermarks.entries()),workstreamWatermarks:Array.from(n.workstreamWatermarks.entries()),documentWatermarks:Array.from(n.documentWatermarks.entries()),assetWatermarks:Array.from(n.assetWatermarks.entries()),documentReviewSessionWatermarks:Array.from(n.documentReviewSessionWatermarks.entries()),documentReviewCommentWatermarks:Array.from(n.documentReviewCommentWatermarks.entries()),annotatedAttachmentSessionWatermarks:Array.from(n.annotatedAttachmentSessionWatermarks.entries()),taskEventWatermarks:Array.from(n.taskEventWatermarks.entries()),taxonomyStateFingerprint:typeof n.taxonomyStateFingerprint=="string"?n.taxonomyStateFingerprint:""}))}catch{}}function ek({currentWorkspaceId:e,workspaceSyncPhase:n,clearWorkspaceRetry:r,setWorkspaceSyncBusy:s,setUserGlobalSyncStatus:o,setUserGlobalSyncError:d,setWorkspaceLastErrorMessage:i,setWorkspaceLastErrorAt:u,reportSyncEvent:f,setAuthBlocked:k,setIsAuthenticated:x,checkAuthSession:S,ensureCloudWorkspaceReadyForSync:v,scheduleWorkspaceSyncRetry:g,persistWorkspaceSyncPatchSafely:w}){const I=async(N,W)=>{r(),s(!1),o("error");const M="Session expired. Sign in again to resume cloud sync.";d(M),i(M),u(new Date().toISOString()),f(e,{eventType:N==="handshake"?"handshake":N,status:"error",statusCode:W,errorMessage:M}),k(!0),x(!1),await S()};return{handleSyncAuthFailure:I,ensureWorkspaceSyncReady:async()=>{if(!Bo(e)){const M="Workspace sync blocked: local workspace ID is unresolved.";return i(M),u(new Date().toISOString()),d(M),o("error"),!1}const N=await v();if(N.success)return!0;if(N.statusCode===401)return await I("handshake",401),!1;const W=N.error||"Workspace sync handshake failed.";return i(W),u(new Date().toISOString()),d(W),o("error"),f(e,{eventType:"handshake",status:"error",statusCode:N.statusCode,errorMessage:W}),N.transient||no(N.statusCode)?g(N.retryAfterMs):n==="active"&&w({phase:"error",lastErrorMessage:W}),!1}}}function tk({workspaceSyncPhase:e,lastBootstrapPhaseRef:n,bootstrapPhaseStartedAtRef:r,bootstrapLastProgressAtRef:s}){if(e==="attach-cloud"||e==="provision-local"){n.current=e,r.current===null&&(r.current=Date.now()),s.current=null;return}r.current=null,s.current=null}function nk({currentWorkspaceId:e,workspaceCloudSyncEnabled:n,workspaceSyncPhase:r,workspacePullInFlightRef:s,workspacePushInFlightRef:o,bootstrapPhaseStartedAtRef:d,bootstrapLastProgressAtRef:i,setWorkspaceLastErrorMessage:u,setWorkspaceLastErrorAt:f,setUserGlobalSyncStatus:k,setUserGlobalSyncError:x,setWorkspaceSyncBusy:S,persistWorkspaceSyncPatchSafely:v}){if(!n||r!=="attach-cloud"&&r!=="provision-local")return;const g=window.setInterval(()=>{if(r!=="attach-cloud"&&r!=="provision-local"||s.current||o.current)return;const w=Math.max(d.current??0,i.current??0);if(w>0&&Date.now()-w<Vv)return;const b=`Workspace sync ${r==="attach-cloud"?"initial cloud pull":"initial cloud upload"} stalled. Press Repair to restart sync for this workspace.`;u(b),f(new Date().toISOString()),k("error"),x(b),S(!1),v({phase:"error",lastErrorMessage:b}),Za("workspace_sync_bootstrap_timeout",{workspaceId:e,phase:r})},1e4);return()=>window.clearInterval(g)}function ak(e){const{workspaceSyncPhase:n,lastBootstrapPhase:r,workspaceLastPullAt:s}=e;return n==="provision-local"?"provision-local":n==="attach-cloud"?"attach-cloud":r==="provision-local"||r==="attach-cloud"?r:s?"attach-cloud":"provision-local"}function rk({cloudAuthConfigured:e,runtimeMode:n,workspaceCloudSyncEnabled:r,workspaceSyncPhase:s,workspacePullInFlightRef:o,realtimePullDebounceRef:d,realtimeSuppressedEventIdsRef:i,clearWorkspaceRetry:u,isWorkspaceRetryPending:f,pullWorkspaceChangesFromCloud:k}){return{handleRealtimeSignal:g=>{if(!e||n!=="local"||!r||s==="provision-local")return;const w=String(g?.eventId||"").trim();w&&i.current.delete(w)||o.current||(f()&&u(),d.current!==null&&window.clearTimeout(d.current),d.current=window.setTimeout(()=>{d.current=null,k()},180))},recordSuppressedEventIds:(g,w)=>{const I=w?.queueRef,b=Number.isFinite(w?.maxQueueSize)?Math.max(1,Number(w?.maxQueueSize)):2048,N=Number.isFinite(w?.ttlMs)?Math.max(0,Number(w?.ttlMs)):null;for(const W of g){const M=String(W||"").trim();!M||i.current.has(M)||(i.current.add(M),I&&I.current.push(M),N!==null&&window.setTimeout(()=>{i.current.delete(M)},N))}if(I)for(;I.current.length>b;){const W=I.current.shift();W&&i.current.delete(W)}},clearRealtimePullDebounce:()=>{d.current!==null&&(window.clearTimeout(d.current),d.current=null)}}}function sk({currentWorkspaceId:e,taxonomyStateFingerprint:n,workspaceCloudSyncEnabled:r,workspaceSyncPhase:s,workspaceLastPullAt:o,lastBootstrapPhaseRef:d,workspaceRepairModeRef:i,workspaceForceFullAiProfilePushRef:u,workspaceStartupRepairRanRef:f,workspaceStartupFullReconcileRanRef:k,workspaceFullReconcileInFlightRef:x,workspacePullCursorRef:S,workspaceAttachBootstrapBaselineSignatureRef:v,workspaceCaptureAttachBootstrapBaselineRef:g,workspacePendingSignatureRef:w,workspaceLastPushedSignatureRef:I,workspaceLastPushedWatermarksRef:b,workspaceLastPushedInitiativeIdsRef:N,workspaceLastPushedInitiativeWatermarksRef:W,workspaceLastPushedWorkstreamIdsRef:M,workspaceLastPushedWorkstreamWatermarksRef:oe,workspaceLastPushedAiProfileIdsRef:te,workspaceLastPushedAiProfileWatermarksRef:ie,workspaceLastPushedDocumentPathsRef:T,workspaceLastPushedDocumentWatermarksRef:ve,workspaceLastPushedAssetPathsRef:O,workspaceLastPushedAssetWatermarksRef:J,workspaceLastPushedDocumentReviewSessionIdsRef:le,workspaceLastPushedDocumentReviewSessionWatermarksRef:ge,workspaceLastPushedDocumentReviewCommentIdsRef:X,workspaceLastPushedDocumentReviewCommentWatermarksRef:R,workspaceLastPushedAnnotatedAttachmentSessionIdsRef:U,workspaceLastPushedAnnotatedAttachmentSessionWatermarksRef:Z,workspaceLastPushedTaskEventWatermarksRef:he,bootstrapPhaseStartedAtRef:Q,bootstrapLastProgressAtRef:we,acquireWorkspaceSyncLease:ke,releaseWorkspaceSyncLease:be,forceClearWorkspaceSyncLease:me,clearWorkspaceRetry:Re,clearWorkspaceIssue:Te,reportWorkspaceWindowContention:se,persistWorkspaceSyncPatch:F,buildWorkspaceSyncSignature:D,pullWorkspaceChangesFromCloud:E,pushWorkspaceChangesToCloud:y,cloudAuthConfigured:C,runtimeMode:P,isAuthenticated:j,checkAuthSession:ae}){return{retryWorkspaceCloudSync:async()=>{if(Re(),!C||P!=="local"||!r||!j&&!await ae())return!1;if(u.current=!0,s==="provision-local"){const B=D();return B?y(B,{forceAllAiProfiles:!0}):!1}const K=await E();if(s==="attach-cloud")return K;const ue=D();if(ue){w.current=ue;const B=await y(ue,{forceAllAiProfiles:u.current===!0});return K||B}return K},resetWorkspaceSyncCursorAndPull:async()=>{if(!await ke(e,"repair")&&(me(e),!await ke(e,"repair"))){se("repair");return}Re(),Te(),Q.current=null,we.current=null,S.current=null,v.current="",g.current=!1,w.current="",I.current="",b.current=new Map,N.current=new Set,W.current=new Map,M.current=new Set,oe.current=new Map,te.current=new Set,ie.current=new Map,T.current=new Set,ve.current=new Map,O.current=new Set,J.current=new Map,le.current=new Set,ge.current=new Map,X.current=new Set,R.current=new Map,U.current=new Set,Z.current=new Map,he.current=new Map,u.current=!1,f.current=!1,k.current=!1,x.current=!1,oh(e,{taskWatermarks:new Map,initiativeWatermarks:new Map,workstreamWatermarks:new Map,documentWatermarks:new Map,assetWatermarks:new Map,documentReviewSessionWatermarks:new Map,documentReviewCommentWatermarks:new Map,annotatedAttachmentSessionWatermarks:new Map,taskEventWatermarks:new Map,taxonomyStateFingerprint:n});try{if(!r)return;i.current=!0;const ue=ak({workspaceSyncPhase:s,lastBootstrapPhase:d.current,workspaceLastPullAt:o});if(await F({phase:ue,pullCursor:null,lastErrorMessage:null}),ue==="provision-local"){const B=D();if(!B)return;await y(B,{forceAllAiProfiles:!0,repairMode:!0});return}await E({repairMode:!0})}finally{i.current=!1,be(e)}}}}function ok({cloudAuthConfigured:e,runtimeMode:n,workspaceCloudSyncEnabled:r,currentWorkspaceId:s,workspaceSyncPhase:o,taxonomyStateFingerprint:d,isAuthenticated:i,checkAuthSession:u,resolveCloudAuthUrl:f,ensureCloudWorkspaceReadyForSync:k,ensureWorkspaceSyncReady:x,handleSyncAuthFailure:S,clearWorkspaceRetry:v,clearWorkspaceIssue:g,isWorkspaceRetryPending:w,scheduleWorkspaceSyncRetry:I,persistWorkspaceSyncPatchSafely:b,persistWorkspaceSyncPatchBestEffort:N,reportSyncEvent:W,acquireWorkspaceSyncLease:M,releaseWorkspaceSyncLease:oe,reportWorkspaceWindowContention:te,refreshWorkspaceSyncMarkdownDocumentsSnapshot:ie,refreshWorkspaceSyncAiProfilesSnapshot:T,refreshWorkspaceSyncAssetsSnapshot:ve,refreshWorkspaceSyncDocumentReviewSessionsSnapshot:O,refreshWorkspaceSyncAnnotatedAttachmentSessionsSnapshot:J,refreshLocalWorkspaceTaskCollections:le,buildWorkspaceSyncPayload:ge,buildWorkspaceSyncSignature:X,seedWorkspaceSnapshotPushBaseline:R,shouldSuppressAttachBootstrapPush:U,recordSuppressedEventIds:Z,workspaceRepairModeRef:he,workspaceForceFullAiProfilePushRef:Q,workspacePushInFlightRef:we,workspacePullInFlightRef:ke,workspaceLastPushedSignatureRef:be,workspacePendingSignatureRef:me,workspaceLastPushedTaskIdsRef:Re,workspaceDeletedTaskIdsRef:Te,workspacePullCursorRef:se,workspaceLastPushedWatermarksRef:F,workspaceLastPushedInitiativeIdsRef:D,workspaceLastPushedInitiativeWatermarksRef:E,workspaceLastPushedWorkstreamIdsRef:y,workspaceLastPushedWorkstreamWatermarksRef:C,workspaceLastPushedAiProfileIdsRef:P,workspaceLastPushedAiProfileWatermarksRef:j,workspaceLastPushedDocumentPathsRef:ae,workspaceLastPushedDocumentWatermarksRef:L,workspaceLastPushedAssetPathsRef:de,workspaceLastPushedAssetWatermarksRef:K,workspaceLastPushedDocumentReviewSessionIdsRef:ue,workspaceLastPushedDocumentReviewSessionWatermarksRef:B,workspaceLastPushedDocumentReviewCommentIdsRef:re,workspaceLastPushedDocumentReviewCommentWatermarksRef:xe,workspaceLastPushedAnnotatedAttachmentSessionIdsRef:Ee,workspaceLastPushedAnnotatedAttachmentSessionWatermarksRef:ye,workspaceLastPushedTaskEventWatermarksRef:Pe,workspaceCaptureAttachBootstrapBaselineRef:vt,workspaceStartupFullReconcileRanRef:Ke,workspaceFullReconcileInFlightRef:bt,bootstrapLastProgressAtRef:Ze,realtimeSuppressedEventQueueRef:Qe,setWorkspaceSyncBusy:St,setUserGlobalSyncStatus:Me,setUserGlobalSyncError:H,setWorkspaceLastErrorMessage:c,setWorkspaceLastErrorAt:Ue,setWorkspaceLastPullAt:At,setWorkspaceLastPushAt:Wt,setWorkspaceSyncPendingChanges:Tt,setTasks:It,setArchivedTasks:Xe}){const gt=async(Ye,Ve)=>{if(!e||n!=="local"||!r||!Bo(s))return!1;if(he.current===!0&&Ve?.repairMode!==!0||o==="attach-cloud")return me.current=Ye,!1;if(!i&&!await u()||U(Ye))return!1;if(we.current||ke.current)return me.current=Ye,!1;if(!await M(s,"push"))return me.current=Ye,te("push"),!1;we.current=!0,St(!0),Me("syncing"),H(null);const xt=Date.now(),jt=Ve?.forceAllAiProfiles===!0||Q.current===!0;try{if(await ie(),await T(),await ve(),await O(),!await x())return!1;const q=ge({forceAllAiProfiles:jt});Tt(q.changes.length);const Se=await gv({resolveCloudAuthUrl:f,workspaceId:s,payload:q,ensureCloudWorkspaceReadyForSync:k,repairMode:Ve?.repairMode===!0||he.current===!0});if(!Se.success){if(Se.status===401)return await S("push",401),!1;let tt=Se.error?`Workspace sync push failed (${Se.status||0}): ${Se.error}`:`Workspace sync push failed (${Se.status||0})`;return Se.status===413&&(tt="Workspace sync failed because the payload is too large. This usually happens when one or more attachments exceed the project limit."),Me("error"),H(tt),c(tt),Ue(new Date().toISOString()),W(s,{eventType:"push",status:"error",statusCode:Se.status,errorMessage:tt,requestMs:Se.requestMs}),me.current=Ye,Se.transient||no(Se.status)?I(Se.retryAfterMs):o==="active"&&b({phase:"error",lastErrorMessage:tt}),!1}be.current=Ye,Re.current=Se.currentTaskIds,D.current=new Set(Se.currentInitiativeIds),E.current=new Map(Se.currentInitiativeWatermarks),y.current=new Set(Se.currentWorkstreamIds),C.current=new Map(Se.currentWorkstreamWatermarks),P.current=new Set(Se.currentAiProfileIds),j.current=new Map(Se.currentAiProfileWatermarks),ae.current=new Set(Se.currentDocumentPaths),L.current=new Map(Se.currentDocumentWatermarks),de.current=new Set(Se.currentAssetPaths),K.current=new Map(Se.currentAssetWatermarks),ue.current=new Set(Se.currentDocumentReviewSessionIds),B.current=new Map(Se.currentDocumentReviewSessionWatermarks),re.current=new Set(Se.currentDocumentReviewCommentIds),xe.current=new Map(Se.currentDocumentReviewCommentWatermarks),Ee.current=new Set(Se.currentAnnotatedAttachmentSessionIds),ye.current=new Map(Se.currentAnnotatedAttachmentSessionWatermarks),Pe.current=new Map(Se.currentTaskEventWatermarks),jt&&(Q.current=!1);for(const[tt,_e]of Se.pushedWatermarks)F.current.set(tt,_e);if(Se.deleteTaskIds.size>0)for(const tt of Se.deleteTaskIds)Te.current.delete(tt),F.current.delete(tt);if(oh(s,{taskWatermarks:F.current,initiativeWatermarks:E.current,workstreamWatermarks:C.current,documentWatermarks:L.current,assetWatermarks:K.current,documentReviewSessionWatermarks:B.current,documentReviewCommentWatermarks:xe.current,annotatedAttachmentSessionWatermarks:ye.current,taskEventWatermarks:Pe.current,taxonomyStateFingerprint:d}),Array.isArray(Se.emittedEventIds)&&Se.emittedEventIds.length>0&&Z(Se.emittedEventIds,{queueRef:Qe,maxQueueSize:2048}),Array.isArray(Se.appliedTaskUpserts)&&Se.appliedTaskUpserts.length>0){const tt=await Pm(s,Se.appliedTaskUpserts.map(_e=>({op:"upsert",archived:_e.archived===!0,task:_e.task})));if(tt.ok){for(const _e of Se.appliedTaskUpserts){const $t=String(_e?.task?.id||"").trim(),ne=String(_e?.task?.updatedAt||_e?.task?.createdAt||"").trim();!$t||!ne||F.current.set($t,ne)}try{await le()}catch{Za("push_local_task_refresh_failed",{workspaceId:s,taskCount:Se.appliedTaskUpserts.length})}}else Za("push_local_task_apply_failed",{workspaceId:s,taskCount:Se.appliedTaskUpserts.length,status:tt.status,failures:tt.failures})}v(),g();const wt=Se.syncedAt||new Date().toISOString();return be.current=X(),Wt(wt),Tt(0),Me("idle"),b({phase:"active",lastPushAt:wt,lastSyncedAt:wt,lastErrorMessage:null}),W(s,{eventType:o==="provision-local"?"bootstrap":"push",status:"success",changeCount:Se.changeCount,requestMs:Se.requestMs}),!0}catch(it){const q="Workspace sync push failed.";return Me("error"),H(q),c(q),Ue(new Date().toISOString()),me.current=Ye,I(),W(s,{eventType:"push",status:"error",errorMessage:`${q} ${String(it?.message||"").trim()}`.trim()}),Za("push_failed_exception",{workspaceId:s,elapsedMs:Date.now()-xt}),!1}finally{we.current=!1,St(ke.current),oe(s);const it=me.current;it&&it!==be.current&&!ke.current&&(me.current="",window.setTimeout(()=>{gt(it)},120))}},ze=async Ye=>{if(!e||n!=="local"||!r||!Bo(s)||he.current===!0&&Ye?.repairMode!==!0||o==="provision-local"||w()||!i&&!await u()||ke.current||we.current)return!1;if(!await M(s,"pull"))return te("pull"),!1;ke.current=!0,St(!0),Me("syncing"),H(null);const ot=Date.now();try{if(!await x())return!1;const jt=o==="attach-cloud",it=jt||Ye?.forceCursorNull===!0?null:se.current,q=await yv({resolveCloudAuthUrl:f,workspaceId:s,cursor:it,bootstrap:jt,ensureCloudWorkspaceReadyForSync:k,maxPages:20,repairMode:Ye?.repairMode===!0||he.current===!0,onPagePulled:()=>{Ze.current=Date.now()},onChangesApplied:()=>{Ze.current=Date.now()}});if(!q.success){if(q.kind==="pull_http"&&q.status===401)return await S("pull",401),!1;if(q.kind==="apply_auth")return await S("apply",401),!1;let _e=q.kind==="apply_payload"||q.kind==="apply_all_candidates"||q.kind==="exception"?String(q.error||"Workspace sync apply failed."):`Workspace sync pull failed (${q.status||0})`;return q.status===413&&(_e="Local sync failed because the downloaded payload is too large. This usually happens when the workspace contains massive attachments."),Me("error"),H(_e),c(_e),Ue(new Date().toISOString()),W(s,{eventType:q.kind?.startsWith("apply")?"apply":"pull",status:"error",statusCode:q.status,errorMessage:_e,requestMs:q.pullRequestMs,details:{pages:q.pages,applyMs:q.applyMs,...q.serverDiagnostics?{serverPullDiagnostics:q.serverDiagnostics}:{}}}),q.transient||q.hasTransientApplyFailure||no(q.status)?I(q.retryAfterMs):b({phase:"error",lastErrorMessage:_e}),!1}Array.isArray(q.emittedEventIds)&&Z(q.emittedEventIds,{ttlMs:6e4}),q.pulledDeleteTaskIds.size>0&&(It(_e=>_e.filter($t=>!q.pulledDeleteTaskIds.has(String($t.id||"")))),Xe(_e=>_e.filter($t=>!q.pulledDeleteTaskIds.has(String($t.id||"")))));const Se=Array.isArray(q.documentDecryptFailures)?q.documentDecryptFailures.filter(_e=>String(_e||"").trim().length>0):[];if(Se.length>0&&Za("pull_document_decrypt_failures",{workspaceId:s,failureCount:Se.length}),se.current=q.cursor||null,q.appliedChanges>0&&(q.pulledActiveUpserts||q.pulledArchivedUpserts||q.pulledTaskEventUpserts))try{await le()}catch{Za("pull_local_refresh_failed",{workspaceId:s,appliedChanges:q.appliedChanges})}v(),g();const wt=q.syncedAt||new Date().toISOString();if(At(wt),Tt(0),Me("idle"),o==="attach-cloud"&&(vt.current=!0,me.current=""),await N({phase:"active",pullCursor:se.current,lastPullAt:wt,lastSyncedAt:wt,lastErrorMessage:null}),W(s,{eventType:o==="attach-cloud"?"bootstrap":"pull",status:"success",changeCount:q.appliedChanges,requestMs:q.pullRequestMs,details:{pages:q.pages,applyMs:q.applyMs,...q.serverDiagnostics?{serverPullDiagnostics:q.serverDiagnostics}:{}}}),o==="attach-cloud")return await ie(),await ve(),await O(),await J(),R(),!0;!Ye?.forceCursorNull&&!jt&&!Ke.current&&(Ke.current=!0,window.setTimeout(()=>{bt.current||(bt.current=!0,ze({forceCursorNull:!0}).finally(()=>{bt.current=!1}))},250));const tt=me.current||X();return tt&&tt!==be.current&&(me.current="",window.setTimeout(()=>{gt(tt)},120)),!0}catch(xt){const jt=String(xt?.message||"").trim(),it=jt?`Workspace sync pull failed. ${jt}`:"Workspace sync pull failed.";return Me("error"),H(it),c(it),Ue(new Date().toISOString()),I(),W(s,{eventType:"pull",status:"error",errorMessage:it,requestMs:Date.now()-ot}),Za("pull_failed_exception",{workspaceId:s,elapsedMs:Date.now()-ot,error:jt||null}),!1}finally{ke.current=!1,St(we.current),oe(s)}};return{pushWorkspaceChangesToCloud:gt,pullWorkspaceChangesFromCloud:ze}}function ik(e,n,r,s,o){return e?n==="provision-local"?r?"Uploading this workspace to cloud for the first time.":"Preparing the first upload to cloud.":n==="attach-cloud"?r?"Pulling the cloud workspace into this device.":"Waiting for the first cloud pull into this device.":s?"Sync hit a temporary problem and will retry automatically.":o?"Sync needs attention before it can continue.":r?"Sync is currently running.":"Sync is healthy.":"Sync is turned off for this workspace."}function ck(e,n,r,s){return e?n==="provision-local"?"Keep this window open while the first upload finishes. If it seems stalled, press Sync.":n==="attach-cloud"?"Keep this window open for the first cloud pull. If it does not move, press Repair.":r?"Wait for the automatic retry, or press Sync to retry now.":s?"Press Sync to retry. If the same error keeps returning, press Repair.":"No action needed.":"Turn on sync when you are ready to back up this workspace."}const Up={documents:!1,aiProfiles:!1,assets:!1,documentReviewSessions:!1,annotatedAttachmentSessions:!1};function lk(e){const{currentWorkspaceId:n,cloudAuthConfigured:r,runtimeMode:s,authSessionResolved:o,isAuthenticated:d,authUserId:i,projectName:u,resolveCloudAuthUrl:f,resolveWebSocketUrl:k,realtimeSyncEnabled:x,tasks:S,archivedTasks:v,initiatives:g,workstreams:w,taxonomies:I,taxonomyState:b,setupState:N,globalTheme:W,locale:M,globalWeekStartsOn:oe,themeUseGlobalDefault:te,setTasks:ie,setArchivedTasks:T,setAuthBlocked:ve,setIsAuthenticated:O,checkAuthSession:J,setGlobalTheme:le,setCurrentTheme:ge,setSetupState:X,setLocale:R,setGlobalWeekStartsOn:U,fetchPlanningEntities:Z}=e,he=a.useMemo(()=>Jv(b),[b]),[Q,we]=a.useState("disconnected"),[ke,be]=a.useState(null),[me,Re]=a.useState(null),[Te,se]=a.useState(null),[F,D]=a.useState(null),[E,y]=a.useState(null),[C,P]=a.useState(!1),[j,ae]=a.useState("idle"),[L,de]=a.useState(!1),[K,ue]=a.useState(0),[B,re]=a.useState([]),[xe,Ee]=a.useState(""),ye=a.useRef(S||[]),Pe=a.useRef(v||[]),vt=a.useRef(g||[]),Ke=a.useRef(w||[]),bt=a.useRef([]),[Ze,Qe]=a.useState([]),[St,Me]=a.useState(""),[H,c]=a.useState(null),[Ue,At]=a.useState(null),[Wt,Tt]=a.useState(0),[It,Xe]=a.useState(null),gt=a.useRef([]),[ze,Ye]=a.useState([]),[Ve,ot]=a.useState(""),xt=a.useRef([]),[jt,it]=a.useState([]),[q,Se]=a.useState(""),wt=a.useRef([]),tt=a.useRef([]),[_e,$t]=a.useState([]),[ne,Ce]=a.useState(""),Ie=a.useRef([]),[je,at]=a.useState(Up),[ct,dt]=a.useState("degraded-fallback"),[ut,Mt]=a.useState({accepted:0,duplicateDiscarded:0,outOfOrderDiscarded:0,invalidDiscarded:0,recoveryTriggered:0}),Nt=a.useRef(!1),Ft=a.useRef(null),Yt=a.useRef(0),Bt=a.useRef(!1),Jt=a.useRef(new Set),mn=a.useRef(""),Pn=a.useRef(""),Qt=a.useRef(""),Rt=a.useRef(""),gn=a.useRef(""),jn=a.useRef(""),Gt=a.useRef(!1),Ma=a.useRef(null),An=a.useRef(new Set),G=a.useRef([]),Fe=a.useRef(()=>Promise.resolve(!1)),Ge=a.useRef(async()=>{}),Ct=a.useRef(null),$e=a.useRef(null),Ut=a.useRef("idle"),qt=a.useCallback(()=>{Ft.current!==null&&(window.clearTimeout(Ft.current),Ft.current=null)},[]),_t=a.useCallback(A=>{if(typeof window>"u")return;qt();const Ne=Math.max(1,Math.floor(Yt.current)+1);Yt.current=Ne;const rt=1500*2**Math.max(0,Ne-1),ht=Number.isFinite(Number(A))?Math.max(0,Math.floor(Number(A))):0,$=Math.max(Math.min(12e4,rt),ht);Ft.current=window.setTimeout(()=>{Ft.current=null,Ge.current({preferCloudOnFirstSync:!1})},$)},[qt]);a.useEffect(()=>{Pn.current="",Qt.current="",Rt.current="",gn.current="",jn.current="",pa.current="",Ca.current=!1,re([]),Ee(""),gt.current=[],Qe([]),Me(""),Ye([]),ot(""),wt.current=[],tt.current=[],it([]),Se(""),Ie.current=[],$t([]),Ce(""),at(Up),y(null),D(null),ue(0),An.current=new Set,G.current=[],ra.current=new Map,Yn.current=new Set,sa.current=new Map,On.current=new Set,ua.current=new Map,$n.current=new Set,Jn.current=new Map,Ba.current=new Set,nt.current=new Map,Gn.current=new Set,rn.current=new Map,Xt.current=new Set,on.current=new Map,Tn.current=new Set,kn.current=new Map,Wa.current=new Set,Ka.current=new Map,ma.current=new Map,Wa.current=new Set,Ka.current=new Map,ma.current=new Map,Dt.current=!1,mr.current=!1;const A=Qv(n,he);A&&(ra.current=A.taskWatermarks,sa.current=A.initiativeWatermarks,ua.current=A.workstreamWatermarks,nt.current=A.documentWatermarks,rn.current=A.assetWatermarks,on.current=A.documentReviewSessionWatermarks,kn.current=A.documentReviewCommentWatermarks,Ka.current=A.annotatedAttachmentSessionWatermarks,ma.current=A.taskEventWatermarks)},[n,he]);const tn=a.useCallback(A=>{at(Ne=>Ne[A]?Ne:{...Ne,[A]:!0})},[]),ln=Object.values(je).every(Boolean),{workspaceRetryAt:Ot,isWorkspaceRetryPending:ta,workspacePushInFlightRef:Mn,workspacePullInFlightRef:yn,workspaceLastPushedSignatureRef:pn,workspacePendingSignatureRef:zt,workspaceLastPushedTaskIdsRef:na,workspaceDeletedTaskIdsRef:Rn,workspacePullCursorRef:cr,clearWorkspaceRetry:dn,scheduleWorkspaceRetry:Ht,persistWorkspaceSyncPatch:Vt,applyWorkspaceSyncPatchLocally:_a,loadWorkspaceSyncState:aa,applyWorkspaceSyncStateSnapshot:br,saveWorkspaceCloudSyncSettings:cs,acquireWorkspaceSyncLease:Ln,releaseWorkspaceSyncLease:La,forceClearWorkspaceSyncLease:qa}=Uv({currentWorkspaceId:n,setWorkspaceCloudSyncEnabled:P,setWorkspaceSyncPhase:ae,setWorkspaceLastPullAt:Re,setWorkspaceLastPushAt:se,setWorkspaceLastErrorMessage:y}),ra=a.useRef(new Map),Yn=a.useRef(new Set),sa=a.useRef(new Map),On=a.useRef(new Set),ua=a.useRef(new Map),$n=a.useRef(new Set),Jn=a.useRef(new Map),Ba=a.useRef(new Set),nt=a.useRef(new Map),Gn=a.useRef(new Set),rn=a.useRef(new Map),Xt=a.useRef(new Set),on=a.useRef(new Map),Tn=a.useRef(new Set),kn=a.useRef(new Map),Wa=a.useRef(new Set),Ka=a.useRef(new Map),ma=a.useRef(new Map),fn=a.useRef(!1),Dt=a.useRef(!1),lr=a.useRef(!1),pa=a.useRef(""),Ca=a.useRef(!1),Aa=3e4,Dn=x?3e4:15e3,Ta=a.useMemo(()=>{const A=me?Date.parse(me):NaN,Ne=Te?Date.parse(Te):NaN;return Number.isFinite(A)&&Number.isFinite(Ne)?A>=Ne?me:Te:Number.isFinite(A)?me:Number.isFinite(Ne)?Te:null},[me,Te]),ls=a.useMemo(()=>C?L||j==="provision-local"||j==="attach-cloud"?"syncing":Ot||E||j==="error"?"attention":"healthy":"off",[C,L,j,Ot,E]),oa=a.useMemo(()=>ik(C,j,L,Ot,E),[C,j,L,Ot,E]),dr=a.useMemo(()=>ck(C,j,Ot,E),[C,j,Ot,E]),ds=a.useCallback(A=>{const Ne=String(A||"").trim();if(!Ne)return null;const ht=$p()[Ne]?.updatedAt;return typeof ht=="string"&&ht.trim().length>0?ht.trim():null},[]),fa=a.useCallback((A,Ne)=>{const rt=String(A||"").trim(),ht=String(Ne||"").trim();if(!rt||!ht)return;const $=$p();$[rt]={updatedAt:ht},Yv($)},[]),ur=a.useCallback(()=>{const A=N?.mode==="operations"?"operations":"core";return{theme:W,operatingMode:A,localization:{locale:M,weekStartsOn:oe}}},[W,N?.mode,M,oe]),Vn=a.useCallback(async A=>{if(!(!A||typeof A!="object")){Bt.current=!0;try{const Ne={},rt=kc(A.theme);if(rt&&(le(rt),te&&ge(rt),Ne.theme=rt),(A.operatingMode==="core"||A.operatingMode==="operations")&&(X(ht=>ht&&{...ht,mode:A.operatingMode}),Ne.setup={mode:A.operatingMode}),A.localization&&typeof A.localization=="object"){const ht={};if(typeof A.localization.locale=="string"&&A.localization.locale.trim().length>0){const We=Hf(A.localization.locale.trim());R(We)}const $=String(A.localization.weekStartsOn||"").trim().toLowerCase();($==="sunday"||$==="monday")&&(U($),ht.weekStartsOn=$),Object.keys(ht).length>0&&(Ne.schedulePreferences=ht)}Object.keys(Ne).length>0&&await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(Ne)})}finally{Bt.current=!1}}},[te,le,ge,X,R,U]),ha=a.useCallback(async A=>{const Ne=A?.preferCloudOnFirstSync!==!1;if(!r)return;if(s!=="local"||!d){qt(),Yt.current=0,we("disconnected");return}const rt=String(i||"").trim();if(!rt||rt==="anonymous"){qt(),Yt.current=0,we("disconnected");return}if(!Nt.current){we("syncing"),be(null),Nt.current=!0;try{const ht=await vv({resolveCloudAuthUrl:f,userId:rt,preferCloudOnFirstSync:Ne,getLocalUpdatedAt:ds,buildLocalSettings:ur,applyRemoteSettings:Vn});if(!ht.success){we("error"),ht.transient?(be(ht.error||"Sync failed temporarily. Retrying automatically."),_t(ht.retryAfterMs)):(qt(),Yt.current=0,be(ht.error||"Sync failed."));return}qt(),Yt.current=0;const $=String(ht.updatedAt||"").trim()||new Date().toISOString();fa(rt,$),we("idle"),be(null),Jt.current.add(rt),ht.mode==="pulled"&&(mn.current="")}catch{we("error"),be("Sync failed temporarily. Retrying automatically."),_t()}finally{Nt.current=!1}}},[r,s,d,i,f,ds,ur,Vn,fa,qt,_t]);a.useEffect(()=>{Ge.current=ha},[ha]),a.useEffect(()=>()=>{qt()},[qt]);const Sn=a.useCallback(()=>{y(null),D(null)},[]),xr=a.useCallback(A=>{y(Op),D(new Date().toISOString()),we("error"),be(Op),Za("workspace_sync_window_contention",{workspaceId:n,operation:A})},[n]),Ia=a.useCallback(async A=>{try{return await Vt(A)}catch{return _a(A)}},[_a,Vt]),Fa=a.useCallback(A=>{Ia(A).catch(()=>{})},[Ia]),Na=a.useCallback(A=>{Ht(()=>Fe.current(),{minDelayMs:A})},[Ht]);a.useEffect(()=>{tk({workspaceSyncPhase:j,lastBootstrapPhaseRef:Ut,bootstrapPhaseStartedAtRef:Ct,bootstrapLastProgressAtRef:$e})},[j]),a.useEffect(()=>nk({currentWorkspaceId:n,workspaceCloudSyncEnabled:C,workspaceSyncPhase:j,workspacePullInFlightRef:yn,workspacePushInFlightRef:Mn,bootstrapPhaseStartedAtRef:Ct,bootstrapLastProgressAtRef:$e,setWorkspaceLastErrorMessage:A=>y(A),setWorkspaceLastErrorAt:A=>D(A),setUserGlobalSyncStatus:we,setUserGlobalSyncError:A=>be(A),setWorkspaceSyncBusy:de,persistWorkspaceSyncPatchSafely:Fa}),[n,C,j,Fa,yn,Mn]);const ja=a.useCallback(async()=>fv({cloudAuthConfigured:r,runtimeMode:s,isAuthenticated:d,resolveCloudAuthUrl:f,workspaceId:n,workspaceName:u||n}),[r,s,d,f,n,u]);a.useEffect(()=>{ye.current=S||[]},[S]),a.useEffect(()=>{Pe.current=v||[]},[v]),a.useEffect(()=>{vt.current=g||[]},[g]),a.useEffect(()=>{Ke.current=w||[]},[w]);const Oa=a.useRef(!1),mr=a.useRef(!1),_r=a.useCallback(A=>{const Ne=A?.forceAllAiProfiles===!0;return Rv({tasks:ye.current,archivedTasks:Pe.current,taskEvents:Jd(ye.current,Pe.current),lastPushedTaskIds:na.current,pendingDeletedTaskIds:Rn.current,initiatives:vt.current,workstreams:Ke.current,taxonomies:I||[],taxonomyState:b,lastPushedInitiativeIds:Yn.current,lastPushedInitiativeWatermarks:sa.current,lastPushedWorkstreamIds:On.current,lastPushedWorkstreamWatermarks:ua.current,aiProfiles:gt.current,lastPushedAiProfileIds:Ne?new Set:$n.current,lastPushedAiProfileWatermarks:Ne?new Map:Jn.current,documents:bt.current,assets:xt.current,documentReviewSessions:wt.current,documentReviewComments:tt.current,annotatedAttachmentSessions:Ie.current,lastPushedDocumentPaths:Ba.current,lastPushedDocumentWatermarks:nt.current,lastPushedAssetPaths:Gn.current,lastPushedAssetWatermarks:rn.current,lastPushedDocumentReviewSessionIds:Xt.current,lastPushedDocumentReviewSessionWatermarks:on.current,lastPushedDocumentReviewCommentIds:Tn.current,lastPushedDocumentReviewCommentWatermarks:kn.current,lastPushedAnnotatedAttachmentSessionIds:Wa.current,lastPushedAnnotatedAttachmentSessionWatermarks:Ka.current,lastPushedTaskEventWatermarks:ma.current,lastPushedWatermarks:ra.current})},[I,b]),Ya=a.useCallback((A,Ne)=>{s==="local"&&fetch("/api/taskforce/sync/events",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({...Ne,workspaceId:A})}).catch(rt=>{Za("sync_event_post_failed",{workspaceId:A,eventType:Ne.eventType,status:Ne.status,error:String(rt?.message||rt||"")})})},[s]),Ra=a.useCallback(()=>Dv({workspaceId:n,tasks:ye.current,archivedTasks:Pe.current,taskEvents:Jd(ye.current,Pe.current),pendingDeletedTaskIds:Rn.current,initiatives:vt.current,workstreams:Ke.current,taxonomies:I||[],aiProfiles:gt.current,documents:bt.current,assets:xt.current,documentReviewSessions:wt.current,documentReviewComments:tt.current,annotatedAttachmentSessions:Ie.current}),[n,I,b]),ia=a.useMemo(()=>JSON.stringify({tasks:(S||[]).map(A=>({id:String(A.id||"").trim(),updatedAt:String(A.updatedAt||A.createdAt||"").trim(),status:String(A.status||"").trim(),referenceNumber:A.referenceNumber??null,localReferenceNumber:A.localReferenceNumber??null})).sort((A,Ne)=>A.id.localeCompare(Ne.id)),archivedTasks:(v||[]).map(A=>({id:String(A.id||"").trim(),updatedAt:String(A.updatedAt||A.createdAt||"").trim(),status:String(A.status||"").trim(),referenceNumber:A.referenceNumber??null,localReferenceNumber:A.localReferenceNumber??null})).sort((A,Ne)=>A.id.localeCompare(Ne.id)),initiatives:(g||[]).map(A=>({id:String(A.id||"").trim(),updatedAt:String(A.updatedAt||A.createdAt||"").trim(),isArchived:!!A.isArchived})).sort((A,Ne)=>A.id.localeCompare(Ne.id)),workstreams:(w||[]).map(A=>({id:String(A.id||"").trim(),updatedAt:String(A.updatedAt||A.createdAt||"").trim(),initiativeId:typeof A.initiativeId=="string"?A.initiativeId.trim():"",isArchived:!!A.isArchived})).sort((A,Ne)=>A.id.localeCompare(Ne.id)),taskEvents:Jd(S||[],v||[]).map(A=>({id:String(A.id||"").trim(),taskId:String(A.taskId||"").trim(),createdAt:String(A.createdAt||"").trim(),action:String(A.action||"").trim()})).sort((A,Ne)=>A.id.localeCompare(Ne.id)),taxonomies:Array.isArray(I)?I:[],taxonomyState:b&&typeof b=="object"?b:null}),[S,v,g,w,I,b]),Cr=a.useMemo(()=>{const A=[];for(const Ne of S||[]){const rt=Array.isArray(Ne.attachments)?Ne.attachments.length:0;rt>0&&A.push(`${Ne.id}:${rt}`)}return A.join("|")},[S]),Ar=a.useCallback(A=>{if(!A)return!1;if(Ca.current)return Ca.current=!1,pa.current=A,pn.current=A,ue(0),!0;const Ne=pa.current;return Ne?A===Ne?(pn.current=A,ue(0),!0):(pa.current="",!1):!1},[]),Zn=a.useCallback(async()=>{if(s==="local"&&Bo(n)&&!(r&&(!o||!d)))try{const A=await fetch(`/api/taskforce/sync/workspace/documents?workspaceId=${encodeURIComponent(n)}`,{method:"GET",credentials:"include"});if(!A.ok)return;const Ne=await A.json().catch(()=>({})),rt=Array.isArray(Ne?.documents)?Ne.documents.map($=>({path:String($?.path||"").trim(),updatedAt:String($?.updatedAt||"").trim(),content:typeof $?.content=="string"?$.content:"",assetId:typeof $?.assetId=="string"&&$.assetId.trim().length>0?$.assetId.trim():void 0,documentId:typeof $?.documentId=="string"&&$.documentId.trim().length>0?$.documentId.trim():null,referenceNumber:Number.isFinite(Number($?.referenceNumber))?Math.max(1,Math.floor(Number($.referenceNumber))):null,version:Number.isFinite(Number($?.version))?Math.max(1,Math.floor(Number($.version))):null,taskId:typeof $?.taskId=="string"&&$.taskId.trim().length>0?$.taskId.trim():null,logicalName:typeof $?.logicalName=="string"&&$.logicalName.trim().length>0?$.logicalName.trim():null,caption:typeof $?.caption=="string"&&$.caption.trim().length>0?$.caption.trim():null,originalFilename:typeof $?.originalFilename=="string"&&$.originalFilename.trim().length>0?$.originalFilename.trim():null,linkRole:$?.linkRole==="reference"?"reference":"attachment"})).filter($=>$.path.length>0):[],ht=typeof Ne?.fingerprint=="string"?Ne.fingerprint:JSON.stringify(rt.map($=>`${$.path}:${$.updatedAt}:${$.content.length}`).sort());if(ht===Pn.current)return;Pn.current=ht,bt.current=rt,re(rt),Ee(ht)}catch(A){Za("documents_snapshot_refresh_failed",{workspaceId:n,error:String(A?.message||A||"")})}finally{tn("documents")}},[s,n,r,o,d,tn]),pr=a.useCallback(async()=>{if(s!=="local"){Xe("runtime-not-local");return}if(!Bo(n)){Xe("workspace-id-invalid");return}if(r&&(!o||!d)){Xe(o?"auth-required":"auth-unresolved");return}Xe(null);try{const A=await fetch(`/api/taskforce/sync/workspace/ai-profiles?workspaceId=${encodeURIComponent(n)}`,{method:"GET",credentials:"include"});if(!A.ok){At(`HTTP ${A.status}`),c(new Date().toISOString());return}const Ne=await A.json().catch(()=>({})),rt=Array.isArray(Ne?.aiProfiles)?Ne.aiProfiles:[];Tt(rt.length);const ht=Array.isArray(Ne?.aiProfiles)?Ne.aiProfiles.map(We=>Kv(We)).filter(We=>We.id.length>0&&We.workspaceId.length>0):[];At(null),c(new Date().toISOString());const $=typeof Ne?.fingerprint=="string"?Ne.fingerprint:JSON.stringify(ht.map(We=>`${We.id}:${We.updatedAt}:${We.name}:${We.username}`).sort());if($===Qt.current)return;Qt.current=$,gt.current=ht,Qe(ht),Me($)}catch(A){At(String(A?.message||A||"unknown-error")),c(new Date().toISOString()),Za("ai_profiles_snapshot_refresh_failed",{workspaceId:n,error:String(A?.message||A||"")})}finally{tn("aiProfiles")}},[s,n,r,o,d,tn]),Ja=a.useCallback(async()=>{if(s==="local"&&Bo(n)&&!(r&&(!o||!d)))try{const A=await fetch(`/api/taskforce/sync/workspace/assets?workspaceId=${encodeURIComponent(n)}`,{method:"GET",credentials:"include"});if(!A.ok)return;const Ne=await A.json().catch(()=>({})),rt=Array.isArray(Ne?.assets)?Ne.assets.map($=>({path:String($?.path||"").trim(),updatedAt:String($?.updatedAt||"").trim(),contentBase64:typeof $?.contentBase64=="string"?$.contentBase64:"",assetId:typeof $?.assetId=="string"&&$.assetId.trim().length>0?$.assetId.trim():void 0,kind:$?.kind==="image"?"image":"file",mimeType:typeof $?.mimeType=="string"&&$.mimeType.trim().length>0?$.mimeType.trim():"application/octet-stream",referenceNumber:Number.isFinite(Number($?.referenceNumber))?Math.max(1,Math.floor(Number($.referenceNumber))):null,taskId:typeof $?.taskId=="string"&&$.taskId.trim().length>0?$.taskId.trim():null,logicalName:typeof $?.logicalName=="string"&&$.logicalName.trim().length>0?$.logicalName.trim():null,caption:typeof $?.caption=="string"&&$.caption.trim().length>0?$.caption.trim():null,originalFilename:typeof $?.originalFilename=="string"&&$.originalFilename.trim().length>0?$.originalFilename.trim():null,linkRole:$?.linkRole==="reference"?"reference":$?.linkRole==="image"?"image":"attachment"})).filter($=>$.path.length>0&&$.contentBase64.length>0):[],ht=typeof Ne?.fingerprint=="string"?Ne.fingerprint:JSON.stringify(rt.map($=>`${$.path}:${$.updatedAt}:${$.contentBase64.length}`).sort());if(ht===Rt.current)return;Rt.current=ht,xt.current=rt,Ye(rt),ot(ht)}catch(A){Za("assets_snapshot_refresh_failed",{workspaceId:n,error:String(A?.message||A||"")})}finally{tn("assets")}},[s,n,r,o,d,tn]),Xn=a.useCallback(async()=>{if(s==="local"&&Bo(n)&&!(r&&(!o||!d)))try{const A=await fetch(`/api/taskforce/sync/workspace/document-reviews?workspaceId=${encodeURIComponent(n)}`,{method:"GET",credentials:"include"});if(!A.ok)return;const Ne=await A.json().catch(()=>({})),rt=Array.isArray(Ne?.sessions)?Ne.sessions.map(We=>({id:String(We?.id||"").trim(),assetId:String(We?.assetId||"").trim(),documentId:typeof We?.documentId=="string"&&We.documentId.trim().length>0?We.documentId.trim():null,documentVersion:Number.isFinite(Number(We?.documentVersion))?Math.max(1,Math.floor(Number(We.documentVersion))):null,title:typeof We?.title=="string"&&We.title.trim().length>0?We.title.trim():null,status:We?.status==="resolved"?"resolved":"open",comments:Array.isArray(We?.comments)?We.comments:[],createdByActorId:typeof We?.createdByActorId=="string"&&We.createdByActorId.trim().length>0?We.createdByActorId.trim():null,updatedByActorId:typeof We?.updatedByActorId=="string"&&We.updatedByActorId.trim().length>0?We.updatedByActorId.trim():null,createdAt:String(We?.createdAt||"").trim(),updatedAt:String(We?.updatedAt||We?.createdAt||"").trim(),deletedAt:typeof We?.deletedAt=="string"&&We.deletedAt.trim().length>0?We.deletedAt.trim():null})).filter(We=>We.id.length>0&&We.assetId.length>0):[],ht=Array.isArray(Ne?.comments)?Ne.comments.map(We=>({id:String(We?.id||"").trim(),sessionId:String(We?.sessionId||"").trim(),body:typeof We?.body=="string"?We.body:"",anchor:We?.anchor??null,order:Number.isFinite(Number(We?.order))?Math.max(0,Math.floor(Number(We.order))):0,authorActorId:typeof We?.authorActorId=="string"&&We.authorActorId.trim().length>0?We.authorActorId.trim():null,createdAt:String(We?.createdAt||"").trim(),updatedAt:String(We?.updatedAt||We?.createdAt||"").trim(),deletedAt:typeof We?.deletedAt=="string"&&We.deletedAt.trim().length>0?We.deletedAt.trim():null})).filter(We=>We.id.length>0&&We.sessionId.length>0):Xv(rt),$=typeof Ne?.fingerprint=="string"?Ne.fingerprint:JSON.stringify([...rt.map(We=>`${We.id}:${We.updatedAt}:${We.status}:${We.deletedAt||""}:${We.comments.length}`).sort(),...ht.map(We=>`${We.id}:${We.sessionId}:${We.updatedAt}:${We.deletedAt||""}`).sort()]);if($===gn.current)return;gn.current=$,wt.current=rt,tt.current=ht,it(rt),Se($)}catch(A){Za("document_review_sessions_snapshot_refresh_failed",{workspaceId:n,error:String(A?.message||A||"")})}finally{tn("documentReviewSessions")}},[s,n,r,o,d,tn]),Un=a.useCallback(async()=>{if(s==="local"&&Bo(n)&&!(r&&(!o||!d)))try{const A=await fetch(`/api/taskforce/sync/workspace/annotated-attachments?workspaceId=${encodeURIComponent(n)}`,{method:"GET",credentials:"include"});if(!A.ok)return;const Ne=await A.json().catch(()=>({})),rt=Array.isArray(Ne?.sessions)?Ne.sessions.map($=>({id:String($?.id||"").trim(),workspaceId:String($?.workspaceId||"").trim(),taskId:String($?.taskId||"").trim(),baseImageAssetId:String($?.baseImageAssetId||"").trim(),title:typeof $?.title=="string"&&$.title.trim().length>0?$.title.trim():null,globalInstruction:typeof $?.globalInstruction=="string"&&$.globalInstruction.trim().length>0?$.globalInstruction.trim():null,annotations:Array.isArray($?.annotations)?$.annotations:[],createdByActorId:typeof $?.createdByActorId=="string"&&$.createdByActorId.trim().length>0?$.createdByActorId.trim():null,updatedByActorId:typeof $?.updatedByActorId=="string"&&$.updatedByActorId.trim().length>0?$.updatedByActorId.trim():null,createdAt:String($?.createdAt||"").trim(),updatedAt:String($?.updatedAt||$?.createdAt||"").trim(),deletedAt:typeof $?.deletedAt=="string"&&$.deletedAt.trim().length>0?$.deletedAt.trim():null})).filter($=>$.id.length>0&&$.workspaceId.length>0&&$.taskId.length>0&&$.baseImageAssetId.length>0):[],ht=typeof Ne?.fingerprint=="string"?Ne.fingerprint:JSON.stringify(rt.map($=>`${$.id}:${$.updatedAt}:${$.taskId}:${$.baseImageAssetId}:${$.annotations.length}:${$.deletedAt||""}`).sort());if(ht===jn.current)return;jn.current=ht,Ie.current=rt,$t(rt),Ce(ht)}catch(A){Za("annotated_attachment_sessions_snapshot_refresh_failed",{workspaceId:n,error:String(A?.message||A||"")})}finally{tn("annotatedAttachmentSessions")}},[s,n,r,o,d,tn]),zn=a.useCallback(()=>{Ba.current=new Set(bt.current.map(A=>String(A?.path||"").trim()).filter(A=>A.length>0)),nt.current=new Map(bt.current.map(A=>[String(A?.path||"").trim(),String(A?.updatedAt||"").trim()]).filter(([A])=>A.length>0)),Gn.current=new Set(xt.current.map(A=>String(A?.path||"").trim()).filter(A=>A.length>0)),rn.current=new Map(xt.current.map(A=>[String(A?.path||"").trim(),String(A?.updatedAt||"").trim()]).filter(([A])=>A.length>0)),Xt.current=new Set(wt.current.map(A=>String(A?.id||"").trim()).filter(A=>A.length>0)),on.current=new Map(wt.current.map(A=>[String(A?.id||"").trim(),String(A?.updatedAt||A?.createdAt||"").trim()]).filter(([A])=>A.length>0)),Tn.current=new Set(tt.current.map(A=>String(A?.id||"").trim()).filter(A=>A.length>0)),kn.current=new Map(tt.current.map(A=>[String(A?.id||"").trim(),String(A?.updatedAt||A?.createdAt||"").trim()]).filter(([A])=>A.length>0)),Wa.current=new Set(Ie.current.map(A=>String(A?.id||"").trim()).filter(A=>A.length>0)),Ka.current=new Map(Ie.current.map(A=>[String(A?.id||"").trim(),String(A?.updatedAt||A?.createdAt||"").trim()]).filter(([A])=>A.length>0)),ma.current=new Map(Jd(ye.current,Pe.current).map(A=>[String(A?.id||"").trim(),String(A?.createdAt||"").trim()]).filter(([A])=>A.length>0))},[]),Bn=a.useCallback(async()=>{const[A,Ne]=await Promise.all([fetch("/api/taskforce/tasks",{method:"GET",credentials:"include"}),fetch("/api/taskforce/archive",{method:"GET",credentials:"include"})]);if(A.ok){const rt=await A.json().catch(()=>({})),ht=Array.isArray(rt?.tasks)?rt.tasks.map($=>to($)):[];ie(ht)}if(Ne.ok){const rt=await Ne.json().catch(()=>({})),ht=Array.isArray(rt?.archived)?rt.archived.map($=>({...to($),isArchived:!0})):[];T(ht)}await Z().catch(()=>{Za("refresh_planning_entities_failed",{workspaceId:n})})},[n,Z,T,ie]),{handleSyncAuthFailure:fr,ensureWorkspaceSyncReady:Be}=a.useMemo(()=>ek({currentWorkspaceId:n,workspaceSyncPhase:j,clearWorkspaceRetry:dn,setWorkspaceSyncBusy:de,setUserGlobalSyncStatus:we,setUserGlobalSyncError:A=>be(A),setWorkspaceLastErrorMessage:A=>y(A),setWorkspaceLastErrorAt:A=>D(A),reportSyncEvent:Ya,setAuthBlocked:ve,setIsAuthenticated:O,checkAuthSession:J,ensureCloudWorkspaceReadyForSync:ja,scheduleWorkspaceSyncRetry:Na,persistWorkspaceSyncPatchSafely:Fa}),[n,j,dn,Ya,ve,O,J,ja,Na,Fa]),Et=a.useMemo(()=>ok({cloudAuthConfigured:r,runtimeMode:s,workspaceCloudSyncEnabled:C,currentWorkspaceId:n,workspaceSyncPhase:j,taxonomyStateFingerprint:he,isAuthenticated:d,checkAuthSession:J,resolveCloudAuthUrl:f,ensureCloudWorkspaceReadyForSync:ja,ensureWorkspaceSyncReady:Be,handleSyncAuthFailure:fr,clearWorkspaceRetry:dn,clearWorkspaceIssue:Sn,isWorkspaceRetryPending:ta,scheduleWorkspaceSyncRetry:Na,persistWorkspaceSyncPatchSafely:Fa,persistWorkspaceSyncPatchBestEffort:Ia,reportSyncEvent:Ya,acquireWorkspaceSyncLease:Ln,releaseWorkspaceSyncLease:La,reportWorkspaceWindowContention:xr,refreshWorkspaceSyncMarkdownDocumentsSnapshot:Zn,refreshWorkspaceSyncAiProfilesSnapshot:pr,refreshWorkspaceSyncAssetsSnapshot:Ja,refreshWorkspaceSyncDocumentReviewSessionsSnapshot:Xn,refreshWorkspaceSyncAnnotatedAttachmentSessionsSnapshot:Un,refreshLocalWorkspaceTaskCollections:Bn,buildWorkspaceSyncPayload:_r,buildWorkspaceSyncSignature:Ra,seedWorkspaceSnapshotPushBaseline:zn,shouldSuppressAttachBootstrapPush:Ar,recordSuppressedEventIds:(...A)=>hr.current.recordSuppressedEventIds(...A),workspaceRepairModeRef:lr,workspaceForceFullAiProfilePushRef:Oa,workspacePushInFlightRef:Mn,workspacePullInFlightRef:yn,workspaceLastPushedSignatureRef:pn,workspacePendingSignatureRef:zt,workspaceLastPushedTaskIdsRef:na,workspaceDeletedTaskIdsRef:Rn,workspacePullCursorRef:cr,workspaceLastPushedWatermarksRef:ra,workspaceLastPushedInitiativeIdsRef:Yn,workspaceLastPushedInitiativeWatermarksRef:sa,workspaceLastPushedWorkstreamIdsRef:On,workspaceLastPushedWorkstreamWatermarksRef:ua,workspaceLastPushedAiProfileIdsRef:$n,workspaceLastPushedAiProfileWatermarksRef:Jn,workspaceLastPushedDocumentPathsRef:Ba,workspaceLastPushedDocumentWatermarksRef:nt,workspaceLastPushedAssetPathsRef:Gn,workspaceLastPushedAssetWatermarksRef:rn,workspaceLastPushedDocumentReviewSessionIdsRef:Xt,workspaceLastPushedDocumentReviewSessionWatermarksRef:on,workspaceLastPushedDocumentReviewCommentIdsRef:Tn,workspaceLastPushedDocumentReviewCommentWatermarksRef:kn,workspaceLastPushedAnnotatedAttachmentSessionIdsRef:Wa,workspaceLastPushedAnnotatedAttachmentSessionWatermarksRef:Ka,workspaceLastPushedTaskEventWatermarksRef:ma,workspaceCaptureAttachBootstrapBaselineRef:Ca,workspaceStartupFullReconcileRanRef:Dt,workspaceFullReconcileInFlightRef:mr,bootstrapLastProgressAtRef:$e,realtimeSuppressedEventQueueRef:G,setWorkspaceSyncBusy:de,setUserGlobalSyncStatus:we,setUserGlobalSyncError:be,setWorkspaceLastErrorMessage:y,setWorkspaceLastErrorAt:D,setWorkspaceLastPullAt:Re,setWorkspaceLastPushAt:se,setWorkspaceSyncPendingChanges:ue,setTasks:ie,setArchivedTasks:T}),[r,s,C,n,j,he,d,J,f,ja,Be,fr,dn,Sn,Na,Fa,Ia,Ya,Ln,La,xr,Zn,pr,Ja,Xn,Un,Bn,_r,Ra,zn,Ar,ie,T]),{pushWorkspaceChangesToCloud:_n,pullWorkspaceChangesFromCloud:nn}=Et,hr=a.useRef({handleRealtimeSignal:()=>{},recordSuppressedEventIds:()=>{},clearRealtimePullDebounce:()=>{}}),Gr=a.useMemo(()=>rk({cloudAuthConfigured:r,runtimeMode:s,workspaceCloudSyncEnabled:C,workspaceSyncPhase:j,workspacePullInFlightRef:yn,realtimePullDebounceRef:Ma,realtimeSuppressedEventIdsRef:An,clearWorkspaceRetry:dn,isWorkspaceRetryPending:ta,pullWorkspaceChangesFromCloud:nn}),[r,s,C,j,dn,ta,nn]);hr.current=Gr;const us=k("/taskforce-ws"),V=String(i||"").trim(),Kt=ah({enabled:!!(x&&r&&s==="local"&&C&&o&&d&&V&&V!=="anonymous"&&us),workspaceId:n,websocketUrl:us,onSignal:Gr.handleRealtimeSignal,onTelemetry:Mt,userId:V||void 0});a.useEffect(()=>{dt(Kt.connectionState)},[Kt.connectionState]),a.useEffect(()=>()=>Gr.clearRealtimePullDebounce(),[Gr]);const qe=a.useCallback(async A=>cs(A,{cloudAuthConfigured:r,isAuthenticated:d,ensureCloudWorkspaceReadyForSync:ja}),[cs,r,d,ja]),En=a.useCallback(async()=>{await ha({preferCloudOnFirstSync:!1})},[ha]),Xa=a.useMemo(()=>sk({currentWorkspaceId:n,taxonomyStateFingerprint:he,workspaceCloudSyncEnabled:C,workspaceSyncPhase:j,workspaceLastPullAt:me,lastBootstrapPhaseRef:Ut,workspaceRepairModeRef:lr,workspaceForceFullAiProfilePushRef:Oa,workspaceStartupRepairRanRef:fn,workspaceStartupFullReconcileRanRef:Dt,workspaceFullReconcileInFlightRef:mr,workspacePullCursorRef:cr,workspaceAttachBootstrapBaselineSignatureRef:pa,workspaceCaptureAttachBootstrapBaselineRef:Ca,workspacePendingSignatureRef:zt,workspaceLastPushedSignatureRef:pn,workspaceLastPushedWatermarksRef:ra,workspaceLastPushedInitiativeIdsRef:Yn,workspaceLastPushedInitiativeWatermarksRef:sa,workspaceLastPushedWorkstreamIdsRef:On,workspaceLastPushedWorkstreamWatermarksRef:ua,workspaceLastPushedAiProfileIdsRef:$n,workspaceLastPushedAiProfileWatermarksRef:Jn,workspaceLastPushedDocumentPathsRef:Ba,workspaceLastPushedDocumentWatermarksRef:nt,workspaceLastPushedAssetPathsRef:Gn,workspaceLastPushedAssetWatermarksRef:rn,workspaceLastPushedDocumentReviewSessionIdsRef:Xt,workspaceLastPushedDocumentReviewSessionWatermarksRef:on,workspaceLastPushedDocumentReviewCommentIdsRef:Tn,workspaceLastPushedDocumentReviewCommentWatermarksRef:kn,workspaceLastPushedAnnotatedAttachmentSessionIdsRef:Wa,workspaceLastPushedAnnotatedAttachmentSessionWatermarksRef:Ka,workspaceLastPushedTaskEventWatermarksRef:ma,bootstrapPhaseStartedAtRef:Ct,bootstrapLastProgressAtRef:$e,acquireWorkspaceSyncLease:Ln,releaseWorkspaceSyncLease:La,forceClearWorkspaceSyncLease:qa,clearWorkspaceRetry:dn,clearWorkspaceIssue:Sn,reportWorkspaceWindowContention:xr,persistWorkspaceSyncPatch:Vt,buildWorkspaceSyncSignature:Ra,pullWorkspaceChangesFromCloud:nn,pushWorkspaceChangesToCloud:_n,cloudAuthConfigured:r,runtimeMode:s,isAuthenticated:d,checkAuthSession:J}),[n,he,C,j,me,Ln,La,qa,dn,Sn,xr,Vt,Ra,nn,_n,r,s,d,J]),{retryWorkspaceCloudSync:Qa,resetWorkspaceSyncCursorAndPull:Vr}=Xa,Ts=a.useCallback(()=>({workspaceId:n,enabled:C,phase:j,status:ls,summary:oa,lastSuccessfulSyncAt:Ta,lastPullAt:me,lastPushAt:Te,lastErrorAt:F,pendingChanges:K,lastErrorMessage:E,recommendedAction:dr,documentSnapshotCount:B.length,aiProfileSnapshotCount:Ze.length,aiProfileSnapshotRawCount:Wt,aiProfileSnapshotLastFetchAt:H,aiProfileSnapshotLastFetchError:Ue,aiProfileSnapshotLastSkipReason:It,assetSnapshotCount:ze.length,documentReviewSessionSnapshotCount:jt.length,documentReviewSessionSnapshotFingerprint:q,annotatedAttachmentSessionSnapshotCount:_e.length,annotatedAttachmentSessionSnapshotFingerprint:ne,lastPushedAiProfileCount:$n.current.size,lastPushedAiProfileWatermarkCount:Jn.current.size,forceFullAiProfilePushQueued:Oa.current===!0}),[n,C,j,ls,oa,Ta,me,Te,F,K,E,dr,B.length,Ze.length,Wt,H,Ue,It,ze.length,jt.length,q,_e.length,ne]);a.useEffect(()=>{Fe.current=Qa},[Qa]);const Tr=a.useCallback(()=>{Zn(),Ja()},[Zn,Ja]);return a.useEffect(()=>{if(!r||s!=="local"||!C||!o||!d)return;Zn(),pr(),Ja(),Xn(),Un();const A=Ir=>{const ca=Ir.detail;(String(ca?.workspaceId||"").trim()||"default")===n&&Tr()};window.addEventListener(Lm,A);const Ne=window.setInterval(()=>{Zn()},Aa),rt=window.setInterval(()=>{pr()},Aa),ht=window.setInterval(()=>{Ja()},Aa),$=window.setInterval(()=>{Xn()},Aa),We=window.setInterval(()=>{Un()},Aa);return()=>{window.removeEventListener(Lm,A),window.clearInterval(Ne),window.clearInterval(rt),window.clearInterval(ht),window.clearInterval($),window.clearInterval(We)}},[r,s,C,o,d,n,Tr,Zn,pr,Ja,Xn,Un,Aa]),a.useEffect(()=>{!r||s!=="local"||!C||!o||!d||Cr&&Tr()},[r,s,C,o,d,Cr,Tr]),a.useEffect(()=>{if(!r||s!=="local"||!C||!o||j==="attach-cloud"||!ln)return;const A=Ra();if(Ar(A)||!A||A===pn.current)return;const Ne=_r();if(ue(Ne.changes.length),Mn.current||yn.current){zt.current=A;return}const rt=window.setTimeout(()=>{_n(A)},1500);return()=>window.clearTimeout(rt)},[r,s,C,o,j,ln,Ra,Ar,_r,ia,St,xe,Ve,q,ne,_n,Mn,yn]),a.useEffect(()=>{r&&s==="local"&&C||(dn(),de(!1))},[r,s,C,dn]),a.useEffect(()=>{if(!r||s!=="local"||!C||!o||j==="provision-local"||ta())return;nn();const A=window.setInterval(()=>{nn()},Dn);return()=>window.clearInterval(A)},[r,s,C,o,j,ta,nn,Dn]),a.useEffect(()=>{if(!r||s!=="local"||!C||!o||!d||j!=="active")return;const A=window.setInterval(()=>{mr.current||(mr.current=!0,nn({forceCursorNull:!0}).finally(()=>{mr.current=!1}))},Zv);return()=>window.clearInterval(A)},[r,s,C,o,d,j,nn]),a.useEffect(()=>{s!=="local"||!d||!i||i==="anonymous"||ha({preferCloudOnFirstSync:!0})},[s,d,i,ha]),a.useEffect(()=>{if(s!=="local"||!d||!i||i==="anonymous"||!Jt.current.has(i)||Bt.current)return;const A=ur(),Ne=JSON.stringify(A);if(!mn.current){mn.current=Ne;return}if(Ne===mn.current)return;mn.current=Ne,fa(i,new Date().toISOString());const rt=window.setTimeout(()=>{ha({preferCloudOnFirstSync:!1})},350);return()=>window.clearTimeout(rt)},[s,d,i,ur,fa,ha]),a.useEffect(()=>{!r||s!=="local"||!C||!o||!d||j==="provision-local"||j==="attach-cloud"||fn.current||(fn.current=!0,fetch("/api/taskforce/sync/workspace/repair-startup",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({workspaceId:n})}).then(async A=>{if(!A.ok)return;const Ne=await A.json().catch(()=>({}));Ne?.applied>0&&(Za("startup_repair_applied",{workspaceId:n,applied:Ne.applied,skipped:Ne.skipped,failed:Ne.failed}),Zn(),pr(),Ja(),Xn())}).catch(()=>{}))},[r,s,C,o,d,j,n,Zn,pr,Ja,Xn]),{userGlobalSyncStatus:Q,setUserGlobalSyncStatus:we,userGlobalSyncError:ke,setUserGlobalSyncError:be,workspaceLastPullAt:me,workspaceLastPushAt:Te,workspaceLastErrorAt:F,workspaceLastErrorMessage:E,workspaceLastSuccessfulSyncAt:Ta,workspaceCloudSyncEnabled:C,workspaceSyncPhase:j,workspaceSyncStatus:ls,workspaceSyncSummary:oa,workspaceSyncRecommendedAction:dr,workspaceSyncBusy:L,workspaceSyncPendingChanges:K,syncInFlightRef:Gt,workspaceRetryAt:Ot,isWorkspaceRetryPending:ta,workspacePushInFlightRef:Mn,workspacePullInFlightRef:yn,workspaceLastPushedSignatureRef:pn,workspacePendingSignatureRef:zt,workspaceLastPushedTaskIdsRef:na,workspaceDeletedTaskIdsRef:Rn,workspacePullCursorRef:cr,clearWorkspaceRetry:dn,persistWorkspaceSyncPatch:Vt,loadWorkspaceSyncState:aa,applyWorkspaceSyncStateSnapshot:br,syncUserGlobalSettings:ha,buildWorkspaceSyncSignature:Ra,pushWorkspaceChangesToCloud:_n,pullWorkspaceChangesFromCloud:nn,saveWorkspaceCloudSyncSettings:qe,retryUserGlobalSettingsSync:En,retryWorkspaceCloudSync:Qa,resetWorkspaceSyncCursorAndPull:Vr,getWorkspaceSyncDiagnostics:Ts}}function dk(e,n){return typeof n=="number"&&Number.isFinite(n)&&n>0?n:e==="error"?3600:2600}function uk(){const[e,n]=a.useState(null),r=a.useRef(null),s=a.useCallback(()=>{r.current!==null&&(window.clearTimeout(r.current),r.current=null),n(null)},[]),o=a.useCallback((d,i="info",u)=>{if(!d)return;r.current!==null&&(window.clearTimeout(r.current),r.current=null),n({message:d,tone:i,ttlMs:u});const f=dk(i,u);r.current=window.setTimeout(()=>{r.current=null,n(null)},f)},[]);return a.useEffect(()=>()=>{r.current!==null&&(window.clearTimeout(r.current),r.current=null)},[]),{uiNotice:e,pushNotice:o,clearNotice:s}}function mk({storagePath:e,shouldDeferProtectedApiCalls:n,shouldBlockProtectedApiCalls:r}){const[s,o]=a.useState("antigravity"),[d,i]=a.useState([]),[u,f]=a.useState(".agent/workflows"),[k,x]=a.useState(null),[S,v]=a.useState(null),g=a.useRef(null),w=n||r;a.useEffect(()=>{const W=d.find(M=>M.id===s);W&&f(W.directory)},[s,d]);const I=a.useCallback(()=>{typeof window>"u"||(g.current!==null&&window.clearTimeout(g.current),g.current=window.setTimeout(()=>{g.current=null,v(null)},5e3))},[]),b=a.useCallback(async()=>{if(w)return;const W=await fetch("/api/taskforce/environments");if(!W.ok)return;const M=await W.json().catch(()=>({}));M.environments&&i(M.environments)},[w]),N=a.useCallback(async(W,M)=>{x("workflows"),v(null);try{const te=await(await fetch("/api/taskforce/export-resources",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:"workflows",environment:W,workflowNames:M,variables:{STORAGE_PATH:e.replace(/\/$/,"")||".Taskforce"}})})).json();te.success?v({type:"success",message:`Successfully exported ${te.count} workflows to ${W}`}):v({type:"error",message:te.error||"Export failed"})}catch{v({type:"error",message:"Network error exporting workflows"})}finally{x(null),I()}},[I,e]);return a.useEffect(()=>()=>{g.current!==null&&typeof window<"u"&&(window.clearTimeout(g.current),g.current=null)},[]),{exportEnvironment:s,setExportEnvironment:o,availableEnvironments:d,loadAvailableEnvironments:b,exportWorkflowsPath:u,setExportWorkflowsPath:f,exportingResource:k,exportResult:S,handleExportWorkflows:N}}function pk(e){const{resolveCloudAuthUrl:n,currentWorkspaceId:r,normalizedCloudAuthBaseUrl:s,normalizedCloudMcpBaseUrl:o,mergedConfig:d,availableWorkspaces:i,currentTheme:u,configLoaded:f,globalTheme:k,themeUseGlobalDefault:x,keyShortcut:S,jsonBackupEnabled:v,globalJsonBackupEnabled:g,globalWeekStartsOn:w,locale:I,supportedLocales:b,jsonBackupUseGlobalDefault:N,manualComplexityEnabled:W,checklistDropdownEnabled:M,showTaskCardStatusLabel:oe,exportWorkflowsPath:te,exportingResource:ie,exportResult:T,pathSaved:ve,settingsSection:O,exportEnvironment:J,setupState:le,buildInfo:ge,saveSetupMode:X,saveWorkspaceProfile:R,setCurrentTheme:U,handleSaveTheme:Z,handleSaveGlobalTheme:he,setKeyShortcut:Q,handleJsonBackupEnabledChange:we,handleSaveGlobalJsonBackupEnabled:ke,handleSaveGlobalWeekStartsOn:be,handleSaveLocale:me,handleManualComplexityEnabledChange:Re,handleChecklistDropdownEnabledChange:Te,handleShowTaskCardStatusLabelChange:se,handleResetProjectToGlobal:F,handleSaveSettings:D,setExportWorkflowsPath:E,setExportEnvironment:y,availableWorkflows:C,initiativeTemplates:P,availableEnvironments:j,fetchWorkflows:ae,fetchInitiativeTemplates:L,createInitiativeFromTemplate:de,fetchWorkflowTemplate:K,fetchWorkflowOverrideNames:ue,saveWorkflowTemplateDraft:B,resetWorkflowTemplateDraft:re,handleExportWorkflows:xe,setShowFolderBrowser:Ee,setBrowserTarget:ye,fetchFolders:Pe,activeCategories:vt,pathValidation:Ke,taxonomyDisplayLabels:bt,handleUpdateCategory:Ze,handleRemoveCategory:Qe,handleSaveCategory:St,handleAddPath:Me,handleRemovePath:H,handleUpdateCategoryIcon:c,handleUpdateCategoryColor:Ue,activeTypes:At,handleSaveType:Wt,handleRemoveType:Tt,handleUpdateType:It,taxonomies:Xe,handleUpdateTaxonomies:gt,priorities:ze,handleUpdatePriorities:Ye,analyzeSystemTaxonomyPack:Ve,handleApplySystemTaxonomyPack:ot,handleUpdateTaxonomyDisplayLabels:xt,projectRoot:jt,projectName:it,mcpHostRoot:q,serverHostRoot:Se,mcpScriptPath:wt,tenantId:tt,runtimeMode:_e,workspaceSwitchingEnabled:$t,deleteWorkspace:ne,setMcpHostRoot:Ce,isAuthenticated:Ie}=e,je=a.useCallback(async(ct,dt)=>{const ut=n(ct),Mt=new Headers(dt?.headers||void 0);if(ct.startsWith("/api/taskforce/settings/mcp/")){const Ft=String(r||"").trim();Ft&&Ft!=="default"&&!Mt.has("x-taskforce-workspace-id")&&Mt.set("x-taskforce-workspace-id",Ft)}const Nt={...dt,headers:Mt,credentials:dt?.credentials??"include"};if(typeof window<"u"&&/^https?:\/\//i.test(ut))try{new URL(ut,window.location.origin).origin!==window.location.origin&&Nt.mode===void 0&&(Nt.mode="cors")}catch{}return fetch(ut,Nt)},[r,n]),at=i.find(ct=>ct.id===r);return{fetchCloudAuthApi:je,currentTheme:u,configLoaded:f,globalTheme:k,themeUseGlobalDefault:x,keyShortcut:S,jsonBackupEnabled:v,globalJsonBackupEnabled:g,globalWeekStartsOn:w,locale:I,supportedLocales:b,jsonBackupUseGlobalDefault:N,manualComplexityEnabled:W,checklistDropdownEnabled:M,showTaskCardStatusLabel:oe,exportWorkflowsPath:te,exportingResource:ie,exportResult:T,pathSaved:ve,initialSection:O,exportEnvironment:J,setupState:le,buildInfo:ge,onSaveSetupMode:X,onSaveWorkspaceProfile:R,onThemeChange:U,onSaveTheme:Z,onSaveGlobalTheme:he,onKeyShortcutChange:Q,onJsonBackupEnabledChange:we,onSaveGlobalJsonBackupEnabled:ke,onSaveGlobalWeekStartsOn:be,onSaveLocale:me,onManualComplexityEnabledChange:Re,onChecklistDropdownEnabledChange:Te,onShowTaskCardStatusLabelChange:se,onResetProjectToGlobal:F,onSaveSettings:D,onExportWorkflowsPathChange:E,onExportEnvironmentChange:y,availableWorkflows:C,initiativeTemplates:P,availableEnvironments:j,onRefreshWorkflows:ae,onRefreshInitiativeTemplates:L,onCreateInitiativeFromTemplate:de,onFetchWorkflowTemplate:K,onFetchWorkflowOverrideNames:ue,onSaveWorkflowTemplateDraft:B,onResetWorkflowTemplateDraft:re,onExportWorkflows:xe,onShowFolderBrowserChange:Ee,onBrowserTargetChange:ye,onFetchFolders:Pe,categories:vt,pathValidation:Ke,taxonomyDisplayLabels:bt,onUpdateCategory:Ze,onRemoveCategory:Qe,onSaveCategory:St,onAddPath:Me,onRemovePath:H,onUpdateCategoryIcon:c,onUpdateCategoryColor:Ue,types:At,onSaveType:Wt,onRemoveType:Tt,onUpdateType:It,taxonomies:Xe,onUpdateTaxonomies:gt,priorities:ze,onUpdatePriorities:Ye,onAnalyzeSystemTaxonomyPack:Ve,onApplySystemTaxonomyPack:ot,onUpdateTaxonomyDisplayLabels:xt,projectRoot:jt,projectName:it,mcpHostRoot:q,serverHostRoot:Se,mcpScriptPath:wt,tenantId:tt,workspaceId:r,runtimeMode:_e,cloudAuthBaseUrl:s||d.cloudAuthBaseUrl,cloudMcpBaseUrl:o||void 0,workspaceSwitchingEnabled:$t,currentWorkspaceRole:at?.role||"member",currentWorkspaceName:String(at?.name||""),onDeleteWorkspace:ne,onMcpHostRootChange:Ce,isAuthenticated:Ie}}function fk(e){const{keyShortcut:n,themeUseGlobalDefault:r,runtimeMode:s,jsonBackupUseGlobalDefault:o,globalTheme:d,globalJsonBackupEnabled:i,setCurrentTheme:u,setThemeUseGlobalDefault:f,setGlobalTheme:k,setJsonBackupEnabled:x,setJsonBackupUseGlobalDefault:S,setGlobalJsonBackupEnabled:v,setGlobalWeekStartsOn:g,setLocale:w,setManualComplexityEnabled:I,setChecklistDropdownEnabled:b,setShowTaskCardStatusLabel:N,setShowChecklist:W}=e,M=a.useCallback(async()=>{try{const R=await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({shortcut:n})});if(!R.ok)throw new Error(`Failed to save global settings (${R.status})`);return!0}catch{return console.error("[Taskforce] Failed to save shortcut"),!1}},[n]),oe=a.useCallback(async R=>{u(R),f(!1);try{const U=await fetch("/api/taskforce/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({theme:R})});if(!U.ok)throw new Error(`Failed to save config (${U.status})`);return!0}catch{return console.error("[Taskforce] Failed to save project theme"),!1}},[u,f]),te=a.useCallback(async R=>{k(R),r&&u(R);try{const U=await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({theme:R})});if(!U.ok)throw new Error(`Failed to save global settings (${U.status})`);return!0}catch{return console.error("[Taskforce] Failed to save global theme"),!1}},[k,r,u]),ie=a.useCallback(async R=>{if(s==="cloud")return x(!1),S(!1),!1;x(R),S(!1);try{const U=await fetch("/api/taskforce/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonBackupEnabled:R})});if(!U.ok)throw new Error(`Failed to save config (${U.status})`);return!0}catch{return console.error("[Taskforce] Failed to save project backup setting"),!1}},[s,x,S]),T=a.useCallback(async R=>{if(s==="cloud")return v(!1),o&&x(!1),!1;v(R),o&&x(R);try{const U=await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonBackupEnabled:R})});if(!U.ok)throw new Error(`Failed to save global settings (${U.status})`);return!0}catch{return console.error("[Taskforce] Failed to save global backup setting"),!1}},[s,v,o,x]),ve=a.useCallback(async R=>{g(R);try{const U=await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({schedulePreferences:{weekStartsOn:R}})});if(!U.ok)throw new Error(`Failed to save global settings (${U.status})`);return!0}catch{return console.error("[Taskforce] Failed to save regional week start setting"),!1}},[g]),O=a.useCallback(async R=>{const U=Hf(R);return w(U),!0},[w]),J=a.useCallback(async R=>{I(R);try{const U=await fetch("/api/taskforce/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({manualComplexityEnabled:R})});if(!U.ok)throw new Error(`Failed to save config (${U.status})`);return!0}catch{return console.error("[Taskforce] Failed to save manual complexity setting"),!1}},[I]),le=a.useCallback(async R=>{b(R),R||W(!1);try{const U=await fetch("/api/taskforce/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({checklistDropdownEnabled:R})});if(!U.ok)throw new Error(`Failed to save config (${U.status})`);return!0}catch{return console.error("[Taskforce] Failed to save checklist dropdown setting"),!1}},[b,W]),ge=a.useCallback(async R=>{N(R);try{const U=await fetch("/api/taskforce/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({showTaskCardStatusLabel:R})});if(!U.ok)throw new Error(`Failed to save config (${U.status})`);return!0}catch{return console.error("[Taskforce] Failed to save task card status label setting"),!1}},[N]),X=a.useCallback(async()=>{f(!0),S(!0),u(d),x(i),I(!1),b(!0),N(!0),W(!1);try{const R=await fetch("/api/taskforce/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({theme:null,jsonBackupEnabled:null,manualComplexityEnabled:null,checklistDropdownEnabled:null,showTaskCardStatusLabel:null})});if(!R.ok)throw new Error(`Failed to save config (${R.status})`);return!0}catch{return console.error("[Taskforce] Failed to reset project settings"),!1}},[f,S,u,d,x,i,I,b,N,W]);return{handleSaveSettings:M,handleSaveTheme:oe,handleSaveGlobalTheme:te,handleJsonBackupEnabledChange:ie,handleSaveGlobalJsonBackupEnabled:T,handleSaveGlobalWeekStartsOn:ve,handleSaveLocale:O,handleManualComplexityEnabledChange:J,handleChecklistDropdownEnabledChange:le,handleShowTaskCardStatusLabelChange:ge,handleResetProjectToGlobal:X}}function hk(e){const{activeCategories:n,activeTab:r,activeTypes:s,archivedTasks:o,browserTarget:d,category:i,configLoaded:u,customCategories:f,refreshTaskCollections:k,fetchTasks:x,filterCategories:S,getCategoryPaths:v,normalizePath:g,pathValidation:w,setBrowserTarget:I,setCategory:b,setCustomCategories:N,setCustomTypes:W,setFilterCategories:M,setPathValidation:oe,setPriorities:te,setShowFolderBrowser:ie,setTaxonomies:T,tasks:ve}=e,O=a.useCallback(async(E,y)=>{const C=await E.json().catch(()=>({}));return String(C?.error||y)},[]),J=a.useCallback(()=>[...ve,...o],[o,ve]),le=a.useCallback(E=>E.priorities.find(y=>y.value===2)?.value||E.priorities[0]?.value||2,[]),ge=a.useCallback(async E=>{if(E.length!==0)try{const y=await fetch("/api/taskforce/validate-paths",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({paths:E})});if(y.ok){const C=await y.json();oe(P=>({...P,...C.results}))}}catch(y){console.error("[Taskforce] Failed to validate paths:",y)}},[oe]);a.useEffect(()=>{if(r!=="settings"||!u)return;const E=[];n.forEach(C=>{v(C).forEach(j=>{E.includes(j)||E.push(j)})});const y=E.filter(C=>!w[C]);y.length>0&&ge(y)},[n,r,u,v,w,ge]);const X=a.useCallback(async(E,y)=>{if(u){N(C=>(C.length>0?C:n).map(j=>j.value===E.value?E:j)),y&&y!==E.label&&(i===y&&b(E.label),S.includes(y)&&M(C=>C.map(P=>P===y?E.label:P)));try{const j={categories:(f.length>0?f:n).map(ae=>ae.value===E.value?E:ae)};y&&y!==E.label&&(j.reassignFrom=y,j.reassignTo=E.label),await fetch("/api/taskforce/categories",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(j)}),y&&await x()}catch(C){console.error("[Taskforce] Failed to update category",C)}}},[n,i,u,f,x,S,b,N,M]),R=a.useCallback(async E=>{if(!u)return;const y=E.trim().toLowerCase().replace(/\s+/g,"-");if(n.some(P=>P.value===y))return;const C={value:y,label:E.trim(),color:"blue-200",icon:"Folder"};N(P=>[...P.length>0?P:n,C]);try{const j=[...f.length>0?f:n,C];await fetch("/api/taskforce/categories",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({categories:j})})}catch(P){console.error("[Taskforce] Failed to create category",P)}},[n,u,f,N]),U=a.useCallback((E,y)=>{if(!y.trim())return;const C=n.find(L=>L.value===E);if(!C)return;const P=v(C),j=y.trim();if(P.includes(j))return;const ae=[...P,j];X({...C,path:void 0,paths:ae}),ge(ae)},[n,v,X,ge]),Z=a.useCallback((E,y)=>{const C=n.find(P=>P.value===E);C&&X({...C,icon:y})},[n,X]),he=a.useCallback((E,y)=>{const C=n.find(P=>P.value===E);C&&X({...C,color:y})},[n,X]),Q=a.useCallback((E,y)=>{const C=n.find(ae=>ae.value===E);if(!C)return;const j=v(C).filter(ae=>ae!==y);X({...C,path:void 0,paths:j})},[n,v,X]),we=a.useCallback(E=>{const y=g(E);if(d&&typeof d=="object"&&d.type==="category"){const C=n.find(P=>P.value===d.value);if(C){const P=v(C);if(!P.includes(y)){const j=[...P,y];X({...C,path:void 0,paths:j})}}}ie(!1),I(null)},[n,d,v,X,g,I,ie]),ke=a.useCallback(async E=>{if(!u)return;const y=_c,C=n.find(L=>L.value===y),P=C?{...C}:{value:y,label:bu,icon:"Inbox"},j=P.label,ae=n.find(L=>L.value===E);N(L=>{let K=(L.length>0?L:n).filter(ue=>ue.value!==E);return K.some(ue=>ue.value===y)||(K=[P,...K]),K}),ae&&((i===ae.label||i===ae.value)&&b(y),(S.includes(ae.label)||S.includes(ae.value))&&M(L=>{const de=L.filter(K=>K!==ae.label&&K!==ae.value);return de.includes(y)?de:[...de,y]}));try{let L=(f.length>0?f:n).filter(de=>de.value!==E);L.some(de=>de.value===y)||(L=[P,...L]),await fetch("/api/taskforce/categories",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({categories:L,reassignFrom:ae?.label||E,reassignTo:j})}),await x()}catch(L){console.error("[Taskforce] Failed to remove category",L)}},[n,i,u,f,x,S,b,N,M]),be=a.useCallback(async E=>{if(!E.trim())return;const y=E.trim().toLowerCase().replace(/\s+/g,"-");if(s.some(P=>P.value===y))return;const C=[...s,{value:y,label:E.trim(),status:"active"}];W(C);try{await fetch("/api/taskforce/types",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({types:C})})}catch(P){console.error("Failed to save type",P)}},[s,W]),me=a.useCallback(async E=>{const y=s.map(C=>C.value===E?{...C,status:"retired"}:C);W(y);try{await fetch("/api/taskforce/types",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({types:y})}),await x()}catch(C){console.error("Failed to save type",C)}},[s,x,W]),Re=a.useCallback(async(E,y)=>{const C=s.find(L=>L.value===E);if(!C)return;const P=typeof y.label=="string"?y.label.trim():C.label;if(!P)return;const j=s.map(L=>L.value===E?{...L,...y,label:P}:L);if(JSON.stringify(j)!==JSON.stringify(s)){W(j);try{await fetch("/api/taskforce/types",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({types:j})})}catch(L){console.error("Failed to update type",L)}}},[s,W]),Te=a.useCallback(async E=>{if(u){T(E);try{await fetch("/api/taskforce/taxonomies",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({taxonomies:E})})}catch(y){console.error("[Taskforce] Failed to save taxonomies",y)}}},[u,T]),se=a.useCallback(async E=>{if(u){te(E);try{await fetch("/api/taskforce/priorities",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({priorities:E})})}catch(y){console.error("[Taskforce] Failed to save priorities",y)}}},[u,te]),F=a.useCallback(E=>{const y=J(),C=new Set(E.categories.map(K=>K.value)),P=new Set(E.types.map(K=>K.value)),j=new Set(E.priorities.map(K=>Number(K.value))),ae=Array.from(new Set(y.map(K=>String(K.category||"").trim()).filter(K=>K.length>0&&!C.has(K)))).sort(),L=Array.from(new Set(y.map(K=>String(K.type||"").trim()).filter(K=>K.length>0&&!P.has(K)))).sort(),de=Array.from(new Set(y.map(K=>Number(K.priority)).filter(K=>Number.isFinite(K)&&K>0&&!j.has(K)))).sort((K,ue)=>K-ue);return{unmatchedCategoryValues:ae,unmatchedTypeValues:L,incompatiblePriorityValues:de}},[J]),D=a.useCallback(async E=>{if(!u)return{success:!1,error:"Settings are still loading."};const{pack:y,sections:C,remapExistingValuesToDefault:P,workspaceIdOverride:j}=E,ae=String(j||"").trim(),L=ae.length>0,de=L?[]:J(),K=B=>{if(!ae)return B;const re=B.includes("?")?"&":"?";return`${B}${re}workspaceId=${encodeURIComponent(ae)}`},ue=()=>{const B={"Content-Type":"application/json"};return ae&&(B["x-taskforce-workspace-id"]=ae),B};try{if(C.categories){const B=new Set(y.categories.map(Ee=>Ee.value)),re=P?[...y.categories]:[...y.categories,...n.filter(Ee=>!B.has(Ee.value)).map(Ee=>({...Ee,disabled:!0}))];L||N(re);const xe=await fetch(K("/api/taskforce/categories"),{method:"POST",headers:ue(),body:JSON.stringify({categories:re})});if(!xe.ok)return{success:!1,error:await O(xe,"Failed to apply category library pack.")}}if(C.types){const B=new Set(y.types.map(ye=>ye.value)),re=y.types.find(ye=>ye.value===wr)?.value||y.types[0]?.value||wr;if(P){const ye=de.filter(Pe=>Pe.type&&!B.has(String(Pe.type))).map(Pe=>({id:Pe.id,type:re}));if(ye.length>0){const Pe=await fetch(K("/api/taskforce/bulk-update-fields"),{method:"POST",headers:ue(),body:JSON.stringify({updates:ye})});if(!Pe.ok)return{success:!1,error:await O(Pe,"Failed to remap task types to the pack default.")}}}const xe=P?[...y.types]:[...y.types,...s.filter(ye=>!B.has(ye.value)).map(ye=>({...ye,status:"retired"}))];L||W(xe);const Ee=await fetch(K("/api/taskforce/types"),{method:"POST",headers:ue(),body:JSON.stringify({types:xe})});if(!Ee.ok)return{success:!1,error:await O(Ee,"Failed to apply task type library pack.")}}if(C.priorities){const B=new Set(y.priorities.map(ye=>ye.value)),re=Array.from(new Set(de.map(ye=>Number(ye.priority)).filter(ye=>Number.isFinite(ye)&&ye>0&&!B.has(ye)))).sort((ye,Pe)=>ye-Pe);if(re.length>0&&!P)return{success:!1,error:`This workspace still uses priority levels ${re.join(", ")}. Enable "Remap unmatched existing values to default" to replace them before applying this pack.`};if(re.length>0){const ye=le(y),Pe=de.filter(vt=>re.includes(Number(vt.priority))).map(vt=>({id:vt.id,priority:ye}));if(Pe.length>0){const vt=await fetch(K("/api/taskforce/bulk-update-fields"),{method:"POST",headers:ue(),body:JSON.stringify({updates:Pe})});if(!vt.ok)return{success:!1,error:await O(vt,"Failed to remap task priorities to the pack default.")}}}const xe=y.priorities.map(ye=>({...ye,value:Number(ye.value)}));L||te(xe);const Ee=await fetch(K("/api/taskforce/priorities"),{method:"POST",headers:ue(),body:JSON.stringify({priorities:xe})});if(!Ee.ok)return{success:!1,error:await O(Ee,"Failed to apply priority library pack.")}}return L||await k({isSilent:!0}),{success:!0}}catch(B){return console.error("[Taskforce] Failed to apply system taxonomy pack",B),{success:!1,error:B instanceof Error?B.message:"Failed to apply system taxonomy pack."}}},[n,s,u,J,le,O,k,N,W,te]);return{getCategoryPaths:v,validatePaths:ge,handleUpdateCategory:X,handleSaveCategory:R,handleAddPath:U,handleUpdateCategoryIcon:Z,handleUpdateCategoryColor:he,handleRemovePath:Q,handleSelectPath:we,handleRemoveCategory:ke,handleSaveType:be,handleRemoveType:me,handleUpdateType:Re,handleUpdateTaxonomies:Te,handleUpdatePriorities:se,analyzeSystemTaxonomyPack:F,handleApplySystemTaxonomyPack:D}}function gk({shouldDeferProtectedApiCalls:e,shouldBlockProtectedApiCalls:n}){const[r,s]=a.useState([]),[o,d]=a.useState([]),i=e||n,u=a.useCallback(async()=>{if(!i)try{const g=await fetch("/api/taskforce/workflow-templates");if(g.ok){const w=await g.json();s(w.templates||[])}}catch{}},[i]),f=a.useCallback(async()=>{if(i)return[];try{const g=await fetch("/api/taskforce/initiative-templates");if(!g.ok)return[];const w=await g.json(),I=Array.isArray(w?.templates)?w.templates:[];return d(I),I}catch{return[]}},[i]),k=a.useCallback(async g=>{if(!g||i)return null;const w=[`/api/taskforce/workflow-template/${encodeURIComponent(g)}`,`/api/taskforce/workflow-templates/${encodeURIComponent(g)}`];try{for(const I of w){const b=await fetch(I);if(!b.ok)continue;const N=await b.json();if(N?.template)return N.template}return null}catch{return null}},[i]),x=a.useCallback(async()=>{if(i)return[];try{const g=await fetch("/api/taskforce/workflow-editor/overrides");if(!g.ok)return[];const w=await g.json();return Array.isArray(w?.names)?w.names:[]}catch{return[]}},[i]),S=a.useCallback(async(g,w)=>{try{const I=await fetch("/api/taskforce/workflow-editor/save",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:g,draft:w})}),b=await I.json().catch(()=>({}));return!I.ok||!b.success?{success:!1,error:b.error||`Save failed (${I.status})`}:(u(),{success:!0})}catch(I){return{success:!1,error:I.message}}},[u]),v=a.useCallback(async g=>{try{const w=await fetch(`/api/taskforce/workflow-editor/reset/${encodeURIComponent(g)}`,{method:"POST"}),I=await w.json().catch(()=>({}));return!w.ok||!I.success?{success:!1,error:I.error||`Reset failed (${w.status})`}:(u(),{success:!0})}catch(w){return{success:!1,error:w.message}}},[u]);return{availableWorkflows:r,initiativeTemplates:o,fetchWorkflows:u,fetchInitiativeTemplates:f,fetchWorkflowTemplate:k,fetchWorkflowOverrideNames:x,saveWorkflowTemplateDraft:S,resetWorkflowTemplateDraft:v}}function yk(){const[e,n]=a.useState(!1),r=a.useCallback(async()=>{if(!document.fullscreenElement){try{await document.documentElement.requestFullscreen(),n(!0)}catch(s){console.error(`Error attempting to enable full-screen mode: ${s}`)}return}document.exitFullscreen&&(await document.exitFullscreen(),n(!1))},[]);return a.useEffect(()=>{const s=()=>{n(!!document.fullscreenElement)};return document.addEventListener("fullscreenchange",s),()=>document.removeEventListener("fullscreenchange",s)},[]),{zenMode:e,setZenModeState:n,toggleZenMode:r}}async function vk(e,n,r){if(e.current){n.current=!0;return}e.current=!0;try{do n.current=!1,await r();while(n.current)}finally{e.current=!1}}function kk({tasks:e,archivedTasks:n,setTasks:r,setArchivedTasks:s,setLoadingTasks:o,getCurrentWorkspaceId:d,workspaceResetKey:i,shouldDeferProtectedApiCalls:u,shouldBlockProtectedApiCalls:f,handleUnauthorized:k,authRequiredForApi:x}){const S=a.useRef(new Map),v=a.useRef(!1),g=a.useRef([]),w=a.useRef([]),I=a.useRef(!1),b=a.useRef(!1),N=a.useRef(null),W=a.useRef(null);a.useEffect(()=>{g.current=e},[e]),a.useEffect(()=>{w.current=n},[n]);const M=a.useCallback(R=>`${R.updatedAt||R.createdAt||""}|${R.status}|${R.priority}|${R.title}`,[]),oe=a.useCallback((R,U)=>U.aborted?R===U.reason?!0:R instanceof DOMException?R.name==="AbortError":String(R?.name||"").toLowerCase()==="aborterror":!1,[]),[te,ie]=a.useState([]),T=a.useRef(new Map),ve=a.useCallback(R=>{!R.length||typeof window>"u"||(ie(U=>Array.from(new Set([...U,...R]))),R.forEach(U=>{const Z=T.current.get(U);Z&&window.clearTimeout(Z);const he=window.setTimeout(()=>{T.current.delete(U),ie(Q=>Q.filter(we=>we!==U))},4e3);T.current.set(U,he)}))},[]);a.useEffect(()=>()=>{typeof window>"u"||(T.current.forEach(R=>window.clearTimeout(R)),T.current.clear())},[]),a.useEffect(()=>{S.current=new Map,v.current=!1,I.current=!1,b.current=!1,N.current?.abort("workspace-reset"),N.current=null,W.current?.abort("workspace-reset"),W.current=null,typeof window<"u"&&(T.current.forEach(R=>window.clearTimeout(R)),T.current.clear()),ie([])},[i]);const O=a.useCallback(async(R=!1,U)=>{if(!(U?.ignoreAuthGuard===!0)&&(u||f))return;R||o(!0);const he=String(d()||"").trim();N.current?.abort("superseded");const Q=new AbortController;N.current=Q;try{const we=await fetch("/api/taskforce/tasks",{signal:Q.signal});if(we.status===401){k(),r([]),R||o(!1);return}if(we.ok){const be=((await we.json()).tasks||[]).map(se=>to(se));if(String(d()||"").trim()!==he)return;const Re=new Map,Te=[];for(const se of be){const F=M(se);if(Re.set(se.id,F),!v.current)continue;const D=S.current.get(se.id);(!D||D!==F)&&Te.push(se.id)}S.current=Re,v.current?ve(Te):v.current=!0,r(be)}}catch(we){if(oe(we,Q.signal))return;console.error("[Taskforce] Failed to fetch tasks:",we)}finally{const we=N.current===Q;we&&(N.current=null),!R&&we&&o(!1)}},[M,d,ve,k,r,o,x,u,f]),J=a.useCallback(async(R=!1,U)=>{if(!(U?.ignoreAuthGuard===!0)&&(u||f))return;const he=String(d()||"").trim();W.current?.abort("superseded");const Q=new AbortController;W.current=Q;try{const we=await fetch("/api/taskforce/archive",{signal:Q.signal});if(we.ok){const ke=await we.json();if(String(d()||"").trim()!==he)return;const me=(ke.archived||[]).map(Re=>({...to(Re),isArchived:!0}));s(me)}}catch(we){if(oe(we,Q.signal))return;console.error("[Taskforce] Failed to fetch archive:",we)}finally{W.current===Q&&(W.current=null)}},[d,oe,s,u,f]),le=a.useCallback(async R=>{const U=R?.isSilent!==!1,Z=R?.ignoreAuthGuard===!0;await Promise.all([O(U,{ignoreAuthGuard:Z}),J(U,{ignoreAuthGuard:Z})])},[J,O]),ge=a.useCallback(async()=>{await vk(I,b,async()=>{await le({isSilent:!0})})},[le]),X=a.useCallback(R=>{const U=by(R,g.current,w.current);g.current=U.tasks,w.current=U.archivedTasks,r(U.tasks),s(U.archivedTasks)},[r,s]);return{tasksRef:g,archivedTasksRef:w,recentlyChangedTaskIds:te,markRecentlyChangedTasks:ve,fetchTasks:O,fetchArchive:J,refreshTaskCollections:le,refreshTaskCollectionsFromInvalidation:ge,mergeTaskFromServer:X,getTaskRevisionKey:M}}function Sk(e){const{editingTaskId:n,relationshipTasks:r,initiatives:s=[],workstreams:o=[],supplementalTasks:d=[],setComments:i}=e,u=a.useMemo(()=>{if(d.length===0)return r;const S=new Map;return r.forEach(v=>S.set(v.id,v)),d.forEach(v=>S.set(v.id,v)),Array.from(S.values())},[r,d]),f=a.useMemo(()=>{if(n)return u.find(S=>S.id===n)},[u,n]);a.useEffect(()=>{n&&i(f?.comments||[])},[n,f?.id,f?.updatedAt,f?.comments,i]);const k=a.useMemo(()=>{if(f?.workstreamId)return o.find(S=>S.id===f.workstreamId)},[f,o]),x=a.useMemo(()=>{if(k?.initiativeId)return s.find(S=>S.id===k.initiativeId)},[k,s]);return{currentTask:f,currentTaskWorkstream:k,currentTaskInitiative:x}}const ep="WS-",tp="IN-";function Xs(e){return Ic(ep,e)}function ih(e){return Hm(ep,e)}function fu(e){return Yl(ep,e)}function os(e){return Ic(tp,e)}function wk(e){return Hm(tp,e)}function ch(e){return Yl(tp,e)}function fm(e,n){const r=String(n||"").trim();if(!r)return null;const s=wk(r);return e.find(o=>o.id===r||os(o)===r||s!==null&&o.referenceNumber===s)||null}function bk(e){const n={};return e.forEach(r=>{const s=r.defaultValue;if(s!=null){if(Array.isArray(s)){s.length>0&&(n[r.id]=s.map(o=>typeof o=="number"?o:String(o)));return}n[r.id]=typeof s=="number"?s:String(s)}}),n}function xk(e,n){return e.filter(r=>{const s=n[r.id],o=Array.isArray(s)?s.length>0:s!=null&&s!=="";return r.status==="retired"&&!o?!1:r.formEnabled!==!1||r.isRequired===!0||o})}function _k(e){const{activeCategories:n,activeTypes:r,activeTab:s,attachments:o,checklistItems:d,comments:i,description:u,editingTaskId:f,flushPendingAutoSave:k,getPreferredCategoryValue:x,lastUsedCategory:S,newCommentText:v,relationshipTasks:g,workstreams:w,showArchive:I,taxonomies:b,setActiveTab:N,setApproach:W,setAssignee:M,setAttachments:oe,setAttachmentsDirty:te,setCategory:ie,setChecklistItems:T,setComments:ve,setComplexity:O,setDescription:J,setDueDate:le,setEditingTaskId:ge,setError:X,setFormTaxonomies:R,setIsOpen:U,setNewCommentText:Z,setPendingNavigation:he,setWorkstreamInput:Q,setPriority:we,setScheduledDate:ke,setShowArchive:be,setStatus:me,setTaskReturnTrail:Re,setTitle:Te,setType:se,setUnsavedModalOpen:F,taskReturnTrail:D,title:E}=e,y=a.useCallback(()=>r.find(re=>String(re.value||"").trim().length>0)?.value||wr,[r]),C=a.useCallback(re=>{if(f){k(),re();return}if(!(E.trim()!==""||u.trim()!==""||d.length>0||v.trim()!==""||i.length>0||o.length>0)){re();return}he(()=>re),F(!0)},[o,i.length,u,f,k,d,v,he,F,E]),P=a.useCallback(()=>{U(!1)},[U]),j=a.useCallback(()=>{ge(null),Te(""),J("");const re=S,xe=n.some(Ee=>Ee.label===re||Ee.value===re);if(re&&xe){const Ee=n.find(ye=>ye.label===re||ye.value===re);ie(Ee?.value||re)}else ie(x(n));se(y()),we(2),O(3),me("task"),W("default"),M("unassigned"),ke(""),le(""),Q(""),T([]),R(bk(b)),ve([]),Z(""),oe([]),te(!1),X("")},[n,x,y,S,W,M,oe,te,ie,T,ve,O,J,le,ge,X,R,Z,we,ke,me,Te,se,b]),ae=a.useCallback(re=>{const xe=re.trim();if(!xe)return null;const Ee=Wf(xe);if(Ee){const vt=g.find(Ke=>Ke.referenceNumber===Ee);if(vt)return vt}const ye=g.find(vt=>vt.id===xe);if(ye)return ye;const Pe=g.find(vt=>Cs(vt)===xe);return Pe||null},[g]),L=a.useCallback(re=>{const xe=re.trim();if(!xe)return null;const Ee=xe.toLowerCase(),ye=ih(xe);if(ye){const Ke=w.find(bt=>bt.referenceNumber===ye);if(Ke)return Ke}const Pe=w.find(Ke=>Ke.id===xe);if(Pe)return Pe;const vt=w.find(Ke=>Ke.title.trim().toLowerCase()===Ee);return vt||null},[w]),de=a.useCallback((re,xe)=>{xe?.preserveReturnTrail||Re([]),ge(re.id),Te(re.title),J(re.description||""),ie(re.category||x(n)),se(re.type||y()),we(typeof re.priority=="number"?re.priority:2),O(typeof re.complexity=="number"?re.complexity:3),me(re.status||"task"),W(re.approach||"default"),M(re.assignee||"unassigned"),ke(re.scheduledDate||""),le(re.dueDate||"");const Ee=re.workstreamId&&w.find(ye=>ye.id===re.workstreamId)||null;Q(Ee?Xs(Ee)||Ee.id:""),T(re.checklistItems||[]),ve(re.comments||[]),R(re.taxonomies||{}),re.taxonomies?.approach&&W(re.taxonomies.approach),oe(re.attachments||[]),te(!1),N("add")},[n,x,y,N,W,M,oe,te,ie,T,ve,O,J,le,ge,R,we,ke,me,Re,Te,se,w]),K=a.useCallback(re=>{const xe=g.find(Ee=>Ee.id===re);xe&&(s==="add"&&f&&f!==xe.id&&Re(Ee=>Ee[Ee.length-1]===f?Ee:[...Ee,f]),xe.isArchived&&!I&&be(!0),de(xe,{preserveReturnTrail:!0}))},[s,f,de,g,be,Re,I]),ue=a.useCallback(()=>{if(s!=="add"||!f||D.length===0)return!1;const re=[...D];for(;re.length>0;){const xe=re.pop();if(!xe)continue;const Ee=g.find(ye=>ye.id===xe);if(Ee)return Ee.isArchived&&!I&&be(!0),Re(re),de(Ee,{preserveReturnTrail:!0}),!0}return Re([]),!1},[s,f,de,g,be,Re,I,D]),B=a.useCallback(()=>{Re([])},[Re]);return{handleNavigation:C,handleClose:P,resetForm:j,resolveTaskIdInput:ae,resolveWorkstreamIdInput:L,handleEdit:de,handleOpenTaskById:K,returnToPreviousTask:ue,clearReturnToParentTask:B}}function Ck(e){return e.map(n=>({...n}))}function Ak(e){return e.map(n=>({...n}))}function Tk(e){return e.map(n=>({...n}))}const Ik={id:"software-development",label:"Software Development",description:"A software-oriented starter pack with developer-focused work types and a 4-level priority scale.",categories:[{value:"default",label:"General",icon:"Inbox"},{value:"product",label:"Product",icon:"Layers",color:"blue-500"},{value:"ui-ux",label:"UI/UX",icon:"Palette",color:"violet-500"},{value:"backend",label:"Backend",icon:"Server",color:"emerald-500"}],types:[{value:"feature",label:"Feature",icon:"Star",color:"teal-500",status:"active"},{value:"bug",label:"Bug",icon:"Bug",color:"red-500",status:"active"},{value:"chore",label:"Chore",icon:"Zap",color:"amber-500",status:"active"},{value:"refactor",label:"Refactor",icon:"Code",color:"blue-500",status:"active"},{value:"documentation",label:"Docs",icon:"Book",color:"sky-500",status:"active"}],priorities:[{value:1,label:"Low",color:"amber-200",icon:"ArrowDown"},{value:2,label:"Medium",color:"yellow-500",icon:"Minus"},{value:3,label:"High",color:"orange-500",icon:"ArrowUp"},{value:4,label:"Critical",color:"red-500",icon:"AlertTriangle"}]},Nk=[{id:"general",label:"General",description:"A neutral starter pack for broad project and AI collaboration workflows.",isDefaultStarter:!0,categories:[{value:_c,label:bu,icon:"Inbox"}],types:[{value:"task",label:"Task",icon:"CheckSquare",color:"blue-500",status:"active"},{value:"deliverable",label:"Deliverable",icon:"Package",color:"teal-500",status:"active"},{value:"issue",label:"Issue",icon:"AlertCircle",color:"red-500",status:"active"},{value:"idea",label:"Idea",icon:"Lightbulb",color:"amber-500",status:"active"},{value:"review",label:"Review",icon:"Search",color:"violet-500",status:"active"}],priorities:[{value:1,label:"Low",color:"teal-500",icon:"ArrowDown"},{value:2,label:"Medium",color:"blue-500",icon:"Minus"},{value:3,label:"High",color:"amber-500",icon:"ArrowUp"}]},Ik];function lh(){return Nk.map(e=>({...e,categories:Ck(e.categories),types:Ak(e.types),priorities:Tk(e.priorities)}))}const wc=[{value:"task",label:"To Do",shortLabel:"To Do",icon:"Square",color:"blue-200"},{value:"on-hold",label:"Blocked",shortLabel:"Blocked",icon:"Pause",color:"amber-500"},{value:"in-progress",label:"Working",shortLabel:"Working",icon:"Play",color:"blue-500"},{value:"review",label:"Review",shortLabel:"Review",icon:"ScanSearch",color:"violet-500"},{value:"done",label:"Done",shortLabel:"Done",icon:"SquareCheck",color:"green-500"},{value:"cancelled",label:"Cancelled",shortLabel:"Cancelled",icon:"Ban",color:"red-500"}],Qs=wc.map(({value:e,label:n,icon:r,color:s})=>({value:e,label:n,icon:r,color:s}));function $l(e){const n=String(e||"task").trim().toLowerCase();return n==="completed"?wc.find(r=>r.value==="done")||wc[0]:wc.find(r=>r.value===n)||wc[0]}const dh=["Folder","Code","FileText","Terminal","Database","Cpu","Globe","Layout","Server","Search","Settings","Zap","Shield","Star","Layers","Bug","Box","Book","MessageSquare","Image","Music","Video","Map","Mail","Camera","Heart","Anchor","Rocket","Target","Flag","Bookmark","Briefcase","Puzzle","SquareUserRound","Users","User","Unplug","Clock","Lock","Pencil","TrafficCone","CircleDollarSign","Activity","Wrench","Microscope","Palette","Webhook","FlaskConical","Bot","Cloud","Kanban","Infinity","Monitor","Smartphone","History","Brain","Calendar","Play","Pause","Sparkles","Check","Ban","Circle","CheckCircle","Wind","Github","Square","SquareCheck","CheckSquare","Package","AlertCircle","Lightbulb","ScanSearch","Inbox","HelpCircle","Gauge","FileCode","ArrowDown","Minus","ArrowUp","AlertTriangle","CircleQuestionMark","TriangleAlert"],Pi=dh.reduce((e,n)=>(e[n]=Hr[n]||ji,e),{}),SL=dh,hu=Object.fromEntries(lh().flatMap(e=>e.types).filter(e=>e.icon&&e.color).reduce((e,n)=>(e.some(([r])=>r===n.value)||e.push([n.value,{icon:n.icon,color:n.color}]),e),[])),jk={PDF:"red-500",DOC:"blue-500",DOCX:"blue-500",CSV:"teal-500",JSON:"amber-500",TXT:"violet-200",MD:"violet-200"},zp={"red-200":"#eb7a7a","orange-200":"#eba87a","amber-200":"#ebc17a","yellow-200":"#ebd07a","green-200":"#7aeba4","teal-200":"#7aebdf","sky-200":"#7ac8eb","blue-200":"#7aa5eb","indigo-200":"#7a7ceb","violet-200":"#9c7aeb","red-500":"#e42525","orange-500":"#e47325","amber-500":"#e49d25","yellow-500":"#e4b625","green-500":"#25e46b","teal-500":"#25e4cf","sky-500":"#25a9e4","blue-500":"#256ee4","indigo-500":"#2529e4","violet-500":"#5f25e4","red-700":"#951818","orange-700":"#954b18","amber-700":"#956718","yellow-700":"#957718","green-700":"#189546","teal-700":"#189587","sky-700":"#186e95","blue-700":"#184895","indigo-700":"#181b95","violet-700":"#3e1895"},wL=["red-200","orange-200","amber-200","yellow-200","green-200","teal-200","sky-200","blue-200","indigo-200","violet-200","red-500","orange-500","amber-500","yellow-500","green-500","teal-500","sky-500","blue-500","indigo-500","violet-500","red-700","orange-700","amber-700","yellow-700","green-700","teal-700","sky-700","blue-700","indigo-700","violet-700"];function da(e){if(e)return zp[e]?zp[e]:e}function Rk(e){const n=String(e||"").trim().toLowerCase();return da(hu[n]?.color)||da("violet-200")||"#9c7aeb"}function bL(e){switch(Number(e)){case 1:return"var(--text-muted)";case 2:return"var(--text-secondary)";case 3:return"var(--priority-high)";case 4:return"var(--priority-critical)";default:return"var(--text-secondary)"}}function Dk(e){const n=String(e||"").trim().toUpperCase();return da(jk[n])||"var(--text-muted)"}function Ek(e,n){const r=e.taxonomies?.[n];return r==null||r===""?!1:Array.isArray(r)?r.some(s=>String(s).trim().length>0):String(r).trim().length>0}function Jl(e,n){const r=e.filter(o=>o.status!=="retired"),s=e.filter(o=>o.status==="retired"&&n.some(d=>Ek(d,o.id)));return[...r,...s.filter(o=>!r.some(d=>d.id===o.id))]}function uh(e,n=[]){return Jl(e,n).filter(r=>r.sortEnabled===!0).map(r=>({value:`taxonomy:${r.id}`,label:r.status==="retired"?`${r.label} (Retired)`:r.label}))}function Hp(e,n){const r=e.taxonomies?.[n.id];if(r==null||r==="")return null;const s=Array.isArray(r)?r.map(o=>String(o)):[String(r)];for(let o=0;o<n.options.length;o+=1)if(s.includes(String(n.options[o]?.value)))return o;return null}function _i(e,n){return new Date(n.createdAt).getTime()-new Date(e.createdAt).getTime()}function gu(e,n,r,s,o=[]){let d=0;if(r==="created")return d=_i(e,n),s==="desc"?d:-d;if(r==="updated"){const i=e.updatedAt||e.createdAt,u=n.updatedAt||n.createdAt;return d=new Date(u).getTime()-new Date(i).getTime(),s==="desc"?d:-d}if(r==="priority"){const i=du(e.priority),u=du(n.priority);return d=i!==u?u-i:_i(e,n),s==="desc"?d:-d}if(r==="complexity"){const i=typeof e.complexity=="number"?e.complexity:3,u=typeof n.complexity=="number"?n.complexity:3;return d=i!==u?u-i:_i(e,n),s==="desc"?d:-d}if(r.startsWith("taxonomy:")){const i=r.slice(9),u=o.find(x=>x.id===i);if(!u)return d=_i(e,n),s==="desc"?d:-d;const f=Hp(e,u),k=Hp(n,u);return f===null&&k===null?_i(e,n):f===null?1:k===null?-1:f!==k?s==="desc"?k-f:f-k:_i(e,n)}return d=_i(e,n),s==="desc"?d:-d}function Pk(e,n,r){const s=e.taxonomies?.[n];return s==null||s===""?!1:Array.isArray(s)?s.some(o=>String(o)===String(r)):String(s)===String(r)}function np(e,n){const r=e.options.filter(o=>o.status!=="retired"),s=e.options.filter(o=>o.status==="retired"&&n.some(d=>Pk(d,e.id,o.value)));return[...r,...s.filter(o=>!r.some(d=>String(d.value)===String(o.value)))]}function Mk({tasks:e,archivedTasks:n,activeCategories:r,activeTypes:s,priorities:o,taxonomies:d,configLoaded:i,referenceDataLoaded:u,assigneeOptionsLoaded:f,assigneeOptions:k}){const x=a.useMemo(()=>Yf(k),[k]),S=a.useMemo(()=>Jl(d,[...e,...n]).filter(L=>L.filterEnabled!==!1).map(L=>({...L,options:np(L,[...e,...n])})),[n,e,d]),v=a.useMemo(()=>x.map(L=>L.value),[x]),[g,w]=a.useState(""),[I,b]=a.useState([]),[N,W]=a.useState([]),[M,oe]=a.useState([]),[te,ie]=a.useState(!1),[T,ve]=a.useState(Qs.map(L=>L.value)),[O,J]=a.useState(v),[le,ge]=a.useState(!0),[X,R]=a.useState({}),[U,Z]=a.useState("created"),[he,Q]=a.useState("desc"),we=a.useCallback(()=>{Q(L=>L==="asc"?"desc":"asc")},[]),[ke,be]=a.useState("category"),[me,Re]=a.useState("show"),[Te,se]=a.useState({}),F=a.useCallback((L,de)=>de.length===0?!0:de.every(K=>L.includes(K)),[]),D=a.useCallback((L,de)=>L.length===de.length&&L.every((K,ue)=>K===de[ue]),[]);a.useEffect(()=>{ke==="approach"&&be("status")},[ke]),a.useEffect(()=>{if(!(!i||!u)&&f&&!te&&r.length>0&&s.length>0&&o.length>0){b(r.map(de=>de.value)),W(o.map(de=>de.value)),oe(s.map(de=>de.value)),J(v),ge(!0);const L={};S.forEach(de=>{L[de.id]=de.options.map(K=>K.value)}),R(L),ie(!0)}},[i,u,f,r,s,o,S,te,v]),a.useEffect(()=>{if(!te||!f)return;const L=new Set(v),de=O.filter(B=>L.has(B)),K=le?v:de.length>0||O.length===0?de:v;(K.length!==O.length||K.some((B,re)=>B!==O[re]))&&J(K)},[v,O,le,te,f]),a.useEffect(()=>{if(!te||!f)return;const L=O.filter(K=>v.includes(K)),de=v.length>0&&v.every(K=>L.includes(K));de!==le&&ge(de)},[v,O,le,te,f]),a.useEffect(()=>{if(!i||!u||!te||r.length===0)return;const L=_y(I,r);(L.length!==I.length||L.some((K,ue)=>K!==I[ue]))&&b(L)},[i,u,r,te,I]),a.useEffect(()=>{if(!i||!u||!te||o.length===0||N.length===0)return;const L=xy(N,o),de=Array.from(new Set(N.map(ue=>Number(ue)).filter(ue=>Number.isFinite(ue))));(L.length!==de.length||L.some((ue,B)=>ue!==de[B]))&&W(L)},[i,u,te,o,N]),a.useEffect(()=>{if(!i||!u||!te||s.length===0)return;const L=new Set(s.map(ue=>ue.value)),de=M.filter(ue=>L.has(ue)),K=de.length>0||M.length===0?de:s.map(ue=>ue.value);D(K,M)||oe(K)},[s,i,M,te,D,u]),a.useEffect(()=>{if(!i||!u||!te)return;const L={};S.forEach(re=>{const xe=re.options.map(Pe=>Pe.value);if(xe.length===0)return;const Ee=Array.isArray(X[re.id])?X[re.id]:[],ye=Ee.filter(Pe=>xe.includes(Pe));L[re.id]=ye.length>0||Ee.length===0?ye:xe});const de=Object.keys(X).sort(),K=Object.keys(L).sort(),ue=de.length!==K.length||de.some((re,xe)=>re!==K[xe]),B=K.some(re=>!D(X[re]||[],L[re]||[]));(ue||B)&&R(L)},[i,X,S,te,D,u]);const E=a.useCallback(()=>{w(""),b(r.map(de=>de.value)),W(o.map(de=>de.value)),oe(s.map(de=>de.value)),ve(Qs.map(de=>de.value)),J(v),ge(!0);const L={};S.forEach(de=>{L[de.id]=de.options.map(K=>K.value)}),R(L),Z("created"),Q("desc")},[r,o,s,S,v]),y=a.useCallback(L=>{J(de=>{const K=typeof L=="function"?L(de):L,ue=Array.from(new Set(K.filter(re=>typeof re=="string"&&re.trim().length>0))),B=v.length>0&&v.every(re=>ue.includes(re));return ge(B),ue})},[v]),C=a.useMemo(()=>{const L=F(I,r.map(B=>B.value)),de=F(M,s.map(B=>B.value)),K=F(Array.from(new Set(N.map(B=>Number(B)).filter(B=>Number.isFinite(B)))),o.map(B=>Number(B.value)).filter(B=>Number.isFinite(B))),ue=F(T,Qs.map(B=>B.value));return e.filter(B=>{const re=Cs(B).toLowerCase(),xe=B.title.toLowerCase().includes(g.toLowerCase())||(B.description?.toLowerCase()||"").includes(g.toLowerCase())||B.id.toLowerCase().includes(g.toLowerCase())||re.includes(g.toLowerCase()),Ee=!te||L||I.includes(B.category),ye=!te||K||im(B.priority,N),Pe=!te||de||M.includes(B.type||wr),vt=!te||ue||T.includes(B.status),Ke=!te||le||O.includes(B.assignee||"unassigned"),bt=Object.entries(X).every(([Ze,Qe])=>{const St=S.find(c=>c.id===Ze);if(!St)return!0;const Me=St?.options.every(c=>Qe.includes(c.value))??!0;if(Me)return!0;const H=B.taxonomies?.[Ze];return H?Array.isArray(H)?H.some(c=>Qe.includes(c)):Qe.includes(H):Me||Qe.includes("")});return xe&&Ee&&ye&&Pe&&vt&&Ke&&bt}).sort((B,re)=>gu(B,re,U,he,d))},[e,n,g,I,N,M,T,O,le,X,U,he,te,S,r,s,o,F,d]),P=a.useMemo(()=>{const L=F(I,r.map(B=>B.value)),de=F(M,s.map(B=>B.value)),K=F(Array.from(new Set(N.map(B=>Number(B)).filter(B=>Number.isFinite(B)))),o.map(B=>Number(B.value)).filter(B=>Number.isFinite(B))),ue=F(T,Qs.map(B=>B.value));return e.filter(B=>{const re=!te||L||I.includes(B.category),xe=!te||K||im(B.priority,N),Ee=!te||de||M.includes(B.type||wr),ye=!te||ue||T.includes(B.status),Pe=!te||le||O.includes(B.assignee||"unassigned"),vt=Object.entries(X).every(([Ke,bt])=>{const Ze=S.find(Me=>Me.id===Ke);if(!Ze)return!0;const Qe=Ze?.options.every(Me=>bt.includes(Me.value))??!0;if(Qe)return!0;const St=B.taxonomies?.[Ke];return St?Array.isArray(St)?St.some(Me=>bt.includes(Me)):bt.includes(St):Qe||bt.includes("")});return re&&xe&&Ee&&ye&&Pe&&vt})},[e,n,I,N,M,T,O,le,X,te,S,r,s,o,F]),j=a.useMemo(()=>{const L=r.every(ue=>I.includes(ue.value)),de=F(M,s.map(ue=>ue.value)),K=F(Array.from(new Set(N.map(ue=>Number(ue)).filter(ue=>Number.isFinite(ue)))),o.map(ue=>Number(ue.value)).filter(ue=>Number.isFinite(ue)));return n.filter(ue=>{const B=Cs(ue).toLowerCase(),re=ue.title.toLowerCase().includes(g.toLowerCase())||(ue.description?.toLowerCase()||"").includes(g.toLowerCase())||ue.id.toLowerCase().includes(g.toLowerCase())||B.includes(g.toLowerCase()),xe=!te||L||I.includes(ue.category),Ee=!te||K||im(ue.priority,N),ye=!te||de||M.includes(ue.type||wr),Pe=!te||le||O.includes(ue.assignee||"unassigned"),vt=Object.entries(X).every(([Ke,bt])=>{const Ze=S.find(Me=>Me.id===Ke);if(!Ze)return!0;const Qe=Ze?.options.every(Me=>bt.includes(Me.value))??!0;if(Qe)return!0;const St=ue.taxonomies?.[Ke];return St?Array.isArray(St)?St.some(Me=>bt.includes(Me)):bt.includes(St):Qe||bt.includes("")});return re&&xe&&Ee&&ye&&Pe&&vt}).sort((ue,B)=>gu(ue,B,U,he,d))},[n,g,I,N,M,O,le,X,U,he,te,r,s,o,S,F,d]),ae=a.useMemo(()=>{const L={};return C.forEach(de=>{const K=r.find(B=>B.value===de.category),ue=K?K.label:de.category||"General";L[ue]||(L[ue]=[]),L[ue].push(de)}),L},[C,r]);return{searchQuery:g,setSearchQuery:w,filterCategories:I,setFilterCategories:b,filterPriorities:N,setFilterPriorities:W,filterTypes:M,setFilterTypes:oe,filterStatus:T,setFilterStatus:ve,filterAssignees:O,setFilterAssignees:y,filterAssigneesAllSelected:le,setFilterAssigneesAllSelected:ge,filterTaxonomies:X,setFilterTaxonomies:R,hasInitedFilters:te,setHasInitedFilters:ie,sortBy:U,setSortBy:Z,sortOrder:he,setSortOrder:Q,toggleSortOrder:we,groupBy:ke,setGroupBy:be,emptyColumnMode:me,setEmptyColumnMode:Re,collapsedCategories:Te,setCollapsedCategories:se,clearFilters:E,filteredTasks:C,searchAgnosticTasks:P,filteredArchive:j,groupedTasks:ae}}const Lk=Mk;function Bk(e){const{activeCategories:n,activeTab:r,apiEndpoint:s,approach:o,assignee:d,attachments:i,attachmentsDirty:u,category:f,checklistItems:k,comments:x,complexity:S,description:v,dueDate:g,editingTaskId:w,fetchTasks:I,formTaxonomies:b,getPreferredCategoryValue:N,mergeTaskFromServer:W,workstreamInput:M,priority:oe,pushNotice:te,queueWorkspaceSyncFromAuthoritativeTaskState:ie,relationshipTasks:T,resetForm:ve,resolveWorkstreamIdInput:O,scheduledDate:J,setActiveTab:le,setAttachmentsDirty:ge,setComments:X,setError:R,setLastUsedCategory:U,setLoading:Z,setNewCommentText:he,status:Q,title:we,taxonomies:ke,type:be}=e,[me,Re]=a.useState(null),[Te,se]=a.useState("idle"),[F,D]=a.useState(null),E=a.useRef(null),y=a.useCallback(()=>JSON.stringify({title:we.trim(),description:v||"",category:typeof f=="string"?f:f.label||N(n),type:typeof be=="string"?be:be.label||wr,priority:Number(oe),complexity:Number(S)||3,approach:o||"default",assignee:d||"agent",scheduledDate:J||"",dueDate:g||"",workstreamInput:M.trim(),checklistItems:k,comments:x,taxonomies:b,attachments:i}),[n,o,d,i,f,k,x,S,v,g,b,N,oe,J,we,be,M]),C=a.useCallback(()=>{E.current!==null&&(window.clearTimeout(E.current),E.current=null)},[]),P=a.useCallback(async B=>{const re=B?.quiet??!1,xe=B?.source??"manual";if(!we.trim())return R("Title is required"),w&&se(xe==="autosave"?"error":"idle"),!1;const Ee=ke.filter(ye=>ye.isRequired).filter(ye=>{const Pe=b[ye.id];return Array.isArray(Pe)?Pe.filter(vt=>String(vt).trim().length>0).length===0:typeof Pe!="string"&&typeof Pe!="number"||String(Pe).trim().length===0}).map(ye=>ye.label);if(Ee.length>0)return R(`Required taxonomy values are missing: ${Ee.join(", ")}`),w&&se(xe==="autosave"?"error":"idle"),!1;if(w&&T.find(Pe=>Pe.id===w)?.isArchived)return R("Archived tasks are read-only. Unarchive first to make changes."),se(xe==="autosave"?"error":"idle"),!1;Z(!0),R(""),w&&se("saving");try{const ye=w?`/api/taskforce/task/${w}`:s.replace("/api/dev/task","/api/taskforce/task").replace("/api/taskforce/task","/api/taskforce/task"),Pe=w?"PATCH":"POST",vt=typeof f=="string"?f:f.label||N(n),Ke=typeof be=="string"?be:be.label||wr,bt=M.trim()?O(M):null,Ze={title:we,description:v||null,category:vt||N(n),type:Ke,priority:oe,complexity:Number(S)||3,status:w?void 0:Q,completedAt:w?void 0:Q==="done"?new Date().toISOString():null,approach:o||"default",assignee:d||"agent",scheduledDate:J||null,dueDate:g||null,workstreamId:M.trim()?bt?.id||M.trim():null,checklistItems:k,comments:x,taxonomies:b,...w?{}:{createdAt:new Date().toISOString(),createdBy:"user"}};(!w||u)&&(Ze.attachments=i),w&&(Ze.saveSource=xe);const Qe=await fetch(ye,{method:Pe,headers:{"Content-Type":"application/json"},body:JSON.stringify(Ze)});if(!Qe.ok){const H=(await Qe.json()).message||`Failed to ${w?"update":"save"} task`;return R(H),re||te(H,"error"),Z(!1),w&&se("error"),!1}const St=await Qe.json().catch(()=>null);return w&&St&&typeof St=="object"&&(W(St),ie()),U(vt),ge(!1),Z(!1),w&&se("saved"),!0}catch{return R("Failed to connect to server"),re||te("Failed to connect to server","error"),Z(!1),w&&se("error"),!1}},[n,s,o,d,i,u,f,k,x,S,v,g,w,b,N,W,M,oe,te,ie,O,ge,R,U,Z,J,Q,we,ke,be]),j=a.useCallback(async()=>{await P({source:"manual"})&&(w||te("Task added successfully","success"),r==="add"&&!w&&(ve(),le("tasks"),await I()))},[r,w,I,te,ve,P,le]);a.useEffect(()=>{if(C(),!w){D(null),se("idle");return}D(y()),se("idle")},[C,w]);const ae=a.useCallback(async()=>{if(C(),!w||F===null)return;const B=y();if(B===F||!we.trim()||g&&J&&g<J)return;await P({quiet:!0,source:"autosave"})&&D(B)},[y,C,g,w,F,P,J,we]);a.useEffect(()=>{if(!w||F===null)return;const B=y();if(B!==F){if(!we.trim()){se("idle");return}if(g&&J&&g<J){se("error");return}return se(re=>re==="error"?"error":"idle"),C(),E.current=window.setTimeout(async()=>{await P({quiet:!0,source:"autosave"})&&D(B)},700),()=>{C()}}},[y,C,g,w,F,P,J,we]);const L=a.useCallback(async B=>{if(B.preventDefault(),g&&J&&g<J){Re({dueDate:g,scheduledDate:J});return}await j()},[g,j,J]),de=a.useCallback(async()=>{Re(null),await j()},[j]),K=a.useCallback(()=>{Re(null)},[]),ue=a.useCallback(async B=>{if(!w||!B.trim())return;const re=B.trim();try{const xe=await fetch(`/api/taskforce/task/${w}/comment`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({text:re,author:"user"})});if(!xe.ok){const Pe=(await xe.json().catch(()=>({}))).error||"Failed to add comment.";R(Pe),te(Pe,"error");return}const Ee=await xe.json().catch(()=>null);if(he(""),Ee&&typeof Ee=="object"){const ye=to(Ee);X(ye.comments||[]),W(Ee),D(y()),se("saved")}else await I(!0);ie()}catch(xe){console.error("Failed to add comment",xe),R("Failed to add comment."),te("Failed to add comment.","error")}},[w,I,y,W,te,ie,X,R,he]);return{autoSaveState:Te,flushAutoSave:ae,scheduleWarningPrompt:me,saveTask:P,handleSubmit:L,confirmScheduleWarning:de,cancelScheduleWarning:K,handleAddComment:ue}}function Wk(e){const{editingTaskId:n,fetchTasks:r,mergeTaskFromServer:s,workstreamInput:o,pushNotice:d,queueWorkspaceSyncFromAuthoritativeTaskState:i,relationshipTasks:u,resolveWorkstreamIdInput:f,setError:k}=e;return{handleSetWorkstreamForCurrentTask:a.useCallback(async S=>{if(!n)return;const v=u.find(b=>b.id===n);if(!v)return;const g=typeof S=="string"?S.trim():S===null?"":o.trim(),w=g?f(g):null,I=g.length>0?w?.id||g:null;if((v.workstreamId||null)===I){d(I?"Task already belongs to that workstream.":"Task is already standalone.","info");return}try{const b=await fetch(`/api/taskforce/task/${n}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({workstreamId:I})});if(!b.ok){const M=(await b.json().catch(()=>({}))).error||"Failed to set workstream.";k(M),d(M,"error");return}k(""),d(I?"Workstream set":"Workstream removed","info");const N=await b.json().catch(()=>null);N?(s(N),i()):(await r(!0),i())}catch{k("Failed to set workstream."),d("Failed to set workstream.","error")}},[n,r,s,o,d,i,u,f,k])}}function Fk({tasks:e,archivedTasks:n,editingTaskId:r,setTasks:s,setArchivedTasks:o,setDeletedTasks:d,setError:i,resetForm:u,setActiveTab:f,fetchTasks:k,fetchArchive:x,fetchDeletedTasks:S,mergeTaskFromServer:v,pushNotice:g,cloudAuthConfigured:w,runtimeMode:I,isAuthenticated:b,workspaceCloudSyncEnabled:N,buildWorkspaceSyncSignature:W,pushWorkspaceChangesToCloud:M,workspacePendingSignatureRef:oe,workspaceDeletedTaskIdsRef:te}){const[ie,T]=a.useState(null),ve=a.useRef(null),O=a.useRef(null),J=a.useRef(null);a.useEffect(()=>()=>{typeof window>"u"||(O.current!==null&&(window.clearTimeout(O.current),O.current=null),J.current=null)},[]);const le=a.useCallback((F=0)=>{if(!(w&&I==="local"&&b&&N)||typeof window>"u")return;const D=Math.max(0,F),E=Date.now()+D,y=J.current;if(O.current!==null){if(D<=0||y!==null&&y>=E)return;window.clearTimeout(O.current),O.current=null}J.current=E,O.current=window.setTimeout(()=>{O.current=null,J.current=null;const C=W();C&&(oe.current=C,M(C))},D)},[w,I,b,N,W,oe,M]),ge=a.useCallback(async(F,D)=>{let E=await fetch(`/api/taskforce/deleted${F}`,D);return E.status===404&&(E=await fetch(`/api/taskforce/trash${F}`,D)),E},[]),X=async(F,D=!1,E={})=>{if(!E.skipConfirm&&!confirm("Move this task to Trash? You can restore it later."))return!1;const y=D||n.some(C=>C.id===F);try{const C=await fetch(`/api/taskforce/task/${F}`,{method:"DELETE"});if(!C.ok){const L=(await C.json().catch(()=>({}))).error||"Failed to delete task.";return i(L),g(L,"error"),!1}const P=await C.json().catch(()=>({})),j=P?.deleted&&typeof P.deleted=="object"&&P.deleted.taskSnapshot?{...P.deleted,taskSnapshot:to(P.deleted.taskSnapshot)}:null;if(window.location.search.includes(F)){const ae=new URL(window.location.href);ae.searchParams.delete("task"),window.history.pushState({},"",ae.toString())}if(y?o(ae=>ae.filter(L=>L.id!==F)):s(ae=>ae.filter(L=>L.id!==F)),j?d(ae=>[j,...ae.filter(L=>L.taskId!==F)]):await S(!0),te.current.add(F),w&&I==="local"&&b&&N){const ae=W();oe.current=ae,M(ae)}return r===F&&(u(),f("tasks")),i(""),g("Task moved to Trash.","info"),!0}catch(C){return console.error("Failed to delete task:",C),i("Failed to delete task."),g("Failed to delete task.","error"),!1}},R=a.useCallback(async F=>{try{const D=await ge(`/${F}/restore`,{method:"POST"});if(!D.ok){const C=(await D.json().catch(()=>({}))).error||"Failed to restore deleted task.";return i(C),g(C,"error"),null}const E=await D.json().catch(()=>null);return E?v(E):await k(!0),d(y=>y.filter(C=>C.id!==F&&C.taskId!==F)),te.current.delete(F),le(),i(""),g("Task restored from Trash.","info"),E?to(E):null}catch(D){return console.error("Failed to restore deleted task:",D),i("Failed to restore deleted task."),g("Failed to restore deleted task.","error"),null}},[k,v,g,le,ge,d,i]),U=a.useCallback(async F=>{try{const D=await ge(`/${F}`,{method:"DELETE"});if(!D.ok){const y=(await D.json().catch(()=>({}))).error||"Failed to permanently delete deleted task.";return i(y),g(y,"error"),!1}return d(E=>E.filter(y=>y.id!==F&&y.taskId!==F)),le(),i(""),g("Deleted task permanently removed.","info"),!0}catch(D){return console.error("Failed to permanently delete deleted task:",D),i("Failed to permanently delete deleted task."),g("Failed to permanently delete deleted task.","error"),!1}},[g,le,ge,d,i]),Z=a.useCallback(async()=>{try{const F=await ge("/empty",{method:"POST"});if(!F.ok){const C=(await F.json().catch(()=>({}))).error||"Failed to permanently delete deleted tasks.";return i(C),g(C,"error"),null}const D=await F.json().catch(()=>({})),E=Number(D?.deleted||0);return d([]),le(),i(""),g(E===1?"Deleted task permanently removed.":`${E} deleted tasks permanently removed.`,"info"),E}catch(F){return console.error("Failed to empty deleted tasks:",F),i("Failed to permanently delete deleted tasks."),g("Failed to permanently delete deleted tasks.","error"),null}},[g,le,ge,d,i]),he=a.useCallback(async(F,D)=>{const E=e,y=n;s(C=>C.map(P=>P.id===F?{...P,...D}:P)),o(C=>C.map(P=>P.id===F?{...P,...D}:P));try{const C=await fetch(`/api/taskforce/task/${F}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(D)});if(!C.ok){const ae=(await C.json().catch(()=>({}))).error||`Failed to update task ${F}.`;i(ae),g(ae,"error"),s(E),o(y);return}const P=await C.json().catch(()=>null);v(P),le(D.attachments!==void 0?150:0),i("")}catch(C){console.error("Failed to update task",C);const P=`Failed to update task ${F}.`;i(P),g(P,"error"),s(E),o(y)}},[e,n,g,v,le]);return{copiedId:ie,handleDelete:X,handleUpdateTask:he,handleToggleComplete:async F=>{const D=F.status==="done"?"task":"done",E=D==="done"?new Date().toISOString():void 0,y={status:D,completedAt:E,completed:D==="done",inProgress:!1,readyForReview:!1,cancelled:!1},C=e,P=n;s(j=>j.map(ae=>ae.id===F.id?{...ae,...y}:ae)),o(j=>j.map(ae=>ae.id===F.id?{...ae,...y}:ae));try{const j=await fetch(`/api/taskforce/task/${F.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:D,completedAt:E})});if(!j.ok){const de=(await j.json().catch(()=>({}))).error||"Failed to update task status.";i(de),g(de,"error"),s(C),o(P);return}const ae=await j.json().catch(()=>null);ae?(v(ae),le()):(await k(!0),le()),i("")}catch(j){console.error("Failed to toggle complete",j),i("Failed to update task status."),g("Failed to update task status.","error"),s(C),o(P)}},handleToggleCancel:async F=>{const D=F.status==="cancelled"?"task":"cancelled";try{const E=await fetch(`/api/taskforce/task/${F.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:D})});if(!E.ok){const P=(await E.json().catch(()=>({}))).error||"Failed to update task status.";i(P),g(P,"error"),await k(!0);return}const y=await E.json().catch(()=>null);y?(v(y),le()):(await k(!0),le()),i("")}catch(E){console.error("Failed to toggle cancel",E),i("Failed to update task status."),g("Failed to update task status.","error"),k()}},handleToggleInProgress:async F=>{const D=F.status==="in-progress"?"task":"in-progress";s(E=>E.map(y=>y.id===F.id?{...y,status:D}:y));try{const E=await fetch(`/api/taskforce/task/${F.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:D})});if(!E.ok){await k(!0);return}const y=await E.json().catch(()=>null);v(y),le()}catch{k()}},handleToggleReview:async F=>{const D=F.status==="review"?"task":"review";s(E=>E.map(y=>y.id===F.id?{...y,status:D}:y));try{const E=await fetch(`/api/taskforce/task/${F.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:D})});if(!E.ok){await k(!0);return}const y=await E.json().catch(()=>null);v(y),le()}catch{k()}},handleArchiveTask:async F=>{try{const E=F.status==="cancelled"?"cancel":"complete",y=await fetch(`/api/taskforce/task/${F.id}/${E}`,{method:"POST"});if(y.ok){const C=await y.json().catch(()=>null),P=[];if(C&&typeof C=="object"&&P.push(C),P.length>0){for(const ae of P)v(ae);le()}else x();const j=new Set(P.map(ae=>String(ae?.id||"").trim()).filter(ae=>ae.length>0));r&&j.has(r)&&(u(),f("tasks"))}else{const P=(await y.json().catch(()=>({}))).error||"Failed to archive task.";i(P),g(P,"error")}}catch(D){console.error("Failed to archive",D),i("Failed to archive task."),g("Failed to archive task.","error")}},handleBulkArchive:async()=>{const F=e.filter(D=>D.status==="done"||D.status==="cancelled");if(F.length!==0&&confirm(`Archive ${F.length} completed/cancelled tasks?`))try{const D=await fetch("/api/taskforce/bulk-archive",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:F.map(E=>E.id)})});if(D.ok){const E=await D.json(),y=Array.isArray(E?.results?.archived)?E.results.archived:[];if(y.length>0){for(const C of y)v(C);le()}else s(C=>C.filter(P=>!["done","cancelled"].includes(P.status))),x();g(`${E.archived||F.length} tasks archived`,"info"),i("")}else{const y=(await D.json().catch(()=>({}))).error||"Failed to bulk archive tasks.";i(y),g(y,"error")}}catch(D){console.error("Failed to bulk archive",D),i("Failed to bulk archive tasks."),g("Failed to bulk archive tasks.","error")}},handleUnarchive:async F=>{try{const D=await fetch(`/api/taskforce/task/${F}/unarchive`,{method:"POST"});if(D.ok){const E=await D.json().catch(()=>null);E?(v(E),le()):(o(y=>y.filter(C=>C.id!==F)),await k(!0),le()),i(""),g("Task restored from archive.","info")}}catch(D){console.error("Failed to unarchive",D),i("Failed to unarchive task."),g("Failed to unarchive task.","error")}},handleRestoreDeletedTask:R,handlePermanentlyDeleteDeletedTask:U,handleEmptyDeletedTasks:Z,handleCopyId:(F,D)=>{F.stopPropagation(),navigator.clipboard.writeText(D),T(D),ve.current!==null&&window.clearTimeout(ve.current),ve.current=window.setTimeout(()=>{ve.current=null,T(null)},2e3)},queueWorkspaceSyncFromAuthoritativeTaskState:le}}const Ok=Fk;function Xd(e){return e==="/api/taskforce/auth/runtime-config"||e==="/api/taskforce/sync/workspace/apply-local"||e==="/api/taskforce/sync/workspace/repair-startup"}function $k(e){try{return typeof window>"u"?null:typeof e=="string"?new URL(e,window.location.origin):e instanceof URL?e:typeof Request<"u"&&e instanceof Request?new URL(e.url,window.location.origin):null}catch{return null}}function Uk({currentWorkspaceIdRef:e,resolveApiUrl:n,runtimeMode:r}){a.useEffect(()=>{if(typeof window>"u"||typeof window.fetch!="function")return;const s=window.fetch.bind(window),o=d=>{if(typeof d=="string")return r!=="cloud"?d:d.startsWith("/api/taskforce")&&!Xd(d)?n(d):d;if(d instanceof URL)return r!=="cloud"?d:d.origin===window.location.origin&&d.pathname.startsWith("/api/taskforce")?Xd(d.pathname)?d:new URL(n(`${d.pathname}${d.search}${d.hash}`)):d;if(typeof Request<"u"&&d instanceof Request){if(r!=="cloud")return d;const i=new URL(d.url,window.location.origin);if(i.origin===window.location.origin&&i.pathname.startsWith("/api/taskforce"))return Xd(i.pathname)?d:n(`${i.pathname}${i.search}${i.hash}`)}return d};return window.fetch=((d,i)=>{const u=o(d),f=$k(u);if(!!!(f&&f.pathname.startsWith("/api/taskforce")&&!Xd(f.pathname)))return s(u,i);const x=String(e.current||"").trim();if(typeof Request<"u"&&u instanceof Request){const v=new Headers(u.headers);i?.headers&&new Headers(i.headers).forEach((I,b)=>v.set(b,I)),x&&x!=="default"&&!v.has("x-taskforce-workspace-id")&&(v.set("x-taskforce-workspace-id",x),v.set("x-taskforce-workspace-authoritative","1"));const g=new Request(u,{...i,headers:v});return s(g)}const S=new Headers(i?.headers);return x&&x!=="default"&&!S.has("x-taskforce-workspace-id")&&(S.set("x-taskforce-workspace-id",x),S.set("x-taskforce-workspace-authoritative","1")),s(u,{...i,headers:S})}),()=>{window.fetch=s}},[e,n,r])}function zk({runtimeConfigReady:e,shouldProbeCloudAuth:n,authSessionResolved:r,resolveCloudAuthUrl:s,authOnlyCloudMode:o,authRequiredError:d,runtimeMode:i,workspaceSelectionScope:u,markBootstrapPhase:f,markBootstrapStalled:k,setRuntimeMode:x,setAuthRequiredForApi:S,setIsAuthenticated:v,setAuthUserId:g,setAuthWorkspaceId:w,setAuthUserEmail:I,setAuthUserDisplayName:b,setAuthUserAvatarUrl:N,setUserGlobalSyncStatus:W,setUserGlobalSyncError:M,setHasBetaAccess:oe,setAvailableWorkspaces:te,setHydratedWorkspaceRole:ie,setAssigneeOptions:T,setAuthBlocked:ve,setAuthSessionResolved:O,setError:J,applyResolvedWorkspaceId:le,readPersistedWorkspaceId:ge,authSessionRequestRef:X,authSessionEpochRef:R,authSessionLastCheckedAtRef:U,authSessionLastResultRef:Z,isLoopbackHost:he,setAuthStateReadyRefs:Q}){const we=a.useCallback(async be=>{const me=be?.force===!0;if(f("auth"),!e)return Z.current;if(!n)return x("local"),S(!1),v(!1),g("anonymous"),w(""),Ll(null),I(""),b(""),N(""),W("disconnected"),M(null),oe(!0),te([]),ie(null),T(Wo()),ve(!1),O(!0),Q(!1,!0,!1),Z.current=!1,U.current=Date.now(),!1;const Re=s("/api/taskforce/auth/session"),Te=Date.now();if(!me&&X.current)return X.current;if(!me&&r&&Te-U.current<1500)return Z.current;const se=++R.current;let F=null;return F=(async()=>{const D=new AbortController,E=typeof window<"u"?window.setTimeout(()=>D.abort(),8e3):null,y=()=>R.current!==se;try{const C=await fetch(Re,{method:"GET",credentials:"include",mode:"cors",signal:D.signal});if(y())return Z.current;if(C.status===429)return O(!0),Q(Z.current,!0,!1),Z.current;if(!C.ok)return y()?Z.current:(he&&Ll(null),O(!0),Q(!1,!0,!1),Z.current=!1,!1);const P=await C.json();if(y())return Z.current;const j=!!P.authRequiredForApi,ae=!!P.authenticated,L=ae?P.betaAccess!==!1:!0,de=typeof P.workspaceId=="string"&&P.workspaceId.trim().length>0?P.workspaceId.trim():"",K=typeof P.userId=="string"&&P.userId.trim().length>0?P.userId.trim():"anonymous",ue=typeof P.email=="string"&&P.email.trim().length>0?P.email.trim().toLowerCase():"",B=typeof P.displayName=="string"?P.displayName.trim():"",re=typeof P.avatarUrl=="string"?P.avatarUrl.trim():"",xe=i==="local",Ee=i==="local"||o,ye=o||xe?!1:j;return S(ye),v(ae),g(ae?K:"anonymous"),w(ae?de:""),he&&Ll(ae?K:null),I(ae?ue:""),b(ae?B:""),N(ae?re:""),ae&&J(Pe=>Pe===d?"":Pe),W(ae?"idle":"disconnected"),M(null),oe(L),Ee||le(de||ge(u)||"default",{preserveNonDefaultDefault:!0}),ve(o||xe?!1:j&&!ae),O(!0),Q(ae,!0,ye),Z.current=ae,ae&&f("ready"),ae}catch{return y()||(he&&Ll(null),O(!0),Q(!1,!0,!1),Z.current=!1,k("Unable to verify your session.")),Z.current}finally{E!==null&&typeof window<"u"&&window.clearTimeout(E),y()||(U.current=Date.now()),F&&X.current===F&&(X.current=null)}})(),X.current=F,F},[e,n,r,s,o,d,i,u,f,k,x,S,v,g,w,I,b,N,W,M,oe,te,ie,T,ve,O,J,le,ge,X,R,U,Z,he,Q]),ke=i==="local"&&he&&n?Xm():"";return a.useEffect(()=>{ke&&(v(!0),O(!0),g(ke),Q(!0,!0,!1),Z.current=!0)},[ke,O,Q,g,v,Z]),a.useEffect(()=>{if(i!=="local"||!n||typeof window>"u")return;const be=()=>{we()},me=()=>{document.visibilityState==="visible"&&be()};window.addEventListener("focus",be),window.addEventListener("online",be),document.addEventListener("visibilitychange",me);const Re=window.setInterval(be,3e4);return()=>{window.removeEventListener("focus",be),window.removeEventListener("online",be),document.removeEventListener("visibilitychange",me),window.clearInterval(Re)}},[i,n,we]),{checkAuthSession:we}}function Hk(e){const n=e.runtimeMode==="cloud",r=!!(e.shouldGateProtectedApiCalls&&n&&!e.authSessionResolved),s=!!(e.shouldGateProtectedApiCalls&&n&&e.authSessionResolved&&e.authRequiredForApi&&!e.isAuthenticated);return{shouldDeferProtectedApiCalls:r,shouldBlockProtectedApiCalls:s,canCallProtectedApi:!(r||s)}}function Gk(e){return!!(!e.isOpen||!e.canCallProtectedApi||e.authBlocked||e.authRequiredForApi&&!e.isAuthenticated)}function Vk(e){return!!(e.shouldGateProtectedApiCalls&&!e.authSessionResolved||e.authRequiredForApi&&!e.isAuthenticated)}function Gp(e){if(!Array.isArray(e))return;const n=e.filter(r=>typeof r=="string"&&r.trim().length>0).map(r=>r.trim());return n.length>0?n:void 0}function Zk(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;const n=e;return Array.isArray(n.categories)||Array.isArray(n.types)||Array.isArray(n.priorities)||Array.isArray(n.taxonomies)||!!n.displayLabels&&typeof n.displayLabels=="object"&&!Array.isArray(n.displayLabels)}function qk(e){const n=e||{};return{categories:Array.isArray(n.categories)?n.categories.map(s=>typeof s=="string"?{value:s.toLowerCase().replace(/\s+/g,"-"),label:s}:s):[],types:Array.isArray(n.types)?n.types.map(s=>({...iy(s.value),...s,aliases:Array.isArray(s.aliases)?s.aliases.filter(d=>typeof d=="string"&&d.trim().length>0).map(d=>d.trim()):void 0,status:s.status==="retired"?"retired":"active"})):[],priorities:Array.isArray(n.priorities)?n.priorities:[],taxonomies:Array.isArray(n.taxonomies)?n.taxonomies.map(s=>({...s,aliases:Gp(s.aliases),options:Array.isArray(s.options)?s.options.map(o=>({...o,aliases:Gp(o.aliases),status:o.status==="retired"?"retired":"active"})):[],status:s.status==="retired"?"retired":"active",formEnabled:s.formEnabled!==!1,filterEnabled:s.filterEnabled!==!1,sortEnabled:s.sortEnabled===!0})):[],displayLabels:{category:typeof n.displayLabels?.category=="string"&&n.displayLabels.category.trim().length>0?n.displayLabels.category.trim():void 0,type:typeof n.displayLabels?.type=="string"&&n.displayLabels.type.trim().length>0?n.displayLabels.type.trim():void 0,priority:typeof n.displayLabels?.priority=="string"&&n.displayLabels.priority.trim().length>0?n.displayLabels.priority.trim():void 0}}}function Kk(e){const{shouldDeferProtectedApiCalls:n,shouldBlockProtectedApiCalls:r,getWorkspaceRequestState:s,isWorkspaceRequestStale:o,isWorkspaceEpochStale:d,isAbortError:i,isBootstrapTimeoutError:u,fetchWithTimeout:f,handleUnauthorized:k,applyBootstrapConfig:x,loadPersistedUiState:S,fetchBuildInfo:v,markBootstrapPhase:g,markBootstrapStalled:w,fetchWorkflows:I,fetchInitiativeTemplates:b,loadAvailableEnvironments:N,setReferenceDataLoaded:W,setCustomCategories:M,setCustomTypes:oe,setPriorities:te,setTaxonomies:ie,setTaxonomyDisplayLabels:T,setConfigLoaded:ve,hasLoadedUiStateRef:O,currentWorkspaceIdRef:J,referenceDataRequestRef:le,referenceDataAbortRef:ge,bootstrapConfigAbortRef:X,workspaceListAbortRef:R,assigneeOptionsAbortRef:U,workspaceListHydratedRef:Z,setAvailableWorkspaces:he,runtimeMode:Q,applyResolvedWorkspaceId:we,workspaceSwitchingEnabled:ke,authSessionResolved:be,isAuthenticated:me,authUserId:Re,setHydratedWorkspaceRole:Te,setAssigneeOptions:se,setAssigneeOptionsLoaded:F,commitCurrentWorkspaceId:D,currentWorkspaceId:E,workspaceSelectionScope:y,abortWorkspaceScopedRequests:C,setWorkspaceBootstrapPending:P,checkAuthSession:j,lastConfigRefreshKeyRef:ae,lastAssigneeOptionsLoadKeyRef:L,lastWorkspaceSyncStateLoadKeyRef:de,lastTaskSurfaceLoadKeyRef:K,lastSettingsSurfaceLoadKeyRef:ue,isOpen:B,activeTab:re,showArchive:xe,taskScope:Ee,settingsSection:ye,fetchTasks:Pe,fetchArchive:vt,fetchPlanningEntities:Ke,refreshTaskCollections:bt,loadWorkspaceSyncState:Ze,archiveBootstrapTimerRef:Qe,hasBootstrappedDataRef:St}=e,Me=a.useCallback(async Xe=>{const gt=Xe?.ignoreAuthGuard===!0,ze=Xe?.force===!0;if(!gt&&(n||r))return;const Ye=s();if(!ze&&le.current?.workspaceId===Ye.workspaceId){await le.current.promise;return}W(!1);const Ve=new AbortController;ge.current=Ve;const ot=(async()=>{await Promise.allSettled([(async()=>{const xt=await fetch("/api/taskforce/taxonomy-state",{signal:Ve.signal});if(!xt.ok)return;const jt=await xt.json().catch(()=>({}));if(!Zk(jt)){const[q,Se,wt,tt]=await Promise.all([fetch("/api/taskforce/categories",{signal:Ve.signal}),fetch("/api/taskforce/types",{signal:Ve.signal}),fetch("/api/taskforce/priorities",{signal:Ve.signal}),fetch("/api/taskforce/taxonomies",{signal:Ve.signal})]),[_e,$t,ne,Ce]=await Promise.all([q.ok?q.json().catch(()=>({})):Promise.resolve({}),Se.ok?Se.json().catch(()=>({})):Promise.resolve({}),wt.ok?wt.json().catch(()=>({})):Promise.resolve({}),tt.ok?tt.json().catch(()=>({})):Promise.resolve({})]);jt.categories=_e.categories,jt.types=$t.types,jt.priorities=ne.priorities,jt.taxonomies=Ce.taxonomies}const it=qk(jt);o(Ye)||(it.categories.length>0&&M(it.categories),it.types.length>0&&oe(it.types),it.priorities.length>0&&te(it.priorities),ie(it.taxonomies),T(it.displayLabels||{}))})(),I(),b(),N()]),!o(Ye)&&W(!0)})();le.current={workspaceId:Ye.workspaceId,promise:ot};try{await ot}finally{le.current?.promise===ot&&(le.current=null),ge.current===Ve&&(ge.current=null)}},[b,I,s,o,N,ge,le,M,oe,te,W,ie,T,r,n]),H=a.useCallback(async Xe=>{if(!(Xe?.ignoreAuthGuard===!0)&&(n||r))return;g("config");const ze=s(),Ye=new AbortController;X.current=Ye;try{const Ve=await f("/api/taskforce/config",void 0,12e3,{signal:Ye.signal});if(d(ze))return;if(Ve.status===401){k(),ve(!0);return}let ot="";if(Ve.ok){const xt=await Ve.json();if(d(ze))return;ot=typeof xt?.workspaceId=="string"&&xt.workspaceId.trim().length>0?xt.workspaceId.trim():"",x(xt)}if(d(ze)){const xt=String(J.current||"default").trim()||"default";if(!ot||xt!==ot)return}if(O.current||(O.current=!0,await S(ot||ze.workspaceId)),d(ze)){const xt=String(J.current||"default").trim()||"default";if(!ot||xt!==ot)return}ve(!0),g("ready"),v()}catch(Ve){if(i(Ve)||d(ze))return;O.current||(O.current=!0,await S(ze.workspaceId)),w(u(Ve)?"Startup checks timed out.":"Unable to finish startup checks."),ve(!0)}finally{X.current===Ye&&(X.current=null)}},[x,X,J,v,f,s,k,O,i,u,d,S,g,w,ve,r,n]),c=a.useCallback(async Xe=>{await H(Xe),await Me(Xe)},[H,Me]),Ue=a.useCallback(async()=>{if(!ke)return he([]),Z.current=!1,{success:!0,workspaces:[]};const Xe=s(),gt=new AbortController;R.current=gt;try{const ze=await f("/api/taskforce/workspaces",{method:"GET",credentials:"include"},12e3,{signal:gt.signal});if(d(Xe))return{success:!1,error:"Workspace changed while loading workspaces."};if(ze.status===401)return he([]),Z.current=!1,{success:!1,error:"Authentication required."};const Ye=await ze.json().catch(()=>({}));if(d(Xe))return{success:!1,error:"Workspace changed while loading workspaces."};if(!ze.ok||Ye?.success===!1)return he([]),Z.current=!1,{success:!1,error:Ye?.error||`Failed to load workspaces (${ze.status})`};const Ve=Array.isArray(Ye?.workspaces)?Ye.workspaces.map(ot=>({id:String(ot?.id||"").trim(),name:String(ot?.name||"").trim(),role:String(ot?.role||"member").trim().toLowerCase(),slug:typeof ot?.slug=="string"?ot.slug:null,description:typeof ot?.description=="string"?ot.description:null,status:typeof ot?.status=="string"?ot.status:"",betaAccess:ot?.betaAccess===!0})).filter(ot=>ot.id&&ot.name):[];return he(Ve),Z.current=!0,Q!=="local"&&typeof Ye?.currentWorkspaceId=="string"&&Ye.currentWorkspaceId.trim().length>0&&we(Ye.currentWorkspaceId.trim(),{preserveNonDefaultDefault:!0}),{success:!0,workspaces:Ve}}catch(ze){return u(ze)&&w("Startup checks timed out."),he([]),Z.current=!1,{success:!1,error:i(ze)?"Workspace list request aborted.":"Failed to load workspaces."}}finally{R.current===gt&&(R.current=null)}},[we,f,s,i,u,d,w,Q,he,R,Z,ke]),At=a.useCallback(async()=>{const Xe=s(),gt=new AbortController;U.current=gt,F(!1);try{const[ze,Ye]=await Promise.all([f("/api/taskforce/workspace/assignee-options",{method:"GET",credentials:"include"},12e3,{signal:gt.signal}),be&&me?f("/api/taskforce/auth/workspace-members",{method:"GET",credentials:"include"},12e3,{signal:gt.signal}).catch(()=>null):Promise.resolve(null)]);if(o(Xe))return{success:!1,error:"Workspace changed while loading assignee options."};if(ze.status===401)return se(Wo()),F(!0),{success:!1,error:"Authentication required."};const Ve=await ze.json().catch(()=>({}));if(o(Xe))return{success:!1,error:"Workspace changed while loading assignee options."};if(!ze.ok)return se(Wo()),F(!0),{success:!1,error:Ve?.error||`Failed to load assignee options (${ze.status})`};const ot=Array.isArray(Ve?.assignees)?Ve.assignees:[],xt=ot.map(Se=>{const wt=String(Se?.value||"").trim(),tt=String(Se?.kind||"").trim().toLowerCase();return wt?tt==="agent"||tt==="ai"?{value:wt,label:String(Se?.label||wt).trim()||wt,icon:String(Se?.icon||"Bot"),color:String(Se?.color||"#8b5cf6"),kind:"agent"}:tt==="member"||tt==="human"?{value:wt,label:String(Se?.label||wt).trim()||wt,icon:String(Se?.icon||"User"),color:String(Se?.color||"#22c55e"),kind:"member"}:null:null}).filter(Boolean),jt=ot.map(Se=>({userId:String(Se?.userId||"").trim(),email:String(Se?.email||"").trim().toLowerCase(),displayName:typeof Se?.displayName=="string"?Se.displayName:null})).filter(Se=>Se.userId);let it=jt;if(Ye?.ok){const Se=await Ye.json().catch(()=>({})),wt=Array.isArray(Se?.users)?Se.users:[],tt=String(Re||"").trim(),_e=wt.find(Ce=>String(Ce?.userId||"").trim()===tt),$t=String(_e?.role||"").trim().toLowerCase();$t==="owner"||$t==="admin"||$t==="member"||$t==="read-only"?Te($t):!ke&&wt.length===0&&Te(null);const ne=wt.map(Ce=>({userId:String(Ce?.userId||"").trim(),email:String(Ce?.email||"").trim().toLowerCase(),displayName:typeof Ce?.displayName=="string"?Ce.displayName:null})).filter(Ce=>Ce.userId);it=Array.from(new Map([...jt,...ne].map(Ce=>[Ce.userId,Ce])).values())}else!ke&&!jt.length&&Te(null);const q=Vl([...xt,...qy(it).filter(Se=>Se.kind==="member")]);return o(Xe)?{success:!1,error:"Workspace changed while loading assignee options."}:(se(q),F(!0),{success:!0})}catch(ze){return o(Xe)||(se(Wo()),F(!0)),{success:!1,error:i(ze)?"Assignee options request aborted.":"Failed to load assignee options."}}finally{U.current===gt&&(U.current=null)}},[U,be,Re,f,s,i,me,o,se,F,Te,ke]),Wt=a.useCallback(async(Xe,gt)=>{if(!ke)return{success:!1,error:"Workspace switching is unavailable in local mode.",code:"WORKSPACE_SWITCHING_DISABLED"};const ze=String(Xe||"").trim();if(!ze)return{success:!1,error:"workspaceId is required."};try{const Ye=await fetch("/api/taskforce/session/workspace",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({workspaceId:ze})}),Ve=await Ye.json().catch(()=>({}));if(!Ye.ok||Ve?.success===!1)return{success:!1,error:Ve?.error||`Failed to switch workspace (${Ye.status})`,code:Ve?.code};D(ze,{clearExplicitSelection:!1}),C(),P(!0),g("workspace");const ot=await j({force:!0});return gt?.hydrate===!1?await Ue():(ae.current=`${Q}:${ze}:${y}`,L.current=`${Q}:${ot?"auth":"guest"}:${ze}`,de.current=ze,B&&re==="tasks"&&(K.current=`${ze}:${re}:${xe?"archive":"active"}:${Ee}`),B&&re==="settings"&&(ue.current=`${ze}:${re}:${ye}`),await Promise.all([c(),Ue(),bt({isSilent:!1}),At(),Ze()])),{success:!0}}catch{return{success:!1,error:"Failed to switch workspace."}}finally{P(!1)}},[C,re,j,D,At,c,Ue,B,L,ae,ue,K,de,Ze,g,bt,Q,ye,P,xe,Ee,y,ke]),Tt=a.useCallback(async Xe=>{g("workspace"),P(!0);try{if(!ke){const it=String(E||"").trim()||"default";return D(it),{success:!0,workspaceSetupRequired:!1,workspaceId:it}}const gt=String(Xe?.preferredWorkspaceId||"").trim(),ze=Dm(y),Ye=await Ue();if(!Ye.success)return{success:!1,workspaceSetupRequired:!1,error:Ye.error||"Failed to load workspaces after authentication."};const Ve=Array.isArray(Ye.workspaces)?Ye.workspaces:[];if(Ve.length===0)return D("default"),{success:!0,workspaceSetupRequired:!0};const ot=new Set(Ve.map(it=>String(it.id||"").trim()).filter(Boolean)),xt=(gt&&ot.has(gt)?gt:"")||(ze&&ot.has(ze)?ze:"")||String(Ve[0]?.id||"").trim();if(!xt)return D("default"),{success:!0,workspaceSetupRequired:!0};if(String(J.current||"").trim()!==xt){const it=await Wt(xt,{hydrate:!1});if(!it.success)return{success:!1,workspaceSetupRequired:!1,error:it.error||"Failed to set workspace after authentication.",code:it.code}}else D(xt);return{success:!0,workspaceSetupRequired:!1,workspaceId:xt}}catch{return w("Unable to resolve workspace access."),{success:!1,workspaceSetupRequired:!1,error:"Failed to resolve workspace access."}}finally{P(!1)}},[D,E,J,Ue,g,w,P,Wt,y,ke]),It=a.useCallback(async()=>{g("auth");const Xe=await j({force:!0});if(ke&&Xe){const gt=await Tt();if(!gt.success||gt.workspaceSetupRequired){await c({ignoreAuthGuard:!0});return}}await c({ignoreAuthGuard:!0})},[j,c,g,Tt,ke]);return a.useEffect(()=>{!n&&!r&&!St.current&&(St.current=!0,(async()=>{if(Q==="cloud"&&be&&me){const Xe=await Tt();if(!Xe.success||Xe.workspaceSetupRequired){await H(),Me();return}}await H(),await Promise.all([Pe(!1),Me(),Ke()]),typeof window<"u"&&(Qe.current!==null&&window.clearTimeout(Qe.current),Qe.current=window.setTimeout(()=>{Qe.current=null,vt(!0).then(()=>Fn("bootstrap_archive_loaded_deferred",{}))},1500))})())},[Qe,be,vt,H,Ke,Me,Pe,St,me,Tt,Q,r,n]),a.useEffect(()=>{if(n||r||y==="bootstrap"||!St.current)return;const Xe=`${Q}:${E}:${y}`;ae.current!==Xe&&(ae.current=Xe,c())},[E,c,St,ae,Q,r,n,y]),a.useEffect(()=>{if(n||r)return;const Xe=E;de.current!==Xe&&(de.current=Xe,Ze())},[E,de,Ze,r,n]),a.useEffect(()=>{if(Q!=="cloud"||!be||!me){Q!=="cloud"&&he([]),Z.current=!1;return}!St.current||Z.current||Ue()},[be,Ue,St,me,Q,he,Z]),{fetchReferenceData:Me,fetchBootstrapConfig:H,fetchConfig:c,fetchWorkspaces:Ue,fetchAssigneeOptions:At,switchWorkspace:Wt,resolveWorkspaceAfterAuth:Tt,retryBootstrapChecks:It}}function Yk({isOpen:e,authBlocked:n,authRequiredForApi:r,isAuthenticated:s,canCallProtectedApi:o,shouldGateProtectedApiCalls:d,authSessionResolvedRef:i,authRequiredForApiRef:u,isAuthenticatedRef:f,dataVersionRef:k,refreshTaskCollectionsForDataVersion:x}){a.useEffect(()=>{if(typeof window>"u"||typeof document>"u"||Gk({isOpen:e,authBlocked:n,authRequiredForApi:r,isAuthenticated:s,canCallProtectedApi:o}))return;let S=!1;const v=async()=>{if(!(S||document.visibilityState!=="visible")&&!Vk({shouldGateProtectedApiCalls:d,authSessionResolved:i.current,authRequiredForApi:u.current,isAuthenticated:f.current}))try{const I=await fetch("/api/taskforce/data-version");if(!I.ok)return;const b=await I.json(),N=Number(b?.dataVersion);if(!Number.isFinite(N))return;if(k.current===null){k.current=N;return}N!==k.current&&(k.current=N,await x())}catch{}},g=()=>{document.visibilityState==="visible"&&v()},w=window.setInterval(()=>{v()},3e3);return document.addEventListener("visibilitychange",g),v(),()=>{S=!0,window.clearInterval(w),document.removeEventListener("visibilitychange",g)}},[e,n,r,s,o,d,i,u,f,k,x])}const Jk={},Js=Km(Jk),hm=(()=>{const e=Js.baseUrl,n=Js.cloudAuthBaseUrl;if(n)return n;const r=Js.apiBaseUrl;return r||e||"https://app.taskforcehq.ai"})(),gm=12e3;function Xk({config:e={},initialTaskId:n,onTaskCountChange:r,onClose:s}){const o={...dy,...e},{categories:d,types:i,apiEndpoint:u,apiBaseUrl:f,cloudAuthBaseUrl:k,cloudMcpBaseUrl:x,wsBaseUrl:S,shortcut:v}=o,g=typeof window<"u"?String(window.location.hostname||"").trim().toLowerCase():"",w=g==="localhost"||g==="127.0.0.1"||g==="::1",I=typeof window<"u"&&!w,[b,N]=a.useState({cloudEnvironment:"",cloudBaseUrl:"",cloudMcpBaseUrl:"",baseUrl:"",apiBaseUrl:"",cloudAuthBaseUrl:"",wsBaseUrl:"",cloudAuthViaLocalProxy:!1,authSource:"",workspaceMode:"",workspaceSwitchingEnabled:null}),[W,M]=a.useState(!1),oe=a.useCallback(p=>typeof p=="string"?p.trim().replace(/\/+$/,""):"",[]);a.useEffect(()=>{if(typeof window>"u"){M(!0);return}let p=!1;return(async()=>{try{const z=await fetch("/api/taskforce/auth/runtime-config",{method:"GET",credentials:"include"});if(!z.ok)return;const ee=await z.json().catch(()=>({})),Y=ee?.config&&typeof ee.config=="object"?ee.config:{};if(p)return;const Oe=String(Y.runtimeMode||"").trim().toLowerCase()==="cloud"?"cloud":"local",Je=String(Y.workspaceMode||"").trim(),bn=Je==="single-local"||Je==="multi-cloud"?Je:Oe==="cloud"?"multi-cloud":"single-local";N({cloudEnvironment:typeof Y.cloudEnvironment=="string"?String(Y.cloudEnvironment).trim().toLowerCase():"",cloudBaseUrl:oe(Y.cloudBaseUrl),cloudMcpBaseUrl:oe(Y.cloudMcpBaseUrl),baseUrl:oe(Y.baseUrl),apiBaseUrl:oe(Y.apiBaseUrl),cloudAuthBaseUrl:oe(Y.cloudAuthBaseUrl),wsBaseUrl:oe(Y.wsBaseUrl),cloudAuthViaLocalProxy:!!Y.cloudAuthViaLocalProxy,authSource:"cloud",workspaceMode:bn,workspaceSwitchingEnabled:typeof Y.workspaceSwitchingEnabled=="boolean"?!!Y.workspaceSwitchingEnabled:bn==="multi-cloud"})}catch{}finally{p||M(!0)}})(),()=>{p=!0}},[oe]);const te=typeof window>"u"?"":w?hm:"",ie=oe(Js.baseUrl),T=oe(Js.apiBaseUrl),ve=oe(Js.cloudBaseUrl),O=oe(Js.cloudMcpBaseUrl),J=oe(Js.cloudAuthBaseUrl),le=oe(Js.wsBaseUrl),ge=oe(f),X=oe(k),R=oe(x),U=ge||T||ie,Z=b.apiBaseUrl||b.baseUrl,he=U||Z||"",Q=X||J||ie,we=b.cloudAuthBaseUrl||b.baseUrl,be=((w?we||Q:Q||we)||he||te).trim().replace(/\/+$/,""),me=oe(Oy(b.cloudMcpBaseUrl||b.cloudAuthBaseUrl||b.cloudBaseUrl||R||X||O||J||ve||be)),Re=(b.cloudMcpBaseUrl||R||me||b.cloudBaseUrl||O||ve||be||te).trim().replace(/\/+$/,""),Te=!I&&!!be&&!he,se=W&&(!!(be||he)||I),F=se&&!Te,D=!!(be||he||I),E=I?"cloud":"local",y=E==="local"&&w&&D?Xm():"",C=y.length>0,P=a.useCallback(p=>!p||/^https?:\/\//i.test(p)||!he||!p.startsWith("/")?p:`${he}${p}`,[he]),j=a.useCallback(p=>{if(!p||/^https?:\/\//i.test(p)||!p.startsWith("/"))return p;const z=p.startsWith("/api/taskforce/auth/")||p.startsWith("/api/taskforce/account/")||p.startsWith("/api/taskforce/billing/")||p.startsWith("/api/taskforce/sync/")||p.startsWith("/api/taskforce/settings/mcp/");if(!I&&z&&(!W||b.cloudAuthViaLocalProxy))return p;const ee=be||he;if(ee){const Y=`${ee}${p}`;if(typeof window<"u"&&!I&&z)try{if(new URL(Y,window.location.origin).origin===window.location.origin)return`${hm}${p}`}catch{return`${hm}${p}`}return Y}return p},[W,b.cloudAuthViaLocalProxy,be,he,I]),ae=a.useCallback(p=>{const z=String(p||"").trim()||"/taskforce-ws",ee=z.startsWith("/")?z:`/${z}`,Y=String(S||b.wsBaseUrl||le||he||"").trim().replace(/\/+$/,""),et=typeof window<"u"?window.location.origin:"",Oe=Y||et;if(!Oe)return"";try{const Je=new URL(ee,Oe);return Je.protocol==="https:"&&(Je.protocol="wss:"),Je.protocol==="http:"&&(Je.protocol="ws:"),Je.toString()}catch{return""}},[S,b.wsBaseUrl,le,he]),[L,de]=a.useState("tasks"),[K,ue]=a.useState(!1),[B,re]=a.useState(!1),[xe,Ee]=a.useState("open"),[ye,Pe]=a.useState(kc(o.theme)||lu),[vt,Ke]=a.useState(kc(o.theme)||lu),[bt,Ze]=a.useState(!0),[Qe]=a.useState(".taskforce"),St=!1,[Me,H]=a.useState(!1),[c,Ue]=a.useState([]),[At,Wt]=a.useState([]),[Tt,It]=a.useState(""),[Xe,gt]=a.useState(null),[ze,Ye]=a.useState(null),[Ve,ot]=a.useState(""),[xt,jt]=a.useState(""),it=a.useMemo(()=>Ey({projectRoot:Ve,runtimeMode:E}),[Ve,E]),[q,Se]=a.useState(""),[wt,tt]=a.useState(""),[_e,$t]=a.useState(()=>E),ne=By(_e),Ce=b.workspaceMode==="single-local"||b.workspaceMode==="multi-cloud"?b.workspaceMode:ne.workspaceMode,Ie=typeof b.workspaceSwitchingEnabled=="boolean"?b.workspaceSwitchingEnabled:ne.workspaceSwitchingEnabled,[je,at]=a.useState(!1),[ct,dt]=a.useState(!1),[ut,Mt]=a.useState(C),[Nt,Ft]=a.useState(C?y:"anonymous"),[Yt,Bt]=a.useState(""),[Jt,mn]=a.useState(""),[Pn,Qt]=a.useState(""),[Rt,gn]=a.useState(""),[jn,Gt]=a.useState(!0),[Ma,An]=a.useState(null),[G,Fe]=a.useState(()=>{if(E==="local")return"default";const p=Dm(it);return p&&p.toLowerCase()!=="default"?p:"default"}),Ge=a.useMemo(()=>Py({projectRoot:Ve,runtimeMode:_e,workspaceId:G}),[Ve,_e,G]),[Ct,$e]=a.useState([]),[Ut,qt]=a.useState(()=>Wo()),[_t,tn]=a.useState(!1),[ln,Ot]=a.useState(C),[ta,Mn]=a.useState("idle"),[yn,pn]=a.useState(null),[zt,na]=a.useState(null),Rn=a.useRef(null),cr=a.useRef(0),dn=a.useRef(0),Ht=a.useRef(C),Vt=a.useRef(G),_a=a.useRef(null),aa=a.useRef(0),[br,cs]=a.useState(0),Ln=a.useRef(null),La=a.useRef(null),qa=a.useRef(null),ra=a.useRef(null),Yn=a.useRef(null),sa=a.useRef(null),On=a.useCallback((p,z)=>{const ee=String(p||"").trim();if(!ee)return;const Y=String(Vt.current||"").trim();Y&&Y!==ee&&(aa.current+=1,cs(aa.current)),Vt.current=ee,z?.clearExplicitSelection!==!1&&(_a.current=null),Fe(ee)},[]);a.useEffect(()=>{Vt.current=G},[G]);const ua=a.useCallback(p=>{const z=String(p||"").trim();z&&Fe(()=>{const ee=String(_a.current||"").trim();let Y=z;return ee&&ee!==z&&(Y=ee),Vt.current=Y,Y})},[]),$n=a.useCallback(()=>({workspaceId:String(Vt.current||"default").trim()||"default",epoch:aa.current}),[]),Jn=a.useCallback(p=>(String(Vt.current||"default").trim()||"default")!==p.workspaceId||aa.current!==p.epoch,[]),Ba=a.useCallback(p=>aa.current!==p.epoch,[]),nt=a.useCallback(p=>p instanceof DOMException?p.name==="AbortError":String(p?.name||"").toLowerCase()==="aborterror",[]),Gn=a.useCallback(()=>{[Ln,La,qa,ra,Yn,sa].forEach(p=>{p.current?.abort("workspace-transition"),p.current=null}),sc.current=null},[]),rn=a.useMemo(()=>Hk({shouldGateProtectedApiCalls:F,runtimeMode:_e,authSessionResolved:ln,authRequiredForApi:je,isAuthenticated:ut}),[F,_e,ln,je,ut]),Xt=rn.shouldDeferProtectedApiCalls,on=rn.shouldBlockProtectedApiCalls,[Tn,kn]=a.useState(null),[Wa,Ka]=a.useState(null),[ma,fn]=a.useState(!1),[Dt,lr]=a.useState("unknown"),[pa,Ca]=a.useState(null),[Aa,Dn]=a.useState(o.shortcut||"Alt+T"),[Ta,ls]=a.useState(o.priorities||[]),[oa]=a.useState(Mf()),[dr,ds]=a.useState(""),[fa,ur]=a.useState(!1),[Vn,ha]=a.useState(!1),[Sn,xr]=a.useState(!0),[Ia,Fa]=a.useState(()=>jy()),Na=a.useMemo(()=>Ny(),[]),[ja,Oa]=a.useState(()=>{try{return(Intl.DateTimeFormat().resolvedOptions().locale||"").toLowerCase().startsWith("en-us")?"sunday":"monday"}catch{return"monday"}}),[mr,_r]=a.useState(!1),[Ya,Ra]=a.useState(!0),[ia,Cr]=a.useState(!0),[Ar,Zn]=a.useState(""),[pr,Ja]=a.useState(null);Uk({currentWorkspaceIdRef:Vt,resolveApiUrl:P,runtimeMode:_e});const{availableWorkflows:Xn,initiativeTemplates:Un,fetchWorkflows:zn,fetchInitiativeTemplates:Bn,fetchWorkflowTemplate:fr,fetchWorkflowOverrideNames:Be,saveWorkflowTemplateDraft:Et,resetWorkflowTemplateDraft:_n}=gk({shouldDeferProtectedApiCalls:Xt,shouldBlockProtectedApiCalls:on}),{zenMode:nn,setZenModeState:hr,toggleZenMode:Gr}=yk(),{exportEnvironment:us,setExportEnvironment:V,availableEnvironments:ft,loadAvailableEnvironments:Kt,exportWorkflowsPath:qe,setExportWorkflowsPath:En,exportingResource:Xa,exportResult:Qa,handleExportWorkflows:Vr}=mk({storagePath:Qe,shouldDeferProtectedApiCalls:Xt,shouldBlockProtectedApiCalls:on}),[Ts,Tr]=a.useState(!1),[A,Ne]=a.useState(null),{uiNotice:rt,pushNotice:ht,clearNotice:$}=uk(),[We,Ir]=a.useState([]),ca=a.useRef(null),[er,ms]=a.useState(0),ro=a.useCallback(p=>!p||!Ve?p:p.startsWith(Ve)?p.slice(Ve.length).replace(/^[/\\]+/,""):p,[Ve]),[In,Zr]=a.useState([]),[Wn,Nr]=a.useState([]),[tr,$o]=a.useState([]),[ps,Uo]=a.useState([]),[Is,Ns]=a.useState([]),[zo,qr]=a.useState(!1),[$a,Rc]=a.useState(null),[Dc,Ec]=a.useState(!1),[js,Li]=a.useState([]),[la,Bi]=a.useState(!1),[Rs,Pc]=a.useState({}),gr=a.useRef({authSessionResolved:!1,configLoaded:!1,workspaceBootstrapPending:!1});a.useEffect(()=>{gr.current={authSessionResolved:ln,configLoaded:la,workspaceBootstrapPending:_t}},[ln,la,_t]);const Ds=a.useCallback(p=>{Mn(p),p!=="ready"&&(pn(null),na(Date.now()))},[]),Es=a.useCallback(p=>{const z=gr.current;z.authSessionResolved&&z.configLoaded&&!z.workspaceBootstrapPending||(Mn("stalled"),pn(p),na(ee=>ee??Date.now()))},[]),Ho=a.useCallback(async(p,z,ee=gm,Y)=>{const et=new AbortController,Oe=Y?.signal,Je=Number(ee)>0?Number(ee):gm,bn=typeof window<"u"?window.setTimeout(()=>et.abort("bootstrap-timeout"),Je):null,vn=()=>{et.abort(Oe?.reason||"external-abort")};Oe&&(Oe.aborted?vn():Oe.addEventListener("abort",vn,{once:!0}));try{return await fetch(p,{...z||{},signal:et.signal})}catch(wa){if(wa instanceof DOMException?wa.name==="AbortError":String(wa?.name||"").toLowerCase()==="aborterror"){const Ga=new Error(`Startup checks timed out after ${Je}ms.`);throw Ga.name="BootstrapTimeoutError",Ga}throw wa}finally{Oe&&Oe.removeEventListener("abort",vn),bn!==null&&typeof window<"u"&&window.clearTimeout(bn)}},[]),so=a.useCallback(p=>String(p?.name||"")==="BootstrapTimeoutError",[]),[Kr,Go]=a.useState([]),[nr,Nn]=a.useState({}),[Ua,yr]=a.useState(o.taxonomies||[]),un=a.useMemo(()=>(js.length>0?js:d||[]).map(z=>typeof z=="string"?{value:z.toLowerCase().replace(/\s+/g,"-"),label:z}:z).sort((z,ee)=>z.label.localeCompare(ee.label)),[js,d]),Mc=a.useMemo(()=>({categories:un,types:Kr,priorities:Ta,taxonomies:Ua,displayLabels:nr}),[un,Kr,Ta,Ua,nr]);a.useMemo(()=>un.filter(p=>!p.disabled),[un]);const Yr=a.useCallback(p=>p.find(ee=>ee.value==="default"||ee.value==="general"||ee.label==="General"||ee.value==="Taskforce"||ee.label==="Taskforce")?.value||p[0]?.value||"default",[]),Qn=Kr.length>0?Kr:i,[Lr,oo]=a.useState(!1),[ga,ar]=a.useState(""),Jr="Authentication required. Sign in to continue.",[Ps,Br]=a.useState(!1),[Ms,Xr]=a.useState(!1),Wr=a.useCallback(()=>{dt(_e==="cloud"),Mt(!1),mn(""),Qt(""),gn(""),ar(Jr)},[Jr,_e]),{recentlyChangedTaskIds:Ls,fetchTasks:Wi,fetchArchive:fs,refreshTaskCollections:Fr,refreshTaskCollectionsFromInvalidation:Or,mergeTaskFromServer:Qr}=kk({tasks:In,archivedTasks:Wn,setTasks:Zr,setArchivedTasks:Nr,setLoadingTasks:qr,getCurrentWorkspaceId:()=>Vt.current,workspaceResetKey:`${G}:${br}`,shouldDeferProtectedApiCalls:Xt,shouldBlockProtectedApiCalls:on,handleUnauthorized:Wr,authRequiredForApi:je});a.useEffect(()=>{br!==0&&(Gn(),sc.current=null,Hs.current="",di.current="",ui.current="",So.current="",ys.current="",wo.current="",mi(!1),Br(!1),qt(Wo()),Xr(!1),Ns([]),Zr([]),Nr([]),$o([]),Uo([]),qr(!1),Ea.current!==null&&typeof window<"u"&&(window.clearTimeout(Ea.current),Ea.current=null),za.current!==null&&typeof window<"u"&&(window.clearTimeout(za.current),za.current=null))},[Gn,Nr,qr,Zr,br]);const vr=a.useCallback(async(p=!1,z)=>{if(!(z?.ignoreAuthGuard===!0)&&(Xt||on))return;p||qr(!0);const Y=$n(),et=new AbortController;Yn.current=et;try{let Oe=await fetch("/api/taskforce/deleted",{signal:et.signal});if(Oe.status===404&&(Oe=await fetch("/api/taskforce/trash",{signal:et.signal})),Oe.status===401){Wr(),Ns([]);return}if(Oe.status===404){Ns([]);return}if(Oe.ok){const Je=await Oe.json();if(Jn(Y))return;const bn=Array.isArray(Je?.deleted)?Je.deleted.map(vn=>{const wa=vn?.taskSnapshot&&typeof vn.taskSnapshot=="object"?to(vn.taskSnapshot):null;return wa?{...vn,taskSnapshot:wa}:null}).filter(vn=>!!vn):[];Ns(bn)}}catch(Oe){if(nt(Oe))return;console.error("[Taskforce] Failed to fetch deleted tasks:",Oe)}finally{Yn.current===et&&(Yn.current=null),p||qr(!1)}},[$n,Wr,nt,Jn,Xt,on]),en=a.useCallback(async p=>{if(!(p?.ignoreAuthGuard===!0)&&(Xt||on))return;const ee=$n(),Y=new AbortController;sa.current=Y;try{const[et,Oe]=await Promise.all([fetch("/api/taskforce/initiatives",{signal:Y.signal}),fetch("/api/taskforce/workstreams",{signal:Y.signal})]);if(et.status===401||Oe.status===401){Wr(),$o([]),Uo([]);return}const[Je,bn]=await Promise.all([et.ok?et.json().catch(()=>[]):[],Oe.ok?Oe.json().catch(()=>[]):[]]);if(Jn(ee))return;$o(Array.isArray(Je)?Je.filter(vn=>!!(vn&&typeof vn=="object"&&typeof vn.id=="string")):[]),Uo(Array.isArray(bn)?bn.filter(vn=>!!(vn&&typeof vn=="object"&&typeof vn.id=="string")):[])}catch(et){if(nt(et))return;console.error("[Taskforce] Failed to fetch planning entities:",et)}finally{sa.current===Y&&(sa.current=null)}},[$n,Wr,nt,Jn,Xt,on]),cn=a.useCallback(async(p=!1,z)=>{await Wi(p,z)},[Wi]),es=a.useCallback(async(p=!1,z)=>{await fs(p,z)},[fs]),Vo=a.useCallback(async p=>{const z=p?.isSilent!==!1,ee=p?.ignoreAuthGuard===!0;await Promise.all([Fr({isSilent:z,ignoreAuthGuard:ee}),vr(z,{ignoreAuthGuard:ee}),en({ignoreAuthGuard:ee})])},[vr,en,Fr]),Zo=a.useCallback(async()=>{await Or(),await vr(!0),await en()},[vr,en,Or]),Fi=a.useRef(()=>{}),ya=a.useRef(()=>{}),hs=a.useRef(async()=>!1),hn=a.useCallback(p=>hs.current(p),[]),{userGlobalSyncStatus:qo,setUserGlobalSyncStatus:Xl,userGlobalSyncError:Ql,setUserGlobalSyncError:Bs,workspaceLastPullAt:Cu,workspaceLastPushAt:ed,workspaceLastErrorAt:td,workspaceLastErrorMessage:nd,workspaceLastSuccessfulSyncAt:Lc,workspaceCloudSyncEnabled:Ko,workspaceSyncPhase:Bc,workspaceSyncStatus:io,workspaceSyncSummary:Yo,workspaceSyncRecommendedAction:Oi,workspaceSyncBusy:Wc,workspaceSyncPendingChanges:$i,workspacePendingSignatureRef:Ws,workspaceDeletedTaskIdsRef:qn,loadWorkspaceSyncState:Fs,applyWorkspaceSyncStateSnapshot:Fc,syncUserGlobalSettings:ts,buildWorkspaceSyncSignature:ad,pushWorkspaceChangesToCloud:co,saveWorkspaceCloudSyncSettings:rd,retryUserGlobalSettingsSync:sd,retryWorkspaceCloudSync:Ui,resetWorkspaceSyncCursorAndPull:lo,getWorkspaceSyncDiagnostics:va}=lk({currentWorkspaceId:G,cloudAuthConfigured:D,runtimeMode:_e,authSessionResolved:ln,isAuthenticated:ut,authUserId:Nt,projectName:xt,resolveCloudAuthUrl:j,resolveWebSocketUrl:ae,realtimeSyncEnabled:ma,tasks:In,archivedTasks:Wn,initiatives:tr,workstreams:ps,taxonomies:Ua,taxonomyState:Ps?Mc:void 0,setupState:Tn,globalTheme:vt,locale:Ia,globalWeekStartsOn:ja,themeUseGlobalDefault:bt,setTasks:Zr,setArchivedTasks:Nr,setAuthBlocked:dt,setIsAuthenticated:Mt,checkAuthSession:hn,setGlobalTheme:Ke,setCurrentTheme:Pe,setSetupState:kn,setLocale:Fa,setGlobalWeekStartsOn:Oa,fetchPlanningEntities:en}),$r=a.useCallback((p=Qn)=>p.find(z=>String(z.value||"").trim().length>0)?.value||wr,[Qn]),[Jo,uo]=a.useState(()=>Yr(un)),[ka,mo]=a.useState(()=>$r(Qn)),[zi,Xo]=a.useState(2),[Oc,$c]=a.useState(3),[Os,Hi]=a.useState("task"),[od,Gi]=a.useState("default"),[Qo,ei]=a.useState("unassigned"),[Vi,kt]=a.useState(""),[Uc,zc]=a.useState(""),[Ur,Hc]=a.useState(""),[ti,Gc]=a.useState(""),[Vc,id]=a.useState(""),[rr,Hn]=a.useState([]),[po,Zc]=a.useState([]),[cd,$s]=a.useState(""),[ld,dd]=a.useState({}),zr=a.useRef(null),[qc,Zi]=a.useState(!1),[fo,ni]=a.useState("");a.useEffect(()=>{if($a)return;const p=String(ka||"").trim();Qn.some(ee=>String(ee.value||"").trim()===p)||mo($r(Qn))},[Qn,$a,$r,ka]);const{searchQuery:Us,setSearchQuery:ai,filterCategories:ri,setFilterCategories:si,filterPriorities:Kc,setFilterPriorities:ud,filterTypes:ho,setFilterTypes:ns,filterStatus:Da,setFilterStatus:go,filterAssignees:zs,setFilterAssignees:qi,filterAssigneesAllSelected:Ki,setFilterAssigneesAllSelected:Yc,filterTaxonomies:oi,setFilterTaxonomies:md,hasInitedFilters:Jc,setHasInitedFilters:Xc,sortBy:Yi,setSortBy:gs,sortOrder:Ji,setSortOrder:Xi,toggleSortOrder:pd,groupBy:Qc,setGroupBy:Qi,emptyColumnMode:Sa,setEmptyColumnMode:el,collapsedCategories:fd,setCollapsedCategories:hd,clearFilters:tl,filteredTasks:gd,searchAgnosticTasks:nl,filteredArchive:al,groupedTasks:ec}=Lk({tasks:In,archivedTasks:Wn,activeCategories:un,activeTypes:Qn,priorities:Ta,taxonomies:Ua,configLoaded:la,referenceDataLoaded:Ps,assigneeOptionsLoaded:Ms,assigneeOptions:Ut});Fi.current=Xl,ya.current=Bs;const{checkAuthSession:yd}=zk({runtimeConfigReady:W,shouldProbeCloudAuth:se,authSessionResolved:ln,resolveCloudAuthUrl:j,authOnlyCloudMode:Te,authRequiredError:Jr,runtimeMode:_e,workspaceSelectionScope:it,markBootstrapPhase:Ds,markBootstrapStalled:Es,setRuntimeMode:$t,setAuthRequiredForApi:at,setIsAuthenticated:Mt,setAuthUserId:Ft,setAuthWorkspaceId:Bt,setAuthUserEmail:mn,setAuthUserDisplayName:Qt,setAuthUserAvatarUrl:gn,setUserGlobalSyncStatus:p=>Fi.current(p),setUserGlobalSyncError:p=>ya.current(p),setHasBetaAccess:Gt,setAvailableWorkspaces:$e,setHydratedWorkspaceRole:An,setAssigneeOptions:qt,setAuthBlocked:dt,setAuthSessionResolved:Ot,setError:ar,applyResolvedWorkspaceId:ua,readPersistedWorkspaceId:Dm,authSessionRequestRef:Rn,authSessionEpochRef:cr,authSessionLastCheckedAtRef:dn,authSessionLastResultRef:Ht,isLoopbackHost:w,setAuthStateReadyRefs:(p,z,ee)=>{nc.current=z,Ha.current=ee,ac.current=p}});hs.current=yd;const[tc,ii]=a.useState("tasks"),[Au,rl]=a.useState(!1),[Tu,vd]=a.useState(!1),[Iu,ci]=a.useState(!1),[yo,li]=a.useState([]),[sl,vo]=a.useState(!1),Nu=a.useRef(null),Ea=a.useRef(null),za=a.useRef(null),ko=a.useRef(!1),nc=a.useRef(ln),Ha=a.useRef(je),ac=a.useRef(ut),rc=a.useRef(!1),Hs=a.useRef(""),di=a.useRef(""),ui=a.useRef(""),So=a.useRef(""),ys=a.useRef(""),wo=a.useRef(""),bo=a.useRef(!1),sc=a.useRef(null),xo=a.useRef(!1),_o=a.useRef(!1),[kd,mi]=a.useState(!1),{handleSaveSettings:Sd,handleSaveTheme:ol,handleSaveGlobalTheme:Co,handleJsonBackupEnabledChange:ju,handleSaveGlobalJsonBackupEnabled:Ru,handleSaveGlobalWeekStartsOn:wd,handleSaveLocale:bd,handleManualComplexityEnabledChange:Du,handleChecklistDropdownEnabledChange:Eu,handleShowTaskCardStatusLabelChange:Pu,handleResetProjectToGlobal:Mu}=fk({keyShortcut:Aa,themeUseGlobalDefault:bt,runtimeMode:_e,jsonBackupUseGlobalDefault:Sn,globalTheme:vt,globalJsonBackupEnabled:Vn,setCurrentTheme:Pe,setThemeUseGlobalDefault:Ze,setGlobalTheme:Ke,setJsonBackupEnabled:ur,setJsonBackupUseGlobalDefault:xr,setGlobalJsonBackupEnabled:ha,setGlobalWeekStartsOn:Oa,setLocale:Fa,setManualComplexityEnabled:_r,setChecklistDropdownEnabled:Ra,setShowTaskCardStatusLabel:Cr,setShowChecklist:Zi});a.useEffect(()=>{_e==="cloud"&&it!==Fo&&ev(G,it)},[_e,G,it]),a.useEffect(()=>{nc.current=ln,Ha.current=je,ac.current=ut},[ln,je,ut]);const il=a.useCallback(p=>{if(!p)return;const z=Array.isArray(p.filterCategories)||Array.isArray(p.filterPriorities)||Array.isArray(p.filterTypes)||Array.isArray(p.filterStatus)||Array.isArray(p.filterAssignees)||typeof p.filterAssigneesAllSelected=="boolean"||p.filterTaxonomies&&typeof p.filterTaxonomies=="object";typeof p.activeWorkspaceModule=="string"?ii(p.activeWorkspaceModule):p.groupBy==="docs"&&ii("docs"),p.groupBy&&p.groupBy!=="docs"&&Qi(p.groupBy),(p.emptyColumnMode==="show"||p.emptyColumnMode==="collapse"||p.emptyColumnMode==="hide")&&el(p.emptyColumnMode),typeof p.zenMode=="boolean"&&hr(p.zenMode),typeof p.searchQuery=="string"&&ai(p.searchQuery),Array.isArray(p.filterCategories)&&si(p.filterCategories),Array.isArray(p.filterPriorities)&&ud(p.filterPriorities),Array.isArray(p.filterTypes)&&ns(p.filterTypes),Array.isArray(p.filterStatus)&&go(p.filterStatus),Array.isArray(p.filterAssignees)&&qi(p.filterAssignees),typeof p.filterAssigneesAllSelected=="boolean"&&Yc(p.filterAssigneesAllSelected),p.filterTaxonomies&&typeof p.filterTaxonomies=="object"&&md(p.filterTaxonomies),(p.sortBy==="created"||p.sortBy==="priority"||p.sortBy==="updated"||p.sortBy==="complexity")&&gs(p.sortBy),(p.sortOrder==="asc"||p.sortOrder==="desc")&&Xi(p.sortOrder),typeof p.hasInitedFilters=="boolean"?Xc(p.hasInitedFilters):z&&Xc(!0),typeof p.showChecklist=="boolean"&&Zi(p.showChecklist),typeof p.lastCategory=="string"&&ni(p.lastCategory),typeof p.exportEnvironment=="string"&&p.exportEnvironment.trim().length>0&&V(p.exportEnvironment.trim())},[]),ea=a.useCallback(async p=>{const z=String(p||Vt.current||G||"default").trim()||"default",ee=`${_e}:${Ge}:${z}`;try{const Y=await fetch(`/api/taskforce/ui-state?key=app&workspaceId=${encodeURIComponent(z)}`,{method:"GET",credentials:"include"}),et=Y.ok?await Y.json().catch(()=>({})):{},Oe=et?.state&&typeof et.state=="object"?et.state:null,Je=Pp(Ge),bn=Oe||Je?{...Je||{},...Oe||{}}:null;if(Vt.current!==z)return;il(bn),Hs.current=ee}catch{const Y=Pp(Ge);Vt.current===z&&(il(Y),Hs.current=ee)}finally{if(Vt.current!==z)return;bo.current=!0,mi(!0)}},[il,G,_e,Ge]);a.useEffect(()=>{const p=`${_e}:${Ge}:${G}`;rc.current&&Hs.current!==p&&(mi(!1),ea(G))},[G,ea,_e,Ge]),a.useEffect(()=>{if(!kd)return;if(bo.current){bo.current=!1;return}const p={groupBy:Qc,activeWorkspaceModule:tc,emptyColumnMode:Sa,zenMode:nn,searchQuery:Us,filterCategories:ri,filterPriorities:Kc,filterTypes:ho,filterStatus:Da,filterAssignees:zs,filterAssigneesAllSelected:Ki,filterTaxonomies:oi,sortBy:Yi,sortOrder:Ji,hasInitedFilters:Jc,showChecklist:qc,lastCategory:fo||"",exportEnvironment:us};tv(p,Ge);const z=window.setTimeout(async()=>{try{await Ym({stateKey:"app",workspaceId:Vt.current,patch:p})}catch{}},250);return()=>window.clearTimeout(z)},[kd,Qc,tc,Sa,nn,Us,ri,Kc,ho,Da,zs,Ki,oi,Yi,Ji,Jc,qc,fo,us,Ge]);const cl=a.useCallback(p=>{const z=p.runtimeMode==="cloud"?"cloud":"local",ee=!!p.authRequiredForApi,Y=typeof p.userId=="string"&&p.userId.trim().length>0?p.userId.trim():"anonymous",et=z==="cloud"&&Y!=="anonymous",Oe=et||ac.current,Je=nc.current;if($t(z),at(ee),et&&(Mt(!0),Ft(Y),dt(!1),Je||Ot(!0)),typeof p.workspaceId=="string"&&p.workspaceId.trim().length>0){const zd=p.workspaceId.trim();z==="local"?On(zd):ua(zd)}dt(z==="cloud"&&ee?!Oe:!1),p.setupState&&typeof p.setupState=="object"?kn(p.setupState):kn(null),p.runtimeCapabilities&&typeof p.runtimeCapabilities=="object"?Ka(p.runtimeCapabilities):Ka(null),fn(!!p.realtimeSyncEnabled);const bn=String(p.realtimeSyncFlagSource||"").trim().toLowerCase();lr(bn==="env"||bn==="settings"||bn==="default"?bn:"unknown"),typeof p.shortcut=="string"&&p.shortcut.trim().length>0&&Dn(p.shortcut);const vn=kc(p.theme);vn&&Pe(vn);const wa=kc(p.globalTheme);wa&&Ke(wa),typeof p.themeUseGlobalDefault=="boolean"&&Ze(p.themeUseGlobalDefault);const Dr=p.runtimeMode==="cloud"?"cloud":"local";typeof p.projectRoot=="string"?ot(p.projectRoot):Dr==="cloud"&&ot(""),typeof p.tenantId=="string"?tt(p.tenantId.trim()):Dr==="cloud"&&tt("");const Ga=Dr==="cloud"?String(p.projectName||"").trim():p.projectName||p.paths?.projectName||"";(String(Ga||"").trim().length>0||Dr==="cloud")&&jt(Ga),typeof p.mcpScript=="string"?Se(p.mcpScript):Dr==="cloud"&&Se(""),typeof p.hostRoot=="string"?Zn(p.hostRoot):Dr==="cloud"&&Zn(""),typeof p.jsonBackupEnabled=="boolean"&&ur(p.jsonBackupEnabled),typeof p.globalJsonBackupEnabled=="boolean"&&ha(p.globalJsonBackupEnabled),typeof p.jsonBackupUseGlobalDefault=="boolean"&&xr(p.jsonBackupUseGlobalDefault);const ir=p?.schedulePreferences?.weekStartsOn;(ir==="sunday"||ir==="monday")&&Oa(ir),typeof p.manualComplexityEnabled=="boolean"&&_r(p.manualComplexityEnabled),typeof p.checklistDropdownEnabled=="boolean"?Ra(p.checklistDropdownEnabled):Ra(!0),typeof p.showTaskCardStatusLabel=="boolean"?Cr(p.showTaskCardStatusLabel):Cr(!0)},[ua,On]),xd=a.useCallback(async()=>{const p=typeof performance<"u"?performance.now():Date.now();try{const z=await Ho("/api/taskforce/version",void 0,gm);if(!z.ok)return;const ee=await z.json().catch(()=>({}));ee?.build&&typeof ee.build=="object"&&Ca({version:String(ee.build.version||""),gitSha:ee.build.gitSha?String(ee.build.gitSha):null,buildTime:ee.build.buildTime?String(ee.build.buildTime):null,deployId:ee.build.deployId?String(ee.build.deployId):null}),Fn("build_info_loaded",{durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-p)})}catch(z){so(z)&&Es("Startup checks timed out.")}},[Ho,so,Es]),{fetchReferenceData:vs,fetchBootstrapConfig:Ao,fetchConfig:wn,fetchWorkspaces:Gs,fetchAssigneeOptions:To,switchWorkspace:pi,resolveWorkspaceAfterAuth:Kn,retryBootstrapChecks:oc}=Kk({shouldDeferProtectedApiCalls:Xt,shouldBlockProtectedApiCalls:on,getWorkspaceRequestState:$n,isWorkspaceRequestStale:Jn,isWorkspaceEpochStale:Ba,isAbortError:nt,isBootstrapTimeoutError:so,fetchWithTimeout:Ho,handleUnauthorized:Wr,applyBootstrapConfig:cl,loadPersistedUiState:ea,fetchBuildInfo:xd,markBootstrapPhase:Ds,markBootstrapStalled:Es,fetchWorkflows:zn,fetchInitiativeTemplates:Bn,loadAvailableEnvironments:Kt,setReferenceDataLoaded:Br,setCustomCategories:Li,setCustomTypes:Go,setPriorities:ls,setTaxonomies:yr,setTaxonomyDisplayLabels:Nn,setConfigLoaded:Bi,hasLoadedUiStateRef:rc,currentWorkspaceIdRef:Vt,referenceDataRequestRef:sc,referenceDataAbortRef:La,bootstrapConfigAbortRef:Ln,workspaceListAbortRef:qa,assigneeOptionsAbortRef:ra,workspaceListHydratedRef:xo,setAvailableWorkspaces:$e,runtimeMode:_e,applyResolvedWorkspaceId:ua,workspaceSwitchingEnabled:Ie,authSessionResolved:ln,isAuthenticated:ut,authUserId:Nt,setHydratedWorkspaceRole:An,setAssigneeOptions:qt,setAssigneeOptionsLoaded:Xr,commitCurrentWorkspaceId:(p,z)=>{_a.current=p,On(p,z),z?.clearExplicitSelection!==!1&&(_a.current=null)},currentWorkspaceId:G,workspaceSelectionScope:it,abortWorkspaceScopedRequests:Gn,setWorkspaceBootstrapPending:tn,checkAuthSession:hn,lastConfigRefreshKeyRef:ui,lastAssigneeOptionsLoadKeyRef:di,lastWorkspaceSyncStateLoadKeyRef:So,lastTaskSurfaceLoadKeyRef:ys,lastSettingsSurfaceLoadKeyRef:wo,isOpen:K,activeTab:L,showArchive:B,taskScope:xe,settingsSection:ze,fetchTasks:cn,fetchArchive:es,fetchPlanningEntities:en,refreshTaskCollections:Vo,loadWorkspaceSyncState:Fs,archiveBootstrapTimerRef:za,hasBootstrappedDataRef:_o}),Io=a.useCallback(async()=>{await hn(),await wn()},[hn,wn]);a.useEffect(()=>{if(!la||_t)return;const p=`${_e}:${ut?"auth":"guest"}:${G}`;Ms&&di.current===p||(di.current=p,To())},[Ms,la,G,To,ut,_e,_t]);const Lu=a.useMemo(()=>Ie?Ct.find(z=>z.id===G)?.role??null:Ma,[Ct,G,Ma,Ie]);a.useEffect(()=>{ut||An(null)},[ut]);const ll=a.useCallback(async()=>{if(pn(null),Ds("auth"),!await hn({force:!0}))return await wn({ignoreAuthGuard:!0}),{success:!1,destination:"login",error:"Sign in required.",code:"AUTH_REQUIRED"};if(Ie){const z=await Kn();if(!z.success)return await wn({ignoreAuthGuard:!0}),{success:!1,destination:"app",error:z.error||"Unable to resolve workspace after plan selection.",code:z.code};if(z.workspaceSetupRequired)return await wn({ignoreAuthGuard:!0}),{success:!0,destination:"setup"}}return await Ao(),await Promise.all([cn(!0,{ignoreAuthGuard:!0}),vs(),en()]),{success:!0,destination:"app"}},[hn,Ao,wn,en,vs,cn,Ds,Kn,Ie]),fi=a.useCallback(async(p,z)=>{if(!Ie)return{success:!1,error:"Workspace management is unavailable in local mode.",code:"WORKSPACE_MANAGEMENT_DISABLED"};const ee=String(p||"").trim();if(!ee)return{success:!1,error:"Workspace name is required."};try{const Y=await fetch("/api/taskforce/workspaces",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({name:ee,description:typeof z=="string"?z:void 0})}),et=await Y.json().catch(()=>({}));if(!Y.ok||et?.success===!1)return{success:!1,error:et?.error||`Failed to create workspace (${Y.status})`,code:et?.code};const Oe=et?.workspace;if(await Gs(),Oe?.id){const Je=await pi(Oe.id);if(!Je.success)return{success:!1,error:Je.error||"Workspace created but failed to activate.",code:Je.code}}return{success:!0,workspace:Oe}}catch{return{success:!1,error:"Failed to create workspace."}}},[Gs,pi,Ie]),_d=a.useCallback(async p=>{if(!Ie)return{success:!1,error:"Workspace management is unavailable in local mode.",code:"WORKSPACE_MANAGEMENT_DISABLED"};const z=String(p||"").trim();if(!z)return{success:!1,error:"workspaceId is required.",code:"WORKSPACE_ID_REQUIRED"};try{const ee=await fetch(`/api/taskforce/workspaces/${encodeURIComponent(z)}`,{method:"DELETE",credentials:"include"}),Y=await ee.json().catch(()=>({}));if(!ee.ok||Y?.success===!1)return{success:!1,error:Y?.error||`Failed to delete workspace (${ee.status})`,code:Y?.code};await hn({force:!0}),await Promise.all([wn(),Gs()]);const et=typeof Y?.nextWorkspaceId=="string"?Y.nextWorkspaceId.trim():"";return et&&On(et),{success:!0,nextWorkspaceId:et||void 0,workspaceSetupRequired:Y?.workspaceSetupRequired===!0,cleanupWarnings:Array.isArray(Y?.cleanupWarnings)?Y.cleanupWarnings.map(Oe=>String(Oe||"")):[]}}catch{return{success:!1,error:"Failed to delete workspace."}}},[hn,On,wn,Gs,Ie]),dl=a.useCallback(async p=>{const z=p==="operations"?"operations":"core";try{const ee=await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({setup:{mode:z}})}),Y=await ee.json().catch(()=>({}));return!ee.ok||Y?.success===!1?!1:(await Io(),!0)}catch{return!1}},[Io]),ul=a.useCallback(async p=>{const z=String(p?.name||"").trim(),ee=typeof p?.workspaceId=="string"?p.workspaceId.trim():"";if(!z)return{success:!1,error:"Workspace name is required.",code:"WORKSPACE_NAME_REQUIRED"};try{const Y=await fetch("/api/taskforce/workspace-profile",{method:"POST",headers:{"Content-Type":"application/json","x-taskforce-runtime-mode":_e},credentials:"include",body:JSON.stringify({workspaceId:ee&&ee!=="default"?ee:void 0,name:z,description:typeof p.description=="string"?p.description:void 0,allowCreate:!0})}),et=await Y.json().catch(()=>({}));if(!Y.ok||et?.success===!1)return{success:!1,error:et?.error||`Failed to save workspace (${Y.status})`,code:et?.code};const Oe=String(et?.workspace?.id||"").trim();if(Oe&&(On(Oe),await new Promise(Je=>window.setTimeout(Je,0)),_e==="cloud"&&ut&&Oe!==G)){const Je=await pi(Oe);if(!Je.success)return{success:!1,error:Je.error||"Workspace saved but failed to activate session workspace.",code:"WORKSPACE_SWITCH_FAILED"}}return await Io(),{success:!0,workspaceId:Oe||void 0}}catch{return{success:!1,error:"Failed to save workspace profile."}}},[On,Io,_e,ut,G,pi]),ml=a.useCallback(async(p,z)=>{if(!D)return{success:!1,error:"Cloud auth endpoint is not configured."};const ee=p.trim().toLowerCase(),Y=z;if(!ee||!Y)return{success:!1,error:"Email and password are required."};try{const et=await fetch(j("/api/taskforce/auth/login"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({email:ee,password:Y})}),Oe=await et.json().catch(()=>({}));if(!et.ok||!Oe?.success)return{success:!1,error:Oe?.error||"Sign in failed.",code:Oe?.code};ar(""),await hn({force:!0});const Je=await Kn();return Je.success?Je.workspaceSetupRequired?(await wn({ignoreAuthGuard:!0}),{success:!0,workspaceSetupRequired:!0}):(await Promise.all([wn({ignoreAuthGuard:!0}),cn(!0,{ignoreAuthGuard:!0})]),ts({preferCloudOnFirstSync:!0}),{success:!0}):{success:!1,error:Je.error||"Unable to resolve workspace after sign in.",code:Je.code}}catch{return{success:!1,error:"Sign in failed."}}},[hn,wn,cn,Kn,ts,j,D]),No=a.useCallback(async(p,z,ee)=>{if(!D)return{success:!1,error:"Cloud auth endpoint is not configured."};const Y=p.trim().toLowerCase(),et=z;if(!Y||!et)return{success:!1,error:"Email and password are required."};try{const Oe=await fetch(j("/api/taskforce/auth/register"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({email:Y,password:et,...typeof ee?.displayName=="string"&&ee.displayName.trim()?{displayName:ee.displayName.trim()}:{},...typeof ee?.planId=="string"&&ee.planId.trim()?{planId:ee.planId.trim()}:{},...typeof ee?.planVersionId=="string"&&ee.planVersionId.trim()?{planVersionId:ee.planVersionId.trim()}:{},...typeof ee?.interval=="string"&&ee.interval.trim()?{interval:ee.interval.trim()}:{}})}),Je=await Oe.json().catch(()=>({}));if(!Oe.ok||!Je?.success)return{success:!1,error:Je?.error||"Create account failed.",code:Je?.code,verificationRequired:!!Je?.verificationRequired,verificationToken:typeof Je?.verificationToken=="string"?Je.verificationToken:void 0,emailSent:Je?.emailSent!==!1,emailError:typeof Je?.emailError=="string"?Je.emailError:void 0};const bn=Je?.planSelectionRequired===!0,vn=Je?.checkoutPending===!0,wa=typeof Je?.commercialState=="string"?Je.commercialState:null,Dr=!!Je?.verificationRequired;if(!Dr){ar(""),await hn({force:!0});const Ga=await Kn();if(!Ga.success)return{success:!1,error:Ga.error||"Unable to resolve workspace after registration.",code:Ga.code};const ir=!!(bn||vn||wa==="pending_plan_selection"||wa==="checkout_pending");return Ga.workspaceSetupRequired||ir?await wn({ignoreAuthGuard:!0}):(await Promise.all([wn({ignoreAuthGuard:!0}),cn(!0,{ignoreAuthGuard:!0})]),ts({preferCloudOnFirstSync:!0})),{success:!0,workspaceSetupRequired:Ga.workspaceSetupRequired,planSelectionRequired:bn,checkoutPending:vn,commercialState:wa,verificationRequired:Dr,verificationToken:typeof Je?.verificationToken=="string"?Je.verificationToken:void 0,emailSent:Je?.emailSent!==!1,emailError:typeof Je?.emailError=="string"?Je.emailError:void 0}}return{success:!0,workspaceSetupRequired:!!Je?.workspaceSetupRequired,planSelectionRequired:bn,checkoutPending:vn,commercialState:wa,verificationRequired:Dr,verificationToken:typeof Je?.verificationToken=="string"?Je.verificationToken:void 0,emailSent:Je?.emailSent!==!1,emailError:typeof Je?.emailError=="string"?Je.emailError:void 0}}catch{return{success:!1,error:"Create account failed."}}},[hn,wn,cn,Kn,ts,j,D]),sr=a.useCallback(async p=>{if(!D)return{success:!1,error:"Cloud auth endpoint is not configured."};const z=String(p.displayName||"").trim(),ee=typeof p.avatarDraftId=="string"?p.avatarDraftId.trim():"",Y=p.clearAvatar===!0;if(!z)return{success:!1,error:"Display name is required."};try{const et=await fetch(j("/api/taskforce/auth/profile"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({displayName:z,...ee?{avatarDraftId:ee}:{},...Y?{clearAvatar:!0}:{}})}),Oe=await et.json().catch(()=>({}));if(!et.ok||!Oe?.success)return{success:!1,error:Oe?.error||"Failed to update profile.",code:Oe?.code};const Je={userId:typeof Oe?.profile?.userId=="string"?Oe.profile.userId:Nt,email:typeof Oe?.profile?.email=="string"?Oe.profile.email:Jt,displayName:typeof Oe?.profile?.displayName=="string"?Oe.profile.displayName:null,avatarUrl:typeof Oe?.profile?.avatarUrl=="string"?Oe.profile.avatarUrl:null};return Qt(Je.displayName||""),gn(Je.avatarUrl||""),{success:!0,profile:Je}}catch{return{success:!1,error:"Failed to update profile."}}},[j,D,Jt,Nt]),jo=a.useCallback(async p=>{if(!D)return{success:!1,error:"Cloud auth endpoint is not configured."};const z=p.trim().toLowerCase();if(!z)return{success:!1,error:"Email is required."};try{const ee=await fetch(j("/api/taskforce/auth/verify-email/request"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({email:z})}),Y=await ee.json().catch(()=>({}));return!ee.ok||!Y?.success?{success:!1,error:Y?.error||"Failed to request verification email.",code:Y?.code}:{success:!0,verificationToken:Y?.verificationToken??null,emailSent:Y?.emailSent!==!1,emailError:typeof Y?.emailError=="string"?Y.emailError:void 0}}catch{return{success:!1,error:"Failed to request verification email."}}},[j,D]),Bu=a.useCallback(async p=>{if(!D)return{success:!1,error:"Cloud auth endpoint is not configured."};const z=p.trim();if(!z)return{success:!1,error:"Token is required."};try{const ee=await fetch(j("/api/taskforce/auth/verify-email/confirm"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({token:z})}),Y=await ee.json().catch(()=>({}));return!ee.ok||!Y?.success?{success:!1,error:Y?.error||"Verification failed.",code:Y?.code}:{success:!0}}catch{return{success:!1,error:"Verification failed."}}},[j,D]),Cd=a.useCallback(async p=>{if(!D)return{success:!1,error:"Cloud auth endpoint is not configured."};const z=p.trim().toLowerCase();if(!z)return{success:!1,error:"Email is required."};try{const ee=await fetch(j("/api/taskforce/auth/password-reset/request"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({email:z})}),Y=await ee.json().catch(()=>({}));return!ee.ok||!Y?.success?{success:!1,error:Y?.error||"Failed to request password reset.",code:Y?.code}:{success:!0,resetToken:Y?.resetToken??null,emailSent:Y?.emailSent!==!1,emailError:typeof Y?.emailError=="string"?Y.emailError:void 0}}catch{return{success:!1,error:"Failed to request password reset."}}},[j,D]),Wu=a.useCallback(async(p,z)=>{if(!D)return{success:!1,error:"Cloud auth endpoint is not configured."};const ee=p.trim(),Y=z;if(!ee||!Y)return{success:!1,error:"Token and password are required."};try{const et=await fetch(j("/api/taskforce/auth/password-reset/confirm"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({token:ee,password:Y})}),Oe=await et.json().catch(()=>({}));return!et.ok||!Oe?.success?{success:!1,error:Oe?.error||"Failed to reset password.",code:Oe?.code}:{success:!0}}catch{return{success:!1,error:"Failed to reset password."}}},[j,D]),pl=a.useCallback(async p=>{if(!D)return{success:!1,error:"Cloud auth endpoint is not configured."};const z=p.trim();if(!z)return{success:!1,error:"Token is required."};try{const ee=await fetch(j("/api/taskforce/auth/invite/inspect"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({token:z})}),Y=await ee.json().catch(()=>({}));return!ee.ok||!Y?.success?{success:!1,error:Y?.error||"Invite inspection failed.",code:Y?.code,state:Y?.state}:{success:!0,state:Y?.state,email:typeof Y?.email=="string"?Y.email:void 0,workspaceId:typeof Y?.workspaceId=="string"?Y.workspaceId:void 0,inviteeKind:Y?.inviteeKind==="existing_user"?"existing_user":"new_user",passwordRequired:Y?.passwordRequired===!0}}catch{return{success:!1,error:"Invite inspection failed."}}},[j,D]),Fu=a.useCallback(async(p,z)=>{if(!D)return{success:!1,error:"Cloud auth endpoint is not configured."};const ee=p.trim(),Y=z;if(!ee||!Y)return{success:!1,error:"Token and password are required."};try{const et=await fetch(j("/api/taskforce/auth/invite/accept"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({token:ee,password:Y})}),Oe=await et.json().catch(()=>({}));if(!et.ok||!Oe?.success)return{success:!1,error:Oe?.error||"Invite acceptance failed.",code:Oe?.code};ar(""),await hn({force:!0});const Je=typeof Oe?.workspaceId=="string"?Oe.workspaceId:null,bn=await Kn({preferredWorkspaceId:Je});return bn.success?bn.workspaceSetupRequired?{success:!0,workspaceSetupRequired:!0}:(await Promise.all([wn({ignoreAuthGuard:!0}),cn(!0,{ignoreAuthGuard:!0})]),ts({preferCloudOnFirstSync:!0}),{success:!0}):{success:!1,error:bn.error||"Unable to resolve workspace after invite acceptance.",code:bn.code}}catch{return{success:!1,error:"Invite acceptance failed."}}},[hn,wn,cn,Kn,ts,j,D]),jr=a.useCallback(async p=>{if(!D)return{success:!1,error:"Cloud auth endpoint is not configured."};const z=p.trim();if(!z)return{success:!1,error:"Token is required."};try{const ee=await fetch(j("/api/taskforce/auth/invite/join"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({token:z})}),Y=await ee.json().catch(()=>({}));if(!ee.ok||!Y?.success)return{success:!1,error:Y?.error||"Invite join failed.",code:Y?.code};ar(""),await hn();const et=typeof Y?.workspaceId=="string"?Y.workspaceId:null,Oe=await Kn({preferredWorkspaceId:et});return Oe.success?Oe.workspaceSetupRequired?{success:!0,workspaceSetupRequired:!0}:(await Promise.all([wn({ignoreAuthGuard:!0}),cn(!0,{ignoreAuthGuard:!0})]),ts({preferCloudOnFirstSync:!0}),{success:!0}):{success:!1,error:Oe.error||"Unable to resolve workspace after invite join.",code:Oe.code}}catch{return{success:!1,error:"Invite join failed."}}},[hn,wn,cn,Kn,ts,j,D]),Ad=a.useCallback(()=>{Gn(),sc.current=null,Hs.current="",di.current="",ui.current="",So.current="",ys.current="",wo.current="",mi(!1),Br(!1),qt(Wo()),Xr(!1),Ns([]),Zr([]),Nr([]),$o([]),Uo([]),qr(!1),Ea.current!==null&&typeof window<"u"&&(window.clearTimeout(Ea.current),Ea.current=null),za.current!==null&&typeof window<"u"&&(window.clearTimeout(za.current),za.current=null)},[Gn,Nr,Zr]),Rr=a.useCallback(async()=>{try{D&&await fetch(j("/api/taskforce/auth/logout"),{method:"POST",credentials:"include"})}catch{}finally{if(Gn(),cr.current+=1,Rn.current=null,Ht.current=!1,dn.current=Date.now(),Mt(!1),Ot(!0),Ft("anonymous"),Bt(""),Ll(null),mn(""),Qt(""),gn(""),Xl("disconnected"),Bs(null),Gt(!0),jt(""),Bi(!1),Br(!1),kn(null),Mn("idle"),pn(null),rc.current=!1,_e!=="local"&&Ep(it),dt(_e==="cloud"&&je),On("default"),$e([]),xo.current=!1,An(null),_e==="local"){await Promise.allSettled([wn({ignoreAuthGuard:!0}),cn(!0,{ignoreAuthGuard:!0}),en({ignoreAuthGuard:!0}),vs({ignoreAuthGuard:!0,force:!0})]);return}_o.current=!1,Ad()}},[Gn,je,Ep,On,j,D,it,_e,wn,en,vs,cn,Ad]),fl=a.useCallback(async p=>{try{const z=await fetch("/api/taskforce/initiative-templates/create",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(p)}),ee=await z.json().catch(()=>({}));return!z.ok||!ee?.success?{success:!1,error:ee?.error||`Create failed (${z.status})`}:(await cn(!0),{success:!0,result:ee?.results})}catch(z){return{success:!1,error:z.message}}},[cn]),Td=a.useCallback(async p=>{const z=await fetch("/api/taskforce/initiative",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(p||{})}),ee=await z.json().catch(()=>({}));if(!z.ok)throw new Error(ee?.error||`Failed to create initiative (${z.status})`);return await en(),ee},[en]),ic=a.useCallback(async(p,z)=>{const ee=await fetch(`/api/taskforce/initiative/${encodeURIComponent(p)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(z||{})}),Y=await ee.json().catch(()=>({}));if(!ee.ok)throw new Error(Y?.error||`Failed to update initiative (${ee.status})`);return await en(),Y},[en]),hi=a.useCallback(async p=>{const z=await fetch(`/api/taskforce/initiative/${encodeURIComponent(p)}/archive`,{method:"POST"}),ee=await z.json().catch(()=>({}));if(!z.ok)throw new Error(ee?.error||`Failed to archive initiative (${z.status})`);return await en(),ee},[en]),hl=a.useCallback(async p=>{const z=await fetch(`/api/taskforce/initiative/${encodeURIComponent(p)}/unarchive`,{method:"POST"}),ee=await z.json().catch(()=>({}));if(!z.ok)throw new Error(ee?.error||`Failed to unarchive initiative (${z.status})`);return await en(),ee},[en]),gl=a.useCallback(async p=>{const z=await fetch("/api/taskforce/workstream",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(p||{})}),ee=await z.json().catch(()=>({}));if(!z.ok)throw new Error(ee?.error||`Failed to create workstream (${z.status})`);return await en(),ee},[en]),Ou=a.useCallback(async(p,z)=>{const ee=await fetch(`/api/taskforce/workstream/${encodeURIComponent(p)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(z||{})}),Y=await ee.json().catch(()=>({}));if(!ee.ok)throw new Error(Y?.error||`Failed to update workstream (${ee.status})`);return await en(),Y},[en]),Ro=a.useCallback(async p=>{const z=await fetch(`/api/taskforce/workstream/${encodeURIComponent(p)}/archive`,{method:"POST"}),ee=await z.json().catch(()=>({}));if(!z.ok)throw new Error(ee?.error||`Failed to archive workstream (${z.status})`);return await en(),ee},[en]),cc=a.useCallback(async p=>{const z=await fetch(`/api/taskforce/workstream/${encodeURIComponent(p)}/unarchive`,{method:"POST"}),ee=await z.json().catch(()=>({}));if(!z.ok)throw new Error(ee?.error||`Failed to unarchive workstream (${z.status})`);return await en(),ee},[en]),yl=a.useRef(!1);a.useEffect(()=>{ue(!0),!yl.current&&(yl.current=!0,hn())},[hn]),a.useEffect(()=>{W&&hn()},[W,hn]),a.useEffect(()=>{if(_e!=="local"||!se||typeof window>"u")return;const p=()=>{hn()},z=()=>{document.visibilityState==="visible"&&p()};window.addEventListener("focus",p),window.addEventListener("online",p),document.addEventListener("visibilitychange",z);const ee=window.setInterval(p,3e4);return()=>{window.removeEventListener("focus",p),window.removeEventListener("online",p),document.removeEventListener("visibilitychange",z),window.clearInterval(ee)}},[_e,se,hn]),a.useEffect(()=>{Xt||on||_o.current||(_o.current=!0,(async()=>{if(_e==="cloud"&&ln&&ut){const p=await Kn();if(!p.success||p.workspaceSetupRequired){await Ao(),vs();return}}await Ao(),await Promise.all([(async()=>{const p=typeof performance<"u"?performance.now():Date.now();await cn(!1),Fn("bootstrap_tasks_loaded",{durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-p)})})(),vs(),en()]),typeof window<"u"&&(za.current!==null&&window.clearTimeout(za.current),za.current=window.setTimeout(()=>{za.current=null;const p=typeof performance<"u"?performance.now():Date.now();es(!0).then(()=>{Fn("bootstrap_archive_loaded_deferred",{durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-p)})})},1500))})())},[Xt,on,_e,ln,ut,Kn,Ao,cn,es,vs,en]),a.useEffect(()=>{if(Xt||on||_t||it===Fo||!_o.current)return;const p=`${_e}:${G}:${it}`;ui.current!==p&&(ui.current=p,wn())},[G,Xt,on,_t,_e,it,wn]),a.useEffect(()=>{if(Xt||on||_t)return;const p=G;So.current!==p&&(So.current=p,Fs())},[Xt,on,G,Fs,_t]),a.useEffect(()=>{if(_e!=="cloud"||!ln||!ut){_e!=="cloud"&&$e([]),xo.current=!1;return}_t||!_o.current||xo.current||Gs()},[_e,ln,ut,Gs,_t]),a.useEffect(()=>{r&&r(In.length)},[In.length,r]),a.useEffect(()=>{if(n&&In.length>0){const p=In.find(z=>z.id.endsWith(n)||z.id===n);p&&(uc(p),vi("add"))}},[n,In]);const vl=a.useRef(!1);a.useEffect(()=>{if(!la)return;if(!vl.current&&un.length>0){vl.current=!0;const z=fo,ee=un.some(Y=>Y.label===z||Y.value===z);if(z&&ee){const Y=un.find(et=>et.label===z||et.value===z);uo(Y?.value||z)}else uo(Yr(un));return}const p=un.some(z=>z.value===Jo);un.length>0&&!p&&uo(Yr(un))},[la,un,Jo,Yr,fo]),a.useEffect(()=>{if(!la||un.length===0)return;const p=Y=>!un.some(et=>et.value===Y.category),z=In.some(p),ee=Wn.some(p);if(z||ee){const Y=Yr(un);z&&Zr(et=>et.map(Oe=>p(Oe)?{...Oe,category:Y}:Oe)),ee&&Nr(et=>et.map(Oe=>p(Oe)?{...Oe,category:Y}:Oe))}},[la,un,In,Wn,Yr]),a.useEffect(()=>()=>{za.current!==null&&typeof window<"u"&&(window.clearTimeout(za.current),za.current=null),Ea.current!==null&&typeof window<"u"&&(window.clearTimeout(Ea.current),Ea.current=null)},[]),a.useEffect(()=>{},[Vo]);const $u=a.useCallback(async()=>{await Zo()},[Zo]),Do=String(G||"").trim(),ks=String(Nt||"").trim(),gi=ae("/taskforce-ws"),kr=!!(D&&_e==="cloud"&&ln&&ut&&ks&&ks!=="anonymous"&&Do&&!Zm(Do)&&gi),yi=a.useCallback(()=>{_e==="cloud"&&(Zo(),!(typeof window>"u")&&(Ea.current!==null&&window.clearTimeout(Ea.current),Ea.current=window.setTimeout(()=>{Ea.current=null,Zo()},250)))},[_e,Zo]);ah({enabled:kr,workspaceId:Do,websocketUrl:gi,onSignal:yi,userId:ks||void 0}),Yk({isOpen:K,authBlocked:ct,authRequiredForApi:je,isAuthenticated:ut,canCallProtectedApi:rn.canCallProtectedApi,shouldGateProtectedApiCalls:F,authSessionResolvedRef:nc,authRequiredForApiRef:Ha,isAuthenticatedRef:ac,dataVersionRef:Nu,refreshTaskCollectionsForDataVersion:$u});const Vs=a.useMemo(()=>{const p=new Map;for(const z of Wn)p.set(z.id,z);for(const z of In)p.set(z.id,z);return Array.from(p.values())},[In,Wn]),Id=a.useMemo(()=>Is.map(p=>({...p.taskSnapshot,isDeleted:!0,deletedRecordId:p.id})),[Is]);a.useEffect(()=>{if(!(Xt||on)&&K&&!_t){if(L==="tasks"){const p=`${G}:${L}:${B?"archive":"active"}:${xe}`;if(!ko.current){ko.current=!0,ys.current=p;return}if(ys.current===p)return;ys.current=p,cn(),(B||xe==="archived")&&es(!0),xe==="deleted"&&vr();return}if(L==="settings"){const p=`${G}:${L}:${ze}`;if(wo.current===p)return;wo.current=p,wn(),(ze==="commands"||ze==="resources")&&zn()}}},[G,K,L,ze,B,xe,cn,es,vr,wn,zn,Xt,on,_t]);const Nd=a.useCallback(async(p="")=>{try{const z=await fetch(`/api/taskforce/folders?path=${encodeURIComponent(p)}`);if(z.ok){const ee=await z.json();Ue(ee.folders||[]),Wt(ee.files||[]),It(p)}}catch(z){console.error("[Taskforce] Failed to fetch folders:",z)}},[]),kl=a.useCallback(p=>{const z=[];if(p.path&&z.push(p.path),p.paths&&p.paths.length>0)for(const ee of p.paths)z.includes(ee)||z.push(ee);return z},[]),{validatePaths:op,handleUpdateCategory:lc,handleSaveCategory:Sl,handleAddPath:jd,handleUpdateCategoryIcon:Rd,handleUpdateCategoryColor:dc,handleRemovePath:Dd,handleSelectPath:Ss,handleRemoveCategory:Ed,handleSaveType:wl,handleRemoveType:Pd,handleUpdateType:bl,handleUpdateTaxonomies:as,handleUpdatePriorities:Md,analyzeSystemTaxonomyPack:Uu,handleApplySystemTaxonomyPack:zu}=hk({activeCategories:un,activeTab:L,activeTypes:Qn,archivedTasks:Wn,browserTarget:Xe,category:Jo,configLoaded:la,customCategories:js,refreshTaskCollections:Vo,fetchTasks:cn,filterCategories:ri,getCategoryPaths:kl,normalizePath:ro,pathValidation:Rs,setBrowserTarget:gt,setCategory:uo,setCustomCategories:Li,setCustomTypes:Go,setFilterCategories:si,setPathValidation:Pc,setPriorities:ls,setShowFolderBrowser:H,setTaxonomies:yr,tasks:In}),Ld=a.useCallback(async p=>{const z=nr,ee={...z,...p};Nn(ee);try{const Y=await fetch("/api/taskforce/taxonomy-display-labels",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({displayLabels:p})});if(!Y.ok)throw new Error(`Failed to save taxonomy display labels (${Y.status})`);const et=await Y.json().catch(()=>({}));et?.displayLabels&&typeof et.displayLabels=="object"&&Nn({...ee,...et.displayLabels})}catch(Y){console.error("[Taskforce] Failed to update taxonomy display labels",Y),Nn(z)}},[nr]),vi=a.useCallback(p=>{L==="tasks"&&ca.current&&ms(ca.current.scrollTop),de(p)},[L]),Sr=a.useRef(async()=>{}),{handleNavigation:Bd,handleClose:ki,resetForm:or,resolveWorkstreamIdInput:Wd,handleEdit:uc,handleOpenTaskById:Hu,returnToPreviousTask:Gu,clearReturnToParentTask:Vu}=_k({activeCategories:un,activeTypes:Qn,activeTab:L,attachments:yo,checklistItems:rr,comments:po,description:Vc,editingTaskId:$a,flushPendingAutoSave:()=>Sr.current(),getPreferredCategoryValue:Yr,lastUsedCategory:fo,newCommentText:cd,relationshipTasks:Vs,workstreams:ps,showArchive:B,taxonomies:Ua,setActiveTab:vi,setApproach:Gi,setAssignee:ei,setAttachments:li,setAttachmentsDirty:vo,setCategory:uo,setChecklistItems:Hn,setComments:Zc,setComplexity:$c,setDescription:id,setDueDate:zc,setEditingTaskId:Rc,setError:ar,setFormTaxonomies:dd,setIsOpen:ue,setNewCommentText:$s,setPendingNavigation:Ne,setWorkstreamInput:Hc,setPriority:Xo,setScheduledDate:kt,setShowArchive:re,setStatus:Hi,setTaskReturnTrail:Ir,setTitle:Gc,setType:mo,setUnsavedModalOpen:Tr,taskReturnTrail:We,title:ti}),{copiedId:Si,handleDelete:rs,handleUpdateTask:Eo,handleToggleComplete:mc,handleToggleCancel:Zs,handleToggleInProgress:pc,handleToggleReview:xl,handleArchiveTask:fc,handleBulkArchive:wi,handleUnarchive:Zu,handleRestoreDeletedTask:_l,handlePermanentlyDeleteDeletedTask:qu,handleEmptyDeletedTasks:Cl,handleCopyId:Fd,queueWorkspaceSyncFromAuthoritativeTaskState:Al}=Ok({tasks:In,archivedTasks:Wn,editingTaskId:$a,setTasks:Zr,setArchivedTasks:Nr,setDeletedTasks:Ns,setError:ar,resetForm:or,setActiveTab:vi,fetchTasks:cn,fetchArchive:es,fetchDeletedTasks:vr,mergeTaskFromServer:Qr,pushNotice:ht,cloudAuthConfigured:D,runtimeMode:_e,isAuthenticated:ut,workspaceCloudSyncEnabled:Ko,buildWorkspaceSyncSignature:ad,pushWorkspaceChangesToCloud:co,workspacePendingSignatureRef:Ws,workspaceDeletedTaskIdsRef:qn}),{autoSaveState:ws,flushAutoSave:Tl,scheduleWarningPrompt:Od,handleSubmit:hc,confirmScheduleWarning:Ku,cancelScheduleWarning:Yu,handleAddComment:Ju}=Bk({activeCategories:un,activeTab:L,apiEndpoint:u,approach:od,assignee:Qo,attachments:yo,attachmentsDirty:sl,category:Jo,checklistItems:rr,comments:po,complexity:Oc,description:Vc,dueDate:Uc,editingTaskId:$a,fetchTasks:cn,formTaxonomies:ld,getPreferredCategoryValue:Yr,mergeTaskFromServer:Qr,workstreamInput:Ur,priority:zi,pushNotice:ht,queueWorkspaceSyncFromAuthoritativeTaskState:Al,relationshipTasks:Vs,resetForm:or,resolveWorkstreamIdInput:Wd,scheduledDate:Vi,setActiveTab:vi,setAttachmentsDirty:vo,setComments:Zc,setError:ar,setLastUsedCategory:ni,setLoading:oo,setNewCommentText:$s,status:Os,title:ti,taxonomies:Ua,type:ka});a.useEffect(()=>{Sr.current=Tl},[Tl]);const{handleSetWorkstreamForCurrentTask:Xu}=Wk({editingTaskId:$a,mergeTaskFromServer:Qr,workstreamInput:Ur,pushNotice:ht,queueWorkspaceSyncFromAuthoritativeTaskState:Al,relationshipTasks:Vs,resolveWorkstreamIdInput:Wd,setError:ar,fetchTasks:cn}),{currentTask:Po,currentTaskWorkstream:gc,currentTaskInitiative:Il}=Sk({editingTaskId:$a,relationshipTasks:Vs,initiatives:tr,workstreams:ps,supplementalTasks:Id,setComments:Zc}),Nl=pk({resolveCloudAuthUrl:j,currentWorkspaceId:G,normalizedCloudAuthBaseUrl:be,normalizedCloudMcpBaseUrl:Re,mergedConfig:o,availableWorkspaces:Ct,currentTheme:ye,configLoaded:la,globalTheme:vt,themeUseGlobalDefault:bt,keyShortcut:Aa,jsonBackupEnabled:fa,globalJsonBackupEnabled:Vn,globalWeekStartsOn:ja,locale:Ia,supportedLocales:Na,jsonBackupUseGlobalDefault:Sn,manualComplexityEnabled:mr,checklistDropdownEnabled:Ya,showTaskCardStatusLabel:ia,exportWorkflowsPath:qe,exportingResource:Xa,exportResult:Qa,pathSaved:St,settingsSection:ze,exportEnvironment:us,setupState:Tn,buildInfo:pa,saveSetupMode:dl,saveWorkspaceProfile:ul,setCurrentTheme:Pe,handleSaveTheme:ol,handleSaveGlobalTheme:Co,setKeyShortcut:Dn,handleJsonBackupEnabledChange:ju,handleSaveGlobalJsonBackupEnabled:Ru,handleSaveGlobalWeekStartsOn:wd,handleSaveLocale:bd,handleManualComplexityEnabledChange:Du,handleChecklistDropdownEnabledChange:Eu,handleShowTaskCardStatusLabelChange:Pu,handleResetProjectToGlobal:Mu,handleSaveSettings:Sd,setExportWorkflowsPath:En,setExportEnvironment:V,availableWorkflows:Xn,initiativeTemplates:Un,availableEnvironments:ft,fetchWorkflows:zn,fetchInitiativeTemplates:Bn,createInitiativeFromTemplate:fl,fetchWorkflowTemplate:fr,fetchWorkflowOverrideNames:Be,saveWorkflowTemplateDraft:Et,resetWorkflowTemplateDraft:_n,handleExportWorkflows:Vr,setShowFolderBrowser:H,setBrowserTarget:gt,fetchFolders:Nd,activeCategories:un,pathValidation:Rs,taxonomyDisplayLabels:nr,handleUpdateCategory:lc,handleRemoveCategory:Ed,handleSaveCategory:Sl,handleAddPath:jd,handleRemovePath:Dd,handleUpdateCategoryIcon:Rd,handleUpdateCategoryColor:dc,activeTypes:Qn,handleSaveType:wl,handleRemoveType:Pd,handleUpdateType:bl,taxonomies:Ua,handleUpdateTaxonomies:as,priorities:Ta,handleUpdatePriorities:Md,analyzeSystemTaxonomyPack:Uu,handleApplySystemTaxonomyPack:zu,handleUpdateTaxonomyDisplayLabels:Ld,projectRoot:Ve,projectName:xt,mcpHostRoot:dr,serverHostRoot:Ar,mcpScriptPath:q,tenantId:wt,runtimeMode:_e,workspaceSwitchingEnabled:Ie,deleteWorkspace:_d,setMcpHostRoot:ds,isAuthenticated:ut});a.useEffect(()=>{typeof window<"u"&&(window.__TASKFORCE_DEBUG__={tasks:In,archivedTasks:Wn,runtimeMode:_e,currentWorkspaceId:G,isAuthenticated:ut,workspaceCloudSyncEnabled:Ko,realtimeSyncEnabled:ma,fetchTasks:cn,fetchArchive:es,retryWorkspaceCloudSync:Ui,resetWorkspaceSyncCursorAndPull:lo,getSyncDiagnostics:va,__dispatch:{handleUpdateTask:Eo,handleToggleComplete:mc,handleArchiveTask:fc,handleToggleCancel:Zs,handleToggleInProgress:pc,handleToggleReview:xl,handleSubmit:hc,handleDelete:rs}})},[In,Wn,_e,G,ut,Ko,ma,cn,es,Ui,lo,va,Eo,mc,fc,Zs,pc,xl,hc,rs]);const $d=rt&&rt.tone!=="error"?{message:rt.message,type:"info"}:null,bs=String(S||b.wsBaseUrl||he||"").trim().replace(/\/+$/,"");return{config:{...o,cloudEnvironment:b.cloudEnvironment||o.cloudEnvironment||"",apiBaseUrl:he||o.apiBaseUrl,cloudAuthBaseUrl:be||o.cloudAuthBaseUrl,wsBaseUrl:bs||o.wsBaseUrl},isOpen:K,setIsOpen:ue,activeTab:L,setActiveTab:vi,currentTheme:ye,setCurrentTheme:Pe,configLoaded:la,storagePath:Qe,saveSettings:Sd,pathSaved:St,keyShortcut:Aa,setKeyShortcut:Dn,globalWeekStartsOn:ja,locale:Ia,supportedLocales:Na,saveLocale:bd,jsonBackupEnabled:fa,setJsonBackupEnabled:ur,manualComplexityEnabled:mr,checklistDropdownEnabled:Ya,showTaskCardStatusLabel:ia,setManualComplexityEnabled:_r,mcpHostRoot:dr,setMcpHostRoot:ds,settingsSection:ze,setSettingsSection:Ye,runtimeMode:_e,workspaceMode:Ce,workspaceSwitchingEnabled:Ie,cloudAuthConfigured:D,authRequiredForApi:je,authBlocked:ct,isAuthenticated:ut,authUserId:Nt,authUserEmail:Jt,authUserDisplayName:Pn,authUserAvatarUrl:Rt,authWorkspaceId:Yt,userGlobalSyncStatus:qo,workspaceLastPullAt:Cu,workspaceLastPushAt:ed,workspaceLastErrorAt:td,userGlobalSyncError:Ql,workspaceLastErrorMessage:nd,workspaceLastSuccessfulSyncAt:Lc,workspaceSyncPhase:Bc,workspaceSyncStatus:io,workspaceSyncSummary:Yo,workspaceSyncRecommendedAction:Oi,workspaceSyncBusy:Wc,workspaceSyncPendingChanges:$i,retryUserGlobalSettingsSync:sd,retryWorkspaceCloudSync:Ui,resetWorkspaceSyncCursorAndPull:lo,getWorkspaceSyncDiagnostics:va,hasBetaAccess:jn,realtimeSyncEnabled:ma,realtimeSyncFlagSource:Dt,currentWorkspaceId:G,currentWorkspaceRole:Lu,availableWorkspaces:Ct,assigneeOptions:Ut,workspaceCloudSyncEnabled:Ko,saveWorkspaceCloudSyncSettings:rd,applyWorkspaceSyncStateSnapshot:Fc,authSessionResolved:ln,workspaceBootstrapPending:_t,bootstrapPhase:ta,bootstrapError:yn,bootstrapStartedAt:zt,setupState:Tn,runtimeCapabilities:Wa,refreshSetupContext:Io,retryBootstrapChecks:oc,continueAfterCommercialOnboarding:ll,saveWorkspaceProfile:ul,fetchWorkspaces:Gs,createWorkspace:fi,deleteWorkspace:_d,switchWorkspace:pi,loginWithCredentials:ml,registerWithCredentials:No,updateCurrentUserProfile:sr,requestEmailVerification:jo,confirmEmailVerification:Bu,requestPasswordReset:Cd,confirmPasswordReset:Wu,inspectInviteAcceptance:pl,acceptInviteWithToken:Fu,joinInviteWithToken:jr,logout:Rr,showFolderBrowser:Me,setShowFolderBrowser:H,folders:c,files:At,currentBrowsePath:Tt,fetchFolders:Nd,browserTarget:Xe,setBrowserTarget:gt,groupBy:Qc,setGroupBy:Qi,activeWorkspaceModule:tc,setActiveWorkspaceModule:ii,emptyColumnMode:Sa,setEmptyColumnMode:el,zenMode:nn,setZenMode:Gr,handleSelectPath:Ss,handleAddPath:jd,handleRemovePath:Dd,tasks:In,loadingTasks:zo,archivedTasks:Wn,initiatives:tr,workstreams:ps,deletedTasks:Is,activeCategories:un,activeTypes:Qn,priorities:Ta,taxonomyDisplayLabels:nr,approaches:oa,taxonomies:Ua,searchQuery:Us,setSearchQuery:ai,filterCategories:ri,setFilterCategories:si,filterTypes:ho,setFilterTypes:ns,filterPriorities:Kc,setFilterPriorities:ud,filterStatus:Da,setFilterStatus:go,filterAssignees:zs,setFilterAssignees:qi,filterTaxonomies:oi,setFilterTaxonomies:md,sortBy:Yi,setSortBy:gs,sortOrder:Ji,setSortOrder:Xi,toggleSortOrder:pd,showArchive:B,setShowArchive:re,taskScope:xe,setTaskScope:Ee,clearFilters:tl,filteredTasks:gd,searchAgnosticTasks:nl,filteredArchive:al,groupedTasks:ec,collapsedCategories:fd,setCollapsedCategories:hd,fetchTasks:cn,fetchArchive:es,fetchDeletedTasks:vr,fetchPlanningEntities:en,fetchAssigneeOptions:To,createInitiative:Td,updateInitiative:ic,archiveInitiative:hi,unarchiveInitiative:hl,createWorkstream:gl,updateWorkstream:Ou,archiveWorkstream:Ro,unarchiveWorkstream:cc,handleEdit:uc,handleDelete:rs,handleCopyId:Fd,handleToggleComplete:mc,handleToggleCancel:Zs,handleToggleInProgress:pc,handleToggleReview:xl,handleArchiveTask:fc,handleBulkArchive:wi,handleUnarchive:Zu,handleRestoreDeletedTask:_l,handlePermanentlyDeleteDeletedTask:qu,handleEmptyDeletedTasks:Cl,handleUpdateTask:Eo,editingTaskId:$a,loading:Lr,error:ga,title:ti,setTitle:Gc,description:Vc,setDescription:id,checklistItems:rr,setChecklistItems:Hn,category:Jo,setCategory:uo,type:ka,setType:mo,priority:zi,setPriority:Xo,complexity:Oc,setComplexity:$c,status:Os,setStatus:Hi,approach:od,setApproach:Gi,assignee:Qo,setAssignee:ei,scheduledDate:Vi,setScheduledDate:kt,dueDate:Uc,setDueDate:zc,workstreamInput:Ur,setWorkstreamInput:Hc,formTaxonomies:ld,setFormTaxonomies:dd,comments:po,newCommentText:cd,setNewCommentText:$s,attachments:yo,setAttachments:li,attachmentsDirty:sl,setAttachmentsDirty:vo,descriptionFocused:Tu,setDescriptionFocused:vd,showMarkdownHelp:Dc,setShowMarkdownHelp:Ec,showChecklist:qc,setShowChecklist:Zi,showComments:Au,setShowComments:rl,isCapturingScreenshot:Iu,setIsCapturingScreenshot:ci,handleSubmit:hc,resetForm:or,handleAddComment:Ju,handleSetWorkstreamForCurrentTask:Xu,handleOpenTaskById:Hu,returnToPreviousTask:Gu,autoSaveState:ws,unsavedModalOpen:Ts,setUnsavedModalOpen:Tr,pendingNavigation:A,handleNavigation:Bd,handleClose:ki,uiNotice:rt,pushNotice:ht,clearNotice:$,successBanner:$d,taskReturnTrail:We,clearReturnToParentTask:Vu,copiedId:Si,recentlyChangedTaskIds:Ls,scheduleWarningPrompt:Od,confirmScheduleWarning:Ku,cancelScheduleWarning:Yu,tasksScrollRef:ca,setTasksScrollPos:ms,exportEnvironment:us,setExportEnvironment:V,exportWorkflowsPath:qe,setExportWorkflowsPath:En,exportResult:Qa,exportingResource:Xa,handleUpdateCategory:lc,handleRemoveCategory:Ed,handleSaveCategory:Sl,handleUpdateCategoryIcon:Rd,handleUpdateCategoryColor:dc,handleSaveType:wl,handleRemoveType:Pd,handleUpdateType:bl,handleUpdateTaxonomies:as,handleUpdatePriorities:Md,handleUpdateTaxonomyDisplayLabels:Ld,pathValidation:Rs,validatePaths:op,getCategoryPaths:kl,customCategories:js,setCustomCategories:Li,projectRoot:Ve,projectName:xt,mcpScriptPath:q,serverHostRoot:Ar,commentsEndRef:zr,currentTask:Po,currentTaskWorkstream:gc,currentTaskInitiative:Il,availableWorkflows:Xn,initiativeTemplates:Un,availableEnvironments:ft,fetchWorkflows:zn,fetchInitiativeTemplates:Bn,createInitiativeFromTemplate:fl,fetchWorkflowTemplate:fr,fetchWorkflowOverrideNames:Be,saveWorkflowTemplateDraft:Et,resetWorkflowTemplateDraft:_n,onExportWorkflows:Vr,settingsModel:Nl}}const Qk="modulepreload",eS=function(e){return"/taskforce/"+e},Vp={},Oo=function(n,r,s){let o=Promise.resolve();if(r&&r.length>0){let f=function(k){return Promise.all(k.map(x=>Promise.resolve(x).then(S=>({status:"fulfilled",value:S}),S=>({status:"rejected",reason:S}))))};document.getElementsByTagName("link");const i=document.querySelector("meta[property=csp-nonce]"),u=i?.nonce||i?.getAttribute("nonce");o=f(r.map(k=>{if(k=eS(k),k in Vp)return;Vp[k]=!0;const x=k.endsWith(".css"),S=x?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${k}"]${S}`))return;const v=document.createElement("link");if(v.rel=x?"stylesheet":Qk,x||(v.as="script"),v.crossOrigin="",v.href=k,u&&v.setAttribute("nonce",u),document.head.appendChild(v),x)return new Promise((g,w)=>{v.addEventListener("load",g),v.addEventListener("error",()=>w(new Error(`Unable to preload CSS for ${k}`)))})}))}function d(i){const u=new Event("vite:preloadError",{cancelable:!0});if(u.payload=i,window.dispatchEvent(u),!u.defaultPrevented)throw i}return o.then(i=>{for(const u of i||[])u.status==="rejected"&&d(u.reason);return n().catch(d)})},tS="_filterGlow_1xvit_13",nS="_floatingButton_1xvit_23",aS="_badge_1xvit_54",rS="_configBadge_1xvit_71",sS="_configBadgeActive_1xvit_81",oS="_configBadgeRevoked_1xvit_87",iS="_configBadgeExpired_1xvit_93",cS="_header_1xvit_103",lS="_headerTitle_1xvit_118",dS="_brandIcon_1xvit_135",uS="_brandCloudSuffix_1xvit_141",mS="_projectSlash_1xvit_146",pS="_projectName_1xvit_153",fS="_taskCountBadge_1xvit_172",hS="_taskCountBadgeIcon_1xvit_189",gS="_taskCountBadgeAlert_1xvit_193",yS="_headerActions_1xvit_199",vS="_sortDirectionBtn_1xvit_206",kS="_sortDirectionBtnWidget_1xvit_213",SS="_form_1xvit_221",wS="_topRow_1xvit_233",bS="_field_1xvit_239",xS="_labelRow_1xvit_245",_S="_label_1xvit_245",CS="_manageLink_1xvit_259",AS="_input_1xvit_278",TS="_select_1xvit_279",IS="_textarea_1xvit_280",NS="_taskIdInlineLink_1xvit_314",jS="_readOnly_1xvit_333",RS="_selectWithConfig_1xvit_341",DS="_configBtn_1xvit_351",ES="_configBtnActive_1xvit_381",PS="_hasPath_1xvit_389",MS="_pathIndicator_1xvit_394",LS="_formActions_1xvit_400",BS="_hasCancel_1xvit_407",WS="_submitBtn_1xvit_411",FS="_cancelBtn_1xvit_427",OS="_successMessage_1xvit_459",$S="_successIcon_1xvit_465",US="_spinner_1xvit_485",zS="_spin_1xvit_485",HS="_boardRefreshIndicator_1xvit_489",GS="_destructiveBtn_1xvit_519",VS="_warningBtn_1xvit_542",ZS="_viewTab_1xvit_565",qS="_deleteBtn_1xvit_576",KS="_loading_1xvit_586",YS="_emptyState_1xvit_592",JS="_taskList_1xvit_602",XS="_taskIdBadge_1xvit_608",QS="_taskIdBadgeLabel_1xvit_630",ew="_copiedId_1xvit_649",tw="_highlight_1xvit_655",nw="_modal_1xvit_667",aw="_priorityEmoji_1xvit_675",rw="_metaItem_1xvit_679",sw="_taskFormDateInput_1xvit_693",ow="_metaBadge_1xvit_703",iw="_complexityPill_1xvit_718",cw="_complexityDots_1xvit_722",lw="_dot_1xvit_728",dw="_dotFilled_1xvit_736",uw="_typePill_1xvit_742",mw="_type_bug_1xvit_746",pw="_type_feature_1xvit_750",fw="_type_chore_1xvit_754",hw="_type_refactor_1xvit_758",gw="_type_documentation_1xvit_762",yw="_type_research_1xvit_766",vw="_type_security_1xvit_774",kw="_approachPill_1xvit_779",Sw="_approach_evaluate_1xvit_784",ww="_approach_collaborate_1xvit_790",bw="_approach_plan_1xvit_796",xw="_approachActive_1xvit_802",_w="_statusActionsGroup_1xvit_807",Cw="_statusActionsGroupCompact_1xvit_813",Aw="_statusSelectWrap_1xvit_817",Tw="_statusTaxonomyDropdownWrap_1xvit_823",Iw="_statusTaxonomyDropdown_1xvit_823",Nw="_statusTaxonomyDropdownCompact_1xvit_831",jw="_statusTaxonomyDropdownIconOnly_1xvit_835",Rw="_taxonomyDropdownButton_1xvit_840",Dw="_taxonomyDropdownButtonContent_1xvit_857",Ew="_statusTaxonomyDropdownIconOnlyPanel_1xvit_861",Pw="_actionBtn_1xvit_867",Mw="_startWorkBtn_1xvit_891",Lw="_workingBtn_1xvit_900",Bw="_pulse_1xvit_1",Ww="_reviewBtn_1xvit_906",Fw="_reviewActiveBtn_1xvit_916",Ow="_reviewPill_1xvit_922",$w="_archiveTaskBtn_1xvit_929",Uw="_bulkArchiveBtn_1xvit_938",zw="_bulkDeleteBtn_1xvit_960",Hw="_completeBtn_1xvit_1001",Gw="_completeActiveBtn_1xvit_1011",Vw="_deleteActiveBtn_1xvit_1017",Zw="_disabledBtn_1xvit_1023",qw="_archiveList_1xvit_1030",Kw="_archiveHeader_1xvit_1038",Yw="_settingsTab_1xvit_1049",Jw="_settingsTabs_1xvit_1061",Xw="_settingsLayout_1xvit_1075",Qw="_settingsSidebar_1xvit_1082",eb="_settingsSidebarHeader_1xvit_1092",tb="_settingsSidebarNav_1xvit_1101",nb="_settingsSidebarBtn_1xvit_1110",ab="_settingsSidebarBtnActive_1xvit_1134",rb="_settingsSidebarGroup_1xvit_1141",sb="_settingsSidebarGroupBtn_1xvit_1147",ob="_settingsSidebarGroupLabel_1xvit_1151",ib="_settingsSidebarGroupChevron_1xvit_1155",cb="_settingsSidebarSubnav_1xvit_1161",lb="_settingsSidebarSubBtn_1xvit_1168",db="_appScrollbar_1xvit_1191",ub="_settingsTabBtn_1xvit_1195",mb="_settingsTabBtnActive_1xvit_1221",pb="_settingsContent_1xvit_1227",fb="_settingsToast_1xvit_1275",hb="_settingsToastSuccess_1xvit_1292",gb="_settingsToastError_1xvit_1298",yb="_inputWithPrefix_1xvit_1304",vb="_pathHint_1xvit_1311",kb="_settingGroup_1xvit_1324",Sb="_settingTitle_1xvit_1330",wb="_settingTitleRow_1xvit_1339",bb="_settingTitleActionBtn_1xvit_1346",xb="_themeOptions_1xvit_1366",_b="_buttonGrid_1xvit_1371",Cb="_themeBtn_1xvit_1383",Ab="_activeTheme_1xvit_1407",Tb="_pathInputGroup_1xvit_1415",Ib="_saveSettingsBtn_1xvit_1424",Nb="_shortcutInputWrapper_1xvit_1445",jb="_inputIcon_1xvit_1450",Rb="_settingHelper_1xvit_1459",Db="_browseBtn_1xvit_1466",Eb="_inlineCategoryManager_1xvit_1485",Pb="_categoryManager_1xvit_1496",Mb="_categoryList_1xvit_1502",Lb="_categoryChip_1xvit_1514",Bb="_categoryChipLabel_1xvit_1527",Wb="_chipActionBtn_1xvit_1535",Fb="_removeCategoryBtn_1xvit_1555",Ob="_addCategoryForm_1xvit_1575",$b="_addCategoryBtn_1xvit_1580",Ub="_filesList_1xvit_1605",zb="_helpLink_1xvit_1632",Hb="_inlineCode_1xvit_1653",Gb="_codeBlock_1xvit_1664",Vb="_taskChildrenSummaryBadges_1xvit_1688",Zb="_taskChildrenProgressBar_1xvit_1696",qb="_taskChildrenProgressBarSegmentDone_1xvit_1707",Kb="_taskChildrenProgressBarSegmentReview_1xvit_1713",Yb="_taskChildrenProgressBarSegmentInProgress_1xvit_1719",Jb="_taskChildrenProgressBarSegmentBlocked_1xvit_1725",Xb="_taskChildrenProgressText_1xvit_1731",Qb="_taskChildUnlinkBtn_1xvit_1740",ex="_aboutText_1xvit_1758",tx="_versionInfo_1xvit_1765",nx="_filterBar_1xvit_1773",ax="_kanbanHintText_1xvit_1787",rx="_searchContainer_1xvit_1793",sx="_searchIcon_1xvit_1800",ox="_searchInput_1xvit_1808",ix="_searchActive_1xvit_1834",cx="_searchCount_1xvit_1839",lx="_clearSearchBtn_1xvit_1855",dx="_filterRow_1xvit_1877",ux="_sortLabel_1xvit_1883",mx="_archiveToggle_1xvit_1891",px="_filterContainer_1xvit_1928",fx="_filterButton_1xvit_1933",hx="_filterActive_1xvit_1958",gx="_filterDropdown_1xvit_1964",yx="_filterOption_1xvit_1979",vx="_filterDivider_1xvit_2009",kx="_filterSelect_1xvit_2015",Sx="_filterToggleBtn_1xvit_2056",wx="_inProgressToggle_1xvit_2078",bx="_activeInProgress_1xvit_2096",xx="_activeFilter_1xvit_2105",_x="_resetFiltersBtn_1xvit_2115",Cx="_categoryChip_disabled_1xvit_2148",Ax="_categoryVisibilityToggle_1xvit_2158",Tx="_editCategoryInput_1xvit_2171",Ix="_categoryChipActionBtn_1xvit_2182",Nx="_categoryChipActionBtn_active_1xvit_2200",jx="_categoryGroup_1xvit_2205",Rx="_categoryHeader_1xvit_2213",Dx="_categoryTitle_1xvit_2227",Ex="_categoryCount_1xvit_2237",Px="_categoryItems_1xvit_2243",Mx="_priorityItem_low_1xvit_2252",Lx="_priorityItem_medium_1xvit_2256",Bx="_priorityItem_high_1xvit_2260",Wx="_priorityItem_critical_1xvit_2264",Fx="_priorityPill_low_1xvit_2268",Ox="_priorityPill_medium_1xvit_2274",$x="_priorityPill_high_1xvit_2280",Ux="_priorityPill_critical_1xvit_2286",zx="_selectPriority_low_1xvit_2301",Hx="_selectPriority_medium_1xvit_2306",Gx="_selectPriority_high_1xvit_2311",Vx="_selectPriority_critical_1xvit_2316",Zx="_levelSelect_1xvit_2325",qx="_levelOption_1xvit_2338",Kx="_levelOptionFilled_1xvit_2355",Yx="_levelOption_priority_low_1xvit_2362",Jx="_levelOption_priority_medium_1xvit_2367",Xx="_levelOption_priority_high_1xvit_2372",Qx="_levelOption_priority_critical_1xvit_2377",e_="_levelOption_complexity_tiny_1xvit_2384",t_="_levelOption_complexity_low_1xvit_2389",n_="_levelOption_complexity_medium_1xvit_2394",a_="_levelOption_complexity_high_1xvit_2399",r_="_levelOption_complexity_epic_1xvit_2404",s_="_levelOptionActive_1xvit_2411",o_="_levelOptionSelected_1xvit_2416",i_="_levelLabel_1xvit_2424",c_="_fadeIn_1xvit_1",l_="_closeConfigBtn_1xvit_2449",d_="_configItem_1xvit_2471",u_="_settingsLabel_1xvit_2477",m_="_settingsHint_1xvit_2486",p_="_pathList_1xvit_2493",f_="_pathChip_1xvit_2500",h_="_pathValid_1xvit_2513",g_="_pathInvalid_1xvit_2518",y_="_pathValidIcon_1xvit_2523",v_="_pathInvalidIcon_1xvit_2528",k_="_pathText_1xvit_2533",S_="_removePathBtn_1xvit_2540",w_="_pathCount_1xvit_2562",b_="_specialistSection_1xvit_2585",x_="_toggleHeading_1xvit_2593",__="_dropdownList_1xvit_2633",C_="_specialistBadge_1xvit_2642",A_="_iconGrid_1xvit_2672",T_="_iconPickerBtn_1xvit_2683",I_="_iconPickerBtnActive_1xvit_2702",N_="_categorySubConfig_1xvit_2709",j_="_colorPickerRow_1xvit_2717",R_="_colorPickerGrid_1xvit_2723",D_="_colorSwatch_1xvit_2730",E_="_colorSwatchActive_1xvit_2749",P_="_categoryChipIcon_1xvit_2755",M_="_fieldIconWrapper_1xvit_2760",L_="_fieldIcon_1xvit_2760",B_="_field_dynamic_1xvit_2782",W_="_fieldIcon_dynamic_1xvit_2788",F_="_categoryTitleIcon_1xvit_2792",O_="_editActionsHeader_1xvit_2798",$_="_editActionsGroup_1xvit_2807",U_="_urlInputGroup_1xvit_2814",z_="_iconBtn_1xvit_2827",H_="_stickyActionHeader_1xvit_2848",G_="_taskHierarchyHeader_1xvit_2865",V_="_taskHierarchyBadgeRow_1xvit_2872",Z_="_taskHierarchyDivider_1xvit_2880",q_="_taskHierarchyMeta_1xvit_2886",K_="_taskHierarchyAddBtn_1xvit_2899",Y_="_taskHierarchyEditor_1xvit_2905",J_="_taskHierarchyInput_1xvit_2912",X_="_taskSaveStatus_1xvit_2921",Q_="_taskSaveStatusCenter_1xvit_2932",eC="_taskSaveStatusError_1xvit_2940",tC="_headerSuccessFeedback_1xvit_2944",nC="_slideInUp_1xvit_1",aC="_successCheck_1xvit_2956",rC="_scaleIn_1xvit_1",sC="_primaryUpdateBtn_1xvit_2992",oC="_secondaryHeaderBtn_1xvit_3020",iC="_secondaryHeaderBtnDestructive_1xvit_3041",cC="_commentSection_1xvit_3054",lC="_attachmentCaptureContainer_1xvit_3090",dC="_capturePrompt_1xvit_3098",uC="_previewContainer_1xvit_3112",mC="_previewHeader_1xvit_3118",pC="_attachmentCapturePreview_1xvit_3128",fC="_actions_1xvit_3135",hC="_primaryButton_1xvit_3141",gC="_secondaryButton_1xvit_3156",yC="_iconButton_1xvit_3171",vC="_attachmentGrid_1xvit_3193",kC="_attachmentCard_1xvit_3200",SC="_attachmentPreviewContainer_1xvit_3214",wC="_contextFileLink_1xvit_3235",bC="_attachmentActions_1xvit_3261",xC="_attachmentActionBtn_1xvit_3275",_C="_attachmentCaptionInput_1xvit_3297",CC="_hiddenInput_1xvit_3315",AC="_contextUploadPanel_1xvit_3319",TC="_contextUploadActions_1xvit_3327",IC="_contextDropzone_1xvit_3335",NC="_contextDropzoneActive_1xvit_3351",jC="_contextDropzonePulse_1xvit_1",RC="_contextLinkRow_1xvit_3359",DC="_contextNotice_1xvit_3365",EC="_documentAttachmentList_1xvit_3371",PC="_documentAttachmentItem_1xvit_3378",MC="_documentAttachmentRow_1xvit_3385",LC="_documentAttachmentLink_1xvit_3393",BC="_documentAttachmentMain_1xvit_3407",WC="_documentAttachmentText_1xvit_3414",FC="_documentAttachmentIcon_1xvit_3422",OC="_documentAttachmentName_1xvit_3433",$C="_documentAttachmentType_1xvit_3442",UC="_documentAttachmentActions_1xvit_3455",zC="_documentAttachmentActionBtn_1xvit_3461",HC="_documentAttachmentCaptionInput_1xvit_3482",GC="_brokenImage_1xvit_3510",VC="_brokenImagePlaceholder_1xvit_3518",ZC="_regionOverlay_1xvit_3532",qC="_selectionBox_1xvit_3543",KC="_exportRow_1xvit_3551",YC="_exportItem_1xvit_3556",JC="_taxonomyDrillDown_1xvit_3565",XC="_drillDownList_1xvit_3575",QC="_drillDownSection_1xvit_3583",eA="_drillDownSectionHeader_1xvit_3589",tA="_drillDownSectionTitle_1xvit_3596",nA="_drillDownItem_1xvit_3605",aA="_drillDownItemDimmed_1xvit_3627",rA="_drillDownItemActive_1xvit_3635",sA="_drillDownItemInfo_1xvit_3640",oA="_drillDownItemText_1xvit_3646",iA="_drillDownItemLabel_1xvit_3651",cA="_drillDownItemSubtext_1xvit_3656",lA="_addTaxonomyBtnSmall_1xvit_3661",dA="_taxonomyDetailView_1xvit_3683",uA="_slideIn_1xvit_1",mA="_detailHeader_1xvit_3703",pA="_detailTitle_1xvit_3712",fA="_detailContent_1xvit_3719",hA="_createOverlay_1xvit_3726",gA="_createDialog_1xvit_3738",yA="_zoomIn_1xvit_1",vA="_dialogActions_1xvit_3766",kA="_settingsGroup_1xvit_3784",SA="_settingsItem_1xvit_3790",wA="_settingLabelGroup_1xvit_3796",bA="_settingLabel_1xvit_3796",xA="_settingDescription_1xvit_3808",_A="_settingInput_1xvit_3815",CA="_codeBlockWrapper_1xvit_3838",AA="_codeHeader_1xvit_3847",TA="_codeHeaderActions_1xvit_3858",IA="_codeLabel_1xvit_3865",NA="_codeHeaderDescription_1xvit_3873",jA="_mcpTokenCardBody_1xvit_3881",RA="_mcpTokenFormGrid_1xvit_3889",DA="_mcpTokenOutputWrap_1xvit_3896",EA="_mcpTokenValueField_1xvit_3903",PA="_mcpTokenValueText_1xvit_3913",MA="_mcpTokenActionRow_1xvit_3926",LA="_copyBtn_1xvit_3947",BA="_copyBtnActive_1xvit_3968",WA="_copyBtnNeutralActive_1xvit_3974",FA="_headerDivider_1xvit_3992",OA="_groupByContainer_1xvit_3998",$A="_groupByLabel_1xvit_4006",UA="_groupBySelect_1xvit_4011",zA="_viewSwitcher_1xvit_4033",HA="_selectWithIcon_1xvit_4041",GA="_marginBottom16_1xvit_4045",VA="_headerDraggable_1xvit_4050",ZA="_headerDragging_1xvit_4054",qA="_filterSelectSort_1xvit_4062",KA="_archiveRow_1xvit_4066",YA="_taskScopeToggle_1xvit_4072",JA="_taskScopeTabs_1xvit_4080",XA="_taskScopeTab_1xvit_4080",QA="_taskScopeTabActive_1xvit_4113",eT="_taskToolbarAction_1xvit_4125",tT="_overlayHighZ_1xvit_4141",nT="_savedText_1xvit_4151",aT="_shortcutInput_1xvit_1445",rT="_saveSettingsBtnWrapper_1xvit_4159",sT="_marginBottom12_1xvit_4163",oT="_exportRowGrid_1xvit_4167",iT="_settingSubtitleCustom_1xvit_4172",cT="_capitalize_1xvit_4178",lT="_marginTop12_1xvit_4182",dT="_marginTop16_1xvit_4186",uT="_labelGroupFlex_1xvit_4190",mT="_codeBlockWrapperCustom_1xvit_4196",pT="_kanbanWrapper_1xvit_4202",fT="_kanbanContainer_1xvit_4210",hT="_kanbanTopScroll_1xvit_4232",gT="_kanbanTopScrollSpacer_1xvit_4241",yT="_kanbanColumn_1xvit_4245",vT="_kanbanColumnSticky_1xvit_4261",kT="_kanbanColumnCollapsed_1xvit_4267",ST="_kanbanColumnPast_1xvit_4272",wT="_kanbanColumnSelectedDay_1xvit_4277",bT="_kanbanHeader_1xvit_4284",xT="_kanbanCount_1xvit_4294",_T="_kanbanHeaderDraggable_1xvit_4314",CT="_kanbanHeaderPanning_1xvit_4318",AT="_kanbanQuickAdd_1xvit_4322",TT="_kanbanColorDot_1xvit_4343",IT="_kanbanDroppable_1xvit_4355",NT="_kanbanDroppableScroll_1xvit_4364",jT="_kanbanEmpty_1xvit_4374",RT="_kanbanCard_1xvit_4384",DT="_kanbanCardWrapper_1xvit_4394",ET="_taxonomyDropdownActive_1xvit_4402",PT="_kanbanCardWrapperRaised_1xvit_4406",MT="_kanbanCardTitle_1xvit_4410",LT="_kanbanBadges_1xvit_4414",BT="_kanbanBadge_1xvit_4414",WT="_headerFlex_1xvit_4430",FT="_marginBottom8_1xvit_4437",OT="_marginBottom20_1xvit_4441",$T="_configPanel_1xvit_4445",UT="_configPanelLarge_1xvit_4454",zT="_subLabelBlock_1xvit_4458",HT="_subLabelBlock12_1xvit_4465",GT="_flexBetween_1xvit_4469",VT="_flexBetweenCenter_1xvit_4476",ZT="_deleteBtnSmall_1xvit_4481",qT="_deleteBtnMedium_1xvit_4487",KT="_trashIcon_1xvit_4494",YT="_gridConfig_1xvit_4498",JT="_flexColGap4_1xvit_4505",XT="_flexColGap4Center_1xvit_4511",QT="_flex1_1xvit_4518",eI="_flexCol_1xvit_4505",tI="_flexGrow1_1xvit_4528",nI="_inputLabel_1xvit_4532",aI="_inputLabelBlock_1xvit_4536",rI="_checkboxInput_1xvit_4542",sI="_configDividerMargin_1xvit_4548",oI="_configDividerMargin24_1xvit_4553",iI="_pathListMargin_1xvit_4558",cI="_cancelBtnRed_1xvit_4562",lI="_code_1xvit_1664",dI="_workflowList_1xvit_4589",uI="_workflowActions_1xvit_4597",mI="_textBtn_1xvit_4606",pI="_workflowGrid_1xvit_4620",fI="_checkboxLabel_1xvit_4628",hI="_checkboxSmall_1xvit_4642",gI="_docWorkspace_1xvit_4661",yI="_docIndexPanel_1xvit_4670",vI="_docSpinning_1xvit_4682",kI="_docSpin_1xvit_4682",SI="_docViewerPanel_1xvit_4693",wI="_docViewerEmpty_1xvit_4701",bI="_marginTop24_1xvit_4716",xI="_settingSubTitle_1xvit_4720",_I="_dangerBtn_1xvit_4729",CI="_aiProfilesExplorer_1xvit_4745",AI="_aiProfilesListPane_1xvit_4753",TI="_aiProfilesList_1xvit_4753",II="_aiProfilesSection_1xvit_4786",NI="_aiProfilesSectionHeader_1xvit_4792",jI="_aiProfileGroup_1xvit_4800",RI="_aiProfileGroupSelected_1xvit_4820",DI="_aiProfileGroupDuplicate_1xvit_4828",EI="_aiProfileGroupHeader_1xvit_4833",PI="_aiProfileName_1xvit_4841",MI="_aiProfileMetaRow_1xvit_4846",LI="_aiProfileSurfaceBadge_1xvit_4856",BI="_aiProfileDuplicateBadge_1xvit_4866",WI="_aiProfileMergeSection_1xvit_4878",FI="_aiProfileMergeRow_1xvit_4885",OI="_aiProfileIdChip_1xvit_4892",$I="_aiProfileKeepBadge_1xvit_4904",UI="_aiProfileMergeActions_1xvit_4918",zI="_aiProfileDetailPane_1xvit_4925",HI="_aiProfileDetailCard_1xvit_4931",GI="_aiProfileDetailHero_1xvit_4941",VI="_aiProfileDetailIcon_1xvit_4947",ZI="_aiProfileDetailHeading_1xvit_4961",qI="_aiProfileDetailTitleRow_1xvit_4966",KI="_aiProfileDetailTitle_1xvit_4966",YI="_aiProfileDetailMetaRow_1xvit_4981",JI="_aiProfileDetailHandle_1xvit_4989",XI="_aiProfileDetailSectionBadge_1xvit_4994",QI="_aiProfileDetailLinkedCount_1xvit_5008",eN="_aiProfileDetailDescription_1xvit_5013",tN="_aiProfileDetailGrid_1xvit_5020",nN="_aiProfileDetailStat_1xvit_5027",aN="_aiProfileDetailStatLabel_1xvit_5040",rN="_aiProfileDetailStatValue_1xvit_5050",sN="_aiProfileInstanceSection_1xvit_5057",oN="_aiProfileInstanceSectionHeader_1xvit_5063",iN="_aiProfileInstanceList_1xvit_5073",cN="_aiProfileInstanceCard_1xvit_5079",lN="_aiProfileInstanceTopRow_1xvit_5091",dN="_aiProfileInstanceName_1xvit_5098",uN="_aiProfileInstanceMeta_1xvit_5105",m={filterGlow:tS,floatingButton:nS,badge:aS,configBadge:rS,configBadgeActive:sS,configBadgeRevoked:oS,configBadgeExpired:iS,header:cS,headerTitle:lS,brandIcon:dS,brandCloudSuffix:uS,projectSlash:mS,projectName:pS,taskCountBadge:fS,taskCountBadgeIcon:hS,taskCountBadgeAlert:gS,headerActions:yS,sortDirectionBtn:vS,sortDirectionBtnWidget:kS,form:SS,topRow:wS,field:bS,labelRow:xS,label:_S,manageLink:CS,input:AS,select:TS,textarea:IS,taskIdInlineLink:NS,readOnly:jS,selectWithConfig:RS,configBtn:DS,configBtnActive:ES,hasPath:PS,pathIndicator:MS,formActions:LS,hasCancel:BS,submitBtn:WS,cancelBtn:FS,successMessage:OS,successIcon:$S,spinner:US,spin:zS,boardRefreshIndicator:HS,destructiveBtn:GS,warningBtn:VS,viewTab:ZS,deleteBtn:qS,loading:KS,emptyState:YS,taskList:JS,taskIdBadge:XS,taskIdBadgeLabel:QS,copiedId:ew,highlight:tw,modal:nw,priorityEmoji:aw,metaItem:rw,taskFormDateInput:sw,metaBadge:ow,complexityPill:iw,complexityDots:cw,dot:lw,dotFilled:dw,typePill:uw,type_bug:mw,type_feature:pw,type_chore:fw,type_refactor:hw,type_documentation:gw,type_research:yw,"type_ui-ux":"_type_ui-ux_1xvit_770",type_security:vw,approachPill:kw,approach_evaluate:Sw,approach_collaborate:ww,approach_plan:bw,approachActive:xw,statusActionsGroup:_w,statusActionsGroupCompact:Cw,statusSelectWrap:Aw,statusTaxonomyDropdownWrap:Tw,statusTaxonomyDropdown:Iw,statusTaxonomyDropdownCompact:Nw,statusTaxonomyDropdownIconOnly:jw,taxonomyDropdownButton:Rw,taxonomyDropdownButtonContent:Dw,statusTaxonomyDropdownIconOnlyPanel:Ew,actionBtn:Pw,startWorkBtn:Mw,workingBtn:Lw,pulse:Bw,reviewBtn:Ww,reviewActiveBtn:Fw,reviewPill:Ow,archiveTaskBtn:$w,bulkArchiveBtn:Uw,bulkDeleteBtn:zw,completeBtn:Hw,completeActiveBtn:Gw,deleteActiveBtn:Vw,disabledBtn:Zw,archiveList:qw,archiveHeader:Kw,settingsTab:Yw,settingsTabs:Jw,settingsLayout:Xw,settingsSidebar:Qw,settingsSidebarHeader:eb,settingsSidebarNav:tb,settingsSidebarBtn:nb,settingsSidebarBtnActive:ab,settingsSidebarGroup:rb,settingsSidebarGroupBtn:sb,settingsSidebarGroupLabel:ob,settingsSidebarGroupChevron:ib,settingsSidebarSubnav:cb,settingsSidebarSubBtn:lb,appScrollbar:db,settingsTabBtn:ub,settingsTabBtnActive:mb,settingsContent:pb,settingsToast:fb,settingsToastSuccess:hb,settingsToastError:gb,inputWithPrefix:yb,pathHint:vb,settingGroup:kb,settingTitle:Sb,settingTitleRow:wb,settingTitleActionBtn:bb,themeOptions:xb,buttonGrid:_b,themeBtn:Cb,activeTheme:Ab,pathInputGroup:Tb,saveSettingsBtn:Ib,shortcutInputWrapper:Nb,inputIcon:jb,settingHelper:Rb,browseBtn:Db,inlineCategoryManager:Eb,categoryManager:Pb,categoryList:Mb,categoryChip:Lb,categoryChipLabel:Bb,chipActionBtn:Wb,removeCategoryBtn:Fb,addCategoryForm:Ob,addCategoryBtn:$b,filesList:Ub,helpLink:zb,inlineCode:Hb,codeBlock:Gb,taskChildrenSummaryBadges:Vb,taskChildrenProgressBar:Zb,taskChildrenProgressBarSegmentDone:qb,taskChildrenProgressBarSegmentReview:Kb,taskChildrenProgressBarSegmentInProgress:Yb,taskChildrenProgressBarSegmentBlocked:Jb,taskChildrenProgressText:Xb,taskChildUnlinkBtn:Qb,aboutText:ex,versionInfo:tx,filterBar:nx,kanbanHintText:ax,searchContainer:rx,searchIcon:sx,searchInput:ox,searchActive:ix,searchCount:cx,clearSearchBtn:lx,filterRow:dx,sortLabel:ux,archiveToggle:mx,filterContainer:px,filterButton:fx,filterActive:hx,filterDropdown:gx,filterOption:yx,filterDivider:vx,filterSelect:kx,filterToggleBtn:Sx,inProgressToggle:wx,activeInProgress:bx,activeFilter:xx,resetFiltersBtn:_x,categoryChip_disabled:Cx,categoryVisibilityToggle:Ax,editCategoryInput:Tx,categoryChipActionBtn:Ix,categoryChipActionBtn_active:Nx,categoryGroup:jx,categoryHeader:Rx,categoryTitle:Dx,categoryCount:Ex,categoryItems:Px,priorityItem_low:Mx,priorityItem_medium:Lx,priorityItem_high:Bx,priorityItem_critical:Wx,priorityPill_low:Fx,priorityPill_medium:Ox,priorityPill_high:$x,priorityPill_critical:Ux,selectPriority_low:zx,selectPriority_medium:Hx,selectPriority_high:Gx,selectPriority_critical:Vx,"critical-glow":"_critical-glow_1xvit_1",levelSelect:Zx,levelOption:qx,levelOptionFilled:Kx,levelOption_priority_low:Yx,levelOption_priority_medium:Jx,levelOption_priority_high:Xx,levelOption_priority_critical:Qx,levelOption_complexity_tiny:e_,levelOption_complexity_low:t_,levelOption_complexity_medium:n_,levelOption_complexity_high:a_,levelOption_complexity_epic:r_,levelOptionActive:s_,levelOptionSelected:o_,levelLabel:i_,fadeIn:c_,closeConfigBtn:l_,configItem:d_,settingsLabel:u_,settingsHint:m_,pathList:p_,pathChip:f_,pathValid:h_,pathInvalid:g_,pathValidIcon:y_,pathInvalidIcon:v_,pathText:k_,removePathBtn:S_,pathCount:w_,specialistSection:b_,toggleHeading:x_,dropdownList:__,specialistBadge:C_,iconGrid:A_,iconPickerBtn:T_,iconPickerBtnActive:I_,categorySubConfig:N_,colorPickerRow:j_,colorPickerGrid:R_,colorSwatch:D_,colorSwatchActive:E_,categoryChipIcon:P_,fieldIconWrapper:M_,fieldIcon:L_,field_dynamic:B_,fieldIcon_dynamic:W_,categoryTitleIcon:F_,editActionsHeader:O_,editActionsGroup:$_,urlInputGroup:U_,iconBtn:z_,stickyActionHeader:H_,taskHierarchyHeader:G_,taskHierarchyBadgeRow:V_,taskHierarchyDivider:Z_,taskHierarchyMeta:q_,taskHierarchyAddBtn:K_,taskHierarchyEditor:Y_,taskHierarchyInput:J_,taskSaveStatus:X_,taskSaveStatusCenter:Q_,taskSaveStatusError:eC,headerSuccessFeedback:tC,slideInUp:nC,successCheck:aC,scaleIn:rC,primaryUpdateBtn:sC,secondaryHeaderBtn:oC,secondaryHeaderBtnDestructive:iC,commentSection:cC,attachmentCaptureContainer:lC,capturePrompt:dC,previewContainer:uC,previewHeader:mC,attachmentCapturePreview:pC,actions:fC,primaryButton:hC,secondaryButton:gC,iconButton:yC,attachmentGrid:vC,attachmentCard:kC,attachmentPreviewContainer:SC,contextFileLink:wC,attachmentActions:bC,attachmentActionBtn:xC,attachmentCaptionInput:_C,hiddenInput:CC,contextUploadPanel:AC,contextUploadActions:TC,contextDropzone:IC,contextDropzoneActive:NC,contextDropzonePulse:jC,contextLinkRow:RC,contextNotice:DC,documentAttachmentList:EC,documentAttachmentItem:PC,documentAttachmentRow:MC,documentAttachmentLink:LC,documentAttachmentMain:BC,documentAttachmentText:WC,documentAttachmentIcon:FC,documentAttachmentName:OC,documentAttachmentType:$C,documentAttachmentActions:UC,documentAttachmentActionBtn:zC,documentAttachmentCaptionInput:HC,brokenImage:GC,brokenImagePlaceholder:VC,regionOverlay:ZC,selectionBox:qC,exportRow:KC,exportItem:YC,taxonomyDrillDown:JC,drillDownList:XC,drillDownSection:QC,drillDownSectionHeader:eA,drillDownSectionTitle:tA,drillDownItem:nA,drillDownItemDimmed:aA,drillDownItemActive:rA,drillDownItemInfo:sA,drillDownItemText:oA,drillDownItemLabel:iA,drillDownItemSubtext:cA,addTaxonomyBtnSmall:lA,taxonomyDetailView:dA,slideIn:uA,detailHeader:mA,detailTitle:pA,detailContent:fA,createOverlay:hA,createDialog:gA,zoomIn:yA,dialogActions:vA,settingsGroup:kA,settingsItem:SA,settingLabelGroup:wA,settingLabel:bA,settingDescription:xA,settingInput:_A,codeBlockWrapper:CA,codeHeader:AA,codeHeaderActions:TA,codeLabel:IA,codeHeaderDescription:NA,mcpTokenCardBody:jA,mcpTokenFormGrid:RA,mcpTokenOutputWrap:DA,mcpTokenValueField:EA,mcpTokenValueText:PA,mcpTokenActionRow:MA,copyBtn:LA,copyBtnActive:BA,copyBtnNeutralActive:WA,headerDivider:FA,groupByContainer:OA,groupByLabel:$A,groupBySelect:UA,viewSwitcher:zA,selectWithIcon:HA,marginBottom16:GA,headerDraggable:VA,headerDragging:ZA,filterSelectSort:qA,archiveRow:KA,taskScopeToggle:YA,taskScopeTabs:JA,taskScopeTab:XA,taskScopeTabActive:QA,taskToolbarAction:eT,overlayHighZ:tT,savedText:nT,shortcutInput:aT,saveSettingsBtnWrapper:rT,marginBottom12:sT,exportRowGrid:oT,settingSubtitleCustom:iT,capitalize:cT,marginTop12:lT,marginTop16:dT,labelGroupFlex:uT,codeBlockWrapperCustom:mT,kanbanWrapper:pT,kanbanContainer:fT,kanbanTopScroll:hT,kanbanTopScrollSpacer:gT,kanbanColumn:yT,kanbanColumnSticky:vT,kanbanColumnCollapsed:kT,kanbanColumnPast:ST,kanbanColumnSelectedDay:wT,kanbanHeader:bT,kanbanCount:xT,kanbanHeaderDraggable:_T,kanbanHeaderPanning:CT,kanbanQuickAdd:AT,kanbanColorDot:TT,kanbanDroppable:IT,kanbanDroppableScroll:NT,kanbanEmpty:jT,kanbanCard:RT,kanbanCardWrapper:DT,taxonomyDropdownActive:ET,kanbanCardWrapperRaised:PT,kanbanCardTitle:MT,kanbanBadges:LT,kanbanBadge:BT,headerFlex:WT,marginBottom8:FT,marginBottom20:OT,configPanel:$T,configPanelLarge:UT,subLabelBlock:zT,subLabelBlock12:HT,flexBetween:GT,flexBetweenCenter:VT,deleteBtnSmall:ZT,deleteBtnMedium:qT,trashIcon:KT,gridConfig:YT,flexColGap4:JT,flexColGap4Center:XT,flex1:QT,flexCol:eI,flexGrow1:tI,inputLabel:nI,inputLabelBlock:aI,checkboxInput:rI,configDividerMargin:sI,configDividerMargin24:oI,pathListMargin:iI,cancelBtnRed:cI,code:lI,workflowList:dI,workflowActions:uI,textBtn:mI,workflowGrid:pI,checkboxLabel:fI,checkboxSmall:hI,docWorkspace:gI,docIndexPanel:yI,docSpinning:vI,docSpin:kI,docViewerPanel:SI,docViewerEmpty:wI,marginTop24:bI,settingSubTitle:xI,dangerBtn:_I,aiProfilesExplorer:CI,aiProfilesListPane:AI,aiProfilesList:TI,aiProfilesSection:II,aiProfilesSectionHeader:NI,aiProfileGroup:jI,aiProfileGroupSelected:RI,aiProfileGroupDuplicate:DI,aiProfileGroupHeader:EI,aiProfileName:PI,aiProfileMetaRow:MI,aiProfileSurfaceBadge:LI,aiProfileDuplicateBadge:BI,aiProfileMergeSection:WI,aiProfileMergeRow:FI,aiProfileIdChip:OI,aiProfileKeepBadge:$I,aiProfileMergeActions:UI,aiProfileDetailPane:zI,aiProfileDetailCard:HI,aiProfileDetailHero:GI,aiProfileDetailIcon:VI,aiProfileDetailHeading:ZI,aiProfileDetailTitleRow:qI,aiProfileDetailTitle:KI,aiProfileDetailMetaRow:YI,aiProfileDetailHandle:JI,aiProfileDetailSectionBadge:XI,aiProfileDetailLinkedCount:QI,aiProfileDetailDescription:eN,aiProfileDetailGrid:tN,aiProfileDetailStat:nN,aiProfileDetailStatLabel:aN,aiProfileDetailStatValue:rN,aiProfileInstanceSection:sN,aiProfileInstanceSectionHeader:oN,aiProfileInstanceList:iN,aiProfileInstanceCard:cN,aiProfileInstanceTopRow:lN,aiProfileInstanceName:dN,aiProfileInstanceMeta:uN},mN="_standaloneWrapper_1mq9f_1",pN="_standalonePage_1mq9f_11",fN="_standaloneHeader_1mq9f_21",hN="_standaloneTitle_1mq9f_27",gN="_standaloneContent_1mq9f_31",yN="_workspaceToolRail_1mq9f_37",vN="_workspaceToolRailMain_1mq9f_54",kN="_workspaceToolRailBottom_1mq9f_62",SN="_workspaceToolRailDivider_1mq9f_72",wN="_workspaceToolButton_1mq9f_79",bN="_workspaceToolButtonActive_1mq9f_99",xN="_headerTitleWidget_1mq9f_123",sn={standaloneWrapper:mN,standalonePage:pN,standaloneHeader:fN,standaloneTitle:hN,standaloneContent:gN,workspaceToolRail:yN,workspaceToolRailMain:vN,workspaceToolRailBottom:kN,workspaceToolRailDivider:SN,workspaceToolButton:wN,workspaceToolButtonActive:bN,headerTitleWidget:xN},_N="_overlay_11v7l_1",CN="_browser_11v7l_16",AN="_header_11v7l_27",TN="_pathInfo_11v7l_36",IN="_actions_11v7l_52",NN="_list_11v7l_57",jN="_item_11v7l_63",RN="_itemCurrent_11v7l_80",DN="_itemFile_11v7l_86",EN="_empty_11v7l_90",Cn={overlay:_N,browser:CN,header:AN,pathInfo:TN,actions:IN,list:NN,item:jN,itemCurrent:RN,itemFile:DN,empty:EN},PN="_overlay_1kzy4_2",MN="_overlayHighZ_1kzy4_15",LN="_modal_1kzy4_20",BN="_draggableModal_1kzy4_46",WN="_draggableHeader_1kzy4_53",FN="_headerActions_1kzy4_61",ON="_modalContent_1kzy4_69",$N="_form_1kzy4_80",UN="_formActions_1kzy4_91",zN="_modalFooter_1kzy4_98",HN="_modalSizeSm_1kzy4_104",GN="_modalSizeMd_1kzy4_108",VN="_modalSizeMdWide_1kzy4_112",ZN="_modalSizeLg_1kzy4_116",qN="_modalSizeXl_1kzy4_120",KN="_modalSizeFull_1kzy4_124",YN="_settingsViewModal_1kzy4_129",JN="_unsavedOverlay_1kzy4_148",XN="_unsavedModal_1kzy4_153",QN="_unsavedHeader_1kzy4_159",ej="_unsavedTitle_1kzy4_164",tj="_unsavedContent_1kzy4_168",nj="_unsavedText_1kzy4_172",aj="_unsavedActions_1kzy4_177",yt={overlay:PN,overlayHighZ:MN,modal:LN,draggableModal:BN,draggableHeader:WN,headerActions:FN,modalContent:ON,form:$N,formActions:UN,modalFooter:zN,modalSizeSm:HN,modalSizeMd:GN,modalSizeMdWide:VN,modalSizeLg:ZN,modalSizeXl:qN,modalSizeFull:KN,settingsViewModal:YN,unsavedOverlay:JN,unsavedModal:XN,unsavedHeader:QN,unsavedTitle:ej,unsavedContent:tj,unsavedText:nj,unsavedActions:aj};function rj(e){const n=e.charAt(0).toUpperCase()+e.slice(1).toLowerCase(),r={Category:"Categories",Priority:"Priorities",Status:"Statuses"};return r[n]?r[n]:`${e}s`}function Ai({label:e,options:n,selected:r,onChange:s,variant:o="label",containerStyle:d}){const[i,u]=a.useState(!1),f=a.useRef(null);a.useEffect(()=>{const b=N=>{f.current&&!f.current.contains(N.target)&&u(!1)};return document.addEventListener("mousedown",b),()=>document.removeEventListener("mousedown",b)},[]);const k=b=>{r.includes(b)?s(r.filter(N=>N!==b)):s([...r,b])},x=n.length>0&&n.every(b=>{const N=o==="label"?b.label:b.value;return r.includes(N)}),S=!n.some(b=>{const N=o==="label"?b.label:b.value;return r.includes(N)}),v=()=>{s(x?[]:n.map(b=>o==="label"?b.label:b.value))},g=n.filter(b=>{const N=o==="label"?b.label:b.value;return r.includes(N)}).length,w=rj(e),I=x?`All ${w}`:S?`No ${w}`:g===1?`1 ${e}`:`${g} ${w}`;return t.jsxs("div",{className:m.filterContainer,ref:f,style:d,children:[t.jsxs("button",{className:`${m.filterButton} ${x?"":m.filterActive}`,onClick:()=>u(!i),title:`Filter by ${e}`,children:[t.jsx("span",{children:I}),t.jsx(Ac,{size:14,style:{transform:i?"rotate(180deg)":"none",transition:"transform 0.2s",opacity:.5}})]}),i&&t.jsxs("div",{className:`${m.filterDropdown} ${m.appScrollbar} tf-scrollbar`,children:[t.jsxs("div",{className:m.filterOption,onClick:v,children:[t.jsx("input",{type:"checkbox",checked:x,onChange:()=>{}}),t.jsx("span",{style:{fontWeight:600},children:"Toggle All"})]}),t.jsx("div",{className:m.filterDivider}),n.map(b=>{const N=o==="label"?b.label:b.value,W=r.includes(N);return t.jsxs("div",{className:m.filterOption,onClick:()=>k(N),children:[t.jsx("input",{type:"checkbox",checked:W,onChange:()=>{}}),t.jsx("span",{children:b.label})]},b.value)})]})]})}const sj="_taskItem_x943c_1",oj="_compressed_x943c_20",ij="_taskHeader_x943c_25",cj="_taskReferenceCluster_x943c_30",lj="_taskMeta_x943c_34",dj="_taskTitle_x943c_40",uj="_taskItemRecentlyChanged_x943c_67",mj="_inProgress_x943c_128",pj="_onHold_x943c_139",fj="_readyForReview_x943c_150",hj="_completed_x943c_161",gj="_cancelled_x943c_172",yj="_archived_x943c_183",vj="_taskContent_x943c_193",kj="_kanbanCardOverlay_x943c_202",Sj="_taskReferenceText_x943c_241",wj="_taskReferenceDivider_x943c_250",bj="_taskActions_x943c_257",xj="_taskMetaCompact_x943c_282",_j="_taskMetaRow_x943c_289",Cj="_taskMetaBadgeGroup_x943c_297",Aj="_taskDescription_x943c_303",Tj="_taskLatestComment_x943c_362",Ij="_taskCancellationReason_x943c_383",Nj="_archiveBadge_x943c_537",jj="_attachmentThumbnails_x943c_542",Rj="_attachmentImageRow_x943c_549",Dj="_attachmentDocumentList_x943c_556",Ej="_attachmentThumbnail_x943c_542",Pj="_contextDocThumb_x943c_589",Mj="_contextDocMain_x943c_615",Lj="_contextDocText_x943c_622",Bj="_contextDocIcon_x943c_630",Wj="_contextDocName_x943c_641",Fj="_contextDocType_x943c_651",Oj="_taskSpecialists_x943c_663",$j="_taxonomiesList_x943c_672",Zt={taskItem:sj,compressed:oj,taskHeader:ij,taskReferenceCluster:cj,taskMeta:lj,taskTitle:dj,taskItemRecentlyChanged:uj,inProgress:mj,onHold:pj,readyForReview:fj,completed:hj,cancelled:gj,archived:yj,taskContent:vj,kanbanCardOverlay:kj,taskReferenceText:Sj,taskReferenceDivider:wj,taskActions:bj,taskMetaCompact:xj,taskMetaRow:_j,taskMetaBadgeGroup:Cj,taskDescription:Aj,taskLatestComment:Tj,taskCancellationReason:Ij,archiveBadge:Nj,attachmentThumbnails:jj,attachmentImageRow:Rj,attachmentDocumentList:Dj,attachmentThumbnail:Ej,contextDocThumb:Pj,contextDocMain:Mj,contextDocText:Lj,contextDocIcon:Bj,contextDocName:Wj,contextDocType:Fj,taskSpecialists:Oj,taxonomiesList:$j},Bm=({children:e,className:n,onTaskIdClick:r})=>{if(!e)return null;const s=i=>pt.Children.toArray(i).some(f=>pt.isValidElement(f)?String(f.props?.className||"").includes("task-list-item"):!1),o=/\b(task-\d{10,}-[a-z0-9]+)\b/gi,d=i=>{if(!r)return i;if(typeof i=="string"){const k=Array.from(i.matchAll(o));if(!k.length)return i;const x=[];let S=0;for(let v=0;v<k.length;v+=1){const g=k[v],w=g[1],I=g.index??-1;I<S||(I>S&&x.push(i.slice(S,I)),x.push(t.jsx("button",{type:"button",className:m.taskIdInlineLink,onClick:b=>{b.preventDefault(),b.stopPropagation(),r(w)},children:w},`${w}-${I}-${v}`)),S=I+w.length)}return S<i.length&&x.push(i.slice(S)),x}if(Array.isArray(i))return i.map(d);if(!pt.isValidElement(i))return i;const u=typeof i.type=="string"?i.type:"";if(u==="code"||u==="pre"||u==="a")return i;const f=i.props?.children;return f===void 0?i:pt.cloneElement(i,{},pt.Children.map(f,d))};return t.jsx("div",{className:n,children:t.jsx(Ug,{remarkPlugins:[zg,Hg],components:{p:({children:i})=>t.jsx("p",{children:d(i)}),ul:({children:i})=>t.jsx("ul",{style:s(i)?{paddingLeft:0}:void 0,children:i}),li:({children:i,className:u})=>{const f=String(u||"").includes("task-list-item");return t.jsx("li",{className:u,style:f?{listStyle:"none"}:void 0,children:d(i)})},input:({type:i,checked:u})=>i!=="checkbox"?t.jsx("input",{type:i,checked:u,readOnly:!0}):t.jsx("input",{type:"checkbox",checked:!!u,readOnly:!0,style:{cursor:"default",marginRight:8}}),code:({children:i,className:u,...f})=>{const k=String(i||"").replace(/\n$/,"");return/language-(\w+)/.test(u||"")||k.includes(`
|
|
3
|
-
`)?t.jsx("pre",{className:m.codeBlock,children:t.jsx("code",{className:u,...f,children:k})}):t.jsx("code",{className:m.inlineCode,...f,children:k})}},children:e})})};function mh({label:e,title:n,ariaLabel:r,copied:s=!1,disabled:o=!1,className:d="",onClick:i,children:u}){return t.jsxs("button",{type:"button",className:`${m.taskIdBadge} ${s?m.copiedId:""} ${d}`.trim(),onClick:i,disabled:o,title:n,"aria-label":r,children:[s?t.jsx(eo,{size:13}):t.jsx(Ol,{size:13}),t.jsx("span",{className:m.taskIdBadgeLabel,children:u??e})]})}function au({copied:e,disabled:n=!1,label:r,onClick:s,title:o="Copy task reference",ariaLabel:d,className:i=""}){return t.jsx(mh,{copied:e,disabled:n,label:"",onClick:s,title:o,ariaLabel:d,className:i,children:r})}const Uj=(e,n=10)=>{const r=hu[e?.toLowerCase()]||{icon:"FileCode"},s=Hr[r.icon]||hg;return t.jsx(s,{size:n})},Qd=(e,n)=>{if(!e)return null;if(!n.trim())return e;const r=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),s=e.split(new RegExp(`(${r})`,"gi"));return t.jsx(t.Fragment,{children:s.map((o,d)=>o.toLowerCase()===n.toLowerCase()?t.jsx("mark",{className:m.highlight,children:o},d):o)})};function Zl(e){return e.trim().replace(/\\/g,"/")}function ph(e){return e.split("?")[0].split("#")[0]}function _u(e){return typeof e=="string"?e:String(e.path||"").trim()}function fh(e){const r=ph(Zl(e)).match(/\/api\/taskforce\/documents\/([^/]+)\/content$/i);if(!r?.[1])return null;try{return decodeURIComponent(r[1]).trim()||null}catch{return r[1].trim()||null}}function hh(e){if(!e.includes("/api/taskforce/context-link?path="))return null;try{const r=new URL(e,window.location.origin).searchParams.get("path");return r?Zl(r):null}catch{return null}}function zj(e,n){const r=(n||(typeof e=="string"?"":e.fsPath||"")).trim();if(r)return Zl(r);const s=_u(e),o=hh(s);return o?Zl(o):null}function Hj(e,n){const r=String(typeof e=="string"?"":e.assetId||"").trim();if(r)return r;const s=_u(e);return fh(s)}function Gj(e,n){const r=_u(e);return fh(r)?!0:[(n||(typeof e=="string"?"":e.fsPath||"")).trim(),typeof e=="string"?"":String(e.originalFilename||"").trim(),typeof e=="string"?"":String(e.displayName||"").trim(),typeof e=="string"?"":String(e.caption||"").trim(),hh(r)||"",r].some(o=>{if(!o)return!1;const d=ph(Zl(o)).toLowerCase();return d.endsWith(".md")||d.endsWith(".markdown")})}function Wm(e,n){const r=_u(e),s=zj(e,n);if(!s||!Gj(e,s))return!1;const o=Hj(e),d=new CustomEvent("taskforce:open-markdown-document",{detail:{path:r,fsPath:s,...o?{assetId:o}:{}},cancelable:!0});return!window.dispatchEvent(d)}const Vj="I-";function gh(e){return Yl(Vj,e)}function Zj(e){return e.trim().replace(/\\/g,"/")}function yh(e){return typeof e=="string"?e:String(e.path||"").trim()}function qj(e){return/\.(png|jpe?g|webp)(\?|#|$)/i.test(e)}function Kj(e){return typeof e=="string"?Zj(e).split("/").pop()||"Image attachment":String(e.caption||e.displayName||e.originalFilename||e.fsPath||e.path.split("/").pop()||"Image attachment").trim()}function vh(e,n){if(typeof e=="string")return!1;const r=String(e.assetId||"").trim(),s=yh(e);return!!(r&&s&&qj(s))}function Fm(e,n){if(!vh(e))return!1;const r=e,s=String(n?.taskId||r.taskId||"").trim(),o=String(n?.taskReferenceLabel||"").trim(),d=String(r.assetId||"").trim(),i=gh(r),u=yh(e),f=new CustomEvent("taskforce:open-annotated-attachment",{detail:{...s?{taskId:s}:{},...o?{taskReferenceLabel:o}:{},assetId:d,...i?{imageReferenceLabel:i}:{},path:u,displayName:Kj(e)},cancelable:!0});return!window.dispatchEvent(f)}function Zp(e,n){if(!e)return null;const r=String(e.taskId||"").trim(),s=String(e.assetId||"").trim(),o=String(e.path||"").trim(),d=String(e.displayName||"").trim()||"Image attachment";if(!s||!o)return null;const i=String(e.taskReferenceLabel||"").trim(),u=r?n.find(k=>k.id===r):void 0,f=r?i||Cs(u)||r:void 0;return{...r?{taskId:r}:{},...f?{taskReferenceLabel:f}:{},assetId:s,imageReferenceLabel:String(e.imageReferenceLabel||"").trim()||void 0,path:o,displayName:d}}function yu(e){const n=String(e||"").trim().replace(/\\/g,"/");if(!n)return"";const r=n.split("/").filter(Boolean);return r[r.length-1]||""}function ap(e){const n=String(e||"").trim(),r=n.lastIndexOf(".");return r<=0?{stem:n,ext:""}:{stem:n.slice(0,r),ext:n.slice(r)}}function kh(e,n){const r=String(e||"").trim(),s=String(n||"").trim();return r?s&&r.startsWith(`${s}-`)?r.slice(s.length+1):r.replace(/^asset-[a-z0-9-]+-/i,""):""}function Yj(e){return String(e||"").replace(/-\d{13,}$/g,"").replace(/[_-]+/g," ").replace(/\s+/g," ").trim()}function qp(e,n){const{stem:r,ext:s}=ap(yu(e)),o=kh(r,n),d=Yj(o||r);return d?`${d}${s}`:yu(e)||"Untitled document"}function ym(e,n){const r=String(e||"").trim();if(!r)return!0;const s=yu(r),{stem:o}=ap(s),d=String(n||"").trim();if(d&&o.toLowerCase()===d.toLowerCase())return!0;const i=kh(o,n);return i?i!==o:!0}function Jj(e){const n=String(e.logicalName||"").trim();if(n&&!ym(n,e.assetId))return n;const r=String(e.displayName||"").trim();if(r&&!ym(r,e.assetId))return r;const s=String(e.title||"").trim();if(s&&!ym(s,e.assetId))return s;const o=String(e.originalFilename||"").trim();if(o)return qp(o,e.assetId);const d=String(e.fsPath||"").trim();return d?qp(d,e.assetId):"Untitled document"}function Xj(e){return Jj(e)}function Qj(e){const n=Xj(e),r=String(e.originalFilename||e.fsPath||"").trim(),s=ap(yu(r)).ext;return s?n.toLowerCase().endsWith(s.toLowerCase())?n:`${n}${s}`:n}const e1="_taxonomyDropdown_tt12a_1",t1="_taxonomyDropdownActive_tt12a_6",n1="_taxonomyDropdownButton_tt12a_11",a1="_taxonomyDropdownOpen_tt12a_50",r1="_taxonomyDropdownButtonContent_tt12a_56",s1="_taxonomyDropdownIcon_tt12a_64",o1="_taxonomyDropdownLabel_tt12a_72",i1="_taxonomyDropdownChevron_tt12a_81",c1="_taxonomyDropdownChevronOpen_tt12a_87",l1="_taxonomyDropdownPanel_tt12a_91",d1="_taxonomyDropdownPanelPortal_tt12a_110",u1="_taxonomyDropdownOption_tt12a_129",m1="_taxonomyDropdownOptionHighlighted_tt12a_157",p1="_taxonomyDropdownOptionSelected_tt12a_163",Va={taxonomyDropdown:e1,taxonomyDropdownActive:t1,taxonomyDropdownButton:n1,taxonomyDropdownOpen:a1,taxonomyDropdownButtonContent:r1,taxonomyDropdownIcon:s1,taxonomyDropdownLabel:o1,taxonomyDropdownChevron:i1,taxonomyDropdownChevronOpen:c1,taxonomyDropdownPanel:l1,taxonomyDropdownPanelPortal:d1,taxonomyDropdownOption:u1,taxonomyDropdownOptionHighlighted:m1,taxonomyDropdownOptionSelected:p1};function Bl({value:e,options:n,onChange:r,placeholder:s="Select...",required:o=!1,disabled:d=!1,className:i="",ariaLabelledBy:u,ariaLabel:f,hideSelectedLabel:k=!1,hideChevron:x=!1,panelClassName:S="",portalPanel:v=!1,panelMinWidth:g}){const[w,I]=a.useState(!1),[b,N]=a.useState(-1),[W,M]=a.useState({}),oe=a.useRef(null),te=a.useRef(null),ie=a.useRef(null),T=n.find(X=>String(X.value)===String(e));a.useEffect(()=>{if(!w)return;const X=R=>{const U=R.target,Z=!!oe.current?.contains(U),he=!!ie.current?.contains(U);!Z&&!he&&(I(!1),N(-1))};return document.addEventListener("mousedown",X),()=>document.removeEventListener("mousedown",X)},[w]),a.useEffect(()=>{if(!w)N(-1);else{const X=n.findIndex(R=>String(R.value)===String(e));N(X>=0?X:0)}},[w,n,e]),a.useEffect(()=>{if(!w||!v)return;const X=()=>{const R=te.current;if(!R)return;const U=R.getBoundingClientRect(),Z=Math.max(g||0,U.width),he=Math.max(8,U.right-Z),Q=U.bottom;M({position:"fixed",top:Q,left:he,minWidth:Z,zIndex:2e3})};return X(),window.addEventListener("resize",X),window.addEventListener("scroll",X,!0),()=>{window.removeEventListener("resize",X),window.removeEventListener("scroll",X,!0)}},[w,v,g]);const ve=()=>{d||I(!w)},O=X=>{r(X.value),I(!1),te.current?.focus()},J=X=>{if(!d)switch(X.key){case"Enter":case" ":X.preventDefault(),w?b>=0&&O(n[b]):I(!0);break;case"Escape":X.preventDefault(),I(!1),te.current?.focus();break;case"ArrowDown":X.preventDefault(),w?N(R=>R<n.length-1?R+1:0):I(!0);break;case"ArrowUp":X.preventDefault(),w?N(R=>R>0?R-1:n.length-1):I(!0);break;case"Home":X.preventDefault(),w&&N(0);break;case"End":X.preventDefault(),w&&N(n.length-1);break;case"Tab":I(!1);break}},le=(X,R)=>{const U=X.icon&&Hr[X.icon]?Hr[X.icon]:ji,Z=X.color?da(X.color):"var(--text-secondary)",he=R?.hideLabel===!0;return t.jsxs(t.Fragment,{children:[t.jsx("span",{className:`taxonomyDropdownIcon ${Va.taxonomyDropdownIcon}`,style:{color:Z},children:t.jsx(U,{size:16})}),!he&&t.jsx("span",{className:`taxonomyDropdownLabel ${Va.taxonomyDropdownLabel}`,children:X.label})]})},ge=w?t.jsx("div",{ref:ie,id:`taxonomy-listbox-${s.replace(/\s+/g,"-")}`,className:`taxonomyDropdownPanel ${Va.taxonomyDropdownPanel} ${v?Va.taxonomyDropdownPanelPortal:""} ${S}`,role:"listbox","aria-labelledby":u,"aria-label":f,style:v?W:void 0,children:n.map((X,R)=>{const U=String(X.value)===String(e),Z=R===b;return t.jsx("div",{className:`taxonomyDropdownOption ${Va.taxonomyDropdownOption} ${U?`taxonomyDropdownOptionSelected ${Va.taxonomyDropdownOptionSelected}`:""} ${Z?`taxonomyDropdownOptionHighlighted ${Va.taxonomyDropdownOptionHighlighted}`:""}`,role:"option","aria-selected":U,onClick:()=>O(X),onMouseEnter:()=>N(R),style:(()=>{const he=X.color,Q=da(he),we=!Q||Q.startsWith("var("),ke=we?"#8b5cf6":Q,be=we?"20":"30",me=we?"05":"10";return{"--option-color":Q||"var(--text-primary)","--option-border":`${ke}${be}`,"--option-bg":`${ke}${me}`}})(),children:le(X)},String(X.value))})}):null;return t.jsxs("div",{ref:oe,className:`taxonomyDropdown ${Va.taxonomyDropdown} ${w?`taxonomyDropdownActive ${Va.taxonomyDropdownActive}`:""} ${i}`,children:[t.jsxs("button",{ref:te,type:"button",className:`taxonomyDropdownButton ${Va.taxonomyDropdownButton} ${w?`taxonomyDropdownOpen ${Va.taxonomyDropdownOpen}`:""}`,onClick:ve,onKeyDown:J,disabled:d,role:"combobox","aria-haspopup":"listbox","aria-expanded":w,"aria-controls":`taxonomy-listbox-${s.replace(/\s+/g,"-")}`,"aria-labelledby":u,"aria-label":f,style:(()=>{if(!T)return{};const X=T.color,R=da(X),U=!R||R.startsWith("var("),Z=U?"#8b5cf6":R,he=U?"30":"50",Q=U?"05":"10";return{"--field-color":R||"var(--text-primary)","--field-border":`${Z}${he}`,"--field-bg":`${Z}${Q}`}})(),children:[t.jsx("span",{className:`taxonomyDropdownButtonContent ${Va.taxonomyDropdownButtonContent}`,children:T?le(T,{hideLabel:k}):t.jsxs(t.Fragment,{children:[t.jsx("span",{className:`taxonomyDropdownIcon ${Va.taxonomyDropdownIcon}`,children:t.jsx(ji,{size:16})}),t.jsx("span",{className:`taxonomyDropdownLabel ${Va.taxonomyDropdownLabel}`,children:s})]})}),!x&&t.jsx(Ac,{size:16,className:`taxonomyDropdownChevron ${Va.taxonomyDropdownChevron} ${w?`taxonomyDropdownChevronOpen ${Va.taxonomyDropdownChevronOpen}`:""}`})]}),v?ge?Ni.createPortal(ge,document.body):null:ge]})}function Sh({task:e,disabled:n=!1,actionDisabled:r,statusDisabled:s,compressed:o=!1,shortLabels:d=!1,showLabel:i=!0,onSetStatus:u,onArchiveTask:f,onUnarchiveTask:k,archiveActionMode:x="auto"}){const S=e?.status||"task",g=x==="auto"?!!e&&(S==="done"||S==="cancelled")?"archive":"none":x,w=r??n,I=s??n,b=wc.map(N=>({...N,label:(o||d)&&N.shortLabel||N.label}));return t.jsxs("div",{className:`${m.statusActionsGroup} ${o?m.statusActionsGroupCompact:""}`,children:[g==="archive"&&t.jsx("button",{type:"button",className:`${m.actionBtn} ${m.archiveTaskBtn}`,onClick:()=>e&&!w&&f?.(e),disabled:w,title:"Archive Now","aria-label":"Archive task",children:t.jsx(gg,{size:o?12:16})}),g==="unarchive"&&t.jsx("button",{type:"button",className:`${m.actionBtn} ${m.archiveTaskBtn}`,onClick:()=>e&&!w&&k?.(e),disabled:w,title:"Unarchive task","aria-label":"Unarchive task",children:t.jsx(cu,{size:o?12:16})}),t.jsx("div",{className:`${m.statusSelectWrap} ${m.statusTaxonomyDropdownWrap}`,children:t.jsx(Bl,{value:S,options:b,disabled:I||!e,ariaLabel:"Status",hideSelectedLabel:!i,hideChevron:!i,className:`${m.statusTaxonomyDropdown} ${o?m.statusTaxonomyDropdownCompact:""} ${i?"":m.statusTaxonomyDropdownIconOnly}`,panelClassName:i?"":m.statusTaxonomyDropdownIconOnlyPanel,portalPanel:!i,panelMinWidth:i?void 0:144,onChange:N=>{e&&u?.(e,N)}})})]})}function f1(e){return e==="title"?"TITLE":e==="description"?"DESCRIPTION":e==="assignee"?"ASSIGNED TO":e==="workstreamId"?"WORKSTREAM":e==="initiativeId"?"INITIATIVE":e}function Mr(e,n,r){const s=r?.(n,e);if(typeof s=="string")return s;if(e==null||e==="")return"none";if(Array.isArray(e)){const o=e.map(d=>Mr(d,n,r)).filter(Boolean);return o.length>0?o.join(", "):"none"}return typeof e=="object"?"updated":String(e)}function Kp(e){return Array.isArray(e)?e.map((n,r)=>{const s=n&&typeof n=="object"?n:{},o=Number(s.order);return{id:String(s.id||"").trim(),title:String(s.title||"").trim(),isCompleted:!!s.isCompleted,order:Number.isFinite(o)?o:r}}):[]}function h1(e){const n=Kp(e?.from),r=Kp(e?.to),s=new Map(n.map(i=>[i.id||i.title,i])),o=new Map(r.map(i=>[i.id||i.title,i]));for(const[i,u]of o.entries()){const f=s.get(i);if(!f)return u.title?`Checklist item added: ${u.title}`:"Checklist item added";if(f.isCompleted!==u.isCompleted)return u.title?u.isCompleted?`Checklist item completed: ${u.title}`:`Checklist item reopened: ${u.title}`:u.isCompleted?"Checklist item completed":"Checklist item reopened"}for(const[i,u]of s.entries())if(!o.has(i))return u.title?`Checklist item removed: ${u.title}`:"Checklist item removed";return n.length===r.length&&n.every(i=>o.has(i.id||i.title))&&n.some((u,f)=>{const k=r[f];return(u.id||u.title)!==(k?.id||k?.title)})?"Checklist reordered":"Checklist updated"}function wh(e,n,r){if(e==="checklistItems")return h1(n);const s=f1(e);if(e==="title")return`${s}: updated`;if(e==="description"){const o=Mr(n?.from,e,r)!=="none",d=Mr(n?.to,e,r)!=="none";return!o&&d?`${s}: added`:o&&!d?`${s}: cleared`:`${s}: updated`}return`${s}: ${Mr(n?.from,e,r)} -> ${Mr(n?.to,e,r)}`}function bh(e,n){const r=e.details?.changes||{},s=Object.keys(r);if(e.action==="task-created")return"Task created";if(e.action==="task-comment-added")return"Comment added";if(e.action==="task-archived")return"Task marked done";if(e.action==="task-cancelled")return"Task cancelled";if(e.action==="task-unarchived")return"Task restored";if(e.action==="task-status-changed"&&r.status)return`Status: ${Mr(r.status.from,"status",n)} -> ${Mr(r.status.to,"status",n)}`;if(e.action==="task-schedule-changed")return r.scheduledDate?`Scheduled: ${Mr(r.scheduledDate.from,"scheduledDate",n)} -> ${Mr(r.scheduledDate.to,"scheduledDate",n)}`:r.dueDate?`Due: ${Mr(r.dueDate.from,"dueDate",n)} -> ${Mr(r.dueDate.to,"dueDate",n)}`:"Schedule updated";if(e.action==="task-relationship-changed"&&r.workstreamId)return`Workstream: ${Mr(r.workstreamId.from,"workstreamId",n)} -> ${Mr(r.workstreamId.to,"workstreamId",n)}`;if(e.action==="task-attachments-changed")return"Attachments updated";if(s.length===1){const o=s[0],d=r[o];return wh(o,d,n)}return s.length>1?`${s.length} fields updated`:"Task updated"}function g1(e){const n=Array.isArray(e.activity)&&e.activity.length>0?e.activity:Array.isArray(e.comments)?e.comments.map(r=>({id:`comment:${r.id}`,type:"comment",timestamp:r.timestamp,comment:r})):[];return n.length===0?null:[...n].sort((r,s)=>{const o=Date.parse(String(r.timestamp||"")),d=Date.parse(String(s.timestamp||""));return Number.isFinite(o)&&Number.isFinite(d)&&o!==d?d-o:String(s.id||"").localeCompare(String(r.id||""))})[0]||null}function y1(e,n){return e?e.type==="comment"?e.comment.text:bh(e.event,n):""}const{MessageSquare:v1,User:k1,Bot:S1,Gauge:w1,ClipboardList:b1,HelpCircle:Yp,File:x1}=Hr,_1=({task:e,searchQuery:n="",copiedId:r=null,taxonomies:s=[],types:o=[],priorities:d=[],categories:i=[],assigneeOptions:u=[],taskWorkstream:f=null,taskInitiative:k=null,isOverlay:x=!1,isArchived:S=!1,readOnlyMode:v=null,isRecentlyChanged:g=!1,onClick:w,onCopyId:I,onToggleInProgress:b,onToggleReview:N,onToggleComplete:W,onToggleCancel:M,onSetStatus:oe,onArchiveTask:te,onUnarchive:ie,onDelete:T,deleteActionTitle:ve,onOpenTaskById:O,compressed:J=!1,showStatusLabel:le=!0})=>{const ge=Ff(e),X=ge.label||(ge.isProvisional?"Pending":""),R=ge.isProvisional,U=!!ge.label,Z=fu(f)||f?.id||"",he=ch(k)||k?.id||"",Q=d.find(H=>String(H.value)===String(e.priority)),we=Q?Q.label.toLowerCase().replace(/\s+/g,"-"):String(e.priority),ke=i.find(H=>H.value===e.category||H.label===e.category),be=typeof e.complexity=="number"?e.complexity:Number(e.complexity??3),me=Number.isFinite(be)?Math.max(1,Math.min(5,Math.round(be))):3,Re={1:"Tiny",2:"Low",3:"Mid",4:"High",5:"Epic"},Te={1:"tiny",2:"low",3:"medium",4:"high",5:"epic"},se=Re[me],F=`var(--complexity-${Te[me]})`,D=wy(e.priority,we),E=!!m[`priorityItem_${D}`],y=pu(e.assignee),C=Ti(e.assignee,u),P=pt.useMemo(()=>g1(e),[e]),j=v||(e.isDeleted?"deleted":S?"archived":null),ae=j!==null,L=pt.useCallback((H,c)=>{const Ue=String(c||"").trim();if(Ue){if(H==="assignee")return Ti(Ue,u);if(H==="workstreamId"&&Ue===f?.id)return Z||f.id;if(H==="initiativeId"&&Ue===k?.id)return he||k.id}},[u,he,k,f,Z]),de=pt.useMemo(()=>y1(P,L),[L,P]),K=Array.isArray(e.activity)&&e.activity.length>0?e.activity.length:e.comments?.length||0,ue=[Zt.taskItem,e.status==="on-hold"?Zt.onHold:"",e.status==="in-progress"?Zt.inProgress:"",e.status==="review"?Zt.readyForReview:"",e.status==="done"?Zt.completed:"",e.status==="cancelled"?Zt.cancelled:"",g?Zt.taskItemRecentlyChanged:"",m[`priorityItem_${D}`]||"",x?Zt.kanbanCardOverlay:"",S?Zt.archived:"",J?Zt.compressed:""].filter(Boolean).join(" "),B=da(Q?.color),re=o.find(H=>H.value===e.type),xe=da(re?.color)||Rk(e.type),Ee=H=>{const c=typeof H=="string"?H:H.path,Ue=typeof H=="string"?"":(H.fsPath||"").trim(),At=typeof H=="string"?"":(H.displayName||"").trim(),Wt=typeof H=="string"?"":(H.originalFilename||"").trim(),Tt=typeof H=="string"?"":(H.caption||"").trim();return[Ue,Wt,At,Tt,c].some(Xe=>/\.(png|jpe?g|webp|gif)(\?|#|$)/i.test(Xe))},ye=H=>{const c=typeof H=="string"?H:H.path,Ue=c.includes("/api/taskforce/documents/"),At=typeof H=="string"?"":(H.displayName||"").trim();if(Ue&&typeof H!="string")return Qj({displayName:H.displayName,originalFilename:H.originalFilename,fsPath:H.fsPath,assetId:H.assetId||null});const Wt=typeof H=="string"?"":(H.caption||"").trim();if(Wt)return Wt;if(At)return At;const Tt=typeof H=="string"?"":(H.originalFilename||"").trim();return Tt||c.split("?")[0].split("#")[0].split("/").pop()||"Context file"},Pe=H=>{const c=typeof H=="string"?H:H.path,Ue=typeof H=="string"?"":(H.fsPath||"").trim(),At=typeof H=="string"?"":(H.caption||"").trim(),Wt=typeof H=="string"?"":(H.originalFilename||"").trim(),Tt=[];if(Ue&&Tt.push(Ue),Wt&&Tt.push(Wt),At&&Tt.push(At),c.includes("/api/taskforce/context-link?path="))try{const Xe=new URL(c,"http://localhost").searchParams.get("path");Xe&&Tt.push(Xe)}catch{}Tt.push(c);for(const It of Tt){const gt=It.split("?")[0].split("#")[0].split("/").pop()||"",ze=gt.lastIndexOf(".");if(ze<=0||ze===gt.length-1)continue;const Ye=gt.slice(ze+1);if(Ye)return Ye.slice(0,5).toUpperCase()}return"FILE"},vt={"--task-change-glow-color":B||`var(--priority-${D})`,...B?{borderLeftColor:B,[`--priority-${D}`]:B}:{},...!E&&B?{borderLeft:`4px solid ${B}`}:{}},Ke=H=>H.replace(/\b\w/g,c=>c.toUpperCase()),bt=Jl(s,[e]),Ze=e.checklistItems||[],Qe=Ze.length,St=Qe>0?Ze.filter(H=>H.isCompleted).length:0,Me=(H,c)=>{H.stopPropagation(),I?.(H,c)};return t.jsxs("div",{className:ue,onClick:()=>w?.(e),style:vt,"data-task-card":"true",children:[t.jsxs("div",{className:Zt.taskHeader,children:[t.jsxs("div",{className:Zt.taskReferenceCluster,children:[k?t.jsxs(t.Fragment,{children:[t.jsx("span",{className:Zt.taskReferenceText,children:he}),t.jsx("span",{className:Zt.taskReferenceDivider,children:"/"})]}):null,f?t.jsxs(t.Fragment,{children:[t.jsx("span",{className:Zt.taskReferenceText,children:Z}),t.jsx("span",{className:Zt.taskReferenceDivider,children:"/"})]}):null,X?t.jsx(au,{copied:U&&r===ge.label,onClick:H=>Me(H,ge.label),disabled:!U,title:U?"Copy task reference":"Task reference pending sync",className:S?Zt.archiveBadge:"",label:Qd(X,n)}):null,R?t.jsx("span",{className:m.taskHierarchyMeta,title:"Temporary local reference until cloud sync assigns the final task number.",children:"Pending sync"}):null]}),t.jsx("div",{className:Zt.taskActions,onClick:H=>H.stopPropagation(),children:ae?ie||T?t.jsxs(t.Fragment,{children:[ie&&t.jsx("button",{type:"button",className:m.actionBtn,onClick:()=>ie(e.id),title:j==="deleted"?"Restore deleted task":"Restore archived task",children:t.jsx(cu,{size:16})}),T&&t.jsx("button",{type:"button",className:`${m.actionBtn} ${m.deleteBtn}`,onClick:()=>T(e.id),title:ve||(j==="deleted"?"Delete Permanently":"Move to Trash"),children:t.jsx(Hl,{size:16})})]}):null:t.jsx(Sh,{task:e,compressed:J,shortLabels:!0,showLabel:le,onSetStatus:(H,c)=>{if(oe){oe(H,c);return}if(c==="in-progress"){b?.(H);return}if(c==="review"){N?.(H);return}if(c==="done"){W?.(H);return}c==="cancelled"&&M?.(H)},onArchiveTask:te})})]}),t.jsxs("div",{className:Zt.taskContent,children:[ae&&t.jsx("div",{className:`${Zt.taskMeta} ${Zt.taskMetaCompact}`}),t.jsxs("div",{children:[t.jsxs("div",{className:Zt.taskTitle,style:J?{fontSize:"13px",lineHeight:"1.4"}:{},children:[j==="archived"&&"✓ ",j==="deleted"&&"Deleted: ",Qd(e.title,n)]}),e.description&&!ae&&!J&&t.jsx("div",{className:Zt.taskDescription,children:t.jsx(Bm,{onTaskIdClick:O,children:e.description})})]}),e.attachments&&e.attachments.length>0&&!ae&&!J&&t.jsxs("div",{className:Zt.attachmentThumbnails,children:[t.jsx("div",{className:Zt.attachmentImageRow,children:(e.attachments||[]).map((H,c)=>{const Ue=typeof H=="string"?H:H.path;return Ee(H)?t.jsx("div",{className:Zt.attachmentThumbnail,onClick:At=>{At.stopPropagation(),!Fm(typeof H=="string"?{path:Ue}:H,{taskId:e.id,taskReferenceLabel:X})&&window.open(Ue,"_blank")},children:t.jsx("img",{src:Ue,alt:`Attachment ${c}`})},c):null})}),t.jsx("div",{className:Zt.attachmentDocumentList,children:(e.attachments||[]).map((H,c)=>{const Ue=typeof H=="string"?H:H.path,At=typeof H=="string"?void 0:H.fsPath,Wt=ye(H);if(Ee(H))return null;const Tt=Pe(H);return t.jsxs("button",{type:"button",className:Zt.contextDocThumb,onClick:It=>{It.stopPropagation(),!Wm(H,At)&&window.open(Ue,"_blank")},title:Wt,style:{"--context-doc-accent":Dk(Tt)},children:[t.jsxs("span",{className:Zt.contextDocMain,children:[t.jsx("span",{className:Zt.contextDocIcon,"aria-hidden":"true",children:t.jsx(x1,{size:13})}),t.jsx("span",{className:Zt.contextDocText,children:t.jsx("span",{className:Zt.contextDocName,children:Wt})})]}),t.jsx("span",{className:Zt.contextDocType,children:Tt})]},c)})})]}),e.status==="cancelled"&&e.canceledReason&&!J&&t.jsxs("div",{className:Zt.taskCancellationReason,children:[t.jsx("strong",{children:"Cancellation Reason:"})," ",Qd(e.canceledReason,n)]}),de&&!ae&&!J&&t.jsxs("div",{className:Zt.taskLatestComment,children:[t.jsx("strong",{children:"Latest Activity:"})," ",Qd(de.length>120?de.substring(0,120)+"...":de,n)]}),!ae&&bt.length>0&&!J&&t.jsx("div",{className:`${Zt.taskSpecialists} ${Zt.taxonomiesList}`,children:bt.map(H=>{const c=e.taxonomies?.[H.id];return c?(Array.isArray(c)?c:[c]).map(At=>{const Wt=H.options.find(ze=>ze.value===At);if(!Wt)return null;const Tt=Hr[Wt.icon||"Layers"]||Im,It=da(Wt.color)||"var(--text-primary)",Xe=H.status==="retired"?`${H.label} (Retired)`:H.label,gt=Wt.status==="retired"?`${Wt.label} (Retired)`:Wt.label;return t.jsx("span",{className:m.specialistBadge,style:{borderColor:`${It}50`,backgroundColor:`${It}15`,color:It},title:`${Xe}: ${Ke(gt)}`,children:t.jsx(Tt,{size:10})},`${H.id}-${At}`)}):null})}),t.jsx("div",{className:Zt.taskMeta,children:ae?t.jsx("span",{children:e.category}):t.jsx(t.Fragment,{children:t.jsxs("div",{className:Zt.taskMetaRow,style:J?{marginBottom:0}:void 0,children:[t.jsxs("div",{className:Zt.taskMetaBadgeGroup,children:[(()=>{const H=da(ke?.color),c=ke?.icon||"Folder",Ue=Hr[c]||Ri;return t.jsx("span",{className:m.metaBadge,title:Ke(e.category),style:{color:H||"var(--text-secondary)",backgroundColor:H?`${H}15`:"var(--bg-tertiary)",borderColor:H?`${H}40`:"transparent"},children:t.jsx(Ue,{size:14})})})(),t.jsx("span",{className:`${m.metaBadge} ${m[`type_${e.type}`]||""}`,title:Ke(e.type||wr),style:{color:`var(--type-color, ${xe})`,backgroundColor:`color-mix(in srgb, var(--type-color, ${xe}), transparent 90%)`,borderColor:`color-mix(in srgb, var(--type-color, ${xe}), transparent 75%)`},children:re?.icon?(()=>{const H=Hr[re.icon]||Yp;return t.jsx(H,{size:14})})():Uj(e.type,14)}),Q&&t.jsx("span",{className:m.metaBadge,style:{color:B||"var(--text-secondary)",backgroundColor:B?`${B}15`:"var(--bg-tertiary)",borderColor:B?`${B}40`:"var(--border-color)"},title:`${Q.label}`,children:(()=>{const H=Q.icon||"AlertCircle",c=Hr[H]||yg;return t.jsx(c,{size:14})})()}),K>0&&t.jsxs("span",{className:m.metaBadge,title:`${K} activity items`,style:{color:"var(--text-muted)",backgroundColor:"var(--bg-tertiary)",borderColor:"var(--border-primary)",gap:"4px",padding:"0 8px"},children:[t.jsx(v1,{size:14}),t.jsx("span",{children:K})]}),Qe>0&&t.jsxs("span",{className:m.metaBadge,title:`${St}/${Qe} checklist items complete`,style:{color:"var(--text-muted)",backgroundColor:"var(--bg-tertiary)",borderColor:"var(--border-primary)",gap:"4px",padding:"0 8px"},children:[t.jsx(b1,{size:14}),t.jsx("span",{children:`${St}/${Qe}`})]})]}),t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[t.jsxs("span",{className:m.metaBadge,title:`AI-estimated complexity: ${se} (${me}/5)`,style:{color:F,backgroundColor:`color-mix(in srgb, ${F}, transparent 88%)`,borderColor:`color-mix(in srgb, ${F}, transparent 72%)`,gap:"4px",padding:"0 8px"},children:[t.jsx(w1,{size:14}),!J&&t.jsx("span",{children:se})]}),t.jsx("span",{className:m.metaBadge,title:`Assigned to: ${C}`,"aria-label":y==="unassigned"?"Unassigned":`Assigned to ${C}`,style:{backgroundColor:y==="agent"?"color-mix(in srgb, var(--color-violet-500, #8b5cf6), transparent 88%)":y==="member"?"color-mix(in srgb, var(--color-green-500, #22c55e), transparent 88%)":"color-mix(in srgb, var(--text-secondary, #888), transparent 88%)",padding:"0 8px",color:y==="agent"?"var(--color-violet-500, #8b5cf6)":y==="member"?"var(--color-green-500, #22c55e)":"var(--text-secondary, #888)",borderColor:y==="agent"?"color-mix(in srgb, var(--color-violet-500, #8b5cf6), transparent 72%)":y==="member"?"color-mix(in srgb, var(--color-green-500, #22c55e), transparent 72%)":"color-mix(in srgb, var(--text-secondary, #888), transparent 70%)",display:"flex",alignItems:"center"},children:y==="agent"?t.jsx(S1,{size:J?14:16}):y==="member"?t.jsx(k1,{size:J?14:16}):t.jsx(Yp,{size:J?14:16})})]})]})})})]})]})},ql=pt.memo(_1),vu="168px";function xh(){return t.jsx("span",{style:{fontSize:"12px",fontWeight:600,color:"var(--text-secondary)",marginRight:"4px"},children:De("standalone.filtersCaps")})}function Ii({label:e,options:n,selected:r,onChange:s,variant:o="label"}){return t.jsx(Ai,{label:e,options:n,selected:r,onChange:s,variant:o,containerStyle:{flex:`0 0 ${vu}`,maxWidth:vu}})}function _h({onClick:e}){return t.jsxs("button",{onClick:e,style:{background:"none",border:"none",color:"var(--text-secondary)",cursor:"pointer",fontSize:"12px",display:"flex",alignItems:"center",gap:"4px"},children:[t.jsx(Mi,{size:12})," ",De("standalone.clearFilters")]})}function Jp({label:e,options:n,selected:r,onChange:s,allLabel:o,title:d}){const[i,u]=pt.useState(!1),f=pt.useRef(null),k=n.find(v=>v.value===r),x=k?.selectedLabel||k?.label||o;pt.useEffect(()=>{const v=g=>{f.current&&!f.current.contains(g.target)&&u(!1)};return document.addEventListener("mousedown",v),()=>document.removeEventListener("mousedown",v)},[]);const S=v=>{s(v),u(!1)};return t.jsxs("div",{className:m.filterContainer,ref:f,style:{flex:`0 0 ${vu}`,maxWidth:vu},children:[t.jsxs("button",{type:"button",className:`${m.filterButton} ${r?m.filterActive:""}`,onClick:()=>u(v=>!v),title:d||`Filter by ${e}`,"aria-haspopup":"listbox","aria-expanded":i,children:[t.jsx("span",{children:x}),t.jsx(Ac,{size:14,style:{transform:i?"rotate(180deg)":"none",transition:"transform 0.2s",opacity:.5}})]}),i&&t.jsxs("div",{className:`${m.filterDropdown} ${m.appScrollbar} tf-scrollbar`,role:"listbox","aria-label":e,children:[t.jsxs("button",{type:"button",className:m.filterOption,onClick:()=>S(""),"aria-selected":!r,children:[t.jsx(eo,{size:14,style:{opacity:r?0:1}}),t.jsx("span",{style:{fontWeight:r?500:600},children:o})]}),t.jsx("div",{className:m.filterDivider}),n.map(v=>{const g=v.value===r;return t.jsxs("button",{type:"button",className:m.filterOption,onClick:()=>S(v.value),"aria-selected":g,children:[t.jsx(eo,{size:14,style:{opacity:g?1:0}}),t.jsx("span",{style:{fontWeight:g?600:500},children:v.label})]},v.value)})]})]})}function Ch({scope:e,onScopeChange:n,className:r,labelClassName:s}){return t.jsxs("div",{className:r,children:[t.jsx("span",{className:s,children:"Scope"}),t.jsx("div",{className:m.taskScopeTabs,role:"tablist","aria-label":"Task scope",children:[{value:"open",label:"Open"},{value:"archived",label:"Archived"},{value:"deleted",label:"Deleted"}].map(o=>{const d=e===o.value;return t.jsx("button",{type:"button",className:`${m.taskScopeTab} ${d?m.taskScopeTabActive:""}`,onClick:()=>n(o.value),role:"tab","aria-selected":d,"aria-pressed":d,title:`Show ${o.label.toLowerCase()} tasks`,children:o.label},o.value)})})]})}function Ah({onClick:e,disabled:n=!1,className:r,title:s="Permanently delete all deleted tasks",children:o="Delete All Permanently"}){return t.jsxs("button",{type:"button",className:r,onClick:e,disabled:n,title:s,children:[t.jsx(Hl,{size:14}),o]})}const{Search:Xp,ClipboardList:C1,ChevronRight:A1,ChevronDown:T1,Folder:I1,Archive:N1,RotateCcw:j1,X:R1,Plus:D1,ArrowUpDown:E1,Trash2:P1}=Hr,Th=a.forwardRef((e,n)=>{const{tasks:r,archivedTasks:s,categories:o,types:d,priorities:i,taxonomyDisplayLabels:u,assigneeOptions:f=[],workstreams:k=[],initiatives:x=[],searchQuery:S,filterCategories:v,filterTypes:g,filterPriorities:w,filterStatus:I,filterAssignees:b=[],filterTaxonomies:N,sortBy:W,sortOrder:M,showArchive:oe,taskScope:te,collapsedCategories:ie,loadingTasks:T,filteredTasks:ve,filteredArchive:O,groupedTasks:J,filteredDeletedTasks:le=[],groupedDeletedTasks:ge={},copiedId:X,recentlyChangedTaskIds:R=[],showTaskCardStatusLabel:U=!0,onSearchChange:Z,onFilterCategoriesChange:he,onFilterTypesChange:Q,onFilterPrioritiesChange:we,onFilterStatusChange:ke,onFilterAssigneesChange:be,onTaxonomyFilterChange:me,onSortByChange:Re,onSortOrderChange:Te,onShowArchiveChange:se,onTaskScopeChange:F,onClearFilters:D,onToggleCategory:E,onEditTask:y,onOpenTaskById:C,onCopyId:P,onToggleInProgress:j,onToggleReview:ae,onToggleComplete:L,onToggleCancel:de,onSetStatus:K,onArchiveTask:ue,onBulkArchive:B,onUnarchive:re,onDelete:xe,onDeleteAllDeleted:Ee,onFetchArchive:ye,onAddTaskToCategory:Pe,supplementalTasks:vt=[],taxonomies:Ke}=e,bt=new Set(R),Ze=pt.useMemo(()=>new Map(k.map(q=>[q.id,q])),[k]),Qe=pt.useMemo(()=>new Map(x.map(q=>[q.id,q])),[x]),St=pt.useCallback(q=>{const Se=q.workstreamId&&Ze.get(q.workstreamId)||null,wt=Se?.initiativeId&&Qe.get(Se.initiativeId)||null;return{taskWorkstream:Se,taskInitiative:wt}},[Qe,Ze]),Me=[...r,...s,...vt],H=!!F,c=F,Ue=te??(oe?"archived":"open"),At=H?Ue==="archived"?O:Ue==="deleted"?le:ve:ve,Wt=H?Ue==="archived"?{Archived:O}:Ue==="deleted"?ge:J:J,Tt=H?Ue==="deleted"?"deleted":Ue==="archived"?"archived":null:null,It=S?De("taskList.noMatchingTasks"):Ue==="archived"?"No archived tasks found.":Ue==="deleted"?"No deleted tasks found.":De("taskList.noActiveTasks"),Xe=o.filter(q=>!q.disabled),gt=o.filter(q=>q.disabled&&Me.some(Se=>Se.category===q.value)),ze=[...Xe,...gt.filter(q=>!Xe.some(Se=>Se.value===q.value))].map(q=>({value:q.value,label:q.disabled?`${q.label} (Legacy)`:q.label})),Ye=d.filter(q=>q.status!=="retired"),Ve=d.filter(q=>q.status==="retired"&&Me.some(Se=>Se.type===q.value)),ot=[...Ye,...Ve.filter(q=>!Ye.some(Se=>Se.value===q.value))].map(q=>({value:q.value,label:q.status==="retired"?`${q.label} (Retired)`:q.label})),jt=Jl(Ke,Me).filter(q=>q.filterEnabled!==!1).map(q=>({...q,options:np(q,Me)})),it=pt.useMemo(()=>[{value:"created",label:De("taskList.sortCreated")},{value:"updated",label:De("taskList.sortUpdated")},{value:"priority",label:De("taskList.sortPriority")},...uh(Ke,Me)],[Me,De,Ke]);return t.jsxs("div",{className:m.viewTab,ref:n,children:[t.jsxs("div",{className:m.filterBar,children:[t.jsxs("div",{className:m.searchContainer,children:[t.jsx(Xp,{size:16,className:m.searchIcon}),t.jsx("input",{type:"text",className:m.searchInput,placeholder:De("taskList.searchPlaceholder"),value:S,onChange:q=>Z(q.target.value)}),S&&t.jsx("button",{className:m.clearSearchBtn,onClick:()=>Z(""),title:De("taskList.clearSearchTitle"),children:t.jsx(R1,{size:14})})]}),t.jsxs("div",{className:m.filterRow,children:[t.jsx(Ai,{label:u?.category||De("taskList.categoryLabel"),options:ze,selected:v,onChange:he,variant:"value"}),t.jsx(Ai,{label:u?.type||De("taskList.typeLabel"),options:ot,selected:g,onChange:Q,variant:"value"})]}),t.jsxs("div",{className:m.filterRow,children:[t.jsx(Ai,{label:u?.priority||De("taskList.priorityLabel"),options:i,selected:w,onChange:we,variant:"value"}),t.jsx(Ai,{label:De("taskList.statusLabel"),options:Qs,selected:I,onChange:ke,variant:"value"}),t.jsx(Ai,{label:De("taskList.assigneeLabel"),options:f,selected:b,onChange:q=>be?.(q),variant:"value"})]}),jt.map(q=>t.jsx(Ai,{label:q.status==="retired"?`${q.label} (Retired)`:q.label,options:q.options.map(Se=>({...Se,label:Se.status==="retired"?`${Se.label} (Retired)`:Se.label})),selected:N[q.id]||[],onChange:Se=>me(q.id,Se),variant:"value"},q.id)),t.jsxs("div",{className:m.filterRow,children:[t.jsxs("div",{className:m.sortLabel,children:[t.jsx(E1,{size:14,style:{marginRight:"4px"}})," ",De("taskList.sortByLabel")]}),t.jsx("select",{value:W,onChange:q=>Re(q.target.value),className:`${m.filterSelect} ${m.filterSelectSort} `,children:it.map(q=>t.jsx("option",{value:q.value,children:q.label},q.value))}),t.jsx("button",{className:`${m.resetFiltersBtn} ${m.sortDirectionBtnWidget}`,onClick:Te,title:De(M==="desc"?"taskList.sortDirectionDescTitle":"taskList.sortDirectionAscTitle"),children:M==="desc"?t.jsx(vf,{size:14}):t.jsx(kf,{size:14})}),t.jsx("button",{className:m.resetFiltersBtn,onClick:D,title:De("taskList.resetFiltersTitle"),children:t.jsx(j1,{size:14})})]}),t.jsxs("div",{className:`${m.filterRow} ${m.archiveRow} `,children:[Ue==="open"?t.jsxs("button",{className:`${m.bulkArchiveBtn} ${r.some(q=>q.status==="done"||q.status==="cancelled")?"":m.disabledBtn} `,onClick:()=>r.some(q=>q.status==="done"||q.status==="cancelled")&&B(),disabled:!r.some(q=>q.status==="done"||q.status==="cancelled"),title:r.some(q=>q.status==="done"||q.status==="cancelled")?De("taskList.archiveAllTitle"):De("taskList.noTasksToArchiveTitle"),children:[t.jsx(N1,{size:12}),t.jsx("span",{children:De("taskList.archiveFinished")})]}):Ue==="deleted"&&Ee?t.jsx(Ah,{className:`${m.bulkArchiveBtn} ${m.taskToolbarAction} ${m.bulkDeleteBtn} ${le.length===0?m.disabledBtn:""}`,onClick:()=>le.length>0&&Ee(),disabled:le.length===0,title:le.length>0?"Empty trash":"Trash is already empty",children:"Empty Trash"}):t.jsx("div",{}),H?t.jsx(Ch,{scope:Ue,onScopeChange:q=>{c?.(q),q==="archived"?(se(!0),ye()):oe&&se(!1)},className:`${m.archiveToggle} ${m.taskScopeToggle}`}):t.jsxs("label",{className:m.archiveToggle,children:[t.jsx("input",{type:"checkbox","aria-label":"Archived",checked:oe,onChange:q=>{se(q.target.checked),q.target.checked&&ye()}}),t.jsx("span",{children:"Include Archive"})]})]})]}),T&&r.length===0?t.jsx("div",{className:m.loading,children:t.jsx(Pa,{size:24,className:m.spinner})}):At.length===0&&!T?t.jsxs("div",{className:m.emptyState,children:[S?t.jsx(Xp,{size:48}):Ue==="deleted"?t.jsx(P1,{size:48}):t.jsx(C1,{size:48}),t.jsx("p",{children:It})]}):t.jsx("div",{className:m.taskList,style:{opacity:T?.6:1,transition:"opacity 0.2s ease"},children:Object.entries(Wt).map(([q,Se])=>{if(Se.length===0)return null;const wt=ie[q];return t.jsxs("div",{className:m.categoryGroup,children:[t.jsx("div",{className:m.categoryHeader,onClick:()=>E(q),children:t.jsxs("div",{className:m.categoryTitle,children:[wt?t.jsx(A1,{size:16}):t.jsx(T1,{size:16}),(()=>{const tt=o.find(ne=>ne.label===q),_e=tt?.icon&&Pi[tt.icon]?Pi[tt.icon]:I1,$t=da(tt?.color)||"var(--color-purple, #8b5cf6)";return t.jsx(_e,{size:16,className:m.categoryTitleIcon,style:{color:$t}})})(),q,t.jsxs("span",{className:m.categoryCount,children:["(",Se.length,")"]}),Pe&&t.jsx("button",{className:m.kanbanQuickAdd,onClick:tt=>{tt.stopPropagation(),Pe(q)},title:De("taskList.addTaskToCategoryTitle",{category:q}),style:{marginLeft:"auto"},disabled:Tt!==null,children:t.jsx(D1,{size:14})})]})}),!wt&&t.jsx("div",{className:m.categoryItems,children:Se.map(tt=>(()=>{const{taskWorkstream:_e,taskInitiative:$t}=St(tt);return t.jsx(ql,{task:tt,taskWorkstream:_e,taskInitiative:$t,searchQuery:S,copiedId:X,taxonomies:Ke,types:d,priorities:i,assigneeOptions:f,onClick:y,onOpenTaskById:C,onCopyId:P,onToggleInProgress:j,onToggleReview:ae,onToggleComplete:L,onToggleCancel:de,onSetStatus:K,onArchiveTask:ue,onUnarchive:Tt?re:void 0,onDelete:Tt?xe:void 0,categories:o,isRecentlyChanged:bt.has(tt.id),readOnlyMode:Tt,showStatusLabel:U},tt.id)})())})]},q)})}),!H&&oe&&O.length>0&&t.jsxs("div",{className:m.archiveList,children:[t.jsx("div",{className:m.archiveHeader,children:"Archived"}),O.map(q=>(()=>{const{taskWorkstream:Se,taskInitiative:wt}=St(q);return t.jsx(ql,{task:q,taskWorkstream:Se,taskInitiative:wt,searchQuery:S,copiedId:X,isArchived:!0,types:d,assigneeOptions:f,onClick:y,onCopyId:P,onSetStatus:K,onUnarchive:re,onDelete:xe,deleteActionTitle:"Delete Permanently",categories:o,showStatusLabel:U},q.id)})())]})]})});Th.displayName="TaskList";const M1="_formNotice_1infv_1",L1="_assigneeIndicator_1infv_12",B1="_assigneeIndicatorAgent_1infv_20",W1="_assigneeIndicatorUser_1infv_24",F1="_assigneeIndicatorUnassigned_1infv_28",O1="_markdownPreview_1infv_32",$1="_error_1infv_83",U1="_keyboardHint_1infv_92",z1="_taskFormLifecycle_1infv_109",H1="_taskFormMetaDivider_1infv_114",G1="_taskFormMetaGrid_1infv_121",V1="_compactMetaSection_1infv_127",Z1="_createWorkstreamRow_1infv_133",q1="_createWorkstreamDropdown_1infv_139",K1="_compactMetaGrid_1infv_144",Y1="_compactMetaField_1infv_150",J1="_compactMetaSpacer_1infv_154",X1="_compactMetaFieldHint_1infv_168",Q1="_formFieldsetReset_1infv_172",eR="_taskFormDateRow_1infv_185",tR="_taskFormDateLabel_1infv_192",nR="_taskFormDateValue_1infv_200",aR="_taskFormMetaStack_1infv_208",rR="_taskFormMetaActor_1infv_214",sR="_taskFormDateWarning_1infv_226",oR="_taskFormDateError_1infv_232",iR="_helpHeader_1infv_238",cR="_helpClose_1infv_249",lR="_markdownHelp_1infv_263",dR="_helpGrid_1infv_272",uR="_helpGridItem_1infv_278",mR="_settingsHint_1infv_290",pR="_sectionBlock_1infv_296",fR="_softSectionSurface_1infv_306",hR="_stackedList_1infv_313",gR="_stackedListSpaced_1infv_318",yR="_checklistRow_1infv_322",vR="_checklistRowDragging_1infv_331",kR="_checklistHandleBtn_1infv_335",SR="_checklistCheckboxBtn_1infv_358",wR="_checklistCheckboxBtnChecked_1infv_378",bR="_checklistItemText_1infv_383",xR="_checklistItemTextCompleted_1infv_389",_R="_checklistRemoveBtn_1infv_394",CR="_specialistChip_1infv_457",AR="_specialistChipActive_1infv_480",TR="_commentPanel_1infv_561",IR="_commentThread_1infv_575",NR="_emptyComments_1infv_584",jR="_comment_1infv_561",RR="_activityEvent_1infv_602",DR="_activityEventSystem_1infv_607",ER="_commentAi_1infv_611",PR="_commentUser_1infv_615",MR="_commentHeader_1infv_619",LR="_activityEventHeader_1infv_636",BR="_commentAuthor_1infv_642",WR="_commentTime_1infv_650",FR="_commentText_1infv_654",OR="_activityEventText_1infv_690",$R="_activityEventChanges_1infv_699",UR="_activityEventChange_1infv_699",zR="_commentInputArea_1infv_717",HR="_commentInput_1infv_717",GR="_sendCommentBtn_1infv_749",VR="_taxonomyFieldsGrid_1infv_775",ZR="_markdownPreviewContainer_1infv_782",qR="_descriptionSurface_1infv_787",Le={formNotice:M1,assigneeIndicator:L1,assigneeIndicatorAgent:B1,assigneeIndicatorUser:W1,assigneeIndicatorUnassigned:F1,markdownPreview:O1,error:$1,keyboardHint:U1,taskFormLifecycle:z1,taskFormMetaDivider:H1,taskFormMetaGrid:G1,compactMetaSection:V1,createWorkstreamRow:Z1,createWorkstreamDropdown:q1,compactMetaGrid:K1,compactMetaField:Y1,compactMetaSpacer:J1,compactMetaFieldHint:X1,formFieldsetReset:Q1,taskFormDateRow:eR,taskFormDateLabel:tR,taskFormDateValue:nR,taskFormMetaStack:aR,taskFormMetaActor:rR,taskFormDateWarning:sR,taskFormDateError:oR,helpHeader:iR,helpClose:cR,markdownHelp:lR,helpGrid:dR,helpGridItem:uR,settingsHint:mR,sectionBlock:pR,softSectionSurface:fR,stackedList:hR,stackedListSpaced:gR,checklistRow:yR,checklistRowDragging:vR,checklistHandleBtn:kR,checklistCheckboxBtn:SR,checklistCheckboxBtnChecked:wR,checklistItemText:bR,checklistItemTextCompleted:xR,checklistRemoveBtn:_R,specialistChip:CR,specialistChipActive:AR,commentPanel:TR,commentThread:IR,emptyComments:NR,comment:jR,activityEvent:RR,activityEventSystem:DR,commentAi:ER,commentUser:PR,commentHeader:MR,activityEventHeader:LR,commentAuthor:BR,commentTime:WR,commentText:FR,activityEventText:OR,activityEventChanges:$R,activityEventChange:UR,commentInputArea:zR,commentInput:HR,sendCommentBtn:GR,taxonomyFieldsGrid:VR,markdownPreviewContainer:ZR,descriptionSurface:qR};function vm({label:e,value:n,options:r,onChange:s,type:o="priority",hideLabel:d=!1,showSelectedLabel:i=!0}){const u=r.find(f=>String(f.value)===String(n));return t.jsxs("div",{className:m.field,children:[!d&&t.jsxs("div",{className:m.labelRow,children:[t.jsx("label",{className:m.label,children:e}),i&&u&&t.jsx("span",{className:m.levelLabel,style:{color:da(u.color)||(o==="priority"?`var(--priority-${n})`:o==="complexity"?`var(--complexity-${n})`:"var(--text-secondary)"),backgroundColor:(da(u.color)?`${da(u.color)}25`:void 0)||(o==="priority"?`color-mix(in srgb, var(--priority-${n}), transparent 85%)`:o==="complexity"?`color-mix(in srgb, var(--complexity-${n}), transparent 85%)`:"rgba(255,255,255,0.05)")},children:u.label})]}),t.jsx("div",{className:m.levelSelect,children:r.map((f,k)=>{const x=r.findIndex(g=>String(g.value)===String(n)),S=k<=x,v=String(f.value)===String(n);return t.jsx("button",{type:"button",className:`${m.levelOption} ${S?m.levelOptionFilled:""} ${S?m[`levelOption_${o}_${f.value}`]:""} ${v?m.levelOptionSelected:""}`,onClick:()=>s(f.value),title:f.label,style:{opacity:S?1:.15,backgroundColor:S?da(f.color)||(o==="priority"?`var(--priority-${f.value})`:o==="complexity"?`var(--complexity-${f.value})`:"var(--text-primary)"):void 0,color:S?o==="priority"&&String(f.value).toLowerCase()==="medium"?"black":"white":void 0,boxShadow:S&&(o==="priority"&&(String(f.value).toLowerCase()==="critical"||f.value===4)||o==="complexity"&&(String(f.value).toLowerCase()==="epic"||f.value===5))?`0 0 12px ${o==="priority"?"rgba(239, 68, 68, 0.6)":"rgba(217, 70, 239, 0.6)"}`:void 0}},String(f.value))})})]})}const Qp=new Map;function KR(e){const n=e instanceof Date?e:new Date(e);return Number.isNaN(n.getTime())?null:n}function YR(e,n){const r=Object.entries(n).sort(([s],[o])=>s.localeCompare(o));return JSON.stringify([e,r])}function Cc(e,n,r){const s=KR(e);if(!s)return"";const o=r??zf(),d=YR(o,n);let i=Qp.get(d);return i||(i=new Intl.DateTimeFormat(o,n),Qp.set(d,i)),i.format(s)}const JR="D-";function XR(e){return Yl(JR,e)}const Ih=[".png",".jpg",".jpeg",".webp",".gif",".pdf",".txt",".md",".csv",".json",".doc",".docx",".html",".js",".ts",".tsx",".css",".py",".java",".go",".rs",".sh"].join(","),QR=new Set(["image/png","image/jpeg","image/webp"]),e0=new Set(Ih.split(",").map(e=>e.trim().toLowerCase())),t0=10*1024*1024,n0=3500;function Nh(e){const n=e.trim().toLowerCase(),r=n.lastIndexOf(".");return r===-1?"":n.slice(r)}function km(e){if(e.length===0)return"";const n=e.slice(0,3).join(", "),r=e.length-3;return r>0?`${n}, +${r} more`:n}function a0(e){return`${e.name.trim().toLowerCase()}::${e.size}::${e.lastModified}`}function r0(e){return new Promise((n,r)=>{const s=new FileReader;s.onload=()=>n(String(s.result||"")),s.onerror=()=>r(s.error||new Error("Failed to read file")),s.readAsDataURL(e)})}function El(e){return/\.(png|jpe?g|webp|gif)(\?|#|$)/i.test(e)}function s0(e){const n=e.types;if(!n)return null;for(const r of Array.from(n)){const s=String(r||"").trim().toLowerCase();if(QR.has(s))return s}return null}function ef(e,n){const r=e.includes("?")?"&":"?";return`${e}${r}download=1&filename=${encodeURIComponent(n)}`}function tf(e){return typeof e=="string"?e.split("/").pop()||"Context file":e.displayName||e.originalFilename||e.caption||e.fsPath||e.path.split("/").pop()||"Context file"}function o0(e){const n=typeof e=="string"?[e]:[e.originalFilename,e.displayName,e.caption,e.fsPath,e.path];for(const s of n){if(!s)continue;const o=Nh(s);if(o)return o.replace(".","").slice(0,5).toUpperCase()}const r=typeof e=="string"?e:e.path;return/^https?:\/\//i.test(r)?"LINK":"FILE"}function i0(e){const{taskId:n,taskReferenceLabel:r,workspaceId:s,contextFiles:o,onAddContextFile:d,onRemoveContextFile:i,onUpdateContextCaption:u}=e,f=a.useRef(null),[k,x]=a.useState(!1),[S,v]=a.useState(null),[g,w]=a.useState(""),[I,b]=a.useState(null),[N,W]=a.useState(null),[M,oe]=a.useState(!1),[te,ie]=a.useState(!1),[T,ve]=a.useState(0),O=a.useRef(new Set),J=a.useRef(new Set),le=y=>(y||"").trim(),ge=(y,C)=>{const P=[],j=le(y),ae=le(C);return j&&P.push(`path:${j}`),ae&&P.push(`fs:${ae}`),P},X=a.useMemo(()=>{const y=new Set;return o.forEach(C=>{if(typeof C=="string"){ge(C).forEach(P=>y.add(P));return}ge(C.path,C.fsPath).forEach(P=>y.add(P))}),y},[o]);a.useEffect(()=>{O.current=new Set(X)},[X]);const R=(y,C)=>C.some(P=>y.has(P)),U=(y,C)=>C.forEach(P=>y.add(P)),Z=String(s||"").trim(),he=(y="application/json")=>{const C={"Content-Type":y};return Z&&(C["x-taskforce-workspace-id"]=Z),C},Q=(y,C=!0,P=O.current)=>{const j=y.trim();if(!j||!/^https?:\/\//i.test(j))return"invalid";const L=j,de=ge(L);if(R(P,de))return"duplicate";const K=j.split(/[\\/]/).pop()||j;return d({path:L,caption:K,timestamp:new Date().toISOString()}),U(P,de),C&&w(""),b(null),"added"};a.useEffect(()=>{if(!N)return;const y=window.setTimeout(()=>{W(null)},n0);return()=>window.clearTimeout(y)},[N]);const we=async y=>{if(y.length===0)return;v(null),W(null);const C=y,P=[],j=[],ae=[],L=[],de=new Set(J.current);C.forEach(re=>{const xe=Nh(re.name);if(!e0.has(xe)){P.push(re.name);return}if(re.size>t0){j.push(re.name);return}const Ee=a0(re);if(de.has(Ee)){ae.push(re.name);return}de.add(Ee),L.push({file:re,fingerprint:Ee})});const K=[];if(P.length>0&&K.push(`${P.length} unsupported file${P.length===1?"":"s"} skipped: ${km(P)}.`),j.length>0&&K.push(`${j.length} file${j.length===1?"":"s"} over 10 MB skipped: ${km(j)}.`),ae.length>0&&K.push(`${ae.length} local duplicate file${ae.length===1?"":"s"} skipped before upload: ${km(ae)}.`),L.length===0){K.length>0&&W(K.join(" ")),f.current&&(f.current.value="");return}x(!0);const ue=new Set(O.current);let B=0;try{for(const{file:xe,fingerprint:Ee}of L){let ye=null;const Pe=await fetch("/api/taskforce/context-upload/init",{method:"POST",headers:he(),body:JSON.stringify({originalName:xe.name,mimeType:xe.type||"application/octet-stream",size:xe.size,taskId:n||null,workspaceId:Z||null})});if(Pe.ok){const Ke=await Pe.json();if(Ke?.success&&typeof Ke?.uploadUrl=="string"&&typeof Ke?.path=="string"){if(!(await fetch(Ke.uploadUrl,{method:String(Ke.method||"PUT"),headers:Ke.headers||{"Content-Type":xe.type||"application/octet-stream"},body:xe})).ok)throw new Error(`Upload failed for ${xe.name}`);const Ze=await fetch("/api/taskforce/context-upload/finalize",{method:"POST",headers:he(),body:JSON.stringify({relativePath:Ke.relativePath,mimeType:xe.type||"application/octet-stream",originalName:xe.name,size:xe.size,taskId:n||null,workspaceId:Z||null})});if(!Ze.ok){const Qe=await Ze.json().catch(()=>({}));throw new Error(Qe?.error||`Upload failed for ${xe.name}`)}ye=await Ze.json().catch(()=>null)}else Ke?.success&&typeof Ke?.path=="string"&&(ye=Ke)}if(!ye){const Ke=await r0(xe),bt=await fetch("/api/taskforce/context-upload",{method:"POST",headers:he(),body:JSON.stringify({file:Ke,originalName:xe.name,taskId:n||null,workspaceId:Z||null})});if(!bt.ok)throw new Error(`Upload failed for ${xe.name}`);ye=await bt.json()}if(!ye?.success||!ye?.path)throw new Error(`Upload failed for ${xe.name}`);const vt=ge(ye.path,ye.fsPath);if(R(ue,vt)){B+=1;continue}d({path:ye.path,fsPath:ye.fsPath,caption:typeof ye.caption=="string"&&ye.caption.trim().length>0?ye.caption:xe.name,displayName:typeof ye.displayName=="string"?ye.displayName:void 0,originalFilename:typeof ye.originalFilename=="string"?ye.originalFilename:xe.name,assetId:typeof ye.assetId=="string"?ye.assetId:void 0,referenceNumber:typeof ye.referenceNumber=="number"?ye.referenceNumber:null,referenceLabel:typeof ye.referenceLabel=="string"?ye.referenceLabel:void 0,taskId:typeof ye.taskId=="string"?ye.taskId:null,timestamp:new Date().toISOString()}),Hv({workspaceId:Z||"default",taskId:n||null,reason:"upload"}),U(ue,vt),J.current.add(Ee)}const re=[...K];B>0&&re.push(`${B} duplicate file${B===1?"":"s"} skipped.`),W(re.length>0?re.join(" "):null),O.current=ue}catch(re){v(re instanceof Error?re.message:"Failed to upload context file")}finally{x(!1),f.current&&(f.current.value="")}},ke=async y=>{!y||y.length===0||await we(Array.from(y))},be=async()=>{if(v(null),W(null),!navigator.clipboard||typeof navigator.clipboard.read!="function"){v("Clipboard image paste is not available in this browser.");return}try{const y=await navigator.clipboard.read(),C=[];for(const P of y){const j=s0(P);if(!j)continue;const ae=await P.getType(j),L=j.toLowerCase()==="image/png"?"png":j.toLowerCase()==="image/webp"?"webp":"jpg";C.push(new globalThis.File([ae],`pasted-image-${Date.now()}.${L}`,{type:j}))}if(C.length===0){v("Clipboard does not currently contain a supported image.");return}await we(C)}catch(y){v(y?.message||"Failed to read an image from the clipboard.")}},me=y=>{const C=new Set,P=y.dataTransfer.getData("text/uri-list")||"",j=y.dataTransfer.getData("text/plain")||"",ae=`${P}
|
|
4
|
-
${j}`.split(`
|
|
5
|
-
`).map(L=>L.trim()).filter(L=>!!L&&!L.startsWith("#"));for(const L of ae){if(/^file:\/\//i.test(L)){try{const de=new URL(L),K=decodeURIComponent(de.pathname||"").trim();K&&C.add(K)}catch{}continue}C.add(L)}return Array.from(C)},Re=y=>{if(y.preventDefault(),y.stopPropagation(),ie(!1),ve(0),v(null),b(null),W(null),y.dataTransfer.files&&y.dataTransfer.files.length>0){ke(y.dataTransfer.files);return}const C=me(y);if(C.length===0){b("Drop a file or URL.");return}const P=new Set(O.current);let j=0,ae=0,L=0;C.forEach(K=>{const ue=Q(K,!1,P);ue==="duplicate"&&(j+=1),ue==="added"&&(ae+=1),ue==="invalid"&&(L+=1)});const de=[];j>0&&de.push(`${j} duplicate link${j===1?"":"s"} skipped.`),L>0&&de.push(`${L} local path${L===1?"":"s"} skipped. Upload files to attach them, or drop an http(s) URL to link.`),W(de.length>0?de.join(" "):ae>0?null:N),O.current=P},Te=y=>{y.preventDefault(),y.stopPropagation(),ve(C=>C+1),ie(!0)},se=y=>{y.preventDefault(),y.stopPropagation(),ve(C=>{const P=Math.max(0,C-1);return P===0&&ie(!1),P})},F=y=>{y.preventDefault(),y.stopPropagation(),y.dataTransfer.dropEffect="copy"},D=o.filter(y=>{const C=typeof y=="string"?y:y.path;return El(C)}),E=o.filter(y=>{const C=typeof y=="string"?y:y.path;return!El(C)});return t.jsxs("div",{className:m.specialistSection,children:[t.jsxs("div",{className:m.toggleHeading,onClick:()=>oe(!M),title:M?"Hide context documents":"Show context documents",children:[t.jsxs("label",{className:m.label,children:["Context Documents ",o.length>0&&`(${o.length})`]}),M?t.jsx(Ac,{size:14}):t.jsx(Ei,{size:14})]}),M&&t.jsxs(t.Fragment,{children:[t.jsx("p",{className:m.settingsHint,children:"Upload files into task context storage, or add an external http(s) URL."}),t.jsxs("div",{className:m.contextUploadPanel,children:[t.jsxs("div",{className:m.contextUploadActions,children:[t.jsxs("button",{type:"button",className:m.secondaryHeaderBtn,onClick:()=>f.current?.click(),disabled:k,children:[k?t.jsx(Pa,{size:12,className:m.spinner}):t.jsx(om,{size:12}),k?"Uploading...":"Upload File"]}),t.jsxs("button",{type:"button",className:m.secondaryHeaderBtn,onClick:()=>{be()},disabled:k,children:[t.jsx(Ol,{size:12}),"Paste Image from Clipboard"]})]}),t.jsx("input",{ref:f,type:"file",accept:Ih,multiple:!0,className:m.hiddenInput,onChange:y=>{ke(y.target.files)}}),S&&t.jsx("div",{className:m.error,children:S}),t.jsxs("div",{className:m.contextLinkRow,children:[t.jsx("input",{type:"text",className:m.input,placeholder:"Add external URL (https://...)",value:g,onChange:y=>{w(y.target.value),I&&b(null),N&&W(null)}}),t.jsx("button",{type:"button",className:m.secondaryHeaderBtn,onClick:()=>{if(!g.trim()){b("Enter an http(s) URL to link.");return}const y=Q(g,!0);if(y==="invalid"){b("Only external http(s) URLs can be linked here. Upload files to attach them.");return}y==="duplicate"?W("Link already exists in task context."):y==="added"&&W(null)},children:"Add URL"})]}),t.jsxs("div",{className:`${m.contextDropzone} ${te?m.contextDropzoneActive:""}`,onDragEnter:Te,onDragLeave:se,onDragOver:F,onDrop:Re,children:[t.jsx(om,{size:14}),t.jsx("span",{children:"Drop files or URLs here"})]})]}),N&&t.jsx("div",{className:m.contextNotice,children:N}),I&&t.jsx("div",{className:m.error,children:I}),D.length>0&&t.jsx("div",{className:m.attachmentGrid,children:o.map((y,C)=>{const P=typeof y=="string"?y:y.path;if(!El(P))return null;const j=typeof y=="string"?void 0:y.fsPath,ae=typeof y=="string"?"":y.caption||"",L=tf(y),de=El(P),K=/^https?:\/\//i.test(P),ue=vh(y);return t.jsxs("div",{className:m.attachmentCard,children:[t.jsxs("div",{className:m.attachmentPreviewContainer,children:[de?t.jsx("img",{src:P,alt:ae||`Context file ${C}`,onClick:()=>{Fm(y,{taskId:n,taskReferenceLabel:r})||window.open(P,"_blank")},onError:B=>{B.target.style.display="none",B.target.parentElement.classList.add(m.brokenImage)}}):t.jsxs("button",{type:"button",className:m.contextFileLink,onClick:()=>{Wm(y,j)||window.open(P,"_blank")},title:"Open file",children:[t.jsx(om,{size:16}),t.jsx("span",{children:ae||j||P.split("/").pop()||"Context file"})]}),t.jsxs("div",{className:m.brokenImagePlaceholder,children:[t.jsx(Tc,{size:16}),t.jsx("span",{children:"Preview unavailable"})]}),t.jsxs("div",{className:m.attachmentActions,children:[ue&&t.jsx("button",{type:"button",className:m.attachmentActionBtn,onClick:B=>{B.stopPropagation(),Fm(y,{taskId:n,taskReferenceLabel:r})},title:"Annotate",children:t.jsx(vg,{size:12})}),j&&t.jsx("button",{type:"button",className:m.attachmentActionBtn,onClick:B=>{B.stopPropagation(),navigator.clipboard.writeText(j)},title:`Copy path: ${j}`,children:t.jsx(Ol,{size:12})}),!K&&t.jsx("button",{type:"button",className:m.attachmentActionBtn,onClick:B=>{B.stopPropagation(),window.open(ef(P,ae||L),"_blank")},title:"Download",children:t.jsx(_p,{size:12})}),t.jsx("button",{type:"button",className:m.attachmentActionBtn,onClick:B=>{B.stopPropagation(),i(C)},title:"Delete",children:t.jsx(Hl,{size:12})})]})]}),t.jsx("input",{type:"text",className:m.attachmentCaptionInput,placeholder:"Add a label...",value:ae,onChange:B=>u(C,B.target.value)})]},C)})}),E.length>0&&t.jsx("div",{className:m.documentAttachmentList,children:o.map((y,C)=>{const P=typeof y=="string"?y:y.path;if(El(P))return null;const j=typeof y=="string"?void 0:y.fsPath,ae=typeof y=="string"?"":y.caption||"",L=tf(y),de=o0(y),K=typeof y=="string"?"":XR(y),ue=/^https?:\/\//i.test(P);return t.jsxs("div",{className:m.documentAttachmentItem,children:[t.jsxs("div",{className:m.documentAttachmentRow,children:[t.jsxs("button",{type:"button",className:m.documentAttachmentLink,onClick:()=>{Wm(y,j)||window.open(P,"_blank")},title:L,children:[t.jsxs("span",{className:m.documentAttachmentMain,children:[t.jsx("span",{className:m.documentAttachmentIcon,"aria-hidden":"true",children:t.jsx(kg,{size:13})}),t.jsxs("span",{className:m.documentAttachmentText,children:[t.jsx("span",{className:m.documentAttachmentName,children:L}),K&&t.jsx("span",{className:m.taskIdBadge,children:K})]})]}),t.jsx("span",{className:m.documentAttachmentType,children:de})]}),t.jsxs("div",{className:m.documentAttachmentActions,children:[j&&t.jsx("button",{type:"button",className:m.documentAttachmentActionBtn,onClick:()=>{navigator.clipboard.writeText(j)},title:`Copy path: ${j}`,children:t.jsx(Ol,{size:12})}),!ue&&t.jsx("button",{type:"button",className:m.documentAttachmentActionBtn,onClick:()=>{window.open(ef(P,ae||L),"_blank")},title:"Download",children:t.jsx(_p,{size:12})}),t.jsx("button",{type:"button",className:m.documentAttachmentActionBtn,onClick:()=>i(C),title:"Delete",children:t.jsx(Hl,{size:12})})]})]}),t.jsx("input",{type:"text",className:m.documentAttachmentCaptionInput,placeholder:"Add a label...",value:ae,onChange:B=>u(C,B.target.value)})]},C)})})]})]})}function c0({id:e,item:n,onToggle:r,onRemove:s}){const{attributes:o,listeners:d,setNodeRef:i,transform:u,transition:f,isDragging:k}=jf({id:e}),x={transform:zm.Transform.toString(u),transition:f,opacity:k?.88:1};return t.jsxs("div",{ref:i,style:x,className:`${Le.checklistRow} ${k?Le.checklistRowDragging:""}`.trim(),children:[t.jsx("button",{type:"button",className:Le.checklistHandleBtn,title:"Reorder checklist item","aria-label":"Reorder checklist item",...o,...d,children:t.jsx(bg,{size:14})}),t.jsx("button",{type:"button",className:`${Le.checklistCheckboxBtn} ${n.isCompleted?Le.checklistCheckboxBtnChecked:""}`.trim(),onClick:r,title:n.isCompleted?"Mark incomplete":"Mark complete","aria-label":n.isCompleted?"Mark checklist item incomplete":"Mark checklist item complete",children:n.isCompleted?t.jsx(eo,{size:14,strokeWidth:2.1}):null}),t.jsx("span",{className:`${Le.checklistItemText} ${n.isCompleted?Le.checklistItemTextCompleted:""}`.trim(),children:n.title}),t.jsx("button",{type:"button",className:Le.checklistRemoveBtn,onClick:s,title:"Remove checklist item","aria-label":"Remove checklist item",children:t.jsx(Mi,{size:15,strokeWidth:1.9})})]})}function Sm(e,n){const r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return r?`rgba(${parseInt(r[1],16)}, ${parseInt(r[2],16)}, ${parseInt(r[3],16)}, ${n})`:""}function jh(e){const{editingTaskId:n,error:r,title:s,description:o,category:d,type:i,priority:u,complexity:f,manualComplexityEnabled:k=!1,assignee:x,scheduledDate:S,dueDate:v,workstreamInput:g="",checklistItems:w,comments:I,newCommentText:b,contextFiles:N,currentWorkspaceId:W,apiBaseUrl:M,descriptionFocused:oe,showMarkdownHelp:te,showChecklist:ie=!1,checklistEnabled:T=!0,showComments:ve,formTaxonomies:O,onTaxonomyChange:J,onOpenSettings:le,categories:ge,types:X,priorities:R,taxonomyDisplayLabels:U,assigneeOptions:Z,taxonomies:he,workstreams:Q=[],initiatives:we=[],copiedId:ke,onTitleChange:be,onDescriptionChange:me,onCategoryChange:Re,onTypeChange:Te,onPriorityChange:se,onComplexityChange:F,onAssigneeChange:D,onScheduledDateChange:E,onDueDateChange:y,onWorkstreamInputChange:C=()=>{},onChecklistItemsChange:P,onNewCommentTextChange:j,onDescriptionFocusedChange:ae,onShowMarkdownHelpChange:L,onShowChecklistChange:de=()=>{},onShowCommentsChange:K,onSubmit:ue,onAddComment:B,onAddContextFile:re,onRemoveContextFile:xe,onUpdateContextCaption:Ee,onCopyId:ye,onToggleInProgress:Pe,onToggleReview:vt,onToggleComplete:Ke,onToggleCancel:bt,onSetStatus:Ze,onArchiveTask:Qe,onUnarchive:St,onOpenTaskById:Me,currentTask:H,commentsEndRef:c}=e,Ue=Cs(H),At=pt.useMemo(()=>xk(he,O),[he,O]),Wt=pt.useMemo(()=>{const G=ge.find(Ut=>Ut.value===_c),Fe={value:_c,label:G?.label||bu,icon:G?.icon||"HelpCircle",color:G?.color||"var(--text-secondary)"},Ge=ge.find(Ut=>Ut.value===d),$e=ge.filter(Ut=>!Ut.disabled||Ut.value===Ge?.value).filter(Ut=>Ut.value!==_c).map(Ut=>({value:Ut.value,label:Ut.disabled?`${Ut.label} (Legacy)`:Ut.label,icon:Ut.icon,color:Ut.color}));return[Fe,...$e]},[ge,d]),Tt=pt.useMemo(()=>{const G=X.find(Ge=>Ge.value===i);return X.filter(Ge=>Ge.status!=="retired"||Ge.value===G?.value).map(Ge=>({value:Ge.value,label:Ge.status==="retired"?`${Ge.label} (Retired)`:Ge.label,icon:Ge.icon||"Box",color:Ge.color||"violet-500"}))},[X,i]),It=G=>G&&Cc(G,{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit"})||null,Xe=It(H?.createdAt),gt=It(H?.updatedAt||H?.createdAt),ze=It(H?.completedAt),Ye=pt.useMemo(()=>{const G=new Date,Fe=G.getFullYear(),Ge=String(G.getMonth()+1).padStart(2,"0"),Ct=String(G.getDate()).padStart(2,"0");return`${Fe}-${Ge}-${Ct}`},[]),Ve=!!(v&&S&&v<S),ot=!!(v&&v<Ye&&(!H||H.status!=="done"&&H.status!=="cancelled")),xt=w.filter(G=>G.isCompleted).length,[jt,it]=pt.useState(""),[q,Se]=pt.useState(!1),wt=!!H?.isArchived,tt=!!H?.isDeleted,_e=pt.useMemo(()=>Q.map(G=>{const Fe=fu(G);return{value:Fe||G.id,label:Fe?`${Fe} · ${G.title}`:G.title,icon:"Folder",color:"var(--text-secondary)"}}),[Q]),$t=pt.useMemo(()=>_e.some(G=>String(G.value)===String(g||"").trim()),[g,_e]);pt.useEffect(()=>{if(n){q&&Se(!1);return}if(g.trim()){if($t&&q){Se(!1);return}!$t&&!q&&Se(!0)}},[n,$t,q,g]);const ne=wt||tt,Ce=pt.useRef(null),Ie=Cf(jm(Nf,{activationConstraint:{distance:6}}));pt.useLayoutEffect(()=>{const G=Ce.current;if(!G)return;const Fe=()=>{G.scrollTop=0;const Ct=G.parentElement;Ct&&(typeof Ct.scrollTo=="function"?Ct.scrollTo({top:0,left:0,behavior:"auto"}):Ct.scrollTop=0)};Fe();const Ge=window.requestAnimationFrame(Fe);return()=>window.cancelAnimationFrame(Ge)},[n,H?.id]);const je=()=>{const G=jt.trim();if(!G)return;const Fe=new Date().toISOString();P([...w,{id:`checklist-draft-${Fe}-${w.length}`,taskId:n||"",title:G,isCompleted:!1,order:w.length,createdAt:Fe,updatedAt:Fe}]),it("")},at=pt.useCallback(G=>{const{active:Fe,over:Ge}=G;if(!Ge||Fe.id===Ge.id)return;const Ct=w.findIndex(_t=>_t.id===Fe.id),$e=w.findIndex(_t=>_t.id===Ge.id);if(Ct<0||$e<0)return;const Ut=new Date().toISOString(),qt=Gg(w,Ct,$e).map((_t,tn)=>({..._t,order:tn,updatedAt:Ut}));P(qt)},[w,P]),ct=G=>{const Fe=String(G||"").trim(),Ge=G.trim().replace(/^ai-profile-/i,"").replace(/[-_]+/g," ").replace(/\s+/g," ");return!Ge||Ge==="ai"||Fe.toLowerCase().startsWith("ai-profile-")?"AI Agent":`AI Agent - ${Ge.split(" ").map($e=>$e.charAt(0).toUpperCase()+$e.slice(1)).join(" ")}`},dt=Ky(Z,x),ut=pu(x),Mt=Ti(x,dt),Nt=pt.useMemo(()=>new Map(dt.map(G=>[String(G.value),G])),[dt]),Ft=Nt.get(String(x||"unassigned")),Yt=H?.assigneeActor?.color||Ft?.color,Bt=pt.useMemo(()=>{const G=[H?.assigneeActor,H?.createdByActor].filter(Boolean);return new Map(G.map(Fe=>[String(Fe.id),Fe]))},[H?.assigneeActor,H?.createdByActor]),Jt=pt.useMemo(()=>new Map(Q.map(G=>[G.id,fu(G)||G.id])),[Q]),mn=pt.useMemo(()=>new Map(we.map(G=>[G.id,ch(G)||G.id])),[we]),Pn=pt.useMemo(()=>Array.isArray(H?.activity)&&H.activity.length>0?H.activity:I.map(G=>({id:`comment:${G.id}`,type:"comment",timestamp:G.timestamp,comment:G})),[I,H?.activity]),Qt=(G,Fe)=>{const Ge=String(Fe||"").trim();if(Ge){if(G==="assignee")return Ti(Ge,dt);if(G==="workstreamId")return Jt.get(Ge);if(G==="initiativeId")return mn.get(Ge)}},Rt=pt.useCallback((G,Fe,Ge)=>{if(Ge&&Ge.trim())return Ge.trim();const Ct=String(G||"").trim();if(!Ct)return Fe==="ai"?"AI Agent":De("taskForm.you");const $e=Bt.get(Ct);if($e?.label)return $e.label;const Ut=Nt.get(Ct)||Nt.get(Ct.toLowerCase());return Ut?.label?Ut.label:Fe==="ai"?ct(Ct):Ti(Ct,dt)||Ct},[Bt,Nt,ct,dt]),gn=pt.useMemo(()=>{const G=Pn[0];if(!G)return null;if(G.type==="comment"){const Ge=G.comment;return Rt(Ge.author,Ge.actor?.kind==="ai"?"ai":Ge.actor?.kind==="human"?"human":null,Ge.actor?.label||null)}const Fe=G.event;return Rt(Fe.actor,Fe.actorType,Fe.actorProfile?.label||null)},[Rt,Pn]),jn=pt.useMemo(()=>{if(!H?.completedAt)return null;for(const Fe of Pn){if(Fe.type!=="event")continue;const Ge=Fe.event,Ct=Ge.details?.changes?.status?.to;if(Ct==="done"||Ct==="cancelled")return Rt(Ge.actor,Ge.actorType,Ge.actorProfile?.label||null)}return gn},[H?.completedAt,gn,Rt,Pn]),Gt=H?.createdByActor?.label||Rt(H?.createdBy||null,H?.createdByActor?.kind==="ai"?"ai":H?.createdByActor?.kind==="human"?"human":null,H?.createdByActor?.label||null),Ma=gn,An=Pn.length;return t.jsxs("form",{ref:Ce,onSubmit:ue,className:`${m.form} ${m.appScrollbar} tf-scrollbar`,children:[r&&t.jsx("div",{className:Le.error,children:r}),ne&&t.jsx("div",{className:`${Le.formNotice} tf-text-helper`,children:tt?"Deleted tasks are read-only. Restore the task to make changes.":"Archived tasks are read-only. Unarchive the task to make changes."}),t.jsxs("fieldset",{disabled:ne,className:Le.formFieldsetReset,children:[t.jsxs("div",{className:m.field,children:[t.jsxs("div",{className:m.labelRow,children:[t.jsx("label",{className:m.label,children:"Title"}),x&&t.jsx("span",{title:`Assigned to: ${Mt}`,className:[Le.assigneeIndicator,ut==="agent"?Le.assigneeIndicatorAgent:ut==="member"?Le.assigneeIndicatorUser:Le.assigneeIndicatorUnassigned].join(" "),style:Yt?{color:Yt}:void 0,children:ut==="agent"?t.jsx(tu,{size:20}):ut==="member"?t.jsx(Lo,{size:20}):t.jsx(ji,{size:20})})]}),t.jsx("input",{type:"text",value:s,onChange:G=>be(G.target.value),placeholder:"What needs to be done?",className:m.input,required:!0,maxLength:255,autoFocus:!0})]}),t.jsxs("div",{className:m.field,children:[t.jsxs("div",{className:m.labelRow,children:[t.jsx("label",{className:m.label,children:"Description"}),t.jsx("button",{type:"button",className:m.helpLink,onClick:()=>L(!te),title:"Markdown Help",tabIndex:-1,children:t.jsx(ji,{size:14})})]}),te&&t.jsxs("div",{className:Le.markdownHelp,children:[t.jsxs("div",{className:Le.helpHeader,children:[t.jsx("span",{children:"Markdown Guide"}),t.jsx("button",{onClick:()=>L(!1),className:Le.helpClose,children:t.jsx(Mi,{size:12})})]}),t.jsxs("div",{className:Le.helpGrid,children:[t.jsx("div",{children:t.jsx("code",{children:"**bold**"})}),t.jsx("div",{children:t.jsx("code",{children:"_italic_"})}),t.jsx("div",{children:t.jsx("code",{children:"- list"})}),t.jsx("div",{children:t.jsx("code",{children:"1. list"})}),t.jsx("div",{className:Le.helpGridItem,children:t.jsx("code",{children:"`inline code`"})}),t.jsxs("div",{className:Le.helpGridItem,children:[t.jsx("code",{children:"```"}),t.jsx("br",{}),t.jsx("code",{children:"code block"}),t.jsx("br",{}),t.jsx("code",{children:"```"})]}),t.jsx("div",{children:t.jsx("code",{children:"[link](url)"})})]})]}),oe||!o?t.jsx("textarea",{className:`${m.textarea} ${Le.descriptionSurface}`,placeholder:"What needs to be done? (Markdown supported)",value:o,onChange:G=>me(G.target.value),onFocus:()=>ae(!0),onBlur:()=>ae(!1),rows:9,autoFocus:oe}):t.jsx("div",{className:`${m.textarea} ${Le.descriptionSurface} ${Le.markdownPreview} ${Le.markdownPreviewContainer}`,onClick:()=>ae(!0),children:t.jsx(Bm,{onTaskIdClick:Me,children:o})})]}),t.jsxs("div",{className:Le.compactMetaSection,children:[t.jsxs("div",{className:Le.compactMetaGrid,children:[t.jsxs("div",{className:`${m.field} ${Le.compactMetaField}`,children:[t.jsx("label",{id:"category-label",className:m.label,children:U?.category||"Category"}),t.jsx(Bl,{value:d,options:Wt,onChange:G=>Re(String(G)),required:!0,ariaLabelledBy:"category-label"})]}),t.jsxs("div",{className:`${m.field} ${Le.compactMetaField}`,children:[t.jsx("label",{id:"type-label",className:m.label,children:U?.type||"Type"}),t.jsx(Bl,{value:i,options:Tt,onChange:G=>Te(String(G)),ariaLabelledBy:"type-label"})]}),t.jsxs("div",{className:`${m.field} ${Le.compactMetaField}`,children:[t.jsx("label",{htmlFor:"task-form-scheduled-date",className:m.label,children:De("taskForm.scheduledLabel")}),t.jsx("input",{id:"task-form-scheduled-date",type:"date",value:S,onChange:G=>E(G.target.value),className:`${m.input} ${m.taskFormDateInput}`})]}),t.jsx("div",{className:Le.compactMetaSpacer,"aria-hidden":"true"}),t.jsxs("div",{className:`${m.field} ${Le.compactMetaField}`,children:[t.jsx("label",{id:"assignee-label",className:m.label,children:"Assigned To"}),t.jsx(Bl,{value:x||"unassigned",options:dt,onChange:G=>D(String(G)),ariaLabelledBy:"assignee-label"})]}),t.jsx("div",{className:Le.compactMetaField,children:t.jsx(vm,{label:U?.priority||"Priority",options:R,value:u,onChange:se,type:"priority",showSelectedLabel:!1})}),t.jsxs("div",{className:`${m.field} ${Le.compactMetaField}`,children:[t.jsx("label",{htmlFor:"task-form-due-date",className:m.label,children:De("taskForm.dueLabel")}),t.jsx("input",{id:"task-form-due-date",type:"date",value:v,onChange:G=>y(G.target.value),className:`${m.input} ${m.taskFormDateInput}`}),Ve&&t.jsx("span",{className:`${Le.taskFormDateWarning} ${Le.compactMetaFieldHint}`,children:De("taskForm.dueBeforeScheduled")}),ot&&t.jsx("span",{className:`${Le.taskFormDateError} ${Le.compactMetaFieldHint}`,children:De("taskForm.overdue")})]}),k&&t.jsx("div",{className:Le.compactMetaField,children:t.jsx(vm,{label:"Complexity",options:[{value:1,label:"Tiny",color:"#10b981",icon:"Gauge"},{value:2,label:"Low",color:"#14b8a6",icon:"Gauge"},{value:3,label:"Medium",color:"#3b82f6",icon:"Gauge"},{value:4,label:"High",color:"#8b5cf6",icon:"Gauge"},{value:5,label:"Epic",color:"#d946ef",icon:"Gauge"}],value:f,onChange:F,type:"general"})})]}),!n&&t.jsxs("div",{className:Le.createWorkstreamRow,children:[t.jsx("label",{className:m.label,children:"Attach to workstream"}),t.jsxs("div",{className:m.pathInputGroup,children:[q?t.jsx("input",{type:"text",className:m.input,value:g,onChange:G=>C(G.target.value),placeholder:"Type a workstream name or reference","aria-label":"Attach to workstream"}):t.jsx(Bl,{value:g,options:_e,onChange:G=>C(String(G)),placeholder:"Select workstream...",ariaLabel:"Attach to workstream",className:Le.createWorkstreamDropdown}),t.jsx("button",{type:"button",className:m.secondaryHeaderBtn,onClick:()=>{if(q){Se(!1),$t||C("");return}Se(!0)},"aria-label":q?"Use workstream dropdown":"Enter workstream by name",title:q?"Use workstream dropdown":"Enter workstream by name",children:t.jsx(is,{size:14})})]})]})]}),t.jsxs("div",{className:Le.sectionBlock,children:[t.jsx("div",{className:Le.taxonomyFieldsGrid,children:At.map(G=>{if(G.id==="approach"&&G.isSystem)return null;const Fe=O[G.id],Ge=Array.isArray(Fe)?Fe.map($e=>String($e)):Fe!=null&&Fe!==""?[String(Fe)]:[],Ct=G.options.filter($e=>$e.status!=="retired"||Ge.includes(String($e.value)));return t.jsxs("div",{className:m.field,children:[t.jsx("label",{className:m.label,children:G.label}),G.description&&t.jsx("div",{className:`${Le.settingsHint} tf-text-helper`,children:G.description}),G.widgetType==="level"?t.jsx(vm,{label:G.label,options:Ct.map($e=>({...$e,label:$e.status==="retired"?`${$e.label} (Retired)`:$e.label})),value:O[G.id]||"",onChange:$e=>J(G.id,$e),type:"general",hideLabel:!0}):G.multiSelect?t.jsx("div",{className:`${m.dropdownList} ${Le.softSectionSurface}`,children:Ct.map($e=>{const Ut=String($e.value),qt=Ge.includes(Ut);return t.jsxs("button",{type:"button",className:`${Le.specialistChip} ${qt?Le.specialistChipActive:""}`,onClick:()=>{const _t=qt?Ge.filter(tn=>tn!==Ut):[...Ge,Ut];J(G.id,_t)},title:qt?"Click to remove":"Click to add",children:[qt&&t.jsx(eo,{size:12}),$e.status==="retired"?`${$e.label} (Retired)`:$e.label]},Ut)})}):t.jsxs("div",{className:m.fieldIconWrapper,style:{"--field-color":"var(--text-primary)","--field-border":"rgba(255, 255, 255, 0.1)","--field-bg":"rgba(255, 255, 255, 0.02)"},children:[(()=>{const $e=G.options.find(_t=>String(_t.value)===String(O[G.id])),Ut=$e?.icon&&Hr[$e.icon]?Hr[$e.icon]:ji,qt=$e?.color||"var(--text-secondary)";return t.jsx("div",{className:m.fieldIcon,style:{color:da(qt)},children:t.jsx(Ut,{size:16})})})(),t.jsxs("select",{value:O[G.id]||"",onChange:$e=>J(G.id,$e.target.value),className:`${m.select} ${m.field_dynamic}`,required:G.isRequired,children:[t.jsxs("option",{value:"",children:["Select ",G.label,"..."]}),Ct.map($e=>t.jsx("option",{value:$e.value,children:$e.status==="retired"?`${$e.label} (Retired)`:$e.label},$e.value))]})]})]},G.id)})}),T&&t.jsxs("div",{className:m.specialistSection,children:[t.jsxs("div",{className:m.toggleHeading,onClick:()=>de(!ie),title:ie?"Hide checklist":"Show checklist",children:[t.jsxs("label",{className:m.label,children:["Checklist ",w.length>0&&`(${xt}/${w.length})`]}),ie?t.jsx(Ac,{size:14}):t.jsx(Ei,{size:14})]}),ie&&t.jsxs("div",{className:`${m.dropdownList} ${Le.stackedList} ${Le.stackedListSpaced}`,children:[t.jsxs("div",{className:m.pathInputGroup,children:[t.jsx("input",{type:"text",className:m.input,placeholder:"Add checklist item",value:jt,onChange:G=>it(G.target.value),onKeyDown:G=>{G.key==="Enter"&&(G.preventDefault(),je())}}),t.jsx("button",{type:"button",className:m.secondaryHeaderBtn,onClick:je,disabled:!jt.trim(),children:"Add"})]}),w.length>0?t.jsx(Af,{sensors:Ie,collisionDetection:Vg,onDragEnd:at,children:t.jsx(Tf,{items:w.map(G=>G.id),strategy:If,children:w.map((G,Fe)=>t.jsx(c0,{id:G.id||`checklist-${Fe}`,item:G,onToggle:()=>{const Ge=new Date().toISOString();P(w.map((Ct,$e)=>$e===Fe?{...Ct,isCompleted:!Ct.isCompleted,updatedAt:Ge}:Ct))},onRemove:()=>P(w.filter((Ge,Ct)=>Ct!==Fe).map((Ge,Ct)=>({...Ge,order:Ct})))},G.id||`checklist-${Fe}`))})}):t.jsx("div",{className:`${Le.settingsHint} tf-text-helper`,children:"No checklist items yet."})]})]})]}),t.jsxs("div",{children:[t.jsx(i0,{taskId:n,taskReferenceLabel:Ue,workspaceId:W,apiBaseUrl:M,contextFiles:N,onAddContextFile:re,onRemoveContextFile:xe,onUpdateContextCaption:Ee}),n&&t.jsxs("div",{className:m.specialistSection,children:[t.jsxs("div",{className:m.toggleHeading,onClick:()=>K(!ve),title:De(ve?"taskForm.hideComments":"taskForm.showComments"),children:[t.jsxs("label",{className:m.label,children:[De("taskForm.commentsSectionTitle")," ",An>0&&`(${An})`]}),ve?t.jsx(Ac,{size:14}):t.jsx(Ei,{size:14})]}),ve&&t.jsxs("div",{className:Le.commentPanel,children:[t.jsxs("div",{className:Le.commentThread,children:[An===0&&t.jsx("div",{className:Le.emptyComments,children:De("taskForm.noComments")}),Pn.map(G=>{if(G.type==="comment"){const yn=G.comment,pn=String(yn.author||"").trim(),zt=pn.toLowerCase(),na=Bt.get(pn),Rn=Nt.get(pn)||Nt.get(zt),cr=yn.actor||na||Rn||null,dn=yn.actor?.kind==="human"?"member":yn.actor?.kind==="ai"?"agent":na?.kind==="human"?"member":na?.kind==="ai"?"agent":Rn?.kind||(zt===""||zt==="user"||zt==="human"?"member":"agent"),Ht=yn.actor?.label||na?.label||Rn?.label||(pn?Ti(pn,dt):"")||(dn==="agent"?ct(pn||"ai"):De("taskForm.you")),Vt=yn.actor?.color||na?.color||Rn?.color,_a=String(cr?.icon||(dn==="agent"?"Bot":"User")),aa=Pi[_a]||(dn==="agent"?tu:Lo);return t.jsxs("div",{className:`${Le.comment} ${dn==="agent"?Le.commentAi:Le.commentUser}`,children:[t.jsxs("div",{className:Le.commentHeader,children:[t.jsx("span",{className:Le.commentAuthor,style:Vt?{color:Vt}:void 0,children:t.jsxs(t.Fragment,{children:[t.jsx(aa,{size:12,strokeWidth:1.5})," ",Ht]})}),t.jsx("span",{className:Le.commentTime,children:Cc(yn.timestamp,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})})]}),t.jsx("div",{className:Le.commentText,style:Vt?{background:`linear-gradient(135deg, ${Sm(Vt,.18)} 0%, ${Sm(Vt,.1)} 100%)`,borderColor:Sm(Vt,.35)}:void 0,children:t.jsx(Bm,{onTaskIdClick:Me,children:yn.text})})]},yn.id)}const Fe=G.event,Ge=String(Fe.actor||"").trim(),Ct=Ge.toLowerCase(),$e=Bt.get(Ge),Ut=Nt.get(Ge)||Nt.get(Ct),qt=Fe.actorProfile||$e||Ut||null,_t=Fe.actorType==="ai"?"agent":Fe.actorType==="human"?"member":"system",tn=Fe.actorProfile?.label||$e?.label||Ut?.label||(_t==="system"?"System":Ge?Ti(Ge,dt):_t==="agent"?ct("ai"):De("taskForm.you")),ln=Fe.actorProfile?.color||$e?.color||Ut?.color,Ot=String(qt?.icon||(_t==="agent"?"Bot":_t==="member"?"User":"ClipboardList")),ta=Pi[Ot]||(_t==="agent"?tu:_t==="member"?Lo:Sg),Mn=Object.entries(Fe.details?.changes||{});return t.jsxs("div",{className:`${Le.comment} ${Le.activityEvent} ${_t==="system"?Le.activityEventSystem:""}`,children:[t.jsxs("div",{className:`${Le.commentHeader} ${Le.activityEventHeader}`,children:[t.jsx("span",{className:Le.commentAuthor,style:ln?{color:ln}:void 0,children:t.jsxs(t.Fragment,{children:[t.jsx(ta,{size:12,strokeWidth:1.5})," ",tn]})}),t.jsx("span",{className:Le.commentTime,children:Cc(Fe.createdAt,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})})]}),t.jsxs("div",{className:Le.activityEventText,children:[t.jsx("div",{children:bh(Fe,Qt)}),Mn.length>1&&t.jsx("div",{className:Le.activityEventChanges,children:Mn.map(([yn,pn])=>t.jsx("span",{className:Le.activityEventChange,children:wh(yn,pn,Qt)},yn))})]})]},G.id)}),t.jsx("div",{ref:c})]}),t.jsxs("div",{className:Le.commentInputArea,children:[t.jsx("textarea",{className:Le.commentInput,placeholder:De("taskForm.commentPlaceholder"),value:b,onChange:G=>j(G.target.value),onKeyDown:G=>{G.key==="Enter"&&!G.shiftKey&&(G.preventDefault(),B())},rows:1}),t.jsx("button",{type:"button",className:Le.sendCommentBtn,onClick:B,disabled:!b.trim(),children:t.jsx(wg,{size:16})})]})]})]}),t.jsx("div",{className:`${Le.taskFormLifecycle} ${Le.taskFormMetaDivider}`,children:t.jsx("div",{className:Le.taskFormMetaGrid,children:H&&t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:Le.taskFormDateRow,children:[t.jsx("span",{className:Le.taskFormDateLabel,children:De("taskForm.createdLabel")}),t.jsxs("span",{className:Le.taskFormMetaStack,children:[t.jsx("span",{className:Le.taskFormDateValue,children:Xe||De("taskForm.emptyValue")}),t.jsx("span",{className:Le.taskFormMetaActor,children:Gt?`by ${Gt}`:De("taskForm.emptyValue")})]})]}),t.jsxs("div",{className:Le.taskFormDateRow,children:[t.jsx("span",{className:Le.taskFormDateLabel,children:De("taskForm.updatedLabel")}),t.jsxs("span",{className:Le.taskFormMetaStack,children:[t.jsx("span",{className:Le.taskFormDateValue,children:gt||De("taskForm.emptyValue")}),t.jsx("span",{className:Le.taskFormMetaActor,children:Ma?`by ${Ma}`:De("taskForm.emptyValue")})]})]}),t.jsxs("div",{className:Le.taskFormDateRow,children:[t.jsx("span",{className:Le.taskFormDateLabel,children:De("taskForm.completedLabel")}),t.jsxs("span",{className:Le.taskFormMetaStack,children:[t.jsx("span",{className:Le.taskFormDateValue,children:ze||De("taskForm.emptyValue")}),t.jsx("span",{className:Le.taskFormMetaActor,children:jn?`by ${jn}`:De("taskForm.emptyValue")})]})]})]})})})]}),t.jsxs("div",{className:Le.keyboardHint,children:["Press ",t.jsx("kbd",{children:navigator.platform.includes("Mac")?"⌥":"Alt"})," to toggle"]})]})]})}function Rh({editingTaskId:e,loading:n,autoSaveState:r="idle",title:s,handleSubmit:o,resetForm:d,handleCopyId:i,copiedId:u,tasks:f,currentTask:k,currentTaskWorkstream:x,currentTaskInitiative:S,workstreamInput:v="",onWorkstreamInputChange:g,onSetWorkstreamForCurrentTask:w,handleToggleInProgress:I,handleToggleReview:b,handleToggleComplete:N,handleToggleCancel:W,handleSetStatus:M,handleArchiveTask:oe,handleUnarchiveTask:te,handleRestoreDeletedTask:ie,handlePermanentlyDeleteDeletedTask:T}){const[ve,O]=pt.useState(!1),J=k??(e&&f.find(ke=>ke.id===e)||null),le=!!J?.isArchived,ge=!!J?.isDeleted,X=Ff(J),R=X.label||(X.isProvisional?"Pending":""),U=X.isProvisional,Z=!!X.label,he=x?fu(x)||x.id:"",Q=S?os(S)||S.id:"";pt.useEffect(()=>{x&&O(!1)},[x?.id]);const we=pt.useCallback(()=>{v.trim()&&w?.()},[w,v]);return t.jsx("div",{className:m.stickyActionHeader,children:e?t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:m.taskHierarchyHeader,children:[t.jsxs("div",{className:m.taskHierarchyBadgeRow,children:[S?t.jsxs(t.Fragment,{children:[t.jsx(au,{copied:u===Q,onClick:ke=>i(ke,Q),disabled:n,title:"Copy initiative reference",label:Q}),t.jsx("span",{className:m.taskHierarchyDivider,children:"/"})]}):null,x?t.jsxs(t.Fragment,{children:[t.jsx(au,{copied:u===he,onClick:ke=>i(ke,he),disabled:n,title:"Copy workstream reference",label:he}),t.jsx("span",{className:m.taskHierarchyDivider,children:"/"})]}):t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:`${m.taskIdBadge} ${m.taskHierarchyAddBtn}`,onClick:()=>{g?.(""),O(ke=>!ke)},disabled:n||le||ge,title:"Attach to workstream","aria-label":"Attach to workstream",children:t.jsx(is,{size:13})}),t.jsx("span",{className:m.taskHierarchyDivider,children:"/"})]}),R?t.jsx(au,{copied:Z&&u===X.label,onClick:ke=>i(ke,X.label),disabled:n||!Z,title:Z?De("actionHeader.copyTaskIdTitle"):"Task reference pending sync",label:R}):null,U?t.jsx("span",{className:m.taskHierarchyMeta,title:"Temporary local reference until cloud sync assigns the final task number.",children:"Pending sync"}):null]}),ve&&!x?t.jsxs("div",{className:m.taskHierarchyEditor,children:[t.jsx("input",{type:"text",className:`${m.input} ${m.taskHierarchyInput}`,value:v,onChange:ke=>g?.(ke.target.value),placeholder:"WS-123","aria-label":"Attach workstream reference",onKeyDown:ke=>{ke.key==="Enter"&&(ke.preventDefault(),we()),ke.key==="Escape"&&(ke.preventDefault(),g?.(""),O(!1))}}),t.jsx("button",{type:"button",className:"tf-control-icon tf-control-icon-compact",onClick:we,disabled:!v.trim()||n,title:"Attach workstream","aria-label":"Attach workstream",children:t.jsx(eo,{size:14})}),t.jsx("button",{type:"button",className:"tf-control-icon tf-control-icon-compact",onClick:()=>{g?.(""),O(!1)},disabled:n,title:"Cancel workstream attach","aria-label":"Cancel workstream attach",children:t.jsx(Mi,{size:14})})]}):null]}),t.jsx("div",{className:m.taskSaveStatusCenter,children:t.jsx("div",{className:`${m.taskSaveStatus} ${r==="error"?m.taskSaveStatusError:""}`,"aria-live":"polite",children:r==="saving"?t.jsxs(t.Fragment,{children:[t.jsx(Pa,{size:14,className:m.spinner}),t.jsx("span",{children:"Saving…"})]}):r==="saved"?t.jsx("span",{children:"Saved"}):r==="error"?t.jsx("span",{children:"Save failed"}):null})}),t.jsx("div",{className:m.editActionsGroup,children:ge&&J?.deletedRecordId?t.jsxs(t.Fragment,{children:[ie&&t.jsx("button",{type:"button",className:m.actionBtn,onClick:()=>ie(J.deletedRecordId||""),disabled:n,title:"Restore deleted task",children:t.jsx(cu,{size:16})}),T&&t.jsx("button",{type:"button",className:`${m.actionBtn} ${m.deleteBtn}`,onClick:()=>T(J.deletedRecordId||""),disabled:n,title:"Permanently delete deleted task",children:t.jsx(Hl,{size:16})})]}):t.jsx(Sh,{task:J,disabled:n,statusDisabled:n||le,archiveActionMode:le?"unarchive":"auto",onSetStatus:(ke,be)=>{if(M){M(ke,be);return}if(be==="in-progress"){I(ke);return}if(be==="review"){b(ke);return}if(be==="done"){N(ke);return}be==="cancelled"&&W(ke)},onArchiveTask:oe,onUnarchiveTask:ke=>te?.(ke.id)})})]}):t.jsxs(t.Fragment,{children:[t.jsxs("button",{type:"button",onClick:d,disabled:n,className:m.secondaryHeaderBtn,title:De("actionHeader.clearFormTitle"),children:[t.jsx(cu,{size:16}),De("actionHeader.clear")]}),t.jsxs("button",{type:"button",onClick:ke=>o(ke),disabled:n||!s.trim(),className:m.primaryUpdateBtn,title:De("actionHeader.addTaskTitle"),children:[n?t.jsx(Pa,{size:16,className:m.spinner}):t.jsx(is,{size:16}),De("actionHeader.addTask")]})]})})}const l0="_topNoticeLayer_1m6a1_1",d0="_topNotice_1m6a1_1",u0="_topNoticeMessage_1m6a1_32",m0="_topNoticeSuccess_1m6a1_38",p0="_topNoticeError_1m6a1_44",f0="_topNoticeInfo_1m6a1_50",h0="_topNoticeDismiss_1m6a1_56",Ci={topNoticeLayer:l0,topNotice:d0,topNoticeMessage:u0,topNoticeSuccess:m0,topNoticeError:p0,topNoticeInfo:f0,topNoticeDismiss:h0};function Dh({notice:e,onDismiss:n}){if(!e)return null;const r=e.tone==="error"?Ci.topNoticeError:e.tone==="success"?Ci.topNoticeSuccess:Ci.topNoticeInfo,s=e.tone==="error"?"alert":"status";return t.jsx("div",{className:Ci.topNoticeLayer,children:t.jsxs("div",{className:`${Ci.topNotice} ${r}`,role:s,"aria-live":e.tone==="error"?"assertive":"polite",children:[e.tone==="error"?t.jsx(Tc,{size:14}):e.tone==="success"?t.jsx(eo,{size:14}):t.jsx(xg,{size:14}),t.jsx("span",{className:Ci.topNoticeMessage,children:e.message}),n&&t.jsx("button",{type:"button",className:Ci.topNoticeDismiss,onClick:n,"aria-label":"Dismiss notice",title:"Dismiss notice",children:t.jsx(Mi,{size:14})})]})})}const g0=pt.lazy(()=>Oo(()=>import("./TaskSettings-CEDy34Jo.js"),__vite__mapDeps([0,1,2,3,4,5,6])).then(e=>({default:e.TaskSettings})));function y0(e){const{activeTab:n,setActiveTab:r,isOpen:s,setIsOpen:o,currentTheme:d,setCurrentTheme:i,saveSettings:u,pathSaved:f,keyShortcut:k,setKeyShortcut:x,jsonBackupEnabled:S,setJsonBackupEnabled:v,mcpHostRoot:g,setMcpHostRoot:w,settingsSection:I,setSettingsSection:b,projectRoot:N,projectName:W,mcpScriptPath:M,serverHostRoot:oe,showFolderBrowser:te,setShowFolderBrowser:ie,folders:T,files:ve,currentBrowsePath:O,fetchFolders:J,browserTarget:le,setBrowserTarget:ge,handleSelectPath:X,handleAddPath:R,handleRemovePath:U,tasks:Z,loadingTasks:he,archivedTasks:Q,deletedTasks:we,activeCategories:ke,activeTypes:be,priorities:me,taxonomyDisplayLabels:Re,approaches:Te,taxonomies:se,searchQuery:F,setSearchQuery:D,filterCategories:E,setFilterCategories:y,filterTypes:C,setFilterTypes:P,filterPriorities:j,setFilterPriorities:ae,filterStatus:L,setFilterStatus:de,filterAssignees:K,setFilterAssignees:ue,assigneeOptions:B,filterTaxonomies:re,setFilterTaxonomies:xe,sortBy:Ee,setSortBy:ye,sortOrder:Pe,toggleSortOrder:vt,showArchive:Ke,setShowArchive:bt,taskScope:Ze,setTaskScope:Qe,clearFilters:St,filteredTasks:Me,filteredArchive:H,groupedTasks:c,collapsedCategories:Ue,setCollapsedCategories:At,handleEdit:Wt,handleDelete:Tt,handleCopyId:It,handleToggleComplete:Xe,handleToggleCancel:gt,handleToggleInProgress:ze,handleToggleReview:Ye,handleArchiveTask:Ve,handleBulkArchive:ot,handleUnarchive:xt,handleRestoreDeletedTask:jt,handlePermanentlyDeleteDeletedTask:it,handleEmptyDeletedTasks:q,fetchArchive:Se,editingTaskId:wt,loading:tt,error:_e,title:$t,setTitle:ne,description:Ce,setDescription:Ie,checklistItems:je,setChecklistItems:at,category:ct,setCategory:dt,type:ut,setType:Mt,priority:Nt,setPriority:Ft,complexity:Yt,setComplexity:Bt,manualComplexityEnabled:Jt,checklistDropdownEnabled:mn,showTaskCardStatusLabel:Pn,approach:Qt,setApproach:Rt,assignee:gn,setAssignee:jn,scheduledDate:Gt,setScheduledDate:Ma,dueDate:An,setDueDate:G,workstreamInput:Fe,setWorkstreamInput:Ge,formTaxonomies:Ct,setFormTaxonomies:$e,comments:Ut,newCommentText:qt,setNewCommentText:_t,attachments:tn,setAttachments:ln,setAttachmentsDirty:Ot,descriptionFocused:ta,setDescriptionFocused:Mn,showMarkdownHelp:yn,setShowMarkdownHelp:pn,showChecklist:zt,setShowChecklist:na,showComments:Rn,setShowComments:cr,handleSubmit:dn,resetForm:Ht,handleAddComment:Vt,handleSetWorkstreamForCurrentTask:_a,handleOpenTaskById:aa,autoSaveState:br,unsavedModalOpen:cs,setUnsavedModalOpen:Ln,pendingNavigation:La,handleNavigation:qa,handleClose:ra,scheduleWarningPrompt:Yn,confirmScheduleWarning:sa,cancelScheduleWarning:On,uiNotice:ua,clearNotice:$n,taskReturnTrail:Jn,clearReturnToParentTask:Ba,returnToPreviousTask:nt,copiedId:Gn,recentlyChangedTaskIds:rn,tasksScrollRef:Xt,setTasksScrollPos:on,currentTask:Tn,currentTaskWorkstream:kn,currentTaskInitiative:Wa,exportEnvironment:Ka,setExportEnvironment:ma,exportWorkflowsPath:fn,setExportWorkflowsPath:Dt,exportResult:lr,exportingResource:pa,availableWorkflows:Ca,onExportWorkflows:Aa,availableEnvironments:Dn,handleUpdateCategory:Ta,handleRemoveCategory:ls,handleSaveCategory:oa,handleUpdateCategoryIcon:dr,handleUpdateCategoryColor:ds,handleSaveType:fa,handleRemoveType:ur,handleUpdateTaxonomies:Vn,handleUpdatePriorities:ha,pathValidation:Sn,validatePaths:xr,getCategoryPaths:Ia,commentsEndRef:Fa,currentWorkspaceId:Na,settingsModel:ja,onHeaderMouseDown:Oa,isDragging:mr}=e,_r=a.useRef(null),[Ya,Ra]=pt.useState(0);a.useLayoutEffect(()=>{if(n==="tasks"&&Xt.current&&Ya>0){const Be=setTimeout(()=>{Xt.current&&(Xt.current.scrollTop=Ya)},50);return()=>clearTimeout(Be)}},[n,Ya,Z]);const ia=Be=>{ye(Be)},Cr=()=>{qa(()=>{if(n==="add"||n==="settings"){if(n==="add"&&nt())return;n==="add"&&Jn.length>0&&Ba(),n==="add"&&Ht(),r("tasks")}else e.onClose?e.onClose():ra()})},Ar=()=>{Ln(!1),La?(n==="add"&&Ht(),La()):r("tasks")},Zn=async()=>{await dn({preventDefault:()=>{}}),Ln(!1),La&&La()},pr=(Be,Et)=>{$e(_n=>({..._n,[Be]:Et})),Be==="approach"&&typeof Et=="string"&&Rt(Et)},Ja=a.useCallback(Be=>{Ht(),dt(Be),qa(()=>{r("add")})},[Ht,dt,r,qa]),Xn=pt.useMemo(()=>we.map(Be=>({...Be.taskSnapshot,isDeleted:!0,deletedRecordId:Be.id})),[we]),Un=pt.useMemo(()=>new globalThis.Map(we.map(Be=>[Be.taskId,Be])),[we]),zn=pt.useMemo(()=>{const Be=F.toLowerCase(),Et=ke.every(qe=>E.includes(qe.value)),_n=be.every(qe=>C.includes(qe.value)),nn=Array.from(new Set(j.map(qe=>Number(qe)).filter(qe=>Number.isFinite(qe)))),Gr=me.map(qe=>Number(qe.value)).filter(qe=>Number.isFinite(qe)).every(qe=>nn.includes(qe)),V=["task","in-progress","review","done","cancelled","on-hold"].every(qe=>L.includes(qe)),ft=B.length>0&&B.every(qe=>K.includes(qe.value)),Kt=Jl(se,Xn);return Xn.filter(qe=>{const En=Cs(qe).toLowerCase(),Xa=!Be||qe.title.toLowerCase().includes(Be)||(qe.description?.toLowerCase()||"").includes(Be)||qe.id.toLowerCase().includes(Be)||En.includes(Be),Qa=Et||E.includes(qe.category),Vr=Gr||nn.includes(du(qe.priority)),Ts=_n||C.includes(qe.type||wr),Tr=V||L.includes(qe.status),A=ft||K.includes(qe.assignee||"unassigned"),Ne=Object.entries(re).every(([rt,ht])=>{const $=Kt.find(er=>er.id===rt);if(!$||np($,Xn).every(er=>ht.includes(er.value)))return!0;const ca=qe.taxonomies?.[rt];return ca?Array.isArray(ca)?ca.some(er=>ht.includes(er)):ht.includes(ca):ht.includes("")});return Xa&&Qa&&Vr&&Ts&&Tr&&A&&Ne}).sort((qe,En)=>gu(qe,En,Ee,Pe,se))},[ke,be,Q,B,Xn,K,E,j,L,re,C,me,F,Ee,Pe,se,Z]),Bn=pt.useMemo(()=>{const Be={};return zn.forEach(Et=>{const nn=ke.find(hr=>hr.value===Et.category||hr.label===Et.category)?.label||Et.category||"General";Be[nn]||(Be[nn]=[]),Be[nn].push(Et)}),Be},[ke,zn]),fr=Ze==="archived"?H.length:Ze==="deleted"?zn.length:Me.length;return t.jsxs(t.Fragment,{children:[t.jsxs("div",{ref:_r,className:`${yt.modal} ${m.coreModal} ${n==="settings"?yt.settingsViewModal:""}`,"data-theme":d,children:[t.jsxs("div",{className:"tf-modal-header",onMouseDown:Oa,style:{cursor:Oa?mr?"grabbing":"grab":"default"},children:[t.jsxs("div",{className:`tf-modal-title ${sn.headerTitleWidget}`,children:["Taskforce",W&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:m.projectSlash,children:"/"}),t.jsx("span",{className:m.projectName,style:{fontSize:"14px",padding:"1px 6px"},children:W})]}),t.jsx("span",{className:m.taskCountBadge,title:`${Ze.charAt(0).toUpperCase()+Ze.slice(1)} tasks`,children:fr})]}),t.jsxs("div",{className:yt.headerActions,children:[n==="tasks"&&t.jsx(t.Fragment,{children:t.jsx("button",{className:"tf-control-icon",onClick:()=>{qa(()=>{Ht(),r("add")})},title:"Add New Task",children:t.jsx(is,{size:18})})}),t.jsx("button",{className:`tf-control-icon ${n==="settings"?"tf-control-icon-active":""}`,onClick:()=>{n!=="settings"&&qa(()=>{r("settings")})},title:"Settings",children:t.jsx(Sf,{size:18})}),t.jsx("button",{className:"tf-control-icon",onClick:Cr,title:n==="tasks"?"Close":"Back to Tasks",children:n==="tasks"?t.jsx(Mi,{size:20}):t.jsx(_g,{size:20})})]})]}),t.jsx(Dh,{notice:ua,onDismiss:$n}),n==="add"&&t.jsx(Rh,{editingTaskId:wt,loading:tt,autoSaveState:br,title:$t,currentTask:Tn,currentTaskWorkstream:kn,currentTaskInitiative:Wa,workstreamInput:Fe,onWorkstreamInputChange:Ge,onSetWorkstreamForCurrentTask:_a,handleSubmit:dn,resetForm:Ht,handleCopyId:It,copiedId:Gn,tasks:Z,handleToggleInProgress:ze,handleToggleReview:Ye,handleToggleComplete:Xe,handleToggleCancel:gt,handleArchiveTask:Ve,handleUnarchiveTask:Be=>{if(Tn?.isDeleted){const Et=Un.get(Be);Et&&jt(Et.id);return}xt(Be)},handleRestoreDeletedTask:Be=>{jt(Be)},handlePermanentlyDeleteDeletedTask:Be=>{it(Be)}}),n==="tasks"&&t.jsx(Th,{ref:Xt,tasks:Z,archivedTasks:Q,categories:ke,types:be,priorities:me,taxonomyDisplayLabels:Re,taxonomies:se,searchQuery:F,filterCategories:E,filterTypes:C,filterPriorities:j,filterStatus:L,filterAssignees:K,assigneeOptions:B,filterTaxonomies:re,sortBy:Ee,sortOrder:Pe,showArchive:Ke,taskScope:Ze,collapsedCategories:Ue,loadingTasks:he,filteredTasks:Me,filteredArchive:H,groupedTasks:c,filteredDeletedTasks:zn,groupedDeletedTasks:Bn,copiedId:Gn,recentlyChangedTaskIds:rn,showTaskCardStatusLabel:Pn,workstreams:e.workstreams,initiatives:e.initiatives,onSearchChange:D,onFilterCategoriesChange:Be=>y(Be),onFilterTypesChange:Be=>P(Be),onFilterPrioritiesChange:ae,onFilterStatusChange:de,onFilterAssigneesChange:Be=>ue(Be),onTaxonomyFilterChange:(Be,Et)=>xe(_n=>({..._n,[Be]:Et})),onSortByChange:ia,onSortOrderChange:vt,onShowArchiveChange:bt,onTaskScopeChange:Qe,onClearFilters:St,onToggleCategory:Be=>At(Et=>({...Et,[Be]:!Et[Be]})),onEditTask:Wt,onOpenTaskById:aa,onCopyId:It,onToggleInProgress:ze,onToggleReview:Ye,onToggleComplete:Xe,onToggleCancel:gt,onArchiveTask:Ve,onBulkArchive:ot,onUnarchive:Be=>{const Et=Un.get(Be);if(Et){jt(Et.id);return}xt(Be)},onDelete:Be=>{const Et=Un.get(Be);if(Et){it(Et.id);return}Tt(Be)},onDeleteAllDeleted:()=>{q()},onFetchArchive:Se,onAddTaskToCategory:Ja,supplementalTasks:Xn}),n==="add"&&t.jsx(jh,{editingTaskId:wt,error:_e,title:$t,description:Ce,checklistItems:je,category:ct,type:ut,priority:Nt,complexity:Yt,manualComplexityEnabled:Jt,approach:Qt,assignee:gn,scheduledDate:Gt,dueDate:An,workstreamInput:Fe,formTaxonomies:Ct,onTaxonomyChange:pr,taxonomies:se,comments:Ut,newCommentText:qt,contextFiles:tn,currentWorkspaceId:Na,apiBaseUrl:"",descriptionFocused:ta,showMarkdownHelp:yn,showChecklist:zt,checklistEnabled:mn,showComments:Rn,categories:ke,types:be,priorities:me,taxonomyDisplayLabels:Re,assigneeOptions:B,workstreams:e.workstreams,initiatives:e.initiatives,copiedId:Gn,onTitleChange:ne,onDescriptionChange:Ie,onChecklistItemsChange:at,onCategoryChange:dt,onTypeChange:Mt,onPriorityChange:Ft,onComplexityChange:Bt,onApproachChange:Be=>{Rt(Be),$e(Et=>({...Et,approach:Be}))},onAssigneeChange:jn,onScheduledDateChange:Ma,onDueDateChange:G,onWorkstreamInputChange:Ge,onNewCommentTextChange:_t,onDescriptionFocusedChange:Mn,onShowMarkdownHelpChange:pn,onShowChecklistChange:na,onShowCommentsChange:cr,onOpenSettings:Be=>{qa(()=>{b(Be),r("settings")})},onSubmit:dn,commentsEndRef:Fa,onAddComment:()=>Vt(qt),onOpenTaskById:aa,onAddContextFile:Be=>{Ot(!0),ln(Et=>[...Et,Be])},onRemoveContextFile:async Be=>{Ot(!0),ln(Et=>Et.filter((_n,nn)=>nn!==Be))},onUpdateContextCaption:(Be,Et)=>{Ot(!0),ln(_n=>_n.map((nn,hr)=>hr!==Be?nn:typeof nn=="string"?{path:nn,caption:Et,timestamp:new Date().toISOString()}:{...nn,caption:Et}))},onCopyId:It,onToggleInProgress:ze,onToggleReview:Ye,onToggleComplete:Xe,onToggleCancel:gt,onArchiveTask:Ve,onUnarchive:Be=>{if(Tn?.isDeleted){const Et=Un.get(Be);Et&&jt(Et.id);return}xt(Be)},currentTask:Tn}),n==="settings"&&t.jsx(a.Suspense,{fallback:t.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"2rem"},children:t.jsx(Pa,{size:20,className:m.spinner})}),children:t.jsx(g0,{settingsModel:ja,onSectionChange:b})})]}),te&&Ni.createPortal(t.jsx("div",{className:Cn.overlay,children:t.jsxs("div",{className:Cn.browser,children:[t.jsxs("div",{className:Cn.header,children:[t.jsxs("div",{className:Cn.pathInfo,children:[t.jsx(Ri,{size:14}),t.jsx("span",{children:O||"Project Root"})]}),t.jsxs("div",{className:Cn.actions,children:[O&&t.jsx("button",{className:m.helpLink,onClick:()=>{const Be=O.split("/").filter(Boolean);Be.pop(),J(Be.length?Be.join("/")+"/":"")},children:"Back"}),t.jsx("button",{className:m.helpLink,onClick:()=>ie(!1),children:"Close"})]})]}),t.jsxs("div",{className:Cn.list,children:[le&&typeof le=="object"&&t.jsxs("div",{className:`${Cn.item} ${Cn.itemCurrent}`,onClick:()=>X(O),children:[t.jsx(eo,{size:14})," Select Current: ./",O||"(root)"]}),T.map(Be=>t.jsxs("div",{className:Cn.item,onClick:()=>J(O+Be+"/"),children:[t.jsx(Ri,{size:14})," ",Be,"/"]},Be)),ve.map(Be=>t.jsxs("div",{className:`${Cn.item} ${Cn.itemFile}`,onClick:()=>X(O+Be),children:[t.jsx(Nm,{size:14})," ",Be]},Be)),T.length===0&&ve.length===0&&t.jsx("div",{className:`${Cn.item} ${Cn.empty}`,children:"No items found"})]})]})}),document.body),cs&&t.jsx("div",{className:`${yt.overlay} ${yt.unsavedOverlay}`,children:t.jsxs("div",{className:`tf-surface-modal tf-modal-shell ${yt.modal} ${yt.unsavedModal}`,"data-theme":d,children:[t.jsx("div",{className:`tf-modal-header ${yt.unsavedHeader}`,children:t.jsxs("div",{className:`tf-modal-title ${yt.unsavedTitle}`,children:[t.jsx(Tc,{size:20}),"Unsaved Changes"]})}),t.jsx("div",{className:`${yt.form} ${yt.unsavedContent}`,children:t.jsx("p",{className:yt.unsavedText,children:"You have unsaved changes. Would you like to save them?"})}),t.jsxs("div",{className:`${yt.formActions} ${yt.unsavedActions}`,children:[t.jsx("button",{className:m.cancelBtn,onClick:()=>Ln(!1),title:"Close dialog and continue editing",children:"Keep Editing"}),t.jsx("button",{className:m.destructiveBtn,onClick:Ar,title:"Discard unsaved changes and leave",children:"Discard"}),t.jsxs("button",{className:m.submitBtn,onClick:Zn,disabled:tt,title:"Save changes and leave",children:[tt?t.jsx(Pa,{size:16,className:m.spinner}):t.jsx(wf,{size:16}),"Save"]})]})]})}),Yn&&t.jsx("div",{className:`${yt.overlay} ${yt.unsavedOverlay}`,children:t.jsxs("div",{className:`tf-surface-modal tf-modal-shell ${yt.modal} ${yt.unsavedModal}`,"data-theme":d,children:[t.jsx("div",{className:`tf-modal-header ${yt.unsavedHeader}`,children:t.jsxs("div",{className:`tf-modal-title ${yt.unsavedTitle}`,children:[t.jsx(Tc,{size:20}),"Date Warning"]})}),t.jsxs("div",{className:`${yt.form} ${yt.unsavedContent}`,children:[t.jsx("p",{className:yt.unsavedText,children:"Due date is before scheduled date."}),t.jsxs("p",{style:{margin:0,fontSize:"12px",color:"var(--text-muted)"},children:["Due: ",Yn.dueDate," · Scheduled: ",Yn.scheduledDate]})]}),t.jsxs("div",{className:`${yt.formActions} ${yt.unsavedActions}`,children:[t.jsx("button",{className:m.cancelBtn,onClick:On,children:"Go Back"}),t.jsx("button",{className:m.submitBtn,onClick:sa,children:"Save Anyway"})]})]})})]})}const v0="_accountMenuWrap_xwxof_1",k0="_avatarBtn_xwxof_5",S0="_avatarBadge_xwxof_9",w0="_avatarImage_xwxof_24",b0="_avatarIcon_xwxof_30",x0="_accountMenu_xwxof_1",_0="_accountMenuItem_xwxof_48",C0="_accountMenuItemActive_xwxof_68",A0="_accountMenuSection_xwxof_73",T0="_accountMenuSectionLabel_xwxof_79",I0="_accountMenuMeta_xwxof_88",N0="_accountMenuHint_xwxof_93",j0="_accountIdentityEmail_xwxof_99",R0="_accountIdentityBlock_xwxof_104",D0="_accountIdentityMetaLine_xwxof_109",E0="_accountIdentityMetaAction_xwxof_116",P0="_accountIdentityMetaValue_xwxof_125",M0="_accountIdentityMetaLabel_xwxof_130",L0="_accountMenuError_xwxof_159",B0="_accountHubCard_xwxof_165",W0="_profileAvatarEditor_xwxof_172",F0="_profileAvatarPreview_xwxof_178",O0="_profileAvatarImage_xwxof_194",$0="_profileAvatarActions_xwxof_200",U0="_profileAvatarInput_xwxof_206",lt={accountMenuWrap:v0,avatarBtn:k0,avatarBadge:S0,avatarImage:w0,avatarIcon:b0,accountMenu:x0,accountMenuItem:_0,accountMenuItemActive:C0,accountMenuSection:A0,accountMenuSectionLabel:T0,accountMenuMeta:I0,accountMenuHint:N0,accountIdentityEmail:j0,accountIdentityBlock:R0,accountIdentityMetaLine:D0,accountIdentityMetaAction:E0,accountIdentityMetaValue:P0,accountIdentityMetaLabel:M0,accountMenuError:L0,accountHubCard:B0,profileAvatarEditor:W0,profileAvatarPreview:F0,profileAvatarImage:O0,profileAvatarActions:$0,profileAvatarInput:U0},z0="_authBlockedBanner_jd13o_1",H0="_loginView_jd13o_10",G0="_loginCard_jd13o_20",V0="_loginCloseBtn_jd13o_34",Z0="_loginLogo_jd13o_56",q0="_authBrandRow_jd13o_62",K0="_setupHeaderRow_jd13o_68",Y0="_runtimeIconBadge_jd13o_75",J0="_loginTitle_jd13o_94",X0="_loginTitleAccent_jd13o_105",Q0="_loginSubtitle_jd13o_109",eD="_loginError_jd13o_115",tD="_loginField_jd13o_121",nD="_loginFieldLabel_jd13o_126",aD="_loginInput_jd13o_133",rD="_loginPrimaryBtn_jd13o_149",sD="_authPrimaryActions_jd13o_154",oD="_registerConsent_jd13o_159",iD="_registerConsentLink_jd13o_167",cD="_authModeSwitch_jd13o_177",lD="_authModeSwitchLink_jd13o_184",dD="_authModeLinks_jd13o_199",uD="_authSecondaryActions_jd13o_207",mD="_authModeLink_jd13o_199",pD="_optionGrid_jd13o_236",fD="_optionGroup_jd13o_242",hD="_optionRow_jd13o_247",gD="_inlineHint_jd13o_254",yD="_actionRowEnd_jd13o_260",fe={authBlockedBanner:z0,loginView:H0,loginCard:G0,loginCloseBtn:V0,loginLogo:Z0,authBrandRow:q0,setupHeaderRow:K0,runtimeIconBadge:Y0,loginTitle:J0,loginTitleAccent:X0,loginSubtitle:Q0,loginError:eD,loginField:tD,loginFieldLabel:nD,loginInput:aD,loginPrimaryBtn:rD,authPrimaryActions:sD,registerConsent:oD,registerConsentLink:iD,authModeSwitch:cD,authModeSwitchLink:lD,authModeLinks:dD,authSecondaryActions:uD,authModeLink:mD,optionGrid:pD,optionGroup:fD,optionRow:hD,inlineHint:gD,actionRowEnd:yD};function vD(e={x:0,y:0}){const[n,r]=a.useState(e),[s,o]=a.useState(!1),[d,i]=a.useState({x:0,y:0}),[u,f]=a.useState(0),k=a.useRef(null),x=a.useCallback(g=>{const w=g.target;if(!(w.closest("button")||w.closest("input")||w.closest("select")||w.closest("textarea")||w.closest('[role="button"]')||w.closest(".no-drag"))){if(k.current){const I=k.current.getBoundingClientRect();f(I.top-n.y)}o(!0),i({x:g.clientX-n.x,y:g.clientY-n.y})}},[n]),S=a.useCallback(g=>{if(s){let w=g.clientX-d.x,I=g.clientY-d.y;I<-u&&(I=-u),r({x:w,y:I})}},[s,d,u]),v=a.useCallback(()=>{o(!1)},[]);return a.useEffect(()=>(s?(window.addEventListener("mousemove",S),window.addEventListener("mouseup",v)):(window.removeEventListener("mousemove",S),window.removeEventListener("mouseup",v)),()=>{window.removeEventListener("mousemove",S),window.removeEventListener("mouseup",v)}),[s,S,v]),{position:n,isDragging:s,handleMouseDown:x,modalRef:k,setPosition:r}}function ao({isOpen:e,onClose:n,title:r,children:s,footer:o,size:d="md",theme:i=lu,className:u,headerActions:f,draggable:k=!1,isSettings:x=!1,closeOnOverlayClick:S=!0}){const v=a.useRef(null),{position:g,isDragging:w,handleMouseDown:I,modalRef:b}=vD();if(a.useEffect(()=>{const W=M=>{M.key==="Escape"&&e&&n()};return window.addEventListener("keydown",W),()=>window.removeEventListener("keydown",W)},[e,n]),a.useEffect(()=>(e?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[e]),!e)return null;const N={sm:yt.modalSizeSm,md:yt.modalSizeMd,mdWide:yt.modalSizeMdWide,lg:yt.modalSizeLg,xl:yt.modalSizeXl,full:yt.modalSizeFull};return Ni.createPortal(t.jsx("div",{className:`${yt.overlay} ${u||""} ${yt.overlayHighZ}`,ref:v,onClick:W=>{S&&W.target===v.current&&n()},children:t.jsxs("div",{ref:b,className:`tf-surface-modal tf-modal-shell ${yt.modal} tf-scrollbar-scope ${N[d]} ${k?yt.draggableModal:""} ${x?yt.settingsViewModal:""}`,"data-theme":i,style:{transform:k?`translate(${g.x}px, ${g.y}px)`:void 0,transition:w?"none":"transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.3s ease-out"},children:[t.jsxs("div",{className:`tf-modal-header ${k?yt.draggableHeader:""}`,onMouseDown:k?I:void 0,style:{cursor:k?w?"grabbing":"grab":"default"},children:[t.jsx("div",{className:"tf-modal-title",children:r}),t.jsxs("div",{className:yt.headerActions,children:[f,t.jsx("button",{className:"tf-control-icon",onClick:n,title:"Close",children:t.jsx(Mi,{size:20})})]})]}),t.jsx("div",{className:yt.modalContent,children:s}),o&&t.jsx("div",{className:`${yt.formActions} ${yt.modalFooter}`,children:o})]})}),document.body)}const kD="_modalBody_1mute_1",SD="_mutedText_1mute_5",wD="_sectionText_1mute_10",bD="_sectionTextSpaced_1mute_15",xD="_sectionTextTop_1mute_20",_D="_errorText_1mute_25",CD="_inlineFieldLabel_1mute_29",AD="_wrapRow_1mute_35",TD="_actionRowEnd_1mute_42",ID="_modalActionsEnd_1mute_50",ND="_memberRow_1mute_56",jD="_memberTitle_1mute_62",RD="_memberActions_1mute_66",DD="_selectRole_1mute_73",ED="_selectPermission_1mute_77",PD="_inviteRow_1mute_81",MD="_listHeading_1mute_85",LD="_auditList_1mute_90",BD="_auditPager_1mute_96",WD="_labelFixed_1mute_103",mt={modalBody:kD,mutedText:SD,sectionText:wD,sectionTextSpaced:bD,sectionTextTop:xD,errorText:_D,inlineFieldLabel:CD,wrapRow:AD,actionRowEnd:TD,modalActionsEnd:ID,memberRow:ND,memberTitle:jD,memberActions:RD,selectRole:DD,selectPermission:ED,inviteRow:PD,listHeading:MD,auditList:LD,auditPager:BD,labelFixed:WD};function FD({isOpen:e,theme:n,onClose:r,onConfirm:s}){return t.jsx(ao,{isOpen:e,onClose:r,title:"New Workspace",size:"sm",theme:n,draggable:!0,footer:t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:m.cancelBtn,onClick:r,children:"Cancel"}),t.jsx("button",{type:"button",className:m.submitBtn,onClick:s,children:"Start Setup"})]}),children:t.jsx("div",{className:`${yt.form} ${mt.modalBody}`,children:t.jsx("p",{className:mt.sectionText,children:"Create and configure a new workspace."})})})}function OD({isOpen:e,theme:n,runtimeMode:r,authRequiredForApi:s,isAuthenticated:o,hasAuthIdentity:d,authIdentityLabel:i,billingLoading:u,billingError:f,billingActionError:k,billingNotice:x,billingActionBusy:S,billingIntervalChoice:v,accountProfileSummary:g,currentWorkspaceId:w,canOpenTeamManagement:I,canManageWorkspaceSync:b,workspaceCloudSyncEnabled:N,syncStatusLabel:W,workspaceSyncError:M,syncControlBusy:oe,onClose:te,onOpenWorkspaceAudit:ie,onBillingIntervalChange:T,onRefreshBilling:ve,onUpdateInterval:O,onManageBilling:J,onStartCheckout:le,onToggleWorkspaceSync:ge,onOpenHelp:X}){const R=String(g?.gate||"").trim().toLowerCase(),U=String(g?.billingConflictCode||"").trim().toUpperCase(),Z=String(g?.message||"").trim()||(U==="CHECKOUT_SESSION_EXPIRED"?"Your latest checkout expired. Choose a plan to continue.":U==="CHECKOUT_SESSION_SUPERSEDED"?"A newer checkout is already in progress for this account. Open plans to continue.":""),he=U==="CHECKOUT_SESSION_EXPIRED"||g?.planSelectionRequired===!0||R==="plan_selection_required"?"Choose Plan":R==="checkout_pending"?"Open Plans":"Start Checkout",Q=String(g?.planName||g?.planId||"n/a").trim()||"n/a";return t.jsx(ao,{isOpen:e,onClose:te,title:"Account Hub",size:"md",theme:n,draggable:!0,children:t.jsxs("div",{className:`${yt.form} ${mt.modalBody}`,children:[t.jsx("p",{className:mt.mutedText,children:"Manage sign in, profile, and workspace controls from one place."}),t.jsxs("div",{className:lt.accountHubCard,children:[t.jsx("strong",{children:"Authentication"}),t.jsx("p",{className:mt.sectionText,children:r==="cloud"?s?o?"Signed in. API access is enabled.":"Cloud mode requires sign in before app usage.":"Cloud runtime with optional authentication.":"Local runtime allows guest usage without sign in."}),t.jsx("p",{className:mt.sectionTextSpaced,children:o?d?t.jsxs(t.Fragment,{children:["Signed in as ",t.jsx("span",{className:lt.accountIdentityEmail,children:i})]}):"Signed in":"Signed in as: not signed in"}),r==="cloud"&&s&&!o&&t.jsx("p",{className:mt.sectionTextTop,children:"Use the `/login` screen to sign in."})]}),t.jsxs("div",{className:lt.accountHubCard,children:[t.jsx("strong",{children:"Profile & Account"}),t.jsx("p",{className:mt.sectionText,children:"Profile editing and account preferences will live here."})]}),t.jsxs("div",{className:lt.accountHubCard,children:[t.jsx("strong",{children:"Billing"}),o?r!=="cloud"?t.jsx("p",{className:mt.sectionText,children:"Billing remains cloud-backed in local runtime and uses your connected cloud account."}):t.jsxs(t.Fragment,{children:[u&&t.jsx("p",{className:mt.sectionTextSpaced,children:"Loading billing status..."}),f&&t.jsx("p",{className:`${fe.loginError} ${mt.errorText}`,children:f}),k&&t.jsx("p",{className:`${fe.loginError} ${mt.errorText}`,children:k}),x&&t.jsx("p",{className:mt.errorText,children:x}),Z&&t.jsx("p",{className:mt.sectionText,children:Z}),t.jsxs("p",{className:mt.sectionTextSpaced,children:["Plan: ",t.jsx("code",{children:Q})," · ","Entitlement: ",t.jsx("code",{children:String(g?.entitlementState||"n/a")})]}),t.jsxs("p",{className:mt.sectionText,children:["Stripe status: ",t.jsx("code",{children:String(g?.stripeStatus||"n/a")}),g?.effectiveUntil?` · Effective until ${new Date(g.effectiveUntil).toLocaleString()}`:""]}),t.jsx("div",{className:mt.wrapRow,children:t.jsxs("label",{className:`${lt.accountMenuMeta} ${mt.inlineFieldLabel}`,children:["Interval",t.jsxs("select",{className:m.input,value:v,onChange:we=>T(we.target.value==="year"?"year":"month"),disabled:S,children:[t.jsx("option",{value:"month",children:"Monthly"}),t.jsx("option",{value:"year",children:"Yearly"})]})]})}),t.jsxs("div",{className:mt.actionRowEnd,children:[t.jsx("button",{className:m.cancelBtn,onClick:ve,disabled:S||u,children:"Refresh Billing"}),t.jsx("button",{className:m.cancelBtn,onClick:O,disabled:S||!g?.stripeSubscriptionId,children:"Update Interval"}),t.jsx("button",{className:m.cancelBtn,onClick:J,disabled:S||!g?.stripeCustomerId,children:"Manage Billing"}),t.jsx("button",{className:m.submitBtn,onClick:le,disabled:S,children:S?"Working...":he})]})]}):t.jsx("p",{className:mt.sectionText,children:"Sign in to manage subscription billing."})]}),t.jsxs("div",{className:lt.accountHubCard,children:[t.jsx("strong",{children:"Workspace Audit Log"}),t.jsx("p",{className:mt.sectionText,children:"Audit entries are workspace-scoped for the active workspace, not global account history."}),t.jsxs("p",{className:mt.sectionText,children:["Active workspace: ",t.jsx("code",{children:w})]}),t.jsx("div",{className:mt.actionRowEnd,children:t.jsx("button",{className:m.cancelBtn,onClick:ie,disabled:!I,children:"Open Workspace Audit"})})]}),t.jsxs("div",{className:lt.accountHubCard,children:[t.jsx("strong",{children:"Workspace Cloud Sync"}),t.jsx("p",{className:mt.sectionText,children:b?N?`Enabled · ${W}`:"Disabled":"Sign in to cloud account to enable workspace sync."}),M&&t.jsx("p",{className:`${fe.loginError} ${mt.errorText}`,children:M}),t.jsx("div",{className:mt.actionRowEnd,children:t.jsx("button",{className:m.cancelBtn,disabled:!b||oe,onClick:()=>ge(!N),children:N?"Disable Sync":"Enable Sync"})})]}),t.jsxs("div",{className:`${yt.formActions} ${mt.modalActionsEnd}`,children:[t.jsx("button",{className:m.cancelBtn,onClick:X,children:"Help & Tutorial"}),t.jsx("button",{className:m.submitBtn,onClick:te,children:"Close"})]})]})})}function $D({isOpen:e,theme:n,onClose:r,onSave:s,displayName:o,email:d,avatarDisplayUrl:i,accountBadgeInitial:u,avatarInputRef:f,avatarAccept:k,avatarDraftId:x,saveBusy:S,avatarBusy:v,saveError:g,saveNotice:w,onDisplayNameChange:I,onAvatarInputChange:b,onStartAvatarUpload:N,onDiscardUpload:W,onRemovePhoto:M}){return t.jsx(ao,{isOpen:e,onClose:r,title:"Edit Profile",size:"sm",theme:n,draggable:!0,footer:t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:m.secondaryButton,onClick:r,disabled:S||v,children:"Cancel"}),t.jsx("button",{type:"button",className:m.primaryUpdateBtn,onClick:s,disabled:S||v||!o.trim(),children:S?"Saving...":"Save Profile"})]}),children:t.jsxs("div",{className:`${yt.form} ${mt.modalBody}`,children:[t.jsx("p",{className:mt.sectionText,children:"Update the name shown around your account and shared workspace surfaces."}),t.jsxs("div",{className:lt.profileAvatarEditor,children:[t.jsx("div",{className:lt.profileAvatarPreview,"aria-label":"Profile photo preview",children:i?t.jsx("img",{src:i,alt:"",className:lt.profileAvatarImage}):t.jsx("span",{children:u})}),t.jsxs("div",{className:lt.profileAvatarActions,children:[t.jsx("input",{ref:f,type:"file","aria-label":"Upload profile photo",accept:k,className:lt.profileAvatarInput,onChange:oe=>b(oe.target.files?.[0]||null),disabled:S||v}),t.jsx("button",{type:"button",className:m.secondaryButton,onClick:N,disabled:S||v,children:v?"Uploading...":"Upload Photo"}),x&&t.jsx("button",{type:"button",className:m.secondaryButton,onClick:W,disabled:S||v,children:"Discard Upload"}),i&&t.jsx("button",{type:"button",className:m.secondaryButton,onClick:M,disabled:S||v,children:"Remove Photo"})]})]}),t.jsxs("label",{className:mt.inlineFieldLabel,children:["Display name",t.jsx("input",{className:m.input,type:"text",value:o,onChange:oe=>I(oe.target.value),placeholder:"Display name",disabled:S})]}),t.jsxs("label",{className:mt.inlineFieldLabel,children:["Email",t.jsx("input",{className:m.input,type:"email",value:d,readOnly:!0,disabled:!0})]}),g&&t.jsx("p",{className:`${fe.loginError} ${mt.errorText}`,children:g}),w&&!g&&t.jsx("p",{className:mt.errorText,children:w})]})})}function UD({isOpen:e,theme:n,onClose:r,onOpenSettings:s}){return t.jsx(ao,{isOpen:e,onClose:r,title:"Quick Start",size:"md",theme:n,draggable:!0,children:t.jsxs("div",{className:`${yt.form} ${mt.modalBody}`,children:[t.jsx("p",{className:mt.mutedText,children:"Use this quick guide to get productive in Taskforce dashboard mode."}),t.jsxs("div",{children:[t.jsx("strong",{children:"1. Capture work"}),t.jsxs("p",{className:mt.sectionText,children:["Click ",t.jsx("code",{children:"Add Task"}),", write a short title, and save."]})]}),t.jsxs("div",{children:[t.jsx("strong",{children:"2. Plan the board"}),t.jsxs("p",{className:mt.sectionText,children:["Use ",t.jsx("code",{children:"Sort"}),", ",t.jsx("code",{children:"Group"}),", and ",t.jsx("code",{children:"Filters"})," in the header."]})]}),t.jsxs("div",{children:[t.jsx("strong",{children:"3. Execute and stage"}),t.jsxs("p",{className:mt.sectionText,children:["Move tasks through ",t.jsx("code",{children:"Task"}),", ",t.jsx("code",{children:"In Progress"}),", ",t.jsx("code",{children:"Review"}),", and ",t.jsx("code",{children:"Done"}),"."]})]}),t.jsxs("div",{children:[t.jsx("strong",{children:"4. Archive finished work"}),t.jsx("p",{className:mt.sectionText,children:"Archive completed/cancelled tasks to keep active board signal high."})]}),t.jsxs("div",{className:`${yt.formActions} ${mt.modalActionsEnd}`,children:[t.jsx("button",{className:m.cancelBtn,onClick:s,children:"Open Settings"}),t.jsx("button",{className:m.submitBtn,onClick:r,children:"Close Tutorial"})]})]})})}function zD({prompt:e,theme:n,onClose:r,onConfirm:s}){return t.jsx(ao,{isOpen:!!e,onClose:r,title:"Date Warning",size:"sm",theme:n,draggable:!1,closeOnOverlayClick:!1,children:t.jsxs("div",{className:`${m.form} tf-inline-stack-sm`,style:{padding:"16px",gap:"12px"},children:[t.jsx("p",{className:"tf-text-body",children:"Due date is before scheduled date."}),e&&t.jsxs("p",{className:"tf-text-helper",children:["Due: ",e.dueDate," · Scheduled: ",e.scheduledDate]}),t.jsxs("div",{className:m.formActions,children:[t.jsx("button",{className:m.cancelBtn,onClick:r,children:"Go Back"}),t.jsx("button",{className:m.submitBtn,onClick:s,children:"Save Anyway"})]})]})})}const HD="_syncStatusModal_4pd1g_1",GD="_syncStatusTop_4pd1g_6",VD="_syncStatusMetaHeader_4pd1g_15",ZD="_syncStatusHeaderInfo_4pd1g_22",qD="_syncToggle_4pd1g_43",KD="_syncStatusBadge_4pd1g_47",YD="_syncToggleControl_4pd1g_75",JD="_syncToggleControlEnabled_4pd1g_91",XD="_syncToggleControlDisabled_4pd1g_98",QD="_syncToggleControlBusy_4pd1g_102",eE="_syncToggleControlBlocked_4pd1g_107",tE="_syncToggleInput_4pd1g_112",nE="_syncToggleState_4pd1g_125",aE="_syncToggleStateOn_4pd1g_136",rE="_syncToggleStateOff_4pd1g_141",sE="_syncToggleThumb_4pd1g_146",oE="_syncStatusSummaryValue_4pd1g_173",iE="_syncStatusSummaryCompact_4pd1g_180",cE="_syncStatusRepairBanner_4pd1g_190",lE="_syncStatusRepairHeader_4pd1g_200",dE="_syncStatusRepairBadge_4pd1g_207",uE="_syncStatusRepairMeta_4pd1g_216",mE="_syncStatusRepairText_4pd1g_223",pE="_syncStatusLabel_4pd1g_257",fE="_syncStatusSectionHeader_4pd1g_265",hE="_syncStatusCompactGrid_4pd1g_278",gE="_syncStatusCompactItem_4pd1g_284",yE="_syncStatusValue_4pd1g_295",vE="_syncStatusValueError_4pd1g_325",kE="_syncStatusActions_4pd1g_329",SE="_syncStatusPanel_4pd1g_336",wE="_syncStatusPanelHeader_4pd1g_346",bE="_syncStatusPanelMeta_4pd1g_353",xE="_syncStatusEventsList_4pd1g_375",_E="_syncStatusEventItem_4pd1g_384",CE="_syncStatusEventItemError_4pd1g_391",AE="_syncStatusEventItemMuted_4pd1g_396",TE="_syncStatusEventLine_4pd1g_401",IE="_syncStatusSecondaryActions_4pd1g_411",NE="_syncStatusPrimaryActions_4pd1g_425",jE="_syncStatusPrimaryActionSlot_4pd1g_432",RE="_syncStatusActionPlaceholder_4pd1g_440",He={syncStatusModal:HD,syncStatusTop:GD,syncStatusMetaHeader:VD,syncStatusHeaderInfo:ZD,syncToggle:qD,syncStatusBadge:KD,syncToggleControl:YD,syncToggleControlEnabled:JD,syncToggleControlDisabled:XD,syncToggleControlBusy:QD,syncToggleControlBlocked:eE,syncToggleInput:tE,syncToggleState:nE,syncToggleStateOn:aE,syncToggleStateOff:rE,syncToggleThumb:sE,syncStatusSummaryValue:oE,syncStatusSummaryCompact:iE,syncStatusRepairBanner:cE,syncStatusRepairHeader:lE,syncStatusRepairBadge:dE,syncStatusRepairMeta:uE,syncStatusRepairText:mE,syncStatusLabel:pE,syncStatusSectionHeader:fE,syncStatusCompactGrid:hE,syncStatusCompactItem:gE,syncStatusValue:yE,syncStatusValueError:vE,syncStatusActions:kE,syncStatusPanel:SE,syncStatusPanelHeader:wE,syncStatusPanelMeta:bE,syncStatusEventsList:xE,syncStatusEventItem:_E,syncStatusEventItemError:CE,syncStatusEventItemMuted:AE,syncStatusEventLine:TE,syncStatusSecondaryActions:IE,syncStatusPrimaryActions:NE,syncStatusPrimaryActionSlot:jE,syncStatusActionPlaceholder:RE};function DE({isOpen:e,theme:n,currentWorkspaceLabel:r,syncStatusMeta:s,workspaceCloudSyncEnabled:o,syncControlBusy:d,canManageWorkspaceSync:i,workspaceSyncSummary:u,workspaceSyncRepairBusy:f,referenceMismatchCount:k,syncStageLabel:x,workspaceSyncPendingChanges:S,formattedLastSyncTime:v,formattedLastPullTime:g,formattedLastPushTime:w,syncLastError:I,workspaceSyncDiagnostics:b,activeReferenceMismatchSummaries:N,syncDiagnosticsSummary:W,syncEventRows:M,syncEventsListRef:oe,workspaceSyncRepairQueued:te,workspaceSyncBusy:ie,workspaceSyncCopied:T,runtimeMode:ve,isAuthenticated:O,onClose:J,onToggleWorkspaceSync:le,onRepairSync:ge,onCopyReport:X,onOpenLogin:R,onRetrySync:U}){return t.jsx(ao,{isOpen:e,onClose:J,title:"Sync Manager",size:"mdWide",theme:n,draggable:!0,children:t.jsxs("div",{className:`${yt.form} ${He.syncStatusModal}`,style:{gap:"10px"},children:[t.jsxs("div",{className:He.syncStatusTop,children:[t.jsx("div",{className:He.syncStatusHeaderInfo,children:t.jsxs("div",{className:He.syncStatusMetaHeader,children:[t.jsx("div",{className:He.syncStatusBadge,style:{borderColor:s.border,background:s.background,color:s.color},children:s.label}),t.jsxs("span",{className:He.syncStatusLabel,children:["Workspace: ",t.jsx("code",{children:r})]})]})}),t.jsx("label",{className:He.syncToggle,children:t.jsxs("span",{className:[He.syncToggleControl,o?He.syncToggleControlEnabled:He.syncToggleControlDisabled,d?He.syncToggleControlBusy:"",i?"":He.syncToggleControlBlocked].filter(Boolean).join(" "),children:[t.jsx("input",{className:He.syncToggleInput,type:"checkbox",role:"switch","aria-label":"Enable Sync",checked:o,disabled:!i||d,onChange:Z=>le(Z.target.checked)}),t.jsx("span",{className:`${He.syncToggleState} ${He.syncToggleStateOn}`,children:"On"}),t.jsx("span",{className:`${He.syncToggleState} ${He.syncToggleStateOff}`,children:"Off"}),t.jsx("span",{className:He.syncToggleThumb})]})})]}),t.jsxs("div",{className:He.syncStatusSummaryCompact,children:[t.jsx("span",{className:He.syncStatusLabel,children:"Health"}),t.jsx("span",{className:He.syncStatusSummaryValue,children:u})]}),f&&t.jsxs("div",{className:He.syncStatusRepairBanner,children:[t.jsxs("div",{className:He.syncStatusRepairHeader,children:[t.jsxs("div",{className:He.syncStatusRepairBadge,children:[t.jsx(Pa,{size:13,className:m.spinner}),t.jsx("span",{children:"Repair In Progress"})]}),t.jsx("span",{className:He.syncStatusRepairMeta,children:"Advanced recovery mode"})]}),t.jsx("span",{className:He.syncStatusRepairText,children:k>0?`Taskforce is clearing the saved sync cursor and reconciling workspace state from the cloud again, including ${k} detected reference mismatch${k===1?"":"es"}. The panel may stay busy for a while during large repairs.`:"Taskforce is clearing the saved sync cursor and reconciling workspace state from the cloud again. The panel may stay busy for a while during large repairs."})]}),t.jsx("div",{className:He.syncStatusSectionHeader,children:t.jsx("span",{className:He.syncStatusLabel,children:"Current Session"})}),t.jsxs("div",{className:He.syncStatusCompactGrid,children:[t.jsxs("div",{className:He.syncStatusCompactItem,children:[t.jsx("span",{className:He.syncStatusLabel,children:"Stage"}),t.jsx("span",{className:He.syncStatusValue,children:x})]}),t.jsxs("div",{className:He.syncStatusCompactItem,children:[t.jsx("span",{className:He.syncStatusLabel,children:"Local Changes"}),t.jsx("span",{className:He.syncStatusValue,children:S})]}),t.jsxs("div",{className:He.syncStatusCompactItem,children:[t.jsx("span",{className:He.syncStatusLabel,children:"Last Successful"}),t.jsx("span",{className:He.syncStatusValue,children:v})]})]}),t.jsx("div",{className:He.syncStatusSectionHeader,children:t.jsx("span",{className:He.syncStatusLabel,children:"Activity"})}),t.jsxs("div",{className:He.syncStatusCompactGrid,children:[t.jsxs("div",{className:He.syncStatusCompactItem,children:[t.jsx("span",{className:He.syncStatusLabel,children:"Last Pull"}),t.jsx("span",{className:He.syncStatusValue,children:g})]}),t.jsxs("div",{className:He.syncStatusCompactItem,children:[t.jsx("span",{className:He.syncStatusLabel,children:"Last Push"}),t.jsx("span",{className:He.syncStatusValue,children:w})]})]}),I!=="None"&&t.jsxs("div",{className:He.syncStatusPanel,style:{background:"rgba(239, 68, 68, 0.05)",borderColor:"rgba(239, 68, 68, 0.2)"},children:[t.jsxs("div",{className:He.syncStatusSectionHeader,style:{marginTop:0},children:[t.jsx(Tc,{size:12,color:"#fda4af"}),t.jsxs("span",{className:He.syncStatusLabel,style:{color:"#fda4af"},children:["Last Error (",b.lastErrorAt?new Date(b.lastErrorAt).toLocaleTimeString():"Recent",")"]})]}),t.jsx("span",{className:`${He.syncStatusValue} ${He.syncStatusValueError}`,children:I})]}),k>0&&t.jsxs("div",{className:He.syncStatusPanel,style:{background:"rgba(250, 204, 21, 0.08)",borderColor:"rgba(250, 204, 21, 0.22)"},children:[t.jsxs("div",{className:He.syncStatusPanelHeader,children:[t.jsx("span",{className:He.syncStatusLabel,style:{color:"#fde68a"},children:"Identifier Integrity"}),t.jsxs("span",{className:He.syncStatusPanelMeta,children:[k," mismatch",k===1?"":"es"," detected"]})]}),t.jsx("span",{className:He.syncStatusValue,children:"Task, document, or image reference numbers disagreed during normal sync. Cloud-backed sync preserves the incoming cloud reference and renumbers the displaced local item to the next available reference."}),N.length>0&&t.jsx("div",{style:{marginTop:"10px",display:"flex",flexDirection:"column",gap:"8px"},children:N.map(Z=>t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"2px",padding:"8px 10px",borderRadius:"8px",background:"rgba(15, 23, 42, 0.18)",border:"1px solid rgba(250, 204, 21, 0.16)"},children:[t.jsx("span",{className:He.syncStatusValue,style:{fontSize:"12px",wordBreak:"break-all"},children:Z.pathLabel}),Z.refsLabel?t.jsx("span",{className:He.syncStatusPanelMeta,children:Z.refsLabel}):null]},Z.key))})]}),t.jsxs("div",{className:He.syncStatusPanel,children:[t.jsxs("div",{className:He.syncStatusPanelHeader,children:[t.jsx("span",{className:He.syncStatusLabel,children:"Local Sync Diagnostics"}),t.jsx("span",{className:He.syncStatusPanelMeta,style:{fontSize:"10px"},children:"AI profiles & metadata"})]}),t.jsx("div",{className:He.syncStatusCompactGrid,style:{gridTemplateColumns:"repeat(2, 1fr)"},children:W.map(Z=>t.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",gap:"8px"},children:[t.jsx("span",{className:He.syncStatusLabel,style:{fontSize:"9px",textTransform:"capitalize"},children:Z.label}),t.jsx("span",{className:He.syncStatusValue,style:{fontSize:"11px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:Z.value})]},Z.label))})]}),t.jsxs("div",{className:He.syncStatusPanel,children:[t.jsx("div",{className:He.syncStatusPanelHeader,children:t.jsx("span",{className:He.syncStatusLabel,children:"Recent Events"})}),t.jsx("div",{ref:oe,className:He.syncStatusEventsList,style:{height:"120px"},children:M.map(Z=>t.jsx("div",{className:[He.syncStatusEventItem,Z.tone==="error"?He.syncStatusEventItemError:"",Z.tone==="muted"?He.syncStatusEventItemMuted:""].filter(Boolean).join(" "),style:{padding:"6px 8px",borderRadius:"6px"},children:t.jsx("span",{className:He.syncStatusEventLine,style:{fontSize:"11px"},children:Z.text})},Z.key))})]}),t.jsxs("div",{className:`${yt.formActions} ${He.syncStatusActions}`,children:[t.jsxs("div",{className:He.syncStatusSecondaryActions,children:[t.jsx("button",{className:m.cancelBtn,onClick:ge,disabled:f,title:f?"Repair is running now.":te?"Repair is queued and will start when the current sync finishes.":ie?"Queue a repair to start automatically when the current sync finishes.":"Advanced recovery: clear the saved pull cursor and re-fetch cloud state from the beginning.",children:f?t.jsxs(t.Fragment,{children:[t.jsx(Pa,{size:14,className:m.spinner}),t.jsx("span",{style:{marginLeft:"6px"},children:"Repairing..."})]}):te?"Repair Queued":"Repair"}),t.jsxs("button",{className:m.cancelBtn,onClick:X,title:"Copy the current sync manager report for support or AI troubleshooting.",children:[t.jsx(Ol,{size:14}),t.jsx("span",{style:{marginLeft:"6px"},children:T?"Copied":"Copy Report"})]})]}),t.jsxs("div",{className:He.syncStatusPrimaryActions,children:[t.jsx("div",{className:He.syncStatusPrimaryActionSlot,children:ve==="local"&&!O?t.jsx("button",{className:m.submitBtn,onClick:R,children:"Sign In / Register"}):t.jsx("div",{className:He.syncStatusActionPlaceholder,"aria-hidden":"true"})}),t.jsx("div",{className:He.syncStatusPrimaryActionSlot,children:t.jsx("button",{className:m.submitBtn,onClick:U,disabled:ie,children:ie?t.jsxs(t.Fragment,{children:[t.jsx(Pa,{size:14,className:m.spinner}),"Syncing..."]}):t.jsxs(t.Fragment,{children:[t.jsx(Cg,{size:14}),"Sync"]})})})]})]})]})})}function EE({isOpen:e,theme:n,teamPlanMode:r,teamMgmtError:s,teamManagementTab:o,teamUsersLoading:d,teamUsers:i,teamActionBusyUserId:u,teamInviteFeedback:f,teamInviteEmail:k,teamInviteRole:x,teamInvitePermissionMode:S,teamInviteBusy:v,pendingInvites:g,teamAuditLoading:w,teamAuditEvents:I,teamAuditPage:b,teamAuditPages:N,teamAuditHasMore:W,onClose:M,onOpenMembersTab:oe,onOpenInvitesTab:te,onOpenAuditTab:ie,onMemberRoleChange:T,onMemberPermissionChange:ve,onToggleMemberDisabled:O,onRevokeInvite:J,onRemoveMember:le,onInviteEmailChange:ge,onInviteRoleChange:X,onInvitePermissionModeChange:R,onSubmitInvite:U,onLoadAuditPrevious:Z,onLoadAuditNext:he}){return t.jsx(ao,{isOpen:e,onClose:M,title:"Team Management",size:"md",theme:n,draggable:!0,children:t.jsxs("div",{className:`${yt.form} ${mt.modalBody}`,children:[r==="personal"&&t.jsx("p",{className:fe.loginError,children:"Team management is only available in TEAM accounts."}),s&&t.jsx("p",{className:fe.loginError,children:s}),t.jsxs("div",{className:`${m.settingsTabs} tf-scrollbar tf-scrollbar--track-transparent tf-scrollbar--compact`,children:[t.jsx("button",{className:`${m.settingsTabBtn} ${o==="members"?m.settingsTabBtnActive:""}`,onClick:oe,children:"Members"}),t.jsx("button",{className:`${m.settingsTabBtn} ${o==="invites"?m.settingsTabBtnActive:""}`,onClick:te,children:"Invites"}),t.jsx("button",{className:`${m.settingsTabBtn} ${o==="audit"?m.settingsTabBtnActive:""}`,onClick:ie,children:"Audit Log"})]}),o==="members"&&t.jsxs("div",{className:lt.accountHubCard,children:[d&&t.jsx("p",{className:mt.mutedText,children:"Loading members..."}),!d&&i.length===0&&t.jsx("p",{className:mt.mutedText,children:"No users found."}),!d&&i.map(Q=>t.jsxs("div",{className:mt.memberRow,children:[t.jsx("div",{className:mt.memberTitle,children:Q.displayName||Q.email}),t.jsxs("div",{className:lt.accountMenuMeta,children:[Q.email," · ",Q.status,Q.disabled?" · deactivated":""]}),t.jsxs("div",{className:mt.memberActions,children:[t.jsxs("select",{className:`${m.input} ${mt.selectRole}`,value:Q.role,onChange:we=>T(Q.userId,we.target.value),disabled:u===Q.userId,children:[t.jsx("option",{value:"owner",children:"Owner"}),t.jsx("option",{value:"admin",children:"Admin"}),t.jsx("option",{value:"member",children:"Member"})]}),Q.role==="member"&&t.jsxs("select",{className:`${m.input} ${mt.selectPermission}`,value:Q.permissionMode,onChange:we=>ve(Q.userId,we.target.value),disabled:u===Q.userId,children:[t.jsx("option",{value:"read-write",children:"Read / Write"}),t.jsx("option",{value:"read-only",children:"Read Only"})]}),t.jsx("button",{className:m.cancelBtn,disabled:u===Q.userId,onClick:()=>O(Q.userId,!Q.disabled),children:Q.disabled?"Reactivate":"Deactivate"}),Q.status==="invited"&&t.jsx("button",{className:m.cancelBtn,disabled:u===Q.userId,onClick:()=>J(Q.userId),children:"Revoke Invite"}),t.jsx("button",{className:m.cancelBtn,disabled:u===Q.userId,onClick:()=>le(Q.userId),children:"Remove"})]})]},Q.userId))]}),o==="invites"&&t.jsxs("div",{className:lt.accountHubCard,children:[f&&t.jsx("p",{className:mt.sectionText,children:f}),t.jsxs("div",{className:m.pathInputGroup,children:[t.jsx("label",{className:`${m.label} ${mt.labelFixed}`,children:"Email"}),t.jsx("input",{className:m.input,value:k,onChange:Q=>ge(Q.target.value),placeholder:"name@company.com"})]}),t.jsxs("div",{className:m.pathInputGroup,children:[t.jsx("label",{className:`${m.label} ${mt.labelFixed}`,children:"Role"}),t.jsxs("select",{className:`${m.input} ${mt.selectRole}`,value:x,onChange:Q=>X(Q.target.value==="admin"?"admin":"member"),children:[t.jsx("option",{value:"member",children:"Member"}),t.jsx("option",{value:"admin",children:"Admin"})]}),x==="member"&&t.jsxs("select",{className:`${m.input} ${mt.selectPermission}`,value:S,onChange:Q=>R(Q.target.value==="read-only"?"read-only":"read-write"),children:[t.jsx("option",{value:"read-write",children:"Read / Write"}),t.jsx("option",{value:"read-only",children:"Read Only"})]}),t.jsx("button",{className:m.submitBtn,disabled:v||!k.trim()||r!=="team",onClick:U,children:v?"Sending...":"Send Invite"})]}),t.jsxs("div",{className:mt.inviteRow,children:[t.jsx("div",{className:mt.listHeading,children:"Pending Invites"}),g.length===0&&t.jsx("p",{className:mt.mutedText,children:"No pending invites."}),g.map(Q=>t.jsxs("div",{className:mt.memberRow,children:[t.jsx("div",{className:mt.memberTitle,children:Q.displayName||Q.email}),t.jsxs("div",{className:lt.accountMenuMeta,children:[Q.email," · ",Q.role]})]},Q.userId))]})]}),o==="audit"&&t.jsxs("div",{className:lt.accountHubCard,children:[w&&t.jsx("p",{className:mt.mutedText,children:"Loading audit entries..."}),!w&&I.length===0&&t.jsx("p",{className:mt.mutedText,children:"No audit events for this workspace."}),!w&&t.jsx("div",{className:mt.auditList,children:I.map(Q=>t.jsxs("div",{className:mt.memberRow,children:[t.jsx("div",{className:lt.accountMenuMeta,children:new Date(Q.createdAt).toLocaleString()}),t.jsx("div",{className:mt.memberTitle,children:Q.action}),t.jsxs("div",{className:lt.accountMenuMeta,children:[Q.actorUserId," (",Q.actorRole,")"]})]},Q.id))}),t.jsxs("div",{className:mt.auditPager,children:[t.jsx("button",{className:m.cancelBtn,disabled:w||b===0,onClick:Z,children:"Previous"}),t.jsxs("span",{className:lt.accountMenuMeta,children:["Page ",b+1," of ",N]}),t.jsx("button",{className:m.cancelBtn,disabled:w||!W||b+1>=N,onClick:he,children:"Next"})]})]}),t.jsx("div",{className:`${yt.formActions} ${mt.modalActionsEnd}`,children:t.jsx("button",{className:m.cancelBtn,onClick:M,children:"Close"})})]})})}const Eh=e=>{const n=e.status||"task";return n==="done"||n==="cancelled"?"completed":n},PE=(e,n,r)=>{if(Eh(e)===n)return null;const o={status:n};return n==="task"||n==="on-hold"?(o.inProgress=!1,o.readyForReview=!1,o.completed=!1,o.cancelled=!1,o.completedAt=null,o):n==="in-progress"?(o.inProgress=!0,o.readyForReview=!1,o.completed=!1,o.cancelled=!1,o.completedAt=null,o):n==="review"?(o.inProgress=!1,o.readyForReview=!0,o.completed=!1,o.cancelled=!1,o.completedAt=null,o):n==="done"||n==="completed"?(o.status="done",o.inProgress=!1,o.readyForReview=!1,o.completed=!0,o.cancelled=!1,o.completedAt=r,o):(n==="cancelled"&&(o.status="cancelled"),o)},ME=({targetTasks:e,overTaskId:n,isBelowOverItem:r})=>{if(!n)return e.length;const s=e.findIndex(o=>o.id===n);return s<0?e.length:s+(r?1:0)},Ph=(e,n=new Map)=>{const r=new Map(n);return e.forEach((s,o)=>{r.set(s.id,{...r.get(s.id)||{},orderInDay:o})}),r},rp=e=>Array.from(e.entries()).map(([n,r])=>({taskId:n,updates:r})),Mh=({sourceColumnId:e,targetColumnId:n,sourceTasks:r,updates:s})=>!e||e===n?s:Ph(r,s),LE=({activeTask:e,sourceColumnId:n,targetTasks:r,sourceTasks:s,insertAt:o})=>{const d=[...r];d.splice(o,0,e);let i=new Map;return d.forEach((u,f)=>{if(u.id===e.id){i.set(u.id,{...i.get(u.id)||{},...e.scheduledDate?{scheduledDate:null,scheduledWeekKey:null}:{},orderInDay:f});return}i.set(u.id,{...i.get(u.id)||{},orderInDay:f})}),i=Mh({sourceColumnId:n,targetColumnId:"backlog",sourceTasks:s,updates:i}),rp(i)},BE=({activeTask:e,targetTasks:n,insertAt:r})=>{const s=[...n];return s.splice(r,0,e),rp(Ph(s))},WE=({activeTask:e,sourceColumnId:n,targetColumnId:r,targetTasks:s,sourceTasks:o,insertAt:d,scheduledDate:i,scheduledWeekKey:u})=>{const f=[...s];f.splice(d,0,e);let k=new Map;return f.forEach((x,S)=>{if(x.id===e.id){k.set(x.id,{...k.get(x.id)||{},scheduledDate:i,scheduledWeekKey:u,orderInDay:S});return}k.set(x.id,{...k.get(x.id)||{},orderInDay:S})}),k=Mh({sourceColumnId:n,targetColumnId:r,sourceTasks:o,updates:k}),rp(k)},FE=({activeTask:e,sourceColumnId:n,targetColumnId:r,targetTasks:s,sourceTasks:o,overTaskId:d,isBelowOverItem:i,scheduleDates:u,parseToIsoWeekKey:f,todayDate:k})=>{const x=["mon","tue","wed","thu","fri","sat","sun"];if(!(r==="backlog"||r==="expired"||x.includes(r)))return null;const v=ME({targetTasks:s,overTaskId:d,isBelowOverItem:i});if(r==="expired")return n!=="expired"?null:{kind:"updates",updates:BE({activeTask:e,targetTasks:s,insertAt:v})};if(r==="backlog")return{kind:"updates",updates:LE({activeTask:e,sourceColumnId:n,targetTasks:s,sourceTasks:o,insertAt:v})};if(!x.includes(r))return null;const g=u[r];return g?!(e.status==="done"||e.status==="cancelled")&&g<k?{kind:"blocked",reason:"Only completed work can be scheduled in the past."}:{kind:"updates",updates:WE({activeTask:e,sourceColumnId:n,targetColumnId:r,targetTasks:s,sourceTasks:o,insertAt:v,scheduledDate:g,scheduledWeekKey:f(g)}),selectedDate:g}:null},ru="expired::";function OE({tasks:e,columns:n,groupBy:r,searchQuery:s,copiedId:o,taxonomies:d,types:i,priorities:u,approaches:f,assigneeOptions:k=[],onUpdateTask:x,onTaskClick:S,onOpenTaskById:v,onCopyId:g,onToggleInProgress:w,onToggleReview:I,onToggleComplete:b,onToggleCancel:N,onSetStatus:W,onArchiveTask:M,onUnarchive:oe,onDelete:te,allTasks:ie=[],onAddTaskToColumn:T,emptyColumnMode:ve="show",filterCategories:O=[],filterTypes:J=[],filterPriorities:le=[],filterStatus:ge=[],filterAssignees:X=[],scheduleFilteredTaskIds:R,categories:U=[],compressed:Z=!1,readOnlyMode:he=null,recentlyChangedTaskIds:Q=[],scheduleDates:we,onScheduleDaySelected:ke,persistedScrollLeft:be,onScrollLeftChange:me,sortBy:Re="created",sortOrder:Te="desc",planningDropTargets:se=null,onAssignTaskToWorkstream:F,onAssignWorkstreamToInitiative:D,showTaskCardStatusLabel:E=!0,workstreams:y=[],initiatives:C=[]}){const[P,j]=a.useState(null),[ae,L]=a.useState(!1),[de,K]=a.useState(!1),ue=a.useMemo(()=>new Set(Q),[Q]),B=a.useMemo(()=>new Map(y.map(ne=>[ne.id,ne])),[y]),re=a.useMemo(()=>new Map(C.map(ne=>[ne.id,ne])),[C]),xe=a.useCallback(ne=>{const Ce=ne.workstreamId&&B.get(ne.workstreamId)||null,Ie=Ce?.initiativeId&&re.get(Ce.initiativeId)||null;return{taskWorkstream:Ce,taskInitiative:Ie}},[re,B]),Ee=a.useMemo(()=>new Set(e.map(ne=>ne.id)),[e]),ye=a.useCallback(ne=>ne.startsWith(ru)?ne.slice(ru.length):ne,[]),Pe=a.useCallback(ne=>Ee.has(ye(ne)),[Ee,ye]),vt=a.useMemo(()=>new Set(R||[]),[R]),Ke=a.useRef(null),bt=a.useCallback(ne=>{const Ce=ne?.data?.current||{},Ie=String(ne?.id||"");let je=String(Ce.taskId||""),at=String(Ce.workstreamId||"");!je&&Ie&&Pe(Ie)&&(je=ye(Ie)),!at&&Ie.startsWith("planning-workstream:")&&(at=Ie.slice(20));let ct=String(Ce.type||"");return ct||(je?ct="task-card":at&&(ct="planning-workstream")),{activeId:Ie,type:ct,taskId:je,workstreamId:at}},[ye,Pe]),Ze=Cf(jm(Nf,{activationConstraint:{distance:5}}),jm(Yg,{coordinateGetter:Kg})),Qe=Eh,St=a.useMemo(()=>{const ne=new Date,Ce=ne.getFullYear(),Ie=String(ne.getMonth()+1).padStart(2,"0"),je=String(ne.getDate()).padStart(2,"0");return`${Ce}-${Ie}-${je}`},[]),Me=a.useMemo(()=>{const ne=je=>{const at=je.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!at)return null;const ct=new Date(Date.UTC(Number(at[1]),Number(at[2])-1,Number(at[3]))),dt=ct.getUTCDay()||7;ct.setUTCDate(ct.getUTCDate()+4-dt);const ut=new Date(Date.UTC(ct.getUTCFullYear(),0,1)),Mt=Math.ceil(((ct.getTime()-ut.getTime())/864e5+1)/7);return`${ct.getUTCFullYear()}-W${String(Mt).padStart(2,"0")}`};return{dates:{...(()=>{const je=new Date,at=je.getDay(),ct=at===0?-6:1-at,dt=new Date(je);dt.setDate(je.getDate()+ct);const ut=Ft=>{const Yt=Ft.getFullYear(),Bt=String(Ft.getMonth()+1).padStart(2,"0"),Jt=String(Ft.getDate()).padStart(2,"0");return`${Yt}-${Bt}-${Jt}`},Mt={mon:"",tue:"",wed:"",thu:"",fri:"",sat:"",sun:""};return["mon","tue","wed","thu","fri","sat","sun"].forEach((Ft,Yt)=>{const Bt=new Date(dt);Bt.setDate(dt.getDate()+Yt),Mt[Ft]=ut(Bt)}),Mt})(),...we||{}},parseToIsoWeekKey:ne}},[we]),H=ne=>{const Ce=ne.scheduledDate||null;return Ce?new Map([[Me.dates.mon,"mon"],[Me.dates.tue,"tue"],[Me.dates.wed,"wed"],[Me.dates.thu,"thu"],[Me.dates.fri,"fri"],[Me.dates.sat,"sat"],[Me.dates.sun,"sun"]]).get(Ce)||"__offweek":"backlog"},c=a.useMemo(()=>{const ne=new Map;for(const Ce of n)ne.set(String(Ce.value),Ce),ne.has(Ce.label)||ne.set(Ce.label,Ce);return ne},[n]),Ue=a.useMemo(()=>{const ne={};return n.forEach(Ie=>{ne[String(Ie.value)]=0}),(ie.length>0?ie:e).forEach(Ie=>{let je="";if(r==="status")je=Qe(Ie);else if(r==="schedule")je=H(Ie);else{const ct=Ie[r];je=String(ct??"")}const at=c.get(je);if(at&&ne[String(at.value)]++,r==="schedule"){const ct=Ie.status==="done"||Ie.status==="cancelled";Ie.scheduledDate&&!ct&&Ie.scheduledDate<St&&c.has("expired")&&(ne.expired=(ne.expired||0)+1)}}),ne},[ie,e,n,r,c,St]),At=a.useMemo(()=>{const ne={};if(n.forEach(Ce=>{ne[String(Ce.value)]=[]}),e.forEach(Ce=>{let Ie="";if(r==="status")Ie=Qe(Ce);else if(r==="schedule")Ie=H(Ce);else{const at=Ce[r];Ie=String(at??"")}const je=c.get(Ie);if(je){if(r==="schedule"&&String(je.value)==="backlog"&&!vt.has(Ce.id))return;ne[String(je.value)].push(Ce)}if(r==="schedule"){const at=Ce.status==="done"||Ce.status==="cancelled";Ce.scheduledDate&&!at&&Ce.scheduledDate<St&&ne.expired&&ne.expired.push(Ce)}}),r==="schedule"){const Ce=(je,at)=>{const ct=typeof je.orderInDay=="number"?je.orderInDay:Number.MAX_SAFE_INTEGER,dt=typeof at.orderInDay=="number"?at.orderInDay:Number.MAX_SAFE_INTEGER;return ct!==dt?ct-dt:String(je.createdAt||"").localeCompare(String(at.createdAt||""))},Ie=(je,at)=>gu(je,at,Re,Te,d);Object.keys(ne).forEach(je=>{if(je==="backlog"||je==="expired"){ne[je].sort(Ie);return}ne[je].sort(Ce)})}return ne},[e,ie,n,r,c,vt,St,Re,Te]),Wt=P?ye(P):null,Tt=Wt?e.find(ne=>ne.id===Wt):null,It=a.useRef(null),Xe=a.useRef(null),gt=a.useRef({pointerId:null,startX:0,startY:0,startScrollLeft:0,didPan:!1}),ze=a.useRef(-1),Ye=(ne,Ce)=>r==="category"?!O.includes(String(ne)):r==="type"?!J.includes(String(ne)):r==="priority"?!le.some(Ie=>Number(Ie)===Number(ne)):r==="status"?String(ne)==="completed"?!ge.includes("done")&&!ge.includes("cancelled"):!ge.includes(String(ne)):r==="assignee"?!X.includes(String(ne)):!1,Ve=a.useMemo(()=>{let je=0;return n.forEach((at,ct)=>{const dt=At[String(at.value)]||[],ut=Ye(at.value,at.label),Mt=r!=="schedule"&&ve==="hide"&&dt.length===0;if(ut||Mt)return;const Nt=ve==="collapse"&&dt.length===0;je+=Nt?72:320,je+=4}),je},[n,At,ve,r,O,J,le,ge]),ot=a.useCallback(ne=>{if(!me)return;const Ce=Math.max(0,Math.round(ne));Ce!==ze.current&&(ze.current=Ce,me(Ce))},[me]);a.useEffect(()=>{const ne=It.current,Ce=Xe.current;if(!ne||!Ce)return;let Ie=!1,je=!1;const at=()=>{!ne||je||(Ie=!0,ne.scrollLeft=Ce.scrollLeft,ot(Ce.scrollLeft),setTimeout(()=>Ie=!1,0))},ct=()=>{!Ce||Ie||(je=!0,Ce.scrollLeft=ne.scrollLeft,ot(ne.scrollLeft),setTimeout(()=>je=!1,0))};return Ce.addEventListener("scroll",at),ne.addEventListener("scroll",ct),()=>{Ce.removeEventListener("scroll",at),ne.removeEventListener("scroll",ct)}},[ot]);const xt=a.useRef(!1);a.useEffect(()=>{if(xt.current)return;if(typeof be!="number"||!Number.isFinite(be)){xt.current=!0;return}const ne=It.current,Ce=Xe.current;if(!ne||!Ce)return;const Ie=Math.max(0,ne.scrollWidth-ne.clientWidth),je=Math.min(Math.max(0,be),Ie);ne.scrollLeft=je,Ce.scrollLeft=je,xt.current=!0},[be,Ve]),a.useEffect(()=>{const ne=()=>{const Ce=It.current;if(!Ce){K(!1);return}K(Ce.scrollWidth>Ce.clientWidth+4)};return ne(),window.addEventListener("resize",ne),()=>{window.removeEventListener("resize",ne)}},[Ve,n.length,At]),a.useEffect(()=>{const ne=Ie=>{const je=gt.current;if(je.pointerId===null||je.pointerId!==Ie.pointerId)return;const at=Ie.clientX-je.startX,ct=Ie.clientY-je.startY;if(!je.didPan){if(Math.abs(at)<7||Math.abs(at)<Math.abs(ct))return;je.didPan=!0,L(!0),document.body.style.userSelect="none"}const dt=je.startScrollLeft-at;It.current&&(It.current.scrollLeft=dt),Xe.current&&(Xe.current.scrollLeft=dt),Ie.preventDefault()},Ce=()=>{const Ie=gt.current;Ie.pointerId!==null&&(Ie.pointerId=null,Ie.didPan=!1,ae&&(L(!1),document.body.style.userSelect=""))};return window.addEventListener("pointermove",ne),window.addEventListener("pointerup",Ce),window.addEventListener("pointercancel",Ce),()=>{window.removeEventListener("pointermove",ne),window.removeEventListener("pointerup",Ce),window.removeEventListener("pointercancel",Ce),document.body.style.userSelect=""}},[ae]);const jt=ne=>{!de||ne.target?.closest('button, a, input, select, textarea, [role="button"], [data-no-header-pan="true"]')||(gt.current.pointerId=ne.pointerId,gt.current.startX=ne.clientX,gt.current.startY=ne.clientY,gt.current.startScrollLeft=It.current?.scrollLeft||0,gt.current.didPan=!1)},it=ne=>{j(ne.active.id)},q=ne=>{const Ce=bt(ne.active),Ie=String(ne.over?.data?.current?.type||"");Ce.type==="task-card"&&Ie.startsWith("planning-")?Ke.current=`${String(ne.over?.id||"")}:${Ie}`:Ke.current&&(Ke.current=null)},Se=ne=>{const{active:Ce,over:Ie}=ne;Ke.current=null,j(null);const je=bt(Ce),at=je.type,ct=String(Ie?.data?.current?.type||""),dt=je.taskId,ut=je.workstreamId,Mt=String(Ie?.data?.current?.workstreamId||""),Nt=String(Ie?.data?.current?.initiativeId||"");if(at==="task-card"){if(ct==="planning-workstream-target"&&dt&&Mt){F?.(dt,Mt);return}if(ct==="planning-task-unlink"&&dt){F?.(dt,null);return}}if(at==="planning-workstream"){if(ct==="planning-initiative-target"&&ut&&Nt){D?.(ut,Nt);return}if(ct==="planning-workstream-unlink"&&ut){D?.(ut,null);return}return}const Ft=String(Ce.id),Yt=Ie?String(Ie.id):null,Bt=ye(Ft);Yt&&ye(Yt);const Jt=e.find(Gt=>Gt.id===Bt);if(!Jt||!Yt)return;const mn=wt(Ft),Qt=String(Ce?.data?.current?.sortable?.containerId||"")||mn,gn=String(Ie?.data?.current?.sortable?.containerId||"")||wt(Yt);if(!gn)return;const jn=c.get(gn)||n.find(Gt=>String(Gt.value)===gn||Gt.label===gn);if(jn){if(r==="schedule"){const An=String(jn.value),G=Yt&&Pe(Yt)?ye(Yt):null,Fe=Ie?.rect,Ct=Ce.rect.current.translated||Ce.rect.current.initial,$e=!!(Fe&&Ct&&Ct.top+Ct.height/2>Fe.top+Fe.height/2),Ut=(At[An]||[]).filter(tn=>tn.id!==Bt),qt=(At[String(Qt)]||[]).filter(tn=>tn.id!==Bt),_t=FE({activeTask:Jt,sourceColumnId:Qt,targetColumnId:An,targetTasks:Ut,sourceTasks:qt,overTaskId:G,isBelowOverItem:$e,scheduleDates:Me.dates,parseToIsoWeekKey:Me.parseToIsoWeekKey,todayDate:St});if(!_t)return;if(_t.kind==="blocked"){window.alert(_t.reason);return}_t.updates.forEach(({taskId:tn,updates:ln})=>x(tn,ln)),_t.selectedDate&&ke?.(_t.selectedDate);return}let Gt=jn.value;if(r==="status"){const An=String(Gt),G=PE(Jt,An,new Date().toISOString());G&&x(Jt.id,G);return}(r==="priority"||r==="complexity")&&(Gt=Number(Gt));const Ma=Jt[r];if(String(Ma??"")!==String(Gt??"")){const An={[r]:Gt};x(Jt.id,An)}}},wt=ne=>{if(c.has(ne)){const je=c.get(ne);return je?String(je.value):ne}if(r==="schedule"&&ne.startsWith(ru))return"expired";const Ce=ye(ne),Ie=e.find(je=>je.id===Ce);if(Ie){let je="";r==="status"?je=Qe(Ie):r==="schedule"?je=H(Ie):je=String(Ie[r]??"");const at=c.get(je);return at?String(at.value):null}return null},tt={sideEffects:Jg({styles:{active:{opacity:"0"}}})},_e=ne=>{try{const Ce=qg(ne);if(Ce.length>0){const Ie=Ce.find(Mt=>String(Mt.id).startsWith("planning-"));if(Ie)return[Ie];const je=ne.pointerCoordinates;if(!je)return[Ce[0]];const at=Ce.filter(Mt=>{const Nt=String(Mt.id);return Pe(Nt)&&Nt!==P});if(at.length===0){const Nt=Ce.filter(Bt=>{const Jt=String(Bt.id);return!Pe(Jt)}).find(Bt=>!!wt(String(Bt.id)))||null,Ft=Nt?wt(String(Nt.id)):null,Yt=(ne.droppableContainers||[]).filter(Bt=>{const Jt=String(Bt.id);return!Pe(Jt)||Jt===P?!1:Ft?wt(Jt)===Ft:!0});if(Yt.length>0){const Bt=Tp({...ne,droppableContainers:Yt});if(Bt.length>0)return[Bt[0]]}return Nt?[Nt]:[Ce[0]]}const ct=at;let dt=ct[0],ut=Number.POSITIVE_INFINITY;for(const Mt of ct){const Nt=ne.droppableRects?.get(Mt.id);if(!Nt)continue;const Ft=Nt.left+Nt.width/2,Yt=Nt.top+Nt.height/2,Bt=je.x-Ft,Jt=je.y-Yt,mn=Bt*Bt+Jt*Jt;mn<ut&&(ut=mn,dt=Mt)}return[dt]}return Tp(ne)}catch(Ce){return console.error("[TaskKanban] collision detection error",Ce),[]}},$t={searchQuery:s,copiedId:o,taxonomies:d,types:i,priorities:u,approaches:f,assigneeOptions:k,onCopyId:g,onToggleInProgress:w,onToggleReview:I,onToggleComplete:b,onToggleCancel:N,onSetStatus:W,onArchiveTask:M,onUnarchive:oe,onDelete:te,onOpenTaskById:v,categories:U,readOnlyMode:he,changedTaskIdSet:ue,resolveTaskHierarchy:xe,groupBy:r,showStatusLabel:E};return t.jsxs(Af,{sensors:Ze,collisionDetection:_e,onDragStart:it,onDragOver:q,onDragEnd:Se,onDragCancel:ne=>{Ke.current=null,j(null)},children:[se,t.jsxs("div",{className:m.kanbanWrapper,children:[t.jsx("div",{ref:Xe,className:`${m.kanbanTopScroll} tf-scrollbar`,children:t.jsx("div",{className:m.kanbanTopScrollSpacer,style:{width:`${Ve}px`}})}),t.jsx("div",{className:m.kanbanContainer,ref:It,children:n.map(ne=>{const Ce=At[String(ne.value)]||[],Ie=Ye(ne.value,ne.label),je=r!=="schedule"&&ve==="hide"&&Ce.length===0,at=r==="schedule",ct=at&&n.some(Jt=>String(Jt.value)==="backlog"),dt=at&&String(ne.value)==="backlog",ut=at&&String(ne.value)==="expired",Mt=At.backlog||[],Ft=ve==="collapse"&&Mt.length===0?72:320,Yt=dt?0:ut?ct?Ft+4:0:void 0,Bt=dt?6:ut?5:void 0;return Ie||je?null:t.jsx($E,{id:String(ne.value),title:ne.label,color:ne.color,icon:ne.icon,tasks:Ce,activeId:P,activeTaskId:Wt,totalCount:Ue[String(ne.value)],onAddTask:()=>T?.(r,ne.value),onTaskClick:S,commonCardProps:$t,collapseEmpty:ve==="collapse",compressed:Z,onHeaderPointerDown:jt,isHeaderPanning:ae,headerPanEnabled:de,stickyLeft:Yt,stickyZIndex:Bt,isPast:!!ne.isPast,isSelected:!!ne.isSelected,isWeekend:!!ne.isWeekend,disableSorting:!1,scheduleDate:r==="schedule"?Me.dates[String(ne.value)]:void 0,onScheduleDaySelected:ke},String(ne.value))})})]}),Ni.createPortal(t.jsx(Zg,{dropAnimation:tt,children:Tt?(()=>{const{taskWorkstream:ne,taskInitiative:Ce}=xe(Tt);return t.jsx(ql,{task:Tt,taskWorkstream:ne,taskInitiative:Ce,isOverlay:!0,...$t,isArchived:Tt.isArchived,categories:U,compressed:Z,isRecentlyChanged:ue.has(Tt.id)})})():null}),document.body)]})}function $E({id:e,title:n,color:r,icon:s,tasks:o,activeId:d=null,activeTaskId:i=null,totalCount:u,onAddTask:f,onTaskClick:k,commonCardProps:x,collapseEmpty:S,compressed:v,onHeaderPointerDown:g,isHeaderPanning:w=!1,headerPanEnabled:I=!1,stickyLeft:b,stickyZIndex:N,isPast:W=!1,isSelected:M=!1,isWeekend:oe=!1,disableSorting:te=!1,scheduleDate:ie,onScheduleDaySelected:T}){const{setNodeRef:ve}=Kl({id:e,data:{type:"Column"}}),O=S&&o.length===0,J=i?o.filter(U=>U.id!==i):o,le=typeof b=="number",ge=a.useRef(null),X=U=>e==="expired"?`${ru}${U}`:U,R=U=>{if(!ie||!T)return;const Z=U.target;Z&&(Z.closest('[data-task-card="true"]')||Z.closest(`.${m.kanbanCardWrapper}`)||T(ie))};return t.jsxs("div",{ref:ve,className:`${m.kanbanColumn} ${O?m.kanbanColumnCollapsed:""} ${le?m.kanbanColumnSticky:""} ${W?m.kanbanColumnPast:""} ${M?m.kanbanColumnSelectedDay:""} ${oe?m.kanbanColumnWeekend:""}`,style:le?{left:`${b}px`,zIndex:N??4}:void 0,onClick:R,children:[t.jsxs("div",{className:`${m.kanbanHeader} ${I?m.kanbanHeaderDraggable:""} ${w?m.kanbanHeaderPanning:""}`,style:{borderTopColor:da(r)||"var(--color-purple)"},onPointerDown:g,children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",minWidth:0,overflow:"hidden"},children:[(()=>{const U=s&&Pi[s]?Pi[s]:Ri,Z=da(r)||"var(--color-purple)";return t.jsx(U,{size:16,style:{color:Z}})})(),!O&&t.jsx("span",{style:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:n})]}),t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",flexShrink:0},children:[(!O||u>0)&&t.jsx("span",{className:m.kanbanCount,children:O?u:`${o.length} / ${u}`}),!x.readOnlyMode&&t.jsx("button",{className:"tf-control-icon tf-control-icon-compact",onClick:U=>{U.stopPropagation(),f()},title:`Add task to ${n}`,"aria-label":`Add task to ${n}`,"data-no-header-pan":"true",children:t.jsx(is,{size:14})})]})]}),t.jsx("div",{className:m.kanbanDroppable,children:t.jsx("div",{className:`${m.kanbanDroppableScroll} ${m.appScrollbar} tf-scrollbar`,ref:ge,children:te?J.map(U=>t.jsx("div",{className:m.kanbanCardWrapper,children:(()=>{const{taskWorkstream:Z,taskInitiative:he}=x.resolveTaskHierarchy?.(U)||{};return t.jsx(ql,{task:U,taskWorkstream:Z,taskInitiative:he,onClick:k,...x,isArchived:U.isArchived,readOnlyMode:x.readOnlyMode||null,compressed:v,isRecentlyChanged:!1})})()},U.id)):t.jsx(Tf,{id:e,items:J.map(U=>X(U.id)),strategy:If,children:J.map(U=>t.jsx(UE,{sortableId:X(U.id),task:U,onClick:k,commonCardProps:x,compressed:v,isRecentlyChanged:x.changedTaskIdSet?.has(U.id)},X(U.id)))})})})]})}function UE({sortableId:e,task:n,onClick:r,commonCardProps:s,compressed:o,isRecentlyChanged:d=!1}){const i=!!s?.readOnlyMode,{attributes:u,listeners:f,setNodeRef:k,transform:x,transition:S,isDragging:v}=jf({id:e,disabled:i,data:{type:"task-card",taskId:n.id}}),g={transform:zm.Transform.toString(x),transition:S,opacity:v?0:1,pointerEvents:v?"none":"auto"},w=s?.groupBy==="schedule",I=!w&&d;return t.jsx("div",{ref:k,style:g,...i?{}:u,...i?{}:f,className:`${m.kanbanCardWrapper} ${I?m.kanbanCardWrapperRaised:""}`,children:(()=>{const{taskWorkstream:b,taskInitiative:N}=s.resolveTaskHierarchy?.(n)||{};return t.jsx(ql,{task:n,taskWorkstream:b,taskInitiative:N,onClick:r,...s,isArchived:n.isArchived,readOnlyMode:s?.readOnlyMode||null,compressed:o,isRecentlyChanged:w?!1:d})})()})}function zE(e,n,r){const s=String(n);if(e==="category"){const o=r.categories.find(d=>String(d.value)===s||d.label===s);return o?{category:o.label}:{}}if(e==="type")return{type:s};if(e==="priority")return Number.isFinite(Number(n))?{priority:Number(n)}:{};if(e==="complexity")return Number.isFinite(Number(n))?{complexity:Number(n)}:{};if(e==="approach"){const o=r.approaches.find(d=>String(d.value)===s||d.label===s);return o?{approach:o.value,taxonomyApproach:o.value}:{}}return e==="assignee"?s.trim().length>0?{assignee:s}:{}:e==="status"?s==="completed"?{status:"done"}:s==="task"||s==="on-hold"||s==="in-progress"||s==="review"||s==="done"||s==="cancelled"?{status:s}:{}:e==="schedule"?s==="backlog"||s==="expired"?{}:{scheduledDate:s}:{}}function HE(e){const n=e.runtimeMode==="local"&&e.isAuthenticated;return n?{actionable:n,status:e.workspaceSyncStatus,syncEnabledLabel:e.workspaceCloudSyncEnabled?"yes":"no",summary:e.workspaceSyncSummary,recommendedAction:e.workspaceSyncRecommendedAction,lastError:e.workspaceSyncError}:{actionable:n,status:"off",syncEnabledLabel:"no",summary:"Sign in to enable workspace sync controls on this device.",recommendedAction:"Sign in to manage workspace sync for this workspace.",lastError:"Sign in to enable workspace sync controls on this device."}}const nf="/api/taskforce/account/profile-summary",GE=9e4,vc=new Map;function eu(){return typeof performance<"u"?performance.now():Date.now()}function Lh(e,n){const r=String(e||"").trim();if(!r)return"";const s=String(n||"").trim();return s?`${r}::${s}`:r}function af(e,n){vc.delete(Lh(e,n?.identityKey))}async function VE(e,n){const r=String(e||"").trim(),s=Lh(e,n?.identityKey);if(!s||!r)return null;const o=n?.force===!0,d=Date.now(),i=vc.get(s);if(!o&&i?.payload!==void 0&&d-i.fetchedAt<GE)return Fn("account_profile_summary_cache_hit",{url:r,cacheKey:s,ageMs:d-i.fetchedAt}),i.payload;if(!o&&i?.promise)return Fn("account_profile_summary_request_reused",{url:r,cacheKey:s}),i.promise;const u=eu(),f=(async()=>{const k=await fetch(r,{method:"GET",credentials:"include"});if(!k.ok)throw new Error(String((await k.json().catch(()=>({})))?.error||"Failed to load account summary."));const S=await k.json().catch(()=>({}))||null;return vc.set(s,{payload:S,fetchedAt:Date.now(),promise:null}),Fn("account_profile_summary_loaded",{url:r,cacheKey:s,durationMs:Math.round(eu()-u),fromCache:!1}),S})().catch(k=>{const x=i?.payload??null;if(x)return vc.set(s,{payload:x,fetchedAt:i?.fetchedAt??Date.now(),promise:null}),Fn("account_profile_summary_failed",{url:r,cacheKey:s,durationMs:Math.round(eu()-u),error:k instanceof Error?k.message:String(k||"Unknown error"),returnedStale:!0}),x;throw vc.delete(s),Fn("account_profile_summary_failed",{url:r,cacheKey:s,durationMs:Math.round(eu()-u),error:k instanceof Error?k.message:String(k||"Unknown error"),returnedStale:!1}),k});return vc.set(s,{payload:i?.payload??null,fetchedAt:i?.fetchedAt??0,promise:f}),f}const Om="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMzY2LjY3Nzg2IgogICBoZWlnaHQ9IjMzMS4zMDkzMyIKICAgdmlld0JveD0iMCAwIDk3LjAxNjg1IDg3LjY1ODkyMyIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMSIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcwogICAgIGlkPSJkZWZzMSIgLz48ZwogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMwLjk2ODgxLC04NzIuMDY2NjgpIj48ZwogICAgICAgaWQ9ImcxLTctMS02LTItMS05IgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoNC45ODE1NDc5LDAsMCw0Ljk4NTU4MjIsLTYzNS4zODE5NiwxMzcuOTM1MTIpIj48cGF0aAogICAgICAgICBzdHlsZT0iZm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTkuNDgxOXB4O2xpbmUtaGVpZ2h0OjIuNTtmb250LWZhbWlseTonUnVzc28gT25lJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidSdXNzbyBPbmUgTWVkaXVtIEl0YWxpYyc7dGV4dC1hbGlnbjpjZW50ZXI7bGV0dGVyLXNwYWNpbmc6MHB4O3RleHQtYW5jaG9yOm1pZGRsZTtmaWxsOiNmZmZmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjEzNjA0O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZCIKICAgICAgICAgZD0ibSAxNDkuNDQwNjYsMTYxLjE5NTA1IGggLTMuNTA2NzQgdiAtMTAuOTA5ODYgaCAtNC4wOTEyIHYgLTIuNzI3NDcgaCAxMS42ODkxNCB2IDIuNzI3NDcgaCAtNC4wOTEyIHoiCiAgICAgICAgIGlkPSJ0ZXh0MS00LTMtMy0xLTAtMyIKICAgICAgICAgdHJhbnNmb3JtPSJza2V3WCgtMTUpIgogICAgICAgICBhcmlhLWxhYmVsPSJUIiAvPjxwYXRoCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOml0YWxpYztmb250LXdlaWdodDpib2xkO2ZvbnQtc2l6ZToxOS40ODE5cHg7bGluZS1oZWlnaHQ6Mi41O2ZvbnQtZmFtaWx5OidSdXNzbyBPbmUnOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246J1J1c3NvIE9uZSBNZWRpdW0gSXRhbGljJzt0ZXh0LWFsaWduOmVuZDtsZXR0ZXItc3BhY2luZzowcHg7dGV4dC1hbmNob3I6ZW5kO2ZpbGw6I2ZmOGEwMDtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmOGEwMDtzdHJva2Utd2lkdGg6MC42MTM2MDQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIgogICAgICAgICBkPSJtIDE1My41Mzg4OCwxNjQuNTI2NiBoIC0zLjUwNjc0IHYgLTEzLjYzNzMzIGggMTAuODEyNDUgdiAyLjcyNzQ2IGggLTcuMzA1NzEgdiAzLjIxNDUyIGggNS43NDcxNiB2IDIuNzI3NDYgaCAtNS43NDcxNiB6IgogICAgICAgICBpZD0idGV4dDEtOS04LTQtMy03LTItNyIKICAgICAgICAgdHJhbnNmb3JtPSJza2V3WCgtMTUpIgogICAgICAgICBhcmlhLWxhYmVsPSJGIiAvPjwvZz48L2c+PC9zdmc+Cg==",Bh="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMzY2LjY3Nzg5IgogICBoZWlnaHQ9IjMzMS4zMDkzMyIKICAgdmlld0JveD0iMCAwIDk3LjAxNjg1OCA4Ny42NTg5MjMiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzEiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnMKICAgICBpZD0iZGVmczEiIC8+PGcKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4Ni4xOTU2MywtNzgwLjY1NTczKSI+PGcKICAgICAgIGlkPSJnMS03LTEtNi0yLTEiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCg0Ljk4MTU0NzksMCwwLDQuOTg1NTgyMiwtNjkwLjYwODc4LDQ2LjUyNDE0OCkiPjxwYXRoCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOml0YWxpYztmb250LXdlaWdodDpib2xkO2ZvbnQtc2l6ZToxOS40ODE5cHg7bGluZS1oZWlnaHQ6Mi41O2ZvbnQtZmFtaWx5OidSdXNzbyBPbmUnOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246J1J1c3NvIE9uZSBNZWRpdW0gSXRhbGljJzt0ZXh0LWFsaWduOmNlbnRlcjtsZXR0ZXItc3BhY2luZzowcHg7dGV4dC1hbmNob3I6bWlkZGxlO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjYxMzYwNDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiCiAgICAgICAgIGQ9Im0gMTQ5LjQ0MDY2LDE2MS4xOTUwNSBoIC0zLjUwNjc0IHYgLTEwLjkwOTg2IGggLTQuMDkxMiB2IC0yLjcyNzQ3IGggMTEuNjg5MTQgdiAyLjcyNzQ3IGggLTQuMDkxMiB6IgogICAgICAgICBpZD0idGV4dDEtNC0zLTMtMS0wIgogICAgICAgICB0cmFuc2Zvcm09InNrZXdYKC0xNSkiCiAgICAgICAgIGFyaWEtbGFiZWw9IlQiIC8+PHBhdGgKICAgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjE5LjQ4MTlweDtsaW5lLWhlaWdodDoyLjU7Zm9udC1mYW1pbHk6J1J1c3NvIE9uZSc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonUnVzc28gT25lIE1lZGl1bSBJdGFsaWMnO3RleHQtYWxpZ246ZW5kO2xldHRlci1zcGFjaW5nOjBweDt0ZXh0LWFuY2hvcjplbmQ7ZmlsbDojZmY4YTAwO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmY4YTAwO3N0cm9rZS13aWR0aDowLjYxMzYwNDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiCiAgICAgICAgIGQ9Im0gMTUzLjUzODg4LDE2NC41MjY2IGggLTMuNTA2NzQgdiAtMTMuNjM3MzMgaCAxMC44MTI0NSB2IDIuNzI3NDYgaCAtNy4zMDU3MSB2IDMuMjE0NTIgaCA1Ljc0NzE2IHYgMi43Mjc0NiBoIC01Ljc0NzE2IHoiCiAgICAgICAgIGlkPSJ0ZXh0MS05LTgtNC0zLTctMiIKICAgICAgICAgdHJhbnNmb3JtPSJza2V3WCgtMTUpIgogICAgICAgICBhcmlhLWxhYmVsPSJGIiAvPjwvZz48L2c+PC9zdmc+Cg==",rf="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjEwMDAiPjxzdHlsZT4KICAgICNsaWdodC1pY29uIHsKICAgICAgZGlzcGxheTogaW5saW5lOwogICAgfQogICAgI2RhcmstaWNvbiB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAjbGlnaHQtaWNvbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAjZGFyay1pY29uIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICAgIH0KICAgIH0KICA8L3N0eWxlPjxnIGlkPSJsaWdodC1pY29uIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEwMDAiIGhlaWdodD0iMTAwMCI+PGc+PGcgdHJhbnNmb3JtPSJtYXRyaXgoMi43MjcxODkyNTA0ODkwMzI3LDAsMCwyLjcyNzE4OTI1MDQ4OTAzMjcsMCw0OC4yMjgzNzgzMTg2MzgxOSkiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSIzNjYuNjc3ODkiIGhlaWdodD0iMzMxLjMwOTMzIiB2aWV3Qm94PSIwIDAgOTcuMDE2ODU4IDg3LjY1ODkyMyIgaWQ9InN2ZzEiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzIGlkPSJkZWZzMSI+PC9kZWZzPjxnIGlkPSJsYXllcjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4Ni4xOTU2MywtNzgwLjY1NTczKSI+PGcgaWQ9ImcxLTctMS02LTItMSIgdHJhbnNmb3JtPSJtYXRyaXgoNC45ODE1NDc5LDAsMCw0Ljk4NTU4MjIsLTY5MC42MDg3OCw0Ni41MjQxNDgpIj48cGF0aCBzdHlsZT0iZm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTkuNDgxOXB4O2xpbmUtaGVpZ2h0OjIuNTtmb250LWZhbWlseTonUnVzc28gT25lJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidSdXNzbyBPbmUgTWVkaXVtIEl0YWxpYyc7dGV4dC1hbGlnbjpjZW50ZXI7bGV0dGVyLXNwYWNpbmc6MHB4O3RleHQtYW5jaG9yOm1pZGRsZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC42MTM2MDQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIiBkPSJtIDE0OS40NDA2NiwxNjEuMTk1MDUgaCAtMy41MDY3NCB2IC0xMC45MDk4NiBoIC00LjA5MTIgdiAtMi43Mjc0NyBoIDExLjY4OTE0IHYgMi43Mjc0NyBoIC00LjA5MTIgeiIgaWQ9InRleHQxLTQtMy0zLTEtMCIgdHJhbnNmb3JtPSJza2V3WCgtMTUpIiBhcmlhLWxhYmVsPSJUIj48L3BhdGg+PHBhdGggc3R5bGU9ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjE5LjQ4MTlweDtsaW5lLWhlaWdodDoyLjU7Zm9udC1mYW1pbHk6J1J1c3NvIE9uZSc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonUnVzc28gT25lIE1lZGl1bSBJdGFsaWMnO3RleHQtYWxpZ246ZW5kO2xldHRlci1zcGFjaW5nOjBweDt0ZXh0LWFuY2hvcjplbmQ7ZmlsbDojZmY4YTAwO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmY4YTAwO3N0cm9rZS13aWR0aDowLjYxMzYwNDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiIGQ9Im0gMTUzLjUzODg4LDE2NC41MjY2IGggLTMuNTA2NzQgdiAtMTMuNjM3MzMgaCAxMC44MTI0NSB2IDIuNzI3NDYgaCAtNy4zMDU3MSB2IDMuMjE0NTIgaCA1Ljc0NzE2IHYgMi43Mjc0NiBoIC01Ljc0NzE2IHoiIGlkPSJ0ZXh0MS05LTgtNC0zLTctMiIgdHJhbnNmb3JtPSJza2V3WCgtMTUpIiBhcmlhLWxhYmVsPSJGIj48L3BhdGg+PC9nPjwvZz48L3N2Zz48L2c+PC9nPjwvc3ZnPjwvZz48ZyBpZD0iZGFyay1pY29uIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEwMDAiIGhlaWdodD0iMTAwMCI+PGc+PGcgdHJhbnNmb3JtPSJtYXRyaXgoMi43MjcxODk0NzM2MTU4ODcsMCwwLDIuNzI3MTg5NDczNjE1ODg3LDAsNDguMjI4MzQxMzU2NjMzOTA1KSI+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjM2Ni42Nzc4NiIgaGVpZ2h0PSIzMzEuMzA5MzMiIHZpZXdCb3g9IjAgMCA5Ny4wMTY4NSA4Ny42NTg5MjMiIGlkPSJzdmcxIiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcyBpZD0iZGVmczEiPjwvZGVmcz48ZyBpZD0ibGF5ZXIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzAuOTY4ODEsLTg3Mi4wNjY2OCkiPjxnIGlkPSJnMS03LTEtNi0yLTEtOSIgdHJhbnNmb3JtPSJtYXRyaXgoNC45ODE1NDc5LDAsMCw0Ljk4NTU4MjIsLTYzNS4zODE5NiwxMzcuOTM1MTIpIj48cGF0aCBzdHlsZT0iZm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTkuNDgxOXB4O2xpbmUtaGVpZ2h0OjIuNTtmb250LWZhbWlseTonUnVzc28gT25lJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidSdXNzbyBPbmUgTWVkaXVtIEl0YWxpYyc7dGV4dC1hbGlnbjpjZW50ZXI7bGV0dGVyLXNwYWNpbmc6MHB4O3RleHQtYW5jaG9yOm1pZGRsZTtmaWxsOiNmZmZmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjEzNjA0O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZCIgZD0ibSAxNDkuNDQwNjYsMTYxLjE5NTA1IGggLTMuNTA2NzQgdiAtMTAuOTA5ODYgaCAtNC4wOTEyIHYgLTIuNzI3NDcgaCAxMS42ODkxNCB2IDIuNzI3NDcgaCAtNC4wOTEyIHoiIGlkPSJ0ZXh0MS00LTMtMy0xLTAtMyIgdHJhbnNmb3JtPSJza2V3WCgtMTUpIiBhcmlhLWxhYmVsPSJUIj48L3BhdGg+PHBhdGggc3R5bGU9ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjE5LjQ4MTlweDtsaW5lLWhlaWdodDoyLjU7Zm9udC1mYW1pbHk6J1J1c3NvIE9uZSc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonUnVzc28gT25lIE1lZGl1bSBJdGFsaWMnO3RleHQtYWxpZ246ZW5kO2xldHRlci1zcGFjaW5nOjBweDt0ZXh0LWFuY2hvcjplbmQ7ZmlsbDojZmY4YTAwO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmY4YTAwO3N0cm9rZS13aWR0aDowLjYxMzYwNDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiIGQ9Im0gMTUzLjUzODg4LDE2NC41MjY2IGggLTMuNTA2NzQgdiAtMTMuNjM3MzMgaCAxMC44MTI0NSB2IDIuNzI3NDYgaCAtNy4zMDU3MSB2IDMuMjE0NTIgaCA1Ljc0NzE2IHYgMi43Mjc0NiBoIC01Ljc0NzE2IHoiIGlkPSJ0ZXh0MS05LTgtNC0zLTctMi03IiB0cmFuc2Zvcm09InNrZXdYKC0xNSkiIGFyaWEtbGFiZWw9IkYiPjwvcGF0aD48L2c+PC9nPjwvc3ZnPjwvZz48L2c+PC9zdmc+PC9nPjwvc3ZnPg==";function ZE({projectName:e,currentWorkspaceId:n,brandLabel:r="TaskForce",runtimeMode:s="local",theme:o=lu,meta:d,actions:i}){const u=Lf(o)?Bh:Om,f=String(e||"").trim(),k=String(n||"").trim().toLowerCase(),x=!!(f&&(s!=="cloud"||k&&k!=="default"));return t.jsxs("div",{className:`${m.header} ${sn.standaloneHeader}`,children:[t.jsxs("div",{className:`${m.headerTitle} ${sn.standaloneTitle}`,children:[t.jsx("img",{src:u,alt:"Taskforce Logo",className:m.brandIcon,onError:S=>{const v=S.currentTarget;v.src!==rf?v.src=rf:v.style.display="none"}}),t.jsx("span",{children:r}),s==="cloud"&&t.jsx("span",{className:m.brandCloudSuffix,children:"HQ"}),x&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:m.projectSlash,children:"/"}),t.jsx("span",{className:m.projectName,title:n?`Workspace ID: ${n}`:void 0,children:f})]}),d]}),t.jsx("div",{className:m.headerActions,style:{gap:"16px"},children:i})]})}function qE({value:e,placeholder:n,active:r=!1,onChange:s,onClear:o,clearTitle:d}){return t.jsxs("div",{className:m.searchContainer,style:{width:"240px"},children:[t.jsx(Ag,{size:16,className:m.searchIcon}),t.jsx("input",{type:"text",className:`${m.searchInput} ${r?m.searchActive:""}`,placeholder:n,value:e,onChange:i=>s(i.target.value)}),e&&o&&t.jsx("button",{className:m.clearSearchBtn,onClick:o,title:d,children:t.jsx("span",{"aria-hidden":"true",children:"×"})})]})}function sf({label:e,value:n,options:r,onChange:s,trailingAction:o,width:d}){return t.jsxs("div",{className:m.groupByContainer,style:d?{width:d}:void 0,children:[t.jsx("span",{className:m.groupByLabel,children:e}),t.jsx("select",{className:`${m.select} ${m.groupBySelect}`,value:n,onChange:i=>s(i.target.value),children:r.map(i=>t.jsx("option",{value:i.value,children:i.label},String(i.value)))}),o]})}function wm({actions:e}){return t.jsx(t.Fragment,{children:e.map(n=>t.jsx("button",{className:`tf-control-icon ${n.active?"tf-control-icon-active":""} ${n.className||""}`.trim(),onClick:n.onClick,title:n.title,disabled:n.disabled,"aria-disabled":n.ariaDisabled,children:n.icon},n.key))})}function of(){return t.jsx("div",{className:m.headerDivider})}function KE({icon:e,label:n,onClick:r,disabled:s=!1}){return t.jsxs("button",{className:m.primaryUpdateBtn,onClick:r,disabled:s,children:[e," ",n]})}function sp({children:e}){return t.jsx("div",{className:m.filterToolbar,style:{padding:"8px 24px",borderBottom:"1px solid var(--border-primary)",background:"var(--bg-secondary)",boxShadow:"0 4px 18px rgba(8, 10, 24, 0.12)",display:"flex",alignItems:"center",gap:"12px",flexWrap:"wrap",position:"relative",zIndex:50},children:e})}function YE(){return t.jsx(sp,{children:t.jsx("div",{"aria-hidden":"true",style:{minHeight:"32px",flex:1}})})}function JE({categoryFilterOptions:e,typeFilterOptions:n,priorities:r,taxonomyDisplayLabels:s,filterCategories:o,setFilterCategories:d,filterTypes:i,setFilterTypes:u,filterPriorities:f,setFilterPriorities:k,filterStatus:x,setFilterStatus:S,filterAssignees:v,setFilterAssignees:g,assigneeOptions:w,initiativeFilterOptions:I=[],selectedInitiativeId:b="",setSelectedInitiativeId:N=()=>{},workstreamFilterOptions:W=[],selectedWorkstreamId:M="",setSelectedWorkstreamId:oe=()=>{},taskScope:te,setTaskScope:ie,showArchive:T,setShowArchive:ve,fetchArchive:O,onDeleteAllDeleted:J,clearFilters:le}){return t.jsxs(t.Fragment,{children:[t.jsx(xh,{}),t.jsx(Ii,{label:s?.category||De("standalone.categoryLabel"),options:e,selected:o,onChange:ge=>d(ge),variant:"value"}),t.jsx(Ii,{label:s?.type||De("standalone.typeLabel"),options:n,selected:i,onChange:ge=>u(ge),variant:"value"}),t.jsx(Ii,{label:s?.priority||De("standalone.priorityLabel"),options:r,selected:f,onChange:ge=>k(ge),variant:"value"}),t.jsx(Ii,{label:De("standalone.statusLabel"),options:Qs,selected:x,onChange:ge=>S(ge),variant:"value"}),t.jsx(Ii,{label:De("standalone.assigneeLabel"),options:w,selected:v,onChange:ge=>g(ge),variant:"value"}),t.jsx("div",{className:m.headerDivider,style:{height:"16px",margin:"0 8px"}}),t.jsx(Jp,{label:"Initiative",options:I,selected:b,onChange:N,allLabel:"All Initiatives",title:"Filter by initiative"}),t.jsx(Jp,{label:"Workstream",options:W,selected:M,onChange:oe,allLabel:"All Workstreams",title:"Filter by workstream"}),t.jsx(Ch,{scope:te,onScopeChange:ge=>{ie(ge),ge==="archived"?(ve(!0),O()):T&&ve(!1)},className:m.groupByContainer,labelClassName:m.groupByLabel}),t.jsx("div",{style:{flex:1}}),te==="deleted"&&J&&t.jsx(Ah,{onClick:J,className:`${m.bulkArchiveBtn} ${m.taskToolbarAction} ${m.bulkDeleteBtn}`,title:"Empty trash",children:"Empty Trash"}),t.jsx(_h,{onClick:le})]})}function XE(e){return t.jsx(sp,{children:t.jsx(JE,{...e})})}const su=[{value:"implementation-plan",label:"Plans"},{value:"review",label:"Reviews"},{value:"walkthrough",label:"Walkthroughs"},{value:"planning",label:"Planning"},{value:"other",label:"Other"}],ou=[{value:"attached",label:"Attached"},{value:"unattached",label:"Unattached"}];function QE({typeFilters:e,setTypeFilters:n,attachmentFilters:r,setAttachmentFilters:s,clearFilters:o}){return t.jsxs(sp,{children:[t.jsx(xh,{}),t.jsx(Ii,{label:"Attachment",options:ou,selected:r,onChange:d=>s(d),variant:"value"}),t.jsx(Ii,{label:"Type",options:su,selected:e,onChange:d=>n(d),variant:"value"}),t.jsx("div",{style:{flex:1}}),t.jsx(_h,{onClick:o})]})}const eP="_drawerBody_126ut_1",tP="_paneShell_126ut_9",nP="_collapsedPaneShell_126ut_18",aP="_collapsedPaneHeader_126ut_27",rP="_collapsedPaneLabel_126ut_39",sP="_treePane_126ut_49",oP="_treePaneSplit_126ut_59",iP="_detailPane_126ut_63",cP="_paneHeader_126ut_73",lP="_paneHeaderLabel_126ut_87",dP="_paneContent_126ut_96",uP="_sectionTitle_126ut_105",mP="_sectionHeaderRow_126ut_113",pP="_sectionGroup_126ut_120",fP="_treeList_126ut_145",hP="_treeChildren_126ut_151",gP="_treeRow_126ut_159",yP="_treeRowDetailOpen_126ut_171",vP="_treeRowDropReady_126ut_177",kP="_treeRowDropActive_126ut_181",SP="_treeRowDropMode_126ut_187",wP="_treeChevron_126ut_187",bP="_rowButton_126ut_188",xP="_detailsButton_126ut_189",_P="_treeRowDragging_126ut_193",CP="_rowContent_126ut_234",AP="_rowTopRow_126ut_244",TP="_referenceBadgeButton_126ut_253",IP="_referenceBadgeStatic_126ut_259",NP="_rowTitle_126ut_280",jP="_rowMeta_126ut_294",RP="_detailsButtonActive_126ut_322",DP="_unlinkZone_126ut_329",EP="_unlinkZoneActive_126ut_340",PP="_emptyPanel_126ut_346",MP="_emptyPanelTitle_126ut_355",LP="_emptyPanelText_126ut_361",BP="_sectionNote_126ut_367",WP="_detailHero_126ut_374",FP="_detailReferenceRow_126ut_381",OP="_detailTitle_126ut_386",$P="_detailDescription_126ut_393",UP="_detailActionRow_126ut_404",zP="_metricGrid_126ut_411",HP="_metricCard_126ut_418",GP="_editorCard_126ut_423",VP="_editorField_126ut_430",ZP="_editorLabel_126ut_436",qP="_editorHint_126ut_442",KP="_editorSubActions_126ut_447",YP="_editorActions_126ut_452",JP="_metricValue_126ut_458",XP="_metricLabel_126ut_465",QP="_progressTrack_126ut_472",eM="_progressFill_126ut_480",tM="_listCard_126ut_486",nM="_sectionDropReady_126ut_495",aM="_sectionDropActive_126ut_500",rM="_sectionDropMode_126ut_506",sM="_attachReferenceRow_126ut_510",oM="_listItem_126ut_521",iM="_listItemButton_126ut_530",cM="_detailCardButton_126ut_539",lM="_listItemText_126ut_547",dM="_listItemTitle_126ut_554",uM="_listItemMeta_126ut_568",mM="_detailChildCard_126ut_573",pM="_detailChildCardTopRow_126ut_585",fM="_taskStatusIcon_126ut_594",Ae={drawerBody:eP,paneShell:tP,collapsedPaneShell:nP,collapsedPaneHeader:aP,collapsedPaneLabel:rP,treePane:sP,treePaneSplit:oP,detailPane:iP,paneHeader:cP,paneHeaderLabel:lP,paneContent:dP,sectionTitle:uP,sectionHeaderRow:mP,sectionGroup:pP,treeList:fP,treeChildren:hP,treeRow:gP,treeRowDetailOpen:yP,treeRowDropReady:vP,treeRowDropActive:kP,treeRowDropMode:SP,treeChevron:wP,rowButton:bP,detailsButton:xP,treeRowDragging:_P,rowContent:CP,rowTopRow:AP,referenceBadgeButton:TP,referenceBadgeStatic:IP,rowTitle:NP,rowMeta:jP,detailsButtonActive:RP,unlinkZone:DP,unlinkZoneActive:EP,emptyPanel:PP,emptyPanelTitle:MP,emptyPanelText:LP,sectionNote:BP,detailHero:WP,detailReferenceRow:FP,detailTitle:OP,detailDescription:$P,detailActionRow:UP,metricGrid:zP,metricCard:HP,editorCard:GP,editorField:VP,editorLabel:ZP,editorHint:qP,editorSubActions:KP,editorActions:YP,metricValue:JP,metricLabel:XP,progressTrack:QP,progressFill:eM,listCard:tM,sectionDropReady:nM,sectionDropActive:aM,sectionDropMode:rM,attachReferenceRow:sM,listItem:oM,listItemButton:iM,detailCardButton:cM,listItemText:lM,listItemTitle:dM,listItemMeta:uM,detailChildCard:mM,detailChildCardTopRow:pM,taskStatusIcon:fM},Wl=332,_s=392,bm=56;function Wh(e,n,r,s,o){return(e?bm:Wl)+(n?r?bm:_s:0)+(s?o?bm:_s:0)}function xm(e){return e?e.split(/[-_\s]+/g).filter(Boolean).map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join(" "):"No status"}function iu({label:e,entityType:n,interactive:r=!0}){const[s,o]=pt.useState(!1),d=pt.useCallback(async i=>{i.stopPropagation();try{await navigator.clipboard.writeText(e),o(!0),window.setTimeout(()=>o(!1),1200)}catch{o(!1)}},[e]);return r?t.jsx(mh,{copied:s,label:e,onClick:d,title:`Copy ${n} reference`,ariaLabel:s?`Copied ${n} reference`:`Copy ${n} reference`,className:Ae.referenceBadgeButton,children:e}):t.jsx("span",{className:`${m.taskIdBadge} ${Ae.referenceBadgeStatic}`.trim(),children:t.jsx("span",{children:e})})}function _m({rowId:e,rowType:n,referenceLabel:r,title:s,meta:o,active:d,detailOpen:i=!1,canExpand:u=!1,expanded:f=!1,onToggleExpand:k,onToggleScope:x,onToggleDetails:S}){const{active:v}=wu(),g=String(v?.data?.current?.type||""),w=n==="workstream"&&g==="task-card",I=n==="initiative"&&g==="planning-workstream",b=n==="workstream"?"planning-workstream-target":"planning-initiative-target",{setNodeRef:N,isOver:W}=Kl({id:`${b}:${e}`,data:n==="workstream"?{type:b,workstreamId:e}:{type:b,initiativeId:e}}),M=n==="workstream",{attributes:oe,listeners:te,setNodeRef:ie,transform:T,isDragging:ve}=Xg({id:`planning-workstream:${e}`,data:{type:"planning-workstream",workstreamId:e},disabled:!M}),O=M&&T?{transform:zm.Translate.toString(T)}:void 0,J=w||I;return t.jsxs("div",{ref:N,style:O,className:`${Ae.treeRow} ${i?Ae.treeRowDetailOpen:""} ${J?Ae.treeRowDropReady:""} ${W?Ae.treeRowDropActive:""} ${ve?Ae.treeRowDragging:""} ${J?Ae.treeRowDropMode:""}`,children:[u?t.jsx("button",{type:"button",className:Ae.treeChevron,onClick:k,title:f?"Collapse workstreams":"Expand workstreams",children:f?t.jsx(bf,{size:15}):t.jsx(Tg,{size:15})}):t.jsx("span",{className:Ae.treeChevron,"aria-hidden":"true",children:t.jsx(Ei,{size:14})}),t.jsxs("div",{className:Ae.rowContent,children:[t.jsxs("div",{className:Ae.rowTopRow,children:[r?t.jsx(iu,{label:r,entityType:n}):t.jsx("span",{"aria-hidden":"true"}),t.jsx("button",{type:"button",className:`${Ae.detailsButton} ${d?Ae.detailsButtonActive:""}`,onClick:x,title:d?"Clear board scope":"Scope board to this item",children:t.jsx(xf,{size:14})})]}),t.jsxs("button",{type:"button",ref:M?ie:void 0,className:Ae.rowButton,onClick:S,...M?oe:{},...M?te:{},children:[t.jsx("span",{className:Ae.rowTitle,children:s}),t.jsx("span",{className:Ae.rowMeta,children:o})]})]})]})}function Cm({label:e,onExpand:n}){return t.jsx("div",{className:`${Ae.paneShell} ${Ae.collapsedPaneShell}`.trim(),children:t.jsxs("div",{className:Ae.collapsedPaneHeader,children:[t.jsx("button",{type:"button",className:"tf-control-icon",onClick:n,title:`Expand ${e}`,children:t.jsx(Ei,{size:16})}),t.jsx("span",{className:Ae.collapsedPaneLabel,children:e})]})})}function hM({targetType:e,label:n}){const{active:r}=wu(),s=String(r?.data?.current?.type||""),o=e==="task"&&s==="task-card"||e==="workstream"&&s==="planning-workstream",{setNodeRef:d,isOver:i}=Kl({id:e==="task"?"planning-task-unlink":"planning-workstream-unlink",data:{type:e==="task"?"planning-task-unlink":"planning-workstream-unlink"}});return o?t.jsx("div",{ref:d,className:`${Ae.unlinkZone} ${i?Ae.unlinkZoneActive:""}`,children:n}):null}function gM({initiatives:e,standaloneWorkstreams:n,activeInitiativeId:r,activeWorkstreamId:s,expandedInitiativeIds:o,detail:d,secondaryPane:i,onCreateInitiative:u,onCreateWorkstream:f,onToggleInitiative:k,onSelectInitiative:x,onSelectWorkstream:S,onOpenInitiativeDetails:v,onOpenWorkstreamDetails:g}){const{active:w}=wu(),b=String(w?.data?.current?.type||"")==="planning-workstream",{setNodeRef:N,isOver:W}=Kl({id:"planning-workstream-unlink",data:{type:"planning-workstream-unlink"}});return t.jsxs(t.Fragment,{children:[t.jsx(hM,{targetType:"task",label:"Drop here to make task standalone"}),t.jsxs("div",{className:Ae.sectionGroup,children:[t.jsxs("div",{className:Ae.sectionHeaderRow,children:[t.jsx("div",{className:Ae.sectionTitle,children:"Initiatives"}),t.jsx("button",{type:"button",className:"tf-control-icon",title:"Create initiative","aria-label":"Create initiative",onClick:u,children:t.jsx(is,{size:15})})]}),t.jsx("div",{className:Ae.treeList,children:e.length===0?t.jsxs("div",{className:Ae.emptyPanel,children:[t.jsx("div",{className:Ae.emptyPanelTitle,children:"No initiatives yet"}),t.jsxs("div",{className:Ae.emptyPanelText,children:["Initiatives give larger efforts a clear home without crowding the task board. Use the ",t.jsx("code",{children:"+"})," action above to create the first one."]})]}):e.map(M=>{const oe=o.has(M.id),te=`${M.workstreamCount||0} workstreams • ${M.taskCount} tasks${M.isArchived?" • archived":""}`;return t.jsxs("div",{children:[t.jsx(_m,{rowId:M.id,rowType:"initiative",referenceLabel:os(M),title:M.title,meta:te,active:r===M.id&&!s,detailOpen:d?.type==="initiative"&&d.item.id===M.id,canExpand:M.workstreams.length>0,expanded:oe,onToggleExpand:()=>k(M.id),onToggleScope:()=>x(M.id),onToggleDetails:()=>{if(d?.type==="initiative"&&d.item.id===M.id){v("");return}v(M.id)}}),oe&&M.workstreams.length>0&&t.jsx("div",{className:Ae.treeChildren,children:M.workstreams.map(ie=>t.jsx(_m,{rowId:ie.id,rowType:"workstream",referenceLabel:Xs(ie),title:ie.title,meta:`${ie.taskCount} tasks • ${ie.progressPercent}% complete${ie.isArchived?" • archived":""}`,active:s===ie.id,detailOpen:d?.type==="workstream"&&d.item.id===ie.id||i?.kind==="detail"&&i.detail.item.id===ie.id,onToggleScope:()=>S(ie.id,M.id),onToggleDetails:()=>{if(i?.kind==="detail"&&i.detail.item.id===ie.id){g("");return}if(d?.type==="workstream"&&d.item.id===ie.id){g("");return}g(ie.id)}},ie.id))})]},M.id)})})]}),t.jsxs("div",{ref:N,className:`${Ae.sectionGroup} ${b?Ae.sectionDropReady:""} ${W?Ae.sectionDropActive:""}`.trim(),children:[t.jsxs("div",{className:Ae.sectionHeaderRow,children:[t.jsx("div",{className:Ae.sectionTitle,children:"Workstreams"}),t.jsx("button",{type:"button",className:"tf-control-icon",title:"Create workstream","aria-label":"Create workstream",onClick:f,children:t.jsx(is,{size:15})})]}),t.jsx("div",{className:Ae.treeList,children:n.length===0?t.jsxs("div",{className:Ae.emptyPanel,children:[t.jsx("div",{className:Ae.emptyPanelTitle,children:"No standalone workstreams yet"}),t.jsxs("div",{className:Ae.emptyPanelText,children:["Smaller projects can still use workstreams without needing initiative-level structure. Use the ",t.jsx("code",{children:"+"})," action above to add one."]})]}):n.map(M=>t.jsx(_m,{rowId:M.id,rowType:"workstream",referenceLabel:Xs(M),title:M.title,meta:`${M.taskCount} tasks • ${M.progressPercent}% complete${M.isArchived?" • archived":""}`,active:s===M.id,detailOpen:d?.type==="workstream"&&d.item.id===M.id||i?.kind==="detail"&&i.detail.item.id===M.id,onToggleScope:()=>S(M.id,null),onToggleDetails:()=>{if(d?.type==="workstream"&&d.item.id===M.id){g("");return}g(M.id)}},M.id))})]})]})}function cf({detail:e,onOpenNestedWorkstreamDetails:n,onEdit:r,onArchive:s,onUnarchive:o,onCreateTaskInWorkstream:d,onCreateWorkstreamInInitiative:i,onOpenTaskById:u,onAttachTaskToWorkstreamByReference:f,onAttachWorkstreamToInitiativeByReference:k}){const[x,S]=pt.useState(""),{active:v}=wu(),g=String(v?.data?.current?.type||""),w=e.type==="workstream"&&g==="task-card",I=e.type==="initiative"&&g==="planning-workstream",b=e.type==="initiative"?"planning-initiative-target":"planning-workstream-target",{setNodeRef:N,isOver:W}=Kl({id:`${b}:detail:${e.item.id}`,data:e.type==="initiative"?{type:b,initiativeId:e.item.id}:{type:b,workstreamId:e.item.id}}),M=e.type==="initiative"?"Workstreams":"Tasks",oe=e.type==="initiative"?e.item.workstreams:[],te=e.type==="initiative"?"Initiative":"Workstream",ie=e.type==="initiative"?os(e.item):Xs(e.item);return pt.useEffect(()=>{S("")},[e.item.id,e.type]),t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:Ae.detailHero,children:[ie?t.jsx("div",{className:Ae.detailReferenceRow,children:t.jsx(iu,{label:ie,entityType:e.type})}):null,t.jsx("h3",{className:Ae.detailTitle,children:e.item.title}),t.jsx("p",{className:Ae.detailDescription,children:e.item.description?.trim()||(e.type==="initiative"?"A top-level planning container that groups related workstreams.":"A coordination lane that groups related tasks and keeps execution organized.")}),t.jsx("div",{className:Ae.progressTrack,"aria-label":`${e.item.progressPercent}% complete`,children:t.jsx("div",{className:Ae.progressFill,style:{width:`${e.item.progressPercent}%`}})}),t.jsxs("div",{className:Ae.detailActionRow,children:[t.jsx("button",{type:"button",className:m.secondaryHeaderBtn,onClick:r,children:t.jsxs("span",{children:["Edit ",te]})}),e.item.isArchived?t.jsx("button",{type:"button",className:m.secondaryHeaderBtn,onClick:o,children:t.jsx("span",{children:"Unarchive"})}):t.jsx("button",{type:"button",className:m.secondaryHeaderBtn,onClick:s,children:t.jsx("span",{children:"Archive"})})]})]}),t.jsxs("div",{className:Ae.metricGrid,children:[t.jsxs("div",{className:Ae.metricCard,children:[t.jsx("span",{className:Ae.metricValue,children:e.item.taskCount}),t.jsx("span",{className:Ae.metricLabel,children:"Tasks in scope"})]}),t.jsxs("div",{className:Ae.metricCard,children:[t.jsx("span",{className:Ae.metricValue,children:e.item.completedTaskCount}),t.jsx("span",{className:Ae.metricLabel,children:"Done / terminal"})]}),t.jsxs("div",{className:Ae.metricCard,children:[t.jsx("span",{className:Ae.metricValue,children:e.item.ownerLabel||"Unassigned"}),t.jsx("span",{className:Ae.metricLabel,children:"Owner"})]}),t.jsxs("div",{className:Ae.metricCard,children:[t.jsx("span",{className:Ae.metricValue,children:(e.item.commentCount||0)+(e.item.attachmentCount||0)}),t.jsx("span",{className:Ae.metricLabel,children:"Context items"})]})]}),t.jsxs("div",{ref:N,className:`${Ae.listCard} ${w||I?Ae.sectionDropReady:""} ${W?Ae.sectionDropActive:""} ${w||I?Ae.sectionDropMode:""}`.trim(),children:[t.jsxs("div",{className:Ae.sectionHeaderRow,children:[t.jsx("div",{className:Ae.sectionTitle,children:M}),e.type==="initiative"?t.jsx("button",{type:"button",className:"tf-control-icon",title:"Create workstream in this initiative","aria-label":"Create workstream in this initiative",onClick:()=>i?.(e.item.id),children:t.jsx(is,{size:15})}):t.jsx("button",{type:"button",className:"tf-control-icon",title:"Create task in this workstream","aria-label":"Create task in this workstream",onClick:()=>d?.(e.item.id),children:t.jsx(is,{size:15})})]}),t.jsxs("div",{className:Ae.attachReferenceRow,children:[t.jsx("input",{type:"text",className:m.input,placeholder:e.type==="initiative"?"Paste workstream reference (e.g. WS-123)":"Paste task reference (e.g. T-123)",value:x,onChange:T=>S(T.target.value)}),t.jsx("button",{type:"button",className:m.secondaryHeaderBtn,onClick:()=>{const T=x.trim();T&&(e.type==="initiative"?k?.(e.item.id,T):f?.(e.item.id,T),S(""))},children:"Attach"})]}),e.type==="initiative"?oe.length>0?oe.map(T=>t.jsx("button",{type:"button",className:`${Ae.listItemButton} ${Ae.detailCardButton}`.trim(),onClick:()=>n?.(T.id),children:t.jsxs("div",{className:`${Ae.listItem} ${Ae.detailChildCard}`.trim(),children:[t.jsx("div",{className:Ae.detailChildCardTopRow,children:T.referenceNumber?t.jsx(iu,{label:Xs(T),entityType:"workstream"}):t.jsx("span",{"aria-hidden":"true"})}),t.jsxs("div",{className:Ae.listItemText,children:[t.jsx("span",{className:Ae.listItemTitle,children:T.title}),t.jsxs("span",{className:Ae.listItemMeta,children:[T.taskCount," tasks • ",T.progressPercent,"% complete"]})]})]})},T.id)):t.jsxs("div",{className:Ae.emptyPanel,children:[t.jsx("div",{className:Ae.emptyPanelTitle,children:"No workstreams yet"}),t.jsx("div",{className:Ae.emptyPanelText,children:"Add the first workstream to break the initiative into clearer lanes of execution."})]}):e.item.tasks&&e.item.tasks.length>0?[...e.item.tasks].sort((T,ve)=>{const O=$l(T.status).value==="done",J=$l(ve.status).value==="done";return O===J?0:O?1:-1}).map(T=>{const ve=T.referenceNumber?`T-${T.referenceNumber}`:"",O=$l(T.status),J=Pi[O.icon||"Square"],le=da(O.color)||"var(--text-secondary)";return t.jsx("button",{type:"button",className:`${Ae.listItemButton} ${Ae.detailCardButton}`.trim(),onClick:()=>u?.(T.id),children:t.jsxs("div",{className:`${Ae.listItem} ${Ae.detailChildCard}`.trim(),children:[t.jsxs("div",{className:Ae.detailChildCardTopRow,children:[ve?t.jsx(iu,{label:ve,entityType:"task"}):t.jsx("span",{"aria-hidden":"true"}),t.jsx("span",{className:Ae.taskStatusIcon,style:{color:le},"aria-label":O.shortLabel||xm(T.status),title:O.shortLabel||xm(T.status),children:J?t.jsx(J,{size:18,strokeWidth:2.4}):null})]}),t.jsxs("div",{className:Ae.listItemText,children:[t.jsx("span",{className:Ae.listItemTitle,children:T.title}),t.jsx("span",{className:Ae.listItemMeta,children:xm(T.status)})]})]})},T.id)}):t.jsxs("div",{className:Ae.sectionNote,children:["No tasks are linked to this workstream yet. Use the ",t.jsx("code",{children:"+"})," action above to add the first one."]})]}),t.jsxs("div",{className:Ae.listCard,children:[t.jsx("div",{className:Ae.sectionTitle,children:"Context"}),t.jsx("div",{className:Ae.sectionNote,children:"Comments, attachments, and planning notes can live here without pushing that context down into task cards."})]})]})}function lf({editor:e,draftTitle:n,draftDescription:r,draftOwner:s,draftInitiativeId:o,assigneeOptions:d,draftInitiativeSummary:i,onChangeDraftTitle:u,onChangeDraftDescription:f,onChangeDraftOwner:k,onChangeDraftInitiativeId:x,onCancel:S,onSubmit:v,onAssignInitiativeToWorkstream:g}){const w=e.entityType==="initiative"?"Initiative":"Workstream",I=e.mode==="create"?`Create ${w}`:`Save ${w}`;return t.jsx(t.Fragment,{children:t.jsxs("div",{className:Ae.editorCard,children:[t.jsxs("div",{className:Ae.editorField,children:[t.jsx("label",{className:Ae.editorLabel,children:"Title"}),t.jsx("input",{className:m.input,value:n,onChange:b=>u(b.target.value),placeholder:e.entityType==="initiative"?"Q3 Product Launch":"Content Production"})]}),t.jsxs("div",{className:Ae.editorField,children:[t.jsx("label",{className:Ae.editorLabel,children:"Description"}),t.jsx("textarea",{className:m.textarea,value:r,onChange:b=>f(b.target.value),placeholder:e.entityType==="initiative"?"Describe the broader outcome this initiative is meant to achieve.":"Describe the lane of work this workstream will coordinate.",rows:5})]}),e.entityType==="workstream"&&t.jsxs("div",{className:Ae.editorField,children:[t.jsx("label",{className:Ae.editorLabel,children:"Initiative"}),i&&t.jsxs("div",{className:Ae.editorHint,children:["Current: ",i.title]}),t.jsxs("div",{className:m.pathInputGroup,children:[t.jsx("input",{type:"text",className:m.input,placeholder:"Paste initiative reference (e.g. IN-123)",value:o,onChange:b=>x(b.target.value)}),e.mode==="edit"&&t.jsx("button",{type:"button",className:m.secondaryHeaderBtn,onClick:()=>g?.(e.targetId),children:"Set Initiative"})]}),e.mode==="edit"&&t.jsx("div",{className:Ae.editorSubActions,children:t.jsx("button",{type:"button",className:m.secondaryHeaderBtn,onClick:()=>g?.(e.targetId,null),children:"Clear Initiative"})})]}),t.jsxs("div",{className:Ae.editorField,children:[t.jsx("label",{className:Ae.editorLabel,children:"Owner"}),t.jsxs("select",{className:`${m.select} ${m.groupBySelect}`,value:s,onChange:b=>k(b.target.value),children:[t.jsx("option",{value:"",children:"Unassigned"}),d.map(b=>t.jsx("option",{value:b.value,children:b.label},b.value))]})]}),t.jsxs("div",{className:Ae.editorActions,children:[t.jsx("button",{type:"button",className:m.secondaryHeaderBtn,onClick:S,children:"Cancel"}),t.jsx("button",{type:"button",className:m.primaryUpdateBtn,onClick:v,children:I})]})]})})}function yM({open:e,leftOffset:n=0,initiatives:r,standaloneWorkstreams:s,activeInitiativeId:o,activeWorkstreamId:d,expandedInitiativeIds:i,detail:u,editor:f,secondaryPane:k,assigneeOptions:x,draftInitiativeSummary:S,draftTitle:v,draftDescription:g,draftOwner:w,draftInitiativeId:I,onChangeDraftTitle:b,onChangeDraftDescription:N,onChangeDraftOwner:W,onChangeDraftInitiativeId:M,onCollapseTreePane:oe,onExpandTreePane:te,onCollapsePrimaryPane:ie,onExpandPrimaryPane:T,onCollapseSecondaryPane:ve,onExpandSecondaryPane:O,onBackFromSecondary:J,treeCollapsed:le,primaryCollapsed:ge,secondaryCollapsed:X,onCancelEditor:R,onSubmitEditor:U,onCreateInitiative:Z,onCreateWorkstream:he,onToggleInitiative:Q,onSelectInitiative:we,onSelectWorkstream:ke,onOpenInitiativeDetails:be,onOpenWorkstreamDetails:me,onOpenNestedWorkstreamDetails:Re,onEditInitiative:Te,onEditWorkstream:se,onArchiveInitiative:F,onUnarchiveInitiative:D,onArchiveWorkstream:E,onUnarchiveWorkstream:y,onCreateTaskInWorkstream:C,onCreateWorkstreamInInitiative:P,onAssignInitiativeToWorkstream:j,onOpenTaskById:ae,onAttachTaskToWorkstreamByReference:L,onAttachWorkstreamToInitiativeByReference:de}){const K=!!(u||f),ue=!!k,B=Wh(le,K,ge,ue,X),re=f?f.entityType==="initiative"?f.mode==="create"?"New Initiative":"Edit Initiative":f.mode==="create"?"New Workstream":"Edit Workstream":u?.type==="initiative"?"Initiative":"Workstream",xe=k?.kind==="editor"?k.editor.mode==="create"?"New Workstream":"Edit Workstream":"Workstream";return t.jsx("aside",{style:{position:"absolute",top:0,left:e?`${n}px`:`${n-B-24}px`,bottom:0,width:`${B}px`,minWidth:`${B}px`,borderRight:"1px solid var(--border-color)",background:"var(--bg-secondary)",boxSizing:"border-box",display:"flex",flexDirection:"column",zIndex:35,overflow:"hidden",pointerEvents:e?"auto":"none",transition:"left 220ms cubic-bezier(0.4, 0, 0.2, 1)",willChange:"left"},children:t.jsxs("div",{className:Ae.drawerBody,children:[le?t.jsx(Cm,{label:"Planning",onExpand:te}):t.jsxs("div",{className:`${Ae.paneShell} ${m.appScrollbar} tf-scrollbar ${Ae.treePane} ${K&&!ge?Ae.treePaneSplit:""}`.trim(),style:{flex:`0 0 ${Wl}px`,width:`${Wl}px`,minWidth:`${Wl}px`,maxWidth:`${Wl}px`},children:[t.jsxs("div",{className:Ae.paneHeader,children:[t.jsx("span",{className:Ae.paneHeaderLabel,children:"Planning"}),t.jsx("button",{type:"button",className:"tf-control-icon",onClick:oe,children:t.jsx(xc,{size:16})})]}),t.jsx("div",{className:Ae.paneContent,children:t.jsx(gM,{initiatives:r,standaloneWorkstreams:s,activeInitiativeId:o,activeWorkstreamId:d,expandedInitiativeIds:i,detail:u,secondaryPane:k,onCreateInitiative:Z,onCreateWorkstream:he,onToggleInitiative:Q,onSelectInitiative:we,onSelectWorkstream:ke,onOpenInitiativeDetails:be,onOpenWorkstreamDetails:me})})]}),K&&(ge?t.jsx(Cm,{label:re,onExpand:T}):t.jsxs("div",{className:`${Ae.paneShell} ${m.appScrollbar} tf-scrollbar ${Ae.detailPane}`.trim(),style:{flex:`0 0 ${_s}px`,width:`${_s}px`,minWidth:`${_s}px`,maxWidth:`${_s}px`},children:[t.jsxs("div",{className:Ae.paneHeader,children:[t.jsx("span",{className:Ae.paneHeaderLabel,children:re}),t.jsx("button",{type:"button",className:"tf-control-icon",onClick:ie,children:t.jsx(xc,{size:16})})]}),t.jsx("div",{className:Ae.paneContent,children:f?t.jsx(lf,{editor:f,draftTitle:v,draftDescription:g,draftOwner:w,draftInitiativeId:I,assigneeOptions:x,draftInitiativeSummary:S,onChangeDraftTitle:b,onChangeDraftDescription:N,onChangeDraftOwner:W,onChangeDraftInitiativeId:M,onCancel:R,onSubmit:U,onAssignInitiativeToWorkstream:j}):u?t.jsx(cf,{detail:u,onOpenNestedWorkstreamDetails:u.type==="initiative"?Re:void 0,onCreateTaskInWorkstream:u.type==="workstream"?C:void 0,onCreateWorkstreamInInitiative:u.type==="initiative"?P:void 0,onOpenTaskById:u.type==="workstream"?ae:void 0,onAttachTaskToWorkstreamByReference:u.type==="workstream"?L:void 0,onAttachWorkstreamToInitiativeByReference:u.type==="initiative"?de:void 0,onEdit:()=>u.type==="initiative"?Te(u.item.id):se(u.item.id),onArchive:()=>u.type==="initiative"?F(u.item.id):E(u.item.id),onUnarchive:()=>u.type==="initiative"?D(u.item.id):y(u.item.id)}):null})]})),ue&&(X?t.jsx(Cm,{label:xe,onExpand:O}):t.jsxs("div",{className:`${Ae.paneShell} ${m.appScrollbar} tf-scrollbar ${Ae.detailPane}`.trim(),style:{flex:`0 0 ${_s}px`,width:`${_s}px`,minWidth:`${_s}px`,maxWidth:`${_s}px`},children:[t.jsxs("div",{className:Ae.paneHeader,children:[t.jsx("span",{className:Ae.paneHeaderLabel,children:xe}),t.jsx("button",{type:"button",className:"tf-control-icon",onClick:ve,children:t.jsx(xc,{size:16})})]}),t.jsx("div",{className:Ae.paneContent,children:k?.kind==="editor"?t.jsx(lf,{editor:k.editor,draftTitle:v,draftDescription:g,draftOwner:w,draftInitiativeId:I,assigneeOptions:x,draftInitiativeSummary:S,onChangeDraftTitle:b,onChangeDraftDescription:N,onChangeDraftOwner:W,onChangeDraftInitiativeId:M,onCancel:J,onSubmit:U,onAssignInitiativeToWorkstream:j}):k?t.jsx(cf,{detail:k.detail,onCreateTaskInWorkstream:C,onOpenTaskById:ae,onAttachTaskToWorkstreamByReference:L,onEdit:()=>se(k.detail.item.id),onArchive:()=>E(k.detail.item.id),onUnarchive:()=>y(k.detail.item.id)}):null})]}))]})})}const vM={"annotated_attachments.workspace_access":{enabled:!0,description:"Annotated Attachment workspace readiness gate.",owner:"taskforce",removalMilestone:"Annotated Attachment GA"},"documents.workspace_access":{enabled:!0,description:"Document Manager/editor workspace readiness gate.",owner:"taskforce",removalMilestone:"Document Manager GA"},"workflows.workspace_access":{enabled:!1,description:"Workflow workspace readiness gate.",owner:"taskforce",removalMilestone:"Workflow workspace GA"},"agents.workspace_access":{enabled:!0,description:"Agents workspace readiness gate.",owner:"taskforce",removalMilestone:"Agents workspace GA"},"initiatives.workspace_access":{enabled:!0,description:"Initiatives workspace readiness gate.",owner:"taskforce",removalMilestone:"Initiatives workspace GA"}},Ul="annotated_attachments.workspace_access",zl="documents.workspace_access",ku="workflows.workspace_access",Su="agents.workspace_access",df="initiatives.workspace_access",kM=Object.entries(vM).reduce((e,[n,r])=>(e[n]={key:n,enabled:!!r.enabled,description:String(r.description||""),owner:String(r.owner||""),removalMilestone:String(r.removalMilestone||"")},e),{});function SM(e){const n=String(e||"").trim();return n&&kM[n]||null}function wM(e){const n=SM(e);return n?n.enabled?{featureKey:e,allowed:!0,source:"app_gate",code:"OK"}:{featureKey:e,allowed:!1,source:"app_gate",code:"APP_GATE_DISABLED"}:{featureKey:e,allowed:!0,source:"none",code:"OK"}}function Pl(e){return wM(e.featureKey)}const bM=["tasks","docs","annotate","workflows","agents"];function xM(e){const n=e?.featureAccess||{},r={tasks:{id:"tasks",label:"Tasks",featureKey:null,enabled:!0,fallbackModuleId:"tasks"},docs:{id:"docs",label:"Documents",featureKey:zl,enabled:n[zl]?.allowed??!0,fallbackModuleId:"tasks"},annotate:{id:"annotate",label:"Image Notes",featureKey:Ul,enabled:n[Ul]?.allowed??!1,fallbackModuleId:"tasks"},workflows:{id:"workflows",label:"Workflows",featureKey:ku,enabled:n[ku]?.allowed??!1,fallbackModuleId:"tasks"},agents:{id:"agents",label:"Agents",featureKey:Su,enabled:n[Su]?.allowed??!1,fallbackModuleId:"tasks"}};return bM.map(s=>r[s])}function _M(e){switch(e){case"docs":return{mode:e,moduleId:"docs",layoutVariant:"docs-minimal",headerSections:[],filterBar:{kind:"document-filters"},primaryAction:null};case"annotate":return{mode:e,moduleId:"annotate",layoutVariant:"annotated-module",headerSections:[],filterBar:{kind:"empty"},primaryAction:null};case"workflows":return{mode:e,moduleId:"workflows",layoutVariant:"workflows-module",headerSections:[],filterBar:{kind:"empty"},primaryAction:null};case"agents":return{mode:e,moduleId:"agents",layoutVariant:"agents-module",headerSections:[],filterBar:{kind:"empty"},primaryAction:null};default:return{mode:"tasks",moduleId:"tasks",layoutVariant:"tasks-default",headerSections:["search","sort","divider-primary","grouping","divider-secondary","task-display-actions"],filterBar:{kind:"task-filters"},primaryAction:"add-task"}}}function uf(e,n){const r=n.find(s=>s.id===e);return r?r.enabled?r.id:r.fallbackModuleId:"tasks"}const CM="_weekLabel_vet2o_1",AM="_sectionTitle_vet2o_6",TM="_calendarHeader_vet2o_11",IM="_monthLabel_vet2o_18",NM="_weekdayGrid_vet2o_23",jM="_weekdayLabel_vet2o_30",RM="_calendarGrid_vet2o_36",DM="_calendarDay_vet2o_42",EM="_calendarDayDot_vet2o_55",PM="_jumpRow_vet2o_67",MM="_displaySection_vet2o_73",LM="_toggleLabel_vet2o_79",BM="_expiredSummary_vet2o_87",WM="_actionButton_vet2o_95",xa={weekLabel:CM,sectionTitle:AM,calendarHeader:TM,monthLabel:IM,weekdayGrid:NM,weekdayLabel:jM,calendarGrid:RM,calendarDay:DM,calendarDayDot:EM,jumpRow:PM,displaySection:MM,toggleLabel:LM,expiredSummary:BM,actionButton:WM},mf=["mon","tue","wed","thu","fri","sat","sun"],FM={mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat",sun:"Sun"};function bc(e){const n=e.getFullYear(),r=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0");return`${n}-${r}-${s}`}function Fl(e){const n=e.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!n)return null;const r=new Date(Number(n[1]),Number(n[2])-1,Number(n[3]));return Number.isNaN(r.getTime())?null:r}function $m(e,n){const r=e.getDay(),s=n==="sunday"?-r:r===0?-6:1-r,o=new Date(e);return o.setHours(0,0,0,0),o.setDate(o.getDate()+s),o}function OM(e,n){return n==="sunday"?{sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6}[e]:{mon:0,tue:1,wed:2,thu:3,fri:4,sat:5,sun:6}[e]}function Fh(e,n){const r=new Date(e);return r.setDate(e.getDate()+n),r}function $M(e){const n=e.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!n)return null;const r=new Date(Date.UTC(Number(n[1]),Number(n[2])-1,Number(n[3]))),s=r.getUTCDay()||7;r.setUTCDate(r.getUTCDate()+4-s);const o=new Date(Date.UTC(r.getUTCFullYear(),0,1)),d=Math.ceil(((r.getTime()-o.getTime())/864e5+1)/7);return`${r.getUTCFullYear()}-W${String(d).padStart(2,"0")}`}const Um=320;function UM({open:e,onClose:n,scheduleSelectedDate:r,setScheduleSelectedDate:s,scheduleCalendarMonth:o,setScheduleCalendarMonth:d,scheduleShowWeekends:i,setScheduleShowWeekends:u,scheduleShowBacklog:f,setScheduleShowBacklog:k,scheduleOnlyExpired:x,setScheduleOnlyExpired:S,expiredScheduledCount:v,overdueDueCount:g,expiredLeafCandidates:w,expiredRecoveryCandidates:I,onMoveExpiredToSelectedWeek:b,onMoveExpiredToBacklog:N,scheduleBulkBusy:W,globalWeekStartsOn:M,resolvedLocale:oe,todayDateOnly:te,scheduleBaseTasks:ie,scheduleWeekStart:T,scheduleWeekLabel:ve}){const O=pt.useMemo(()=>{const[R,U]=o.split("-"),Z=Number(R),he=Number(U);if(!Number.isInteger(Z)||!Number.isInteger(he)||he<1||he>12){const Q=Fl(r)||new Date;return new Date(Q.getFullYear(),Q.getMonth(),1)}return new Date(Z,he-1,1)},[o,r]),J=pt.useMemo(()=>Cc(O,{month:"long",year:"numeric"},oe),[O,oe]),le=pt.useMemo(()=>{const R=$m(O,M);return Array.from({length:42},(U,Z)=>Fh(R,Z))},[O,M]),ge=pt.useMemo(()=>{const R=new Map;for(const U of ie){const Z=U.scheduledDate||"";if(!Z)continue;const Q=!(U.status==="done"||U.status==="cancelled")&&Z<te,we=R.get(Z);we?(we.count+=1,Q&&(we.hasExpired=!0)):R.set(Z,{count:1,hasExpired:Q})}return R},[ie,te]),X=pt.useMemo(()=>M==="sunday"?["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]:["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],[M]);return t.jsxs("aside",{className:`${m.appScrollbar} tf-scrollbar tf-sidebar-shell`,style:{transform:e?"translateX(0)":"translateX(108%)",pointerEvents:e?"auto":"none",transition:"transform 220ms cubic-bezier(0.4, 0, 0.2, 1)",willChange:"transform",width:`${Um}px`,minWidth:`${Um}px`},children:[t.jsxs("div",{className:"tf-sidebar-header",children:[t.jsxs("div",{className:"tf-sidebar-title",children:[t.jsx(Ig,{size:16}),t.jsx("span",{children:"Schedule Controls"})]}),t.jsx("button",{type:"button",className:"tf-control-icon",onClick:n,title:"Hide Schedule Sidebar",children:t.jsx(Ei,{size:16})})]}),t.jsxs("div",{className:xa.weekLabel,children:["Week of ",ve]}),t.jsxs("div",{className:"tf-sidebar-section tf-surface-panel",children:[t.jsxs("div",{className:xa.calendarHeader,children:[t.jsx("button",{className:"tf-control-icon",onClick:()=>{const R=new Date(O);R.setMonth(O.getMonth()-1),d(`${R.getFullYear()}-${String(R.getMonth()+1).padStart(2,"0")}`)},title:"Previous month",children:t.jsx(xc,{size:14})}),t.jsx("div",{className:xa.monthLabel,children:J}),t.jsx("button",{className:"tf-control-icon",onClick:()=>{const R=new Date(O);R.setMonth(O.getMonth()+1),d(`${R.getFullYear()}-${String(R.getMonth()+1).padStart(2,"0")}`)},title:"Next month",children:t.jsx(Ei,{size:14})})]}),t.jsx("div",{className:xa.weekdayGrid,children:X.map(R=>t.jsx("div",{className:xa.weekdayLabel,children:R},R))}),t.jsx("div",{className:xa.calendarGrid,children:le.map(R=>{const U=bc(R),Z=R.getMonth()!==O.getMonth(),he=$m(R,M),Q=bc(he)===bc(T),we=U===r,ke=U===te,be=U<te,me=ge.get(U),Re=!!me,Te=!!me?.hasExpired;return t.jsxs("button",{onClick:()=>{s(U),d(`${R.getFullYear()}-${String(R.getMonth()+1).padStart(2,"0")}`)},className:xa.calendarDay,style:{"--calendar-day-border":we?"1px solid #2563eb":ke?"1px solid rgba(245, 158, 11, 0.95)":"1px solid transparent","--calendar-day-background":we?"rgba(59,130,246,0.22)":ke?"rgba(245,158,11,0.16)":Q?"rgba(59,130,246,0.18)":"transparent","--calendar-day-color":Z?"var(--text-helper)":"var(--text-primary)","--calendar-day-font-weight":we||ke?700:500,"--calendar-day-opacity":be?.42:1},title:`${ke?`${U} (Today)`:U}`+(Re?` • ${me?.count} scheduled`:"")+(Te?" • includes expired":""),children:[R.getDate(),Re&&t.jsx("span",{className:xa.calendarDayDot,style:{"--calendar-dot-background":Te?"#ef4444":"#3b82f6","--calendar-dot-opacity":Z?.6:.95}})]},U)})}),t.jsx("div",{className:xa.jumpRow,children:t.jsx("button",{className:"tf-control-icon",onClick:()=>{const R=new Date;s(bc(R)),d(`${R.getFullYear()}-${String(R.getMonth()+1).padStart(2,"0")}`)},title:"Jump to current week",children:"Today"})})]}),t.jsxs("div",{className:`tf-sidebar-section tf-surface-panel ${xa.displaySection}`,children:[t.jsx("div",{className:xa.sectionTitle,children:"Display"}),t.jsxs("label",{className:xa.toggleLabel,children:[t.jsx("input",{type:"checkbox",checked:i,onChange:R=>u(R.target.checked)}),"Show weekends"]}),t.jsxs("label",{className:xa.toggleLabel,children:[t.jsx("input",{type:"checkbox",checked:f,onChange:R=>k(R.target.checked)}),"Show backlog"]}),t.jsxs("label",{className:xa.toggleLabel,children:[t.jsx("input",{type:"checkbox",checked:x,onChange:R=>S(R.target.checked)}),"Only expired/overdue"]})]}),v>0&&t.jsxs("div",{className:"tf-sidebar-section tf-surface-panel",children:[t.jsx("div",{className:xa.sectionTitle,children:"Expired Tasks"}),t.jsxs("div",{className:xa.expiredSummary,children:[t.jsxs("span",{children:[v," expired"]}),t.jsxs("span",{children:[g," overdue"]})]}),t.jsx("button",{className:`tf-control-icon ${xa.actionButton}`,onClick:b,disabled:W||w.length===0,title:"Move expired leaf tasks to the selected week while keeping weekday alignment",children:W?"Working...":"Schedule to selected week"}),t.jsx("button",{className:`tf-control-icon ${xa.actionButton}`,onClick:N,disabled:W||I.length===0,title:"Unschedule expired/overdue tasks back to backlog",children:W?"Working...":"Unschedule to backlog"})]})]})}function Oh(e,n){return e&&(n==="owner"||n==="admin")}function zM(e,n,r){return Oh(e,n)&&r==="team"}const HM=pt.lazy(()=>Oo(()=>import("./TaskSettings-CEDy34Jo.js"),__vite__mapDeps([0,1,2,3,4,5,6])).then(e=>({default:e.TaskSettings}))),GM=pt.lazy(()=>Oo(()=>import("./AnnotatedAttachmentWorkspace-BlS-cqnl.js"),__vite__mapDeps([7,1,2,3,4,5,8])).then(e=>({default:e.AnnotatedAttachmentWorkspaceShell}))),VM=pt.lazy(()=>Oo(()=>import("./DocumentWorkspace-BH_6DF6x.js"),__vite__mapDeps([9,1,2,3,4,5,10])).then(e=>({default:e.DocumentWorkspaceShell}))),ZM=pt.lazy(()=>Oo(()=>import("./WorkflowsModule-DnFqdUME.js"),__vite__mapDeps([11,1,2,3,4,5])).then(e=>({default:e.WorkflowsModule}))),qM=pt.lazy(()=>Oo(()=>import("./AgentsModule-BLWVbuKP.js"),__vite__mapDeps([12,1,2,3,4,5])).then(e=>({default:e.AgentsModule})));pt.lazy(()=>Oo(()=>import("./InitiativesModule-BjR6iBf9.js"),__vite__mapDeps([13,1,2,3,4,5])).then(e=>({default:e.InitiativesModule})));const KM=pt.lazy(()=>Oo(()=>import("./PlansPage-CSDQ4sLa.js"),__vite__mapDeps([14,1,2,5,3,4,15])).then(e=>({default:e.PlansPage}))),pf=new Set(["active","trialing","grace"]),YM="image/png,image/jpeg,image/webp,image/gif",JM=5*1024*1024,XM=e=>e;function Nc(e,n=0){const r=String(e.id??"").trim();return r?`id:${r}`:[String(e.occurredAt||"").trim()||"unknown-time",String(e.eventType||"").trim()||"sync",String(e.status||"").trim()||"unknown-status",String(e.statusCode??""),String(e.changeCount??""),String(e.requestMs??""),String(e.errorMessage||"").trim(),JSON.stringify(e.details||null),String(n)].join("|")}function QM(e,n,r=15){const s=new Map;for(const[o,d]of e.entries())s.set(Nc(d,o),d);for(const[o,d]of n.entries())s.set(Nc(d,o),d);return Array.from(s.values()).sort((o,d)=>String(d.occurredAt||"").localeCompare(String(o.occurredAt||""))).slice(0,Math.max(1,r))}function eL(e,n){if(e.length!==n.length)return!1;for(let r=0;r<e.length;r+=1)if(Nc(e[r],r)!==Nc(n[r],r))return!1;return!0}function tL(e){let n=0;for(const r of e){if(String(r.errorMessage||"").toLowerCase().includes("reference number mismatch")){n+=1;continue}if(String(r.status||"").toLowerCase()==="success")break}return n}function nL(e){const n=[];for(const r of e){if(String(r.errorMessage||"").toLowerCase().includes("reference number mismatch")){n.push(r);continue}if(String(r.status||"").toLowerCase()==="success")break}return n}function aL(e,n){const r=xu(e);if(r)return jp(r).label.toUpperCase();for(const s of n){const o=String(s||"").trim();if(!o)continue;const d=qm(o);if(d)return jp(d).label.toUpperCase();let i=o.toLowerCase();try{i=new URL(o.includes("://")?o:`https://${o}`).hostname.toLowerCase()}catch{i=o.toLowerCase()}if(!(i.includes("localhost")||i.includes("127.0.0.1")||i.includes("::1")))return i.toUpperCase()}return"UNKNOWN"}function Ml(){return typeof performance<"u"?performance.now():Date.now()}function rL(e){const s=Rf(),o=Df(),d=a.useMemo(()=>new URLSearchParams(o.search),[o.search]),i=String(d.get("screen")||"").trim().toLowerCase()==="plans",u=a.useCallback(l=>{const h=new URLSearchParams(o.search);h.set("screen","plans");for(const[_,ce]of Object.entries(l||{}))ce==null||String(ce).trim()===""?h.delete(_):h.set(_,String(ce));s(`/?${h.toString()}${o.hash||""}`)},[o.hash,o.search,s]),f=a.useCallback(()=>{const l=new URLSearchParams(o.search);l.delete("screen"),l.delete("gate"),l.delete("checkout"),l.delete("planId"),l.delete("planVersionId"),l.delete("interval");const h=l.toString();s(`${o.pathname==="/"?"/":o.pathname}${h?`?${h}`:""}${o.hash||""}`)},[o.hash,o.pathname,o.search,s]),{activeTab:k,setActiveTab:x,activeCategories:S,groupBy:v,setGroupBy:g,activeWorkspaceModule:w,setActiveWorkspaceModule:I,emptyColumnMode:b,setEmptyColumnMode:N,zenMode:W,setZenMode:M,filterStatus:oe,setFilterStatus:te,tasks:ie,handleEdit:T,handleSubmit:ve,resetForm:O,handleUpdateTask:J,editingTaskId:le,loading:ge,error:X,title:R,setTitle:U,description:Z,setDescription:he,checklistItems:Q,setChecklistItems:we,category:ke,setCategory:be,type:me,setType:Re,priority:Te,setPriority:se,complexity:F,setComplexity:D,setStatus:E,approach:y,setApproach:C,assignee:P,setAssignee:j,scheduledDate:ae,setScheduledDate:L,dueDate:de,setDueDate:K,workstreamInput:ue,setWorkstreamInput:B,manualComplexityEnabled:re,checklistDropdownEnabled:xe,showTaskCardStatusLabel:Ee,formTaxonomies:ye,setFormTaxonomies:Pe,comments:vt,newCommentText:Ke,setNewCommentText:bt,attachments:Ze,setAttachments:Qe,setAttachmentsDirty:St,descriptionFocused:Me,setDescriptionFocused:H,showMarkdownHelp:c,setShowMarkdownHelp:Ue,showChecklist:At,setShowChecklist:Wt,showComments:Tt,setShowComments:It,handleAddComment:Xe,handleSetWorkstreamForCurrentTask:gt,handleOpenTaskById:ze,taxonomies:Ye,activeTypes:Ve,priorities:ot,taxonomyDisplayLabels:xt,approaches:jt,copiedId:it,handleCopyId:q,handleToggleInProgress:Se,handleToggleComplete:wt,handleToggleReview:tt,handleToggleCancel:_e,handleArchiveTask:$t,handleDelete:ne,handleUnarchive:Ce,handleRestoreDeletedTask:Ie,handlePermanentlyDeleteDeletedTask:je,handleEmptyDeletedTasks:at,fetchTasks:ct,searchQuery:dt,setSearchQuery:ut,filterCategories:Mt,setFilterCategories:Nt,filterTypes:Ft,setFilterTypes:Yt,filterPriorities:Bt,setFilterPriorities:Jt,filterAssignees:mn,setFilterAssignees:Pn,assigneeOptions:Qt,taskScope:Rt,setTaskScope:gn,sortBy:jn,setSortBy:Gt,clearFilters:Ma,settingsModel:An,configLoaded:G,currentTheme:Fe,setCurrentTheme:Ge,pathSaved:Ct,saveSettings:$e,keyShortcut:Ut,setKeyShortcut:qt,globalWeekStartsOn:_t,locale:tn,jsonBackupEnabled:ln,setJsonBackupEnabled:Ot,mcpHostRoot:ta,setMcpHostRoot:Mn,settingsSection:yn,setSettingsSection:pn,runtimeMode:zt,workspaceSwitchingEnabled:na,cloudAuthConfigured:Rn,authRequiredForApi:cr,authBlocked:dn,isAuthenticated:Ht,authUserId:Vt,authWorkspaceId:_a,authUserEmail:aa,authUserDisplayName:br,authUserAvatarUrl:cs,authSessionResolved:Ln,realtimeSyncEnabled:La,realtimeSyncFlagSource:qa,workspaceCloudSyncEnabled:ra,workspaceSyncPhase:Yn,workspaceSyncStatus:sa,workspaceSyncSummary:On,workspaceSyncRecommendedAction:ua,workspaceSyncBusy:$n,workspaceSyncPendingChanges:Jn,saveWorkspaceCloudSyncSettings:Ba,pushNotice:nt,userGlobalSyncStatus:Gn,workspaceLastSuccessfulSyncAt:rn,workspaceLastPullAt:Xt,workspaceLastPushAt:on,workspaceLastErrorAt:Tn,userGlobalSyncError:kn,workspaceLastErrorMessage:Wa,retryWorkspaceCloudSync:Ka,resetWorkspaceSyncCursorAndPull:ma,getWorkspaceSyncDiagnostics:fn,currentWorkspaceId:Dt,currentWorkspaceRole:lr,availableWorkspaces:pa,switchWorkspace:Ca,updateCurrentUserProfile:Aa,resolveCloudAuthUrl:Dn=XM,logout:Ta,projectRoot:ls,projectName:oa,mcpScriptPath:dr,serverHostRoot:ds,showFolderBrowser:fa,setShowFolderBrowser:ur,folders:Vn,files:ha,currentBrowsePath:Sn,fetchFolders:xr,browserTarget:Ia,setBrowserTarget:Fa,handleSelectPath:Na,handleAddPath:ja,handleRemovePath:Oa,handleUpdateCategory:mr,handleRemoveCategory:_r,handleSaveCategory:Ya,handleUpdateCategoryIcon:Ra,handleUpdateCategoryColor:ia,handleSaveType:Cr,handleRemoveType:Ar,handleUpdateTaxonomies:Zn,handleUpdatePriorities:pr,pathValidation:Ja,exportEnvironment:Xn,setExportEnvironment:Un,exportWorkflowsPath:zn,setExportWorkflowsPath:Bn,exportResult:fr,exportingResource:Be,availableWorkflows:Et,onExportWorkflows:_n,fetchWorkflows:nn,availableEnvironments:hr,initiativeTemplates:Gr,fetchInitiativeTemplates:us,createInitiativeFromTemplate:V,uiNotice:ft,clearNotice:Kt,taskReturnTrail:qe,clearReturnToParentTask:En,returnToPreviousTask:Xa,tasksScrollRef:Qa,setTasksScrollPos:Vr,commentsEndRef:Ts,autoSaveState:Tr,unsavedModalOpen:A,setUnsavedModalOpen:Ne,pendingNavigation:rt,handleNavigation:ht,currentTask:$,currentTaskWorkstream:We,currentTaskInitiative:Ir,scheduleWarningPrompt:ca,confirmScheduleWarning:er,cancelScheduleWarning:ms}=e,ro=tn||zf();a.useEffect(()=>{const l=String(oa||"").trim();document.title=l?`Taskforce - ${l}`:"Taskforce"},[oa]);const In=()=>{Ne(!1),rt?(k==="add"&&O(),rt()):(k==="add"&&O(),x("tasks"))},Zr=async()=>{await ve({preventDefault:()=>{}}),Ne(!1),rt&&rt()},[Wn,Nr]=a.useState(!1),[tr,$o]=a.useState(!1),[ps,Uo]=a.useState(!0),[Is,Ns]=a.useState(!1),[zo,qr]=a.useState(!0),[$a,Rc]=a.useState(bc(new Date)),[Dc,Ec]=a.useState(()=>{const l=new Date;return`${l.getFullYear()}-${String(l.getMonth()+1).padStart(2,"0")}`}),[js,Li]=a.useState(0),[la,Bi]=a.useState(!1),[Rs,Pc]=a.useState(!1),[gr,Ds]=a.useState(!1),[Es,Ho]=a.useState(!1),[so,Kr]=a.useState(!1),[Go,nr]=a.useState(!1),[Nn,Ua]=a.useState(""),[yr,un]=a.useState(""),[Mc,Yr]=a.useState(new Set),[Qn,Lr]=a.useState(null),[oo,ga]=a.useState(null),[ar,Jr]=a.useState(null),[Ps,Br]=a.useState(null),[Ms,Xr]=a.useState(""),[Wr,Ls]=a.useState(""),[Wi,fs]=a.useState(""),[Fr,Or]=a.useState(""),[Qr,vr]=a.useState(()=>su.map(l=>l.value)),[en,cn]=a.useState(()=>ou.map(l=>l.value)),[es,Vo]=a.useState(null),[Zo,Fi]=a.useState(null),[ya,hs]=a.useState(null),[hn,qo]=a.useState(null),[Xl,Ql]=a.useState(0),[Bs,Cu]=a.useState({}),[ed,td]=a.useState(!1),nd=a.useRef(""),Lc=a.useRef(null),Ko=a.useRef(null),Bc=a.useRef(new Set),io=a.useMemo(()=>{const l={},h=String(Dt||"").trim();return zt==="cloud"&&h&&h!=="default"&&(l["x-taskforce-workspace-id"]=h),l},[zt,Dt]),Yo=a.useMemo(()=>`${zt}:${String(Dt||"default").trim()||"default"}`,[zt,Dt]),Oi=a.useMemo(()=>`taskforce:annotate-layout:${Yo}`,[Yo]),Wc=a.useMemo(()=>zt==="cloud"?Ln:G,[Ln,G,zt]);a.useEffect(()=>{Lc.current=ya},[ya]),a.useEffect(()=>{Ko.current=hn},[hn]);const $i=a.useMemo(()=>({[zl]:Pl({featureKey:zl}),[Ul]:Pl({featureKey:Ul}),[ku]:Pl({featureKey:ku}),[Su]:Pl({featureKey:Su}),[df]:Pl({featureKey:df})}),[zt]),Ws=a.useMemo(()=>xM({featureAccess:$i}),[$i]),qn=a.useMemo(()=>uf(w,Ws),[w,Ws]),Fs=$i[zl]?.allowed??!1,Fc=$i[Ul]?.allowed??!1,ts="Documents is not available in this build yet.",ad="Annotate is not available in this build yet.";a.useEffect(()=>{const l=h=>{const _=h,ce=_.detail?.fsPath,pe=String(_.detail?.assetId||"").trim()||null;if(!(!ce&&!pe)){if(_.preventDefault(),!Fs){nt(ts,"error");return}Vo(ce||null),Fi(pe),I("docs")}};return window.addEventListener("taskforce:open-markdown-document",l),()=>{window.removeEventListener("taskforce:open-markdown-document",l)}},[Fs,ts,nt,I]),a.useEffect(()=>{qn!==w&&I(qn)},[w,qn,I]),a.useEffect(()=>{qn==="docs"&&Fs||(Vo(null),Fi(null))},[Fs,qn]),a.useEffect(()=>{if(!(typeof window>"u"))try{const l=window.sessionStorage.getItem(Oi);if(!l)return;const h=JSON.parse(l);h?.annotatedTarget&&typeof h.annotatedTarget=="object"&&hs(h.annotatedTarget),typeof h?.annotatedSessionId=="string"&&qo(h.annotatedSessionId.trim()||null)}catch{}},[Oi]),a.useEffect(()=>{if(nd.current===Yo)return;nd.current=Yo,td(!1);let l=!1;return(async()=>{try{const _=await fetch("/api/taskforce/ui-state?key=layout",{method:"GET",credentials:"include",headers:io});if(!_.ok)return;const ce=await _.json().catch(()=>({})),pe=ce?.state&&typeof ce.state=="object"?ce.state:null;if(!pe||l)return;if(typeof pe.scheduleShowWeekends=="boolean"&&$o(pe.scheduleShowWeekends),typeof pe.scheduleShowBacklog=="boolean"&&Uo(pe.scheduleShowBacklog),typeof pe.scheduleOnlyExpired=="boolean"&&Ns(pe.scheduleOnlyExpired),typeof pe.scheduleSidebarOpen=="boolean"&&qr(pe.scheduleSidebarOpen),typeof pe.scheduleSelectedDate=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(pe.scheduleSelectedDate)&&Rc(pe.scheduleSelectedDate),typeof pe.scheduleCalendarMonth=="string"&&/^\d{4}-\d{2}$/.test(pe.scheduleCalendarMonth)&&Ec(pe.scheduleCalendarMonth),typeof pe.scheduleScrollLeft=="number"&&Number.isFinite(pe.scheduleScrollLeft)&&pe.scheduleScrollLeft>=0&&Li(pe.scheduleScrollLeft),typeof pe.showFilters=="boolean"&&Bi(pe.showFilters),Array.isArray(pe.documentTypeFilters)&&vr(pe.documentTypeFilters),Array.isArray(pe.documentAttachmentFilters)&&cn(pe.documentAttachmentFilters),typeof pe.planningDrawerOpen=="boolean"&&Ds(pe.planningDrawerOpen),typeof pe.planningTreeCollapsed=="boolean"&&Ho(pe.planningTreeCollapsed),typeof pe.planningPrimaryCollapsed=="boolean"&&Kr(pe.planningPrimaryCollapsed),typeof pe.planningSecondaryCollapsed=="boolean"&&nr(pe.planningSecondaryCollapsed),Array.isArray(pe.planningExpandedInitiativeIds)&&Yr(new Set(pe.planningExpandedInitiativeIds.map(Pt=>String(Pt||"").trim()).filter(Boolean))),pe.planningDrawerDetail&&typeof pe.planningDrawerDetail=="object"&&(pe.planningDrawerDetail.type==="initiative"||pe.planningDrawerDetail.type==="workstream")&&typeof pe.planningDrawerDetail.id=="string"){const Pt=pe.planningDrawerDetail.id.trim();Lr(Pt?{type:pe.planningDrawerDetail.type,id:Pt}:null)}else pe.planningDrawerDetail===null&&Lr(null);typeof pe.planningNestedWorkstreamDetailId=="string"?ga(pe.planningNestedWorkstreamDetailId.trim()||null):pe.planningNestedWorkstreamDetailId===null&&ga(null);const st=pe.annotatedTarget;st&&typeof st=="object"&&(Lc.current||hs(st)),typeof pe.annotatedSessionId=="string"&&(Ko.current||qo(pe.annotatedSessionId.trim()||null))}catch{}finally{l||td(!0)}})(),()=>{l=!0}},[Yo,io]),a.useEffect(()=>{if(!ed)return;const l=window.setTimeout(async()=>{try{await Ym({stateKey:"layout",workspaceId:Dt,headers:io,patch:{scheduleShowWeekends:tr,scheduleShowBacklog:ps,scheduleOnlyExpired:Is,scheduleSidebarOpen:zo,scheduleSelectedDate:$a,scheduleCalendarMonth:Dc,scheduleScrollLeft:js,showFilters:la,documentTypeFilters:Qr,documentAttachmentFilters:en,planningDrawerOpen:gr,planningTreeCollapsed:Es,planningPrimaryCollapsed:so,planningSecondaryCollapsed:Go,planningExpandedInitiativeIds:Array.from(Mc),planningDrawerDetail:Qn,planningNestedWorkstreamDetailId:oo,annotatedTarget:ya,annotatedSessionId:hn}})}catch{}},250);return()=>window.clearTimeout(l)},[ed,tr,ps,Is,zo,$a,Dc,js,la,Qr,en,gr,Es,so,Go,Mc,Qn,oo,ya,hn,io]),a.useEffect(()=>{if(!(typeof window>"u"))try{window.sessionStorage.setItem(Oi,JSON.stringify({annotatedTarget:ya,annotatedSessionId:hn}))}catch{}},[Oi,hn,ya]),a.useEffect(()=>{v==="schedule"&&qr(!0)},[v]);const{showArchive:co,setShowArchive:rd,fetchArchive:sd,filteredArchive:Ui}=e,lo=a.useMemo(()=>Ui.map(l=>({...l,isArchived:!0})),[Ui]),va=a.useMemo(()=>e.archivedTasks.map(l=>({...l,isArchived:!0})),[e.archivedTasks]),$r=a.useMemo(()=>[...e.searchAgnosticTasks,...va],[va,e.searchAgnosticTasks]),Jo=a.useCallback(l=>{const h=String(l||"").trim();if(!h)return"";const _=$r.find(ce=>ce.id===h);return Cs(_)||""},[$r]),uo=a.useCallback(l=>{const h=String(l||"").trim();if(!h)return"";const _=String(Bs[h]||"").trim();if(_)return _;for(const ce of $r)for(const pe of ce.attachments||[]){if(!pe||typeof pe!="object"||String(pe.assetId||"").trim()!==h)continue;const st=gh({referenceNumber:typeof pe.referenceNumber=="number"?pe.referenceNumber:null,referenceLabel:String(pe.referenceLabel||"").trim()||null});if(st)return st}return""},[$r,Bs]);a.useEffect(()=>{const l=h=>{const _=h,ce=Zp(_.detail,$r);if(ce){if(_.preventDefault(),!Fc){nt(ad,"error");return}hs(ce),qo(null),Ql(pe=>pe+1),I("annotate")}};return window.addEventListener("taskforce:open-annotated-attachment",l),()=>{window.removeEventListener("taskforce:open-annotated-attachment",l)}},[$r,Fc,ad,nt,I]),a.useEffect(()=>{if(!ya)return;const l=Zp(ya,$r);l&&(l.taskReferenceLabel===ya.taskReferenceLabel&&l.imageReferenceLabel===ya.imageReferenceLabel||hs(l))},[$r,ya]),a.useEffect(()=>{const l=Lc.current,h=String(l?.assetId||"").trim();if(!h)return;const _=String(Bs[h]||"").trim();_&&_!==String(l?.imageReferenceLabel||"").trim()&&hs(ce=>!ce||String(ce.assetId||"").trim()!==h?ce:{...ce,imageReferenceLabel:_})},[Bs,ya]),a.useEffect(()=>{if(!Wc)return;const h=String(ya?.assetId||"").trim();if(!h||Bc.current.has(h)||String(Bs[h]||"").trim())return;let _=!1;Bc.current.add(h);const ce=String(Dt||"default").trim()||"default",pe=new URLSearchParams({workspaceId:ce});return(async()=>{try{const Pt=await fetch(`/api/taskforce/annotated-attachments/images/${encodeURIComponent(h)}?${pe.toString()}`,{method:"GET",credentials:"include",headers:io});if(!Pt.ok)return;const xn=await Pt.json().catch(()=>({})),an=String(xn?.target?.imageReferenceLabel||"").trim();if(!an||_)return;Cu(ss=>ss[h]===an?ss:{...ss,[h]:an})}catch{}finally{Bc.current.delete(h)}})(),()=>{_=!0}},[Wc,Bs,Dt,ya,io]);const ka=a.useMemo(()=>e.deletedTasks.map(l=>({...l.taskSnapshot,isDeleted:!0,deletedRecordId:l.id})),[e.deletedTasks]),mo=a.useMemo(()=>{const l=new Map;return e.deletedTasks.forEach(h=>{l.set(h.taskSnapshot.id,h)}),l},[e.deletedTasks]),zi=a.useMemo(()=>{const l=ka,h=dt.trim().toLowerCase(),_=S.every(an=>Mt.includes(an.value)),ce=Ve.every(an=>Ft.includes(an.value)),pe=new Set(Bt.map(an=>String(an))),st=ot.every(an=>pe.has(String(an.value))),Pt=new Set(oe.map(an=>String(an))),xn=Qs.every(an=>Pt.has(String(an.value)));return l.filter(an=>{const ss=(Cs(an)||an.id).toLowerCase(),Rl=!h||an.title.toLowerCase().includes(h)||String(an.description||"").toLowerCase().includes(h)||an.id.toLowerCase().includes(h)||ss.includes(h),sm=_||Mt.includes(an.category),Lt=ce||Ft.includes(an.type||wr),Er=st||pe.has(String(an.priority)),Ks=xn||Pt.has(String(an.status)),Pr=mn.length===0||mn.includes(an.assignee||"unassigned");return Rl&&sm&&Lt&&Er&&Ks&&Pr})},[S,Ve,ka,mn,Mt,Bt,oe,Ft,ot,dt]),Xo=a.useMemo(()=>[...e.tasks,...va,...ka],[va,ka,e.tasks]),Oc=a.useMemo(()=>{const l=S.filter(_=>!_.disabled).map(_=>({value:_.value,label:_.label})),h=S.filter(_=>_.disabled&&Xo.some(ce=>ce.category===_.value)).map(_=>({value:_.value,label:`${_.label} (Legacy)`}));return[...l,...h]},[S,Xo]),$c=a.useMemo(()=>{const l=Ve.filter(_=>_.status!=="retired").map(_=>({value:_.value,label:_.label})),h=Ve.filter(_=>_.status==="retired"&&Xo.some(ce=>(ce.type||wr)===_.value)).map(_=>({value:_.value,label:`${_.label} (Retired)`}));return[...l,...h]},[Ve,Xo]),Os=a.useMemo(()=>Rt==="archived"?lo:Rt==="deleted"?zi:co?[...e.filteredTasks,...lo]:e.filteredTasks,[lo,zi,e.filteredTasks,co,Rt]),Hi=a.useMemo(()=>Rt==="open"?e.tasks.filter(l=>!l.isArchived):Os,[Os,e.tasks,Rt]),od=a.useMemo(()=>new Set(Os.map(l=>l.id)),[Os]),Gi=a.useMemo(()=>Rt==="archived"?va:Rt==="deleted"?ka:co?[...e.tasks,...va]:e.tasks,[va,ka,e.tasks,co,Rt]),Qo=a.useMemo(()=>{const l=new Map;for(const h of va)l.set(h.id,h);for(const h of ka)l.set(h.id,h);for(const h of e.tasks)l.set(h.id,h);return Array.from(l.values())},[va,ka,e.tasks]),ei=a.useMemo(()=>{const l=new Map;return Qo.forEach(h=>l.set(h.id,h)),l},[Qo]),Vi=a.useMemo(()=>{const l=new Map;Qt.forEach(ce=>{l.set(String(ce.value),ce.label)});const h=String(Vt||"").trim(),_=String(br||aa||"").trim();return h&&_&&l.set(h,_),l},[Qt,br,aa,Vt]),kt=a.useMemo(()=>{const l=Rt==="archived"?va:Rt==="deleted"?ka:e.tasks.filter(Lt=>!Lt.isArchived),h=Lt=>{const Er=Lt.length,Ks=Lt.filter(Pr=>Pr.isArchived||Pr.status==="done"||Pr.status==="cancelled").length;return{progressPercent:Er>0?Math.round(Ks/Er*100):0,taskCount:Er,completedTaskCount:Ks}},_=new Map,ce=new Map,pe=new Map,st=new Map,Pt=new Map,xn=Lt=>{const Er=l.filter(ba=>(ba.workstreamId||null)===Lt.id),Ks=Er.map(ba=>({id:ba.id,referenceNumber:ba.referenceNumber??null,title:ba.title,status:ba.status||null})),Pr={id:Lt.id,referenceNumber:Lt.referenceNumber??null,title:Lt.title,description:String(Lt.description||"").trim()||void 0,ownerLabel:Lt.ownerId?Vi.get(String(Lt.ownerId))||String(Lt.ownerId):null,...h(Er),initiativeId:Lt.initiativeId||null,commentCount:Array.isArray(Lt.comments)?Lt.comments.length:0,attachmentCount:Array.isArray(Lt.attachments)?Lt.attachments.length:0,isArchived:!!Lt.isArchived,tasks:Ks};return _.set(Lt.id,Er.map(ba=>ba.id)),Lt.initiativeId&&ce.set(Lt.id,Lt.initiativeId),st.set(Pr.id,Pr),Pr},an=e.workstreams.map(xn),ss=e.initiatives.map(Lt=>{const Er=an.filter(ba=>(ba.initiativeId||null)===Lt.id),Ks=Er.flatMap(ba=>_.get(ba.id)||[]).map(ba=>ei.get(ba)).filter(ba=>!!ba),Pr={id:Lt.id,referenceNumber:Lt.referenceNumber??null,title:Lt.title,description:String(Lt.description||"").trim()||void 0,ownerLabel:Lt.ownerId?Vi.get(String(Lt.ownerId))||String(Lt.ownerId):null,...h(Ks),workstreamCount:Er.length,workstreams:Er,commentCount:Array.isArray(Lt.comments)?Lt.comments.length:0,attachmentCount:Array.isArray(Lt.attachments)?Lt.attachments.length:0,isArchived:!!Lt.isArchived};return pe.set(Lt.id,Ks.map(ba=>ba.id)),Pt.set(Pr.id,Pr),Pr}),Rl=Rt==="deleted"?[]:ss.filter(Lt=>Rt==="archived"?!!Lt.isArchived:!Lt.isArchived),sm=an.filter(Lt=>!Lt.initiativeId).filter(Lt=>Rt==="deleted"?!1:Rt==="archived"?!!Lt.isArchived:!Lt.isArchived);return{initiatives:Rl,standaloneWorkstreams:sm,workstreamTaskIds:_,workstreamInitiativeIds:ce,initiativeTaskIds:pe,workstreamById:st,initiativeById:Pt}},[va,Vi,ka,ei,e.initiatives,e.tasks,e.workstreams,Rt]),Uc=a.useMemo(()=>kt.initiatives.map(l=>{const h=os(l);return{value:l.id,label:h?`${h} - ${l.title}`:l.title,selectedLabel:h||l.title}}),[kt.initiatives]),zc=a.useMemo(()=>[...kt.initiatives.flatMap(l=>l.workstreams.map(h=>{const _=Xs(h);return{value:h.id,label:_?`${_} - ${h.title}`:h.title,selectedLabel:_||h.title}})),...kt.standaloneWorkstreams.map(l=>{const h=Xs(l);return{value:l.id,label:h?`${h} - ${l.title}`:l.title,selectedLabel:h||l.title}})],[kt.initiatives,kt.standaloneWorkstreams]),Ur=a.useMemo(()=>yr?new Set(kt.workstreamTaskIds.get(yr)||[]):Nn?new Set(kt.initiativeTaskIds.get(Nn)||[]):null,[kt.initiativeTaskIds,kt.workstreamTaskIds,Nn,yr]),Hc=a.useMemo(()=>{if(!Qn)return null;if(Qn.type==="initiative"){const h=kt.initiativeById.get(Qn.id);return h?{type:"initiative",item:h}:null}const l=kt.workstreamById.get(Qn.id)||kt.standaloneWorkstreams.find(h=>h.id===Qn.id);return l?{type:"workstream",item:l}:null},[Qn,kt.initiativeById,kt.standaloneWorkstreams,kt.workstreamById]),ti=a.useMemo(()=>{if(!oo)return null;const l=kt.workstreamById.get(oo)||kt.standaloneWorkstreams.find(h=>h.id===oo);return l?{type:"workstream",item:l}:null},[oo,kt.standaloneWorkstreams,kt.workstreamById]),Gc=a.useMemo(()=>Ps?{kind:"editor",editor:Ps}:ti?{kind:"detail",detail:ti}:null,[ti,Ps]),Vc=Wh(Es,!!(Hc||ar),so,!!Gc,Go),id=a.useMemo(()=>{if(!Fr.trim())return null;const l=kt.initiativeById.get(Fr);return l||fm(kt.initiatives,Fr)},[Fr,kt.initiativeById,kt.initiatives]);a.useEffect(()=>{Nn&&!kt.initiativeById.has(Nn)&&Ua(""),yr&&!kt.workstreamById.has(yr)&&un("")},[kt.initiativeById,kt.workstreamById,Nn,yr]);const rr=a.useMemo(()=>v==="schedule"?Hi:Os,[v,Os,Hi]),Hn=a.useMemo(()=>{const l=new Date,h=l.getFullYear(),_=String(l.getMonth()+1).padStart(2,"0"),ce=String(l.getDate()).padStart(2,"0");return`${h}-${_}-${ce}`},[]),po=a.useMemo(()=>v!=="schedule"||!Is?rr:rr.filter(l=>{if(l.status==="done"||l.status==="cancelled")return!1;const _=!!l.scheduledDate&&l.scheduledDate<Hn,ce=!!l.dueDate&&l.dueDate<Hn;return _||ce}),[v,Is,rr,Hn]),Zc=a.useMemo(()=>!Ur||Ur.size===0?po:po.filter(l=>Ur.has(l.id)),[po,Ur]),cd=a.useMemo(()=>!Ur||Ur.size===0?Gi:Gi.filter(l=>Ur.has(l.id)),[Gi,Ur]),$s=a.useMemo(()=>v!=="schedule"?[]:rr.filter(l=>{if(l.status==="done"||l.status==="cancelled")return!1;const _=!!l.scheduledDate&&l.scheduledDate<Hn,ce=!!l.dueDate&&l.dueDate<Hn;return _||ce}),[v,rr,Hn]),ld=a.useMemo(()=>v!=="schedule"?0:rr.filter(l=>l.status==="done"||l.status==="cancelled"?!1:!!l.scheduledDate&&l.scheduledDate<Hn).length,[v,rr,Hn]),dd=a.useMemo(()=>v!=="schedule"?0:rr.filter(l=>l.status==="done"||l.status==="cancelled"?!1:!!l.dueDate&&l.dueDate<Hn).length,[v,rr,Hn]),zr=String(Vt||"").trim(),qc=a.useMemo(()=>!zr||zr==="anonymous"?0:ie.filter(l=>l.status==="done"||l.status==="cancelled"?!1:String(l.assignee||"").trim()===zr).length,[zr,ie]),Zi=a.useMemo(()=>!zr||zr==="anonymous"?0:ie.filter(l=>l.status==="done"||l.status==="cancelled"||String(l.assignee||"").trim()!==zr?!1:!!l.dueDate&&l.dueDate<Hn).length,[zr,ie,Hn]),fo=a.useMemo(()=>v!=="schedule"?[]:rr.filter(l=>l.status==="done"||l.status==="cancelled"?!1:!!l.scheduledDate&&l.scheduledDate<Hn),[v,rr,Hn]),ni=$s,[Us,ai]=a.useState(!1),ri=()=>{ht(()=>{Xa()||(k==="add"&&qe.length>0&&En(),Pc(!1),k==="add"&&O(),x("tasks"))})};a.useEffect(()=>{k!=="add"&&Pc(!1)},[k]);const si=a.useCallback((l,h)=>{if(l.status!==h){if(h==="in-progress"){Se(l);return}if(h==="review"){tt(l);return}if(h==="done"){wt(l);return}if(h==="cancelled"){_e(l);return}J(l.id,{status:h,completedAt:null})}},[Se,tt,wt,_e,J]),Kc=a.useCallback((l,h)=>{O();const _=zE(l,h,{categories:S,approaches:jt});_.category&&be(_.category),_.type&&Re(_.type),typeof _.priority=="number"&&se(_.priority),typeof _.complexity=="number"&&D(_.complexity),_.approach&&C(_.approach);const ce=_.taxonomyApproach;typeof ce=="string"&&ce.length>0&&Pe(pe=>({...pe,approach:ce})),_.assignee&&j(_.assignee),_.status&&E(_.status),_.scheduledDate&&L(_.scheduledDate),x("add")},[O,S,jt,be,Re,se,D,E,C,j,L,Pe,x]);pt.useEffect(()=>{oe&&!oe.includes("done")&&te(l=>[...l,"done"])},[]);const[ud,ho]=a.useState(!1),[ns,Da]=a.useState(!1),[go,zs]=a.useState(!1),[qi,Ki]=a.useState(!1),[Yc,oi]=a.useState(!1),[md,Jc]=a.useState(!1),[Xc,Yi]=a.useState(null),[gs,Ji]=a.useState(!1),[Xi,pd]=a.useState(!1),[Qc,Qi]=a.useState(!1),[Sa,el]=a.useState([]),[fd,hd]=a.useState(!1),[tl,gd]=a.useState(null),nl=a.useRef(null),al=a.useRef(null),[ec,yd]=a.useState(!1),[tc,ii]=a.useState(""),[Au,rl]=a.useState(!1),[Tu,vd]=a.useState(!1),[Iu,ci]=a.useState("members"),[yo,li]=a.useState(null),[sl,vo]=a.useState("unknown"),[Nu,Ea]=a.useState(!1),[za,ko]=a.useState(null),[nc,Ha]=a.useState(null),[ac,rc]=a.useState(!1),[Hs,di]=a.useState([]),[ui,So]=a.useState(null),[ys,wo]=a.useState(""),[bo,sc]=a.useState("member"),[xo,_o]=a.useState("read-write"),[kd,mi]=a.useState(!1),[Sd,ol]=a.useState(null),[Co,ju]=a.useState(0),[Ru,wd]=a.useState(!1),[bd,Du]=a.useState([]),[Eu,Pu]=a.useState(!1),[Mu,il]=a.useState(1),[ea,cl]=a.useState(null),[xd,vs]=a.useState(!1),[Ao,wn]=a.useState(null),[Gs,To]=a.useState(!1),[pi,Kn]=a.useState(null),[oc,Io]=a.useState(!1),[Lu,ll]=a.useState(null),[fi,_d]=a.useState("month"),[dl,ul]=a.useState(""),[ml,No]=a.useState(""),[sr,jo]=a.useState(null),[Bu,Cd]=a.useState(!1),[Wu,pl]=a.useState(!1),[Fu,jr]=a.useState(null),[Ad,Rr]=a.useState(null),fl=25,Td=a.useRef(null),ic=a.useRef(null),hi=a.useRef(null),hl=a.useRef({billing:!1,teamManagement:!1}),gl=a.useRef(null);a.useEffect(()=>{gl.current=ea},[ea]),a.useEffect(()=>{if(!ns)return;const l=h=>{Td.current?.contains(h.target)||Da(!1)};return document.addEventListener("mousedown",l),()=>document.removeEventListener("mousedown",l)},[ns]);const Ou=zt==="cloud"&&na&&Ht,Ro=Ht&&(zt==="cloud"||Rn),cc=zt==="local"&&Ht,yl=a.useCallback(async l=>{if(!cc)return;Yi(null),Jc(!0);const h=await Ba({enabled:l});h.success||Yi(h.error||(l?"Failed to enable sync.":"Failed to disable sync.")),Jc(!1)},[cc,Ba]),vl=md,$u=a.useMemo(()=>{const l=pa.find(ce=>ce.id===Dt),h=String(l?.name||"").trim();if(h)return h;if(zt==="local"){const ce=String(oa||"").trim();if(ce)return ce}return String(Dt||"").trim()||"Workspace"},[pa,Dt,oa,zt]),Do=Oh(Ro,yo),ks=zM(Ro,yo,sl),gi=String(br||"").trim(),kr=String(cs||"").trim(),yi=String(aa||"").trim(),Vs=gi||yi,Id=Vs.length>0,Nd=yi.length>0,kl=(Vs||yi||"").trim(),lc=Ht&&Ln&&kl.length>0?kl.charAt(0).toUpperCase():"",Sl=kr,jd=Ht&&Ln&&Sl.length>0,Rd=String(ml||kr).trim(),dc=String(ea?.planName||ea?.planId||"").trim(),Dd=dc.length>0,Ss=String(ea?.workspaceId||_a||Dt||"").trim(),Ed=zt==="cloud"?"CLOUD":"LOCAL",wl=e.config?.apiBaseUrl||"",Pd=a.useMemo(()=>aL(e.config?.cloudEnvironment,[String(e.config?.cloudBaseUrl||""),String(e.config?.cloudAuthBaseUrl||""),String(e.config?.apiBaseUrl||""),String(e.config?.baseUrl||"")]),[e.config?.cloudEnvironment,e.config?.cloudBaseUrl,e.config?.cloudAuthBaseUrl,e.config?.apiBaseUrl,e.config?.baseUrl]),bl=Rn&&!Ln;a.useEffect(()=>{qi&&(ul(gi),No(kr),jo(null),jr(null),Rr(null))},[kr,gi,qi]);const as=a.useCallback(async l=>{const h=String(l||"").trim();if(!(!h||!Rn))try{const _=zt==="local"?e.config?.cloudAuthBaseUrl||e.config?.apiBaseUrl||"":e.config?.apiBaseUrl||e.config?.cloudAuthBaseUrl||"";await um("/api/taskforce/auth/profile/avatar/discard",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({draftId:h})},_)}catch{}},[Rn,e.config?.apiBaseUrl,e.config?.cloudAuthBaseUrl,zt]),Md=a.useCallback(()=>{const l=sr;Ki(!1),jr(null),Rr(null),jo(null),No(kr),l&&as(l)},[kr,as,sr]),Uu=a.useCallback(async l=>{if(!(!l||!Rn)){if(!l.type.startsWith("image/")){jr("Profile photo must be an image file."),Rr(null);return}if(l.size>JM){jr("Profile photo must be 5 MB or smaller."),Rr(null);return}Cd(!0),jr(null),Rr(null);try{const h=zt==="local"?e.config?.cloudAuthBaseUrl||e.config?.apiBaseUrl||"":e.config?.apiBaseUrl||e.config?.cloudAuthBaseUrl||"",_=await um("/api/taskforce/auth/profile/avatar/init",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({originalName:l.name,mimeType:l.type,size:l.size})},h),ce=await _.json().catch(()=>({}));if(!_.ok||!ce?.success||typeof ce?.uploadUrl!="string"||typeof ce?.relativePath!="string")throw new Error(ce?.error||"Failed to start avatar upload.");if(!(await fetch(ce.uploadUrl,{method:String(ce.method||"PUT"),headers:ce.headers||{"Content-Type":l.type||"application/octet-stream"},body:l})).ok)throw new Error("Failed to upload avatar.");const st=await um("/api/taskforce/auth/profile/avatar/finalize",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({draftId:ce.draftId,relativePath:ce.relativePath})},h),Pt=await st.json().catch(()=>({}));if(!st.ok||!Pt?.success||typeof Pt?.draftId!="string")throw new Error(Pt?.error||"Failed to finalize avatar upload.");const xn=sr;jo(Pt.draftId),No(typeof Pt?.avatarUrl=="string"?Pt.avatarUrl:""),Rr("Profile photo ready to save."),xn&&xn!==Pt.draftId&&as(xn)}catch(h){jr(h instanceof Error?h.message:"Failed to upload profile photo.")}finally{Cd(!1),ic.current&&(ic.current.value="")}}},[Rn,as,sr,e.config?.apiBaseUrl,e.config?.cloudAuthBaseUrl,zt]),zu=a.useCallback(()=>{if(!sr)return;const l=sr;jo(null),No(kr),Rr(null),jr(null),as(l)},[kr,as,sr]),Ld=a.useCallback(()=>{const l=sr;jo(null),No(""),Rr(kr?"Profile photo will be removed when you save.":null),jr(null),l&&as(l)},[kr,as,sr]),vi=a.useCallback(async()=>{const l=dl.trim();if(!l){jr("Display name is required."),Rr(null);return}pl(!0),jr(null),Rr(null);const h=await Aa({displayName:l,avatarDraftId:sr,clearAvatar:!sr&&!ml&&!!kr});if(!h.success){jr(h.error||"Failed to update profile."),pl(!1);return}Rr("Profile updated."),jo(null),No(""),pl(!1),Ki(!1)},[kr,sr,ml,dl,Aa]),Sr=a.useCallback(()=>{const l={},h=String(Ss||"").trim();h&&(l["x-taskforce-workspace-id"]=h);const _=yo||lr;return(_==="owner"||_==="admin"||_==="member"||_==="read-only")&&(l["x-taskforce-workspace-role"]=_),l},[lr,Ss,yo]),Bd=a.useCallback(l=>{const h=Ht,_=Ro;hi.current=Ml(),hl.current={billing:h,teamManagement:_},Fn("account_surface_opened",{surface:l,expectsBilling:h,expectsTeamManagement:_}),!h&&!_&&(Fn("account_surface_ready",{surface:l,durationMs:0,teamManagementVisible:!1,billingPlanId:null}),hi.current=null)},[Ro,Ht]),ki=a.useCallback(l=>{const h=hl.current;if(h[l]=!1,h.billing||h.teamManagement)return;const _=hi.current;_!==null&&(Fn("account_surface_ready",{surface:go?"account_hub":ns?"account_menu":"closed",durationMs:Math.round(Ml()-_),teamManagementVisible:ks,billingPlanId:String(ea?.planId||"").trim()||null}),hi.current=null)},[ea?.planId,ks,go,ns]),or=a.useCallback(async l=>{const h=Dn(nf);if(!Ht)return cl(null),wn(null),li(null),vo("unknown"),Ea(!1),ko(null),af(h,{identityKey:Vt}),ki("billing"),ki("teamManagement"),null;const _=Ml();vs(!0),wn(null),Ea(Ro),ko(null);try{const ce=await VE(h,{identityKey:Vt,force:l?.force===!0}),pe=ce?.workspaceRole==="owner"||ce?.workspaceRole==="admin"||ce?.workspaceRole==="member"||ce?.workspaceRole==="read-only"?ce.workspaceRole:null,st=ce?.teamPlanMode==="team"||ce?.teamPlanMode==="personal"?ce.teamPlanMode:"unknown";return cl(ce),li(pe),vo(st),ko(null),Fn("account_profile_summary_resolved",{durationMs:Math.round(Ml()-_),planId:String(ce?.planId||"").trim()||null,gate:String(ce?.gate||"").trim()||null,teamManagementAllowed:ce?.teamManagementAllowed===!0}),ce}catch(ce){const pe=ce instanceof Error?ce.message:"Failed to load account summary.",st=!!gl.current;return wn(pe),st?ko(null):(li(null),vo("unknown"),ko(pe)),Fn("account_profile_summary_failed",{durationMs:Math.round(Ml()-_),error:pe,preservedSummary:st}),gl.current}finally{vs(!1),Ea(!1),ki("billing"),ki("teamManagement")}},[Vt,Ro,Ht,ki,Dn]),Wd=a.useCallback(l=>{cl(l);const h=l?.workspaceRole==="owner"||l?.workspaceRole==="admin"||l?.workspaceRole==="member"||l?.workspaceRole==="read-only"?l.workspaceRole:null,_=l?.teamPlanMode==="team"||l?.teamPlanMode==="personal"?l.teamPlanMode:"unknown";li(h),vo(_)},[]),uc=a.useMemo(()=>{const l=String(ea?.entitlementState||"").trim().toLowerCase();return pf.has(l)},[ea?.entitlementState]),Hu=a.useCallback(async()=>{const l=new URLSearchParams;l.set("screen","plans"),l.set("interval",fi);const h=String(ea?.planId||"").trim(),_=String(ea?.planVersionId||"").trim();h&&l.set("planId",h),_&&l.set("planVersionId",_),s(`/?${l.toString()}`)},[ea?.planId,ea?.planVersionId,fi,s]),Gu=a.useCallback(async()=>{Kn(null),ll(null),To(!0);try{const l=await fetch(Dn("/api/taskforce/billing/portal-session"),{method:"POST",credentials:"include"}),h=await l.json().catch(()=>({}));if(!l.ok){Kn(String(h?.error||"Failed to create portal session."));return}const _=String(h?.url||"").trim();if(!_){Kn("Portal session did not return a redirect URL.");return}window.location.assign(_)}catch{Kn("Failed to open billing portal.")}finally{To(!1)}},[Dn]),Vu=a.useCallback(async()=>{Kn(null),ll(null),To(!0);try{const l=String(ea?.planVersionId||"").trim();if(!l){Kn("No active plan version is linked to this account.");return}const h=await fetch(Dn("/api/taskforce/billing/subscription"),{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({planVersionId:l,interval:fi})}),_=await h.json().catch(()=>({}));if(!h.ok){Kn(String(_?.error||"Failed to update subscription interval."));return}ll("Subscription updated."),af(Dn(nf),{identityKey:Vt}),await or()}catch{Kn("Failed to update subscription interval.")}finally{To(!1)}},[ea?.planVersionId,Vt,fi,or,Dn]);a.useEffect(()=>{!Ht||!Ln||or()},[Ln,Ht,or]),a.useEffect(()=>{!go&&!ns||or()},[or,go,ns]);const Si=a.useCallback(async()=>{if(Do){rc(!0),Ha(null);try{const l=await fetch("/api/taskforce/admin/users",{method:"GET",credentials:"include",headers:Sr()}),h=await l.json().catch(()=>({}));if(!l.ok){Ha(h?.error||"Failed to load workspace users.");return}const _=Array.isArray(h?.users)?h.users:[],ce={owner:0,admin:1,member:2,"read-only":3},pe=_.map(st=>({userId:String(st?.userId||""),email:String(st?.email||""),displayName:typeof st?.displayName=="string"?st.displayName:null,role:st?.role==="owner"||st?.role==="admin"||st?.role==="member"||st?.role==="read-only"?st.role:"member",permissionMode:st?.permissionMode==="read-only"?"read-only":"read-write",status:String(st?.status||"active"),disabled:st?.disabled===!0}));pe.sort((st,Pt)=>{const xn=(ce[st.role]??99)-(ce[Pt.role]??99);return xn!==0?xn:(st.displayName||st.email).localeCompare(Pt.displayName||Pt.email,void 0,{sensitivity:"base"})}),di(pe)}catch{Ha("Failed to load workspace users.")}finally{rc(!1)}}},[Do,Sr]),rs=a.useCallback(async l=>{if(!Do)return;const h=Math.max(0,Math.floor(l));wd(!0),Ha(null);try{const _=h*fl,ce=await fetch(`/api/taskforce/admin/workspace-audit-logs?limit=${fl}&offset=${_}`,{method:"GET",credentials:"include",headers:Sr()}),pe=await ce.json().catch(()=>({}));if(!ce.ok){Ha(pe?.error||"Failed to load workspace audit log.");return}const st=Array.isArray(pe?.events)?pe.events:[];Du(st.map(xn=>({id:String(xn?.id||""),action:String(xn?.action||""),actorUserId:String(xn?.actorUserId||""),actorRole:String(xn?.actorRole||""),createdAt:String(xn?.createdAt||xn?.ts||"")}))),ju(h);const Pt=Math.max(1,Number(pe?.pages||1));il(Pt),Pu(h+1<Pt)}catch{Ha("Failed to load workspace audit log.")}finally{wd(!1)}},[Do,Sr]),Eo=a.useCallback(async()=>{await Promise.all([Si(),rs(Co)])},[Si,rs,Co]),mc=a.useCallback((l="login")=>{const h=`${o.pathname}${o.search}${o.hash}`,_=!h||h==="/login"||!h.startsWith("/")?"/":h;Da(!1),zs(!1),oi(!1),s(`/login?mode=${l}&next=${encodeURIComponent(_)}`)},[o.hash,o.pathname,o.search,s]),Zs=a.useCallback(l=>{Da(!1),rl(!1);const h=new URLSearchParams({step:"workspace"});l?.intent==="create-workspace"&&h.set("intent","create-workspace"),s(`/setup?${h.toString()}`,{replace:!0})},[s]),pc=a.useCallback(async()=>{if(oc)return;if(!Ht){f();return}const l=await or({force:!0}),h=String(l?.entitlementState||"").trim().toLowerCase();if(pf.has(h)){Io(!0);try{const _=await e.continueAfterCommercialOnboarding();if(!_.success){nt(_.error||"Unable to finish onboarding.","error"),_.destination==="login"&&s("/login",{replace:!0});return}if(_.destination==="setup"){Zs();return}f()}finally{Io(!1)}}},[f,Ht,or,s,Zs,oc,e,nt]),xl=a.useCallback(async l=>{if(!(!l||ec)){ii(""),yd(!0);try{const h=await Ca(l);if(!h.success){if(h.code==="WORKSPACE_NOT_FOUND"||h.code==="WORKSPACE_ID_REQUIRED"){Zs();return}ii(h.error||"Failed to switch workspace.");return}await ct(!0),Da(!1)}finally{yd(!1)}}},[Ca,ec,ct,Zs]),fc=a.useCallback(async()=>{Da(!1),vd(!0),ci("members"),((await or())?.teamManagementAllowed??ks)&&(await Si(),await rs(0))},[ks,or,rs,Si]),wi=a.useCallback(async(l,h)=>{Ha(null),So(l);try{const _=await h(),ce=await _.json().catch(()=>({}));if(!_.ok){Ha(ce?.error||"Team management action failed.");return}await Eo()}catch{Ha("Team management action failed.")}finally{So(null)}},[Eo]),Zu=a.useCallback(async()=>{const l=ys.trim();if(l){mi(!0),Ha(null),ol(null);try{const h=await fetch("/api/taskforce/admin/users/invite",{method:"POST",headers:{"Content-Type":"application/json",...Sr()},credentials:"include",body:JSON.stringify({workspaceId:Ss,email:l,role:bo,permissionMode:bo==="member"?xo:"read-write"})}),_=await h.json().catch(()=>({}));if(!h.ok){Ha(_?.error||"Failed to send invite.");return}wo(""),_?.inviteEmailSent===!1?ol(`Invite created, but email delivery failed${_?.inviteEmailError?`: ${String(_.inviteEmailError)}`:"."}`):ol("Invite sent."),await Eo()}catch{Ha("Failed to send invite.")}finally{mi(!1)}}},[Dt,Eo,Sr,ys,xo,bo]),_l=a.useMemo(()=>dt.trim().length>0,[dt]),qu=a.useMemo(()=>Hs.filter(l=>l.status==="invited"),[Hs]),Cl=a.useMemo(()=>{const l=Mt.length!==S.length,h=Ft.length!==Ve.length,_=Bt.length!==ot.length,ce=oe.length!==Qs.length,pe=mn.length!==Qt.length,st=Nn.length>0,Pt=yr.length>0;return l||h||_||ce||pe||st||Pt},[S.length,Ve.length,Qt.length,mn.length,Mt.length,Bt.length,oe.length,Ft.length,ot.length,Nn,yr]),Fd=a.useMemo(()=>Qr.length!==su.length||en.length!==ou.length,[en.length,Qr.length]),Al=qn,ws=a.useMemo(()=>_M(Al),[Al]),Tl=a.useMemo(()=>{switch(ws.filterBar.kind){case"task-filters":return Cl;case"document-filters":return Fd;default:return!1}},[Fd,Cl,ws.filterBar.kind]),Od=_l||Cl,hc=Rt==="archived"?va.length:Rt==="deleted"?ka.length:ie.length,Ku=Rt==="archived"?lo.length:Rt==="deleted"?zi.length:e.filteredTasks.length,Yu=Od?`${Ku}/${hc}`:`${hc}`,Ju=Od?`${Rt.charAt(0).toUpperCase()+Rt.slice(1)} tasks matching current filters`:`${Rt.charAt(0).toUpperCase()+Rt.slice(1)} tasks`,Xu=zt==="local"&&Ht,Po=a.useCallback(l=>{if(!l)return"Never";const h=new Date(l);return Number.isNaN(h.getTime())?"Never":h.toLocaleString()},[]),gc=a.useMemo(()=>Po(rn),[Po,rn]),Il=a.useMemo(()=>Po(Xt),[Po,Xt]),Nl=a.useMemo(()=>Po(on),[Po,on]),$d=Xc||Wa||kn||"None",bs=a.useMemo(()=>HE({runtimeMode:zt,isAuthenticated:Ht,workspaceSyncStatus:sa,workspaceCloudSyncEnabled:ra,workspaceSyncSummary:On,workspaceSyncRecommendedAction:ua,workspaceSyncError:$d}),[zt,Ht,sa,ra,On,ua,$d]),Ud=bs.lastError,[p,z]=a.useState(bs.status),ee=a.useMemo(()=>{if(gs)return"Repairing";if($n&&Yn==="error")return"Recovering";switch(Yn){case"provision-local":return"Initial cloud upload";case"attach-cloud":return"Initial cloud pull";case"active":return"Active";case"error":return"Error";default:return"Idle"}},[Yn,gs]),Y=fn(),et=a.useMemo(()=>[{label:"AI profile snapshot",value:`${Y.aiProfileSnapshotCount} local profile${Y.aiProfileSnapshotCount===1?"":"s"}`},{label:"AI profile raw response",value:`${Y.aiProfileSnapshotRawCount} from route`},{label:"Last pushed AI profiles",value:`${Y.lastPushedAiProfileCount} tracked`},{label:"AI watermark map",value:`${Y.lastPushedAiProfileWatermarkCount} tracked`},{label:"Document snapshot",value:`${Y.documentSnapshotCount} local doc${Y.documentSnapshotCount===1?"":"s"}`},{label:"Asset snapshot",value:`${Y.assetSnapshotCount} local asset${Y.assetSnapshotCount===1?"":"s"}`},{label:"Queued full AI sync",value:Y.forceFullAiProfilePushQueued?"Yes":"No"},{label:"AI snapshot last fetch",value:Y.aiProfileSnapshotLastFetchAt?new Date(Y.aiProfileSnapshotLastFetchAt).toLocaleString():"Never"},{label:"AI snapshot fetch error",value:Y.aiProfileSnapshotLastFetchError||"None"},{label:"AI snapshot skip reason",value:Y.aiProfileSnapshotLastSkipReason||"None"}],[Y]),Oe=bs.actionable&&sa==="syncing"&&Yn==="active"&&Jn===0;a.useEffect(()=>{if(!Oe){z(bs.status);return}const l=window.setTimeout(()=>{z(bs.status)},1200);return()=>window.clearTimeout(l)},[bs.status,Oe]);const Je=a.useCallback(l=>{const h=typeof l.occurredAt=="string"&&l.occurredAt.trim().length>0?l.occurredAt:"unknown-time",_=typeof l.eventType=="string"&&l.eventType.trim().length>0?l.eventType.trim():"sync",ce=l.status==="error"?"failed":"succeeded",pe=Number(l.changeCount),st=Number.isFinite(pe)?` (${Math.max(0,Math.floor(pe))} change${Math.floor(pe)===1?"":"s"})`:"",Pt=Number(l.requestMs),xn=Number.isFinite(Pt)?` in ${Math.max(0,Math.floor(Pt))}ms`:"",an=Number(l.statusCode),ss=Number.isFinite(an)?` [${Math.floor(an)}]`:"",Rl=typeof l.errorMessage=="string"&&l.errorMessage.trim().length>0?`: ${l.errorMessage.trim()}`:"";return`${h} ${_} ${ce}${st}${xn}${ss}${Rl}`},[]),bn=a.useMemo(()=>fd&&Sa.length===0?[{key:"loading",text:"Loading recent sync events...",tone:"muted"}]:tl?[{key:"error",text:tl,tone:"error"}]:Sa.length===0?[{key:"empty",text:"No recent sync events recorded.",tone:"muted"}]:Sa.map((l,h)=>({key:Nc(l,h),text:Je(l),tone:l.status==="error"?"error":"default"})),[Je,Sa,tl,fd]),vn=a.useMemo(()=>tL(Sa),[Sa]),wa=a.useMemo(()=>nL(Sa),[Sa]),Dr=a.useMemo(()=>wa.map((l,h)=>{const _=l.details&&typeof l.details=="object"?l.details:null,ce=String(_?.path||"").trim(),pe=String(_?.referenceLabel||"").trim(),st=String(_?.taskTitle||_?.existingTaskTitle||"").trim(),Pt=Number(_?.existingReferenceNumber),xn=Number(_?.incomingReferenceNumber),an=ce||st||pe||`Mismatch ${h+1}`,ss=Number.isFinite(Pt)||Number.isFinite(xn)?`Existing ${Number.isFinite(Pt)?Pt:"?"} vs incoming ${Number.isFinite(xn)?xn:"?"}`:pe?`Both claimed ${pe}`:null;return{key:Nc(l,h),pathLabel:an,refsLabel:ss}}),[wa]);a.useLayoutEffect(()=>{const l=al.current,h=nl.current;if(!l||!h)return;const _=h.scrollHeight-l.scrollHeight;h.scrollTop=l.scrollTop+Math.max(0,_),al.current=null},[Sa]);const Ga=a.useCallback(async()=>{const l=await fetch(`/api/taskforce/sync/events?workspace_id=${encodeURIComponent(Dt)}&limit=15`,{method:"GET",credentials:"include"});if(!l.ok)throw new Error(`Failed to load sync events (${l.status})`);const h=await l.json().catch(()=>({}));return Array.isArray(h?.events)?h.events.filter(_=>_&&typeof _=="object"):[]},[Dt]);a.useEffect(()=>{if(!Yc)return;let l=!1;const h=Sa.length===0;return h&&hd(!0),Ga().then(_=>{if(l)return;const ce=nl.current;al.current=ce&&ce.scrollTop>8?{scrollTop:ce.scrollTop,scrollHeight:ce.scrollHeight}:null,el(pe=>{const st=pe.length===0?_:QM(pe,_,15);return eL(pe,st)?pe:st}),gd(null)}).catch(_=>{if(l)return;const ce=_ instanceof Error&&_.message.trim().length>0?_.message.trim():"Unable to load recent sync events.";gd(ce),h&&el([])}).finally(()=>{l||h&&hd(!1)}),()=>{l=!0}},[Yc,Ga,Sa.length,on,Xt,Tn,sa]);const ir=a.useMemo(()=>{switch(p){case"off":return{label:"Off",icon:"off",color:"#94a3b8",border:"rgba(148, 163, 184, 0.35)",background:"rgba(148, 163, 184, 0.12)"};case"syncing":return{label:"Syncing",icon:"cloud",color:"#60a5fa",border:"rgba(96, 165, 250, 0.35)",background:"rgba(59, 130, 246, 0.12)"};case"attention":return{label:"Needs Attention",icon:"cloud",color:"#fda4af",border:"rgba(253, 164, 175, 0.4)",background:"rgba(239, 68, 68, 0.12)"};default:return{label:"Healthy",icon:"cloud",color:"#86efac",border:"rgba(134, 239, 172, 0.4)",background:"rgba(34, 197, 94, 0.12)"}}},[p]),zd=a.useCallback(async()=>{const l=["Taskforce Sync Manager",`Workspace ID: ${Dt}`,`Status: ${ir.label}`,`Summary: ${bs.summary}`,`Last successful sync: ${gc}`,`Last pull from cloud: ${Il}`,`Last push to cloud: ${Nl}`,`Last error at: ${Y.lastErrorAt?new Date(Y.lastErrorAt).toLocaleString():"Never"}`,`Pending local changes: ${Jn}`,`Last error: ${Ud}`,`Sync stage: ${ee}`,`AI profile snapshot: ${Y.aiProfileSnapshotCount}`,`AI profile raw response: ${Y.aiProfileSnapshotRawCount}`,`Last pushed AI profiles tracked: ${Y.lastPushedAiProfileCount}`,`AI profile watermarks tracked: ${Y.lastPushedAiProfileWatermarkCount}`,`AI snapshot last fetch: ${Y.aiProfileSnapshotLastFetchAt?new Date(Y.aiProfileSnapshotLastFetchAt).toLocaleString():"Never"}`,`AI snapshot fetch error: ${Y.aiProfileSnapshotLastFetchError||"None"}`,`AI snapshot skip reason: ${Y.aiProfileSnapshotLastSkipReason||"None"}`,`Document snapshot: ${Y.documentSnapshotCount}`,`Asset snapshot: ${Y.assetSnapshotCount}`,`Reference mismatches detected: ${vn}`,`Queued full AI sync: ${Y.forceFullAiProfilePushQueued?"Yes":"No"}`];try{const _=(Sa.length>0?Sa:await Ga()).map(pe=>Je(pe)),ce=[...l,"","Recent sync events",..._.length>0?_:["No recent sync events recorded."]].join(`
|
|
6
|
-
`);await navigator.clipboard.writeText(ce),Qi(!0),window.setTimeout(()=>{Qi(!1)},1800),nt("Sync details copied to clipboard.","success")}catch{Qi(!1),nt("Failed to copy sync details.","error")}},[Dt,ir.label,bs.summary,gc,Il,Nl,Y,Jn,Ud,ee,vn,nt,Sa,Ga,Je]),Hd=a.useCallback(async()=>{pd(!1),Ji(!0);try{await ma()}finally{Ji(!1)}},[ma]),Uh=a.useCallback(()=>{if(!gs){if($n){pd(!0);return}Hd()}},[Hd,$n,gs]);a.useEffect(()=>{Xi&&($n||gs||Hd())},[Hd,$n,gs,Xi]);const ip=a.useMemo(()=>Fl($a)||new Date,[$a]),bi=a.useMemo(()=>$m(ip,_t),[ip,_t]),qs=a.useMemo(()=>{const l={mon:"",tue:"",wed:"",thu:"",fri:"",sat:"",sun:""};return mf.forEach(h=>{const _=OM(h,_t);l[h]=bc(Fh(bi,_))}),l},[bi,_t]),cp=a.useCallback(l=>{const h=Fl(l);if(!h)return qs.mon;const _=h.getDay();return qs[_===1?"mon":_===2?"tue":_===3?"wed":_===4?"thu":_===5?"fri":_===6?tr?"sat":"fri":tr?"sun":"fri"]||qs.mon},[qs,tr]),zh=a.useCallback(async()=>{if(!(Us||ni.length===0)){ai(!0);try{for(const l of ni){const h=l.scheduledDate||l.dueDate||Hn,_=cp(h);await J(l.id,{scheduledDate:_,scheduledWeekKey:$M(_),orderInDay:null})}await ct(!0)}finally{ai(!1)}}},[Us,ni,Hn,cp,J,ct]),Hh=a.useCallback(async()=>{if(!(Us||$s.length===0)){ai(!0);try{for(const l of $s)await J(l.id,{scheduledDate:null,scheduledWeekKey:null,orderInDay:null});await ct(!0)}finally{ai(!1)}}},[Us,$s,J,ct]),Gh=a.useMemo(()=>Cc(bi,{month:"short",day:"numeric",year:"numeric"},ro),[bi,ro]),lp=a.useMemo(()=>{const _=(tr?_t==="sunday"?["sun","mon","tue","wed","thu","fri","sat"]:mf:["mon","tue","wed","thu","fri"]).map(pe=>{const st=Fl(qs[pe])||bi,Pt=qs[pe],xn=pe==="sat"||pe==="sun";return{value:pe,label:`${FM[pe]} ${Cc(st,{month:"short",day:"numeric"},ro)}`,color:xn?"#1e3a8a":"#3b82f6",icon:"Calendar",date:Pt,isPast:Pt<Hn,isSelected:Pt===$a,isWeekend:xn}}),ce=fo.length>0;return[...ps?[{value:"backlog",label:"Backlog",color:"#64748b",icon:"Inbox"}]:[],...ce?[{value:"expired",label:"Expired",color:"#ef4444",icon:"AlertTriangle"}]:[],..._]},[tr,ps,qs,bi,fo.length,Hn,$a,_t,ro]),dp=a.useMemo(()=>{switch(v){case"category":return S;case"type":return(Ve||[]).map(l=>({...l,icon:l.icon||hu[l.value]?.icon,color:l.color||hu[l.value]?.color}));case"priority":return ot;case"complexity":return[{value:1,label:"Tiny",icon:"Gauge",color:"#10b981"},{value:2,label:"Low",icon:"Gauge",color:"#14b8a6"},{value:3,label:"Medium",icon:"Gauge",color:"#3b82f6"},{value:4,label:"High",icon:"Gauge",color:"#8b5cf6"},{value:5,label:"Epic",icon:"Gauge",color:"#d946ef"}];case"approach":return jt;case"assignee":return Qt.map(l=>({value:l.value,label:l.label,icon:l.icon==="HelpCircle"?"Circle":l.icon,color:l.color}));case"status":return[...Qs.filter(l=>l.value!=="done"&&l.value!=="cancelled"),{value:"completed",label:"Completed",icon:$l("done").icon,color:$l("done").color}];case"schedule":return lp;default:return S}},[v,S,Ve,ot,jt,Qt,lp]),Vh=t.jsxs("div",{className:lt.accountMenuWrap,ref:Td,children:[t.jsx("button",{className:`tf-control-icon ${lt.avatarBtn}`,onClick:()=>{Da(l=>{const h=!l;return h?Bd("account_menu"):(hi.current=null,hl.current={billing:!1,teamManagement:!1}),h})},title:Ht?"Account":"Account (Not signed in)","aria-label":Ht?"Account":"Account (Not signed in)","aria-haspopup":"menu","aria-expanded":ns,children:t.jsx("span",{className:lt.avatarBadge,"aria-hidden":"true",children:jd?t.jsx("img",{src:Sl,alt:"",className:lt.avatarImage}):lc||t.jsx(Lo,{size:14,className:lt.avatarIcon})})}),ns&&t.jsxs("div",{className:lt.accountMenu,role:"menu","aria-label":"Account menu",children:[t.jsxs("div",{className:lt.accountMenuSection,children:[t.jsx("div",{className:lt.accountMenuSectionLabel,children:"Account"}),t.jsx("div",{className:lt.accountMenuHint,children:bl?"Checking sign-in status...":Ht?t.jsx(t.Fragment,{children:Id?t.jsx(t.Fragment,{children:t.jsxs("span",{className:lt.accountIdentityBlock,children:[t.jsx("span",{className:lt.accountIdentityEmail,children:Vs}),Nd&&gi&&t.jsxs("span",{className:lt.accountIdentityMetaLine,children:[t.jsx("span",{className:lt.accountIdentityMetaLabel,children:"Email"}),t.jsx("span",{className:lt.accountIdentityMetaValue,children:yi})]}),xd?t.jsxs("span",{className:lt.accountIdentityMetaLine,children:[t.jsx("span",{className:lt.accountIdentityMetaLabel,children:"Subscription"}),t.jsx("span",{className:lt.accountIdentityMetaValue,children:"Loading…"})]}):Dd?t.jsxs("button",{"aria-label":`Subscription ${dc}`,className:`${lt.accountIdentityMetaLine} ${lt.accountIdentityMetaAction}`,onClick:()=>{Da(!1),u()},type:"button",children:[t.jsx("span",{className:lt.accountIdentityMetaLabel,children:"Subscription"}),t.jsx("span",{className:lt.accountIdentityMetaValue,children:dc})]}):Ao?t.jsxs("span",{className:lt.accountIdentityMetaLine,children:[t.jsx("span",{className:lt.accountIdentityMetaLabel,children:"Subscription"}),t.jsx("span",{className:lt.accountIdentityMetaValue,children:"Unavailable"})]}):null,t.jsxs("span",{className:lt.accountIdentityMetaLine,children:[t.jsx("span",{className:lt.accountIdentityMetaLabel,children:"Runtime"}),t.jsx("span",{className:lt.accountIdentityMetaValue,children:Ed})]}),t.jsxs("span",{className:lt.accountIdentityMetaLine,children:[t.jsx("span",{className:lt.accountIdentityMetaLabel,children:"Environment"}),t.jsx("span",{className:lt.accountIdentityMetaValue,children:Pd})]})]})}):"Signed in"}):"Not signed in"})]}),Ou&&t.jsxs("div",{className:lt.accountMenuSection,children:[t.jsx("div",{className:lt.accountMenuSectionLabel,children:"Workspaces (Owned + Invited)"}),pa.length===0&&t.jsx("div",{className:lt.accountMenuHint,children:"No workspaces found for this account yet."}),pa.map(l=>t.jsxs("button",{className:`${lt.accountMenuItem} ${l.id===Dt?lt.accountMenuItemActive:""}`,onClick:()=>xl(l.id),role:"menuitem",disabled:ec||l.id===Dt,title:l.description||l.name,children:[t.jsx(Ri,{size:15}),t.jsxs("span",{style:{display:"flex",flexDirection:"column",gap:"2px"},children:[t.jsx("span",{children:l.name}),t.jsx("span",{className:lt.accountMenuMeta,children:l.role})]})]},l.id)),t.jsxs("button",{className:lt.accountMenuItem,onClick:()=>{ii(""),rl(!0),Da(!1)},role:"menuitem",disabled:ec,children:[t.jsx(is,{size:15}),"Create Workspace"]}),tc&&t.jsx("div",{className:lt.accountMenuError,children:tc})]}),Nu?t.jsx("div",{className:lt.accountMenuHint,children:"Resolving team management access..."}):ks?t.jsxs("button",{className:lt.accountMenuItem,onClick:()=>{fc()},role:"menuitem",children:[t.jsx(Ng,{size:15}),"Team Management"]}):za?t.jsx("div",{className:lt.accountMenuHint,children:"Team Management unavailable right now."}):null,Ht&&t.jsxs("button",{className:lt.accountMenuItem,onClick:()=>{Da(!1),Ki(!0)},role:"menuitem",children:[t.jsx(Lo,{size:15}),"Edit Profile"]}),t.jsxs("button",{className:lt.accountMenuItem,onClick:()=>{Da(!1),u()},role:"menuitem",children:[t.jsx(Im,{size:15}),"Plans"]}),t.jsxs("button",{className:lt.accountMenuItem,onClick:()=>{Da(!1),Bd("account_hub"),zs(!0)},role:"menuitem",children:[t.jsx(Lo,{size:15}),"Account Hub"]}),t.jsxs("button",{className:lt.accountMenuItem,onClick:()=>{Da(!1),ho(!0)},role:"menuitem",children:[t.jsx(ji,{size:15}),"Help & Tutorial"]}),zt==="local"&&!Ht&&!bl&&t.jsxs("button",{className:lt.accountMenuItem,onClick:()=>{mc("login")},role:"menuitem",children:[t.jsx(Lo,{size:15}),"Sign In / Register"]}),Ht&&t.jsxs("button",{className:lt.accountMenuItem,onClick:async()=>{Da(!1),await Ta(),zt==="cloud"&&s("/login",{replace:!0})},role:"menuitem",children:[t.jsx(jg,{size:15}),"Sign Out"]})]})]}),up=a.useCallback(()=>{N(l=>l==="show"?"collapse":l==="collapse"?"hide":"show")},[N]),mp=a.useCallback(()=>{O(),I("tasks"),x("add")},[O,x,I]),Zh=a.useCallback(l=>{const h=e.workstreams.find(_=>_.id===l);O(),B(Xs(h)||l),I("tasks"),x("add")},[e.workstreams,O,x,I,B]),pp=a.useCallback(l=>{Jr(l),Kr(!1),Br(null),nr(!1),Xr(""),Ls(""),fs("");const h=l.entityType==="workstream"&&Nn&&kt.initiativeById.get(Nn)||null;Or(h?os(h):""),ga(null)},[kt.initiativeById,Nn]),fp=a.useCallback((l,h)=>{Br(l),nr(!1),Xr(""),Ls(""),fs("");const _=l.entityType==="workstream"&&((h?kt.initiativeById.get(h):null)||Nn&&kt.initiativeById.get(Nn))||null;Or(_?os(_):""),ga(null)},[kt.initiativeById,Nn]),Qu=a.useCallback(()=>{Jr(null),Xr(""),Ls(""),fs(""),Or("")},[]),hp=a.useCallback(()=>{Br(null),Xr(""),Ls(""),fs(""),Or("")},[]),qh=a.useCallback(async()=>{const l=Ps||ar;if(!l)return;const h=!!Ps,_=Wi.trim()||null;try{if(l.entityType==="initiative")if(l.mode==="edit")await e.updateInitiative(l.targetId,{title:Ms.trim()||"Untitled Initiative",description:Wr.trim()||null,ownerId:_}),Lr({type:"initiative",id:l.targetId}),ga(null),nt("Initiative updated","success");else{const ce=await e.createInitiative({title:Ms.trim()||"Untitled Initiative",description:Wr.trim()||null,ownerId:_});Lr({type:"initiative",id:ce.id}),ga(null),nt("Initiative created","success")}else{const ce=Fr.trim(),pe=ce.length===0?null:fm(kt.initiatives,ce);if(ce.length>0&&!pe){nt("Initiative not found by that reference.","error");return}const st={title:Ms.trim()||"Untitled Workstream",description:Wr.trim()||null,ownerId:_,initiativeId:pe?.id||null};if(l.mode==="edit")await e.updateWorkstream(l.targetId,st),h?ga(l.targetId):(Lr({type:"workstream",id:l.targetId}),ga(null)),nt("Workstream updated","success");else{const Pt=await e.createWorkstream(st);h?ga(Pt.id):(Lr({type:"workstream",id:Pt.id}),ga(null)),nt("Workstream created","success")}}h?hp():Qu()}catch(ce){nt(ce instanceof Error?ce.message:"Failed to save planning item.","error")}},[Qu,hp,Wr,Fr,Wi,Ms,ar,Ps,kt.initiatives,e,nt]),Kh=a.useCallback(l=>{Yr(h=>{const _=new Set(h);return _.has(l)?_.delete(l):_.add(l),_})},[]),Yh=a.useCallback(l=>{Ua(h=>h===l?"":l),un("")},[]),Jh=a.useCallback((l,h)=>{un(_=>{const ce=_===l?"":l;return Ua(ce&&h||""),ce})},[]),Xh=a.useCallback(l=>{Jr(null),Br(null),Kr(!1),nr(!1),Lr(l?{type:"initiative",id:l}:null),ga(null)},[]),Qh=a.useCallback(l=>{Jr(null),Br(null),Kr(!1),nr(!1),Lr(l?{type:"workstream",id:l}:null),ga(null)},[]),eg=a.useCallback(l=>{Br(null),nr(!1),ga(l)},[]),em=a.useMemo(()=>{const l=new Map;return Qt.forEach(h=>{l.set(h.label,String(h.value))}),l},[Qt]),tm=a.useCallback((l,h)=>{if(l==="workstream"&&h){fp({mode:"create",entityType:"workstream"},h);return}if(pp({mode:"create",entityType:l}),l==="workstream"){const _=(h?kt.initiativeById.get(h):null)||(Nn?kt.initiativeById.get(Nn):null)||null;Or(_?os(_):"")}},[pp,fp,kt.initiativeById,Nn]),gp=a.useCallback((l,h)=>{if(l==="initiative"){const _=kt.initiativeById.get(h);if(!_)return;Jr({mode:"edit",entityType:"initiative",targetId:h}),Xr(_.title),Ls(_.description||""),fs(_.ownerLabel&&em.get(_.ownerLabel)||""),Or("")}else{const _=kt.workstreamById.get(h)||kt.standaloneWorkstreams.find(pe=>pe.id===h);if(!_)return;Jr({mode:"edit",entityType:"workstream",targetId:h}),Xr(_.title),Ls(_.description||""),fs(_.ownerLabel&&em.get(_.ownerLabel)||"");const ce=_.initiativeId&&kt.initiativeById.get(_.initiativeId)||null;Or(ce?os(ce):"")}ga(null)},[em,kt.initiativeById,kt.standaloneWorkstreams,kt.workstreamById]),Gd=a.useCallback(async(l,h)=>{const _=e.workstreams.find(Pt=>Pt.id===l);if(!_){nt("Workstream not found.","error");return}const ce=typeof h=="string"?h.trim():h===null?"":Fr.trim(),pe=ce.length===0?null:fm(kt.initiatives,ce);if(ce.length>0&&!pe){nt("Initiative not found by that reference.","error");return}const st=pe?.id||null;if((_.initiativeId||null)===st){nt(st?"Workstream already belongs to that initiative.":"Workstream is already standalone.","info");return}try{await e.updateWorkstream(l,{initiativeId:st}),Or(pe?os(pe):""),nt(st?"Initiative set":"Initiative removed","success")}catch{nt("Failed to set initiative.","error")}},[Fr,kt.initiatives,e,nt]),nm=a.useCallback(async(l,h)=>{const _=ei.get(l);if(!_){nt("Task not found.","error");return}const ce=h||null;if(kt.initiativeById.has(l)||kt.workstreamById.has(l)){nt("Only execution tasks can be moved into workstreams.","error");return}if(ce&&!kt.workstreamById.has(ce)){nt("Workstream not found.","error");return}if((_.workstreamId||null)===ce){nt(ce?"Task already belongs to that workstream.":"Task is already standalone.","info");return}try{const pe=await fetch(`/api/taskforce/task/${l}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({workstreamId:ce})});if(!pe.ok){const st=await pe.json().catch(()=>({}));nt(st?.error||"Failed to set workstream.","error");return}await pe.json().catch(()=>null),await ct(!0),nt(ce?"Workstream set":"Workstream removed","success")}catch{nt("Failed to set workstream.","error")}},[ct,ei,kt.initiativeById,kt.workstreamById,nt]),tg=a.useCallback(async(l,h)=>{const _=h.trim();if(!_){nt("Enter a task reference.","error");return}const ce=Wf(_),pe=Qo.find(st=>st.id===_||Cs(st)===_||ce!==null&&st.referenceNumber===ce);if(!pe){nt("Task not found by that reference.","error");return}await nm(pe.id,l)},[nm,Qo,nt]),ng=a.useCallback(async(l,h)=>{const _=h.trim();if(!_){nt("Enter a workstream reference.","error");return}const ce=kt.initiativeById.get(l);if(!ce){nt("Initiative not found.","error");return}const pe=ih(_),st=e.workstreams.find(Pt=>Pt.id===_||Xs(Pt)===_||pe!==null&&Pt.referenceNumber===pe);if(!st){nt("Workstream not found by that reference.","error");return}await Gd(st.id,os(ce))},[Gd,kt.initiativeById,e.workstreams,nt]),yp=a.useCallback(l=>{Ua(l),un("")},[]),vp=a.useCallback(l=>{un(l),Ua(l&&kt.workstreamInitiativeIds.get(l)||"")},[kt.workstreamInitiativeIds]),am=a.useCallback(l=>{const h=uf(l,Ws);if(h!==l){const _=Ws.find(ce=>ce.id===l)?.label||"That module";nt(`${_} is not available in this build yet.`,"error");return}I(h)},[nt,I,Ws]),kp=a.useCallback(()=>{if(qn==="tasks"&&gr){Ds(!1),Lr(null),ga(null),Jr(null);return}if(qn!=="tasks"){I("tasks"),Ds(!0);return}Ds(l=>!l)},[gr,qn,I]),ag=a.useCallback(l=>{I("tasks"),ze(l)},[ze,I]),rg=a.useCallback((l,h)=>{hs(l),qo(h?.sessionId??null),Ql(_=>_+1),I("annotate")},[I]),sg=a.useCallback(({target:l,sessionId:h})=>{hs(_=>!_&&!l||_&&l&&_.taskId===l.taskId&&_.taskReferenceLabel===l.taskReferenceLabel&&_.assetId===l.assetId&&_.imageReferenceLabel===l.imageReferenceLabel&&_.path===l.path&&_.displayName===l.displayName?_:l),qo(_=>_===h?_:h)},[]),Sp=a.useMemo(()=>[{value:"created",label:De("standalone.sortCreated")},{value:"updated",label:De("standalone.sortUpdated")},{value:"priority",label:De("standalone.sortPriority")},{value:"complexity",label:De("standalone.sortComplexity")},...uh(Ye,[...e.searchAgnosticTasks,...va])],[va,e.searchAgnosticTasks,Ye]),wp=a.useMemo(()=>[{value:"category",label:De("standalone.groupCategory")},{value:"type",label:De("standalone.groupType")},{value:"priority",label:De("standalone.groupPriority")},{value:"complexity",label:De("standalone.groupComplexity")},{value:"assignee",label:De("standalone.groupAssignee")},{value:"status",label:De("standalone.groupStatus")},{value:"schedule",label:De("standalone.groupSchedule")}],[]),bp=a.useMemo(()=>Ws.filter(l=>l.enabled),[Ws]),xp=a.useMemo(()=>[{key:"empty-columns",icon:b==="show"?t.jsx(Cp,{size:16}):b==="collapse"?t.jsx(Ap,{size:16}):t.jsx(Rg,{size:16}),title:De(b==="show"?"standalone.showEmptyColumns":b==="collapse"?"standalone.compressEmptyColumns":"standalone.hideEmptyColumns"),onClick:up,active:b!=="show"},{key:"compressed-cards",icon:Wn?t.jsx(bf,{size:16}):t.jsx(Dg,{size:16}),title:De(Wn?"standalone.expandCards":"standalone.compressCards"),onClick:()=>Nr(!Wn),active:Wn}],[Wn,up,b]),og=a.useMemo(()=>[{key:"filter-toggle",icon:t.jsx(xf,{size:16}),title:De("standalone.toggleFilters"),onClick:()=>Bi(!la),active:la,className:Tl?m.filterGlow:""}],[Tl,Bi,la]),ig=a.useMemo(()=>{switch(ws.filterBar.kind){case"task-filters":return t.jsx(XE,{categoryFilterOptions:Oc,typeFilterOptions:$c,priorities:ot,taxonomyDisplayLabels:xt,filterCategories:Mt,setFilterCategories:Nt,filterTypes:Ft,setFilterTypes:Yt,filterPriorities:Bt,setFilterPriorities:Jt,filterStatus:oe,setFilterStatus:te,filterAssignees:mn,setFilterAssignees:Pn,assigneeOptions:Qt,initiativeFilterOptions:Uc,selectedInitiativeId:Nn,setSelectedInitiativeId:yp,workstreamFilterOptions:zc,selectedWorkstreamId:yr,setSelectedWorkstreamId:vp,taskScope:Rt,setTaskScope:gn,showArchive:co,setShowArchive:rd,fetchArchive:sd,onDeleteAllDeleted:()=>{const l=ka.length;l===0||!window.confirm(`Permanently delete ${l} deleted task${l===1?"":"s"}? This cannot be undone.`)||at()},clearFilters:()=>{Ma(),Ua(""),un("")}});case"document-filters":return t.jsx(QE,{typeFilters:Qr,setTypeFilters:vr,attachmentFilters:en,setAttachmentFilters:cn,clearFilters:()=>{vr(su.map(l=>l.value)),cn(ou.map(l=>l.value))}});default:return t.jsx(YE,{})}},[Qt,Oc,Ma,ka.length,en,Qr,mn,Mt,Bt,oe,Ft,yp,vp,Uc,ot,Nn,yr,cn,vr,Pn,Nt,Jt,te,Yt,Ua,un,rd,gn,co,Rt,xt,$c,zc,ws.filterBar.kind,sd,at]),cg=a.useMemo(()=>[{key:"zen-toggle",icon:t.jsx(Eg,{size:16,fill:W?"currentColor":"none"}),title:De(W?"standalone.exitZenMode":"standalone.enterZenMode"),onClick:()=>M(),active:W}],[W,M]),lg=a.useMemo(()=>({search:t.jsx(qE,{value:dt,placeholder:De("standalone.searchPlaceholder"),active:_l,onChange:ut,onClear:()=>ut(""),clearTitle:De("standalone.clearSearchTitle")}),sort:t.jsx(sf,{label:t.jsxs(t.Fragment,{children:[t.jsx(Pg,{size:12})," ",De("standalone.sortLabel")]}),value:jn,options:Sp,onChange:l=>Gt(l),trailingAction:t.jsx("button",{className:`tf-control-icon ${m.sortDirectionBtn}`,onClick:()=>e.toggleSortOrder(),title:e.sortOrder==="desc"?De("standalone.sortDirectionDescTitle"):De("standalone.sortDirectionAscTitle"),children:e.sortOrder==="desc"?t.jsx(vf,{size:14}):t.jsx(kf,{size:14})})}),"divider-primary":t.jsx(of,{}),grouping:t.jsx(sf,{label:t.jsxs(t.Fragment,{children:[t.jsx(Im,{size:12})," ",De("standalone.groupLabel")]}),value:v,options:wp,onChange:l=>g(l)}),"divider-secondary":t.jsx(of,{}),"task-display-actions":t.jsx(wm,{actions:xp})}),[v,wp,am,_l,e,dt,g,ut,Gt,jn,Sp,xp,ws.moduleId]),dg=a.useMemo(()=>({"add-task":t.jsx(KE,{icon:t.jsx(is,{size:16}),label:De("standalone.addTask"),onClick:mp}),"add-document":null}),[mp]),jl=a.useMemo(()=>{const l={tasks:t.jsx(Og,{size:18}),docs:t.jsx(Nm,{size:18}),annotate:t.jsx(Fg,{size:18}),workflows:t.jsx(Wg,{size:18}),agents:t.jsx(tu,{size:18})};return t.jsxs("aside",{className:sn.workspaceToolRail,"aria-label":"Workspace tools",children:[t.jsxs("div",{className:sn.workspaceToolRailMain,children:[t.jsx("button",{type:"button",className:`${sn.workspaceToolButton} ${qn==="tasks"&&gr?sn.workspaceToolButtonActive:""}`.trim(),onClick:kp,title:qn==="tasks"&&gr?"Collapse planning trays":"Planning","aria-label":qn==="tasks"&&gr?"Collapse planning trays":"Planning",children:qn==="tasks"&&gr?t.jsx(xc,{size:18}):t.jsx(Mg,{size:18})}),t.jsx("div",{className:sn.workspaceToolRailDivider}),bp.map(h=>t.jsx("button",{type:"button",className:`${sn.workspaceToolButton} ${qn===h.id?sn.workspaceToolButtonActive:""}`.trim(),onClick:()=>am(h.id),title:h.label,"aria-label":h.label,children:l[h.id]},h.id))]}),t.jsxs("div",{className:sn.workspaceToolRailBottom,children:[t.jsx("div",{className:sn.workspaceToolRailDivider}),t.jsx("button",{type:"button",className:`${sn.workspaceToolButton} ${k==="settings"?sn.workspaceToolButtonActive:""}`.trim(),onClick:()=>{pn("general"),x("settings")},title:"Workspace Settings","aria-label":"Workspace Settings",children:t.jsx(Sf,{size:18})})]})]})},[k,am,kp,gr,qn,pn,x,bp]),rm=a.useRef(null),ug=t.jsx(yM,{open:gr,leftOffset:56,initiatives:kt.initiatives,standaloneWorkstreams:kt.standaloneWorkstreams,activeInitiativeId:Nn,activeWorkstreamId:yr,expandedInitiativeIds:Mc,detail:Hc,editor:ar,secondaryPane:Gc,assigneeOptions:Qt.map(l=>({value:String(l.value),label:l.label})),draftInitiativeSummary:id,draftTitle:Ms,draftDescription:Wr,draftOwner:Wi,draftInitiativeId:Fr,onChangeDraftTitle:Xr,onChangeDraftDescription:Ls,onChangeDraftOwner:fs,onChangeDraftInitiativeId:Or,onCollapseTreePane:()=>Ho(!0),onExpandTreePane:()=>Ho(!1),onCollapsePrimaryPane:()=>Kr(!0),onExpandPrimaryPane:()=>Kr(!1),onCollapseSecondaryPane:()=>nr(!0),onExpandSecondaryPane:()=>nr(!1),onBackFromSecondary:()=>{Br(null),ga(null)},treeCollapsed:Es,primaryCollapsed:so,secondaryCollapsed:Go,onCancelEditor:Qu,onSubmitEditor:qh,onCreateInitiative:()=>tm("initiative"),onCreateWorkstream:()=>tm("workstream"),onCreateTaskInWorkstream:Zh,onCreateWorkstreamInInitiative:l=>tm("workstream",l),onAssignInitiativeToWorkstream:Gd,onOpenTaskById:ze,onAttachTaskToWorkstreamByReference:tg,onAttachWorkstreamToInitiativeByReference:ng,onToggleInitiative:Kh,onSelectInitiative:Yh,onSelectWorkstream:Jh,onOpenInitiativeDetails:Xh,onOpenWorkstreamDetails:Qh,onOpenNestedWorkstreamDetails:eg,onEditInitiative:l=>gp("initiative",l),onEditWorkstream:l=>gp("workstream",l),onArchiveInitiative:l=>{e.archiveInitiative(l).then(()=>{nt("Initiative archived","success")}).catch(h=>{nt(h instanceof Error?h.message:"Failed to archive initiative.","error")})},onUnarchiveInitiative:l=>{e.unarchiveInitiative(l).then(()=>{nt("Initiative unarchived","success")}).catch(h=>{nt(h instanceof Error?h.message:"Failed to unarchive initiative.","error")})},onArchiveWorkstream:l=>{e.archiveWorkstream(l).then(()=>{nt("Workstream archived","success")}).catch(h=>{nt(h instanceof Error?h.message:"Failed to archive workstream.","error")})},onUnarchiveWorkstream:l=>{e.unarchiveWorkstream(l).then(()=>{nt("Workstream unarchived","success")}).catch(h=>{nt(h instanceof Error?h.message:"Failed to unarchive workstream.","error")})}}),mg=ws.headerSections.map(l=>{const h=lg[l];return h?t.jsx(pt.Fragment,{children:h},l):null}).filter(Boolean),pg=ws.primaryAction?dg[ws.primaryAction]:null;return t.jsxs("div",{className:`${sn.standaloneWrapper} ${W?m.zenModeEnabled:""}`,"data-theme":Fe,children:[t.jsx(ZE,{projectName:oa,currentWorkspaceId:Dt,runtimeMode:zt,theme:Fe,meta:i?null:t.jsxs(t.Fragment,{children:[t.jsx("span",{className:m.taskCountBadge,title:Ju,children:Yu}),zr&&zr!=="anonymous"&&t.jsxs(t.Fragment,{children:[t.jsxs("span",{className:m.taskCountBadge,title:"Tasks assigned to me",children:[t.jsx(Lo,{size:13,className:m.taskCountBadgeIcon,"aria-hidden":"true"}),qc]}),t.jsxs("span",{className:`${m.taskCountBadge} ${Zi>0?m.taskCountBadgeAlert:""}`.trim(),title:"Tasks overdue",children:[t.jsx(Lg,{size:13,className:m.taskCountBadgeIcon,"aria-hidden":"true"}),Zi]})]}),Xu&&t.jsx("button",{className:"tf-control-icon",onClick:()=>oi(!0),title:`Sync manager: ${ir.label} | Last success: ${gc}`,style:{marginLeft:"6px",height:"24px",width:"24px",padding:0,borderRadius:"999px",border:`1px solid ${ir.border}`,background:ir.background,color:ir.color,display:"inline-flex",alignItems:"center",justifyContent:"center"},children:ir.icon==="off"?t.jsx(Bg,{size:16}):t.jsx(_f,{size:16})})]}),actions:t.jsxs(t.Fragment,{children:[i&&t.jsx("button",{className:"tf-control-icon",onClick:()=>{pc()},title:Ht&&!uc?"Choose a plan to continue.":"Continue to Taskforce",disabled:oc||Ht&&!uc,children:uc?"Take Me to Taskforce":"Back"}),!i&&t.jsxs(t.Fragment,{children:[mg,pg]}),!i&&t.jsx(wm,{actions:cg}),!i&&t.jsx(wm,{actions:og}),Vh]})}),t.jsx(Dh,{notice:ft,onDismiss:Kt}),dn&&t.jsx("div",{className:fe.authBlockedBanner,children:"Authentication required for this environment. Use the Account menu to sign in."}),!i&&la&&ig,i?t.jsx("div",{className:`${sn.standalonePage} ${sn.standaloneContent} ${m.appScrollbar} tf-scrollbar`,style:{position:"relative",display:"flex",flex:1,minHeight:0,overflowY:"auto",overflowX:"hidden",scrollbarGutter:"stable"},children:t.jsx(a.Suspense,{fallback:t.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1},children:t.jsx(Pa,{size:20,className:m.spinner})}),children:t.jsx(KM,{...e,currentTheme:Fe,projectName:oa,currentWorkspaceId:Dt,authUserId:Vt,apiBaseUrl:wl,connectedEnvironmentSource:e.config?.cloudAuthBaseUrl||e.config?.apiBaseUrl||"",resolveCloudAuthUrl:Dn,embedded:!0,shellOwnsScroll:!0,onAccountProfileSummaryChange:Wd,onContinueToTaskforce:pc,continueBusy:oc})})}):qn==="docs"&&Fs?t.jsxs("div",{className:`${sn.standalonePage} ${sn.standaloneContent}`,style:{position:"relative",display:"flex",flex:1,minHeight:0,overflow:"hidden",paddingLeft:"56px"},children:[jl,t.jsx(a.Suspense,{fallback:t.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1},children:t.jsx(Pa,{size:20,className:m.spinner})}),children:t.jsx(VM,{tasks:ie,runtimeMode:zt,apiBaseUrl:e.config?.apiBaseUrl||"",cloudAuthBaseUrl:e.config?.cloudAuthBaseUrl||"",typeFilters:Qr,attachmentFilters:en,onTypeFiltersChange:vr,onAttachmentFiltersChange:cn,requestedDocPath:es,requestedDocAssetId:Zo,onRequestedDocHandled:()=>{Vo(null),Fi(null)},enableTaskGeneration:!0})})]}):qn==="annotate"&&Fc?t.jsxs("div",{className:`${sn.standalonePage} ${sn.standaloneContent}`,style:{position:"relative",display:"flex",flex:1,minHeight:0,overflow:"hidden",paddingLeft:"56px"},children:[jl,t.jsx(a.Suspense,{fallback:t.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1},children:t.jsx(Pa,{size:20,className:m.spinner})}),children:t.jsx(GM,{runtimeMode:zt,apiBaseUrl:e.config?.apiBaseUrl||"",cloudAuthBaseUrl:e.config?.cloudAuthBaseUrl||"",workspaceId:Dt,sessionLoadReady:Wc,requestedTarget:ya,requestedSessionId:hn,requestedOpenVersion:Xl,resolveTaskReferenceLabel:Jo,resolveImageReferenceLabel:uo,onOpenTarget:rg,onContextChange:sg,onBackToTask:ag})})]}):qn==="workflows"?t.jsxs("div",{className:`${sn.standalonePage} ${sn.standaloneContent}`,style:{position:"relative",display:"flex",flex:1,minHeight:0,overflow:"hidden",paddingLeft:"56px"},children:[jl,t.jsx(a.Suspense,{fallback:t.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1},children:t.jsx(Pa,{size:20,className:m.spinner})}),children:t.jsx(ZM,{availableWorkflows:Et,availableEnvironments:hr,exportEnvironment:Xn,exportWorkflowsPath:e.exportWorkflowsPath,exportingResource:Be,exportResult:fr,onExportEnvironmentChange:e.setExportEnvironment,onExportWorkflows:_n,onRefreshWorkflows:nn,onFetchWorkflowTemplate:e.fetchWorkflowTemplate,onFetchWorkflowOverrideNames:e.fetchWorkflowOverrideNames,onSaveWorkflowTemplateDraft:e.saveWorkflowTemplateDraft,onResetWorkflowTemplateDraft:e.resetWorkflowTemplateDraft})})]}):qn==="agents"?t.jsxs("div",{className:`${sn.standalonePage} ${sn.standaloneContent}`,style:{position:"relative",display:"flex",flex:1,minHeight:0,overflow:"hidden",paddingLeft:"56px"},children:[jl,t.jsx(a.Suspense,{fallback:t.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1},children:t.jsx(Pa,{size:20,className:m.spinner})}),children:t.jsx(qM,{workspaceId:Dt})})]}):t.jsxs("div",{className:`${sn.standalonePage} ${sn.standaloneContent} `,style:{position:"relative",opacity:e.loadingTasks?.7:1,transition:"opacity 0.2s ease, padding 220ms cubic-bezier(0.4, 0, 0.2, 1)",display:"flex",flex:1,minHeight:0,paddingLeft:gr?`${56+Vc+6}px`:"62px",paddingRight:v==="schedule"&&zo?`${Um}px`:0},children:[jl,t.jsx("div",{ref:rm,style:{position:"absolute",inset:0,zIndex:35,pointerEvents:"none"}}),t.jsxs("div",{style:{position:"relative",width:"100%",minWidth:0,flex:1,minHeight:0,display:"flex",flexDirection:"column",overflow:"hidden"},children:[e.loadingTasks&&po.length>0&&t.jsx("div",{className:m.boardRefreshIndicator,"aria-live":"polite","aria-label":"Refreshing tasks",children:t.jsx(Pa,{size:14,className:m.spinner})}),t.jsx(OE,{tasks:Zc,allTasks:cd,columns:dp,groupBy:v,scheduleDates:qs,searchQuery:dt,filterCategories:Mt,filterTypes:Ft,filterPriorities:Bt,filterStatus:oe,filterAssignees:mn,assigneeOptions:Qt,scheduleFilteredTaskIds:Array.from(od),copiedId:it,taxonomies:Ye,types:Ve,priorities:ot,onUpdateTask:J,onTaskClick:l=>T(l),onOpenTaskById:ze,onCopyId:q,onToggleInProgress:Se,onToggleReview:tt,onToggleComplete:wt,onToggleCancel:_e,onSetStatus:si,onArchiveTask:$t,onAddTaskToColumn:Kc,showTaskCardStatusLabel:Ee,onScheduleDaySelected:l=>{Rc(l);const h=Fl(l);h&&Ec(`${h.getFullYear()}-${String(h.getMonth()+1).padStart(2,"0")}`)},persistedScrollLeft:v==="schedule"?js:void 0,onScrollLeftChange:l=>{v==="schedule"&&Li(l)},emptyColumnMode:b,categories:S,compressed:Wn,readOnlyMode:Rt==="deleted"?"deleted":Rt==="archived"?"archived":null,recentlyChangedTaskIds:e.recentlyChangedTaskIds,sortBy:jn,sortOrder:e.sortOrder,planningDropTargets:rm.current?Ni.createPortal(ug,rm.current):null,onAssignTaskToWorkstream:nm,onAssignWorkstreamToInitiative:Gd,workstreams:e.workstreams,initiatives:e.initiatives,onUnarchive:l=>{if(Rt==="deleted"){const h=mo.get(l);if(!h)return;Ie(h.id);return}Ce(l)},onDelete:l=>{if(Rt==="deleted"){const h=mo.get(l);if(!h||!window.confirm("Permanently delete this task? This cannot be undone."))return;je(h.id);return}ne(l)}},`${v}-${dp.map(l=>String(l.value)).join("|")}-${qs.mon}`),v==="schedule"&&!zo&&t.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>{Lr(null),qr(!0)},title:"Show Schedule Sidebar",style:{position:"absolute",top:"10px",right:"10px",zIndex:20},children:t.jsx(xc,{size:16})})]}),v==="schedule"&&t.jsx(UM,{open:zo,onClose:()=>qr(!1),scheduleSelectedDate:$a,setScheduleSelectedDate:Rc,scheduleCalendarMonth:Dc,setScheduleCalendarMonth:Ec,scheduleShowWeekends:tr,setScheduleShowWeekends:$o,scheduleShowBacklog:ps,setScheduleShowBacklog:Uo,scheduleOnlyExpired:Is,setScheduleOnlyExpired:Ns,expiredScheduledCount:ld,overdueDueCount:dd,expiredLeafCandidates:ni,expiredRecoveryCandidates:$s,onMoveExpiredToSelectedWeek:zh,onMoveExpiredToBacklog:Hh,scheduleBulkBusy:Us,globalWeekStartsOn:_t,resolvedLocale:ro,todayDateOnly:Hn,scheduleBaseTasks:Hi,scheduleWeekStart:bi,scheduleWeekLabel:Gh})]}),t.jsxs(ao,{isOpen:k==="add",onClose:ri,title:le?$?.isDeleted?"Deleted Task":"Edit Task":"New Task",size:Rs?"full":"xl",theme:Fe,headerActions:t.jsx("button",{className:"tf-control-icon",onClick:()=>Pc(l=>!l),title:Rs?"Exit full screen":"Enter full screen","aria-label":Rs?"Exit full screen":"Enter full screen",children:Rs?t.jsx(Ap,{size:18}):t.jsx(Cp,{size:18})}),draggable:!Rs,closeOnOverlayClick:!1,children:[t.jsx(Rh,{editingTaskId:le,loading:ge,autoSaveState:Tr,title:R,currentTask:$,currentTaskWorkstream:We,currentTaskInitiative:Ir,workstreamInput:ue,onWorkstreamInputChange:B,onSetWorkstreamForCurrentTask:gt,handleSubmit:ve,resetForm:O,handleCopyId:q,copiedId:it,tasks:ie,handleToggleInProgress:Se,handleToggleReview:tt,handleToggleComplete:wt,handleToggleCancel:_e,handleSetStatus:si,handleArchiveTask:$t,handleUnarchiveTask:l=>{if($?.isDeleted){const h=mo.get(l);if(!h)return;Ie(h.id);return}Ce(l)},handleRestoreDeletedTask:$?.deletedRecordId?l=>{Ie(l)}:void 0,handlePermanentlyDeleteDeletedTask:$?.deletedRecordId?l=>{window.confirm("Permanently delete this task? This cannot be undone.")&&(je(l),O(),x("tasks"))}:void 0}),t.jsx(jh,{editingTaskId:le,error:X,title:R,description:Z,checklistItems:Q,category:ke,type:me,priority:Te,complexity:F,manualComplexityEnabled:re,approach:y,assignee:P,scheduledDate:ae,dueDate:de,workstreamInput:ue,formTaxonomies:ye,onTaxonomyChange:(l,h)=>Pe(_=>({..._,[l]:h})),taxonomies:Ye,comments:vt,newCommentText:Ke,contextFiles:Ze,currentWorkspaceId:Dt,apiBaseUrl:wl,descriptionFocused:Me,showMarkdownHelp:c,showChecklist:At,checklistEnabled:xe,showComments:Tt,categories:S,types:Ve,priorities:ot,taxonomyDisplayLabels:xt,assigneeOptions:Qt,workstreams:e.workstreams,initiatives:e.initiatives,copiedId:it,onTitleChange:U,onDescriptionChange:he,onChecklistItemsChange:we,onCategoryChange:be,onTypeChange:Re,onPriorityChange:se,onComplexityChange:D,onApproachChange:l=>{C(l),Pe(h=>({...h,approach:l}))},onAssigneeChange:j,onScheduledDateChange:L,onDueDateChange:K,onWorkstreamInputChange:B,onNewCommentTextChange:bt,onDescriptionFocusedChange:H,onShowMarkdownHelpChange:Ue,onShowChecklistChange:Wt,onShowCommentsChange:It,onOpenSettings:l=>{pn(l),x("settings")},onSubmit:ve,commentsEndRef:Ts,onAddComment:()=>Xe(Ke),onOpenTaskById:ze,onAddContextFile:l=>{let h=Ze;Qe(_=>(h=[..._,l],h)),St(!0),le&&J(le,{attachments:h})},onRemoveContextFile:async l=>{let h=Ze;Qe(_=>(h=_.filter((ce,pe)=>pe!==l),h)),St(!0),le&&J(le,{attachments:h})},onUpdateContextCaption:(l,h)=>{let _=Ze;Qe(ce=>(_=ce.map((pe,st)=>st!==l?pe:typeof pe=="string"?{path:pe,caption:h,timestamp:new Date().toISOString()}:{...pe,caption:h}),_)),St(!0),le&&J(le,{attachments:_})},onCopyId:q,onToggleInProgress:Se,onToggleReview:tt,onToggleComplete:wt,onToggleCancel:_e,onSetStatus:si,onArchiveTask:$t,onUnarchive:l=>{if($?.isDeleted){const h=mo.get(l);if(!h)return;Ie(h.id);return}Ce(l)},currentTask:$})]}),t.jsx(ao,{isOpen:k==="settings",onClose:ri,title:"Settings",size:"xl",theme:Fe,draggable:!0,isSettings:!0,closeOnOverlayClick:!1,children:t.jsx(a.Suspense,{fallback:t.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"2rem"},children:t.jsx(Pa,{size:20,className:m.spinner})}),children:t.jsx(HM,{settingsModel:An,onSectionChange:pn})})}),t.jsx(zD,{prompt:ca,theme:Fe,onClose:ms,onConfirm:er}),t.jsx(UD,{isOpen:ud,theme:Fe,onClose:()=>ho(!1),onOpenSettings:()=>{ho(!1),x("settings"),pn("general")}}),t.jsx($D,{isOpen:qi,theme:Fe,onClose:Md,onSave:()=>{vi()},displayName:dl,email:yi,avatarDisplayUrl:Rd,accountBadgeInitial:lc,avatarInputRef:ic,avatarAccept:YM,avatarDraftId:sr,saveBusy:Wu,avatarBusy:Bu,saveError:Fu,saveNotice:Ad,onDisplayNameChange:ul,onAvatarInputChange:l=>{Uu(l)},onStartAvatarUpload:()=>ic.current?.click(),onDiscardUpload:zu,onRemovePhoto:Ld}),t.jsx(OD,{isOpen:go,theme:Fe,runtimeMode:zt,authRequiredForApi:cr,isAuthenticated:Ht,hasAuthIdentity:Id,authIdentityLabel:Vs,billingLoading:xd,billingError:Ao,billingActionError:pi,billingNotice:Lu,billingActionBusy:Gs,billingIntervalChoice:fi,accountProfileSummary:ea,currentWorkspaceId:Dt,canOpenTeamManagement:ks,canManageWorkspaceSync:cc,workspaceCloudSyncEnabled:ra,syncStatusLabel:ir.label,workspaceSyncError:Xc,syncControlBusy:vl,onClose:()=>zs(!1),onOpenWorkspaceAudit:()=>{zs(!1),fc(),ci("audit")},onBillingIntervalChange:_d,onRefreshBilling:()=>{or()},onUpdateInterval:()=>{Vu()},onManageBilling:()=>{Gu()},onStartCheckout:()=>{Hu()},onToggleWorkspaceSync:l=>{yl(l)},onOpenHelp:()=>{zs(!1),ho(!0)}}),t.jsx(EE,{isOpen:Tu,theme:Fe,teamPlanMode:sl,teamMgmtError:nc,teamManagementTab:Iu,teamUsersLoading:ac,teamUsers:Hs,teamActionBusyUserId:ui,teamInviteFeedback:Sd,teamInviteEmail:ys,teamInviteRole:bo,teamInvitePermissionMode:xo,teamInviteBusy:kd,pendingInvites:qu,teamAuditLoading:Ru,teamAuditEvents:bd,teamAuditPage:Co,teamAuditPages:Mu,teamAuditHasMore:Eu,onClose:()=>vd(!1),onOpenMembersTab:()=>{ci("members"),Si()},onOpenInvitesTab:()=>ci("invites"),onOpenAuditTab:()=>{ci("audit"),rs(Co)},onMemberRoleChange:(l,h)=>{wi(l,async()=>fetch(`/api/taskforce/admin/users/${encodeURIComponent(l)}/role`,{method:"PATCH",headers:{"Content-Type":"application/json",...Sr()},credentials:"include",body:JSON.stringify({workspaceId:Ss,role:h})}))},onMemberPermissionChange:(l,h)=>{wi(l,async()=>fetch(`/api/taskforce/admin/users/${encodeURIComponent(l)}/permission-mode`,{method:"PATCH",headers:{"Content-Type":"application/json",...Sr()},credentials:"include",body:JSON.stringify({workspaceId:Ss,mode:h})}))},onToggleMemberDisabled:(l,h)=>{wi(l,async()=>fetch(`/api/taskforce/admin/users/${encodeURIComponent(l)}/disable`,{method:"PATCH",headers:{"Content-Type":"application/json",...Sr()},credentials:"include",body:JSON.stringify({workspaceId:Ss,disabled:h})}))},onRevokeInvite:l=>{wi(l,async()=>fetch(`/api/taskforce/admin/users/${encodeURIComponent(l)}/invite/revoke`,{method:"POST",headers:{"Content-Type":"application/json",...Sr()},credentials:"include",body:JSON.stringify({workspaceId:Ss})}))},onRemoveMember:l=>{wi(l,async()=>fetch(`/api/taskforce/admin/users/${encodeURIComponent(l)}?workspaceId=${encodeURIComponent(Ss)}`,{method:"DELETE",headers:Sr(),credentials:"include"}))},onInviteEmailChange:wo,onInviteRoleChange:sc,onInvitePermissionModeChange:_o,onSubmitInvite:()=>{Zu()},onLoadAuditPrevious:()=>{rs(Co-1)},onLoadAuditNext:()=>{rs(Co+1)}}),t.jsx(FD,{isOpen:Au,theme:Fe,onClose:()=>rl(!1),onConfirm:()=>Zs({intent:"create-workspace"})}),t.jsx(DE,{isOpen:Yc,theme:Fe,currentWorkspaceLabel:$u,syncStatusMeta:ir,workspaceCloudSyncEnabled:ra,syncControlBusy:vl,canManageWorkspaceSync:cc,workspaceSyncSummary:On,workspaceSyncRepairBusy:gs,referenceMismatchCount:vn,syncStageLabel:ee,workspaceSyncPendingChanges:Jn,formattedLastSyncTime:gc,formattedLastPullTime:Il,formattedLastPushTime:Nl,syncLastError:Ud,workspaceSyncDiagnostics:Y,activeReferenceMismatchSummaries:Dr,syncDiagnosticsSummary:et,syncEventRows:bn,syncEventsListRef:nl,workspaceSyncRepairQueued:Xi,workspaceSyncBusy:$n,workspaceSyncCopied:Qc,runtimeMode:zt,isAuthenticated:Ht,onClose:()=>oi(!1),onToggleWorkspaceSync:l=>{yl(l)},onRepairSync:Uh,onCopyReport:()=>{zd()},onOpenLogin:()=>{mc("login")},onRetrySync:()=>{Ka()}}),A&&Ni.createPortal(t.jsx("div",{className:`${yt.overlay} ${yt.unsavedOverlay}`,style:{zIndex:2e3},children:t.jsxs("div",{className:`tf-surface-modal tf-modal-shell ${yt.modal} ${yt.unsavedModal}`,"data-theme":Fe,children:[t.jsx("div",{className:`tf-modal-header ${yt.unsavedHeader}`,children:t.jsxs("div",{className:`tf-modal-title ${yt.unsavedTitle}`,children:[t.jsx(Tc,{size:20}),"Unsaved Changes"]})}),t.jsx("div",{className:`${yt.form} ${yt.unsavedContent}`,children:t.jsx("p",{className:yt.unsavedText,children:"You have unsaved changes. Would you like to save them?"})}),t.jsxs("div",{className:`${yt.formActions} ${yt.unsavedActions}`,children:[t.jsx("button",{className:m.cancelBtn,onClick:()=>Ne(!1),title:"Close dialog and continue editing",children:"Keep Editing"}),t.jsx("button",{className:m.destructiveBtn,onClick:In,title:"Discard unsaved changes and leave",children:"Discard"}),t.jsxs("button",{className:m.submitBtn,onClick:Zr,disabled:ge,title:"Save changes and leave",children:[ge?t.jsx(Pa,{size:16,className:m.spinner}):t.jsx(wf,{size:16}),"Save"]})]})]})}),document.body),fa&&Ni.createPortal(t.jsx("div",{className:Cn.overlay,children:t.jsxs("div",{className:Cn.browser,children:[t.jsxs("div",{className:Cn.header,children:[t.jsxs("div",{className:Cn.pathInfo,children:[t.jsx(Ri,{size:14}),t.jsx("span",{children:Sn||"Project Root"})]}),t.jsxs("div",{className:Cn.actions,children:[Sn&&t.jsx("button",{className:m.helpLink,onClick:()=>{const l=Sn.split("/").filter(Boolean);l.pop(),xr(l.length?l.join("/")+"/":"")},children:"Back"}),t.jsx("button",{className:m.helpLink,onClick:()=>ur(!1),children:"Close"})]})]}),t.jsxs("div",{className:Cn.list,children:[Ia&&typeof Ia=="object"&&t.jsxs("div",{className:`${Cn.item} ${Cn.itemFile} ${Cn.itemCurrent}`,onClick:()=>Na(Sn),children:[t.jsx(eo,{size:14})," Select Current: ./",Sn||"(root)"]}),Vn.map(l=>t.jsxs("div",{className:Cn.item,onClick:()=>xr(Sn+l+"/"),children:[t.jsx(Ri,{size:14})," ",l,"/"]},l)),ha.map(l=>t.jsxs("div",{className:`${Cn.item} ${Cn.itemFile}`,onClick:()=>Na(Sn+l),children:[t.jsx(Nm,{size:14})," ",l]},l)),Vn.length===0&&ha.length===0&&t.jsx("div",{className:`${Cn.item} ${Cn.empty}`,children:"No items found"})]})]})}),document.body)]})}function sL(e){const n=e.setupState,r=e.runtimeMode,s=e.isAuthenticated,o=!!(n&&r==="cloud"&&s&&n.globalSetupState==="missing"),d=!!(n&&r==="local"&&n.globalSetupState==="missing"),i=!!(n&&r==="cloud"&&s&&n.workspaceSetupState==="missing"),u=!!(n&&r==="local"&&n.workspaceSetupState==="missing"),f=!!(n&&(n.forceSetup||n.forceGlobalSetup||n.forceWorkspaceSetup||o||i||d||u));if(!f)return{setupGateActive:!1,needsGlobalSetup:!1,needsWorkspaceSetup:!1,hasSetupReadError:!1,phase:"ready"};const k=!!(n&&(n.forceSetup||n.forceGlobalSetup||o||d)),x=!!(n&&(n.forceSetup||n.forceWorkspaceSetup||i||u)),S=!!(k&&n?.globalSetupState==="missing"),v=!!(x&&n?.workspaceSetupState==="missing"),g=!!(k&&n?.globalSetupState==="unreadable"),w=!!(x&&n?.workspaceSetupState==="unreadable"),I=g||w;return{setupGateActive:f,needsGlobalSetup:S,needsWorkspaceSetup:v,hasSetupReadError:I,phase:I?"setup-read-error":S?"needs-global-setup":v?"needs-workspace-setup":"ready"}}const Am="/taskforce/assets/taskforce-BxLPokNB.png";function ff(e){return{categories:!!e?.categories?.length,types:!!e?.types?.length,priorities:!!e?.priorities?.length}}function Tm(e){return(Array.isArray(e)?e:[]).map(n=>String(n.label||n.value||"").trim()).filter(Boolean).join(", ")}function hf(e={}){const n=new URLSearchParams;n.set("screen","plans");for(const[r,s]of Object.entries(e)){const o=String(s||"").trim();o&&n.set(r,o)}return`/?${n.toString()}`}function gf({config:e={},initialTaskId:n,onTaskCountChange:r,onHeaderMouseDown:s,isDragging:o,onClose:d,mode:i="standalone"}){const u=Df(),f=a.useMemo(()=>new URLSearchParams(u.search),[u.search]),k=String(f.get("planId")||"").trim(),x=String(f.get("planVersionId")||"").trim(),S=String(f.get("interval")||"").trim(),v=u.pathname==="/pricing",g=u.pathname==="/plans",w=u.pathname==="/"&&String(f.get("screen")||"").trim().toLowerCase()==="plans",I=hf({gate:"plan_selection_required"}),b=Rf(),[N,W]=a.useState(""),[M,oe]=a.useState(""),[te,ie]=a.useState(""),[T,ve]=a.useState("login"),[O,J]=a.useState(""),[le,ge]=a.useState(!1),[X,R]=a.useState(null),[U,Z]=a.useState(null),[he,Q]=a.useState(null),[we,ke]=a.useState(""),[be,me]=a.useState(""),[Re,Te]=a.useState(null),[se,F]=a.useState(null),[D,E]=a.useState("unknown"),[y,C]=a.useState(!1),[P,j]=a.useState(null),[ae,L]=a.useState(null),[de,K]=a.useState(null),[ue,B]=a.useState(!1),[re,xe]=a.useState(0),[Ee,ye]=a.useState(0),[Pe,vt]=a.useState(()=>Date.now()),[Ke,bt]=a.useState("core"),[Ze,Qe]=a.useState(!1),[St,Me]=a.useState(null),[H,c]=a.useState(null),[Ue,At]=a.useState(""),[Wt,Tt]=a.useState(""),[It,Xe]=a.useState("local"),[gt,ze]=a.useState("details"),[Ye,Ve]=a.useState([]),[ot,xt]=a.useState(""),[jt,it]=a.useState(!1),[q,Se]=a.useState(null),[wt,tt]=a.useState(!1),[_e,$t]=a.useState(null),[ne,Ce]=a.useState(!1),Ie=a.useMemo(()=>lh(),[]),[je,at]=a.useState(Ie),[ct,dt]=a.useState(()=>Ie.find(V=>V.isDefaultStarter)?.id||Ie[0]?.id||""),[ut,Mt]=a.useState(()=>ff(Ie.find(V=>V.isDefaultStarter)||Ie[0]||null)),[Nt,Ft]=a.useState(!1),[Yt,Bt]=a.useState(null),[Jt,mn]=a.useState(!1),[Pn,Qt]=a.useState(null),[Rt,gn]=a.useState(!1),jn=Xk({config:e,initialTaskId:n,onTaskCountChange:r,onClose:d}),{runtimeMode:Gt,workspaceSwitchingEnabled:Ma,currentWorkspaceId:An,configLoaded:G,cloudAuthConfigured:Fe,authRequiredForApi:Ge,authBlocked:Ct,isAuthenticated:$e,hasBetaAccess:Ut,authSessionResolved:qt,workspaceBootstrapPending:_t,bootstrapPhase:tn,bootstrapError:ln,setupState:Ot,runtimeCapabilities:ta,refreshSetupContext:Mn,retryBootstrapChecks:yn,createWorkspace:pn,saveWorkspaceProfile:zt,fetchWorkspaces:na,applyWorkspaceSyncStateSnapshot:Rn,workspaceCloudSyncEnabled:cr,workspaceSyncPhase:dn,workspaceSyncSummary:Ht,workspaceSyncRecommendedAction:Vt,workspaceSyncBusy:_a,workspaceLastErrorMessage:aa,retryWorkspaceCloudSync:br,settingsModel:cs,fetchTasks:Ln,loginWithCredentials:La,registerWithCredentials:qa,requestEmailVerification:ra,confirmEmailVerification:Yn,requestPasswordReset:sa,confirmPasswordReset:On,inspectInviteAcceptance:ua,acceptInviteWithToken:$n,joinInviteWithToken:Jn,authUserEmail:Ba,currentTheme:nt,logout:Gn}=jn,rn=a.useMemo(()=>je.find(V=>V.id===ct)||je.find(V=>V.isDefaultStarter)||je[0]||null,[ct,je]);Lf(nt);const Xt=Om,on=a.useMemo(()=>{const V=String(e.cloudAuthBaseUrl||e.apiBaseUrl||"").trim();return V?V.replace(/\/+$/,""):""},[e.apiBaseUrl,e.cloudAuthBaseUrl]),Tn=Gt==="cloud"||ta?.runtimeMode==="cloud",kn=!Tn&&Fe&&!!on,Wa=typeof window<"u"&&/^app\./i.test(window.location.hostname),Ka=Gt==="cloud"&&Ge,ma=Gt==="cloud"&&Ct,fn=u.pathname==="/login",Dt=u.pathname==="/setup",lr=u.pathname==="/coming-soon",pa=!Tn&&It==="cloud",Ca=pa&&kn,Aa=!!(_e&&An===_e.workspaceId),Dn=!!(_e&&Aa&&dn==="error"),Ta=!!(_e&&Aa&&cr&&dn==="active"&&!_a),ls=a.useMemo(()=>{if(!_e)return[];const V=Ze?"In progress":"Complete",ft=Dn?"Needs attention":_a||dn==="attach-cloud"?"In progress":dn==="active"?"Complete":"Waiting",Kt=ne?"In progress":Ta?"Ready":"Waiting";return[`Connect workspace: ${V}`,`Import cloud data: ${ft}`,`Open local workspace: ${Kt}`]},[_e,Ze,Dn,_a,dn,ne,Ta]),oa=Wa?(!$e||Ct)&&!v&&!g&&!w:(Ka&&!$e||ma)&&!v&&!g&&!w,dr=Gt==="cloud"&&$e&&!Ut&&!v&&!g&&!w,ds=Gt==="cloud"&&$e&&qt&&Pn?.canAccessApp===!1&&Pn?.canAccessPlans!==!1&&!v&&!g&&!w,fa=Fe,ur=a.useMemo(()=>{switch(T){case"register":return"Create Account | Taskforce";case"verify":return"Verify Email | Taskforce";case"forgot":return"Reset Password | Taskforce";case"reset":return"Set New Password | Taskforce";case"invite":return"Accept Invite | Taskforce";default:return"Sign In | Taskforce"}},[T]),Vn=a.useMemo(()=>String(new URLSearchParams(u.search).get("step")||"").trim().toLowerCase(),[u.search]),ha=a.useMemo(()=>String(new URLSearchParams(u.search).get("intent")||"").trim().toLowerCase(),[u.search]),Sn=Dt&&Vn==="workspace"&&ha==="create-workspace",xr=i!=="widget"&&!qt&&!fn&&!Dt&&!v&&!g&&!w&&(Gt==="cloud"||Wa),Ia=a.useMemo(()=>sL({setupState:Ot?{globalSetupState:Ot.globalSetupState,workspaceSetupState:Ot.workspaceSetupState,runtimeMode:Ot.runtimeMode,workspaceId:Ot.workspaceId,mode:Ot.mode,forceSetup:Ot.forceSetup,forceGlobalSetup:Ot.forceGlobalSetup,forceWorkspaceSetup:Ot.forceWorkspaceSetup}:null,runtimeMode:Gt,isAuthenticated:$e}),[Ot,Gt,$e]),Fa=Ia.setupGateActive,Na=Ia.needsGlobalSetup,ja=Ia.needsWorkspaceSetup,Oa=Ia.hasSetupReadError,mr=i!=="widget"&&qt&&!oa&&!dr&&!v&&!g&&!w&&(!G||_t||tn==="stalled")&&(Dt||Gt==="cloud"||Wa),_r=a.useMemo(()=>tn==="auth"?"Verifying session...":tn==="workspace"?"Resolving workspace access...":tn==="config"?"Loading configuration...":"Checking account, workspace access, and setup status...",[tn]),Ya=a.useCallback((V,ft,Kt)=>{const qe=String(V||"").trim().toLowerCase(),En=String(ft||"").trim().toLowerCase();return!!(!qe||qe==="system default workspace"||En&&qe===En)},[]);a.useEffect(()=>{const V=Ot?.mode==="operations"?"operations":"core";bt(V)},[Ot?.mode]),a.useEffect(()=>{if(Gt!=="cloud"||!$e||!qt){Qt(null),gn(!1);return}Qt(null),gn(!1);let V=!1;return(async()=>{try{const ft=await fetch("/api/taskforce/account/access-status",{method:"GET",credentials:"include"}),Kt=await ft.json().catch(()=>({}));if(V)return;if(!ft.ok){Qt(null),gn(!0);return}const qe=String(Kt?.gate||"").trim().toLowerCase();if(qe!=="ok"&&qe!=="plan_selection_required"&&qe!=="checkout_pending"&&qe!=="misconfigured"&&qe!=="missing_entitlement"){Qt(null),gn(!0);return}Qt({gate:qe,canAccessApp:Kt?.canAccessApp===!0,canAccessPlans:Kt?.canAccessPlans!==!1,message:typeof Kt?.message=="string"?Kt.message:null}),gn(!0)}catch{V||(Qt(null),gn(!0))}})(),()=>{V=!0}},[qt,$e,Gt,u.pathname,u.search]),a.useEffect(()=>{if(Sn){At(""),Tt("");return}if(!Ot)return;const V=String(Ot.workspace?.name||"").trim(),ft=String(Ot.suggestedWorkspaceName||"").trim(),Kt=Ya(V,Ot.workspaceId,Ot.workspace?.description)?ft:V;At(Kt||ft||V),Tt(String(Ot.workspace?.description||""))},[Ot?.workspace?.name,Ot?.workspace?.description,Ot?.suggestedWorkspaceName,Ot?.workspaceId,Sn,Ya]),a.useEffect(()=>{if(!Dt||Vn!=="workspace")return;if(ze("details"),String(new URLSearchParams(u.search).get("source")||"").trim().toLowerCase()==="cloud"&&kn){Xe("cloud"),tt(!1);return}Xe("local")},[kn,Dt,u.search,Vn]);const Ra=a.useCallback(async()=>{if(!kn||!$e){Ve([]),xt("");return}it(!0),Se(null);try{const V=await fetch(`${on}/api/taskforce/workspaces`,{method:"GET",credentials:"include"}),ft=await V.json().catch(()=>({}));if(!V.ok||ft?.success===!1){Ve([]),xt(""),Se(ft?.error||`Failed to load cloud projects (${V.status})`);return}const Kt=Array.isArray(ft?.workspaces)?ft.workspaces.map(qe=>({id:String(qe?.id||"").trim(),name:String(qe?.name||qe?.id||"").trim(),description:typeof qe?.description=="string"?qe.description:null})).filter(qe=>qe.id.length>0):[];Ve(Kt),xt(qe=>qe&&Kt.some(En=>En.id===qe)?qe:Kt[0]?.id||"")}catch{Ve([]),xt(""),Se("Failed to load cloud projects.")}finally{it(!1)}},[kn,$e,on]);a.useEffect(()=>{It==="cloud"&&Ra()},[Ra,It]),a.useEffect(()=>{if(!Dt||Vn!=="workspace"||It==="cloud")return;let V=!1;return Ft(!0),Bt(null),fetch("/api/taskforce/taxonomy-library",{method:"GET",credentials:"include"}).then(async ft=>{if(!ft.ok)throw new Error(`Failed to load starter libraries (${ft.status})`);const Kt=await ft.json().catch(()=>({})),qe=Array.isArray(Kt?.packs)?Kt.packs:[];V||qe.length===0||(at(qe),dt(En=>qe.some(Xa=>Xa.id===En)?En:qe.find(Xa=>Xa.isDefaultStarter)?.id||qe[0]?.id||""))}).catch(ft=>{V||(at(Ie),Bt(ft instanceof Error?ft.message:"Failed to load starter libraries."))}).finally(()=>{V||Ft(!1)}),()=>{V=!0}},[Ie,Dt,Vn,It]),a.useEffect(()=>{Mt(ff(rn))},[ct,rn]),a.useEffect(()=>{It==="cloud"&&ze("details")},[It]),a.useEffect(()=>{Ca||($t(null),Ce(!1))},[Ca]),a.useEffect(()=>{!Dn||!_e||(c(null),Me(aa||`Failed to import "${_e.name}" from cloud. Retry import to continue.`))},[Dn,_e,aa]),a.useEffect(()=>{if(!Ta||!_e||ne)return;let V=!1;return Ce(!0),Me(null),c(`Workspace import complete. Opening ${_e.name}...`),(async()=>{try{if(await Mn(),await Promise.all([na(),Ln(!0)]),V)return;$t(null),b("/",{replace:!0})}catch{if(V)return;c(null),Me(`Imported "${_e.name}" but failed to finish opening it.`),Ce(!1)}})(),()=>{V=!0}},[ne,Ln,na,Ta,b,_e,Mn]);const ia=a.useMemo(()=>{const V=new URLSearchParams(u.search).get("next")||"/";return!V.startsWith("/")||V==="/login"?"/":V},[u.search]),Cr="/setup?step=workspace&source=cloud&postAuth=select-cloud-workspace",Ar=a.useMemo(()=>{try{const V=new URL(ia,"https://taskforce.local");return V.pathname==="/setup"&&V.searchParams.get("step")==="workspace"&&V.searchParams.get("source")==="cloud"&&V.searchParams.get("postAuth")==="select-cloud-workspace"}catch{return!1}},[ia]),Zn=a.useCallback(()=>Ar?Cr:"/setup?step=workspace",[Ar]),pr=S==="year"?"year":"month",Ja=a.useCallback(V=>!!(V?.planSelectionRequired||V?.checkoutPending||V?.commercialState==="pending_plan_selection"||V?.commercialState==="checkout_pending"),[]),Xn=a.useCallback(V=>V?.planSelectionRequired||V?.commercialState==="pending_plan_selection"?I:V?.checkoutPending||V?.commercialState==="checkout_pending"?hf({gate:"checkout_pending",checkout:x?"start":null,planId:k||null,planVersionId:x||null,interval:x?pr:null}):ia,[ia,I,pr,k,x]),Un=a.useMemo(()=>{const V=String(new URLSearchParams(u.search).get("mode")||"").trim().toLowerCase();return V==="register"?fa?"register":"login":V==="verify"||V==="forgot"||V==="reset"||V==="invite"?V:"login"},[fa,u.search]),zn=a.useMemo(()=>String(new URLSearchParams(u.search).get("token")||"").trim(),[u.search]),Bn=a.useCallback(V=>{const ft=new URLSearchParams(u.search),Kt=V==="register"&&!fa?"login":V;Kt==="login"?ft.delete("mode"):ft.set("mode",Kt);const qe=ft.toString();b(`/login${qe?`?${qe}`:""}`,{replace:!0})},[fa,u.search,b]);a.useEffect(()=>{fn&&(ve(Un),Un==="verify"&&zn&&J(zn),Un==="reset"&&zn&&ke(zn),Un==="invite"&&zn&&me(zn))},[fn,Un,zn]),a.useEffect(()=>{T!=="verify"&&(fn&&Un==="verify"||(ge(!1),R(null),Z(null)))},[T,fn,Un]),a.useEffect(()=>{!fn||!he||!qt||!$e||Gt==="cloud"&&!he.commercialOnboardingGate&&!Rt||(!he.commercialOnboardingGate&&he.workspaceSetupRequired?b(Zn(),{replace:!0}):b(he.path,{replace:!0}),W(""),oe(""),ie(""),Q(null))},[Rt,qt,$e,fn,b,he,Zn,Gt]),a.useEffect(()=>{fn&&(document.title=ur)},[ur,fn]),a.useEffect(()=>{if(!fn||T!=="invite"||!be.trim())return;let V=!0;return(async()=>{const ft=await ua(be);if(V)if(ft.success){Te(ft.email||null),F(ft.workspaceId||null),C(ft.passwordRequired===!0);const Kt=!!($e&&Ba&&ft.email&&Ba.trim().toLowerCase()===ft.email.trim().toLowerCase()),qe=ft.passwordRequired===!0?"new_user":Kt?"existing_user_ready":"existing_user_signed_out";E(qe),j(qe==="new_user"?"Create your account password to join this workspace.":qe==="existing_user_ready"?"Invite ready. Confirm to join this workspace.":"Sign in with the invited account to join this workspace."),L(null),K(null)}else Te(null),F(null),E("invalid"),C(!1),L(nn(ft)),K(ft.code||ft.state||null)})(),()=>{V=!1}},[fn,T,be,ua,$e,Ba]),a.useEffect(()=>{T==="invite"&&D==="existing_user_signed_out"&&Re&&W(V=>V.trim()?V:Re)},[T,D,Re]),a.useEffect(()=>{if(!(re>Date.now()||Ee>Date.now()))return;const ft=window.setInterval(()=>vt(Date.now()),1e3);return()=>window.clearInterval(ft)},[re,Ee]);const fr=Math.max(0,Math.ceil((re-Pe)/1e3)),Be=Math.max(0,Math.ceil((Ee-Pe)/1e3)),Et=fr>0,_n=Be>0,nn=V=>{const ft=V.error||"Request failed.",Kt=V.code||V.state;return Kt?`[${Kt}] ${ft}`:ft};a.useEffect(()=>{if(i!=="widget"&&!_t){if(dr){lr||b("/coming-soon",{replace:!0});return}if(lr&&!dr){b("/",{replace:!0});return}if(oa){if(!fn){const V=`${u.pathname}${u.search}${u.hash}`;b(`/login?next=${encodeURIComponent(V||"/")}`,{replace:!0});return}return}else{const V=fn&&T==="invite"&&be.trim().length>0;if(fn&&$e&&!V&&(!!he||_t||T==="register"||T==="verify"||Gt==="cloud"&&(!G||!Rt)))return;fn&&$e&&!V&&b(ia,{replace:!0})}if(!(fn&&!$e)){if(ds){if(!w){const V=encodeURIComponent(String(Pn?.gate||"plan_selection_required"));b(`/?screen=plans&gate=${V}`,{replace:!0})}return}if(!(Dt&&_e)){if(Fa){if(Oa){(!Dt||Vn!=="error")&&b("/setup?step=error",{replace:!0});return}if(Na){(!Dt||Vn!=="global")&&b("/setup?step=global",{replace:!0});return}if(ja){(!Dt||Vn!=="workspace")&&b(Zn(),{replace:!0});return}Dt&&b("/",{replace:!0});return}Dt&&Ot&&!Sn&&b("/",{replace:!0})}}}},[i,oa,dr,ds,fn,Dt,lr,g,w,Pn?.gate,Rt,T,Fa,Ot,Oa,Sn,_e,Na,ja,Vn,_t,G,Gt,be,u.pathname,u.search,u.hash,b,ia,he]),a.useEffect(()=>{if(i==="widget"||Gt!=="local"||!G||fn||Dt)return;const V=String(An||"").trim().toLowerCase();(!V||V==="default")&&b("/setup?step=workspace",{replace:!0})},[i,Gt,G,fn,Dt,An,b]);const hr=a.useCallback(async()=>{mn(!0);try{await yn()}finally{mn(!1)}},[yn]),Gr=a.useCallback(async()=>{await Gn(),b("/login",{replace:!0})},[Gn,b]);if(i==="widget")return t.jsx(y0,{...jn,onHeaderMouseDown:s,isDragging:o,onClose:d});if(v){const V=new URLSearchParams(u.search);return V.set("screen","plans"),t.jsx(Ip,{to:`/?${V.toString()}${u.hash||""}`,replace:!0})}if(g){const V=new URLSearchParams(u.search);return V.set("screen","plans"),t.jsx(Ip,{to:`/?${V.toString()}${u.hash||""}`,replace:!0})}if(xr)return t.jsx("div",{className:sn.standaloneWrapper,"data-theme":nt,children:t.jsx("div",{className:fe.loginView,children:t.jsxs("div",{className:fe.loginCard,children:[t.jsxs("div",{className:fe.authBrandRow,children:[t.jsx("img",{src:Xt,alt:"Taskforce",className:fe.loginLogo}),t.jsx("h1",{className:fe.loginTitle,children:"Loading Taskforce"})]}),t.jsx("p",{className:fe.loginSubtitle,children:"Checking your session..."})]})})});if(mr)return t.jsx("div",{className:sn.standaloneWrapper,"data-theme":nt,children:t.jsx("div",{className:fe.loginView,children:t.jsxs("div",{className:fe.loginCard,children:[t.jsxs("div",{className:fe.authBrandRow,children:[t.jsx("img",{src:Xt,alt:"Taskforce",className:fe.loginLogo}),t.jsx("h1",{className:fe.loginTitle,children:"Loading Taskforce"})]}),t.jsx("p",{className:fe.loginSubtitle,children:_r}),tn==="stalled"&&t.jsxs(t.Fragment,{children:[t.jsx("p",{className:fe.loginError,children:ln||"Startup checks timed out."}),t.jsx("button",{className:m.submitBtn,disabled:Jt,onClick:hr,children:Jt?"Retrying...":"Retry checks"}),Tn&&t.jsx("button",{className:m.cancelBtn,disabled:Jt,onClick:Gr,children:"Go to sign-in"})]})]})})});if(fn)return t.jsx("div",{className:sn.standaloneWrapper,"data-theme":nt,children:t.jsx("div",{className:fe.loginView,style:{backgroundImage:`linear-gradient(rgba(15, 15, 26, 0.88), rgba(15, 15, 26, 0.9)), url(${Am})`},children:t.jsxs("div",{className:fe.loginCard,children:[!Tn&&!oa&&t.jsx("button",{className:fe.loginCloseBtn,"aria-label":"Close sign in","data-testid":"auth-close-button",onClick:()=>b(ia,{replace:!0}),children:"×"}),t.jsxs("div",{className:fe.authBrandRow,children:[t.jsx("img",{src:Xt,alt:"Taskforce",className:fe.loginLogo}),t.jsxs("h1",{className:fe.loginTitle,children:["TASKFORCE ",t.jsx("span",{className:fe.loginTitleAccent,children:"HQ"})]})]}),t.jsxs("p",{className:fe.loginSubtitle,children:[T==="login"&&"Sign in with your account credentials.",T==="register"&&"Create your Taskforce account.",T==="verify"&&"Enter your verification token.",T==="forgot"&&"Request a password reset link.",T==="reset"&&"Set a new password using your reset token.",T==="invite"&&(D==="existing_user_ready"?`You've been invited to join ${se||"this workspace"}.`:D==="existing_user_signed_out"?"Sign in to join this workspace.":"Create your account to join this workspace.")]}),(T==="login"||T==="register"||T==="verify"||T==="forgot"||T==="invite"&&D==="existing_user_signed_out")&&t.jsxs("label",{className:fe.loginField,children:[t.jsx("span",{className:fe.loginFieldLabel,children:"Email"}),t.jsx("input",{className:`${m.input} ${fe.loginInput}`,type:"email",value:N,placeholder:"Email",autoComplete:"email","data-testid":"auth-email-input",onChange:V=>W(V.target.value)})]}),T==="register"&&t.jsxs("label",{className:fe.loginField,children:[t.jsx("span",{className:fe.loginFieldLabel,children:"Display name"}),t.jsx("input",{className:`${m.input} ${fe.loginInput}`,type:"text",value:M,placeholder:"Display name",autoComplete:"nickname","data-testid":"auth-display-name-input",onChange:V=>oe(V.target.value)})]}),(T==="login"||T==="register"||T==="reset"||T==="invite"&&(y||D==="existing_user_signed_out"))&&t.jsxs("label",{className:fe.loginField,children:[t.jsx("span",{className:fe.loginFieldLabel,children:T==="reset"?"New password":T==="invite"&&y?"Create password":"Password"}),t.jsx("input",{className:`${m.input} ${fe.loginInput}`,type:"password",value:te,placeholder:T==="reset"?"New password":T==="invite"&&y?"Create password":"Password",autoComplete:T==="register"||T==="reset"||T==="invite"&&y?"new-password":"current-password","data-testid":"auth-password-input",onChange:V=>ie(V.target.value)})]}),T==="verify"&&t.jsxs("label",{className:fe.loginField,children:[t.jsx("span",{className:fe.loginFieldLabel,children:"Verification token"}),t.jsx("input",{className:`${m.input} ${fe.loginInput}`,type:"text",value:O,placeholder:"Verification token",autoComplete:"one-time-code","data-testid":"auth-verification-token-input",onChange:V=>J(V.target.value)})]}),T==="reset"&&t.jsxs("label",{className:fe.loginField,children:[t.jsx("span",{className:fe.loginFieldLabel,children:"Reset token"}),t.jsx("input",{className:`${m.input} ${fe.loginInput}`,type:"text",value:we,placeholder:"Reset token",autoComplete:"one-time-code","data-testid":"auth-reset-token-input",onChange:V=>ke(V.target.value)})]}),T==="invite"&&t.jsxs(t.Fragment,{children:[t.jsxs("label",{className:fe.loginField,children:[t.jsx("span",{className:fe.loginFieldLabel,children:"Invite token"}),t.jsx("input",{className:`${m.input} ${fe.loginInput}`,type:"text",value:be,placeholder:"Invite token","data-testid":"auth-invite-token-input",onChange:V=>me(V.target.value)})]}),Re&&t.jsxs("p",{className:fe.loginSubtitle,children:["Invite for: ",t.jsx("strong",{children:Re}),se?` · Workspace: ${se}`:""]})]}),P&&t.jsx("p",{className:fe.loginSubtitle,children:P}),ae&&t.jsx("p",{className:fe.loginError,children:ae}),T==="login"&&de==="EMAIL_NOT_VERIFIED"&&N.trim()&&t.jsx("button",{className:fe.authModeLink,disabled:ue||Et,onClick:async()=>{B(!0),j(null);const V=await ra(N);V.success?(xe(Date.now()+3e4),Bn("verify"),V.verificationToken&&J(V.verificationToken),j("Verification email resent."),L(null),K(null)):L(nn(V)),B(!1)},children:Et?`Resend in ${fr}s`:"Resend Verification Email"}),t.jsx("div",{className:fe.authPrimaryActions,role:"group","aria-label":"Primary authentication action",children:t.jsx("button",{className:`${m.submitBtn} ${fe.loginPrimaryBtn}`,disabled:ue||T==="forgot"&&_n,"data-testid":"auth-submit-button",onClick:async()=>{if(B(!0),j(null),L(null),K(null),T==="register"&&!M.trim()){L("Display name is required."),B(!1);return}let V={success:!1};if(T==="login"?V=await La(N,te):T==="register"?V=await qa(N,te,{displayName:M,planId:k||void 0,planVersionId:x||void 0,interval:S||void 0}):T==="verify"?V=await Yn(O):T==="forgot"?V=await sa(N):T==="reset"?V=await On(we,te):T==="invite"&&(D==="existing_user_signed_out"?V=await La(N,te):V=y?await $n(be,te):await Jn(be)),V.success)if(T==="register"){const ft=Xn(V),Kt=Ja(V);V.verificationRequired?(ge(!!V.workspaceSetupRequired),R(Kt?String(V.commercialState||"").trim()||(V.planSelectionRequired?"pending_plan_selection":"checkout_pending"):null),Z(ft),V.verificationToken&&J(V.verificationToken),xe(Date.now()+3e4),Bn("verify"),j(V.emailSent===!1?`Account created, but verification email failed to send. ${V.emailError||"Try Resend Verification again."}`:"Account created. Check your email for verification instructions.")):Q({path:ft,workspaceSetupRequired:!!V.workspaceSetupRequired,commercialOnboardingGate:Kt})}else if(T==="verify")await yn(),Q({path:U||ia,workspaceSetupRequired:le,commercialOnboardingGate:X==="pending_plan_selection"||X==="checkout_pending"});else if(T==="forgot")V.resetToken&&ke(V.resetToken),ye(Date.now()+3e4),Bn("reset"),j(V.emailSent===!1?`Password reset email failed to send. ${V.emailError||"Try again in a minute."}`:"Password reset instructions sent.");else if(T==="reset")Bn("login"),j("Password updated. Sign in with your new password.");else if(T==="invite"){if(D==="existing_user_signed_out"){ve("invite"),ie(""),j("Signed in. Review the invite details to continue."),B(!1);return}if(V.workspaceSetupRequired){b(Zn(),{replace:!0}),B(!1);return}b(ia,{replace:!0})}else if(T==="login"){if(be.trim()){ve("invite"),ie(""),j("Signed in. Review the invite details to continue."),B(!1);return}if(V.workspaceSetupRequired){b(Zn(),{replace:!0}),B(!1);return}W(""),oe(""),ie(""),b(ia,{replace:!0})}else W(""),oe(""),ie(""),b(ia,{replace:!0});else{if(T==="register"&&(V.code==="SIGNUP_PLAN_NOT_ENABLED"||V.code==="SIGNUP_PLAN_VERSION_NOT_FOUND"||V.code==="SIGNUP_PLAN_VERSION_REQUIRED")){b(I,{replace:!0}),B(!1);return}if(L(nn(V)),K(V.code||null),T==="login"&&(V.code==="WORKSPACE_NOT_FOUND"||V.code==="WORKSPACE_ID_REQUIRED")){b("/setup?step=workspace",{replace:!0}),B(!1);return}if(T==="login"&&V.code==="EMAIL_NOT_VERIFIED"&&N.trim()){const ft=await ra(N);ft.success&&(xe(Date.now()+3e4),Bn("verify"),ft.verificationToken&&J(ft.verificationToken),j("Email not verified. A verification token was sent."),L(null),K(null))}T==="register"&&V.code==="EMAIL_ALREADY_EXISTS_UNVERIFIED"&&N.trim()&&(xe(Date.now()+3e4),Bn("verify"),V.verificationToken&&J(V.verificationToken),j(V.emailSent===!1?`This email already has an unverified account, but verification email delivery failed. ${V.emailError||"Try Resend Verification again."}`:"This email already has an unverified account. Check your email for verification instructions."),L(null),K(null))}B(!1)},children:ue?"Working...":T==="login"?"Sign In":T==="register"?"Create Account":T==="verify"?"Verify Email":T==="forgot"?_n?`Retry in ${Be}s`:"Send Reset Link":T==="reset"?"Reset Password":D==="existing_user_signed_out"?"Sign In to Continue":y?"Create Account and Join":"Join Workspace"})}),T==="register"&&t.jsxs("p",{className:fe.registerConsent,children:["By creating an account, you agree to the"," ",t.jsx("a",{className:fe.registerConsentLink,href:"https://taskforcehq.com/legal/terms",target:"_blank",rel:"noopener noreferrer",children:"Terms of Service"})," ","and acknowledge the"," ",t.jsx("a",{className:fe.registerConsentLink,href:"https://taskforcehq.com/legal/privacy",target:"_blank",rel:"noopener noreferrer",children:"Privacy Policy"}),"."]}),t.jsxs("div",{className:fe.authSecondaryActions,role:"group","aria-label":"Authentication navigation",children:[fa&&(T==="login"||T==="register")&&t.jsxs("p",{className:fe.authModeSwitch,children:[T==="login"?"Need an account?":"Already have an account?"," ",t.jsx("button",{className:fe.authModeSwitchLink,disabled:ue,"data-testid":"auth-switch-mode-button",onClick:()=>{L(null),K(null),j(null),Bn(T==="login"?"register":"login")},children:T==="login"?"Register":"Sign In"})]}),t.jsxs("div",{className:fe.authModeLinks,children:[(T==="login"||T==="register")&&t.jsxs(t.Fragment,{children:[t.jsx("button",{className:fe.authModeLink,disabled:ue||_n,"data-testid":"auth-forgot-password-button",onClick:()=>{L(null),K(null),j(null),Bn("forgot")},children:_n?`Forgot Password (${Be}s)`:"Forgot Password"}),t.jsx("button",{className:fe.authModeLink,disabled:ue||Et,"data-testid":"auth-resend-verification-button",onClick:()=>{L(null),K(null),j(null),Bn("verify")},children:Et?`Resend Verification (${fr}s)`:"Resend Verification"}),t.jsx("button",{className:fe.authModeLink,disabled:ue,"data-testid":"auth-accept-invite-button",onClick:()=>{L(null),K(null),j(null),Bn("invite")},children:"Accept Invite"})]}),T!=="login"&&T!=="register"&&t.jsxs(t.Fragment,{children:[T==="verify"&&t.jsx("button",{className:fe.authModeLink,disabled:ue||Et||!N.trim(),"data-testid":"auth-resend-verification-button",onClick:async()=>{B(!0),j(null),L(null),K(null);const V=await ra(N);V.success?(xe(Date.now()+3e4),V.verificationToken&&J(V.verificationToken),j("Verification email resent.")):L(nn(V)),B(!1)},children:Et?`Resend Verification (${fr}s)`:"Resend Verification"}),t.jsx("button",{className:fe.authModeLink,disabled:ue,"data-testid":"auth-return-sign-in-button",onClick:()=>{L(null),K(null),j(null),Bn("login")},children:T==="verify"?"Back to Sign In":"Sign In"}),fa&&T!=="verify"&&t.jsx("button",{className:fe.authModeLink,disabled:ue,"data-testid":"auth-return-register-button",onClick:()=>{L(null),K(null),j(null),Bn("register")},children:"Register"}),T==="reset"&&t.jsx("button",{className:fe.authModeLink,disabled:ue||_n,"data-testid":"auth-return-forgot-password-button",onClick:()=>{L(null),K(null),j(null),Bn("forgot")},children:_n?`Forgot Password (${Be}s)`:"Forgot Password"})]})]})]})]})})});if(oa&&!fn)return t.jsx("div",{className:sn.standaloneWrapper,"data-theme":nt,children:t.jsx("div",{className:fe.loginView,children:t.jsxs("div",{className:fe.loginCard,children:[t.jsxs("div",{className:fe.authBrandRow,children:[t.jsx("img",{src:Xt,alt:"Taskforce",className:fe.loginLogo}),t.jsx("h1",{className:fe.loginTitle,children:"Loading Taskforce"})]}),t.jsx("p",{className:fe.loginSubtitle,children:"Redirecting to sign in..."})]})})});if(lr&&dr)return t.jsx("div",{className:sn.standaloneWrapper,"data-theme":nt,children:t.jsx("div",{className:fe.loginView,style:{backgroundImage:`linear-gradient(rgba(15, 15, 26, 0.88), rgba(15, 15, 26, 0.9)), url(${Am})`},children:t.jsxs("div",{className:fe.loginCard,children:[t.jsxs("div",{className:fe.authBrandRow,children:[t.jsx("img",{src:Xt,alt:"Taskforce",className:fe.loginLogo}),t.jsx("h1",{className:fe.loginTitle,children:"Private Beta"})]}),t.jsx("p",{className:fe.loginSubtitle,children:"You are signed in, but your account is not in the beta allowlist yet."}),t.jsx("p",{className:fe.loginSubtitle,children:"You will see the full app as soon as beta access is enabled."}),t.jsx("button",{className:m.cancelBtn,onClick:async()=>{await jn.logout(),b("/login",{replace:!0})},children:"Sign Out"})]})})});if(Sn||Dt&&!!_e||Dt&&Fa&&(Oa||Na||ja)){const V=!Sn&&(Oa||Vn==="error"),ft=!Sn&&!V&&(Na||Vn==="global"),Kt=De(V?"setup.headingCheckFailed":ft?"setup.headingGlobalRequired":"setup.headingWorkspaceRequired"),qe=V?De("setup.subtitleUnreadable"):ft?De("setup.subtitleGlobalRequired"):null,En="Workspace",Xa=Tn||It!=="cloud",Qa=Xa&>==="details",Vr=Xa&>==="starter",Ts=!Tn&&kn&&Qa&&!_e,Tr=ta?.runtimeMode==="cloud"?_f:$g,A=rn?Tm(rn.categories):"",Ne=rn?Tm(rn.types):"",rt=rn?Tm(rn.priorities):"",ht=Ze?De("setup.saving"):pa?_e?Dn?"Retry Import":"Importing Workspace...":"Connect Workspace":Qa?"Continue":Vr?"Create Workspace":"Connect Workspace";return t.jsx("div",{className:sn.standaloneWrapper,"data-theme":nt,children:t.jsx("div",{className:fe.loginView,style:{backgroundImage:`linear-gradient(rgba(15, 15, 26, 0.88), rgba(15, 15, 26, 0.9)), url(${Am})`},children:t.jsxs("div",{className:fe.loginCard,children:[t.jsxs("div",{className:fe.setupHeaderRow,children:[t.jsxs("div",{className:fe.authBrandRow,children:[t.jsx("img",{src:Xt,alt:"Taskforce",className:fe.loginLogo}),t.jsxs("h1",{className:fe.loginTitle,children:["TASKFORCE ",t.jsx("span",{className:fe.loginTitleAccent,children:"HQ"})]})]}),ta&&t.jsx("span",{className:fe.runtimeIconBadge,title:ta.runtimeMode==="cloud"?"Cloud runtime":"Local runtime","aria-label":ta.runtimeMode==="cloud"?"Cloud runtime":"Local runtime",children:pt.createElement(Tr,{size:16,"aria-hidden":!0})})]}),t.jsx("p",{className:fe.loginSubtitle,children:t.jsx("strong",{children:Kt})}),qe?t.jsx("p",{className:fe.loginSubtitle,children:qe}):null,H&&t.jsx("p",{className:fe.loginSubtitle,children:H}),St&&t.jsx("p",{className:fe.loginError,children:St}),ft&&t.jsxs("div",{className:fe.optionGrid,children:[t.jsxs("label",{className:`${fe.authModeLink} ${fe.optionRow}`,children:[t.jsx("input",{type:"radio",name:"setup-mode",value:"core",checked:Ke==="core",onChange:()=>bt("core"),disabled:Ze}),t.jsx("span",{children:De("setup.coreModeOption",{workspaceLabel:En})})]}),t.jsxs("label",{className:`${fe.authModeLink} ${fe.optionRow}`,children:[t.jsx("input",{type:"radio",name:"setup-mode",value:"operations",checked:Ke==="operations",onChange:()=>bt("operations"),disabled:Ze}),t.jsx("span",{children:De("setup.operationsModeOption")})]})]}),!V&&!ft&&t.jsxs("div",{className:fe.optionGrid,children:[Ts&&t.jsxs("div",{className:fe.optionGroup,children:[t.jsxs("label",{className:`${fe.authModeLink} ${fe.optionRow}`,children:[t.jsx("input",{type:"radio",name:"workspace-setup-source",value:"local",checked:It==="local",onChange:()=>Xe("local"),disabled:Ze}),t.jsxs("span",{children:["Create new local ",En.toLowerCase()]})]}),t.jsxs("label",{className:`${fe.authModeLink} ${fe.optionRow}`,children:[t.jsx("input",{type:"radio",name:"workspace-setup-source",value:"cloud",checked:It==="cloud",onChange:()=>Xe("cloud"),disabled:Ze}),t.jsxs("span",{children:["Sync existing cloud ",En.toLowerCase()]})]})]}),pa?t.jsxs("div",{className:fe.optionGroup,children:[!_e&&!kn&&t.jsx("p",{className:fe.loginError,children:"Cloud workspace sync is unavailable right now. Switch back to local setup or refresh runtime configuration."}),!_e&&kn&&!$e&&t.jsxs(t.Fragment,{children:[t.jsx("p",{className:fe.inlineHint,children:"Sign in to choose one of your cloud projects."}),t.jsxs("div",{className:fe.actionRowEnd,children:[t.jsx("button",{className:m.cancelBtn,disabled:Ze,onClick:()=>{b(`/login?mode=login&next=${encodeURIComponent(Cr)}`,{replace:!0})},children:"Sign In"}),fa&&t.jsx("button",{className:m.submitBtn,disabled:Ze,onClick:()=>{b(`/login?mode=register&next=${encodeURIComponent(Cr)}`,{replace:!0})},children:"Register"})]})]}),!_e&&kn&&$e&&t.jsxs(t.Fragment,{children:[t.jsxs("select",{className:m.input,value:ot,onChange:$=>xt($.target.value),disabled:Ze||jt||Ye.length===0,children:[Ye.length===0&&t.jsx("option",{value:"",children:jt?"Loading cloud projects...":"No cloud projects found"}),Ye.map($=>t.jsxs("option",{value:$.id,children:[$.name," (",$.id,")"]},$.id))]}),t.jsx("div",{className:fe.actionRowEnd,children:t.jsx("button",{className:m.cancelBtn,disabled:Ze||jt,onClick:()=>{Ra()},children:"Refresh Cloud Projects"})}),q&&t.jsx("p",{className:fe.loginError,children:q})]}),_e&&t.jsxs(t.Fragment,{children:[t.jsxs("p",{className:fe.inlineHint,children:['Importing "',_e.name,'" from cloud into local.']}),t.jsx("div",{className:fe.optionGroup,children:ls.map($=>t.jsx("p",{className:fe.inlineHint,children:$},$))}),t.jsx("p",{className:fe.inlineHint,children:ne?"Finishing setup and opening your workspace.":Ht||"Pulling tasks, taxonomies, and settings into local."}),!ne&&Vt&&t.jsx("p",{className:fe.inlineHint,children:Vt})]})]}):t.jsxs(t.Fragment,{children:[Qa&&t.jsxs(t.Fragment,{children:[t.jsx("p",{className:fe.loginSubtitle,children:"Workspace name"}),t.jsx("input",{className:m.input,type:"text",value:Ue,placeholder:"Workspace name",onChange:$=>At($.target.value),disabled:Ze}),t.jsx("p",{className:fe.loginSubtitle,children:"Workspace description"}),t.jsx("textarea",{className:m.textarea,value:Wt,placeholder:"Workspace description (optional)",onChange:$=>Tt($.target.value),disabled:Ze,rows:4})]}),Vr&&t.jsxs("div",{className:fe.optionGroup,children:[t.jsx("p",{className:fe.loginSubtitle,children:"What are you working on?"}),t.jsxs("select",{className:m.input,value:ct,onChange:$=>dt($.target.value),disabled:Ze||Nt||je.length===0,children:[je.length===0&&t.jsx("option",{value:"",children:Nt?"Loading starter options...":"No starter options available"}),je.map($=>t.jsx("option",{value:$.id,children:$.label},$.id))]}),rn?t.jsx(t.Fragment,{children:rn.description?t.jsx("p",{className:fe.inlineHint,children:rn.description}):null}):null,t.jsxs("div",{className:fe.optionGroup,children:[t.jsx("p",{className:fe.loginSubtitle,children:"Apply Starter Sections"}),t.jsxs("label",{className:`${fe.authModeLink} ${fe.optionRow}`,children:[t.jsx("input",{type:"checkbox",checked:ut.categories,onChange:()=>Mt($=>({...$,categories:!$.categories})),disabled:Ze||!rn?.categories.length}),t.jsx("span",{children:"Categories"})]}),A?t.jsx("p",{className:fe.inlineHint,children:A}):null,t.jsxs("label",{className:`${fe.authModeLink} ${fe.optionRow}`,children:[t.jsx("input",{type:"checkbox",checked:ut.types,onChange:()=>Mt($=>({...$,types:!$.types})),disabled:Ze||!rn?.types.length}),t.jsx("span",{children:"Task Types"})]}),Ne?t.jsx("p",{className:fe.inlineHint,children:Ne}):null,t.jsxs("label",{className:`${fe.authModeLink} ${fe.optionRow}`,children:[t.jsx("input",{type:"checkbox",checked:ut.priorities,onChange:()=>Mt($=>({...$,priorities:!$.priorities})),disabled:Ze||!rn?.priorities.length}),t.jsx("span",{children:"Priorities"})]}),rt?t.jsx("p",{className:fe.inlineHint,children:rt}):null]}),Nt?t.jsx("p",{className:fe.inlineHint,children:"Loading starter options…"}):null,Yt?t.jsx("p",{className:fe.loginError,children:Yt}):null]}),!Tn&&kn&&$e&&Qa&&t.jsxs("div",{className:fe.optionGroup,children:[t.jsxs("label",{className:`${fe.authModeLink} ${fe.optionRow}`,children:[t.jsx("input",{type:"checkbox",checked:wt,onChange:$=>tt($.target.checked),disabled:Ze}),t.jsx("span",{children:"Sync to cloud after setup"})]}),t.jsx("p",{className:fe.inlineHint,children:"When enabled, this project will connect to cloud sync as soon as setup finishes."})]})]})]}),t.jsxs("div",{className:fe.authModeLinks,children:[Vr?t.jsx("button",{className:m.cancelBtn,onClick:()=>{Me(null),c(null),ze("details")},children:"Back"}):Sn?t.jsx("button",{className:m.cancelBtn,onClick:()=>{Me(null),c(null),b("/",{replace:!0})},children:"Cancel"}):Gt==="cloud"?t.jsx("button",{className:m.cancelBtn,onClick:async()=>{await jn.logout(),b("/login",{replace:!0})},children:De("setup.signOut")}):null,ft?t.jsx("button",{className:m.submitBtn,disabled:Ze||Ca&&!!_e&&!Dn,onClick:async()=>{Qe(!0),c(null),Me(null);try{const $=await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({setup:{mode:Ke}})}),We=await $.json().catch(()=>({}));!$.ok||We?.success===!1?Me(We?.error||De("setup.saveFailedWithStatus",{status:$.status})):(c(De("setup.globalSetupSaved")),await Mn())}catch{Me(De("setup.saveFailed"))}finally{Qe(!1)}},children:De(Ze?"setup.saving":"setup.saveGlobalSetup")}):V?t.jsx("button",{className:m.submitBtn,disabled:Ze,onClick:Mn,children:De("setup.retrySetupCheck")}):t.jsx("button",{className:m.submitBtn,disabled:Ze||Ca&&!_e&&!$e,onClick:async()=>{if(Ca&&_e){if(!Dn)return;Qe(!0),c(`Retrying import for ${_e.name}...`),Me(null);try{await br()}catch{c(null),Me(`Failed to retry import for "${_e.name}".`)}finally{Qe(!1)}return}if(pa){if(!kn){Me("Cloud workspace sync is unavailable right now."),Qe(!1);return}if(!$e){Me("Sign in is required before syncing a cloud project."),Qe(!1);return}const $=Ye.find(ms=>ms.id===ot);if(!$){Me("Select a cloud project to sync."),Qe(!1);return}const We=await zt({workspaceId:$.id,name:$.name||$.id,description:$.description||void 0});if(!We.success){Me(We.error||De("setup.saveWorkspaceFailed")),Qe(!1);return}const Ir=String(We.workspaceId||$.id||"").trim();if(!Ir){Me("Failed to resolve workspace id for sync setup."),Qe(!1);return}const ca=await fetch("/api/taskforce/ui-state",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({workspaceId:Ir,stateKey:"workspace-sync",patch:{version:2,enabled:!0,phase:"attach-cloud",pullCursor:null,lastPullAt:null,lastPushAt:null,lastSyncedAt:null}})}),er=await ca.json().catch(()=>({}));if(!ca.ok||er?.success===!1){Me(er?.error||`Failed to configure workspace sync (${ca.status})`),Qe(!1);return}Rn({enabled:!0,phase:"attach-cloud",pullCursor:null}),await Mn(),$t({workspaceId:Ir,name:$.name||$.id}),Ce(!1),c(`Importing ${$.name||$.id} from cloud...`),Qe(!1);return}if(Qa){if(!Ue.trim()){Me("Workspace name is required before continuing.");return}Me(null),c(null),ze("starter");return}Qe(!0),c(null),Me(null);{const $=Sn||Ot?.workspaceSetupState==="missing",We=Sn||Ma&&$,Ir=We?await pn(Ue,Wt||void 0):null,ca=We?null:await zt({workspaceId:$?void 0:Ot?.workspaceId,name:Ue,description:Wt}),er=Ir||ca;if(!er?.success)Me(er?.error||De("setup.saveWorkspaceFailed"));else{const ms=String(Ir?.workspace?.id||ca?.workspaceId||Ot?.workspaceId||"").trim();if(!ms){Me("Failed to resolve workspace id for setup."),Qe(!1);return}if(It==="local"&&!!rn&&(ut.categories||ut.types||ut.priorities)&&rn){const tr=await cs.onApplySystemTaxonomyPack({pack:rn,sections:ut,remapExistingValuesToDefault:!0,workspaceIdOverride:ms});if(!tr?.success){Me(tr?.error||"Failed to apply starter taxonomy library."),Qe(!1);return}}const In=!!(!Tn&&wt&&kn&&$e),Wn=await fetch("/api/taskforce/ui-state",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({workspaceId:ms,stateKey:"workspace-sync",patch:{version:2,enabled:In,phase:In?"provision-local":"idle",pullCursor:null,lastPullAt:null,lastPushAt:null,lastSyncedAt:null}})}),Nr=await Wn.json().catch(()=>({}));if(!Wn.ok||Nr?.success===!1){Me(Nr?.error||`Failed to configure workspace sync (${Wn.status})`),Qe(!1);return}Rn({enabled:In,phase:In?"provision-local":"idle",pullCursor:null}),c(In?`${En} setup saved. Cloud sync enabled.`:De("setup.workspaceSetupSaved",{workspaceLabel:En})),Sn&&(await Mn(),await Ln(!0),b("/",{replace:!0}))}}Qe(!1)},children:ht})]})]})})})}return t.jsx(rL,{...jn,onHeaderMouseDown:s,isDragging:o,onClose:d})}function oL(e){return Qg()?t.jsx(gf,{...e}):t.jsx(ey,{children:t.jsx(gf,{...e})})}const $h={},yf="STAGING_MARKER_2026_02_24";typeof window<"u"&&(window.__TASKFORCE_BUILD_MARKER=yf,console.info(`[Taskforce] Build marker: ${yf}`));function iL(){return Km($h).apiBaseUrl||void 0}function cL(e){const n=Km($h),r=n.cloudAuthBaseUrl;if(r)if(typeof window<"u"){const s=window.location.hostname.toLowerCase(),o=s==="localhost"||s==="127.0.0.1"||s==="::1",d="".trim().toLowerCase()==="true";if(!o&&!d)try{const i=new URL(r,window.location.origin);if(i.origin!==window.location.origin)console.warn(`[Taskforce] Ignoring cross-origin cloud auth base in hosted runtime: ${i.origin}`);else return r}catch{}else return r}else return r;if(n.baseUrl)return n.baseUrl;if(e)return e}function lL(){const e=iL(),n=cL(e);return t.jsx(ty,{children:t.jsx(oL,{mode:"standalone",config:{apiEndpoint:"/api/taskforce/task",apiBaseUrl:e,cloudAuthBaseUrl:n}})})}fg.createRoot(document.getElementById("root")).render(t.jsx(pt.StrictMode,{children:t.jsx(lL,{})}));export{SL as A,af as B,VE as C,_c as D,ZE as E,Pi as I,ao as M,wL as P,mh as R,Bl as T,bu as a,wr as b,Oy as c,my as d,Fn as e,um as f,au as g,Xj as h,Rk as i,bL as j,Qj as k,lh as l,XR as m,Le as n,sv as o,nh as p,su as q,da as r,ou as s,m as t,vL as u,gL as v,kL as w,yL as x,qm as y,nf as z};
|