@nextop-os/workspace-issue-manager 0.0.27 → 0.0.29
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/assets/workspace-dock-task.png +0 -0
- package/dist/{chunk-LJQG24Y2.js → chunk-DRWYHOZ2.js} +159 -25
- package/dist/chunk-DRWYHOZ2.js.map +1 -0
- package/dist/chunk-N6NGQ7DZ.js +14 -0
- package/dist/chunk-N6NGQ7DZ.js.map +1 -0
- package/dist/{chunk-JGIOWEUE.js → chunk-WT6PIL4Q.js} +108 -48
- package/dist/chunk-WT6PIL4Q.js.map +1 -0
- package/dist/{chunk-MCVRP7RR.js → chunk-YN5NYKAA.js} +67 -20
- package/dist/chunk-YN5NYKAA.js.map +1 -0
- package/dist/{chunk-5V4DIEWZ.js → chunk-YTOMO5IO.js} +1932 -1947
- package/dist/chunk-YTOMO5IO.js.map +1 -0
- package/dist/contracts/index.d.ts +111 -67
- package/dist/core/index.d.ts +14 -6
- package/dist/core/index.js +4 -2
- package/dist/{feature-2zhsUF_g.d.ts → feature-RwN37-fu.d.ts} +9 -1
- package/dist/i18n/index.js +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.js +5 -3
- package/dist/{issueManagerControllerService.interface-BtvnnFla.d.ts → issueManagerControllerService.interface-BuGBkqN3.d.ts} +3 -2
- package/dist/services/index.d.ts +4 -3
- package/dist/services/index.js +3 -3
- package/dist/ui/index.d.ts +6 -3
- package/dist/ui/index.js +4 -4
- package/dist/workbench/constants.d.ts +6 -0
- package/dist/workbench/constants.js +9 -0
- package/dist/workbench/constants.js.map +1 -0
- package/dist/workbench/index.d.ts +5 -4
- package/dist/workbench/index.js +16 -12
- package/dist/workbench/index.js.map +1 -1
- package/openapi/issue-manager.v1.yaml +366 -2
- package/package.json +11 -6
- package/dist/chunk-5V4DIEWZ.js.map +0 -1
- package/dist/chunk-JGIOWEUE.js.map +0 -1
- package/dist/chunk-LJQG24Y2.js.map +0 -1
- package/dist/chunk-MCVRP7RR.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/react/internal/shell/IssueManagerNodeState.ts","../src/ui/react/internal/reference/IssueManagerReferencePickerState.ts","../src/ui/react/internal/controller/useIssueManagerController.ts","../src/ui/react/internal/controller/IssueManagerControllerCapabilities.ts","../src/services/internal/controllerOutcomes.ts","../src/services/internal/reference/controllerReferenceCommands.ts","../src/services/internal/reference/controllerReferenceOutcomes.ts","../src/services/internal/controllerPlans.ts","../src/services/internal/reference/controllerReferencePlans.ts","../src/services/internal/run/controllerRunCommands.ts","../src/services/internal/save/controllerSaveCommands.ts","../src/services/internal/share/controllerShareCommands.ts","../src/services/internal/controllerActions.ts","../src/ui/react/internal/controller/createIssueManagerControllerActionsBridge.ts","../src/ui/react/internal/issue/createIssueManagerIssueBindings.ts","../src/ui/react/internal/task/createIssueManagerTaskBindings.ts","../src/ui/react/internal/controller/createIssueManagerControllerBindings.ts","../src/ui/react/internal/controller/useIssueManagerControllerRuntime.ts","../src/ui/react/internal/shell/IssueManagerNoticeState.ts","../src/ui/react/internal/shell/useIssueManagerNodeView.ts","../src/ui/react/index.ts","../src/ui/IssueManagerNode.tsx","../src/ui/internal/shell/IssueManagerShell.tsx","../src/ui/internal/shell/IssueManagerPanels.tsx","../src/ui/internal/status/IssueManagerStatusBadge.ts","../src/ui/internal/issue/IssueManagerIssueSections.tsx","../src/ui/internal/panel/IssueManagerPanelText.ts","../src/ui/internal/panel/IssueManagerPanelSurface.tsx","../src/ui/internal/content/IssueManagerDescriptionSection.tsx","../src/ui/internal/content/IssueManagerRichTextTextarea.tsx","../src/ui/internal/shell/IssueManagerDraftTitleInput.tsx","../src/ui/internal/shell/IssueManagerDraftTitleInputState.ts","../src/ui/internal/shell/IssueManagerEditorMotion.ts","../src/ui/internal/shell/IssueManagerBottomBar.tsx","../src/ui/internal/task/IssueManagerRunSections.tsx","../src/ui/internal/shell/IssueManagerFloatingNotice.tsx","../src/ui/internal/shell/IssueManagerSidebar.tsx","../src/ui/internal/shell/IssueManagerSidebarSections.tsx","../src/ui/internal/shell/IssueManagerShellState.ts","../src/ui/internal/shell/IssueManagerSidebarState.ts","../src/ui/internal/shell/IssueManagerTaskComposerPane.tsx","../src/ui/internal/shell/IssueManagerTaskDrawer.tsx","../src/ui/internal/shell/IssueManagerTaskDrawerSections.tsx","../src/ui/internal/shell/IssueManagerTaskDrawerState.ts","../src/ui/internal/shell/useIssueManagerShellView.ts","../src/ui/internal/shell/IssueManagerTopicSelector.tsx"],"sourcesContent":["import { useEffect, useEffectEvent, useState } from \"react\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary,\n IssueManagerCreateTopicInput,\n IssueManagerTopic,\n IssueManagerUpdateTopicInput\n} from \"../../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../../i18n/issueManagerI18n.ts\";\n\ninterface IssueManagerTaskListCollapsedDetail {\n collapsed: boolean;\n nodeId: string;\n workspaceId: string;\n}\n\nconst issueManagerTaskListCollapsedEvent =\n \"nextop:issue-manager-task-list-collapsed\";\n\ntype IssueManagerTopicCreateEventInput = Omit<\n IssueManagerCreateTopicInput,\n \"workspaceId\"\n>;\n\ntype IssueManagerTopicUpdateEventInput = Omit<\n IssueManagerUpdateTopicInput,\n \"workspaceId\"\n>;\n\ninterface IssueManagerTopicHeaderStateDetail {\n activeTopicId: string | null;\n nodeId: string;\n topics: readonly IssueManagerTopic[];\n workspaceId: string;\n}\n\ninterface IssueManagerTopicSelectionDetail {\n nodeId: string;\n topicId: string;\n workspaceId: string;\n}\n\ninterface IssueManagerTopicCreateDetail {\n input: IssueManagerTopicCreateEventInput;\n nodeId: string;\n workspaceId: string;\n}\n\ninterface IssueManagerTopicDeleteDetail {\n nodeId: string;\n topicId: string;\n workspaceId: string;\n}\n\ninterface IssueManagerTopicUpdateDetail {\n input: IssueManagerTopicUpdateEventInput;\n nodeId: string;\n workspaceId: string;\n}\n\ntype IssueManagerEventHubListener<TDetail> = (detail: TDetail) => void;\n\nfunction createIssueManagerKeyedEventHub<TDetail>(input: {\n getKey: (detail: TDetail) => string;\n}) {\n const listenerSetByKey = new Map<\n string,\n Set<IssueManagerEventHubListener<TDetail>>\n >();\n\n return {\n publish(detail: TDetail): void {\n listenerSetByKey.get(input.getKey(detail))?.forEach((listener) => {\n listener(detail);\n });\n },\n subscribe(\n key: string,\n listener: IssueManagerEventHubListener<TDetail>\n ): () => void {\n let listenerSet = listenerSetByKey.get(key);\n if (!listenerSet) {\n listenerSet = new Set();\n listenerSetByKey.set(key, listenerSet);\n }\n listenerSet.add(listener);\n\n return () => {\n listenerSet?.delete(listener);\n if (listenerSet?.size === 0) {\n listenerSetByKey.delete(key);\n }\n };\n }\n };\n}\n\nfunction createIssueManagerKeyedReplayEventHub<TDetail>(input: {\n getKey: (detail: TDetail) => string;\n}) {\n const currentByKey = new Map<string, TDetail>();\n const eventHub = createIssueManagerKeyedEventHub<TDetail>(input);\n\n return {\n get(key: string): TDetail | null {\n return currentByKey.get(key) ?? null;\n },\n publish(detail: TDetail): void {\n currentByKey.set(input.getKey(detail), detail);\n eventHub.publish(detail);\n },\n subscribe(\n key: string,\n listener: IssueManagerEventHubListener<TDetail>\n ): () => void {\n const unsubscribe = eventHub.subscribe(key, listener);\n const current = currentByKey.get(key);\n if (current) {\n listener(current);\n }\n return unsubscribe;\n }\n };\n}\n\nconst issueManagerTopicHeaderStateHub =\n createIssueManagerKeyedReplayEventHub<IssueManagerTopicHeaderStateDetail>({\n getKey: issueManagerNodeScopeKey\n });\nconst issueManagerTopicSelectionHub =\n createIssueManagerKeyedEventHub<IssueManagerTopicSelectionDetail>({\n getKey: issueManagerNodeScopeKey\n });\nconst issueManagerTopicCreateHub =\n createIssueManagerKeyedEventHub<IssueManagerTopicCreateDetail>({\n getKey: issueManagerNodeScopeKey\n });\nconst issueManagerTopicDeleteHub =\n createIssueManagerKeyedEventHub<IssueManagerTopicDeleteDetail>({\n getKey: issueManagerNodeScopeKey\n });\nconst issueManagerTopicUpdateHub =\n createIssueManagerKeyedEventHub<IssueManagerTopicUpdateDetail>({\n getKey: issueManagerNodeScopeKey\n });\n\nexport function resolveIssueManagerTopicHeaderState(input: {\n activeTopicId: string | null;\n nodeId: string;\n workspaceId: string;\n}): IssueManagerTopicHeaderStateDetail {\n return (\n issueManagerTopicHeaderStateHub.get(issueManagerNodeScopeKey(input)) ?? {\n activeTopicId: input.activeTopicId,\n nodeId: input.nodeId,\n topics: [],\n workspaceId: input.workspaceId\n }\n );\n}\n\nexport function dispatchIssueManagerTaskListCollapsed(input: {\n collapsed: boolean;\n nodeId: string;\n workspaceId: string;\n}): void {\n if (typeof window === \"undefined\") {\n return;\n }\n\n window.dispatchEvent(\n new CustomEvent<IssueManagerTaskListCollapsedDetail>(\n issueManagerTaskListCollapsedEvent,\n {\n detail: input\n }\n )\n );\n}\n\nexport function dispatchIssueManagerTopicHeaderState(\n input: IssueManagerTopicHeaderStateDetail\n): void {\n issueManagerTopicHeaderStateHub.publish(input);\n}\n\nexport function dispatchIssueManagerTopicSelection(\n input: IssueManagerTopicSelectionDetail\n): void {\n issueManagerTopicSelectionHub.publish(input);\n}\n\nexport function dispatchIssueManagerTopicCreate(\n input: IssueManagerTopicCreateDetail\n): void {\n issueManagerTopicCreateHub.publish(input);\n}\n\nexport function dispatchIssueManagerTopicDelete(\n input: IssueManagerTopicDeleteDetail\n): void {\n issueManagerTopicDeleteHub.publish(input);\n}\n\nexport function dispatchIssueManagerTopicUpdate(\n input: IssueManagerTopicUpdateDetail\n): void {\n issueManagerTopicUpdateHub.publish(input);\n}\n\nexport function useIssueManagerTaskListCollapsedSync(input: {\n nodeId: string;\n onCollapsedChange: (collapsed: boolean) => void;\n workspaceId: string;\n}): void {\n const onCollapsedChange = useEffectEvent(input.onCollapsedChange);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return undefined;\n }\n\n const handleTaskListCollapsedChange = (event: Event) => {\n const detail = (event as CustomEvent<IssueManagerTaskListCollapsedDetail>)\n .detail;\n if (\n detail?.nodeId !== input.nodeId ||\n detail.workspaceId !== input.workspaceId\n ) {\n return;\n }\n onCollapsedChange(detail.collapsed);\n };\n\n window.addEventListener(\n issueManagerTaskListCollapsedEvent,\n handleTaskListCollapsedChange\n );\n return () => {\n window.removeEventListener(\n issueManagerTaskListCollapsedEvent,\n handleTaskListCollapsedChange\n );\n };\n }, [input.nodeId, input.workspaceId, onCollapsedChange]);\n}\n\nexport function useIssueManagerTopicHeaderStateSync(input: {\n activeTopicId: string | null;\n nodeId: string;\n workspaceId: string;\n}) {\n const [state, setState] = useState<IssueManagerTopicHeaderStateDetail>(() =>\n resolveIssueManagerTopicHeaderState(input)\n );\n\n useEffect(() => {\n setState((current) =>\n current.activeTopicId === input.activeTopicId &&\n current.nodeId === input.nodeId &&\n current.workspaceId === input.workspaceId &&\n current.topics === resolveIssueManagerTopicHeaderState(input).topics\n ? current\n : resolveIssueManagerTopicHeaderState(input)\n );\n }, [input.activeTopicId, input.nodeId, input.workspaceId]);\n\n useEffect(() => {\n const handleTopicHeaderStateChange = (\n detail: IssueManagerTopicHeaderStateDetail\n ) => {\n setState(detail);\n };\n\n return issueManagerTopicHeaderStateHub.subscribe(\n issueManagerNodeScopeKey(input),\n handleTopicHeaderStateChange\n );\n }, [input.nodeId, input.workspaceId]);\n\n return state;\n}\n\nexport function useIssueManagerTopicHeaderCommandSync(input: {\n nodeId: string;\n onCreateTopic: (topicInput: IssueManagerTopicCreateEventInput) => void;\n onDeleteTopic: (topicId: string) => void;\n onSelectTopic: (topicId: string) => void;\n onUpdateTopic: (topicInput: IssueManagerTopicUpdateEventInput) => void;\n workspaceId: string;\n}): void {\n const onCreateTopic = useEffectEvent(input.onCreateTopic);\n const onDeleteTopic = useEffectEvent(input.onDeleteTopic);\n const onSelectTopic = useEffectEvent(input.onSelectTopic);\n const onUpdateTopic = useEffectEvent(input.onUpdateTopic);\n\n useEffect(() => {\n const handleTopicSelection = (detail: IssueManagerTopicSelectionDetail) => {\n onSelectTopic(detail.topicId);\n };\n const handleTopicCreate = (detail: IssueManagerTopicCreateDetail) => {\n onCreateTopic(detail.input);\n };\n const handleTopicDelete = (detail: IssueManagerTopicDeleteDetail) => {\n onDeleteTopic(detail.topicId);\n };\n const handleTopicUpdate = (detail: IssueManagerTopicUpdateDetail) => {\n onUpdateTopic(detail.input);\n };\n\n const unsubscribeSelection = issueManagerTopicSelectionHub.subscribe(\n issueManagerNodeScopeKey(input),\n handleTopicSelection\n );\n const unsubscribeCreate = issueManagerTopicCreateHub.subscribe(\n issueManagerNodeScopeKey(input),\n handleTopicCreate\n );\n const unsubscribeDelete = issueManagerTopicDeleteHub.subscribe(\n issueManagerNodeScopeKey(input),\n handleTopicDelete\n );\n const unsubscribeUpdate = issueManagerTopicUpdateHub.subscribe(\n issueManagerNodeScopeKey(input),\n handleTopicUpdate\n );\n return () => {\n unsubscribeSelection();\n unsubscribeCreate();\n unsubscribeDelete();\n unsubscribeUpdate();\n };\n }, [\n input.nodeId,\n input.workspaceId,\n onCreateTopic,\n onDeleteTopic,\n onSelectTopic,\n onUpdateTopic\n ]);\n}\n\nexport function useIssueManagerNodeHeaderView(input: {\n copy: IssueManagerI18nRuntime;\n isSidebarAutoCollapsed: boolean;\n isSidebarCollapsed: boolean;\n nodeId: string;\n onToggleSidebar: (nextCollapsed: boolean) => void;\n workspaceId: string;\n}) {\n const [manualCollapsed, setManualCollapsed] = useState(\n input.isSidebarCollapsed\n );\n\n useEffect(() => {\n setManualCollapsed(input.isSidebarCollapsed);\n }, [input.isSidebarCollapsed]);\n\n useIssueManagerTaskListCollapsedSync({\n nodeId: input.nodeId,\n onCollapsedChange: setManualCollapsed,\n workspaceId: input.workspaceId\n });\n\n const effectiveCollapsed = input.isSidebarAutoCollapsed || manualCollapsed;\n\n return {\n effectiveCollapsed,\n toggleLabel: effectiveCollapsed\n ? input.copy.t(\"actions.expandIssueList\")\n : input.copy.t(\"actions.collapseIssueList\"),\n toggleSidebar: () => {\n input.onToggleSidebar(!effectiveCollapsed);\n }\n };\n}\n\nfunction issueManagerNodeScopeKey(input: {\n nodeId: string;\n workspaceId: string;\n}): string {\n return `${input.workspaceId}\\0${input.nodeId}`;\n}\n\nexport function resolveIssueManagerSelectedIssue(input: {\n issueDetail: IssueManagerIssueSummary | null;\n issues: readonly IssueManagerIssueSummary[];\n selectedIssueId: string | null;\n}): IssueManagerIssueSummary | null {\n if (!input.selectedIssueId) {\n return null;\n }\n\n return (\n input.issueDetail ??\n input.issues.find((issue) => issue.issueId === input.selectedIssueId) ??\n null\n );\n}\n\nexport function resolveIssueManagerSelectedTask(input: {\n selectedTaskId: string | null;\n taskDetail: IssueManagerTaskSummary | null;\n tasks: readonly IssueManagerTaskSummary[];\n}): IssueManagerTaskSummary | null {\n if (!input.selectedTaskId) {\n return null;\n }\n\n return (\n input.taskDetail ??\n input.tasks.find((task) => task.taskId === input.selectedTaskId) ??\n null\n );\n}\n","export {\n collectVisibleTreeEntries,\n createWorkspaceFileReferenceDirectoryStateFromSnapshot as createReferenceDirectoryStateFromSnapshot,\n mergeExpandedFolderPaths,\n mergePrefetchedDirectoryState,\n normalizeDirectoryPath,\n prefetchReferenceTree,\n workspaceFileReferenceDefaultExpandedDepth as issueManagerReferenceDefaultExpandedDepth,\n type WorkspaceFileReferenceDirectoryState as IssueManagerReferenceDirectoryState\n} from \"@nextop-os/workspace-file-reference/react\";\n","import { useEffect, useMemo, useState } from \"react\";\nimport type { RichTextAtProvider } from \"@nextop-os/ui-rich-text/types\";\nimport type {\n IssueManagerAgentProviderOption,\n IssueManagerContextRef,\n IssueManagerFileReference,\n IssueManagerIssueDetail,\n IssueManagerIssueSummary,\n IssueManagerExecutionDirectoryProject,\n IssueManagerNodeState,\n IssueManagerPriority,\n IssueManagerTaskDetail,\n IssueManagerTopic,\n IssueManagerCreateTopicInput,\n IssueManagerUpdateTopicInput\n} from \"../../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../../core/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../../i18n/issueManagerI18n.ts\";\nimport type { IssueManagerControllerService } from \"../../../../services/issueManagerControllerService.interface.ts\";\nimport {\n resolveIssueManagerAgentProviderOptions,\n resolveIssueManagerControllerCapabilities\n} from \"./IssueManagerControllerCapabilities.ts\";\nimport type { IssueManagerFloatingNoticeViewState } from \"../shell/IssueManagerNoticeState.ts\";\nimport type {\n AsyncCollectionState,\n IssueDraft,\n IssueManagerNotificationState,\n TaskDraft\n} from \"../../../../services/controllerTypes.ts\";\nimport type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"../../../../services/controllerModel.ts\";\nimport { createIssueManagerControllerActionsBridge } from \"./createIssueManagerControllerActionsBridge.ts\";\nimport { createIssueManagerControllerBindings } from \"./createIssueManagerControllerBindings.ts\";\nimport { resolveIssueManagerTopicDeleteErrorMessage } from \"../../../../services/internal/controllerUtils.ts\";\nimport { useIssueManagerControllerRuntime } from \"./useIssueManagerControllerRuntime.ts\";\n\nexport type IssueManagerRichTextSurface = \"issue\" | \"task\";\n\nexport interface UseIssueManagerControllerInput {\n feature: IssueManagerFeature;\n onStateChange?: (state: IssueManagerNodeState) => void;\n resolveRichTextAtProviders?: (input: {\n surface: IssueManagerRichTextSurface;\n workspaceId: string;\n }) => readonly RichTextAtProvider[];\n service?: IssueManagerControllerService;\n state?: Partial<IssueManagerNodeState> | null;\n workspaceId: string;\n}\n\nexport interface IssueManagerController {\n attachReferences: (parentKind: \"issue\" | \"task\") => Promise<void>;\n canSelectExecutionDirectory: boolean;\n canInviteCollaborators: boolean;\n canReferenceWorkspaceFiles: boolean;\n canUploadWorkspaceFiles: boolean;\n copy: IssueManagerI18nRuntime;\n createTopic: (\n input: Omit<IssueManagerCreateTopicInput, \"workspaceId\">\n ) => Promise<void>;\n deleteTopic: (topicId: string) => Promise<void>;\n createTaskDraft: () => void;\n deleteIssue: (options?: { skipConfirmation?: boolean }) => Promise<void>;\n deleteTask: (options?: { skipConfirmation?: boolean }) => Promise<void>;\n dismissNotification: () => void;\n insertReferences: (parentKind: \"issue\" | \"task\") => Promise<void>;\n issueDetail: AsyncCollectionState<IssueManagerIssueDetail | null>;\n issueDraft: IssueDraft;\n issueEditorMode: IssueManagerEditorMode;\n floatingNotice: IssueManagerFloatingNoticeViewState | null;\n issues: AsyncCollectionState<IssueManagerIssueSummary[]>;\n isRunningTask: boolean;\n nodeState: IssueManagerNodeState;\n notification: IssueManagerNotificationState | null;\n openReference: (reference: IssueManagerFileReference) => Promise<void>;\n providerOptions: readonly IssueManagerAgentProviderOption[];\n listExecutionDirectoryProjects: () => Promise<{\n projects: IssueManagerExecutionDirectoryProject[];\n }>;\n refreshAll: () => void;\n referenceTarget: IssueManagerReferenceTarget | null;\n removeContextRef: (ref: IssueManagerContextRef) => Promise<void>;\n runTask: (providerOverride?: string) => Promise<void>;\n saveIssue: () => Promise<void>;\n saveTask: () => Promise<void>;\n resolveRichTextAtProviders: (\n surface: IssueManagerRichTextSurface\n ) => readonly RichTextAtProvider[];\n selectIssue: (issueId: string | null) => void;\n selectTask: (taskId: string | null) => void;\n selectTopic: (topicId: string) => void;\n setIssueContent: (content: string) => void;\n setIssueDraft: (patch: Partial<IssueDraft>) => void;\n setIssueEditorMode: (mode: IssueManagerEditorMode) => void;\n setIssueSearchQuery: (query: string) => void;\n setIssueStatusFilter: (\n value: IssueManagerNodeState[\"issueStatusFilter\"]\n ) => void;\n setIssueTitle: (title: string) => void;\n setReferenceTarget: (target: IssueManagerReferenceTarget | null) => void;\n setSelectedAgentProvider: (provider: string) => void;\n selectExecutionDirectory: () => Promise<void>;\n useExecutionDirectory: (path: string | null) => Promise<void>;\n setTaskContent: (content: string) => void;\n setTaskDraft: (patch: Partial<TaskDraft>) => void;\n setTaskEditorMode: (mode: IssueManagerEditorMode) => void;\n setTaskListCollapsed: (collapsed: boolean) => void;\n setTaskPriority: (priority: IssueManagerPriority) => void;\n setTaskTitle: (title: string) => void;\n shareSelection: () => Promise<void>;\n startTaskBreakdown: (providerOverride?: string) => Promise<void>;\n submitReferenceSelection: (\n refs: IssueManagerFileReference[]\n ) => Promise<void>;\n taskDetail: AsyncCollectionState<IssueManagerTaskDetail | null>;\n taskDraft: TaskDraft;\n taskEditorMode: IssueManagerEditorMode;\n topics: AsyncCollectionState<IssueManagerTopic[]>;\n updateTopic: (\n input: Omit<IssueManagerUpdateTopicInput, \"workspaceId\">\n ) => Promise<void>;\n uploadReferences: (\n parentKind: \"issue\" | \"task\",\n mode: \"files\" | \"folder\"\n ) => Promise<void>;\n workspaceId: string;\n}\n\nexport function useIssueManagerController({\n feature,\n onStateChange,\n resolveRichTextAtProviders,\n service,\n state,\n workspaceId\n}: UseIssueManagerControllerInput): IssueManagerController {\n const copy = feature.i18n;\n const { controllerSession, floatingNotice, snapshot } =\n useIssueManagerControllerRuntime({\n feature,\n onStateChange,\n service,\n state,\n workspaceId\n });\n const {\n issueDetail,\n issueDraft,\n issueEditorMode,\n issues,\n isRunningTask,\n nodeState,\n notification,\n referenceTarget,\n taskDetail,\n taskDraft,\n taskEditorMode,\n topics\n } = snapshot;\n const {\n canInviteCollaborators,\n canReferenceWorkspaceFiles,\n canSelectExecutionDirectory,\n canUploadWorkspaceFiles\n } = useMemo(\n () => resolveIssueManagerControllerCapabilities(feature),\n [feature]\n );\n const [providerOptions, setProviderOptions] = useState(() =>\n resolveIssueManagerAgentProviderOptions(feature)\n );\n\n useEffect(() => {\n setProviderOptions(resolveIssueManagerAgentProviderOptions(feature));\n return feature.agentProviderOptions?.subscribe?.(() => {\n setProviderOptions(resolveIssueManagerAgentProviderOptions(feature));\n });\n }, [feature]);\n\n const actions = createIssueManagerControllerActionsBridge({\n controllerSession,\n copy,\n feature,\n issueDetail,\n issueDraft,\n issueEditorMode,\n nodeState,\n referenceTarget,\n taskDetail,\n taskDraft,\n taskEditorMode,\n workspaceId\n });\n const bindings = createIssueManagerControllerBindings({\n controllerSession,\n issueEditorMode,\n nodeState,\n onResolveRichTextAtProviders: resolveRichTextAtProviders,\n taskEditorMode,\n workspaceId\n });\n const notifyTopicOperationFailure = (message: string) => {\n feature.notifications?.tips(message);\n controllerSession.setNotification((current) => ({\n id: (current?.id ?? 0) + 1,\n title: message,\n tone: \"destructive\"\n }));\n };\n\n return {\n ...actions,\n ...bindings,\n canInviteCollaborators,\n canReferenceWorkspaceFiles,\n canSelectExecutionDirectory,\n canUploadWorkspaceFiles,\n copy,\n async createTopic(topicInput) {\n try {\n const topic = await feature.backend.createTopic({\n ...topicInput,\n workspaceId\n });\n controllerSession.updateNodeState((current) => ({\n ...current,\n activeTopicId: topic.topicId\n }));\n controllerSession.refreshAll();\n } catch {\n notifyTopicOperationFailure(copy.t(\"messages.topicCreateFailed\"));\n }\n },\n async deleteTopic(topicId) {\n const trimmedTopicId = topicId.trim();\n if (!trimmedTopicId) {\n return;\n }\n try {\n await feature.backend.deleteTopic({\n topicId: trimmedTopicId,\n workspaceId\n });\n if (nodeState.activeTopicId === trimmedTopicId) {\n controllerSession.updateNodeState((current) => ({\n ...current,\n activeTopicId: null,\n selectedIssueId: null,\n selectedTaskId: null\n }));\n }\n controllerSession.refreshAll();\n } catch (error) {\n notifyTopicOperationFailure(\n resolveIssueManagerTopicDeleteErrorMessage(error, copy)\n );\n }\n },\n issueDetail,\n issueDraft,\n issueEditorMode,\n floatingNotice,\n issues,\n isRunningTask,\n nodeState,\n notification,\n providerOptions,\n listExecutionDirectoryProjects: () =>\n feature.executionDirectoryPicker?.listUserProjects?.() ??\n Promise.resolve({ projects: [] }),\n referenceTarget,\n selectTopic(topicId: string) {\n const trimmedTopicId = topicId.trim();\n if (!trimmedTopicId) {\n return;\n }\n controllerSession.updateNodeState((current) => ({\n ...current,\n activeTopicId: trimmedTopicId\n }));\n },\n taskDetail,\n taskDraft,\n taskEditorMode,\n topics,\n async updateTopic(topicInput) {\n try {\n await feature.backend.updateTopic({\n ...topicInput,\n workspaceId\n });\n controllerSession.refreshAll();\n } catch {\n notifyTopicOperationFailure(copy.t(\"messages.topicUpdateFailed\"));\n }\n },\n workspaceId\n };\n}\n","import type {\n IssueManagerAgentProviderOption,\n IssueManagerFileAdapter\n} from \"../../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../../core/index.ts\";\n\nexport const defaultIssueManagerAgentProviderOptions = [\n {\n label: \"Codex\",\n provider: \"codex\"\n }\n] as const satisfies readonly IssueManagerAgentProviderOption[];\n\nexport function resolveIssueManagerAgentProviderOptions(\n feature: IssueManagerFeature\n): readonly IssueManagerAgentProviderOption[] {\n if (!feature.agentProviderOptions) {\n return defaultIssueManagerAgentProviderOptions;\n }\n\n const configuredOptions = feature.agentProviderOptions.getOptions();\n const normalizedOptions = configuredOptions\n .map((option) => {\n const disabledReason = option.disabledReason?.trim();\n return {\n ...(option.disabled === true ? { disabled: true } : {}),\n ...(disabledReason ? { disabledReason } : {}),\n label: option.label.trim() || option.provider.trim(),\n provider: option.provider.trim()\n };\n })\n .filter((option) => option.provider && option.label);\n\n return normalizedOptions;\n}\n\nexport interface IssueManagerControllerCapabilities {\n canSelectExecutionDirectory: boolean;\n canInviteCollaborators: boolean;\n canReferenceWorkspaceFiles: boolean;\n canUploadWorkspaceFiles: boolean;\n}\n\nexport function resolveIssueManagerControllerCapabilities(\n feature: IssueManagerFeature\n): IssueManagerControllerCapabilities {\n return {\n canSelectExecutionDirectory:\n typeof feature.executionDirectoryPicker?.selectDirectory === \"function\",\n canInviteCollaborators:\n feature.ui.showInviteCollaborator === true &&\n typeof feature.shareAdapter?.createIssueLink === \"function\",\n canReferenceWorkspaceFiles:\n hasFileAdapterMethod(feature.fileAdapter, \"requestReferences\") ||\n hasFileAdapterMethod(feature.fileAdapter, \"loadReferenceTree\") ||\n hasFileAdapterMethod(feature.fileAdapter, \"listDirectory\") ||\n hasFileAdapterMethod(feature.fileAdapter, \"searchReferences\"),\n canUploadWorkspaceFiles: hasFileAdapterMethod(\n feature.fileAdapter,\n \"requestUpload\"\n )\n };\n}\n\nfunction hasFileAdapterMethod(\n fileAdapter: IssueManagerFileAdapter | undefined,\n methodName:\n | \"listDirectory\"\n | \"loadReferenceTree\"\n | \"requestReferences\"\n | \"requestUpload\"\n | \"searchReferences\"\n): boolean {\n return typeof Reflect.get(fileAdapter ?? {}, methodName) === \"function\";\n}\n","import type { IssueManagerNodeState } from \"../../contracts/index.ts\";\nimport type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"./model.ts\";\nimport type {\n IssueDraft,\n IssueManagerNotificationTone,\n TaskDraft\n} from \"./controllerTypes.ts\";\nimport {\n applyIssueManagerIssueSaved,\n applyIssueManagerTaskSaved\n} from \"./controllerState.ts\";\n\nexport interface IssueManagerControllerOutcome {\n issueDraft?: (current: IssueDraft) => IssueDraft;\n issueEditorMode?: IssueManagerEditorMode;\n nodeState?: (current: IssueManagerNodeState) => IssueManagerNodeState;\n notificationKey?: string;\n referenceTarget?: IssueManagerReferenceTarget | null;\n refreshAll?: boolean;\n refreshDetails?: boolean;\n taskDraft?: (current: TaskDraft) => TaskDraft;\n taskEditorMode?: IssueManagerEditorMode;\n}\n\nexport interface ApplyIssueManagerControllerOutcomeInput {\n notify: (title: string, tone?: IssueManagerNotificationTone) => void;\n outcome: IssueManagerControllerOutcome;\n refreshAll: () => void;\n refreshDetails: () => void;\n setIssueDraftInternal: (updater: (current: IssueDraft) => IssueDraft) => void;\n setIssueEditorModeState: (mode: IssueManagerEditorMode) => void;\n setReferenceTarget: (target: IssueManagerReferenceTarget | null) => void;\n setTaskDraftInternal: (updater: (current: TaskDraft) => TaskDraft) => void;\n setTaskEditorModeState: (mode: IssueManagerEditorMode) => void;\n translate: (key: string) => string;\n updateNodeState: (\n updater: (current: IssueManagerNodeState) => IssueManagerNodeState\n ) => void;\n}\n\nexport function applyIssueManagerControllerOutcome(\n input: ApplyIssueManagerControllerOutcomeInput\n): void {\n if (input.outcome.notificationKey) {\n input.notify(input.translate(input.outcome.notificationKey));\n }\n if (input.outcome.issueDraft) {\n input.setIssueDraftInternal(input.outcome.issueDraft);\n }\n if (input.outcome.issueEditorMode) {\n input.setIssueEditorModeState(input.outcome.issueEditorMode);\n }\n if (\"referenceTarget\" in input.outcome) {\n input.setReferenceTarget(input.outcome.referenceTarget ?? null);\n }\n if (input.outcome.taskDraft) {\n input.setTaskDraftInternal(input.outcome.taskDraft);\n }\n if (input.outcome.taskEditorMode) {\n input.setTaskEditorModeState(input.outcome.taskEditorMode);\n }\n if (input.outcome.nodeState) {\n input.updateNodeState(input.outcome.nodeState);\n }\n if (input.outcome.refreshAll) {\n input.refreshAll();\n }\n if (input.outcome.refreshDetails) {\n input.refreshDetails();\n }\n}\n\nexport function createIssueManagerRunTaskSuccessOutcome(input: {\n status: string;\n}): IssueManagerControllerOutcome {\n return {\n notificationKey:\n input.status === \"completed\" ? undefined : \"messages.runFailed\"\n };\n}\n\nexport function createIssueManagerSaveIssueSuccessOutcome(\n issueId: string\n): IssueManagerControllerOutcome {\n return {\n issueEditorMode: \"read\",\n nodeState: (current) => applyIssueManagerIssueSaved(current, issueId),\n refreshAll: true\n };\n}\n\nexport function createIssueManagerSaveTaskSuccessOutcome(\n taskId: string\n): IssueManagerControllerOutcome {\n return {\n nodeState: (current) => applyIssueManagerTaskSaved(current, taskId),\n refreshAll: true,\n taskEditorMode: \"read\"\n };\n}\n","import type {\n IssueManagerContextRef,\n IssueManagerFileReference\n} from \"../../../contracts/index.ts\";\nimport {\n appendIssueManagerWorkspaceFileLinksToContent,\n type IssueManagerFeature\n} from \"../../../core/index.ts\";\nimport type { IssueManagerReferenceTarget } from \"../model.ts\";\nimport {\n toContextRefInput,\n toIssueManagerWorkspaceFileLinkInput\n} from \"../controllerUtils.ts\";\n\nexport function canIssueManagerRequestReferencesDirectly(\n fileAdapter: IssueManagerFeature[\"fileAdapter\"]\n): fileAdapter is NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n requestReferences: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"requestReferences\"]\n >;\n} {\n return Boolean(\n fileAdapter?.requestReferences &&\n !fileAdapter.loadReferenceTree &&\n !fileAdapter.listDirectory &&\n !fileAdapter.searchReferences\n );\n}\n\nexport async function executeIssueManagerRequestReferences(input: {\n fileAdapter: NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n requestReferences: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"requestReferences\"]\n >;\n };\n workspaceId: string;\n}): Promise<IssueManagerFileReference[]> {\n return input.fileAdapter.requestReferences({\n workspaceId: input.workspaceId\n });\n}\n\nexport function canIssueManagerUploadReferences(\n fileAdapter: IssueManagerFeature[\"fileAdapter\"]\n): fileAdapter is NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n requestUpload: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"requestUpload\"]\n >;\n} {\n return typeof fileAdapter?.requestUpload === \"function\";\n}\n\nexport function canIssueManagerOpenReferences(\n fileAdapter: IssueManagerFeature[\"fileAdapter\"]\n): fileAdapter is NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n openReference: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"openReference\"]\n >;\n} {\n return typeof fileAdapter?.openReference === \"function\";\n}\n\nexport async function executeIssueManagerUploadReferences(input: {\n fileAdapter: NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n requestUpload: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"requestUpload\"]\n >;\n };\n mode: \"files\" | \"folder\";\n workspaceId: string;\n}): Promise<IssueManagerFileReference[]> {\n const refs = await input.fileAdapter.requestUpload({\n mode: input.mode,\n targetDirectoryPath: \"/\",\n workspaceId: input.workspaceId\n });\n\n if (refs.length === 0) {\n return refs;\n }\n\n await input.fileAdapter.refreshTree?.({\n depth: 1,\n paths: refs.map((ref) => ref.path),\n workspaceId: input.workspaceId\n });\n\n return refs;\n}\n\nexport function resolveIssueManagerReferenceInsertionContent(input: {\n content: string;\n refs: IssueManagerFileReference[];\n}): string {\n const preparedRefs = prepareIssueManagerReferences(input.refs);\n if (preparedRefs.length === 0) {\n return input.content;\n }\n\n return appendIssueManagerWorkspaceFileLinksToContent(\n input.content,\n preparedRefs.map(toIssueManagerWorkspaceFileLinkInput)\n );\n}\n\nexport async function executeIssueManagerAttachReferences(input: {\n backend: IssueManagerFeature[\"backend\"];\n refs: IssueManagerFileReference[];\n selectedIssueId: string | null;\n target: Exclude<IssueManagerReferenceTarget, { mode: \"insert\" }> | null;\n workspaceId: string;\n}): Promise<boolean> {\n const preparedRefs = prepareIssueManagerReferences(input.refs);\n if (!input.target || preparedRefs.length === 0 || !input.selectedIssueId) {\n return false;\n }\n\n await input.backend.addContextRefs(\n input.target.parentKind === \"task\"\n ? {\n issueId: input.selectedIssueId,\n parentKind: \"task\",\n refs: preparedRefs.map(toContextRefInput),\n taskId: input.target.taskId,\n workspaceId: input.workspaceId\n }\n : {\n issueId: input.selectedIssueId,\n parentKind: \"issue\",\n refs: preparedRefs.map(toContextRefInput),\n workspaceId: input.workspaceId\n }\n );\n\n return true;\n}\n\nexport async function executeIssueManagerOpenReference(input: {\n fileAdapter: NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n openReference: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"openReference\"]\n >;\n };\n reference: IssueManagerFileReference;\n}): Promise<void> {\n await input.fileAdapter.openReference(input.reference);\n}\n\nexport async function executeIssueManagerRemoveContextRef(input: {\n backend: IssueManagerFeature[\"backend\"];\n ref: IssueManagerContextRef;\n workspaceId: string;\n}): Promise<void> {\n await input.backend.removeContextRef(\n input.ref.parentKind === \"task\"\n ? {\n contextRefId: input.ref.contextRefId,\n issueId: input.ref.issueId,\n parentKind: \"task\",\n taskId: input.ref.taskId,\n workspaceId: input.workspaceId\n }\n : {\n contextRefId: input.ref.contextRefId,\n issueId: input.ref.issueId,\n parentKind: \"issue\",\n workspaceId: input.workspaceId\n }\n );\n}\n\nfunction prepareIssueManagerReferences(\n refs: IssueManagerFileReference[]\n): IssueManagerFileReference[] {\n return refs.filter((ref) => ref.path.trim().length > 0);\n}\n","import type {\n IssueManagerFileReference,\n IssueManagerNodeState\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerReferenceTarget } from \"../model.ts\";\nimport type { IssueDraft, TaskDraft } from \"../controllerTypes.ts\";\nimport { resolveIssueManagerReferenceInsertionContent } from \"./controllerReferenceCommands.ts\";\n\nexport interface IssueManagerReferenceOutcome {\n issueDraft?: (current: IssueDraft) => IssueDraft;\n nodeState?: (current: IssueManagerNodeState) => IssueManagerNodeState;\n referenceTarget?: IssueManagerReferenceTarget | null;\n refreshAll?: boolean;\n refreshDetails?: boolean;\n taskDraft?: (current: TaskDraft) => TaskDraft;\n}\n\nexport function createIssueManagerOpenReferencePickerOutcome(\n target: IssueManagerReferenceTarget\n): IssueManagerReferenceOutcome {\n return {\n referenceTarget: target\n };\n}\n\nexport function createIssueManagerAttachReferencesOutcome(\n attached: boolean\n): IssueManagerReferenceOutcome {\n return {\n referenceTarget: null,\n refreshDetails: attached\n };\n}\n\nexport function createIssueManagerInsertReferencesOutcome(input: {\n refs: IssueManagerFileReference[];\n target: Extract<IssueManagerReferenceTarget, { mode: \"insert\" }>;\n}): IssueManagerReferenceOutcome {\n return input.target.parentKind === \"issue\"\n ? {\n issueDraft: (current) => ({\n ...current,\n content: resolveIssueManagerReferenceInsertionContent({\n content: current.content,\n refs: input.refs\n })\n }),\n referenceTarget: null\n }\n : {\n referenceTarget: null,\n taskDraft: (current) => ({\n ...current,\n content: resolveIssueManagerReferenceInsertionContent({\n content: current.content,\n refs: input.refs\n })\n })\n };\n}\n","import type {\n IssueManagerIssueDetail,\n IssueManagerTaskDetail\n} from \"../../contracts/index.ts\";\nimport type { IssueDraft, TaskDraft } from \"./controllerTypes.ts\";\n\nexport type IssueManagerSavePlan<TResult> =\n | {\n kind: \"blocked\";\n notificationKey: \"messages.titleRequired\" | \"messages.topicListEmpty\";\n }\n | ({ kind: \"ready\" } & TResult);\n\nexport function createIssueManagerRunTaskPlan(input: {\n issueDetail: IssueManagerIssueDetail | null;\n providerOverride?: string;\n selectedAgentProvider: string;\n taskDetail: IssueManagerTaskDetail | null;\n}):\n | {\n kind: \"ready\";\n provider: string;\n shouldUpdateSelectedAgentProvider: boolean;\n }\n | { kind: \"skip\" } {\n if (!input.issueDetail) {\n return { kind: \"skip\" };\n }\n\n const provider =\n input.providerOverride?.trim() || input.selectedAgentProvider.trim();\n if (!provider) {\n return { kind: \"skip\" };\n }\n\n return {\n kind: \"ready\",\n provider,\n shouldUpdateSelectedAgentProvider: provider !== input.selectedAgentProvider\n };\n}\n\nexport function createIssueManagerSaveIssuePlan(input: {\n activeTopicId: string | null;\n issueDraft: IssueDraft;\n}): IssueManagerSavePlan<{ activeTopicId: string }> {\n if (!input.activeTopicId) {\n return {\n kind: \"blocked\",\n notificationKey: \"messages.topicListEmpty\"\n };\n }\n\n const title = input.issueDraft.title.trim();\n if (!title) {\n return {\n kind: \"blocked\",\n notificationKey: \"messages.titleRequired\"\n };\n }\n\n return { kind: \"ready\", activeTopicId: input.activeTopicId };\n}\n\nexport function createIssueManagerSaveTaskPlan(input: {\n selectedIssueId: string | null;\n taskDraft: TaskDraft;\n}): IssueManagerSavePlan<{ selectedIssueId: string }> | { kind: \"skip\" } {\n if (!input.selectedIssueId) {\n return { kind: \"skip\" };\n }\n\n const title = input.taskDraft.title.trim();\n if (!title) {\n return {\n kind: \"blocked\",\n notificationKey: \"messages.titleRequired\"\n };\n }\n\n return {\n kind: \"ready\",\n selectedIssueId: input.selectedIssueId\n };\n}\n\nexport function shouldIssueManagerNotifyRunFailure(status: string): boolean {\n return status !== \"completed\";\n}\n","import type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"../model.ts\";\n\nexport function createIssueManagerAttachReferenceTarget(\n parentKind: \"issue\" | \"task\",\n selectedTaskId: string | null\n): Extract<IssueManagerReferenceTarget, { mode: \"attach\" }> {\n return parentKind === \"task\"\n ? {\n mode: \"attach\",\n parentKind: \"task\",\n taskId: selectedTaskId ?? \"\"\n }\n : {\n mode: \"attach\",\n parentKind: \"issue\"\n };\n}\n\nexport function createIssueManagerInsertReferenceTarget(\n parentKind: \"issue\" | \"task\",\n selectedTaskId: string | null\n): Extract<IssueManagerReferenceTarget, { mode: \"insert\" }> {\n return parentKind === \"task\"\n ? {\n mode: \"insert\",\n parentKind: \"task\",\n taskId: selectedTaskId ?? \"\"\n }\n : {\n mode: \"insert\",\n parentKind: \"issue\"\n };\n}\n\nexport function createIssueManagerAttachReferencesPlan(input: {\n hasFileAdapter: boolean;\n parentKind: \"issue\" | \"task\";\n requestReferencesDirectly: boolean;\n selectedTaskId: string | null;\n}):\n | {\n kind: \"open_picker\";\n target: Extract<IssueManagerReferenceTarget, { mode: \"attach\" }>;\n }\n | {\n kind: \"request_directly\";\n target: Extract<IssueManagerReferenceTarget, { mode: \"attach\" }>;\n }\n | { kind: \"skip\" } {\n if (!input.hasFileAdapter) {\n return { kind: \"skip\" };\n }\n if (input.parentKind === \"task\" && !input.selectedTaskId) {\n return { kind: \"skip\" };\n }\n\n const target = createIssueManagerAttachReferenceTarget(\n input.parentKind,\n input.selectedTaskId\n );\n return input.requestReferencesDirectly\n ? { kind: \"request_directly\", target }\n : { kind: \"open_picker\", target };\n}\n\nexport function createIssueManagerInsertReferencesPlan(input: {\n hasFileAdapter: boolean;\n parentKind: \"issue\" | \"task\";\n requestReferencesDirectly: boolean;\n selectedTaskId: string | null;\n taskEditorMode: IssueManagerEditorMode;\n}):\n | {\n kind: \"open_picker\";\n target: Extract<IssueManagerReferenceTarget, { mode: \"insert\" }>;\n }\n | {\n kind: \"request_directly\";\n target: Extract<IssueManagerReferenceTarget, { mode: \"insert\" }>;\n }\n | { kind: \"skip\" } {\n if (!input.hasFileAdapter) {\n return { kind: \"skip\" };\n }\n if (\n input.parentKind === \"task\" &&\n !input.selectedTaskId &&\n input.taskEditorMode !== \"create\"\n ) {\n return { kind: \"skip\" };\n }\n\n const target = createIssueManagerInsertReferenceTarget(\n input.parentKind,\n input.selectedTaskId\n );\n return input.requestReferencesDirectly\n ? { kind: \"request_directly\", target }\n : { kind: \"open_picker\", target };\n}\n","import type {\n IssueManagerAgentRunResult,\n IssueManagerIssueDetail,\n IssueManagerTaskDetail\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../core/index.ts\";\n\nexport async function executeIssueManagerRunTask(input: {\n executionDirectory?: string | null;\n feature: IssueManagerFeature;\n issue: IssueManagerIssueDetail[\"issue\"];\n provider: string;\n task?: IssueManagerTaskDetail[\"task\"];\n workspaceId: string;\n}): Promise<{ status: string }> {\n const agentSessionId = createIssueManagerAgentSessionId();\n const run = await input.feature.backend.createRun({\n agentProvider: input.provider,\n agentSessionId,\n issueId: input.issue.issueId,\n ...(input.task ? { taskId: input.task.taskId } : {}),\n workspaceId: input.workspaceId\n });\n\n let result: IssueManagerAgentRunResult;\n\n try {\n result = await input.feature.agentRunner.runTask({\n agentSessionId,\n run,\n ...(input.executionDirectory?.trim()\n ? { executionDirectory: input.executionDirectory.trim() }\n : {}),\n issue: input.issue,\n provider: input.provider,\n ...(input.task ? { task: input.task } : {}),\n workspaceId: input.workspaceId\n });\n } catch (error) {\n await input.feature.backend.completeRun({\n errorMessage: errorMessageFromUnknown(error),\n issueId: input.issue.issueId,\n outputs: [],\n runId: run.runId,\n status: \"failed\",\n ...(input.task ? { taskId: input.task.taskId } : {}),\n workspaceId: input.workspaceId\n });\n throw error;\n }\n\n const completed = await input.feature.backend.completeRun({\n errorMessage: result.errorMessage,\n issueId: input.issue.issueId,\n outputs: result.outputs ?? [],\n runId: run.runId,\n status: result.status,\n summary: result.summary,\n ...(input.task ? { taskId: input.task.taskId } : {}),\n workspaceId: input.workspaceId\n });\n\n return {\n status: completed.run.status\n };\n}\n\nfunction createIssueManagerAgentSessionId(): string {\n const randomUUID = globalThis.crypto?.randomUUID?.();\n if (randomUUID) {\n return randomUUID;\n }\n const bytes = new Uint8Array(16);\n const crypto = globalThis.crypto;\n if (crypto?.getRandomValues) {\n crypto.getRandomValues(bytes);\n } else {\n for (let index = 0; index < bytes.length; index += 1) {\n bytes[index] = Math.floor(Math.random() * 256);\n }\n }\n bytes[6] = ((bytes[6] ?? 0) & 0x0f) | 0x40;\n bytes[8] = ((bytes[8] ?? 0) & 0x3f) | 0x80;\n const hex = Array.from(bytes, (byte) =>\n byte.toString(16).padStart(2, \"0\")\n ).join(\"\");\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\nfunction errorMessageFromUnknown(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n if (typeof error === \"string\") {\n return error;\n }\n return String(error);\n}\n","import type {\n IssueManagerContextRef,\n IssueManagerIssueDetail,\n IssueManagerIssueSummary,\n IssueManagerTaskDetail,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport {\n extractIssueManagerWorkspaceFileLinksFromContent,\n normalizeIssueManagerContent,\n type IssueManagerFeature\n} from \"../../../core/index.ts\";\nimport type { IssueManagerEditorMode } from \"../model.ts\";\nimport type { IssueDraft, TaskDraft } from \"../controllerTypes.ts\";\n\nexport async function executeIssueManagerSaveIssue(input: {\n activeTopicId: string;\n feature: IssueManagerFeature;\n issueDetail: IssueManagerIssueDetail | null;\n issueDraft: IssueDraft;\n issueEditorMode: IssueManagerEditorMode;\n selectedIssueId: string | null;\n workspaceId: string;\n}): Promise<{ content: string; savedIssue: IssueManagerIssueSummary }> {\n const content = normalizeIssueManagerContent(input.issueDraft.content);\n const savedIssue =\n input.issueEditorMode === \"create\"\n ? await input.feature.backend.createIssue({\n content,\n title: input.issueDraft.title.trim(),\n topicId: input.activeTopicId,\n workspaceId: input.workspaceId\n })\n : await input.feature.backend.updateIssue({\n content,\n issueId: input.selectedIssueId ?? \"\",\n title: input.issueDraft.title.trim(),\n workspaceId: input.workspaceId\n });\n\n await syncIssueManagerContentReferences({\n backend: input.feature.backend,\n content,\n existingRefs:\n input.issueEditorMode === \"create\"\n ? []\n : (input.issueDetail?.contextRefs.filter(\n (ref) => ref.parentKind === \"issue\"\n ) ?? []),\n issueId: savedIssue.issueId,\n parentKind: \"issue\",\n workspaceId: input.workspaceId\n });\n\n return {\n content,\n savedIssue\n };\n}\n\nexport async function executeIssueManagerSaveTask(input: {\n feature: IssueManagerFeature;\n selectedIssueId: string;\n selectedTaskId: string | null;\n taskDetail: IssueManagerTaskDetail | null;\n taskDraft: TaskDraft;\n taskEditorMode: IssueManagerEditorMode;\n workspaceId: string;\n}): Promise<{ content: string; savedTask: IssueManagerTaskSummary }> {\n const content = normalizeIssueManagerContent(input.taskDraft.content);\n const savedTask =\n input.taskEditorMode === \"create\"\n ? await input.feature.backend.createTask({\n content,\n issueId: input.selectedIssueId,\n priority: input.taskDraft.priority,\n title: input.taskDraft.title.trim(),\n workspaceId: input.workspaceId\n })\n : await input.feature.backend.updateTask({\n content,\n issueId: input.selectedIssueId,\n priority: input.taskDraft.priority,\n taskId: input.selectedTaskId ?? \"\",\n title: input.taskDraft.title.trim(),\n workspaceId: input.workspaceId\n });\n\n await syncIssueManagerContentReferences({\n backend: input.feature.backend,\n content,\n existingRefs:\n input.taskEditorMode === \"create\"\n ? []\n : (input.taskDetail?.contextRefs.filter(\n (ref) => ref.parentKind === \"task\"\n ) ?? []),\n issueId: input.selectedIssueId,\n parentKind: \"task\",\n taskId: savedTask.taskId,\n workspaceId: input.workspaceId\n });\n\n return {\n content,\n savedTask\n };\n}\n\nasync function syncIssueManagerContentReferences(input: {\n backend: IssueManagerFeature[\"backend\"];\n content: string;\n existingRefs: IssueManagerContextRef[];\n issueId: string;\n parentKind: \"issue\" | \"task\";\n taskId?: string;\n workspaceId: string;\n}): Promise<void> {\n const existingPaths = new Set(input.existingRefs.map((ref) => ref.path));\n const missingRefs = extractIssueManagerWorkspaceFileLinksFromContent(\n input.content\n )\n .filter((ref) => !existingPaths.has(ref.path))\n .map((ref) => ({\n displayName: ref.name,\n path: ref.path,\n refType: ref.kind\n }));\n\n if (missingRefs.length === 0) {\n return;\n }\n\n await input.backend.addContextRefs(\n input.parentKind === \"task\"\n ? {\n issueId: input.issueId,\n parentKind: \"task\",\n refs: missingRefs,\n taskId: input.taskId ?? \"\",\n workspaceId: input.workspaceId\n }\n : {\n issueId: input.issueId,\n parentKind: \"issue\",\n refs: missingRefs,\n workspaceId: input.workspaceId\n }\n );\n}\n","import type { IssueManagerFeature } from \"../../../core/index.ts\";\n\nexport function canIssueManagerCreateShareLink(\n shareAdapter: IssueManagerFeature[\"shareAdapter\"]\n): shareAdapter is NonNullable<IssueManagerFeature[\"shareAdapter\"]> & {\n createIssueLink: NonNullable<\n NonNullable<IssueManagerFeature[\"shareAdapter\"]>[\"createIssueLink\"]\n >;\n} {\n return typeof shareAdapter?.createIssueLink === \"function\";\n}\n\nexport async function executeIssueManagerShareSelection(input: {\n issueId: string;\n shareAdapter: NonNullable<IssueManagerFeature[\"shareAdapter\"]> & {\n createIssueLink: NonNullable<\n NonNullable<IssueManagerFeature[\"shareAdapter\"]>[\"createIssueLink\"]\n >;\n };\n taskId: string | null;\n workspaceId: string;\n}): Promise<void> {\n const link = await input.shareAdapter.createIssueLink({\n issueId: input.issueId,\n taskId: input.taskId ?? undefined,\n workspaceId: input.workspaceId\n });\n if (typeof navigator === \"undefined\" || !navigator.clipboard?.writeText) {\n throw new Error(\"issue_manager.clipboard_unavailable\");\n }\n await navigator.clipboard.writeText(link);\n}\n","import type { Dispatch, SetStateAction } from \"react\";\nimport type {\n IssueManagerContextRef,\n IssueManagerFileReference,\n IssueManagerIssueDetail,\n IssueManagerNodeState,\n IssueManagerTaskDetail\n} from \"../../contracts/index.ts\";\nimport { type IssueManagerFeature } from \"../../core/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\nimport type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"./model.ts\";\nimport {\n applyIssueManagerControllerOutcome,\n createIssueManagerRunTaskSuccessOutcome,\n createIssueManagerSaveIssueSuccessOutcome,\n createIssueManagerSaveTaskSuccessOutcome,\n type IssueManagerControllerOutcome\n} from \"./controllerOutcomes.ts\";\nimport {\n createIssueManagerAttachReferencesOutcome,\n createIssueManagerInsertReferencesOutcome,\n createIssueManagerOpenReferencePickerOutcome\n} from \"./reference/controllerReferenceOutcomes.ts\";\nimport {\n createIssueManagerRunTaskPlan,\n createIssueManagerSaveIssuePlan,\n createIssueManagerSaveTaskPlan\n} from \"./controllerPlans.ts\";\nimport {\n createIssueManagerAttachReferencesPlan,\n createIssueManagerInsertReferenceTarget,\n createIssueManagerInsertReferencesPlan\n} from \"./reference/controllerReferencePlans.ts\";\nimport {\n canIssueManagerOpenReferences,\n canIssueManagerRequestReferencesDirectly,\n canIssueManagerUploadReferences,\n executeIssueManagerAttachReferences,\n executeIssueManagerOpenReference,\n executeIssueManagerRequestReferences,\n executeIssueManagerRemoveContextRef,\n executeIssueManagerUploadReferences\n} from \"./reference/controllerReferenceCommands.ts\";\nimport { executeIssueManagerRunTask } from \"./run/controllerRunCommands.ts\";\nimport {\n executeIssueManagerSaveIssue,\n executeIssueManagerSaveTask\n} from \"./save/controllerSaveCommands.ts\";\nimport {\n canIssueManagerCreateShareLink,\n executeIssueManagerShareSelection\n} from \"./share/controllerShareCommands.ts\";\nimport type {\n IssueDraft,\n IssueManagerNotificationTone,\n TaskDraft\n} from \"./controllerTypes.ts\";\nimport {\n confirmIssueManagerMessage,\n defaultTaskPriority,\n resolveIssueManagerErrorMessage\n} from \"./controllerUtils.ts\";\nimport {\n applyIssueManagerIssueDeleted,\n applyIssueManagerSelectedAgentProvider,\n applyIssueManagerSelectedExecutionDirectory,\n applyIssueManagerTaskDeleted\n} from \"./controllerState.ts\";\n\ninterface CreateIssueManagerControllerActionsInput {\n copy: IssueManagerI18nRuntime;\n feature: IssueManagerFeature;\n issueDetail: {\n value: IssueManagerIssueDetail | null;\n };\n issueDraft: IssueDraft;\n issueEditorMode: IssueManagerEditorMode;\n nodeState: IssueManagerNodeState;\n referenceTarget: IssueManagerReferenceTarget | null;\n refreshAll: () => void;\n refreshDetails: () => void;\n setNotification: (input: {\n title: string;\n tone?: IssueManagerNotificationTone;\n }) => void;\n setIsRunningTask: Dispatch<SetStateAction<boolean>>;\n setIssueDraftInternal: Dispatch<SetStateAction<IssueDraft>>;\n setIssueEditorModeState: Dispatch<SetStateAction<IssueManagerEditorMode>>;\n setReferenceTarget: Dispatch<\n SetStateAction<IssueManagerReferenceTarget | null>\n >;\n setTaskDraftInternal: Dispatch<SetStateAction<TaskDraft>>;\n setTaskEditorModeState: Dispatch<SetStateAction<IssueManagerEditorMode>>;\n taskDetail: {\n value: IssueManagerTaskDetail | null;\n };\n taskDraft: TaskDraft;\n taskEditorMode: IssueManagerEditorMode;\n updateNodeState: (\n updater:\n | Partial<IssueManagerNodeState>\n | ((current: IssueManagerNodeState) => IssueManagerNodeState)\n ) => void;\n workspaceId: string;\n}\n\ninterface IssueManagerDeleteOptions {\n skipConfirmation?: boolean;\n}\n\nexport type { IssueManagerDeleteOptions };\n\nexport function createIssueManagerControllerActions(\n input: CreateIssueManagerControllerActionsInput\n) {\n const {\n copy,\n feature,\n issueDetail,\n issueDraft,\n issueEditorMode,\n nodeState,\n referenceTarget,\n refreshAll,\n refreshDetails,\n setNotification,\n setIsRunningTask,\n setIssueDraftInternal,\n setIssueEditorModeState,\n setReferenceTarget,\n setTaskDraftInternal,\n setTaskEditorModeState,\n taskDetail,\n taskDraft,\n taskEditorMode,\n updateNodeState,\n workspaceId\n } = input;\n\n const notifyTip = (\n message: string,\n tone: IssueManagerNotificationTone = \"destructive\"\n ) => {\n setNotification({\n title: message,\n tone\n });\n };\n\n const notifyError = (error: unknown, fallbackKey: string) => {\n setNotification({\n title: resolveIssueManagerErrorMessage(error, copy, fallbackKey),\n tone: \"destructive\"\n });\n };\n\n const applyOutcome = (outcome: IssueManagerControllerOutcome) => {\n applyIssueManagerControllerOutcome({\n notify: notifyTip,\n outcome,\n refreshAll,\n refreshDetails,\n setIssueDraftInternal,\n setIssueEditorModeState,\n setReferenceTarget: (target) => setReferenceTarget(target),\n setTaskDraftInternal,\n setTaskEditorModeState,\n translate: (key) => copy.t(key),\n updateNodeState\n });\n };\n\n const submitReferences = async (\n refs: IssueManagerFileReference[],\n target: IssueManagerReferenceTarget | null = referenceTarget\n ) => {\n if (!target) {\n applyOutcome({\n referenceTarget: null\n });\n return;\n }\n\n if (target.mode === \"insert\") {\n applyOutcome(\n createIssueManagerInsertReferencesOutcome({\n refs,\n target\n })\n );\n return;\n }\n\n const attached = await executeIssueManagerAttachReferences({\n backend: feature.backend,\n refs,\n selectedIssueId: nodeState.selectedIssueId,\n target,\n workspaceId\n });\n applyOutcome(createIssueManagerAttachReferencesOutcome(attached));\n };\n\n return {\n async attachReferences(parentKind: \"issue\" | \"task\") {\n const fileAdapter = feature.fileAdapter;\n const attachPlan = createIssueManagerAttachReferencesPlan({\n hasFileAdapter: Boolean(fileAdapter),\n parentKind,\n requestReferencesDirectly:\n canIssueManagerRequestReferencesDirectly(fileAdapter),\n selectedTaskId: nodeState.selectedTaskId\n });\n if (attachPlan.kind === \"skip\") {\n return;\n }\n if (attachPlan.kind === \"request_directly\") {\n if (!canIssueManagerRequestReferencesDirectly(fileAdapter)) {\n return;\n }\n const refs = await executeIssueManagerRequestReferences({\n fileAdapter,\n workspaceId\n });\n await submitReferences(refs, attachPlan.target);\n return;\n }\n\n applyOutcome(\n createIssueManagerOpenReferencePickerOutcome(attachPlan.target)\n );\n },\n\n createTaskDraft() {\n setTaskEditorModeState(\"create\");\n setTaskDraftInternal({\n content: nodeState.taskDraftContent ?? \"\",\n priority: defaultTaskPriority,\n title: nodeState.taskDraftTitle ?? \"\"\n });\n updateNodeState((current) => ({\n ...current,\n selectedTaskId: null\n }));\n },\n\n async deleteIssue(options?: IssueManagerDeleteOptions) {\n const selectedIssueId = nodeState.selectedIssueId;\n if (\n !selectedIssueId ||\n (options?.skipConfirmation !== true &&\n !confirmIssueManagerMessage(copy.t(\"confirmations.deleteIssue\")))\n ) {\n return;\n }\n try {\n await feature.backend.deleteIssue({\n issueId: selectedIssueId,\n workspaceId\n });\n setIssueEditorModeState(\"read\");\n setTaskEditorModeState(\"read\");\n updateNodeState((current) => applyIssueManagerIssueDeleted(current));\n refreshAll();\n } catch (error) {\n notifyError(error, \"messages.issueDeleteFailed\");\n }\n },\n\n async deleteTask(options?: IssueManagerDeleteOptions) {\n const selectedIssueId = nodeState.selectedIssueId;\n const selectedTaskId = nodeState.selectedTaskId;\n if (\n !selectedIssueId ||\n !selectedTaskId ||\n (options?.skipConfirmation !== true &&\n !confirmIssueManagerMessage(copy.t(\"confirmations.deleteTask\")))\n ) {\n return;\n }\n\n try {\n await feature.backend.deleteTask({\n issueId: selectedIssueId,\n taskId: selectedTaskId,\n workspaceId\n });\n setTaskEditorModeState(\"read\");\n updateNodeState((current) => applyIssueManagerTaskDeleted(current));\n refreshAll();\n } catch (error) {\n notifyError(error, \"messages.taskDeleteFailed\");\n }\n },\n\n async insertReferences(parentKind: \"issue\" | \"task\") {\n const fileAdapter = feature.fileAdapter;\n const insertPlan = createIssueManagerInsertReferencesPlan({\n hasFileAdapter: Boolean(fileAdapter),\n parentKind,\n requestReferencesDirectly:\n canIssueManagerRequestReferencesDirectly(fileAdapter),\n selectedTaskId: nodeState.selectedTaskId,\n taskEditorMode\n });\n if (insertPlan.kind === \"skip\") {\n return;\n }\n if (insertPlan.kind === \"request_directly\") {\n if (!canIssueManagerRequestReferencesDirectly(fileAdapter)) {\n return;\n }\n const refs = await executeIssueManagerRequestReferences({\n fileAdapter,\n workspaceId\n });\n await submitReferences(refs, insertPlan.target);\n return;\n }\n\n applyOutcome(\n createIssueManagerOpenReferencePickerOutcome(insertPlan.target)\n );\n },\n\n async uploadReferences(\n parentKind: \"issue\" | \"task\",\n mode: \"files\" | \"folder\"\n ) {\n const fileAdapter = feature.fileAdapter;\n if (!canIssueManagerUploadReferences(fileAdapter)) {\n return;\n }\n\n const refs = await executeIssueManagerUploadReferences({\n fileAdapter,\n mode,\n workspaceId\n });\n if (refs.length === 0) {\n return;\n }\n await submitReferences(\n refs,\n createIssueManagerInsertReferenceTarget(\n parentKind,\n nodeState.selectedTaskId\n )\n );\n },\n\n async openReference(reference: IssueManagerFileReference) {\n const fileAdapter = feature.fileAdapter;\n if (!canIssueManagerOpenReferences(fileAdapter)) {\n return;\n }\n\n await executeIssueManagerOpenReference({\n fileAdapter,\n reference\n });\n },\n\n async removeContextRef(ref: IssueManagerContextRef) {\n try {\n await executeIssueManagerRemoveContextRef({\n backend: feature.backend,\n ref,\n workspaceId\n });\n refreshDetails();\n } catch (error) {\n notifyError(error, \"messages.referenceRemoveFailed\");\n }\n },\n\n async selectExecutionDirectory() {\n const picker = feature.executionDirectoryPicker;\n if (!picker) {\n return;\n }\n try {\n const selected = await picker.selectDirectory();\n const executionDirectory = selected?.trim() || null;\n if (!executionDirectory) {\n return;\n }\n try {\n await picker.useUserProject?.({ path: executionDirectory });\n } catch {\n // The selected directory is still valid even if recency tracking fails.\n }\n updateNodeState((current) =>\n applyIssueManagerSelectedExecutionDirectory(\n current,\n executionDirectory\n )\n );\n } catch (error) {\n notifyTip(\n resolveIssueManagerErrorMessage(\n error,\n copy,\n \"messages.executionDirectorySelectFailed\"\n )\n );\n }\n },\n\n async useExecutionDirectory(path: string | null) {\n const executionDirectory = path?.trim() || null;\n updateNodeState((current) =>\n applyIssueManagerSelectedExecutionDirectory(current, executionDirectory)\n );\n if (!executionDirectory) {\n return;\n }\n\n try {\n await feature.executionDirectoryPicker?.useUserProject?.({\n path: executionDirectory\n });\n } catch {\n // The selected directory is still valid even if recency tracking fails.\n }\n },\n\n async runTask(providerOverride?: string) {\n const runPlan = createIssueManagerRunTaskPlan({\n issueDetail: issueDetail.value,\n providerOverride,\n selectedAgentProvider: nodeState.selectedAgentProvider,\n taskDetail: taskDetail.value\n });\n if (runPlan.kind !== \"ready\") {\n return;\n }\n const currentIssueDetail = issueDetail.value;\n const currentTaskDetail = taskDetail.value;\n if (!currentIssueDetail) {\n return;\n }\n if (runPlan.shouldUpdateSelectedAgentProvider) {\n updateNodeState((current) =>\n applyIssueManagerSelectedAgentProvider(current, runPlan.provider)\n );\n }\n\n setIsRunningTask(true);\n try {\n const result = await executeIssueManagerRunTask({\n feature,\n issue: currentIssueDetail.issue,\n provider: runPlan.provider,\n executionDirectory: nodeState.selectedExecutionDirectory,\n task: currentTaskDetail?.task,\n workspaceId\n });\n const outcome = createIssueManagerRunTaskSuccessOutcome({\n status: result.status\n });\n applyOutcome(outcome);\n } catch (error) {\n notifyTip(\n resolveIssueManagerErrorMessage(error, copy, \"messages.runFailed\")\n );\n } finally {\n setIsRunningTask(false);\n refreshDetails();\n }\n },\n\n async startTaskBreakdown(providerOverride?: string) {\n const breakdownPlan = createIssueManagerRunTaskPlan({\n issueDetail: issueDetail.value,\n providerOverride,\n selectedAgentProvider: nodeState.selectedAgentProvider,\n taskDetail: taskDetail.value\n });\n if (breakdownPlan.kind !== \"ready\") {\n return;\n }\n const currentIssueDetail = issueDetail.value;\n if (!currentIssueDetail) {\n return;\n }\n const breakdownLauncher = feature.agentBreakdownLauncher;\n if (!breakdownLauncher) {\n notifyTip(copy.t(\"messages.breakdownUnavailable\"));\n return;\n }\n if (breakdownPlan.shouldUpdateSelectedAgentProvider) {\n updateNodeState((current) =>\n applyIssueManagerSelectedAgentProvider(\n current,\n breakdownPlan.provider\n )\n );\n }\n\n try {\n const result = await breakdownLauncher.startBreakdown({\n issueDetail: currentIssueDetail,\n provider: breakdownPlan.provider,\n workspaceId\n });\n if (result.status === \"failed\") {\n notifyTip(\n result.errorMessage || copy.t(\"messages.breakdownOpenFailed\")\n );\n }\n } catch (error) {\n notifyTip(\n resolveIssueManagerErrorMessage(\n error,\n copy,\n \"messages.breakdownOpenFailed\"\n )\n );\n }\n },\n\n async saveIssue() {\n const savePlan = createIssueManagerSaveIssuePlan({\n activeTopicId: nodeState.activeTopicId ?? null,\n issueDraft\n });\n if (savePlan.kind === \"blocked\") {\n notifyTip(copy.t(savePlan.notificationKey));\n return;\n }\n\n try {\n const { savedIssue } = await executeIssueManagerSaveIssue({\n activeTopicId: savePlan.activeTopicId,\n feature,\n issueDetail: issueDetail.value,\n issueDraft,\n issueEditorMode,\n selectedIssueId: nodeState.selectedIssueId,\n workspaceId\n });\n const outcome = createIssueManagerSaveIssueSuccessOutcome(\n savedIssue.issueId\n );\n applyOutcome(outcome);\n } catch (error) {\n notifyError(error, \"messages.issueSaveFailed\");\n }\n },\n\n async saveTask() {\n const savePlan = createIssueManagerSaveTaskPlan({\n selectedIssueId: nodeState.selectedIssueId,\n taskDraft\n });\n if (savePlan.kind === \"skip\") {\n return;\n }\n if (savePlan.kind === \"blocked\") {\n notifyTip(copy.t(savePlan.notificationKey));\n return;\n }\n\n try {\n const { savedTask } = await executeIssueManagerSaveTask({\n feature,\n selectedIssueId: savePlan.selectedIssueId,\n selectedTaskId: nodeState.selectedTaskId,\n taskDetail: taskDetail.value,\n taskDraft,\n taskEditorMode,\n workspaceId\n });\n const outcome = createIssueManagerSaveTaskSuccessOutcome(\n savedTask.taskId\n );\n applyOutcome(outcome);\n } catch (error) {\n notifyError(error, \"messages.taskSaveFailed\");\n }\n },\n\n async shareSelection() {\n const selectedIssueId = nodeState.selectedIssueId;\n const shareAdapter = feature.shareAdapter;\n if (!canIssueManagerCreateShareLink(shareAdapter) || !selectedIssueId) {\n return;\n }\n\n try {\n await executeIssueManagerShareSelection({\n issueId: selectedIssueId,\n shareAdapter,\n taskId: nodeState.selectedTaskId,\n workspaceId\n });\n } catch (error) {\n notifyError(error, \"messages.copyShareLinkFailed\");\n }\n },\n\n async submitReferenceSelection(refs: IssueManagerFileReference[]) {\n await submitReferences(refs);\n }\n };\n}\n","import type { IssueManagerFeature } from \"../../../../core/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../../i18n/issueManagerI18n.ts\";\nimport type { IssueManagerControllerSession } from \"../../../../services/issueManagerControllerService.interface.ts\";\nimport { createIssueManagerControllerActions } from \"../../../../services/internal/controllerActions.ts\";\nimport type {\n IssueDraft,\n IssueManagerNotificationState,\n TaskDraft\n} from \"../../../../services/controllerTypes.ts\";\nimport type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"../../../../services/controllerModel.ts\";\nimport type {\n IssueManagerIssueDetail,\n IssueManagerNodeState,\n IssueManagerTaskDetail\n} from \"../../../../contracts/index.ts\";\n\nexport function createIssueManagerControllerActionsBridge(input: {\n controllerSession: IssueManagerControllerSession;\n copy: IssueManagerI18nRuntime;\n feature: IssueManagerFeature;\n issueDetail: {\n value: IssueManagerIssueDetail | null;\n };\n issueDraft: IssueDraft;\n issueEditorMode: IssueManagerEditorMode;\n nodeState: IssueManagerNodeState;\n referenceTarget: IssueManagerReferenceTarget | null;\n taskDetail: {\n value: IssueManagerTaskDetail | null;\n };\n taskDraft: TaskDraft;\n taskEditorMode: IssueManagerEditorMode;\n workspaceId: string;\n}) {\n const {\n controllerSession,\n copy,\n feature,\n issueDetail,\n issueDraft,\n issueEditorMode,\n nodeState,\n referenceTarget,\n taskDetail,\n taskDraft,\n taskEditorMode,\n workspaceId\n } = input;\n\n return createIssueManagerControllerActions({\n copy,\n feature,\n issueDetail,\n issueDraft,\n issueEditorMode,\n nodeState,\n referenceTarget,\n refreshAll: () => controllerSession.refreshAll(),\n refreshDetails: () => controllerSession.refreshDetails(),\n setNotification: (update) =>\n controllerSession.setNotification((current) =>\n createIssueManagerControllerNotificationState(current, update)\n ),\n setIsRunningTask: (update) => controllerSession.setIsRunningTask(update),\n setIssueDraftInternal: (update) =>\n controllerSession.setIssueDraftInternal(update),\n setIssueEditorModeState: (update) =>\n controllerSession.setIssueEditorModeState(update),\n setReferenceTarget: (update) =>\n controllerSession.setReferenceTarget(update),\n setTaskDraftInternal: (update) =>\n controllerSession.setTaskDraftInternal(update),\n setTaskEditorModeState: (update) =>\n controllerSession.setTaskEditorModeState(update),\n taskDetail,\n taskDraft,\n taskEditorMode,\n updateNodeState: (updater) => controllerSession.updateNodeState(updater),\n workspaceId\n });\n}\n\nfunction createIssueManagerControllerNotificationState(\n current: IssueManagerNotificationState | null,\n input: {\n title: string;\n tone?: IssueManagerNotificationState[\"tone\"];\n }\n): IssueManagerNotificationState {\n return {\n id: (current?.id ?? 0) + 1,\n title: input.title,\n tone: input.tone ?? \"default\"\n };\n}\n","import type { IssueManagerNodeState } from \"../../../../contracts/index.ts\";\nimport type {\n IssueDraft,\n IssueManagerControllerSession,\n IssueManagerEditorMode\n} from \"../../../../services/issueManagerControllerService.interface.ts\";\nimport {\n applyIssueManagerIssueEditorModeToNodeState,\n createIssueManagerIssueDraftFromNodeState,\n persistIssueManagerIssueDraftContent\n} from \"../../../../services/internal/controllerState.ts\";\n\nexport function createIssueManagerIssueBindings(input: {\n controllerSession: IssueManagerControllerSession;\n issueEditorMode: IssueManagerEditorMode;\n nodeState: IssueManagerNodeState;\n}) {\n const { controllerSession, issueEditorMode, nodeState } = input;\n\n return {\n setIssueContent(content: string) {\n controllerSession.setIssueDraftInternal((current) => ({\n ...current,\n content\n }));\n controllerSession.updateNodeState((current) =>\n persistIssueManagerIssueDraftContent(current, issueEditorMode, content)\n );\n },\n setIssueDraft(patch: Partial<IssueDraft>) {\n controllerSession.setIssueDraftInternal((current) => ({\n ...current,\n ...patch\n }));\n },\n setIssueEditorMode(mode: IssueManagerEditorMode) {\n controllerSession.setIssueEditorModeState(mode);\n if (mode === \"create\") {\n controllerSession.setIssueDraftInternal(\n createIssueManagerIssueDraftFromNodeState(nodeState)\n );\n }\n controllerSession.updateNodeState((current) =>\n applyIssueManagerIssueEditorModeToNodeState(current, mode)\n );\n },\n setIssueSearchQuery(query: string) {\n controllerSession.updateNodeState((current) => ({\n ...current,\n issueSearchQuery: query\n }));\n },\n setIssueStatusFilter(value: IssueManagerNodeState[\"issueStatusFilter\"]) {\n controllerSession.updateNodeState((current) => ({\n ...current,\n issueStatusFilter: value\n }));\n },\n setIssueTitle(title: string) {\n controllerSession.setIssueDraftInternal((current) => ({\n ...current,\n title\n }));\n }\n };\n}\n","import type {\n IssueManagerNodeState,\n IssueManagerPriority\n} from \"../../../../contracts/index.ts\";\nimport type {\n IssueManagerControllerSession,\n IssueManagerEditorMode,\n TaskDraft\n} from \"../../../../services/issueManagerControllerService.interface.ts\";\nimport {\n applyIssueManagerTaskEditorModeToNodeState,\n applyIssueManagerTaskSelection,\n createIssueManagerTaskDraftFromNodeState,\n persistIssueManagerTaskDraftContent\n} from \"../../../../services/internal/controllerState.ts\";\n\nexport function createIssueManagerTaskBindings(input: {\n controllerSession: IssueManagerControllerSession;\n nodeState: IssueManagerNodeState;\n taskEditorMode: IssueManagerEditorMode;\n}) {\n const { controllerSession, nodeState, taskEditorMode } = input;\n\n return {\n selectTask(taskId: string | null) {\n controllerSession.updateNodeState((current) =>\n applyIssueManagerTaskSelection(current, taskId)\n );\n controllerSession.setTaskEditorModeState(\"read\");\n },\n setTaskContent(content: string) {\n controllerSession.setTaskDraftInternal((current) => ({\n ...current,\n content\n }));\n controllerSession.updateNodeState((current) =>\n persistIssueManagerTaskDraftContent(current, taskEditorMode, content)\n );\n },\n setTaskDraft(patch: Partial<TaskDraft>) {\n controllerSession.setTaskDraftInternal((current) => ({\n ...current,\n ...patch\n }));\n },\n setTaskEditorMode(mode: IssueManagerEditorMode) {\n controllerSession.setTaskEditorModeState(mode);\n if (mode === \"create\") {\n controllerSession.setTaskDraftInternal(\n createIssueManagerTaskDraftFromNodeState(nodeState)\n );\n }\n controllerSession.updateNodeState((current) =>\n applyIssueManagerTaskEditorModeToNodeState(current, mode)\n );\n },\n setTaskListCollapsed(collapsed: boolean) {\n controllerSession.updateNodeState((current) => ({\n ...current,\n taskListCollapsed: collapsed\n }));\n },\n setTaskPriority(priority: IssueManagerPriority) {\n controllerSession.setTaskDraftInternal((current) => ({\n ...current,\n priority\n }));\n },\n setTaskTitle(title: string) {\n controllerSession.setTaskDraftInternal((current) => ({\n ...current,\n title\n }));\n }\n };\n}\n","import type { RichTextAtProvider } from \"@nextop-os/ui-rich-text/types\";\nimport type { IssueManagerNodeState } from \"../../../../contracts/index.ts\";\nimport type {\n IssueManagerControllerSession,\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"../../../../services/issueManagerControllerService.interface.ts\";\nimport { applyIssueManagerIssueSelection } from \"../../../../services/internal/controllerState.ts\";\nimport { createIssueManagerIssueBindings } from \"../issue/createIssueManagerIssueBindings.ts\";\nimport { createIssueManagerTaskBindings } from \"../task/createIssueManagerTaskBindings.ts\";\n\nexport function createIssueManagerControllerBindings(input: {\n controllerSession: IssueManagerControllerSession;\n issueEditorMode: IssueManagerEditorMode;\n nodeState: IssueManagerNodeState;\n onResolveRichTextAtProviders?: (input: {\n surface: \"issue\" | \"task\";\n workspaceId: string;\n }) => readonly RichTextAtProvider[];\n taskEditorMode: IssueManagerEditorMode;\n workspaceId: string;\n}) {\n const {\n controllerSession,\n issueEditorMode,\n nodeState,\n onResolveRichTextAtProviders,\n taskEditorMode,\n workspaceId\n } = input;\n\n const issueBindings = createIssueManagerIssueBindings({\n controllerSession,\n issueEditorMode,\n nodeState\n });\n const taskBindings = createIssueManagerTaskBindings({\n controllerSession,\n nodeState,\n taskEditorMode\n });\n\n return {\n ...issueBindings,\n ...taskBindings,\n dismissNotification() {\n controllerSession.setNotification(null);\n },\n refreshAll() {\n controllerSession.refreshAll();\n },\n resolveRichTextAtProviders(surface: \"issue\" | \"task\") {\n return (\n onResolveRichTextAtProviders?.({\n surface,\n workspaceId\n }) ?? []\n );\n },\n selectIssue(issueId: string | null) {\n controllerSession.updateNodeState((current) =>\n applyIssueManagerIssueSelection(current, issueId)\n );\n controllerSession.setIssueEditorModeState(\"read\");\n controllerSession.setTaskEditorModeState(\"read\");\n },\n setReferenceTarget(target: IssueManagerReferenceTarget | null) {\n controllerSession.setReferenceTarget(target);\n },\n setSelectedAgentProvider(provider: string) {\n controllerSession.updateNodeState((current) => ({\n ...current,\n selectedAgentProvider: provider\n }));\n }\n };\n}\n","import { useDeferredValue, useEffect, useMemo } from \"react\";\nimport { useSnapshot } from \"valtio\";\nimport type { IssueManagerNodeState } from \"../../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../../core/index.ts\";\nimport { createIssueManagerControllerService } from \"../../../../services/createIssueManagerControllerService.ts\";\nimport type {\n IssueManagerControllerService,\n IssueManagerControllerSession\n} from \"../../../../services/issueManagerControllerService.interface.ts\";\nimport {\n resolveIssueManagerFloatingNoticeViewState,\n type IssueManagerFloatingNoticeViewState\n} from \"../shell/IssueManagerNoticeState.ts\";\n\nexport function useIssueManagerControllerRuntime(input: {\n feature: IssueManagerFeature;\n onStateChange?: (state: IssueManagerNodeState) => void;\n service?: IssueManagerControllerService;\n state?: Partial<IssueManagerNodeState> | null;\n workspaceId: string;\n}): {\n controllerSession: IssueManagerControllerSession;\n deferredIssueSearch: string;\n floatingNotice: IssueManagerFloatingNoticeViewState | null;\n snapshot: IssueManagerControllerSession[\"store\"];\n} {\n const { feature, onStateChange, service, state, workspaceId } = input;\n const controllerService = useMemo(\n () => service ?? createIssueManagerControllerService(),\n [service]\n );\n const controllerSession = useMemo(\n () =>\n controllerService.createSession({\n feature,\n state,\n workspaceId\n }),\n [controllerService, feature, workspaceId]\n );\n const snapshot = useSnapshot(\n controllerSession.store\n ) as IssueManagerControllerSession[\"store\"];\n const deferredIssueSearch = useDeferredValue(\n snapshot.nodeState.issueSearchQuery\n );\n const floatingNotice = resolveIssueManagerFloatingNoticeViewState({\n notification: snapshot.notification\n });\n\n useEffect(() => {\n controllerSession.retain();\n return () => {\n controllerSession.release();\n };\n }, [controllerSession]);\n\n useEffect(() => {\n controllerSession.syncInput({\n deferredIssueSearch,\n onStateChange,\n taskListCollapsed: state?.taskListCollapsed === true\n });\n }, [\n controllerSession,\n deferredIssueSearch,\n onStateChange,\n state?.taskListCollapsed\n ]);\n\n return {\n controllerSession,\n deferredIssueSearch,\n floatingNotice,\n snapshot\n };\n}\n","import type {\n IssueManagerNotificationState,\n IssueManagerNotificationTone\n} from \"../../../../services/controllerTypes.ts\";\n\nconst issueManagerNoticeDurationMs = 3000;\n\nexport interface IssueManagerFloatingNoticeViewState {\n durationMs: number;\n id: number;\n isLoading: boolean;\n title: string;\n tone: IssueManagerNotificationTone;\n}\n\nexport function resolveIssueManagerFloatingNoticeViewState(input: {\n notification: IssueManagerNotificationState | null;\n}): IssueManagerFloatingNoticeViewState | null {\n if (!input.notification) {\n return null;\n }\n\n return {\n durationMs: issueManagerNoticeDurationMs,\n id: input.notification.id,\n isLoading: false,\n title: input.notification.title,\n tone: input.notification.tone\n };\n}\n","import type { RichTextAtProvider } from \"@nextop-os/ui-rich-text/types\";\nimport type { ReactNode } from \"react\";\nimport type {\n IssueManagerFileReference,\n IssueManagerNodeState\n} from \"../../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../../core/index.ts\";\nimport type { IssueManagerControllerService } from \"../../../../services/issueManagerControllerService.interface.ts\";\nimport {\n resolveIssueManagerSelectedIssue,\n resolveIssueManagerSelectedTask,\n useIssueManagerTaskListCollapsedSync\n} from \"./IssueManagerNodeState.ts\";\nimport {\n useIssueManagerController,\n type IssueManagerController,\n type IssueManagerRichTextSurface\n} from \"../controller/useIssueManagerController.ts\";\n\nexport interface UseIssueManagerNodeViewInput {\n emptyIllustration?: ReactNode;\n feature: IssueManagerFeature;\n nodeId: string;\n onStateChange?: (state: IssueManagerNodeState) => void;\n resolveRichTextAtProviders?: (input: {\n surface: IssueManagerRichTextSurface;\n workspaceId: string;\n }) => readonly RichTextAtProvider[];\n service?: IssueManagerControllerService;\n state?: Partial<IssueManagerNodeState> | null;\n workspaceId: string;\n}\n\nexport function useIssueManagerNodeView({\n feature,\n nodeId,\n onStateChange,\n resolveRichTextAtProviders,\n service,\n state,\n workspaceId\n}: UseIssueManagerNodeViewInput) {\n const controller = useIssueManagerController({\n feature,\n onStateChange,\n resolveRichTextAtProviders,\n service,\n state,\n workspaceId\n });\n\n useIssueManagerTaskListCollapsedSync({\n nodeId,\n onCollapsedChange: (collapsed) => {\n controller.setTaskListCollapsed(collapsed);\n },\n workspaceId\n });\n\n const selectedIssue = resolveIssueManagerSelectedIssue({\n issueDetail: controller.issueDetail.value?.issue ?? null,\n issues: controller.issues.value,\n selectedIssueId: controller.nodeState.selectedIssueId\n });\n const selectedTask = resolveIssueManagerSelectedTask({\n selectedTaskId: controller.nodeState.selectedTaskId,\n taskDetail: controller.taskDetail.value?.task ?? null,\n tasks: controller.issueDetail.value?.tasks ?? []\n });\n\n return {\n controller,\n referencePicker: {\n onClose: () => {\n controller.setReferenceTarget(null);\n },\n onConfirm: (refs: IssueManagerFileReference[]) => {\n void controller.submitReferenceSelection(refs);\n },\n open: controller.referenceTarget !== null\n },\n selectedIssue,\n selectedTask,\n shell: {\n onCloseTaskDrawer: () => {\n controller.setTaskEditorMode(\"read\");\n controller.selectTask(null);\n },\n onDismissIssueCreate: () => {\n controller.setIssueEditorMode(\"read\");\n }\n }\n };\n}\n\nexport type IssueManagerNodeView = ReturnType<typeof useIssueManagerNodeView>;\nexport type IssueManagerNodeViewController = IssueManagerController;\n","export {\n dispatchIssueManagerTaskListCollapsed,\n dispatchIssueManagerTopicCreate,\n dispatchIssueManagerTopicDelete,\n dispatchIssueManagerTopicHeaderState,\n dispatchIssueManagerTopicSelection,\n dispatchIssueManagerTopicUpdate,\n resolveIssueManagerSelectedIssue,\n resolveIssueManagerSelectedTask,\n useIssueManagerNodeHeaderView,\n useIssueManagerTopicHeaderCommandSync,\n useIssueManagerTopicHeaderStateSync,\n useIssueManagerTaskListCollapsedSync\n} from \"./internal/shell/IssueManagerNodeState.ts\";\nexport {\n createReferenceDirectoryStateFromSnapshot,\n collectVisibleTreeEntries,\n issueManagerReferenceDefaultExpandedDepth,\n mergeExpandedFolderPaths,\n mergePrefetchedDirectoryState,\n normalizeDirectoryPath,\n prefetchReferenceTree,\n type IssueManagerReferenceDirectoryState\n} from \"./internal/reference/IssueManagerReferencePickerState.ts\";\nexport {\n useIssueManagerController,\n type IssueManagerController,\n type IssueManagerRichTextSurface\n} from \"./internal/controller/useIssueManagerController.ts\";\nexport {\n useIssueManagerNodeView,\n type IssueManagerNodeView,\n type IssueManagerNodeViewController,\n type UseIssueManagerNodeViewInput\n} from \"./internal/shell/useIssueManagerNodeView.ts\";\nexport {\n useWorkspaceFileReferencePickerView as useIssueManagerReferencePickerView,\n type UseWorkspaceFileReferencePickerViewInput as UseIssueManagerReferencePickerViewInput,\n type WorkspaceFileReferencePreviewState as IssueManagerReferencePreviewState\n} from \"@nextop-os/workspace-file-reference/react\";\n","import {\n useEffect,\n type HTMLAttributes,\n type JSX,\n type ReactNode\n} from \"react\";\nimport { Button, PanelIcon, cn } from \"@nextop-os/ui-system\";\nimport { WorkspaceFileReferencePicker } from \"@nextop-os/workspace-file-reference/ui\";\nimport type { IssueManagerI18nRuntime } from \"../i18n/issueManagerI18n.ts\";\nimport { IssueManagerShell } from \"./internal/shell/IssueManagerShell.tsx\";\nimport { IssueManagerTopicSelector } from \"./internal/shell/IssueManagerTopicSelector.tsx\";\nimport {\n dispatchIssueManagerTopicCreate,\n dispatchIssueManagerTopicDelete,\n dispatchIssueManagerTopicHeaderState,\n dispatchIssueManagerTopicSelection,\n dispatchIssueManagerTopicUpdate,\n useIssueManagerTopicHeaderCommandSync,\n useIssueManagerTopicHeaderStateSync,\n useIssueManagerNodeHeaderView,\n useIssueManagerNodeView,\n type UseIssueManagerNodeViewInput\n} from \"./react/index.ts\";\n\nexport { dispatchIssueManagerTaskListCollapsed } from \"./react/index.ts\";\n\nexport type IssueManagerNodeProps = UseIssueManagerNodeViewInput;\n\nexport function IssueManagerNode({\n emptyIllustration,\n feature,\n nodeId,\n onStateChange,\n resolveRichTextAtProviders,\n service,\n state,\n workspaceId\n}: IssueManagerNodeProps): JSX.Element {\n const { controller, referencePicker, selectedIssue, selectedTask, shell } =\n useIssueManagerNodeView({\n feature,\n nodeId,\n onStateChange,\n resolveRichTextAtProviders,\n service,\n state,\n workspaceId\n });\n\n useEffect(() => {\n dispatchIssueManagerTopicHeaderState({\n activeTopicId: controller.nodeState.activeTopicId ?? null,\n nodeId,\n topics: controller.topics.value,\n workspaceId\n });\n }, [\n controller.nodeState.activeTopicId,\n controller.topics.value,\n nodeId,\n workspaceId\n ]);\n\n useIssueManagerTopicHeaderCommandSync({\n nodeId,\n onCreateTopic: (topicInput) => {\n void controller.createTopic(topicInput);\n },\n onDeleteTopic: (topicId) => {\n void controller.deleteTopic(topicId);\n },\n onSelectTopic: controller.selectTopic,\n onUpdateTopic: (topicInput) => {\n void controller.updateTopic(topicInput);\n },\n workspaceId\n });\n\n return (\n <section\n aria-label={controller.copy.t(\"title\")}\n className=\"flex h-full min-h-0 w-full min-w-0 flex-col overflow-hidden text-[var(--text-primary)]\"\n data-issue-manager-node-id={nodeId}\n data-issue-manager-workspace-id={workspaceId}\n >\n <IssueManagerShell\n controller={controller}\n emptyIllustration={emptyIllustration}\n onCloseTaskDrawer={shell.onCloseTaskDrawer}\n onDismissIssueCreate={shell.onDismissIssueCreate}\n selectedIssue={selectedIssue}\n selectedTask={selectedTask}\n />\n\n <WorkspaceFileReferencePicker\n copy={controller.copy}\n fileAdapter={feature.fileAdapter}\n open={referencePicker.open}\n workspaceId={workspaceId}\n onClose={referencePicker.onClose}\n onConfirm={referencePicker.onConfirm}\n />\n </section>\n );\n}\n\nexport interface IssueManagerNodeHeaderProps extends HTMLAttributes<HTMLElement> {\n activeTopicId?: string | null;\n copy: IssueManagerI18nRuntime;\n defaultActions?: ReactNode;\n isSidebarAutoCollapsed: boolean;\n isSidebarCollapsed: boolean;\n nodeId: string;\n onToggleSidebar: (nextCollapsed: boolean) => void;\n title?: string;\n workspaceId: string;\n}\n\nexport function IssueManagerNodeHeader({\n activeTopicId = null,\n className,\n copy,\n defaultActions,\n isSidebarAutoCollapsed,\n isSidebarCollapsed,\n nodeId,\n onToggleSidebar,\n title,\n workspaceId,\n ...headerProps\n}: IssueManagerNodeHeaderProps): JSX.Element {\n const { effectiveCollapsed, toggleLabel, toggleSidebar } =\n useIssueManagerNodeHeaderView({\n copy,\n isSidebarAutoCollapsed,\n isSidebarCollapsed,\n nodeId,\n onToggleSidebar,\n workspaceId\n });\n const topicState = useIssueManagerTopicHeaderStateSync({\n activeTopicId,\n nodeId,\n workspaceId\n });\n\n return (\n <header\n {...headerProps}\n className={cn(\n \"relative flex h-full min-h-0 items-center justify-between gap-3 bg-[var(--background-panel)] px-2 pl-3\",\n className\n )}\n >\n <div className=\"z-10 flex min-w-0 items-center gap-2\">\n <span className=\"min-w-0 truncate text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {title?.trim() || copy.t(\"title\")}\n </span>\n <Button\n aria-label={toggleLabel}\n className=\"cursor-pointer rounded-md\"\n data-issue-manager-sidebar-auto-collapsed={\n isSidebarAutoCollapsed ? \"true\" : undefined\n }\n data-issue-manager-sidebar-collapsed={\n effectiveCollapsed ? \"true\" : undefined\n }\n size=\"icon-sm\"\n title={toggleLabel}\n type=\"button\"\n variant=\"ghost\"\n onClick={(event) => {\n event.stopPropagation();\n toggleSidebar();\n }}\n onDoubleClick={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <PanelIcon className=\"size-[18px]\" />\n </Button>\n </div>\n <div className=\"pointer-events-none absolute top-1/2 left-1/2 z-20 flex max-w-[220px] -translate-x-1/2 -translate-y-1/2 items-center justify-center\">\n <div\n className=\"pointer-events-auto flex min-w-0 flex-none\"\n onDoubleClick={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <IssueManagerTopicSelector\n activeTopicId={topicState.activeTopicId}\n className=\"flex-none\"\n copy={copy}\n topics={topicState.topics}\n onCreateTopic={(input) => {\n dispatchIssueManagerTopicCreate({\n input,\n nodeId,\n workspaceId\n });\n }}\n onDeleteTopic={(topicId) => {\n dispatchIssueManagerTopicDelete({\n nodeId,\n topicId,\n workspaceId\n });\n }}\n onSelectTopic={(topicId) => {\n dispatchIssueManagerTopicSelection({\n nodeId,\n topicId,\n workspaceId\n });\n }}\n onUpdateTopic={(input) => {\n dispatchIssueManagerTopicUpdate({\n input,\n nodeId,\n workspaceId\n });\n }}\n />\n </div>\n </div>\n <div\n className=\"z-10 flex flex-none items-center gap-1\"\n onDoubleClick={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n {defaultActions}\n </div>\n </header>\n );\n}\n","import { useEffect, useState, type JSX, type ReactNode } from \"react\";\nimport { Button, FileCreateIcon, cn } from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport { IssueManagerIssuePane } from \"./IssueManagerPanels.tsx\";\nimport { IssueManagerBottomBar } from \"./IssueManagerBottomBar.tsx\";\nimport { IssueManagerFloatingNotice } from \"./IssueManagerFloatingNotice.tsx\";\nimport { IssueManagerSidebar } from \"./IssueManagerSidebar.tsx\";\nimport { IssueManagerTaskComposerPane } from \"./IssueManagerTaskComposerPane.tsx\";\nimport { IssueManagerTaskDrawer } from \"./IssueManagerTaskDrawer.tsx\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport { useIssueManagerShellView } from \"./useIssueManagerShellView.ts\";\n\nexport { shouldAutoCollapseIssueManagerSidebar } from \"./useIssueManagerShellView.ts\";\n\nconst issueManagerTaskDrawerExitDurationMs = 180;\n\nexport interface IssueManagerShellProps {\n controller: IssueManagerController;\n emptyIllustration?: ReactNode;\n onCloseTaskDrawer: () => void;\n onDismissIssueCreate: () => void;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n}\n\nexport function IssueManagerShell({\n controller,\n emptyIllustration,\n onCloseTaskDrawer,\n onDismissIssueCreate,\n selectedIssue,\n selectedTask\n}: IssueManagerShellProps): JSX.Element {\n const shellView = useIssueManagerShellView({\n controller,\n selectedIssue,\n selectedTask\n });\n const [renderedTaskDrawerTask, setRenderedTaskDrawerTask] =\n useState<IssueManagerTaskSummary | null>(selectedTask);\n const [isTaskDrawerClosing, setIsTaskDrawerClosing] = useState(false);\n\n useEffect(() => {\n if (shellView.content.isTaskDrawerOpen) {\n setRenderedTaskDrawerTask(selectedTask);\n setIsTaskDrawerClosing(false);\n return undefined;\n }\n\n if (!renderedTaskDrawerTask) {\n return undefined;\n }\n\n setIsTaskDrawerClosing(true);\n const timeout = window.setTimeout(() => {\n setRenderedTaskDrawerTask(null);\n setIsTaskDrawerClosing(false);\n }, issueManagerTaskDrawerExitDurationMs);\n\n return () => {\n window.clearTimeout(timeout);\n };\n }, [\n renderedTaskDrawerTask,\n selectedTask,\n shellView.content.isTaskDrawerOpen\n ]);\n const taskDrawerTask = shellView.content.isTaskDrawerOpen\n ? selectedTask\n : renderedTaskDrawerTask;\n\n return (\n <div\n className=\"relative grid min-h-0 flex-1 grid-rows-[minmax(0,1fr)] overflow-hidden bg-transparent transition-[grid-template-columns] duration-[180ms] ease-[cubic-bezier(0.4,0,0.2,1)] motion-reduce:transition-none\"\n data-issue-manager-sidebar-auto-collapsed={\n shellView.sidebar.isAutoCollapsed ? \"true\" : undefined\n }\n data-issue-manager-sidebar-collapsed={\n shellView.sidebar.isCollapsed ? \"true\" : undefined\n }\n ref={shellView.layoutRef}\n style={shellView.layoutStyle}\n >\n {shellView.floatingNotice ? (\n <IssueManagerFloatingNotice notice={shellView.floatingNotice} />\n ) : null}\n\n <IssueManagerSidebar\n controller={controller}\n isCollapsed={shellView.sidebar.isCollapsed}\n isNarrowLayout={shellView.isNarrowLayout}\n showStandaloneState={shellView.sidebar.showStandaloneState}\n sidebarViewState={shellView.sidebar.viewState}\n statusCounts={shellView.sidebar.statusCounts}\n />\n\n {shellView.sidebar.isAutoCollapsed ? null : (\n <div\n aria-label={controller.copy.t(\"labels.resizeIssueList\")}\n aria-orientation=\"vertical\"\n aria-valuemax={shellView.resizeHandle.ariaValueMax}\n aria-valuemin={shellView.resizeHandle.ariaValueMin}\n aria-valuenow={shellView.resizeHandle.ariaValueNow}\n className={cn(\n \"group absolute top-0 bottom-0 left-[calc(var(--issue-manager-sidebar-width)-6px)] z-20 w-3 cursor-col-resize touch-none opacity-100 transition-[left,opacity] duration-[180ms,120ms] ease-[cubic-bezier(0.4,0,0.2,1),ease] motion-reduce:transition-none\",\n shellView.sidebar.isCollapsed &&\n \"pointer-events-none left-[-6px] opacity-0\"\n )}\n role=\"separator\"\n tabIndex={0}\n onKeyDown={shellView.resizeHandle.onKeyDown}\n onPointerCancel={shellView.resizeHandle.onPointerCancel}\n onPointerDown={shellView.resizeHandle.onPointerDown}\n onPointerMove={shellView.resizeHandle.onPointerMove}\n onPointerUp={shellView.resizeHandle.onPointerUp}\n >\n <span className=\"absolute top-0 bottom-0 left-1/2 w-px -translate-x-1/2 bg-transparent transition-[background-color,width] duration-150 group-hover:w-0.5 group-hover:bg-[color-mix(in_srgb,var(--border-focus)_40%,transparent)] group-focus-visible:w-0.5 group-focus-visible:bg-[color-mix(in_srgb,var(--border-focus)_40%,transparent)]\" />\n </div>\n )}\n\n <div className=\"relative h-full min-h-0 overflow-hidden bg-transparent @container/issue-manager-content\">\n <div className=\"flex h-full min-h-0 flex-col\">\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n {shellView.content.isIssueEditing ? (\n <IssueManagerIssuePane\n controller={controller}\n selectedIssue={selectedIssue}\n onDismissCreate={onDismissIssueCreate}\n />\n ) : shellView.content.isTaskCreating ? (\n <IssueManagerTaskComposerPane\n controller={controller}\n selectedIssue={selectedIssue}\n onCancel={() => controller.setTaskEditorMode(\"read\")}\n />\n ) : selectedIssue ? (\n <IssueManagerIssuePane\n controller={controller}\n selectedIssue={selectedIssue}\n onDismissCreate={onDismissIssueCreate}\n />\n ) : (\n <IssueManagerShellEmptyState\n controller={controller}\n emptyIllustration={emptyIllustration}\n />\n )}\n </div>\n\n <IssueManagerBottomBar\n controller={controller}\n isNarrowLayout={shellView.isNarrowLayout}\n selectedIssue={selectedIssue}\n visible={shellView.content.showBottomBar}\n />\n </div>\n\n {taskDrawerTask ? (\n <IssueManagerTaskDrawer\n controller={controller}\n isClosing={isTaskDrawerClosing}\n selectedIssue={selectedIssue}\n selectedTask={taskDrawerTask}\n onClose={onCloseTaskDrawer}\n />\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction IssueManagerShellEmptyState({\n controller,\n emptyIllustration\n}: {\n controller: IssueManagerController;\n emptyIllustration?: ReactNode;\n}): JSX.Element {\n return (\n <div className=\"flex h-full min-h-[320px] items-center justify-center px-10 py-10\">\n <div className=\"grid max-w-[420px] justify-items-center gap-2 text-center\">\n {emptyIllustration ?? null}\n <h2 className=\"text-[14px] font-semibold leading-5 text-[var(--text-primary)]\">\n {controller.copy.t(\"messages.noIssues\")}\n </h2>\n <p className=\"max-w-[420px] text-[14px] leading-5 text-[var(--text-secondary)]\">\n {controller.copy.t(\"emptyState\")}\n </p>\n <Button\n className=\"mt-2 gap-2\"\n type=\"button\"\n onClick={() => controller.setIssueEditorMode(\"create\")}\n >\n <FileCreateIcon size={16} />\n {controller.copy.t(\"actions.createIssue\")}\n </Button>\n </div>\n </div>\n );\n}\n","import { useState, type JSX } from \"react\";\nimport {\n Badge,\n Button,\n ConfirmationDialog,\n ScrollArea\n} from \"@nextop-os/ui-system\";\nimport type { IssueManagerIssueSummary } from \"../../../contracts/index.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerStatusLabel\n} from \"../../../services/controllerModel.ts\";\nimport { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\nimport {\n IssueManagerDetailTextSection,\n IssueManagerOutputSection,\n IssueManagerSubtaskSection\n} from \"../issue/IssueManagerIssueSections.tsx\";\nimport { IssueManagerDescriptionSection } from \"../content/IssueManagerDescriptionSection.tsx\";\nimport { IssueManagerPaneLoadingState } from \"../panel/IssueManagerPanelSurface.tsx\";\nimport { resolveIssueManagerCreatorLabel } from \"../panel/IssueManagerPanelText.ts\";\nimport { IssueManagerRichTextTextarea } from \"../content/IssueManagerRichTextTextarea.tsx\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport { IssueManagerDraftTitleInput } from \"./IssueManagerDraftTitleInput.tsx\";\nimport {\n issueManagerEditorFooterFadeInClassName,\n issueManagerEditorRiseInClassName,\n issueManagerEditorRiseInDelay0ClassName,\n issueManagerEditorRiseInDelay1ClassName,\n issueManagerEditorRiseInDelay2ClassName\n} from \"./IssueManagerEditorMotion.ts\";\n\nexport { IssueManagerEmptyIllustration } from \"../panel/IssueManagerPanelSurface.tsx\";\n\nexport function IssueManagerIssuePane({\n controller,\n selectedIssue,\n onDismissCreate\n}: {\n controller: IssueManagerController;\n selectedIssue: IssueManagerIssueSummary | null;\n onDismissCreate: () => void;\n}): JSX.Element {\n const copy = controller.copy;\n const isIssueTitleMissing = controller.issueDraft.title.trim().length === 0;\n const isCreatingIssue = controller.issueEditorMode === \"create\";\n const isEditingIssue = controller.issueEditorMode === \"edit\";\n const issueContent = selectedIssue?.content ?? \"\";\n const tasks = controller.issueDetail.value?.tasks ?? [];\n const selectedTaskId = controller.nodeState.selectedTaskId;\n const selectedTask = selectedTaskId\n ? ((controller.taskDetail.value?.task?.taskId === selectedTaskId\n ? controller.taskDetail.value.task\n : tasks.find((task) => task.taskId === selectedTaskId)) ?? null)\n : null;\n const latestRun = selectedTask\n ? (controller.taskDetail.value?.latestRun ??\n controller.taskDetail.value?.recentRuns[0] ??\n null)\n : (controller.issueDetail.value?.latestRun ??\n controller.issueDetail.value?.recentRuns[0] ??\n null);\n const latestOutputs = selectedTask\n ? (controller.taskDetail.value?.latestOutputs ?? [])\n : (controller.issueDetail.value?.latestOutputs ?? []);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [deleteBusy, setDeleteBusy] = useState(false);\n\n if (isCreatingIssue || isEditingIssue) {\n return (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden\">\n <ScrollArea className=\"min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100 [&_[data-slot=scroll-area-viewport]]:overscroll-contain\">\n <div className=\"flex min-h-full flex-col gap-[14px] px-7 py-8\">\n <div className=\"flex w-full min-w-0 flex-col gap-3\">\n <div\n className={`${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`}\n >\n <h2 className=\"m-0 text-[17px] font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {isCreatingIssue\n ? copy.t(\"actions.createIssue\")\n : copy.t(\"actions.editIssue\")}\n </h2>\n </div>\n <div className=\"flex w-full min-w-0 flex-col gap-6\">\n <label\n className={`flex w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`}\n >\n <span className=\"leading-5\">{copy.t(\"labels.title\")}</span>\n <IssueManagerDraftTitleInput\n placeholder={copy.t(\"composer.issueTitlePlaceholder\")}\n value={controller.issueDraft.title}\n onChange={controller.setIssueTitle}\n />\n </label>\n <div\n className={`flex min-h-0 w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`}\n >\n <span className=\"leading-5\">{copy.t(\"labels.content\")}</span>\n <IssueManagerRichTextTextarea\n controller={controller}\n surface=\"issue\"\n textareaClassName=\"min-h-[180px] resize-none\"\n placeholder={copy.t(\"composer.issueContentPlaceholder\")}\n value={controller.issueDraft.content}\n onChange={controller.setIssueContent}\n />\n </div>\n </div>\n </div>\n </div>\n </ScrollArea>\n <div\n className={`shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`}\n >\n <div className=\"flex items-center justify-end gap-3\">\n <Button\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onDismissCreate}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n disabled={isIssueTitleMissing}\n size=\"dialog\"\n type=\"button\"\n onClick={() => void controller.saveIssue()}\n >\n {copy.t(\"actions.saveIssue\")}\n </Button>\n </div>\n </div>\n </div>\n );\n }\n\n if (!selectedIssue) {\n return <div className=\"h-full min-h-0\" />;\n }\n\n return (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden\">\n <ScrollArea className=\"min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100 [&_[data-slot=scroll-area-viewport]]:overscroll-contain\">\n <div className=\"px-8 py-7\">\n {controller.issueDetail.isLoading &&\n controller.issueDetail.value === null ? (\n <IssueManagerPaneLoadingState />\n ) : (\n <div className=\"flex w-full min-w-0 flex-col gap-9\">\n <header className=\"grid gap-3\">\n <div className=\"flex items-center justify-between gap-6\">\n <h2 className=\"line-clamp-2 text-base font-semibold leading-6 text-[var(--text-primary)]\">\n {selectedIssue.title}\n </h2>\n <div className=\"flex shrink-0 items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => controller.setIssueEditorMode(\"edit\")}\n >\n {copy.t(\"actions.edit\")}\n </Button>\n <Button\n className=\"text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => setDeleteDialogOpen(true)}\n >\n {copy.t(\"actions.delete\")}\n </Button>\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-2 text-[12px] font-normal leading-[1.3] text-[var(--text-secondary)]\">\n <Badge\n variant={issueManagerStatusBadgeVariant(\n selectedIssue.status\n )}\n >\n {resolveIssueManagerStatusLabel(copy, selectedIssue.status)}\n </Badge>\n <span\n aria-hidden=\"true\"\n className=\"h-4 w-px shrink-0 bg-[var(--line-2)]\"\n />\n <span className=\"text-[12px] font-normal leading-[1.3]\">\n {copy.t(\"labels.creator\")}{\" \"}\n {resolveIssueManagerCreatorLabel(selectedIssue)}\n </span>\n <span\n aria-hidden=\"true\"\n className=\"h-4 w-px shrink-0 bg-[var(--line-2)]\"\n />\n <span className=\"text-[12px] font-normal leading-[1.3]\">\n {copy.t(\"labels.createdAt\")}{\" \"}\n {formatIssueManagerTimestamp(selectedIssue.createdAtUnix) ||\n \"-\"}\n </span>\n </div>\n </header>\n <ConfirmationDialog\n cancelLabel={copy.t(\"actions.cancel\")}\n confirmBusy={deleteBusy}\n confirmLabel={copy.t(\"actions.delete\")}\n description={selectedIssue.title}\n open={deleteDialogOpen}\n title={copy.t(\"confirmations.deleteIssue\")}\n tone=\"destructive\"\n onConfirm={() => {\n setDeleteBusy(true);\n void controller\n .deleteIssue({ skipConfirmation: true })\n .finally(() => {\n setDeleteBusy(false);\n setDeleteDialogOpen(false);\n });\n }}\n onOpenChange={setDeleteDialogOpen}\n />\n <IssueManagerDescriptionSection\n content={issueContent}\n emptyLabel={copy.t(\"messages.issueContentEmpty\")}\n label={copy.t(\"labels.description\")}\n onOpen={controller.openReference}\n variant=\"plain\"\n />\n <IssueManagerDetailTextSection\n body={\n latestRun\n ? latestRun.summary?.trim() ||\n resolveIssueManagerStatusLabel(copy, latestRun.status)\n : copy.t(\"messages.noExecutionStatus\")\n }\n isPlaceholder={!latestRun}\n label={copy.t(\"labels.latestRunStatus\")}\n meta={\n latestRun\n ? formatIssueManagerTimestamp(\n latestRun.updatedAtUnix ?? latestRun.createdAtUnix\n ) || undefined\n : undefined\n }\n tone={latestRun?.status === \"failed\" ? \"destructive\" : \"muted\"}\n />\n <IssueManagerOutputSection\n copy={copy}\n outputs={latestOutputs}\n onOpen={controller.openReference}\n />\n <IssueManagerSubtaskSection\n copy={copy}\n onCreate={controller.createTaskDraft}\n onSelectTask={controller.selectTask}\n selectedTaskId={selectedTask?.taskId ?? null}\n tasks={tasks}\n />\n </div>\n )}\n </div>\n </ScrollArea>\n </div>\n );\n}\n","import type { IssueManagerStatus } from \"../../../contracts/index.ts\";\n\nexport function issueManagerStatusBadgeVariant(\n status: IssueManagerStatus\n): \"accent\" | \"default\" {\n return status === \"running\" ? \"accent\" : \"default\";\n}\n","import { type JSX } from \"react\";\nimport {\n Badge,\n Button,\n FileCreateIcon,\n ScrollArea,\n cn\n} from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerFileReference,\n IssueManagerIssueSummary,\n IssueManagerRunOutput,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerStatusLabel\n} from \"../../../services/controllerModel.ts\";\nimport {\n stripIssueManagerDescriptionTerminalPunctuation,\n summarizeIssueManagerContent\n} from \"../panel/IssueManagerPanelText.ts\";\nimport { IssueManagerTaskListLoadingState } from \"../panel/IssueManagerPanelSurface.tsx\";\nimport { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\n\nexport function IssueManagerDetailTextSection({\n body,\n isPlaceholder = false,\n label,\n meta,\n tone = \"muted\"\n}: {\n body: string;\n isPlaceholder?: boolean;\n label: string;\n meta?: string;\n tone?: \"destructive\" | \"muted\";\n}): JSX.Element {\n const bodyText = stripIssueManagerDescriptionTerminalPunctuation(body);\n const metaText = meta\n ? stripIssueManagerDescriptionTerminalPunctuation(meta)\n : null;\n const bodyClassName = cn(\n \"max-w-full whitespace-normal break-words text-[14px] leading-5 [overflow-wrap:anywhere]\",\n isPlaceholder\n ? \"font-normal text-[var(--text-secondary)]\"\n : tone === \"destructive\"\n ? \"font-semibold text-[var(--state-danger)]\"\n : \"font-semibold text-[var(--text-primary)]\"\n );\n\n if (isPlaceholder) {\n return (\n <section className=\"grid gap-2.5\">\n <h3 className=\"text-sm font-semibold text-[var(--text-primary)]\">\n {label}\n </h3>\n <p className={bodyClassName}>{bodyText}</p>\n </section>\n );\n }\n\n return (\n <section className=\"grid gap-2.5\">\n <h3 className=\"text-sm font-semibold text-[var(--text-primary)]\">\n {label}\n </h3>\n <div className=\"min-w-0 rounded-[12px] border border-[var(--line-2)] px-4 py-3\">\n <p className={bodyClassName}>{bodyText}</p>\n {metaText ? (\n <p className=\"mt-1 truncate text-xs font-normal text-[var(--text-secondary)]\">\n {metaText}\n </p>\n ) : null}\n </div>\n </section>\n );\n}\n\nexport function IssueManagerOutputSection({\n copy,\n onOpen,\n outputs\n}: {\n copy: IssueManagerController[\"copy\"];\n onOpen: (reference: IssueManagerFileReference) => Promise<void>;\n outputs: readonly IssueManagerRunOutput[];\n}): JSX.Element {\n return (\n <section className=\"grid gap-2.5\">\n <h3 className=\"text-sm font-semibold text-[var(--text-primary)]\">\n {copy.t(\"labels.executionOutputs\")}\n </h3>\n {outputs.length === 0 ? (\n <p className=\"text-sm font-normal leading-6 text-[var(--text-secondary)]\">\n {copy.t(\"messages.noExecutionOutputs\")}\n </p>\n ) : (\n <div className=\"overflow-hidden rounded-[12px] border border-[var(--line-2)] bg-transparent\">\n {outputs.map((output) => (\n <button\n className=\"flex w-full items-start justify-between gap-4 border-b border-[var(--line-2)] px-4 py-3 text-left transition-colors last:border-b-0 hover:bg-transparency-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/25 focus-visible:ring-inset\"\n key={output.outputId}\n type=\"button\"\n onClick={() => {\n void onOpen({\n displayName: output.displayName,\n kind: \"file\",\n path: output.path\n });\n }}\n >\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm font-semibold text-[var(--text-primary)]\">\n {output.displayName}\n </span>\n <span className=\"mt-1 block truncate text-xs font-normal text-[var(--text-secondary)]\">\n {output.path}\n </span>\n </span>\n <span className=\"shrink-0 text-xs font-normal text-[var(--text-secondary)]\">\n {formatIssueManagerTimestamp(output.createdAtUnix) || \"\"}\n </span>\n </button>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nexport function IssueManagerSubtaskSection({\n copy,\n onCreate,\n onSelectTask,\n selectedTaskId,\n tasks\n}: {\n copy: IssueManagerController[\"copy\"];\n onCreate: () => void;\n onSelectTask: (taskId: string | null) => void;\n selectedTaskId: string | null;\n tasks: readonly IssueManagerTaskSummary[];\n}): JSX.Element {\n return (\n <section className=\"grid gap-2.5\">\n <div className=\"flex items-center justify-between gap-3\">\n <h3 className=\"text-sm font-semibold text-[var(--text-primary)]\">\n {copy.t(\"labels.subtasks\")}\n </h3>\n <Button size=\"dialog\" type=\"button\" variant=\"ghost\" onClick={onCreate}>\n <FileCreateIcon size={14} />\n {copy.t(\"actions.add\")}\n </Button>\n </div>\n {tasks.length === 0 ? (\n <p className=\"text-sm font-normal leading-6 text-[var(--text-secondary)]\">\n {copy.t(\"messages.noSubtasksForIssue\")}\n </p>\n ) : (\n <div className=\"overflow-hidden rounded-lg border border-[var(--line-2)] bg-transparent\">\n {tasks.map((task) => (\n <button\n className={cn(\n \"flex w-full items-start justify-between gap-4 border-b border-[var(--line-2)] px-4 py-3 text-left transition-colors last:border-b-0 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/25 focus-visible:ring-inset\",\n selectedTaskId === task.taskId\n ? \"bg-transparency-actived\"\n : \"bg-transparent hover:bg-transparency-hover\"\n )}\n key={task.taskId}\n type=\"button\"\n onClick={() => onSelectTask(task.taskId)}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex min-w-0 items-center gap-2.5\">\n <span className=\"truncate text-sm font-semibold text-[var(--text-primary)]\">\n {task.title}\n </span>\n <Badge variant={issueManagerStatusBadgeVariant(task.status)}>\n {resolveIssueManagerStatusLabel(copy, task.status)}\n </Badge>\n </div>\n <p className=\"mt-2 line-clamp-2 text-[12px] font-normal leading-[1.5] text-[var(--text-secondary)]\">\n {summarizeIssueManagerContent(\n task.content,\n copy.t(\"messages.taskContentEmpty\")\n )}\n </p>\n </div>\n <span className=\"shrink-0 text-xs font-normal text-[var(--text-secondary)]\">\n {formatIssueManagerTimestamp(\n task.createdAtUnix ?? task.updatedAtUnix\n ) || \"\"}\n </span>\n </button>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nexport function IssueManagerTaskSection({\n controller,\n selectedIssue,\n selectedTaskId\n}: {\n controller: IssueManagerController;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTaskId: string | null;\n}): JSX.Element {\n const copy = controller.copy;\n const tasks = controller.issueDetail.value?.tasks ?? [];\n\n return (\n <section className=\"border-t border-[var(--line-2)] bg-transparent\">\n <div className=\"flex items-center justify-between gap-4 border-b border-[var(--line-2)] px-8 py-4\">\n <div>\n <h3 className=\"text-base font-semibold text-[var(--text-primary)]\">\n {copy.t(\"labels.taskList\")}\n </h3>\n </div>\n <Button\n className=\"px-3\"\n disabled={!selectedIssue}\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={controller.createTaskDraft}\n >\n <FileCreateIcon size={14} />\n {copy.t(\"actions.createTask\")}\n </Button>\n </div>\n\n <ScrollArea className=\"h-[16rem]\">\n <div className=\"px-8 py-5\">\n {controller.issueDetail.isLoading &&\n controller.issueDetail.value === null ? (\n <IssueManagerTaskListLoadingState />\n ) : tasks.length === 0 ? (\n <div className=\"overflow-hidden rounded-lg border border-[var(--line-2)] bg-transparent\">\n <div className=\"px-4 py-10 text-center\">\n <p className=\"text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"messages.noTasks\")}\n </p>\n <p className=\"mt-2 text-sm font-normal leading-5 text-[var(--text-secondary)]\">\n {copy.t(\"messages.noTasksForIssueBody\")}\n </p>\n </div>\n </div>\n ) : (\n <div className=\"overflow-hidden rounded-lg border border-[var(--line-2)] bg-transparent\">\n {tasks.map((task) => (\n <button\n className={cn(\n \"block w-full border-b border-[var(--line-2)] px-3.5 py-3.5 text-left transition-colors last:border-b-0 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/25 focus-visible:ring-inset\",\n selectedTaskId === task.taskId\n ? \"bg-transparency-actived\"\n : \"bg-transparent hover:bg-transparency-hover\"\n )}\n key={task.taskId}\n type=\"button\"\n onClick={() => controller.selectTask(task.taskId)}\n >\n <div className=\"flex min-w-0 flex-col gap-2\">\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <div className=\"flex min-w-0 flex-wrap items-center gap-2.5\">\n <span className=\"line-clamp-1 text-[14px] font-semibold leading-[1.3] text-[var(--text-primary)]\">\n {task.title}\n </span>\n <Badge\n variant={issueManagerStatusBadgeVariant(task.status)}\n >\n {resolveIssueManagerStatusLabel(copy, task.status)}\n </Badge>\n </div>\n <p className=\"text-[12px] font-normal leading-[18px] text-[var(--text-secondary)]\">\n {formatIssueManagerTimestamp(\n task.createdAtUnix ?? task.updatedAtUnix\n )}\n </p>\n </div>\n <p className=\"line-clamp-2 text-[12px] font-normal leading-[1.5] text-[var(--text-secondary)]\">\n {summarizeIssueManagerContent(\n task.content,\n copy.t(\"messages.taskContentEmpty\")\n )}\n </p>\n </div>\n </button>\n ))}\n </div>\n )}\n </div>\n </ScrollArea>\n </section>\n );\n}\n","import { extractIssueManagerPlainTextFromContent } from \"../../../core/index.ts\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\n\nexport function summarizeIssueManagerContent(\n content: string | null | undefined,\n fallback: string\n): string {\n const plainText = stripIssueManagerDescriptionTerminalPunctuation(\n extractIssueManagerPlainTextFromContent(content ?? \"\")\n );\n if (!plainText) {\n return stripIssueManagerDescriptionTerminalPunctuation(fallback);\n }\n if (plainText.length <= 120) {\n return plainText;\n }\n return `${plainText.slice(0, 117)}...`;\n}\n\nexport function stripIssueManagerDescriptionTerminalPunctuation(\n value: string\n): string {\n const trimmed = value.trim();\n if (!trimmed || trimmed.endsWith(\"...\") || trimmed.endsWith(\"…\")) {\n return trimmed;\n }\n return trimmed.replace(/[。..]+$/u, \"\");\n}\n\nexport function resolveTaskCreatorLabel(task: IssueManagerTaskSummary): string {\n return resolveIssueManagerCreatorLabel(task);\n}\n\nexport function resolveIssueManagerCreatorLabel(\n entity:\n | Pick<IssueManagerIssueSummary, \"creatorDisplayName\" | \"creatorUserId\">\n | Pick<IssueManagerTaskSummary, \"creatorDisplayName\" | \"creatorUserId\">\n): string {\n return entity.creatorDisplayName?.trim() || entity.creatorUserId;\n}\n","import { type JSX, type ReactNode } from \"react\";\nimport { Button, FileCreateIcon } from \"@nextop-os/ui-system\";\n\nexport function IssueManagerEmptyIllustration({\n src\n}: {\n src: string;\n}): JSX.Element {\n return (\n <img\n alt=\"\"\n aria-hidden=\"true\"\n className=\"h-[84px] w-[84px] object-contain\"\n decoding=\"async\"\n draggable={false}\n src={src}\n />\n );\n}\n\nexport function IssueManagerTaskEmptyState({\n body,\n ctaLabel,\n illustration,\n onCreate,\n title\n}: {\n body: string;\n ctaLabel: string;\n illustration?: ReactNode;\n onCreate: () => void;\n title: string;\n}): JSX.Element {\n return (\n <div className=\"flex min-h-[320px] items-center justify-center px-6 py-10 text-center\">\n <div className=\"grid max-w-[420px] justify-items-center gap-2\">\n {illustration ?? null}\n <p className=\"text-lg font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {title}\n </p>\n <p className=\"max-w-[420px] text-base leading-[1.3] text-[var(--text-secondary)]\">\n {body}\n </p>\n <Button\n className=\"mt-2 gap-2 px-[18px]\"\n size=\"dialog\"\n type=\"button\"\n onClick={onCreate}\n >\n <FileCreateIcon size={16} />\n {ctaLabel}\n </Button>\n </div>\n </div>\n );\n}\n\nexport function IssueManagerPaneLoadingState(): JSX.Element {\n return (\n <div\n aria-hidden=\"true\"\n className=\"mx-auto flex w-full max-w-4xl flex-col gap-6\"\n >\n <div className=\"h-6 w-28 rounded-full bg-muted\" />\n <div className=\"h-12 w-2/3 rounded-full bg-muted\" />\n <div className=\"rounded-[28px] border border-border/70 bg-transparent px-5 py-5\">\n <div className=\"h-4 w-24 rounded-full bg-muted\" />\n <div className=\"mt-5 h-4 w-full rounded-full bg-muted\" />\n <div className=\"mt-3 h-4 w-11/12 rounded-full bg-muted\" />\n <div className=\"mt-3 h-4 w-10/12 rounded-full bg-muted\" />\n </div>\n <div className=\"rounded-[24px] border border-border/70 bg-transparent px-5 py-5\">\n <div className=\"h-4 w-32 rounded-full bg-muted\" />\n <div className=\"mt-5 h-4 w-full rounded-full bg-muted\" />\n <div className=\"mt-3 h-4 w-9/12 rounded-full bg-muted\" />\n </div>\n </div>\n );\n}\n\nexport function IssueManagerTaskListLoadingState(): JSX.Element {\n return (\n <div\n aria-hidden=\"true\"\n className=\"overflow-hidden rounded-lg border border-border/70 bg-transparent\"\n >\n {Array.from({ length: 3 }, (_, index) => (\n <div\n className=\"border-b border-border/70 px-3.5 py-3.5 last:border-b-0\"\n key={index}\n >\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"h-4 w-2/5 rounded-full bg-muted\" />\n <div className=\"h-3.5 w-20 rounded-full bg-muted\" />\n </div>\n <div className=\"mt-3 h-3.5 w-full rounded-full bg-muted\" />\n <div className=\"mt-2 h-3.5 w-4/5 rounded-full bg-muted\" />\n </div>\n ))}\n </div>\n );\n}\n\nexport function IssueManagerTaskDrawerLoadingState(): JSX.Element {\n return (\n <div aria-hidden=\"true\" className=\"grid gap-5\">\n <div className=\"h-12 w-full rounded-2xl bg-muted\" />\n <div className=\"grid grid-cols-2 gap-3\">\n <div className=\"h-10 rounded-xl bg-muted\" />\n <div className=\"h-10 rounded-xl bg-muted\" />\n </div>\n <div className=\"rounded-[24px] border border-border/70 bg-transparent px-4 py-4\">\n <div className=\"h-4 w-24 rounded-full bg-muted\" />\n <div className=\"mt-4 h-4 w-full rounded-full bg-muted\" />\n <div className=\"mt-3 h-4 w-11/12 rounded-full bg-muted\" />\n <div className=\"mt-3 h-4 w-9/12 rounded-full bg-muted\" />\n </div>\n </div>\n );\n}\n","import { useEffect, useRef, useState, type JSX } from \"react\";\nimport { RichTextReadonlyContent } from \"@nextop-os/ui-rich-text/editor\";\nimport { cn } from \"@nextop-os/ui-system\";\nimport { normalizeIssueManagerContent } from \"../../../core/index.ts\";\nimport type { IssueManagerFileReference } from \"../../../contracts/index.ts\";\nimport { stripIssueManagerDescriptionTerminalPunctuation } from \"../panel/IssueManagerPanelText.ts\";\n\nexport function IssueManagerDescriptionSection({\n content,\n emptyLabel,\n label,\n minHeightClass = \"min-h-[14rem]\",\n onOpen,\n variant = \"card\"\n}: {\n content: string;\n emptyLabel: string;\n label: string;\n minHeightClass?: string;\n onOpen?: (reference: IssueManagerFileReference) => Promise<void>;\n variant?: \"card\" | \"plain\";\n}): JSX.Element {\n const contentRef = useRef<HTMLDivElement | null>(null);\n const [isOverflowing, setIsOverflowing] = useState(false);\n const normalizedContent = normalizeIssueManagerContent(content).trim();\n const displayContent =\n stripIssueManagerDescriptionTerminalPunctuation(normalizedContent);\n\n useEffect(() => {\n if (variant === \"plain\") {\n setIsOverflowing(false);\n return;\n }\n if (!displayContent) {\n setIsOverflowing(false);\n return;\n }\n\n const contentElement = contentRef.current;\n if (!contentElement) {\n return;\n }\n\n const measure = () => {\n setIsOverflowing(\n contentElement.scrollHeight > contentElement.clientHeight + 1\n );\n };\n\n measure();\n if (typeof ResizeObserver === \"undefined\") {\n return;\n }\n\n const observer = new ResizeObserver(() => {\n measure();\n });\n observer.observe(contentElement);\n return () => {\n observer.disconnect();\n };\n }, [displayContent, variant]);\n\n if (variant === \"plain\") {\n return (\n <section className=\"grid gap-2\">\n <span className=\"text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {label}\n </span>\n {displayContent ? (\n <div className=\"max-w-3xl text-sm font-normal leading-5 text-[var(--text-secondary)]\">\n <IssueManagerDescriptionContent\n content={displayContent}\n onOpen={onOpen}\n />\n </div>\n ) : (\n <p className=\"text-sm font-normal leading-5 text-[var(--text-secondary)]\">\n {emptyLabel}\n </p>\n )}\n </section>\n );\n }\n\n return (\n <section className=\"grid gap-2\">\n <span className=\"text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {label}\n </span>\n <div\n className={cn(\n \"relative min-w-0 rounded-lg border border-border-1 bg-transparent px-4 py-3\",\n minHeightClass\n )}\n >\n <div\n className={cn(\n \"max-h-[18rem] overflow-y-auto pr-2 text-sm font-normal leading-5 text-[var(--text-secondary)]\",\n isOverflowing && \"pb-8\"\n )}\n ref={contentRef}\n >\n {displayContent ? (\n <IssueManagerDescriptionContent\n content={displayContent}\n onOpen={onOpen}\n />\n ) : (\n <p className=\"font-normal text-[var(--text-secondary)]\">\n {emptyLabel}\n </p>\n )}\n </div>\n {isOverflowing ? (\n <div\n className=\"pointer-events-none absolute right-0 bottom-1 left-0 h-10\"\n style={{\n background:\n \"linear-gradient(to top, var(--background-panel), color-mix(in srgb, var(--background-panel) 80%, transparent), transparent)\"\n }}\n />\n ) : null}\n </div>\n </section>\n );\n}\n\nfunction IssueManagerDescriptionContent({\n content,\n onOpen\n}: {\n content: string;\n onOpen?: (reference: IssueManagerFileReference) => Promise<void>;\n}): JSX.Element {\n return (\n <RichTextReadonlyContent\n value={content}\n onOpenWorkspaceReference={\n onOpen\n ? (reference) =>\n onOpen({\n displayName: reference.label,\n kind: reference.kind,\n path: reference.path\n })\n : undefined\n }\n />\n );\n}\n","import { useEffect, useMemo, useRef, useState, type JSX } from \"react\";\nimport { RichTextAtEditor } from \"@nextop-os/ui-rich-text/editor\";\nimport { Button, LinkIcon, cn } from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerController,\n IssueManagerRichTextSurface\n} from \"../../react/index.ts\";\n\nconst issueManagerRichTextTextareaBaseClassName =\n \"min-h-20 w-full rounded-[8px] border border-transparent bg-[var(--transparency-block)] p-3 text-sm font-normal leading-[1.3] text-[var(--text-primary)] transition-[background-color,border-color,color] outline-none shadow-none placeholder:text-[var(--text-placeholder)] hover:bg-[var(--transparency-hover)] focus:bg-[var(--transparency-hover)] focus-visible:border-transparent focus-visible:bg-[var(--transparency-hover)] focus-visible:ring-0 disabled:cursor-not-allowed disabled:bg-[var(--transparency-block)] disabled:text-[var(--text-disabled)] disabled:opacity-100 aria-invalid:border-[var(--state-danger)] aria-invalid:bg-[var(--transparency-block)] aria-invalid:hover:bg-[var(--transparency-hover)] aria-invalid:focus:bg-[var(--transparency-hover)] aria-invalid:focus-visible:bg-[var(--transparency-hover)] aria-invalid:ring-0 aria-invalid:shadow-none\";\n\nconst issueManagerRichTextPlaceholderBaseClassName =\n \"min-h-20 w-full p-3 text-sm font-normal leading-[1.3] text-[var(--text-placeholder)]\";\n\nexport function IssueManagerRichTextTextarea({\n controller,\n onChange,\n placeholder,\n surface,\n textareaClassName,\n value\n}: {\n controller: IssueManagerController;\n onChange: (value: string) => void;\n placeholder?: string;\n surface: IssueManagerRichTextSurface;\n textareaClassName?: string;\n value: string;\n}): JSX.Element {\n const providers = useMemo(\n () => controller.resolveRichTextAtProviders(surface),\n [controller, surface]\n );\n const showReferenceAction = controller.canReferenceWorkspaceFiles;\n const [focusSignal, setFocusSignal] = useState(0);\n const previousValueRef = useRef(value);\n const wasAddingReferenceRef = useRef(false);\n\n useEffect(() => {\n const isAddingReference =\n controller.referenceTarget?.mode === \"insert\" &&\n controller.referenceTarget.parentKind === surface;\n if (\n wasAddingReferenceRef.current &&\n !isAddingReference &&\n value !== previousValueRef.current\n ) {\n setFocusSignal((current) => current + 1);\n }\n wasAddingReferenceRef.current = isAddingReference;\n previousValueRef.current = value;\n }, [controller.referenceTarget, surface, value]);\n\n return (\n <RichTextAtEditor\n focusSignal={focusSignal}\n maxResults={8}\n minQueryLength={1}\n providers={providers}\n textOverrides={{\n loadingLabel: controller.copy.t(\"richTextAt.loading\"),\n noMatchesLabel: controller.copy.t(\"richTextAt.noMatches\"),\n removeReferenceActionLabel: controller.copy.t(\"actions.removeReference\")\n }}\n textareaClassName={cn(\n issueManagerRichTextTextareaBaseClassName,\n textareaClassName,\n showReferenceAction && \"pb-11\"\n )}\n placeholderClassName={cn(\n issueManagerRichTextPlaceholderBaseClassName,\n textareaClassName,\n showReferenceAction && \"pb-11\"\n )}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n overlay={\n showReferenceAction ? (\n <div className=\"pointer-events-none absolute inset-x-3 bottom-3 z-10 flex\">\n <Button\n className=\"pointer-events-auto\"\n size=\"default\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n void controller.insertReferences(surface);\n }}\n >\n <LinkIcon size={14} />\n {controller.copy.t(\"actions.referenceWorkspaceFiles\")}\n </Button>\n </div>\n ) : null\n }\n />\n );\n}\n","import {\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type ChangeEvent,\n type CompositionEvent,\n type JSX\n} from \"react\";\nimport { Input } from \"@nextop-os/ui-system\";\nimport {\n resolveIssueManagerDraftTitleSync,\n type IssueManagerDraftTitlePendingCommit\n} from \"./IssueManagerDraftTitleInputState.ts\";\n\nexport function IssueManagerDraftTitleInput({\n onChange,\n placeholder,\n value\n}: {\n onChange: (value: string) => void;\n placeholder: string;\n value: string;\n}): JSX.Element {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const pendingSelectionRef = useRef<{\n direction: \"backward\" | \"forward\" | \"none\";\n end: number;\n start: number;\n } | null>(null);\n const pendingCommitRef = useRef<IssueManagerDraftTitlePendingCommit | null>(\n null\n );\n const [localValue, setLocalValue] = useState(value);\n const [isComposing, setIsComposing] = useState(false);\n\n useEffect(() => {\n const syncResult = resolveIssueManagerDraftTitleSync({\n isComposing,\n localValue,\n pendingCommit: pendingCommitRef.current,\n value\n });\n\n pendingCommitRef.current = syncResult.pendingCommit;\n if (syncResult.shouldSyncLocalValue) {\n setLocalValue(syncResult.value);\n }\n }, [isComposing, localValue, value]);\n\n useLayoutEffect(() => {\n const input = inputRef.current;\n const selection = pendingSelectionRef.current;\n if (!input || !selection || document.activeElement !== input) {\n return;\n }\n pendingSelectionRef.current = null;\n const maxPosition = input.value.length;\n input.setSelectionRange(\n Math.min(selection.start, maxPosition),\n Math.min(selection.end, maxPosition),\n selection.direction\n );\n }, [localValue, value]);\n\n const rememberSelection = (input: HTMLInputElement) => {\n const start = input.selectionStart;\n const end = input.selectionEnd;\n if (start === null || end === null) {\n return;\n }\n pendingSelectionRef.current = {\n direction: input.selectionDirection ?? \"none\",\n end,\n start\n };\n };\n\n const commitValue = (nextValue: string) => {\n pendingCommitRef.current = {\n committedValue: nextValue,\n previousValue: value\n };\n setLocalValue(nextValue);\n onChange(nextValue);\n };\n\n return (\n <Input\n ref={inputRef}\n placeholder={placeholder}\n variant=\"md\"\n value={localValue}\n onBlur={(event) => {\n commitValue(event.currentTarget.value);\n }}\n onChange={(event: ChangeEvent<HTMLInputElement>) => {\n const nextValue = event.currentTarget.value;\n rememberSelection(event.currentTarget);\n if (!isComposing) {\n commitValue(nextValue);\n return;\n }\n setLocalValue(nextValue);\n }}\n onCompositionEnd={(event: CompositionEvent<HTMLInputElement>) => {\n rememberSelection(event.currentTarget);\n setIsComposing(false);\n commitValue(event.currentTarget.value);\n }}\n onCompositionStart={() => {\n setIsComposing(true);\n }}\n />\n );\n}\n","export interface IssueManagerDraftTitlePendingCommit {\n committedValue: string;\n previousValue: string;\n}\n\nexport interface IssueManagerDraftTitleSyncInput {\n isComposing: boolean;\n localValue: string;\n pendingCommit: IssueManagerDraftTitlePendingCommit | null;\n value: string;\n}\n\nexport interface IssueManagerDraftTitleSyncResult {\n pendingCommit: IssueManagerDraftTitlePendingCommit | null;\n shouldSyncLocalValue: boolean;\n value: string;\n}\n\nexport function resolveIssueManagerDraftTitleSync(\n input: IssueManagerDraftTitleSyncInput\n): IssueManagerDraftTitleSyncResult {\n if (input.isComposing) {\n return {\n pendingCommit: input.pendingCommit,\n shouldSyncLocalValue: false,\n value: input.localValue\n };\n }\n\n if (input.pendingCommit !== null) {\n if (input.value === input.pendingCommit.committedValue) {\n return {\n pendingCommit: null,\n shouldSyncLocalValue: input.localValue !== input.value,\n value: input.value\n };\n }\n\n if (\n input.localValue === input.pendingCommit.committedValue &&\n input.value === input.pendingCommit.previousValue\n ) {\n return {\n pendingCommit: input.pendingCommit,\n shouldSyncLocalValue: false,\n value: input.localValue\n };\n }\n }\n\n return {\n pendingCommit: null,\n shouldSyncLocalValue: input.localValue !== input.value,\n value: input.value\n };\n}\n","export const issueManagerEditorRiseInClassName =\n \"motion-safe:animate-in motion-safe:fade-in-0 motion-safe:slide-in-from-bottom-3 motion-safe:duration-[240ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-safe:[animation-fill-mode:both] motion-reduce:animate-none\";\n\nexport const issueManagerEditorRiseInDelay0ClassName =\n \"motion-safe:[animation-delay:0ms]\";\n\nexport const issueManagerEditorRiseInDelay1ClassName =\n \"motion-safe:[animation-delay:55ms]\";\n\nexport const issueManagerEditorRiseInDelay2ClassName =\n \"motion-safe:[animation-delay:110ms]\";\n\nexport const issueManagerEditorRiseInDelay3ClassName =\n \"motion-safe:[animation-delay:165ms]\";\n\nexport const issueManagerEditorFooterFadeInClassName =\n \"motion-safe:animate-in motion-safe:fade-in-0 motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-safe:[animation-delay:180ms] motion-safe:[animation-fill-mode:both] motion-reduce:animate-none\";\n","import { type JSX } from \"react\";\nimport { Button, cn } from \"@nextop-os/ui-system\";\nimport type { IssueManagerIssueSummary } from \"../../../contracts/index.ts\";\nimport {\n IssueManagerBreakdownActionTrigger,\n IssueManagerExecutionDirectoryTrigger,\n IssueManagerRunActionTrigger\n} from \"../task/IssueManagerRunSections.tsx\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\n\nexport interface IssueManagerBottomBarProps {\n controller: IssueManagerController;\n isNarrowLayout: boolean;\n selectedIssue: IssueManagerIssueSummary | null;\n visible: boolean;\n}\n\nexport function IssueManagerBottomBar({\n controller,\n isNarrowLayout,\n selectedIssue,\n visible\n}: IssueManagerBottomBarProps): JSX.Element | null {\n const copy = controller.copy;\n if (!visible || !selectedIssue) {\n return null;\n }\n\n return (\n <div className=\"border-t border-[var(--border-1)] bg-transparent px-6 py-4 backdrop-blur\">\n <div\n className={cn(\n \"flex gap-3\",\n isNarrowLayout\n ? \"flex-wrap items-center justify-end\"\n : \"items-center justify-end\"\n )}\n >\n <IssueManagerExecutionDirectoryTrigger\n className=\"mr-auto min-w-0 max-w-[240px] justify-start overflow-hidden\"\n controller={controller}\n disabled={controller.isRunningTask}\n />\n <div className=\"flex shrink-0 flex-nowrap items-center justify-end gap-3\">\n <IssueManagerBreakdownActionTrigger\n controller={controller}\n disabled={!selectedIssue}\n triggerVariant=\"button\"\n />\n <IssueManagerRunActionTrigger\n controller={controller}\n disabled={!selectedIssue}\n triggerVariant=\"button\"\n />\n {controller.canInviteCollaborators ? (\n <Button\n className=\"px-4\"\n disabled={!selectedIssue}\n size=\"dialog\"\n type=\"button\"\n onClick={() => {\n void controller.shareSelection();\n }}\n >\n {copy.t(\"actions.inviteCollaborator\")}\n </Button>\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n","import { useEffect, useState, type JSX, type ReactNode } from \"react\";\nimport {\n Badge,\n AgentSessionsIcon,\n Button,\n CheckIcon,\n ChevronDownIcon,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n FolderIcon,\n IssueIcon,\n LinkIcon,\n NoWorkspaceLinedIcon,\n cn\n} from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerExecutionDirectoryProject,\n IssueManagerFileReference,\n IssueManagerRun,\n IssueManagerRunOutput\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerStatusLabel\n} from \"../../../services/controllerModel.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\n\nconst executionDirectoryMenuItemClassName =\n \"min-h-7 overflow-hidden rounded-md py-1 pr-7 pl-2.5 text-[13px] font-normal leading-[1.2] text-[var(--text-primary)]\";\nconst executionDirectoryMenuItemCheckClassName =\n \"pointer-events-none absolute right-2 top-1/2 shrink-0 -translate-y-1/2\";\nconst providerMenuItemClassName =\n \"min-h-8 overflow-hidden rounded-md py-1.5 pr-7 pl-2.5 text-[13px] font-normal leading-[1.2] text-[var(--text-primary)]\";\nconst providerMenuItemCheckClassName =\n \"pointer-events-none absolute right-2 top-1/2 shrink-0 -translate-y-1/2\";\n\nexport function IssueManagerRunActionTrigger({\n controller,\n disabled = false,\n triggerClassName,\n triggerVariant = \"default\"\n}: {\n controller: IssueManagerController;\n disabled?: boolean;\n triggerClassName?: string;\n triggerVariant?: IssueManagerProviderActionTriggerVariant;\n}): JSX.Element {\n return (\n <IssueManagerProviderActionMenu\n controller={controller}\n disabled={controller.isRunningTask || disabled}\n icon={<AgentSessionsIcon size={16} />}\n label={controller.copy.t(\"actions.askAgentToRun\")}\n triggerClassName={triggerClassName}\n triggerVariant={triggerVariant}\n onSelectProvider={(provider) => controller.runTask(provider)}\n />\n );\n}\n\nexport function IssueManagerBreakdownActionTrigger({\n controller,\n disabled = false,\n triggerClassName,\n triggerVariant = \"default\"\n}: {\n controller: IssueManagerController;\n disabled?: boolean;\n triggerClassName?: string;\n triggerVariant?: IssueManagerProviderActionTriggerVariant;\n}): JSX.Element {\n return (\n <IssueManagerProviderActionMenu\n controller={controller}\n disabled={disabled}\n icon={<IssueIcon size={16} />}\n label={controller.copy.t(\"actions.askAgentToBreakdown\")}\n triggerClassName={triggerClassName}\n triggerVariant={triggerVariant}\n triggerButtonVariant=\"secondary\"\n onSelectProvider={(provider) => controller.startTaskBreakdown(provider)}\n />\n );\n}\n\ntype IssueManagerProviderActionTriggerVariant = \"button\" | \"default\";\n\nfunction IssueManagerProviderActionMenu({\n controller,\n disabled,\n icon,\n label,\n onSelectProvider,\n triggerButtonVariant,\n triggerClassName,\n triggerVariant\n}: {\n controller: IssueManagerController;\n disabled: boolean;\n icon: ReactNode;\n label: string;\n onSelectProvider: (provider: string) => Promise<void>;\n triggerButtonVariant?: \"secondary\";\n triggerClassName?: string;\n triggerVariant: IssueManagerProviderActionTriggerVariant;\n}): JSX.Element {\n const providerOptions = controller.providerOptions;\n const selectedProvider = controller.nodeState.selectedAgentProvider.trim();\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild disabled={disabled}>\n <Button\n className={cn(\"min-w-0\", triggerClassName)}\n disabled={disabled}\n size={triggerVariant === \"button\" ? \"dialog\" : \"default\"}\n type=\"button\"\n variant={triggerButtonVariant}\n >\n {icon}\n <span className=\"truncate\">{label}</span>\n <ChevronDownIcon className=\"shrink-0\" size={14} />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"w-[220px] min-w-[220px]\"\n style={{ zIndex: \"var(--z-panel-popover)\" }}\n >\n {providerOptions.length === 0 ? (\n <DropdownMenuItem className={providerMenuItemClassName} disabled>\n {controller.copy.t(\"messages.noAgentProviders\")}\n </DropdownMenuItem>\n ) : (\n providerOptions.map((option) => (\n <DropdownMenuItem\n className={providerMenuItemClassName}\n disabled={option.disabled === true}\n key={option.provider}\n title={option.disabledReason}\n onSelect={() => {\n void onSelectProvider(option.provider);\n }}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n <AgentSessionsIcon aria-hidden size={15} />\n <span className=\"min-w-0 flex-1 truncate\">{option.label}</span>\n {option.provider === selectedProvider ? (\n <CheckIcon\n className={providerMenuItemCheckClassName}\n size={15}\n />\n ) : null}\n </span>\n </DropdownMenuItem>\n ))\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nexport function IssueManagerExecutionDirectoryTrigger({\n className,\n controller,\n disabled = false\n}: {\n className?: string;\n controller: IssueManagerController;\n disabled?: boolean;\n}): JSX.Element | null {\n const [projects, setProjects] = useState<\n IssueManagerExecutionDirectoryProject[]\n >([]);\n const [isLoading, setIsLoading] = useState(false);\n const selectedPath =\n controller.nodeState.selectedExecutionDirectory?.trim() ?? \"\";\n const selectedProject =\n projects.find((project) => project.path === selectedPath) ?? null;\n const triggerLabel = selectedProject\n ? selectedProject.label\n : selectedPath\n ? controller.copy.t(\"labels.customExecutionDirectory\")\n : controller.copy.t(\"labels.noProject\");\n\n useEffect(() => {\n let canceled = false;\n\n setIsLoading(true);\n void controller\n .listExecutionDirectoryProjects()\n .then((response) => {\n if (!canceled) {\n setProjects(response.projects);\n }\n })\n .catch(() => {\n if (!canceled) {\n setProjects([]);\n }\n })\n .finally(() => {\n if (!canceled) {\n setIsLoading(false);\n }\n });\n\n return () => {\n canceled = true;\n };\n }, [controller.workspaceId]);\n\n const refreshProjects = (): void => {\n void controller\n .listExecutionDirectoryProjects()\n .then((response) => setProjects(response.projects))\n .catch(() => setProjects([]));\n };\n\n if (!controller.canSelectExecutionDirectory) {\n return null;\n }\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild disabled={disabled}>\n <button\n aria-label={controller.copy.t(\"actions.selectExecutionDirectory\")}\n className={cn(\n \"group inline-flex min-h-7 max-w-[240px] min-w-0 items-center gap-1.5 overflow-hidden rounded-md border-0 bg-transparent px-0.5 py-0 text-[13px] font-normal leading-[1.2] text-[var(--text-secondary)] shadow-none outline-none hover:bg-transparent hover:text-[var(--text-primary)] focus:bg-transparent focus:text-[var(--text-primary)] focus-visible:bg-transparent focus-visible:ring-0 disabled:bg-transparent disabled:text-[var(--text-disabled)]\",\n className\n )}\n disabled={disabled}\n type=\"button\"\n >\n {selectedPath ? (\n <FolderIcon className=\"shrink-0\" size={15} />\n ) : (\n <NoWorkspaceLinedIcon className=\"shrink-0\" size={15} />\n )}\n <span className=\"min-w-0 truncate text-left font-normal\">\n {triggerLabel}\n </span>\n <ChevronDownIcon\n className=\"shrink-0 text-[var(--text-secondary)] transition-transform group-data-[state=open]:rotate-180\"\n size={14}\n />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"w-[240px] min-w-[240px]\"\n style={{ zIndex: \"var(--z-panel-popover)\" }}\n >\n {selectedPath && !selectedProject ? (\n <DropdownMenuItem\n className={executionDirectoryMenuItemClassName}\n onSelect={() => {\n void controller\n .useExecutionDirectory(selectedPath)\n .then(refreshProjects);\n }}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n <FolderIcon aria-hidden size={15} />\n <span className=\"min-w-0 flex-1 truncate\">\n {controller.copy.t(\"labels.customExecutionDirectory\")}\n </span>\n <CheckIcon\n className={executionDirectoryMenuItemCheckClassName}\n size={15}\n />\n </span>\n </DropdownMenuItem>\n ) : null}\n {projects.map((project) => (\n <DropdownMenuItem\n className={executionDirectoryMenuItemClassName}\n key={project.id || project.path}\n onSelect={() => {\n void controller\n .useExecutionDirectory(project.path)\n .then(refreshProjects);\n }}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n <FolderIcon aria-hidden size={15} />\n <span className=\"min-w-0 flex-1 truncate\">{project.label}</span>\n {project.path === selectedPath ? (\n <CheckIcon\n className={executionDirectoryMenuItemCheckClassName}\n size={15}\n />\n ) : null}\n </span>\n </DropdownMenuItem>\n ))}\n {isLoading ? (\n <DropdownMenuItem\n className={executionDirectoryMenuItemClassName}\n disabled\n >\n {controller.copy.t(\"labels.loadingExecutionDirectories\")}\n </DropdownMenuItem>\n ) : null}\n {projects.length > 0 || selectedPath || isLoading ? (\n <DropdownMenuSeparator />\n ) : null}\n <DropdownMenuItem\n className={executionDirectoryMenuItemClassName}\n onSelect={() => {\n void controller.selectExecutionDirectory().then(refreshProjects);\n }}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n <LinkIcon aria-hidden size={15} />\n <span className=\"truncate\">\n {controller.copy.t(\"actions.linkExistingExecutionDirectory\")}\n </span>\n </span>\n </DropdownMenuItem>\n <DropdownMenuItem\n className={executionDirectoryMenuItemClassName}\n onSelect={() => {\n void controller.useExecutionDirectory(null).then(refreshProjects);\n }}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n <NoWorkspaceLinedIcon aria-hidden size={15} />\n <span className=\"truncate\">\n {controller.copy.t(\"labels.noProject\")}\n </span>\n {!selectedPath ? (\n <CheckIcon\n className={executionDirectoryMenuItemCheckClassName}\n size={15}\n />\n ) : null}\n </span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nexport function IssueManagerRunPanels({\n copy,\n onOpen,\n outputs,\n recentRuns\n}: {\n copy: IssueManagerI18nRuntime;\n onOpen: (reference: IssueManagerFileReference) => Promise<void>;\n outputs: readonly IssueManagerRunOutput[];\n recentRuns: readonly IssueManagerRun[];\n}): JSX.Element {\n return (\n <div className=\"grid gap-4\">\n <section className=\"rounded-lg border border-border-1 bg-transparent px-4 py-4\">\n <h4 className=\"mb-3 text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.recentRuns\")}\n </h4>\n {recentRuns.length === 0 ? (\n <p className=\"text-sm leading-5 text-[var(--text-secondary)]\">\n {copy.t(\"messages.noRecentRuns\")}\n </p>\n ) : (\n <div className=\"grid gap-2.5\">\n {recentRuns.map((run) => (\n <div\n className=\"rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3\"\n key={run.runId}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {run.summary || run.runId}\n </p>\n <p className=\"mt-1 text-xs leading-[1.55] text-[var(--text-secondary)]\">\n {formatIssueManagerTimestamp(\n run.updatedAtUnix ?? run.createdAtUnix\n )}\n </p>\n </div>\n <Badge variant={issueManagerStatusBadgeVariant(run.status)}>\n {resolveIssueManagerStatusLabel(copy, run.status)}\n </Badge>\n </div>\n {run.errorMessage ? (\n <p className=\"mt-2 text-xs text-[var(--state-danger)]\">\n {run.errorMessage}\n </p>\n ) : null}\n </div>\n ))}\n </div>\n )}\n </section>\n\n <section className=\"rounded-lg border border-border-1 bg-transparent px-4 py-4\">\n <h4 className=\"mb-3 text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.outputs\")}\n </h4>\n {outputs.length === 0 ? (\n <p className=\"text-sm leading-5 text-[var(--text-secondary)]\">\n {copy.t(\"messages.noOutputs\")}\n </p>\n ) : (\n <div className=\"grid gap-2.5\">\n {outputs.map((output) => (\n <button\n className=\"rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3 text-left transition-colors hover:bg-transparency-hover\"\n key={output.outputId}\n type=\"button\"\n onClick={() => {\n void onOpen({\n displayName: output.displayName,\n kind: \"file\",\n path: output.path\n });\n }}\n >\n <p className=\"truncate text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {output.displayName}\n </p>\n <p className=\"mt-1 truncate text-xs leading-[1.55] text-[var(--text-secondary)]\">\n {output.path}\n </p>\n </button>\n ))}\n </div>\n )}\n </section>\n </div>\n );\n}\n","import { type JSX } from \"react\";\nimport { ToastProvider, ToastRoot, ToastTitle } from \"@nextop-os/ui-system\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\n\nexport function IssueManagerFloatingNotice({\n notice\n}: {\n notice: NonNullable<IssueManagerController[\"floatingNotice\"]>;\n}): JSX.Element {\n const variant = notice.tone === \"destructive\" ? \"destructive\" : \"default\";\n\n return (\n <ToastProvider>\n <ToastRoot\n key={notice.id}\n open\n anchor=\"node\"\n busy={notice.isLoading}\n className=\"z-30 w-fit max-w-[min(72vw,40rem)] px-4 py-3 shadow-lg\"\n nodeInsetTopPx={16}\n variant={variant}\n >\n <ToastTitle className=\"whitespace-nowrap\">{notice.title}</ToastTitle>\n </ToastRoot>\n </ToastProvider>\n );\n}\n","import { type JSX } from \"react\";\nimport { cn } from \"@nextop-os/ui-system\";\nimport type { IssueManagerNodeState } from \"../../../contracts/index.ts\";\nimport {\n IssueManagerSidebarBody,\n IssueManagerSidebarHeader,\n IssueManagerSidebarStandalonePane,\n IssueManagerSidebarStatusTabs\n} from \"./IssueManagerSidebarSections.tsx\";\nimport { resolveIssueManagerSidebarPresentationState } from \"./IssueManagerSidebarState.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport type { IssueManagerSidebarViewState } from \"./IssueManagerShellState.ts\";\n\nexport interface IssueManagerSidebarProps {\n controller: IssueManagerController;\n isCollapsed: boolean;\n isNarrowLayout: boolean;\n showStandaloneState: boolean;\n sidebarViewState: IssueManagerSidebarViewState;\n statusCounts: Record<IssueManagerNodeState[\"issueStatusFilter\"], number>;\n}\n\nexport function IssueManagerSidebar({\n controller,\n isCollapsed,\n isNarrowLayout,\n showStandaloneState,\n sidebarViewState,\n statusCounts\n}: IssueManagerSidebarProps): JSX.Element {\n const copy = controller.copy;\n const presentation = resolveIssueManagerSidebarPresentationState({\n showStandaloneState,\n sidebarViewState\n });\n\n return (\n <aside\n aria-hidden={isCollapsed ? \"true\" : undefined}\n className={cn(\n \"relative isolate flex h-full min-h-0 min-w-0 flex-col overflow-hidden bg-transparent opacity-100 transition-[border-color] duration-[140ms] ease-in-out after:pointer-events-none after:absolute after:inset-0 after:z-[1] after:bg-[color-mix(in_srgb,var(--background-panel)_88%,transparent)] after:opacity-0 after:transition-opacity after:duration-[160ms] after:delay-[70ms] motion-reduce:transition-none motion-reduce:after:transition-none [&>*]:transition-[opacity,filter] [&>*]:duration-[160ms] [&>*]:delay-[70ms] [&>*]:ease-in-out motion-reduce:[&>*]:transition-none\",\n isNarrowLayout\n ? \"border-b border-[var(--border-1)]\"\n : \"border-r border-[var(--border-1)]\",\n isCollapsed &&\n \"pointer-events-none border-r-transparent after:opacity-100 after:delay-0 [&>*]:opacity-0 [&>*]:blur-[1px] [&>*]:delay-0 motion-reduce:[&>*]:blur-none\"\n )}\n inert={isCollapsed ? true : undefined}\n >\n <IssueManagerSidebarHeader\n copy={copy}\n issueSearchQuery={controller.nodeState.issueSearchQuery}\n onCreateIssue={() => controller.setIssueEditorMode(\"create\")}\n onIssueSearchQueryChange={controller.setIssueSearchQuery}\n />\n\n <IssueManagerSidebarStatusTabs\n copy={copy}\n issueStatusFilter={controller.nodeState.issueStatusFilter}\n statusCounts={statusCounts}\n onIssueStatusFilterChange={controller.setIssueStatusFilter}\n />\n\n <div aria-hidden=\"true\" className=\"h-2.5 flex-none\" />\n\n <div\n className={cn(\n \"relative flex min-h-0 flex-col\",\n isNarrowLayout ? \"flex-none\" : \"flex-1\"\n )}\n >\n {presentation.kind !== \"none\" ? (\n <div className=\"flex h-full min-h-0 items-center justify-center px-4 pt-1.5 pb-4\">\n <IssueManagerSidebarStandalonePane\n body={\n presentation.kind === \"empty\" ? presentation.body : undefined\n }\n isNarrowLayout={false}\n kind={presentation.kind}\n retryLabel={\n presentation.kind === \"error\"\n ? presentation.retryLabel\n : undefined\n }\n title={presentation.title}\n onRetry={() => controller.refreshAll()}\n />\n </div>\n ) : (\n <IssueManagerSidebarBody\n copy={copy}\n isNarrowLayout={isNarrowLayout}\n selectedIssueId={controller.nodeState.selectedIssueId}\n sidebarViewState={sidebarViewState}\n onRetry={() => controller.refreshAll()}\n onSelectIssue={controller.selectIssue}\n />\n )}\n </div>\n </aside>\n );\n}\n","import { type JSX } from \"react\";\nimport {\n Badge,\n Button,\n CloseIcon,\n FileCreateIcon,\n Input,\n ScrollArea,\n UnderlineTabs,\n cn\n} from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerNodeState\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\nimport {\n formatIssueManagerDate,\n resolveIssueManagerStatusLabel\n} from \"../../../services/controllerModel.ts\";\nimport {\n issueManagerStatusFilters,\n type IssueManagerSidebarViewState\n} from \"./IssueManagerShellState.ts\";\nimport { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\n\nexport function IssueManagerSidebarHeader({\n copy,\n issueSearchQuery,\n onCreateIssue,\n onIssueSearchQueryChange\n}: {\n copy: IssueManagerI18nRuntime;\n issueSearchQuery: string;\n onCreateIssue: () => void;\n onIssueSearchQueryChange: (value: string) => void;\n}): JSX.Element {\n return (\n <div className=\"px-4 py-4\">\n <div className=\"flex items-center gap-2.5\">\n <IssueManagerSearchField\n clearLabel={copy.t(\"actions.clearSearch\")}\n placeholder={copy.t(\"labels.searchIssues\")}\n value={issueSearchQuery}\n onChange={onIssueSearchQueryChange}\n />\n <Button\n className=\"gap-2 px-3\"\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onCreateIssue}\n >\n <FileCreateIcon size={16} />\n {copy.t(\"actions.createIssue\")}\n </Button>\n </div>\n </div>\n );\n}\n\nexport function IssueManagerSidebarStatusTabs({\n copy,\n issueStatusFilter,\n statusCounts,\n onIssueStatusFilterChange\n}: {\n copy: IssueManagerI18nRuntime;\n issueStatusFilter: IssueManagerNodeState[\"issueStatusFilter\"];\n statusCounts: Record<(typeof issueManagerStatusFilters)[number], number>;\n onIssueStatusFilterChange: (\n value: IssueManagerNodeState[\"issueStatusFilter\"]\n ) => void;\n}): JSX.Element {\n return (\n <UnderlineTabs\n ariaLabel={copy.t(\"labels.status\")}\n className=\"px-4\"\n scrollLeftLabel={copy.t(\"labels.scrollStatusTabsLeft\")}\n scrollRightLabel={copy.t(\"labels.scrollStatusTabsRight\")}\n tabs={issueManagerStatusFilters.map((status) => ({\n count: statusCounts[status] ?? 0,\n label:\n status === \"all\"\n ? copy.t(\"labels.allStatus\")\n : resolveIssueManagerStatusLabel(copy, status),\n value: status\n }))}\n value={issueStatusFilter}\n onValueChange={onIssueStatusFilterChange}\n />\n );\n}\n\nexport function IssueManagerSidebarBody({\n copy,\n isNarrowLayout,\n selectedIssueId,\n sidebarViewState,\n onRetry,\n onSelectIssue\n}: {\n copy: IssueManagerI18nRuntime;\n isNarrowLayout: boolean;\n selectedIssueId: string | null;\n sidebarViewState: IssueManagerSidebarViewState;\n onRetry: () => void;\n onSelectIssue: (issueId: string | null) => void;\n}): JSX.Element {\n return (\n <ScrollArea\n className={cn(\"min-h-0\", isNarrowLayout ? \"flex-none\" : \"h-full flex-1\")}\n >\n <div\n className={cn(\n \"flex min-h-full flex-col gap-2.5 px-4 pt-1.5 pb-4\",\n isNarrowLayout ? \"min-h-0\" : \"h-full\"\n )}\n >\n {sidebarViewState.kind === \"loading\" ? (\n <IssueManagerSidebarLoadingState isNarrowLayout={isNarrowLayout} />\n ) : sidebarViewState.kind === \"error\" ? (\n <IssueManagerSidebarErrorState\n isNarrowLayout={isNarrowLayout}\n retryLabel={sidebarViewState.retryLabel}\n title={sidebarViewState.title}\n onRetry={onRetry}\n />\n ) : sidebarViewState.kind === \"empty\" ? (\n <IssueManagerSidebarEmptyState\n body={sidebarViewState.body}\n isNarrowLayout={isNarrowLayout}\n title={sidebarViewState.title}\n />\n ) : (\n <IssueManagerSidebarIssueList\n copy={copy}\n isNarrowLayout={isNarrowLayout}\n issues={sidebarViewState.issues}\n selectedIssueId={selectedIssueId}\n onSelectIssue={onSelectIssue}\n />\n )}\n </div>\n </ScrollArea>\n );\n}\n\nexport function IssueManagerSidebarStandalonePane({\n body,\n isNarrowLayout,\n kind,\n retryLabel,\n title,\n onRetry\n}: {\n body?: string;\n isNarrowLayout: boolean;\n kind: \"empty\" | \"error\";\n retryLabel?: string;\n title: string;\n onRetry: () => void;\n}): JSX.Element {\n if (kind === \"error\" && retryLabel) {\n return (\n <IssueManagerSidebarErrorState\n isNarrowLayout={isNarrowLayout}\n retryLabel={retryLabel}\n title={title}\n onRetry={onRetry}\n />\n );\n }\n\n return (\n <IssueManagerSidebarEmptyState\n body={body ?? \"\"}\n isNarrowLayout={isNarrowLayout}\n title={title}\n />\n );\n}\n\nfunction IssueManagerSearchField({\n clearLabel,\n onChange,\n placeholder,\n value\n}: {\n clearLabel: string;\n onChange: (value: string) => void;\n placeholder: string;\n value: string;\n}): JSX.Element {\n return (\n <div\n className=\"relative min-w-0 flex-1\"\n data-has-value={value ? \"true\" : \"false\"}\n >\n <Input\n aria-label={placeholder}\n className={cn(\n \"box-border h-8 min-h-8 rounded-md border-0 bg-[var(--transparency-block)] px-3 text-sm font-normal leading-normal text-[var(--text-primary)] shadow-none outline-none ring-0 transition-colors placeholder:text-[var(--text-placeholder)] hover:bg-[var(--transparency-hover)] focus:border-0 focus:bg-[var(--transparency-hover)] focus-visible:border-0 focus-visible:bg-[var(--transparency-hover)] focus-visible:ring-0 focus-visible:ring-offset-0 disabled:bg-[var(--transparency-block)] disabled:text-[var(--text-disabled)] disabled:opacity-100\",\n \"[&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none\",\n value ? \"pr-9\" : \"pr-3\"\n )}\n placeholder={placeholder}\n type=\"search\"\n value={value}\n onChange={(event) => onChange(event.target.value)}\n />\n {value ? (\n <button\n aria-label={clearLabel}\n className=\"absolute top-1/2 right-1 inline-flex size-6 -translate-y-1/2 items-center justify-center rounded-md border-0 bg-transparent p-0 text-[var(--text-tertiary)] transition-colors hover:bg-[var(--transparency-hover)] hover:text-[var(--text-secondary)] focus-visible:bg-[var(--transparency-hover)] focus-visible:text-[var(--text-secondary)] focus-visible:outline-none\"\n type=\"button\"\n onClick={() => onChange(\"\")}\n onMouseDown={(event) => event.preventDefault()}\n >\n <CloseIcon className=\"size-3.5\" />\n </button>\n ) : null}\n </div>\n );\n}\n\nfunction IssueManagerSidebarIssueList({\n copy,\n isNarrowLayout,\n issues,\n selectedIssueId,\n onSelectIssue\n}: {\n copy: IssueManagerI18nRuntime;\n isNarrowLayout: boolean;\n issues: readonly IssueManagerIssueSummary[];\n selectedIssueId: string | null;\n onSelectIssue: (issueId: string | null) => void;\n}): JSX.Element {\n return (\n <div\n className={cn(\n \"flex gap-2.5\",\n isNarrowLayout\n ? \"flex-row flex-nowrap items-start overflow-x-auto overflow-y-hidden [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n : \"flex-col\"\n )}\n >\n {issues.map((issue) => (\n <IssueManagerSidebarItem\n copy={copy}\n isNarrowLayout={isNarrowLayout}\n issue={issue}\n key={issue.issueId}\n selected={selectedIssueId === issue.issueId}\n onSelect={onSelectIssue}\n />\n ))}\n </div>\n );\n}\n\nfunction IssueManagerSidebarItem({\n copy,\n isNarrowLayout,\n issue,\n onSelect,\n selected\n}: {\n copy: IssueManagerI18nRuntime;\n isNarrowLayout: boolean;\n issue: IssueManagerIssueSummary;\n onSelect: (issueId: string | null) => void;\n selected: boolean;\n}): JSX.Element {\n return (\n <button\n className={cn(\n \"relative rounded-lg border px-3.5 py-3.5 text-left transition-colors\",\n isNarrowLayout\n ? \"h-24 max-h-24 min-h-24 w-[clamp(220px,58vw,320px)] flex-[0_0_clamp(220px,58vw,320px)] overflow-hidden\"\n : \"w-full\",\n selected\n ? \"border-[var(--border-1)] bg-[var(--background-fronted)]\"\n : \"border-[var(--border-1)] bg-transparent hover:bg-[var(--transparency-block)]\"\n )}\n type=\"button\"\n onClick={() => onSelect(issue.issueId)}\n >\n <Badge\n className=\"absolute top-3.5 right-3.5\"\n variant={issueManagerStatusBadgeVariant(issue.status)}\n >\n {resolveIssueManagerStatusLabel(copy, issue.status)}\n </Badge>\n <div className=\"min-w-0 space-y-2\">\n <p className=\"pr-28 text-[12px] leading-[1.55] text-[var(--text-secondary)]\">\n {formatIssueManagerDate(issue.updatedAtUnix ?? issue.createdAtUnix)}\n </p>\n <p className=\"line-clamp-4 text-[14px] font-medium leading-[1.35rem] text-[var(--text-primary)]\">\n {issue.title}\n </p>\n </div>\n <div className=\"mt-2 text-[12px] leading-[1.55] text-[var(--text-secondary)]\">\n {copy.t(\"labels.taskCount\", { count: issue.taskCount ?? 0 })}\n </div>\n </button>\n );\n}\n\nfunction IssueManagerSidebarLoadingState({\n isNarrowLayout\n}: {\n isNarrowLayout: boolean;\n}): JSX.Element {\n return (\n <div\n aria-hidden=\"true\"\n className={cn(\n \"gap-2.5\",\n isNarrowLayout ? \"flex flex-row flex-nowrap overflow-x-hidden\" : \"grid\"\n )}\n >\n {Array.from({ length: 4 }, (_, index) => (\n <div\n className={cn(\n \"rounded-lg bg-transparent px-3.5 py-3.5\",\n isNarrowLayout &&\n \"h-24 max-h-24 min-h-24 w-[clamp(220px,58vw,320px)] flex-[0_0_clamp(220px,58vw,320px)]\"\n )}\n key={index}\n >\n <div className=\"h-3.5 w-20 rounded-full bg-[var(--transparency-block)]\" />\n <div className=\"mt-3 h-4 w-4/5 rounded-full bg-[var(--transparency-block)]\" />\n <div className=\"mt-4 h-3.5 w-24 rounded-full bg-[var(--transparency-block)]\" />\n </div>\n ))}\n </div>\n );\n}\n\nfunction IssueManagerSidebarEmptyState({\n body,\n isNarrowLayout,\n title,\n tone = \"default\"\n}: {\n body: string;\n isNarrowLayout: boolean;\n title: string;\n tone?: \"default\" | \"destructive\";\n}): JSX.Element {\n return (\n <div\n className={cn(\n \"relative flex flex-1 flex-col items-center justify-center self-stretch overflow-hidden p-0 text-center\",\n isNarrowLayout\n ? \"h-24 max-h-24 min-h-24 w-full flex-[0_0_100%]\"\n : \"min-h-full\"\n )}\n >\n <p\n className={cn(\n \"text-sm font-semibold leading-5 text-[var(--text-primary)]\",\n tone === \"destructive\"\n ? \"text-[var(--state-danger)]\"\n : \"text-[var(--text-primary)]\"\n )}\n >\n {title}\n </p>\n <p className=\"mt-1.5 max-w-sm text-sm leading-5 text-[var(--text-secondary)]\">\n {body}\n </p>\n </div>\n );\n}\n\nfunction IssueManagerSidebarErrorState({\n isNarrowLayout,\n retryLabel,\n title,\n onRetry\n}: {\n isNarrowLayout: boolean;\n retryLabel: string;\n title: string;\n onRetry: () => void;\n}): JSX.Element {\n return (\n <div\n className={cn(\n \"relative flex flex-1 flex-col items-center justify-center self-stretch overflow-hidden px-4 py-6 text-center\",\n isNarrowLayout\n ? \"h-24 max-h-24 min-h-24 w-full flex-[0_0_100%]\"\n : \"min-h-full\"\n )}\n >\n <p className=\"text-sm font-semibold leading-5 text-[var(--state-danger)]\">\n {title}\n </p>\n <Button\n className=\"mt-3\"\n size=\"sm\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onRetry}\n >\n {retryLabel}\n </Button>\n </div>\n );\n}\n","import type {\n IssueManagerIssueSummary,\n IssueManagerStatusCounts\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\nimport type { AsyncCollectionState } from \"../../../services/controllerTypes.ts\";\nimport type { IssueManagerEditorMode } from \"../../../services/controllerModel.ts\";\n\nexport const issueManagerStatusFilters = [\n \"all\",\n \"not_started\",\n \"running\",\n \"pending_acceptance\",\n \"completed\",\n \"failed\",\n \"canceled\"\n] as const;\n\nexport type IssueManagerSidebarViewState =\n | {\n kind: \"loading\";\n }\n | {\n kind: \"error\";\n retryLabel: string;\n title: string;\n }\n | {\n body: string;\n kind: \"empty\";\n title: string;\n }\n | {\n issues: readonly IssueManagerIssueSummary[];\n kind: \"list\";\n };\n\nexport function resolveIssueManagerSidebarViewState(input: {\n copy: IssueManagerI18nRuntime;\n issues: AsyncCollectionState<IssueManagerIssueSummary[]>;\n}): IssueManagerSidebarViewState {\n if (\n input.issues.isLoading &&\n input.issues.value.length === 0 &&\n input.issues.hasResolved !== true\n ) {\n return {\n kind: \"loading\"\n };\n }\n\n if (input.issues.error) {\n return {\n kind: \"error\",\n retryLabel: input.copy.t(\"actions.refresh\"),\n title: input.copy.t(\"messages.issueRefreshFailed\")\n };\n }\n\n if (input.issues.value.length === 0) {\n return {\n body: input.copy.t(\"messages.noIssuesForFilterBody\"),\n kind: \"empty\",\n title: input.copy.t(\"messages.noIssuesForFilterTitle\")\n };\n }\n\n return {\n issues: input.issues.value,\n kind: \"list\"\n };\n}\n\nexport function buildIssueManagerStatusCounts(\n issues: readonly IssueManagerIssueSummary[]\n): Record<(typeof issueManagerStatusFilters)[number], number> {\n const counts: Record<(typeof issueManagerStatusFilters)[number], number> = {\n all: issues.length,\n canceled: 0,\n completed: 0,\n failed: 0,\n not_started: 0,\n pending_acceptance: 0,\n running: 0\n };\n\n for (const issue of issues) {\n if (issue.status in counts) {\n counts[issue.status as keyof typeof counts] += 1;\n }\n }\n\n return counts;\n}\n\nexport function resolveIssueManagerStatusCounts(\n input: AsyncCollectionState<IssueManagerIssueSummary[]>\n): Record<(typeof issueManagerStatusFilters)[number], number> {\n return input.statusCounts\n ? mapIssueManagerStatusCounts(input.statusCounts)\n : buildIssueManagerStatusCounts(input.value);\n}\n\nfunction mapIssueManagerStatusCounts(\n counts: IssueManagerStatusCounts\n): Record<(typeof issueManagerStatusFilters)[number], number> {\n return {\n all: counts.all,\n canceled: counts.canceled,\n completed: counts.completed,\n failed: counts.failed,\n not_started: counts.notStarted,\n pending_acceptance: counts.pendingAcceptance,\n running: counts.running\n };\n}\n\nexport interface IssueManagerShellContentViewState {\n isIssueEditing: boolean;\n isTaskCreating: boolean;\n isTaskDrawerOpen: boolean;\n showBottomBar: boolean;\n}\n\nexport function resolveIssueManagerShellContentViewState(input: {\n issueEditorMode: IssueManagerEditorMode;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTaskPresent: boolean;\n taskEditorMode: IssueManagerEditorMode;\n}): IssueManagerShellContentViewState {\n const isIssueEditing = input.issueEditorMode !== \"read\";\n const isTaskCreating = !isIssueEditing && input.taskEditorMode === \"create\";\n const isTaskDrawerOpen =\n !isIssueEditing &&\n !isTaskCreating &&\n (input.taskEditorMode === \"edit\" || input.selectedTaskPresent);\n\n return {\n isIssueEditing,\n isTaskCreating,\n isTaskDrawerOpen,\n showBottomBar:\n input.selectedIssue !== null &&\n input.issueEditorMode === \"read\" &&\n input.taskEditorMode !== \"create\"\n };\n}\n","import type { IssueManagerSidebarViewState } from \"./IssueManagerShellState.ts\";\n\nexport type IssueManagerSidebarPresentationState =\n | {\n body: string;\n kind: \"empty\";\n title: string;\n }\n | {\n kind: \"error\";\n retryLabel: string;\n title: string;\n }\n | {\n kind: \"none\";\n };\n\nexport function resolveIssueManagerSidebarPresentationState(input: {\n showStandaloneState: boolean;\n sidebarViewState: IssueManagerSidebarViewState;\n}): IssueManagerSidebarPresentationState {\n const { showStandaloneState, sidebarViewState } = input;\n\n if (!showStandaloneState) {\n return { kind: \"none\" };\n }\n\n if (sidebarViewState.kind === \"error\") {\n return {\n kind: \"error\",\n retryLabel: sidebarViewState.retryLabel,\n title: sidebarViewState.title\n };\n }\n\n if (sidebarViewState.kind === \"empty\") {\n return {\n body: sidebarViewState.body,\n kind: \"empty\",\n title: sidebarViewState.title\n };\n }\n\n return { kind: \"none\" };\n}\n","import type { JSX } from \"react\";\nimport { Button } from \"@nextop-os/ui-system\";\nimport type { IssueManagerIssueSummary } from \"../../../contracts/index.ts\";\nimport { IssueManagerRichTextTextarea } from \"../content/IssueManagerRichTextTextarea.tsx\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport { IssueManagerDraftTitleInput } from \"./IssueManagerDraftTitleInput.tsx\";\nimport {\n issueManagerEditorFooterFadeInClassName,\n issueManagerEditorRiseInClassName,\n issueManagerEditorRiseInDelay0ClassName,\n issueManagerEditorRiseInDelay1ClassName,\n issueManagerEditorRiseInDelay2ClassName\n} from \"./IssueManagerEditorMotion.ts\";\n\nexport function IssueManagerTaskComposerPane({\n controller,\n onCancel,\n selectedIssue\n}: {\n controller: IssueManagerController;\n onCancel: () => void;\n selectedIssue: IssueManagerIssueSummary | null;\n}): JSX.Element {\n const copy = controller.copy;\n const isTaskTitleMissing = controller.taskDraft.title.trim().length === 0;\n\n return (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden\">\n <div className=\"flex min-h-0 flex-1 flex-col gap-[14px] overflow-y-auto px-7 py-8\">\n <div className=\"flex w-full min-w-0 flex-col gap-3\">\n <div\n className={`${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`}\n >\n <h2 className=\"m-0 text-[17px] font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {copy.t(\"actions.addSubtask\")}\n </h2>\n </div>\n <div className=\"flex w-full min-w-0 flex-col gap-6\">\n <label\n className={`flex w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`}\n >\n <span className=\"leading-5\">{copy.t(\"labels.title\")}</span>\n <IssueManagerDraftTitleInput\n placeholder={copy.t(\"composer.subtaskTitlePlaceholder\")}\n value={controller.taskDraft.title}\n onChange={controller.setTaskTitle}\n />\n </label>\n <div\n className={`flex min-h-0 w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`}\n >\n <span className=\"leading-5\">\n {copy.t(\"labels.requirementDescription\")}\n </span>\n <IssueManagerRichTextTextarea\n controller={controller}\n surface=\"task\"\n textareaClassName=\"min-h-[180px] resize-none\"\n placeholder={copy.t(\"composer.subtaskContentPlaceholder\")}\n value={controller.taskDraft.content}\n onChange={controller.setTaskContent}\n />\n </div>\n </div>\n </div>\n </div>\n\n <div\n className={`shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`}\n >\n <div className=\"flex items-center justify-end gap-3\">\n <Button\n size=\"default\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onCancel}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n disabled={!selectedIssue || isTaskTitleMissing}\n size=\"default\"\n type=\"button\"\n onClick={() => void controller.saveTask()}\n >\n {copy.t(\"actions.saveSubtask\")}\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import type { JSX } from \"react\";\nimport { ScrollArea, cn } from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport {\n IssueManagerTaskDrawerBody,\n IssueManagerTaskDrawerFooter,\n IssueManagerTaskDrawerHeader\n} from \"./IssueManagerTaskDrawerSections.tsx\";\nimport { resolveIssueManagerTaskDrawerViewState } from \"./IssueManagerTaskDrawerState.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\n\nexport function IssueManagerTaskDrawer({\n controller,\n isClosing,\n selectedIssue,\n selectedTask,\n onClose\n}: {\n controller: IssueManagerController;\n isClosing: boolean;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n onClose: () => void;\n}): JSX.Element {\n const view = resolveIssueManagerTaskDrawerViewState({\n controller,\n selectedTask\n });\n const taskContent = selectedTask?.content ?? \"\";\n\n return (\n <div\n className={cn(\n \"absolute inset-0 z-20 flex justify-end overscroll-contain bg-[var(--backdrop)] backdrop-blur-[1px] motion-reduce:animate-none\",\n isClosing\n ? \"motion-safe:animate-out motion-safe:fade-out-0 motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.4,0,0.2,1)]\"\n : \"motion-safe:animate-in motion-safe:fade-in-0 motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.4,0,0.2,1)]\"\n )}\n onClick={onClose}\n onTouchMove={(event) => {\n event.preventDefault();\n }}\n onWheel={(event) => {\n event.preventDefault();\n }}\n >\n <aside\n className={cn(\n \"flex h-full w-[min(360px,92cqw)] flex-col overscroll-contain border-l border-border-1 bg-background-panel text-[var(--text-primary)] shadow-[-20px_0_60px_var(--shadow-elevated)] @min-[960px]/issue-manager-content:w-[480px] motion-reduce:animate-none\",\n isClosing\n ? \"motion-safe:animate-out motion-safe:slide-out-to-right-full motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.4,0,0.2,1)]\"\n : \"motion-safe:animate-in motion-safe:slide-in-from-right-full motion-safe:duration-[220ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)]\"\n )}\n onClick={(event) => event.stopPropagation()}\n onTouchMove={(event) => event.stopPropagation()}\n onWheel={(event) => event.stopPropagation()}\n >\n {view.bodyKind === \"edit\" ? null : (\n <IssueManagerTaskDrawerHeader\n controller={controller}\n selectedTask={selectedTask}\n view={view}\n />\n )}\n\n <ScrollArea className=\"min-h-0 flex-1 [&_[data-slot=scroll-area-viewport]]:overscroll-contain\">\n <div\n className={cn(\n \"flex flex-col\",\n view.bodyKind === \"edit\"\n ? \"gap-[14px] px-6 py-8\"\n : \"gap-9 px-6 py-7\"\n )}\n >\n <IssueManagerTaskDrawerBody\n controller={controller}\n taskContent={taskContent}\n view={view}\n />\n </div>\n </ScrollArea>\n\n <IssueManagerTaskDrawerFooter\n controller={controller}\n selectedIssue={selectedIssue}\n selectedTask={selectedTask}\n view={view}\n />\n </aside>\n </div>\n );\n}\n","import { useState, type JSX } from \"react\";\nimport { Badge, Button, ConfirmationDialog } from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerStatusLabel\n} from \"../../../services/controllerModel.ts\";\nimport { IssueManagerDescriptionSection } from \"../content/IssueManagerDescriptionSection.tsx\";\nimport {\n IssueManagerDetailTextSection,\n IssueManagerOutputSection\n} from \"../issue/IssueManagerIssueSections.tsx\";\nimport { IssueManagerTaskDrawerLoadingState } from \"../panel/IssueManagerPanelSurface.tsx\";\nimport { resolveTaskCreatorLabel } from \"../panel/IssueManagerPanelText.ts\";\nimport { IssueManagerRichTextTextarea } from \"../content/IssueManagerRichTextTextarea.tsx\";\nimport {\n IssueManagerExecutionDirectoryTrigger,\n IssueManagerRunActionTrigger\n} from \"../task/IssueManagerRunSections.tsx\";\nimport { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\nimport { IssueManagerDraftTitleInput } from \"./IssueManagerDraftTitleInput.tsx\";\nimport {\n canIssueManagerSaveTask,\n type IssueManagerTaskDrawerViewState\n} from \"./IssueManagerTaskDrawerState.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport {\n issueManagerEditorFooterFadeInClassName,\n issueManagerEditorRiseInClassName,\n issueManagerEditorRiseInDelay0ClassName,\n issueManagerEditorRiseInDelay1ClassName,\n issueManagerEditorRiseInDelay2ClassName\n} from \"./IssueManagerEditorMotion.ts\";\n\nexport function IssueManagerTaskDrawerHeader({\n controller,\n selectedTask,\n view\n}: {\n controller: IssueManagerController;\n selectedTask: IssueManagerTaskSummary | null;\n view: Pick<\n IssueManagerTaskDrawerViewState,\n \"showTaskActions\" | \"showTaskMetadata\" | \"title\"\n >;\n}): JSX.Element {\n const copy = controller.copy;\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [deleteBusy, setDeleteBusy] = useState(false);\n\n return (\n <>\n <div className=\"grid gap-3 px-6 py-7\">\n <div className=\"flex items-center justify-between gap-6\">\n {view.showTaskMetadata && selectedTask ? (\n <h3 className=\"line-clamp-2 min-w-0 flex-1 text-base font-semibold leading-6 text-[var(--text-primary)]\">\n {view.title}\n </h3>\n ) : (\n <h3 className=\"line-clamp-2 min-w-0 flex-1 text-[17px] font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {view.title}\n </h3>\n )}\n <div className=\"flex shrink-0 items-center gap-2\">\n {view.showTaskActions && selectedTask ? (\n <>\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => controller.setTaskEditorMode(\"edit\")}\n >\n {copy.t(\"actions.edit\")}\n </Button>\n <Button\n className=\"text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => setDeleteDialogOpen(true)}\n >\n {copy.t(\"actions.delete\")}\n </Button>\n </>\n ) : null}\n </div>\n </div>\n {view.showTaskMetadata && selectedTask ? (\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-2 text-[12px] font-normal leading-[1.3] text-[var(--text-secondary)]\">\n <Badge\n variant={issueManagerStatusBadgeVariant(selectedTask.status)}\n >\n {resolveIssueManagerStatusLabel(copy, selectedTask.status)}\n </Badge>\n <span\n aria-hidden=\"true\"\n className=\"h-4 w-px shrink-0 bg-[var(--line-2)]\"\n />\n <span className=\"text-[12px] font-normal leading-[1.3]\">\n {copy.t(\"labels.creator\")} {resolveTaskCreatorLabel(selectedTask)}\n </span>\n <span\n aria-hidden=\"true\"\n className=\"h-4 w-px shrink-0 bg-[var(--line-2)]\"\n />\n <span className=\"text-[12px] font-normal leading-[1.3]\">\n {copy.t(\"labels.createdAt\")}{\" \"}\n {formatIssueManagerTimestamp(selectedTask.createdAtUnix) || \"-\"}\n </span>\n </div>\n ) : null}\n </div>\n {selectedTask ? (\n <ConfirmationDialog\n cancelLabel={copy.t(\"actions.cancel\")}\n confirmBusy={deleteBusy}\n confirmLabel={copy.t(\"actions.delete\")}\n description={selectedTask.title}\n open={deleteDialogOpen}\n title={copy.t(\"confirmations.deleteTask\")}\n tone=\"destructive\"\n onConfirm={() => {\n setDeleteBusy(true);\n void controller\n .deleteTask({ skipConfirmation: true })\n .finally(() => {\n setDeleteBusy(false);\n setDeleteDialogOpen(false);\n });\n }}\n onOpenChange={setDeleteDialogOpen}\n />\n ) : null}\n </>\n );\n}\n\nexport function IssueManagerTaskDrawerLoadingBody(): JSX.Element {\n return <IssueManagerTaskDrawerLoadingState />;\n}\n\nexport function IssueManagerTaskDrawerBody({\n controller,\n taskContent,\n view\n}: {\n controller: IssueManagerController;\n taskContent: string;\n view: Pick<\n IssueManagerTaskDrawerViewState,\n \"bodyKind\" | \"isCreate\" | \"title\"\n >;\n}): JSX.Element {\n if (view.bodyKind === \"loading\") {\n return <IssueManagerTaskDrawerLoadingBody />;\n }\n\n if (view.bodyKind === \"edit\") {\n return (\n <IssueManagerTaskDrawerEditBody\n controller={controller}\n title={view.title}\n />\n );\n }\n\n return (\n <IssueManagerTaskDrawerReadBody\n controller={controller}\n taskContent={taskContent}\n />\n );\n}\n\nexport function IssueManagerTaskDrawerEditBody({\n controller,\n title\n}: {\n controller: IssueManagerController;\n title: string;\n}): JSX.Element {\n const copy = controller.copy;\n\n return (\n <div className=\"flex w-full min-w-0 flex-col gap-3\">\n <div\n className={`${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`}\n >\n <h2 className=\"m-0 text-[17px] font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {title}\n </h2>\n </div>\n <div className=\"flex w-full min-w-0 flex-col gap-6\">\n <label\n className={`flex w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`}\n >\n <span className=\"leading-5\">{copy.t(\"labels.title\")}</span>\n <IssueManagerDraftTitleInput\n placeholder={copy.t(\"composer.taskTitlePlaceholder\")}\n value={controller.taskDraft.title}\n onChange={controller.setTaskTitle}\n />\n </label>\n <div\n className={`flex min-h-0 w-full min-w-0 flex-col gap-2 text-sm font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`}\n >\n <span className=\"leading-5\">{copy.t(\"labels.content\")}</span>\n <IssueManagerRichTextTextarea\n controller={controller}\n surface=\"task\"\n textareaClassName=\"min-h-[180px] resize-none\"\n placeholder={copy.t(\"composer.taskContentPlaceholder\")}\n value={controller.taskDraft.content}\n onChange={controller.setTaskContent}\n />\n </div>\n </div>\n </div>\n );\n}\n\nexport function IssueManagerTaskDrawerReadBody({\n controller,\n taskContent\n}: {\n controller: IssueManagerController;\n taskContent: string;\n}): JSX.Element {\n const copy = controller.copy;\n const latestRun =\n controller.taskDetail.value?.latestRun ??\n controller.taskDetail.value?.recentRuns[0] ??\n null;\n const latestOutputs = controller.taskDetail.value?.latestOutputs ?? [];\n\n return (\n <>\n <IssueManagerDescriptionSection\n content={taskContent}\n emptyLabel={copy.t(\"messages.taskContentEmpty\")}\n label={copy.t(\"labels.description\")}\n onOpen={controller.openReference}\n variant=\"plain\"\n />\n <IssueManagerDetailTextSection\n body={\n latestRun\n ? latestRun.summary?.trim() ||\n resolveIssueManagerStatusLabel(copy, latestRun.status)\n : copy.t(\"messages.noExecutionStatus\")\n }\n isPlaceholder={!latestRun}\n label={copy.t(\"labels.latestRunStatus\")}\n meta={\n latestRun\n ? formatIssueManagerTimestamp(\n latestRun.updatedAtUnix ?? latestRun.createdAtUnix\n ) || undefined\n : undefined\n }\n tone={latestRun?.status === \"failed\" ? \"destructive\" : \"muted\"}\n />\n <IssueManagerOutputSection\n copy={copy}\n outputs={latestOutputs}\n onOpen={controller.openReference}\n />\n </>\n );\n}\n\nexport function IssueManagerTaskDrawerFooter({\n controller,\n selectedIssue,\n selectedTask,\n view\n}: {\n controller: IssueManagerController;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n view: Pick<\n IssueManagerTaskDrawerViewState,\n | \"isCreate\"\n | \"isEdit\"\n | \"showEditFooter\"\n | \"showReadFooter\"\n | \"isTaskTitleMissing\"\n >;\n}): JSX.Element | null {\n const copy = controller.copy;\n\n if (view.showReadFooter && selectedTask) {\n return (\n <div className=\"border-t border-[var(--border-1)] bg-transparent px-6 py-4 backdrop-blur\">\n <div className=\"flex items-center justify-end gap-3\">\n <IssueManagerExecutionDirectoryTrigger\n className=\"mr-auto\"\n controller={controller}\n disabled={controller.isRunningTask}\n />\n <IssueManagerRunActionTrigger\n controller={controller}\n triggerVariant=\"button\"\n />\n {controller.canInviteCollaborators ? (\n <Button\n disabled={!selectedIssue}\n size=\"dialog\"\n type=\"button\"\n onClick={() => {\n void controller.shareSelection();\n }}\n >\n {copy.t(\"actions.inviteCollaborator\")}\n </Button>\n ) : null}\n </div>\n </div>\n );\n }\n\n if (view.showEditFooter) {\n return (\n <div\n className={`border-t border-border-1 px-6 py-4 ${issueManagerEditorFooterFadeInClassName}`}\n >\n <div className=\"flex items-center justify-end gap-3\">\n <Button\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => controller.setTaskEditorMode(\"read\")}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n disabled={\n canIssueManagerSaveTask({\n selectedIssue,\n view\n }) === false\n }\n size=\"dialog\"\n type=\"button\"\n onClick={() => void controller.saveTask()}\n >\n {copy.t(\"actions.saveTask\")}\n </Button>\n </div>\n </div>\n );\n }\n\n return null;\n}\n","import type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\n\nexport interface IssueManagerTaskDrawerViewState {\n bodyKind: \"edit\" | \"loading\" | \"read\";\n isCreate: boolean;\n isEdit: boolean;\n isRead: boolean;\n isTaskTitleMissing: boolean;\n showEditFooter: boolean;\n showReadFooter: boolean;\n showTaskActions: boolean;\n showTaskMetadata: boolean;\n title: string;\n}\n\nexport function resolveIssueManagerTaskDrawerViewState(input: {\n controller: Pick<\n IssueManagerController,\n \"copy\" | \"taskDetail\" | \"taskDraft\" | \"taskEditorMode\"\n >;\n selectedTask: IssueManagerTaskSummary | null;\n}): IssueManagerTaskDrawerViewState {\n const { controller, selectedTask } = input;\n const isCreate = controller.taskEditorMode === \"create\";\n const isEdit = controller.taskEditorMode === \"edit\";\n const isRead = !isCreate && !isEdit;\n const showTaskMetadata = isRead && selectedTask !== null;\n const bodyKind =\n controller.taskDetail.isLoading &&\n isCreate === false &&\n controller.taskDetail.value === null\n ? \"loading\"\n : isCreate || isEdit\n ? \"edit\"\n : \"read\";\n\n return {\n bodyKind,\n isCreate,\n isEdit,\n isRead,\n isTaskTitleMissing: controller.taskDraft.title.trim().length === 0,\n showEditFooter: isCreate || isEdit,\n showReadFooter: showTaskMetadata,\n showTaskActions: showTaskMetadata,\n showTaskMetadata,\n title:\n isCreate || isEdit\n ? isCreate\n ? controller.copy.t(\"actions.createTask\")\n : controller.copy.t(\"actions.editTask\")\n : selectedTask?.title || controller.copy.t(\"labels.taskDetails\")\n };\n}\n\nexport function resolveIssueManagerTaskRefs(input: {\n controller: Pick<IssueManagerController, \"taskDetail\">;\n}) {\n return (\n input.controller.taskDetail.value?.contextRefs.filter(\n (ref) => ref.parentKind === \"task\"\n ) ?? []\n );\n}\n\nexport function canIssueManagerSaveTask(input: {\n selectedIssue: IssueManagerIssueSummary | null;\n view: Pick<IssueManagerTaskDrawerViewState, \"isTaskTitleMissing\">;\n}): boolean {\n return (\n input.selectedIssue !== null && input.view.isTaskTitleMissing === false\n );\n}\n","import {\n useEffect,\n useEffectEvent,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent,\n type PointerEvent\n} from \"react\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport {\n clampIssueManagerSidebarWidth,\n issueManagerSidebarDefaultWidth,\n issueManagerSidebarMaxWidth,\n issueManagerSidebarMinWidth,\n shouldAutoCollapseIssueManagerSidebar\n} from \"../../../core/index.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport {\n resolveIssueManagerShellContentViewState,\n resolveIssueManagerStatusCounts,\n resolveIssueManagerSidebarViewState\n} from \"./IssueManagerShellState.ts\";\n\ninterface SidebarResizeState {\n maxWidth: number;\n pointerId: number;\n startClientX: number;\n startWidth: number;\n}\n\nexport interface UseIssueManagerShellViewInput {\n controller: IssueManagerController;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n}\n\nexport function useIssueManagerShellView({\n controller,\n selectedIssue,\n selectedTask\n}: UseIssueManagerShellViewInput) {\n const layoutRef = useRef<HTMLDivElement | null>(null);\n const resizeRef = useRef<SidebarResizeState | null>(null);\n const [sidebarWidth, setSidebarWidth] = useState(\n issueManagerSidebarDefaultWidth\n );\n const [isNarrowLayout, setIsNarrowLayout] = useState(false);\n const dismissNotification = useEffectEvent(() => {\n controller.dismissNotification();\n });\n const floatingNotice = controller.floatingNotice;\n\n useEffect(() => {\n const publishLayout = () => {\n const width = layoutRef.current?.getBoundingClientRect().width ?? 0;\n if (!width) {\n return;\n }\n setSidebarWidth((current) =>\n clampIssueManagerSidebarWidth(current, width)\n );\n setIsNarrowLayout(shouldAutoCollapseIssueManagerSidebar(width));\n };\n\n const layout = layoutRef.current;\n const observer =\n layout && typeof ResizeObserver !== \"undefined\"\n ? new ResizeObserver(publishLayout)\n : null;\n publishLayout();\n if (observer && layout) {\n observer.observe(layout);\n }\n window.addEventListener(\"resize\", publishLayout);\n return () => {\n observer?.disconnect();\n window.removeEventListener(\"resize\", publishLayout);\n };\n }, []);\n\n useEffect(() => {\n if (!floatingNotice) {\n return undefined;\n }\n\n const timeout = window.setTimeout(() => {\n dismissNotification();\n }, floatingNotice.durationMs);\n\n return () => {\n window.clearTimeout(timeout);\n };\n }, [dismissNotification, floatingNotice]);\n\n const content = resolveIssueManagerShellContentViewState({\n issueEditorMode: controller.issueEditorMode,\n selectedIssue,\n selectedTaskPresent: selectedTask !== null,\n taskEditorMode: controller.taskEditorMode\n });\n const sidebarViewState = resolveIssueManagerSidebarViewState({\n copy: controller.copy,\n issues: controller.issues\n });\n const statusCounts = resolveIssueManagerStatusCounts(controller.issues);\n const isSidebarAutoCollapsed = isNarrowLayout;\n const isSidebarCollapsed =\n controller.nodeState.taskListCollapsed === true || isSidebarAutoCollapsed;\n\n return {\n content,\n floatingNotice,\n isNarrowLayout,\n layoutRef,\n layoutStyle: {\n gridTemplateColumns: isSidebarCollapsed\n ? \"0 minmax(0, 1fr)\"\n : \"var(--issue-manager-sidebar-width) minmax(0, 1fr)\",\n \"--issue-manager-sidebar-width\": `${sidebarWidth}px`\n } as CSSProperties,\n resizeHandle: {\n ariaValueMax: issueManagerSidebarMaxWidth,\n ariaValueMin: issueManagerSidebarMinWidth,\n ariaValueNow: sidebarWidth,\n onKeyDown: (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key !== \"ArrowLeft\" && event.key !== \"ArrowRight\") {\n return;\n }\n const delta = event.key === \"ArrowRight\" ? 16 : -16;\n const layoutWidth =\n layoutRef.current?.getBoundingClientRect().width ?? 0;\n if (!layoutWidth) {\n return;\n }\n event.preventDefault();\n setSidebarWidth((current) =>\n clampIssueManagerSidebarWidth(current + delta, layoutWidth)\n );\n },\n onPointerCancel: (event: PointerEvent<HTMLDivElement>) => {\n resizeRef.current = null;\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n },\n onPointerDown: (event: PointerEvent<HTMLDivElement>) => {\n if (event.button !== 0) {\n return;\n }\n const layoutWidth =\n layoutRef.current?.getBoundingClientRect().width ?? 0;\n if (!layoutWidth) {\n return;\n }\n const startWidth = clampIssueManagerSidebarWidth(\n sidebarWidth,\n layoutWidth\n );\n resizeRef.current = {\n maxWidth: clampIssueManagerSidebarWidth(\n issueManagerSidebarMaxWidth,\n layoutWidth\n ),\n pointerId: event.pointerId,\n startClientX: event.clientX,\n startWidth\n };\n setSidebarWidth(startWidth);\n event.currentTarget.setPointerCapture?.(event.pointerId);\n },\n onPointerMove: (event: PointerEvent<HTMLDivElement>) => {\n const state = resizeRef.current;\n if (!state || state.pointerId !== event.pointerId) {\n return;\n }\n setSidebarWidth(\n Math.min(\n Math.max(\n state.startWidth + event.clientX - state.startClientX,\n issueManagerSidebarMinWidth\n ),\n state.maxWidth\n )\n );\n },\n onPointerUp: (event: PointerEvent<HTMLDivElement>) => {\n resizeRef.current = null;\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n }\n },\n sidebar: {\n isAutoCollapsed: isSidebarAutoCollapsed,\n isCollapsed: isSidebarCollapsed,\n showStandaloneState:\n !isNarrowLayout &&\n (sidebarViewState.kind === \"empty\" ||\n sidebarViewState.kind === \"error\"),\n statusCounts,\n viewState: sidebarViewState\n }\n };\n}\n\nexport { shouldAutoCollapseIssueManagerSidebar } from \"../../../core/index.ts\";\n","import { useEffect, useState, type FormEvent, type JSX } from \"react\";\nimport {\n BareIconButton,\n Button,\n CheckIcon,\n ChevronDownIcon,\n ConfirmationDialog,\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DeleteIcon,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n EditIcon,\n FileCreateIcon,\n Input,\n MoreHorizontalIcon,\n PinFilledIcon,\n PinIcon,\n Textarea,\n cn\n} from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerCreateTopicInput,\n IssueManagerTopic,\n IssueManagerUpdateTopicInput\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\n\nconst topicSelectorMenuItemClassName =\n \"min-h-7 overflow-hidden rounded-md py-1 text-[13px] font-normal leading-[1.2] text-[var(--text-primary)]\";\nconst topicSelectorRowItemClassName =\n \"min-w-0 flex-1 bg-transparent pr-2 pl-1 hover:bg-transparent focus:bg-transparent data-[highlighted]:bg-transparent\";\n\ntype IssueManagerTopicDialogMode =\n | {\n kind: \"create\";\n topic: null;\n }\n | {\n kind: \"edit\";\n topic: IssueManagerTopic;\n };\n\nexport function IssueManagerTopicSelector({\n activeTopicId,\n className,\n copy,\n onCreateTopic,\n onDeleteTopic,\n onSelectTopic,\n onUpdateTopic,\n topics\n}: {\n activeTopicId: string | null;\n className?: string;\n copy: IssueManagerI18nRuntime;\n onCreateTopic: (\n input: Omit<IssueManagerCreateTopicInput, \"workspaceId\">\n ) => void;\n onDeleteTopic: (topicId: string) => void;\n onSelectTopic: (topicId: string) => void;\n onUpdateTopic: (\n input: Omit<IssueManagerUpdateTopicInput, \"workspaceId\">\n ) => void;\n topics: readonly IssueManagerTopic[];\n}): JSX.Element {\n const [dialogMode, setDialogMode] =\n useState<IssueManagerTopicDialogMode | null>(null);\n const [deleteTopic, setDeleteTopic] = useState<IssueManagerTopic | null>(\n null\n );\n const [menuOpen, setMenuOpen] = useState(false);\n const activeTopic = topics.find((topic) => topic.topicId === activeTopicId);\n\n const openTopicDialog = (mode: IssueManagerTopicDialogMode) => {\n setMenuOpen(false);\n setDialogMode(mode);\n };\n\n return (\n <>\n <DropdownMenu open={menuOpen} onOpenChange={setMenuOpen}>\n <DropdownMenuTrigger asChild>\n <Button\n aria-label={copy.t(\"labels.topic\")}\n className={cn(\n \"max-w-[220px] gap-1 rounded-md border-0 bg-transparent text-sm font-normal shadow-none hover:bg-transparent focus:bg-transparent focus-visible:border-0 focus-visible:bg-transparent focus-visible:ring-0 active:bg-transparent aria-expanded:bg-transparent [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n >\n <span className=\"min-w-0 truncate\">\n {activeTopic?.title ?? copy.t(\"labels.topic\")}\n </span>\n <ChevronDownIcon className=\"size-4 shrink-0 text-[var(--text-tertiary)] transition-transform duration-200\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-[200px] px-1\">\n {topics.map((topic) => {\n const isPinned = (topic.pinnedAtUnix ?? 0) > 0;\n const isActive = topic.topicId === activeTopicId;\n const pinLabel = isPinned\n ? copy.t(\"actions.unpinTopic\")\n : copy.t(\"actions.pinTopic\");\n\n return (\n <div key={topic.topicId} className=\"min-w-0\">\n <div className=\"group/topic-row relative flex min-h-7 min-w-0 items-center gap-0.5 rounded-md pr-0.5 pl-0.5 hover:bg-[var(--transparency-block)] focus-within:bg-[var(--transparency-block)]\">\n <DropdownMenuItem\n className={cn(\n topicSelectorMenuItemClassName,\n topicSelectorRowItemClassName\n )}\n onSelect={() => {\n setMenuOpen(false);\n onSelectTopic(topic.topicId);\n }}\n >\n <span className=\"flex size-4 shrink-0 items-center justify-center text-[var(--accent)]\">\n {isActive ? <CheckIcon className=\"size-4\" /> : null}\n </span>\n <span className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span className=\"truncate\">{topic.title}</span>\n {topic.isDefault ? (\n <span className=\"shrink-0 text-[11px] text-[var(--text-tertiary)]\">\n {copy.t(\"labels.topicDefault\")}\n </span>\n ) : null}\n </span>\n </DropdownMenuItem>\n <BareIconButton\n aria-label={pinLabel}\n className={cn(\n \"pointer-events-none shrink-0 opacity-0 text-[var(--text-tertiary)] transition-opacity duration-150 group-hover/topic-row:pointer-events-auto group-hover/topic-row:opacity-100 group-focus-within/topic-row:pointer-events-auto group-focus-within/topic-row:opacity-100 hover:text-[var(--text-primary)]\",\n isPinned && \"text-[var(--text-primary)]\"\n )}\n size=\"md\"\n title={pinLabel}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n onUpdateTopic({\n pinned: !isPinned,\n topicId: topic.topicId\n });\n }}\n >\n {isPinned ? (\n <PinFilledIcon className=\"size-3.5\" />\n ) : (\n <PinIcon className=\"size-3.5\" />\n )}\n </BareIconButton>\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <BareIconButton\n aria-label={copy.t(\"actions.moreActions\")}\n className=\"pointer-events-none shrink-0 opacity-0 text-[var(--text-tertiary)] transition-opacity duration-150 group-hover/topic-row:pointer-events-auto group-hover/topic-row:opacity-100 group-focus-within/topic-row:pointer-events-auto group-focus-within/topic-row:opacity-100 hover:text-[var(--text-primary)]\"\n size=\"md\"\n title={copy.t(\"actions.moreActions\")}\n onClick={(event) => {\n event.stopPropagation();\n }}\n >\n <MoreHorizontalIcon className=\"size-3.5\" />\n </BareIconButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"w-32\"\n sideOffset={6}\n >\n <DropdownMenuItem\n onSelect={(event) => {\n event.preventDefault();\n openTopicDialog({\n kind: \"edit\",\n topic\n });\n }}\n >\n <EditIcon className=\"size-3.5\" />\n <span>{copy.t(\"actions.editTopic\")}</span>\n </DropdownMenuItem>\n {!topic.isDefault ? (\n <DropdownMenuItem\n variant=\"destructive\"\n onSelect={(event) => {\n event.preventDefault();\n setMenuOpen(false);\n setDeleteTopic(topic);\n }}\n >\n <DeleteIcon className=\"size-3.5\" />\n <span>{copy.t(\"actions.delete\")}</span>\n </DropdownMenuItem>\n ) : null}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n );\n })}\n {topics.length === 0 ? (\n <div className=\"px-3 py-2 text-xs leading-4 text-[var(--text-tertiary)]\">\n {copy.t(\"messages.topicListEmpty\")}\n </div>\n ) : null}\n <DropdownMenuSeparator />\n <DropdownMenuItem\n className={cn(\n topicSelectorMenuItemClassName,\n \"justify-start gap-2 px-2 text-left\"\n )}\n onSelect={(event) => {\n event.preventDefault();\n openTopicDialog({\n kind: \"create\",\n topic: null\n });\n }}\n >\n <FileCreateIcon className=\"size-3.5\" />\n <span className=\"truncate\">{copy.t(\"actions.createTopic\")}</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n <IssueManagerTopicDialog\n copy={copy}\n mode={dialogMode}\n open={dialogMode !== null}\n onCreateTopic={onCreateTopic}\n onOpenChange={(open) => {\n if (!open) {\n setDialogMode(null);\n }\n }}\n onUpdateTopic={onUpdateTopic}\n />\n <ConfirmationDialog\n cancelLabel={copy.t(\"actions.cancel\")}\n confirmLabel={copy.t(\"actions.delete\")}\n description={deleteTopic?.title}\n open={deleteTopic !== null}\n title={copy.t(\"confirmations.deleteTopic\")}\n tone=\"destructive\"\n onConfirm={() => {\n const topicId = deleteTopic?.topicId;\n setDeleteTopic(null);\n if (topicId) {\n onDeleteTopic(topicId);\n }\n }}\n onOpenChange={(open) => {\n if (!open) {\n setDeleteTopic(null);\n }\n }}\n />\n </>\n );\n}\n\nfunction IssueManagerTopicDialog({\n copy,\n mode,\n onCreateTopic,\n onOpenChange,\n onUpdateTopic,\n open\n}: {\n copy: IssueManagerI18nRuntime;\n mode: IssueManagerTopicDialogMode | null;\n onCreateTopic: (\n input: Omit<IssueManagerCreateTopicInput, \"workspaceId\">\n ) => void;\n onOpenChange: (open: boolean) => void;\n onUpdateTopic: (\n input: Omit<IssueManagerUpdateTopicInput, \"workspaceId\">\n ) => void;\n open: boolean;\n}): JSX.Element {\n const [summaryDraft, setSummaryDraft] = useState(\"\");\n const [titleDraft, setTitleDraft] = useState(\"\");\n\n useEffect(() => {\n setTitleDraft(mode?.topic?.title ?? \"\");\n setSummaryDraft(mode?.topic?.summary ?? \"\");\n }, [mode]);\n\n const title = titleDraft.trim();\n const dialogTitle =\n mode?.kind === \"edit\"\n ? copy.t(\"labels.editTopicDialogTitle\")\n : copy.t(\"labels.createTopicDialogTitle\");\n\n const submit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!mode || !title) {\n return;\n }\n if (mode.kind === \"edit\") {\n onUpdateTopic({\n summary: summaryDraft,\n title,\n topicId: mode.topic.topicId\n });\n } else {\n onCreateTopic({\n summary: summaryDraft,\n title\n });\n }\n onOpenChange(false);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-[480px]\">\n <DialogHeader>\n <DialogTitle>{dialogTitle}</DialogTitle>\n </DialogHeader>\n <form className=\"grid gap-4\" onSubmit={submit}>\n <label className=\"grid gap-2\">\n <span className=\"text-xs font-medium leading-4 text-[var(--text-secondary)]\">\n {copy.t(\"labels.topicTitle\")}\n </span>\n <Input\n autoFocus\n placeholder={copy.t(\"labels.topicTitle\")}\n value={titleDraft}\n onChange={(event) => setTitleDraft(event.target.value)}\n />\n </label>\n <label className=\"grid gap-2\">\n <span className=\"text-xs font-medium leading-4 text-[var(--text-secondary)]\">\n {copy.t(\"labels.topicSummary\")}\n </span>\n <Textarea\n className=\"min-h-24 resize-none\"\n placeholder={copy.t(\"labels.topicSummary\")}\n value={summaryDraft}\n onChange={(event) => setSummaryDraft(event.target.value)}\n />\n </label>\n <DialogFooter className=\"pt-2\">\n <Button\n size=\"dialog\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => onOpenChange(false)}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button disabled={!title} size=\"dialog\" type=\"submit\">\n {copy.t(\"actions.saveTopic\")}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":"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","names":["useEffect","useMemo","useState","useEffect","useEffect","useMemo","useState","useEffect","useEffect","Button","cn","useEffect","useState","Button","FileCreateIcon","cn","useState","Badge","Button","ScrollArea","Button","FileCreateIcon","jsx","jsxs","Button","FileCreateIcon","useEffect","useState","cn","jsx","jsxs","useState","useEffect","cn","useEffect","useMemo","useRef","useState","Button","cn","jsx","jsxs","useEffect","useRef","useState","jsx","useRef","useState","useEffect","jsx","jsxs","useState","ScrollArea","Button","Badge","Button","cn","useEffect","useState","Badge","Button","LinkIcon","cn","jsx","jsxs","Button","cn","useState","useEffect","LinkIcon","jsx","jsxs","cn","Button","jsx","cn","Badge","Button","FileCreateIcon","Input","ScrollArea","cn","jsx","jsxs","Button","FileCreateIcon","ScrollArea","cn","Input","Badge","jsx","jsxs","cn","Button","jsx","jsxs","Button","ScrollArea","cn","useState","Badge","Button","ConfirmationDialog","jsx","jsxs","useState","Button","Badge","ConfirmationDialog","jsx","jsxs","cn","ScrollArea","useEffect","useEffectEvent","useRef","useState","useRef","useState","useEffectEvent","useEffect","jsx","jsxs","useState","useEffect","cn","Button","FileCreateIcon","useEffect","useState","Button","CheckIcon","ChevronDownIcon","ConfirmationDialog","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuSeparator","DropdownMenuTrigger","FileCreateIcon","Input","cn","Fragment","jsx","jsxs","jsx","jsxs","useEffect","cn","Button"]}
|