@taskforcehq/taskforce 0.3.328 → 0.3.329
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Taskforce.module.css +233 -34
- package/dist/TaskforceCore.js +237 -230
- package/dist/annotatedAttachments/AnnotatedAttachmentSessionStore.js +1 -1
- package/dist/cli.js +34 -0
- package/dist/cliCloudTargetGuard.d.ts +5 -0
- package/dist/cliCloudTargetGuard.js +11 -0
- package/dist/components/features/AnnotatedAttachmentWorkspace.js +24 -8
- package/dist/components/features/TaskSettings.d.ts +12 -1
- package/dist/components/features/TaskSettings.js +147 -40
- package/dist/components/features/agentCapabilities/AgentCapabilitiesPrototype.d.ts +1 -1
- package/dist/components/features/planning/PlanningModule.js +2 -5
- package/dist/components/features/planning/PlanningTaskOrderList.d.ts +1 -1
- package/dist/components/features/planning/PlanningTaskOrderList.js +17 -6
- package/dist/components/features/planning/planningTaskArrangement.d.ts +1 -0
- package/dist/components/features/planning/planningTaskArrangement.js +5 -5
- package/dist/components/features/taskforceAgentEditorModel.js +3 -1
- package/dist/components/task/TaskCard.d.ts +5 -0
- package/dist/components/task/TaskCard.js +65 -10
- package/dist/components/task/TaskImageReviews.js +14 -5
- package/dist/components/task/TaskKanban.d.ts +6 -1
- package/dist/components/task/TaskKanban.js +152 -6
- package/dist/components/task/TaskList.d.ts +5 -0
- package/dist/components/task/TaskList.js +3 -3
- package/dist/components/ui/PasswordInput.d.ts +6 -0
- package/dist/components/ui/PasswordInput.js +11 -0
- package/dist/components/ui/TopNoticeLayer.js +1 -1
- package/dist/components/views/AppShellHeader.js +32 -11
- package/dist/components/views/PlanComparisonPage.js +12 -0
- package/dist/components/views/StandaloneLayout.js +7 -31
- package/dist/components/views/WidgetView.js +3 -3
- package/dist/components/views/panels/PlanningDrawer.js +5 -12
- package/dist/components/views/standalone/modals/AccountSettingsModal.js +26 -17
- package/dist/config/envSchema.js +12 -0
- package/dist/config/localServiceRuntimeContract.d.ts +13 -0
- package/dist/config/localServiceRuntimeContract.js +135 -0
- package/dist/core/AiProfileService.js +46 -8
- package/dist/core/DeletedTaskLifecycleService.d.ts +1 -0
- package/dist/core/DeletedTaskLifecycleService.js +37 -6
- package/dist/core/TaskAttachmentLinksDurableMutationService.d.ts +3 -2
- package/dist/core/TaskAttachmentLinksDurableMutationService.js +33 -9
- package/dist/core/Taskforce.d.ts +62 -2
- package/dist/core/Taskforce.js +635 -32
- package/dist/core/types.d.ts +6 -0
- package/dist/hooks/sync/useDurableLocalOutboxDrain.d.ts +1 -1
- package/dist/hooks/sync/useDurableTaskCreateMutation.js +1 -1
- package/dist/hooks/sync/useDurableTaskMetadataMutation.d.ts +1 -0
- package/dist/hooks/sync/useDurableTaskMetadataMutation.js +1 -0
- package/dist/hooks/sync/useDurableTaskStatusMutation.d.ts +1 -0
- package/dist/hooks/tasks/taskHttpMutation.js +1 -0
- package/dist/hooks/tasks/useCloudTaskSearch.d.ts +12 -0
- package/dist/hooks/tasks/useCloudTaskSearch.js +71 -0
- package/dist/hooks/tasks/useTaskDescriptionImageDraftRecovery.d.ts +16 -0
- package/dist/hooks/tasks/useTaskDescriptionImageDraftRecovery.js +197 -0
- package/dist/hooks/tasks/useTaskEditorNavigation.d.ts +16 -3
- package/dist/hooks/tasks/useTaskEditorNavigation.js +72 -13
- package/dist/hooks/tasks/useTaskFormActions.d.ts +6 -0
- package/dist/hooks/tasks/useTaskFormActions.js +65 -12
- package/dist/hooks/ui/useSettingsModel.d.ts +24 -2
- package/dist/hooks/ui/useSettingsModel.js +13 -2
- package/dist/hooks/ui/useSettingsPersistence.d.ts +12 -1
- package/dist/hooks/ui/useSettingsPersistence.js +74 -47
- package/dist/hooks/useFilterSort.d.ts +7 -3
- package/dist/hooks/useFilterSort.js +15 -5
- package/dist/hooks/useTaskData.d.ts +10 -1
- package/dist/hooks/useTaskData.js +216 -7
- package/dist/hooks/useTaskMutations.d.ts +10 -2
- package/dist/hooks/useTaskMutations.js +223 -43
- package/dist/hooks/useTaskforce.d.ts +37 -9
- package/dist/hooks/useTaskforce.js +349 -39
- package/dist/hooks/useUiNotice.d.ts +4 -0
- package/dist/hooks/useUiNotice.js +4 -0
- package/dist/mcp/adminWorkspaceRegistrar.js +3 -3
- package/dist/mcp/documentAssetRegistrar.js +44 -35
- package/dist/mcp/documentHelpers.d.ts +1 -0
- package/dist/mcp/documentHelpers.js +7 -3
- package/dist/mcp/runtime.js +172 -42
- package/dist/mcp/taskPlanningRegistrar.js +41 -38
- package/dist/mcp/toolCallCompatibility.js +38 -1
- package/dist/mcp/toolCatalog.d.ts +1 -0
- package/dist/migrations/taskSchemaMigrations.js +12 -0
- package/dist/runtime/appGateDefinitions.d.ts +30 -6
- package/dist/runtime/appGateDefinitions.js +6 -6
- package/dist/runtime/appGates.d.ts +12 -13
- package/dist/runtime/appGates.js +29 -13
- package/dist/runtime/nodeAppGates.d.ts +8 -0
- package/dist/runtime/nodeAppGates.js +27 -0
- package/dist/server/cloudCollectionRead.d.ts +1 -1
- package/dist/server/cloudCollectionRead.js +2 -2
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.js +15 -3
- package/dist/server/localServiceLease.d.ts +3 -0
- package/dist/server/localServiceLease.js +9 -1
- package/dist/server/localWorkspaceSyncServerRuntime.js +10 -3
- package/dist/server/rateLimit.d.ts +1 -0
- package/dist/server/rateLimit.js +4 -0
- package/dist/server/realtimeSyncWs.js +36 -12
- package/dist/server/routes/admin.js +1 -0
- package/dist/server/routes/agentRoles.js +3 -2
- package/dist/server/routes/agentSkills.js +3 -2
- package/dist/server/routes/agents.js +118 -16
- package/dist/server/routes/annotatedAttachments.js +3 -2
- package/dist/server/routes/auth.js +3 -1
- package/dist/server/routes/durableTaskHttpRouters.d.ts +9 -2
- package/dist/server/routes/localService.js +2 -0
- package/dist/server/routes/primitives.d.ts +2 -0
- package/dist/server/routes/syncAuxRoutes.js +5 -2
- package/dist/server/routes/syncPullApplyRoutes.js +23 -4
- package/dist/server/routes/syncV3FeedRoutes.js +18 -16
- package/dist/server/routes/syncV3LocalCaptureRoutes.js +28 -2
- package/dist/server/routes/syncV3LocalFeedApplyRoutes.d.ts +1 -0
- package/dist/server/routes/syncV3LocalFeedApplyRoutes.js +26 -0
- package/dist/server/routes/syncV3OperationRoutes.js +10 -0
- package/dist/server/routes/tasks.js +103 -11
- package/dist/server/routes/workspaces.js +43 -1
- package/dist/server/workspaceDeletionAdmission.d.ts +23 -0
- package/dist/server/workspaceDeletionAdmission.js +50 -0
- package/dist/service/localServiceCli.js +16 -0
- package/dist/service/localServiceClientLifecycle.js +36 -10
- package/dist/services/codexAppServerModelGateway.d.ts +112 -0
- package/dist/services/codexAppServerModelGateway.js +438 -0
- package/dist/services/taskforceAgentMcpBridge.d.ts +7 -1
- package/dist/services/taskforceAgentMcpBridge.js +23 -3
- package/dist/shared/taskforceAgentDefinition.js +7 -1
- package/dist/shared/taskforceAgentModels.d.ts +1 -0
- package/dist/shared/taskforceAgentModels.js +30 -1
- package/dist/storage/postgresAdapter.d.ts +20 -3
- package/dist/storage/postgresAdapter.js +106 -14
- package/dist/storage/postgresWorker.js +13 -4
- package/dist/storage/postgresWorkerProtocol.d.ts +29 -0
- package/dist/storage/postgresWorkerProtocol.js +30 -0
- package/dist/sync/cloudSyncApi.d.ts +4 -1
- package/dist/sync/cloudSyncApi.js +7 -2
- package/dist/sync/contentSyncState.d.ts +1 -1
- package/dist/sync/coordinator/localSyncExecutionPermitStore.d.ts +1 -0
- package/dist/sync/coordinator/localSyncExecutionPermitStore.js +7 -1
- package/dist/sync/coordinator/localWorkspaceSyncRunner.js +6 -2
- package/dist/sync/engine/workspaceSyncEngineBrowserGatewayRemoteServices.js +20 -2
- package/dist/sync/engine/workspaceSyncEngineLocalServices.d.ts +4 -0
- package/dist/sync/engine/workspaceSyncEngineLocalServices.js +11 -0
- package/dist/sync/engine/workspaceSyncEngineRemoteServices.d.ts +11 -0
- package/dist/sync/engine/workspaceSyncEngineRemoteServices.js +2 -1
- package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.js +31 -4
- package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.d.ts +3 -1
- package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.js +25 -8
- package/dist/sync/engine/workspaceSyncEngineTransfers.d.ts +1 -1
- package/dist/sync/engine/workspaceSyncEngineTransfers.js +8 -3
- package/dist/sync/syncService.d.ts +2 -0
- package/dist/sync/syncService.js +4 -1
- package/dist/sync/v3/combinedFeedCapability.js +4 -0
- package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.d.ts +2 -0
- package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.js +11 -1
- package/dist/sync/v3/durableTaskChecklistMutationRouter.d.ts +2 -0
- package/dist/sync/v3/durableTaskChecklistMutationRouter.js +4 -0
- package/dist/sync/v3/durableTaskHttpBulkMutationRouter.d.ts +1 -0
- package/dist/sync/v3/durableTaskHttpBulkMutationRouter.js +30 -8
- package/dist/sync/v3/durableTaskHttpRootMutationRouter.d.ts +5 -3
- package/dist/sync/v3/durableTaskHttpRootMutationRouter.js +27 -2
- package/dist/sync/v3/localTaskAttachmentLinksOutboxService.d.ts +2 -0
- package/dist/sync/v3/localTaskAttachmentLinksOutboxService.js +47 -7
- package/dist/sync/v3/localTaskCreateOutboxService.js +15 -6
- package/dist/sync/v3/localTaskMetadataClient.d.ts +1 -0
- package/dist/sync/v3/localTaskMetadataClient.js +1 -0
- package/dist/sync/v3/localTaskMetadataOutboxHandler.js +5 -1
- package/dist/sync/v3/localTaskMetadataOutboxService.d.ts +2 -0
- package/dist/sync/v3/localTaskMetadataOutboxService.js +7 -0
- package/dist/sync/v3/localTaskRestoreOutboxService.js +14 -6
- package/dist/sync/v3/localTaskStatusClient.d.ts +1 -0
- package/dist/sync/v3/localTaskStatusClient.js +6 -1
- package/dist/sync/v3/localTaskStatusOutboxService.d.ts +2 -0
- package/dist/sync/v3/localTaskStatusOutboxService.js +54 -13
- package/dist/sync/v3/syncDurabilityStore.d.ts +7 -0
- package/dist/sync/v3/syncDurabilityStore.js +31 -11
- package/dist/sync/v3/taskAttachmentLinksMutationService.d.ts +6 -4
- package/dist/sync/v3/taskAttachmentLinksMutationService.js +19 -10
- package/dist/sync/v3/taskChecklistMutationService.d.ts +4 -2
- package/dist/sync/v3/taskChecklistMutationService.js +4 -0
- package/dist/sync/v3/taskCreateMutationService.d.ts +2 -2
- package/dist/sync/v3/taskCreateMutationService.js +7 -4
- package/dist/sync/v3/taskMetadataMutationService.d.ts +3 -0
- package/dist/sync/v3/taskMetadataMutationService.js +4 -0
- package/dist/sync/v3/taskRestoreMutationService.d.ts +2 -2
- package/dist/sync/v3/taskRestoreMutationService.js +7 -4
- package/dist/sync/v3/taskStatusMutationService.d.ts +2 -0
- package/dist/sync/v3/taskStatusMutationService.js +4 -0
- package/dist/sync/v3/workflowAssignmentSync.d.ts +1 -0
- package/dist/sync/v3/workflowAssignmentSync.js +3 -0
- package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.d.ts +1 -1
- package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.js +13 -3
- package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.d.ts +11 -0
- package/dist/sync/v3/workspaceSyncV3AttachmentApplyObligationStore.js +27 -10
- package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.d.ts +2 -1
- package/dist/sync/v3/workspaceSyncV3AttachmentAssetHydration.js +52 -10
- package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.js +9 -1
- package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.js +8 -3
- package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.js +51 -10
- package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.d.ts +7 -0
- package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.js +30 -18
- package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.d.ts +9 -4
- package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.js +98 -47
- package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.d.ts +10 -0
- package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.js +58 -21
- package/dist/sync/v3/workspaceSyncV3CombinedWireContract.d.ts +3 -1
- package/dist/sync/v3/workspaceSyncV3CombinedWireContract.js +18 -0
- package/dist/sync/v3/workspaceSyncV3CoverageRegistry.js +6 -0
- package/dist/sync/v3/workspaceSyncV3FeedProfile.d.ts +1 -1
- package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.d.ts +1 -0
- package/dist/sync/v3/workspaceSyncV3LegacyBoundaryAttestation.js +23 -10
- package/dist/sync/v3/workspaceSyncV3NestedTaskApply.d.ts +3 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskApply.js +64 -13
- package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.d.ts +9 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskCodecs.js +26 -0
- package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.d.ts +15 -5
- package/dist/sync/v3/workspaceSyncV3NestedTaskProjection.js +50 -14
- package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.d.ts +2 -1
- package/dist/sync/v3/workspaceSyncV3NestedTaskRepairSnapshot.js +11 -3
- package/dist/sync/v3/workspaceSyncV3OperationProtocol.d.ts +2 -0
- package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.d.ts +2 -0
- package/dist/sync/v3/workspaceSyncV3OperatorDiagnostics.js +19 -7
- package/dist/sync/v3/workspaceSyncV3TaskCommentAudit.js +9 -2
- package/dist/sync/v3/workspaceSyncV3TaskCoverCoverage.d.ts +7 -0
- package/dist/sync/v3/workspaceSyncV3TaskCoverCoverage.js +37 -0
- package/dist/sync/v3/workspaceSyncV3TaskCoverWireContract.d.ts +6 -0
- package/dist/sync/v3/workspaceSyncV3TaskCoverWireContract.js +9 -0
- package/dist/sync/workspacePullFeed.js +2 -1
- package/dist/sync/workspaceRepair.d.ts +3 -0
- package/dist/sync/workspaceRepair.js +67 -6
- package/dist/types.d.ts +47 -1
- package/dist/types.js +6 -0
- package/dist/ui/assets/{AiIdentityRosterCard-MZs7lVED.js → AiIdentityRosterCard-BZM4aQnM.js} +1 -1
- package/dist/ui/assets/AiProfilesModule-BbAEWtHH.js +1 -0
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-B68Wg-RV.js +3 -0
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-TzYu7pkG.css +1 -0
- package/dist/ui/assets/{AssetTraySortControl-Kf1pelSy.js → AssetTraySortControl-C8Rztyal.js} +1 -1
- package/dist/ui/assets/{ContextAttachmentManager-B8boOs6Q.js → ContextAttachmentManager-Cj3c7X9y.js} +2 -2
- package/dist/ui/assets/{DocumentWorkspace-DXH4XUsB.js → DocumentWorkspace-B5uvzems.js} +1 -1
- package/dist/ui/assets/{EntityActivityTimeline-BtSTq0ON.js → EntityActivityTimeline-BVFvCB5R.js} +1 -1
- package/dist/ui/assets/PlanningModule-B5DWQOGz.js +1 -0
- package/dist/ui/assets/PlansPage-AY4cGWco.js +1 -0
- package/dist/ui/assets/TaskContextUpload-DZxTVesW.js +1 -0
- package/dist/ui/assets/TaskSettings-BeWAuyZj.js +12 -0
- package/dist/ui/assets/{TaskforceAgentsModule-BazdUwxZ.js → TaskforceAgentsModule-BifCYtjR.js} +6 -6
- package/dist/ui/assets/{WorkflowManagerModule-DWFspC-o.js → WorkflowManagerModule-DEr5di_r.js} +1 -1
- package/dist/ui/assets/index-I5zhdtgt.js +7 -0
- package/dist/ui/assets/index-VRFsx3wz.css +1 -0
- package/dist/ui/assets/{vendor-icons-BkFLXavV.js → vendor-icons-D9Lpw-j4.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/utils/taskActivity.d.ts +3 -2
- package/dist/utils/taskActivity.js +19 -2
- package/dist/utils/taskEditorReconciliation.d.ts +40 -0
- package/dist/utils/taskEditorReconciliation.js +217 -0
- package/dist/utils/taskNormalization.d.ts +1 -0
- package/dist/utils/taskNormalization.js +39 -0
- package/dist/utils/taskSearch.js +2 -2
- package/dist/utils/uiNotice.d.ts +4 -0
- package/package.json +16 -4
- package/dist/ui/assets/AiProfilesModule-C3i0LOxe.js +0 -1
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-CBRZ8rca.css +0 -1
- package/dist/ui/assets/AnnotatedAttachmentWorkspace-DVZk5Tln.js +0 -3
- package/dist/ui/assets/PlanningModule-BPVyEa-f.js +0 -1
- package/dist/ui/assets/PlansPage-ChqgxALc.js +0 -1
- package/dist/ui/assets/TaskContextUpload-CB3ol0sN.js +0 -1
- package/dist/ui/assets/TaskSettings-g4ECKNOz.js +0 -12
- package/dist/ui/assets/index-BUplSsv_.js +0 -7
- package/dist/ui/assets/index-gz2EXuoK.css +0 -1
package/dist/ui/assets/{WorkflowManagerModule-DWFspC-o.js → WorkflowManagerModule-DEr5di_r.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as n,j as e}from"./vendor-react-CKJs5o3c.js";import{a1 as ze,a2 as Me,a3 as Oe,a4 as He,a5 as Le,a6 as Fe,M as Be,t as $,a7 as Ue,a8 as Ge,a9 as Je,T as Ye,aa as _e,ab as Ze}from"./index-BUplSsv_.js";import{w as J,az as le,ai as Qe,t as pe,Z as je,bj as Xe,bk as et,a6 as tt,bl as st,bm as nt,a7 as rt,a as at,x as lt,v as it,A as ot,r as ct}from"./vendor-icons-BkFLXavV.js";import"./vendor-markdown-_lhNCyq-.js";import"./vendor-dnd-CJ-AjP-Y.js";import"./vendor-router-AqJMU8Lz.js";const dt="_root_1bn9e_1",ut="_main_1bn9e_13",ft="_trayOpen_1bn9e_21",mt="_libraryHeader_1bn9e_25",pt="_libraryTitle_1bn9e_34",bt="_libraryContent_1bn9e_41",ht="_libraryList_1bn9e_48",wt="_libraryItem_1bn9e_54",xt="_libraryItemSelected_1bn9e_75",yt="_libraryItemCopy_1bn9e_80",gt="_libraryItemName_1bn9e_84",_t="_libraryItemMeta_1bn9e_94",jt="_libraryBadges_1bn9e_101",Nt="_statusRow_1bn9e_102",vt="_content_1bn9e_109",kt="_visuallyHidden_1bn9e_115",St="_pageHeader_1bn9e_127",Ct="_pageHeading_1bn9e_136",Dt="_detailHeader_1bn9e_144",Et="_metadataEditor_1bn9e_148",Wt="_titleRow_1bn9e_154",It="_editor_1bn9e_169",Tt="_stickyToolbar_1bn9e_173",Kt="_toolbarGroup_1bn9e_188",Rt="_versionSelect_1bn9e_194",$t="_description_1bn9e_211",qt="_metrics_1bn9e_217",Vt="_metric_1bn9e_217",At="_section_1bn9e_249",Pt="_sectionHeader_1bn9e_253",zt="_stepToolbar_1bn9e_254",Mt="_stepActions_1bn9e_255",Ot="_stepList_1bn9e_266",Ht="_stepEditor_1bn9e_273",Lt="_stepToolbarExpanded_1bn9e_285",Ft="_stepExpandButton_1bn9e_289",Bt="_stepSummary_1bn9e_311",Ut="_stepFields_1bn9e_328",Gt="_fullField_1bn9e_335",Jt="_stepToggles_1bn9e_337",Yt="_requiredToggle_1bn9e_345",Zt="_stepsEmpty_1bn9e_356",Qt="_stepNumber_1bn9e_376",Xt="_emptyState_1bn9e_382",es="_loadingState_1bn9e_383",ts="_emptyStateInner_1bn9e_391",ss="_errorBanner_1bn9e_399",ns="_errorMessage_1bn9e_407",s={root:dt,main:ut,trayOpen:ft,libraryHeader:mt,libraryTitle:pt,libraryContent:bt,libraryList:ht,libraryItem:wt,libraryItemSelected:xt,libraryItemCopy:yt,libraryItemName:gt,libraryItemMeta:_t,libraryBadges:jt,statusRow:Nt,content:vt,visuallyHidden:kt,pageHeader:St,pageHeading:Ct,detailHeader:Dt,metadataEditor:Et,titleRow:Wt,editor:It,stickyToolbar:Tt,toolbarGroup:Kt,versionSelect:Rt,description:$t,metrics:qt,metric:Vt,section:At,sectionHeader:Pt,stepToolbar:zt,stepActions:Mt,stepList:Ot,stepEditor:Ht,stepToolbarExpanded:Lt,stepExpandButton:Ft,stepSummary:Bt,stepFields:Ut,fullField:Gt,stepToggles:Jt,requiredToggle:Yt,stepsEmpty:Zt,stepNumber:Qt,emptyState:Xt,loadingState:es,emptyStateInner:ts,errorBanner:ss,errorMessage:ns};function rs(c){const[_,k]=n.useState([]),[u,w]=n.useState(""),[E,g]=n.useState(null),[q,i]=n.useState(!0),[O,H]=n.useState(!1),[Y,L]=n.useState(!1),[Z,F]=n.useState(!1),[B,Q]=n.useState(!1),[ie,X]=n.useState(!1),[oe,ce]=n.useState(0),[de,x]=n.useState(null),m=n.useRef(0),p=n.useRef(c);p.current=c;const y=n.useCallback(async()=>{const r=++m.current;i(!0),x(null);try{const o=await ze();if(r!==m.current)return;k(o),w(f=>f&&o.some(({template:C})=>C.id===f)?f:o[0]?.template.id||"")}catch(o){if(r!==m.current)return;x(String(o?.message||o||"Unable to load workflows."))}finally{r===m.current&&i(!1)}},[c]);n.useEffect(()=>{k([]),w(""),g(null),y()},[y,c]),n.useEffect(()=>{let r=!1;if(!u){g(null),H(!1);return}return H(!0),x(null),Me(u).then(o=>{r||g(o)}).catch(o=>{r||(g(null),x(String(o?.message||o||"Unable to load workflow.")))}).finally(()=>{r||H(!1)}),()=>{r=!0}},[oe,u]);const S=n.useCallback(()=>{if(u&&!E){ce(r=>r+1);return}y()},[y,E,u]),j=n.useCallback(async r=>{const o=c;L(!0),x(null);try{const f=await Oe(r);return p.current!==o||(g(f),w(f.template.id),await y(),p.current===o&&w(f.template.id)),!0}catch(f){return p.current!==o||x(String(f?.message||f||"Unable to create workflow.")),!1}finally{L(!1)}},[y,c]),V=n.useCallback(async r=>{if(!u)return!1;const o=c,f=u;F(!0),x(null);try{const C=await He(f,{name:r.name,description:r.description,steps:r.steps});return p.current!==o||(g(C),await y(),p.current===o&&w(f)),!0}catch(C){return p.current!==o||x(String(C?.message||C||"Unable to save workflow draft.")),!1}finally{F(!1)}},[y,u,c]),T=n.useCallback(async()=>{if(!u)return!1;const r=c,o=u;Q(!0),x(null);try{const f=await Le(o);return p.current!==r||(g(f),await y(),p.current===r&&w(o)),!0}catch(f){return p.current!==r||x(String(f?.message||f||"Unable to publish workflow.")),!1}finally{Q(!1)}},[y,u,c]),A=n.useCallback(async()=>{if(!u)return!1;const r=c,o=u;X(!0),x(null);try{const f=await Fe(o);return p.current!==r||(g(f),await y(),p.current===r&&w(o)),!0}catch(f){return p.current!==r||x(String(f?.message||f||"Unable to create workflow draft.")),!1}finally{X(!1)}},[y,u,c]);return{workflows:_,selectedWorkflowId:u,selectedWorkflow:E,loadingLibrary:q,loadingDetails:O,creatingWorkflow:Y,savingWorkflow:Z,publishingWorkflow:B,creatingDraft:ie,error:de,setSelectedWorkflowId:w,refreshLibrary:y,retry:S,createWorkflow:j,saveDraft:V,publishDraft:T,createNextDraft:A,clearError:()=>x(null)}}const as="_title_lvjgs_1",ls="_message_lvjgs_7",is="_actions_lvjgs_13",be={title:as,message:ls,actions:is};function os({isOpen:c,workflowName:_,versionNumber:k,busy:u,onCancel:w,onPublish:E,theme:g}){return e.jsx(Be,{isOpen:c,onClose:w,title:e.jsxs("span",{className:be.title,children:[e.jsx(le,{size:18})," Publish Workflow"]}),size:"sm",closeOnOverlayClick:!1,closeDisabled:u,theme:g,footer:e.jsxs("div",{className:be.actions,children:[e.jsx("button",{type:"button",className:"tf-button-secondary",onClick:w,disabled:u,"data-modal-initial-focus":!0,children:"Cancel"}),e.jsxs("button",{type:"button",className:"tf-button-primary",onClick:E,disabled:u,children:[u?e.jsx(J,{size:15,className:$.spinner}):e.jsx(le,{size:15}),"Publish Version ",k]})]}),children:e.jsxs("p",{className:be.message,children:["Publish ",e.jsx("strong",{children:_})," as Version ",k,"? Published versions are immutable. Future changes require a new draft."]})})}const re="draft";function cs(c){return c.draftVersionId&&c.latestPublishedVersion?.versionNumber?`Version ${c.latestPublishedVersion.versionNumber} published`:c.draftVersionId?"Unpublished":c.latestPublishedVersion?.versionNumber?`Version ${c.latestPublishedVersion.versionNumber}`:"No version"}function ds(c){if(!c)return"Not published";const _=new Date(c);return Number.isNaN(_.getTime())?"Not published":_.toLocaleDateString()}function ae(c,_,k){return JSON.stringify({name:c,description:_,steps:k.map(({clientKey:u,...w})=>w)})}function ws({workspaceId:c,libraryTrayOpen:_=!0,onCloseLibraryTray:k,assigneeOptions:u=[],theme:w,onUnsavedChangesChange:E}){const{workflows:g,selectedWorkflowId:q,selectedWorkflow:i,loadingLibrary:O,loadingDetails:H,creatingWorkflow:Y,savingWorkflow:L,publishingWorkflow:Z,creatingDraft:F,error:B,setSelectedWorkflowId:Q,retry:ie,createWorkflow:X,saveDraft:oe,publishDraft:ce,createNextDraft:de,clearError:x}=rs(c),[m,p]=n.useState(!1),[y,S]=n.useState(!1),[j,V]=n.useState(""),[T,A]=n.useState(""),[r,o]=n.useState([]),[f,C]=n.useState(""),[P,ee]=n.useState(!1),[te,U]=n.useState(""),[ue,W]=n.useState(new Set),[he,fe]=n.useState(null),[Ne,z]=n.useState(!1),me=n.useRef(null),se=n.useRef(new Map),K=n.useRef(null),D=n.useMemo(()=>i?te===re&&i.draft?i.draft:i.publishedVersions.find(({version:a})=>a.id===te)||i.draft||i.publishedVersions[0]||null:null,[te,i]),we=D?.version.status==="draft"?re:D?.version.id||"",ve=n.useMemo(()=>ae(j,T,r),[T,j,r]),N=m||D?.version.status==="draft",I=N&&ve!==f,b=Y||L||Z||F,ke=(i?.publishedVersions[0]?.version.versionNumber||0)+1,xe=n.useMemo(()=>u.filter(({kind:t,archivedAt:a})=>t!=="unassigned"&&!a),[u]),Se=n.useMemo(()=>Ue(xe),[xe]);n.useEffect(()=>{p(!1),S(!1),U(""),W(new Set),z(!1),K.current=null},[c]),n.useEffect(()=>{if(!i||m||!D)return;const t=D.version.name||i.template.name,a=D.version.description??i.template.description??"",d=D.steps.map(h=>({...h,clientKey:h.id}));V(t),A(a),o(d),C(ae(t,a,d));const l=K.current;S(!1),l?(W(new Set(d.filter((h,v)=>l.has(v)).map(({clientKey:h})=>h))),K.current=null):W(new Set),ee(!1)},[m,D,i]),n.useEffect(()=>{if(!I)return;const t=a=>{a.preventDefault(),a.returnValue=""};return window.addEventListener("beforeunload",t),()=>window.removeEventListener("beforeunload",t)},[I]),n.useEffect(()=>(E?.(I),()=>E?.(!1)),[I,E]);const ne=t=>{if(!I){t();return}fe(()=>t)},Ce=()=>{const t=he;fe(null),t?.()},ye=()=>{ne(()=>{x();const t=[];p(!0),S(!0),V(""),A(""),o(t),C(ae("","",t)),W(new Set),ee(!1),window.setTimeout(()=>me.current?.focus(),0)})},De=()=>{ne(()=>{if(x(),p(!1),S(!1),i){const t=i.draft?.version.name||i.template.name,a=i.draft?.version.description??i.publishedVersions[0]?.version.description??i.template.description??"",d=(i.draft?.steps||i.publishedVersions[0]?.steps||[]).map(l=>({...l,clientKey:l.id}));V(t),A(a),o(d),C(ae(t,a,d))}})},Ee=()=>{const t=`new-step-${Date.now()}-${r.length}`;o(a=>[...a,{id:t,clientKey:t,workflowVersionId:i?.draft?.version.id||"",position:a.length,name:"",instructions:"",ownerType:null,ownerId:null,expectedArtifact:null,requiresCommentEvidence:!1,isRequired:!0}]),W(a=>new Set(a).add(t)),window.setTimeout(()=>se.current.get(t)?.focus(),0)},M=(t,a)=>{o(d=>d.map(l=>l.clientKey===t?{...l,...a}:l))},ge=(t,a)=>{const d=t+a;d<0||d>=r.length||o(l=>{const h=[...l];return[h[t],h[d]]=[h[d],h[t]],h.map((v,R)=>({...v,position:R}))})},We=()=>r.map(t=>{const{clientKey:a,id:d,workflowVersionId:l,position:h,...v}=t;return{...v,name:t.name.trim(),instructions:t.instructions,ownerType:t.ownerType??null,ownerId:t.ownerId??null,expectedArtifact:t.expectedArtifact??null,requiresCommentEvidence:t.requiresCommentEvidence===!0,isRequired:t.isRequired}}),Ie=async()=>{if(ee(!0),!j.trim()){S(!0),window.setTimeout(()=>me.current?.focus(),0);return}const t=r.find(l=>!l.name.trim());if(t){W(l=>new Set(l).add(t.clientKey)),window.setTimeout(()=>se.current.get(t.clientKey)?.focus(),0);return}const a={name:j.trim(),description:T.trim(),steps:We()};K.current=new Set(r.map((l,h)=>ue.has(l.clientKey)?h:-1).filter(l=>l>=0)),(m?await X(a):await oe(a))?(p(!1),ee(!1)):K.current=null},Te=t=>{W(a=>{const d=new Set(a);return d.has(t)?d.delete(t):d.add(t),d})},Ke=t=>{t!==we&&ne(()=>{S(!1),U(t)})},Re=async()=>{K.current=new Set(r.map((a,d)=>ue.has(a.clientKey)?d:-1).filter(a=>a>=0)),await ce()||(K.current=null),z(!1)},$e=async()=>{const t=te;U(re),await de()||U(t)},qe=t=>{t===q&&!m||ne(()=>{p(!1),S(!1),U(""),z(!1),Q(t)})},Ve=e.jsxs("aside",{className:`${$.docTrayPanel} ${_?$.docTrayPanelOpen:""}`.trim(),"aria-hidden":!_,children:[e.jsxs("div",{className:s.libraryHeader,children:[e.jsxs("span",{className:`${s.libraryTitle} tf-label-micro`,children:[e.jsx(le,{size:14})," Workflow Library"]}),O?e.jsx(J,{size:14,className:$.spinner}):null,k?e.jsx("button",{type:"button",className:"tf-control-icon",onClick:k,title:"Collapse workflow library","aria-label":"Collapse workflow library",children:e.jsx(Qe,{size:16})}):null]}),e.jsx("div",{className:`${s.libraryContent} tf-scrollbar tf-tray-scroll-viewport`,children:g.length>0?e.jsx("div",{className:s.libraryList,children:g.map(t=>e.jsxs("button",{type:"button",className:`${s.libraryItem} ${t.template.id===q&&!m?s.libraryItemSelected:""}`.trim(),disabled:b,onClick:()=>qe(t.template.id),"aria-pressed":t.template.id===q&&!m,children:[e.jsxs("span",{className:s.libraryItemCopy,children:[e.jsx("span",{className:s.libraryItemName,children:t.template.name}),e.jsx("span",{className:s.libraryItemMeta,children:cs(t)})]}),e.jsxs("span",{className:s.libraryBadges,children:[t.draftVersionId?e.jsx("span",{className:"tf-chip-warning",children:"Draft"}):null,t.latestPublishedVersion?e.jsx("span",{className:"tf-chip-success",children:"Published"}):null]})]},t.template.id))}):O?null:e.jsx("p",{className:"tf-text-helper",children:"No workflows configured yet."})})]}),Ae=m||!!i;return e.jsxs("div",{className:`${s.root} ${_?s.trayOpen:""}`.trim(),children:[Ve,e.jsx("main",{className:`${s.main} tf-scrollbar`,children:e.jsxs("div",{className:s.content,children:[e.jsxs("header",{className:s.pageHeader,children:[e.jsxs("div",{className:s.pageHeading,children:[e.jsx("h2",{className:"tf-heading-section",children:"Workflow Manager"}),e.jsx("p",{className:"tf-text-helper",children:"Design reusable workflows for Taskforce agents."})]}),e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:ye,disabled:b,children:[e.jsx(pe,{size:15})," New Workflow"]})]}),B?e.jsxs("div",{className:`${s.errorBanner} tf-surface-inset tf-text-error`,role:"alert",children:[e.jsxs("span",{className:s.errorMessage,children:[e.jsx(je,{size:14})," ",B]}),e.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",onClick:ie,children:"Retry"})]}):null,H||O&&!i&&!m?e.jsx("div",{className:s.loadingState,"aria-live":"polite",children:e.jsx(J,{size:20,className:$.spinner})}):B&&q&&!i&&!m?e.jsx("div",{className:s.emptyState,children:e.jsxs("div",{className:s.emptyStateInner,children:[e.jsx(je,{size:24}),e.jsx("h3",{className:"tf-heading-card",children:"Workflow details unavailable"}),e.jsx("p",{className:"tf-text-helper",children:"Retry the request to load this workflow."})]})}):Ae?e.jsxs("div",{className:s.editor,children:[e.jsxs("div",{className:s.stickyToolbar,role:"toolbar","aria-label":N?"Workflow draft actions":"Workflow version actions",children:[N?e.jsxs("div",{className:s.toolbarGroup,children:[e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:Ee,disabled:b,children:[e.jsx(pe,{size:14})," Add Step"]}),e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>W(new Set(r.map(({clientKey:t})=>t))),disabled:r.length===0,title:"Expand all steps","aria-label":"Expand all steps",children:e.jsx(Xe,{size:15})}),e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>W(new Set),disabled:r.length===0,title:"Collapse all steps","aria-label":"Collapse all steps",children:e.jsx(et,{size:15})})]}):e.jsx("span",{}),e.jsxs("div",{className:s.toolbarGroup,children:[!m&&i?e.jsxs("select",{className:`${s.versionSelect} tf-field-shell`,"aria-label":"Workflow version",value:we,onChange:t=>Ke(t.target.value),disabled:b,children:[i.draft?e.jsx("option",{value:re,children:"Draft"}):null,i.publishedVersions.map(({version:t})=>e.jsxs("option",{value:t.id,children:["Version ",t.versionNumber]},t.id))]}):null,m?e.jsx("span",{className:"tf-chip-warning",children:"Draft"}):null,m?e.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",onClick:De,disabled:b,children:"Cancel"}):null,N?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:s.visuallyHidden,role:"status","aria-live":"polite",children:I?"Workflow has unsaved changes.":"Workflow draft is saved."}),e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:()=>{Ie()},disabled:!I||b,children:[Y||L?e.jsx(J,{size:15,className:$.spinner}):e.jsx(tt,{size:15})," Save Draft"]}),m?null:e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>z(!0),disabled:I||r.length===0||b,title:I?"Save the draft before publishing.":r.length===0?"Add at least one step before publishing.":"Publish this workflow version",children:[e.jsx(st,{size:15})," Publish"]})]}):i?.draft?null:e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:()=>{$e()},disabled:b,children:[F?e.jsx(J,{size:15,className:$.spinner}):e.jsx(nt,{size:15})," Create New Draft"]})]})]}),e.jsx("div",{className:s.detailHeader,children:e.jsx("div",{className:s.metadataEditor,children:y?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:"workflow-draft-name",children:"Workflow name"}),e.jsx("input",{id:"workflow-draft-name",ref:me,className:"tf-field-shell",value:j,onChange:t=>V(t.target.value),"aria-invalid":P&&!j.trim(),"aria-describedby":P&&!j.trim()?"workflow-draft-name-error":void 0,readOnly:b}),P&&!j.trim()?e.jsx("span",{id:"workflow-draft-name-error",className:"tf-text-error",children:"Workflow name is required."}):null]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:"workflow-draft-description",children:"Description"}),e.jsx("textarea",{id:"workflow-draft-description",className:"tf-field-shell",rows:3,value:T,onChange:t=>A(t.target.value),readOnly:b})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:s.titleRow,children:[e.jsx("h3",{className:"tf-heading-card",children:j||"Untitled workflow"}),e.jsx("div",{className:s.statusRow,children:N&&!m?e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>S(!0),title:"Edit workflow details","aria-label":"Edit workflow details",children:e.jsx(rt,{size:14})}):null})]}),T?e.jsx("p",{className:`${s.description} tf-text-body`,children:T}):null]})})}),!m&&i?e.jsxs("div",{className:s.metrics,children:[e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Current version"}),e.jsx("strong",{children:D?.version.status==="draft"?"Draft":`Version ${D?.version.versionNumber||1}`})]}),e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Steps"}),e.jsx("strong",{children:r.length})]}),e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Last published"}),e.jsx("strong",{children:ds(i.publishedVersions[0]?.version.publishedAt)})]})]}):null,e.jsxs("section",{className:s.section,children:[e.jsx("div",{className:s.sectionHeader,children:e.jsx("h4",{className:"tf-heading-card",children:"Workflow Steps"})}),r.length>0?e.jsx("div",{className:s.stepList,children:r.map((t,a)=>{const d=ue.has(t.clientKey);return e.jsxs("div",{className:s.stepEditor,children:[e.jsxs("div",{className:`${s.stepToolbar} ${d?s.stepToolbarExpanded:""}`.trim(),children:[e.jsxs("button",{type:"button",className:s.stepExpandButton,onClick:()=>Te(t.clientKey),"aria-expanded":d,"aria-controls":`workflow-step-fields-${t.clientKey}`,children:[d?e.jsx(at,{size:15}):e.jsx(lt,{size:15}),e.jsx("span",{className:s.stepNumber,children:a+1}),e.jsx("strong",{children:t.name.trim()||"Untitled step"})]}),e.jsxs("div",{className:s.stepSummary,children:[e.jsx("span",{children:Ge(t.ownerId,u)}),e.jsx("span",{className:t.isRequired?"tf-chip-neutral":"tf-chip-warning",children:t.isRequired?"Required":"Optional"})]}),N?e.jsxs("div",{className:s.stepActions,children:[e.jsx("button",{type:"button",className:"tf-control-icon",title:"Move step up","aria-label":`Move step ${a+1} up`,onClick:()=>ge(a,-1),disabled:b||a===0,children:e.jsx(it,{size:14})}),e.jsx("button",{type:"button",className:"tf-control-icon",title:"Move step down","aria-label":`Move step ${a+1} down`,onClick:()=>ge(a,1),disabled:b||a===r.length-1,children:e.jsx(ot,{size:14})}),e.jsx("button",{type:"button",className:"tf-control-icon",title:"Remove step","aria-label":`Remove step ${a+1}`,onClick:()=>o(l=>l.filter(({clientKey:h})=>h!==t.clientKey)),disabled:b,children:e.jsx(ct,{size:14})})]}):null]}),d?e.jsxs("div",{id:`workflow-step-fields-${t.clientKey}`,className:s.stepFields,children:[e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-name-${t.clientKey}`,children:"Step name"}),e.jsx("input",{id:`workflow-step-name-${t.clientKey}`,ref:l=>{l?se.current.set(t.clientKey,l):se.current.delete(t.clientKey)},className:"tf-field-shell",value:t.name,onChange:l=>M(t.clientKey,{name:l.target.value}),"aria-invalid":P&&!t.name.trim(),"aria-describedby":P&&!t.name.trim()?`workflow-step-name-error-${t.clientKey}`:void 0,disabled:!N,readOnly:b}),P&&!t.name.trim()?e.jsx("span",{id:`workflow-step-name-error-${t.clientKey}`,className:"tf-text-error",children:"Step name is required."}):null]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",id:`workflow-step-owner-label-${t.clientKey}`,children:"Owner"}),(()=>{const l=Je(Se,t.ownerId),h=l.find(({value:v})=>String(v)===String(t.ownerId||"unassigned"))||l[0];return e.jsx(Ye,{value:t.ownerId||"unassigned",options:l,disabled:!N||b,ariaLabelledBy:`workflow-step-owner-label-${t.clientKey}`,portalPanel:!0,panelMinWidth:280,panelAlign:"start",searchable:!0,searchPlaceholder:"Search owners...",noResultsText:"No owners found.",triggerContent:h?e.jsx(_e,{option:h}):void 0,renderOptionContent:v=>{const R=l.find(({value:G})=>String(G)===String(v.value));return R?e.jsx(_e,{option:R}):v.label},onChange:v=>{const R=String(v),G=l.find(({value:Pe})=>String(Pe)===R);M(t.clientKey,{ownerId:G?.kind==="unassigned"?null:R,ownerType:G?.kind==="agent"?"agent":G?.kind==="member"?"user":null})}})})()]}),e.jsxs("div",{className:`${s.fullField} tf-field-stack`,children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-instructions-${t.clientKey}`,children:"Instructions"}),e.jsx("textarea",{id:`workflow-step-instructions-${t.clientKey}`,className:"tf-field-shell",rows:4,value:t.instructions,onChange:l=>M(t.clientKey,{instructions:l.target.value}),placeholder:"Describe the work to complete in this step.",disabled:!N,readOnly:b})]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-artifact-${t.clientKey}`,children:"Output label"}),e.jsx("input",{id:`workflow-step-artifact-${t.clientKey}`,className:"tf-field-shell",value:t.expectedArtifact||"",onChange:l=>M(t.clientKey,{expectedArtifact:l.target.value||null}),placeholder:"Optional output description",disabled:!N,readOnly:b})]}),e.jsxs("div",{className:s.stepToggles,children:[e.jsxs("label",{className:s.requiredToggle,title:"Requires the step owner to add a task comment before completing this step.",children:[e.jsx("input",{type:"checkbox",checked:t.requiresCommentEvidence===!0,onChange:l=>M(t.clientKey,{requiresCommentEvidence:l.target.checked}),disabled:!N||b}),"Require task comment"]}),e.jsxs("label",{className:s.requiredToggle,title:"Marks this step as mandatory when execution policy is enforced.",children:[e.jsx("input",{type:"checkbox",checked:t.isRequired,onChange:l=>M(t.clientKey,{isRequired:l.target.checked}),disabled:!N||b}),"Required step"]})]})]}):null]},t.clientKey)})}):e.jsx("div",{className:s.stepsEmpty,children:e.jsx("p",{className:"tf-text-helper",children:"No steps have been added yet."})})]})]}):e.jsx("div",{className:s.emptyState,children:e.jsxs("div",{className:s.emptyStateInner,children:[e.jsx(le,{size:30}),e.jsx("h3",{className:"tf-heading-card",children:"No workflows yet"}),e.jsx("p",{className:"tf-text-helper",children:"Create a workflow to begin defining a reusable process."}),e.jsxs("button",{type:"button",className:"tf-button-primary",onClick:ye,children:[e.jsx(pe,{size:15})," New Workflow"]})]})})]})}),e.jsx(Ze,{isOpen:!!he,onKeepEditing:()=>fe(null),onDiscard:Ce,theme:w}),e.jsx(os,{isOpen:Ne,workflowName:j,versionNumber:ke,busy:Z,onCancel:()=>z(!1),onPublish:()=>{Re()},theme:w})]})}export{ws as WorkflowManagerModule};
|
|
1
|
+
import{r as n,j as e}from"./vendor-react-CKJs5o3c.js";import{a2 as ze,a3 as Me,a4 as Oe,a5 as He,a6 as Le,a7 as Fe,M as Be,t as $,a8 as Ue,a9 as Ge,aa as Je,T as Ye,ab as _e,ac as Ze}from"./index-I5zhdtgt.js";import{w as J,az as le,ak as Qe,t as pe,Z as je,bj as Xe,bk as et,a6 as tt,bl as st,bm as nt,a7 as rt,a as at,x as lt,v as it,A as ot,r as ct}from"./vendor-icons-D9Lpw-j4.js";import"./vendor-markdown-_lhNCyq-.js";import"./vendor-dnd-CJ-AjP-Y.js";import"./vendor-router-AqJMU8Lz.js";const dt="_root_1bn9e_1",ut="_main_1bn9e_13",ft="_trayOpen_1bn9e_21",mt="_libraryHeader_1bn9e_25",pt="_libraryTitle_1bn9e_34",bt="_libraryContent_1bn9e_41",ht="_libraryList_1bn9e_48",wt="_libraryItem_1bn9e_54",xt="_libraryItemSelected_1bn9e_75",yt="_libraryItemCopy_1bn9e_80",gt="_libraryItemName_1bn9e_84",_t="_libraryItemMeta_1bn9e_94",jt="_libraryBadges_1bn9e_101",Nt="_statusRow_1bn9e_102",vt="_content_1bn9e_109",kt="_visuallyHidden_1bn9e_115",St="_pageHeader_1bn9e_127",Ct="_pageHeading_1bn9e_136",Dt="_detailHeader_1bn9e_144",Et="_metadataEditor_1bn9e_148",Wt="_titleRow_1bn9e_154",It="_editor_1bn9e_169",Tt="_stickyToolbar_1bn9e_173",Kt="_toolbarGroup_1bn9e_188",Rt="_versionSelect_1bn9e_194",$t="_description_1bn9e_211",qt="_metrics_1bn9e_217",Vt="_metric_1bn9e_217",At="_section_1bn9e_249",Pt="_sectionHeader_1bn9e_253",zt="_stepToolbar_1bn9e_254",Mt="_stepActions_1bn9e_255",Ot="_stepList_1bn9e_266",Ht="_stepEditor_1bn9e_273",Lt="_stepToolbarExpanded_1bn9e_285",Ft="_stepExpandButton_1bn9e_289",Bt="_stepSummary_1bn9e_311",Ut="_stepFields_1bn9e_328",Gt="_fullField_1bn9e_335",Jt="_stepToggles_1bn9e_337",Yt="_requiredToggle_1bn9e_345",Zt="_stepsEmpty_1bn9e_356",Qt="_stepNumber_1bn9e_376",Xt="_emptyState_1bn9e_382",es="_loadingState_1bn9e_383",ts="_emptyStateInner_1bn9e_391",ss="_errorBanner_1bn9e_399",ns="_errorMessage_1bn9e_407",s={root:dt,main:ut,trayOpen:ft,libraryHeader:mt,libraryTitle:pt,libraryContent:bt,libraryList:ht,libraryItem:wt,libraryItemSelected:xt,libraryItemCopy:yt,libraryItemName:gt,libraryItemMeta:_t,libraryBadges:jt,statusRow:Nt,content:vt,visuallyHidden:kt,pageHeader:St,pageHeading:Ct,detailHeader:Dt,metadataEditor:Et,titleRow:Wt,editor:It,stickyToolbar:Tt,toolbarGroup:Kt,versionSelect:Rt,description:$t,metrics:qt,metric:Vt,section:At,sectionHeader:Pt,stepToolbar:zt,stepActions:Mt,stepList:Ot,stepEditor:Ht,stepToolbarExpanded:Lt,stepExpandButton:Ft,stepSummary:Bt,stepFields:Ut,fullField:Gt,stepToggles:Jt,requiredToggle:Yt,stepsEmpty:Zt,stepNumber:Qt,emptyState:Xt,loadingState:es,emptyStateInner:ts,errorBanner:ss,errorMessage:ns};function rs(c){const[_,k]=n.useState([]),[u,w]=n.useState(""),[E,g]=n.useState(null),[q,i]=n.useState(!0),[O,H]=n.useState(!1),[Y,L]=n.useState(!1),[Z,F]=n.useState(!1),[B,Q]=n.useState(!1),[ie,X]=n.useState(!1),[oe,ce]=n.useState(0),[de,x]=n.useState(null),m=n.useRef(0),p=n.useRef(c);p.current=c;const y=n.useCallback(async()=>{const r=++m.current;i(!0),x(null);try{const o=await ze();if(r!==m.current)return;k(o),w(f=>f&&o.some(({template:C})=>C.id===f)?f:o[0]?.template.id||"")}catch(o){if(r!==m.current)return;x(String(o?.message||o||"Unable to load workflows."))}finally{r===m.current&&i(!1)}},[c]);n.useEffect(()=>{k([]),w(""),g(null),y()},[y,c]),n.useEffect(()=>{let r=!1;if(!u){g(null),H(!1);return}return H(!0),x(null),Me(u).then(o=>{r||g(o)}).catch(o=>{r||(g(null),x(String(o?.message||o||"Unable to load workflow.")))}).finally(()=>{r||H(!1)}),()=>{r=!0}},[oe,u]);const S=n.useCallback(()=>{if(u&&!E){ce(r=>r+1);return}y()},[y,E,u]),j=n.useCallback(async r=>{const o=c;L(!0),x(null);try{const f=await Oe(r);return p.current!==o||(g(f),w(f.template.id),await y(),p.current===o&&w(f.template.id)),!0}catch(f){return p.current!==o||x(String(f?.message||f||"Unable to create workflow.")),!1}finally{L(!1)}},[y,c]),V=n.useCallback(async r=>{if(!u)return!1;const o=c,f=u;F(!0),x(null);try{const C=await He(f,{name:r.name,description:r.description,steps:r.steps});return p.current!==o||(g(C),await y(),p.current===o&&w(f)),!0}catch(C){return p.current!==o||x(String(C?.message||C||"Unable to save workflow draft.")),!1}finally{F(!1)}},[y,u,c]),T=n.useCallback(async()=>{if(!u)return!1;const r=c,o=u;Q(!0),x(null);try{const f=await Le(o);return p.current!==r||(g(f),await y(),p.current===r&&w(o)),!0}catch(f){return p.current!==r||x(String(f?.message||f||"Unable to publish workflow.")),!1}finally{Q(!1)}},[y,u,c]),A=n.useCallback(async()=>{if(!u)return!1;const r=c,o=u;X(!0),x(null);try{const f=await Fe(o);return p.current!==r||(g(f),await y(),p.current===r&&w(o)),!0}catch(f){return p.current!==r||x(String(f?.message||f||"Unable to create workflow draft.")),!1}finally{X(!1)}},[y,u,c]);return{workflows:_,selectedWorkflowId:u,selectedWorkflow:E,loadingLibrary:q,loadingDetails:O,creatingWorkflow:Y,savingWorkflow:Z,publishingWorkflow:B,creatingDraft:ie,error:de,setSelectedWorkflowId:w,refreshLibrary:y,retry:S,createWorkflow:j,saveDraft:V,publishDraft:T,createNextDraft:A,clearError:()=>x(null)}}const as="_title_lvjgs_1",ls="_message_lvjgs_7",is="_actions_lvjgs_13",be={title:as,message:ls,actions:is};function os({isOpen:c,workflowName:_,versionNumber:k,busy:u,onCancel:w,onPublish:E,theme:g}){return e.jsx(Be,{isOpen:c,onClose:w,title:e.jsxs("span",{className:be.title,children:[e.jsx(le,{size:18})," Publish Workflow"]}),size:"sm",closeOnOverlayClick:!1,closeDisabled:u,theme:g,footer:e.jsxs("div",{className:be.actions,children:[e.jsx("button",{type:"button",className:"tf-button-secondary",onClick:w,disabled:u,"data-modal-initial-focus":!0,children:"Cancel"}),e.jsxs("button",{type:"button",className:"tf-button-primary",onClick:E,disabled:u,children:[u?e.jsx(J,{size:15,className:$.spinner}):e.jsx(le,{size:15}),"Publish Version ",k]})]}),children:e.jsxs("p",{className:be.message,children:["Publish ",e.jsx("strong",{children:_})," as Version ",k,"? Published versions are immutable. Future changes require a new draft."]})})}const re="draft";function cs(c){return c.draftVersionId&&c.latestPublishedVersion?.versionNumber?`Version ${c.latestPublishedVersion.versionNumber} published`:c.draftVersionId?"Unpublished":c.latestPublishedVersion?.versionNumber?`Version ${c.latestPublishedVersion.versionNumber}`:"No version"}function ds(c){if(!c)return"Not published";const _=new Date(c);return Number.isNaN(_.getTime())?"Not published":_.toLocaleDateString()}function ae(c,_,k){return JSON.stringify({name:c,description:_,steps:k.map(({clientKey:u,...w})=>w)})}function ws({workspaceId:c,libraryTrayOpen:_=!0,onCloseLibraryTray:k,assigneeOptions:u=[],theme:w,onUnsavedChangesChange:E}){const{workflows:g,selectedWorkflowId:q,selectedWorkflow:i,loadingLibrary:O,loadingDetails:H,creatingWorkflow:Y,savingWorkflow:L,publishingWorkflow:Z,creatingDraft:F,error:B,setSelectedWorkflowId:Q,retry:ie,createWorkflow:X,saveDraft:oe,publishDraft:ce,createNextDraft:de,clearError:x}=rs(c),[m,p]=n.useState(!1),[y,S]=n.useState(!1),[j,V]=n.useState(""),[T,A]=n.useState(""),[r,o]=n.useState([]),[f,C]=n.useState(""),[P,ee]=n.useState(!1),[te,U]=n.useState(""),[ue,W]=n.useState(new Set),[he,fe]=n.useState(null),[Ne,z]=n.useState(!1),me=n.useRef(null),se=n.useRef(new Map),K=n.useRef(null),D=n.useMemo(()=>i?te===re&&i.draft?i.draft:i.publishedVersions.find(({version:a})=>a.id===te)||i.draft||i.publishedVersions[0]||null:null,[te,i]),we=D?.version.status==="draft"?re:D?.version.id||"",ve=n.useMemo(()=>ae(j,T,r),[T,j,r]),N=m||D?.version.status==="draft",I=N&&ve!==f,b=Y||L||Z||F,ke=(i?.publishedVersions[0]?.version.versionNumber||0)+1,xe=n.useMemo(()=>u.filter(({kind:t,archivedAt:a})=>t!=="unassigned"&&!a),[u]),Se=n.useMemo(()=>Ue(xe),[xe]);n.useEffect(()=>{p(!1),S(!1),U(""),W(new Set),z(!1),K.current=null},[c]),n.useEffect(()=>{if(!i||m||!D)return;const t=D.version.name||i.template.name,a=D.version.description??i.template.description??"",d=D.steps.map(h=>({...h,clientKey:h.id}));V(t),A(a),o(d),C(ae(t,a,d));const l=K.current;S(!1),l?(W(new Set(d.filter((h,v)=>l.has(v)).map(({clientKey:h})=>h))),K.current=null):W(new Set),ee(!1)},[m,D,i]),n.useEffect(()=>{if(!I)return;const t=a=>{a.preventDefault(),a.returnValue=""};return window.addEventListener("beforeunload",t),()=>window.removeEventListener("beforeunload",t)},[I]),n.useEffect(()=>(E?.(I),()=>E?.(!1)),[I,E]);const ne=t=>{if(!I){t();return}fe(()=>t)},Ce=()=>{const t=he;fe(null),t?.()},ye=()=>{ne(()=>{x();const t=[];p(!0),S(!0),V(""),A(""),o(t),C(ae("","",t)),W(new Set),ee(!1),window.setTimeout(()=>me.current?.focus(),0)})},De=()=>{ne(()=>{if(x(),p(!1),S(!1),i){const t=i.draft?.version.name||i.template.name,a=i.draft?.version.description??i.publishedVersions[0]?.version.description??i.template.description??"",d=(i.draft?.steps||i.publishedVersions[0]?.steps||[]).map(l=>({...l,clientKey:l.id}));V(t),A(a),o(d),C(ae(t,a,d))}})},Ee=()=>{const t=`new-step-${Date.now()}-${r.length}`;o(a=>[...a,{id:t,clientKey:t,workflowVersionId:i?.draft?.version.id||"",position:a.length,name:"",instructions:"",ownerType:null,ownerId:null,expectedArtifact:null,requiresCommentEvidence:!1,isRequired:!0}]),W(a=>new Set(a).add(t)),window.setTimeout(()=>se.current.get(t)?.focus(),0)},M=(t,a)=>{o(d=>d.map(l=>l.clientKey===t?{...l,...a}:l))},ge=(t,a)=>{const d=t+a;d<0||d>=r.length||o(l=>{const h=[...l];return[h[t],h[d]]=[h[d],h[t]],h.map((v,R)=>({...v,position:R}))})},We=()=>r.map(t=>{const{clientKey:a,id:d,workflowVersionId:l,position:h,...v}=t;return{...v,name:t.name.trim(),instructions:t.instructions,ownerType:t.ownerType??null,ownerId:t.ownerId??null,expectedArtifact:t.expectedArtifact??null,requiresCommentEvidence:t.requiresCommentEvidence===!0,isRequired:t.isRequired}}),Ie=async()=>{if(ee(!0),!j.trim()){S(!0),window.setTimeout(()=>me.current?.focus(),0);return}const t=r.find(l=>!l.name.trim());if(t){W(l=>new Set(l).add(t.clientKey)),window.setTimeout(()=>se.current.get(t.clientKey)?.focus(),0);return}const a={name:j.trim(),description:T.trim(),steps:We()};K.current=new Set(r.map((l,h)=>ue.has(l.clientKey)?h:-1).filter(l=>l>=0)),(m?await X(a):await oe(a))?(p(!1),ee(!1)):K.current=null},Te=t=>{W(a=>{const d=new Set(a);return d.has(t)?d.delete(t):d.add(t),d})},Ke=t=>{t!==we&&ne(()=>{S(!1),U(t)})},Re=async()=>{K.current=new Set(r.map((a,d)=>ue.has(a.clientKey)?d:-1).filter(a=>a>=0)),await ce()||(K.current=null),z(!1)},$e=async()=>{const t=te;U(re),await de()||U(t)},qe=t=>{t===q&&!m||ne(()=>{p(!1),S(!1),U(""),z(!1),Q(t)})},Ve=e.jsxs("aside",{className:`${$.docTrayPanel} ${_?$.docTrayPanelOpen:""}`.trim(),"aria-hidden":!_,children:[e.jsxs("div",{className:s.libraryHeader,children:[e.jsxs("span",{className:`${s.libraryTitle} tf-label-micro`,children:[e.jsx(le,{size:14})," Workflow Library"]}),O?e.jsx(J,{size:14,className:$.spinner}):null,k?e.jsx("button",{type:"button",className:"tf-control-icon",onClick:k,title:"Collapse workflow library","aria-label":"Collapse workflow library",children:e.jsx(Qe,{size:16})}):null]}),e.jsx("div",{className:`${s.libraryContent} tf-scrollbar tf-tray-scroll-viewport`,children:g.length>0?e.jsx("div",{className:s.libraryList,children:g.map(t=>e.jsxs("button",{type:"button",className:`${s.libraryItem} ${t.template.id===q&&!m?s.libraryItemSelected:""}`.trim(),disabled:b,onClick:()=>qe(t.template.id),"aria-pressed":t.template.id===q&&!m,children:[e.jsxs("span",{className:s.libraryItemCopy,children:[e.jsx("span",{className:s.libraryItemName,children:t.template.name}),e.jsx("span",{className:s.libraryItemMeta,children:cs(t)})]}),e.jsxs("span",{className:s.libraryBadges,children:[t.draftVersionId?e.jsx("span",{className:"tf-chip-warning",children:"Draft"}):null,t.latestPublishedVersion?e.jsx("span",{className:"tf-chip-success",children:"Published"}):null]})]},t.template.id))}):O?null:e.jsx("p",{className:"tf-text-helper",children:"No workflows configured yet."})})]}),Ae=m||!!i;return e.jsxs("div",{className:`${s.root} ${_?s.trayOpen:""}`.trim(),children:[Ve,e.jsx("main",{className:`${s.main} tf-scrollbar`,children:e.jsxs("div",{className:s.content,children:[e.jsxs("header",{className:s.pageHeader,children:[e.jsxs("div",{className:s.pageHeading,children:[e.jsx("h2",{className:"tf-heading-section",children:"Workflow Manager"}),e.jsx("p",{className:"tf-text-helper",children:"Design reusable workflows for Taskforce agents."})]}),e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:ye,disabled:b,children:[e.jsx(pe,{size:15})," New Workflow"]})]}),B?e.jsxs("div",{className:`${s.errorBanner} tf-surface-inset tf-text-error`,role:"alert",children:[e.jsxs("span",{className:s.errorMessage,children:[e.jsx(je,{size:14})," ",B]}),e.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",onClick:ie,children:"Retry"})]}):null,H||O&&!i&&!m?e.jsx("div",{className:s.loadingState,"aria-live":"polite",children:e.jsx(J,{size:20,className:$.spinner})}):B&&q&&!i&&!m?e.jsx("div",{className:s.emptyState,children:e.jsxs("div",{className:s.emptyStateInner,children:[e.jsx(je,{size:24}),e.jsx("h3",{className:"tf-heading-card",children:"Workflow details unavailable"}),e.jsx("p",{className:"tf-text-helper",children:"Retry the request to load this workflow."})]})}):Ae?e.jsxs("div",{className:s.editor,children:[e.jsxs("div",{className:s.stickyToolbar,role:"toolbar","aria-label":N?"Workflow draft actions":"Workflow version actions",children:[N?e.jsxs("div",{className:s.toolbarGroup,children:[e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:Ee,disabled:b,children:[e.jsx(pe,{size:14})," Add Step"]}),e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>W(new Set(r.map(({clientKey:t})=>t))),disabled:r.length===0,title:"Expand all steps","aria-label":"Expand all steps",children:e.jsx(Xe,{size:15})}),e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>W(new Set),disabled:r.length===0,title:"Collapse all steps","aria-label":"Collapse all steps",children:e.jsx(et,{size:15})})]}):e.jsx("span",{}),e.jsxs("div",{className:s.toolbarGroup,children:[!m&&i?e.jsxs("select",{className:`${s.versionSelect} tf-field-shell`,"aria-label":"Workflow version",value:we,onChange:t=>Ke(t.target.value),disabled:b,children:[i.draft?e.jsx("option",{value:re,children:"Draft"}):null,i.publishedVersions.map(({version:t})=>e.jsxs("option",{value:t.id,children:["Version ",t.versionNumber]},t.id))]}):null,m?e.jsx("span",{className:"tf-chip-warning",children:"Draft"}):null,m?e.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",onClick:De,disabled:b,children:"Cancel"}):null,N?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:s.visuallyHidden,role:"status","aria-live":"polite",children:I?"Workflow has unsaved changes.":"Workflow draft is saved."}),e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:()=>{Ie()},disabled:!I||b,children:[Y||L?e.jsx(J,{size:15,className:$.spinner}):e.jsx(tt,{size:15})," Save Draft"]}),m?null:e.jsxs("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>z(!0),disabled:I||r.length===0||b,title:I?"Save the draft before publishing.":r.length===0?"Add at least one step before publishing.":"Publish this workflow version",children:[e.jsx(st,{size:15})," Publish"]})]}):i?.draft?null:e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:()=>{$e()},disabled:b,children:[F?e.jsx(J,{size:15,className:$.spinner}):e.jsx(nt,{size:15})," Create New Draft"]})]})]}),e.jsx("div",{className:s.detailHeader,children:e.jsx("div",{className:s.metadataEditor,children:y?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:"workflow-draft-name",children:"Workflow name"}),e.jsx("input",{id:"workflow-draft-name",ref:me,className:"tf-field-shell",value:j,onChange:t=>V(t.target.value),"aria-invalid":P&&!j.trim(),"aria-describedby":P&&!j.trim()?"workflow-draft-name-error":void 0,readOnly:b}),P&&!j.trim()?e.jsx("span",{id:"workflow-draft-name-error",className:"tf-text-error",children:"Workflow name is required."}):null]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:"workflow-draft-description",children:"Description"}),e.jsx("textarea",{id:"workflow-draft-description",className:"tf-field-shell",rows:3,value:T,onChange:t=>A(t.target.value),readOnly:b})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:s.titleRow,children:[e.jsx("h3",{className:"tf-heading-card",children:j||"Untitled workflow"}),e.jsx("div",{className:s.statusRow,children:N&&!m?e.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>S(!0),title:"Edit workflow details","aria-label":"Edit workflow details",children:e.jsx(rt,{size:14})}):null})]}),T?e.jsx("p",{className:`${s.description} tf-text-body`,children:T}):null]})})}),!m&&i?e.jsxs("div",{className:s.metrics,children:[e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Current version"}),e.jsx("strong",{children:D?.version.status==="draft"?"Draft":`Version ${D?.version.versionNumber||1}`})]}),e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Steps"}),e.jsx("strong",{children:r.length})]}),e.jsxs("div",{className:s.metric,children:[e.jsx("span",{className:"tf-label-micro",children:"Last published"}),e.jsx("strong",{children:ds(i.publishedVersions[0]?.version.publishedAt)})]})]}):null,e.jsxs("section",{className:s.section,children:[e.jsx("div",{className:s.sectionHeader,children:e.jsx("h4",{className:"tf-heading-card",children:"Workflow Steps"})}),r.length>0?e.jsx("div",{className:s.stepList,children:r.map((t,a)=>{const d=ue.has(t.clientKey);return e.jsxs("div",{className:s.stepEditor,children:[e.jsxs("div",{className:`${s.stepToolbar} ${d?s.stepToolbarExpanded:""}`.trim(),children:[e.jsxs("button",{type:"button",className:s.stepExpandButton,onClick:()=>Te(t.clientKey),"aria-expanded":d,"aria-controls":`workflow-step-fields-${t.clientKey}`,children:[d?e.jsx(at,{size:15}):e.jsx(lt,{size:15}),e.jsx("span",{className:s.stepNumber,children:a+1}),e.jsx("strong",{children:t.name.trim()||"Untitled step"})]}),e.jsxs("div",{className:s.stepSummary,children:[e.jsx("span",{children:Ge(t.ownerId,u)}),e.jsx("span",{className:t.isRequired?"tf-chip-neutral":"tf-chip-warning",children:t.isRequired?"Required":"Optional"})]}),N?e.jsxs("div",{className:s.stepActions,children:[e.jsx("button",{type:"button",className:"tf-control-icon",title:"Move step up","aria-label":`Move step ${a+1} up`,onClick:()=>ge(a,-1),disabled:b||a===0,children:e.jsx(it,{size:14})}),e.jsx("button",{type:"button",className:"tf-control-icon",title:"Move step down","aria-label":`Move step ${a+1} down`,onClick:()=>ge(a,1),disabled:b||a===r.length-1,children:e.jsx(ot,{size:14})}),e.jsx("button",{type:"button",className:"tf-control-icon",title:"Remove step","aria-label":`Remove step ${a+1}`,onClick:()=>o(l=>l.filter(({clientKey:h})=>h!==t.clientKey)),disabled:b,children:e.jsx(ct,{size:14})})]}):null]}),d?e.jsxs("div",{id:`workflow-step-fields-${t.clientKey}`,className:s.stepFields,children:[e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-name-${t.clientKey}`,children:"Step name"}),e.jsx("input",{id:`workflow-step-name-${t.clientKey}`,ref:l=>{l?se.current.set(t.clientKey,l):se.current.delete(t.clientKey)},className:"tf-field-shell",value:t.name,onChange:l=>M(t.clientKey,{name:l.target.value}),"aria-invalid":P&&!t.name.trim(),"aria-describedby":P&&!t.name.trim()?`workflow-step-name-error-${t.clientKey}`:void 0,disabled:!N,readOnly:b}),P&&!t.name.trim()?e.jsx("span",{id:`workflow-step-name-error-${t.clientKey}`,className:"tf-text-error",children:"Step name is required."}):null]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",id:`workflow-step-owner-label-${t.clientKey}`,children:"Owner"}),(()=>{const l=Je(Se,t.ownerId),h=l.find(({value:v})=>String(v)===String(t.ownerId||"unassigned"))||l[0];return e.jsx(Ye,{value:t.ownerId||"unassigned",options:l,disabled:!N||b,ariaLabelledBy:`workflow-step-owner-label-${t.clientKey}`,portalPanel:!0,panelMinWidth:280,panelAlign:"start",searchable:!0,searchPlaceholder:"Search owners...",noResultsText:"No owners found.",triggerContent:h?e.jsx(_e,{option:h}):void 0,renderOptionContent:v=>{const R=l.find(({value:G})=>String(G)===String(v.value));return R?e.jsx(_e,{option:R}):v.label},onChange:v=>{const R=String(v),G=l.find(({value:Pe})=>String(Pe)===R);M(t.clientKey,{ownerId:G?.kind==="unassigned"?null:R,ownerType:G?.kind==="agent"?"agent":G?.kind==="member"?"user":null})}})})()]}),e.jsxs("div",{className:`${s.fullField} tf-field-stack`,children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-instructions-${t.clientKey}`,children:"Instructions"}),e.jsx("textarea",{id:`workflow-step-instructions-${t.clientKey}`,className:"tf-field-shell",rows:4,value:t.instructions,onChange:l=>M(t.clientKey,{instructions:l.target.value}),placeholder:"Describe the work to complete in this step.",disabled:!N,readOnly:b})]}),e.jsxs("div",{className:"tf-field-stack",children:[e.jsx("label",{className:"tf-field-label",htmlFor:`workflow-step-artifact-${t.clientKey}`,children:"Output label"}),e.jsx("input",{id:`workflow-step-artifact-${t.clientKey}`,className:"tf-field-shell",value:t.expectedArtifact||"",onChange:l=>M(t.clientKey,{expectedArtifact:l.target.value||null}),placeholder:"Optional output description",disabled:!N,readOnly:b})]}),e.jsxs("div",{className:s.stepToggles,children:[e.jsxs("label",{className:s.requiredToggle,title:"Requires the step owner to add a task comment before completing this step.",children:[e.jsx("input",{type:"checkbox",checked:t.requiresCommentEvidence===!0,onChange:l=>M(t.clientKey,{requiresCommentEvidence:l.target.checked}),disabled:!N||b}),"Require task comment"]}),e.jsxs("label",{className:s.requiredToggle,title:"Marks this step as mandatory when execution policy is enforced.",children:[e.jsx("input",{type:"checkbox",checked:t.isRequired,onChange:l=>M(t.clientKey,{isRequired:l.target.checked}),disabled:!N||b}),"Required step"]})]})]}):null]},t.clientKey)})}):e.jsx("div",{className:s.stepsEmpty,children:e.jsx("p",{className:"tf-text-helper",children:"No steps have been added yet."})})]})]}):e.jsx("div",{className:s.emptyState,children:e.jsxs("div",{className:s.emptyStateInner,children:[e.jsx(le,{size:30}),e.jsx("h3",{className:"tf-heading-card",children:"No workflows yet"}),e.jsx("p",{className:"tf-text-helper",children:"Create a workflow to begin defining a reusable process."}),e.jsxs("button",{type:"button",className:"tf-button-primary",onClick:ye,children:[e.jsx(pe,{size:15})," New Workflow"]})]})})]})}),e.jsx(Ze,{isOpen:!!he,onKeepEditing:()=>fe(null),onDiscard:Ce,theme:w}),e.jsx(os,{isOpen:Ne,workflowName:j,versionNumber:ke,busy:Z,onCancel:()=>z(!1),onPublish:()=>{Re()},theme:w})]})}export{ws as WorkflowManagerModule};
|