@nextop-os/workspace-issue-manager 0.0.22 → 0.0.24
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/README.md +4 -0
- package/dist/assets/workspace-dock-task.d.ts +3 -0
- package/dist/{chunk-XI6VLBSW.js → chunk-DMC3JMM2.js} +39 -34
- package/dist/chunk-DMC3JMM2.js.map +1 -0
- package/dist/{chunk-ZWDF5XA7.js → chunk-ZQVG7YMT.js} +2 -2
- package/dist/chunk-ZQVG7YMT.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/services/index.js +1 -1
- package/dist/ui/index.d.ts +3 -2
- package/dist/ui/index.js +2 -2
- package/dist/workbench/index.d.ts +4 -2
- package/dist/workbench/index.js +15 -16
- package/dist/workbench/index.js.map +1 -1
- package/package.json +10 -6
- package/dist/chunk-XI6VLBSW.js.map +0 -1
- package/dist/chunk-ZWDF5XA7.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/internal/reference/useIssueManagerReferencePickerView.ts","../src/ui/IssueManagerNode.tsx","../src/ui/internal/reference/IssueManagerReferencePicker.tsx","../src/ui/internal/reference/IssueManagerReferencePickerSections.tsx","../src/ui/internal/reference/IssueManagerReferencePickerTree.tsx","../src/ui/internal/shell/IssueManagerShell.tsx","../src/ui/internal/shell/IssueManagerPanels.tsx","../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/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/content/IssueManagerContextSection.tsx","../src/ui/internal/shell/IssueManagerTaskDrawerState.ts","../src/ui/internal/shell/useIssueManagerShellView.ts"],"sourcesContent":["import { useEffect, useEffectEvent, useState } from \"react\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../../i18n/issueManagerI18n.ts\";\n\ninterface IssueManagerTaskListCollapsedDetail {\n collapsed: boolean;\n nodeId: string;\n}\n\nconst issueManagerTaskListCollapsedEvent =\n \"nextop:issue-manager-task-list-collapsed\";\n\nexport function dispatchIssueManagerTaskListCollapsed(input: {\n collapsed: boolean;\n nodeId: 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 useIssueManagerTaskListCollapsedSync(input: {\n nodeId: string;\n onCollapsedChange: (collapsed: boolean) => void;\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 (detail?.nodeId !== input.nodeId) {\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, onCollapsedChange]);\n}\n\nexport function useIssueManagerNodeHeaderView(input: {\n copy: IssueManagerI18nRuntime;\n isSidebarAutoCollapsed: boolean;\n isSidebarCollapsed: boolean;\n nodeId: string;\n onToggleSidebar: (nextCollapsed: boolean) => void;\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 });\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\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","import type {\n IssueManagerFileReference,\n IssueManagerReferencePrefetchReason,\n IssueManagerReferencePrefetchState,\n IssueManagerReferenceTreeSnapshot\n} from \"../../../../contracts/index.ts\";\n\nexport const issueManagerReferenceDefaultExpandedDepth = 4;\n\nexport interface IssueManagerReferenceDirectoryState {\n displayPath: string;\n entries: IssueManagerFileReference[];\n loaded: boolean;\n loading: boolean;\n prefetchReason?: IssueManagerReferencePrefetchReason | null;\n prefetchState?: IssueManagerReferencePrefetchState | null;\n}\n\nexport function normalizeDirectoryPath(path: string): string {\n if (!path || path === \"/\") {\n return \"/\";\n }\n return path.replace(/\\/+$/, \"\") || \"/\";\n}\n\nexport function collectVisibleTreeEntries(\n entries: readonly IssueManagerFileReference[],\n directoryStateByPath: Record<string, IssueManagerReferenceDirectoryState>,\n expandedFolderPaths: Record<string, boolean>\n): IssueManagerFileReference[] {\n const collected: IssueManagerFileReference[] = [];\n\n for (const entry of entries) {\n collected.push(entry);\n if (entry.kind !== \"folder\") {\n continue;\n }\n const folderKey = normalizeDirectoryPath(entry.path);\n if (!expandedFolderPaths[folderKey]) {\n continue;\n }\n const childEntries = directoryStateByPath[folderKey]?.entries ?? [];\n if (childEntries.length === 0) {\n continue;\n }\n collected.push(\n ...collectVisibleTreeEntries(\n childEntries,\n directoryStateByPath,\n expandedFolderPaths\n )\n );\n }\n\n return collected;\n}\n\nexport function mergeExpandedFolderPaths(\n current: Record<string, boolean>,\n prefetched: Record<string, boolean>\n): Record<string, boolean> {\n return {\n ...prefetched,\n ...current\n };\n}\n\nexport function mergePrefetchedDirectoryState(\n current: Record<string, IssueManagerReferenceDirectoryState>,\n prefetched: Record<string, IssueManagerReferenceDirectoryState>\n): Record<string, IssueManagerReferenceDirectoryState> {\n return {\n ...current,\n ...prefetched\n };\n}\n\nexport function createReferenceDirectoryStateFromSnapshot(\n snapshot: IssueManagerReferenceTreeSnapshot\n): Record<string, IssueManagerReferenceDirectoryState> {\n const stateByPath: Record<string, IssueManagerReferenceDirectoryState> = {};\n addReferenceDirectoryStateFromSnapshot(stateByPath, snapshot.directory);\n return stateByPath;\n}\n\nfunction addReferenceDirectoryStateFromSnapshot(\n stateByPath: Record<string, IssueManagerReferenceDirectoryState>,\n directory: IssueManagerReferenceTreeSnapshot[\"directory\"]\n) {\n const normalizedPath = normalizeDirectoryPath(directory.directoryPath);\n stateByPath[normalizedPath] = {\n displayPath: directory.directoryPath,\n entries: directory.entries.map((entry) => ({\n displayName: entry.displayName,\n kind: entry.kind,\n path: entry.path\n })),\n loaded: true,\n loading: false,\n prefetchReason: directory.prefetchReason,\n prefetchState: directory.prefetchState\n };\n\n for (const entry of directory.entries) {\n if (entry.kind !== \"folder\") {\n continue;\n }\n const folderKey = normalizeDirectoryPath(entry.path);\n if (entry.prefetchedDirectory) {\n addReferenceDirectoryStateFromSnapshot(\n stateByPath,\n entry.prefetchedDirectory\n );\n continue;\n }\n if (entry.prefetchState) {\n stateByPath[folderKey] = {\n displayPath: entry.path,\n entries: [],\n loaded: false,\n loading: false,\n prefetchReason: entry.prefetchReason,\n prefetchState: entry.prefetchState\n };\n }\n }\n}\n\nexport async function prefetchReferenceTree(input: {\n listDirectory: (path: string) => Promise<{\n displayPath: string;\n entries: IssueManagerFileReference[];\n normalizedPath: string;\n } | null>;\n maxDepth: number;\n path: string;\n depth?: number;\n}): Promise<{\n directoryStateByPath: Record<string, IssueManagerReferenceDirectoryState>;\n expandedFolderPaths: Record<string, boolean>;\n}> {\n const { depth = 1, listDirectory, maxDepth, path } = input;\n const listing = await listDirectory(path);\n if (!listing) {\n return {\n directoryStateByPath: {},\n expandedFolderPaths: {}\n };\n }\n\n const directoryStateByPath: Record<\n string,\n IssueManagerReferenceDirectoryState\n > = {\n [listing.normalizedPath]: {\n displayPath: listing.displayPath,\n entries: listing.entries,\n loaded: true,\n loading: false\n }\n };\n const expandedFolderPaths: Record<string, boolean> = {\n [listing.normalizedPath]: true\n };\n\n if (depth >= maxDepth) {\n return {\n directoryStateByPath,\n expandedFolderPaths\n };\n }\n\n for (const entry of listing.entries) {\n if (entry.kind !== \"folder\") {\n continue;\n }\n try {\n const childTree = await prefetchReferenceTree({\n depth: depth + 1,\n listDirectory,\n maxDepth,\n path: entry.path\n });\n Object.assign(directoryStateByPath, childTree.directoryStateByPath);\n Object.assign(expandedFolderPaths, childTree.expandedFolderPaths);\n } catch {\n // Skip unreadable branches so one protected folder does not blank the whole tree.\n }\n }\n\n return {\n directoryStateByPath,\n expandedFolderPaths\n };\n}\n","import { useMemo } from \"react\";\nimport type { RichTextAtProvider } from \"@nextop-os/ui-rich-text/types\";\nimport type {\n IssueManagerContextRef,\n IssueManagerFileReference,\n IssueManagerIssueDetail,\n IssueManagerIssueSummary,\n IssueManagerNodeState,\n IssueManagerPriority,\n IssueManagerTaskDetail\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 issueManagerProviderOptions,\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 { 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 canInviteCollaborators: boolean;\n canReferenceWorkspaceFiles: boolean;\n canUploadWorkspaceFiles: boolean;\n copy: IssueManagerI18nRuntime;\n createTaskDraft: () => void;\n deleteIssue: () => Promise<void>;\n deleteTask: () => 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 string[];\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 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 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 submitReferenceSelection: (\n refs: IssueManagerFileReference[]\n ) => Promise<void>;\n taskDetail: AsyncCollectionState<IssueManagerTaskDetail | null>;\n taskDraft: TaskDraft;\n taskEditorMode: IssueManagerEditorMode;\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 } = snapshot;\n const {\n canInviteCollaborators,\n canReferenceWorkspaceFiles,\n canUploadWorkspaceFiles\n } = useMemo(\n () => resolveIssueManagerControllerCapabilities(feature),\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\n return {\n ...actions,\n ...bindings,\n canInviteCollaborators,\n canReferenceWorkspaceFiles,\n canUploadWorkspaceFiles,\n copy,\n issueDetail,\n issueDraft,\n issueEditorMode,\n floatingNotice,\n issues,\n isRunningTask,\n nodeState,\n notification,\n providerOptions: issueManagerProviderOptions,\n referenceTarget,\n taskDetail,\n taskDraft,\n taskEditorMode,\n workspaceId\n };\n}\n","import type { IssueManagerFileAdapter } from \"../../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../../core/index.ts\";\n\nexport const issueManagerProviderOptions = [\"codex\"] as const;\n\nexport interface IssueManagerControllerCapabilities {\n canInviteCollaborators: boolean;\n canReferenceWorkspaceFiles: boolean;\n canUploadWorkspaceFiles: boolean;\n}\n\nexport function resolveIssueManagerControllerCapabilities(\n feature: IssueManagerFeature\n): IssueManagerControllerCapabilities {\n return {\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\";\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 || !input.taskDetail) {\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 issueDraft: IssueDraft;\n}): IssueManagerSavePlan<Record<never, never>> {\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\" };\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 IssueManagerIssueDetail,\n IssueManagerRun,\n IssueManagerTaskDetail\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../core/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\n\nexport async function executeIssueManagerRunTask(input: {\n copy: IssueManagerI18nRuntime;\n feature: IssueManagerFeature;\n issue: IssueManagerIssueDetail[\"issue\"];\n onCreatedRun?: (run: IssueManagerRun) => Promise<void> | void;\n provider: string;\n task: IssueManagerTaskDetail[\"task\"];\n workspaceId: string;\n}): Promise<{ createdRun: IssueManagerRun; status: string }> {\n const currentUser = await Promise.resolve(\n input.feature.identityAdapter.currentUser()\n );\n const createdRun = await input.feature.backend.createRun({\n agentProvider: input.provider,\n agentUserId: currentUser?.userId ?? undefined,\n issueId: input.issue.issueId,\n taskId: input.task.taskId,\n workspaceId: input.workspaceId\n });\n await input.onCreatedRun?.(createdRun);\n\n try {\n const result = await input.feature.agentRunner.runTask({\n issue: input.issue,\n provider: input.provider,\n run: createdRun,\n task: input.task,\n workspaceId: input.workspaceId\n });\n await input.feature.backend.completeRun({\n errorMessage: result.errorMessage,\n issueId: input.issue.issueId,\n outputs: result.outputs ?? [],\n runId: createdRun.runId,\n status: result.status,\n summary: result.summary,\n taskId: input.task.taskId,\n workspaceId: input.workspaceId\n });\n\n return {\n createdRun,\n status: result.status\n };\n } catch (error) {\n try {\n await input.feature.backend.completeRun({\n errorMessage: String(error instanceof Error ? error.message : error),\n issueId: input.issue.issueId,\n outputs: [],\n runId: createdRun.runId,\n status: \"failed\",\n summary: input.copy.t(\"run.failedSummaryFallback\"),\n taskId: input.task.taskId,\n workspaceId: input.workspaceId\n });\n } catch {\n // Keep the original failure visible without masking it.\n }\n throw error;\n }\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 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 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 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\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() {\n const selectedIssueId = nodeState.selectedIssueId;\n if (\n !selectedIssueId ||\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() {\n const selectedIssueId = nodeState.selectedIssueId;\n const selectedTaskId = nodeState.selectedTaskId;\n if (\n !selectedIssueId ||\n !selectedTaskId ||\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 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 || !currentTaskDetail) {\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 copy,\n feature,\n issue: currentIssueDetail.issue,\n onCreatedRun: refreshDetails,\n provider: runPlan.provider,\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 saveIssue() {\n const savePlan = createIssueManagerSaveIssuePlan({\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 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 persistIssueManagerIssueDraftTitle\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 controllerSession.updateNodeState((current) =>\n persistIssueManagerIssueDraftTitle(current, issueEditorMode, 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 persistIssueManagerTaskDraftTitle\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 controllerSession.updateNodeState((current) =>\n persistIssueManagerTaskDraftTitle(current, taskEditorMode, 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 = 3200;\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 });\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","import { useEffect, useEffectEvent, useMemo, useState } from \"react\";\nimport type {\n IssueManagerFileAdapter,\n IssueManagerFileReference\n} from \"../../../../contracts/index.ts\";\nimport { uniqueIssueManagerFileReferences } from \"../../../../services/controllerModel.ts\";\nimport {\n collectVisibleTreeEntries,\n createReferenceDirectoryStateFromSnapshot,\n normalizeDirectoryPath,\n type IssueManagerReferenceDirectoryState\n} from \"./IssueManagerReferencePickerState.ts\";\n\nexport interface UseIssueManagerReferencePickerViewInput {\n fileAdapter?: IssueManagerFileAdapter;\n onClose: () => void;\n onConfirm: (refs: IssueManagerFileReference[]) => void;\n open: boolean;\n workspaceId: string;\n}\n\nconst defaultDirectoryPath = \"/\";\n\nexport function useIssueManagerReferencePickerView({\n fileAdapter,\n onClose,\n onConfirm,\n open,\n workspaceId\n}: UseIssueManagerReferencePickerViewInput) {\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [browseRootPath, setBrowseRootPath] = useState<string | null>(null);\n const [searchEntries, setSearchEntries] = useState<\n IssueManagerFileReference[]\n >([]);\n const [directoryStateByPath, setDirectoryStateByPath] = useState<\n Record<string, IssueManagerReferenceDirectoryState>\n >({});\n const [expandedFolderPaths, setExpandedFolderPaths] = useState<\n Record<string, boolean>\n >({});\n const [focusedPath, setFocusedPath] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [selectedRefs, setSelectedRefs] = useState<IssueManagerFileReference[]>(\n []\n );\n\n const supportsSearch = hasFileAdapterMethod(fileAdapter, \"searchReferences\");\n const supportsTreeSnapshot = hasFileAdapterMethod(\n fileAdapter,\n \"loadReferenceTree\"\n );\n const mode: \"browse\" | \"search\" =\n searchQuery.trim().length > 0 && supportsSearch ? \"search\" : \"browse\";\n const browseDirectoryLoaded =\n browseRootPath !== null &&\n directoryStateByPath[normalizeDirectoryPath(browseRootPath)]?.loaded ===\n true;\n\n const finalizeRequestedReferences = useEffectEvent(\n (refs: IssueManagerFileReference[]) => {\n onConfirm(uniqueIssueManagerFileReferences(refs));\n onClose();\n }\n );\n\n const readDirectoryListing = async (path?: string | null) => {\n if (!fileAdapter?.listDirectory) {\n return null;\n }\n const listing = await fileAdapter.listDirectory({\n path: path ?? undefined,\n workspaceId\n });\n return {\n displayPath:\n listing.directoryPath ||\n listing.rootPath ||\n path ||\n defaultDirectoryPath,\n entries: uniqueIssueManagerFileReferences(listing.entries),\n normalizedPath: normalizeDirectoryPath(\n listing.directoryPath ||\n listing.rootPath ||\n path ||\n defaultDirectoryPath\n )\n };\n };\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n setSearchQuery(\"\");\n setBrowseRootPath(null);\n setSearchEntries([]);\n setDirectoryStateByPath({});\n setExpandedFolderPaths({});\n setFocusedPath(null);\n setSelectedRefs([]);\n }, [open]);\n\n useEffect(() => {\n if (!open || !fileAdapter) {\n return;\n }\n\n let canceled = false;\n const load = async () => {\n setIsLoading(true);\n try {\n if (mode === \"search\" && fileAdapter.searchReferences) {\n const refs = await fileAdapter.searchReferences({\n query: searchQuery.trim(),\n workspaceId\n });\n if (!canceled) {\n setSearchEntries(uniqueIssueManagerFileReferences(refs));\n }\n return;\n }\n\n if (\n mode === \"browse\" &&\n (fileAdapter.listDirectory || fileAdapter.loadReferenceTree)\n ) {\n if (browseDirectoryLoaded && browseRootPath) {\n return;\n }\n if (supportsTreeSnapshot && fileAdapter.loadReferenceTree) {\n const snapshot = await fileAdapter.loadReferenceTree({\n path: browseRootPath ?? undefined,\n prefetchBudgetMs: 500,\n prefetchDepth: 4,\n workspaceId\n });\n if (!canceled) {\n setBrowseRootPath(\n normalizeDirectoryPath(snapshot.directory.directoryPath)\n );\n setDirectoryStateByPath(\n createReferenceDirectoryStateFromSnapshot(snapshot)\n );\n }\n return;\n }\n const listing = await readDirectoryListing(browseRootPath);\n if (!listing) {\n return;\n }\n if (!canceled) {\n setBrowseRootPath(listing.normalizedPath);\n setDirectoryStateByPath((current) => ({\n ...current,\n [listing.normalizedPath]: {\n displayPath: listing.displayPath,\n entries: listing.entries,\n loaded: true,\n loading: false\n }\n }));\n }\n return;\n }\n\n if (fileAdapter.requestReferences) {\n const refs = await fileAdapter.requestReferences({ workspaceId });\n if (!canceled) {\n finalizeRequestedReferences(refs);\n }\n return;\n }\n\n if (!canceled) {\n setSearchEntries([]);\n }\n } finally {\n if (!canceled) {\n setIsLoading(false);\n }\n }\n };\n\n void load();\n return () => {\n canceled = true;\n };\n }, [\n browseDirectoryLoaded,\n browseRootPath,\n fileAdapter,\n finalizeRequestedReferences,\n mode,\n open,\n searchQuery,\n supportsTreeSnapshot,\n workspaceId\n ]);\n\n const browseRootEntries = useMemo(\n () =>\n browseRootPath\n ? (directoryStateByPath[normalizeDirectoryPath(browseRootPath)]\n ?.entries ?? [])\n : [],\n [browseRootPath, directoryStateByPath]\n );\n\n const visibleEntries = useMemo(\n () =>\n mode === \"search\"\n ? searchEntries\n : collectVisibleTreeEntries(\n browseRootEntries,\n directoryStateByPath,\n expandedFolderPaths\n ),\n [\n browseRootEntries,\n directoryStateByPath,\n expandedFolderPaths,\n mode,\n searchEntries\n ]\n );\n\n useEffect(() => {\n if (!open) {\n return;\n }\n setFocusedPath((current) => {\n if (current && visibleEntries.some((entry) => entry.path === current)) {\n return current;\n }\n return visibleEntries[0]?.path ?? null;\n });\n }, [open, visibleEntries]);\n\n const focusedEntry =\n visibleEntries.find((entry) => entry.path === focusedPath) ??\n selectedRefs.find((entry) => entry.path === focusedPath) ??\n null;\n\n const toggleRef = (ref: IssueManagerFileReference) => {\n setSelectedRefs((current) => {\n const existing = current.some((item) => item.path === ref.path);\n return existing\n ? current.filter((item) => item.path !== ref.path)\n : uniqueIssueManagerFileReferences([...current, ref]);\n });\n };\n\n const loadFolderChildren = async (folder: IssueManagerFileReference) => {\n const folderKey = normalizeDirectoryPath(folder.path);\n if (directoryStateByPath[folderKey]?.loaded) {\n return;\n }\n setDirectoryStateByPath((current) => ({\n ...current,\n [folderKey]: {\n displayPath: folder.path,\n entries: current[folderKey]?.entries ?? [],\n loaded: current[folderKey]?.loaded ?? false,\n loading: true\n }\n }));\n\n try {\n const listing = await readDirectoryListing(folderKey);\n if (!listing) {\n return;\n }\n setDirectoryStateByPath((current) => ({\n ...current,\n [folderKey]: {\n displayPath: listing.displayPath,\n entries: listing.entries,\n loaded: true,\n loading: false\n }\n }));\n } catch {\n setDirectoryStateByPath((current) => ({\n ...current,\n [folderKey]: {\n displayPath: current[folderKey]?.displayPath ?? folder.path,\n entries: current[folderKey]?.entries ?? [],\n loaded: current[folderKey]?.loaded ?? false,\n loading: false\n }\n }));\n }\n };\n\n const toggleFolder = (entry: IssueManagerFileReference) => {\n const folderKey = normalizeDirectoryPath(entry.path);\n const childState = directoryStateByPath[folderKey];\n const nextExpanded = !(expandedFolderPaths[folderKey] ?? false);\n\n setExpandedFolderPaths((current) => ({\n ...current,\n [folderKey]: nextExpanded\n }));\n if (nextExpanded && !childState?.loaded && !childState?.loading) {\n void loadFolderChildren(entry);\n }\n };\n\n return {\n browseRootEntries,\n directoryStateByPath,\n expandedFolderPaths,\n focusedEntry,\n focusedPath,\n isLoading,\n mode,\n searchQuery,\n selectedRefs,\n visibleEntries,\n setFocusedPath,\n setSearchQuery,\n toggleFolder,\n toggleRef\n };\n}\n\nfunction hasFileAdapterMethod(\n fileAdapter: IssueManagerFileAdapter | undefined,\n methodName:\n | \"listDirectory\"\n | \"loadReferenceTree\"\n | \"requestUpload\"\n | \"searchReferences\"\n): boolean {\n return typeof Reflect.get(fileAdapter ?? {}, methodName) === \"function\";\n}\n","import { type HTMLAttributes, type JSX, type ReactNode } from \"react\";\nimport { Button, PanelIcon, cn } from \"@nextop-os/ui-system\";\nimport type { IssueManagerI18nRuntime } from \"../i18n/issueManagerI18n.ts\";\nimport { IssueManagerReferencePicker } from \"./internal/reference/IssueManagerReferencePicker.tsx\";\nimport { IssueManagerShell } from \"./internal/shell/IssueManagerShell.tsx\";\nimport {\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 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 <IssueManagerReferencePicker\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 copy: IssueManagerI18nRuntime;\n defaultActions?: ReactNode;\n isSidebarAutoCollapsed: boolean;\n isSidebarCollapsed: boolean;\n nodeId: string;\n onToggleSidebar: (nextCollapsed: boolean) => void;\n title?: string;\n}\n\nexport function IssueManagerNodeHeader({\n className,\n copy,\n defaultActions,\n isSidebarAutoCollapsed,\n isSidebarCollapsed,\n nodeId,\n onToggleSidebar,\n title,\n ...headerProps\n}: IssueManagerNodeHeaderProps): JSX.Element {\n const { effectiveCollapsed, toggleLabel, toggleSidebar } =\n useIssueManagerNodeHeaderView({\n copy,\n isSidebarAutoCollapsed,\n isSidebarCollapsed,\n nodeId,\n onToggleSidebar\n });\n\n return (\n <header\n {...headerProps}\n className={cn(\n \"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=\"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=\"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=\"chrome\"\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\n className=\"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 { useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n CloseIcon\n} from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerFileAdapter,\n IssueManagerFileReference\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\nimport { useIssueManagerReferencePickerView } from \"../../react/index.ts\";\nimport {\n IssueManagerReferencePickerFooter,\n IssueManagerReferencePickerPreviewPane\n} from \"./IssueManagerReferencePickerSections.tsx\";\nimport { IssueManagerReferencePickerBrowserPane } from \"./IssueManagerReferencePickerTree.tsx\";\n\ninterface IssueManagerReferencePickerProps {\n copy: IssueManagerI18nRuntime;\n fileAdapter?: IssueManagerFileAdapter;\n onClose: () => void;\n onConfirm: (refs: IssueManagerFileReference[]) => void;\n open: boolean;\n workspaceId: string;\n}\n\nexport function IssueManagerReferencePicker({\n copy,\n fileAdapter,\n onClose,\n onConfirm,\n open,\n workspaceId\n}: IssueManagerReferencePickerProps) {\n const {\n browseRootEntries,\n directoryStateByPath,\n expandedFolderPaths,\n focusedEntry,\n focusedPath,\n isLoading,\n mode,\n searchQuery,\n selectedRefs,\n visibleEntries,\n setFocusedPath,\n setSearchQuery,\n toggleFolder,\n toggleRef\n } = useIssueManagerReferencePickerView({\n fileAdapter,\n onClose,\n onConfirm,\n open,\n workspaceId\n });\n\n const selectedCountLabel = useMemo(\n () =>\n copy.t(\"referencePicker.selectedCount\", { count: selectedRefs.length }),\n [copy, selectedRefs.length]\n );\n\n if (!open) {\n return null;\n }\n\n const dialog = (\n <div\n className=\"fixed inset-0 grid place-items-center bg-black/24 px-3 py-4 backdrop-blur-md sm:px-6 sm:py-8\"\n style={{ zIndex: \"var(--z-panel)\" }}\n onClick={onClose}\n >\n <Card\n aria-modal=\"true\"\n className=\"flex h-[min(88vh,44rem)] w-full max-w-5xl flex-col gap-0 overflow-hidden border-border/70 bg-popover/98 py-0 shadow-[var(--workbench-window-elevation)] sm:h-[min(82vh,44rem)]\"\n role=\"dialog\"\n onClick={(event) => event.stopPropagation()}\n >\n <CardHeader className=\"border-b border-border/70 px-4 py-4 sm:px-6 sm:py-5\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0 space-y-1\">\n <CardTitle>{copy.t(\"referencePicker.title\")}</CardTitle>\n <CardDescription>{selectedCountLabel}</CardDescription>\n </div>\n <Button\n aria-label={copy.t(\"actions.cancel\")}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={onClose}\n >\n <CloseIcon size={16} />\n </Button>\n </div>\n </CardHeader>\n <CardContent className=\"grid min-h-0 flex-1 grid-rows-[minmax(0,1fr)_auto] gap-0 overflow-hidden p-0 lg:grid-cols-[minmax(0,1.15fr)_minmax(20rem,0.85fr)] lg:grid-rows-1\">\n <IssueManagerReferencePickerBrowserPane\n browseRootEntries={browseRootEntries}\n copy={copy}\n directoryStateByPath={directoryStateByPath}\n expandedFolderPaths={expandedFolderPaths}\n focusedPath={focusedPath}\n isLoading={isLoading}\n mode={mode}\n searchQuery={searchQuery}\n selectedRefs={selectedRefs}\n setSearchQuery={setSearchQuery}\n visibleEntries={visibleEntries}\n onFocusPath={setFocusedPath}\n onToggleFolder={toggleFolder}\n onToggleRef={toggleRef}\n />\n <IssueManagerReferencePickerPreviewPane\n copy={copy}\n focusedEntry={focusedEntry}\n mode={mode}\n />\n </CardContent>\n <IssueManagerReferencePickerFooter\n copy={copy}\n onClose={onClose}\n onConfirm={() => onConfirm(selectedRefs)}\n selectedRefs={selectedRefs}\n />\n </Card>\n </div>\n );\n\n if (typeof document === \"undefined\") {\n return dialog;\n }\n return createPortal(dialog, document.body);\n}\n","import type { JSX, ReactNode } from \"react\";\nimport { Badge, Button, DirectoryIcon, FileIcon } from \"@nextop-os/ui-system\";\nimport type { IssueManagerFileReference } from \"../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\nimport { resolveIssueManagerReferenceLabel } from \"./IssueManagerReferencePickerTree.tsx\";\n\nexport function IssueManagerReferencePickerPreviewPane({\n copy,\n focusedEntry,\n mode\n}: {\n copy: IssueManagerI18nRuntime;\n focusedEntry: IssueManagerFileReference | null;\n mode: \"browse\" | \"search\";\n}): JSX.Element {\n return (\n <aside className=\"flex shrink-0 flex-col border-t border-border/70 bg-panel/40 lg:min-h-0 lg:flex-1 lg:border-t-0\">\n <div className=\"flex min-h-0 flex-1 flex-col px-4 py-4 sm:px-5 lg:py-5\">\n {focusedEntry ? (\n <div className=\"flex min-h-0 flex-col gap-4 lg:flex-1 lg:gap-5\">\n <div className=\"flex h-32 min-h-32 items-center justify-center rounded-2xl border border-border/70 bg-background/72 p-5 sm:h-40 sm:min-h-40 lg:h-56 lg:min-h-56 lg:p-6\">\n <div className=\"space-y-4 text-center\">\n <span className=\"mx-auto grid size-14 place-items-center rounded-2xl bg-transparency-block text-muted-foreground\">\n {focusedEntry.kind === \"folder\" ? (\n <DirectoryIcon className=\"size-7\" />\n ) : (\n <FileIcon className=\"size-7\" />\n )}\n </span>\n <p className=\"max-w-[24ch] text-sm leading-5 text-muted-foreground [overflow-wrap:anywhere]\">\n {focusedEntry.kind === \"folder\"\n ? focusedEntry.path\n : resolveIssueManagerReferenceLabel(focusedEntry)}\n </p>\n </div>\n </div>\n <div className=\"space-y-2 lg:space-y-3\">\n <div className=\"space-y-1.5\">\n <p className=\"truncate text-[15px] font-semibold text-foreground\">\n {resolveIssueManagerReferenceLabel(focusedEntry)}\n </p>\n <p className=\"line-clamp-3 text-sm text-muted-foreground [overflow-wrap:anywhere]\">\n {focusedEntry.path}\n </p>\n </div>\n </div>\n </div>\n ) : (\n <IssueManagerReferencePickerFeedback>\n {mode === \"search\"\n ? copy.t(\"referencePicker.emptySearch\")\n : copy.t(\"referencePicker.emptyDirectory\")}\n </IssueManagerReferencePickerFeedback>\n )}\n </div>\n </aside>\n );\n}\n\nexport function IssueManagerReferencePickerFooter({\n copy,\n onClose,\n onConfirm,\n selectedRefs\n}: {\n copy: IssueManagerI18nRuntime;\n onClose: () => void;\n onConfirm: () => void;\n selectedRefs: readonly IssueManagerFileReference[];\n}): JSX.Element {\n return (\n <div className=\"flex flex-col gap-3 border-t border-border/70 px-4 py-4 sm:px-6 lg:flex-row lg:items-center lg:justify-between\">\n <div className=\"flex min-w-0 flex-wrap items-center gap-2 lg:flex-1\">\n <span className=\"text-sm text-muted-foreground\">\n {copy.t(\"referencePicker.selectedCount\", {\n count: selectedRefs.length\n })}\n </span>\n {selectedRefs.slice(0, 2).map((ref) => (\n <Badge\n className=\"max-w-[14rem] border-border/70 bg-background/80 text-foreground\"\n key={ref.path}\n >\n <span className=\"truncate\">\n {resolveIssueManagerReferenceLabel(ref)}\n </span>\n </Badge>\n ))}\n {selectedRefs.length > 2 ? (\n <Badge className=\"border-border/70 bg-background/80 text-muted-foreground\">\n +{selectedRefs.length - 2}\n </Badge>\n ) : null}\n </div>\n <div className=\"flex w-full items-center justify-end gap-2 lg:w-auto lg:shrink-0\">\n <Button type=\"button\" variant=\"outline\" onClick={onClose}>\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n disabled={selectedRefs.length === 0}\n type=\"button\"\n onClick={onConfirm}\n >\n {copy.t(\"referencePicker.confirm\")}\n </Button>\n </div>\n </div>\n );\n}\n\nfunction IssueManagerReferencePickerFeedback({\n children\n}: {\n children: ReactNode;\n}): JSX.Element {\n return (\n <div className=\"grid min-h-[10rem] place-items-center px-4 text-center text-sm text-muted-foreground\">\n {children}\n </div>\n );\n}\n","import type { JSX, ReactNode } from \"react\";\nimport {\n ArrowRightIcon,\n Button,\n CheckIcon,\n DirectoryIcon,\n FileIcon,\n Input,\n LoadingIcon,\n ScrollArea,\n SearchIcon,\n cn\n} from \"@nextop-os/ui-system\";\nimport type { IssueManagerFileReference } from \"../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\nimport {\n normalizeDirectoryPath,\n type IssueManagerReferenceDirectoryState\n} from \"../../react/index.ts\";\n\nconst issueManagerReferenceTreeIndent = 20;\n\nexport function IssueManagerReferencePickerBrowserPane({\n browseRootEntries,\n copy,\n directoryStateByPath,\n expandedFolderPaths,\n focusedPath,\n isLoading,\n mode,\n searchQuery,\n selectedRefs,\n setSearchQuery,\n visibleEntries,\n onFocusPath,\n onToggleFolder,\n onToggleRef\n}: {\n browseRootEntries: readonly IssueManagerFileReference[];\n copy: IssueManagerI18nRuntime;\n directoryStateByPath: Record<string, IssueManagerReferenceDirectoryState>;\n expandedFolderPaths: Record<string, boolean>;\n focusedPath: string | null;\n isLoading: boolean;\n mode: \"browse\" | \"search\";\n searchQuery: string;\n selectedRefs: readonly IssueManagerFileReference[];\n setSearchQuery: (query: string) => void;\n visibleEntries: readonly IssueManagerFileReference[];\n onFocusPath: (path: string) => void;\n onToggleFolder: (entry: IssueManagerFileReference) => void;\n onToggleRef: (entry: IssueManagerFileReference) => void;\n}): JSX.Element {\n return (\n <section className=\"flex min-h-0 flex-col border-b border-border/70 lg:border-r lg:border-b-0\">\n <div className=\"space-y-3 border-b border-border/70 px-4 py-4 sm:px-5\">\n <div className=\"relative\">\n <SearchIcon className=\"pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n className=\"pl-9\"\n placeholder={copy.t(\"referencePicker.searchPlaceholder\")}\n value={searchQuery}\n onChange={(event) => setSearchQuery(event.target.value)}\n />\n </div>\n </div>\n <ScrollArea className=\"min-h-0 flex-1\">\n <div className=\"flex flex-col gap-2 p-3\">\n {isLoading ? (\n <IssueManagerReferencePickerFeedback>\n <LoadingIcon className=\"size-4 animate-spin\" />\n </IssueManagerReferencePickerFeedback>\n ) : visibleEntries.length === 0 ? (\n <IssueManagerReferencePickerFeedback>\n {mode === \"search\"\n ? copy.t(\"referencePicker.emptySearch\")\n : copy.t(\"referencePicker.emptyDirectory\")}\n </IssueManagerReferencePickerFeedback>\n ) : mode === \"browse\" ? (\n <div className=\"space-y-0.5\">\n {browseRootEntries.map((entry) => (\n <IssueManagerReferencePickerTreeEntry\n childDepth={1}\n copy={copy}\n directoryStateByPath={directoryStateByPath}\n entry={entry}\n expandedFolderPaths={expandedFolderPaths}\n focusedPath={focusedPath}\n key={entry.path}\n selectedRefs={selectedRefs}\n onFocusPath={onFocusPath}\n onToggleFolder={onToggleFolder}\n onToggleRef={onToggleRef}\n />\n ))}\n </div>\n ) : (\n visibleEntries.map((entry) => (\n <IssueManagerReferencePickerSearchEntry\n entry={entry}\n focused={focusedPath === entry.path}\n key={entry.path}\n selected={selectedRefs.some((item) => item.path === entry.path)}\n onFocusPath={onFocusPath}\n onToggleRef={onToggleRef}\n />\n ))\n )}\n </div>\n </ScrollArea>\n </section>\n );\n}\n\nfunction IssueManagerReferencePickerTreeEntry({\n childDepth,\n copy,\n directoryStateByPath,\n entry,\n expandedFolderPaths,\n focusedPath,\n selectedRefs,\n onFocusPath,\n onToggleFolder,\n onToggleRef\n}: {\n childDepth: number;\n copy: IssueManagerI18nRuntime;\n directoryStateByPath: Record<string, IssueManagerReferenceDirectoryState>;\n entry: IssueManagerFileReference;\n expandedFolderPaths: Record<string, boolean>;\n focusedPath: string | null;\n selectedRefs: readonly IssueManagerFileReference[];\n onFocusPath: (path: string) => void;\n onToggleFolder: (entry: IssueManagerFileReference) => void;\n onToggleRef: (entry: IssueManagerFileReference) => void;\n}): JSX.Element {\n const selected = selectedRefs.some((item) => item.path === entry.path);\n const focused = focusedPath === entry.path;\n const isFolder = entry.kind === \"folder\";\n const folderKey = normalizeDirectoryPath(entry.path);\n const expanded = expandedFolderPaths[folderKey] ?? false;\n const childState = directoryStateByPath[folderKey];\n const childEntries = childState?.entries ?? [];\n\n return (\n <div>\n <div\n className={cn(\n \"grid grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2 rounded-lg px-2 py-1.5 transition-colors\",\n focused || selected\n ? \"bg-transparency-block\"\n : \"hover:bg-transparency-block/60\"\n )}\n style={{\n paddingLeft: `${(childDepth - 1) * issueManagerReferenceTreeIndent + 8}px`\n }}\n >\n {isFolder ? (\n <button\n aria-label={resolveIssueManagerReferenceLabel(entry)}\n className=\"grid size-5 shrink-0 place-items-center rounded-sm text-muted-foreground hover:bg-background/80\"\n type=\"button\"\n onClick={() => onToggleFolder(entry)}\n >\n <ArrowRightIcon\n className={cn(\n \"size-3.5 transition-transform\",\n expanded && \"rotate-90\"\n )}\n />\n </button>\n ) : (\n <span className=\"block size-5 shrink-0\" />\n )}\n <button\n className=\"flex min-w-0 items-center gap-2 text-left\"\n type=\"button\"\n onClick={() => {\n onFocusPath(entry.path);\n if (entry.kind === \"folder\") {\n onToggleFolder(entry);\n }\n }}\n >\n {isFolder ? (\n <DirectoryIcon className=\"size-4 shrink-0 text-muted-foreground\" />\n ) : (\n <FileIcon className=\"size-4 shrink-0 text-muted-foreground\" />\n )}\n <span className=\"truncate text-sm text-foreground\">\n {resolveIssueManagerReferenceLabel(entry)}\n </span>\n </button>\n <Button\n size=\"xs\"\n type=\"button\"\n variant={selected ? \"secondary\" : \"outline\"}\n onClick={() => {\n onFocusPath(entry.path);\n onToggleRef(entry);\n }}\n >\n {selected ? <CheckIcon size={14} /> : \"+\"}\n </Button>\n </div>\n {isFolder && expanded ? (\n childState?.loading ? (\n <div\n className=\"flex items-center gap-2 px-2 py-2 text-xs text-muted-foreground\"\n style={{\n paddingLeft: `${childDepth * issueManagerReferenceTreeIndent + 12}px`\n }}\n >\n <LoadingIcon className=\"size-3.5 animate-spin\" />\n <span>{copy.t(\"referencePicker.loading\")}</span>\n </div>\n ) : childEntries.length > 0 ? (\n childEntries.map((childEntry) => (\n <IssueManagerReferencePickerTreeEntry\n childDepth={childDepth + 1}\n copy={copy}\n directoryStateByPath={directoryStateByPath}\n entry={childEntry}\n expandedFolderPaths={expandedFolderPaths}\n focusedPath={focusedPath}\n key={childEntry.path}\n selectedRefs={selectedRefs}\n onFocusPath={onFocusPath}\n onToggleFolder={onToggleFolder}\n onToggleRef={onToggleRef}\n />\n ))\n ) : childState?.loaded ? (\n <div\n className=\"px-2 py-2 text-xs text-muted-foreground\"\n style={{\n paddingLeft: `${childDepth * issueManagerReferenceTreeIndent + 12}px`\n }}\n >\n {copy.t(\"referencePicker.emptyDirectory\")}\n </div>\n ) : null\n ) : null}\n </div>\n );\n}\n\nfunction IssueManagerReferencePickerSearchEntry({\n entry,\n focused,\n selected,\n onFocusPath,\n onToggleRef\n}: {\n entry: IssueManagerFileReference;\n focused: boolean;\n selected: boolean;\n onFocusPath: (path: string) => void;\n onToggleRef: (entry: IssueManagerFileReference) => void;\n}): JSX.Element {\n const isFolder = entry.kind === \"folder\";\n\n return (\n <div\n className={cn(\n \"grid grid-cols-[minmax(0,1fr)_auto] items-center gap-3 rounded-xl border px-3 py-2.5 transition-colors\",\n focused || selected\n ? \"border-border bg-transparency-block\"\n : \"border-transparent bg-transparent hover:border-border/70 hover:bg-transparency-block/60\"\n )}\n >\n <button\n className=\"flex min-w-0 items-center gap-3 text-left\"\n type=\"button\"\n onClick={() => onFocusPath(entry.path)}\n >\n <span className=\"grid size-9 shrink-0 place-items-center rounded-lg bg-background/90 text-muted-foreground\">\n {isFolder ? (\n <DirectoryIcon className=\"size-4\" />\n ) : (\n <FileIcon className=\"size-4\" />\n )}\n </span>\n <span className=\"min-w-0\">\n <span className=\"block truncate text-sm font-medium text-foreground\">\n {resolveIssueManagerReferenceLabel(entry)}\n </span>\n <span className=\"block truncate text-xs text-muted-foreground\">\n {entry.path}\n </span>\n </span>\n </button>\n <Button\n size=\"xs\"\n type=\"button\"\n variant={selected ? \"secondary\" : \"outline\"}\n onClick={() => {\n onFocusPath(entry.path);\n onToggleRef(entry);\n }}\n >\n {selected ? <CheckIcon size={14} /> : \"+\"}\n </Button>\n </div>\n );\n}\n\nfunction IssueManagerReferencePickerFeedback({\n children\n}: {\n children: ReactNode;\n}): JSX.Element {\n return (\n <div className=\"grid min-h-[10rem] place-items-center px-4 text-center text-sm text-muted-foreground\">\n {children}\n </div>\n );\n}\n\nexport function resolveIssueManagerReferenceLabel(\n ref: IssueManagerFileReference\n): string {\n return (\n ref.displayName || ref.path.split(\"/\").filter(Boolean).at(-1) || ref.path\n );\n}\n","import { type JSX, type ReactNode } from \"react\";\nimport { Button, 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\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\n return (\n <div\n className=\"relative min-h-0 flex-1 overflow-hidden bg-transparent\"\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.isCollapsed ? 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=\"group absolute top-0 bottom-0 left-[calc(var(--issue-manager-sidebar-width)-6px)] z-20 w-3 cursor-col-resize touch-none\"\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\n className={cn(\n \"relative min-h-0 h-full overflow-hidden bg-transparent\",\n !shellView.sidebar.isCollapsed &&\n \"pl-[var(--issue-manager-sidebar-width)]\"\n )}\n >\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 selectedTask={selectedTask}\n visible={shellView.content.showBottomBar}\n />\n </div>\n\n {shellView.content.isTaskDrawerOpen ? (\n <IssueManagerTaskDrawer\n controller={controller}\n selectedIssue={selectedIssue}\n selectedTask={selectedTask}\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-lg font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {controller.copy.t(\"messages.noIssues\")}\n </h2>\n <p className=\"max-w-[420px] text-base leading-[1.3] text-[var(--text-secondary)]\">\n {controller.copy.t(\"emptyState\")}\n </p>\n <Button\n className=\"mt-2\"\n type=\"button\"\n onClick={() => controller.setIssueEditorMode(\"create\")}\n >\n {controller.copy.t(\"actions.createIssue\")}\n </Button>\n </div>\n </div>\n );\n}\n","import type { JSX } from \"react\";\nimport { Badge, Button, Input } from \"@nextop-os/ui-system\";\nimport type { IssueManagerIssueSummary } from \"../../../contracts/index.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerStatusLabel\n} from \"../../../services/controllerModel.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\";\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 : null;\n const latestOutputs = selectedTask\n ? (controller.taskDetail.value?.latestOutputs ?? [])\n : [];\n\n if (isCreatingIssue || isEditingIssue) {\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 <h2 className=\"m-0 text-[17px] font-semibold leading-[1.35] text-foreground\">\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 className=\"flex w-full min-w-0 flex-col gap-2 text-sm font-semibold text-foreground\">\n <span className=\"leading-5\">{copy.t(\"labels.title\")}</span>\n <Input\n className=\"h-10 min-h-10 rounded-lg border-border-1 bg-transparency-block px-3 text-sm font-semibold text-[var(--text-primary)] shadow-none placeholder:text-[var(--text-placeholder)]\"\n placeholder={copy.t(\"composer.issueTitlePlaceholder\")}\n value={controller.issueDraft.title}\n onChange={(event) =>\n controller.setIssueTitle(event.target.value)\n }\n />\n </label>\n <div className=\"flex min-h-0 w-full min-w-0 flex-col gap-2 text-sm font-semibold text-foreground\">\n <span className=\"leading-5\">{copy.t(\"labels.content\")}</span>\n <IssueManagerRichTextTextarea\n controller={controller}\n surface=\"issue\"\n textareaClassName=\"min-h-[180px] w-full resize-none rounded-lg border border-border-1 bg-transparency-block px-4 py-3 text-sm font-normal leading-5 text-[var(--text-primary)] outline-none placeholder:text-[var(--text-placeholder)]\"\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 <div className=\"shrink-0 border-t border-border-1 px-7 py-4\">\n <div className=\"flex items-center justify-end gap-4\">\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 min-h-0 flex-col\">\n <div className=\"min-h-0 flex-1 overflow-y-auto 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=\"flex items-start justify-between gap-6\">\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"line-clamp-2 text-base font-semibold leading-6 text-foreground\">\n {selectedIssue.title}\n </h2>\n <div className=\"mt-3 flex flex-wrap items-center gap-x-5 gap-y-2 text-sm text-muted-foreground\">\n <Badge className=\"rounded-full border-transparent bg-muted px-2 py-1 text-[11px] text-muted-foreground\">\n {resolveIssueManagerStatusLabel(copy, selectedIssue.status)}\n </Badge>\n <span>\n {copy.t(\"labels.creator\")}{\" \"}\n {resolveIssueManagerCreatorLabel(selectedIssue)}\n </span>\n <span>\n {copy.t(\"labels.createdAt\")}{\" \"}\n {formatIssueManagerTimestamp(selectedIssue.createdAtUnix) ||\n \"-\"}\n </span>\n </div>\n </div>\n <div className=\"flex shrink-0 items-center gap-5 pt-1\">\n <Button\n className=\"h-auto px-0 text-sm font-semibold text-muted-foreground hover:text-foreground\"\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => controller.setIssueEditorMode(\"edit\")}\n >\n {copy.t(\"actions.edit\")}\n </Button>\n <Button\n className=\"h-auto px-0 text-sm font-semibold text-destructive hover:text-destructive\"\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => {\n void controller.deleteIssue();\n }}\n >\n {copy.t(\"actions.delete\")}\n </Button>\n </div>\n </header>\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 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 </div>\n );\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 { summarizeIssueManagerContent } from \"../panel/IssueManagerPanelText.ts\";\nimport { IssueManagerTaskListLoadingState } from \"../panel/IssueManagerPanelSurface.tsx\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\n\nexport function IssueManagerDetailTextSection({\n body,\n label,\n meta,\n tone = \"muted\"\n}: {\n body: string;\n label: string;\n meta?: string;\n tone?: \"destructive\" | \"muted\";\n}): JSX.Element {\n return (\n <section className=\"grid gap-2.5\">\n <h3 className=\"text-sm font-semibold text-foreground\">{label}</h3>\n <div className=\"grid gap-1.5\">\n <p\n className={cn(\n \"text-sm leading-6\",\n tone === \"destructive\"\n ? \"text-destructive\"\n : \"text-muted-foreground\"\n )}\n >\n {body}\n </p>\n {meta ? (\n <p className=\"text-xs leading-5 text-muted-foreground\">{meta}</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-foreground\">\n {copy.t(\"labels.executionOutputs\")}\n </h3>\n {outputs.length === 0 ? (\n <p className=\"text-sm leading-6 text-muted-foreground\">\n {copy.t(\"messages.noExecutionOutputs\")}\n </p>\n ) : (\n <div className=\"grid gap-2\">\n {outputs.map((output) => (\n <button\n className=\"flex items-start justify-between gap-4 rounded-xl border border-border/65 px-4 py-3 text-left transition-colors hover:bg-accent/18\"\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-foreground\">\n {output.displayName}\n </span>\n <span className=\"mt-1 block truncate text-xs text-muted-foreground\">\n {output.path}\n </span>\n </span>\n <span className=\"shrink-0 text-xs text-muted-foreground\">\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-foreground\">\n {copy.t(\"labels.subtasks\")}\n </h3>\n <Button\n className=\"px-3\"\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onCreate}\n >\n <FileCreateIcon size={14} />\n {copy.t(\"actions.add\")}\n </Button>\n </div>\n {tasks.length === 0 ? (\n <p className=\"text-sm leading-6 text-muted-foreground\">\n {copy.t(\"messages.noSubtasksForIssue\")}\n </p>\n ) : (\n <div className=\"grid gap-2\">\n {tasks.map((task) => (\n <button\n className={cn(\n \"flex items-start justify-between gap-4 rounded-xl border px-4 py-3 text-left transition-colors\",\n selectedTaskId === task.taskId\n ? \"border-border/90 bg-background-fronted\"\n : \"border-border/65 hover:bg-accent/18\"\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-foreground\">\n {task.title}\n </span>\n <Badge className=\"rounded-md border-transparent bg-muted px-2 py-1 text-[11px] font-medium text-muted-foreground\">\n {resolveIssueManagerStatusLabel(copy, task.status)}\n </Badge>\n </div>\n <p className=\"mt-2 line-clamp-2 text-sm leading-6 text-muted-foreground\">\n {summarizeIssueManagerContent(\n task.content,\n copy.t(\"messages.taskContentEmpty\")\n )}\n </p>\n </div>\n <span className=\"shrink-0 text-xs text-muted-foreground\">\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-border/70 bg-transparent\">\n <div className=\"flex items-center justify-between gap-4 border-b border-border/60 px-8 py-4\">\n <div>\n <h3 className=\"text-base font-semibold text-foreground\">\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-border/70 bg-transparent\">\n <div className=\"px-4 py-10 text-center\">\n <p className=\"text-sm font-semibold leading-5 text-foreground\">\n {copy.t(\"messages.noTasks\")}\n </p>\n <p className=\"mt-2 text-sm leading-5 text-muted-foreground\">\n {copy.t(\"messages.noTasksForIssueBody\")}\n </p>\n </div>\n </div>\n ) : (\n <div className=\"overflow-hidden rounded-lg border border-border/70 bg-transparent\">\n {tasks.map((task) => (\n <button\n className={cn(\n \"block w-full border-b border-border/70 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-primary/[0.08]\"\n : \"bg-transparent hover:bg-accent/18\"\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-foreground\">\n {task.title}\n </span>\n <Badge className=\"rounded-full border-transparent bg-muted px-2 py-1 text-[11px] text-muted-foreground\">\n {resolveIssueManagerStatusLabel(copy, task.status)}\n </Badge>\n </div>\n <p className=\"text-[12px] leading-[18px] text-muted-foreground\">\n {formatIssueManagerTimestamp(\n task.createdAtUnix ?? task.updatedAtUnix\n )}\n </p>\n </div>\n <p className=\"line-clamp-2 text-[14px] leading-[1.6] text-muted-foreground\">\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 = extractIssueManagerPlainTextFromContent(\n content ?? \"\"\n ).trim();\n if (!plainText) {\n return fallback;\n }\n if (plainText.length <= 120) {\n return plainText;\n }\n return `${plainText.slice(0, 117)}...`;\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\";\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\n useEffect(() => {\n if (variant === \"plain\") {\n setIsOverflowing(false);\n return;\n }\n if (!normalizedContent) {\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 }, [normalizedContent, 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 {normalizedContent ? (\n <div className=\"max-w-3xl text-sm leading-5 text-text-secondary\">\n <IssueManagerDescriptionContent\n content={normalizedContent}\n onOpen={onOpen}\n />\n </div>\n ) : (\n <p className=\"text-sm leading-5 text-text-secondary\">{emptyLabel}</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 leading-5 text-text-secondary\",\n isOverflowing && \"pb-8\"\n )}\n ref={contentRef}\n >\n {normalizedContent ? (\n <IssueManagerDescriptionContent\n content={normalizedContent}\n onOpen={onOpen}\n />\n ) : (\n <p className=\"text-text-secondary\">{emptyLabel}</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\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(textareaClassName, showReferenceAction && \"pb-14\")}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n overlay={\n showReferenceAction ? (\n <div className=\"pointer-events-none absolute inset-x-4 bottom-3 z-10 flex\">\n <Button\n className=\"pointer-events-auto\"\n size=\"sm\"\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 { type JSX } from \"react\";\nimport { Button, cn } from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport { IssueManagerRunActionTrigger } 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 selectedTask: IssueManagerTaskSummary | null;\n visible: boolean;\n}\n\nexport function IssueManagerBottomBar({\n controller,\n isNarrowLayout,\n selectedIssue,\n selectedTask,\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 ? \"flex-col items-stretch\" : \"items-center justify-end\"\n )}\n >\n <IssueManagerRunActionTrigger\n controller={controller}\n disabled={!selectedTask}\n triggerClassName={cn(\n \"rounded-xl border-[var(--border-1)] bg-[var(--transparency-block)] px-4 py-2\",\n isNarrowLayout ? \"w-full\" : \"min-w-[14rem]\"\n )}\n />\n {controller.canInviteCollaborators ? (\n <Button\n className={cn(\"px-4\", isNarrowLayout && \"w-full\")}\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","import { useState, type JSX } from \"react\";\nimport {\n Badge,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SparkIcon\n} from \"@nextop-os/ui-system\";\nimport type {\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\";\n\nexport function IssueManagerRunActionTrigger({\n controller,\n disabled = false,\n iconSize = 16,\n triggerClassName\n}: {\n controller: IssueManagerController;\n disabled?: boolean;\n iconSize?: number;\n triggerClassName?: string;\n}): JSX.Element {\n const [resetToken, setResetToken] = useState(0);\n\n return (\n <Select\n key={`${controller.nodeState.selectedAgentProvider}:${resetToken}`}\n disabled={controller.isRunningTask || disabled}\n onValueChange={(provider) => {\n setResetToken((current) => current + 1);\n void controller.runTask(provider);\n }}\n >\n <SelectTrigger\n aria-label={controller.copy.t(\"actions.askAgentToRun\")}\n className={triggerClassName}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2\">\n <SparkIcon size={iconSize} />\n <span className=\"truncate\">\n {controller.copy.t(\"actions.askAgentToRun\")}\n </span>\n </span>\n </SelectTrigger>\n <SelectContent style={{ zIndex: \"var(--z-panel-popover)\" }}>\n {controller.providerOptions.map((provider) => (\n <SelectItem key={provider} value={provider}>\n {provider}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\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-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-text-secondary\">\n {formatIssueManagerTimestamp(\n run.updatedAtUnix ?? run.createdAtUnix\n )}\n </p>\n </div>\n <Badge className=\"rounded-full border-transparent bg-transparency-block px-2.5 py-1 text-xs text-text-secondary\">\n {resolveIssueManagerStatusLabel(copy, run.status)}\n </Badge>\n </div>\n {run.errorMessage ? (\n <p className=\"mt-2 text-xs text-destructive\">\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-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-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 {\n FailedFilledIcon,\n Spinner,\n toastVariants,\n cn\n} 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 <div className=\"pointer-events-none absolute top-4 left-1/2 z-30 flex w-full max-w-full -translate-x-1/2 justify-center px-4\">\n <div\n aria-busy={notice.isLoading}\n aria-live={variant === \"destructive\" ? \"assertive\" : \"polite\"}\n className={cn(\n toastVariants({ variant }),\n \"w-fit max-w-[min(72vw,40rem)] px-4 py-3 shadow-lg\"\n )}\n role={variant === \"destructive\" ? \"alert\" : \"status\"}\n >\n <div className=\"flex min-w-0 max-w-full items-center gap-[6px] whitespace-nowrap text-sm font-normal leading-normal\">\n {notice.isLoading ? (\n <Spinner\n className=\"shrink-0 text-current\"\n size={16}\n strokeWidth={3}\n trackColor=\"color-mix(in srgb, currentColor 28%, transparent)\"\n />\n ) : notice.tone === \"destructive\" ? (\n <FailedFilledIcon className=\"size-4 shrink-0 text-current\" />\n ) : null}\n <span className=\"min-w-0 max-w-full truncate whitespace-nowrap\">\n {notice.title}\n </span>\n </div>\n </div>\n </div>\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 \"absolute top-0 left-0 z-10 isolate flex h-full w-[var(--issue-manager-sidebar-width)] min-h-0 flex-col overflow-hidden bg-transparent will-change-[transform,opacity] transition-[transform,opacity,border-color] duration-[220ms] ease-[cubic-bezier(0.22,1,0.36,1)] 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-[180ms] 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 -translate-x-full border-r-transparent opacity-0 after:opacity-100 [&>*]:opacity-0 [&>*]:transition-opacity [&>*]:duration-[120ms] motion-reduce:transform-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\";\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 \"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 <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0 flex-1 space-y-2\">\n <p className=\"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-semibold leading-[1.35rem] text-[var(--text-primary)]\">\n {issue.title}\n </p>\n </div>\n <Badge className=\"rounded-full border-transparent bg-[var(--transparency-block)] px-2 py-1 text-[11px] text-[var(--text-secondary)]\">\n {resolveIssueManagerStatusLabel(copy, issue.status)}\n </Badge>\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 { IssueManagerIssueSummary } 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 (input.issues.isLoading && input.issues.value.length === 0) {\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 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 === \"read\"\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 {\n Button,\n Input,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n UploadIcon\n} 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 { resolveIssueManagerPriorityLabel } from \"../../../services/controllerModel.ts\";\n\nconst taskPriorityOptions = [\"high\", \"medium\", \"low\"] as const;\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 const showAttachmentActions =\n controller.canUploadWorkspaceFiles || controller.canReferenceWorkspaceFiles;\n\n return (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden\">\n <div className=\"min-h-0 flex-1 overflow-y-auto px-7 py-8\">\n <div className=\"flex w-full max-w-[76rem] flex-col gap-8\">\n <div className=\"flex items-start justify-between gap-4\">\n <h2 className=\"text-[17px] font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {copy.t(\"actions.addSubtask\")}\n </h2>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-sm text-text-secondary\">\n {copy.t(\"labels.priority\")}\n </span>\n <Select\n value={controller.taskDraft.priority}\n onValueChange={(value) => controller.setTaskPriority(value)}\n >\n <SelectTrigger\n aria-label={copy.t(\"labels.priority\")}\n className=\"min-w-28 rounded-lg border-border-1 bg-transparency-block text-sm\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent style={{ zIndex: \"var(--z-panel-popover)\" }}>\n {taskPriorityOptions.map((priority) => (\n <SelectItem key={priority} value={priority}>\n {resolveIssueManagerPriorityLabel(copy, priority)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <label className=\"grid gap-2\">\n <span className=\"text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.title\")}\n </span>\n <Input\n className=\"h-10 rounded-lg border-0 bg-transparency-block px-3 text-sm font-semibold text-[var(--text-primary)] shadow-none placeholder:text-[var(--text-placeholder)]\"\n placeholder={copy.t(\"composer.subtaskTitlePlaceholder\")}\n value={controller.taskDraft.title}\n onChange={(event) => controller.setTaskTitle(event.target.value)}\n />\n </label>\n\n <section className=\"grid gap-2\">\n <span className=\"text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.requirementDescription\")}\n </span>\n <div className=\"overflow-hidden rounded-lg border border-border-1 bg-transparency-block\">\n <IssueManagerRichTextTextarea\n controller={controller}\n surface=\"task\"\n textareaClassName=\"min-h-[20rem] w-full resize-none border-0 bg-transparent px-4 py-3 text-sm leading-5 text-[var(--text-primary)] outline-none placeholder:text-[var(--text-placeholder)]\"\n placeholder={copy.t(\"composer.subtaskContentPlaceholder\")}\n value={controller.taskDraft.content}\n onChange={controller.setTaskContent}\n />\n {showAttachmentActions ? (\n <div className=\"flex flex-wrap items-center gap-3 border-t border-border-1 px-4 py-3\">\n {controller.canUploadWorkspaceFiles ? (\n <Button\n className=\"px-3\"\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n void controller.uploadReferences(\"task\", \"files\");\n }}\n >\n <UploadIcon size={16} />\n {copy.t(\"actions.uploadFiles\")}\n </Button>\n ) : null}\n {controller.canUploadWorkspaceFiles ? (\n <Button\n className=\"px-3\"\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n void controller.uploadReferences(\"task\", \"folder\");\n }}\n >\n <UploadIcon size={16} />\n {copy.t(\"actions.uploadFolder\")}\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n </section>\n </div>\n </div>\n\n <div className=\"shrink-0 border-t border-border-1 px-7 py-4\">\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 } 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 {\n resolveIssueManagerTaskDrawerViewState,\n resolveIssueManagerTaskRefs\n} from \"./IssueManagerTaskDrawerState.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\n\nexport function IssueManagerTaskDrawer({\n controller,\n selectedIssue,\n selectedTask,\n onClose\n}: {\n controller: IssueManagerController;\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 taskRefs = resolveIssueManagerTaskRefs({ controller });\n const taskContent = selectedTask?.content ?? \"\";\n\n return (\n <div\n className=\"absolute inset-0 z-20 flex justify-end bg-[var(--backdrop)] backdrop-blur-[1px]\"\n onClick={onClose}\n >\n <aside\n className=\"flex h-full w-[34rem] max-w-[92vw] flex-col border-l border-border-1 bg-background-panel text-[var(--text-primary)] shadow-[-20px_0_60px_var(--shadow-elevated)]\"\n onClick={(event) => event.stopPropagation()}\n >\n <IssueManagerTaskDrawerHeader\n controller={controller}\n selectedTask={selectedTask}\n view={view}\n onClose={onClose}\n />\n\n <ScrollArea className=\"min-h-0 flex-1\">\n <div className=\"flex flex-col gap-5 px-7 py-6\">\n <IssueManagerTaskDrawerBody\n controller={controller}\n taskContent={taskContent}\n taskRefs={taskRefs}\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 type { JSX } from \"react\";\nimport {\n Badge,\n Button,\n CloseIcon,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Input,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n SparkIcon\n} from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerContextRef,\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerPriorityLabel,\n resolveIssueManagerStatusLabel\n} from \"../../../services/controllerModel.ts\";\nimport { IssueManagerContextSection } from \"../content/IssueManagerContextSection.tsx\";\nimport { IssueManagerDescriptionSection } from \"../content/IssueManagerDescriptionSection.tsx\";\nimport { IssueManagerTaskDrawerLoadingState } from \"../panel/IssueManagerPanelSurface.tsx\";\nimport { resolveTaskCreatorLabel } from \"../panel/IssueManagerPanelText.ts\";\nimport { IssueManagerRichTextTextarea } from \"../content/IssueManagerRichTextTextarea.tsx\";\nimport {\n IssueManagerRunActionTrigger,\n IssueManagerRunPanels\n} from \"../task/IssueManagerRunSections.tsx\";\nimport {\n canIssueManagerSaveTask,\n type IssueManagerTaskDrawerViewState\n} from \"./IssueManagerTaskDrawerState.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\n\nconst taskPriorityOptions = [\"high\", \"medium\", \"low\"] as const;\n\nexport function IssueManagerTaskDrawerHeader({\n controller,\n selectedTask,\n view,\n onClose\n}: {\n controller: IssueManagerController;\n selectedTask: IssueManagerTaskSummary | null;\n view: Pick<\n IssueManagerTaskDrawerViewState,\n \"showTaskActions\" | \"showTaskMetadata\" | \"title\"\n >;\n onClose: () => void;\n}): JSX.Element {\n const copy = controller.copy;\n\n return (\n <div className=\"flex items-start justify-between gap-4 border-b border-border-1 px-7 py-5\">\n <div className=\"min-w-0 flex-1\">\n {view.showTaskMetadata && selectedTask ? (\n <div className=\"grid min-w-0 gap-2\">\n <h3 className=\"line-clamp-3 text-sm font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {view.title}\n </h3>\n </div>\n ) : (\n <h3 className=\"line-clamp-2 text-[17px] font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {view.title}\n </h3>\n )}\n {view.showTaskMetadata && selectedTask ? (\n <div className=\"mt-2 flex min-w-0 items-center overflow-hidden text-sm leading-[1.55] text-text-secondary\">\n <Badge className=\"shrink-0 rounded-full border-transparent bg-[var(--accent-bg)] px-2.5 py-1 text-xs text-[var(--text-primary)]\">\n {resolveIssueManagerStatusLabel(copy, selectedTask.status)}\n </Badge>\n <span className=\"mx-3 h-[13px] w-px shrink-0 bg-border-1\" />\n <Badge className=\"shrink-0 rounded-full border-transparent bg-transparency-block px-2.5 py-1 text-xs text-text-secondary\">\n {resolveIssueManagerPriorityLabel(copy, selectedTask.priority)}\n </Badge>\n <span className=\"mx-3 h-[13px] w-px shrink-0 bg-border-1\" />\n <span>\n {copy.t(\"labels.updatedAt\")}{\" \"}\n {formatIssueManagerTimestamp(\n selectedTask.updatedAtUnix ?? selectedTask.createdAtUnix\n ) || \"-\"}\n </span>\n <span className=\"mx-3 h-[13px] w-px shrink-0 bg-border-1\" />\n <span className=\"min-w-0 truncate\">\n {resolveTaskCreatorLabel(selectedTask)}\n </span>\n </div>\n ) : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {view.showTaskActions && selectedTask ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n aria-label={copy.t(\"actions.moreActions\")}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n >\n <span\n aria-hidden=\"true\"\n className=\"text-base leading-none tracking-[0.18em] text-text-secondary\"\n >\n ...\n </span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" sideOffset={8}>\n <DropdownMenuItem\n onClick={() => controller.setTaskEditorMode(\"edit\")}\n >\n {copy.t(\"actions.editTask\")}\n </DropdownMenuItem>\n <DropdownMenuItem\n variant=\"destructive\"\n onClick={() => {\n void controller.deleteTask();\n }}\n >\n {copy.t(\"actions.deleteTask\")}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n ) : null}\n <Button\n aria-label={copy.t(\"actions.cancel\")}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={onClose}\n >\n <CloseIcon size={16} />\n </Button>\n </div>\n </div>\n );\n}\n\nexport function IssueManagerTaskDrawerLoadingBody(): JSX.Element {\n return <IssueManagerTaskDrawerLoadingState />;\n}\n\nexport function IssueManagerTaskDrawerBody({\n controller,\n taskContent,\n taskRefs,\n view\n}: {\n controller: IssueManagerController;\n taskContent: string;\n taskRefs: readonly IssueManagerContextRef[];\n view: Pick<IssueManagerTaskDrawerViewState, \"bodyKind\" | \"isCreate\">;\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 isCreate={view.isCreate}\n taskRefs={taskRefs}\n />\n );\n }\n\n return (\n <IssueManagerTaskDrawerReadBody\n controller={controller}\n taskContent={taskContent}\n taskRefs={taskRefs}\n />\n );\n}\n\nexport function IssueManagerTaskDrawerEditBody({\n controller,\n isCreate,\n taskRefs\n}: {\n controller: IssueManagerController;\n isCreate: boolean;\n taskRefs: readonly IssueManagerContextRef[];\n}): JSX.Element {\n const copy = controller.copy;\n\n return (\n <>\n <div className=\"grid gap-5\">\n <label className=\"grid gap-2\">\n <span className=\"text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.title\")}\n </span>\n <Input\n className=\"h-10 rounded-lg border-border-1 bg-transparency-block text-sm font-semibold text-[var(--text-primary)] shadow-none placeholder:text-[var(--text-placeholder)]\"\n placeholder={copy.t(\"composer.taskTitlePlaceholder\")}\n value={controller.taskDraft.title}\n onChange={(event) => controller.setTaskTitle(event.target.value)}\n />\n </label>\n <div className=\"flex flex-wrap items-center gap-3\">\n <div className=\"flex items-center gap-3\">\n <span className=\"text-sm font-medium text-text-secondary\">\n {copy.t(\"labels.priority\")}\n </span>\n <Select\n value={controller.taskDraft.priority}\n onValueChange={(value) => controller.setTaskPriority(value)}\n >\n <SelectTrigger\n aria-label={copy.t(\"labels.priority\")}\n className=\"min-w-28 rounded-lg border-border-1 bg-transparency-block text-sm\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent style={{ zIndex: \"var(--z-panel-popover)\" }}>\n {taskPriorityOptions.map((priority) => (\n <SelectItem key={priority} value={priority}>\n {resolveIssueManagerPriorityLabel(copy, priority)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n <div className=\"grid gap-2\">\n <span className=\"text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.content\")}\n </span>\n <IssueManagerRichTextTextarea\n controller={controller}\n surface=\"task\"\n textareaClassName=\"min-h-[12rem] w-full resize-none rounded-lg border border-border-1 bg-transparency-block px-4 py-3 text-sm leading-5 text-[var(--text-primary)] outline-none placeholder:text-[var(--text-placeholder)]\"\n placeholder={copy.t(\"composer.taskContentPlaceholder\")}\n value={controller.taskDraft.content}\n onChange={controller.setTaskContent}\n />\n </div>\n </div>\n\n <IssueManagerContextSection\n copy={copy}\n emptyLabel={copy.t(\"messages.noTaskReferences\")}\n refs={taskRefs}\n onAdd={() => {\n void controller.attachReferences(\"task\");\n }}\n onOpen={controller.openReference}\n onRemove={controller.removeContextRef}\n />\n\n {!isCreate ? (\n <IssueManagerRunPanels\n copy={copy}\n outputs={controller.taskDetail.value?.latestOutputs ?? []}\n recentRuns={controller.taskDetail.value?.recentRuns ?? []}\n onOpen={controller.openReference}\n />\n ) : null}\n </>\n );\n}\n\nexport function IssueManagerTaskDrawerReadBody({\n controller,\n taskContent,\n taskRefs\n}: {\n controller: IssueManagerController;\n taskContent: string;\n taskRefs: readonly IssueManagerContextRef[];\n}): JSX.Element {\n const copy = controller.copy;\n\n return (\n <>\n <IssueManagerDescriptionSection\n content={taskContent}\n emptyLabel={copy.t(\"messages.taskContentEmpty\")}\n label={copy.t(\"labels.content\")}\n minHeightClass=\"min-h-[8rem]\"\n onOpen={controller.openReference}\n />\n\n <IssueManagerContextSection\n copy={copy}\n emptyLabel={copy.t(\"messages.noTaskReferences\")}\n refs={taskRefs}\n onAdd={() => {\n void controller.attachReferences(\"task\");\n }}\n onOpen={controller.openReference}\n onRemove={controller.removeContextRef}\n />\n\n <IssueManagerRunPanels\n copy={copy}\n outputs={controller.taskDetail.value?.latestOutputs ?? []}\n recentRuns={controller.taskDetail.value?.recentRuns ?? []}\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-border-1 px-7 py-4\">\n <div className=\"flex items-center justify-between gap-3\">\n <IssueManagerRunActionTrigger\n controller={controller}\n iconSize={15}\n triggerClassName=\"min-w-[11rem] rounded-lg border-border-1 bg-transparency-block px-3.5 py-2 text-sm\"\n />\n {controller.canInviteCollaborators ? (\n <Button\n className=\"shrink-0 px-4\"\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 className=\"border-t border-border-1 px-7 py-4\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-2\">\n {!view.isCreate && selectedTask ? (\n <Button\n size=\"default\"\n type=\"button\"\n variant=\"destructive\"\n onClick={() => {\n void controller.deleteTask();\n }}\n >\n {copy.t(\"actions.deleteTask\")}\n </Button>\n ) : null}\n </div>\n <div className=\"flex items-center gap-3\">\n <Button\n size=\"default\"\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=\"default\"\n type=\"button\"\n onClick={() => void controller.saveTask()}\n >\n <SparkIcon size={16} />\n {copy.t(\"actions.saveTask\")}\n </Button>\n </div>\n </div>\n </div>\n );\n }\n\n return null;\n}\n","import type { JSX } from \"react\";\nimport { Button, DirectoryIcon, FileIcon } from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerContextRef,\n IssueManagerFileReference\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\n\nexport function IssueManagerContextSection({\n copy,\n emptyLabel,\n onAdd,\n onOpen,\n onRemove,\n refs\n}: {\n copy: IssueManagerI18nRuntime;\n emptyLabel: string;\n onAdd: () => void;\n onOpen: (reference: IssueManagerFileReference) => Promise<void>;\n onRemove: (ref: IssueManagerContextRef) => Promise<void>;\n refs: readonly IssueManagerContextRef[];\n}): JSX.Element {\n return (\n <section className=\"rounded-lg border border-border-1 bg-transparent px-4 py-4\">\n <div className=\"mb-3 flex items-center justify-between gap-3\">\n <h4 className=\"text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.contextReferences\")}\n </h4>\n <Button\n className=\"px-3\"\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onAdd}\n >\n {copy.t(\"actions.addReferences\")}\n </Button>\n </div>\n {refs.length === 0 ? (\n <p className=\"text-sm leading-5 text-text-secondary\">{emptyLabel}</p>\n ) : (\n <div className=\"grid gap-2.5\">\n {refs.map((ref) => (\n <div\n className=\"flex items-center justify-between gap-3 rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3\"\n key={ref.contextRefId}\n >\n <button\n className=\"flex min-w-0 flex-1 items-center gap-3 text-left\"\n type=\"button\"\n onClick={() => {\n void onOpen({\n displayName: ref.displayName,\n kind: ref.path.endsWith(\"/\") ? \"folder\" : \"file\",\n path: ref.path\n });\n }}\n >\n {ref.path.endsWith(\"/\") ? (\n <DirectoryIcon\n className=\"shrink-0 text-text-secondary\"\n size={16}\n />\n ) : (\n <FileIcon\n className=\"shrink-0 text-text-secondary\"\n size={16}\n />\n )}\n <span className=\"min-w-0\">\n <span className=\"block truncate text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {ref.displayName}\n </span>\n <span className=\"block truncate text-xs leading-[1.55] text-text-secondary\">\n {ref.path}\n </span>\n </span>\n </button>\n <Button\n className=\"h-7 rounded-md px-2 text-[13px] font-semibold text-text-secondary hover:text-[var(--text-primary)]\"\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => {\n void onRemove(ref);\n }}\n >\n {copy.t(\"actions.removeReference\")}\n </Button>\n </div>\n ))}\n </div>\n )}\n </section>\n );\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 buildIssueManagerStatusCounts,\n resolveIssueManagerShellContentViewState,\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 = buildIssueManagerStatusCounts(controller.issues.value);\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 \"--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"],"mappings":"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","names":["useMemo","useEffect","useEffect","useMemo","useEffect","useEffectEvent","useMemo","useState","useState","hasFileAdapterMethod","useEffectEvent","useEffect","useMemo","Button","cn","useMemo","Button","Button","DirectoryIcon","FileIcon","jsx","jsxs","DirectoryIcon","FileIcon","IssueManagerReferencePickerFeedback","Button","jsx","jsxs","useMemo","Button","Button","cn","Badge","Button","Input","Badge","Button","FileCreateIcon","ScrollArea","cn","Button","jsx","jsxs","jsxs","jsx","jsxs","jsx","jsx","jsxs","cn","Button","FileCreateIcon","Badge","useEffect","useState","cn","jsx","jsxs","useState","useEffect","cn","useEffect","useMemo","useRef","useState","Button","cn","jsx","jsxs","jsx","jsxs","Input","Button","Badge","Button","cn","useState","Badge","jsx","jsxs","useState","Badge","jsx","jsxs","cn","Button","cn","jsx","jsxs","cn","Badge","Button","CloseIcon","FileCreateIcon","Input","ScrollArea","cn","jsx","jsxs","Button","FileCreateIcon","ScrollArea","cn","Input","CloseIcon","Badge","jsx","jsxs","cn","Button","Input","Select","SelectContent","SelectItem","SelectTrigger","jsx","jsxs","Select","SelectTrigger","SelectContent","SelectItem","Input","Button","ScrollArea","Badge","Button","CloseIcon","Input","Select","SelectContent","SelectItem","SelectTrigger","SelectValue","SparkIcon","Button","DirectoryIcon","FileIcon","jsx","jsxs","jsx","jsxs","taskPriorityOptions","Badge","Button","CloseIcon","Input","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","SparkIcon","jsx","jsxs","ScrollArea","useEffect","useEffectEvent","useRef","useState","useRef","useState","useEffectEvent","useEffect","jsx","jsxs","cn","Button","jsx","jsxs","cn","Button"]}
|