@taskforcehq/taskforce 0.3.330 → 0.3.333

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 (107) hide show
  1. package/README.md +7 -2
  2. package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.d.ts +2 -2
  3. package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.js +2 -2
  4. package/dist/components/features/planning/PlanningModule.js +15 -3
  5. package/dist/components/features/planning/planningMetadata.d.ts +10 -0
  6. package/dist/components/features/planning/planningMetadata.js +8 -0
  7. package/dist/components/views/StandaloneLayout.js +35 -1
  8. package/dist/components/views/panels/PlanningDrawer.d.ts +2 -1
  9. package/dist/components/views/panels/PlanningDrawer.js +12 -8
  10. package/dist/config/envSchema.js +7 -0
  11. package/dist/core/McpTokenService.d.ts +2 -0
  12. package/dist/core/McpTokenService.js +13 -5
  13. package/dist/core/Taskforce.d.ts +11 -3
  14. package/dist/core/Taskforce.js +33 -3
  15. package/dist/core/types.d.ts +1 -0
  16. package/dist/documentReviews/DocumentReviewCommentStore.d.ts +2 -0
  17. package/dist/documentReviews/DocumentReviewCommentStore.js +28 -9
  18. package/dist/mcp/httpProtocolRouting.d.ts +1 -0
  19. package/dist/mcp/httpProtocolRouting.js +8 -5
  20. package/dist/mcp/runtime.js +24 -5
  21. package/dist/mcp/taskPlanningRegistrar.js +2 -2
  22. package/dist/mcp/toolProfiles.js +1 -0
  23. package/dist/mcp/toolRegistry.js +8 -8
  24. package/dist/server/buildInfo.d.ts +1 -0
  25. package/dist/server/buildInfo.js +5 -1
  26. package/dist/server/cloudMcpCapacityTelemetry.d.ts +68 -0
  27. package/dist/server/cloudMcpCapacityTelemetry.js +221 -0
  28. package/dist/server/localWorkspaceSyncServerRuntime.js +13 -5
  29. package/dist/server/routes/admin.js +14 -2
  30. package/dist/server/routes/localService.js +1 -0
  31. package/dist/server/routes/shared.d.ts +3 -0
  32. package/dist/server/routes/shared.js +280 -240
  33. package/dist/server/routes/syncPushRoutes.d.ts +3 -0
  34. package/dist/server/routes/syncPushRoutes.js +8 -2
  35. package/dist/service/localServiceCli.d.ts +2 -2
  36. package/dist/service/localServiceCli.js +4 -3
  37. package/dist/services/executorPhaseAIssuerCore.d.ts +13 -0
  38. package/dist/services/executorPhaseAIssuerCore.js +107 -0
  39. package/dist/services/taskforceAgentMcpBridge.d.ts +1 -1
  40. package/dist/services/taskforceAgentMcpBridge.js +35 -5
  41. package/dist/shared/executorPhaseASchemaValidation.js +1 -1
  42. package/dist/storage/postgresAdapter.js +3 -1
  43. package/dist/storage/postgresRequestDiagnostics.d.ts +9 -1
  44. package/dist/storage/postgresRequestDiagnostics.js +15 -2
  45. package/dist/storage/postgresWorker.js +13 -3
  46. package/dist/storage/postgresWorkerProtocol.d.ts +6 -0
  47. package/dist/storage/workflowStore.d.ts +2 -0
  48. package/dist/storage/workflowStore.js +39 -2
  49. package/dist/sync/cloudSyncApi.js +4 -2
  50. package/dist/sync/collaborationSyncState.js +5 -0
  51. package/dist/sync/coordinator/localWorkspaceSyncRunner.d.ts +3 -1
  52. package/dist/sync/coordinator/localWorkspaceSyncRunner.js +18 -0
  53. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.d.ts +1 -0
  54. package/dist/sync/coordinator/localWorkspaceSyncRunnerState.js +7 -6
  55. package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.js +2 -2
  56. package/dist/sync/engine/workspaceSyncEngineLocalApply.d.ts +1 -0
  57. package/dist/sync/engine/workspaceSyncEnginePushCompletion.d.ts +6 -0
  58. package/dist/sync/engine/workspaceSyncEnginePushCompletion.js +34 -1
  59. package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.js +2 -2
  60. package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.js +4 -1
  61. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.d.ts +1 -0
  62. package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.js +55 -10
  63. package/dist/sync/syncApplyHandlers.d.ts +1 -0
  64. package/dist/sync/syncApplyHandlers.js +72 -15
  65. package/dist/sync/syncService.d.ts +1 -0
  66. package/dist/sync/syncService.js +5 -2
  67. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.d.ts +7 -7
  68. package/dist/sync/v3/durableWorkflowRuntimeMutationRouter.js +50 -13
  69. package/dist/sync/v3/localOutboxRecoveryPreparationService.js +8 -2
  70. package/dist/sync/v3/localTaskCreateOutboxService.d.ts +3 -1
  71. package/dist/sync/v3/localTaskCreateOutboxService.js +6 -1
  72. package/dist/sync/v3/localTaskDeleteOutboxService.js +1 -0
  73. package/dist/sync/v3/localTaskLifecycleOutboxService.d.ts +2 -1
  74. package/dist/sync/v3/localTaskLifecycleOutboxService.js +5 -1
  75. package/dist/sync/v3/localTaskMetadataOutboxService.d.ts +2 -1
  76. package/dist/sync/v3/localTaskMetadataOutboxService.js +6 -2
  77. package/dist/sync/v3/localTaskStatusOutboxService.d.ts +2 -1
  78. package/dist/sync/v3/localTaskStatusOutboxService.js +20 -5
  79. package/dist/sync/v3/syncDurabilityStore.d.ts +2 -1
  80. package/dist/sync/v3/syncDurabilityStore.js +34 -6
  81. package/dist/sync/v3/workflowRuntimeMutationService.d.ts +5 -0
  82. package/dist/sync/v3/workflowRuntimeMutationService.js +124 -71
  83. package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.js +25 -3
  84. package/dist/sync/v3/workspaceSyncV3Feed.d.ts +1 -0
  85. package/dist/sync/v3/workspaceSyncV3Feed.js +6 -1
  86. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.d.ts +2 -0
  87. package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.js +49 -18
  88. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.d.ts +1 -0
  89. package/dist/sync/v3/workspaceSyncV3WorkflowRuntimeApply.js +50 -5
  90. package/dist/ui/assets/{AiIdentityRosterCard-OcSz1PkK.js → AiIdentityRosterCard-Cfvb9Nuv.js} +1 -1
  91. package/dist/ui/assets/{AiProfilesModule-ByhYW5Xi.js → AiProfilesModule-0oR70eFG.js} +1 -1
  92. package/dist/ui/assets/{AnnotatedAttachmentWorkspace-BTM6nIg_.js → AnnotatedAttachmentWorkspace-C33iH_r_.js} +1 -1
  93. package/dist/ui/assets/{AssetTraySortControl-DabEG8L4.js → AssetTraySortControl-BAqxUtke.js} +1 -1
  94. package/dist/ui/assets/{ContextAttachmentManager-Coa8yVGM.js → ContextAttachmentManager-BudIbOR9.js} +2 -2
  95. package/dist/ui/assets/{DocumentWorkspace-BB0qhdix.js → DocumentWorkspace-A8dFQyId.js} +1 -1
  96. package/dist/ui/assets/{EntityActivityTimeline-CZ8x4UJE.js → EntityActivityTimeline-g7vtdsx1.js} +1 -1
  97. package/dist/ui/assets/PlanningModule-D-DeQs4F.js +1 -0
  98. package/dist/ui/assets/{PlansPage-D86pZSSl.js → PlansPage-BWmfGi0Z.js} +1 -1
  99. package/dist/ui/assets/{TaskContextUpload-BVIkU9yT.js → TaskContextUpload-BA_lQmS9.js} +1 -1
  100. package/dist/ui/assets/{TaskSettings-Cv1mNhv_.js → TaskSettings-DAlH4YIP.js} +1 -1
  101. package/dist/ui/assets/{TaskforceAgentsModule-gmH-PD2q.js → TaskforceAgentsModule-DmeCf6pJ.js} +2 -2
  102. package/dist/ui/assets/{WorkflowManagerModule-DbfnHJ-f.js → WorkflowManagerModule-p08eDOaa.js} +1 -1
  103. package/dist/ui/assets/index-GHJgcW3j.js +7 -0
  104. package/dist/ui/index.html +1 -1
  105. package/package.json +3 -1
  106. package/dist/ui/assets/PlanningModule-pRPjR7v5.js +0 -1
  107. package/dist/ui/assets/index-CTsDBaef.js +0 -7
@@ -8,7 +8,7 @@
8
8
  <link rel="icon" type="image/png" sizes="16x16" href="/favicon/favicon-16x16.png" />
9
9
  <link rel="apple-touch-icon" href="/taskforce/favicon/apple-touch-icon.png" />
10
10
  <title>Taskforce</title>
11
- <script type="module" crossorigin src="/taskforce/assets/index-CTsDBaef.js"></script>
11
+ <script type="module" crossorigin src="/taskforce/assets/index-GHJgcW3j.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="/taskforce/assets/vendor-react-CKJs5o3c.js">
13
13
  <link rel="modulepreload" crossorigin href="/taskforce/assets/vendor-icons-Bsq-mcEn.js">
14
14
  <link rel="modulepreload" crossorigin href="/taskforce/assets/vendor-markdown-_lhNCyq-.js">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taskforcehq/taskforce",
3
- "version": "0.3.330",
3
+ "version": "0.3.333",
4
4
  "description": "Shared task and planning workspace for humans collaborating with AI (public beta)",
5
5
  "author": "Taskforce HQ <hello@taskforcehq.ai> (https://taskforcehq.ai)",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
@@ -98,6 +98,7 @@
98
98
  "test:sync:program-scaffold:postgres": "vitest run src/sync/v3/programScaffoldService.postgres.integration.test.ts",
99
99
  "test:postgres:run": "node scripts/run-with-disposable-postgres.mjs --",
100
100
  "test:postgres:smoke": "node scripts/run-with-disposable-postgres.mjs -- npm run test:sync:coordinator:postgres",
101
+ "test:executor-phase-a:postgres": "npm run build && node scripts/run-with-disposable-postgres.mjs -- npx vitest run --maxWorkers=1 --hookTimeout=120000 src/storage/executorPhaseAApprovalReceiptStore.postgres.integration.test.ts src/storage/executorPhaseARunAuthorizationStore.postgres.integration.test.ts",
101
102
  "test:cloud-read-workers:postgres": "npm run build && node scripts/run-with-disposable-postgres.mjs -- node scripts/run-cloud-collection-read-worker-gate.mjs",
102
103
  "test:soak": "sh scripts/run-soak.sh",
103
104
  "test:soak:smoke": "SYNC_SOAK_PROFILE=smoke sh scripts/run-soak.sh",
@@ -158,6 +159,7 @@
158
159
  "check:mcp-smoke": "node scripts/check-cloud-mcp.mjs",
159
160
  "check:mcp-connection": "node scripts/check-authenticated-mcp.mjs",
160
161
  "check:mcp-latency": "node scripts/run-mcp-latency-gate.mjs",
162
+ "check:mcp-capacity": "node scripts/run-mcp-capacity-gate.mjs",
161
163
  "baseline:mcp:s1:cloud": "sh scripts/run-mcp-s1-cloud-baseline.sh",
162
164
  "baseline:mcp:s1:assemble": "node scripts/assemble-mcp-s1-baseline.mjs",
163
165
  "test:mcp:s1-baseline": "node --test scripts/run-mcp-latency-gate.test.mjs scripts/run-mcp-s1-cloud-baseline.test.mjs scripts/assemble-mcp-s1-baseline.test.mjs",
@@ -1 +0,0 @@
1
- import{R as a,j as t}from"./vendor-react-CKJs5o3c.js";import{an as ze,ao as $e,ap as Le,aq as We,ar as ye,as as re,T as Pe,at as ge,au as ee,av as te,aw as U,ax as J,ay as De,az as Fe,aA as He,aB as Be,aC as Me,aD as Ue,aE as be,aF as _e,aG as oe,aH as je,aI as Ge,aJ as Ve,aK as Ke,aL as qe,aM as Qe}from"./index-CTsDBaef.js";import{w as ae,Z as ke,R as se,a8 as Je,a9 as Xe,S as Ye,X as Ze,al as et,aj as tt,t as ne,ak as me,V as ie,Y as nt,a7 as it}from"./vendor-icons-Bsq-mcEn.js";import"./vendor-markdown-_lhNCyq-.js";import"./vendor-dnd-CJ-AjP-Y.js";import"./vendor-router-AqJMU8Lz.js";const at="_module_3zich_1",st="_columns_3zich_15",rt="_column_3zich_15",ot="_columnHeader_3zich_36",lt="_columnHeadingGroup_3zich_49",ct="_paneHeading_3zich_56",dt="_responsiveBack_3zich_60",ut="_sectionLabel_3zich_64",ht="_sectionHeadingRow_3zich_68",vt="_headerActions_3zich_81",pt="_portfolioControls_3zich_87",ft="_searchRow_3zich_95",yt="_searchShell_3zich_101",gt="_clearSearch_3zich_139",kt="_controlActive_3zich_160",mt="_filterPanel_3zich_166",wt="_filterField_3zich_177",xt="_filterLabel_3zich_184",bt="_filterDropdown_3zich_190",_t="_sortTrigger_3zich_204",jt="_scrollRegion_3zich_217",Ct="_selectedEntityContext_3zich_227",Et="_selectedEntityContextArchived_3zich_237",St="_selectedEntityReferenceRow_3zich_242",It="_selectedEntityReferenceIdentity_3zich_257",Nt="_selectedEntityReferenceActions_3zich_264",At="_workspaceEditor_3zich_278",Rt="_workspaceEditorField_3zich_294",Ot="_workspaceEditorActions_3zich_337",Tt="_selectedEntityDescription_3zich_348",zt="_selectedEntityDescriptionMarkdown_3zich_355",$t="_selectedEntityOwnerField_3zich_361",Lt="_selectedEntityOwnerDropdown_3zich_373",Wt="_selectedEntityDetailsSection_3zich_377",Pt="_activityTimelineList_3zich_382",Dt="_activityTimelineEmpty_3zich_389",Ft="_visuallyHidden_3zich_393",Ht="_entityCard_3zich_405",Bt="_entityCardTopRow_3zich_426",Mt="_entityCardBody_3zich_433",Ut="_entityCardContentButton_3zich_437",Gt="_entityCardSelected_3zich_447",Vt="_entityCardArchived_3zich_455",Kt="_relationshipRecovery_3zich_466",qt="_empty_3zich_488",Qt="_centerState_3zich_495",Jt="_inlineError_3zich_509",Xt="_spinner_3zich_524",Yt="_columnPortfolio_3zich_543",Zt="_columnActive_3zich_544",en="_columnWorkstreams_3zich_545",tn="_columnTasks_3zich_550",nn="_workspaceEditorIdentity_3zich_592",i={module:at,columns:st,column:rt,columnHeader:ot,columnHeadingGroup:lt,paneHeading:ct,responsiveBack:dt,sectionLabel:ut,sectionHeadingRow:ht,headerActions:vt,portfolioControls:pt,searchRow:ft,searchShell:yt,clearSearch:gt,controlActive:kt,filterPanel:mt,filterField:wt,filterLabel:xt,filterDropdown:bt,sortTrigger:_t,scrollRegion:jt,selectedEntityContext:Ct,selectedEntityContextArchived:Et,selectedEntityReferenceRow:St,selectedEntityReferenceIdentity:It,selectedEntityReferenceActions:Nt,workspaceEditor:At,workspaceEditorField:Rt,workspaceEditorActions:Ot,selectedEntityDescription:Tt,selectedEntityDescriptionMarkdown:zt,selectedEntityOwnerField:$t,selectedEntityOwnerDropdown:Lt,selectedEntityDetailsSection:Wt,activityTimelineList:Pt,activityTimelineEmpty:Dt,visuallyHidden:Ft,entityCard:Ht,entityCardTopRow:Bt,entityCardBody:Mt,entityCardContentButton:Ut,entityCardSelected:Gt,entityCardArchived:Vt,relationshipRecovery:Kt,empty:qt,centerState:Qt,inlineError:Jt,spinner:Xt,columnPortfolio:Yt,columnActive:Zt,columnWorkstreams:en,columnTasks:tn,workspaceEditorIdentity:nn};function Y({entityType:e,mode:l,initialTitle:_="",initialDescription:m="",ownerOptions:p,fixedInitiativeId:f,formId:I,showActions:N=!0,onSavingChange:j,onCancel:A,onSave:T}){const w=e==="initiative"?"Initiative":"Workstream",B=a.useId(),$=a.useId(),L=a.useId(),y=a.useRef(null),[V,M]=a.useState(_),[E,g]=a.useState(m),[x,R]=a.useState(""),[S,W]=a.useState(null),[u,b]=a.useState(null),[C,P]=a.useState(null),[D,z]=a.useState(null),[k,O]=a.useState(!1);a.useEffect(()=>{y.current?.focus()},[]);const F=async c=>{if(c.preventDefault(),k)return;const h=V.trim();if(!h){P(`${w} title is required.`),y.current?.focus();return}P(null),z(null),O(!0),j?.(!0);try{await T({title:h,description:E.trim()||null,...l==="create"?{ownerId:x.trim()||null}:{},...e==="workstream"&&l==="create"?{initiativeId:f||null}:{},...l==="create"&&(S||u)?{icon:S,color:u}:{}})}catch(H){z(H instanceof Error?H.message:`Failed to save ${w.toLowerCase()}.`)}finally{O(!1),j?.(!1)}};return t.jsxs("form",{id:I,className:i.workspaceEditor,onSubmit:c=>{F(c)},onKeyDown:c=>{c.key!=="Escape"||k||(c.preventDefault(),A())},noValidate:!0,children:[l==="create"?t.jsxs("div",{className:i.workspaceEditorIdentity,children:[t.jsx(be,{entityType:e,entityId:"create-preview",icon:S,color:u||"blue",size:"detail",onChange:c=>{Object.prototype.hasOwnProperty.call(c,"icon")&&W(c.icon??null),Object.prototype.hasOwnProperty.call(c,"color")&&b(c.color??null)}}),t.jsx("span",{children:"Choose an icon and color"})]}):null,t.jsxs("div",{className:i.workspaceEditorField,children:[t.jsxs("label",{htmlFor:B,children:[w," title"]}),t.jsx("input",{ref:y,id:B,value:V,disabled:k,required:!0,"aria-invalid":C?"true":void 0,"aria-describedby":C?$:void 0,onChange:c=>{M(c.target.value),C&&P(null)},placeholder:e==="initiative"?"Enter initiative title":"Enter workstream title"}),C?t.jsx("p",{id:$,className:"tf-text-error",children:C}):null]}),t.jsxs("div",{className:i.workspaceEditorField,children:[t.jsxs("label",{htmlFor:L,children:[w," description"]}),t.jsx("textarea",{id:L,value:E,disabled:k,rows:5,onChange:c=>g(c.target.value),placeholder:e==="initiative"?"Describe the broader outcome this initiative is meant to achieve.":"Describe the lane of work this workstream will coordinate."})]}),l==="create"&&p?t.jsxs("div",{className:i.workspaceEditorField,children:[t.jsxs("span",{children:[w," owner"]}),t.jsx(re,{value:x,options:p,onChange:R,disabled:k,ariaLabel:`${w} owner`,className:`${_e.control} ${i.selectedEntityOwnerDropdown}`})]}):null,D?t.jsx("p",{className:"tf-text-error",role:"alert",children:D}):null,N?t.jsxs("div",{className:i.workspaceEditorActions,children:[t.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:A,disabled:k,children:"Cancel"}),t.jsxs("button",{type:"submit",className:"tf-button-primary tf-button-compact",disabled:k,children:[k?t.jsx(ae,{size:14,className:i.spinner,"aria-hidden":"true"}):null,l==="create"?`Create ${w}`:"Save"]})]}):null]})}function an({initiative:e,ownerOption:l,ownerOptions:_,workstreamCount:m,selected:p,onSelect:f,onChangeOwner:I,onChangeIdentity:N}){return t.jsxs("div",{className:`${i.entityCard} ${e.isArchived?i.entityCardArchived:""} ${p?i.entityCardSelected:""}`.trim(),children:[t.jsx(oe,{label:J(e),entityType:"initiative",entityName:e.title,interactive:!1}),t.jsx("div",{className:i.entityCardBody,children:t.jsx("div",{role:"button",tabIndex:0,className:i.entityCardContentButton,onClick:f,onKeyDown:j=>{j.key!=="Enter"&&j.key!==" "||(j.preventDefault(),f())},"aria-pressed":p,children:t.jsx(je,{item:e,entityType:"initiative",workstreamCount:m,ownerOption:l,ownerOptions:_,onChangeOwner:I,onChangeIdentity:N})})})]})}function we({workstream:e,ownerOption:l,ownerOptions:_,selected:m,onSelect:p,onChangeOwner:f,onChangeIdentity:I,referenceAction:N,feedback:j}){const A=U(e);return t.jsxs("div",{className:`${i.entityCard} ${e.isArchived?i.entityCardArchived:""} ${m?i.entityCardSelected:""}`.trim(),children:[t.jsxs("div",{className:i.entityCardTopRow,children:[N,t.jsx(oe,{label:A||"Reference pending",entityType:"workstream",entityName:e.title,interactive:!1,pending:!A})]}),j,t.jsx("div",{className:i.entityCardBody,children:t.jsx("div",{role:"button",tabIndex:0,className:i.entityCardContentButton,onClick:p,onKeyDown:T=>{T.key!=="Enter"&&T.key!==" "||(T.preventDefault(),p())},"aria-pressed":m,children:t.jsx(je,{item:e,entityType:"workstream",ownerOption:l,ownerOptions:_,onChangeOwner:f,onChangeIdentity:I})})})]})}function xe({item:e,entityType:l,ownerOptions:_,onChangeOwner:m,onChangeIdentity:p,workspaceId:f,currentActorId:I,taskReferences:N,hydrationState:j,onRetryHydration:A,onAddContextFile:T,onRemoveContextFile:w,onUpdateContextCaption:B,onUpdate:$,onArchive:L,onUnarchive:y,referenceAction:V,relationshipActions:M,relationshipContent:E}){const g=l==="initiative"?"Initiative":"Workstream",x=l==="initiative"?J(e):U(e),[R,S]=a.useState(String(e.ownerId||"")),[W,u]=a.useState(!1),[b,C]=a.useState(!1),[P,D]=a.useState(!1),[z,k]=a.useState(!1),[O,F]=a.useState(!1),c=a.useId(),h=Ge({entityType:l,isArchived:e.isArchived,taskCount:e.taskCount,completedTaskCount:e.completedTaskCount,archiveReady:e.archiveReady,activeWorkstreamCount:e.archiveActiveWorkstreamCount}),H=h.mode==="archived"?`Unarchive ${g.toLowerCase()}`:h.mode==="blocked"?`Archive unavailable — active ${h.remainingKind==="task"?"tasks":"workstreams"} remain`:h.mode==="checking"?"Archive availability is still loading":`Archive ${g.toLowerCase()}`;a.useEffect(()=>{S(String(e.ownerId||"")),u(!1)},[e.id,e.ownerId]),a.useEffect(()=>{C(!1),D(!1),k(!1),F(!1)},[e.id]);const s=async d=>{if(!m||e.isArchived||W||d===R)return;const G=R;S(d),u(!0);try{await m(d)}catch{S(G)}finally{u(!1)}},K=async()=>{if(O)return;if(h.mode==="ready"){k(!0);return}const d=h.mode==="archived"?y:L;if(!(!d||h.mode==="blocked"||h.mode==="checking")){F(!0);try{await d()}finally{F(!1)}}},r=async()=>{if(!(!L||O)){F(!0);try{await L()!==!1&&k(!1)}finally{F(!1)}}};return t.jsxs("section",{className:`${i.selectedEntityContext} ${e.isArchived?i.selectedEntityContextArchived:""}`.trim(),"aria-label":`Selected ${g.toLowerCase()}`,"aria-busy":j?.status==="loading",children:[t.jsxs("div",{className:i.selectedEntityReferenceRow,children:[t.jsxs("div",{className:i.selectedEntityReferenceIdentity,children:[t.jsx(be,{entityType:l,entityId:e.id,icon:e.icon,color:e.color,size:"detail",disabled:!!e.isArchived,onChange:p?d=>p(l,e.id,d):void 0}),V,t.jsx(oe,{label:x||"Reference pending",entityType:l,entityName:e.title,interactive:!1,pending:!x})]}),t.jsxs("div",{className:i.selectedEntityReferenceActions,children:[t.jsx("span",{children:g}),M,!b&&(L||y)?t.jsx("button",{type:"button",className:"tf-control-icon",disabled:O||h.mode==="blocked"||h.mode==="checking"||(h.mode==="archived"?!y:!L),onClick:()=>{K()},"aria-label":H,title:H,"aria-expanded":h.mode==="ready"?z:void 0,children:h.mode==="archived"?t.jsx(se,{size:14,"aria-hidden":"true"}):t.jsx(nt,{size:14,"aria-hidden":"true"})}):null,!b&&!e.isArchived&&$?t.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>C(!0),"aria-label":`Edit ${g.toLowerCase()}`,title:`Edit ${g.toLowerCase()}`,children:t.jsx(it,{size:14,"aria-hidden":"true"})}):null,b?t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>C(!1),disabled:P,children:"Cancel"}),t.jsx("button",{type:"submit",form:c,className:"tf-button-primary tf-button-compact",disabled:P,children:"Save"})]}):null]})]}),z&&h.mode==="ready"?t.jsx(Ve,{entityType:l,title:e.title,activeTaskCount:e.archiveActiveTaskCount,activeWorkstreamCount:e.archiveActiveWorkstreamCount,busy:O,onCancel:()=>k(!1),onConfirm:()=>{r()}}):null,E,b&&$?t.jsx(Y,{entityType:l,mode:"edit",formId:c,showActions:!1,onSavingChange:D,initialTitle:e.title,initialDescription:e.description||"",onCancel:()=>C(!1),onSave:async d=>{await $(d),C(!1)}},`${l}:${e.id}`):t.jsxs(t.Fragment,{children:[t.jsx("h3",{className:"tf-heading-card",children:e.title}),t.jsx(Ke,{description:e.description,label:g,taskReferences:N,className:`${i.selectedEntityDescription} tf-scrollbar`.trim(),markdownClassName:i.selectedEntityDescriptionMarkdown})]}),t.jsxs("div",{className:i.selectedEntityOwnerField,children:[t.jsx("span",{children:"Owner"}),t.jsx(re,{value:R,options:_,onChange:d=>{s(d)},disabled:!m||!!e.isArchived||W,ariaLabel:`${g} owner`,className:`${_e.control} ${i.selectedEntityOwnerDropdown}`})]}),t.jsx("div",{className:i.selectedEntityDetailsSection,children:t.jsx(qe,{entityType:l,entityId:e.id,referenceLabel:l==="initiative"?J(e):U(e),workspaceId:f,attachments:e.attachments,readOnly:!!e.isArchived,defaultExpanded:!1,onAddAttachment:!e.isArchived&&T?d=>T(l,e.id,d):void 0,onRemoveAttachment:!e.isArchived&&w?d=>w(l,e.id,d):void 0,onUpdateAttachmentCaption:!e.isArchived&&B?(d,G)=>B(l,e.id,d,G):void 0})}),t.jsx("div",{className:i.selectedEntityDetailsSection,children:t.jsx(Qe,{entityType:l,item:e,assigneeOptions:_,currentActorId:I,taskReferences:N,defaultExpanded:!1,listClassName:i.activityTimelineList,emptyClassName:i.activityTimelineEmpty,hydrationState:j,onRetryHydration:A})})]})}function un({model:e}){const[l,_]=a.useState(null),[m,p]=a.useState(null),[f,I]=a.useState("portfolio"),[N,j]=a.useState(""),[A,T]=a.useState("all"),[w,B]=a.useState("default"),[$,L]=a.useState(!1),[y,V]=a.useState(!1),M=e.taskArrangeMode||"execution",[E,g]=a.useState(null),[x,R]=a.useState(null),[S,W]=a.useState(null),[u,b]=a.useState(!1),C=a.useRef(null),P=a.useRef(null),D=a.useRef(null),z=a.useRef(null),k=a.useRef(null),O=a.useMemo(()=>new Map(e.assigneeOptions.filter(n=>!String(n.archivedAt||"").trim()).map(n=>[String(n.value),n])),[e.assigneeOptions]),F=a.useMemo(()=>{const n=String(e.currentOwnerId||"").trim(),o=n?ze(e.assigneeOptions,n).find(v=>v.value===n):void 0;return[{value:"all",label:"All owners",icon:"Users",color:"var(--text-secondary)",kind:"unassigned"},...n?[{...o,value:"mine",label:"Owned by me",icon:o?.icon||"User",color:o?.color||"var(--text-secondary)",kind:o?.kind||"member"}]:[],{value:"unassigned",label:"Unassigned",icon:Le,color:$e,kind:"unassigned"}]},[e.assigneeOptions,e.currentOwnerId]),c=a.useMemo(()=>We({initiatives:e.initiatives,standaloneWorkstreams:e.standaloneWorkstreams,showArchivedPlanning:y,searchQuery:N,ownerFilter:A,currentOwnerId:String(e.currentOwnerId||""),sort:w}),[e.currentOwnerId,e.initiatives,e.standaloneWorkstreams,A,N,y,w]),h=a.useMemo(()=>c.initiatives.map(({initiative:n})=>n),[c.initiatives]),H=c.standaloneWorkstreams,s=a.useMemo(()=>e.initiatives.find(n=>n.id===l)??null,[e.initiatives,l]),K=a.useMemo(()=>[...e.initiatives.flatMap(n=>n.allWorkstreams??n.workstreams),...e.standaloneWorkstreams],[e.initiatives,e.standaloneWorkstreams]),r=a.useMemo(()=>K.find(n=>n.id===m)??null,[K,m]),d=s?(s.allWorkstreams??s.workstreams).filter(n=>y||!n.isArchived):r&&!r.initiativeId?[r]:[],G=a.useMemo(()=>ye((r?.tasks??[]).filter(n=>y||!n.isArchived),M),[r?.tasks,y,M]),le=a.useMemo(()=>new Set((s?.allWorkstreams??s?.workstreams??[]).map(n=>n.id)),[s]),ce=a.useMemo(()=>new Set((r?.tasks??[]).map(n=>n.id)),[r]),Ce=a.useMemo(()=>e.linkOptions.workstreams.filter(n=>!le.has(n.id)),[le,e.linkOptions.workstreams]),Ee=a.useMemo(()=>e.linkOptions.tasks.filter(n=>!ce.has(n.id)),[ce,e.linkOptions.tasks]),q=r?"workstream":s?"initiative":null,Q=r?.id||s?.id||null,de=q&&Q?e.hydrationStateByEntity?.[`${q}:${Q}`]:void 0,ue=a.useMemo(()=>e.initiatives.some(o=>o.isArchived)?!0:[...e.initiatives.flatMap(o=>o.allWorkstreams??o.workstreams),...e.standaloneWorkstreams].some(o=>o.isArchived||(o.tasks??[]).some(v=>v.isArchived)),[e.initiatives,e.standaloneWorkstreams]);a.useEffect(()=>{const n=k.current;if(n){if(n.entityType==="initiative"){if(!e.initiatives.some(o=>o.id===n.entityId))return;k.current=null,_(n.entityId),p(null),z.current="workstreams",I("workstreams");return}K.some(o=>o.id===n.entityId)&&(k.current=null,_(n.initiativeId||null),p(n.entityId),z.current="tasks",I("tasks"))}},[K,e.initiatives]),a.useEffect(()=>{l&&!s&&(_(null),p(null),I("portfolio"))},[s,l]),a.useEffect(()=>{m&&!r&&(p(null),I(s?"workstreams":"portfolio"))},[s,r,m]),a.useEffect(()=>{!e.hydrateEntity||!q||!Q||e.hydrateEntity(q,Q)},[e.hydrateEntity,Q,q]),a.useEffect(()=>{R(null),W(null),b(!1)},[Q,q]),a.useLayoutEffect(()=>{if(z.current!==f)return;(f==="portfolio"?C.current:f==="workstreams"?P.current:D.current)?.focus({preventScroll:!0}),z.current=null},[f]);const X=n=>{if(n===f){(n==="portfolio"?C.current:n==="workstreams"?P.current:D.current)?.focus({preventScroll:!0});return}z.current=n,I(n)},Se=n=>{_(n),p(null),X("workstreams")},he=n=>{n.initiativeId||_(null),p(n.id),X("tasks")},Ie=()=>{X(s?"workstreams":"portfolio")},Ne=c.hasCriteria||w!=="default",Ae=()=>{j(""),T("all"),B("default")},Z=async n=>{if(!E||!e.createEntity)return;const o=await e.createEntity(E.entityType,n);k.current={entityType:E.entityType,entityId:o.id,initiativeId:E.initiativeId},g(null)},ve=async(n,o)=>{if(u)return;const v=n==="workstream"?e.attachWorkstreamToInitiative:e.attachTaskToWorkstream,fe=n==="workstream"?s?.id:r?.id;if(!(!v||!fe)){b(!0);try{await v(fe,o.referenceLabel)}finally{b(!1)}}},Re=async n=>{if(!(!r||!e.assignWorkstreamToInitiative||u)){b(!0);try{await e.assignWorkstreamToInitiative(r.id,n.referenceLabel)!==!1&&_(n.id)}finally{b(!1)}}},Oe=async()=>{if(!(!x||u)){b(!0);try{if(x.entityType==="workstream"){if(!e.assignWorkstreamToInitiative)return;const n=s?J(s):null;if(await e.assignWorkstreamToInitiative(x.id,null)===!1)return;W({pane:x.id===r?.id?"tasks":"workstreams",message:`${x.referenceLabel} removed from its initiative.`,onUndo:async()=>{if(!n)return;await e.assignWorkstreamToInitiative?.(x.id,n)!==!1&&W(null)}})}else{if(!e.assignTaskToWorkstream||!r)return;const n=r.id;if(await e.assignTaskToWorkstream(x.id,null)===!1)return;W({pane:"tasks",message:`${x.referenceLabel} removed from this workstream.`,onUndo:async()=>{await e.assignTaskToWorkstream?.(x.id,n)!==!1&&W(null)}})}R(null)}finally{b(!1)}}},Te=async()=>{if(!(!S||u)){b(!0);try{await S.onUndo()}finally{b(!1)}}},pe=S?t.jsxs("div",{className:i.relationshipRecovery,role:"status",children:[t.jsx("span",{children:S.message}),t.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",disabled:u,onClick:()=>{Te()},children:u?"Restoring…":"Undo"})]}):null;return e.loadState.status==="loading"&&e.initiatives.length===0&&e.standaloneWorkstreams.length===0?t.jsxs("main",{className:i.centerState,"aria-busy":"true","aria-label":"Loading planning workspace",children:[t.jsx(ae,{size:22,className:i.spinner}),t.jsx("span",{children:"Loading planning…"})]}):e.loadState.status==="error"&&e.initiatives.length===0&&e.standaloneWorkstreams.length===0?t.jsxs("main",{className:i.centerState,role:"alert",children:[t.jsx(ke,{size:22}),t.jsx("strong",{children:"Planning could not be loaded."}),t.jsx("span",{children:e.loadState.error}),t.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:e.retry,disabled:e.loadState.isRefreshing,children:[e.loadState.isRefreshing?t.jsx(ae,{size:15,className:i.spinner}):t.jsx(se,{size:15}),"Retry"]})]}):t.jsxs("main",{className:i.module,"aria-label":"Planning workspace","aria-busy":e.loadState.isRefreshing,children:[e.loadState.isRefreshing?t.jsx("span",{className:i.visuallyHidden,role:"status","aria-live":"polite",children:"Refreshing planning"}):null,(e.loadState.status==="partial"||e.loadState.status==="error")&&t.jsxs("div",{className:i.inlineError,role:"alert",children:[t.jsx(ke,{size:16}),t.jsx("span",{children:e.loadState.error||"Some planning information could not be loaded."}),t.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:e.retry,children:"Retry"})]}),t.jsxs("div",{className:i.columns,"data-active-pane":f,children:[t.jsxs("section",{className:`${i.column} ${i.columnPortfolio} ${f==="portfolio"?i.columnActive:""}`.trim(),"aria-labelledby":"planning-portfolio-heading",children:[t.jsxs("div",{className:i.columnHeader,children:[t.jsx("h2",{ref:C,id:"planning-portfolio-heading",className:`tf-heading-section ${i.paneHeading}`,tabIndex:-1,children:"Portfolio"}),t.jsxs("div",{className:i.headerActions,children:[t.jsx("span",{children:h.length+H.length}),t.jsx("button",{type:"button",className:`tf-control-icon ${y?i.controlActive:""}`.trim(),onClick:()=>V(n=>!n),disabled:!ue,"aria-label":y?"Hide archived planning items":"Show archived planning items","aria-pressed":y,title:ue?y?"Hide archived planning items":"Show archived planning items":"No archived planning items",children:y?t.jsx(Je,{size:15,"aria-hidden":"true"}):t.jsx(Xe,{size:15,"aria-hidden":"true"})})]})]}),t.jsxs("div",{className:i.portfolioControls,children:[t.jsxs("div",{className:i.searchRow,children:[t.jsxs("div",{className:i.searchShell,children:[t.jsx(Ye,{size:14,"aria-hidden":"true"}),t.jsx("input",{type:"search",value:N,onChange:n=>j(n.target.value),placeholder:"Search initiatives and workstreams","aria-label":"Search planning"}),N?t.jsx("button",{type:"button",className:i.clearSearch,onClick:()=>j(""),"aria-label":"Clear planning search",title:"Clear search",children:t.jsx(Ze,{size:13,"aria-hidden":"true"})}):null]}),t.jsx("button",{type:"button",className:`tf-control-icon ${$||A!=="all"||w!=="default"?i.controlActive:""}`.trim(),"aria-label":"Filter and sort planning",title:"Filter and sort planning","aria-expanded":$,"aria-controls":"planning-workspace-navigator-options",onClick:()=>L(n=>!n),children:t.jsx(et,{size:15,"aria-hidden":"true"})})]}),$?t.jsxs("div",{id:"planning-workspace-navigator-options",className:i.filterPanel,children:[t.jsxs("div",{className:i.filterField,children:[t.jsx("span",{className:i.filterLabel,children:"Owner"}),t.jsx(re,{value:A,options:e.assigneeOptions,leadingOptions:F,includeUnassigned:!1,onChange:T,disabled:!1,ariaLabel:"Filter planning by owner",className:i.filterDropdown})]}),t.jsxs("div",{className:i.filterField,children:[t.jsx("span",{className:i.filterLabel,children:"Sort"}),t.jsx(Pe,{value:w,options:ge,onChange:n=>B(String(n)),ariaLabel:"Sort planning",className:i.filterDropdown,portalPanel:!0,panelAlign:"start",triggerContent:t.jsxs("span",{className:i.sortTrigger,children:[t.jsx(tt,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:ge.find(n=>n.value===w)?.label})]}),renderOptionContent:n=>n.label})]}),t.jsx("button",{type:"button",className:"tf-control-icon",onClick:Ae,disabled:!Ne,"aria-label":"Reset planning filters and sort",title:"Reset planning filters and sort",children:t.jsx(se,{size:14,"aria-hidden":"true"})})]}):null]}),t.jsxs("div",{className:i.scrollRegion,children:[t.jsxs("div",{className:i.sectionHeadingRow,children:[t.jsx("h3",{className:`tf-heading-section ${i.sectionLabel}`,children:"Initiatives"}),e.createEntity?t.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>g({entityType:"initiative"}),"aria-label":"Create initiative",title:"Create initiative",children:t.jsx(ne,{size:15,"aria-hidden":"true"})}):null]}),E?.entityType==="initiative"?t.jsx(Y,{entityType:"initiative",mode:"create",ownerOptions:e.assigneeOptions,onCancel:()=>g(null),onSave:Z}):null,c.initiatives.map(({initiative:n,workstreams:o})=>t.jsx(an,{initiative:n,workstreamCount:o.length,ownerOption:n.ownerId?O.get(n.ownerId):void 0,ownerOptions:e.assigneeOptions,selected:l===n.id,onSelect:()=>Se(n.id),onChangeOwner:e.changeOwner?v=>e.changeOwner?.("initiative",n.id,v==="unassigned"?"":v):void 0,onChangeIdentity:e.changeIdentity?v=>e.changeIdentity?.("initiative",n.id,v):void 0},n.id)),t.jsxs("div",{className:i.sectionHeadingRow,children:[t.jsx("h3",{className:`tf-heading-section ${i.sectionLabel}`,children:"Standalone workstreams"}),e.createEntity?t.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>g({entityType:"workstream",initiativeId:null}),"aria-label":"Create standalone workstream",title:"Create standalone workstream",children:t.jsx(ne,{size:15,"aria-hidden":"true"})}):null]}),E?.entityType==="workstream"&&!E.initiativeId?t.jsx(Y,{entityType:"workstream",mode:"create",ownerOptions:e.assigneeOptions,fixedInitiativeId:null,onCancel:()=>g(null),onSave:Z}):null,H.map(n=>t.jsx(we,{workstream:n,ownerOption:n.ownerId?O.get(n.ownerId):void 0,ownerOptions:e.assigneeOptions,selected:m===n.id,onSelect:()=>he(n),onChangeOwner:e.changeOwner?o=>e.changeOwner?.("workstream",n.id,o==="unassigned"?"":o):void 0,onChangeIdentity:e.changeIdentity?o=>e.changeIdentity?.("workstream",n.id,o):void 0},n.id)),h.length===0&&H.length===0&&t.jsx("p",{className:`tf-text-helper ${i.empty}`,children:c.hasCriteria?"No planning matches.":"No planning items yet."})]})]}),t.jsxs("section",{className:`${i.column} ${i.columnWorkstreams} ${f==="workstreams"?i.columnActive:""}`.trim(),"aria-labelledby":"planning-workstreams-heading",children:[t.jsxs("div",{className:i.columnHeader,children:[t.jsxs("div",{className:i.columnHeadingGroup,children:[t.jsx("button",{type:"button",className:`tf-control-icon ${i.responsiveBack}`.trim(),onClick:()=>X("portfolio"),"aria-label":"Back to Portfolio",title:"Back to Portfolio",children:t.jsx(me,{size:15,"aria-hidden":"true"})}),t.jsxs("h2",{ref:P,id:"planning-workstreams-heading",className:`tf-heading-section ${i.paneHeading}`,tabIndex:-1,children:["Workstreams (",d.length,")"]})]}),t.jsx("div",{className:i.headerActions,children:s&&e.createEntity?t.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>g({entityType:"workstream",initiativeId:s.id}),"aria-label":`Create workstream in ${s.title}`,title:"Create workstream",children:t.jsx(ne,{size:15,"aria-hidden":"true"})}):null})]}),t.jsxs("div",{className:i.scrollRegion,children:[s?t.jsxs(t.Fragment,{children:[t.jsx(xe,{item:s,entityType:"initiative",ownerOptions:e.assigneeOptions,onChangeOwner:e.changeOwner?n=>e.changeOwner?.("initiative",s.id,n):void 0,onChangeIdentity:e.changeIdentity,workspaceId:e.currentWorkspaceId,currentActorId:e.currentOwnerId,taskReferences:e.taskReferences,hydrationState:r?void 0:de,onRetryHydration:e.hydrateEntity?()=>{e.hydrateEntity?.("initiative",s.id)}:void 0,onAddContextFile:e.addContextFile,onRemoveContextFile:e.removeContextFile,onUpdateContextCaption:e.updateContextCaption,onUpdate:e.updateEntity?n=>e.updateEntity("initiative",s.id,n):void 0,onArchive:e.archiveEntity?()=>e.archiveEntity("initiative",s.id):void 0,onUnarchive:e.unarchiveEntity?()=>e.unarchiveEntity("initiative",s.id):void 0}),t.jsx(ee,{options:Ce,entityLabel:"workstream",onSelect:n=>ve("workstream",n),disabled:!e.attachWorkstreamToInitiative||u})]}):null,E?.entityType==="workstream"&&E.initiativeId===s?.id?t.jsx(Y,{entityType:"workstream",mode:"create",ownerOptions:e.assigneeOptions,fixedInitiativeId:s.id,onCancel:()=>g(null),onSave:Z}):null,d.map(n=>t.jsx(we,{workstream:n,ownerOption:n.ownerId?O.get(n.ownerId):void 0,ownerOptions:e.assigneeOptions,selected:m===n.id,onSelect:()=>he(n),onChangeOwner:e.changeOwner?o=>e.changeOwner?.("workstream",n.id,o==="unassigned"?"":o):void 0,onChangeIdentity:e.changeIdentity?o=>e.changeIdentity?.("workstream",n.id,o):void 0,referenceAction:s?t.jsx(te,{disabled:!e.assignWorkstreamToInitiative||u,onClick:()=>R({entityType:"workstream",id:n.id,referenceLabel:U(n),title:n.title,parentLabel:s?`${J(s)} ${s.title}`.trim():"its initiative"}),title:`Unlink ${U(n)||n.title} from initiative`,ariaLabel:`Unlink ${U(n)||n.title} from initiative`,children:t.jsx(ie,{size:14,"aria-hidden":"true"})}):void 0},n.id)),s&&S?.pane==="workstreams"?pe:null,d.length===0&&t.jsx("p",{className:`tf-text-helper ${i.empty}`,children:"Select an initiative or standalone workstream."})]})]}),t.jsxs("section",{className:`${i.column} ${i.columnTasks} ${f==="tasks"?i.columnActive:""}`.trim(),"aria-labelledby":"planning-tasks-heading",children:[t.jsx("div",{className:i.columnHeader,children:t.jsxs("div",{className:i.columnHeadingGroup,children:[t.jsx("button",{type:"button",className:`tf-control-icon ${i.responsiveBack}`.trim(),onClick:Ie,"aria-label":s?"Back to Workstreams":"Back to Portfolio",title:s?"Back to Workstreams":"Back to Portfolio",children:t.jsx(me,{size:15,"aria-hidden":"true"})}),t.jsxs("h2",{ref:D,id:"planning-tasks-heading",className:`tf-heading-section ${i.paneHeading}`,tabIndex:-1,children:["Tasks (",G.length,")"]})]})}),t.jsxs("div",{className:i.scrollRegion,children:[r?t.jsxs(t.Fragment,{children:[t.jsx(xe,{item:r,entityType:"workstream",ownerOptions:e.assigneeOptions,onChangeOwner:e.changeOwner?n=>e.changeOwner?.("workstream",r.id,n):void 0,workspaceId:e.currentWorkspaceId,currentActorId:e.currentOwnerId,taskReferences:e.taskReferences,hydrationState:de,onRetryHydration:e.hydrateEntity?()=>{e.hydrateEntity?.("workstream",r.id)}:void 0,onAddContextFile:e.addContextFile,onRemoveContextFile:e.removeContextFile,onUpdateContextCaption:e.updateContextCaption,onUpdate:e.updateEntity?n=>e.updateEntity("workstream",r.id,n):void 0,onArchive:e.archiveEntity?()=>e.archiveEntity("workstream",r.id):void 0,onUnarchive:e.unarchiveEntity?()=>e.unarchiveEntity("workstream",r.id):void 0,referenceAction:r.initiativeId?t.jsx(te,{disabled:!e.assignWorkstreamToInitiative||u,onClick:()=>{R({entityType:"workstream",id:r.id,referenceLabel:U(r),title:r.title,parentLabel:s?`${J(s)} ${s.title}`.trim():"its initiative"})},title:"Unlink workstream from initiative",ariaLabel:"Unlink workstream from initiative",children:t.jsx(ie,{size:14,"aria-hidden":"true"})}):t.jsx(ee,{options:e.linkOptions.initiatives,entityLabel:"initiative",onSelect:Re,disabled:!e.assignWorkstreamToInitiative||u,iconTrigger:!0,triggerTitle:"Link initiative"})}),t.jsx(ee,{options:Ee,entityLabel:"task",onSelect:n=>ve("task",n),disabled:!e.attachTaskToWorkstream||u}),e.setTaskArrangeMode?t.jsx(De,{value:M,onChange:e.setTaskArrangeMode}):null]}):null,t.jsx(Fe,{tasks:G,mode:M,onReorder:r&&e.reorderWorkstreamTasks?n=>e.reorderWorkstreamTasks?.(r.id,Me(ye(r.tasks??[],"execution"),n)):void 0,children:n=>{const o=He(n);return t.jsx(Be,{task:n,assigneeOption:n.assignee?O.get(n.assignee):void 0,assigneeOptions:e.assigneeOptions,showStatusLabel:e.showTaskCardStatusLabel,onOpen:()=>e.openTask(n.id),onAssigneeChange:e.setTaskAssignee?v=>e.setTaskAssignee?.(n.id,v):void 0,onStatusChange:e.setTaskStatus?v=>e.setTaskStatus?.(n.id,v):void 0,referenceInteractive:!1,referenceAction:t.jsx(te,{disabled:!e.assignTaskToWorkstream||u,onClick:v=>{v.stopPropagation(),R({entityType:"task",id:n.id,referenceLabel:o||n.id,title:n.title,parentLabel:r?`${U(r)} ${r.title}`.trim():"its workstream"})},title:`Unlink ${o||n.title} from workstream`,ariaLabel:`Unlink ${o||n.title} from workstream`,children:t.jsx(ie,{size:14,"aria-hidden":"true"})})},n.id)}}),r&&S?.pane==="tasks"?pe:null,!r&&t.jsx("p",{className:`tf-text-helper ${i.empty}`,children:"Select a workstream."}),r&&G.length===0&&t.jsx("p",{className:`tf-text-helper ${i.empty}`,children:"No tasks are linked to this workstream."})]})]})]}),t.jsx(Ue,{item:x,busy:u,theme:e.theme,onCancel:()=>R(null),onConfirm:()=>{Oe()}})]})}export{un as PlanningModule};