@taskforcehq/taskforce 0.3.305 → 0.3.307

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 (440) hide show
  1. package/README.md +0 -2
  2. package/dist/Taskforce.module.css +603 -107
  3. package/dist/TaskforceCore.js +216 -43
  4. package/dist/TaskforceCore.test.js +611 -28
  5. package/dist/assets/fonts/CourierPrime-Bold.woff2 +0 -0
  6. package/dist/assets/fonts/CourierPrime-BoldItalic.woff2 +0 -0
  7. package/dist/assets/fonts/CourierPrime-Italic.woff2 +0 -0
  8. package/dist/assets/fonts/CourierPrime-Regular.woff2 +0 -0
  9. package/dist/assets/fonts/Noir_medium.woff2 +0 -0
  10. package/dist/assets/fonts/Noir_regular.woff2 +0 -0
  11. package/dist/assets/fonts/RussoOne-Regular.woff2 +0 -0
  12. package/dist/assets/fonts/SpecialElite-Regular.woff2 +0 -0
  13. package/dist/compat/workspaceSyncCompat.js +46 -2
  14. package/dist/compat/workspaceSyncCompat.test.js +38 -1
  15. package/dist/components/activity/EntityActivityTimeline.d.ts +34 -0
  16. package/dist/components/activity/EntityActivityTimeline.js +81 -0
  17. package/dist/components/context/ContextAttachmentManager.d.ts +14 -0
  18. package/dist/components/context/ContextAttachmentManager.js +561 -0
  19. package/dist/components/features/AgentsModule.d.ts +14 -1
  20. package/dist/components/features/AgentsModule.js +366 -18
  21. package/dist/components/features/AgentsModule.test.js +507 -8
  22. package/dist/components/features/AnnotatedAttachmentWorkspace.d.ts +3 -1
  23. package/dist/components/features/AnnotatedAttachmentWorkspace.js +118 -4
  24. package/dist/components/features/AnnotatedAttachmentWorkspace.test.js +52 -0
  25. package/dist/components/features/DocumentIndex.d.ts +2 -2
  26. package/dist/components/features/DocumentIndex.js +3 -4
  27. package/dist/components/features/DocumentViewer.d.ts +7 -1
  28. package/dist/components/features/DocumentViewer.js +62 -4
  29. package/dist/components/features/DocumentWorkspace.d.ts +10 -2
  30. package/dist/components/features/DocumentWorkspace.js +15 -4
  31. package/dist/components/features/DocumentWorkspace.test.js +51 -1
  32. package/dist/components/features/TaskSettings.d.ts +2 -0
  33. package/dist/components/features/TaskSettings.js +83 -78
  34. package/dist/components/features/TaskSettings.test.js +171 -82
  35. package/dist/components/features/documentWorkspaceModel.d.ts +1 -1
  36. package/dist/components/task/TaskActionHeader.js +11 -5
  37. package/dist/components/task/TaskActionHeader.test.js +10 -0
  38. package/dist/components/task/TaskCard.js +24 -29
  39. package/dist/components/task/TaskCard.test.js +38 -3
  40. package/dist/components/task/TaskContextUpload.js +4 -526
  41. package/dist/components/task/TaskContextUpload.test.js +3 -3
  42. package/dist/components/task/TaskForm.js +61 -116
  43. package/dist/components/task/TaskForm.test.js +110 -8
  44. package/dist/components/task/TaskKanban.d.ts +2 -1
  45. package/dist/components/task/TaskKanban.js +94 -21
  46. package/dist/components/task/TaskKanban.test.js +36 -0
  47. package/dist/components/task/TaskList.js +5 -1
  48. package/dist/components/task/TaskList.test.js +4 -0
  49. package/dist/components/ui/EditableAvatarButton.d.ts +18 -0
  50. package/dist/components/ui/EditableAvatarButton.js +18 -0
  51. package/dist/components/ui/HierarchyActionBadge.d.ts +10 -0
  52. package/dist/components/ui/HierarchyActionBadge.js +5 -0
  53. package/dist/components/views/AppShellHeader.d.ts +3 -1
  54. package/dist/components/views/AppShellHeader.js +27 -11
  55. package/dist/components/views/AppShellHeader.test.js +18 -1
  56. package/dist/components/views/PlanComparisonPage.d.ts +9 -1
  57. package/dist/components/views/PlanComparisonPage.js +78 -14
  58. package/dist/components/views/PlanComparisonPage.test.js +257 -0
  59. package/dist/components/views/PlansPage.js +127 -36
  60. package/dist/components/views/PlansPage.test.js +294 -12
  61. package/dist/components/views/StandaloneLayout.js +529 -592
  62. package/dist/components/views/WidgetView.js +10 -8
  63. package/dist/components/views/panels/PlanningDrawer.d.ts +25 -5
  64. package/dist/components/views/panels/PlanningDrawer.js +270 -55
  65. package/dist/components/views/panels/PlanningDrawer.test.d.ts +1 -0
  66. package/dist/components/views/panels/PlanningDrawer.test.js +529 -0
  67. package/dist/components/views/planningScope.d.ts +20 -0
  68. package/dist/components/views/planningScope.js +25 -0
  69. package/dist/components/views/planningScope.test.d.ts +1 -0
  70. package/dist/components/views/planningScope.test.js +60 -0
  71. package/dist/components/views/standalone/modals/AccountHubModal.d.ts +26 -1
  72. package/dist/components/views/standalone/modals/AccountHubModal.js +76 -2
  73. package/dist/components/views/standalone/modals/AccountHubModal.test.js +20 -3
  74. package/dist/components/views/standalone/modals/AvatarImageManagerModal.d.ts +20 -0
  75. package/dist/components/views/standalone/modals/AvatarImageManagerModal.js +127 -0
  76. package/dist/components/views/standalone/modals/EditProfileModal.d.ts +2 -9
  77. package/dist/components/views/standalone/modals/EditProfileModal.js +3 -2
  78. package/dist/components/views/standalone/modals/SyncEnableWarningModal.d.ts +9 -0
  79. package/dist/components/views/standalone/modals/SyncEnableWarningModal.js +6 -0
  80. package/dist/components/views/standalone/modals/SyncEnableWarningModal.test.d.ts +1 -0
  81. package/dist/components/views/standalone/modals/SyncEnableWarningModal.test.js +24 -0
  82. package/dist/components/views/standalone/modals/SyncStatusModal.d.ts +2 -1
  83. package/dist/components/views/standalone/modals/SyncStatusModal.js +2 -2
  84. package/dist/config/envSchema.js +1 -0
  85. package/dist/core/AiProfileService.d.ts +46 -2
  86. package/dist/core/AiProfileService.js +1073 -82
  87. package/dist/core/AiProfileService.test.js +19 -1
  88. package/dist/core/AiProfiles.test.js +1249 -44
  89. package/dist/core/AttachmentLinkService.d.ts +3 -0
  90. package/dist/core/AttachmentLinkService.js +110 -23
  91. package/dist/core/AuthIdentityService.d.ts +107 -0
  92. package/dist/core/AuthIdentityService.js +284 -0
  93. package/dist/core/AuthTokenService.d.ts +4 -0
  94. package/dist/core/AuthTokenService.js +34 -6
  95. package/dist/core/AuthTokenService.test.js +3 -3
  96. package/dist/core/EntitlementsPolicy.test.js +2 -2
  97. package/dist/core/GlobalSettingsService.js +127 -6
  98. package/dist/core/McpTokenService.d.ts +12 -0
  99. package/dist/core/McpTokenService.js +44 -1
  100. package/dist/core/PlanEntitlementService.d.ts +23 -2
  101. package/dist/core/PlanEntitlementService.js +343 -57
  102. package/dist/core/PlanFeatureCatalog.test.d.ts +1 -0
  103. package/dist/core/PlanFeatureCatalog.test.js +84 -0
  104. package/dist/core/PlanVersionPolicy.test.js +35 -2
  105. package/dist/core/PlanningEntities.test.js +418 -4
  106. package/dist/core/SignupMonetizationSettings.test.js +199 -27
  107. package/dist/core/SyncReconciliationService.js +2 -65
  108. package/dist/core/SystemAdmin.test.js +42 -42
  109. package/dist/core/TaskActivityService.d.ts +28 -1
  110. package/dist/core/TaskActivityService.js +227 -46
  111. package/dist/core/TaskActivitySync.test.d.ts +1 -0
  112. package/dist/core/TaskActivitySync.test.js +90 -0
  113. package/dist/core/TaskAttachmentsCanonical.test.js +51 -1
  114. package/dist/core/TaskAuditTimeline.test.js +96 -0
  115. package/dist/core/Taskforce.d.ts +415 -40
  116. package/dist/core/Taskforce.ids.test.js +58 -0
  117. package/dist/core/Taskforce.js +1543 -266
  118. package/dist/core/Taskforce.listTasksSlim.test.d.ts +1 -0
  119. package/dist/core/Taskforce.listTasksSlim.test.js +91 -0
  120. package/dist/core/Taskforce.mcpAuth.test.js +109 -0
  121. package/dist/core/UserProfileAvatarDrafts.test.js +30 -3
  122. package/dist/core/WorkspaceLifecycleService.js +0 -5
  123. package/dist/core/WorkspacePermissions.test.js +25 -1
  124. package/dist/core/WorkspacePlanMode.test.js +117 -16
  125. package/dist/core/shared.d.ts +1 -1
  126. package/dist/core/shared.js +5 -1
  127. package/dist/core/types.d.ts +75 -2
  128. package/dist/hooks/auth/useTaskforceAuthBootstrap.js +28 -2
  129. package/dist/hooks/bootstrapTimeouts.d.ts +4 -0
  130. package/dist/hooks/bootstrapTimeouts.js +8 -0
  131. package/dist/hooks/bootstrapTimeouts.test.d.ts +1 -0
  132. package/dist/hooks/bootstrapTimeouts.test.js +12 -0
  133. package/dist/hooks/sync/bootstrap.js +2 -0
  134. package/dist/hooks/sync/controlPlane.d.ts +37 -0
  135. package/dist/hooks/sync/controlPlane.js +78 -0
  136. package/dist/hooks/sync/controlPlane.test.d.ts +1 -0
  137. package/dist/hooks/sync/controlPlane.test.js +121 -0
  138. package/dist/hooks/sync/lifecyclePolicy.d.ts +45 -0
  139. package/dist/hooks/sync/lifecyclePolicy.js +93 -0
  140. package/dist/hooks/sync/lifecyclePolicy.test.d.ts +1 -0
  141. package/dist/hooks/sync/lifecyclePolicy.test.js +124 -0
  142. package/dist/hooks/sync/orchestratorShared.d.ts +13 -4
  143. package/dist/hooks/sync/orchestratorShared.js +129 -48
  144. package/dist/hooks/sync/orchestratorShared.test.js +50 -1
  145. package/dist/hooks/sync/pullLifecycle.d.ts +31 -0
  146. package/dist/hooks/sync/pullLifecycle.js +24 -0
  147. package/dist/hooks/sync/pullLifecycle.test.d.ts +1 -0
  148. package/dist/hooks/sync/pullLifecycle.test.js +80 -0
  149. package/dist/hooks/sync/recovery.d.ts +16 -2
  150. package/dist/hooks/sync/recovery.js +179 -53
  151. package/dist/hooks/sync/recovery.test.d.ts +1 -0
  152. package/dist/hooks/sync/recovery.test.js +292 -0
  153. package/dist/hooks/sync/transfers.d.ts +16 -3
  154. package/dist/hooks/sync/transfers.js +210 -66
  155. package/dist/hooks/sync/transfers.test.d.ts +1 -0
  156. package/dist/hooks/sync/transfers.test.js +928 -0
  157. package/dist/hooks/sync/useRecentSyncEvents.d.ts +21 -0
  158. package/dist/hooks/sync/useRecentSyncEvents.js +92 -0
  159. package/dist/hooks/sync/useRecentSyncEvents.test.d.ts +1 -0
  160. package/dist/hooks/sync/useRecentSyncEvents.test.js +124 -0
  161. package/dist/hooks/sync/useSyncStatusActions.d.ts +30 -0
  162. package/dist/hooks/sync/useSyncStatusActions.js +88 -0
  163. package/dist/hooks/sync/useSyncStatusActions.test.d.ts +1 -0
  164. package/dist/hooks/sync/useSyncStatusActions.test.js +133 -0
  165. package/dist/hooks/sync/useSyncStatusControls.d.ts +25 -0
  166. package/dist/hooks/sync/useSyncStatusControls.js +60 -0
  167. package/dist/hooks/sync/useSyncStatusControls.test.d.ts +1 -0
  168. package/dist/hooks/sync/useSyncStatusControls.test.js +88 -0
  169. package/dist/hooks/useFilterSort.js +13 -13
  170. package/dist/hooks/useFilterSort.test.js +87 -1
  171. package/dist/hooks/useSyncOrchestrator.aiProfiles.test.js +12 -0
  172. package/dist/hooks/useSyncOrchestrator.d.ts +9 -2
  173. package/dist/hooks/useSyncOrchestrator.js +409 -183
  174. package/dist/hooks/useSyncOrchestrator.retry-closure.test.js +407 -0
  175. package/dist/hooks/useTaskData.js +8 -3
  176. package/dist/hooks/useTaskData.test.js +45 -0
  177. package/dist/hooks/useTaskforce.d.ts +145 -52
  178. package/dist/hooks/useTaskforce.js +592 -253
  179. package/dist/hooks/useTaskforce.runtime-routing.test.d.ts +1 -0
  180. package/dist/hooks/useTaskforce.runtime-routing.test.js +246 -0
  181. package/dist/hooks/useTaskforce.sync-behavior.test.js +2468 -201
  182. package/dist/hooks/useWorkspaceSyncController.d.ts +1 -0
  183. package/dist/hooks/useWorkspaceSyncController.js +13 -2
  184. package/dist/hooks/useWorkspaceSyncController.test.js +48 -0
  185. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.d.ts +16 -0
  186. package/dist/hooks/workspace/useTaskforceWorkspaceBootstrap.js +328 -40
  187. package/dist/localization/locales/en-US.d.ts +0 -1
  188. package/dist/localization/locales/en-US.js +0 -1
  189. package/dist/localization/locales/es-419.js +0 -1
  190. package/dist/localization/locales/pt-BR.js +0 -1
  191. package/dist/mcp/canonicalAssetHelpers.d.ts +16 -4
  192. package/dist/mcp/canonicalAssetHelpers.js +18 -10
  193. package/dist/mcp/canonicalAssetHelpers.test.d.ts +1 -0
  194. package/dist/mcp/canonicalAssetHelpers.test.js +67 -0
  195. package/dist/mcp/clientIntegrations.d.ts +1 -0
  196. package/dist/mcp/clientIntegrations.js +25 -0
  197. package/dist/mcp/clientIntegrations.test.js +14 -3
  198. package/dist/mcp/clientProfileDefaults.js +3 -3
  199. package/dist/mcp/collaborationRegistrar.js +7 -7
  200. package/dist/mcp/documentAssetRegistrar.js +116 -10
  201. package/dist/mcp/runtime.d.ts +3 -0
  202. package/dist/mcp/runtime.js +1099 -185
  203. package/dist/mcp/runtime.test.js +1491 -140
  204. package/dist/mcp/taskAttachmentTypes.d.ts +1 -1
  205. package/dist/mcp/taskPlanningRegistrar.js +48 -0
  206. package/dist/mcp/toolRegistry.d.ts +56 -0
  207. package/dist/mcp/toolRegistry.js +8 -0
  208. package/dist/mcp/toolRegistry.test.js +4 -0
  209. package/dist/migrations/taskSchemaMigrations.d.ts +1 -1
  210. package/dist/migrations/taskSchemaMigrations.js +192 -61
  211. package/dist/migrations/taskSchemaMigrations.test.js +15 -0
  212. package/dist/resources/templates/workflow-sources/workflowDocs.mjs +6 -6
  213. package/dist/resources/templates/workflows/collaborate.yaml +1 -1
  214. package/dist/resources/templates/workflows/evaluate.yaml +2 -2
  215. package/dist/resources/templates/workflows/plan.yaml +1 -1
  216. package/dist/resources/templates/workflows/review.yaml +2 -2
  217. package/dist/server/aiProfileAvatarAssets.d.ts +49 -0
  218. package/dist/server/aiProfileAvatarAssets.js +319 -0
  219. package/dist/server/aiProfileAvatarAssets.test.d.ts +1 -0
  220. package/dist/server/aiProfileAvatarAssets.test.js +213 -0
  221. package/dist/server/annotatedAttachmentsRoutes.test.js +69 -10
  222. package/dist/server/auth/providers/apple.d.ts +33 -0
  223. package/dist/server/auth/providers/apple.js +82 -0
  224. package/dist/server/auth/providers/appleClientSecret.d.ts +37 -0
  225. package/dist/server/auth/providers/appleClientSecret.js +65 -0
  226. package/dist/server/auth/providers/github.d.ts +26 -0
  227. package/dist/server/auth/providers/github.js +86 -0
  228. package/dist/server/auth/providers/google.d.ts +21 -0
  229. package/dist/server/auth/providers/google.js +56 -0
  230. package/dist/server/auth/providers/types.d.ts +21 -0
  231. package/dist/server/auth/providers/types.js +1 -0
  232. package/dist/server/auth.d.ts +2 -0
  233. package/dist/server/auth.js +6 -3
  234. package/dist/server/documentReviewRoutes.test.js +36 -3
  235. package/dist/server/index.cookieProxy.test.js +1 -0
  236. package/dist/server/index.d.ts +12 -0
  237. package/dist/server/index.js +124 -9
  238. package/dist/server/index.rateLimit.test.js +3 -0
  239. package/dist/server/index.test.js +111 -3
  240. package/dist/server/routes/admin.d.ts +3 -0
  241. package/dist/server/routes/admin.js +459 -28
  242. package/dist/server/routes/annotatedAttachments.js +51 -0
  243. package/dist/server/routes/auth.d.ts +26 -2
  244. package/dist/server/routes/auth.js +1170 -71
  245. package/dist/server/routes/authSupport.d.ts +5 -1
  246. package/dist/server/routes/authSupport.js +13 -2
  247. package/dist/server/routes/billing.js +372 -35
  248. package/dist/server/routes/billing.test.js +595 -12
  249. package/dist/server/routes/documents.d.ts +1 -0
  250. package/dist/server/routes/documents.js +182 -70
  251. package/dist/server/routes/shared.d.ts +28 -2
  252. package/dist/server/routes/shared.js +69 -14
  253. package/dist/server/routes/sync.integration.test.js +658 -39
  254. package/dist/server/routes/sync.js +74 -608
  255. package/dist/server/routes/syncAuxRoutes.d.ts +15 -0
  256. package/dist/server/routes/syncAuxRoutes.js +91 -0
  257. package/dist/server/routes/syncAuxRoutes.test.d.ts +1 -0
  258. package/dist/server/routes/syncAuxRoutes.test.js +158 -0
  259. package/dist/server/routes/syncPullApplyRoutes.d.ts +36 -0
  260. package/dist/server/routes/syncPullApplyRoutes.js +204 -0
  261. package/dist/server/routes/syncPushRoutes.d.ts +24 -0
  262. package/dist/server/routes/syncPushRoutes.js +212 -0
  263. package/dist/server/routes/syncRouteGuards.d.ts +36 -0
  264. package/dist/server/routes/syncRouteGuards.js +67 -0
  265. package/dist/server/routes/syncRouteGuards.test.d.ts +1 -0
  266. package/dist/server/routes/syncRouteGuards.test.js +94 -0
  267. package/dist/server/routes/syncRouteTypes.d.ts +13 -0
  268. package/dist/server/routes/syncRouteTypes.js +1 -0
  269. package/dist/server/routes/syncSnapshotRoutes.d.ts +66 -0
  270. package/dist/server/routes/syncSnapshotRoutes.js +182 -0
  271. package/dist/server/routes/tasks.js +55 -10
  272. package/dist/server/routes/workspaces.js +36 -5
  273. package/dist/server/routes.js +147 -11
  274. package/dist/server/routes.test.js +2704 -183
  275. package/dist/services/workflowExportSnapshots.test.js +2 -0
  276. package/dist/shared/aiProfileSeatScope.d.ts +5 -0
  277. package/dist/shared/aiProfileSeatScope.js +21 -0
  278. package/dist/shared/aiProfileSurfaceType.d.ts +1 -1
  279. package/dist/shared/aiProfileSurfaceType.js +10 -8
  280. package/dist/shared/passwordPolicy.d.ts +13 -0
  281. package/dist/shared/passwordPolicy.js +84 -0
  282. package/dist/shared/passwordPolicy.test.d.ts +1 -0
  283. package/dist/shared/passwordPolicy.test.js +34 -0
  284. package/dist/storage/objectStorage.d.ts +1 -0
  285. package/dist/storage/objectStorage.js +2 -1
  286. package/dist/storage/objectStorageClient.d.ts +1 -0
  287. package/dist/storage/objectStorageClient.js +41 -8
  288. package/dist/storage/objectStorageClient.test.js +26 -1
  289. package/dist/storage/objectStorageConfig.js +3 -1
  290. package/dist/storage/objectStorageConfig.test.js +13 -1
  291. package/dist/storage/workspaceAssetStore.d.ts +15 -3
  292. package/dist/storage/workspaceAssetStore.js +132 -44
  293. package/dist/storage/workspaceAssetStore.test.js +93 -6
  294. package/dist/styles/fonts.css +70 -0
  295. package/dist/sync/collaborationSyncPayload.d.ts +6 -1
  296. package/dist/sync/collaborationSyncPayload.js +19 -11
  297. package/dist/sync/collaborationSyncPayload.test.js +14 -1
  298. package/dist/sync/collaborationSyncState.d.ts +3 -3
  299. package/dist/sync/collaborationSyncState.js +19 -12
  300. package/dist/sync/contentSyncPayload.d.ts +5 -1
  301. package/dist/sync/contentSyncPayload.js +9 -0
  302. package/dist/sync/contentSyncPayload.test.js +39 -0
  303. package/dist/sync/contentSyncState.d.ts +9 -9
  304. package/dist/sync/contentSyncState.js +248 -107
  305. package/dist/sync/planningSyncPayload.js +5 -0
  306. package/dist/sync/planningSyncPayload.test.js +24 -0
  307. package/dist/sync/syncApplyHandlers.d.ts +11 -4
  308. package/dist/sync/syncApplyHandlers.js +115 -42
  309. package/dist/sync/syncApplyHandlers.test.js +251 -4
  310. package/dist/sync/syncFieldSemantics.d.ts +12 -0
  311. package/dist/sync/syncFieldSemantics.js +55 -0
  312. package/dist/sync/syncResourceAdapters.d.ts +46 -0
  313. package/dist/sync/syncResourceAdapters.js +79 -0
  314. package/dist/sync/syncService.d.ts +6 -0
  315. package/dist/sync/syncService.js +65 -1
  316. package/dist/sync/syncService.test.js +96 -3
  317. package/dist/sync/taskSyncChangeKey.d.ts +2 -0
  318. package/dist/sync/taskSyncChangeKey.js +143 -0
  319. package/dist/sync/taskSyncPayload.js +3 -8
  320. package/dist/sync/workspacePullFeed.d.ts +4 -0
  321. package/dist/sync/workspacePullFeed.js +132 -72
  322. package/dist/sync/workspacePullFeed.test.js +92 -0
  323. package/dist/sync/workspaceRepair.js +5 -2
  324. package/dist/sync/workspaceSyncModel.d.ts +73 -6
  325. package/dist/sync/workspaceSyncModel.js +342 -73
  326. package/dist/sync/workspaceSyncModel.test.js +559 -14
  327. package/dist/sync/workspaceSyncState.d.ts +17 -0
  328. package/dist/sync/workspaceSyncState.js +2 -1
  329. package/dist/sync/workspaceSyncSurface.js +3 -8
  330. package/dist/types.d.ts +50 -2
  331. package/dist/ui/assets/AgentsModule-2y82_3DO.js +1 -0
  332. package/dist/ui/assets/AnnotatedAttachmentWorkspace-BTLZZCiQ.js +3 -0
  333. package/dist/ui/assets/AnnotatedAttachmentWorkspace-BVKew-mH.css +1 -0
  334. package/dist/ui/assets/ContextAttachmentManager-D2epuNnG.js +3 -0
  335. package/dist/ui/assets/CourierPrime-Bold-BuLj_dpw.woff2 +0 -0
  336. package/dist/ui/assets/CourierPrime-BoldItalic-BrK2pUkZ.woff2 +0 -0
  337. package/dist/ui/assets/CourierPrime-Italic-DFUZK5Ey.woff2 +0 -0
  338. package/dist/ui/assets/CourierPrime-Regular-BsKphzVf.woff2 +0 -0
  339. package/dist/ui/assets/DocumentWorkspace-D4rJKXzd.css +1 -0
  340. package/dist/ui/assets/DocumentWorkspace-sVa-3Do6.js +252 -0
  341. package/dist/ui/assets/EntityActivityTimeline-DyqvvhuF.css +1 -0
  342. package/dist/ui/assets/EntityActivityTimeline-Zods27y_.js +1 -0
  343. package/dist/ui/assets/{InitiativesModule-Dhm7M8e7.js → InitiativesModule-D4XseTwW.js} +1 -1
  344. package/dist/ui/assets/Noir_medium-bxQwKGzB.woff2 +0 -0
  345. package/dist/ui/assets/Noir_regular-ojf2kxlG.woff2 +0 -0
  346. package/dist/ui/assets/PlansPage-D5AcbO0L.js +1 -0
  347. package/dist/ui/assets/PlansPage-Dvqsz5zc.css +1 -0
  348. package/dist/ui/assets/RussoOne-Regular-Cu_qq_qC.woff2 +0 -0
  349. package/dist/ui/assets/SpecialElite-Regular-Di6gSvAS.woff2 +0 -0
  350. package/dist/ui/assets/TaskContextUpload-uC5qx4Bv.js +1 -0
  351. package/dist/ui/assets/TaskSettings-CqvPAsTv.js +9 -0
  352. package/dist/ui/assets/{WorkflowsModule-BcS4afRn.js → WorkflowsModule-oOA9bcdK.js} +4 -4
  353. package/dist/ui/assets/documentReferences-DPZuTgHh.js +1 -0
  354. package/dist/ui/assets/index-607WPo_X.js +4 -0
  355. package/dist/ui/assets/index-CYyodXsg.css +1 -0
  356. package/dist/ui/assets/{vendor-icons-BSUaRwF8.js → vendor-icons-B32hGuF2.js} +1 -1
  357. package/dist/ui/fonts/CourierPrime-Bold.ttf +0 -0
  358. package/dist/ui/fonts/CourierPrime-Bold.woff2 +0 -0
  359. package/dist/ui/fonts/CourierPrime-BoldItalic.ttf +0 -0
  360. package/dist/ui/fonts/CourierPrime-BoldItalic.woff2 +0 -0
  361. package/dist/ui/fonts/CourierPrime-Italic.ttf +0 -0
  362. package/dist/ui/fonts/CourierPrime-Italic.woff2 +0 -0
  363. package/dist/ui/fonts/CourierPrime-Regular.ttf +0 -0
  364. package/dist/ui/fonts/CourierPrime-Regular.woff2 +0 -0
  365. package/dist/ui/fonts/Noir_medium.otf +0 -0
  366. package/dist/ui/fonts/Noir_medium.woff2 +0 -0
  367. package/dist/ui/fonts/Noir_regular.otf +0 -0
  368. package/dist/ui/fonts/Noir_regular.woff2 +0 -0
  369. package/dist/ui/fonts/RussoOne-Regular.woff2 +0 -0
  370. package/dist/ui/fonts/SpecialElite-Regular.ttf +0 -0
  371. package/dist/ui/fonts/SpecialElite-Regular.woff2 +0 -0
  372. package/dist/ui/index.html +3 -3
  373. package/dist/ui/product/agent manager.png +0 -0
  374. package/dist/ui/product/agent_manager_02.png +0 -0
  375. package/dist/utils/accountProfileSummaryCache.d.ts +5 -0
  376. package/dist/utils/aiProfileEvents.d.ts +7 -0
  377. package/dist/utils/aiProfileEvents.js +6 -0
  378. package/dist/utils/assignees.d.ts +8 -0
  379. package/dist/utils/assignees.js +10 -1
  380. package/dist/utils/assignees.test.d.ts +1 -0
  381. package/dist/utils/assignees.test.js +25 -0
  382. package/dist/utils/avatarDisplay.d.ts +1 -0
  383. package/dist/utils/avatarDisplay.js +15 -0
  384. package/dist/utils/avatarUpload.d.ts +27 -0
  385. package/dist/utils/avatarUpload.js +132 -0
  386. package/dist/utils/avatarUpload.test.d.ts +1 -0
  387. package/dist/utils/avatarUpload.test.js +40 -0
  388. package/dist/utils/bootstrapTrace.d.ts +7 -0
  389. package/dist/utils/bootstrapTrace.js +29 -0
  390. package/dist/utils/commercialLifecyclePresentation.js +3 -0
  391. package/dist/utils/contextAssetEvents.d.ts +2 -0
  392. package/dist/utils/contextFiles.d.ts +3 -1
  393. package/dist/utils/contextFiles.js +2 -1
  394. package/dist/utils/syncEventDetails.d.ts +3 -0
  395. package/dist/utils/syncEventDetails.js +64 -0
  396. package/dist/utils/syncEventDetails.test.d.ts +1 -0
  397. package/dist/utils/syncEventDetails.test.js +23 -0
  398. package/dist/utils/syncEventPresentation.d.ts +15 -0
  399. package/dist/utils/syncEventPresentation.js +129 -0
  400. package/dist/utils/syncEventPresentation.test.d.ts +1 -0
  401. package/dist/utils/syncEventPresentation.test.js +64 -0
  402. package/dist/utils/syncStatusPresentation.d.ts +72 -0
  403. package/dist/utils/syncStatusPresentation.js +217 -0
  404. package/dist/utils/syncStatusPresentation.test.d.ts +1 -0
  405. package/dist/utils/syncStatusPresentation.test.js +164 -0
  406. package/dist/utils/taskActivity.d.ts +9 -1
  407. package/dist/utils/taskActivity.js +290 -22
  408. package/dist/utils/taskActivity.test.js +141 -8
  409. package/dist/utils/taskSearch.d.ts +22 -0
  410. package/dist/utils/taskSearch.js +87 -0
  411. package/dist/utils/taskSearch.test.d.ts +1 -0
  412. package/dist/utils/taskSearch.test.js +69 -0
  413. package/dist/utils/taskUtils.js +10 -3
  414. package/dist/utils/taskUtils.test.d.ts +1 -0
  415. package/dist/utils/taskUtils.test.js +19 -0
  416. package/dist/utils/workspaceSyncPresentation.d.ts +4 -0
  417. package/dist/utils/workspaceSyncPresentation.js +68 -2
  418. package/dist/utils/workspaceSyncPresentation.test.js +36 -1
  419. package/package.json +3 -2
  420. package/scripts/export-sqlite-to-postgres.mjs +7 -9
  421. package/scripts/run-e2e-realtime.sh +17 -3
  422. package/scripts/run-smoke.sh +17 -5
  423. package/scripts/run-soak.sh +17 -5
  424. package/src/resources/templates/workflow-sources/workflowDocs.mjs +6 -6
  425. package/src/resources/templates/workflows/collaborate.yaml +1 -1
  426. package/src/resources/templates/workflows/evaluate.yaml +2 -2
  427. package/src/resources/templates/workflows/plan.yaml +1 -1
  428. package/src/resources/templates/workflows/review.yaml +2 -2
  429. package/dist/ui/assets/AgentsModule-N2MnQBZk.js +0 -1
  430. package/dist/ui/assets/AnnotatedAttachmentWorkspace-BG6P_GVW.js +0 -3
  431. package/dist/ui/assets/AnnotatedAttachmentWorkspace-BaS2VwIr.css +0 -1
  432. package/dist/ui/assets/DocumentWorkspace-B3nV_Gc5.css +0 -1
  433. package/dist/ui/assets/DocumentWorkspace-DRbDMwh8.js +0 -252
  434. package/dist/ui/assets/PlansPage-C2dd2n1X.css +0 -1
  435. package/dist/ui/assets/PlansPage-Cq0zXj3I.js +0 -1
  436. package/dist/ui/assets/RussoOne-Regular-C3BxZIj7.ttf +0 -0
  437. package/dist/ui/assets/TaskSettings-ln0aF7xc.js +0 -9
  438. package/dist/ui/assets/index-C2-OXZV7.css +0 -1
  439. package/dist/ui/assets/index-DcSI5F86.js +0 -6
  440. package/scripts/migrate-planning-model.ts +0 -233
@@ -1 +0,0 @@
1
- ._plansWrapper_1i5vs_1{--plans-accent: var(--brand-primary, #6366f1);--plans-accent-strong: var(--brand-primary-strong, #7c3aed);--plans-accent-soft: var(--brand-primary-soft, rgba(99, 102, 241, .1));--plans-accent-border: var(--brand-primary-border, rgba(99, 102, 241, .24));--plans-surface: color-mix(in srgb, var(--surface-panel) 84%, var(--surface-page));--plans-surface-elevated: color-mix(in srgb, var(--surface-elevated) 88%, var(--surface-panel));--plans-surface-strong: color-mix(in srgb, var(--surface-page) 70%, var(--surface-panel));--plans-shadow: 0 22px 44px rgba(0, 0, 0, .18);overflow-y:auto;display:flex;flex-direction:column;align-items:stretch;align-self:stretch;width:100%;flex:1;min-height:100%;min-width:0;padding:64px 24px;box-sizing:border-box;background:radial-gradient(900px 520px at 18% -4%,color-mix(in srgb,var(--plans-accent) 18%,transparent),transparent 62%),radial-gradient(780px 480px at 88% 2%,color-mix(in srgb,var(--brand-cloud-accent, #dd6b20) 12%,transparent),transparent 60%),linear-gradient(180deg,color-mix(in srgb,var(--surface-page) 94%,var(--surface-panel)),var(--surface-page));scrollbar-gutter:stable}._contentFrame_1i5vs_28{width:min(1100px,100%);max-width:1100px;margin:0 auto;display:flex;flex-direction:column}._shellOwnsScroll_1i5vs_36{overflow:visible;min-height:100%;scrollbar-gutter:auto}._withChrome_1i5vs_42{padding-top:52px}._siteVariant_1i5vs_46{background:radial-gradient(1200px 700px at 20% -10%,rgba(56,189,248,.25),transparent 60%),radial-gradient(900px 600px at 90% 0%,rgba(45,212,191,.18),transparent 65%),linear-gradient(150deg,#0b1022,#111936);padding:56px 24px 80px}._siteVariant_1i5vs_46 ._title_1i5vs_54{background:none;-webkit-text-fill-color:var(--text-primary);color:var(--text-primary);font-size:clamp(34px,6vw,58px);letter-spacing:-.03em;margin-bottom:0}._siteVariant_1i5vs_46 ._subtitle_1i5vs_63{color:#a6b3d9}._siteVariant_1i5vs_46 ._header_1i5vs_67{width:100%;max-width:1040px;border:1px solid rgba(203,213,255,.2);border-radius:20px;padding:42px 28px;background:#090e208c;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);text-align:left;margin-bottom:20px}._siteVariant_1i5vs_46 ._planCard_1i5vs_79{background:#090e20b3;border-color:#cbd5ff33;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);border-radius:16px;padding:22px 20px}._siteVariant_1i5vs_46 ._planCard_1i5vs_79:hover{transform:translateY(-3px);box-shadow:none}._siteVariant_1i5vs_46 ._grid_1i5vs_92{max-width:1040px;gap:12px;grid-template-columns:repeat(3,minmax(0,1fr))}._siteVariant_1i5vs_46 ._planName_1i5vs_98{font-size:22px}._siteVariant_1i5vs_46 ._featureText_1i5vs_102{color:#a6b3d9}._siteVariant_1i5vs_46 ._currentBadge_1i5vs_106{font-size:11px}._siteVariant_1i5vs_46 ._navAction_1i5vs_110,._siteVariant_1i5vs_46 ._backBtn_1i5vs_111{border:1px solid rgba(203,213,255,.2);background:#141d3c99;color:#f6f8ff}._siteVariant_1i5vs_46 ._backBtn_1i5vs_111:hover,._siteVariant_1i5vs_46 ._navAction_1i5vs_110:hover{background:#141d3cd9}._siteVariant_1i5vs_46 ._priceRows_1i5vs_122{border-top-color:#cbd5ff33}._header_1i5vs_67{width:100%;text-align:left;margin-bottom:32px;padding:32px;border-radius:28px;border:1px solid var(--border-default);background:linear-gradient(180deg,color-mix(in srgb,var(--plans-surface-elevated) 92%,transparent),color-mix(in srgb,var(--plans-surface) 96%,transparent)),var(--plans-surface);box-shadow:var(--plans-shadow)}._headerBar_1i5vs_139{width:100%;display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:24px}._headerActions_1i5vs_148{display:flex;align-items:center;justify-content:flex-end;gap:12px;flex-wrap:wrap}._title_1i5vs_54{font-size:clamp(38px,5vw,54px);font-weight:800;margin-bottom:16px;background:linear-gradient(135deg,var(--text-primary),color-mix(in srgb,var(--plans-accent) 72%,var(--text-primary)));background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent;letter-spacing:-.04em;line-height:.98}._subtitle_1i5vs_63{max-width:720px;font-size:18px;color:var(--text-secondary);line-height:1.7}._debugMeta_1i5vs_175{margin-top:16px;font-size:13px;color:var(--text-secondary);opacity:.8}._grid_1i5vs_92{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:20px;width:100%}._planCard_1i5vs_79{background:linear-gradient(180deg,color-mix(in srgb,var(--plans-surface-elevated) 90%,transparent),color-mix(in srgb,var(--plans-surface) 96%,transparent)),var(--plans-surface);border:1px solid var(--border-default);border-radius:22px;padding:28px;display:flex;flex-direction:column;position:relative;overflow:hidden;box-shadow:0 12px 28px #0000001f;transition:transform .24s ease,box-shadow .24s ease,border-color .24s ease,background .24s ease}._clickablePlanCard_1i5vs_204{cursor:pointer}._clickablePlanCard_1i5vs_204:focus-visible{outline:2px solid var(--plans-accent);outline-offset:4px}._planCard_1i5vs_79:hover{transform:translateY(-4px);border-color:var(--plans-accent-border);box-shadow:0 20px 36px #0000002e}._activePlanCard_1i5vs_219{border:1px solid color-mix(in srgb,var(--plans-accent) 38%,var(--border-default));background:linear-gradient(180deg,color-mix(in srgb,var(--plans-accent) 10%,var(--plans-surface-elevated)),color-mix(in srgb,var(--plans-accent) 4%,var(--plans-surface))),var(--plans-surface);box-shadow:0 18px 34px #0000002e,inset 0 0 0 1px color-mix(in srgb,var(--plans-accent) 16%,transparent)}._currentBadge_1i5vs_106{position:absolute;top:20px;right:20px;background:color-mix(in srgb,var(--plans-accent) 16%,var(--surface-page));color:var(--plans-accent-strong);font-size:12px;font-weight:700;padding:6px 12px;border-radius:999px;border:1px solid color-mix(in srgb,var(--plans-accent) 26%,transparent);text-transform:uppercase;letter-spacing:.08em}._planName_1i5vs_98{font-size:28px;font-weight:700;color:var(--text-primary);margin-bottom:14px}._priceDisplay_1i5vs_251{margin-bottom:32px;display:flex;align-items:baseline;gap:8px}._priceAmount_1i5vs_258{font-size:56px;font-weight:800;color:var(--text-primary);letter-spacing:-2px;line-height:1}._priceInterval_1i5vs_266{font-size:16px;color:var(--text-secondary);font-weight:500}._callToAction_1i5vs_272{width:100%;padding:14px 18px;border-radius:12px;font-size:15px;font-weight:600;border:1px solid transparent;cursor:pointer;transition:all .2s ease;margin-bottom:0}._primaryCta_1i5vs_284{background:var(--button-primary-bg);border-color:var(--button-primary-border);color:var(--button-primary-text, white)}._primaryCta_1i5vs_284:hover{transform:translateY(-1px);box-shadow:0 10px 22px var(--brand-primary-glow)}._secondaryCta_1i5vs_295{background:var(--button-secondary-bg);color:var(--button-secondary-text);border-color:var(--button-secondary-border)}._secondaryCta_1i5vs_295:hover{background:var(--button-secondary-hover-bg);border-color:var(--button-secondary-hover-border);color:var(--button-secondary-hover-text)}._currentCta_1i5vs_307{background:color-mix(in srgb,var(--plans-accent) 9%,var(--plans-surface-strong));color:var(--text-primary);border-color:color-mix(in srgb,var(--plans-accent) 24%,var(--border-default));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--plans-accent) 10%,transparent);cursor:pointer}._currentCta_1i5vs_307:hover{background:color-mix(in srgb,var(--plans-accent) 14%,var(--plans-surface-strong));border-color:color-mix(in srgb,var(--plans-accent) 32%,var(--border-default));transform:translateY(-1px)}._featuresList_1i5vs_321{flex:1;display:flex;flex-direction:column;gap:20px;margin-bottom:28px}._priceRows_1i5vs_122{display:flex;flex-direction:column;gap:10px;margin-top:auto;margin-bottom:16px;border-top:1px solid var(--border-default);padding-top:16px}._priceRow_1i5vs_122{display:flex;align-items:baseline;justify-content:space-between;gap:10px}._priceRowAmount_1i5vs_346{font-size:22px;font-weight:700;color:var(--text-primary)}._priceRowInterval_1i5vs_352{color:var(--text-secondary);font-weight:600}._ctaRow_1i5vs_357{display:grid;grid-template-columns:1fr 1fr;gap:10px}._featureItem_1i5vs_363{display:flex;align-items:flex-start;gap:16px}._featureIcon_1i5vs_369{color:var(--plans-accent);flex-shrink:0;width:20px;height:20px;margin-top:2px}._featureText_1i5vs_102{font-size:16px;line-height:1.5;color:var(--text-primary)}._emptyState_1i5vs_383{text-align:center;padding:64px;background:var(--bg-secondary);border-radius:24px;border:1px dashed var(--border-color, var(--border-primary, rgba(255, 255, 255, .14)));width:100%}._marketingEmptyState_1i5vs_392{max-width:920px;border-style:solid;border-radius:28px;padding:72px 48px;background:radial-gradient(560px 260px at 15% 10%,rgba(34,197,94,.15),transparent 60%),radial-gradient(620px 320px at 85% 0%,rgba(251,191,36,.16),transparent 62%),linear-gradient(145deg,#0f172af5,#111827eb);box-shadow:0 28px 90px #00000047}._marketingEmptyState_1i5vs_392 h2{margin:18px 0 14px;font-size:clamp(32px,4vw,52px);line-height:1.02;letter-spacing:-.04em;color:#f8fafc}._marketingEmptyState_1i5vs_392 p{margin:0 auto;max-width:680px;font-size:18px;line-height:1.7;color:#cbd5e1}._emptyBadge_1i5vs_420{display:inline-flex;align-items:center;justify-content:center;padding:8px 16px;border-radius:999px;background:#f8fafc14;border:1px solid rgba(248,250,252,.18);color:#f8fafc;font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase}._emptyHighlights_1i5vs_435{display:flex;flex-wrap:wrap;justify-content:center;gap:12px;margin-top:28px}._emptyHighlights_1i5vs_435 span{display:inline-flex;align-items:center;gap:8px;padding:10px 14px;border-radius:999px;background:#94a3b81f;border:1px solid rgba(148,163,184,.18);color:#e2e8f0;font-size:13px;font-weight:700;letter-spacing:.02em}._loader_1i5vs_457{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:50vh;gap:24px;color:var(--text-secondary)}._spinner_1i5vs_467{animation:_spin_1i5vs_467 1s linear infinite;color:var(--accent-primary, #6366f1)}@keyframes _spin_1i5vs_467{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._backBtn_1i5vs_111{background:var(--button-secondary-bg);border:1px solid var(--button-secondary-border);color:var(--button-secondary-text);display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600;cursor:pointer;padding:10px 16px;border-radius:12px;transition:all .2s ease}._backBtn_1i5vs_111:hover{background:var(--button-secondary-hover-bg);border-color:var(--button-secondary-hover-border);color:var(--button-secondary-hover-text)}._navAction_1i5vs_110{background:var(--button-secondary-bg);border:1px solid var(--button-secondary-border);color:var(--button-secondary-text);padding:10px 20px;border-radius:12px;font-weight:600;cursor:pointer;transition:all .2s ease}._navAction_1i5vs_110:hover{background:var(--button-secondary-hover-bg);border-color:var(--button-secondary-hover-border);color:var(--button-secondary-hover-text)}._statusBanner_1i5vs_520{margin-top:24px;padding:12px 24px;border-radius:12px;font-weight:500;font-size:14px}._successBanner_1i5vs_528{background:color-mix(in srgb,var(--status-success) 12%,var(--plans-surface-elevated));color:var(--status-success);border:1px solid color-mix(in srgb,var(--status-success) 24%,transparent)}._infoBanner_1i5vs_534{background:color-mix(in srgb,var(--button-primary-bg) 10%,var(--plans-surface-elevated));color:var(--text-secondary);border:1px solid color-mix(in srgb,var(--button-primary-bg) 18%,transparent)}._errorBanner_1i5vs_540{background:color-mix(in srgb,var(--status-error) 12%,var(--plans-surface-elevated));color:var(--status-error);border:1px solid color-mix(in srgb,var(--status-error) 24%,transparent)}@media(max-width:768px){._plansWrapper_1i5vs_1{padding:28px 14px}._withChrome_1i5vs_42{padding-top:36px}._header_1i5vs_67{margin-bottom:24px;padding:22px 18px}._headerBar_1i5vs_139{gap:10px;flex-wrap:wrap;margin-bottom:18px}._title_1i5vs_54{font-size:34px;margin-bottom:12px}._grid_1i5vs_92{grid-template-columns:1fr;gap:18px}._siteVariant_1i5vs_46 ._grid_1i5vs_92{grid-template-columns:1fr}._siteVariant_1i5vs_46 ._header_1i5vs_67{padding:26px 18px}._planCard_1i5vs_79{padding:22px}._marketingEmptyState_1i5vs_392{padding:56px 24px}._marketingEmptyState_1i5vs_392 h2{font-size:34px}._marketingEmptyState_1i5vs_392 p{font-size:16px}._headerActions_1i5vs_148{width:100%;justify-content:flex-start}}
@@ -1 +0,0 @@
1
- import{r as s,j as e}from"./vendor-react-CKJs5o3c.js";import{y as le,t as ke,z as xe,B as me,C as ne,E as ae,F as je,G as Ne}from"./index-DcSI5F86.js";import{aK as Ie,h as Pe,U as Re}from"./vendor-icons-BSUaRwF8.js";import{u as Te,a as Be}from"./vendor-router-BbWMxlnO.js";import"./vendor-markdown-BUxTU7dS.js";import"./vendor-dnd-DRzYolkg.js";const Ee="_plansWrapper_1i5vs_1",$e="_contentFrame_1i5vs_28",Ae="_shellOwnsScroll_1i5vs_36",Me="_withChrome_1i5vs_42",Ue="_siteVariant_1i5vs_46",Fe="_title_1i5vs_54",Le="_subtitle_1i5vs_63",Oe="_header_1i5vs_67",Ve="_planCard_1i5vs_79",Ke="_grid_1i5vs_92",Ye="_planName_1i5vs_98",De="_featureText_1i5vs_102",He="_currentBadge_1i5vs_106",ze="_navAction_1i5vs_110",Ge="_backBtn_1i5vs_111",qe="_priceRows_1i5vs_122",We="_headerBar_1i5vs_139",Qe="_headerActions_1i5vs_148",Je="_debugMeta_1i5vs_175",Xe="_clickablePlanCard_1i5vs_204",Ze="_activePlanCard_1i5vs_219",et="_callToAction_1i5vs_272",tt="_primaryCta_1i5vs_284",rt="_secondaryCta_1i5vs_295",nt="_currentCta_1i5vs_307",at="_featuresList_1i5vs_321",st="_priceRow_1i5vs_122",it="_priceRowAmount_1i5vs_346",ot="_priceRowInterval_1i5vs_352",ct="_ctaRow_1i5vs_357",lt="_featureItem_1i5vs_363",ut="_featureIcon_1i5vs_369",dt="_emptyState_1i5vs_383",mt="_marketingEmptyState_1i5vs_392",pt="_emptyBadge_1i5vs_420",ft="_emptyHighlights_1i5vs_435",gt="_loader_1i5vs_457",ht="_spinner_1i5vs_467",yt="_statusBanner_1i5vs_520",_t="_successBanner_1i5vs_528",vt="_infoBanner_1i5vs_534",Ct="_errorBanner_1i5vs_540",r={plansWrapper:Ee,contentFrame:$e,shellOwnsScroll:Ae,withChrome:Me,siteVariant:Ue,title:Fe,subtitle:Le,header:Oe,planCard:Ve,grid:Ke,planName:Ye,featureText:De,currentBadge:He,navAction:ze,backBtn:Ge,priceRows:qe,headerBar:We,headerActions:Qe,debugMeta:Je,clickablePlanCard:Xe,activePlanCard:Ze,callToAction:et,primaryCta:tt,secondaryCta:rt,currentCta:nt,featuresList:at,priceRow:st,priceRowAmount:it,priceRowInterval:ot,ctaRow:ct,featureItem:lt,featureIcon:ut,emptyState:dt,marketingEmptyState:mt,emptyBadge:pt,emptyHighlights:ft,loader:gt,spinner:ht,statusBanner:yt,successBanner:_t,infoBanner:vt,errorBanner:Ct};function St(){const n=globalThis.__DEBUG_MODE__;return typeof n=="boolean"?n:!1}function bt(n){const o=String(n?.environment||"").trim(),y=String(n?.runtimeMode||"").trim();return!o&&!y?null:o&&y?`${o} (${y})`:o||y||null}function wt(n,o){if(n==null||!o)return"Contact Sales";try{return new Intl.NumberFormat("en-US",{style:"currency",currency:o.toUpperCase(),minimumFractionDigits:0}).format(n/100)}catch{return`${o.toUpperCase()} ${n/100}`}}function kt(){return"$0.00"}function ye(n){return n?n.pricingType==="free"?!0:n.unitAmount!=null&&n.currency!=null:!1}function _e(n){return n?n.pricingType==="free"?kt():wt(n.unitAmount,n.currency):"Unavailable"}function ve(n){const o=[n.pricing.month,n.pricing.year].filter(Boolean);if(o.some(g=>g.pricingType==="free"))return 0;const y=o.map(g=>g.pricingType==="stripe"&&typeof g.unitAmount=="number"?g.unitAmount:null).filter(g=>g!=null);return y.length>0?Math.min(...y):Number.POSITIVE_INFINITY}function xt({heading:n,subtitle:o,variant:y="app",chrome:g,footer:L,isAuthenticated:O,authSessionResolved:ue=!0,currentPlanId:X,currentPlanVersionId:D,currentEntitlementState:Z,canManageCurrentPlan:N=!0,pricingEndpoint:se,statusBanner:V,onBack:I,backLabel:ee,backDisabled:b=!1,topActions:v,shellOwnsScroll:w=!1,showPageBackButton:te=!0,fallbackPricingSource:H=null,onSelectPlan:T}){const[ie,c]=s.useState([]),[z,G]=s.useState(null),[A,E]=s.useState(!0),[C,k]=s.useState(null),[de,q]=s.useState(0);s.useEffect(()=>{let i=!0;return(async()=>{const u=String(se||"/api/taskforce/public/pricing").trim()||"/api/taskforce/public/pricing";i&&(E(!0),k(null));try{const S=await fetch(u,{method:"GET",credentials:"include"}),_=await S.json().catch(()=>({}));if(S.ok){i&&(c(Array.isArray(_?.plans)?_.plans:[]),G(_?.pricingSource&&typeof _.pricingSource=="object"?_.pricingSource:null));return}throw new Error(String(_?.error||`Failed to load pricing (${S.status})`))}catch(S){if(i){const _=S instanceof Error?S.message:"Failed to load pricing";k(_||"Failed to load pricing"),G(null)}}finally{i&&E(!1)}})(),()=>{i=!1}},[se,de]);const re=s.useMemo(()=>[...ie].sort((i,x)=>{const u=ve(i),S=ve(x);if(u!==S)return u-S;const _=i.defaultVersion?.versionNumber||0,l=x.defaultVersion?.versionNumber||0;return _!==l?_-l:String(i.displayName||i.planId).localeCompare(String(x.displayName||x.planId))}),[ie]),M=s.useMemo(()=>bt(z||H),[H,z]),P=`${r.plansWrapper} ${w?r.shellOwnsScroll:"tf-scrollbar"} ${y==="site"?r.siteVariant:""} ${g?r.withChrome:""}`.trim(),W=i=>w?e.jsxs(e.Fragment,{children:[g,i,L]}):e.jsxs("div",{className:ke.standaloneWrapper,"data-theme":"dark",children:[g,i,L]});return W(A||!ue?e.jsx(e.Fragment,{children:e.jsx("div",{className:P,children:e.jsx("div",{className:r.contentFrame,children:e.jsxs("div",{className:r.loader,children:[e.jsx(Pe,{size:48,className:r.spinner}),e.jsx("p",{children:"Loading plans..."})]})})})}):C?e.jsx(e.Fragment,{children:e.jsx("div",{className:P,children:e.jsx("div",{className:r.contentFrame,children:e.jsxs("div",{className:r.emptyState,children:[e.jsx("h2",{children:"Connecting to plan pricing..."}),e.jsx("p",{children:C}),e.jsx("button",{className:r.backBtn,onClick:()=>q(i=>i+1),children:"Retry"})]})})})}):e.jsx(e.Fragment,{children:e.jsx("div",{className:P,children:e.jsxs("div",{className:r.contentFrame,children:[e.jsxs("div",{className:r.header,children:[!g&&(te||v)&&e.jsxs("div",{className:r.headerBar,children:[e.jsx("div",{children:te?e.jsx("button",{className:r.backBtn,onClick:I,disabled:b,children:ee}):null}),e.jsx("div",{className:r.headerActions,children:v})]}),e.jsx("h1",{className:r.title,children:n}),o&&e.jsx("p",{className:r.subtitle,children:o}),St()&&M?e.jsxs("p",{className:r.debugMeta,children:["Pricing source: ",M]}):null,V&&e.jsx("div",{className:`${r.statusBanner} ${V.type==="success"?r.successBanner:V.type==="info"?r.infoBanner:r.errorBanner}`,children:V.message})]}),re.length===0?e.jsxs("div",{className:`${r.emptyState} ${r.marketingEmptyState}`,children:[e.jsx("span",{className:r.emptyBadge,children:"Coming Soon"}),e.jsx("h2",{children:"Paid plans are getting their final polish."}),e.jsx("p",{children:"Taskforce pricing is on the way with flexible options for solo operators, teams, and larger rollouts. Check back soon for launch tiers, feature bundles, and early access details."}),e.jsxs("div",{className:r.emptyHighlights,"aria-label":"Upcoming pricing highlights",children:[e.jsx("span",{children:"Launch-ready tiers"}),e.jsx("span",{children:"Team billing controls"}),e.jsx("span",{children:"Feature-based packaging"})]})]}):e.jsx("div",{className:r.grid,children:re.map(i=>{const x=i.pricing.month,u=i.pricing.year,S=ye(x),_=ye(u),l=String(i.defaultVersion?.planVersionId||"").trim(),$=le(Z)&&(!!(l&&D&&D===l)||!D&&!!(X&&X===i.planId)),R=S?"month":_?"year":null,U=R==="year"?u:x,p=!!l&&($?N:!!R),Q=()=>{if(l){if($){if(!N)return;T({planId:i.planId,planVersionId:l,interval:R||"month",pricingType:U?.pricingType||"stripe",isCurrentPlan:!0});return}R&&T({planId:i.planId,planVersionId:l,interval:R,pricingType:U?.pricingType||"stripe",isCurrentPlan:!1})}};return e.jsxs("div",{className:`${r.planCard} ${$?r.activePlanCard:""} ${p?r.clickablePlanCard:""}`,"data-testid":`plan-card-${i.planId}`,role:p?"button":void 0,tabIndex:p?0:void 0,onClick:p?Q:void 0,onKeyDown:p?h=>{(h.key==="Enter"||h.key===" ")&&(h.preventDefault(),Q())}:void 0,children:[$&&e.jsx("span",{className:r.currentBadge,children:"Current Plan"}),e.jsx("h3",{className:r.planName,children:i.displayName}),e.jsx("div",{className:r.featuresList,children:Array.isArray(i.features)&&i.features.length>0?i.features.map((h,K)=>e.jsxs("div",{className:r.featureItem,children:[e.jsx(Ie,{className:r.featureIcon}),e.jsx("span",{className:r.featureText,children:String(h.featureKey||"").replace(/[_\-.]+/g," ").replace(/\b\w/g,oe=>oe.toUpperCase())})]},`${h.featureKey}-${K}`)):e.jsx("span",{className:r.featureText,children:"No additional features included"})}),e.jsxs("div",{className:r.priceRows,children:[e.jsxs("div",{className:r.priceRow,children:[e.jsx("span",{className:r.priceRowAmount,children:_e(x)}),e.jsx("span",{className:r.priceRowInterval,children:"/ month"})]}),e.jsxs("div",{className:r.priceRow,children:[e.jsx("span",{className:r.priceRowAmount,children:_e(u)}),e.jsx("span",{className:r.priceRowInterval,children:"/ year"})]})]}),$?e.jsx("button",{className:`${r.callToAction} ${r.currentCta}`,"data-testid":`plan-manage-${i.planId}`,onClick:h=>{h.stopPropagation(),N&&T({planId:i.planId,planVersionId:l,interval:R||"month",pricingType:U?.pricingType||"stripe",isCurrentPlan:!0})},disabled:!l||!N,children:O&&N?"Manage Plan":"Current Plan"}):e.jsxs("div",{className:r.ctaRow,children:[e.jsx("button",{className:`${r.callToAction} ${r.secondaryCta}`,"data-testid":`plan-select-${i.planId}-month`,onClick:h=>{h.stopPropagation(),T({planId:i.planId,planVersionId:l,interval:"month",pricingType:x?.pricingType||"stripe",isCurrentPlan:!1})},disabled:!l||!S,children:x?.pricingType==="free"?O?"Select Free":"Get Started Free":O?"Choose Monthly":"Get Started Monthly"}),e.jsx("button",{className:`${r.callToAction} ${r.primaryCta}`,"data-testid":`plan-select-${i.planId}-year`,onClick:h=>{h.stopPropagation(),T({planId:i.planId,planVersionId:l,interval:"year",pricingType:u?.pricingType||"stripe",isCurrentPlan:!1})},disabled:!l||!_,children:u?.pricingType==="free"?O?"Select Free":"Get Started Free":O?"Choose Yearly":"Get Started Yearly"})]})]},i.planId)})})]})})}))}const jt=1600,Nt=[0,500,1e3,2e3];function It(n,o){return n===401?!0:String(o||"").trim().toUpperCase()==="CHECKOUT_SESSION_INCOMPLETE"}function Pt(n){return n==="year"?"year":"month"}function Ce(n){const o=String(n||"").trim();return o?o.replace(/\/+$/,""):""}function pe(n={}){const o=new URLSearchParams;o.set("screen","plans");for(const[y,g]of Object.entries(n)){const L=String(g||"").trim();L&&o.set(y,L)}return`/?${o.toString()}`}function Mt({isAuthenticated:n,authUserId:o,runtimeMode:y,authSessionResolved:g,currentTheme:L="dark",projectName:O,currentWorkspaceId:ue,apiBaseUrl:X,connectedEnvironmentSource:D,resolveCloudAuthUrl:Z,embedded:N=!1,shellOwnsScroll:se=!1,onAccountProfileSummaryChange:V,onContinueToTaskforce:I,continueBusy:ee=!1}){const b=Te(),v=Be(),[w,te]=s.useState(null),[H,T]=s.useState(!1),[ie,c]=s.useState(null),z=s.useRef(!1),G=s.useRef(null),A=s.useRef(null),E=s.useMemo(()=>new URLSearchParams(v.search),[v.search]),C=String(E.get("checkout")||"").trim().toLowerCase(),k=String(E.get("gate")||"").trim().toLowerCase(),de=String(E.get("planId")||"").trim(),q=String(E.get("planVersionId")||"").trim(),re=Pt(E.get("interval")),M=String(E.get("session_id")||"").trim(),P=s.useMemo(()=>Ce(X),[X]),W=s.useMemo(()=>Ce(D),[D]),i=s.useMemo(()=>({environment:xe(W||P),runtimeMode:y==="cloud"?"cloud":"local"}),[P,W,y]),x=s.useCallback(t=>{const a=String(t||"").trim();return P?`${P}${a.startsWith("/")?a:`/${a}`}`:a},[P]),u=s.useCallback(t=>Z?Z(t):x(t),[x,Z]),S=s.useCallback(()=>{const t=new URLSearchParams(v.search);t.delete("screen"),t.delete("gate"),t.delete("checkout"),t.delete("planId"),t.delete("planVersionId"),t.delete("interval");const a=t.toString();b(`/${a?`?${a}`:""}${v.hash||""}`)},[v.hash,v.search,b]),_=s.useMemo(()=>[P?`${P}/api/taskforce/public/pricing`:"","/api/taskforce/public/pricing"].map(a=>String(a||"").trim()).filter((a,d,f)=>a&&f.indexOf(a)===d),[P]),l=s.useMemo(()=>me(w,k),[w,k]),B=s.useMemo(()=>l.allowReturnToApp,[l.allowReturnToApp]),$=s.useMemo(()=>l.message,[l.message]),R=s.useCallback(()=>{const t=new URLSearchParams(v.search);t.delete("checkout"),t.delete("session_id"),t.delete("gate"),t.delete("planId"),t.delete("planVersionId"),t.delete("interval");const a=t.toString();b(`${v.pathname}${a?`?${a}`:""}${v.hash||""}`,{replace:!0})},[v.hash,v.pathname,v.search,b]),U=s.useCallback(()=>{A.current!=null&&window.clearTimeout(A.current),A.current=window.setTimeout(()=>{R(),A.current=null},jt)},[R]),p=s.useCallback(async t=>{const a=u(ne);if(!n)return te(null),ae(a,{identityKey:o}),null;try{const d=await je(a,{identityKey:o,force:t?.force===!0});return te(d),V?.(d),d}catch{return null}},[o,u,n,V]),Q=s.useCallback((t,a)=>{const d=me(t,k).message;return d||String(a||"Unable to confirm checkout completion.").trim()||"Unable to confirm checkout completion."},[k]),h=s.useCallback((t,a)=>!me(t,a).allowReturnToApp,[]),K=s.useCallback(async(t,a,d)=>{if(!t){c({type:"error",message:"Selected plan is missing a default plan version."});return}T(!0),c(null);try{const f=await fetch(u("/api/taskforce/billing/checkout-session"),{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({planVersionId:t,interval:a})}),m=await f.json().catch(()=>({}));if(!f.ok){c({type:"error",message:String(m?.error||"Unable to start checkout for selected plan.")});return}const j=String(m?.checkoutState||"").trim().toLowerCase();if(j==="free"){c({type:"success",message:"Plan selected. Your access is ready."}),ae(u(ne),{identityKey:o});const Y=await p({force:!0}),J=String(Y?.entitlementState||"").trim().toLowerCase();d?.autoContinueOnActivation===!0&&le(J)&&await I?.();return}if(j==="updated"){c({type:"success",message:String(m?.message||"Your subscription was updated successfully.")}),ae(u(ne),{identityKey:o});const Y=await p({force:!0}),J=String(Y?.entitlementState||"").trim().toLowerCase();d?.autoContinueOnActivation===!0&&le(J)&&await I?.();return}if(j==="already_current_plan"){c({type:"success",message:String(m?.message||"You are already on this plan.")}),ae(u(ne),{identityKey:o}),await p();return}const F=String(m?.returnBaseUrl||"").trim();if(y==="local"&&F)try{const Y=window.location.origin,J=new URL(F,Y).origin;if(J!==Y){c({type:"error",message:`Checkout return is misconfigured for this runtime. Expected ${Y} but got ${J}.`});return}}catch{c({type:"error",message:"Checkout return URL is invalid for this runtime."});return}const he=String(m?.url||"").trim();if(!he){c({type:"error",message:"Checkout did not return a redirect URL."});return}window.location.assign(he)}catch{c({type:"error",message:"Unable to start checkout for selected plan."})}finally{T(!1)}},[o,u,p,I,y]),oe=s.useCallback(async(t,a)=>{if(!t)return{confirmed:!1,errorMessage:"Checkout session is missing.",retryable:!1};try{const d=await fetch(u("/api/taskforce/billing/checkout-session/confirm"),{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:t})}),f=await d.json().catch(()=>({}));if(!d.ok){const F=String(f?.code||"").trim();return{confirmed:!1,errorMessage:String(f?.error||"Unable to confirm checkout completion."),retryable:It(d.status,F)}}ae(u(ne),{identityKey:o});const m=await p({force:!0}),j=String(m?.entitlementState||"").trim().toLowerCase();return a?.autoContinueOnActivation===!0&&le(j)&&await I?.(),{confirmed:!0}}catch{return{confirmed:!1,errorMessage:"Unable to confirm checkout completion.",retryable:!0}}},[o,u,p,I]),ce=s.useCallback(async()=>{if(!n){b(`/login?mode=login&next=${encodeURIComponent(pe())}`);return}T(!0),c(null);try{const t=await fetch(u("/api/taskforce/billing/portal-session"),{method:"POST",credentials:"include"}),a=await t.json().catch(()=>({}));if(!t.ok){c({type:"error",message:String(a?.error||"Failed to open billing portal.")});return}const d=String(a?.url||"").trim();if(!d){c({type:"error",message:"Portal session did not return a redirect URL."});return}window.location.assign(d)}catch{c({type:"error",message:"Failed to open billing portal."})}finally{T(!1)}},[u,n,b]);s.useEffect(()=>{p()},[p]),s.useEffect(()=>{B&&k==="missing_entitlement"&&R()},[R,k,B]),s.useEffect(()=>()=>{A.current!=null&&window.clearTimeout(A.current)},[]),s.useEffect(()=>{C!=="success"&&(G.current=null)},[C]),s.useEffect(()=>{let t=!1;const a=new Set,d=async f=>{f<=0||await new Promise(m=>{const j=window.setTimeout(()=>{a.delete(j),m()},f);a.add(j)})};if(C==="success"){if(z.current=!0,c({type:"success",message:"Checkout completed successfully. Finalizing your plan..."}),!g)return()=>{t=!0,a.forEach(m=>window.clearTimeout(m)),a.clear()};if(!n)return c({type:"error",message:"Sign in to finish activating your plan."}),()=>{t=!0,a.forEach(m=>window.clearTimeout(m)),a.clear()};const f=M||"__missing_session__";return G.current===f?()=>{t=!0,a.forEach(m=>window.clearTimeout(m)),a.clear()}:(G.current=f,(async()=>{const m=await p({force:!0});if(t)return;let j=M?{confirmed:!1,errorMessage:"Unable to confirm checkout completion.",retryable:!0}:{confirmed:!1,errorMessage:"Checkout session is missing.",retryable:!1};for(const F of Nt){if(await d(F),t||(j=M?await oe(M,{autoContinueOnActivation:h(m,k)}):{confirmed:!1,errorMessage:"Checkout session is missing.",retryable:!1},t))return;if(j.confirmed){c({type:"success",message:"Checkout completed successfully."}),U();return}if(!j.retryable)break}if(!t&&!j.confirmed){const F=await p({force:!0});if(t)return;c({type:"error",message:Q(F,j.errorMessage)}),U();return}})(),()=>{t=!0,a.forEach(m=>window.clearTimeout(m)),a.clear()})}if(C==="cancel"){(async()=>{const f=await p({force:!0});c({type:"error",message:Q(f,"Checkout was canceled. No charge was made.")}),U()})();return}if((C==="start"||C==="free")&&n&&q&&!z.current){z.current=!0,(async()=>{const f=await p({force:!0});await K(q,re,{autoContinueOnActivation:h(f,k)})})();return}},[g,C,oe,k,n,p,re,q,M,Q,U,h,K]),s.useEffect(()=>{if(!(C==="success"||C==="cancel"||C==="start"||C==="free")){if($){c({type:l.statusTone,message:$});return}c(t=>!t||t.type!=="error"?t:t.message===l.message?null:t)}},[C,$,l.message,l.statusTone]);const Se=s.useCallback(async t=>{if(!n){const d=t.pricingType==="free"?"free":"start",f=pe({checkout:d,planId:t.planId,planVersionId:t.planVersionId,interval:t.interval});b(`/login?mode=register&planId=${encodeURIComponent(t.planId)}&planVersionId=${encodeURIComponent(t.planVersionId)}&interval=${encodeURIComponent(t.interval)}&next=${encodeURIComponent(f)}`);return}if(t.isCurrentPlan){if(!w?.stripeCustomerId){c({type:"success",message:"Your current plan does not use Stripe billing."});return}await ce();return}const a=h(w,k);if(t.pricingType==="free"){await K(t.planVersionId,t.interval,{autoContinueOnActivation:a});return}await K(t.planVersionId,t.interval,{autoContinueOnActivation:a})},[w,k,n,b,ce,h,K]),fe=s.useCallback(()=>{if(B&&I){I();return}if(N){S();return}if(window.history.length>1){b(-1);return}b("/")},[S,N,B,b,I]),be=B&&I?e.jsx("button",{className:r.navAction,onClick:()=>{I()},disabled:ee||H,children:"Take Me to Taskforce"}):null,ge=N?e.jsxs(e.Fragment,{children:[be,n&&w?.stripeCustomerId&&e.jsx("button",{className:r.navAction,onClick:()=>{ce()},disabled:H,children:"Manage billing"})]}):e.jsxs(e.Fragment,{children:[e.jsx("button",{className:r.navAction,onClick:fe,disabled:ee||n&&!B,children:B?"Take Me to Taskforce":"Back"}),n&&w?.stripeCustomerId&&e.jsx("button",{className:r.navAction,onClick:()=>{ce()},disabled:H,children:"Manage billing"}),!n&&e.jsxs("button",{className:r.navAction,onClick:()=>b(`/login?mode=login&next=${encodeURIComponent(pe())}`),children:[e.jsx(Re,{size:16,style:{marginRight:"8px",verticalAlign:"text-bottom"}}),"Sign In"]})]}),we=N?null:e.jsx(Ne,{projectName:O,currentWorkspaceId:ue,runtimeMode:y==="cloud"?"cloud":"local",theme:L,actions:ge});return e.jsx(xt,{chrome:we,heading:"Subscription Plans",subtitle:"Manage your subscription and explore available features. Your current plan is highlighted below.",isAuthenticated:n,authSessionResolved:g,currentPlanId:String(w?.planId||de||"").trim()||null,currentPlanVersionId:String(w?.planVersionId||q||"").trim()||null,currentEntitlementState:String(w?.entitlementState||"").trim()||null,canManageCurrentPlan:!!w?.stripeCustomerId,pricingEndpoint:_[0],statusBanner:ie,onBack:fe,backLabel:B?"Take Me to Taskforce":N?"Back to Board":"Back to App",backDisabled:ee||n&&!B,topActions:N?ge:null,shellOwnsScroll:se,showPageBackButton:!N,fallbackPricingSource:i,onSelectPlan:Se})}export{Mt as PlansPage};
@@ -1,9 +0,0 @@
1
- import{r as l,j as e,R as He}from"./vendor-react-CKJs5o3c.js";import{p as on,t as s,T as Ts,P as We,A as Ss,I as le,r as Y,D as ln,a as na,b as rn,l as ga,c as cn,d as ia}from"./index-DcSI5F86.js";import{T as Ue,n as Qe,X as ws,g as xa,f as ya,I as rt,a2 as es,o as dn,h as _e,r as ba,a3 as oa,k as we,d as pn,a4 as la,a5 as ra,a6 as pt,L as va,a7 as un,b as be,i as ve,a8 as mn,a9 as hn,q as gn,aa as ut,a as ks,ab as xn,Z as Cs,B as ca,c as ct,p as yn,ac as bn,ad as vn,ae as fn,af as fa,ag as jn,ah as kn,ai as Cn,aj as Nn}from"./vendor-icons-BSUaRwF8.js";import"./vendor-markdown-BUxTU7dS.js";import"./vendor-dnd-DRzYolkg.js";import"./vendor-router-BbWMxlnO.js";const wn={aiProfileToken:"X-Taskforce-AI-Profile-Token",aiProfileName:"X-Taskforce-AI-Name",aiProfileIcon:"X-Taskforce-AI-Icon",aiProfileColor:"X-Taskforce-AI-Color",aiProfileDescription:"X-Taskforce-AI-Description",aiProfileRole:"X-Taskforce-AI-Role",aiProfileProvider:"X-Taskforce-AI-Provider",aiProfileModel:"X-Taskforce-AI-Model",aiProfileSurfaceType:"X-Taskforce-AI-Surface-Type"};function Ne(a){return String(a||"").trim()||null}function Tn(a){return a==null?null:on(a)}function Sn(a){return{aiProfileToken:Ne(a.aiProfileToken),aiProfileName:Ne(a.aiProfileName),aiProfileIcon:Ne(a.aiProfileIcon),aiProfileColor:Ne(a.aiProfileColor),aiProfileDescription:Ne(a.aiProfileDescription),aiProfileRole:Ne(a.aiProfileRole),aiProfileProvider:Ne(a.aiProfileProvider),aiProfileModel:Ne(a.aiProfileModel),aiProfileSurfaceType:Tn(a.aiProfileSurfaceType)}}function $n(a){const o=Sn(a),h={};for(const[g,k]of Object.entries(wn)){const w=o[g];w&&(h[k]=w)}return h}const dt=[{id:"general",label:"General"},{id:"antigravity",label:"Antigravity"},{id:"claude-code",label:"Claude Code CLI"},{id:"cline",label:"Cline"},{id:"codex",label:"Codex"},{id:"cursor",label:"Cursor"},{id:"gemini-cli",label:"Gemini CLI"},{id:"openclaw",label:"OpenClaw"},{id:"vscode",label:"VS Code / Copilot"},{id:"windsurf",label:"Windsurf"}];function mt(a,o){return String(a||"").toLowerCase().replace(/[^a-zA-Z0-9_-]+/g,"-").replace(/-+/g,"-").replace(/^[-_]+|[-_]+$/g,"")||o.toLowerCase()}function In(a,o){const g=mt(a||o||"workspace","workspace").slice(0,25)||"workspace";return mt(`taskforce-${g}`,"taskforce-workspace")}function _n(a,o){return o}function Ln(a){return{Authorization:`Bearer ${a.tokenValue}`,...$n(a)}}function Pn(a){return`${a} Keep the generated AI bootstrap headers intact so Taskforce can bind and restore the same AI profile automatically.`}function he(a,o){return Pn(`${a} Use the generated config exactly as shown.`)}function ge(a){return`${a} Use the generated config exactly as shown. No token is required for local stdio MCP.`}function ht(a){return JSON.stringify(a)}function Bn(a){return`[${a.map(o=>ht(o)).join(", ")}]`}function An(a){return!a||Object.keys(a).length===0?[]:[`env = { ${Object.entries(a).map(([o,h])=>`${o} = ${ht(h)}`).join(", ")} }`]}function da(a){return/^[A-Za-z0-9_./:@%+=,-]+$/.test(a)?a:`'${a.replace(/'/g,`'"'"'`)}'`}function Mn(a){const{clientId:o,endpoint:h,tokenValue:g,serverId:k}=a,w=Ln(a);w.Authorization;const S=Object.entries(w).filter(([$])=>$!=="Authorization").map(([$,B])=>` --header "${$}: ${B}"`).join("");switch(o){case"general":return{clientId:o,kind:"json",rootKey:"mcpServers",serverConfig:{url:h,headers:w},instructionLabel:"General MCP Configuration Instructions",instructionText:he("Add this server to your MCP client using its standard remote HTTP configuration format.")};case"cursor":return{clientId:o,kind:"json",rootKey:"mcpServers",serverConfig:{url:h,headers:w},instructionLabel:"Cursor Configuration Instructions",instructionText:he("Open Cursor settings, find MCP servers, and paste this config.")};case"cline":return{clientId:o,kind:"json",rootKey:"mcpServers",serverConfig:{url:h,type:"streamableHttp",headers:w},instructionLabel:"Cline Configuration Instructions",instructionText:he("Open Cline MCP Servers, add a remote server, or paste this into the Cline MCP config with Streamable HTTP selected.")};case"vscode":return{clientId:o,kind:"json",rootKey:"servers",serverConfig:{type:"http",url:h,headers:w},instructionLabel:"VS Code Configuration Instructions",instructionText:he("Open .vscode/mcp.json or MCP: Open User Configuration and add this server under the servers object.")};case"windsurf":return{clientId:o,kind:"json",rootKey:"mcpServers",serverConfig:{serverUrl:h,headers:w},instructionLabel:"Windsurf Configuration Instructions",instructionText:he("Open Windsurf MCP settings, add a server, and paste this config.")};case"antigravity":return{clientId:o,kind:"json",rootKey:"mcpServers",serverConfig:{serverUrl:h,headers:w},instructionLabel:"Antigravity Configuration Instructions",instructionText:he("Open Antigravity MCP settings, view the raw config, and paste this Antigravity-specific configuration.")};case"openclaw":return{clientId:o,kind:"json",rootKey:"servers",wrapperKeys:["mcp"],serverConfig:{transport:"streamable-http",url:h,headers:w},instructionLabel:"OpenClaw Configuration Instructions",instructionText:he("Open ~/.openclaw/openclaw.json and add this server under mcp.servers.")};case"codex":return{clientId:o,kind:"text",renderedText:[`[mcp_servers.${k}]`,`url = "${h}"`,`http_headers = { ${Object.entries(w).map(([$,B])=>`${$} = "${B}"`).join(", ")} }`].join(`
2
- `),instructionLabel:"Codex Configuration Instructions",instructionText:he("Open ~/.codex/config.toml and add this Codex MCP entry.")};case"claude-code":return{clientId:o,kind:"text",renderedText:`claude mcp add --transport http ${k} ${h} --header "Authorization: Bearer ${g}"${S}`,instructionLabel:"Claude Code Configuration Instructions",instructionText:he("Run this Claude Code command in your terminal to add the remote Taskforce MCP server.")};case"gemini-cli":return{clientId:o,kind:"text",renderedText:`gemini mcp add ${k} ${h} --transport http --header "Authorization: Bearer ${g}"${S}`,instructionLabel:"Gemini CLI Configuration Instructions",instructionText:he("Run this Gemini CLI command in your terminal to add the remote Taskforce MCP server. Add --scope user if you want it available across all projects.")};case"claude-desktop":return{clientId:o,kind:"text",renderedText:_n(o,h),instructionLabel:"Claude Desktop Configuration Instructions",instructionText:"Open Claude Desktop Settings > Connectors, paste this MCP server URL, and complete the Taskforce OAuth flow to authorize one workspace."};case"chatgpt-desktop":return{clientId:o,kind:"text",renderedText:h,instructionLabel:"ChatGPT Desktop Configuration Instructions",instructionText:"Open ChatGPT Apps & Connectors / developer mode, paste this MCP server URL, and complete the Taskforce OAuth authorize flow when ChatGPT opens it."};default:{const $=o;throw new Error(`Unsupported MCP client: ${$}`)}}}function Dn(a){const{clientId:o,serverId:h,serverConfig:g}=a,k={command:g.command,args:g.args,...g.env&&Object.keys(g.env).length>0?{env:g.env}:{}},w=Object.entries(g.env||{}).map(([$,B])=>` --env ${da(`${$}=${B}`)}`).join(""),S=[g.command,...g.args].map($=>da($)).join(" ");switch(o){case"general":return{clientId:o,kind:"json",rootKey:"mcpServers",serverConfig:k,instructionLabel:"General MCP Configuration Instructions",instructionText:ge("Add this server to your MCP client using its standard local stdio configuration format.")};case"cursor":return{clientId:o,kind:"json",rootKey:"mcpServers",serverConfig:k,instructionLabel:"Cursor Configuration Instructions",instructionText:ge("Open Cursor settings, find MCP servers, and paste this local stdio config.")};case"cline":return{clientId:o,kind:"json",rootKey:"mcpServers",serverConfig:k,instructionLabel:"Cline Configuration Instructions",instructionText:ge("Open Cline MCP Servers and paste this local stdio server config.")};case"vscode":return{clientId:o,kind:"json",rootKey:"servers",serverConfig:{type:"stdio",...k},instructionLabel:"VS Code Configuration Instructions",instructionText:ge("Open .vscode/mcp.json or MCP: Open User Configuration and add this server under the servers object.")};case"windsurf":return{clientId:o,kind:"json",rootKey:"mcpServers",serverConfig:k,instructionLabel:"Windsurf Configuration Instructions",instructionText:ge("Open Windsurf MCP settings and paste this local stdio config.")};case"antigravity":return{clientId:o,kind:"json",rootKey:"mcpServers",serverConfig:k,instructionLabel:"Antigravity Configuration Instructions",instructionText:ge("Open Antigravity MCP settings, view the raw config, and paste this local stdio configuration.")};case"openclaw":return{clientId:o,kind:"json",rootKey:"servers",wrapperKeys:["mcp"],serverConfig:{transport:"stdio",...k},instructionLabel:"OpenClaw Configuration Instructions",instructionText:ge("Open ~/.openclaw/openclaw.json and add this local stdio server under mcp.servers.")};case"codex":return{clientId:o,kind:"text",renderedText:[`[mcp_servers.${h}]`,`command = ${ht(g.command)}`,`args = ${Bn(g.args)}`,...An(g.env)].join(`
3
- `),instructionLabel:"Codex Configuration Instructions",instructionText:ge("Open ~/.codex/config.toml and add this local MCP entry.")};case"claude-code":return{clientId:o,kind:"text",renderedText:`claude mcp add ${h}${w} -- ${S}`,instructionLabel:"Claude Code Configuration Instructions",instructionText:ge("Run this Claude Code command in your terminal to add the local Taskforce MCP server.")};case"gemini-cli":return{clientId:o,kind:"json",rootKey:"mcpServers",serverConfig:k,instructionLabel:"Gemini CLI Configuration Instructions",instructionText:ge("Open ~/.gemini/settings.json and add this local MCP server under mcpServers.")};case"claude-desktop":case"chatgpt-desktop":throw new Error(`Unsupported local MCP client: ${o}`);default:{const $=o;throw new Error(`Unsupported local MCP client: ${$}`)}}}const En="_categoryManagerContainer_1ibti_1",zn="_pathInputGroupStretch_1ibti_9",Rn="_emptyStateItalic_1ibti_13",Gn="_emptyStateBox_1ibti_28",On="_emptyStateBare_1ibti_44",Fn="_emptyStateIcon_1ibti_49",Hn="_taxonomyGrid_1ibti_55",Wn="_checkboxRow_1ibti_61",Un="_checkboxLabel_1ibti_67",Kn="_checkboxSmall_1ibti_75",Vn="_flexGap8_1ibti_80",qn="_optionOrderButtons_1ibti_85",Jn="_addTaxonomyBtnSmall_1ibti_92",E={categoryManagerContainer:En,pathInputGroupStretch:zn,emptyStateItalic:Rn,emptyStateBox:Gn,emptyStateBare:On,emptyStateIcon:Fn,taxonomyGrid:Hn,checkboxRow:Wn,checkboxLabel:Un,checkboxSmall:Kn,flexGap8:Vn,optionOrderButtons:qn,addTaxonomyBtnSmall:Jn},Xn="_taxonomyDrillDown_1oekr_1",Yn="_drillDownList_1oekr_7",Zn="_librarySection_1oekr_13",Qn="_libraryLauncher_1oekr_18",ei="_libraryLauncherInfo_1oekr_40",si="_libraryLauncherIcon_1oekr_47",ti="_libraryLauncherText_1oekr_60",ai="_libraryLauncherLabel_1oekr_67",ni="_libraryLauncherSubtext_1oekr_73",ii="_libraryLauncherMeta_1oekr_79",oi="_drillDownSection_1oekr_89",li="_drillDownSectionHeader_1oekr_95",ri="_drillDownSectionTitle_1oekr_102",ci="_drillDownItem_1oekr_111",di="_drillDownItemAction_1oekr_126",pi="_drillDownItemDimmed_1oekr_145",ui="_drillDownItemInfo_1oekr_153",mi="_drillDownItemText_1oekr_159",hi="_drillDownItemLabel_1oekr_165",gi="_drillDownItemSubtext_1oekr_170",xi="_systemIcon_1oekr_175",yi="_chevron_1oekr_179",bi="_orderButtons_1oekr_184",vi="_createOverlay_1oekr_195",fi="_createDialog_1oekr_209",ji="_createDialogTitle_1oekr_218",ki="_inputGroup_1oekr_224",Ci="_dialogActions_1oekr_228",Ni="_createSubmit_1oekr_234",wi="_createCancel_1oekr_238",Ti="_taxonomyDetailView_1oekr_242",Si="_detailHeader_1oekr_249",$i="_taxonomyBreadcrumbs_1oekr_257",Ii="_breadcrumbPrev_1oekr_263",_i="_breadcrumbIcon_1oekr_284",Li="_breadcrumbDivider_1oekr_288",Pi="_breadcrumbActive_1oekr_293",Bi="_detailContent_1oekr_301",b={taxonomyDrillDown:Xn,drillDownList:Yn,librarySection:Zn,libraryLauncher:Qn,libraryLauncherInfo:ei,libraryLauncherIcon:si,libraryLauncherText:ti,libraryLauncherLabel:ai,libraryLauncherSubtext:ni,libraryLauncherMeta:ii,drillDownSection:oi,drillDownSectionHeader:li,drillDownSectionTitle:ri,drillDownItem:ci,drillDownItemAction:di,drillDownItemDimmed:pi,drillDownItemInfo:ui,drillDownItemText:mi,drillDownItemLabel:hi,drillDownItemSubtext:gi,systemIcon:xi,chevron:yi,orderButtons:bi,createOverlay:vi,createDialog:fi,createDialogTitle:ji,inputGroup:ki,dialogActions:Ci,createSubmit:Ni,createCancel:wi,taxonomyDetailView:Ti,detailHeader:Si,taxonomyBreadcrumbs:$i,breadcrumbPrev:Ii,breadcrumbIcon:_i,breadcrumbDivider:Li,breadcrumbActive:Pi,detailContent:Bi};function Ai(a){const o=[{id:"categories",label:a.displayLabels?.category||"Categories",kind:"system",summary:`${a.categories.length} configured`},{id:"types",label:a.displayLabels?.type||"Task Types",kind:"system",summary:`${a.types.length} active`},{id:"priorities",label:a.displayLabels?.priority||"Priority Levels",kind:"system",summary:`${a.priorities.length} levels`},{id:"complexities",label:"Complexity",kind:"attribute",summary:a.manualComplexityEnabled?"Enabled":"Disabled (default)"}],h=a.taxonomies.map(g=>({id:g.id,label:g.label,kind:"custom",summary:`${g.options.length} options${g.status==="retired"?" · Retired":""}`,taxonomy:g}));return[...o,...h]}function Mi({taxonomy:a,onUpdateTaxonomy:o,onRemoveTaxonomy:h,onRestoreTaxonomy:g}){const[k,w]=l.useState(""),[S,$]=l.useState(!1),[B,R]=l.useState(""),[F,C]=l.useState(a.label),[_,P]=l.useState((a.aliases||[]).join(", ")),[W,A]=l.useState(""),[y,T]=l.useState(null),M=n=>{const c=n.split(",").map(L=>L.trim()).filter(Boolean);return c.length>0?Array.from(new Set(c)):void 0};l.useEffect(()=>{C(a.label),P((a.aliases||[]).join(", "));const n=a.options.find(c=>String(c.value)===String(k));T(n||null),A((n?.aliases||[]).join(", "))},[a,k]);const x=n=>{o({...a,...n})},z=()=>{if(!B.trim())return;const n=B.toLowerCase().trim().replace(/\s+/g,"-");if(a.options.some(L=>L.value===n)){alert("Option value already exists");return}const c={value:n,label:B.trim(),color:We[a.options.length%We.length],status:"active"};x({options:[...a.options,c]}),R(""),$(!1),w(n)},u=(n,c)=>{x({options:a.options.map(L=>String(L.value)===String(n)?{...L,...c}:L)})},U=n=>{u(n,{status:"retired"})},m=n=>{u(n,{status:"active"})},I=(n,c)=>{const L=a.options.findIndex(G=>String(G.value)===String(n));if(L<0)return;const v=L+c;if(v<0||v>=a.options.length)return;const O=[...a.options],[p]=O.splice(L,1);O.splice(v,0,p),x({options:O})};return e.jsxs("div",{className:E.categoryManagerContainer,children:[e.jsxs("div",{className:`${s.categoryConfigPanel} ${s.configPanel} ${s.marginBottom24}`,children:[e.jsxs("div",{className:`${s.flexBetween} ${s.marginBottom16}`,children:[e.jsx("div",{className:s.flex1,children:e.jsx("label",{className:`${s.subLabel} ${s.subLabelBlock} ${s.marginBottom8}`,children:"Taxonomy Settings"})}),!a.isSystem&&(a.status==="retired"?e.jsx("button",{type:"button",className:s.saveSettingsBtn,onClick:()=>g?.(a.id),children:"Restore Taxonomy"}):h&&e.jsxs("button",{type:"button",className:`${s.destructiveBtn} ${s.deleteBtnSmall}`,onClick:()=>{confirm(`Retire taxonomy "${a.label}"? Existing task data will be preserved as legacy values.`)&&h(a.id)},children:[e.jsx(Ue,{size:14,className:s.trashIcon})," Retire Taxonomy"]}))]}),a.status==="retired"&&e.jsx("p",{className:s.settingsHint,style:{marginTop:"-4px",marginBottom:"16px"},children:"This taxonomy is retired. Existing tasks keep their values, but it is hidden from normal new-task entry unless a task already uses it."}),e.jsxs("div",{className:E.taxonomyGrid,children:[e.jsxs("div",{className:s.settingGroup,style:{margin:0},children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Display Label"}),e.jsx("input",{className:s.input,value:F,onChange:n=>C(n.target.value),onBlur:()=>x({label:F}),disabled:a.isSystem,placeholder:"e.g. Sprint, Phase..."})]}),e.jsxs("div",{className:s.settingGroup,style:{margin:0},children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Description"}),e.jsx("textarea",{className:s.textarea,value:a.description||"",onChange:n=>x({description:n.target.value}),placeholder:"Optional guidance for when and how to use this taxonomy...",rows:3,style:{minHeight:"88px"}})]}),e.jsxs("div",{className:s.settingGroup,style:{margin:0},children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Aliases"}),e.jsx("input",{className:s.input,value:_,onChange:n=>P(n.target.value),onBlur:()=>x({aliases:M(_)}),placeholder:"Optional aliases, comma-separated"})]}),e.jsxs("div",{className:s.settingGroup,style:{margin:0},children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Widget Type"}),e.jsxs("select",{className:s.select,value:a.widgetType,onChange:n=>{const c=n.target.value;x({widgetType:c,multiSelect:c==="level"?!1:a.multiSelect})},children:[e.jsx("option",{value:"select",children:"Dropdown (Select Box)"}),e.jsx("option",{value:"level",children:"Level Selector (Segmented)"})]})]})]}),e.jsxs("div",{className:E.checkboxRow,children:[e.jsxs("label",{className:E.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:a.isRequired,onChange:n=>x({isRequired:n.target.checked}),className:E.checkboxSmall}),"Mark as Required"]}),e.jsxs("label",{className:`${E.checkboxLabel} ${a.widgetType==="level"?s.opacity50:""}`,children:[e.jsx("input",{type:"checkbox",checked:a.multiSelect,onChange:n=>x({multiSelect:n.target.checked}),disabled:a.widgetType==="level",className:E.checkboxSmall}),"Allow Multi-select"]})]}),e.jsxs("div",{className:E.checkboxRow,children:[e.jsxs("label",{className:E.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:a.formEnabled!==!1,onChange:n=>x({formEnabled:n.target.checked}),className:E.checkboxSmall}),"Show in Task Form"]}),e.jsxs("label",{className:E.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:a.filterEnabled!==!1,onChange:n=>x({filterEnabled:n.target.checked}),className:E.checkboxSmall}),"Show in Filters"]}),e.jsxs("label",{className:E.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:a.sortEnabled===!0,onChange:n=>x({sortEnabled:n.target.checked}),className:E.checkboxSmall}),"Show in Sorts"]})]})]}),e.jsx("div",{className:`${s.configDivider} ${s.configDividerMargin24}`}),e.jsxs("div",{className:`${s.configPanel} ${s.flex1} ${s.flexCol}`,children:[e.jsxs("div",{className:`${s.headerFlex}`,style:{marginBottom:y&&!S||S?"16px":"0"},children:[e.jsx("div",{style:{flex:1},children:e.jsx(Ts,{value:k,options:[{value:"",label:"Select an option to configure...",icon:"HelpCircle",color:"var(--text-secondary)"},...a.options.map(n=>({value:n.value,label:n.status==="retired"?`${n.label} (Retired)`:n.label,icon:n.icon,color:n.color}))],onChange:n=>{w(n),$(!1)},disabled:S})}),S?e.jsx("button",{type:"button",onClick:()=>$(!1),title:"Cancel",className:`${s.browseBtn} ${s.cancelBtnRed}`,children:e.jsx(ws,{size:18})}):e.jsx("button",{type:"button",className:s.browseBtn,onClick:()=>$(!0),title:"Add Option",children:e.jsx(Qe,{size:18})})]}),S&&e.jsx("div",{className:`${s.configItem} ${s.marginBottom16}`,children:e.jsxs("div",{className:E.flexGap8,children:[e.jsx("input",{type:"text",className:s.input,placeholder:"New option label...",value:B,onChange:n=>R(n.target.value),onKeyDown:n=>{n.key==="Enter"&&z()},autoFocus:!0}),e.jsx("button",{type:"button",className:s.saveSettingsBtn,onClick:z,disabled:!B.trim(),children:"Add Option"})]})}),y&&!S&&e.jsxs("div",{className:s.flex1,children:[e.jsx("div",{className:`${s.configDivider} ${s.marginBottom20}`}),e.jsxs("div",{className:`${s.flexBetweenCenter} ${s.marginBottom20}`,children:[e.jsxs("div",{className:`${s.flexColGap4} ${s.flex1}`,children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Option Label"}),e.jsxs("div",{className:s.gridConfig,children:[e.jsx("input",{className:s.input,value:y.label,onChange:n=>u(y.value,{label:n.target.value}),placeholder:"Option Label"}),y.status==="retired"?e.jsx("button",{type:"button",className:s.saveSettingsBtn,onClick:()=>m(y.value),title:"Restore Option",children:"Restore"}):e.jsxs("button",{type:"button",className:`${s.destructiveBtn} ${s.deleteBtnMedium}`,onClick:()=>U(y.value),title:"Retire Option",children:[e.jsx(Ue,{size:14,className:s.trashIcon})," Retire"]})]})]}),e.jsxs("div",{className:E.optionOrderButtons,children:[e.jsx("button",{type:"button",className:s.browseBtn,title:"Move option up",onClick:()=>I(y.value,-1),disabled:a.options[0]?.value===y.value,children:e.jsx(xa,{size:16})}),e.jsx("button",{type:"button",className:s.browseBtn,title:"Move option down",onClick:()=>I(y.value,1),disabled:a.options[a.options.length-1]?.value===y.value,children:e.jsx(ya,{size:16})})]})]}),e.jsx("p",{className:s.settingsHint,style:{marginBottom:"20px"},children:"Retired options stay visible for existing tasks and filters, but they should not be used for new work."}),e.jsxs("div",{className:s.settingGroup,style:{marginBottom:"20px"},children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Aliases"}),e.jsx("input",{className:s.input,value:W,onChange:n=>A(n.target.value),onBlur:()=>u(y.value,{aliases:M(W)}),placeholder:"Optional aliases, comma-separated"})]}),e.jsx("div",{className:`${s.configDivider} ${s.configDividerMargin}`}),e.jsxs("div",{className:s.configSection,children:[e.jsx("label",{className:`${s.label} ${s.inputLabelBlock}`,children:"Visual Style"}),e.jsxs("div",{className:s.categorySubConfig,children:[e.jsx("div",{className:s.colorPickerGrid,children:We.map(n=>{const c=Y(n)||"#000000",L=y.color===n,v=y.icon&&rt[y.icon]?rt[y.icon]:es;return e.jsx("button",{type:"button",className:`${s.colorSwatch} ${L?s.colorSwatchActive:""}`,style:{borderColor:L?c:void 0,"--swatch-color":c,"--swatch-border-color":`${c}80`},onClick:()=>u(y.value,{color:n}),title:n,children:e.jsx(v,{size:14,style:{color:c}})},n)})}),e.jsx("div",{className:s.iconGrid,children:Ss.map(n=>{const c=rt[n]||le[n]||es;return e.jsx("button",{type:"button",className:`${s.iconPickerBtn} ${y.icon===n?s.iconPickerBtnActive:""}`,style:y.icon===n?{borderColor:Y(y.color),color:Y(y.color),background:`${Y(y.color)}15`}:{},onClick:()=>u(y.value,{icon:n}),title:n,children:e.jsx(c,{size:16})},n)})})]})]})]}),!y&&!S&&e.jsxs("div",{className:`${E.emptyStateBox} ${E.emptyStateBare}`,children:[e.jsx(dn,{size:24,className:E.emptyStateIcon}),"Select an option above to configure its appearance"]})]})]})}function Di(a){const{displayLabel:o,categories:h,pathValidation:g,onUpdateDisplayLabel:k,onUpdateCategory:w,onRemoveCategory:S,onSaveCategory:$,onAddPath:B,onRemovePath:R,onUpdateCategoryIcon:F,onUpdateCategoryColor:C,onBrowseFolders:_}=a,[P,W]=l.useState(""),[A,y]=l.useState(!1),[T,M]=l.useState(""),[x,z]=l.useState(""),[u,U]=l.useState(o||""),[m,I]=l.useState("");l.useEffect(()=>{U(o||"")},[o]),l.useEffect(()=>{const p=h.find(G=>G.value===P);p&&z(p.label)},[P,h]);const n=()=>{if(!T.trim())return;$(T);const p=T.trim().toLowerCase().replace(/\s+/g,"-");M(""),y(!1),setTimeout(()=>W(p),100)},c=p=>{x&&x!==p.label&&w({...p,label:x},p.label)},L=p=>{const G=[];if(p.path&&G.push(p.path),p.paths&&p.paths.length>0)for(const q of p.paths)G.includes(q)||G.push(q);return G},v=h.find(p=>p.value===P),O=v?.value===ln;return e.jsxs("div",{className:`${s.configPanel} ${s.flex1}`,children:[e.jsxs("div",{className:`${s.headerFlex}`,style:{marginBottom:v&&!A||A?"20px":"0"},children:[e.jsxs("div",{style:{flex:1},children:[e.jsx("label",{id:"category-config-label",className:s.label,style:{display:"none"},children:"Select Category"}),e.jsx(Ts,{value:P,options:[{value:"",label:"Select a category to configure...",icon:"HelpCircle",color:"var(--text-secondary)"},...h.map(p=>({value:p.value,label:`${p.label}${p.disabled?" (Legacy)":""}`,icon:p.icon,color:p.color}))],onChange:p=>{W(String(p)),y(!1)},disabled:A,ariaLabelledBy:"category-config-label"})]}),A?e.jsx("button",{type:"button",className:`${s.browseBtn} ${s.cancelBtnRed}`,onClick:()=>y(!1),title:"Cancel creation",children:e.jsx(ws,{size:18})}):e.jsx("button",{type:"button",className:s.browseBtn,onClick:()=>y(!0),title:"Create new category",children:e.jsx(Qe,{size:18})})]}),A&&e.jsxs("div",{className:`${s.configItem} ${s.marginBottom16}`,children:[e.jsx("div",{className:`${s.labelRow} ${s.marginBottom8}`,children:e.jsx("label",{className:s.settingsLabel,children:"New Category Name"})}),e.jsxs("div",{style:{display:"flex",gap:"8px"},children:[e.jsx("input",{type:"text",className:s.input,placeholder:"e.g. Backend, Frontend, API...",value:T,onChange:p=>M(p.target.value),onKeyDown:p=>{p.key==="Enter"&&n()},autoFocus:!0}),e.jsx("button",{type:"button",className:s.saveSettingsBtn,onClick:n,disabled:!T.trim(),children:"Create"})]})]}),v&&!A&&e.jsxs("div",{className:s.flex1,style:{overflowY:"auto",marginRight:"-8px",paddingRight:"8px"},children:[e.jsx("div",{className:`${s.configDivider} ${s.marginBottom20}`}),e.jsxs("div",{className:`${s.configSection} ${s.marginBottom20}`,children:[e.jsxs("div",{className:s.flexBetween,children:[e.jsx("label",{className:`${s.subLabel} ${s.subLabelBlock}`,children:"General"}),!O&&e.jsxs("button",{type:"button",onClick:()=>{confirm(`Retire category "${v.label}"? Existing tasks will be reassigned to ${na}.`)&&(S(v.value),W(""))},title:"Retire Category",className:`${s.destructiveBtn} ${s.deleteBtnSmall}`,children:[e.jsx(Ue,{size:14,className:s.trashIcon})," Retire"]})]}),O&&e.jsxs("p",{className:s.settingsHint,style:{marginBottom:"12px"},children:[na," is the protected fallback category and cannot be retired."]}),e.jsxs("div",{className:s.gridConfig,children:[e.jsxs("div",{className:s.flexColGap4,children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Display Label"}),e.jsx("input",{className:s.input,value:u,onChange:p=>U(p.target.value),onBlur:()=>k?.(u.trim())})]}),e.jsxs("div",{className:s.flexColGap4,children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Label"}),e.jsx("input",{className:s.input,value:x,onChange:p=>z(p.target.value),onBlur:()=>c(v),onKeyDown:p=>{p.key==="Enter"&&(c(v),p.target.blur())}})]}),e.jsxs("div",{className:s.flexColGap4Center,children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Available for New Tasks"}),e.jsx("input",{type:"checkbox",checked:!v.disabled,onChange:()=>w({...v,disabled:!v.disabled}),className:s.checkboxInput})]})]}),e.jsx("p",{className:s.settingsHint,style:{marginTop:"12px"},children:"Turn this off to keep the category on existing tasks while removing it from new task selection by default."})]}),e.jsx("div",{className:`${s.configDivider} ${s.configDividerMargin}`}),e.jsxs("div",{className:`${s.configSection} ${s.marginBottom20}`,children:[e.jsx("label",{className:s.subLabel,style:{fontSize:"14px",fontWeight:600,display:"block",marginBottom:"8px"},children:"Context Paths"}),e.jsx("p",{className:s.settingsHint,style:{marginBottom:"12px"},children:"Files in these paths will be included as context for tasks in this category."}),L(v).length>0&&e.jsx("div",{className:`${s.pathList} ${s.pathListMargin}`,children:L(v).map((p,G)=>{const q=g[p],re=q?.exists,Ke=q?.isFile;return e.jsxs("div",{className:`${s.pathChip} ${re===!1?s.pathInvalid:re?s.pathValid:""}`,children:[re===void 0?e.jsx(_e,{size:12,className:s.spinner}):re?Ke?e.jsx(ba,{size:12,className:s.pathValidIcon}):e.jsx(oa,{size:12,className:s.pathValidIcon}):e.jsx(we,{size:12,className:s.pathInvalidIcon}),e.jsx("span",{className:s.pathText,title:p,children:p}),e.jsx("button",{type:"button",className:s.removePathBtn,onClick:()=>R(v.value,p),title:"Remove path",children:e.jsx(ws,{size:10})})]},G)})}),e.jsxs("div",{className:`${s.pathInputGroup} ${E.pathInputGroupStretch}`,children:[e.jsx("input",{type:"text",className:s.input,value:m,onChange:p=>I(p.target.value),onKeyDown:p=>{p.key==="Enter"&&(p.preventDefault(),m.trim()&&(B(v.value,m.trim()),I("")))},placeholder:"Add path (e.g. frontend/src/...)"}),e.jsx("button",{type:"button",className:s.browseBtn,onClick:()=>{m.trim()&&(B(v.value,m.trim()),I(""))},disabled:!m.trim(),title:"Add path",children:e.jsx(Qe,{size:18})}),e.jsx("button",{type:"button",className:s.browseBtn,onClick:()=>_(v.value),title:"Browse folders",children:e.jsx(oa,{size:16})})]})]}),e.jsx("div",{className:`${s.configDivider} ${s.configDividerMargin}`}),e.jsxs("div",{className:s.configSection,children:[e.jsx("label",{className:`${s.subLabel} ${s.subLabelBlock} ${s.subLabelBlock12}`,children:"Visual Style"}),e.jsxs("div",{className:s.categorySubConfig,children:[e.jsx("div",{className:s.colorPickerGrid,children:We.map(p=>{const G=Y(p)||"#000000",q=v.color===p,re=v.icon&&le[v.icon]?le[v.icon]:pn;return e.jsx("button",{type:"button",className:`${s.colorSwatch} ${q?s.colorSwatchActive:""}`,style:{borderColor:q?G:void 0,"--swatch-color":G,"--swatch-border-color":`${G}80`},onClick:()=>C(v.value,p),title:p,children:e.jsx(re,{size:14,style:{color:G}})},p)})}),e.jsx("div",{className:s.iconGrid,children:Ss.map(p=>{const G=le[p];return e.jsx("button",{type:"button",className:`${s.iconPickerBtn} ${v.icon===p?s.iconPickerBtnActive:""}`,style:v.icon===p?{borderColor:Y(v.color),color:Y(v.color),background:`${Y(v.color)}15`}:{},onClick:()=>F(v.value,p),title:p,children:e.jsx(G,{size:16})},p)})})]})]})]}),!v&&!A&&e.jsx("div",{className:`${E.emptyStateItalic} ${E.emptyStateBare}`,children:"Select a category above to configure settings"})]})}function Ei(a){const{types:o,onSaveType:h,onRemoveType:g,onUpdateType:k,displayLabel:w,onUpdateDisplayLabel:S}=a,[$,B]=l.useState(""),[R,F]=l.useState(!1),[C,_]=l.useState(""),[P,W]=l.useState(""),[A,y]=l.useState(w||"");l.useEffect(()=>{const u=o.find(U=>U.value===$);u&&W(u.label)},[$,o]),l.useEffect(()=>{y(w||"")},[w]);const T=o.find(u=>u.value===$),M=T?.value===rn,x=T?.status==="retired",z=()=>{if(!C.trim())return;h(C);const u=C.trim().toLowerCase().replace(/\s+/g,"-");_(""),F(!1),setTimeout(()=>B(u),100)};return e.jsxs("div",{className:`${s.configPanel} ${s.flex1}`,children:[e.jsxs("div",{className:`${s.headerFlex}`,style:{marginBottom:T&&!R||R?"20px":"0"},children:[e.jsxs("div",{style:{flex:1},children:[e.jsx("label",{id:"type-config-label",className:s.label,style:{display:"none"},children:"Select Type"}),e.jsx(Ts,{value:$,options:[{value:"",label:"Select a type to configure...",icon:"HelpCircle",color:"var(--text-secondary)"},...o.map(u=>({value:u.value,label:u.status==="retired"?`${u.label} (Retired)`:u.label,icon:u.icon||"Box",color:u.color||"violet-500"}))],onChange:u=>{B(String(u)),F(!1)},disabled:R,ariaLabelledBy:"type-config-label"})]}),R?e.jsx("button",{type:"button",className:`${s.browseBtn} ${s.cancelBtnRed}`,onClick:()=>F(!1),title:"Cancel creation",children:e.jsx(ws,{size:18})}):e.jsx("button",{type:"button",className:s.browseBtn,onClick:()=>F(!0),title:"Create new type",children:e.jsx(Qe,{size:18})})]}),R&&e.jsxs("div",{className:`${s.configItem} ${s.marginBottom16}`,children:[e.jsx("div",{className:`${s.labelRow} ${s.marginBottom8}`,children:e.jsx("label",{className:s.settingsLabel,children:"New Type Label"})}),e.jsxs("div",{style:{display:"flex",gap:"8px"},children:[e.jsx("input",{type:"text",className:s.input,placeholder:"e.g. Bug, Feature, Chore...",value:C,onChange:u=>_(u.target.value),onKeyDown:u=>{u.key==="Enter"&&z()},autoFocus:!0}),e.jsx("button",{type:"button",className:s.saveSettingsBtn,onClick:z,disabled:!C.trim(),children:"Create"})]})]}),T&&!R&&e.jsxs("div",{className:s.flex1,children:[e.jsx("div",{className:`${s.configDivider} ${s.marginBottom20}`}),e.jsx("div",{className:s.flexBetweenCenter,children:e.jsxs("div",{className:`${s.flexColGap4} ${s.flex1}`,children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Display Label"}),e.jsx("input",{className:s.input,value:A,onChange:u=>y(u.target.value),onBlur:()=>S?.(A.trim())}),e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Label"}),e.jsxs("div",{className:s.gridConfig,children:[e.jsx("input",{className:s.input,value:P,onChange:u=>W(u.target.value),onBlur:()=>k(T.value,{label:P}),onKeyDown:u=>{u.key==="Enter"&&u.currentTarget.blur()}}),!M&&e.jsxs("button",{type:"button",onClick:()=>{if(x){k(T.value,{status:"active"});return}confirm(`Retire type "${T.label}"? Existing tasks using it will keep it as a legacy type until reassigned.`)&&g(T.value)},title:x?"Restore Type":"Retire Type",className:`${s.destructiveBtn} ${s.deleteBtnMedium}`,children:[e.jsx(Ue,{size:14,className:s.trashIcon})," ",x?"Restore":"Retire"]})]})]})}),e.jsx("p",{className:`${s.settingsHint} ${s.marginTop12}`,children:M?"Task is the protected fallback type and cannot be retired.":x?"Retired types stay available as legacy values on existing tasks until you reassign them.":"Retiring a type removes it from new task selection while preserving it as a legacy value on tasks that already use it."}),e.jsx("div",{className:`${s.configDivider} ${s.configDividerMargin}`}),e.jsxs("div",{className:s.configSection,children:[e.jsx("label",{className:`${s.subLabel} ${s.subLabelBlock} ${s.subLabelBlock12}`,children:"Visual Style"}),e.jsxs("div",{className:s.categorySubConfig,children:[e.jsx("div",{className:s.colorPickerGrid,children:We.map(u=>{const U=Y(u)||"#000000",m=T.color===u,I=T.icon&&le[T.icon]?le[T.icon]:es;return e.jsx("button",{type:"button",className:`${s.colorSwatch} ${m?s.colorSwatchActive:""}`,style:{borderColor:m?U:void 0,"--swatch-color":U,"--swatch-border-color":`${U}80`},onClick:()=>k(T.value,{color:u}),title:u,children:e.jsx(I,{size:14,style:{color:U}})},u)})}),e.jsx("div",{className:s.iconGrid,children:Ss.map(u=>{const U=le[u];return e.jsx("button",{type:"button",className:`${s.iconPickerBtn} ${T.icon===u?s.iconPickerBtnActive:""}`,style:T.icon===u?{borderColor:Y(T.color),color:Y(T.color),background:`${Y(T.color)}15`}:{},onClick:()=>k(T.value,{icon:u}),title:u,children:e.jsx(U,{size:16})},u)})})]})]})]}),!T&&!R&&e.jsx("div",{className:`${E.emptyStateItalic} ${E.emptyStateBare}`,children:"Select a type above to manage"})]})}function zi({priorities:a,onUpdatePriorities:o,displayLabel:h,onUpdateDisplayLabel:g}){const[k,w]=l.useState(""),[S,$]=l.useState(null),[B,R]=l.useState(h||"");l.useEffect(()=>{const C=a.find(_=>String(_.value)===String(k))||null;$(C)},[a,k]),l.useEffect(()=>{R(h||"")},[h]);const F=(C,_)=>{o(a.map(P=>String(P.value)===String(C)?{...P,..._}:P))};return e.jsxs("div",{className:`${s.configPanel} ${s.flex1}`,children:[e.jsxs("div",{className:s.marginBottom20,children:[e.jsx("label",{id:"priority-config-label",className:s.label,style:{display:"none"},children:"Select Priority"}),e.jsx(Ts,{value:k,options:[{value:"",label:"Select a priority level to configure...",icon:"HelpCircle",color:"var(--text-secondary)"},...a.map(C=>({value:C.value,label:C.label,icon:C.icon||"Gauge",color:C.color||"blue-500"}))],onChange:C=>w(C),ariaLabelledBy:"priority-config-label"})]}),S?e.jsxs("div",{className:s.flex1,style:{overflowY:"auto",marginRight:"-8px",paddingRight:"8px"},children:[e.jsx("div",{className:`${s.configDivider} ${s.marginBottom20}`}),e.jsxs("div",{className:`${s.configSection} ${s.marginBottom20}`,children:[e.jsx("label",{className:`${s.subLabel} ${s.subLabelBlock}`,children:"General"}),e.jsx("p",{className:s.settingsHint,style:{marginBottom:"12px"},children:"Priority uses a fixed ordered scale. You can rename and restyle levels, but not add, remove, or reorder them here."}),e.jsxs("div",{className:s.gridConfig,children:[e.jsxs("div",{className:s.flexColGap4,children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Display Label"}),e.jsx("input",{className:s.input,value:B,onChange:C=>R(C.target.value),onBlur:()=>g?.(B.trim())})]}),e.jsxs("div",{className:s.flexColGap4,children:[e.jsx("label",{className:`${s.label} ${s.inputLabel}`,children:"Label"}),e.jsx("input",{className:s.input,value:S.label,onChange:C=>F(S.value,{label:C.target.value})})]})]})]}),e.jsx("div",{className:`${s.configDivider} ${s.configDividerMargin}`}),e.jsxs("div",{className:s.configSection,children:[e.jsx("label",{className:`${s.subLabel} ${s.subLabelBlock} ${s.subLabelBlock12}`,children:"Visual Style"}),e.jsxs("div",{className:s.categorySubConfig,children:[e.jsx("div",{className:s.colorPickerGrid,children:We.map(C=>{const _=Y(C)||"#000000",P=S.color===C,W=S.icon&&le[S.icon]?le[S.icon]:la;return e.jsx("button",{type:"button",className:`${s.colorSwatch} ${P?s.colorSwatchActive:""}`,style:{borderColor:P?_:void 0,"--swatch-color":_,"--swatch-border-color":`${_}80`},onClick:()=>F(S.value,{color:C}),title:C,children:e.jsx(W,{size:14,style:{color:_}})},C)})}),e.jsx("div",{className:s.iconGrid,children:Ss.map(C=>{const _=le[C]||la;return e.jsx("button",{type:"button",className:`${s.iconPickerBtn} ${S.icon===C?s.iconPickerBtnActive:""}`,style:S.icon===C?{borderColor:Y(S.color),color:Y(S.color),background:`${Y(S.color)}15`}:{},onClick:()=>F(S.value,{icon:C}),title:C,children:e.jsx(_,{size:16})},C)})})]})]})]}):e.jsx("div",{className:`${E.emptyStateItalic} ${E.emptyStateBare}`,children:"Select a priority above to manage"})]})}function Ri(a){return a.map(o=>({...o,aliases:Array.isArray(o.aliases)?[...o.aliases]:void 0}))}function Gi(a){return a.map(o=>({...o,aliases:Array.isArray(o.aliases)?[...o.aliases]:void 0,options:Ri(Array.isArray(o.options)?o.options:[])}))}const Oi=[{id:"client-delivery",label:"Client Delivery",description:"Taxonomies for client-facing work, approvals, and service commitments.",domainTag:"operations",bestFor:"Agencies, consulting, and service delivery work.",taxonomies:[{id:"approval-stage",label:"Approval Stage",description:"Track where work sits in the client or internal approval pipeline.",widgetType:"select",isSystem:!1,multiSelect:!1,isRequired:!1,formEnabled:!0,filterEnabled:!0,sortEnabled:!0,status:"active",options:[{value:"draft",label:"Draft",color:"blue-200",icon:"Pencil",status:"active"},{value:"internal-review",label:"Internal Review",color:"blue-500",icon:"Users",status:"active"},{value:"client-review",label:"Client Review",color:"amber-500",icon:"MessageSquare",status:"active"},{value:"approved",label:"Approved",color:"emerald-500",icon:"CheckCircle",status:"active"}]},{id:"service-line",label:"Service Line",description:"Identify which delivery lane owns or contributes to this work.",widgetType:"select",isSystem:!1,multiSelect:!0,isRequired:!1,formEnabled:!0,filterEnabled:!0,sortEnabled:!1,status:"active",options:[{value:"strategy",label:"Strategy",color:"violet-500",icon:"Target",status:"active"},{value:"content",label:"Content",color:"sky-500",icon:"Pencil",status:"active"},{value:"delivery",label:"Delivery",color:"emerald-500",icon:"Briefcase",status:"active"},{value:"reporting",label:"Reporting",color:"amber-500",icon:"Activity",status:"active"}]}]},{id:"content-operations",label:"Content Operations",description:"Reusable taxonomies for channels, publishing readiness, and editorial planning.",domainTag:"content",bestFor:"Editorial calendars, content teams, and publishing operations.",taxonomies:[{id:"content-channel",label:"Content Channel",description:"Show where a piece of work will be published or reused.",widgetType:"select",isSystem:!1,multiSelect:!0,isRequired:!1,formEnabled:!0,filterEnabled:!0,sortEnabled:!1,status:"active",options:[{value:"blog",label:"Blog",color:"blue-500",icon:"FileText",status:"active"},{value:"email",label:"Email",color:"amber-500",icon:"Mail",status:"active"},{value:"social",label:"Social",color:"violet-500",icon:"Flag",status:"active"},{value:"webinar",label:"Webinar",color:"violet-500",icon:"Video",status:"active"}]},{id:"publish-readiness",label:"Publish Readiness",description:"Track whether a content task is ready to move into scheduling or release.",widgetType:"select",isSystem:!1,multiSelect:!1,isRequired:!0,formEnabled:!0,filterEnabled:!0,sortEnabled:!0,status:"active",options:[{value:"not-started",label:"Not Started",color:"blue-200",icon:"Circle",status:"active"},{value:"in-review",label:"In Review",color:"amber-500",icon:"Search",status:"active"},{value:"ready",label:"Ready",color:"emerald-500",icon:"Rocket",status:"active"}]},{id:"effort-band",label:"Effort Band",description:"A lightweight numeric scale for content effort without using complexity.",widgetType:"level",isSystem:!1,multiSelect:!1,isRequired:!1,formEnabled:!1,filterEnabled:!0,sortEnabled:!0,status:"active",options:[{value:1,label:"Light",color:"teal-500",icon:"Wind",status:"active"},{value:2,label:"Standard",color:"blue-500",icon:"Minus",status:"active"},{value:3,label:"Heavy",color:"orange-500",icon:"Gauge",status:"active"}]}]},{id:"product-delivery",label:"Product Delivery",description:"Useful planning taxonomies for delivery stages, stakeholders, and delivery risk.",domainTag:"product",bestFor:"Product teams, implementation work, and cross-functional delivery.",taxonomies:[{id:"delivery-stage",label:"Delivery Stage",description:"Track how work moves from intake through active delivery.",widgetType:"select",isSystem:!1,multiSelect:!1,isRequired:!0,formEnabled:!0,filterEnabled:!0,sortEnabled:!0,status:"active",options:[{value:"backlog",label:"Backlog",color:"blue-200",icon:"Inbox",status:"active"},{value:"scoping",label:"Scoping",color:"sky-500",icon:"Search",status:"active"},{value:"ready",label:"Ready",color:"blue-500",icon:"Check",status:"active"},{value:"in-flight",label:"In Flight",color:"indigo-500",icon:"Play",status:"active"},{value:"blocked",label:"Blocked",color:"amber-500",icon:"Pause",status:"active"},{value:"done",label:"Done",color:"green-500",icon:"CheckCircle",status:"active"}]},{id:"stakeholder",label:"Stakeholder",description:"Show which audience or stakeholder group is most relevant to the work.",widgetType:"select",isSystem:!1,multiSelect:!0,isRequired:!1,formEnabled:!0,filterEnabled:!0,sortEnabled:!1,status:"active",options:[{value:"internal",label:"Internal",color:"blue-500",icon:"Users",status:"active"},{value:"client",label:"Client",color:"amber-500",icon:"Briefcase",status:"active"},{value:"leadership",label:"Leadership",color:"violet-500",icon:"Flag",status:"active"},{value:"partner",label:"Partner",color:"teal-500",icon:"Globe",status:"active"}]},{id:"risk-level",label:"Risk Level",description:"A simple signal for delivery or coordination risk.",widgetType:"level",isSystem:!1,multiSelect:!1,isRequired:!1,formEnabled:!1,filterEnabled:!0,sortEnabled:!0,status:"active",options:[{value:1,label:"Low",color:"teal-500",icon:"Wind",status:"active"},{value:2,label:"Medium",color:"amber-500",icon:"Gauge",status:"active"},{value:3,label:"High",color:"red-500",icon:"TriangleAlert",status:"active"}]}]},{id:"content-production",label:"Content Production",description:"Production-oriented taxonomies for content stages, channels, and asset effort.",domainTag:"marketing",bestFor:"Marketing teams, campaigns, and multi-channel asset production.",taxonomies:[{id:"content-stage",label:"Content Stage",description:"Track where a content asset sits in the production lifecycle.",widgetType:"select",isSystem:!1,multiSelect:!1,isRequired:!0,formEnabled:!0,filterEnabled:!0,sortEnabled:!0,status:"active",options:[{value:"outline",label:"Outline",color:"blue-200",icon:"Pencil",status:"active"},{value:"draft",label:"Draft",color:"blue-500",icon:"FileText",status:"active"},{value:"review",label:"Review",color:"amber-500",icon:"Search",status:"active"},{value:"approved",label:"Approved",color:"green-500",icon:"CheckCircle",status:"active"},{value:"published",label:"Published",color:"violet-500",icon:"Rocket",status:"active"}]},{id:"distribution-channel",label:"Distribution Channel",description:"Capture where the asset will be published or promoted.",widgetType:"select",isSystem:!1,multiSelect:!0,isRequired:!1,formEnabled:!0,filterEnabled:!0,sortEnabled:!1,status:"active",options:[{value:"blog",label:"Blog",color:"blue-500",icon:"FileText",status:"active"},{value:"email",label:"Email",color:"amber-500",icon:"Mail",status:"active"},{value:"video",label:"Video",color:"violet-500",icon:"Video",status:"active"},{value:"social",label:"Social",color:"indigo-500",icon:"Flag",status:"active"},{value:"docs",label:"Docs",color:"sky-500",icon:"Book",status:"active"}]},{id:"asset-effort",label:"Asset Effort",description:"Estimate the relative production effort for a content asset.",widgetType:"level",isSystem:!1,multiSelect:!1,isRequired:!1,formEnabled:!1,filterEnabled:!0,sortEnabled:!0,status:"active",options:[{value:1,label:"Quick",color:"teal-500",icon:"Wind",status:"active"},{value:2,label:"Standard",color:"blue-500",icon:"Minus",status:"active"},{value:3,label:"Campaign",color:"orange-500",icon:"Rocket",status:"active"}]}]}];function Fi(){return Oi.map(a=>({...a,taxonomies:Gi(a.taxonomies)}))}const Hi="_libraryContainer_94zm2_1",Wi="_introCard_94zm2_7",Ui="_eyebrow_94zm2_17",Ki="_introTitle_94zm2_28",Vi="_introCopy_94zm2_35",qi="_prototypeNotice_94zm2_43",Ji="_libraryGrid_94zm2_49",Xi="_packList_94zm2_56",Yi="_packCard_94zm2_62",Zi="_packCardInteractive_94zm2_73",Qi="_packCardActive_94zm2_88",eo="_packHeader_94zm2_94",so="_packHeaderText_94zm2_101",to="_packTitleRow_94zm2_108",ao="_packTitle_94zm2_108",no="_packBadge_94zm2_122",io="_packDescription_94zm2_137",oo="_packBestFor_94zm2_144",lo="_packCounts_94zm2_151",ro="_packTaxonomyPreview_94zm2_157",co="_packTaxonomyChip_94zm2_163",po="_packTaxonomyMore_94zm2_175",uo="_packCountChip_94zm2_185",mo="_packActions_94zm2_198",ho="_packActionHint_94zm2_204",go="_previewPanel_94zm2_212",xo="_previewHeader_94zm2_224",yo="_previewSummaryRow_94zm2_230",bo="_previewTitle_94zm2_236",vo="_previewBestFor_94zm2_243",fo="_previewSubtext_94zm2_250",jo="_previewSection_94zm2_256",ko="_previewSectionTitle_94zm2_262",Co="_previewList_94zm2_271",No="_previewItem_94zm2_277",wo="_previewItemLabel_94zm2_288",To="_previewItemMeta_94zm2_298",So="_customTaxonomyCard_94zm2_304",$o="_customTaxonomyHeader_94zm2_314",Io="_customTaxonomyDescription_94zm2_321",_o="_customTaxonomyBadges_94zm2_328",Lo="_customTaxonomyBadge_94zm2_328",Po="_applyPanel_94zm2_347",Bo="_applyTitle_94zm2_357",Ao="_applyCopy_94zm2_364",Mo="_analysisPanel_94zm2_371",Do="_analysisCopy_94zm2_381",Eo="_analysisWarning_94zm2_388",zo="_checkboxList_94zm2_395",Ro="_checkboxLabel_94zm2_401",Go="_prototypeResult_94zm2_409",Oo="_prototypeError_94zm2_415",r={libraryContainer:Hi,introCard:Wi,eyebrow:Ui,introTitle:Ki,introCopy:Vi,prototypeNotice:qi,libraryGrid:Ji,packList:Xi,packCard:Yi,packCardInteractive:Zi,packCardActive:Qi,packHeader:eo,packHeaderText:so,packTitleRow:to,packTitle:ao,packBadge:no,packDescription:io,packBestFor:oo,packCounts:lo,packTaxonomyPreview:ro,packTaxonomyChip:co,packTaxonomyMore:po,packCountChip:uo,packActions:mo,packActionHint:ho,previewPanel:go,previewHeader:xo,previewSummaryRow:yo,previewTitle:bo,previewBestFor:vo,previewSubtext:fo,previewSection:jo,previewSectionTitle:ko,previewList:Co,previewItem:No,previewItemLabel:wo,previewItemMeta:To,customTaxonomyCard:So,customTaxonomyHeader:$o,customTaxonomyDescription:Io,customTaxonomyBadges:_o,customTaxonomyBadge:Lo,applyPanel:Po,applyTitle:Bo,applyCopy:Ao,analysisPanel:Mo,analysisCopy:Do,analysisWarning:Eo,checkboxList:zo,checkboxLabel:Ro,prototypeResult:Go,prototypeError:Oo};function Fo(a,o="Layers"){const h=le[a||o]||le[o];return e.jsx(h,{size:15})}function pa(a){return{categories:a.categories.length>0,types:a.types.length>0,priorities:a.priorities.length>0}}function Ns(a){const{title:o,items:h}=a;return e.jsxs("section",{className:r.previewSection,children:[e.jsx("h4",{className:r.previewSectionTitle,children:o}),e.jsx("div",{className:r.previewList,children:h.map(g=>e.jsxs("div",{className:r.previewItem,children:[e.jsxs("span",{className:r.previewItemLabel,children:[e.jsx("span",{style:{color:g.color?`var(--color-${g.color}, var(--text-secondary))`:"var(--text-secondary)"},children:Fo(g.icon)}),e.jsx("span",{children:g.label})]}),g.meta?e.jsx("span",{className:r.previewItemMeta,children:g.meta}):null]},g.key))})]})}function ua(a){let o=0,h=0,g=0,k=0;return a.taxonomies.forEach(w=>{w.multiSelect&&(o+=1),w.widgetType==="level"&&(h+=1),w.isRequired&&(g+=1),w.formEnabled!==!1&&(k+=1)}),{multiSelectCount:o,numericCount:h,requiredCount:g,formEnabledCount:k}}function Ho(a){const o=[];return o.push(a.widgetType==="level"?"Numeric":"Descriptive"),a.multiSelect&&o.push("Multi-select"),a.isRequired&&o.push("Required"),a.formEnabled!==!1&&o.push("Shows in forms"),a.filterEnabled&&o.push("Filterable"),a.sortEnabled&&o.push("Sortable"),o}function Wo(a){return{...a,aliases:Array.isArray(a.aliases)?[...a.aliases]:void 0,options:Array.isArray(a.options)?a.options.map(o=>({...o,aliases:Array.isArray(o.aliases)?[...o.aliases]:void 0})):[]}}function ja(a,o){a.key!=="Enter"&&a.key!==" "||(a.preventDefault(),o())}function Uo(a){const{onAnalyzeSystemTaxonomyPack:o,onApplySystemTaxonomyPack:h}=a,g=l.useMemo(()=>ga(),[]),[k,w]=l.useState(g),[S,$]=l.useState(g[0]?.id||""),[B,R]=l.useState(()=>g[0]?pa(g[0]):{categories:!0,types:!0,priorities:!0}),[F,C]=l.useState(!1),[_,P]=l.useState(null),[W,A]=l.useState(!1),[y,T]=l.useState(!1),M=k.find(m=>m.id===S)||k[0]||null,x=l.useMemo(()=>!M||!o?null:o(M),[o,M]);l.useEffect(()=>{let m=!1;return A(!0),fetch("/api/taskforce/taxonomy-library").then(async I=>{if(!I.ok)return null;const n=await I.json().catch(()=>({})),c=Array.isArray(n?.packs)?n.packs:[];return!m&&c.length>0&&(w(c),$(L=>c.some(v=>v.id===L)?L:c[0].id)),null}).catch(()=>null).finally(()=>{m||A(!1)}),()=>{m=!0}},[]);const z=m=>{const I=k.find(n=>n.id===m);$(m),R(I?pa(I):{categories:!0,types:!0,priorities:!0}),C(!1),P(null)},u=m=>{R(I=>({...I,[m]:!I[m]}))},U=()=>{if(!M)return;if(Object.entries(B).filter(([,I])=>I).map(([I])=>I).length===0){P({type:"error",message:"Select at least one taxonomy section to apply."});return}if(!h){P({type:"error",message:"System taxonomy pack apply is not available in this surface yet."});return}T(!0),P(null),h({pack:M,sections:B,remapExistingValuesToDefault:F}).then(I=>{if(I?.success){P({type:"success",message:`${M.label} was applied to the selected taxonomy sections.`});return}P({type:"error",message:I?.error||"Failed to apply the selected taxonomy pack."})}).catch(I=>{P({type:"error",message:I instanceof Error?I.message:"Failed to apply the selected taxonomy pack."})}).finally(()=>{T(!1)})};return M?e.jsxs("div",{className:r.libraryContainer,children:[e.jsxs("section",{className:r.introCard,children:[e.jsxs("span",{className:r.eyebrow,children:[e.jsx(pt,{size:14}),"System Taxonomy Library"]}),e.jsx("h3",{className:r.introTitle,children:"Browse starter packs before you replace anything."}),e.jsx("p",{className:r.introCopy,children:"Library packs give you coordinated categories, task types, and priority scales. Apply replaces only the sections you choose."}),W?e.jsx("p",{className:r.prototypeNotice,children:"Loading available packs…"}):null]}),e.jsxs("div",{className:r.libraryGrid,children:[e.jsx("div",{className:r.packList,children:k.map(m=>{const I=m.id===S;return e.jsxs("article",{className:`${r.packCard} ${r.packCardInteractive} ${I?r.packCardActive:""}`,role:"button",tabIndex:0,"aria-pressed":I,onClick:()=>z(m.id),onKeyDown:n=>ja(n,()=>z(m.id)),children:[e.jsx("div",{className:r.packHeader,children:e.jsxs("div",{className:r.packHeaderText,children:[e.jsx("div",{className:r.packTitleRow,children:e.jsx("h4",{className:r.packTitle,children:m.label})}),e.jsx("p",{className:r.packDescription,children:m.description})]})}),e.jsxs("div",{className:r.packCounts,children:[e.jsxs("span",{className:r.packCountChip,children:[e.jsx(va,{size:13}),m.categories.length," categories"]}),e.jsxs("span",{className:r.packCountChip,children:[e.jsx(un,{size:13}),m.types.length," types"]}),e.jsxs("span",{className:r.packCountChip,children:[e.jsx(be,{size:13}),m.priorities.length," priority levels"]})]}),e.jsx("div",{className:r.packActions,children:e.jsx("button",{type:"button",className:s.submitBtn,onClick:()=>z(m.id),children:"Apply"})})]},m.id)})}),e.jsxs("aside",{className:r.previewPanel,children:[e.jsxs("div",{className:r.previewHeader,children:[e.jsx("h3",{className:r.previewTitle,children:M.label}),e.jsx("p",{className:r.previewSubtext,children:"Read-only preview. Applying this pack will replace only the sections you choose."})]}),e.jsx(Ns,{title:"Categories",items:M.categories.map(m=>({key:m.value,label:m.label,icon:m.icon,color:m.color}))}),e.jsx(Ns,{title:"Task Types",items:M.types.map(m=>({key:m.value,label:m.label,icon:m.icon,color:m.color,meta:m.status==="retired"?"Retired":void 0}))}),e.jsx(Ns,{title:"Priority Levels",items:M.priorities.map(m=>({key:String(m.value),label:m.label,icon:m.icon,color:m.color,meta:`Level ${m.value}`}))}),e.jsxs("section",{className:r.applyPanel,children:[e.jsx("h4",{className:r.applyTitle,children:"Apply Selected Sections"}),e.jsx("p",{className:r.applyCopy,children:"Applying this pack will replace the selected taxonomy sections in this workspace."}),x?e.jsxs("div",{className:r.analysisPanel,children:[x.unmatchedCategoryValues.length>0?e.jsxs("p",{className:r.analysisCopy,children:[x.unmatchedCategoryValues.length," category value",x.unmatchedCategoryValues.length===1?"":"s"," will be preserved as legacy unless you remap to default."]}):null,x.unmatchedTypeValues.length>0?e.jsxs("p",{className:r.analysisCopy,children:[x.unmatchedTypeValues.length," type value",x.unmatchedTypeValues.length===1?"":"s"," will be preserved as legacy unless you remap to default."]}):null,x.incompatiblePriorityValues.length>0?e.jsxs("p",{className:r.analysisWarning,children:["Existing tasks use priority level",x.incompatiblePriorityValues.length===1?"":"s"," ",x.incompatiblePriorityValues.join(", "),". Priority replacement will be blocked unless you remap unmatched existing values to default."]}):null,x.unmatchedCategoryValues.length===0&&x.unmatchedTypeValues.length===0&&x.incompatiblePriorityValues.length===0?e.jsx("p",{className:r.analysisCopy,children:"This pack lines up with the current workspace values for the selected taxonomy sections."}):null]}):null,e.jsxs("div",{className:r.checkboxList,children:[e.jsxs("label",{className:r.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:B.categories,onChange:()=>u("categories")}),e.jsx("span",{children:"Categories"})]}),e.jsxs("label",{className:r.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:B.types,onChange:()=>u("types")}),e.jsx("span",{children:"Types"})]}),e.jsxs("label",{className:r.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:B.priorities,onChange:()=>u("priorities")}),e.jsx("span",{children:"Priorities"})]})]}),e.jsxs("label",{className:r.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:F,onChange:()=>C(m=>!m)}),e.jsx("span",{children:"Remap unmatched existing values to default"})]}),e.jsx("p",{className:r.applyCopy,children:"Leave this off to preserve unmatched category and type values as legacy entries. Priority replacement will be blocked if existing tasks use values outside the selected pack."}),e.jsx("div",{className:r.packActions,children:e.jsx("button",{type:"button",className:s.submitBtn,onClick:U,disabled:y,children:y?"Applying…":"Apply Pack"})}),_?e.jsx("p",{className:`${r.prototypeResult} ${_.type==="error"?r.prototypeError:""}`,children:_.message}):null]})]})]})]}):e.jsx("div",{className:s.emptyState,children:e.jsx("p",{className:"tf-empty-copy",children:"No system taxonomy library packs are available."})})}function Ko(a){const{taxonomies:o=[],onUpdateCustomTaxonomies:h}=a,g=l.useMemo(()=>Fi(),[]),[k,w]=l.useState(g),[S,$]=l.useState(g[0]?.id||""),[B,R]=l.useState(!1),[F,C]=l.useState(null),[_,P]=l.useState(g[0]?.taxonomies.map(n=>n.id)||[]),[W,A]=l.useState(null),y=k.find(n=>n.id===S)||k[0]||null,T=y?ua(y):null,M=l.useMemo(()=>y?y.taxonomies.filter(n=>_.includes(n.id)):[],[y,_]),x=l.useMemo(()=>new Set(_),[_]),z=l.useMemo(()=>{const n=new Set(o.map(c=>c.id));return M.map(c=>c.id).filter(c=>n.has(c))},[M,o]),u=l.useMemo(()=>{if(!y)return[];const n=new Set(o.map(c=>c.id));return y.taxonomies.filter(c=>x.has(c.id)&&!n.has(c.id))},[y,x,o]);if(l.useEffect(()=>{let n=!1;return R(!0),C(null),fetch("/api/taskforce/custom-taxonomy-library").then(async c=>{if(!c.ok)throw new Error(`Failed to load custom taxonomy packs (${c.status})`);const L=await c.json().catch(()=>({})),v=Array.isArray(L?.packs)?L.packs:[];!n&&v.length>0&&(w(v),$(O=>v.some(p=>p.id===O)?O:v[0].id))}).catch(c=>{n||C(c instanceof Error?c.message:"Failed to load custom taxonomy packs.")}).finally(()=>{n||R(!1)}),()=>{n=!0}},[]),l.useEffect(()=>{P(y?.taxonomies.map(n=>n.id)||[]),A(null)},[S,y]),!y)return e.jsx("div",{className:s.emptyState,children:e.jsx("p",{className:"tf-empty-copy",children:"No custom taxonomy library packs are available."})});const U=n=>{P(c=>c.includes(n)?c.filter(L=>L!==n):[...c,n]),A(null)},m=()=>{P(u.map(n=>n.id)),A(null)},I=()=>{if(_.length===0){A({type:"error",message:"Select at least one taxonomy to install."});return}if(z.length>0){A({type:"error",message:`This workspace already has ${z.length} taxonomy ${z.length===1?"id":"ids"} that match your current selection. Deselect conflicting taxonomies before installing this pack.`});return}if(!h){A({type:"error",message:"Custom taxonomy install is not available in this surface yet."});return}h([...o,...u.map(n=>Wo(n))]),A({type:"success",message:`${u.length} custom ${u.length===1?"taxonomy was":"taxonomies were"} added to this workspace.`})};return e.jsxs("div",{className:r.libraryContainer,children:[e.jsxs("section",{className:r.introCard,children:[e.jsxs("span",{className:r.eyebrow,children:[e.jsx(ra,{size:14}),"Custom Taxonomy Library"]}),e.jsx("h3",{className:r.introTitle,children:"Browse reusable custom taxonomy packs."}),e.jsx("p",{className:r.introCopy,children:"These packs install workspace-owned custom taxonomies such as approval stages, channels, and effort bands. Review a pack, choose the taxonomies you want, and install them into this workspace."}),B?e.jsx("p",{className:r.prototypeNotice,children:"Loading available packs…"}):null,F?e.jsx("p",{className:`${r.prototypeResult} ${r.prototypeError}`,children:F}):null]}),e.jsxs("div",{className:r.libraryGrid,children:[e.jsx("div",{className:r.packList,children:k.map(n=>{const c=n.id===S,L=ua(n),v=n.taxonomies.slice(0,3).map(O=>O.label);return e.jsxs("article",{className:`${r.packCard} ${r.packCardInteractive} ${c?r.packCardActive:""}`,role:"button",tabIndex:0,"aria-pressed":c,onClick:()=>$(n.id),onKeyDown:O=>ja(O,()=>$(n.id)),children:[e.jsx("div",{className:r.packHeader,children:e.jsxs("div",{className:r.packHeaderText,children:[e.jsxs("div",{className:r.packTitleRow,children:[e.jsx("h4",{className:r.packTitle,children:n.label}),n.domainTag?e.jsx("span",{className:r.packBadge,children:n.domainTag}):null]}),e.jsx("p",{className:r.packDescription,children:n.description}),n.bestFor?e.jsxs("p",{className:r.packBestFor,children:[e.jsx("strong",{children:"Best for:"})," ",n.bestFor]}):null]})}),e.jsxs("div",{className:r.packCounts,children:[e.jsxs("span",{className:r.packCountChip,children:[e.jsx(ra,{size:13}),n.taxonomies.length," taxonomies"]}),L.multiSelectCount>0?e.jsx("span",{className:r.packCountChip,children:"Multi-select"}):null,L.numericCount>0?e.jsx("span",{className:r.packCountChip,children:"Numeric"}):null,L.requiredCount>0?e.jsx("span",{className:r.packCountChip,children:"Required"}):null]}),e.jsxs("div",{className:r.packTaxonomyPreview,children:[v.map(O=>e.jsx("span",{className:r.packTaxonomyChip,children:O},O)),n.taxonomies.length>v.length?e.jsxs("span",{className:r.packTaxonomyMore,children:["+",n.taxonomies.length-v.length," more"]}):null]}),e.jsx("div",{className:r.packActions,children:e.jsx("span",{className:r.packActionHint,children:c?"Previewing":"Click to Preview"})})]},n.id)})}),e.jsxs("aside",{className:r.previewPanel,children:[e.jsxs("div",{className:r.previewHeader,children:[e.jsx("h3",{className:r.previewTitle,children:y.label}),y.bestFor?e.jsxs("p",{className:r.previewBestFor,children:[e.jsx("strong",{children:"Best for:"})," ",y.bestFor]}):null,e.jsx("p",{className:r.previewSubtext,children:"Review each taxonomy before installing it into this workspace. Installed taxonomies become normal workspace-owned custom taxonomies."})]}),e.jsxs("div",{className:r.previewSummaryRow,children:[e.jsxs("span",{className:r.packCountChip,children:[y.taxonomies.length," taxonomies"]}),(T?.formEnabledCount||0)>0?e.jsxs("span",{className:r.packCountChip,children:[T.formEnabledCount," show in forms"]}):null,(T?.numericCount||0)>0?e.jsxs("span",{className:r.packCountChip,children:[T.numericCount," numeric"]}):null,(T?.requiredCount||0)>0?e.jsxs("span",{className:r.packCountChip,children:[T.requiredCount," required"]}):null]}),e.jsxs("section",{className:r.applyPanel,children:[e.jsx("h4",{className:r.applyTitle,children:"Choose Taxonomies to Install"}),e.jsx("p",{className:r.applyCopy,children:"Select only the taxonomies you want to add. This first pass installs new custom taxonomies only and asks you to skip conflicts rather than replace them."}),e.jsx("div",{className:r.checkboxList,children:y.taxonomies.map(n=>e.jsxs("label",{className:r.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:_.includes(n.id),onChange:()=>U(n.id)}),e.jsxs("span",{children:[n.label,o.some(c=>c.id===n.id)?" (Already installed)":""]})]},n.id))}),e.jsxs("div",{className:r.analysisPanel,children:[e.jsxs("p",{className:r.analysisCopy,children:[_.length," ",_.length===1?"taxonomy is":"taxonomies are"," currently selected from this pack."]}),u.length>0?e.jsxs("p",{className:r.analysisCopy,children:[u.length," selected ",u.length===1?"taxonomy is":"taxonomies are"," ready to install right now."]}):e.jsx("p",{className:r.analysisCopy,children:"No selected taxonomies are currently installable."}),z.length>0?e.jsxs("p",{className:r.analysisWarning,children:[z.length," selected ",z.length===1?"taxonomy conflicts":"taxonomies conflict"," with existing workspace ids: ",z.join(", "),"."]}):null]}),e.jsxs("div",{className:r.packActions,children:[z.length>0?e.jsx("button",{type:"button",className:s.cancelBtn,onClick:m,children:"Select Installable Only"}):null,e.jsx("button",{type:"button",className:s.submitBtn,onClick:I,disabled:_.length===0||u.length===0,children:"Install Selected Taxonomies"})]}),W?e.jsx("p",{className:`${r.prototypeResult} ${W.type==="error"?r.prototypeError:""}`,children:W.message}):null]}),y.taxonomies.map(n=>e.jsxs("section",{className:r.customTaxonomyCard,children:[e.jsx("div",{className:r.customTaxonomyHeader,children:e.jsxs("div",{children:[e.jsx("h4",{className:r.previewSectionTitle,children:n.label}),n.description?e.jsx("p",{className:r.customTaxonomyDescription,children:n.description}):null]})}),z.includes(n.id)?e.jsx("p",{className:r.analysisWarning,children:"Conflicts with an existing taxonomy id in this workspace."}):null,e.jsx("div",{className:r.customTaxonomyBadges,children:Ho(n).map(c=>e.jsx("span",{className:r.customTaxonomyBadge,children:c},c))}),e.jsx(Ns,{title:n.widgetType==="level"?"Levels":"Options",items:n.options.map(c=>({key:`${n.id}:${c.value}`,label:c.label,icon:c.icon,color:c.color,meta:n.widgetType==="level"?`Level ${c.value}`:String(c.value)}))})]},n.id))]})]})]})}function ma(a){const{mode:o="system",taxonomies:h,onUpdateCustomTaxonomies:g,onAnalyzeSystemTaxonomyPack:k,onApplySystemTaxonomyPack:w}=a;return o==="custom"?e.jsx(Ko,{taxonomies:h,onUpdateCustomTaxonomies:g}):e.jsx(Uo,{onAnalyzeSystemTaxonomyPack:k,onApplySystemTaxonomyPack:w})}function Vo(a){const{taxonomies:o,onUpdateTaxonomies:h,taxonomyDisplayLabels:g,onUpdateTaxonomyDisplayLabels:k,categories:w,pathValidation:S,onUpdateCategory:$,onRemoveCategory:B,onSaveCategory:R,onAddPath:F,onRemovePath:C,onUpdateCategoryIcon:_,onUpdateCategoryColor:P,onBrowseFolders:W,types:A,onSaveType:y,onRemoveType:T,onUpdateType:M,priorities:x,onUpdatePriorities:z,onAnalyzeSystemTaxonomyPack:u,onApplySystemTaxonomyPack:U,manualComplexityEnabled:m,onManualComplexityEnabledChange:I,initialTab:n}=a,[c,L]=l.useState(n||""),[v,O]=l.useState(n?"detail":"list"),[p,G]=l.useState(!1),[q,re]=l.useState(""),Ke=l.useMemo(()=>ga().length,[]),Ve=l.useMemo(()=>Ai({categories:w,types:A,priorities:x,taxonomies:o,manualComplexityEnabled:m,displayLabels:g}),[w,m,x,o,g,A]),$s=()=>{if(!q.trim())return;const f=q.toLowerCase().trim().replace(/\s+/g,"-");if(o.some(Z=>Z.id===f)){alert("A taxonomy with this ID already exists");return}const J={id:f,label:q.trim(),options:[],widgetType:"select",isSystem:!1,multiSelect:!1,formEnabled:!1,filterEnabled:!0,sortEnabled:!1};h([...o,J]),re(""),G(!1),L(f),O("detail")},Is=f=>{h(o.map(J=>J.id===f.id?f:J))},_s=f=>{const J=o.map(Z=>Z.id===f?{...Z,status:"retired"}:Z);h(J),O("list")},Ls=f=>{const J=o.map(Z=>Z.id===f?{...Z,status:"active"}:Z);h(J)},Le=f=>{L(f),O("detail")},ss=(f,J)=>{const Z=o.findIndex(As=>As.id===f);if(Z<0)return;const qe=Z+J;if(qe<0||qe>=o.length)return;const Je=[...o],[Bs]=Je.splice(Z,1);Je.splice(qe,0,Bs),h(Je)},ts=Ve.find(f=>f.id===c),as=ts?.taxonomy,Ps=Ve.filter(f=>f.kind!=="custom"),Te=Ve.filter(f=>f.kind==="custom");return v==="list"?e.jsxs("div",{className:b.taxonomyDrillDown,children:[e.jsxs("div",{className:b.drillDownList,children:[e.jsx("section",{className:b.librarySection,children:e.jsxs("button",{className:b.libraryLauncher,onClick:()=>Le("library"),children:[e.jsxs("div",{className:b.libraryLauncherInfo,children:[e.jsx("span",{className:b.libraryLauncherIcon,children:e.jsx(pt,{size:18})}),e.jsxs("div",{className:b.libraryLauncherText,children:[e.jsx("span",{className:b.libraryLauncherLabel,children:"System Taxonomy Library"}),e.jsx("span",{className:b.libraryLauncherSubtext,children:"Browse curated packs for categories, task types, and priority scales."})]})]}),e.jsxs("span",{className:b.libraryLauncherMeta,children:[Ke," curated packs",e.jsx(ve,{size:16,className:b.chevron})]})]})}),e.jsxs("div",{className:b.drillDownSection,children:[e.jsx("h4",{className:b.drillDownSectionTitle,children:"System Taxonomies"}),Ps.map(f=>e.jsxs("button",{className:`${b.drillDownItem} ${f.id==="complexities"&&!m?b.drillDownItemDimmed:""}`,onClick:()=>Le(f.id),children:[e.jsxs("div",{className:b.drillDownItemInfo,children:[e.jsx(mn,{size:16,className:b.systemIcon}),e.jsxs("div",{className:b.drillDownItemText,children:[e.jsx("span",{className:b.drillDownItemLabel,children:f.label}),e.jsx("span",{className:b.drillDownItemSubtext,children:f.summary})]})]}),e.jsx(ve,{size:16,className:b.chevron})]},f.id))]}),e.jsxs("div",{className:b.drillDownSection,children:[e.jsxs("div",{className:b.drillDownSectionHeader,children:[e.jsx("h4",{className:b.drillDownSectionTitle,children:"Custom Taxonomies"}),e.jsxs("button",{className:E.addTaxonomyBtnSmall,onClick:()=>G(!0),title:"Add Custom Taxonomy",children:[e.jsx(Qe,{size:14})," New"]})]}),e.jsxs("button",{className:b.drillDownItem,onClick:()=>Le("custom-library"),children:[e.jsxs("div",{className:b.drillDownItemInfo,children:[e.jsx(pt,{size:16,className:b.systemIcon}),e.jsxs("div",{className:b.drillDownItemText,children:[e.jsx("span",{className:b.drillDownItemLabel,children:"Custom Taxonomy Library"}),e.jsx("span",{className:b.drillDownItemSubtext,children:"Reusable templates for future custom taxonomy packs"})]})]}),e.jsx(ve,{size:16,className:b.chevron})]}),Te.length===0?e.jsx("div",{className:s.emptyState,children:e.jsx("p",{className:"tf-empty-copy",children:"No custom taxonomies yet."})}):Te.map(f=>e.jsxs("div",{className:`${b.drillDownItem} ${f.taxonomy?.status==="retired"?b.drillDownItemDimmed:""}`,children:[e.jsxs("button",{className:b.drillDownItemAction,onClick:()=>Le(f.id),children:[e.jsxs("div",{className:b.drillDownItemInfo,children:[e.jsx(hn,{size:16}),e.jsxs("div",{className:b.drillDownItemText,children:[e.jsx("span",{className:b.drillDownItemLabel,children:f.taxonomy?.status==="retired"?`${f.label} (Retired)`:f.label}),e.jsx("span",{className:b.drillDownItemSubtext,children:f.summary})]})]}),e.jsx(ve,{size:16,className:b.chevron})]}),e.jsxs("div",{className:b.orderButtons,children:[e.jsx("button",{type:"button",className:s.browseBtn,title:"Move taxonomy up",onClick:J=>{J.stopPropagation(),ss(f.id,-1)},disabled:Te[0]?.id===f.id,children:e.jsx(xa,{size:16})}),e.jsx("button",{type:"button",className:s.browseBtn,title:"Move taxonomy down",onClick:J=>{J.stopPropagation(),ss(f.id,1)},disabled:Te[Te.length-1]?.id===f.id,children:e.jsx(ya,{size:16})})]})]},f.id))]})]}),p&&e.jsx("div",{className:b.createOverlay,children:e.jsxs("div",{className:b.createDialog,children:[e.jsx("h3",{className:b.createDialogTitle,children:"New Taxonomy"}),e.jsxs("div",{className:b.inputGroup,children:[e.jsx("label",{className:s.label,children:"Name"}),e.jsx("input",{className:s.input,placeholder:"e.g. Sprint, Phase",value:q,onChange:f=>re(f.target.value),autoFocus:!0})]}),e.jsxs("div",{className:b.dialogActions,children:[e.jsx("button",{className:`${s.submitBtn} ${b.createSubmit}`,onClick:$s,disabled:!q.trim(),children:"Create"}),e.jsx("button",{className:`${s.cancelBtn} ${b.createCancel}`,onClick:()=>{G(!1),re("")},children:"Cancel"})]})]})})]}):e.jsxs("div",{className:b.taxonomyDetailView,children:[e.jsx("div",{className:b.detailHeader,children:e.jsxs("div",{className:b.taxonomyBreadcrumbs,children:[e.jsxs("button",{className:b.breadcrumbPrev,onClick:()=>O("list"),title:"Back to All Taxonomies",children:[e.jsx(gn,{size:16,className:b.breadcrumbIcon}),"Taxonomies"]}),e.jsx(ve,{size:14,className:b.breadcrumbDivider}),e.jsx("h3",{className:b.breadcrumbActive,children:c==="library"?"System Taxonomy Library":c==="custom-library"?"Custom Taxonomy Library":ts?.label||"Taxonomy"})]})}),e.jsx("div",{className:b.detailContent,children:c==="library"?e.jsx(ma,{mode:"system",onAnalyzeSystemTaxonomyPack:u,onApplySystemTaxonomyPack:U}):c==="custom-library"?e.jsx(ma,{mode:"custom",taxonomies:o,onUpdateCustomTaxonomies:h}):c==="categories"?e.jsx(Di,{displayLabel:g?.category,onUpdateDisplayLabel:f=>k?.({category:f}),categories:w,pathValidation:S,onUpdateCategory:$,onRemoveCategory:B,onSaveCategory:R,onAddPath:F,onRemovePath:C,onUpdateCategoryIcon:_,onUpdateCategoryColor:P,onBrowseFolders:W}):c==="types"?e.jsx(Ei,{displayLabel:g?.type,onUpdateDisplayLabel:f=>k?.({type:f}),types:A,onSaveType:y,onRemoveType:T,onUpdateType:M}):c==="complexities"?e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h4",{className:s.settingSubtitle,children:"Complexity"}),e.jsx("p",{className:s.settingsHint,children:"Complexity is estimated by AI and system logic by default."}),e.jsx("p",{className:s.settingsHint,children:"Enable this to let users set complexity manually and show the Complexity field in Add/Edit Task. When disabled, the Complexity field is hidden from the task form."}),e.jsxs("label",{className:s.archiveToggle,children:[e.jsx("input",{type:"checkbox",checked:m,onChange:f=>{I(f.target.checked)}}),e.jsx("span",{children:"Manual Complexity"})]})]}):as?e.jsx(Mi,{taxonomy:as,onUpdateTaxonomy:Is,onRemoveTaxonomy:_s,onRestoreTaxonomy:Ls}):c==="priorities"?e.jsx(zi,{displayLabel:g?.priority,onUpdateDisplayLabel:f=>k?.({priority:f}),priorities:x,onUpdatePriorities:z}):e.jsxs("div",{className:s.emptyState,children:[e.jsx("p",{className:"tf-empty-copy",children:"Taxonomy not found."}),e.jsx("button",{className:s.submitBtn,onClick:()=>O("list"),children:"Return to List"})]})})]})}const qo={sun:Nn,wind:fa,moon:Cn,sparkles:ut},ha=["tasks:read","tasks:write","workspace:read"];function nl(a){const{settingsModel:o,onSectionChange:h}=a,{currentTheme:g,globalTheme:k,themeUseGlobalDefault:w,keyShortcut:S,jsonBackupEnabled:$,globalJsonBackupEnabled:B,globalWeekStartsOn:R,locale:F="en-US",supportedLocales:C=["en-US","es-419","pt-BR"],jsonBackupUseGlobalDefault:_,manualComplexityEnabled:P,checklistDropdownEnabled:W=!0,showTaskCardStatusLabel:A=!0,exportWorkflowsPath:y,exportingResource:T,exportResult:M,initialSection:x,onThemeChange:z,onSaveTheme:u,onSaveGlobalTheme:U,onResetProjectToGlobal:m,onKeyShortcutChange:I,onJsonBackupEnabledChange:n,onSaveGlobalJsonBackupEnabled:c,onSaveGlobalWeekStartsOn:L,onSaveLocale:v,onManualComplexityEnabledChange:O,onChecklistDropdownEnabledChange:p,onShowTaskCardStatusLabelChange:G,onSaveSettings:q,onExportWorkflowsPathChange:re,onShowFolderBrowserChange:Ke,onBrowserTargetChange:Ve,onFetchFolders:$s,categories:Is,pathValidation:_s,taxonomyDisplayLabels:Ls,onUpdateCategory:Le,onRemoveCategory:ss,onSaveCategory:ts,onAddPath:as,onRemovePath:Ps,onUpdateCategoryIcon:Te,onUpdateCategoryColor:f,types:J,onSaveType:Z,onRemoveType:qe,onUpdateType:Je,taxonomies:Bs,onUpdateTaxonomies:As,priorities:ka,onUpdatePriorities:Ca,onAnalyzeSystemTaxonomyPack:Na,onApplySystemTaxonomyPack:wa,onUpdateTaxonomyDisplayLabels:Ta,projectRoot:Se,projectName:Pe,mcpHostRoot:ns,serverHostRoot:is,mcpScriptPath:ce,tenantId:gt,workspaceId:ne,runtimeMode:$e="local",cloudAuthBaseUrl:Ms="",cloudMcpBaseUrl:Ds="",fetchCloudAuthApi:Be,workspaceSwitchingEnabled:Sa=!1,currentWorkspaceRole:$a="member",currentWorkspaceName:Ae="",onDeleteWorkspace:Es,onMcpHostRootChange:Ia,isAuthenticated:xt=!1,exportEnvironment:yt,setupState:ee=null,buildInfo:Jo=null,onExportEnvironmentChange:_a,onSaveSetupMode:Xo,onSaveWorkspaceProfile:zs,availableWorkflows:Me=[],onExportWorkflows:La,initiativeTemplates:De=[],onRefreshInitiativeTemplates:Rs,onCreateInitiativeFromTemplate:Gs,onRefreshWorkflows:Pa}=o,bt=$e!=="cloud",[Xe,os]=l.useState([]);l.useEffect(()=>{Me.length>0&&Xe.length===0&&os(Me)},[Me]);const Ba=t=>{os(i=>i.includes(t)?i.filter(d=>d!==t):[...i,t])},Aa=()=>os(Me),Ma=()=>os([]),[Ee,K]=l.useState(null),[ls,Da]=l.useState(()=>ee?.mode==="operations"?"operations":"core"),[vt,ft]=l.useState(()=>String(ee?.workspace?.name||"").trim()),[jt,kt]=l.useState(()=>String(ee?.workspace?.description||"")),[Ye,Ct]=l.useState(""),[Os,Ea]=l.useState(""),[Nt,wt]=l.useState(!1),[D,ie]=l.useState("general"),[Fs,Ze]=l.useState(!0),[pe,rs]=l.useState(()=>"project"),[Hs,Tt]=l.useState([]),[Ws,St]=l.useState(!1),[fe,Us]=l.useState(null),[cs,ds]=l.useState(null),ps=He.useCallback(async()=>{if(ne){St(!0);try{const t=typeof window<"u"?new URL(`/api/taskforce/workspace/assignee-options?workspaceId=${encodeURIComponent(ne)}`,window.location.origin).toString():`/api/taskforce/workspace/assignee-options?workspaceId=${encodeURIComponent(ne)}`,i=await fetch(t,{credentials:"include"});if(!i.ok)return;const d=await i.json().catch(()=>({})),N=Array.isArray(d?.assignees)?d.assignees.filter(j=>j.kind==="agent").map(j=>({id:String(j.value||""),name:String(j.label||""),profileToken:typeof j.profileToken=="string"?j.profileToken:null,username:String(j.username||j.value||""),icon:String(j.icon||"Bot"),color:String(j.color||"#6B7280"),kind:"agent",description:typeof j.description=="string"?j.description:null,role:typeof j.role=="string"?j.role:null,provider:typeof j.provider=="string"?j.provider:null,model:typeof j.model=="string"?j.model:null,surfaceType:typeof j.surfaceType=="string"?j.surfaceType:null})):[];Tt(N)}catch{Tt([])}finally{St(!1)}}},[ne]),za=He.useCallback(async(t,i)=>{if(ne){ds(null);try{const d=await fetch("/api/taskforce/workspace/ai-profiles/merge",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({workspaceId:ne,keepId:t,mergeId:i})}),N=await d.json().catch(()=>({}));d.ok?(ds({type:"success",message:"Profiles merged successfully."}),Us(null),await ps()):ds({type:"error",message:N?.error||"Merge failed."})}catch{ds({type:"error",message:"Network error during merge."})}}},[ne,ps]);l.useEffect(()=>{(D==="agents"||D==="mcp")&&ps()},[D,ps]),l.useEffect(()=>{De.length>0&&!Ye&&Ct(De[0].id)},[De,Ye]),l.useEffect(()=>{if(!Ee)return;const t=setTimeout(()=>K(null),2500);return()=>clearTimeout(t)},[Ee]),l.useEffect(()=>{Da(ee?.mode==="operations"?"operations":"core")},[ee?.mode]),l.useEffect(()=>{ft(String(ee?.workspace?.name||"").trim()),kt(String(ee?.workspace?.description||""))},[ee?.workspace?.name,ee?.workspace?.description]);const Ra=async t=>{z(t);const i=await u(t);K({type:i?"success":"error",message:i?"Project theme saved.":"Failed to save project theme."})},$t=(t,i,d)=>{const N=qo[t.icon];return e.jsxs("button",{className:`${s.themeBtn} tf-button-tile ${i===t.id?s.activeTheme:""}`,onClick:()=>{d(t.id)},children:[e.jsx(N,{size:20})," ",t.label]},t.id)},ze=$e==="cloud"||xt,Ks=$e==="cloud"?"cloud":"local",[us,Vs]=l.useState(Ks),[je,It]=l.useState(!1),[Re,_t]=l.useState(!0),[Lt,Pt]=l.useState(!1),[qs,Bt]=l.useState(!1),[Js,At]=l.useState(!0),[Xs,Ys]=l.useState([]),[Ga,Mt]=l.useState(!1),[Dt,Zs]=l.useState(null),[ms,hs]=l.useState(null),gs=l.useMemo(()=>`${String(Ae||ee?.workspace?.name||Pe||ne||"Taskforce Workspace").trim()} MCP`,[Ae,ee?.workspace?.name,Pe,ne]),[Et,Qs]=l.useState(gs),[et,zt]=l.useState(""),[xs,de]=l.useState(null),[X,Rt]=l.useState(null),[oe,st]=l.useState("general"),[Gt,tt]=l.useState(""),[Ot,Ft]=l.useState(!1),[H,ke]=l.useState(null),[ys,Ht]=l.useState([]),[Oa,Wt]=l.useState(!1),[Ut,Ge]=l.useState(null),[Kt,Vt]=l.useState(null);l.useEffect(()=>{Vs(Ks)},[Ks]),l.useEffect(()=>{Qs(t=>t.trim().length>0?t:gs)},[gs]),l.useEffect(()=>{if(!xs)return;const t=setTimeout(()=>de(null),3500);return()=>clearTimeout(t)},[xs]),l.useEffect(()=>{X&&(tt(X),ke(null))},[X]);const Oe=l.useMemo(()=>{const t=cn(Ds||Ms||""),i=String(t||Ds||Ms||"").trim().replace(/\/+$/,"");return i?`${i}/mcp`:typeof window>"u"?"/mcp":`${window.location.origin.replace(/\/+$/,"")}/mcp`},[Ds,Ms]),Fa=$e!=="cloud"&&ze,at=$e==="cloud"||us==="cloud",Ha=$e!=="cloud"&&(!ze||us==="local"),Wa=l.useMemo(()=>{const t={active:0,expired:1,revoked:2};return[...Xs].sort((i,d)=>{const N=(t[i.status]??99)-(t[d.status]??99);return N!==0?N:String(d.createdAt||"").localeCompare(String(i.createdAt||""))})},[Xs]),Fe=l.useMemo(()=>In(Ae||null,Pe||null),[Ae,Pe]),bs=X||"<<GENERATE_TOKEN>>",V=l.useMemo(()=>Mn({clientId:oe,endpoint:Oe,tokenValue:bs,serverId:Fe}),[Oe,Fe,bs,oe]),vs=V.kind==="json"?V.serverConfig??null:null,qt=oe==="chatgpt-desktop"||oe==="claude-desktop",Jt=l.useMemo(()=>ys.find(t=>t.provider==="chatgpt"&&t.status==="active")||null,[ys]),Xt=l.useMemo(()=>ys.find(t=>t.provider==="claude"&&t.status==="active")||null,[ys]),fs=oe==="chatgpt-desktop"?Jt:oe==="claude-desktop"?Xt:null,Ua=l.useMemo(()=>{if(V.kind==="text")return V.renderedText||"";let t={[V.rootKey||"mcpServers"]:{[Fe]:V.serverConfig}};for(const i of[...V.wrapperKeys||[]].reverse())t={[i]:t};return JSON.stringify(t,null,2)},[V,Fe]),nt=(t,i,d="mcpServers",N=[])=>{const j={color:"var(--text-helper)"},Q={color:"var(--brand-primary-strong)",fontWeight:"bold"},se={color:"var(--text-secondary)"},Ie={color:"var(--text-primary, #fff)"},xe=bs,ae=[...N,d],ue=" ".repeat(ae.length+1),aa=JSON.stringify(i,null,2).split(`
4
- `).map((ye,me)=>me===0?ye:`${ue}${ye}`).join(`
5
- `).split(xe);return e.jsxs(e.Fragment,{children:[e.jsx("span",{style:se,children:"{"}),`
6
- `,ae.map((ye,me)=>e.jsxs(He.Fragment,{children:[`${" ".repeat(me+1)}`,e.jsx("span",{style:j,children:`"${ye}"`}),e.jsx("span",{style:j,children:":"})," ",e.jsx("span",{style:se,children:"{"}),`
7
- `]},`mcp-container-open-${ye}-${me}`)),ue,e.jsxs("span",{style:Ie,children:[`"${t}"`,": ",aa.map((ye,me)=>e.jsxs(He.Fragment,{children:[ye,me<aa.length-1&&e.jsx("span",{style:Q,children:xe})]},`config-segment-${me}`))]}),`
8
- `,[...ae].reverse().map((ye,me)=>e.jsxs(He.Fragment,{children:[`${" ".repeat(ae.length-me)}`,e.jsx("span",{style:se,children:"}"}),`
9
- `]},`mcp-container-close-${ye}-${me}`)),e.jsx("span",{style:se,children:"}"})]})},it=t=>{const i={color:"var(--text-primary, #fff)"},d={color:"var(--brand-primary-strong)",fontWeight:"bold"},N=bs,j=String(t||"").split(N);return j.map((Q,se)=>e.jsxs(He.Fragment,{children:[e.jsx("span",{style:i,children:Q}),se<j.length-1&&e.jsx("span",{style:d,children:N})]},`text-config-${se}`))},js=(t,i)=>{navigator.clipboard.writeText(t),It(i),setTimeout(()=>It(!1),2e3)},Yt=()=>{if(!qt&&!X){de({type:"error",message:"Generate a token before copying the Cloud MCP configuration."});return}js(Ua,"full")},Ka=()=>{let t=ce||"",i=Se||"";const d=ns||is;if(d&&Se){if(ce&&ce.startsWith(Se))t=ce.replace(Se,d);else if(ce&&ce.includes("/node_modules/")){const ta=ce.indexOf("/node_modules/");t=d+ce.substring(ta)}i=d}const N=(ce||"").endsWith(".ts"),j=Pe||(Se?Se.split(/[/\\]/).pop():"project"),Q=mt(`taskforce-${j}`,"taskforce-project"),se=(gt||"").trim()||"your-tenant-id",Ie=(ne||ee?.workspaceId||"").trim(),ae={TASKFORCE_TENANT_ID:se,TASKFORCE_WORKSPACE_ID:Ie&&Ie!=="default"?Ie:"your-workspace-id"},ue=Re?{command:"taskforce",args:["mcp",i||"."],env:ae}:{command:N?"npx":"node",args:N?["-y","tsx",t,i]:[t,i],env:ae};return!Re&&!ue.args[ue.args.length-1]&&(ue.args[ue.args.length-1]=".../path/to/project/root"),{serverId:Q,serverConfig:ue}},Ce=l.useMemo(()=>Ka(),[ce,Se,ns,is,Pe,gt,ne,ee?.workspaceId,Re]),te=l.useMemo(()=>Dn({clientId:oe,serverId:Ce.serverId,serverConfig:Ce.serverConfig}),[Ce,oe]),Zt=te.kind==="json"?te.serverConfig??null:null,Va=l.useMemo(()=>{if(te.kind==="text")return te.renderedText||"";let t={[te.rootKey||"mcpServers"]:{[Ce.serverId]:te.serverConfig}};for(const i of[...te.wrapperKeys||[]].reverse())t={[i]:t};return JSON.stringify(t,null,2)},[te,Ce.serverId]),qa=(t="full")=>{if(!ce&&!Re)return;const i=t==="full"?Va:`"${Ce.serverId}": ${JSON.stringify(Ce.serverConfig,null,2)}`;js(i,t)},Qt=async()=>{if(ze){Mt(!0),Zs(null);try{const t=await Be("/api/taskforce/settings/mcp/tokens",{method:"GET",credentials:"include"}),i=await t.json().catch(()=>({}));if(!t.ok){Zs(String(i?.error||"Failed to load MCP tokens."));return}Ys(Array.isArray(i?.items)?i.items:[])}catch{Zs("Failed to load MCP tokens.")}finally{Mt(!1)}}},ot=async()=>{if(ze){Wt(!0),Ge(null);try{const t=await Be("/api/taskforce/settings/mcp/connectors",{method:"GET",credentials:"include"}),i=await t.json().catch(()=>({}));if(!t.ok){Ge(String(i?.error||"Failed to load MCP connectors."));return}Ht(Array.isArray(i?.items)?i.items:[])}catch{Ge("Failed to load MCP connectors.")}finally{Wt(!1)}}},Ja=async()=>{const t=Et.trim();if(!t){de({type:"error",message:"Token name is required."});return}hs("create"),de(null);try{const i=await Be("/api/taskforce/settings/mcp/tokens",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t,scopes:ha,expiresAt:et?new Date(`${et}T00:00:00`).toISOString():null})}),d=await i.json().catch(()=>({}));if(!i.ok){de({type:"error",message:String(d?.error||"Failed to create token.")});return}Rt(String(d?.token||"")),Qs(gs),zt(""),Ys(N=>d?.record?[d.record,...N.filter(Q=>Q.id!==d.record.id)]:N)}catch{de({type:"error",message:"Failed to create token."})}finally{hs(null)}},ea=async(t,i)=>{hs(`${i}:${t}`),de(null);try{const d=await Be(`/api/taskforce/settings/mcp/tokens/${encodeURIComponent(t)}/${i}`,{method:"POST",credentials:"include"}),N=await d.json().catch(()=>({}));if(!d.ok){de({type:"error",message:String(N?.error||`Failed to ${i} token.`)});return}i==="regenerate"?(Rt(String(N?.token||"")),de({type:"success",message:"Token regenerated. Copy the new value now."})):de({type:"success",message:"Token revoked."});const j=N?.record||null;j?.id?Ys(Q=>Q.map(se=>se.id===j.id?j:se)):await Qt()}catch{de({type:"error",message:`Failed to ${i} token.`})}finally{hs(null)}},Xa=async()=>{const t=Gt.trim();if(!t){ke({type:"error",message:"Paste a token to test the MCP connection."});return}Ft(!0),ke(null);try{const i=await Be("/api/taskforce/settings/mcp/test-connection",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t,requiredScopes:ha})}),d=await i.json().catch(()=>({}));if(!i.ok){const j=d?.details&&typeof d.details=="object"?d.details:{},Q=Array.isArray(j?.missingScopes)?j.missingScopes.map(ue=>String(ue)):[],se=typeof j?.tokenWorkspaceId=="string"?String(j.tokenWorkspaceId):void 0,Ie=typeof j?.endpoint=="string"?String(j.endpoint):Oe;let xe=d?.code==="MCP_TOKEN_MISSING_SCOPES"&&Q.length>0?`Token is missing required scopes: ${Q.join(", ")}.`:String(d?.error||"Failed to test MCP connection."),ae;d?.code==="MCP_ENDPOINT_GATEWAY_ERROR"?(xe="The dedicated MCP host is responding with a gateway error.",ae="This usually means the cloud MCP service is degraded. Retry shortly, and if it keeps failing treat it as an environment incident rather than a bad token."):d?.code==="MCP_ENDPOINT_TIMEOUT"?(xe="The dedicated MCP host timed out during MCP initialization.",ae="This usually points to a degraded or overloaded cloud MCP service."):d?.code==="MCP_ENDPOINT_UNREACHABLE"?(xe="The dedicated MCP host could not be reached.",ae="Check the cloud MCP hostname and environment health before rotating credentials."):d?.code==="MCP_ENDPOINT_REJECTED_VALIDATED_TOKEN"&&(xe="The dedicated MCP host rejected a token that validated locally.",ae="This suggests the MCP host is stale, routed incorrectly, or out of sync with auth data."),ke({type:"error",message:xe,workspaceName:se,endpoint:Ie,errorCode:typeof d?.code=="string"?String(d.code):void 0,followup:ae});return}const N=d?.result&&typeof d.result=="object"?d.result:{};ke({type:"success",message:"Connection looks good for this workspace.",scopes:Array.isArray(N?.scopes)?N.scopes.map(j=>String(j)):[],workspaceName:typeof N?.workspaceName=="string"?String(N.workspaceName):"",workspaceId:typeof N?.workspaceId=="string"?String(N.workspaceId):"",endpoint:typeof N?.endpoint=="string"?String(N.endpoint):Oe})}catch{ke({type:"error",message:"Failed to test MCP connection.",endpoint:Oe,followup:"The settings page could not complete the connection probe. Check your network connection and the selected cloud environment."})}finally{Ft(!1)}},Ya=async t=>{Vt(t),Ge(null);try{const i=await Be(`/api/taskforce/settings/mcp/connectors/${encodeURIComponent(t)}/disconnect`,{method:"POST",credentials:"include"}),d=await i.json().catch(()=>({}));if(!i.ok){Ge(String(d?.error||"Failed to disconnect connector."));return}const N=d?.record||null;N?.id?Ht(j=>j.map(Q=>Q.id===N.id?N:Q)):await ot()}catch{Ge("Failed to disconnect connector.")}finally{Vt(null)}};l.useEffect(()=>{if(ze){if(D==="mcp"&&at){Qt(),ot();return}D==="integrations"&&ot()}},[D,at,ze]),l.useEffect(()=>{D==="initiatives"&&De.length===0&&Rs?.()},[D,De.length,Rs]);const Za=o.availableEnvironments||[],Qa=t=>{switch(t){case"Bot":return e.jsx(ca,{size:16});case"Terminal":return e.jsx(kn,{size:16});case"Sparkles":return e.jsx(ut,{size:16});case"Command":return e.jsx(jn,{size:16});case"Wind":return e.jsx(fa,{size:16});case"Github":return e.jsx(fn,{size:16});case"Zap":return e.jsx(Cs,{size:16});case"Box":return e.jsx(es,{size:16});default:return e.jsx(vn,{size:16})}};l.useEffect(()=>{x&&(x==="categories"||x==="types"?ie("taxonomy"):x==="documents"?ie("general"):x==="appearance-application"?(Ze(!0),ie("appearanceApplication")):x==="appearance-task-cards"?(Ze(!0),ie("appearanceTaskCards")):x==="appearance-task-forms"?(Ze(!0),ie("appearanceTaskForms")):ie(x==="resources"||x==="commands"?"commands":x==="initiatives"?"initiatives":x==="agents"?"agents":x==="integrations"?"integrations":x))},[x]),l.useEffect(()=>{(D==="appearanceApplication"||D==="appearanceTaskCards"||D==="appearanceTaskForms")&&Ze(!0)},[D]);const en=t=>{Ve({type:"category",value:t}),$s(""),Ke(!0)},sa=[{key:"general",label:"General",icon:e.jsx(yn,{size:14}),section:"general"},{key:"taxonomy",label:"Taxonomy",icon:e.jsx(va,{size:14}),section:"taxonomy"},{key:"integrations",label:"Integrations",icon:e.jsx(bn,{size:14}),section:"integrations"},{key:"mcp",label:"MCP",icon:e.jsx(es,{size:14}),section:"mcp"}],sn=[{key:"appearanceApplication",label:"Application",section:"appearance-application"},{key:"appearanceTaskCards",label:"Task cards",section:"appearance-task-cards"},{key:"appearanceTaskForms",label:"Task forms",section:"appearance-task-forms"}],lt=(t,i)=>{ie(t),h?.(i)},tn=()=>e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h3",{className:`${s.settingTitle} tf-heading-section`,children:"Theme"}),e.jsx("div",{className:s.buttonGrid,children:ia.map(t=>$t(t,g,Ra))})]}),an=()=>e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h3",{className:`${s.settingTitle} tf-heading-section`,children:"Theme Defaults"}),e.jsx("div",{className:s.buttonGrid,children:ia.map(t=>$t(t,k,async i=>{const d=await U(i);K({type:d?"success":"error",message:d?"Global theme saved.":"Failed to save global theme."})}))})]}),nn=()=>e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h3",{className:`${s.settingTitle} tf-heading-section`,children:"Task Form"}),e.jsxs("label",{className:s.archiveToggle,children:[e.jsx("input",{type:"checkbox",checked:W,onChange:async t=>{if(!p)return;const i=await p(t.target.checked);K({type:i?"success":"error",message:i?"Checklist dropdown setting saved.":"Failed to save checklist dropdown setting."})},disabled:!p}),e.jsx("span",{children:"Enable checklist dropdown in task form"})]})]});return e.jsx("div",{className:s.settingsTab,children:e.jsxs("div",{className:s.settingsLayout,children:[e.jsxs("aside",{className:s.settingsSidebar,children:[e.jsx("div",{className:s.settingsSidebarHeader,children:"Sections"}),e.jsxs("div",{className:`${s.settingsSidebarNav} tf-scrollbar tf-scrollbar--track-transparent tf-scrollbar--compact`,children:[sa.filter(t=>t.key==="general").map(t=>e.jsxs("button",{className:`${s.settingsSidebarBtn} ${D===t.key?s.settingsSidebarBtnActive:""}`,onClick:()=>lt(t.key,t.section),children:[t.icon,e.jsx("span",{children:t.label})]},t.key)),e.jsxs("div",{className:s.settingsSidebarGroup,children:[e.jsxs("button",{className:`${s.settingsSidebarBtn} ${s.settingsSidebarGroupBtn} ${D==="appearanceApplication"||D==="appearanceTaskCards"||D==="appearanceTaskForms"?s.settingsSidebarBtnActive:""}`,onClick:()=>Ze(t=>!t),"aria-expanded":Fs,"aria-controls":"settings-appearance-nav",children:[e.jsx(ut,{size:14}),e.jsx("span",{className:s.settingsSidebarGroupLabel,children:"Appearance"}),e.jsx("span",{className:s.settingsSidebarGroupChevron,children:Fs?e.jsx(ks,{size:14}):e.jsx(ve,{size:14})})]}),Fs&&e.jsx("div",{id:"settings-appearance-nav",className:s.settingsSidebarSubnav,children:sn.map(t=>e.jsx("button",{className:`${s.settingsSidebarSubBtn} ${D===t.key?s.settingsSidebarBtnActive:""}`,onClick:()=>lt(t.key,t.section),children:e.jsx("span",{children:t.label})},t.key))})]}),sa.filter(t=>t.key!=="general").map(t=>e.jsxs("button",{className:`${s.settingsSidebarBtn} ${D===t.key?s.settingsSidebarBtnActive:""}`,onClick:()=>lt(t.key,t.section),children:[t.icon,e.jsx("span",{children:t.label})]},t.key))]})]}),e.jsxs("div",{className:s.settingsContent,children:[Ee&&e.jsxs("div",{className:`${s.settingsToast} ${Ee.type==="success"?s.settingsToastSuccess:s.settingsToastError}`,children:[Ee.type==="success"?e.jsx(be,{size:14}):e.jsx(we,{size:14}),e.jsx("span",{children:Ee.message})]}),D==="general"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:s.settingGroup,children:[e.jsxs("div",{className:`${s.settingsTabs} tf-scrollbar tf-scrollbar--track-transparent tf-scrollbar--compact`,children:[e.jsx("button",{className:`${s.settingsTabBtn} ${pe==="project"?s.settingsTabBtnActive:""}`,onClick:()=>rs("project"),children:"Project"}),e.jsx("button",{className:`${s.settingsTabBtn} ${pe==="global"?s.settingsTabBtnActive:""}`,onClick:()=>rs("global"),children:"Global"})]}),pe==="project"&&e.jsx("div",{className:s.pathInputGroup,style:{justifyContent:"flex-end"},children:e.jsx("button",{onClick:async()=>{if(!window.confirm("Reset project Theme and Backups to global defaults?"))return;const i=await m();K({type:i?"success":"error",message:i?"Project settings reset to global.":"Failed to reset project settings."})},className:s.copyBtn,children:"Reset to Global"})})]}),pe==="project"&&e.jsxs("div",{className:s.settingGroup,children:[e.jsxs("div",{className:s.pathInputGroup,children:[e.jsxs("label",{className:s.label,style:{minWidth:"110px"},children:[ls==="operations"?"Mission":"Project"," name:"]}),e.jsx("input",{className:s.input,type:"text",value:vt,onChange:t=>ft(t.target.value),placeholder:ls==="operations"?"Mission name":"Project name"})]}),e.jsxs("div",{className:s.pathInputGroup,children:[e.jsx("label",{className:s.label,style:{minWidth:"110px"},children:"Description:"}),e.jsx("textarea",{className:s.textarea,value:jt,onChange:t=>kt(t.target.value),placeholder:ls==="operations"?"Mission description (optional)":"Project description (optional)",rows:3})]}),e.jsx("div",{className:s.pathInputGroup,style:{justifyContent:"flex-end"},children:e.jsx("button",{onClick:async()=>{if(!zs)return;const t=await zs({workspaceId:ee?.workspaceId,name:vt,description:jt});K({type:t.success?"success":"error",message:t.success?`${ls==="operations"?"Mission":"Project"} profile saved.`:t.error||"Failed to save workspace profile."})},className:s.copyBtn,disabled:!zs,children:"Save"})})]}),pe==="project"&&e.jsx("div",{className:s.settingGroup,children:bt&&e.jsxs(e.Fragment,{children:[e.jsx("h3",{className:s.settingTitle,children:"Backup"}),e.jsxs("label",{className:s.archiveToggle,children:[e.jsx("input",{type:"checkbox",checked:$,onChange:async t=>{const i=await n(t.target.checked);K({type:i?"success":"error",message:i?"Project backup setting saved.":"Failed to save project backup setting."})}}),e.jsx("span",{children:"Enable automatic JSON backup (`.taskforce/tasks.json`)"})]})]})}),pe==="global"&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:s.settingGroup,children:bt&&e.jsxs(e.Fragment,{children:[e.jsx("h3",{className:s.settingTitle,children:"Backup"}),e.jsxs("label",{className:s.archiveToggle,children:[e.jsx("input",{type:"checkbox",checked:B,onChange:async t=>{const i=await c(t.target.checked);K({type:i?"success":"error",message:i?"Global backup default saved.":"Failed to save global backup default."})}}),e.jsx("span",{children:"Enable global JSON backup default"})]})]})}),e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h3",{className:s.settingTitle,children:"Regional"}),e.jsxs("div",{className:s.pathInputGroup,children:[e.jsx("label",{className:s.label,style:{minWidth:"110px"},children:"Calendar start:"}),e.jsxs("select",{className:s.input,value:R,onChange:async t=>{const i=t.target.value,d=await L(i);K({type:d?"success":"error",message:d?`Week start saved (${i==="sunday"?"Sunday":"Monday"}).`:"Failed to save week start."})},style:{maxWidth:"220px"},children:[e.jsx("option",{value:"sunday",children:"Sunday"}),e.jsx("option",{value:"monday",children:"Monday"})]})]}),e.jsxs("div",{className:s.pathInputGroup,children:[e.jsx("label",{className:s.label,style:{minWidth:"110px"},children:"Language:"}),e.jsx("select",{className:s.input,value:F,onChange:async t=>{const i=t.target.value;if(!v)return;const d=await v(i);K({type:d?"success":"error",message:d?`Language saved (${i}).`:"Failed to save language."})},style:{maxWidth:"220px"},disabled:!v,children:C.map(t=>e.jsx("option",{value:t,children:t},t))})]})]}),e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h3",{className:s.settingTitle,children:"Keyboard Shortcut"}),e.jsxs("div",{className:s.pathInputGroup,children:[e.jsxs("div",{className:s.shortcutInputWrapper,children:[e.jsx(xn,{size:16,className:s.inputIcon}),e.jsx("input",{type:"text",value:S,onChange:t=>I(t.target.value),placeholder:"e.g. Alt+T, Ctrl+Shift+K",className:`${s.input} ${s.shortcutInput}`})]}),e.jsx("button",{onClick:async()=>{const t=await q();K({type:t?"success":"error",message:t?"Global shortcut saved.":"Failed to save global shortcut."})},className:`${s.saveSettingsBtn} ${s.saveSettingsBtnWrapper}`,children:"Save"})]}),e.jsxs("p",{className:s.settingHelper,children:["Supported modifiers: Alt, Option, Ctrl, Shift, Meta (Cmd). Example: ",e.jsx("code",{children:"Alt+T"})," or ",e.jsx("code",{children:"Ctrl+Shift+L"}),"."]})]})]}),pe==="project"&&$e==="cloud"&&e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h3",{className:s.settingTitle,children:"Danger Zone"}),Sa?xt?$a!=="owner"?e.jsx("p",{className:s.settingHelper,children:"Only workspace owners can delete a workspace."}):e.jsx("div",{className:s.pathInputGroup,children:e.jsxs("button",{className:s.destructiveBtn,onClick:async()=>{if(!Es)return;const t=String(ne||"").trim();if(!t||t==="default"){K({type:"error",message:"A non-default workspace is required for deletion."});return}const i=String(Ae||"").trim(),d=window.prompt(`Type "${i}" to permanently delete this workspace.`);if(d===null)return;if(d.trim()!==i){K({type:"error",message:"Workspace name confirmation did not match."});return}const N=await Es(t);if(!N.success){K({type:"error",message:N.error||"Failed to delete workspace."});return}const j=Array.isArray(N.cleanupWarnings)?N.cleanupWarnings.length:0;K({type:j>0?"error":"success",message:j>0?`Workspace deleted with ${j} cleanup warning(s).`:"Workspace deleted."})},disabled:!Es,children:[e.jsx(Ue,{size:14,style:{marginRight:8}}),"Delete Workspace"]})}):e.jsx("p",{className:s.settingHelper,children:"Sign in to manage workspace deletion."}):e.jsx("p",{className:s.settingHelper,children:"Workspace deletion is available in cloud runtime only."})]})]}),D==="appearanceApplication"&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:s.settingGroup,children:e.jsxs("div",{className:`${s.settingsTabs} tf-scrollbar tf-scrollbar--track-transparent tf-scrollbar--compact`,children:[e.jsx("button",{className:`${s.settingsTabBtn} ${pe==="project"?s.settingsTabBtnActive:""}`,onClick:()=>rs("project"),children:"Project"}),e.jsx("button",{className:`${s.settingsTabBtn} ${pe==="global"?s.settingsTabBtnActive:""}`,onClick:()=>rs("global"),children:"Global"})]})}),pe==="project"?tn():an()]}),D==="appearanceTaskCards"&&e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h3",{className:`${s.settingTitle} tf-heading-section`,children:"Task Cards"}),e.jsxs("label",{className:s.archiveToggle,children:[e.jsx("input",{type:"checkbox",checked:A,onChange:async t=>{if(!G)return;const i=await G(t.target.checked);K({type:i?"success":"error",message:i?"Task card status label setting saved.":"Failed to save task card status label setting."})},disabled:!G}),e.jsx("span",{children:"Show status label"})]})]}),D==="appearanceTaskForms"&&nn(),D==="commands"&&e.jsx(e.Fragment,{children:e.jsxs("div",{className:s.settingGroup,children:[e.jsx("div",{className:s.settingTitleRow,children:e.jsx("h3",{className:s.settingTitle,children:"Command Workflows"})}),e.jsx("p",{className:`${s.settingsHint} ${s.marginBottom12}`,children:"Export standard workflows to your project to verify and commit them."}),e.jsxs("div",{className:`${s.exportRow} ${s.exportRowGrid}`,children:[e.jsxs("div",{className:s.settingGroup,children:[e.jsx("h4",{className:`${s.settingSubtitle} ${s.settingSubtitleCustom}`,children:"Target Environment"}),e.jsx("div",{className:s.buttonGrid,children:Za.map(t=>e.jsxs("button",{onClick:()=>_a(t.id),className:`${s.themeBtn} ${yt===t.id?s.activeTheme:""} ${s.capitalize}`,children:[Qa(t.icon),t.name]},t.id))})]}),e.jsxs("div",{className:s.exportItem,children:[e.jsxs("div",{className:s.labelGroupFlex,children:[e.jsx("label",{className:s.label,children:"Workflows"}),e.jsxs("span",{className:s.settingDescription,children:["Destination: ",e.jsx("code",{className:s.code,children:y})]})]}),e.jsxs("div",{className:s.workflowList,children:[e.jsxs("div",{className:s.workflowActions,children:[e.jsx("button",{onClick:Aa,className:s.textBtn,children:"All"}),e.jsx("button",{onClick:Ma,className:s.textBtn,children:"None"})]}),e.jsx("div",{className:s.workflowGrid,children:Me.length===0?e.jsxs("div",{className:s.emptyState,children:["No workflow templates found.",e.jsx("button",{onClick:()=>Pa?.(!0),className:s.secondaryBtn,style:{marginTop:"8px"},children:"Retry Fetch"})]}):Me.map(t=>e.jsxs("label",{className:s.checkboxLabel,children:[e.jsx("input",{type:"checkbox",checked:Xe.includes(t),onChange:()=>Ba(t)}),t]},t))})]}),e.jsxs("button",{className:`${s.secondaryHeaderBtn} ${s.marginTop12}`,onClick:()=>La?.(yt,Xe),disabled:T==="workflows"||Xe.length===0,children:[T==="workflows"?e.jsx(_e,{size:14,className:s.spinner}):e.jsx(ba,{size:14}),"Export Selected (",Xe.length,")"]})]})]}),M&&e.jsxs("div",{className:`${M.type==="success"?s.successMessage:s.errorMessage} ${s.marginTop12}`,children:[M.type==="success"?e.jsx(be,{size:14}):e.jsx(we,{size:14}),M.message]})]})}),D==="initiatives"&&e.jsxs("div",{className:s.settingGroup,children:[e.jsxs("div",{className:s.settingTitleRow,children:[e.jsx("h3",{className:s.settingTitle,children:"Initiative Templates"}),e.jsx("button",{className:s.copyBtn,onClick:()=>{Rs?.()},children:"Refresh"})]}),e.jsx("p",{className:`${s.settingsHint} ${s.marginBottom12}`,children:"Create launch, migration, or incident initiatives from reusable templates."}),e.jsxs("div",{className:s.exportItem,children:[e.jsx("label",{className:s.label,children:"Template"}),e.jsx("select",{className:s.input,value:Ye,onChange:t=>{const i=t.target.value;Ct(i)},children:De.map(t=>e.jsx("option",{value:t.id,children:t.name},t.id))})]}),e.jsxs("div",{className:`${s.exportItem} ${s.marginTop12}`,children:[e.jsx("label",{className:s.label,children:"Initiative Title"}),e.jsx("input",{className:s.input,placeholder:"e.g. Taskforce Private Beta Launch",value:Os,onChange:t=>Ea(t.target.value)})]}),e.jsxs("button",{className:`${s.secondaryHeaderBtn} ${s.marginTop12}`,disabled:Nt||!Ye||!Os.trim()||!Gs,onClick:async()=>{if(!Gs)return;wt(!0);const t=await Gs({templateId:Ye,title:Os.trim()});wt(!1),K({type:t.success?"success":"error",message:t.success?"Initiative created from template.":t.error||"Failed to create initiative."})},children:[Nt?e.jsx(_e,{size:14,className:s.spinner}):e.jsx(Cs,{size:14}),"Create Initiative"]})]}),D==="agents"&&e.jsx("div",{className:s.settingGroup,children:e.jsxs("div",{children:[e.jsx("h4",{className:s.settingSubTitle,children:"Registered AI Profiles"}),e.jsx("p",{className:`${s.settingsHint} ${s.marginBottom12}`,children:"AI agents register profiles when connecting via MCP. Merge duplicates created when a token was lost."}),Ws&&e.jsxs("div",{className:s.settingsHint,children:[e.jsx(_e,{size:13,className:s.spinner})," Loading profiles…"]}),!Ws&&Hs.length===0&&e.jsx("div",{className:s.settingsHint,children:"No AI profiles registered yet."}),!Ws&&Hs.length>0&&(()=>{const t=new Map;for(const i of Hs){const d=i.name.toLowerCase();t.has(d)||t.set(d,[]),t.get(d).push(i)}return e.jsx("div",{className:s.aiProfilesList,children:Array.from(t.entries()).map(([,i])=>e.jsxs("div",{className:`${s.aiProfileGroup} ${i.length>1?s.aiProfileGroupDuplicate:""}`,children:[e.jsxs("div",{className:s.aiProfileGroupHeader,children:[e.jsx(ca,{size:13,style:{color:i[0].color}}),e.jsx("span",{className:s.aiProfileName,children:i[0].name}),i.length>1&&e.jsxs("span",{className:s.aiProfileDuplicateBadge,children:[e.jsx(we,{size:11})," ",i.length," duplicates"]})]}),e.jsxs("div",{className:s.settingsHint,style:{marginTop:6},children:["@",i[0].username,i[0].role?` · ${i[0].role}`:""]}),i[0].description&&e.jsx("div",{className:s.settingsHint,style:{marginTop:4},children:i[0].description}),(i[0].provider||i[0].model)&&e.jsx("div",{className:s.settingsHint,style:{marginTop:4},children:[i[0].provider,i[0].model].filter(Boolean).join(" · ")}),i.length>1&&e.jsxs("div",{className:s.aiProfileMergeSection,children:[i.map(d=>e.jsxs("div",{className:s.aiProfileMergeRow,children:[e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:4},children:[e.jsx("span",{className:s.aiProfileIdChip,children:d.id}),e.jsxs("span",{className:s.settingsHint,children:["@",d.username]})]}),fe?.keepId!==d.id&&e.jsx("button",{className:s.secondaryHeaderBtn,title:"Keep this profile, merge others into it",onClick:()=>{const N=i.find(j=>j.id!==d.id)?.id;N&&Us({keepId:d.id,mergeId:N})},children:"Keep this"}),fe?.keepId===d.id&&e.jsx("span",{className:s.aiProfileKeepBadge,children:"✓ keeping"})]},d.id)),fe&&i.some(d=>d.id===fe.keepId)&&e.jsxs("div",{className:s.aiProfileMergeActions,children:[e.jsxs("button",{className:s.dangerBtn,onClick:()=>za(fe.keepId,fe.mergeId),children:["Merge (keep ",fe.keepId.slice(-6),", delete ",fe.mergeId.slice(-6),")"]}),e.jsx("button",{className:s.secondaryHeaderBtn,onClick:()=>Us(null),children:"Cancel"})]})]})]},i[0].id))})})(),cs&&e.jsxs("div",{className:`${cs.type==="success"?s.successMessage:s.errorMessage} ${s.marginTop12}`,children:[cs.type==="success"?e.jsx(be,{size:14}):e.jsx(we,{size:14}),cs.message]})]})}),D==="taxonomy"&&e.jsxs("div",{className:`${s.settingGroup} ${s.flex1} ${s.flexCol}`,children:[e.jsx("h3",{className:s.settingTitle,children:"Taxonomy & Classification"}),e.jsx("p",{className:s.settingsHint,children:"Configure categories, task types, and custom classification systems."}),e.jsx(Vo,{taxonomies:Bs,onUpdateTaxonomies:As,onApplySystemTaxonomyPack:wa,taxonomyDisplayLabels:Ls,onUpdateTaxonomyDisplayLabels:Ta,categories:Is,pathValidation:_s,onUpdateCategory:Le,onRemoveCategory:ss,onSaveCategory:ts,onAddPath:as,onRemovePath:Ps,onUpdateCategoryIcon:Te,onUpdateCategoryColor:f,onBrowseFolders:en,types:J,onSaveType:Z,onRemoveType:qe,onUpdateType:Je,priorities:ka,onUpdatePriorities:Ca,onAnalyzeSystemTaxonomyPack:Na,manualComplexityEnabled:P,onManualComplexityEnabledChange:async t=>{const i=await O(t);K({type:i?"success":"error",message:i?"Project complexity setting saved.":"Failed to save project complexity setting."})},initialTab:x==="categories"||x==="types"||x==="priorities"?x:void 0})]}),D==="mcp"&&e.jsxs("div",{className:s.settingsGroup,children:[Fa&&e.jsxs("div",{className:s.settingsTabs,children:[e.jsx("button",{className:`${s.settingsTabBtn} ${us==="local"?s.settingsTabBtnActive:""}`,onClick:()=>Vs("local"),children:"Local MCP"}),e.jsx("button",{className:`${s.settingsTabBtn} ${us==="cloud"?s.settingsTabBtnActive:""}`,onClick:()=>Vs("cloud"),children:"Cloud MCP"})]}),at&&e.jsx(e.Fragment,{children:qt?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:s.settingGroup,children:[e.jsxs("div",{className:s.settingLabelGroup,children:[e.jsx("h3",{className:s.settingTitle,children:"OAuth Connector Setup"}),e.jsx("span",{className:s.settingDescription,children:oe==="chatgpt-desktop"?"ChatGPT Desktop uses the Taskforce OAuth connector flow instead of a personal MCP token.":"Claude Desktop uses the Taskforce OAuth connector flow instead of a personal MCP token."})]}),e.jsx("div",{className:`${fs?s.successMessage:s.settingHelper} ${s.marginTop12}`,children:fs?e.jsxs(e.Fragment,{children:[e.jsx(be,{size:14}),e.jsxs("div",{children:[e.jsx("div",{children:"Connector already authorized for this workspace."}),e.jsxs("div",{className:s.settingHelper,children:["Last used ",fs.lastUsedAt?new Date(fs.lastUsedAt).toLocaleString():"not yet"]})]})]}):"No active connector authorization for this workspace yet."}),e.jsx("div",{className:s.settingDescription,style:{marginTop:"12px"},children:"Use the server URL above in your client, then finish the OAuth authorization flow from the Integrations tab."}),e.jsx("div",{style:{display:"flex",justifyContent:"flex-end",width:"100%",marginTop:"12px"},children:e.jsx("button",{className:s.copyBtn,onClick:()=>ie("integrations"),children:"Open Integrations"})})]}),e.jsxs("div",{className:s.settingGroup,children:[e.jsxs("div",{className:`${s.codeBlockWrapper} ${s.codeBlockWrapperCustom} ${s.marginTop12}`,style:{minHeight:"260px"},children:[e.jsxs("div",{className:s.codeHeader,children:[e.jsx("span",{className:s.codeLabel,children:"Cloud MCP Configuration"}),e.jsxs("div",{className:s.codeHeaderActions,children:[e.jsx("select",{className:s.settingInput,value:oe,onChange:t=>st(t.target.value),"aria-label":"MCP client",style:{width:"auto",minWidth:"170px",padding:"6px 12px",fontSize:"12px",borderRadius:"8px"},children:dt.map(t=>e.jsx("option",{value:t.id,disabled:t.disabled,children:t.label},t.id))}),e.jsx("button",{className:`${s.copyBtn} ${je==="full"?s.copyBtnActive:""}`,onClick:Yt,title:"Copy full configuration file",children:je==="full"?e.jsx(be,{size:14}):e.jsx(ct,{size:14})})]})]}),e.jsx("pre",{className:s.codeBlock,children:e.jsx("code",{children:vs?nt(Fe,vs,V.rootKey||"mcpServers",V.wrapperKeys||[]):it(V.renderedText||"")})})]}),e.jsxs("div",{className:`${s.codeBlockWrapper} ${s.marginTop12}`,children:[e.jsx("div",{className:s.codeHeader,children:e.jsx("span",{className:s.codeLabel,children:V.instructionLabel})}),e.jsx("div",{style:{padding:"16px 20px"},children:e.jsx("div",{className:s.settingDescription,children:V.instructionText})})]})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:`${s.codeBlockWrapper} ${s.codeBlockWrapperCustom} ${s.marginTop16}`,children:[e.jsx("div",{className:s.codeHeader,children:e.jsx("div",{className:s.settingLabelGroup,style:{gap:"2px"},children:e.jsx("span",{className:s.codeLabel,children:"Generate Token"})})}),e.jsx("div",{className:s.mcpTokenCardBody,children:e.jsxs("div",{className:s.mcpTokenFormGrid,children:[e.jsxs("div",{className:s.settingsItem,style:{gap:"6px"},children:[e.jsx("div",{className:s.settingLabelGroup,children:e.jsx("span",{className:s.settingDescription,children:"Token Name"})}),e.jsx("input",{type:"text",className:s.settingInput,placeholder:"Cursor on MacBook",value:Et,onChange:t=>Qs(t.target.value)})]}),e.jsxs("div",{className:s.settingsItem,style:{gap:"6px"},children:[e.jsx("div",{className:s.settingLabelGroup,children:e.jsx("span",{className:s.settingDescription,children:"Expiry (Optional)"})}),e.jsx("input",{type:"date",className:`${s.settingInput} ${s.taskFormDateInput}`,value:et,onChange:t=>zt(t.target.value)})]})]})}),(()=>{const t=xs?.type==="error"?xs.message:null,i=t||(je==="token"?"Copied to clipboard":X||"");return e.jsxs("div",{className:s.mcpTokenOutputWrap,style:{cursor:X?"pointer":"default"},onClick:()=>X&&js(X,"token"),role:X?"button":void 0,tabIndex:X?0:-1,onKeyDown:d=>{X&&(d.key==="Enter"||d.key===" ")&&(d.preventDefault(),js(X,"token"))},title:X?je==="token"?"Token copied":"Click to copy token":void 0,children:[e.jsx("div",{className:s.settingLabelGroup,children:e.jsx("span",{className:s.settingDescription,children:"Token"})}),e.jsx("div",{className:s.mcpTokenValueField,style:{color:t?"var(--status-danger-strong, #f87171)":void 0},children:e.jsx("span",{className:s.mcpTokenValueText,children:e.jsx("code",{children:i})})})]})})(),e.jsx("div",{className:s.mcpTokenActionRow,children:e.jsxs("button",{className:s.copyBtn,onClick:()=>{Ja()},disabled:ms==="create",title:"Generate Token","aria-label":"Generate Token",children:[ms==="create"?e.jsx(_e,{size:14,className:s.spinIcon}):e.jsx(Cs,{size:14}),e.jsx("span",{children:"GENERATE TOKEN"})]})})]}),e.jsxs("div",{className:s.settingGroup,children:[e.jsxs("div",{className:`${s.codeBlockWrapper} ${s.codeBlockWrapperCustom} ${s.marginTop12}`,style:{minHeight:"260px"},children:[e.jsxs("div",{className:s.codeHeader,children:[e.jsx("span",{className:s.codeLabel,children:"Cloud MCP Configuration"}),e.jsxs("div",{className:s.codeHeaderActions,children:[e.jsx("select",{className:s.settingInput,value:oe,onChange:t=>st(t.target.value),"aria-label":"MCP client",style:{width:"auto",minWidth:"170px",padding:"6px 12px",fontSize:"12px",borderRadius:"8px"},children:dt.map(t=>e.jsx("option",{value:t.id,disabled:t.disabled,children:t.label},t.id))}),e.jsx("button",{className:`${s.copyBtn} ${je==="full"?s.copyBtnActive:""}`,onClick:Yt,title:"Copy full configuration file",children:je==="full"?e.jsx(be,{size:14}):e.jsx(ct,{size:14})})]})]}),e.jsx("pre",{className:s.codeBlock,children:e.jsx("code",{children:vs?nt(Fe,vs,V.rootKey||"mcpServers",V.wrapperKeys||[]):it(V.renderedText||"")})})]}),e.jsxs("div",{className:`${s.codeBlockWrapper} ${s.marginTop12}`,children:[e.jsx("div",{className:s.codeHeader,children:e.jsx("span",{className:s.codeLabel,children:V.instructionLabel})}),e.jsx("div",{style:{padding:"16px 20px"},children:e.jsx("div",{className:s.settingDescription,children:V.instructionText})})]})]}),e.jsxs("div",{className:s.settingGroup,children:[e.jsxs("div",{className:s.toggleHeading,onClick:()=>Bt(t=>!t),onKeyDown:t=>{(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),Bt(i=>!i))},role:"button",tabIndex:0,title:qs?"Hide connection test":"Show connection test",children:[e.jsx("label",{className:s.label,children:"Test Connection"}),qs?e.jsx(ks,{size:14}):e.jsx(ve,{size:14})]}),qs&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:`${s.settingDescription} ${s.marginTop12}`,children:"Validate that a token works for this workspace before you paste it into your MCP client."}),e.jsxs("div",{className:`${s.settingsItem} ${s.marginTop12}`,children:[e.jsx("div",{className:s.settingLabelGroup,children:e.jsx("span",{className:s.settingDescription,children:"Token to Test"})}),e.jsx("input",{type:"text",className:s.settingInput,placeholder:"tfmcp_xxxxx_replace-me",value:Gt,onChange:t=>{tt(t.target.value),ke(null)}})]}),e.jsxs("div",{className:s.marginTop12,style:{display:"flex",gap:"8px",flexWrap:"wrap",justifyContent:"flex-end"},children:[X&&e.jsx("button",{className:s.copyBtn,onClick:()=>{tt(X),ke(null)},children:"Use Generated Token"}),e.jsxs("button",{className:s.copyBtn,onClick:()=>{Xa()},disabled:Ot,children:[Ot?e.jsx(_e,{size:14,className:s.spinIcon}):e.jsx(Cs,{size:14}),"Test Connection"]})]}),H&&e.jsxs("div",{className:`${H.type==="success"?s.successMessage:s.errorMessage} ${s.marginTop12}`,children:[H.type==="success"?e.jsx(be,{size:14}):e.jsx(we,{size:14}),e.jsxs("div",{children:[e.jsx("div",{children:H.message}),H.type==="success"&&(H.workspaceName||H.workspaceId)&&e.jsxs("div",{className:s.settingHelper,children:["Workspace: ",H.workspaceName||H.workspaceId,H.workspaceId?` (${H.workspaceId})`:""]}),H.type==="success"&&Array.isArray(H.scopes)&&H.scopes.length>0&&e.jsxs("div",{className:s.settingHelper,children:["Granted scopes: ",H.scopes.join(", ")]}),H.endpoint&&e.jsxs("div",{className:s.settingHelper,children:["Endpoint: ",H.endpoint]}),H.type==="error"&&H.errorCode&&e.jsxs("div",{className:s.settingHelper,children:["Error code: ",H.errorCode]}),H.type==="error"&&H.followup&&e.jsx("div",{className:s.settingHelper,children:H.followup})]})]})]})]}),e.jsxs("div",{className:`${s.settingGroup} ${s.marginTop16}`,children:[e.jsxs("div",{className:s.toggleHeading,onClick:()=>At(t=>!t),onKeyDown:t=>{(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),At(i=>!i))},role:"button",tabIndex:0,title:Js?"Hide workspace tokens":"Show workspace tokens",children:[e.jsx("label",{className:s.label,children:"Your Tokens"}),Js?e.jsx(ks,{size:14}):e.jsx(ve,{size:14})]}),Js&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:`${s.settingDescription} ${s.marginTop12}`,children:"Manage tokens created for this workspace."}),Ga?e.jsx("p",{className:s.settingHelper,children:"Loading tokens…"}):Dt?e.jsxs("div",{className:s.errorMessage,children:[e.jsx(we,{size:14}),Dt]}):Xs.length===0?e.jsx("p",{className:s.settingHelper,children:"No MCP tokens yet."}):e.jsx("div",{className:s.settingGroup,children:Wa.map(t=>e.jsxs("div",{className:`${s.settingsItem} ${s.marginTop12}`,style:{padding:"14px 16px",borderRadius:"12px",border:"1px solid var(--border-primary, rgba(255, 255, 255, 0.1))",background:"rgba(255, 255, 255, 0.03)"},children:[e.jsxs("div",{className:s.settingLabelGroup,children:[e.jsxs("div",{className:s.labelGroupFlex,children:[e.jsx("label",{className:s.settingLabel,children:t.name}),e.jsx("span",{className:`${s.configBadge} ${t.status==="revoked"?s.configBadgeRevoked:t.status==="expired"?s.configBadgeExpired:s.configBadgeActive}`,children:t.status})]}),e.jsx("span",{className:s.settingDescription,style:{fontFamily:'"JetBrains Mono", "Fira Code", monospace'},children:t.tokenPrefix}),e.jsxs("span",{className:s.settingDescription,children:["Scopes: ",t.scopes.join(", ")]}),e.jsxs("span",{className:s.settingDescription,children:["Created ",new Date(t.createdAt).toLocaleDateString(),t.lastUsedAt?` · Last used ${new Date(t.lastUsedAt).toLocaleString()}`:" · Never used"]})]}),e.jsxs("div",{style:{display:"flex",gap:"8px",flexWrap:"wrap",justifyContent:"flex-end"},children:[t.status!=="revoked"&&e.jsx("button",{className:s.copyBtn,onClick:()=>{ea(t.id,"regenerate")},disabled:ms===`regenerate:${t.id}`,children:"Regenerate"}),t.status==="active"&&e.jsx("button",{className:s.copyBtn,onClick:()=>{ea(t.id,"revoke")},disabled:ms===`revoke:${t.id}`,children:"Revoke"})]})]},t.id))})]})]})]})}),Ha&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:`${s.settingGroup} ${s.marginTop16}`,children:e.jsxs("div",{className:s.settingLabelGroup,children:[e.jsx("h3",{className:s.settingTitle,children:"Local MCP"}),e.jsx("span",{className:s.settingDescription,children:"Local MCP runs over stdio and does not require a cloud token. Use this for Codex, Claude Code CLI, Gemini CLI, and similar local MCP clients."})]})}),e.jsxs("div",{className:`${s.codeBlockWrapper} ${s.codeBlockWrapperCustom}`,children:[e.jsxs("div",{className:s.codeHeader,children:[e.jsx("span",{className:s.codeLabel,children:"Local MCP Configuration"}),e.jsxs("div",{className:s.codeHeaderActions,children:[e.jsx("select",{className:s.settingInput,value:oe,onChange:t=>st(t.target.value),"aria-label":"MCP client",style:{width:"auto",minWidth:"170px",padding:"6px 12px",fontSize:"12px",borderRadius:"8px"},children:dt.map(t=>e.jsx("option",{value:t.id,disabled:t.disabled,children:t.label},t.id))}),e.jsx("button",{className:`${s.copyBtn} ${je==="full"?s.copyBtnActive:""}`,onClick:()=>qa("full"),title:"Copy full configuration file",children:je==="full"?e.jsx(be,{size:14}):e.jsx(ct,{size:14})})]})]}),e.jsx("pre",{className:s.codeBlock,children:e.jsx("code",{children:Zt?nt(Ce.serverId,Zt,te.rootKey||"mcpServers",te.wrapperKeys||[]):it(te.renderedText||"")})})]}),e.jsxs("div",{className:`${s.codeBlockWrapper} ${s.marginTop12}`,children:[e.jsx("div",{className:s.codeHeader,children:e.jsx("span",{className:s.codeLabel,children:te.instructionLabel})}),e.jsx("div",{style:{padding:"16px 20px"},children:e.jsx("div",{className:s.settingDescription,children:te.instructionText})})]}),e.jsx("div",{className:`${s.settingGroup} ${s.marginTop12}`,children:e.jsxs("div",{className:s.toggleHeading,onClick:()=>Pt(t=>!t),onKeyDown:t=>{(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),Pt(i=>!i))},role:"button",tabIndex:0,title:"Show advanced MCP install options",children:[e.jsx("label",{className:s.label,children:"Advanced"}),Lt?e.jsx(ks,{size:14}):e.jsx(ve,{size:14})]})}),Lt&&e.jsxs("div",{className:`${s.settingGroup} ${s.marginTop12}`,children:[e.jsxs("div",{className:s.settingLabelGroup,children:[e.jsx("h3",{className:s.settingTitle,children:"Advanced Installation Mode"}),e.jsx("span",{className:s.settingDescription,children:"Global mode is recommended. Local / npx is intended for Taskforce development workflows."})]}),e.jsxs("div",{className:s.buttonGrid,children:[e.jsx("button",{className:`${s.themeBtn} ${Re?s.activeTheme:""}`,onClick:()=>_t(!0),children:"Global"}),e.jsx("button",{className:`${s.themeBtn} ${Re?"":s.activeTheme}`,onClick:()=>_t(!1),children:"Local / npx (Dev)"})]}),e.jsxs("div",{className:`${s.settingsItem} ${s.marginTop16}`,children:[e.jsxs("div",{className:s.settingLabelGroup,children:[e.jsxs("div",{className:s.labelGroupFlex,children:[e.jsx("label",{className:s.settingLabel,children:"MCP Path Mapping (Host Root)"}),is&&!ns&&e.jsx("span",{className:s.configBadge,children:"Server Configured"})]}),e.jsx("span",{className:s.settingDescription,children:"If running in Docker, WSL, or Remote Dev, provide the absolute path to this project as seen by your host OS."})]}),e.jsx("div",{className:s.pathInputWrapper,children:e.jsx("input",{type:"text",className:s.settingInput,placeholder:is||"/Users/username/Projects/my-project or C:\\Projects\\my-project",value:ns||"",onChange:t=>Ia?.(t.target.value)})})]})]})]})]}),D==="integrations"&&e.jsxs("div",{className:s.settingsGroup,children:[e.jsx("div",{className:s.settingGroup,children:e.jsxs("div",{className:s.settingLabelGroup,children:[e.jsx("h3",{className:s.settingTitle,children:"Integrations"}),e.jsx("span",{className:s.settingDescription,children:"Manage OAuth-based app connectors separately from MCP tokens and local client setup."})]})}),e.jsxs("div",{className:`${s.settingGroup} ${s.marginTop16}`,children:[[{key:"chatgpt",label:"ChatGPT Connector",description:"Use the dedicated MCP host in ChatGPT Apps & Connectors. Taskforce handles OAuth and binds each connector authorization to one workspace.",emptyMessage:"No active ChatGPT connector grant for this workspace yet.",connector:Jt},{key:"claude",label:"Claude Desktop Connector",description:"Use the dedicated MCP host in Claude Desktop Settings > Connectors. Taskforce handles OAuth and binds each connector authorization to one workspace.",emptyMessage:"No active Claude Desktop connector grant for this workspace yet.",connector:Xt}].map(t=>{const i=t.connector;return e.jsxs("div",{className:`${s.settingsItem} ${s.marginTop12}`,style:{padding:"16px",borderRadius:"14px",border:"1px solid var(--border-primary, rgba(255, 255, 255, 0.1))",background:"rgba(255, 255, 255, 0.03)"},children:[e.jsxs("div",{className:s.settingLabelGroup,children:[e.jsxs("div",{className:s.labelGroupFlex,children:[e.jsx("label",{className:s.settingLabel,children:t.label}),e.jsx("span",{className:`${s.configBadge} ${i?s.configBadgeActive:s.configBadgeRevoked}`,children:i?"connected":"not connected"})]}),e.jsx("span",{className:s.settingDescription,children:t.description}),e.jsx("span",{className:s.settingDescription,style:{fontFamily:'"JetBrains Mono", "Fira Code", monospace'},children:Oe}),i?e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:s.settingDescription,children:["Authorized workspace: ",Ae||i.workspaceId]}),e.jsxs("span",{className:s.settingDescription,children:["Granted scopes: ",i.scopes.join(", ")]}),e.jsxs("span",{className:s.settingDescription,children:["Connected ",new Date(i.createdAt).toLocaleString(),i.lastUsedAt?` · Last used ${new Date(i.lastUsedAt).toLocaleString()}`:" · Never used"]})]}):e.jsx("span",{className:s.settingDescription,children:t.emptyMessage})]}),e.jsx("div",{style:{display:"flex",justifyContent:"flex-end",gap:"8px",flexWrap:"wrap"},children:i&&e.jsxs("button",{className:s.copyBtn,onClick:()=>{Ya(i.id)},disabled:Kt===i.id,children:[Kt===i.id?e.jsx(_e,{size:14,className:s.spinIcon}):e.jsx(Ue,{size:14}),"Disconnect"]})})]},t.key)}),Oa&&e.jsx("p",{className:`${s.settingHelper} ${s.marginTop12}`,children:"Loading connector grants…"}),Ut&&e.jsxs("div",{className:`${s.errorMessage} ${s.marginTop12}`,children:[e.jsx(we,{size:14}),Ut]})]})]})]})]})})}export{nl as TaskSettings};