@taskforcehq/taskforce 0.3.170 → 0.3.300

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.
Files changed (696) hide show
  1. package/README.md +52 -21
  2. package/dist/Taskforce.module.css +3394 -5981
  3. package/dist/TaskforceCore.CategoryFallback.test.js +5 -2
  4. package/dist/TaskforceCore.filter-persistence.test.js +402 -0
  5. package/dist/TaskforceCore.js +388 -71
  6. package/dist/TaskforceCore.routing.test.js +311 -0
  7. package/dist/TaskforceCore.test.js +3344 -615
  8. package/dist/TaskforceWidget.js +3 -2
  9. package/dist/__tests__/localizationCatalogs.test.js +48 -31
  10. package/dist/__tests__/workflowSimulation.test.js +2 -2
  11. package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.d.ts +60 -0
  12. package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.js +324 -0
  13. package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.test.js +278 -0
  14. package/dist/annotatedAttachments/payload.d.ts +2 -0
  15. package/dist/annotatedAttachments/payload.js +54 -0
  16. package/dist/annotatedAttachments/payload.test.js +67 -0
  17. package/dist/annotatedAttachments/service.d.ts +49 -0
  18. package/dist/annotatedAttachments/service.js +121 -0
  19. package/dist/annotatedAttachments/types.d.ts +86 -0
  20. package/dist/cli.js +74 -25
  21. package/dist/compat/deploymentCompat.d.ts +12 -0
  22. package/dist/compat/deploymentCompat.js +43 -0
  23. package/dist/compat/workspaceSyncCompat.d.ts +6 -0
  24. package/dist/compat/workspaceSyncCompat.js +79 -0
  25. package/dist/compat/workspaceSyncCompat.test.js +87 -0
  26. package/dist/components/features/AgentsModule.d.ts +5 -0
  27. package/dist/components/features/AgentsModule.js +131 -0
  28. package/dist/components/features/AgentsModule.test.js +102 -0
  29. package/dist/components/features/AnnotatedAttachmentWorkspace.d.ts +24 -0
  30. package/dist/components/features/AnnotatedAttachmentWorkspace.js +1942 -0
  31. package/dist/components/features/AnnotatedAttachmentWorkspace.test.js +2831 -0
  32. package/dist/components/features/DocumentGenerateModal.js +8 -16
  33. package/dist/components/features/DocumentIndex.d.ts +3 -4
  34. package/dist/components/features/DocumentIndex.js +22 -10
  35. package/dist/components/features/DocumentViewer.d.ts +6 -2
  36. package/dist/components/features/DocumentViewer.js +1000 -18
  37. package/dist/components/features/DocumentWorkspace.d.ts +40 -2
  38. package/dist/components/features/DocumentWorkspace.js +96 -16
  39. package/dist/components/features/DocumentWorkspace.test.js +1202 -0
  40. package/dist/components/features/InitiativesModule.d.ts +22 -0
  41. package/dist/components/features/InitiativesModule.js +33 -0
  42. package/dist/components/features/TaskSettings.d.ts +41 -32
  43. package/dist/components/features/TaskSettings.js +798 -313
  44. package/dist/components/features/TaskSettings.test.js +1221 -47
  45. package/dist/components/features/WorkflowsModule.d.ts +27 -0
  46. package/dist/components/features/WorkflowsModule.js +21 -0
  47. package/dist/components/features/documentWorkspaceFilters.d.ts +10 -0
  48. package/dist/components/features/documentWorkspaceFilters.js +11 -0
  49. package/dist/components/features/settings/CategoryManager.d.ts +2 -0
  50. package/dist/components/features/settings/CategoryManager.js +15 -8
  51. package/dist/components/features/settings/PriorityManager.d.ts +18 -0
  52. package/dist/components/features/settings/PriorityManager.js +51 -0
  53. package/dist/components/features/settings/TaxonomyEditor.d.ts +2 -1
  54. package/dist/components/features/settings/TaxonomyEditor.js +41 -18
  55. package/dist/components/features/settings/TaxonomyLibraryManager.d.ts +26 -0
  56. package/dist/components/features/settings/TaxonomyLibraryManager.js +301 -0
  57. package/dist/components/features/settings/TaxonomyLibraryManager.test.js +141 -0
  58. package/dist/components/features/settings/TaxonomyManager.d.ts +35 -12
  59. package/dist/components/features/settings/TaxonomyManager.js +59 -27
  60. package/dist/components/features/settings/TypeManager.d.ts +11 -0
  61. package/dist/components/features/settings/TypeManager.js +48 -11
  62. package/dist/components/features/settings/{WorkflowEditorPrototype.d.ts → WorkflowEditor.d.ts} +2 -2
  63. package/dist/components/features/settings/{WorkflowEditorPrototype.js → WorkflowEditor.js} +3 -3
  64. package/dist/components/task/TaskActionHeader.d.ts +12 -2
  65. package/dist/components/task/TaskActionHeader.js +64 -8
  66. package/dist/components/task/TaskActionHeader.test.js +73 -0
  67. package/dist/components/task/TaskCard.d.ts +14 -16
  68. package/dist/components/task/TaskCard.js +144 -174
  69. package/dist/components/task/TaskCard.test.js +416 -64
  70. package/dist/components/task/TaskContextUpload.d.ts +6 -5
  71. package/dist/components/task/TaskContextUpload.js +199 -64
  72. package/dist/components/task/TaskContextUpload.test.js +331 -14
  73. package/dist/components/task/TaskForm.d.ts +23 -29
  74. package/dist/components/task/TaskForm.js +348 -169
  75. package/dist/components/task/TaskForm.test.js +419 -23
  76. package/dist/components/task/TaskKanban.d.ts +20 -21
  77. package/dist/components/task/TaskKanban.js +176 -316
  78. package/dist/components/task/TaskKanban.planning-drop.test.js +93 -0
  79. package/dist/components/task/TaskList.d.ts +22 -11
  80. package/dist/components/task/TaskList.js +98 -12
  81. package/dist/components/task/TaskList.test.js +206 -7
  82. package/dist/components/task/TaskReferenceBadge.d.ts +12 -0
  83. package/dist/components/task/TaskReferenceBadge.js +5 -0
  84. package/dist/components/task/TaskStatusActions.d.ts +12 -0
  85. package/dist/components/task/TaskStatusActions.js +18 -0
  86. package/dist/components/task/TaskStatusActions.test.js +45 -0
  87. package/dist/components/ui/ImageReferenceBadge.d.ts +12 -0
  88. package/dist/components/ui/ImageReferenceBadge.js +5 -0
  89. package/dist/components/ui/LevelSelector.d.ts +2 -1
  90. package/dist/components/ui/LevelSelector.js +2 -2
  91. package/dist/components/ui/Markdown.d.ts +1 -2
  92. package/dist/components/ui/Markdown.js +2 -13
  93. package/dist/components/ui/Modal.d.ts +3 -2
  94. package/dist/components/ui/Modal.js +4 -3
  95. package/dist/components/ui/MultiSelectFilter.d.ts +3 -1
  96. package/dist/components/ui/MultiSelectFilter.js +2 -2
  97. package/dist/components/ui/ReferenceBadgeButton.d.ts +13 -0
  98. package/dist/components/ui/ReferenceBadgeButton.js +6 -0
  99. package/dist/components/ui/TaxonomyDropdown.d.ts +7 -1
  100. package/dist/components/ui/TaxonomyDropdown.js +58 -23
  101. package/dist/components/ui/TopNoticeLayer.d.ts +7 -0
  102. package/dist/components/ui/TopNoticeLayer.js +14 -0
  103. package/dist/components/ui/TopNoticeLayer.test.js +25 -0
  104. package/dist/components/views/AppShellHeader.d.ts +13 -0
  105. package/dist/components/views/AppShellHeader.js +19 -0
  106. package/dist/components/views/AppShellHeader.test.js +21 -0
  107. package/dist/components/views/PlanComparisonPage.d.ts +73 -0
  108. package/dist/components/views/PlanComparisonPage.js +196 -0
  109. package/dist/components/views/PlanComparisonPage.test.js +251 -0
  110. package/dist/components/views/PlansPage.d.ts +14 -0
  111. package/dist/components/views/PlansPage.js +355 -0
  112. package/dist/components/views/StandaloneLayout.d.ts +2 -2
  113. package/dist/components/views/StandaloneLayout.js +2212 -1194
  114. package/dist/components/views/WidgetView.d.ts +2 -2
  115. package/dist/components/views/WidgetView.js +149 -43
  116. package/dist/components/views/chrome/WorkspaceChromeSections.d.ts +57 -0
  117. package/dist/components/views/chrome/WorkspaceChromeSections.js +38 -0
  118. package/dist/components/views/chrome/WorkspaceChromeSections.test.js +54 -0
  119. package/dist/components/views/chrome/workspaceChrome.d.ts +31 -0
  120. package/dist/components/views/chrome/workspaceChrome.js +108 -0
  121. package/dist/components/views/chrome/workspaceChrome.test.js +52 -0
  122. package/dist/components/views/panels/DocumentFilterToolbar.d.ts +10 -0
  123. package/dist/components/views/panels/DocumentFilterToolbar.js +7 -0
  124. package/dist/components/views/panels/DocumentFilterToolbar.test.js +19 -0
  125. package/dist/components/views/panels/FilterToolbar.d.ts +66 -0
  126. package/dist/components/views/panels/FilterToolbar.js +21 -0
  127. package/dist/components/views/panels/FilterToolbar.test.d.ts +1 -0
  128. package/dist/components/views/panels/FilterToolbar.test.js +45 -0
  129. package/dist/components/views/panels/FilterToolbarControls.d.ts +46 -0
  130. package/dist/components/views/panels/FilterToolbarControls.js +61 -0
  131. package/dist/components/views/panels/PlanningDrawer.d.ts +115 -0
  132. package/dist/components/views/panels/PlanningDrawer.js +220 -0
  133. package/dist/components/views/panels/ScheduleSidebar.d.ts +52 -0
  134. package/dist/components/views/panels/ScheduleSidebar.js +127 -0
  135. package/dist/components/views/panels/scheduleUtils.d.ts +14 -0
  136. package/dist/components/views/panels/scheduleUtils.js +79 -0
  137. package/dist/components/views/teamManagementAccess.d.ts +6 -0
  138. package/dist/components/views/teamManagementAccess.js +18 -0
  139. package/dist/components/views/teamManagementAccess.test.d.ts +1 -0
  140. package/dist/components/views/teamManagementAccess.test.js +44 -0
  141. package/dist/config/clientDeployment.d.ts +2 -0
  142. package/dist/config/clientDeployment.js +13 -0
  143. package/dist/config/cloudEnvironment.d.ts +15 -0
  144. package/dist/config/cloudEnvironment.js +60 -0
  145. package/dist/config/deployment.d.ts +20 -0
  146. package/dist/config/deployment.js +67 -0
  147. package/dist/config/deployment.test.d.ts +1 -0
  148. package/dist/config/deployment.test.js +88 -0
  149. package/dist/config/envSchema.js +36 -8
  150. package/dist/config/envSchema.test.js +28 -0
  151. package/dist/core/AiProfileService.d.ts +66 -0
  152. package/dist/core/AiProfileService.js +320 -0
  153. package/dist/core/AiProfileService.test.d.ts +1 -0
  154. package/dist/core/AiProfileService.test.js +164 -0
  155. package/dist/core/AiProfiles.test.d.ts +1 -0
  156. package/dist/core/AiProfiles.test.js +449 -0
  157. package/dist/core/AttachmentLinkService.d.ts +15 -0
  158. package/dist/core/AttachmentLinkService.js +157 -0
  159. package/dist/core/AuthTokenService.d.ts +44 -0
  160. package/dist/core/AuthTokenService.js +207 -0
  161. package/dist/core/CreatedBy.test.js +134 -6
  162. package/dist/core/DeletedTaskLifecycleService.d.ts +33 -0
  163. package/dist/core/DeletedTaskLifecycleService.js +158 -0
  164. package/dist/core/DeletedTaskTrash.test.d.ts +1 -0
  165. package/dist/core/DeletedTaskTrash.test.js +104 -0
  166. package/dist/core/EntitlementsPolicy.test.js +78 -5
  167. package/dist/core/GlobalSettingsService.d.ts +16 -0
  168. package/dist/core/GlobalSettingsService.js +370 -0
  169. package/dist/core/JsonBackupRuntime.test.d.ts +1 -0
  170. package/dist/core/JsonBackupRuntime.test.js +155 -0
  171. package/dist/core/McpTokenService.d.ts +118 -0
  172. package/dist/core/McpTokenService.js +921 -0
  173. package/dist/core/PlanEntitlementService.d.ts +201 -0
  174. package/dist/core/PlanEntitlementService.js +1442 -0
  175. package/dist/core/PlanVersionPolicy.test.d.ts +1 -0
  176. package/dist/core/PlanVersionPolicy.test.js +178 -0
  177. package/dist/core/PlanningEntities.test.d.ts +1 -0
  178. package/dist/core/PlanningEntities.test.js +95 -0
  179. package/dist/core/ScheduleFields.test.js +15 -19
  180. package/dist/core/SignupMonetizationSettings.test.d.ts +1 -0
  181. package/dist/core/SignupMonetizationSettings.test.js +159 -0
  182. package/dist/core/Stats.test.d.ts +1 -0
  183. package/dist/core/Stats.test.js +36 -0
  184. package/dist/core/SyncReconciliationService.d.ts +93 -0
  185. package/dist/core/SyncReconciliationService.js +406 -0
  186. package/dist/core/SystemAdmin.test.js +578 -13
  187. package/dist/core/TaskActivityService.d.ts +21 -0
  188. package/dist/core/TaskActivityService.js +130 -0
  189. package/dist/core/TaskAttachmentsCanonical.test.d.ts +1 -0
  190. package/dist/core/TaskAttachmentsCanonical.test.js +306 -0
  191. package/dist/core/TaskAuditTimeline.test.d.ts +1 -0
  192. package/dist/core/TaskAuditTimeline.test.js +132 -0
  193. package/dist/core/TaskTaxonomyValidation.test.js +338 -15
  194. package/dist/core/Taskforce.d.ts +930 -183
  195. package/dist/core/Taskforce.ids.test.js +252 -0
  196. package/dist/core/Taskforce.js +3848 -2532
  197. package/dist/core/Taskforce.mcpAuth.test.d.ts +1 -0
  198. package/dist/core/Taskforce.mcpAuth.test.js +343 -0
  199. package/dist/core/Taskforce.realtimeMutation.test.js +57 -2
  200. package/dist/core/TaxonomySettingsService.d.ts +18 -0
  201. package/dist/core/TaxonomySettingsService.js +162 -0
  202. package/dist/core/WorkspaceDelete.test.js +32 -13
  203. package/dist/core/WorkspaceLifecycleService.d.ts +11 -0
  204. package/dist/core/WorkspaceLifecycleService.js +88 -0
  205. package/dist/core/WorkspacePermissions.test.js +95 -0
  206. package/dist/core/WorkspacePlanMode.test.js +114 -1
  207. package/dist/core/WorkspacePreferenceService.d.ts +41 -0
  208. package/dist/core/WorkspacePreferenceService.js +246 -0
  209. package/dist/core/WorkspaceSyncSettings.test.d.ts +1 -0
  210. package/dist/core/WorkspaceSyncSettings.test.js +65 -0
  211. package/dist/core/__tests__/TaskAttachmentsCanonical.test.d.ts +1 -0
  212. package/dist/core/__tests__/TaskAttachmentsCanonical.test.js +212 -0
  213. package/dist/core/shared.d.ts +36 -0
  214. package/dist/core/shared.js +128 -0
  215. package/dist/core/types.d.ts +614 -0
  216. package/dist/core/types.js +27 -0
  217. package/dist/documentReviews/DocumentReviewCommentStore.d.ts +56 -0
  218. package/dist/documentReviews/DocumentReviewCommentStore.js +230 -0
  219. package/dist/documentReviews/DocumentReviewSessionStore.d.ts +52 -0
  220. package/dist/documentReviews/DocumentReviewSessionStore.js +193 -0
  221. package/dist/documentReviews/DocumentReviewSessionStore.test.d.ts +1 -0
  222. package/dist/documentReviews/DocumentReviewSessionStore.test.js +127 -0
  223. package/dist/documentReviews/service.d.ts +68 -0
  224. package/dist/documentReviews/service.js +210 -0
  225. package/dist/documentReviews/types.d.ts +58 -0
  226. package/dist/documentReviews/types.js +1 -0
  227. package/dist/hooks/auth/useAuthGuardPolicy.d.ts +2 -0
  228. package/dist/hooks/auth/useAuthGuardPolicy.js +1 -0
  229. package/dist/hooks/tasks/useCurrentTaskRelations.d.ts +15 -0
  230. package/dist/hooks/tasks/useCurrentTaskRelations.js +37 -0
  231. package/dist/hooks/tasks/useTaskActions.d.ts +3 -0
  232. package/dist/hooks/tasks/useTaskActions.js +2 -0
  233. package/dist/hooks/tasks/useTaskEditorNavigation.d.ts +65 -0
  234. package/dist/hooks/tasks/useTaskEditorNavigation.js +235 -0
  235. package/dist/hooks/tasks/useTaskFilters.d.ts +2 -0
  236. package/dist/hooks/tasks/useTaskFilters.js +2 -0
  237. package/dist/hooks/tasks/useTaskFormActions.d.ts +58 -0
  238. package/dist/hooks/tasks/useTaskFormActions.js +365 -0
  239. package/dist/hooks/tasks/useTaskRelationships.d.ts +16 -0
  240. package/dist/hooks/tasks/useTaskRelationships.js +64 -0
  241. package/dist/hooks/ui/useResourceExport.d.ts +19 -0
  242. package/dist/hooks/ui/useResourceExport.js +84 -0
  243. package/dist/hooks/ui/useSettingsModel.d.ts +203 -0
  244. package/dist/hooks/ui/useSettingsModel.js +125 -0
  245. package/dist/hooks/ui/useSettingsPersistence.d.ts +36 -0
  246. package/dist/hooks/ui/useSettingsPersistence.js +254 -0
  247. package/dist/hooks/ui/useSettingsTaxonomyManagement.d.ts +119 -0
  248. package/dist/hooks/ui/useSettingsTaxonomyManagement.js +536 -0
  249. package/dist/hooks/ui/useUiNotice.d.ts +1 -0
  250. package/dist/hooks/ui/useUiNotice.js +1 -0
  251. package/dist/hooks/ui/useWorkflowTemplates.d.ts +37 -0
  252. package/dist/hooks/ui/useWorkflowTemplates.js +111 -0
  253. package/dist/hooks/ui/useZenMode.d.ts +5 -0
  254. package/dist/hooks/ui/useZenMode.js +32 -0
  255. package/dist/hooks/useFilterSort.d.ts +60 -0
  256. package/dist/hooks/useFilterSort.js +362 -0
  257. package/dist/hooks/useFilterSort.test.d.ts +1 -0
  258. package/dist/hooks/useFilterSort.test.js +333 -0
  259. package/dist/hooks/useRealtimeSync.d.ts +1 -0
  260. package/dist/hooks/useRealtimeSync.js +24 -9
  261. package/dist/hooks/useRealtimeSync.test.js +28 -1
  262. package/dist/hooks/useSyncOrchestrator.aiProfiles.test.d.ts +1 -0
  263. package/dist/hooks/useSyncOrchestrator.aiProfiles.test.js +34 -0
  264. package/dist/hooks/useSyncOrchestrator.d.ts +65 -103
  265. package/dist/hooks/useSyncOrchestrator.js +1538 -670
  266. package/dist/hooks/useSyncOrchestrator.retry-closure.test.js +700 -174
  267. package/dist/hooks/useTaskData.d.ts +35 -0
  268. package/dist/hooks/useTaskData.js +239 -0
  269. package/dist/hooks/useTaskData.test.d.ts +1 -0
  270. package/dist/hooks/useTaskData.test.js +119 -0
  271. package/dist/hooks/useTaskMutations.d.ts +46 -0
  272. package/dist/hooks/useTaskMutations.js +472 -0
  273. package/dist/hooks/useTaskMutations.test.d.ts +1 -0
  274. package/dist/hooks/useTaskMutations.test.js +80 -0
  275. package/dist/hooks/useTaskforce.contract.test.d.ts +1 -0
  276. package/dist/hooks/useTaskforce.contract.test.js +7 -0
  277. package/dist/hooks/useTaskforce.d.ts +260 -295
  278. package/dist/hooks/useTaskforce.js +1954 -2623
  279. package/dist/hooks/useTaskforce.priority-filters.test.js +6 -11
  280. package/dist/hooks/useTaskforce.sync-behavior.test.d.ts +1 -0
  281. package/dist/hooks/useTaskforce.sync-behavior.test.js +1120 -0
  282. package/dist/hooks/useUiNotice.d.ts +16 -0
  283. package/dist/hooks/useUiNotice.js +49 -0
  284. package/dist/hooks/useWorkspaceSyncController.d.ts +23 -46
  285. package/dist/hooks/useWorkspaceSyncController.js +280 -461
  286. package/dist/hooks/useWorkspaceSyncController.test.js +106 -199
  287. package/dist/hooks/workspace/useTaskforceApiRouting.d.ts +8 -0
  288. package/dist/hooks/workspace/useTaskforceApiRouting.js +91 -0
  289. package/dist/hooks/workspace/useTaskforceApiRouting.test.d.ts +1 -0
  290. package/dist/hooks/workspace/useTaskforceApiRouting.test.js +60 -0
  291. package/dist/hooks/workspace/useWorkspaceSyncController.d.ts +1 -0
  292. package/dist/hooks/workspace/useWorkspaceSyncController.js +1 -0
  293. package/dist/hooks/workspace/workspaceLocalState.d.ts +30 -0
  294. package/dist/hooks/workspace/workspaceLocalState.js +101 -0
  295. package/dist/localization/locales/en-US.d.ts +1 -8
  296. package/dist/localization/locales/en-US.js +4 -11
  297. package/dist/localization/locales/es-419.js +2 -9
  298. package/dist/localization/locales/pt-BR.js +2 -9
  299. package/dist/localization/localizationCatalogs.test.d.ts +1 -0
  300. package/dist/localization/localizationCatalogs.test.js +37 -0
  301. package/dist/main.d.ts +1 -0
  302. package/dist/main.js +9 -15
  303. package/dist/mcp/clientIntegrations.d.ts +33 -0
  304. package/dist/mcp/clientIntegrations.js +199 -0
  305. package/dist/mcp/clientIntegrations.test.d.ts +1 -0
  306. package/dist/mcp/clientIntegrations.test.js +110 -0
  307. package/dist/mcp/index.d.ts +2 -0
  308. package/dist/mcp/index.js +2 -0
  309. package/dist/mcp/optionResolution.test.js +6 -2
  310. package/dist/mcp/runtime.d.ts +120 -0
  311. package/dist/mcp/runtime.js +5668 -0
  312. package/dist/mcp/runtime.test.d.ts +1 -0
  313. package/dist/mcp/runtime.test.js +3293 -0
  314. package/dist/mcp/server.js +2 -1793
  315. package/dist/mcp/structuredCommentValidation.test.d.ts +1 -0
  316. package/dist/{__tests__ → mcp}/structuredCommentValidation.test.js +1 -1
  317. package/dist/mcp/structuredDocValidation.js +1 -2
  318. package/dist/mcp/structuredDocValidation.test.d.ts +1 -0
  319. package/dist/{__tests__ → mcp}/structuredDocValidation.test.js +9 -4
  320. package/dist/mcp/toolRegistry.d.ts +570 -0
  321. package/dist/mcp/toolRegistry.js +90 -0
  322. package/dist/mcp/toolRegistry.test.d.ts +1 -0
  323. package/dist/mcp/toolRegistry.test.js +30 -0
  324. package/dist/migrations/billingSchemaParity.test.js +111 -0
  325. package/dist/migrations/taskSchemaMigrations.d.ts +5 -0
  326. package/dist/migrations/taskSchemaMigrations.js +681 -39
  327. package/dist/migrations/taskSchemaMigrations.test.d.ts +1 -0
  328. package/dist/migrations/taskSchemaMigrations.test.js +210 -0
  329. package/dist/plugins/vite.js +13 -7
  330. package/dist/public/apple-touch-icon.png +0 -0
  331. package/dist/public/archive/phoenix/apple-touch-icon.png +0 -0
  332. package/dist/public/archive/phoenix/favicon.ico +0 -0
  333. package/dist/public/archive/phoenix/site.webmanifest +1 -0
  334. package/dist/public/favicon-96x96.png +0 -0
  335. package/dist/public/favicon.ico +0 -0
  336. package/dist/public/favicon.svg +17 -0
  337. package/dist/public/site.webmanifest +21 -1
  338. package/dist/public/web-app-manifest-192x192.png +0 -0
  339. package/dist/public/web-app-manifest-512x512.png +0 -0
  340. package/dist/releaseVersion.test.d.ts +1 -0
  341. package/dist/{__tests__/releaseVersion.test.js → releaseVersion.test.js} +1 -1
  342. package/dist/resources/templates/WORKFLOW_V2_POLICY.md +1 -1
  343. package/dist/resources/templates/workflow-sources/workflowDocs.mjs +62 -52
  344. package/dist/resources/templates/workflows/collaborate.yaml +11 -5
  345. package/dist/resources/templates/workflows/do.yaml +8 -2
  346. package/dist/resources/templates/workflows/evaluate.yaml +13 -7
  347. package/dist/resources/templates/workflows/execute.yaml +40 -23
  348. package/dist/resources/templates/workflows/plan.yaml +15 -8
  349. package/dist/resources/templates/workflows/review.yaml +14 -8
  350. package/dist/runtime/appGateDefinitions.d.ts +32 -0
  351. package/dist/runtime/appGateDefinitions.js +32 -0
  352. package/dist/runtime/appGates.d.ts +29 -0
  353. package/dist/runtime/appGates.js +53 -0
  354. package/dist/runtime/appGates.test.d.ts +1 -0
  355. package/dist/runtime/appGates.test.js +42 -0
  356. package/dist/runtime/migrationFlags.d.ts +1 -0
  357. package/dist/runtime/migrationFlags.js +1 -0
  358. package/dist/server/annotatedAttachmentsRoutes.test.d.ts +1 -0
  359. package/dist/server/annotatedAttachmentsRoutes.test.js +473 -0
  360. package/dist/server/auth.js +14 -2
  361. package/dist/server/auth.test.js +21 -1
  362. package/dist/server/cors.js +11 -5
  363. package/dist/server/cors.test.js +6 -0
  364. package/dist/server/documentReviewRoutes.test.d.ts +1 -0
  365. package/dist/server/documentReviewRoutes.test.js +157 -0
  366. package/dist/server/index.cookieProxy.test.js +46 -1
  367. package/dist/server/index.d.ts +20 -0
  368. package/dist/server/index.js +168 -41
  369. package/dist/server/index.rateLimit.test.js +6 -0
  370. package/dist/server/index.test.js +133 -2
  371. package/dist/server/mockStripe.d.ts +72 -0
  372. package/dist/server/mockStripe.js +357 -0
  373. package/dist/server/realtimeSyncWs.js +4 -0
  374. package/dist/server/routes/admin.d.ts +114 -0
  375. package/dist/server/routes/admin.js +2226 -0
  376. package/dist/server/routes/annotatedAttachments.d.ts +24 -0
  377. package/dist/server/routes/annotatedAttachments.js +235 -0
  378. package/dist/server/routes/auth.d.ts +61 -0
  379. package/dist/server/routes/auth.js +1296 -0
  380. package/dist/server/{routes.billing.d.ts → routes/billing.d.ts} +3 -2
  381. package/dist/server/routes/billing.js +2001 -0
  382. package/dist/server/routes/billing.test.d.ts +1 -0
  383. package/dist/server/routes/billing.test.js +1631 -0
  384. package/dist/server/routes/documentReviews.d.ts +11 -0
  385. package/dist/server/routes/documentReviews.js +191 -0
  386. package/dist/server/routes/documents.d.ts +118 -0
  387. package/dist/server/routes/documents.js +1113 -0
  388. package/dist/server/routes/resources.d.ts +25 -0
  389. package/dist/server/routes/resources.js +225 -0
  390. package/dist/server/routes/shared.d.ts +35 -0
  391. package/dist/server/routes/shared.js +305 -0
  392. package/dist/server/routes/shared.test.d.ts +1 -0
  393. package/dist/server/routes/shared.test.js +32 -0
  394. package/dist/server/{routes.sync.d.ts → routes/sync.d.ts} +5 -5
  395. package/dist/server/routes/sync.integration.test.d.ts +1 -0
  396. package/dist/server/routes/sync.integration.test.js +2003 -0
  397. package/dist/server/routes/sync.js +3143 -0
  398. package/dist/server/routes/tasks.d.ts +72 -0
  399. package/dist/server/routes/tasks.js +1252 -0
  400. package/dist/server/routes/workspaces.d.ts +32 -0
  401. package/dist/server/routes/workspaces.js +307 -0
  402. package/dist/server/routes.d.ts +8 -9
  403. package/dist/server/routes.js +968 -4092
  404. package/dist/server/routes.test.js +9043 -2415
  405. package/dist/server/runtimeMode.d.ts +1 -1
  406. package/dist/server/runtimeMode.js +3 -18
  407. package/dist/server/runtimeMode.test.js +3 -3
  408. package/dist/server/securityHeaders.d.ts +1 -1
  409. package/dist/server/securityHeaders.js +65 -6
  410. package/dist/server/securityHeaders.test.js +40 -2
  411. package/dist/services/templateEngine.test.d.ts +1 -0
  412. package/dist/{__tests__ → services}/templateEngine.test.js +1 -1
  413. package/dist/services/templates.test.d.ts +1 -0
  414. package/dist/{__tests__ → services}/templates.test.js +1 -1
  415. package/dist/services/workflowDocumentFixtures.test.d.ts +1 -0
  416. package/dist/{__tests__ → services}/workflowDocumentFixtures.test.js +4 -4
  417. package/dist/services/workflowExportMatrix.test.d.ts +1 -0
  418. package/dist/{__tests__ → services}/workflowExportMatrix.test.js +1 -1
  419. package/dist/services/workflowExportSnapshots.test.d.ts +1 -0
  420. package/dist/services/workflowGeneration.test.d.ts +1 -0
  421. package/dist/services/workflowSimulation.test.d.ts +1 -0
  422. package/dist/services/workflowSimulation.test.js +113 -0
  423. package/dist/services/workflowV2Policy.test.d.ts +1 -0
  424. package/dist/{__tests__ → services}/workflowV2Policy.test.js +2 -2
  425. package/dist/shared/aiProfileSurfaceType.d.ts +9 -0
  426. package/dist/shared/aiProfileSurfaceType.js +49 -0
  427. package/dist/shared/customTaxonomyLibrary.d.ts +11 -0
  428. package/dist/shared/customTaxonomyLibrary.js +276 -0
  429. package/dist/shared/customTaxonomyLibrary.test.d.ts +1 -0
  430. package/dist/shared/customTaxonomyLibrary.test.js +20 -0
  431. package/dist/shared/taxonomyCatalog.d.ts +19 -0
  432. package/dist/shared/taxonomyCatalog.js +36 -0
  433. package/dist/shared/taxonomyDefaults.d.ts +29 -0
  434. package/dist/shared/taxonomyDefaults.js +26 -0
  435. package/dist/shared/taxonomyLibrary.d.ts +15 -0
  436. package/dist/shared/taxonomyLibrary.js +98 -0
  437. package/dist/shared/taxonomyLibrary.test.d.ts +1 -0
  438. package/dist/shared/taxonomyLibrary.test.js +26 -0
  439. package/dist/shared/taxonomyState.d.ts +36 -0
  440. package/dist/shared/taxonomyState.js +73 -0
  441. package/dist/shared/taxonomyState.test.d.ts +1 -0
  442. package/dist/shared/taxonomyState.test.js +71 -0
  443. package/dist/shared/workflowDefaults.d.ts +9 -0
  444. package/dist/shared/workflowDefaults.js +11 -0
  445. package/dist/storage/documentIntegrity.d.ts +2 -0
  446. package/dist/storage/documentIntegrity.js +34 -17
  447. package/dist/storage/documentPurge.d.ts +2 -1
  448. package/dist/storage/documentPurge.js +35 -8
  449. package/dist/storage/index.d.ts +4 -0
  450. package/dist/storage/index.js +2 -0
  451. package/dist/storage/objectStorage.d.ts +1 -1
  452. package/dist/storage/objectStorageClient.d.ts +6 -4
  453. package/dist/storage/objectStorageClient.js +77 -29
  454. package/dist/storage/objectStorageClient.test.d.ts +1 -0
  455. package/dist/storage/objectStorageClient.test.js +57 -0
  456. package/dist/storage/objectStorageConfig.js +3 -1
  457. package/dist/storage/objectStorageConfig.test.d.ts +1 -0
  458. package/dist/storage/objectStorageConfig.test.js +38 -0
  459. package/dist/storage/postgresAdapter.d.ts +5 -0
  460. package/dist/storage/postgresAdapter.js +2 -2
  461. package/dist/storage/postgresAdapter.test.d.ts +1 -0
  462. package/dist/storage/postgresAdapter.test.js +29 -0
  463. package/dist/storage/taskAssetStore.d.ts +7 -4
  464. package/dist/storage/taskAssetStore.js +65 -60
  465. package/dist/storage/workspaceAssetStore.d.ts +122 -0
  466. package/dist/storage/workspaceAssetStore.js +496 -0
  467. package/dist/storage/workspaceAssetStore.test.d.ts +1 -0
  468. package/dist/storage/workspaceAssetStore.test.js +501 -0
  469. package/dist/sync/cloudSyncApi.d.ts +33 -2
  470. package/dist/sync/cloudSyncApi.js +37 -15
  471. package/dist/sync/cloudSyncApi.test.js +60 -3
  472. package/dist/sync/index.d.ts +2 -0
  473. package/dist/sync/index.js +3 -0
  474. package/dist/sync/syncService.d.ts +25 -0
  475. package/dist/sync/syncService.js +184 -16
  476. package/dist/sync/syncService.test.js +289 -25
  477. package/dist/sync/workspaceRepair.d.ts +114 -0
  478. package/dist/sync/workspaceRepair.js +566 -0
  479. package/dist/sync/workspaceSyncModel.d.ts +230 -2
  480. package/dist/sync/workspaceSyncModel.js +456 -17
  481. package/dist/sync/workspaceSyncModel.test.js +642 -0
  482. package/dist/sync/workspaceSyncState.d.ts +12 -0
  483. package/dist/sync/workspaceSyncState.js +12 -0
  484. package/dist/sync/workspaceSyncSurface.d.ts +33 -0
  485. package/dist/sync/workspaceSyncSurface.js +74 -0
  486. package/dist/types.d.ts +143 -18
  487. package/dist/types.js +9 -24
  488. package/dist/ui/assets/AgentsModule-TVmCgizS.js +1 -0
  489. package/dist/ui/assets/AnnotatedAttachmentWorkspace-BaS2VwIr.css +1 -0
  490. package/dist/ui/assets/AnnotatedAttachmentWorkspace-CAyhnPeR.js +3 -0
  491. package/dist/ui/assets/DocumentWorkspace-BOCw5e4D.js +250 -0
  492. package/dist/ui/assets/DocumentWorkspace-C_8T8oz-.css +1 -0
  493. package/dist/ui/assets/InitiativesModule-CN0r02Oi.js +1 -0
  494. package/dist/ui/assets/PlansPage-BlVC_lRq.css +1 -0
  495. package/dist/ui/assets/PlansPage-FcQSNLZd.js +1 -0
  496. package/dist/ui/assets/TaskSettings-BwB9NtmJ.css +1 -0
  497. package/dist/ui/assets/TaskSettings-Cw5zYD1L.js +8 -0
  498. package/dist/ui/assets/WorkflowsModule-CY9R2zPB.js +5 -0
  499. package/dist/ui/assets/index-Bzqy5QGm.js +6 -0
  500. package/dist/ui/assets/index-DxRiI3tY.css +1 -0
  501. package/dist/ui/assets/vendor-dnd-DRzYolkg.js +5 -0
  502. package/dist/ui/assets/{vendor-icons-ZFG3SGwo.js → vendor-icons-QZyhEwgT.js} +1 -1
  503. package/dist/ui/assets/{vendor-markdown-CKYkQHfj.js → vendor-markdown-BUxTU7dS.js} +1 -1
  504. package/dist/ui/assets/vendor-react-CKJs5o3c.js +61 -0
  505. package/dist/ui/assets/vendor-router-BbWMxlnO.js +3 -0
  506. package/dist/ui/branding/logos/logo.png +0 -0
  507. package/dist/ui/branding/logos/logo_dark.svg +27 -0
  508. package/dist/ui/branding/logos/logo_favicon.svg +35 -0
  509. package/dist/ui/branding/logos/logo_light.svg +27 -0
  510. package/dist/ui/favicon/apple-touch-icon.png +0 -0
  511. package/dist/ui/favicon/archive/phoenix/apple-touch-icon.png +0 -0
  512. package/dist/ui/favicon/archive/phoenix/favicon.ico +0 -0
  513. package/dist/ui/favicon/archive/phoenix/site.webmanifest +1 -0
  514. package/dist/ui/favicon/favicon-96x96.png +0 -0
  515. package/dist/ui/favicon/favicon.ico +0 -0
  516. package/dist/ui/favicon/favicon.svg +17 -0
  517. package/dist/ui/favicon/site.webmanifest +21 -1
  518. package/dist/ui/favicon/web-app-manifest-192x192.png +0 -0
  519. package/dist/ui/favicon/web-app-manifest-512x512.png +0 -0
  520. package/dist/ui/index.html +10 -7
  521. package/dist/ui/product/screen_01.png +0 -0
  522. package/dist/ui/product/screen_02.png +0 -0
  523. package/dist/ui/product/screen_03.png +0 -0
  524. package/dist/utils/annotatedAttachments.d.ts +20 -0
  525. package/dist/utils/annotatedAttachments.js +74 -0
  526. package/dist/utils/annotatedAttachments.test.d.ts +1 -0
  527. package/dist/utils/annotatedAttachments.test.js +108 -0
  528. package/dist/utils/assignees.d.ts +26 -0
  529. package/dist/utils/assignees.js +132 -0
  530. package/dist/utils/canonicalAssetKind.d.ts +16 -0
  531. package/dist/utils/canonicalAssetKind.js +39 -0
  532. package/dist/utils/canonicalAssetKind.test.d.ts +1 -0
  533. package/dist/utils/canonicalAssetKind.test.js +24 -0
  534. package/dist/utils/coalescedRefresh.d.ts +5 -0
  535. package/dist/utils/coalescedRefresh.js +16 -0
  536. package/dist/utils/coalescedRefresh.test.d.ts +1 -0
  537. package/dist/utils/coalescedRefresh.test.js +30 -0
  538. package/dist/utils/constants.d.ts +16 -3
  539. package/dist/utils/constants.icons.test.js +2 -1
  540. package/dist/utils/constants.js +70 -13
  541. package/dist/utils/contextAssetEvents.d.ts +7 -0
  542. package/dist/utils/contextAssetEvents.js +6 -0
  543. package/dist/utils/contextFiles.d.ts +14 -3
  544. package/dist/utils/contextFiles.js +40 -8
  545. package/dist/utils/documentManagerApi.d.ts +6 -0
  546. package/dist/utils/documentManagerApi.js +19 -0
  547. package/dist/utils/documentNames.d.ts +24 -0
  548. package/dist/utils/documentNames.js +91 -0
  549. package/dist/utils/documentReferences.d.ts +9 -0
  550. package/dist/utils/documentReferences.js +11 -0
  551. package/dist/utils/entityReferences.d.ts +9 -0
  552. package/dist/utils/entityReferences.js +32 -0
  553. package/dist/utils/imageReferences.d.ts +9 -0
  554. package/dist/utils/imageReferences.js +11 -0
  555. package/dist/utils/planParser.d.ts +2 -2
  556. package/dist/utils/planParser.js +11 -11
  557. package/dist/utils/planParser.test.d.ts +1 -0
  558. package/dist/{__tests__ → utils}/planParser.test.js +22 -22
  559. package/dist/utils/planningReferences.d.ts +17 -0
  560. package/dist/utils/planningReferences.js +30 -0
  561. package/dist/utils/planningReferences.test.d.ts +1 -0
  562. package/dist/utils/planningReferences.test.js +17 -0
  563. package/dist/utils/taskActivity.d.ts +9 -0
  564. package/dist/utils/taskActivity.js +147 -0
  565. package/dist/utils/taskActivity.test.d.ts +1 -0
  566. package/dist/utils/taskActivity.test.js +34 -0
  567. package/dist/utils/taskDraftDefaults.d.ts +21 -0
  568. package/dist/utils/taskDraftDefaults.js +40 -0
  569. package/dist/utils/taskDraftDefaults.test.d.ts +1 -0
  570. package/dist/utils/taskDraftDefaults.test.js +34 -0
  571. package/dist/utils/taskNormalization.d.ts +25 -0
  572. package/dist/utils/taskNormalization.js +161 -0
  573. package/dist/utils/taskNormalization.test.d.ts +1 -0
  574. package/dist/utils/taskNormalization.test.js +158 -0
  575. package/dist/utils/taskReferences.d.ts +5 -0
  576. package/dist/utils/taskReferences.js +11 -0
  577. package/dist/utils/taskforceApiClient.d.ts +2 -0
  578. package/dist/utils/taskforceApiClient.js +101 -3
  579. package/dist/utils/taskforceApiClient.test.d.ts +1 -0
  580. package/dist/utils/taskforceApiClient.test.js +44 -0
  581. package/dist/utils/taxonomyFilterOptions.d.ts +2 -0
  582. package/dist/utils/taxonomyFilterOptions.js +17 -0
  583. package/dist/utils/taxonomyFormDefaults.d.ts +3 -0
  584. package/dist/utils/taxonomyFormDefaults.js +28 -0
  585. package/dist/utils/taxonomyFormDefaults.test.d.ts +1 -0
  586. package/dist/utils/taxonomyFormDefaults.test.js +63 -0
  587. package/dist/utils/taxonomyLifecycle.d.ts +3 -0
  588. package/dist/utils/taxonomyLifecycle.js +17 -0
  589. package/dist/utils/taxonomySorting.d.ts +7 -0
  590. package/dist/utils/taxonomySorting.js +74 -0
  591. package/dist/utils/theme.d.ts +15 -0
  592. package/dist/utils/theme.js +23 -0
  593. package/dist/utils/uiNotice.d.ts +7 -0
  594. package/dist/utils/uiNotice.js +6 -0
  595. package/dist/utils/uiNotice.test.d.ts +1 -0
  596. package/dist/utils/uiNotice.test.js +18 -0
  597. package/dist/utils/workspaceIdentity.d.ts +14 -0
  598. package/dist/utils/workspaceIdentity.js +21 -0
  599. package/dist/utils/workspaceIdentity.test.js +30 -1
  600. package/dist/utils/workspaceSyncPresentation.d.ts +20 -0
  601. package/dist/utils/workspaceSyncPresentation.js +21 -0
  602. package/dist/utils/workspaceSyncPresentation.test.d.ts +1 -0
  603. package/dist/utils/workspaceSyncPresentation.test.js +36 -0
  604. package/package.json +28 -23
  605. package/scripts/bootstrap-playwright-auth.mjs +155 -0
  606. package/scripts/check-compat-boundaries.mjs +41 -0
  607. package/scripts/check-env.ts +9 -2
  608. package/scripts/debug-login.mjs +32 -0
  609. package/scripts/migrate-planning-model.ts +233 -0
  610. package/scripts/migrate-task-data-assets.mjs +408 -0
  611. package/scripts/playwright-auth.sh +11 -0
  612. package/scripts/run-dev-proxy.sh +2 -0
  613. package/scripts/update-homebrew-formula.sh +2 -2
  614. package/scripts/with-esbuild.sh +11 -0
  615. package/src/resources/templates/WORKFLOW_V2_POLICY.md +1 -1
  616. package/src/resources/templates/workflow-sources/workflowDocs.mjs +62 -52
  617. package/src/resources/templates/workflows/collaborate.yaml +11 -5
  618. package/src/resources/templates/workflows/do.yaml +8 -2
  619. package/src/resources/templates/workflows/evaluate.yaml +13 -7
  620. package/src/resources/templates/workflows/execute.yaml +40 -23
  621. package/src/resources/templates/workflows/plan.yaml +15 -8
  622. package/src/resources/templates/workflows/review.yaml +14 -8
  623. package/dist/TaskforceScreenshot.d.ts +0 -11
  624. package/dist/TaskforceScreenshot.js +0 -113
  625. package/dist/compat/priorityCompat.d.ts +0 -2
  626. package/dist/compat/priorityCompat.js +0 -24
  627. package/dist/components/features/settings/TaxonomyManager 2.d.ts +0 -52
  628. package/dist/components/features/settings/TaxonomyManager 2.js +0 -75
  629. package/dist/components/task/TaskKanban 2.d.ts +0 -76
  630. package/dist/components/task/TaskKanban 2.js +0 -1004
  631. package/dist/components/task/TaskScreenshotSection.d.ts +0 -15
  632. package/dist/components/task/TaskScreenshotSection.js +0 -22
  633. package/dist/components/views/StandaloneLayout 2.d.ts +0 -8
  634. package/dist/components/views/StandaloneLayout 2.js +0 -1660
  635. package/dist/core/InitiativeTemplates.test.js +0 -50
  636. package/dist/core/ParentLifecycle.test.js +0 -98
  637. package/dist/migrations/clientMigrations.d.ts +0 -9
  638. package/dist/migrations/clientMigrations.js +0 -74
  639. package/dist/migrations/flags.d.ts +0 -6
  640. package/dist/migrations/flags.js +0 -8
  641. package/dist/migrations/taskMigrations.d.ts +0 -71
  642. package/dist/migrations/taskMigrations.js +0 -236
  643. package/dist/migrations/taskMigrations.test.js +0 -34
  644. package/dist/server/routes.billing.js +0 -991
  645. package/dist/server/routes.billing.test.js +0 -387
  646. package/dist/server/routes.sync.integration.test.js +0 -470
  647. package/dist/server/routes.sync.js +0 -1141
  648. package/dist/soak/syncSoakHarness.d.ts +0 -6
  649. package/dist/soak/syncSoakHarness.js +0 -10
  650. package/dist/ui/assets/index-0W5vyCpn.css +0 -1
  651. package/dist/ui/assets/index-MCZuNNfn.js +0 -23
  652. package/dist/ui/assets/logo_white_01-0Vx-iIIv.png +0 -0
  653. package/dist/ui/assets/vendor-dnd-BI1K77C1.js +0 -5
  654. package/dist/ui/assets/vendor-react-DdIDsh7f.js +0 -9
  655. package/dist/ui/assets/vendor-router-BtiNU7Dl.js +0 -3
  656. package/dist/utils/taskHierarchy.d.ts +0 -4
  657. package/dist/utils/taskHierarchy.js +0 -69
  658. package/dist/utils/taskHierarchy.test.js +0 -38
  659. package/dist/utils/taskParenting.d.ts +0 -3
  660. package/dist/utils/taskParenting.js +0 -24
  661. package/dist/utils/taskParenting.test.js +0 -21
  662. package/dist/utils/taskRelations.d.ts +0 -6
  663. package/dist/utils/taskRelations.js +0 -24
  664. package/dist/utils/taskRelations.test.js +0 -34
  665. package/scripts/check-compat-boundaries.js +0 -48
  666. /package/dist/{__tests__/planParser.test.d.ts → TaskforceCore.filter-persistence.test.d.ts} +0 -0
  667. /package/dist/{__tests__/releaseVersion.test.d.ts → TaskforceCore.routing.test.d.ts} +0 -0
  668. /package/dist/{__tests__/structuredCommentValidation.test.d.ts → annotatedAttachments/AnnotatedAttachmentSessionStore.test.d.ts} +0 -0
  669. /package/dist/{__tests__/structuredDocValidation.test.d.ts → annotatedAttachments/payload.test.d.ts} +0 -0
  670. /package/dist/{__tests__/templateEngine.test.d.ts → annotatedAttachments/types.js} +0 -0
  671. /package/dist/{__tests__/templates.test.d.ts → compat/workspaceSyncCompat.test.d.ts} +0 -0
  672. /package/dist/{__tests__/workflowDocumentFixtures.test.d.ts → components/features/AgentsModule.test.d.ts} +0 -0
  673. /package/dist/{__tests__/workflowExportMatrix.test.d.ts → components/features/AnnotatedAttachmentWorkspace.test.d.ts} +0 -0
  674. /package/dist/{__tests__/workflowExportSnapshots.test.d.ts → components/features/DocumentWorkspace.test.d.ts} +0 -0
  675. /package/dist/{__tests__/workflowGeneration.test.d.ts → components/features/settings/TaxonomyLibraryManager.test.d.ts} +0 -0
  676. /package/dist/{__tests__/workflowV2Policy.test.d.ts → components/task/TaskActionHeader.test.d.ts} +0 -0
  677. /package/dist/{core/InitiativeTemplates.test.d.ts → components/task/TaskKanban.planning-drop.test.d.ts} +0 -0
  678. /package/dist/{core/ParentLifecycle.test.d.ts → components/task/TaskStatusActions.test.d.ts} +0 -0
  679. /package/dist/{migrations/taskMigrations.test.d.ts → components/ui/TopNoticeLayer.test.d.ts} +0 -0
  680. /package/dist/{server/routes.billing.test.d.ts → components/views/AppShellHeader.test.d.ts} +0 -0
  681. /package/dist/{server/routes.sync.integration.test.d.ts → components/views/PlanComparisonPage.test.d.ts} +0 -0
  682. /package/dist/{utils/taskHierarchy.test.d.ts → components/views/chrome/WorkspaceChromeSections.test.d.ts} +0 -0
  683. /package/dist/{utils/taskParenting.test.d.ts → components/views/chrome/workspaceChrome.test.d.ts} +0 -0
  684. /package/dist/{utils/taskRelations.test.d.ts → components/views/panels/DocumentFilterToolbar.test.d.ts} +0 -0
  685. /package/dist/public/{android-chrome-192x192.png → archive/phoenix/android-chrome-192x192.png} +0 -0
  686. /package/dist/public/{android-chrome-512x512.png → archive/phoenix/android-chrome-512x512.png} +0 -0
  687. /package/dist/public/{favicon-16x16.png → archive/phoenix/favicon-16x16.png} +0 -0
  688. /package/dist/public/{favicon-32x32.png → archive/phoenix/favicon-32x32.png} +0 -0
  689. /package/dist/public/{favicon.png → archive/phoenix/favicon.png} +0 -0
  690. /package/dist/{__tests__ → services}/workflowExportSnapshots.test.js +0 -0
  691. /package/dist/{__tests__ → services}/workflowGeneration.test.js +0 -0
  692. /package/dist/ui/favicon/{android-chrome-192x192.png → archive/phoenix/android-chrome-192x192.png} +0 -0
  693. /package/dist/ui/favicon/{android-chrome-512x512.png → archive/phoenix/android-chrome-512x512.png} +0 -0
  694. /package/dist/ui/favicon/{favicon-16x16.png → archive/phoenix/favicon-16x16.png} +0 -0
  695. /package/dist/ui/favicon/{favicon-32x32.png → archive/phoenix/favicon-32x32.png} +0 -0
  696. /package/dist/ui/favicon/{favicon.png → archive/phoenix/favicon.png} +0 -0
@@ -0,0 +1,6 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/TaskSettings-Cw5zYD1L.js","assets/vendor-react-CKJs5o3c.js","assets/vendor-icons-QZyhEwgT.js","assets/vendor-markdown-BUxTU7dS.js","assets/vendor-dnd-DRzYolkg.js","assets/vendor-router-BbWMxlnO.js","assets/TaskSettings-BwB9NtmJ.css","assets/AnnotatedAttachmentWorkspace-CAyhnPeR.js","assets/AnnotatedAttachmentWorkspace-BaS2VwIr.css","assets/DocumentWorkspace-BOCw5e4D.js","assets/DocumentWorkspace-C_8T8oz-.css","assets/WorkflowsModule-CY9R2zPB.js","assets/AgentsModule-TVmCgizS.js","assets/InitiativesModule-CN0r02Oi.js","assets/PlansPage-FcQSNLZd.js","assets/PlansPage-BlVC_lRq.css"])))=>i.map(i=>d[i]);
2
+ import{r as a,j as e,R as ut,a as Ci,b as Xf}from"./vendor-react-CKJs5o3c.js";import{I as $s,C as xi,a as jc,b as Xr,c as Rl,F as Qf,A as eh,R as Xu,T as El,L as Qu,d as Ai,e as th,X as ji,f as bm,g as _m,h as Fa,i as Ii,j as Lu,k as Nc,P as nh,D as Ep,l as ah,B as Ud,U as xc,m as tr,n as sh,S as rh,G as oh,o as ih,p as Cm,q as ch,r as ep,s as xm,t as lh,u as Ac,v as Am,w as dh,x as Tm,y as uh,z as ph,E as mh,M as Lp,H as Mp,J as fh,K as hh,Z as gh,N as yh,O as kh,Q as Sh,V as vh,W as wh,Y as bh,_ as _h,$ as Ch}from"./vendor-icons-QZyhEwgT.js";import{M as xh,r as Ah,a as Th}from"./vendor-markdown-BUxTU7dS.js";import{u as Im,a as tp,b as Ih,D as jm,c as jh,S as Nm,v as Rm,P as Dm,d as Pm,C as pp,e as Nh,p as Rh,f as Bp,s as Dh,K as Ph,g as Fl,h as Eh,i as ru,j as Lh}from"./vendor-dnd-DRzYolkg.js";import{u as Em,a as Lm,b as Mh,M as Bh,N as Wp,B as Wh}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"]'))r(o);new MutationObserver(o=>{for(const d of o)if(d.type==="childList")for(const l of d.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&r(l)}).observe(document,{childList:!0,subtree:!0});function s(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 r(o){if(o.ep)return;o.ep=!0;const d=s(o);fetch(o.href,d)}})();const Tc="default",ou="General",fs="task",Fh=2,Oh=[{value:Tc,label:ou,icon:"Inbox"}],Mm=[{value:fs,label:"Task",icon:"CheckSquare",color:"blue-500"}],$h=[{value:Fh,label:"Medium",color:"blue-500",icon:"Minus"}];function Uh(){return Oh.map(t=>({...t}))}function zh(){return Mm.map(t=>({...t}))}function Hh(t){const n=String(t||"").trim().toLowerCase();return Mm.find(s=>s.value===n)}function Bm(){return $h.map(t=>({...t}))}const Gh="default",Vh=[{value:Gh,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 Wm(){return Vh.map(t=>({...t}))}const Zh={categories:Uh(),types:zh(),priorities:Bm(),approaches:Wm(),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},qh=["light","dawn","dark","midnight"],qd="dark",Kh=[{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"}],Yh=new Set(qh),Jh=new Set(Kh.filter(t=>t.family==="light").map(t=>t.id));function Xh(t){return typeof t=="string"&&Yh.has(t)}function wc(t){if(typeof t!="string")return null;const n=t.trim().toLowerCase();return Xh(n)?n:null}function Fm(t){const n=wc(t);return n!==null&&Jh.has(n)}function np(t){const n=typeof t=="number"?t:Number(t);if(!Number.isFinite(n))return null;const s=Math.floor(n);return s>0?s:null}function iu(t,n){const s=np(typeof n=="object"&&n!==null?n.referenceNumber:n);return s?`${t}${s}`:""}function mp(t,n){const s=String(t||"").trim(),r=String(n||"").trim();if(!s||!r)return null;const o=s.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),d=r.match(new RegExp(`^${o}(\\d+)$`,"i"));return d?np(d[1]):null}function Ol(t,n){return n?typeof n.referenceLabel=="string"&&n.referenceLabel.trim().length>0?n.referenceLabel.trim():iu(t,n.referenceNumber):""}const fp="T-";function Qh(t){return iu(fp,t)}function Om(t){return mp(fp,t)}function er(t){return Ol(fp,t)}Bm();const eg={low:1,medium:2,high:3,critical:4,"on-hold":1},tg={1:"low",2:"medium",3:"high",4:"critical",5:"critical"};function ng(t){const n=String(t||"").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 Kd(t){if(typeof t=="number"&&Number.isFinite(t))return Math.max(1,Math.round(t));const n=Number(t);return Number.isFinite(n)?Math.max(1,Math.round(n)):eg[String(t||"").trim().toLowerCase()]??2}function ag(t,n){return tg[String(t)]||n}function Qr(t){const n=typeof t.referenceNumber=="number"?t.referenceNumber:Number.isFinite(Number(t.referenceNumber))?Number(t.referenceNumber):null;return{...t,referenceNumber:n&&n>0?Math.floor(n):null,referenceLabel:typeof t.referenceLabel=="string"&&t.referenceLabel.trim().length>0?t.referenceLabel.trim():Qh(n),assignee:(()=>{const s=String(t.assignee||"").trim(),r=s.toLowerCase();return r==="agent"||r==="ai"?"agent":!s||r==="user"||r==="human"||r==="unassigned"||r==="none"||r==="null"?"unassigned":s})(),category:typeof t.category=="string"?t.category:t.category?.value||"default",type:(typeof t.type=="string"?t.type:t.type?.label||"task").toLowerCase(),priority:Kd(t.priority),complexity:typeof t.complexity=="number"?t.complexity:3,status:ng(t.status)}}function sg(t,n,s){if(!t||typeof t!="object")return{tasks:n,archivedTasks:s};const r=Qr(t),o=String(r.id||"").trim();if(!o)return{tasks:n,archivedTasks:s};const d=!!r.isArchived,l=d?{...r,isArchived:!0}:{...r,isArchived:!1},p=w=>[...w].sort((A,y)=>{const k=Date.parse(String(A.updatedAt||A.createdAt||"")),b=Date.parse(String(y.updatedAt||y.createdAt||""));if(Number.isFinite(k)&&Number.isFinite(b)&&k!==b)return b-k;if(Number.isFinite(k)!==Number.isFinite(b))return Number.isFinite(b)?1:-1;const L=Date.parse(String(y.createdAt||""))-Date.parse(String(A.createdAt||""));return Number.isFinite(L)&&L!==0?L:String(A.id).localeCompare(String(y.id))}),g=n.filter(w=>w.id!==o),_=s.filter(w=>w.id!==o);return d?_.push(l):g.push(l),{tasks:p(g),archivedTasks:p(_)}}function rg(t,n){if(!n.length||!t.length)return[];const s=new Set(n.map(o=>Number(o.value))),r=Array.from(new Set(t.map(o=>Number(o)).filter(o=>Number.isFinite(o)&&s.has(o))));return r.length>0?r:n.map(o=>Number(o.value))}function Mu(t,n){return n.some(s=>String(s)===String(t))}function og(t,n){if(!t.length||!n.length)return t;const s=new Set(n.map(o=>o.value)),r=Array.from(new Set(t.filter(o=>s.has(o))));return r.length>0?r:n.map(o=>o.value)}const ig={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:"Workspace Setup Required",subtitleUnreadable:"Taskforce could not read setup state. Retry to continue.",subtitleGlobalRequired:"Choose your default operating mode to continue.",subtitleWorkspaceRequired:"Set up your workspace profile to continue.",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"}},cg={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"}},lg={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"}},$m=["en-US","es-419","pt-BR"],Yd="en-US",Bu={"en-US":ig,"es-419":cg,"pt-BR":lg},Um={en:"en-US",es:"es-419",pt:"pt-BR"};let Ti=Yd;function dg(t){return t.split(".").filter(Boolean)}function Wu(t,n){let s=t;for(const r of n){if(!s||typeof s!="object")return;s=s[r]}return typeof s=="string"?s:void 0}function zm(t){if(!t)return Yd;const n=$m.find(r=>r.toLowerCase()===t.toLowerCase());if(n)return n;const s=t.split("-")[0]?.toLowerCase()||"";return Um[s]||Yd}function Fu(t,n){return n?t.replace(/\{([^}]+)\}/g,(s,r)=>{const o=n[r];return o==null?"":String(o)}):t}function Hm(){return Ti}function ug(){return[...$m]}function Gm(t){const n=zm(t);return Ti=n,n}function pg(t){const n=typeof navigator<"u"?navigator.language:null;return Ti=zm(n),Ti}function we(t,n){const s=dg(t),r=Wu(Bu[Ti],s);if(r)return Fu(r,n);const o=Ti.split("-")[0]?.toLowerCase()||"",d=Um[o];if(d&&d!==Ti){const p=Wu(Bu[d],s);if(p)return Fu(p,n)}const l=Wu(Bu[Yd],s);return l?Fu(l,n):t}const mg="default",Ro="bootstrap";function fg(t){let n=2166136261;for(let s=0;s<t.length;s+=1)n^=t.charCodeAt(s),n=Math.imul(n,16777619);return(n>>>0).toString(16).padStart(8,"0")}function hp(t){const n=String(t||"").trim().toLowerCase();return n?`${(n.replace(/[^a-z0-9._-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"")||"project").slice(0,56)}-${fg(n)}`:Ro}function Vm(t){const n=String(t||"").trim().toLowerCase();if(!n)return Ro;const s=n.replace(/[^a-z0-9._-]/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"");return s?s.slice(0,96):Ro}function Zm(t){const n=String(t||"").trim();return n?hp(n):Ro}function hg(t){return(t.runtimeMode==="cloud"?"cloud":"local")==="cloud"?Ro:Zm(t.projectRoot)}function gg(t){if((t.runtimeMode==="cloud"?"cloud":"local")==="cloud"){const s=String(t.workspaceId||"").trim();return s&&!gp(s)?hp(`cloud-workspace:${s}`):Ro}return Zm(t.projectRoot)}function gp(t){return String(t||"").trim().toLowerCase()===mg}const yg={local:{runtimeMode:"local",authSource:"cloud",workspaceMode:"single-local",workspaceSwitchingEnabled:!1},cloud:{runtimeMode:"cloud",authSource:"cloud",workspaceMode:"multi-cloud",workspaceSwitchingEnabled:!0}};function kg(t){return String(t||"").trim().toLowerCase()==="cloud"?"cloud":"local"}function Sg(t){return yg[kg(t)]}function Fp(t){if(!Array.isArray(t))return;const n=t.filter(s=>typeof s=="string"&&s.trim().length>0).map(s=>s.trim());return n.length>0?n:void 0}function vg(t){if(!t||typeof t!="object"||Array.isArray(t))return!1;const n=t;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 wg(t){const n=t||{};return{categories:Array.isArray(n.categories)?n.categories.map(r=>typeof r=="string"?{value:r.toLowerCase().replace(/\s+/g,"-"),label:r}:r):[],types:Array.isArray(n.types)?n.types.map(r=>({...Hh(r.value),...r,aliases:Array.isArray(r.aliases)?r.aliases.filter(d=>typeof d=="string"&&d.trim().length>0).map(d=>d.trim()):void 0,status:r.status==="retired"?"retired":"active"})):[],priorities:Array.isArray(n.priorities)?n.priorities:[],taxonomies:Array.isArray(n.taxonomies)?n.taxonomies.map(r=>({...r,aliases:Fp(r.aliases),options:Array.isArray(r.options)?r.options.map(o=>({...o,aliases:Fp(o.aliases),status:o.status==="retired"?"retired":"active"})):[],status:r.status==="retired"?"retired":"active",formEnabled:r.formEnabled!==!1,filterEnabled:r.filterEnabled!==!1,sortEnabled:r.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}}}const Ll={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 cu(t){const n=String(t||"").trim().toLowerCase();return n==="production"||n==="staging"||n==="performance"?n:null}function bg(t){return cu(t)||"production"}function Op(t){return Ll[bg(String(t||""))]}function _g(t){const n=String(t||"").trim().toLowerCase();if(!n)return null;for(const[s,r]of Object.entries(Ll))if(new URL(r.appBaseUrl).hostname.toLowerCase()===n||new URL(r.mcpBaseUrl).hostname.toLowerCase()===n)return s;return null}function yp(t){const n=String(t||"").trim();if(!n)return null;try{return _g(new URL(n).hostname)}catch{return null}}function Cg(t){const n=yp(t);return n?Ll[n].mcpBaseUrl:null}function yi(t,n){return String(t[n]||"").trim()}function $p(t,n,s){t.push(n),s?.(n)}function xg(t,n){const s=[],r=yi(t,"ENV"),o=cu(r);if(o)return $p(s,`[Taskforce compat] ENV=${r} is deprecated; set TASKFORCE_CLOUD_ENVIRONMENT=${o} instead.`,n),{cloudEnvironment:o,warnings:s};const d=[{key:"TASKFORCE_CLOUD_PROXY_BASE_URL",value:yi(t,"TASKFORCE_CLOUD_PROXY_BASE_URL")},{key:"VITE_TASKFORCE_CLOUD_AUTH_BASE_URL",value:yi(t,"VITE_TASKFORCE_CLOUD_AUTH_BASE_URL")},{key:"VITE_TASKFORCE_CLOUD_MCP_BASE_URL",value:yi(t,"VITE_TASKFORCE_CLOUD_MCP_BASE_URL")},{key:"VITE_TASKFORCE_API_BASE_URL",value:yi(t,"VITE_TASKFORCE_API_BASE_URL")},{key:"VITE_TASKFORCE_BASE_URL",value:yi(t,"VITE_TASKFORCE_BASE_URL")},{key:"TASKFORCE_BASE_URL",value:yi(t,"TASKFORCE_BASE_URL")}];for(const l of d){if(!l.value)continue;const p=yp(l.value);if(p)return $p(s,`[Taskforce compat] ${l.key} is being used to infer TASKFORCE_CLOUD_ENVIRONMENT=${p}. Set TASKFORCE_CLOUD_ENVIRONMENT explicitly.`,n),{cloudEnvironment:p,warnings:s}}return{cloudEnvironment:null,warnings:s}}function Sr(t,n){return String(t[n]||"").trim()}function Ag(t){return t.toLowerCase()==="cloud"?"cloud":"local"}function Sc(t){return String(t||"").trim().replace(/\/+$/,"")}function Tg(t){return String(t||"").trim().replace(/\/+$/,"")}function Zr(...t){for(const n of t)if(String(n||"").trim())return String(n||"").trim();return""}function Ig(t,n={}){const s=[],r=W=>{s.push(W),n.onWarning?.(W)},o=Ag(Sr(t,"TASKFORCE_RUNTIME_MODE")),d=cu(Sr(t,"TASKFORCE_CLOUD_ENVIRONMENT")),l=d?{cloudEnvironment:d}:xg(t,r),p=d||l.cloudEnvironment,g=Sc(String(n.requestBaseUrl||"")),_=Sc(Zr(Sr(t,"VITE_TASKFORCE_BASE_URL"),Sr(t,"TASKFORCE_BASE_URL"))),w=Sc(Sr(t,"VITE_TASKFORCE_API_BASE_URL")),A=Sc(Sr(t,"VITE_TASKFORCE_CLOUD_AUTH_BASE_URL")),y=Sc(Zr(Sr(t,"VITE_TASKFORCE_CLOUD_MCP_BASE_URL"),Sr(t,"TASKFORCE_CLOUD_MCP_BASE_URL"))),k=Sc(Sr(t,"TASKFORCE_CLOUD_PROXY_BASE_URL")),b=Tg(Sr(t,"VITE_TASKFORCE_WS_BASE_URL")),L=p?Ll[p].appBaseUrl:"",S=p?Ll[p].mcpBaseUrl:"",$=Zr(k,A,w,_,L),J=Zr(y,S,$),U=Zr(g,_,w,A,$),X=Zr(g,w,_,$),q=Zr(g,A,_,w,$),ee=o==="local"?Zr(b,g,w,_,k,A,L,$):Zr(g,b,X,U,$);return{runtimeMode:o,cloudEnvironment:p,cloudBaseUrl:$,cloudMcpBaseUrl:J,baseUrl:U,apiBaseUrl:X,cloudAuthBaseUrl:q,wsBaseUrl:ee,cloudAuthViaLocalProxy:!!k,warnings:s}}function kp(t){return Ig({TASKFORCE_CLOUD_ENVIRONMENT:"",VITE_TASKFORCE_BASE_URL:t.VITE_TASKFORCE_BASE_URL,VITE_TASKFORCE_API_BASE_URL:t.VITE_TASKFORCE_API_BASE_URL,VITE_TASKFORCE_CLOUD_AUTH_BASE_URL:t.VITE_TASKFORCE_CLOUD_AUTH_BASE_URL,VITE_TASKFORCE_CLOUD_MCP_BASE_URL:t.VITE_TASKFORCE_CLOUD_MCP_BASE_URL,VITE_TASKFORCE_WS_BASE_URL:t.VITE_TASKFORCE_WS_BASE_URL})}const Jd="unassigned",qm="agent",jg="user",Ng=/^[0-9a-f]{8,}$/i;function Km(t){const n=String(t||"").trim().toLowerCase();return n===qm||n==="ai"||n.startsWith("ai-profile-")}function Ym(t){const n=String(t||"").trim().toLowerCase();return!n||n===Jd||n==="none"||n==="null"||n===jg}function Xd(t){return Km(t)?"agent":Ym(t)?"unassigned":"member"}function Rg(t){const n=String(t.displayName||"").trim(),s=String(t.email||"").trim().toLowerCase();return n||s||String(t.userId||"").trim()||"Workspace member"}function wi(){return[{value:Jd,label:"Unassigned",icon:"HelpCircle",color:"var(--text-secondary)",kind:"unassigned"}]}function Dg(t){const n=new Map;for(const s of t){const r=String(s.userId||"").trim();r&&n.set(r,{value:r,label:Rg(s),icon:"User",color:"#22c55e",kind:"member"})}return Ml(Array.from(n.values()))}function Ml(t){const n=new Map;for(const r of wi())n.set(r.value,r);for(const r of Array.isArray(t)?t:[]){const o=String(r?.value||"").trim();!o||o===Jd||o===qm||n.set(o,{value:o,label:String(r.label||o).trim()||o,icon:String(r.icon||(r.kind==="agent"?"Bot":"User")),color:String(r.color||(r.kind==="agent"?"#8b5cf6":"#22c55e")),kind:r.kind==="agent"?"agent":"member"})}const s=[Jd];return Array.from(n.values()).sort((r,o)=>{const d=s.indexOf(r.value),l=s.indexOf(o.value);return d>=0||l>=0?d<0?1:l<0?-1:d-l:r.label.localeCompare(o.label,void 0,{sensitivity:"base"})})}function Pg(t,n){const s=String(n||"").trim();if(!s||t.some(d=>d.value===s))return t;const r=s.replace(/^ai-profile-/i,"").replace(/[-_]+/g," ").replace(/\s+/g," ").trim(),o=r?r.split(" ").map(d=>d.charAt(0).toUpperCase()+d.slice(1)).join(" "):s;if(Xd(s)==="agent"){const d=String(s).toLowerCase().startsWith("ai-profile-")&&r.split(" ").every(l=>Ng.test(l));return Ml([...t,{value:s,label:d?"AI":o||"AI",icon:"Bot",color:"#8b5cf6",kind:"agent"}])}return Xd(s)==="member"?Ml([...t,{value:s,label:o||s,icon:"User",color:"#22c55e",kind:"member"}]):t}function Jm(t){const n=Array.isArray(t)?t.filter(Boolean):[];return Ml(n)}function vc(t,n){const s=String(t||"").trim(),o=Jm(n).find(d=>d.value===s);return o?o.label:Km(s)?"AI":Ym(s)?"Unassigned":s||"Unassigned"}const Xm="taskforce.workspaceContext.v2",Eg="taskforce.uiState.app.v1",Lg="taskforce.bootstrapDebug.v1";function Mg(){if(typeof window>"u")return!1;try{const t=String(window.localStorage.getItem(Lg)||"").trim().toLowerCase();return t==="1"||t==="true"||t==="on"||t==="yes"}catch{return!1}}function Ya(t,n){if(!Mg())return;console.info("[Taskforce Bootstrap]",t,n&&typeof n=="object"?n:{})}function Qm(t){const n=hp(t);return`${Xm}.${n}`}function Bg(t){const n=Vm(t);return`${Xm}.${n}`}function Wd(t){if(typeof window>"u")return"";try{const n=Qm(t),s=String(window.localStorage.getItem(n)||"").trim();if(s&&s.length<=120&&!/\s/.test(s))return s;const r=Bg(t),o=String(window.localStorage.getItem(r)||"").trim();return o&&o.length<=120&&!/\s/.test(o)?(window.localStorage.setItem(n,o),o):""}catch{return""}}function Wg(t,n){if(typeof window>"u")return;const s=String(t||"").trim();try{if(!s||gp(s))return;const r=Qm(n),o=String(window.localStorage.getItem(r)||"").trim();if(!s&&o&&o.toLowerCase()!=="default")return;window.localStorage.setItem(r,s)}catch{}}function ef(t){const n=Vm(t);return`${Eg}.${n}`}function Up(t){if(typeof window>"u")return null;try{const n=window.localStorage.getItem(ef(t));if(!n)return null;const s=JSON.parse(n);return s&&typeof s=="object"?s:null}catch{return null}}function Fg(t,n){if(!(typeof window>"u"))try{window.localStorage.setItem(ef(n),JSON.stringify(t))}catch{}}const ap="taskforce.localMutationActorUserId.v1";function tf(t){return typeof t=="string"?t.trim().replace(/\/+$/,""):""}function Og(t){const n=String(t||"").trim().toLowerCase();return n==="localhost"||n==="127.0.0.1"||n==="::1"||n==="[::1]"}function Cl(t){if(!(typeof window>"u"))try{const n=String(t||"").trim();if(!n||n==="anonymous"){window.sessionStorage.removeItem(ap);return}window.sessionStorage.setItem(ap,n)}catch{}}function $g(){if(typeof window>"u")return"";try{return String(window.sessionStorage.getItem(ap)||"").trim()}catch{return""}}function Ug(t,n){if(typeof window>"u"||!t.startsWith("/api/taskforce/")||!Og(window.location.hostname))return!1;try{return new URL(n,window.location.origin).origin===window.location.origin}catch{return t.startsWith("/")}}function zg(t,n,s){if(!Ug(t,n))return s;const r=$g();if(!r)return s;const o=new Headers(s?.headers||void 0);return o.has("x-taskforce-user-id")||o.set("x-taskforce-user-id",r),{...s,headers:o}}function Hg(t,n){if(!t.startsWith("/"))return t;const s=tf(n);return s?`${s}${t}`:t}async function VP(t,n,s){const r=Hg(t,s),o=tf(s).length>0,d=zg(t,r,n),l=typeof performance<"u"?performance.now():Date.now();try{const p=await fetch(r,d);if(!(o&&r!==t&&t.startsWith("/api/taskforce/")&&(p.status===401||p.status===403)))return p;Ya("taskforce_api_auth_fallback_retry",{path:t,primaryUrl:r,fallbackUrl:t,status:p.status,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-l)});try{const _=await fetch(t,d);return Ya("taskforce_api_auth_fallback_completed",{path:t,primaryUrl:r,fallbackUrl:t,primaryStatus:p.status,fallbackStatus:_.status,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-l)}),_}catch{return Ya("taskforce_api_auth_fallback_failed",{path:t,primaryUrl:r,fallbackUrl:t,status:p.status,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-l)}),p}}catch(p){if(!o||!t.startsWith("/"))throw p;Ya("taskforce_api_network_fallback_retry",{path:t,primaryUrl:r,fallbackUrl:t,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-l),error:p instanceof Error?p.message:String(p)});const g=await fetch(t,d);return Ya("taskforce_api_network_fallback_completed",{path:t,primaryUrl:r,fallbackUrl:t,fallbackStatus:g.status,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-l)}),g}}function Gg(t){const n=Number(t?.status);return Number.isFinite(n)&&n>0?Math.floor(n):0}async function Ec(t){try{const n=await t,s=await n.text().catch(()=>"");let r={};if(s)try{r=JSON.parse(s)}catch{r={error:!n.ok&&n.statusText?`${n.status} ${n.statusText}`:s.slice(0,400)}}else!n.ok&&n.statusText&&(r={error:`${n.status} ${n.statusText}`});const o=n.headers.get("retry-after");let d;if(o){const l=Number.parseInt(o,10);if(Number.isFinite(l)&&l>0)d=l*1e3;else{const p=Date.parse(o);if(Number.isFinite(p)){const g=p-Date.now();g>0&&(d=g)}}}return{ok:n.ok,status:n.status,data:r,retryAfterMs:d}}catch(n){return{ok:!1,status:Gg(n),data:{}}}}async function Vg(t){return Ec(fetch(t("/api/taskforce/sync/user-settings"),{method:"GET",credentials:"include"}))}async function Zg(t,n){return Ec(fetch(t("/api/taskforce/sync/user-settings"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(n)}))}async function zp(t,n){return Ec(fetch(t("/api/taskforce/sync/workspace/handshake"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({workspaceId:n})}))}async function qg(t,n){return Ec(fetch(t("/api/taskforce/sync/workspace/provision"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(n)}))}async function Kg(t,n){const s=new URLSearchParams({limit:String(n.limit),workspaceId:n.workspaceId});n.cursor&&s.set("cursor",n.cursor),n.repairMode===!0&&s.set("repair","1");const r=t("/api/taskforce/sync/workspace/pull"),o=r.includes("?")?"&":"?";return Ec(fetch(`${r}${o}${s.toString()}`,{method:"GET",credentials:"include"}))}async function Yg(t,n){return Ec(fetch(t("/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 Hp(t,n,s){const r=JSON.stringify({workspaceId:t,changes:n,workspaceMembers:Array.isArray(s?.workspaceMembers)?s.workspaceMembers:void 0,...s?.repairMode===!0?{repair:!0}:{},bootstrapSnapshot:s?.bootstrapSnapshot?{currentAnnotatedAttachmentSessionIds:Array.isArray(s.bootstrapSnapshot.currentAnnotatedAttachmentSessionIds)?s.bootstrapSnapshot.currentAnnotatedAttachmentSessionIds:[]}:void 0}),o="/api/taskforce/sync/workspace/apply-local",d=[];try{const l=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json","x-taskforce-workspace-id":t},credentials:"include",body:r});if(l.ok){const _=await l.json().catch(()=>({}));return{ok:!0,status:l.status,data:_,failures:d}}const p=await l.text().catch(()=>"");let g={};if(p)try{g=JSON.parse(p)}catch{g={error:p.slice(0,400)}}else l.statusText&&(g={error:`${l.status} ${l.statusText}`});return d.push(`${o}:${l.status}`),{ok:!1,status:l.status,data:g,failures:d}}catch{d.push(`${o}:network`)}return{ok:!1,status:0,data:{},failures:d}}const sp="V1:AESGCM:",Sp="AES-GCM",Jg=12;async function nf(t){const n=Buffer.from(t,"base64");if(n.length!==32)throw new Error("Encryption key must be exactly 32 bytes (256-bit).");return crypto.subtle.importKey("raw",n,{name:Sp},!1,["encrypt","decrypt"])}async function Gp(t,n){if(!t)return t;const s=crypto.getRandomValues(new Uint8Array(Jg)),r=await nf(n),d=new TextEncoder().encode(t),l=await crypto.subtle.encrypt({name:Sp,iv:s},r,d),p=Buffer.from(l).toString("base64"),g=Buffer.from(s).toString("base64");return`${sp}${g}:${p}`}async function Vp(t,n){if(!t||!t.startsWith(sp))return t;const s=t.slice(sp.length),[r,o]=s.split(":");if(!r||!o)throw new Error("Malformed encrypted document payload.");const d=Buffer.from(r,"base64"),l=Buffer.from(o,"base64"),p=await nf(n);try{const g=await crypto.subtle.decrypt({name:Sp,iv:d},p,l);return new TextDecoder("utf-8").decode(g)}catch(g){throw new Error(`Failed to decrypt document: ${g.message}`)}}var bc={};function br(t){return t&&typeof t=="object"?t:{}}function Jr(t){const n=Number(t||0);return n===0||n===429||n>=500}function Xg(t,n){const s=String(t.code||"").trim().toUpperCase(),r=String(t.error||"").trim();return s==="WORKSPACE_ID_ALREADY_EXISTS"||r.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.":r||`Workspace provisioning failed (${n})`}async function Qg(t){if(!t.cloudAuthConfigured)return{success:!1,error:"Cloud auth endpoint is not configured."};if(t.runtimeMode!=="local")return{success:!1,error:"Workspace sync is only available in local runtime."};if(!t.isAuthenticated)return{success:!1,error:"Authentication required."};try{let n=await zp(t.resolveCloudAuthUrl,t.workspaceId);if(n.ok)return{success:!0,provisioned:!1};const s=br(n.data);if(n.status===401)return{success:!1,statusCode:401,transient:!1,error:String(s.error||"Authentication required for workspace sync.")};if(n.status===429)return{success:!1,statusCode:429,retryAfterMs:n.retryAfterMs,transient:!0,error:String(s.error||"Workspace sync rate limited. Please retry later.")};if(n.status===409&&s.code==="WORKSPACE_ID_MISMATCH"){const r=await qg(t.resolveCloudAuthUrl,{workspaceId:t.workspaceId,name:t.workspaceName||t.workspaceId});if(!r.ok){const o=br(r.data);return{success:!1,statusCode:r.status,error:Xg(o,r.status)}}if(n=await zp(t.resolveCloudAuthUrl,t.workspaceId),!n.ok){const o=br(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:Jr(n.status),error:String(o.error||`Workspace sync handshake failed (${n.status})`)}}return{success:!0,provisioned:!0}}return{success:!1,statusCode:n.status,transient:Jr(n.status),error:String(s.error||`Workspace sync handshake failed (${n.status})`)}}catch{return{success:!1,statusCode:0,transient:!0,error:"Failed to validate workspace sync access."}}}async function ey(t,n){const s=JSON.stringify([t,n]);try{const r=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(s));return Array.from(new Uint8Array(r)).map(o=>o.toString(16).padStart(2,"0")).join("")}catch{let r=2166136261;for(let d=0;d<s.length;d+=1)r^=s.charCodeAt(d),r=Math.imul(r,16777619);const o=(r>>>0).toString(16).padStart(8,"0");return`${t}:fallback:${o}`}}async function ty(t){const n=t.payload.changes.length,s=t.payload.deleteTaskIds.size,r=await ey(t.workspaceId,t.payload.changes);let o=0,d=t.payload.changes;if(typeof process<"u"&&bc?.TASKFORCE_SYNC_KEY){const w=bc.TASKFORCE_SYNC_KEY,A=[];for(const y of d)y.op==="document-upsert"&&typeof y.content=="string"?A.push({...y,content:await Gp(y.content,w)}):y.op==="asset-upsert"&&typeof y.contentBase64=="string"&&y.contentBase64.length>0?A.push({...y,contentBase64:await Gp(y.contentBase64,w)}):A.push(y);d=A}const l=async()=>{const w=Date.now(),A=await Yg(t.resolveCloudAuthUrl,{workspaceId:t.workspaceId,idempotencyKey:r,changes:d,repairMode:t.repairMode===!0});return o+=Date.now()-w,A};let p=await l();if(!p.ok&&(p.status===403||p.status===409)&&(await t.ensureCloudWorkspaceReadyForSync()).success&&(p=await l()),!p.ok){const w=br(p.data);return{success:!1,status:p.status,error:typeof w.error=="string"?w.error:void 0,code:typeof w.code=="string"?w.code:void 0,retryAfterMs:p.retryAfterMs,transient:Jr(p.status),requestMs:o,changeCount:n,deleteCount:s,currentTaskIds:t.payload.currentTaskIds,deleteTaskIds:t.payload.deleteTaskIds,currentInitiativeIds:t.payload.currentInitiativeIds,currentInitiativeWatermarks:t.payload.currentInitiativeWatermarks,currentWorkstreamIds:t.payload.currentWorkstreamIds,currentWorkstreamWatermarks:t.payload.currentWorkstreamWatermarks,currentAiProfileIds:t.payload.currentAiProfileIds,currentAiProfileWatermarks:t.payload.currentAiProfileWatermarks,currentDocumentPaths:t.payload.currentDocumentPaths,deleteDocumentPaths:t.payload.deleteDocumentPaths,currentDocumentWatermarks:t.payload.currentDocumentWatermarks,currentAssetPaths:t.payload.currentAssetPaths,deleteAssetPaths:t.payload.deleteAssetPaths,currentAssetWatermarks:t.payload.currentAssetWatermarks,currentDocumentReviewSessionIds:t.payload.currentDocumentReviewSessionIds,deleteDocumentReviewSessionIds:t.payload.deleteDocumentReviewSessionIds,currentDocumentReviewSessionWatermarks:t.payload.currentDocumentReviewSessionWatermarks,currentDocumentReviewCommentIds:t.payload.currentDocumentReviewCommentIds,deleteDocumentReviewCommentIds:t.payload.deleteDocumentReviewCommentIds,currentDocumentReviewCommentWatermarks:t.payload.currentDocumentReviewCommentWatermarks,currentAnnotatedAttachmentSessionIds:t.payload.currentAnnotatedAttachmentSessionIds,deleteAnnotatedAttachmentSessionIds:t.payload.deleteAnnotatedAttachmentSessionIds,currentAnnotatedAttachmentSessionWatermarks:t.payload.currentAnnotatedAttachmentSessionWatermarks,pushedWatermarks:new Map,emittedEventIds:[]}}const g=br(p.data),_=Array.isArray(g.emittedEventIds)?Array.from(new Set(g.emittedEventIds.map(w=>String(w||"").trim()).filter(Boolean))):[];return{success:!0,syncedAt:new Date().toISOString(),requestMs:o,changeCount:n,deleteCount:s,currentTaskIds:t.payload.currentTaskIds,deleteTaskIds:t.payload.deleteTaskIds,currentInitiativeIds:t.payload.currentInitiativeIds,currentInitiativeWatermarks:t.payload.currentInitiativeWatermarks,currentWorkstreamIds:t.payload.currentWorkstreamIds,currentWorkstreamWatermarks:t.payload.currentWorkstreamWatermarks,currentAiProfileIds:t.payload.currentAiProfileIds,currentAiProfileWatermarks:t.payload.currentAiProfileWatermarks,currentDocumentPaths:t.payload.currentDocumentPaths,deleteDocumentPaths:t.payload.deleteDocumentPaths,currentDocumentWatermarks:t.payload.currentDocumentWatermarks,currentAssetPaths:t.payload.currentAssetPaths,deleteAssetPaths:t.payload.deleteAssetPaths,currentAssetWatermarks:t.payload.currentAssetWatermarks,currentDocumentReviewSessionIds:t.payload.currentDocumentReviewSessionIds,deleteDocumentReviewSessionIds:t.payload.deleteDocumentReviewSessionIds,currentDocumentReviewSessionWatermarks:t.payload.currentDocumentReviewSessionWatermarks,currentDocumentReviewCommentIds:t.payload.currentDocumentReviewCommentIds,deleteDocumentReviewCommentIds:t.payload.deleteDocumentReviewCommentIds,currentDocumentReviewCommentWatermarks:t.payload.currentDocumentReviewCommentWatermarks,currentAnnotatedAttachmentSessionIds:t.payload.currentAnnotatedAttachmentSessionIds,deleteAnnotatedAttachmentSessionIds:t.payload.deleteAnnotatedAttachmentSessionIds,currentAnnotatedAttachmentSessionWatermarks:t.payload.currentAnnotatedAttachmentSessionWatermarks,pushedWatermarks:t.payload.pushedWatermarks,emittedEventIds:_}}async function ny(t){let n=t.cursor,s=!0,r=0,o=0,d=0,l=0;const p=new Set;let g=!1,_=!1;const w=new Set,A=new Set,y=new Set,k=Number.isFinite(Number(t.maxPages))?Math.max(1,Math.floor(Number(t.maxPages))):20;try{for(;s&&r<k;){const b=async()=>{const X=Date.now(),q=await Kg(t.resolveCloudAuthUrl,{workspaceId:t.workspaceId,cursor:n,limit:t.bootstrap?500:200,repairMode:t.repairMode===!0});return d+=Date.now()-X,q};let L=await b();if(!L.ok&&L.status===403&&t.ensureCloudWorkspaceReadyForSync&&(await t.ensureCloudWorkspaceReadyForSync()).success&&(L=await b()),!L.ok)return{success:!1,kind:"pull_http",status:L.status,retryAfterMs:L.retryAfterMs,transient:Jr(L.status),cursor:n,pages:r,appliedChanges:o,pullRequestMs:d,applyMs:l,pulledDeleteTaskIds:p,pulledActiveUpserts:g,pulledArchivedUpserts:_,documentDecryptFailures:Array.from(w)};const S=L.data||{},$=Array.isArray(S?.changes)?S.changes:[],J=Array.isArray(S?.workspaceMembers),U=J?S.workspaceMembers:void 0;for(const X of $){if(X.op==="upsert"){X?.archived===!0||X?.task?.isArchived===!0?_=!0:g=!0;continue}if(X.op==="annotated-attachment-session-upsert"){const ee=String(X?.session?.id||"").trim();ee&&y.add(ee);continue}if(X.op==="document-upsert"){if(typeof X.content=="string"&&typeof process<"u"&&bc?.TASKFORCE_SYNC_KEY)try{X.content=await Vp(X.content,bc.TASKFORCE_SYNC_KEY)}catch{const ee=String(X.path||"").trim();ee&&w.add(ee)}continue}if(X.op==="asset-upsert"){if(typeof X.contentBase64=="string"&&typeof process<"u"&&bc?.TASKFORCE_SYNC_KEY)try{X.contentBase64=await Vp(X.contentBase64,bc.TASKFORCE_SYNC_KEY)}catch{const ee=String(X.path||"").trim();ee&&w.add(ee)}continue}if(X.op!=="delete")continue;const q=String(X.taskId||"").trim();q&&p.add(q)}if(t.onPagePulled&&t.onPagePulled(),$.length>0||J){const X=Date.now(),q=await Hp(t.workspaceId,$,{...J?{workspaceMembers:U}:{},repairMode:t.repairMode===!0}),ee=q.failures;if(!q.ok){l+=Date.now()-X;const Re=br(q.data);if(ee.some(xe=>xe.endsWith(":401")))return{success:!1,kind:"apply_auth",status:401,transient:!1,failures:ee,cursor:n,pages:r,appliedChanges:o,pullRequestMs:d,applyMs:l,pulledDeleteTaskIds:p,pulledActiveUpserts:g,pulledArchivedUpserts:_,documentDecryptFailures:Array.from(w)};const te=ee.some(xe=>{if(xe.endsWith(":network"))return!0;const de=xe.split(":").pop()||"",O=Number.parseInt(de,10);return Number.isFinite(O)&&(O===429||O>=500)});return{success:!1,kind:"apply_all_candidates",status:q.status||void 0,transient:te,error:String(Re.error||"").trim()||void 0,failures:ee,hasTransientApplyFailure:te,cursor:n,pages:r,appliedChanges:o,pullRequestMs:d,applyMs:l,pulledDeleteTaskIds:p,pulledActiveUpserts:g,pulledArchivedUpserts:_,documentDecryptFailures:Array.from(w),emittedEventIds:Array.from(A)}}const W=br(q.data);if(W.success===!1)return l+=Date.now()-X,{success:!1,kind:"apply_payload",transient:!1,error:String(W.error||"Workspace sync apply failed."),cursor:n,pages:r,appliedChanges:o,pullRequestMs:d,applyMs:l,pulledDeleteTaskIds:p,pulledActiveUpserts:g,pulledArchivedUpserts:_,documentDecryptFailures:Array.from(w),emittedEventIds:Array.from(A)};if(l+=Date.now()-X,o+=$.length,Array.isArray(W.emittedEventIds))for(const Re of W.emittedEventIds)A.add(String(Re));t.onChangesApplied&&t.onChangesApplied($.length)}S&&"nextCursor"in S&&(S.nextCursor===null||typeof S.nextCursor=="string")&&(n=S.nextCursor),s=!!S?.hasMore,r+=1}if(t.bootstrap){const b=Date.now(),L=await Hp(t.workspaceId,[],{bootstrapSnapshot:{currentAnnotatedAttachmentSessionIds:Array.from(y)}}),S=L.failures;if(!L.ok){l+=Date.now()-b;const $=br(L.data);if(S.some(X=>X.endsWith(":401")))return{success:!1,kind:"apply_auth",status:401,transient:!1,failures:S,cursor:n,pages:r,appliedChanges:o,pullRequestMs:d,applyMs:l,pulledDeleteTaskIds:p,pulledActiveUpserts:g,pulledArchivedUpserts:_,documentDecryptFailures:Array.from(w),emittedEventIds:Array.from(A)};const U=S.some(X=>{if(X.endsWith(":network"))return!0;const q=X.split(":").pop()||"",ee=Number.parseInt(q,10);return Number.isFinite(ee)&&(ee===429||ee>=500)});return{success:!1,kind:"apply_all_candidates",status:L.status||void 0,transient:U,error:String($.error||"").trim()||void 0,failures:S,hasTransientApplyFailure:U,cursor:n,pages:r,appliedChanges:o,pullRequestMs:d,applyMs:l,pulledDeleteTaskIds:p,pulledActiveUpserts:g,pulledArchivedUpserts:_,documentDecryptFailures:Array.from(w),emittedEventIds:Array.from(A)}}l+=Date.now()-b}return{success:!0,syncedAt:new Date().toISOString(),cursor:n||null,pages:r,appliedChanges:o,pullRequestMs:d,applyMs:l,pulledDeleteTaskIds:p,pulledActiveUpserts:g,pulledArchivedUpserts:_,documentDecryptFailures:Array.from(w),emittedEventIds:Array.from(A)}}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:r,appliedChanges:o,pullRequestMs:d,applyMs:l,pulledDeleteTaskIds:p,pulledActiveUpserts:g,pulledArchivedUpserts:_,documentDecryptFailures:Array.from(w),emittedEventIds:Array.from(A)}}}async function ay(t){const n=await Vg(t.resolveCloudAuthUrl);if(!n.ok){const y=Number(n.status||0);return{success:!1,error:`Sync pull failed (${n.status})`,statusCode:n.status,retryAfterMs:n.retryAfterMs,transient:Jr(y)}}const s=br(n.data),r=s.settings&&typeof s.settings=="object"?s.settings:{},o=typeof s.updatedAt=="string"&&s.updatedAt.trim().length>0?s.updatedAt.trim():null,d=t.getLocalUpdatedAt(t.userId),l=d?Date.parse(d):NaN,p=o?Date.parse(o):NaN;if(!d&&t.preferCloudOnFirstSync&&Number.isFinite(p))return await t.applyRemoteSettings(r),{success:!0,mode:"pulled",updatedAt:o};if(Number.isFinite(p)&&(!Number.isFinite(l)||p>l))return await t.applyRemoteSettings(r),{success:!0,mode:"pulled",updatedAt:o};const g=d||new Date().toISOString(),_=await Zg(t.resolveCloudAuthUrl,{settings:t.buildLocalSettings(),updatedAt:g});if(!_.ok){const y=Number(_.status||0);return{success:!1,error:`Sync push failed (${_.status})`,statusCode:_.status,retryAfterMs:_.retryAfterMs,transient:Jr(y)}}const w=br(_.data);return{success:!0,mode:"pushed",updatedAt:typeof w.updatedAt=="string"&&w.updatedAt.trim().length>0?w.updatedAt.trim():g}}function sy(t){const n=Math.max(1,Math.floor(Number(t)||1)),s=Math.min(12e4,1500*2**Math.max(0,n-1)),r=Math.floor(s*(.15*Math.random()));return s+r}const ry=["chat_app","ide","coding_tool","agent","other"],ZP=["chat_app","ide","coding_tool","agent","other","unclassified"],oy={chat_app:"Chat app",ide:"IDE",coding_tool:"Coding tool",agent:"Agent",other:"Other"},iy={chat_app:"Chat Apps",ide:"IDEs",coding_tool:"Coding Tools",agent:"Agents",other:"Other",unclassified:"Unclassified"};function cy(t){return typeof t=="string"&&ry.includes(t)}function af(t){if(typeof t!="string")return null;const n=t.trim();return cy(n)?n:null}function qP(t){return oy[t]}function KP(t){return t??"unclassified"}function YP(t){return iy[t]}function Zp(t){return[...t].sort((n,s)=>{const r=String(n?.id||"").trim(),o=String(s?.id||"").trim();return r.localeCompare(o)})}function ly(t){const n=new Date().toISOString(),s=new Set(Array.from(t.pendingDeletedTaskIds).map(i=>String(i||"").trim()).filter(i=>i.length>0)),r=t.lastPushedWatermarks,o=i=>{if(!r||r.size===0)return!0;const De=String(i?.id||"").trim();if(!De)return!1;const Je=String(i?.updatedAt||i?.createdAt||"").trim();return r.get(De)!==Je},d=Zp(t.tasks||[]),l=Zp(t.archivedTasks||[]),p=new Map,g=d.filter(i=>!s.has(String(i?.id||"").trim())&&o(i)).map(i=>{const De=String(i?.id||"").trim(),Je=String(i?.updatedAt||i?.createdAt||"").trim();return De&&p.set(De,Je),{op:"upsert",archived:!1,task:i}}),_=l.filter(i=>!s.has(String(i?.id||"").trim())&&o(i)).map(i=>{const De=String(i?.id||"").trim(),Je=String(i?.updatedAt||i?.createdAt||"").trim();return De&&p.set(De,Je),{op:"upsert",archived:!0,task:i}}),w=new Set;for(const i of t.tasks||[]){const De=String(i?.id||"").trim();De&&w.add(De)}for(const i of t.archivedTasks||[]){const De=String(i?.id||"").trim();De&&w.add(De)}const A=Array.from(t.lastPushedTaskIds).filter(i=>!w.has(i)).map(i=>({op:"delete",taskId:i})),y=Array.from(s).map(i=>({op:"delete",taskId:i})),k=new Set([...A.map(i=>String(i.taskId)),...y.map(i=>String(i.taskId))]),b=new Set((Array.isArray(t.initiatives)?t.initiatives:[]).map(i=>String(i?.id||"").trim()).filter(i=>i.length>0)),L=new Map((Array.isArray(t.initiatives)?t.initiatives:[]).map(i=>[String(i?.id||"").trim(),String(i?.updatedAt||i?.createdAt||"").trim()]).filter(([i])=>i.length>0)),S=t.lastPushedInitiativeWatermarks,$=!S||S.size===0,J=(Array.isArray(t.initiatives)?t.initiatives:[]).map(i=>({op:"initiative-upsert",initiative:{id:String(i?.id||"").trim(),referenceNumber:Number.isFinite(Number(i?.referenceNumber))?Math.max(1,Math.floor(Number(i.referenceNumber))):null,referenceLabel:typeof i?.referenceLabel=="string"&&i.referenceLabel.trim().length>0?i.referenceLabel.trim():void 0,title:String(i?.title||"").trim(),description:typeof i?.description=="string"?i.description:null,ownerId:typeof i?.ownerId=="string"&&i.ownerId.trim().length>0?i.ownerId.trim():null,createdAt:String(i?.createdAt||"").trim(),updatedAt:String(i?.updatedAt||i?.createdAt||"").trim(),order:Number.isFinite(Number(i?.order))?Math.floor(Number(i.order)):null,isArchived:!!i?.isArchived}})).filter(i=>i.initiative.id.length>0).filter(i=>$?!0:S.get(i.initiative.id)!==i.initiative.updatedAt),U=new Set((Array.isArray(t.workstreams)?t.workstreams:[]).map(i=>String(i?.id||"").trim()).filter(i=>i.length>0)),X=new Map((Array.isArray(t.workstreams)?t.workstreams:[]).map(i=>[String(i?.id||"").trim(),String(i?.updatedAt||i?.createdAt||"").trim()]).filter(([i])=>i.length>0)),q=t.lastPushedWorkstreamWatermarks,ee=!q||q.size===0,W=(Array.isArray(t.workstreams)?t.workstreams:[]).map(i=>({op:"workstream-upsert",workstream:{id:String(i?.id||"").trim(),referenceNumber:Number.isFinite(Number(i?.referenceNumber))?Math.max(1,Math.floor(Number(i.referenceNumber))):null,referenceLabel:typeof i?.referenceLabel=="string"&&i.referenceLabel.trim().length>0?i.referenceLabel.trim():void 0,initiativeId:typeof i?.initiativeId=="string"&&i.initiativeId.trim().length>0?i.initiativeId.trim():null,title:String(i?.title||"").trim(),description:typeof i?.description=="string"?i.description:null,ownerId:typeof i?.ownerId=="string"&&i.ownerId.trim().length>0?i.ownerId.trim():null,createdAt:String(i?.createdAt||"").trim(),updatedAt:String(i?.updatedAt||i?.createdAt||"").trim(),order:Number.isFinite(Number(i?.order))?Math.floor(Number(i.order)):null,isArchived:!!i?.isArchived}})).filter(i=>i.workstream.id.length>0).filter(i=>ee?!0:q.get(i.workstream.id)!==i.workstream.updatedAt),Re=new Set((Array.isArray(t.aiProfiles)?t.aiProfiles:[]).map(i=>String(i?.id||"").trim()).filter(i=>i.length>0)),V=new Map((Array.isArray(t.aiProfiles)?t.aiProfiles:[]).map(i=>[String(i?.id||"").trim(),String(i?.updatedAt||i?.createdAt||"").trim()]).filter(([i])=>i.length>0)),te=t.lastPushedAiProfileWatermarks,xe=!te||te.size===0,de=(Array.isArray(t.aiProfiles)?t.aiProfiles:[]).map(i=>({op:"ai-profile-upsert",profile:{id:String(i.id||"").trim(),workspaceId:String(i.workspaceId||"").trim(),profileToken:String(i.profileToken||"").trim(),name:String(i.name||"").trim(),username:String(i.username||"").trim(),icon:String(i.icon||"Bot").trim()||"Bot",color:String(i.color||"#8b5cf6").trim()||"#8b5cf6",surfaceType:af(i.surfaceType),providerMetadata:i.providerMetadata&&typeof i.providerMetadata=="object"&&!Array.isArray(i.providerMetadata)?i.providerMetadata:null,createdAt:String(i.createdAt||"").trim(),updatedAt:String(i.updatedAt||i.createdAt||"").trim(),lastActiveAt:typeof i.lastActiveAt=="string"&&i.lastActiveAt.trim().length>0?i.lastActiveAt.trim():null}})).filter(i=>i.profile.id.length>0&&i.profile.workspaceId.length>0).filter(i=>xe?!0:te.get(i.profile.id)!==i.profile.updatedAt),O=new Set((Array.isArray(t.documents)?t.documents:[]).map(i=>String(i?.path||"").trim()).filter(i=>i.length>0)),R=new Set(Array.from(t.lastPushedDocumentPaths||new Set).map(i=>String(i||"").trim()).filter(i=>i.length>0&&!O.has(i))),z=new Map((Array.isArray(t.documents)?t.documents:[]).map(i=>[String(i?.path||"").trim(),String(i?.updatedAt||"").trim()]).filter(([i])=>i.length>0)),re=t.lastPushedDocumentWatermarks,be=!re||re.size===0,We=(Array.isArray(t.documents)?t.documents:[]).map(i=>({op:"document-upsert",path:String(i.path||"").trim(),updatedAt:String(i.updatedAt||"").trim(),content:typeof i.content=="string"?i.content:"",assetId:typeof i.assetId=="string"&&i.assetId.trim().length>0?i.assetId.trim():void 0,documentId:typeof i.documentId=="string"&&i.documentId.trim().length>0?i.documentId.trim():null,referenceNumber:Number.isFinite(Number(i.referenceNumber))?Math.max(1,Math.floor(Number(i.referenceNumber))):null,version:Number.isFinite(Number(i.version))?Math.max(1,Math.floor(Number(i.version))):null,taskId:typeof i.taskId=="string"&&i.taskId.trim().length>0?i.taskId.trim():null,logicalName:typeof i.logicalName=="string"&&i.logicalName.trim().length>0?i.logicalName.trim():null,caption:typeof i.caption=="string"&&i.caption.trim().length>0?i.caption.trim():null,originalFilename:typeof i.originalFilename=="string"&&i.originalFilename.trim().length>0?i.originalFilename.trim():null,linkRole:i.linkRole==="reference"?"reference":"attachment"})).filter(i=>i.path.length>0).filter(i=>be?!0:re.get(i.path)!==i.updatedAt),Ce=new Set((Array.isArray(t.assets)?t.assets:[]).map(i=>String(i?.path||"").trim()).filter(i=>i.length>0)),Ve=new Set(Array.from(t.lastPushedAssetPaths||new Set).map(i=>String(i||"").trim()).filter(i=>i.length>0&&!Ce.has(i))),Fe=new Map((Array.isArray(t.assets)?t.assets:[]).map(i=>[String(i?.path||"").trim(),String(i?.updatedAt||"").trim()]).filter(([i])=>i.length>0)),ve=t.lastPushedAssetWatermarks,Oe=!ve||ve.size===0,v=(Array.isArray(t.assets)?t.assets:[]).map(i=>({op:"asset-upsert",path:String(i.path||"").trim(),updatedAt:String(i.updatedAt||"").trim(),contentBase64:typeof i.contentBase64=="string"?i.contentBase64:"",assetId:typeof i.assetId=="string"&&i.assetId.trim().length>0?i.assetId.trim():void 0,kind:i.kind==="image"?"image":"file",mimeType:typeof i.mimeType=="string"&&i.mimeType.trim().length>0?i.mimeType.trim():"application/octet-stream",referenceNumber:Number.isFinite(Number(i.referenceNumber))?Math.max(1,Math.floor(Number(i.referenceNumber))):null,taskId:typeof i.taskId=="string"&&i.taskId.trim().length>0?i.taskId.trim():null,logicalName:typeof i.logicalName=="string"&&i.logicalName.trim().length>0?i.logicalName.trim():null,caption:typeof i.caption=="string"&&i.caption.trim().length>0?i.caption.trim():null,originalFilename:typeof i.originalFilename=="string"&&i.originalFilename.trim().length>0?i.originalFilename.trim():null,linkRole:i.linkRole==="reference"?"reference":i.linkRole==="image"?"image":"attachment"})).filter(i=>i.path.length>0&&i.contentBase64.length>0).filter(i=>Oe?!0:ve.get(i.path)!==i.updatedAt),M=Array.isArray(t.documentReviewSessions)?t.documentReviewSessions:[],C=new Set(M.filter(i=>String(i?.deletedAt||"").trim().length===0).map(i=>String(i?.id||"").trim()).filter(i=>i.length>0)),oe=new Set([...Array.from(t.lastPushedDocumentReviewSessionIds||new Set).map(i=>String(i||"").trim()).filter(i=>i.length>0&&!C.has(i)),...M.filter(i=>String(i?.deletedAt||"").trim().length>0).map(i=>String(i?.id||"").trim()).filter(i=>i.length>0)]),D=new Map(M.map(i=>[String(i?.id||"").trim(),String(i?.updatedAt||i?.createdAt||"").trim()]).filter(([i])=>i.length>0)),f=t.lastPushedDocumentReviewSessionWatermarks,x=!f||f.size===0,P=M.map(i=>({op:"document-review-session-upsert",session:{id:String(i.id||"").trim(),assetId:String(i.assetId||"").trim(),documentId:typeof i.documentId=="string"&&i.documentId.trim().length>0?i.documentId.trim():null,documentVersion:Number.isFinite(Number(i.documentVersion))?Math.max(1,Math.floor(Number(i.documentVersion))):null,title:typeof i.title=="string"&&i.title.trim().length>0?i.title.trim():null,status:i.status==="resolved"?"resolved":"open",comments:[],createdByActorId:typeof i.createdByActorId=="string"&&i.createdByActorId.trim().length>0?i.createdByActorId.trim():null,updatedByActorId:typeof i.updatedByActorId=="string"&&i.updatedByActorId.trim().length>0?i.updatedByActorId.trim():null,createdAt:String(i.createdAt||"").trim(),updatedAt:String(i.updatedAt||i.createdAt||"").trim(),deletedAt:typeof i.deletedAt=="string"&&i.deletedAt.trim().length>0?i.deletedAt.trim():null}})).filter(i=>i.session.id.length>0&&i.session.assetId.length>0&&!i.session.deletedAt).filter(i=>x?!0:f.get(i.session.id)!==i.session.updatedAt),B=Array.isArray(t.documentReviewComments)?t.documentReviewComments:[],Ae=new Set(B.filter(i=>String(i?.deletedAt||"").trim().length===0).map(i=>String(i?.id||"").trim()).filter(i=>i.length>0)),F=new Set([...Array.from(t.lastPushedDocumentReviewCommentIds||new Set).map(i=>String(i||"").trim()).filter(i=>i.length>0&&!Ae.has(i)),...B.filter(i=>String(i?.deletedAt||"").trim().length>0).map(i=>String(i?.id||"").trim()).filter(i=>i.length>0)]),ne=new Map(B.map(i=>[String(i?.id||"").trim(),String(i?.updatedAt||i?.createdAt||"").trim()]).filter(([i])=>i.length>0)),ae=t.lastPushedDocumentReviewCommentWatermarks,ie=!ae||ae.size===0,Z=B.map(i=>({op:"document-review-comment-upsert",comment:{id:String(i.id||"").trim(),sessionId:String(i.sessionId||"").trim(),body:String(i.body||"").trim(),anchor:i.anchor??null,order:Number.isFinite(Number(i.order))?Math.max(0,Math.floor(Number(i.order))):0,authorActorId:typeof i.authorActorId=="string"&&i.authorActorId.trim().length>0?i.authorActorId.trim():null,createdAt:String(i.createdAt||"").trim(),updatedAt:String(i.updatedAt||i.createdAt||"").trim(),deletedAt:typeof i.deletedAt=="string"&&i.deletedAt.trim().length>0?i.deletedAt.trim():null}})).filter(i=>i.comment.id.length>0&&i.comment.sessionId.length>0&&!i.comment.deletedAt).filter(i=>ie?!0:ae.get(i.comment.id)!==i.comment.updatedAt),H=Array.isArray(t.annotatedAttachmentSessions)?t.annotatedAttachmentSessions:[],ue=new Set(H.filter(i=>String(i?.deletedAt||"").trim().length===0).map(i=>String(i?.id||"").trim()).filter(i=>i.length>0)),Pe=new Set([...Array.from(t.lastPushedAnnotatedAttachmentSessionIds||new Set).map(i=>String(i||"").trim()).filter(i=>i.length>0&&!ue.has(i)),...H.filter(i=>String(i?.deletedAt||"").trim().length>0).map(i=>String(i?.id||"").trim()).filter(i=>i.length>0)]),se=new Map(H.map(i=>[String(i?.id||"").trim(),String(i?.updatedAt||i?.createdAt||"").trim()]).filter(([i])=>i.length>0)),$e=t.lastPushedAnnotatedAttachmentSessionWatermarks,et=!$e||$e.size===0,tt=H.map(i=>({op:"annotated-attachment-session-upsert",session:{id:String(i.id||"").trim(),workspaceId:String(i.workspaceId||"").trim(),taskId:String(i.taskId||"").trim(),baseImageAssetId:String(i.baseImageAssetId||"").trim(),title:typeof i.title=="string"&&i.title.trim().length>0?i.title.trim():null,globalInstruction:typeof i.globalInstruction=="string"&&i.globalInstruction.trim().length>0?i.globalInstruction.trim():null,annotations:Array.isArray(i.annotations)?i.annotations:[],createdByActorId:typeof i.createdByActorId=="string"&&i.createdByActorId.trim().length>0?i.createdByActorId.trim():null,updatedByActorId:typeof i.updatedByActorId=="string"&&i.updatedByActorId.trim().length>0?i.updatedByActorId.trim():null,createdAt:String(i.createdAt||"").trim(),updatedAt:String(i.updatedAt||i.createdAt||"").trim(),deletedAt:typeof i.deletedAt=="string"&&i.deletedAt.trim().length>0?i.deletedAt.trim():null}})).filter(i=>i.session.id.length>0&&i.session.workspaceId.length>0&&i.session.baseImageAssetId.length>0&&!i.session.deletedAt).filter(i=>et?!0:$e.get(i.session.id)!==i.session.updatedAt);return{changes:[...J,...W,...t.taxonomyState&&typeof t.taxonomyState=="object"?[{op:"taxonomy-upsert",taxonomyState:t.taxonomyState,updatedAt:n}]:Array.isArray(t.taxonomies)?[{op:"taxonomy-upsert",taxonomies:t.taxonomies,updatedAt:n}]:[],...de,...We,...Array.from(R).map(i=>({op:"document-delete",path:i,deletedAt:n})),...v,...Array.from(Ve).map(i=>({op:"asset-delete",path:i,deletedAt:n})),...P,...Array.from(oe).map(i=>({op:"document-review-session-delete",sessionId:i,deletedAt:n})),...Z,...Array.from(F).map(i=>({op:"document-review-comment-delete",commentId:i,deletedAt:n})),...tt,...Array.from(Pe).map(i=>({op:"annotated-attachment-session-delete",sessionId:i,deletedAt:n})),...g,..._,...Array.from(k).map(i=>({op:"delete",taskId:i}))],currentTaskIds:new Set(Array.from(w).filter(i=>!s.has(i))),deleteTaskIds:k,currentInitiativeIds:b,currentInitiativeWatermarks:L,currentWorkstreamIds:U,currentWorkstreamWatermarks:X,currentAiProfileIds:Re,currentAiProfileWatermarks:V,currentDocumentPaths:O,deleteDocumentPaths:R,currentDocumentWatermarks:z,currentAssetPaths:Ce,deleteAssetPaths:Ve,currentAssetWatermarks:Fe,currentDocumentReviewSessionIds:C,deleteDocumentReviewSessionIds:oe,currentDocumentReviewSessionWatermarks:D,currentDocumentReviewCommentIds:Ae,deleteDocumentReviewCommentIds:F,currentDocumentReviewCommentWatermarks:ne,currentAnnotatedAttachmentSessionIds:ue,deleteAnnotatedAttachmentSessionIds:Pe,currentAnnotatedAttachmentSessionWatermarks:se,pushedWatermarks:p}}function dy(t){const n=(t.tasks||[]).map(l=>`${l.id}:${l.updatedAt||l.createdAt||""}:${l.status}`).sort(),s=(t.archivedTasks||[]).map(l=>`${l.id}:${l.updatedAt||l.createdAt||""}:${l.status}`).sort(),r=t.pendingDeletedTaskIds?Array.from(t.pendingDeletedTaskIds).sort():[],o=(t.initiatives||[]).map(l=>({id:String(l.id||"").trim(),updatedAt:String(l.updatedAt||l.createdAt||"").trim(),title:String(l.title||"").trim(),ownerId:typeof l.ownerId=="string"?l.ownerId.trim():"",isArchived:!!l.isArchived})).filter(l=>l.id.length>0).sort((l,p)=>l.id.localeCompare(p.id)),d=(t.workstreams||[]).map(l=>({id:String(l.id||"").trim(),updatedAt:String(l.updatedAt||l.createdAt||"").trim(),initiativeId:typeof l.initiativeId=="string"?l.initiativeId.trim():"",title:String(l.title||"").trim(),ownerId:typeof l.ownerId=="string"?l.ownerId.trim():"",isArchived:!!l.isArchived})).filter(l=>l.id.length>0).sort((l,p)=>l.id.localeCompare(p.id));return JSON.stringify({workspaceId:t.workspaceId,initiatives:o,workstreams:d,taxonomyState:t.taxonomyState&&typeof t.taxonomyState=="object"?t.taxonomyState:null,taxonomies:Array.isArray(t.taxonomies)?t.taxonomies:[],aiProfiles:Array.isArray(t.aiProfiles)?t.aiProfiles.map(l=>({id:String(l.id||"").trim(),updatedAt:String(l.updatedAt||l.createdAt||"").trim(),name:String(l.name||"").trim(),username:String(l.username||"").trim()})).filter(l=>l.id.length>0).sort((l,p)=>l.id.localeCompare(p.id)):[],documents:Array.isArray(t.documents)?t.documents.map(l=>({path:String(l.path||"").trim(),updatedAt:String(l.updatedAt||"").trim(),length:typeof l.content=="string"?l.content.length:0})).filter(l=>l.path.length>0).sort((l,p)=>l.path.localeCompare(p.path)):[],assets:Array.isArray(t.assets)?t.assets.map(l=>({path:String(l.path||"").trim(),updatedAt:String(l.updatedAt||"").trim(),length:typeof l.contentBase64=="string"?l.contentBase64.length:0,kind:l.kind==="image"?"image":"file"})).filter(l=>l.path.length>0).sort((l,p)=>l.path.localeCompare(p.path)):[],documentReviewSessions:Array.isArray(t.documentReviewSessions)?t.documentReviewSessions.map(l=>({id:String(l.id||"").trim(),updatedAt:String(l.updatedAt||l.createdAt||"").trim(),assetId:String(l.assetId||"").trim(),status:l.status==="resolved"?"resolved":"open",deletedAt:String(l.deletedAt||"").trim(),commentCount:Array.isArray(l.comments)?l.comments.length:0})).filter(l=>l.id.length>0).sort((l,p)=>l.id.localeCompare(p.id)):[],documentReviewComments:Array.isArray(t.documentReviewComments)?t.documentReviewComments.map(l=>({id:String(l.id||"").trim(),sessionId:String(l.sessionId||"").trim(),updatedAt:String(l.updatedAt||l.createdAt||"").trim(),deletedAt:String(l.deletedAt||"").trim(),bodyLength:String(l.body||"").length})).filter(l=>l.id.length>0).sort((l,p)=>l.id.localeCompare(p.id)):[],annotatedAttachmentSessions:Array.isArray(t.annotatedAttachmentSessions)?t.annotatedAttachmentSessions.map(l=>({id:String(l.id||"").trim(),updatedAt:String(l.updatedAt||l.createdAt||"").trim(),taskId:String(l.taskId||"").trim(),baseImageAssetId:String(l.baseImageAssetId||"").trim(),deletedAt:String(l.deletedAt||"").trim(),annotationCount:Array.isArray(l.annotations)?l.annotations.length:0})).filter(l=>l.id.length>0).sort((l,p)=>l.id.localeCompare(p.id)):[],active:n,archived:s,pendingDeletes:r})}function zd(){return{version:2,enabled:!1,phase:"idle",pullCursor:null,lastPullAt:null,lastPushAt:null,lastSyncedAt:null,lastErrorMessage:null}}function jo(t){const n=String(t||"").trim();return n.length>0?n:null}function uy(t,n){if(!!!(t.enabled??t.cloudSyncEnabled))return"idle";const r=String(t.phase||"").trim().toLowerCase();if(r==="idle"||r==="provision-local"||r==="attach-cloud"||r==="active"||r==="error")return r;const o=String(t.bootstrapMode||"").trim().toLowerCase();if(o==="provision-local"||o==="attach-cloud")return o;const d=String(t.sourceOfTruth||"").trim().toLowerCase();return t.onboardingCompleted?"active":d==="cloud"?n.lastPullAt?"active":"attach-cloud":d==="local"?n.lastPullAt||n.lastPushAt?"active":"provision-local":(n.lastPullAt||n.lastPushAt,"active")}function py(t){const n=zd();if(!t||typeof t!="object")return{state:n,changed:!1};const s=t,r=s.lastErrorMessage,o=typeof r=="string"&&r.trim().length>0?r:null,d={version:2,enabled:!!(s.enabled??s.cloudSyncEnabled),phase:"idle",pullCursor:jo(s.pullCursor),lastPullAt:jo(s.lastPullAt),lastPushAt:jo(s.lastPushAt),lastSyncedAt:jo(s.lastSyncedAt),lastErrorMessage:o};d.phase=uy(s,d),d.enabled||(d.phase="idle",d.pullCursor=null);const p=Number(s.version||0)!==2||!!(s.enabled??s.cloudSyncEnabled)!==d.enabled||String(s.phase||"").trim()!==d.phase||jo(s.pullCursor)!==d.pullCursor||jo(s.lastPullAt)!==d.lastPullAt||jo(s.lastPushAt)!==d.lastPushAt||jo(s.lastSyncedAt)!==d.lastSyncedAt||o!==d.lastErrorMessage;return{state:d,changed:p}}const my="taskforce.sync.lease.v1",fy="taskforce.sync.lease.v1",hy=2500,gy=9e3;function xl(t){const n=String(t||"").trim();return n.length>0&&n.toLowerCase()!=="default"}function Fd(t){const n=String(t||"").trim();return n.length>0?n:null}function Ou(t){return`${my}.${t}`}function yy(t){if(!t)return null;try{const n=JSON.parse(t),s=String(n?.ownerId||"").trim(),r=String(n?.workspaceId||"").trim(),o=String(n?.operation||"").trim(),d=String(n?.heartbeatAt||"").trim(),l=String(n?.expiresAt||"").trim();return!s||!r||!d||!l||o!=="pull"&&o!=="push"&&o!=="repair"?null:{ownerId:s,workspaceId:r,operation:o,heartbeatAt:d,expiresAt:l}}catch{return null}}function ky(t,n,s,r){return{ownerId:t,workspaceId:n,operation:s,heartbeatAt:new Date(r).toISOString(),expiresAt:new Date(r+gy).toISOString()}}function Sy(t,n=Date.now()){if(!t)return!0;const s=Date.parse(t.expiresAt);return!Number.isFinite(s)||s<=n}function qp(t,n){const s={...t,...n,version:2,phase:n.phase||t.phase,pullCursor:n.pullCursor===void 0?t.pullCursor:Fd(n.pullCursor),lastPullAt:n.lastPullAt===void 0?t.lastPullAt:Fd(n.lastPullAt),lastPushAt:n.lastPushAt===void 0?t.lastPushAt:Fd(n.lastPushAt),lastSyncedAt:n.lastSyncedAt===void 0?t.lastSyncedAt:Fd(n.lastSyncedAt),lastErrorMessage:n.lastErrorMessage===void 0?t.lastErrorMessage:n.lastErrorMessage??null};return s.enabled||(s.phase="idle",s.pullCursor=null),s}function vy(t){const{currentWorkspaceId:n,setWorkspaceCloudSyncEnabled:s,setWorkspaceSyncPhase:r,setWorkspaceLastPullAt:o,setWorkspaceLastPushAt:d,setWorkspaceLastErrorMessage:l}=t,[p,g]=a.useState(null),_=a.useRef(null),w=a.useRef(null),A=a.useRef(0),y=a.useRef(!1),k=a.useRef(!1),b=a.useRef(""),L=a.useRef(""),S=a.useRef(new Set),$=a.useRef(new Set),J=a.useRef(null),U=a.useRef(zd()),X=a.useRef(""),q=a.useRef(null),ee=a.useRef(null),W=a.useRef(null),Re=a.useRef(null);if(!X.current){const v=Date.now().toString(36),M=Math.random().toString(36).slice(2,10);X.current=`sync-lease-${v}-${M}`}const V=a.useCallback(()=>{A.current=0,w.current=null,_.current!==null&&typeof window<"u"&&(window.clearTimeout(_.current),_.current=null),g(null)},[]),te=a.useCallback((v,M)=>{if(typeof window>"u")return;const C=Math.max(1,A.current+1);A.current=C;const oe=sy(C),D=Number(M?.minDelayMs),f=Number.isFinite(D)&&D>0?Math.max(oe,Math.floor(D)):oe,x=Date.now()+f;w.current=x,g(new Date(x).toISOString()),_.current!==null&&window.clearTimeout(_.current),_.current=window.setTimeout(()=>{_.current=null,w.current=null,g(null),v()},f)},[]),xe=a.useCallback(()=>{const v=w.current;return typeof v=="number"&&Number.isFinite(v)&&v>Date.now()},[]),de=a.useCallback(v=>{if(typeof window>"u")return null;const M=String(v||"").trim();return xl(M)?yy(window.localStorage.getItem(Ou(M))):null},[]),O=a.useCallback(v=>{const M=String(v||"").trim();if(M)try{Re.current?.postMessage({workspaceId:M})}catch{}},[]),R=a.useCallback((v,M)=>{if(typeof window>"u")return null;const C=String(v||"").trim();if(!xl(C))return null;const oe=ky(X.current,C,M,Date.now());try{window.localStorage.setItem(Ou(C),JSON.stringify(oe))}catch{return null}return O(C),oe},[O]),z=a.useCallback(()=>{W.current!==null&&typeof window<"u"&&(window.clearInterval(W.current),W.current=null)},[]),re=a.useCallback((v,M)=>{if(typeof window>"u")return;const C=String(v||q.current||"").trim();if(!C)return;const oe=de(C),D=oe?.ownerId===X.current;if(!(!M?.force&&oe&&!D)){z();try{window.localStorage.removeItem(Ou(C))}catch{}q.current=null,ee.current=null,O(C)}},[O,de,z]),be=a.useCallback((v,M)=>{typeof window>"u"||(z(),W.current=window.setInterval(()=>{const C=String(q.current||"").trim(),oe=ee.current;if(!C||!oe){z();return}if(de(C)?.ownerId!==X.current){z(),q.current=null,ee.current=null;return}R(C,oe)},hy),q.current=v,ee.current=M)},[de,z,R]),We=a.useCallback(async(v,M)=>{if(typeof window>"u")return!0;const C=String(v||"").trim();if(!xl(C))return!1;const oe=de(C);if(oe?.ownerId===X.current)return R(C,M)?(be(C,M),!0):!1;if(oe&&!Sy(oe)||!R(C,M))return!1;const x=de(C);return!x||x.ownerId!==X.current?!1:(be(C,M),!0)},[de,be,R]),Ce=a.useCallback(v=>{re(v,{force:!0})},[re]),Ve=a.useCallback(v=>{const M=U.current,C=qp(M,{enabled:!!v.enabled,phase:v.phase||M.phase,pullCursor:v.pullCursor,lastPullAt:v.lastPullAt,lastPushAt:v.lastPushAt,lastSyncedAt:v.lastSyncedAt,lastErrorMessage:v.lastErrorMessage});U.current=C,J.current=C.pullCursor,s(C.enabled),r(C.phase),o(C.lastPullAt),d(C.lastPushAt),l(C.lastErrorMessage??null)},[s,r,o,d,l]),Fe=a.useCallback(async v=>{const M=qp(U.current,v);U.current=M,J.current=M.pullCursor;const C=await fetch("/api/taskforce/ui-state",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({workspaceId:n,stateKey:"workspace-sync",patch:M})}),oe=await C.json().catch(()=>({}));if(!C.ok||oe?.success===!1)throw new Error(oe?.error||`Failed to persist workspace sync state (${C.status})`);return Ve(M),M},[Ve,n]),ve=a.useCallback(async()=>{if(!xl(n)){const v=zd();U.current=v,Ve(v);return}try{const v=await fetch(`/api/taskforce/ui-state?key=workspace-sync&workspaceId=${encodeURIComponent(n)}`,{method:"GET",credentials:"include"});if(!v.ok)return;const M=await v.json().catch(()=>({})),C=py(M?.state&&typeof M.state=="object"?M.state:null);U.current=C.state,Ve(C.state),C.changed&&Fe(C.state)}catch{}},[Ve,n,Fe]),Oe=a.useCallback(async(v,M)=>{if(!xl(n))return{success:!1,error:"Workspace setup is required before enabling sync."};try{if(!v.enabled)return await Fe({enabled:!1,phase:"idle",pullCursor:null}),{success:!0};if(!M.isAuthenticated)return{success:!1,error:"Sign in is required before enabling workspace sync."};if(!M.cloudAuthConfigured)return{success:!1,error:"Cloud authentication endpoint is not configured."};const C=await M.ensureCloudWorkspaceReadyForSync();return C.success?(await Fe({enabled:!0,phase:C.provisioned?"provision-local":"attach-cloud",pullCursor:null,lastPullAt:null,lastPushAt:null,lastSyncedAt:null}),{success:!0}):{success:!1,error:C.error||"Workspace sync handshake failed."}}catch{return{success:!1,error:"Failed to save workspace sync settings."}}},[n,Fe]);return a.useEffect(()=>{b.current="",L.current="",S.current=new Set,$.current=new Set,J.current=null,U.current=zd(),y.current=!1,k.current=!1,re(),V()},[V,n,re]),a.useEffect(()=>{if(typeof window>"u"||typeof BroadcastChannel>"u")return;const v=new BroadcastChannel(fy);return Re.current=v,()=>{v.close(),Re.current===v&&(Re.current=null)}},[]),a.useEffect(()=>()=>{_.current!==null&&typeof window<"u"&&(window.clearTimeout(_.current),_.current=null),re()},[re]),{workspaceRetryAt:p,isWorkspaceRetryPending:xe,workspacePushInFlightRef:y,workspacePullInFlightRef:k,workspaceLastPushedSignatureRef:b,workspacePendingSignatureRef:L,workspaceLastPushedTaskIdsRef:S,workspaceDeletedTaskIdsRef:$,workspacePullCursorRef:J,clearWorkspaceRetry:V,scheduleWorkspaceRetry:te,persistWorkspaceSyncPatch:Fe,loadWorkspaceSyncState:ve,applyWorkspaceSyncStateSnapshot:Ve,saveWorkspaceCloudSyncSettings:Oe,acquireWorkspaceSyncLease:We,releaseWorkspaceSyncLease:re,forceClearWorkspaceSyncLease:Ce,readWorkspaceSyncLease:de}}class wy{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 s=typeof n.eventId=="string"?n.eventId.trim():"";if(s&&this.seenEventIds.has(s))return this.telemetry.duplicateDiscarded+=1,{accepted:!1,reason:"duplicate",shouldRecover:!1};const r=typeof n.serverEpoch=="string"?n.serverEpoch.trim():"",o=Number(n.seq);if(!(r.length>0&&Number.isFinite(o)&&o>=0))return s?(this.rememberEventId(s),this.telemetry.accepted+=1,{accepted:!0,shouldRecover:!1}):(this.telemetry.invalidDiscarded+=1,{accepted:!1,reason:"invalid",shouldRecover:!1});const l=Math.floor(o);if(this.activeEpoch&&this.activeEpoch!==r)return this.activeEpoch=r,this.lastSeq=l,s&&this.rememberEventId(s),this.telemetry.accepted+=1,{accepted:!0,shouldRecover:!1};if(!this.activeEpoch)return this.activeEpoch=r,this.lastSeq=l,s&&this.rememberEventId(s),this.telemetry.accepted+=1,{accepted:!0,shouldRecover:!1};const p=this.lastSeq;if(typeof p=="number"){if(l<=p){this.telemetry.outOfOrderDiscarded+=l===p?0:1,this.telemetry.duplicateDiscarded+=l===p?1:0;const g=l<p;return g&&(this.telemetry.recoveryTriggered+=1),{accepted:!1,reason:l===p?"duplicate":"out-of-order",shouldRecover:g}}if(l>p+1)return this.telemetry.outOfOrderDiscarded+=1,this.telemetry.recoveryTriggered+=1,{accepted:!1,reason:"out-of-order",shouldRecover:!0}}return this.lastSeq=l,s&&this.rememberEventId(s),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 s=this.seenEventIdQueue.shift();s&&this.seenEventIds.delete(s)}}}function sf(t){const{enabled:n,workspaceId:s,websocketUrl:r,reconnectBaseMs:o=400,reconnectMaxMs:d=1e4,degradeAfterAttempts:l=5,replayLimit:p=200,onSignal:g,onTelemetry:_,userId:w}=t,[A,y]=a.useState("degraded-fallback"),k=a.useRef(null),b=a.useRef(null),L=a.useRef(0),S=a.useRef(""),$=a.useRef(!1),J=a.useRef(null),U=a.useRef(null),X=a.useRef(new wy),q=a.useRef(g),ee=a.useRef(_);a.useEffect(()=>{q.current=g},[g]),a.useEffect(()=>{ee.current=_},[_]);const[W,Re]=a.useState({accepted:0,duplicateDiscarded:0,outOfOrderDiscarded:0,invalidDiscarded:0,recoveryTriggered:0}),V=a.useMemo(()=>String(s||"").trim(),[s]),te=a.useMemo(()=>String(r||"").trim(),[r]);return a.useEffect(()=>{let xe=!1;const de=()=>{b.current!==null&&(window.clearTimeout(b.current),b.current=null)},O=()=>{const ve=k.current;if(k.current=null,ve)try{ve.close()}catch{}},R=ve=>ve==="taskforce:replay-gap"||ve==="taskforce:replay-reset"?4:ve==="taskforce:mutation"||ve==="taskforce:replay"?3:1,z=ve=>{const Oe=U.current;if(Oe){const v=R(Oe.type),M=R(ve.type);if(M<v||M===v&&Oe.eventId&&!ve.eventId)return}U.current=ve,J.current!==null&&window.clearTimeout(J.current),J.current=window.setTimeout(()=>{J.current=null;const v=q.current;if(!U.current||typeof v!="function")return;const M=U.current;U.current=null,v(M)},80)},re=ve=>{try{const Oe=JSON.parse(String(ve.data||""));return!Oe||typeof Oe!="object"?null:Oe}catch{return null}},be=ve=>{const Oe=typeof ve.serverEpoch=="string"?ve.serverEpoch.trim():"",v=Number(ve.seq);!Oe||!Number.isFinite(v)||v<0||(S.current=`${Oe}:${Math.floor(v)}`,$.current=!1)},We=()=>{const ve=X.current.getTelemetry();Re(ve);const Oe=ee.current;typeof Oe=="function"&&Oe(ve)},Ce=ve=>{const Oe={type:"taskforce:replay",workspaceId:V,limit:p},v=S.current;v&&(Oe.cursor=v),ve.send(JSON.stringify(Oe))},Ve=()=>{if(!n||xe)return;de(),L.current+=1;const ve=L.current,Oe=Math.max(50,Math.floor(o)),v=Math.max(Oe,Math.floor(d)),M=Math.min(v,Oe*Math.pow(2,Math.max(0,ve-1)));y(ve>=l?"degraded-fallback":"reconnecting"),b.current=window.setTimeout(()=>{xe||(b.current=null,Fe())},M)},Fe=()=>{if(!n||xe||!V||!te)return;O();let ve;try{ve=new WebSocket(te)}catch{Ve();return}k.current=ve,ve.addEventListener("open",()=>{L.current=0,y("connected"),ve.send(JSON.stringify({type:"taskforce:subscribe",workspaceId:V,userId:w||void 0})),Ce(ve)}),ve.addEventListener("message",Oe=>{const v=re(Oe);if(!v||typeof v.type!="string")return;const M=typeof v.workspaceId=="string"?v.workspaceId.trim():V;if(!(!M||M!==V)){if(v.type==="taskforce:update"){z({type:"taskforce:update",workspaceId:V});return}if(v.type==="taskforce:mutation"){const C=X.current.process({eventId:v.eventId,serverEpoch:v.serverEpoch,seq:v.seq});if(!C.accepted){We(),C.shouldRecover&&(S.current="",$.current||($.current=!0,z({type:"taskforce:replay-gap",workspaceId:V})));return}be(v),We(),z({type:v.type,workspaceId:V,eventId:typeof v.eventId=="string"?v.eventId.trim():void 0});return}if(v.type==="taskforce:replay"){const C=Array.isArray(v.events)?v.events:[];let oe=0;for(const D of C)X.current.process({eventId:D.eventId,serverEpoch:D.serverEpoch,seq:D.seq}).accepted&&(oe+=1,be(D));$.current=!1,We(),(oe>0||v.truncated===!0)&&z({type:"taskforce:replay",workspaceId:V}),v.truncated===!0&&Ce(ve);return}if(v.type==="taskforce:replay-gap"||v.type==="taskforce:replay-reset"){if(S.current="",$.current)return;$.current=!0,z({type:v.type,workspaceId:V})}}}),ve.addEventListener("close",Oe=>{if(k.current===ve&&(k.current=null),!xe&&n){const v=Number(Oe?.code||0),M=String(Oe?.reason||"").trim();console.warn(`[Taskforce] Realtime socket closed workspace=${V} user=${String(w||"anonymous").trim()||"anonymous"} code=${v}${M?` reason=${M}`:""}`)}Ve()}),ve.addEventListener("error",()=>{try{ve.close()}catch{}})};return!n||!V||!te?(y("degraded-fallback"),de(),O(),()=>{de(),O()}):(y("reconnecting"),Fe(),()=>{xe=!0,de(),J.current!==null&&(window.clearTimeout(J.current),J.current=null),U.current=null,O()})},[n,V,te,o,d,l,p,w]),{connectionState:A,telemetry:W}}const rp="taskforce:context-assets-mutated";function by(t){typeof window>"u"||typeof window.dispatchEvent!="function"||window.dispatchEvent(new CustomEvent(rp,{detail:t}))}const rf="taskforce.userGlobalSyncMeta.v1",_y="taskforce.syncDebug.v1",Cy=12e4,of="taskforce.syncWatermarks.v3",xy=7200*1e3,Kp="Another local window is already syncing this workspace. Wait a few seconds, or press Repair in that window.";function No(t){const n=String(t||"").trim();return n.length>0&&n.toLowerCase()!=="default"}function Ay(){if(typeof window>"u")return!1;try{const t=String(window.localStorage.getItem(_y)||"").trim().toLowerCase();return t==="1"||t==="true"||t==="on"||t==="yes"}catch{return!1}}function ms(t,n){if(!Ay())return;console.info("[Taskforce Sync]",t,n&&typeof n=="object"?n:{})}function Ty(t){const n=t?.providerMetadata??t?.provider_metadata??null;return{id:String(t?.id||"").trim(),workspaceId:String(t?.workspaceId||t?.workspace_id||"").trim(),profileToken:String(t?.profileToken||t?.profile_token||"").trim(),name:String(t?.name||"").trim(),username:String(t?.username||"").trim(),icon:String(t?.icon||"Bot").trim()||"Bot",color:String(t?.color||"#8b5cf6").trim()||"#8b5cf6",surfaceType:af(t?.surfaceType??t?.surface_type),providerMetadata:n&&typeof n=="object"&&!Array.isArray(n)?n:null,createdAt:String(t?.createdAt||t?.created_at||"").trim(),updatedAt:String(t?.updatedAt||t?.updated_at||t?.createdAt||t?.created_at||"").trim(),lastActiveAt:typeof t?.lastActiveAt=="string"&&t.lastActiveAt.trim().length>0?t.lastActiveAt.trim():typeof t?.last_active_at=="string"&&t.last_active_at.trim().length>0?t.last_active_at.trim():null}}function Yp(){if(typeof window>"u")return{};try{const t=window.localStorage.getItem(rf);if(!t)return{};const n=JSON.parse(t);return n&&typeof n=="object"?n:{}}catch{return{}}}function Iy(t){if(!(typeof window>"u"))try{window.localStorage.setItem(rf,JSON.stringify(t))}catch{}}function jy(t){try{return JSON.stringify(t&&typeof t=="object"?t:null)}catch{return"null"}}function Ny(t,n,s,r,o){return t?n==="provision-local"?s?"Uploading this workspace to cloud for the first time.":"Preparing the first upload to cloud.":n==="attach-cloud"?s?"Pulling the cloud workspace into this device.":"Waiting for the first cloud pull into this device.":r?"Sync hit a temporary problem and will retry automatically.":o?"Sync needs attention before it can continue.":s?"Sync is currently running.":"Sync is healthy.":"Sync is turned off for this workspace."}function Ry(t,n,s,r){return t?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.":s?"Wait for the automatic retry, or press Sync to retry now.":r?"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."}function Dy(t){return t.flatMap(n=>{const s=String(n?.id||"").trim();return!s||!Array.isArray(n?.comments)?[]:n.comments.map(r=>({id:String(r?.id||"").trim(),sessionId:s,body:String(r?.body||""),anchor:r?.anchor??null,order:Number.isFinite(Number(r?.order))?Math.max(0,Math.floor(Number(r.order))):0,authorActorId:typeof r?.authorActorId=="string"&&r.authorActorId.trim().length>0?r.authorActorId.trim():null,createdAt:String(r?.createdAt||"").trim(),updatedAt:String(r?.updatedAt||r?.createdAt||"").trim(),deletedAt:typeof r?.deletedAt=="string"&&r.deletedAt.trim().length>0?r.deletedAt.trim():null})).filter(r=>r.id.length>0&&r.sessionId.length>0)})}function Py(t,n){if(typeof window>"u")return null;try{const s=`${of}.${t}`,r=window.localStorage.getItem(s);if(!r)return null;const o=JSON.parse(r);if(!o||o.v!==2&&o.v!==3&&o.v!==4&&o.v!==5&&o.v!==6&&o.v!==7)return null;const d=Date.parse(String(o.savedAt||""));if(!Number.isFinite(d)||Date.now()-d>xy)return null;const l=typeof o.taxonomyStateFingerprint=="string"?o.taxonomyStateFingerprint:"";return{taskWatermarks:!n||!l||l===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:[])}}catch{return null}}function Jp(t,n){if(!(typeof window>"u"))try{const s=`${of}.${t}`;window.localStorage.setItem(s,JSON.stringify({v:7,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()),taxonomyStateFingerprint:typeof n.taxonomyStateFingerprint=="string"?n.taxonomyStateFingerprint:""}))}catch{}}const Xp={documents:!1,aiProfiles:!1,assets:!1,documentReviewSessions:!1,annotatedAttachmentSessions:!1};function Ey(t){const{currentWorkspaceId:n,cloudAuthConfigured:s,runtimeMode:r,authSessionResolved:o,isAuthenticated:d,authUserId:l,projectName:p,resolveCloudAuthUrl:g,resolveWebSocketUrl:_,realtimeSyncEnabled:w,tasks:A,archivedTasks:y,initiatives:k,workstreams:b,taxonomies:L,taxonomyState:S,setupState:$,globalTheme:J,locale:U,globalWeekStartsOn:X,themeUseGlobalDefault:q,setTasks:ee,setArchivedTasks:W,setAuthBlocked:Re,setIsAuthenticated:V,checkAuthSession:te,setGlobalTheme:xe,setCurrentTheme:de,setSetupState:O,setLocale:R,setGlobalWeekStartsOn:z,fetchPlanningEntities:re}=t,be=a.useMemo(()=>jy(S),[S]),[We,Ce]=a.useState("disconnected"),[Ve,Fe]=a.useState(null),[ve,Oe]=a.useState(null),[v,M]=a.useState(null),[C,oe]=a.useState(null),[D,f]=a.useState(null),[x,P]=a.useState(!1),[B,Ae]=a.useState("idle"),[F,ne]=a.useState(!1),[ae,ie]=a.useState(0),[Z,H]=a.useState([]),[ue,Pe]=a.useState(""),se=a.useRef(A||[]),$e=a.useRef(y||[]),et=a.useRef(k||[]),tt=a.useRef(b||[]),Ct=a.useRef([]),[i,De]=a.useState([]),[Je,Ie]=a.useState(""),[ht,yt]=a.useState(null),[$t,Ht]=a.useState(null),[bn,nn]=a.useState(0),[Kt,_n]=a.useState(null),qt=a.useRef([]),[Hn,on]=a.useState([]),[Nn,Nt]=a.useState(""),Yt=a.useRef([]),[Bn,an]=a.useState([]),[me,Ee]=a.useState(""),Zt=a.useRef([]),Lt=a.useRef([]),[Rn,xt]=a.useState([]),[G,ke]=a.useState(""),je=a.useRef([]),[Te,Se]=a.useState(Xp),[Qe,pt]=a.useState("degraded-fallback"),[Mt,Rt]=a.useState({accepted:0,duplicateDiscarded:0,outOfOrderDiscarded:0,invalidDiscarded:0,recoveryTriggered:0}),At=a.useRef(!1),Ut=a.useRef(null),nt=a.useRef(0),Tt=a.useRef(!1),kt=a.useRef(new Set),Dn=a.useRef(""),Cn=a.useRef(""),ua=a.useRef(""),mt=a.useRef(""),Ze=a.useRef(""),Wn=a.useRef(""),Y=a.useRef(!1),ze=a.useRef(null),Ne=a.useRef(new Set),st=a.useRef([]),Le=a.useRef(()=>Promise.resolve(!1)),Xe=a.useRef(async()=>{}),xn=a.useRef(null),ft=a.useRef(null),Gn=a.useRef("idle"),Vn=a.useCallback(()=>{Ut.current!==null&&(window.clearTimeout(Ut.current),Ut.current=null)},[]),pa=a.useCallback(j=>{if(typeof window>"u")return;Vn();const le=Math.max(1,Math.floor(nt.current)+1);nt.current=le;const He=1500*2**Math.max(0,le-1),_e=Number.isFinite(Number(j))?Math.max(0,Math.floor(Number(j))):0,K=Math.max(Math.min(12e4,He),_e);Ut.current=window.setTimeout(()=>{Ut.current=null,Xe.current({preferCloudOnFirstSync:!1})},K)},[Vn]);a.useEffect(()=>{Cn.current="",ua.current="",mt.current="",Ze.current="",Wn.current="",en.current="",ma.current=!1,H([]),Pe(""),qt.current=[],De([]),Ie(""),on([]),Nt(""),Zt.current=[],Lt.current=[],an([]),Ee(""),je.current=[],xt([]),ke(""),Se(Xp),f(null),oe(null),ie(0),Ne.current=new Set,st.current=[],zt.current=new Map,In.current=new Set,Xt.current=new Map,On.current=new Set,hn.current=new Map,Zn.current=new Set,Qt.current=new Map,dn.current=new Set,rt.current=new Map,Oa.current=new Set,aa.current=new Map,$a.current=new Set,qn.current=new Map,gs.current=new Set,wa.current=new Map,sa.current=new Set,ba.current=new Map,sa.current=new Set,ba.current=new Map;const j=Py(n,be);j&&(zt.current=j.taskWatermarks,Xt.current=j.initiativeWatermarks,hn.current=j.workstreamWatermarks,rt.current=j.documentWatermarks,aa.current=j.assetWatermarks,qn.current=j.documentReviewSessionWatermarks,wa.current=j.documentReviewCommentWatermarks,ba.current=j.annotatedAttachmentSessionWatermarks)},[n,be]);const An=a.useCallback(j=>{Se(le=>le[j]?le:{...le,[j]:!0})},[]),va=Object.values(Te).every(Boolean),{workspaceRetryAt:ln,isWorkspaceRetryPending:gt,workspacePushInFlightRef:Dt,workspacePullInFlightRef:Pt,workspaceLastPushedSignatureRef:Bt,workspacePendingSignatureRef:Ye,workspaceLastPushedTaskIdsRef:Ke,workspaceDeletedTaskIdsRef:Un,workspacePullCursorRef:Tn,clearWorkspaceRetry:sn,scheduleWorkspaceRetry:yn,persistWorkspaceSyncPatch:Wt,loadWorkspaceSyncState:Ds,applyWorkspaceSyncStateSnapshot:hs,saveWorkspaceCloudSyncSettings:Fn,acquireWorkspaceSyncLease:Jt,releaseWorkspaceSyncLease:kn,forceClearWorkspaceSyncLease:na}=vy({currentWorkspaceId:n,setWorkspaceCloudSyncEnabled:P,setWorkspaceSyncPhase:Ae,setWorkspaceLastPullAt:Oe,setWorkspaceLastPushAt:M,setWorkspaceLastErrorMessage:f}),zt=a.useRef(new Map),In=a.useRef(new Set),Xt=a.useRef(new Map),On=a.useRef(new Set),hn=a.useRef(new Map),Zn=a.useRef(new Set),Qt=a.useRef(new Map),dn=a.useRef(new Set),rt=a.useRef(new Map),Oa=a.useRef(new Set),aa=a.useRef(new Map),$a=a.useRef(new Set),qn=a.useRef(new Map),gs=a.useRef(new Set),wa=a.useRef(new Map),sa=a.useRef(new Set),ba=a.useRef(new Map),ja=a.useRef(!1),Mn=a.useRef(!1),en=a.useRef(""),ma=a.useRef(!1),fa=3e4,Ja=w?3e4:15e3,Na=a.useMemo(()=>{const j=ve?Date.parse(ve):NaN,le=v?Date.parse(v):NaN;return Number.isFinite(j)&&Number.isFinite(le)?j>=le?ve:v:Number.isFinite(j)?ve:Number.isFinite(le)?v:null},[ve,v]),ys=a.useMemo(()=>x?F||B==="provision-local"||B==="attach-cloud"?"syncing":ln||D||B==="error"?"attention":"healthy":"off",[x,F,B,ln,D]),nr=a.useMemo(()=>Ny(x,B,F,ln,D),[x,B,F,ln,D]),Ra=a.useMemo(()=>Ry(x,B,ln,D),[x,B,ln,D]),eo=a.useCallback(j=>{const le=String(j||"").trim();if(!le)return null;const _e=Yp()[le]?.updatedAt;return typeof _e=="string"&&_e.trim().length>0?_e.trim():null},[]),Q=a.useCallback((j,le)=>{const He=String(j||"").trim(),_e=String(le||"").trim();if(!He||!_e)return;const K=Yp();K[He]={updatedAt:_e},Iy(K)},[]),ot=a.useCallback(()=>{const j=$?.mode==="operations"?"operations":"core";return{theme:J,operatingMode:j,localization:{locale:U,weekStartsOn:X}}},[J,$?.mode,U,X]),rn=a.useCallback(async j=>{if(!(!j||typeof j!="object")){Tt.current=!0;try{const le={},He=wc(j.theme);if(He&&(xe(He),q&&de(He),le.theme=He),(j.operatingMode==="core"||j.operatingMode==="operations")&&(O(_e=>_e&&{..._e,mode:j.operatingMode}),le.setup={mode:j.operatingMode}),j.localization&&typeof j.localization=="object"){const _e={};if(typeof j.localization.locale=="string"&&j.localization.locale.trim().length>0){const Me=Gm(j.localization.locale.trim());R(Me)}const K=String(j.localization.weekStartsOn||"").trim().toLowerCase();(K==="sunday"||K==="monday")&&(z(K),_e.weekStartsOn=K),Object.keys(_e).length>0&&(le.schedulePreferences=_e)}Object.keys(le).length>0&&await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify(le)})}finally{Tt.current=!1}}},[q,xe,de,O,R,z]),wt=a.useCallback(async j=>{const le=j?.preferCloudOnFirstSync!==!1;if(!s)return;if(r!=="local"||!d){Vn(),nt.current=0,Ce("disconnected");return}const He=String(l||"").trim();if(!He||He==="anonymous"){Vn(),nt.current=0,Ce("disconnected");return}if(!At.current){Ce("syncing"),Fe(null),At.current=!0;try{const _e=await ay({resolveCloudAuthUrl:g,userId:He,preferCloudOnFirstSync:le,getLocalUpdatedAt:eo,buildLocalSettings:ot,applyRemoteSettings:rn});if(!_e.success){Ce("error"),_e.transient?(Fe(_e.error||"Sync failed temporarily. Retrying automatically."),pa(_e.retryAfterMs)):(Vn(),nt.current=0,Fe(_e.error||"Sync failed."));return}Vn(),nt.current=0;const K=String(_e.updatedAt||"").trim()||new Date().toISOString();Q(He,K),Ce("idle"),Fe(null),kt.current.add(He),_e.mode==="pulled"&&(Dn.current="")}catch{Ce("error"),Fe("Sync failed temporarily. Retrying automatically."),pa()}finally{At.current=!1}}},[s,r,d,l,g,eo,ot,rn,Q,Vn,pa]);a.useEffect(()=>{Xe.current=wt},[wt]),a.useEffect(()=>()=>{Vn()},[Vn]);const Sn=a.useCallback(()=>{f(null),oe(null)},[]),ct=a.useCallback(j=>{f(Kp),oe(new Date().toISOString()),Ce("error"),Fe(Kp),ms("workspace_sync_window_contention",{workspaceId:n,operation:j})},[n]),jn=a.useCallback(j=>{Wt(j).catch(()=>{})},[Wt]),ea=a.useCallback(j=>{yn(()=>Le.current(),{minDelayMs:j})},[yn]);a.useEffect(()=>{if(B==="attach-cloud"||B==="provision-local"){Gn.current=B,xn.current===null&&(xn.current=Date.now()),ft.current=null;return}xn.current=null,ft.current=null},[B]),a.useEffect(()=>{if(!x||B!=="attach-cloud"&&B!=="provision-local")return;const j=window.setInterval(()=>{if(B!=="attach-cloud"&&B!=="provision-local"||Pt.current||Dt.current)return;const le=Math.max(xn.current??0,ft.current??0);if(le>0&&Date.now()-le<Cy)return;const _e=`Workspace sync ${B==="attach-cloud"?"initial cloud pull":"initial cloud upload"} stalled. Press Repair to restart sync for this workspace.`;f(_e),oe(new Date().toISOString()),Ce("error"),Fe(_e),ne(!1),jn({phase:"error",lastErrorMessage:_e}),ms("workspace_sync_bootstrap_timeout",{workspaceId:n,phase:B})},1e4);return()=>window.clearInterval(j)},[n,x,B,jn,Pt,Dt]);const ha=a.useCallback(async()=>Qg({cloudAuthConfigured:s,runtimeMode:r,isAuthenticated:d,resolveCloudAuthUrl:g,workspaceId:n,workspaceName:p||n}),[s,r,d,g,n,p]);a.useEffect(()=>{se.current=A||[]},[A]),a.useEffect(()=>{$e.current=y||[]},[y]),a.useEffect(()=>{et.current=k||[]},[k]),a.useEffect(()=>{tt.current=b||[]},[b]);const ra=a.useRef(!1),ks=a.useCallback(j=>{const le=j?.forceAllAiProfiles===!0;return ly({tasks:se.current,archivedTasks:$e.current,lastPushedTaskIds:Ke.current,pendingDeletedTaskIds:Un.current,initiatives:et.current,workstreams:tt.current,taxonomies:L||[],taxonomyState:S,lastPushedInitiativeIds:In.current,lastPushedInitiativeWatermarks:Xt.current,lastPushedWorkstreamIds:On.current,lastPushedWorkstreamWatermarks:hn.current,aiProfiles:qt.current,lastPushedAiProfileIds:le?new Set:Zn.current,lastPushedAiProfileWatermarks:le?new Map:Qt.current,documents:Ct.current,assets:Yt.current,documentReviewSessions:Zt.current,documentReviewComments:Lt.current,annotatedAttachmentSessions:je.current,lastPushedDocumentPaths:dn.current,lastPushedDocumentWatermarks:rt.current,lastPushedAssetPaths:Oa.current,lastPushedAssetWatermarks:aa.current,lastPushedDocumentReviewSessionIds:$a.current,lastPushedDocumentReviewSessionWatermarks:qn.current,lastPushedDocumentReviewCommentIds:gs.current,lastPushedDocumentReviewCommentWatermarks:wa.current,lastPushedAnnotatedAttachmentSessionIds:sa.current,lastPushedAnnotatedAttachmentSessionWatermarks:ba.current,lastPushedWatermarks:zt.current})},[L,S]),$n=a.useCallback((j,le)=>{r==="local"&&fetch("/api/taskforce/sync/events",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({...le,workspaceId:j})}).catch(He=>{ms("sync_event_post_failed",{workspaceId:j,eventType:le.eventType,status:le.status,error:String(He?.message||He||"")})})},[r]),Da=a.useCallback(()=>dy({workspaceId:n,tasks:se.current,archivedTasks:$e.current,pendingDeletedTaskIds:Un.current,initiatives:et.current,workstreams:tt.current,taxonomies:L||[],aiProfiles:qt.current,documents:Ct.current,assets:Yt.current,documentReviewSessions:Zt.current,documentReviewComments:Lt.current,annotatedAttachmentSessions:je.current}),[n,L]),as=a.useMemo(()=>{const j=[];for(const le of A||[]){const He=Array.isArray(le.attachments)?le.attachments.length:0;He>0&&j.push(`${le.id}:${He}`)}return j.join("|")},[A]),Xa=a.useCallback(j=>{if(!j)return!1;if(ma.current)return ma.current=!1,en.current=j,Bt.current=j,ie(0),!0;const le=en.current;return le?j===le?(Bt.current=j,ie(0),!0):(en.current="",!1):!1},[]),oa=a.useCallback(async()=>{if(r==="local"&&No(n)&&!(s&&(!o||!d)))try{const j=await fetch(`/api/taskforce/sync/workspace/documents?workspaceId=${encodeURIComponent(n)}`,{method:"GET",credentials:"include"});if(!j.ok)return;const le=await j.json().catch(()=>({})),He=Array.isArray(le?.documents)?le.documents.map(K=>({path:String(K?.path||"").trim(),updatedAt:String(K?.updatedAt||"").trim(),content:typeof K?.content=="string"?K.content:"",assetId:typeof K?.assetId=="string"&&K.assetId.trim().length>0?K.assetId.trim():void 0,documentId:typeof K?.documentId=="string"&&K.documentId.trim().length>0?K.documentId.trim():null,referenceNumber:Number.isFinite(Number(K?.referenceNumber))?Math.max(1,Math.floor(Number(K.referenceNumber))):null,version:Number.isFinite(Number(K?.version))?Math.max(1,Math.floor(Number(K.version))):null,taskId:typeof K?.taskId=="string"&&K.taskId.trim().length>0?K.taskId.trim():null,logicalName:typeof K?.logicalName=="string"&&K.logicalName.trim().length>0?K.logicalName.trim():null,caption:typeof K?.caption=="string"&&K.caption.trim().length>0?K.caption.trim():null,originalFilename:typeof K?.originalFilename=="string"&&K.originalFilename.trim().length>0?K.originalFilename.trim():null,linkRole:K?.linkRole==="reference"?"reference":"attachment"})).filter(K=>K.path.length>0):[],_e=typeof le?.fingerprint=="string"?le.fingerprint:JSON.stringify(He.map(K=>`${K.path}:${K.updatedAt}:${K.content.length}`).sort());if(_e===Cn.current)return;Cn.current=_e,Ct.current=He,H(He),Pe(_e)}catch(j){ms("documents_snapshot_refresh_failed",{workspaceId:n,error:String(j?.message||j||"")})}finally{An("documents")}},[r,n,s,o,d,An]),Ua=a.useCallback(async()=>{if(r!=="local"){_n("runtime-not-local");return}if(!No(n)){_n("workspace-id-invalid");return}if(s&&(!o||!d)){_n(o?"auth-required":"auth-unresolved");return}_n(null);try{const j=await fetch(`/api/taskforce/sync/workspace/ai-profiles?workspaceId=${encodeURIComponent(n)}`,{method:"GET",credentials:"include"});if(!j.ok){Ht(`HTTP ${j.status}`),yt(new Date().toISOString());return}const le=await j.json().catch(()=>({})),He=Array.isArray(le?.aiProfiles)?le.aiProfiles:[];nn(He.length);const _e=Array.isArray(le?.aiProfiles)?le.aiProfiles.map(Me=>Ty(Me)).filter(Me=>Me.id.length>0&&Me.workspaceId.length>0):[];Ht(null),yt(new Date().toISOString());const K=typeof le?.fingerprint=="string"?le.fingerprint:JSON.stringify(_e.map(Me=>`${Me.id}:${Me.updatedAt}:${Me.name}:${Me.username}`).sort());if(K===ua.current)return;ua.current=K,qt.current=_e,De(_e),Ie(K)}catch(j){Ht(String(j?.message||j||"unknown-error")),yt(new Date().toISOString()),ms("ai_profiles_snapshot_refresh_failed",{workspaceId:n,error:String(j?.message||j||"")})}finally{An("aiProfiles")}},[r,n,s,o,d,An]),Qa=a.useCallback(async()=>{if(r==="local"&&No(n)&&!(s&&(!o||!d)))try{const j=await fetch(`/api/taskforce/sync/workspace/assets?workspaceId=${encodeURIComponent(n)}`,{method:"GET",credentials:"include"});if(!j.ok)return;const le=await j.json().catch(()=>({})),He=Array.isArray(le?.assets)?le.assets.map(K=>({path:String(K?.path||"").trim(),updatedAt:String(K?.updatedAt||"").trim(),contentBase64:typeof K?.contentBase64=="string"?K.contentBase64:"",assetId:typeof K?.assetId=="string"&&K.assetId.trim().length>0?K.assetId.trim():void 0,kind:K?.kind==="image"?"image":"file",mimeType:typeof K?.mimeType=="string"&&K.mimeType.trim().length>0?K.mimeType.trim():"application/octet-stream",referenceNumber:Number.isFinite(Number(K?.referenceNumber))?Math.max(1,Math.floor(Number(K.referenceNumber))):null,taskId:typeof K?.taskId=="string"&&K.taskId.trim().length>0?K.taskId.trim():null,logicalName:typeof K?.logicalName=="string"&&K.logicalName.trim().length>0?K.logicalName.trim():null,caption:typeof K?.caption=="string"&&K.caption.trim().length>0?K.caption.trim():null,originalFilename:typeof K?.originalFilename=="string"&&K.originalFilename.trim().length>0?K.originalFilename.trim():null,linkRole:K?.linkRole==="reference"?"reference":K?.linkRole==="image"?"image":"attachment"})).filter(K=>K.path.length>0&&K.contentBase64.length>0):[],_e=typeof le?.fingerprint=="string"?le.fingerprint:JSON.stringify(He.map(K=>`${K.path}:${K.updatedAt}:${K.contentBase64.length}`).sort());if(_e===mt.current)return;mt.current=_e,Yt.current=He,on(He),Nt(_e)}catch(j){ms("assets_snapshot_refresh_failed",{workspaceId:n,error:String(j?.message||j||"")})}finally{An("assets")}},[r,n,s,o,d,An]),Ca=a.useCallback(async()=>{if(r==="local"&&No(n)&&!(s&&(!o||!d)))try{const j=await fetch(`/api/taskforce/sync/workspace/document-reviews?workspaceId=${encodeURIComponent(n)}`,{method:"GET",credentials:"include"});if(!j.ok)return;const le=await j.json().catch(()=>({})),He=Array.isArray(le?.sessions)?le.sessions.map(Me=>({id:String(Me?.id||"").trim(),assetId:String(Me?.assetId||"").trim(),documentId:typeof Me?.documentId=="string"&&Me.documentId.trim().length>0?Me.documentId.trim():null,documentVersion:Number.isFinite(Number(Me?.documentVersion))?Math.max(1,Math.floor(Number(Me.documentVersion))):null,title:typeof Me?.title=="string"&&Me.title.trim().length>0?Me.title.trim():null,status:Me?.status==="resolved"?"resolved":"open",comments:Array.isArray(Me?.comments)?Me.comments:[],createdByActorId:typeof Me?.createdByActorId=="string"&&Me.createdByActorId.trim().length>0?Me.createdByActorId.trim():null,updatedByActorId:typeof Me?.updatedByActorId=="string"&&Me.updatedByActorId.trim().length>0?Me.updatedByActorId.trim():null,createdAt:String(Me?.createdAt||"").trim(),updatedAt:String(Me?.updatedAt||Me?.createdAt||"").trim(),deletedAt:typeof Me?.deletedAt=="string"&&Me.deletedAt.trim().length>0?Me.deletedAt.trim():null})).filter(Me=>Me.id.length>0&&Me.assetId.length>0):[],_e=Array.isArray(le?.comments)?le.comments.map(Me=>({id:String(Me?.id||"").trim(),sessionId:String(Me?.sessionId||"").trim(),body:typeof Me?.body=="string"?Me.body:"",anchor:Me?.anchor??null,order:Number.isFinite(Number(Me?.order))?Math.max(0,Math.floor(Number(Me.order))):0,authorActorId:typeof Me?.authorActorId=="string"&&Me.authorActorId.trim().length>0?Me.authorActorId.trim():null,createdAt:String(Me?.createdAt||"").trim(),updatedAt:String(Me?.updatedAt||Me?.createdAt||"").trim(),deletedAt:typeof Me?.deletedAt=="string"&&Me.deletedAt.trim().length>0?Me.deletedAt.trim():null})).filter(Me=>Me.id.length>0&&Me.sessionId.length>0):Dy(He),K=typeof le?.fingerprint=="string"?le.fingerprint:JSON.stringify([...He.map(Me=>`${Me.id}:${Me.updatedAt}:${Me.status}:${Me.deletedAt||""}:${Me.comments.length}`).sort(),..._e.map(Me=>`${Me.id}:${Me.sessionId}:${Me.updatedAt}:${Me.deletedAt||""}`).sort()]);if(K===Ze.current)return;Ze.current=K,Zt.current=He,Lt.current=_e,an(He),Ee(K)}catch(j){ms("document_review_sessions_snapshot_refresh_failed",{workspaceId:n,error:String(j?.message||j||"")})}finally{An("documentReviewSessions")}},[r,n,s,o,d,An]),ss=a.useCallback(async()=>{if(r==="local"&&No(n)&&!(s&&(!o||!d)))try{const j=await fetch(`/api/taskforce/sync/workspace/annotated-attachments?workspaceId=${encodeURIComponent(n)}`,{method:"GET",credentials:"include"});if(!j.ok)return;const le=await j.json().catch(()=>({})),He=Array.isArray(le?.sessions)?le.sessions.map(K=>({id:String(K?.id||"").trim(),workspaceId:String(K?.workspaceId||"").trim(),taskId:String(K?.taskId||"").trim(),baseImageAssetId:String(K?.baseImageAssetId||"").trim(),title:typeof K?.title=="string"&&K.title.trim().length>0?K.title.trim():null,globalInstruction:typeof K?.globalInstruction=="string"&&K.globalInstruction.trim().length>0?K.globalInstruction.trim():null,annotations:Array.isArray(K?.annotations)?K.annotations:[],createdByActorId:typeof K?.createdByActorId=="string"&&K.createdByActorId.trim().length>0?K.createdByActorId.trim():null,updatedByActorId:typeof K?.updatedByActorId=="string"&&K.updatedByActorId.trim().length>0?K.updatedByActorId.trim():null,createdAt:String(K?.createdAt||"").trim(),updatedAt:String(K?.updatedAt||K?.createdAt||"").trim(),deletedAt:typeof K?.deletedAt=="string"&&K.deletedAt.trim().length>0?K.deletedAt.trim():null})).filter(K=>K.id.length>0&&K.workspaceId.length>0&&K.taskId.length>0&&K.baseImageAssetId.length>0):[],_e=typeof le?.fingerprint=="string"?le.fingerprint:JSON.stringify(He.map(K=>`${K.id}:${K.updatedAt}:${K.taskId}:${K.baseImageAssetId}:${K.annotations.length}:${K.deletedAt||""}`).sort());if(_e===Wn.current)return;Wn.current=_e,je.current=He,xt(He),ke(_e)}catch(j){ms("annotated_attachment_sessions_snapshot_refresh_failed",{workspaceId:n,error:String(j?.message||j||"")})}finally{An("annotatedAttachmentSessions")}},[r,n,s,o,d,An]),Ps=a.useCallback(()=>{dn.current=new Set(Ct.current.map(j=>String(j?.path||"").trim()).filter(j=>j.length>0)),rt.current=new Map(Ct.current.map(j=>[String(j?.path||"").trim(),String(j?.updatedAt||"").trim()]).filter(([j])=>j.length>0)),Oa.current=new Set(Yt.current.map(j=>String(j?.path||"").trim()).filter(j=>j.length>0)),aa.current=new Map(Yt.current.map(j=>[String(j?.path||"").trim(),String(j?.updatedAt||"").trim()]).filter(([j])=>j.length>0)),$a.current=new Set(Zt.current.map(j=>String(j?.id||"").trim()).filter(j=>j.length>0)),qn.current=new Map(Zt.current.map(j=>[String(j?.id||"").trim(),String(j?.updatedAt||j?.createdAt||"").trim()]).filter(([j])=>j.length>0)),gs.current=new Set(Lt.current.map(j=>String(j?.id||"").trim()).filter(j=>j.length>0)),wa.current=new Map(Lt.current.map(j=>[String(j?.id||"").trim(),String(j?.updatedAt||j?.createdAt||"").trim()]).filter(([j])=>j.length>0)),sa.current=new Set(je.current.map(j=>String(j?.id||"").trim()).filter(j=>j.length>0)),ba.current=new Map(je.current.map(j=>[String(j?.id||"").trim(),String(j?.updatedAt||j?.createdAt||"").trim()]).filter(([j])=>j.length>0))},[]),ar=a.useCallback(async()=>{const[j,le]=await Promise.all([fetch("/api/taskforce/tasks",{method:"GET",credentials:"include"}),fetch("/api/taskforce/archive",{method:"GET",credentials:"include"})]);if(j.ok){const He=await j.json().catch(()=>({})),_e=Array.isArray(He?.tasks)?He.tasks.map(K=>Qr(K)):[];ee(_e)}if(le.ok){const He=await le.json().catch(()=>({})),_e=Array.isArray(He?.archived)?He.archived.map(K=>({...Qr(K),isArchived:!0})):[];W(_e)}await re().catch(()=>{ms("refresh_planning_entities_failed",{workspaceId:n})})},[n,re,W,ee]),rs=a.useCallback(async(j,le)=>{sn(),ne(!1),Ce("error");const He="Session expired. Sign in again to resume cloud sync.";Fe(He),f(He),oe(new Date().toISOString()),$n(n,{eventType:j==="handshake"?"handshake":j,status:"error",statusCode:le,errorMessage:He}),Re(!0),V(!1),await te()},[sn,$n,n,Re,V,te]),sr=a.useCallback(async()=>{if(!No(n)){const He="Workspace sync blocked: local workspace ID is unresolved.";return f(He),oe(new Date().toISOString()),Fe(He),Ce("error"),!1}const j=await ha();if(j.success)return!0;if(j.statusCode===401)return await rs("handshake",401),!1;const le=j.error||"Workspace sync handshake failed.";return f(le),oe(new Date().toISOString()),Fe(le),Ce("error"),$n(n,{eventType:"handshake",status:"error",statusCode:j.statusCode,errorMessage:le}),j.transient||Jr(j.statusCode)?ea(j.retryAfterMs):B==="active"&&jn({phase:"error",lastErrorMessage:le}),!1},[n,ha,rs,$n,ea,B,jn]),ia=a.useCallback(async(j,le)=>{if(!s||r!=="local"||!x||!No(n))return!1;if(Mn.current===!0&&le?.repairMode!==!0||B==="attach-cloud")return Ye.current=j,!1;if(!d&&!await te()||Xa(j))return!1;if(Dt.current||Pt.current)return Ye.current=j,!1;if(!await Jt(n,"push"))return Ye.current=j,ct("push"),!1;Dt.current=!0,ne(!0),Ce("syncing"),Fe(null);const _e=Date.now(),K=le?.forceAllAiProfiles===!0||ra.current===!0;try{if(await oa(),await Ua(),await Qa(),await Ca(),!await sr())return!1;const bt=ks({forceAllAiProfiles:K});ie(bt.changes.length);const St=await ty({resolveCloudAuthUrl:g,workspaceId:n,payload:bt,ensureCloudWorkspaceReadyForSync:ha,repairMode:le?.repairMode===!0||Mn.current===!0});if(!St.success){if(St.status===401)return await rs("push",401),!1;let Pn=St.error?`Workspace sync push failed (${St.status||0}): ${St.error}`:`Workspace sync push failed (${St.status||0})`;return St.status===413&&(Pn="Workspace sync failed because the payload is too large. This usually happens when one or more attachments exceed the project limit."),Ce("error"),Fe(Pn),f(Pn),oe(new Date().toISOString()),$n(n,{eventType:"push",status:"error",statusCode:St.status,errorMessage:Pn,requestMs:St.requestMs}),Ye.current=j,St.transient||Jr(St.status)?ea(St.retryAfterMs):B==="active"&&jn({phase:"error",lastErrorMessage:Pn}),!1}Bt.current=j,Ke.current=St.currentTaskIds,In.current=new Set(St.currentInitiativeIds),Xt.current=new Map(St.currentInitiativeWatermarks),On.current=new Set(St.currentWorkstreamIds),hn.current=new Map(St.currentWorkstreamWatermarks),Zn.current=new Set(St.currentAiProfileIds),Qt.current=new Map(St.currentAiProfileWatermarks),dn.current=new Set(St.currentDocumentPaths),rt.current=new Map(St.currentDocumentWatermarks),Oa.current=new Set(St.currentAssetPaths),aa.current=new Map(St.currentAssetWatermarks),$a.current=new Set(St.currentDocumentReviewSessionIds),qn.current=new Map(St.currentDocumentReviewSessionWatermarks),gs.current=new Set(St.currentDocumentReviewCommentIds),wa.current=new Map(St.currentDocumentReviewCommentWatermarks),sa.current=new Set(St.currentAnnotatedAttachmentSessionIds),ba.current=new Map(St.currentAnnotatedAttachmentSessionWatermarks),K&&(ra.current=!1);for(const[Pn,gn]of St.pushedWatermarks)zt.current.set(Pn,gn);if(St.deleteTaskIds.size>0)for(const Pn of St.deleteTaskIds)Un.current.delete(Pn),zt.current.delete(Pn);if(Jp(n,{taskWatermarks:zt.current,initiativeWatermarks:Xt.current,workstreamWatermarks:hn.current,documentWatermarks:rt.current,assetWatermarks:aa.current,documentReviewSessionWatermarks:qn.current,documentReviewCommentWatermarks:wa.current,annotatedAttachmentSessionWatermarks:ba.current,taxonomyStateFingerprint:be}),Array.isArray(St.emittedEventIds)&&St.emittedEventIds.length>0){for(const Pn of St.emittedEventIds){const gn=String(Pn||"").trim();!gn||Ne.current.has(gn)||(Ne.current.add(gn),st.current.push(gn))}for(;st.current.length>2048;){const Pn=st.current.shift();Pn&&Ne.current.delete(Pn)}}sn(),Sn();const os=St.syncedAt||new Date().toISOString();return M(os),ie(0),Ce("idle"),jn({phase:"active",lastPushAt:os,lastSyncedAt:os,lastErrorMessage:null}),$n(n,{eventType:B==="provision-local"?"bootstrap":"push",status:"success",changeCount:St.changeCount,requestMs:St.requestMs}),!0}catch(Me){const bt="Workspace sync push failed.";return Ce("error"),Fe(bt),f(bt),oe(new Date().toISOString()),Ye.current=j,ea(),$n(n,{eventType:"push",status:"error",errorMessage:`${bt} ${String(Me?.message||"").trim()}`.trim()}),ms("push_failed_exception",{workspaceId:n,elapsedMs:Date.now()-_e}),!1}finally{Dt.current=!1,ne(Pt.current),kn(n);const Me=Ye.current;Me&&Me!==Bt.current&&!Pt.current&&(Ye.current="",window.setTimeout(()=>{ia(Me)},120))}},[s,r,x,n,B,d,te,Sn,oa,Ua,Qa,Ca,sr,ks,g,ha,Xa,rs,sn,Wt,$n,ea,Jt,kn,ct,Dt,Pt,jn]),xa=a.useCallback(async j=>{if(!s||r!=="local"||!x||!No(n)||Mn.current===!0&&j?.repairMode!==!0||B==="provision-local"||gt()||!d&&!await te()||Pt.current||Dt.current)return!1;if(!await Jt(n,"pull"))return ct("pull"),!1;Pt.current=!0,ne(!0),Ce("syncing"),Fe(null);const He=Date.now();try{if(!await sr())return!1;const K=B==="attach-cloud",Me=K?null:Tn.current,bt=await ny({resolveCloudAuthUrl:g,workspaceId:n,cursor:Me,bootstrap:K,ensureCloudWorkspaceReadyForSync:ha,maxPages:20,repairMode:j?.repairMode===!0||Mn.current===!0,onPagePulled:()=>{ft.current=Date.now()},onChangesApplied:()=>{ft.current=Date.now()}});if(!bt.success){if(bt.kind==="pull_http"&&bt.status===401)return await rs("pull",401),!1;if(bt.kind==="apply_auth")return await rs("apply",401),!1;let gn=bt.kind==="apply_payload"||bt.kind==="apply_all_candidates"||bt.kind==="exception"?String(bt.error||"Workspace sync apply failed."):`Workspace sync pull failed (${bt.status||0})`;return bt.status===413&&(gn="Local sync failed because the downloaded payload is too large. This usually happens when the workspace contains massive attachments."),Ce("error"),Fe(gn),f(gn),oe(new Date().toISOString()),$n(n,{eventType:bt.kind?.startsWith("apply")?"apply":"pull",status:"error",statusCode:bt.status,errorMessage:gn,requestMs:bt.pullRequestMs}),bt.transient||bt.hasTransientApplyFailure||Jr(bt.status)?ea(bt.retryAfterMs):jn({phase:"error",lastErrorMessage:gn}),!1}if(Array.isArray(bt.emittedEventIds))for(const gn of bt.emittedEventIds)gn&&(Ne.current.add(gn),setTimeout(()=>{Ne.current.delete(gn)},6e4));bt.pulledDeleteTaskIds.size>0&&(ee(gn=>gn.filter(Us=>!bt.pulledDeleteTaskIds.has(String(Us.id||"")))),W(gn=>gn.filter(Us=>!bt.pulledDeleteTaskIds.has(String(Us.id||"")))));const St=Array.isArray(bt.documentDecryptFailures)?bt.documentDecryptFailures.filter(gn=>String(gn||"").trim().length>0):[];if(St.length>0&&ms("pull_document_decrypt_failures",{workspaceId:n,failureCount:St.length}),Tn.current=bt.cursor||null,bt.appliedChanges>0&&(bt.pulledActiveUpserts||bt.pulledArchivedUpserts))try{await ar()}catch{ms("pull_local_refresh_failed",{workspaceId:n,appliedChanges:bt.appliedChanges})}sn(),Sn();const os=bt.syncedAt||new Date().toISOString();if(Oe(os),ie(0),Ce("idle"),B==="attach-cloud"&&(ma.current=!0,Ye.current=""),await Wt({phase:"active",pullCursor:Tn.current,lastPullAt:os,lastSyncedAt:os,lastErrorMessage:null}),$n(n,{eventType:B==="attach-cloud"?"bootstrap":"pull",status:"success",changeCount:bt.appliedChanges,requestMs:bt.pullRequestMs}),B==="attach-cloud")return await oa(),await Qa(),await Ca(),await ss(),Ps(),!0;const Pn=Ye.current||Da();return Pn&&Pn!==Bt.current&&(Ye.current="",window.setTimeout(()=>{ia(Pn)},120)),!0}catch(_e){const K=String(_e?.message||"").trim(),Me=K?`Workspace sync pull failed. ${K}`:"Workspace sync pull failed.";return Ce("error"),Fe(Me),f(Me),oe(new Date().toISOString()),ea(),$n(n,{eventType:"pull",status:"error",errorMessage:Me,requestMs:Date.now()-He}),ms("pull_failed_exception",{workspaceId:n,elapsedMs:Date.now()-He,error:K||null}),!1}finally{Pt.current=!1,ne(Dt.current),kn(n)}},[s,r,x,n,B,gt,d,te,Sn,sr,g,ha,rs,ar,oa,Qa,Ca,ss,sn,Wt,$n,Da,ia,Ps,ea,Jt,kn,ct,Dt,Pt,jn]),Es=a.useCallback(j=>{if(!s||r!=="local"||!x||B==="provision-local")return;const le=String(j?.eventId||"").trim();le&&Ne.current.delete(le)||gt()||Pt.current||(ze.current!==null&&window.clearTimeout(ze.current),ze.current=window.setTimeout(()=>{ze.current=null,xa()},180))},[s,r,x,B,gt,Pt,xa]),to=_("/taskforce-ws"),_r=String(l||"").trim(),Ft=sf({enabled:!!(w&&s&&r==="local"&&x&&o&&d&&_r&&_r!=="anonymous"&&to),workspaceId:n,websocketUrl:to,onSignal:Es,onTelemetry:Rt,userId:_r||void 0});a.useEffect(()=>{pt(Ft.connectionState)},[Ft.connectionState]),a.useEffect(()=>()=>{ze.current!==null&&(window.clearTimeout(ze.current),ze.current=null)},[]),a.useCallback(async()=>{const[j,le]=await Promise.all([fetch("/api/taskforce/tasks",{method:"GET",credentials:"include"}),fetch("/api/taskforce/archive",{method:"GET",credentials:"include"})]);if(!j.ok||!le.ok)return{tasks:[],archived:[],error:"Failed to read local workspace snapshot before sync bootstrap."};const He=await j.json().catch(()=>({})),_e=await le.json().catch(()=>({}));return{tasks:Array.isArray(He?.tasks)?He.tasks:[],archived:Array.isArray(_e?.archived)?_e.archived:[]}},[]);const za=a.useCallback(async j=>Fn(j,{cloudAuthConfigured:s,isAuthenticated:d,ensureCloudWorkspaceReadyForSync:ha}),[Fn,s,d,ha]),_a=a.useCallback(async()=>{await wt({preferCloudOnFirstSync:!1})},[wt]),Ss=a.useCallback(async()=>{if(sn(),!s||r!=="local"||!x||!d&&!await te())return!1;if(ra.current=!0,B==="provision-local"){const _e=Da();return _e?ia(_e,{forceAllAiProfiles:!0}):!1}const j=await xa();if(B==="attach-cloud")return j;const le=Da(),He=ra.current===!0;if(!He&&Xa(le))return j;if(le){Ye.current=le;const _e=await ia(le,{forceAllAiProfiles:He});return j||_e}return j},[sn,s,r,x,d,te,B,Da,Xa,ia,xa]),Po=a.useCallback(async()=>{if(!await Jt(n,"repair")&&(na(n),!await Jt(n,"repair"))){ct("repair");return}sn(),Sn(),xn.current=null,ft.current=null,Tn.current=null,en.current="",ma.current=!1,Ye.current="",Bt.current="",zt.current=new Map,In.current=new Set,Xt.current=new Map,On.current=new Set,hn.current=new Map,Zn.current=new Set,Qt.current=new Map,dn.current=new Set,rt.current=new Map,Oa.current=new Set,aa.current=new Map,$a.current=new Set,qn.current=new Map,gs.current=new Set,wa.current=new Map,ra.current=!1,ja.current=!1,Jp(n,{taskWatermarks:new Map,initiativeWatermarks:new Map,workstreamWatermarks:new Map,documentWatermarks:new Map,assetWatermarks:new Map,documentReviewSessionWatermarks:new Map,documentReviewCommentWatermarks:new Map,annotatedAttachmentSessionWatermarks:new Map,taxonomyStateFingerprint:be});try{if(!x)return;Mn.current=!0;const le=B==="provision-local"?"provision-local":B==="attach-cloud"?"attach-cloud":Gn.current==="provision-local"||Gn.current==="attach-cloud"?Gn.current:ve?"attach-cloud":"provision-local";if(await Wt({phase:le,pullCursor:null,lastErrorMessage:null}),le==="provision-local"){const He=Da();if(!He)return;await ia(He,{forceAllAiProfiles:!0,repairMode:!0});return}await xa({repairMode:!0})}finally{Mn.current=!1,kn(n)}},[Jt,sn,Sn,n,na,x,B,Wt,Da,ve,xa,ia,kn,ct]),Eo=a.useCallback(()=>({workspaceId:n,enabled:x,phase:B,status:ys,summary:nr,lastSuccessfulSyncAt:Na,lastPullAt:ve,lastPushAt:v,lastErrorAt:C,pendingChanges:ae,lastErrorMessage:D,recommendedAction:Ra,documentSnapshotCount:Z.length,aiProfileSnapshotCount:i.length,aiProfileSnapshotRawCount:bn,aiProfileSnapshotLastFetchAt:ht,aiProfileSnapshotLastFetchError:$t,aiProfileSnapshotLastSkipReason:Kt,assetSnapshotCount:Hn.length,documentReviewSessionSnapshotCount:Bn.length,documentReviewSessionSnapshotFingerprint:me,annotatedAttachmentSessionSnapshotCount:Rn.length,annotatedAttachmentSessionSnapshotFingerprint:G,lastPushedAiProfileCount:Zn.current.size,lastPushedAiProfileWatermarkCount:Qt.current.size,forceFullAiProfilePushQueued:ra.current===!0}),[n,x,B,ys,nr,Na,ve,v,C,ae,D,Ra,Z.length,i.length,bn,ht,$t,Kt,Hn.length,Bn.length,me,Rn.length,G]);return a.useEffect(()=>{Le.current=Ss},[Ss]),a.useEffect(()=>{if(!s||r!=="local"||!x||!o||!d)return;oa(),Ua(),Qa(),Ca(),ss();const j=bt=>{const St=bt.detail;(String(St?.workspaceId||"").trim()||"default")===n&&(oa(),Ua(),Qa(),Ca(),ss())};window.addEventListener(rp,j);const le=window.setInterval(()=>{oa()},fa),He=window.setInterval(()=>{Ua()},fa),_e=window.setInterval(()=>{Qa()},fa),K=window.setInterval(()=>{Ca()},fa),Me=window.setInterval(()=>{ss()},fa);return()=>{window.removeEventListener(rp,j),window.clearInterval(le),window.clearInterval(He),window.clearInterval(_e),window.clearInterval(K),window.clearInterval(Me)}},[s,r,x,o,d,n,oa,Ua,Qa,Ca,ss,fa]),a.useEffect(()=>{!s||r!=="local"||!x||!o||!d||as&&(Qa(),oa(),Ua(),Ca(),ss())},[s,r,x,o,d,as,Qa,oa,Ua,Ca,ss]),a.useEffect(()=>{if(!s||r!=="local"||!x||!o||B==="attach-cloud"||!va)return;const j=Da();if(Xa(j)||!j||j===Bt.current)return;const le=ks();if(ie(le.changes.length),Dt.current||Pt.current){Ye.current=j;return}const He=window.setTimeout(()=>{ia(j)},1500);return()=>window.clearTimeout(He)},[s,r,x,o,B,va,Da,Xa,ks,Je,ue,Nn,me,G,ia,Dt,Pt]),a.useEffect(()=>{s&&r==="local"&&x||(sn(),ne(!1))},[s,r,x,sn]),a.useEffect(()=>{if(!s||r!=="local"||!x||!o||B==="provision-local"||gt())return;xa();const j=window.setInterval(()=>{xa()},Ja);return()=>window.clearInterval(j)},[s,r,x,o,B,gt,xa,Ja]),a.useEffect(()=>{r!=="local"||!d||!l||l==="anonymous"||wt({preferCloudOnFirstSync:!0})},[r,d,l,wt]),a.useEffect(()=>{if(r!=="local"||!d||!l||l==="anonymous"||!kt.current.has(l)||Tt.current)return;const j=ot(),le=JSON.stringify(j);if(!Dn.current){Dn.current=le;return}if(le===Dn.current)return;Dn.current=le,Q(l,new Date().toISOString());const He=window.setTimeout(()=>{wt({preferCloudOnFirstSync:!1})},350);return()=>window.clearTimeout(He)},[r,d,l,ot,Q,wt]),a.useEffect(()=>{!s||r!=="local"||!x||!o||!d||B==="provision-local"||B==="attach-cloud"||ja.current||(ja.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 j=>{if(!j.ok)return;const le=await j.json().catch(()=>({}));le?.applied>0&&(ms("startup_repair_applied",{workspaceId:n,applied:le.applied,skipped:le.skipped,failed:le.failed}),oa(),Ua(),Qa(),Ca())}).catch(()=>{}))},[s,r,x,o,d,B,n,oa,Ua,Qa,Ca]),{userGlobalSyncStatus:We,setUserGlobalSyncStatus:Ce,userGlobalSyncError:Ve,setUserGlobalSyncError:Fe,workspaceLastPullAt:ve,workspaceLastPushAt:v,workspaceLastErrorAt:C,workspaceLastErrorMessage:D,workspaceLastSuccessfulSyncAt:Na,workspaceCloudSyncEnabled:x,workspaceSyncPhase:B,workspaceSyncStatus:ys,workspaceSyncSummary:nr,workspaceSyncRecommendedAction:Ra,workspaceSyncBusy:F,workspaceSyncPendingChanges:ae,syncInFlightRef:Y,workspaceRetryAt:ln,isWorkspaceRetryPending:gt,workspacePushInFlightRef:Dt,workspacePullInFlightRef:Pt,workspaceLastPushedSignatureRef:Bt,workspacePendingSignatureRef:Ye,workspaceLastPushedTaskIdsRef:Ke,workspaceDeletedTaskIdsRef:Un,workspacePullCursorRef:Tn,clearWorkspaceRetry:sn,persistWorkspaceSyncPatch:Wt,loadWorkspaceSyncState:Ds,applyWorkspaceSyncStateSnapshot:hs,syncUserGlobalSettings:wt,buildWorkspaceSyncSignature:Da,pushWorkspaceChangesToCloud:ia,pullWorkspaceChangesFromCloud:xa,saveWorkspaceCloudSyncSettings:za,retryUserGlobalSettingsSync:_a,retryWorkspaceCloudSync:Ss,resetWorkspaceSyncCursorAndPull:Po,getWorkspaceSyncDiagnostics:Eo}}function Ly(t,n){return typeof n=="number"&&Number.isFinite(n)&&n>0?n:t==="error"?3600:2600}function My(){const[t,n]=a.useState(null),s=a.useRef(null),r=a.useCallback(()=>{s.current!==null&&(window.clearTimeout(s.current),s.current=null),n(null)},[]),o=a.useCallback((d,l="info",p)=>{if(!d)return;s.current!==null&&(window.clearTimeout(s.current),s.current=null),n({message:d,tone:l,ttlMs:p});const g=Ly(l,p);s.current=window.setTimeout(()=>{s.current=null,n(null)},g)},[]);return a.useEffect(()=>()=>{s.current!==null&&(window.clearTimeout(s.current),s.current=null)},[]),{uiNotice:t,pushNotice:o,clearNotice:r}}function By({storagePath:t}){const[n,s]=a.useState("antigravity"),[r,o]=a.useState([]),[d,l]=a.useState(".agent/workflows"),[p,g]=a.useState(null),[_,w]=a.useState(null),A=a.useRef(null);a.useEffect(()=>{const L=r.find(S=>S.id===n);L&&l(L.directory)},[n,r]);const y=a.useCallback(()=>{typeof window>"u"||(A.current!==null&&window.clearTimeout(A.current),A.current=window.setTimeout(()=>{A.current=null,w(null)},5e3))},[]),k=a.useCallback(async()=>{const L=await fetch("/api/taskforce/environments");if(!L.ok)return;const S=await L.json().catch(()=>({}));S.environments&&o(S.environments)},[]),b=a.useCallback(async(L,S)=>{g("workflows"),w(null);try{const J=await(await fetch("/api/taskforce/export-resources",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:"workflows",environment:L,workflowNames:S,variables:{STORAGE_PATH:t.replace(/\/$/,"")||".Taskforce"}})})).json();J.success?w({type:"success",message:`Successfully exported ${J.count} workflows to ${L}`}):w({type:"error",message:J.error||"Export failed"})}catch{w({type:"error",message:"Network error exporting workflows"})}finally{g(null),y()}},[y,t]);return a.useEffect(()=>()=>{A.current!==null&&typeof window<"u"&&(window.clearTimeout(A.current),A.current=null)},[]),{exportEnvironment:n,setExportEnvironment:s,availableEnvironments:r,loadAvailableEnvironments:k,exportWorkflowsPath:d,setExportWorkflowsPath:l,exportingResource:p,exportResult:_,handleExportWorkflows:b}}function Wy(t){const{resolveCloudAuthUrl:n,currentWorkspaceId:s,normalizedCloudAuthBaseUrl:r,normalizedCloudMcpBaseUrl:o,mergedConfig:d,availableWorkspaces:l,currentTheme:p,configLoaded:g,globalTheme:_,themeUseGlobalDefault:w,keyShortcut:A,jsonBackupEnabled:y,globalJsonBackupEnabled:k,globalWeekStartsOn:b,locale:L,supportedLocales:S,jsonBackupUseGlobalDefault:$,manualComplexityEnabled:J,checklistDropdownEnabled:U,showTaskCardStatusLabel:X,exportWorkflowsPath:q,exportingResource:ee,exportResult:W,pathSaved:Re,settingsSection:V,exportEnvironment:te,setupState:xe,buildInfo:de,saveSetupMode:O,saveWorkspaceProfile:R,setCurrentTheme:z,handleSaveTheme:re,handleSaveGlobalTheme:be,setKeyShortcut:We,handleJsonBackupEnabledChange:Ce,handleSaveGlobalJsonBackupEnabled:Ve,handleSaveGlobalWeekStartsOn:Fe,handleSaveLocale:ve,handleManualComplexityEnabledChange:Oe,handleChecklistDropdownEnabledChange:v,handleShowTaskCardStatusLabelChange:M,handleResetProjectToGlobal:C,handleSaveSettings:oe,setExportWorkflowsPath:D,setExportEnvironment:f,availableWorkflows:x,initiativeTemplates:P,availableEnvironments:B,fetchWorkflows:Ae,fetchInitiativeTemplates:F,createInitiativeFromTemplate:ne,fetchWorkflowTemplate:ae,fetchWorkflowOverrideNames:ie,saveWorkflowTemplateDraft:Z,resetWorkflowTemplateDraft:H,handleExportWorkflows:ue,setShowFolderBrowser:Pe,setBrowserTarget:se,fetchFolders:$e,activeCategories:et,pathValidation:tt,taxonomyDisplayLabels:Ct,handleUpdateCategory:i,handleRemoveCategory:De,handleSaveCategory:Je,handleAddPath:Ie,handleRemovePath:ht,handleUpdateCategoryIcon:yt,handleUpdateCategoryColor:$t,activeTypes:Ht,handleSaveType:bn,handleRemoveType:nn,handleUpdateType:Kt,taxonomies:_n,handleUpdateTaxonomies:qt,priorities:Hn,handleUpdatePriorities:on,analyzeSystemTaxonomyPack:Nn,handleApplySystemTaxonomyPack:Nt,handleUpdateTaxonomyDisplayLabels:Yt,projectRoot:Bn,projectName:an,mcpHostRoot:me,serverHostRoot:Ee,mcpScriptPath:Zt,tenantId:Lt,runtimeMode:Rn,workspaceSwitchingEnabled:xt,deleteWorkspace:G,setMcpHostRoot:ke,isAuthenticated:je}=t,Te=a.useCallback(async(Qe,pt)=>{const Mt=n(Qe),Rt=new Headers(pt?.headers||void 0);if(Qe.startsWith("/api/taskforce/settings/mcp/")){const Ut=String(s||"").trim();Ut&&Ut!=="default"&&!Rt.has("x-taskforce-workspace-id")&&Rt.set("x-taskforce-workspace-id",Ut)}const At={...pt,headers:Rt,credentials:pt?.credentials??"include"};if(typeof window<"u"&&/^https?:\/\//i.test(Mt))try{new URL(Mt,window.location.origin).origin!==window.location.origin&&At.mode===void 0&&(At.mode="cors")}catch{}return fetch(Mt,At)},[s,n]),Se=l.find(Qe=>Qe.id===s);return{fetchCloudAuthApi:Te,currentTheme:p,configLoaded:g,globalTheme:_,themeUseGlobalDefault:w,keyShortcut:A,jsonBackupEnabled:y,globalJsonBackupEnabled:k,globalWeekStartsOn:b,locale:L,supportedLocales:S,jsonBackupUseGlobalDefault:$,manualComplexityEnabled:J,checklistDropdownEnabled:U,showTaskCardStatusLabel:X,exportWorkflowsPath:q,exportingResource:ee,exportResult:W,pathSaved:Re,initialSection:V,exportEnvironment:te,setupState:xe,buildInfo:de,onSaveSetupMode:O,onSaveWorkspaceProfile:R,onThemeChange:z,onSaveTheme:re,onSaveGlobalTheme:be,onKeyShortcutChange:We,onJsonBackupEnabledChange:Ce,onSaveGlobalJsonBackupEnabled:Ve,onSaveGlobalWeekStartsOn:Fe,onSaveLocale:ve,onManualComplexityEnabledChange:Oe,onChecklistDropdownEnabledChange:v,onShowTaskCardStatusLabelChange:M,onResetProjectToGlobal:C,onSaveSettings:oe,onExportWorkflowsPathChange:D,onExportEnvironmentChange:f,availableWorkflows:x,initiativeTemplates:P,availableEnvironments:B,onRefreshWorkflows:Ae,onRefreshInitiativeTemplates:F,onCreateInitiativeFromTemplate:ne,onFetchWorkflowTemplate:ae,onFetchWorkflowOverrideNames:ie,onSaveWorkflowTemplateDraft:Z,onResetWorkflowTemplateDraft:H,onExportWorkflows:ue,onShowFolderBrowserChange:Pe,onBrowserTargetChange:se,onFetchFolders:$e,categories:et,pathValidation:tt,taxonomyDisplayLabels:Ct,onUpdateCategory:i,onRemoveCategory:De,onSaveCategory:Je,onAddPath:Ie,onRemovePath:ht,onUpdateCategoryIcon:yt,onUpdateCategoryColor:$t,types:Ht,onSaveType:bn,onRemoveType:nn,onUpdateType:Kt,taxonomies:_n,onUpdateTaxonomies:qt,priorities:Hn,onUpdatePriorities:on,onAnalyzeSystemTaxonomyPack:Nn,onApplySystemTaxonomyPack:Nt,onUpdateTaxonomyDisplayLabels:Yt,projectRoot:Bn,projectName:an,mcpHostRoot:me,serverHostRoot:Ee,mcpScriptPath:Zt,tenantId:Lt,workspaceId:s,runtimeMode:Rn,cloudAuthBaseUrl:r||d.cloudAuthBaseUrl,cloudMcpBaseUrl:o||void 0,workspaceSwitchingEnabled:xt,currentWorkspaceRole:Se?.role||"member",currentWorkspaceName:String(Se?.name||""),onDeleteWorkspace:G,onMcpHostRootChange:ke,isAuthenticated:je}}function Fy(t){const{keyShortcut:n,themeUseGlobalDefault:s,runtimeMode:r,jsonBackupUseGlobalDefault:o,globalTheme:d,globalJsonBackupEnabled:l,setCurrentTheme:p,setThemeUseGlobalDefault:g,setGlobalTheme:_,setJsonBackupEnabled:w,setJsonBackupUseGlobalDefault:A,setGlobalJsonBackupEnabled:y,setGlobalWeekStartsOn:k,setLocale:b,setManualComplexityEnabled:L,setChecklistDropdownEnabled:S,setShowTaskCardStatusLabel:$,setShowChecklist:J}=t,U=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]),X=a.useCallback(async R=>{p(R),g(!1);try{const z=await fetch("/api/taskforce/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({theme:R})});if(!z.ok)throw new Error(`Failed to save config (${z.status})`);return!0}catch{return console.error("[Taskforce] Failed to save project theme"),!1}},[p,g]),q=a.useCallback(async R=>{_(R),s&&p(R);try{const z=await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({theme:R})});if(!z.ok)throw new Error(`Failed to save global settings (${z.status})`);return!0}catch{return console.error("[Taskforce] Failed to save global theme"),!1}},[_,s,p]),ee=a.useCallback(async R=>{if(r==="cloud")return w(!1),A(!1),!1;w(R),A(!1);try{const z=await fetch("/api/taskforce/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonBackupEnabled:R})});if(!z.ok)throw new Error(`Failed to save config (${z.status})`);return!0}catch{return console.error("[Taskforce] Failed to save project backup setting"),!1}},[r,w,A]),W=a.useCallback(async R=>{if(r==="cloud")return y(!1),o&&w(!1),!1;y(R),o&&w(R);try{const z=await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({jsonBackupEnabled:R})});if(!z.ok)throw new Error(`Failed to save global settings (${z.status})`);return!0}catch{return console.error("[Taskforce] Failed to save global backup setting"),!1}},[r,y,o,w]),Re=a.useCallback(async R=>{k(R);try{const z=await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({schedulePreferences:{weekStartsOn:R}})});if(!z.ok)throw new Error(`Failed to save global settings (${z.status})`);return!0}catch{return console.error("[Taskforce] Failed to save regional week start setting"),!1}},[k]),V=a.useCallback(async R=>{const z=Gm(R);return b(z),!0},[b]),te=a.useCallback(async R=>{L(R);try{const z=await fetch("/api/taskforce/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({manualComplexityEnabled:R})});if(!z.ok)throw new Error(`Failed to save config (${z.status})`);return!0}catch{return console.error("[Taskforce] Failed to save manual complexity setting"),!1}},[L]),xe=a.useCallback(async R=>{S(R),R||J(!1);try{const z=await fetch("/api/taskforce/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({checklistDropdownEnabled:R})});if(!z.ok)throw new Error(`Failed to save config (${z.status})`);return!0}catch{return console.error("[Taskforce] Failed to save checklist dropdown setting"),!1}},[S,J]),de=a.useCallback(async R=>{$(R);try{const z=await fetch("/api/taskforce/config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({showTaskCardStatusLabel:R})});if(!z.ok)throw new Error(`Failed to save config (${z.status})`);return!0}catch{return console.error("[Taskforce] Failed to save task card status label setting"),!1}},[$]),O=a.useCallback(async()=>{g(!0),A(!0),p(d),w(l),L(!1),S(!0),$(!0),J(!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}},[g,A,p,d,w,l,L,S,$,J]);return{handleSaveSettings:U,handleSaveTheme:X,handleSaveGlobalTheme:q,handleJsonBackupEnabledChange:ee,handleSaveGlobalJsonBackupEnabled:W,handleSaveGlobalWeekStartsOn:Re,handleSaveLocale:V,handleManualComplexityEnabledChange:te,handleChecklistDropdownEnabledChange:xe,handleShowTaskCardStatusLabelChange:de,handleResetProjectToGlobal:O}}function Oy(t){const{activeCategories:n,activeTab:s,activeTypes:r,archivedTasks:o,browserTarget:d,category:l,configLoaded:p,customCategories:g,refreshTaskCollections:_,fetchTasks:w,filterCategories:A,getCategoryPaths:y,normalizePath:k,pathValidation:b,setBrowserTarget:L,setCategory:S,setCustomCategories:$,setCustomTypes:J,setFilterCategories:U,setPathValidation:X,setPriorities:q,setShowFolderBrowser:ee,setTaxonomies:W,tasks:Re}=t,V=a.useCallback(async(D,f)=>{const x=await D.json().catch(()=>({}));return String(x?.error||f)},[]),te=a.useCallback(()=>[...Re,...o],[o,Re]),xe=a.useCallback(D=>D.priorities.find(f=>f.value===2)?.value||D.priorities[0]?.value||2,[]),de=a.useCallback(async D=>{if(D.length!==0)try{const f=await fetch("/api/taskforce/validate-paths",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({paths:D})});if(f.ok){const x=await f.json();X(P=>({...P,...x.results}))}}catch(f){console.error("[Taskforce] Failed to validate paths:",f)}},[X]);a.useEffect(()=>{if(s!=="settings"||!p)return;const D=[];n.forEach(x=>{y(x).forEach(B=>{D.includes(B)||D.push(B)})});const f=D.filter(x=>!b[x]);f.length>0&&de(f)},[n,s,p,y,b,de]);const O=a.useCallback(async(D,f)=>{if(p){$(x=>(x.length>0?x:n).map(B=>B.value===D.value?D:B)),f&&f!==D.label&&(l===f&&S(D.label),A.includes(f)&&U(x=>x.map(P=>P===f?D.label:P)));try{const B={categories:(g.length>0?g:n).map(Ae=>Ae.value===D.value?D:Ae)};f&&f!==D.label&&(B.reassignFrom=f,B.reassignTo=D.label),await fetch("/api/taskforce/categories",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(B)}),f&&await w()}catch(x){console.error("[Taskforce] Failed to update category",x)}}},[n,l,p,g,w,A,S,$,U]),R=a.useCallback(async D=>{if(!p)return;const f=D.trim().toLowerCase().replace(/\s+/g,"-");if(n.some(P=>P.value===f))return;const x={value:f,label:D.trim(),color:"blue-200",icon:"Folder"};$(P=>[...P.length>0?P:n,x]);try{const B=[...g.length>0?g:n,x];await fetch("/api/taskforce/categories",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({categories:B})})}catch(P){console.error("[Taskforce] Failed to create category",P)}},[n,p,g,$]),z=a.useCallback((D,f)=>{if(!f.trim())return;const x=n.find(F=>F.value===D);if(!x)return;const P=y(x),B=f.trim();if(P.includes(B))return;const Ae=[...P,B];O({...x,path:void 0,paths:Ae}),de(Ae)},[n,y,O,de]),re=a.useCallback((D,f)=>{const x=n.find(P=>P.value===D);x&&O({...x,icon:f})},[n,O]),be=a.useCallback((D,f)=>{const x=n.find(P=>P.value===D);x&&O({...x,color:f})},[n,O]),We=a.useCallback((D,f)=>{const x=n.find(Ae=>Ae.value===D);if(!x)return;const B=y(x).filter(Ae=>Ae!==f);O({...x,path:void 0,paths:B})},[n,y,O]),Ce=a.useCallback(D=>{const f=k(D);if(d&&typeof d=="object"&&d.type==="category"){const x=n.find(P=>P.value===d.value);if(x){const P=y(x);if(!P.includes(f)){const B=[...P,f];O({...x,path:void 0,paths:B})}}}ee(!1),L(null)},[n,d,y,O,k,L,ee]),Ve=a.useCallback(async D=>{if(!p)return;const f=Tc,x=n.find(F=>F.value===f),P=x?{...x}:{value:f,label:ou,icon:"Inbox"},B=P.label,Ae=n.find(F=>F.value===D);$(F=>{let ae=(F.length>0?F:n).filter(ie=>ie.value!==D);return ae.some(ie=>ie.value===f)||(ae=[P,...ae]),ae}),Ae&&((l===Ae.label||l===Ae.value)&&S(f),(A.includes(Ae.label)||A.includes(Ae.value))&&U(F=>{const ne=F.filter(ae=>ae!==Ae.label&&ae!==Ae.value);return ne.includes(f)?ne:[...ne,f]}));try{let F=(g.length>0?g:n).filter(ne=>ne.value!==D);F.some(ne=>ne.value===f)||(F=[P,...F]),await fetch("/api/taskforce/categories",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({categories:F,reassignFrom:Ae?.label||D,reassignTo:B})}),await w()}catch(F){console.error("[Taskforce] Failed to remove category",F)}},[n,l,p,g,w,A,S,$,U]),Fe=a.useCallback(async D=>{if(!D.trim())return;const f=D.trim().toLowerCase().replace(/\s+/g,"-");if(r.some(P=>P.value===f))return;const x=[...r,{value:f,label:D.trim(),status:"active"}];J(x);try{await fetch("/api/taskforce/types",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({types:x})})}catch(P){console.error("Failed to save type",P)}},[r,J]),ve=a.useCallback(async D=>{const f=r.map(x=>x.value===D?{...x,status:"retired"}:x);J(f);try{await fetch("/api/taskforce/types",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({types:f})}),await w()}catch(x){console.error("Failed to save type",x)}},[r,w,J]),Oe=a.useCallback(async(D,f)=>{const x=r.find(F=>F.value===D);if(!x)return;const P=typeof f.label=="string"?f.label.trim():x.label;if(!P)return;const B=r.map(F=>F.value===D?{...F,...f,label:P}:F);if(JSON.stringify(B)!==JSON.stringify(r)){J(B);try{await fetch("/api/taskforce/types",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({types:B})})}catch(F){console.error("Failed to update type",F)}}},[r,J]),v=a.useCallback(async D=>{if(p){W(D);try{await fetch("/api/taskforce/taxonomies",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({taxonomies:D})})}catch(f){console.error("[Taskforce] Failed to save taxonomies",f)}}},[p,W]),M=a.useCallback(async D=>{if(p){q(D);try{await fetch("/api/taskforce/priorities",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({priorities:D})})}catch(f){console.error("[Taskforce] Failed to save priorities",f)}}},[p,q]),C=a.useCallback(D=>{const f=te(),x=new Set(D.categories.map(ae=>ae.value)),P=new Set(D.types.map(ae=>ae.value)),B=new Set(D.priorities.map(ae=>Number(ae.value))),Ae=Array.from(new Set(f.map(ae=>String(ae.category||"").trim()).filter(ae=>ae.length>0&&!x.has(ae)))).sort(),F=Array.from(new Set(f.map(ae=>String(ae.type||"").trim()).filter(ae=>ae.length>0&&!P.has(ae)))).sort(),ne=Array.from(new Set(f.map(ae=>Number(ae.priority)).filter(ae=>Number.isFinite(ae)&&ae>0&&!B.has(ae)))).sort((ae,ie)=>ae-ie);return{unmatchedCategoryValues:Ae,unmatchedTypeValues:F,incompatiblePriorityValues:ne}},[te]),oe=a.useCallback(async D=>{if(!p)return{success:!1,error:"Settings are still loading."};const{pack:f,sections:x,remapExistingValuesToDefault:P,workspaceIdOverride:B}=D,Ae=String(B||"").trim(),F=Ae.length>0,ne=F?[]:te(),ae=Z=>{if(!Ae)return Z;const H=Z.includes("?")?"&":"?";return`${Z}${H}workspaceId=${encodeURIComponent(Ae)}`},ie=()=>{const Z={"Content-Type":"application/json"};return Ae&&(Z["x-taskforce-workspace-id"]=Ae),Z};try{if(x.categories){const Z=new Set(f.categories.map(Pe=>Pe.value)),H=P?[...f.categories]:[...f.categories,...n.filter(Pe=>!Z.has(Pe.value)).map(Pe=>({...Pe,disabled:!0}))];F||$(H);const ue=await fetch(ae("/api/taskforce/categories"),{method:"POST",headers:ie(),body:JSON.stringify({categories:H})});if(!ue.ok)return{success:!1,error:await V(ue,"Failed to apply category library pack.")}}if(x.types){const Z=new Set(f.types.map(se=>se.value)),H=f.types.find(se=>se.value===fs)?.value||f.types[0]?.value||fs;if(P){const se=ne.filter($e=>$e.type&&!Z.has(String($e.type))).map($e=>({id:$e.id,type:H}));if(se.length>0){const $e=await fetch(ae("/api/taskforce/bulk-update-fields"),{method:"POST",headers:ie(),body:JSON.stringify({updates:se})});if(!$e.ok)return{success:!1,error:await V($e,"Failed to remap task types to the pack default.")}}}const ue=P?[...f.types]:[...f.types,...r.filter(se=>!Z.has(se.value)).map(se=>({...se,status:"retired"}))];F||J(ue);const Pe=await fetch(ae("/api/taskforce/types"),{method:"POST",headers:ie(),body:JSON.stringify({types:ue})});if(!Pe.ok)return{success:!1,error:await V(Pe,"Failed to apply task type library pack.")}}if(x.priorities){const Z=new Set(f.priorities.map(se=>se.value)),H=Array.from(new Set(ne.map(se=>Number(se.priority)).filter(se=>Number.isFinite(se)&&se>0&&!Z.has(se)))).sort((se,$e)=>se-$e);if(H.length>0&&!P)return{success:!1,error:`This workspace still uses priority levels ${H.join(", ")}. Enable "Remap unmatched existing values to default" to replace them before applying this pack.`};if(H.length>0){const se=xe(f),$e=ne.filter(et=>H.includes(Number(et.priority))).map(et=>({id:et.id,priority:se}));if($e.length>0){const et=await fetch(ae("/api/taskforce/bulk-update-fields"),{method:"POST",headers:ie(),body:JSON.stringify({updates:$e})});if(!et.ok)return{success:!1,error:await V(et,"Failed to remap task priorities to the pack default.")}}}const ue=f.priorities.map(se=>({...se,value:Number(se.value)}));F||q(ue);const Pe=await fetch(ae("/api/taskforce/priorities"),{method:"POST",headers:ie(),body:JSON.stringify({priorities:ue})});if(!Pe.ok)return{success:!1,error:await V(Pe,"Failed to apply priority library pack.")}}return F||await _({isSilent:!0}),{success:!0}}catch(Z){return console.error("[Taskforce] Failed to apply system taxonomy pack",Z),{success:!1,error:Z instanceof Error?Z.message:"Failed to apply system taxonomy pack."}}},[n,r,p,te,xe,V,_,$,J,q]);return{getCategoryPaths:y,validatePaths:de,handleUpdateCategory:O,handleSaveCategory:R,handleAddPath:z,handleUpdateCategoryIcon:re,handleUpdateCategoryColor:be,handleRemovePath:We,handleSelectPath:Ce,handleRemoveCategory:Ve,handleSaveType:Fe,handleRemoveType:ve,handleUpdateType:Oe,handleUpdateTaxonomies:v,handleUpdatePriorities:M,analyzeSystemTaxonomyPack:C,handleApplySystemTaxonomyPack:oe}}function $y({shouldDeferProtectedApiCalls:t,shouldBlockProtectedApiCalls:n}){const[s,r]=a.useState([]),[o,d]=a.useState([]),l=a.useCallback(async()=>{if(!(t||n))try{const y=await fetch("/api/taskforce/workflow-templates");if(y.ok){const k=await y.json();r(k.templates||[])}}catch{}},[t,n]),p=a.useCallback(async()=>{try{const y=await fetch("/api/taskforce/initiative-templates");if(!y.ok)return[];const k=await y.json(),b=Array.isArray(k?.templates)?k.templates:[];return d(b),b}catch{return[]}},[]),g=a.useCallback(async y=>{if(!y)return null;const k=[`/api/taskforce/workflow-template/${encodeURIComponent(y)}`,`/api/taskforce/workflow-templates/${encodeURIComponent(y)}`];try{for(const b of k){const L=await fetch(b);if(!L.ok)continue;const S=await L.json();if(S?.template)return S.template}return null}catch{return null}},[]),_=a.useCallback(async()=>{try{const y=await fetch("/api/taskforce/workflow-editor/overrides");if(!y.ok)return[];const k=await y.json();return Array.isArray(k?.names)?k.names:[]}catch{return[]}},[]),w=a.useCallback(async(y,k)=>{try{const b=await fetch("/api/taskforce/workflow-editor/save",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:y,draft:k})}),L=await b.json().catch(()=>({}));return!b.ok||!L.success?{success:!1,error:L.error||`Save failed (${b.status})`}:(l(),{success:!0})}catch(b){return{success:!1,error:b.message}}},[l]),A=a.useCallback(async y=>{try{const k=await fetch(`/api/taskforce/workflow-editor/reset/${encodeURIComponent(y)}`,{method:"POST"}),b=await k.json().catch(()=>({}));return!k.ok||!b.success?{success:!1,error:b.error||`Reset failed (${k.status})`}:(l(),{success:!0})}catch(k){return{success:!1,error:k.message}}},[l]);return{availableWorkflows:s,initiativeTemplates:o,fetchWorkflows:l,fetchInitiativeTemplates:p,fetchWorkflowTemplate:g,fetchWorkflowOverrideNames:_,saveWorkflowTemplateDraft:w,resetWorkflowTemplateDraft:A}}function Uy(){const[t,n]=a.useState(!1),s=a.useCallback(async()=>{if(!document.fullscreenElement){try{await document.documentElement.requestFullscreen(),n(!0)}catch(r){console.error(`Error attempting to enable full-screen mode: ${r}`)}return}document.exitFullscreen&&(await document.exitFullscreen(),n(!1))},[]);return a.useEffect(()=>{const r=()=>{n(!!document.fullscreenElement)};return document.addEventListener("fullscreenchange",r),()=>document.removeEventListener("fullscreenchange",r)},[]),{zenMode:t,setZenModeState:n,toggleZenMode:s}}async function zy(t,n,s){if(t.current){n.current=!0;return}t.current=!0;try{do n.current=!1,await s();while(n.current)}finally{t.current=!1}}function Hy({tasks:t,archivedTasks:n,setTasks:s,setArchivedTasks:r,setLoadingTasks:o,getCurrentWorkspaceId:d,workspaceResetKey:l,shouldDeferProtectedApiCalls:p,shouldBlockProtectedApiCalls:g,handleUnauthorized:_,authRequiredForApi:w}){const A=a.useRef(new Map),y=a.useRef(!1),k=a.useRef([]),b=a.useRef([]),L=a.useRef(!1),S=a.useRef(!1),$=a.useRef(null),J=a.useRef(null);a.useEffect(()=>{k.current=t},[t]),a.useEffect(()=>{b.current=n},[n]);const U=a.useCallback(O=>`${O.updatedAt||O.createdAt||""}|${O.status}|${O.priority}|${O.title}`,[]),[X,q]=a.useState([]),ee=a.useRef(new Map),W=a.useCallback(O=>{!O.length||typeof window>"u"||(q(R=>Array.from(new Set([...R,...O]))),O.forEach(R=>{const z=ee.current.get(R);z&&window.clearTimeout(z);const re=window.setTimeout(()=>{ee.current.delete(R),q(be=>be.filter(We=>We!==R))},4e3);ee.current.set(R,re)}))},[]);a.useEffect(()=>()=>{typeof window>"u"||(ee.current.forEach(O=>window.clearTimeout(O)),ee.current.clear())},[]),a.useEffect(()=>{A.current=new Map,y.current=!1,L.current=!1,S.current=!1,$.current?.abort("workspace-reset"),$.current=null,J.current?.abort("workspace-reset"),J.current=null,typeof window<"u"&&(ee.current.forEach(O=>window.clearTimeout(O)),ee.current.clear()),q([])},[l]);const Re=a.useCallback(async(O=!1,R)=>{if(!(R?.ignoreAuthGuard===!0)&&(p||g))return;O||o(!0);const re=String(d()||"").trim();$.current?.abort("superseded");const be=new AbortController;$.current=be;try{const We=await fetch("/api/taskforce/tasks",{signal:be.signal});if(We.status===401){_(),s([]),O||o(!1);return}if(We.ok){const Ve=((await We.json()).tasks||[]).map(v=>Qr(v));if(String(d()||"").trim()!==re)return;const ve=new Map,Oe=[];for(const v of Ve){const M=U(v);if(ve.set(v.id,M),!y.current)continue;const C=A.current.get(v.id);(!C||C!==M)&&Oe.push(v.id)}A.current=ve,y.current?W(Oe):y.current=!0,s(Ve)}}catch(We){if(We instanceof DOMException?We.name==="AbortError":String(We?.name||"").toLowerCase()==="aborterror")return;console.error("[Taskforce] Failed to fetch tasks:",We)}finally{$.current===be&&($.current=null),O||o(!1)}},[U,d,W,_,s,o,w,p,g]),V=a.useCallback(async(O=!1,R)=>{if(!(R?.ignoreAuthGuard===!0)&&(p||g))return;const re=String(d()||"").trim();J.current?.abort("superseded");const be=new AbortController;J.current=be;try{const We=await fetch("/api/taskforce/archive",{signal:be.signal});if(We.ok){const Ce=await We.json();if(String(d()||"").trim()!==re)return;const Fe=(Ce.archived||[]).map(ve=>({...Qr(ve),isArchived:!0}));r(Fe)}}catch(We){if(We instanceof DOMException?We.name==="AbortError":String(We?.name||"").toLowerCase()==="aborterror")return;console.error("[Taskforce] Failed to fetch archive:",We)}finally{J.current===be&&(J.current=null)}},[d,r,p,g]),te=a.useCallback(async O=>{const R=O?.isSilent!==!1,z=O?.ignoreAuthGuard===!0;await Promise.all([Re(R,{ignoreAuthGuard:z}),V(R,{ignoreAuthGuard:z})])},[V,Re]),xe=a.useCallback(async()=>{await zy(L,S,async()=>{await te({isSilent:!0})})},[te]),de=a.useCallback(O=>{const R=sg(O,k.current,b.current);k.current=R.tasks,b.current=R.archivedTasks,s(R.tasks),r(R.archivedTasks)},[s,r]);return{tasksRef:k,archivedTasksRef:b,recentlyChangedTaskIds:X,markRecentlyChangedTasks:W,fetchTasks:Re,fetchArchive:V,refreshTaskCollections:te,refreshTaskCollectionsFromInvalidation:xe,mergeTaskFromServer:de,getTaskRevisionKey:U}}function Gy(t){const{editingTaskId:n,relationshipTasks:s,initiatives:r=[],workstreams:o=[],supplementalTasks:d=[],setComments:l}=t,p=a.useMemo(()=>{if(d.length===0)return s;const A=new Map;return s.forEach(y=>A.set(y.id,y)),d.forEach(y=>A.set(y.id,y)),Array.from(A.values())},[s,d]),g=a.useMemo(()=>{if(n)return p.find(A=>A.id===n)},[p,n]);a.useEffect(()=>{n&&l(g?.comments||[])},[n,g?.id,g?.updatedAt,g?.comments,l]);const _=a.useMemo(()=>{if(g?.workstreamId)return o.find(A=>A.id===g.workstreamId)},[g,o]),w=a.useMemo(()=>{if(_?.initiativeId)return r.find(A=>A.id===_.initiativeId)},[_,r]);return{currentTask:g,currentTaskWorkstream:_,currentTaskInitiative:w}}const vp="WS-",wp="IN-";function Rc(t){return iu(vp,t)}function cf(t){return mp(vp,t)}function bp(t){return Ol(vp,t)}function wr(t){return iu(wp,t)}function Vy(t){return mp(wp,t)}function Zy(t){return Ol(wp,t)}function $u(t,n){const s=String(n||"").trim();if(!s)return null;const r=Vy(s);return t.find(o=>o.id===s||wr(o)===s||r!==null&&o.referenceNumber===r)||null}function qy(t){const n={};return t.forEach(s=>{const r=s.defaultValue;if(r!=null){if(Array.isArray(r)){r.length>0&&(n[s.id]=r.map(o=>typeof o=="number"?o:String(o)));return}n[s.id]=typeof r=="number"?r:String(r)}}),n}function Ky(t,n){return t.filter(s=>{const r=n[s.id],o=Array.isArray(r)?r.length>0:r!=null&&r!=="";return s.status==="retired"&&!o?!1:s.formEnabled!==!1||s.isRequired===!0||o})}function Yy(t){const{activeCategories:n,activeTypes:s,activeTab:r,attachments:o,checklistItems:d,comments:l,description:p,editingTaskId:g,flushPendingAutoSave:_,getPreferredCategoryValue:w,lastUsedCategory:A,newCommentText:y,relationshipTasks:k,workstreams:b,showArchive:L,taxonomies:S,setActiveTab:$,setApproach:J,setAssignee:U,setAttachments:X,setAttachmentsDirty:q,setCategory:ee,setChecklistItems:W,setComments:Re,setComplexity:V,setDescription:te,setDueDate:xe,setEditingTaskId:de,setError:O,setFormTaxonomies:R,setIsOpen:z,setNewCommentText:re,setPendingNavigation:be,setWorkstreamInput:We,setPriority:Ce,setScheduledDate:Ve,setShowArchive:Fe,setStatus:ve,setTaskReturnTrail:Oe,setTitle:v,setType:M,setUnsavedModalOpen:C,taskReturnTrail:oe,title:D}=t,f=a.useCallback(()=>s.find(H=>String(H.value||"").trim().length>0)?.value||fs,[s]),x=a.useCallback(H=>{if(g){_(),H();return}if(!(D.trim()!==""||p.trim()!==""||d.length>0||y.trim()!==""||l.length>0||o.length>0)){H();return}be(()=>H),C(!0)},[o,l.length,p,g,_,d,y,be,C,D]),P=a.useCallback(()=>{z(!1)},[z]),B=a.useCallback(()=>{de(null),v(""),te("");const H=A,ue=n.some(Pe=>Pe.label===H||Pe.value===H);if(H&&ue){const Pe=n.find(se=>se.label===H||se.value===H);ee(Pe?.value||H)}else ee(w(n));M(f()),Ce(2),V(3),ve("task"),J("default"),U("unassigned"),Ve(""),xe(""),We(""),W([]),R(qy(S)),Re([]),re(""),X([]),q(!1),O("")},[n,w,f,A,J,U,X,q,ee,W,Re,V,te,xe,de,O,R,re,Ce,Ve,ve,v,M,S]),Ae=a.useCallback(H=>{const ue=H.trim();if(!ue)return null;const Pe=Om(ue);if(Pe){const et=k.find(tt=>tt.referenceNumber===Pe);if(et)return et}const se=k.find(et=>et.id===ue);if(se)return se;const $e=k.find(et=>er(et)===ue);return $e||null},[k]),F=a.useCallback(H=>{const ue=H.trim();if(!ue)return null;const Pe=ue.toLowerCase(),se=cf(ue);if(se){const tt=b.find(Ct=>Ct.referenceNumber===se);if(tt)return tt}const $e=b.find(tt=>tt.id===ue);if($e)return $e;const et=b.find(tt=>tt.title.trim().toLowerCase()===Pe);return et||null},[b]),ne=a.useCallback((H,ue)=>{ue?.preserveReturnTrail||Oe([]),de(H.id),v(H.title),te(H.description||""),ee(H.category||w(n)),M(H.type||f()),Ce(typeof H.priority=="number"?H.priority:2),V(typeof H.complexity=="number"?H.complexity:3),ve(H.status||"task"),J(H.approach||"default"),U(H.assignee||"unassigned"),Ve(H.scheduledDate||""),xe(H.dueDate||"");const Pe=H.workstreamId&&b.find(se=>se.id===H.workstreamId)||null;We(Pe?Rc(Pe)||Pe.id:""),W(H.checklistItems||[]),Re(H.comments||[]),R(H.taxonomies||{}),H.taxonomies?.approach&&J(H.taxonomies.approach),X(H.attachments||[]),q(!1),$("add")},[n,w,f,$,J,U,X,q,ee,W,Re,V,te,xe,de,R,Ce,Ve,ve,Oe,v,M,b]),ae=a.useCallback(H=>{const ue=k.find(Pe=>Pe.id===H);ue&&(r==="add"&&g&&g!==ue.id&&Oe(Pe=>Pe[Pe.length-1]===g?Pe:[...Pe,g]),ue.isArchived&&!L&&Fe(!0),ne(ue,{preserveReturnTrail:!0}))},[r,g,ne,k,Fe,Oe,L]),ie=a.useCallback(()=>{if(r!=="add"||!g||oe.length===0)return!1;const H=[...oe];for(;H.length>0;){const ue=H.pop();if(!ue)continue;const Pe=k.find(se=>se.id===ue);if(Pe)return Pe.isArchived&&!L&&Fe(!0),Oe(H),ne(Pe,{preserveReturnTrail:!0}),!0}return Oe([]),!1},[r,g,ne,k,Fe,Oe,L,oe]),Z=a.useCallback(()=>{Oe([])},[Oe]);return{handleNavigation:x,handleClose:P,resetForm:B,resolveTaskIdInput:Ae,resolveWorkstreamIdInput:F,handleEdit:ne,handleOpenTaskById:ae,returnToPreviousTask:ie,clearReturnToParentTask:Z}}function Jy(t){return t.map(n=>({...n}))}function Xy(t){return t.map(n=>({...n}))}function Qy(t){return t.map(n=>({...n}))}const ek={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"}]},tk=[{id:"general",label:"General",description:"A neutral starter pack for broad project and AI collaboration workflows.",isDefaultStarter:!0,categories:[{value:Tc,label:ou,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"}]},ek];function lf(){return tk.map(t=>({...t,categories:Jy(t.categories),types:Xy(t.types),priorities:Qy(t.priorities)}))}const _c=[{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"}],Yr=_c.map(({value:t,label:n,icon:s,color:r})=>({value:t,label:n,icon:s,color:r}));function Qp(t){const n=String(t).trim().toLowerCase();return n==="completed"?_c.find(s=>s.value==="done")||_c[0]:_c.find(s=>s.value===n)||_c[0]}const df=["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"],Dc=df.reduce((t,n)=>(t[n]=$s[n]||xi,t),{}),JP=df,Qd=Object.fromEntries(lf().flatMap(t=>t.types).filter(t=>t.icon&&t.color).reduce((t,n)=>(t.some(([s])=>s===n.value)||t.push([n.value,{icon:n.icon,color:n.color}]),t),[])),nk={PDF:"red-500",DOC:"blue-500",DOCX:"blue-500",CSV:"teal-500",JSON:"amber-500",TXT:"violet-200",MD:"violet-200"},em={"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"},XP=["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 Ia(t){if(t)return em[t]?em[t]:t}function ak(t){const n=String(t||"").trim().toLowerCase();return Ia(Qd[n]?.color)||Ia("violet-200")||"#9c7aeb"}function QP(t){switch(Number(t)){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 sk(t){const n=String(t||"").trim().toUpperCase();return Ia(nk[n])||"var(--text-muted)"}function rk(t,n){const s=t.taxonomies?.[n];return s==null||s===""?!1:Array.isArray(s)?s.some(r=>String(r).trim().length>0):String(s).trim().length>0}function $l(t,n){const s=t.filter(o=>o.status!=="retired"),r=t.filter(o=>o.status==="retired"&&n.some(d=>rk(d,o.id)));return[...s,...r.filter(o=>!s.some(d=>d.id===o.id))]}function uf(t,n=[]){return $l(t,n).filter(s=>s.sortEnabled===!0).map(s=>({value:`taxonomy:${s.id}`,label:s.status==="retired"?`${s.label} (Retired)`:s.label}))}function tm(t,n){const s=t.taxonomies?.[n.id];if(s==null||s==="")return null;const r=Array.isArray(s)?s.map(o=>String(o)):[String(s)];for(let o=0;o<n.options.length;o+=1)if(r.includes(String(n.options[o]?.value)))return o;return null}function ki(t,n){return new Date(n.createdAt).getTime()-new Date(t.createdAt).getTime()}function eu(t,n,s,r,o=[]){let d=0;if(s==="created")return d=ki(t,n),r==="desc"?d:-d;if(s==="updated"){const l=t.updatedAt||t.createdAt,p=n.updatedAt||n.createdAt;return d=new Date(p).getTime()-new Date(l).getTime(),r==="desc"?d:-d}if(s==="priority"){const l=Kd(t.priority),p=Kd(n.priority);return d=l!==p?p-l:ki(t,n),r==="desc"?d:-d}if(s==="complexity"){const l=typeof t.complexity=="number"?t.complexity:3,p=typeof n.complexity=="number"?n.complexity:3;return d=l!==p?p-l:ki(t,n),r==="desc"?d:-d}if(s.startsWith("taxonomy:")){const l=s.slice(9),p=o.find(w=>w.id===l);if(!p)return d=ki(t,n),r==="desc"?d:-d;const g=tm(t,p),_=tm(n,p);return g===null&&_===null?ki(t,n):g===null?1:_===null?-1:g!==_?r==="desc"?_-g:g-_:ki(t,n)}return d=ki(t,n),r==="desc"?d:-d}function ok(t,n,s){const r=t.taxonomies?.[n];return r==null||r===""?!1:Array.isArray(r)?r.some(o=>String(o)===String(s)):String(r)===String(s)}function _p(t,n){const s=t.options.filter(o=>o.status!=="retired"),r=t.options.filter(o=>o.status==="retired"&&n.some(d=>ok(d,t.id,o.value)));return[...s,...r.filter(o=>!s.some(d=>String(d.value)===String(o.value)))]}function ik({tasks:t,archivedTasks:n,activeCategories:s,activeTypes:r,priorities:o,taxonomies:d,configLoaded:l,referenceDataLoaded:p,assigneeOptionsLoaded:g,assigneeOptions:_}){const w=a.useMemo(()=>Jm(_),[_]),A=a.useMemo(()=>$l(d,[...t,...n]).filter(F=>F.filterEnabled!==!1).map(F=>({...F,options:_p(F,[...t,...n])})),[n,t,d]),y=a.useMemo(()=>w.map(F=>F.value),[w]),[k,b]=a.useState(""),[L,S]=a.useState([]),[$,J]=a.useState([]),[U,X]=a.useState([]),[q,ee]=a.useState(!1),[W,Re]=a.useState(Yr.map(F=>F.value)),[V,te]=a.useState(y),[xe,de]=a.useState(!0),[O,R]=a.useState({}),[z,re]=a.useState("created"),[be,We]=a.useState("desc"),Ce=a.useCallback(()=>{We(F=>F==="asc"?"desc":"asc")},[]),[Ve,Fe]=a.useState("category"),[ve,Oe]=a.useState("show"),[v,M]=a.useState({}),C=a.useCallback((F,ne)=>ne.length===0?!0:ne.every(ae=>F.includes(ae)),[]),oe=a.useCallback((F,ne)=>F.length===ne.length&&F.every((ae,ie)=>ae===ne[ie]),[]);a.useEffect(()=>{Ve==="approach"&&Fe("status")},[Ve]),a.useEffect(()=>{if(!(!l||!p)&&g&&!q&&s.length>0&&r.length>0&&o.length>0){S(s.map(ne=>ne.value)),J(o.map(ne=>ne.value)),X(r.map(ne=>ne.value)),te(y),de(!0);const F={};A.forEach(ne=>{F[ne.id]=ne.options.map(ae=>ae.value)}),R(F),ee(!0)}},[l,p,g,s,r,o,A,q,y]),a.useEffect(()=>{if(!q||!g)return;const F=new Set(y),ne=V.filter(Z=>F.has(Z)),ae=xe?y:ne.length>0||V.length===0?ne:y;(ae.length!==V.length||ae.some((Z,H)=>Z!==V[H]))&&te(ae)},[y,V,xe,q,g]),a.useEffect(()=>{if(!q||!g)return;const F=V.filter(ae=>y.includes(ae)),ne=y.length>0&&y.every(ae=>F.includes(ae));ne!==xe&&de(ne)},[y,V,xe,q,g]),a.useEffect(()=>{if(!l||!p||!q||s.length===0)return;const F=og(L,s);(F.length!==L.length||F.some((ae,ie)=>ae!==L[ie]))&&S(F)},[l,p,s,q,L]),a.useEffect(()=>{if(!l||!p||!q||o.length===0||$.length===0)return;const F=rg($,o),ne=Array.from(new Set($.map(ie=>Number(ie)).filter(ie=>Number.isFinite(ie))));(F.length!==ne.length||F.some((ie,Z)=>ie!==ne[Z]))&&J(F)},[l,p,q,o,$]),a.useEffect(()=>{if(!l||!p||!q||r.length===0)return;const F=new Set(r.map(ie=>ie.value)),ne=U.filter(ie=>F.has(ie)),ae=ne.length>0||U.length===0?ne:r.map(ie=>ie.value);oe(ae,U)||X(ae)},[r,l,U,q,oe,p]),a.useEffect(()=>{if(!l||!p||!q)return;const F={};A.forEach(H=>{const ue=H.options.map($e=>$e.value);if(ue.length===0)return;const Pe=Array.isArray(O[H.id])?O[H.id]:[],se=Pe.filter($e=>ue.includes($e));F[H.id]=se.length>0||Pe.length===0?se:ue});const ne=Object.keys(O).sort(),ae=Object.keys(F).sort(),ie=ne.length!==ae.length||ne.some((H,ue)=>H!==ae[ue]),Z=ae.some(H=>!oe(O[H]||[],F[H]||[]));(ie||Z)&&R(F)},[l,O,A,q,oe,p]);const D=a.useCallback(()=>{b(""),S(s.map(ne=>ne.value)),J(o.map(ne=>ne.value)),X(r.map(ne=>ne.value)),Re(Yr.map(ne=>ne.value)),te(y),de(!0);const F={};A.forEach(ne=>{F[ne.id]=ne.options.map(ae=>ae.value)}),R(F),re("created"),We("desc")},[s,o,r,A,y]),f=a.useCallback(F=>{te(ne=>{const ae=typeof F=="function"?F(ne):F,ie=Array.from(new Set(ae.filter(H=>typeof H=="string"&&H.trim().length>0))),Z=y.length>0&&y.every(H=>ie.includes(H));return de(Z),ie})},[y]),x=a.useMemo(()=>{const F=C(L,s.map(Z=>Z.value)),ne=C(U,r.map(Z=>Z.value)),ae=C(Array.from(new Set($.map(Z=>Number(Z)).filter(Z=>Number.isFinite(Z)))),o.map(Z=>Number(Z.value)).filter(Z=>Number.isFinite(Z))),ie=C(W,Yr.map(Z=>Z.value));return t.filter(Z=>{const H=er(Z).toLowerCase(),ue=Z.title.toLowerCase().includes(k.toLowerCase())||(Z.description?.toLowerCase()||"").includes(k.toLowerCase())||Z.id.toLowerCase().includes(k.toLowerCase())||H.includes(k.toLowerCase()),Pe=!q||F||L.includes(Z.category),se=!q||ae||Mu(Z.priority,$),$e=!q||ne||U.includes(Z.type||fs),et=!q||ie||W.includes(Z.status),tt=!q||xe||V.includes(Z.assignee||"unassigned"),Ct=Object.entries(O).every(([i,De])=>{const Je=A.find(yt=>yt.id===i);if(!Je)return!0;const Ie=Je?.options.every(yt=>De.includes(yt.value))??!0;if(Ie)return!0;const ht=Z.taxonomies?.[i];return ht?Array.isArray(ht)?ht.some(yt=>De.includes(yt)):De.includes(ht):Ie||De.includes("")});return ue&&Pe&&se&&$e&&et&&tt&&Ct}).sort((Z,H)=>eu(Z,H,z,be,d))},[t,n,k,L,$,U,W,V,xe,O,z,be,q,A,s,r,o,C,d]),P=a.useMemo(()=>{const F=C(L,s.map(Z=>Z.value)),ne=C(U,r.map(Z=>Z.value)),ae=C(Array.from(new Set($.map(Z=>Number(Z)).filter(Z=>Number.isFinite(Z)))),o.map(Z=>Number(Z.value)).filter(Z=>Number.isFinite(Z))),ie=C(W,Yr.map(Z=>Z.value));return t.filter(Z=>{const H=!q||F||L.includes(Z.category),ue=!q||ae||Mu(Z.priority,$),Pe=!q||ne||U.includes(Z.type||fs),se=!q||ie||W.includes(Z.status),$e=!q||xe||V.includes(Z.assignee||"unassigned"),et=Object.entries(O).every(([tt,Ct])=>{const i=A.find(Ie=>Ie.id===tt);if(!i)return!0;const De=i?.options.every(Ie=>Ct.includes(Ie.value))??!0;if(De)return!0;const Je=Z.taxonomies?.[tt];return Je?Array.isArray(Je)?Je.some(Ie=>Ct.includes(Ie)):Ct.includes(Je):De||Ct.includes("")});return H&&ue&&Pe&&se&&$e&&et})},[t,n,L,$,U,W,V,xe,O,q,A,s,r,o,C]),B=a.useMemo(()=>{const F=s.every(ie=>L.includes(ie.value)),ne=C(U,r.map(ie=>ie.value)),ae=C(Array.from(new Set($.map(ie=>Number(ie)).filter(ie=>Number.isFinite(ie)))),o.map(ie=>Number(ie.value)).filter(ie=>Number.isFinite(ie)));return n.filter(ie=>{const Z=er(ie).toLowerCase(),H=ie.title.toLowerCase().includes(k.toLowerCase())||(ie.description?.toLowerCase()||"").includes(k.toLowerCase())||ie.id.toLowerCase().includes(k.toLowerCase())||Z.includes(k.toLowerCase()),ue=!q||F||L.includes(ie.category),Pe=!q||ae||Mu(ie.priority,$),se=!q||ne||U.includes(ie.type||fs),$e=!q||xe||V.includes(ie.assignee||"unassigned"),et=Object.entries(O).every(([tt,Ct])=>{const i=A.find(Ie=>Ie.id===tt);if(!i)return!0;const De=i?.options.every(Ie=>Ct.includes(Ie.value))??!0;if(De)return!0;const Je=ie.taxonomies?.[tt];return Je?Array.isArray(Je)?Je.some(Ie=>Ct.includes(Ie)):Ct.includes(Je):De||Ct.includes("")});return H&&ue&&Pe&&se&&$e&&et}).sort((ie,Z)=>eu(ie,Z,z,be,d))},[n,k,L,$,U,V,xe,O,z,be,q,s,r,o,A,C,d]),Ae=a.useMemo(()=>{const F={};return x.forEach(ne=>{const ae=s.find(Z=>Z.value===ne.category),ie=ae?ae.label:ne.category||"General";F[ie]||(F[ie]=[]),F[ie].push(ne)}),F},[x,s]);return{searchQuery:k,setSearchQuery:b,filterCategories:L,setFilterCategories:S,filterPriorities:$,setFilterPriorities:J,filterTypes:U,setFilterTypes:X,filterStatus:W,setFilterStatus:Re,filterAssignees:V,setFilterAssignees:f,filterAssigneesAllSelected:xe,setFilterAssigneesAllSelected:de,filterTaxonomies:O,setFilterTaxonomies:R,hasInitedFilters:q,setHasInitedFilters:ee,sortBy:z,setSortBy:re,sortOrder:be,setSortOrder:We,toggleSortOrder:Ce,groupBy:Ve,setGroupBy:Fe,emptyColumnMode:ve,setEmptyColumnMode:Oe,collapsedCategories:v,setCollapsedCategories:M,clearFilters:D,filteredTasks:x,searchAgnosticTasks:P,filteredArchive:B,groupedTasks:Ae}}const ck=ik;function lk(t){const{activeCategories:n,activeTab:s,apiEndpoint:r,approach:o,assignee:d,attachments:l,attachmentsDirty:p,category:g,checklistItems:_,comments:w,complexity:A,description:y,dueDate:k,editingTaskId:b,fetchTasks:L,formTaxonomies:S,getPreferredCategoryValue:$,mergeTaskFromServer:J,workstreamInput:U,priority:X,pushNotice:q,queueWorkspaceSyncFromAuthoritativeTaskState:ee,relationshipTasks:W,resetForm:Re,resolveWorkstreamIdInput:V,scheduledDate:te,setActiveTab:xe,setAttachmentsDirty:de,setComments:O,setError:R,setLastUsedCategory:z,setLoading:re,setNewCommentText:be,status:We,title:Ce,taxonomies:Ve,type:Fe}=t,[ve,Oe]=a.useState(null),[v,M]=a.useState("idle"),[C,oe]=a.useState(null),D=a.useRef(null),f=a.useCallback(()=>JSON.stringify({title:Ce.trim(),description:y||"",category:typeof g=="string"?g:g.label||$(n),type:typeof Fe=="string"?Fe:Fe.label||fs,priority:Number(X),complexity:Number(A)||3,approach:o||"default",assignee:d||"agent",scheduledDate:te||"",dueDate:k||"",workstreamInput:U.trim(),checklistItems:_,comments:w,taxonomies:S,attachments:l}),[n,o,d,l,g,_,w,A,y,k,S,$,X,te,Ce,Fe,U]),x=a.useCallback(()=>{D.current!==null&&(window.clearTimeout(D.current),D.current=null)},[]),P=a.useCallback(async Z=>{const H=Z?.quiet??!1,ue=Z?.source??"manual";if(!Ce.trim())return R("Title is required"),b&&M(ue==="autosave"?"error":"idle"),!1;const Pe=Ve.filter(se=>se.isRequired).filter(se=>{const $e=S[se.id];return Array.isArray($e)?$e.filter(et=>String(et).trim().length>0).length===0:typeof $e!="string"&&typeof $e!="number"||String($e).trim().length===0}).map(se=>se.label);if(Pe.length>0)return R(`Required taxonomy values are missing: ${Pe.join(", ")}`),b&&M(ue==="autosave"?"error":"idle"),!1;if(b&&W.find($e=>$e.id===b)?.isArchived)return R("Archived tasks are read-only. Unarchive first to make changes."),M(ue==="autosave"?"error":"idle"),!1;re(!0),R(""),b&&M("saving");try{const se=b?`/api/taskforce/task/${b}`:r.replace("/api/dev/task","/api/taskforce/task").replace("/api/taskforce/task","/api/taskforce/task"),$e=b?"PATCH":"POST",et=typeof g=="string"?g:g.label||$(n),tt=typeof Fe=="string"?Fe:Fe.label||fs,Ct=U.trim()?V(U):null,i={title:Ce,description:y||null,category:et||$(n),type:tt,priority:X,complexity:Number(A)||3,status:b?void 0:We,completedAt:b?void 0:We==="done"?new Date().toISOString():null,approach:o||"default",assignee:d||"agent",scheduledDate:te||null,dueDate:k||null,workstreamId:U.trim()?Ct?.id||U.trim():null,checklistItems:_,comments:w,taxonomies:S,...b?{}:{createdAt:new Date().toISOString(),createdBy:"user"}};(!b||p)&&(i.attachments=l);const De=await fetch(se,{method:$e,headers:{"Content-Type":"application/json"},body:JSON.stringify(i)});if(!De.ok){const ht=(await De.json()).message||`Failed to ${b?"update":"save"} task`;return R(ht),H||q(ht,"error"),re(!1),b&&M("error"),!1}const Je=await De.json().catch(()=>null);return b&&Je&&typeof Je=="object"&&(J(Je),ee()),z(et),de(!1),re(!1),b&&M("saved"),!0}catch{return R("Failed to connect to server"),H||q("Failed to connect to server","error"),re(!1),b&&M("error"),!1}},[n,r,o,d,l,p,g,_,w,A,y,k,b,S,$,J,U,X,q,ee,V,de,R,z,re,te,We,Ce,Ve,Fe]),B=a.useCallback(async()=>{await P({source:"manual"})&&(b||q("Task added successfully","success"),s==="add"&&!b&&(Re(),xe("tasks"),await L()))},[s,b,L,q,Re,P,xe]);a.useEffect(()=>{if(x(),!b){oe(null),M("idle");return}oe(f()),M("idle")},[x,b]);const Ae=a.useCallback(async()=>{if(x(),!b||C===null)return;const Z=f();if(Z===C||!Ce.trim()||k&&te&&k<te)return;await P({quiet:!0,source:"autosave"})&&oe(Z)},[f,x,k,b,C,P,te,Ce]);a.useEffect(()=>{if(!b||C===null)return;const Z=f();if(Z!==C){if(!Ce.trim()){M("idle");return}if(k&&te&&k<te){M("error");return}return M(H=>H==="error"?"error":"idle"),x(),D.current=window.setTimeout(async()=>{await P({quiet:!0,source:"autosave"})&&oe(Z)},700),()=>{x()}}},[f,x,k,b,C,P,te,Ce]);const F=a.useCallback(async Z=>{if(Z.preventDefault(),k&&te&&k<te){Oe({dueDate:k,scheduledDate:te});return}await B()},[k,B,te]),ne=a.useCallback(async()=>{Oe(null),await B()},[B]),ae=a.useCallback(()=>{Oe(null)},[]),ie=a.useCallback(async Z=>{if(!b||!Z.trim())return;const H=Z.trim();try{const ue=await fetch(`/api/taskforce/task/${b}/comment`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({text:H,author:"user"})});if(!ue.ok){const $e=(await ue.json().catch(()=>({}))).error||"Failed to add comment.";R($e),q($e,"error");return}const Pe=await ue.json().catch(()=>null);if(be(""),Pe&&typeof Pe=="object"){const se=Qr(Pe);O(se.comments||[]),J(Pe),oe(f()),M("saved")}else await L(!0);ee()}catch(ue){console.error("Failed to add comment",ue),R("Failed to add comment."),q("Failed to add comment.","error")}},[b,L,f,J,q,ee,O,R,be]);return{autoSaveState:v,flushAutoSave:Ae,scheduleWarningPrompt:ve,saveTask:P,handleSubmit:F,confirmScheduleWarning:ne,cancelScheduleWarning:ae,handleAddComment:ie}}function dk(t){const{editingTaskId:n,fetchTasks:s,mergeTaskFromServer:r,workstreamInput:o,pushNotice:d,queueWorkspaceSyncFromAuthoritativeTaskState:l,relationshipTasks:p,resolveWorkstreamIdInput:g,setError:_}=t;return{handleSetWorkstreamForCurrentTask:a.useCallback(async A=>{if(!n)return;const y=p.find(S=>S.id===n);if(!y)return;const k=typeof A=="string"?A.trim():A===null?"":o.trim(),b=k?g(k):null,L=k.length>0?b?.id||k:null;if((y.workstreamId||null)===L){d(L?"Task already belongs to that workstream.":"Task is already standalone.","info");return}try{const S=await fetch(`/api/taskforce/task/${n}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({workstreamId:L})});if(!S.ok){const U=(await S.json().catch(()=>({}))).error||"Failed to set workstream.";_(U),d(U,"error");return}_(""),d(L?"Workstream set":"Workstream removed","info");const $=await S.json().catch(()=>null);$?(r($),l()):(await s(!0),l())}catch{_("Failed to set workstream."),d("Failed to set workstream.","error")}},[n,s,r,o,d,l,p,g,_])}}function uk({tasks:t,archivedTasks:n,editingTaskId:s,setTasks:r,setArchivedTasks:o,setDeletedTasks:d,setError:l,resetForm:p,setActiveTab:g,fetchTasks:_,fetchArchive:w,fetchDeletedTasks:A,mergeTaskFromServer:y,pushNotice:k,cloudAuthConfigured:b,runtimeMode:L,isAuthenticated:S,workspaceCloudSyncEnabled:$,buildWorkspaceSyncSignature:J,pushWorkspaceChangesToCloud:U,workspacePendingSignatureRef:X,workspaceDeletedTaskIdsRef:q}){const[ee,W]=a.useState(null),Re=a.useRef(null),V=a.useCallback((v=0)=>{b&&L==="local"&&S&&$&&(typeof window>"u"||window.setTimeout(()=>{const M=J();M&&(X.current=M,U(M))},Math.max(0,v)))},[b,L,S,$,J,X,U]),te=a.useCallback(async(v,M)=>{let C=await fetch(`/api/taskforce/deleted${v}`,M);return C.status===404&&(C=await fetch(`/api/taskforce/trash${v}`,M)),C},[]),xe=async(v,M=!1,C={})=>{if(!C.skipConfirm&&!confirm("Move this task to Trash? You can restore it later."))return!1;const oe=M||n.some(D=>D.id===v);try{const D=await fetch(`/api/taskforce/task/${v}`,{method:"DELETE"});if(!D.ok){const B=(await D.json().catch(()=>({}))).error||"Failed to delete task.";return l(B),k(B,"error"),!1}const f=await D.json().catch(()=>({})),x=f?.deleted&&typeof f.deleted=="object"&&f.deleted.taskSnapshot?{...f.deleted,taskSnapshot:Qr(f.deleted.taskSnapshot)}:null;if(window.location.search.includes(v)){const P=new URL(window.location.href);P.searchParams.delete("task"),window.history.pushState({},"",P.toString())}if(oe?o(P=>P.filter(B=>B.id!==v)):r(P=>P.filter(B=>B.id!==v)),x?d(P=>[x,...P.filter(B=>B.taskId!==v)]):await A(!0),q.current.add(v),b&&L==="local"&&S&&$){const P=J();X.current=P,U(P)}return s===v&&(p(),g("tasks")),l(""),k("Task moved to Trash.","info"),!0}catch(D){return console.error("Failed to delete task:",D),l("Failed to delete task."),k("Failed to delete task.","error"),!1}},de=a.useCallback(async v=>{try{const M=await te(`/${v}/restore`,{method:"POST"});if(!M.ok){const D=(await M.json().catch(()=>({}))).error||"Failed to restore deleted task.";return l(D),k(D,"error"),null}const C=await M.json().catch(()=>null);return C?y(C):await _(!0),d(oe=>oe.filter(D=>D.id!==v&&D.taskId!==v)),q.current.delete(v),V(),l(""),k("Task restored from Trash.","info"),C?Qr(C):null}catch(M){return console.error("Failed to restore deleted task:",M),l("Failed to restore deleted task."),k("Failed to restore deleted task.","error"),null}},[_,y,k,V,te,d,l]),O=a.useCallback(async v=>{try{const M=await te(`/${v}`,{method:"DELETE"});if(!M.ok){const oe=(await M.json().catch(()=>({}))).error||"Failed to permanently delete deleted task.";return l(oe),k(oe,"error"),!1}return d(C=>C.filter(oe=>oe.id!==v&&oe.taskId!==v)),V(),l(""),k("Deleted task permanently removed.","info"),!0}catch(M){return console.error("Failed to permanently delete deleted task:",M),l("Failed to permanently delete deleted task."),k("Failed to permanently delete deleted task.","error"),!1}},[k,V,te,d,l]),R=a.useCallback(async()=>{try{const v=await te("/empty",{method:"POST"});if(!v.ok){const D=(await v.json().catch(()=>({}))).error||"Failed to permanently delete deleted tasks.";return l(D),k(D,"error"),null}const M=await v.json().catch(()=>({})),C=Number(M?.deleted||0);return d([]),V(),l(""),k(C===1?"Deleted task permanently removed.":`${C} deleted tasks permanently removed.`,"info"),C}catch(v){return console.error("Failed to empty deleted tasks:",v),l("Failed to permanently delete deleted tasks."),k("Failed to permanently delete deleted tasks.","error"),null}},[k,V,te,d,l]),z=a.useCallback(async(v,M)=>{const C=t,oe=n;r(D=>D.map(f=>f.id===v?{...f,...M}:f)),o(D=>D.map(f=>f.id===v?{...f,...M}:f));try{const D=await fetch(`/api/taskforce/task/${v}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(M)});if(!D.ok){const P=(await D.json().catch(()=>({}))).error||`Failed to update task ${v}.`;l(P),k(P,"error"),r(C),o(oe);return}const f=await D.json().catch(()=>null);y(f),V(M.attachments!==void 0?150:0),l("")}catch(D){console.error("Failed to update task",D);const f=`Failed to update task ${v}.`;l(f),k(f,"error"),r(C),o(oe)}},[t,n,k,y,V]);return{copiedId:ee,handleDelete:xe,handleUpdateTask:z,handleToggleComplete:async v=>{const M=v.status==="done"?"task":"done";try{const C=M==="done"?new Date().toISOString():void 0,oe=await fetch(`/api/taskforce/task/${v.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:M,completedAt:C})});if(!oe.ok){const x=(await oe.json().catch(()=>({}))).error||"Failed to update task status.";l(x),k(x,"error"),await _(!0);return}const D=await oe.json().catch(()=>null);D?(y(D),V()):(await _(!0),V()),l("")}catch(C){console.error("Failed to toggle complete",C),l("Failed to update task status."),k("Failed to update task status.","error"),_()}},handleToggleCancel:async v=>{const M=v.status==="cancelled"?"task":"cancelled";try{const C=await fetch(`/api/taskforce/task/${v.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:M})});if(!C.ok){const f=(await C.json().catch(()=>({}))).error||"Failed to update task status.";l(f),k(f,"error"),await _(!0);return}const oe=await C.json().catch(()=>null);oe?(y(oe),V()):(await _(!0),V()),l("")}catch(C){console.error("Failed to toggle cancel",C),l("Failed to update task status."),k("Failed to update task status.","error"),_()}},handleToggleInProgress:async v=>{const M=v.status==="in-progress"?"task":"in-progress";r(C=>C.map(oe=>oe.id===v.id?{...oe,status:M}:oe));try{const C=await fetch(`/api/taskforce/task/${v.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:M})});if(!C.ok){await _(!0);return}const oe=await C.json().catch(()=>null);y(oe),V()}catch{_()}},handleToggleReview:async v=>{const M=v.status==="review"?"task":"review";r(C=>C.map(oe=>oe.id===v.id?{...oe,status:M}:oe));try{const C=await fetch(`/api/taskforce/task/${v.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({status:M})});if(!C.ok){await _(!0);return}const oe=await C.json().catch(()=>null);y(oe),V()}catch{_()}},handleArchiveTask:async v=>{try{const C=v.status==="cancelled"?"cancel":"complete",oe=await fetch(`/api/taskforce/task/${v.id}/${C}`,{method:"POST"});if(oe.ok){const D=await oe.json().catch(()=>null),f=[];if(D&&typeof D=="object"&&f.push(D),f.length>0){for(const P of f)y(P);V()}else w();const x=new Set(f.map(P=>String(P?.id||"").trim()).filter(P=>P.length>0));s&&x.has(s)&&(p(),g("tasks"))}else{const f=(await oe.json().catch(()=>({}))).error||"Failed to archive task.";l(f),k(f,"error")}}catch(M){console.error("Failed to archive",M),l("Failed to archive task."),k("Failed to archive task.","error")}},handleBulkArchive:async()=>{const v=t.filter(M=>M.status==="done"||M.status==="cancelled");if(v.length!==0&&confirm(`Archive ${v.length} completed/cancelled tasks?`))try{const M=await fetch("/api/taskforce/bulk-archive",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:v.map(C=>C.id)})});if(M.ok){const C=await M.json(),oe=Array.isArray(C?.results?.archived)?C.results.archived:[];if(oe.length>0){for(const D of oe)y(D);V()}else r(D=>D.filter(f=>!["done","cancelled"].includes(f.status))),w();k(`${C.archived||v.length} tasks archived`,"info"),l("")}else{const oe=(await M.json().catch(()=>({}))).error||"Failed to bulk archive tasks.";l(oe),k(oe,"error")}}catch(M){console.error("Failed to bulk archive",M),l("Failed to bulk archive tasks."),k("Failed to bulk archive tasks.","error")}},handleUnarchive:async v=>{try{const M=await fetch(`/api/taskforce/task/${v}/unarchive`,{method:"POST"});if(M.ok){const C=await M.json().catch(()=>null);C?(y(C),V()):(o(oe=>oe.filter(D=>D.id!==v)),await _(!0),V()),l(""),k("Task restored from archive.","info")}}catch(M){console.error("Failed to unarchive",M),l("Failed to unarchive task."),k("Failed to unarchive task.","error")}},handleRestoreDeletedTask:de,handlePermanentlyDeleteDeletedTask:O,handleEmptyDeletedTasks:R,handleCopyId:(v,M)=>{v.stopPropagation(),navigator.clipboard.writeText(M),W(M),Re.current!==null&&window.clearTimeout(Re.current),Re.current=window.setTimeout(()=>{Re.current=null,W(null)},2e3)},queueWorkspaceSyncFromAuthoritativeTaskState:V}}const pk=uk;function Od(t){return t==="/api/taskforce/auth/runtime-config"||t==="/api/taskforce/sync/workspace/apply-local"||t==="/api/taskforce/sync/workspace/repair-startup"}function mk(t){try{return typeof window>"u"?null:typeof t=="string"?new URL(t,window.location.origin):t instanceof URL?t:typeof Request<"u"&&t instanceof Request?new URL(t.url,window.location.origin):null}catch{return null}}function fk({currentWorkspaceIdRef:t,resolveApiUrl:n,runtimeMode:s}){a.useEffect(()=>{if(typeof window>"u"||typeof window.fetch!="function")return;const r=window.fetch.bind(window),o=d=>{if(typeof d=="string")return s!=="cloud"?d:d.startsWith("/api/taskforce")&&!Od(d)?n(d):d;if(d instanceof URL)return s!=="cloud"?d:d.origin===window.location.origin&&d.pathname.startsWith("/api/taskforce")?Od(d.pathname)?d:new URL(n(`${d.pathname}${d.search}${d.hash}`)):d;if(typeof Request<"u"&&d instanceof Request){if(s!=="cloud")return d;const l=new URL(d.url,window.location.origin);if(l.origin===window.location.origin&&l.pathname.startsWith("/api/taskforce"))return Od(l.pathname)?d:n(`${l.pathname}${l.search}${l.hash}`)}return d};return window.fetch=((d,l)=>{const p=o(d),g=mk(p);if(!!!(g&&g.pathname.startsWith("/api/taskforce")&&!Od(g.pathname)))return r(p,l);const w=String(t.current||"").trim();if(typeof Request<"u"&&p instanceof Request){const y=new Headers(p.headers);l?.headers&&new Headers(l.headers).forEach((L,S)=>y.set(S,L)),w&&w!=="default"&&!y.has("x-taskforce-workspace-id")&&(y.set("x-taskforce-workspace-id",w),y.set("x-taskforce-workspace-authoritative","1"));const k=new Request(p,{...l,headers:y});return r(k)}const A=new Headers(l?.headers);return w&&w!=="default"&&!A.has("x-taskforce-workspace-id")&&(A.set("x-taskforce-workspace-id",w),A.set("x-taskforce-workspace-authoritative","1")),r(p,{...l,headers:A})}),()=>{window.fetch=r}},[t,n,s])}function hk(t){const n=t.runtimeMode==="cloud",s=!!(t.shouldGateProtectedApiCalls&&n&&!t.authSessionResolved),r=!!(t.shouldGateProtectedApiCalls&&n&&t.authSessionResolved&&t.authRequiredForApi&&!t.isAuthenticated);return{shouldDeferProtectedApiCalls:s,shouldBlockProtectedApiCalls:r,canCallProtectedApi:!(s||r)}}function gk(t){return!!(!t.isOpen||!t.canCallProtectedApi||t.authBlocked||t.authRequiredForApi&&!t.isAuthenticated)}function yk(t){return!!(t.shouldGateProtectedApiCalls&&!t.authSessionResolved||t.authRequiredForApi&&!t.isAuthenticated)}const kk={},Kr=kp(kk),Uu=(()=>{const t=Kr.baseUrl,n=Kr.cloudAuthBaseUrl;if(n)return n;const s=Kr.apiBaseUrl;return s||t||"https://app.taskforcehq.ai"})(),Si=12e3;function Sk({config:t={},initialTaskId:n,onTaskCountChange:s,onClose:r}){const o={...Zh,...t},{categories:d,types:l,apiEndpoint:p,apiBaseUrl:g,cloudAuthBaseUrl:_,cloudMcpBaseUrl:w,wsBaseUrl:A,shortcut:y}=o,k=typeof window<"u"?String(window.location.hostname||"").trim().toLowerCase():"",b=k==="localhost"||k==="127.0.0.1"||k==="::1",L=typeof window<"u"&&!b,[S,$]=a.useState({cloudEnvironment:"",cloudBaseUrl:"",cloudMcpBaseUrl:"",baseUrl:"",apiBaseUrl:"",cloudAuthBaseUrl:"",wsBaseUrl:"",cloudAuthViaLocalProxy:!1,authSource:"",workspaceMode:"",workspaceSwitchingEnabled:null}),[J,U]=a.useState(!1),X=a.useCallback(m=>typeof m=="string"?m.trim().replace(/\/+$/,""):"",[]);a.useEffect(()=>{if(typeof window>"u"){U(!0);return}let m=!1;return(async()=>{try{const I=await fetch("/api/taskforce/auth/runtime-config",{method:"GET",credentials:"include"});if(!I.ok)return;const N=await I.json().catch(()=>({})),E=N?.config&&typeof N.config=="object"?N.config:{};if(m)return;const ye=String(E.runtimeMode||"").trim().toLowerCase()==="cloud"?"cloud":"local",qe=String(E.workspaceMode||"").trim(),_t=qe==="single-local"||qe==="multi-cloud"?qe:ye==="cloud"?"multi-cloud":"single-local",Ot=String(E.authSource||"").trim().toLowerCase()==="local"?"local":"cloud";$({cloudEnvironment:typeof E.cloudEnvironment=="string"?String(E.cloudEnvironment).trim().toLowerCase():"",cloudBaseUrl:X(E.cloudBaseUrl),cloudMcpBaseUrl:X(E.cloudMcpBaseUrl),baseUrl:X(E.baseUrl),apiBaseUrl:X(E.apiBaseUrl),cloudAuthBaseUrl:X(E.cloudAuthBaseUrl),wsBaseUrl:X(E.wsBaseUrl),cloudAuthViaLocalProxy:!!E.cloudAuthViaLocalProxy,authSource:Ot,workspaceMode:_t,workspaceSwitchingEnabled:typeof E.workspaceSwitchingEnabled=="boolean"?!!E.workspaceSwitchingEnabled:_t==="multi-cloud"})}catch{}finally{m||U(!0)}})(),()=>{m=!0}},[X]);const q=typeof window>"u"?"":b?Uu:"",ee=X(Kr.baseUrl),W=X(Kr.apiBaseUrl),Re=X(Kr.cloudBaseUrl),V=X(Kr.cloudMcpBaseUrl),te=X(Kr.cloudAuthBaseUrl),xe=X(Kr.wsBaseUrl),de=X(g),O=X(_),R=X(w),z=de||W||ee,re=S.apiBaseUrl||S.baseUrl,be=z||re||"",We=O||te||ee,Ce=S.cloudAuthBaseUrl||S.baseUrl,Ve=(We||Ce||be||q).trim().replace(/\/+$/,""),Fe=X(Cg(S.cloudMcpBaseUrl||S.cloudAuthBaseUrl||S.cloudBaseUrl||R||O||V||te||Re||Ve)),ve=(S.cloudMcpBaseUrl||R||Fe||S.cloudBaseUrl||V||Re||Ve||q).trim().replace(/\/+$/,""),Oe=!!Ve&&!be,v=J&&(!!(Ve||be)||L),M=v&&!Oe,C=!!(Ve||be||L),oe=L?"cloud":"local",D=a.useCallback(m=>!m||/^https?:\/\//i.test(m)||!be||!m.startsWith("/")?m:`${be}${m}`,[be]),f=a.useCallback(m=>{if(!m||/^https?:\/\//i.test(m)||!m.startsWith("/"))return m;const I=m.startsWith("/api/taskforce/auth/")||m.startsWith("/api/taskforce/sync/")||m.startsWith("/api/taskforce/settings/mcp/");if(!L&&I&&(!J||S.cloudAuthViaLocalProxy))return m;const N=Ve||be;if(N){const E=`${N}${m}`;if(typeof window<"u"&&!L&&I)try{if(new URL(E,window.location.origin).origin===window.location.origin)return`${Uu}${m}`}catch{return`${Uu}${m}`}return E}return m},[J,S.cloudAuthViaLocalProxy,Ve,be,L]),x=a.useCallback(m=>{const I=String(m||"").trim()||"/taskforce-ws",N=I.startsWith("/")?I:`/${I}`,E=String(A||S.wsBaseUrl||xe||be||"").trim().replace(/\/+$/,""),pe=typeof window<"u"?window.location.origin:"",ye=E||pe;if(!ye)return"";try{const qe=new URL(N,ye);return qe.protocol==="https:"&&(qe.protocol="wss:"),qe.protocol==="http:"&&(qe.protocol="ws:"),qe.toString()}catch{return""}},[A,S.wsBaseUrl,xe,be]),[P,B]=a.useState("tasks"),[Ae,F]=a.useState(!1),[ne,ae]=a.useState(!1),[ie,Z]=a.useState("open"),[H,ue]=a.useState(wc(o.theme)||qd),[Pe,se]=a.useState(wc(o.theme)||qd),[$e,et]=a.useState(!0),[tt]=a.useState(".taskforce"),Ct=!1,[i,De]=a.useState(!1),[Je,Ie]=a.useState([]),[ht,yt]=a.useState([]),[$t,Ht]=a.useState(""),[bn,nn]=a.useState(null),[Kt,_n]=a.useState(null),[qt,Hn]=a.useState(""),[on,Nn]=a.useState(""),Nt=a.useMemo(()=>hg({projectRoot:qt,runtimeMode:oe}),[qt,oe]),[Yt,Bn]=a.useState(""),[an,me]=a.useState(""),[Ee,Zt]=a.useState(()=>oe),Lt=Sg(Ee),Rn=S.workspaceMode==="single-local"||S.workspaceMode==="multi-cloud"?S.workspaceMode:Lt.workspaceMode,xt=typeof S.workspaceSwitchingEnabled=="boolean"?S.workspaceSwitchingEnabled:Lt.workspaceSwitchingEnabled,[G,ke]=a.useState(!1),[je,Te]=a.useState(!1),[Se,Qe]=a.useState(!1),[pt,Mt]=a.useState("anonymous"),[Rt,At]=a.useState(""),[Ut,nt]=a.useState(""),[Tt,kt]=a.useState(""),[Dn,Cn]=a.useState(!0),[ua,mt]=a.useState(null),[Ze,Wn]=a.useState(()=>{if(oe==="local")return"default";const m=Wd(Nt);return m&&m.toLowerCase()!=="default"?m:"default"}),Y=a.useMemo(()=>gg({projectRoot:qt,runtimeMode:Ee,workspaceId:Ze}),[qt,Ee,Ze]),[ze,Ne]=a.useState([]),[st,Le]=a.useState(()=>wi()),[Xe,xn]=a.useState(!1),[ft,Gn]=a.useState(!1),[Vn,pa]=a.useState("idle"),[An,va]=a.useState(null),[ln,gt]=a.useState(null),Dt=a.useRef(null),Pt=a.useRef(0),Bt=a.useRef(!1),Ye=a.useRef(Ze),Ke=a.useRef(null),Un=a.useRef(0),[Tn,sn]=a.useState(0),yn=a.useRef(null),Wt=a.useRef(null),Ds=a.useRef(null),hs=a.useRef(null),Fn=a.useRef(null),Jt=a.useRef(null),kn=a.useCallback((m,I)=>{const N=String(m||"").trim();if(!N)return;const E=String(Ye.current||"").trim();E&&E!==N&&(Un.current+=1,sn(Un.current)),Ye.current=N,I?.clearExplicitSelection!==!1&&(Ke.current=null),Wn(N)},[]);a.useEffect(()=>{Ye.current=Ze},[Ze]);const na=a.useCallback((m,I)=>{const N=String(m||"").trim();N&&Wn(E=>{const pe=String(Ke.current||"").trim();let ye=N;if(pe&&pe!==N)ye=pe;else{const qe=String(E||"").trim();I?.preserveNonDefaultDefault&&N==="default"&&qe&&qe.toLowerCase()!=="default"&&(ye=qe)}return Ye.current=ye,ye})},[]),zt=a.useCallback(()=>({workspaceId:String(Ye.current||"default").trim()||"default",epoch:Un.current}),[]),In=a.useCallback(m=>(String(Ye.current||"default").trim()||"default")!==m.workspaceId||Un.current!==m.epoch,[]),Xt=a.useCallback(m=>Un.current!==m.epoch,[]),On=a.useCallback(m=>m instanceof DOMException?m.name==="AbortError":String(m?.name||"").toLowerCase()==="aborterror",[]),hn=a.useCallback(()=>{[yn,Wt,Ds,hs,Fn,Jt].forEach(m=>{m.current?.abort("workspace-transition"),m.current=null}),gr.current=null},[]),Zn=a.useMemo(()=>hk({shouldGateProtectedApiCalls:M,runtimeMode:Ee,authSessionResolved:ft,authRequiredForApi:G,isAuthenticated:Se}),[M,Ee,ft,G,Se]),Qt=Zn.shouldDeferProtectedApiCalls,dn=Zn.shouldBlockProtectedApiCalls,[rt,Oa]=a.useState(null),[aa,$a]=a.useState(null),[qn,gs]=a.useState(!1),[wa,sa]=a.useState("unknown"),[ba,ja]=a.useState(null),[Mn,en]=a.useState(o.shortcut||"Alt+T"),[ma,fa]=a.useState(o.priorities||[]),[Ja]=a.useState(Wm()),[Na,ys]=a.useState(""),[nr,Ra]=a.useState(!1),[eo,Q]=a.useState(!1),[ot,rn]=a.useState(!0),[wt,Sn]=a.useState(()=>pg()),ct=a.useMemo(()=>ug(),[]),[jn,ea]=a.useState(()=>{try{return(Intl.DateTimeFormat().resolvedOptions().locale||"").toLowerCase().startsWith("en-us")?"sunday":"monday"}catch{return"monday"}}),[ha,ra]=a.useState(!1),[ks,$n]=a.useState(!0),[Da,as]=a.useState(!0),[Xa,oa]=a.useState(""),[Ua,Qa]=a.useState(null);fk({currentWorkspaceIdRef:Ye,resolveApiUrl:D,runtimeMode:Ee});const{availableWorkflows:Ca,initiativeTemplates:ss,fetchWorkflows:Ps,fetchInitiativeTemplates:ar,fetchWorkflowTemplate:rs,fetchWorkflowOverrideNames:sr,saveWorkflowTemplateDraft:ia,resetWorkflowTemplateDraft:xa}=$y({shouldDeferProtectedApiCalls:Qt,shouldBlockProtectedApiCalls:dn}),{zenMode:Es,setZenModeState:to,toggleZenMode:_r}=Uy(),{exportEnvironment:Ue,setExportEnvironment:Ft,availableEnvironments:za,loadAvailableEnvironments:_a,exportWorkflowsPath:Ss,setExportWorkflowsPath:Po,exportingResource:Eo,exportResult:j,handleExportWorkflows:le}=By({storagePath:tt}),[He,_e]=a.useState(!1),[K,Me]=a.useState(null),{uiNotice:bt,pushNotice:St,clearNotice:os}=My(),[Pn,gn]=a.useState([]),Us=a.useRef(null),[rr,Cr]=a.useState(0),Ni=a.useCallback(m=>!m||!qt?m:m.startsWith(qt)?m.slice(qt.length).replace(/^[/\\]+/,""):m,[qt]),[Kn,or]=a.useState([]),[ga,Aa]=a.useState([]),[Lc,Ri]=a.useState([]),[zs,Di]=a.useState([]),[Ls,no]=a.useState([]),[Lo,ao]=a.useState(!1),[is,Ul]=a.useState(null),[Mo,Pi]=a.useState(!1),[vs,Bo]=a.useState([]),[Ha,Wo]=a.useState(!1),[Fo,zl]=a.useState({}),xr=a.useRef({authSessionResolved:!1,configLoaded:!1,workspaceBootstrapPending:!1});a.useEffect(()=>{xr.current={authSessionResolved:ft,configLoaded:Ha,workspaceBootstrapPending:Xe}},[ft,Ha,Xe]);const Ga=a.useCallback(m=>{pa(m),m!=="ready"&&(va(null),gt(Date.now()))},[]),Pa=a.useCallback(m=>{const I=xr.current;I.authSessionResolved&&I.configLoaded&&!I.workspaceBootstrapPending||(pa("stalled"),va(m),gt(N=>N??Date.now()))},[]),ws=a.useCallback(async(m,I,N=Si,E)=>{const pe=new AbortController,ye=E?.signal,qe=Number(N)>0?Number(N):Si,_t=typeof window<"u"?window.setTimeout(()=>pe.abort("bootstrap-timeout"),qe):null,Et=()=>{pe.abort(ye?.reason||"external-abort")};ye&&(ye.aborted?Et():ye.addEventListener("abort",Et,{once:!0}));try{return await fetch(m,{...I||{},signal:pe.signal})}catch(Ot){if(Ot instanceof DOMException?Ot.name==="AbortError":String(Ot?.name||"").toLowerCase()==="aborterror"){const tn=new Error(`Startup checks timed out after ${qe}ms.`);throw tn.name="BootstrapTimeoutError",tn}throw Ot}finally{ye&&ye.removeEventListener("abort",Et),_t!==null&&typeof window<"u"&&window.clearTimeout(_t)}},[]),ya=a.useCallback(m=>String(m?.name||"")==="BootstrapTimeoutError",[]),[Ar,Mc]=a.useState([]),[ir,Oo]=a.useState({}),[es,Bc]=a.useState(o.taxonomies||[]),mn=a.useMemo(()=>(vs.length>0?vs:d||[]).map(I=>typeof I=="string"?{value:I.toLowerCase().replace(/\s+/g,"-"),label:I}:I).sort((I,N)=>I.label.localeCompare(N.label)),[vs,d]),ta=a.useMemo(()=>({categories:mn,types:Ar,priorities:ma,taxonomies:es,displayLabels:ir}),[mn,Ar,ma,es,ir]);a.useMemo(()=>mn.filter(m=>!m.disabled),[mn]);const Va=a.useCallback(m=>m.find(N=>N.value==="default"||N.value==="general"||N.label==="General"||N.value==="Taskforce"||N.label==="Taskforce")?.value||m[0]?.value||"default",[]),Yn=Ar.length>0?Ar:l,[Tr,Wc]=a.useState(!1),[Hl,Jn]=a.useState(""),Ea="Authentication required. Sign in to continue.",[Ms,ca]=a.useState(!1),[so,cs]=a.useState(!1),La=a.useCallback(()=>{Te(Ee==="cloud"),Qe(!1),nt(""),kt(""),Jn(Ea)},[Ea,Ee]),{recentlyChangedTaskIds:cr,fetchTasks:ro,fetchArchive:lr,refreshTaskCollections:oo,refreshTaskCollectionsFromInvalidation:dr,mergeTaskFromServer:$o}=Hy({tasks:Kn,archivedTasks:ga,setTasks:or,setArchivedTasks:Aa,setLoadingTasks:ao,getCurrentWorkspaceId:()=>Ye.current,workspaceResetKey:`${Ze}:${Tn}`,shouldDeferProtectedApiCalls:Qt,shouldBlockProtectedApiCalls:dn,handleUnauthorized:La,authRequiredForApi:G});a.useEffect(()=>{Tn!==0&&(hn(),gr.current=null,ri.current="",Wr.current="",oi.current="",hr.current="",ii.current="",go.current="",ci(!1),ca(!1),Le(wi()),cs(!1),no([]),or([]),Aa([]),Ri([]),Di([]),ao(!1),Cs.current!==null&&typeof window<"u"&&(window.clearTimeout(Cs.current),Cs.current=null),Xn.current!==null&&typeof window<"u"&&(window.clearTimeout(Xn.current),Xn.current=null))},[hn,Aa,ao,or,Tn]);const Za=a.useCallback(async(m=!1,I)=>{if(!(I?.ignoreAuthGuard===!0)&&(Qt||dn))return;m||ao(!0);const E=zt(),pe=new AbortController;Fn.current=pe;try{let ye=await fetch("/api/taskforce/deleted",{signal:pe.signal});if(ye.status===404&&(ye=await fetch("/api/taskforce/trash",{signal:pe.signal})),ye.status===401){La(),no([]);return}if(ye.status===404){no([]);return}if(ye.ok){const qe=await ye.json();if(In(E))return;const _t=Array.isArray(qe?.deleted)?qe.deleted.map(Et=>{const Ot=Et?.taskSnapshot&&typeof Et.taskSnapshot=="object"?Qr(Et.taskSnapshot):null;return Ot?{...Et,taskSnapshot:Ot}:null}).filter(Et=>!!Et):[];no(_t)}}catch(ye){if(On(ye))return;console.error("[Taskforce] Failed to fetch deleted tasks:",ye)}finally{Fn.current===pe&&(Fn.current=null),m||ao(!1)}},[zt,La,On,In,Qt,dn]),cn=a.useCallback(async m=>{if(!(m?.ignoreAuthGuard===!0)&&(Qt||dn))return;const N=zt(),E=new AbortController;Jt.current=E;try{const[pe,ye]=await Promise.all([fetch("/api/taskforce/initiatives",{signal:E.signal}),fetch("/api/taskforce/workstreams",{signal:E.signal})]);if(pe.status===401||ye.status===401){La(),Ri([]),Di([]);return}const[qe,_t]=await Promise.all([pe.ok?pe.json().catch(()=>[]):[],ye.ok?ye.json().catch(()=>[]):[]]);if(In(N))return;Ri(Array.isArray(qe)?qe.filter(Et=>!!(Et&&typeof Et=="object"&&typeof Et.id=="string")):[]),Di(Array.isArray(_t)?_t.filter(Et=>!!(Et&&typeof Et=="object"&&typeof Et.id=="string")):[])}catch(pe){if(On(pe))return;console.error("[Taskforce] Failed to fetch planning entities:",pe)}finally{Jt.current===E&&(Jt.current=null)}},[zt,La,On,In,Qt,dn]),vn=a.useCallback(async(m=!1,I)=>{await ro(m,I)},[ro]),Ma=a.useCallback(async(m=!1,I)=>{await lr(m,I)},[lr]),ur=a.useCallback(async m=>{const I=m?.isSilent!==!1,N=m?.ignoreAuthGuard===!0;await Promise.all([oo({isSilent:I,ignoreAuthGuard:N}),Za(I,{ignoreAuthGuard:N}),cn({ignoreAuthGuard:N})])},[Za,cn,oo]),bs=a.useCallback(async()=>{await dr(),await Za(!0),await cn()},[Za,cn,dr]),En=a.useCallback(async m=>{const I=m?.force===!0;if(Ga("auth"),!J)return Bt.current;if(!v)return Zt("local"),ke(!1),Qe(!1),Mt("anonymous"),At(""),Cl(null),nt(""),kt(""),Uo("disconnected"),zo(null),Cn(!0),Ne([]),mt(null),Le(wi()),Te(!1),Gn(!0),Bt.current=!1,Pt.current=Date.now(),!1;const N=f("/api/taskforce/auth/session"),E=Date.now();if(!I&&Dt.current)return Dt.current;if(!I&&ft&&E-Pt.current<1500)return Bt.current;const pe=(async()=>{const ye=typeof performance<"u"?performance.now():Date.now(),qe=new AbortController,_t=typeof window<"u"?window.setTimeout(()=>qe.abort(),8e3):null;try{const Et=await fetch(N,{method:"GET",credentials:"include",mode:"cors",signal:qe.signal});if(Et.status===429)return Gn(!0),Bt.current;if(!Et.ok)return b&&Cl(null),Gn(!0),Bt.current=!1,!1;const Ot=await Et.json(),It=!!Ot.authRequiredForApi,tn=!!Ot.authenticated,Ts=tn?Ot.betaAccess!==!1:!0,zr=typeof Ot.workspaceId=="string"&&Ot.workspaceId.trim().length>0?Ot.workspaceId.trim():"",Is=typeof Ot.userId=="string"&&Ot.userId.trim().length>0?Ot.userId.trim():"anonymous",Hr=typeof Ot.email=="string"&&Ot.email.trim().length>0?Ot.email.trim().toLowerCase():"",wn=typeof Ot.displayName=="string"?Ot.displayName.trim():"",gi=Ee==="local",Io=Ee==="local"||Oe;return ke(Oe||gi?!1:It),Qe(tn),Mt(tn?Is:"anonymous"),At(tn?zr:""),b&&Cl(tn?Is:null),nt(tn?Hr:""),kt(tn?wn:""),tn&&Jn(kc=>kc===Ea?"":kc),Uo(tn?"idle":"disconnected"),zo(null),Cn(Ts),Io||na(zr||Wd(Nt)||"default"),Te(Oe||gi?!1:It&&!tn),Gn(!0),Bt.current=tn,Ya("auth_session_resolved",{authenticated:tn,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-ye)}),tn&&Ga("ready"),tn}catch{return b&&Cl(null),Gn(!0),Bt.current=!1,Ya("auth_session_failed",{durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-ye)}),Pa("Unable to verify your session."),Bt.current}finally{_t!==null&&typeof window<"u"&&window.clearTimeout(_t),Pt.current=Date.now(),Dt.current=null}})();return Dt.current=pe,pe},[J,v,ft,f,Oe,Ea,Ee,na,Nt,Ga,Pa]),{userGlobalSyncStatus:du,setUserGlobalSyncStatus:Uo,userGlobalSyncError:uu,setUserGlobalSyncError:zo,workspaceLastPullAt:Ba,workspaceLastPushAt:Ir,workspaceLastErrorAt:jr,workspaceLastErrorMessage:Ho,workspaceLastSuccessfulSyncAt:pu,workspaceCloudSyncEnabled:Go,workspaceSyncPhase:io,workspaceSyncStatus:mu,workspaceSyncSummary:Gl,workspaceSyncRecommendedAction:Vl,workspaceSyncBusy:Zl,workspaceSyncPendingChanges:Fc,workspacePendingSignatureRef:ql,workspaceDeletedTaskIdsRef:Oc,loadWorkspaceSyncState:Hs,applyWorkspaceSyncStateSnapshot:Vo,syncUserGlobalSettings:Gs,buildWorkspaceSyncSignature:$c,pushWorkspaceChangesToCloud:Ei,saveWorkspaceCloudSyncSettings:Nr,retryUserGlobalSettingsSync:la,retryWorkspaceCloudSync:Rr,resetWorkspaceSyncCursorAndPull:Zo,getWorkspaceSyncDiagnostics:Li}=Ey({currentWorkspaceId:Ze,cloudAuthConfigured:C,runtimeMode:Ee,authSessionResolved:ft,isAuthenticated:Se,authUserId:pt,projectName:on,resolveCloudAuthUrl:f,resolveWebSocketUrl:x,realtimeSyncEnabled:qn,tasks:Kn,archivedTasks:ga,initiatives:Lc,workstreams:zs,taxonomies:es,taxonomyState:Ms?ta:void 0,setupState:rt,globalTheme:Pe,locale:wt,globalWeekStartsOn:jn,themeUseGlobalDefault:$e,setTasks:or,setArchivedTasks:Aa,setAuthBlocked:Te,setIsAuthenticated:Qe,checkAuthSession:En,setGlobalTheme:se,setCurrentTheme:ue,setSetupState:Oa,setLocale:Sn,setGlobalWeekStartsOn:ea,fetchPlanningEntities:cn}),Mi=a.useCallback((m=Yn)=>m.find(I=>String(I.value||"").trim().length>0)?.value||fs,[Yn]),[Bs,Dr]=a.useState(()=>Va(mn)),[qo,Bi]=a.useState(()=>Mi(Yn)),[Ko,ts]=a.useState(2),[Vs,Kl]=a.useState(3),[Yl,ls]=a.useState("task"),[Wi,Fi]=a.useState("default"),[Yo,Uc]=a.useState("unassigned"),[zc,Pr]=a.useState(""),[Oi,Jl]=a.useState(""),[pr,Jo]=a.useState(""),[Xo,at]=a.useState(""),[$i,Hc]=a.useState(""),[co,Gc]=a.useState([]),[Qo,Ui]=a.useState([]),[Xl,Vc]=a.useState(""),[ds,ka]=a.useState({}),zi=a.useRef(null),[Zc,Er]=a.useState(!1),[ei,Ql]=a.useState("");a.useEffect(()=>{if(is)return;const m=String(qo||"").trim();Yn.some(N=>String(N.value||"").trim()===m)||Bi(Mi(Yn))},[Yn,is,Mi,qo]);const{searchQuery:Hi,setSearchQuery:ti,filterCategories:mr,setFilterCategories:lo,filterPriorities:Gi,setFilterPriorities:Vi,filterTypes:qc,setFilterTypes:ed,filterStatus:Lr,setFilterStatus:Zs,filterAssignees:Wa,setFilterAssignees:uo,filterAssigneesAllSelected:Mr,setFilterAssigneesAllSelected:Kc,filterTaxonomies:po,setFilterTaxonomies:Zi,hasInitedFilters:qi,setHasInitedFilters:td,sortBy:Ki,setSortBy:Yi,sortOrder:Ji,setSortOrder:_s,toggleSortOrder:nd,groupBy:mo,setGroupBy:Yc,emptyColumnMode:Jc,setEmptyColumnMode:Xi,collapsedCategories:qa,setCollapsedCategories:ad,clearFilters:sd,filteredTasks:rd,searchAgnosticTasks:Xc,filteredArchive:od,groupedTasks:Qc}=ck({tasks:Kn,archivedTasks:ga,activeCategories:mn,activeTypes:Yn,priorities:ma,taxonomies:es,configLoaded:Ha,referenceDataLoaded:Ms,assigneeOptionsLoaded:so,assigneeOptions:st}),[ni,fo]=a.useState("tasks"),[id,cd]=a.useState(!1),[el,fu]=a.useState(!1),[Qi,tl]=a.useState(!1),[ai,Br]=a.useState([]),[ho,ec]=a.useState(!1),fr=a.useRef(null),Cs=a.useRef(null),Xn=a.useRef(null),tc=a.useRef(!1),nl=a.useRef(ft),si=a.useRef(G),ld=a.useRef(Se),qs=a.useRef(!1),ri=a.useRef(""),Wr=a.useRef(""),oi=a.useRef(""),hr=a.useRef(""),ii=a.useRef(""),go=a.useRef(""),al=a.useRef(!1),gr=a.useRef(null),Ks=a.useRef(!1),[sl,ci]=a.useState(!1),{handleSaveSettings:Ys,handleSaveTheme:hu,handleSaveGlobalTheme:li,handleJsonBackupEnabledChange:dd,handleSaveGlobalJsonBackupEnabled:ud,handleSaveGlobalWeekStartsOn:gu,handleSaveLocale:pd,handleManualComplexityEnabledChange:yu,handleChecklistDropdownEnabledChange:md,handleShowTaskCardStatusLabelChange:ku,handleResetProjectToGlobal:xs}=Fy({keyShortcut:Mn,themeUseGlobalDefault:$e,runtimeMode:Ee,jsonBackupUseGlobalDefault:ot,globalTheme:Pe,globalJsonBackupEnabled:eo,setCurrentTheme:ue,setThemeUseGlobalDefault:et,setGlobalTheme:se,setJsonBackupEnabled:Ra,setJsonBackupUseGlobalDefault:rn,setGlobalJsonBackupEnabled:Q,setGlobalWeekStartsOn:ea,setLocale:Sn,setManualComplexityEnabled:ra,setChecklistDropdownEnabled:$n,setShowTaskCardStatusLabel:as,setShowChecklist:Er});a.useEffect(()=>{Ee==="cloud"&&Nt!==Ro&&Wg(Ze,Nt)},[Ee,Ze,Nt]),a.useEffect(()=>{nl.current=ft,si.current=G,ld.current=Se},[ft,G,Se]);const yo=a.useCallback(m=>{if(!m)return;const I=Array.isArray(m.filterCategories)||Array.isArray(m.filterPriorities)||Array.isArray(m.filterTypes)||Array.isArray(m.filterStatus)||Array.isArray(m.filterAssignees)||typeof m.filterAssigneesAllSelected=="boolean"||m.filterTaxonomies&&typeof m.filterTaxonomies=="object";typeof m.activeWorkspaceModule=="string"?fo(m.activeWorkspaceModule):m.groupBy==="docs"&&fo("docs"),m.groupBy&&m.groupBy!=="docs"&&Yc(m.groupBy),(m.emptyColumnMode==="show"||m.emptyColumnMode==="collapse"||m.emptyColumnMode==="hide")&&Xi(m.emptyColumnMode),typeof m.zenMode=="boolean"&&to(m.zenMode),typeof m.searchQuery=="string"&&ti(m.searchQuery),Array.isArray(m.filterCategories)&&lo(m.filterCategories),Array.isArray(m.filterPriorities)&&Vi(m.filterPriorities),Array.isArray(m.filterTypes)&&ed(m.filterTypes),Array.isArray(m.filterStatus)&&Zs(m.filterStatus),Array.isArray(m.filterAssignees)&&uo(m.filterAssignees),typeof m.filterAssigneesAllSelected=="boolean"&&Kc(m.filterAssigneesAllSelected),m.filterTaxonomies&&typeof m.filterTaxonomies=="object"&&Zi(m.filterTaxonomies),(m.sortBy==="created"||m.sortBy==="priority"||m.sortBy==="updated"||m.sortBy==="complexity")&&Yi(m.sortBy),(m.sortOrder==="asc"||m.sortOrder==="desc")&&_s(m.sortOrder),typeof m.hasInitedFilters=="boolean"?td(m.hasInitedFilters):I&&td(!0),typeof m.showChecklist=="boolean"&&Er(m.showChecklist),typeof m.lastCategory=="string"&&Ql(m.lastCategory),typeof m.exportEnvironment=="string"&&m.exportEnvironment.trim().length>0&&Ft(m.exportEnvironment.trim())},[]),ko=a.useCallback(async m=>{const I=String(m||Ye.current||Ze||"default").trim()||"default",N=`${Ee}:${Y}:${I}`;try{const E=await fetch(`/api/taskforce/ui-state?key=app&workspaceId=${encodeURIComponent(I)}`,{method:"GET",credentials:"include"}),pe=E.ok?await E.json().catch(()=>({})):{},ye=pe?.state&&typeof pe.state=="object"?pe.state:null,qe=Up(Y),_t=ye||qe?{...qe||{},...ye||{}}:null;if(Ye.current!==I)return;yo(_t),ri.current=N}catch{const E=Up(Y);Ye.current===I&&(yo(E),ri.current=N)}finally{if(Ye.current!==I)return;al.current=!0,ci(!0)}},[yo,Ze,Ee,Y]);a.useEffect(()=>{const m=`${Ee}:${Y}:${Ze}`;qs.current&&ri.current!==m&&(ci(!1),ko(Ze))},[Ze,ko,Ee,Y]),a.useEffect(()=>{if(!sl)return;if(al.current){al.current=!1;return}const m={groupBy:mo,activeWorkspaceModule:ni,emptyColumnMode:Jc,zenMode:Es,searchQuery:Hi,filterCategories:mr,filterPriorities:Gi,filterTypes:qc,filterStatus:Lr,filterAssignees:Wa,filterAssigneesAllSelected:Mr,filterTaxonomies:po,sortBy:Ki,sortOrder:Ji,hasInitedFilters:qi,showChecklist:Zc,lastCategory:ei||"",exportEnvironment:Ue};Fg(m,Y);const I=window.setTimeout(async()=>{try{await fetch("/api/taskforce/ui-state",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({stateKey:"app",workspaceId:Ye.current,patch:m})})}catch{}},250);return()=>window.clearTimeout(I)},[sl,mo,ni,Jc,Es,Hi,mr,Gi,qc,Lr,Wa,Mr,po,Ki,Ji,qi,Zc,ei,Ue,Y]);const rl=a.useCallback(m=>{const I=m.runtimeMode==="cloud"?"cloud":"local",N=!!m.authRequiredForApi,E=typeof m.userId=="string"&&m.userId.trim().length>0?m.userId.trim():"anonymous",pe=I==="cloud"&&E!=="anonymous";if(Zt(I),ke(N),pe&&(Qe(!0),Mt(E),Te(!1),ft||Gn(!0)),typeof m.workspaceId=="string"&&m.workspaceId.trim().length>0){const tn=m.workspaceId.trim();I==="local"?kn(tn):na(tn,{preserveNonDefaultDefault:!0})}Te(I==="cloud"&&N?!(pe||Se):!1),m.setupState&&typeof m.setupState=="object"?Oa(m.setupState):Oa(null),m.runtimeCapabilities&&typeof m.runtimeCapabilities=="object"?$a(m.runtimeCapabilities):$a(null),gs(!!m.realtimeSyncEnabled);const ye=String(m.realtimeSyncFlagSource||"").trim().toLowerCase();sa(ye==="env"||ye==="settings"||ye==="default"?ye:"unknown"),typeof m.shortcut=="string"&&m.shortcut.trim().length>0&&en(m.shortcut);const qe=wc(m.theme);qe&&ue(qe);const _t=wc(m.globalTheme);_t&&se(_t),typeof m.themeUseGlobalDefault=="boolean"&&et(m.themeUseGlobalDefault);const Et=m.runtimeMode==="cloud"?"cloud":"local";typeof m.projectRoot=="string"?Hn(m.projectRoot):Et==="cloud"&&Hn(""),typeof m.tenantId=="string"?me(m.tenantId.trim()):Et==="cloud"&&me("");const Ot=Et==="cloud"?String(m.projectName||"").trim():m.projectName||m.paths?.projectName||"";(String(Ot||"").trim().length>0||Et==="cloud")&&Nn(Ot),typeof m.mcpScript=="string"?Bn(m.mcpScript):Et==="cloud"&&Bn(""),typeof m.hostRoot=="string"?oa(m.hostRoot):Et==="cloud"&&oa(""),typeof m.jsonBackupEnabled=="boolean"&&Ra(m.jsonBackupEnabled),typeof m.globalJsonBackupEnabled=="boolean"&&Q(m.globalJsonBackupEnabled),typeof m.jsonBackupUseGlobalDefault=="boolean"&&rn(m.jsonBackupUseGlobalDefault);const It=m?.schedulePreferences?.weekStartsOn;(It==="sunday"||It==="monday")&&ea(It),typeof m.manualComplexityEnabled=="boolean"&&ra(m.manualComplexityEnabled),typeof m.checklistDropdownEnabled=="boolean"?$n(m.checklistDropdownEnabled):$n(!0),typeof m.showTaskCardStatusLabel=="boolean"?as(m.showTaskCardStatusLabel):as(!0)},[na,ft,kn,Se]),ol=a.useCallback(async()=>{const m=typeof performance<"u"?performance.now():Date.now();try{const I=await ws("/api/taskforce/version",void 0,Si);if(!I.ok)return;const N=await I.json().catch(()=>({}));N?.build&&typeof N.build=="object"&&ja({version:String(N.build.version||""),gitSha:N.build.gitSha?String(N.build.gitSha):null,buildTime:N.build.buildTime?String(N.build.buildTime):null,deployId:N.build.deployId?String(N.build.deployId):null}),Ya("build_info_loaded",{durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-m)})}catch(I){ya(I)&&Pa("Startup checks timed out.")}},[ws,ya,Pa]),Fr=a.useCallback(async m=>{const I=m?.ignoreAuthGuard===!0,N=m?.force===!0;if(!I&&(Qt||dn))return;const E=zt();if(!N&&gr.current?.workspaceId===E.workspaceId){await gr.current.promise;return}ca(!1);const pe=new AbortController;Wt.current=pe;const ye=(async()=>{const qe=typeof performance<"u"?performance.now():Date.now();await Promise.allSettled([(async()=>{const _t=await fetch("/api/taskforce/taxonomy-state",{signal:pe.signal});if(!_t.ok)return;const Et=await _t.json().catch(()=>({}));if(!vg(Et)){const[tn,Ts,zr,Is]=await Promise.all([fetch("/api/taskforce/categories",{signal:pe.signal}),fetch("/api/taskforce/types",{signal:pe.signal}),fetch("/api/taskforce/priorities",{signal:pe.signal}),fetch("/api/taskforce/taxonomies",{signal:pe.signal})]),[Hr,wn,gi,Io]=await Promise.all([tn.ok?tn.json().catch(()=>({})):Promise.resolve({}),Ts.ok?Ts.json().catch(()=>({})):Promise.resolve({}),zr.ok?zr.json().catch(()=>({})):Promise.resolve({}),Is.ok?Is.json().catch(()=>({})):Promise.resolve({})]);Et.categories=Hr.categories,Et.types=wn.types,Et.priorities=gi.priorities,Et.taxonomies=Io.taxonomies}const It=wg(Et);In(E)||(It.categories.length>0&&Bo(It.categories),It.types.length>0&&Mc(It.types),It.priorities.length>0&&fa(It.priorities),Bc(It.taxonomies),Oo(It.displayLabels||{}))})(),(async()=>{await Ps()})(),(async()=>{await ar()})(),(async()=>{await _a()})()]),!In(E)&&(ca(!0),Ya("reference_data_loaded",{durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-qe)}))})();gr.current={workspaceId:E.workspaceId,promise:ye};try{await ye}catch(qe){if(!On(qe))throw qe}finally{gr.current?.promise===ye&&(gr.current=null),Wt.current===pe&&(Wt.current=null)}},[Ps,ar,zt,On,In,_a,Qt,dn]),Ws=a.useCallback(async m=>{if(!(m?.ignoreAuthGuard===!0)&&(Qt||dn))return;Ga("config");const N=zt(),E=new AbortController;yn.current=E;const pe=typeof performance<"u"?performance.now():Date.now();try{const ye=await ws("/api/taskforce/config",void 0,Si,{signal:E.signal});if(Xt(N))return;if(ye.status===401){La(),Wo(!0);return}let qe="";if(ye.ok){const _t=await ye.json();if(Xt(N))return;qe=typeof _t?.workspaceId=="string"&&_t.workspaceId.trim().length>0?_t.workspaceId.trim():"",rl(_t)}if(Xt(N)){const _t=String(Ye.current||"default").trim()||"default";if(!qe||_t!==qe)return}if(!qs.current){const _t=qe||N.workspaceId;qs.current=!0,await ko(_t)}if(Xt(N)){const _t=String(Ye.current||"default").trim()||"default";if(!qe||_t!==qe)return}Wo(!0),Ga("ready"),Ya("bootstrap_config_loaded",{durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-pe)}),ol()}catch(ye){if(On(ye)||Xt(N))return;qs.current||(qs.current=!0,await ko(N.workspaceId)),ya(ye)?Pa("Startup checks timed out."):Pa("Unable to finish startup checks."),Wo(!0)}finally{yn.current===E&&(yn.current=null)}},[rl,ol,ws,zt,La,On,ya,Xt,In,ko,Ga,Pa,Qt,dn]),zn=a.useCallback(async m=>{await Ws(m),await Fr(m)},[Ws,Fr]),So=a.useCallback(async()=>{await En(),await zn()},[En,zn]),da=a.useCallback(async()=>{if(!xt)return Ne([]),Ks.current=!1,{success:!0,workspaces:[]};const m=zt(),I=new AbortController;Ds.current=I;const N=typeof performance<"u"?performance.now():Date.now();try{const E=await ws("/api/taskforce/workspaces",{method:"GET",credentials:"include"},Si,{signal:I.signal});if(Xt(m))return{success:!1,error:"Workspace changed while loading workspaces."};if(E.status===401)return Ne([]),Ks.current=!1,{success:!1,error:"Authentication required."};const pe=await E.json().catch(()=>({}));if(Xt(m))return{success:!1,error:"Workspace changed while loading workspaces."};if(!E.ok||pe?.success===!1)return Ne([]),Ks.current=!1,{success:!1,error:pe?.error||`Failed to load workspaces (${E.status})`};const ye=Array.isArray(pe?.workspaces)?pe.workspaces:[];return Ne(ye),Ks.current=!0,Ee!=="local"&&typeof pe?.currentWorkspaceId=="string"&&pe.currentWorkspaceId.trim().length>0&&na(pe.currentWorkspaceId.trim(),{preserveNonDefaultDefault:!0}),Ya("workspace_list_loaded",{workspaceCount:ye.length,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-N)}),{success:!0,workspaces:ye}}catch(E){return On(E)?{success:!1,error:"Workspace list request aborted."}:(ya(E)&&Pa("Startup checks timed out."),Ne([]),Ks.current=!1,{success:!1,error:"Failed to load workspaces."})}finally{Ds.current===I&&(Ds.current=null)}},[na,ws,zt,On,Xt,ya,In,Pa,Ee,xt]),vo=a.useCallback(async()=>{const m=zt(),I=new AbortController;hs.current=I,cs(!1);try{const[N,E]=await Promise.all([ws("/api/taskforce/workspace/assignee-options",{method:"GET",credentials:"include"},Si,{signal:I.signal}),ft&&Se?ws("/api/taskforce/auth/workspace-members",{method:"GET",credentials:"include"},Si,{signal:I.signal}).catch(()=>null):Promise.resolve(null)]);if(In(m))return{success:!1,error:"Workspace changed while loading assignee options."};if(N.status===401)return Le(wi()),cs(!0),{success:!1,error:"Authentication required."};const pe=await N.json().catch(()=>({}));if(In(m))return{success:!1,error:"Workspace changed while loading assignee options."};if(!N.ok)return Le(wi()),cs(!0),{success:!1,error:pe?.error||`Failed to load assignee options (${N.status})`};const ye=Array.isArray(pe?.assignees)?pe.assignees:[],qe=ye.map(It=>{const tn=String(It?.value||"").trim(),Ts=String(It?.kind||"").trim().toLowerCase();return tn?Ts==="agent"||Ts==="ai"?{value:tn,label:String(It?.label||tn).trim()||tn,icon:String(It?.icon||"Bot"),color:String(It?.color||"#8b5cf6"),kind:"agent"}:Ts==="member"||Ts==="human"?{value:tn,label:String(It?.label||tn).trim()||tn,icon:String(It?.icon||"User"),color:String(It?.color||"#22c55e"),kind:"member"}:null:null}).filter(It=>!!It),_t=ye.map(It=>({userId:String(It?.userId||"").trim(),email:String(It?.email||"").trim().toLowerCase(),displayName:typeof It?.displayName=="string"?It.displayName:null,status:typeof It?.status=="string"?It.status:null,disabled:It?.disabled===!0})).filter(It=>It.userId&&String(It.status||"active").trim().toLowerCase()==="active"&&It.disabled!==!0);let Et=_t;if(E?.ok){const It=await E.json().catch(()=>({})),tn=Array.isArray(It?.users)?It.users:[],Ts=String(pt||"").trim(),zr=tn.find(wn=>String(wn?.userId||"").trim()===Ts),Is=String(zr?.role||"").trim().toLowerCase();Is==="owner"||Is==="admin"||Is==="member"||Is==="read-only"?mt(Is):xt||mt(null);const Hr=tn.map(wn=>({userId:String(wn?.userId||"").trim(),email:String(wn?.email||"").trim().toLowerCase(),displayName:typeof wn?.displayName=="string"?wn.displayName:null,status:typeof wn?.status=="string"?wn.status:null,disabled:wn?.disabled===!0})).filter(wn=>wn.userId&&String(wn.status||"active").trim().toLowerCase()==="active"&&wn.disabled!==!0).map(wn=>({userId:wn.userId,email:wn.email,displayName:wn.displayName??null}));Et=Array.from(new Map([..._t,...Hr].map(wn=>[String(wn.userId||"").trim(),wn])).values()).filter(wn=>String(wn.userId||"").trim().length>0)}else xt||mt(null);const Ot=Ml([...qe,...Dg(Et).filter(It=>It.kind==="member")]);return In(m)?{success:!1,error:"Workspace changed while loading assignee options."}:(Le(Ot),cs(!0),{success:!0})}catch(N){return On(N)?{success:!1,error:"Assignee options request aborted."}:(In(m)||(Le(wi()),cs(!0)),{success:!1,error:"Failed to load assignee options."})}finally{hs.current===I&&(hs.current=null)}},[ft,pt,ws,zt,On,Se,In,xt]);a.useEffect(()=>{if(!Ha||Xe)return;const m=`${Ee}:${Se?"auth":"guest"}:${Ze}`;so&&Wr.current===m||(Wr.current=m,vo())},[so,Ha,Ze,vo,Se,Ee,Xe]);const il=a.useMemo(()=>xt?ze.find(I=>I.id===Ze)?.role??null:ua,[ze,Ze,ua,xt]);a.useEffect(()=>{Se||mt(null)},[Se]);const As=a.useCallback(async(m,I)=>{if(!xt)return{success:!1,error:"Workspace switching is unavailable in local mode.",code:"WORKSPACE_SWITCHING_DISABLED"};const N=String(m||"").trim();if(!N)return{success:!1,error:"workspaceId is required."};try{const E=await fetch("/api/taskforce/session/workspace",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({workspaceId:N})}),pe=await E.json().catch(()=>({}));if(!E.ok||pe?.success===!1)return{success:!1,error:pe?.error||`Failed to switch workspace (${E.status})`,code:pe?.code};Ke.current=N,kn(N,{clearExplicitSelection:!1}),hn(),xn(!0),Ga("workspace");const ye=await En({force:!0});return I?.hydrate===!1?await da():(oi.current=`${Ee}:${N}:${Nt}`,Wr.current=`${Ee}:${ye?"auth":"guest"}:${N}`,hr.current=N,Ae&&P==="tasks"&&(ii.current=`${N}:${P}:${ne?"archive":"active"}:${ie}`),Ae&&P==="settings"&&(go.current=`${N}:${P}:${Kt}`),await Promise.all([zn(),da(),ur({isSilent:!1}),vo(),Hs()])),Ke.current===N&&(Ke.current=null),{success:!0}}catch{return Ke.current===N&&(Ke.current=null),{success:!1,error:"Failed to switch workspace."}}finally{xn(!1)}},[hn,P,En,kn,vo,zn,da,Ae,Hs,Ga,ur,Ee,Kt,ne,ie,Nt,xt]),Fs=a.useCallback(async m=>{Ga("workspace"),xn(!0);const I=typeof performance<"u"?performance.now():Date.now();try{if(!xt){const Ot=String(Ze||"").trim()||"default";return kn(Ot),Ya("workspace_resolved",{workspaceId:Ot,workspaceSetupRequired:!1,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-I)}),{success:!0,workspaceSetupRequired:!1,workspaceId:Ot}}const N=String(m?.preferredWorkspaceId||"").trim(),E=Wd(Nt),pe=await da();if(!pe.success)return{success:!1,workspaceSetupRequired:!1,error:pe.error||"Failed to load workspaces after authentication."};const ye=Array.isArray(pe.workspaces)?pe.workspaces:[];if(ye.length===0)return kn("default"),Ya("workspace_resolved",{workspaceId:"default",workspaceSetupRequired:!0,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-I)}),{success:!0,workspaceSetupRequired:!0};const qe=new Set(ye.map(Ot=>String(Ot.id||"").trim()).filter(Boolean)),_t=(N&&qe.has(N)?N:"")||(E&&qe.has(E)?E:"")||String(ye[0]?.id||"").trim();if(!_t)return kn("default"),{success:!0,workspaceSetupRequired:!0};if(String(Ye.current||"").trim()!==_t){const Ot=await As(_t,{hydrate:!1});if(!Ot.success)return{success:!1,workspaceSetupRequired:!1,error:Ot.error||"Failed to set workspace after authentication.",code:Ot.code}}else kn(_t);return Ya("workspace_resolved",{workspaceId:_t,workspaceSetupRequired:!1,durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-I)}),{success:!0,workspaceSetupRequired:!1,workspaceId:_t}}catch{return Pa("Unable to resolve workspace access."),{success:!1,workspaceSetupRequired:!1,error:"Failed to resolve workspace access."}}finally{xn(!1)}},[kn,da,Ga,Pa,Nt,As,xt]),nc=a.useCallback(async()=>{va(null),Ga("auth");const m=await En();if(xt&&m){const I=await Fs();if(!I.success||I.workspaceSetupRequired){await zn({ignoreAuthGuard:!0});return}}await zn({ignoreAuthGuard:!0})},[En,zn,Ga,Fs,xt]),fd=a.useCallback(async(m,I)=>{if(!xt)return{success:!1,error:"Workspace management is unavailable in local mode.",code:"WORKSPACE_MANAGEMENT_DISABLED"};const N=String(m||"").trim();if(!N)return{success:!1,error:"Workspace name is required."};try{const E=await fetch("/api/taskforce/workspaces",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({name:N,description:typeof I=="string"?I:void 0})}),pe=await E.json().catch(()=>({}));if(!E.ok||pe?.success===!1)return{success:!1,error:pe?.error||`Failed to create workspace (${E.status})`,code:pe?.code};const ye=pe?.workspace;if(await da(),ye?.id){const qe=await As(ye.id);if(!qe.success)return{success:!1,error:qe.error||"Workspace created but failed to activate.",code:qe.code}}return{success:!0,workspace:ye}}catch{return{success:!1,error:"Failed to create workspace."}}},[da,As,xt]),di=a.useCallback(async m=>{if(!xt)return{success:!1,error:"Workspace management is unavailable in local mode.",code:"WORKSPACE_MANAGEMENT_DISABLED"};const I=String(m||"").trim();if(!I)return{success:!1,error:"workspaceId is required.",code:"WORKSPACE_ID_REQUIRED"};try{const N=await fetch(`/api/taskforce/workspaces/${encodeURIComponent(I)}`,{method:"DELETE",credentials:"include"}),E=await N.json().catch(()=>({}));if(!N.ok||E?.success===!1)return{success:!1,error:E?.error||`Failed to delete workspace (${N.status})`,code:E?.code};await En(),await Promise.all([zn(),da()]);const pe=typeof E?.nextWorkspaceId=="string"?E.nextWorkspaceId.trim():"";return pe&&kn(pe),{success:!0,nextWorkspaceId:pe||void 0,workspaceSetupRequired:E?.workspaceSetupRequired===!0,cleanupWarnings:Array.isArray(E?.cleanupWarnings)?E.cleanupWarnings.map(ye=>String(ye||"")):[]}}catch{return{success:!1,error:"Failed to delete workspace."}}},[En,kn,zn,da,xt]),cl=a.useCallback(async m=>{const I=m==="operations"?"operations":"core";try{const N=await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({setup:{mode:I}})}),E=await N.json().catch(()=>({}));return!N.ok||E?.success===!1?!1:(await So(),!0)}catch{return!1}},[So]),ac=a.useCallback(async m=>{const I=String(m?.name||"").trim();if(!I)return{success:!1,error:"Workspace name is required.",code:"WORKSPACE_NAME_REQUIRED"};try{const N=await fetch("/api/taskforce/workspace-profile",{method:"POST",headers:{"Content-Type":"application/json","x-taskforce-runtime-mode":Ee},credentials:"include",body:JSON.stringify({workspaceId:m.workspaceId,name:I,description:typeof m.description=="string"?m.description:void 0,allowCreate:!0})}),E=await N.json().catch(()=>({}));if(!N.ok||E?.success===!1)return{success:!1,error:E?.error||`Failed to save workspace (${N.status})`,code:E?.code};const pe=String(E?.workspace?.id||"").trim();if(pe&&(kn(pe),await new Promise(ye=>window.setTimeout(ye,0)),Ee==="cloud"&&Se&&pe!==Ze)){const ye=await As(pe);if(!ye.success)return{success:!1,error:ye.error||"Workspace saved but failed to activate session workspace.",code:"WORKSPACE_SWITCH_FAILED"}}return await So(),{success:!0,workspaceId:pe||void 0}}catch{return{success:!1,error:"Failed to save workspace profile."}}},[kn,So,Ee,Se,Ze,As]),sc=a.useCallback(async(m,I)=>{if(!C)return{success:!1,error:"Cloud auth endpoint is not configured."};const N=m.trim().toLowerCase(),E=I;if(!N||!E)return{success:!1,error:"Email and password are required."};try{const pe=await fetch(f("/api/taskforce/auth/login"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({email:N,password:E})}),ye=await pe.json().catch(()=>({}));if(!pe.ok||!ye?.success)return{success:!1,error:ye?.error||"Sign in failed.",code:ye?.code};Jn(""),await En();const qe=await Fs();return qe.success?qe.workspaceSetupRequired?{success:!0,workspaceSetupRequired:!0}:(await Promise.all([zn({ignoreAuthGuard:!0}),vn(!0,{ignoreAuthGuard:!0})]),Gs({preferCloudOnFirstSync:!0}),{success:!0}):{success:!1,error:qe.error||"Unable to resolve workspace after sign in.",code:qe.code}}catch{return{success:!1,error:"Sign in failed."}}},[En,zn,vn,Fs,Gs,f,C]),hd=a.useCallback(async(m,I,N)=>{if(!C)return{success:!1,error:"Cloud auth endpoint is not configured."};const E=m.trim().toLowerCase(),pe=I;if(!E||!pe)return{success:!1,error:"Email and password are required."};try{const ye=await fetch(f("/api/taskforce/auth/register"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({email:E,password:pe,...typeof N?.displayName=="string"&&N.displayName.trim()?{displayName:N.displayName.trim()}:{},...typeof N?.planId=="string"&&N.planId.trim()?{planId:N.planId.trim()}:{},...typeof N?.planVersionId=="string"&&N.planVersionId.trim()?{planVersionId:N.planVersionId.trim()}:{},...typeof N?.interval=="string"&&N.interval.trim()?{interval:N.interval.trim()}:{}})}),qe=await ye.json().catch(()=>({}));return!ye.ok||!qe?.success?{success:!1,error:qe?.error||"Create account failed.",code:qe?.code}:{success:!0,workspaceSetupRequired:!!qe?.workspaceSetupRequired,verificationRequired:!!qe?.verificationRequired,verificationToken:typeof qe?.verificationToken=="string"?qe.verificationToken:void 0,emailSent:qe?.emailSent!==!1,emailError:typeof qe?.emailError=="string"?qe.emailError:void 0}}catch{return{success:!1,error:"Create account failed."}}},[f,C]),rc=a.useCallback(async m=>{if(!C)return{success:!1,error:"Cloud auth endpoint is not configured."};const I=String(m.displayName||"").trim();if(!I)return{success:!1,error:"Display name is required."};try{const N=await fetch(f("/api/taskforce/auth/profile"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({displayName:I})}),E=await N.json().catch(()=>({}));if(!N.ok||!E?.success)return{success:!1,error:E?.error||"Failed to update profile.",code:E?.code};const pe={userId:typeof E?.profile?.userId=="string"?E.profile.userId:pt,email:typeof E?.profile?.email=="string"?E.profile.email:Ut,displayName:typeof E?.profile?.displayName=="string"?E.profile.displayName:null};return kt(pe.displayName||""),{success:!0,profile:pe}}catch{return{success:!1,error:"Failed to update profile."}}},[f,C,Ut,pt]),gd=a.useCallback(async m=>{if(!C)return{success:!1,error:"Cloud auth endpoint is not configured."};const I=m.trim().toLowerCase();if(!I)return{success:!1,error:"Email is required."};try{const N=await fetch(f("/api/taskforce/auth/verify-email/request"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({email:I})}),E=await N.json().catch(()=>({}));return!N.ok||!E?.success?{success:!1,error:E?.error||"Failed to request verification email.",code:E?.code}:{success:!0,verificationToken:E?.verificationToken??null,emailSent:E?.emailSent!==!1,emailError:typeof E?.emailError=="string"?E.emailError:void 0}}catch{return{success:!1,error:"Failed to request verification email."}}},[f,C]),yd=a.useCallback(async m=>{if(!C)return{success:!1,error:"Cloud auth endpoint is not configured."};const I=m.trim();if(!I)return{success:!1,error:"Token is required."};try{const N=await fetch(f("/api/taskforce/auth/verify-email/confirm"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({token:I})}),E=await N.json().catch(()=>({}));return!N.ok||!E?.success?{success:!1,error:E?.error||"Verification failed.",code:E?.code}:{success:!0}}catch{return{success:!1,error:"Verification failed."}}},[f,C]),Su=a.useCallback(async m=>{if(!C)return{success:!1,error:"Cloud auth endpoint is not configured."};const I=m.trim().toLowerCase();if(!I)return{success:!1,error:"Email is required."};try{const N=await fetch(f("/api/taskforce/auth/password-reset/request"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({email:I})}),E=await N.json().catch(()=>({}));return!N.ok||!E?.success?{success:!1,error:E?.error||"Failed to request password reset.",code:E?.code}:{success:!0,resetToken:E?.resetToken??null,emailSent:E?.emailSent!==!1,emailError:typeof E?.emailError=="string"?E.emailError:void 0}}catch{return{success:!1,error:"Failed to request password reset."}}},[f,C]),kd=a.useCallback(async(m,I)=>{if(!C)return{success:!1,error:"Cloud auth endpoint is not configured."};const N=m.trim(),E=I;if(!N||!E)return{success:!1,error:"Token and password are required."};try{const pe=await fetch(f("/api/taskforce/auth/password-reset/confirm"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({token:N,password:E})}),ye=await pe.json().catch(()=>({}));return!pe.ok||!ye?.success?{success:!1,error:ye?.error||"Failed to reset password.",code:ye?.code}:{success:!0}}catch{return{success:!1,error:"Failed to reset password."}}},[f,C]),wo=a.useCallback(async m=>{if(!C)return{success:!1,error:"Cloud auth endpoint is not configured."};const I=m.trim();if(!I)return{success:!1,error:"Token is required."};try{const N=await fetch(f("/api/taskforce/auth/invite/inspect"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({token:I})}),E=await N.json().catch(()=>({}));return!N.ok||!E?.success?{success:!1,error:E?.error||"Invite inspection failed.",code:E?.code,state:E?.state}:{success:!0,state:E?.state,email:typeof E?.email=="string"?E.email:void 0,workspaceId:typeof E?.workspaceId=="string"?E.workspaceId:void 0,inviteeKind:E?.inviteeKind==="existing_user"?"existing_user":"new_user",passwordRequired:E?.passwordRequired===!0}}catch{return{success:!1,error:"Invite inspection failed."}}},[f,C]),Sd=a.useCallback(async(m,I)=>{if(!C)return{success:!1,error:"Cloud auth endpoint is not configured."};const N=m.trim(),E=I;if(!N||!E)return{success:!1,error:"Token and password are required."};try{const pe=await fetch(f("/api/taskforce/auth/invite/accept"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({token:N,password:E})}),ye=await pe.json().catch(()=>({}));if(!pe.ok||!ye?.success)return{success:!1,error:ye?.error||"Invite acceptance failed.",code:ye?.code};Jn(""),await En();const qe=typeof ye?.workspaceId=="string"?ye.workspaceId:null,_t=await Fs({preferredWorkspaceId:qe});return _t.success?_t.workspaceSetupRequired?{success:!0,workspaceSetupRequired:!0}:(await Promise.all([zn({ignoreAuthGuard:!0}),vn(!0,{ignoreAuthGuard:!0})]),Gs({preferCloudOnFirstSync:!0}),{success:!0}):{success:!1,error:_t.error||"Unable to resolve workspace after invite acceptance.",code:_t.code}}catch{return{success:!1,error:"Invite acceptance failed."}}},[En,zn,vn,Fs,Gs,f,C]),ll=a.useCallback(async m=>{if(!C)return{success:!1,error:"Cloud auth endpoint is not configured."};const I=m.trim();if(!I)return{success:!1,error:"Token is required."};try{const N=await fetch(f("/api/taskforce/auth/invite/join"),{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({token:I})}),E=await N.json().catch(()=>({}));if(!N.ok||!E?.success)return{success:!1,error:E?.error||"Invite join failed.",code:E?.code};Jn(""),await En();const pe=typeof E?.workspaceId=="string"?E.workspaceId:null,ye=await Fs({preferredWorkspaceId:pe});return ye.success?ye.workspaceSetupRequired?{success:!0,workspaceSetupRequired:!0}:(await Promise.all([zn({ignoreAuthGuard:!0}),vn(!0,{ignoreAuthGuard:!0})]),Gs({preferCloudOnFirstSync:!0}),{success:!0}):{success:!1,error:ye.error||"Unable to resolve workspace after invite join.",code:ye.code}}catch{return{success:!1,error:"Invite join failed."}}},[En,zn,vn,Fs,Gs,f,C]),vu=a.useCallback(async()=>{try{C&&await fetch(f("/api/taskforce/auth/logout"),{method:"POST",credentials:"include"})}catch{}finally{Qe(!1),Mt("anonymous"),Cl(null),nt(""),kt(""),Uo("disconnected"),zo(null),Te(Ee==="cloud"&&G),Wn(m=>{const I=String(m||"").trim();let N="default";return I&&I.toLowerCase()!=="default"?N=I:Ee!=="local"&&(N=Wd(Nt)||"default"),Ye.current=N,N}),Ne([]),Ks.current=!1,or([]),Ri([]),Di([])}},[G,f,C,Nt,Ee]),Js=a.useCallback(async m=>{try{const I=await fetch("/api/taskforce/initiative-templates/create",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)}),N=await I.json().catch(()=>({}));return!I.ok||!N?.success?{success:!1,error:N?.error||`Create failed (${I.status})`}:(await vn(!0),{success:!0,result:N?.results})}catch(I){return{success:!1,error:I.message}}},[vn]),vd=a.useCallback(async m=>{const I=await fetch("/api/taskforce/initiative",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m||{})}),N=await I.json().catch(()=>({}));if(!I.ok)throw new Error(N?.error||`Failed to create initiative (${I.status})`);return await cn(),N},[cn]),oc=a.useCallback(async(m,I)=>{const N=await fetch(`/api/taskforce/initiative/${encodeURIComponent(m)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(I||{})}),E=await N.json().catch(()=>({}));if(!N.ok)throw new Error(E?.error||`Failed to update initiative (${N.status})`);return await cn(),E},[cn]),ui=a.useCallback(async m=>{const I=await fetch(`/api/taskforce/initiative/${encodeURIComponent(m)}/archive`,{method:"POST"}),N=await I.json().catch(()=>({}));if(!I.ok)throw new Error(N?.error||`Failed to archive initiative (${I.status})`);return await cn(),N},[cn]),ic=a.useCallback(async m=>{const I=await fetch(`/api/taskforce/initiative/${encodeURIComponent(m)}/unarchive`,{method:"POST"}),N=await I.json().catch(()=>({}));if(!I.ok)throw new Error(N?.error||`Failed to unarchive initiative (${I.status})`);return await cn(),N},[cn]),wd=a.useCallback(async m=>{const I=await fetch("/api/taskforce/workstream",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m||{})}),N=await I.json().catch(()=>({}));if(!I.ok)throw new Error(N?.error||`Failed to create workstream (${I.status})`);return await cn(),N},[cn]),wu=a.useCallback(async(m,I)=>{const N=await fetch(`/api/taskforce/workstream/${encodeURIComponent(m)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(I||{})}),E=await N.json().catch(()=>({}));if(!N.ok)throw new Error(E?.error||`Failed to update workstream (${N.status})`);return await cn(),E},[cn]),Ap=a.useCallback(async m=>{const I=await fetch(`/api/taskforce/workstream/${encodeURIComponent(m)}/archive`,{method:"POST"}),N=await I.json().catch(()=>({}));if(!I.ok)throw new Error(N?.error||`Failed to archive workstream (${I.status})`);return await cn(),N},[cn]),bu=a.useCallback(async m=>{const I=await fetch(`/api/taskforce/workstream/${encodeURIComponent(m)}/unarchive`,{method:"POST"}),N=await I.json().catch(()=>({}));if(!I.ok)throw new Error(N?.error||`Failed to unarchive workstream (${I.status})`);return await cn(),N},[cn]),cc=a.useRef(!1),lc=a.useRef(!1);a.useEffect(()=>{F(!0),!cc.current&&(cc.current=!0,En())},[En]),a.useEffect(()=>{J&&En()},[J,En]),a.useEffect(()=>{if(Ee!=="local"||!v||typeof window>"u")return;const m=()=>{En()},I=()=>{document.visibilityState==="visible"&&m()};window.addEventListener("focus",m),window.addEventListener("online",m),document.addEventListener("visibilitychange",I);const N=window.setInterval(m,3e4);return()=>{window.removeEventListener("focus",m),window.removeEventListener("online",m),document.removeEventListener("visibilitychange",I),window.clearInterval(N)}},[Ee,v,En]),a.useEffect(()=>{Qt||dn||lc.current||(lc.current=!0,(async()=>{if(Ee==="cloud"&&ft&&Se){const m=await Fs();if(!m.success||m.workspaceSetupRequired){await Ws(),Fr();return}}await Ws(),await Promise.all([(async()=>{const m=typeof performance<"u"?performance.now():Date.now();await vn(!1),Ya("bootstrap_tasks_loaded",{durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-m)})})(),Fr(),cn()]),typeof window<"u"&&(Xn.current!==null&&window.clearTimeout(Xn.current),Xn.current=window.setTimeout(()=>{Xn.current=null;const m=typeof performance<"u"?performance.now():Date.now();Ma(!0).then(()=>{Ya("bootstrap_archive_loaded_deferred",{durationMs:Math.round((typeof performance<"u"?performance.now():Date.now())-m)})})},1500))})())},[Qt,dn,Ee,ft,Se,Fs,Ws,vn,Ma,Fr,cn]),a.useEffect(()=>{if(Qt||dn||Xe||Nt===Ro||!lc.current)return;const m=`${Ee}:${Ze}:${Nt}`;oi.current!==m&&(oi.current=m,zn())},[Ze,Qt,dn,Xe,Ee,Nt,zn]),a.useEffect(()=>{if(Qt||dn||Xe)return;const m=Ze;hr.current!==m&&(hr.current=m,Hs())},[Qt,dn,Ze,Hs,Xe]),a.useEffect(()=>{if(Ee!=="cloud"||!ft||!Se){Ee!=="cloud"&&Ne([]),Ks.current=!1;return}Xe||!lc.current||Ks.current||da()},[Ee,ft,Se,da,Xe]),a.useEffect(()=>{s&&s(Kn.length)},[Kn.length,s]),a.useEffect(()=>{if(n&&Kn.length>0){const m=Kn.find(I=>I.id.endsWith(n)||I.id===n);m&&(Dd(m),us("add"))}},[n,Kn]);const Xs=a.useRef(!1);a.useEffect(()=>{if(!Ha)return;if(!Xs.current&&mn.length>0){Xs.current=!0;const I=ei,N=mn.some(E=>E.label===I||E.value===I);if(I&&N){const E=mn.find(pe=>pe.label===I||pe.value===I);Dr(E?.value||I)}else Dr(Va(mn));return}const m=mn.some(I=>I.value===Bs);mn.length>0&&!m&&Dr(Va(mn))},[Ha,mn,Bs,Va,ei]),a.useEffect(()=>{if(!Ha||mn.length===0)return;const m=E=>!mn.some(pe=>pe.value===E.category),I=Kn.some(m),N=ga.some(m);if(I||N){const E=Va(mn);I&&or(pe=>pe.map(ye=>m(ye)?{...ye,category:E}:ye)),N&&Aa(pe=>pe.map(ye=>m(ye)?{...ye,category:E}:ye))}},[Ha,mn,Kn,ga,Va]),a.useEffect(()=>()=>{Xn.current!==null&&typeof window<"u"&&(window.clearTimeout(Xn.current),Xn.current=null),Cs.current!==null&&typeof window<"u"&&(window.clearTimeout(Cs.current),Cs.current=null)},[]),a.useEffect(()=>{},[ur]);const bd=a.useCallback(async()=>{await bs()},[bs]),dl=String(Ze||"").trim(),bo=String(pt||"").trim(),Or=x("/taskforce-ws"),_u=!!(C&&Ee==="cloud"&&ft&&Se&&bo&&bo!=="anonymous"&&dl&&!gp(dl)&&Or),_d=a.useCallback(()=>{Ee==="cloud"&&(bs(),!(typeof window>"u")&&(Cs.current!==null&&window.clearTimeout(Cs.current),Cs.current=window.setTimeout(()=>{Cs.current=null,bs()},250)))},[Ee,bs]);sf({enabled:_u,workspaceId:dl,websocketUrl:Or,onSignal:_d,userId:bo||void 0}),a.useEffect(()=>{if(typeof window>"u"||typeof document>"u"||gk({isOpen:Ae,authBlocked:je,authRequiredForApi:G,isAuthenticated:Se,canCallProtectedApi:Zn.canCallProtectedApi}))return;let m=!1;const I=async()=>{if(!(m||document.visibilityState!=="visible")&&!yk({shouldGateProtectedApiCalls:M,authSessionResolved:nl.current,authRequiredForApi:si.current,isAuthenticated:ld.current}))try{const pe=await fetch("/api/taskforce/data-version");if(!pe.ok)return;const ye=await pe.json(),qe=Number(ye?.dataVersion);if(!Number.isFinite(qe))return;if(fr.current===null){fr.current=qe;return}qe!==fr.current&&(fr.current=qe,await bd())}catch{}},N=()=>{document.visibilityState==="visible"&&I()},E=window.setInterval(I,3e3);return document.addEventListener("visibilitychange",N),I(),()=>{m=!0,window.clearInterval(E),document.removeEventListener("visibilitychange",N)}},[Ae,vn,Ma,je,G,Se,Zn,M,bd]);const dc=a.useMemo(()=>{const m=new Map;for(const I of ga)m.set(I.id,I);for(const I of Kn)m.set(I.id,I);return Array.from(m.values())},[Kn,ga]),ns=a.useMemo(()=>Ls.map(m=>({...m.taskSnapshot,isDeleted:!0,deletedRecordId:m.id})),[Ls]);a.useEffect(()=>{if(!(Qt||dn)&&Ae&&!Xe){if(P==="tasks"){const m=`${Ze}:${P}:${ne?"archive":"active"}:${ie}`;if(!tc.current){tc.current=!0,ii.current=m;return}if(ii.current===m)return;ii.current=m,vn(),(ne||ie==="archived")&&Ma(!0),ie==="deleted"&&Za();return}if(P==="settings"){const m=`${Ze}:${P}:${Kt}`;if(go.current===m)return;go.current=m,zn(),(Kt==="commands"||Kt==="resources")&&Ps()}}},[Ze,Ae,P,Kt,ne,ie,vn,Ma,Za,zn,Ps,Qt,dn,Xe]);const _o=a.useCallback(async(m="")=>{try{const I=await fetch(`/api/taskforce/folders?path=${encodeURIComponent(m)}`);if(I.ok){const N=await I.json();Ie(N.folders||[]),yt(N.files||[]),Ht(m)}}catch(I){console.error("[Taskforce] Failed to fetch folders:",I)}},[]),Cd=a.useCallback(m=>{const I=[];if(m.path&&I.push(m.path),m.paths&&m.paths.length>0)for(const N of m.paths)I.includes(N)||I.push(N);return I},[]),{validatePaths:Cu,handleUpdateCategory:xd,handleSaveCategory:$r,handleAddPath:Co,handleUpdateCategoryIcon:yr,handleUpdateCategoryColor:pi,handleRemovePath:ul,handleSelectPath:pl,handleRemoveCategory:Ad,handleSaveType:ml,handleRemoveType:xo,handleUpdateType:Td,handleUpdateTaxonomies:uc,handleUpdatePriorities:fl,analyzeSystemTaxonomyPack:hl,handleApplySystemTaxonomyPack:Id}=Oy({activeCategories:mn,activeTab:P,activeTypes:Yn,archivedTasks:ga,browserTarget:bn,category:Bs,configLoaded:Ha,customCategories:vs,refreshTaskCollections:ur,fetchTasks:vn,filterCategories:mr,getCategoryPaths:Cd,normalizePath:Ni,pathValidation:Fo,setBrowserTarget:nn,setCategory:Dr,setCustomCategories:Bo,setCustomTypes:Mc,setFilterCategories:lo,setPathValidation:zl,setPriorities:fa,setShowFolderBrowser:De,setTaxonomies:Bc,tasks:Kn}),gl=a.useCallback(async m=>{const I=ir,N={...I,...m};Oo(N);try{const E=await fetch("/api/taskforce/taxonomy-display-labels",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({displayLabels:m})});if(!E.ok)throw new Error(`Failed to save taxonomy display labels (${E.status})`);const pe=await E.json().catch(()=>({}));pe?.displayLabels&&typeof pe.displayLabels=="object"&&Oo({...N,...pe.displayLabels})}catch(E){console.error("[Taskforce] Failed to update taxonomy display labels",E),Oo(I)}},[ir]),us=a.useCallback(m=>{P==="tasks"&&Us.current&&Cr(Us.current.scrollTop),B(m)},[P]),yl=a.useRef(async()=>{}),{handleNavigation:jd,handleClose:Nd,resetForm:kl,resolveWorkstreamIdInput:Rd,handleEdit:Dd,handleOpenTaskById:xu,returnToPreviousTask:Ao,clearReturnToParentTask:pc}=Yy({activeCategories:mn,activeTypes:Yn,activeTab:P,attachments:ai,checklistItems:co,comments:Qo,description:$i,editingTaskId:is,flushPendingAutoSave:()=>yl.current(),getPreferredCategoryValue:Va,lastUsedCategory:ei,newCommentText:Xl,relationshipTasks:dc,workstreams:zs,showArchive:ne,taxonomies:es,setActiveTab:us,setApproach:Fi,setAssignee:Uc,setAttachments:Br,setAttachmentsDirty:ec,setCategory:Dr,setChecklistItems:Gc,setComments:Ui,setComplexity:Kl,setDescription:Hc,setDueDate:Jl,setEditingTaskId:Ul,setError:Jn,setFormTaxonomies:ka,setIsOpen:F,setNewCommentText:Vc,setPendingNavigation:Me,setWorkstreamInput:Jo,setPriority:ts,setScheduledDate:Pr,setShowArchive:ae,setStatus:ls,setTaskReturnTrail:gn,setTitle:at,setType:Bi,setUnsavedModalOpen:_e,taskReturnTrail:Pn,title:Xo}),{copiedId:Sl,handleDelete:mi,handleUpdateTask:mc,handleToggleComplete:Os,handleToggleCancel:To,handleToggleInProgress:fc,handleToggleReview:hc,handleArchiveTask:fi,handleBulkArchive:un,handleUnarchive:Au,handleRestoreDeletedTask:Pd,handlePermanentlyDeleteDeletedTask:gc,handleEmptyDeletedTasks:Tu,handleCopyId:kr,queueWorkspaceSyncFromAuthoritativeTaskState:vl}=pk({tasks:Kn,archivedTasks:ga,editingTaskId:is,setTasks:or,setArchivedTasks:Aa,setDeletedTasks:no,setError:Jn,resetForm:kl,setActiveTab:us,fetchTasks:vn,fetchArchive:Ma,fetchDeletedTasks:Za,mergeTaskFromServer:$o,pushNotice:St,cloudAuthConfigured:C,runtimeMode:Ee,isAuthenticated:Se,workspaceCloudSyncEnabled:Go,buildWorkspaceSyncSignature:$c,pushWorkspaceChangesToCloud:Ei,workspacePendingSignatureRef:ql,workspaceDeletedTaskIdsRef:Oc}),{autoSaveState:Ed,flushAutoSave:hi,scheduleWarningPrompt:ps,handleSubmit:wl,confirmScheduleWarning:yc,cancelScheduleWarning:Iu,handleAddComment:Ld}=lk({activeCategories:mn,activeTab:P,apiEndpoint:p,approach:Wi,assignee:Yo,attachments:ai,attachmentsDirty:ho,category:Bs,checklistItems:co,comments:Qo,complexity:Vs,description:$i,dueDate:Oi,editingTaskId:is,fetchTasks:vn,formTaxonomies:ds,getPreferredCategoryValue:Va,mergeTaskFromServer:$o,workstreamInput:pr,priority:Ko,pushNotice:St,queueWorkspaceSyncFromAuthoritativeTaskState:vl,relationshipTasks:dc,resetForm:kl,resolveWorkstreamIdInput:Rd,scheduledDate:zc,setActiveTab:us,setAttachmentsDirty:ec,setComments:Ui,setError:Jn,setLastUsedCategory:Ql,setLoading:Wc,setNewCommentText:Vc,status:Yl,title:Xo,taxonomies:es,type:qo});a.useEffect(()=>{yl.current=hi},[hi]);const{handleSetWorkstreamForCurrentTask:Ur}=dk({editingTaskId:is,mergeTaskFromServer:$o,workstreamInput:pr,pushNotice:St,queueWorkspaceSyncFromAuthoritativeTaskState:vl,relationshipTasks:dc,resolveWorkstreamIdInput:Rd,setError:Jn,fetchTasks:vn}),{currentTask:Qs,currentTaskWorkstream:Md,currentTaskInitiative:ju}=Gy({editingTaskId:is,relationshipTasks:dc,initiatives:Lc,workstreams:zs,supplementalTasks:ns,setComments:Ui}),Nu=Wy({resolveCloudAuthUrl:f,currentWorkspaceId:Ze,normalizedCloudAuthBaseUrl:Ve,normalizedCloudMcpBaseUrl:ve,mergedConfig:o,availableWorkspaces:ze,currentTheme:H,configLoaded:Ha,globalTheme:Pe,themeUseGlobalDefault:$e,keyShortcut:Mn,jsonBackupEnabled:nr,globalJsonBackupEnabled:eo,globalWeekStartsOn:jn,locale:wt,supportedLocales:ct,jsonBackupUseGlobalDefault:ot,manualComplexityEnabled:ha,checklistDropdownEnabled:ks,showTaskCardStatusLabel:Da,exportWorkflowsPath:Ss,exportingResource:Eo,exportResult:j,pathSaved:Ct,settingsSection:Kt,exportEnvironment:Ue,setupState:rt,buildInfo:ba,saveSetupMode:cl,saveWorkspaceProfile:ac,setCurrentTheme:ue,handleSaveTheme:hu,handleSaveGlobalTheme:li,setKeyShortcut:en,handleJsonBackupEnabledChange:dd,handleSaveGlobalJsonBackupEnabled:ud,handleSaveGlobalWeekStartsOn:gu,handleSaveLocale:pd,handleManualComplexityEnabledChange:yu,handleChecklistDropdownEnabledChange:md,handleShowTaskCardStatusLabelChange:ku,handleResetProjectToGlobal:xs,handleSaveSettings:Ys,setExportWorkflowsPath:Po,setExportEnvironment:Ft,availableWorkflows:Ca,initiativeTemplates:ss,availableEnvironments:za,fetchWorkflows:Ps,fetchInitiativeTemplates:ar,createInitiativeFromTemplate:Js,fetchWorkflowTemplate:rs,fetchWorkflowOverrideNames:sr,saveWorkflowTemplateDraft:ia,resetWorkflowTemplateDraft:xa,handleExportWorkflows:le,setShowFolderBrowser:De,setBrowserTarget:nn,fetchFolders:_o,activeCategories:mn,pathValidation:Fo,taxonomyDisplayLabels:ir,handleUpdateCategory:xd,handleRemoveCategory:Ad,handleSaveCategory:$r,handleAddPath:Co,handleRemovePath:ul,handleUpdateCategoryIcon:yr,handleUpdateCategoryColor:pi,activeTypes:Yn,handleSaveType:ml,handleRemoveType:xo,handleUpdateType:Td,taxonomies:es,handleUpdateTaxonomies:uc,priorities:ma,handleUpdatePriorities:fl,analyzeSystemTaxonomyPack:hl,handleApplySystemTaxonomyPack:Id,handleUpdateTaxonomyDisplayLabels:gl,projectRoot:qt,projectName:on,mcpHostRoot:Na,serverHostRoot:Xa,mcpScriptPath:Yt,tenantId:an,runtimeMode:Ee,workspaceSwitchingEnabled:xt,deleteWorkspace:di,setMcpHostRoot:ys,isAuthenticated:Se});a.useEffect(()=>{typeof window<"u"&&(window.__TASKFORCE_DEBUG__={tasks:Kn,archivedTasks:ga,runtimeMode:Ee,currentWorkspaceId:Ze,isAuthenticated:Se,workspaceCloudSyncEnabled:Go,realtimeSyncEnabled:qn,fetchTasks:vn,fetchArchive:Ma,retryWorkspaceCloudSync:Rr,resetWorkspaceSyncCursorAndPull:Zo,getSyncDiagnostics:Li,__dispatch:{handleUpdateTask:mc,handleToggleComplete:Os,handleArchiveTask:fi,handleToggleCancel:To,handleToggleInProgress:fc,handleToggleReview:hc,handleSubmit:wl,handleDelete:mi}})},[Kn,ga,Ee,Ze,Se,Go,qn,vn,Ma,Rr,Zo,Li,mc,Os,fi,To,fc,hc,wl,mi]);const Ru=bt&&bt.tone!=="error"?{message:bt.message,type:"info"}:null,Bd=String(A||S.wsBaseUrl||be||"").trim().replace(/\/+$/,"");return{config:{...o,cloudEnvironment:S.cloudEnvironment||o.cloudEnvironment||"",apiBaseUrl:be||o.apiBaseUrl,cloudAuthBaseUrl:Ve||o.cloudAuthBaseUrl,wsBaseUrl:Bd||o.wsBaseUrl},isOpen:Ae,setIsOpen:F,activeTab:P,setActiveTab:us,currentTheme:H,setCurrentTheme:ue,configLoaded:Ha,storagePath:tt,saveSettings:Ys,pathSaved:Ct,keyShortcut:Mn,setKeyShortcut:en,globalWeekStartsOn:jn,locale:wt,supportedLocales:ct,saveLocale:pd,jsonBackupEnabled:nr,setJsonBackupEnabled:Ra,manualComplexityEnabled:ha,checklistDropdownEnabled:ks,showTaskCardStatusLabel:Da,setManualComplexityEnabled:ra,mcpHostRoot:Na,setMcpHostRoot:ys,settingsSection:Kt,setSettingsSection:_n,runtimeMode:Ee,workspaceMode:Rn,workspaceSwitchingEnabled:xt,cloudAuthConfigured:C,authRequiredForApi:G,authBlocked:je,isAuthenticated:Se,authUserEmail:Ut,authUserDisplayName:Tt,authWorkspaceId:Rt,userGlobalSyncStatus:du,workspaceLastPullAt:Ba,workspaceLastPushAt:Ir,workspaceLastErrorAt:jr,userGlobalSyncError:uu,workspaceLastErrorMessage:Ho,workspaceLastSuccessfulSyncAt:pu,workspaceSyncPhase:io,workspaceSyncStatus:mu,workspaceSyncSummary:Gl,workspaceSyncRecommendedAction:Vl,workspaceSyncBusy:Zl,workspaceSyncPendingChanges:Fc,retryUserGlobalSettingsSync:la,retryWorkspaceCloudSync:Rr,resetWorkspaceSyncCursorAndPull:Zo,getWorkspaceSyncDiagnostics:Li,hasBetaAccess:Dn,realtimeSyncEnabled:qn,realtimeSyncFlagSource:wa,currentWorkspaceId:Ze,currentWorkspaceRole:il,availableWorkspaces:ze,assigneeOptions:st,workspaceCloudSyncEnabled:Go,saveWorkspaceCloudSyncSettings:Nr,applyWorkspaceSyncStateSnapshot:Vo,authSessionResolved:ft,workspaceBootstrapPending:Xe,bootstrapPhase:Vn,bootstrapError:An,bootstrapStartedAt:ln,setupState:rt,runtimeCapabilities:aa,refreshSetupContext:So,retryBootstrapChecks:nc,saveWorkspaceProfile:ac,fetchWorkspaces:da,createWorkspace:fd,deleteWorkspace:di,switchWorkspace:As,loginWithCredentials:sc,registerWithCredentials:hd,updateCurrentUserProfile:rc,requestEmailVerification:gd,confirmEmailVerification:yd,requestPasswordReset:Su,confirmPasswordReset:kd,inspectInviteAcceptance:wo,acceptInviteWithToken:Sd,joinInviteWithToken:ll,logout:vu,showFolderBrowser:i,setShowFolderBrowser:De,folders:Je,files:ht,currentBrowsePath:$t,fetchFolders:_o,browserTarget:bn,setBrowserTarget:nn,groupBy:mo,setGroupBy:Yc,activeWorkspaceModule:ni,setActiveWorkspaceModule:fo,emptyColumnMode:Jc,setEmptyColumnMode:Xi,zenMode:Es,setZenMode:_r,handleSelectPath:pl,handleAddPath:Co,handleRemovePath:ul,tasks:Kn,loadingTasks:Lo,archivedTasks:ga,initiatives:Lc,workstreams:zs,deletedTasks:Ls,activeCategories:mn,activeTypes:Yn,priorities:ma,taxonomyDisplayLabels:ir,approaches:Ja,taxonomies:es,searchQuery:Hi,setSearchQuery:ti,filterCategories:mr,setFilterCategories:lo,filterTypes:qc,setFilterTypes:ed,filterPriorities:Gi,setFilterPriorities:Vi,filterStatus:Lr,setFilterStatus:Zs,filterAssignees:Wa,setFilterAssignees:uo,filterTaxonomies:po,setFilterTaxonomies:Zi,sortBy:Ki,setSortBy:Yi,sortOrder:Ji,setSortOrder:_s,toggleSortOrder:nd,showArchive:ne,setShowArchive:ae,taskScope:ie,setTaskScope:Z,clearFilters:sd,filteredTasks:rd,searchAgnosticTasks:Xc,filteredArchive:od,groupedTasks:Qc,collapsedCategories:qa,setCollapsedCategories:ad,fetchTasks:vn,fetchArchive:Ma,fetchDeletedTasks:Za,fetchPlanningEntities:cn,fetchAssigneeOptions:vo,createInitiative:vd,updateInitiative:oc,archiveInitiative:ui,unarchiveInitiative:ic,createWorkstream:wd,updateWorkstream:wu,archiveWorkstream:Ap,unarchiveWorkstream:bu,handleEdit:Dd,handleDelete:mi,handleCopyId:kr,handleToggleComplete:Os,handleToggleCancel:To,handleToggleInProgress:fc,handleToggleReview:hc,handleArchiveTask:fi,handleBulkArchive:un,handleUnarchive:Au,handleRestoreDeletedTask:Pd,handlePermanentlyDeleteDeletedTask:gc,handleEmptyDeletedTasks:Tu,handleUpdateTask:mc,editingTaskId:is,loading:Tr,error:Hl,title:Xo,setTitle:at,description:$i,setDescription:Hc,checklistItems:co,setChecklistItems:Gc,category:Bs,setCategory:Dr,type:qo,setType:Bi,priority:Ko,setPriority:ts,complexity:Vs,setComplexity:Kl,status:Yl,setStatus:ls,approach:Wi,setApproach:Fi,assignee:Yo,setAssignee:Uc,scheduledDate:zc,setScheduledDate:Pr,dueDate:Oi,setDueDate:Jl,workstreamInput:pr,setWorkstreamInput:Jo,formTaxonomies:ds,setFormTaxonomies:ka,comments:Qo,newCommentText:Xl,setNewCommentText:Vc,attachments:ai,setAttachments:Br,attachmentsDirty:ho,setAttachmentsDirty:ec,descriptionFocused:el,setDescriptionFocused:fu,showMarkdownHelp:Mo,setShowMarkdownHelp:Pi,showChecklist:Zc,setShowChecklist:Er,showComments:id,setShowComments:cd,isCapturingScreenshot:Qi,setIsCapturingScreenshot:tl,handleSubmit:wl,resetForm:kl,handleAddComment:Ld,handleSetWorkstreamForCurrentTask:Ur,handleOpenTaskById:xu,returnToPreviousTask:Ao,autoSaveState:Ed,unsavedModalOpen:He,setUnsavedModalOpen:_e,pendingNavigation:K,handleNavigation:jd,handleClose:Nd,uiNotice:bt,pushNotice:St,clearNotice:os,successBanner:Ru,taskReturnTrail:Pn,clearReturnToParentTask:pc,copiedId:Sl,recentlyChangedTaskIds:cr,scheduleWarningPrompt:ps,confirmScheduleWarning:yc,cancelScheduleWarning:Iu,tasksScrollRef:Us,setTasksScrollPos:Cr,exportEnvironment:Ue,setExportEnvironment:Ft,exportWorkflowsPath:Ss,setExportWorkflowsPath:Po,exportResult:j,exportingResource:Eo,handleUpdateCategory:xd,handleRemoveCategory:Ad,handleSaveCategory:$r,handleUpdateCategoryIcon:yr,handleUpdateCategoryColor:pi,handleSaveType:ml,handleRemoveType:xo,handleUpdateType:Td,handleUpdateTaxonomies:uc,handleUpdatePriorities:fl,handleUpdateTaxonomyDisplayLabels:gl,pathValidation:Fo,validatePaths:Cu,getCategoryPaths:Cd,customCategories:vs,setCustomCategories:Bo,projectRoot:qt,projectName:on,mcpScriptPath:Yt,serverHostRoot:Xa,commentsEndRef:zi,currentTask:Qs,currentTaskWorkstream:Md,currentTaskInitiative:ju,availableWorkflows:Ca,initiativeTemplates:ss,availableEnvironments:za,fetchWorkflows:Ps,fetchInitiativeTemplates:ar,createInitiativeFromTemplate:Js,fetchWorkflowTemplate:rs,fetchWorkflowOverrideNames:sr,saveWorkflowTemplateDraft:ia,resetWorkflowTemplateDraft:xa,onExportWorkflows:le,settingsModel:Nu}}const vk="modulepreload",wk=function(t){return"/taskforce/"+t},nm={},Do=function(n,s,r){let o=Promise.resolve();if(s&&s.length>0){let g=function(_){return Promise.all(_.map(w=>Promise.resolve(w).then(A=>({status:"fulfilled",value:A}),A=>({status:"rejected",reason:A}))))};document.getElementsByTagName("link");const l=document.querySelector("meta[property=csp-nonce]"),p=l?.nonce||l?.getAttribute("nonce");o=g(s.map(_=>{if(_=wk(_),_ in nm)return;nm[_]=!0;const w=_.endsWith(".css"),A=w?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${_}"]${A}`))return;const y=document.createElement("link");if(y.rel=w?"stylesheet":vk,w||(y.as="script"),y.crossOrigin="",y.href=_,p&&y.setAttribute("nonce",p),document.head.appendChild(y),w)return new Promise((k,b)=>{y.addEventListener("load",k),y.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${_}`)))})}))}function d(l){const p=new Event("vite:preloadError",{cancelable:!0});if(p.payload=l,window.dispatchEvent(p),!p.defaultPrevented)throw l}return o.then(l=>{for(const p of l||[])p.status==="rejected"&&d(p.reason);return n().catch(d)})},bk="_filterGlow_1gp2j_13",_k="_floatingButton_1gp2j_23",Ck="_badge_1gp2j_54",xk="_configBadge_1gp2j_71",Ak="_configBadgeActive_1gp2j_81",Tk="_configBadgeRevoked_1gp2j_87",Ik="_configBadgeExpired_1gp2j_93",jk="_header_1gp2j_103",Nk="_headerTitle_1gp2j_118",Rk="_brandIcon_1gp2j_135",Dk="_brandCloudSuffix_1gp2j_141",Pk="_projectSlash_1gp2j_146",Ek="_projectName_1gp2j_153",Lk="_taskCountBadge_1gp2j_172",Mk="_headerActions_1gp2j_188",Bk="_sortDirectionBtn_1gp2j_195",Wk="_sortDirectionBtnWidget_1gp2j_202",Fk="_form_1gp2j_210",Ok="_topRow_1gp2j_222",$k="_field_1gp2j_228",Uk="_labelRow_1gp2j_234",zk="_label_1gp2j_234",Hk="_manageLink_1gp2j_248",Gk="_input_1gp2j_267",Vk="_select_1gp2j_268",Zk="_textarea_1gp2j_269",qk="_taskIdInlineLink_1gp2j_303",Kk="_readOnly_1gp2j_322",Yk="_selectWithConfig_1gp2j_330",Jk="_configBtn_1gp2j_340",Xk="_configBtnActive_1gp2j_370",Qk="_hasPath_1gp2j_378",eS="_pathIndicator_1gp2j_383",tS="_formActions_1gp2j_389",nS="_hasCancel_1gp2j_396",aS="_submitBtn_1gp2j_400",sS="_cancelBtn_1gp2j_416",rS="_successMessage_1gp2j_448",oS="_successIcon_1gp2j_454",iS="_spinner_1gp2j_474",cS="_spin_1gp2j_474",lS="_boardRefreshIndicator_1gp2j_478",dS="_destructiveBtn_1gp2j_508",uS="_warningBtn_1gp2j_531",pS="_viewTab_1gp2j_554",mS="_deleteBtn_1gp2j_565",fS="_loading_1gp2j_575",hS="_emptyState_1gp2j_581",gS="_taskList_1gp2j_591",yS="_taskIdBadge_1gp2j_597",kS="_copiedId_1gp2j_627",SS="_highlight_1gp2j_633",vS="_modal_1gp2j_645",wS="_priorityEmoji_1gp2j_653",bS="_metaItem_1gp2j_657",_S="_taskFormDateInput_1gp2j_671",CS="_metaBadge_1gp2j_681",xS="_complexityPill_1gp2j_696",AS="_complexityDots_1gp2j_700",TS="_dot_1gp2j_706",IS="_dotFilled_1gp2j_714",jS="_typePill_1gp2j_720",NS="_type_bug_1gp2j_724",RS="_type_feature_1gp2j_728",DS="_type_chore_1gp2j_732",PS="_type_refactor_1gp2j_736",ES="_type_documentation_1gp2j_740",LS="_type_research_1gp2j_744",MS="_type_security_1gp2j_752",BS="_approachPill_1gp2j_757",WS="_approach_evaluate_1gp2j_762",FS="_approach_collaborate_1gp2j_768",OS="_approach_plan_1gp2j_774",$S="_approachActive_1gp2j_780",US="_statusActionsGroup_1gp2j_785",zS="_statusActionsGroupCompact_1gp2j_791",HS="_statusSelectWrap_1gp2j_795",GS="_statusTaxonomyDropdownWrap_1gp2j_801",VS="_statusTaxonomyDropdown_1gp2j_801",ZS="_statusTaxonomyDropdownCompact_1gp2j_809",qS="_statusTaxonomyDropdownIconOnly_1gp2j_813",KS="_taxonomyDropdownButton_1gp2j_818",YS="_taxonomyDropdownButtonContent_1gp2j_835",JS="_statusTaxonomyDropdownIconOnlyPanel_1gp2j_839",XS="_actionBtn_1gp2j_845",QS="_startWorkBtn_1gp2j_869",ev="_workingBtn_1gp2j_878",tv="_pulse_1gp2j_1",nv="_reviewBtn_1gp2j_884",av="_reviewActiveBtn_1gp2j_894",sv="_reviewPill_1gp2j_900",rv="_archiveTaskBtn_1gp2j_907",ov="_bulkArchiveBtn_1gp2j_916",iv="_bulkDeleteBtn_1gp2j_938",cv="_completeBtn_1gp2j_979",lv="_completeActiveBtn_1gp2j_989",dv="_deleteActiveBtn_1gp2j_995",uv="_disabledBtn_1gp2j_1001",pv="_archiveList_1gp2j_1008",mv="_archiveHeader_1gp2j_1016",fv="_settingsTab_1gp2j_1027",hv="_settingsTabs_1gp2j_1039",gv="_settingsLayout_1gp2j_1053",yv="_settingsSidebar_1gp2j_1060",kv="_settingsSidebarHeader_1gp2j_1070",Sv="_settingsSidebarNav_1gp2j_1079",vv="_settingsSidebarBtn_1gp2j_1088",wv="_settingsSidebarBtnActive_1gp2j_1112",bv="_settingsSidebarGroup_1gp2j_1119",_v="_settingsSidebarGroupBtn_1gp2j_1125",Cv="_settingsSidebarGroupLabel_1gp2j_1129",xv="_settingsSidebarGroupChevron_1gp2j_1133",Av="_settingsSidebarSubnav_1gp2j_1139",Tv="_settingsSidebarSubBtn_1gp2j_1146",Iv="_appScrollbar_1gp2j_1169",jv="_settingsTabBtn_1gp2j_1173",Nv="_settingsTabBtnActive_1gp2j_1199",Rv="_settingsContent_1gp2j_1205",Dv="_settingsToast_1gp2j_1253",Pv="_settingsToastSuccess_1gp2j_1270",Ev="_settingsToastError_1gp2j_1276",Lv="_inputWithPrefix_1gp2j_1282",Mv="_pathHint_1gp2j_1289",Bv="_settingGroup_1gp2j_1302",Wv="_settingTitle_1gp2j_1308",Fv="_settingTitleRow_1gp2j_1317",Ov="_settingTitleActionBtn_1gp2j_1324",$v="_themeOptions_1gp2j_1344",Uv="_buttonGrid_1gp2j_1349",zv="_themeBtn_1gp2j_1361",Hv="_activeTheme_1gp2j_1385",Gv="_pathInputGroup_1gp2j_1393",Vv="_saveSettingsBtn_1gp2j_1402",Zv="_shortcutInputWrapper_1gp2j_1423",qv="_inputIcon_1gp2j_1428",Kv="_settingHelper_1gp2j_1437",Yv="_browseBtn_1gp2j_1444",Jv="_inlineCategoryManager_1gp2j_1463",Xv="_categoryManager_1gp2j_1474",Qv="_categoryList_1gp2j_1480",ew="_categoryChip_1gp2j_1492",tw="_categoryChipLabel_1gp2j_1505",nw="_chipActionBtn_1gp2j_1513",aw="_removeCategoryBtn_1gp2j_1533",sw="_addCategoryForm_1gp2j_1553",rw="_addCategoryBtn_1gp2j_1558",ow="_filesList_1gp2j_1583",iw="_helpLink_1gp2j_1610",cw="_inlineCode_1gp2j_1631",lw="_codeBlock_1gp2j_1642",dw="_taskChildrenSummaryBadges_1gp2j_1666",uw="_taskChildrenProgressBar_1gp2j_1674",pw="_taskChildrenProgressBarSegmentDone_1gp2j_1685",mw="_taskChildrenProgressBarSegmentReview_1gp2j_1691",fw="_taskChildrenProgressBarSegmentInProgress_1gp2j_1697",hw="_taskChildrenProgressBarSegmentBlocked_1gp2j_1703",gw="_taskChildrenProgressText_1gp2j_1709",yw="_taskChildUnlinkBtn_1gp2j_1718",kw="_aboutText_1gp2j_1736",Sw="_versionInfo_1gp2j_1743",vw="_filterBar_1gp2j_1751",ww="_kanbanHintText_1gp2j_1765",bw="_searchContainer_1gp2j_1771",_w="_searchIcon_1gp2j_1778",Cw="_searchInput_1gp2j_1786",xw="_searchActive_1gp2j_1812",Aw="_searchCount_1gp2j_1817",Tw="_clearSearchBtn_1gp2j_1833",Iw="_filterRow_1gp2j_1855",jw="_sortLabel_1gp2j_1861",Nw="_archiveToggle_1gp2j_1869",Rw="_filterContainer_1gp2j_1906",Dw="_filterButton_1gp2j_1911",Pw="_filterActive_1gp2j_1936",Ew="_filterDropdown_1gp2j_1942",Lw="_filterOption_1gp2j_1957",Mw="_filterDivider_1gp2j_1987",Bw="_filterSelect_1gp2j_1993",Ww="_filterToggleBtn_1gp2j_2034",Fw="_inProgressToggle_1gp2j_2056",Ow="_activeInProgress_1gp2j_2074",$w="_activeFilter_1gp2j_2083",Uw="_resetFiltersBtn_1gp2j_2093",zw="_categoryChip_disabled_1gp2j_2126",Hw="_categoryVisibilityToggle_1gp2j_2136",Gw="_editCategoryInput_1gp2j_2149",Vw="_categoryChipActionBtn_1gp2j_2160",Zw="_categoryChipActionBtn_active_1gp2j_2178",qw="_categoryGroup_1gp2j_2183",Kw="_categoryHeader_1gp2j_2191",Yw="_categoryTitle_1gp2j_2205",Jw="_categoryCount_1gp2j_2215",Xw="_categoryItems_1gp2j_2221",Qw="_priorityItem_low_1gp2j_2230",eb="_priorityItem_medium_1gp2j_2234",tb="_priorityItem_high_1gp2j_2238",nb="_priorityItem_critical_1gp2j_2242",ab="_priorityPill_low_1gp2j_2246",sb="_priorityPill_medium_1gp2j_2252",rb="_priorityPill_high_1gp2j_2258",ob="_priorityPill_critical_1gp2j_2264",ib="_selectPriority_low_1gp2j_2279",cb="_selectPriority_medium_1gp2j_2284",lb="_selectPriority_high_1gp2j_2289",db="_selectPriority_critical_1gp2j_2294",ub="_levelSelect_1gp2j_2303",pb="_levelOption_1gp2j_2316",mb="_levelOptionFilled_1gp2j_2333",fb="_levelOption_priority_low_1gp2j_2340",hb="_levelOption_priority_medium_1gp2j_2345",gb="_levelOption_priority_high_1gp2j_2350",yb="_levelOption_priority_critical_1gp2j_2355",kb="_levelOption_complexity_tiny_1gp2j_2362",Sb="_levelOption_complexity_low_1gp2j_2367",vb="_levelOption_complexity_medium_1gp2j_2372",wb="_levelOption_complexity_high_1gp2j_2377",bb="_levelOption_complexity_epic_1gp2j_2382",_b="_levelOptionActive_1gp2j_2389",Cb="_levelOptionSelected_1gp2j_2394",xb="_levelLabel_1gp2j_2402",Ab="_fadeIn_1gp2j_1",Tb="_closeConfigBtn_1gp2j_2427",Ib="_configItem_1gp2j_2449",jb="_settingsLabel_1gp2j_2455",Nb="_settingsHint_1gp2j_2464",Rb="_pathList_1gp2j_2471",Db="_pathChip_1gp2j_2478",Pb="_pathValid_1gp2j_2491",Eb="_pathInvalid_1gp2j_2496",Lb="_pathValidIcon_1gp2j_2501",Mb="_pathInvalidIcon_1gp2j_2506",Bb="_pathText_1gp2j_2511",Wb="_removePathBtn_1gp2j_2518",Fb="_pathCount_1gp2j_2540",Ob="_specialistSection_1gp2j_2563",$b="_toggleHeading_1gp2j_2571",Ub="_dropdownList_1gp2j_2611",zb="_specialistBadge_1gp2j_2620",Hb="_iconGrid_1gp2j_2650",Gb="_iconPickerBtn_1gp2j_2661",Vb="_iconPickerBtnActive_1gp2j_2680",Zb="_categorySubConfig_1gp2j_2687",qb="_colorPickerRow_1gp2j_2695",Kb="_colorPickerGrid_1gp2j_2701",Yb="_colorSwatch_1gp2j_2708",Jb="_colorSwatchActive_1gp2j_2727",Xb="_categoryChipIcon_1gp2j_2733",Qb="_fieldIconWrapper_1gp2j_2738",e_="_fieldIcon_1gp2j_2738",t_="_field_dynamic_1gp2j_2760",n_="_fieldIcon_dynamic_1gp2j_2766",a_="_categoryTitleIcon_1gp2j_2770",s_="_editActionsHeader_1gp2j_2776",r_="_editActionsGroup_1gp2j_2785",o_="_urlInputGroup_1gp2j_2792",i_="_iconBtn_1gp2j_2805",c_="_stickyActionHeader_1gp2j_2826",l_="_taskHierarchyHeader_1gp2j_2843",d_="_taskHierarchyBadgeRow_1gp2j_2850",u_="_taskHierarchyDivider_1gp2j_2858",p_="_taskHierarchyAddBtn_1gp2j_2864",m_="_taskHierarchyEditor_1gp2j_2870",f_="_taskHierarchyInput_1gp2j_2877",h_="_taskSaveStatus_1gp2j_2886",g_="_taskSaveStatusCenter_1gp2j_2897",y_="_taskSaveStatusError_1gp2j_2905",k_="_headerSuccessFeedback_1gp2j_2909",S_="_slideInUp_1gp2j_1",v_="_successCheck_1gp2j_2921",w_="_scaleIn_1gp2j_1",b_="_primaryUpdateBtn_1gp2j_2957",__="_secondaryHeaderBtn_1gp2j_2985",C_="_secondaryHeaderBtnDestructive_1gp2j_3006",x_="_commentSection_1gp2j_3019",A_="_attachmentCaptureContainer_1gp2j_3055",T_="_capturePrompt_1gp2j_3063",I_="_previewContainer_1gp2j_3077",j_="_previewHeader_1gp2j_3083",N_="_attachmentCapturePreview_1gp2j_3093",R_="_actions_1gp2j_3100",D_="_primaryButton_1gp2j_3106",P_="_secondaryButton_1gp2j_3121",E_="_iconButton_1gp2j_3136",L_="_attachmentGrid_1gp2j_3158",M_="_attachmentCard_1gp2j_3165",B_="_attachmentPreviewContainer_1gp2j_3179",W_="_contextFileLink_1gp2j_3200",F_="_attachmentActions_1gp2j_3226",O_="_attachmentActionBtn_1gp2j_3240",$_="_attachmentCaptionInput_1gp2j_3262",U_="_hiddenInput_1gp2j_3280",z_="_contextUploadPanel_1gp2j_3284",H_="_contextUploadActions_1gp2j_3292",G_="_contextDropzone_1gp2j_3300",V_="_contextDropzoneActive_1gp2j_3316",Z_="_contextDropzonePulse_1gp2j_1",q_="_contextLinkRow_1gp2j_3324",K_="_contextNotice_1gp2j_3330",Y_="_documentAttachmentList_1gp2j_3336",J_="_documentAttachmentItem_1gp2j_3343",X_="_documentAttachmentRow_1gp2j_3350",Q_="_documentAttachmentLink_1gp2j_3358",eC="_documentAttachmentMain_1gp2j_3372",tC="_documentAttachmentText_1gp2j_3379",nC="_documentAttachmentIcon_1gp2j_3387",aC="_documentAttachmentName_1gp2j_3398",sC="_documentAttachmentType_1gp2j_3407",rC="_documentAttachmentActions_1gp2j_3420",oC="_documentAttachmentActionBtn_1gp2j_3426",iC="_documentAttachmentCaptionInput_1gp2j_3447",cC="_brokenImage_1gp2j_3475",lC="_brokenImagePlaceholder_1gp2j_3483",dC="_regionOverlay_1gp2j_3497",uC="_selectionBox_1gp2j_3508",pC="_exportRow_1gp2j_3516",mC="_exportItem_1gp2j_3521",fC="_taxonomyDrillDown_1gp2j_3530",hC="_drillDownList_1gp2j_3540",gC="_drillDownSection_1gp2j_3548",yC="_drillDownSectionHeader_1gp2j_3554",kC="_drillDownSectionTitle_1gp2j_3561",SC="_drillDownItem_1gp2j_3570",vC="_drillDownItemDimmed_1gp2j_3592",wC="_drillDownItemActive_1gp2j_3600",bC="_drillDownItemInfo_1gp2j_3605",_C="_drillDownItemText_1gp2j_3611",CC="_drillDownItemLabel_1gp2j_3616",xC="_drillDownItemSubtext_1gp2j_3621",AC="_addTaxonomyBtnSmall_1gp2j_3626",TC="_taxonomyDetailView_1gp2j_3648",IC="_slideIn_1gp2j_1",jC="_detailHeader_1gp2j_3668",NC="_detailTitle_1gp2j_3677",RC="_detailContent_1gp2j_3684",DC="_createOverlay_1gp2j_3691",PC="_createDialog_1gp2j_3703",EC="_zoomIn_1gp2j_1",LC="_dialogActions_1gp2j_3731",MC="_settingsGroup_1gp2j_3749",BC="_settingsItem_1gp2j_3755",WC="_settingLabelGroup_1gp2j_3761",FC="_settingLabel_1gp2j_3761",OC="_settingDescription_1gp2j_3773",$C="_settingInput_1gp2j_3780",UC="_codeBlockWrapper_1gp2j_3803",zC="_codeHeader_1gp2j_3812",HC="_codeHeaderActions_1gp2j_3823",GC="_codeLabel_1gp2j_3830",VC="_copyBtn_1gp2j_3853",ZC="_copyBtnActive_1gp2j_3874",qC="_copyBtnNeutralActive_1gp2j_3880",KC="_headerDivider_1gp2j_3898",YC="_groupByContainer_1gp2j_3904",JC="_groupByLabel_1gp2j_3912",XC="_groupBySelect_1gp2j_3917",QC="_viewSwitcher_1gp2j_3939",ex="_selectWithIcon_1gp2j_3947",tx="_marginBottom16_1gp2j_3951",nx="_headerDraggable_1gp2j_3956",ax="_headerDragging_1gp2j_3960",sx="_filterSelectSort_1gp2j_3968",rx="_archiveRow_1gp2j_3972",ox="_taskScopeToggle_1gp2j_3978",ix="_taskScopeTabs_1gp2j_3986",cx="_taskScopeTab_1gp2j_3986",lx="_taskScopeTabActive_1gp2j_4019",dx="_taskToolbarAction_1gp2j_4031",ux="_overlayHighZ_1gp2j_4047",px="_savedText_1gp2j_4057",mx="_shortcutInput_1gp2j_1423",fx="_saveSettingsBtnWrapper_1gp2j_4065",hx="_marginBottom12_1gp2j_4069",gx="_exportRowGrid_1gp2j_4073",yx="_settingSubtitleCustom_1gp2j_4078",kx="_capitalize_1gp2j_4084",Sx="_marginTop12_1gp2j_4088",vx="_marginTop16_1gp2j_4092",wx="_labelGroupFlex_1gp2j_4096",bx="_codeBlockWrapperCustom_1gp2j_4102",_x="_kanbanWrapper_1gp2j_4108",Cx="_kanbanContainer_1gp2j_4116",xx="_kanbanTopScroll_1gp2j_4138",Ax="_kanbanTopScrollSpacer_1gp2j_4147",Tx="_kanbanColumn_1gp2j_4151",Ix="_kanbanColumnSticky_1gp2j_4167",jx="_kanbanColumnCollapsed_1gp2j_4173",Nx="_kanbanColumnPast_1gp2j_4178",Rx="_kanbanColumnSelectedDay_1gp2j_4183",Dx="_kanbanHeader_1gp2j_4190",Px="_kanbanCount_1gp2j_4200",Ex="_kanbanHeaderDraggable_1gp2j_4220",Lx="_kanbanHeaderPanning_1gp2j_4224",Mx="_kanbanQuickAdd_1gp2j_4228",Bx="_kanbanColorDot_1gp2j_4249",Wx="_kanbanDroppable_1gp2j_4261",Fx="_kanbanDroppableScroll_1gp2j_4270",Ox="_kanbanEmpty_1gp2j_4280",$x="_kanbanCard_1gp2j_4290",Ux="_kanbanCardWrapper_1gp2j_4300",zx="_taxonomyDropdownActive_1gp2j_4308",Hx="_kanbanCardWrapperRaised_1gp2j_4312",Gx="_kanbanCardTitle_1gp2j_4316",Vx="_kanbanBadges_1gp2j_4320",Zx="_kanbanBadge_1gp2j_4320",qx="_headerFlex_1gp2j_4336",Kx="_marginBottom8_1gp2j_4343",Yx="_marginBottom20_1gp2j_4347",Jx="_configPanel_1gp2j_4351",Xx="_configPanelLarge_1gp2j_4360",Qx="_subLabelBlock_1gp2j_4364",eA="_subLabelBlock12_1gp2j_4371",tA="_flexBetween_1gp2j_4375",nA="_flexBetweenCenter_1gp2j_4382",aA="_deleteBtnSmall_1gp2j_4387",sA="_deleteBtnMedium_1gp2j_4393",rA="_trashIcon_1gp2j_4400",oA="_gridConfig_1gp2j_4404",iA="_flexColGap4_1gp2j_4411",cA="_flexColGap4Center_1gp2j_4417",lA="_flex1_1gp2j_4424",dA="_flexCol_1gp2j_4411",uA="_flexGrow1_1gp2j_4434",pA="_inputLabel_1gp2j_4438",mA="_inputLabelBlock_1gp2j_4442",fA="_checkboxInput_1gp2j_4448",hA="_configDividerMargin_1gp2j_4454",gA="_configDividerMargin24_1gp2j_4459",yA="_pathListMargin_1gp2j_4464",kA="_cancelBtnRed_1gp2j_4468",SA="_code_1gp2j_1642",vA="_workflowList_1gp2j_4495",wA="_workflowActions_1gp2j_4503",bA="_textBtn_1gp2j_4512",_A="_workflowGrid_1gp2j_4526",CA="_checkboxLabel_1gp2j_4534",xA="_checkboxSmall_1gp2j_4548",AA="_docWorkspace_1gp2j_4561",TA="_docIndexPanel_1gp2j_4570",IA="_docSpinning_1gp2j_4582",jA="_docSpin_1gp2j_4582",NA="_docViewerPanel_1gp2j_4593",RA="_docViewerEmpty_1gp2j_4601",DA="_marginTop24_1gp2j_4616",PA="_settingSubTitle_1gp2j_4620",EA="_dangerBtn_1gp2j_4629",LA="_aiProfilesExplorer_1gp2j_4645",MA="_aiProfilesListPane_1gp2j_4652",BA="_aiProfilesList_1gp2j_4652",WA="_aiProfilesSection_1gp2j_4662",FA="_aiProfilesSectionHeader_1gp2j_4668",OA="_aiProfileGroup_1gp2j_4676",$A="_aiProfileGroupSelected_1gp2j_4695",UA="_aiProfileGroupDuplicate_1gp2j_4704",zA="_aiProfileGroupHeader_1gp2j_4709",HA="_aiProfileName_1gp2j_4717",GA="_aiProfileMetaRow_1gp2j_4722",VA="_aiProfileSurfaceBadge_1gp2j_4732",ZA="_aiProfileDuplicateBadge_1gp2j_4742",qA="_aiProfileMergeSection_1gp2j_4754",KA="_aiProfileMergeRow_1gp2j_4761",YA="_aiProfileIdChip_1gp2j_4768",JA="_aiProfileKeepBadge_1gp2j_4780",XA="_aiProfileMergeActions_1gp2j_4794",QA="_aiProfileDetailPane_1gp2j_4801",eT="_aiProfileDetailCard_1gp2j_4806",tT="_aiProfileDetailHero_1gp2j_4815",nT="_aiProfileDetailIcon_1gp2j_4821",aT="_aiProfileDetailHeading_1gp2j_4835",sT="_aiProfileDetailTitleRow_1gp2j_4840",rT="_aiProfileDetailTitle_1gp2j_4840",oT="_aiProfileDetailMetaRow_1gp2j_4854",iT="_aiProfileDetailHandle_1gp2j_4862",cT="_aiProfileDetailSectionBadge_1gp2j_4867",lT="_aiProfileDetailLinkedCount_1gp2j_4881",dT="_aiProfileDetailDescription_1gp2j_4886",uT="_aiProfileDetailGrid_1gp2j_4893",pT="_aiProfileDetailStat_1gp2j_4900",mT="_aiProfileDetailStatLabel_1gp2j_4913",fT="_aiProfileDetailStatValue_1gp2j_4923",hT="_aiProfileInstanceSection_1gp2j_4930",gT="_aiProfileInstanceSectionHeader_1gp2j_4936",yT="_aiProfileInstanceList_1gp2j_4946",kT="_aiProfileInstanceCard_1gp2j_4952",ST="_aiProfileInstanceTopRow_1gp2j_4964",vT="_aiProfileInstanceName_1gp2j_4971",wT="_aiProfileInstanceMeta_1gp2j_4978",u={filterGlow:bk,floatingButton:_k,badge:Ck,configBadge:xk,configBadgeActive:Ak,configBadgeRevoked:Tk,configBadgeExpired:Ik,header:jk,headerTitle:Nk,brandIcon:Rk,brandCloudSuffix:Dk,projectSlash:Pk,projectName:Ek,taskCountBadge:Lk,headerActions:Mk,sortDirectionBtn:Bk,sortDirectionBtnWidget:Wk,form:Fk,topRow:Ok,field:$k,labelRow:Uk,label:zk,manageLink:Hk,input:Gk,select:Vk,textarea:Zk,taskIdInlineLink:qk,readOnly:Kk,selectWithConfig:Yk,configBtn:Jk,configBtnActive:Xk,hasPath:Qk,pathIndicator:eS,formActions:tS,hasCancel:nS,submitBtn:aS,cancelBtn:sS,successMessage:rS,successIcon:oS,spinner:iS,spin:cS,boardRefreshIndicator:lS,destructiveBtn:dS,warningBtn:uS,viewTab:pS,deleteBtn:mS,loading:fS,emptyState:hS,taskList:gS,taskIdBadge:yS,copiedId:kS,highlight:SS,modal:vS,priorityEmoji:wS,metaItem:bS,taskFormDateInput:_S,metaBadge:CS,complexityPill:xS,complexityDots:AS,dot:TS,dotFilled:IS,typePill:jS,type_bug:NS,type_feature:RS,type_chore:DS,type_refactor:PS,type_documentation:ES,type_research:LS,"type_ui-ux":"_type_ui-ux_1gp2j_748",type_security:MS,approachPill:BS,approach_evaluate:WS,approach_collaborate:FS,approach_plan:OS,approachActive:$S,statusActionsGroup:US,statusActionsGroupCompact:zS,statusSelectWrap:HS,statusTaxonomyDropdownWrap:GS,statusTaxonomyDropdown:VS,statusTaxonomyDropdownCompact:ZS,statusTaxonomyDropdownIconOnly:qS,taxonomyDropdownButton:KS,taxonomyDropdownButtonContent:YS,statusTaxonomyDropdownIconOnlyPanel:JS,actionBtn:XS,startWorkBtn:QS,workingBtn:ev,pulse:tv,reviewBtn:nv,reviewActiveBtn:av,reviewPill:sv,archiveTaskBtn:rv,bulkArchiveBtn:ov,bulkDeleteBtn:iv,completeBtn:cv,completeActiveBtn:lv,deleteActiveBtn:dv,disabledBtn:uv,archiveList:pv,archiveHeader:mv,settingsTab:fv,settingsTabs:hv,settingsLayout:gv,settingsSidebar:yv,settingsSidebarHeader:kv,settingsSidebarNav:Sv,settingsSidebarBtn:vv,settingsSidebarBtnActive:wv,settingsSidebarGroup:bv,settingsSidebarGroupBtn:_v,settingsSidebarGroupLabel:Cv,settingsSidebarGroupChevron:xv,settingsSidebarSubnav:Av,settingsSidebarSubBtn:Tv,appScrollbar:Iv,settingsTabBtn:jv,settingsTabBtnActive:Nv,settingsContent:Rv,settingsToast:Dv,settingsToastSuccess:Pv,settingsToastError:Ev,inputWithPrefix:Lv,pathHint:Mv,settingGroup:Bv,settingTitle:Wv,settingTitleRow:Fv,settingTitleActionBtn:Ov,themeOptions:$v,buttonGrid:Uv,themeBtn:zv,activeTheme:Hv,pathInputGroup:Gv,saveSettingsBtn:Vv,shortcutInputWrapper:Zv,inputIcon:qv,settingHelper:Kv,browseBtn:Yv,inlineCategoryManager:Jv,categoryManager:Xv,categoryList:Qv,categoryChip:ew,categoryChipLabel:tw,chipActionBtn:nw,removeCategoryBtn:aw,addCategoryForm:sw,addCategoryBtn:rw,filesList:ow,helpLink:iw,inlineCode:cw,codeBlock:lw,taskChildrenSummaryBadges:dw,taskChildrenProgressBar:uw,taskChildrenProgressBarSegmentDone:pw,taskChildrenProgressBarSegmentReview:mw,taskChildrenProgressBarSegmentInProgress:fw,taskChildrenProgressBarSegmentBlocked:hw,taskChildrenProgressText:gw,taskChildUnlinkBtn:yw,aboutText:kw,versionInfo:Sw,filterBar:vw,kanbanHintText:ww,searchContainer:bw,searchIcon:_w,searchInput:Cw,searchActive:xw,searchCount:Aw,clearSearchBtn:Tw,filterRow:Iw,sortLabel:jw,archiveToggle:Nw,filterContainer:Rw,filterButton:Dw,filterActive:Pw,filterDropdown:Ew,filterOption:Lw,filterDivider:Mw,filterSelect:Bw,filterToggleBtn:Ww,inProgressToggle:Fw,activeInProgress:Ow,activeFilter:$w,resetFiltersBtn:Uw,categoryChip_disabled:zw,categoryVisibilityToggle:Hw,editCategoryInput:Gw,categoryChipActionBtn:Vw,categoryChipActionBtn_active:Zw,categoryGroup:qw,categoryHeader:Kw,categoryTitle:Yw,categoryCount:Jw,categoryItems:Xw,priorityItem_low:Qw,priorityItem_medium:eb,priorityItem_high:tb,priorityItem_critical:nb,priorityPill_low:ab,priorityPill_medium:sb,priorityPill_high:rb,priorityPill_critical:ob,selectPriority_low:ib,selectPriority_medium:cb,selectPriority_high:lb,selectPriority_critical:db,"critical-glow":"_critical-glow_1gp2j_1",levelSelect:ub,levelOption:pb,levelOptionFilled:mb,levelOption_priority_low:fb,levelOption_priority_medium:hb,levelOption_priority_high:gb,levelOption_priority_critical:yb,levelOption_complexity_tiny:kb,levelOption_complexity_low:Sb,levelOption_complexity_medium:vb,levelOption_complexity_high:wb,levelOption_complexity_epic:bb,levelOptionActive:_b,levelOptionSelected:Cb,levelLabel:xb,fadeIn:Ab,closeConfigBtn:Tb,configItem:Ib,settingsLabel:jb,settingsHint:Nb,pathList:Rb,pathChip:Db,pathValid:Pb,pathInvalid:Eb,pathValidIcon:Lb,pathInvalidIcon:Mb,pathText:Bb,removePathBtn:Wb,pathCount:Fb,specialistSection:Ob,toggleHeading:$b,dropdownList:Ub,specialistBadge:zb,iconGrid:Hb,iconPickerBtn:Gb,iconPickerBtnActive:Vb,categorySubConfig:Zb,colorPickerRow:qb,colorPickerGrid:Kb,colorSwatch:Yb,colorSwatchActive:Jb,categoryChipIcon:Xb,fieldIconWrapper:Qb,fieldIcon:e_,field_dynamic:t_,fieldIcon_dynamic:n_,categoryTitleIcon:a_,editActionsHeader:s_,editActionsGroup:r_,urlInputGroup:o_,iconBtn:i_,stickyActionHeader:c_,taskHierarchyHeader:l_,taskHierarchyBadgeRow:d_,taskHierarchyDivider:u_,taskHierarchyAddBtn:p_,taskHierarchyEditor:m_,taskHierarchyInput:f_,taskSaveStatus:h_,taskSaveStatusCenter:g_,taskSaveStatusError:y_,headerSuccessFeedback:k_,slideInUp:S_,successCheck:v_,scaleIn:w_,primaryUpdateBtn:b_,secondaryHeaderBtn:__,secondaryHeaderBtnDestructive:C_,commentSection:x_,attachmentCaptureContainer:A_,capturePrompt:T_,previewContainer:I_,previewHeader:j_,attachmentCapturePreview:N_,actions:R_,primaryButton:D_,secondaryButton:P_,iconButton:E_,attachmentGrid:L_,attachmentCard:M_,attachmentPreviewContainer:B_,contextFileLink:W_,attachmentActions:F_,attachmentActionBtn:O_,attachmentCaptionInput:$_,hiddenInput:U_,contextUploadPanel:z_,contextUploadActions:H_,contextDropzone:G_,contextDropzoneActive:V_,contextDropzonePulse:Z_,contextLinkRow:q_,contextNotice:K_,documentAttachmentList:Y_,documentAttachmentItem:J_,documentAttachmentRow:X_,documentAttachmentLink:Q_,documentAttachmentMain:eC,documentAttachmentText:tC,documentAttachmentIcon:nC,documentAttachmentName:aC,documentAttachmentType:sC,documentAttachmentActions:rC,documentAttachmentActionBtn:oC,documentAttachmentCaptionInput:iC,brokenImage:cC,brokenImagePlaceholder:lC,regionOverlay:dC,selectionBox:uC,exportRow:pC,exportItem:mC,taxonomyDrillDown:fC,drillDownList:hC,drillDownSection:gC,drillDownSectionHeader:yC,drillDownSectionTitle:kC,drillDownItem:SC,drillDownItemDimmed:vC,drillDownItemActive:wC,drillDownItemInfo:bC,drillDownItemText:_C,drillDownItemLabel:CC,drillDownItemSubtext:xC,addTaxonomyBtnSmall:AC,taxonomyDetailView:TC,slideIn:IC,detailHeader:jC,detailTitle:NC,detailContent:RC,createOverlay:DC,createDialog:PC,zoomIn:EC,dialogActions:LC,settingsGroup:MC,settingsItem:BC,settingLabelGroup:WC,settingLabel:FC,settingDescription:OC,settingInput:$C,codeBlockWrapper:UC,codeHeader:zC,codeHeaderActions:HC,codeLabel:GC,copyBtn:VC,copyBtnActive:ZC,copyBtnNeutralActive:qC,headerDivider:KC,groupByContainer:YC,groupByLabel:JC,groupBySelect:XC,viewSwitcher:QC,selectWithIcon:ex,marginBottom16:tx,headerDraggable:nx,headerDragging:ax,filterSelectSort:sx,archiveRow:rx,taskScopeToggle:ox,taskScopeTabs:ix,taskScopeTab:cx,taskScopeTabActive:lx,taskToolbarAction:dx,overlayHighZ:ux,savedText:px,shortcutInput:mx,saveSettingsBtnWrapper:fx,marginBottom12:hx,exportRowGrid:gx,settingSubtitleCustom:yx,capitalize:kx,marginTop12:Sx,marginTop16:vx,labelGroupFlex:wx,codeBlockWrapperCustom:bx,kanbanWrapper:_x,kanbanContainer:Cx,kanbanTopScroll:xx,kanbanTopScrollSpacer:Ax,kanbanColumn:Tx,kanbanColumnSticky:Ix,kanbanColumnCollapsed:jx,kanbanColumnPast:Nx,kanbanColumnSelectedDay:Rx,kanbanHeader:Dx,kanbanCount:Px,kanbanHeaderDraggable:Ex,kanbanHeaderPanning:Lx,kanbanQuickAdd:Mx,kanbanColorDot:Bx,kanbanDroppable:Wx,kanbanDroppableScroll:Fx,kanbanEmpty:Ox,kanbanCard:$x,kanbanCardWrapper:Ux,taxonomyDropdownActive:zx,kanbanCardWrapperRaised:Hx,kanbanCardTitle:Gx,kanbanBadges:Vx,kanbanBadge:Zx,headerFlex:qx,marginBottom8:Kx,marginBottom20:Yx,configPanel:Jx,configPanelLarge:Xx,subLabelBlock:Qx,subLabelBlock12:eA,flexBetween:tA,flexBetweenCenter:nA,deleteBtnSmall:aA,deleteBtnMedium:sA,trashIcon:rA,gridConfig:oA,flexColGap4:iA,flexColGap4Center:cA,flex1:lA,flexCol:dA,flexGrow1:uA,inputLabel:pA,inputLabelBlock:mA,checkboxInput:fA,configDividerMargin:hA,configDividerMargin24:gA,pathListMargin:yA,cancelBtnRed:kA,code:SA,workflowList:vA,workflowActions:wA,textBtn:bA,workflowGrid:_A,checkboxLabel:CA,checkboxSmall:xA,docWorkspace:AA,docIndexPanel:TA,docSpinning:IA,docSpin:jA,docViewerPanel:NA,docViewerEmpty:RA,marginTop24:DA,settingSubTitle:PA,dangerBtn:EA,aiProfilesExplorer:LA,aiProfilesListPane:MA,aiProfilesList:BA,aiProfilesSection:WA,aiProfilesSectionHeader:FA,aiProfileGroup:OA,aiProfileGroupSelected:$A,aiProfileGroupDuplicate:UA,aiProfileGroupHeader:zA,aiProfileName:HA,aiProfileMetaRow:GA,aiProfileSurfaceBadge:VA,aiProfileDuplicateBadge:ZA,aiProfileMergeSection:qA,aiProfileMergeRow:KA,aiProfileIdChip:YA,aiProfileKeepBadge:JA,aiProfileMergeActions:XA,aiProfileDetailPane:QA,aiProfileDetailCard:eT,aiProfileDetailHero:tT,aiProfileDetailIcon:nT,aiProfileDetailHeading:aT,aiProfileDetailTitleRow:sT,aiProfileDetailTitle:rT,aiProfileDetailMetaRow:oT,aiProfileDetailHandle:iT,aiProfileDetailSectionBadge:cT,aiProfileDetailLinkedCount:lT,aiProfileDetailDescription:dT,aiProfileDetailGrid:uT,aiProfileDetailStat:pT,aiProfileDetailStatLabel:mT,aiProfileDetailStatValue:fT,aiProfileInstanceSection:hT,aiProfileInstanceSectionHeader:gT,aiProfileInstanceList:yT,aiProfileInstanceCard:kT,aiProfileInstanceTopRow:ST,aiProfileInstanceName:vT,aiProfileInstanceMeta:wT},bT="_standaloneWrapper_1mq9f_1",_T="_standalonePage_1mq9f_11",CT="_standaloneHeader_1mq9f_21",xT="_standaloneTitle_1mq9f_27",AT="_standaloneContent_1mq9f_31",TT="_workspaceToolRail_1mq9f_37",IT="_workspaceToolRailMain_1mq9f_54",jT="_workspaceToolRailBottom_1mq9f_62",NT="_workspaceToolRailDivider_1mq9f_72",RT="_workspaceToolButton_1mq9f_79",DT="_workspaceToolButtonActive_1mq9f_99",PT="_headerTitleWidget_1mq9f_123",pn={standaloneWrapper:bT,standalonePage:_T,standaloneHeader:CT,standaloneTitle:xT,standaloneContent:AT,workspaceToolRail:TT,workspaceToolRailMain:IT,workspaceToolRailBottom:jT,workspaceToolRailDivider:NT,workspaceToolButton:RT,workspaceToolButtonActive:DT,headerTitleWidget:PT},ET="_overlay_11v7l_1",LT="_browser_11v7l_16",MT="_header_11v7l_27",BT="_pathInfo_11v7l_36",WT="_actions_11v7l_52",FT="_list_11v7l_57",OT="_item_11v7l_63",$T="_itemCurrent_11v7l_80",UT="_itemFile_11v7l_86",zT="_empty_11v7l_90",Ln={overlay:ET,browser:LT,header:MT,pathInfo:BT,actions:WT,list:FT,item:OT,itemCurrent:$T,itemFile:UT,empty:zT},HT="_overlay_1hhtx_2",GT="_overlayHighZ_1hhtx_15",VT="_modal_1hhtx_20",ZT="_draggableModal_1hhtx_46",qT="_draggableHeader_1hhtx_53",KT="_headerActions_1hhtx_61",YT="_modalContent_1hhtx_69",JT="_form_1hhtx_78",XT="_formActions_1hhtx_89",QT="_modalFooter_1hhtx_96",eI="_modalSizeSm_1hhtx_102",tI="_modalSizeMd_1hhtx_106",nI="_modalSizeLg_1hhtx_110",aI="_modalSizeXl_1hhtx_114",sI="_modalSizeFull_1hhtx_118",rI="_settingsViewModal_1hhtx_123",oI="_unsavedOverlay_1hhtx_142",iI="_unsavedModal_1hhtx_147",cI="_unsavedHeader_1hhtx_153",lI="_unsavedTitle_1hhtx_158",dI="_unsavedContent_1hhtx_162",uI="_unsavedText_1hhtx_166",pI="_unsavedActions_1hhtx_171",dt={overlay:HT,overlayHighZ:GT,modal:VT,draggableModal:ZT,draggableHeader:qT,headerActions:KT,modalContent:YT,form:JT,formActions:XT,modalFooter:QT,modalSizeSm:eI,modalSizeMd:tI,modalSizeLg:nI,modalSizeXl:aI,modalSizeFull:sI,settingsViewModal:rI,unsavedOverlay:oI,unsavedModal:iI,unsavedHeader:cI,unsavedTitle:lI,unsavedContent:dI,unsavedText:uI,unsavedActions:pI};function mI(t){const n=t.charAt(0).toUpperCase()+t.slice(1).toLowerCase(),s={Category:"Categories",Priority:"Priorities",Status:"Statuses"};return s[n]?s[n]:`${t}s`}function bi({label:t,options:n,selected:s,onChange:r,variant:o="label",containerStyle:d}){const[l,p]=a.useState(!1),g=a.useRef(null);a.useEffect(()=>{const S=$=>{g.current&&!g.current.contains($.target)&&p(!1)};return document.addEventListener("mousedown",S),()=>document.removeEventListener("mousedown",S)},[]);const _=S=>{s.includes(S)?r(s.filter($=>$!==S)):r([...s,S])},w=n.length>0&&n.every(S=>{const $=o==="label"?S.label:S.value;return s.includes($)}),A=!n.some(S=>{const $=o==="label"?S.label:S.value;return s.includes($)}),y=()=>{r(w?[]:n.map(S=>o==="label"?S.label:S.value))},k=n.filter(S=>{const $=o==="label"?S.label:S.value;return s.includes($)}).length,b=mI(t),L=w?`All ${b}`:A?`No ${b}`:k===1?`1 ${t}`:`${k} ${b}`;return e.jsxs("div",{className:u.filterContainer,ref:g,style:d,children:[e.jsxs("button",{className:`${u.filterButton} ${w?"":u.filterActive}`,onClick:()=>p(!l),title:`Filter by ${t}`,children:[e.jsx("span",{children:L}),e.jsx(jc,{size:14,style:{transform:l?"rotate(180deg)":"none",transition:"transform 0.2s",opacity:.5}})]}),l&&e.jsxs("div",{className:`${u.filterDropdown} ${u.appScrollbar} tf-scrollbar`,children:[e.jsxs("div",{className:u.filterOption,onClick:y,children:[e.jsx("input",{type:"checkbox",checked:w,onChange:()=>{}}),e.jsx("span",{style:{fontWeight:600},children:"Toggle All"})]}),e.jsx("div",{className:u.filterDivider}),n.map(S=>{const $=o==="label"?S.label:S.value,J=s.includes($);return e.jsxs("div",{className:u.filterOption,onClick:()=>_($),children:[e.jsx("input",{type:"checkbox",checked:J,onChange:()=>{}}),e.jsx("span",{children:S.label})]},S.value)})]})]})}const fI="_taskItem_x943c_1",hI="_compressed_x943c_20",gI="_taskHeader_x943c_25",yI="_taskReferenceCluster_x943c_30",kI="_taskMeta_x943c_34",SI="_taskTitle_x943c_40",vI="_taskItemRecentlyChanged_x943c_67",wI="_inProgress_x943c_128",bI="_onHold_x943c_139",_I="_readyForReview_x943c_150",CI="_completed_x943c_161",xI="_cancelled_x943c_172",AI="_archived_x943c_183",TI="_taskContent_x943c_193",II="_kanbanCardOverlay_x943c_202",jI="_taskReferenceText_x943c_241",NI="_taskReferenceDivider_x943c_250",RI="_taskActions_x943c_257",DI="_taskMetaCompact_x943c_282",PI="_taskMetaRow_x943c_289",EI="_taskMetaBadgeGroup_x943c_297",LI="_taskDescription_x943c_303",MI="_taskLatestComment_x943c_362",BI="_taskCancellationReason_x943c_383",WI="_archiveBadge_x943c_537",FI="_attachmentThumbnails_x943c_542",OI="_attachmentImageRow_x943c_549",$I="_attachmentDocumentList_x943c_556",UI="_attachmentThumbnail_x943c_542",zI="_contextDocThumb_x943c_589",HI="_contextDocMain_x943c_615",GI="_contextDocText_x943c_622",VI="_contextDocIcon_x943c_630",ZI="_contextDocName_x943c_641",qI="_contextDocType_x943c_651",KI="_taskSpecialists_x943c_663",YI="_taxonomiesList_x943c_672",Vt={taskItem:fI,compressed:hI,taskHeader:gI,taskReferenceCluster:yI,taskMeta:kI,taskTitle:SI,taskItemRecentlyChanged:vI,inProgress:wI,onHold:bI,readyForReview:_I,completed:CI,cancelled:xI,archived:AI,taskContent:TI,kanbanCardOverlay:II,taskReferenceText:jI,taskReferenceDivider:NI,taskActions:RI,taskMetaCompact:DI,taskMetaRow:PI,taskMetaBadgeGroup:EI,taskDescription:LI,taskLatestComment:MI,taskCancellationReason:BI,archiveBadge:WI,attachmentThumbnails:FI,attachmentImageRow:OI,attachmentDocumentList:$I,attachmentThumbnail:UI,contextDocThumb:zI,contextDocMain:HI,contextDocText:GI,contextDocIcon:VI,contextDocName:ZI,contextDocType:qI,taskSpecialists:KI,taxonomiesList:YI},op=({children:t,className:n,onTaskIdClick:s})=>{if(!t)return null;const r=l=>ut.Children.toArray(l).some(g=>ut.isValidElement(g)?String(g.props?.className||"").includes("task-list-item"):!1),o=/\b(task-\d{10,}-[a-z0-9]+)\b/gi,d=l=>{if(!s)return l;if(typeof l=="string"){const _=Array.from(l.matchAll(o));if(!_.length)return l;const w=[];let A=0;for(let y=0;y<_.length;y+=1){const k=_[y],b=k[1],L=k.index??-1;L<A||(L>A&&w.push(l.slice(A,L)),w.push(e.jsx("button",{type:"button",className:u.taskIdInlineLink,onClick:S=>{S.preventDefault(),S.stopPropagation(),s(b)},children:b},`${b}-${L}-${y}`)),A=L+b.length)}return A<l.length&&w.push(l.slice(A)),w}if(Array.isArray(l))return l.map(d);if(!ut.isValidElement(l))return l;const p=typeof l.type=="string"?l.type:"";if(p==="code"||p==="pre"||p==="a")return l;const g=l.props?.children;return g===void 0?l:ut.cloneElement(l,{},ut.Children.map(g,d))};return e.jsx("div",{className:n,children:e.jsx(xh,{remarkPlugins:[Ah,Th],components:{p:({children:l})=>e.jsx("p",{children:d(l)}),ul:({children:l})=>e.jsx("ul",{style:r(l)?{paddingLeft:0}:void 0,children:l}),li:({children:l,className:p})=>{const g=String(p||"").includes("task-list-item");return e.jsx("li",{className:p,style:g?{listStyle:"none"}:void 0,children:d(l)})},input:({type:l,checked:p})=>l!=="checkbox"?e.jsx("input",{type:l,checked:p,readOnly:!0}):e.jsx("input",{type:"checkbox",checked:!!p,readOnly:!0,style:{cursor:"default",marginRight:8}}),code:({children:l,className:p,...g})=>{const _=String(l||"").replace(/\n$/,"");return/language-(\w+)/.test(p||"")||_.includes(`
3
+ `)?e.jsx("pre",{className:u.codeBlock,children:e.jsx("code",{className:p,...g,children:_})}):e.jsx("code",{className:u.inlineCode,...g,children:_})}},children:t})})};function pf({label:t,title:n,ariaLabel:s,copied:r=!1,disabled:o=!1,className:d="",onClick:l,children:p}){return e.jsxs("button",{type:"button",className:`${u.taskIdBadge} ${r?u.copiedId:""} ${d}`.trim(),onClick:l,disabled:o,title:n,"aria-label":s,children:[r?e.jsx(Xr,{size:13}):e.jsx(Rl,{size:13}),e.jsx("span",{children:p??t})]})}function Hd({copied:t,disabled:n=!1,label:s,onClick:r,title:o="Copy task reference",ariaLabel:d,className:l=""}){return e.jsx(pf,{copied:t,disabled:n,label:"",onClick:r,title:o,ariaLabel:d,className:l,children:s})}const JI=(t,n=10)=>{const s=Qd[t?.toLowerCase()]||{icon:"FileCode"},r=$s[s.icon]||Qf;return e.jsx(r,{size:n})},$d=(t,n)=>{if(!t)return null;if(!n.trim())return t;const s=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),r=t.split(new RegExp(`(${s})`,"gi"));return e.jsx(e.Fragment,{children:r.map((o,d)=>o.toLowerCase()===n.toLowerCase()?e.jsx("mark",{className:u.highlight,children:o},d):o)})};function Bl(t){return t.trim().replace(/\\/g,"/")}function mf(t){return t.split("?")[0].split("#")[0]}function lu(t){return typeof t=="string"?t:String(t.path||"").trim()}function ff(t){const s=mf(Bl(t)).match(/\/api\/taskforce\/documents\/([^/]+)\/content$/i);if(!s?.[1])return null;try{return decodeURIComponent(s[1]).trim()||null}catch{return s[1].trim()||null}}function hf(t){if(!t.includes("/api/taskforce/context-link?path="))return null;try{const s=new URL(t,window.location.origin).searchParams.get("path");return s?Bl(s):null}catch{return null}}function XI(t,n){const s=(n||(typeof t=="string"?"":t.fsPath||"")).trim();if(s)return Bl(s);const r=lu(t),o=hf(r);return o?Bl(o):null}function QI(t,n){const s=String(typeof t=="string"?"":t.assetId||"").trim();if(s)return s;const r=lu(t);return ff(r)}function ej(t,n){const s=lu(t);return ff(s)?!0:[(n||(typeof t=="string"?"":t.fsPath||"")).trim(),typeof t=="string"?"":String(t.originalFilename||"").trim(),typeof t=="string"?"":String(t.displayName||"").trim(),typeof t=="string"?"":String(t.caption||"").trim(),hf(s)||"",s].some(o=>{if(!o)return!1;const d=mf(Bl(o)).toLowerCase();return d.endsWith(".md")||d.endsWith(".markdown")})}function ip(t,n){const s=lu(t),r=XI(t,n);if(!r||!ej(t,r))return!1;const o=QI(t),d=new CustomEvent("taskforce:open-markdown-document",{detail:{path:s,fsPath:r,...o?{assetId:o}:{}},cancelable:!0});return!window.dispatchEvent(d)}const tj="I-";function gf(t){return Ol(tj,t)}function nj(t){return t.trim().replace(/\\/g,"/")}function yf(t){return typeof t=="string"?t:String(t.path||"").trim()}function aj(t){return/\.(png|jpe?g|webp)(\?|#|$)/i.test(t)}function sj(t){return typeof t=="string"?nj(t).split("/").pop()||"Image attachment":String(t.caption||t.displayName||t.originalFilename||t.fsPath||t.path.split("/").pop()||"Image attachment").trim()}function kf(t,n){if(typeof t=="string")return!1;const s=String(t.assetId||"").trim(),r=yf(t);return!!(s&&r&&aj(r))}function cp(t,n){if(!kf(t))return!1;const s=t,r=String(n?.taskId||s.taskId||"").trim(),o=String(n?.taskReferenceLabel||"").trim(),d=String(s.assetId||"").trim(),l=gf(s),p=yf(t),g=new CustomEvent("taskforce:open-annotated-attachment",{detail:{...r?{taskId:r}:{},...o?{taskReferenceLabel:o}:{},assetId:d,...l?{imageReferenceLabel:l}:{},path:p,displayName:sj(t)},cancelable:!0});return!window.dispatchEvent(g)}function am(t,n){if(!t)return null;const s=String(t.taskId||"").trim(),r=String(t.assetId||"").trim(),o=String(t.path||"").trim(),d=String(t.displayName||"").trim()||"Image attachment";if(!r||!o)return null;const l=String(t.taskReferenceLabel||"").trim(),p=s?n.find(_=>_.id===s):void 0,g=s?l||er(p)||s:void 0;return{...s?{taskId:s}:{},...g?{taskReferenceLabel:g}:{},assetId:r,imageReferenceLabel:String(t.imageReferenceLabel||"").trim()||void 0,path:o,displayName:d}}function tu(t){const n=String(t||"").trim().replace(/\\/g,"/");if(!n)return"";const s=n.split("/").filter(Boolean);return s[s.length-1]||""}function Cp(t){const n=String(t||"").trim(),s=n.lastIndexOf(".");return s<=0?{stem:n,ext:""}:{stem:n.slice(0,s),ext:n.slice(s)}}function Sf(t,n){const s=String(t||"").trim(),r=String(n||"").trim();return s?r&&s.startsWith(`${r}-`)?s.slice(r.length+1):s.replace(/^asset-[a-z0-9-]+-/i,""):""}function rj(t){return String(t||"").replace(/-\d{13,}$/g,"").replace(/[_-]+/g," ").replace(/\s+/g," ").trim()}function sm(t,n){const{stem:s,ext:r}=Cp(tu(t)),o=Sf(s,n),d=rj(o||s);return d?`${d}${r}`:tu(t)||"Untitled document"}function zu(t,n){const s=String(t||"").trim();if(!s)return!0;const r=tu(s),{stem:o}=Cp(r),d=String(n||"").trim();if(d&&o.toLowerCase()===d.toLowerCase())return!0;const l=Sf(o,n);return l?l!==o:!0}function oj(t){const n=String(t.logicalName||"").trim();if(n&&!zu(n,t.assetId))return n;const s=String(t.displayName||"").trim();if(s&&!zu(s,t.assetId))return s;const r=String(t.title||"").trim();if(r&&!zu(r,t.assetId))return r;const o=String(t.originalFilename||"").trim();if(o)return sm(o,t.assetId);const d=String(t.fsPath||"").trim();return d?sm(d,t.assetId):"Untitled document"}function ij(t){return oj(t)}function cj(t){const n=ij(t),s=String(t.originalFilename||t.fsPath||"").trim(),r=Cp(tu(s)).ext;return r?n.toLowerCase().endsWith(r.toLowerCase())?n:`${n}${r}`:n}const lj="_taxonomyDropdown_tt12a_1",dj="_taxonomyDropdownActive_tt12a_6",uj="_taxonomyDropdownButton_tt12a_11",pj="_taxonomyDropdownOpen_tt12a_50",mj="_taxonomyDropdownButtonContent_tt12a_56",fj="_taxonomyDropdownIcon_tt12a_64",hj="_taxonomyDropdownLabel_tt12a_72",gj="_taxonomyDropdownChevron_tt12a_81",yj="_taxonomyDropdownChevronOpen_tt12a_87",kj="_taxonomyDropdownPanel_tt12a_91",Sj="_taxonomyDropdownPanelPortal_tt12a_110",vj="_taxonomyDropdownOption_tt12a_129",wj="_taxonomyDropdownOptionHighlighted_tt12a_157",bj="_taxonomyDropdownOptionSelected_tt12a_163",Ka={taxonomyDropdown:lj,taxonomyDropdownActive:dj,taxonomyDropdownButton:uj,taxonomyDropdownOpen:pj,taxonomyDropdownButtonContent:mj,taxonomyDropdownIcon:fj,taxonomyDropdownLabel:hj,taxonomyDropdownChevron:gj,taxonomyDropdownChevronOpen:yj,taxonomyDropdownPanel:kj,taxonomyDropdownPanelPortal:Sj,taxonomyDropdownOption:vj,taxonomyDropdownOptionHighlighted:wj,taxonomyDropdownOptionSelected:bj};function Il({value:t,options:n,onChange:s,placeholder:r="Select...",required:o=!1,disabled:d=!1,className:l="",ariaLabelledBy:p,ariaLabel:g,hideSelectedLabel:_=!1,hideChevron:w=!1,panelClassName:A="",portalPanel:y=!1,panelMinWidth:k}){const[b,L]=a.useState(!1),[S,$]=a.useState(-1),[J,U]=a.useState({}),X=a.useRef(null),q=a.useRef(null),ee=a.useRef(null),W=n.find(O=>String(O.value)===String(t));a.useEffect(()=>{if(!b)return;const O=R=>{const z=R.target,re=!!X.current?.contains(z),be=!!ee.current?.contains(z);!re&&!be&&(L(!1),$(-1))};return document.addEventListener("mousedown",O),()=>document.removeEventListener("mousedown",O)},[b]),a.useEffect(()=>{if(!b)$(-1);else{const O=n.findIndex(R=>String(R.value)===String(t));$(O>=0?O:0)}},[b,n,t]),a.useEffect(()=>{if(!b||!y)return;const O=()=>{const R=q.current;if(!R)return;const z=R.getBoundingClientRect(),re=Math.max(k||0,z.width),be=Math.max(8,z.right-re),We=z.bottom;U({position:"fixed",top:We,left:be,minWidth:re,zIndex:2e3})};return O(),window.addEventListener("resize",O),window.addEventListener("scroll",O,!0),()=>{window.removeEventListener("resize",O),window.removeEventListener("scroll",O,!0)}},[b,y,k]);const Re=()=>{d||L(!b)},V=O=>{s(O.value),L(!1),q.current?.focus()},te=O=>{if(!d)switch(O.key){case"Enter":case" ":O.preventDefault(),b?S>=0&&V(n[S]):L(!0);break;case"Escape":O.preventDefault(),L(!1),q.current?.focus();break;case"ArrowDown":O.preventDefault(),b?$(R=>R<n.length-1?R+1:0):L(!0);break;case"ArrowUp":O.preventDefault(),b?$(R=>R>0?R-1:n.length-1):L(!0);break;case"Home":O.preventDefault(),b&&$(0);break;case"End":O.preventDefault(),b&&$(n.length-1);break;case"Tab":L(!1);break}},xe=(O,R)=>{const z=O.icon&&$s[O.icon]?$s[O.icon]:xi,re=O.color?Ia(O.color):"var(--text-secondary)",be=R?.hideLabel===!0;return e.jsxs(e.Fragment,{children:[e.jsx("span",{className:`taxonomyDropdownIcon ${Ka.taxonomyDropdownIcon}`,style:{color:re},children:e.jsx(z,{size:16})}),!be&&e.jsx("span",{className:`taxonomyDropdownLabel ${Ka.taxonomyDropdownLabel}`,children:O.label})]})},de=b?e.jsx("div",{ref:ee,id:`taxonomy-listbox-${r.replace(/\s+/g,"-")}`,className:`taxonomyDropdownPanel ${Ka.taxonomyDropdownPanel} ${y?Ka.taxonomyDropdownPanelPortal:""} ${A}`,role:"listbox","aria-labelledby":p,"aria-label":g,style:y?J:void 0,children:n.map((O,R)=>{const z=String(O.value)===String(t),re=R===S;return e.jsx("div",{className:`taxonomyDropdownOption ${Ka.taxonomyDropdownOption} ${z?`taxonomyDropdownOptionSelected ${Ka.taxonomyDropdownOptionSelected}`:""} ${re?`taxonomyDropdownOptionHighlighted ${Ka.taxonomyDropdownOptionHighlighted}`:""}`,role:"option","aria-selected":z,onClick:()=>V(O),onMouseEnter:()=>$(R),style:(()=>{const be=O.color,We=Ia(be),Ce=!We||We.startsWith("var("),Ve=Ce?"#8b5cf6":We,Fe=Ce?"20":"30",ve=Ce?"05":"10";return{"--option-color":We||"var(--text-primary)","--option-border":`${Ve}${Fe}`,"--option-bg":`${Ve}${ve}`}})(),children:xe(O)},String(O.value))})}):null;return e.jsxs("div",{ref:X,className:`taxonomyDropdown ${Ka.taxonomyDropdown} ${b?`taxonomyDropdownActive ${Ka.taxonomyDropdownActive}`:""} ${l}`,children:[e.jsxs("button",{ref:q,type:"button",className:`taxonomyDropdownButton ${Ka.taxonomyDropdownButton} ${b?`taxonomyDropdownOpen ${Ka.taxonomyDropdownOpen}`:""}`,onClick:Re,onKeyDown:te,disabled:d,role:"combobox","aria-haspopup":"listbox","aria-expanded":b,"aria-controls":`taxonomy-listbox-${r.replace(/\s+/g,"-")}`,"aria-labelledby":p,"aria-label":g,style:(()=>{if(!W)return{};const O=W.color,R=Ia(O),z=!R||R.startsWith("var("),re=z?"#8b5cf6":R,be=z?"30":"50",We=z?"05":"10";return{"--field-color":R||"var(--text-primary)","--field-border":`${re}${be}`,"--field-bg":`${re}${We}`}})(),children:[e.jsx("span",{className:`taxonomyDropdownButtonContent ${Ka.taxonomyDropdownButtonContent}`,children:W?xe(W,{hideLabel:_}):e.jsxs(e.Fragment,{children:[e.jsx("span",{className:`taxonomyDropdownIcon ${Ka.taxonomyDropdownIcon}`,children:e.jsx(xi,{size:16})}),e.jsx("span",{className:`taxonomyDropdownLabel ${Ka.taxonomyDropdownLabel}`,children:r})]})}),!w&&e.jsx(jc,{size:16,className:`taxonomyDropdownChevron ${Ka.taxonomyDropdownChevron} ${b?`taxonomyDropdownChevronOpen ${Ka.taxonomyDropdownChevronOpen}`:""}`})]}),y?de?Ci.createPortal(de,document.body):null:de]})}function vf({task:t,disabled:n=!1,compressed:s=!1,shortLabels:r=!1,showLabel:o=!0,onSetStatus:d,onArchiveTask:l}){const p=t?.status||"task",g=!!t&&(p==="done"||p==="cancelled"),_=_c.map(w=>({...w,label:(s||r)&&w.shortLabel||w.label}));return e.jsxs("div",{className:`${u.statusActionsGroup} ${s?u.statusActionsGroupCompact:""}`,children:[g&&e.jsx("button",{type:"button",className:`${u.actionBtn} ${u.archiveTaskBtn}`,onClick:()=>t&&!n&&l?.(t),disabled:n,title:"Archive Now","aria-label":"Archive task",children:e.jsx(eh,{size:s?12:16})}),e.jsx("div",{className:`${u.statusSelectWrap} ${u.statusTaxonomyDropdownWrap}`,children:e.jsx(Il,{value:p,options:_,disabled:n||!t,ariaLabel:"Status",hideSelectedLabel:!o,hideChevron:!o,className:`${u.statusTaxonomyDropdown} ${s?u.statusTaxonomyDropdownCompact:""} ${o?"":u.statusTaxonomyDropdownIconOnly}`,panelClassName:o?"":u.statusTaxonomyDropdownIconOnlyPanel,portalPanel:!o,panelMinWidth:o?void 0:144,onChange:w=>{t&&d?.(t,w)}})})]})}function Rs(t,n,s){const r=s?.(n,t);if(typeof r=="string")return r;if(t==null||t==="")return"none";if(Array.isArray(t)){const o=t.map(d=>Rs(d,n,s)).filter(Boolean);return o.length>0?o.join(", "):"none"}return typeof t=="object"?"updated":String(t)}function rm(t){return Array.isArray(t)?t.map((n,s)=>{const r=n&&typeof n=="object"?n:{},o=Number(r.order);return{id:String(r.id||"").trim(),title:String(r.title||"").trim(),isCompleted:!!r.isCompleted,order:Number.isFinite(o)?o:s}}):[]}function _j(t){const n=rm(t?.from),s=rm(t?.to),r=new Map(n.map(l=>[l.id||l.title,l])),o=new Map(s.map(l=>[l.id||l.title,l]));for(const[l,p]of o.entries()){const g=r.get(l);if(!g)return p.title?`Checklist item added: ${p.title}`:"Checklist item added";if(g.isCompleted!==p.isCompleted)return p.title?p.isCompleted?`Checklist item completed: ${p.title}`:`Checklist item reopened: ${p.title}`:p.isCompleted?"Checklist item completed":"Checklist item reopened"}for(const[l,p]of r.entries())if(!o.has(l))return p.title?`Checklist item removed: ${p.title}`:"Checklist item removed";return n.length===s.length&&n.every(l=>o.has(l.id||l.title))&&n.some((p,g)=>{const _=s[g];return(p.id||p.title)!==(_?.id||_?.title)})?"Checklist reordered":"Checklist updated"}function wf(t,n,s){if(t==="checklistItems")return _j(n);if(t==="description"){const r=Rs(n?.from,t,s)!=="none",o=Rs(n?.to,t,s)!=="none";return!r&&o?"Description added":r&&!o?"Description cleared":"Description updated"}return`${t}: ${Rs(n?.from,t,s)} -> ${Rs(n?.to,t,s)}`}function bf(t,n){const s=t.details?.changes||{},r=Object.keys(s);if(t.action==="task-created")return"Task created";if(t.action==="task-comment-added")return"Comment added";if(t.action==="task-archived")return"Task marked done";if(t.action==="task-cancelled")return"Task cancelled";if(t.action==="task-unarchived")return"Task restored";if(t.action==="task-status-changed"&&s.status)return`Status: ${Rs(s.status.from,"status",n)} -> ${Rs(s.status.to,"status",n)}`;if(t.action==="task-schedule-changed")return s.scheduledDate?`Scheduled: ${Rs(s.scheduledDate.from,"scheduledDate",n)} -> ${Rs(s.scheduledDate.to,"scheduledDate",n)}`:s.dueDate?`Due: ${Rs(s.dueDate.from,"dueDate",n)} -> ${Rs(s.dueDate.to,"dueDate",n)}`:"Schedule updated";if(t.action==="task-relationship-changed"&&s.workstreamId)return`Workstream: ${Rs(s.workstreamId.from,"workstreamId",n)} -> ${Rs(s.workstreamId.to,"workstreamId",n)}`;if(t.action==="task-attachments-changed")return"Attachments updated";if(r.length===1){const o=r[0],d=s[o];return wf(o,d,n)}return r.length>1?`${r.length} fields updated`:"Task updated"}function Cj(t){const n=Array.isArray(t.activity)&&t.activity.length>0?t.activity:Array.isArray(t.comments)?t.comments.map(s=>({id:`comment:${s.id}`,type:"comment",timestamp:s.timestamp,comment:s})):[];return n.length===0?null:[...n].sort((s,r)=>{const o=Date.parse(String(s.timestamp||"")),d=Date.parse(String(r.timestamp||""));return Number.isFinite(o)&&Number.isFinite(d)&&o!==d?d-o:String(r.id||"").localeCompare(String(s.id||""))})[0]||null}function xj(t,n){return t?t.type==="comment"?t.comment.text:bf(t.event,n):""}const{MessageSquare:Aj,User:Tj,Bot:Ij,Gauge:jj,ClipboardList:Nj,HelpCircle:om,File:Rj}=$s,Dj=({task:t,searchQuery:n="",copiedId:s=null,taxonomies:r=[],types:o=[],priorities:d=[],categories:l=[],assigneeOptions:p=[],taskWorkstream:g=null,taskInitiative:_=null,isOverlay:w=!1,isArchived:A=!1,readOnlyMode:y=null,isRecentlyChanged:k=!1,onClick:b,onCopyId:L,onToggleInProgress:S,onToggleReview:$,onToggleComplete:J,onToggleCancel:U,onSetStatus:X,onArchiveTask:q,onUnarchive:ee,onDelete:W,deleteActionTitle:Re,onOpenTaskById:V,compressed:te=!1,showStatusLabel:xe=!0})=>{const de=er(t)||t.id,O=bp(g)||g?.id||"",R=Zy(_)||_?.id||"",z=d.find(i=>String(i.value)===String(t.priority)),re=z?z.label.toLowerCase().replace(/\s+/g,"-"):String(t.priority),be=l.find(i=>i.value===t.category||i.label===t.category),We=typeof t.complexity=="number"?t.complexity:Number(t.complexity??3),Ce=Number.isFinite(We)?Math.max(1,Math.min(5,Math.round(We))):3,Ve={1:"Tiny",2:"Low",3:"Mid",4:"High",5:"Epic"},Fe={1:"tiny",2:"low",3:"medium",4:"high",5:"epic"},ve=Ve[Ce],Oe=`var(--complexity-${Fe[Ce]})`,v=ag(t.priority,re),M=!!u[`priorityItem_${v}`],C=Xd(t.assignee),oe=vc(t.assignee,p),D=ut.useMemo(()=>Cj(t),[t]),f=y||(t.isDeleted?"deleted":A?"archived":null),x=f!==null,P=ut.useMemo(()=>xj(D),[D]),B=Array.isArray(t.activity)&&t.activity.length>0?t.activity.length:t.comments?.length||0,Ae=[Vt.taskItem,t.status==="on-hold"?Vt.onHold:"",t.status==="in-progress"?Vt.inProgress:"",t.status==="review"?Vt.readyForReview:"",t.status==="done"?Vt.completed:"",t.status==="cancelled"?Vt.cancelled:"",k?Vt.taskItemRecentlyChanged:"",u[`priorityItem_${v}`]||"",w?Vt.kanbanCardOverlay:"",A?Vt.archived:"",te?Vt.compressed:""].filter(Boolean).join(" "),F=Ia(z?.color),ne=o.find(i=>i.value===t.type),ae=Ia(ne?.color)||ak(t.type),ie=i=>{const De=typeof i=="string"?i:i.path,Je=typeof i=="string"?"":(i.fsPath||"").trim(),Ie=typeof i=="string"?"":(i.displayName||"").trim(),ht=typeof i=="string"?"":(i.originalFilename||"").trim(),yt=typeof i=="string"?"":(i.caption||"").trim();return[Je,ht,Ie,yt,De].some(Ht=>/\.(png|jpe?g|webp|gif)(\?|#|$)/i.test(Ht))},Z=i=>{const De=typeof i=="string"?i:i.path,Je=De.includes("/api/taskforce/documents/"),Ie=typeof i=="string"?"":(i.displayName||"").trim();if(Je&&typeof i!="string")return cj({displayName:i.displayName,originalFilename:i.originalFilename,fsPath:i.fsPath,assetId:i.assetId||null});const ht=typeof i=="string"?"":(i.caption||"").trim();if(ht)return ht;if(Ie)return Ie;const yt=typeof i=="string"?"":(i.originalFilename||"").trim();return yt||De.split("?")[0].split("#")[0].split("/").pop()||"Context file"},H=i=>{const De=typeof i=="string"?i:i.path,Je=typeof i=="string"?"":(i.fsPath||"").trim(),Ie=typeof i=="string"?"":(i.caption||"").trim(),ht=typeof i=="string"?"":(i.originalFilename||"").trim(),yt=[];if(Je&&yt.push(Je),ht&&yt.push(ht),Ie&&yt.push(Ie),De.includes("/api/taskforce/context-link?path="))try{const Ht=new URL(De,"http://localhost").searchParams.get("path");Ht&&yt.push(Ht)}catch{}yt.push(De);for(const $t of yt){const bn=$t.split("?")[0].split("#")[0].split("/").pop()||"",nn=bn.lastIndexOf(".");if(nn<=0||nn===bn.length-1)continue;const Kt=bn.slice(nn+1);if(Kt)return Kt.slice(0,5).toUpperCase()}return"FILE"},ue={"--task-change-glow-color":F||`var(--priority-${v})`,...F?{borderLeftColor:F,[`--priority-${v}`]:F}:{},...!M&&F?{borderLeft:`4px solid ${F}`}:{}},Pe=i=>i.replace(/\b\w/g,De=>De.toUpperCase()),se=$l(r,[t]),$e=t.checklistItems||[],et=$e.length,tt=et>0?$e.filter(i=>i.isCompleted).length:0,Ct=(i,De)=>{i.stopPropagation(),L?.(i,De)};return e.jsxs("div",{className:Ae,onClick:()=>b?.(t),style:ue,"data-task-card":"true",children:[e.jsxs("div",{className:Vt.taskHeader,children:[e.jsxs("div",{className:Vt.taskReferenceCluster,children:[_?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:Vt.taskReferenceText,children:R}),e.jsx("span",{className:Vt.taskReferenceDivider,children:"/"})]}):null,g?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:Vt.taskReferenceText,children:O}),e.jsx("span",{className:Vt.taskReferenceDivider,children:"/"})]}):null,e.jsx(Hd,{copied:s===de,onClick:i=>Ct(i,de),title:"Copy task reference",className:A?Vt.archiveBadge:"",label:$d(de,n)})]}),e.jsx("div",{className:Vt.taskActions,onClick:i=>i.stopPropagation(),children:x?ee||W?e.jsxs(e.Fragment,{children:[ee&&e.jsx("button",{type:"button",className:u.actionBtn,onClick:()=>ee(t.id),title:f==="deleted"?"Restore deleted task":"Restore archived task",children:e.jsx(Xu,{size:16})}),W&&e.jsx("button",{type:"button",className:`${u.actionBtn} ${u.deleteBtn}`,onClick:()=>W(t.id),title:Re||(f==="deleted"?"Delete Permanently":"Move to Trash"),children:e.jsx(El,{size:16})})]}):null:e.jsx(vf,{task:t,compressed:te,shortLabels:!0,showLabel:xe,onSetStatus:(i,De)=>{if(X){X(i,De);return}if(De==="in-progress"){S?.(i);return}if(De==="review"){$?.(i);return}if(De==="done"){J?.(i);return}De==="cancelled"&&U?.(i)},onArchiveTask:q})})]}),e.jsxs("div",{className:Vt.taskContent,children:[x&&e.jsx("div",{className:`${Vt.taskMeta} ${Vt.taskMetaCompact}`}),e.jsxs("div",{children:[e.jsxs("div",{className:Vt.taskTitle,style:te?{fontSize:"13px",lineHeight:"1.4"}:{},children:[f==="archived"&&"✓ ",f==="deleted"&&"Deleted: ",$d(t.title,n)]}),t.description&&!x&&!te&&e.jsx("div",{className:Vt.taskDescription,children:e.jsx(op,{onTaskIdClick:V,children:t.description})})]}),t.attachments&&t.attachments.length>0&&!x&&!te&&e.jsxs("div",{className:Vt.attachmentThumbnails,children:[e.jsx("div",{className:Vt.attachmentImageRow,children:(t.attachments||[]).map((i,De)=>{const Je=typeof i=="string"?i:i.path;return ie(i)?e.jsx("div",{className:Vt.attachmentThumbnail,onClick:Ie=>{Ie.stopPropagation(),!cp(typeof i=="string"?{path:Je}:i,{taskId:t.id,taskReferenceLabel:de})&&window.open(Je,"_blank")},children:e.jsx("img",{src:Je,alt:`Attachment ${De}`})},De):null})}),e.jsx("div",{className:Vt.attachmentDocumentList,children:(t.attachments||[]).map((i,De)=>{const Je=typeof i=="string"?i:i.path,Ie=typeof i=="string"?void 0:i.fsPath,ht=Z(i);if(ie(i))return null;const yt=H(i);return e.jsxs("button",{type:"button",className:Vt.contextDocThumb,onClick:$t=>{$t.stopPropagation(),!ip(i,Ie)&&window.open(Je,"_blank")},title:ht,style:{"--context-doc-accent":sk(yt)},children:[e.jsxs("span",{className:Vt.contextDocMain,children:[e.jsx("span",{className:Vt.contextDocIcon,"aria-hidden":"true",children:e.jsx(Rj,{size:13})}),e.jsx("span",{className:Vt.contextDocText,children:e.jsx("span",{className:Vt.contextDocName,children:ht})})]}),e.jsx("span",{className:Vt.contextDocType,children:yt})]},De)})})]}),t.status==="cancelled"&&t.canceledReason&&!te&&e.jsxs("div",{className:Vt.taskCancellationReason,children:[e.jsx("strong",{children:"Cancellation Reason:"})," ",$d(t.canceledReason,n)]}),P&&!x&&!te&&e.jsxs("div",{className:Vt.taskLatestComment,children:[e.jsx("strong",{children:"Latest Activity:"})," ",$d(P.length>120?P.substring(0,120)+"...":P,n)]}),!x&&se.length>0&&!te&&e.jsx("div",{className:`${Vt.taskSpecialists} ${Vt.taxonomiesList}`,children:se.map(i=>{const De=t.taxonomies?.[i.id];return De?(Array.isArray(De)?De:[De]).map(Ie=>{const ht=i.options.find(nn=>nn.value===Ie);if(!ht)return null;const yt=$s[ht.icon||"Layers"]||Qu,$t=Ia(ht.color)||"var(--text-primary)",Ht=i.status==="retired"?`${i.label} (Retired)`:i.label,bn=ht.status==="retired"?`${ht.label} (Retired)`:ht.label;return e.jsx("span",{className:u.specialistBadge,style:{borderColor:`${$t}50`,backgroundColor:`${$t}15`,color:$t},title:`${Ht}: ${Pe(bn)}`,children:e.jsx(yt,{size:10})},`${i.id}-${Ie}`)}):null})}),e.jsx("div",{className:Vt.taskMeta,children:x?e.jsx("span",{children:t.category}):e.jsx(e.Fragment,{children:e.jsxs("div",{className:Vt.taskMetaRow,style:te?{marginBottom:0}:void 0,children:[e.jsxs("div",{className:Vt.taskMetaBadgeGroup,children:[(()=>{const i=Ia(be?.color),De=be?.icon||"Folder",Je=$s[De]||Ai;return e.jsx("span",{className:u.metaBadge,title:Pe(t.category),style:{color:i||"var(--text-secondary)",backgroundColor:i?`${i}15`:"var(--bg-tertiary)",borderColor:i?`${i}40`:"transparent"},children:e.jsx(Je,{size:14})})})(),e.jsx("span",{className:`${u.metaBadge} ${u[`type_${t.type}`]||""}`,title:Pe(t.type||fs),style:{color:`var(--type-color, ${ae})`,backgroundColor:`color-mix(in srgb, var(--type-color, ${ae}), transparent 90%)`,borderColor:`color-mix(in srgb, var(--type-color, ${ae}), transparent 75%)`},children:ne?.icon?(()=>{const i=$s[ne.icon]||om;return e.jsx(i,{size:14})})():JI(t.type,14)}),z&&e.jsx("span",{className:u.metaBadge,style:{color:F||"var(--text-secondary)",backgroundColor:F?`${F}15`:"var(--bg-tertiary)",borderColor:F?`${F}40`:"var(--border-color)"},title:`${z.label}`,children:(()=>{const i=z.icon||"AlertCircle",De=$s[i]||th;return e.jsx(De,{size:14})})()}),B>0&&e.jsxs("span",{className:u.metaBadge,title:`${B} activity items`,style:{color:"var(--text-muted)",backgroundColor:"var(--bg-tertiary)",borderColor:"var(--border-primary)",gap:"4px",padding:"0 8px"},children:[e.jsx(Aj,{size:14}),e.jsx("span",{children:B})]}),et>0&&e.jsxs("span",{className:u.metaBadge,title:`${tt}/${et} checklist items complete`,style:{color:"var(--text-muted)",backgroundColor:"var(--bg-tertiary)",borderColor:"var(--border-primary)",gap:"4px",padding:"0 8px"},children:[e.jsx(Nj,{size:14}),e.jsx("span",{children:`${tt}/${et}`})]})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"6px"},children:[e.jsxs("span",{className:u.metaBadge,title:`AI-estimated complexity: ${ve} (${Ce}/5)`,style:{color:Oe,backgroundColor:`color-mix(in srgb, ${Oe}, transparent 88%)`,borderColor:`color-mix(in srgb, ${Oe}, transparent 72%)`,gap:"4px",padding:"0 8px"},children:[e.jsx(jj,{size:14}),!te&&e.jsx("span",{children:ve})]}),e.jsx("span",{className:u.metaBadge,title:`Assigned to: ${oe}`,"aria-label":C==="unassigned"?"Unassigned":`Assigned to ${oe}`,style:{backgroundColor:C==="agent"?"color-mix(in srgb, var(--color-violet-500, #8b5cf6), transparent 88%)":C==="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:C==="agent"?"var(--color-violet-500, #8b5cf6)":C==="member"?"var(--color-green-500, #22c55e)":"var(--text-secondary, #888)",borderColor:C==="agent"?"color-mix(in srgb, var(--color-violet-500, #8b5cf6), transparent 72%)":C==="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:C==="agent"?e.jsx(Ij,{size:te?14:16}):C==="member"?e.jsx(Tj,{size:te?14:16}):e.jsx(om,{size:te?14:16})})]})]})})})]})]})},Wl=ut.memo(Dj),nu="168px";function _f(){return e.jsx("span",{style:{fontSize:"12px",fontWeight:600,color:"var(--text-secondary)",marginRight:"4px"},children:we("standalone.filtersCaps")})}function _i({label:t,options:n,selected:s,onChange:r,variant:o="label"}){return e.jsx(bi,{label:t,options:n,selected:s,onChange:r,variant:o,containerStyle:{flex:`0 0 ${nu}`,maxWidth:nu}})}function Cf({onClick:t}){return e.jsxs("button",{onClick:t,style:{background:"none",border:"none",color:"var(--text-secondary)",cursor:"pointer",fontSize:"12px",display:"flex",alignItems:"center",gap:"4px"},children:[e.jsx(ji,{size:12})," ",we("standalone.clearFilters")]})}function im({label:t,options:n,selected:s,onChange:r,allLabel:o,title:d}){const[l,p]=ut.useState(!1),g=ut.useRef(null),w=n.find(y=>y.value===s)?.label||o;ut.useEffect(()=>{const y=k=>{g.current&&!g.current.contains(k.target)&&p(!1)};return document.addEventListener("mousedown",y),()=>document.removeEventListener("mousedown",y)},[]);const A=y=>{r(y),p(!1)};return e.jsxs("div",{className:u.filterContainer,ref:g,style:{flex:`0 0 ${nu}`,maxWidth:nu},children:[e.jsxs("button",{type:"button",className:`${u.filterButton} ${s?u.filterActive:""}`,onClick:()=>p(y=>!y),title:d||`Filter by ${t}`,"aria-haspopup":"listbox","aria-expanded":l,children:[e.jsx("span",{children:w}),e.jsx(jc,{size:14,style:{transform:l?"rotate(180deg)":"none",transition:"transform 0.2s",opacity:.5}})]}),l&&e.jsxs("div",{className:`${u.filterDropdown} ${u.appScrollbar} tf-scrollbar`,role:"listbox","aria-label":t,children:[e.jsxs("button",{type:"button",className:u.filterOption,onClick:()=>A(""),"aria-selected":!s,children:[e.jsx(Xr,{size:14,style:{opacity:s?0:1}}),e.jsx("span",{style:{fontWeight:s?500:600},children:o})]}),e.jsx("div",{className:u.filterDivider}),n.map(y=>{const k=y.value===s;return e.jsxs("button",{type:"button",className:u.filterOption,onClick:()=>A(y.value),"aria-selected":k,children:[e.jsx(Xr,{size:14,style:{opacity:k?1:0}}),e.jsx("span",{style:{fontWeight:k?600:500},children:y.label})]},y.value)})]})]})}function xf({scope:t,onScopeChange:n,className:s,labelClassName:r}){return e.jsxs("div",{className:s,children:[e.jsx("span",{className:r,children:"Scope"}),e.jsx("div",{className:u.taskScopeTabs,role:"tablist","aria-label":"Task scope",children:[{value:"open",label:"Open"},{value:"archived",label:"Archived"},{value:"deleted",label:"Deleted"}].map(o=>{const d=t===o.value;return e.jsx("button",{type:"button",className:`${u.taskScopeTab} ${d?u.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 Af({onClick:t,disabled:n=!1,className:s,title:r="Permanently delete all deleted tasks",children:o="Delete All Permanently"}){return e.jsxs("button",{type:"button",className:s,onClick:t,disabled:n,title:r,children:[e.jsx(El,{size:14}),o]})}const{Search:cm,ClipboardList:Pj,ChevronRight:Ej,ChevronDown:Lj,Folder:Mj,Archive:Bj,RotateCcw:Wj,X:Fj,Plus:Oj,ArrowUpDown:$j,Trash2:Uj}=$s,Tf=a.forwardRef((t,n)=>{const{tasks:s,archivedTasks:r,categories:o,types:d,priorities:l,taxonomyDisplayLabels:p,assigneeOptions:g=[],workstreams:_=[],initiatives:w=[],searchQuery:A,filterCategories:y,filterTypes:k,filterPriorities:b,filterStatus:L,filterAssignees:S=[],filterTaxonomies:$,sortBy:J,sortOrder:U,showArchive:X,taskScope:q,collapsedCategories:ee,loadingTasks:W,filteredTasks:Re,filteredArchive:V,groupedTasks:te,filteredDeletedTasks:xe=[],groupedDeletedTasks:de={},copiedId:O,recentlyChangedTaskIds:R=[],showTaskCardStatusLabel:z=!0,onSearchChange:re,onFilterCategoriesChange:be,onFilterTypesChange:We,onFilterPrioritiesChange:Ce,onFilterStatusChange:Ve,onFilterAssigneesChange:Fe,onTaxonomyFilterChange:ve,onSortByChange:Oe,onSortOrderChange:v,onShowArchiveChange:M,onTaskScopeChange:C,onClearFilters:oe,onToggleCategory:D,onEditTask:f,onOpenTaskById:x,onCopyId:P,onToggleInProgress:B,onToggleReview:Ae,onToggleComplete:F,onToggleCancel:ne,onSetStatus:ae,onArchiveTask:ie,onBulkArchive:Z,onUnarchive:H,onDelete:ue,onDeleteAllDeleted:Pe,onFetchArchive:se,onAddTaskToCategory:$e,supplementalTasks:et=[],taxonomies:tt}=t,Ct=new Set(R),i=ut.useMemo(()=>new Map(_.map(me=>[me.id,me])),[_]),De=ut.useMemo(()=>new Map(w.map(me=>[me.id,me])),[w]),Je=ut.useCallback(me=>{const Ee=me.workstreamId&&i.get(me.workstreamId)||null,Zt=Ee?.initiativeId&&De.get(Ee.initiativeId)||null;return{taskWorkstream:Ee,taskInitiative:Zt}},[De,i]),Ie=[...s,...r,...et],ht=!!C,yt=C,$t=q??(X?"archived":"open"),Ht=ht?$t==="archived"?V:$t==="deleted"?xe:Re:Re,bn=ht?$t==="archived"?{Archived:V}:$t==="deleted"?de:te:te,nn=ht?$t==="deleted"?"deleted":$t==="archived"?"archived":null:null,Kt=A?we("taskList.noMatchingTasks"):$t==="archived"?"No archived tasks found.":$t==="deleted"?"No deleted tasks found.":we("taskList.noActiveTasks"),_n=o.filter(me=>!me.disabled),qt=o.filter(me=>me.disabled&&Ie.some(Ee=>Ee.category===me.value)),Hn=[..._n,...qt.filter(me=>!_n.some(Ee=>Ee.value===me.value))].map(me=>({value:me.value,label:me.disabled?`${me.label} (Legacy)`:me.label})),on=d.filter(me=>me.status!=="retired"),Nn=d.filter(me=>me.status==="retired"&&Ie.some(Ee=>Ee.type===me.value)),Nt=[...on,...Nn.filter(me=>!on.some(Ee=>Ee.value===me.value))].map(me=>({value:me.value,label:me.status==="retired"?`${me.label} (Retired)`:me.label})),Bn=$l(tt,Ie).filter(me=>me.filterEnabled!==!1).map(me=>({...me,options:_p(me,Ie)})),an=ut.useMemo(()=>[{value:"created",label:we("taskList.sortCreated")},{value:"updated",label:we("taskList.sortUpdated")},{value:"priority",label:we("taskList.sortPriority")},...uf(tt,Ie)],[Ie,we,tt]);return e.jsxs("div",{className:u.viewTab,ref:n,children:[e.jsxs("div",{className:u.filterBar,children:[e.jsxs("div",{className:u.searchContainer,children:[e.jsx(cm,{size:16,className:u.searchIcon}),e.jsx("input",{type:"text",className:u.searchInput,placeholder:we("taskList.searchPlaceholder"),value:A,onChange:me=>re(me.target.value)}),A&&e.jsx("button",{className:u.clearSearchBtn,onClick:()=>re(""),title:we("taskList.clearSearchTitle"),children:e.jsx(Fj,{size:14})})]}),e.jsxs("div",{className:u.filterRow,children:[e.jsx(bi,{label:p?.category||we("taskList.categoryLabel"),options:Hn,selected:y,onChange:be,variant:"value"}),e.jsx(bi,{label:p?.type||we("taskList.typeLabel"),options:Nt,selected:k,onChange:We,variant:"value"})]}),e.jsxs("div",{className:u.filterRow,children:[e.jsx(bi,{label:p?.priority||we("taskList.priorityLabel"),options:l,selected:b,onChange:Ce,variant:"value"}),e.jsx(bi,{label:we("taskList.statusLabel"),options:Yr,selected:L,onChange:Ve,variant:"value"}),e.jsx(bi,{label:we("taskList.assigneeLabel"),options:g,selected:S,onChange:me=>Fe?.(me),variant:"value"})]}),Bn.map(me=>e.jsx(bi,{label:me.status==="retired"?`${me.label} (Retired)`:me.label,options:me.options.map(Ee=>({...Ee,label:Ee.status==="retired"?`${Ee.label} (Retired)`:Ee.label})),selected:$[me.id]||[],onChange:Ee=>ve(me.id,Ee),variant:"value"},me.id)),e.jsxs("div",{className:u.filterRow,children:[e.jsxs("div",{className:u.sortLabel,children:[e.jsx($j,{size:14,style:{marginRight:"4px"}})," ",we("taskList.sortByLabel")]}),e.jsx("select",{value:J,onChange:me=>Oe(me.target.value),className:`${u.filterSelect} ${u.filterSelectSort} `,children:an.map(me=>e.jsx("option",{value:me.value,children:me.label},me.value))}),e.jsx("button",{className:`${u.resetFiltersBtn} ${u.sortDirectionBtnWidget}`,onClick:v,title:we(U==="desc"?"taskList.sortDirectionDescTitle":"taskList.sortDirectionAscTitle"),children:U==="desc"?e.jsx(bm,{size:14}):e.jsx(_m,{size:14})}),e.jsx("button",{className:u.resetFiltersBtn,onClick:oe,title:we("taskList.resetFiltersTitle"),children:e.jsx(Wj,{size:14})})]}),e.jsxs("div",{className:`${u.filterRow} ${u.archiveRow} `,children:[$t==="open"?e.jsxs("button",{className:`${u.bulkArchiveBtn} ${s.some(me=>me.status==="done"||me.status==="cancelled")?"":u.disabledBtn} `,onClick:()=>s.some(me=>me.status==="done"||me.status==="cancelled")&&Z(),disabled:!s.some(me=>me.status==="done"||me.status==="cancelled"),title:s.some(me=>me.status==="done"||me.status==="cancelled")?we("taskList.archiveAllTitle"):we("taskList.noTasksToArchiveTitle"),children:[e.jsx(Bj,{size:12}),e.jsx("span",{children:we("taskList.archiveFinished")})]}):$t==="deleted"&&Pe?e.jsx(Af,{className:`${u.bulkArchiveBtn} ${u.taskToolbarAction} ${u.bulkDeleteBtn} ${xe.length===0?u.disabledBtn:""}`,onClick:()=>xe.length>0&&Pe(),disabled:xe.length===0,title:xe.length>0?"Empty trash":"Trash is already empty",children:"Empty Trash"}):e.jsx("div",{}),ht?e.jsx(xf,{scope:$t,onScopeChange:me=>{yt?.(me),me==="archived"?(M(!0),se()):X&&M(!1)},className:`${u.archiveToggle} ${u.taskScopeToggle}`}):e.jsxs("label",{className:u.archiveToggle,children:[e.jsx("input",{type:"checkbox","aria-label":"Archived",checked:X,onChange:me=>{M(me.target.checked),me.target.checked&&se()}}),e.jsx("span",{children:"Include Archive"})]})]})]}),W&&s.length===0?e.jsx("div",{className:u.loading,children:e.jsx(Fa,{size:24,className:u.spinner})}):Ht.length===0&&!W?e.jsxs("div",{className:u.emptyState,children:[A?e.jsx(cm,{size:48}):$t==="deleted"?e.jsx(Uj,{size:48}):e.jsx(Pj,{size:48}),e.jsx("p",{children:Kt})]}):e.jsx("div",{className:u.taskList,style:{opacity:W?.6:1,transition:"opacity 0.2s ease"},children:Object.entries(bn).map(([me,Ee])=>{if(Ee.length===0)return null;const Zt=ee[me];return e.jsxs("div",{className:u.categoryGroup,children:[e.jsx("div",{className:u.categoryHeader,onClick:()=>D(me),children:e.jsxs("div",{className:u.categoryTitle,children:[Zt?e.jsx(Ej,{size:16}):e.jsx(Lj,{size:16}),(()=>{const Lt=o.find(G=>G.label===me),Rn=Lt?.icon&&Dc[Lt.icon]?Dc[Lt.icon]:Mj,xt=Ia(Lt?.color)||"var(--color-purple, #8b5cf6)";return e.jsx(Rn,{size:16,className:u.categoryTitleIcon,style:{color:xt}})})(),me,e.jsxs("span",{className:u.categoryCount,children:["(",Ee.length,")"]}),$e&&e.jsx("button",{className:u.kanbanQuickAdd,onClick:Lt=>{Lt.stopPropagation(),$e(me)},title:we("taskList.addTaskToCategoryTitle",{category:me}),style:{marginLeft:"auto"},disabled:nn!==null,children:e.jsx(Oj,{size:14})})]})}),!Zt&&e.jsx("div",{className:u.categoryItems,children:Ee.map(Lt=>(()=>{const{taskWorkstream:Rn,taskInitiative:xt}=Je(Lt);return e.jsx(Wl,{task:Lt,taskWorkstream:Rn,taskInitiative:xt,searchQuery:A,copiedId:O,taxonomies:tt,types:d,priorities:l,assigneeOptions:g,onClick:f,onOpenTaskById:x,onCopyId:P,onToggleInProgress:B,onToggleReview:Ae,onToggleComplete:F,onToggleCancel:ne,onSetStatus:ae,onArchiveTask:ie,onUnarchive:nn?H:void 0,onDelete:nn?ue:void 0,categories:o,isRecentlyChanged:Ct.has(Lt.id),readOnlyMode:nn,showStatusLabel:z},Lt.id)})())})]},me)})}),!ht&&X&&V.length>0&&e.jsxs("div",{className:u.archiveList,children:[e.jsx("div",{className:u.archiveHeader,children:"Archived"}),V.map(me=>(()=>{const{taskWorkstream:Ee,taskInitiative:Zt}=Je(me);return e.jsx(Wl,{task:me,taskWorkstream:Ee,taskInitiative:Zt,searchQuery:A,copiedId:O,isArchived:!0,types:d,assigneeOptions:g,onClick:f,onCopyId:P,onSetStatus:ae,onUnarchive:H,onDelete:ue,deleteActionTitle:"Delete Permanently",categories:o,showStatusLabel:z},me.id)})())]})]})});Tf.displayName="TaskList";const zj="_formNotice_1infv_1",Hj="_assigneeIndicator_1infv_12",Gj="_assigneeIndicatorAgent_1infv_20",Vj="_assigneeIndicatorUser_1infv_24",Zj="_assigneeIndicatorUnassigned_1infv_28",qj="_markdownPreview_1infv_32",Kj="_error_1infv_83",Yj="_keyboardHint_1infv_92",Jj="_taskFormLifecycle_1infv_109",Xj="_taskFormMetaDivider_1infv_114",Qj="_taskFormMetaGrid_1infv_121",eN="_compactMetaSection_1infv_127",tN="_createWorkstreamRow_1infv_133",nN="_createWorkstreamDropdown_1infv_139",aN="_compactMetaGrid_1infv_144",sN="_compactMetaField_1infv_150",rN="_compactMetaSpacer_1infv_154",oN="_compactMetaFieldHint_1infv_168",iN="_formFieldsetReset_1infv_172",cN="_taskFormDateRow_1infv_185",lN="_taskFormDateLabel_1infv_192",dN="_taskFormDateValue_1infv_200",uN="_taskFormMetaStack_1infv_208",pN="_taskFormMetaActor_1infv_214",mN="_taskFormDateWarning_1infv_226",fN="_taskFormDateError_1infv_232",hN="_helpHeader_1infv_238",gN="_helpClose_1infv_249",yN="_markdownHelp_1infv_263",kN="_helpGrid_1infv_272",SN="_helpGridItem_1infv_278",vN="_settingsHint_1infv_290",wN="_sectionBlock_1infv_296",bN="_softSectionSurface_1infv_306",_N="_stackedList_1infv_313",CN="_stackedListSpaced_1infv_318",xN="_checklistRow_1infv_322",AN="_checklistRowDragging_1infv_331",TN="_checklistHandleBtn_1infv_335",IN="_checklistCheckboxBtn_1infv_358",jN="_checklistCheckboxBtnChecked_1infv_378",NN="_checklistItemText_1infv_383",RN="_checklistItemTextCompleted_1infv_389",DN="_checklistRemoveBtn_1infv_394",PN="_specialistChip_1infv_457",EN="_specialistChipActive_1infv_480",LN="_commentPanel_1infv_561",MN="_commentThread_1infv_575",BN="_emptyComments_1infv_584",WN="_comment_1infv_561",FN="_activityEvent_1infv_602",ON="_activityEventSystem_1infv_607",$N="_commentAi_1infv_611",UN="_commentUser_1infv_615",zN="_commentHeader_1infv_619",HN="_activityEventHeader_1infv_636",GN="_commentAuthor_1infv_642",VN="_commentTime_1infv_650",ZN="_commentText_1infv_654",qN="_activityEventText_1infv_690",KN="_activityEventChanges_1infv_699",YN="_activityEventChange_1infv_699",JN="_commentInputArea_1infv_717",XN="_commentInput_1infv_717",QN="_sendCommentBtn_1infv_749",eR="_taxonomyFieldsGrid_1infv_775",tR="_markdownPreviewContainer_1infv_782",nR="_descriptionSurface_1infv_787",Be={formNotice:zj,assigneeIndicator:Hj,assigneeIndicatorAgent:Gj,assigneeIndicatorUser:Vj,assigneeIndicatorUnassigned:Zj,markdownPreview:qj,error:Kj,keyboardHint:Yj,taskFormLifecycle:Jj,taskFormMetaDivider:Xj,taskFormMetaGrid:Qj,compactMetaSection:eN,createWorkstreamRow:tN,createWorkstreamDropdown:nN,compactMetaGrid:aN,compactMetaField:sN,compactMetaSpacer:rN,compactMetaFieldHint:oN,formFieldsetReset:iN,taskFormDateRow:cN,taskFormDateLabel:lN,taskFormDateValue:dN,taskFormMetaStack:uN,taskFormMetaActor:pN,taskFormDateWarning:mN,taskFormDateError:fN,helpHeader:hN,helpClose:gN,markdownHelp:yN,helpGrid:kN,helpGridItem:SN,settingsHint:vN,sectionBlock:wN,softSectionSurface:bN,stackedList:_N,stackedListSpaced:CN,checklistRow:xN,checklistRowDragging:AN,checklistHandleBtn:TN,checklistCheckboxBtn:IN,checklistCheckboxBtnChecked:jN,checklistItemText:NN,checklistItemTextCompleted:RN,checklistRemoveBtn:DN,specialistChip:PN,specialistChipActive:EN,commentPanel:LN,commentThread:MN,emptyComments:BN,comment:WN,activityEvent:FN,activityEventSystem:ON,commentAi:$N,commentUser:UN,commentHeader:zN,activityEventHeader:HN,commentAuthor:GN,commentTime:VN,commentText:ZN,activityEventText:qN,activityEventChanges:KN,activityEventChange:YN,commentInputArea:JN,commentInput:XN,sendCommentBtn:QN,taxonomyFieldsGrid:eR,markdownPreviewContainer:tR,descriptionSurface:nR};function Hu({label:t,value:n,options:s,onChange:r,type:o="priority",hideLabel:d=!1,showSelectedLabel:l=!0}){const p=s.find(g=>String(g.value)===String(n));return e.jsxs("div",{className:u.field,children:[!d&&e.jsxs("div",{className:u.labelRow,children:[e.jsx("label",{className:u.label,children:t}),l&&p&&e.jsx("span",{className:u.levelLabel,style:{color:Ia(p.color)||(o==="priority"?`var(--priority-${n})`:o==="complexity"?`var(--complexity-${n})`:"var(--text-secondary)"),backgroundColor:(Ia(p.color)?`${Ia(p.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:p.label})]}),e.jsx("div",{className:u.levelSelect,children:s.map((g,_)=>{const w=s.findIndex(k=>String(k.value)===String(n)),A=_<=w,y=String(g.value)===String(n);return e.jsx("button",{type:"button",className:`${u.levelOption} ${A?u.levelOptionFilled:""} ${A?u[`levelOption_${o}_${g.value}`]:""} ${y?u.levelOptionSelected:""}`,onClick:()=>r(g.value),title:g.label,style:{opacity:A?1:.15,backgroundColor:A?Ia(g.color)||(o==="priority"?`var(--priority-${g.value})`:o==="complexity"?`var(--complexity-${g.value})`:"var(--text-primary)"):void 0,color:A?o==="priority"&&String(g.value).toLowerCase()==="medium"?"black":"white":void 0,boxShadow:A&&(o==="priority"&&(String(g.value).toLowerCase()==="critical"||g.value===4)||o==="complexity"&&(String(g.value).toLowerCase()==="epic"||g.value===5))?`0 0 12px ${o==="priority"?"rgba(239, 68, 68, 0.6)":"rgba(217, 70, 239, 0.6)"}`:void 0}},String(g.value))})})]})}const lm=new Map;function aR(t){const n=t instanceof Date?t:new Date(t);return Number.isNaN(n.getTime())?null:n}function sR(t,n){const s=Object.entries(n).sort(([r],[o])=>r.localeCompare(o));return JSON.stringify([t,s])}function Ic(t,n,s){const r=aR(t);if(!r)return"";const o=s??Hm(),d=sR(o,n);let l=lm.get(d);return l||(l=new Intl.DateTimeFormat(o,n),lm.set(d,l)),l.format(r)}const rR="D-";function oR(t){return Ol(rR,t)}const If=[".png",".jpg",".jpeg",".webp",".gif",".pdf",".txt",".md",".csv",".json",".doc",".docx",".html",".js",".ts",".tsx",".css",".py",".java",".go",".rs",".sh"].join(","),iR=new Set(["image/png","image/jpeg","image/webp"]),cR=new Set(If.split(",").map(t=>t.trim().toLowerCase())),lR=10*1024*1024,dR=3500;function jf(t){const n=t.trim().toLowerCase(),s=n.lastIndexOf(".");return s===-1?"":n.slice(s)}function Gu(t){if(t.length===0)return"";const n=t.slice(0,3).join(", "),s=t.length-3;return s>0?`${n}, +${s} more`:n}function uR(t){return`${t.name.trim().toLowerCase()}::${t.size}::${t.lastModified}`}function pR(t){return new Promise((n,s)=>{const r=new FileReader;r.onload=()=>n(String(r.result||"")),r.onerror=()=>s(r.error||new Error("Failed to read file")),r.readAsDataURL(t)})}function Al(t){return/\.(png|jpe?g|webp|gif)(\?|#|$)/i.test(t)}function mR(t){const n=t.types;if(!n)return null;for(const s of Array.from(n)){const r=String(s||"").trim().toLowerCase();if(iR.has(r))return r}return null}function dm(t,n){const s=t.includes("?")?"&":"?";return`${t}${s}download=1&filename=${encodeURIComponent(n)}`}function um(t){return typeof t=="string"?t.split("/").pop()||"Context file":t.displayName||t.originalFilename||t.caption||t.fsPath||t.path.split("/").pop()||"Context file"}function fR(t){const n=typeof t=="string"?[t]:[t.originalFilename,t.displayName,t.caption,t.fsPath,t.path];for(const r of n){if(!r)continue;const o=jf(r);if(o)return o.replace(".","").slice(0,5).toUpperCase()}const s=typeof t=="string"?t:t.path;return/^https?:\/\//i.test(s)?"LINK":"FILE"}function hR(t){const{taskId:n,taskReferenceLabel:s,workspaceId:r,contextFiles:o,onAddContextFile:d,onRemoveContextFile:l,onUpdateContextCaption:p}=t,g=a.useRef(null),[_,w]=a.useState(!1),[A,y]=a.useState(null),[k,b]=a.useState(""),[L,S]=a.useState(null),[$,J]=a.useState(null),[U,X]=a.useState(!1),[q,ee]=a.useState(!1),[W,Re]=a.useState(0),V=a.useRef(new Set),te=a.useRef(new Set),xe=f=>(f||"").trim(),de=(f,x)=>{const P=[],B=xe(f),Ae=xe(x);return B&&P.push(`path:${B}`),Ae&&P.push(`fs:${Ae}`),P},O=a.useMemo(()=>{const f=new Set;return o.forEach(x=>{if(typeof x=="string"){de(x).forEach(P=>f.add(P));return}de(x.path,x.fsPath).forEach(P=>f.add(P))}),f},[o]);a.useEffect(()=>{V.current=new Set(O)},[O]);const R=(f,x)=>x.some(P=>f.has(P)),z=(f,x)=>x.forEach(P=>f.add(P)),re=String(r||"").trim(),be=(f="application/json")=>{const x={"Content-Type":f};return re&&(x["x-taskforce-workspace-id"]=re),x},We=(f,x=!0,P=V.current)=>{const B=f.trim();if(!B||!/^https?:\/\//i.test(B))return"invalid";const F=B,ne=de(F);if(R(P,ne))return"duplicate";const ae=B.split(/[\\/]/).pop()||B;return d({path:F,caption:ae,timestamp:new Date().toISOString()}),z(P,ne),x&&b(""),S(null),"added"};a.useEffect(()=>{if(!$)return;const f=window.setTimeout(()=>{J(null)},dR);return()=>window.clearTimeout(f)},[$]);const Ce=async f=>{if(f.length===0)return;y(null),J(null);const x=f,P=[],B=[],Ae=[],F=[],ne=new Set(te.current);x.forEach(H=>{const ue=jf(H.name);if(!cR.has(ue)){P.push(H.name);return}if(H.size>lR){B.push(H.name);return}const Pe=uR(H);if(ne.has(Pe)){Ae.push(H.name);return}ne.add(Pe),F.push({file:H,fingerprint:Pe})});const ae=[];if(P.length>0&&ae.push(`${P.length} unsupported file${P.length===1?"":"s"} skipped: ${Gu(P)}.`),B.length>0&&ae.push(`${B.length} file${B.length===1?"":"s"} over 10 MB skipped: ${Gu(B)}.`),Ae.length>0&&ae.push(`${Ae.length} local duplicate file${Ae.length===1?"":"s"} skipped before upload: ${Gu(Ae)}.`),F.length===0){ae.length>0&&J(ae.join(" ")),g.current&&(g.current.value="");return}w(!0);const ie=new Set(V.current);let Z=0;try{for(const{file:ue,fingerprint:Pe}of F){let se=null;const $e=await fetch("/api/taskforce/context-upload/init",{method:"POST",headers:be(),body:JSON.stringify({originalName:ue.name,mimeType:ue.type||"application/octet-stream",size:ue.size,taskId:n||null,workspaceId:re||null})});if($e.ok){const tt=await $e.json();if(tt?.success&&typeof tt?.uploadUrl=="string"&&typeof tt?.path=="string"){if(!(await fetch(tt.uploadUrl,{method:String(tt.method||"PUT"),headers:tt.headers||{"Content-Type":ue.type||"application/octet-stream"},body:ue})).ok)throw new Error(`Upload failed for ${ue.name}`);const i=await fetch("/api/taskforce/context-upload/finalize",{method:"POST",headers:be(),body:JSON.stringify({relativePath:tt.relativePath,mimeType:ue.type||"application/octet-stream",originalName:ue.name,size:ue.size,taskId:n||null,workspaceId:re||null})});if(!i.ok){const De=await i.json().catch(()=>({}));throw new Error(De?.error||`Upload failed for ${ue.name}`)}se=await i.json().catch(()=>null)}else tt?.success&&typeof tt?.path=="string"&&(se=tt)}if(!se){const tt=await pR(ue),Ct=await fetch("/api/taskforce/context-upload",{method:"POST",headers:be(),body:JSON.stringify({file:tt,originalName:ue.name,taskId:n||null,workspaceId:re||null})});if(!Ct.ok)throw new Error(`Upload failed for ${ue.name}`);se=await Ct.json()}if(!se?.success||!se?.path)throw new Error(`Upload failed for ${ue.name}`);const et=de(se.path,se.fsPath);if(R(ie,et)){Z+=1;continue}d({path:se.path,fsPath:se.fsPath,caption:typeof se.caption=="string"&&se.caption.trim().length>0?se.caption:ue.name,displayName:typeof se.displayName=="string"?se.displayName:void 0,originalFilename:typeof se.originalFilename=="string"?se.originalFilename:ue.name,assetId:typeof se.assetId=="string"?se.assetId:void 0,referenceNumber:typeof se.referenceNumber=="number"?se.referenceNumber:null,referenceLabel:typeof se.referenceLabel=="string"?se.referenceLabel:void 0,taskId:typeof se.taskId=="string"?se.taskId:null,timestamp:new Date().toISOString()}),by({workspaceId:re||"default",taskId:n||null,reason:"upload"}),z(ie,et),te.current.add(Pe)}const H=[...ae];Z>0&&H.push(`${Z} duplicate file${Z===1?"":"s"} skipped.`),J(H.length>0?H.join(" "):null),V.current=ie}catch(H){y(H instanceof Error?H.message:"Failed to upload context file")}finally{w(!1),g.current&&(g.current.value="")}},Ve=async f=>{!f||f.length===0||await Ce(Array.from(f))},Fe=async()=>{if(y(null),J(null),!navigator.clipboard||typeof navigator.clipboard.read!="function"){y("Clipboard image paste is not available in this browser.");return}try{const f=await navigator.clipboard.read(),x=[];for(const P of f){const B=mR(P);if(!B)continue;const Ae=await P.getType(B),F=B.toLowerCase()==="image/png"?"png":B.toLowerCase()==="image/webp"?"webp":"jpg";x.push(new globalThis.File([Ae],`pasted-image-${Date.now()}.${F}`,{type:B}))}if(x.length===0){y("Clipboard does not currently contain a supported image.");return}await Ce(x)}catch(f){y(f?.message||"Failed to read an image from the clipboard.")}},ve=f=>{const x=new Set,P=f.dataTransfer.getData("text/uri-list")||"",B=f.dataTransfer.getData("text/plain")||"",Ae=`${P}
4
+ ${B}`.split(`
5
+ `).map(F=>F.trim()).filter(F=>!!F&&!F.startsWith("#"));for(const F of Ae){if(/^file:\/\//i.test(F)){try{const ne=new URL(F),ae=decodeURIComponent(ne.pathname||"").trim();ae&&x.add(ae)}catch{}continue}x.add(F)}return Array.from(x)},Oe=f=>{if(f.preventDefault(),f.stopPropagation(),ee(!1),Re(0),y(null),S(null),J(null),f.dataTransfer.files&&f.dataTransfer.files.length>0){Ve(f.dataTransfer.files);return}const x=ve(f);if(x.length===0){S("Drop a file or URL.");return}const P=new Set(V.current);let B=0,Ae=0,F=0;x.forEach(ae=>{const ie=We(ae,!1,P);ie==="duplicate"&&(B+=1),ie==="added"&&(Ae+=1),ie==="invalid"&&(F+=1)});const ne=[];B>0&&ne.push(`${B} duplicate link${B===1?"":"s"} skipped.`),F>0&&ne.push(`${F} local path${F===1?"":"s"} skipped. Upload files to attach them, or drop an http(s) URL to link.`),J(ne.length>0?ne.join(" "):Ae>0?null:$),V.current=P},v=f=>{f.preventDefault(),f.stopPropagation(),Re(x=>x+1),ee(!0)},M=f=>{f.preventDefault(),f.stopPropagation(),Re(x=>{const P=Math.max(0,x-1);return P===0&&ee(!1),P})},C=f=>{f.preventDefault(),f.stopPropagation(),f.dataTransfer.dropEffect="copy"},oe=o.filter(f=>{const x=typeof f=="string"?f:f.path;return Al(x)}),D=o.filter(f=>{const x=typeof f=="string"?f:f.path;return!Al(x)});return e.jsxs("div",{className:u.specialistSection,children:[e.jsxs("div",{className:u.toggleHeading,onClick:()=>X(!U),title:U?"Hide context documents":"Show context documents",children:[e.jsxs("label",{className:u.label,children:["Context Documents ",o.length>0&&`(${o.length})`]}),U?e.jsx(jc,{size:14}):e.jsx(Ii,{size:14})]}),U&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:u.settingsHint,children:"Upload files into task context storage, or add an external http(s) URL."}),e.jsxs("div",{className:u.contextUploadPanel,children:[e.jsxs("div",{className:u.contextUploadActions,children:[e.jsxs("button",{type:"button",className:u.secondaryHeaderBtn,onClick:()=>g.current?.click(),disabled:_,children:[_?e.jsx(Fa,{size:12,className:u.spinner}):e.jsx(Lu,{size:12}),_?"Uploading...":"Upload File"]}),e.jsxs("button",{type:"button",className:u.secondaryHeaderBtn,onClick:()=>{Fe()},disabled:_,children:[e.jsx(Rl,{size:12}),"Paste Image from Clipboard"]})]}),e.jsx("input",{ref:g,type:"file",accept:If,multiple:!0,className:u.hiddenInput,onChange:f=>{Ve(f.target.files)}}),A&&e.jsx("div",{className:u.error,children:A}),e.jsxs("div",{className:u.contextLinkRow,children:[e.jsx("input",{type:"text",className:u.input,placeholder:"Add external URL (https://...)",value:k,onChange:f=>{b(f.target.value),L&&S(null),$&&J(null)}}),e.jsx("button",{type:"button",className:u.secondaryHeaderBtn,onClick:()=>{if(!k.trim()){S("Enter an http(s) URL to link.");return}const f=We(k,!0);if(f==="invalid"){S("Only external http(s) URLs can be linked here. Upload files to attach them.");return}f==="duplicate"?J("Link already exists in task context."):f==="added"&&J(null)},children:"Add URL"})]}),e.jsxs("div",{className:`${u.contextDropzone} ${q?u.contextDropzoneActive:""}`,onDragEnter:v,onDragLeave:M,onDragOver:C,onDrop:Oe,children:[e.jsx(Lu,{size:14}),e.jsx("span",{children:"Drop files or URLs here"})]})]}),$&&e.jsx("div",{className:u.contextNotice,children:$}),L&&e.jsx("div",{className:u.error,children:L}),oe.length>0&&e.jsx("div",{className:u.attachmentGrid,children:o.map((f,x)=>{const P=typeof f=="string"?f:f.path;if(!Al(P))return null;const B=typeof f=="string"?void 0:f.fsPath,Ae=typeof f=="string"?"":f.caption||"",F=um(f),ne=Al(P),ae=/^https?:\/\//i.test(P),ie=kf(f);return e.jsxs("div",{className:u.attachmentCard,children:[e.jsxs("div",{className:u.attachmentPreviewContainer,children:[ne?e.jsx("img",{src:P,alt:Ae||`Context file ${x}`,onClick:()=>{cp(f,{taskId:n,taskReferenceLabel:s})||window.open(P,"_blank")},onError:Z=>{Z.target.style.display="none",Z.target.parentElement.classList.add(u.brokenImage)}}):e.jsxs("button",{type:"button",className:u.contextFileLink,onClick:()=>{ip(f,B)||window.open(P,"_blank")},title:"Open file",children:[e.jsx(Lu,{size:16}),e.jsx("span",{children:Ae||B||P.split("/").pop()||"Context file"})]}),e.jsxs("div",{className:u.brokenImagePlaceholder,children:[e.jsx(Nc,{size:16}),e.jsx("span",{children:"Preview unavailable"})]}),e.jsxs("div",{className:u.attachmentActions,children:[ie&&e.jsx("button",{type:"button",className:u.attachmentActionBtn,onClick:Z=>{Z.stopPropagation(),cp(f,{taskId:n,taskReferenceLabel:s})},title:"Annotate",children:e.jsx(nh,{size:12})}),B&&e.jsx("button",{type:"button",className:u.attachmentActionBtn,onClick:Z=>{Z.stopPropagation(),navigator.clipboard.writeText(B)},title:`Copy path: ${B}`,children:e.jsx(Rl,{size:12})}),!ae&&e.jsx("button",{type:"button",className:u.attachmentActionBtn,onClick:Z=>{Z.stopPropagation(),window.open(dm(P,Ae||F),"_blank")},title:"Download",children:e.jsx(Ep,{size:12})}),e.jsx("button",{type:"button",className:u.attachmentActionBtn,onClick:Z=>{Z.stopPropagation(),l(x)},title:"Delete",children:e.jsx(El,{size:12})})]})]}),e.jsx("input",{type:"text",className:u.attachmentCaptionInput,placeholder:"Add a label...",value:Ae,onChange:Z=>p(x,Z.target.value)})]},x)})}),D.length>0&&e.jsx("div",{className:u.documentAttachmentList,children:o.map((f,x)=>{const P=typeof f=="string"?f:f.path;if(Al(P))return null;const B=typeof f=="string"?void 0:f.fsPath,Ae=typeof f=="string"?"":f.caption||"",F=um(f),ne=fR(f),ae=typeof f=="string"?"":oR(f),ie=/^https?:\/\//i.test(P);return e.jsxs("div",{className:u.documentAttachmentItem,children:[e.jsxs("div",{className:u.documentAttachmentRow,children:[e.jsxs("button",{type:"button",className:u.documentAttachmentLink,onClick:()=>{ip(f,B)||window.open(P,"_blank")},title:F,children:[e.jsxs("span",{className:u.documentAttachmentMain,children:[e.jsx("span",{className:u.documentAttachmentIcon,"aria-hidden":"true",children:e.jsx(ah,{size:13})}),e.jsxs("span",{className:u.documentAttachmentText,children:[e.jsx("span",{className:u.documentAttachmentName,children:F}),ae&&e.jsx("span",{className:u.taskIdBadge,children:ae})]})]}),e.jsx("span",{className:u.documentAttachmentType,children:ne})]}),e.jsxs("div",{className:u.documentAttachmentActions,children:[B&&e.jsx("button",{type:"button",className:u.documentAttachmentActionBtn,onClick:()=>{navigator.clipboard.writeText(B)},title:`Copy path: ${B}`,children:e.jsx(Rl,{size:12})}),!ie&&e.jsx("button",{type:"button",className:u.documentAttachmentActionBtn,onClick:()=>{window.open(dm(P,Ae||F),"_blank")},title:"Download",children:e.jsx(Ep,{size:12})}),e.jsx("button",{type:"button",className:u.documentAttachmentActionBtn,onClick:()=>l(x),title:"Delete",children:e.jsx(El,{size:12})})]})]}),e.jsx("input",{type:"text",className:u.documentAttachmentCaptionInput,placeholder:"Add a label...",value:Ae,onChange:Z=>p(x,Z.target.value)})]},x)})})]})]})}function gR({id:t,item:n,onToggle:s,onRemove:r}){const{attributes:o,listeners:d,setNodeRef:l,transform:p,transition:g,isDragging:_}=Pm({id:t}),w={transform:pp.Transform.toString(p),transition:g,opacity:_?.88:1};return e.jsxs("div",{ref:l,style:w,className:`${Be.checklistRow} ${_?Be.checklistRowDragging:""}`.trim(),children:[e.jsx("button",{type:"button",className:Be.checklistHandleBtn,title:"Reorder checklist item","aria-label":"Reorder checklist item",...o,...d,children:e.jsx(oh,{size:14})}),e.jsx("button",{type:"button",className:`${Be.checklistCheckboxBtn} ${n.isCompleted?Be.checklistCheckboxBtnChecked:""}`.trim(),onClick:s,title:n.isCompleted?"Mark incomplete":"Mark complete","aria-label":n.isCompleted?"Mark checklist item incomplete":"Mark checklist item complete",children:n.isCompleted?e.jsx(Xr,{size:14,strokeWidth:2.1}):null}),e.jsx("span",{className:`${Be.checklistItemText} ${n.isCompleted?Be.checklistItemTextCompleted:""}`.trim(),children:n.title}),e.jsx("button",{type:"button",className:Be.checklistRemoveBtn,onClick:r,title:"Remove checklist item","aria-label":"Remove checklist item",children:e.jsx(ji,{size:15,strokeWidth:1.9})})]})}function Vu(t,n){const s=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);return s?`rgba(${parseInt(s[1],16)}, ${parseInt(s[2],16)}, ${parseInt(s[3],16)}, ${n})`:""}function Nf(t){const{editingTaskId:n,error:s,title:r,description:o,category:d,type:l,priority:p,complexity:g,manualComplexityEnabled:_=!1,assignee:w,scheduledDate:A,dueDate:y,workstreamInput:k="",checklistItems:b,comments:L,newCommentText:S,contextFiles:$,currentWorkspaceId:J,apiBaseUrl:U,descriptionFocused:X,showMarkdownHelp:q,showChecklist:ee=!1,checklistEnabled:W=!0,showComments:Re,formTaxonomies:V,onTaxonomyChange:te,onOpenSettings:xe,categories:de,types:O,priorities:R,taxonomyDisplayLabels:z,assigneeOptions:re,taxonomies:be,workstreams:We=[],copiedId:Ce,onTitleChange:Ve,onDescriptionChange:Fe,onCategoryChange:ve,onTypeChange:Oe,onPriorityChange:v,onComplexityChange:M,onAssigneeChange:C,onScheduledDateChange:oe,onDueDateChange:D,onWorkstreamInputChange:f=()=>{},onChecklistItemsChange:x,onNewCommentTextChange:P,onDescriptionFocusedChange:B,onShowMarkdownHelpChange:Ae,onShowChecklistChange:F=()=>{},onShowCommentsChange:ne,onSubmit:ae,onAddComment:ie,onAddContextFile:Z,onRemoveContextFile:H,onUpdateContextCaption:ue,onCopyId:Pe,onToggleInProgress:se,onToggleReview:$e,onToggleComplete:et,onToggleCancel:tt,onSetStatus:Ct,onArchiveTask:i,onUnarchive:De,onOpenTaskById:Je,currentTask:Ie,commentsEndRef:ht}=t,yt=er(Ie),$t=ut.useMemo(()=>Ky(be,V),[be,V]),Ht=ut.useMemo(()=>{const Y=de.find(Xe=>Xe.value===Tc),ze={value:Tc,label:Y?.label||ou,icon:Y?.icon||"HelpCircle",color:Y?.color||"var(--text-secondary)"},Ne=de.find(Xe=>Xe.value===d),Le=de.filter(Xe=>!Xe.disabled||Xe.value===Ne?.value).filter(Xe=>Xe.value!==Tc).map(Xe=>({value:Xe.value,label:Xe.disabled?`${Xe.label} (Legacy)`:Xe.label,icon:Xe.icon,color:Xe.color}));return[ze,...Le]},[de,d]),bn=ut.useMemo(()=>{const Y=O.find(Ne=>Ne.value===l);return O.filter(Ne=>Ne.status!=="retired"||Ne.value===Y?.value).map(Ne=>({value:Ne.value,label:Ne.status==="retired"?`${Ne.label} (Retired)`:Ne.label,icon:Ne.icon||"Box",color:Ne.color||"violet-500"}))},[O,l]),nn=Y=>Y&&Ic(Y,{month:"short",day:"numeric",year:"numeric",hour:"2-digit",minute:"2-digit"})||null,Kt=nn(Ie?.createdAt),_n=nn(Ie?.updatedAt||Ie?.createdAt),qt=nn(Ie?.completedAt),Hn=ut.useMemo(()=>{const Y=new Date,ze=Y.getFullYear(),Ne=String(Y.getMonth()+1).padStart(2,"0"),st=String(Y.getDate()).padStart(2,"0");return`${ze}-${Ne}-${st}`},[]),on=!!(y&&A&&y<A),Nn=!!(y&&y<Hn&&(!Ie||Ie.status!=="done"&&Ie.status!=="cancelled")),Nt=b.filter(Y=>Y.isCompleted).length,[Yt,Bn]=ut.useState(""),[an,me]=ut.useState(!1),Ee=!!Ie?.isArchived,Zt=!!Ie?.isDeleted,Lt=ut.useMemo(()=>We.map(Y=>{const ze=bp(Y);return{value:ze||Y.id,label:ze?`${ze} · ${Y.title}`:Y.title,icon:"Folder",color:"var(--text-secondary)"}}),[We]),Rn=ut.useMemo(()=>Lt.some(Y=>String(Y.value)===String(k||"").trim()),[k,Lt]);ut.useEffect(()=>{if(n){an&&me(!1);return}if(k.trim()){if(Rn&&an){me(!1);return}!Rn&&!an&&me(!0)}},[n,Rn,an,k]);const xt=Ee||Zt,G=ut.useRef(null),ke=Im(tp(Dm,{activationConstraint:{distance:6}}));ut.useLayoutEffect(()=>{const Y=G.current;if(!Y)return;const ze=()=>{Y.scrollTop=0;const st=Y.parentElement;st&&(typeof st.scrollTo=="function"?st.scrollTo({top:0,left:0,behavior:"auto"}):st.scrollTop=0)};ze();const Ne=window.requestAnimationFrame(ze);return()=>window.cancelAnimationFrame(Ne)},[n,Ie?.id]);const je=()=>{const Y=Yt.trim();if(!Y)return;const ze=new Date().toISOString();x([...b,{id:`checklist-draft-${ze}-${b.length}`,taskId:n||"",title:Y,isCompleted:!1,order:b.length,createdAt:ze,updatedAt:ze}]),Bn("")},Te=ut.useCallback(Y=>{const{active:ze,over:Ne}=Y;if(!Ne||ze.id===Ne.id)return;const st=b.findIndex(ft=>ft.id===ze.id),Le=b.findIndex(ft=>ft.id===Ne.id);if(st<0||Le<0)return;const Xe=new Date().toISOString(),xn=Ih(b,st,Le).map((ft,Gn)=>({...ft,order:Gn,updatedAt:Xe}));x(xn)},[b,x]),Se=Y=>{const ze=String(Y||"").trim(),Ne=Y.trim().replace(/^ai-profile-/i,"").replace(/[-_]+/g," ").replace(/\s+/g," ");return!Ne||Ne==="ai"||ze.toLowerCase().startsWith("ai-profile-")?"AI Agent":`AI Agent - ${Ne.split(" ").map(Le=>Le.charAt(0).toUpperCase()+Le.slice(1)).join(" ")}`},Qe=Pg(re,w),pt=Xd(w),Mt=vc(w,Qe),Rt=ut.useMemo(()=>new Map(Qe.map(Y=>[String(Y.value),Y])),[Qe]),At=Rt.get(String(w||"unassigned")),Ut=Ie?.assigneeActor?.color||At?.color,nt=ut.useMemo(()=>{const Y=[Ie?.assigneeActor,Ie?.createdByActor].filter(Boolean);return new Map(Y.map(ze=>[String(ze.id),ze]))},[Ie?.assigneeActor,Ie?.createdByActor]),Tt=ut.useMemo(()=>Array.isArray(Ie?.activity)&&Ie.activity.length>0?Ie.activity:L.map(Y=>({id:`comment:${Y.id}`,type:"comment",timestamp:Y.timestamp,comment:Y})),[L,Ie?.activity]),kt=(Y,ze)=>{if(Y==="assignee")return vc(String(ze||"").trim(),Qe)},Dn=ut.useCallback((Y,ze,Ne)=>{if(Ne&&Ne.trim())return Ne.trim();const st=String(Y||"").trim();if(!st)return ze==="ai"?"AI Agent":we("taskForm.you");const Le=nt.get(st);if(Le?.label)return Le.label;const Xe=Rt.get(st)||Rt.get(st.toLowerCase());return Xe?.label?Xe.label:ze==="ai"?Se(st):vc(st,Qe)||st},[nt,Rt,Se,Qe]),Cn=ut.useMemo(()=>{const Y=Tt[0];if(!Y)return null;if(Y.type==="comment"){const Ne=Y.comment;return Dn(Ne.author,Ne.actor?.kind==="ai"?"ai":Ne.actor?.kind==="human"?"human":null,Ne.actor?.label||null)}const ze=Y.event;return Dn(ze.actor,ze.actorType,ze.actorProfile?.label||null)},[Dn,Tt]),ua=ut.useMemo(()=>{if(!Ie?.completedAt)return null;for(const ze of Tt){if(ze.type!=="event")continue;const Ne=ze.event,st=Ne.details?.changes?.status?.to;if(st==="done"||st==="cancelled")return Dn(Ne.actor,Ne.actorType,Ne.actorProfile?.label||null)}return Cn},[Ie?.completedAt,Cn,Dn,Tt]),mt=Ie?.createdByActor?.label||Dn(Ie?.createdBy||null,Ie?.createdByActor?.kind==="ai"?"ai":Ie?.createdByActor?.kind==="human"?"human":null,Ie?.createdByActor?.label||null),Ze=Cn,Wn=Tt.length;return e.jsxs("form",{ref:G,onSubmit:ae,className:`${u.form} ${u.appScrollbar} tf-scrollbar`,children:[s&&e.jsx("div",{className:Be.error,children:s}),xt&&e.jsx("div",{className:`${Be.formNotice} tf-text-helper`,children:Zt?"Deleted tasks are read-only. Restore the task to make changes.":"Archived tasks are read-only. Unarchive the task to make changes."}),e.jsxs("fieldset",{disabled:xt,className:Be.formFieldsetReset,children:[e.jsxs("div",{className:u.field,children:[e.jsxs("div",{className:u.labelRow,children:[e.jsx("label",{className:u.label,children:"Title"}),w&&e.jsx("span",{title:`Assigned to: ${Mt}`,className:[Be.assigneeIndicator,pt==="agent"?Be.assigneeIndicatorAgent:pt==="member"?Be.assigneeIndicatorUser:Be.assigneeIndicatorUnassigned].join(" "),style:Ut?{color:Ut}:void 0,children:pt==="agent"?e.jsx(Ud,{size:20}):pt==="member"?e.jsx(xc,{size:20}):e.jsx(xi,{size:20})})]}),e.jsx("input",{type:"text",value:r,onChange:Y=>Ve(Y.target.value),placeholder:"What needs to be done?",className:u.input,required:!0,maxLength:255,autoFocus:!0})]}),e.jsxs("div",{className:u.field,children:[e.jsxs("div",{className:u.labelRow,children:[e.jsx("label",{className:u.label,children:"Description"}),e.jsx("button",{type:"button",className:u.helpLink,onClick:()=>Ae(!q),title:"Markdown Help",tabIndex:-1,children:e.jsx(xi,{size:14})})]}),q&&e.jsxs("div",{className:Be.markdownHelp,children:[e.jsxs("div",{className:Be.helpHeader,children:[e.jsx("span",{children:"Markdown Guide"}),e.jsx("button",{onClick:()=>Ae(!1),className:Be.helpClose,children:e.jsx(ji,{size:12})})]}),e.jsxs("div",{className:Be.helpGrid,children:[e.jsx("div",{children:e.jsx("code",{children:"**bold**"})}),e.jsx("div",{children:e.jsx("code",{children:"_italic_"})}),e.jsx("div",{children:e.jsx("code",{children:"- list"})}),e.jsx("div",{children:e.jsx("code",{children:"1. list"})}),e.jsx("div",{className:Be.helpGridItem,children:e.jsx("code",{children:"`inline code`"})}),e.jsxs("div",{className:Be.helpGridItem,children:[e.jsx("code",{children:"```"}),e.jsx("br",{}),e.jsx("code",{children:"code block"}),e.jsx("br",{}),e.jsx("code",{children:"```"})]}),e.jsx("div",{children:e.jsx("code",{children:"[link](url)"})})]})]}),X||!o?e.jsx("textarea",{className:`${u.textarea} ${Be.descriptionSurface}`,placeholder:"What needs to be done? (Markdown supported)",value:o,onChange:Y=>Fe(Y.target.value),onFocus:()=>B(!0),onBlur:()=>B(!1),rows:9,autoFocus:X}):e.jsx("div",{className:`${u.textarea} ${Be.descriptionSurface} ${Be.markdownPreview} ${Be.markdownPreviewContainer}`,onClick:()=>B(!0),children:e.jsx(op,{onTaskIdClick:Je,children:o})})]}),e.jsxs("div",{className:Be.compactMetaSection,children:[e.jsxs("div",{className:Be.compactMetaGrid,children:[e.jsxs("div",{className:`${u.field} ${Be.compactMetaField}`,children:[e.jsx("label",{id:"category-label",className:u.label,children:z?.category||"Category"}),e.jsx(Il,{value:d,options:Ht,onChange:Y=>ve(String(Y)),required:!0,ariaLabelledBy:"category-label"})]}),e.jsxs("div",{className:`${u.field} ${Be.compactMetaField}`,children:[e.jsx("label",{id:"type-label",className:u.label,children:z?.type||"Type"}),e.jsx(Il,{value:l,options:bn,onChange:Y=>Oe(String(Y)),ariaLabelledBy:"type-label"})]}),e.jsxs("div",{className:`${u.field} ${Be.compactMetaField}`,children:[e.jsx("label",{htmlFor:"task-form-scheduled-date",className:u.label,children:we("taskForm.scheduledLabel")}),e.jsx("input",{id:"task-form-scheduled-date",type:"date",value:A,onChange:Y=>oe(Y.target.value),className:`${u.input} ${u.taskFormDateInput}`})]}),e.jsx("div",{className:Be.compactMetaSpacer,"aria-hidden":"true"}),e.jsxs("div",{className:`${u.field} ${Be.compactMetaField}`,children:[e.jsx("label",{id:"assignee-label",className:u.label,children:"Assigned To"}),e.jsx(Il,{value:w||"unassigned",options:Qe,onChange:Y=>C(String(Y)),ariaLabelledBy:"assignee-label"})]}),e.jsx("div",{className:Be.compactMetaField,children:e.jsx(Hu,{label:z?.priority||"Priority",options:R,value:p,onChange:v,type:"priority",showSelectedLabel:!1})}),e.jsxs("div",{className:`${u.field} ${Be.compactMetaField}`,children:[e.jsx("label",{htmlFor:"task-form-due-date",className:u.label,children:we("taskForm.dueLabel")}),e.jsx("input",{id:"task-form-due-date",type:"date",value:y,onChange:Y=>D(Y.target.value),className:`${u.input} ${u.taskFormDateInput}`}),on&&e.jsx("span",{className:`${Be.taskFormDateWarning} ${Be.compactMetaFieldHint}`,children:we("taskForm.dueBeforeScheduled")}),Nn&&e.jsx("span",{className:`${Be.taskFormDateError} ${Be.compactMetaFieldHint}`,children:we("taskForm.overdue")})]}),_&&e.jsx("div",{className:Be.compactMetaField,children:e.jsx(Hu,{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:g,onChange:M,type:"general"})})]}),!n&&e.jsxs("div",{className:Be.createWorkstreamRow,children:[e.jsx("label",{className:u.label,children:"Attach to workstream"}),e.jsxs("div",{className:u.pathInputGroup,children:[an?e.jsx("input",{type:"text",className:u.input,value:k,onChange:Y=>f(Y.target.value),placeholder:"Type a workstream name or reference","aria-label":"Attach to workstream"}):e.jsx(Il,{value:k,options:Lt,onChange:Y=>f(String(Y)),placeholder:"Select workstream...",ariaLabel:"Attach to workstream",className:Be.createWorkstreamDropdown}),e.jsx("button",{type:"button",className:u.secondaryHeaderBtn,onClick:()=>{if(an){me(!1),Rn||f("");return}me(!0)},"aria-label":an?"Use workstream dropdown":"Enter workstream by name",title:an?"Use workstream dropdown":"Enter workstream by name",children:e.jsx(tr,{size:14})})]})]})]}),e.jsxs("div",{className:Be.sectionBlock,children:[e.jsx("div",{className:Be.taxonomyFieldsGrid,children:$t.map(Y=>{if(Y.id==="approach"&&Y.isSystem)return null;const ze=V[Y.id],Ne=Array.isArray(ze)?ze.map(Le=>String(Le)):ze!=null&&ze!==""?[String(ze)]:[],st=Y.options.filter(Le=>Le.status!=="retired"||Ne.includes(String(Le.value)));return e.jsxs("div",{className:u.field,children:[e.jsx("label",{className:u.label,children:Y.label}),Y.description&&e.jsx("div",{className:`${Be.settingsHint} tf-text-helper`,children:Y.description}),Y.widgetType==="level"?e.jsx(Hu,{label:Y.label,options:st.map(Le=>({...Le,label:Le.status==="retired"?`${Le.label} (Retired)`:Le.label})),value:V[Y.id]||"",onChange:Le=>te(Y.id,Le),type:"general",hideLabel:!0}):Y.multiSelect?e.jsx("div",{className:`${u.dropdownList} ${Be.softSectionSurface}`,children:st.map(Le=>{const Xe=String(Le.value),xn=Ne.includes(Xe);return e.jsxs("button",{type:"button",className:`${Be.specialistChip} ${xn?Be.specialistChipActive:""}`,onClick:()=>{const ft=xn?Ne.filter(Gn=>Gn!==Xe):[...Ne,Xe];te(Y.id,ft)},title:xn?"Click to remove":"Click to add",children:[xn&&e.jsx(Xr,{size:12}),Le.status==="retired"?`${Le.label} (Retired)`:Le.label]},Xe)})}):e.jsxs("div",{className:u.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 Le=Y.options.find(ft=>String(ft.value)===String(V[Y.id])),Xe=Le?.icon&&$s[Le.icon]?$s[Le.icon]:xi,xn=Le?.color||"var(--text-secondary)";return e.jsx("div",{className:u.fieldIcon,style:{color:Ia(xn)},children:e.jsx(Xe,{size:16})})})(),e.jsxs("select",{value:V[Y.id]||"",onChange:Le=>te(Y.id,Le.target.value),className:`${u.select} ${u.field_dynamic}`,required:Y.isRequired,children:[e.jsxs("option",{value:"",children:["Select ",Y.label,"..."]}),st.map(Le=>e.jsx("option",{value:Le.value,children:Le.status==="retired"?`${Le.label} (Retired)`:Le.label},Le.value))]})]})]},Y.id)})}),W&&e.jsxs("div",{className:u.specialistSection,children:[e.jsxs("div",{className:u.toggleHeading,onClick:()=>F(!ee),title:ee?"Hide checklist":"Show checklist",children:[e.jsxs("label",{className:u.label,children:["Checklist ",b.length>0&&`(${Nt}/${b.length})`]}),ee?e.jsx(jc,{size:14}):e.jsx(Ii,{size:14})]}),ee&&e.jsxs("div",{className:`${u.dropdownList} ${Be.stackedList} ${Be.stackedListSpaced}`,children:[e.jsxs("div",{className:u.pathInputGroup,children:[e.jsx("input",{type:"text",className:u.input,placeholder:"Add checklist item",value:Yt,onChange:Y=>Bn(Y.target.value),onKeyDown:Y=>{Y.key==="Enter"&&(Y.preventDefault(),je())}}),e.jsx("button",{type:"button",className:u.secondaryHeaderBtn,onClick:je,disabled:!Yt.trim(),children:"Add"})]}),b.length>0?e.jsx(jm,{sensors:ke,collisionDetection:jh,onDragEnd:Te,children:e.jsx(Nm,{items:b.map(Y=>Y.id),strategy:Rm,children:b.map((Y,ze)=>e.jsx(gR,{id:Y.id||`checklist-${ze}`,item:Y,onToggle:()=>{const Ne=new Date().toISOString();x(b.map((st,Le)=>Le===ze?{...st,isCompleted:!st.isCompleted,updatedAt:Ne}:st))},onRemove:()=>x(b.filter((Ne,st)=>st!==ze).map((Ne,st)=>({...Ne,order:st})))},Y.id||`checklist-${ze}`))})}):e.jsx("div",{className:`${Be.settingsHint} tf-text-helper`,children:"No checklist items yet."})]})]})]}),e.jsxs("div",{children:[n&&e.jsxs("div",{className:u.specialistSection,children:[e.jsxs("div",{className:u.toggleHeading,onClick:()=>ne(!Re),title:we(Re?"taskForm.hideComments":"taskForm.showComments"),children:[e.jsxs("label",{className:u.label,children:[we("taskForm.commentsSectionTitle")," ",Wn>0&&`(${Wn})`]}),Re?e.jsx(jc,{size:14}):e.jsx(Ii,{size:14})]}),Re&&e.jsxs("div",{className:Be.commentPanel,children:[e.jsxs("div",{className:Be.commentThread,children:[Wn===0&&e.jsx("div",{className:Be.emptyComments,children:we("taskForm.noComments")}),Tt.map(Y=>{if(Y.type==="comment"){const ln=Y.comment,gt=String(ln.author||"").trim(),Dt=gt.toLowerCase(),Pt=nt.get(gt),Bt=Rt.get(gt)||Rt.get(Dt),Ye=ln.actor||Pt||Bt||null,Ke=ln.actor?.kind==="human"?"member":ln.actor?.kind==="ai"?"agent":Pt?.kind==="human"?"member":Pt?.kind==="ai"?"agent":Bt?.kind||(Dt===""||Dt==="user"||Dt==="human"?"member":"agent"),Un=ln.actor?.label||Pt?.label||Bt?.label||(gt?vc(gt,Qe):"")||(Ke==="agent"?Se(gt||"ai"):we("taskForm.you")),Tn=ln.actor?.color||Pt?.color||Bt?.color,sn=String(Ye?.icon||(Ke==="agent"?"Bot":"User")),yn=Dc[sn]||(Ke==="agent"?Ud:xc);return e.jsxs("div",{className:`${Be.comment} ${Ke==="agent"?Be.commentAi:Be.commentUser}`,children:[e.jsxs("div",{className:Be.commentHeader,children:[e.jsx("span",{className:Be.commentAuthor,style:Tn?{color:Tn}:void 0,children:e.jsxs(e.Fragment,{children:[e.jsx(yn,{size:12,strokeWidth:1.5})," ",Un]})}),e.jsx("span",{className:Be.commentTime,children:Ic(ln.timestamp,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})})]}),e.jsx("div",{className:Be.commentText,style:Tn?{background:`linear-gradient(135deg, ${Vu(Tn,.18)} 0%, ${Vu(Tn,.1)} 100%)`,borderColor:Vu(Tn,.35)}:void 0,children:e.jsx(op,{onTaskIdClick:Je,children:ln.text})})]},ln.id)}const ze=Y.event,Ne=String(ze.actor||"").trim(),st=Ne.toLowerCase(),Le=nt.get(Ne),Xe=Rt.get(Ne)||Rt.get(st),xn=ze.actorProfile||Le||Xe||null,ft=ze.actorType==="ai"?"agent":ze.actorType==="human"?"member":"system",Gn=ze.actorProfile?.label||Le?.label||Xe?.label||(ft==="system"?"System":Ne?vc(Ne,Qe):ft==="agent"?Se("ai"):we("taskForm.you")),Vn=ze.actorProfile?.color||Le?.color||Xe?.color,pa=String(xn?.icon||(ft==="agent"?"Bot":ft==="member"?"User":"ClipboardList")),An=Dc[pa]||(ft==="agent"?Ud:ft==="member"?xc:sh),va=Object.entries(ze.details?.changes||{});return e.jsxs("div",{className:`${Be.comment} ${Be.activityEvent} ${ft==="system"?Be.activityEventSystem:""}`,children:[e.jsxs("div",{className:`${Be.commentHeader} ${Be.activityEventHeader}`,children:[e.jsx("span",{className:Be.commentAuthor,style:Vn?{color:Vn}:void 0,children:e.jsxs(e.Fragment,{children:[e.jsx(An,{size:12,strokeWidth:1.5})," ",Gn]})}),e.jsx("span",{className:Be.commentTime,children:Ic(ze.createdAt,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})})]}),e.jsxs("div",{className:Be.activityEventText,children:[e.jsx("div",{children:bf(ze,kt)}),va.length>1&&e.jsx("div",{className:Be.activityEventChanges,children:va.map(([ln,gt])=>e.jsx("span",{className:Be.activityEventChange,children:wf(ln,gt,kt)},ln))})]})]},Y.id)}),e.jsx("div",{ref:ht})]}),e.jsxs("div",{className:Be.commentInputArea,children:[e.jsx("textarea",{className:Be.commentInput,placeholder:we("taskForm.commentPlaceholder"),value:S,onChange:Y=>P(Y.target.value),onKeyDown:Y=>{Y.key==="Enter"&&!Y.shiftKey&&(Y.preventDefault(),ie())},rows:1}),e.jsx("button",{type:"button",className:Be.sendCommentBtn,onClick:ie,disabled:!S.trim(),children:e.jsx(rh,{size:16})})]})]})]}),e.jsx(hR,{taskId:n,taskReferenceLabel:yt,workspaceId:J,apiBaseUrl:U,contextFiles:$,onAddContextFile:Z,onRemoveContextFile:H,onUpdateContextCaption:ue}),e.jsx("div",{className:`${Be.taskFormLifecycle} ${Be.taskFormMetaDivider}`,children:e.jsx("div",{className:Be.taskFormMetaGrid,children:Ie&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:Be.taskFormDateRow,children:[e.jsx("span",{className:Be.taskFormDateLabel,children:we("taskForm.createdLabel")}),e.jsxs("span",{className:Be.taskFormMetaStack,children:[e.jsx("span",{className:Be.taskFormDateValue,children:Kt||we("taskForm.emptyValue")}),e.jsx("span",{className:Be.taskFormMetaActor,children:mt?`by ${mt}`:we("taskForm.emptyValue")})]})]}),e.jsxs("div",{className:Be.taskFormDateRow,children:[e.jsx("span",{className:Be.taskFormDateLabel,children:we("taskForm.updatedLabel")}),e.jsxs("span",{className:Be.taskFormMetaStack,children:[e.jsx("span",{className:Be.taskFormDateValue,children:_n||we("taskForm.emptyValue")}),e.jsx("span",{className:Be.taskFormMetaActor,children:Ze?`by ${Ze}`:we("taskForm.emptyValue")})]})]}),e.jsxs("div",{className:Be.taskFormDateRow,children:[e.jsx("span",{className:Be.taskFormDateLabel,children:we("taskForm.completedLabel")}),e.jsxs("span",{className:Be.taskFormMetaStack,children:[e.jsx("span",{className:Be.taskFormDateValue,children:qt||we("taskForm.emptyValue")}),e.jsx("span",{className:Be.taskFormMetaActor,children:ua?`by ${ua}`:we("taskForm.emptyValue")})]})]})]})})})]}),e.jsxs("div",{className:Be.keyboardHint,children:["Press ",e.jsx("kbd",{children:navigator.platform.includes("Mac")?"⌥":"Alt"})," to toggle"]})]})]})}function Rf({editingTaskId:t,loading:n,autoSaveState:s="idle",title:r,handleSubmit:o,resetForm:d,handleCopyId:l,copiedId:p,tasks:g,currentTask:_,currentTaskWorkstream:w,currentTaskInitiative:A,workstreamInput:y="",onWorkstreamInputChange:k,onSetWorkstreamForCurrentTask:b,handleToggleInProgress:L,handleToggleReview:S,handleToggleComplete:$,handleToggleCancel:J,handleSetStatus:U,handleArchiveTask:X,handleRestoreDeletedTask:q,handlePermanentlyDeleteDeletedTask:ee}){const[W,Re]=ut.useState(!1),V=_??(t&&g.find(re=>re.id===t)||null),te=!!V?.isArchived,xe=!!V?.isDeleted,de=er(V)||t||"",O=w?bp(w)||w.id:"",R=A?wr(A)||A.id:"";ut.useEffect(()=>{w&&Re(!1)},[w?.id]);const z=ut.useCallback(()=>{y.trim()&&b?.()},[b,y]);return e.jsx("div",{className:u.stickyActionHeader,children:t?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:u.taskHierarchyHeader,children:[e.jsxs("div",{className:u.taskHierarchyBadgeRow,children:[A?e.jsxs(e.Fragment,{children:[e.jsx(Hd,{copied:p===R,onClick:re=>l(re,R),disabled:n,title:"Copy initiative reference",label:R}),e.jsx("span",{className:u.taskHierarchyDivider,children:"/"})]}):null,w?e.jsxs(e.Fragment,{children:[e.jsx(Hd,{copied:p===O,onClick:re=>l(re,O),disabled:n,title:"Copy workstream reference",label:O}),e.jsx("span",{className:u.taskHierarchyDivider,children:"/"})]}):e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:`${u.taskIdBadge} ${u.taskHierarchyAddBtn}`,onClick:()=>{k?.(""),Re(re=>!re)},disabled:n||te||xe,title:"Attach to workstream","aria-label":"Attach to workstream",children:e.jsx(tr,{size:13})}),e.jsx("span",{className:u.taskHierarchyDivider,children:"/"})]}),e.jsx(Hd,{copied:p===de,onClick:re=>l(re,de),disabled:n,title:we("actionHeader.copyTaskIdTitle"),label:de})]}),W&&!w?e.jsxs("div",{className:u.taskHierarchyEditor,children:[e.jsx("input",{type:"text",className:`${u.input} ${u.taskHierarchyInput}`,value:y,onChange:re=>k?.(re.target.value),placeholder:"WS-123","aria-label":"Attach workstream reference",onKeyDown:re=>{re.key==="Enter"&&(re.preventDefault(),z()),re.key==="Escape"&&(re.preventDefault(),k?.(""),Re(!1))}}),e.jsx("button",{type:"button",className:"tf-control-icon tf-control-icon-compact",onClick:z,disabled:!y.trim()||n,title:"Attach workstream","aria-label":"Attach workstream",children:e.jsx(Xr,{size:14})}),e.jsx("button",{type:"button",className:"tf-control-icon tf-control-icon-compact",onClick:()=>{k?.(""),Re(!1)},disabled:n,title:"Cancel workstream attach","aria-label":"Cancel workstream attach",children:e.jsx(ji,{size:14})})]}):null]}),e.jsx("div",{className:u.taskSaveStatusCenter,children:e.jsx("div",{className:`${u.taskSaveStatus} ${s==="error"?u.taskSaveStatusError:""}`,"aria-live":"polite",children:s==="saving"?e.jsxs(e.Fragment,{children:[e.jsx(Fa,{size:14,className:u.spinner}),e.jsx("span",{children:"Saving…"})]}):s==="saved"?e.jsx("span",{children:"Saved"}):s==="error"?e.jsx("span",{children:"Save failed"}):null})}),e.jsx("div",{className:u.editActionsGroup,children:xe&&V?.deletedRecordId?e.jsxs(e.Fragment,{children:[q&&e.jsx("button",{type:"button",className:u.actionBtn,onClick:()=>q(V.deletedRecordId||""),disabled:n,title:"Restore deleted task",children:e.jsx(Xu,{size:16})}),ee&&e.jsx("button",{type:"button",className:`${u.actionBtn} ${u.deleteBtn}`,onClick:()=>ee(V.deletedRecordId||""),disabled:n,title:"Permanently delete deleted task",children:e.jsx(El,{size:16})})]}):e.jsx(vf,{task:V,disabled:n||te,onSetStatus:(re,be)=>{if(U){U(re,be);return}if(be==="in-progress"){L(re);return}if(be==="review"){S(re);return}if(be==="done"){$(re);return}be==="cancelled"&&J(re)},onArchiveTask:X})})]}):e.jsxs(e.Fragment,{children:[e.jsxs("button",{type:"button",onClick:d,disabled:n,className:u.secondaryHeaderBtn,title:we("actionHeader.clearFormTitle"),children:[e.jsx(Xu,{size:16}),we("actionHeader.clear")]}),e.jsxs("button",{type:"button",onClick:re=>o(re),disabled:n||!r.trim(),className:u.primaryUpdateBtn,title:we("actionHeader.addTaskTitle"),children:[n?e.jsx(Fa,{size:16,className:u.spinner}):e.jsx(tr,{size:16}),we("actionHeader.addTask")]})]})})}const yR="_topNoticeLayer_1m6a1_1",kR="_topNotice_1m6a1_1",SR="_topNoticeMessage_1m6a1_32",vR="_topNoticeSuccess_1m6a1_38",wR="_topNoticeError_1m6a1_44",bR="_topNoticeInfo_1m6a1_50",_R="_topNoticeDismiss_1m6a1_56",vi={topNoticeLayer:yR,topNotice:kR,topNoticeMessage:SR,topNoticeSuccess:vR,topNoticeError:wR,topNoticeInfo:bR,topNoticeDismiss:_R};function Df({notice:t,onDismiss:n}){if(!t)return null;const s=t.tone==="error"?vi.topNoticeError:t.tone==="success"?vi.topNoticeSuccess:vi.topNoticeInfo,r=t.tone==="error"?"alert":"status";return e.jsx("div",{className:vi.topNoticeLayer,children:e.jsxs("div",{className:`${vi.topNotice} ${s}`,role:r,"aria-live":t.tone==="error"?"assertive":"polite",children:[t.tone==="error"?e.jsx(Nc,{size:14}):t.tone==="success"?e.jsx(Xr,{size:14}):e.jsx(ih,{size:14}),e.jsx("span",{className:vi.topNoticeMessage,children:t.message}),n&&e.jsx("button",{type:"button",className:vi.topNoticeDismiss,onClick:n,"aria-label":"Dismiss notice",title:"Dismiss notice",children:e.jsx(ji,{size:14})})]})})}const CR=ut.lazy(()=>Do(()=>import("./TaskSettings-Cw5zYD1L.js"),__vite__mapDeps([0,1,2,3,4,5,6])).then(t=>({default:t.TaskSettings})));function xR(t){const{activeTab:n,setActiveTab:s,isOpen:r,setIsOpen:o,currentTheme:d,setCurrentTheme:l,saveSettings:p,pathSaved:g,keyShortcut:_,setKeyShortcut:w,jsonBackupEnabled:A,setJsonBackupEnabled:y,mcpHostRoot:k,setMcpHostRoot:b,settingsSection:L,setSettingsSection:S,projectRoot:$,projectName:J,mcpScriptPath:U,serverHostRoot:X,showFolderBrowser:q,setShowFolderBrowser:ee,folders:W,files:Re,currentBrowsePath:V,fetchFolders:te,browserTarget:xe,setBrowserTarget:de,handleSelectPath:O,handleAddPath:R,handleRemovePath:z,tasks:re,loadingTasks:be,archivedTasks:We,deletedTasks:Ce,activeCategories:Ve,activeTypes:Fe,priorities:ve,taxonomyDisplayLabels:Oe,approaches:v,taxonomies:M,searchQuery:C,setSearchQuery:oe,filterCategories:D,setFilterCategories:f,filterTypes:x,setFilterTypes:P,filterPriorities:B,setFilterPriorities:Ae,filterStatus:F,setFilterStatus:ne,filterAssignees:ae,setFilterAssignees:ie,assigneeOptions:Z,filterTaxonomies:H,setFilterTaxonomies:ue,sortBy:Pe,setSortBy:se,sortOrder:$e,toggleSortOrder:et,showArchive:tt,setShowArchive:Ct,taskScope:i,setTaskScope:De,clearFilters:Je,filteredTasks:Ie,filteredArchive:ht,groupedTasks:yt,collapsedCategories:$t,setCollapsedCategories:Ht,handleEdit:bn,handleDelete:nn,handleCopyId:Kt,handleToggleComplete:_n,handleToggleCancel:qt,handleToggleInProgress:Hn,handleToggleReview:on,handleArchiveTask:Nn,handleBulkArchive:Nt,handleUnarchive:Yt,handleRestoreDeletedTask:Bn,handlePermanentlyDeleteDeletedTask:an,handleEmptyDeletedTasks:me,fetchArchive:Ee,editingTaskId:Zt,loading:Lt,error:Rn,title:xt,setTitle:G,description:ke,setDescription:je,checklistItems:Te,setChecklistItems:Se,category:Qe,setCategory:pt,type:Mt,setType:Rt,priority:At,setPriority:Ut,complexity:nt,setComplexity:Tt,manualComplexityEnabled:kt,checklistDropdownEnabled:Dn,showTaskCardStatusLabel:Cn,approach:ua,setApproach:mt,assignee:Ze,setAssignee:Wn,scheduledDate:Y,setScheduledDate:ze,dueDate:Ne,setDueDate:st,workstreamInput:Le,setWorkstreamInput:Xe,formTaxonomies:xn,setFormTaxonomies:ft,comments:Gn,newCommentText:Vn,setNewCommentText:pa,attachments:An,setAttachments:va,setAttachmentsDirty:ln,descriptionFocused:gt,setDescriptionFocused:Dt,showMarkdownHelp:Pt,setShowMarkdownHelp:Bt,showChecklist:Ye,setShowChecklist:Ke,showComments:Un,setShowComments:Tn,handleSubmit:sn,resetForm:yn,handleAddComment:Wt,handleSetWorkstreamForCurrentTask:Ds,handleOpenTaskById:hs,autoSaveState:Fn,unsavedModalOpen:Jt,setUnsavedModalOpen:kn,pendingNavigation:na,handleNavigation:zt,handleClose:In,scheduleWarningPrompt:Xt,confirmScheduleWarning:On,cancelScheduleWarning:hn,uiNotice:Zn,clearNotice:Qt,taskReturnTrail:dn,clearReturnToParentTask:rt,returnToPreviousTask:Oa,copiedId:aa,recentlyChangedTaskIds:$a,tasksScrollRef:qn,setTasksScrollPos:gs,currentTask:wa,currentTaskWorkstream:sa,currentTaskInitiative:ba,exportEnvironment:ja,setExportEnvironment:Mn,exportWorkflowsPath:en,setExportWorkflowsPath:ma,exportResult:fa,exportingResource:Ja,availableWorkflows:Na,onExportWorkflows:ys,availableEnvironments:nr,handleUpdateCategory:Ra,handleRemoveCategory:eo,handleSaveCategory:Q,handleUpdateCategoryIcon:ot,handleUpdateCategoryColor:rn,handleSaveType:wt,handleRemoveType:Sn,handleUpdateTaxonomies:ct,handleUpdatePriorities:jn,pathValidation:ea,validatePaths:ha,getCategoryPaths:ra,commentsEndRef:ks,currentWorkspaceId:$n,settingsModel:Da,onHeaderMouseDown:as,isDragging:Xa}=t,oa=a.useRef(null),[Ua,Qa]=ut.useState(0);a.useLayoutEffect(()=>{if(n==="tasks"&&qn.current&&Ua>0){const Ue=setTimeout(()=>{qn.current&&(qn.current.scrollTop=Ua)},50);return()=>clearTimeout(Ue)}},[n,Ua,re]);const Ca=Ue=>{se(Ue)},ss=()=>{zt(()=>{if(n==="add"||n==="settings"){if(n==="add"&&Oa())return;n==="add"&&dn.length>0&&rt(),n==="add"&&yn(),s("tasks")}else t.onClose?t.onClose():In()})},Ps=()=>{kn(!1),na?(n==="add"&&yn(),na()):s("tasks")},ar=async()=>{await sn({preventDefault:()=>{}}),kn(!1),na&&na()},rs=(Ue,Ft)=>{ft(za=>({...za,[Ue]:Ft})),Ue==="approach"&&typeof Ft=="string"&&mt(Ft)},sr=a.useCallback(Ue=>{yn(),pt(Ue),zt(()=>{s("add")})},[yn,pt,s,zt]),ia=ut.useMemo(()=>Ce.map(Ue=>({...Ue.taskSnapshot,isDeleted:!0,deletedRecordId:Ue.id})),[Ce]),xa=ut.useMemo(()=>new globalThis.Map(Ce.map(Ue=>[Ue.taskId,Ue])),[Ce]),Es=ut.useMemo(()=>{const Ue=C.toLowerCase(),Ft=Ve.every(_e=>D.includes(_e.value)),za=Fe.every(_e=>x.includes(_e.value)),_a=Array.from(new Set(B.map(_e=>Number(_e)).filter(_e=>Number.isFinite(_e)))),Po=ve.map(_e=>Number(_e.value)).filter(_e=>Number.isFinite(_e)).every(_e=>_a.includes(_e)),j=["task","in-progress","review","done","cancelled","on-hold"].every(_e=>F.includes(_e)),le=Z.length>0&&Z.every(_e=>ae.includes(_e.value)),He=$l(M,ia);return ia.filter(_e=>{const K=er(_e).toLowerCase(),Me=!Ue||_e.title.toLowerCase().includes(Ue)||(_e.description?.toLowerCase()||"").includes(Ue)||_e.id.toLowerCase().includes(Ue)||K.includes(Ue),bt=Ft||D.includes(_e.category),St=Po||_a.includes(Kd(_e.priority)),os=za||x.includes(_e.type||fs),Pn=j||F.includes(_e.status),gn=le||ae.includes(_e.assignee||"unassigned"),Us=Object.entries(H).every(([rr,Cr])=>{const Ni=He.find(Aa=>Aa.id===rr);if(!Ni||_p(Ni,ia).every(Aa=>Cr.includes(Aa.value)))return!0;const ga=_e.taxonomies?.[rr];return ga?Array.isArray(ga)?ga.some(Aa=>Cr.includes(Aa)):Cr.includes(ga):Cr.includes("")});return Me&&bt&&St&&os&&Pn&&gn&&Us}).sort((_e,K)=>eu(_e,K,Pe,$e,M))},[Ve,Fe,We,Z,ia,ae,D,B,F,H,x,ve,C,Pe,$e,M,re]),to=ut.useMemo(()=>{const Ue={};return Es.forEach(Ft=>{const _a=Ve.find(Ss=>Ss.value===Ft.category||Ss.label===Ft.category)?.label||Ft.category||"General";Ue[_a]||(Ue[_a]=[]),Ue[_a].push(Ft)}),Ue},[Ve,Es]),_r=i==="archived"?ht.length:i==="deleted"?Es.length:Ie.length;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{ref:oa,className:`${dt.modal} ${u.coreModal} ${n==="settings"?dt.settingsViewModal:""}`,"data-theme":d,children:[e.jsxs("div",{className:"tf-modal-header",onMouseDown:as,style:{cursor:as?Xa?"grabbing":"grab":"default"},children:[e.jsxs("div",{className:`tf-modal-title ${pn.headerTitleWidget}`,children:["Taskforce",J&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:u.projectSlash,children:"/"}),e.jsx("span",{className:u.projectName,style:{fontSize:"14px",padding:"1px 6px"},children:J})]}),e.jsx("span",{className:u.taskCountBadge,title:`${i.charAt(0).toUpperCase()+i.slice(1)} tasks`,children:_r})]}),e.jsxs("div",{className:dt.headerActions,children:[n==="tasks"&&e.jsx(e.Fragment,{children:e.jsx("button",{className:"tf-control-icon",onClick:()=>{zt(()=>{yn(),s("add")})},title:"Add New Task",children:e.jsx(tr,{size:18})})}),e.jsx("button",{className:`tf-control-icon ${n==="settings"?"tf-control-icon-active":""}`,onClick:()=>{n!=="settings"&&zt(()=>{s("settings")})},title:"Settings",children:e.jsx(Cm,{size:18})}),e.jsx("button",{className:"tf-control-icon",onClick:ss,title:n==="tasks"?"Close":"Back to Tasks",children:n==="tasks"?e.jsx(ji,{size:20}):e.jsx(ch,{size:20})})]})]}),e.jsx(Df,{notice:Zn,onDismiss:Qt}),n==="add"&&e.jsx(Rf,{editingTaskId:Zt,loading:Lt,autoSaveState:Fn,title:xt,currentTask:wa,currentTaskWorkstream:sa,currentTaskInitiative:ba,workstreamInput:Le,onWorkstreamInputChange:Xe,onSetWorkstreamForCurrentTask:Ds,handleSubmit:sn,resetForm:yn,handleCopyId:Kt,copiedId:aa,tasks:re,handleToggleInProgress:Hn,handleToggleReview:on,handleToggleComplete:_n,handleToggleCancel:qt,handleArchiveTask:Nn,handleRestoreDeletedTask:Ue=>{Bn(Ue)},handlePermanentlyDeleteDeletedTask:Ue=>{an(Ue)}}),n==="tasks"&&e.jsx(Tf,{ref:qn,tasks:re,archivedTasks:We,categories:Ve,types:Fe,priorities:ve,taxonomyDisplayLabels:Oe,taxonomies:M,searchQuery:C,filterCategories:D,filterTypes:x,filterPriorities:B,filterStatus:F,filterAssignees:ae,assigneeOptions:Z,filterTaxonomies:H,sortBy:Pe,sortOrder:$e,showArchive:tt,taskScope:i,collapsedCategories:$t,loadingTasks:be,filteredTasks:Ie,filteredArchive:ht,groupedTasks:yt,filteredDeletedTasks:Es,groupedDeletedTasks:to,copiedId:aa,recentlyChangedTaskIds:$a,showTaskCardStatusLabel:Cn,workstreams:t.workstreams,initiatives:t.initiatives,onSearchChange:oe,onFilterCategoriesChange:Ue=>f(Ue),onFilterTypesChange:Ue=>P(Ue),onFilterPrioritiesChange:Ae,onFilterStatusChange:ne,onFilterAssigneesChange:Ue=>ie(Ue),onTaxonomyFilterChange:(Ue,Ft)=>ue(za=>({...za,[Ue]:Ft})),onSortByChange:Ca,onSortOrderChange:et,onShowArchiveChange:Ct,onTaskScopeChange:De,onClearFilters:Je,onToggleCategory:Ue=>Ht(Ft=>({...Ft,[Ue]:!Ft[Ue]})),onEditTask:bn,onOpenTaskById:hs,onCopyId:Kt,onToggleInProgress:Hn,onToggleReview:on,onToggleComplete:_n,onToggleCancel:qt,onArchiveTask:Nn,onBulkArchive:Nt,onUnarchive:Ue=>{const Ft=xa.get(Ue);if(Ft){Bn(Ft.id);return}Yt(Ue)},onDelete:Ue=>{const Ft=xa.get(Ue);if(Ft){an(Ft.id);return}nn(Ue)},onDeleteAllDeleted:()=>{me()},onFetchArchive:Ee,onAddTaskToCategory:sr,supplementalTasks:ia}),n==="add"&&e.jsx(Nf,{editingTaskId:Zt,error:Rn,title:xt,description:ke,checklistItems:Te,category:Qe,type:Mt,priority:At,complexity:nt,manualComplexityEnabled:kt,approach:ua,assignee:Ze,scheduledDate:Y,dueDate:Ne,workstreamInput:Le,formTaxonomies:xn,onTaxonomyChange:rs,taxonomies:M,comments:Gn,newCommentText:Vn,contextFiles:An,currentWorkspaceId:$n,apiBaseUrl:"",descriptionFocused:gt,showMarkdownHelp:Pt,showChecklist:Ye,checklistEnabled:Dn,showComments:Un,categories:Ve,types:Fe,priorities:ve,taxonomyDisplayLabels:Oe,assigneeOptions:Z,workstreams:t.workstreams,copiedId:aa,onTitleChange:G,onDescriptionChange:je,onChecklistItemsChange:Se,onCategoryChange:pt,onTypeChange:Rt,onPriorityChange:Ut,onComplexityChange:Tt,onApproachChange:Ue=>{mt(Ue),ft(Ft=>({...Ft,approach:Ue}))},onAssigneeChange:Wn,onScheduledDateChange:ze,onDueDateChange:st,onWorkstreamInputChange:Xe,onNewCommentTextChange:pa,onDescriptionFocusedChange:Dt,onShowMarkdownHelpChange:Bt,onShowChecklistChange:Ke,onShowCommentsChange:Tn,onOpenSettings:Ue=>{zt(()=>{S(Ue),s("settings")})},onSubmit:sn,commentsEndRef:ks,onAddComment:()=>Wt(Vn),onOpenTaskById:hs,onAddContextFile:Ue=>{ln(!0),va(Ft=>[...Ft,Ue])},onRemoveContextFile:async Ue=>{ln(!0),va(Ft=>Ft.filter((za,_a)=>_a!==Ue))},onUpdateContextCaption:(Ue,Ft)=>{ln(!0),va(za=>za.map((_a,Ss)=>Ss!==Ue?_a:typeof _a=="string"?{path:_a,caption:Ft,timestamp:new Date().toISOString()}:{..._a,caption:Ft}))},onCopyId:Kt,onToggleInProgress:Hn,onToggleReview:on,onToggleComplete:_n,onToggleCancel:qt,onArchiveTask:Nn,onUnarchive:Ue=>{if(wa?.isDeleted){const Ft=xa.get(Ue);Ft&&Bn(Ft.id);return}Yt(Ue)},currentTask:wa}),n==="settings"&&e.jsx(a.Suspense,{fallback:e.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"2rem"},children:e.jsx(Fa,{size:20,className:u.spinner})}),children:e.jsx(CR,{settingsModel:Da,onSectionChange:S})})]}),q&&Ci.createPortal(e.jsx("div",{className:Ln.overlay,children:e.jsxs("div",{className:Ln.browser,children:[e.jsxs("div",{className:Ln.header,children:[e.jsxs("div",{className:Ln.pathInfo,children:[e.jsx(Ai,{size:14}),e.jsx("span",{children:V||"Project Root"})]}),e.jsxs("div",{className:Ln.actions,children:[V&&e.jsx("button",{className:u.helpLink,onClick:()=>{const Ue=V.split("/").filter(Boolean);Ue.pop(),te(Ue.length?Ue.join("/")+"/":"")},children:"Back"}),e.jsx("button",{className:u.helpLink,onClick:()=>ee(!1),children:"Close"})]})]}),e.jsxs("div",{className:Ln.list,children:[xe&&typeof xe=="object"&&e.jsxs("div",{className:`${Ln.item} ${Ln.itemCurrent}`,onClick:()=>O(V),children:[e.jsx(Xr,{size:14})," Select Current: ./",V||"(root)"]}),W.map(Ue=>e.jsxs("div",{className:Ln.item,onClick:()=>te(V+Ue+"/"),children:[e.jsx(Ai,{size:14})," ",Ue,"/"]},Ue)),Re.map(Ue=>e.jsxs("div",{className:`${Ln.item} ${Ln.itemFile}`,onClick:()=>O(V+Ue),children:[e.jsx(ep,{size:14})," ",Ue]},Ue)),W.length===0&&Re.length===0&&e.jsx("div",{className:`${Ln.item} ${Ln.empty}`,children:"No items found"})]})]})}),document.body),Jt&&e.jsx("div",{className:`${dt.overlay} ${dt.unsavedOverlay}`,children:e.jsxs("div",{className:`tf-surface-modal tf-modal-shell ${dt.modal} ${dt.unsavedModal}`,"data-theme":d,children:[e.jsx("div",{className:`tf-modal-header ${dt.unsavedHeader}`,children:e.jsxs("div",{className:`tf-modal-title ${dt.unsavedTitle}`,children:[e.jsx(Nc,{size:20}),"Unsaved Changes"]})}),e.jsx("div",{className:`${dt.form} ${dt.unsavedContent}`,children:e.jsx("p",{className:dt.unsavedText,children:"You have unsaved changes. Would you like to save them?"})}),e.jsxs("div",{className:`${dt.formActions} ${dt.unsavedActions}`,children:[e.jsx("button",{className:u.cancelBtn,onClick:()=>kn(!1),title:"Close dialog and continue editing",children:"Keep Editing"}),e.jsx("button",{className:u.destructiveBtn,onClick:Ps,title:"Discard unsaved changes and leave",children:"Discard"}),e.jsxs("button",{className:u.submitBtn,onClick:ar,disabled:Lt,title:"Save changes and leave",children:[Lt?e.jsx(Fa,{size:16,className:u.spinner}):e.jsx(xm,{size:16}),"Save"]})]})]})}),Xt&&e.jsx("div",{className:`${dt.overlay} ${dt.unsavedOverlay}`,children:e.jsxs("div",{className:`tf-surface-modal tf-modal-shell ${dt.modal} ${dt.unsavedModal}`,"data-theme":d,children:[e.jsx("div",{className:`tf-modal-header ${dt.unsavedHeader}`,children:e.jsxs("div",{className:`tf-modal-title ${dt.unsavedTitle}`,children:[e.jsx(Nc,{size:20}),"Date Warning"]})}),e.jsxs("div",{className:`${dt.form} ${dt.unsavedContent}`,children:[e.jsx("p",{className:dt.unsavedText,children:"Due date is before scheduled date."}),e.jsxs("p",{style:{margin:0,fontSize:"12px",color:"var(--text-muted)"},children:["Due: ",Xt.dueDate," · Scheduled: ",Xt.scheduledDate]})]}),e.jsxs("div",{className:`${dt.formActions} ${dt.unsavedActions}`,children:[e.jsx("button",{className:u.cancelBtn,onClick:hn,children:"Go Back"}),e.jsx("button",{className:u.submitBtn,onClick:On,children:"Save Anyway"})]})]})})]})}const AR="_accountMenuWrap_1dge9_1",TR="_avatarBtn_1dge9_5",IR="_avatarBadge_1dge9_9",jR="_accountMenu_1dge9_1",NR="_accountMenuItem_1dge9_37",RR="_accountMenuItemActive_1dge9_57",DR="_accountMenuSection_1dge9_62",PR="_accountMenuSectionLabel_1dge9_68",ER="_accountMenuMeta_1dge9_77",LR="_accountMenuHint_1dge9_82",MR="_accountIdentityEmail_1dge9_88",BR="_accountIdentityBlock_1dge9_93",WR="_accountIdentityMetaLine_1dge9_98",FR="_accountIdentityMetaAction_1dge9_105",OR="_accountIdentityMetaValue_1dge9_114",$R="_accountIdentityMetaLabel_1dge9_119",UR="_accountMenuError_1dge9_148",zR="_accountHubCard_1dge9_154",vt={accountMenuWrap:AR,avatarBtn:TR,avatarBadge:IR,accountMenu:jR,accountMenuItem:NR,accountMenuItemActive:RR,accountMenuSection:DR,accountMenuSectionLabel:PR,accountMenuMeta:ER,accountMenuHint:LR,accountIdentityEmail:MR,accountIdentityBlock:BR,accountIdentityMetaLine:WR,accountIdentityMetaAction:FR,accountIdentityMetaValue:OR,accountIdentityMetaLabel:$R,accountMenuError:UR,accountHubCard:zR},HR="_authBlockedBanner_1dg8p_1",GR="_loginView_1dg8p_10",VR="_loginCard_1dg8p_20",ZR="_loginCloseBtn_1dg8p_34",qR="_loginLogo_1dg8p_56",KR="_authBrandRow_1dg8p_62",YR="_loginTitle_1dg8p_74",JR="_loginTitleAccent_1dg8p_85",XR="_loginSubtitle_1dg8p_89",QR="_loginError_1dg8p_95",e1="_loginInput_1dg8p_101",t1="_loginPrimaryBtn_1dg8p_117",n1="_registerConsent_1dg8p_122",a1="_registerConsentLink_1dg8p_130",s1="_authModeSwitch_1dg8p_140",r1="_authModeSwitchLink_1dg8p_147",o1="_authModeLinks_1dg8p_162",i1="_authModeLink_1dg8p_162",c1="_optionGrid_1dg8p_191",l1="_optionGroup_1dg8p_197",d1="_optionRow_1dg8p_202",u1="_inlineHint_1dg8p_209",p1="_actionRowEnd_1dg8p_215",he={authBlockedBanner:HR,loginView:GR,loginCard:VR,loginCloseBtn:ZR,loginLogo:qR,authBrandRow:KR,loginTitle:YR,loginTitleAccent:JR,loginSubtitle:XR,loginError:QR,loginInput:e1,loginPrimaryBtn:t1,registerConsent:n1,registerConsentLink:a1,authModeSwitch:s1,authModeSwitchLink:r1,authModeLinks:o1,authModeLink:i1,optionGrid:c1,optionGroup:l1,optionRow:d1,inlineHint:u1,actionRowEnd:p1},m1="_modalBody_1mute_1",f1="_mutedText_1mute_5",h1="_sectionText_1mute_10",g1="_sectionTextSpaced_1mute_15",y1="_sectionTextTop_1mute_20",k1="_errorText_1mute_25",S1="_inlineFieldLabel_1mute_29",v1="_wrapRow_1mute_35",w1="_actionRowEnd_1mute_42",b1="_modalActionsEnd_1mute_50",_1="_memberRow_1mute_56",C1="_memberTitle_1mute_62",x1="_memberActions_1mute_66",A1="_selectRole_1mute_73",T1="_selectPermission_1mute_77",I1="_inviteRow_1mute_81",j1="_listHeading_1mute_85",N1="_auditList_1mute_90",R1="_auditPager_1mute_96",D1="_labelFixed_1mute_103",it={modalBody:m1,mutedText:f1,sectionText:h1,sectionTextSpaced:g1,sectionTextTop:y1,errorText:k1,inlineFieldLabel:S1,wrapRow:v1,actionRowEnd:w1,modalActionsEnd:b1,memberRow:_1,memberTitle:C1,memberActions:x1,selectRole:A1,selectPermission:T1,inviteRow:I1,listHeading:j1,auditList:N1,auditPager:R1,labelFixed:D1},P1="_syncStatusModal_4pd1g_1",E1="_syncStatusTop_4pd1g_6",L1="_syncStatusMetaHeader_4pd1g_15",M1="_syncStatusHeaderInfo_4pd1g_22",B1="_syncToggle_4pd1g_43",W1="_syncStatusBadge_4pd1g_47",F1="_syncToggleControl_4pd1g_75",O1="_syncToggleControlEnabled_4pd1g_91",$1="_syncToggleControlDisabled_4pd1g_98",U1="_syncToggleControlBusy_4pd1g_102",z1="_syncToggleControlBlocked_4pd1g_107",H1="_syncToggleInput_4pd1g_112",G1="_syncToggleState_4pd1g_125",V1="_syncToggleStateOn_4pd1g_136",Z1="_syncToggleStateOff_4pd1g_141",q1="_syncToggleThumb_4pd1g_146",K1="_syncStatusSummaryValue_4pd1g_173",Y1="_syncStatusSummaryCompact_4pd1g_180",J1="_syncStatusRepairBanner_4pd1g_190",X1="_syncStatusRepairHeader_4pd1g_200",Q1="_syncStatusRepairBadge_4pd1g_207",eD="_syncStatusRepairMeta_4pd1g_216",tD="_syncStatusRepairText_4pd1g_223",nD="_syncStatusLabel_4pd1g_257",aD="_syncStatusSectionHeader_4pd1g_265",sD="_syncStatusCompactGrid_4pd1g_278",rD="_syncStatusCompactItem_4pd1g_284",oD="_syncStatusValue_4pd1g_295",iD="_syncStatusValueError_4pd1g_325",cD="_syncStatusActions_4pd1g_329",lD="_syncStatusPanel_4pd1g_336",dD="_syncStatusPanelHeader_4pd1g_346",uD="_syncStatusPanelMeta_4pd1g_353",pD="_syncStatusEventsList_4pd1g_375",mD="_syncStatusEventItem_4pd1g_384",fD="_syncStatusEventItemError_4pd1g_391",hD="_syncStatusEventItemMuted_4pd1g_396",gD="_syncStatusEventLine_4pd1g_401",yD="_syncStatusSecondaryActions_4pd1g_411",kD="_syncStatusPrimaryActions_4pd1g_425",SD="_syncStatusPrimaryActionSlot_4pd1g_432",vD="_syncStatusActionPlaceholder_4pd1g_440",Ge={syncStatusModal:P1,syncStatusTop:E1,syncStatusMetaHeader:L1,syncStatusHeaderInfo:M1,syncToggle:B1,syncStatusBadge:W1,syncToggleControl:F1,syncToggleControlEnabled:O1,syncToggleControlDisabled:$1,syncToggleControlBusy:U1,syncToggleControlBlocked:z1,syncToggleInput:H1,syncToggleState:G1,syncToggleStateOn:V1,syncToggleStateOff:Z1,syncToggleThumb:q1,syncStatusSummaryValue:K1,syncStatusSummaryCompact:Y1,syncStatusRepairBanner:J1,syncStatusRepairHeader:X1,syncStatusRepairBadge:Q1,syncStatusRepairMeta:eD,syncStatusRepairText:tD,syncStatusLabel:nD,syncStatusSectionHeader:aD,syncStatusCompactGrid:sD,syncStatusCompactItem:rD,syncStatusValue:oD,syncStatusValueError:iD,syncStatusActions:cD,syncStatusPanel:lD,syncStatusPanelHeader:dD,syncStatusPanelMeta:uD,syncStatusEventsList:pD,syncStatusEventItem:mD,syncStatusEventItemError:fD,syncStatusEventItemMuted:hD,syncStatusEventLine:gD,syncStatusSecondaryActions:yD,syncStatusPrimaryActions:kD,syncStatusPrimaryActionSlot:SD,syncStatusActionPlaceholder:vD};function wD(t={x:0,y:0}){const[n,s]=a.useState(t),[r,o]=a.useState(!1),[d,l]=a.useState({x:0,y:0}),[p,g]=a.useState(0),_=a.useRef(null),w=a.useCallback(k=>{const b=k.target;if(!(b.closest("button")||b.closest("input")||b.closest("select")||b.closest("textarea")||b.closest('[role="button"]')||b.closest(".no-drag"))){if(_.current){const L=_.current.getBoundingClientRect();g(L.top-n.y)}o(!0),l({x:k.clientX-n.x,y:k.clientY-n.y})}},[n]),A=a.useCallback(k=>{if(r){let b=k.clientX-d.x,L=k.clientY-d.y;L<-p&&(L=-p),s({x:b,y:L})}},[r,d,p]),y=a.useCallback(()=>{o(!1)},[]);return a.useEffect(()=>(r?(window.addEventListener("mousemove",A),window.addEventListener("mouseup",y)):(window.removeEventListener("mousemove",A),window.removeEventListener("mouseup",y)),()=>{window.removeEventListener("mousemove",A),window.removeEventListener("mouseup",y)}),[r,A,y]),{position:n,isDragging:r,handleMouseDown:w,modalRef:_,setPosition:s}}function qr({isOpen:t,onClose:n,title:s,children:r,footer:o,size:d="md",theme:l=qd,className:p,headerActions:g,draggable:_=!1,isSettings:w=!1,closeOnOverlayClick:A=!0}){const y=a.useRef(null),{position:k,isDragging:b,handleMouseDown:L,modalRef:S}=wD();if(a.useEffect(()=>{const J=U=>{U.key==="Escape"&&t&&n()};return window.addEventListener("keydown",J),()=>window.removeEventListener("keydown",J)},[t,n]),a.useEffect(()=>(t?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[t]),!t)return null;const $={sm:dt.modalSizeSm,md:dt.modalSizeMd,lg:dt.modalSizeLg,xl:dt.modalSizeXl,full:dt.modalSizeFull};return Ci.createPortal(e.jsx("div",{className:`${dt.overlay} ${p||""} ${dt.overlayHighZ}`,ref:y,onClick:J=>{A&&J.target===y.current&&n()},children:e.jsxs("div",{ref:S,className:`tf-surface-modal tf-modal-shell ${dt.modal} tf-scrollbar-scope ${$[d]} ${_?dt.draggableModal:""} ${w?dt.settingsViewModal:""}`,"data-theme":l,style:{transform:_?`translate(${k.x}px, ${k.y}px)`:void 0,transition:b?"none":"transform 0.3s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.3s ease-out"},children:[e.jsxs("div",{className:`tf-modal-header ${_?dt.draggableHeader:""}`,onMouseDown:_?L:void 0,style:{cursor:_?b?"grabbing":"grab":"default"},children:[e.jsx("div",{className:"tf-modal-title",children:s}),e.jsxs("div",{className:dt.headerActions,children:[g,e.jsx("button",{className:"tf-control-icon",onClick:n,title:"Close",children:e.jsx(ji,{size:20})})]})]}),e.jsx("div",{className:dt.modalContent,children:r}),o&&e.jsx("div",{className:`${dt.formActions} ${dt.modalFooter}`,children:o})]})}),document.body)}const Gd="expired::";function bD({tasks:t,columns:n,groupBy:s,searchQuery:r,copiedId:o,taxonomies:d,types:l,priorities:p,approaches:g,assigneeOptions:_=[],onUpdateTask:w,onTaskClick:A,onOpenTaskById:y,onCopyId:k,onToggleInProgress:b,onToggleReview:L,onToggleComplete:S,onToggleCancel:$,onSetStatus:J,onArchiveTask:U,onUnarchive:X,onDelete:q,allTasks:ee=[],onAddTaskToColumn:W,emptyColumnMode:Re="show",filterCategories:V=[],filterTypes:te=[],filterPriorities:xe=[],filterStatus:de=[],filterAssignees:O=[],scheduleFilteredTaskIds:R,categories:z=[],compressed:re=!1,readOnlyMode:be=null,recentlyChangedTaskIds:We=[],scheduleDates:Ce,onScheduleDaySelected:Ve,persistedScrollLeft:Fe,onScrollLeftChange:ve,sortBy:Oe="created",sortOrder:v="desc",planningDropTargets:M=null,onAssignTaskToWorkstream:C,onAssignWorkstreamToInitiative:oe,showTaskCardStatusLabel:D=!0,workstreams:f=[],initiatives:x=[]}){const[P,B]=a.useState(null),[Ae,F]=a.useState(!1),[ne,ae]=a.useState(!1),ie=a.useMemo(()=>new Set(We),[We]),Z=a.useMemo(()=>new Map(f.map(G=>[G.id,G])),[f]),H=a.useMemo(()=>new Map(x.map(G=>[G.id,G])),[x]),ue=a.useCallback(G=>{const ke=G.workstreamId&&Z.get(G.workstreamId)||null,je=ke?.initiativeId&&H.get(ke.initiativeId)||null;return{taskWorkstream:ke,taskInitiative:je}},[H,Z]),Pe=a.useMemo(()=>new Set(t.map(G=>G.id)),[t]),se=a.useCallback(G=>G.startsWith(Gd)?G.slice(Gd.length):G,[]),$e=a.useCallback(G=>Pe.has(se(G)),[Pe,se]),et=a.useMemo(()=>new Set(R||[]),[R]),tt=a.useRef(null),Ct=a.useCallback(G=>{const ke=G?.data?.current||{},je=String(G?.id||"");let Te=String(ke.taskId||""),Se=String(ke.workstreamId||"");!Te&&je&&$e(je)&&(Te=se(je)),!Se&&je.startsWith("planning-workstream:")&&(Se=je.slice(20));let Qe=String(ke.type||"");return Qe||(Te?Qe="task-card":Se&&(Qe="planning-workstream")),{activeId:je,type:Qe,taskId:Te,workstreamId:Se}},[se,$e]),i=Im(tp(Dm,{activationConstraint:{distance:5}}),tp(Ph,{coordinateGetter:Dh})),De=G=>{const ke=G.status||"task";return ke==="done"||ke==="cancelled"?"completed":ke},Je=a.useMemo(()=>{const G=new Date,ke=G.getFullYear(),je=String(G.getMonth()+1).padStart(2,"0"),Te=String(G.getDate()).padStart(2,"0");return`${ke}-${je}-${Te}`},[]),Ie=a.useMemo(()=>{const G=Te=>{const Se=Te.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!Se)return null;const Qe=new Date(Date.UTC(Number(Se[1]),Number(Se[2])-1,Number(Se[3]))),pt=Qe.getUTCDay()||7;Qe.setUTCDate(Qe.getUTCDate()+4-pt);const Mt=new Date(Date.UTC(Qe.getUTCFullYear(),0,1)),Rt=Math.ceil(((Qe.getTime()-Mt.getTime())/864e5+1)/7);return`${Qe.getUTCFullYear()}-W${String(Rt).padStart(2,"0")}`};return{dates:{...(()=>{const Te=new Date,Se=Te.getDay(),Qe=Se===0?-6:1-Se,pt=new Date(Te);pt.setDate(Te.getDate()+Qe);const Mt=Ut=>{const nt=Ut.getFullYear(),Tt=String(Ut.getMonth()+1).padStart(2,"0"),kt=String(Ut.getDate()).padStart(2,"0");return`${nt}-${Tt}-${kt}`},Rt={mon:"",tue:"",wed:"",thu:"",fri:"",sat:"",sun:""};return["mon","tue","wed","thu","fri","sat","sun"].forEach((Ut,nt)=>{const Tt=new Date(pt);Tt.setDate(pt.getDate()+nt),Rt[Ut]=Mt(Tt)}),Rt})(),...Ce||{}},parseToIsoWeekKey:G}},[Ce]),ht=G=>{const ke=G.scheduledDate||null;return ke?new Map([[Ie.dates.mon,"mon"],[Ie.dates.tue,"tue"],[Ie.dates.wed,"wed"],[Ie.dates.thu,"thu"],[Ie.dates.fri,"fri"],[Ie.dates.sat,"sat"],[Ie.dates.sun,"sun"]]).get(ke)||"__offweek":"backlog"},yt=a.useMemo(()=>{const G=new Map;for(const ke of n)G.set(String(ke.value),ke),G.has(ke.label)||G.set(ke.label,ke);return G},[n]),$t=a.useMemo(()=>{const G={};return n.forEach(je=>{G[String(je.value)]=0}),(ee.length>0?ee:t).forEach(je=>{let Te="";if(s==="status")Te=De(je);else if(s==="schedule")Te=ht(je);else{const Qe=je[s];Te=String(Qe??"")}const Se=yt.get(Te);if(Se&&G[String(Se.value)]++,s==="schedule"){const Qe=je.status==="done"||je.status==="cancelled";je.scheduledDate&&!Qe&&je.scheduledDate<Je&&yt.has("expired")&&(G.expired=(G.expired||0)+1)}}),G},[ee,t,n,s,yt,Je]),Ht=a.useMemo(()=>{const G={};if(n.forEach(ke=>{G[String(ke.value)]=[]}),t.forEach(ke=>{let je="";if(s==="status")je=De(ke);else if(s==="schedule")je=ht(ke);else{const Se=ke[s];je=String(Se??"")}const Te=yt.get(je);if(Te){if(s==="schedule"&&String(Te.value)==="backlog"&&!et.has(ke.id))return;G[String(Te.value)].push(ke)}if(s==="schedule"){const Se=ke.status==="done"||ke.status==="cancelled";ke.scheduledDate&&!Se&&ke.scheduledDate<Je&&G.expired&&G.expired.push(ke)}}),s==="schedule"){const ke=(Te,Se)=>{const Qe=typeof Te.orderInDay=="number"?Te.orderInDay:Number.MAX_SAFE_INTEGER,pt=typeof Se.orderInDay=="number"?Se.orderInDay:Number.MAX_SAFE_INTEGER;return Qe!==pt?Qe-pt:String(Te.createdAt||"").localeCompare(String(Se.createdAt||""))},je=(Te,Se)=>eu(Te,Se,Oe,v,d);Object.keys(G).forEach(Te=>{if(Te==="backlog"||Te==="expired"){G[Te].sort(je);return}G[Te].sort(ke)})}return G},[t,ee,n,s,yt,et,Je,Oe,v]),bn=P?se(P):null,nn=bn?t.find(G=>G.id===bn):null,Kt=a.useRef(null),_n=a.useRef(null),qt=a.useRef({pointerId:null,startX:0,startY:0,startScrollLeft:0,didPan:!1}),Hn=a.useRef(-1),on=(G,ke)=>s==="category"?!V.includes(String(G)):s==="type"?!te.includes(String(G)):s==="priority"?!xe.some(je=>Number(je)===Number(G)):s==="status"?String(G)==="completed"?!de.includes("done")&&!de.includes("cancelled"):!de.includes(String(G)):s==="assignee"?!O.includes(String(G)):!1,Nn=a.useMemo(()=>{let Te=0;return n.forEach((Se,Qe)=>{const pt=Ht[String(Se.value)]||[],Mt=on(Se.value,Se.label),Rt=s!=="schedule"&&Re==="hide"&&pt.length===0;if(Mt||Rt)return;const At=Re==="collapse"&&pt.length===0;Te+=At?72:320,Te+=4}),Te},[n,Ht,Re,s,V,te,xe,de]),Nt=a.useCallback(G=>{if(!ve)return;const ke=Math.max(0,Math.round(G));ke!==Hn.current&&(Hn.current=ke,ve(ke))},[ve]);a.useEffect(()=>{const G=Kt.current,ke=_n.current;if(!G||!ke)return;let je=!1,Te=!1;const Se=()=>{!G||Te||(je=!0,G.scrollLeft=ke.scrollLeft,Nt(ke.scrollLeft),setTimeout(()=>je=!1,0))},Qe=()=>{!ke||je||(Te=!0,ke.scrollLeft=G.scrollLeft,Nt(G.scrollLeft),setTimeout(()=>Te=!1,0))};return ke.addEventListener("scroll",Se),G.addEventListener("scroll",Qe),()=>{ke.removeEventListener("scroll",Se),G.removeEventListener("scroll",Qe)}},[Nt]);const Yt=a.useRef(!1);a.useEffect(()=>{if(Yt.current)return;if(typeof Fe!="number"||!Number.isFinite(Fe)){Yt.current=!0;return}const G=Kt.current,ke=_n.current;if(!G||!ke)return;const je=Math.max(0,G.scrollWidth-G.clientWidth),Te=Math.min(Math.max(0,Fe),je);G.scrollLeft=Te,ke.scrollLeft=Te,Yt.current=!0},[Fe,Nn]),a.useEffect(()=>{const G=()=>{const ke=Kt.current;if(!ke){ae(!1);return}ae(ke.scrollWidth>ke.clientWidth+4)};return G(),window.addEventListener("resize",G),()=>{window.removeEventListener("resize",G)}},[Nn,n.length,Ht]),a.useEffect(()=>{const G=je=>{const Te=qt.current;if(Te.pointerId===null||Te.pointerId!==je.pointerId)return;const Se=je.clientX-Te.startX,Qe=je.clientY-Te.startY;if(!Te.didPan){if(Math.abs(Se)<7||Math.abs(Se)<Math.abs(Qe))return;Te.didPan=!0,F(!0),document.body.style.userSelect="none"}const pt=Te.startScrollLeft-Se;Kt.current&&(Kt.current.scrollLeft=pt),_n.current&&(_n.current.scrollLeft=pt),je.preventDefault()},ke=()=>{const je=qt.current;je.pointerId!==null&&(je.pointerId=null,je.didPan=!1,Ae&&(F(!1),document.body.style.userSelect=""))};return window.addEventListener("pointermove",G),window.addEventListener("pointerup",ke),window.addEventListener("pointercancel",ke),()=>{window.removeEventListener("pointermove",G),window.removeEventListener("pointerup",ke),window.removeEventListener("pointercancel",ke),document.body.style.userSelect=""}},[Ae]);const Bn=G=>{!ne||G.target?.closest('button, a, input, select, textarea, [role="button"], [data-no-header-pan="true"]')||(qt.current.pointerId=G.pointerId,qt.current.startX=G.clientX,qt.current.startY=G.clientY,qt.current.startScrollLeft=Kt.current?.scrollLeft||0,qt.current.didPan=!1)},an=G=>{B(G.active.id)},me=G=>{const ke=Ct(G.active),je=String(G.over?.data?.current?.type||"");ke.type==="task-card"&&je.startsWith("planning-")?tt.current=`${String(G.over?.id||"")}:${je}`:tt.current&&(tt.current=null)},Ee=G=>{const{active:ke,over:je}=G;tt.current=null,B(null);const Te=Ct(ke),Se=Te.type,Qe=String(je?.data?.current?.type||""),pt=Te.taskId,Mt=Te.workstreamId,Rt=String(je?.data?.current?.workstreamId||""),At=String(je?.data?.current?.initiativeId||"");if(Se==="task-card"){if(Qe==="planning-workstream-target"&&pt&&Rt){C?.(pt,Rt);return}if(Qe==="planning-task-unlink"&&pt){C?.(pt,null);return}}if(Se==="planning-workstream"){if(Qe==="planning-initiative-target"&&Mt&&At){oe?.(Mt,At);return}if(Qe==="planning-workstream-unlink"&&Mt){oe?.(Mt,null);return}return}const Ut=String(ke.id),nt=je?String(je.id):null,Tt=se(Ut);nt&&se(nt);const kt=t.find(Y=>Y.id===Tt);if(!kt||!nt)return;const Dn=Zt(Ut),ua=String(ke?.data?.current?.sortable?.containerId||"")||Dn,Ze=String(je?.data?.current?.sortable?.containerId||"")||Zt(nt);if(!Ze)return;const Wn=yt.get(Ze)||n.find(Y=>String(Y.value)===Ze||Y.label===Ze);if(Wn){if(s==="schedule"){const Ne=String(Wn.value),st=["mon","tue","wed","thu","fri","sat","sun"],Le=Ne==="backlog"||Ne==="expired"||st.includes(Ne),Xe=gt=>{let Dt=gt.length;const Pt=nt&&$e(nt)?se(nt):null;if(!Pt||!Pe.has(Pt))return Dt;const Bt=Pt,Ye=gt.findIndex(yn=>yn.id===Bt);if(Ye<0)return Dt;const Ke=je?.rect,Tn=ke.rect.current.translated||ke.rect.current.initial,sn=!!(Ke&&Tn&&Tn.top+Tn.height/2>Ke.top+Ke.height/2);return Ye+(sn?1:0)},xn=(gt,Dt,Pt)=>{if(!gt||gt===Dt)return;(Ht[String(gt)]||[]).filter(Ye=>Ye.id!==Tt).forEach((Ye,Ke)=>{Pt.set(Ye.id,{...Pt.get(Ye.id)||{},orderInDay:Ke})})};if(Ne==="expired"){if(ua!=="expired")return;const gt=new Map,Dt=(Ht.expired||[]).filter(Ye=>Ye.id!==Tt),Pt=Xe(Dt),Bt=[...Dt];Bt.splice(Pt,0,kt),Bt.forEach((Ye,Ke)=>{gt.set(Ye.id,{...gt.get(Ye.id)||{},orderInDay:Ke})}),gt.forEach((Ye,Ke)=>w(Ke,Ye));return}if(Ne==="backlog"){const gt=new Map,Dt=(Ht.backlog||[]).filter(Ye=>Ye.id!==Tt),Pt=Xe(Dt),Bt=[...Dt];Bt.splice(Pt,0,kt),Bt.forEach((Ye,Ke)=>{Ye.id===Tt?kt.scheduledDate?gt.set(Ye.id,{...gt.get(Ye.id)||{},scheduledDate:null,scheduledWeekKey:null,orderInDay:Ke}):gt.set(Ye.id,{...gt.get(Ye.id)||{},orderInDay:Ke}):gt.set(Ye.id,{...gt.get(Ye.id)||{},orderInDay:Ke})}),xn(ua,Ne,gt),gt.forEach((Ye,Ke)=>w(Ke,Ye));return}if(!Le||!st.includes(Ne))return;const ft=Ie.dates[Ne];if(!ft)return;if(!(kt.status==="done"||kt.status==="cancelled")&&ft<Je){window.alert("Only completed work can be scheduled in the past.");return}const Vn=Ie.parseToIsoWeekKey(ft),pa=new Map,An=(Ht[Ne]||[]).filter(gt=>gt.id!==Tt),va=Xe(An),ln=[...An];ln.splice(va,0,kt),ln.forEach((gt,Dt)=>{gt.id===Tt?pa.set(gt.id,{...pa.get(gt.id)||{},scheduledDate:ft,scheduledWeekKey:Vn,orderInDay:Dt}):pa.set(gt.id,{...pa.get(gt.id)||{},orderInDay:Dt})}),xn(ua,Ne,pa),pa.forEach((gt,Dt)=>w(Dt,gt)),Ve?.(ft);return}let Y=Wn.value;if(s==="status"){const Ne=De(kt),st=String(Y);if(Ne!==st){const Le={status:st};st==="task"||st==="on-hold"?(Le.inProgress=!1,Le.readyForReview=!1,Le.completed=!1,Le.cancelled=!1):st==="in-progress"?(Le.inProgress=!0,Le.readyForReview=!1,Le.completed=!1,Le.cancelled=!1):st==="review"?(Le.inProgress=!1,Le.readyForReview=!0,Le.completed=!1,Le.cancelled=!1):st==="done"||st==="completed"?(Le.status="done",Le.inProgress=!1,Le.readyForReview=!1,Le.completed=!0,Le.cancelled=!1,Le.completedAt=new Date().toISOString()):st==="cancelled"&&(Le.status="cancelled"),w(kt.id,Le)}return}(s==="priority"||s==="complexity")&&(Y=Number(Y));const ze=kt[s];if(String(ze??"")!==String(Y??"")){const Ne={[s]:Y};w(kt.id,Ne)}}},Zt=G=>{if(yt.has(G)){const Te=yt.get(G);return Te?String(Te.value):G}if(s==="schedule"&&G.startsWith(Gd))return"expired";const ke=se(G),je=t.find(Te=>Te.id===ke);if(je){let Te="";s==="status"?Te=De(je):s==="schedule"?Te=ht(je):Te=String(je[s]??"");const Se=yt.get(Te);return Se?String(Se.value):null}return null},Lt={sideEffects:Eh({styles:{active:{opacity:"0"}}})},Rn=G=>{try{const ke=Rh(G);if(ke.length>0){const je=ke.find(Rt=>String(Rt.id).startsWith("planning-"));if(je)return[je];const Te=G.pointerCoordinates;if(!Te)return[ke[0]];const Se=ke.filter(Rt=>{const At=String(Rt.id);return $e(At)&&At!==P});if(Se.length===0){const At=ke.filter(Tt=>{const kt=String(Tt.id);return!$e(kt)}).find(Tt=>!!Zt(String(Tt.id)))||null,Ut=At?Zt(String(At.id)):null,nt=(G.droppableContainers||[]).filter(Tt=>{const kt=String(Tt.id);return!$e(kt)||kt===P?!1:Ut?Zt(kt)===Ut:!0});if(nt.length>0){const Tt=Bp({...G,droppableContainers:nt});if(Tt.length>0)return[Tt[0]]}return At?[At]:[ke[0]]}const Qe=Se;let pt=Qe[0],Mt=Number.POSITIVE_INFINITY;for(const Rt of Qe){const At=G.droppableRects?.get(Rt.id);if(!At)continue;const Ut=At.left+At.width/2,nt=At.top+At.height/2,Tt=Te.x-Ut,kt=Te.y-nt,Dn=Tt*Tt+kt*kt;Dn<Mt&&(Mt=Dn,pt=Rt)}return[pt]}return Bp(G)}catch(ke){return console.error("[TaskKanban] collision detection error",ke),[]}},xt={searchQuery:r,copiedId:o,taxonomies:d,types:l,priorities:p,approaches:g,assigneeOptions:_,onCopyId:k,onToggleInProgress:b,onToggleReview:L,onToggleComplete:S,onToggleCancel:$,onSetStatus:J,onArchiveTask:U,onUnarchive:X,onDelete:q,onOpenTaskById:y,categories:z,readOnlyMode:be,changedTaskIdSet:ie,resolveTaskHierarchy:ue,groupBy:s,showStatusLabel:D};return e.jsxs(jm,{sensors:i,collisionDetection:Rn,onDragStart:an,onDragOver:me,onDragEnd:Ee,onDragCancel:G=>{tt.current=null,B(null)},children:[M,e.jsxs("div",{className:u.kanbanWrapper,children:[e.jsx("div",{ref:_n,className:`${u.kanbanTopScroll} tf-scrollbar`,children:e.jsx("div",{className:u.kanbanTopScrollSpacer,style:{width:`${Nn}px`}})}),e.jsx("div",{className:u.kanbanContainer,ref:Kt,children:n.map(G=>{const ke=Ht[String(G.value)]||[],je=on(G.value,G.label),Te=s!=="schedule"&&Re==="hide"&&ke.length===0,Se=s==="schedule",Qe=Se&&n.some(kt=>String(kt.value)==="backlog"),pt=Se&&String(G.value)==="backlog",Mt=Se&&String(G.value)==="expired",Rt=Ht.backlog||[],Ut=Re==="collapse"&&Rt.length===0?72:320,nt=pt?0:Mt?Qe?Ut+4:0:void 0,Tt=pt?6:Mt?5:void 0;return je||Te?null:e.jsx(_D,{id:String(G.value),title:G.label,color:G.color,icon:G.icon,tasks:ke,activeId:P,activeTaskId:bn,totalCount:$t[String(G.value)],onAddTask:()=>W?.(s,G.value),onTaskClick:A,commonCardProps:xt,collapseEmpty:Re==="collapse",compressed:re,onHeaderPointerDown:Bn,isHeaderPanning:Ae,headerPanEnabled:ne,stickyLeft:nt,stickyZIndex:Tt,isPast:!!G.isPast,isSelected:!!G.isSelected,isWeekend:!!G.isWeekend,disableSorting:!1,scheduleDate:s==="schedule"?Ie.dates[String(G.value)]:void 0,onScheduleDaySelected:Ve},String(G.value))})})]}),Ci.createPortal(e.jsx(Nh,{dropAnimation:Lt,children:nn?(()=>{const{taskWorkstream:G,taskInitiative:ke}=ue(nn);return e.jsx(Wl,{task:nn,taskWorkstream:G,taskInitiative:ke,isOverlay:!0,...xt,isArchived:nn.isArchived,categories:z,compressed:re,isRecentlyChanged:ie.has(nn.id)})})():null}),document.body)]})}function _D({id:t,title:n,color:s,icon:r,tasks:o,activeId:d=null,activeTaskId:l=null,totalCount:p,onAddTask:g,onTaskClick:_,commonCardProps:w,collapseEmpty:A,compressed:y,onHeaderPointerDown:k,isHeaderPanning:b=!1,headerPanEnabled:L=!1,stickyLeft:S,stickyZIndex:$,isPast:J=!1,isSelected:U=!1,isWeekend:X=!1,disableSorting:q=!1,scheduleDate:ee,onScheduleDaySelected:W}){const{setNodeRef:Re}=Fl({id:t,data:{type:"Column"}}),V=A&&o.length===0,te=l?o.filter(z=>z.id!==l):o,xe=typeof S=="number",de=a.useRef(null),O=z=>t==="expired"?`${Gd}${z}`:z,R=z=>{if(!ee||!W)return;const re=z.target;re&&(re.closest('[data-task-card="true"]')||re.closest(`.${u.kanbanCardWrapper}`)||W(ee))};return e.jsxs("div",{ref:Re,className:`${u.kanbanColumn} ${V?u.kanbanColumnCollapsed:""} ${xe?u.kanbanColumnSticky:""} ${J?u.kanbanColumnPast:""} ${U?u.kanbanColumnSelectedDay:""} ${X?u.kanbanColumnWeekend:""}`,style:xe?{left:`${S}px`,zIndex:$??4}:void 0,onClick:R,children:[e.jsxs("div",{className:`${u.kanbanHeader} ${L?u.kanbanHeaderDraggable:""} ${b?u.kanbanHeaderPanning:""}`,style:{borderTopColor:Ia(s)||"var(--color-purple)"},onPointerDown:k,children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",minWidth:0,overflow:"hidden"},children:[(()=>{const z=r&&Dc[r]?Dc[r]:Ai,re=Ia(s)||"var(--color-purple)";return e.jsx(z,{size:16,style:{color:re}})})(),!V&&e.jsx("span",{style:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:n})]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"8px",flexShrink:0},children:[(!V||p>0)&&e.jsx("span",{className:u.kanbanCount,children:V?p:`${o.length} / ${p}`}),!w.readOnlyMode&&e.jsx("button",{className:"tf-control-icon tf-control-icon-compact",onClick:z=>{z.stopPropagation(),g()},title:`Add task to ${n}`,"aria-label":`Add task to ${n}`,"data-no-header-pan":"true",children:e.jsx(tr,{size:14})})]})]}),e.jsx("div",{className:u.kanbanDroppable,children:e.jsx("div",{className:`${u.kanbanDroppableScroll} ${u.appScrollbar} tf-scrollbar`,ref:de,children:q?te.map(z=>e.jsx("div",{className:u.kanbanCardWrapper,children:(()=>{const{taskWorkstream:re,taskInitiative:be}=w.resolveTaskHierarchy?.(z)||{};return e.jsx(Wl,{task:z,taskWorkstream:re,taskInitiative:be,onClick:_,...w,isArchived:z.isArchived,readOnlyMode:w.readOnlyMode||null,compressed:y,isRecentlyChanged:!1})})()},z.id)):e.jsx(Nm,{id:t,items:te.map(z=>O(z.id)),strategy:Rm,children:te.map(z=>e.jsx(CD,{sortableId:O(z.id),task:z,onClick:_,commonCardProps:w,compressed:y,isRecentlyChanged:w.changedTaskIdSet?.has(z.id)},O(z.id)))})})})]})}function CD({sortableId:t,task:n,onClick:s,commonCardProps:r,compressed:o,isRecentlyChanged:d=!1}){const l=!!r?.readOnlyMode,{attributes:p,listeners:g,setNodeRef:_,transform:w,transition:A,isDragging:y}=Pm({id:t,disabled:l,data:{type:"task-card",taskId:n.id}}),k={transform:pp.Transform.toString(w),transition:A,opacity:y?0:1,pointerEvents:y?"none":"auto"},b=r?.groupBy==="schedule",L=!b&&d;return e.jsx("div",{ref:_,style:k,...l?{}:p,...l?{}:g,className:`${u.kanbanCardWrapper} ${L?u.kanbanCardWrapperRaised:""}`,children:(()=>{const{taskWorkstream:S,taskInitiative:$}=r.resolveTaskHierarchy?.(n)||{};return e.jsx(Wl,{task:n,taskWorkstream:S,taskInitiative:$,onClick:s,...r,isArchived:n.isArchived,readOnlyMode:r?.readOnlyMode||null,compressed:o,isRecentlyChanged:b?!1:d})})()})}function xD(t,n,s){const r=String(n);if(t==="category"){const o=s.categories.find(d=>String(d.value)===r||d.label===r);return o?{category:o.label}:{}}if(t==="type")return{type:r};if(t==="priority")return Number.isFinite(Number(n))?{priority:Number(n)}:{};if(t==="complexity")return Number.isFinite(Number(n))?{complexity:Number(n)}:{};if(t==="approach"){const o=s.approaches.find(d=>String(d.value)===r||d.label===r);return o?{approach:o.value,taxonomyApproach:o.value}:{}}return t==="assignee"?r.trim().length>0?{assignee:r}:{}:t==="status"?r==="completed"?{status:"done"}:r==="task"||r==="on-hold"||r==="in-progress"||r==="review"||r==="done"||r==="cancelled"?{status:r}:{}:t==="schedule"?r==="backlog"||r==="expired"?{}:{scheduledDate:r}:{}}function AD(t){const n=t.runtimeMode==="local"&&t.isAuthenticated;return n?{actionable:n,status:t.workspaceSyncStatus,syncEnabledLabel:t.workspaceCloudSyncEnabled?"yes":"no",summary:t.workspaceSyncSummary,recommendedAction:t.workspaceSyncRecommendedAction,lastError:t.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 lp="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMzY2LjY3Nzg2IgogICBoZWlnaHQ9IjMzMS4zMDkzMyIKICAgdmlld0JveD0iMCAwIDk3LjAxNjg1IDg3LjY1ODkyMyIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMSIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcwogICAgIGlkPSJkZWZzMSIgLz48ZwogICAgIGlkPSJsYXllcjEiCiAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMwLjk2ODgxLC04NzIuMDY2NjgpIj48ZwogICAgICAgaWQ9ImcxLTctMS02LTItMS05IgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoNC45ODE1NDc5LDAsMCw0Ljk4NTU4MjIsLTYzNS4zODE5NiwxMzcuOTM1MTIpIj48cGF0aAogICAgICAgICBzdHlsZT0iZm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTkuNDgxOXB4O2xpbmUtaGVpZ2h0OjIuNTtmb250LWZhbWlseTonUnVzc28gT25lJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidSdXNzbyBPbmUgTWVkaXVtIEl0YWxpYyc7dGV4dC1hbGlnbjpjZW50ZXI7bGV0dGVyLXNwYWNpbmc6MHB4O3RleHQtYW5jaG9yOm1pZGRsZTtmaWxsOiNmZmZmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjEzNjA0O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZCIKICAgICAgICAgZD0ibSAxNDkuNDQwNjYsMTYxLjE5NTA1IGggLTMuNTA2NzQgdiAtMTAuOTA5ODYgaCAtNC4wOTEyIHYgLTIuNzI3NDcgaCAxMS42ODkxNCB2IDIuNzI3NDcgaCAtNC4wOTEyIHoiCiAgICAgICAgIGlkPSJ0ZXh0MS00LTMtMy0xLTAtMyIKICAgICAgICAgdHJhbnNmb3JtPSJza2V3WCgtMTUpIgogICAgICAgICBhcmlhLWxhYmVsPSJUIiAvPjxwYXRoCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOml0YWxpYztmb250LXdlaWdodDpib2xkO2ZvbnQtc2l6ZToxOS40ODE5cHg7bGluZS1oZWlnaHQ6Mi41O2ZvbnQtZmFtaWx5OidSdXNzbyBPbmUnOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246J1J1c3NvIE9uZSBNZWRpdW0gSXRhbGljJzt0ZXh0LWFsaWduOmVuZDtsZXR0ZXItc3BhY2luZzowcHg7dGV4dC1hbmNob3I6ZW5kO2ZpbGw6I2ZmOGEwMDtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6I2ZmOGEwMDtzdHJva2Utd2lkdGg6MC42MTM2MDQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIgogICAgICAgICBkPSJtIDE1My41Mzg4OCwxNjQuNTI2NiBoIC0zLjUwNjc0IHYgLTEzLjYzNzMzIGggMTAuODEyNDUgdiAyLjcyNzQ2IGggLTcuMzA1NzEgdiAzLjIxNDUyIGggNS43NDcxNiB2IDIuNzI3NDYgaCAtNS43NDcxNiB6IgogICAgICAgICBpZD0idGV4dDEtOS04LTQtMy03LTItNyIKICAgICAgICAgdHJhbnNmb3JtPSJza2V3WCgtMTUpIgogICAgICAgICBhcmlhLWxhYmVsPSJGIiAvPjwvZz48L2c+PC9zdmc+Cg==",Pf="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB3aWR0aD0iMzY2LjY3Nzg5IgogICBoZWlnaHQ9IjMzMS4zMDkzMyIKICAgdmlld0JveD0iMCAwIDk3LjAxNjg1OCA4Ny42NTg5MjMiCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzEiCiAgIHhtbDpzcGFjZT0icHJlc2VydmUiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnMKICAgICBpZD0iZGVmczEiIC8+PGcKICAgICBpZD0ibGF5ZXIxIgogICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4Ni4xOTU2MywtNzgwLjY1NTczKSI+PGcKICAgICAgIGlkPSJnMS03LTEtNi0yLTEiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCg0Ljk4MTU0NzksMCwwLDQuOTg1NTgyMiwtNjkwLjYwODc4LDQ2LjUyNDE0OCkiPjxwYXRoCiAgICAgICAgIHN0eWxlPSJmb250LXN0eWxlOml0YWxpYztmb250LXdlaWdodDpib2xkO2ZvbnQtc2l6ZToxOS40ODE5cHg7bGluZS1oZWlnaHQ6Mi41O2ZvbnQtZmFtaWx5OidSdXNzbyBPbmUnOy1pbmtzY2FwZS1mb250LXNwZWNpZmljYXRpb246J1J1c3NvIE9uZSBNZWRpdW0gSXRhbGljJzt0ZXh0LWFsaWduOmNlbnRlcjtsZXR0ZXItc3BhY2luZzowcHg7dGV4dC1hbmNob3I6bWlkZGxlO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjYxMzYwNDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiCiAgICAgICAgIGQ9Im0gMTQ5LjQ0MDY2LDE2MS4xOTUwNSBoIC0zLjUwNjc0IHYgLTEwLjkwOTg2IGggLTQuMDkxMiB2IC0yLjcyNzQ3IGggMTEuNjg5MTQgdiAyLjcyNzQ3IGggLTQuMDkxMiB6IgogICAgICAgICBpZD0idGV4dDEtNC0zLTMtMS0wIgogICAgICAgICB0cmFuc2Zvcm09InNrZXdYKC0xNSkiCiAgICAgICAgIGFyaWEtbGFiZWw9IlQiIC8+PHBhdGgKICAgICAgICAgc3R5bGU9ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjE5LjQ4MTlweDtsaW5lLWhlaWdodDoyLjU7Zm9udC1mYW1pbHk6J1J1c3NvIE9uZSc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonUnVzc28gT25lIE1lZGl1bSBJdGFsaWMnO3RleHQtYWxpZ246ZW5kO2xldHRlci1zcGFjaW5nOjBweDt0ZXh0LWFuY2hvcjplbmQ7ZmlsbDojZmY4YTAwO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmY4YTAwO3N0cm9rZS13aWR0aDowLjYxMzYwNDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiCiAgICAgICAgIGQ9Im0gMTUzLjUzODg4LDE2NC41MjY2IGggLTMuNTA2NzQgdiAtMTMuNjM3MzMgaCAxMC44MTI0NSB2IDIuNzI3NDYgaCAtNy4zMDU3MSB2IDMuMjE0NTIgaCA1Ljc0NzE2IHYgMi43Mjc0NiBoIC01Ljc0NzE2IHoiCiAgICAgICAgIGlkPSJ0ZXh0MS05LTgtNC0zLTctMiIKICAgICAgICAgdHJhbnNmb3JtPSJza2V3WCgtMTUpIgogICAgICAgICBhcmlhLWxhYmVsPSJGIiAvPjwvZz48L2c+PC9zdmc+Cg==",pm="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIxMDAwIiBoZWlnaHQ9IjEwMDAiPjxzdHlsZT4KICAgICNsaWdodC1pY29uIHsKICAgICAgZGlzcGxheTogaW5saW5lOwogICAgfQogICAgI2RhcmstaWNvbiB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAjbGlnaHQtaWNvbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgICAjZGFyay1pY29uIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICAgIH0KICAgIH0KICA8L3N0eWxlPjxnIGlkPSJsaWdodC1pY29uIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEwMDAiIGhlaWdodD0iMTAwMCI+PGc+PGcgdHJhbnNmb3JtPSJtYXRyaXgoMi43MjcxODkyNTA0ODkwMzI3LDAsMCwyLjcyNzE4OTI1MDQ4OTAzMjcsMCw0OC4yMjgzNzgzMTg2MzgxOSkiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIHdpZHRoPSIzNjYuNjc3ODkiIGhlaWdodD0iMzMxLjMwOTMzIiB2aWV3Qm94PSIwIDAgOTcuMDE2ODU4IDg3LjY1ODkyMyIgaWQ9InN2ZzEiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzIGlkPSJkZWZzMSI+PC9kZWZzPjxnIGlkPSJsYXllcjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4Ni4xOTU2MywtNzgwLjY1NTczKSI+PGcgaWQ9ImcxLTctMS02LTItMSIgdHJhbnNmb3JtPSJtYXRyaXgoNC45ODE1NDc5LDAsMCw0Ljk4NTU4MjIsLTY5MC42MDg3OCw0Ni41MjQxNDgpIj48cGF0aCBzdHlsZT0iZm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTkuNDgxOXB4O2xpbmUtaGVpZ2h0OjIuNTtmb250LWZhbWlseTonUnVzc28gT25lJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidSdXNzbyBPbmUgTWVkaXVtIEl0YWxpYyc7dGV4dC1hbGlnbjpjZW50ZXI7bGV0dGVyLXNwYWNpbmc6MHB4O3RleHQtYW5jaG9yOm1pZGRsZTtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC42MTM2MDQ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIiBkPSJtIDE0OS40NDA2NiwxNjEuMTk1MDUgaCAtMy41MDY3NCB2IC0xMC45MDk4NiBoIC00LjA5MTIgdiAtMi43Mjc0NyBoIDExLjY4OTE0IHYgMi43Mjc0NyBoIC00LjA5MTIgeiIgaWQ9InRleHQxLTQtMy0zLTEtMCIgdHJhbnNmb3JtPSJza2V3WCgtMTUpIiBhcmlhLWxhYmVsPSJUIj48L3BhdGg+PHBhdGggc3R5bGU9ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjE5LjQ4MTlweDtsaW5lLWhlaWdodDoyLjU7Zm9udC1mYW1pbHk6J1J1c3NvIE9uZSc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonUnVzc28gT25lIE1lZGl1bSBJdGFsaWMnO3RleHQtYWxpZ246ZW5kO2xldHRlci1zcGFjaW5nOjBweDt0ZXh0LWFuY2hvcjplbmQ7ZmlsbDojZmY4YTAwO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmY4YTAwO3N0cm9rZS13aWR0aDowLjYxMzYwNDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiIGQ9Im0gMTUzLjUzODg4LDE2NC41MjY2IGggLTMuNTA2NzQgdiAtMTMuNjM3MzMgaCAxMC44MTI0NSB2IDIuNzI3NDYgaCAtNy4zMDU3MSB2IDMuMjE0NTIgaCA1Ljc0NzE2IHYgMi43Mjc0NiBoIC01Ljc0NzE2IHoiIGlkPSJ0ZXh0MS05LTgtNC0zLTctMiIgdHJhbnNmb3JtPSJza2V3WCgtMTUpIiBhcmlhLWxhYmVsPSJGIj48L3BhdGg+PC9nPjwvZz48L3N2Zz48L2c+PC9nPjwvc3ZnPjwvZz48ZyBpZD0iZGFyay1pY29uIj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lkdGg9IjEwMDAiIGhlaWdodD0iMTAwMCI+PGc+PGcgdHJhbnNmb3JtPSJtYXRyaXgoMi43MjcxODk0NzM2MTU4ODcsMCwwLDIuNzI3MTg5NDczNjE1ODg3LDAsNDguMjI4MzQxMzU2NjMzOTA1KSI+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjM2Ni42Nzc4NiIgaGVpZ2h0PSIzMzEuMzA5MzMiIHZpZXdCb3g9IjAgMCA5Ny4wMTY4NSA4Ny42NTg5MjMiIGlkPSJzdmcxIiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcyBpZD0iZGVmczEiPjwvZGVmcz48ZyBpZD0ibGF5ZXIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMzAuOTY4ODEsLTg3Mi4wNjY2OCkiPjxnIGlkPSJnMS03LTEtNi0yLTEtOSIgdHJhbnNmb3JtPSJtYXRyaXgoNC45ODE1NDc5LDAsMCw0Ljk4NTU4MjIsLTYzNS4zODE5NiwxMzcuOTM1MTIpIj48cGF0aCBzdHlsZT0iZm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTkuNDgxOXB4O2xpbmUtaGVpZ2h0OjIuNTtmb250LWZhbWlseTonUnVzc28gT25lJzstaW5rc2NhcGUtZm9udC1zcGVjaWZpY2F0aW9uOidSdXNzbyBPbmUgTWVkaXVtIEl0YWxpYyc7dGV4dC1hbGlnbjpjZW50ZXI7bGV0dGVyLXNwYWNpbmc6MHB4O3RleHQtYW5jaG9yOm1pZGRsZTtmaWxsOiNmZmZmZmY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjAuNjEzNjA0O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZCIgZD0ibSAxNDkuNDQwNjYsMTYxLjE5NTA1IGggLTMuNTA2NzQgdiAtMTAuOTA5ODYgaCAtNC4wOTEyIHYgLTIuNzI3NDcgaCAxMS42ODkxNCB2IDIuNzI3NDcgaCAtNC4wOTEyIHoiIGlkPSJ0ZXh0MS00LTMtMy0xLTAtMyIgdHJhbnNmb3JtPSJza2V3WCgtMTUpIiBhcmlhLWxhYmVsPSJUIj48L3BhdGg+PHBhdGggc3R5bGU9ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQ7Zm9udC1zaXplOjE5LjQ4MTlweDtsaW5lLWhlaWdodDoyLjU7Zm9udC1mYW1pbHk6J1J1c3NvIE9uZSc7LWlua3NjYXBlLWZvbnQtc3BlY2lmaWNhdGlvbjonUnVzc28gT25lIE1lZGl1bSBJdGFsaWMnO3RleHQtYWxpZ246ZW5kO2xldHRlci1zcGFjaW5nOjBweDt0ZXh0LWFuY2hvcjplbmQ7ZmlsbDojZmY4YTAwO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTojZmY4YTAwO3N0cm9rZS13aWR0aDowLjYxMzYwNDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQiIGQ9Im0gMTUzLjUzODg4LDE2NC41MjY2IGggLTMuNTA2NzQgdiAtMTMuNjM3MzMgaCAxMC44MTI0NSB2IDIuNzI3NDYgaCAtNy4zMDU3MSB2IDMuMjE0NTIgaCA1Ljc0NzE2IHYgMi43Mjc0NiBoIC01Ljc0NzE2IHoiIGlkPSJ0ZXh0MS05LTgtNC0zLTctMi03IiB0cmFuc2Zvcm09InNrZXdYKC0xNSkiIGFyaWEtbGFiZWw9IkYiPjwvcGF0aD48L2c+PC9nPjwvc3ZnPjwvZz48L2c+PC9zdmc+PC9nPjwvc3ZnPg==";function TD({projectName:t,currentWorkspaceId:n,brandLabel:s="TaskForce",runtimeMode:r="local",theme:o=qd,meta:d,actions:l}){const p=Fm(o)?Pf:lp;return e.jsxs("div",{className:`${u.header} ${pn.standaloneHeader}`,children:[e.jsxs("div",{className:`${u.headerTitle} ${pn.standaloneTitle}`,children:[e.jsx("img",{src:p,alt:"Taskforce Logo",className:u.brandIcon,onError:g=>{const _=g.currentTarget;_.src!==pm?_.src=pm:_.style.display="none"}}),e.jsx("span",{children:s}),r==="cloud"&&e.jsx("span",{className:u.brandCloudSuffix,children:"HQ"}),t&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:u.projectSlash,children:"/"}),e.jsx("span",{className:u.projectName,title:n?`Workspace ID: ${n}`:void 0,children:t})]}),d]}),e.jsx("div",{className:u.headerActions,style:{gap:"16px"},children:l})]})}function ID({value:t,placeholder:n,active:s=!1,onChange:r,onClear:o,clearTitle:d}){return e.jsxs("div",{className:u.searchContainer,style:{width:"240px"},children:[e.jsx(lh,{size:16,className:u.searchIcon}),e.jsx("input",{type:"text",className:`${u.searchInput} ${s?u.searchActive:""}`,placeholder:n,value:t,onChange:l=>r(l.target.value)}),t&&o&&e.jsx("button",{className:u.clearSearchBtn,onClick:o,title:d,children:e.jsx("span",{"aria-hidden":"true",children:"×"})})]})}function mm({label:t,value:n,options:s,onChange:r,trailingAction:o,width:d}){return e.jsxs("div",{className:u.groupByContainer,style:d?{width:d}:void 0,children:[e.jsx("span",{className:u.groupByLabel,children:t}),e.jsx("select",{className:`${u.select} ${u.groupBySelect}`,value:n,onChange:l=>r(l.target.value),children:s.map(l=>e.jsx("option",{value:l.value,children:l.label},String(l.value)))}),o]})}function Zu({actions:t}){return e.jsx(e.Fragment,{children:t.map(n=>e.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 fm(){return e.jsx("div",{className:u.headerDivider})}function jD({icon:t,label:n,onClick:s,disabled:r=!1}){return e.jsxs("button",{className:u.primaryUpdateBtn,onClick:s,disabled:r,children:[t," ",n]})}function xp({children:t}){return e.jsx("div",{className:u.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:t})}function ND(){return e.jsx(xp,{children:e.jsx("div",{"aria-hidden":"true",style:{minHeight:"32px",flex:1}})})}function RD({categoryFilterOptions:t,typeFilterOptions:n,priorities:s,taxonomyDisplayLabels:r,filterCategories:o,setFilterCategories:d,filterTypes:l,setFilterTypes:p,filterPriorities:g,setFilterPriorities:_,filterStatus:w,setFilterStatus:A,filterAssignees:y,setFilterAssignees:k,assigneeOptions:b,initiativeFilterOptions:L=[],selectedInitiativeId:S="",setSelectedInitiativeId:$=()=>{},workstreamFilterOptions:J=[],selectedWorkstreamId:U="",setSelectedWorkstreamId:X=()=>{},taskScope:q,setTaskScope:ee,showArchive:W,setShowArchive:Re,fetchArchive:V,onDeleteAllDeleted:te,clearFilters:xe}){return e.jsxs(e.Fragment,{children:[e.jsx(_f,{}),e.jsx(_i,{label:r?.category||we("standalone.categoryLabel"),options:t,selected:o,onChange:de=>d(de),variant:"value"}),e.jsx(_i,{label:r?.type||we("standalone.typeLabel"),options:n,selected:l,onChange:de=>p(de),variant:"value"}),e.jsx(_i,{label:r?.priority||we("standalone.priorityLabel"),options:s,selected:g,onChange:de=>_(de),variant:"value"}),e.jsx(_i,{label:we("standalone.statusLabel"),options:Yr,selected:w,onChange:de=>A(de),variant:"value"}),e.jsx(_i,{label:we("standalone.assigneeLabel"),options:b,selected:y,onChange:de=>k(de),variant:"value"}),e.jsx("div",{className:u.headerDivider,style:{height:"16px",margin:"0 8px"}}),e.jsx(im,{label:"Initiative",options:L,selected:S,onChange:$,allLabel:"All Initiatives",title:"Filter by initiative"}),e.jsx(im,{label:"Workstream",options:J,selected:U,onChange:X,allLabel:"All Workstreams",title:"Filter by workstream"}),e.jsx(xf,{scope:q,onScopeChange:de=>{ee(de),de==="archived"?(Re(!0),V()):W&&Re(!1)},className:u.groupByContainer,labelClassName:u.groupByLabel}),e.jsx("div",{style:{flex:1}}),q==="deleted"&&te&&e.jsx(Af,{onClick:te,className:`${u.bulkArchiveBtn} ${u.taskToolbarAction} ${u.bulkDeleteBtn}`,title:"Empty trash",children:"Empty Trash"}),e.jsx(Cf,{onClick:xe})]})}function DD(t){return e.jsx(xp,{children:e.jsx(RD,{...t})})}const Vd=[{value:"implementation-plan",label:"Plans"},{value:"review",label:"Reviews"},{value:"walkthrough",label:"Walkthroughs"},{value:"planning",label:"Planning"},{value:"other",label:"Other"}],Zd=[{value:"attached",label:"Attached"},{value:"unattached",label:"Unattached"}];function PD({typeFilters:t,setTypeFilters:n,attachmentFilters:s,setAttachmentFilters:r,clearFilters:o}){return e.jsxs(xp,{children:[e.jsx(_f,{}),e.jsx(_i,{label:"Attachment",options:Zd,selected:s,onChange:d=>r(d),variant:"value"}),e.jsx(_i,{label:"Type",options:Vd,selected:t,onChange:d=>n(d),variant:"value"}),e.jsx("div",{style:{flex:1}}),e.jsx(Cf,{onClick:o})]})}const ED="_drawerBody_lgt4f_1",LD="_paneShell_lgt4f_9",MD="_collapsedPaneShell_lgt4f_18",BD="_collapsedPaneHeader_lgt4f_27",WD="_collapsedPaneLabel_lgt4f_39",FD="_treePane_lgt4f_49",OD="_treePaneSplit_lgt4f_59",$D="_detailPane_lgt4f_63",UD="_paneHeader_lgt4f_73",zD="_paneHeaderLabel_lgt4f_87",HD="_paneContent_lgt4f_96",GD="_sectionTitle_lgt4f_105",VD="_sectionHeaderRow_lgt4f_113",ZD="_sectionGroup_lgt4f_120",qD="_treeList_lgt4f_145",KD="_treeChildren_lgt4f_151",YD="_treeRow_lgt4f_159",JD="_treeRowDetailOpen_lgt4f_171",XD="_treeRowDropReady_lgt4f_177",QD="_treeRowDropActive_lgt4f_181",e0="_treeRowDropMode_lgt4f_187",t0="_treeChevron_lgt4f_187",n0="_rowButton_lgt4f_188",a0="_detailsButton_lgt4f_189",s0="_treeRowDragging_lgt4f_193",r0="_rowContent_lgt4f_233",o0="_referenceBadgeButton_lgt4f_241",i0="_referenceBadgeStatic_lgt4f_245",c0="_rowTitle_lgt4f_264",l0="_rowMeta_lgt4f_274",d0="_detailsButtonActive_lgt4f_300",u0="_unlinkZone_lgt4f_307",p0="_unlinkZoneActive_lgt4f_318",m0="_emptyPanel_lgt4f_324",f0="_emptyPanelTitle_lgt4f_333",h0="_emptyPanelText_lgt4f_339",g0="_sectionNote_lgt4f_345",y0="_detailHero_lgt4f_352",k0="_detailReferenceRow_lgt4f_359",S0="_detailTitle_lgt4f_364",v0="_detailDescription_lgt4f_371",w0="_detailActionRow_lgt4f_382",b0="_metricGrid_lgt4f_389",_0="_metricCard_lgt4f_396",C0="_editorCard_lgt4f_401",x0="_editorField_lgt4f_408",A0="_editorLabel_lgt4f_414",T0="_editorHint_lgt4f_420",I0="_editorSubActions_lgt4f_425",j0="_editorActions_lgt4f_430",N0="_metricValue_lgt4f_436",R0="_metricLabel_lgt4f_443",D0="_progressTrack_lgt4f_450",P0="_progressFill_lgt4f_458",E0="_listCard_lgt4f_464",L0="_sectionDropReady_lgt4f_473",M0="_sectionDropActive_lgt4f_478",B0="_sectionDropMode_lgt4f_484",W0="_attachReferenceRow_lgt4f_488",F0="_listItem_lgt4f_499",O0="_listItemButton_lgt4f_508",$0="_listItemText_lgt4f_521",U0="_listItemTitle_lgt4f_528",z0="_listItemMeta_lgt4f_537",ge={drawerBody:ED,paneShell:LD,collapsedPaneShell:MD,collapsedPaneHeader:BD,collapsedPaneLabel:WD,treePane:FD,treePaneSplit:OD,detailPane:$D,paneHeader:UD,paneHeaderLabel:zD,paneContent:HD,sectionTitle:GD,sectionHeaderRow:VD,sectionGroup:ZD,treeList:qD,treeChildren:KD,treeRow:YD,treeRowDetailOpen:JD,treeRowDropReady:XD,treeRowDropActive:QD,treeRowDropMode:e0,treeChevron:t0,rowButton:n0,detailsButton:a0,treeRowDragging:s0,rowContent:r0,referenceBadgeButton:o0,referenceBadgeStatic:i0,rowTitle:c0,rowMeta:l0,detailsButtonActive:d0,unlinkZone:u0,unlinkZoneActive:p0,emptyPanel:m0,emptyPanelTitle:f0,emptyPanelText:h0,sectionNote:g0,detailHero:y0,detailReferenceRow:k0,detailTitle:S0,detailDescription:v0,detailActionRow:w0,metricGrid:b0,metricCard:_0,editorCard:C0,editorField:x0,editorLabel:A0,editorHint:T0,editorSubActions:I0,editorActions:j0,metricValue:N0,metricLabel:R0,progressTrack:D0,progressFill:P0,listCard:E0,sectionDropReady:L0,sectionDropActive:M0,sectionDropMode:B0,attachReferenceRow:W0,listItem:F0,listItemButton:O0,listItemText:$0,listItemTitle:U0,listItemMeta:z0},jl=332,vr=392,qu=56;function Ef(t,n,s,r,o){return(t?qu:jl)+(n?s?qu:vr:0)+(r?o?qu:vr:0)}function H0(t){return t?t.split(/[-_\s]+/g).filter(Boolean).map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join(" "):"No status"}function Lf({label:t,entityType:n,interactive:s=!0}){const[r,o]=ut.useState(!1),d=ut.useCallback(async l=>{l.stopPropagation();try{await navigator.clipboard.writeText(t),o(!0),window.setTimeout(()=>o(!1),1200)}catch{o(!1)}},[t]);return s?e.jsx(pf,{copied:r,label:t,onClick:d,title:`Copy ${n} reference`,ariaLabel:r?`Copied ${n} reference`:`Copy ${n} reference`,className:ge.referenceBadgeButton,children:t}):e.jsx("span",{className:`${u.taskIdBadge} ${ge.referenceBadgeStatic}`.trim(),children:e.jsx("span",{children:t})})}function Ku({rowId:t,rowType:n,referenceLabel:s,title:r,meta:o,active:d,detailOpen:l=!1,canExpand:p=!1,expanded:g=!1,onToggleExpand:_,onToggleScope:w,onToggleDetails:A}){const{active:y}=ru(),k=String(y?.data?.current?.type||""),b=n==="workstream"&&k==="task-card",L=n==="initiative"&&k==="planning-workstream",S=n==="workstream"?"planning-workstream-target":"planning-initiative-target",{setNodeRef:$,isOver:J}=Fl({id:`${S}:${t}`,data:n==="workstream"?{type:S,workstreamId:t}:{type:S,initiativeId:t}}),U=n==="workstream",{attributes:X,listeners:q,setNodeRef:ee,transform:W,isDragging:Re}=Lh({id:`planning-workstream:${t}`,data:{type:"planning-workstream",workstreamId:t},disabled:!U}),V=U&&W?{transform:pp.Translate.toString(W)}:void 0,te=b||L;return e.jsxs("div",{ref:$,style:V,className:`${ge.treeRow} ${l?ge.treeRowDetailOpen:""} ${te?ge.treeRowDropReady:""} ${J?ge.treeRowDropActive:""} ${Re?ge.treeRowDragging:""} ${te?ge.treeRowDropMode:""}`,children:[p?e.jsx("button",{type:"button",className:ge.treeChevron,onClick:_,title:g?"Collapse workstreams":"Expand workstreams",children:g?e.jsx(Am,{size:15}):e.jsx(dh,{size:15})}):e.jsx("span",{className:ge.treeChevron,"aria-hidden":"true",children:e.jsx(Ii,{size:14})}),e.jsxs("div",{className:ge.rowContent,children:[s?e.jsx(Lf,{label:s,entityType:n}):null,e.jsxs("button",{type:"button",ref:U?ee:void 0,className:ge.rowButton,onClick:A,...U?X:{},...U?q:{},children:[e.jsx("span",{className:ge.rowTitle,children:r}),e.jsx("span",{className:ge.rowMeta,children:o})]})]}),e.jsx("button",{type:"button",className:`${ge.detailsButton} ${d?ge.detailsButtonActive:""}`,onClick:w,title:d?"Clear board scope":"Scope board to this item",children:e.jsx(Tm,{size:14})})]})}function Yu({label:t,onExpand:n}){return e.jsx("div",{className:`${ge.paneShell} ${ge.collapsedPaneShell}`.trim(),children:e.jsxs("div",{className:ge.collapsedPaneHeader,children:[e.jsx("button",{type:"button",className:"tf-control-icon",onClick:n,title:`Expand ${t}`,children:e.jsx(Ii,{size:16})}),e.jsx("span",{className:ge.collapsedPaneLabel,children:t})]})})}function G0({targetType:t,label:n}){const{active:s}=ru(),r=String(s?.data?.current?.type||""),o=t==="task"&&r==="task-card"||t==="workstream"&&r==="planning-workstream",{setNodeRef:d,isOver:l}=Fl({id:t==="task"?"planning-task-unlink":"planning-workstream-unlink",data:{type:t==="task"?"planning-task-unlink":"planning-workstream-unlink"}});return o?e.jsx("div",{ref:d,className:`${ge.unlinkZone} ${l?ge.unlinkZoneActive:""}`,children:n}):null}function V0({initiatives:t,standaloneWorkstreams:n,activeInitiativeId:s,activeWorkstreamId:r,expandedInitiativeIds:o,detail:d,secondaryPane:l,onCreateInitiative:p,onCreateWorkstream:g,onToggleInitiative:_,onSelectInitiative:w,onSelectWorkstream:A,onOpenInitiativeDetails:y,onOpenWorkstreamDetails:k}){const{active:b}=ru(),S=String(b?.data?.current?.type||"")==="planning-workstream",{setNodeRef:$,isOver:J}=Fl({id:"planning-workstream-unlink",data:{type:"planning-workstream-unlink"}});return e.jsxs(e.Fragment,{children:[e.jsx(G0,{targetType:"task",label:"Drop here to make task standalone"}),e.jsxs("div",{className:ge.sectionGroup,children:[e.jsxs("div",{className:ge.sectionHeaderRow,children:[e.jsx("div",{className:ge.sectionTitle,children:"Initiatives"}),e.jsx("button",{type:"button",className:"tf-control-icon",title:"Create initiative","aria-label":"Create initiative",onClick:p,children:e.jsx(tr,{size:15})})]}),e.jsx("div",{className:ge.treeList,children:t.length===0?e.jsxs("div",{className:ge.emptyPanel,children:[e.jsx("div",{className:ge.emptyPanelTitle,children:"No initiatives yet"}),e.jsxs("div",{className:ge.emptyPanelText,children:["Initiatives give larger efforts a clear home without crowding the task board. Use the ",e.jsx("code",{children:"+"})," action above to create the first one."]})]}):t.map(U=>{const X=o.has(U.id),q=`${U.workstreamCount||0} workstreams • ${U.taskCount} tasks${U.isArchived?" • archived":""}`;return e.jsxs("div",{children:[e.jsx(Ku,{rowId:U.id,rowType:"initiative",referenceLabel:wr(U),title:U.title,meta:q,active:s===U.id&&!r,detailOpen:d?.type==="initiative"&&d.item.id===U.id,canExpand:U.workstreams.length>0,expanded:X,onToggleExpand:()=>_(U.id),onToggleScope:()=>w(U.id),onToggleDetails:()=>{if(d?.type==="initiative"&&d.item.id===U.id){y("");return}y(U.id)}}),X&&U.workstreams.length>0&&e.jsx("div",{className:ge.treeChildren,children:U.workstreams.map(ee=>e.jsx(Ku,{rowId:ee.id,rowType:"workstream",referenceLabel:Rc(ee),title:ee.title,meta:`${ee.taskCount} tasks • ${ee.progressPercent}% complete${ee.isArchived?" • archived":""}`,active:r===ee.id,detailOpen:d?.type==="workstream"&&d.item.id===ee.id||l?.kind==="detail"&&l.detail.item.id===ee.id,onToggleScope:()=>A(ee.id,U.id),onToggleDetails:()=>{if(l?.kind==="detail"&&l.detail.item.id===ee.id){k("");return}if(d?.type==="workstream"&&d.item.id===ee.id){k("");return}k(ee.id)}},ee.id))})]},U.id)})})]}),e.jsxs("div",{ref:$,className:`${ge.sectionGroup} ${S?ge.sectionDropReady:""} ${J?ge.sectionDropActive:""}`.trim(),children:[e.jsxs("div",{className:ge.sectionHeaderRow,children:[e.jsx("div",{className:ge.sectionTitle,children:"Workstreams"}),e.jsx("button",{type:"button",className:"tf-control-icon",title:"Create workstream","aria-label":"Create workstream",onClick:g,children:e.jsx(tr,{size:15})})]}),e.jsx("div",{className:ge.treeList,children:n.length===0?e.jsxs("div",{className:ge.emptyPanel,children:[e.jsx("div",{className:ge.emptyPanelTitle,children:"No standalone workstreams yet"}),e.jsxs("div",{className:ge.emptyPanelText,children:["Smaller projects can still use workstreams without needing initiative-level structure. Use the ",e.jsx("code",{children:"+"})," action above to add one."]})]}):n.map(U=>e.jsx(Ku,{rowId:U.id,rowType:"workstream",referenceLabel:Rc(U),title:U.title,meta:`${U.taskCount} tasks • ${U.progressPercent}% complete${U.isArchived?" • archived":""}`,active:r===U.id,detailOpen:d?.type==="workstream"&&d.item.id===U.id||l?.kind==="detail"&&l.detail.item.id===U.id,onToggleScope:()=>A(U.id,null),onToggleDetails:()=>{if(d?.type==="workstream"&&d.item.id===U.id){k("");return}k(U.id)}},U.id))})]})]})}function hm({detail:t,onOpenNestedWorkstreamDetails:n,onEdit:s,onArchive:r,onUnarchive:o,onCreateTaskInWorkstream:d,onCreateWorkstreamInInitiative:l,onOpenTaskById:p,onAttachTaskToWorkstreamByReference:g,onAttachWorkstreamToInitiativeByReference:_}){const[w,A]=ut.useState(""),{active:y}=ru(),k=String(y?.data?.current?.type||""),b=t.type==="workstream"&&k==="task-card",L=t.type==="initiative"&&k==="planning-workstream",S=t.type==="initiative"?"planning-initiative-target":"planning-workstream-target",{setNodeRef:$,isOver:J}=Fl({id:`${S}:detail:${t.item.id}`,data:t.type==="initiative"?{type:S,initiativeId:t.item.id}:{type:S,workstreamId:t.item.id}}),U=t.type==="initiative"?"Workstreams":"Tasks",X=t.type==="initiative"?t.item.workstreams:[],q=t.type==="initiative"?"Initiative":"Workstream",ee=t.type==="initiative"?wr(t.item):Rc(t.item);return ut.useEffect(()=>{A("")},[t.item.id,t.type]),e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:ge.detailHero,children:[ee?e.jsx("div",{className:ge.detailReferenceRow,children:e.jsx(Lf,{label:ee,entityType:t.type})}):null,e.jsx("h3",{className:ge.detailTitle,children:t.item.title}),e.jsx("p",{className:ge.detailDescription,children:t.item.description?.trim()||(t.type==="initiative"?"A top-level planning container that groups related workstreams.":"A coordination lane that groups related tasks and keeps execution organized.")}),e.jsx("div",{className:ge.progressTrack,"aria-label":`${t.item.progressPercent}% complete`,children:e.jsx("div",{className:ge.progressFill,style:{width:`${t.item.progressPercent}%`}})}),e.jsxs("div",{className:ge.detailActionRow,children:[e.jsx("button",{type:"button",className:u.secondaryHeaderBtn,onClick:s,children:e.jsxs("span",{children:["Edit ",q]})}),t.item.isArchived?e.jsx("button",{type:"button",className:u.secondaryHeaderBtn,onClick:o,children:e.jsx("span",{children:"Unarchive"})}):e.jsx("button",{type:"button",className:u.secondaryHeaderBtn,onClick:r,children:e.jsx("span",{children:"Archive"})})]})]}),e.jsxs("div",{className:ge.metricGrid,children:[e.jsxs("div",{className:ge.metricCard,children:[e.jsx("span",{className:ge.metricValue,children:t.item.taskCount}),e.jsx("span",{className:ge.metricLabel,children:"Tasks in scope"})]}),e.jsxs("div",{className:ge.metricCard,children:[e.jsx("span",{className:ge.metricValue,children:t.item.completedTaskCount}),e.jsx("span",{className:ge.metricLabel,children:"Done / terminal"})]}),e.jsxs("div",{className:ge.metricCard,children:[e.jsx("span",{className:ge.metricValue,children:t.item.ownerLabel||"Unassigned"}),e.jsx("span",{className:ge.metricLabel,children:"Owner"})]}),e.jsxs("div",{className:ge.metricCard,children:[e.jsx("span",{className:ge.metricValue,children:(t.item.commentCount||0)+(t.item.attachmentCount||0)}),e.jsx("span",{className:ge.metricLabel,children:"Context items"})]})]}),e.jsxs("div",{ref:$,className:`${ge.listCard} ${b||L?ge.sectionDropReady:""} ${J?ge.sectionDropActive:""} ${b||L?ge.sectionDropMode:""}`.trim(),children:[e.jsxs("div",{className:ge.sectionHeaderRow,children:[e.jsx("div",{className:ge.sectionTitle,children:U}),t.type==="initiative"?e.jsx("button",{type:"button",className:"tf-control-icon",title:"Create workstream in this initiative","aria-label":"Create workstream in this initiative",onClick:()=>l?.(t.item.id),children:e.jsx(tr,{size:15})}):e.jsx("button",{type:"button",className:"tf-control-icon",title:"Create task in this workstream","aria-label":"Create task in this workstream",onClick:()=>d?.(t.item.id),children:e.jsx(tr,{size:15})})]}),e.jsxs("div",{className:ge.attachReferenceRow,children:[e.jsx("input",{type:"text",className:u.input,placeholder:t.type==="initiative"?"Paste workstream reference (e.g. WS-123)":"Paste task reference (e.g. T-123)",value:w,onChange:W=>A(W.target.value)}),e.jsx("button",{type:"button",className:u.secondaryHeaderBtn,onClick:()=>{const W=w.trim();W&&(t.type==="initiative"?_?.(t.item.id,W):g?.(t.item.id,W),A(""))},children:"Attach"})]}),t.type==="initiative"?X.length>0?X.map(W=>e.jsx("button",{type:"button",className:ge.listItemButton,onClick:()=>n?.(W.id),children:e.jsx("div",{className:ge.listItem,children:e.jsxs("div",{className:ge.listItemText,children:[e.jsx("span",{className:ge.listItemTitle,children:W.title}),e.jsxs("span",{className:ge.listItemMeta,children:[W.taskCount," tasks • ",W.progressPercent,"% complete"]})]})})},W.id)):e.jsxs("div",{className:ge.emptyPanel,children:[e.jsx("div",{className:ge.emptyPanelTitle,children:"No workstreams yet"}),e.jsx("div",{className:ge.emptyPanelText,children:"Add the first workstream to break the initiative into clearer lanes of execution."})]}):t.item.tasks&&t.item.tasks.length>0?t.item.tasks.map(W=>e.jsx("button",{type:"button",className:ge.listItemButton,onClick:()=>p?.(W.id),children:e.jsx("div",{className:ge.listItem,children:e.jsxs("div",{className:ge.listItemText,children:[e.jsx("span",{className:ge.listItemTitle,children:W.title}),e.jsxs("span",{className:ge.listItemMeta,children:[W.referenceNumber?`T-${W.referenceNumber} • `:"",H0(W.status)]})]})})},W.id)):e.jsxs("div",{className:ge.sectionNote,children:["No tasks are linked to this workstream yet. Use the ",e.jsx("code",{children:"+"})," action above to add the first one."]})]}),e.jsxs("div",{className:ge.listCard,children:[e.jsx("div",{className:ge.sectionTitle,children:"Context"}),e.jsx("div",{className:ge.sectionNote,children:"Comments, attachments, and planning notes can live here without pushing that context down into task cards."})]})]})}function gm({editor:t,draftTitle:n,draftDescription:s,draftOwner:r,draftInitiativeId:o,assigneeOptions:d,draftInitiativeSummary:l,onChangeDraftTitle:p,onChangeDraftDescription:g,onChangeDraftOwner:_,onChangeDraftInitiativeId:w,onCancel:A,onSubmit:y,onAssignInitiativeToWorkstream:k}){const b=t.entityType==="initiative"?"Initiative":"Workstream",L=t.mode==="create"?`Create ${b}`:`Save ${b}`;return e.jsx(e.Fragment,{children:e.jsxs("div",{className:ge.editorCard,children:[e.jsxs("div",{className:ge.editorField,children:[e.jsx("label",{className:ge.editorLabel,children:"Title"}),e.jsx("input",{className:u.input,value:n,onChange:S=>p(S.target.value),placeholder:t.entityType==="initiative"?"Q3 Product Launch":"Content Production"})]}),e.jsxs("div",{className:ge.editorField,children:[e.jsx("label",{className:ge.editorLabel,children:"Description"}),e.jsx("textarea",{className:u.textarea,value:s,onChange:S=>g(S.target.value),placeholder:t.entityType==="initiative"?"Describe the broader outcome this initiative is meant to achieve.":"Describe the lane of work this workstream will coordinate.",rows:5})]}),t.entityType==="workstream"&&e.jsxs("div",{className:ge.editorField,children:[e.jsx("label",{className:ge.editorLabel,children:"Initiative"}),l&&e.jsxs("div",{className:ge.editorHint,children:["Current: ",l.title]}),e.jsxs("div",{className:u.pathInputGroup,children:[e.jsx("input",{type:"text",className:u.input,placeholder:"Paste initiative reference (e.g. IN-123)",value:o,onChange:S=>w(S.target.value)}),t.mode==="edit"&&e.jsx("button",{type:"button",className:u.secondaryHeaderBtn,onClick:()=>k?.(t.targetId),children:"Set Initiative"})]}),t.mode==="edit"&&e.jsx("div",{className:ge.editorSubActions,children:e.jsx("button",{type:"button",className:u.secondaryHeaderBtn,onClick:()=>k?.(t.targetId,null),children:"Clear Initiative"})})]}),e.jsxs("div",{className:ge.editorField,children:[e.jsx("label",{className:ge.editorLabel,children:"Owner"}),e.jsxs("select",{className:`${u.select} ${u.groupBySelect}`,value:r,onChange:S=>_(S.target.value),children:[e.jsx("option",{value:"",children:"Unassigned"}),d.map(S=>e.jsx("option",{value:S.value,children:S.label},S.value))]})]}),e.jsxs("div",{className:ge.editorActions,children:[e.jsx("button",{type:"button",className:u.secondaryHeaderBtn,onClick:A,children:"Cancel"}),e.jsx("button",{type:"button",className:u.primaryUpdateBtn,onClick:y,children:L})]})]})})}function Z0({open:t,leftOffset:n=0,initiatives:s,standaloneWorkstreams:r,activeInitiativeId:o,activeWorkstreamId:d,expandedInitiativeIds:l,detail:p,editor:g,secondaryPane:_,assigneeOptions:w,draftInitiativeSummary:A,draftTitle:y,draftDescription:k,draftOwner:b,draftInitiativeId:L,onChangeDraftTitle:S,onChangeDraftDescription:$,onChangeDraftOwner:J,onChangeDraftInitiativeId:U,onCollapseTreePane:X,onExpandTreePane:q,onCollapsePrimaryPane:ee,onExpandPrimaryPane:W,onCollapseSecondaryPane:Re,onExpandSecondaryPane:V,onBackFromSecondary:te,treeCollapsed:xe,primaryCollapsed:de,secondaryCollapsed:O,onCancelEditor:R,onSubmitEditor:z,onCreateInitiative:re,onCreateWorkstream:be,onToggleInitiative:We,onSelectInitiative:Ce,onSelectWorkstream:Ve,onOpenInitiativeDetails:Fe,onOpenWorkstreamDetails:ve,onOpenNestedWorkstreamDetails:Oe,onEditInitiative:v,onEditWorkstream:M,onArchiveInitiative:C,onUnarchiveInitiative:oe,onArchiveWorkstream:D,onUnarchiveWorkstream:f,onCreateTaskInWorkstream:x,onCreateWorkstreamInInitiative:P,onAssignInitiativeToWorkstream:B,onOpenTaskById:Ae,onAttachTaskToWorkstreamByReference:F,onAttachWorkstreamToInitiativeByReference:ne}){const ae=!!(p||g),ie=!!_,Z=Ef(xe,ae,de,ie,O),H=g?g.entityType==="initiative"?g.mode==="create"?"New Initiative":"Edit Initiative":g.mode==="create"?"New Workstream":"Edit Workstream":p?.type==="initiative"?"Initiative":"Workstream",ue=_?.kind==="editor"?_.editor.mode==="create"?"New Workstream":"Edit Workstream":"Workstream";return e.jsx("aside",{style:{position:"absolute",top:0,left:t?`${n}px`:`${n-Z-24}px`,bottom:0,width:`${Z}px`,minWidth:`${Z}px`,borderRight:"1px solid var(--border-color)",background:"var(--bg-secondary)",boxSizing:"border-box",display:"flex",flexDirection:"column",zIndex:35,overflow:"hidden",pointerEvents:t?"auto":"none",transition:"left 220ms cubic-bezier(0.4, 0, 0.2, 1)",willChange:"left"},children:e.jsxs("div",{className:ge.drawerBody,children:[xe?e.jsx(Yu,{label:"Planning",onExpand:q}):e.jsxs("div",{className:`${ge.paneShell} ${u.appScrollbar} tf-scrollbar ${ge.treePane} ${ae&&!de?ge.treePaneSplit:""}`.trim(),style:{flex:`0 0 ${jl}px`,width:`${jl}px`,minWidth:`${jl}px`,maxWidth:`${jl}px`},children:[e.jsxs("div",{className:ge.paneHeader,children:[e.jsx("span",{className:ge.paneHeaderLabel,children:"Planning"}),e.jsx("button",{type:"button",className:"tf-control-icon",onClick:X,children:e.jsx(Ac,{size:16})})]}),e.jsx("div",{className:ge.paneContent,children:e.jsx(V0,{initiatives:s,standaloneWorkstreams:r,activeInitiativeId:o,activeWorkstreamId:d,expandedInitiativeIds:l,detail:p,secondaryPane:_,onCreateInitiative:re,onCreateWorkstream:be,onToggleInitiative:We,onSelectInitiative:Ce,onSelectWorkstream:Ve,onOpenInitiativeDetails:Fe,onOpenWorkstreamDetails:ve})})]}),ae&&(de?e.jsx(Yu,{label:H,onExpand:W}):e.jsxs("div",{className:`${ge.paneShell} ${u.appScrollbar} tf-scrollbar ${ge.detailPane}`.trim(),style:{flex:`0 0 ${vr}px`,width:`${vr}px`,minWidth:`${vr}px`,maxWidth:`${vr}px`},children:[e.jsxs("div",{className:ge.paneHeader,children:[e.jsx("span",{className:ge.paneHeaderLabel,children:H}),e.jsx("button",{type:"button",className:"tf-control-icon",onClick:ee,children:e.jsx(Ac,{size:16})})]}),e.jsx("div",{className:ge.paneContent,children:g?e.jsx(gm,{editor:g,draftTitle:y,draftDescription:k,draftOwner:b,draftInitiativeId:L,assigneeOptions:w,draftInitiativeSummary:A,onChangeDraftTitle:S,onChangeDraftDescription:$,onChangeDraftOwner:J,onChangeDraftInitiativeId:U,onCancel:R,onSubmit:z,onAssignInitiativeToWorkstream:B}):p?e.jsx(hm,{detail:p,onOpenNestedWorkstreamDetails:p.type==="initiative"?Oe:void 0,onCreateTaskInWorkstream:p.type==="workstream"?x:void 0,onCreateWorkstreamInInitiative:p.type==="initiative"?P:void 0,onOpenTaskById:p.type==="workstream"?Ae:void 0,onAttachTaskToWorkstreamByReference:p.type==="workstream"?F:void 0,onAttachWorkstreamToInitiativeByReference:p.type==="initiative"?ne:void 0,onEdit:()=>p.type==="initiative"?v(p.item.id):M(p.item.id),onArchive:()=>p.type==="initiative"?C(p.item.id):D(p.item.id),onUnarchive:()=>p.type==="initiative"?oe(p.item.id):f(p.item.id)}):null})]})),ie&&(O?e.jsx(Yu,{label:ue,onExpand:V}):e.jsxs("div",{className:`${ge.paneShell} ${u.appScrollbar} tf-scrollbar ${ge.detailPane}`.trim(),style:{flex:`0 0 ${vr}px`,width:`${vr}px`,minWidth:`${vr}px`,maxWidth:`${vr}px`},children:[e.jsxs("div",{className:ge.paneHeader,children:[e.jsx("span",{className:ge.paneHeaderLabel,children:ue}),e.jsx("button",{type:"button",className:"tf-control-icon",onClick:Re,children:e.jsx(Ac,{size:16})})]}),e.jsx("div",{className:ge.paneContent,children:_?.kind==="editor"?e.jsx(gm,{editor:_.editor,draftTitle:y,draftDescription:k,draftOwner:b,draftInitiativeId:L,assigneeOptions:w,draftInitiativeSummary:A,onChangeDraftTitle:S,onChangeDraftDescription:$,onChangeDraftOwner:J,onChangeDraftInitiativeId:U,onCancel:te,onSubmit:z,onAssignInitiativeToWorkstream:B}):_?e.jsx(hm,{detail:_.detail,onCreateTaskInWorkstream:x,onOpenTaskById:Ae,onAttachTaskToWorkstreamByReference:F,onEdit:()=>M(_.detail.item.id),onArchive:()=>D(_.detail.item.id),onUnarchive:()=>f(_.detail.item.id)}):null})]}))]})})}const q0={"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:!0,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"}},Dl="annotated_attachments.workspace_access",Pl="documents.workspace_access",au="workflows.workspace_access",su="agents.workspace_access",ym="initiatives.workspace_access",K0=Object.entries(q0).reduce((t,[n,s])=>(t[n]={key:n,enabled:!!s.enabled,description:String(s.description||""),owner:String(s.owner||""),removalMilestone:String(s.removalMilestone||"")},t),{});function Y0(t){const n=String(t||"").trim();return n&&K0[n]||null}function J0(t){const n=Y0(t);return n?n.enabled?{featureKey:t,allowed:!0,source:"app_gate",code:"OK"}:{featureKey:t,allowed:!1,source:"app_gate",code:"APP_GATE_DISABLED"}:{featureKey:t,allowed:!0,source:"none",code:"OK"}}function Tl(t){return J0(t.featureKey)}const X0=["tasks","docs","annotate","workflows","agents"];function Q0(t){const n=t?.featureAccess||{},s={tasks:{id:"tasks",label:"Tasks",featureKey:null,enabled:!0,fallbackModuleId:"tasks"},docs:{id:"docs",label:"Documents",featureKey:Pl,enabled:n[Pl]?.allowed??!0,fallbackModuleId:"tasks"},annotate:{id:"annotate",label:"Image Notes",featureKey:Dl,enabled:n[Dl]?.allowed??!1,fallbackModuleId:"tasks"},workflows:{id:"workflows",label:"Workflows",featureKey:au,enabled:n[au]?.allowed??!1,fallbackModuleId:"tasks"},agents:{id:"agents",label:"Agents",featureKey:su,enabled:n[su]?.allowed??!1,fallbackModuleId:"tasks"}};return X0.map(r=>s[r])}function eP(t){switch(t){case"docs":return{mode:t,moduleId:"docs",layoutVariant:"docs-minimal",headerSections:[],filterBar:{kind:"document-filters"},primaryAction:null};case"annotate":return{mode:t,moduleId:"annotate",layoutVariant:"annotated-module",headerSections:[],filterBar:{kind:"empty"},primaryAction:null};case"workflows":return{mode:t,moduleId:"workflows",layoutVariant:"workflows-module",headerSections:[],filterBar:{kind:"empty"},primaryAction:null};case"agents":return{mode:t,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 km(t,n){const s=n.find(r=>r.id===t);return s?s.enabled?s.id:s.fallbackModuleId:"tasks"}const tP="_weekLabel_vet2o_1",nP="_sectionTitle_vet2o_6",aP="_calendarHeader_vet2o_11",sP="_monthLabel_vet2o_18",rP="_weekdayGrid_vet2o_23",oP="_weekdayLabel_vet2o_30",iP="_calendarGrid_vet2o_36",cP="_calendarDay_vet2o_42",lP="_calendarDayDot_vet2o_55",dP="_jumpRow_vet2o_67",uP="_displaySection_vet2o_73",pP="_toggleLabel_vet2o_79",mP="_expiredSummary_vet2o_87",fP="_actionButton_vet2o_95",Ta={weekLabel:tP,sectionTitle:nP,calendarHeader:aP,monthLabel:sP,weekdayGrid:rP,weekdayLabel:oP,calendarGrid:iP,calendarDay:cP,calendarDayDot:lP,jumpRow:dP,displaySection:uP,toggleLabel:pP,expiredSummary:mP,actionButton:fP},Sm=["mon","tue","wed","thu","fri","sat","sun"],hP={mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat",sun:"Sun"};function Cc(t){const n=t.getFullYear(),s=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0");return`${n}-${s}-${r}`}function Nl(t){const n=t.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!n)return null;const s=new Date(Number(n[1]),Number(n[2])-1,Number(n[3]));return Number.isNaN(s.getTime())?null:s}function dp(t,n){const s=t.getDay(),r=n==="sunday"?-s:s===0?-6:1-s,o=new Date(t);return o.setHours(0,0,0,0),o.setDate(o.getDate()+r),o}function gP(t,n){return n==="sunday"?{sun:0,mon:1,tue:2,wed:3,thu:4,fri:5,sat:6}[t]:{mon:0,tue:1,wed:2,thu:3,fri:4,sat:5,sun:6}[t]}function Mf(t,n){const s=new Date(t);return s.setDate(t.getDate()+n),s}function yP(t){const n=t.match(/^(\d{4})-(\d{2})-(\d{2})$/);if(!n)return null;const s=new Date(Date.UTC(Number(n[1]),Number(n[2])-1,Number(n[3]))),r=s.getUTCDay()||7;s.setUTCDate(s.getUTCDate()+4-r);const o=new Date(Date.UTC(s.getUTCFullYear(),0,1)),d=Math.ceil(((s.getTime()-o.getTime())/864e5+1)/7);return`${s.getUTCFullYear()}-W${String(d).padStart(2,"0")}`}const up=320;function kP({open:t,onClose:n,scheduleSelectedDate:s,setScheduleSelectedDate:r,scheduleCalendarMonth:o,setScheduleCalendarMonth:d,scheduleShowWeekends:l,setScheduleShowWeekends:p,scheduleShowBacklog:g,setScheduleShowBacklog:_,scheduleOnlyExpired:w,setScheduleOnlyExpired:A,expiredScheduledCount:y,overdueDueCount:k,expiredLeafCandidates:b,expiredRecoveryCandidates:L,onMoveExpiredToSelectedWeek:S,onMoveExpiredToBacklog:$,scheduleBulkBusy:J,globalWeekStartsOn:U,resolvedLocale:X,todayDateOnly:q,scheduleBaseTasks:ee,scheduleWeekStart:W,scheduleWeekLabel:Re}){const V=ut.useMemo(()=>{const[R,z]=o.split("-"),re=Number(R),be=Number(z);if(!Number.isInteger(re)||!Number.isInteger(be)||be<1||be>12){const We=Nl(s)||new Date;return new Date(We.getFullYear(),We.getMonth(),1)}return new Date(re,be-1,1)},[o,s]),te=ut.useMemo(()=>Ic(V,{month:"long",year:"numeric"},X),[V,X]),xe=ut.useMemo(()=>{const R=dp(V,U);return Array.from({length:42},(z,re)=>Mf(R,re))},[V,U]),de=ut.useMemo(()=>{const R=new Map;for(const z of ee){const re=z.scheduledDate||"";if(!re)continue;const We=!(z.status==="done"||z.status==="cancelled")&&re<q,Ce=R.get(re);Ce?(Ce.count+=1,We&&(Ce.hasExpired=!0)):R.set(re,{count:1,hasExpired:We})}return R},[ee,q]),O=ut.useMemo(()=>U==="sunday"?["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]:["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],[U]);return e.jsxs("aside",{className:`${u.appScrollbar} tf-scrollbar tf-sidebar-shell`,style:{transform:t?"translateX(0)":"translateX(108%)",pointerEvents:t?"auto":"none",transition:"transform 220ms cubic-bezier(0.4, 0, 0.2, 1)",willChange:"transform",width:`${up}px`,minWidth:`${up}px`},children:[e.jsxs("div",{className:"tf-sidebar-header",children:[e.jsxs("div",{className:"tf-sidebar-title",children:[e.jsx(uh,{size:16}),e.jsx("span",{children:"Schedule Controls"})]}),e.jsx("button",{type:"button",className:"tf-control-icon",onClick:n,title:"Hide Schedule Sidebar",children:e.jsx(Ii,{size:16})})]}),e.jsxs("div",{className:Ta.weekLabel,children:["Week of ",Re]}),e.jsxs("div",{className:"tf-sidebar-section tf-surface-panel",children:[e.jsxs("div",{className:Ta.calendarHeader,children:[e.jsx("button",{className:"tf-control-icon",onClick:()=>{const R=new Date(V);R.setMonth(V.getMonth()-1),d(`${R.getFullYear()}-${String(R.getMonth()+1).padStart(2,"0")}`)},title:"Previous month",children:e.jsx(Ac,{size:14})}),e.jsx("div",{className:Ta.monthLabel,children:te}),e.jsx("button",{className:"tf-control-icon",onClick:()=>{const R=new Date(V);R.setMonth(V.getMonth()+1),d(`${R.getFullYear()}-${String(R.getMonth()+1).padStart(2,"0")}`)},title:"Next month",children:e.jsx(Ii,{size:14})})]}),e.jsx("div",{className:Ta.weekdayGrid,children:O.map(R=>e.jsx("div",{className:Ta.weekdayLabel,children:R},R))}),e.jsx("div",{className:Ta.calendarGrid,children:xe.map(R=>{const z=Cc(R),re=R.getMonth()!==V.getMonth(),be=dp(R,U),We=Cc(be)===Cc(W),Ce=z===s,Ve=z===q,Fe=z<q,ve=de.get(z),Oe=!!ve,v=!!ve?.hasExpired;return e.jsxs("button",{onClick:()=>{r(z),d(`${R.getFullYear()}-${String(R.getMonth()+1).padStart(2,"0")}`)},className:Ta.calendarDay,style:{"--calendar-day-border":Ce?"1px solid #2563eb":Ve?"1px solid rgba(245, 158, 11, 0.95)":"1px solid transparent","--calendar-day-background":Ce?"rgba(59,130,246,0.22)":Ve?"rgba(245,158,11,0.16)":We?"rgba(59,130,246,0.18)":"transparent","--calendar-day-color":re?"var(--text-helper)":"var(--text-primary)","--calendar-day-font-weight":Ce||Ve?700:500,"--calendar-day-opacity":Fe?.42:1},title:`${Ve?`${z} (Today)`:z}`+(Oe?` • ${ve?.count} scheduled`:"")+(v?" • includes expired":""),children:[R.getDate(),Oe&&e.jsx("span",{className:Ta.calendarDayDot,style:{"--calendar-dot-background":v?"#ef4444":"#3b82f6","--calendar-dot-opacity":re?.6:.95}})]},z)})}),e.jsx("div",{className:Ta.jumpRow,children:e.jsx("button",{className:"tf-control-icon",onClick:()=>{const R=new Date;r(Cc(R)),d(`${R.getFullYear()}-${String(R.getMonth()+1).padStart(2,"0")}`)},title:"Jump to current week",children:"Today"})})]}),e.jsxs("div",{className:`tf-sidebar-section tf-surface-panel ${Ta.displaySection}`,children:[e.jsx("div",{className:Ta.sectionTitle,children:"Display"}),e.jsxs("label",{className:Ta.toggleLabel,children:[e.jsx("input",{type:"checkbox",checked:l,onChange:R=>p(R.target.checked)}),"Show weekends"]}),e.jsxs("label",{className:Ta.toggleLabel,children:[e.jsx("input",{type:"checkbox",checked:g,onChange:R=>_(R.target.checked)}),"Show backlog"]}),e.jsxs("label",{className:Ta.toggleLabel,children:[e.jsx("input",{type:"checkbox",checked:w,onChange:R=>A(R.target.checked)}),"Only expired/overdue"]})]}),y>0&&e.jsxs("div",{className:"tf-sidebar-section tf-surface-panel",children:[e.jsx("div",{className:Ta.sectionTitle,children:"Expired Tasks"}),e.jsxs("div",{className:Ta.expiredSummary,children:[e.jsxs("span",{children:[y," expired"]}),e.jsxs("span",{children:[k," overdue"]})]}),e.jsx("button",{className:`tf-control-icon ${Ta.actionButton}`,onClick:S,disabled:J||b.length===0,title:"Move expired leaf tasks to the selected week while keeping weekday alignment",children:J?"Working...":"Schedule to selected week"}),e.jsx("button",{className:`tf-control-icon ${Ta.actionButton}`,onClick:$,disabled:J||L.length===0,title:"Unschedule expired/overdue tasks back to backlog",children:J?"Working...":"Unschedule to backlog"})]})]})}function Bf(t,n){return t&&(n==="owner"||n==="admin")}function SP(t){const n=String(t?.state||"").trim().toLowerCase();return t?.features?.["collaboration.team_management"]?.allowed===!0&&(n==="active"||n==="trialing"||n==="grace")?"team":"personal"}function vP(t,n,s){return Bf(t,n)}const wP=ut.lazy(()=>Do(()=>import("./TaskSettings-Cw5zYD1L.js"),__vite__mapDeps([0,1,2,3,4,5,6])).then(t=>({default:t.TaskSettings}))),bP=ut.lazy(()=>Do(()=>import("./AnnotatedAttachmentWorkspace-CAyhnPeR.js"),__vite__mapDeps([7,1,2,3,4,5,8])).then(t=>({default:t.AnnotatedAttachmentWorkspaceShell}))),_P=ut.lazy(()=>Do(()=>import("./DocumentWorkspace-BOCw5e4D.js"),__vite__mapDeps([9,1,2,3,4,5,10])).then(t=>({default:t.DocumentWorkspaceShell}))),CP=ut.lazy(()=>Do(()=>import("./WorkflowsModule-CY9R2zPB.js"),__vite__mapDeps([11,1,2,3,4,5])).then(t=>({default:t.WorkflowsModule}))),xP=ut.lazy(()=>Do(()=>import("./AgentsModule-TVmCgizS.js"),__vite__mapDeps([12,1,2,3,4,5])).then(t=>({default:t.AgentsModule})));ut.lazy(()=>Do(()=>import("./InitiativesModule-CN0r02Oi.js"),__vite__mapDeps([13,1,2,3,4,5])).then(t=>({default:t.InitiativesModule})));const AP=ut.lazy(()=>Do(()=>import("./PlansPage-FcQSNLZd.js"),__vite__mapDeps([14,1,2,5,3,4,15])).then(t=>({default:t.PlansPage})));function Pc(t,n=0){const s=String(t.id??"").trim();return s?`id:${s}`:[String(t.occurredAt||"").trim()||"unknown-time",String(t.eventType||"").trim()||"sync",String(t.status||"").trim()||"unknown-status",String(t.statusCode??""),String(t.changeCount??""),String(t.requestMs??""),String(t.errorMessage||"").trim(),JSON.stringify(t.details||null),String(n)].join("|")}function TP(t,n,s=15){const r=new Map;for(const[o,d]of t.entries())r.set(Pc(d,o),d);for(const[o,d]of n.entries())r.set(Pc(d,o),d);return Array.from(r.values()).sort((o,d)=>String(d.occurredAt||"").localeCompare(String(o.occurredAt||""))).slice(0,Math.max(1,s))}function IP(t,n){if(t.length!==n.length)return!1;for(let s=0;s<t.length;s+=1)if(Pc(t[s],s)!==Pc(n[s],s))return!1;return!0}function jP(t){let n=0;for(const s of t){if(String(s.errorMessage||"").toLowerCase().includes("reference number mismatch")){n+=1;continue}if(String(s.status||"").toLowerCase()==="success")break}return n}function NP(t){const n=[];for(const s of t){if(String(s.errorMessage||"").toLowerCase().includes("reference number mismatch")){n.push(s);continue}if(String(s.status||"").toLowerCase()==="success")break}return n}function RP(t,n){const s=cu(t);if(s)return Op(s).label.toUpperCase();for(const r of n){const o=String(r||"").trim();if(!o)continue;const d=yp(o);if(d)return Op(d).label.toUpperCase();let l=o.toLowerCase();try{l=new URL(o.includes("://")?o:`https://${o}`).hostname.toLowerCase()}catch{l=o.toLowerCase()}if(!(l.includes("localhost")||l.includes("127.0.0.1")||l.includes("::1")))return l.toUpperCase()}return"UNKNOWN"}function DP(t){const r=Em(),o=Lm(),d=a.useMemo(()=>new URLSearchParams(o.search),[o.search]),l=String(d.get("screen")||"").trim().toLowerCase()==="plans",p=a.useCallback(c=>{const h=new URLSearchParams(o.search);h.set("screen","plans");for(const[T,fe]of Object.entries(c||{}))fe==null||String(fe).trim()===""?h.delete(T):h.set(T,String(fe));r(`/?${h.toString()}${o.hash||""}`)},[o.hash,o.search,r]),g=a.useCallback(()=>{const c=new URLSearchParams(o.search);c.delete("screen"),c.delete("gate"),c.delete("checkout"),c.delete("planId"),c.delete("planVersionId"),c.delete("interval");const h=c.toString();r(`${o.pathname==="/"?"/":o.pathname}${h?`?${h}`:""}${o.hash||""}`)},[o.hash,o.pathname,o.search,r]),_=a.useCallback(()=>{g()},[g]),{activeTab:w,setActiveTab:A,activeCategories:y,groupBy:k,setGroupBy:b,activeWorkspaceModule:L,setActiveWorkspaceModule:S,emptyColumnMode:$,setEmptyColumnMode:J,zenMode:U,setZenMode:X,filterStatus:q,setFilterStatus:ee,tasks:W,handleEdit:Re,handleSubmit:V,resetForm:te,handleUpdateTask:xe,editingTaskId:de,loading:O,error:R,title:z,setTitle:re,description:be,setDescription:We,checklistItems:Ce,setChecklistItems:Ve,category:Fe,setCategory:ve,type:Oe,setType:v,priority:M,setPriority:C,complexity:oe,setComplexity:D,setStatus:f,approach:x,setApproach:P,assignee:B,setAssignee:Ae,scheduledDate:F,setScheduledDate:ne,dueDate:ae,setDueDate:ie,workstreamInput:Z,setWorkstreamInput:H,manualComplexityEnabled:ue,checklistDropdownEnabled:Pe,showTaskCardStatusLabel:se,formTaxonomies:$e,setFormTaxonomies:et,comments:tt,newCommentText:Ct,setNewCommentText:i,attachments:De,setAttachments:Je,setAttachmentsDirty:Ie,descriptionFocused:ht,setDescriptionFocused:yt,showMarkdownHelp:$t,setShowMarkdownHelp:Ht,showChecklist:bn,setShowChecklist:nn,showComments:Kt,setShowComments:_n,handleAddComment:qt,handleSetWorkstreamForCurrentTask:Hn,handleOpenTaskById:on,taxonomies:Nn,activeTypes:Nt,priorities:Yt,taxonomyDisplayLabels:Bn,approaches:an,copiedId:me,handleCopyId:Ee,handleToggleInProgress:Zt,handleToggleComplete:Lt,handleToggleReview:Rn,handleToggleCancel:xt,handleArchiveTask:G,handleDelete:ke,handleUnarchive:je,handleRestoreDeletedTask:Te,handlePermanentlyDeleteDeletedTask:Se,handleEmptyDeletedTasks:Qe,fetchTasks:pt,searchQuery:Mt,setSearchQuery:Rt,filterCategories:At,setFilterCategories:Ut,filterTypes:nt,setFilterTypes:Tt,filterPriorities:kt,setFilterPriorities:Dn,filterAssignees:Cn,setFilterAssignees:ua,assigneeOptions:mt,taskScope:Ze,setTaskScope:Wn,sortBy:Y,setSortBy:ze,clearFilters:Ne,settingsModel:st,configLoaded:Le,currentTheme:Xe,setCurrentTheme:xn,pathSaved:ft,saveSettings:Gn,keyShortcut:Vn,setKeyShortcut:pa,globalWeekStartsOn:An,locale:va,jsonBackupEnabled:ln,setJsonBackupEnabled:gt,mcpHostRoot:Dt,setMcpHostRoot:Pt,settingsSection:Bt,setSettingsSection:Ye,runtimeMode:Ke,workspaceSwitchingEnabled:Un,cloudAuthConfigured:Tn,authRequiredForApi:sn,authBlocked:yn,isAuthenticated:Wt,authWorkspaceId:Ds,authUserEmail:hs,authUserDisplayName:Fn,authSessionResolved:Jt,realtimeSyncEnabled:kn,realtimeSyncFlagSource:na,workspaceCloudSyncEnabled:zt,workspaceSyncPhase:In,workspaceSyncStatus:Xt,workspaceSyncSummary:On,workspaceSyncRecommendedAction:hn,workspaceSyncBusy:Zn,workspaceSyncPendingChanges:Qt,saveWorkspaceCloudSyncSettings:dn,pushNotice:rt,userGlobalSyncStatus:Oa,workspaceLastSuccessfulSyncAt:aa,workspaceLastPullAt:$a,workspaceLastPushAt:qn,workspaceLastErrorAt:gs,userGlobalSyncError:wa,workspaceLastErrorMessage:sa,retryWorkspaceCloudSync:ba,resetWorkspaceSyncCursorAndPull:ja,getWorkspaceSyncDiagnostics:Mn,currentWorkspaceId:en,currentWorkspaceRole:ma,availableWorkspaces:fa,switchWorkspace:Ja,updateCurrentUserProfile:Na,logout:ys,projectRoot:nr,projectName:Ra,mcpScriptPath:eo,serverHostRoot:Q,showFolderBrowser:ot,setShowFolderBrowser:rn,folders:wt,files:Sn,currentBrowsePath:ct,fetchFolders:jn,browserTarget:ea,setBrowserTarget:ha,handleSelectPath:ra,handleAddPath:ks,handleRemovePath:$n,handleUpdateCategory:Da,handleRemoveCategory:as,handleSaveCategory:Xa,handleUpdateCategoryIcon:oa,handleUpdateCategoryColor:Ua,handleSaveType:Qa,handleRemoveType:Ca,handleUpdateTaxonomies:ss,handleUpdatePriorities:Ps,pathValidation:ar,exportEnvironment:rs,setExportEnvironment:sr,exportWorkflowsPath:ia,setExportWorkflowsPath:xa,exportResult:Es,exportingResource:to,availableWorkflows:_r,onExportWorkflows:Ue,fetchWorkflows:Ft,availableEnvironments:za,initiativeTemplates:_a,fetchInitiativeTemplates:Ss,createInitiativeFromTemplate:Po,uiNotice:Eo,clearNotice:j,taskReturnTrail:le,clearReturnToParentTask:He,returnToPreviousTask:_e,tasksScrollRef:K,setTasksScrollPos:Me,commentsEndRef:bt,autoSaveState:St,unsavedModalOpen:os,setUnsavedModalOpen:Pn,pendingNavigation:gn,handleNavigation:Us,currentTask:rr,currentTaskWorkstream:Cr,currentTaskInitiative:Ni,scheduleWarningPrompt:Kn,confirmScheduleWarning:or,cancelScheduleWarning:ga}=t,Aa=va||Hm();a.useEffect(()=>{const c=String(Ra||"").trim();document.title=c?`Taskforce - ${c}`:"Taskforce"},[Ra]);const Lc=()=>{Pn(!1),gn?(w==="add"&&te(),gn()):(w==="add"&&te(),A("tasks"))},Ri=async()=>{await V({preventDefault:()=>{}}),Pn(!1),gn&&gn()},[zs,Di]=a.useState(!1),[Ls,no]=a.useState(!1),[Lo,ao]=a.useState(!0),[is,Ul]=a.useState(!1),[Mo,Pi]=a.useState(!0),[vs,Bo]=a.useState(Cc(new Date)),[Ha,Wo]=a.useState(()=>{const c=new Date;return`${c.getFullYear()}-${String(c.getMonth()+1).padStart(2,"0")}`}),[Fo,zl]=a.useState(0),[xr,Ga]=a.useState(!1),[Pa,ws]=a.useState(!1),[ya,Ar]=a.useState(!1),[Mc,ir]=a.useState(!1),[Oo,es]=a.useState(!1),[Bc,mn]=a.useState(!1),[ta,Va]=a.useState(""),[Yn,Tr]=a.useState(""),[Wc,Hl]=a.useState(new Set),[Jn,Ea]=a.useState(null),[Ms,ca]=a.useState(null),[so,cs]=a.useState(null),[La,cr]=a.useState(null),[ro,lr]=a.useState(""),[oo,dr]=a.useState(""),[$o,Za]=a.useState(""),[cn,vn]=a.useState(""),[Ma,ur]=a.useState(()=>Vd.map(c=>c.value)),[bs,En]=a.useState(()=>Zd.map(c=>c.value)),[du,Uo]=a.useState(null),[uu,zo]=a.useState(null),[Ba,Ir]=a.useState(null),[jr,Ho]=a.useState(null),[pu,Go]=a.useState(0),[io,mu]=a.useState({}),[Gl,Vl]=a.useState(!1),Zl=a.useRef(""),Fc=a.useRef(null),ql=a.useRef(null),Oc=a.useRef(new Set),Hs=a.useMemo(()=>{const c={},h=String(en||"").trim();return Ke==="cloud"&&h&&h!=="default"&&(c["x-taskforce-workspace-id"]=h),c},[Ke,en]),Vo=a.useMemo(()=>`${Ke}:${String(en||"default").trim()||"default"}`,[Ke,en]),Gs=a.useMemo(()=>`taskforce:annotate-layout:${Vo}`,[Vo]),$c=a.useMemo(()=>Ke==="cloud"?Jt:Le,[Jt,Le,Ke]);a.useEffect(()=>{Fc.current=Ba},[Ba]),a.useEffect(()=>{ql.current=jr},[jr]);const Ei=a.useMemo(()=>({[Pl]:Tl({featureKey:Pl}),[Dl]:Tl({featureKey:Dl}),[au]:Tl({featureKey:au}),[su]:Tl({featureKey:su}),[ym]:Tl({featureKey:ym})}),[Ke]),Nr=a.useMemo(()=>Q0({featureAccess:Ei}),[Ei]),la=a.useMemo(()=>km(L,Nr),[L,Nr]),Rr=Ei[Pl]?.allowed??!1,Zo=Ei[Dl]?.allowed??!1,Li="Documents is not available in this build yet.",Mi="Annotate is not available in this build yet.";a.useEffect(()=>{const c=h=>{const T=h,fe=T.detail?.fsPath,ce=String(T.detail?.assetId||"").trim()||null;if(!(!fe&&!ce)){if(T.preventDefault(),!Rr){rt(Li,"error");return}Uo(fe||null),zo(ce),S("docs")}};return window.addEventListener("taskforce:open-markdown-document",c),()=>{window.removeEventListener("taskforce:open-markdown-document",c)}},[Rr,Li,rt,S]),a.useEffect(()=>{la!==L&&S(la)},[L,la,S]),a.useEffect(()=>{la==="docs"&&Rr||(Uo(null),zo(null))},[Rr,la]),a.useEffect(()=>{if(!(typeof window>"u"))try{const c=window.sessionStorage.getItem(Gs);if(!c)return;const h=JSON.parse(c);h?.annotatedTarget&&typeof h.annotatedTarget=="object"&&Ir(h.annotatedTarget),typeof h?.annotatedSessionId=="string"&&Ho(h.annotatedSessionId.trim()||null)}catch{}},[Gs]),a.useEffect(()=>{if(Zl.current===Vo)return;Zl.current=Vo,Vl(!1);let c=!1;return(async()=>{try{const T=await fetch("/api/taskforce/ui-state?key=layout",{method:"GET",credentials:"include",headers:Hs});if(!T.ok)return;const fe=await T.json().catch(()=>({})),ce=fe?.state&&typeof fe.state=="object"?fe.state:null;if(!ce||c)return;if(typeof ce.scheduleShowWeekends=="boolean"&&no(ce.scheduleShowWeekends),typeof ce.scheduleShowBacklog=="boolean"&&ao(ce.scheduleShowBacklog),typeof ce.scheduleOnlyExpired=="boolean"&&Ul(ce.scheduleOnlyExpired),typeof ce.scheduleSidebarOpen=="boolean"&&Pi(ce.scheduleSidebarOpen),typeof ce.scheduleSelectedDate=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(ce.scheduleSelectedDate)&&Bo(ce.scheduleSelectedDate),typeof ce.scheduleCalendarMonth=="string"&&/^\d{4}-\d{2}$/.test(ce.scheduleCalendarMonth)&&Wo(ce.scheduleCalendarMonth),typeof ce.scheduleScrollLeft=="number"&&Number.isFinite(ce.scheduleScrollLeft)&&ce.scheduleScrollLeft>=0&&zl(ce.scheduleScrollLeft),typeof ce.showFilters=="boolean"&&Ga(ce.showFilters),Array.isArray(ce.documentTypeFilters)&&ur(ce.documentTypeFilters),Array.isArray(ce.documentAttachmentFilters)&&En(ce.documentAttachmentFilters),typeof ce.planningDrawerOpen=="boolean"&&Ar(ce.planningDrawerOpen),Array.isArray(ce.planningExpandedInitiativeIds)&&Hl(new Set(ce.planningExpandedInitiativeIds.map(Gt=>String(Gt||"").trim()).filter(Boolean))),ce.planningDrawerDetail&&typeof ce.planningDrawerDetail=="object"&&(ce.planningDrawerDetail.type==="initiative"||ce.planningDrawerDetail.type==="workstream")&&typeof ce.planningDrawerDetail.id=="string"){const Gt=ce.planningDrawerDetail.id.trim();Ea(Gt?{type:ce.planningDrawerDetail.type,id:Gt}:null)}else ce.planningDrawerDetail===null&&Ea(null);typeof ce.planningNestedWorkstreamDetailId=="string"?ca(ce.planningNestedWorkstreamDetailId.trim()||null):ce.planningNestedWorkstreamDetailId===null&&ca(null);const lt=ce.annotatedTarget;lt&&typeof lt=="object"&&(Fc.current||Ir(lt)),typeof ce.annotatedSessionId=="string"&&(ql.current||Ho(ce.annotatedSessionId.trim()||null))}catch{}finally{c||Vl(!0)}})(),()=>{c=!0}},[Vo,Hs]),a.useEffect(()=>{if(!Gl)return;const c=window.setTimeout(async()=>{try{await fetch("/api/taskforce/ui-state",{method:"POST",headers:{"Content-Type":"application/json",...Hs},credentials:"include",body:JSON.stringify({stateKey:"layout",patch:{scheduleShowWeekends:Ls,scheduleShowBacklog:Lo,scheduleOnlyExpired:is,scheduleSidebarOpen:Mo,scheduleSelectedDate:vs,scheduleCalendarMonth:Ha,scheduleScrollLeft:Fo,showFilters:xr,documentTypeFilters:Ma,documentAttachmentFilters:bs,planningDrawerOpen:ya,planningExpandedInitiativeIds:Array.from(Wc),planningDrawerDetail:Jn,planningNestedWorkstreamDetailId:Ms,annotatedTarget:Ba,annotatedSessionId:jr}})})}catch{}},250);return()=>window.clearTimeout(c)},[Gl,Ls,Lo,is,Mo,vs,Ha,Fo,xr,Ma,bs,ya,Wc,Jn,Ms,Ba,jr,Hs]),a.useEffect(()=>{if(!(typeof window>"u"))try{window.sessionStorage.setItem(Gs,JSON.stringify({annotatedTarget:Ba,annotatedSessionId:jr}))}catch{}},[Gs,jr,Ba]),a.useEffect(()=>{k==="schedule"&&Pi(!0)},[k]);const{showArchive:Bs,setShowArchive:Dr,fetchArchive:qo,filteredArchive:Bi}=t,Ko=a.useMemo(()=>Bi.map(c=>({...c,isArchived:!0})),[Bi]),ts=a.useMemo(()=>t.archivedTasks.map(c=>({...c,isArchived:!0})),[t.archivedTasks]),Vs=a.useMemo(()=>[...t.searchAgnosticTasks,...ts],[ts,t.searchAgnosticTasks]),Kl=a.useCallback(c=>{const h=String(c||"").trim();if(!h)return"";const T=Vs.find(fe=>fe.id===h);return er(T)||""},[Vs]),Yl=a.useCallback(c=>{const h=String(c||"").trim();if(!h)return"";const T=String(io[h]||"").trim();if(T)return T;for(const fe of Vs)for(const ce of fe.attachments||[]){if(!ce||typeof ce!="object"||String(ce.assetId||"").trim()!==h)continue;const lt=gf({referenceNumber:typeof ce.referenceNumber=="number"?ce.referenceNumber:null,referenceLabel:String(ce.referenceLabel||"").trim()||null});if(lt)return lt}return""},[Vs,io]);a.useEffect(()=>{const c=h=>{const T=h,fe=am(T.detail,Vs);if(fe){if(T.preventDefault(),!Zo){rt(Mi,"error");return}Ir(fe),Ho(null),Go(ce=>ce+1),S("annotate")}};return window.addEventListener("taskforce:open-annotated-attachment",c),()=>{window.removeEventListener("taskforce:open-annotated-attachment",c)}},[Vs,Zo,Mi,rt,S]),a.useEffect(()=>{if(!Ba)return;const c=am(Ba,Vs);c&&(c.taskReferenceLabel===Ba.taskReferenceLabel&&c.imageReferenceLabel===Ba.imageReferenceLabel||Ir(c))},[Vs,Ba]),a.useEffect(()=>{const c=Fc.current,h=String(c?.assetId||"").trim();if(!h)return;const T=String(io[h]||"").trim();T&&T!==String(c?.imageReferenceLabel||"").trim()&&Ir(fe=>!fe||String(fe.assetId||"").trim()!==h?fe:{...fe,imageReferenceLabel:T})},[io,Ba]),a.useEffect(()=>{if(!$c)return;const h=String(Ba?.assetId||"").trim();if(!h||Oc.current.has(h)||String(io[h]||"").trim())return;let T=!1;Oc.current.add(h);const fe=String(en||"default").trim()||"default",ce=new URLSearchParams({workspaceId:fe});return(async()=>{try{const Gt=await fetch(`/api/taskforce/annotated-attachments/images/${encodeURIComponent(h)}?${ce.toString()}`,{method:"GET",credentials:"include",headers:Hs});if(!Gt.ok)return;const Qn=await Gt.json().catch(()=>({})),fn=String(Qn?.target?.imageReferenceLabel||"").trim();if(!fn||T)return;mu(Gr=>Gr[h]===fn?Gr:{...Gr,[h]:fn})}catch{}finally{Oc.current.delete(h)}})(),()=>{T=!0}},[$c,io,en,Ba,Hs]);const ls=a.useMemo(()=>t.deletedTasks.map(c=>({...c.taskSnapshot,isDeleted:!0,deletedRecordId:c.id})),[t.deletedTasks]),Wi=a.useMemo(()=>{const c=new Map;return t.deletedTasks.forEach(h=>{c.set(h.taskSnapshot.id,h)}),c},[t.deletedTasks]),Fi=a.useMemo(()=>{const c=ls,h=Mt.trim().toLowerCase(),T=y.every(fn=>At.includes(fn.value)),fe=Nt.every(fn=>nt.includes(fn.value)),ce=new Set(kt.map(fn=>String(fn))),lt=Yt.every(fn=>ce.has(String(fn.value))),Gt=new Set(q.map(fn=>String(fn))),Qn=Yr.every(fn=>Gt.has(String(fn.value)));return c.filter(fn=>{const Gr=(er(fn)||fn.id).toLowerCase(),_l=!h||fn.title.toLowerCase().includes(h)||String(fn.description||"").toLowerCase().includes(h)||fn.id.toLowerCase().includes(h)||Gr.includes(h),jt=T||At.includes(fn.category),js=fe||nt.includes(fn.type||fs),Vr=lt||ce.has(String(fn.priority)),Ns=Qn||Gt.has(String(fn.status)),Sa=Cn.length===0||Cn.includes(fn.assignee||"unassigned");return _l&&jt&&js&&Vr&&Ns&&Sa})},[y,Nt,ls,Cn,At,kt,q,nt,Yt,Mt]),Yo=a.useMemo(()=>[...t.tasks,...ts,...ls],[ts,ls,t.tasks]),Uc=a.useMemo(()=>{const c=y.filter(T=>!T.disabled).map(T=>({value:T.value,label:T.label})),h=y.filter(T=>T.disabled&&Yo.some(fe=>fe.category===T.value)).map(T=>({value:T.value,label:`${T.label} (Legacy)`}));return[...c,...h]},[y,Yo]),zc=a.useMemo(()=>{const c=Nt.filter(T=>T.status!=="retired").map(T=>({value:T.value,label:T.label})),h=Nt.filter(T=>T.status==="retired"&&Yo.some(fe=>(fe.type||fs)===T.value)).map(T=>({value:T.value,label:`${T.label} (Retired)`}));return[...c,...h]},[Nt,Yo]),Pr=a.useMemo(()=>Ze==="archived"?Ko:Ze==="deleted"?Fi:Bs?[...t.filteredTasks,...Ko]:t.filteredTasks,[Ko,Fi,t.filteredTasks,Bs,Ze]),Oi=a.useMemo(()=>Ze==="open"?t.tasks.filter(c=>!c.isArchived):Pr,[Pr,t.tasks,Ze]),Jl=a.useMemo(()=>new Set(Pr.map(c=>c.id)),[Pr]);a.useMemo(()=>Ze==="archived"?ts:Ze==="deleted"?ls:Bs?[...t.searchAgnosticTasks,...ts]:t.searchAgnosticTasks,[ts,ls,t.searchAgnosticTasks,Bs,Ze]);const pr=a.useMemo(()=>{const c=new Map;for(const h of ts)c.set(h.id,h);for(const h of ls)c.set(h.id,h);for(const h of t.tasks)c.set(h.id,h);return Array.from(c.values())},[ts,ls,t.tasks]),Jo=a.useMemo(()=>{const c=new Map;return pr.forEach(h=>c.set(h.id,h)),c},[pr]),Xo=a.useMemo(()=>{const c=new Map;return mt.forEach(h=>{c.set(String(h.value),h.label)}),c},[mt]),at=a.useMemo(()=>{const c=Ze==="deleted"?[]:t.initiatives.filter(jt=>Ze==="archived"?!!jt.isArchived:!jt.isArchived),h=Ze==="deleted"?[]:t.workstreams.filter(jt=>Ze==="archived"?!!jt.isArchived:!jt.isArchived),T=jt=>{const js=jt.length,Vr=jt.filter(Ns=>Ns.isArchived||Ns.status==="done"||Ns.status==="cancelled").length;return{progressPercent:js>0?Math.round(Vr/js*100):0,taskCount:js,completedTaskCount:Vr}},fe=new Map,ce=new Map,lt=new Map,Gt=new Map,Qn=new Map,fn=jt=>{const js=pr.filter(Sa=>(Sa.workstreamId||null)===jt.id),Vr=js.map(Sa=>({id:Sa.id,referenceNumber:Sa.referenceNumber??null,title:Sa.title,status:Sa.status||null})),Ns={id:jt.id,referenceNumber:jt.referenceNumber??null,title:jt.title,description:String(jt.description||"").trim()||void 0,ownerLabel:jt.ownerId?Xo.get(String(jt.ownerId))||String(jt.ownerId):null,...T(js),initiativeId:jt.initiativeId||null,commentCount:Array.isArray(jt.comments)?jt.comments.length:0,attachmentCount:Array.isArray(jt.attachments)?jt.attachments.length:0,isArchived:!!jt.isArchived,tasks:Vr};return fe.set(jt.id,js.map(Sa=>Sa.id)),jt.initiativeId&&ce.set(jt.id,jt.initiativeId),Gt.set(Ns.id,Ns),Ns},Gr=c.map(jt=>{const js=h.filter(Sa=>(Sa.initiativeId||null)===jt.id).map(fn),Vr=js.flatMap(Sa=>fe.get(Sa.id)||[]).map(Sa=>Jo.get(Sa)).filter(Sa=>!!Sa),Ns={id:jt.id,referenceNumber:jt.referenceNumber??null,title:jt.title,description:String(jt.description||"").trim()||void 0,ownerLabel:jt.ownerId?Xo.get(String(jt.ownerId))||String(jt.ownerId):null,...T(Vr),workstreamCount:js.length,workstreams:js,commentCount:Array.isArray(jt.comments)?jt.comments.length:0,attachmentCount:Array.isArray(jt.attachments)?jt.attachments.length:0,isArchived:!!jt.isArchived};return lt.set(jt.id,Vr.map(Sa=>Sa.id)),Qn.set(Ns.id,Ns),Ns}),_l=h.filter(jt=>!jt.initiativeId).map(fn);return{initiatives:Gr,standaloneWorkstreams:_l,workstreamTaskIds:fe,workstreamInitiativeIds:ce,initiativeTaskIds:lt,workstreamById:Gt,initiativeById:Qn}},[Xo,Jo,pr,t.initiatives,t.workstreams,Ze]),$i=a.useMemo(()=>at.initiatives.map(c=>({value:c.id,label:c.title})),[at.initiatives]),Hc=a.useMemo(()=>[...at.initiatives.flatMap(c=>c.workstreams.map(h=>({value:h.id,label:h.title}))),...at.standaloneWorkstreams.map(c=>({value:c.id,label:c.title}))],[at.initiatives,at.standaloneWorkstreams]),co=a.useMemo(()=>Yn?new Set(at.workstreamTaskIds.get(Yn)||[]):ta?new Set(at.initiativeTaskIds.get(ta)||[]):null,[at.initiativeTaskIds,at.workstreamTaskIds,ta,Yn]),Gc=a.useMemo(()=>{if(!Jn)return null;if(Jn.type==="initiative"){const h=at.initiativeById.get(Jn.id);return h?{type:"initiative",item:h}:null}const c=at.workstreamById.get(Jn.id)||at.standaloneWorkstreams.find(h=>h.id===Jn.id);return c?{type:"workstream",item:c}:null},[Jn,at.initiativeById,at.standaloneWorkstreams,at.workstreamById]),Qo=a.useMemo(()=>{if(!Ms)return null;const c=at.workstreamById.get(Ms)||at.standaloneWorkstreams.find(h=>h.id===Ms);return c?{type:"workstream",item:c}:null},[Ms,at.standaloneWorkstreams,at.workstreamById]),Ui=a.useMemo(()=>La?{kind:"editor",editor:La}:Qo?{kind:"detail",detail:Qo}:null,[Qo,La]),Xl=Ef(Mc,!!(Gc||so),Oo,!!Ui,Bc),Vc=a.useMemo(()=>{if(!cn.trim())return null;const c=at.initiativeById.get(cn);return c||$u(at.initiatives,cn)},[cn,at.initiativeById,at.initiatives]);a.useEffect(()=>{ya&&(ir(!1),es(!1),mn(!1))},[ya]),a.useEffect(()=>{ta&&!at.initiativeById.has(ta)&&Va(""),Yn&&!at.workstreamById.has(Yn)&&Tr(""),Jn?.type==="initiative"&&!at.initiativeById.has(Jn.id)&&Ea(null),Jn?.type==="workstream"&&!at.workstreamById.has(Jn.id)&&Ea(null),Ms&&!at.workstreamById.has(Ms)&&ca(null),La?.mode==="edit"&&!at.workstreamById.has(La.targetId)&&cr(null)},[Jn,Ms,La,at.initiativeById,at.workstreamById,ta,Yn]);const ds=a.useMemo(()=>k==="schedule"?Oi:Pr,[k,Pr,Oi]),ka=a.useMemo(()=>{const c=new Date,h=c.getFullYear(),T=String(c.getMonth()+1).padStart(2,"0"),fe=String(c.getDate()).padStart(2,"0");return`${h}-${T}-${fe}`},[]),zi=a.useMemo(()=>k!=="schedule"||!is?ds:ds.filter(c=>{if(c.status==="done"||c.status==="cancelled")return!1;const T=!!c.scheduledDate&&c.scheduledDate<ka,fe=!!c.dueDate&&c.dueDate<ka;return T||fe}),[k,is,ds,ka]),Zc=a.useMemo(()=>!co||co.size===0?zi:zi.filter(c=>co.has(c.id)),[zi,co]),Er=a.useMemo(()=>k!=="schedule"?[]:ds.filter(c=>{if(c.status==="done"||c.status==="cancelled")return!1;const T=!!c.scheduledDate&&c.scheduledDate<ka,fe=!!c.dueDate&&c.dueDate<ka;return T||fe}),[k,ds,ka]),ei=a.useMemo(()=>k!=="schedule"?0:ds.filter(c=>c.status==="done"||c.status==="cancelled"?!1:!!c.scheduledDate&&c.scheduledDate<ka).length,[k,ds,ka]),Ql=a.useMemo(()=>k!=="schedule"?0:ds.filter(c=>c.status==="done"||c.status==="cancelled"?!1:!!c.dueDate&&c.dueDate<ka).length,[k,ds,ka]),Hi=a.useMemo(()=>k!=="schedule"?[]:ds.filter(c=>c.status==="done"||c.status==="cancelled"?!1:!!c.scheduledDate&&c.scheduledDate<ka),[k,ds,ka]),ti=Er,[mr,lo]=a.useState(!1),Gi=()=>{Us(()=>{_e()||(w==="add"&&le.length>0&&He(),ws(!1),w==="add"&&te(),A("tasks"))})};a.useEffect(()=>{w!=="add"&&ws(!1)},[w]);const Vi=a.useCallback((c,h)=>{if(c.status!==h){if(h==="in-progress"){Zt(c);return}if(h==="review"){Rn(c);return}if(h==="done"){Lt(c);return}if(h==="cancelled"){xt(c);return}xe(c.id,{status:h,completedAt:null})}},[Zt,Rn,Lt,xt,xe]),qc=a.useCallback((c,h)=>{te();const T=xD(c,h,{categories:y,approaches:an});T.category&&ve(T.category),T.type&&v(T.type),typeof T.priority=="number"&&C(T.priority),typeof T.complexity=="number"&&D(T.complexity),T.approach&&P(T.approach);const fe=T.taxonomyApproach;typeof fe=="string"&&fe.length>0&&et(ce=>({...ce,approach:fe})),T.assignee&&Ae(T.assignee),T.status&&f(T.status),T.scheduledDate&&ne(T.scheduledDate),A("add")},[te,y,an,ve,v,C,D,f,P,Ae,ne,et,A]);ut.useEffect(()=>{q&&!q.includes("done")&&ee(c=>[...c,"done"])},[]);const[ed,Lr]=a.useState(!1),[Zs,Wa]=a.useState(!1),[uo,Mr]=a.useState(!1),[Kc,po]=a.useState(!1),[Zi,qi]=a.useState(!1),[td,Ki]=a.useState(!1),[Yi,Ji]=a.useState(null),[_s,nd]=a.useState(!1),[mo,Yc]=a.useState(!1),[Jc,Xi]=a.useState(!1),[qa,ad]=a.useState([]),[sd,rd]=a.useState(!1),[Xc,od]=a.useState(null),Qc=a.useRef(null),ni=a.useRef(null),[fo,id]=a.useState(!1),[cd,el]=a.useState(""),[fu,Qi]=a.useState(!1),[tl,ai]=a.useState(!1),[Br,ho]=a.useState("members"),[ec,fr]=a.useState("unknown"),[Cs,Xn]=a.useState(null),[tc,nl]=a.useState(!1),[si,ld]=a.useState([]),[qs,ri]=a.useState(null),[Wr,oi]=a.useState(""),[hr,ii]=a.useState("member"),[go,al]=a.useState("read-write"),[gr,Ks]=a.useState(!1),[sl,ci]=a.useState(null),[Ys,hu]=a.useState(0),[li,dd]=a.useState(!1),[ud,gu]=a.useState([]),[pd,yu]=a.useState(!1),[md,ku]=a.useState(1),[xs,yo]=a.useState(null),[ko,rl]=a.useState(!1),[ol,Fr]=a.useState(null),[Ws,zn]=a.useState(!1),[So,da]=a.useState(null),[vo,il]=a.useState(null),[As,Fs]=a.useState("month"),[nc,fd]=a.useState(""),[di,cl]=a.useState(!1),[ac,sc]=a.useState(null),[hd,rc]=a.useState(null),gd=25,yd=a.useRef(null);a.useEffect(()=>{if(!Zs)return;const c=h=>{yd.current?.contains(h.target)||Wa(!1)};return document.addEventListener("mousedown",c),()=>document.removeEventListener("mousedown",c)},[Zs]);const Su=Ke==="cloud"&&Un&&Wt,kd=Wt&&(Ke==="cloud"||Tn),wo=Ke==="local"&&Wt,Sd=a.useCallback(async c=>{if(!wo)return;Ji(null),Ki(!0);const h=await dn({enabled:c});h.success||Ji(h.error||(c?"Failed to enable sync.":"Failed to disable sync.")),Ki(!1)},[wo,dn]),ll=td,vu=a.useMemo(()=>{const c=fa.find(fe=>fe.id===en),h=String(c?.name||"").trim();if(h)return h;if(Ke==="local"){const fe=String(Ra||"").trim();if(fe)return fe}return String(en||"").trim()||"Workspace"},[fa,en,Ra,Ke]),Js=Bf(kd,ma),vd=vP(kd,ma),oc=String(Fn||"").trim(),ui=String(hs||"").trim(),ic=oc||ui,wd=ic.length>0,wu=ui.length>0,bu=(ic||ui||"U").trim().charAt(0).toUpperCase()||"U",cc=String(xs?.planName||xs?.planId||"").trim(),lc=cc.length>0,Xs=String(Ds||en||"").trim(),bd=Ke==="cloud"?"CLOUD":"LOCAL",dl=t.config?.apiBaseUrl||"",bo=a.useMemo(()=>{const c=Ke==="local"?t.config?.cloudAuthBaseUrl||t.config?.apiBaseUrl||"":t.config?.apiBaseUrl||t.config?.cloudAuthBaseUrl||"";return String(c||"").trim().replace(/\/+$/,"")},[t.config?.apiBaseUrl,t.config?.cloudAuthBaseUrl,Ke]),Or=a.useCallback(c=>{const h=String(c||"").trim();return bo?`${bo}${h.startsWith("/")?h:`/${h}`}`:h},[bo]),_u=a.useMemo(()=>RP(t.config?.cloudEnvironment,[String(t.config?.cloudBaseUrl||""),String(t.config?.cloudAuthBaseUrl||""),String(t.config?.apiBaseUrl||""),String(t.config?.baseUrl||"")]),[t.config?.cloudEnvironment,t.config?.cloudBaseUrl,t.config?.cloudAuthBaseUrl,t.config?.apiBaseUrl,t.config?.baseUrl]),_d=Tn&&!Jt;a.useEffect(()=>{Kc&&(fd(oc),sc(null),rc(null))},[oc,Kc]);const dc=a.useCallback(async()=>{const c=nc.trim();if(!c){sc("Display name is required."),rc(null);return}cl(!0),sc(null),rc(null);const h=await Na({displayName:c});if(!h.success){sc(h.error||"Failed to update profile."),cl(!1);return}rc("Profile updated."),cl(!1),po(!1)},[nc,Na]),ns=a.useCallback(()=>{const c={},h=String(Xs||"").trim();return h&&(c["x-taskforce-workspace-id"]=h),c},[Xs]),_o=a.useCallback(async()=>{if(!Wt)return yo(null),null;rl(!0),Fr(null);try{const c=await fetch(Or("/api/taskforce/billing/status"),{method:"GET",credentials:"include"}),h=await c.json().catch(()=>({}));return c.ok?(yo(h),h):(yo(null),Fr(String(h?.error||"Failed to load billing status.")),null)}catch{return yo(null),Fr("Failed to load billing status."),null}finally{rl(!1)}},[Or,Wt]),Cd=a.useCallback(async()=>{const c=new URLSearchParams;c.set("screen","plans"),c.set("interval",As),r(`/?${c.toString()}`)},[As,r]),Cu=a.useCallback(async()=>{da(null),il(null),zn(!0);try{const c=await fetch(Or("/api/taskforce/billing/portal-session"),{method:"POST",credentials:"include"}),h=await c.json().catch(()=>({}));if(!c.ok){da(String(h?.error||"Failed to create portal session."));return}const T=String(h?.url||"").trim();if(!T){da("Portal session did not return a redirect URL.");return}window.location.assign(T)}catch{da("Failed to open billing portal.")}finally{zn(!1)}},[Or]),xd=a.useCallback(async()=>{da(null),il(null),zn(!0);try{const c=String(xs?.planVersionId||"").trim();if(!c){da("No active plan version is linked to this account.");return}const h=await fetch(Or("/api/taskforce/billing/subscription"),{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({planVersionId:c,interval:As})}),T=await h.json().catch(()=>({}));if(!h.ok){da(String(T?.error||"Failed to update subscription interval."));return}il("Subscription updated."),await _o()}catch{da("Failed to update subscription interval.")}finally{zn(!1)}},[As,xs?.planVersionId,Or,_o]),$r=a.useCallback(async()=>{if(!Js)return fr("unknown"),"unknown";try{const c=await fetch("/api/taskforce/account/entitlements",{method:"GET",credentials:"include",headers:ns()}),h=await c.json().catch(()=>({}));if(!c.ok)return fr("unknown"),"unknown";const T=SP(h);return fr(T),T}catch{return fr("unknown"),"unknown"}},[Js,ns]);a.useEffect(()=>{!Zs&&!tl&&!uo||$r()},[uo,Zs,tl,$r]),a.useEffect(()=>{if(!(!Wt||!Jt)){if(!Js){fr("unknown");return}$r()}},[Jt,Js,Wt,$r]),a.useEffect(()=>{!uo&&!Zs||_o()},[_o,uo,Zs]);const Co=a.useCallback(async()=>{if(Js){nl(!0),Xn(null);try{const c=await fetch("/api/taskforce/admin/users",{method:"GET",credentials:"include",headers:ns()}),h=await c.json().catch(()=>({}));if(!c.ok){Xn(h?.error||"Failed to load workspace users.");return}const T=Array.isArray(h?.users)?h.users:[],fe={owner:0,admin:1,member:2,"read-only":3},ce=T.map(lt=>({userId:String(lt?.userId||""),email:String(lt?.email||""),displayName:typeof lt?.displayName=="string"?lt.displayName:null,role:lt?.role==="owner"||lt?.role==="admin"||lt?.role==="member"||lt?.role==="read-only"?lt.role:"member",permissionMode:lt?.permissionMode==="read-only"?"read-only":"read-write",status:String(lt?.status||"active"),disabled:lt?.disabled===!0}));ce.sort((lt,Gt)=>{const Qn=(fe[lt.role]??99)-(fe[Gt.role]??99);return Qn!==0?Qn:(lt.displayName||lt.email).localeCompare(Gt.displayName||Gt.email,void 0,{sensitivity:"base"})}),ld(ce)}catch{Xn("Failed to load workspace users.")}finally{nl(!1)}}},[Js,ns]),yr=a.useCallback(async c=>{if(!Js)return;const h=Math.max(0,Math.floor(c));dd(!0),Xn(null);try{const T=h*gd,fe=await fetch(`/api/taskforce/admin/workspace-audit-logs?limit=${gd}&offset=${T}`,{method:"GET",credentials:"include",headers:ns()}),ce=await fe.json().catch(()=>({}));if(!fe.ok){Xn(ce?.error||"Failed to load workspace audit log.");return}const lt=Array.isArray(ce?.events)?ce.events:[];gu(lt.map(Qn=>({id:String(Qn?.id||""),action:String(Qn?.action||""),actorUserId:String(Qn?.actorUserId||""),actorRole:String(Qn?.actorRole||""),createdAt:String(Qn?.createdAt||Qn?.ts||"")}))),hu(h);const Gt=Math.max(1,Number(ce?.pages||1));ku(Gt),yu(h+1<Gt)}catch{Xn("Failed to load workspace audit log.")}finally{dd(!1)}},[Js,ns]),pi=a.useCallback(async()=>{await Promise.all([Co(),yr(Ys)])},[Co,yr,Ys]),ul=a.useCallback((c="login")=>{const h=`${o.pathname}${o.search}${o.hash}`,T=!h||h==="/login"||!h.startsWith("/")?"/":h;Wa(!1),Mr(!1),qi(!1),r(`/login?mode=${c}&next=${encodeURIComponent(T)}`)},[o.hash,o.pathname,o.search,r]),pl=a.useCallback(c=>{Wa(!1),Qi(!1);const h=new URLSearchParams({step:"workspace"});c?.intent==="create-workspace"&&h.set("intent","create-workspace"),r(`/setup?${h.toString()}`,{replace:!0})},[r]),Ad=a.useCallback(async c=>{if(!(!c||fo)){el(""),id(!0);try{const h=await Ja(c);if(!h.success){if(h.code==="WORKSPACE_NOT_FOUND"||h.code==="WORKSPACE_ID_REQUIRED"){pl();return}el(h.error||"Failed to switch workspace.");return}await pt(!0),Wa(!1)}finally{id(!1)}}},[Ja,fo,pt,pl]),ml=a.useCallback(async()=>{Wa(!1),ai(!0),ho("members"),await $r()==="team"&&(await Co(),await yr(0))},[yr,$r,Co]),xo=a.useCallback(async(c,h)=>{Xn(null),ri(c);try{const T=await h(),fe=await T.json().catch(()=>({}));if(!T.ok){Xn(fe?.error||"Team management action failed.");return}await pi()}catch{Xn("Team management action failed.")}finally{ri(null)}},[pi]),Td=a.useCallback(async()=>{const c=Wr.trim();if(c){Ks(!0),Xn(null),ci(null);try{const h=await fetch("/api/taskforce/admin/users/invite",{method:"POST",headers:{"Content-Type":"application/json",...ns()},credentials:"include",body:JSON.stringify({workspaceId:Xs,email:c,role:hr,permissionMode:hr==="member"?go:"read-write"})}),T=await h.json().catch(()=>({}));if(!h.ok){Xn(T?.error||"Failed to send invite.");return}oi(""),T?.inviteEmailSent===!1?ci(`Invite created, but email delivery failed${T?.inviteEmailError?`: ${String(T.inviteEmailError)}`:"."}`):ci("Invite sent."),await pi()}catch{Xn("Failed to send invite.")}finally{Ks(!1)}}},[en,pi,ns,Wr,go,hr]),uc=a.useMemo(()=>Mt.trim().length>0,[Mt]),fl=a.useMemo(()=>si.filter(c=>c.status==="invited"),[si]),hl=a.useMemo(()=>{const c=At.length!==y.length,h=nt.length!==Nt.length,T=kt.length!==Yt.length,fe=q.length!==Yr.length,ce=Cn.length!==mt.length,lt=ta.length>0,Gt=Yn.length>0;return c||h||T||fe||ce||lt||Gt},[y.length,Nt.length,mt.length,Cn.length,At.length,kt.length,q.length,nt.length,Yt.length,ta,Yn]),Id=a.useMemo(()=>Ma.length!==Vd.length||bs.length!==Zd.length,[bs.length,Ma.length]),gl=la,us=a.useMemo(()=>eP(gl),[gl]),yl=a.useMemo(()=>{switch(us.filterBar.kind){case"task-filters":return hl;case"document-filters":return Id;default:return!1}},[Id,hl,us.filterBar.kind]),jd=uc||hl,Nd=Ze==="archived"?ts.length:Ze==="deleted"?ls.length:W.length,kl=Ze==="archived"?Ko.length:Ze==="deleted"?Fi.length:t.filteredTasks.length,Rd=jd?`${kl}/${Nd}`:`${Nd}`,Dd=jd?`${Ze.charAt(0).toUpperCase()+Ze.slice(1)} tasks matching current filters`:`${Ze.charAt(0).toUpperCase()+Ze.slice(1)} tasks`,xu=Ke==="local"&&Wt,Ao=a.useCallback(c=>{if(!c)return"Never";const h=new Date(c);return Number.isNaN(h.getTime())?"Never":h.toLocaleString()},[]),pc=a.useMemo(()=>Ao(aa),[Ao,aa]),Sl=a.useMemo(()=>Ao($a),[Ao,$a]),mi=a.useMemo(()=>Ao(qn),[Ao,qn]),mc=Yi||sa||wa||"None",Os=a.useMemo(()=>AD({runtimeMode:Ke,isAuthenticated:Wt,workspaceSyncStatus:Xt,workspaceCloudSyncEnabled:zt,workspaceSyncSummary:On,workspaceSyncRecommendedAction:hn,workspaceSyncError:mc}),[Ke,Wt,Xt,zt,On,hn,mc]),To=Os.lastError,[fc,hc]=a.useState(Os.status),fi=a.useMemo(()=>{if(_s)return"Repairing";if(Zn&&In==="error")return"Recovering";switch(In){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"}},[In,_s]),un=Mn(),Au=a.useMemo(()=>[{label:"AI profile snapshot",value:`${un.aiProfileSnapshotCount} local profile${un.aiProfileSnapshotCount===1?"":"s"}`},{label:"AI profile raw response",value:`${un.aiProfileSnapshotRawCount} from route`},{label:"Last pushed AI profiles",value:`${un.lastPushedAiProfileCount} tracked`},{label:"AI watermark map",value:`${un.lastPushedAiProfileWatermarkCount} tracked`},{label:"Document snapshot",value:`${un.documentSnapshotCount} local doc${un.documentSnapshotCount===1?"":"s"}`},{label:"Asset snapshot",value:`${un.assetSnapshotCount} local asset${un.assetSnapshotCount===1?"":"s"}`},{label:"Queued full AI sync",value:un.forceFullAiProfilePushQueued?"Yes":"No"},{label:"AI snapshot last fetch",value:un.aiProfileSnapshotLastFetchAt?new Date(un.aiProfileSnapshotLastFetchAt).toLocaleString():"Never"},{label:"AI snapshot fetch error",value:un.aiProfileSnapshotLastFetchError||"None"},{label:"AI snapshot skip reason",value:un.aiProfileSnapshotLastSkipReason||"None"}],[un]),Pd=Os.actionable&&Xt==="syncing"&&In==="active"&&Qt===0;a.useEffect(()=>{if(!Pd){hc(Os.status);return}const c=window.setTimeout(()=>{hc(Os.status)},1200);return()=>window.clearTimeout(c)},[Os.status,Pd]);const gc=a.useCallback(c=>{const h=typeof c.occurredAt=="string"&&c.occurredAt.trim().length>0?c.occurredAt:"unknown-time",T=typeof c.eventType=="string"&&c.eventType.trim().length>0?c.eventType.trim():"sync",fe=c.status==="error"?"failed":"succeeded",ce=Number(c.changeCount),lt=Number.isFinite(ce)?` (${Math.max(0,Math.floor(ce))} change${Math.floor(ce)===1?"":"s"})`:"",Gt=Number(c.requestMs),Qn=Number.isFinite(Gt)?` in ${Math.max(0,Math.floor(Gt))}ms`:"",fn=Number(c.statusCode),Gr=Number.isFinite(fn)?` [${Math.floor(fn)}]`:"",_l=typeof c.errorMessage=="string"&&c.errorMessage.trim().length>0?`: ${c.errorMessage.trim()}`:"";return`${h} ${T} ${fe}${lt}${Qn}${Gr}${_l}`},[]),Tu=a.useMemo(()=>sd&&qa.length===0?[{key:"loading",text:"Loading recent sync events...",tone:"muted"}]:Xc?[{key:"error",text:Xc,tone:"error"}]:qa.length===0?[{key:"empty",text:"No recent sync events recorded.",tone:"muted"}]:qa.map((c,h)=>({key:Pc(c,h),text:gc(c),tone:c.status==="error"?"error":"default"})),[gc,qa,Xc,sd]),kr=a.useMemo(()=>jP(qa),[qa]),vl=a.useMemo(()=>NP(qa),[qa]),Ed=a.useMemo(()=>vl.map((c,h)=>{const T=c.details&&typeof c.details=="object"?c.details:null,fe=String(T?.path||"").trim(),ce=Number(T?.existingReferenceNumber),lt=Number(T?.incomingReferenceNumber),Gt=fe||`Mismatch ${h+1}`,Qn=Number.isFinite(ce)||Number.isFinite(lt)?`Existing ${Number.isFinite(ce)?ce:"?"} vs incoming ${Number.isFinite(lt)?lt:"?"}`:null;return{key:Pc(c,h),pathLabel:Gt,refsLabel:Qn}}),[vl]);a.useLayoutEffect(()=>{const c=ni.current,h=Qc.current;if(!c||!h)return;const T=h.scrollHeight-c.scrollHeight;h.scrollTop=c.scrollTop+Math.max(0,T),ni.current=null},[qa]);const hi=a.useCallback(async()=>{const c=await fetch(`/api/taskforce/sync/events?workspace_id=${encodeURIComponent(en)}&limit=15`,{method:"GET",credentials:"include"});if(!c.ok)throw new Error(`Failed to load sync events (${c.status})`);const h=await c.json().catch(()=>({}));return Array.isArray(h?.events)?h.events.filter(T=>T&&typeof T=="object"):[]},[en]);a.useEffect(()=>{if(!Zi)return;let c=!1;const h=qa.length===0;return h&&rd(!0),hi().then(T=>{if(c)return;const fe=Qc.current;ni.current=fe&&fe.scrollTop>8?{scrollTop:fe.scrollTop,scrollHeight:fe.scrollHeight}:null,ad(ce=>{const lt=ce.length===0?T:TP(ce,T,15);return IP(ce,lt)?ce:lt}),od(null)}).catch(T=>{if(c)return;const fe=T instanceof Error&&T.message.trim().length>0?T.message.trim():"Unable to load recent sync events.";od(fe),h&&ad([])}).finally(()=>{c||h&&rd(!1)}),()=>{c=!0}},[Zi,hi,qa.length,qn,$a,gs,Xt]);const ps=a.useMemo(()=>{switch(fc){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)"}}},[fc]),wl=a.useCallback(async()=>{const c=["Taskforce Sync Manager",`Workspace ID: ${en}`,`Status: ${ps.label}`,`Summary: ${Os.summary}`,`Last successful sync: ${pc}`,`Last pull from cloud: ${Sl}`,`Last push to cloud: ${mi}`,`Last error at: ${un.lastErrorAt?new Date(un.lastErrorAt).toLocaleString():"Never"}`,`Pending local changes: ${Qt}`,`Last error: ${To}`,`Sync stage: ${fi}`,`AI profile snapshot: ${un.aiProfileSnapshotCount}`,`AI profile raw response: ${un.aiProfileSnapshotRawCount}`,`Last pushed AI profiles tracked: ${un.lastPushedAiProfileCount}`,`AI profile watermarks tracked: ${un.lastPushedAiProfileWatermarkCount}`,`AI snapshot last fetch: ${un.aiProfileSnapshotLastFetchAt?new Date(un.aiProfileSnapshotLastFetchAt).toLocaleString():"Never"}`,`AI snapshot fetch error: ${un.aiProfileSnapshotLastFetchError||"None"}`,`AI snapshot skip reason: ${un.aiProfileSnapshotLastSkipReason||"None"}`,`Document snapshot: ${un.documentSnapshotCount}`,`Asset snapshot: ${un.assetSnapshotCount}`,`Reference mismatches detected: ${kr}`,`Queued full AI sync: ${un.forceFullAiProfilePushQueued?"Yes":"No"}`];try{const T=(qa.length>0?qa:await hi()).map(ce=>gc(ce)),fe=[...c,"","Recent sync events",...T.length>0?T:["No recent sync events recorded."]].join(`
6
+ `);await navigator.clipboard.writeText(fe),Xi(!0),window.setTimeout(()=>{Xi(!1)},1800),rt("Sync details copied to clipboard.","success")}catch{Xi(!1),rt("Failed to copy sync details.","error")}},[en,ps.label,Os.summary,pc,Sl,mi,un,Qt,To,fi,kr,rt,qa,hi,gc]),yc=a.useCallback(async()=>{Yc(!1),nd(!0);try{await ja()}finally{nd(!1)}},[ja]),Iu=a.useCallback(()=>{if(!_s){if(Zn){Yc(!0);return}yc()}},[yc,Zn,_s]);a.useEffect(()=>{mo&&(Zn||_s||yc())},[yc,Zn,_s,mo]);const Ld=a.useMemo(()=>Nl(vs)||new Date,[vs]),Ur=a.useMemo(()=>dp(Ld,An),[Ld,An]),Qs=a.useMemo(()=>{const c={mon:"",tue:"",wed:"",thu:"",fri:"",sat:"",sun:""};return Sm.forEach(h=>{const T=gP(h,An);c[h]=Cc(Mf(Ur,T))}),c},[Ur,An]),Md=a.useCallback(c=>{const h=Nl(c);if(!h)return Qs.mon;const T=h.getDay();return Qs[T===1?"mon":T===2?"tue":T===3?"wed":T===4?"thu":T===5?"fri":T===6?Ls?"sat":"fri":Ls?"sun":"fri"]||Qs.mon},[Qs,Ls]),ju=a.useCallback(async()=>{if(!(mr||ti.length===0)){lo(!0);try{for(const c of ti){const h=c.scheduledDate||c.dueDate||ka,T=Md(h);await xe(c.id,{scheduledDate:T,scheduledWeekKey:yP(T),orderInDay:null})}await pt(!0)}finally{lo(!1)}}},[mr,ti,ka,Md,xe,pt]),Nu=a.useCallback(async()=>{if(!(mr||Er.length===0)){lo(!0);try{for(const c of Er)await xe(c.id,{scheduledDate:null,scheduledWeekKey:null,orderInDay:null});await pt(!0)}finally{lo(!1)}}},[mr,Er,xe,pt]),Ru=a.useMemo(()=>Ic(Ur,{month:"short",day:"numeric",year:"numeric"},Aa),[Ur,Aa]),Bd=a.useMemo(()=>{const T=(Ls?An==="sunday"?["sun","mon","tue","wed","thu","fri","sat"]:Sm:["mon","tue","wed","thu","fri"]).map(ce=>{const lt=Nl(Qs[ce])||Ur,Gt=Qs[ce],Qn=ce==="sat"||ce==="sun";return{value:ce,label:`${hP[ce]} ${Ic(lt,{month:"short",day:"numeric"},Aa)}`,color:Qn?"#1e3a8a":"#3b82f6",icon:"Calendar",date:Gt,isPast:Gt<ka,isSelected:Gt===vs,isWeekend:Qn}}),fe=Hi.length>0;return[...Lo?[{value:"backlog",label:"Backlog",color:"#64748b",icon:"Inbox"}]:[],...fe?[{value:"expired",label:"Expired",color:"#ef4444",icon:"AlertTriangle"}]:[],...T]},[Ls,Lo,Qs,Ur,Hi.length,ka,vs,An,Aa]),Du=a.useMemo(()=>{switch(k){case"category":return y;case"type":return(Nt||[]).map(c=>({...c,icon:c.icon||Qd[c.value]?.icon,color:c.color||Qd[c.value]?.color}));case"priority":return Yt;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 an;case"assignee":return mt.map(c=>({value:c.value,label:c.label,icon:c.icon==="HelpCircle"?"Circle":c.icon,color:c.color}));case"status":return[...Yr.filter(c=>c.value!=="done"&&c.value!=="cancelled"),{value:"completed",label:"Completed",icon:Qp("done").icon,color:Qp("done").color}];case"schedule":return Bd;default:return y}},[k,y,Nt,Yt,an,mt,Bd]),m=e.jsxs("div",{className:vt.accountMenuWrap,ref:yd,children:[e.jsx("button",{className:`tf-control-icon ${vt.avatarBtn}`,onClick:()=>Wa(c=>!c),title:Wt?"Account":"Account (Not signed in)","aria-label":Wt?"Account":"Account (Not signed in)","aria-haspopup":"menu","aria-expanded":Zs,children:e.jsx("span",{className:vt.avatarBadge,"aria-hidden":"true",children:Wt?bu:"?"})}),Zs&&e.jsxs("div",{className:vt.accountMenu,role:"menu","aria-label":"Account menu",children:[e.jsxs("div",{className:vt.accountMenuSection,children:[e.jsx("div",{className:vt.accountMenuSectionLabel,children:"Account"}),e.jsx("div",{className:vt.accountMenuHint,children:_d?"Checking sign-in status...":Wt?e.jsx(e.Fragment,{children:wd?e.jsx(e.Fragment,{children:e.jsxs("span",{className:vt.accountIdentityBlock,children:[e.jsx("span",{className:vt.accountIdentityEmail,children:ic}),wu&&oc&&e.jsxs("span",{className:vt.accountIdentityMetaLine,children:[e.jsx("span",{className:vt.accountIdentityMetaLabel,children:"Email"}),e.jsx("span",{className:vt.accountIdentityMetaValue,children:ui})]}),lc&&e.jsxs("button",{"aria-label":`Subscription ${cc}`,className:`${vt.accountIdentityMetaLine} ${vt.accountIdentityMetaAction}`,onClick:()=>{Wa(!1),p()},type:"button",children:[e.jsx("span",{className:vt.accountIdentityMetaLabel,children:"Subscription"}),e.jsx("span",{className:vt.accountIdentityMetaValue,children:cc})]}),e.jsxs("span",{className:vt.accountIdentityMetaLine,children:[e.jsx("span",{className:vt.accountIdentityMetaLabel,children:"Runtime"}),e.jsx("span",{className:vt.accountIdentityMetaValue,children:bd})]}),e.jsxs("span",{className:vt.accountIdentityMetaLine,children:[e.jsx("span",{className:vt.accountIdentityMetaLabel,children:"Environment"}),e.jsx("span",{className:vt.accountIdentityMetaValue,children:_u})]})]})}):"Signed in"}):"Not signed in"})]}),Su&&e.jsxs("div",{className:vt.accountMenuSection,children:[e.jsx("div",{className:vt.accountMenuSectionLabel,children:"Workspaces (Owned + Invited)"}),fa.length===0&&e.jsx("div",{className:vt.accountMenuHint,children:"No workspaces found for this account yet."}),fa.map(c=>e.jsxs("button",{className:`${vt.accountMenuItem} ${c.id===en?vt.accountMenuItemActive:""}`,onClick:()=>Ad(c.id),role:"menuitem",disabled:fo||c.id===en,title:c.description||c.name,children:[e.jsx(Ai,{size:15}),e.jsxs("span",{style:{display:"flex",flexDirection:"column",gap:"2px"},children:[e.jsx("span",{children:c.name}),e.jsx("span",{className:vt.accountMenuMeta,children:c.role})]})]},c.id)),e.jsxs("button",{className:vt.accountMenuItem,onClick:()=>{el(""),Qi(!0),Wa(!1)},role:"menuitem",disabled:fo,children:[e.jsx(tr,{size:15}),"Create Workspace"]}),cd&&e.jsx("div",{className:vt.accountMenuError,children:cd})]}),vd&&e.jsxs("button",{className:vt.accountMenuItem,onClick:()=>{ml()},role:"menuitem",children:[e.jsx(ph,{size:15}),"Team Management"]}),Wt&&e.jsxs("button",{className:vt.accountMenuItem,onClick:()=>{Wa(!1),po(!0)},role:"menuitem",children:[e.jsx(xc,{size:15}),"Edit Profile"]}),e.jsxs("button",{className:vt.accountMenuItem,onClick:()=>{Wa(!1),p()},role:"menuitem",children:[e.jsx(Qu,{size:15}),"Plans"]}),e.jsxs("button",{className:vt.accountMenuItem,onClick:()=>{Wa(!1),Mr(!0)},role:"menuitem",children:[e.jsx(xc,{size:15}),"Account Hub"]}),e.jsxs("button",{className:vt.accountMenuItem,onClick:()=>{Wa(!1),Lr(!0)},role:"menuitem",children:[e.jsx(xi,{size:15}),"Help & Tutorial"]}),Ke==="local"&&!Wt&&!_d&&e.jsxs("button",{className:vt.accountMenuItem,onClick:()=>{ul("login")},role:"menuitem",children:[e.jsx(xc,{size:15}),"Sign In / Register"]}),Wt&&e.jsxs("button",{className:vt.accountMenuItem,onClick:async()=>{Wa(!1),await ys()},role:"menuitem",children:[e.jsx(mh,{size:15}),"Sign Out"]})]})]}),I=a.useCallback(()=>{J(c=>c==="show"?"collapse":c==="collapse"?"hide":"show")},[J]),N=a.useCallback(()=>{te(),S("tasks"),A("add")},[te,A,S]),E=a.useCallback(c=>{const h=t.workstreams.find(T=>T.id===c);te(),H(Rc(h)||c),S("tasks"),A("add")},[t.workstreams,te,A,S,H]),pe=a.useCallback(c=>{cs(c),es(!1),cr(null),mn(!1),lr(""),dr(""),Za("");const h=c.entityType==="workstream"&&ta&&at.initiativeById.get(ta)||null;vn(h?wr(h):""),ca(null)},[at.initiativeById,ta]),ye=a.useCallback((c,h)=>{cr(c),mn(!1),lr(""),dr(""),Za("");const T=c.entityType==="workstream"&&((h?at.initiativeById.get(h):null)||ta&&at.initiativeById.get(ta))||null;vn(T?wr(T):""),ca(null)},[at.initiativeById,ta]),qe=a.useCallback(()=>{cs(null),lr(""),dr(""),Za(""),vn("")},[]),_t=a.useCallback(()=>{cr(null),lr(""),dr(""),Za(""),vn("")},[]),Et=a.useCallback(async()=>{const c=La||so;if(!c)return;const h=!!La,T=$o.trim()||null;try{if(c.entityType==="initiative")if(c.mode==="edit")await t.updateInitiative(c.targetId,{title:ro.trim()||"Untitled Initiative",description:oo.trim()||null,ownerId:T}),Ea({type:"initiative",id:c.targetId}),ca(null),rt("Initiative updated","success");else{const fe=await t.createInitiative({title:ro.trim()||"Untitled Initiative",description:oo.trim()||null,ownerId:T});Ea({type:"initiative",id:fe.id}),ca(null),rt("Initiative created","success")}else{const fe=cn.trim(),ce=fe.length===0?null:$u(at.initiatives,fe);if(fe.length>0&&!ce){rt("Initiative not found by that reference.","error");return}const lt={title:ro.trim()||"Untitled Workstream",description:oo.trim()||null,ownerId:T,initiativeId:ce?.id||null};if(c.mode==="edit")await t.updateWorkstream(c.targetId,lt),h?ca(c.targetId):(Ea({type:"workstream",id:c.targetId}),ca(null)),rt("Workstream updated","success");else{const Gt=await t.createWorkstream(lt);h?ca(Gt.id):(Ea({type:"workstream",id:Gt.id}),ca(null)),rt("Workstream created","success")}}h?_t():qe()}catch(fe){rt(fe instanceof Error?fe.message:"Failed to save planning item.","error")}},[qe,_t,oo,cn,$o,ro,so,La,at.initiatives,t,rt]),Ot=a.useCallback(c=>{Hl(h=>{const T=new Set(h);return T.has(c)?T.delete(c):T.add(c),T})},[]),It=a.useCallback(c=>{Va(h=>h===c?"":c),Tr("")},[]),tn=a.useCallback((c,h)=>{Tr(T=>{const fe=T===c?"":c;return Va(fe&&h||""),fe})},[]),Ts=a.useCallback(c=>{cs(null),cr(null),es(!1),mn(!1),Ea(c?{type:"initiative",id:c}:null),ca(null)},[]),zr=a.useCallback(c=>{cs(null),cr(null),es(!1),mn(!1),Ea(c?{type:"workstream",id:c}:null),ca(null)},[]),Is=a.useCallback(c=>{cr(null),mn(!1),ca(c)},[]),Hr=a.useMemo(()=>{const c=new Map;return mt.forEach(h=>{c.set(h.label,String(h.value))}),c},[mt]),wn=a.useCallback((c,h)=>{if(c==="workstream"&&h){ye({mode:"create",entityType:"workstream"},h);return}if(pe({mode:"create",entityType:c}),c==="workstream"){const T=(h?at.initiativeById.get(h):null)||(ta?at.initiativeById.get(ta):null)||null;vn(T?wr(T):"")}},[pe,ye,at.initiativeById,ta]),gi=a.useCallback((c,h)=>{if(c==="initiative"){const T=at.initiativeById.get(h);if(!T)return;cs({mode:"edit",entityType:"initiative",targetId:h}),lr(T.title),dr(T.description||""),Za(T.ownerLabel&&Hr.get(T.ownerLabel)||""),vn("")}else{const T=at.workstreamById.get(h)||at.standaloneWorkstreams.find(ce=>ce.id===h);if(!T)return;cs({mode:"edit",entityType:"workstream",targetId:h}),lr(T.title),dr(T.description||""),Za(T.ownerLabel&&Hr.get(T.ownerLabel)||"");const fe=T.initiativeId&&at.initiativeById.get(T.initiativeId)||null;vn(fe?wr(fe):"")}ca(null)},[Hr,at.initiativeById,at.standaloneWorkstreams,at.workstreamById]),Io=a.useCallback(async(c,h)=>{const T=t.workstreams.find(Gt=>Gt.id===c);if(!T){rt("Workstream not found.","error");return}const fe=typeof h=="string"?h.trim():h===null?"":cn.trim(),ce=fe.length===0?null:$u(at.initiatives,fe);if(fe.length>0&&!ce){rt("Initiative not found by that reference.","error");return}const lt=ce?.id||null;if((T.initiativeId||null)===lt){rt(lt?"Workstream already belongs to that initiative.":"Workstream is already standalone.","info");return}try{await t.updateWorkstream(c,{initiativeId:lt}),vn(ce?wr(ce):""),rt(lt?"Initiative set":"Initiative removed","success")}catch{rt("Failed to set initiative.","error")}},[cn,at.initiatives,t,rt]),kc=a.useCallback(async(c,h)=>{const T=Jo.get(c);if(!T){rt("Task not found.","error");return}const fe=h||null;if(at.initiativeById.has(c)||at.workstreamById.has(c)){rt("Only execution tasks can be moved into workstreams.","error");return}if(fe&&!at.workstreamById.has(fe)){rt("Workstream not found.","error");return}if((T.workstreamId||null)===fe){rt(fe?"Task already belongs to that workstream.":"Task is already standalone.","info");return}try{const ce=await fetch(`/api/taskforce/task/${c}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({workstreamId:fe})});if(!ce.ok){const lt=await ce.json().catch(()=>({}));rt(lt?.error||"Failed to set workstream.","error");return}await ce.json().catch(()=>null),await pt(!0),rt(fe?"Workstream set":"Workstream removed","success")}catch{rt("Failed to set workstream.","error")}},[pt,Jo,at.initiativeById,at.workstreamById,rt]),Ff=a.useCallback(async(c,h)=>{const T=h.trim();if(!T){rt("Enter a task reference.","error");return}const fe=Om(T),ce=pr.find(lt=>lt.id===T||er(lt)===T||fe!==null&&lt.referenceNumber===fe);if(!ce){rt("Task not found by that reference.","error");return}await kc(ce.id,c)},[kc,pr,rt]),Of=a.useCallback(async(c,h)=>{const T=h.trim();if(!T){rt("Enter a workstream reference.","error");return}const fe=at.initiativeById.get(c);if(!fe){rt("Initiative not found.","error");return}const ce=cf(T),lt=t.workstreams.find(Gt=>Gt.id===T||Rc(Gt)===T||ce!==null&&Gt.referenceNumber===ce);if(!lt){rt("Workstream not found by that reference.","error");return}await Io(lt.id,wr(fe))},[Io,at.initiativeById,t.workstreams,rt]),Tp=a.useCallback(c=>{Va(c),Tr("")},[]),Ip=a.useCallback(c=>{Tr(c),Va(c&&at.workstreamInitiativeIds.get(c)||"")},[at.workstreamInitiativeIds]),Pu=a.useCallback(c=>{const h=km(c,Nr);if(h!==c){const T=Nr.find(fe=>fe.id===c)?.label||"That module";rt(`${T} is not available in this build yet.`,"error");return}S(h)},[rt,S,Nr]),jp=a.useCallback(()=>{if(la==="tasks"&&ya){Ar(!1),Ea(null),ca(null),cs(null);return}if(la!=="tasks"){S("tasks"),Ar(!0);return}Ar(c=>!c)},[ya,la,S]),$f=a.useCallback(c=>{S("tasks"),on(c)},[on,S]),Uf=a.useCallback((c,h)=>{Ir(c),Ho(h?.sessionId??null),Go(T=>T+1),S("annotate")},[S]),zf=a.useCallback(({target:c,sessionId:h})=>{Ir(T=>!T&&!c||T&&c&&T.taskId===c.taskId&&T.taskReferenceLabel===c.taskReferenceLabel&&T.assetId===c.assetId&&T.imageReferenceLabel===c.imageReferenceLabel&&T.path===c.path&&T.displayName===c.displayName?T:c),Ho(T=>T===h?T:h)},[]),Np=a.useMemo(()=>[{value:"created",label:we("standalone.sortCreated")},{value:"updated",label:we("standalone.sortUpdated")},{value:"priority",label:we("standalone.sortPriority")},{value:"complexity",label:we("standalone.sortComplexity")},...uf(Nn,[...t.searchAgnosticTasks,...ts])],[ts,t.searchAgnosticTasks,Nn]),Rp=a.useMemo(()=>[{value:"category",label:we("standalone.groupCategory")},{value:"type",label:we("standalone.groupType")},{value:"priority",label:we("standalone.groupPriority")},{value:"complexity",label:we("standalone.groupComplexity")},{value:"assignee",label:we("standalone.groupAssignee")},{value:"status",label:we("standalone.groupStatus")},{value:"schedule",label:we("standalone.groupSchedule")}],[]),Dp=a.useMemo(()=>Nr.filter(c=>c.enabled),[Nr]),Pp=a.useMemo(()=>[{key:"empty-columns",icon:$==="show"?e.jsx(Lp,{size:16}):$==="collapse"?e.jsx(Mp,{size:16}):e.jsx(fh,{size:16}),title:we($==="show"?"standalone.showEmptyColumns":$==="collapse"?"standalone.compressEmptyColumns":"standalone.hideEmptyColumns"),onClick:I,active:$!=="show"},{key:"compressed-cards",icon:zs?e.jsx(Am,{size:16}):e.jsx(hh,{size:16}),title:we(zs?"standalone.expandCards":"standalone.compressCards"),onClick:()=>Di(!zs),active:zs}],[zs,I,$]),Hf=a.useMemo(()=>[{key:"filter-toggle",icon:e.jsx(Tm,{size:16}),title:we("standalone.toggleFilters"),onClick:()=>Ga(!xr),active:xr,className:yl?u.filterGlow:""}],[yl,Ga,xr]),Gf=a.useMemo(()=>{switch(us.filterBar.kind){case"task-filters":return e.jsx(DD,{categoryFilterOptions:Uc,typeFilterOptions:zc,priorities:Yt,taxonomyDisplayLabels:Bn,filterCategories:At,setFilterCategories:Ut,filterTypes:nt,setFilterTypes:Tt,filterPriorities:kt,setFilterPriorities:Dn,filterStatus:q,setFilterStatus:ee,filterAssignees:Cn,setFilterAssignees:ua,assigneeOptions:mt,initiativeFilterOptions:$i,selectedInitiativeId:ta,setSelectedInitiativeId:Tp,workstreamFilterOptions:Hc,selectedWorkstreamId:Yn,setSelectedWorkstreamId:Ip,taskScope:Ze,setTaskScope:Wn,showArchive:Bs,setShowArchive:Dr,fetchArchive:qo,onDeleteAllDeleted:()=>{const c=ls.length;c===0||!window.confirm(`Permanently delete ${c} deleted task${c===1?"":"s"}? This cannot be undone.`)||Qe()},clearFilters:()=>{Ne(),Va(""),Tr("")}});case"document-filters":return e.jsx(PD,{typeFilters:Ma,setTypeFilters:ur,attachmentFilters:bs,setAttachmentFilters:En,clearFilters:()=>{ur(Vd.map(c=>c.value)),En(Zd.map(c=>c.value))}});default:return e.jsx(ND,{})}},[mt,Uc,Ne,ls.length,bs,Ma,Cn,At,kt,q,nt,Tp,Ip,$i,Yt,ta,Yn,En,ur,ua,Ut,Dn,ee,Tt,Va,Tr,Dr,Wn,Bs,Ze,Bn,zc,Hc,us.filterBar.kind,qo,Qe]),Vf=a.useMemo(()=>[{key:"zen-toggle",icon:e.jsx(gh,{size:16,fill:U?"currentColor":"none"}),title:we(U?"standalone.exitZenMode":"standalone.enterZenMode"),onClick:()=>X(),active:U}],[U,X]),Zf=a.useMemo(()=>({search:e.jsx(ID,{value:Mt,placeholder:we("standalone.searchPlaceholder"),active:uc,onChange:Rt,onClear:()=>Rt(""),clearTitle:we("standalone.clearSearchTitle")}),sort:e.jsx(mm,{label:e.jsxs(e.Fragment,{children:[e.jsx(yh,{size:12})," ",we("standalone.sortLabel")]}),value:Y,options:Np,onChange:c=>ze(c),trailingAction:e.jsx("button",{className:`tf-control-icon ${u.sortDirectionBtn}`,onClick:()=>t.toggleSortOrder(),title:t.sortOrder==="desc"?we("standalone.sortDirectionDescTitle"):we("standalone.sortDirectionAscTitle"),children:t.sortOrder==="desc"?e.jsx(bm,{size:14}):e.jsx(_m,{size:14})})}),"divider-primary":e.jsx(fm,{}),grouping:e.jsx(mm,{label:e.jsxs(e.Fragment,{children:[e.jsx(Qu,{size:12})," ",we("standalone.groupLabel")]}),value:k,options:Rp,onChange:c=>b(c)}),"divider-secondary":e.jsx(fm,{}),"task-display-actions":e.jsx(Zu,{actions:Pp})}),[k,Rp,Pu,uc,t,Mt,b,Rt,ze,Y,Np,Pp,us.moduleId]),qf=a.useMemo(()=>({"add-task":e.jsx(jD,{icon:e.jsx(tr,{size:16}),label:we("standalone.addTask"),onClick:N}),"add-document":null}),[N]),bl=a.useMemo(()=>{const c={tasks:e.jsx(Ch,{size:18}),docs:e.jsx(ep,{size:18}),annotate:e.jsx(_h,{size:18}),workflows:e.jsx(bh,{size:18}),agents:e.jsx(Ud,{size:18})};return e.jsxs("aside",{className:pn.workspaceToolRail,"aria-label":"Workspace tools",children:[e.jsxs("div",{className:pn.workspaceToolRailMain,children:[e.jsx("button",{type:"button",className:`${pn.workspaceToolButton} ${la==="tasks"&&ya?pn.workspaceToolButtonActive:""}`.trim(),onClick:jp,title:la==="tasks"&&ya?"Collapse planning trays":"Planning","aria-label":la==="tasks"&&ya?"Collapse planning trays":"Planning",children:la==="tasks"&&ya?e.jsx(Ac,{size:18}):e.jsx(kh,{size:18})}),e.jsx("div",{className:pn.workspaceToolRailDivider}),Dp.map(h=>e.jsx("button",{type:"button",className:`${pn.workspaceToolButton} ${la===h.id?pn.workspaceToolButtonActive:""}`.trim(),onClick:()=>Pu(h.id),title:h.label,"aria-label":h.label,children:c[h.id]},h.id))]}),e.jsxs("div",{className:pn.workspaceToolRailBottom,children:[e.jsx("div",{className:pn.workspaceToolRailDivider}),e.jsx("button",{type:"button",className:`${pn.workspaceToolButton} ${w==="settings"?pn.workspaceToolButtonActive:""}`.trim(),onClick:()=>{Ye("general"),A("settings")},title:"Workspace Settings","aria-label":"Workspace Settings",children:e.jsx(Cm,{size:18})})]})]})},[w,Pu,jp,ya,la,Ye,A,Dp]),Eu=a.useRef(null),Kf=e.jsx(Z0,{open:ya,leftOffset:56,initiatives:at.initiatives,standaloneWorkstreams:at.standaloneWorkstreams,activeInitiativeId:ta,activeWorkstreamId:Yn,expandedInitiativeIds:Wc,detail:Gc,editor:so,secondaryPane:Ui,assigneeOptions:mt.map(c=>({value:String(c.value),label:c.label})),draftInitiativeSummary:Vc,draftTitle:ro,draftDescription:oo,draftOwner:$o,draftInitiativeId:cn,onChangeDraftTitle:lr,onChangeDraftDescription:dr,onChangeDraftOwner:Za,onChangeDraftInitiativeId:vn,onCollapseTreePane:()=>ir(!0),onExpandTreePane:()=>ir(!1),onCollapsePrimaryPane:()=>es(!0),onExpandPrimaryPane:()=>es(!1),onCollapseSecondaryPane:()=>mn(!0),onExpandSecondaryPane:()=>mn(!1),onBackFromSecondary:()=>{cr(null),ca(null)},treeCollapsed:Mc,primaryCollapsed:Oo,secondaryCollapsed:Bc,onCancelEditor:qe,onSubmitEditor:Et,onCreateInitiative:()=>wn("initiative"),onCreateWorkstream:()=>wn("workstream"),onCreateTaskInWorkstream:E,onCreateWorkstreamInInitiative:c=>wn("workstream",c),onAssignInitiativeToWorkstream:Io,onOpenTaskById:on,onAttachTaskToWorkstreamByReference:Ff,onAttachWorkstreamToInitiativeByReference:Of,onToggleInitiative:Ot,onSelectInitiative:It,onSelectWorkstream:tn,onOpenInitiativeDetails:Ts,onOpenWorkstreamDetails:zr,onOpenNestedWorkstreamDetails:Is,onEditInitiative:c=>gi("initiative",c),onEditWorkstream:c=>gi("workstream",c),onArchiveInitiative:c=>{t.archiveInitiative(c).then(()=>{rt("Initiative archived","success")}).catch(h=>{rt(h instanceof Error?h.message:"Failed to archive initiative.","error")})},onUnarchiveInitiative:c=>{t.unarchiveInitiative(c).then(()=>{rt("Initiative unarchived","success")}).catch(h=>{rt(h instanceof Error?h.message:"Failed to unarchive initiative.","error")})},onArchiveWorkstream:c=>{t.archiveWorkstream(c).then(()=>{rt("Workstream archived","success")}).catch(h=>{rt(h instanceof Error?h.message:"Failed to archive workstream.","error")})},onUnarchiveWorkstream:c=>{t.unarchiveWorkstream(c).then(()=>{rt("Workstream unarchived","success")}).catch(h=>{rt(h instanceof Error?h.message:"Failed to unarchive workstream.","error")})}}),Yf=us.headerSections.map(c=>{const h=Zf[c];return h?e.jsx(ut.Fragment,{children:h},c):null}).filter(Boolean),Jf=us.primaryAction?qf[us.primaryAction]:null;return e.jsxs("div",{className:`${pn.standaloneWrapper} ${U?u.zenModeEnabled:""}`,"data-theme":Xe,children:[e.jsx(TD,{projectName:Ra,currentWorkspaceId:en,runtimeMode:Ke,theme:Xe,meta:l?null:e.jsxs(e.Fragment,{children:[e.jsx("span",{className:u.taskCountBadge,title:Dd,children:Rd}),xu&&e.jsx("button",{className:"tf-control-icon",onClick:()=>qi(!0),title:`Sync manager: ${ps.label} | Last success: ${pc}`,style:{marginLeft:"6px",height:"24px",width:"24px",padding:0,borderRadius:"999px",border:`1px solid ${ps.border}`,background:ps.background,color:ps.color,display:"inline-flex",alignItems:"center",justifyContent:"center"},children:ps.icon==="off"?e.jsx(Sh,{size:16}):e.jsx(vh,{size:16})})]}),actions:e.jsxs(e.Fragment,{children:[l&&e.jsx("button",{className:"tf-control-icon",onClick:_,title:"Back",children:"Back"}),!l&&e.jsxs(e.Fragment,{children:[Yf,Jf]}),!l&&e.jsx(Zu,{actions:Vf}),!l&&e.jsx(Zu,{actions:Hf}),m]})}),e.jsx(Df,{notice:Eo,onDismiss:j}),yn&&e.jsx("div",{className:he.authBlockedBanner,children:"Authentication required for this environment. Use the Account menu to sign in."}),!l&&xr&&Gf,l?e.jsx("div",{className:`${pn.standalonePage} ${pn.standaloneContent} ${u.appScrollbar} tf-scrollbar`,style:{position:"relative",display:"flex",flex:1,minHeight:0,overflowY:"auto",overflowX:"hidden",scrollbarGutter:"stable"},children:e.jsx(a.Suspense,{fallback:e.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1},children:e.jsx(Fa,{size:20,className:u.spinner})}),children:e.jsx(AP,{...t,currentTheme:Xe,projectName:Ra,currentWorkspaceId:en,apiBaseUrl:bo,connectedEnvironmentSource:t.config?.cloudAuthBaseUrl||t.config?.apiBaseUrl||"",embedded:!0,shellOwnsScroll:!0})})}):la==="docs"&&Rr?e.jsxs("div",{className:`${pn.standalonePage} ${pn.standaloneContent}`,style:{position:"relative",display:"flex",flex:1,minHeight:0,overflow:"hidden",paddingLeft:"56px"},children:[bl,e.jsx(a.Suspense,{fallback:e.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1},children:e.jsx(Fa,{size:20,className:u.spinner})}),children:e.jsx(_P,{tasks:W,runtimeMode:Ke,apiBaseUrl:t.config?.apiBaseUrl||"",cloudAuthBaseUrl:t.config?.cloudAuthBaseUrl||"",typeFilters:Ma,attachmentFilters:bs,onTypeFiltersChange:ur,onAttachmentFiltersChange:En,requestedDocPath:du,requestedDocAssetId:uu,onRequestedDocHandled:()=>{Uo(null),zo(null)},enableTaskGeneration:!0})})]}):la==="annotate"&&Zo?e.jsxs("div",{className:`${pn.standalonePage} ${pn.standaloneContent}`,style:{position:"relative",display:"flex",flex:1,minHeight:0,overflow:"hidden",paddingLeft:"56px"},children:[bl,e.jsx(a.Suspense,{fallback:e.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1},children:e.jsx(Fa,{size:20,className:u.spinner})}),children:e.jsx(bP,{runtimeMode:Ke,apiBaseUrl:t.config?.apiBaseUrl||"",cloudAuthBaseUrl:t.config?.cloudAuthBaseUrl||"",workspaceId:en,sessionLoadReady:$c,requestedTarget:Ba,requestedSessionId:jr,requestedOpenVersion:pu,resolveTaskReferenceLabel:Kl,resolveImageReferenceLabel:Yl,onOpenTarget:Uf,onContextChange:zf,onBackToTask:$f})})]}):la==="workflows"?e.jsxs("div",{className:`${pn.standalonePage} ${pn.standaloneContent}`,style:{position:"relative",display:"flex",flex:1,minHeight:0,overflow:"hidden",paddingLeft:"56px"},children:[bl,e.jsx(a.Suspense,{fallback:e.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1},children:e.jsx(Fa,{size:20,className:u.spinner})}),children:e.jsx(CP,{availableWorkflows:_r,availableEnvironments:za,exportEnvironment:rs,exportWorkflowsPath:t.exportWorkflowsPath,exportingResource:to,exportResult:Es,onExportEnvironmentChange:t.setExportEnvironment,onExportWorkflows:Ue,onRefreshWorkflows:Ft,onFetchWorkflowTemplate:t.fetchWorkflowTemplate,onFetchWorkflowOverrideNames:t.fetchWorkflowOverrideNames,onSaveWorkflowTemplateDraft:t.saveWorkflowTemplateDraft,onResetWorkflowTemplateDraft:t.resetWorkflowTemplateDraft})})]}):la==="agents"?e.jsxs("div",{className:`${pn.standalonePage} ${pn.standaloneContent}`,style:{position:"relative",display:"flex",flex:1,minHeight:0,overflow:"hidden",paddingLeft:"56px"},children:[bl,e.jsx(a.Suspense,{fallback:e.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",flex:1},children:e.jsx(Fa,{size:20,className:u.spinner})}),children:e.jsx(xP,{workspaceId:en})})]}):e.jsxs("div",{className:`${pn.standalonePage} ${pn.standaloneContent} `,style:{position:"relative",opacity:t.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:ya?`${56+Xl+6}px`:"62px",paddingRight:k==="schedule"&&Mo?`${up}px`:0},children:[bl,e.jsx("div",{ref:Eu,style:{position:"absolute",inset:0,zIndex:35,pointerEvents:"none"}}),e.jsxs("div",{style:{position:"relative",width:"100%",minWidth:0,flex:1,minHeight:0,display:"flex",flexDirection:"column",overflow:"hidden"},children:[t.loadingTasks&&zi.length>0&&e.jsx("div",{className:u.boardRefreshIndicator,"aria-live":"polite","aria-label":"Refreshing tasks",children:e.jsx(Fa,{size:14,className:u.spinner})}),e.jsx(bD,{tasks:Zc,allTasks:[],columns:Du,groupBy:k,scheduleDates:Qs,searchQuery:Mt,filterCategories:At,filterTypes:nt,filterPriorities:kt,filterStatus:q,filterAssignees:Cn,assigneeOptions:mt,scheduleFilteredTaskIds:Array.from(Jl),copiedId:me,taxonomies:Nn,types:Nt,priorities:Yt,onUpdateTask:xe,onTaskClick:c=>Re(c),onOpenTaskById:on,onCopyId:Ee,onToggleInProgress:Zt,onToggleReview:Rn,onToggleComplete:Lt,onToggleCancel:xt,onSetStatus:Vi,onArchiveTask:G,onAddTaskToColumn:qc,showTaskCardStatusLabel:se,onScheduleDaySelected:c=>{Bo(c);const h=Nl(c);h&&Wo(`${h.getFullYear()}-${String(h.getMonth()+1).padStart(2,"0")}`)},persistedScrollLeft:k==="schedule"?Fo:void 0,onScrollLeftChange:c=>{k==="schedule"&&zl(c)},emptyColumnMode:$,categories:y,compressed:zs,readOnlyMode:Ze==="deleted"?"deleted":Ze==="archived"?"archived":null,recentlyChangedTaskIds:t.recentlyChangedTaskIds,sortBy:Y,sortOrder:t.sortOrder,planningDropTargets:Eu.current?Ci.createPortal(Kf,Eu.current):null,onAssignTaskToWorkstream:kc,onAssignWorkstreamToInitiative:Io,workstreams:t.workstreams,initiatives:t.initiatives,onUnarchive:c=>{if(Ze==="deleted"){const h=Wi.get(c);if(!h)return;Te(h.id);return}je(c)},onDelete:c=>{if(Ze==="deleted"){const h=Wi.get(c);if(!h||!window.confirm("Permanently delete this task? This cannot be undone."))return;Se(h.id);return}ke(c)}},`${k}-${Du.map(c=>String(c.value)).join("|")}-${Qs.mon}`),k==="schedule"&&!Mo&&e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>{Ea(null),Pi(!0)},title:"Show Schedule Sidebar",style:{position:"absolute",top:"10px",right:"10px",zIndex:20},children:e.jsx(Ac,{size:16})})]}),k==="schedule"&&e.jsx(kP,{open:Mo,onClose:()=>Pi(!1),scheduleSelectedDate:vs,setScheduleSelectedDate:Bo,scheduleCalendarMonth:Ha,setScheduleCalendarMonth:Wo,scheduleShowWeekends:Ls,setScheduleShowWeekends:no,scheduleShowBacklog:Lo,setScheduleShowBacklog:ao,scheduleOnlyExpired:is,setScheduleOnlyExpired:Ul,expiredScheduledCount:ei,overdueDueCount:Ql,expiredLeafCandidates:ti,expiredRecoveryCandidates:Er,onMoveExpiredToSelectedWeek:ju,onMoveExpiredToBacklog:Nu,scheduleBulkBusy:mr,globalWeekStartsOn:An,resolvedLocale:Aa,todayDateOnly:ka,scheduleBaseTasks:Oi,scheduleWeekStart:Ur,scheduleWeekLabel:Ru})]}),e.jsxs(qr,{isOpen:w==="add",onClose:Gi,title:de?rr?.isDeleted?"Deleted Task":"Edit Task":"New Task",size:Pa?"full":"xl",theme:Xe,headerActions:e.jsx("button",{className:"tf-control-icon",onClick:()=>ws(c=>!c),title:Pa?"Exit full screen":"Enter full screen","aria-label":Pa?"Exit full screen":"Enter full screen",children:Pa?e.jsx(Mp,{size:18}):e.jsx(Lp,{size:18})}),draggable:!Pa,closeOnOverlayClick:!1,children:[e.jsx(Rf,{editingTaskId:de,loading:O,autoSaveState:St,title:z,currentTask:rr,currentTaskWorkstream:Cr,currentTaskInitiative:Ni,workstreamInput:Z,onWorkstreamInputChange:H,onSetWorkstreamForCurrentTask:Hn,handleSubmit:V,resetForm:te,handleCopyId:Ee,copiedId:me,tasks:W,handleToggleInProgress:Zt,handleToggleReview:Rn,handleToggleComplete:Lt,handleToggleCancel:xt,handleSetStatus:Vi,handleArchiveTask:G,handleRestoreDeletedTask:rr?.deletedRecordId?c=>{Te(c)}:void 0,handlePermanentlyDeleteDeletedTask:rr?.deletedRecordId?c=>{window.confirm("Permanently delete this task? This cannot be undone.")&&(Se(c),te(),A("tasks"))}:void 0}),e.jsx(Nf,{editingTaskId:de,error:R,title:z,description:be,checklistItems:Ce,category:Fe,type:Oe,priority:M,complexity:oe,manualComplexityEnabled:ue,approach:x,assignee:B,scheduledDate:F,dueDate:ae,workstreamInput:Z,formTaxonomies:$e,onTaxonomyChange:(c,h)=>et(T=>({...T,[c]:h})),taxonomies:Nn,comments:tt,newCommentText:Ct,contextFiles:De,currentWorkspaceId:en,apiBaseUrl:dl,descriptionFocused:ht,showMarkdownHelp:$t,showChecklist:bn,checklistEnabled:Pe,showComments:Kt,categories:y,types:Nt,priorities:Yt,taxonomyDisplayLabels:Bn,assigneeOptions:mt,workstreams:t.workstreams,copiedId:me,onTitleChange:re,onDescriptionChange:We,onChecklistItemsChange:Ve,onCategoryChange:ve,onTypeChange:v,onPriorityChange:C,onComplexityChange:D,onApproachChange:c=>{P(c),et(h=>({...h,approach:c}))},onAssigneeChange:Ae,onScheduledDateChange:ne,onDueDateChange:ie,onWorkstreamInputChange:H,onNewCommentTextChange:i,onDescriptionFocusedChange:yt,onShowMarkdownHelpChange:Ht,onShowChecklistChange:nn,onShowCommentsChange:_n,onOpenSettings:c=>{Ye(c),A("settings")},onSubmit:V,commentsEndRef:bt,onAddComment:()=>qt(Ct),onOpenTaskById:on,onAddContextFile:c=>{let h=De;Je(T=>(h=[...T,c],h)),Ie(!0),de&&xe(de,{attachments:h})},onRemoveContextFile:async c=>{let h=De;Je(T=>(h=T.filter((fe,ce)=>ce!==c),h)),Ie(!0),de&&xe(de,{attachments:h})},onUpdateContextCaption:(c,h)=>{let T=De;Je(fe=>(T=fe.map((ce,lt)=>lt!==c?ce:typeof ce=="string"?{path:ce,caption:h,timestamp:new Date().toISOString()}:{...ce,caption:h}),T)),Ie(!0),de&&xe(de,{attachments:T})},onCopyId:Ee,onToggleInProgress:Zt,onToggleReview:Rn,onToggleComplete:Lt,onToggleCancel:xt,onSetStatus:Vi,onArchiveTask:G,onUnarchive:c=>{if(rr?.isDeleted){const h=Wi.get(c);if(!h)return;Te(h.id);return}je(c)},currentTask:rr})]}),e.jsx(qr,{isOpen:w==="settings",onClose:Gi,title:"Settings",size:"xl",theme:Xe,draggable:!0,isSettings:!0,closeOnOverlayClick:!1,children:e.jsx(a.Suspense,{fallback:e.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"2rem"},children:e.jsx(Fa,{size:20,className:u.spinner})}),children:e.jsx(wP,{settingsModel:st,onSectionChange:Ye})})}),e.jsx(qr,{isOpen:!!Kn,onClose:ga,title:"Date Warning",size:"sm",theme:Xe,draggable:!1,closeOnOverlayClick:!1,children:e.jsxs("div",{className:`${u.form} tf-inline-stack-sm`,style:{padding:"16px",gap:"12px"},children:[e.jsx("p",{className:"tf-text-body",children:"Due date is before scheduled date."}),Kn&&e.jsxs("p",{className:"tf-text-helper",children:["Due: ",Kn.dueDate," · Scheduled: ",Kn.scheduledDate]}),e.jsxs("div",{className:u.formActions,children:[e.jsx("button",{className:u.cancelBtn,onClick:ga,children:"Go Back"}),e.jsx("button",{className:u.submitBtn,onClick:or,children:"Save Anyway"})]})]})}),e.jsx(qr,{isOpen:ed,onClose:()=>Lr(!1),title:"Quick Start",size:"md",theme:Xe,draggable:!0,children:e.jsxs("div",{className:`${dt.form} ${it.modalBody}`,children:[e.jsx("p",{className:it.mutedText,children:"Use this quick guide to get productive in Taskforce dashboard mode."}),e.jsxs("div",{children:[e.jsx("strong",{children:"1. Capture work"}),e.jsxs("p",{className:it.sectionText,children:["Click ",e.jsx("code",{children:"Add Task"}),", write a short title, and save."]})]}),e.jsxs("div",{children:[e.jsx("strong",{children:"2. Plan the board"}),e.jsxs("p",{className:it.sectionText,children:["Use ",e.jsx("code",{children:"Sort"}),", ",e.jsx("code",{children:"Group"}),", and ",e.jsx("code",{children:"Filters"})," in the header."]})]}),e.jsxs("div",{children:[e.jsx("strong",{children:"3. Execute and stage"}),e.jsxs("p",{className:it.sectionText,children:["Move tasks through ",e.jsx("code",{children:"Task"}),", ",e.jsx("code",{children:"In Progress"}),", ",e.jsx("code",{children:"Review"}),", and ",e.jsx("code",{children:"Done"}),"."]})]}),e.jsxs("div",{children:[e.jsx("strong",{children:"4. Archive finished work"}),e.jsx("p",{className:it.sectionText,children:"Archive completed/cancelled tasks to keep active board signal high."})]}),e.jsxs("div",{className:`${dt.formActions} ${it.modalActionsEnd}`,children:[e.jsx("button",{className:u.cancelBtn,onClick:()=>{Lr(!1),A("settings"),Ye("general")},children:"Open Settings"}),e.jsx("button",{className:u.submitBtn,onClick:()=>Lr(!1),children:"Close Tutorial"})]})]})}),e.jsx(qr,{isOpen:Kc,onClose:()=>po(!1),title:"Edit Profile",size:"sm",theme:Xe,draggable:!0,footer:e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:u.secondaryButton,onClick:()=>po(!1),disabled:di,children:"Cancel"}),e.jsx("button",{type:"button",className:u.primaryUpdateBtn,onClick:()=>{dc()},disabled:di||!nc.trim(),children:di?"Saving...":"Save Profile"})]}),children:e.jsxs("div",{className:`${dt.form} ${it.modalBody}`,children:[e.jsx("p",{className:it.sectionText,children:"Update the name shown around your account and shared workspace surfaces."}),e.jsxs("label",{className:it.inlineFieldLabel,children:["Display name",e.jsx("input",{className:u.input,type:"text",value:nc,onChange:c=>fd(c.target.value),placeholder:"Display name",disabled:di})]}),e.jsxs("label",{className:it.inlineFieldLabel,children:["Email",e.jsx("input",{className:u.input,type:"email",value:ui,readOnly:!0,disabled:!0})]}),ac&&e.jsx("p",{className:`${he.loginError} ${it.errorText}`,children:ac}),hd&&!ac&&e.jsx("p",{className:it.errorText,children:hd})]})}),e.jsx(qr,{isOpen:uo,onClose:()=>Mr(!1),title:"Account Hub",size:"md",theme:Xe,draggable:!0,children:e.jsxs("div",{className:`${dt.form} ${it.modalBody}`,children:[e.jsx("p",{className:it.mutedText,children:"Manage sign in, profile, and workspace controls from one place."}),e.jsxs("div",{className:vt.accountHubCard,children:[e.jsx("strong",{children:"Authentication"}),e.jsx("p",{className:it.sectionText,children:Ke==="cloud"?sn?Wt?"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."}),e.jsx("p",{className:it.sectionTextSpaced,children:Wt?wd?e.jsxs(e.Fragment,{children:["Signed in as ",e.jsx("span",{className:vt.accountIdentityEmail,children:ic})]}):"Signed in":"Signed in as: not signed in"}),Ke==="cloud"&&sn&&!Wt&&e.jsx("p",{className:it.sectionTextTop,children:"Use the `/login` screen to sign in."})]}),e.jsxs("div",{className:vt.accountHubCard,children:[e.jsx("strong",{children:"Profile & Account"}),e.jsx("p",{className:it.sectionText,children:"Profile editing and account preferences will live here."})]}),e.jsxs("div",{className:vt.accountHubCard,children:[e.jsx("strong",{children:"Billing"}),Wt?Ke!=="cloud"?e.jsx("p",{className:it.sectionText,children:"Billing remains cloud-backed in local runtime and uses your connected cloud account."}):e.jsxs(e.Fragment,{children:[ko&&e.jsx("p",{className:it.sectionTextSpaced,children:"Loading billing status..."}),ol&&e.jsx("p",{className:`${he.loginError} ${it.errorText}`,children:ol}),So&&e.jsx("p",{className:`${he.loginError} ${it.errorText}`,children:So}),vo&&e.jsx("p",{className:it.errorText,children:vo}),e.jsxs("p",{className:it.sectionTextSpaced,children:["Plan: ",e.jsx("code",{children:String(xs?.planId||"n/a")})," · ","Entitlement: ",e.jsx("code",{children:String(xs?.entitlementState||"n/a")})]}),e.jsxs("p",{className:it.sectionText,children:["Stripe status: ",e.jsx("code",{children:String(xs?.stripeStatus||"n/a")}),xs?.effectiveUntil?` · Effective until ${new Date(xs.effectiveUntil).toLocaleString()}`:""]}),e.jsx("div",{className:it.wrapRow,children:e.jsxs("label",{className:`${vt.accountMenuMeta} ${it.inlineFieldLabel}`,children:["Interval",e.jsxs("select",{className:u.input,value:As,onChange:c=>Fs(c.target.value==="year"?"year":"month"),disabled:Ws,children:[e.jsx("option",{value:"month",children:"Monthly"}),e.jsx("option",{value:"year",children:"Yearly"})]})]})}),e.jsxs("div",{className:it.actionRowEnd,children:[e.jsx("button",{className:u.cancelBtn,onClick:()=>{_o()},disabled:Ws||ko,children:"Refresh Billing"}),e.jsx("button",{className:u.cancelBtn,onClick:()=>{xd()},disabled:Ws||!xs?.stripeSubscriptionId,children:"Update Interval"}),e.jsx("button",{className:u.cancelBtn,onClick:()=>{Cu()},disabled:Ws||!xs?.stripeCustomerId,children:"Manage Billing"}),e.jsx("button",{className:u.submitBtn,onClick:()=>{Cd()},disabled:Ws,children:Ws?"Working...":"Start Checkout"})]})]}):e.jsx("p",{className:it.sectionText,children:"Sign in to manage subscription billing."})]}),e.jsxs("div",{className:vt.accountHubCard,children:[e.jsx("strong",{children:"Workspace Audit Log"}),e.jsx("p",{className:it.sectionText,children:"Audit entries are workspace-scoped for the active workspace, not global account history."}),e.jsxs("p",{className:it.sectionText,children:["Active workspace: ",e.jsx("code",{children:en})]}),e.jsx("div",{className:it.actionRowEnd,children:e.jsx("button",{className:u.cancelBtn,onClick:()=>{Mr(!1),ml(),ho("audit")},disabled:!vd,children:"Open Workspace Audit"})})]}),e.jsxs("div",{className:vt.accountHubCard,children:[e.jsx("strong",{children:"Workspace Cloud Sync"}),e.jsx("p",{className:it.sectionText,children:wo?zt?`Enabled · ${ps.label}`:"Disabled":"Sign in to cloud account to enable workspace sync."}),Yi&&e.jsx("p",{className:`${he.loginError} ${it.errorText}`,children:Yi}),e.jsx("div",{className:it.actionRowEnd,children:e.jsx("button",{className:u.cancelBtn,disabled:!wo||ll,onClick:()=>{Sd(!zt)},children:zt?"Disable Sync":"Enable Sync"})})]}),e.jsxs("div",{className:`${dt.formActions} ${it.modalActionsEnd}`,children:[e.jsx("button",{className:u.cancelBtn,onClick:()=>{Mr(!1),Lr(!0)},children:"Help & Tutorial"}),e.jsx("button",{className:u.submitBtn,onClick:()=>Mr(!1),children:"Close"})]})]})}),e.jsx(qr,{isOpen:tl,onClose:()=>ai(!1),title:"Team Management",size:"md",theme:Xe,draggable:!0,children:e.jsxs("div",{className:`${dt.form} ${it.modalBody}`,children:[ec==="personal"&&e.jsx("p",{className:he.loginError,children:"Team management is only available in TEAM accounts."}),Cs&&e.jsx("p",{className:he.loginError,children:Cs}),e.jsxs("div",{className:`${u.settingsTabs} tf-scrollbar tf-scrollbar--track-transparent tf-scrollbar--compact`,children:[e.jsx("button",{className:`${u.settingsTabBtn} ${Br==="members"?u.settingsTabBtnActive:""}`,onClick:()=>{ho("members"),Co()},children:"Members"}),e.jsx("button",{className:`${u.settingsTabBtn} ${Br==="invites"?u.settingsTabBtnActive:""}`,onClick:()=>ho("invites"),children:"Invites"}),e.jsx("button",{className:`${u.settingsTabBtn} ${Br==="audit"?u.settingsTabBtnActive:""}`,onClick:()=>{ho("audit"),yr(Ys)},children:"Audit Log"})]}),Br==="members"&&e.jsxs("div",{className:vt.accountHubCard,children:[tc&&e.jsx("p",{className:it.mutedText,children:"Loading members..."}),!tc&&si.length===0&&e.jsx("p",{className:it.mutedText,children:"No users found."}),!tc&&si.map(c=>e.jsxs("div",{className:it.memberRow,children:[e.jsx("div",{className:it.memberTitle,children:c.displayName||c.email}),e.jsxs("div",{className:vt.accountMenuMeta,children:[c.email," · ",c.status,c.disabled?" · deactivated":""]}),e.jsxs("div",{className:it.memberActions,children:[e.jsxs("select",{className:`${u.input} ${it.selectRole}`,value:c.role,onChange:h=>{xo(c.userId,async()=>fetch(`/api/taskforce/admin/users/${encodeURIComponent(c.userId)}/role`,{method:"PATCH",headers:{"Content-Type":"application/json",...ns()},credentials:"include",body:JSON.stringify({workspaceId:Xs,role:h.target.value})}))},disabled:qs===c.userId,children:[e.jsx("option",{value:"owner",children:"Owner"}),e.jsx("option",{value:"admin",children:"Admin"}),e.jsx("option",{value:"member",children:"Member"})]}),c.role==="member"&&e.jsxs("select",{className:`${u.input} ${it.selectPermission}`,value:c.permissionMode,onChange:h=>{xo(c.userId,async()=>fetch(`/api/taskforce/admin/users/${encodeURIComponent(c.userId)}/permission-mode`,{method:"PATCH",headers:{"Content-Type":"application/json",...ns()},credentials:"include",body:JSON.stringify({workspaceId:Xs,mode:h.target.value})}))},disabled:qs===c.userId,children:[e.jsx("option",{value:"read-write",children:"Read / Write"}),e.jsx("option",{value:"read-only",children:"Read Only"})]}),e.jsx("button",{className:u.cancelBtn,disabled:qs===c.userId,onClick:()=>{xo(c.userId,async()=>fetch(`/api/taskforce/admin/users/${encodeURIComponent(c.userId)}/disable`,{method:"PATCH",headers:{"Content-Type":"application/json",...ns()},credentials:"include",body:JSON.stringify({workspaceId:Xs,disabled:!c.disabled})}))},children:c.disabled?"Reactivate":"Deactivate"}),c.status==="invited"&&e.jsx("button",{className:u.cancelBtn,disabled:qs===c.userId,onClick:()=>{xo(c.userId,async()=>fetch(`/api/taskforce/admin/users/${encodeURIComponent(c.userId)}/invite/revoke`,{method:"POST",headers:{"Content-Type":"application/json",...ns()},credentials:"include",body:JSON.stringify({workspaceId:Xs})}))},children:"Revoke Invite"}),e.jsx("button",{className:u.cancelBtn,disabled:qs===c.userId,onClick:()=>{xo(c.userId,async()=>fetch(`/api/taskforce/admin/users/${encodeURIComponent(c.userId)}?workspaceId=${encodeURIComponent(Xs)}`,{method:"DELETE",headers:ns(),credentials:"include"}))},children:"Remove"})]})]},c.userId))]}),Br==="invites"&&e.jsxs("div",{className:vt.accountHubCard,children:[sl&&e.jsx("p",{className:it.sectionText,children:sl}),e.jsxs("div",{className:u.pathInputGroup,children:[e.jsx("label",{className:`${u.label} ${it.labelFixed}`,children:"Email"}),e.jsx("input",{className:u.input,value:Wr,onChange:c=>oi(c.target.value),placeholder:"name@company.com"})]}),e.jsxs("div",{className:u.pathInputGroup,children:[e.jsx("label",{className:`${u.label} ${it.labelFixed}`,children:"Role"}),e.jsxs("select",{className:`${u.input} ${it.selectRole}`,value:hr,onChange:c=>ii(c.target.value==="admin"?"admin":"member"),children:[e.jsx("option",{value:"member",children:"Member"}),e.jsx("option",{value:"admin",children:"Admin"})]}),hr==="member"&&e.jsxs("select",{className:`${u.input} ${it.selectPermission}`,value:go,onChange:c=>al(c.target.value==="read-only"?"read-only":"read-write"),children:[e.jsx("option",{value:"read-write",children:"Read / Write"}),e.jsx("option",{value:"read-only",children:"Read Only"})]}),e.jsx("button",{className:u.submitBtn,disabled:gr||!Wr.trim()||ec!=="team",onClick:()=>{Td()},children:gr?"Sending...":"Send Invite"})]}),e.jsxs("div",{className:it.inviteRow,children:[e.jsx("div",{className:it.listHeading,children:"Pending Invites"}),fl.length===0&&e.jsx("p",{className:it.mutedText,children:"No pending invites."}),fl.map(c=>e.jsxs("div",{className:it.memberRow,children:[e.jsx("div",{className:it.memberTitle,children:c.displayName||c.email}),e.jsxs("div",{className:vt.accountMenuMeta,children:[c.email," · ",c.role]})]},c.userId))]})]}),Br==="audit"&&e.jsxs("div",{className:vt.accountHubCard,children:[li&&e.jsx("p",{className:it.mutedText,children:"Loading audit entries..."}),!li&&ud.length===0&&e.jsx("p",{className:it.mutedText,children:"No audit events for this workspace."}),!li&&e.jsx("div",{className:it.auditList,children:ud.map(c=>e.jsxs("div",{className:it.memberRow,children:[e.jsx("div",{className:vt.accountMenuMeta,children:new Date(c.createdAt).toLocaleString()}),e.jsx("div",{className:it.memberTitle,children:c.action}),e.jsxs("div",{className:vt.accountMenuMeta,children:[c.actorUserId," (",c.actorRole,")"]})]},c.id))}),e.jsxs("div",{className:it.auditPager,children:[e.jsx("button",{className:u.cancelBtn,disabled:li||Ys===0,onClick:()=>{yr(Ys-1)},children:"Previous"}),e.jsxs("span",{className:vt.accountMenuMeta,children:["Page ",Ys+1," of ",md]}),e.jsx("button",{className:u.cancelBtn,disabled:li||!pd||Ys+1>=md,onClick:()=>{yr(Ys+1)},children:"Next"})]})]}),e.jsx("div",{className:`${dt.formActions} ${it.modalActionsEnd}`,children:e.jsx("button",{className:u.cancelBtn,onClick:()=>ai(!1),children:"Close"})})]})}),e.jsx(qr,{isOpen:fu,onClose:()=>Qi(!1),title:"Create Workspace",size:"sm",theme:Xe,draggable:!0,footer:e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:u.secondaryButton,onClick:()=>Qi(!1),children:"Cancel"}),e.jsx("button",{type:"button",className:u.primaryUpdateBtn,onClick:()=>pl({intent:"create-workspace"}),children:"Continue to Setup"})]}),children:e.jsx("div",{className:`${dt.form} ${it.modalBody}`,children:e.jsx("p",{className:it.sectionText,children:"Start a new workspace with the guided setup flow. You will choose the workspace name, description, and starter taxonomy library before anything is created."})})}),e.jsx(qr,{isOpen:Zi,onClose:()=>{qi(!1)},title:"Sync Manager",size:"md",theme:Xe,draggable:!0,children:e.jsxs("div",{className:`${dt.form} ${Ge.syncStatusModal}`,style:{gap:"10px"},children:[e.jsxs("div",{className:Ge.syncStatusTop,children:[e.jsx("div",{className:Ge.syncStatusHeaderInfo,children:e.jsxs("div",{className:Ge.syncStatusMetaHeader,children:[e.jsx("div",{className:Ge.syncStatusBadge,style:{borderColor:ps.border,background:ps.background,color:ps.color},children:ps.label}),e.jsxs("span",{className:Ge.syncStatusLabel,children:["Workspace: ",e.jsx("code",{children:vu})]})]})}),e.jsx("label",{className:Ge.syncToggle,children:e.jsxs("span",{className:[Ge.syncToggleControl,zt?Ge.syncToggleControlEnabled:Ge.syncToggleControlDisabled,ll?Ge.syncToggleControlBusy:"",wo?"":Ge.syncToggleControlBlocked].filter(Boolean).join(" "),children:[e.jsx("input",{className:Ge.syncToggleInput,type:"checkbox",role:"switch","aria-label":"Enable Sync",checked:zt,disabled:!wo||ll,onChange:c=>{Sd(c.target.checked)}}),e.jsx("span",{className:`${Ge.syncToggleState} ${Ge.syncToggleStateOn}`,children:"On"}),e.jsx("span",{className:`${Ge.syncToggleState} ${Ge.syncToggleStateOff}`,children:"Off"}),e.jsx("span",{className:Ge.syncToggleThumb})]})})]}),e.jsxs("div",{className:Ge.syncStatusSummaryCompact,children:[e.jsx("span",{className:Ge.syncStatusLabel,children:"Health"}),e.jsx("span",{className:Ge.syncStatusSummaryValue,children:On})]}),_s&&e.jsxs("div",{className:Ge.syncStatusRepairBanner,children:[e.jsxs("div",{className:Ge.syncStatusRepairHeader,children:[e.jsxs("div",{className:Ge.syncStatusRepairBadge,children:[e.jsx(Fa,{size:13,className:u.spinner}),e.jsx("span",{children:"Repair In Progress"})]}),e.jsx("span",{className:Ge.syncStatusRepairMeta,children:"Advanced recovery mode"})]}),e.jsx("span",{className:Ge.syncStatusRepairText,children:kr>0?`Taskforce is clearing the saved sync cursor and reconciling workspace state from the cloud again, including ${kr} detected reference mismatch${kr===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."})]}),e.jsx("div",{className:Ge.syncStatusSectionHeader,children:e.jsx("span",{className:Ge.syncStatusLabel,children:"Current Session"})}),e.jsxs("div",{className:Ge.syncStatusCompactGrid,children:[e.jsxs("div",{className:Ge.syncStatusCompactItem,children:[e.jsx("span",{className:Ge.syncStatusLabel,children:"Stage"}),e.jsx("span",{className:Ge.syncStatusValue,children:fi})]}),e.jsxs("div",{className:Ge.syncStatusCompactItem,children:[e.jsx("span",{className:Ge.syncStatusLabel,children:"Local Changes"}),e.jsx("span",{className:Ge.syncStatusValue,children:Qt})]}),e.jsxs("div",{className:Ge.syncStatusCompactItem,children:[e.jsx("span",{className:Ge.syncStatusLabel,children:"Last Successful"}),e.jsx("span",{className:Ge.syncStatusValue,children:pc})]})]}),e.jsx("div",{className:Ge.syncStatusSectionHeader,children:e.jsx("span",{className:Ge.syncStatusLabel,children:"Activity"})}),e.jsxs("div",{className:Ge.syncStatusCompactGrid,children:[e.jsxs("div",{className:Ge.syncStatusCompactItem,children:[e.jsx("span",{className:Ge.syncStatusLabel,children:"Last Pull"}),e.jsx("span",{className:Ge.syncStatusValue,children:Sl})]}),e.jsxs("div",{className:Ge.syncStatusCompactItem,children:[e.jsx("span",{className:Ge.syncStatusLabel,children:"Last Push"}),e.jsx("span",{className:Ge.syncStatusValue,children:mi})]})]}),To!=="None"&&e.jsxs("div",{className:Ge.syncStatusPanel,style:{background:"rgba(239, 68, 68, 0.05)",borderColor:"rgba(239, 68, 68, 0.2)"},children:[e.jsxs("div",{className:Ge.syncStatusSectionHeader,style:{marginTop:0},children:[e.jsx(Nc,{size:12,color:"#fda4af"}),e.jsxs("span",{className:Ge.syncStatusLabel,style:{color:"#fda4af"},children:["Last Error (",un.lastErrorAt?new Date(un.lastErrorAt).toLocaleTimeString():"Recent",")"]})]}),e.jsx("span",{className:`${Ge.syncStatusValue} ${Ge.syncStatusValueError}`,children:To})]}),kr>0&&e.jsxs("div",{className:Ge.syncStatusPanel,style:{background:"rgba(250, 204, 21, 0.08)",borderColor:"rgba(250, 204, 21, 0.22)"},children:[e.jsxs("div",{className:Ge.syncStatusPanelHeader,children:[e.jsx("span",{className:Ge.syncStatusLabel,style:{color:"#fde68a"},children:"Identifier Integrity"}),e.jsxs("span",{className:Ge.syncStatusPanelMeta,children:[kr," mismatch",kr===1?"":"es"," detected"]})]}),e.jsx("span",{className:Ge.syncStatusValue,children:"Document or image reference numbers disagreed during normal sync. Standard sync now preserves existing identifiers; use Repair to reconcile mismatched references deliberately."}),Ed.length>0&&e.jsx("div",{style:{marginTop:"10px",display:"flex",flexDirection:"column",gap:"8px"},children:Ed.map(c=>e.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:[e.jsx("span",{className:Ge.syncStatusValue,style:{fontSize:"12px",wordBreak:"break-all"},children:c.pathLabel}),c.refsLabel?e.jsx("span",{className:Ge.syncStatusPanelMeta,children:c.refsLabel}):null]},c.key))})]}),e.jsxs("div",{className:Ge.syncStatusPanel,children:[e.jsxs("div",{className:Ge.syncStatusPanelHeader,children:[e.jsx("span",{className:Ge.syncStatusLabel,children:"Local Sync Diagnostics"}),e.jsx("span",{className:Ge.syncStatusPanelMeta,style:{fontSize:"10px"},children:"AI profiles & metadata"})]}),e.jsx("div",{className:Ge.syncStatusCompactGrid,style:{gridTemplateColumns:"repeat(2, 1fr)"},children:Au.map(c=>e.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",gap:"8px"},children:[e.jsx("span",{className:Ge.syncStatusLabel,style:{fontSize:"9px",textTransform:"capitalize"},children:c.label}),e.jsx("span",{className:Ge.syncStatusValue,style:{fontSize:"11px",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:c.value})]},c.label))})]}),e.jsxs("div",{className:Ge.syncStatusPanel,children:[e.jsx("div",{className:Ge.syncStatusPanelHeader,children:e.jsx("span",{className:Ge.syncStatusLabel,children:"Recent Events"})}),e.jsx("div",{ref:Qc,className:Ge.syncStatusEventsList,style:{height:"120px"},children:Tu.map(c=>e.jsx("div",{className:[Ge.syncStatusEventItem,c.tone==="error"?Ge.syncStatusEventItemError:"",c.tone==="muted"?Ge.syncStatusEventItemMuted:""].filter(Boolean).join(" "),style:{padding:"6px 8px",borderRadius:"6px"},children:e.jsx("span",{className:Ge.syncStatusEventLine,style:{fontSize:"11px"},children:c.text})},c.key))})]}),e.jsxs("div",{className:`${dt.formActions} ${Ge.syncStatusActions}`,children:[e.jsxs("div",{className:Ge.syncStatusSecondaryActions,children:[e.jsx("button",{className:u.cancelBtn,onClick:Iu,disabled:_s,title:_s?"Repair is running now.":mo?"Repair is queued and will start when the current sync finishes.":Zn?"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:_s?e.jsxs(e.Fragment,{children:[e.jsx(Fa,{size:14,className:u.spinner}),e.jsx("span",{style:{marginLeft:"6px"},children:"Repairing..."})]}):mo?"Repair Queued":"Repair"}),e.jsxs("button",{className:u.cancelBtn,onClick:()=>{wl()},title:"Copy the current sync manager report for support or AI troubleshooting.",children:[e.jsx(Rl,{size:14}),e.jsx("span",{style:{marginLeft:"6px"},children:Jc?"Copied":"Copy Report"})]})]}),e.jsxs("div",{className:Ge.syncStatusPrimaryActions,children:[e.jsx("div",{className:Ge.syncStatusPrimaryActionSlot,children:Ke==="local"&&!Wt?e.jsx("button",{className:u.submitBtn,onClick:()=>{ul("login")},children:"Sign In / Register"}):e.jsx("div",{className:Ge.syncStatusActionPlaceholder,"aria-hidden":"true"})}),e.jsx("div",{className:Ge.syncStatusPrimaryActionSlot,children:e.jsx("button",{className:u.submitBtn,onClick:()=>{ba()},disabled:Zn,children:Zn?e.jsxs(e.Fragment,{children:[e.jsx(Fa,{size:14,className:u.spinner}),"Syncing..."]}):e.jsxs(e.Fragment,{children:[e.jsx(wh,{size:14}),"Sync"]})})})]})]})]})}),os&&Ci.createPortal(e.jsx("div",{className:`${dt.overlay} ${dt.unsavedOverlay}`,style:{zIndex:2e3},children:e.jsxs("div",{className:`tf-surface-modal tf-modal-shell ${dt.modal} ${dt.unsavedModal}`,"data-theme":Xe,children:[e.jsx("div",{className:`tf-modal-header ${dt.unsavedHeader}`,children:e.jsxs("div",{className:`tf-modal-title ${dt.unsavedTitle}`,children:[e.jsx(Nc,{size:20}),"Unsaved Changes"]})}),e.jsx("div",{className:`${dt.form} ${dt.unsavedContent}`,children:e.jsx("p",{className:dt.unsavedText,children:"You have unsaved changes. Would you like to save them?"})}),e.jsxs("div",{className:`${dt.formActions} ${dt.unsavedActions}`,children:[e.jsx("button",{className:u.cancelBtn,onClick:()=>Pn(!1),title:"Close dialog and continue editing",children:"Keep Editing"}),e.jsx("button",{className:u.destructiveBtn,onClick:Lc,title:"Discard unsaved changes and leave",children:"Discard"}),e.jsxs("button",{className:u.submitBtn,onClick:Ri,disabled:O,title:"Save changes and leave",children:[O?e.jsx(Fa,{size:16,className:u.spinner}):e.jsx(xm,{size:16}),"Save"]})]})]})}),document.body),ot&&Ci.createPortal(e.jsx("div",{className:Ln.overlay,children:e.jsxs("div",{className:Ln.browser,children:[e.jsxs("div",{className:Ln.header,children:[e.jsxs("div",{className:Ln.pathInfo,children:[e.jsx(Ai,{size:14}),e.jsx("span",{children:ct||"Project Root"})]}),e.jsxs("div",{className:Ln.actions,children:[ct&&e.jsx("button",{className:u.helpLink,onClick:()=>{const c=ct.split("/").filter(Boolean);c.pop(),jn(c.length?c.join("/")+"/":"")},children:"Back"}),e.jsx("button",{className:u.helpLink,onClick:()=>rn(!1),children:"Close"})]})]}),e.jsxs("div",{className:Ln.list,children:[ea&&typeof ea=="object"&&e.jsxs("div",{className:`${Ln.item} ${Ln.itemFile} ${Ln.itemCurrent}`,onClick:()=>ra(ct),children:[e.jsx(Xr,{size:14})," Select Current: ./",ct||"(root)"]}),wt.map(c=>e.jsxs("div",{className:Ln.item,onClick:()=>jn(ct+c+"/"),children:[e.jsx(Ai,{size:14})," ",c,"/"]},c)),Sn.map(c=>e.jsxs("div",{className:`${Ln.item} ${Ln.itemFile}`,onClick:()=>ra(ct+c),children:[e.jsx(ep,{size:14})," ",c]},c)),wt.length===0&&Sn.length===0&&e.jsx("div",{className:`${Ln.item} ${Ln.empty}`,children:"No items found"})]})]})}),document.body)]})}function PP(t){const n=t.setupState,s=t.runtimeMode,r=t.isAuthenticated,o=!!(n&&s==="cloud"&&r&&n.globalSetupState==="missing"),d=!!(n&&s==="local"&&n.globalSetupState==="missing"),l=!!(n&&s==="cloud"&&r&&n.workspaceSetupState==="missing"),p=!!(n&&s==="local"&&n.workspaceSetupState==="missing"),g=!!(n&&(n.forceSetup||n.forceGlobalSetup||n.forceWorkspaceSetup||o||l||d||p));if(!g)return{setupGateActive:!1,needsGlobalSetup:!1,needsWorkspaceSetup:!1,hasSetupReadError:!1,phase:"ready"};const _=!!(n&&(n.forceSetup||n.forceGlobalSetup||o||d)),w=!!(n&&(n.forceSetup||n.forceWorkspaceSetup||l||p)),A=!!(_&&n?.globalSetupState==="missing"),y=!!(w&&n?.workspaceSetupState==="missing"),k=!!(_&&n?.globalSetupState==="unreadable"),b=!!(w&&n?.workspaceSetupState==="unreadable"),L=k||b;return{setupGateActive:g,needsGlobalSetup:A,needsWorkspaceSetup:y,hasSetupReadError:L,phase:L?"setup-read-error":A?"needs-global-setup":y?"needs-workspace-setup":"ready"}}const Ju="/taskforce/assets/taskforce-BxLPokNB.png";function EP(){const t=globalThis.__DEBUG_MODE__;return typeof t=="boolean"?t:!1}function LP(){const t=Date.now().toString(36);return{email:`debug+${t}@example.com`,password:"DebugPass123!",displayName:`Debug ${t.slice(-4).toUpperCase()}`}}function vm(t){return{categories:!!t?.categories?.length,types:!!t?.types?.length,priorities:!!t?.priorities?.length}}function wm({config:t={},initialTaskId:n,onTaskCountChange:s,onHeaderMouseDown:r,isDragging:o,onClose:d,mode:l="standalone"}){const p=Lm(),g=a.useMemo(()=>new URLSearchParams(p.search),[p.search]),_=String(g.get("planId")||"").trim(),w=String(g.get("planVersionId")||"").trim(),A=String(g.get("interval")||"").trim(),y=p.pathname==="/pricing",k=p.pathname==="/plans",b=p.pathname==="/"&&String(g.get("screen")||"").trim().toLowerCase()==="plans",L="/?screen=plans&gate=plan_selection_required",S=Em(),[$,J]=a.useState(""),[U,X]=a.useState(""),[q,ee]=a.useState(""),[W,Re]=a.useState("login"),[V,te]=a.useState(""),[xe,de]=a.useState(""),[O,R]=a.useState(""),[z,re]=a.useState(null),[be,We]=a.useState(null),[Ce,Ve]=a.useState("unknown"),[Fe,ve]=a.useState(!1),[Oe,v]=a.useState(null),[M,C]=a.useState(null),[oe,D]=a.useState(null),[f,x]=a.useState(!1),[P,B]=a.useState(0),[Ae,F]=a.useState(0),[ne,ae]=a.useState(()=>Date.now()),[ie,Z]=a.useState("core"),[H,ue]=a.useState(!1),[Pe,se]=a.useState(null),[$e,et]=a.useState(null),[tt,Ct]=a.useState(""),[i,De]=a.useState(""),[Je,Ie]=a.useState("local"),[ht,yt]=a.useState([]),[$t,Ht]=a.useState(""),[bn,nn]=a.useState(!1),[Kt,_n]=a.useState(null),[qt,Hn]=a.useState(!1),on=a.useMemo(()=>lf(),[]),[Nn,Nt]=a.useState(on),[Yt,Bn]=a.useState(()=>on.find(Q=>Q.isDefaultStarter)?.id||on[0]?.id||""),[an,me]=a.useState(()=>vm(on.find(Q=>Q.isDefaultStarter)||on[0]||null)),[Ee,Zt]=a.useState(!1),[Lt,Rn]=a.useState(null),[xt,G]=a.useState(!1),[ke,je]=a.useState(null),Te=Sk({config:t,initialTaskId:n,onTaskCountChange:s,onClose:d}),{runtimeMode:Se,workspaceSwitchingEnabled:Qe,currentWorkspaceId:pt,configLoaded:Mt,cloudAuthConfigured:Rt,authRequiredForApi:At,authBlocked:Ut,isAuthenticated:nt,hasBetaAccess:Tt,authSessionResolved:kt,workspaceBootstrapPending:Dn,bootstrapPhase:Cn,bootstrapError:ua,setupState:mt,runtimeCapabilities:Ze,refreshSetupContext:Wn,retryBootstrapChecks:Y,createWorkspace:ze,saveWorkspaceProfile:Ne,fetchWorkspaces:st,applyWorkspaceSyncStateSnapshot:Le,settingsModel:Xe,fetchTasks:xn,loginWithCredentials:ft,registerWithCredentials:Gn,requestEmailVerification:Vn,confirmEmailVerification:pa,requestPasswordReset:An,confirmPasswordReset:va,inspectInviteAcceptance:ln,acceptInviteWithToken:gt,joinInviteWithToken:Dt,authUserEmail:Pt,currentTheme:Bt,logout:Ye}=Te,Ke=a.useMemo(()=>Nn.find(Q=>Q.id===Yt)||Nn.find(Q=>Q.isDefaultStarter)||Nn[0]||null,[Yt,Nn]);Fm(Bt);const Un=lp,Tn=a.useMemo(()=>{const Q=String(t.cloudAuthBaseUrl||t.apiBaseUrl||"").trim();return Q?Q.replace(/\/+$/,""):""},[t.apiBaseUrl,t.cloudAuthBaseUrl]),sn=Se==="cloud"||Ze?.runtimeMode==="cloud",yn=!sn&&Rt&&!!Tn,Wt=typeof window<"u"&&/^app\./i.test(window.location.hostname),Ds=Se==="cloud"&&At,hs=Se==="cloud"&&Ut,Fn=p.pathname==="/login",Jt=p.pathname==="/setup",kn=p.pathname==="/coming-soon",na=Wt?(!nt||Ut)&&!y&&!k&&!b:(Ds&&!nt||hs)&&!y&&!k&&!b,zt=Se==="cloud"&&nt&&!Tt&&!y&&!k&&!b,In=Se==="cloud"&&nt&&kt&&ke?.canAccessApp===!1&&ke?.canAccessPlans!==!1&&!y&&!k&&!b,Xt=a.useMemo(()=>String(new URLSearchParams(p.search).get("step")||"").trim().toLowerCase(),[p.search]),On=a.useMemo(()=>String(new URLSearchParams(p.search).get("intent")||"").trim().toLowerCase(),[p.search]),hn=Jt&&Xt==="workspace"&&On==="create-workspace",Zn=l!=="widget"&&!kt&&!Fn&&!Jt&&!y&&!k&&!b&&(Se==="cloud"||Wt),Qt=a.useMemo(()=>PP({setupState:mt?{globalSetupState:mt.globalSetupState,workspaceSetupState:mt.workspaceSetupState,runtimeMode:mt.runtimeMode,workspaceId:mt.workspaceId,mode:mt.mode,forceSetup:mt.forceSetup,forceGlobalSetup:mt.forceGlobalSetup,forceWorkspaceSetup:mt.forceWorkspaceSetup}:null,runtimeMode:Se,isAuthenticated:nt}),[mt,Se,nt]),dn=Qt.setupGateActive,rt=Qt.needsGlobalSetup,Oa=Qt.needsWorkspaceSetup,aa=Qt.hasSetupReadError,$a=l!=="widget"&&kt&&!na&&!zt&&!y&&!k&&!b&&(!Mt||Dn||Cn==="stalled")&&(Jt||Se==="cloud"||Wt),qn=a.useMemo(()=>Cn==="auth"?"Verifying session...":Cn==="workspace"?"Resolving workspace access...":Cn==="config"?"Loading configuration...":"Checking account, workspace access, and setup status...",[Cn]),gs=a.useCallback((Q,ot,rn)=>{const wt=String(Q||"").trim().toLowerCase(),Sn=String(ot||"").trim().toLowerCase();return!!(!wt||wt==="system default workspace"||Sn&&wt===Sn)},[]);a.useEffect(()=>{const Q=mt?.mode==="operations"?"operations":"core";Z(Q)},[mt?.mode]),a.useEffect(()=>{if(Se!=="cloud"||!nt||!kt){je(null);return}je(null);let Q=!1;return(async()=>{try{const ot=await fetch("/api/taskforce/account/access-status",{method:"GET",credentials:"include"}),rn=await ot.json().catch(()=>({}));if(Q||!ot.ok)return;const wt=String(rn?.gate||"").trim().toLowerCase();if(wt!=="ok"&&wt!=="plan_selection_required"&&wt!=="misconfigured"&&wt!=="missing_entitlement"){je(null);return}je({gate:wt,canAccessApp:rn?.canAccessApp===!0,canAccessPlans:rn?.canAccessPlans!==!1,message:typeof rn?.message=="string"?rn.message:null})}catch{Q||je(null)}})(),()=>{Q=!0}},[kt,nt,Se,p.pathname,p.search]),a.useEffect(()=>{if(hn){Ct(""),De("");return}if(!mt)return;const Q=String(mt.workspace?.name||"").trim(),ot=String(mt.suggestedWorkspaceName||"").trim(),rn=gs(Q,mt.workspaceId,mt.workspace?.description)?ot:Q;Ct(rn||ot||Q),De(String(mt.workspace?.description||""))},[mt?.workspace?.name,mt?.workspace?.description,mt?.suggestedWorkspaceName,mt?.workspaceId,hn,gs]),a.useEffect(()=>{if(!Jt||Xt!=="workspace")return;if(String(new URLSearchParams(p.search).get("source")||"").trim().toLowerCase()==="cloud"&&yn){Ie("cloud"),Hn(!1);return}Ie("local")},[yn,Jt,p.search,Xt]);const wa=a.useCallback(async()=>{if(!yn||!nt){yt([]),Ht("");return}nn(!0),_n(null);try{const Q=await fetch(`${Tn}/api/taskforce/workspaces`,{method:"GET",credentials:"include"}),ot=await Q.json().catch(()=>({}));if(!Q.ok||ot?.success===!1){yt([]),Ht(""),_n(ot?.error||`Failed to load cloud projects (${Q.status})`);return}const rn=Array.isArray(ot?.workspaces)?ot.workspaces.map(wt=>({id:String(wt?.id||"").trim(),name:String(wt?.name||wt?.id||"").trim(),description:typeof wt?.description=="string"?wt.description:null})).filter(wt=>wt.id.length>0):[];yt(rn),Ht(wt=>wt&&rn.some(Sn=>Sn.id===wt)?wt:rn[0]?.id||"")}catch{yt([]),Ht(""),_n("Failed to load cloud projects.")}finally{nn(!1)}},[yn,nt,Tn]);a.useEffect(()=>{Je==="cloud"&&wa()},[wa,Je]),a.useEffect(()=>{if(!Jt||Xt!=="workspace"||Je==="cloud")return;let Q=!1;return Zt(!0),Rn(null),fetch("/api/taskforce/taxonomy-library",{method:"GET",credentials:"include"}).then(async ot=>{if(!ot.ok)throw new Error(`Failed to load starter libraries (${ot.status})`);const rn=await ot.json().catch(()=>({})),wt=Array.isArray(rn?.packs)?rn.packs:[];Q||wt.length===0||(Nt(wt),Bn(Sn=>wt.some(ct=>ct.id===Sn)?Sn:wt.find(ct=>ct.isDefaultStarter)?.id||wt[0]?.id||""))}).catch(ot=>{Q||(Nt(on),Rn(ot instanceof Error?ot.message:"Failed to load starter libraries."))}).finally(()=>{Q||Zt(!1)}),()=>{Q=!0}},[on,Jt,Xt,Je]),a.useEffect(()=>{me(vm(Ke))},[Yt,Ke]);const sa=a.useMemo(()=>{const Q=new URLSearchParams(p.search).get("next")||"/";return!Q.startsWith("/")||Q==="/login"?"/":Q},[p.search]),ba=a.useMemo(()=>{const Q=String(new URLSearchParams(p.search).get("mode")||"").trim().toLowerCase();return Q==="register"||Q==="verify"||Q==="forgot"||Q==="reset"||Q==="invite"?Q:"login"},[p.search]),ja=a.useMemo(()=>String(new URLSearchParams(p.search).get("token")||"").trim(),[p.search]),Mn=a.useCallback(Q=>{const ot=new URLSearchParams(p.search);Q==="login"?ot.delete("mode"):ot.set("mode",Q);const rn=ot.toString();S(`/login${rn?`?${rn}`:""}`,{replace:!0})},[p.search,S]),en=a.useCallback(async Q=>{if(!Qe)return!1;const ot=await st();return ot.success?(Array.isArray(ot.workspaces)?ot.workspaces.length:0)===0?(S("/setup?step=workspace",{replace:!0}),!0):!1:Q?(S("/setup?step=workspace",{replace:!0}),!0):!1},[st,S,Qe]);a.useEffect(()=>{Fn&&(Re(ba),ba==="verify"&&ja&&te(ja),ba==="reset"&&ja&&de(ja),ba==="invite"&&ja&&R(ja))},[Fn,ba,ja]),a.useEffect(()=>{if(!Fn||W!=="invite"||!O.trim())return;let Q=!0;return(async()=>{const ot=await ln(O);if(Q)if(ot.success){re(ot.email||null),We(ot.workspaceId||null),ve(ot.passwordRequired===!0);const rn=!!(nt&&Pt&&ot.email&&Pt.trim().toLowerCase()===ot.email.trim().toLowerCase()),wt=ot.passwordRequired===!0?"new_user":rn?"existing_user_ready":"existing_user_signed_out";Ve(wt),v(wt==="new_user"?"Create your account password to join this workspace.":wt==="existing_user_ready"?"Invite ready. Confirm to join this workspace.":"Sign in with the invited account to join this workspace."),C(null),D(null)}else re(null),We(null),Ve("invalid"),ve(!1),C(ys(ot)),D(ot.code||ot.state||null)})(),()=>{Q=!1}},[Fn,W,O,ln,nt,Pt]),a.useEffect(()=>{W==="invite"&&Ce==="existing_user_signed_out"&&z&&J(Q=>Q.trim()?Q:z)},[W,Ce,z]),a.useEffect(()=>{if(!(P>Date.now()||Ae>Date.now()))return;const ot=window.setInterval(()=>ae(Date.now()),1e3);return()=>window.clearInterval(ot)},[P,Ae]);const ma=Math.max(0,Math.ceil((P-ne)/1e3)),fa=Math.max(0,Math.ceil((Ae-ne)/1e3)),Ja=ma>0,Na=fa>0,ys=Q=>{const ot=Q.error||"Request failed.",rn=Q.code||Q.state;return rn?`[${rn}] ${ot}`:ot};a.useEffect(()=>{if(l!=="widget"&&!Dn){if(zt){kn||S("/coming-soon",{replace:!0});return}if(kn&&!zt){S("/",{replace:!0});return}if(na){if(!Fn){const Q=`${p.pathname}${p.search}${p.hash}`;S(`/login?next=${encodeURIComponent(Q||"/")}`,{replace:!0});return}return}else{const Q=Fn&&W==="invite"&&O.trim().length>0;Fn&&nt&&!Q&&S(sa,{replace:!0})}if(In){if(!b){const Q=encodeURIComponent(String(ke?.gate||"plan_selection_required"));S(`/?screen=plans&gate=${Q}`,{replace:!0})}return}if(dn){if(aa){(!Jt||Xt!=="error")&&S("/setup?step=error",{replace:!0});return}if(rt){(!Jt||Xt!=="global")&&S("/setup?step=global",{replace:!0});return}if(Oa){(!Jt||Xt!=="workspace")&&S("/setup?step=workspace",{replace:!0});return}Jt&&S("/",{replace:!0});return}Jt&&mt&&!hn&&S("/",{replace:!0})}},[l,na,zt,In,Fn,Jt,kn,k,b,ke?.gate,dn,mt,aa,hn,rt,Oa,Xt,Dn,p.pathname,p.search,p.hash,S,sa]),a.useEffect(()=>{if(l==="widget"||Se!=="local"||!Mt||Fn||Jt)return;const Q=String(pt||"").trim().toLowerCase();(!Q||Q==="default")&&S("/setup?step=workspace",{replace:!0})},[l,Se,Mt,Fn,Jt,pt,S]);const nr=a.useCallback(async()=>{G(!0);try{await Y()}finally{G(!1)}},[Y]),Ra=a.useCallback(async()=>{await Ye(),S("/login",{replace:!0})},[Ye,S]);if(l==="widget")return e.jsx(xR,{...Te,onHeaderMouseDown:r,isDragging:o,onClose:d});if(y){const Q=new URLSearchParams(p.search);return Q.set("screen","plans"),e.jsx(Wp,{to:`/?${Q.toString()}${p.hash||""}`,replace:!0})}if(k){const Q=new URLSearchParams(p.search);return Q.set("screen","plans"),e.jsx(Wp,{to:`/?${Q.toString()}${p.hash||""}`,replace:!0})}if(Zn)return e.jsx("div",{className:pn.standaloneWrapper,"data-theme":Bt,children:e.jsx("div",{className:he.loginView,children:e.jsxs("div",{className:he.loginCard,children:[e.jsxs("div",{className:he.authBrandRow,children:[e.jsx("img",{src:Un,alt:"Taskforce",className:he.loginLogo}),e.jsx("h1",{className:he.loginTitle,children:"Loading Taskforce"})]}),e.jsx("p",{className:he.loginSubtitle,children:"Checking your session..."})]})})});if($a)return e.jsx("div",{className:pn.standaloneWrapper,"data-theme":Bt,children:e.jsx("div",{className:he.loginView,children:e.jsxs("div",{className:he.loginCard,children:[e.jsxs("div",{className:he.authBrandRow,children:[e.jsx("img",{src:Un,alt:"Taskforce",className:he.loginLogo}),e.jsx("h1",{className:he.loginTitle,children:"Loading Taskforce"})]}),e.jsx("p",{className:he.loginSubtitle,children:qn}),Cn==="stalled"&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:he.loginError,children:ua||"Startup checks timed out."}),e.jsx("button",{className:u.submitBtn,disabled:xt,onClick:nr,children:xt?"Retrying...":"Retry checks"}),sn&&e.jsx("button",{className:u.cancelBtn,disabled:xt,onClick:Ra,children:"Go to sign-in"})]})]})})});if(Fn)return e.jsx("div",{className:pn.standaloneWrapper,"data-theme":Bt,children:e.jsx("div",{className:he.loginView,style:{backgroundImage:`linear-gradient(rgba(15, 15, 26, 0.88), rgba(15, 15, 26, 0.9)), url(${Ju})`},children:e.jsxs("div",{className:he.loginCard,children:[!sn&&!na&&e.jsx("button",{className:he.loginCloseBtn,"aria-label":"Close sign in",onClick:()=>S(sa,{replace:!0}),children:"×"}),e.jsxs("div",{className:he.authBrandRow,children:[e.jsx("img",{src:Un,alt:"Taskforce",className:he.loginLogo}),e.jsxs("h1",{className:he.loginTitle,children:["TASKFORCE ",e.jsx("span",{className:he.loginTitleAccent,children:"HQ"})]})]}),e.jsxs("p",{className:he.loginSubtitle,children:[W==="login"&&"Sign in with your account credentials.",W==="register"&&"Create your Taskforce account.",W==="verify"&&"Enter your verification token.",W==="forgot"&&"Request a password reset link.",W==="reset"&&"Set a new password using your reset token.",W==="invite"&&(Ce==="existing_user_ready"?`You've been invited to join ${be||"this workspace"}.`:Ce==="existing_user_signed_out"?"Sign in to join this workspace.":"Create your account to join this workspace.")]}),(W==="login"||W==="register"||W==="forgot"||W==="invite"&&Ce==="existing_user_signed_out")&&e.jsx("input",{className:`${u.input} ${he.loginInput}`,type:"email",value:$,placeholder:"Email",onChange:Q=>J(Q.target.value)}),W==="register"&&e.jsx("input",{className:`${u.input} ${he.loginInput}`,type:"text",value:U,placeholder:"Display name",onChange:Q=>X(Q.target.value)}),(W==="login"||W==="register"||W==="reset"||W==="invite"&&(Fe||Ce==="existing_user_signed_out"))&&e.jsx("input",{className:`${u.input} ${he.loginInput}`,type:"password",value:q,placeholder:W==="reset"?"New password":W==="invite"&&Fe?"Create password":"Password",onChange:Q=>ee(Q.target.value)}),W==="register"&&EP()&&e.jsx("button",{className:he.authModeLink,type:"button",disabled:f,onClick:()=>{const Q=LP();J(Q.email),X(Q.displayName),ee(Q.password),v(null),C(null),D(null)},children:"Fill Form"}),W==="verify"&&e.jsx("input",{className:`${u.input} ${he.loginInput}`,type:"text",value:V,placeholder:"Verification token",onChange:Q=>te(Q.target.value)}),W==="reset"&&e.jsx("input",{className:`${u.input} ${he.loginInput}`,type:"text",value:xe,placeholder:"Reset token",onChange:Q=>de(Q.target.value)}),W==="invite"&&e.jsxs(e.Fragment,{children:[e.jsx("input",{className:`${u.input} ${he.loginInput}`,type:"text",value:O,placeholder:"Invite token",onChange:Q=>R(Q.target.value)}),z&&e.jsxs("p",{className:he.loginSubtitle,children:["Invite for: ",e.jsx("strong",{children:z}),be?` · Workspace: ${be}`:""]})]}),Oe&&e.jsx("p",{className:he.loginSubtitle,children:Oe}),M&&e.jsx("p",{className:he.loginError,children:M}),W==="login"&&oe==="EMAIL_NOT_VERIFIED"&&$.trim()&&e.jsx("button",{className:he.authModeLink,disabled:f||Ja,onClick:async()=>{x(!0),v(null);const Q=await Vn($);Q.success?(B(Date.now()+3e4),Mn("verify"),Q.verificationToken&&te(Q.verificationToken),v("Verification email resent."),C(null),D(null)):C(ys(Q)),x(!1)},children:Ja?`Resend in ${ma}s`:"Resend Verification Email"}),e.jsx("button",{className:`${u.submitBtn} ${he.loginPrimaryBtn}`,disabled:f||W==="verify"&&Ja||W==="forgot"&&Na,onClick:async()=>{if(x(!0),v(null),C(null),D(null),W==="register"&&!U.trim()){C("Display name is required."),x(!1);return}let Q={success:!1};if(W==="login"?Q=await ft($,q):W==="register"?Q=await Gn($,q,{displayName:U,planId:_||void 0,planVersionId:w||void 0,interval:A||void 0}):W==="verify"?Q=await pa(V):W==="forgot"?Q=await An($):W==="reset"?Q=await va(xe,q):W==="invite"&&(Ce==="existing_user_signed_out"?Q=await ft($,q):Q=Fe?await gt(O,q):await Dt(O)),Q.success)if(W==="register"){if(await en(Q.workspaceSetupRequired)){x(!1);return}Q.verificationRequired?(Q.verificationToken&&te(Q.verificationToken),B(Date.now()+3e4),Mn("verify"),v(Q.emailSent===!1?`Account created, but verification email failed to send. ${Q.emailError||"Try Resend Verification again."}`:"Account created. Check your email for verification instructions.")):(J(""),X(""),ee(""),S(sa,{replace:!0}))}else if(W==="verify")await Y(),J(""),ee(""),S(sa,{replace:!0});else if(W==="forgot")Q.resetToken&&de(Q.resetToken),F(Date.now()+3e4),Mn("reset"),v(Q.emailSent===!1?`Password reset email failed to send. ${Q.emailError||"Try again in a minute."}`:"Password reset instructions sent.");else if(W==="reset")Mn("login"),v("Password updated. Sign in with your new password.");else if(W==="invite"){if(Ce==="existing_user_signed_out"){Re("invite"),ee(""),v("Signed in. Review the invite details to continue."),x(!1);return}if(Q.workspaceSetupRequired){S("/setup?step=workspace",{replace:!0}),x(!1);return}S(sa,{replace:!0})}else if(W==="login"){if(O.trim()){Re("invite"),ee(""),v("Signed in. Review the invite details to continue."),x(!1);return}if(Q.workspaceSetupRequired){S("/setup?step=workspace",{replace:!0}),x(!1);return}J(""),X(""),ee(""),S(sa,{replace:!0})}else J(""),X(""),ee(""),S(sa,{replace:!0});else{if(W==="register"&&(Q.code==="SIGNUP_PLAN_NOT_ENABLED"||Q.code==="SIGNUP_PLAN_VERSION_NOT_FOUND"||Q.code==="SIGNUP_PLAN_VERSION_REQUIRED")){S(L,{replace:!0}),x(!1);return}if(C(ys(Q)),D(Q.code||null),W==="login"&&(Q.code==="WORKSPACE_NOT_FOUND"||Q.code==="WORKSPACE_ID_REQUIRED")){S("/setup?step=workspace",{replace:!0}),x(!1);return}if(W==="login"&&Q.code==="EMAIL_NOT_VERIFIED"&&$.trim()){const ot=await Vn($);ot.success&&(B(Date.now()+3e4),Mn("verify"),ot.verificationToken&&te(ot.verificationToken),v("Email not verified. A verification token was sent."),C(null),D(null))}}x(!1)},children:f?"Working...":W==="login"?"Sign In":W==="register"?"Create Account":W==="verify"?Ja?`Resend in ${ma}s`:"Resend Verification":W==="forgot"?Na?`Retry in ${fa}s`:"Send Reset Link":W==="reset"?"Reset Password":Ce==="existing_user_signed_out"?"Sign In to Continue":Fe?"Create Account and Join":"Join Workspace"}),W==="register"&&e.jsxs("p",{className:he.registerConsent,children:["By creating an account, you agree to the"," ",e.jsx("a",{className:he.registerConsentLink,href:"https://taskforcehq.com/legal/terms",target:"_blank",rel:"noopener noreferrer",children:"Terms of Service"})," ","and acknowledge the"," ",e.jsx("a",{className:he.registerConsentLink,href:"https://taskforcehq.com/legal/privacy",target:"_blank",rel:"noopener noreferrer",children:"Privacy Policy"}),"."]}),(W==="login"||W==="register")&&e.jsxs("p",{className:he.authModeSwitch,children:[W==="login"?"Need an account?":"Already have an account?"," ",e.jsx("button",{className:he.authModeSwitchLink,disabled:f,onClick:()=>{C(null),D(null),v(null),Mn(W==="login"?"register":"login")},children:W==="login"?"Register":"Sign In"})]}),e.jsxs("div",{className:he.authModeLinks,children:[(W==="login"||W==="register")&&e.jsxs(e.Fragment,{children:[e.jsx("button",{className:he.authModeLink,disabled:f||Na,onClick:()=>{C(null),D(null),v(null),Mn("forgot")},children:Na?`Forgot Password (${fa}s)`:"Forgot Password"}),e.jsx("button",{className:he.authModeLink,disabled:f||Ja,onClick:()=>{C(null),D(null),v(null),Mn("verify")},children:Ja?`Resend Verification (${ma}s)`:"Resend Verification"}),e.jsx("button",{className:he.authModeLink,disabled:f,onClick:()=>{C(null),D(null),v(null),Mn("invite")},children:"Accept Invite"})]}),W!=="login"&&W!=="register"&&e.jsxs(e.Fragment,{children:[e.jsx("button",{className:he.authModeLink,disabled:f,onClick:()=>{C(null),D(null),v(null),Mn("login")},children:"Sign In"}),e.jsx("button",{className:he.authModeLink,disabled:f,onClick:()=>{C(null),D(null),v(null),Mn("register")},children:"Register"}),W==="reset"&&e.jsx("button",{className:he.authModeLink,disabled:f||Na,onClick:()=>{C(null),D(null),v(null),Mn("forgot")},children:Na?`Forgot Password (${fa}s)`:"Forgot Password"})]})]})]})})});if(na&&!Fn)return e.jsx("div",{className:pn.standaloneWrapper,"data-theme":Bt,children:e.jsx("div",{className:he.loginView,children:e.jsxs("div",{className:he.loginCard,children:[e.jsxs("div",{className:he.authBrandRow,children:[e.jsx("img",{src:Un,alt:"Taskforce",className:he.loginLogo}),e.jsx("h1",{className:he.loginTitle,children:"Loading Taskforce"})]}),e.jsx("p",{className:he.loginSubtitle,children:"Redirecting to sign in..."})]})})});if(kn&&zt)return e.jsx("div",{className:pn.standaloneWrapper,"data-theme":Bt,children:e.jsx("div",{className:he.loginView,style:{backgroundImage:`linear-gradient(rgba(15, 15, 26, 0.88), rgba(15, 15, 26, 0.9)), url(${Ju})`},children:e.jsxs("div",{className:he.loginCard,children:[e.jsxs("div",{className:he.authBrandRow,children:[e.jsx("img",{src:Un,alt:"Taskforce",className:he.loginLogo}),e.jsx("h1",{className:he.loginTitle,children:"Private Beta"})]}),e.jsx("p",{className:he.loginSubtitle,children:"You are signed in, but your account is not in the beta allowlist yet."}),e.jsx("p",{className:he.loginSubtitle,children:"You will see the full app as soon as beta access is enabled."}),e.jsx("button",{className:u.cancelBtn,onClick:async()=>{await Te.logout(),S("/login",{replace:!0})},children:"Sign Out"})]})})});if(hn||Jt&&dn&&(aa||rt||Oa)){const Q=!hn&&(aa||Xt==="error"),ot=!hn&&!Q&&(rt||Xt==="global"),rn=Q?we("setup.headingCheckFailed"):ot?we("setup.headingGlobalRequired"):hn?"Create Workspace":we("setup.headingWorkspaceRequired"),wt=Q?we("setup.subtitleUnreadable"):ot?we("setup.subtitleGlobalRequired"):hn?"Set up the new workspace before it is created.":we("setup.subtitleWorkspaceRequired"),Sn=we(ie==="operations"?"setup.workspaceTermMission":"setup.workspaceTermProject");return e.jsx("div",{className:pn.standaloneWrapper,"data-theme":Bt,children:e.jsx("div",{className:he.loginView,style:{backgroundImage:`linear-gradient(rgba(15, 15, 26, 0.88), rgba(15, 15, 26, 0.9)), url(${Ju})`},children:e.jsxs("div",{className:he.loginCard,children:[e.jsxs("div",{className:he.authBrandRow,children:[e.jsx("img",{src:Un,alt:"Taskforce",className:he.loginLogo}),e.jsxs("h1",{className:he.loginTitle,children:["TASKFORCE ",e.jsx("span",{className:he.loginTitleAccent,children:"HQ"})]})]}),e.jsx("p",{className:he.loginSubtitle,children:e.jsx("strong",{children:rn})}),e.jsx("p",{className:he.loginSubtitle,children:wt}),Ze&&e.jsxs("p",{className:he.loginSubtitle,children:[we("setup.runtimeLabel"),": ",e.jsx("strong",{children:Ze.runtimeMode})]}),$e&&e.jsx("p",{className:he.loginSubtitle,children:$e}),Pe&&e.jsx("p",{className:he.loginError,children:Pe}),ot&&e.jsxs("div",{className:he.optionGrid,children:[e.jsxs("label",{className:`${he.authModeLink} ${he.optionRow}`,children:[e.jsx("input",{type:"radio",name:"setup-mode",value:"core",checked:ie==="core",onChange:()=>Z("core"),disabled:H}),e.jsx("span",{children:we("setup.coreModeOption",{workspaceLabel:Sn})})]}),e.jsxs("label",{className:`${he.authModeLink} ${he.optionRow}`,children:[e.jsx("input",{type:"radio",name:"setup-mode",value:"operations",checked:ie==="operations",onChange:()=>Z("operations"),disabled:H}),e.jsx("span",{children:we("setup.operationsModeOption")})]})]}),!Q&&!ot&&e.jsxs("div",{className:he.optionGrid,children:[!sn&&yn&&e.jsxs("div",{className:he.optionGroup,children:[e.jsxs("label",{className:`${he.authModeLink} ${he.optionRow}`,children:[e.jsx("input",{type:"radio",name:"workspace-setup-source",value:"local",checked:Je==="local",onChange:()=>Ie("local"),disabled:H}),e.jsxs("span",{children:["Create new local ",Sn.toLowerCase()]})]}),e.jsxs("label",{className:`${he.authModeLink} ${he.optionRow}`,children:[e.jsx("input",{type:"radio",name:"workspace-setup-source",value:"cloud",checked:Je==="cloud",onChange:()=>Ie("cloud"),disabled:H}),e.jsxs("span",{children:["Sync existing cloud ",Sn.toLowerCase()]})]})]}),!sn&&Je==="cloud"&&yn?e.jsxs("div",{className:he.optionGroup,children:[!nt&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:he.inlineHint,children:"Sign in to choose one of your cloud projects."}),e.jsx("button",{className:u.cancelBtn,disabled:H,onClick:()=>{S(`/login?mode=login&next=${encodeURIComponent("/setup?step=workspace&source=cloud")}`,{replace:!0})},children:"Sign In"})]}),nt&&e.jsxs(e.Fragment,{children:[e.jsxs("select",{className:u.input,value:$t,onChange:ct=>Ht(ct.target.value),disabled:H||bn||ht.length===0,children:[ht.length===0&&e.jsx("option",{value:"",children:bn?"Loading cloud projects...":"No cloud projects found"}),ht.map(ct=>e.jsxs("option",{value:ct.id,children:[ct.name," (",ct.id,")"]},ct.id))]}),e.jsx("div",{className:he.actionRowEnd,children:e.jsx("button",{className:u.cancelBtn,disabled:H||bn,onClick:()=>{wa()},children:"Refresh Cloud Projects"})}),Kt&&e.jsx("p",{className:he.loginError,children:Kt})]})]}):e.jsxs(e.Fragment,{children:[e.jsx("input",{className:u.input,type:"text",value:tt,placeholder:we("setup.workspaceNamePlaceholder",{workspaceLabel:Sn}),onChange:ct=>Ct(ct.target.value),disabled:H}),e.jsx("textarea",{className:u.textarea,value:i,placeholder:we("setup.workspaceDescriptionPlaceholder",{workspaceLabel:Sn}),onChange:ct=>De(ct.target.value),disabled:H,rows:4}),e.jsxs("div",{className:he.optionGroup,children:[e.jsx("p",{className:he.loginSubtitle,children:"What are you working on?"}),e.jsx("p",{className:he.inlineHint,children:"Choose a starter taxonomy library for this workspace. You can still edit categories, task types, and priorities later."}),Nn.map(ct=>{const jn=Ke?.id===ct.id;return e.jsxs("label",{className:`${he.authModeLink} ${he.optionRow}`,children:[e.jsx("input",{type:"radio",name:"workspace-taxonomy-library",checked:jn,onChange:()=>Bn(ct.id),disabled:H||Ee}),e.jsx("span",{children:ct.label})]},ct.id)}),Ke?e.jsxs(e.Fragment,{children:[e.jsx("p",{className:he.inlineHint,children:Ke.description}),e.jsxs("p",{className:he.inlineHint,children:["Includes ",Ke.categories.length," categories, ",Ke.types.length," task types, and ",Ke.priorities.length," priority levels."]})]}):null,e.jsxs("div",{className:he.optionGroup,children:[e.jsx("p",{className:he.loginSubtitle,children:"Apply Starter Sections"}),e.jsxs("label",{className:`${he.authModeLink} ${he.optionRow}`,children:[e.jsx("input",{type:"checkbox",checked:an.categories,onChange:()=>me(ct=>({...ct,categories:!ct.categories})),disabled:H||!Ke?.categories.length}),e.jsx("span",{children:"Categories"})]}),e.jsxs("label",{className:`${he.authModeLink} ${he.optionRow}`,children:[e.jsx("input",{type:"checkbox",checked:an.types,onChange:()=>me(ct=>({...ct,types:!ct.types})),disabled:H||!Ke?.types.length}),e.jsx("span",{children:"Task Types"})]}),e.jsxs("label",{className:`${he.authModeLink} ${he.optionRow}`,children:[e.jsx("input",{type:"checkbox",checked:an.priorities,onChange:()=>me(ct=>({...ct,priorities:!ct.priorities})),disabled:H||!Ke?.priorities.length}),e.jsx("span",{children:"Priorities"})]})]}),Ee?e.jsx("p",{className:he.inlineHint,children:"Loading starter libraries…"}):null,Lt?e.jsx("p",{className:he.loginError,children:Lt}):null]}),!sn&&yn&&nt&&e.jsxs("div",{className:he.optionGroup,children:[e.jsxs("label",{className:`${he.authModeLink} ${he.optionRow}`,children:[e.jsx("input",{type:"checkbox",checked:qt,onChange:ct=>Hn(ct.target.checked),disabled:H}),e.jsx("span",{children:"Sync to cloud after setup"})]}),e.jsx("p",{className:he.inlineHint,children:"When enabled, this project will connect to cloud sync as soon as setup finishes."})]})]})]}),e.jsxs("div",{className:he.authModeLinks,children:[ot?e.jsx("button",{className:u.submitBtn,disabled:H,onClick:async()=>{ue(!0),et(null),se(null);try{const ct=await fetch("/api/taskforce/global-settings",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({setup:{mode:ie}})}),jn=await ct.json().catch(()=>({}));!ct.ok||jn?.success===!1?se(jn?.error||we("setup.saveFailedWithStatus",{status:ct.status})):(et(we("setup.globalSetupSaved")),await Wn())}catch{se(we("setup.saveFailed"))}finally{ue(!1)}},children:we(H?"setup.saving":"setup.saveGlobalSetup")}):Q?e.jsx("button",{className:u.submitBtn,disabled:H,onClick:Wn,children:we("setup.retrySetupCheck")}):e.jsx("button",{className:u.submitBtn,disabled:H,onClick:async()=>{if(ue(!0),et(null),se(null),!sn&&Je==="cloud"&&yn){if(!nt){se("Sign in is required before syncing a cloud project."),ue(!1);return}const ct=ht.find(ks=>ks.id===$t);if(!ct){se("Select a cloud project to sync."),ue(!1);return}const jn=await Ne({workspaceId:ct.id,name:ct.name||ct.id,description:ct.description||void 0});if(!jn.success){se(jn.error||we("setup.saveWorkspaceFailed")),ue(!1);return}const ea=String(jn.workspaceId||ct.id||"").trim();if(!ea){se("Failed to resolve workspace id for sync setup."),ue(!1);return}const ha=await fetch("/api/taskforce/ui-state",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({workspaceId:ea,stateKey:"workspace-sync",patch:{version:2,enabled:!0,phase:"attach-cloud",pullCursor:null,lastPullAt:null,lastPushAt:null,lastSyncedAt:null}})}),ra=await ha.json().catch(()=>({}));if(!ha.ok||ra?.success===!1){se(ra?.error||`Failed to configure workspace sync (${ha.status})`),ue(!1);return}Le({enabled:!0,phase:"attach-cloud",pullCursor:null}),await Wn(),et(`Cloud project synced setup ready: ${ct.name}`)}else{const ct=hn||mt?.workspaceSetupState==="missing",jn=hn?await ze(tt,i||void 0):null,ea=hn?null:await Ne({workspaceId:ct?void 0:mt?.workspaceId,name:tt,description:i}),ha=jn||ea;if(!ha?.success)se(ha?.error||we("setup.saveWorkspaceFailed"));else{const ra=String(jn?.workspace?.id||ea?.workspaceId||mt?.workspaceId||"").trim();if(!ra){se("Failed to resolve workspace id for setup."),ue(!1);return}if(Je==="local"&&!!Ke&&(an.categories||an.types||an.priorities)&&Ke){const oa=await Xe.onApplySystemTaxonomyPack({pack:Ke,sections:an,remapExistingValuesToDefault:!0,workspaceIdOverride:ra});if(!oa?.success){se(oa?.error||"Failed to apply starter taxonomy library."),ue(!1);return}}const $n=!!(!sn&&qt&&yn&&nt),as=await fetch("/api/taskforce/ui-state",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({workspaceId:ra,stateKey:"workspace-sync",patch:{version:2,enabled:$n,phase:$n?"provision-local":"idle",pullCursor:null,lastPullAt:null,lastPushAt:null,lastSyncedAt:null}})}),Xa=await as.json().catch(()=>({}));if(!as.ok||Xa?.success===!1){se(Xa?.error||`Failed to configure workspace sync (${as.status})`),ue(!1);return}Le({enabled:$n,phase:$n?"provision-local":"idle",pullCursor:null}),et($n?`${Sn} setup saved. Cloud sync enabled.`:we("setup.workspaceSetupSaved",{workspaceLabel:Sn})),hn&&(await Wn(),await xn(!0),S("/",{replace:!0}))}}ue(!1)},children:H?we("setup.saving"):we("setup.saveWorkspaceSetup",{workspaceLabel:Sn})}),hn?e.jsx("button",{className:u.cancelBtn,onClick:()=>{se(null),et(null),S("/",{replace:!0})},children:"Cancel"}):Se==="cloud"?e.jsx("button",{className:u.cancelBtn,onClick:async()=>{await Te.logout(),S("/login",{replace:!0})},children:we("setup.signOut")}):null]})]})})})}return e.jsx(DP,{...Te,onHeaderMouseDown:r,isDragging:o,onClose:d})}function MP(t){return Mh()?e.jsx(wm,{...t}):e.jsx(Bh,{children:e.jsx(wm,{...t})})}const Wf={};function BP(){return kp(Wf).apiBaseUrl||void 0}function WP(t){const n=kp(Wf),s=n.cloudAuthBaseUrl;if(s)if(typeof window<"u"){const r=window.location.hostname.toLowerCase(),o=r==="localhost"||r==="127.0.0.1"||r==="::1",d="".trim().toLowerCase()==="true";if(!o&&!d)try{const l=new URL(s,window.location.origin);if(l.origin!==window.location.origin)console.warn(`[Taskforce] Ignoring cross-origin cloud auth base in hosted runtime: ${l.origin}`);else return s}catch{}else return s}else return s;if(n.baseUrl)return n.baseUrl;if(t)return t}function FP(){const t=BP(),n=WP(t);return e.jsx(Wh,{children:e.jsx(MP,{mode:"standalone",config:{apiEndpoint:"/api/taskforce/task",apiBaseUrl:t,cloudAuthBaseUrl:n}})})}Xf.createRoot(document.getElementById("root")).render(e.jsx(ut.StrictMode,{children:e.jsx(FP,{})}));export{JP as A,Tc as D,Dc as I,qr as M,XP as P,pf as R,Il as T,ou as a,fs as b,Cg as c,Kh as d,Ya as e,VP as f,Hd as g,ij as h,ak as i,QP as j,cj as k,lf as l,oR as m,Be as n,Hg as o,Vd as p,Zd as q,Ia as r,af as s,u as t,KP as u,ZP as v,YP as w,qP as x,yp as y,TD as z};