@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.
@@ -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"]}