@tutti-os/workspace-issue-manager 0.0.4 → 0.0.6

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.
@@ -1 +0,0 @@
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/controllerAnalytics.ts","../src/services/internal/controllerActions.ts","../src/ui/react/internal/controller/createIssueManagerControllerActionsBridge.ts","../src/ui/react/internal/issue/createIssueManagerIssueBindings.ts","../src/ui/react/internal/task/createIssueManagerTaskBindings.ts","../src/ui/react/internal/controller/createIssueManagerControllerBindings.ts","../src/ui/react/internal/controller/useIssueManagerControllerRuntime.ts","../src/ui/react/internal/shell/IssueManagerNoticeState.ts","../src/ui/react/internal/shell/useIssueManagerNodeView.ts","../src/ui/react/index.ts","../src/ui/IssueManagerNode.tsx","../src/ui/internal/shell/IssueManagerShell.tsx","../src/ui/internal/shell/IssueManagerPanels.tsx","../src/ui/internal/status/IssueManagerStatusBadge.ts","../src/ui/internal/issue/IssueManagerIssueSections.tsx","../src/ui/internal/content/IssueManagerTitleTooltip.tsx","../src/ui/internal/panel/IssueManagerPanelText.ts","../src/ui/internal/panel/IssueManagerPanelSurface.tsx","../src/ui/internal/content/IssueManagerDescriptionSection.tsx","../src/ui/internal/content/IssueManagerRichTextTextarea.tsx","../src/ui/internal/shell/IssueManagerDraftTitleInput.tsx","../src/ui/internal/shell/IssueManagerEditorMotion.ts","../src/ui/internal/shell/IssueManagerBottomBar.tsx","../src/ui/internal/task/IssueManagerRunSections.tsx","../src/ui/internal/shell/IssueManagerTaskDrawerState.ts","../src/ui/internal/shell/IssueManagerFloatingNotice.tsx","../src/ui/internal/shell/IssueManagerSidebar.tsx","../src/ui/internal/shell/IssueManagerSidebarSections.tsx","../src/ui/internal/shell/IssueManagerShellState.ts","../src/ui/internal/shell/IssueManagerSidebarState.ts","../src/ui/internal/shell/IssueManagerTaskComposerPane.tsx","../src/ui/internal/shell/IssueManagerTaskDrawer.tsx","../src/ui/internal/shell/IssueManagerTaskDrawerSections.tsx","../src/ui/internal/shell/useIssueManagerShellView.ts","../src/ui/internal/shell/IssueManagerTopicSelector.tsx"],"sourcesContent":["import { useEffect, useEffectEvent, useState } from \"react\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary,\n IssueManagerCreateTopicInput,\n IssueManagerTopic,\n IssueManagerUpdateTopicInput\n} from \"../../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../../i18n/issueManagerI18n.ts\";\n\ninterface IssueManagerTaskListCollapsedDetail {\n collapsed: boolean;\n nodeId: string;\n workspaceId: string;\n}\n\nconst issueManagerTaskListCollapsedEvent =\n \"nextop:issue-manager-task-list-collapsed\";\n\ntype IssueManagerTopicCreateEventInput = Omit<\n IssueManagerCreateTopicInput,\n \"workspaceId\"\n>;\n\ntype IssueManagerTopicUpdateEventInput = Omit<\n IssueManagerUpdateTopicInput,\n \"workspaceId\"\n>;\n\ninterface IssueManagerTopicHeaderStateDetail {\n activeTopicId: string | null;\n nodeId: string;\n topics: readonly IssueManagerTopic[];\n workspaceId: string;\n}\n\ninterface IssueManagerTopicSelectionDetail {\n nodeId: string;\n topicId: string;\n workspaceId: string;\n}\n\ninterface IssueManagerTopicCreateDetail {\n input: IssueManagerTopicCreateEventInput;\n nodeId: string;\n workspaceId: string;\n}\n\ninterface IssueManagerTopicDeleteDetail {\n nodeId: string;\n topicId: string;\n workspaceId: string;\n}\n\ninterface IssueManagerTopicUpdateDetail {\n input: IssueManagerTopicUpdateEventInput;\n nodeId: string;\n workspaceId: string;\n}\n\ntype IssueManagerEventHubListener<TDetail> = (detail: TDetail) => void;\n\nfunction createIssueManagerKeyedEventHub<TDetail>(input: {\n getKey: (detail: TDetail) => string;\n}) {\n const listenerSetByKey = new Map<\n string,\n Set<IssueManagerEventHubListener<TDetail>>\n >();\n\n return {\n publish(detail: TDetail): void {\n listenerSetByKey.get(input.getKey(detail))?.forEach((listener) => {\n listener(detail);\n });\n },\n subscribe(\n key: string,\n listener: IssueManagerEventHubListener<TDetail>\n ): () => void {\n let listenerSet = listenerSetByKey.get(key);\n if (!listenerSet) {\n listenerSet = new Set();\n listenerSetByKey.set(key, listenerSet);\n }\n listenerSet.add(listener);\n\n return () => {\n listenerSet?.delete(listener);\n if (listenerSet?.size === 0) {\n listenerSetByKey.delete(key);\n }\n };\n }\n };\n}\n\nfunction createIssueManagerKeyedReplayEventHub<TDetail>(input: {\n getKey: (detail: TDetail) => string;\n}) {\n const currentByKey = new Map<string, TDetail>();\n const eventHub = createIssueManagerKeyedEventHub<TDetail>(input);\n\n return {\n get(key: string): TDetail | null {\n return currentByKey.get(key) ?? null;\n },\n publish(detail: TDetail): void {\n currentByKey.set(input.getKey(detail), detail);\n eventHub.publish(detail);\n },\n subscribe(\n key: string,\n listener: IssueManagerEventHubListener<TDetail>\n ): () => void {\n const unsubscribe = eventHub.subscribe(key, listener);\n const current = currentByKey.get(key);\n if (current) {\n listener(current);\n }\n return unsubscribe;\n }\n };\n}\n\nconst issueManagerTopicHeaderStateHub =\n createIssueManagerKeyedReplayEventHub<IssueManagerTopicHeaderStateDetail>({\n getKey: issueManagerNodeScopeKey\n });\nconst issueManagerTopicSelectionHub =\n createIssueManagerKeyedEventHub<IssueManagerTopicSelectionDetail>({\n getKey: issueManagerNodeScopeKey\n });\nconst issueManagerTopicCreateHub =\n createIssueManagerKeyedEventHub<IssueManagerTopicCreateDetail>({\n getKey: issueManagerNodeScopeKey\n });\nconst issueManagerTopicDeleteHub =\n createIssueManagerKeyedEventHub<IssueManagerTopicDeleteDetail>({\n getKey: issueManagerNodeScopeKey\n });\nconst issueManagerTopicUpdateHub =\n createIssueManagerKeyedEventHub<IssueManagerTopicUpdateDetail>({\n getKey: issueManagerNodeScopeKey\n });\n\nexport function resolveIssueManagerTopicHeaderState(input: {\n activeTopicId: string | null;\n nodeId: string;\n workspaceId: string;\n}): IssueManagerTopicHeaderStateDetail {\n return (\n issueManagerTopicHeaderStateHub.get(issueManagerNodeScopeKey(input)) ?? {\n activeTopicId: input.activeTopicId,\n nodeId: input.nodeId,\n topics: [],\n workspaceId: input.workspaceId\n }\n );\n}\n\nexport function dispatchIssueManagerTaskListCollapsed(input: {\n collapsed: boolean;\n nodeId: string;\n workspaceId: string;\n}): void {\n if (typeof window === \"undefined\") {\n return;\n }\n\n window.dispatchEvent(\n new CustomEvent<IssueManagerTaskListCollapsedDetail>(\n issueManagerTaskListCollapsedEvent,\n {\n detail: input\n }\n )\n );\n}\n\nexport function dispatchIssueManagerTopicHeaderState(\n input: IssueManagerTopicHeaderStateDetail\n): void {\n issueManagerTopicHeaderStateHub.publish(input);\n}\n\nexport function dispatchIssueManagerTopicSelection(\n input: IssueManagerTopicSelectionDetail\n): void {\n issueManagerTopicSelectionHub.publish(input);\n}\n\nexport function dispatchIssueManagerTopicCreate(\n input: IssueManagerTopicCreateDetail\n): void {\n issueManagerTopicCreateHub.publish(input);\n}\n\nexport function dispatchIssueManagerTopicDelete(\n input: IssueManagerTopicDeleteDetail\n): void {\n issueManagerTopicDeleteHub.publish(input);\n}\n\nexport function dispatchIssueManagerTopicUpdate(\n input: IssueManagerTopicUpdateDetail\n): void {\n issueManagerTopicUpdateHub.publish(input);\n}\n\nexport function useIssueManagerTaskListCollapsedSync(input: {\n nodeId: string;\n onCollapsedChange: (collapsed: boolean) => void;\n workspaceId: string;\n}): void {\n const onCollapsedChange = useEffectEvent(input.onCollapsedChange);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return undefined;\n }\n\n const handleTaskListCollapsedChange = (event: Event) => {\n const detail = (event as CustomEvent<IssueManagerTaskListCollapsedDetail>)\n .detail;\n if (\n detail?.nodeId !== input.nodeId ||\n detail.workspaceId !== input.workspaceId\n ) {\n return;\n }\n onCollapsedChange(detail.collapsed);\n };\n\n window.addEventListener(\n issueManagerTaskListCollapsedEvent,\n handleTaskListCollapsedChange\n );\n return () => {\n window.removeEventListener(\n issueManagerTaskListCollapsedEvent,\n handleTaskListCollapsedChange\n );\n };\n }, [input.nodeId, input.workspaceId, onCollapsedChange]);\n}\n\nexport function useIssueManagerTopicHeaderStateSync(input: {\n activeTopicId: string | null;\n nodeId: string;\n workspaceId: string;\n}) {\n const [state, setState] = useState<IssueManagerTopicHeaderStateDetail>(() =>\n resolveIssueManagerTopicHeaderState(input)\n );\n\n useEffect(() => {\n setState((current) =>\n current.activeTopicId === input.activeTopicId &&\n current.nodeId === input.nodeId &&\n current.workspaceId === input.workspaceId &&\n current.topics === resolveIssueManagerTopicHeaderState(input).topics\n ? current\n : resolveIssueManagerTopicHeaderState(input)\n );\n }, [input.activeTopicId, input.nodeId, input.workspaceId]);\n\n useEffect(() => {\n const handleTopicHeaderStateChange = (\n detail: IssueManagerTopicHeaderStateDetail\n ) => {\n setState(detail);\n };\n\n return issueManagerTopicHeaderStateHub.subscribe(\n issueManagerNodeScopeKey(input),\n handleTopicHeaderStateChange\n );\n }, [input.nodeId, input.workspaceId]);\n\n return state;\n}\n\nexport function useIssueManagerTopicHeaderCommandSync(input: {\n nodeId: string;\n onCreateTopic: (topicInput: IssueManagerTopicCreateEventInput) => void;\n onDeleteTopic: (topicId: string) => void;\n onSelectTopic: (topicId: string) => void;\n onUpdateTopic: (topicInput: IssueManagerTopicUpdateEventInput) => void;\n workspaceId: string;\n}): void {\n const onCreateTopic = useEffectEvent(input.onCreateTopic);\n const onDeleteTopic = useEffectEvent(input.onDeleteTopic);\n const onSelectTopic = useEffectEvent(input.onSelectTopic);\n const onUpdateTopic = useEffectEvent(input.onUpdateTopic);\n\n useEffect(() => {\n const handleTopicSelection = (detail: IssueManagerTopicSelectionDetail) => {\n onSelectTopic(detail.topicId);\n };\n const handleTopicCreate = (detail: IssueManagerTopicCreateDetail) => {\n onCreateTopic(detail.input);\n };\n const handleTopicDelete = (detail: IssueManagerTopicDeleteDetail) => {\n onDeleteTopic(detail.topicId);\n };\n const handleTopicUpdate = (detail: IssueManagerTopicUpdateDetail) => {\n onUpdateTopic(detail.input);\n };\n\n const unsubscribeSelection = issueManagerTopicSelectionHub.subscribe(\n issueManagerNodeScopeKey(input),\n handleTopicSelection\n );\n const unsubscribeCreate = issueManagerTopicCreateHub.subscribe(\n issueManagerNodeScopeKey(input),\n handleTopicCreate\n );\n const unsubscribeDelete = issueManagerTopicDeleteHub.subscribe(\n issueManagerNodeScopeKey(input),\n handleTopicDelete\n );\n const unsubscribeUpdate = issueManagerTopicUpdateHub.subscribe(\n issueManagerNodeScopeKey(input),\n handleTopicUpdate\n );\n return () => {\n unsubscribeSelection();\n unsubscribeCreate();\n unsubscribeDelete();\n unsubscribeUpdate();\n };\n }, [\n input.nodeId,\n input.workspaceId,\n onCreateTopic,\n onDeleteTopic,\n onSelectTopic,\n onUpdateTopic\n ]);\n}\n\nexport function useIssueManagerNodeHeaderView(input: {\n copy: IssueManagerI18nRuntime;\n isSidebarAutoCollapsed: boolean;\n isSidebarCollapsed: boolean;\n nodeId: string;\n onToggleSidebar: (nextCollapsed: boolean) => void;\n workspaceId: string;\n}) {\n const [manualCollapsed, setManualCollapsed] = useState(\n input.isSidebarCollapsed\n );\n\n useEffect(() => {\n setManualCollapsed(input.isSidebarCollapsed);\n }, [input.isSidebarCollapsed]);\n\n useIssueManagerTaskListCollapsedSync({\n nodeId: input.nodeId,\n onCollapsedChange: setManualCollapsed,\n workspaceId: input.workspaceId\n });\n\n const effectiveCollapsed = input.isSidebarAutoCollapsed || manualCollapsed;\n\n return {\n effectiveCollapsed,\n toggleLabel: effectiveCollapsed\n ? input.copy.t(\"actions.expandIssueList\")\n : input.copy.t(\"actions.collapseIssueList\"),\n toggleSidebar: () => {\n input.onToggleSidebar(!effectiveCollapsed);\n }\n };\n}\n\nfunction issueManagerNodeScopeKey(input: {\n nodeId: string;\n workspaceId: string;\n}): string {\n return `${input.workspaceId}\\0${input.nodeId}`;\n}\n\nexport function resolveIssueManagerSelectedIssue(input: {\n issueDetail: IssueManagerIssueSummary | null;\n issues: readonly IssueManagerIssueSummary[];\n selectedIssueId: string | null;\n}): IssueManagerIssueSummary | null {\n if (!input.selectedIssueId) {\n return null;\n }\n\n return (\n input.issueDetail ??\n input.issues.find((issue) => issue.issueId === input.selectedIssueId) ??\n null\n );\n}\n\nexport function resolveIssueManagerSelectedTask(input: {\n selectedTaskId: string | null;\n taskDetail: IssueManagerTaskSummary | null;\n tasks: readonly IssueManagerTaskSummary[];\n}): IssueManagerTaskSummary | null {\n if (!input.selectedTaskId) {\n return null;\n }\n\n return (\n input.taskDetail ??\n input.tasks.find((task) => task.taskId === input.selectedTaskId) ??\n null\n );\n}\n","export {\n collectVisibleTreeEntries,\n createWorkspaceFileReferenceDirectoryStateFromSnapshot as createReferenceDirectoryStateFromSnapshot,\n mergeExpandedFolderPaths,\n mergePrefetchedDirectoryState,\n normalizeDirectoryPath,\n prefetchReferenceTree,\n workspaceFileReferenceDefaultExpandedDepth as issueManagerReferenceDefaultExpandedDepth,\n type WorkspaceFileReferenceDirectoryState as IssueManagerReferenceDirectoryState\n} from \"@tutti-os/workspace-file-reference/react\";\n","import { useEffect, useMemo, useState } from \"react\";\nimport type { RichTextAtProvider } from \"@tutti-os/ui-rich-text/types\";\nimport type { WorkspaceUserProjectServiceLike } from \"@tutti-os/workspace-user-project/contracts\";\nimport type { WorkspaceUserProjectI18nRuntime } from \"@tutti-os/workspace-user-project/i18n\";\nimport type {\n IssueManagerAgentProviderOption,\n IssueManagerContextRef,\n IssueManagerFileReference,\n IssueManagerIssueDetail,\n IssueManagerIssueSummary,\n IssueManagerExecutionDirectoryProject,\n IssueManagerNodeState,\n IssueManagerOpenSource,\n IssueManagerPriority,\n IssueManagerRun,\n IssueManagerTaskDetail,\n IssueManagerTopic,\n IssueManagerCreateTopicInput,\n IssueManagerUpdateTopicInput\n} from \"../../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../../core/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../../i18n/issueManagerI18n.ts\";\nimport type { IssueManagerControllerService } from \"../../../../services/issueManagerControllerService.interface.ts\";\nimport {\n resolveIssueManagerAgentProviderOptions,\n resolveIssueManagerControllerCapabilities\n} from \"./IssueManagerControllerCapabilities.ts\";\nimport type { IssueManagerFloatingNoticeViewState } from \"../shell/IssueManagerNoticeState.ts\";\nimport type {\n AsyncCollectionState,\n IssueDraft,\n IssueManagerNotificationState,\n TaskDraft\n} from \"../../../../services/controllerTypes.ts\";\nimport type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"../../../../services/controllerModel.ts\";\nimport { createIssueManagerControllerActionsBridge } from \"./createIssueManagerControllerActionsBridge.ts\";\nimport { createIssueManagerControllerBindings } from \"./createIssueManagerControllerBindings.ts\";\nimport { resolveIssueManagerTopicDeleteErrorMessage } from \"../../../../services/internal/controllerUtils.ts\";\nimport { useIssueManagerControllerRuntime } from \"./useIssueManagerControllerRuntime.ts\";\n\nexport type IssueManagerRichTextSurface = \"issue\" | \"task\";\n\nexport interface UseIssueManagerControllerInput {\n feature: IssueManagerFeature;\n openSource?: IssueManagerOpenSource;\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 canOpenAgentSessions: boolean;\n canSelectExecutionDirectory: boolean;\n canInviteCollaborators: boolean;\n canReferenceWorkspaceFiles: boolean;\n canUploadWorkspaceFiles: boolean;\n copy: IssueManagerI18nRuntime;\n createTopic: (\n input: Omit<IssueManagerCreateTopicInput, \"workspaceId\">\n ) => Promise<void>;\n deleteTopic: (topicId: string) => Promise<void>;\n createTaskDraft: () => void;\n deleteIssue: (options?: { skipConfirmation?: boolean }) => Promise<void>;\n deleteTask: (options?: { skipConfirmation?: boolean }) => Promise<void>;\n dismissNotification: () => void;\n insertReferences: (parentKind: \"issue\" | \"task\") => Promise<void>;\n issueDetail: AsyncCollectionState<IssueManagerIssueDetail | null>;\n issueDraft: IssueDraft;\n issueEditorMode: IssueManagerEditorMode;\n floatingNotice: IssueManagerFloatingNoticeViewState | null;\n issues: AsyncCollectionState<IssueManagerIssueSummary[]>;\n isRunningTask: boolean;\n nodeState: IssueManagerNodeState;\n notification: IssueManagerNotificationState | null;\n openAgentSession: (run: IssueManagerRun) => Promise<void>;\n openReference: (reference: IssueManagerFileReference) => Promise<void>;\n providerOptions: readonly IssueManagerAgentProviderOption[];\n executionDirectoryProjectService: WorkspaceUserProjectServiceLike | null;\n listExecutionDirectoryProjects: () => Promise<{\n projects: IssueManagerExecutionDirectoryProject[];\n }>;\n reportIssueSearchUsage: (query: string) => void;\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 setSelectedTaskStatus: (status: \"completed\" | \"not_started\") => Promise<void>;\n resolveRichTextAtProviders: (\n surface: IssueManagerRichTextSurface\n ) => readonly RichTextAtProvider[];\n selectIssue: (issueId: string | null) => void;\n selectTask: (taskId: string | null) => void;\n selectTopic: (topicId: string) => void;\n setIssueContent: (content: string) => void;\n setIssueDraft: (patch: Partial<IssueDraft>) => void;\n setIssueEditorMode: (mode: IssueManagerEditorMode) => void;\n setIssueSearchQuery: (query: string) => void;\n setIssueStatusFilter: (\n value: IssueManagerNodeState[\"issueStatusFilter\"]\n ) => void;\n setIssueTitle: (title: string) => void;\n setReferenceTarget: (target: IssueManagerReferenceTarget | null) => void;\n setSelectedAgentProvider: (provider: string) => void;\n useExecutionDirectory: (path: string | null) => Promise<void>;\n setTaskContent: (content: string) => void;\n setTaskDraft: (patch: Partial<TaskDraft>) => void;\n setTaskEditorMode: (mode: IssueManagerEditorMode) => void;\n setTaskListCollapsed: (collapsed: boolean) => void;\n setTaskPriority: (priority: IssueManagerPriority) => void;\n setTaskTitle: (title: string) => void;\n shareSelection: () => Promise<void>;\n startTaskBreakdown: (providerOverride?: string) => Promise<void>;\n submitReferenceSelection: (\n refs: IssueManagerFileReference[]\n ) => Promise<void>;\n taskDetail: AsyncCollectionState<IssueManagerTaskDetail | null>;\n taskDraft: TaskDraft;\n taskEditorMode: IssueManagerEditorMode;\n topics: AsyncCollectionState<IssueManagerTopic[]>;\n updateTopic: (\n input: Omit<IssueManagerUpdateTopicInput, \"workspaceId\">\n ) => Promise<void>;\n uploadReferences: (\n parentKind: \"issue\" | \"task\",\n mode: \"files\" | \"folder\"\n ) => Promise<void>;\n workspaceUserProjectI18n: WorkspaceUserProjectI18nRuntime;\n workspaceId: string;\n}\n\nexport function useIssueManagerController({\n feature,\n openSource,\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 openSource,\n onStateChange,\n service,\n state,\n workspaceId\n });\n const {\n issueDetail,\n issueDraft,\n issueEditorMode,\n issues,\n isRunningTask,\n nodeState,\n notification,\n referenceTarget,\n taskDetail,\n taskDraft,\n taskEditorMode,\n topics\n } = snapshot;\n const {\n canOpenAgentSessions,\n canInviteCollaborators,\n canReferenceWorkspaceFiles,\n canSelectExecutionDirectory,\n canUploadWorkspaceFiles\n } = useMemo(\n () => resolveIssueManagerControllerCapabilities(feature),\n [feature]\n );\n const [providerOptions, setProviderOptions] = useState(() =>\n resolveIssueManagerAgentProviderOptions(feature)\n );\n\n useEffect(() => {\n setProviderOptions(resolveIssueManagerAgentProviderOptions(feature));\n return feature.agentProviderOptions?.subscribe?.(() => {\n setProviderOptions(resolveIssueManagerAgentProviderOptions(feature));\n });\n }, [feature]);\n\n const actions = createIssueManagerControllerActionsBridge({\n controllerSession,\n copy,\n feature,\n issueDetail,\n issueDraft,\n issueEditorMode,\n nodeState,\n referenceTarget,\n taskDetail,\n taskDraft,\n taskEditorMode,\n workspaceId\n });\n const bindings = createIssueManagerControllerBindings({\n controllerSession,\n feature,\n issueEditorMode,\n nodeState,\n onResolveRichTextAtProviders: resolveRichTextAtProviders,\n taskEditorMode,\n workspaceId\n });\n const notifyTopicOperationFailure = (message: string) => {\n feature.notifications?.tips(message);\n controllerSession.setNotification((current) => ({\n id: (current?.id ?? 0) + 1,\n title: message,\n tone: \"destructive\"\n }));\n };\n\n return {\n ...actions,\n ...bindings,\n canOpenAgentSessions,\n canInviteCollaborators,\n canReferenceWorkspaceFiles,\n canSelectExecutionDirectory,\n canUploadWorkspaceFiles,\n copy,\n async createTopic(topicInput) {\n try {\n const topic = await feature.backend.createTopic({\n ...topicInput,\n workspaceId\n });\n controllerSession.updateNodeState((current) => ({\n ...current,\n activeTopicId: topic.topicId\n }));\n controllerSession.refreshAll();\n } catch {\n notifyTopicOperationFailure(copy.t(\"messages.topicCreateFailed\"));\n }\n },\n async deleteTopic(topicId) {\n const trimmedTopicId = topicId.trim();\n if (!trimmedTopicId) {\n return;\n }\n try {\n await feature.backend.deleteTopic({\n topicId: trimmedTopicId,\n workspaceId\n });\n if (nodeState.activeTopicId === trimmedTopicId) {\n controllerSession.updateNodeState((current) => ({\n ...current,\n activeTopicId: null,\n selectedIssueId: null,\n selectedTaskId: null\n }));\n }\n controllerSession.refreshAll();\n } catch (error) {\n notifyTopicOperationFailure(\n resolveIssueManagerTopicDeleteErrorMessage(error, copy)\n );\n }\n },\n issueDetail,\n issueDraft,\n issueEditorMode,\n floatingNotice,\n issues,\n isRunningTask,\n nodeState,\n notification,\n providerOptions,\n executionDirectoryProjectService:\n feature.executionDirectoryPicker?.service ?? null,\n workspaceUserProjectI18n: feature.workspaceUserProjectI18n,\n listExecutionDirectoryProjects: () =>\n feature.executionDirectoryPicker?.list() ??\n Promise.resolve({ projects: [] }),\n referenceTarget,\n selectTopic(topicId: string) {\n const trimmedTopicId = topicId.trim();\n if (!trimmedTopicId) {\n return;\n }\n if (nodeState.activeTopicId !== trimmedTopicId) {\n void Promise.resolve(\n feature.analytics?.track({\n name: \"issue_manager.topic_changed\",\n params: {}\n })\n ).catch(() => undefined);\n }\n controllerSession.updateNodeState((current) => ({\n ...current,\n activeTopicId: trimmedTopicId\n }));\n },\n taskDetail,\n taskDraft,\n taskEditorMode,\n topics,\n async updateTopic(topicInput) {\n try {\n await feature.backend.updateTopic({\n ...topicInput,\n workspaceId\n });\n controllerSession.refreshAll();\n } catch {\n notifyTopicOperationFailure(copy.t(\"messages.topicUpdateFailed\"));\n }\n },\n workspaceId\n };\n}\n","import type {\n IssueManagerAgentProviderOption,\n IssueManagerFileAdapter\n} from \"../../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../../core/index.ts\";\n\nexport const defaultIssueManagerAgentProviderOptions = [\n {\n label: \"Codex\",\n provider: \"codex\"\n }\n] as const satisfies readonly IssueManagerAgentProviderOption[];\n\nexport function resolveIssueManagerAgentProviderOptions(\n feature: IssueManagerFeature\n): readonly IssueManagerAgentProviderOption[] {\n if (!feature.agentProviderOptions) {\n return defaultIssueManagerAgentProviderOptions;\n }\n\n const configuredOptions = feature.agentProviderOptions.getOptions();\n const normalizedOptions = configuredOptions\n .map((option) => {\n const disabledReason = option.disabledReason?.trim();\n return {\n ...(option.disabled === true ? { disabled: true } : {}),\n ...(disabledReason ? { disabledReason } : {}),\n ...(option.iconUrl?.trim() ? { iconUrl: option.iconUrl.trim() } : {}),\n label: option.label.trim() || option.provider.trim(),\n provider: option.provider.trim()\n };\n })\n .filter((option) => option.provider && option.label);\n\n return normalizedOptions;\n}\n\nexport interface IssueManagerControllerCapabilities {\n canOpenAgentSessions: boolean;\n canSelectExecutionDirectory: boolean;\n canInviteCollaborators: boolean;\n canReferenceWorkspaceFiles: boolean;\n canUploadWorkspaceFiles: boolean;\n}\n\nexport function resolveIssueManagerControllerCapabilities(\n feature: IssueManagerFeature\n): IssueManagerControllerCapabilities {\n return {\n canOpenAgentSessions:\n typeof feature.agentSessionOpener?.openSession === \"function\",\n canSelectExecutionDirectory:\n typeof feature.executionDirectoryPicker?.selectDirectory === \"function\",\n canInviteCollaborators:\n feature.ui.showInviteCollaborator === true &&\n typeof feature.shareAdapter?.createIssueLink === \"function\",\n canReferenceWorkspaceFiles:\n hasFileAdapterMethod(feature.fileAdapter, \"requestReferences\") ||\n hasFileAdapterMethod(feature.fileAdapter, \"loadReferenceTree\") ||\n hasFileAdapterMethod(feature.fileAdapter, \"listDirectory\") ||\n hasFileAdapterMethod(feature.fileAdapter, \"searchReferences\"),\n canUploadWorkspaceFiles: hasFileAdapterMethod(\n feature.fileAdapter,\n \"requestUpload\"\n )\n };\n}\n\nfunction hasFileAdapterMethod(\n fileAdapter: IssueManagerFileAdapter | undefined,\n methodName:\n | \"listDirectory\"\n | \"loadReferenceTree\"\n | \"requestReferences\"\n | \"requestUpload\"\n | \"searchReferences\"\n): boolean {\n return typeof Reflect.get(fileAdapter ?? {}, methodName) === \"function\";\n}\n","import type { IssueManagerNodeState } from \"../../contracts/index.ts\";\nimport type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"./model.ts\";\nimport type {\n IssueDraft,\n IssueManagerNotificationTone,\n TaskDraft\n} from \"./controllerTypes.ts\";\nimport {\n applyIssueManagerIssueSaved,\n applyIssueManagerTaskSaved\n} from \"./controllerState.ts\";\n\nexport interface IssueManagerControllerOutcome {\n issueDraft?: (current: IssueDraft) => IssueDraft;\n issueEditorMode?: IssueManagerEditorMode;\n nodeState?: (current: IssueManagerNodeState) => IssueManagerNodeState;\n notificationKey?: string;\n referenceTarget?: IssueManagerReferenceTarget | null;\n refreshAll?: boolean;\n refreshDetails?: boolean;\n taskDraft?: (current: TaskDraft) => TaskDraft;\n taskEditorMode?: IssueManagerEditorMode;\n}\n\nexport interface ApplyIssueManagerControllerOutcomeInput {\n notify: (title: string, tone?: IssueManagerNotificationTone) => void;\n outcome: IssueManagerControllerOutcome;\n refreshAll: () => void;\n refreshDetails: () => void;\n setIssueDraftInternal: (updater: (current: IssueDraft) => IssueDraft) => void;\n setIssueEditorModeState: (mode: IssueManagerEditorMode) => void;\n setReferenceTarget: (target: IssueManagerReferenceTarget | null) => void;\n setTaskDraftInternal: (updater: (current: TaskDraft) => TaskDraft) => void;\n setTaskEditorModeState: (mode: IssueManagerEditorMode) => void;\n translate: (key: string) => string;\n updateNodeState: (\n updater: (current: IssueManagerNodeState) => IssueManagerNodeState\n ) => void;\n}\n\nexport function applyIssueManagerControllerOutcome(\n input: ApplyIssueManagerControllerOutcomeInput\n): void {\n if (input.outcome.notificationKey) {\n input.notify(input.translate(input.outcome.notificationKey));\n }\n if (input.outcome.issueDraft) {\n input.setIssueDraftInternal(input.outcome.issueDraft);\n }\n if (input.outcome.issueEditorMode) {\n input.setIssueEditorModeState(input.outcome.issueEditorMode);\n }\n if (\"referenceTarget\" in input.outcome) {\n input.setReferenceTarget(input.outcome.referenceTarget ?? null);\n }\n if (input.outcome.taskDraft) {\n input.setTaskDraftInternal(input.outcome.taskDraft);\n }\n if (input.outcome.taskEditorMode) {\n input.setTaskEditorModeState(input.outcome.taskEditorMode);\n }\n if (input.outcome.nodeState) {\n input.updateNodeState(input.outcome.nodeState);\n }\n if (input.outcome.refreshAll) {\n input.refreshAll();\n }\n if (input.outcome.refreshDetails) {\n input.refreshDetails();\n }\n}\n\nexport function createIssueManagerRunTaskSuccessOutcome(input: {\n status: string;\n}): IssueManagerControllerOutcome {\n return {\n notificationKey:\n input.status === \"completed\" || input.status === \"opened\"\n ? undefined\n : \"messages.runFailed\"\n };\n}\n\nexport function createIssueManagerSaveIssueSuccessOutcome(\n issueId: string\n): IssueManagerControllerOutcome {\n return {\n issueEditorMode: \"read\",\n nodeState: (current) => applyIssueManagerIssueSaved(current, issueId),\n refreshAll: true\n };\n}\n\nexport function createIssueManagerSaveTaskSuccessOutcome(\n taskId: string\n): IssueManagerControllerOutcome {\n return {\n nodeState: (current) => applyIssueManagerTaskSaved(current, taskId),\n refreshAll: true,\n taskEditorMode: \"read\"\n };\n}\n","import type {\n IssueManagerContextRef,\n IssueManagerFileReference\n} from \"../../../contracts/index.ts\";\nimport {\n appendIssueManagerWorkspaceFileLinksToContent,\n type IssueManagerFeature\n} from \"../../../core/index.ts\";\nimport type { IssueManagerReferenceTarget } from \"../model.ts\";\nimport {\n toContextRefInput,\n toIssueManagerWorkspaceFileLinkInput\n} from \"../controllerUtils.ts\";\n\nexport function canIssueManagerRequestReferencesDirectly(\n fileAdapter: IssueManagerFeature[\"fileAdapter\"]\n): fileAdapter is NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n requestReferences: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"requestReferences\"]\n >;\n} {\n return Boolean(\n fileAdapter?.requestReferences &&\n !fileAdapter.loadReferenceTree &&\n !fileAdapter.listDirectory &&\n !fileAdapter.searchReferences\n );\n}\n\nexport async function executeIssueManagerRequestReferences(input: {\n fileAdapter: NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n requestReferences: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"requestReferences\"]\n >;\n };\n workspaceId: string;\n}): Promise<IssueManagerFileReference[]> {\n return input.fileAdapter.requestReferences({\n workspaceId: input.workspaceId\n });\n}\n\nexport function canIssueManagerUploadReferences(\n fileAdapter: IssueManagerFeature[\"fileAdapter\"]\n): fileAdapter is NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n requestUpload: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"requestUpload\"]\n >;\n} {\n return typeof fileAdapter?.requestUpload === \"function\";\n}\n\nexport function canIssueManagerOpenReferences(\n fileAdapter: IssueManagerFeature[\"fileAdapter\"]\n): fileAdapter is NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n openReference: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"openReference\"]\n >;\n} {\n return typeof fileAdapter?.openReference === \"function\";\n}\n\nexport async function executeIssueManagerUploadReferences(input: {\n fileAdapter: NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n requestUpload: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"requestUpload\"]\n >;\n };\n mode: \"files\" | \"folder\";\n workspaceId: string;\n}): Promise<IssueManagerFileReference[]> {\n const refs = await input.fileAdapter.requestUpload({\n mode: input.mode,\n targetDirectoryPath: \"/\",\n workspaceId: input.workspaceId\n });\n\n if (refs.length === 0) {\n return refs;\n }\n\n await input.fileAdapter.refreshTree?.({\n depth: 1,\n paths: refs.map((ref) => ref.path),\n workspaceId: input.workspaceId\n });\n\n return refs;\n}\n\nexport function resolveIssueManagerReferenceInsertionContent(input: {\n content: string;\n refs: IssueManagerFileReference[];\n}): string {\n const preparedRefs = prepareIssueManagerReferences(input.refs);\n if (preparedRefs.length === 0) {\n return input.content;\n }\n\n return appendIssueManagerWorkspaceFileLinksToContent(\n input.content,\n preparedRefs.map(toIssueManagerWorkspaceFileLinkInput)\n );\n}\n\nexport async function executeIssueManagerAttachReferences(input: {\n backend: IssueManagerFeature[\"backend\"];\n refs: IssueManagerFileReference[];\n selectedIssueId: string | null;\n target: Exclude<IssueManagerReferenceTarget, { mode: \"insert\" }> | null;\n workspaceId: string;\n}): Promise<boolean> {\n const preparedRefs = prepareIssueManagerReferences(input.refs);\n if (!input.target || preparedRefs.length === 0 || !input.selectedIssueId) {\n return false;\n }\n\n await input.backend.addContextRefs(\n input.target.parentKind === \"task\"\n ? {\n issueId: input.selectedIssueId,\n parentKind: \"task\",\n refs: preparedRefs.map(toContextRefInput),\n taskId: input.target.taskId,\n workspaceId: input.workspaceId\n }\n : {\n issueId: input.selectedIssueId,\n parentKind: \"issue\",\n refs: preparedRefs.map(toContextRefInput),\n workspaceId: input.workspaceId\n }\n );\n\n return true;\n}\n\nexport async function executeIssueManagerOpenReference(input: {\n fileAdapter: NonNullable<IssueManagerFeature[\"fileAdapter\"]> & {\n openReference: NonNullable<\n NonNullable<IssueManagerFeature[\"fileAdapter\"]>[\"openReference\"]\n >;\n };\n reference: IssueManagerFileReference;\n}): Promise<void> {\n await input.fileAdapter.openReference(input.reference);\n}\n\nexport async function executeIssueManagerRemoveContextRef(input: {\n backend: IssueManagerFeature[\"backend\"];\n ref: IssueManagerContextRef;\n workspaceId: string;\n}): Promise<void> {\n await input.backend.removeContextRef(\n input.ref.parentKind === \"task\"\n ? {\n contextRefId: input.ref.contextRefId,\n issueId: input.ref.issueId,\n parentKind: \"task\",\n taskId: input.ref.taskId,\n workspaceId: input.workspaceId\n }\n : {\n contextRefId: input.ref.contextRefId,\n issueId: input.ref.issueId,\n parentKind: \"issue\",\n workspaceId: input.workspaceId\n }\n );\n}\n\nfunction prepareIssueManagerReferences(\n refs: IssueManagerFileReference[]\n): IssueManagerFileReference[] {\n return refs.filter((ref) => ref.path.trim().length > 0);\n}\n","import type {\n IssueManagerFileReference,\n IssueManagerNodeState\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerReferenceTarget } from \"../model.ts\";\nimport type { IssueDraft, TaskDraft } from \"../controllerTypes.ts\";\nimport { resolveIssueManagerReferenceInsertionContent } from \"./controllerReferenceCommands.ts\";\n\nexport interface IssueManagerReferenceOutcome {\n issueDraft?: (current: IssueDraft) => IssueDraft;\n nodeState?: (current: IssueManagerNodeState) => IssueManagerNodeState;\n referenceTarget?: IssueManagerReferenceTarget | null;\n refreshAll?: boolean;\n refreshDetails?: boolean;\n taskDraft?: (current: TaskDraft) => TaskDraft;\n}\n\nexport function createIssueManagerOpenReferencePickerOutcome(\n target: IssueManagerReferenceTarget\n): IssueManagerReferenceOutcome {\n return {\n referenceTarget: target\n };\n}\n\nexport function createIssueManagerAttachReferencesOutcome(\n attached: boolean\n): IssueManagerReferenceOutcome {\n return {\n referenceTarget: null,\n refreshDetails: attached\n };\n}\n\nexport function createIssueManagerInsertReferencesOutcome(input: {\n refs: IssueManagerFileReference[];\n target: Extract<IssueManagerReferenceTarget, { mode: \"insert\" }>;\n}): IssueManagerReferenceOutcome {\n return input.target.parentKind === \"issue\"\n ? {\n issueDraft: (current) => ({\n ...current,\n content: resolveIssueManagerReferenceInsertionContent({\n content: current.content,\n refs: input.refs\n })\n }),\n referenceTarget: null\n }\n : {\n referenceTarget: null,\n taskDraft: (current) => ({\n ...current,\n content: resolveIssueManagerReferenceInsertionContent({\n content: current.content,\n refs: input.refs\n })\n })\n };\n}\n","import type {\n IssueManagerIssueDetail,\n IssueManagerTaskDetail\n} from \"../../contracts/index.ts\";\nimport type { IssueDraft, TaskDraft } from \"./controllerTypes.ts\";\n\nexport type IssueManagerSavePlan<TResult> =\n | {\n kind: \"blocked\";\n notificationKey: \"messages.titleRequired\" | \"messages.topicListEmpty\";\n }\n | ({ kind: \"ready\" } & TResult);\n\nexport function createIssueManagerRunTaskPlan(input: {\n issueDetail: IssueManagerIssueDetail | null;\n providerOverride?: string;\n selectedAgentProvider: string;\n taskDetail: IssueManagerTaskDetail | null;\n}):\n | {\n kind: \"ready\";\n provider: string;\n shouldUpdateSelectedAgentProvider: boolean;\n }\n | { kind: \"skip\" } {\n if (!input.issueDetail) {\n return { kind: \"skip\" };\n }\n\n const provider =\n input.providerOverride?.trim() || input.selectedAgentProvider.trim();\n if (!provider) {\n return { kind: \"skip\" };\n }\n\n return {\n kind: \"ready\",\n provider,\n shouldUpdateSelectedAgentProvider: provider !== input.selectedAgentProvider\n };\n}\n\nexport function createIssueManagerSaveIssuePlan(input: {\n activeTopicId: string | null;\n issueDraft: IssueDraft;\n}): IssueManagerSavePlan<{ activeTopicId: string }> {\n if (!input.activeTopicId) {\n return {\n kind: \"blocked\",\n notificationKey: \"messages.topicListEmpty\"\n };\n }\n\n const title = input.issueDraft.title.trim();\n if (!title) {\n return {\n kind: \"blocked\",\n notificationKey: \"messages.titleRequired\"\n };\n }\n\n return { kind: \"ready\", activeTopicId: input.activeTopicId };\n}\n\nexport function createIssueManagerSaveTaskPlan(input: {\n selectedIssueId: string | null;\n taskDraft: TaskDraft;\n}): IssueManagerSavePlan<{ selectedIssueId: string }> | { kind: \"skip\" } {\n if (!input.selectedIssueId) {\n return { kind: \"skip\" };\n }\n\n const title = input.taskDraft.title.trim();\n if (!title) {\n return {\n kind: \"blocked\",\n notificationKey: \"messages.titleRequired\"\n };\n }\n\n return {\n kind: \"ready\",\n selectedIssueId: input.selectedIssueId\n };\n}\n\nexport function shouldIssueManagerNotifyRunFailure(status: string): boolean {\n return status !== \"completed\";\n}\n","import type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"../model.ts\";\n\nexport function createIssueManagerAttachReferenceTarget(\n parentKind: \"issue\" | \"task\",\n selectedTaskId: string | null\n): Extract<IssueManagerReferenceTarget, { mode: \"attach\" }> {\n return parentKind === \"task\"\n ? {\n mode: \"attach\",\n parentKind: \"task\",\n taskId: selectedTaskId ?? \"\"\n }\n : {\n mode: \"attach\",\n parentKind: \"issue\"\n };\n}\n\nexport function createIssueManagerInsertReferenceTarget(\n parentKind: \"issue\" | \"task\",\n selectedTaskId: string | null\n): Extract<IssueManagerReferenceTarget, { mode: \"insert\" }> {\n return parentKind === \"task\"\n ? {\n mode: \"insert\",\n parentKind: \"task\",\n taskId: selectedTaskId ?? \"\"\n }\n : {\n mode: \"insert\",\n parentKind: \"issue\"\n };\n}\n\nexport function createIssueManagerAttachReferencesPlan(input: {\n hasFileAdapter: boolean;\n parentKind: \"issue\" | \"task\";\n requestReferencesDirectly: boolean;\n selectedTaskId: string | null;\n}):\n | {\n kind: \"open_picker\";\n target: Extract<IssueManagerReferenceTarget, { mode: \"attach\" }>;\n }\n | {\n kind: \"request_directly\";\n target: Extract<IssueManagerReferenceTarget, { mode: \"attach\" }>;\n }\n | { kind: \"skip\" } {\n if (!input.hasFileAdapter) {\n return { kind: \"skip\" };\n }\n if (input.parentKind === \"task\" && !input.selectedTaskId) {\n return { kind: \"skip\" };\n }\n\n const target = createIssueManagerAttachReferenceTarget(\n input.parentKind,\n input.selectedTaskId\n );\n return input.requestReferencesDirectly\n ? { kind: \"request_directly\", target }\n : { kind: \"open_picker\", target };\n}\n\nexport function createIssueManagerInsertReferencesPlan(input: {\n hasFileAdapter: boolean;\n parentKind: \"issue\" | \"task\";\n requestReferencesDirectly: boolean;\n selectedTaskId: string | null;\n taskEditorMode: IssueManagerEditorMode;\n}):\n | {\n kind: \"open_picker\";\n target: Extract<IssueManagerReferenceTarget, { mode: \"insert\" }>;\n }\n | {\n kind: \"request_directly\";\n target: Extract<IssueManagerReferenceTarget, { mode: \"insert\" }>;\n }\n | { kind: \"skip\" } {\n if (!input.hasFileAdapter) {\n return { kind: \"skip\" };\n }\n if (\n input.parentKind === \"task\" &&\n !input.selectedTaskId &&\n input.taskEditorMode !== \"create\"\n ) {\n return { kind: \"skip\" };\n }\n\n const target = createIssueManagerInsertReferenceTarget(\n input.parentKind,\n input.selectedTaskId\n );\n return input.requestReferencesDirectly\n ? { kind: \"request_directly\", target }\n : { kind: \"open_picker\", target };\n}\n","import type {\n IssueManagerIssueDetail,\n IssueManagerTaskDetail\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../core/index.ts\";\n\nexport async function executeIssueManagerRunTask(input: {\n executionDirectory?: string | null;\n feature: IssueManagerFeature;\n issue: IssueManagerIssueDetail[\"issue\"];\n provider: string;\n task?: IssueManagerTaskDetail[\"task\"];\n workspaceId: string;\n}): Promise<{ status: string }> {\n const agentSessionId = createIssueManagerAgentSessionId();\n const result = await input.feature.agentRunner.runTask({\n agentSessionId,\n ...(input.executionDirectory?.trim()\n ? { executionDirectory: input.executionDirectory.trim() }\n : {}),\n issue: input.issue,\n provider: input.provider,\n ...(input.task ? { task: input.task } : {}),\n workspaceId: input.workspaceId\n });\n\n return {\n status: result.status\n };\n}\n\nfunction createIssueManagerAgentSessionId(): string {\n const randomUUID = globalThis.crypto?.randomUUID?.();\n if (randomUUID) {\n return randomUUID;\n }\n const bytes = new Uint8Array(16);\n const crypto = globalThis.crypto;\n if (crypto?.getRandomValues) {\n crypto.getRandomValues(bytes);\n } else {\n for (let index = 0; index < bytes.length; index += 1) {\n bytes[index] = Math.floor(Math.random() * 256);\n }\n }\n bytes[6] = ((bytes[6] ?? 0) & 0x0f) | 0x40;\n bytes[8] = ((bytes[8] ?? 0) & 0x3f) | 0x80;\n const hex = Array.from(bytes, (byte) =>\n byte.toString(16).padStart(2, \"0\")\n ).join(\"\");\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n","import type {\n IssueManagerContextRef,\n IssueManagerFileReference,\n IssueManagerIssueDetail,\n IssueManagerIssueSummary,\n IssueManagerTaskDetail,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport {\n extractIssueManagerWorkspaceFileLinksFromContent,\n normalizeIssueManagerContent,\n type IssueManagerFeature\n} from \"../../../core/index.ts\";\nimport type { IssueManagerEditorMode } from \"../model.ts\";\nimport type { IssueDraft, TaskDraft } from \"../controllerTypes.ts\";\n\nexport async function executeIssueManagerSaveIssue(input: {\n activeTopicId: string;\n feature: IssueManagerFeature;\n issueDetail: IssueManagerIssueDetail | null;\n issueDraft: IssueDraft;\n issueEditorMode: IssueManagerEditorMode;\n selectedIssueId: string | null;\n workspaceId: string;\n}): Promise<{\n addedContextRefs: IssueManagerFileReference[];\n content: string;\n removedContextRefs: IssueManagerContextRef[];\n savedIssue: IssueManagerIssueSummary;\n}> {\n const content = normalizeIssueManagerContent(input.issueDraft.content);\n const savedIssue =\n input.issueEditorMode === \"create\"\n ? await input.feature.backend.createIssue({\n content,\n title: input.issueDraft.title.trim(),\n topicId: input.activeTopicId,\n workspaceId: input.workspaceId\n })\n : await input.feature.backend.updateIssue({\n content,\n issueId: input.selectedIssueId ?? \"\",\n title: input.issueDraft.title.trim(),\n workspaceId: input.workspaceId\n });\n\n const { addedContextRefs, removedContextRefs } =\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 previousContent:\n input.issueEditorMode === \"create\"\n ? \"\"\n : (input.issueDetail?.issue.content ?? \"\"),\n workspaceId: input.workspaceId\n });\n\n return {\n addedContextRefs,\n content,\n removedContextRefs,\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<{\n addedContextRefs: IssueManagerFileReference[];\n content: string;\n removedContextRefs: IssueManagerContextRef[];\n savedTask: IssueManagerTaskSummary;\n}> {\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 const { addedContextRefs, removedContextRefs } =\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 previousContent:\n input.taskEditorMode === \"create\"\n ? \"\"\n : (input.taskDetail?.task.content ?? \"\"),\n taskId: savedTask.taskId,\n workspaceId: input.workspaceId\n });\n\n return {\n addedContextRefs,\n content,\n removedContextRefs,\n savedTask\n };\n}\n\ninterface IssueManagerContentReferenceSyncResult {\n addedContextRefs: IssueManagerFileReference[];\n removedContextRefs: IssueManagerContextRef[];\n}\n\nasync function syncIssueManagerContentReferences(input: {\n backend: IssueManagerFeature[\"backend\"];\n content: string;\n existingRefs: IssueManagerContextRef[];\n issueId: string;\n parentKind: \"issue\" | \"task\";\n previousContent: string;\n taskId?: string;\n workspaceId: string;\n}): Promise<IssueManagerContentReferenceSyncResult> {\n const existingPaths = new Set(\n input.existingRefs\n .map((ref) => ref.path.trim())\n .filter((path) => path.length > 0)\n );\n const contentRefs = extractIssueManagerWorkspaceFileLinksFromContent(\n input.content\n );\n const contentPaths = new Set(\n contentRefs.map((ref) => ref.path.trim()).filter((path) => path.length > 0)\n );\n const previousContentPaths = new Set(\n extractIssueManagerWorkspaceFileLinksFromContent(input.previousContent)\n .map((ref) => ref.path.trim())\n .filter((path) => path.length > 0)\n );\n const addedContextRefs = contentRefs.filter((ref) => {\n const path = ref.path.trim();\n return path.length > 0 && !existingPaths.has(path);\n });\n const removedContextRefs = input.existingRefs.filter((ref) => {\n const path = ref.path.trim();\n return previousContentPaths.has(path) && !contentPaths.has(path);\n });\n const missingRefs = addedContextRefs.map((ref) => ({\n displayName: ref.name,\n path: ref.path,\n refType: ref.kind\n }));\n\n if (missingRefs.length > 0) {\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\n for (const ref of removedContextRefs) {\n await input.backend.removeContextRef(\n ref.parentKind === \"task\"\n ? {\n contextRefId: ref.contextRefId,\n issueId: ref.issueId,\n parentKind: \"task\",\n taskId: ref.taskId,\n workspaceId: input.workspaceId\n }\n : {\n contextRefId: ref.contextRefId,\n issueId: ref.issueId,\n parentKind: \"issue\",\n workspaceId: input.workspaceId\n }\n );\n }\n\n return {\n addedContextRefs: addedContextRefs.map((ref) => ({\n displayName: ref.name,\n kind: ref.kind,\n path: ref.path\n })),\n removedContextRefs\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 { IssueManagerFileReference } from \"../../contracts/index.ts\";\nimport {\n extractIssueManagerWorkspaceFileLinksFromContent,\n type IssueManagerFeature\n} from \"../../core/index.ts\";\n\nexport function trackIssueManagerAnalytics(\n feature: IssueManagerFeature,\n event: Parameters<NonNullable<IssueManagerFeature[\"analytics\"]>[\"track\"]>[0]\n): void {\n void Promise.resolve(feature.analytics?.track(event)).catch(() => undefined);\n}\n\nexport function trackIssueManagerContextRefsAdded(input: {\n feature: IssueManagerFeature;\n refs: readonly IssueManagerFileReference[];\n targetType: \"issue\" | \"task\";\n}): void {\n const seen = new Set<string>();\n for (const ref of input.refs) {\n const path = ref.path.trim();\n if (!path || seen.has(path)) {\n continue;\n }\n seen.add(path);\n trackIssueManagerAnalytics(input.feature, {\n name: \"issue_manager.context_ref_added\",\n params: {\n refType: issueManagerAnalyticsRefType(ref.kind),\n targetType: input.targetType\n }\n });\n }\n}\n\nexport function trackIssueManagerContentReferenceChanges(input: {\n feature: IssueManagerFeature;\n nextContent: string;\n previousContent: string;\n targetType: \"issue\" | \"task\";\n}): void {\n const previousRefs = extractIssueManagerWorkspaceFileLinksFromContent(\n input.previousContent\n );\n const nextRefs = extractIssueManagerWorkspaceFileLinksFromContent(\n input.nextContent\n );\n const previousPaths = new Set(\n previousRefs.map((ref) => ref.path.trim()).filter(Boolean)\n );\n const nextPaths = new Set(\n nextRefs.map((ref) => ref.path.trim()).filter(Boolean)\n );\n\n trackIssueManagerContextRefsAdded({\n feature: input.feature,\n refs: nextRefs.filter((ref) => !previousPaths.has(ref.path.trim())),\n targetType: input.targetType\n });\n\n for (const path of previousPaths) {\n if (nextPaths.has(path)) {\n continue;\n }\n trackIssueManagerAnalytics(input.feature, {\n name: \"issue_manager.context_ref_removed\",\n params: {\n targetType: input.targetType\n }\n });\n }\n}\n\nfunction issueManagerAnalyticsRefType(\n kind: IssueManagerFileReference[\"kind\"]\n): \"directory\" | \"file\" | \"upload\" {\n return kind === \"folder\" ? \"directory\" : \"file\";\n}\n","import type { Dispatch, SetStateAction } from \"react\";\nimport type {\n IssueManagerContextRef,\n IssueManagerFileReference,\n IssueManagerIssueDetail,\n IssueManagerRun,\n IssueManagerNodeState,\n IssueManagerTaskDetail\n} from \"../../contracts/index.ts\";\nimport {\n extractIssueManagerWorkspaceFileLinksFromContent,\n type IssueManagerFeature\n} from \"../../core/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\nimport type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"./model.ts\";\nimport {\n applyIssueManagerControllerOutcome,\n createIssueManagerRunTaskSuccessOutcome,\n createIssueManagerSaveIssueSuccessOutcome,\n createIssueManagerSaveTaskSuccessOutcome,\n type IssueManagerControllerOutcome\n} from \"./controllerOutcomes.ts\";\nimport {\n createIssueManagerAttachReferencesOutcome,\n createIssueManagerInsertReferencesOutcome,\n createIssueManagerOpenReferencePickerOutcome\n} from \"./reference/controllerReferenceOutcomes.ts\";\nimport {\n createIssueManagerRunTaskPlan,\n createIssueManagerSaveIssuePlan,\n createIssueManagerSaveTaskPlan\n} from \"./controllerPlans.ts\";\nimport {\n createIssueManagerAttachReferencesPlan,\n createIssueManagerInsertReferenceTarget,\n createIssueManagerInsertReferencesPlan\n} from \"./reference/controllerReferencePlans.ts\";\nimport {\n canIssueManagerOpenReferences,\n canIssueManagerRequestReferencesDirectly,\n canIssueManagerUploadReferences,\n executeIssueManagerAttachReferences,\n executeIssueManagerOpenReference,\n executeIssueManagerRequestReferences,\n executeIssueManagerRemoveContextRef,\n executeIssueManagerUploadReferences\n} from \"./reference/controllerReferenceCommands.ts\";\nimport { executeIssueManagerRunTask } from \"./run/controllerRunCommands.ts\";\nimport {\n executeIssueManagerSaveIssue,\n executeIssueManagerSaveTask\n} from \"./save/controllerSaveCommands.ts\";\nimport {\n canIssueManagerCreateShareLink,\n executeIssueManagerShareSelection\n} from \"./share/controllerShareCommands.ts\";\nimport type {\n IssueDraft,\n IssueManagerNotificationTone,\n TaskDraft\n} from \"./controllerTypes.ts\";\nimport {\n confirmIssueManagerMessage,\n defaultTaskPriority,\n resolveIssueManagerErrorMessage\n} from \"./controllerUtils.ts\";\nimport {\n applyIssueManagerIssueDeleted,\n applyIssueManagerSelectedAgentProvider,\n applyIssueManagerSelectedExecutionDirectory,\n applyIssueManagerTaskDeleted\n} from \"./controllerState.ts\";\nimport {\n trackIssueManagerAnalytics,\n trackIssueManagerContextRefsAdded\n} from \"./controllerAnalytics.ts\";\n\ninterface CreateIssueManagerControllerActionsInput {\n copy: IssueManagerI18nRuntime;\n feature: IssueManagerFeature;\n issueDetail: {\n value: IssueManagerIssueDetail | null;\n };\n issueDraft: IssueDraft;\n issueEditorMode: IssueManagerEditorMode;\n nodeState: IssueManagerNodeState;\n referenceTarget: IssueManagerReferenceTarget | null;\n refreshAll: () => void;\n refreshDetails: () => void;\n setNotification: (input: {\n title: string;\n tone?: IssueManagerNotificationTone;\n }) => void;\n setIsRunningTask: Dispatch<SetStateAction<boolean>>;\n setIssueDraftInternal: Dispatch<SetStateAction<IssueDraft>>;\n setIssueEditorModeState: Dispatch<SetStateAction<IssueManagerEditorMode>>;\n setReferenceTarget: Dispatch<\n SetStateAction<IssueManagerReferenceTarget | null>\n >;\n setTaskDraftInternal: Dispatch<SetStateAction<TaskDraft>>;\n setTaskEditorModeState: Dispatch<SetStateAction<IssueManagerEditorMode>>;\n taskDetail: {\n value: IssueManagerTaskDetail | null;\n };\n taskDraft: TaskDraft;\n taskEditorMode: IssueManagerEditorMode;\n updateNodeState: (\n updater:\n | Partial<IssueManagerNodeState>\n | ((current: IssueManagerNodeState) => IssueManagerNodeState)\n ) => void;\n workspaceId: string;\n}\n\ninterface IssueManagerDeleteOptions {\n skipConfirmation?: boolean;\n}\n\nexport type { IssueManagerDeleteOptions };\n\nexport function createIssueManagerControllerActions(\n input: CreateIssueManagerControllerActionsInput\n) {\n const {\n copy,\n feature,\n issueDetail,\n issueDraft,\n issueEditorMode,\n nodeState,\n referenceTarget,\n refreshAll,\n refreshDetails,\n setNotification,\n setIsRunningTask,\n setIssueDraftInternal,\n setIssueEditorModeState,\n setReferenceTarget,\n setTaskDraftInternal,\n setTaskEditorModeState,\n taskDetail,\n taskDraft,\n taskEditorMode,\n updateNodeState,\n workspaceId\n } = input;\n\n const notifyTip = (\n message: string,\n tone: IssueManagerNotificationTone = \"destructive\"\n ) => {\n setNotification({\n title: message,\n tone\n });\n };\n\n const notifyError = (error: unknown, fallbackKey: string) => {\n setNotification({\n title: resolveIssueManagerErrorMessage(error, copy, fallbackKey),\n tone: \"destructive\"\n });\n };\n\n const applyOutcome = (outcome: IssueManagerControllerOutcome) => {\n applyIssueManagerControllerOutcome({\n notify: notifyTip,\n outcome,\n refreshAll,\n refreshDetails,\n setIssueDraftInternal,\n setIssueEditorModeState,\n setReferenceTarget: (target) => setReferenceTarget(target),\n setTaskDraftInternal,\n setTaskEditorModeState,\n translate: (key) => copy.t(key),\n updateNodeState\n });\n };\n\n const submitReferences = async (\n refs: IssueManagerFileReference[],\n target: IssueManagerReferenceTarget | null = referenceTarget\n ) => {\n if (!target) {\n applyOutcome({\n referenceTarget: null\n });\n return;\n }\n\n if (target.mode === \"insert\") {\n applyOutcome(\n createIssueManagerInsertReferencesOutcome({\n refs,\n target\n })\n );\n trackIssueManagerContextRefsAdded({\n feature,\n refs,\n targetType: target.parentKind\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 if (attached) {\n trackIssueManagerContextRefsAdded({\n feature,\n refs,\n targetType: target.parentKind\n });\n }\n applyOutcome(createIssueManagerAttachReferencesOutcome(attached));\n };\n\n return {\n async attachReferences(parentKind: \"issue\" | \"task\") {\n const fileAdapter = feature.fileAdapter;\n const attachPlan = createIssueManagerAttachReferencesPlan({\n hasFileAdapter: Boolean(fileAdapter),\n parentKind,\n requestReferencesDirectly:\n canIssueManagerRequestReferencesDirectly(fileAdapter),\n selectedTaskId: nodeState.selectedTaskId\n });\n if (attachPlan.kind === \"skip\") {\n return;\n }\n if (attachPlan.kind === \"request_directly\") {\n if (!canIssueManagerRequestReferencesDirectly(fileAdapter)) {\n return;\n }\n const refs = await executeIssueManagerRequestReferences({\n fileAdapter,\n workspaceId\n });\n await submitReferences(refs, attachPlan.target);\n return;\n }\n\n applyOutcome(\n createIssueManagerOpenReferencePickerOutcome(attachPlan.target)\n );\n },\n\n createTaskDraft() {\n setTaskEditorModeState(\"create\");\n setTaskDraftInternal({\n content: nodeState.taskDraftContent ?? \"\",\n priority: defaultTaskPriority,\n title: nodeState.taskDraftTitle ?? \"\"\n });\n updateNodeState((current) => ({\n ...current,\n selectedTaskId: null\n }));\n },\n\n async deleteIssue(options?: IssueManagerDeleteOptions) {\n const selectedIssueId = nodeState.selectedIssueId;\n if (\n !selectedIssueId ||\n (options?.skipConfirmation !== true &&\n !confirmIssueManagerMessage(copy.t(\"confirmations.deleteIssue\")))\n ) {\n return;\n }\n try {\n await feature.backend.deleteIssue({\n issueId: selectedIssueId,\n workspaceId\n });\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.issue_deleted\",\n params: { issueId: selectedIssueId }\n });\n setIssueEditorModeState(\"read\");\n setTaskEditorModeState(\"read\");\n updateNodeState((current) => applyIssueManagerIssueDeleted(current));\n refreshAll();\n } catch (error) {\n notifyError(error, \"messages.issueDeleteFailed\");\n }\n },\n\n async deleteTask(options?: IssueManagerDeleteOptions) {\n const selectedIssueId = nodeState.selectedIssueId;\n const selectedTaskId = nodeState.selectedTaskId;\n if (\n !selectedIssueId ||\n !selectedTaskId ||\n (options?.skipConfirmation !== true &&\n !confirmIssueManagerMessage(copy.t(\"confirmations.deleteTask\")))\n ) {\n return;\n }\n\n try {\n await feature.backend.deleteTask({\n issueId: selectedIssueId,\n taskId: selectedTaskId,\n workspaceId\n });\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.task_deleted\",\n params: { issueId: selectedIssueId, taskId: selectedTaskId }\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 openAgentSession(run: IssueManagerRun) {\n const agentSessionId = run.agentSessionId?.trim() ?? \"\";\n if (!agentSessionId || !feature.agentSessionOpener?.openSession) {\n return;\n }\n\n try {\n await feature.agentSessionOpener.openSession({\n agentSessionId,\n provider: run.agentProvider,\n workspaceId\n });\n } catch (error) {\n notifyTip(\n resolveIssueManagerErrorMessage(\n error,\n copy,\n \"messages.agentSessionOpenFailed\"\n )\n );\n }\n },\n\n async removeContextRef(ref: IssueManagerContextRef) {\n try {\n await executeIssueManagerRemoveContextRef({\n backend: feature.backend,\n ref,\n workspaceId\n });\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.context_ref_removed\",\n params: {\n targetType: ref.parentKind\n }\n });\n refreshDetails();\n } catch (error) {\n notifyError(error, \"messages.referenceRemoveFailed\");\n }\n },\n\n async useExecutionDirectory(path: string | null) {\n const executionDirectory = path?.trim() || null;\n updateNodeState((current) =>\n applyIssueManagerSelectedExecutionDirectory(current, executionDirectory)\n );\n if (!executionDirectory) {\n return;\n }\n\n try {\n await feature.executionDirectoryPicker?.use?.({\n path: executionDirectory\n });\n } catch {\n // The selected directory is still valid even if recency tracking fails.\n }\n },\n\n async runTask(providerOverride?: string) {\n const runPlan = createIssueManagerRunTaskPlan({\n issueDetail: issueDetail.value,\n providerOverride,\n selectedAgentProvider: nodeState.selectedAgentProvider,\n taskDetail: taskDetail.value\n });\n if (runPlan.kind !== \"ready\") {\n return;\n }\n const currentIssueDetail = issueDetail.value;\n const currentTaskDetail = taskDetail.value;\n if (!currentIssueDetail) {\n return;\n }\n if (runPlan.shouldUpdateSelectedAgentProvider) {\n updateNodeState((current) =>\n applyIssueManagerSelectedAgentProvider(current, runPlan.provider)\n );\n }\n\n setIsRunningTask(true);\n try {\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.task_run_initiated\",\n params: {\n hasExecutionDirectory: Boolean(\n nodeState.selectedExecutionDirectory?.trim()\n ),\n issueId: currentIssueDetail.issue.issueId,\n provider: runPlan.provider,\n taskId: currentTaskDetail?.task.taskId ?? null\n }\n });\n const result = await executeIssueManagerRunTask({\n feature,\n issue: currentIssueDetail.issue,\n provider: runPlan.provider,\n executionDirectory: nodeState.selectedExecutionDirectory,\n task: currentTaskDetail?.task,\n workspaceId\n });\n const outcome = createIssueManagerRunTaskSuccessOutcome({\n status: result.status\n });\n applyOutcome(outcome);\n } catch (error) {\n notifyTip(\n resolveIssueManagerErrorMessage(error, copy, \"messages.runFailed\")\n );\n } finally {\n setIsRunningTask(false);\n refreshDetails();\n }\n },\n\n async startTaskBreakdown(providerOverride?: string) {\n const breakdownPlan = createIssueManagerRunTaskPlan({\n issueDetail: issueDetail.value,\n providerOverride,\n selectedAgentProvider: nodeState.selectedAgentProvider,\n taskDetail: taskDetail.value\n });\n if (breakdownPlan.kind !== \"ready\") {\n return;\n }\n const currentIssueDetail = issueDetail.value;\n if (!currentIssueDetail) {\n return;\n }\n const breakdownLauncher = feature.agentBreakdownLauncher;\n if (!breakdownLauncher) {\n notifyTip(copy.t(\"messages.breakdownUnavailable\"));\n return;\n }\n if (breakdownPlan.shouldUpdateSelectedAgentProvider) {\n updateNodeState((current) =>\n applyIssueManagerSelectedAgentProvider(\n current,\n breakdownPlan.provider\n )\n );\n }\n\n try {\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.issue_breakdown_initiated\",\n params: {\n issueId: currentIssueDetail.issue.issueId,\n provider: breakdownPlan.provider\n }\n });\n const result = await breakdownLauncher.startBreakdown({\n issueDetail: currentIssueDetail,\n provider: breakdownPlan.provider,\n workspaceId\n });\n if (result.status === \"failed\") {\n notifyTip(\n result.errorMessage || copy.t(\"messages.breakdownOpenFailed\")\n );\n }\n } catch (error) {\n notifyTip(\n resolveIssueManagerErrorMessage(\n error,\n copy,\n \"messages.breakdownOpenFailed\"\n )\n );\n }\n },\n\n async saveIssue() {\n const savePlan = createIssueManagerSaveIssuePlan({\n activeTopicId: nodeState.activeTopicId ?? null,\n issueDraft\n });\n if (savePlan.kind === \"blocked\") {\n notifyTip(copy.t(savePlan.notificationKey));\n return;\n }\n\n try {\n const wasCreate = issueEditorMode === \"create\";\n const { content, removedContextRefs, savedIssue } =\n await executeIssueManagerSaveIssue({\n activeTopicId: savePlan.activeTopicId,\n feature,\n issueDetail: issueDetail.value,\n issueDraft,\n issueEditorMode,\n selectedIssueId: nodeState.selectedIssueId,\n workspaceId\n });\n if (wasCreate) {\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.issue_created\",\n params: { issueId: savedIssue.issueId }\n });\n } else {\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.issue_saved\",\n params: {\n contextRefCount: countIssueManagerContextRefs({\n content,\n refs: removeIssueManagerContextRefsFromCount(\n issueDetail.value?.contextRefs.filter(\n (ref) => ref.parentKind === \"issue\"\n ),\n removedContextRefs\n )\n }),\n hasDescription: hasIssueManagerDescription(content),\n issueId: savedIssue.issueId,\n taskCount: issueDetail.value?.tasks.length ?? 0\n }\n });\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 wasCreate = taskEditorMode === \"create\";\n const { content, removedContextRefs, savedTask } =\n await executeIssueManagerSaveTask({\n feature,\n selectedIssueId: savePlan.selectedIssueId,\n selectedTaskId: nodeState.selectedTaskId,\n taskDetail: taskDetail.value,\n taskDraft,\n taskEditorMode,\n workspaceId\n });\n if (wasCreate) {\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.task_created\",\n params: {\n issueId: savePlan.selectedIssueId,\n taskId: savedTask.taskId\n }\n });\n } else {\n trackIssueManagerAnalytics(feature, {\n name: \"issue_manager.task_saved\",\n params: {\n contextRefCount: countIssueManagerContextRefs({\n content,\n refs: removeIssueManagerContextRefsFromCount(\n taskDetail.value?.contextRefs.filter(\n (ref) => ref.parentKind === \"task\"\n ),\n removedContextRefs\n )\n }),\n hasDescription: hasIssueManagerDescription(content),\n issueId: savePlan.selectedIssueId,\n taskId: savedTask.taskId\n }\n });\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 setSelectedTaskStatus(status: \"completed\" | \"not_started\") {\n const selectedIssueId = nodeState.selectedIssueId;\n const selectedTaskId = nodeState.selectedTaskId;\n if (!selectedIssueId || !selectedTaskId) {\n return;\n }\n\n try {\n const task = await feature.backend.updateTask({\n issueId: selectedIssueId,\n status,\n taskId: selectedTaskId,\n workspaceId\n });\n applyOutcome(createIssueManagerSaveTaskSuccessOutcome(task.taskId));\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\nfunction hasIssueManagerDescription(content: string): boolean {\n return content.trim().length > 0;\n}\n\nfunction countIssueManagerContextRefs(input: {\n content: string;\n refs?: readonly { path: string }[];\n}): number {\n const paths = new Set<string>();\n for (const ref of input.refs ?? []) {\n const path = ref.path.trim();\n if (path) {\n paths.add(path);\n }\n }\n for (const ref of extractIssueManagerWorkspaceFileLinksFromContent(\n input.content\n )) {\n const path = ref.path.trim();\n if (path) {\n paths.add(path);\n }\n }\n return paths.size;\n}\n\nfunction removeIssueManagerContextRefsFromCount<\n T extends { contextRefId: string }\n>(\n refs: readonly T[] | undefined,\n removedRefs: readonly { contextRefId: string }[]\n): T[] {\n if (!refs?.length || removedRefs.length === 0) {\n return [...(refs ?? [])];\n }\n const removedIDs = new Set(removedRefs.map((ref) => ref.contextRefId));\n return refs.filter((ref) => !removedIDs.has(ref.contextRefId));\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 { IssueManagerFeature } from \"../../../../core/index.ts\";\nimport type {\n IssueDraft,\n IssueManagerControllerSession,\n IssueManagerEditorMode\n} from \"../../../../services/issueManagerControllerService.interface.ts\";\nimport {\n applyIssueManagerIssueEditorModeToNodeState,\n createIssueManagerIssueDraftFromNodeState,\n persistIssueManagerIssueDraftContent\n} from \"../../../../services/internal/controllerState.ts\";\nimport { trackIssueManagerContentReferenceChanges } from \"../../../../services/internal/controllerAnalytics.ts\";\n\nexport function createIssueManagerIssueBindings(input: {\n controllerSession: IssueManagerControllerSession;\n feature: IssueManagerFeature;\n issueEditorMode: IssueManagerEditorMode;\n nodeState: IssueManagerNodeState;\n}) {\n const { controllerSession, feature, issueEditorMode, nodeState } = input;\n\n return {\n setIssueContent(content: string) {\n controllerSession.setIssueDraftInternal((current) => {\n trackIssueManagerContentReferenceChanges({\n feature,\n nextContent: content,\n previousContent: current.content,\n targetType: \"issue\"\n });\n return {\n ...current,\n content\n };\n });\n controllerSession.updateNodeState((current) =>\n persistIssueManagerIssueDraftContent(current, issueEditorMode, content)\n );\n },\n setIssueDraft(patch: Partial<IssueDraft>) {\n controllerSession.setIssueDraftInternal((current) => ({\n ...current,\n ...patch\n }));\n },\n setIssueEditorMode(mode: IssueManagerEditorMode) {\n controllerSession.setIssueEditorModeState(mode);\n if (mode === \"create\") {\n controllerSession.setIssueDraftInternal(\n createIssueManagerIssueDraftFromNodeState(nodeState)\n );\n }\n controllerSession.updateNodeState((current) =>\n applyIssueManagerIssueEditorModeToNodeState(current, mode)\n );\n },\n setIssueSearchQuery(query: string) {\n controllerSession.updateNodeState((current) => ({\n ...current,\n issueSearchQuery: query\n }));\n },\n setIssueStatusFilter(value: IssueManagerNodeState[\"issueStatusFilter\"]) {\n controllerSession.updateNodeState((current) => ({\n ...current,\n issueStatusFilter: value\n }));\n },\n setIssueTitle(title: string) {\n controllerSession.setIssueDraftInternal((current) => ({\n ...current,\n title\n }));\n }\n };\n}\n","import type {\n IssueManagerNodeState,\n IssueManagerPriority\n} from \"../../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../../core/index.ts\";\nimport type {\n IssueManagerControllerSession,\n IssueManagerEditorMode,\n TaskDraft\n} from \"../../../../services/issueManagerControllerService.interface.ts\";\nimport {\n applyIssueManagerTaskEditorModeToNodeState,\n applyIssueManagerTaskSelection,\n createIssueManagerTaskDraftFromNodeState,\n persistIssueManagerTaskDraftContent\n} from \"../../../../services/internal/controllerState.ts\";\nimport { trackIssueManagerContentReferenceChanges } from \"../../../../services/internal/controllerAnalytics.ts\";\n\nexport function createIssueManagerTaskBindings(input: {\n controllerSession: IssueManagerControllerSession;\n feature: IssueManagerFeature;\n nodeState: IssueManagerNodeState;\n taskEditorMode: IssueManagerEditorMode;\n}) {\n const { controllerSession, feature, 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 trackIssueManagerContentReferenceChanges({\n feature,\n nextContent: content,\n previousContent: current.content,\n targetType: \"task\"\n });\n return {\n ...current,\n content\n };\n });\n controllerSession.updateNodeState((current) =>\n persistIssueManagerTaskDraftContent(current, taskEditorMode, content)\n );\n },\n setTaskDraft(patch: Partial<TaskDraft>) {\n controllerSession.setTaskDraftInternal((current) => ({\n ...current,\n ...patch\n }));\n },\n setTaskEditorMode(mode: IssueManagerEditorMode) {\n controllerSession.setTaskEditorModeState(mode);\n if (mode === \"create\") {\n controllerSession.setTaskDraftInternal(\n createIssueManagerTaskDraftFromNodeState(nodeState)\n );\n }\n controllerSession.updateNodeState((current) =>\n applyIssueManagerTaskEditorModeToNodeState(current, mode)\n );\n },\n setTaskListCollapsed(collapsed: boolean) {\n controllerSession.updateNodeState((current) => ({\n ...current,\n taskListCollapsed: collapsed\n }));\n },\n setTaskPriority(priority: IssueManagerPriority) {\n controllerSession.setTaskDraftInternal((current) => ({\n ...current,\n priority\n }));\n },\n setTaskTitle(title: string) {\n controllerSession.setTaskDraftInternal((current) => ({\n ...current,\n title\n }));\n }\n };\n}\n","import type { RichTextAtProvider } from \"@tutti-os/ui-rich-text/types\";\nimport type { IssueManagerNodeState } from \"../../../../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../../../../core/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 feature: IssueManagerFeature;\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 feature,\n issueEditorMode,\n nodeState,\n onResolveRichTextAtProviders,\n taskEditorMode,\n workspaceId\n } = input;\n\n const issueBindings = createIssueManagerIssueBindings({\n controllerSession,\n feature,\n issueEditorMode,\n nodeState\n });\n const taskBindings = createIssueManagerTaskBindings({\n controllerSession,\n feature,\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 reportIssueSearchUsage(query: string) {\n controllerSession.reportIssueSearchUsage(query);\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 {\n IssueManagerNodeState,\n IssueManagerOpenSource\n} 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 openSource?: IssueManagerOpenSource;\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, openSource, onStateChange, service, state, workspaceId } =\n input;\n const controllerService = useMemo(\n () => service ?? createIssueManagerControllerService(),\n [service]\n );\n const controllerSession = useMemo(\n () =>\n controllerService.createSession({\n feature,\n openSource,\n state,\n workspaceId\n }),\n [controllerService, feature, openSource, workspaceId]\n );\n const snapshot = useSnapshot(\n controllerSession.store\n ) as IssueManagerControllerSession[\"store\"];\n const deferredIssueSearch = useDeferredValue(\n snapshot.nodeState.issueSearchQuery\n );\n const floatingNotice = resolveIssueManagerFloatingNoticeViewState({\n notification: snapshot.notification\n });\n\n useEffect(() => {\n controllerSession.retain();\n return () => {\n controllerSession.release();\n };\n }, [controllerSession]);\n\n useEffect(() => {\n controllerSession.syncInput({\n deferredIssueSearch,\n onStateChange,\n taskListCollapsed: state?.taskListCollapsed === true\n });\n }, [\n controllerSession,\n deferredIssueSearch,\n onStateChange,\n state?.taskListCollapsed\n ]);\n\n return {\n controllerSession,\n deferredIssueSearch,\n floatingNotice,\n snapshot\n };\n}\n","import type {\n IssueManagerNotificationState,\n IssueManagerNotificationTone\n} from \"../../../../services/controllerTypes.ts\";\n\nconst issueManagerNoticeDurationMs = 3000;\n\nexport interface IssueManagerFloatingNoticeViewState {\n durationMs: number;\n id: number;\n isLoading: boolean;\n title: string;\n tone: IssueManagerNotificationTone;\n}\n\nexport function resolveIssueManagerFloatingNoticeViewState(input: {\n notification: IssueManagerNotificationState | null;\n}): IssueManagerFloatingNoticeViewState | null {\n if (!input.notification) {\n return null;\n }\n\n return {\n durationMs: issueManagerNoticeDurationMs,\n id: input.notification.id,\n isLoading: false,\n title: input.notification.title,\n tone: input.notification.tone\n };\n}\n","import type { RichTextAtProvider } from \"@tutti-os/ui-rich-text/types\";\nimport type { ReactNode } from \"react\";\nimport type {\n IssueManagerFileReference,\n IssueManagerNodeState,\n IssueManagerOpenSource\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 openSource?: IssueManagerOpenSource;\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 openSource,\n onStateChange,\n resolveRichTextAtProviders,\n service,\n state,\n workspaceId\n}: UseIssueManagerNodeViewInput) {\n const controller = useIssueManagerController({\n feature,\n openSource,\n onStateChange,\n resolveRichTextAtProviders,\n service,\n state,\n workspaceId\n });\n\n useIssueManagerTaskListCollapsedSync({\n nodeId,\n onCollapsedChange: (collapsed) => {\n controller.setTaskListCollapsed(collapsed);\n },\n workspaceId\n });\n\n const selectedIssue = resolveIssueManagerSelectedIssue({\n issueDetail: controller.issueDetail.value?.issue ?? null,\n issues: controller.issues.value,\n selectedIssueId: controller.nodeState.selectedIssueId\n });\n const selectedTask = resolveIssueManagerSelectedTask({\n selectedTaskId: controller.nodeState.selectedTaskId,\n taskDetail: controller.taskDetail.value?.task ?? null,\n tasks: controller.issueDetail.value?.tasks ?? []\n });\n\n return {\n controller,\n referencePicker: {\n onClose: () => {\n controller.setReferenceTarget(null);\n },\n onConfirm: (refs: IssueManagerFileReference[]) => {\n void controller.submitReferenceSelection(refs);\n },\n open: controller.referenceTarget !== null\n },\n selectedIssue,\n selectedTask,\n shell: {\n onCloseTaskDrawer: () => {\n controller.setTaskEditorMode(\"read\");\n controller.selectTask(null);\n },\n onDismissIssueCreate: () => {\n controller.setIssueEditorMode(\"read\");\n }\n }\n };\n}\n\nexport type IssueManagerNodeView = ReturnType<typeof useIssueManagerNodeView>;\nexport type IssueManagerNodeViewController = IssueManagerController;\n","export {\n dispatchIssueManagerTaskListCollapsed,\n dispatchIssueManagerTopicCreate,\n dispatchIssueManagerTopicDelete,\n dispatchIssueManagerTopicHeaderState,\n dispatchIssueManagerTopicSelection,\n dispatchIssueManagerTopicUpdate,\n resolveIssueManagerSelectedIssue,\n resolveIssueManagerSelectedTask,\n useIssueManagerNodeHeaderView,\n useIssueManagerTopicHeaderCommandSync,\n useIssueManagerTopicHeaderStateSync,\n useIssueManagerTaskListCollapsedSync\n} from \"./internal/shell/IssueManagerNodeState.ts\";\nexport {\n createReferenceDirectoryStateFromSnapshot,\n collectVisibleTreeEntries,\n issueManagerReferenceDefaultExpandedDepth,\n mergeExpandedFolderPaths,\n mergePrefetchedDirectoryState,\n normalizeDirectoryPath,\n prefetchReferenceTree,\n type IssueManagerReferenceDirectoryState\n} from \"./internal/reference/IssueManagerReferencePickerState.ts\";\nexport {\n useIssueManagerController,\n type IssueManagerController,\n type IssueManagerRichTextSurface\n} from \"./internal/controller/useIssueManagerController.ts\";\nexport {\n useIssueManagerNodeView,\n type IssueManagerNodeView,\n type IssueManagerNodeViewController,\n type UseIssueManagerNodeViewInput\n} from \"./internal/shell/useIssueManagerNodeView.ts\";\nexport {\n useWorkspaceFileReferencePickerView as useIssueManagerReferencePickerView,\n type UseWorkspaceFileReferencePickerViewInput as UseIssueManagerReferencePickerViewInput,\n type WorkspaceFileReferencePreviewState as IssueManagerReferencePreviewState\n} from \"@tutti-os/workspace-file-reference/react\";\n","import {\n useEffect,\n useRef,\n type HTMLAttributes,\n type JSX,\n type ReactNode\n} from \"react\";\nimport { Button, PanelIcon, cn } from \"@tutti-os/ui-system\";\nimport { WorkspaceFileReferencePicker } from \"@tutti-os/workspace-file-reference/ui\";\nimport type { IssueManagerI18nRuntime } from \"../i18n/issueManagerI18n.ts\";\nimport type { IssueManagerOpenSource } from \"../contracts/index.ts\";\nimport type { IssueManagerLatestRunStatusRenderer } from \"./latestRunStatusRenderer.ts\";\nimport { IssueManagerShell } from \"./internal/shell/IssueManagerShell.tsx\";\nimport { IssueManagerTopicSelector } from \"./internal/shell/IssueManagerTopicSelector.tsx\";\nimport {\n dispatchIssueManagerTopicCreate,\n dispatchIssueManagerTopicDelete,\n dispatchIssueManagerTopicHeaderState,\n dispatchIssueManagerTopicSelection,\n dispatchIssueManagerTopicUpdate,\n useIssueManagerTopicHeaderCommandSync,\n useIssueManagerTopicHeaderStateSync,\n useIssueManagerNodeHeaderView,\n useIssueManagerNodeView,\n type UseIssueManagerNodeViewInput\n} from \"./react/index.ts\";\n\nexport { dispatchIssueManagerTaskListCollapsed } from \"./react/index.ts\";\nexport type { IssueManagerLatestRunStatusRenderer } from \"./latestRunStatusRenderer.ts\";\n\nexport interface IssueManagerNodeOpenRequest {\n issueId: string;\n mode?: \"breakdown\" | \"execute\";\n outputDir?: string;\n requestId: string;\n runId?: string;\n taskId?: string;\n topicId?: string;\n}\n\nexport type IssueManagerNodeProps = UseIssueManagerNodeViewInput & {\n openRequest?: IssueManagerNodeOpenRequest | null;\n openSource?: IssueManagerOpenSource;\n renderLatestRunStatus?: IssueManagerLatestRunStatusRenderer;\n};\n\nexport function IssueManagerNode({\n emptyIllustration,\n feature,\n nodeId,\n openSource,\n openRequest,\n onStateChange,\n renderLatestRunStatus,\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 openSource,\n onStateChange,\n resolveRichTextAtProviders,\n service,\n state,\n workspaceId\n });\n const lastHandledOpenRequestIdRef = useRef<string | null>(null);\n\n useEffect(() => {\n if (!openRequest?.requestId) {\n return;\n }\n if (lastHandledOpenRequestIdRef.current === openRequest.requestId) {\n return;\n }\n lastHandledOpenRequestIdRef.current = openRequest.requestId;\n\n if (openRequest.topicId?.trim()) {\n controller.selectTopic(openRequest.topicId);\n }\n controller.selectIssue(openRequest.issueId);\n controller.selectTask(openRequest.taskId?.trim() || null);\n }, [controller, openRequest]);\n\n useEffect(() => {\n dispatchIssueManagerTopicHeaderState({\n activeTopicId: controller.nodeState.activeTopicId ?? null,\n nodeId,\n topics: controller.topics.value,\n workspaceId\n });\n }, [\n controller.nodeState.activeTopicId,\n controller.topics.value,\n nodeId,\n workspaceId\n ]);\n\n useIssueManagerTopicHeaderCommandSync({\n nodeId,\n onCreateTopic: (topicInput) => {\n void controller.createTopic(topicInput);\n },\n onDeleteTopic: (topicId) => {\n void controller.deleteTopic(topicId);\n },\n onSelectTopic: controller.selectTopic,\n onUpdateTopic: (topicInput) => {\n void controller.updateTopic(topicInput);\n },\n workspaceId\n });\n\n return (\n <section\n aria-label={controller.copy.t(\"title\")}\n className=\"flex h-full min-h-0 w-full min-w-0 flex-col overflow-hidden text-[var(--text-primary)]\"\n data-issue-manager-node-id={nodeId}\n data-issue-manager-workspace-id={workspaceId}\n >\n <IssueManagerShell\n controller={controller}\n emptyIllustration={emptyIllustration}\n onCloseTaskDrawer={shell.onCloseTaskDrawer}\n onDismissIssueCreate={shell.onDismissIssueCreate}\n renderLatestRunStatus={renderLatestRunStatus}\n selectedIssue={selectedIssue}\n selectedTask={selectedTask}\n />\n\n <WorkspaceFileReferencePicker\n copy={controller.copy}\n fileAdapter={feature.fileAdapter}\n open={referencePicker.open}\n workspaceId={workspaceId}\n onClose={referencePicker.onClose}\n onConfirm={referencePicker.onConfirm}\n />\n </section>\n );\n}\n\nexport interface IssueManagerNodeHeaderProps extends HTMLAttributes<HTMLElement> {\n activeTopicId?: string | null;\n copy: IssueManagerI18nRuntime;\n defaultActions?: ReactNode;\n isSidebarAutoCollapsed: boolean;\n isSidebarCollapsed: boolean;\n nodeId: string;\n onToggleSidebar: (nextCollapsed: boolean) => void;\n title?: string;\n workspaceId: string;\n}\n\nexport function IssueManagerNodeHeader({\n activeTopicId = null,\n className,\n copy,\n defaultActions,\n isSidebarAutoCollapsed,\n isSidebarCollapsed,\n nodeId,\n onToggleSidebar,\n title,\n workspaceId,\n ...headerProps\n}: IssueManagerNodeHeaderProps): JSX.Element {\n const { effectiveCollapsed, toggleLabel, toggleSidebar } =\n useIssueManagerNodeHeaderView({\n copy,\n isSidebarAutoCollapsed,\n isSidebarCollapsed,\n nodeId,\n onToggleSidebar,\n workspaceId\n });\n const topicState = useIssueManagerTopicHeaderStateSync({\n activeTopicId,\n nodeId,\n workspaceId\n });\n\n return (\n <header\n {...headerProps}\n className={cn(\n \"relative flex h-full min-h-0 items-center justify-between gap-3 bg-[var(--background-panel)] px-2 pl-3\",\n className\n )}\n >\n <div className=\"z-10 flex min-w-0 items-center gap-2\">\n <span className=\"min-w-0 truncate text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {title?.trim() || copy.t(\"title\")}\n </span>\n <Button\n aria-label={toggleLabel}\n className=\"cursor-pointer rounded-md\"\n data-issue-manager-sidebar-auto-collapsed={\n isSidebarAutoCollapsed ? \"true\" : undefined\n }\n data-issue-manager-sidebar-collapsed={\n effectiveCollapsed ? \"true\" : undefined\n }\n size=\"icon-sm\"\n title={toggleLabel}\n type=\"button\"\n variant=\"ghost\"\n onClick={(event) => {\n event.stopPropagation();\n toggleSidebar();\n }}\n onDoubleClick={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <PanelIcon className=\"size-[18px]\" />\n </Button>\n </div>\n <div className=\"pointer-events-none absolute top-1/2 left-1/2 z-20 flex max-w-[220px] -translate-x-1/2 -translate-y-1/2 items-center justify-center\">\n <div\n className=\"pointer-events-auto flex min-w-0 flex-none\"\n onDoubleClick={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <IssueManagerTopicSelector\n activeTopicId={topicState.activeTopicId}\n className=\"flex-none\"\n copy={copy}\n topics={topicState.topics}\n onCreateTopic={(input) => {\n dispatchIssueManagerTopicCreate({\n input,\n nodeId,\n workspaceId\n });\n }}\n onDeleteTopic={(topicId) => {\n dispatchIssueManagerTopicDelete({\n nodeId,\n topicId,\n workspaceId\n });\n }}\n onSelectTopic={(topicId) => {\n dispatchIssueManagerTopicSelection({\n nodeId,\n topicId,\n workspaceId\n });\n }}\n onUpdateTopic={(input) => {\n dispatchIssueManagerTopicUpdate({\n input,\n nodeId,\n workspaceId\n });\n }}\n />\n </div>\n </div>\n <div\n className=\"z-10 flex flex-none items-center gap-1\"\n onDoubleClick={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n {defaultActions}\n </div>\n </header>\n );\n}\n","import { useEffect, useState, type JSX, type ReactNode } from \"react\";\nimport { Button, FileCreateIcon, cn } from \"@tutti-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\";\nimport type { IssueManagerLatestRunStatusRenderer } from \"../../latestRunStatusRenderer.ts\";\n\nexport { shouldAutoCollapseIssueManagerSidebar } from \"./useIssueManagerShellView.ts\";\n\nconst issueManagerTaskDrawerExitDurationMs = 180;\n\nexport interface IssueManagerShellProps {\n controller: IssueManagerController;\n emptyIllustration?: ReactNode;\n onCloseTaskDrawer: () => void;\n onDismissIssueCreate: () => void;\n renderLatestRunStatus?: IssueManagerLatestRunStatusRenderer;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n}\n\nexport function IssueManagerShell({\n controller,\n emptyIllustration,\n onCloseTaskDrawer,\n onDismissIssueCreate,\n renderLatestRunStatus,\n selectedIssue,\n selectedTask\n}: IssueManagerShellProps): JSX.Element {\n const shellView = useIssueManagerShellView({\n controller,\n selectedIssue,\n selectedTask\n });\n const [renderedTaskDrawerTask, setRenderedTaskDrawerTask] =\n useState<IssueManagerTaskSummary | null>(selectedTask);\n const [isTaskDrawerClosing, setIsTaskDrawerClosing] = useState(false);\n\n useEffect(() => {\n if (shellView.content.isTaskDrawerOpen) {\n setRenderedTaskDrawerTask(selectedTask);\n setIsTaskDrawerClosing(false);\n return undefined;\n }\n\n if (!renderedTaskDrawerTask) {\n return undefined;\n }\n\n setIsTaskDrawerClosing(true);\n const timeout = window.setTimeout(() => {\n setRenderedTaskDrawerTask(null);\n setIsTaskDrawerClosing(false);\n }, issueManagerTaskDrawerExitDurationMs);\n\n return () => {\n window.clearTimeout(timeout);\n };\n }, [\n renderedTaskDrawerTask,\n selectedTask,\n shellView.content.isTaskDrawerOpen\n ]);\n const taskDrawerTask = shellView.content.isTaskDrawerOpen\n ? selectedTask\n : renderedTaskDrawerTask;\n\n return (\n <div\n className=\"relative grid min-h-0 flex-1 grid-rows-[minmax(0,1fr)] overflow-hidden bg-transparent transition-[grid-template-columns] duration-[180ms] ease-[cubic-bezier(0.4,0,0.2,1)] motion-reduce:transition-none\"\n data-issue-manager-sidebar-auto-collapsed={\n shellView.sidebar.isAutoCollapsed ? \"true\" : undefined\n }\n data-issue-manager-sidebar-collapsed={\n shellView.sidebar.isCollapsed ? \"true\" : undefined\n }\n ref={shellView.layoutRef}\n style={shellView.layoutStyle}\n >\n {shellView.floatingNotice ? (\n <IssueManagerFloatingNotice notice={shellView.floatingNotice} />\n ) : null}\n\n <IssueManagerSidebar\n controller={controller}\n isCollapsed={shellView.sidebar.isCollapsed}\n isNarrowLayout={shellView.isNarrowLayout}\n showStandaloneState={shellView.sidebar.showStandaloneState}\n sidebarViewState={shellView.sidebar.viewState}\n statusCounts={shellView.sidebar.statusCounts}\n />\n\n {shellView.sidebar.isAutoCollapsed ? null : (\n <div\n aria-label={controller.copy.t(\"labels.resizeIssueList\")}\n aria-orientation=\"vertical\"\n aria-valuemax={shellView.resizeHandle.ariaValueMax}\n aria-valuemin={shellView.resizeHandle.ariaValueMin}\n aria-valuenow={shellView.resizeHandle.ariaValueNow}\n className={cn(\n \"group absolute top-0 bottom-0 left-[calc(var(--issue-manager-sidebar-width)-6px)] z-20 w-3 cursor-col-resize touch-none opacity-100 transition-[left,opacity] duration-[180ms,120ms] ease-[cubic-bezier(0.4,0,0.2,1),ease] motion-reduce:transition-none\",\n shellView.sidebar.isCollapsed &&\n \"pointer-events-none left-[-6px] opacity-0\"\n )}\n role=\"separator\"\n tabIndex={0}\n onKeyDown={shellView.resizeHandle.onKeyDown}\n onPointerCancel={shellView.resizeHandle.onPointerCancel}\n onPointerDown={shellView.resizeHandle.onPointerDown}\n onPointerMove={shellView.resizeHandle.onPointerMove}\n onPointerUp={shellView.resizeHandle.onPointerUp}\n >\n <span className=\"absolute top-0 bottom-0 left-1/2 w-px -translate-x-1/2 bg-transparent transition-[background-color,width] duration-150 group-hover:w-0.5 group-hover:bg-[color-mix(in_srgb,var(--border-focus)_40%,transparent)] group-focus-visible:w-0.5 group-focus-visible:bg-[color-mix(in_srgb,var(--border-focus)_40%,transparent)]\" />\n </div>\n )}\n\n <div className=\"relative h-full min-h-0 overflow-hidden bg-transparent @container/issue-manager-content\">\n <div className=\"flex h-full min-h-0 flex-col\">\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n {shellView.content.isIssueEditing ? (\n <IssueManagerIssuePane\n controller={controller}\n renderLatestRunStatus={renderLatestRunStatus}\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 renderLatestRunStatus={renderLatestRunStatus}\n selectedIssue={selectedIssue}\n onDismissCreate={onDismissIssueCreate}\n />\n ) : (\n <IssueManagerShellEmptyState\n controller={controller}\n emptyIllustration={emptyIllustration}\n />\n )}\n </div>\n\n <IssueManagerBottomBar\n controller={controller}\n isNarrowLayout={shellView.isNarrowLayout}\n selectedIssue={selectedIssue}\n visible={shellView.content.showBottomBar}\n />\n </div>\n\n {taskDrawerTask ? (\n <IssueManagerTaskDrawer\n controller={controller}\n isClosing={isTaskDrawerClosing}\n renderLatestRunStatus={renderLatestRunStatus}\n selectedIssue={selectedIssue}\n selectedTask={taskDrawerTask}\n onClose={onCloseTaskDrawer}\n />\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction IssueManagerShellEmptyState({\n controller,\n emptyIllustration\n}: {\n controller: IssueManagerController;\n emptyIllustration?: ReactNode;\n}): JSX.Element {\n return (\n <div className=\"flex h-full min-h-[320px] items-center justify-center px-10 py-10\">\n <div className=\"grid max-w-[420px] justify-items-center gap-2 text-center\">\n {emptyIllustration ? (\n <div className=\"mb-4\">{emptyIllustration}</div>\n ) : null}\n <h2 className=\"text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {controller.copy.t(\"messages.noIssues\")}\n </h2>\n <p className=\"max-w-[420px] text-[13px] leading-5 text-[var(--text-secondary)]\">\n {controller.copy.t(\"emptyState\")}\n </p>\n <Button\n className=\"mt-2 gap-2\"\n type=\"button\"\n onClick={() => controller.setIssueEditorMode(\"create\")}\n >\n <FileCreateIcon size={16} />\n {controller.copy.t(\"actions.createIssue\")}\n </Button>\n </div>\n </div>\n );\n}\n","import { useState, type JSX } from \"react\";\nimport {\n Badge,\n Button,\n ConfirmationDialog,\n ScrollArea\n} from \"@tutti-os/ui-system\";\nimport type { IssueManagerIssueSummary } from \"../../../contracts/index.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerStatusLabel\n} from \"../../../services/controllerModel.ts\";\nimport { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\nimport {\n IssueManagerLatestRunStatusSection,\n IssueManagerOutputSection,\n IssueManagerSubtaskSection\n} from \"../issue/IssueManagerIssueSections.tsx\";\nimport type { IssueManagerLatestRunStatusRenderer } from \"../../latestRunStatusRenderer.ts\";\nimport { IssueManagerDescriptionSection } from \"../content/IssueManagerDescriptionSection.tsx\";\nimport { IssueManagerTitleTooltip } from \"../content/IssueManagerTitleTooltip.tsx\";\nimport { IssueManagerPaneLoadingState } from \"../panel/IssueManagerPanelSurface.tsx\";\nimport { resolveIssueManagerCreatorLabel } from \"../panel/IssueManagerPanelText.ts\";\nimport { IssueManagerRichTextTextarea } from \"../content/IssueManagerRichTextTextarea.tsx\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport { IssueManagerDraftTitleInput } from \"./IssueManagerDraftTitleInput.tsx\";\nimport {\n issueManagerEditorFooterFadeInClassName,\n issueManagerEditorRiseInClassName,\n issueManagerEditorRiseInDelay0ClassName,\n issueManagerEditorRiseInDelay1ClassName,\n issueManagerEditorRiseInDelay2ClassName\n} from \"./IssueManagerEditorMotion.ts\";\n\nexport { IssueManagerEmptyIllustration } from \"../panel/IssueManagerPanelSurface.tsx\";\n\nexport function IssueManagerIssuePane({\n controller,\n renderLatestRunStatus,\n selectedIssue,\n onDismissCreate\n}: {\n controller: IssueManagerController;\n renderLatestRunStatus?: IssueManagerLatestRunStatusRenderer;\n selectedIssue: IssueManagerIssueSummary | null;\n onDismissCreate: () => void;\n}): JSX.Element {\n const copy = controller.copy;\n const isIssueTitleMissing = controller.issueDraft.title.trim().length === 0;\n const isCreatingIssue = controller.issueEditorMode === \"create\";\n const isEditingIssue = controller.issueEditorMode === \"edit\";\n const issueContent = selectedIssue?.content ?? \"\";\n const tasks = controller.issueDetail.value?.tasks ?? [];\n const selectedTaskId = controller.nodeState.selectedTaskId;\n const selectedTask = selectedTaskId\n ? ((controller.taskDetail.value?.task?.taskId === selectedTaskId\n ? controller.taskDetail.value.task\n : tasks.find((task) => task.taskId === selectedTaskId)) ?? null)\n : null;\n const latestRun = selectedTask\n ? (controller.taskDetail.value?.latestRun ??\n controller.taskDetail.value?.recentRuns[0] ??\n null)\n : (controller.issueDetail.value?.latestRun ??\n controller.issueDetail.value?.recentRuns[0] ??\n null);\n const latestOutputs = selectedTask\n ? (controller.taskDetail.value?.latestOutputs ?? [])\n : (controller.issueDetail.value?.latestOutputs ?? []);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [deleteBusy, setDeleteBusy] = useState(false);\n\n if (isCreatingIssue || isEditingIssue) {\n return (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden\">\n <ScrollArea\n scrollbarMode=\"native\"\n className=\"min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100 [&_[data-slot=scroll-area-viewport]]:overscroll-contain\"\n >\n <div className=\"flex min-h-full flex-col gap-[14px] px-7 py-8\">\n <div className=\"flex w-full min-w-0 flex-col gap-3\">\n <div\n className={`${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`}\n >\n <h2 className=\"m-0 text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {isCreatingIssue\n ? copy.t(\"actions.createIssue\")\n : copy.t(\"actions.editIssue\")}\n </h2>\n </div>\n <div className=\"flex w-full min-w-0 flex-col gap-6\">\n <label\n className={`flex w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`}\n >\n <span className=\"leading-5\">{copy.t(\"labels.title\")}</span>\n <IssueManagerDraftTitleInput\n placeholder={copy.t(\"composer.issueTitlePlaceholder\")}\n value={controller.issueDraft.title}\n onChange={controller.setIssueTitle}\n />\n </label>\n <div\n className={`flex min-h-0 w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`}\n >\n <span className=\"leading-5\">{copy.t(\"labels.content\")}</span>\n <IssueManagerRichTextTextarea\n controller={controller}\n surface=\"issue\"\n textareaClassName=\"min-h-[180px] resize-none\"\n placeholder={copy.t(\"composer.issueContentPlaceholder\")}\n value={controller.issueDraft.content}\n onChange={controller.setIssueContent}\n />\n </div>\n </div>\n </div>\n </div>\n </ScrollArea>\n <div\n className={`shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`}\n >\n <div className=\"flex items-center justify-end gap-3\">\n <Button\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onDismissCreate}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n disabled={isIssueTitleMissing}\n size=\"dialog\"\n type=\"button\"\n onClick={() => void controller.saveIssue()}\n >\n {copy.t(\"actions.saveIssue\")}\n </Button>\n </div>\n </div>\n </div>\n );\n }\n\n if (!selectedIssue) {\n return <div className=\"h-full min-h-0\" />;\n }\n\n return (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden\">\n <ScrollArea\n scrollbarMode=\"native\"\n className=\"min-h-0 flex-1 [&_[data-orientation=vertical][data-slot=scroll-area-scrollbar]]:opacity-100 [&_[data-slot=scroll-area-viewport]]:overscroll-contain\"\n >\n <div className=\"px-8 py-7\">\n {controller.issueDetail.isLoading &&\n controller.issueDetail.value === null ? (\n <IssueManagerPaneLoadingState />\n ) : (\n <div className=\"flex w-full min-w-0 flex-col gap-9\">\n <header className=\"grid gap-3\">\n <div className=\"flex items-center justify-between gap-6\">\n <IssueManagerTitleTooltip title={selectedIssue.title}>\n <h2 className=\"line-clamp-2 min-w-0 flex-1 whitespace-normal text-[15px] font-semibold leading-6 text-[var(--text-primary)] [overflow-wrap:anywhere]\">\n {selectedIssue.title}\n </h2>\n </IssueManagerTitleTooltip>\n <div className=\"flex shrink-0 items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => controller.setIssueEditorMode(\"edit\")}\n >\n {copy.t(\"actions.edit\")}\n </Button>\n <Button\n className=\"text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => setDeleteDialogOpen(true)}\n >\n {copy.t(\"actions.delete\")}\n </Button>\n </div>\n </div>\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-2 text-[11px] font-normal leading-[1.3] text-[var(--text-secondary)]\">\n <Badge\n variant={issueManagerStatusBadgeVariant(\n selectedIssue.status\n )}\n >\n {resolveIssueManagerStatusLabel(copy, selectedIssue.status)}\n </Badge>\n <span\n aria-hidden=\"true\"\n className=\"h-4 w-px shrink-0 bg-[var(--line-2)]\"\n />\n <span className=\"text-[11px] font-normal leading-[1.3]\">\n {copy.t(\"labels.creator\")}{\" \"}\n {resolveIssueManagerCreatorLabel(selectedIssue)}\n </span>\n <span\n aria-hidden=\"true\"\n className=\"h-4 w-px shrink-0 bg-[var(--line-2)]\"\n />\n <span className=\"text-[11px] font-normal leading-[1.3]\">\n {copy.t(\"labels.createdAt\")}{\" \"}\n {formatIssueManagerTimestamp(selectedIssue.createdAtUnix) ||\n \"-\"}\n </span>\n </div>\n </header>\n <ConfirmationDialog\n cancelLabel={copy.t(\"actions.cancel\")}\n confirmBusy={deleteBusy}\n confirmLabel={copy.t(\"actions.delete\")}\n description={selectedIssue.title}\n open={deleteDialogOpen}\n title={copy.t(\"confirmations.deleteIssue\")}\n tone=\"destructive\"\n onConfirm={() => {\n setDeleteBusy(true);\n void controller\n .deleteIssue({ skipConfirmation: true })\n .finally(() => {\n setDeleteBusy(false);\n setDeleteDialogOpen(false);\n });\n }}\n onOpenChange={setDeleteDialogOpen}\n />\n <IssueManagerDescriptionSection\n content={issueContent}\n emptyLabel={copy.t(\"messages.issueContentEmpty\")}\n label={copy.t(\"labels.description\")}\n onOpen={controller.openReference}\n variant=\"plain\"\n />\n <IssueManagerLatestRunStatusSection\n copy={copy}\n latestRun={latestRun}\n onOpenAgentSession={\n controller.canOpenAgentSessions\n ? controller.openAgentSession\n : undefined\n }\n renderLatestRunStatus={renderLatestRunStatus}\n title={selectedTask?.title ?? selectedIssue.title}\n />\n <IssueManagerOutputSection\n copy={copy}\n outputs={latestOutputs}\n onOpen={controller.openReference}\n />\n <IssueManagerSubtaskSection\n copy={copy}\n onCreate={controller.createTaskDraft}\n onSelectTask={controller.selectTask}\n selectedTaskId={selectedTask?.taskId ?? null}\n tasks={tasks}\n />\n </div>\n )}\n </div>\n </ScrollArea>\n </div>\n );\n}\n","import type { IssueManagerStatus } from \"../../../contracts/index.ts\";\n\nexport type IssueManagerStatusBadgeVariant =\n | \"accent\"\n | \"default\"\n | \"destructive\"\n | \"muted\"\n | \"pending\"\n | \"success\"\n | \"warning\";\n\nexport function issueManagerStatusBadgeVariant(\n status: IssueManagerStatus\n): IssueManagerStatusBadgeVariant {\n switch (status) {\n case \"running\":\n return \"accent\";\n case \"in_progress\":\n return \"warning\";\n case \"pending_acceptance\":\n return \"pending\";\n case \"completed\":\n return \"success\";\n case \"failed\":\n return \"destructive\";\n case \"canceled\":\n return \"muted\";\n default:\n return \"default\";\n }\n}\n","import { type JSX } from \"react\";\nimport {\n AgentSessionsIcon,\n Badge,\n Button,\n FileCreateIcon,\n ScrollArea,\n cn\n} from \"@tutti-os/ui-system\";\nimport type {\n IssueManagerFileReference,\n IssueManagerIssueSummary,\n IssueManagerRun,\n IssueManagerRunOutput,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerStatusLabel\n} from \"../../../services/controllerModel.ts\";\nimport { IssueManagerTitleTooltip } from \"../content/IssueManagerTitleTooltip.tsx\";\nimport {\n stripIssueManagerDescriptionTerminalPunctuation,\n summarizeIssueManagerContent\n} from \"../panel/IssueManagerPanelText.ts\";\nimport { IssueManagerTaskListLoadingState } from \"../panel/IssueManagerPanelSurface.tsx\";\nimport { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\nimport type { IssueManagerLatestRunStatusRenderer } from \"../../latestRunStatusRenderer.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\n\nexport function IssueManagerDetailTextSection({\n body,\n isPlaceholder = false,\n label,\n meta,\n tone = \"muted\"\n}: {\n body: string;\n isPlaceholder?: boolean;\n label: string;\n meta?: string;\n tone?: \"destructive\" | \"muted\";\n}): JSX.Element {\n const bodyText = stripIssueManagerDescriptionTerminalPunctuation(body);\n const metaText = meta\n ? stripIssueManagerDescriptionTerminalPunctuation(meta)\n : null;\n const bodyClassName = cn(\n \"max-w-full whitespace-normal break-words text-[13px] leading-5 [overflow-wrap:anywhere]\",\n isPlaceholder\n ? \"font-normal text-[var(--text-secondary)]\"\n : tone === \"destructive\"\n ? \"font-semibold text-[var(--state-danger)]\"\n : \"font-semibold text-[var(--text-primary)]\"\n );\n\n if (isPlaceholder) {\n return (\n <section className=\"grid gap-2.5\">\n <h3 className=\"text-[13px] font-semibold text-[var(--text-primary)]\">\n {label}\n </h3>\n <p className={bodyClassName}>{bodyText}</p>\n </section>\n );\n }\n\n return (\n <section className=\"grid gap-2.5\">\n <h3 className=\"text-[13px] font-semibold text-[var(--text-primary)]\">\n {label}\n </h3>\n <div className=\"min-w-0 rounded-[12px] border border-[var(--line-2)] px-4 py-3\">\n <p className={bodyClassName}>{bodyText}</p>\n {metaText ? (\n <p className=\"mt-1 truncate text-[11px] font-normal text-[var(--text-secondary)]\">\n {metaText}\n </p>\n ) : null}\n </div>\n </section>\n );\n}\n\nexport function IssueManagerLatestRunStatusSection({\n copy,\n latestRun,\n onOpenAgentSession,\n renderLatestRunStatus,\n title\n}: {\n copy: IssueManagerI18nRuntime;\n latestRun: IssueManagerRun | null;\n onOpenAgentSession?: (run: IssueManagerRun) => Promise<void>;\n renderLatestRunStatus?: IssueManagerLatestRunStatusRenderer;\n title?: string | null;\n}): JSX.Element {\n if (!latestRun) {\n return (\n <IssueManagerDetailTextSection\n body={copy.t(\"messages.noExecutionStatus\")}\n isPlaceholder\n label={copy.t(\"labels.latestRunStatus\")}\n />\n );\n }\n\n const agentSessionId = latestRun.agentSessionId?.trim() ?? \"\";\n const statusLabel = resolveIssueManagerStatusLabel(copy, latestRun.status);\n const summary = latestRun.summary?.trim() ?? \"\";\n const timestamp =\n formatIssueManagerTimestamp(\n latestRun.updatedAtUnix ??\n latestRun.completedAtUnix ??\n latestRun.startedAtUnix ??\n latestRun.createdAtUnix\n ) || \"\";\n const errorMessage = latestRun.errorMessage?.trim() ?? \"\";\n const canOpenAgentSession = Boolean(agentSessionId && onOpenAgentSession);\n const renderedLatestRunStatus =\n agentSessionId && renderLatestRunStatus\n ? renderLatestRunStatus({\n canOpenAgentSession,\n copy,\n latestRun,\n title: title?.trim() || \"\",\n onOpenAgentSession\n })\n : null;\n if (\n renderedLatestRunStatus !== null &&\n renderedLatestRunStatus !== undefined\n ) {\n return (\n <section className=\"grid gap-2.5\">\n <h3 className=\"text-[13px] font-semibold text-[var(--text-primary)]\">\n {copy.t(\"labels.latestRunStatus\")}\n </h3>\n {renderedLatestRunStatus}\n </section>\n );\n }\n\n const primaryText =\n agentSessionId || summary || latestRun.runId || statusLabel;\n const content = (\n <div className=\"flex min-w-0 items-start gap-3\">\n <span\n aria-hidden=\"true\"\n className={cn(\n \"mt-0.5 flex h-7 w-7 shrink-0 items-center justify-center rounded-md border border-[var(--line-2)]\",\n canOpenAgentSession\n ? \"bg-transparency-actived text-primary\"\n : \"bg-transparent text-[var(--text-secondary)]\"\n )}\n >\n <AgentSessionsIcon size={16} />\n </span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex min-w-0 flex-wrap items-center gap-2\">\n <p\n className={cn(\n \"min-w-0 flex-1 text-[13px] font-semibold leading-5 text-[var(--text-primary)] [overflow-wrap:anywhere]\",\n agentSessionId ? \"font-mono\" : \"\"\n )}\n >\n {primaryText}\n </p>\n <Badge variant={issueManagerStatusBadgeVariant(latestRun.status)}>\n {statusLabel}\n </Badge>\n </div>\n {summary && agentSessionId ? (\n <p className=\"mt-1 text-[11px] font-normal leading-5 text-[var(--text-secondary)] [overflow-wrap:anywhere]\">\n {summary}\n </p>\n ) : null}\n {timestamp ? (\n <p className=\"mt-1 truncate text-[11px] font-normal text-[var(--text-secondary)]\">\n {timestamp}\n </p>\n ) : null}\n {errorMessage ? (\n <p className=\"mt-2 text-[11px] font-medium leading-5 text-[var(--state-danger)] [overflow-wrap:anywhere]\">\n {errorMessage}\n </p>\n ) : null}\n </div>\n </div>\n );\n const cardClassName = cn(\n \"min-w-0 rounded-[12px] border border-[var(--line-2)] px-4 py-3\",\n canOpenAgentSession\n ? \"w-full bg-transparent text-left transition-colors hover:bg-transparency-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/25 focus-visible:ring-inset\"\n : \"bg-transparent\"\n );\n\n return (\n <section className=\"grid gap-2.5\">\n <h3 className=\"text-[13px] font-semibold text-[var(--text-primary)]\">\n {copy.t(\"labels.latestRunStatus\")}\n </h3>\n {canOpenAgentSession ? (\n <button\n aria-label={copy.t(\"actions.openAgentSession\")}\n className={cardClassName}\n title={copy.t(\"actions.openAgentSession\")}\n type=\"button\"\n onClick={() => {\n void onOpenAgentSession?.(latestRun);\n }}\n >\n {content}\n </button>\n ) : (\n <div className={cardClassName}>{content}</div>\n )}\n </section>\n );\n}\n\nexport function IssueManagerOutputSection({\n copy,\n onOpen,\n outputs\n}: {\n copy: IssueManagerI18nRuntime;\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-[13px] font-semibold text-[var(--text-primary)]\">\n {copy.t(\"labels.executionOutputs\")}\n </h3>\n {outputs.length === 0 ? (\n <p className=\"text-[13px] font-normal leading-6 text-[var(--text-secondary)]\">\n {copy.t(\"messages.noExecutionOutputs\")}\n </p>\n ) : (\n <div className=\"overflow-hidden rounded-[12px] border border-[var(--line-2)] bg-transparent\">\n {outputs.map((output) => (\n <button\n className=\"flex w-full items-start justify-between gap-4 border-b border-[var(--line-2)] px-4 py-3 text-left transition-colors last:border-b-0 hover:bg-transparency-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/25 focus-visible:ring-inset\"\n key={output.outputId}\n type=\"button\"\n onClick={() => {\n void onOpen({\n displayName: output.displayName,\n kind: \"file\",\n path: output.path\n });\n }}\n >\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-[13px] font-semibold text-[var(--text-primary)]\">\n {output.displayName}\n </span>\n <span className=\"mt-1 block truncate text-[11px] font-normal text-[var(--text-secondary)]\">\n {output.path}\n </span>\n </span>\n <span className=\"shrink-0 text-[11px] font-normal text-[var(--text-secondary)]\">\n {formatIssueManagerTimestamp(output.createdAtUnix) || \"\"}\n </span>\n </button>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nexport function IssueManagerSubtaskSection({\n copy,\n onCreate,\n onSelectTask,\n selectedTaskId,\n tasks\n}: {\n copy: IssueManagerI18nRuntime;\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-[13px] font-semibold text-[var(--text-primary)]\">\n {copy.t(\"labels.subtasks\")}\n </h3>\n <Button size=\"dialog\" type=\"button\" variant=\"ghost\" onClick={onCreate}>\n <FileCreateIcon size={14} />\n {copy.t(\"actions.add\")}\n </Button>\n </div>\n {tasks.length === 0 ? (\n <p className=\"text-[13px] font-normal leading-6 text-[var(--text-secondary)]\">\n {copy.t(\"messages.noSubtasksForIssue\")}\n </p>\n ) : (\n <div className=\"overflow-hidden rounded-lg border border-[var(--line-2)] bg-transparent\">\n {tasks.map((task) => (\n <button\n className={cn(\n \"flex w-full items-start justify-between gap-4 border-b border-[var(--line-2)] px-4 py-3 text-left transition-colors last:border-b-0 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/25 focus-visible:ring-inset\",\n selectedTaskId === task.taskId\n ? \"bg-transparency-actived\"\n : \"bg-transparent hover:bg-transparency-hover\"\n )}\n key={task.taskId}\n type=\"button\"\n onClick={() => onSelectTask(task.taskId)}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex min-w-0 items-center gap-2.5\">\n <IssueManagerTitleTooltip title={task.title}>\n <span className=\"truncate text-[13px] font-semibold text-[var(--text-primary)]\">\n {task.title}\n </span>\n </IssueManagerTitleTooltip>\n <Badge variant={issueManagerStatusBadgeVariant(task.status)}>\n {resolveIssueManagerStatusLabel(copy, task.status)}\n </Badge>\n </div>\n <p className=\"mt-2 line-clamp-2 text-[11px] font-normal leading-[1.5] text-[var(--text-secondary)]\">\n {summarizeIssueManagerContent(\n task.content,\n copy.t(\"messages.taskContentEmpty\")\n )}\n </p>\n </div>\n <span className=\"shrink-0 text-[11px] font-normal text-[var(--text-secondary)]\">\n {formatIssueManagerTimestamp(\n task.createdAtUnix ?? task.updatedAtUnix\n ) || \"\"}\n </span>\n </button>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nexport function IssueManagerTaskSection({\n controller,\n selectedIssue,\n selectedTaskId\n}: {\n controller: IssueManagerController;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTaskId: string | null;\n}): JSX.Element {\n const copy = controller.copy;\n const tasks = controller.issueDetail.value?.tasks ?? [];\n\n return (\n <section className=\"border-t border-[var(--line-2)] bg-transparent\">\n <div className=\"flex items-center justify-between gap-4 border-b border-[var(--line-2)] px-8 py-4\">\n <div>\n <h3 className=\"text-[15px] font-semibold text-[var(--text-primary)]\">\n {copy.t(\"labels.taskList\")}\n </h3>\n </div>\n <Button\n className=\"px-3\"\n disabled={!selectedIssue}\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={controller.createTaskDraft}\n >\n <FileCreateIcon size={14} />\n {copy.t(\"actions.createTask\")}\n </Button>\n </div>\n\n <ScrollArea scrollbarMode=\"native\" className=\"h-[16rem]\">\n <div className=\"px-8 py-5\">\n {controller.issueDetail.isLoading &&\n controller.issueDetail.value === null ? (\n <IssueManagerTaskListLoadingState />\n ) : tasks.length === 0 ? (\n <div className=\"overflow-hidden rounded-lg border border-[var(--line-2)] bg-transparent\">\n <div className=\"px-4 py-10 text-center\">\n <p className=\"text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"messages.noTasks\")}\n </p>\n <p className=\"mt-2 text-[13px] font-normal leading-5 text-[var(--text-secondary)]\">\n {copy.t(\"messages.noTasksForIssueBody\")}\n </p>\n </div>\n </div>\n ) : (\n <div className=\"overflow-hidden rounded-lg border border-[var(--line-2)] bg-transparent\">\n {tasks.map((task) => (\n <button\n className={cn(\n \"block w-full border-b border-[var(--line-2)] px-3.5 py-3.5 text-left transition-colors last:border-b-0 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/25 focus-visible:ring-inset\",\n selectedTaskId === task.taskId\n ? \"bg-transparency-actived\"\n : \"bg-transparent hover:bg-transparency-hover\"\n )}\n key={task.taskId}\n type=\"button\"\n onClick={() => controller.selectTask(task.taskId)}\n >\n <div className=\"flex min-w-0 flex-col gap-2\">\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <div className=\"flex min-w-0 flex-wrap items-center gap-2.5\">\n <IssueManagerTitleTooltip title={task.title}>\n <span className=\"line-clamp-1 text-[13px] font-semibold leading-[1.3] text-[var(--text-primary)]\">\n {task.title}\n </span>\n </IssueManagerTitleTooltip>\n <Badge\n variant={issueManagerStatusBadgeVariant(task.status)}\n >\n {resolveIssueManagerStatusLabel(copy, task.status)}\n </Badge>\n </div>\n <p className=\"text-[11px] font-normal leading-[18px] text-[var(--text-secondary)]\">\n {formatIssueManagerTimestamp(\n task.createdAtUnix ?? task.updatedAtUnix\n )}\n </p>\n </div>\n <p className=\"line-clamp-2 text-[11px] font-normal leading-[1.5] text-[var(--text-secondary)]\">\n {summarizeIssueManagerContent(\n task.content,\n copy.t(\"messages.taskContentEmpty\")\n )}\n </p>\n </div>\n </button>\n ))}\n </div>\n )}\n </div>\n </ScrollArea>\n </section>\n );\n}\n","import { type ReactElement } from \"react\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"@tutti-os/ui-system\";\n\nconst TRUNCATED_TITLE_TOOLTIP_DELAY_MS = 300;\n\nexport function IssueManagerTitleTooltip({\n children,\n title\n}: {\n children: ReactElement;\n title: string;\n}): ReactElement {\n return (\n <Tooltip delayDuration={TRUNCATED_TITLE_TOOLTIP_DELAY_MS}>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent\n className=\"max-w-[min(420px,calc(100vw-32px))] whitespace-normal text-left [overflow-wrap:anywhere]\"\n side=\"top\"\n >\n {title}\n </TooltipContent>\n </Tooltip>\n );\n}\n","import { extractIssueManagerPlainTextFromContent } from \"../../../core/index.ts\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\n\nexport function summarizeIssueManagerContent(\n content: string | null | undefined,\n fallback: string\n): string {\n const plainText = stripIssueManagerDescriptionTerminalPunctuation(\n extractIssueManagerPlainTextFromContent(content ?? \"\")\n );\n if (!plainText) {\n return stripIssueManagerDescriptionTerminalPunctuation(fallback);\n }\n if (plainText.length <= 120) {\n return plainText;\n }\n return `${plainText.slice(0, 117)}...`;\n}\n\nexport function stripIssueManagerDescriptionTerminalPunctuation(\n value: string\n): string {\n const trimmed = value.trim();\n if (!trimmed || trimmed.endsWith(\"...\") || trimmed.endsWith(\"…\")) {\n return trimmed;\n }\n return trimmed.replace(/[。..]+$/u, \"\");\n}\n\nexport function resolveTaskCreatorLabel(task: IssueManagerTaskSummary): string {\n return resolveIssueManagerCreatorLabel(task);\n}\n\nexport function resolveIssueManagerCreatorLabel(\n entity:\n | Pick<IssueManagerIssueSummary, \"creatorDisplayName\" | \"creatorUserId\">\n | Pick<IssueManagerTaskSummary, \"creatorDisplayName\" | \"creatorUserId\">\n): string {\n return entity.creatorDisplayName?.trim() || entity.creatorUserId;\n}\n","import { type JSX, type ReactNode } from \"react\";\nimport { Button, FileCreateIcon } from \"@tutti-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-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {title}\n </p>\n <p className=\"max-w-[420px] text-[15px] 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 \"@tutti-os/ui-rich-text/editor\";\nimport { cn } from \"@tutti-os/ui-system\";\nimport { normalizeIssueManagerContent } from \"../../../core/index.ts\";\nimport type { IssueManagerFileReference } from \"../../../contracts/index.ts\";\nimport { stripIssueManagerDescriptionTerminalPunctuation } from \"../panel/IssueManagerPanelText.ts\";\n\nexport function IssueManagerDescriptionSection({\n content,\n emptyLabel,\n label,\n minHeightClass = \"min-h-[14rem]\",\n onOpen,\n variant = \"card\"\n}: {\n content: string;\n emptyLabel: string;\n label: string;\n minHeightClass?: string;\n onOpen?: (reference: IssueManagerFileReference) => Promise<void>;\n variant?: \"card\" | \"plain\";\n}): JSX.Element {\n const contentRef = useRef<HTMLDivElement | null>(null);\n const [isOverflowing, setIsOverflowing] = useState(false);\n const normalizedContent = normalizeIssueManagerContent(content).trim();\n const displayContent =\n stripIssueManagerDescriptionTerminalPunctuation(normalizedContent);\n\n useEffect(() => {\n if (variant === \"plain\") {\n setIsOverflowing(false);\n return;\n }\n if (!displayContent) {\n setIsOverflowing(false);\n return;\n }\n\n const contentElement = contentRef.current;\n if (!contentElement) {\n return;\n }\n\n const measure = () => {\n setIsOverflowing(\n contentElement.scrollHeight > contentElement.clientHeight + 1\n );\n };\n\n measure();\n if (typeof ResizeObserver === \"undefined\") {\n return;\n }\n\n const observer = new ResizeObserver(() => {\n measure();\n });\n observer.observe(contentElement);\n return () => {\n observer.disconnect();\n };\n }, [displayContent, variant]);\n\n if (variant === \"plain\") {\n return (\n <section className=\"grid gap-2\">\n <span className=\"text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {label}\n </span>\n {displayContent ? (\n <div className=\"max-w-3xl text-[13px] font-normal leading-5 text-[var(--text-secondary)]\">\n <IssueManagerDescriptionContent\n content={displayContent}\n onOpen={onOpen}\n />\n </div>\n ) : (\n <p className=\"text-[13px] font-normal leading-5 text-[var(--text-secondary)]\">\n {emptyLabel}\n </p>\n )}\n </section>\n );\n }\n\n return (\n <section className=\"grid gap-2\">\n <span className=\"text-[13px] 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-[13px] font-normal leading-5 text-[var(--text-secondary)]\",\n isOverflowing && \"pb-8\"\n )}\n ref={contentRef}\n >\n {displayContent ? (\n <IssueManagerDescriptionContent\n content={displayContent}\n onOpen={onOpen}\n />\n ) : (\n <p className=\"font-normal text-[var(--text-secondary)]\">\n {emptyLabel}\n </p>\n )}\n </div>\n {isOverflowing ? (\n <div\n className=\"pointer-events-none absolute right-0 bottom-1 left-0 h-10\"\n style={{\n background:\n \"linear-gradient(to top, var(--background-panel), color-mix(in srgb, var(--background-panel) 80%, transparent), transparent)\"\n }}\n />\n ) : null}\n </div>\n </section>\n );\n}\n\nfunction IssueManagerDescriptionContent({\n content,\n onOpen\n}: {\n content: string;\n onOpen?: (reference: IssueManagerFileReference) => Promise<void>;\n}): JSX.Element {\n return (\n <RichTextReadonlyContent\n value={content}\n onOpenWorkspaceReference={\n onOpen\n ? (reference) =>\n onOpen({\n displayName: reference.label,\n kind: reference.kind,\n path: reference.path\n })\n : undefined\n }\n />\n );\n}\n","import { useEffect, useMemo, useRef, useState, type JSX } from \"react\";\nimport { RichTextAtEditor } from \"@tutti-os/ui-rich-text/editor\";\nimport { Button, LinkIcon, cn } from \"@tutti-os/ui-system\";\nimport type {\n IssueManagerController,\n IssueManagerRichTextSurface\n} from \"../../react/index.ts\";\n\nconst issueManagerRichTextTextareaBaseClassName =\n \"min-h-20 w-full rounded-[8px] border border-transparent bg-[var(--transparency-block)] p-3 text-[13px] font-normal leading-[1.3] text-[var(--text-primary)] transition-[background-color,border-color,color] outline-none shadow-none placeholder:text-[var(--text-placeholder)] hover:bg-[var(--transparency-hover)] focus:bg-[var(--transparency-hover)] focus-visible:border-transparent focus-visible:bg-[var(--transparency-hover)] focus-visible:ring-0 disabled:cursor-not-allowed disabled:bg-[var(--transparency-block)] disabled:text-[var(--text-disabled)] disabled:opacity-100 aria-invalid:border-[var(--state-danger)] aria-invalid:bg-[var(--transparency-block)] aria-invalid:hover:bg-[var(--transparency-hover)] aria-invalid:focus:bg-[var(--transparency-hover)] aria-invalid:focus-visible:bg-[var(--transparency-hover)] aria-invalid:ring-0 aria-invalid:shadow-none\";\n\nconst issueManagerRichTextPlaceholderBaseClassName =\n \"min-h-20 w-full p-3 text-[13px] font-normal leading-[1.3] text-[var(--text-placeholder)]\";\n\nexport function IssueManagerRichTextTextarea({\n controller,\n onChange,\n placeholder,\n surface,\n textareaClassName,\n value\n}: {\n controller: IssueManagerController;\n onChange: (value: string) => void;\n placeholder?: string;\n surface: IssueManagerRichTextSurface;\n textareaClassName?: string;\n value: string;\n}): JSX.Element {\n const providers = useMemo(\n () => controller.resolveRichTextAtProviders(surface),\n [controller, surface]\n );\n const showReferenceAction = controller.canReferenceWorkspaceFiles;\n const [focusSignal, setFocusSignal] = useState(0);\n const previousValueRef = useRef(value);\n const wasAddingReferenceRef = useRef(false);\n\n useEffect(() => {\n const isAddingReference =\n controller.referenceTarget?.mode === \"insert\" &&\n controller.referenceTarget.parentKind === surface;\n if (\n wasAddingReferenceRef.current &&\n !isAddingReference &&\n value !== previousValueRef.current\n ) {\n setFocusSignal((current) => current + 1);\n }\n wasAddingReferenceRef.current = isAddingReference;\n previousValueRef.current = value;\n }, [controller.referenceTarget, surface, value]);\n\n return (\n <RichTextAtEditor\n focusSignal={focusSignal}\n maxResults={8}\n minQueryLength={1}\n providers={providers}\n textOverrides={{\n loadingLabel: controller.copy.t(\"richTextAt.loading\"),\n noMatchesLabel: controller.copy.t(\"richTextAt.noMatches\"),\n removeReferenceActionLabel: controller.copy.t(\"actions.removeReference\")\n }}\n textareaClassName={cn(\n issueManagerRichTextTextareaBaseClassName,\n textareaClassName,\n showReferenceAction && \"pb-11\"\n )}\n placeholderClassName={cn(\n issueManagerRichTextPlaceholderBaseClassName,\n textareaClassName,\n showReferenceAction && \"pb-11\"\n )}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n overlay={\n showReferenceAction ? (\n <div className=\"pointer-events-none absolute inset-x-3 bottom-3 z-10 flex\">\n <Button\n className=\"pointer-events-auto\"\n size=\"default\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n void controller.insertReferences(surface);\n }}\n >\n <LinkIcon size={14} />\n {controller.copy.t(\"actions.referenceWorkspaceFiles\")}\n </Button>\n </div>\n ) : null\n }\n />\n );\n}\n","import { useComposedInputValue } from \"@tutti-os/ui-react-hooks\";\nimport { useLayoutEffect, useRef, type JSX } from \"react\";\nimport { Input } from \"@tutti-os/ui-system\";\n\nexport function IssueManagerDraftTitleInput({\n onChange,\n placeholder,\n value\n}: {\n onChange: (value: string) => void;\n placeholder: string;\n value: string;\n}): JSX.Element {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const pendingSelectionRef = useRef<{\n direction: \"backward\" | \"forward\" | \"none\";\n end: number;\n start: number;\n } | null>(null);\n const titleInput = useComposedInputValue({ onCommit: onChange, value });\n\n useLayoutEffect(() => {\n const input = inputRef.current;\n const selection = pendingSelectionRef.current;\n if (!input || !selection || document.activeElement !== input) {\n return;\n }\n pendingSelectionRef.current = null;\n const maxPosition = input.value.length;\n input.setSelectionRange(\n Math.min(selection.start, maxPosition),\n Math.min(selection.end, maxPosition),\n selection.direction\n );\n }, [titleInput.value, value]);\n\n const rememberSelection = (input: HTMLInputElement) => {\n const start = input.selectionStart;\n const end = input.selectionEnd;\n if (start === null || end === null) {\n return;\n }\n pendingSelectionRef.current = {\n direction: input.selectionDirection ?? \"none\",\n end,\n start\n };\n };\n\n return (\n <Input\n ref={inputRef}\n placeholder={placeholder}\n variant=\"md\"\n value={titleInput.value}\n onBlur={titleInput.onBlur}\n onChange={(event) => {\n rememberSelection(event.currentTarget);\n titleInput.onChange(event);\n }}\n onCompositionEnd={(event) => {\n rememberSelection(event.currentTarget);\n titleInput.onCompositionEnd(event);\n }}\n onCompositionStart={titleInput.onCompositionStart}\n />\n );\n}\n","export const issueManagerEditorRiseInClassName =\n \"motion-safe:animate-in motion-safe:fade-in-0 motion-safe:slide-in-from-bottom-3 motion-safe:duration-[240ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-safe:[animation-fill-mode:both] motion-reduce:animate-none\";\n\nexport const issueManagerEditorRiseInDelay0ClassName =\n \"motion-safe:[animation-delay:0ms]\";\n\nexport const issueManagerEditorRiseInDelay1ClassName =\n \"motion-safe:[animation-delay:55ms]\";\n\nexport const issueManagerEditorRiseInDelay2ClassName =\n \"motion-safe:[animation-delay:110ms]\";\n\nexport const issueManagerEditorRiseInDelay3ClassName =\n \"motion-safe:[animation-delay:165ms]\";\n\nexport const issueManagerEditorFooterFadeInClassName =\n \"motion-safe:animate-in motion-safe:fade-in-0 motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)] motion-safe:[animation-delay:180ms] motion-safe:[animation-fill-mode:both] motion-reduce:animate-none\";\n","import { type JSX } from \"react\";\nimport { Button, cn } from \"@tutti-os/ui-system\";\nimport type { IssueManagerIssueSummary } from \"../../../contracts/index.ts\";\nimport {\n IssueManagerBreakdownActionTrigger,\n IssueManagerExecutionDirectoryTrigger,\n IssueManagerRunActionTrigger\n} from \"../task/IssueManagerRunSections.tsx\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport { isIssueManagerRunControlDisabled } from \"./IssueManagerTaskDrawerState.ts\";\n\nexport interface IssueManagerBottomBarProps {\n controller: IssueManagerController;\n isNarrowLayout: boolean;\n selectedIssue: IssueManagerIssueSummary | null;\n visible: boolean;\n}\n\nexport function IssueManagerBottomBar({\n controller,\n isNarrowLayout,\n selectedIssue,\n visible\n}: IssueManagerBottomBarProps): JSX.Element | null {\n const copy = controller.copy;\n if (!visible || !selectedIssue) {\n return null;\n }\n const runControlsDisabled = isIssueManagerRunControlDisabled({\n selectedIssueStatus: selectedIssue.status,\n selectedTaskStatus: null\n });\n\n return (\n <div className=\"border-t border-[var(--border-1)] bg-transparent px-6 py-4 backdrop-blur\">\n <div\n className={cn(\n \"flex gap-3\",\n isNarrowLayout\n ? \"flex-wrap items-center justify-end\"\n : \"items-center justify-end\"\n )}\n >\n <IssueManagerExecutionDirectoryTrigger\n className=\"mr-auto min-w-0 max-w-[240px] justify-start overflow-hidden\"\n controller={controller}\n disabled={runControlsDisabled}\n />\n <div className=\"flex shrink-0 flex-nowrap items-center justify-end gap-3\">\n <IssueManagerBreakdownActionTrigger\n controller={controller}\n disabled={!selectedIssue}\n triggerVariant=\"button\"\n />\n <IssueManagerRunActionTrigger\n controller={controller}\n disabled={!selectedIssue || runControlsDisabled}\n triggerVariant=\"button\"\n />\n {controller.canInviteCollaborators ? (\n <Button\n className=\"px-4\"\n disabled={!selectedIssue}\n size=\"dialog\"\n type=\"button\"\n onClick={() => {\n void controller.shareSelection();\n }}\n >\n {copy.t(\"actions.inviteCollaborator\")}\n </Button>\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n","import { type JSX, type ReactNode } from \"react\";\nimport {\n Badge,\n AgentSessionsIcon,\n Button,\n CheckIcon,\n ChevronDownIcon,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n IssueIcon,\n cn\n} from \"@tutti-os/ui-system\";\nimport { WorkspaceUserProjectSelect } from \"@tutti-os/workspace-user-project/ui\";\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\";\nimport { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\n\nconst providerMenuItemClassName =\n \"min-h-8 overflow-hidden rounded-md py-1.5 pr-7 pl-2.5 text-[13px] font-normal leading-[1.2] text-[var(--text-primary)]\";\nconst providerMenuItemCheckClassName =\n \"pointer-events-none absolute right-2 top-1/2 shrink-0 -translate-y-1/2\";\nconst providerActionTriggerClassName = \"font-[var(--font-weight-emphasis-cjk)]\";\n\nexport function IssueManagerRunActionTrigger({\n controller,\n disabled = false,\n triggerClassName,\n triggerVariant = \"default\"\n}: {\n controller: IssueManagerController;\n disabled?: boolean;\n triggerClassName?: string;\n triggerVariant?: IssueManagerProviderActionTriggerVariant;\n}): JSX.Element {\n return (\n <IssueManagerProviderActionMenu\n controller={controller}\n disabled={disabled}\n icon={<AgentSessionsIcon size={16} />}\n label={controller.copy.t(\"actions.askAgentToRun\")}\n triggerClassName={triggerClassName}\n triggerVariant={triggerVariant}\n onSelectProvider={(provider) => controller.runTask(provider)}\n />\n );\n}\n\nexport function IssueManagerBreakdownActionTrigger({\n controller,\n disabled = false,\n triggerClassName,\n triggerVariant = \"default\"\n}: {\n controller: IssueManagerController;\n disabled?: boolean;\n triggerClassName?: string;\n triggerVariant?: IssueManagerProviderActionTriggerVariant;\n}): JSX.Element {\n return (\n <IssueManagerProviderActionMenu\n controller={controller}\n disabled={disabled}\n icon={<IssueIcon size={16} />}\n label={controller.copy.t(\"actions.askAgentToBreakdown\")}\n triggerClassName={triggerClassName}\n triggerVariant={triggerVariant}\n triggerButtonVariant=\"secondary\"\n onSelectProvider={(provider) => controller.startTaskBreakdown(provider)}\n />\n );\n}\n\ntype IssueManagerProviderActionTriggerVariant = \"button\" | \"default\";\n\nfunction IssueManagerProviderActionMenu({\n controller,\n disabled,\n icon,\n label,\n onSelectProvider,\n triggerButtonVariant,\n triggerClassName,\n triggerVariant\n}: {\n controller: IssueManagerController;\n disabled: boolean;\n icon: ReactNode;\n label: string;\n onSelectProvider: (provider: string) => Promise<void>;\n triggerButtonVariant?: \"secondary\";\n triggerClassName?: string;\n triggerVariant: IssueManagerProviderActionTriggerVariant;\n}): JSX.Element {\n const providerOptions = controller.providerOptions;\n const selectedProvider = controller.nodeState.selectedAgentProvider.trim();\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild disabled={disabled}>\n <Button\n className={cn(\n \"min-w-0\",\n \"[&[data-state=open]_[data-issue-manager-provider-chevron=true]]:rotate-180\",\n providerActionTriggerClassName,\n triggerClassName\n )}\n disabled={disabled}\n size={triggerVariant === \"button\" ? \"dialog\" : \"default\"}\n type=\"button\"\n variant={triggerButtonVariant}\n >\n {icon}\n <span className=\"truncate\">{label}</span>\n <ChevronDownIcon\n className=\"shrink-0 transition-transform duration-200\"\n data-issue-manager-provider-chevron=\"true\"\n size={14}\n />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"w-[220px] min-w-[220px]\"\n style={{ zIndex: \"var(--z-panel-popover)\" }}\n >\n {providerOptions.length === 0 ? (\n <DropdownMenuItem className={providerMenuItemClassName} disabled>\n {controller.copy.t(\"messages.noAgentProviders\")}\n </DropdownMenuItem>\n ) : (\n providerOptions.map((option) => (\n <DropdownMenuItem\n className={providerMenuItemClassName}\n disabled={option.disabled === true}\n key={option.provider}\n title={option.disabledReason}\n onSelect={() => {\n void onSelectProvider(option.provider);\n }}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2 pr-1\">\n <IssueManagerAgentProviderIcon\n fallbackIcon={<AgentSessionsIcon aria-hidden size={15} />}\n iconUrl={option.iconUrl}\n />\n <span className=\"min-w-0 flex-1 truncate\">{option.label}</span>\n {option.provider === selectedProvider ? (\n <CheckIcon\n className={providerMenuItemCheckClassName}\n size={15}\n />\n ) : null}\n </span>\n </DropdownMenuItem>\n ))\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nfunction IssueManagerAgentProviderIcon({\n fallbackIcon,\n iconUrl\n}: {\n fallbackIcon: ReactNode;\n iconUrl?: string | null;\n}): JSX.Element {\n const normalizedIconUrl = iconUrl?.trim();\n\n if (!normalizedIconUrl) {\n return <>{fallbackIcon}</>;\n }\n\n return (\n <img\n alt=\"\"\n aria-hidden=\"true\"\n className=\"size-4 shrink-0 rounded-[4px] object-contain\"\n decoding=\"async\"\n draggable={false}\n src={normalizedIconUrl}\n />\n );\n}\n\nexport function IssueManagerExecutionDirectoryTrigger({\n className,\n controller,\n disabled = false\n}: {\n className?: string;\n controller: IssueManagerController;\n disabled?: boolean;\n}): JSX.Element | null {\n if (!controller.canSelectExecutionDirectory) {\n return null;\n }\n\n return (\n <WorkspaceUserProjectSelect\n classNames={{\n content: \"w-[240px] min-w-[240px]\",\n item: \"min-h-7 overflow-hidden rounded-md py-1 pr-7 pl-2.5 text-[13px] font-normal leading-[1.2] text-[var(--text-primary)]\",\n trigger: cn(\n \"group inline-flex min-h-7 max-w-[240px] min-w-0 items-center gap-1.5 overflow-hidden rounded-md border-0 bg-transparent px-0.5 py-0 text-[13px] font-normal leading-[1.2] text-[var(--text-secondary)] shadow-none outline-none hover:bg-transparent hover:text-[var(--text-primary)] focus:bg-transparent focus:text-[var(--text-primary)] focus-visible:bg-transparent focus-visible:ring-0 disabled:bg-transparent disabled:text-[var(--text-disabled)]\",\n className\n )\n }}\n contentAlign=\"end\"\n disabled={disabled}\n i18n={controller.workspaceUserProjectI18n}\n service={controller.executionDirectoryProjectService}\n selectedProjectPath={controller.nodeState.selectedExecutionDirectory}\n unlistedProjectLabel={controller.copy.t(\n \"labels.customExecutionDirectory\"\n )}\n onProjectPathChange={(path: string | null) => {\n void controller.useExecutionDirectory(path);\n }}\n />\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-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.recentRuns\")}\n </h4>\n {recentRuns.length === 0 ? (\n <p className=\"text-[13px] leading-5 text-[var(--text-secondary)]\">\n {copy.t(\"messages.noRecentRuns\")}\n </p>\n ) : (\n <div className=\"grid gap-2.5\">\n {recentRuns.map((run) => (\n <div\n className=\"rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3\"\n key={run.runId}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <p className=\"truncate text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {run.summary || run.runId}\n </p>\n <p className=\"mt-1 text-[11px] leading-[1.55] text-[var(--text-secondary)]\">\n {formatIssueManagerTimestamp(\n run.updatedAtUnix ?? run.createdAtUnix\n )}\n </p>\n </div>\n <Badge variant={issueManagerStatusBadgeVariant(run.status)}>\n {resolveIssueManagerStatusLabel(copy, run.status)}\n </Badge>\n </div>\n {run.errorMessage ? (\n <p className=\"mt-2 text-[11px] text-[var(--state-danger)]\">\n {run.errorMessage}\n </p>\n ) : null}\n </div>\n ))}\n </div>\n )}\n </section>\n\n <section className=\"rounded-lg border border-border-1 bg-transparent px-4 py-4\">\n <h4 className=\"mb-3 text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.outputs\")}\n </h4>\n {outputs.length === 0 ? (\n <p className=\"text-[13px] leading-5 text-[var(--text-secondary)]\">\n {copy.t(\"messages.noOutputs\")}\n </p>\n ) : (\n <div className=\"grid gap-2.5\">\n {outputs.map((output) => (\n <button\n className=\"rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3 text-left transition-colors hover:bg-transparency-hover\"\n key={output.outputId}\n type=\"button\"\n onClick={() => {\n void onOpen({\n displayName: output.displayName,\n kind: \"file\",\n path: output.path\n });\n }}\n >\n <p className=\"truncate text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {output.displayName}\n </p>\n <p className=\"mt-1 truncate text-[11px] leading-[1.55] text-[var(--text-secondary)]\">\n {output.path}\n </p>\n </button>\n ))}\n </div>\n )}\n </section>\n </div>\n );\n}\n","import type {\n IssueManagerIssueSummary,\n IssueManagerStatus,\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\nexport function isIssueManagerRunControlDisabled(input: {\n disabled?: boolean;\n selectedIssueStatus: IssueManagerStatus | null | undefined;\n selectedTaskStatus: IssueManagerStatus | null | undefined;\n}): boolean {\n if (input.disabled === true) {\n return true;\n }\n return (input.selectedTaskStatus ?? input.selectedIssueStatus) === \"running\";\n}\n","import { type JSX } from \"react\";\nimport { ToastProvider, ToastRoot, ToastTitle } from \"@tutti-os/ui-system\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\n\nexport function IssueManagerFloatingNotice({\n notice\n}: {\n notice: NonNullable<IssueManagerController[\"floatingNotice\"]>;\n}): JSX.Element {\n const variant = notice.tone === \"destructive\" ? \"destructive\" : \"default\";\n\n return (\n <ToastProvider>\n <ToastRoot\n key={notice.id}\n open\n anchor=\"node\"\n busy={notice.isLoading}\n className=\"z-30 w-fit max-w-[min(72vw,40rem)] px-4 py-3 shadow-lg\"\n nodeInsetTopPx={16}\n variant={variant}\n >\n <ToastTitle className=\"whitespace-normal [overflow-wrap:anywhere]\">\n {notice.title}\n </ToastTitle>\n </ToastRoot>\n </ToastProvider>\n );\n}\n","import { type JSX } from \"react\";\nimport { cn } from \"@tutti-os/ui-system\";\nimport type { IssueManagerNodeState } from \"../../../contracts/index.ts\";\nimport {\n IssueManagerSidebarBody,\n IssueManagerSidebarHeader,\n IssueManagerSidebarStandalonePane,\n IssueManagerSidebarStatusTabs\n} from \"./IssueManagerSidebarSections.tsx\";\nimport { resolveIssueManagerSidebarPresentationState } from \"./IssueManagerSidebarState.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport type { IssueManagerSidebarViewState } from \"./IssueManagerShellState.ts\";\n\nexport interface IssueManagerSidebarProps {\n controller: IssueManagerController;\n isCollapsed: boolean;\n isNarrowLayout: boolean;\n showStandaloneState: boolean;\n sidebarViewState: IssueManagerSidebarViewState;\n statusCounts: Record<IssueManagerNodeState[\"issueStatusFilter\"], number>;\n}\n\nexport function IssueManagerSidebar({\n controller,\n isCollapsed,\n isNarrowLayout,\n showStandaloneState,\n sidebarViewState,\n statusCounts\n}: IssueManagerSidebarProps): JSX.Element {\n const copy = controller.copy;\n const presentation = resolveIssueManagerSidebarPresentationState({\n showStandaloneState,\n sidebarViewState\n });\n\n return (\n <aside\n aria-hidden={isCollapsed ? \"true\" : undefined}\n className={cn(\n \"relative isolate flex h-full min-h-0 min-w-0 flex-col overflow-hidden bg-transparent opacity-100 transition-[border-color] duration-[140ms] ease-in-out after:pointer-events-none after:absolute after:inset-0 after:z-[1] after:bg-[color-mix(in_srgb,var(--background-panel)_88%,transparent)] after:opacity-0 after:transition-opacity after:duration-[160ms] after:delay-[70ms] motion-reduce:transition-none motion-reduce:after:transition-none [&>*]:transition-[opacity,filter] [&>*]:duration-[160ms] [&>*]:delay-[70ms] [&>*]:ease-in-out motion-reduce:[&>*]:transition-none\",\n isNarrowLayout\n ? \"border-b border-[var(--border-1)]\"\n : \"border-r border-[var(--border-1)]\",\n isCollapsed &&\n \"pointer-events-none border-r-transparent after:opacity-100 after:delay-0 [&>*]:opacity-0 [&>*]:blur-[1px] [&>*]:delay-0 motion-reduce:[&>*]:blur-none\"\n )}\n inert={isCollapsed ? true : undefined}\n >\n <IssueManagerSidebarHeader\n copy={copy}\n issueSearchQuery={controller.nodeState.issueSearchQuery}\n onCreateIssue={() => controller.setIssueEditorMode(\"create\")}\n onIssueSearchUsage={controller.reportIssueSearchUsage}\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 { useComposedInputValue } from \"@tutti-os/ui-react-hooks\";\nimport {\n Badge,\n Button,\n CloseIcon,\n FileCreateIcon,\n Input,\n ScrollArea,\n UnderlineTabs,\n cn\n} from \"@tutti-os/ui-system\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerNodeState\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\nimport {\n formatIssueManagerDate,\n resolveIssueManagerStatusLabel\n} from \"../../../services/controllerModel.ts\";\nimport {\n issueManagerStatusFilters,\n type IssueManagerSidebarViewState\n} from \"./IssueManagerShellState.ts\";\nimport { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\n\nexport function IssueManagerSidebarHeader({\n copy,\n issueSearchQuery,\n onCreateIssue,\n onIssueSearchUsage,\n onIssueSearchQueryChange\n}: {\n copy: IssueManagerI18nRuntime;\n issueSearchQuery: string;\n onCreateIssue: () => void;\n onIssueSearchUsage: (value: string) => 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 onSearchUsage={onIssueSearchUsage}\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 scrollbarMode=\"native\"\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 onSearchUsage,\n placeholder,\n value\n}: {\n clearLabel: string;\n onChange: (value: string) => void;\n onSearchUsage: (value: string) => void;\n placeholder: string;\n value: string;\n}): JSX.Element {\n const searchInput = useComposedInputValue({ onCommit: onChange, value });\n\n return (\n <div\n className=\"relative min-w-0 flex-1\"\n data-has-value={searchInput.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-[13px] 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 searchInput.value ? \"pr-9\" : \"pr-3\"\n )}\n placeholder={placeholder}\n type=\"search\"\n value={searchInput.value}\n onBlur={(event) => {\n searchInput.onBlur(event);\n onSearchUsage(event.currentTarget.value);\n }}\n onChange={searchInput.onChange}\n onCompositionEnd={searchInput.onCompositionEnd}\n onCompositionStart={searchInput.onCompositionStart}\n />\n {searchInput.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={searchInput.clearValue}\n onMouseDown={(event) => event.preventDefault()}\n >\n <CloseIcon className=\"size-3.5\" />\n </button>\n ) : null}\n </div>\n );\n}\n\nfunction IssueManagerSidebarIssueList({\n copy,\n isNarrowLayout,\n issues,\n selectedIssueId,\n onSelectIssue\n}: {\n copy: IssueManagerI18nRuntime;\n isNarrowLayout: boolean;\n issues: readonly IssueManagerIssueSummary[];\n selectedIssueId: string | null;\n onSelectIssue: (issueId: string | null) => void;\n}): JSX.Element {\n return (\n <div\n className={cn(\n \"flex gap-2.5\",\n isNarrowLayout\n ? \"flex-row flex-nowrap items-start overflow-x-auto overflow-y-hidden [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n : \"flex-col\"\n )}\n >\n {issues.map((issue) => (\n <IssueManagerSidebarItem\n copy={copy}\n isNarrowLayout={isNarrowLayout}\n issue={issue}\n key={issue.issueId}\n selected={selectedIssueId === issue.issueId}\n onSelect={onSelectIssue}\n />\n ))}\n </div>\n );\n}\n\nfunction IssueManagerSidebarItem({\n copy,\n isNarrowLayout,\n issue,\n onSelect,\n selected\n}: {\n copy: IssueManagerI18nRuntime;\n isNarrowLayout: boolean;\n issue: IssueManagerIssueSummary;\n onSelect: (issueId: string | null) => void;\n selected: boolean;\n}): JSX.Element {\n return (\n <button\n className={cn(\n \"relative rounded-lg border px-3.5 py-3.5 text-left transition-colors\",\n isNarrowLayout\n ? \"h-24 max-h-24 min-h-24 w-[clamp(220px,58vw,320px)] flex-[0_0_clamp(220px,58vw,320px)] overflow-hidden\"\n : \"w-full\",\n selected\n ? \"border-[var(--border-1)] bg-[var(--background-fronted)]\"\n : \"border-[var(--border-1)] bg-transparent hover:bg-[var(--transparency-block)]\"\n )}\n type=\"button\"\n onClick={() => onSelect(issue.issueId)}\n >\n <Badge\n className=\"absolute top-3.5 right-3.5\"\n variant={issueManagerStatusBadgeVariant(issue.status)}\n >\n {resolveIssueManagerStatusLabel(copy, issue.status)}\n </Badge>\n <div className=\"min-w-0 space-y-2\">\n <p className=\"pr-28 text-[11px] leading-[1.55] text-[var(--text-secondary)]\">\n {formatIssueManagerDate(issue.updatedAtUnix ?? issue.createdAtUnix)}\n </p>\n <p className=\"line-clamp-4 text-[13px] font-medium leading-[1.35rem] text-[var(--text-primary)]\">\n {issue.title}\n </p>\n </div>\n <div className=\"mt-2 text-[11px] 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 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 \"max-w-sm text-[13px] leading-5 text-[var(--text-secondary)]\",\n tone === \"destructive\"\n ? \"text-[var(--state-danger)]\"\n : \"text-[var(--text-secondary)]\"\n )}\n >\n {title}\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-[13px] font-semibold leading-5 text-[var(--state-danger)]\">\n {title}\n </p>\n <Button\n className=\"mt-3\"\n size=\"sm\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onRetry}\n >\n {retryLabel}\n </Button>\n </div>\n );\n}\n","import type {\n IssueManagerIssueSummary,\n IssueManagerStatusCounts\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\nimport type { AsyncCollectionState } from \"../../../services/controllerTypes.ts\";\nimport type { IssueManagerEditorMode } from \"../../../services/controllerModel.ts\";\n\nexport const issueManagerStatusFilters = [\n \"all\",\n \"not_started\",\n \"running\",\n \"in_progress\",\n \"pending_acceptance\",\n \"completed\",\n \"failed\",\n \"canceled\"\n] as const;\n\nexport type IssueManagerSidebarViewState =\n | {\n kind: \"loading\";\n }\n | {\n kind: \"error\";\n retryLabel: string;\n title: string;\n }\n | {\n body: string;\n kind: \"empty\";\n title: string;\n }\n | {\n issues: readonly IssueManagerIssueSummary[];\n kind: \"list\";\n };\n\nexport function resolveIssueManagerSidebarViewState(input: {\n copy: IssueManagerI18nRuntime;\n issues: AsyncCollectionState<IssueManagerIssueSummary[]>;\n}): IssueManagerSidebarViewState {\n if (\n input.issues.isLoading &&\n input.issues.value.length === 0 &&\n input.issues.hasResolved !== true\n ) {\n return {\n kind: \"loading\"\n };\n }\n\n if (input.issues.error) {\n return {\n kind: \"error\",\n retryLabel: input.copy.t(\"actions.refresh\"),\n title: input.copy.t(\"messages.issueRefreshFailed\")\n };\n }\n\n if (input.issues.value.length === 0) {\n return {\n body: input.copy.t(\"messages.noIssuesForFilterBody\"),\n kind: \"empty\",\n title: input.copy.t(\"messages.noIssuesForFilterTitle\")\n };\n }\n\n return {\n issues: input.issues.value,\n kind: \"list\"\n };\n}\n\nexport function buildIssueManagerStatusCounts(\n issues: readonly IssueManagerIssueSummary[]\n): Record<(typeof issueManagerStatusFilters)[number], number> {\n const counts: Record<(typeof issueManagerStatusFilters)[number], number> = {\n all: issues.length,\n canceled: 0,\n completed: 0,\n failed: 0,\n in_progress: 0,\n not_started: 0,\n pending_acceptance: 0,\n running: 0\n };\n\n for (const issue of issues) {\n if (issue.status in counts) {\n counts[issue.status as keyof typeof counts] += 1;\n }\n }\n\n return counts;\n}\n\nexport function resolveIssueManagerStatusCounts(\n input: AsyncCollectionState<IssueManagerIssueSummary[]>\n): Record<(typeof issueManagerStatusFilters)[number], number> {\n return input.statusCounts\n ? mapIssueManagerStatusCounts(input.statusCounts)\n : buildIssueManagerStatusCounts(input.value);\n}\n\nfunction mapIssueManagerStatusCounts(\n counts: IssueManagerStatusCounts\n): Record<(typeof issueManagerStatusFilters)[number], number> {\n return {\n all: counts.all,\n canceled: counts.canceled,\n completed: counts.completed,\n failed: counts.failed,\n in_progress: 0,\n not_started: counts.notStarted,\n pending_acceptance: counts.pendingAcceptance,\n running: counts.running\n };\n}\n\nexport interface IssueManagerShellContentViewState {\n isIssueEditing: boolean;\n isTaskCreating: boolean;\n isTaskDrawerOpen: boolean;\n showBottomBar: boolean;\n}\n\nexport function resolveIssueManagerShellContentViewState(input: {\n issueEditorMode: IssueManagerEditorMode;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTaskPresent: boolean;\n taskEditorMode: IssueManagerEditorMode;\n}): IssueManagerShellContentViewState {\n const isIssueEditing = input.issueEditorMode !== \"read\";\n const isTaskCreating = !isIssueEditing && input.taskEditorMode === \"create\";\n const isTaskDrawerOpen =\n !isIssueEditing &&\n !isTaskCreating &&\n (input.taskEditorMode === \"edit\" || input.selectedTaskPresent);\n\n return {\n isIssueEditing,\n isTaskCreating,\n isTaskDrawerOpen,\n showBottomBar:\n input.selectedIssue !== null &&\n input.issueEditorMode === \"read\" &&\n input.taskEditorMode !== \"create\"\n };\n}\n","import type { IssueManagerSidebarViewState } from \"./IssueManagerShellState.ts\";\n\nexport type IssueManagerSidebarPresentationState =\n | {\n body: string;\n kind: \"empty\";\n title: string;\n }\n | {\n kind: \"error\";\n retryLabel: string;\n title: string;\n }\n | {\n kind: \"none\";\n };\n\nexport function resolveIssueManagerSidebarPresentationState(input: {\n showStandaloneState: boolean;\n sidebarViewState: IssueManagerSidebarViewState;\n}): IssueManagerSidebarPresentationState {\n const { showStandaloneState, sidebarViewState } = input;\n\n if (!showStandaloneState) {\n return { kind: \"none\" };\n }\n\n if (sidebarViewState.kind === \"error\") {\n return {\n kind: \"error\",\n retryLabel: sidebarViewState.retryLabel,\n title: sidebarViewState.title\n };\n }\n\n if (sidebarViewState.kind === \"empty\") {\n return {\n body: sidebarViewState.body,\n kind: \"empty\",\n title: sidebarViewState.title\n };\n }\n\n return { kind: \"none\" };\n}\n","import type { JSX } from \"react\";\nimport { Button } from \"@tutti-os/ui-system\";\nimport type { IssueManagerIssueSummary } from \"../../../contracts/index.ts\";\nimport { IssueManagerRichTextTextarea } from \"../content/IssueManagerRichTextTextarea.tsx\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport { IssueManagerDraftTitleInput } from \"./IssueManagerDraftTitleInput.tsx\";\nimport {\n issueManagerEditorFooterFadeInClassName,\n issueManagerEditorRiseInClassName,\n issueManagerEditorRiseInDelay0ClassName,\n issueManagerEditorRiseInDelay1ClassName,\n issueManagerEditorRiseInDelay2ClassName\n} from \"./IssueManagerEditorMotion.ts\";\n\nexport function IssueManagerTaskComposerPane({\n controller,\n onCancel,\n selectedIssue\n}: {\n controller: IssueManagerController;\n onCancel: () => void;\n selectedIssue: IssueManagerIssueSummary | null;\n}): JSX.Element {\n const copy = controller.copy;\n const isTaskTitleMissing = controller.taskDraft.title.trim().length === 0;\n\n return (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden\">\n <div className=\"flex min-h-0 flex-1 flex-col gap-[14px] overflow-y-auto px-7 py-8\">\n <div className=\"flex w-full min-w-0 flex-col gap-3\">\n <div\n className={`${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`}\n >\n <h2 className=\"m-0 text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {copy.t(\"actions.addSubtask\")}\n </h2>\n </div>\n <div className=\"flex w-full min-w-0 flex-col gap-6\">\n <label\n className={`flex w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`}\n >\n <span className=\"leading-5\">{copy.t(\"labels.title\")}</span>\n <IssueManagerDraftTitleInput\n placeholder={copy.t(\"composer.subtaskTitlePlaceholder\")}\n value={controller.taskDraft.title}\n onChange={controller.setTaskTitle}\n />\n </label>\n <div\n className={`flex min-h-0 w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`}\n >\n <span className=\"leading-5\">\n {copy.t(\"labels.requirementDescription\")}\n </span>\n <IssueManagerRichTextTextarea\n controller={controller}\n surface=\"task\"\n textareaClassName=\"min-h-[180px] resize-none\"\n placeholder={copy.t(\"composer.subtaskContentPlaceholder\")}\n value={controller.taskDraft.content}\n onChange={controller.setTaskContent}\n />\n </div>\n </div>\n </div>\n </div>\n\n <div\n className={`shrink-0 border-t border-border-1 px-7 py-4 ${issueManagerEditorFooterFadeInClassName}`}\n >\n <div className=\"flex items-center justify-end gap-3\">\n <Button\n size=\"default\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onCancel}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n disabled={!selectedIssue || isTaskTitleMissing}\n size=\"default\"\n type=\"button\"\n onClick={() => void controller.saveTask()}\n >\n {copy.t(\"actions.saveSubtask\")}\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import type { JSX } from \"react\";\nimport { ScrollArea, cn } from \"@tutti-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 type { IssueManagerLatestRunStatusRenderer } from \"../../latestRunStatusRenderer.ts\";\nimport { resolveIssueManagerTaskDrawerViewState } from \"./IssueManagerTaskDrawerState.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\n\nexport function IssueManagerTaskDrawer({\n controller,\n isClosing,\n renderLatestRunStatus,\n selectedIssue,\n selectedTask,\n onClose\n}: {\n controller: IssueManagerController;\n isClosing: boolean;\n renderLatestRunStatus?: IssueManagerLatestRunStatusRenderer;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n onClose: () => void;\n}): JSX.Element {\n const view = resolveIssueManagerTaskDrawerViewState({\n controller,\n selectedTask\n });\n const taskContent = selectedTask?.content ?? \"\";\n\n return (\n <div\n className={cn(\n \"absolute inset-0 z-20 flex justify-end overscroll-contain bg-[var(--backdrop)] backdrop-blur-[1px] motion-reduce:animate-none\",\n isClosing\n ? \"motion-safe:animate-out motion-safe:fade-out-0 motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.4,0,0.2,1)]\"\n : \"motion-safe:animate-in motion-safe:fade-in-0 motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.4,0,0.2,1)]\"\n )}\n onClick={onClose}\n onTouchMove={(event) => {\n event.preventDefault();\n }}\n onWheel={(event) => {\n event.preventDefault();\n }}\n >\n <aside\n className={cn(\n \"flex h-full w-[min(360px,92cqw)] flex-col overscroll-contain border-l border-border-1 bg-background-panel text-[var(--text-primary)] shadow-[-20px_0_60px_var(--shadow-elevated)] @min-[960px]/issue-manager-content:w-[480px] motion-reduce:animate-none\",\n isClosing\n ? \"motion-safe:animate-out motion-safe:slide-out-to-right-full motion-safe:duration-[180ms] motion-safe:ease-[cubic-bezier(0.4,0,0.2,1)]\"\n : \"motion-safe:animate-in motion-safe:slide-in-from-right-full motion-safe:duration-[220ms] motion-safe:ease-[cubic-bezier(0.22,1,0.36,1)]\"\n )}\n onClick={(event) => event.stopPropagation()}\n onTouchMove={(event) => event.stopPropagation()}\n onWheel={(event) => event.stopPropagation()}\n >\n {view.bodyKind === \"edit\" ? null : (\n <IssueManagerTaskDrawerHeader\n controller={controller}\n selectedTask={selectedTask}\n view={view}\n />\n )}\n\n <ScrollArea\n scrollbarMode=\"native\"\n className=\"min-h-0 flex-1 [&_[data-slot=scroll-area-viewport]]:overscroll-contain\"\n >\n <div\n className={cn(\n \"flex flex-col\",\n view.bodyKind === \"edit\"\n ? \"gap-[14px] px-6 py-8\"\n : \"gap-9 px-6 py-7\"\n )}\n >\n <IssueManagerTaskDrawerBody\n controller={controller}\n renderLatestRunStatus={renderLatestRunStatus}\n taskContent={taskContent}\n view={view}\n />\n </div>\n </ScrollArea>\n\n <IssueManagerTaskDrawerFooter\n controller={controller}\n selectedIssue={selectedIssue}\n selectedTask={selectedTask}\n view={view}\n />\n </aside>\n </div>\n );\n}\n","import { useState, type JSX } from \"react\";\nimport { Badge, Button, ConfirmationDialog } from \"@tutti-os/ui-system\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerStatusLabel\n} from \"../../../services/controllerModel.ts\";\nimport { IssueManagerDescriptionSection } from \"../content/IssueManagerDescriptionSection.tsx\";\nimport { IssueManagerTitleTooltip } from \"../content/IssueManagerTitleTooltip.tsx\";\nimport {\n IssueManagerLatestRunStatusSection,\n IssueManagerOutputSection\n} from \"../issue/IssueManagerIssueSections.tsx\";\nimport type { IssueManagerLatestRunStatusRenderer } from \"../../latestRunStatusRenderer.ts\";\nimport { IssueManagerTaskDrawerLoadingState } from \"../panel/IssueManagerPanelSurface.tsx\";\nimport { resolveTaskCreatorLabel } from \"../panel/IssueManagerPanelText.ts\";\nimport { IssueManagerRichTextTextarea } from \"../content/IssueManagerRichTextTextarea.tsx\";\nimport {\n IssueManagerExecutionDirectoryTrigger,\n IssueManagerRunActionTrigger\n} from \"../task/IssueManagerRunSections.tsx\";\nimport { issueManagerStatusBadgeVariant } from \"../status/IssueManagerStatusBadge.ts\";\nimport { IssueManagerDraftTitleInput } from \"./IssueManagerDraftTitleInput.tsx\";\nimport {\n canIssueManagerSaveTask,\n isIssueManagerRunControlDisabled,\n type IssueManagerTaskDrawerViewState\n} from \"./IssueManagerTaskDrawerState.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport {\n issueManagerEditorFooterFadeInClassName,\n issueManagerEditorRiseInClassName,\n issueManagerEditorRiseInDelay0ClassName,\n issueManagerEditorRiseInDelay1ClassName,\n issueManagerEditorRiseInDelay2ClassName\n} from \"./IssueManagerEditorMotion.ts\";\n\nexport function IssueManagerTaskDrawerHeader({\n controller,\n selectedTask,\n view\n}: {\n controller: IssueManagerController;\n selectedTask: IssueManagerTaskSummary | null;\n view: Pick<\n IssueManagerTaskDrawerViewState,\n \"showTaskActions\" | \"showTaskMetadata\" | \"title\"\n >;\n}): JSX.Element {\n const copy = controller.copy;\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n const [deleteBusy, setDeleteBusy] = useState(false);\n\n return (\n <>\n <div className=\"grid gap-3 px-6 py-7\">\n <div className=\"flex items-center justify-between gap-6\">\n {view.showTaskMetadata && selectedTask ? (\n <IssueManagerTitleTooltip title={view.title}>\n <h3 className=\"line-clamp-2 min-w-0 flex-1 whitespace-normal text-[15px] font-semibold leading-6 text-[var(--text-primary)] [overflow-wrap:anywhere]\">\n {view.title}\n </h3>\n </IssueManagerTitleTooltip>\n ) : (\n <IssueManagerTitleTooltip title={view.title}>\n <h3 className=\"line-clamp-2 min-w-0 flex-1 whitespace-normal text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)] [overflow-wrap:anywhere]\">\n {view.title}\n </h3>\n </IssueManagerTitleTooltip>\n )}\n <div className=\"flex shrink-0 items-center gap-2\">\n {view.showTaskActions && selectedTask ? (\n <>\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => controller.setTaskEditorMode(\"edit\")}\n >\n {copy.t(\"actions.edit\")}\n </Button>\n <Button\n className=\"text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => setDeleteDialogOpen(true)}\n >\n {copy.t(\"actions.delete\")}\n </Button>\n </>\n ) : null}\n </div>\n </div>\n {view.showTaskMetadata && selectedTask ? (\n <div className=\"grid gap-2\">\n <IssueManagerTaskMetadataRow\n copy={copy}\n selectedTask={selectedTask}\n />\n {selectedTask.status === \"pending_acceptance\" ? (\n <IssueManagerTaskAcceptanceCard controller={controller} />\n ) : null}\n </div>\n ) : null}\n </div>\n {selectedTask ? (\n <ConfirmationDialog\n cancelLabel={copy.t(\"actions.cancel\")}\n confirmBusy={deleteBusy}\n confirmLabel={copy.t(\"actions.delete\")}\n description={\n <span className=\"block max-w-full whitespace-normal [overflow-wrap:anywhere]\">\n {selectedTask.title}\n </span>\n }\n open={deleteDialogOpen}\n title={copy.t(\"confirmations.deleteTask\")}\n tone=\"destructive\"\n onConfirm={() => {\n setDeleteBusy(true);\n void controller\n .deleteTask({ skipConfirmation: true })\n .finally(() => {\n setDeleteBusy(false);\n setDeleteDialogOpen(false);\n });\n }}\n onOpenChange={setDeleteDialogOpen}\n />\n ) : null}\n </>\n );\n}\n\nfunction IssueManagerTaskMetadataRow({\n copy,\n selectedTask\n}: {\n copy: IssueManagerController[\"copy\"];\n selectedTask: IssueManagerTaskSummary;\n}): JSX.Element {\n return (\n <div className=\"flex flex-wrap items-center gap-x-2 gap-y-2 text-[11px] font-normal leading-[1.3] text-[var(--text-secondary)]\">\n <Badge variant={issueManagerStatusBadgeVariant(selectedTask.status)}>\n {resolveIssueManagerStatusLabel(copy, selectedTask.status)}\n </Badge>\n <span\n aria-hidden=\"true\"\n className=\"h-4 w-px shrink-0 bg-[var(--line-2)]\"\n />\n <span className=\"text-[11px] font-normal leading-[1.3]\">\n {copy.t(\"labels.creator\")} {resolveTaskCreatorLabel(selectedTask)}\n </span>\n <span\n aria-hidden=\"true\"\n className=\"h-4 w-px shrink-0 bg-[var(--line-2)]\"\n />\n <span className=\"text-[11px] font-normal leading-[1.3]\">\n {copy.t(\"labels.createdAt\")}{\" \"}\n {formatIssueManagerTimestamp(selectedTask.createdAtUnix) || \"-\"}\n </span>\n </div>\n );\n}\n\nfunction IssueManagerTaskAcceptanceCard({\n controller\n}: {\n controller: IssueManagerController;\n}): JSX.Element {\n const copy = controller.copy;\n\n return (\n <div className=\"grid gap-2 rounded-md bg-[var(--transparency-block)] px-3 py-2\">\n <div className=\"min-w-0 text-[11px] font-normal leading-[1.45] text-[var(--text-secondary)] [overflow-wrap:anywhere]\">\n <span className=\"font-semibold text-[var(--text-primary)]\">\n {copy.t(\"labels.taskAcceptance\")}\n </span>\n <span className=\"mx-1 text-[var(--text-tertiary)]\">·</span>\n <span>{copy.t(\"messages.taskAcceptanceHint\")}</span>\n </div>\n <div className=\"flex items-center justify-end gap-2\">\n <Button\n className=\"h-7 px-2 text-[11px] text-[var(--state-danger)] hover:bg-[var(--on-danger)] hover:text-[var(--state-danger)]\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => void controller.setSelectedTaskStatus(\"not_started\")}\n >\n {copy.t(\"actions.rejectTask\")}\n </Button>\n <Button\n className=\"h-7 px-2.5 text-[11px]\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => void controller.setSelectedTaskStatus(\"completed\")}\n >\n {copy.t(\"actions.acceptTask\")}\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 renderLatestRunStatus,\n taskContent,\n view\n}: {\n controller: IssueManagerController;\n renderLatestRunStatus?: IssueManagerLatestRunStatusRenderer;\n taskContent: string;\n view: Pick<\n IssueManagerTaskDrawerViewState,\n \"bodyKind\" | \"isCreate\" | \"title\"\n >;\n}): JSX.Element {\n if (view.bodyKind === \"loading\") {\n return <IssueManagerTaskDrawerLoadingBody />;\n }\n\n if (view.bodyKind === \"edit\") {\n return (\n <IssueManagerTaskDrawerEditBody\n controller={controller}\n title={view.title}\n />\n );\n }\n\n return (\n <IssueManagerTaskDrawerReadBody\n controller={controller}\n latestRunTitle={view.title}\n renderLatestRunStatus={renderLatestRunStatus}\n taskContent={taskContent}\n />\n );\n}\n\nexport function IssueManagerTaskDrawerEditBody({\n controller,\n title\n}: {\n controller: IssueManagerController;\n title: string;\n}): JSX.Element {\n const copy = controller.copy;\n\n return (\n <div className=\"flex w-full min-w-0 flex-col gap-3\">\n <div\n className={`${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay0ClassName}`}\n >\n <h2 className=\"m-0 text-[15px] font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {title}\n </h2>\n </div>\n <div className=\"flex w-full min-w-0 flex-col gap-6\">\n <label\n className={`flex w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay1ClassName}`}\n >\n <span className=\"leading-5\">{copy.t(\"labels.title\")}</span>\n <IssueManagerDraftTitleInput\n placeholder={copy.t(\"composer.taskTitlePlaceholder\")}\n value={controller.taskDraft.title}\n onChange={controller.setTaskTitle}\n />\n </label>\n <div\n className={`flex min-h-0 w-full min-w-0 flex-col gap-2 text-[13px] font-semibold text-[var(--text-secondary)] ${issueManagerEditorRiseInClassName} ${issueManagerEditorRiseInDelay2ClassName}`}\n >\n <span className=\"leading-5\">{copy.t(\"labels.content\")}</span>\n <IssueManagerRichTextTextarea\n controller={controller}\n surface=\"task\"\n textareaClassName=\"min-h-[180px] resize-none\"\n placeholder={copy.t(\"composer.taskContentPlaceholder\")}\n value={controller.taskDraft.content}\n onChange={controller.setTaskContent}\n />\n </div>\n </div>\n </div>\n );\n}\n\nexport function IssueManagerTaskDrawerReadBody({\n controller,\n latestRunTitle,\n renderLatestRunStatus,\n taskContent\n}: {\n controller: IssueManagerController;\n latestRunTitle: string;\n renderLatestRunStatus?: IssueManagerLatestRunStatusRenderer;\n taskContent: string;\n}): JSX.Element {\n const copy = controller.copy;\n const latestRun =\n controller.taskDetail.value?.latestRun ??\n controller.taskDetail.value?.recentRuns[0] ??\n null;\n const latestOutputs = controller.taskDetail.value?.latestOutputs ?? [];\n\n return (\n <>\n <IssueManagerDescriptionSection\n content={taskContent}\n emptyLabel={copy.t(\"messages.taskContentEmpty\")}\n label={copy.t(\"labels.description\")}\n onOpen={controller.openReference}\n variant=\"plain\"\n />\n <IssueManagerLatestRunStatusSection\n copy={copy}\n latestRun={latestRun}\n onOpenAgentSession={\n controller.canOpenAgentSessions\n ? controller.openAgentSession\n : undefined\n }\n renderLatestRunStatus={renderLatestRunStatus}\n title={latestRunTitle}\n />\n <IssueManagerOutputSection\n copy={copy}\n outputs={latestOutputs}\n onOpen={controller.openReference}\n />\n </>\n );\n}\n\nexport function IssueManagerTaskDrawerFooter({\n controller,\n selectedIssue,\n selectedTask,\n view\n}: {\n controller: IssueManagerController;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n view: Pick<\n IssueManagerTaskDrawerViewState,\n | \"isCreate\"\n | \"isEdit\"\n | \"showEditFooter\"\n | \"showReadFooter\"\n | \"isTaskTitleMissing\"\n >;\n}): JSX.Element | null {\n const copy = controller.copy;\n const runControlsDisabled = isIssueManagerRunControlDisabled({\n selectedIssueStatus: selectedIssue?.status,\n selectedTaskStatus: selectedTask?.status\n });\n\n if (view.showReadFooter && selectedTask) {\n return (\n <div className=\"border-t border-[var(--border-1)] bg-transparent px-6 py-4 backdrop-blur\">\n <div className=\"flex items-center justify-end gap-3\">\n <IssueManagerExecutionDirectoryTrigger\n className=\"mr-auto\"\n controller={controller}\n disabled={runControlsDisabled}\n />\n <IssueManagerRunActionTrigger\n controller={controller}\n disabled={runControlsDisabled}\n triggerVariant=\"button\"\n />\n {controller.canInviteCollaborators ? (\n <Button\n disabled={!selectedIssue}\n size=\"dialog\"\n type=\"button\"\n onClick={() => {\n void controller.shareSelection();\n }}\n >\n {copy.t(\"actions.inviteCollaborator\")}\n </Button>\n ) : null}\n </div>\n </div>\n );\n }\n\n if (view.showEditFooter) {\n return (\n <div\n className={`border-t border-border-1 px-6 py-4 ${issueManagerEditorFooterFadeInClassName}`}\n >\n <div className=\"flex items-center justify-end gap-3\">\n <Button\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => controller.setTaskEditorMode(\"read\")}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n disabled={\n canIssueManagerSaveTask({\n selectedIssue,\n view\n }) === false\n }\n size=\"dialog\"\n type=\"button\"\n onClick={() => void controller.saveTask()}\n >\n {copy.t(\"actions.saveTask\")}\n </Button>\n </div>\n </div>\n );\n }\n\n return null;\n}\n","import {\n useEffect,\n useEffectEvent,\n useRef,\n useState,\n type CSSProperties,\n type KeyboardEvent,\n type PointerEvent\n} from \"react\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../../contracts/index.ts\";\nimport {\n clampIssueManagerSidebarWidth,\n issueManagerSidebarDefaultWidth,\n issueManagerSidebarMaxWidth,\n issueManagerSidebarMinWidth,\n shouldAutoCollapseIssueManagerSidebar\n} from \"../../../core/index.ts\";\nimport type { IssueManagerController } from \"../../react/index.ts\";\nimport {\n resolveIssueManagerShellContentViewState,\n resolveIssueManagerStatusCounts,\n resolveIssueManagerSidebarViewState\n} from \"./IssueManagerShellState.ts\";\n\ninterface SidebarResizeState {\n maxWidth: number;\n pointerId: number;\n startClientX: number;\n startWidth: number;\n}\n\nexport interface UseIssueManagerShellViewInput {\n controller: IssueManagerController;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n}\n\nexport function useIssueManagerShellView({\n controller,\n selectedIssue,\n selectedTask\n}: UseIssueManagerShellViewInput) {\n const layoutRef = useRef<HTMLDivElement | null>(null);\n const resizeRef = useRef<SidebarResizeState | null>(null);\n const [sidebarWidth, setSidebarWidth] = useState(\n issueManagerSidebarDefaultWidth\n );\n const [isNarrowLayout, setIsNarrowLayout] = useState(false);\n const dismissNotification = useEffectEvent(() => {\n controller.dismissNotification();\n });\n const floatingNotice = controller.floatingNotice;\n\n useEffect(() => {\n const publishLayout = () => {\n const width = layoutRef.current?.getBoundingClientRect().width ?? 0;\n if (!width) {\n return;\n }\n setSidebarWidth((current) =>\n clampIssueManagerSidebarWidth(current, width)\n );\n setIsNarrowLayout(shouldAutoCollapseIssueManagerSidebar(width));\n };\n\n const layout = layoutRef.current;\n const observer =\n layout && typeof ResizeObserver !== \"undefined\"\n ? new ResizeObserver(publishLayout)\n : null;\n publishLayout();\n if (observer && layout) {\n observer.observe(layout);\n }\n window.addEventListener(\"resize\", publishLayout);\n return () => {\n observer?.disconnect();\n window.removeEventListener(\"resize\", publishLayout);\n };\n }, []);\n\n useEffect(() => {\n if (!floatingNotice) {\n return undefined;\n }\n\n const timeout = window.setTimeout(() => {\n dismissNotification();\n }, floatingNotice.durationMs);\n\n return () => {\n window.clearTimeout(timeout);\n };\n }, [dismissNotification, floatingNotice]);\n\n const content = resolveIssueManagerShellContentViewState({\n issueEditorMode: controller.issueEditorMode,\n selectedIssue,\n selectedTaskPresent: selectedTask !== null,\n taskEditorMode: controller.taskEditorMode\n });\n const sidebarViewState = resolveIssueManagerSidebarViewState({\n copy: controller.copy,\n issues: controller.issues\n });\n const statusCounts = resolveIssueManagerStatusCounts(controller.issues);\n const isSidebarAutoCollapsed = isNarrowLayout;\n const isSidebarCollapsed =\n controller.nodeState.taskListCollapsed === true || isSidebarAutoCollapsed;\n\n return {\n content,\n floatingNotice,\n isNarrowLayout,\n layoutRef,\n layoutStyle: {\n gridTemplateColumns: isSidebarCollapsed\n ? \"0 minmax(0, 1fr)\"\n : \"var(--issue-manager-sidebar-width) minmax(0, 1fr)\",\n \"--issue-manager-sidebar-width\": `${sidebarWidth}px`\n } as CSSProperties,\n resizeHandle: {\n ariaValueMax: issueManagerSidebarMaxWidth,\n ariaValueMin: issueManagerSidebarMinWidth,\n ariaValueNow: sidebarWidth,\n onKeyDown: (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key !== \"ArrowLeft\" && event.key !== \"ArrowRight\") {\n return;\n }\n const delta = event.key === \"ArrowRight\" ? 16 : -16;\n const layoutWidth =\n layoutRef.current?.getBoundingClientRect().width ?? 0;\n if (!layoutWidth) {\n return;\n }\n event.preventDefault();\n setSidebarWidth((current) =>\n clampIssueManagerSidebarWidth(current + delta, layoutWidth)\n );\n },\n onPointerCancel: (event: PointerEvent<HTMLDivElement>) => {\n resizeRef.current = null;\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n },\n onPointerDown: (event: PointerEvent<HTMLDivElement>) => {\n if (event.button !== 0) {\n return;\n }\n const layoutWidth =\n layoutRef.current?.getBoundingClientRect().width ?? 0;\n if (!layoutWidth) {\n return;\n }\n const startWidth = clampIssueManagerSidebarWidth(\n sidebarWidth,\n layoutWidth\n );\n resizeRef.current = {\n maxWidth: clampIssueManagerSidebarWidth(\n issueManagerSidebarMaxWidth,\n layoutWidth\n ),\n pointerId: event.pointerId,\n startClientX: event.clientX,\n startWidth\n };\n setSidebarWidth(startWidth);\n event.currentTarget.setPointerCapture?.(event.pointerId);\n },\n onPointerMove: (event: PointerEvent<HTMLDivElement>) => {\n const state = resizeRef.current;\n if (!state || state.pointerId !== event.pointerId) {\n return;\n }\n setSidebarWidth(\n Math.min(\n Math.max(\n state.startWidth + event.clientX - state.startClientX,\n issueManagerSidebarMinWidth\n ),\n state.maxWidth\n )\n );\n },\n onPointerUp: (event: PointerEvent<HTMLDivElement>) => {\n resizeRef.current = null;\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n }\n },\n sidebar: {\n isAutoCollapsed: isSidebarAutoCollapsed,\n isCollapsed: isSidebarCollapsed,\n showStandaloneState:\n !isNarrowLayout &&\n (sidebarViewState.kind === \"empty\" ||\n sidebarViewState.kind === \"error\"),\n statusCounts,\n viewState: sidebarViewState\n }\n };\n}\n\nexport { shouldAutoCollapseIssueManagerSidebar } from \"../../../core/index.ts\";\n","import { useEffect, useState, type FormEvent, type JSX } from \"react\";\nimport {\n BareIconButton,\n Button,\n CheckIcon,\n ChevronDownIcon,\n ConfirmationDialog,\n Dialog,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n DeleteIcon,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n EditIcon,\n FileCreateIcon,\n Input,\n MoreHorizontalIcon,\n PinFilledIcon,\n PinIcon,\n Textarea,\n cn\n} from \"@tutti-os/ui-system\";\nimport type {\n IssueManagerCreateTopicInput,\n IssueManagerTopic,\n IssueManagerUpdateTopicInput\n} from \"../../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../../i18n/issueManagerI18n.ts\";\n\nconst topicSelectorMenuItemClassName =\n \"min-h-7 overflow-hidden rounded-md py-1 text-[13px] font-normal leading-[1.2] text-[var(--text-primary)]\";\nconst topicSelectorRowItemClassName =\n \"min-w-0 flex-1 bg-transparent pr-2 pl-1 hover:bg-transparent focus:bg-transparent data-[highlighted]:bg-transparent\";\n\ntype IssueManagerTopicDialogMode =\n | {\n kind: \"create\";\n topic: null;\n }\n | {\n kind: \"edit\";\n topic: IssueManagerTopic;\n };\n\nexport function IssueManagerTopicSelector({\n activeTopicId,\n className,\n copy,\n onCreateTopic,\n onDeleteTopic,\n onSelectTopic,\n onUpdateTopic,\n topics\n}: {\n activeTopicId: string | null;\n className?: string;\n copy: IssueManagerI18nRuntime;\n onCreateTopic: (\n input: Omit<IssueManagerCreateTopicInput, \"workspaceId\">\n ) => void;\n onDeleteTopic: (topicId: string) => void;\n onSelectTopic: (topicId: string) => void;\n onUpdateTopic: (\n input: Omit<IssueManagerUpdateTopicInput, \"workspaceId\">\n ) => void;\n topics: readonly IssueManagerTopic[];\n}): JSX.Element {\n const [dialogMode, setDialogMode] =\n useState<IssueManagerTopicDialogMode | null>(null);\n const [deleteTopic, setDeleteTopic] = useState<IssueManagerTopic | null>(\n null\n );\n const [menuOpen, setMenuOpen] = useState(false);\n const activeTopic = topics.find((topic) => topic.topicId === activeTopicId);\n const topicLabel = copy.t(\"labels.topic\");\n const triggerLabel = formatIssueManagerTopicSelectorTriggerLabel({\n title: activeTopic?.title,\n topicLabel\n });\n\n const openTopicDialog = (mode: IssueManagerTopicDialogMode) => {\n setMenuOpen(false);\n setDialogMode(mode);\n };\n\n return (\n <>\n <DropdownMenu open={menuOpen} onOpenChange={setMenuOpen}>\n <DropdownMenuTrigger asChild>\n <Button\n aria-label={topicLabel}\n className={cn(\n \"max-w-[220px] gap-1 rounded-md border-0 bg-transparent text-[13px] font-normal shadow-none hover:bg-transparent focus:bg-transparent focus-visible:border-0 focus-visible:bg-transparent focus-visible:ring-0 active:bg-transparent aria-expanded:bg-transparent [&[data-state=open]>svg]:rotate-180\",\n className\n )}\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n >\n <span className=\"min-w-0 truncate\">{triggerLabel}</span>\n <ChevronDownIcon className=\"size-4 shrink-0 text-[var(--text-tertiary)] transition-transform duration-200\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-[200px] px-1\">\n {topics.map((topic) => {\n const isPinned = (topic.pinnedAtUnix ?? 0) > 0;\n const isActive = topic.topicId === activeTopicId;\n const pinLabel = isPinned\n ? copy.t(\"actions.unpinTopic\")\n : copy.t(\"actions.pinTopic\");\n\n return (\n <div key={topic.topicId} className=\"min-w-0\">\n <div className=\"group/topic-row relative flex min-h-7 min-w-0 items-center gap-0.5 rounded-md pr-0.5 pl-0.5 hover:bg-[var(--transparency-block)] focus-within:bg-[var(--transparency-block)]\">\n <DropdownMenuItem\n className={cn(\n topicSelectorMenuItemClassName,\n topicSelectorRowItemClassName\n )}\n onSelect={() => {\n setMenuOpen(false);\n onSelectTopic(topic.topicId);\n }}\n >\n <span className=\"flex size-4 shrink-0 items-center justify-center text-[var(--accent)]\">\n {isActive ? <CheckIcon className=\"size-4\" /> : null}\n </span>\n <span className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span className=\"truncate\">{topic.title}</span>\n {topic.isDefault ? (\n <span className=\"shrink-0 text-[11px] text-[var(--text-tertiary)]\">\n {copy.t(\"labels.topicDefault\")}\n </span>\n ) : null}\n </span>\n </DropdownMenuItem>\n <BareIconButton\n aria-label={pinLabel}\n className={cn(\n \"pointer-events-none shrink-0 opacity-0 text-[var(--text-tertiary)] transition-opacity duration-150 group-hover/topic-row:pointer-events-auto group-hover/topic-row:opacity-100 group-focus-within/topic-row:pointer-events-auto group-focus-within/topic-row:opacity-100 hover:text-[var(--text-primary)]\",\n isPinned && \"text-[var(--text-primary)]\"\n )}\n size=\"md\"\n title={pinLabel}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n onUpdateTopic({\n pinned: !isPinned,\n topicId: topic.topicId\n });\n }}\n >\n {isPinned ? (\n <PinFilledIcon className=\"size-3.5\" />\n ) : (\n <PinIcon className=\"size-3.5\" />\n )}\n </BareIconButton>\n <DropdownMenu modal={false}>\n <DropdownMenuTrigger asChild>\n <BareIconButton\n aria-label={copy.t(\"actions.moreActions\")}\n className=\"pointer-events-none shrink-0 opacity-0 text-[var(--text-tertiary)] transition-opacity duration-150 group-hover/topic-row:pointer-events-auto group-hover/topic-row:opacity-100 group-focus-within/topic-row:pointer-events-auto group-focus-within/topic-row:opacity-100 hover:text-[var(--text-primary)]\"\n size=\"md\"\n title={copy.t(\"actions.moreActions\")}\n onClick={(event) => {\n event.stopPropagation();\n }}\n >\n <MoreHorizontalIcon className=\"size-3.5\" />\n </BareIconButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align=\"end\"\n className=\"w-32\"\n sideOffset={6}\n >\n <DropdownMenuItem\n onSelect={(event) => {\n event.preventDefault();\n openTopicDialog({\n kind: \"edit\",\n topic\n });\n }}\n >\n <EditIcon className=\"size-3.5\" />\n <span>{copy.t(\"actions.editTopic\")}</span>\n </DropdownMenuItem>\n {!topic.isDefault ? (\n <DropdownMenuItem\n variant=\"destructive\"\n onSelect={(event) => {\n event.preventDefault();\n setMenuOpen(false);\n setDeleteTopic(topic);\n }}\n >\n <DeleteIcon className=\"size-3.5\" />\n <span>{copy.t(\"actions.delete\")}</span>\n </DropdownMenuItem>\n ) : null}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n </div>\n );\n })}\n {topics.length === 0 ? (\n <div className=\"px-3 py-2 text-[11px] leading-4 text-[var(--text-tertiary)]\">\n {copy.t(\"messages.topicListEmpty\")}\n </div>\n ) : null}\n <DropdownMenuSeparator />\n <DropdownMenuItem\n className={cn(\n topicSelectorMenuItemClassName,\n \"justify-start gap-2 px-2 text-left\"\n )}\n onSelect={(event) => {\n event.preventDefault();\n openTopicDialog({\n kind: \"create\",\n topic: null\n });\n }}\n >\n <FileCreateIcon className=\"size-3.5\" />\n <span className=\"truncate\">{copy.t(\"actions.createTopic\")}</span>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n <IssueManagerTopicDialog\n copy={copy}\n mode={dialogMode}\n open={dialogMode !== null}\n onCreateTopic={onCreateTopic}\n onOpenChange={(open) => {\n if (!open) {\n setDialogMode(null);\n }\n }}\n onUpdateTopic={onUpdateTopic}\n />\n <ConfirmationDialog\n cancelLabel={copy.t(\"actions.cancel\")}\n confirmLabel={copy.t(\"actions.delete\")}\n description={deleteTopic?.title}\n open={deleteTopic !== null}\n title={copy.t(\"confirmations.deleteTopic\")}\n tone=\"destructive\"\n onConfirm={() => {\n const topicId = deleteTopic?.topicId;\n setDeleteTopic(null);\n if (topicId) {\n onDeleteTopic(topicId);\n }\n }}\n onOpenChange={(open) => {\n if (!open) {\n setDeleteTopic(null);\n }\n }}\n />\n </>\n );\n}\n\nexport function formatIssueManagerTopicSelectorTriggerLabel(input: {\n title?: string | null;\n topicLabel: string;\n}): string {\n const topicLabel = input.topicLabel.trim();\n const title = input.title?.trim();\n if (!title) {\n return topicLabel;\n }\n return `${topicLabel}-${title}`;\n}\n\nfunction IssueManagerTopicDialog({\n copy,\n mode,\n onCreateTopic,\n onOpenChange,\n onUpdateTopic,\n open\n}: {\n copy: IssueManagerI18nRuntime;\n mode: IssueManagerTopicDialogMode | null;\n onCreateTopic: (\n input: Omit<IssueManagerCreateTopicInput, \"workspaceId\">\n ) => void;\n onOpenChange: (open: boolean) => void;\n onUpdateTopic: (\n input: Omit<IssueManagerUpdateTopicInput, \"workspaceId\">\n ) => void;\n open: boolean;\n}): JSX.Element {\n const [summaryDraft, setSummaryDraft] = useState(\"\");\n const [titleDraft, setTitleDraft] = useState(\"\");\n\n useEffect(() => {\n setTitleDraft(mode?.topic?.title ?? \"\");\n setSummaryDraft(mode?.topic?.summary ?? \"\");\n }, [mode]);\n\n const title = titleDraft.trim();\n const dialogTitle =\n mode?.kind === \"edit\"\n ? copy.t(\"labels.editTopicDialogTitle\")\n : copy.t(\"labels.createTopicDialogTitle\");\n\n const submit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!mode || !title) {\n return;\n }\n if (mode.kind === \"edit\") {\n onUpdateTopic({\n summary: summaryDraft,\n title,\n topicId: mode.topic.topicId\n });\n } else {\n onCreateTopic({\n summary: summaryDraft,\n title\n });\n }\n onOpenChange(false);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent className=\"sm:max-w-[480px]\">\n <DialogHeader>\n <DialogTitle>{dialogTitle}</DialogTitle>\n </DialogHeader>\n <form className=\"grid gap-4\" onSubmit={submit}>\n <label className=\"grid gap-2\">\n <span className=\"text-[11px] font-medium leading-4 text-[var(--text-secondary)]\">\n {copy.t(\"labels.topicTitle\")}\n </span>\n <Input\n autoFocus\n placeholder={copy.t(\"labels.topicTitle\")}\n value={titleDraft}\n onChange={(event) => setTitleDraft(event.target.value)}\n />\n </label>\n <label className=\"grid gap-2\">\n <span className=\"text-[11px] font-medium leading-4 text-[var(--text-secondary)]\">\n {copy.t(\"labels.topicSummary\")}\n </span>\n <Textarea\n className=\"min-h-24 resize-none\"\n placeholder={copy.t(\"labels.topicSummary\")}\n value={summaryDraft}\n onChange={(event) => setSummaryDraft(event.target.value)}\n />\n </label>\n <DialogFooter className=\"pt-2\">\n <Button\n size=\"dialog\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => onOpenChange(false)}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button disabled={!title} size=\"dialog\" type=\"submit\">\n {copy.t(\"actions.saveTopic\")}\n </Button>\n </DialogFooter>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,WAAW,gBAAgB,gBAAgB;AAgBpD,IAAM,qCACJ;AA6CF,SAAS,gCAAyC,OAE/C;AACD,QAAM,mBAAmB,oBAAI,IAG3B;AAEF,SAAO;AAAA,IACL,QAAQ,QAAuB;AAC7B,uBAAiB,IAAI,MAAM,OAAO,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa;AAChE,iBAAS,MAAM;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,IACA,UACE,KACA,UACY;AACZ,UAAI,cAAc,iBAAiB,IAAI,GAAG;AAC1C,UAAI,CAAC,aAAa;AAChB,sBAAc,oBAAI,IAAI;AACtB,yBAAiB,IAAI,KAAK,WAAW;AAAA,MACvC;AACA,kBAAY,IAAI,QAAQ;AAExB,aAAO,MAAM;AACX,qBAAa,OAAO,QAAQ;AAC5B,YAAI,aAAa,SAAS,GAAG;AAC3B,2BAAiB,OAAO,GAAG;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,sCAA+C,OAErD;AACD,QAAM,eAAe,oBAAI,IAAqB;AAC9C,QAAM,WAAW,gCAAyC,KAAK;AAE/D,SAAO;AAAA,IACL,IAAI,KAA6B;AAC/B,aAAO,aAAa,IAAI,GAAG,KAAK;AAAA,IAClC;AAAA,IACA,QAAQ,QAAuB;AAC7B,mBAAa,IAAI,MAAM,OAAO,MAAM,GAAG,MAAM;AAC7C,eAAS,QAAQ,MAAM;AAAA,IACzB;AAAA,IACA,UACE,KACA,UACY;AACZ,YAAM,cAAc,SAAS,UAAU,KAAK,QAAQ;AACpD,YAAM,UAAU,aAAa,IAAI,GAAG;AACpC,UAAI,SAAS;AACX,iBAAS,OAAO;AAAA,MAClB;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAEA,IAAM,kCACJ,sCAA0E;AAAA,EACxE,QAAQ;AACV,CAAC;AACH,IAAM,gCACJ,gCAAkE;AAAA,EAChE,QAAQ;AACV,CAAC;AACH,IAAM,6BACJ,gCAA+D;AAAA,EAC7D,QAAQ;AACV,CAAC;AACH,IAAM,6BACJ,gCAA+D;AAAA,EAC7D,QAAQ;AACV,CAAC;AACH,IAAM,6BACJ,gCAA+D;AAAA,EAC7D,QAAQ;AACV,CAAC;AAEI,SAAS,oCAAoC,OAIb;AACrC,SACE,gCAAgC,IAAI,yBAAyB,KAAK,CAAC,KAAK;AAAA,IACtE,eAAe,MAAM;AAAA,IACrB,QAAQ,MAAM;AAAA,IACd,QAAQ,CAAC;AAAA,IACT,aAAa,MAAM;AAAA,EACrB;AAEJ;AAEO,SAAS,sCAAsC,OAI7C;AACP,MAAI,OAAO,WAAW,aAAa;AACjC;AAAA,EACF;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,MACF;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,qCACd,OACM;AACN,kCAAgC,QAAQ,KAAK;AAC/C;AAEO,SAAS,mCACd,OACM;AACN,gCAA8B,QAAQ,KAAK;AAC7C;AAEO,SAAS,gCACd,OACM;AACN,6BAA2B,QAAQ,KAAK;AAC1C;AAEO,SAAS,gCACd,OACM;AACN,6BAA2B,QAAQ,KAAK;AAC1C;AAEO,SAAS,gCACd,OACM;AACN,6BAA2B,QAAQ,KAAK;AAC1C;AAEO,SAAS,qCAAqC,OAI5C;AACP,QAAM,oBAAoB,eAAe,MAAM,iBAAiB;AAEhE,YAAU,MAAM;AACd,QAAI,OAAO,WAAW,aAAa;AACjC,aAAO;AAAA,IACT;AAEA,UAAM,gCAAgC,CAAC,UAAiB;AACtD,YAAM,SAAU,MACb;AACH,UACE,QAAQ,WAAW,MAAM,UACzB,OAAO,gBAAgB,MAAM,aAC7B;AACA;AAAA,MACF;AACA,wBAAkB,OAAO,SAAS;AAAA,IACpC;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AACA,WAAO,MAAM;AACX,aAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,QAAQ,MAAM,aAAa,iBAAiB,CAAC;AACzD;AAEO,SAAS,oCAAoC,OAIjD;AACD,QAAM,CAAC,OAAO,QAAQ,IAAI;AAAA,IAA6C,MACrE,oCAAoC,KAAK;AAAA,EAC3C;AAEA,YAAU,MAAM;AACd;AAAA,MAAS,CAAC,YACR,QAAQ,kBAAkB,MAAM,iBAChC,QAAQ,WAAW,MAAM,UACzB,QAAQ,gBAAgB,MAAM,eAC9B,QAAQ,WAAW,oCAAoC,KAAK,EAAE,SAC1D,UACA,oCAAoC,KAAK;AAAA,IAC/C;AAAA,EACF,GAAG,CAAC,MAAM,eAAe,MAAM,QAAQ,MAAM,WAAW,CAAC;AAEzD,YAAU,MAAM;AACd,UAAM,+BAA+B,CACnC,WACG;AACH,eAAS,MAAM;AAAA,IACjB;AAEA,WAAO,gCAAgC;AAAA,MACrC,yBAAyB,KAAK;AAAA,MAC9B;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,QAAQ,MAAM,WAAW,CAAC;AAEpC,SAAO;AACT;AAEO,SAAS,sCAAsC,OAO7C;AACP,QAAM,gBAAgB,eAAe,MAAM,aAAa;AACxD,QAAM,gBAAgB,eAAe,MAAM,aAAa;AACxD,QAAM,gBAAgB,eAAe,MAAM,aAAa;AACxD,QAAM,gBAAgB,eAAe,MAAM,aAAa;AAExD,YAAU,MAAM;AACd,UAAM,uBAAuB,CAAC,WAA6C;AACzE,oBAAc,OAAO,OAAO;AAAA,IAC9B;AACA,UAAM,oBAAoB,CAAC,WAA0C;AACnE,oBAAc,OAAO,KAAK;AAAA,IAC5B;AACA,UAAM,oBAAoB,CAAC,WAA0C;AACnE,oBAAc,OAAO,OAAO;AAAA,IAC9B;AACA,UAAM,oBAAoB,CAAC,WAA0C;AACnE,oBAAc,OAAO,KAAK;AAAA,IAC5B;AAEA,UAAM,uBAAuB,8BAA8B;AAAA,MACzD,yBAAyB,KAAK;AAAA,MAC9B;AAAA,IACF;AACA,UAAM,oBAAoB,2BAA2B;AAAA,MACnD,yBAAyB,KAAK;AAAA,MAC9B;AAAA,IACF;AACA,UAAM,oBAAoB,2BAA2B;AAAA,MACnD,yBAAyB,KAAK;AAAA,MAC9B;AAAA,IACF;AACA,UAAM,oBAAoB,2BAA2B;AAAA,MACnD,yBAAyB,KAAK;AAAA,MAC9B;AAAA,IACF;AACA,WAAO,MAAM;AACX,2BAAqB;AACrB,wBAAkB;AAClB,wBAAkB;AAClB,wBAAkB;AAAA,IACpB;AAAA,EACF,GAAG;AAAA,IACD,MAAM;AAAA,IACN,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AAEO,SAAS,8BAA8B,OAO3C;AACD,QAAM,CAAC,iBAAiB,kBAAkB,IAAI;AAAA,IAC5C,MAAM;AAAA,EACR;AAEA,YAAU,MAAM;AACd,uBAAmB,MAAM,kBAAkB;AAAA,EAC7C,GAAG,CAAC,MAAM,kBAAkB,CAAC;AAE7B,uCAAqC;AAAA,IACnC,QAAQ,MAAM;AAAA,IACd,mBAAmB;AAAA,IACnB,aAAa,MAAM;AAAA,EACrB,CAAC;AAED,QAAM,qBAAqB,MAAM,0BAA0B;AAE3D,SAAO;AAAA,IACL;AAAA,IACA,aAAa,qBACT,MAAM,KAAK,EAAE,yBAAyB,IACtC,MAAM,KAAK,EAAE,2BAA2B;AAAA,IAC5C,eAAe,MAAM;AACnB,YAAM,gBAAgB,CAAC,kBAAkB;AAAA,IAC3C;AAAA,EACF;AACF;AAEA,SAAS,yBAAyB,OAGvB;AACT,SAAO,GAAG,MAAM,WAAW,KAAK,MAAM,MAAM;AAC9C;AAEO,SAAS,iCAAiC,OAIb;AAClC,MAAI,CAAC,MAAM,iBAAiB;AAC1B,WAAO;AAAA,EACT;AAEA,SACE,MAAM,eACN,MAAM,OAAO,KAAK,CAAC,UAAU,MAAM,YAAY,MAAM,eAAe,KACpE;AAEJ;AAEO,SAAS,gCAAgC,OAIb;AACjC,MAAI,CAAC,MAAM,gBAAgB;AACzB,WAAO;AAAA,EACT;AAEA,SACE,MAAM,cACN,MAAM,MAAM,KAAK,CAAC,SAAS,KAAK,WAAW,MAAM,cAAc,KAC/D;AAEJ;;;AC9ZA;AAAA,EACE;AAAA,EAC0D;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAC8C;AAAA,OAEzC;;;ACTP,SAAS,aAAAA,YAAW,WAAAC,UAAS,YAAAC,iBAAgB;;;ACMtC,IAAM,0CAA0C;AAAA,EACrD;AAAA,IACE,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AACF;AAEO,SAAS,wCACd,SAC4C;AAC5C,MAAI,CAAC,QAAQ,sBAAsB;AACjC,WAAO;AAAA,EACT;AAEA,QAAM,oBAAoB,QAAQ,qBAAqB,WAAW;AAClE,QAAM,oBAAoB,kBACvB,IAAI,CAAC,WAAW;AACf,UAAM,iBAAiB,OAAO,gBAAgB,KAAK;AACnD,WAAO;AAAA,MACL,GAAI,OAAO,aAAa,OAAO,EAAE,UAAU,KAAK,IAAI,CAAC;AAAA,MACrD,GAAI,iBAAiB,EAAE,eAAe,IAAI,CAAC;AAAA,MAC3C,GAAI,OAAO,SAAS,KAAK,IAAI,EAAE,SAAS,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,MACnE,OAAO,OAAO,MAAM,KAAK,KAAK,OAAO,SAAS,KAAK;AAAA,MACnD,UAAU,OAAO,SAAS,KAAK;AAAA,IACjC;AAAA,EACF,CAAC,EACA,OAAO,CAAC,WAAW,OAAO,YAAY,OAAO,KAAK;AAErD,SAAO;AACT;AAUO,SAAS,0CACd,SACoC;AACpC,SAAO;AAAA,IACL,sBACE,OAAO,QAAQ,oBAAoB,gBAAgB;AAAA,IACrD,6BACE,OAAO,QAAQ,0BAA0B,oBAAoB;AAAA,IAC/D,wBACE,QAAQ,GAAG,2BAA2B,QACtC,OAAO,QAAQ,cAAc,oBAAoB;AAAA,IACnD,4BACE,qBAAqB,QAAQ,aAAa,mBAAmB,KAC7D,qBAAqB,QAAQ,aAAa,mBAAmB,KAC7D,qBAAqB,QAAQ,aAAa,eAAe,KACzD,qBAAqB,QAAQ,aAAa,kBAAkB;AAAA,IAC9D,yBAAyB;AAAA,MACvB,QAAQ;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,qBACP,aACA,YAMS;AACT,SAAO,OAAO,QAAQ,IAAI,eAAe,CAAC,GAAG,UAAU,MAAM;AAC/D;;;ACnCO,SAAS,mCACd,OACM;AACN,MAAI,MAAM,QAAQ,iBAAiB;AACjC,UAAM,OAAO,MAAM,UAAU,MAAM,QAAQ,eAAe,CAAC;AAAA,EAC7D;AACA,MAAI,MAAM,QAAQ,YAAY;AAC5B,UAAM,sBAAsB,MAAM,QAAQ,UAAU;AAAA,EACtD;AACA,MAAI,MAAM,QAAQ,iBAAiB;AACjC,UAAM,wBAAwB,MAAM,QAAQ,eAAe;AAAA,EAC7D;AACA,MAAI,qBAAqB,MAAM,SAAS;AACtC,UAAM,mBAAmB,MAAM,QAAQ,mBAAmB,IAAI;AAAA,EAChE;AACA,MAAI,MAAM,QAAQ,WAAW;AAC3B,UAAM,qBAAqB,MAAM,QAAQ,SAAS;AAAA,EACpD;AACA,MAAI,MAAM,QAAQ,gBAAgB;AAChC,UAAM,uBAAuB,MAAM,QAAQ,cAAc;AAAA,EAC3D;AACA,MAAI,MAAM,QAAQ,WAAW;AAC3B,UAAM,gBAAgB,MAAM,QAAQ,SAAS;AAAA,EAC/C;AACA,MAAI,MAAM,QAAQ,YAAY;AAC5B,UAAM,WAAW;AAAA,EACnB;AACA,MAAI,MAAM,QAAQ,gBAAgB;AAChC,UAAM,eAAe;AAAA,EACvB;AACF;AAEO,SAAS,wCAAwC,OAEtB;AAChC,SAAO;AAAA,IACL,iBACE,MAAM,WAAW,eAAe,MAAM,WAAW,WAC7C,SACA;AAAA,EACR;AACF;AAEO,SAAS,0CACd,SAC+B;AAC/B,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB,WAAW,CAAC,YAAY,4BAA4B,SAAS,OAAO;AAAA,IACpE,YAAY;AAAA,EACd;AACF;AAEO,SAAS,yCACd,QAC+B;AAC/B,SAAO;AAAA,IACL,WAAW,CAAC,YAAY,2BAA2B,SAAS,MAAM;AAAA,IAClE,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AACF;;;AC1FO,SAAS,yCACd,aAKA;AACA,SAAO;AAAA,IACL,aAAa,qBACb,CAAC,YAAY,qBACb,CAAC,YAAY,iBACb,CAAC,YAAY;AAAA,EACf;AACF;AAEA,eAAsB,qCAAqC,OAOlB;AACvC,SAAO,MAAM,YAAY,kBAAkB;AAAA,IACzC,aAAa,MAAM;AAAA,EACrB,CAAC;AACH;AAEO,SAAS,gCACd,aAKA;AACA,SAAO,OAAO,aAAa,kBAAkB;AAC/C;AAEO,SAAS,8BACd,aAKA;AACA,SAAO,OAAO,aAAa,kBAAkB;AAC/C;AAEA,eAAsB,oCAAoC,OAQjB;AACvC,QAAM,OAAO,MAAM,MAAM,YAAY,cAAc;AAAA,IACjD,MAAM,MAAM;AAAA,IACZ,qBAAqB;AAAA,IACrB,aAAa,MAAM;AAAA,EACrB,CAAC;AAED,MAAI,KAAK,WAAW,GAAG;AACrB,WAAO;AAAA,EACT;AAEA,QAAM,MAAM,YAAY,cAAc;AAAA,IACpC,OAAO;AAAA,IACP,OAAO,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI;AAAA,IACjC,aAAa,MAAM;AAAA,EACrB,CAAC;AAED,SAAO;AACT;AAEO,SAAS,6CAA6C,OAGlD;AACT,QAAM,eAAe,8BAA8B,MAAM,IAAI;AAC7D,MAAI,aAAa,WAAW,GAAG;AAC7B,WAAO,MAAM;AAAA,EACf;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,aAAa,IAAI,oCAAoC;AAAA,EACvD;AACF;AAEA,eAAsB,oCAAoC,OAMrC;AACnB,QAAM,eAAe,8BAA8B,MAAM,IAAI;AAC7D,MAAI,CAAC,MAAM,UAAU,aAAa,WAAW,KAAK,CAAC,MAAM,iBAAiB;AACxE,WAAO;AAAA,EACT;AAEA,QAAM,MAAM,QAAQ;AAAA,IAClB,MAAM,OAAO,eAAe,SACxB;AAAA,MACE,SAAS,MAAM;AAAA,MACf,YAAY;AAAA,MACZ,MAAM,aAAa,IAAI,iBAAiB;AAAA,MACxC,QAAQ,MAAM,OAAO;AAAA,MACrB,aAAa,MAAM;AAAA,IACrB,IACA;AAAA,MACE,SAAS,MAAM;AAAA,MACf,YAAY;AAAA,MACZ,MAAM,aAAa,IAAI,iBAAiB;AAAA,MACxC,aAAa,MAAM;AAAA,IACrB;AAAA,EACN;AAEA,SAAO;AACT;AAEA,eAAsB,iCAAiC,OAOrC;AAChB,QAAM,MAAM,YAAY,cAAc,MAAM,SAAS;AACvD;AAEA,eAAsB,oCAAoC,OAIxC;AAChB,QAAM,MAAM,QAAQ;AAAA,IAClB,MAAM,IAAI,eAAe,SACrB;AAAA,MACE,cAAc,MAAM,IAAI;AAAA,MACxB,SAAS,MAAM,IAAI;AAAA,MACnB,YAAY;AAAA,MACZ,QAAQ,MAAM,IAAI;AAAA,MAClB,aAAa,MAAM;AAAA,IACrB,IACA;AAAA,MACE,cAAc,MAAM,IAAI;AAAA,MACxB,SAAS,MAAM,IAAI;AAAA,MACnB,YAAY;AAAA,MACZ,aAAa,MAAM;AAAA,IACrB;AAAA,EACN;AACF;AAEA,SAAS,8BACP,MAC6B;AAC7B,SAAO,KAAK,OAAO,CAAC,QAAQ,IAAI,KAAK,KAAK,EAAE,SAAS,CAAC;AACxD;;;AC9JO,SAAS,6CACd,QAC8B;AAC9B,SAAO;AAAA,IACL,iBAAiB;AAAA,EACnB;AACF;AAEO,SAAS,0CACd,UAC8B;AAC9B,SAAO;AAAA,IACL,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,EAClB;AACF;AAEO,SAAS,0CAA0C,OAGzB;AAC/B,SAAO,MAAM,OAAO,eAAe,UAC/B;AAAA,IACE,YAAY,CAAC,aAAa;AAAA,MACxB,GAAG;AAAA,MACH,SAAS,6CAA6C;AAAA,QACpD,SAAS,QAAQ;AAAA,QACjB,MAAM,MAAM;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IACA,iBAAiB;AAAA,EACnB,IACA;AAAA,IACE,iBAAiB;AAAA,IACjB,WAAW,CAAC,aAAa;AAAA,MACvB,GAAG;AAAA,MACH,SAAS,6CAA6C;AAAA,QACpD,SAAS,QAAQ;AAAA,QACjB,MAAM,MAAM;AAAA,MACd,CAAC;AAAA,IACH;AAAA,EACF;AACN;;;AC9CO,SAAS,8BAA8B,OAWzB;AACnB,MAAI,CAAC,MAAM,aAAa;AACtB,WAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AAEA,QAAM,WACJ,MAAM,kBAAkB,KAAK,KAAK,MAAM,sBAAsB,KAAK;AACrE,MAAI,CAAC,UAAU;AACb,WAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA,mCAAmC,aAAa,MAAM;AAAA,EACxD;AACF;AAEO,SAAS,gCAAgC,OAGI;AAClD,MAAI,CAAC,MAAM,eAAe;AACxB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,iBAAiB;AAAA,IACnB;AAAA,EACF;AAEA,QAAM,QAAQ,MAAM,WAAW,MAAM,KAAK;AAC1C,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,MACL,MAAM;AAAA,MACN,iBAAiB;AAAA,IACnB;AAAA,EACF;AAEA,SAAO,EAAE,MAAM,SAAS,eAAe,MAAM,cAAc;AAC7D;AAEO,SAAS,+BAA+B,OAG0B;AACvE,MAAI,CAAC,MAAM,iBAAiB;AAC1B,WAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AAEA,QAAM,QAAQ,MAAM,UAAU,MAAM,KAAK;AACzC,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,MACL,MAAM;AAAA,MACN,iBAAiB;AAAA,IACnB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,iBAAiB,MAAM;AAAA,EACzB;AACF;;;AC/EO,SAAS,wCACd,YACA,gBAC0D;AAC1D,SAAO,eAAe,SAClB;AAAA,IACE,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,QAAQ,kBAAkB;AAAA,EAC5B,IACA;AAAA,IACE,MAAM;AAAA,IACN,YAAY;AAAA,EACd;AACN;AAEO,SAAS,wCACd,YACA,gBAC0D;AAC1D,SAAO,eAAe,SAClB;AAAA,IACE,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,QAAQ,kBAAkB;AAAA,EAC5B,IACA;AAAA,IACE,MAAM;AAAA,IACN,YAAY;AAAA,EACd;AACN;AAEO,SAAS,uCAAuC,OAclC;AACnB,MAAI,CAAC,MAAM,gBAAgB;AACzB,WAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AACA,MAAI,MAAM,eAAe,UAAU,CAAC,MAAM,gBAAgB;AACxD,WAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AAEA,QAAM,SAAS;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACA,SAAO,MAAM,4BACT,EAAE,MAAM,oBAAoB,OAAO,IACnC,EAAE,MAAM,eAAe,OAAO;AACpC;AAEO,SAAS,uCAAuC,OAelC;AACnB,MAAI,CAAC,MAAM,gBAAgB;AACzB,WAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AACA,MACE,MAAM,eAAe,UACrB,CAAC,MAAM,kBACP,MAAM,mBAAmB,UACzB;AACA,WAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AAEA,QAAM,SAAS;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACA,SAAO,MAAM,4BACT,EAAE,MAAM,oBAAoB,OAAO,IACnC,EAAE,MAAM,eAAe,OAAO;AACpC;;;AChGA,eAAsB,2BAA2B,OAOjB;AAC9B,QAAM,iBAAiB,iCAAiC;AACxD,QAAM,SAAS,MAAM,MAAM,QAAQ,YAAY,QAAQ;AAAA,IACrD;AAAA,IACA,GAAI,MAAM,oBAAoB,KAAK,IAC/B,EAAE,oBAAoB,MAAM,mBAAmB,KAAK,EAAE,IACtD,CAAC;AAAA,IACL,OAAO,MAAM;AAAA,IACb,UAAU,MAAM;AAAA,IAChB,GAAI,MAAM,OAAO,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA,IACzC,aAAa,MAAM;AAAA,EACrB,CAAC;AAED,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,EACjB;AACF;AAEA,SAAS,mCAA2C;AAClD,QAAM,aAAa,WAAW,QAAQ,aAAa;AACnD,MAAI,YAAY;AACd,WAAO;AAAA,EACT;AACA,QAAM,QAAQ,IAAI,WAAW,EAAE;AAC/B,QAAM,SAAS,WAAW;AAC1B,MAAI,QAAQ,iBAAiB;AAC3B,WAAO,gBAAgB,KAAK;AAAA,EAC9B,OAAO;AACL,aAAS,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;AACpD,YAAM,KAAK,IAAI,KAAK,MAAM,KAAK,OAAO,IAAI,GAAG;AAAA,IAC/C;AAAA,EACF;AACA,QAAM,CAAC,KAAM,MAAM,CAAC,KAAK,KAAK,KAAQ;AACtC,QAAM,CAAC,KAAM,MAAM,CAAC,KAAK,KAAK,KAAQ;AACtC,QAAM,MAAM,MAAM;AAAA,IAAK;AAAA,IAAO,CAAC,SAC7B,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AAAA,EACnC,EAAE,KAAK,EAAE;AACT,SAAO,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC;AAC1G;;;ACnCA,eAAsB,6BAA6B,OAahD;AACD,QAAM,UAAU,6BAA6B,MAAM,WAAW,OAAO;AACrE,QAAM,aACJ,MAAM,oBAAoB,WACtB,MAAM,MAAM,QAAQ,QAAQ,YAAY;AAAA,IACtC;AAAA,IACA,OAAO,MAAM,WAAW,MAAM,KAAK;AAAA,IACnC,SAAS,MAAM;AAAA,IACf,aAAa,MAAM;AAAA,EACrB,CAAC,IACD,MAAM,MAAM,QAAQ,QAAQ,YAAY;AAAA,IACtC;AAAA,IACA,SAAS,MAAM,mBAAmB;AAAA,IAClC,OAAO,MAAM,WAAW,MAAM,KAAK;AAAA,IACnC,aAAa,MAAM;AAAA,EACrB,CAAC;AAEP,QAAM,EAAE,kBAAkB,mBAAmB,IAC3C,MAAM,kCAAkC;AAAA,IACtC,SAAS,MAAM,QAAQ;AAAA,IACvB;AAAA,IACA,cACE,MAAM,oBAAoB,WACtB,CAAC,IACA,MAAM,aAAa,YAAY;AAAA,MAC9B,CAAC,QAAQ,IAAI,eAAe;AAAA,IAC9B,KAAK,CAAC;AAAA,IACZ,SAAS,WAAW;AAAA,IACpB,YAAY;AAAA,IACZ,iBACE,MAAM,oBAAoB,WACtB,KACC,MAAM,aAAa,MAAM,WAAW;AAAA,IAC3C,aAAa,MAAM;AAAA,EACrB,CAAC;AAEH,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,4BAA4B,OAa/C;AACD,QAAM,UAAU,6BAA6B,MAAM,UAAU,OAAO;AACpE,QAAM,YACJ,MAAM,mBAAmB,WACrB,MAAM,MAAM,QAAQ,QAAQ,WAAW;AAAA,IACrC;AAAA,IACA,SAAS,MAAM;AAAA,IACf,UAAU,MAAM,UAAU;AAAA,IAC1B,OAAO,MAAM,UAAU,MAAM,KAAK;AAAA,IAClC,aAAa,MAAM;AAAA,EACrB,CAAC,IACD,MAAM,MAAM,QAAQ,QAAQ,WAAW;AAAA,IACrC;AAAA,IACA,SAAS,MAAM;AAAA,IACf,UAAU,MAAM,UAAU;AAAA,IAC1B,QAAQ,MAAM,kBAAkB;AAAA,IAChC,OAAO,MAAM,UAAU,MAAM,KAAK;AAAA,IAClC,aAAa,MAAM;AAAA,EACrB,CAAC;AAEP,QAAM,EAAE,kBAAkB,mBAAmB,IAC3C,MAAM,kCAAkC;AAAA,IACtC,SAAS,MAAM,QAAQ;AAAA,IACvB;AAAA,IACA,cACE,MAAM,mBAAmB,WACrB,CAAC,IACA,MAAM,YAAY,YAAY;AAAA,MAC7B,CAAC,QAAQ,IAAI,eAAe;AAAA,IAC9B,KAAK,CAAC;AAAA,IACZ,SAAS,MAAM;AAAA,IACf,YAAY;AAAA,IACZ,iBACE,MAAM,mBAAmB,WACrB,KACC,MAAM,YAAY,KAAK,WAAW;AAAA,IACzC,QAAQ,UAAU;AAAA,IAClB,aAAa,MAAM;AAAA,EACrB,CAAC;AAEH,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAOA,eAAe,kCAAkC,OASG;AAClD,QAAM,gBAAgB,IAAI;AAAA,IACxB,MAAM,aACH,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,CAAC,EAC5B,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;AAAA,EACrC;AACA,QAAM,cAAc;AAAA,IAClB,MAAM;AAAA,EACR;AACA,QAAM,eAAe,IAAI;AAAA,IACvB,YAAY,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;AAAA,EAC5E;AACA,QAAM,uBAAuB,IAAI;AAAA,IAC/B,iDAAiD,MAAM,eAAe,EACnE,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,CAAC,EAC5B,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;AAAA,EACrC;AACA,QAAM,mBAAmB,YAAY,OAAO,CAAC,QAAQ;AACnD,UAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,WAAO,KAAK,SAAS,KAAK,CAAC,cAAc,IAAI,IAAI;AAAA,EACnD,CAAC;AACD,QAAM,qBAAqB,MAAM,aAAa,OAAO,CAAC,QAAQ;AAC5D,UAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,WAAO,qBAAqB,IAAI,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI;AAAA,EACjE,CAAC;AACD,QAAM,cAAc,iBAAiB,IAAI,CAAC,SAAS;AAAA,IACjD,aAAa,IAAI;AAAA,IACjB,MAAM,IAAI;AAAA,IACV,SAAS,IAAI;AAAA,EACf,EAAE;AAEF,MAAI,YAAY,SAAS,GAAG;AAC1B,UAAM,MAAM,QAAQ;AAAA,MAClB,MAAM,eAAe,SACjB;AAAA,QACE,SAAS,MAAM;AAAA,QACf,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,QAAQ,MAAM,UAAU;AAAA,QACxB,aAAa,MAAM;AAAA,MACrB,IACA;AAAA,QACE,SAAS,MAAM;AAAA,QACf,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,aAAa,MAAM;AAAA,MACrB;AAAA,IACN;AAAA,EACF;AAEA,aAAW,OAAO,oBAAoB;AACpC,UAAM,MAAM,QAAQ;AAAA,MAClB,IAAI,eAAe,SACf;AAAA,QACE,cAAc,IAAI;AAAA,QAClB,SAAS,IAAI;AAAA,QACb,YAAY;AAAA,QACZ,QAAQ,IAAI;AAAA,QACZ,aAAa,MAAM;AAAA,MACrB,IACA;AAAA,QACE,cAAc,IAAI;AAAA,QAClB,SAAS,IAAI;AAAA,QACb,YAAY;AAAA,QACZ,aAAa,MAAM;AAAA,MACrB;AAAA,IACN;AAAA,EACF;AAEA,SAAO;AAAA,IACL,kBAAkB,iBAAiB,IAAI,CAAC,SAAS;AAAA,MAC/C,aAAa,IAAI;AAAA,MACjB,MAAM,IAAI;AAAA,MACV,MAAM,IAAI;AAAA,IACZ,EAAE;AAAA,IACF;AAAA,EACF;AACF;;;AC/NO,SAAS,+BACd,cAKA;AACA,SAAO,OAAO,cAAc,oBAAoB;AAClD;AAEA,eAAsB,kCAAkC,OAStC;AAChB,QAAM,OAAO,MAAM,MAAM,aAAa,gBAAgB;AAAA,IACpD,SAAS,MAAM;AAAA,IACf,QAAQ,MAAM,UAAU;AAAA,IACxB,aAAa,MAAM;AAAA,EACrB,CAAC;AACD,MAAI,OAAO,cAAc,eAAe,CAAC,UAAU,WAAW,WAAW;AACvE,UAAM,IAAI,MAAM,qCAAqC;AAAA,EACvD;AACA,QAAM,UAAU,UAAU,UAAU,IAAI;AAC1C;;;ACzBO,SAAS,2BACd,SACA,OACM;AACN,OAAK,QAAQ,QAAQ,QAAQ,WAAW,MAAM,KAAK,CAAC,EAAE,MAAM,MAAM,MAAS;AAC7E;AAEO,SAAS,kCAAkC,OAIzC;AACP,QAAM,OAAO,oBAAI,IAAY;AAC7B,aAAW,OAAO,MAAM,MAAM;AAC5B,UAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,QAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,GAAG;AAC3B;AAAA,IACF;AACA,SAAK,IAAI,IAAI;AACb,+BAA2B,MAAM,SAAS;AAAA,MACxC,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,SAAS,6BAA6B,IAAI,IAAI;AAAA,QAC9C,YAAY,MAAM;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,SAAS,yCAAyC,OAKhD;AACP,QAAM,eAAe;AAAA,IACnB,MAAM;AAAA,EACR;AACA,QAAM,WAAW;AAAA,IACf,MAAM;AAAA,EACR;AACA,QAAM,gBAAgB,IAAI;AAAA,IACxB,aAAa,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,CAAC,EAAE,OAAO,OAAO;AAAA,EAC3D;AACA,QAAM,YAAY,IAAI;AAAA,IACpB,SAAS,IAAI,CAAC,QAAQ,IAAI,KAAK,KAAK,CAAC,EAAE,OAAO,OAAO;AAAA,EACvD;AAEA,oCAAkC;AAAA,IAChC,SAAS,MAAM;AAAA,IACf,MAAM,SAAS,OAAO,CAAC,QAAQ,CAAC,cAAc,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC;AAAA,IAClE,YAAY,MAAM;AAAA,EACpB,CAAC;AAED,aAAW,QAAQ,eAAe;AAChC,QAAI,UAAU,IAAI,IAAI,GAAG;AACvB;AAAA,IACF;AACA,+BAA2B,MAAM,SAAS;AAAA,MACxC,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,YAAY,MAAM;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,SAAS,6BACP,MACiC;AACjC,SAAO,SAAS,WAAW,cAAc;AAC3C;;;AC8CO,SAAS,oCACd,OACA;AACA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,YAAY,CAChB,SACA,OAAqC,kBAClC;AACH,oBAAgB;AAAA,MACd,OAAO;AAAA,MACP;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,cAAc,CAAC,OAAgB,gBAAwB;AAC3D,oBAAgB;AAAA,MACd,OAAO,gCAAgC,OAAO,MAAM,WAAW;AAAA,MAC/D,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAEA,QAAM,eAAe,CAAC,YAA2C;AAC/D,uCAAmC;AAAA,MACjC,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,oBAAoB,CAAC,WAAW,mBAAmB,MAAM;AAAA,MACzD;AAAA,MACA;AAAA,MACA,WAAW,CAAC,QAAQ,KAAK,EAAE,GAAG;AAAA,MAC9B;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,mBAAmB,OACvB,MACA,SAA6C,oBAC1C;AACH,QAAI,CAAC,QAAQ;AACX,mBAAa;AAAA,QACX,iBAAiB;AAAA,MACnB,CAAC;AACD;AAAA,IACF;AAEA,QAAI,OAAO,SAAS,UAAU;AAC5B;AAAA,QACE,0CAA0C;AAAA,UACxC;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AACA,wCAAkC;AAAA,QAChC;AAAA,QACA;AAAA,QACA,YAAY,OAAO;AAAA,MACrB,CAAC;AACD;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,oCAAoC;AAAA,MACzD,SAAS,QAAQ;AAAA,MACjB;AAAA,MACA,iBAAiB,UAAU;AAAA,MAC3B;AAAA,MACA;AAAA,IACF,CAAC;AACD,QAAI,UAAU;AACZ,wCAAkC;AAAA,QAChC;AAAA,QACA;AAAA,QACA,YAAY,OAAO;AAAA,MACrB,CAAC;AAAA,IACH;AACA,iBAAa,0CAA0C,QAAQ,CAAC;AAAA,EAClE;AAEA,SAAO;AAAA,IACL,MAAM,iBAAiB,YAA8B;AACnD,YAAM,cAAc,QAAQ;AAC5B,YAAM,aAAa,uCAAuC;AAAA,QACxD,gBAAgB,QAAQ,WAAW;AAAA,QACnC;AAAA,QACA,2BACE,yCAAyC,WAAW;AAAA,QACtD,gBAAgB,UAAU;AAAA,MAC5B,CAAC;AACD,UAAI,WAAW,SAAS,QAAQ;AAC9B;AAAA,MACF;AACA,UAAI,WAAW,SAAS,oBAAoB;AAC1C,YAAI,CAAC,yCAAyC,WAAW,GAAG;AAC1D;AAAA,QACF;AACA,cAAM,OAAO,MAAM,qCAAqC;AAAA,UACtD;AAAA,UACA;AAAA,QACF,CAAC;AACD,cAAM,iBAAiB,MAAM,WAAW,MAAM;AAC9C;AAAA,MACF;AAEA;AAAA,QACE,6CAA6C,WAAW,MAAM;AAAA,MAChE;AAAA,IACF;AAAA,IAEA,kBAAkB;AAChB,6BAAuB,QAAQ;AAC/B,2BAAqB;AAAA,QACnB,SAAS,UAAU,oBAAoB;AAAA,QACvC,UAAU;AAAA,QACV,OAAO,UAAU,kBAAkB;AAAA,MACrC,CAAC;AACD,sBAAgB,CAAC,aAAa;AAAA,QAC5B,GAAG;AAAA,QACH,gBAAgB;AAAA,MAClB,EAAE;AAAA,IACJ;AAAA,IAEA,MAAM,YAAY,SAAqC;AACrD,YAAM,kBAAkB,UAAU;AAClC,UACE,CAAC,mBACA,SAAS,qBAAqB,QAC7B,CAAC,2BAA2B,KAAK,EAAE,2BAA2B,CAAC,GACjE;AACA;AAAA,MACF;AACA,UAAI;AACF,cAAM,QAAQ,QAAQ,YAAY;AAAA,UAChC,SAAS;AAAA,UACT;AAAA,QACF,CAAC;AACD,mCAA2B,SAAS;AAAA,UAClC,MAAM;AAAA,UACN,QAAQ,EAAE,SAAS,gBAAgB;AAAA,QACrC,CAAC;AACD,gCAAwB,MAAM;AAC9B,+BAAuB,MAAM;AAC7B,wBAAgB,CAAC,YAAY,8BAA8B,OAAO,CAAC;AACnE,mBAAW;AAAA,MACb,SAAS,OAAO;AACd,oBAAY,OAAO,4BAA4B;AAAA,MACjD;AAAA,IACF;AAAA,IAEA,MAAM,WAAW,SAAqC;AACpD,YAAM,kBAAkB,UAAU;AAClC,YAAM,iBAAiB,UAAU;AACjC,UACE,CAAC,mBACD,CAAC,kBACA,SAAS,qBAAqB,QAC7B,CAAC,2BAA2B,KAAK,EAAE,0BAA0B,CAAC,GAChE;AACA;AAAA,MACF;AAEA,UAAI;AACF,cAAM,QAAQ,QAAQ,WAAW;AAAA,UAC/B,SAAS;AAAA,UACT,QAAQ;AAAA,UACR;AAAA,QACF,CAAC;AACD,mCAA2B,SAAS;AAAA,UAClC,MAAM;AAAA,UACN,QAAQ,EAAE,SAAS,iBAAiB,QAAQ,eAAe;AAAA,QAC7D,CAAC;AACD,+BAAuB,MAAM;AAC7B,wBAAgB,CAAC,YAAY,6BAA6B,OAAO,CAAC;AAClE,mBAAW;AAAA,MACb,SAAS,OAAO;AACd,oBAAY,OAAO,2BAA2B;AAAA,MAChD;AAAA,IACF;AAAA,IAEA,MAAM,iBAAiB,YAA8B;AACnD,YAAM,cAAc,QAAQ;AAC5B,YAAM,aAAa,uCAAuC;AAAA,QACxD,gBAAgB,QAAQ,WAAW;AAAA,QACnC;AAAA,QACA,2BACE,yCAAyC,WAAW;AAAA,QACtD,gBAAgB,UAAU;AAAA,QAC1B;AAAA,MACF,CAAC;AACD,UAAI,WAAW,SAAS,QAAQ;AAC9B;AAAA,MACF;AACA,UAAI,WAAW,SAAS,oBAAoB;AAC1C,YAAI,CAAC,yCAAyC,WAAW,GAAG;AAC1D;AAAA,QACF;AACA,cAAM,OAAO,MAAM,qCAAqC;AAAA,UACtD;AAAA,UACA;AAAA,QACF,CAAC;AACD,cAAM,iBAAiB,MAAM,WAAW,MAAM;AAC9C;AAAA,MACF;AAEA;AAAA,QACE,6CAA6C,WAAW,MAAM;AAAA,MAChE;AAAA,IACF;AAAA,IAEA,MAAM,iBACJ,YACA,MACA;AACA,YAAM,cAAc,QAAQ;AAC5B,UAAI,CAAC,gCAAgC,WAAW,GAAG;AACjD;AAAA,MACF;AAEA,YAAM,OAAO,MAAM,oCAAoC;AAAA,QACrD;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AACD,UAAI,KAAK,WAAW,GAAG;AACrB;AAAA,MACF;AACA,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,UACE;AAAA,UACA,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,IAEA,MAAM,cAAc,WAAsC;AACxD,YAAM,cAAc,QAAQ;AAC5B,UAAI,CAAC,8BAA8B,WAAW,GAAG;AAC/C;AAAA,MACF;AAEA,YAAM,iCAAiC;AAAA,QACrC;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,iBAAiB,KAAsB;AAC3C,YAAM,iBAAiB,IAAI,gBAAgB,KAAK,KAAK;AACrD,UAAI,CAAC,kBAAkB,CAAC,QAAQ,oBAAoB,aAAa;AAC/D;AAAA,MACF;AAEA,UAAI;AACF,cAAM,QAAQ,mBAAmB,YAAY;AAAA,UAC3C;AAAA,UACA,UAAU,IAAI;AAAA,UACd;AAAA,QACF,CAAC;AAAA,MACH,SAAS,OAAO;AACd;AAAA,UACE;AAAA,YACE;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,MAAM,iBAAiB,KAA6B;AAClD,UAAI;AACF,cAAM,oCAAoC;AAAA,UACxC,SAAS,QAAQ;AAAA,UACjB;AAAA,UACA;AAAA,QACF,CAAC;AACD,mCAA2B,SAAS;AAAA,UAClC,MAAM;AAAA,UACN,QAAQ;AAAA,YACN,YAAY,IAAI;AAAA,UAClB;AAAA,QACF,CAAC;AACD,uBAAe;AAAA,MACjB,SAAS,OAAO;AACd,oBAAY,OAAO,gCAAgC;AAAA,MACrD;AAAA,IACF;AAAA,IAEA,MAAM,sBAAsB,MAAqB;AAC/C,YAAM,qBAAqB,MAAM,KAAK,KAAK;AAC3C;AAAA,QAAgB,CAAC,YACf,4CAA4C,SAAS,kBAAkB;AAAA,MACzE;AACA,UAAI,CAAC,oBAAoB;AACvB;AAAA,MACF;AAEA,UAAI;AACF,cAAM,QAAQ,0BAA0B,MAAM;AAAA,UAC5C,MAAM;AAAA,QACR,CAAC;AAAA,MACH,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,kBAA2B;AACvC,YAAM,UAAU,8BAA8B;AAAA,QAC5C,aAAa,YAAY;AAAA,QACzB;AAAA,QACA,uBAAuB,UAAU;AAAA,QACjC,YAAY,WAAW;AAAA,MACzB,CAAC;AACD,UAAI,QAAQ,SAAS,SAAS;AAC5B;AAAA,MACF;AACA,YAAM,qBAAqB,YAAY;AACvC,YAAM,oBAAoB,WAAW;AACrC,UAAI,CAAC,oBAAoB;AACvB;AAAA,MACF;AACA,UAAI,QAAQ,mCAAmC;AAC7C;AAAA,UAAgB,CAAC,YACf,uCAAuC,SAAS,QAAQ,QAAQ;AAAA,QAClE;AAAA,MACF;AAEA,uBAAiB,IAAI;AACrB,UAAI;AACF,mCAA2B,SAAS;AAAA,UAClC,MAAM;AAAA,UACN,QAAQ;AAAA,YACN,uBAAuB;AAAA,cACrB,UAAU,4BAA4B,KAAK;AAAA,YAC7C;AAAA,YACA,SAAS,mBAAmB,MAAM;AAAA,YAClC,UAAU,QAAQ;AAAA,YAClB,QAAQ,mBAAmB,KAAK,UAAU;AAAA,UAC5C;AAAA,QACF,CAAC;AACD,cAAM,SAAS,MAAM,2BAA2B;AAAA,UAC9C;AAAA,UACA,OAAO,mBAAmB;AAAA,UAC1B,UAAU,QAAQ;AAAA,UAClB,oBAAoB,UAAU;AAAA,UAC9B,MAAM,mBAAmB;AAAA,UACzB;AAAA,QACF,CAAC;AACD,cAAM,UAAU,wCAAwC;AAAA,UACtD,QAAQ,OAAO;AAAA,QACjB,CAAC;AACD,qBAAa,OAAO;AAAA,MACtB,SAAS,OAAO;AACd;AAAA,UACE,gCAAgC,OAAO,MAAM,oBAAoB;AAAA,QACnE;AAAA,MACF,UAAE;AACA,yBAAiB,KAAK;AACtB,uBAAe;AAAA,MACjB;AAAA,IACF;AAAA,IAEA,MAAM,mBAAmB,kBAA2B;AAClD,YAAM,gBAAgB,8BAA8B;AAAA,QAClD,aAAa,YAAY;AAAA,QACzB;AAAA,QACA,uBAAuB,UAAU;AAAA,QACjC,YAAY,WAAW;AAAA,MACzB,CAAC;AACD,UAAI,cAAc,SAAS,SAAS;AAClC;AAAA,MACF;AACA,YAAM,qBAAqB,YAAY;AACvC,UAAI,CAAC,oBAAoB;AACvB;AAAA,MACF;AACA,YAAM,oBAAoB,QAAQ;AAClC,UAAI,CAAC,mBAAmB;AACtB,kBAAU,KAAK,EAAE,+BAA+B,CAAC;AACjD;AAAA,MACF;AACA,UAAI,cAAc,mCAAmC;AACnD;AAAA,UAAgB,CAAC,YACf;AAAA,YACE;AAAA,YACA,cAAc;AAAA,UAChB;AAAA,QACF;AAAA,MACF;AAEA,UAAI;AACF,mCAA2B,SAAS;AAAA,UAClC,MAAM;AAAA,UACN,QAAQ;AAAA,YACN,SAAS,mBAAmB,MAAM;AAAA,YAClC,UAAU,cAAc;AAAA,UAC1B;AAAA,QACF,CAAC;AACD,cAAM,SAAS,MAAM,kBAAkB,eAAe;AAAA,UACpD,aAAa;AAAA,UACb,UAAU,cAAc;AAAA,UACxB;AAAA,QACF,CAAC;AACD,YAAI,OAAO,WAAW,UAAU;AAC9B;AAAA,YACE,OAAO,gBAAgB,KAAK,EAAE,8BAA8B;AAAA,UAC9D;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd;AAAA,UACE;AAAA,YACE;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,MAAM,YAAY;AAChB,YAAM,WAAW,gCAAgC;AAAA,QAC/C,eAAe,UAAU,iBAAiB;AAAA,QAC1C;AAAA,MACF,CAAC;AACD,UAAI,SAAS,SAAS,WAAW;AAC/B,kBAAU,KAAK,EAAE,SAAS,eAAe,CAAC;AAC1C;AAAA,MACF;AAEA,UAAI;AACF,cAAM,YAAY,oBAAoB;AACtC,cAAM,EAAE,SAAS,oBAAoB,WAAW,IAC9C,MAAM,6BAA6B;AAAA,UACjC,eAAe,SAAS;AAAA,UACxB;AAAA,UACA,aAAa,YAAY;AAAA,UACzB;AAAA,UACA;AAAA,UACA,iBAAiB,UAAU;AAAA,UAC3B;AAAA,QACF,CAAC;AACH,YAAI,WAAW;AACb,qCAA2B,SAAS;AAAA,YAClC,MAAM;AAAA,YACN,QAAQ,EAAE,SAAS,WAAW,QAAQ;AAAA,UACxC,CAAC;AAAA,QACH,OAAO;AACL,qCAA2B,SAAS;AAAA,YAClC,MAAM;AAAA,YACN,QAAQ;AAAA,cACN,iBAAiB,6BAA6B;AAAA,gBAC5C;AAAA,gBACA,MAAM;AAAA,kBACJ,YAAY,OAAO,YAAY;AAAA,oBAC7B,CAAC,QAAQ,IAAI,eAAe;AAAA,kBAC9B;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAC;AAAA,cACD,gBAAgB,2BAA2B,OAAO;AAAA,cAClD,SAAS,WAAW;AAAA,cACpB,WAAW,YAAY,OAAO,MAAM,UAAU;AAAA,YAChD;AAAA,UACF,CAAC;AAAA,QACH;AACA,cAAM,UAAU;AAAA,UACd,WAAW;AAAA,QACb;AACA,qBAAa,OAAO;AAAA,MACtB,SAAS,OAAO;AACd,oBAAY,OAAO,0BAA0B;AAAA,MAC/C;AAAA,IACF;AAAA,IAEA,MAAM,WAAW;AACf,YAAM,WAAW,+BAA+B;AAAA,QAC9C,iBAAiB,UAAU;AAAA,QAC3B;AAAA,MACF,CAAC;AACD,UAAI,SAAS,SAAS,QAAQ;AAC5B;AAAA,MACF;AACA,UAAI,SAAS,SAAS,WAAW;AAC/B,kBAAU,KAAK,EAAE,SAAS,eAAe,CAAC;AAC1C;AAAA,MACF;AAEA,UAAI;AACF,cAAM,YAAY,mBAAmB;AACrC,cAAM,EAAE,SAAS,oBAAoB,UAAU,IAC7C,MAAM,4BAA4B;AAAA,UAChC;AAAA,UACA,iBAAiB,SAAS;AAAA,UAC1B,gBAAgB,UAAU;AAAA,UAC1B,YAAY,WAAW;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACH,YAAI,WAAW;AACb,qCAA2B,SAAS;AAAA,YAClC,MAAM;AAAA,YACN,QAAQ;AAAA,cACN,SAAS,SAAS;AAAA,cAClB,QAAQ,UAAU;AAAA,YACpB;AAAA,UACF,CAAC;AAAA,QACH,OAAO;AACL,qCAA2B,SAAS;AAAA,YAClC,MAAM;AAAA,YACN,QAAQ;AAAA,cACN,iBAAiB,6BAA6B;AAAA,gBAC5C;AAAA,gBACA,MAAM;AAAA,kBACJ,WAAW,OAAO,YAAY;AAAA,oBAC5B,CAAC,QAAQ,IAAI,eAAe;AAAA,kBAC9B;AAAA,kBACA;AAAA,gBACF;AAAA,cACF,CAAC;AAAA,cACD,gBAAgB,2BAA2B,OAAO;AAAA,cAClD,SAAS,SAAS;AAAA,cAClB,QAAQ,UAAU;AAAA,YACpB;AAAA,UACF,CAAC;AAAA,QACH;AACA,cAAM,UAAU;AAAA,UACd,UAAU;AAAA,QACZ;AACA,qBAAa,OAAO;AAAA,MACtB,SAAS,OAAO;AACd,oBAAY,OAAO,yBAAyB;AAAA,MAC9C;AAAA,IACF;AAAA,IAEA,MAAM,sBAAsB,QAAqC;AAC/D,YAAM,kBAAkB,UAAU;AAClC,YAAM,iBAAiB,UAAU;AACjC,UAAI,CAAC,mBAAmB,CAAC,gBAAgB;AACvC;AAAA,MACF;AAEA,UAAI;AACF,cAAM,OAAO,MAAM,QAAQ,QAAQ,WAAW;AAAA,UAC5C,SAAS;AAAA,UACT;AAAA,UACA,QAAQ;AAAA,UACR;AAAA,QACF,CAAC;AACD,qBAAa,yCAAyC,KAAK,MAAM,CAAC;AAAA,MACpE,SAAS,OAAO;AACd,oBAAY,OAAO,yBAAyB;AAAA,MAC9C;AAAA,IACF;AAAA,IAEA,MAAM,iBAAiB;AACrB,YAAM,kBAAkB,UAAU;AAClC,YAAM,eAAe,QAAQ;AAC7B,UAAI,CAAC,+BAA+B,YAAY,KAAK,CAAC,iBAAiB;AACrE;AAAA,MACF;AAEA,UAAI;AACF,cAAM,kCAAkC;AAAA,UACtC,SAAS;AAAA,UACT;AAAA,UACA,QAAQ,UAAU;AAAA,UAClB;AAAA,QACF,CAAC;AAAA,MACH,SAAS,OAAO;AACd,oBAAY,OAAO,8BAA8B;AAAA,MACnD;AAAA,IACF;AAAA,IAEA,MAAM,yBAAyB,MAAmC;AAChE,YAAM,iBAAiB,IAAI;AAAA,IAC7B;AAAA,EACF;AACF;AAEA,SAAS,2BAA2B,SAA0B;AAC5D,SAAO,QAAQ,KAAK,EAAE,SAAS;AACjC;AAEA,SAAS,6BAA6B,OAG3B;AACT,QAAM,QAAQ,oBAAI,IAAY;AAC9B,aAAW,OAAO,MAAM,QAAQ,CAAC,GAAG;AAClC,UAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,QAAI,MAAM;AACR,YAAM,IAAI,IAAI;AAAA,IAChB;AAAA,EACF;AACA,aAAW,OAAO;AAAA,IAChB,MAAM;AAAA,EACR,GAAG;AACD,UAAM,OAAO,IAAI,KAAK,KAAK;AAC3B,QAAI,MAAM;AACR,YAAM,IAAI,IAAI;AAAA,IAChB;AAAA,EACF;AACA,SAAO,MAAM;AACf;AAEA,SAAS,uCAGP,MACA,aACK;AACL,MAAI,CAAC,MAAM,UAAU,YAAY,WAAW,GAAG;AAC7C,WAAO,CAAC,GAAI,QAAQ,CAAC,CAAE;AAAA,EACzB;AACA,QAAM,aAAa,IAAI,IAAI,YAAY,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC;AACrE,SAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,WAAW,IAAI,IAAI,YAAY,CAAC;AAC/D;;;AC1uBO,SAAS,0CAA0C,OAiBvD;AACD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,SAAO,oCAAoC;AAAA,IACzC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,MAAM,kBAAkB,WAAW;AAAA,IAC/C,gBAAgB,MAAM,kBAAkB,eAAe;AAAA,IACvD,iBAAiB,CAAC,WAChB,kBAAkB;AAAA,MAAgB,CAAC,YACjC,8CAA8C,SAAS,MAAM;AAAA,IAC/D;AAAA,IACF,kBAAkB,CAAC,WAAW,kBAAkB,iBAAiB,MAAM;AAAA,IACvE,uBAAuB,CAAC,WACtB,kBAAkB,sBAAsB,MAAM;AAAA,IAChD,yBAAyB,CAAC,WACxB,kBAAkB,wBAAwB,MAAM;AAAA,IAClD,oBAAoB,CAAC,WACnB,kBAAkB,mBAAmB,MAAM;AAAA,IAC7C,sBAAsB,CAAC,WACrB,kBAAkB,qBAAqB,MAAM;AAAA,IAC/C,wBAAwB,CAAC,WACvB,kBAAkB,uBAAuB,MAAM;AAAA,IACjD;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB,CAAC,YAAY,kBAAkB,gBAAgB,OAAO;AAAA,IACvE;AAAA,EACF,CAAC;AACH;AAEA,SAAS,8CACP,SACA,OAI+B;AAC/B,SAAO;AAAA,IACL,KAAK,SAAS,MAAM,KAAK;AAAA,IACzB,OAAO,MAAM;AAAA,IACb,MAAM,MAAM,QAAQ;AAAA,EACtB;AACF;;;ACnFO,SAAS,gCAAgC,OAK7C;AACD,QAAM,EAAE,mBAAmB,SAAS,iBAAiB,UAAU,IAAI;AAEnE,SAAO;AAAA,IACL,gBAAgB,SAAiB;AAC/B,wBAAkB,sBAAsB,CAAC,YAAY;AACnD,iDAAyC;AAAA,UACvC;AAAA,UACA,aAAa;AAAA,UACb,iBAAiB,QAAQ;AAAA,UACzB,YAAY;AAAA,QACd,CAAC;AACD,eAAO;AAAA,UACL,GAAG;AAAA,UACH;AAAA,QACF;AAAA,MACF,CAAC;AACD,wBAAkB;AAAA,QAAgB,CAAC,YACjC,qCAAqC,SAAS,iBAAiB,OAAO;AAAA,MACxE;AAAA,IACF;AAAA,IACA,cAAc,OAA4B;AACxC,wBAAkB,sBAAsB,CAAC,aAAa;AAAA,QACpD,GAAG;AAAA,QACH,GAAG;AAAA,MACL,EAAE;AAAA,IACJ;AAAA,IACA,mBAAmB,MAA8B;AAC/C,wBAAkB,wBAAwB,IAAI;AAC9C,UAAI,SAAS,UAAU;AACrB,0BAAkB;AAAA,UAChB,0CAA0C,SAAS;AAAA,QACrD;AAAA,MACF;AACA,wBAAkB;AAAA,QAAgB,CAAC,YACjC,4CAA4C,SAAS,IAAI;AAAA,MAC3D;AAAA,IACF;AAAA,IACA,oBAAoB,OAAe;AACjC,wBAAkB,gBAAgB,CAAC,aAAa;AAAA,QAC9C,GAAG;AAAA,QACH,kBAAkB;AAAA,MACpB,EAAE;AAAA,IACJ;AAAA,IACA,qBAAqB,OAAmD;AACtE,wBAAkB,gBAAgB,CAAC,aAAa;AAAA,QAC9C,GAAG;AAAA,QACH,mBAAmB;AAAA,MACrB,EAAE;AAAA,IACJ;AAAA,IACA,cAAc,OAAe;AAC3B,wBAAkB,sBAAsB,CAAC,aAAa;AAAA,QACpD,GAAG;AAAA,QACH;AAAA,MACF,EAAE;AAAA,IACJ;AAAA,EACF;AACF;;;AC1DO,SAAS,+BAA+B,OAK5C;AACD,QAAM,EAAE,mBAAmB,SAAS,WAAW,eAAe,IAAI;AAElE,SAAO;AAAA,IACL,WAAW,QAAuB;AAChC,wBAAkB;AAAA,QAAgB,CAAC,YACjC,+BAA+B,SAAS,MAAM;AAAA,MAChD;AACA,wBAAkB,uBAAuB,MAAM;AAAA,IACjD;AAAA,IACA,eAAe,SAAiB;AAC9B,wBAAkB,qBAAqB,CAAC,YAAY;AAClD,iDAAyC;AAAA,UACvC;AAAA,UACA,aAAa;AAAA,UACb,iBAAiB,QAAQ;AAAA,UACzB,YAAY;AAAA,QACd,CAAC;AACD,eAAO;AAAA,UACL,GAAG;AAAA,UACH;AAAA,QACF;AAAA,MACF,CAAC;AACD,wBAAkB;AAAA,QAAgB,CAAC,YACjC,oCAAoC,SAAS,gBAAgB,OAAO;AAAA,MACtE;AAAA,IACF;AAAA,IACA,aAAa,OAA2B;AACtC,wBAAkB,qBAAqB,CAAC,aAAa;AAAA,QACnD,GAAG;AAAA,QACH,GAAG;AAAA,MACL,EAAE;AAAA,IACJ;AAAA,IACA,kBAAkB,MAA8B;AAC9C,wBAAkB,uBAAuB,IAAI;AAC7C,UAAI,SAAS,UAAU;AACrB,0BAAkB;AAAA,UAChB,yCAAyC,SAAS;AAAA,QACpD;AAAA,MACF;AACA,wBAAkB;AAAA,QAAgB,CAAC,YACjC,2CAA2C,SAAS,IAAI;AAAA,MAC1D;AAAA,IACF;AAAA,IACA,qBAAqB,WAAoB;AACvC,wBAAkB,gBAAgB,CAAC,aAAa;AAAA,QAC9C,GAAG;AAAA,QACH,mBAAmB;AAAA,MACrB,EAAE;AAAA,IACJ;AAAA,IACA,gBAAgB,UAAgC;AAC9C,wBAAkB,qBAAqB,CAAC,aAAa;AAAA,QACnD,GAAG;AAAA,QACH;AAAA,MACF,EAAE;AAAA,IACJ;AAAA,IACA,aAAa,OAAe;AAC1B,wBAAkB,qBAAqB,CAAC,aAAa;AAAA,QACnD,GAAG;AAAA,QACH;AAAA,MACF,EAAE;AAAA,IACJ;AAAA,EACF;AACF;;;AC1EO,SAAS,qCAAqC,OAWlD;AACD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,gBAAgB,gCAAgC;AAAA,IACpD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,eAAe,+BAA+B;AAAA,IAClD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH,sBAAsB;AACpB,wBAAkB,gBAAgB,IAAI;AAAA,IACxC;AAAA,IACA,aAAa;AACX,wBAAkB,WAAW;AAAA,IAC/B;AAAA,IACA,uBAAuB,OAAe;AACpC,wBAAkB,uBAAuB,KAAK;AAAA,IAChD;AAAA,IACA,2BAA2B,SAA2B;AACpD,aACE,+BAA+B;AAAA,QAC7B;AAAA,QACA;AAAA,MACF,CAAC,KAAK,CAAC;AAAA,IAEX;AAAA,IACA,YAAY,SAAwB;AAClC,wBAAkB;AAAA,QAAgB,CAAC,YACjC,gCAAgC,SAAS,OAAO;AAAA,MAClD;AACA,wBAAkB,wBAAwB,MAAM;AAChD,wBAAkB,uBAAuB,MAAM;AAAA,IACjD;AAAA,IACA,mBAAmB,QAA4C;AAC7D,wBAAkB,mBAAmB,MAAM;AAAA,IAC7C;AAAA,IACA,yBAAyB,UAAkB;AACzC,wBAAkB,gBAAgB,CAAC,aAAa;AAAA,QAC9C,GAAG;AAAA,QACH,uBAAuB;AAAA,MACzB,EAAE;AAAA,IACJ;AAAA,EACF;AACF;;;ACpFA,SAAS,kBAAkB,aAAAC,YAAW,eAAe;AACrD,SAAS,mBAAmB;;;ACI5B,IAAM,+BAA+B;AAU9B,SAAS,2CAA2C,OAEZ;AAC7C,MAAI,CAAC,MAAM,cAAc;AACvB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL,YAAY;AAAA,IACZ,IAAI,MAAM,aAAa;AAAA,IACvB,WAAW;AAAA,IACX,OAAO,MAAM,aAAa;AAAA,IAC1B,MAAM,MAAM,aAAa;AAAA,EAC3B;AACF;;;ADZO,SAAS,iCAAiC,OAY/C;AACA,QAAM,EAAE,SAAS,YAAY,eAAe,SAAS,OAAO,YAAY,IACtE;AACF,QAAM,oBAAoB;AAAA,IACxB,MAAM,WAAW,oCAAoC;AAAA,IACrD,CAAC,OAAO;AAAA,EACV;AACA,QAAM,oBAAoB;AAAA,IACxB,MACE,kBAAkB,cAAc;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACH,CAAC,mBAAmB,SAAS,YAAY,WAAW;AAAA,EACtD;AACA,QAAM,WAAW;AAAA,IACf,kBAAkB;AAAA,EACpB;AACA,QAAM,sBAAsB;AAAA,IAC1B,SAAS,UAAU;AAAA,EACrB;AACA,QAAM,iBAAiB,2CAA2C;AAAA,IAChE,cAAc,SAAS;AAAA,EACzB,CAAC;AAED,EAAAC,WAAU,MAAM;AACd,sBAAkB,OAAO;AACzB,WAAO,MAAM;AACX,wBAAkB,QAAQ;AAAA,IAC5B;AAAA,EACF,GAAG,CAAC,iBAAiB,CAAC;AAEtB,EAAAA,WAAU,MAAM;AACd,sBAAkB,UAAU;AAAA,MAC1B;AAAA,MACA;AAAA,MACA,mBAAmB,OAAO,sBAAsB;AAAA,IAClD,CAAC;AAAA,EACH,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,EACT,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AhB2DO,SAAS,0BAA0B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2D;AACzD,QAAM,OAAO,QAAQ;AACrB,QAAM,EAAE,mBAAmB,gBAAgB,SAAS,IAClD,iCAAiC;AAAA,IAC/B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AACJ,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAIC;AAAA,IACF,MAAM,0CAA0C,OAAO;AAAA,IACvD,CAAC,OAAO;AAAA,EACV;AACA,QAAM,CAAC,iBAAiB,kBAAkB,IAAIC;AAAA,IAAS,MACrD,wCAAwC,OAAO;AAAA,EACjD;AAEA,EAAAC,WAAU,MAAM;AACd,uBAAmB,wCAAwC,OAAO,CAAC;AACnE,WAAO,QAAQ,sBAAsB,YAAY,MAAM;AACrD,yBAAmB,wCAAwC,OAAO,CAAC;AAAA,IACrE,CAAC;AAAA,EACH,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,UAAU,0CAA0C;AAAA,IACxD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,WAAW,qCAAqC;AAAA,IACpD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,8BAA8B;AAAA,IAC9B;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,8BAA8B,CAAC,YAAoB;AACvD,YAAQ,eAAe,KAAK,OAAO;AACnC,sBAAkB,gBAAgB,CAAC,aAAa;AAAA,MAC9C,KAAK,SAAS,MAAM,KAAK;AAAA,MACzB,OAAO;AAAA,MACP,MAAM;AAAA,IACR,EAAE;AAAA,EACJ;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM,YAAY,YAAY;AAC5B,UAAI;AACF,cAAM,QAAQ,MAAM,QAAQ,QAAQ,YAAY;AAAA,UAC9C,GAAG;AAAA,UACH;AAAA,QACF,CAAC;AACD,0BAAkB,gBAAgB,CAAC,aAAa;AAAA,UAC9C,GAAG;AAAA,UACH,eAAe,MAAM;AAAA,QACvB,EAAE;AACF,0BAAkB,WAAW;AAAA,MAC/B,QAAQ;AACN,oCAA4B,KAAK,EAAE,4BAA4B,CAAC;AAAA,MAClE;AAAA,IACF;AAAA,IACA,MAAM,YAAY,SAAS;AACzB,YAAM,iBAAiB,QAAQ,KAAK;AACpC,UAAI,CAAC,gBAAgB;AACnB;AAAA,MACF;AACA,UAAI;AACF,cAAM,QAAQ,QAAQ,YAAY;AAAA,UAChC,SAAS;AAAA,UACT;AAAA,QACF,CAAC;AACD,YAAI,UAAU,kBAAkB,gBAAgB;AAC9C,4BAAkB,gBAAgB,CAAC,aAAa;AAAA,YAC9C,GAAG;AAAA,YACH,eAAe;AAAA,YACf,iBAAiB;AAAA,YACjB,gBAAgB;AAAA,UAClB,EAAE;AAAA,QACJ;AACA,0BAAkB,WAAW;AAAA,MAC/B,SAAS,OAAO;AACd;AAAA,UACE,2CAA2C,OAAO,IAAI;AAAA,QACxD;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,kCACE,QAAQ,0BAA0B,WAAW;AAAA,IAC/C,0BAA0B,QAAQ;AAAA,IAClC,gCAAgC,MAC9B,QAAQ,0BAA0B,KAAK,KACvC,QAAQ,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;AAAA,IAClC;AAAA,IACA,YAAY,SAAiB;AAC3B,YAAM,iBAAiB,QAAQ,KAAK;AACpC,UAAI,CAAC,gBAAgB;AACnB;AAAA,MACF;AACA,UAAI,UAAU,kBAAkB,gBAAgB;AAC9C,aAAK,QAAQ;AAAA,UACX,QAAQ,WAAW,MAAM;AAAA,YACvB,MAAM;AAAA,YACN,QAAQ,CAAC;AAAA,UACX,CAAC;AAAA,QACH,EAAE,MAAM,MAAM,MAAS;AAAA,MACzB;AACA,wBAAkB,gBAAgB,CAAC,aAAa;AAAA,QAC9C,GAAG;AAAA,QACH,eAAe;AAAA,MACjB,EAAE;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,MAAM,YAAY,YAAY;AAC5B,UAAI;AACF,cAAM,QAAQ,QAAQ,YAAY;AAAA,UAChC,GAAG;AAAA,UACH;AAAA,QACF,CAAC;AACD,0BAAkB,WAAW;AAAA,MAC/B,QAAQ;AACN,oCAA4B,KAAK,EAAE,4BAA4B,CAAC;AAAA,MAClE;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACF;;;AkBpSO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiC;AAC/B,QAAM,aAAa,0BAA0B;AAAA,IAC3C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,uCAAqC;AAAA,IACnC;AAAA,IACA,mBAAmB,CAAC,cAAc;AAChC,iBAAW,qBAAqB,SAAS;AAAA,IAC3C;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,gBAAgB,iCAAiC;AAAA,IACrD,aAAa,WAAW,YAAY,OAAO,SAAS;AAAA,IACpD,QAAQ,WAAW,OAAO;AAAA,IAC1B,iBAAiB,WAAW,UAAU;AAAA,EACxC,CAAC;AACD,QAAM,eAAe,gCAAgC;AAAA,IACnD,gBAAgB,WAAW,UAAU;AAAA,IACrC,YAAY,WAAW,WAAW,OAAO,QAAQ;AAAA,IACjD,OAAO,WAAW,YAAY,OAAO,SAAS,CAAC;AAAA,EACjD,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS,MAAM;AACb,mBAAW,mBAAmB,IAAI;AAAA,MACpC;AAAA,MACA,WAAW,CAAC,SAAsC;AAChD,aAAK,WAAW,yBAAyB,IAAI;AAAA,MAC/C;AAAA,MACA,MAAM,WAAW,oBAAoB;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,MACL,mBAAmB,MAAM;AACvB,mBAAW,kBAAkB,MAAM;AACnC,mBAAW,WAAW,IAAI;AAAA,MAC5B;AAAA,MACA,sBAAsB,MAAM;AAC1B,mBAAW,mBAAmB,MAAM;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AACF;;;AC9DA;AAAA,EACyC;AAAA,OAGlC;;;ACvCP;AAAA,EACE,aAAAC;AAAA,EACA,UAAAC;AAAA,OAIK;AACP,SAAS,UAAAC,UAAQ,WAAW,MAAAC,YAAU;AACtC,SAAS,oCAAoC;;;ACR7C,SAAS,aAAAC,YAAW,YAAAC,iBAA0C;AAC9D,SAAS,UAAAC,UAAQ,kBAAAC,iBAAgB,MAAAC,WAAU;;;ACD3C,SAAS,YAAAC,iBAA0B;AACnC;AAAA,EACE,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA;AAAA,EACA,cAAAC;AAAA,OACK;;;ACKA,SAAS,+BACd,QACgC;AAChC,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;;;AC7BA;AAAA,EACE;AAAA,EACA;AAAA,EACA,UAAAC;AAAA,EACA,kBAAAC;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACPP,SAAS,SAAS,gBAAgB,sBAAsB;AAYpD,SACE,KADF;AAVJ,IAAM,mCAAmC;AAElC,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AACF,GAGiB;AACf,SACE,qBAAC,WAAQ,eAAe,kCACtB;AAAA,wBAAC,kBAAe,SAAO,MAAE,UAAS;AAAA,IAClC;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QAEJ;AAAA;AAAA,IACH;AAAA,KACF;AAEJ;;;ACjBO,SAAS,6BACd,SACA,UACQ;AACR,QAAM,YAAY;AAAA,IAChB,wCAAwC,WAAW,EAAE;AAAA,EACvD;AACA,MAAI,CAAC,WAAW;AACd,WAAO,gDAAgD,QAAQ;AAAA,EACjE;AACA,MAAI,UAAU,UAAU,KAAK;AAC3B,WAAO;AAAA,EACT;AACA,SAAO,GAAG,UAAU,MAAM,GAAG,GAAG,CAAC;AACnC;AAEO,SAAS,gDACd,OACQ;AACR,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,CAAC,WAAW,QAAQ,SAAS,KAAK,KAAK,QAAQ,SAAS,QAAG,GAAG;AAChE,WAAO;AAAA,EACT;AACA,SAAO,QAAQ,QAAQ,YAAY,EAAE;AACvC;AAEO,SAAS,wBAAwB,MAAuC;AAC7E,SAAO,gCAAgC,IAAI;AAC7C;AAEO,SAAS,gCACd,QAGQ;AACR,SAAO,OAAO,oBAAoB,KAAK,KAAK,OAAO;AACrD;;;ACzCA,SAAS,QAAQ,sBAAsB;AAQnC,gBAAAC,MAkCI,QAAAC,aAlCJ;AAgDG,SAAS,+BAA4C;AAC1D,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAU;AAAA,MAEV;AAAA,wBAAAC,KAAC,SAAI,WAAU,kCAAiC;AAAA,QAChD,gBAAAA,KAAC,SAAI,WAAU,oCAAmC;AAAA,QAClD,gBAAAD,MAAC,SAAI,WAAU,mEACb;AAAA,0BAAAC,KAAC,SAAI,WAAU,kCAAiC;AAAA,UAChD,gBAAAA,KAAC,SAAI,WAAU,yCAAwC;AAAA,UACvD,gBAAAA,KAAC,SAAI,WAAU,0CAAyC;AAAA,UACxD,gBAAAA,KAAC,SAAI,WAAU,0CAAyC;AAAA,WAC1D;AAAA,QACA,gBAAAD,MAAC,SAAI,WAAU,mEACb;AAAA,0BAAAC,KAAC,SAAI,WAAU,kCAAiC;AAAA,UAChD,gBAAAA,KAAC,SAAI,WAAU,yCAAwC;AAAA,UACvD,gBAAAA,KAAC,SAAI,WAAU,yCAAwC;AAAA,WACzD;AAAA;AAAA;AAAA,EACF;AAEJ;AAyBO,SAAS,qCAAkD;AAChE,SACE,gBAAAC,MAAC,SAAI,eAAY,QAAO,WAAU,cAChC;AAAA,oBAAAC,KAAC,SAAI,WAAU,oCAAmC;AAAA,IAClD,gBAAAD,MAAC,SAAI,WAAU,0BACb;AAAA,sBAAAC,KAAC,SAAI,WAAU,4BAA2B;AAAA,MAC1C,gBAAAA,KAAC,SAAI,WAAU,4BAA2B;AAAA,OAC5C;AAAA,IACA,gBAAAD,MAAC,SAAI,WAAU,mEACb;AAAA,sBAAAC,KAAC,SAAI,WAAU,kCAAiC;AAAA,MAChD,gBAAAA,KAAC,SAAI,WAAU,yCAAwC;AAAA,MACvD,gBAAAA,KAAC,SAAI,WAAU,0CAAyC;AAAA,MACxD,gBAAAA,KAAC,SAAI,WAAU,yCAAwC;AAAA,OACzD;AAAA,KACF;AAEJ;;;AH5DM,SACE,OAAAC,MADF,QAAAC,aAAA;AA5BC,SAAS,8BAA8B;AAAA,EAC5C;AAAA,EACA,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA,OAAO;AACT,GAMgB;AACd,QAAM,WAAW,gDAAgD,IAAI;AACrE,QAAM,WAAW,OACb,gDAAgD,IAAI,IACpD;AACJ,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA,gBACI,6CACA,SAAS,gBACP,6CACA;AAAA,EACR;AAEA,MAAI,eAAe;AACjB,WACE,gBAAAA,MAAC,aAAQ,WAAU,gBACjB;AAAA,sBAAAD,KAAC,QAAG,WAAU,wDACX,iBACH;AAAA,MACA,gBAAAA,KAAC,OAAE,WAAW,eAAgB,oBAAS;AAAA,OACzC;AAAA,EAEJ;AAEA,SACE,gBAAAC,MAAC,aAAQ,WAAU,gBACjB;AAAA,oBAAAD,KAAC,QAAG,WAAU,wDACX,iBACH;AAAA,IACA,gBAAAC,MAAC,SAAI,WAAU,kEACb;AAAA,sBAAAD,KAAC,OAAE,WAAW,eAAgB,oBAAS;AAAA,MACtC,WACC,gBAAAA,KAAC,OAAE,WAAU,sEACV,oBACH,IACE;AAAA,OACN;AAAA,KACF;AAEJ;AAEO,SAAS,mCAAmC;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMgB;AACd,MAAI,CAAC,WAAW;AACd,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,KAAK,EAAE,4BAA4B;AAAA,QACzC,eAAa;AAAA,QACb,OAAO,KAAK,EAAE,wBAAwB;AAAA;AAAA,IACxC;AAAA,EAEJ;AAEA,QAAM,iBAAiB,UAAU,gBAAgB,KAAK,KAAK;AAC3D,QAAM,cAAc,+BAA+B,MAAM,UAAU,MAAM;AACzE,QAAM,UAAU,UAAU,SAAS,KAAK,KAAK;AAC7C,QAAM,YACJ;AAAA,IACE,UAAU,iBACR,UAAU,mBACV,UAAU,iBACV,UAAU;AAAA,EACd,KAAK;AACP,QAAM,eAAe,UAAU,cAAc,KAAK,KAAK;AACvD,QAAM,sBAAsB,QAAQ,kBAAkB,kBAAkB;AACxE,QAAM,0BACJ,kBAAkB,wBACd,sBAAsB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,OAAO,KAAK,KAAK;AAAA,IACxB;AAAA,EACF,CAAC,IACD;AACN,MACE,4BAA4B,QAC5B,4BAA4B,QAC5B;AACA,WACE,gBAAAC,MAAC,aAAQ,WAAU,gBACjB;AAAA,sBAAAD,KAAC,QAAG,WAAU,wDACX,eAAK,EAAE,wBAAwB,GAClC;AAAA,MACC;AAAA,OACH;AAAA,EAEJ;AAEA,QAAM,cACJ,kBAAkB,WAAW,UAAU,SAAS;AAClD,QAAM,UACJ,gBAAAC,MAAC,SAAI,WAAU,kCACb;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,eAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,UACA,sBACI,yCACA;AAAA,QACN;AAAA,QAEA,0BAAAA,KAAC,qBAAkB,MAAM,IAAI;AAAA;AAAA,IAC/B;AAAA,IACA,gBAAAC,MAAC,SAAI,WAAU,kBACb;AAAA,sBAAAA,MAAC,SAAI,WAAU,6CACb;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,cACT;AAAA,cACA,iBAAiB,cAAc;AAAA,YACjC;AAAA,YAEC;AAAA;AAAA,QACH;AAAA,QACA,gBAAAA,KAAC,SAAM,SAAS,+BAA+B,UAAU,MAAM,GAC5D,uBACH;AAAA,SACF;AAAA,MACC,WAAW,iBACV,gBAAAA,KAAC,OAAE,WAAU,gGACV,mBACH,IACE;AAAA,MACH,YACC,gBAAAA,KAAC,OAAE,WAAU,sEACV,qBACH,IACE;AAAA,MACH,eACC,gBAAAA,KAAC,OAAE,WAAU,8FACV,wBACH,IACE;AAAA,OACN;AAAA,KACF;AAEF,QAAM,gBAAgB;AAAA,IACpB;AAAA,IACA,sBACI,yLACA;AAAA,EACN;AAEA,SACE,gBAAAC,MAAC,aAAQ,WAAU,gBACjB;AAAA,oBAAAD,KAAC,QAAG,WAAU,wDACX,eAAK,EAAE,wBAAwB,GAClC;AAAA,IACC,sBACC,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,cAAY,KAAK,EAAE,0BAA0B;AAAA,QAC7C,WAAW;AAAA,QACX,OAAO,KAAK,EAAE,0BAA0B;AAAA,QACxC,MAAK;AAAA,QACL,SAAS,MAAM;AACb,eAAK,qBAAqB,SAAS;AAAA,QACrC;AAAA,QAEC;AAAA;AAAA,IACH,IAEA,gBAAAA,KAAC,SAAI,WAAW,eAAgB,mBAAQ;AAAA,KAE5C;AAEJ;AAEO,SAAS,0BAA0B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AACF,GAIgB;AACd,SACE,gBAAAC,MAAC,aAAQ,WAAU,gBACjB;AAAA,oBAAAD,KAAC,QAAG,WAAU,wDACX,eAAK,EAAE,yBAAyB,GACnC;AAAA,IACC,QAAQ,WAAW,IAClB,gBAAAA,KAAC,OAAE,WAAU,kEACV,eAAK,EAAE,6BAA6B,GACvC,IAEA,gBAAAA,KAAC,SAAI,WAAU,+EACZ,kBAAQ,IAAI,CAAC,WACZ,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QAEV,MAAK;AAAA,QACL,SAAS,MAAM;AACb,eAAK,OAAO;AAAA,YACV,aAAa,OAAO;AAAA,YACpB,MAAM;AAAA,YACN,MAAM,OAAO;AAAA,UACf,CAAC;AAAA,QACH;AAAA,QAEA;AAAA,0BAAAA,MAAC,UAAK,WAAU,kBACd;AAAA,4BAAAD,KAAC,UAAK,WAAU,uEACb,iBAAO,aACV;AAAA,YACA,gBAAAA,KAAC,UAAK,WAAU,4EACb,iBAAO,MACV;AAAA,aACF;AAAA,UACA,gBAAAA,KAAC,UAAK,WAAU,iEACb,sCAA4B,OAAO,aAAa,KAAK,IACxD;AAAA;AAAA;AAAA,MApBK,OAAO;AAAA,IAqBd,CACD,GACH;AAAA,KAEJ;AAEJ;AAEO,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMgB;AACd,SACE,gBAAAC,MAAC,aAAQ,WAAU,gBACjB;AAAA,oBAAAA,MAAC,SAAI,WAAU,2CACb;AAAA,sBAAAD,KAAC,QAAG,WAAU,wDACX,eAAK,EAAE,iBAAiB,GAC3B;AAAA,MACA,gBAAAC,MAACC,SAAA,EAAO,MAAK,UAAS,MAAK,UAAS,SAAQ,SAAQ,SAAS,UAC3D;AAAA,wBAAAF,KAACG,iBAAA,EAAe,MAAM,IAAI;AAAA,QACzB,KAAK,EAAE,aAAa;AAAA,SACvB;AAAA,OACF;AAAA,IACC,MAAM,WAAW,IAChB,gBAAAH,KAAC,OAAE,WAAU,kEACV,eAAK,EAAE,6BAA6B,GACvC,IAEA,gBAAAA,KAAC,SAAI,WAAU,2EACZ,gBAAM,IAAI,CAAC,SACV,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA,mBAAmB,KAAK,SACpB,4BACA;AAAA,QACN;AAAA,QAEA,MAAK;AAAA,QACL,SAAS,MAAM,aAAa,KAAK,MAAM;AAAA,QAEvC;AAAA,0BAAAA,MAAC,SAAI,WAAU,kBACb;AAAA,4BAAAA,MAAC,SAAI,WAAU,qCACb;AAAA,8BAAAD,KAAC,4BAAyB,OAAO,KAAK,OACpC,0BAAAA,KAAC,UAAK,WAAU,iEACb,eAAK,OACR,GACF;AAAA,cACA,gBAAAA,KAAC,SAAM,SAAS,+BAA+B,KAAK,MAAM,GACvD,yCAA+B,MAAM,KAAK,MAAM,GACnD;AAAA,eACF;AAAA,YACA,gBAAAA,KAAC,OAAE,WAAU,wFACV;AAAA,cACC,KAAK;AAAA,cACL,KAAK,EAAE,2BAA2B;AAAA,YACpC,GACF;AAAA,aACF;AAAA,UACA,gBAAAA,KAAC,UAAK,WAAU,iEACb;AAAA,YACC,KAAK,iBAAiB,KAAK;AAAA,UAC7B,KAAK,IACP;AAAA;AAAA;AAAA,MA1BK,KAAK;AAAA,IA2BZ,CACD,GACH;AAAA,KAEJ;AAEJ;;;AIzVA,SAAS,aAAAI,YAAW,QAAQ,YAAAC,iBAA0B;AACtD,SAAS,+BAA+B;AACxC,SAAS,MAAAC,WAAU;AA+Db,SACE,OAAAC,MADF,QAAAC,aAAA;AA1DC,SAAS,+BAA+B;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EACA,UAAU;AACZ,GAOgB;AACd,QAAM,aAAa,OAA8B,IAAI;AACrD,QAAM,CAAC,eAAe,gBAAgB,IAAIC,UAAS,KAAK;AACxD,QAAM,oBAAoB,6BAA6B,OAAO,EAAE,KAAK;AACrE,QAAM,iBACJ,gDAAgD,iBAAiB;AAEnE,EAAAC,WAAU,MAAM;AACd,QAAI,YAAY,SAAS;AACvB,uBAAiB,KAAK;AACtB;AAAA,IACF;AACA,QAAI,CAAC,gBAAgB;AACnB,uBAAiB,KAAK;AACtB;AAAA,IACF;AAEA,UAAM,iBAAiB,WAAW;AAClC,QAAI,CAAC,gBAAgB;AACnB;AAAA,IACF;AAEA,UAAM,UAAU,MAAM;AACpB;AAAA,QACE,eAAe,eAAe,eAAe,eAAe;AAAA,MAC9D;AAAA,IACF;AAEA,YAAQ;AACR,QAAI,OAAO,mBAAmB,aAAa;AACzC;AAAA,IACF;AAEA,UAAM,WAAW,IAAI,eAAe,MAAM;AACxC,cAAQ;AAAA,IACV,CAAC;AACD,aAAS,QAAQ,cAAc;AAC/B,WAAO,MAAM;AACX,eAAS,WAAW;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,gBAAgB,OAAO,CAAC;AAE5B,MAAI,YAAY,SAAS;AACvB,WACE,gBAAAF,MAAC,aAAQ,WAAU,cACjB;AAAA,sBAAAD,KAAC,UAAK,WAAU,kEACb,iBACH;AAAA,MACC,iBACC,gBAAAA,KAAC,SAAI,WAAU,4EACb,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,SAAS;AAAA,UACT;AAAA;AAAA,MACF,GACF,IAEA,gBAAAA,KAAC,OAAE,WAAU,kEACV,sBACH;AAAA,OAEJ;AAAA,EAEJ;AAEA,SACE,gBAAAC,MAAC,aAAQ,WAAU,cACjB;AAAA,oBAAAD,KAAC,UAAK,WAAU,kEACb,iBACH;AAAA,IACA,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACC,WAAWG;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QAEA;AAAA,0BAAAJ;AAAA,YAAC;AAAA;AAAA,cACC,WAAWI;AAAA,gBACT;AAAA,gBACA,iBAAiB;AAAA,cACnB;AAAA,cACA,KAAK;AAAA,cAEJ,2BACC,gBAAAJ;AAAA,gBAAC;AAAA;AAAA,kBACC,SAAS;AAAA,kBACT;AAAA;AAAA,cACF,IAEA,gBAAAA,KAAC,OAAE,WAAU,4CACV,sBACH;AAAA;AAAA,UAEJ;AAAA,UACC,gBACC,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO;AAAA,gBACL,YACE;AAAA,cACJ;AAAA;AAAA,UACF,IACE;AAAA;AAAA;AAAA,IACN;AAAA,KACF;AAEJ;AAEA,SAAS,+BAA+B;AAAA,EACtC;AAAA,EACA;AACF,GAGgB;AACd,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,MACP,0BACE,SACI,CAAC,cACC,OAAO;AAAA,QACL,aAAa,UAAU;AAAA,QACvB,MAAM,UAAU;AAAA,QAChB,MAAM,UAAU;AAAA,MAClB,CAAC,IACH;AAAA;AAAA,EAER;AAEJ;;;ACtJA,SAAS,aAAAK,YAAW,WAAAC,UAAS,UAAAC,SAAQ,YAAAC,iBAA0B;AAC/D,SAAS,wBAAwB;AACjC,SAAS,UAAAC,SAAQ,UAAU,MAAAC,WAAU;AA8EzB,SASE,OAAAC,MATF,QAAAC,aAAA;AAxEZ,IAAM,4CACJ;AAEF,IAAM,+CACJ;AAEK,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOgB;AACd,QAAM,YAAYN;AAAA,IAChB,MAAM,WAAW,2BAA2B,OAAO;AAAA,IACnD,CAAC,YAAY,OAAO;AAAA,EACtB;AACA,QAAM,sBAAsB,WAAW;AACvC,QAAM,CAAC,aAAa,cAAc,IAAIE,UAAS,CAAC;AAChD,QAAM,mBAAmBD,QAAO,KAAK;AACrC,QAAM,wBAAwBA,QAAO,KAAK;AAE1C,EAAAF,WAAU,MAAM;AACd,UAAM,oBACJ,WAAW,iBAAiB,SAAS,YACrC,WAAW,gBAAgB,eAAe;AAC5C,QACE,sBAAsB,WACtB,CAAC,qBACD,UAAU,iBAAiB,SAC3B;AACA,qBAAe,CAAC,YAAY,UAAU,CAAC;AAAA,IACzC;AACA,0BAAsB,UAAU;AAChC,qBAAiB,UAAU;AAAA,EAC7B,GAAG,CAAC,WAAW,iBAAiB,SAAS,KAAK,CAAC;AAE/C,SACE,gBAAAM;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB;AAAA,MACA,eAAe;AAAA,QACb,cAAc,WAAW,KAAK,EAAE,oBAAoB;AAAA,QACpD,gBAAgB,WAAW,KAAK,EAAE,sBAAsB;AAAA,QACxD,4BAA4B,WAAW,KAAK,EAAE,yBAAyB;AAAA,MACzE;AAAA,MACA,mBAAmBD;AAAA,QACjB;AAAA,QACA;AAAA,QACA,uBAAuB;AAAA,MACzB;AAAA,MACA,sBAAsBA;AAAA,QACpB;AAAA,QACA;AAAA,QACA,uBAAuB;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SACE,sBACE,gBAAAC,KAAC,SAAI,WAAU,6DACb,0BAAAC;AAAA,QAACH;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,SAAS,MAAM;AACb,iBAAK,WAAW,iBAAiB,OAAO;AAAA,UAC1C;AAAA,UAEA;AAAA,4BAAAE,KAAC,YAAS,MAAM,IAAI;AAAA,YACnB,WAAW,KAAK,EAAE,iCAAiC;AAAA;AAAA;AAAA,MACtD,GACF,IACE;AAAA;AAAA,EAER;AAEJ;;;ACjGA,SAAS,6BAA6B;AACtC,SAAS,iBAAiB,UAAAE,eAAwB;AAClD,SAAS,aAAa;AAgDlB,gBAAAC,YAAA;AA9CG,SAAS,4BAA4B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AACF,GAIgB;AACd,QAAM,WAAWD,QAAgC,IAAI;AACrD,QAAM,sBAAsBA,QAIlB,IAAI;AACd,QAAM,aAAa,sBAAsB,EAAE,UAAU,UAAU,MAAM,CAAC;AAEtE,kBAAgB,MAAM;AACpB,UAAM,QAAQ,SAAS;AACvB,UAAM,YAAY,oBAAoB;AACtC,QAAI,CAAC,SAAS,CAAC,aAAa,SAAS,kBAAkB,OAAO;AAC5D;AAAA,IACF;AACA,wBAAoB,UAAU;AAC9B,UAAM,cAAc,MAAM,MAAM;AAChC,UAAM;AAAA,MACJ,KAAK,IAAI,UAAU,OAAO,WAAW;AAAA,MACrC,KAAK,IAAI,UAAU,KAAK,WAAW;AAAA,MACnC,UAAU;AAAA,IACZ;AAAA,EACF,GAAG,CAAC,WAAW,OAAO,KAAK,CAAC;AAE5B,QAAM,oBAAoB,CAAC,UAA4B;AACrD,UAAM,QAAQ,MAAM;AACpB,UAAM,MAAM,MAAM;AAClB,QAAI,UAAU,QAAQ,QAAQ,MAAM;AAClC;AAAA,IACF;AACA,wBAAoB,UAAU;AAAA,MAC5B,WAAW,MAAM,sBAAsB;AAAA,MACvC;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA,SAAQ;AAAA,MACR,OAAO,WAAW;AAAA,MAClB,QAAQ,WAAW;AAAA,MACnB,UAAU,CAAC,UAAU;AACnB,0BAAkB,MAAM,aAAa;AACrC,mBAAW,SAAS,KAAK;AAAA,MAC3B;AAAA,MACA,kBAAkB,CAAC,UAAU;AAC3B,0BAAkB,MAAM,aAAa;AACrC,mBAAW,iBAAiB,KAAK;AAAA,MACnC;AAAA,MACA,oBAAoB,WAAW;AAAA;AAAA,EACjC;AAEJ;;;ACnEO,IAAM,oCACX;AAEK,IAAM,0CACX;AAEK,IAAM,0CACX;AAEK,IAAM,0CACX;AAKK,IAAM,0CACX;;;AToEc,gBAAAC,MAOA,QAAAC,aAPA;AAhDT,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKgB;AACd,QAAM,OAAO,WAAW;AACxB,QAAM,sBAAsB,WAAW,WAAW,MAAM,KAAK,EAAE,WAAW;AAC1E,QAAM,kBAAkB,WAAW,oBAAoB;AACvD,QAAM,iBAAiB,WAAW,oBAAoB;AACtD,QAAM,eAAe,eAAe,WAAW;AAC/C,QAAM,QAAQ,WAAW,YAAY,OAAO,SAAS,CAAC;AACtD,QAAM,iBAAiB,WAAW,UAAU;AAC5C,QAAM,eAAe,kBACf,WAAW,WAAW,OAAO,MAAM,WAAW,iBAC5C,WAAW,WAAW,MAAM,OAC5B,MAAM,KAAK,CAAC,SAAS,KAAK,WAAW,cAAc,MAAM,OAC7D;AACJ,QAAM,YAAY,eACb,WAAW,WAAW,OAAO,aAC9B,WAAW,WAAW,OAAO,WAAW,CAAC,KACzC,OACC,WAAW,YAAY,OAAO,aAC/B,WAAW,YAAY,OAAO,WAAW,CAAC,KAC1C;AACJ,QAAM,gBAAgB,eACjB,WAAW,WAAW,OAAO,iBAAiB,CAAC,IAC/C,WAAW,YAAY,OAAO,iBAAiB,CAAC;AACrD,QAAM,CAAC,kBAAkB,mBAAmB,IAAIC,UAAS,KAAK;AAC9D,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAS,KAAK;AAElD,MAAI,mBAAmB,gBAAgB;AACrC,WACE,gBAAAD,MAAC,SAAI,WAAU,gDACb;AAAA,sBAAAD;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,eAAc;AAAA,UACd,WAAU;AAAA,UAEV,0BAAAH,KAAC,SAAI,WAAU,iDACb,0BAAAC,MAAC,SAAI,WAAU,sCACb;AAAA,4BAAAD;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW,GAAG,iCAAiC,IAAI,uCAAuC;AAAA,gBAE1F,0BAAAA,KAAC,QAAG,WAAU,2EACX,4BACG,KAAK,EAAE,qBAAqB,IAC5B,KAAK,EAAE,mBAAmB,GAChC;AAAA;AAAA,YACF;AAAA,YACA,gBAAAC,MAAC,SAAI,WAAU,sCACb;AAAA,8BAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW,6FAA6F,iCAAiC,IAAI,uCAAuC;AAAA,kBAEpL;AAAA,oCAAAD,KAAC,UAAK,WAAU,aAAa,eAAK,EAAE,cAAc,GAAE;AAAA,oBACpD,gBAAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,aAAa,KAAK,EAAE,gCAAgC;AAAA,wBACpD,OAAO,WAAW,WAAW;AAAA,wBAC7B,UAAU,WAAW;AAAA;AAAA,oBACvB;AAAA;AAAA;AAAA,cACF;AAAA,cACA,gBAAAC;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW,qGAAqG,iCAAiC,IAAI,uCAAuC;AAAA,kBAE5L;AAAA,oCAAAD,KAAC,UAAK,WAAU,aAAa,eAAK,EAAE,gBAAgB,GAAE;AAAA,oBACtD,gBAAAA;AAAA,sBAAC;AAAA;AAAA,wBACC;AAAA,wBACA,SAAQ;AAAA,wBACR,mBAAkB;AAAA,wBAClB,aAAa,KAAK,EAAE,kCAAkC;AAAA,wBACtD,OAAO,WAAW,WAAW;AAAA,wBAC7B,UAAU,WAAW;AAAA;AAAA,oBACvB;AAAA;AAAA;AAAA,cACF;AAAA,eACF;AAAA,aACF,GACF;AAAA;AAAA,MACF;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,+CAA+C,uCAAuC;AAAA,UAEjG,0BAAAC,MAAC,SAAI,WAAU,uCACb;AAAA,4BAAAD;AAAA,cAACI;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,SAAS;AAAA,gBAER,eAAK,EAAE,gBAAgB;AAAA;AAAA,YAC1B;AAAA,YACA,gBAAAJ;AAAA,cAACI;AAAA,cAAA;AAAA,gBACC,UAAU;AAAA,gBACV,MAAK;AAAA,gBACL,MAAK;AAAA,gBACL,SAAS,MAAM,KAAK,WAAW,UAAU;AAAA,gBAExC,eAAK,EAAE,mBAAmB;AAAA;AAAA,YAC7B;AAAA,aACF;AAAA;AAAA,MACF;AAAA,OACF;AAAA,EAEJ;AAEA,MAAI,CAAC,eAAe;AAClB,WAAO,gBAAAJ,KAAC,SAAI,WAAU,kBAAiB;AAAA,EACzC;AAEA,SACE,gBAAAA,KAAC,SAAI,WAAU,gDACb,0BAAAA;AAAA,IAACG;AAAA,IAAA;AAAA,MACC,eAAc;AAAA,MACd,WAAU;AAAA,MAEV,0BAAAH,KAAC,SAAI,WAAU,aACZ,qBAAW,YAAY,aACxB,WAAW,YAAY,UAAU,OAC/B,gBAAAA,KAAC,gCAA6B,IAE9B,gBAAAC,MAAC,SAAI,WAAU,sCACb;AAAA,wBAAAA,MAAC,YAAO,WAAU,cAChB;AAAA,0BAAAA,MAAC,SAAI,WAAU,2CACb;AAAA,4BAAAD,KAAC,4BAAyB,OAAO,cAAc,OAC7C,0BAAAA,KAAC,QAAG,WAAU,yIACX,wBAAc,OACjB,GACF;AAAA,YACA,gBAAAC,MAAC,SAAI,WAAU,oCACb;AAAA,8BAAAD;AAAA,gBAACI;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,SAAS,MAAM,WAAW,mBAAmB,MAAM;AAAA,kBAElD,eAAK,EAAE,cAAc;AAAA;AAAA,cACxB;AAAA,cACA,gBAAAJ;AAAA,gBAACI;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,SAAS,MAAM,oBAAoB,IAAI;AAAA,kBAEtC,eAAK,EAAE,gBAAgB;AAAA;AAAA,cAC1B;AAAA,eACF;AAAA,aACF;AAAA,UACA,gBAAAH,MAAC,SAAI,WAAU,kHACb;AAAA,4BAAAD;AAAA,cAACK;AAAA,cAAA;AAAA,gBACC,SAAS;AAAA,kBACP,cAAc;AAAA,gBAChB;AAAA,gBAEC,yCAA+B,MAAM,cAAc,MAAM;AAAA;AAAA,YAC5D;AAAA,YACA,gBAAAL;AAAA,cAAC;AAAA;AAAA,gBACC,eAAY;AAAA,gBACZ,WAAU;AAAA;AAAA,YACZ;AAAA,YACA,gBAAAC,MAAC,UAAK,WAAU,yCACb;AAAA,mBAAK,EAAE,gBAAgB;AAAA,cAAG;AAAA,cAC1B,gCAAgC,aAAa;AAAA,eAChD;AAAA,YACA,gBAAAD;AAAA,cAAC;AAAA;AAAA,gBACC,eAAY;AAAA,gBACZ,WAAU;AAAA;AAAA,YACZ;AAAA,YACA,gBAAAC,MAAC,UAAK,WAAU,yCACb;AAAA,mBAAK,EAAE,kBAAkB;AAAA,cAAG;AAAA,cAC5B,4BAA4B,cAAc,aAAa,KACtD;AAAA,eACJ;AAAA,aACF;AAAA,WACF;AAAA,QACA,gBAAAD;AAAA,UAAC;AAAA;AAAA,YACC,aAAa,KAAK,EAAE,gBAAgB;AAAA,YACpC,aAAa;AAAA,YACb,cAAc,KAAK,EAAE,gBAAgB;AAAA,YACrC,aAAa,cAAc;AAAA,YAC3B,MAAM;AAAA,YACN,OAAO,KAAK,EAAE,2BAA2B;AAAA,YACzC,MAAK;AAAA,YACL,WAAW,MAAM;AACf,4BAAc,IAAI;AAClB,mBAAK,WACF,YAAY,EAAE,kBAAkB,KAAK,CAAC,EACtC,QAAQ,MAAM;AACb,8BAAc,KAAK;AACnB,oCAAoB,KAAK;AAAA,cAC3B,CAAC;AAAA,YACL;AAAA,YACA,cAAc;AAAA;AAAA,QAChB;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,SAAS;AAAA,YACT,YAAY,KAAK,EAAE,4BAA4B;AAAA,YAC/C,OAAO,KAAK,EAAE,oBAAoB;AAAA,YAClC,QAAQ,WAAW;AAAA,YACnB,SAAQ;AAAA;AAAA,QACV;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA,oBACE,WAAW,uBACP,WAAW,mBACX;AAAA,YAEN;AAAA,YACA,OAAO,cAAc,SAAS,cAAc;AAAA;AAAA,QAC9C;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,SAAS;AAAA,YACT,QAAQ,WAAW;AAAA;AAAA,QACrB;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,UAAU,WAAW;AAAA,YACrB,cAAc,WAAW;AAAA,YACzB,gBAAgB,cAAc,UAAU;AAAA,YACxC;AAAA;AAAA,QACF;AAAA,SACF,GAEJ;AAAA;AAAA,EACF,GACF;AAEJ;;;AU1QA,SAAS,UAAAM,SAAQ,MAAAC,WAAU;;;ACA3B;AAAA,EACE,SAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,UAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAAC;AAAA,OACK;AACP,SAAS,kCAAkC;AAmC/B,SAqID,UArIC,OAAAC,MA6DJ,QAAAC,aA7DI;AArBZ,IAAM,4BACJ;AACF,IAAM,iCACJ;AACF,IAAM,iCAAiC;AAEhC,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,iBAAiB;AACnB,GAKgB;AACd,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,MAAM,gBAAAA,KAACE,oBAAA,EAAkB,MAAM,IAAI;AAAA,MACnC,OAAO,WAAW,KAAK,EAAE,uBAAuB;AAAA,MAChD;AAAA,MACA;AAAA,MACA,kBAAkB,CAAC,aAAa,WAAW,QAAQ,QAAQ;AAAA;AAAA,EAC7D;AAEJ;AAEO,SAAS,mCAAmC;AAAA,EACjD;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,iBAAiB;AACnB,GAKgB;AACd,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,MAAM,gBAAAA,KAAC,aAAU,MAAM,IAAI;AAAA,MAC3B,OAAO,WAAW,KAAK,EAAE,6BAA6B;AAAA,MACtD;AAAA,MACA;AAAA,MACA,sBAAqB;AAAA,MACrB,kBAAkB,CAAC,aAAa,WAAW,mBAAmB,QAAQ;AAAA;AAAA,EACxE;AAEJ;AAIA,SAAS,+BAA+B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GASgB;AACd,QAAM,kBAAkB,WAAW;AACnC,QAAM,mBAAmB,WAAW,UAAU,sBAAsB,KAAK;AAEzE,SACE,gBAAAC,MAAC,gBACC;AAAA,oBAAAD,KAAC,uBAAoB,SAAO,MAAC,UAC3B,0BAAAC;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,WAAWC;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,QACA,MAAM,mBAAmB,WAAW,WAAW;AAAA,QAC/C,MAAK;AAAA,QACL,SAAS;AAAA,QAER;AAAA;AAAA,UACD,gBAAAJ,KAAC,UAAK,WAAU,YAAY,iBAAM;AAAA,UAClC,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,uCAAoC;AAAA,cACpC,MAAM;AAAA;AAAA,UACR;AAAA;AAAA;AAAA,IACF,GACF;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAM;AAAA,QACN,WAAU;AAAA,QACV,OAAO,EAAE,QAAQ,yBAAyB;AAAA,QAEzC,0BAAgB,WAAW,IAC1B,gBAAAA,KAAC,oBAAiB,WAAW,2BAA2B,UAAQ,MAC7D,qBAAW,KAAK,EAAE,2BAA2B,GAChD,IAEA,gBAAgB,IAAI,CAAC,WACnB,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,YACX,UAAU,OAAO,aAAa;AAAA,YAE9B,OAAO,OAAO;AAAA,YACd,UAAU,MAAM;AACd,mBAAK,iBAAiB,OAAO,QAAQ;AAAA,YACvC;AAAA,YAEA,0BAAAC,MAAC,UAAK,WAAU,+CACd;AAAA,8BAAAD;AAAA,gBAAC;AAAA;AAAA,kBACC,cAAc,gBAAAA,KAACE,oBAAA,EAAkB,eAAW,MAAC,MAAM,IAAI;AAAA,kBACvD,SAAS,OAAO;AAAA;AAAA,cAClB;AAAA,cACA,gBAAAF,KAAC,UAAK,WAAU,2BAA2B,iBAAO,OAAM;AAAA,cACvD,OAAO,aAAa,mBACnB,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAW;AAAA,kBACX,MAAM;AAAA;AAAA,cACR,IACE;AAAA,eACN;AAAA;AAAA,UAlBK,OAAO;AAAA,QAmBd,CACD;AAAA;AAAA,IAEL;AAAA,KACF;AAEJ;AAEA,SAAS,8BAA8B;AAAA,EACrC;AAAA,EACA;AACF,GAGgB;AACd,QAAM,oBAAoB,SAAS,KAAK;AAExC,MAAI,CAAC,mBAAmB;AACtB,WAAO,gBAAAA,KAAA,YAAG,wBAAa;AAAA,EACzB;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,eAAY;AAAA,MACZ,WAAU;AAAA,MACV,UAAS;AAAA,MACT,WAAW;AAAA,MACX,KAAK;AAAA;AAAA,EACP;AAEJ;AAEO,SAAS,sCAAsC;AAAA,EACpD;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAIuB;AACrB,MAAI,CAAC,WAAW,6BAA6B;AAC3C,WAAO;AAAA,EACT;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,YAAY;AAAA,QACV,SAAS;AAAA,QACT,MAAM;AAAA,QACN,SAASI;AAAA,UACP;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,cAAa;AAAA,MACb;AAAA,MACA,MAAM,WAAW;AAAA,MACjB,SAAS,WAAW;AAAA,MACpB,qBAAqB,WAAW,UAAU;AAAA,MAC1C,sBAAsB,WAAW,KAAK;AAAA,QACpC;AAAA,MACF;AAAA,MACA,qBAAqB,CAAC,SAAwB;AAC5C,aAAK,WAAW,sBAAsB,IAAI;AAAA,MAC5C;AAAA;AAAA,EACF;AAEJ;;;ACrNO,SAAS,uCAAuC,OAMnB;AAClC,QAAM,EAAE,YAAY,aAAa,IAAI;AACrC,QAAM,WAAW,WAAW,mBAAmB;AAC/C,QAAM,SAAS,WAAW,mBAAmB;AAC7C,QAAM,SAAS,CAAC,YAAY,CAAC;AAC7B,QAAM,mBAAmB,UAAU,iBAAiB;AACpD,QAAM,WACJ,WAAW,WAAW,aACtB,aAAa,SACb,WAAW,WAAW,UAAU,OAC5B,YACA,YAAY,SACV,SACA;AAER,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB,WAAW,UAAU,MAAM,KAAK,EAAE,WAAW;AAAA,IACjE,gBAAgB,YAAY;AAAA,IAC5B,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB;AAAA,IACA,OACE,YAAY,SACR,WACE,WAAW,KAAK,EAAE,oBAAoB,IACtC,WAAW,KAAK,EAAE,kBAAkB,IACtC,cAAc,SAAS,WAAW,KAAK,EAAE,oBAAoB;AAAA,EACrE;AACF;AAYO,SAAS,wBAAwB,OAG5B;AACV,SACE,MAAM,kBAAkB,QAAQ,MAAM,KAAK,uBAAuB;AAEtE;AAEO,SAAS,iCAAiC,OAIrC;AACV,MAAI,MAAM,aAAa,MAAM;AAC3B,WAAO;AAAA,EACT;AACA,UAAQ,MAAM,sBAAsB,MAAM,yBAAyB;AACrE;;;AF7CQ,gBAAAC,MAKA,QAAAC,aALA;AAzBD,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmD;AACjD,QAAM,OAAO,WAAW;AACxB,MAAI,CAAC,WAAW,CAAC,eAAe;AAC9B,WAAO;AAAA,EACT;AACA,QAAM,sBAAsB,iCAAiC;AAAA,IAC3D,qBAAqB,cAAc;AAAA,IACnC,oBAAoB;AAAA,EACtB,CAAC;AAED,SACE,gBAAAD,KAAC,SAAI,WAAU,4EACb,0BAAAC;AAAA,IAAC;AAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACA,iBACI,uCACA;AAAA,MACN;AAAA,MAEA;AAAA,wBAAAF;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV;AAAA,YACA,UAAU;AAAA;AAAA,QACZ;AAAA,QACA,gBAAAC,MAAC,SAAI,WAAU,4DACb;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,UAAU,CAAC;AAAA,cACX,gBAAe;AAAA;AAAA,UACjB;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,UAAU,CAAC,iBAAiB;AAAA,cAC5B,gBAAe;AAAA;AAAA,UACjB;AAAA,UACC,WAAW,yBACV,gBAAAA;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,UAAU,CAAC;AAAA,cACX,MAAK;AAAA,cACL,MAAK;AAAA,cACL,SAAS,MAAM;AACb,qBAAK,WAAW,eAAe;AAAA,cACjC;AAAA,cAEC,eAAK,EAAE,4BAA4B;AAAA;AAAA,UACtC,IACE;AAAA,WACN;AAAA;AAAA;AAAA,EACF,GACF;AAEJ;;;AG3EA,SAAS,eAAe,WAAW,kBAAkB;AAqB7C,gBAAAC,aAAA;AAlBD,SAAS,2BAA2B;AAAA,EACzC;AACF,GAEgB;AACd,QAAM,UAAU,OAAO,SAAS,gBAAgB,gBAAgB;AAEhE,SACE,gBAAAA,MAAC,iBACC,0BAAAA;AAAA,IAAC;AAAA;AAAA,MAEC,MAAI;AAAA,MACJ,QAAO;AAAA,MACP,MAAM,OAAO;AAAA,MACb,WAAU;AAAA,MACV,gBAAgB;AAAA,MAChB;AAAA,MAEA,0BAAAA,MAAC,cAAW,WAAU,8CACnB,iBAAO,OACV;AAAA;AAAA,IAVK,OAAO;AAAA,EAWd,GACF;AAEJ;;;AC3BA,SAAS,MAAAC,WAAU;;;ACAnB,SAAS,yBAAAC,8BAA6B;AACtC;AAAA,EACE,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA;AAAA,EACA,kBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,cAAAC;AAAA,EACA;AAAA,EACA,MAAAC;AAAA,OACK;;;ACHA,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAqBO,SAAS,oCAAoC,OAGnB;AAC/B,MACE,MAAM,OAAO,aACb,MAAM,OAAO,MAAM,WAAW,KAC9B,MAAM,OAAO,gBAAgB,MAC7B;AACA,WAAO;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF;AAEA,MAAI,MAAM,OAAO,OAAO;AACtB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,YAAY,MAAM,KAAK,EAAE,iBAAiB;AAAA,MAC1C,OAAO,MAAM,KAAK,EAAE,6BAA6B;AAAA,IACnD;AAAA,EACF;AAEA,MAAI,MAAM,OAAO,MAAM,WAAW,GAAG;AACnC,WAAO;AAAA,MACL,MAAM,MAAM,KAAK,EAAE,gCAAgC;AAAA,MACnD,MAAM;AAAA,MACN,OAAO,MAAM,KAAK,EAAE,iCAAiC;AAAA,IACvD;AAAA,EACF;AAEA,SAAO;AAAA,IACL,QAAQ,MAAM,OAAO;AAAA,IACrB,MAAM;AAAA,EACR;AACF;AAEO,SAAS,8BACd,QAC4D;AAC5D,QAAM,SAAqE;AAAA,IACzE,KAAK,OAAO;AAAA,IACZ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,SAAS;AAAA,EACX;AAEA,aAAW,SAAS,QAAQ;AAC1B,QAAI,MAAM,UAAU,QAAQ;AAC1B,aAAO,MAAM,MAA6B,KAAK;AAAA,IACjD;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,gCACd,OAC4D;AAC5D,SAAO,MAAM,eACT,4BAA4B,MAAM,YAAY,IAC9C,8BAA8B,MAAM,KAAK;AAC/C;AAEA,SAAS,4BACP,QAC4D;AAC5D,SAAO;AAAA,IACL,KAAK,OAAO;AAAA,IACZ,UAAU,OAAO;AAAA,IACjB,WAAW,OAAO;AAAA,IAClB,QAAQ,OAAO;AAAA,IACf,aAAa;AAAA,IACb,aAAa,OAAO;AAAA,IACpB,oBAAoB,OAAO;AAAA,IAC3B,SAAS,OAAO;AAAA,EAClB;AACF;AASO,SAAS,yCAAyC,OAKnB;AACpC,QAAM,iBAAiB,MAAM,oBAAoB;AACjD,QAAM,iBAAiB,CAAC,kBAAkB,MAAM,mBAAmB;AACnE,QAAM,mBACJ,CAAC,kBACD,CAAC,mBACA,MAAM,mBAAmB,UAAU,MAAM;AAE5C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,eACE,MAAM,kBAAkB,QACxB,MAAM,oBAAoB,UAC1B,MAAM,mBAAmB;AAAA,EAC7B;AACF;;;AD1GQ,gBAAAC,OAOA,QAAAC,aAPA;AAhBD,SAAS,0BAA0B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMgB;AACd,SACE,gBAAAD,MAAC,SAAI,WAAU,aACb,0BAAAC,MAAC,SAAI,WAAU,6BACb;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,YAAY,KAAK,EAAE,qBAAqB;AAAA,QACxC,aAAa,KAAK,EAAE,qBAAqB;AAAA,QACzC,OAAO;AAAA,QACP,UAAU;AAAA,QACV,eAAe;AAAA;AAAA,IACjB;AAAA,IACA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QACL,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,SAAS;AAAA,QAET;AAAA,0BAAAF,MAACG,iBAAA,EAAe,MAAM,IAAI;AAAA,UACzB,KAAK,EAAE,qBAAqB;AAAA;AAAA;AAAA,IAC/B;AAAA,KACF,GACF;AAEJ;AAEO,SAAS,8BAA8B;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOgB;AACd,SACE,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,KAAK,EAAE,eAAe;AAAA,MACjC,WAAU;AAAA,MACV,iBAAiB,KAAK,EAAE,6BAA6B;AAAA,MACrD,kBAAkB,KAAK,EAAE,8BAA8B;AAAA,MACvD,MAAM,0BAA0B,IAAI,CAAC,YAAY;AAAA,QAC/C,OAAO,aAAa,MAAM,KAAK;AAAA,QAC/B,OACE,WAAW,QACP,KAAK,EAAE,kBAAkB,IACzB,+BAA+B,MAAM,MAAM;AAAA,QACjD,OAAO;AAAA,MACT,EAAE;AAAA,MACF,OAAO;AAAA,MACP,eAAe;AAAA;AAAA,EACjB;AAEJ;AAEO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOgB;AACd,SACE,gBAAAA;AAAA,IAACI;AAAA,IAAA;AAAA,MACC,eAAc;AAAA,MACd,WAAWC,IAAG,WAAW,iBAAiB,cAAc,eAAe;AAAA,MAEvE,0BAAAL;AAAA,QAAC;AAAA;AAAA,UACC,WAAWK;AAAA,YACT;AAAA,YACA,iBAAiB,YAAY;AAAA,UAC/B;AAAA,UAEC,2BAAiB,SAAS,YACzB,gBAAAL,MAAC,mCAAgC,gBAAgC,IAC/D,iBAAiB,SAAS,UAC5B,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,YAAY,iBAAiB;AAAA,cAC7B,OAAO,iBAAiB;AAAA,cACxB;AAAA;AAAA,UACF,IACE,iBAAiB,SAAS,UAC5B,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAM,iBAAiB;AAAA,cACvB;AAAA,cACA,OAAO,iBAAiB;AAAA;AAAA,UAC1B,IAEA,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA,QAAQ,iBAAiB;AAAA,cACzB;AAAA,cACA;AAAA;AAAA,UACF;AAAA;AAAA,MAEJ;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,kCAAkC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOgB;AACd,MAAI,SAAS,WAAW,YAAY;AAClC,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,QAAQ;AAAA,MACd;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,wBAAwB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMgB;AACd,QAAM,cAAcM,uBAAsB,EAAE,UAAU,UAAU,MAAM,CAAC;AAEvE,SACE,gBAAAL;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,kBAAgB,YAAY,QAAQ,SAAS;AAAA,MAE7C;AAAA,wBAAAD;AAAA,UAACO;AAAA,UAAA;AAAA,YACC,cAAY;AAAA,YACZ,WAAWF;AAAA,cACT;AAAA,cACA;AAAA,cACA,YAAY,QAAQ,SAAS;AAAA,YAC/B;AAAA,YACA;AAAA,YACA,MAAK;AAAA,YACL,OAAO,YAAY;AAAA,YACnB,QAAQ,CAAC,UAAU;AACjB,0BAAY,OAAO,KAAK;AACxB,4BAAc,MAAM,cAAc,KAAK;AAAA,YACzC;AAAA,YACA,UAAU,YAAY;AAAA,YACtB,kBAAkB,YAAY;AAAA,YAC9B,oBAAoB,YAAY;AAAA;AAAA,QAClC;AAAA,QACC,YAAY,QACX,gBAAAL;AAAA,UAAC;AAAA;AAAA,YACC,cAAY;AAAA,YACZ,WAAU;AAAA,YACV,MAAK;AAAA,YACL,SAAS,YAAY;AAAA,YACrB,aAAa,CAAC,UAAU,MAAM,eAAe;AAAA,YAE7C,0BAAAA,MAAC,aAAU,WAAU,YAAW;AAAA;AAAA,QAClC,IACE;AAAA;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,6BAA6B;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMgB;AACd,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAWK;AAAA,QACT;AAAA,QACA,iBACI,4HACA;AAAA,MACN;AAAA,MAEC,iBAAO,IAAI,CAAC,UACX,gBAAAL;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UAEA,UAAU,oBAAoB,MAAM;AAAA,UACpC,UAAU;AAAA;AAAA,QAFL,MAAM;AAAA,MAGb,CACD;AAAA;AAAA,EACH;AAEJ;AAEA,SAAS,wBAAwB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMgB;AACd,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,WAAWI;AAAA,QACT;AAAA,QACA,iBACI,0GACA;AAAA,QACJ,WACI,4DACA;AAAA,MACN;AAAA,MACA,MAAK;AAAA,MACL,SAAS,MAAM,SAAS,MAAM,OAAO;AAAA,MAErC;AAAA,wBAAAL;AAAA,UAACQ;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,SAAS,+BAA+B,MAAM,MAAM;AAAA,YAEnD,yCAA+B,MAAM,MAAM,MAAM;AAAA;AAAA,QACpD;AAAA,QACA,gBAAAP,MAAC,SAAI,WAAU,qBACb;AAAA,0BAAAD,MAAC,OAAE,WAAU,iEACV,iCAAuB,MAAM,iBAAiB,MAAM,aAAa,GACpE;AAAA,UACA,gBAAAA,MAAC,OAAE,WAAU,qFACV,gBAAM,OACT;AAAA,WACF;AAAA,QACA,gBAAAA,MAAC,SAAI,WAAU,gEACZ,eAAK,EAAE,oBAAoB,EAAE,OAAO,MAAM,aAAa,EAAE,CAAC,GAC7D;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,gCAAgC;AAAA,EACvC;AACF,GAEgB;AACd,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,eAAY;AAAA,MACZ,WAAWK;AAAA,QACT;AAAA,QACA,iBAAiB,gDAAgD;AAAA,MACnE;AAAA,MAEC,gBAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,UAC7B,gBAAAJ;AAAA,QAAC;AAAA;AAAA,UACC,WAAWI;AAAA,YACT;AAAA,YACA,kBACE;AAAA,UACJ;AAAA,UAGA;AAAA,4BAAAL,MAAC,SAAI,WAAU,0DAAyD;AAAA,YACxE,gBAAAA,MAAC,SAAI,WAAU,8DAA6D;AAAA,YAC5E,gBAAAA,MAAC,SAAI,WAAU,+DAA8D;AAAA;AAAA;AAAA,QAJxE;AAAA,MAKP,CACD;AAAA;AAAA,EACH;AAEJ;AAEA,SAAS,8BAA8B;AAAA,EACrC;AAAA,EACA;AAAA,EACA,OAAO;AACT,GAKgB;AACd,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAWK;AAAA,QACT;AAAA,QACA,iBACI,kDACA;AAAA,MACN;AAAA,MAEA,0BAAAL;AAAA,QAAC;AAAA;AAAA,UACC,WAAWK;AAAA,YACT;AAAA,YACA,SAAS,gBACL,+BACA;AAAA,UACN;AAAA,UAEC;AAAA;AAAA,MACH;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,8BAA8B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKgB;AACd,SACE,gBAAAJ;AAAA,IAAC;AAAA;AAAA,MACC,WAAWI;AAAA,QACT;AAAA,QACA,iBACI,kDACA;AAAA,MACN;AAAA,MAEA;AAAA,wBAAAL,MAAC,OAAE,WAAU,kEACV,iBACH;AAAA,QACA,gBAAAA;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,SAAS;AAAA,YAER;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EACF;AAEJ;;;AEtZO,SAAS,4CAA4C,OAGnB;AACvC,QAAM,EAAE,qBAAqB,iBAAiB,IAAI;AAElD,MAAI,CAAC,qBAAqB;AACxB,WAAO,EAAE,MAAM,OAAO;AAAA,EACxB;AAEA,MAAI,iBAAiB,SAAS,SAAS;AACrC,WAAO;AAAA,MACL,MAAM;AAAA,MACN,YAAY,iBAAiB;AAAA,MAC7B,OAAO,iBAAiB;AAAA,IAC1B;AAAA,EACF;AAEA,MAAI,iBAAiB,SAAS,SAAS;AACrC,WAAO;AAAA,MACL,MAAM,iBAAiB;AAAA,MACvB,MAAM;AAAA,MACN,OAAO,iBAAiB;AAAA,IAC1B;AAAA,EACF;AAEA,SAAO,EAAE,MAAM,OAAO;AACxB;;;AHPI,SAYE,OAAAO,OAZF,QAAAC,cAAA;AAfG,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0C;AACxC,QAAM,OAAO,WAAW;AACxB,QAAM,eAAe,4CAA4C;AAAA,IAC/D;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,eAAa,cAAc,SAAS;AAAA,MACpC,WAAWC;AAAA,QACT;AAAA,QACA,iBACI,sCACA;AAAA,QACJ,eACE;AAAA,MACJ;AAAA,MACA,OAAO,cAAc,OAAO;AAAA,MAE5B;AAAA,wBAAAF;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,kBAAkB,WAAW,UAAU;AAAA,YACvC,eAAe,MAAM,WAAW,mBAAmB,QAAQ;AAAA,YAC3D,oBAAoB,WAAW;AAAA,YAC/B,0BAA0B,WAAW;AAAA;AAAA,QACvC;AAAA,QAEA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,mBAAmB,WAAW,UAAU;AAAA,YACxC;AAAA,YACA,2BAA2B,WAAW;AAAA;AAAA,QACxC;AAAA,QAEA,gBAAAA,MAAC,SAAI,eAAY,QAAO,WAAU,mBAAkB;AAAA,QAEpD,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAWE;AAAA,cACT;AAAA,cACA,iBAAiB,cAAc;AAAA,YACjC;AAAA,YAEC,uBAAa,SAAS,SACrB,gBAAAF,MAAC,SAAI,WAAU,oEACb,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MACE,aAAa,SAAS,UAAU,aAAa,OAAO;AAAA,gBAEtD,gBAAgB;AAAA,gBAChB,MAAM,aAAa;AAAA,gBACnB,YACE,aAAa,SAAS,UAClB,aAAa,aACb;AAAA,gBAEN,OAAO,aAAa;AAAA,gBACpB,SAAS,MAAM,WAAW,WAAW;AAAA;AAAA,YACvC,GACF,IAEA,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA,iBAAiB,WAAW,UAAU;AAAA,gBACtC;AAAA,gBACA,SAAS,MAAM,WAAW,WAAW;AAAA,gBACrC,eAAe,WAAW;AAAA;AAAA,YAC5B;AAAA;AAAA,QAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;;;AIrGA,SAAS,UAAAG,eAAc;AAgCX,gBAAAC,OAKA,QAAAC,cALA;AAnBL,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACF,GAIgB;AACd,QAAM,OAAO,WAAW;AACxB,QAAM,qBAAqB,WAAW,UAAU,MAAM,KAAK,EAAE,WAAW;AAExE,SACE,gBAAAA,OAAC,SAAI,WAAU,gDACb;AAAA,oBAAAD,MAAC,SAAI,WAAU,qEACb,0BAAAC,OAAC,SAAI,WAAU,sCACb;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,GAAG,iCAAiC,IAAI,uCAAuC;AAAA,UAE1F,0BAAAA,MAAC,QAAG,WAAU,2EACX,eAAK,EAAE,oBAAoB,GAC9B;AAAA;AAAA,MACF;AAAA,MACA,gBAAAC,OAAC,SAAI,WAAU,sCACb;AAAA,wBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,6FAA6F,iCAAiC,IAAI,uCAAuC;AAAA,YAEpL;AAAA,8BAAAD,MAAC,UAAK,WAAU,aAAa,eAAK,EAAE,cAAc,GAAE;AAAA,cACpD,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,aAAa,KAAK,EAAE,kCAAkC;AAAA,kBACtD,OAAO,WAAW,UAAU;AAAA,kBAC5B,UAAU,WAAW;AAAA;AAAA,cACvB;AAAA;AAAA;AAAA,QACF;AAAA,QACA,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,qGAAqG,iCAAiC,IAAI,uCAAuC;AAAA,YAE5L;AAAA,8BAAAD,MAAC,UAAK,WAAU,aACb,eAAK,EAAE,+BAA+B,GACzC;AAAA,cACA,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC;AAAA,kBACA,SAAQ;AAAA,kBACR,mBAAkB;AAAA,kBAClB,aAAa,KAAK,EAAE,oCAAoC;AAAA,kBACxD,OAAO,WAAW,UAAU;AAAA,kBAC5B,UAAU,WAAW;AAAA;AAAA,cACvB;AAAA;AAAA;AAAA,QACF;AAAA,SACF;AAAA,OACF,GACF;AAAA,IAEA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,+CAA+C,uCAAuC;AAAA,QAEjG,0BAAAC,OAAC,SAAI,WAAU,uCACb;AAAA,0BAAAD;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,SAAS;AAAA,cAER,eAAK,EAAE,gBAAgB;AAAA;AAAA,UAC1B;AAAA,UACA,gBAAAF;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,UAAU,CAAC,iBAAiB;AAAA,cAC5B,MAAK;AAAA,cACL,MAAK;AAAA,cACL,SAAS,MAAM,KAAK,WAAW,SAAS;AAAA,cAEvC,eAAK,EAAE,qBAAqB;AAAA;AAAA,UAC/B;AAAA,WACF;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;;;AC1FA,SAAS,cAAAC,aAAY,MAAAC,WAAU;;;ACD/B,SAAS,YAAAC,iBAA0B;AACnC,SAAS,SAAAC,QAAO,UAAAC,SAAQ,sBAAAC,2BAA0B;AA6DpC,SAaA,YAAAC,WAbA,OAAAC,OAaA,QAAAC,cAbA;AAtBP,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACF,GAOgB;AACd,QAAM,OAAO,WAAW;AACxB,QAAM,CAAC,kBAAkB,mBAAmB,IAAIC,UAAS,KAAK;AAC9D,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAS,KAAK;AAElD,SACE,gBAAAD,OAAAF,WAAA,EACE;AAAA,oBAAAE,OAAC,SAAI,WAAU,wBACb;AAAA,sBAAAA,OAAC,SAAI,WAAU,2CACZ;AAAA,aAAK,oBAAoB,eACxB,gBAAAD,MAAC,4BAAyB,OAAO,KAAK,OACpC,0BAAAA,MAAC,QAAG,WAAU,yIACX,eAAK,OACR,GACF,IAEA,gBAAAA,MAAC,4BAAyB,OAAO,KAAK,OACpC,0BAAAA,MAAC,QAAG,WAAU,8IACX,eAAK,OACR,GACF;AAAA,QAEF,gBAAAA,MAAC,SAAI,WAAU,oCACZ,eAAK,mBAAmB,eACvB,gBAAAC,OAAAF,WAAA,EACE;AAAA,0BAAAC;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,SAAS,MAAM,WAAW,kBAAkB,MAAM;AAAA,cAEjD,eAAK,EAAE,cAAc;AAAA;AAAA,UACxB;AAAA,UACA,gBAAAH;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,SAAS,MAAM,oBAAoB,IAAI;AAAA,cAEtC,eAAK,EAAE,gBAAgB;AAAA;AAAA,UAC1B;AAAA,WACF,IACE,MACN;AAAA,SACF;AAAA,MACC,KAAK,oBAAoB,eACxB,gBAAAF,OAAC,SAAI,WAAU,cACb;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA;AAAA,QACF;AAAA,QACC,aAAa,WAAW,uBACvB,gBAAAA,MAAC,kCAA+B,YAAwB,IACtD;AAAA,SACN,IACE;AAAA,OACN;AAAA,IACC,eACC,gBAAAA;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,aAAa,KAAK,EAAE,gBAAgB;AAAA,QACpC,aAAa;AAAA,QACb,cAAc,KAAK,EAAE,gBAAgB;AAAA,QACrC,aACE,gBAAAJ,MAAC,UAAK,WAAU,+DACb,uBAAa,OAChB;AAAA,QAEF,MAAM;AAAA,QACN,OAAO,KAAK,EAAE,0BAA0B;AAAA,QACxC,MAAK;AAAA,QACL,WAAW,MAAM;AACf,wBAAc,IAAI;AAClB,eAAK,WACF,WAAW,EAAE,kBAAkB,KAAK,CAAC,EACrC,QAAQ,MAAM;AACb,0BAAc,KAAK;AACnB,gCAAoB,KAAK;AAAA,UAC3B,CAAC;AAAA,QACL;AAAA,QACA,cAAc;AAAA;AAAA,IAChB,IACE;AAAA,KACN;AAEJ;AAEA,SAAS,4BAA4B;AAAA,EACnC;AAAA,EACA;AACF,GAGgB;AACd,SACE,gBAAAC,OAAC,SAAI,WAAU,kHACb;AAAA,oBAAAD,MAACK,QAAA,EAAM,SAAS,+BAA+B,aAAa,MAAM,GAC/D,yCAA+B,MAAM,aAAa,MAAM,GAC3D;AAAA,IACA,gBAAAL;AAAA,MAAC;AAAA;AAAA,QACC,eAAY;AAAA,QACZ,WAAU;AAAA;AAAA,IACZ;AAAA,IACA,gBAAAC,OAAC,UAAK,WAAU,yCACb;AAAA,WAAK,EAAE,gBAAgB;AAAA,MAAE;AAAA,MAAE,wBAAwB,YAAY;AAAA,OAClE;AAAA,IACA,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,eAAY;AAAA,QACZ,WAAU;AAAA;AAAA,IACZ;AAAA,IACA,gBAAAC,OAAC,UAAK,WAAU,yCACb;AAAA,WAAK,EAAE,kBAAkB;AAAA,MAAG;AAAA,MAC5B,4BAA4B,aAAa,aAAa,KAAK;AAAA,OAC9D;AAAA,KACF;AAEJ;AAEA,SAAS,+BAA+B;AAAA,EACtC;AACF,GAEgB;AACd,QAAM,OAAO,WAAW;AAExB,SACE,gBAAAA,OAAC,SAAI,WAAU,kEACb;AAAA,oBAAAA,OAAC,SAAI,WAAU,wGACb;AAAA,sBAAAD,MAAC,UAAK,WAAU,4CACb,eAAK,EAAE,uBAAuB,GACjC;AAAA,MACA,gBAAAA,MAAC,UAAK,WAAU,oCAAmC,kBAAC;AAAA,MACpD,gBAAAA,MAAC,UAAM,eAAK,EAAE,6BAA6B,GAAE;AAAA,OAC/C;AAAA,IACA,gBAAAC,OAAC,SAAI,WAAU,uCACb;AAAA,sBAAAD;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,SAAS,MAAM,KAAK,WAAW,sBAAsB,aAAa;AAAA,UAEjE,eAAK,EAAE,oBAAoB;AAAA;AAAA,MAC9B;AAAA,MACA,gBAAAH;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,SAAS,MAAM,KAAK,WAAW,sBAAsB,WAAW;AAAA,UAE/D,eAAK,EAAE,oBAAoB;AAAA;AAAA,MAC9B;AAAA,OACF;AAAA,KACF;AAEJ;AAEO,SAAS,oCAAiD;AAC/D,SAAO,gBAAAH,MAAC,sCAAmC;AAC7C;AAEO,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAQgB;AACd,MAAI,KAAK,aAAa,WAAW;AAC/B,WAAO,gBAAAA,MAAC,qCAAkC;AAAA,EAC5C;AAEA,MAAI,KAAK,aAAa,QAAQ;AAC5B,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,OAAO,KAAK;AAAA;AAAA,IACd;AAAA,EAEJ;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,gBAAgB,KAAK;AAAA,MACrB;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;AAEO,SAAS,+BAA+B;AAAA,EAC7C;AAAA,EACA;AACF,GAGgB;AACd,QAAM,OAAO,WAAW;AAExB,SACE,gBAAAC,OAAC,SAAI,WAAU,sCACb;AAAA,oBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,iCAAiC,IAAI,uCAAuC;AAAA,QAE1F,0BAAAA,MAAC,QAAG,WAAU,2EACX,iBACH;AAAA;AAAA,IACF;AAAA,IACA,gBAAAC,OAAC,SAAI,WAAU,sCACb;AAAA,sBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,6FAA6F,iCAAiC,IAAI,uCAAuC;AAAA,UAEpL;AAAA,4BAAAD,MAAC,UAAK,WAAU,aAAa,eAAK,EAAE,cAAc,GAAE;AAAA,YACpD,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,aAAa,KAAK,EAAE,+BAA+B;AAAA,gBACnD,OAAO,WAAW,UAAU;AAAA,gBAC5B,UAAU,WAAW;AAAA;AAAA,YACvB;AAAA;AAAA;AAAA,MACF;AAAA,MACA,gBAAAC;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,qGAAqG,iCAAiC,IAAI,uCAAuC;AAAA,UAE5L;AAAA,4BAAAD,MAAC,UAAK,WAAU,aAAa,eAAK,EAAE,gBAAgB,GAAE;AAAA,YACtD,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA,SAAQ;AAAA,gBACR,mBAAkB;AAAA,gBAClB,aAAa,KAAK,EAAE,iCAAiC;AAAA,gBACrD,OAAO,WAAW,UAAU;AAAA,gBAC5B,UAAU,WAAW;AAAA;AAAA,YACvB;AAAA;AAAA;AAAA,MACF;AAAA,OACF;AAAA,KACF;AAEJ;AAEO,SAAS,+BAA+B;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKgB;AACd,QAAM,OAAO,WAAW;AACxB,QAAM,YACJ,WAAW,WAAW,OAAO,aAC7B,WAAW,WAAW,OAAO,WAAW,CAAC,KACzC;AACF,QAAM,gBAAgB,WAAW,WAAW,OAAO,iBAAiB,CAAC;AAErE,SACE,gBAAAC,OAAAF,WAAA,EACE;AAAA,oBAAAC;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,YAAY,KAAK,EAAE,2BAA2B;AAAA,QAC9C,OAAO,KAAK,EAAE,oBAAoB;AAAA,QAClC,QAAQ,WAAW;AAAA,QACnB,SAAQ;AAAA;AAAA,IACV;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,oBACE,WAAW,uBACP,WAAW,mBACX;AAAA,QAEN;AAAA,QACA,OAAO;AAAA;AAAA,IACT;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,SAAS;AAAA,QACT,QAAQ,WAAW;AAAA;AAAA,IACrB;AAAA,KACF;AAEJ;AAEO,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAYuB;AACrB,QAAM,OAAO,WAAW;AACxB,QAAM,sBAAsB,iCAAiC;AAAA,IAC3D,qBAAqB,eAAe;AAAA,IACpC,oBAAoB,cAAc;AAAA,EACpC,CAAC;AAED,MAAI,KAAK,kBAAkB,cAAc;AACvC,WACE,gBAAAA,MAAC,SAAI,WAAU,4EACb,0BAAAC,OAAC,SAAI,WAAU,uCACb;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV;AAAA,UACA,UAAU;AAAA;AAAA,MACZ;AAAA,MACA,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,UAAU;AAAA,UACV,gBAAe;AAAA;AAAA,MACjB;AAAA,MACC,WAAW,yBACV,gBAAAA;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,UAAU,CAAC;AAAA,UACX,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAS,MAAM;AACb,iBAAK,WAAW,eAAe;AAAA,UACjC;AAAA,UAEC,eAAK,EAAE,4BAA4B;AAAA;AAAA,MACtC,IACE;AAAA,OACN,GACF;AAAA,EAEJ;AAEA,MAAI,KAAK,gBAAgB;AACvB,WACE,gBAAAH;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,sCAAsC,uCAAuC;AAAA,QAExF,0BAAAC,OAAC,SAAI,WAAU,uCACb;AAAA,0BAAAD;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,SAAS,MAAM,WAAW,kBAAkB,MAAM;AAAA,cAEjD,eAAK,EAAE,gBAAgB;AAAA;AAAA,UAC1B;AAAA,UACA,gBAAAH;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,UACE,wBAAwB;AAAA,gBACtB;AAAA,gBACA;AAAA,cACF,CAAC,MAAM;AAAA,cAET,MAAK;AAAA,cACL,MAAK;AAAA,cACL,SAAS,MAAM,KAAK,WAAW,SAAS;AAAA,cAEvC,eAAK,EAAE,kBAAkB;AAAA;AAAA,UAC5B;AAAA,WACF;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SAAO;AACT;;;ADxXM,SAYI,OAAAG,OAZJ,QAAAC,cAAA;AArCC,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOgB;AACd,QAAM,OAAO,uCAAuC;AAAA,IAClD;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,cAAc,cAAc,WAAW;AAE7C,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,WAAWE;AAAA,QACT;AAAA,QACA,YACI,6HACA;AAAA,MACN;AAAA,MACA,SAAS;AAAA,MACT,aAAa,CAAC,UAAU;AACtB,cAAM,eAAe;AAAA,MACvB;AAAA,MACA,SAAS,CAAC,UAAU;AAClB,cAAM,eAAe;AAAA,MACvB;AAAA,MAEA,0BAAAD;AAAA,QAAC;AAAA;AAAA,UACC,WAAWC;AAAA,YACT;AAAA,YACA,YACI,0IACA;AAAA,UACN;AAAA,UACA,SAAS,CAAC,UAAU,MAAM,gBAAgB;AAAA,UAC1C,aAAa,CAAC,UAAU,MAAM,gBAAgB;AAAA,UAC9C,SAAS,CAAC,UAAU,MAAM,gBAAgB;AAAA,UAEzC;AAAA,iBAAK,aAAa,SAAS,OAC1B,gBAAAF;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,YACF;AAAA,YAGF,gBAAAA;AAAA,cAACG;AAAA,cAAA;AAAA,gBACC,eAAc;AAAA,gBACd,WAAU;AAAA,gBAEV,0BAAAH;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAWE;AAAA,sBACT;AAAA,sBACA,KAAK,aAAa,SACd,yBACA;AAAA,oBACN;AAAA,oBAEA,0BAAAF;AAAA,sBAAC;AAAA;AAAA,wBACC;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA;AAAA,oBACF;AAAA;AAAA,gBACF;AAAA;AAAA,YACF;AAAA,YAEA,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,YACF;AAAA;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;;;AErGA;AAAA,EACE,aAAAI;AAAA,EACA,kBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,OAIK;AAgCA,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACF,GAAkC;AAChC,QAAM,YAAYC,QAA8B,IAAI;AACpD,QAAM,YAAYA,QAAkC,IAAI;AACxD,QAAM,CAAC,cAAc,eAAe,IAAIC;AAAA,IACtC;AAAA,EACF;AACA,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAAS,KAAK;AAC1D,QAAM,sBAAsBC,gBAAe,MAAM;AAC/C,eAAW,oBAAoB;AAAA,EACjC,CAAC;AACD,QAAM,iBAAiB,WAAW;AAElC,EAAAC,WAAU,MAAM;AACd,UAAM,gBAAgB,MAAM;AAC1B,YAAM,QAAQ,UAAU,SAAS,sBAAsB,EAAE,SAAS;AAClE,UAAI,CAAC,OAAO;AACV;AAAA,MACF;AACA;AAAA,QAAgB,CAAC,YACf,8BAA8B,SAAS,KAAK;AAAA,MAC9C;AACA,wBAAkB,sCAAsC,KAAK,CAAC;AAAA,IAChE;AAEA,UAAM,SAAS,UAAU;AACzB,UAAM,WACJ,UAAU,OAAO,mBAAmB,cAChC,IAAI,eAAe,aAAa,IAChC;AACN,kBAAc;AACd,QAAI,YAAY,QAAQ;AACtB,eAAS,QAAQ,MAAM;AAAA,IACzB;AACA,WAAO,iBAAiB,UAAU,aAAa;AAC/C,WAAO,MAAM;AACX,gBAAU,WAAW;AACrB,aAAO,oBAAoB,UAAU,aAAa;AAAA,IACpD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,gBAAgB;AACnB,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,OAAO,WAAW,MAAM;AACtC,0BAAoB;AAAA,IACtB,GAAG,eAAe,UAAU;AAE5B,WAAO,MAAM;AACX,aAAO,aAAa,OAAO;AAAA,IAC7B;AAAA,EACF,GAAG,CAAC,qBAAqB,cAAc,CAAC;AAExC,QAAM,UAAU,yCAAyC;AAAA,IACvD,iBAAiB,WAAW;AAAA,IAC5B;AAAA,IACA,qBAAqB,iBAAiB;AAAA,IACtC,gBAAgB,WAAW;AAAA,EAC7B,CAAC;AACD,QAAM,mBAAmB,oCAAoC;AAAA,IAC3D,MAAM,WAAW;AAAA,IACjB,QAAQ,WAAW;AAAA,EACrB,CAAC;AACD,QAAM,eAAe,gCAAgC,WAAW,MAAM;AACtE,QAAM,yBAAyB;AAC/B,QAAM,qBACJ,WAAW,UAAU,sBAAsB,QAAQ;AAErD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,MACX,qBAAqB,qBACjB,qBACA;AAAA,MACJ,iCAAiC,GAAG,YAAY;AAAA,IAClD;AAAA,IACA,cAAc;AAAA,MACZ,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,WAAW,CAAC,UAAyC;AACnD,YAAI,MAAM,QAAQ,eAAe,MAAM,QAAQ,cAAc;AAC3D;AAAA,QACF;AACA,cAAM,QAAQ,MAAM,QAAQ,eAAe,KAAK;AAChD,cAAM,cACJ,UAAU,SAAS,sBAAsB,EAAE,SAAS;AACtD,YAAI,CAAC,aAAa;AAChB;AAAA,QACF;AACA,cAAM,eAAe;AACrB;AAAA,UAAgB,CAAC,YACf,8BAA8B,UAAU,OAAO,WAAW;AAAA,QAC5D;AAAA,MACF;AAAA,MACA,iBAAiB,CAAC,UAAwC;AACxD,kBAAU,UAAU;AACpB,cAAM,cAAc,wBAAwB,MAAM,SAAS;AAAA,MAC7D;AAAA,MACA,eAAe,CAAC,UAAwC;AACtD,YAAI,MAAM,WAAW,GAAG;AACtB;AAAA,QACF;AACA,cAAM,cACJ,UAAU,SAAS,sBAAsB,EAAE,SAAS;AACtD,YAAI,CAAC,aAAa;AAChB;AAAA,QACF;AACA,cAAM,aAAa;AAAA,UACjB;AAAA,UACA;AAAA,QACF;AACA,kBAAU,UAAU;AAAA,UAClB,UAAU;AAAA,YACR;AAAA,YACA;AAAA,UACF;AAAA,UACA,WAAW,MAAM;AAAA,UACjB,cAAc,MAAM;AAAA,UACpB;AAAA,QACF;AACA,wBAAgB,UAAU;AAC1B,cAAM,cAAc,oBAAoB,MAAM,SAAS;AAAA,MACzD;AAAA,MACA,eAAe,CAAC,UAAwC;AACtD,cAAM,QAAQ,UAAU;AACxB,YAAI,CAAC,SAAS,MAAM,cAAc,MAAM,WAAW;AACjD;AAAA,QACF;AACA;AAAA,UACE,KAAK;AAAA,YACH,KAAK;AAAA,cACH,MAAM,aAAa,MAAM,UAAU,MAAM;AAAA,cACzC;AAAA,YACF;AAAA,YACA,MAAM;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,MACA,aAAa,CAAC,UAAwC;AACpD,kBAAU,UAAU;AACpB,cAAM,cAAc,wBAAwB,MAAM,SAAS;AAAA,MAC7D;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,qBACE,CAAC,mBACA,iBAAiB,SAAS,WACzB,iBAAiB,SAAS;AAAA,MAC9B;AAAA,MACA,WAAW;AAAA,IACb;AAAA,EACF;AACF;;;AtBjHQ,gBAAAC,OAqCA,QAAAC,cArCA;AAxER,IAAM,uCAAuC;AAYtC,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAwC;AACtC,QAAM,YAAY,yBAAyB;AAAA,IACzC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,CAAC,wBAAwB,yBAAyB,IACtDC,UAAyC,YAAY;AACvD,QAAM,CAAC,qBAAqB,sBAAsB,IAAIA,UAAS,KAAK;AAEpE,EAAAC,WAAU,MAAM;AACd,QAAI,UAAU,QAAQ,kBAAkB;AACtC,gCAA0B,YAAY;AACtC,6BAAuB,KAAK;AAC5B,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,wBAAwB;AAC3B,aAAO;AAAA,IACT;AAEA,2BAAuB,IAAI;AAC3B,UAAM,UAAU,OAAO,WAAW,MAAM;AACtC,gCAA0B,IAAI;AAC9B,6BAAuB,KAAK;AAAA,IAC9B,GAAG,oCAAoC;AAEvC,WAAO,MAAM;AACX,aAAO,aAAa,OAAO;AAAA,IAC7B;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA,UAAU,QAAQ;AAAA,EACpB,CAAC;AACD,QAAM,iBAAiB,UAAU,QAAQ,mBACrC,eACA;AAEJ,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,6CACE,UAAU,QAAQ,kBAAkB,SAAS;AAAA,MAE/C,wCACE,UAAU,QAAQ,cAAc,SAAS;AAAA,MAE3C,KAAK,UAAU;AAAA,MACf,OAAO,UAAU;AAAA,MAEhB;AAAA,kBAAU,iBACT,gBAAAD,MAAC,8BAA2B,QAAQ,UAAU,gBAAgB,IAC5D;AAAA,QAEJ,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,aAAa,UAAU,QAAQ;AAAA,YAC/B,gBAAgB,UAAU;AAAA,YAC1B,qBAAqB,UAAU,QAAQ;AAAA,YACvC,kBAAkB,UAAU,QAAQ;AAAA,YACpC,cAAc,UAAU,QAAQ;AAAA;AAAA,QAClC;AAAA,QAEC,UAAU,QAAQ,kBAAkB,OACnC,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,cAAY,WAAW,KAAK,EAAE,wBAAwB;AAAA,YACtD,oBAAiB;AAAA,YACjB,iBAAe,UAAU,aAAa;AAAA,YACtC,iBAAe,UAAU,aAAa;AAAA,YACtC,iBAAe,UAAU,aAAa;AAAA,YACtC,WAAWI;AAAA,cACT;AAAA,cACA,UAAU,QAAQ,eAChB;AAAA,YACJ;AAAA,YACA,MAAK;AAAA,YACL,UAAU;AAAA,YACV,WAAW,UAAU,aAAa;AAAA,YAClC,iBAAiB,UAAU,aAAa;AAAA,YACxC,eAAe,UAAU,aAAa;AAAA,YACtC,eAAe,UAAU,aAAa;AAAA,YACtC,aAAa,UAAU,aAAa;AAAA,YAEpC,0BAAAJ,MAAC,UAAK,WAAU,8TAA6T;AAAA;AAAA,QAC/U;AAAA,QAGF,gBAAAC,OAAC,SAAI,WAAU,2FACb;AAAA,0BAAAA,OAAC,SAAI,WAAU,gCACb;AAAA,4BAAAD,MAAC,SAAI,WAAU,kCACZ,oBAAU,QAAQ,iBACjB,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,iBAAiB;AAAA;AAAA,YACnB,IACE,UAAU,QAAQ,iBACpB,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA,UAAU,MAAM,WAAW,kBAAkB,MAAM;AAAA;AAAA,YACrD,IACE,gBACF,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,iBAAiB;AAAA;AAAA,YACnB,IAEA,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA;AAAA;AAAA,YACF,GAEJ;AAAA,YAEA,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA,gBAAgB,UAAU;AAAA,gBAC1B;AAAA,gBACA,SAAS,UAAU,QAAQ;AAAA;AAAA,YAC7B;AAAA,aACF;AAAA,UAEC,iBACC,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,WAAW;AAAA,cACX;AAAA,cACA;AAAA,cACA,cAAc;AAAA,cACd,SAAS;AAAA;AAAA,UACX,IACE;AAAA,WACN;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,4BAA4B;AAAA,EACnC;AAAA,EACA;AACF,GAGgB;AACd,SACE,gBAAAA,MAAC,SAAI,WAAU,qEACb,0BAAAC,OAAC,SAAI,WAAU,6DACZ;AAAA,wBACC,gBAAAD,MAAC,SAAI,WAAU,QAAQ,6BAAkB,IACvC;AAAA,IACJ,gBAAAA,MAAC,QAAG,WAAU,kEACX,qBAAW,KAAK,EAAE,mBAAmB,GACxC;AAAA,IACA,gBAAAA,MAAC,OAAE,WAAU,oEACV,qBAAW,KAAK,EAAE,YAAY,GACjC;AAAA,IACA,gBAAAC;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QACL,SAAS,MAAM,WAAW,mBAAmB,QAAQ;AAAA,QAErD;AAAA,0BAAAL,MAACM,iBAAA,EAAe,MAAM,IAAI;AAAA,UACzB,WAAW,KAAK,EAAE,qBAAqB;AAAA;AAAA;AAAA,IAC1C;AAAA,KACF,GACF;AAEJ;;;AuBlNA,SAAS,aAAAC,YAAW,YAAAC,iBAA0C;AAC9D;AAAA,EACE;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,sBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA;AAAA,EACA,uBAAAC;AAAA,EACA;AAAA,EACA,kBAAAC;AAAA,EACA,SAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAAC;AAAA,OACK;AAiEH,qBAAAC,WAaQ,OAAAC,OAVF,QAAAC,cAHN;AAzDJ,IAAM,iCACJ;AACF,IAAM,gCACJ;AAYK,SAAS,0BAA0B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAagB;AACd,QAAM,CAAC,YAAY,aAAa,IAC9Bd,UAA6C,IAAI;AACnD,QAAM,CAAC,aAAa,cAAc,IAAIA;AAAA,IACpC;AAAA,EACF;AACA,QAAM,CAAC,UAAU,WAAW,IAAIA,UAAS,KAAK;AAC9C,QAAM,cAAc,OAAO,KAAK,CAAC,UAAU,MAAM,YAAY,aAAa;AAC1E,QAAM,aAAa,KAAK,EAAE,cAAc;AACxC,QAAM,eAAe,4CAA4C;AAAA,IAC/D,OAAO,aAAa;AAAA,IACpB;AAAA,EACF,CAAC;AAED,QAAM,kBAAkB,CAAC,SAAsC;AAC7D,gBAAY,KAAK;AACjB,kBAAc,IAAI;AAAA,EACpB;AAEA,SACE,gBAAAc,OAAAF,WAAA,EACE;AAAA,oBAAAE,OAACT,eAAA,EAAa,MAAM,UAAU,cAAc,aAC1C;AAAA,sBAAAQ,MAACL,sBAAA,EAAoB,SAAO,MAC1B,0BAAAM;AAAA,QAACb;AAAA,QAAA;AAAA,UACC,cAAY;AAAA,UACZ,WAAWU;AAAA,YACT;AAAA,YACA;AAAA,UACF;AAAA,UACA,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAQ;AAAA,UAER;AAAA,4BAAAE,MAAC,UAAK,WAAU,oBAAoB,wBAAa;AAAA,YACjD,gBAAAA,MAACV,kBAAA,EAAgB,WAAU,iFAAgF;AAAA;AAAA;AAAA,MAC7G,GACF;AAAA,MACA,gBAAAW,OAACR,sBAAA,EAAoB,OAAM,SAAQ,WAAU,kBAC1C;AAAA,eAAO,IAAI,CAAC,UAAU;AACrB,gBAAM,YAAY,MAAM,gBAAgB,KAAK;AAC7C,gBAAM,WAAW,MAAM,YAAY;AACnC,gBAAM,WAAW,WACb,KAAK,EAAE,oBAAoB,IAC3B,KAAK,EAAE,kBAAkB;AAE7B,iBACE,gBAAAO,MAAC,SAAwB,WAAU,WACjC,0BAAAC,OAAC,SAAI,WAAU,gLACb;AAAA,4BAAAA;AAAA,cAACP;AAAA,cAAA;AAAA,gBACC,WAAWI;AAAA,kBACT;AAAA,kBACA;AAAA,gBACF;AAAA,gBACA,UAAU,MAAM;AACd,8BAAY,KAAK;AACjB,gCAAc,MAAM,OAAO;AAAA,gBAC7B;AAAA,gBAEA;AAAA,kCAAAE,MAAC,UAAK,WAAU,yEACb,qBAAW,gBAAAA,MAACX,YAAA,EAAU,WAAU,UAAS,IAAK,MACjD;AAAA,kBACA,gBAAAY,OAAC,UAAK,WAAU,0CACd;AAAA,oCAAAD,MAAC,UAAK,WAAU,YAAY,gBAAM,OAAM;AAAA,oBACvC,MAAM,YACL,gBAAAA,MAAC,UAAK,WAAU,oDACb,eAAK,EAAE,qBAAqB,GAC/B,IACE;AAAA,qBACN;AAAA;AAAA;AAAA,YACF;AAAA,YACA,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,cAAY;AAAA,gBACZ,WAAWF;AAAA,kBACT;AAAA,kBACA,YAAY;AAAA,gBACd;AAAA,gBACA,MAAK;AAAA,gBACL,OAAO;AAAA,gBACP,SAAS,CAAC,UAAU;AAClB,wBAAM,eAAe;AACrB,wBAAM,gBAAgB;AACtB,gCAAc;AAAA,oBACZ,QAAQ,CAAC;AAAA,oBACT,SAAS,MAAM;AAAA,kBACjB,CAAC;AAAA,gBACH;AAAA,gBAEC,qBACC,gBAAAE,MAAC,iBAAc,WAAU,YAAW,IAEpC,gBAAAA,MAAC,WAAQ,WAAU,YAAW;AAAA;AAAA,YAElC;AAAA,YACA,gBAAAC,OAACT,eAAA,EAAa,OAAO,OACnB;AAAA,8BAAAQ,MAACL,sBAAA,EAAoB,SAAO,MAC1B,0BAAAK;AAAA,gBAAC;AAAA;AAAA,kBACC,cAAY,KAAK,EAAE,qBAAqB;AAAA,kBACxC,WAAU;AAAA,kBACV,MAAK;AAAA,kBACL,OAAO,KAAK,EAAE,qBAAqB;AAAA,kBACnC,SAAS,CAAC,UAAU;AAClB,0BAAM,gBAAgB;AAAA,kBACxB;AAAA,kBAEA,0BAAAA,MAAC,sBAAmB,WAAU,YAAW;AAAA;AAAA,cAC3C,GACF;AAAA,cACA,gBAAAC;AAAA,gBAACR;AAAA,gBAAA;AAAA,kBACC,OAAM;AAAA,kBACN,WAAU;AAAA,kBACV,YAAY;AAAA,kBAEZ;AAAA,oCAAAQ;AAAA,sBAACP;AAAA,sBAAA;AAAA,wBACC,UAAU,CAAC,UAAU;AACnB,gCAAM,eAAe;AACrB,0CAAgB;AAAA,4BACd,MAAM;AAAA,4BACN;AAAA,0BACF,CAAC;AAAA,wBACH;AAAA,wBAEA;AAAA,0CAAAM,MAAC,YAAS,WAAU,YAAW;AAAA,0BAC/B,gBAAAA,MAAC,UAAM,eAAK,EAAE,mBAAmB,GAAE;AAAA;AAAA;AAAA,oBACrC;AAAA,oBACC,CAAC,MAAM,YACN,gBAAAC;AAAA,sBAACP;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,UAAU,CAAC,UAAU;AACnB,gCAAM,eAAe;AACrB,sCAAY,KAAK;AACjB,yCAAe,KAAK;AAAA,wBACtB;AAAA,wBAEA;AAAA,0CAAAM,MAAC,cAAW,WAAU,YAAW;AAAA,0BACjC,gBAAAA,MAAC,UAAM,eAAK,EAAE,gBAAgB,GAAE;AAAA;AAAA;AAAA,oBAClC,IACE;AAAA;AAAA;AAAA,cACN;AAAA,eACF;AAAA,aACF,KA7FQ,MAAM,OA8FhB;AAAA,QAEJ,CAAC;AAAA,QACA,OAAO,WAAW,IACjB,gBAAAA,MAAC,SAAI,WAAU,+DACZ,eAAK,EAAE,yBAAyB,GACnC,IACE;AAAA,QACJ,gBAAAA,MAAC,yBAAsB;AAAA,QACvB,gBAAAC;AAAA,UAACP;AAAA,UAAA;AAAA,YACC,WAAWI;AAAA,cACT;AAAA,cACA;AAAA,YACF;AAAA,YACA,UAAU,CAAC,UAAU;AACnB,oBAAM,eAAe;AACrB,8BAAgB;AAAA,gBACd,MAAM;AAAA,gBACN,OAAO;AAAA,cACT,CAAC;AAAA,YACH;AAAA,YAEA;AAAA,8BAAAE,MAACJ,iBAAA,EAAe,WAAU,YAAW;AAAA,cACrC,gBAAAI,MAAC,UAAK,WAAU,YAAY,eAAK,EAAE,qBAAqB,GAAE;AAAA;AAAA;AAAA,QAC5D;AAAA,SACF;AAAA,OACF;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,MAAM;AAAA,QACN,MAAM,eAAe;AAAA,QACrB;AAAA,QACA,cAAc,CAAC,SAAS;AACtB,cAAI,CAAC,MAAM;AACT,0BAAc,IAAI;AAAA,UACpB;AAAA,QACF;AAAA,QACA;AAAA;AAAA,IACF;AAAA,IACA,gBAAAA;AAAA,MAACT;AAAA,MAAA;AAAA,QACC,aAAa,KAAK,EAAE,gBAAgB;AAAA,QACpC,cAAc,KAAK,EAAE,gBAAgB;AAAA,QACrC,aAAa,aAAa;AAAA,QAC1B,MAAM,gBAAgB;AAAA,QACtB,OAAO,KAAK,EAAE,2BAA2B;AAAA,QACzC,MAAK;AAAA,QACL,WAAW,MAAM;AACf,gBAAM,UAAU,aAAa;AAC7B,yBAAe,IAAI;AACnB,cAAI,SAAS;AACX,0BAAc,OAAO;AAAA,UACvB;AAAA,QACF;AAAA,QACA,cAAc,CAAC,SAAS;AACtB,cAAI,CAAC,MAAM;AACT,2BAAe,IAAI;AAAA,UACrB;AAAA,QACF;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEO,SAAS,4CAA4C,OAGjD;AACT,QAAM,aAAa,MAAM,WAAW,KAAK;AACzC,QAAM,QAAQ,MAAM,OAAO,KAAK;AAChC,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AACA,SAAO,GAAG,UAAU,IAAI,KAAK;AAC/B;AAEA,SAAS,wBAAwB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAWgB;AACd,QAAM,CAAC,cAAc,eAAe,IAAIJ,UAAS,EAAE;AACnD,QAAM,CAAC,YAAY,aAAa,IAAIA,UAAS,EAAE;AAE/C,EAAAD,WAAU,MAAM;AACd,kBAAc,MAAM,OAAO,SAAS,EAAE;AACtC,oBAAgB,MAAM,OAAO,WAAW,EAAE;AAAA,EAC5C,GAAG,CAAC,IAAI,CAAC;AAET,QAAM,QAAQ,WAAW,KAAK;AAC9B,QAAM,cACJ,MAAM,SAAS,SACX,KAAK,EAAE,6BAA6B,IACpC,KAAK,EAAE,+BAA+B;AAE5C,QAAM,SAAS,CAAC,UAAsC;AACpD,UAAM,eAAe;AACrB,QAAI,CAAC,QAAQ,CAAC,OAAO;AACnB;AAAA,IACF;AACA,QAAI,KAAK,SAAS,QAAQ;AACxB,oBAAc;AAAA,QACZ,SAAS;AAAA,QACT;AAAA,QACA,SAAS,KAAK,MAAM;AAAA,MACtB,CAAC;AAAA,IACH,OAAO;AACL,oBAAc;AAAA,QACZ,SAAS;AAAA,QACT;AAAA,MACF,CAAC;AAAA,IACH;AACA,iBAAa,KAAK;AAAA,EACpB;AAEA,SACE,gBAAAc,MAAC,UAAO,MAAY,cAClB,0BAAAC,OAAC,iBAAc,WAAU,oBACvB;AAAA,oBAAAD,MAAC,gBACC,0BAAAA,MAAC,eAAa,uBAAY,GAC5B;AAAA,IACA,gBAAAC,OAAC,UAAK,WAAU,cAAa,UAAU,QACrC;AAAA,sBAAAA,OAAC,WAAM,WAAU,cACf;AAAA,wBAAAD,MAAC,UAAK,WAAU,kEACb,eAAK,EAAE,mBAAmB,GAC7B;AAAA,QACA,gBAAAA;AAAA,UAACH;AAAA,UAAA;AAAA,YACC,WAAS;AAAA,YACT,aAAa,KAAK,EAAE,mBAAmB;AAAA,YACvC,OAAO;AAAA,YACP,UAAU,CAAC,UAAU,cAAc,MAAM,OAAO,KAAK;AAAA;AAAA,QACvD;AAAA,SACF;AAAA,MACA,gBAAAI,OAAC,WAAM,WAAU,cACf;AAAA,wBAAAD,MAAC,UAAK,WAAU,kEACb,eAAK,EAAE,qBAAqB,GAC/B;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,aAAa,KAAK,EAAE,qBAAqB;AAAA,YACzC,OAAO;AAAA,YACP,UAAU,CAAC,UAAU,gBAAgB,MAAM,OAAO,KAAK;AAAA;AAAA,QACzD;AAAA,SACF;AAAA,MACA,gBAAAC,OAAC,gBAAa,WAAU,QACtB;AAAA,wBAAAD;AAAA,UAACZ;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,SAAS,MAAM,aAAa,KAAK;AAAA,YAEhC,eAAK,EAAE,gBAAgB;AAAA;AAAA,QAC1B;AAAA,QACA,gBAAAY,MAACZ,UAAA,EAAO,UAAU,CAAC,OAAO,MAAK,UAAS,MAAK,UAC1C,eAAK,EAAE,mBAAmB,GAC7B;AAAA,SACF;AAAA,OACF;AAAA,KACF,GACF;AAEJ;;;AxB3QI,SAME,OAAAc,OANF,QAAAC,cAAA;AAxEG,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAuC;AACrC,QAAM,EAAE,YAAY,iBAAiB,eAAe,cAAc,MAAM,IACtE,wBAAwB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH,QAAM,8BAA8BC,QAAsB,IAAI;AAE9D,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,aAAa,WAAW;AAC3B;AAAA,IACF;AACA,QAAI,4BAA4B,YAAY,YAAY,WAAW;AACjE;AAAA,IACF;AACA,gCAA4B,UAAU,YAAY;AAElD,QAAI,YAAY,SAAS,KAAK,GAAG;AAC/B,iBAAW,YAAY,YAAY,OAAO;AAAA,IAC5C;AACA,eAAW,YAAY,YAAY,OAAO;AAC1C,eAAW,WAAW,YAAY,QAAQ,KAAK,KAAK,IAAI;AAAA,EAC1D,GAAG,CAAC,YAAY,WAAW,CAAC;AAE5B,EAAAA,WAAU,MAAM;AACd,yCAAqC;AAAA,MACnC,eAAe,WAAW,UAAU,iBAAiB;AAAA,MACrD;AAAA,MACA,QAAQ,WAAW,OAAO;AAAA,MAC1B;AAAA,IACF,CAAC;AAAA,EACH,GAAG;AAAA,IACD,WAAW,UAAU;AAAA,IACrB,WAAW,OAAO;AAAA,IAClB;AAAA,IACA;AAAA,EACF,CAAC;AAED,wCAAsC;AAAA,IACpC;AAAA,IACA,eAAe,CAAC,eAAe;AAC7B,WAAK,WAAW,YAAY,UAAU;AAAA,IACxC;AAAA,IACA,eAAe,CAAC,YAAY;AAC1B,WAAK,WAAW,YAAY,OAAO;AAAA,IACrC;AAAA,IACA,eAAe,WAAW;AAAA,IAC1B,eAAe,CAAC,eAAe;AAC7B,WAAK,WAAW,YAAY,UAAU;AAAA,IACxC;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,cAAY,WAAW,KAAK,EAAE,OAAO;AAAA,MACrC,WAAU;AAAA,MACV,8BAA4B;AAAA,MAC5B,mCAAiC;AAAA,MAEjC;AAAA,wBAAAD;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA,mBAAmB,MAAM;AAAA,YACzB,sBAAsB,MAAM;AAAA,YAC5B;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF;AAAA,QAEA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAM,WAAW;AAAA,YACjB,aAAa,QAAQ;AAAA,YACrB,MAAM,gBAAgB;AAAA,YACtB;AAAA,YACA,SAAS,gBAAgB;AAAA,YACzB,WAAW,gBAAgB;AAAA;AAAA,QAC7B;AAAA;AAAA;AAAA,EACF;AAEJ;AAcO,SAAS,uBAAuB;AAAA,EACrC,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA6C;AAC3C,QAAM,EAAE,oBAAoB,aAAa,cAAc,IACrD,8BAA8B;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH,QAAM,aAAa,oCAAoC;AAAA,IACrD;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAWG;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEA;AAAA,wBAAAH,OAAC,SAAI,WAAU,wCACb;AAAA,0BAAAD,MAAC,UAAK,WAAU,mFACb,iBAAO,KAAK,KAAK,KAAK,EAAE,OAAO,GAClC;AAAA,UACA,gBAAAA;AAAA,YAACK;AAAA,YAAA;AAAA,cACC,cAAY;AAAA,cACZ,WAAU;AAAA,cACV,6CACE,yBAAyB,SAAS;AAAA,cAEpC,wCACE,qBAAqB,SAAS;AAAA,cAEhC,MAAK;AAAA,cACL,OAAO;AAAA,cACP,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,SAAS,CAAC,UAAU;AAClB,sBAAM,gBAAgB;AACtB,8BAAc;AAAA,cAChB;AAAA,cACA,eAAe,CAAC,UAAU,MAAM,gBAAgB;AAAA,cAChD,eAAe,CAAC,UAAU,MAAM,gBAAgB;AAAA,cAEhD,0BAAAL,MAAC,aAAU,WAAU,eAAc;AAAA;AAAA,UACrC;AAAA,WACF;AAAA,QACA,gBAAAA,MAAC,SAAI,WAAU,uIACb,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,eAAe,CAAC,UAAU,MAAM,gBAAgB;AAAA,YAChD,eAAe,CAAC,UAAU,MAAM,gBAAgB;AAAA,YAEhD,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,eAAe,WAAW;AAAA,gBAC1B,WAAU;AAAA,gBACV;AAAA,gBACA,QAAQ,WAAW;AAAA,gBACnB,eAAe,CAAC,UAAU;AACxB,kDAAgC;AAAA,oBAC9B;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF,CAAC;AAAA,gBACH;AAAA,gBACA,eAAe,CAAC,YAAY;AAC1B,kDAAgC;AAAA,oBAC9B;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF,CAAC;AAAA,gBACH;AAAA,gBACA,eAAe,CAAC,YAAY;AAC1B,qDAAmC;AAAA,oBACjC;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF,CAAC;AAAA,gBACH;AAAA,gBACA,eAAe,CAAC,UAAU;AACxB,kDAAgC;AAAA,oBAC9B;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF,CAAC;AAAA,gBACH;AAAA;AAAA,YACF;AAAA;AAAA,QACF,GACF;AAAA,QACA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,eAAe,CAAC,UAAU,MAAM,gBAAgB;AAAA,YAChD,eAAe,CAAC,UAAU,MAAM,gBAAgB;AAAA,YAE/C;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EACF;AAEJ;","names":["useEffect","useMemo","useState","useEffect","useEffect","useMemo","useState","useEffect","useEffect","useRef","Button","cn","useEffect","useState","Button","FileCreateIcon","cn","useState","Badge","Button","ScrollArea","Button","FileCreateIcon","jsx","jsxs","jsxs","jsx","jsxs","jsx","jsx","jsxs","Button","FileCreateIcon","useEffect","useState","cn","jsx","jsxs","useState","useEffect","cn","useEffect","useMemo","useRef","useState","Button","cn","jsx","jsxs","useRef","jsx","jsx","jsxs","useState","ScrollArea","Button","Badge","Button","cn","Badge","AgentSessionsIcon","Button","cn","jsx","jsxs","AgentSessionsIcon","Button","cn","jsx","jsxs","cn","Button","jsx","cn","useComposedInputValue","Badge","Button","FileCreateIcon","Input","ScrollArea","cn","jsx","jsxs","Button","FileCreateIcon","ScrollArea","cn","useComposedInputValue","Input","Badge","jsx","jsxs","cn","Button","jsx","jsxs","Button","ScrollArea","cn","useState","Badge","Button","ConfirmationDialog","Fragment","jsx","jsxs","useState","Button","ConfirmationDialog","Badge","jsx","jsxs","cn","ScrollArea","useEffect","useEffectEvent","useRef","useState","useRef","useState","useEffectEvent","useEffect","jsx","jsxs","useState","useEffect","cn","Button","FileCreateIcon","useEffect","useState","Button","CheckIcon","ChevronDownIcon","ConfirmationDialog","DropdownMenu","DropdownMenuContent","DropdownMenuItem","DropdownMenuTrigger","FileCreateIcon","Input","cn","Fragment","jsx","jsxs","jsx","jsxs","useRef","useEffect","cn","Button"]}