@taskforcehq/taskforce 0.3.327 → 0.3.328
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 +24 -53
- package/dist/components/activity/EntityActivityTimeline.js +15 -5
- package/dist/components/context/AttachmentPreviewHost.js +1 -1
- package/dist/components/context/ContextAttachmentManager.d.ts +3 -0
- package/dist/components/context/ContextAttachmentManager.js +116 -20
- package/dist/components/features/planning/PlanningEntitySummary.d.ts +3 -1
- package/dist/components/features/planning/PlanningEntitySummary.js +3 -2
- package/dist/components/features/planning/PlanningLinkPicker.d.ts +3 -1
- package/dist/components/features/planning/PlanningLinkPicker.js +5 -3
- package/dist/components/features/planning/PlanningModule.js +26 -9
- package/dist/components/features/planning/PlanningVisualIdentity.d.ts +14 -0
- package/dist/components/features/planning/PlanningVisualIdentity.js +106 -0
- package/dist/components/features/planning/planningWorkspaceModel.d.ts +11 -0
- package/dist/components/task/TaskActionHeader.d.ts +2 -1
- package/dist/components/task/TaskActionHeader.js +2 -2
- package/dist/components/task/TaskCard.js +37 -4
- package/dist/components/task/TaskContextUpload.d.ts +3 -0
- package/dist/components/task/TaskContextUpload.js +2 -2
- package/dist/components/task/TaskForm.d.ts +4 -0
- package/dist/components/task/TaskForm.js +32 -7
- package/dist/components/task/TaskImageReviews.js +16 -16
- package/dist/components/task/TaskStatusActions.js +11 -2
- package/dist/components/task/TaskWorkstreamPicker.js +2 -1
- package/dist/components/ui/DocumentTypeIcon.d.ts +7 -0
- package/dist/components/ui/DocumentTypeIcon.js +8 -0
- package/dist/components/ui/TaxonomyDropdown.d.ts +9 -1
- package/dist/components/ui/TaxonomyDropdown.js +30 -3
- package/dist/components/views/StandaloneLayout.js +62 -9
- package/dist/components/views/WidgetView.js +8 -5
- package/dist/components/views/panels/PlanningDrawer.d.ts +7 -1
- package/dist/components/views/panels/PlanningDrawer.js +48 -44
- package/dist/config/envSchema.js +1 -0
- package/dist/config/localServiceCloudTarget.d.ts +10 -0
- package/dist/config/localServiceCloudTarget.js +76 -0
- package/dist/core/AiProfileService.d.ts +1 -0
- package/dist/core/AiProfileService.js +2 -1
- package/dist/core/AttachmentLinkService.js +7 -4
- package/dist/core/DeletedTaskLifecycleService.d.ts +4 -0
- package/dist/core/DeletedTaskLifecycleService.js +21 -0
- package/dist/core/McpTokenService.d.ts +4 -0
- package/dist/core/McpTokenService.js +52 -0
- package/dist/core/TaskAttachmentLinksDurableMutationService.d.ts +5 -0
- package/dist/core/TaskAttachmentLinksDurableMutationService.js +20 -11
- package/dist/core/Taskforce.d.ts +63 -1
- package/dist/core/Taskforce.js +558 -73
- package/dist/core/types.d.ts +2 -1
- package/dist/documentReviews/DocumentReviewCommentStore.d.ts +11 -0
- package/dist/documentReviews/DocumentReviewCommentStore.js +35 -2
- package/dist/documentReviews/service.d.ts +4 -0
- package/dist/documentReviews/service.js +141 -46
- package/dist/hooks/tasks/useTaskFormActions.d.ts +3 -0
- package/dist/hooks/tasks/useTaskFormActions.js +33 -7
- package/dist/hooks/useTaskforce.d.ts +59 -50
- package/dist/hooks/useTaskforce.js +103 -1
- package/dist/mcp/canonicalAssetHelpers.d.ts +13 -0
- package/dist/mcp/canonicalAssetHelpers.js +39 -5
- package/dist/mcp/collaborationRegistrar.js +15 -13
- package/dist/mcp/documentAssetRegistrar.js +16 -9
- package/dist/mcp/localServiceProxy.js +4 -1
- package/dist/mcp/runtime.d.ts +16 -0
- package/dist/mcp/runtime.js +566 -171
- package/dist/mcp/taskAttachmentCommandAdapter.d.ts +2 -0
- package/dist/mcp/taskAttachmentCommandAdapter.js +14 -8
- package/dist/mcp/taskPlanningRegistrar.js +42 -34
- package/dist/mcp/toolRegistry.js +2 -2
- package/dist/migrations/taskSchemaMigrations.js +35 -0
- package/dist/runtime/appGateDefinitions.d.ts +2 -2
- package/dist/runtime/appGateDefinitions.js +2 -2
- package/dist/server/appAccess.d.ts +12 -0
- package/dist/server/appAccess.js +21 -0
- package/dist/server/authorizedWorkspaceAccess.d.ts +12 -0
- package/dist/server/authorizedWorkspaceAccess.js +40 -0
- package/dist/server/cloudCollectionRead.d.ts +25 -0
- package/dist/server/cloudCollectionRead.js +120 -0
- package/dist/server/cloudCollectionReadPool.d.ts +52 -0
- package/dist/server/cloudCollectionReadPool.js +140 -0
- package/dist/server/cloudCollectionReadWorker.d.ts +1 -0
- package/dist/server/cloudCollectionReadWorker.js +36 -0
- package/dist/server/index.d.ts +3 -11
- package/dist/server/index.js +53 -40
- package/dist/server/localServiceLease.d.ts +3 -0
- package/dist/server/localServiceLease.js +9 -1
- package/dist/server/routes/documents.d.ts +5 -2
- package/dist/server/routes/documents.js +160 -13
- package/dist/server/routes/durableTaskHttpRouters.d.ts +2 -0
- package/dist/server/routes/durableTaskHttpRouters.js +2 -2
- package/dist/server/routes/localService.js +2 -0
- package/dist/server/routes/primitives.d.ts +2 -0
- package/dist/server/routes/shared.d.ts +24 -0
- package/dist/server/routes/shared.js +114 -18
- package/dist/server/routes/sync.js +22 -0
- package/dist/server/routes/syncV3FeedRoutes.js +4 -2
- package/dist/server/routes/syncV3LocalCaptureRoutes.js +20 -2
- package/dist/server/routes/syncV3OperationRoutes.js +17 -2
- package/dist/server/routes/tasks.js +199 -89
- package/dist/server/routes.js +35 -7
- package/dist/service/localServiceCli.js +36 -25
- package/dist/service/localServiceClientLifecycle.js +67 -6
- package/dist/shared/planningIdentity.d.ts +20 -0
- package/dist/shared/planningIdentity.js +79 -0
- package/dist/storage/postgresAdapter.js +4 -0
- package/dist/storage/postgresRequestDiagnostics.d.ts +8 -0
- package/dist/storage/postgresRequestDiagnostics.js +24 -0
- package/dist/storage/workspaceAssetStore.d.ts +32 -0
- package/dist/storage/workspaceAssetStore.js +70 -0
- package/dist/sync/coordinator/localSyncExecutionPermitStore.d.ts +16 -0
- package/dist/sync/coordinator/localSyncExecutionPermitStore.js +70 -22
- package/dist/sync/coordinator/workspaceSyncTransportGateway.js +4 -2
- package/dist/sync/engine/workspaceSyncEngineRemoteServices.d.ts +5 -0
- package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.d.ts +1 -1
- package/dist/sync/engine/workspaceSyncEngineServerRemoteServices.js +15 -0
- package/dist/sync/engine/workspaceSyncEngineServerRunnerOperations.js +26 -3
- package/dist/sync/engine/workspaceSyncV2ChangeDispatcher.js +2 -0
- package/dist/sync/syncApplyHandlers.d.ts +3 -1
- package/dist/sync/syncApplyHandlers.js +29 -0
- package/dist/sync/syncService.js +9 -0
- package/dist/sync/taskSyncPayload.d.ts +1 -0
- package/dist/sync/taskSyncPayload.js +6 -0
- package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.d.ts +1 -0
- package/dist/sync/v3/durableTaskAttachmentLinksMutationRouter.js +21 -3
- package/dist/sync/v3/durableTaskHttpBulkMutationRouter.js +17 -4
- package/dist/sync/v3/localInitiativeOutboxService.js +4 -2
- package/dist/sync/v3/localOutboxDispatcher.js +5 -1
- package/dist/sync/v3/localTaskAttachmentLinksOutboxHandler.js +12 -2
- package/dist/sync/v3/localTaskAttachmentLinksOutboxService.d.ts +1 -0
- package/dist/sync/v3/localTaskAttachmentLinksOutboxService.js +15 -3
- package/dist/sync/v3/localWorkstreamOutboxService.js +4 -2
- package/dist/sync/v3/syncDurabilityStore.d.ts +8 -0
- package/dist/sync/v3/syncDurabilityStore.js +171 -33
- package/dist/sync/v3/taskAttachmentLinksMutationService.d.ts +1 -0
- package/dist/sync/v3/taskAttachmentLinksMutationService.js +18 -2
- package/dist/sync/v3/taskMetadataCoexistence.js +4 -0
- package/dist/sync/v3/workspaceSyncV2ProjectionExclusions.js +1 -9
- package/dist/sync/v3/workspaceSyncV3CloudOperationHandler.js +1 -0
- package/dist/sync/v3/workspaceSyncV3CombinedFeedOrchestrator.js +7 -1
- package/dist/sync/v3/workspaceSyncV3CombinedLocalApply.js +15 -3
- package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.d.ts +4 -0
- package/dist/sync/v3/workspaceSyncV3CombinedRepairBaseline.js +29 -6
- package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.d.ts +1 -0
- package/dist/sync/v3/workspaceSyncV3CombinedRepairMaterialization.js +29 -7
- package/dist/sync/v3/workspaceSyncV3CombinedRepairSnapshot.js +62 -7
- package/dist/sync/v3/workspaceSyncV3OperationProtocol.d.ts +1 -0
- package/dist/sync/v3/workspaceSyncV3RepairSqlBatching.d.ts +2 -0
- package/dist/sync/v3/workspaceSyncV3RepairSqlBatching.js +10 -0
- package/dist/sync/v3/workspaceSyncV3TaskRootProjection.d.ts +1 -1
- package/dist/sync/v3/workspaceSyncV3TaskRootProjection.js +1 -1
- package/dist/sync/workspacePullFeed.d.ts +6 -1
- package/dist/sync/workspacePullFeed.js +172 -161
- package/dist/sync/workspaceSyncModel.d.ts +11 -0
- package/dist/sync/workspaceSyncModel.js +27 -2
- package/dist/types.d.ts +8 -0
- package/dist/ui/assets/{AiIdentityRosterCard-DB1BLO_j.js → AiIdentityRosterCard-MZs7lVED.js} +1 -1
- package/dist/ui/assets/{AiProfilesModule-DPxQeF9N.js → AiProfilesModule-C3i0LOxe.js} +1 -1
- package/dist/ui/assets/{AnnotatedAttachmentWorkspace-DHNYaNg6.js → AnnotatedAttachmentWorkspace-DVZk5Tln.js} +1 -1
- package/dist/ui/assets/AssetTraySortControl-Kf1pelSy.js +1 -0
- package/dist/ui/assets/ContextAttachmentManager-B8boOs6Q.js +3 -0
- package/dist/ui/assets/{DocumentWorkspace-BC7sy5TG.js → DocumentWorkspace-DXH4XUsB.js} +4 -4
- package/dist/ui/assets/EntityActivityTimeline-BtSTq0ON.js +1 -0
- package/dist/ui/assets/PlanningModule-BPVyEa-f.js +1 -0
- package/dist/ui/assets/PlanningModule-CoIR9hbV.css +1 -0
- package/dist/ui/assets/{PlansPage-BVH_NfgT.js → PlansPage-ChqgxALc.js} +1 -1
- package/dist/ui/assets/TaskContextUpload-CB3ol0sN.js +1 -0
- package/dist/ui/assets/TaskContextUpload-qmBeUw3u.css +1 -0
- package/dist/ui/assets/{TaskSettings-xVsxSa0g.js → TaskSettings-g4ECKNOz.js} +1 -1
- package/dist/ui/assets/{TaskforceAgentsModule-CkAxW19K.js → TaskforceAgentsModule-BazdUwxZ.js} +1 -1
- package/dist/ui/assets/WorkflowManagerModule-DWFspC-o.js +1 -0
- package/dist/ui/assets/index-BUplSsv_.js +7 -0
- package/dist/ui/assets/index-gz2EXuoK.css +1 -0
- package/dist/ui/assets/{vendor-icons-B8ZNsH1g.js → vendor-icons-BkFLXavV.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/utils/constants.d.ts +2 -2
- package/dist/utils/constants.js +1 -1
- package/dist/utils/contextAttachmentUpload.d.ts +2 -0
- package/dist/utils/contextAttachmentUpload.js +7 -0
- package/dist/utils/contextFiles.d.ts +1 -1
- package/dist/utils/contextFiles.js +4 -4
- package/package.json +6 -1
- package/dist/ui/assets/AssetTraySortControl-DphbyHVc.js +0 -1
- package/dist/ui/assets/ContextAttachmentManager-CMxSzHqc.js +0 -3
- package/dist/ui/assets/EntityActivityTimeline-pJ2ZjZ-k.js +0 -1
- package/dist/ui/assets/PlanningModule-CeTqXMMz.css +0 -1
- package/dist/ui/assets/PlanningModule-t5GbvVR9.js +0 -1
- package/dist/ui/assets/TaskContextUpload-Ds4LnDzV.css +0 -1
- package/dist/ui/assets/TaskContextUpload-bl4fOOUz.js +0 -1
- package/dist/ui/assets/WorkflowManagerModule-BKqIGVnF.js +0 -1
- package/dist/ui/assets/index-BzJlVnNS.css +0 -1
- package/dist/ui/assets/index-Cx7vZJHL.js +0 -7
package/dist/ui/index.html
CHANGED
|
@@ -8,13 +8,13 @@
|
|
|
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-
|
|
11
|
+
<script type="module" crossorigin src="/taskforce/assets/index-BUplSsv_.js"></script>
|
|
12
12
|
<link rel="modulepreload" crossorigin href="/taskforce/assets/vendor-react-CKJs5o3c.js">
|
|
13
|
-
<link rel="modulepreload" crossorigin href="/taskforce/assets/vendor-icons-
|
|
13
|
+
<link rel="modulepreload" crossorigin href="/taskforce/assets/vendor-icons-BkFLXavV.js">
|
|
14
14
|
<link rel="modulepreload" crossorigin href="/taskforce/assets/vendor-markdown-_lhNCyq-.js">
|
|
15
15
|
<link rel="modulepreload" crossorigin href="/taskforce/assets/vendor-dnd-CJ-AjP-Y.js">
|
|
16
16
|
<link rel="modulepreload" crossorigin href="/taskforce/assets/vendor-router-AqJMU8Lz.js">
|
|
17
|
-
<link rel="stylesheet" crossorigin href="/taskforce/assets/index-
|
|
17
|
+
<link rel="stylesheet" crossorigin href="/taskforce/assets/index-gz2EXuoK.css">
|
|
18
18
|
</head>
|
|
19
19
|
<body>
|
|
20
20
|
<div id="root"></div>
|
|
@@ -14,10 +14,10 @@ export declare const STATUS_OPTIONS: {
|
|
|
14
14
|
color: string | undefined;
|
|
15
15
|
}[];
|
|
16
16
|
export declare function getStatusDefinition(status?: string | null): StatusDefinition;
|
|
17
|
-
declare const curatedIcons: readonly ["Folder", "Code", "FileText", "Terminal", "Database", "Cpu", "Globe", "Layout", "Server", "Search", "Settings", "Zap", "Shield", "Star", "Layers", "Bug", "Box", "Book", "MessageSquare", "Image", "Music", "Video", "Map", "Mail", "Camera", "Heart", "Anchor", "Rocket", "Target", "Flag", "Bookmark", "Briefcase", "Puzzle", "SquareUserRound", "Users", "User", "Unplug", "Clock", "Lock", "Pencil", "TrafficCone", "CircleDollarSign", "Activity", "Wrench", "Microscope", "Palette", "Webhook", "FlaskConical", "Bot", "Cloud", "Kanban", "Infinity", "Monitor", "Smartphone", "History", "Brain", "Calendar", "Play", "Pause", "Sparkles", "Check", "Ban", "Circle", "CheckCircle", "Wind", "Github", "Square", "SquareCheck", "CheckSquare", "Package", "AlertCircle", "Lightbulb", "ClipboardCheck", "ScanSearch", "Inbox", "HelpCircle", "Gauge", "FileCode", "ArrowDown", "Minus", "ArrowUp", "AlertTriangle", "CircleQuestionMark", "TriangleAlert"];
|
|
17
|
+
declare const curatedIcons: readonly ["Folder", "Code", "FileText", "Terminal", "Database", "Cpu", "Globe", "Layout", "Server", "Search", "Settings", "Zap", "Shield", "Star", "Layers", "Bug", "Box", "Book", "MessageSquare", "Image", "Music", "Video", "Map", "Mail", "Camera", "Heart", "Anchor", "Rocket", "Target", "Flag", "Bookmark", "Briefcase", "Puzzle", "SquareUserRound", "Users", "User", "Unplug", "Clock", "Lock", "Pencil", "TrafficCone", "CircleDollarSign", "Activity", "Wrench", "Microscope", "Palette", "Webhook", "FlaskConical", "Route", "Compass", "Landmark", "BookOpen", "Bot", "Cloud", "Kanban", "Infinity", "Monitor", "Smartphone", "History", "Brain", "Calendar", "Play", "Pause", "Sparkles", "Check", "Ban", "Circle", "CheckCircle", "Wind", "Github", "Square", "SquareCheck", "CheckSquare", "Package", "AlertCircle", "Lightbulb", "ClipboardCheck", "ScanSearch", "Inbox", "HelpCircle", "Gauge", "FileCode", "ArrowDown", "Minus", "ArrowUp", "AlertTriangle", "CircleQuestionMark", "TriangleAlert"];
|
|
18
18
|
export type IconName = typeof curatedIcons[number];
|
|
19
19
|
export declare const IconMap: Record<string, any>;
|
|
20
|
-
export declare const AVAILABLE_ICONS: readonly ["Folder", "Code", "FileText", "Terminal", "Database", "Cpu", "Globe", "Layout", "Server", "Search", "Settings", "Zap", "Shield", "Star", "Layers", "Bug", "Box", "Book", "MessageSquare", "Image", "Music", "Video", "Map", "Mail", "Camera", "Heart", "Anchor", "Rocket", "Target", "Flag", "Bookmark", "Briefcase", "Puzzle", "SquareUserRound", "Users", "User", "Unplug", "Clock", "Lock", "Pencil", "TrafficCone", "CircleDollarSign", "Activity", "Wrench", "Microscope", "Palette", "Webhook", "FlaskConical", "Bot", "Cloud", "Kanban", "Infinity", "Monitor", "Smartphone", "History", "Brain", "Calendar", "Play", "Pause", "Sparkles", "Check", "Ban", "Circle", "CheckCircle", "Wind", "Github", "Square", "SquareCheck", "CheckSquare", "Package", "AlertCircle", "Lightbulb", "ClipboardCheck", "ScanSearch", "Inbox", "HelpCircle", "Gauge", "FileCode", "ArrowDown", "Minus", "ArrowUp", "AlertTriangle", "CircleQuestionMark", "TriangleAlert"];
|
|
20
|
+
export declare const AVAILABLE_ICONS: readonly ["Folder", "Code", "FileText", "Terminal", "Database", "Cpu", "Globe", "Layout", "Server", "Search", "Settings", "Zap", "Shield", "Star", "Layers", "Bug", "Box", "Book", "MessageSquare", "Image", "Music", "Video", "Map", "Mail", "Camera", "Heart", "Anchor", "Rocket", "Target", "Flag", "Bookmark", "Briefcase", "Puzzle", "SquareUserRound", "Users", "User", "Unplug", "Clock", "Lock", "Pencil", "TrafficCone", "CircleDollarSign", "Activity", "Wrench", "Microscope", "Palette", "Webhook", "FlaskConical", "Route", "Compass", "Landmark", "BookOpen", "Bot", "Cloud", "Kanban", "Infinity", "Monitor", "Smartphone", "History", "Brain", "Calendar", "Play", "Pause", "Sparkles", "Check", "Ban", "Circle", "CheckCircle", "Wind", "Github", "Square", "SquareCheck", "CheckSquare", "Package", "AlertCircle", "Lightbulb", "ClipboardCheck", "ScanSearch", "Inbox", "HelpCircle", "Gauge", "FileCode", "ArrowDown", "Minus", "ArrowUp", "AlertTriangle", "CircleQuestionMark", "TriangleAlert"];
|
|
21
21
|
export declare const TypeMeta: Record<string, {
|
|
22
22
|
icon: string;
|
|
23
23
|
color: string;
|
package/dist/utils/constants.js
CHANGED
|
@@ -39,7 +39,7 @@ const curatedIcons = [
|
|
|
39
39
|
'Zap', 'Shield', 'Star', 'Layers', 'Bug', 'Box', 'Book', 'MessageSquare', 'Image', 'Music', 'Video', 'Map',
|
|
40
40
|
'Mail', 'Camera', 'Heart', 'Anchor', 'Rocket', 'Target', 'Flag', 'Bookmark', 'Briefcase',
|
|
41
41
|
'Puzzle', 'SquareUserRound', 'Users', 'User', 'Unplug', 'Clock', 'Lock', 'Pencil', 'TrafficCone', 'CircleDollarSign',
|
|
42
|
-
'Activity', 'Wrench', 'Microscope', 'Palette', 'Webhook', 'FlaskConical',
|
|
42
|
+
'Activity', 'Wrench', 'Microscope', 'Palette', 'Webhook', 'FlaskConical', 'Route', 'Compass', 'Landmark', 'BookOpen',
|
|
43
43
|
'Bot', 'Cloud', 'Kanban', 'Infinity', 'Monitor', 'Smartphone', 'History', 'Brain', 'Calendar',
|
|
44
44
|
'Play', 'Pause', 'Sparkles', 'Check', 'Ban', 'Circle', 'CheckCircle', 'Wind', 'Github',
|
|
45
45
|
'Square', 'SquareCheck', 'CheckSquare',
|
|
@@ -4,5 +4,7 @@ export interface UploadContextAttachmentOptions {
|
|
|
4
4
|
ownerType: ContextAttachmentOwnerType;
|
|
5
5
|
ownerId?: string | null;
|
|
6
6
|
workspaceId?: string | null;
|
|
7
|
+
draftUploadId?: string | null;
|
|
8
|
+
uploadPurpose?: 'task-description-draft' | null;
|
|
7
9
|
}
|
|
8
10
|
export declare function uploadContextAttachment(file: File, options: UploadContextAttachmentOptions): Promise<AttachmentItem>;
|
|
@@ -38,6 +38,10 @@ export async function uploadContextAttachment(file, options) {
|
|
|
38
38
|
ownerId: ownerId || null,
|
|
39
39
|
taskId: options.ownerType === 'task' ? (ownerId || null) : null,
|
|
40
40
|
};
|
|
41
|
+
const draftUploadId = String(options.draftUploadId || '').trim();
|
|
42
|
+
const draftPayload = draftUploadId && options.uploadPurpose
|
|
43
|
+
? { draftUploadId, uploadPurpose: options.uploadPurpose }
|
|
44
|
+
: {};
|
|
41
45
|
const operationId = globalThis.crypto?.randomUUID?.()
|
|
42
46
|
|| `context-upload-${Date.now()}-${Math.random().toString(16).slice(2)}`;
|
|
43
47
|
const buildHeaders = () => ({
|
|
@@ -55,6 +59,7 @@ export async function uploadContextAttachment(file, options) {
|
|
|
55
59
|
mimeType: file.type || 'application/octet-stream',
|
|
56
60
|
size: file.size,
|
|
57
61
|
...ownerPayload,
|
|
62
|
+
...draftPayload,
|
|
58
63
|
workspaceId: workspaceId || null,
|
|
59
64
|
}),
|
|
60
65
|
});
|
|
@@ -82,6 +87,7 @@ export async function uploadContextAttachment(file, options) {
|
|
|
82
87
|
originalName: file.name,
|
|
83
88
|
size: file.size,
|
|
84
89
|
...ownerPayload,
|
|
90
|
+
...draftPayload,
|
|
85
91
|
workspaceId: workspaceId || null,
|
|
86
92
|
}),
|
|
87
93
|
});
|
|
@@ -113,6 +119,7 @@ export async function uploadContextAttachment(file, options) {
|
|
|
113
119
|
file: encoded,
|
|
114
120
|
originalName: file.name,
|
|
115
121
|
...ownerPayload,
|
|
122
|
+
...draftPayload,
|
|
116
123
|
workspaceId: workspaceId || null,
|
|
117
124
|
}),
|
|
118
125
|
});
|
|
@@ -68,15 +68,15 @@ export function isMarkdownContextFile(target, fsPath) {
|
|
|
68
68
|
export function dispatchOpenMarkdownDocument(target, fsPath) {
|
|
69
69
|
const sourcePath = resolveSourcePath(target);
|
|
70
70
|
const resolvedFsPath = resolveContextFsPath(target, fsPath);
|
|
71
|
-
|
|
71
|
+
const assetId = resolveContextAssetId(target);
|
|
72
|
+
if (!resolvedFsPath && !assetId)
|
|
72
73
|
return false;
|
|
73
|
-
if (!isMarkdownContextFile(target, resolvedFsPath))
|
|
74
|
+
if (!isMarkdownContextFile(target, resolvedFsPath || undefined))
|
|
74
75
|
return false;
|
|
75
|
-
const assetId = resolveContextAssetId(target);
|
|
76
76
|
const event = new CustomEvent('taskforce:open-markdown-document', {
|
|
77
77
|
detail: {
|
|
78
78
|
path: sourcePath,
|
|
79
|
-
fsPath: resolvedFsPath,
|
|
79
|
+
...(resolvedFsPath ? { fsPath: resolvedFsPath } : {}),
|
|
80
80
|
...(assetId ? { assetId } : {}),
|
|
81
81
|
...((typeof target !== 'string' && target.taskId) ? { taskId: target.taskId } : {})
|
|
82
82
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@taskforcehq/taskforce",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.328",
|
|
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",
|
|
@@ -97,10 +97,13 @@
|
|
|
97
97
|
"test:sync:program-scaffold:postgres": "vitest run src/sync/v3/programScaffoldService.postgres.integration.test.ts",
|
|
98
98
|
"test:postgres:run": "node scripts/run-with-disposable-postgres.mjs --",
|
|
99
99
|
"test:postgres:smoke": "node scripts/run-with-disposable-postgres.mjs -- npm run test:sync:coordinator:postgres",
|
|
100
|
+
"test:cloud-read-workers:postgres": "npm run build && node scripts/run-with-disposable-postgres.mjs -- node scripts/run-cloud-collection-read-worker-gate.mjs",
|
|
100
101
|
"test:soak": "sh scripts/run-soak.sh",
|
|
101
102
|
"test:soak:smoke": "SYNC_SOAK_PROFILE=smoke sh scripts/run-soak.sh",
|
|
102
103
|
"test:soak:stress": "SYNC_SOAK_PROFILE=stress sh scripts/run-soak.sh",
|
|
103
104
|
"test:soak:overnight": "SYNC_SOAK_PROFILE=overnight sh scripts/run-soak.sh",
|
|
105
|
+
"test:aqr:contract": "vitest run scripts/aqr/execution-capsule.test.ts",
|
|
106
|
+
"aqr:smoke": "node --import tsx scripts/run-aqr-capsule.ts --contract-smoke",
|
|
104
107
|
"test:e2e:realtime": "sh scripts/run-e2e-realtime.sh",
|
|
105
108
|
"test:e2e:realtime:release": "npm run test:e2e:realtime -- tests/e2e/attachment-sync.spec.ts tests/e2e/realtime-multiclient.spec.ts tests/e2e/realtime-reconnect.spec.ts",
|
|
106
109
|
"test:e2e:realtime:attachments": "npm run test:e2e:realtime -- tests/e2e/attachment-sync.spec.ts",
|
|
@@ -139,6 +142,8 @@
|
|
|
139
142
|
"check:env:soak": "node --import tsx scripts/check-env.ts --target=soak --strict=true",
|
|
140
143
|
"check:mcp-smoke": "node scripts/check-cloud-mcp.mjs",
|
|
141
144
|
"check:mcp-connection": "node scripts/check-authenticated-mcp.mjs",
|
|
145
|
+
"check:mcp-latency": "node scripts/run-mcp-latency-gate.mjs",
|
|
146
|
+
"check:cloud-performance": "sh scripts/run-cloud-performance-gate.sh",
|
|
142
147
|
"check:committed-mcp-secrets": "node scripts/check-committed-mcp-secrets.mjs",
|
|
143
148
|
"test:committed-mcp-secrets": "node --test scripts/check-committed-mcp-secrets.test.mjs",
|
|
144
149
|
"check:native-deps": "node scripts/check-native-deps.cjs",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{R as _,j as o}from"./vendor-react-CKJs5o3c.js";import{i as k}from"./index-Cx7vZJHL.js";import{Y as v,a as I,f as N,g as x,e as w}from"./vendor-icons-B8ZNsH1g.js";const y=[{value:"updated",label:"Updated"},{value:"reference",label:"Reference"},{value:"name",label:"Name"},{value:"size",label:"Size"},{value:"created",label:"Created"}];function g(e){if(typeof e?.referenceNumber=="number"&&Number.isFinite(e.referenceNumber))return e.referenceNumber;const r=String(e?.referenceLabel||e?.imageReferenceLabel||"").match(/(\d+)/);return r?parseInt(r[1],10):0}function j(e){if(!e)return"";const t=e.displayName||e.title||e.originalFilename||e.fsPath||e.path||e.storageKey||"";return String(t).toLowerCase()}function C(e){return k(e).toLowerCase()}function m(e,t){return String(t(e)||"").toLowerCase()}function S(e){const t=e?.sizeBytes;return typeof t=="number"&&Number.isFinite(t)?t:0}function f(e,t){const r=e?.createdAt,l=e?.updatedAt,a=t?r||l:l||r;if(!a)return 0;const n=Date.parse(String(a));return Number.isNaN(n)?0:n}function A(e,t,r,l,a=j){let n=0;if(r==="reference"){const u=g(e),d=g(t);n=u-d,n===0&&(n=m(e,a).localeCompare(m(t,a)))}else r==="name"?n=m(e,a).localeCompare(m(t,a)):r==="size"?n=S(e)-S(t):r==="created"?n=f(e,!0)-f(t,!0):n=f(e,!1)-f(t,!1);return n!==0?l==="desc"?-n:n:(n=g(t)-g(e),n!==0?n:m(e,a).localeCompare(m(t,a)))}function D(e,t,r,l){return[...e].sort((a,n)=>A(a,n,t,r,l))}function q(e,t,r){return D(e,t,r,C)}const R="_root_7pmuk_1",O="_trigger_7pmuk_9",T="_directionToggle_7pmuk_10",z="_triggerOpen_7pmuk_38",$="_triggerLabel_7pmuk_45",F="_menu_7pmuk_51",E="_menuLabel_7pmuk_64",P="_menuItem_7pmuk_72",U="_menuItemActive_7pmuk_94",K="_menuItemLabel_7pmuk_99",c={root:R,trigger:O,directionToggle:T,triggerOpen:z,triggerLabel:$,menu:F,menuLabel:E,menuItem:P,menuItemActive:U,menuItemLabel:K};function G({field:e,order:t,onFieldChange:r,onOrderChange:l,className:a}){const[n,u]=_.useState(!1),d=_.useRef(null),p=y.find(s=>s.value===e)??y[0],L=t==="desc"?N:x;_.useEffect(()=>{if(!n)return;const s=b=>{d.current?.contains(b.target)||u(!1)},i=b=>{b.key==="Escape"&&u(!1)};return document.addEventListener("mousedown",s),document.addEventListener("keydown",i),()=>{document.removeEventListener("mousedown",s),document.removeEventListener("keydown",i)}},[n]);const h=s=>{r(s),u(!1)};return o.jsxs("div",{ref:d,className:`${c.root} ${a||""}`.trim(),children:[o.jsxs("button",{type:"button",className:`${c.trigger} ${n?c.triggerOpen:""}`.trim(),onClick:()=>u(s=>!s),"aria-haspopup":"menu","aria-expanded":n,"aria-label":`Sort tray by ${p.label}`,title:`Sort by ${p.label}`,children:[o.jsx(v,{size:13}),o.jsx("span",{className:c.triggerLabel,children:p.label}),o.jsx(I,{size:13})]}),o.jsx("button",{type:"button",className:c.directionToggle,onClick:()=>l(t==="desc"?"asc":"desc"),"aria-label":`Sort tray ${t==="desc"?"descending":"ascending"}`,title:t==="desc"?"Sort descending":"Sort ascending",children:o.jsx(L,{size:13})}),n?o.jsxs("div",{className:c.menu,role:"menu","aria-label":"Sort tray items",children:[o.jsx("div",{className:c.menuLabel,children:"Sort by"}),y.map(s=>{const i=s.value===e;return o.jsxs("button",{type:"button",role:"menuitemradio","aria-checked":i,className:`${c.menuItem} ${i?c.menuItemActive:""}`.trim(),onClick:()=>h(s.value),children:[o.jsx("span",{className:c.menuItemLabel,children:s.label}),i?o.jsx(w,{size:13}):null]},s.value)})]}):null]})}export{G as A,q as a,D as s};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{r as c,j as e}from"./vendor-react-CKJs5o3c.js";import{t as a,aY as le,aZ as ce,a_ as dt,aX as Ot,a$ as pt,u as ie,b0 as ue,b1 as de,R as pe,b2 as fe,b3 as he}from"./index-Cx7vZJHL.js";import{h as me,P as xe,b6 as J,V as ft,L as ge,X as we,q as ye,u as Ut,D as _t,T as Bt,e as Kt,b7 as be,$ as ke,E as Ce}from"./vendor-icons-B8ZNsH1g.js";import"./vendor-markdown-_lhNCyq-.js";import"./vendor-dnd-CJ-AjP-Y.js";import"./vendor-router-AqJMU8Lz.js";const Gt=[".png",".jpg",".jpeg",".webp",".gif",".pdf",".txt",".md",".csv",".json",".doc",".docx",".html",".js",".ts",".tsx",".css",".py",".java",".go",".rs",".sh"].join(","),je=new Set(["image/png","image/jpeg","image/webp"]),ve=new Set(Gt.split(",").map(r=>r.trim().toLowerCase())),Ee=10*1024*1024,Ae=3500;function Vt(r){const u=r.trim().toLowerCase(),g=u.lastIndexOf(".");return g===-1?"":u.slice(g)}function ht(r){if(r.length===0)return"";const u=r.slice(0,3).join(", "),g=r.length-3;return g>0?`${u}, +${g} more`:u}function Ne(r){return`${r.name.trim().toLowerCase()}::${r.size}::${r.lastModified}`}function G(r){return/\.(png|jpe?g|webp|gif)(\?|#|$)/i.test(r)}function Te(r){const u=r.types;if(!u)return null;for(const g of Array.from(u)){const C=String(g||"").trim().toLowerCase();if(je.has(C))return C}return null}function qt(r,u){const g=r.includes("?")?"&":"?";return`${r}${g}download=1&filename=${encodeURIComponent(u)}`}function Xt(r){return typeof r=="string"?r.split("/").pop()||"Context file":r.displayName||r.originalFilename||r.caption||r.fsPath||r.path.split("/").pop()||"Context file"}function De(r){const u=typeof r=="string"?[r]:[r.originalFilename,r.displayName,r.caption,r.fsPath,r.path];for(const C of u){if(!C)continue;const V=Vt(C);if(V)return V.replace(".","").slice(0,5).toUpperCase()}const g=typeof r=="string"?r:r.path;return/^https?:\/\//i.test(g)?"LINK":"FILE"}function ze(r){const{ownerType:u="task",ownerId:g,ownerReferenceLabel:C,workspaceId:V,attachments:T,onAddAttachment:mt,onRemoveAttachment:xt,onUpdateAttachmentCaption:Ht,readOnly:w=!1,defaultExpanded:tt=!0,supplementalContent:Zt}=r,D=c.useRef(null),et=c.useRef(null),[gt,nt]=c.useState(!1),[wt,v]=c.useState(null),[at,ot]=c.useState(""),[H,E]=c.useState(null),[P,j]=c.useState(null),[st,Z]=c.useState(tt),[L,A]=c.useState(!1),[K,S]=c.useState(!1),[N,m]=c.useState(null),[b,R]=c.useState(null),[Yt,yt]=c.useState(null),F=c.useRef(null);c.useEffect(()=>()=>{F.current!==null&&window.clearTimeout(F.current)},[]);const Qt=async t=>{try{await navigator.clipboard.writeText(t)}catch{const n=document.createElement("textarea");n.value=t,document.body.appendChild(n),n.select(),document.execCommand("copy"),n.remove()}yt(t),F.current!==null&&window.clearTimeout(F.current),F.current=window.setTimeout(()=>{yt(null),F.current=null},1200)},[bt,z]=c.useState(!1),[Le,M]=c.useState(0),kt=c.useRef(null),O=c.useRef(null),Ct=c.useRef(null),q=c.useRef(null),jt=c.useRef(null),U=c.useRef(null),vt=c.useRef(null),$=c.useRef(new Set),rt=c.useRef(new Set),Y=c.useRef(0),Et=c.useRef(""),At=t=>(t||"").trim(),Q=(t,n)=>{const o=[],s=At(t),d=At(n);return s&&o.push(`path:${s}`),d&&o.push(`fs:${d}`),o},lt=c.useMemo(()=>{const t=new Set;return T.forEach(n=>{if(typeof n=="string"){Q(n).forEach(o=>t.add(o));return}Q(n.path,n.fsPath).forEach(o=>t.add(o))}),t},[T]);c.useEffect(()=>{$.current=new Set(lt)},[lt]);const Nt=(t,n)=>n.some(o=>t.has(o)),Tt=(t,n)=>n.forEach(o=>t.add(o)),_=String(V||"").trim(),y=String(g||"").trim(),ct=`${_}\0${u}\0${y}`;c.useLayoutEffect(()=>(Et.current=ct,Y.current+=1,rt.current.clear(),$.current=new Set(lt),nt(!1),v(null),ot(""),E(null),j(null),Z(tt),A(!1),S(!1),m(null),R(null),z(!1),M(0),D.current&&(D.current.value=""),()=>{Y.current+=1}),[tt,ct]);const Wt=u==="initiative"?"initiative":u==="workstream"?"workstream":"task",Dt=(t,n=!0,o=$.current)=>{const s=t.trim();if(!s||!/^https?:\/\//i.test(s))return"invalid";const l=s,h=Q(l);if(Nt(o,h))return"duplicate";const p=s.split(/[\\/]/).pop()||s;return mt({path:l,caption:p,timestamp:new Date().toISOString()}),Tt(o,h),n&&ot(""),E(null),"added"};c.useEffect(()=>{if(!P)return;const t=window.setTimeout(()=>{j(null)},Ae);return()=>window.clearTimeout(t)},[P]),c.useEffect(()=>{if(!L&&N===null)return;const t=n=>{const o=n.target;L&&!kt.current?.contains(o)&&A(!1),N!==null&&!o?.closest('[data-context-actions-menu="true"]')&&m(null)};return document.addEventListener("pointerdown",t),()=>document.removeEventListener("pointerdown",t)},[N,L]),c.useEffect(()=>{K&&vt.current?.focus()},[K]),c.useEffect(()=>{L&&Ct.current?.focus()},[L]),c.useEffect(()=>{N!==null&&jt.current?.focus()},[N]),c.useEffect(()=>{w&&(A(!1),S(!1),m(null),R(null),z(!1),M(0))},[w]);const Lt=async t=>{if(t.length===0)return;const n=ct,o=Y.current,s=()=>Et.current===n&&Y.current===o;if(!s())return;v(null),j(null);const d=t,l=[],h=[],p=[],k=[],i=new Set(rt.current);d.forEach(x=>{const it=Vt(x.name);if(!ve.has(it)){l.push(x.name);return}if(x.size>Ee){h.push(x.name);return}const X=Ne(x);if(i.has(X)){p.push(x.name);return}i.add(X),k.push({file:x,fingerprint:X})});const I=[];if(l.length>0&&I.push(`${l.length} unsupported file${l.length===1?"":"s"} skipped: ${ht(l)}.`),h.length>0&&I.push(`${h.length} file${h.length===1?"":"s"} over 10 MB skipped: ${ht(h)}.`),p.length>0&&I.push(`${p.length} local duplicate file${p.length===1?"":"s"} skipped before upload: ${ht(p)}.`),k.length===0){I.length>0&&j(I.join(" ")),D.current&&(D.current.value="");return}nt(!0);const f=new Set($.current);let W=0;try{for(const{file:it,fingerprint:X}of k){const ut=await fe(it,{ownerType:u,ownerId:y||null,workspaceId:_||null});if(!s())return;const Mt=Q(ut.path,ut.fsPath);if(Nt(f,Mt)){W+=1;continue}mt(ut),he({workspaceId:_||"default",ownerType:u,ownerId:y||null,taskId:u==="task"&&y||null,reason:"upload"}),Tt(f,Mt),rt.current.add(X)}if(!s())return;const x=[...I];W>0&&x.push(`${W} duplicate file${W===1?"":"s"} skipped.`),j(x.length>0?x.join(" "):null),$.current=f}catch(x){s()&&v(x instanceof Error?x.message:"Failed to upload context file")}finally{s()&&(nt(!1),D.current&&(D.current.value=""))}},Rt=async t=>{!t||t.length===0||await Lt(Array.from(t))},Jt=async()=>{if(v(null),j(null),!navigator.clipboard||typeof navigator.clipboard.read!="function"){v("Clipboard image paste is not available in this browser.");return}try{const t=await navigator.clipboard.read(),n=[];for(const o of t){const s=Te(o);if(!s)continue;const d=await o.getType(s),l=s.toLowerCase()==="image/png"?"png":s.toLowerCase()==="image/webp"?"webp":"jpg";n.push(new globalThis.File([d],`pasted-image-${Date.now()}.${l}`,{type:s}))}if(n.length===0){v("Clipboard does not currently contain a supported image.");return}await Lt(n)}catch(t){v(t?.message||"Failed to read an image from the clipboard.")}},te=t=>{const n=new Set,o=t.dataTransfer.getData("text/uri-list")||"",s=t.dataTransfer.getData("text/plain")||"",d=`${o}
|
|
2
|
-
${s}`.split(`
|
|
3
|
-
`).map(l=>l.trim()).filter(l=>!!l&&!l.startsWith("#"));for(const l of d){if(/^file:\/\//i.test(l)){try{const h=new URL(l),p=decodeURIComponent(h.pathname||"").trim();p&&n.add(p)}catch{}continue}n.add(l)}return Array.from(n)},ee=t=>{if(t.preventDefault(),t.stopPropagation(),z(!1),M(0),v(null),E(null),j(null),t.dataTransfer.files&&t.dataTransfer.files.length>0){Rt(t.dataTransfer.files);return}const n=te(t);if(n.length===0){v("Drop a file or URL.");return}const o=new Set($.current);let s=0,d=0,l=0;n.forEach(p=>{const k=Dt(p,!1,o);k==="duplicate"&&(s+=1),k==="added"&&(d+=1),k==="invalid"&&(l+=1)});const h=[];s>0&&h.push(`${s} duplicate link${s===1?"":"s"} skipped.`),l>0&&h.push(`${l} local path${l===1?"":"s"} skipped. Upload files to attach them, or drop an http(s) URL to link.`),j(h.length>0?h.join(" "):d>0?null:P),$.current=o},ne=t=>{t.preventDefault(),t.stopPropagation(),M(n=>n+1),z(!0)},ae=t=>{t.preventDefault(),t.stopPropagation(),M(n=>{const o=Math.max(0,n-1);return o===0&&z(!1),o})},oe=t=>{t.preventDefault(),t.stopPropagation(),t.dataTransfer.dropEffect="copy"},se=()=>{Z(!0),S(!1),E(null),m(null),A(t=>!t)},re=()=>{Z(!0),A(!1),S(!0),E(null)},It=()=>{S(!1),E(null),window.requestAnimationFrame(()=>O.current?.focus())},St=()=>{if(!at.trim()){E("Enter an http(s) URL to link.");return}const t=Dt(at,!0);if(t==="invalid"){E("Only external http(s) URLs can be linked here. Upload files to attach them.");return}if(t==="duplicate"){j(`Link already exists in ${Wt} context.`);return}j(null),S(!1),window.requestAnimationFrame(()=>O.current?.focus())},$t=(t,n)=>{m(null),R({index:t,value:n,originalValue:n})},B=(t=!1)=>{if(!b)return;const n=b.index,o=b.value.trim();o!==b.originalValue&&Ht(b.index,o),R(null),t&&window.requestAnimationFrame(()=>{if(U.current?.isConnected){U.current.focus();return}et.current?.querySelector(`[data-context-caption-index="${n}"]`)?.focus()})},Pt=()=>{const t=b?.index;R(null),window.requestAnimationFrame(()=>{if(U.current?.isConnected){U.current.focus();return}t!==void 0&&et.current?.querySelector(`[data-context-caption-index="${t}"]`)?.focus()})},Ft=T.filter(t=>{const n=typeof t=="string"?t:t.path;return G(n)}),zt=T.filter(t=>{const n=typeof t=="string"?t:t.path;return!G(n)});return e.jsxs("div",{ref:et,className:a.specialistSection,children:[e.jsx(le,{label:"Context",count:T.length,showZeroCount:!0,expanded:st,expandedTitle:"Hide context",collapsedTitle:"Show context",onToggle:()=>{const t=!st;Z(t),t||(A(!1),S(!1),m(null),R(null),z(!1),M(0))},actions:w?void 0:e.jsxs("div",{ref:kt,className:a.contextMenuControl,onKeyDown:t=>{t.key!=="Escape"||!L||(t.preventDefault(),t.stopPropagation(),A(!1),O.current?.focus())},children:[e.jsx("button",{ref:O,type:"button",className:"tf-control-icon","aria-label":"Add context",title:"Add context","aria-expanded":L,onClick:se,disabled:gt,children:gt?e.jsx(me,{size:14,className:a.spinner}):e.jsx(xe,{size:14})}),L&&e.jsxs("div",{className:`${a.contextMenu} ${a.contextAddMenu}`,role:"group","aria-label":"Add context",children:[e.jsxs("button",{ref:Ct,type:"button",onClick:()=>{A(!1),O.current?.focus(),D.current?.click()},children:[e.jsx(J,{size:14}),"Upload file"]}),e.jsxs("button",{type:"button",onClick:()=>{A(!1),O.current?.focus(),Jt()},children:[e.jsx(ft,{size:14}),"Paste image"]}),e.jsxs("button",{type:"button",onClick:re,children:[e.jsx(ge,{size:14}),"Add link"]})]})]})}),!w&&e.jsx("input",{ref:D,type:"file",accept:Gt,multiple:!0,className:a.hiddenInput,onChange:t=>{Rt(t.target.files)}}),st&&e.jsxs("div",{className:`${a.contextContent} ${bt?a.contextContentDropActive:""}`,role:"region","aria-label":"Context attachments",onDragEnter:w?void 0:ne,onDragLeave:w?void 0:ae,onDragOver:w?void 0:oe,onDrop:w?void 0:ee,children:[bt&&e.jsxs("div",{className:a.contextDropOverlay,"aria-hidden":"true",children:[e.jsx(J,{size:18}),"Drop files or URLs here"]}),Zt,K&&e.jsxs("div",{className:a.contextLinkComposer,children:[e.jsx("input",{ref:vt,type:"text",className:a.input,"aria-label":"External context URL","aria-invalid":!!H,placeholder:"Add external URL (https://...)",value:at,onChange:t=>{ot(t.target.value),H&&E(null),P&&j(null)},onKeyDown:t=>{t.key==="Enter"&&(t.preventDefault(),t.stopPropagation(),St()),t.key==="Escape"&&(t.preventDefault(),t.stopPropagation(),It())}}),e.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",onClick:St,children:"Add link"}),e.jsx("button",{type:"button",className:"tf-control-icon tf-control-icon-compact","aria-label":"Cancel adding link",title:"Cancel",onClick:()=>{It()},children:e.jsx(we,{size:14})})]}),wt&&e.jsx("div",{className:a.error,role:"alert",children:wt}),P&&e.jsx("div",{className:a.contextNotice,role:"status",children:P}),K&&H&&e.jsx("div",{className:a.error,role:"alert",children:H}),T.length===0&&!K&&e.jsxs("div",{className:a.contextEmptyState,children:[e.jsx(J,{size:14}),e.jsx("span",{children:"Drop files here"})]}),Ft.length>0&&e.jsxs("section",{"aria-label":"Images",children:[zt.length>0&&e.jsx("div",{className:a.contextGroupLabel,children:"Images"}),e.jsx("div",{className:a.attachmentGrid,children:T.map((t,n)=>{const o=typeof t=="string"?t:t.path;if(!G(o))return null;const s=typeof t=="string"?void 0:t.fsPath,d=typeof t=="string"?"":t.caption||"",l=Xt(t),h=G(o),p=/^https?:\/\//i.test(o),k=u==="task"&&ce(t);return e.jsxs("div",{className:a.attachmentCard,children:[e.jsxs("div",{className:a.attachmentPreviewContainer,children:[h?e.jsx("button",{type:"button",className:a.attachmentPreviewButton,"aria-label":`Open ${d||l}`,onClick:()=>{dt(t,{ownerType:u,ownerId:y||null,ownerReferenceLabel:C,workspaceId:_||null})||u==="task"&&Ot(t,{taskId:y,taskReferenceLabel:C})||window.open(o,"_blank")},children:e.jsx("img",{src:o,alt:"",onError:i=>{i.currentTarget.style.display="none",i.currentTarget.parentElement?.parentElement?.classList.add(a.brokenImage)}})}):e.jsxs("button",{type:"button",className:a.contextFileLink,onClick:()=>{const i=u==="task"?typeof t=="string"?{path:t,taskId:y}:{...t,taskId:y}:t;pt(i,s)||window.open(o,"_blank")},title:"Open file",children:[e.jsx(J,{size:16}),e.jsx("span",{children:d||s||o.split("/").pop()||"Context file"})]}),e.jsxs("div",{className:a.brokenImagePlaceholder,children:[e.jsx(ye,{size:16}),e.jsx("span",{children:"Preview unavailable"})]}),e.jsxs("div",{className:a.attachmentActions,children:[k&&e.jsx("button",{type:"button",className:a.attachmentActionBtn,onClick:i=>{i.stopPropagation(),Ot(t,{taskId:y,taskReferenceLabel:C})},title:"Annotate",children:e.jsx(Ut,{size:12})}),s&&e.jsx("button",{type:"button",className:a.attachmentActionBtn,onClick:i=>{i.stopPropagation(),navigator.clipboard.writeText(s)},title:`Copy path: ${s}`,children:e.jsx(ft,{size:12})}),!p&&e.jsx("button",{type:"button",className:a.attachmentActionBtn,onClick:i=>{i.stopPropagation(),window.open(qt(o,d||l),"_blank")},title:"Download",children:e.jsx(_t,{size:12})}),!w&&e.jsx("button",{type:"button",className:a.attachmentActionBtn,onClick:i=>{i.stopPropagation(),xt(n)},title:"Delete",children:e.jsx(Bt,{size:12})})]})]}),b?.index===n?e.jsxs("div",{className:a.contextCaptionEditor,onBlur:i=>{i.currentTarget.contains(i.relatedTarget)||B(!1)},children:[e.jsx("input",{autoFocus:!0,type:"text",className:a.attachmentCaptionInput,"aria-label":`Rename ${l}`,value:b.value,onChange:i=>R({...b,value:i.target.value}),onKeyDown:i=>{i.key==="Enter"&&(i.preventDefault(),i.stopPropagation(),B(!0)),i.key==="Escape"&&(i.preventDefault(),i.stopPropagation(),Pt())}}),e.jsx("button",{type:"button",className:"tf-control-icon tf-control-icon-compact","aria-label":"Save label",onClick:()=>B(!0),children:e.jsx(Kt,{size:12})})]}):w?e.jsx("span",{className:a.attachmentCaptionLabel,children:d||l}):e.jsx("button",{type:"button",className:a.attachmentCaptionLabel,"data-context-caption-index":n,title:"Edit label",onClick:i=>{U.current=i.currentTarget,$t(n,d)},children:d||l})]},n)})})]}),zt.length>0&&e.jsxs("section",{"aria-label":"Documents",children:[Ft.length>0&&e.jsx("div",{className:a.contextGroupLabel,children:"Documents"}),e.jsx("div",{className:a.documentAttachmentList,children:T.map((t,n)=>{const o=typeof t=="string"?t:t.path;if(G(o))return null;const s=typeof t=="string"?void 0:t.fsPath,d=typeof t=="string"?"":t.caption||"",l=Xt(t),h=De(t),p=typeof t=="string"?"":ie(t),k=/^https?:\/\//i.test(o),i=u==="task"?typeof t=="string"?{path:t,taskId:y}:{...t,taskId:y}:t,I=ue(i,s)&&!!de(i,s);return e.jsxs("div",{className:a.documentAttachmentItem,children:[e.jsxs("div",{className:a.documentAttachmentRow,children:[e.jsxs("div",{className:a.documentAttachmentMain,children:[p&&e.jsx(pe,{label:p,copied:Yt===p,title:`Copy document reference ${p}`,ariaLabel:`Copy document reference ${p}`,className:a.documentAttachmentReference,onClick:()=>{Qt(p)}}),e.jsx("button",{type:"button",className:a.documentAttachmentLink,onClick:()=>{dt(t,{ownerType:u,ownerId:y||null,ownerReferenceLabel:C,workspaceId:_||null})||pt(i,s)||window.open(o,"_blank")},title:l,"aria-label":`${d||l} ${h}`,children:e.jsx("span",{className:a.documentAttachmentName,children:d||l})}),e.jsxs("span",{className:a.documentAttachmentType,children:[e.jsxs("svg",{className:a.documentAttachmentTypeOutline,viewBox:"0 0 28 28","aria-hidden":"true",focusable:"false",children:[e.jsx("path",{d:"M2 0.75h18.25l7 7V26q0 1.25-1.25 1.25H2Q0.75 27.25 0.75 26V2Q0.75 0.75 2 0.75Z"}),e.jsx("path",{className:a.documentAttachmentTypeFoldFill,d:"M20.25 0.75v7h7Z"}),e.jsx("path",{className:a.documentAttachmentTypeFoldLine,d:"M20.25 0.75v7h7"})]}),e.jsx("span",{className:a.documentAttachmentTypeLabel,children:h})]})]}),(!w||!!s||!k)&&e.jsxs("div",{className:a.contextMenuControl,"data-context-actions-menu":"true",onKeyDown:f=>{f.key!=="Escape"||N!==n||(f.preventDefault(),f.stopPropagation(),m(null),q.current?.focus())},children:[e.jsx("button",{type:"button",className:"tf-control-icon tf-control-icon-compact","aria-label":`Actions for ${l}`,title:"More actions","aria-expanded":N===n,onClick:f=>{q.current=f.currentTarget,m(N===n?null:n)},children:e.jsx(be,{size:14})}),N===n&&e.jsxs("div",{className:`${a.contextMenu} ${a.contextActionsMenu}`,role:"group","aria-label":`Actions for ${l}`,children:[e.jsxs("button",{ref:jt,type:"button",onClick:()=>{dt(t,{ownerType:u,ownerId:y||null,ownerReferenceLabel:C,workspaceId:_||null})||window.open(o,"_blank"),m(null)},children:[e.jsx(ke,{size:14})," Preview"]}),I&&e.jsxs("button",{type:"button",onClick:()=>{pt(i,s)||window.open(o,"_blank"),m(null)},children:[e.jsx(Ce,{size:14})," Open in Documents"]}),!w&&e.jsxs("button",{type:"button",onClick:()=>{U.current=q.current,$t(n,d),m(null)},children:[e.jsx(Ut,{size:14})," Rename"]}),s&&e.jsxs("button",{type:"button",onClick:()=>{navigator.clipboard.writeText(s),m(null),window.requestAnimationFrame(()=>q.current?.focus())},children:[e.jsx(ft,{size:14})," Copy path"]}),!k&&e.jsxs("button",{type:"button",onClick:()=>{window.open(qt(o,d||l),"_blank"),m(null),window.requestAnimationFrame(()=>q.current?.focus())},children:[e.jsx(_t,{size:14})," Download"]}),!w&&e.jsxs("button",{type:"button",className:a.contextDestructiveMenuItem,onClick:()=>{xt(n),m(null)},children:[e.jsx(Bt,{size:14})," Delete"]})]})]})]}),b?.index===n&&e.jsxs("div",{className:a.contextCaptionEditor,onBlur:f=>{f.currentTarget.contains(f.relatedTarget)||B(!1)},children:[e.jsx("input",{autoFocus:!0,type:"text",className:a.documentAttachmentCaptionInput,"aria-label":`Rename ${l}`,value:b.value,onChange:f=>R({...b,value:f.target.value}),onKeyDown:f=>{f.key==="Enter"&&(f.preventDefault(),f.stopPropagation(),B(!0)),f.key==="Escape"&&(f.preventDefault(),f.stopPropagation(),Pt())}}),e.jsx("button",{type:"button",className:"tf-control-icon tf-control-icon-compact","aria-label":"Save label",onClick:()=>B(!0),children:e.jsx(Kt,{size:12})})]})]},n)})})]})]})]})}export{ze as ContextAttachmentManager};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{R as I,j as n}from"./vendor-react-CKJs5o3c.js";import{aS as U,aT as E,v as q,aU as G,aV as J,aW as Q}from"./index-Cx7vZJHL.js";import"./vendor-icons-B8ZNsH1g.js";import"./vendor-markdown-_lhNCyq-.js";import"./vendor-dnd-CJ-AjP-Y.js";import"./vendor-router-AqJMU8Lz.js";const V="_thread_1di31_1",X="_empty_1di31_7",Y="_item_1di31_17",Z="_comment_1di31_24",tt="_event_1di31_31",et="_eventSystem_1di31_39",nt="_header_1di31_43",ot="_eventMain_1di31_57",at="_author_1di31_64",rt="_time_1di31_79",st="_commentText_1di31_86",it="_commentOtherActor_1di31_97",ct="_commentSystem_1di31_112",mt="_commentCurrentActor_1di31_125",dt="_eventText_1di31_140",lt="_eventChanges_1di31_148",ht="_eventChange_1di31_148",e={thread:V,empty:X,item:Y,comment:Z,event:tt,eventSystem:et,header:nt,eventMain:ot,author:at,time:rt,commentText:st,commentOtherActor:it,commentSystem:ct,commentCurrentActor:mt,eventText:dt,eventChanges:lt,eventChange:ht};function Ct({activity:p,comments:C,formatFieldValue:j,resolveActorPresentation:s,currentActorId:y,taskReferences:L,emptyMessage:z="No activity yet.",listClassName:w,emptyClassName:B,listRef:M,endRef:O,onScroll:P,targetEntryId:K,targetEntryRef:A}){const T=I.useMemo(()=>U({activity:p,comments:C}),[p,C]),i=String(y||"").trim().toLowerCase(),c=String(K||"").trim(),_=i!==""&&i!=="anonymous",b=I.useMemo(()=>_?s({actorId:y,actorType:"human",fallbackKind:"member"}):null,[y,_,s]),g=String(b?.label||"").trim(),m=g.toLowerCase(),W=!!(b?.kind==="member"&&g&&m!=="you"&&m!=="user"&&m!=="human"&&m!==i);return n.jsxs("div",{ref:M,className:[e.thread,w].filter(Boolean).join(" "),onScroll:P,children:[T.length===0?n.jsx("div",{className:[e.empty,B].filter(Boolean).join(" "),children:z}):null,T.map(t=>{const a=!!(c&&(t.id===c||t.type==="comment"&&t.comment.id===c||t.type==="event"&&t.event.id===c));if(t.type==="comment"){const o=s({actorId:t.comment.author,actorType:t.comment.actor?.kind==="ai"?"ai":t.comment.actor?.kind==="human"?"human":null,actorProfile:t.comment.actor||null}),r=o.kind==="agent"?"agent":o.kind==="system"?"system":"member",h=String(t.comment.author||"").trim().toLowerCase(),v=String(t.comment.actor?.id||"").trim().toLowerCase(),$=[h,v].map(H=>String(H||"").trim().toLowerCase()).filter(Boolean),x=_?!!(v&&v!=="user"&&v!=="human"||h&&h!=="user"&&h!=="human")?$.includes(i):o.isCurrentActorHint===!0:r==="member",k=x&&o.label.trim().toLowerCase()==="you"&&W?g:o.label,{ActorIcon:D}=o,u=o.kind==="system"?void 0:o.color,F=u?{"--conversation-accent":u}:void 0;return n.jsxs("div",{ref:a?A:void 0,tabIndex:a?-1:void 0,"data-activity-entry-id":t.id,"data-activity-targeted":a?"true":void 0,"data-conversation-role":r==="agent"?"assistant":r==="system"?"system":"user","data-conversation-side":x?"outgoing":"incoming",style:F,className:[e.item,e.comment,r==="system"?e.commentSystem:"",x?e.commentCurrentActor:e.commentOtherActor].join(" "),children:[n.jsxs("div",{className:e.header,children:[n.jsxs("span",{className:e.author,style:u?{color:u}:void 0,title:o.description,"aria-label":o.description?`${k}. ${o.description}`:void 0,children:[n.jsx(D,{size:12,strokeWidth:1.5}),k]}),n.jsx("time",{className:e.time,dateTime:t.comment.timestamp,children:E(t.comment.timestamp,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})})]}),n.jsx("div",{className:e.commentText,children:n.jsx(q,{variant:"conversation",taskReferences:L,children:t.comment.text})})]},t.id)}const d=s({actorId:t.event.actor,actorType:t.event.actorType,actorProfile:t.event.actorProfile||null,fallbackKind:"system"}),{ActorIcon:R}=d,f=d.color,l=Object.entries(t.event.details?.changes||{}),S=G(t.event),N=l.length>1&&S?l.filter(([o])=>o!==S):l.length>1?l:[];return n.jsx("div",{ref:a?A:void 0,tabIndex:a?-1:void 0,"data-activity-entry-id":t.id,"data-activity-targeted":a?"true":void 0,className:[e.item,e.event,d.kind==="system"?e.eventSystem:""].filter(Boolean).join(" "),children:n.jsxs("div",{className:e.eventMain,children:[n.jsxs("span",{className:e.author,style:f?{color:f}:void 0,children:[n.jsx(R,{size:12,strokeWidth:1.5}),d.label]}),n.jsxs("div",{className:e.eventText,children:[n.jsx("div",{children:J(t.event,j)}),N.length>0?n.jsx("div",{className:e.eventChanges,children:N.map(([o,r])=>n.jsx("div",{className:e.eventChange,children:Q(o,r,j)},o))}):null]}),n.jsx("time",{className:e.time,dateTime:t.event.createdAt,children:E(t.event.createdAt,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})})]})},t.id)}),n.jsx("div",{ref:O})]})}export{Ct as EntityActivityTimeline};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
._module_xhzgd_1{container-name:planning-workspace;container-type:inline-size;display:flex;flex:1;width:100%;min-width:0;min-height:0;flex-direction:column;overflow:hidden;color:var(--text-primary);background:var(--surface-page)}._columns_xhzgd_15{display:grid;grid-template-columns:repeat(3,minmax(240px,1fr));flex:1;min-height:0;overflow-x:auto}._column_xhzgd_15{display:flex;min-width:240px;min-height:0;flex-direction:column;border-right:1px solid var(--border-primary);background:color-mix(in srgb,var(--surface-panel) 65%,var(--surface-elevated))}._column_xhzgd_15:last-child{border-right:0}._columnHeader_xhzgd_36{height:58px;min-height:58px;flex:0 0 58px;box-sizing:border-box;padding:12px 16px;display:flex;align-items:center;justify-content:space-between;gap:12px;border-bottom:1px solid var(--border-primary)}._columnHeadingGroup_xhzgd_49{min-width:0;display:flex;align-items:center;gap:8px}._paneHeading_xhzgd_56:focus{outline:none}._responsiveBack_xhzgd_60{display:none}._sectionLabel_xhzgd_64{margin:0}._sectionHeadingRow_xhzgd_68{min-height:32px;display:flex;align-items:center;justify-content:space-between;gap:8px}._columnHeader_xhzgd_36 span{color:var(--text-muted);font-size:12px}._headerActions_xhzgd_81{display:flex;align-items:center;gap:8px}._portfolioControls_xhzgd_87{padding:10px 12px;display:flex;flex-direction:column;gap:8px;border-bottom:1px solid var(--border-primary)}._searchRow_xhzgd_95{display:flex;align-items:center;gap:8px}._searchShell_xhzgd_101{min-width:0;height:34px;flex:1;padding:0 7px 0 9px;display:flex;align-items:center;gap:7px;border:1px solid var(--border-default);border-radius:var(--radius-md);color:var(--text-secondary);background:color-mix(in srgb,var(--surface-inset) 82%,transparent)}._searchShell_xhzgd_101:focus-within{border-color:var(--brand-primary-border);box-shadow:0 0 0 2px color-mix(in srgb,var(--brand-primary-border) 24%,transparent)}._searchShell_xhzgd_101 input{min-width:0;flex:1;border:0;outline:0;color:var(--text-primary);background:transparent;font:inherit;font-size:12px}._searchShell_xhzgd_101 input::placeholder{color:var(--text-helper)}._searchShell_xhzgd_101 input::-webkit-search-cancel-button{appearance:none}._clearSearch_xhzgd_139{width:24px;height:24px;flex:0 0 24px;padding:0;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:6px;color:var(--text-secondary);background:transparent;cursor:pointer}._clearSearch_xhzgd_139:hover,._clearSearch_xhzgd_139:focus-visible{color:var(--text-primary);background:var(--surface-hover)}._controlActive_xhzgd_160{border-color:var(--brand-primary-border);color:var(--brand-primary);background:var(--brand-primary-soft)}._filterPanel_xhzgd_166{padding:8px;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;align-items:end;gap:8px;border:1px solid var(--border-default);border-radius:var(--radius-md);background:color-mix(in srgb,var(--surface-panel) 74%,transparent)}._filterField_xhzgd_177{min-width:0;display:flex;flex-direction:column;gap:4px}._filterLabel_xhzgd_184{color:var(--text-secondary);font-size:11px;font-weight:650}._filterDropdown_xhzgd_190{width:100%}._filterDropdown_xhzgd_190 .taxonomyDropdownButton{min-height:32px;padding:4px 6px;font-size:12px}._filterDropdown_xhzgd_190 .taxonomyDropdownButtonContent{min-height:22px}._sortTrigger_xhzgd_204{min-width:0;display:flex;align-items:center;gap:7px}._sortTrigger_xhzgd_204 span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._scrollRegion_xhzgd_217{display:flex;min-height:0;flex:1;flex-direction:column;gap:8px;padding:12px 12px 20px;overflow-y:auto}._selectedEntityContext_xhzgd_227{padding:12px;display:flex;flex-direction:column;gap:8px;border:1px solid var(--border-primary);border-radius:var(--radius-md);background:var(--surface-elevated)}._selectedEntityContextArchived_xhzgd_237{opacity:.7;filter:saturate(.45)}._selectedEntityReferenceRow_xhzgd_242{display:flex;align-items:center;justify-content:space-between;gap:8px}._selectedEntityReferenceRow_xhzgd_242>span:last-child{color:var(--text-muted);font-size:11px;font-weight:650;letter-spacing:.04em;text-transform:uppercase}._selectedEntityReferenceIdentity_xhzgd_257{min-width:0;display:inline-flex;align-items:center;gap:8px}._selectedEntityReferenceActions_xhzgd_264{display:flex;align-items:center;gap:8px}._selectedEntityReferenceActions_xhzgd_264>span{color:var(--text-muted);font-size:11px;font-weight:650;letter-spacing:.04em;text-transform:uppercase}._workspaceEditor_xhzgd_278{padding:12px;display:flex;flex-direction:column;gap:10px;border:1px solid var(--brand-primary-border);border-radius:var(--radius-md);background:var(--surface-elevated)}._selectedEntityContext_xhzgd_227 ._workspaceEditor_xhzgd_278{padding:0;border:0;background:transparent}._workspaceEditorField_xhzgd_294{display:flex;flex-direction:column;gap:5px}._workspaceEditorField_xhzgd_294>label,._workspaceEditorField_xhzgd_294>span{color:var(--text-secondary);font-size:11px;font-weight:650}._workspaceEditorField_xhzgd_294 input,._workspaceEditorField_xhzgd_294 textarea{width:100%;border:1px solid var(--border-default);border-radius:var(--radius-md);color:var(--text-primary);background:var(--surface-inset);font:inherit;font-size:12px}._workspaceEditorField_xhzgd_294 input{min-height:34px;padding:6px 8px}._workspaceEditorField_xhzgd_294 textarea{min-height:108px;padding:8px;resize:vertical;line-height:1.45}._workspaceEditorField_xhzgd_294 input:focus,._workspaceEditorField_xhzgd_294 textarea:focus{border-color:var(--brand-primary-border);outline:0;box-shadow:0 0 0 2px color-mix(in srgb,var(--brand-primary-border) 24%,transparent)}._workspaceEditorActions_xhzgd_337{display:flex;align-items:center;justify-content:flex-end;gap:8px}._selectedEntityContext_xhzgd_227 h3{margin:0}._selectedEntityDescription_xhzgd_348{max-height:clamp(120px,22vh,260px);padding:8px 10px;border:1px solid var(--border-primary);background:var(--task-card-surface)}._selectedEntityDescriptionMarkdown_xhzgd_355{color:var(--text-secondary);font-size:12px;line-height:1.55}._selectedEntityOwnerField_xhzgd_361{display:flex;flex-direction:column;gap:4px}._selectedEntityOwnerField_xhzgd_361>span{color:var(--text-secondary);font-size:11px;font-weight:650}._selectedEntityOwnerDropdown_xhzgd_373{width:100%}._selectedEntityDetailsSection_xhzgd_377{padding-top:9px;border-top:1px solid var(--border-primary)}._activityTimelineList_xhzgd_382{margin-top:8px;display:flex;flex-direction:column;gap:8px}._activityTimelineEmpty_xhzgd_389{padding:14px 0 4px}._visuallyHidden_xhzgd_393{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}._entityCard_xhzgd_405{width:100%;padding:12px;display:flex;flex-direction:column;align-items:stretch;gap:7px;border:1px solid var(--border-primary);border-radius:var(--radius-md);color:var(--text-primary);background:var(--task-card-surface);text-align:left}._entityCard_xhzgd_405:hover{border-color:var(--brand-primary-border);background:linear-gradient(var(--surface-hover),var(--surface-hover)),var(--task-card-surface)}._entityCardTopRow_xhzgd_426{min-width:0;display:flex;align-items:center;gap:8px}._entityCardBody_xhzgd_433{width:100%}._entityCardContentButton_xhzgd_437{width:100%;padding:0;border:0;color:inherit;background:transparent;text-align:left;cursor:pointer}._entityCardSelected_xhzgd_447{border-color:var(--brand-primary-border);background:var(--planning-card-selected-overlay),var(--task-card-surface);box-shadow:inset 3px 0 0 var(--brand-primary)}._entityCardArchived_xhzgd_455{opacity:.7;filter:saturate(.45)}._relationshipPickerRow_xhzgd_460{display:flex;align-items:center;gap:8px}._relationshipRecovery_xhzgd_466{padding:8px;display:flex;align-items:center;justify-content:space-between;gap:8px;border:1px solid var(--border-default);border-radius:var(--radius-md);color:var(--text-secondary);background:var(--surface-inset);font-size:12px}._relationshipRecovery_xhzgd_466>span{min-width:0;flex:1}._sectionLabel_xhzgd_64{padding:10px 4px 2px}._empty_xhzgd_488{margin:auto;padding:24px;font-style:italic;text-align:center}._centerState_xhzgd_495{display:flex;min-height:0;flex:1;align-items:center;justify-content:center;flex-direction:column;gap:10px;padding:32px;color:var(--text-secondary);background:var(--surface-page);text-align:center}._inlineError_xhzgd_509{padding:9px 16px;display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--border-primary);color:var(--text-secondary);background:var(--surface-elevated);font-size:13px}._inlineError_xhzgd_509 button{margin-left:auto}._spinner_xhzgd_524{animation:_spin_xhzgd_524 .9s linear infinite}@keyframes _spin_xhzgd_524{to{transform:rotate(360deg)}}@container planning-workspace (max-width: 1050px){._columns_xhzgd_15{grid-template-columns:repeat(2,minmax(0,1fr));overflow-x:hidden}._column_xhzgd_15{min-width:0;display:none}._columnPortfolio_xhzgd_543,._columnActive_xhzgd_544,._columns_xhzgd_15[data-active-pane=portfolio] ._columnWorkstreams_xhzgd_545{display:flex}._columnWorkstreams_xhzgd_545,._columnTasks_xhzgd_550{border-right:0}._columns_xhzgd_15[data-active-pane=tasks] ._columnTasks_xhzgd_550 ._responsiveBack_xhzgd_60{display:inline-flex}}@container planning-workspace (max-width: 680px){._columns_xhzgd_15{grid-template-columns:minmax(0,1fr)}._columnPortfolio_xhzgd_543,._columnActive_xhzgd_544,._columns_xhzgd_15[data-active-pane=portfolio] ._columnWorkstreams_xhzgd_545{display:none}._columnActive_xhzgd_544{display:flex;border-right:0}._columnWorkstreams_xhzgd_545._columnActive_xhzgd_544 ._responsiveBack_xhzgd_60,._columnTasks_xhzgd_550._columnActive_xhzgd_544 ._responsiveBack_xhzgd_60{display:inline-flex}._filterPanel_xhzgd_166{grid-template-columns:minmax(0,1fr) auto}._filterField_xhzgd_177{grid-column:1 / -1}._filterPanel_xhzgd_166>button{grid-column:2}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{R as s,j as t}from"./vendor-react-CKJs5o3c.js";import{am as $e,an as Pe,ao as We,ap as De,aq as ke,ar as le,T as Fe,as as xe,at as ie,au as Y,av as H,aw as K,ax as He,ay as Be,az as Me,aA as Ue,aB as Ge,aC as Ve,aD as Ce,aE as ce,aF as Ee,aG as Ke,aH as qe,aI as Qe,aJ as Je,aK as Xe}from"./index-Cx7vZJHL.js";import{h as re,q as me,R as oe,_ as Ye,$ as Ze,S as et,X as we,a0 as tt,Y as nt,P as se,Z as be,p as ae,L as it,A as st,y as at}from"./vendor-icons-B8ZNsH1g.js";import"./vendor-markdown-_lhNCyq-.js";import"./vendor-dnd-CJ-AjP-Y.js";import"./vendor-router-AqJMU8Lz.js";const rt="_module_xhzgd_1",ot="_columns_xhzgd_15",lt="_column_xhzgd_15",ct="_columnHeader_xhzgd_36",dt="_columnHeadingGroup_xhzgd_49",ut="_paneHeading_xhzgd_56",ht="_responsiveBack_xhzgd_60",pt="_sectionLabel_xhzgd_64",vt="_sectionHeadingRow_xhzgd_68",gt="_headerActions_xhzgd_81",ft="_portfolioControls_xhzgd_87",yt="_searchRow_xhzgd_95",kt="_searchShell_xhzgd_101",xt="_clearSearch_xhzgd_139",mt="_controlActive_xhzgd_160",wt="_filterPanel_xhzgd_166",bt="_filterField_xhzgd_177",_t="_filterLabel_xhzgd_184",jt="_filterDropdown_xhzgd_190",Ct="_sortTrigger_xhzgd_204",Et="_scrollRegion_xhzgd_217",St="_selectedEntityContext_xhzgd_227",Nt="_selectedEntityContextArchived_xhzgd_237",It="_selectedEntityReferenceRow_xhzgd_242",At="_selectedEntityReferenceIdentity_xhzgd_257",Rt="_selectedEntityReferenceActions_xhzgd_264",Ot="_workspaceEditor_xhzgd_278",Tt="_workspaceEditorField_xhzgd_294",zt="_workspaceEditorActions_xhzgd_337",Lt="_selectedEntityDescription_xhzgd_348",$t="_selectedEntityDescriptionMarkdown_xhzgd_355",Pt="_selectedEntityOwnerField_xhzgd_361",Wt="_selectedEntityOwnerDropdown_xhzgd_373",Dt="_selectedEntityDetailsSection_xhzgd_377",Ft="_activityTimelineList_xhzgd_382",Ht="_activityTimelineEmpty_xhzgd_389",Bt="_visuallyHidden_xhzgd_393",Mt="_entityCard_xhzgd_405",Ut="_entityCardTopRow_xhzgd_426",Gt="_entityCardBody_xhzgd_433",Vt="_entityCardContentButton_xhzgd_437",Kt="_entityCardSelected_xhzgd_447",qt="_entityCardArchived_xhzgd_455",Qt="_relationshipPickerRow_xhzgd_460",Jt="_relationshipRecovery_xhzgd_466",Xt="_empty_xhzgd_488",Yt="_centerState_xhzgd_495",Zt="_inlineError_xhzgd_509",en="_spinner_xhzgd_524",tn="_columnPortfolio_xhzgd_543",nn="_columnActive_xhzgd_544",sn="_columnWorkstreams_xhzgd_545",an="_columnTasks_xhzgd_550",i={module:rt,columns:ot,column:lt,columnHeader:ct,columnHeadingGroup:dt,paneHeading:ut,responsiveBack:ht,sectionLabel:pt,sectionHeadingRow:vt,headerActions:gt,portfolioControls:ft,searchRow:yt,searchShell:kt,clearSearch:xt,controlActive:mt,filterPanel:wt,filterField:bt,filterLabel:_t,filterDropdown:jt,sortTrigger:Ct,scrollRegion:Et,selectedEntityContext:St,selectedEntityContextArchived:Nt,selectedEntityReferenceRow:It,selectedEntityReferenceIdentity:At,selectedEntityReferenceActions:Rt,workspaceEditor:Ot,workspaceEditorField:Tt,workspaceEditorActions:zt,selectedEntityDescription:Lt,selectedEntityDescriptionMarkdown:$t,selectedEntityOwnerField:Pt,selectedEntityOwnerDropdown:Wt,selectedEntityDetailsSection:Dt,activityTimelineList:Ft,activityTimelineEmpty:Ht,visuallyHidden:Bt,entityCard:Mt,entityCardTopRow:Ut,entityCardBody:Gt,entityCardContentButton:Vt,entityCardSelected:Kt,entityCardArchived:qt,relationshipPickerRow:Qt,relationshipRecovery:Jt,empty:Xt,centerState:Yt,inlineError:Zt,spinner:en,columnPortfolio:tn,columnActive:nn,columnWorkstreams:sn,columnTasks:an};function Z({entityType:e,mode:l,initialTitle:m="",initialDescription:g="",ownerOptions:f,fixedInitiativeId:v,formId:_,showActions:w=!0,onSavingChange:R,onCancel:j,onSave:B}){const y=e==="initiative"?"Initiative":"Workstream",z=s.useId(),I=s.useId(),$=s.useId(),x=s.useRef(null),[U,P]=s.useState(m),[d,A]=s.useState(g),[L,T]=s.useState(""),[u,C]=s.useState(null),[E,S]=s.useState(null),[c,b]=s.useState(!1);s.useEffect(()=>{x.current?.focus()},[]);const W=async h=>{if(h.preventDefault(),c)return;const O=U.trim();if(!O){C(`${y} title is required.`),x.current?.focus();return}C(null),S(null),b(!0),R?.(!0);try{await B({title:O,description:d.trim()||null,...l==="create"?{ownerId:L.trim()||null}:{},...e==="workstream"&&l==="create"?{initiativeId:v||null}:{}})}catch(N){S(N instanceof Error?N.message:`Failed to save ${y.toLowerCase()}.`)}finally{b(!1),R?.(!1)}};return t.jsxs("form",{id:_,className:i.workspaceEditor,onSubmit:h=>{W(h)},onKeyDown:h=>{h.key!=="Escape"||c||(h.preventDefault(),j())},noValidate:!0,children:[t.jsxs("div",{className:i.workspaceEditorField,children:[t.jsxs("label",{htmlFor:z,children:[y," title"]}),t.jsx("input",{ref:x,id:z,value:U,disabled:c,required:!0,"aria-invalid":u?"true":void 0,"aria-describedby":u?I:void 0,onChange:h=>{P(h.target.value),u&&C(null)},placeholder:e==="initiative"?"Enter initiative title":"Enter workstream title"}),u?t.jsx("p",{id:I,className:"tf-text-error",children:u}):null]}),t.jsxs("div",{className:i.workspaceEditorField,children:[t.jsxs("label",{htmlFor:$,children:[y," description"]}),t.jsx("textarea",{id:$,value:d,disabled:c,rows:5,onChange:h=>A(h.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"&&f?t.jsxs("div",{className:i.workspaceEditorField,children:[t.jsxs("span",{children:[y," owner"]}),t.jsx(le,{value:L,options:f,onChange:T,disabled:c,ariaLabel:`${y} owner`,className:`${Ce.control} ${i.selectedEntityOwnerDropdown}`})]}):null,E?t.jsx("p",{className:"tf-text-error",role:"alert",children:E}):null,w?t.jsxs("div",{className:i.workspaceEditorActions,children:[t.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:j,disabled:c,children:"Cancel"}),t.jsxs("button",{type:"submit",className:"tf-button-primary tf-button-compact",disabled:c,children:[c?t.jsx(re,{size:14,className:i.spinner,"aria-hidden":"true"}):null,l==="create"?`Create ${y}`:"Save"]})]}):null]})}function rn({initiative:e,ownerOption:l,ownerOptions:m,workstreamCount:g,selected:f,onSelect:v,onChangeOwner:_}){return t.jsxs("div",{className:`${i.entityCard} ${e.isArchived?i.entityCardArchived:""} ${f?i.entityCardSelected:""}`.trim(),children:[t.jsx(ce,{label:K(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:v,onKeyDown:w=>{w.key!=="Enter"&&w.key!==" "||(w.preventDefault(),v())},"aria-pressed":f,children:t.jsx(Ee,{item:e,entityType:"initiative",workstreamCount:g,ownerOption:l,ownerOptions:m,onChangeOwner:_})})})]})}function _e({workstream:e,ownerOption:l,ownerOptions:m,selected:g,onSelect:f,onChangeOwner:v,referenceAction:_,feedback:w}){const R=H(e);return t.jsxs("div",{className:`${i.entityCard} ${e.isArchived?i.entityCardArchived:""} ${g?i.entityCardSelected:""}`.trim(),children:[t.jsxs("div",{className:i.entityCardTopRow,children:[_,t.jsx(ce,{label:R||"Reference pending",entityType:"workstream",entityName:e.title,interactive:!1,pending:!R})]}),w,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":g,children:t.jsx(Ee,{item:e,entityType:"workstream",ownerOption:l,ownerOptions:m,onChangeOwner:v})})})]})}function je({item:e,entityType:l,ownerOptions:m,onChangeOwner:g,workspaceId:f,currentActorId:v,taskReferences:_,hydrationState:w,onRetryHydration:R,onAddContextFile:j,onRemoveContextFile:B,onUpdateContextCaption:y,onUpdate:z,onArchive:I,onUnarchive:$,referenceAction:x,relationshipActions:U,relationshipContent:P}){const d=l==="initiative"?"Initiative":"Workstream",A=l==="initiative"?K(e):H(e),[L,T]=s.useState(String(e.ownerId||"")),[u,C]=s.useState(!1),[E,S]=s.useState(!1),[c,b]=s.useState(!1),[W,h]=s.useState(!1),[O,N]=s.useState(!1),M=s.useId(),p=Ke({entityType:l,isArchived:e.isArchived,taskCount:e.taskCount,completedTaskCount:e.completedTaskCount,archiveReady:e.archiveReady,activeWorkstreamCount:e.archiveActiveWorkstreamCount}),Q=p.mode==="archived"?`Unarchive ${d.toLowerCase()}`:p.mode==="blocked"?`Archive unavailable — active ${p.remainingKind==="task"?"tasks":"workstreams"} remain`:p.mode==="checking"?"Archive availability is still loading":`Archive ${d.toLowerCase()}`;s.useEffect(()=>{T(String(e.ownerId||"")),C(!1)},[e.id,e.ownerId]),s.useEffect(()=>{S(!1),b(!1),h(!1),N(!1)},[e.id]);const D=async a=>{if(!g||e.isArchived||u||a===L)return;const F=L;T(a),C(!0);try{await g(a)}catch{T(F)}finally{C(!1)}},J=async()=>{if(O)return;if(p.mode==="ready"){h(!0);return}const a=p.mode==="archived"?$:I;if(!(!a||p.mode==="blocked"||p.mode==="checking")){N(!0);try{await a()}finally{N(!1)}}},q=async()=>{if(!(!I||O)){N(!0);try{await I()!==!1&&h(!1)}finally{N(!1)}}};return t.jsxs("section",{className:`${i.selectedEntityContext} ${e.isArchived?i.selectedEntityContextArchived:""}`.trim(),"aria-label":`Selected ${d.toLowerCase()}`,"aria-busy":w?.status==="loading",children:[t.jsxs("div",{className:i.selectedEntityReferenceRow,children:[t.jsxs("div",{className:i.selectedEntityReferenceIdentity,children:[x,t.jsx(ce,{label:A||"Reference pending",entityType:l,entityName:e.title,interactive:!1,pending:!A})]}),t.jsxs("div",{className:i.selectedEntityReferenceActions,children:[t.jsx("span",{children:d}),U,!E&&(I||$)?t.jsx("button",{type:"button",className:"tf-control-icon",disabled:O||p.mode==="blocked"||p.mode==="checking"||(p.mode==="archived"?!$:!I),onClick:()=>{J()},"aria-label":Q,title:Q,"aria-expanded":p.mode==="ready"?W:void 0,children:p.mode==="archived"?t.jsx(oe,{size:14,"aria-hidden":"true"}):t.jsx(st,{size:14,"aria-hidden":"true"})}):null,!E&&!e.isArchived&&z?t.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>S(!0),"aria-label":`Edit ${d.toLowerCase()}`,title:`Edit ${d.toLowerCase()}`,children:t.jsx(at,{size:14,"aria-hidden":"true"})}):null,E?t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"tf-button-secondary tf-button-compact",onClick:()=>S(!1),disabled:c,children:"Cancel"}),t.jsx("button",{type:"submit",form:M,className:"tf-button-primary tf-button-compact",disabled:c,children:"Save"})]}):null]})]}),W&&p.mode==="ready"?t.jsx(qe,{entityType:l,title:e.title,activeTaskCount:e.archiveActiveTaskCount,activeWorkstreamCount:e.archiveActiveWorkstreamCount,busy:O,onCancel:()=>h(!1),onConfirm:()=>{q()}}):null,P,E&&z?t.jsx(Z,{entityType:l,mode:"edit",formId:M,showActions:!1,onSavingChange:b,initialTitle:e.title,initialDescription:e.description||"",onCancel:()=>S(!1),onSave:async a=>{await z(a),S(!1)}},`${l}:${e.id}`):t.jsxs(t.Fragment,{children:[t.jsx("h3",{className:"tf-heading-card",children:e.title}),t.jsx(Qe,{description:e.description,label:d,taskReferences:_,className:`${i.selectedEntityDescription} tf-scrollbar`.trim(),markdownClassName:i.selectedEntityDescriptionMarkdown})]}),t.jsxs("div",{className:i.selectedEntityOwnerField,children:[t.jsx("span",{children:"Owner"}),t.jsx(le,{value:L,options:m,onChange:a=>{D(a)},disabled:!g||!!e.isArchived||u,ariaLabel:`${d} owner`,className:`${Ce.control} ${i.selectedEntityOwnerDropdown}`})]}),t.jsx("div",{className:i.selectedEntityDetailsSection,children:t.jsx(Je,{entityType:l,entityId:e.id,referenceLabel:l==="initiative"?K(e):H(e),workspaceId:f,attachments:e.attachments,readOnly:!!e.isArchived,defaultExpanded:!1,onAddAttachment:!e.isArchived&&j?a=>j(l,e.id,a):void 0,onRemoveAttachment:!e.isArchived&&B?a=>B(l,e.id,a):void 0,onUpdateAttachmentCaption:!e.isArchived&&y?(a,F)=>y(l,e.id,a,F):void 0})}),t.jsx("div",{className:i.selectedEntityDetailsSection,children:t.jsx(Xe,{entityType:l,item:e,assigneeOptions:m,currentActorId:v,taskReferences:_,defaultExpanded:!1,listClassName:i.activityTimelineList,emptyClassName:i.activityTimelineEmpty,hydrationState:w,onRetryHydration:R})})]})}function pn({model:e}){const[l,m]=s.useState(null),[g,f]=s.useState(null),[v,_]=s.useState("portfolio"),[w,R]=s.useState(""),[j,B]=s.useState("all"),[y,z]=s.useState("default"),[I,$]=s.useState(!1),[x,U]=s.useState(!1),P=e.taskArrangeMode||"execution",[d,A]=s.useState(null),[L,T]=s.useState(!1),[u,C]=s.useState(null),[E,S]=s.useState(null),[c,b]=s.useState(!1),W=s.useRef(null),h=s.useRef(null),O=s.useRef(null),N=s.useRef(null),M=s.useRef(null),p=s.useMemo(()=>new Map(e.assigneeOptions.filter(n=>!String(n.archivedAt||"").trim()).map(n=>[String(n.value),n])),[e.assigneeOptions]),Q=s.useMemo(()=>{const n=String(e.currentOwnerId||"").trim(),o=n?$e(e.assigneeOptions,n).find(k=>k.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:We,color:Pe,kind:"unassigned"}]},[e.assigneeOptions,e.currentOwnerId]),D=s.useMemo(()=>De({initiatives:e.initiatives,standaloneWorkstreams:e.standaloneWorkstreams,showArchivedPlanning:x,searchQuery:w,ownerFilter:j,currentOwnerId:String(e.currentOwnerId||""),sort:y}),[e.currentOwnerId,e.initiatives,e.standaloneWorkstreams,j,w,x,y]),J=s.useMemo(()=>D.initiatives.map(({initiative:n})=>n),[D.initiatives]),q=D.standaloneWorkstreams,a=s.useMemo(()=>e.initiatives.find(n=>n.id===l)??null,[e.initiatives,l]),F=s.useMemo(()=>[...e.initiatives.flatMap(n=>n.allWorkstreams??n.workstreams),...e.standaloneWorkstreams],[e.initiatives,e.standaloneWorkstreams]),r=s.useMemo(()=>F.find(n=>n.id===g)??null,[F,g]),ee=a?(a.allWorkstreams??a.workstreams).filter(n=>x||!n.isArchived):r&&!r.initiativeId?[r]:[],te=s.useMemo(()=>ke((r?.tasks??[]).filter(n=>x||!n.isArchived),P),[r?.tasks,x,P]),de=s.useMemo(()=>new Set((a?.allWorkstreams??a?.workstreams??[]).map(n=>n.id)),[a]),ue=s.useMemo(()=>new Set((r?.tasks??[]).map(n=>n.id)),[r]),Se=s.useMemo(()=>e.linkOptions.workstreams.filter(n=>!de.has(n.id)),[de,e.linkOptions.workstreams]),Ne=s.useMemo(()=>e.linkOptions.tasks.filter(n=>!ue.has(n.id)),[ue,e.linkOptions.tasks]),G=r?"workstream":a?"initiative":null,V=r?.id||a?.id||null,he=G&&V?e.hydrationStateByEntity?.[`${G}:${V}`]:void 0,pe=s.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(k=>k.isArchived)),[e.initiatives,e.standaloneWorkstreams]);s.useEffect(()=>{const n=M.current;if(n){if(n.entityType==="initiative"){if(!e.initiatives.some(o=>o.id===n.entityId))return;M.current=null,m(n.entityId),f(null),N.current="workstreams",_("workstreams");return}F.some(o=>o.id===n.entityId)&&(M.current=null,m(n.initiativeId||null),f(n.entityId),N.current="tasks",_("tasks"))}},[F,e.initiatives]),s.useEffect(()=>{l&&!a&&(m(null),f(null),_("portfolio"))},[a,l]),s.useEffect(()=>{g&&!r&&(f(null),_(a?"workstreams":"portfolio"))},[a,r,g]),s.useEffect(()=>{!e.hydrateEntity||!G||!V||e.hydrateEntity(G,V)},[e.hydrateEntity,V,G]),s.useEffect(()=>{T(!1),C(null),S(null),b(!1)},[V,G]),s.useLayoutEffect(()=>{if(N.current!==v)return;(v==="portfolio"?W.current:v==="workstreams"?h.current:O.current)?.focus({preventScroll:!0}),N.current=null},[v]);const X=n=>{if(n===v){(n==="portfolio"?W.current:n==="workstreams"?h.current:O.current)?.focus({preventScroll:!0});return}N.current=n,_(n)},Ie=n=>{m(n),f(null),X("workstreams")},ve=n=>{n.initiativeId||m(null),f(n.id),X("tasks")},Ae=()=>{X(a?"workstreams":"portfolio")},Re=D.hasCriteria||y!=="default",Oe=()=>{R(""),B("all"),z("default")},ne=async n=>{if(!d||!e.createEntity)return;const o=await e.createEntity(d.entityType,n);M.current={entityType:d.entityType,entityId:o.id,initiativeId:d.initiativeId},A(null)},ge=async(n,o)=>{if(c)return;const k=n==="workstream"?e.attachWorkstreamToInitiative:e.attachTaskToWorkstream,ye=n==="workstream"?a?.id:r?.id;if(!(!k||!ye)){b(!0);try{await k(ye,o.referenceLabel)}finally{b(!1)}}},Te=async n=>{if(!(!r||!e.assignWorkstreamToInitiative||c)){b(!0);try{await e.assignWorkstreamToInitiative(r.id,n.referenceLabel)!==!1&&(m(n.id),T(!1))}finally{b(!1)}}},ze=async()=>{if(!(!u||c)){b(!0);try{if(u.entityType==="workstream"){if(!e.assignWorkstreamToInitiative)return;const n=a?K(a):null;if(await e.assignWorkstreamToInitiative(u.id,null)===!1)return;S({pane:u.id===r?.id?"tasks":"workstreams",message:`${u.referenceLabel} removed from its initiative.`,onUndo:async()=>{if(!n)return;await e.assignWorkstreamToInitiative?.(u.id,n)!==!1&&S(null)}})}else{if(!e.assignTaskToWorkstream||!r)return;const n=r.id;if(await e.assignTaskToWorkstream(u.id,null)===!1)return;S({pane:"tasks",message:`${u.referenceLabel} removed from this workstream.`,onUndo:async()=>{await e.assignTaskToWorkstream?.(u.id,n)!==!1&&S(null)}})}C(null)}finally{b(!1)}}},Le=async()=>{if(!(!E||c)){b(!0);try{await E.onUndo()}finally{b(!1)}}},fe=E?t.jsxs("div",{className:i.relationshipRecovery,role:"status",children:[t.jsx("span",{children:E.message}),t.jsx("button",{type:"button",className:"tf-button-ghost tf-button-compact",disabled:c,onClick:()=>{Le()},children:c?"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(re,{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(me,{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(re,{size:15,className:i.spinner}):t.jsx(oe,{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(me,{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":v,children:[t.jsxs("section",{className:`${i.column} ${i.columnPortfolio} ${v==="portfolio"?i.columnActive:""}`.trim(),"aria-labelledby":"planning-portfolio-heading",children:[t.jsxs("div",{className:i.columnHeader,children:[t.jsx("h2",{ref:W,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:J.length+q.length}),t.jsx("button",{type:"button",className:`tf-control-icon ${x?i.controlActive:""}`.trim(),onClick:()=>U(n=>!n),disabled:!pe,"aria-label":x?"Hide archived planning items":"Show archived planning items","aria-pressed":x,title:pe?x?"Hide archived planning items":"Show archived planning items":"No archived planning items",children:x?t.jsx(Ye,{size:15,"aria-hidden":"true"}):t.jsx(Ze,{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(et,{size:14,"aria-hidden":"true"}),t.jsx("input",{type:"search",value:w,onChange:n=>R(n.target.value),placeholder:"Search initiatives and workstreams","aria-label":"Search planning"}),w?t.jsx("button",{type:"button",className:i.clearSearch,onClick:()=>R(""),"aria-label":"Clear planning search",title:"Clear search",children:t.jsx(we,{size:13,"aria-hidden":"true"})}):null]}),t.jsx("button",{type:"button",className:`tf-control-icon ${I||j!=="all"||y!=="default"?i.controlActive:""}`.trim(),"aria-label":"Filter and sort planning",title:"Filter and sort planning","aria-expanded":I,"aria-controls":"planning-workspace-navigator-options",onClick:()=>$(n=>!n),children:t.jsx(tt,{size:15,"aria-hidden":"true"})})]}),I?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(le,{value:j,options:e.assigneeOptions,leadingOptions:Q,includeUnassigned:!1,onChange:B,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(Fe,{value:y,options:xe,onChange:n=>z(String(n)),ariaLabel:"Sort planning",className:i.filterDropdown,portalPanel:!0,panelAlign:"start",triggerContent:t.jsxs("span",{className:i.sortTrigger,children:[t.jsx(nt,{size:14,"aria-hidden":"true"}),t.jsx("span",{children:xe.find(n=>n.value===y)?.label})]}),renderOptionContent:n=>n.label})]}),t.jsx("button",{type:"button",className:"tf-control-icon",onClick:Oe,disabled:!Re,"aria-label":"Reset planning filters and sort",title:"Reset planning filters and sort",children:t.jsx(oe,{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:()=>A({entityType:"initiative"}),"aria-label":"Create initiative",title:"Create initiative",children:t.jsx(se,{size:15,"aria-hidden":"true"})}):null]}),d?.entityType==="initiative"?t.jsx(Z,{entityType:"initiative",mode:"create",ownerOptions:e.assigneeOptions,onCancel:()=>A(null),onSave:ne}):null,D.initiatives.map(({initiative:n,workstreams:o})=>t.jsx(rn,{initiative:n,workstreamCount:o.length,ownerOption:n.ownerId?p.get(n.ownerId):void 0,ownerOptions:e.assigneeOptions,selected:l===n.id,onSelect:()=>Ie(n.id),onChangeOwner:e.changeOwner?k=>e.changeOwner?.("initiative",n.id,k==="unassigned"?"":k):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:()=>A({entityType:"workstream",initiativeId:null}),"aria-label":"Create standalone workstream",title:"Create standalone workstream",children:t.jsx(se,{size:15,"aria-hidden":"true"})}):null]}),d?.entityType==="workstream"&&!d.initiativeId?t.jsx(Z,{entityType:"workstream",mode:"create",ownerOptions:e.assigneeOptions,fixedInitiativeId:null,onCancel:()=>A(null),onSave:ne}):null,q.map(n=>t.jsx(_e,{workstream:n,ownerOption:n.ownerId?p.get(n.ownerId):void 0,ownerOptions:e.assigneeOptions,selected:g===n.id,onSelect:()=>ve(n),onChangeOwner:e.changeOwner?o=>e.changeOwner?.("workstream",n.id,o==="unassigned"?"":o):void 0},n.id)),J.length===0&&q.length===0&&t.jsx("p",{className:`tf-text-helper ${i.empty}`,children:D.hasCriteria?"No planning matches.":"No planning items yet."})]})]}),t.jsxs("section",{className:`${i.column} ${i.columnWorkstreams} ${v==="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(be,{size:15,"aria-hidden":"true"})}),t.jsxs("h2",{ref:h,id:"planning-workstreams-heading",className:`tf-heading-section ${i.paneHeading}`,tabIndex:-1,children:["Workstreams (",ee.length,")"]})]}),t.jsx("div",{className:i.headerActions,children:a&&e.createEntity?t.jsx("button",{type:"button",className:"tf-control-icon",onClick:()=>A({entityType:"workstream",initiativeId:a.id}),"aria-label":`Create workstream in ${a.title}`,title:"Create workstream",children:t.jsx(se,{size:15,"aria-hidden":"true"})}):null})]}),t.jsxs("div",{className:i.scrollRegion,children:[a?t.jsxs(t.Fragment,{children:[t.jsx(je,{item:a,entityType:"initiative",ownerOptions:e.assigneeOptions,onChangeOwner:e.changeOwner?n=>e.changeOwner?.("initiative",a.id,n):void 0,workspaceId:e.currentWorkspaceId,currentActorId:e.currentOwnerId,taskReferences:e.taskReferences,hydrationState:r?void 0:he,onRetryHydration:e.hydrateEntity?()=>{e.hydrateEntity?.("initiative",a.id)}:void 0,onAddContextFile:e.addContextFile,onRemoveContextFile:e.removeContextFile,onUpdateContextCaption:e.updateContextCaption,onUpdate:e.updateEntity?n=>e.updateEntity("initiative",a.id,n):void 0,onArchive:e.archiveEntity?()=>e.archiveEntity("initiative",a.id):void 0,onUnarchive:e.unarchiveEntity?()=>e.unarchiveEntity("initiative",a.id):void 0}),t.jsx(ie,{options:Se,entityLabel:"workstream",onSelect:n=>ge("workstream",n),disabled:!e.attachWorkstreamToInitiative||c})]}):null,d?.entityType==="workstream"&&d.initiativeId===a?.id?t.jsx(Z,{entityType:"workstream",mode:"create",ownerOptions:e.assigneeOptions,fixedInitiativeId:a.id,onCancel:()=>A(null),onSave:ne}):null,ee.map(n=>t.jsx(_e,{workstream:n,ownerOption:n.ownerId?p.get(n.ownerId):void 0,ownerOptions:e.assigneeOptions,selected:g===n.id,onSelect:()=>ve(n),onChangeOwner:e.changeOwner?o=>e.changeOwner?.("workstream",n.id,o==="unassigned"?"":o):void 0,referenceAction:a?t.jsx(Y,{disabled:!e.assignWorkstreamToInitiative||c,onClick:()=>C({entityType:"workstream",id:n.id,referenceLabel:H(n),title:n.title,parentLabel:a?`${K(a)} ${a.title}`.trim():"its initiative"}),title:`Unlink ${H(n)||n.title} from initiative`,ariaLabel:`Unlink ${H(n)||n.title} from initiative`,children:t.jsx(ae,{size:14,"aria-hidden":"true"})}):void 0},n.id)),a&&E?.pane==="workstreams"?fe:null,ee.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} ${v==="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:Ae,"aria-label":a?"Back to Workstreams":"Back to Portfolio",title:a?"Back to Workstreams":"Back to Portfolio",children:t.jsx(be,{size:15,"aria-hidden":"true"})}),t.jsxs("h2",{ref:O,id:"planning-tasks-heading",className:`tf-heading-section ${i.paneHeading}`,tabIndex:-1,children:["Tasks (",te.length,")"]})]})}),t.jsxs("div",{className:i.scrollRegion,children:[r?t.jsxs(t.Fragment,{children:[t.jsx(je,{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:he,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(Y,{disabled:!e.assignWorkstreamToInitiative||c,onClick:()=>{C({entityType:"workstream",id:r.id,referenceLabel:H(r),title:r.title,parentLabel:a?`${K(a)} ${a.title}`.trim():"its initiative"})},title:"Unlink workstream from initiative",ariaLabel:"Unlink workstream from initiative",children:t.jsx(ae,{size:14,"aria-hidden":"true"})}):t.jsx(Y,{disabled:!e.assignWorkstreamToInitiative||c,onClick:()=>T(n=>!n),title:"Link initiative",ariaLabel:"Link initiative",ariaExpanded:L,children:t.jsx(it,{size:14,"aria-hidden":"true"})}),relationshipContent:t.jsx(t.Fragment,{children:!r.initiativeId&&L?t.jsxs("div",{className:i.relationshipPickerRow,children:[t.jsx(ie,{options:e.linkOptions.initiatives,entityLabel:"initiative",onSelect:Te,disabled:c}),t.jsx("button",{type:"button",className:"tf-control-icon tf-control-icon-compact",disabled:c,onClick:()=>T(!1),title:"Cancel initiative link","aria-label":"Cancel initiative link",children:t.jsx(we,{size:14,"aria-hidden":"true"})})]}):null})}),t.jsx(ie,{options:Ne,entityLabel:"task",onSelect:n=>ge("task",n),disabled:!e.attachTaskToWorkstream||c}),e.setTaskArrangeMode?t.jsx(He,{value:P,onChange:e.setTaskArrangeMode}):null]}):null,t.jsx(Be,{tasks:te,mode:P,onReorder:r&&e.reorderWorkstreamTasks?n=>e.reorderWorkstreamTasks?.(r.id,Ge(ke(r.tasks??[],"execution"),n)):void 0,children:n=>{const o=Me(n);return t.jsx(Ue,{task:n,assigneeOption:n.assignee?p.get(n.assignee):void 0,assigneeOptions:e.assigneeOptions,showStatusLabel:e.showTaskCardStatusLabel,onOpen:()=>e.openTask(n.id),onAssigneeChange:e.setTaskAssignee?k=>e.setTaskAssignee?.(n.id,k):void 0,onStatusChange:e.setTaskStatus?k=>e.setTaskStatus?.(n.id,k):void 0,referenceInteractive:!1,referenceAction:t.jsx(Y,{disabled:!e.assignTaskToWorkstream||c,onClick:k=>{k.stopPropagation(),C({entityType:"task",id:n.id,referenceLabel:o||n.id,title:n.title,parentLabel:r?`${H(r)} ${r.title}`.trim():"its workstream"})},title:`Unlink ${o||n.title} from workstream`,ariaLabel:`Unlink ${o||n.title} from workstream`,children:t.jsx(ae,{size:14,"aria-hidden":"true"})})},n.id)}}),r&&E?.pane==="tasks"?fe:null,!r&&t.jsx("p",{className:`tf-text-helper ${i.empty}`,children:"Select a workstream."}),r&&te.length===0&&t.jsx("p",{className:`tf-text-helper ${i.empty}`,children:"No tasks are linked to this workstream."})]})]})]}),t.jsx(Ve,{item:u,busy:c,theme:e.theme,onCancel:()=>C(null),onConfirm:()=>{ze()}})]})}export{pn as PlanningModule};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
._group_15z7n_1{display:flex;flex-direction:column;gap:6px}._list_15z7n_7{display:flex;flex-direction:column;gap:4px}._review_15z7n_13{display:flex;align-items:center;width:100%;min-width:0;gap:8px;padding:7px 8px;border:1px solid var(--border-subtle);border-radius:var(--radius-md);background:var(--surface-inset);color:var(--text-primary);font:inherit;text-align:left;cursor:pointer}._review_15z7n_13:hover:not(:disabled),._review_15z7n_13:focus-visible{border-color:var(--control-icon-hover-border);background:var(--surface-hover)}._review_15z7n_13:focus-visible{outline:2px solid var(--field-focus-border);outline-offset:1px}._review_15z7n_13:disabled{cursor:default;opacity:.65}._icon_15z7n_41,._openIcon_15z7n_41{display:inline-flex;flex:0 0 auto;color:var(--text-helper)}._copy_15z7n_42{display:flex;flex:1;min-width:0;flex-direction:column;gap:1px}._copy_15z7n_42>span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._loading_15z7n_44{display:inline-flex;align-items:center;gap:6px;color:var(--text-helper);font-size:.75rem}._loading_15z7n_44 svg{animation:_spin_15z7n_1 1s linear infinite}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as d,j as e}from"./vendor-react-CKJs5o3c.js";import{ContextAttachmentManager as h}from"./ContextAttachmentManager-CMxSzHqc.js";import{f as u,aX as g}from"./index-Cx7vZJHL.js";import{h as f,s as x,aF as _}from"./vendor-icons-B8ZNsH1g.js";import"./vendor-markdown-_lhNCyq-.js";import"./vendor-dnd-CJ-AjP-Y.js";import"./vendor-router-AqJMU8Lz.js";const j="_group_15z7n_1",v="_list_15z7n_7",I="_review_15z7n_13",w="_icon_15z7n_41",y="_openIcon_15z7n_41",N="_copy_15z7n_42",A="_loading_15z7n_44",i={group:j,list:v,review:I,icon:w,openIcon:y,copy:N,loading:A};function C(o){return String(o.title||"").trim()||o.image?.displayName||"Image review"}function k({taskId:o,taskReferenceLabel:c,workspaceId:l,apiBaseUrl:r}){const[a,m]=d.useState(null);return d.useEffect(()=>{let s=!0;m(null);const n=new URLSearchParams({workspaceId:l,taskId:o});return u(`/api/taskforce/annotated-attachments/sessions?${n.toString()}`,{credentials:"include"},r).then(async t=>t.ok?t.json():{sessions:[]}).then(t=>{s&&m(Array.isArray(t?.sessions)?t.sessions:[])}).catch(()=>{s&&m([])}),()=>{s=!1}},[r,o,l]),a!==null&&a.length===0?null:e.jsxs("section",{className:i.group,"aria-label":"Image reviews",children:[e.jsxs("div",{className:"tf-heading-section",children:["Image reviews",a?` (${a.length})`:""]}),a===null?e.jsxs("div",{className:i.loading,"aria-live":"polite",children:[e.jsx(f,{size:14})," Loading image reviews"]}):e.jsx("div",{className:i.list,children:a.map(s=>{const n=s.image,t=s.annotations.length,p=!!(n?.assetId&&n.apiUrl);return e.jsxs("button",{type:"button",className:i.review,disabled:!p,onClick:()=>{n&&g({assetId:n.assetId,path:n.apiUrl,displayName:n.displayName,referenceLabel:n.referenceLabel||void 0},{taskId:o,taskReferenceLabel:c,sessionId:s.id})},children:[e.jsx("span",{className:i.icon,children:e.jsx(x,{size:14})}),e.jsxs("span",{className:i.copy,children:[e.jsx("span",{className:"tf-heading-card",children:C(s)}),e.jsxs("span",{className:"tf-text-meta",children:[t," ",t===1?"marker":"markers"]})]}),e.jsx(_,{className:i.openIcon,size:14,"aria-hidden":"true"})]},s.id)})})]})}function F(o){const{taskId:c,taskReferenceLabel:l,workspaceId:r,apiBaseUrl:a,showImageReviews:m=!1,contextFiles:s,onAddContextFile:n,onRemoveContextFile:t,onUpdateContextCaption:p}=o;return e.jsx(h,{ownerType:"task",ownerId:c,ownerReferenceLabel:l,workspaceId:r,apiBaseUrl:a,attachments:s,onAddAttachment:n,onRemoveAttachment:t,onUpdateAttachmentCaption:p,supplementalContent:m&&c&&r?e.jsx(k,{taskId:c,taskReferenceLabel:l,workspaceId:r,apiBaseUrl:a}):null})}export{F as TaskContextUpload};
|
|
@@ -1 +0,0 @@
|
|
|
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-Cx7vZJHL.js";import{h as J,af as le,Z as Qe,P as pe,q as je,b1 as Xe,b2 as et,x as tt,b3 as st,b4 as nt,y as rt,a as at,i as lt,g as it,f as ot,T as ct}from"./vendor-icons-B8ZNsH1g.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",Tt="_editor_1bn9e_169",It="_stickyToolbar_1bn9e_173",Kt="_toolbarGroup_1bn9e_188",Rt="_versionSelect_1bn9e_194",$t="_description_1bn9e_211",qt="_metrics_1bn9e_217",Vt="_metric_1bn9e_217",Pt="_section_1bn9e_249",At="_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:Tt,stickyToolbar:It,toolbarGroup:Kt,versionSelect:Rt,description:$t,metrics:qt,metric:Vt,section:Pt,sectionHeader:At,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]),I=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]),P=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:I,createNextDraft:P,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(""),[I,P]=n.useState(""),[r,o]=n.useState([]),[f,C]=n.useState(""),[A,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,I,r),[I,j,r]),N=m||D?.version.status==="draft",T=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),P(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(!T)return;const t=a=>{a.preventDefault(),a.returnValue=""};return window.addEventListener("beforeunload",t),()=>window.removeEventListener("beforeunload",t)},[T]),n.useEffect(()=>(E?.(T),()=>E?.(!1)),[T,E]);const ne=t=>{if(!T){t();return}fe(()=>t)},Ce=()=>{const t=he;fe(null),t?.()},ye=()=>{ne(()=>{x();const t=[];p(!0),S(!0),V(""),P(""),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),P(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}}),Te=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:I.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},Ie=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."})})]}),Pe=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."})]})}):Pe?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:T?"Workflow has unsaved changes.":"Workflow draft is saved."}),e.jsxs("button",{type:"button",className:"tf-button-primary tf-button-compact",onClick:()=>{Te()},disabled:!T||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:T||r.length===0||b,title:T?"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":A&&!j.trim(),"aria-describedby":A&&!j.trim()?"workflow-draft-name-error":void 0,readOnly:b}),A&&!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:I,onChange:t=>P(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})]}),I?e.jsx("p",{className:`${s.description} tf-text-body`,children:I}):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:()=>Ie(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":A&&!t.name.trim(),"aria-describedby":A&&!t.name.trim()?`workflow-step-name-error-${t.clientKey}`:void 0,disabled:!N,readOnly:b}),A&&!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:Ae})=>String(Ae)===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};
|