@nextop-os/workspace-issue-manager 0.0.18 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-H2ZF6X6A.js → chunk-5Y5GVLKU.js} +21 -1
- package/dist/chunk-5Y5GVLKU.js.map +1 -0
- package/dist/chunk-LEL6VWU4.js +1 -0
- package/dist/{chunk-HKIH3OTZ.js → chunk-V75TAM27.js} +47 -100
- package/dist/chunk-V75TAM27.js.map +1 -0
- package/dist/chunk-XI6VLBSW.js +4391 -0
- package/dist/chunk-XI6VLBSW.js.map +1 -0
- package/dist/chunk-ZWDF5XA7.js +735 -0
- package/dist/chunk-ZWDF5XA7.js.map +1 -0
- package/dist/contracts/index.d.ts +35 -32
- package/dist/core/index.d.ts +44 -0
- package/dist/core/index.js +60 -0
- package/dist/core/index.js.map +1 -0
- package/dist/{feature-Qe1b5W0D.d.ts → feature-2zhsUF_g.d.ts} +5 -0
- package/dist/i18n/index.js +1 -1
- package/dist/index.d.ts +8 -43
- package/dist/index.js +37 -4
- package/dist/issueManagerControllerService.interface-B_Jr7Xw_.d.ts +101 -0
- package/dist/services/index.d.ts +11 -0
- package/dist/services/index.js +24 -0
- package/dist/services/index.js.map +1 -0
- package/dist/{react → ui}/index.d.ts +11 -6
- package/dist/ui/index.js +12 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/workbench/index.d.ts +15 -4
- package/dist/workbench/index.js +46 -9
- package/dist/workbench/index.js.map +1 -1
- package/package.json +21 -10
- package/dist/chunk-H2ZF6X6A.js.map +0 -1
- package/dist/chunk-HKIH3OTZ.js.map +0 -1
- package/dist/chunk-IYLTKFVO.js +0 -3685
- package/dist/chunk-IYLTKFVO.js.map +0 -1
- package/dist/react/index.js +0 -11
- /package/dist/{react/index.js.map → chunk-LEL6VWU4.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/react/internal/IssueManagerShell.tsx","../src/react/internal/model.ts","../src/react/internal/IssueManagerPanels.tsx","../src/react/internal/IssueManagerPanelParts.tsx","../src/react/internal/IssueManagerRichTextTextarea.tsx","../src/react/internal/IssueManagerPanelText.ts","../src/react/internal/IssueManagerTaskComposerPane.tsx","../src/react/internal/IssueManagerTaskDrawer.tsx","../src/react/IssueManagerNode.tsx","../src/react/internal/useIssueManagerController.ts","../src/react/internal/controllerUtils.ts","../src/react/internal/controllerActions.ts","../src/react/internal/controllerState.ts","../src/react/internal/IssueManagerReferencePicker.tsx","../src/react/internal/IssueManagerReferencePickerState.ts"],"sourcesContent":["import {\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type Dispatch,\n type JSX,\n type KeyboardEvent,\n type PointerEvent,\n type RefObject,\n type SetStateAction\n} from \"react\";\nimport {\n Badge,\n Button,\n CloseIcon,\n FailedFilledIcon,\n FileCreateIcon,\n Input,\n ScrollArea,\n Spinner,\n ToastDescription,\n ToastTitle,\n UnderlineTabs,\n toastVariants,\n cn\n} from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\nimport type { IssueManagerController } from \"./useIssueManagerController.ts\";\nimport {\n formatIssueManagerDate,\n resolveIssueManagerStatusLabel\n} from \"./model.ts\";\nimport {\n IssueManagerEmptyIllustration,\n IssueManagerIssuePane\n} from \"./IssueManagerPanels.tsx\";\nimport { IssueManagerRunActionTrigger } from \"./IssueManagerPanelParts.tsx\";\nimport { IssueManagerTaskComposerPane } from \"./IssueManagerTaskComposerPane.tsx\";\nimport { IssueManagerTaskDrawer } from \"./IssueManagerTaskDrawer.tsx\";\n\nconst issueStatusFilters = [\n \"all\",\n \"not_started\",\n \"running\",\n \"pending_acceptance\",\n \"completed\",\n \"failed\",\n \"canceled\"\n] as const;\n\nconst sidebarDefaultWidth = 312;\nconst sidebarMinWidth = 248;\nconst sidebarMaxWidth = 520;\nconst mainMinWidth = 420;\nconst expandedMinWidth = sidebarMinWidth + mainMinWidth;\n\ninterface SidebarResizeState {\n maxWidth: number;\n pointerId: number;\n startClientX: number;\n startWidth: number;\n}\n\nexport interface IssueManagerShellProps {\n controller: IssueManagerController;\n onCloseTaskDrawer: () => void;\n onDismissIssueCreate: () => void;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n}\n\nexport function IssueManagerShell({\n controller,\n onCloseTaskDrawer,\n onDismissIssueCreate,\n selectedIssue,\n selectedTask\n}: IssueManagerShellProps): JSX.Element {\n const isIssueEditing = controller.issueEditorMode !== \"read\";\n const isTaskCreating =\n !isIssueEditing && controller.taskEditorMode === \"create\";\n const isTaskDrawerOpen =\n !isIssueEditing &&\n !isTaskCreating &&\n (controller.taskEditorMode === \"edit\" || selectedTask !== null);\n const layoutRef = useRef<HTMLDivElement | null>(null);\n const resizeRef = useRef<SidebarResizeState | null>(null);\n const [sidebarWidth, setSidebarWidth] = useState(sidebarDefaultWidth);\n const [isNarrowLayout, setIsNarrowLayout] = useState(false);\n const isSidebarAutoCollapsed = isNarrowLayout;\n const isSidebarManuallyCollapsed =\n controller.nodeState.taskListCollapsed === true;\n const isSidebarCollapsed =\n isSidebarManuallyCollapsed || isSidebarAutoCollapsed;\n\n useEffect(() => {\n const publishLayout = () => {\n const width = layoutRef.current?.getBoundingClientRect().width ?? 0;\n if (!width) {\n return;\n }\n setSidebarWidth((current) => clampSidebarWidth(current, width));\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 const layoutStyle = {\n \"--issue-manager-sidebar-width\": `${sidebarWidth}px`\n } as CSSProperties;\n\n return (\n <div\n className={cn(\n \"relative grid min-h-0 flex-1 overflow-hidden bg-transparent transition-[grid-template-columns] duration-[180ms] ease-out\",\n isSidebarCollapsed\n ? \"grid-cols-[0_minmax(0,1fr)] grid-rows-[minmax(0,1fr)]\"\n : \"grid-cols-[var(--issue-manager-sidebar-width)_minmax(0,1fr)] grid-rows-[minmax(0,1fr)]\"\n )}\n data-issue-manager-sidebar-auto-collapsed={\n isSidebarAutoCollapsed ? \"true\" : undefined\n }\n data-issue-manager-sidebar-collapsed={\n isSidebarCollapsed ? \"true\" : undefined\n }\n ref={layoutRef}\n style={layoutStyle}\n >\n <IssueManagerSidebar\n controller={controller}\n isCollapsed={isSidebarCollapsed}\n isNarrowLayout={isNarrowLayout}\n />\n {isSidebarCollapsed ? null : (\n <div\n aria-label={controller.copy.t(\"labels.resizeIssueList\")}\n aria-orientation=\"vertical\"\n aria-valuemax={sidebarMaxWidth}\n aria-valuemin={sidebarMinWidth}\n aria-valuenow={sidebarWidth}\n className=\"group absolute top-0 bottom-0 left-[calc(var(--issue-manager-sidebar-width)-6px)] z-20 w-3 cursor-col-resize touch-none\"\n role=\"separator\"\n tabIndex={0}\n onKeyDown={(event) =>\n handleSidebarResizeKeyDown(event, layoutRef, setSidebarWidth)\n }\n onPointerCancel={(event) =>\n handleSidebarResizePointerEnd(event, resizeRef)\n }\n onPointerDown={(event) =>\n handleSidebarResizePointerDown(\n event,\n layoutRef,\n resizeRef,\n sidebarWidth,\n setSidebarWidth\n )\n }\n onPointerMove={(event) =>\n handleSidebarResizePointerMove(event, resizeRef, setSidebarWidth)\n }\n onPointerUp={(event) =>\n handleSidebarResizePointerEnd(event, resizeRef)\n }\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 <div className=\"relative min-h-0 overflow-hidden bg-transparent\">\n <div className=\"flex h-full min-h-0 flex-col\">\n <div className=\"min-h-0 flex-1 overflow-hidden\">\n {isIssueEditing ? (\n <IssueManagerIssuePane\n controller={controller}\n selectedIssue={selectedIssue}\n onDismissCreate={onDismissIssueCreate}\n />\n ) : isTaskCreating ? (\n <IssueManagerTaskComposerPane\n controller={controller}\n selectedIssue={selectedIssue}\n onCancel={() => controller.setTaskEditorMode(\"read\")}\n />\n ) : selectedIssue ? (\n <IssueManagerIssuePane\n controller={controller}\n selectedIssue={selectedIssue}\n onDismissCreate={onDismissIssueCreate}\n />\n ) : (\n <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 <IssueManagerEmptyIllustration />\n <h2 className=\"text-lg font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {controller.copy.t(\"messages.noIssues\")}\n </h2>\n <p className=\"max-w-[420px] text-base leading-[1.3] text-[var(--text-secondary)]\">\n {controller.copy.t(\"emptyState\")}\n </p>\n <Button\n className=\"mt-2\"\n type=\"button\"\n onClick={() => controller.setIssueEditorMode(\"create\")}\n >\n <FileCreateIcon size={16} />\n {controller.copy.t(\"actions.createIssue\")}\n </Button>\n </div>\n </div>\n )}\n </div>\n <IssueManagerBottomBar\n controller={controller}\n isNarrowLayout={isNarrowLayout}\n selectedIssue={selectedIssue}\n selectedTask={selectedTask}\n />\n </div>\n\n {isTaskDrawerOpen ? (\n <IssueManagerTaskDrawer\n controller={controller}\n selectedIssue={selectedIssue}\n selectedTask={selectedTask}\n onClose={onCloseTaskDrawer}\n />\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction IssueManagerSidebar({\n controller,\n isCollapsed,\n isNarrowLayout\n}: {\n controller: IssueManagerController;\n isCollapsed: boolean;\n isNarrowLayout: boolean;\n}): JSX.Element {\n const copy = controller.copy;\n const counts = buildIssueManagerStatusCounts(controller.issues.value);\n const showRefreshTip =\n controller.issues.isLoading || controller.issues.error !== null;\n const isLoadingEmpty =\n controller.issues.isLoading && controller.issues.value.length === 0;\n const sidebarEmptyState = isLoadingEmpty\n ? null\n : controller.issues.error\n ? {\n body: controller.issues.error,\n title: copy.t(\"messages.noIssues\"),\n tone: \"destructive\" as const\n }\n : controller.issues.value.length === 0\n ? {\n body: copy.t(\"messages.noIssuesForFilterBody\"),\n title: copy.t(\"messages.noIssuesForFilterTitle\"),\n tone: \"default\" as const\n }\n : null;\n\n return (\n <aside\n aria-hidden={isCollapsed ? \"true\" : undefined}\n className={cn(\n \"relative isolate flex min-h-0 flex-col overflow-hidden bg-transparent transition-[border-color] duration-[180ms] ease-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-[180ms]\",\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 [&>*]:opacity-0 [&>*]:transition-opacity [&>*]:duration-[120ms]\"\n )}\n inert={isCollapsed ? true : undefined}\n >\n <div className={cn(\"px-4 py-4\", isNarrowLayout && \"pb-3\")}>\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={controller.nodeState.issueSearchQuery}\n onChange={controller.setIssueSearchQuery}\n />\n <Button\n className=\"gap-2 px-3\"\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => controller.setIssueEditorMode(\"create\")}\n >\n <FileCreateIcon size={16} />\n {copy.t(\"actions.createIssue\")}\n </Button>\n </div>\n </div>\n\n <UnderlineTabs\n className=\"px-4\"\n ariaLabel={copy.t(\"labels.status\")}\n scrollLeftLabel={copy.t(\"labels.scrollStatusTabsLeft\")}\n scrollRightLabel={copy.t(\"labels.scrollStatusTabsRight\")}\n tabs={issueStatusFilters.map((status) => ({\n count: counts[status] ?? 0,\n label:\n status === \"all\"\n ? copy.t(\"labels.allStatus\")\n : resolveIssueManagerStatusLabel(copy, status),\n value: status\n }))}\n value={controller.nodeState.issueStatusFilter}\n onValueChange={controller.setIssueStatusFilter}\n />\n\n <div className=\"h-2.5 flex-none\" aria-hidden=\"true\" />\n\n <div\n className={cn(\n \"relative flex min-h-0 flex-col\",\n isNarrowLayout ? \"flex-none\" : \"flex-1\"\n )}\n >\n {sidebarEmptyState && !isNarrowLayout ? (\n <div className=\"flex min-h-0 h-full items-center justify-center px-4 pt-1.5 pb-4\">\n <IssueManagerSidebarEmptyState\n body={sidebarEmptyState.body}\n isNarrowLayout={false}\n title={sidebarEmptyState.title}\n tone={sidebarEmptyState.tone}\n />\n </div>\n ) : (\n <ScrollArea\n className={cn(\n \"min-h-0\",\n isNarrowLayout ? \"flex-none\" : \"flex-1 h-full\"\n )}\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 {isLoadingEmpty ? (\n <IssueManagerSidebarLoadingState\n isNarrowLayout={isNarrowLayout}\n />\n ) : sidebarEmptyState ? (\n <IssueManagerSidebarEmptyState\n body={sidebarEmptyState.body}\n isNarrowLayout={isNarrowLayout}\n title={sidebarEmptyState.title}\n tone={sidebarEmptyState.tone}\n />\n ) : (\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 {controller.issues.value.map((issue) => (\n <IssueManagerSidebarItem\n copy={copy}\n isNarrowLayout={isNarrowLayout}\n issue={issue}\n key={issue.issueId}\n selected={\n controller.nodeState.selectedIssueId === issue.issueId\n }\n onSelect={controller.selectIssue}\n />\n ))}\n </div>\n )}\n </div>\n </ScrollArea>\n )}\n\n {!isNarrowLayout && showRefreshTip ? (\n <IssueManagerSidebarRefreshTip\n description={controller.issues.error}\n isLoading={controller.issues.isLoading}\n title={\n controller.issues.isLoading\n ? copy.t(\"messages.refreshingIssues\")\n : copy.t(\"messages.issueRefreshFailed\")\n }\n />\n ) : null}\n </div>\n </aside>\n );\n}\n\nfunction IssueManagerSidebarRefreshTip({\n description,\n isLoading,\n title\n}: {\n description: string | null;\n isLoading: boolean;\n title: string;\n}): JSX.Element {\n const variant = isLoading ? \"default\" : \"destructive\";\n return (\n <div className=\"pointer-events-none absolute inset-0 z-[2] flex items-center justify-center px-6 py-6\">\n <div\n aria-busy={isLoading}\n aria-live={variant === \"destructive\" ? \"assertive\" : \"polite\"}\n className={toastVariants({ variant })}\n role={variant === \"destructive\" ? \"alert\" : \"status\"}\n >\n <ToastTitle>\n {isLoading ? (\n <Spinner\n className=\"shrink-0 text-current\"\n size={16}\n strokeWidth={3}\n trackColor=\"color-mix(in srgb, currentColor 28%, transparent)\"\n />\n ) : (\n <FailedFilledIcon className=\"size-4 shrink-0 text-current\" />\n )}\n <span className=\"min-w-0 break-words\">{title}</span>\n </ToastTitle>\n {!isLoading && description ? (\n <ToastDescription>{description}</ToastDescription>\n ) : null}\n </div>\n </div>\n );\n}\n\nfunction IssueManagerSearchField({\n clearLabel,\n onChange,\n placeholder,\n value\n}: {\n clearLabel: string;\n onChange: (value: string) => void;\n placeholder: string;\n value: string;\n}): JSX.Element {\n return (\n <div\n className=\"relative min-w-0 flex-1\"\n data-has-value={value ? \"true\" : \"false\"}\n >\n <Input\n aria-label={placeholder}\n className={cn(\n \"box-border h-8 min-h-8 rounded-md border-0 bg-[var(--transparency-block)] px-3 text-sm font-normal leading-normal text-[var(--text-primary)] shadow-none outline-none ring-0 transition-colors placeholder:text-[var(--text-placeholder)] hover:bg-[var(--transparency-hover)] focus:border-0 focus:bg-[var(--transparency-hover)] focus-visible:border-0 focus-visible:bg-[var(--transparency-hover)] focus-visible:ring-0 focus-visible:ring-offset-0 disabled:bg-[var(--transparency-block)] disabled:text-[var(--text-disabled)] disabled:opacity-100\",\n \"[&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none\",\n value ? \"pr-9\" : \"pr-3\"\n )}\n placeholder={placeholder}\n type=\"search\"\n value={value}\n onChange={(event) => onChange(event.target.value)}\n />\n {value ? (\n <button\n aria-label={clearLabel}\n className=\"absolute top-1/2 right-1 inline-flex size-6 -translate-y-1/2 items-center justify-center rounded-md border-0 bg-transparent p-0 text-[var(--text-tertiary)] transition-colors hover:bg-[var(--transparency-hover)] hover:text-[var(--text-secondary)] focus-visible:bg-[var(--transparency-hover)] focus-visible:text-[var(--text-secondary)] focus-visible:outline-none\"\n type=\"button\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onChange(\"\")}\n >\n <CloseIcon className=\"size-3.5\" />\n </button>\n ) : null}\n </div>\n );\n}\n\nfunction IssueManagerBottomBar({\n controller,\n isNarrowLayout,\n selectedIssue,\n selectedTask\n}: {\n controller: IssueManagerController;\n isNarrowLayout: boolean;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n}): JSX.Element | null {\n const copy = controller.copy;\n if (\n !selectedIssue ||\n controller.issueEditorMode !== \"read\" ||\n controller.taskEditorMode !== \"read\"\n ) {\n return null;\n }\n\n return (\n <div className=\"border-t border-[var(--border-1)] bg-transparent px-6 py-4 backdrop-blur\">\n <div\n className={cn(\n \"flex gap-3\",\n isNarrowLayout ? \"flex-col items-stretch\" : \"items-center justify-end\"\n )}\n >\n <IssueManagerRunActionTrigger\n controller={controller}\n disabled={!selectedTask}\n triggerClassName={cn(\n \"rounded-xl border-[var(--border-1)] bg-[var(--transparency-block)] px-4 py-2\",\n isNarrowLayout ? \"w-full\" : \"min-w-[14rem]\"\n )}\n />\n <Button\n disabled={!selectedIssue}\n className={cn(\"px-4\", isNarrowLayout && \"w-full\")}\n size=\"dialog\"\n type=\"button\"\n onClick={() => {\n void controller.shareSelection();\n }}\n >\n {copy.t(\"actions.inviteCollaborator\")}\n </Button>\n </div>\n </div>\n );\n}\n\nfunction IssueManagerSidebarItem({\n copy,\n isNarrowLayout,\n issue,\n onSelect,\n selected\n}: {\n copy: IssueManagerI18nRuntime;\n isNarrowLayout: boolean;\n issue: IssueManagerIssueSummary;\n onSelect: (issueId: string | null) => void;\n selected: boolean;\n}): JSX.Element {\n return (\n <button\n className={cn(\n \"rounded-lg border px-3.5 py-3.5 text-left transition-colors\",\n isNarrowLayout\n ? \"h-24 max-h-24 min-h-24 w-[clamp(220px,58vw,320px)] flex-[0_0_clamp(220px,58vw,320px)] overflow-hidden\"\n : \"w-full\",\n selected\n ? \"border-[var(--border-1)] bg-[var(--background-fronted)]\"\n : \"border-[var(--border-1)] bg-transparent hover:bg-[var(--transparency-block)]\"\n )}\n type=\"button\"\n onClick={() => onSelect(issue.issueId)}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0 flex-1 space-y-2\">\n <p className=\"text-[12px] leading-[1.55] text-[var(--text-secondary)]\">\n {formatSidebarTimestamp(issue.updatedAtUnix ?? issue.createdAtUnix)}\n </p>\n <p className=\"line-clamp-4 text-[14px] font-semibold leading-[1.35rem] text-[var(--text-primary)]\">\n {issue.title}\n </p>\n </div>\n <Badge className=\"rounded-full border-transparent bg-[var(--transparency-block)] px-2 py-1 text-[11px] text-[var(--text-secondary)]\">\n {resolveIssueManagerStatusLabel(copy, issue.status)}\n </Badge>\n </div>\n <div className=\"mt-2 text-[12px] leading-[1.55] text-[var(--text-secondary)]\">\n {copy.t(\"labels.taskCount\", { count: issue.taskCount ?? 0 })}\n </div>\n </button>\n );\n}\n\nfunction IssueManagerSidebarLoadingState({\n isNarrowLayout\n}: {\n isNarrowLayout: boolean;\n}): JSX.Element {\n return (\n <div\n className={cn(\n \"gap-2.5\",\n isNarrowLayout ? \"flex flex-row flex-nowrap overflow-x-hidden\" : \"grid\"\n )}\n aria-hidden=\"true\"\n >\n {Array.from({ length: 4 }, (_, index) => (\n <div\n className={cn(\n \"rounded-lg bg-transparent px-3.5 py-3.5\",\n isNarrowLayout &&\n \"h-24 max-h-24 min-h-24 w-[clamp(220px,58vw,320px)] flex-[0_0_clamp(220px,58vw,320px)]\"\n )}\n key={index}\n >\n <div className=\"h-3.5 w-20 rounded-full bg-[var(--transparency-block)]\" />\n <div className=\"mt-3 h-4 w-4/5 rounded-full bg-[var(--transparency-block)]\" />\n <div className=\"mt-4 h-3.5 w-24 rounded-full bg-[var(--transparency-block)]\" />\n </div>\n ))}\n </div>\n );\n}\n\nfunction IssueManagerSidebarEmptyState({\n body,\n isNarrowLayout,\n title,\n tone = \"default\"\n}: {\n body: string;\n isNarrowLayout: boolean;\n title: string;\n tone?: \"default\" | \"destructive\";\n}): JSX.Element {\n return (\n <div\n className={cn(\n \"relative flex flex-1 flex-col items-center justify-center self-stretch overflow-hidden p-0 text-center\",\n isNarrowLayout\n ? \"h-24 max-h-24 min-h-24 w-full flex-[0_0_100%]\"\n : \"min-h-full\"\n )}\n >\n <p\n className={cn(\n \"text-sm font-semibold leading-5 text-[var(--text-primary)]\",\n tone === \"destructive\"\n ? \"text-[var(--state-danger)]\"\n : \"text-[var(--text-primary)]\"\n )}\n >\n {title}\n </p>\n <p className=\"mt-1.5 max-w-sm text-sm leading-5 text-[var(--text-secondary)]\">\n {body}\n </p>\n </div>\n );\n}\n\nfunction buildIssueManagerStatusCounts(\n issues: readonly IssueManagerIssueSummary[]\n): Record<(typeof issueStatusFilters)[number], number> {\n const counts: Record<(typeof issueStatusFilters)[number], number> = {\n all: issues.length,\n canceled: 0,\n completed: 0,\n failed: 0,\n not_started: 0,\n pending_acceptance: 0,\n running: 0\n };\n\n for (const issue of issues) {\n if (issue.status in counts) {\n counts[issue.status as keyof typeof counts] += 1;\n }\n }\n\n return counts;\n}\n\nfunction formatSidebarTimestamp(value: number | null | undefined): string {\n return formatIssueManagerDate(value);\n}\n\nfunction clampSidebarWidth(width: number, layoutWidth: number): number {\n const maxWidth = Math.max(\n sidebarMinWidth,\n Math.min(sidebarMaxWidth, layoutWidth - mainMinWidth)\n );\n return Math.min(Math.max(width, sidebarMinWidth), maxWidth);\n}\n\nexport function shouldAutoCollapseIssueManagerSidebar(\n containerWidth: number\n): boolean {\n return (\n Number.isFinite(containerWidth) &&\n containerWidth > 0 &&\n Math.round(containerWidth) < expandedMinWidth\n );\n}\n\nfunction handleSidebarResizePointerDown(\n event: PointerEvent<HTMLDivElement>,\n layoutRef: RefObject<HTMLDivElement | null>,\n resizeRef: RefObject<SidebarResizeState | null>,\n sidebarWidth: number,\n setSidebarWidth: Dispatch<SetStateAction<number>>\n): void {\n if (event.button !== 0) {\n return;\n }\n const layoutWidth = layoutRef.current?.getBoundingClientRect().width ?? 0;\n if (!layoutWidth) {\n return;\n }\n const startWidth = clampSidebarWidth(sidebarWidth, layoutWidth);\n resizeRef.current = {\n maxWidth: clampSidebarWidth(sidebarMaxWidth, layoutWidth),\n pointerId: event.pointerId,\n startClientX: event.clientX,\n startWidth\n };\n setSidebarWidth(startWidth);\n event.currentTarget.setPointerCapture?.(event.pointerId);\n}\n\nfunction handleSidebarResizePointerMove(\n event: PointerEvent<HTMLDivElement>,\n resizeRef: RefObject<SidebarResizeState | null>,\n setSidebarWidth: Dispatch<SetStateAction<number>>\n): void {\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 sidebarMinWidth\n ),\n state.maxWidth\n )\n );\n}\n\nfunction handleSidebarResizePointerEnd(\n event: PointerEvent<HTMLDivElement>,\n resizeRef: RefObject<SidebarResizeState | null>\n): void {\n resizeRef.current = null;\n event.currentTarget.releasePointerCapture?.(event.pointerId);\n}\n\nfunction handleSidebarResizeKeyDown(\n event: KeyboardEvent<HTMLDivElement>,\n layoutRef: RefObject<HTMLDivElement | null>,\n setSidebarWidth: Dispatch<SetStateAction<number>>\n): void {\n if (event.key !== \"ArrowLeft\" && event.key !== \"ArrowRight\") {\n return;\n }\n const delta = event.key === \"ArrowRight\" ? 16 : -16;\n const layoutWidth = layoutRef.current?.getBoundingClientRect().width ?? 0;\n if (!layoutWidth) {\n return;\n }\n event.preventDefault();\n setSidebarWidth((current) => clampSidebarWidth(current + delta, layoutWidth));\n}\n","import { formatNextopShortDateTime } from \"@nextop-os/ui-system/date-format\";\nimport type {\n IssueManagerFileReference,\n IssueManagerPriority,\n IssueManagerStatus\n} from \"../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\n\nexport type IssueManagerEditorMode = \"read\" | \"create\" | \"edit\";\n\nexport type IssueManagerReferenceTarget =\n | {\n mode: \"attach\";\n parentKind: \"issue\";\n }\n | {\n mode: \"attach\";\n parentKind: \"task\";\n taskId: string;\n }\n | {\n mode: \"insert\";\n parentKind: \"issue\";\n }\n | {\n mode: \"insert\";\n parentKind: \"task\";\n taskId: string;\n };\n\nexport function createIssueManagerDate(\n value: number | null | undefined\n): Date | null {\n if (!value || !Number.isFinite(value)) {\n return null;\n }\n\n const normalized = value < 1_000_000_000_000 ? value * 1000 : value;\n const date = new Date(normalized);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\nexport function formatIssueManagerTimestamp(\n value: number | null | undefined\n): string | null {\n const date = createIssueManagerDate(value);\n return date ? formatNextopShortDateTime(date) : null;\n}\n\nexport function formatIssueManagerDate(\n value: number | null | undefined\n): string {\n const date = createIssueManagerDate(value);\n return date ? formatNextopShortDateTime(date) : \"\";\n}\n\nexport function resolveIssueManagerStatusLabel(\n copy: IssueManagerI18nRuntime,\n status: IssueManagerStatus | null | undefined\n): string {\n switch (status) {\n case \"not_started\":\n return copy.t(\"status.notStarted\");\n case \"running\":\n return copy.t(\"status.running\");\n case \"pending_acceptance\":\n return copy.t(\"status.pendingAcceptance\");\n case \"completed\":\n return copy.t(\"status.completed\");\n case \"failed\":\n return copy.t(\"status.failed\");\n case \"canceled\":\n return copy.t(\"status.canceled\");\n default:\n return copy.t(\"status.unknown\");\n }\n}\n\nexport function resolveIssueManagerPriorityLabel(\n copy: IssueManagerI18nRuntime,\n priority: IssueManagerPriority | null | undefined\n): string {\n switch (priority) {\n case \"high\":\n return copy.t(\"priority.high\");\n case \"low\":\n return copy.t(\"priority.low\");\n default:\n return copy.t(\"priority.medium\");\n }\n}\n\nexport function uniqueIssueManagerFileReferences(\n refs: readonly IssueManagerFileReference[]\n): IssueManagerFileReference[] {\n const unique = new Map<string, IssueManagerFileReference>();\n for (const ref of refs) {\n const normalizedPath = ref.path.trim();\n if (!normalizedPath || unique.has(normalizedPath)) {\n continue;\n }\n unique.set(normalizedPath, {\n displayName: ref.displayName?.trim() || undefined,\n kind: ref.kind === \"folder\" ? \"folder\" : \"file\",\n path: normalizedPath\n });\n }\n return [...unique.values()];\n}\n\nexport function parentDirectoryPath(path: string): string | null {\n const trimmed = path.trim();\n if (!trimmed || trimmed === \"/\") {\n return null;\n }\n\n const normalized =\n trimmed.endsWith(\"/\") && trimmed.length > 1\n ? trimmed.slice(0, -1)\n : trimmed;\n const index = normalized.lastIndexOf(\"/\");\n if (index <= 0) {\n return \"/\";\n }\n return normalized.slice(0, index) || \"/\";\n}\n","import type { JSX } from \"react\";\nimport {\n Badge,\n Button,\n FileCreateIcon,\n Input,\n ScrollArea,\n cn\n} from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerFileReference,\n IssueManagerIssueSummary,\n IssueManagerRunOutput,\n IssueManagerTaskSummary\n} from \"../../contracts/index.ts\";\nimport type { IssueManagerController } from \"./useIssueManagerController.ts\";\nimport {\n IssueManagerDescriptionSection,\n IssueManagerContextSection,\n IssueManagerPaneLoadingState,\n IssueManagerTaskListLoadingState\n} from \"./IssueManagerPanelParts.tsx\";\nimport { IssueManagerRichTextTextarea } from \"./IssueManagerRichTextTextarea.tsx\";\nimport {\n resolveIssueManagerCreatorLabel,\n summarizeIssueManagerContent\n} from \"./IssueManagerPanelText.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerStatusLabel\n} from \"./model.ts\";\n\nexport { IssueManagerEmptyIllustration } from \"./IssueManagerPanelParts.tsx\";\n\nexport function IssueManagerIssuePane({\n controller,\n selectedIssue,\n onDismissCreate\n}: {\n controller: IssueManagerController;\n selectedIssue: IssueManagerIssueSummary | null;\n onDismissCreate: () => void;\n}): JSX.Element {\n const copy = controller.copy;\n const isIssueTitleMissing = controller.issueDraft.title.trim().length === 0;\n const issueRefs =\n controller.issueDetail.value?.contextRefs.filter(\n (ref) => ref.parentKind === \"issue\"\n ) ?? [];\n const isCreatingIssue = controller.issueEditorMode === \"create\";\n const isEditingIssue = controller.issueEditorMode === \"edit\";\n const issueContent = selectedIssue?.content ?? \"\";\n const tasks = controller.issueDetail.value?.tasks ?? [];\n const selectedTaskId = controller.nodeState.selectedTaskId;\n const selectedTask = selectedTaskId\n ? ((controller.taskDetail.value?.task?.taskId === selectedTaskId\n ? controller.taskDetail.value.task\n : tasks.find((task) => task.taskId === selectedTaskId)) ?? null)\n : null;\n const latestRun = selectedTask\n ? (controller.taskDetail.value?.latestRun ??\n controller.taskDetail.value?.recentRuns[0] ??\n null)\n : null;\n const latestOutputs = selectedTask\n ? (controller.taskDetail.value?.latestOutputs ?? [])\n : [];\n\n if (isCreatingIssue || isEditingIssue) {\n return (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden\">\n <div className=\"flex min-h-0 flex-1 flex-col gap-[14px] overflow-y-auto px-7 py-8\">\n <div className=\"flex flex-col gap-3\">\n <div>\n <h2 className=\"m-0 text-[17px] font-semibold leading-[1.35] text-foreground\">\n {isCreatingIssue\n ? copy.t(\"actions.createIssue\")\n : copy.t(\"actions.editIssue\")}\n </h2>\n </div>\n <div className=\"flex flex-col gap-6\">\n <label className=\"flex flex-col gap-2 text-sm font-semibold text-foreground\">\n <span className=\"leading-5\">{copy.t(\"labels.title\")}</span>\n <Input\n className=\"h-10 min-h-10 rounded-lg border-border-1 bg-transparency-block px-3 text-sm font-semibold text-[var(--text-primary)] shadow-none placeholder:text-[var(--text-placeholder)]\"\n placeholder={copy.t(\"composer.issueTitlePlaceholder\")}\n value={controller.issueDraft.title}\n onChange={(event) =>\n controller.setIssueTitle(event.target.value)\n }\n />\n </label>\n <div className=\"flex min-h-0 flex-col gap-2 text-sm font-semibold text-foreground\">\n <span className=\"leading-5\">{copy.t(\"labels.content\")}</span>\n <IssueManagerRichTextTextarea\n controller={controller}\n surface=\"issue\"\n textareaClassName=\"min-h-[180px] w-full resize-none rounded-lg border border-border-1 bg-transparency-block px-4 py-3 text-sm font-normal leading-5 text-[var(--text-primary)] outline-none placeholder:text-[var(--text-placeholder)]\"\n placeholder={copy.t(\"composer.issueContentPlaceholder\")}\n value={controller.issueDraft.content}\n onChange={controller.setIssueContent}\n />\n </div>\n </div>\n </div>\n </div>\n <div className=\"shrink-0 border-t border-border-1 px-7 py-4\">\n <div className=\"flex items-center justify-end gap-4\">\n <Button\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onDismissCreate}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n disabled={isIssueTitleMissing}\n size=\"dialog\"\n type=\"button\"\n onClick={() => void controller.saveIssue()}\n >\n {copy.t(\"actions.saveIssue\")}\n </Button>\n </div>\n </div>\n </div>\n );\n }\n\n if (!selectedIssue) {\n return <div className=\"h-full min-h-0\" />;\n }\n\n return (\n <div className=\"flex min-h-0 flex-col\">\n <div className=\"min-h-0 flex-1 overflow-y-auto px-8 py-7\">\n {controller.issueDetail.isLoading &&\n controller.issueDetail.value === null ? (\n <IssueManagerPaneLoadingState />\n ) : (\n <div className=\"flex w-full max-w-[44rem] flex-col gap-9\">\n <header className=\"flex items-start justify-between gap-6\">\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"line-clamp-2 text-base font-semibold leading-6 text-foreground\">\n {selectedIssue.title}\n </h2>\n <div className=\"mt-3 flex flex-wrap items-center gap-x-5 gap-y-2 text-sm text-muted-foreground\">\n <Badge className=\"rounded-full border-transparent bg-muted px-2 py-1 text-[11px] text-muted-foreground\">\n {resolveIssueManagerStatusLabel(copy, selectedIssue.status)}\n </Badge>\n <span>\n {copy.t(\"labels.creator\")}{\" \"}\n {resolveIssueManagerCreatorLabel(selectedIssue)}\n </span>\n <span>\n {copy.t(\"labels.createdAt\")}{\" \"}\n {formatIssueManagerTimestamp(selectedIssue.createdAtUnix) ||\n \"-\"}\n </span>\n </div>\n </div>\n <div className=\"flex shrink-0 items-center gap-5 pt-1\">\n <Button\n className=\"h-auto px-0 text-sm font-semibold text-muted-foreground hover:text-foreground\"\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => controller.setIssueEditorMode(\"edit\")}\n >\n {copy.t(\"actions.edit\")}\n </Button>\n <Button\n className=\"h-auto px-0 text-sm font-semibold text-destructive hover:text-destructive\"\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => {\n void controller.deleteIssue();\n }}\n >\n {copy.t(\"actions.delete\")}\n </Button>\n </div>\n </header>\n <IssueManagerDescriptionSection\n content={issueContent}\n emptyLabel={copy.t(\"messages.issueContentEmpty\")}\n label={copy.t(\"labels.description\")}\n onOpen={controller.openReference}\n variant=\"plain\"\n />\n <IssueManagerDetailTextSection\n body={\n latestRun\n ? latestRun.summary?.trim() ||\n resolveIssueManagerStatusLabel(copy, latestRun.status)\n : copy.t(\"messages.noExecutionStatus\")\n }\n label={copy.t(\"labels.latestRunStatus\")}\n meta={\n latestRun\n ? formatIssueManagerTimestamp(\n latestRun.updatedAtUnix ?? latestRun.createdAtUnix\n ) || undefined\n : undefined\n }\n tone={latestRun?.status === \"failed\" ? \"destructive\" : \"muted\"}\n />\n <IssueManagerOutputSection\n copy={copy}\n outputs={latestOutputs}\n onOpen={controller.openReference}\n />\n {issueRefs.length > 0 ? (\n <IssueManagerContextSection\n copy={copy}\n emptyLabel={copy.t(\"messages.noIssueReferences\")}\n refs={issueRefs}\n onAdd={() => {\n void controller.attachReferences(\"issue\");\n }}\n onOpen={controller.openReference}\n onRemove={controller.removeContextRef}\n />\n ) : null}\n <IssueManagerSubtaskSection\n copy={copy}\n onCreate={controller.createTaskDraft}\n onSelectTask={controller.selectTask}\n selectedTaskId={selectedTask?.taskId ?? null}\n tasks={tasks}\n />\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction IssueManagerDetailTextSection({\n body,\n label,\n meta,\n tone = \"muted\"\n}: {\n body: string;\n label: string;\n meta?: string;\n tone?: \"destructive\" | \"muted\";\n}): JSX.Element {\n return (\n <section className=\"grid gap-2.5\">\n <h3 className=\"text-sm font-semibold text-foreground\">{label}</h3>\n <div className=\"grid gap-1.5\">\n <p\n className={cn(\n \"text-sm leading-6\",\n tone === \"destructive\"\n ? \"text-destructive\"\n : \"text-muted-foreground\"\n )}\n >\n {body}\n </p>\n {meta ? (\n <p className=\"text-xs leading-5 text-muted-foreground\">{meta}</p>\n ) : null}\n </div>\n </section>\n );\n}\n\nfunction IssueManagerOutputSection({\n copy,\n onOpen,\n outputs\n}: {\n copy: IssueManagerController[\"copy\"];\n onOpen: (reference: IssueManagerFileReference) => Promise<void>;\n outputs: readonly IssueManagerRunOutput[];\n}): JSX.Element {\n return (\n <section className=\"grid gap-2.5\">\n <h3 className=\"text-sm font-semibold text-foreground\">\n {copy.t(\"labels.executionOutputs\")}\n </h3>\n {outputs.length === 0 ? (\n <p className=\"text-sm leading-6 text-muted-foreground\">\n {copy.t(\"messages.noExecutionOutputs\")}\n </p>\n ) : (\n <div className=\"grid gap-2\">\n {outputs.map((output) => (\n <button\n className=\"flex items-start justify-between gap-4 rounded-xl border border-border/65 px-4 py-3 text-left transition-colors hover:bg-accent/18\"\n key={output.outputId}\n type=\"button\"\n onClick={() => {\n void onOpen({\n displayName: output.displayName,\n kind: \"file\",\n path: output.path\n });\n }}\n >\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-sm font-semibold text-foreground\">\n {output.displayName}\n </span>\n <span className=\"mt-1 block truncate text-xs text-muted-foreground\">\n {output.path}\n </span>\n </span>\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {formatIssueManagerTimestamp(output.createdAtUnix) || \"\"}\n </span>\n </button>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nfunction IssueManagerSubtaskSection({\n copy,\n onCreate,\n onSelectTask,\n selectedTaskId,\n tasks\n}: {\n copy: IssueManagerController[\"copy\"];\n onCreate: () => void;\n onSelectTask: (taskId: string | null) => void;\n selectedTaskId: string | null;\n tasks: readonly IssueManagerTaskSummary[];\n}): JSX.Element {\n return (\n <section className=\"grid gap-2.5\">\n <div className=\"flex items-center justify-between gap-3\">\n <h3 className=\"text-sm font-semibold text-foreground\">\n {copy.t(\"labels.subtasks\")}\n </h3>\n <Button\n className=\"px-3\"\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onCreate}\n >\n <FileCreateIcon size={14} />\n {copy.t(\"actions.add\")}\n </Button>\n </div>\n {tasks.length === 0 ? (\n <p className=\"text-sm leading-6 text-muted-foreground\">\n {copy.t(\"messages.noSubtasksForIssue\")}\n </p>\n ) : (\n <div className=\"grid gap-2\">\n {tasks.map((task) => (\n <button\n className={cn(\n \"flex items-start justify-between gap-4 rounded-xl border px-4 py-3 text-left transition-colors\",\n selectedTaskId === task.taskId\n ? \"border-border/90 bg-background-fronted\"\n : \"border-border/65 hover:bg-accent/18\"\n )}\n key={task.taskId}\n type=\"button\"\n onClick={() => onSelectTask(task.taskId)}\n >\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex min-w-0 items-center gap-2.5\">\n <span className=\"truncate text-sm font-semibold text-foreground\">\n {task.title}\n </span>\n <Badge className=\"rounded-md border-transparent bg-muted px-2 py-1 text-[11px] font-medium text-muted-foreground\">\n {resolveIssueManagerStatusLabel(copy, task.status)}\n </Badge>\n </div>\n <p className=\"mt-2 line-clamp-2 text-sm leading-6 text-muted-foreground\">\n {summarizeIssueManagerContent(\n task.content,\n copy.t(\"messages.taskContentEmpty\")\n )}\n </p>\n </div>\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {formatIssueManagerTimestamp(\n task.createdAtUnix ?? task.updatedAtUnix\n ) || \"\"}\n </span>\n </button>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nexport function IssueManagerTaskSection({\n controller,\n selectedIssue,\n selectedTaskId\n}: {\n controller: IssueManagerController;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTaskId: string | null;\n}): JSX.Element {\n const copy = controller.copy;\n const tasks = controller.issueDetail.value?.tasks ?? [];\n\n return (\n <section className=\"border-t border-border/70 bg-transparent\">\n <div className=\"flex items-center justify-between gap-4 border-b border-border/60 px-8 py-4\">\n <div>\n <h3 className=\"text-base font-semibold text-foreground\">\n {copy.t(\"labels.taskList\")}\n </h3>\n </div>\n <Button\n disabled={!selectedIssue}\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n className=\"px-3\"\n onClick={controller.createTaskDraft}\n >\n <FileCreateIcon size={14} />\n {copy.t(\"actions.createTask\")}\n </Button>\n </div>\n\n <ScrollArea className=\"h-[16rem]\">\n <div className=\"px-8 py-5\">\n {controller.issueDetail.isLoading &&\n controller.issueDetail.value === null ? (\n <IssueManagerTaskListLoadingState />\n ) : tasks.length === 0 ? (\n <div className=\"overflow-hidden rounded-lg border border-border/70 bg-transparent\">\n <div className=\"px-4 py-10 text-center\">\n <p className=\"text-sm font-semibold leading-5 text-foreground\">\n {copy.t(\"messages.noTasks\")}\n </p>\n <p className=\"mt-2 text-sm leading-5 text-muted-foreground\">\n {copy.t(\"messages.noTasksForIssueBody\")}\n </p>\n </div>\n </div>\n ) : (\n <div className=\"overflow-hidden rounded-lg border border-border/70 bg-transparent\">\n {tasks.map((task) => (\n <button\n className={cn(\n \"block w-full border-b border-border/70 px-3.5 py-3.5 text-left transition-colors last:border-b-0 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/25 focus-visible:ring-inset\",\n selectedTaskId === task.taskId\n ? \"bg-primary/[0.08]\"\n : \"bg-transparent hover:bg-accent/18\"\n )}\n key={task.taskId}\n type=\"button\"\n onClick={() => controller.selectTask(task.taskId)}\n >\n <div className=\"flex min-w-0 flex-col gap-2\">\n <div className=\"flex min-w-0 items-center justify-between gap-3\">\n <div className=\"flex min-w-0 flex-wrap items-center gap-2.5\">\n <span className=\"line-clamp-1 text-[14px] font-semibold leading-[1.3] text-foreground\">\n {task.title}\n </span>\n <Badge className=\"rounded-full border-transparent bg-muted px-2 py-1 text-[11px] text-muted-foreground\">\n {resolveIssueManagerStatusLabel(copy, task.status)}\n </Badge>\n </div>\n <p className=\"text-[12px] leading-[18px] text-muted-foreground\">\n {formatIssueManagerTimestamp(\n task.createdAtUnix ?? task.updatedAtUnix\n )}\n </p>\n </div>\n <p className=\"line-clamp-2 text-[14px] leading-[1.6] text-muted-foreground\">\n {summarizeIssueManagerContent(\n task.content,\n copy.t(\"messages.taskContentEmpty\")\n )}\n </p>\n </div>\n </button>\n ))}\n </div>\n )}\n </div>\n </ScrollArea>\n </section>\n );\n}\n","import { useEffect, useRef, useState, type JSX } from \"react\";\nimport { RichTextReadonlyContent } from \"@nextop-os/ui-rich-text/editor\";\nimport {\n Badge,\n Button,\n DirectoryIcon,\n FileCreateIcon,\n FileIcon,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SparkIcon,\n cn\n} from \"@nextop-os/ui-system\";\nimport { normalizeIssueManagerContent } from \"../../core/index.ts\";\nimport type {\n IssueManagerContextRef,\n IssueManagerFileReference,\n IssueManagerRun,\n IssueManagerRunOutput\n} from \"../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\nimport type { IssueManagerController } from \"./useIssueManagerController.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerStatusLabel\n} from \"./model.ts\";\n\nconst workspaceDockTaskImage = new URL(\n \"../../assets/workspace-dock-task.png\",\n import.meta.url\n).href;\n\nexport function IssueManagerEmptyIllustration(): 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={workspaceDockTaskImage}\n />\n );\n}\n\nexport function IssueManagerDescriptionSection({\n content,\n emptyLabel,\n label,\n minHeightClass = \"min-h-[14rem]\",\n onOpen,\n variant = \"card\"\n}: {\n content: string;\n emptyLabel: string;\n label: string;\n minHeightClass?: string;\n onOpen?: (reference: IssueManagerFileReference) => Promise<void>;\n variant?: \"card\" | \"plain\";\n}): JSX.Element {\n const contentRef = useRef<HTMLDivElement | null>(null);\n const [isOverflowing, setIsOverflowing] = useState(false);\n const normalizedContent = normalizeIssueManagerContent(content).trim();\n\n useEffect(() => {\n if (variant === \"plain\") {\n setIsOverflowing(false);\n return;\n }\n if (!normalizedContent) {\n setIsOverflowing(false);\n return;\n }\n\n const contentElement = contentRef.current;\n if (!contentElement) {\n return;\n }\n\n const measure = () => {\n setIsOverflowing(\n contentElement.scrollHeight > contentElement.clientHeight + 1\n );\n };\n\n measure();\n if (typeof ResizeObserver === \"undefined\") {\n return;\n }\n\n const observer = new ResizeObserver(() => {\n measure();\n });\n observer.observe(contentElement);\n return () => {\n observer.disconnect();\n };\n }, [normalizedContent, variant]);\n\n if (variant === \"plain\") {\n return (\n <section className=\"grid gap-2\">\n <span className=\"text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {label}\n </span>\n {normalizedContent ? (\n <div className=\"max-w-3xl text-sm leading-5 text-text-secondary\">\n <IssueManagerDescriptionContent\n content={normalizedContent}\n onOpen={onOpen}\n />\n </div>\n ) : (\n <p className=\"text-sm leading-5 text-text-secondary\">{emptyLabel}</p>\n )}\n </section>\n );\n }\n\n return (\n <section className=\"grid gap-2\">\n <span className=\"text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {label}\n </span>\n <div\n className={cn(\n \"relative min-w-0 rounded-lg border border-border-1 bg-transparent px-4 py-3\",\n minHeightClass\n )}\n >\n <div\n className={cn(\n \"max-h-[18rem] overflow-y-auto pr-2 text-sm leading-5 text-text-secondary\",\n isOverflowing && \"pb-8\"\n )}\n ref={contentRef}\n >\n {normalizedContent ? (\n <IssueManagerDescriptionContent\n content={normalizedContent}\n onOpen={onOpen}\n />\n ) : (\n <p className=\"text-text-secondary\">{emptyLabel}</p>\n )}\n </div>\n {isOverflowing ? (\n <div\n className=\"pointer-events-none absolute right-0 bottom-1 left-0 h-10\"\n style={{\n background:\n \"linear-gradient(to top, var(--background-panel), color-mix(in srgb, var(--background-panel) 80%, transparent), transparent)\"\n }}\n />\n ) : null}\n </div>\n </section>\n );\n}\n\nexport function IssueManagerTaskEmptyState({\n body,\n ctaLabel,\n onCreate,\n title\n}: {\n body: string;\n ctaLabel: string;\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 <IssueManagerEmptyIllustration />\n <p className=\"text-lg font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {title}\n </p>\n <p className=\"max-w-[420px] text-base leading-[1.3] text-[var(--text-secondary)]\">\n {body}\n </p>\n <Button\n className=\"mt-2 gap-2 px-[18px]\"\n size=\"dialog\"\n type=\"button\"\n onClick={onCreate}\n >\n <FileCreateIcon size={16} />\n {ctaLabel}\n </Button>\n </div>\n </div>\n );\n}\n\nexport function IssueManagerRunActionTrigger({\n controller,\n disabled = false,\n iconSize = 16,\n triggerClassName\n}: {\n controller: IssueManagerController;\n disabled?: boolean;\n iconSize?: number;\n triggerClassName?: string;\n}): JSX.Element {\n const [resetToken, setResetToken] = useState(0);\n\n return (\n <Select\n key={`${controller.nodeState.selectedAgentProvider}:${resetToken}`}\n disabled={controller.isRunningTask || disabled}\n onValueChange={(provider) => {\n setResetToken((current) => current + 1);\n void controller.runTask(provider);\n }}\n >\n <SelectTrigger\n aria-label={controller.copy.t(\"actions.askAgentToRun\")}\n className={triggerClassName}\n >\n <span className=\"flex min-w-0 flex-1 items-center gap-2\">\n <SparkIcon size={iconSize} />\n <span className=\"truncate\">\n {controller.copy.t(\"actions.askAgentToRun\")}\n </span>\n </span>\n </SelectTrigger>\n <SelectContent style={{ zIndex: \"var(--z-panel-popover)\" }}>\n {controller.providerOptions.map((provider) => (\n <SelectItem key={provider} value={provider}>\n {provider}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n );\n}\n\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\nexport function IssueManagerContextSection({\n copy,\n emptyLabel,\n onAdd,\n onOpen,\n onRemove,\n refs\n}: {\n copy: IssueManagerI18nRuntime;\n emptyLabel: string;\n onAdd: () => void;\n onOpen: (reference: IssueManagerFileReference) => Promise<void>;\n onRemove: (ref: IssueManagerContextRef) => Promise<void>;\n refs: readonly IssueManagerContextRef[];\n}): JSX.Element {\n return (\n <section className=\"rounded-lg border border-border-1 bg-transparent px-4 py-4\">\n <div className=\"mb-3 flex items-center justify-between gap-3\">\n <h4 className=\"text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.contextReferences\")}\n </h4>\n <Button\n className=\"px-3\"\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onAdd}\n >\n {copy.t(\"actions.addReferences\")}\n </Button>\n </div>\n {refs.length === 0 ? (\n <p className=\"text-sm leading-5 text-text-secondary\">{emptyLabel}</p>\n ) : (\n <div className=\"grid gap-2.5\">\n {refs.map((ref) => (\n <div\n className=\"flex items-center justify-between gap-3 rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3\"\n key={ref.contextRefId}\n >\n <button\n className=\"flex min-w-0 flex-1 items-center gap-3 text-left\"\n type=\"button\"\n onClick={() => {\n void onOpen({\n displayName: ref.displayName,\n kind: ref.path.endsWith(\"/\") ? \"folder\" : \"file\",\n path: ref.path\n });\n }}\n >\n {ref.path.endsWith(\"/\") ? (\n <DirectoryIcon\n className=\"shrink-0 text-text-secondary\"\n size={16}\n />\n ) : (\n <FileIcon\n className=\"shrink-0 text-text-secondary\"\n size={16}\n />\n )}\n <span className=\"min-w-0\">\n <span className=\"block truncate text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {ref.displayName}\n </span>\n <span className=\"block truncate text-xs leading-[1.55] text-text-secondary\">\n {ref.path}\n </span>\n </span>\n </button>\n <Button\n className=\"h-7 rounded-md px-2 text-[13px] font-semibold text-text-secondary hover:text-[var(--text-primary)]\"\n size=\"sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={() => {\n void onRemove(ref);\n }}\n >\n {copy.t(\"actions.removeReference\")}\n </Button>\n </div>\n ))}\n </div>\n )}\n </section>\n );\n}\n\nexport function IssueManagerRunPanels({\n copy,\n onOpen,\n outputs,\n recentRuns\n}: {\n copy: IssueManagerI18nRuntime;\n onOpen: (reference: IssueManagerFileReference) => Promise<void>;\n outputs: readonly IssueManagerRunOutput[];\n recentRuns: readonly IssueManagerRun[];\n}): JSX.Element {\n return (\n <div className=\"grid gap-4\">\n <section className=\"rounded-lg border border-border-1 bg-transparent px-4 py-4\">\n <h4 className=\"mb-3 text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.recentRuns\")}\n </h4>\n {recentRuns.length === 0 ? (\n <p className=\"text-sm leading-5 text-text-secondary\">\n {copy.t(\"messages.noRecentRuns\")}\n </p>\n ) : (\n <div className=\"grid gap-2.5\">\n {recentRuns.map((run) => (\n <div\n className=\"rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3\"\n key={run.runId}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <p className=\"truncate text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {run.summary || run.runId}\n </p>\n <p className=\"mt-1 text-xs leading-[1.55] text-text-secondary\">\n {formatIssueManagerTimestamp(\n run.updatedAtUnix ?? run.createdAtUnix\n )}\n </p>\n </div>\n <Badge className=\"rounded-full border-transparent bg-transparency-block px-2.5 py-1 text-xs text-text-secondary\">\n {resolveIssueManagerStatusLabel(copy, run.status)}\n </Badge>\n </div>\n {run.errorMessage ? (\n <p className=\"mt-2 text-xs text-destructive\">\n {run.errorMessage}\n </p>\n ) : null}\n </div>\n ))}\n </div>\n )}\n </section>\n\n <section className=\"rounded-lg border border-border-1 bg-transparent px-4 py-4\">\n <h4 className=\"mb-3 text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.outputs\")}\n </h4>\n {outputs.length === 0 ? (\n <p className=\"text-sm leading-5 text-text-secondary\">\n {copy.t(\"messages.noOutputs\")}\n </p>\n ) : (\n <div className=\"grid gap-2.5\">\n {outputs.map((output) => (\n <button\n className=\"rounded-lg border border-[var(--border-2)] bg-transparent px-3.5 py-3 text-left transition-colors hover:bg-transparency-hover\"\n key={output.outputId}\n type=\"button\"\n onClick={() => {\n void onOpen({\n displayName: output.displayName,\n kind: \"file\",\n path: output.path\n });\n }}\n >\n <p className=\"truncate text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {output.displayName}\n </p>\n <p className=\"mt-1 truncate text-xs leading-[1.55] text-text-secondary\">\n {output.path}\n </p>\n </button>\n ))}\n </div>\n )}\n </section>\n </div>\n );\n}\n\nexport function IssueManagerPaneLoadingState(): JSX.Element {\n return (\n <div\n className=\"mx-auto flex w-full max-w-4xl flex-col gap-6\"\n aria-hidden=\"true\"\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 className=\"grid gap-5\" aria-hidden=\"true\">\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 { useMemo, type JSX } from \"react\";\nimport { RichTextAtEditor } from \"@nextop-os/ui-rich-text/editor\";\nimport { Button, LinkIcon, cn } from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerController,\n IssueManagerRichTextSurface\n} from \"./useIssueManagerController.ts\";\n\nexport function IssueManagerRichTextTextarea({\n controller,\n onChange,\n placeholder,\n surface,\n textareaClassName,\n value\n}: {\n controller: IssueManagerController;\n onChange: (value: string) => void;\n placeholder?: string;\n surface: IssueManagerRichTextSurface;\n textareaClassName?: string;\n value: string;\n}): JSX.Element {\n const providers = useMemo(\n () => controller.resolveRichTextAtProviders(surface),\n [controller, surface]\n );\n const showReferenceAction = controller.canReferenceWorkspaceFiles;\n\n return (\n <RichTextAtEditor\n maxResults={8}\n minQueryLength={1}\n providers={providers}\n removeDecorationAriaLabel={controller.copy.t(\"actions.removeReference\")}\n textareaClassName={cn(textareaClassName, showReferenceAction && \"pb-14\")}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n overlay={\n showReferenceAction ? (\n <div className=\"pointer-events-none absolute inset-x-4 bottom-3 z-10 flex\">\n <Button\n className=\"pointer-events-auto\"\n size=\"sm\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n void controller.insertReferences(surface);\n }}\n >\n <LinkIcon size={14} />\n {controller.copy.t(\"actions.referenceWorkspaceFiles\")}\n </Button>\n </div>\n ) : null\n }\n />\n );\n}\n","import { extractIssueManagerPlainTextFromContent } from \"../../core/index.ts\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../contracts/index.ts\";\n\nexport function summarizeIssueManagerContent(\n content: string | null | undefined,\n fallback: string\n): string {\n const plainText = extractIssueManagerPlainTextFromContent(\n content ?? \"\"\n ).trim();\n if (!plainText) {\n return fallback;\n }\n if (plainText.length <= 120) {\n return plainText;\n }\n return `${plainText.slice(0, 117)}...`;\n}\n\nexport function resolveTaskCreatorLabel(task: IssueManagerTaskSummary): string {\n return resolveIssueManagerCreatorLabel(task);\n}\n\nexport function resolveIssueManagerCreatorLabel(\n entity:\n | Pick<IssueManagerIssueSummary, \"creatorDisplayName\" | \"creatorUserId\">\n | Pick<IssueManagerTaskSummary, \"creatorDisplayName\" | \"creatorUserId\">\n): string {\n return entity.creatorDisplayName?.trim() || entity.creatorUserId;\n}\n","import type { JSX } from \"react\";\nimport {\n Button,\n Input,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n UploadIcon\n} from \"@nextop-os/ui-system\";\nimport type { IssueManagerIssueSummary } from \"../../contracts/index.ts\";\nimport { IssueManagerRichTextTextarea } from \"./IssueManagerRichTextTextarea.tsx\";\nimport type { IssueManagerController } from \"./useIssueManagerController.ts\";\nimport { resolveIssueManagerPriorityLabel } from \"./model.ts\";\n\nconst taskPriorityOptions = [\"high\", \"medium\", \"low\"] as const;\n\nexport function IssueManagerTaskComposerPane({\n controller,\n onCancel,\n selectedIssue\n}: {\n controller: IssueManagerController;\n onCancel: () => void;\n selectedIssue: IssueManagerIssueSummary | null;\n}): JSX.Element {\n const copy = controller.copy;\n const isTaskTitleMissing = controller.taskDraft.title.trim().length === 0;\n const showAttachmentActions =\n controller.canUploadWorkspaceFiles || controller.canReferenceWorkspaceFiles;\n\n return (\n <div className=\"flex h-full min-h-0 flex-col overflow-hidden\">\n <div className=\"min-h-0 flex-1 overflow-y-auto px-7 py-8\">\n <div className=\"flex w-full max-w-[76rem] flex-col gap-8\">\n <div className=\"flex items-start justify-between gap-4\">\n <h2 className=\"text-[17px] font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {copy.t(\"actions.addSubtask\")}\n </h2>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-sm text-text-secondary\">\n {copy.t(\"labels.priority\")}\n </span>\n <Select\n value={controller.taskDraft.priority}\n onValueChange={(value) => controller.setTaskPriority(value)}\n >\n <SelectTrigger\n aria-label={copy.t(\"labels.priority\")}\n className=\"min-w-28 rounded-lg border-border-1 bg-transparency-block text-sm\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent style={{ zIndex: \"var(--z-panel-popover)\" }}>\n {taskPriorityOptions.map((priority) => (\n <SelectItem key={priority} value={priority}>\n {resolveIssueManagerPriorityLabel(copy, priority)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <label className=\"grid gap-2\">\n <span className=\"text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.title\")}\n </span>\n <Input\n className=\"h-10 rounded-lg border-0 bg-transparency-block px-3 text-sm font-semibold text-[var(--text-primary)] shadow-none placeholder:text-[var(--text-placeholder)]\"\n placeholder={copy.t(\"composer.subtaskTitlePlaceholder\")}\n value={controller.taskDraft.title}\n onChange={(event) => controller.setTaskTitle(event.target.value)}\n />\n </label>\n\n <section className=\"grid gap-2\">\n <span className=\"text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.requirementDescription\")}\n </span>\n <div className=\"overflow-hidden rounded-lg border border-border-1 bg-transparency-block\">\n <IssueManagerRichTextTextarea\n controller={controller}\n surface=\"task\"\n textareaClassName=\"min-h-[20rem] w-full resize-none border-0 bg-transparent px-4 py-3 text-sm leading-5 text-[var(--text-primary)] outline-none placeholder:text-[var(--text-placeholder)]\"\n placeholder={copy.t(\"composer.subtaskContentPlaceholder\")}\n value={controller.taskDraft.content}\n onChange={controller.setTaskContent}\n />\n {showAttachmentActions ? (\n <div className=\"flex flex-wrap items-center gap-3 border-t border-border-1 px-4 py-3\">\n {controller.canUploadWorkspaceFiles ? (\n <Button\n className=\"px-3\"\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n void controller.uploadReferences(\"task\", \"files\");\n }}\n >\n <UploadIcon size={16} />\n {copy.t(\"actions.uploadFiles\")}\n </Button>\n ) : null}\n {controller.canUploadWorkspaceFiles ? (\n <Button\n className=\"px-3\"\n size=\"dialog\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => {\n void controller.uploadReferences(\"task\", \"folder\");\n }}\n >\n <UploadIcon size={16} />\n {copy.t(\"actions.uploadFolder\")}\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n </section>\n </div>\n </div>\n\n <div className=\"shrink-0 border-t border-border-1 px-7 py-4\">\n <div className=\"flex items-center justify-end gap-3\">\n <Button\n size=\"default\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onCancel}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n disabled={!selectedIssue || isTaskTitleMissing}\n size=\"default\"\n type=\"button\"\n onClick={() => void controller.saveTask()}\n >\n {copy.t(\"actions.saveSubtask\")}\n </Button>\n </div>\n </div>\n </div>\n );\n}\n","import type { JSX } from \"react\";\nimport {\n Badge,\n Button,\n CloseIcon,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n Input,\n ScrollArea,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n SparkIcon\n} from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerIssueSummary,\n IssueManagerTaskSummary\n} from \"../../contracts/index.ts\";\nimport {\n IssueManagerContextSection,\n IssueManagerDescriptionSection,\n IssueManagerRunActionTrigger,\n IssueManagerRunPanels,\n IssueManagerTaskDrawerLoadingState\n} from \"./IssueManagerPanelParts.tsx\";\nimport { IssueManagerRichTextTextarea } from \"./IssueManagerRichTextTextarea.tsx\";\nimport { resolveTaskCreatorLabel } from \"./IssueManagerPanelText.ts\";\nimport {\n formatIssueManagerTimestamp,\n resolveIssueManagerPriorityLabel,\n resolveIssueManagerStatusLabel\n} from \"./model.ts\";\nimport type { IssueManagerController } from \"./useIssueManagerController.ts\";\n\nconst taskPriorityOptions = [\"high\", \"medium\", \"low\"] as const;\n\nexport function IssueManagerTaskDrawer({\n controller,\n selectedIssue,\n selectedTask,\n onClose\n}: {\n controller: IssueManagerController;\n selectedIssue: IssueManagerIssueSummary | null;\n selectedTask: IssueManagerTaskSummary | null;\n onClose: () => void;\n}): JSX.Element {\n const copy = controller.copy;\n const isCreate = controller.taskEditorMode === \"create\";\n const isEdit = controller.taskEditorMode === \"edit\";\n const isRead = !isCreate && !isEdit;\n const taskRefs =\n controller.taskDetail.value?.contextRefs.filter(\n (ref) => ref.parentKind === \"task\"\n ) ?? [];\n const isTaskTitleMissing = controller.taskDraft.title.trim().length === 0;\n const title =\n isCreate || isEdit\n ? isCreate\n ? copy.t(\"actions.createTask\")\n : copy.t(\"actions.editTask\")\n : selectedTask?.title || copy.t(\"labels.taskDetails\");\n const taskContent = selectedTask?.content ?? \"\";\n\n return (\n <div\n className=\"absolute inset-0 z-20 flex justify-end bg-[var(--backdrop)] backdrop-blur-[1px]\"\n onClick={onClose}\n >\n <aside\n className=\"flex h-full w-[34rem] max-w-[92vw] flex-col border-l border-border-1 bg-background-panel text-[var(--text-primary)] shadow-[-20px_0_60px_var(--shadow-elevated)]\"\n onClick={(event) => event.stopPropagation()}\n >\n <div className=\"flex items-start justify-between gap-4 border-b border-border-1 px-7 py-5\">\n <div className=\"min-w-0 flex-1\">\n {isRead && selectedTask ? (\n <div className=\"grid min-w-0 gap-2\">\n <h3 className=\"line-clamp-3 text-sm font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {title}\n </h3>\n </div>\n ) : (\n <h3 className=\"line-clamp-2 text-[17px] font-semibold leading-[1.35] text-[var(--text-primary)]\">\n {title}\n </h3>\n )}\n {isRead && selectedTask ? (\n <div className=\"mt-2 flex min-w-0 items-center overflow-hidden text-sm leading-[1.55] text-text-secondary\">\n <Badge className=\"shrink-0 rounded-full border-transparent bg-[var(--accent-bg)] px-2.5 py-1 text-xs text-[var(--text-primary)]\">\n {resolveIssueManagerStatusLabel(copy, selectedTask.status)}\n </Badge>\n <span className=\"mx-3 h-[13px] w-px shrink-0 bg-border-1\" />\n <Badge className=\"shrink-0 rounded-full border-transparent bg-transparency-block px-2.5 py-1 text-xs text-text-secondary\">\n {resolveIssueManagerPriorityLabel(\n copy,\n selectedTask.priority\n )}\n </Badge>\n <span className=\"mx-3 h-[13px] w-px shrink-0 bg-border-1\" />\n <span>\n {copy.t(\"labels.updatedAt\")}{\" \"}\n {formatIssueManagerTimestamp(\n selectedTask.updatedAtUnix ?? selectedTask.createdAtUnix\n ) || \"-\"}\n </span>\n <span className=\"mx-3 h-[13px] w-px shrink-0 bg-border-1\" />\n <span className=\"min-w-0 truncate\">\n {resolveTaskCreatorLabel(selectedTask)}\n </span>\n </div>\n ) : null}\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {isRead && selectedTask ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n aria-label={copy.t(\"actions.moreActions\")}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n >\n <span\n aria-hidden=\"true\"\n className=\"text-base leading-none tracking-[0.18em] text-text-secondary\"\n >\n ...\n </span>\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" sideOffset={8}>\n <DropdownMenuItem\n onClick={() => controller.setTaskEditorMode(\"edit\")}\n >\n {copy.t(\"actions.editTask\")}\n </DropdownMenuItem>\n <DropdownMenuItem\n variant=\"destructive\"\n onClick={() => {\n void controller.deleteTask();\n }}\n >\n {copy.t(\"actions.deleteTask\")}\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n ) : null}\n <Button\n aria-label={copy.t(\"actions.cancel\")}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={onClose}\n >\n <CloseIcon size={16} />\n </Button>\n </div>\n </div>\n\n <ScrollArea className=\"min-h-0 flex-1\">\n <div className=\"flex flex-col gap-5 px-7 py-6\">\n {controller.taskDetail.isLoading &&\n !isCreate &&\n controller.taskDetail.value === null ? (\n <IssueManagerTaskDrawerLoadingState />\n ) : isCreate || isEdit ? (\n <>\n <div className=\"grid gap-5\">\n <label className=\"grid gap-2\">\n <span className=\"text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.title\")}\n </span>\n <Input\n className=\"h-10 rounded-lg border-border-1 bg-transparency-block text-sm font-semibold text-[var(--text-primary)] shadow-none placeholder:text-[var(--text-placeholder)]\"\n placeholder={copy.t(\"composer.taskTitlePlaceholder\")}\n value={controller.taskDraft.title}\n onChange={(event) =>\n controller.setTaskTitle(event.target.value)\n }\n />\n </label>\n <div className=\"flex flex-wrap items-center gap-3\">\n <div className=\"flex items-center gap-3\">\n <span className=\"text-sm font-medium text-text-secondary\">\n {copy.t(\"labels.priority\")}\n </span>\n <Select\n value={controller.taskDraft.priority}\n onValueChange={(value) =>\n controller.setTaskPriority(value)\n }\n >\n <SelectTrigger\n aria-label={copy.t(\"labels.priority\")}\n className=\"min-w-28 rounded-lg border-border-1 bg-transparency-block text-sm\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent\n style={{ zIndex: \"var(--z-panel-popover)\" }}\n >\n {taskPriorityOptions.map((priority) => (\n <SelectItem key={priority} value={priority}>\n {resolveIssueManagerPriorityLabel(copy, priority)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n <div className=\"grid gap-2\">\n <span className=\"text-sm font-semibold leading-5 text-[var(--text-primary)]\">\n {copy.t(\"labels.content\")}\n </span>\n <IssueManagerRichTextTextarea\n controller={controller}\n surface=\"task\"\n textareaClassName=\"min-h-[12rem] w-full resize-none rounded-lg border border-border-1 bg-transparency-block px-4 py-3 text-sm leading-5 text-[var(--text-primary)] outline-none placeholder:text-[var(--text-placeholder)]\"\n placeholder={copy.t(\"composer.taskContentPlaceholder\")}\n value={controller.taskDraft.content}\n onChange={controller.setTaskContent}\n />\n </div>\n </div>\n\n <IssueManagerContextSection\n copy={copy}\n emptyLabel={copy.t(\"messages.noTaskReferences\")}\n refs={taskRefs}\n onAdd={() => {\n void controller.attachReferences(\"task\");\n }}\n onOpen={controller.openReference}\n onRemove={controller.removeContextRef}\n />\n\n {!isCreate ? (\n <IssueManagerRunPanels\n copy={copy}\n outputs={controller.taskDetail.value?.latestOutputs ?? []}\n recentRuns={controller.taskDetail.value?.recentRuns ?? []}\n onOpen={controller.openReference}\n />\n ) : null}\n </>\n ) : (\n <>\n <IssueManagerDescriptionSection\n content={taskContent}\n emptyLabel={copy.t(\"messages.taskContentEmpty\")}\n label={copy.t(\"labels.content\")}\n minHeightClass=\"min-h-[8rem]\"\n onOpen={controller.openReference}\n />\n\n <IssueManagerContextSection\n copy={copy}\n emptyLabel={copy.t(\"messages.noTaskReferences\")}\n refs={taskRefs}\n onAdd={() => {\n void controller.attachReferences(\"task\");\n }}\n onOpen={controller.openReference}\n onRemove={controller.removeContextRef}\n />\n\n <IssueManagerRunPanels\n copy={copy}\n outputs={controller.taskDetail.value?.latestOutputs ?? []}\n recentRuns={controller.taskDetail.value?.recentRuns ?? []}\n onOpen={controller.openReference}\n />\n </>\n )}\n </div>\n </ScrollArea>\n\n {isRead && selectedTask ? (\n <div className=\"border-t border-border-1 px-7 py-4\">\n <div className=\"flex items-center justify-between gap-3\">\n <IssueManagerRunActionTrigger\n controller={controller}\n iconSize={15}\n triggerClassName=\"min-w-[11rem] rounded-lg border-border-1 bg-transparency-block px-3.5 py-2 text-sm\"\n />\n <Button\n className=\"shrink-0 px-4\"\n size=\"dialog\"\n type=\"button\"\n onClick={() => {\n void controller.shareSelection();\n }}\n >\n {copy.t(\"actions.inviteCollaborator\")}\n </Button>\n </div>\n </div>\n ) : isCreate || isEdit ? (\n <div className=\"border-t border-border-1 px-7 py-4\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex items-center gap-2\">\n {!isCreate && selectedTask ? (\n <Button\n size=\"default\"\n type=\"button\"\n variant=\"destructive\"\n onClick={() => {\n void controller.deleteTask();\n }}\n >\n {copy.t(\"actions.deleteTask\")}\n </Button>\n ) : null}\n </div>\n <div className=\"flex items-center gap-3\">\n <Button\n size=\"default\"\n type=\"button\"\n variant=\"secondary\"\n onClick={() => controller.setTaskEditorMode(\"read\")}\n >\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n disabled={!selectedIssue || isTaskTitleMissing}\n size=\"default\"\n type=\"button\"\n onClick={() => void controller.saveTask()}\n >\n <SparkIcon size={16} />\n {copy.t(\"actions.saveTask\")}\n </Button>\n </div>\n </div>\n </div>\n ) : null}\n </aside>\n </div>\n );\n}\n","import {\n useEffect,\n type HTMLAttributes,\n type JSX,\n type ReactNode\n} from \"react\";\nimport type { RichTextAtProvider } from \"@nextop-os/ui-rich-text/types\";\nimport { Button, PanelIcon, cn } from \"@nextop-os/ui-system\";\nimport type { IssueManagerNodeState } from \"../contracts/index.ts\";\nimport type { IssueManagerFeature } from \"../core/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../i18n/issueManagerI18n.ts\";\nimport {\n useIssueManagerController,\n type IssueManagerRichTextSurface\n} from \"./internal/useIssueManagerController.ts\";\nimport { IssueManagerReferencePicker } from \"./internal/IssueManagerReferencePicker.tsx\";\nimport { IssueManagerShell } from \"./internal/IssueManagerShell.tsx\";\n\nexport interface IssueManagerNodeProps {\n feature: IssueManagerFeature;\n nodeId: string;\n onStateChange?: (state: IssueManagerNodeState) => void;\n resolveRichTextAtProviders?: (input: {\n surface: IssueManagerRichTextSurface;\n workspaceId: string;\n }) => readonly RichTextAtProvider[];\n state?: Partial<IssueManagerNodeState> | null;\n workspaceId: string;\n}\n\nexport function IssueManagerNode({\n feature,\n nodeId,\n onStateChange,\n resolveRichTextAtProviders,\n state,\n workspaceId\n}: IssueManagerNodeProps): JSX.Element {\n const controller = useIssueManagerController({\n feature,\n onStateChange,\n resolveRichTextAtProviders,\n state,\n workspaceId\n });\n const selectedIssue = resolveSelectedIssue(controller);\n const selectedTask = resolveSelectedTask(controller);\n\n useEffect(() => {\n if (typeof window === \"undefined\") {\n return undefined;\n }\n\n const handleTaskListCollapsedChange = (event: Event) => {\n const detail = (event as CustomEvent<IssueManagerTaskListCollapsedDetail>)\n .detail;\n if (detail?.nodeId !== nodeId) {\n return;\n }\n controller.setTaskListCollapsed(detail.collapsed);\n };\n\n window.addEventListener(\n issueManagerTaskListCollapsedEvent,\n handleTaskListCollapsedChange\n );\n return () => {\n window.removeEventListener(\n issueManagerTaskListCollapsedEvent,\n handleTaskListCollapsedChange\n );\n };\n }, [controller, nodeId]);\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 selectedIssue={selectedIssue}\n selectedTask={selectedTask}\n onCloseTaskDrawer={() => {\n controller.setTaskEditorMode(\"read\");\n controller.selectTask(null);\n }}\n onDismissIssueCreate={() => {\n controller.setIssueEditorMode(\"read\");\n }}\n />\n\n <IssueManagerReferencePicker\n copy={controller.copy}\n fileAdapter={feature.fileAdapter}\n open={controller.referenceTarget !== null}\n workspaceId={workspaceId}\n onClose={() => controller.setReferenceTarget(null)}\n onConfirm={(refs) => {\n void controller.submitReferenceSelection(refs);\n }}\n />\n </section>\n );\n}\n\ninterface IssueManagerTaskListCollapsedDetail {\n collapsed: boolean;\n nodeId: string;\n}\n\nconst issueManagerTaskListCollapsedEvent =\n \"nextop:issue-manager-task-list-collapsed\";\n\nexport function dispatchIssueManagerTaskListCollapsed(input: {\n collapsed: boolean;\n nodeId: string;\n}): void {\n if (typeof window === \"undefined\") {\n return;\n }\n\n window.dispatchEvent(\n new CustomEvent<IssueManagerTaskListCollapsedDetail>(\n issueManagerTaskListCollapsedEvent,\n {\n detail: input\n }\n )\n );\n}\n\nexport interface IssueManagerNodeHeaderProps extends HTMLAttributes<HTMLElement> {\n copy: IssueManagerI18nRuntime;\n defaultActions?: ReactNode;\n isSidebarAutoCollapsed: boolean;\n isSidebarCollapsed: boolean;\n onToggleSidebar: () => void;\n title?: string;\n}\n\nexport function IssueManagerNodeHeader({\n className,\n copy,\n defaultActions,\n isSidebarAutoCollapsed,\n isSidebarCollapsed,\n onToggleSidebar,\n title,\n ...headerProps\n}: IssueManagerNodeHeaderProps): JSX.Element {\n const toggleLabel = isSidebarCollapsed\n ? copy.t(\"actions.expandIssueList\")\n : copy.t(\"actions.collapseIssueList\");\n\n return (\n <header\n {...headerProps}\n className={cn(\n \"flex h-full min-h-0 items-center justify-between gap-3 bg-[var(--background-panel)] px-2 pl-3\",\n className\n )}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"min-w-0 truncate text-[13px] font-semibold leading-5 text-[var(--text-primary)]\">\n {title?.trim() || copy.t(\"title\")}\n </span>\n <Button\n aria-label={toggleLabel}\n className=\"rounded-md\"\n data-issue-manager-sidebar-auto-collapsed={\n isSidebarAutoCollapsed ? \"true\" : undefined\n }\n data-issue-manager-sidebar-collapsed={\n isSidebarCollapsed ? \"true\" : undefined\n }\n size=\"icon-sm\"\n title={toggleLabel}\n type=\"button\"\n variant=\"chrome\"\n onClick={(event) => {\n event.stopPropagation();\n onToggleSidebar();\n }}\n onDoubleClick={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n <PanelIcon className=\"size-[18px]\" />\n </Button>\n </div>\n <div\n className=\"flex flex-none items-center gap-1\"\n onDoubleClick={(event) => event.stopPropagation()}\n onPointerDown={(event) => event.stopPropagation()}\n >\n {defaultActions}\n </div>\n </header>\n );\n}\n\nfunction resolveSelectedIssue(\n controller: ReturnType<typeof useIssueManagerController>\n) {\n const issueId = controller.nodeState.selectedIssueId;\n if (!issueId) {\n return null;\n }\n return (\n controller.issueDetail.value?.issue ??\n controller.issues.value.find((issue) => issue.issueId === issueId) ??\n null\n );\n}\n\nfunction resolveSelectedTask(\n controller: ReturnType<typeof useIssueManagerController>\n) {\n const taskId = controller.nodeState.selectedTaskId;\n if (!taskId) {\n return null;\n }\n return (\n controller.taskDetail.value?.task ??\n controller.issueDetail.value?.tasks.find(\n (task) => task.taskId === taskId\n ) ??\n null\n );\n}\n","import { useDeferredValue, useEffect, useState } from \"react\";\nimport type { RichTextAtProvider } from \"@nextop-os/ui-rich-text/types\";\nimport type {\n IssueManagerContextRef,\n IssueManagerFileAdapter,\n IssueManagerFileReference,\n IssueManagerIssueDetail,\n IssueManagerIssueSummary,\n IssueManagerNodeState,\n IssueManagerPriority,\n IssueManagerTaskDetail\n} from \"../../contracts/index.ts\";\nimport {\n normalizeIssueManagerNodeState,\n type IssueManagerFeature\n} from \"../../core/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\nimport { createIssueManagerControllerActions } from \"./controllerActions.ts\";\nimport type {\n AsyncCollectionState,\n IssueDraft,\n TaskDraft\n} from \"./controllerTypes.ts\";\nimport { resolveIssueManagerErrorMessage } from \"./controllerUtils.ts\";\nimport {\n applyIssueManagerIssueEditorModeToNodeState,\n applyIssueManagerIssueDetailResultToNodeState,\n applyIssueManagerIssueListResultToNodeState,\n applyIssueManagerIssueSelection,\n applyIssueManagerTaskEditorModeToNodeState,\n applyIssueManagerTaskSelection,\n createIssueManagerIssueDraftFromNodeState,\n createIssueManagerTaskDraftFromNodeState,\n persistIssueManagerIssueDraftContent,\n persistIssueManagerIssueDraftTitle,\n persistIssueManagerTaskDraftContent,\n persistIssueManagerTaskDraftTitle,\n syncIssueManagerIssueDraftFromDetail,\n syncIssueManagerTaskDraftFromDetail\n} from \"./controllerState.ts\";\nimport type {\n IssueManagerEditorMode,\n IssueManagerReferenceTarget\n} from \"./model.ts\";\n\nexport type IssueManagerRichTextSurface = \"issue\" | \"task\";\n\nexport interface UseIssueManagerControllerInput {\n feature: IssueManagerFeature;\n onStateChange?: (state: IssueManagerNodeState) => void;\n resolveRichTextAtProviders?: (input: {\n surface: IssueManagerRichTextSurface;\n workspaceId: string;\n }) => readonly RichTextAtProvider[];\n state?: Partial<IssueManagerNodeState> | null;\n workspaceId: string;\n}\n\nexport interface IssueManagerController {\n attachReferences: (parentKind: \"issue\" | \"task\") => Promise<void>;\n canReferenceWorkspaceFiles: boolean;\n canUploadWorkspaceFiles: boolean;\n copy: IssueManagerI18nRuntime;\n createTaskDraft: () => void;\n deleteIssue: () => Promise<void>;\n deleteTask: () => Promise<void>;\n insertReferences: (parentKind: \"issue\" | \"task\") => Promise<void>;\n issueDetail: AsyncCollectionState<IssueManagerIssueDetail | null>;\n issueDraft: IssueDraft;\n issueEditorMode: IssueManagerEditorMode;\n issues: AsyncCollectionState<IssueManagerIssueSummary[]>;\n isRunningTask: boolean;\n nodeState: IssueManagerNodeState;\n openReference: (reference: IssueManagerFileReference) => Promise<void>;\n providerOptions: readonly string[];\n refreshAll: () => void;\n referenceTarget: IssueManagerReferenceTarget | null;\n removeContextRef: (ref: IssueManagerContextRef) => Promise<void>;\n runTask: (providerOverride?: string) => Promise<void>;\n saveIssue: () => Promise<void>;\n saveTask: () => Promise<void>;\n resolveRichTextAtProviders: (\n surface: IssueManagerRichTextSurface\n ) => readonly RichTextAtProvider[];\n selectIssue: (issueId: string | null) => void;\n selectTask: (taskId: string | null) => void;\n setIssueContent: (content: string) => void;\n setIssueDraft: (patch: Partial<IssueDraft>) => void;\n setIssueEditorMode: (mode: IssueManagerEditorMode) => void;\n setIssueSearchQuery: (query: string) => void;\n setIssueStatusFilter: (\n value: IssueManagerNodeState[\"issueStatusFilter\"]\n ) => void;\n setTaskListCollapsed: (collapsed: boolean) => void;\n setIssueTitle: (title: string) => void;\n setReferenceTarget: (target: IssueManagerReferenceTarget | null) => void;\n setSelectedAgentProvider: (provider: string) => void;\n setTaskContent: (content: string) => void;\n setTaskDraft: (patch: Partial<TaskDraft>) => void;\n setTaskEditorMode: (mode: IssueManagerEditorMode) => void;\n setTaskPriority: (priority: IssueManagerPriority) => void;\n setTaskTitle: (title: string) => void;\n shareSelection: () => Promise<void>;\n submitReferenceSelection: (\n refs: IssueManagerFileReference[]\n ) => Promise<void>;\n taskDetail: AsyncCollectionState<IssueManagerTaskDetail | null>;\n taskDraft: TaskDraft;\n taskEditorMode: IssueManagerEditorMode;\n uploadReferences: (\n parentKind: \"issue\" | \"task\",\n mode: \"files\" | \"folder\"\n ) => Promise<void>;\n workspaceId: string;\n}\n\nconst issueManagerProviderOptions = [\"codex\"] as const;\n\nexport function useIssueManagerController({\n feature,\n onStateChange,\n resolveRichTextAtProviders,\n state,\n workspaceId\n}: UseIssueManagerControllerInput): IssueManagerController {\n const copy = feature.i18n;\n const [nodeState, setNodeStateInternal] = useState(() =>\n normalizeIssueManagerNodeState(state)\n );\n const [issueEditorMode, setIssueEditorModeState] =\n useState<IssueManagerEditorMode>(\"read\");\n const [taskEditorMode, setTaskEditorModeState] =\n useState<IssueManagerEditorMode>(\"read\");\n const [issueDraft, setIssueDraftInternal] = useState<IssueDraft>(() =>\n createIssueManagerIssueDraftFromNodeState(nodeState)\n );\n const [taskDraft, setTaskDraftInternal] = useState<TaskDraft>(() =>\n createIssueManagerTaskDraftFromNodeState(nodeState)\n );\n const [issueReloadToken, setIssueReloadToken] = useState(0);\n const [detailReloadToken, setDetailReloadToken] = useState(0);\n const [isRunningTask, setIsRunningTask] = useState(false);\n const [referenceTarget, setReferenceTarget] =\n useState<IssueManagerReferenceTarget | null>(null);\n const [issues, setIssues] = useState<\n AsyncCollectionState<IssueManagerIssueSummary[]>\n >({\n error: null,\n isLoading: false,\n value: []\n });\n const [issueDetail, setIssueDetail] = useState<\n AsyncCollectionState<IssueManagerIssueDetail | null>\n >({\n error: null,\n isLoading: false,\n value: null\n });\n const [taskDetail, setTaskDetail] = useState<\n AsyncCollectionState<IssueManagerTaskDetail | null>\n >({\n error: null,\n isLoading: false,\n value: null\n });\n const deferredIssueSearch = useDeferredValue(nodeState.issueSearchQuery);\n const canReferenceWorkspaceFiles =\n hasFileAdapterMethod(feature.fileAdapter, \"requestReferences\") ||\n hasFileAdapterMethod(feature.fileAdapter, \"loadReferenceTree\") ||\n hasFileAdapterMethod(feature.fileAdapter, \"listDirectory\") ||\n hasFileAdapterMethod(feature.fileAdapter, \"searchReferences\");\n const canUploadWorkspaceFiles = hasFileAdapterMethod(\n feature.fileAdapter,\n \"requestUpload\"\n );\n\n const updateNodeState = (\n updater:\n | Partial<IssueManagerNodeState>\n | ((current: IssueManagerNodeState) => IssueManagerNodeState)\n ) => {\n setNodeStateInternal((current) => {\n const next =\n typeof updater === \"function\"\n ? updater(current)\n : ({\n ...current,\n ...updater\n } satisfies IssueManagerNodeState);\n onStateChange?.(next);\n return next;\n });\n };\n\n const refreshIssues = () => {\n setIssueReloadToken((current) => current + 1);\n };\n\n const refreshDetails = () => {\n setDetailReloadToken((current) => current + 1);\n };\n\n const refreshAll = () => {\n refreshIssues();\n refreshDetails();\n };\n\n useEffect(() => {\n const normalized = normalizeIssueManagerNodeState(state);\n setNodeStateInternal(normalized);\n setIssueDraftInternal(\n createIssueManagerIssueDraftFromNodeState(normalized)\n );\n setTaskDraftInternal((current) => ({\n ...createIssueManagerTaskDraftFromNodeState(normalized, current.priority)\n }));\n }, [workspaceId]);\n\n useEffect(() => {\n const incomingTaskListCollapsed = state?.taskListCollapsed === true;\n setNodeStateInternal((current) => {\n if ((current.taskListCollapsed === true) === incomingTaskListCollapsed) {\n return current;\n }\n return {\n ...current,\n taskListCollapsed: incomingTaskListCollapsed\n };\n });\n }, [state?.taskListCollapsed]);\n\n useEffect(() => {\n let canceled = false;\n setIssues((current) => ({\n ...current,\n error: null,\n isLoading: true\n }));\n\n void feature.backend\n .listIssues({\n searchQuery: deferredIssueSearch || undefined,\n statusFilter: nodeState.issueStatusFilter,\n workspaceId\n })\n .then((result) => {\n if (canceled) {\n return;\n }\n setIssues({\n error: null,\n isLoading: false,\n value: result.issues\n });\n updateNodeState((current) =>\n applyIssueManagerIssueListResultToNodeState(current, result)\n );\n })\n .catch((error) => {\n if (canceled) {\n return;\n }\n setIssues({\n error: resolveIssueManagerErrorMessage(error, copy),\n isLoading: false,\n value: []\n });\n });\n\n return () => {\n canceled = true;\n };\n }, [\n copy,\n deferredIssueSearch,\n feature.backend,\n issueReloadToken,\n nodeState.issueStatusFilter,\n workspaceId\n ]);\n\n useEffect(() => {\n const selectedIssueId = nodeState.selectedIssueId;\n if (!selectedIssueId) {\n setIssueDetail({\n error: null,\n isLoading: false,\n value: null\n });\n return;\n }\n\n let canceled = false;\n setIssueDetail((current) => ({\n ...current,\n error: null,\n isLoading: true\n }));\n void feature.backend\n .getIssueDetail({\n issueId: selectedIssueId,\n workspaceId\n })\n .then((result) => {\n if (canceled) {\n return;\n }\n setIssueDetail({\n error: null,\n isLoading: false,\n value: result\n });\n updateNodeState((current) =>\n applyIssueManagerIssueDetailResultToNodeState(current, result)\n );\n })\n .catch((error) => {\n if (canceled) {\n return;\n }\n setIssueDetail({\n error: resolveIssueManagerErrorMessage(error, copy),\n isLoading: false,\n value: null\n });\n });\n\n return () => {\n canceled = true;\n };\n }, [\n copy,\n detailReloadToken,\n feature.backend,\n nodeState.selectedIssueId,\n workspaceId\n ]);\n\n useEffect(() => {\n const selectedIssueId = nodeState.selectedIssueId;\n const selectedTaskId = nodeState.selectedTaskId;\n if (!selectedIssueId || !selectedTaskId) {\n setTaskDetail({\n error: null,\n isLoading: false,\n value: null\n });\n return;\n }\n\n let canceled = false;\n setTaskDetail((current) => ({\n ...current,\n error: null,\n isLoading: true\n }));\n void feature.backend\n .getTaskDetail({\n issueId: selectedIssueId,\n taskId: selectedTaskId,\n workspaceId\n })\n .then((result) => {\n if (canceled) {\n return;\n }\n setTaskDetail({\n error: null,\n isLoading: false,\n value: result\n });\n })\n .catch((error) => {\n if (canceled) {\n return;\n }\n setTaskDetail({\n error: resolveIssueManagerErrorMessage(error, copy),\n isLoading: false,\n value: null\n });\n });\n\n return () => {\n canceled = true;\n };\n }, [\n copy,\n detailReloadToken,\n feature.backend,\n nodeState.selectedIssueId,\n nodeState.selectedTaskId,\n workspaceId\n ]);\n\n useEffect(() => {\n setIssueDraftInternal((current) =>\n syncIssueManagerIssueDraftFromDetail(\n current,\n issueDetail.value,\n issueEditorMode\n )\n );\n }, [\n issueDetail.value?.issue.content,\n issueDetail.value?.issue.title,\n issueEditorMode\n ]);\n\n useEffect(() => {\n setTaskDraftInternal((current) =>\n syncIssueManagerTaskDraftFromDetail(\n current,\n taskDetail.value,\n taskEditorMode\n )\n );\n }, [\n taskDetail.value?.task.content,\n taskDetail.value?.task.priority,\n taskDetail.value?.task.title,\n taskEditorMode\n ]);\n\n const actions = createIssueManagerControllerActions({\n copy,\n feature,\n issueDetail,\n issueDraft,\n issueEditorMode,\n nodeState,\n referenceTarget,\n refreshAll,\n refreshDetails,\n setIsRunningTask,\n setIssueDraftInternal,\n setIssueEditorModeState,\n setReferenceTarget,\n setTaskDraftInternal,\n setTaskEditorModeState,\n taskDetail,\n taskDraft,\n taskEditorMode,\n updateNodeState,\n workspaceId\n });\n\n return {\n ...actions,\n canReferenceWorkspaceFiles,\n canUploadWorkspaceFiles,\n copy,\n issueDetail,\n issueDraft,\n issueEditorMode,\n issues,\n isRunningTask,\n nodeState,\n providerOptions: issueManagerProviderOptions,\n refreshAll,\n referenceTarget,\n resolveRichTextAtProviders(surface) {\n return (\n resolveRichTextAtProviders?.({\n surface,\n workspaceId\n }) ?? []\n );\n },\n selectIssue(issueId) {\n updateNodeState((current) =>\n applyIssueManagerIssueSelection(current, issueId)\n );\n setIssueEditorModeState(\"read\");\n setTaskEditorModeState(\"read\");\n },\n selectTask(taskId) {\n updateNodeState((current) =>\n applyIssueManagerTaskSelection(current, taskId)\n );\n setTaskEditorModeState(\"read\");\n },\n setIssueContent(content) {\n setIssueDraftInternal((current) => ({\n ...current,\n content\n }));\n updateNodeState((current) =>\n persistIssueManagerIssueDraftContent(current, issueEditorMode, content)\n );\n },\n setIssueDraft(patch) {\n setIssueDraftInternal((current) => ({\n ...current,\n ...patch\n }));\n },\n setIssueEditorMode(mode) {\n setIssueEditorModeState(mode);\n if (mode === \"create\") {\n setIssueDraftInternal(\n createIssueManagerIssueDraftFromNodeState(nodeState)\n );\n }\n updateNodeState((current) =>\n applyIssueManagerIssueEditorModeToNodeState(current, mode)\n );\n },\n setIssueSearchQuery(query) {\n updateNodeState((current) => ({\n ...current,\n issueSearchQuery: query\n }));\n },\n setIssueStatusFilter(value) {\n updateNodeState((current) => ({\n ...current,\n issueStatusFilter: value\n }));\n },\n setTaskListCollapsed(collapsed) {\n updateNodeState((current) => ({\n ...current,\n taskListCollapsed: collapsed\n }));\n },\n setIssueTitle(title) {\n setIssueDraftInternal((current) => ({\n ...current,\n title\n }));\n updateNodeState((current) =>\n persistIssueManagerIssueDraftTitle(current, issueEditorMode, title)\n );\n },\n setReferenceTarget,\n setSelectedAgentProvider(provider) {\n updateNodeState((current) => ({\n ...current,\n selectedAgentProvider: provider\n }));\n },\n setTaskContent(content) {\n setTaskDraftInternal((current) => ({\n ...current,\n content\n }));\n updateNodeState((current) =>\n persistIssueManagerTaskDraftContent(current, taskEditorMode, content)\n );\n },\n setTaskDraft(patch) {\n setTaskDraftInternal((current) => ({\n ...current,\n ...patch\n }));\n },\n setTaskEditorMode(mode) {\n setTaskEditorModeState(mode);\n if (mode === \"create\") {\n setTaskDraftInternal(\n createIssueManagerTaskDraftFromNodeState(nodeState)\n );\n }\n updateNodeState((current) =>\n applyIssueManagerTaskEditorModeToNodeState(current, mode)\n );\n },\n setTaskPriority(priority) {\n setTaskDraftInternal((current) => ({\n ...current,\n priority\n }));\n },\n setTaskTitle(title) {\n setTaskDraftInternal((current) => ({\n ...current,\n title\n }));\n updateNodeState((current) =>\n persistIssueManagerTaskDraftTitle(current, taskEditorMode, title)\n );\n },\n taskDetail,\n taskDraft,\n taskEditorMode,\n workspaceId\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 {\n IssueManagerIssueSummary,\n IssueManagerFileReference,\n IssueManagerPriority,\n IssueManagerTaskSummary\n} from \"../../contracts/index.ts\";\nimport type { IssueManagerWorkspaceFileLinkInput } from \"../../core/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\n\nexport const defaultTaskPriority: IssueManagerPriority = \"medium\";\n\nexport function resolveIssueManagerSelectedIssueId(\n currentSelectedIssueId: string | null | undefined,\n issues: readonly IssueManagerIssueSummary[]\n): string | null {\n if (\n currentSelectedIssueId &&\n issues.some((issue) => issue.issueId === currentSelectedIssueId)\n ) {\n return currentSelectedIssueId;\n }\n return issues[0]?.issueId ?? null;\n}\n\nexport function resolveIssueManagerSelectedTaskId(\n currentSelectedTaskId: string | null | undefined,\n tasks: readonly IssueManagerTaskSummary[]\n): string | null {\n if (\n currentSelectedTaskId &&\n tasks.some((task) => task.taskId === currentSelectedTaskId)\n ) {\n return currentSelectedTaskId;\n }\n return tasks[0]?.taskId ?? null;\n}\n\nexport function toContextRefInput(ref: IssueManagerFileReference) {\n return {\n displayName: ref.displayName,\n path: ref.path,\n refType: ref.kind === \"folder\" ? \"folder\" : \"file\"\n };\n}\n\nexport function toIssueManagerWorkspaceFileLinkInput(\n ref: IssueManagerFileReference\n): IssueManagerWorkspaceFileLinkInput {\n return {\n kind: ref.kind === \"folder\" ? \"folder\" : \"file\",\n name: ref.displayName,\n path: ref.path\n };\n}\n\nexport function confirmIssueManagerMessage(message: string): boolean {\n try {\n return globalThis.confirm?.(message) ?? true;\n } catch {\n return true;\n }\n}\n\nexport function resolveIssueManagerErrorMessage(\n error: unknown,\n copy?: IssueManagerI18nRuntime\n): string {\n const raw =\n error instanceof Error\n ? error.message\n : typeof error === \"string\"\n ? error\n : String(error);\n\n if (!copy) {\n return raw;\n }\n\n if (raw === \"issue_manager.upload_type_conflict\") {\n return copy.t(\"messages.uploadTypeConflict\");\n }\n if (raw === \"issue_manager.workspace_path_unavailable\") {\n return copy.t(\"messages.workspacePathUnavailable\");\n }\n if (raw === \"issue_manager.run_status_missing\") {\n return copy.t(\"messages.runStatusMissing\");\n }\n if (raw === \"issue_manager.run_timed_out\") {\n return copy.t(\"messages.runTimedOut\");\n }\n if (raw.startsWith(\"issue_manager.run_exit_code:\")) {\n return copy.t(\"messages.runExitCode\", {\n code: raw.slice(\"issue_manager.run_exit_code:\".length)\n });\n }\n\n return raw;\n}\n","import type { Dispatch, SetStateAction } from \"react\";\nimport type {\n IssueManagerContextRef,\n IssueManagerFileReference,\n IssueManagerIssueDetail,\n IssueManagerNodeState,\n IssueManagerRun,\n IssueManagerTaskDetail\n} from \"../../contracts/index.ts\";\nimport {\n appendIssueManagerWorkspaceFileLinksToContent,\n extractIssueManagerWorkspaceFileLinksFromContent,\n normalizeIssueManagerContent,\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 type { IssueDraft, TaskDraft } from \"./controllerTypes.ts\";\nimport {\n confirmIssueManagerMessage,\n defaultTaskPriority,\n resolveIssueManagerErrorMessage,\n toContextRefInput,\n toIssueManagerWorkspaceFileLinkInput\n} from \"./controllerUtils.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 setIsRunningTask: Dispatch<SetStateAction<boolean>>;\n setIssueDraftInternal: Dispatch<SetStateAction<IssueDraft>>;\n setIssueEditorModeState: Dispatch<SetStateAction<IssueManagerEditorMode>>;\n setReferenceTarget: Dispatch<\n SetStateAction<IssueManagerReferenceTarget | null>\n >;\n setTaskDraftInternal: Dispatch<SetStateAction<TaskDraft>>;\n setTaskEditorModeState: Dispatch<SetStateAction<IssueManagerEditorMode>>;\n taskDetail: {\n value: IssueManagerTaskDetail | null;\n };\n taskDraft: TaskDraft;\n taskEditorMode: IssueManagerEditorMode;\n updateNodeState: (\n updater:\n | Partial<IssueManagerNodeState>\n | ((current: IssueManagerNodeState) => IssueManagerNodeState)\n ) => void;\n workspaceId: string;\n}\n\nexport function createIssueManagerControllerActions(\n input: CreateIssueManagerControllerActionsInput\n) {\n const {\n copy,\n feature,\n issueDetail,\n issueDraft,\n issueEditorMode,\n nodeState,\n referenceTarget,\n refreshAll,\n refreshDetails,\n setIsRunningTask,\n setIssueDraftInternal,\n setIssueEditorModeState,\n setReferenceTarget,\n setTaskDraftInternal,\n setTaskEditorModeState,\n taskDetail,\n taskDraft,\n taskEditorMode,\n updateNodeState,\n workspaceId\n } = input;\n const notifications = feature.notifications;\n\n const notifyTip = (message: string) => {\n notifications?.tips(message);\n };\n\n const notifyError = (error: unknown) => {\n notifyTip(resolveIssueManagerErrorMessage(error, copy));\n };\n\n const submitReferences = async (\n refs: IssueManagerFileReference[],\n target: IssueManagerReferenceTarget | null = referenceTarget\n ) => {\n const dedupedRefs = refs.filter((ref) => ref.path.trim().length > 0);\n if (!target || dedupedRefs.length === 0) {\n setReferenceTarget(null);\n return;\n }\n\n if (target.mode === \"insert\") {\n if (target.parentKind === \"issue\") {\n setIssueDraftInternal((current) => ({\n ...current,\n content: appendIssueManagerWorkspaceFileLinksToContent(\n current.content,\n dedupedRefs.map(toIssueManagerWorkspaceFileLinkInput)\n )\n }));\n } else {\n setTaskDraftInternal((current) => ({\n ...current,\n content: appendIssueManagerWorkspaceFileLinksToContent(\n current.content,\n dedupedRefs.map(toIssueManagerWorkspaceFileLinkInput)\n )\n }));\n }\n setReferenceTarget(null);\n return;\n }\n\n const selectedIssueId = nodeState.selectedIssueId;\n if (!selectedIssueId) {\n setReferenceTarget(null);\n return;\n }\n\n await feature.backend.addContextRefs(\n target.parentKind === \"task\"\n ? {\n issueId: selectedIssueId,\n parentKind: \"task\",\n refs: dedupedRefs.map(toContextRefInput),\n taskId: target.taskId,\n workspaceId\n }\n : {\n issueId: selectedIssueId,\n parentKind: \"issue\",\n refs: dedupedRefs.map(toContextRefInput),\n workspaceId\n }\n );\n setReferenceTarget(null);\n refreshDetails();\n };\n\n const createInsertReferenceTarget = (\n parentKind: \"issue\" | \"task\"\n ): IssueManagerReferenceTarget =>\n parentKind === \"task\"\n ? {\n mode: \"insert\",\n parentKind: \"task\",\n taskId: nodeState.selectedTaskId ?? \"\"\n }\n : {\n mode: \"insert\",\n parentKind: \"issue\"\n };\n\n const syncContentReferences = async (payload: {\n content: string;\n existingRefs: IssueManagerContextRef[];\n issueId: string;\n parentKind: \"issue\" | \"task\";\n taskId?: string;\n }) => {\n const existingPaths = new Set(payload.existingRefs.map((ref) => ref.path));\n const missingRefs = extractIssueManagerWorkspaceFileLinksFromContent(\n payload.content\n )\n .filter((ref) => !existingPaths.has(ref.path))\n .map((ref) => ({\n displayName: ref.name,\n path: ref.path,\n refType: ref.kind\n }));\n\n if (missingRefs.length === 0) {\n return;\n }\n\n await feature.backend.addContextRefs(\n payload.parentKind === \"task\"\n ? {\n issueId: payload.issueId,\n parentKind: \"task\",\n refs: missingRefs,\n taskId: payload.taskId ?? \"\",\n workspaceId\n }\n : {\n issueId: payload.issueId,\n parentKind: \"issue\",\n refs: missingRefs,\n workspaceId\n }\n );\n };\n\n return {\n async attachReferences(parentKind: \"issue\" | \"task\") {\n if (!feature.fileAdapter) {\n return;\n }\n if (parentKind === \"task\" && !nodeState.selectedTaskId) {\n return;\n }\n if (\n feature.fileAdapter.requestReferences &&\n !feature.fileAdapter.loadReferenceTree &&\n !feature.fileAdapter.listDirectory &&\n !feature.fileAdapter.searchReferences\n ) {\n const refs = await feature.fileAdapter.requestReferences({\n workspaceId\n });\n await submitReferences(\n refs,\n parentKind === \"task\"\n ? {\n mode: \"attach\",\n parentKind: \"task\",\n taskId: nodeState.selectedTaskId ?? \"\"\n }\n : {\n mode: \"attach\",\n parentKind: \"issue\"\n }\n );\n return;\n }\n\n setReferenceTarget(\n parentKind === \"task\"\n ? { mode: \"attach\", parentKind, taskId: nodeState.selectedTaskId! }\n : { mode: \"attach\", parentKind }\n );\n },\n\n createTaskDraft() {\n setTaskEditorModeState(\"create\");\n setTaskDraftInternal({\n content: nodeState.taskDraftContent ?? \"\",\n priority: defaultTaskPriority,\n title: nodeState.taskDraftTitle ?? \"\"\n });\n updateNodeState((current) => ({\n ...current,\n selectedTaskId: null\n }));\n },\n\n async deleteIssue() {\n const selectedIssueId = nodeState.selectedIssueId;\n if (\n !selectedIssueId ||\n !confirmIssueManagerMessage(copy.t(\"confirmations.deleteIssue\"))\n ) {\n return;\n }\n try {\n await feature.backend.deleteIssue({\n issueId: selectedIssueId,\n workspaceId\n });\n setIssueEditorModeState(\"read\");\n setTaskEditorModeState(\"read\");\n updateNodeState((current) => ({\n ...current,\n selectedIssueId: null,\n selectedTaskId: null\n }));\n refreshAll();\n } catch (error) {\n notifyError(error);\n }\n },\n\n async deleteTask() {\n const selectedIssueId = nodeState.selectedIssueId;\n const selectedTaskId = nodeState.selectedTaskId;\n if (\n !selectedIssueId ||\n !selectedTaskId ||\n !confirmIssueManagerMessage(copy.t(\"confirmations.deleteTask\"))\n ) {\n return;\n }\n\n try {\n await feature.backend.deleteTask({\n issueId: selectedIssueId,\n taskId: selectedTaskId,\n workspaceId\n });\n setTaskEditorModeState(\"read\");\n updateNodeState((current) => ({\n ...current,\n selectedTaskId: null\n }));\n refreshAll();\n } catch (error) {\n notifyError(error);\n }\n },\n\n async insertReferences(parentKind: \"issue\" | \"task\") {\n if (!feature.fileAdapter) {\n return;\n }\n if (\n parentKind === \"task\" &&\n !nodeState.selectedTaskId &&\n taskEditorMode !== \"create\"\n ) {\n return;\n }\n if (\n feature.fileAdapter.requestReferences &&\n !feature.fileAdapter.loadReferenceTree &&\n !feature.fileAdapter.listDirectory &&\n !feature.fileAdapter.searchReferences\n ) {\n const refs = await feature.fileAdapter.requestReferences({\n workspaceId\n });\n await submitReferences(refs, createInsertReferenceTarget(parentKind));\n return;\n }\n\n setReferenceTarget(createInsertReferenceTarget(parentKind));\n },\n\n async uploadReferences(\n parentKind: \"issue\" | \"task\",\n mode: \"files\" | \"folder\"\n ) {\n if (!feature.fileAdapter?.requestUpload) {\n return;\n }\n\n const refs = await feature.fileAdapter.requestUpload({\n mode,\n targetDirectoryPath: \"/\",\n workspaceId\n });\n if (refs.length === 0) {\n return;\n }\n\n await feature.fileAdapter.refreshTree?.({\n depth: 1,\n paths: refs.map((ref) => ref.path),\n workspaceId\n });\n await submitReferences(refs, createInsertReferenceTarget(parentKind));\n },\n\n async openReference(reference: IssueManagerFileReference) {\n await feature.fileAdapter?.openReference?.(reference);\n },\n\n async removeContextRef(ref: IssueManagerContextRef) {\n try {\n await feature.backend.removeContextRef(\n ref.parentKind === \"task\"\n ? {\n contextRefId: ref.contextRefId,\n issueId: ref.issueId,\n parentKind: \"task\",\n taskId: ref.taskId,\n workspaceId\n }\n : {\n contextRefId: ref.contextRefId,\n issueId: ref.issueId,\n parentKind: \"issue\",\n workspaceId\n }\n );\n refreshDetails();\n } catch (error) {\n notifyError(error);\n }\n },\n\n async runTask(providerOverride?: string) {\n if (!issueDetail.value || !taskDetail.value) {\n return;\n }\n const provider =\n providerOverride?.trim() || nodeState.selectedAgentProvider.trim();\n if (!provider) {\n return;\n }\n if (provider !== nodeState.selectedAgentProvider) {\n updateNodeState((current) => ({\n ...current,\n selectedAgentProvider: provider\n }));\n }\n\n setIsRunningTask(true);\n let createdRun: IssueManagerRun | null = null;\n try {\n const currentUser = await Promise.resolve(\n feature.identityAdapter.currentUser()\n );\n createdRun = await feature.backend.createRun({\n agentProvider: provider,\n agentUserId: currentUser?.userId ?? undefined,\n issueId: issueDetail.value.issue.issueId,\n taskId: taskDetail.value.task.taskId,\n workspaceId\n });\n refreshDetails();\n const result = await feature.agentRunner.runTask({\n issue: issueDetail.value.issue,\n provider,\n run: createdRun,\n task: taskDetail.value.task,\n workspaceId\n });\n await feature.backend.completeRun({\n errorMessage: result.errorMessage,\n issueId: issueDetail.value.issue.issueId,\n outputs: result.outputs ?? [],\n runId: createdRun.runId,\n status: result.status,\n summary: result.summary,\n taskId: taskDetail.value.task.taskId,\n workspaceId\n });\n if (result.status !== \"completed\") {\n notifyTip(copy.t(\"messages.runFailed\"));\n }\n } catch (error) {\n const message = resolveIssueManagerErrorMessage(error, copy);\n if (createdRun && issueDetail.value && taskDetail.value) {\n try {\n await feature.backend.completeRun({\n errorMessage: message,\n issueId: issueDetail.value.issue.issueId,\n outputs: [],\n runId: createdRun.runId,\n status: \"failed\",\n summary: copy.t(\"run.failedSummaryFallback\"),\n taskId: taskDetail.value.task.taskId,\n workspaceId\n });\n } catch {\n // Keep the original failure visible without masking it.\n }\n }\n notifyTip(message);\n } finally {\n setIsRunningTask(false);\n refreshDetails();\n }\n },\n\n async saveIssue() {\n const title = issueDraft.title.trim();\n if (!title) {\n notifyTip(copy.t(\"messages.titleRequired\"));\n return;\n }\n\n try {\n const content = normalizeIssueManagerContent(issueDraft.content);\n const savedIssue =\n issueEditorMode === \"create\"\n ? await feature.backend.createIssue({\n content,\n title,\n workspaceId\n })\n : await feature.backend.updateIssue({\n content,\n issueId: nodeState.selectedIssueId ?? \"\",\n title,\n workspaceId\n });\n await syncContentReferences({\n content,\n existingRefs:\n issueEditorMode === \"create\"\n ? []\n : (issueDetail.value?.contextRefs.filter(\n (ref) => ref.parentKind === \"issue\"\n ) ?? []),\n issueId: savedIssue.issueId,\n parentKind: \"issue\"\n });\n setIssueEditorModeState(\"read\");\n updateNodeState((current) => ({\n ...current,\n issueDraftContent: null,\n issueDraftTitle: null,\n selectedIssueId: savedIssue.issueId\n }));\n refreshAll();\n } catch (error) {\n notifyError(error);\n }\n },\n\n async saveTask() {\n const selectedIssueId = nodeState.selectedIssueId;\n if (!selectedIssueId) {\n return;\n }\n const title = taskDraft.title.trim();\n if (!title) {\n notifyTip(copy.t(\"messages.titleRequired\"));\n return;\n }\n\n try {\n const content = normalizeIssueManagerContent(taskDraft.content);\n const savedTask =\n taskEditorMode === \"create\"\n ? await feature.backend.createTask({\n content,\n issueId: selectedIssueId,\n priority: taskDraft.priority,\n title,\n workspaceId\n })\n : await feature.backend.updateTask({\n content,\n issueId: selectedIssueId,\n priority: taskDraft.priority,\n taskId: nodeState.selectedTaskId ?? \"\",\n title,\n workspaceId\n });\n await syncContentReferences({\n content,\n existingRefs:\n taskEditorMode === \"create\"\n ? []\n : (taskDetail.value?.contextRefs.filter(\n (ref) => ref.parentKind === \"task\"\n ) ?? []),\n issueId: selectedIssueId,\n parentKind: \"task\",\n taskId: savedTask.taskId\n });\n setTaskEditorModeState(\"read\");\n updateNodeState((current) => ({\n ...current,\n selectedTaskId: savedTask.taskId,\n taskDraftContent: null,\n taskDraftTitle: null\n }));\n refreshAll();\n } catch (error) {\n notifyError(error);\n }\n },\n\n async shareSelection() {\n const selectedIssueId = nodeState.selectedIssueId;\n if (!feature.shareAdapter?.createIssueLink || !selectedIssueId) {\n return;\n }\n\n try {\n const link = await feature.shareAdapter.createIssueLink({\n issueId: selectedIssueId,\n taskId: nodeState.selectedTaskId ?? undefined,\n workspaceId\n });\n if (\n typeof navigator === \"undefined\" ||\n !navigator.clipboard?.writeText\n ) {\n throw new Error(copy.t(\"messages.clipboardUnavailable\"));\n }\n await navigator.clipboard.writeText(link);\n } catch (error) {\n notifyError(error);\n }\n },\n\n async submitReferenceSelection(refs: IssueManagerFileReference[]) {\n await submitReferences(refs);\n }\n };\n}\n","import type {\n IssueManagerIssueDetail,\n IssueManagerListIssuesResult,\n IssueManagerNodeState,\n IssueManagerPriority,\n IssueManagerTaskDetail\n} from \"../../contracts/index.ts\";\nimport { normalizeIssueManagerContent } from \"../../core/index.ts\";\nimport type { IssueManagerEditorMode } from \"./model.ts\";\nimport type { IssueDraft, TaskDraft } from \"./controllerTypes.ts\";\nimport {\n defaultTaskPriority,\n resolveIssueManagerSelectedIssueId,\n resolveIssueManagerSelectedTaskId\n} from \"./controllerUtils.ts\";\n\nexport function createIssueManagerIssueDraftFromNodeState(\n state:\n | Pick<IssueManagerNodeState, \"issueDraftContent\" | \"issueDraftTitle\">\n | null\n | undefined\n): IssueDraft {\n return {\n content: state?.issueDraftContent ?? \"\",\n title: state?.issueDraftTitle ?? \"\"\n };\n}\n\nexport function createIssueManagerTaskDraftFromNodeState(\n state:\n | Pick<IssueManagerNodeState, \"taskDraftContent\" | \"taskDraftTitle\">\n | null\n | undefined,\n priority: IssueManagerPriority = defaultTaskPriority\n): TaskDraft {\n return {\n content: state?.taskDraftContent ?? \"\",\n priority,\n title: state?.taskDraftTitle ?? \"\"\n };\n}\n\nexport function applyIssueManagerIssueSelection(\n current: IssueManagerNodeState,\n issueId: string | null\n): IssueManagerNodeState {\n return {\n ...current,\n selectedIssueId: issueId,\n selectedTaskId: null\n };\n}\n\nexport function applyIssueManagerTaskSelection(\n current: IssueManagerNodeState,\n taskId: string | null\n): IssueManagerNodeState {\n return {\n ...current,\n selectedTaskId: taskId\n };\n}\n\nexport function applyIssueManagerIssueListResultToNodeState(\n current: IssueManagerNodeState,\n result: Pick<IssueManagerListIssuesResult, \"issues\" | \"nextPageToken\">\n): IssueManagerNodeState {\n return {\n ...current,\n issueListNextPageToken: result.nextPageToken ?? null,\n selectedIssueId: resolveIssueManagerSelectedIssueId(\n current.selectedIssueId,\n result.issues\n )\n };\n}\n\nexport function applyIssueManagerIssueDetailResultToNodeState(\n current: IssueManagerNodeState,\n detail: Pick<IssueManagerIssueDetail, \"tasks\">\n): IssueManagerNodeState {\n return {\n ...current,\n selectedTaskId: resolveIssueManagerSelectedTaskId(\n current.selectedTaskId,\n detail.tasks\n )\n };\n}\n\nexport function syncIssueManagerIssueDraftFromDetail(\n current: IssueDraft,\n detail: IssueManagerIssueDetail | null,\n editorMode: IssueManagerEditorMode\n): IssueDraft {\n if (editorMode !== \"read\") {\n return current;\n }\n return {\n content: normalizeIssueManagerContent(detail?.issue.content ?? \"\"),\n title: detail?.issue.title ?? \"\"\n };\n}\n\nexport function syncIssueManagerTaskDraftFromDetail(\n current: TaskDraft,\n detail: IssueManagerTaskDetail | null,\n editorMode: IssueManagerEditorMode\n): TaskDraft {\n if (editorMode !== \"read\") {\n return current;\n }\n return {\n content: normalizeIssueManagerContent(detail?.task.content ?? \"\"),\n priority: detail?.task.priority ?? defaultTaskPriority,\n title: detail?.task.title ?? \"\"\n };\n}\n\nexport function applyIssueManagerIssueEditorModeToNodeState(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode\n): IssueManagerNodeState {\n if (editorMode === \"create\") {\n return current;\n }\n return {\n ...current,\n issueDraftContent: null,\n issueDraftTitle: null\n };\n}\n\nexport function applyIssueManagerTaskEditorModeToNodeState(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode\n): IssueManagerNodeState {\n if (editorMode === \"create\") {\n return current;\n }\n return {\n ...current,\n taskDraftContent: null,\n taskDraftTitle: null\n };\n}\n\nexport function persistIssueManagerIssueDraftContent(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode,\n content: string\n): IssueManagerNodeState {\n if (editorMode !== \"create\") {\n return current;\n }\n return {\n ...current,\n issueDraftContent: content\n };\n}\n\nexport function persistIssueManagerIssueDraftTitle(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode,\n title: string\n): IssueManagerNodeState {\n if (editorMode !== \"create\") {\n return current;\n }\n return {\n ...current,\n issueDraftTitle: title\n };\n}\n\nexport function persistIssueManagerTaskDraftContent(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode,\n content: string\n): IssueManagerNodeState {\n if (editorMode !== \"create\") {\n return current;\n }\n return {\n ...current,\n taskDraftContent: content\n };\n}\n\nexport function persistIssueManagerTaskDraftTitle(\n current: IssueManagerNodeState,\n editorMode: IssueManagerEditorMode,\n title: string\n): IssueManagerNodeState {\n if (editorMode !== \"create\") {\n return current;\n }\n return {\n ...current,\n taskDraftTitle: title\n };\n}\n","import {\n useEffect,\n useEffectEvent,\n useMemo,\n useState,\n type ReactNode\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n ArrowRightIcon,\n Badge,\n Button,\n Card,\n CardContent,\n CardDescription,\n CardHeader,\n CardTitle,\n CheckIcon,\n CloseIcon,\n DirectoryIcon,\n FileIcon,\n Input,\n LoadingIcon,\n ScrollArea,\n SearchIcon,\n cn\n} from \"@nextop-os/ui-system\";\nimport type {\n IssueManagerFileAdapter,\n IssueManagerFileReference\n} from \"../../contracts/index.ts\";\nimport type { IssueManagerI18nRuntime } from \"../../i18n/issueManagerI18n.ts\";\nimport { uniqueIssueManagerFileReferences } from \"./model.ts\";\nimport {\n collectVisibleTreeEntries,\n createReferenceDirectoryStateFromSnapshot,\n normalizeDirectoryPath,\n type IssueManagerReferenceDirectoryState\n} from \"./IssueManagerReferencePickerState.ts\";\n\ninterface IssueManagerReferencePickerProps {\n copy: IssueManagerI18nRuntime;\n fileAdapter?: IssueManagerFileAdapter;\n onClose: () => void;\n onConfirm: (refs: IssueManagerFileReference[]) => void;\n open: boolean;\n workspaceId: string;\n}\n\nconst defaultDirectoryPath = \"/\";\nconst issueManagerReferenceTreeIndent = 20;\n\nexport function IssueManagerReferencePicker({\n copy,\n fileAdapter,\n onClose,\n onConfirm,\n open,\n workspaceId\n}: IssueManagerReferencePickerProps) {\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [browseRootPath, setBrowseRootPath] = useState<string | null>(null);\n const [searchEntries, setSearchEntries] = useState<\n IssueManagerFileReference[]\n >([]);\n const [directoryStateByPath, setDirectoryStateByPath] = useState<\n Record<string, IssueManagerReferenceDirectoryState>\n >({});\n const [expandedFolderPaths, setExpandedFolderPaths] = useState<\n Record<string, boolean>\n >({});\n const [focusedPath, setFocusedPath] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [selectedRefs, setSelectedRefs] = useState<IssueManagerFileReference[]>(\n []\n );\n\n const supportsSearch = hasFileAdapterMethod(fileAdapter, \"searchReferences\");\n const supportsTreeSnapshot = hasFileAdapterMethod(\n fileAdapter,\n \"loadReferenceTree\"\n );\n const mode =\n searchQuery.trim().length > 0 && supportsSearch ? \"search\" : \"browse\";\n const browseDirectoryLoaded =\n browseRootPath !== null &&\n directoryStateByPath[normalizeDirectoryPath(browseRootPath)]?.loaded ===\n true;\n\n const finalizeRequestedReferences = useEffectEvent(\n (refs: IssueManagerFileReference[]) => {\n onConfirm(uniqueIssueManagerFileReferences(refs));\n onClose();\n }\n );\n\n const readDirectoryListing = async (path?: string | null) => {\n if (!fileAdapter?.listDirectory) {\n return null;\n }\n const listing = await fileAdapter.listDirectory({\n path: path ?? undefined,\n workspaceId\n });\n return {\n displayPath:\n listing.directoryPath ||\n listing.rootPath ||\n path ||\n defaultDirectoryPath,\n entries: uniqueIssueManagerFileReferences(listing.entries),\n normalizedPath: normalizeDirectoryPath(\n listing.directoryPath ||\n listing.rootPath ||\n path ||\n defaultDirectoryPath\n )\n };\n };\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n setSearchQuery(\"\");\n setBrowseRootPath(null);\n setSearchEntries([]);\n setDirectoryStateByPath({});\n setExpandedFolderPaths({});\n setFocusedPath(null);\n setSelectedRefs([]);\n }, [open]);\n\n useEffect(() => {\n if (!open || !fileAdapter) {\n return;\n }\n\n let canceled = false;\n const load = async () => {\n setIsLoading(true);\n try {\n if (mode === \"search\" && fileAdapter.searchReferences) {\n const refs = await fileAdapter.searchReferences({\n query: searchQuery.trim(),\n workspaceId\n });\n if (!canceled) {\n setSearchEntries(uniqueIssueManagerFileReferences(refs));\n }\n return;\n }\n\n if (\n mode === \"browse\" &&\n (fileAdapter.listDirectory || fileAdapter.loadReferenceTree)\n ) {\n if (browseDirectoryLoaded && browseRootPath) {\n return;\n }\n if (supportsTreeSnapshot && fileAdapter.loadReferenceTree) {\n const snapshot = await fileAdapter.loadReferenceTree({\n path: browseRootPath ?? undefined,\n prefetchBudgetMs: 500,\n prefetchDepth: 4,\n workspaceId\n });\n if (!canceled) {\n setBrowseRootPath(\n normalizeDirectoryPath(snapshot.directory.directoryPath)\n );\n setDirectoryStateByPath(\n createReferenceDirectoryStateFromSnapshot(snapshot)\n );\n }\n return;\n }\n const listing = await readDirectoryListing(browseRootPath);\n if (!listing) {\n return;\n }\n if (!canceled) {\n setBrowseRootPath(listing.normalizedPath);\n setDirectoryStateByPath((current) => ({\n ...current,\n [listing.normalizedPath]: {\n displayPath: listing.displayPath,\n entries: listing.entries,\n loaded: true,\n loading: false\n }\n }));\n }\n return;\n }\n\n if (fileAdapter.requestReferences) {\n const refs = await fileAdapter.requestReferences({ workspaceId });\n if (!canceled) {\n finalizeRequestedReferences(refs);\n }\n return;\n }\n\n if (!canceled) {\n setSearchEntries([]);\n }\n } finally {\n if (!canceled) {\n setIsLoading(false);\n }\n }\n };\n\n void load();\n return () => {\n canceled = true;\n };\n }, [\n browseDirectoryLoaded,\n browseRootPath,\n fileAdapter,\n mode,\n open,\n searchQuery,\n supportsTreeSnapshot,\n workspaceId\n ]);\n\n const browseRootEntries = useMemo(\n () =>\n browseRootPath\n ? (directoryStateByPath[normalizeDirectoryPath(browseRootPath)]\n ?.entries ?? [])\n : [],\n [browseRootPath, directoryStateByPath]\n );\n\n const visibleEntries = useMemo(\n () =>\n mode === \"search\"\n ? searchEntries\n : collectVisibleTreeEntries(\n browseRootEntries,\n directoryStateByPath,\n expandedFolderPaths\n ),\n [\n browseRootEntries,\n directoryStateByPath,\n expandedFolderPaths,\n mode,\n searchEntries\n ]\n );\n\n useEffect(() => {\n if (!open) {\n return;\n }\n setFocusedPath((current) => {\n if (current && visibleEntries.some((entry) => entry.path === current)) {\n return current;\n }\n return visibleEntries[0]?.path ?? null;\n });\n }, [open, visibleEntries]);\n\n if (!open) {\n return null;\n }\n\n const focusedEntry =\n visibleEntries.find((entry) => entry.path === focusedPath) ??\n selectedRefs.find((entry) => entry.path === focusedPath) ??\n null;\n\n const toggleRef = (ref: IssueManagerFileReference) => {\n setSelectedRefs((current) => {\n const existing = current.some((item) => item.path === ref.path);\n return existing\n ? current.filter((item) => item.path !== ref.path)\n : uniqueIssueManagerFileReferences([...current, ref]);\n });\n };\n\n const loadFolderChildren = async (folder: IssueManagerFileReference) => {\n const folderKey = normalizeDirectoryPath(folder.path);\n if (directoryStateByPath[folderKey]?.loaded) {\n return;\n }\n setDirectoryStateByPath((current) => ({\n ...current,\n [folderKey]: {\n displayPath: folder.path,\n entries: current[folderKey]?.entries ?? [],\n loaded: current[folderKey]?.loaded ?? false,\n loading: true\n }\n }));\n\n try {\n const listing = await readDirectoryListing(folderKey);\n if (!listing) {\n return;\n }\n setDirectoryStateByPath((current) => ({\n ...current,\n [folderKey]: {\n displayPath: listing.displayPath,\n entries: listing.entries,\n loaded: true,\n loading: false\n }\n }));\n } catch {\n setDirectoryStateByPath((current) => ({\n ...current,\n [folderKey]: {\n displayPath: current[folderKey]?.displayPath ?? folder.path,\n entries: current[folderKey]?.entries ?? [],\n loaded: current[folderKey]?.loaded ?? false,\n loading: false\n }\n }));\n }\n };\n\n const renderBrowseTree = (\n entries: readonly IssueManagerFileReference[],\n depth = 0\n ): ReactNode =>\n entries.map((entry) => {\n const selected = selectedRefs.some((item) => item.path === entry.path);\n const focused = focusedPath === entry.path;\n const isFolder = entry.kind === \"folder\";\n const folderKey = normalizeDirectoryPath(entry.path);\n const expanded = expandedFolderPaths[folderKey] ?? false;\n const childState = directoryStateByPath[folderKey];\n const childEntries = childState?.entries ?? [];\n\n return (\n <div key={entry.path}>\n <div\n className={cn(\n \"grid grid-cols-[auto_minmax(0,1fr)_auto] items-center gap-2 rounded-lg px-2 py-1.5 transition-colors\",\n focused || selected\n ? \"bg-transparency-block\"\n : \"hover:bg-transparency-block/60\"\n )}\n style={{\n paddingLeft: `${depth * issueManagerReferenceTreeIndent + 8}px`\n }}\n >\n {isFolder ? (\n <button\n aria-label={resolveReferenceLabel(entry)}\n className=\"grid size-5 shrink-0 place-items-center rounded-sm text-muted-foreground hover:bg-background/80\"\n type=\"button\"\n onClick={() => {\n const nextExpanded = !expanded;\n setExpandedFolderPaths((current) => ({\n ...current,\n [folderKey]: nextExpanded\n }));\n if (\n nextExpanded &&\n !childState?.loaded &&\n !childState?.loading\n ) {\n void loadFolderChildren(entry);\n }\n }}\n >\n <ArrowRightIcon\n className={cn(\n \"size-3.5 transition-transform\",\n expanded && \"rotate-90\"\n )}\n />\n </button>\n ) : (\n <span className=\"block size-5 shrink-0\" />\n )}\n <button\n className=\"flex min-w-0 items-center gap-2 text-left\"\n type=\"button\"\n onClick={() => {\n setFocusedPath(entry.path);\n if (entry.kind !== \"folder\") {\n return;\n }\n const nextExpanded = !expanded;\n setExpandedFolderPaths((current) => ({\n ...current,\n [folderKey]: nextExpanded\n }));\n if (\n nextExpanded &&\n !childState?.loaded &&\n !childState?.loading\n ) {\n void loadFolderChildren(entry);\n }\n }}\n >\n {isFolder ? (\n <DirectoryIcon className=\"size-4 shrink-0 text-muted-foreground\" />\n ) : (\n <FileIcon className=\"size-4 shrink-0 text-muted-foreground\" />\n )}\n <span className=\"truncate text-sm text-foreground\">\n {resolveReferenceLabel(entry)}\n </span>\n </button>\n <Button\n size=\"xs\"\n type=\"button\"\n variant={selected ? \"secondary\" : \"outline\"}\n onClick={() => {\n setFocusedPath(entry.path);\n toggleRef(entry);\n }}\n >\n {selected ? <CheckIcon size={14} /> : \"+\"}\n </Button>\n </div>\n {isFolder && expanded ? (\n childState?.loading ? (\n <div\n className=\"flex items-center gap-2 px-2 py-2 text-xs text-muted-foreground\"\n style={{\n paddingLeft: `${(depth + 1) * issueManagerReferenceTreeIndent + 12}px`\n }}\n >\n <LoadingIcon className=\"size-3.5 animate-spin\" />\n <span>{copy.t(\"referencePicker.loading\")}</span>\n </div>\n ) : childEntries.length > 0 ? (\n renderBrowseTree(childEntries, depth + 1)\n ) : childState?.loaded ? (\n <div\n className=\"px-2 py-2 text-xs text-muted-foreground\"\n style={{\n paddingLeft: `${(depth + 1) * issueManagerReferenceTreeIndent + 12}px`\n }}\n >\n {copy.t(\"referencePicker.emptyDirectory\")}\n </div>\n ) : null\n ) : null}\n </div>\n );\n });\n\n const dialog = (\n <div\n className=\"fixed inset-0 grid place-items-center bg-black/24 px-3 py-4 backdrop-blur-md sm:px-6 sm:py-8\"\n style={{ zIndex: \"var(--z-panel)\" }}\n onClick={onClose}\n >\n <Card\n aria-modal=\"true\"\n className=\"flex h-[min(88vh,44rem)] w-full max-w-5xl flex-col gap-0 overflow-hidden border-border/70 bg-popover/98 py-0 shadow-[var(--workbench-window-elevation)] sm:h-[min(82vh,44rem)]\"\n role=\"dialog\"\n onClick={(event) => event.stopPropagation()}\n >\n <CardHeader className=\"border-b border-border/70 px-4 py-4 sm:px-6 sm:py-5\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0 space-y-1\">\n <CardTitle>{copy.t(\"referencePicker.title\")}</CardTitle>\n <CardDescription>\n {copy.t(\"referencePicker.selectedCount\", {\n count: selectedRefs.length\n })}\n </CardDescription>\n </div>\n <Button\n aria-label={copy.t(\"actions.cancel\")}\n size=\"icon-sm\"\n type=\"button\"\n variant=\"ghost\"\n onClick={onClose}\n >\n <CloseIcon size={16} />\n </Button>\n </div>\n </CardHeader>\n <CardContent className=\"grid min-h-0 flex-1 grid-rows-[minmax(0,1fr)_auto] gap-0 overflow-hidden p-0 lg:grid-cols-[minmax(0,1.15fr)_minmax(20rem,0.85fr)] lg:grid-rows-1\">\n <section className=\"flex min-h-0 flex-col border-b border-border/70 lg:border-r lg:border-b-0\">\n <div className=\"space-y-3 border-b border-border/70 px-4 py-4 sm:px-5\">\n <div className=\"relative\">\n <SearchIcon className=\"pointer-events-none absolute top-1/2 left-3 size-4 -translate-y-1/2 text-muted-foreground\" />\n <Input\n className=\"pl-9\"\n placeholder={copy.t(\"referencePicker.searchPlaceholder\")}\n value={searchQuery}\n onChange={(event) => setSearchQuery(event.target.value)}\n />\n </div>\n </div>\n <ScrollArea className=\"min-h-0 flex-1\">\n <div className=\"flex flex-col gap-2 p-3\">\n {isLoading ? (\n <PickerFeedback>\n <LoadingIcon className=\"size-4 animate-spin\" />\n </PickerFeedback>\n ) : visibleEntries.length === 0 ? (\n <PickerFeedback>\n {mode === \"search\"\n ? copy.t(\"referencePicker.emptySearch\")\n : copy.t(\"referencePicker.emptyDirectory\")}\n </PickerFeedback>\n ) : mode === \"browse\" ? (\n <div className=\"space-y-0.5\">\n {renderBrowseTree(browseRootEntries)}\n </div>\n ) : (\n visibleEntries.map((entry) => {\n const selected = selectedRefs.some(\n (item) => item.path === entry.path\n );\n const focused = focusedPath === entry.path;\n const isFolder = entry.kind === \"folder\";\n return (\n <div\n className={cn(\n \"grid grid-cols-[minmax(0,1fr)_auto] items-center gap-3 rounded-xl border px-3 py-2.5 transition-colors\",\n focused || selected\n ? \"border-border bg-transparency-block\"\n : \"border-transparent bg-transparent hover:border-border/70 hover:bg-transparency-block/60\"\n )}\n key={entry.path}\n >\n <button\n className=\"flex min-w-0 items-center gap-3 text-left\"\n type=\"button\"\n onClick={() => setFocusedPath(entry.path)}\n >\n <span className=\"grid size-9 shrink-0 place-items-center rounded-lg bg-background/90 text-muted-foreground\">\n {isFolder ? (\n <DirectoryIcon className=\"size-4\" />\n ) : (\n <FileIcon className=\"size-4\" />\n )}\n </span>\n <span className=\"min-w-0\">\n <span className=\"block truncate text-sm font-medium text-foreground\">\n {resolveReferenceLabel(entry)}\n </span>\n <span className=\"block truncate text-xs text-muted-foreground\">\n {entry.path}\n </span>\n </span>\n </button>\n <Button\n size=\"xs\"\n type=\"button\"\n variant={selected ? \"secondary\" : \"outline\"}\n onClick={() => {\n setFocusedPath(entry.path);\n toggleRef(entry);\n }}\n >\n {selected ? <CheckIcon size={14} /> : \"+\"}\n </Button>\n </div>\n );\n })\n )}\n </div>\n </ScrollArea>\n </section>\n <aside className=\"flex shrink-0 flex-col border-t border-border/70 bg-panel/40 lg:min-h-0 lg:flex-1 lg:border-t-0\">\n <div className=\"flex min-h-0 flex-1 flex-col px-4 py-4 sm:px-5 lg:py-5\">\n {focusedEntry ? (\n <div className=\"flex min-h-0 flex-col gap-4 lg:flex-1 lg:gap-5\">\n <div className=\"flex h-32 min-h-32 items-center justify-center rounded-2xl border border-border/70 bg-background/72 p-5 sm:h-40 sm:min-h-40 lg:h-56 lg:min-h-56 lg:p-6\">\n <div className=\"space-y-4 text-center\">\n <span className=\"mx-auto grid size-14 place-items-center rounded-2xl bg-transparency-block text-muted-foreground\">\n {focusedEntry.kind === \"folder\" ? (\n <DirectoryIcon className=\"size-7\" />\n ) : (\n <FileIcon className=\"size-7\" />\n )}\n </span>\n <p className=\"max-w-[24ch] text-sm leading-5 text-muted-foreground [overflow-wrap:anywhere]\">\n {focusedEntry.kind === \"folder\"\n ? focusedEntry.path\n : resolveReferenceLabel(focusedEntry)}\n </p>\n </div>\n </div>\n <div className=\"space-y-2 lg:space-y-3\">\n <div className=\"space-y-1.5\">\n <p className=\"truncate text-[15px] font-semibold text-foreground\">\n {resolveReferenceLabel(focusedEntry)}\n </p>\n <p className=\"line-clamp-3 text-sm text-muted-foreground [overflow-wrap:anywhere]\">\n {focusedEntry.path}\n </p>\n </div>\n </div>\n </div>\n ) : (\n <PickerFeedback>\n {mode === \"search\"\n ? copy.t(\"referencePicker.emptySearch\")\n : copy.t(\"referencePicker.emptyDirectory\")}\n </PickerFeedback>\n )}\n </div>\n </aside>\n </CardContent>\n <div className=\"flex flex-col gap-3 border-t border-border/70 px-4 py-4 sm:px-6 lg:flex-row lg:items-center lg:justify-between\">\n <div className=\"flex min-w-0 flex-wrap items-center gap-2 lg:flex-1\">\n <span className=\"text-sm text-muted-foreground\">\n {copy.t(\"referencePicker.selectedCount\", {\n count: selectedRefs.length\n })}\n </span>\n {selectedRefs.slice(0, 2).map((ref) => (\n <Badge\n className=\"max-w-[14rem] border-border/70 bg-background/80 text-foreground\"\n key={ref.path}\n >\n <span className=\"truncate\">{resolveReferenceLabel(ref)}</span>\n </Badge>\n ))}\n {selectedRefs.length > 2 ? (\n <Badge className=\"border-border/70 bg-background/80 text-muted-foreground\">\n +{selectedRefs.length - 2}\n </Badge>\n ) : null}\n </div>\n <div className=\"flex w-full items-center justify-end gap-2 lg:w-auto lg:shrink-0\">\n <Button type=\"button\" variant=\"outline\" onClick={onClose}>\n {copy.t(\"actions.cancel\")}\n </Button>\n <Button\n disabled={selectedRefs.length === 0}\n type=\"button\"\n onClick={() => onConfirm(selectedRefs)}\n >\n {copy.t(\"referencePicker.confirm\")}\n </Button>\n </div>\n </div>\n </Card>\n </div>\n );\n\n if (typeof document === \"undefined\") {\n return dialog;\n }\n return createPortal(dialog, document.body);\n}\n\nfunction hasFileAdapterMethod(\n fileAdapter: IssueManagerFileAdapter | undefined,\n methodName:\n | \"listDirectory\"\n | \"loadReferenceTree\"\n | \"requestUpload\"\n | \"searchReferences\"\n): boolean {\n return typeof Reflect.get(fileAdapter ?? {}, methodName) === \"function\";\n}\n\nfunction PickerFeedback({ children }: { children: ReactNode }) {\n return (\n <div className=\"grid min-h-[10rem] place-items-center px-4 text-center text-sm text-muted-foreground\">\n {children}\n </div>\n );\n}\n\nfunction resolveReferenceLabel(ref: IssueManagerFileReference): string {\n return (\n ref.displayName || ref.path.split(\"/\").filter(Boolean).at(-1) || ref.path\n );\n}\n","import type {\n IssueManagerFileReference,\n IssueManagerReferencePrefetchReason,\n IssueManagerReferencePrefetchState,\n IssueManagerReferenceTreeSnapshot\n} from \"../../contracts/index.ts\";\n\nexport const issueManagerReferenceDefaultExpandedDepth = 4;\n\nexport interface IssueManagerReferenceDirectoryState {\n displayPath: string;\n entries: IssueManagerFileReference[];\n loaded: boolean;\n loading: boolean;\n prefetchReason?: IssueManagerReferencePrefetchReason | null;\n prefetchState?: IssueManagerReferencePrefetchState | null;\n}\n\nexport function normalizeDirectoryPath(path: string): string {\n if (!path || path === \"/\") {\n return \"/\";\n }\n return path.replace(/\\/+$/, \"\") || \"/\";\n}\n\nexport function collectVisibleTreeEntries(\n entries: readonly IssueManagerFileReference[],\n directoryStateByPath: Record<string, IssueManagerReferenceDirectoryState>,\n expandedFolderPaths: Record<string, boolean>\n): IssueManagerFileReference[] {\n const collected: IssueManagerFileReference[] = [];\n\n for (const entry of entries) {\n collected.push(entry);\n if (entry.kind !== \"folder\") {\n continue;\n }\n const folderKey = normalizeDirectoryPath(entry.path);\n if (!expandedFolderPaths[folderKey]) {\n continue;\n }\n const childEntries = directoryStateByPath[folderKey]?.entries ?? [];\n if (childEntries.length === 0) {\n continue;\n }\n collected.push(\n ...collectVisibleTreeEntries(\n childEntries,\n directoryStateByPath,\n expandedFolderPaths\n )\n );\n }\n\n return collected;\n}\n\nexport function mergeExpandedFolderPaths(\n current: Record<string, boolean>,\n prefetched: Record<string, boolean>\n): Record<string, boolean> {\n return {\n ...prefetched,\n ...current\n };\n}\n\nexport function mergePrefetchedDirectoryState(\n current: Record<string, IssueManagerReferenceDirectoryState>,\n prefetched: Record<string, IssueManagerReferenceDirectoryState>\n): Record<string, IssueManagerReferenceDirectoryState> {\n return {\n ...current,\n ...prefetched\n };\n}\n\nexport function createReferenceDirectoryStateFromSnapshot(\n snapshot: IssueManagerReferenceTreeSnapshot\n): Record<string, IssueManagerReferenceDirectoryState> {\n const stateByPath: Record<string, IssueManagerReferenceDirectoryState> = {};\n addReferenceDirectoryStateFromSnapshot(stateByPath, snapshot.directory);\n return stateByPath;\n}\n\nfunction addReferenceDirectoryStateFromSnapshot(\n stateByPath: Record<string, IssueManagerReferenceDirectoryState>,\n directory: IssueManagerReferenceTreeSnapshot[\"directory\"]\n) {\n const normalizedPath = normalizeDirectoryPath(directory.directoryPath);\n stateByPath[normalizedPath] = {\n displayPath: directory.directoryPath,\n entries: directory.entries.map((entry) => ({\n displayName: entry.displayName,\n kind: entry.kind,\n path: entry.path\n })),\n loaded: true,\n loading: false,\n prefetchReason: directory.prefetchReason,\n prefetchState: directory.prefetchState\n };\n\n for (const entry of directory.entries) {\n if (entry.kind !== \"folder\") {\n continue;\n }\n const folderKey = normalizeDirectoryPath(entry.path);\n if (entry.prefetchedDirectory) {\n addReferenceDirectoryStateFromSnapshot(\n stateByPath,\n entry.prefetchedDirectory\n );\n continue;\n }\n if (entry.prefetchState) {\n stateByPath[folderKey] = {\n displayPath: entry.path,\n entries: [],\n loaded: false,\n loading: false,\n prefetchReason: entry.prefetchReason,\n prefetchState: entry.prefetchState\n };\n }\n }\n}\n\nexport async function prefetchReferenceTree(input: {\n listDirectory: (path: string) => Promise<{\n displayPath: string;\n entries: IssueManagerFileReference[];\n normalizedPath: string;\n } | null>;\n maxDepth: number;\n path: string;\n depth?: number;\n}): Promise<{\n directoryStateByPath: Record<string, IssueManagerReferenceDirectoryState>;\n expandedFolderPaths: Record<string, boolean>;\n}> {\n const { depth = 1, listDirectory, maxDepth, path } = input;\n const listing = await listDirectory(path);\n if (!listing) {\n return {\n directoryStateByPath: {},\n expandedFolderPaths: {}\n };\n }\n\n const directoryStateByPath: Record<\n string,\n IssueManagerReferenceDirectoryState\n > = {\n [listing.normalizedPath]: {\n displayPath: listing.displayPath,\n entries: listing.entries,\n loaded: true,\n loading: false\n }\n };\n const expandedFolderPaths: Record<string, boolean> = {\n [listing.normalizedPath]: true\n };\n\n if (depth >= maxDepth) {\n return {\n directoryStateByPath,\n expandedFolderPaths\n };\n }\n\n for (const entry of listing.entries) {\n if (entry.kind !== \"folder\") {\n continue;\n }\n try {\n const childTree = await prefetchReferenceTree({\n depth: depth + 1,\n listDirectory,\n maxDepth,\n path: entry.path\n });\n Object.assign(directoryStateByPath, childTree.directoryStateByPath);\n Object.assign(expandedFolderPaths, childTree.expandedFolderPaths);\n } catch {\n // Skip unreadable branches so one protected folder does not blank the whole tree.\n }\n }\n\n return {\n directoryStateByPath,\n expandedFolderPaths\n };\n}\n"],"mappings":";;;;;;;;;AAAA;AAAA,EACE,aAAAA;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,OAQK;AACP;AAAA,EACE,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA;AAAA,EACA,kBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,cAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAAC;AAAA,OACK;;;AC1BP,SAAS,iCAAiC;AA8BnC,SAAS,uBACd,OACa;AACb,MAAI,CAAC,SAAS,CAAC,OAAO,SAAS,KAAK,GAAG;AACrC,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,QAAQ,OAAoB,QAAQ,MAAO;AAC9D,QAAM,OAAO,IAAI,KAAK,UAAU;AAChC,SAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,IAAI,OAAO;AAC/C;AAEO,SAAS,4BACd,OACe;AACf,QAAM,OAAO,uBAAuB,KAAK;AACzC,SAAO,OAAO,0BAA0B,IAAI,IAAI;AAClD;AAEO,SAAS,uBACd,OACQ;AACR,QAAM,OAAO,uBAAuB,KAAK;AACzC,SAAO,OAAO,0BAA0B,IAAI,IAAI;AAClD;AAEO,SAAS,+BACd,MACA,QACQ;AACR,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO,KAAK,EAAE,mBAAmB;AAAA,IACnC,KAAK;AACH,aAAO,KAAK,EAAE,gBAAgB;AAAA,IAChC,KAAK;AACH,aAAO,KAAK,EAAE,0BAA0B;AAAA,IAC1C,KAAK;AACH,aAAO,KAAK,EAAE,kBAAkB;AAAA,IAClC,KAAK;AACH,aAAO,KAAK,EAAE,eAAe;AAAA,IAC/B,KAAK;AACH,aAAO,KAAK,EAAE,iBAAiB;AAAA,IACjC;AACE,aAAO,KAAK,EAAE,gBAAgB;AAAA,EAClC;AACF;AAEO,SAAS,iCACd,MACA,UACQ;AACR,UAAQ,UAAU;AAAA,IAChB,KAAK;AACH,aAAO,KAAK,EAAE,eAAe;AAAA,IAC/B,KAAK;AACH,aAAO,KAAK,EAAE,cAAc;AAAA,IAC9B;AACE,aAAO,KAAK,EAAE,iBAAiB;AAAA,EACnC;AACF;AAEO,SAAS,iCACd,MAC6B;AAC7B,QAAM,SAAS,oBAAI,IAAuC;AAC1D,aAAW,OAAO,MAAM;AACtB,UAAM,iBAAiB,IAAI,KAAK,KAAK;AACrC,QAAI,CAAC,kBAAkB,OAAO,IAAI,cAAc,GAAG;AACjD;AAAA,IACF;AACA,WAAO,IAAI,gBAAgB;AAAA,MACzB,aAAa,IAAI,aAAa,KAAK,KAAK;AAAA,MACxC,MAAM,IAAI,SAAS,WAAW,WAAW;AAAA,MACzC,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AACA,SAAO,CAAC,GAAG,OAAO,OAAO,CAAC;AAC5B;;;AC3GA;AAAA,EACE,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,kBAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAAC;AAAA,OACK;;;ACRP,SAAS,WAAW,QAAQ,gBAA0B;AACtD,SAAS,+BAA+B;AACxC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAsBH,cAmEE,YAnEF;AAPJ,IAAM,yBAAyB,IAAI;AAAA,EACjC;AAAA,EACA,YAAY;AACd,EAAE;AAEK,SAAS,gCAA6C;AAC3D,SACE;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,+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,IAAI,SAAS,KAAK;AACxD,QAAM,oBAAoB,6BAA6B,OAAO,EAAE,KAAK;AAErE,YAAU,MAAM;AACd,QAAI,YAAY,SAAS;AACvB,uBAAiB,KAAK;AACtB;AAAA,IACF;AACA,QAAI,CAAC,mBAAmB;AACtB,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,mBAAmB,OAAO,CAAC;AAE/B,MAAI,YAAY,SAAS;AACvB,WACE,qBAAC,aAAQ,WAAU,cACjB;AAAA,0BAAC,UAAK,WAAU,8DACb,iBACH;AAAA,MACC,oBACC,oBAAC,SAAI,WAAU,mDACb;AAAA,QAAC;AAAA;AAAA,UACC,SAAS;AAAA,UACT;AAAA;AAAA,MACF,GACF,IAEA,oBAAC,OAAE,WAAU,yCAAyC,sBAAW;AAAA,OAErE;AAAA,EAEJ;AAEA,SACE,qBAAC,aAAQ,WAAU,cACjB;AAAA,wBAAC,UAAK,WAAU,8DACb,iBACH;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QAEA;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,gBACT;AAAA,gBACA,iBAAiB;AAAA,cACnB;AAAA,cACA,KAAK;AAAA,cAEJ,8BACC;AAAA,gBAAC;AAAA;AAAA,kBACC,SAAS;AAAA,kBACT;AAAA;AAAA,cACF,IAEA,oBAAC,OAAE,WAAU,uBAAuB,sBAAW;AAAA;AAAA,UAEnD;AAAA,UACC,gBACC;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;AAqCO,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX;AACF,GAKgB;AACd,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,CAAC;AAE9C,SACE;AAAA,IAAC;AAAA;AAAA,MAEC,UAAU,WAAW,iBAAiB;AAAA,MACtC,eAAe,CAAC,aAAa;AAC3B,sBAAc,CAAC,YAAY,UAAU,CAAC;AACtC,aAAK,WAAW,QAAQ,QAAQ;AAAA,MAClC;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,cAAY,WAAW,KAAK,EAAE,uBAAuB;AAAA,YACrD,WAAW;AAAA,YAEX,+BAAC,UAAK,WAAU,0CACd;AAAA,kCAAC,aAAU,MAAM,UAAU;AAAA,cAC3B,oBAAC,UAAK,WAAU,YACb,qBAAW,KAAK,EAAE,uBAAuB,GAC5C;AAAA,eACF;AAAA;AAAA,QACF;AAAA,QACA,oBAAC,iBAAc,OAAO,EAAE,QAAQ,yBAAyB,GACtD,qBAAW,gBAAgB,IAAI,CAAC,aAC/B,oBAAC,cAA0B,OAAO,UAC/B,sBADc,QAEjB,CACD,GACH;AAAA;AAAA;AAAA,IAxBK,GAAG,WAAW,UAAU,qBAAqB,IAAI,UAAU;AAAA,EAyBlE;AAEJ;AAEA,SAAS,+BAA+B;AAAA,EACtC;AAAA,EACA;AACF,GAGgB;AACd,SACE;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;AAEO,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOgB;AACd,SACE,qBAAC,aAAQ,WAAU,8DACjB;AAAA,yBAAC,SAAI,WAAU,gDACb;AAAA,0BAAC,QAAG,WAAU,8DACX,eAAK,EAAE,0BAA0B,GACpC;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,SAAS;AAAA,UAER,eAAK,EAAE,uBAAuB;AAAA;AAAA,MACjC;AAAA,OACF;AAAA,IACC,KAAK,WAAW,IACf,oBAAC,OAAE,WAAU,yCAAyC,sBAAW,IAEjE,oBAAC,SAAI,WAAU,gBACZ,eAAK,IAAI,CAAC,QACT;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QAGV;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,MAAK;AAAA,cACL,SAAS,MAAM;AACb,qBAAK,OAAO;AAAA,kBACV,aAAa,IAAI;AAAA,kBACjB,MAAM,IAAI,KAAK,SAAS,GAAG,IAAI,WAAW;AAAA,kBAC1C,MAAM,IAAI;AAAA,gBACZ,CAAC;AAAA,cACH;AAAA,cAEC;AAAA,oBAAI,KAAK,SAAS,GAAG,IACpB;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAU;AAAA,oBACV,MAAM;AAAA;AAAA,gBACR,IAEA;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAU;AAAA,oBACV,MAAM;AAAA;AAAA,gBACR;AAAA,gBAEF,qBAAC,UAAK,WAAU,WACd;AAAA,sCAAC,UAAK,WAAU,6EACb,cAAI,aACP;AAAA,kBACA,oBAAC,UAAK,WAAU,6DACb,cAAI,MACP;AAAA,mBACF;AAAA;AAAA;AAAA,UACF;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,MAAK;AAAA,cACL,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,SAAS,MAAM;AACb,qBAAK,SAAS,GAAG;AAAA,cACnB;AAAA,cAEC,eAAK,EAAE,yBAAyB;AAAA;AAAA,UACnC;AAAA;AAAA;AAAA,MA3CK,IAAI;AAAA,IA4CX,CACD,GACH;AAAA,KAEJ;AAEJ;AAEO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKgB;AACd,SACE,qBAAC,SAAI,WAAU,cACb;AAAA,yBAAC,aAAQ,WAAU,8DACjB;AAAA,0BAAC,QAAG,WAAU,mEACX,eAAK,EAAE,mBAAmB,GAC7B;AAAA,MACC,WAAW,WAAW,IACrB,oBAAC,OAAE,WAAU,yCACV,eAAK,EAAE,uBAAuB,GACjC,IAEA,oBAAC,SAAI,WAAU,gBACZ,qBAAW,IAAI,CAAC,QACf;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UAGV;AAAA,iCAAC,SAAI,WAAU,0CACb;AAAA,mCAAC,SAAI,WAAU,WACb;AAAA,oCAAC,OAAE,WAAU,uEACV,cAAI,WAAW,IAAI,OACtB;AAAA,gBACA,oBAAC,OAAE,WAAU,mDACV;AAAA,kBACC,IAAI,iBAAiB,IAAI;AAAA,gBAC3B,GACF;AAAA,iBACF;AAAA,cACA,oBAAC,SAAM,WAAU,iGACd,yCAA+B,MAAM,IAAI,MAAM,GAClD;AAAA,eACF;AAAA,YACC,IAAI,eACH,oBAAC,OAAE,WAAU,iCACV,cAAI,cACP,IACE;AAAA;AAAA;AAAA,QArBC,IAAI;AAAA,MAsBX,CACD,GACH;AAAA,OAEJ;AAAA,IAEA,qBAAC,aAAQ,WAAU,8DACjB;AAAA,0BAAC,QAAG,WAAU,mEACX,eAAK,EAAE,gBAAgB,GAC1B;AAAA,MACC,QAAQ,WAAW,IAClB,oBAAC,OAAE,WAAU,yCACV,eAAK,EAAE,oBAAoB,GAC9B,IAEA,oBAAC,SAAI,WAAU,gBACZ,kBAAQ,IAAI,CAAC,WACZ;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UAEV,MAAK;AAAA,UACL,SAAS,MAAM;AACb,iBAAK,OAAO;AAAA,cACV,aAAa,OAAO;AAAA,cACpB,MAAM;AAAA,cACN,MAAM,OAAO;AAAA,YACf,CAAC;AAAA,UACH;AAAA,UAEA;AAAA,gCAAC,OAAE,WAAU,uEACV,iBAAO,aACV;AAAA,YACA,oBAAC,OAAE,WAAU,4DACV,iBAAO,MACV;AAAA;AAAA;AAAA,QAfK,OAAO;AAAA,MAgBd,CACD,GACH;AAAA,OAEJ;AAAA,KACF;AAEJ;AAEO,SAAS,+BAA4C;AAC1D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,eAAY;AAAA,MAEZ;AAAA,4BAAC,SAAI,WAAU,kCAAiC;AAAA,QAChD,oBAAC,SAAI,WAAU,oCAAmC;AAAA,QAClD,qBAAC,SAAI,WAAU,mEACb;AAAA,8BAAC,SAAI,WAAU,kCAAiC;AAAA,UAChD,oBAAC,SAAI,WAAU,yCAAwC;AAAA,UACvD,oBAAC,SAAI,WAAU,0CAAyC;AAAA,UACxD,oBAAC,SAAI,WAAU,0CAAyC;AAAA,WAC1D;AAAA,QACA,qBAAC,SAAI,WAAU,mEACb;AAAA,8BAAC,SAAI,WAAU,kCAAiC;AAAA,UAChD,oBAAC,SAAI,WAAU,yCAAwC;AAAA,UACvD,oBAAC,SAAI,WAAU,yCAAwC;AAAA,WACzD;AAAA;AAAA;AAAA,EACF;AAEJ;AAyBO,SAAS,qCAAkD;AAChE,SACE,qBAAC,SAAI,WAAU,cAAa,eAAY,QACtC;AAAA,wBAAC,SAAI,WAAU,oCAAmC;AAAA,IAClD,qBAAC,SAAI,WAAU,0BACb;AAAA,0BAAC,SAAI,WAAU,4BAA2B;AAAA,MAC1C,oBAAC,SAAI,WAAU,4BAA2B;AAAA,OAC5C;AAAA,IACA,qBAAC,SAAI,WAAU,mEACb;AAAA,0BAAC,SAAI,WAAU,kCAAiC;AAAA,MAChD,oBAAC,SAAI,WAAU,yCAAwC;AAAA,MACvD,oBAAC,SAAI,WAAU,0CAAyC;AAAA,MACxD,oBAAC,SAAI,WAAU,yCAAwC;AAAA,OACzD;AAAA,KACF;AAEJ;;;AC7fA,SAAS,eAAyB;AAClC,SAAS,wBAAwB;AACjC,SAAS,UAAAC,SAAQ,UAAU,MAAAC,WAAU;AAwCzB,SASE,OAAAC,MATF,QAAAC,aAAA;AAlCL,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOgB;AACd,QAAM,YAAY;AAAA,IAChB,MAAM,WAAW,2BAA2B,OAAO;AAAA,IACnD,CAAC,YAAY,OAAO;AAAA,EACtB;AACA,QAAM,sBAAsB,WAAW;AAEvC,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB;AAAA,MACA,2BAA2B,WAAW,KAAK,EAAE,yBAAyB;AAAA,MACtE,mBAAmBD,IAAG,mBAAmB,uBAAuB,OAAO;AAAA,MACvE;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;;;ACrDO,SAAS,6BACd,SACA,UACQ;AACR,QAAM,YAAY;AAAA,IAChB,WAAW;AAAA,EACb,EAAE,KAAK;AACP,MAAI,CAAC,WAAW;AACd,WAAO;AAAA,EACT;AACA,MAAI,UAAU,UAAU,KAAK;AAC3B,WAAO;AAAA,EACT;AACA,SAAO,GAAG,UAAU,MAAM,GAAG,GAAG,CAAC;AACnC;AAEO,SAAS,wBAAwB,MAAuC;AAC7E,SAAO,gCAAgC,IAAI;AAC7C;AAEO,SAAS,gCACd,QAGQ;AACR,SAAO,OAAO,oBAAoB,KAAK,KAAK,OAAO;AACrD;;;AH0Cc,gBAAAE,MAOA,QAAAC,aAPA;AAxCP,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF,GAIgB;AACd,QAAM,OAAO,WAAW;AACxB,QAAM,sBAAsB,WAAW,WAAW,MAAM,KAAK,EAAE,WAAW;AAC1E,QAAM,YACJ,WAAW,YAAY,OAAO,YAAY;AAAA,IACxC,CAAC,QAAQ,IAAI,eAAe;AAAA,EAC9B,KAAK,CAAC;AACR,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,OACA;AACJ,QAAM,gBAAgB,eACjB,WAAW,WAAW,OAAO,iBAAiB,CAAC,IAChD,CAAC;AAEL,MAAI,mBAAmB,gBAAgB;AACrC,WACE,gBAAAA,MAAC,SAAI,WAAU,gDACb;AAAA,sBAAAD,KAAC,SAAI,WAAU,qEACb,0BAAAC,MAAC,SAAI,WAAU,uBACb;AAAA,wBAAAD,KAAC,SACC,0BAAAA,KAAC,QAAG,WAAU,gEACX,4BACG,KAAK,EAAE,qBAAqB,IAC5B,KAAK,EAAE,mBAAmB,GAChC,GACF;AAAA,QACA,gBAAAC,MAAC,SAAI,WAAU,uBACb;AAAA,0BAAAA,MAAC,WAAM,WAAU,6DACf;AAAA,4BAAAD,KAAC,UAAK,WAAU,aAAa,eAAK,EAAE,cAAc,GAAE;AAAA,YACpD,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,aAAa,KAAK,EAAE,gCAAgC;AAAA,gBACpD,OAAO,WAAW,WAAW;AAAA,gBAC7B,UAAU,CAAC,UACT,WAAW,cAAc,MAAM,OAAO,KAAK;AAAA;AAAA,YAE/C;AAAA,aACF;AAAA,UACA,gBAAAC,MAAC,SAAI,WAAU,qEACb;AAAA,4BAAAD,KAAC,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,kCAAkC;AAAA,gBACtD,OAAO,WAAW,WAAW;AAAA,gBAC7B,UAAU,WAAW;AAAA;AAAA,YACvB;AAAA,aACF;AAAA,WACF;AAAA,SACF,GACF;AAAA,MACA,gBAAAA,KAAC,SAAI,WAAU,+CACb,0BAAAC,MAAC,SAAI,WAAU,uCACb;AAAA,wBAAAD;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,SAAS;AAAA,YAER,eAAK,EAAE,gBAAgB;AAAA;AAAA,QAC1B;AAAA,QACA,gBAAAF;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,UAAU;AAAA,YACV,MAAK;AAAA,YACL,MAAK;AAAA,YACL,SAAS,MAAM,KAAK,WAAW,UAAU;AAAA,YAExC,eAAK,EAAE,mBAAmB;AAAA;AAAA,QAC7B;AAAA,SACF,GACF;AAAA,OACF;AAAA,EAEJ;AAEA,MAAI,CAAC,eAAe;AAClB,WAAO,gBAAAF,KAAC,SAAI,WAAU,kBAAiB;AAAA,EACzC;AAEA,SACE,gBAAAA,KAAC,SAAI,WAAU,yBACb,0BAAAA,KAAC,SAAI,WAAU,4CACZ,qBAAW,YAAY,aACxB,WAAW,YAAY,UAAU,OAC/B,gBAAAA,KAAC,gCAA6B,IAE9B,gBAAAC,MAAC,SAAI,WAAU,4CACb;AAAA,oBAAAA,MAAC,YAAO,WAAU,0CAChB;AAAA,sBAAAA,MAAC,SAAI,WAAU,kBACb;AAAA,wBAAAD,KAAC,QAAG,WAAU,kEACX,wBAAc,OACjB;AAAA,QACA,gBAAAC,MAAC,SAAI,WAAU,kFACb;AAAA,0BAAAD,KAACG,QAAA,EAAM,WAAU,wFACd,yCAA+B,MAAM,cAAc,MAAM,GAC5D;AAAA,UACA,gBAAAF,MAAC,UACE;AAAA,iBAAK,EAAE,gBAAgB;AAAA,YAAG;AAAA,YAC1B,gCAAgC,aAAa;AAAA,aAChD;AAAA,UACA,gBAAAA,MAAC,UACE;AAAA,iBAAK,EAAE,kBAAkB;AAAA,YAAG;AAAA,YAC5B,4BAA4B,cAAc,aAAa,KACtD;AAAA,aACJ;AAAA,WACF;AAAA,SACF;AAAA,MACA,gBAAAA,MAAC,SAAI,WAAU,yCACb;AAAA,wBAAAD;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,SAAS,MAAM,WAAW,mBAAmB,MAAM;AAAA,YAElD,eAAK,EAAE,cAAc;AAAA;AAAA,QACxB;AAAA,QACA,gBAAAF;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,SAAS,MAAM;AACb,mBAAK,WAAW,YAAY;AAAA,YAC9B;AAAA,YAEC,eAAK,EAAE,gBAAgB;AAAA;AAAA,QAC1B;AAAA,SACF;AAAA,OACF;AAAA,IACA,gBAAAF;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT,YAAY,KAAK,EAAE,4BAA4B;AAAA,QAC/C,OAAO,KAAK,EAAE,oBAAoB;AAAA,QAClC,QAAQ,WAAW;AAAA,QACnB,SAAQ;AAAA;AAAA,IACV;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC,MACE,YACI,UAAU,SAAS,KAAK,KACxB,+BAA+B,MAAM,UAAU,MAAM,IACrD,KAAK,EAAE,4BAA4B;AAAA,QAEzC,OAAO,KAAK,EAAE,wBAAwB;AAAA,QACtC,MACE,YACI;AAAA,UACE,UAAU,iBAAiB,UAAU;AAAA,QACvC,KAAK,SACL;AAAA,QAEN,MAAM,WAAW,WAAW,WAAW,gBAAgB;AAAA;AAAA,IACzD;AAAA,IACA,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,SAAS;AAAA,QACT,QAAQ,WAAW;AAAA;AAAA,IACrB;AAAA,IACC,UAAU,SAAS,IAClB,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,YAAY,KAAK,EAAE,4BAA4B;AAAA,QAC/C,MAAM;AAAA,QACN,OAAO,MAAM;AACX,eAAK,WAAW,iBAAiB,OAAO;AAAA,QAC1C;AAAA,QACA,QAAQ,WAAW;AAAA,QACnB,UAAU,WAAW;AAAA;AAAA,IACvB,IACE;AAAA,IACJ,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,UAAU,WAAW;AAAA,QACrB,cAAc,WAAW;AAAA,QACzB,gBAAgB,cAAc,UAAU;AAAA,QACxC;AAAA;AAAA,IACF;AAAA,KACF,GAEJ,GACF;AAEJ;AAEA,SAAS,8BAA8B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AACT,GAKgB;AACd,SACE,gBAAAC,MAAC,aAAQ,WAAU,gBACjB;AAAA,oBAAAD,KAAC,QAAG,WAAU,yCAAyC,iBAAM;AAAA,IAC7D,gBAAAC,MAAC,SAAI,WAAU,gBACb;AAAA,sBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,WAAWI;AAAA,YACT;AAAA,YACA,SAAS,gBACL,qBACA;AAAA,UACN;AAAA,UAEC;AAAA;AAAA,MACH;AAAA,MACC,OACC,gBAAAJ,KAAC,OAAE,WAAU,2CAA2C,gBAAK,IAC3D;AAAA,OACN;AAAA,KACF;AAEJ;AAEA,SAAS,0BAA0B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,GAIgB;AACd,SACE,gBAAAC,MAAC,aAAQ,WAAU,gBACjB;AAAA,oBAAAD,KAAC,QAAG,WAAU,yCACX,eAAK,EAAE,yBAAyB,GACnC;AAAA,IACC,QAAQ,WAAW,IAClB,gBAAAA,KAAC,OAAE,WAAU,2CACV,eAAK,EAAE,6BAA6B,GACvC,IAEA,gBAAAA,KAAC,SAAI,WAAU,cACZ,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,wDACb,iBAAO,aACV;AAAA,YACA,gBAAAA,KAAC,UAAK,WAAU,qDACb,iBAAO,MACV;AAAA,aACF;AAAA,UACA,gBAAAA,KAAC,UAAK,WAAU,0CACb,sCAA4B,OAAO,aAAa,KAAK,IACxD;AAAA;AAAA;AAAA,MApBK,OAAO;AAAA,IAqBd,CACD,GACH;AAAA,KAEJ;AAEJ;AAEA,SAAS,2BAA2B;AAAA,EAClC;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,yCACX,eAAK,EAAE,iBAAiB,GAC3B;AAAA,MACA,gBAAAC;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,SAAS;AAAA,UAET;AAAA,4BAAAF,KAACK,iBAAA,EAAe,MAAM,IAAI;AAAA,YACzB,KAAK,EAAE,aAAa;AAAA;AAAA;AAAA,MACvB;AAAA,OACF;AAAA,IACC,MAAM,WAAW,IAChB,gBAAAL,KAAC,OAAE,WAAU,2CACV,eAAK,EAAE,6BAA6B,GACvC,IAEA,gBAAAA,KAAC,SAAI,WAAU,cACZ,gBAAM,IAAI,CAAC,SACV,gBAAAC;AAAA,MAAC;AAAA;AAAA,QACC,WAAWG;AAAA,UACT;AAAA,UACA,mBAAmB,KAAK,SACpB,2CACA;AAAA,QACN;AAAA,QAEA,MAAK;AAAA,QACL,SAAS,MAAM,aAAa,KAAK,MAAM;AAAA,QAEvC;AAAA,0BAAAH,MAAC,SAAI,WAAU,kBACb;AAAA,4BAAAA,MAAC,SAAI,WAAU,qCACb;AAAA,8BAAAD,KAAC,UAAK,WAAU,kDACb,eAAK,OACR;AAAA,cACA,gBAAAA,KAACG,QAAA,EAAM,WAAU,kGACd,yCAA+B,MAAM,KAAK,MAAM,GACnD;AAAA,eACF;AAAA,YACA,gBAAAH,KAAC,OAAE,WAAU,6DACV;AAAA,cACC,KAAK;AAAA,cACL,KAAK,EAAE,2BAA2B;AAAA,YACpC,GACF;AAAA,aACF;AAAA,UACA,gBAAAA,KAAC,UAAK,WAAU,0CACb;AAAA,YACC,KAAK,iBAAiB,KAAK;AAAA,UAC7B,KAAK,IACP;AAAA;AAAA;AAAA,MAxBK,KAAK;AAAA,IAyBZ,CACD,GACH;AAAA,KAEJ;AAEJ;;;AI/YA;AAAA,EACE,UAAAM;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AAAA,EACA;AAAA,EACA;AAAA,OACK;AA2BK,gBAAAC,MAOE,QAAAC,aAPF;AArBZ,IAAM,sBAAsB,CAAC,QAAQ,UAAU,KAAK;AAE7C,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACF,GAIgB;AACd,QAAM,OAAO,WAAW;AACxB,QAAM,qBAAqB,WAAW,UAAU,MAAM,KAAK,EAAE,WAAW;AACxE,QAAM,wBACJ,WAAW,2BAA2B,WAAW;AAEnD,SACE,gBAAAA,MAAC,SAAI,WAAU,gDACb;AAAA,oBAAAD,KAAC,SAAI,WAAU,4CACb,0BAAAC,MAAC,SAAI,WAAU,4CACb;AAAA,sBAAAA,MAAC,SAAI,WAAU,0CACb;AAAA,wBAAAD,KAAC,QAAG,WAAU,uEACX,eAAK,EAAE,oBAAoB,GAC9B;AAAA,QACA,gBAAAC,MAAC,SAAI,WAAU,2BACb;AAAA,0BAAAD,KAAC,UAAK,WAAU,+BACb,eAAK,EAAE,iBAAiB,GAC3B;AAAA,UACA,gBAAAC;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,OAAO,WAAW,UAAU;AAAA,cAC5B,eAAe,CAAC,UAAU,WAAW,gBAAgB,KAAK;AAAA,cAE1D;AAAA,gCAAAF;AAAA,kBAACG;AAAA,kBAAA;AAAA,oBACC,cAAY,KAAK,EAAE,iBAAiB;AAAA,oBACpC,WAAU;AAAA,oBAEV,0BAAAH,KAAC,eAAY;AAAA;AAAA,gBACf;AAAA,gBACA,gBAAAA,KAACI,gBAAA,EAAc,OAAO,EAAE,QAAQ,yBAAyB,GACtD,8BAAoB,IAAI,CAAC,aACxB,gBAAAJ,KAACK,aAAA,EAA0B,OAAO,UAC/B,2CAAiC,MAAM,QAAQ,KADjC,QAEjB,CACD,GACH;AAAA;AAAA;AAAA,UACF;AAAA,WACF;AAAA,SACF;AAAA,MAEA,gBAAAJ,MAAC,WAAM,WAAU,cACf;AAAA,wBAAAD,KAAC,UAAK,WAAU,8DACb,eAAK,EAAE,cAAc,GACxB;AAAA,QACA,gBAAAA;AAAA,UAACM;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,aAAa,KAAK,EAAE,kCAAkC;AAAA,YACtD,OAAO,WAAW,UAAU;AAAA,YAC5B,UAAU,CAAC,UAAU,WAAW,aAAa,MAAM,OAAO,KAAK;AAAA;AAAA,QACjE;AAAA,SACF;AAAA,MAEA,gBAAAL,MAAC,aAAQ,WAAU,cACjB;AAAA,wBAAAD,KAAC,UAAK,WAAU,8DACb,eAAK,EAAE,+BAA+B,GACzC;AAAA,QACA,gBAAAC,MAAC,SAAI,WAAU,2EACb;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,SAAQ;AAAA,cACR,mBAAkB;AAAA,cAClB,aAAa,KAAK,EAAE,oCAAoC;AAAA,cACxD,OAAO,WAAW,UAAU;AAAA,cAC5B,UAAU,WAAW;AAAA;AAAA,UACvB;AAAA,UACC,wBACC,gBAAAC,MAAC,SAAI,WAAU,wEACZ;AAAA,uBAAW,0BACV,gBAAAA;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,MAAK;AAAA,gBACL,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,SAAS,MAAM;AACb,uBAAK,WAAW,iBAAiB,QAAQ,OAAO;AAAA,gBAClD;AAAA,gBAEA;AAAA,kCAAAP,KAAC,cAAW,MAAM,IAAI;AAAA,kBACrB,KAAK,EAAE,qBAAqB;AAAA;AAAA;AAAA,YAC/B,IACE;AAAA,YACH,WAAW,0BACV,gBAAAC;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,MAAK;AAAA,gBACL,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,SAAS,MAAM;AACb,uBAAK,WAAW,iBAAiB,QAAQ,QAAQ;AAAA,gBACnD;AAAA,gBAEA;AAAA,kCAAAP,KAAC,cAAW,MAAM,IAAI;AAAA,kBACrB,KAAK,EAAE,sBAAsB;AAAA;AAAA;AAAA,YAChC,IACE;AAAA,aACN,IACE;AAAA,WACN;AAAA,SACF;AAAA,OACF,GACF;AAAA,IAEA,gBAAAA,KAAC,SAAI,WAAU,+CACb,0BAAAC,MAAC,SAAI,WAAU,uCACb;AAAA,sBAAAD;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,SAAS;AAAA,UAER,eAAK,EAAE,gBAAgB;AAAA;AAAA,MAC1B;AAAA,MACA,gBAAAP;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,UAAU,CAAC,iBAAiB;AAAA,UAC5B,MAAK;AAAA,UACL,MAAK;AAAA,UACL,SAAS,MAAM,KAAK,WAAW,SAAS;AAAA,UAEvC,eAAK,EAAE,qBAAqB;AAAA;AAAA,MAC/B;AAAA,OACF,GACF;AAAA,KACF;AAEJ;;;ACpJA;AAAA,EACE,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,OACK;AAgES,SAyFF,UAzFE,OAAAC,MAsBA,QAAAC,aAtBA;AA3ChB,IAAMC,uBAAsB,CAAC,QAAQ,UAAU,KAAK;AAE7C,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKgB;AACd,QAAM,OAAO,WAAW;AACxB,QAAM,WAAW,WAAW,mBAAmB;AAC/C,QAAM,SAAS,WAAW,mBAAmB;AAC7C,QAAM,SAAS,CAAC,YAAY,CAAC;AAC7B,QAAM,WACJ,WAAW,WAAW,OAAO,YAAY;AAAA,IACvC,CAAC,QAAQ,IAAI,eAAe;AAAA,EAC9B,KAAK,CAAC;AACR,QAAM,qBAAqB,WAAW,UAAU,MAAM,KAAK,EAAE,WAAW;AACxE,QAAM,QACJ,YAAY,SACR,WACE,KAAK,EAAE,oBAAoB,IAC3B,KAAK,EAAE,kBAAkB,IAC3B,cAAc,SAAS,KAAK,EAAE,oBAAoB;AACxD,QAAM,cAAc,cAAc,WAAW;AAE7C,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAS;AAAA,MAET,0BAAAC;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS,CAAC,UAAU,MAAM,gBAAgB;AAAA,UAE1C;AAAA,4BAAAA,MAAC,SAAI,WAAU,6EACb;AAAA,8BAAAA,MAAC,SAAI,WAAU,kBACZ;AAAA,0BAAU,eACT,gBAAAD,KAAC,SAAI,WAAU,sBACb,0BAAAA,KAAC,QAAG,WAAU,gFACX,iBACH,GACF,IAEA,gBAAAA,KAAC,QAAG,WAAU,oFACX,iBACH;AAAA,gBAED,UAAU,eACT,gBAAAC,MAAC,SAAI,WAAU,6FACb;AAAA,kCAAAD,KAACG,QAAA,EAAM,WAAU,iHACd,yCAA+B,MAAM,aAAa,MAAM,GAC3D;AAAA,kBACA,gBAAAH,KAAC,UAAK,WAAU,2CAA0C;AAAA,kBAC1D,gBAAAA,KAACG,QAAA,EAAM,WAAU,0GACd;AAAA,oBACC;AAAA,oBACA,aAAa;AAAA,kBACf,GACF;AAAA,kBACA,gBAAAH,KAAC,UAAK,WAAU,2CAA0C;AAAA,kBAC1D,gBAAAC,MAAC,UACE;AAAA,yBAAK,EAAE,kBAAkB;AAAA,oBAAG;AAAA,oBAC5B;AAAA,sBACC,aAAa,iBAAiB,aAAa;AAAA,oBAC7C,KAAK;AAAA,qBACP;AAAA,kBACA,gBAAAD,KAAC,UAAK,WAAU,2CAA0C;AAAA,kBAC1D,gBAAAA,KAAC,UAAK,WAAU,oBACb,kCAAwB,YAAY,GACvC;AAAA,mBACF,IACE;AAAA,iBACN;AAAA,cACA,gBAAAC,MAAC,SAAI,WAAU,oCACZ;AAAA,0BAAU,eACT,gBAAAA,MAAC,gBACC;AAAA,kCAAAD,KAAC,uBAAoB,SAAO,MAC1B,0BAAAA;AAAA,oBAACI;AAAA,oBAAA;AAAA,sBACC,cAAY,KAAK,EAAE,qBAAqB;AAAA,sBACxC,MAAK;AAAA,sBACL,MAAK;AAAA,sBACL,SAAQ;AAAA,sBAER,0BAAAJ;AAAA,wBAAC;AAAA;AAAA,0BACC,eAAY;AAAA,0BACZ,WAAU;AAAA,0BACX;AAAA;AAAA,sBAED;AAAA;AAAA,kBACF,GACF;AAAA,kBACA,gBAAAC,MAAC,uBAAoB,OAAM,OAAM,YAAY,GAC3C;AAAA,oCAAAD;AAAA,sBAAC;AAAA;AAAA,wBACC,SAAS,MAAM,WAAW,kBAAkB,MAAM;AAAA,wBAEjD,eAAK,EAAE,kBAAkB;AAAA;AAAA,oBAC5B;AAAA,oBACA,gBAAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,SAAS,MAAM;AACb,+BAAK,WAAW,WAAW;AAAA,wBAC7B;AAAA,wBAEC,eAAK,EAAE,oBAAoB;AAAA;AAAA,oBAC9B;AAAA,qBACF;AAAA,mBACF,IACE;AAAA,gBACJ,gBAAAA;AAAA,kBAACI;AAAA,kBAAA;AAAA,oBACC,cAAY,KAAK,EAAE,gBAAgB;AAAA,oBACnC,MAAK;AAAA,oBACL,MAAK;AAAA,oBACL,SAAQ;AAAA,oBACR,SAAS;AAAA,oBAET,0BAAAJ,KAAC,aAAU,MAAM,IAAI;AAAA;AAAA,gBACvB;AAAA,iBACF;AAAA,eACF;AAAA,YAEA,gBAAAA,KAACK,aAAA,EAAW,WAAU,kBACpB,0BAAAL,KAAC,SAAI,WAAU,iCACZ,qBAAW,WAAW,aACvB,CAAC,YACD,WAAW,WAAW,UAAU,OAC9B,gBAAAA,KAAC,sCAAmC,IAClC,YAAY,SACd,gBAAAC,MAAA,YACE;AAAA,8BAAAA,MAAC,SAAI,WAAU,cACb;AAAA,gCAAAA,MAAC,WAAM,WAAU,cACf;AAAA,kCAAAD,KAAC,UAAK,WAAU,8DACb,eAAK,EAAE,cAAc,GACxB;AAAA,kBACA,gBAAAA;AAAA,oBAACM;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,aAAa,KAAK,EAAE,+BAA+B;AAAA,sBACnD,OAAO,WAAW,UAAU;AAAA,sBAC5B,UAAU,CAAC,UACT,WAAW,aAAa,MAAM,OAAO,KAAK;AAAA;AAAA,kBAE9C;AAAA,mBACF;AAAA,gBACA,gBAAAN,KAAC,SAAI,WAAU,qCACb,0BAAAC,MAAC,SAAI,WAAU,2BACb;AAAA,kCAAAD,KAAC,UAAK,WAAU,2CACb,eAAK,EAAE,iBAAiB,GAC3B;AAAA,kBACA,gBAAAC;AAAA,oBAACM;AAAA,oBAAA;AAAA,sBACC,OAAO,WAAW,UAAU;AAAA,sBAC5B,eAAe,CAAC,UACd,WAAW,gBAAgB,KAAK;AAAA,sBAGlC;AAAA,wCAAAP;AAAA,0BAACQ;AAAA,0BAAA;AAAA,4BACC,cAAY,KAAK,EAAE,iBAAiB;AAAA,4BACpC,WAAU;AAAA,4BAEV,0BAAAR,KAACS,cAAA,EAAY;AAAA;AAAA,wBACf;AAAA,wBACA,gBAAAT;AAAA,0BAACU;AAAA,0BAAA;AAAA,4BACC,OAAO,EAAE,QAAQ,yBAAyB;AAAA,4BAEzC,UAAAR,qBAAoB,IAAI,CAAC,aACxB,gBAAAF,KAACW,aAAA,EAA0B,OAAO,UAC/B,2CAAiC,MAAM,QAAQ,KADjC,QAEjB,CACD;AAAA;AAAA,wBACH;AAAA;AAAA;AAAA,kBACF;AAAA,mBACF,GACF;AAAA,gBACA,gBAAAV,MAAC,SAAI,WAAU,cACb;AAAA,kCAAAD,KAAC,UAAK,WAAU,8DACb,eAAK,EAAE,gBAAgB,GAC1B;AAAA,kBACA,gBAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC;AAAA,sBACA,SAAQ;AAAA,sBACR,mBAAkB;AAAA,sBAClB,aAAa,KAAK,EAAE,iCAAiC;AAAA,sBACrD,OAAO,WAAW,UAAU;AAAA,sBAC5B,UAAU,WAAW;AAAA;AAAA,kBACvB;AAAA,mBACF;AAAA,iBACF;AAAA,cAEA,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC;AAAA,kBACA,YAAY,KAAK,EAAE,2BAA2B;AAAA,kBAC9C,MAAM;AAAA,kBACN,OAAO,MAAM;AACX,yBAAK,WAAW,iBAAiB,MAAM;AAAA,kBACzC;AAAA,kBACA,QAAQ,WAAW;AAAA,kBACnB,UAAU,WAAW;AAAA;AAAA,cACvB;AAAA,cAEC,CAAC,WACA,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC;AAAA,kBACA,SAAS,WAAW,WAAW,OAAO,iBAAiB,CAAC;AAAA,kBACxD,YAAY,WAAW,WAAW,OAAO,cAAc,CAAC;AAAA,kBACxD,QAAQ,WAAW;AAAA;AAAA,cACrB,IACE;AAAA,eACN,IAEA,gBAAAC,MAAA,YACE;AAAA,8BAAAD;AAAA,gBAAC;AAAA;AAAA,kBACC,SAAS;AAAA,kBACT,YAAY,KAAK,EAAE,2BAA2B;AAAA,kBAC9C,OAAO,KAAK,EAAE,gBAAgB;AAAA,kBAC9B,gBAAe;AAAA,kBACf,QAAQ,WAAW;AAAA;AAAA,cACrB;AAAA,cAEA,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC;AAAA,kBACA,YAAY,KAAK,EAAE,2BAA2B;AAAA,kBAC9C,MAAM;AAAA,kBACN,OAAO,MAAM;AACX,yBAAK,WAAW,iBAAiB,MAAM;AAAA,kBACzC;AAAA,kBACA,QAAQ,WAAW;AAAA,kBACnB,UAAU,WAAW;AAAA;AAAA,cACvB;AAAA,cAEA,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC;AAAA,kBACA,SAAS,WAAW,WAAW,OAAO,iBAAiB,CAAC;AAAA,kBACxD,YAAY,WAAW,WAAW,OAAO,cAAc,CAAC;AAAA,kBACxD,QAAQ,WAAW;AAAA;AAAA,cACrB;AAAA,eACF,GAEJ,GACF;AAAA,YAEC,UAAU,eACT,gBAAAA,KAAC,SAAI,WAAU,sCACb,0BAAAC,MAAC,SAAI,WAAU,2CACb;AAAA,8BAAAD;AAAA,gBAAC;AAAA;AAAA,kBACC;AAAA,kBACA,UAAU;AAAA,kBACV,kBAAiB;AAAA;AAAA,cACnB;AAAA,cACA,gBAAAA;AAAA,gBAACI;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,SAAS,MAAM;AACb,yBAAK,WAAW,eAAe;AAAA,kBACjC;AAAA,kBAEC,eAAK,EAAE,4BAA4B;AAAA;AAAA,cACtC;AAAA,eACF,GACF,IACE,YAAY,SACd,gBAAAJ,KAAC,SAAI,WAAU,sCACb,0BAAAC,MAAC,SAAI,WAAU,2CACb;AAAA,8BAAAD,KAAC,SAAI,WAAU,2BACZ,WAAC,YAAY,eACZ,gBAAAA;AAAA,gBAACI;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,SAAS,MAAM;AACb,yBAAK,WAAW,WAAW;AAAA,kBAC7B;AAAA,kBAEC,eAAK,EAAE,oBAAoB;AAAA;AAAA,cAC9B,IACE,MACN;AAAA,cACA,gBAAAH,MAAC,SAAI,WAAU,2BACb;AAAA,gCAAAD;AAAA,kBAACI;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,MAAK;AAAA,oBACL,SAAQ;AAAA,oBACR,SAAS,MAAM,WAAW,kBAAkB,MAAM;AAAA,oBAEjD,eAAK,EAAE,gBAAgB;AAAA;AAAA,gBAC1B;AAAA,gBACA,gBAAAH;AAAA,kBAACG;AAAA,kBAAA;AAAA,oBACC,UAAU,CAAC,iBAAiB;AAAA,oBAC5B,MAAK;AAAA,oBACL,MAAK;AAAA,oBACL,SAAS,MAAM,KAAK,WAAW,SAAS;AAAA,oBAExC;AAAA,sCAAAJ,KAACY,YAAA,EAAU,MAAM,IAAI;AAAA,sBACpB,KAAK,EAAE,kBAAkB;AAAA;AAAA;AAAA,gBAC5B;AAAA,iBACF;AAAA,eACF,GACF,IACE;AAAA;AAAA;AAAA,MACN;AAAA;AAAA,EACF;AAEJ;;;APpMM,gBAAAC,MAuEY,QAAAC,aAvEZ;AAtGN,IAAM,qBAAqB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,sBAAsB;AAC5B,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AACxB,IAAM,eAAe;AACrB,IAAM,mBAAmB,kBAAkB;AAiBpC,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAwC;AACtC,QAAM,iBAAiB,WAAW,oBAAoB;AACtD,QAAM,iBACJ,CAAC,kBAAkB,WAAW,mBAAmB;AACnD,QAAM,mBACJ,CAAC,kBACD,CAAC,mBACA,WAAW,mBAAmB,UAAU,iBAAiB;AAC5D,QAAM,YAAYC,QAA8B,IAAI;AACpD,QAAM,YAAYA,QAAkC,IAAI;AACxD,QAAM,CAAC,cAAc,eAAe,IAAIC,UAAS,mBAAmB;AACpE,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAAS,KAAK;AAC1D,QAAM,yBAAyB;AAC/B,QAAM,6BACJ,WAAW,UAAU,sBAAsB;AAC7C,QAAM,qBACJ,8BAA8B;AAEhC,EAAAC,WAAU,MAAM;AACd,UAAM,gBAAgB,MAAM;AAC1B,YAAM,QAAQ,UAAU,SAAS,sBAAsB,EAAE,SAAS;AAClE,UAAI,CAAC,OAAO;AACV;AAAA,MACF;AACA,sBAAgB,CAAC,YAAY,kBAAkB,SAAS,KAAK,CAAC;AAC9D,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,QAAM,cAAc;AAAA,IAClB,iCAAiC,GAAG,YAAY;AAAA,EAClD;AAEA,SACE,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACC,WAAWI;AAAA,QACT;AAAA,QACA,qBACI,0DACA;AAAA,MACN;AAAA,MACA,6CACE,yBAAyB,SAAS;AAAA,MAEpC,wCACE,qBAAqB,SAAS;AAAA,MAEhC,KAAK;AAAA,MACL,OAAO;AAAA,MAEP;AAAA,wBAAAL;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,aAAa;AAAA,YACb;AAAA;AAAA,QACF;AAAA,QACC,qBAAqB,OACpB,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,cAAY,WAAW,KAAK,EAAE,wBAAwB;AAAA,YACtD,oBAAiB;AAAA,YACjB,iBAAe;AAAA,YACf,iBAAe;AAAA,YACf,iBAAe;AAAA,YACf,WAAU;AAAA,YACV,MAAK;AAAA,YACL,UAAU;AAAA,YACV,WAAW,CAAC,UACV,2BAA2B,OAAO,WAAW,eAAe;AAAA,YAE9D,iBAAiB,CAAC,UAChB,8BAA8B,OAAO,SAAS;AAAA,YAEhD,eAAe,CAAC,UACd;AAAA,cACE;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YAEF,eAAe,CAAC,UACd,+BAA+B,OAAO,WAAW,eAAe;AAAA,YAElE,aAAa,CAAC,UACZ,8BAA8B,OAAO,SAAS;AAAA,YAGhD,0BAAAA,KAAC,UAAK,WAAU,8TAA6T;AAAA;AAAA,QAC/U;AAAA,QAEF,gBAAAC,MAAC,SAAI,WAAU,mDACb;AAAA,0BAAAA,MAAC,SAAI,WAAU,gCACb;AAAA,4BAAAD,KAAC,SAAI,WAAU,kCACZ,2BACC,gBAAAA;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA,iBAAiB;AAAA;AAAA,YACnB,IACE,iBACF,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,iBAAiB;AAAA;AAAA,YACnB,IAEA,gBAAAA,KAAC,SAAI,WAAU,qEACb,0BAAAC,MAAC,SAAI,WAAU,6DACb;AAAA,8BAAAD,KAAC,iCAA8B;AAAA,cAC/B,gBAAAA,KAAC,QAAG,WAAU,mEACX,qBAAW,KAAK,EAAE,mBAAmB,GACxC;AAAA,cACA,gBAAAA,KAAC,OAAE,WAAU,sEACV,qBAAW,KAAK,EAAE,YAAY,GACjC;AAAA,cACA,gBAAAC;AAAA,gBAACK;AAAA,gBAAA;AAAA,kBACC,WAAU;AAAA,kBACV,MAAK;AAAA,kBACL,SAAS,MAAM,WAAW,mBAAmB,QAAQ;AAAA,kBAErD;AAAA,oCAAAN,KAACO,iBAAA,EAAe,MAAM,IAAI;AAAA,oBACzB,WAAW,KAAK,EAAE,qBAAqB;AAAA;AAAA;AAAA,cAC1C;AAAA,eACF,GACF,GAEJ;AAAA,YACA,gBAAAP;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA;AAAA,YACF;AAAA,aACF;AAAA,UAEC,mBACC,gBAAAA;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,cACA,SAAS;AAAA;AAAA,UACX,IACE;AAAA,WACN;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,oBAAoB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AACF,GAIgB;AACd,QAAM,OAAO,WAAW;AACxB,QAAM,SAAS,8BAA8B,WAAW,OAAO,KAAK;AACpE,QAAM,iBACJ,WAAW,OAAO,aAAa,WAAW,OAAO,UAAU;AAC7D,QAAM,iBACJ,WAAW,OAAO,aAAa,WAAW,OAAO,MAAM,WAAW;AACpE,QAAM,oBAAoB,iBACtB,OACA,WAAW,OAAO,QAChB;AAAA,IACE,MAAM,WAAW,OAAO;AAAA,IACxB,OAAO,KAAK,EAAE,mBAAmB;AAAA,IACjC,MAAM;AAAA,EACR,IACA,WAAW,OAAO,MAAM,WAAW,IACjC;AAAA,IACE,MAAM,KAAK,EAAE,gCAAgC;AAAA,IAC7C,OAAO,KAAK,EAAE,iCAAiC;AAAA,IAC/C,MAAM;AAAA,EACR,IACA;AAER,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,eAAa,cAAc,SAAS;AAAA,MACpC,WAAWI;AAAA,QACT;AAAA,QACA,iBACI,sCACA;AAAA,QACJ,eACE;AAAA,MACJ;AAAA,MACA,OAAO,cAAc,OAAO;AAAA,MAE5B;AAAA,wBAAAL,KAAC,SAAI,WAAWK,IAAG,aAAa,kBAAkB,MAAM,GACtD,0BAAAJ,MAAC,SAAI,WAAU,6BACb;AAAA,0BAAAD;AAAA,YAAC;AAAA;AAAA,cACC,YAAY,KAAK,EAAE,qBAAqB;AAAA,cACxC,aAAa,KAAK,EAAE,qBAAqB;AAAA,cACzC,OAAO,WAAW,UAAU;AAAA,cAC5B,UAAU,WAAW;AAAA;AAAA,UACvB;AAAA,UACA,gBAAAC;AAAA,YAACK;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,MAAK;AAAA,cACL,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,SAAS,MAAM,WAAW,mBAAmB,QAAQ;AAAA,cAErD;AAAA,gCAAAN,KAACO,iBAAA,EAAe,MAAM,IAAI;AAAA,gBACzB,KAAK,EAAE,qBAAqB;AAAA;AAAA;AAAA,UAC/B;AAAA,WACF,GACF;AAAA,QAEA,gBAAAP;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,WAAW,KAAK,EAAE,eAAe;AAAA,YACjC,iBAAiB,KAAK,EAAE,6BAA6B;AAAA,YACrD,kBAAkB,KAAK,EAAE,8BAA8B;AAAA,YACvD,MAAM,mBAAmB,IAAI,CAAC,YAAY;AAAA,cACxC,OAAO,OAAO,MAAM,KAAK;AAAA,cACzB,OACE,WAAW,QACP,KAAK,EAAE,kBAAkB,IACzB,+BAA+B,MAAM,MAAM;AAAA,cACjD,OAAO;AAAA,YACT,EAAE;AAAA,YACF,OAAO,WAAW,UAAU;AAAA,YAC5B,eAAe,WAAW;AAAA;AAAA,QAC5B;AAAA,QAEA,gBAAAA,KAAC,SAAI,WAAU,mBAAkB,eAAY,QAAO;AAAA,QAEpD,gBAAAC;AAAA,UAAC;AAAA;AAAA,YACC,WAAWI;AAAA,cACT;AAAA,cACA,iBAAiB,cAAc;AAAA,YACjC;AAAA,YAEC;AAAA,mCAAqB,CAAC,iBACrB,gBAAAL,KAAC,SAAI,WAAU,oEACb,0BAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAM,kBAAkB;AAAA,kBACxB,gBAAgB;AAAA,kBAChB,OAAO,kBAAkB;AAAA,kBACzB,MAAM,kBAAkB;AAAA;AAAA,cAC1B,GACF,IAEA,gBAAAA;AAAA,gBAACQ;AAAA,gBAAA;AAAA,kBACC,WAAWH;AAAA,oBACT;AAAA,oBACA,iBAAiB,cAAc;AAAA,kBACjC;AAAA,kBAEA,0BAAAL;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAWK;AAAA,wBACT;AAAA,wBACA,iBAAiB,YAAY;AAAA,sBAC/B;AAAA,sBAEC,2BACC,gBAAAL;AAAA,wBAAC;AAAA;AAAA,0BACC;AAAA;AAAA,sBACF,IACE,oBACF,gBAAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,MAAM,kBAAkB;AAAA,0BACxB;AAAA,0BACA,OAAO,kBAAkB;AAAA,0BACzB,MAAM,kBAAkB;AAAA;AAAA,sBAC1B,IAEA,gBAAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,WAAWK;AAAA,4BACT;AAAA,4BACA,iBACI,4HACA;AAAA,0BACN;AAAA,0BAEC,qBAAW,OAAO,MAAM,IAAI,CAAC,UAC5B,gBAAAL;AAAA,4BAAC;AAAA;AAAA,8BACC;AAAA,8BACA;AAAA,8BACA;AAAA,8BAEA,UACE,WAAW,UAAU,oBAAoB,MAAM;AAAA,8BAEjD,UAAU,WAAW;AAAA;AAAA,4BAJhB,MAAM;AAAA,0BAKb,CACD;AAAA;AAAA,sBACH;AAAA;AAAA,kBAEJ;AAAA;AAAA,cACF;AAAA,cAGD,CAAC,kBAAkB,iBAClB,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,aAAa,WAAW,OAAO;AAAA,kBAC/B,WAAW,WAAW,OAAO;AAAA,kBAC7B,OACE,WAAW,OAAO,YACd,KAAK,EAAE,2BAA2B,IAClC,KAAK,EAAE,6BAA6B;AAAA;AAAA,cAE5C,IACE;AAAA;AAAA;AAAA,QACN;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,8BAA8B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AACF,GAIgB;AACd,QAAM,UAAU,YAAY,YAAY;AACxC,SACE,gBAAAA,KAAC,SAAI,WAAU,yFACb,0BAAAC;AAAA,IAAC;AAAA;AAAA,MACC,aAAW;AAAA,MACX,aAAW,YAAY,gBAAgB,cAAc;AAAA,MACrD,WAAW,cAAc,EAAE,QAAQ,CAAC;AAAA,MACpC,MAAM,YAAY,gBAAgB,UAAU;AAAA,MAE5C;AAAA,wBAAAA,MAAC,cACE;AAAA,sBACC,gBAAAD;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,MAAM;AAAA,cACN,aAAa;AAAA,cACb,YAAW;AAAA;AAAA,UACb,IAEA,gBAAAA,KAAC,oBAAiB,WAAU,gCAA+B;AAAA,UAE7D,gBAAAA,KAAC,UAAK,WAAU,uBAAuB,iBAAM;AAAA,WAC/C;AAAA,QACC,CAAC,aAAa,cACb,gBAAAA,KAAC,oBAAkB,uBAAY,IAC7B;AAAA;AAAA;AAAA,EACN,GACF;AAEJ;AAEA,SAAS,wBAAwB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKgB;AACd,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,kBAAgB,QAAQ,SAAS;AAAA,MAEjC;AAAA,wBAAAD;AAAA,UAACS;AAAA,UAAA;AAAA,YACC,cAAY;AAAA,YACZ,WAAWJ;AAAA,cACT;AAAA,cACA;AAAA,cACA,QAAQ,SAAS;AAAA,YACnB;AAAA,YACA;AAAA,YACA,MAAK;AAAA,YACL;AAAA,YACA,UAAU,CAAC,UAAU,SAAS,MAAM,OAAO,KAAK;AAAA;AAAA,QAClD;AAAA,QACC,QACC,gBAAAL;AAAA,UAAC;AAAA;AAAA,YACC,cAAY;AAAA,YACZ,WAAU;AAAA,YACV,MAAK;AAAA,YACL,aAAa,CAAC,UAAU,MAAM,eAAe;AAAA,YAC7C,SAAS,MAAM,SAAS,EAAE;AAAA,YAE1B,0BAAAA,KAACU,YAAA,EAAU,WAAU,YAAW;AAAA;AAAA,QAClC,IACE;AAAA;AAAA;AAAA,EACN;AAEJ;AAEA,SAAS,sBAAsB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKuB;AACrB,QAAM,OAAO,WAAW;AACxB,MACE,CAAC,iBACD,WAAW,oBAAoB,UAC/B,WAAW,mBAAmB,QAC9B;AACA,WAAO;AAAA,EACT;AAEA,SACE,gBAAAV,KAAC,SAAI,WAAU,4EACb,0BAAAC;AAAA,IAAC;AAAA;AAAA,MACC,WAAWI;AAAA,QACT;AAAA,QACA,iBAAiB,2BAA2B;AAAA,MAC9C;AAAA,MAEA;AAAA,wBAAAL;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,UAAU,CAAC;AAAA,YACX,kBAAkBK;AAAA,cAChB;AAAA,cACA,iBAAiB,WAAW;AAAA,YAC9B;AAAA;AAAA,QACF;AAAA,QACA,gBAAAL;AAAA,UAACM;AAAA,UAAA;AAAA,YACC,UAAU,CAAC;AAAA,YACX,WAAWD,IAAG,QAAQ,kBAAkB,QAAQ;AAAA,YAChD,MAAK;AAAA,YACL,MAAK;AAAA,YACL,SAAS,MAAM;AACb,mBAAK,WAAW,eAAe;AAAA,YACjC;AAAA,YAEC,eAAK,EAAE,4BAA4B;AAAA;AAAA,QACtC;AAAA;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,SAAS,wBAAwB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMgB;AACd,SACE,gBAAAJ;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,wBAAAJ,MAAC,SAAI,WAAU,0CACb;AAAA,0BAAAA,MAAC,SAAI,WAAU,4BACb;AAAA,4BAAAD,KAAC,OAAE,WAAU,2DACV,iCAAuB,MAAM,iBAAiB,MAAM,aAAa,GACpE;AAAA,YACA,gBAAAA,KAAC,OAAE,WAAU,uFACV,gBAAM,OACT;AAAA,aACF;AAAA,UACA,gBAAAA,KAACW,QAAA,EAAM,WAAU,qHACd,yCAA+B,MAAM,MAAM,MAAM,GACpD;AAAA,WACF;AAAA,QACA,gBAAAX,KAAC,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,WAAWK;AAAA,QACT;AAAA,QACA,iBAAiB,gDAAgD;AAAA,MACnE;AAAA,MACA,eAAY;AAAA,MAEX,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,KAAC,SAAI,WAAU,0DAAyD;AAAA,YACxE,gBAAAA,KAAC,SAAI,WAAU,8DAA6D;AAAA,YAC5E,gBAAAA,KAAC,SAAI,WAAU,+DAA8D;AAAA;AAAA;AAAA,QAJxE;AAAA,MAKP,CACD;AAAA;AAAA,EACH;AAEJ;AAEA,SAAS,8BAA8B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AACT,GAKgB;AACd,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,WAAWI;AAAA,QACT;AAAA,QACA,iBACI,kDACA;AAAA,MACN;AAAA,MAEA;AAAA,wBAAAL;AAAA,UAAC;AAAA;AAAA,YACC,WAAWK;AAAA,cACT;AAAA,cACA,SAAS,gBACL,+BACA;AAAA,YACN;AAAA,YAEC;AAAA;AAAA,QACH;AAAA,QACA,gBAAAL,KAAC,OAAE,WAAU,kEACV,gBACH;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,SAAS,8BACP,QACqD;AACrD,QAAM,SAA8D;AAAA,IAClE,KAAK,OAAO;AAAA,IACZ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,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;AAEA,SAAS,uBAAuB,OAA0C;AACxE,SAAO,uBAAuB,KAAK;AACrC;AAEA,SAAS,kBAAkB,OAAe,aAA6B;AACrE,QAAM,WAAW,KAAK;AAAA,IACpB;AAAA,IACA,KAAK,IAAI,iBAAiB,cAAc,YAAY;AAAA,EACtD;AACA,SAAO,KAAK,IAAI,KAAK,IAAI,OAAO,eAAe,GAAG,QAAQ;AAC5D;AAEO,SAAS,sCACd,gBACS;AACT,SACE,OAAO,SAAS,cAAc,KAC9B,iBAAiB,KACjB,KAAK,MAAM,cAAc,IAAI;AAEjC;AAEA,SAAS,+BACP,OACA,WACA,WACA,cACA,iBACM;AACN,MAAI,MAAM,WAAW,GAAG;AACtB;AAAA,EACF;AACA,QAAM,cAAc,UAAU,SAAS,sBAAsB,EAAE,SAAS;AACxE,MAAI,CAAC,aAAa;AAChB;AAAA,EACF;AACA,QAAM,aAAa,kBAAkB,cAAc,WAAW;AAC9D,YAAU,UAAU;AAAA,IAClB,UAAU,kBAAkB,iBAAiB,WAAW;AAAA,IACxD,WAAW,MAAM;AAAA,IACjB,cAAc,MAAM;AAAA,IACpB;AAAA,EACF;AACA,kBAAgB,UAAU;AAC1B,QAAM,cAAc,oBAAoB,MAAM,SAAS;AACzD;AAEA,SAAS,+BACP,OACA,WACA,iBACM;AACN,QAAM,QAAQ,UAAU;AACxB,MAAI,CAAC,SAAS,MAAM,cAAc,MAAM,WAAW;AACjD;AAAA,EACF;AACA;AAAA,IACE,KAAK;AAAA,MACH,KAAK;AAAA,QACH,MAAM,aAAa,MAAM,UAAU,MAAM;AAAA,QACzC;AAAA,MACF;AAAA,MACA,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,8BACP,OACA,WACM;AACN,YAAU,UAAU;AACpB,QAAM,cAAc,wBAAwB,MAAM,SAAS;AAC7D;AAEA,SAAS,2BACP,OACA,WACA,iBACM;AACN,MAAI,MAAM,QAAQ,eAAe,MAAM,QAAQ,cAAc;AAC3D;AAAA,EACF;AACA,QAAM,QAAQ,MAAM,QAAQ,eAAe,KAAK;AAChD,QAAM,cAAc,UAAU,SAAS,sBAAsB,EAAE,SAAS;AACxE,MAAI,CAAC,aAAa;AAChB;AAAA,EACF;AACA,QAAM,eAAe;AACrB,kBAAgB,CAAC,YAAY,kBAAkB,UAAU,OAAO,WAAW,CAAC;AAC9E;;;AQ1wBA;AAAA,EACE,aAAAY;AAAA,OAIK;AAEP,SAAS,UAAAC,SAAQ,WAAW,MAAAC,WAAU;;;ACPtC,SAAS,kBAAkB,aAAAC,YAAW,YAAAC,iBAAgB;;;ACS/C,IAAM,sBAA4C;AAElD,SAAS,mCACd,wBACA,QACe;AACf,MACE,0BACA,OAAO,KAAK,CAAC,UAAU,MAAM,YAAY,sBAAsB,GAC/D;AACA,WAAO;AAAA,EACT;AACA,SAAO,OAAO,CAAC,GAAG,WAAW;AAC/B;AAEO,SAAS,kCACd,uBACA,OACe;AACf,MACE,yBACA,MAAM,KAAK,CAAC,SAAS,KAAK,WAAW,qBAAqB,GAC1D;AACA,WAAO;AAAA,EACT;AACA,SAAO,MAAM,CAAC,GAAG,UAAU;AAC7B;AAEO,SAAS,kBAAkB,KAAgC;AAChE,SAAO;AAAA,IACL,aAAa,IAAI;AAAA,IACjB,MAAM,IAAI;AAAA,IACV,SAAS,IAAI,SAAS,WAAW,WAAW;AAAA,EAC9C;AACF;AAEO,SAAS,qCACd,KACoC;AACpC,SAAO;AAAA,IACL,MAAM,IAAI,SAAS,WAAW,WAAW;AAAA,IACzC,MAAM,IAAI;AAAA,IACV,MAAM,IAAI;AAAA,EACZ;AACF;AAEO,SAAS,2BAA2B,SAA0B;AACnE,MAAI;AACF,WAAO,WAAW,UAAU,OAAO,KAAK;AAAA,EAC1C,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,gCACd,OACA,MACQ;AACR,QAAM,MACJ,iBAAiB,QACb,MAAM,UACN,OAAO,UAAU,WACf,QACA,OAAO,KAAK;AAEpB,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,sCAAsC;AAChD,WAAO,KAAK,EAAE,6BAA6B;AAAA,EAC7C;AACA,MAAI,QAAQ,4CAA4C;AACtD,WAAO,KAAK,EAAE,mCAAmC;AAAA,EACnD;AACA,MAAI,QAAQ,oCAAoC;AAC9C,WAAO,KAAK,EAAE,2BAA2B;AAAA,EAC3C;AACA,MAAI,QAAQ,+BAA+B;AACzC,WAAO,KAAK,EAAE,sBAAsB;AAAA,EACtC;AACA,MAAI,IAAI,WAAW,8BAA8B,GAAG;AAClD,WAAO,KAAK,EAAE,wBAAwB;AAAA,MACpC,MAAM,IAAI,MAAM,+BAA+B,MAAM;AAAA,IACvD,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;ACnCO,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,EACF,IAAI;AACJ,QAAM,gBAAgB,QAAQ;AAE9B,QAAM,YAAY,CAAC,YAAoB;AACrC,mBAAe,KAAK,OAAO;AAAA,EAC7B;AAEA,QAAM,cAAc,CAAC,UAAmB;AACtC,cAAU,gCAAgC,OAAO,IAAI,CAAC;AAAA,EACxD;AAEA,QAAM,mBAAmB,OACvB,MACA,SAA6C,oBAC1C;AACH,UAAM,cAAc,KAAK,OAAO,CAAC,QAAQ,IAAI,KAAK,KAAK,EAAE,SAAS,CAAC;AACnE,QAAI,CAAC,UAAU,YAAY,WAAW,GAAG;AACvC,yBAAmB,IAAI;AACvB;AAAA,IACF;AAEA,QAAI,OAAO,SAAS,UAAU;AAC5B,UAAI,OAAO,eAAe,SAAS;AACjC,8BAAsB,CAAC,aAAa;AAAA,UAClC,GAAG;AAAA,UACH,SAAS;AAAA,YACP,QAAQ;AAAA,YACR,YAAY,IAAI,oCAAoC;AAAA,UACtD;AAAA,QACF,EAAE;AAAA,MACJ,OAAO;AACL,6BAAqB,CAAC,aAAa;AAAA,UACjC,GAAG;AAAA,UACH,SAAS;AAAA,YACP,QAAQ;AAAA,YACR,YAAY,IAAI,oCAAoC;AAAA,UACtD;AAAA,QACF,EAAE;AAAA,MACJ;AACA,yBAAmB,IAAI;AACvB;AAAA,IACF;AAEA,UAAM,kBAAkB,UAAU;AAClC,QAAI,CAAC,iBAAiB;AACpB,yBAAmB,IAAI;AACvB;AAAA,IACF;AAEA,UAAM,QAAQ,QAAQ;AAAA,MACpB,OAAO,eAAe,SAClB;AAAA,QACE,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,MAAM,YAAY,IAAI,iBAAiB;AAAA,QACvC,QAAQ,OAAO;AAAA,QACf;AAAA,MACF,IACA;AAAA,QACE,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,MAAM,YAAY,IAAI,iBAAiB;AAAA,QACvC;AAAA,MACF;AAAA,IACN;AACA,uBAAmB,IAAI;AACvB,mBAAe;AAAA,EACjB;AAEA,QAAM,8BAA8B,CAClC,eAEA,eAAe,SACX;AAAA,IACE,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,QAAQ,UAAU,kBAAkB;AAAA,EACtC,IACA;AAAA,IACE,MAAM;AAAA,IACN,YAAY;AAAA,EACd;AAEN,QAAM,wBAAwB,OAAO,YAM/B;AACJ,UAAM,gBAAgB,IAAI,IAAI,QAAQ,aAAa,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;AACzE,UAAM,cAAc;AAAA,MAClB,QAAQ;AAAA,IACV,EACG,OAAO,CAAC,QAAQ,CAAC,cAAc,IAAI,IAAI,IAAI,CAAC,EAC5C,IAAI,CAAC,SAAS;AAAA,MACb,aAAa,IAAI;AAAA,MACjB,MAAM,IAAI;AAAA,MACV,SAAS,IAAI;AAAA,IACf,EAAE;AAEJ,QAAI,YAAY,WAAW,GAAG;AAC5B;AAAA,IACF;AAEA,UAAM,QAAQ,QAAQ;AAAA,MACpB,QAAQ,eAAe,SACnB;AAAA,QACE,SAAS,QAAQ;AAAA,QACjB,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,QAAQ,QAAQ,UAAU;AAAA,QAC1B;AAAA,MACF,IACA;AAAA,QACE,SAAS,QAAQ;AAAA,QACjB,YAAY;AAAA,QACZ,MAAM;AAAA,QACN;AAAA,MACF;AAAA,IACN;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM,iBAAiB,YAA8B;AACnD,UAAI,CAAC,QAAQ,aAAa;AACxB;AAAA,MACF;AACA,UAAI,eAAe,UAAU,CAAC,UAAU,gBAAgB;AACtD;AAAA,MACF;AACA,UACE,QAAQ,YAAY,qBACpB,CAAC,QAAQ,YAAY,qBACrB,CAAC,QAAQ,YAAY,iBACrB,CAAC,QAAQ,YAAY,kBACrB;AACA,cAAM,OAAO,MAAM,QAAQ,YAAY,kBAAkB;AAAA,UACvD;AAAA,QACF,CAAC;AACD,cAAM;AAAA,UACJ;AAAA,UACA,eAAe,SACX;AAAA,YACE,MAAM;AAAA,YACN,YAAY;AAAA,YACZ,QAAQ,UAAU,kBAAkB;AAAA,UACtC,IACA;AAAA,YACE,MAAM;AAAA,YACN,YAAY;AAAA,UACd;AAAA,QACN;AACA;AAAA,MACF;AAEA;AAAA,QACE,eAAe,SACX,EAAE,MAAM,UAAU,YAAY,QAAQ,UAAU,eAAgB,IAChE,EAAE,MAAM,UAAU,WAAW;AAAA,MACnC;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,cAAc;AAClB,YAAM,kBAAkB,UAAU;AAClC,UACE,CAAC,mBACD,CAAC,2BAA2B,KAAK,EAAE,2BAA2B,CAAC,GAC/D;AACA;AAAA,MACF;AACA,UAAI;AACF,cAAM,QAAQ,QAAQ,YAAY;AAAA,UAChC,SAAS;AAAA,UACT;AAAA,QACF,CAAC;AACD,gCAAwB,MAAM;AAC9B,+BAAuB,MAAM;AAC7B,wBAAgB,CAAC,aAAa;AAAA,UAC5B,GAAG;AAAA,UACH,iBAAiB;AAAA,UACjB,gBAAgB;AAAA,QAClB,EAAE;AACF,mBAAW;AAAA,MACb,SAAS,OAAO;AACd,oBAAY,KAAK;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,MAAM,aAAa;AACjB,YAAM,kBAAkB,UAAU;AAClC,YAAM,iBAAiB,UAAU;AACjC,UACE,CAAC,mBACD,CAAC,kBACD,CAAC,2BAA2B,KAAK,EAAE,0BAA0B,CAAC,GAC9D;AACA;AAAA,MACF;AAEA,UAAI;AACF,cAAM,QAAQ,QAAQ,WAAW;AAAA,UAC/B,SAAS;AAAA,UACT,QAAQ;AAAA,UACR;AAAA,QACF,CAAC;AACD,+BAAuB,MAAM;AAC7B,wBAAgB,CAAC,aAAa;AAAA,UAC5B,GAAG;AAAA,UACH,gBAAgB;AAAA,QAClB,EAAE;AACF,mBAAW;AAAA,MACb,SAAS,OAAO;AACd,oBAAY,KAAK;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,MAAM,iBAAiB,YAA8B;AACnD,UAAI,CAAC,QAAQ,aAAa;AACxB;AAAA,MACF;AACA,UACE,eAAe,UACf,CAAC,UAAU,kBACX,mBAAmB,UACnB;AACA;AAAA,MACF;AACA,UACE,QAAQ,YAAY,qBACpB,CAAC,QAAQ,YAAY,qBACrB,CAAC,QAAQ,YAAY,iBACrB,CAAC,QAAQ,YAAY,kBACrB;AACA,cAAM,OAAO,MAAM,QAAQ,YAAY,kBAAkB;AAAA,UACvD;AAAA,QACF,CAAC;AACD,cAAM,iBAAiB,MAAM,4BAA4B,UAAU,CAAC;AACpE;AAAA,MACF;AAEA,yBAAmB,4BAA4B,UAAU,CAAC;AAAA,IAC5D;AAAA,IAEA,MAAM,iBACJ,YACA,MACA;AACA,UAAI,CAAC,QAAQ,aAAa,eAAe;AACvC;AAAA,MACF;AAEA,YAAM,OAAO,MAAM,QAAQ,YAAY,cAAc;AAAA,QACnD;AAAA,QACA,qBAAqB;AAAA,QACrB;AAAA,MACF,CAAC;AACD,UAAI,KAAK,WAAW,GAAG;AACrB;AAAA,MACF;AAEA,YAAM,QAAQ,YAAY,cAAc;AAAA,QACtC,OAAO;AAAA,QACP,OAAO,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI;AAAA,QACjC;AAAA,MACF,CAAC;AACD,YAAM,iBAAiB,MAAM,4BAA4B,UAAU,CAAC;AAAA,IACtE;AAAA,IAEA,MAAM,cAAc,WAAsC;AACxD,YAAM,QAAQ,aAAa,gBAAgB,SAAS;AAAA,IACtD;AAAA,IAEA,MAAM,iBAAiB,KAA6B;AAClD,UAAI;AACF,cAAM,QAAQ,QAAQ;AAAA,UACpB,IAAI,eAAe,SACf;AAAA,YACE,cAAc,IAAI;AAAA,YAClB,SAAS,IAAI;AAAA,YACb,YAAY;AAAA,YACZ,QAAQ,IAAI;AAAA,YACZ;AAAA,UACF,IACA;AAAA,YACE,cAAc,IAAI;AAAA,YAClB,SAAS,IAAI;AAAA,YACb,YAAY;AAAA,YACZ;AAAA,UACF;AAAA,QACN;AACA,uBAAe;AAAA,MACjB,SAAS,OAAO;AACd,oBAAY,KAAK;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,kBAA2B;AACvC,UAAI,CAAC,YAAY,SAAS,CAAC,WAAW,OAAO;AAC3C;AAAA,MACF;AACA,YAAM,WACJ,kBAAkB,KAAK,KAAK,UAAU,sBAAsB,KAAK;AACnE,UAAI,CAAC,UAAU;AACb;AAAA,MACF;AACA,UAAI,aAAa,UAAU,uBAAuB;AAChD,wBAAgB,CAAC,aAAa;AAAA,UAC5B,GAAG;AAAA,UACH,uBAAuB;AAAA,QACzB,EAAE;AAAA,MACJ;AAEA,uBAAiB,IAAI;AACrB,UAAI,aAAqC;AACzC,UAAI;AACF,cAAM,cAAc,MAAM,QAAQ;AAAA,UAChC,QAAQ,gBAAgB,YAAY;AAAA,QACtC;AACA,qBAAa,MAAM,QAAQ,QAAQ,UAAU;AAAA,UAC3C,eAAe;AAAA,UACf,aAAa,aAAa,UAAU;AAAA,UACpC,SAAS,YAAY,MAAM,MAAM;AAAA,UACjC,QAAQ,WAAW,MAAM,KAAK;AAAA,UAC9B;AAAA,QACF,CAAC;AACD,uBAAe;AACf,cAAM,SAAS,MAAM,QAAQ,YAAY,QAAQ;AAAA,UAC/C,OAAO,YAAY,MAAM;AAAA,UACzB;AAAA,UACA,KAAK;AAAA,UACL,MAAM,WAAW,MAAM;AAAA,UACvB;AAAA,QACF,CAAC;AACD,cAAM,QAAQ,QAAQ,YAAY;AAAA,UAChC,cAAc,OAAO;AAAA,UACrB,SAAS,YAAY,MAAM,MAAM;AAAA,UACjC,SAAS,OAAO,WAAW,CAAC;AAAA,UAC5B,OAAO,WAAW;AAAA,UAClB,QAAQ,OAAO;AAAA,UACf,SAAS,OAAO;AAAA,UAChB,QAAQ,WAAW,MAAM,KAAK;AAAA,UAC9B;AAAA,QACF,CAAC;AACD,YAAI,OAAO,WAAW,aAAa;AACjC,oBAAU,KAAK,EAAE,oBAAoB,CAAC;AAAA,QACxC;AAAA,MACF,SAAS,OAAO;AACd,cAAM,UAAU,gCAAgC,OAAO,IAAI;AAC3D,YAAI,cAAc,YAAY,SAAS,WAAW,OAAO;AACvD,cAAI;AACF,kBAAM,QAAQ,QAAQ,YAAY;AAAA,cAChC,cAAc;AAAA,cACd,SAAS,YAAY,MAAM,MAAM;AAAA,cACjC,SAAS,CAAC;AAAA,cACV,OAAO,WAAW;AAAA,cAClB,QAAQ;AAAA,cACR,SAAS,KAAK,EAAE,2BAA2B;AAAA,cAC3C,QAAQ,WAAW,MAAM,KAAK;AAAA,cAC9B;AAAA,YACF,CAAC;AAAA,UACH,QAAQ;AAAA,UAER;AAAA,QACF;AACA,kBAAU,OAAO;AAAA,MACnB,UAAE;AACA,yBAAiB,KAAK;AACtB,uBAAe;AAAA,MACjB;AAAA,IACF;AAAA,IAEA,MAAM,YAAY;AAChB,YAAM,QAAQ,WAAW,MAAM,KAAK;AACpC,UAAI,CAAC,OAAO;AACV,kBAAU,KAAK,EAAE,wBAAwB,CAAC;AAC1C;AAAA,MACF;AAEA,UAAI;AACF,cAAM,UAAU,6BAA6B,WAAW,OAAO;AAC/D,cAAM,aACJ,oBAAoB,WAChB,MAAM,QAAQ,QAAQ,YAAY;AAAA,UAChC;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC,IACD,MAAM,QAAQ,QAAQ,YAAY;AAAA,UAChC;AAAA,UACA,SAAS,UAAU,mBAAmB;AAAA,UACtC;AAAA,UACA;AAAA,QACF,CAAC;AACP,cAAM,sBAAsB;AAAA,UAC1B;AAAA,UACA,cACE,oBAAoB,WAChB,CAAC,IACA,YAAY,OAAO,YAAY;AAAA,YAC9B,CAAC,QAAQ,IAAI,eAAe;AAAA,UAC9B,KAAK,CAAC;AAAA,UACZ,SAAS,WAAW;AAAA,UACpB,YAAY;AAAA,QACd,CAAC;AACD,gCAAwB,MAAM;AAC9B,wBAAgB,CAAC,aAAa;AAAA,UAC5B,GAAG;AAAA,UACH,mBAAmB;AAAA,UACnB,iBAAiB;AAAA,UACjB,iBAAiB,WAAW;AAAA,QAC9B,EAAE;AACF,mBAAW;AAAA,MACb,SAAS,OAAO;AACd,oBAAY,KAAK;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,MAAM,WAAW;AACf,YAAM,kBAAkB,UAAU;AAClC,UAAI,CAAC,iBAAiB;AACpB;AAAA,MACF;AACA,YAAM,QAAQ,UAAU,MAAM,KAAK;AACnC,UAAI,CAAC,OAAO;AACV,kBAAU,KAAK,EAAE,wBAAwB,CAAC;AAC1C;AAAA,MACF;AAEA,UAAI;AACF,cAAM,UAAU,6BAA6B,UAAU,OAAO;AAC9D,cAAM,YACJ,mBAAmB,WACf,MAAM,QAAQ,QAAQ,WAAW;AAAA,UAC/B;AAAA,UACA,SAAS;AAAA,UACT,UAAU,UAAU;AAAA,UACpB;AAAA,UACA;AAAA,QACF,CAAC,IACD,MAAM,QAAQ,QAAQ,WAAW;AAAA,UAC/B;AAAA,UACA,SAAS;AAAA,UACT,UAAU,UAAU;AAAA,UACpB,QAAQ,UAAU,kBAAkB;AAAA,UACpC;AAAA,UACA;AAAA,QACF,CAAC;AACP,cAAM,sBAAsB;AAAA,UAC1B;AAAA,UACA,cACE,mBAAmB,WACf,CAAC,IACA,WAAW,OAAO,YAAY;AAAA,YAC7B,CAAC,QAAQ,IAAI,eAAe;AAAA,UAC9B,KAAK,CAAC;AAAA,UACZ,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,QAAQ,UAAU;AAAA,QACpB,CAAC;AACD,+BAAuB,MAAM;AAC7B,wBAAgB,CAAC,aAAa;AAAA,UAC5B,GAAG;AAAA,UACH,gBAAgB,UAAU;AAAA,UAC1B,kBAAkB;AAAA,UAClB,gBAAgB;AAAA,QAClB,EAAE;AACF,mBAAW;AAAA,MACb,SAAS,OAAO;AACd,oBAAY,KAAK;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,MAAM,iBAAiB;AACrB,YAAM,kBAAkB,UAAU;AAClC,UAAI,CAAC,QAAQ,cAAc,mBAAmB,CAAC,iBAAiB;AAC9D;AAAA,MACF;AAEA,UAAI;AACF,cAAM,OAAO,MAAM,QAAQ,aAAa,gBAAgB;AAAA,UACtD,SAAS;AAAA,UACT,QAAQ,UAAU,kBAAkB;AAAA,UACpC;AAAA,QACF,CAAC;AACD,YACE,OAAO,cAAc,eACrB,CAAC,UAAU,WAAW,WACtB;AACA,gBAAM,IAAI,MAAM,KAAK,EAAE,+BAA+B,CAAC;AAAA,QACzD;AACA,cAAM,UAAU,UAAU,UAAU,IAAI;AAAA,MAC1C,SAAS,OAAO;AACd,oBAAY,KAAK;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,MAAM,yBAAyB,MAAmC;AAChE,YAAM,iBAAiB,IAAI;AAAA,IAC7B;AAAA,EACF;AACF;;;ACxkBO,SAAS,0CACd,OAIY;AACZ,SAAO;AAAA,IACL,SAAS,OAAO,qBAAqB;AAAA,IACrC,OAAO,OAAO,mBAAmB;AAAA,EACnC;AACF;AAEO,SAAS,yCACd,OAIA,WAAiC,qBACtB;AACX,SAAO;AAAA,IACL,SAAS,OAAO,oBAAoB;AAAA,IACpC;AAAA,IACA,OAAO,OAAO,kBAAkB;AAAA,EAClC;AACF;AAEO,SAAS,gCACd,SACA,SACuB;AACvB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,EAClB;AACF;AAEO,SAAS,+BACd,SACA,QACuB;AACvB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,gBAAgB;AAAA,EAClB;AACF;AAEO,SAAS,4CACd,SACA,QACuB;AACvB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,wBAAwB,OAAO,iBAAiB;AAAA,IAChD,iBAAiB;AAAA,MACf,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AACF;AAEO,SAAS,8CACd,SACA,QACuB;AACvB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,EACF;AACF;AAEO,SAAS,qCACd,SACA,QACA,YACY;AACZ,MAAI,eAAe,QAAQ;AACzB,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,SAAS,6BAA6B,QAAQ,MAAM,WAAW,EAAE;AAAA,IACjE,OAAO,QAAQ,MAAM,SAAS;AAAA,EAChC;AACF;AAEO,SAAS,oCACd,SACA,QACA,YACW;AACX,MAAI,eAAe,QAAQ;AACzB,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,SAAS,6BAA6B,QAAQ,KAAK,WAAW,EAAE;AAAA,IAChE,UAAU,QAAQ,KAAK,YAAY;AAAA,IACnC,OAAO,QAAQ,KAAK,SAAS;AAAA,EAC/B;AACF;AAEO,SAAS,4CACd,SACA,YACuB;AACvB,MAAI,eAAe,UAAU;AAC3B,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,EACnB;AACF;AAEO,SAAS,2CACd,SACA,YACuB;AACvB,MAAI,eAAe,UAAU;AAC3B,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,EAClB;AACF;AAEO,SAAS,qCACd,SACA,YACA,SACuB;AACvB,MAAI,eAAe,UAAU;AAC3B,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,mBAAmB;AAAA,EACrB;AACF;AAEO,SAAS,mCACd,SACA,YACA,OACuB;AACvB,MAAI,eAAe,UAAU;AAC3B,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,iBAAiB;AAAA,EACnB;AACF;AAEO,SAAS,oCACd,SACA,YACA,SACuB;AACvB,MAAI,eAAe,UAAU;AAC3B,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,kBAAkB;AAAA,EACpB;AACF;AAEO,SAAS,kCACd,SACA,YACA,OACuB;AACvB,MAAI,eAAe,UAAU;AAC3B,WAAO;AAAA,EACT;AACA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,gBAAgB;AAAA,EAClB;AACF;;;AHrFA,IAAM,8BAA8B,CAAC,OAAO;AAErC,SAAS,0BAA0B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2D;AACzD,QAAM,OAAO,QAAQ;AACrB,QAAM,CAAC,WAAW,oBAAoB,IAAIC;AAAA,IAAS,MACjD,+BAA+B,KAAK;AAAA,EACtC;AACA,QAAM,CAAC,iBAAiB,uBAAuB,IAC7CA,UAAiC,MAAM;AACzC,QAAM,CAAC,gBAAgB,sBAAsB,IAC3CA,UAAiC,MAAM;AACzC,QAAM,CAAC,YAAY,qBAAqB,IAAIA;AAAA,IAAqB,MAC/D,0CAA0C,SAAS;AAAA,EACrD;AACA,QAAM,CAAC,WAAW,oBAAoB,IAAIA;AAAA,IAAoB,MAC5D,yCAAyC,SAAS;AAAA,EACpD;AACA,QAAM,CAAC,kBAAkB,mBAAmB,IAAIA,UAAS,CAAC;AAC1D,QAAM,CAAC,mBAAmB,oBAAoB,IAAIA,UAAS,CAAC;AAC5D,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAAS,KAAK;AACxD,QAAM,CAAC,iBAAiB,kBAAkB,IACxCA,UAA6C,IAAI;AACnD,QAAM,CAAC,QAAQ,SAAS,IAAIA,UAE1B;AAAA,IACA,OAAO;AAAA,IACP,WAAW;AAAA,IACX,OAAO,CAAC;AAAA,EACV,CAAC;AACD,QAAM,CAAC,aAAa,cAAc,IAAIA,UAEpC;AAAA,IACA,OAAO;AAAA,IACP,WAAW;AAAA,IACX,OAAO;AAAA,EACT,CAAC;AACD,QAAM,CAAC,YAAY,aAAa,IAAIA,UAElC;AAAA,IACA,OAAO;AAAA,IACP,WAAW;AAAA,IACX,OAAO;AAAA,EACT,CAAC;AACD,QAAM,sBAAsB,iBAAiB,UAAU,gBAAgB;AACvE,QAAM,6BACJ,qBAAqB,QAAQ,aAAa,mBAAmB,KAC7D,qBAAqB,QAAQ,aAAa,mBAAmB,KAC7D,qBAAqB,QAAQ,aAAa,eAAe,KACzD,qBAAqB,QAAQ,aAAa,kBAAkB;AAC9D,QAAM,0BAA0B;AAAA,IAC9B,QAAQ;AAAA,IACR;AAAA,EACF;AAEA,QAAM,kBAAkB,CACtB,YAGG;AACH,yBAAqB,CAAC,YAAY;AAChC,YAAM,OACJ,OAAO,YAAY,aACf,QAAQ,OAAO,IACd;AAAA,QACC,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AACN,sBAAgB,IAAI;AACpB,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,QAAM,gBAAgB,MAAM;AAC1B,wBAAoB,CAAC,YAAY,UAAU,CAAC;AAAA,EAC9C;AAEA,QAAM,iBAAiB,MAAM;AAC3B,yBAAqB,CAAC,YAAY,UAAU,CAAC;AAAA,EAC/C;AAEA,QAAM,aAAa,MAAM;AACvB,kBAAc;AACd,mBAAe;AAAA,EACjB;AAEA,EAAAC,WAAU,MAAM;AACd,UAAM,aAAa,+BAA+B,KAAK;AACvD,yBAAqB,UAAU;AAC/B;AAAA,MACE,0CAA0C,UAAU;AAAA,IACtD;AACA,yBAAqB,CAAC,aAAa;AAAA,MACjC,GAAG,yCAAyC,YAAY,QAAQ,QAAQ;AAAA,IAC1E,EAAE;AAAA,EACJ,GAAG,CAAC,WAAW,CAAC;AAEhB,EAAAA,WAAU,MAAM;AACd,UAAM,4BAA4B,OAAO,sBAAsB;AAC/D,yBAAqB,CAAC,YAAY;AAChC,UAAK,QAAQ,sBAAsB,SAAU,2BAA2B;AACtE,eAAO;AAAA,MACT;AACA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,mBAAmB;AAAA,MACrB;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,OAAO,iBAAiB,CAAC;AAE7B,EAAAA,WAAU,MAAM;AACd,QAAI,WAAW;AACf,cAAU,CAAC,aAAa;AAAA,MACtB,GAAG;AAAA,MACH,OAAO;AAAA,MACP,WAAW;AAAA,IACb,EAAE;AAEF,SAAK,QAAQ,QACV,WAAW;AAAA,MACV,aAAa,uBAAuB;AAAA,MACpC,cAAc,UAAU;AAAA,MACxB;AAAA,IACF,CAAC,EACA,KAAK,CAAC,WAAW;AAChB,UAAI,UAAU;AACZ;AAAA,MACF;AACA,gBAAU;AAAA,QACR,OAAO;AAAA,QACP,WAAW;AAAA,QACX,OAAO,OAAO;AAAA,MAChB,CAAC;AACD;AAAA,QAAgB,CAAC,YACf,4CAA4C,SAAS,MAAM;AAAA,MAC7D;AAAA,IACF,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,UAAI,UAAU;AACZ;AAAA,MACF;AACA,gBAAU;AAAA,QACR,OAAO,gCAAgC,OAAO,IAAI;AAAA,QAClD,WAAW;AAAA,QACX,OAAO,CAAC;AAAA,MACV,CAAC;AAAA,IACH,CAAC;AAEH,WAAO,MAAM;AACX,iBAAW;AAAA,IACb;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA,UAAU;AAAA,IACV;AAAA,EACF,CAAC;AAED,EAAAA,WAAU,MAAM;AACd,UAAM,kBAAkB,UAAU;AAClC,QAAI,CAAC,iBAAiB;AACpB,qBAAe;AAAA,QACb,OAAO;AAAA,QACP,WAAW;AAAA,QACX,OAAO;AAAA,MACT,CAAC;AACD;AAAA,IACF;AAEA,QAAI,WAAW;AACf,mBAAe,CAAC,aAAa;AAAA,MAC3B,GAAG;AAAA,MACH,OAAO;AAAA,MACP,WAAW;AAAA,IACb,EAAE;AACF,SAAK,QAAQ,QACV,eAAe;AAAA,MACd,SAAS;AAAA,MACT;AAAA,IACF,CAAC,EACA,KAAK,CAAC,WAAW;AAChB,UAAI,UAAU;AACZ;AAAA,MACF;AACA,qBAAe;AAAA,QACb,OAAO;AAAA,QACP,WAAW;AAAA,QACX,OAAO;AAAA,MACT,CAAC;AACD;AAAA,QAAgB,CAAC,YACf,8CAA8C,SAAS,MAAM;AAAA,MAC/D;AAAA,IACF,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,UAAI,UAAU;AACZ;AAAA,MACF;AACA,qBAAe;AAAA,QACb,OAAO,gCAAgC,OAAO,IAAI;AAAA,QAClD,WAAW;AAAA,QACX,OAAO;AAAA,MACT,CAAC;AAAA,IACH,CAAC;AAEH,WAAO,MAAM;AACX,iBAAW;AAAA,IACb;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,UAAU;AAAA,IACV;AAAA,EACF,CAAC;AAED,EAAAA,WAAU,MAAM;AACd,UAAM,kBAAkB,UAAU;AAClC,UAAM,iBAAiB,UAAU;AACjC,QAAI,CAAC,mBAAmB,CAAC,gBAAgB;AACvC,oBAAc;AAAA,QACZ,OAAO;AAAA,QACP,WAAW;AAAA,QACX,OAAO;AAAA,MACT,CAAC;AACD;AAAA,IACF;AAEA,QAAI,WAAW;AACf,kBAAc,CAAC,aAAa;AAAA,MAC1B,GAAG;AAAA,MACH,OAAO;AAAA,MACP,WAAW;AAAA,IACb,EAAE;AACF,SAAK,QAAQ,QACV,cAAc;AAAA,MACb,SAAS;AAAA,MACT,QAAQ;AAAA,MACR;AAAA,IACF,CAAC,EACA,KAAK,CAAC,WAAW;AAChB,UAAI,UAAU;AACZ;AAAA,MACF;AACA,oBAAc;AAAA,QACZ,OAAO;AAAA,QACP,WAAW;AAAA,QACX,OAAO;AAAA,MACT,CAAC;AAAA,IACH,CAAC,EACA,MAAM,CAAC,UAAU;AAChB,UAAI,UAAU;AACZ;AAAA,MACF;AACA,oBAAc;AAAA,QACZ,OAAO,gCAAgC,OAAO,IAAI;AAAA,QAClD,WAAW;AAAA,QACX,OAAO;AAAA,MACT,CAAC;AAAA,IACH,CAAC;AAEH,WAAO,MAAM;AACX,iBAAW;AAAA,IACb;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,UAAU;AAAA,IACV;AAAA,EACF,CAAC;AAED,EAAAA,WAAU,MAAM;AACd;AAAA,MAAsB,CAAC,YACrB;AAAA,QACE;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG;AAAA,IACD,YAAY,OAAO,MAAM;AAAA,IACzB,YAAY,OAAO,MAAM;AAAA,IACzB;AAAA,EACF,CAAC;AAED,EAAAA,WAAU,MAAM;AACd;AAAA,MAAqB,CAAC,YACpB;AAAA,QACE;AAAA,QACA,WAAW;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG;AAAA,IACD,WAAW,OAAO,KAAK;AAAA,IACvB,WAAW,OAAO,KAAK;AAAA,IACvB,WAAW,OAAO,KAAK;AAAA,IACvB;AAAA,EACF,CAAC;AAED,QAAM,UAAU,oCAAoC;AAAA,IAClD;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,CAAC;AAED,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,IACA;AAAA,IACA,2BAA2B,SAAS;AAClC,aACE,6BAA6B;AAAA,QAC3B;AAAA,QACA;AAAA,MACF,CAAC,KAAK,CAAC;AAAA,IAEX;AAAA,IACA,YAAY,SAAS;AACnB;AAAA,QAAgB,CAAC,YACf,gCAAgC,SAAS,OAAO;AAAA,MAClD;AACA,8BAAwB,MAAM;AAC9B,6BAAuB,MAAM;AAAA,IAC/B;AAAA,IACA,WAAW,QAAQ;AACjB;AAAA,QAAgB,CAAC,YACf,+BAA+B,SAAS,MAAM;AAAA,MAChD;AACA,6BAAuB,MAAM;AAAA,IAC/B;AAAA,IACA,gBAAgB,SAAS;AACvB,4BAAsB,CAAC,aAAa;AAAA,QAClC,GAAG;AAAA,QACH;AAAA,MACF,EAAE;AACF;AAAA,QAAgB,CAAC,YACf,qCAAqC,SAAS,iBAAiB,OAAO;AAAA,MACxE;AAAA,IACF;AAAA,IACA,cAAc,OAAO;AACnB,4BAAsB,CAAC,aAAa;AAAA,QAClC,GAAG;AAAA,QACH,GAAG;AAAA,MACL,EAAE;AAAA,IACJ;AAAA,IACA,mBAAmB,MAAM;AACvB,8BAAwB,IAAI;AAC5B,UAAI,SAAS,UAAU;AACrB;AAAA,UACE,0CAA0C,SAAS;AAAA,QACrD;AAAA,MACF;AACA;AAAA,QAAgB,CAAC,YACf,4CAA4C,SAAS,IAAI;AAAA,MAC3D;AAAA,IACF;AAAA,IACA,oBAAoB,OAAO;AACzB,sBAAgB,CAAC,aAAa;AAAA,QAC5B,GAAG;AAAA,QACH,kBAAkB;AAAA,MACpB,EAAE;AAAA,IACJ;AAAA,IACA,qBAAqB,OAAO;AAC1B,sBAAgB,CAAC,aAAa;AAAA,QAC5B,GAAG;AAAA,QACH,mBAAmB;AAAA,MACrB,EAAE;AAAA,IACJ;AAAA,IACA,qBAAqB,WAAW;AAC9B,sBAAgB,CAAC,aAAa;AAAA,QAC5B,GAAG;AAAA,QACH,mBAAmB;AAAA,MACrB,EAAE;AAAA,IACJ;AAAA,IACA,cAAc,OAAO;AACnB,4BAAsB,CAAC,aAAa;AAAA,QAClC,GAAG;AAAA,QACH;AAAA,MACF,EAAE;AACF;AAAA,QAAgB,CAAC,YACf,mCAAmC,SAAS,iBAAiB,KAAK;AAAA,MACpE;AAAA,IACF;AAAA,IACA;AAAA,IACA,yBAAyB,UAAU;AACjC,sBAAgB,CAAC,aAAa;AAAA,QAC5B,GAAG;AAAA,QACH,uBAAuB;AAAA,MACzB,EAAE;AAAA,IACJ;AAAA,IACA,eAAe,SAAS;AACtB,2BAAqB,CAAC,aAAa;AAAA,QACjC,GAAG;AAAA,QACH;AAAA,MACF,EAAE;AACF;AAAA,QAAgB,CAAC,YACf,oCAAoC,SAAS,gBAAgB,OAAO;AAAA,MACtE;AAAA,IACF;AAAA,IACA,aAAa,OAAO;AAClB,2BAAqB,CAAC,aAAa;AAAA,QACjC,GAAG;AAAA,QACH,GAAG;AAAA,MACL,EAAE;AAAA,IACJ;AAAA,IACA,kBAAkB,MAAM;AACtB,6BAAuB,IAAI;AAC3B,UAAI,SAAS,UAAU;AACrB;AAAA,UACE,yCAAyC,SAAS;AAAA,QACpD;AAAA,MACF;AACA;AAAA,QAAgB,CAAC,YACf,2CAA2C,SAAS,IAAI;AAAA,MAC1D;AAAA,IACF;AAAA,IACA,gBAAgB,UAAU;AACxB,2BAAqB,CAAC,aAAa;AAAA,QACjC,GAAG;AAAA,QACH;AAAA,MACF,EAAE;AAAA,IACJ;AAAA,IACA,aAAa,OAAO;AAClB,2BAAqB,CAAC,aAAa;AAAA,QACjC,GAAG;AAAA,QACH;AAAA,MACF,EAAE;AACF;AAAA,QAAgB,CAAC,YACf,kCAAkC,SAAS,gBAAgB,KAAK;AAAA,MAClE;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,qBACP,aACA,YAMS;AACT,SAAO,OAAO,QAAQ,IAAI,eAAe,CAAC,GAAG,UAAU,MAAM;AAC/D;;;AIxlBA;AAAA,EACE,aAAAC;AAAA,EACA;AAAA,EACA,WAAAC;AAAA,EACA,YAAAC;AAAA,OAEK;AACP,SAAS,oBAAoB;AAC7B;AAAA,EACE;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC;AAAA,EACA;AAAA,EACA,cAAAC;AAAA,EACA;AAAA,EACA,MAAAC;AAAA,OACK;;;ACRA,SAAS,uBAAuB,MAAsB;AAC3D,MAAI,CAAC,QAAQ,SAAS,KAAK;AACzB,WAAO;AAAA,EACT;AACA,SAAO,KAAK,QAAQ,QAAQ,EAAE,KAAK;AACrC;AAEO,SAAS,0BACd,SACA,sBACA,qBAC6B;AAC7B,QAAM,YAAyC,CAAC;AAEhD,aAAW,SAAS,SAAS;AAC3B,cAAU,KAAK,KAAK;AACpB,QAAI,MAAM,SAAS,UAAU;AAC3B;AAAA,IACF;AACA,UAAM,YAAY,uBAAuB,MAAM,IAAI;AACnD,QAAI,CAAC,oBAAoB,SAAS,GAAG;AACnC;AAAA,IACF;AACA,UAAM,eAAe,qBAAqB,SAAS,GAAG,WAAW,CAAC;AAClE,QAAI,aAAa,WAAW,GAAG;AAC7B;AAAA,IACF;AACA,cAAU;AAAA,MACR,GAAG;AAAA,QACD;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAsBO,SAAS,0CACd,UACqD;AACrD,QAAM,cAAmE,CAAC;AAC1E,yCAAuC,aAAa,SAAS,SAAS;AACtE,SAAO;AACT;AAEA,SAAS,uCACP,aACA,WACA;AACA,QAAM,iBAAiB,uBAAuB,UAAU,aAAa;AACrE,cAAY,cAAc,IAAI;AAAA,IAC5B,aAAa,UAAU;AAAA,IACvB,SAAS,UAAU,QAAQ,IAAI,CAAC,WAAW;AAAA,MACzC,aAAa,MAAM;AAAA,MACnB,MAAM,MAAM;AAAA,MACZ,MAAM,MAAM;AAAA,IACd,EAAE;AAAA,IACF,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,gBAAgB,UAAU;AAAA,IAC1B,eAAe,UAAU;AAAA,EAC3B;AAEA,aAAW,SAAS,UAAU,SAAS;AACrC,QAAI,MAAM,SAAS,UAAU;AAC3B;AAAA,IACF;AACA,UAAM,YAAY,uBAAuB,MAAM,IAAI;AACnD,QAAI,MAAM,qBAAqB;AAC7B;AAAA,QACE;AAAA,QACA,MAAM;AAAA,MACR;AACA;AAAA,IACF;AACA,QAAI,MAAM,eAAe;AACvB,kBAAY,SAAS,IAAI;AAAA,QACvB,aAAa,MAAM;AAAA,QACnB,SAAS,CAAC;AAAA,QACV,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,gBAAgB,MAAM;AAAA,QACtB,eAAe,MAAM;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AACF;;;ADyPgB,gBAAAC,MAUJ,QAAAC,aAVI;AAtUhB,IAAM,uBAAuB;AAC7B,IAAM,kCAAkC;AAEjC,SAAS,4BAA4B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqC;AACnC,QAAM,CAAC,aAAa,cAAc,IAAIC,UAAS,EAAE;AACjD,QAAM,CAAC,gBAAgB,iBAAiB,IAAIA,UAAwB,IAAI;AACxE,QAAM,CAAC,eAAe,gBAAgB,IAAIA,UAExC,CAAC,CAAC;AACJ,QAAM,CAAC,sBAAsB,uBAAuB,IAAIA,UAEtD,CAAC,CAAC;AACJ,QAAM,CAAC,qBAAqB,sBAAsB,IAAIA,UAEpD,CAAC,CAAC;AACJ,QAAM,CAAC,aAAa,cAAc,IAAIA,UAAwB,IAAI;AAClE,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAS,KAAK;AAChD,QAAM,CAAC,cAAc,eAAe,IAAIA;AAAA,IACtC,CAAC;AAAA,EACH;AAEA,QAAM,iBAAiBC,sBAAqB,aAAa,kBAAkB;AAC3E,QAAM,uBAAuBA;AAAA,IAC3B;AAAA,IACA;AAAA,EACF;AACA,QAAM,OACJ,YAAY,KAAK,EAAE,SAAS,KAAK,iBAAiB,WAAW;AAC/D,QAAM,wBACJ,mBAAmB,QACnB,qBAAqB,uBAAuB,cAAc,CAAC,GAAG,WAC5D;AAEJ,QAAM,8BAA8B;AAAA,IAClC,CAAC,SAAsC;AACrC,gBAAU,iCAAiC,IAAI,CAAC;AAChD,cAAQ;AAAA,IACV;AAAA,EACF;AAEA,QAAM,uBAAuB,OAAO,SAAyB;AAC3D,QAAI,CAAC,aAAa,eAAe;AAC/B,aAAO;AAAA,IACT;AACA,UAAM,UAAU,MAAM,YAAY,cAAc;AAAA,MAC9C,MAAM,QAAQ;AAAA,MACd;AAAA,IACF,CAAC;AACD,WAAO;AAAA,MACL,aACE,QAAQ,iBACR,QAAQ,YACR,QACA;AAAA,MACF,SAAS,iCAAiC,QAAQ,OAAO;AAAA,MACzD,gBAAgB;AAAA,QACd,QAAQ,iBACN,QAAQ,YACR,QACA;AAAA,MACJ;AAAA,IACF;AAAA,EACF;AAEA,EAAAC,WAAU,MAAM;AACd,QAAI,CAAC,MAAM;AACT;AAAA,IACF;AAEA,mBAAe,EAAE;AACjB,sBAAkB,IAAI;AACtB,qBAAiB,CAAC,CAAC;AACnB,4BAAwB,CAAC,CAAC;AAC1B,2BAAuB,CAAC,CAAC;AACzB,mBAAe,IAAI;AACnB,oBAAgB,CAAC,CAAC;AAAA,EACpB,GAAG,CAAC,IAAI,CAAC;AAET,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,QAAQ,CAAC,aAAa;AACzB;AAAA,IACF;AAEA,QAAI,WAAW;AACf,UAAM,OAAO,YAAY;AACvB,mBAAa,IAAI;AACjB,UAAI;AACF,YAAI,SAAS,YAAY,YAAY,kBAAkB;AACrD,gBAAM,OAAO,MAAM,YAAY,iBAAiB;AAAA,YAC9C,OAAO,YAAY,KAAK;AAAA,YACxB;AAAA,UACF,CAAC;AACD,cAAI,CAAC,UAAU;AACb,6BAAiB,iCAAiC,IAAI,CAAC;AAAA,UACzD;AACA;AAAA,QACF;AAEA,YACE,SAAS,aACR,YAAY,iBAAiB,YAAY,oBAC1C;AACA,cAAI,yBAAyB,gBAAgB;AAC3C;AAAA,UACF;AACA,cAAI,wBAAwB,YAAY,mBAAmB;AACzD,kBAAM,WAAW,MAAM,YAAY,kBAAkB;AAAA,cACnD,MAAM,kBAAkB;AAAA,cACxB,kBAAkB;AAAA,cAClB,eAAe;AAAA,cACf;AAAA,YACF,CAAC;AACD,gBAAI,CAAC,UAAU;AACb;AAAA,gBACE,uBAAuB,SAAS,UAAU,aAAa;AAAA,cACzD;AACA;AAAA,gBACE,0CAA0C,QAAQ;AAAA,cACpD;AAAA,YACF;AACA;AAAA,UACF;AACA,gBAAM,UAAU,MAAM,qBAAqB,cAAc;AACzD,cAAI,CAAC,SAAS;AACZ;AAAA,UACF;AACA,cAAI,CAAC,UAAU;AACb,8BAAkB,QAAQ,cAAc;AACxC,oCAAwB,CAAC,aAAa;AAAA,cACpC,GAAG;AAAA,cACH,CAAC,QAAQ,cAAc,GAAG;AAAA,gBACxB,aAAa,QAAQ;AAAA,gBACrB,SAAS,QAAQ;AAAA,gBACjB,QAAQ;AAAA,gBACR,SAAS;AAAA,cACX;AAAA,YACF,EAAE;AAAA,UACJ;AACA;AAAA,QACF;AAEA,YAAI,YAAY,mBAAmB;AACjC,gBAAM,OAAO,MAAM,YAAY,kBAAkB,EAAE,YAAY,CAAC;AAChE,cAAI,CAAC,UAAU;AACb,wCAA4B,IAAI;AAAA,UAClC;AACA;AAAA,QACF;AAEA,YAAI,CAAC,UAAU;AACb,2BAAiB,CAAC,CAAC;AAAA,QACrB;AAAA,MACF,UAAE;AACA,YAAI,CAAC,UAAU;AACb,uBAAa,KAAK;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAEA,SAAK,KAAK;AACV,WAAO,MAAM;AACX,iBAAW;AAAA,IACb;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,oBAAoBC;AAAA,IACxB,MACE,iBACK,qBAAqB,uBAAuB,cAAc,CAAC,GACxD,WAAW,CAAC,IAChB,CAAC;AAAA,IACP,CAAC,gBAAgB,oBAAoB;AAAA,EACvC;AAEA,QAAM,iBAAiBA;AAAA,IACrB,MACE,SAAS,WACL,gBACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACN;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,EAAAD,WAAU,MAAM;AACd,QAAI,CAAC,MAAM;AACT;AAAA,IACF;AACA,mBAAe,CAAC,YAAY;AAC1B,UAAI,WAAW,eAAe,KAAK,CAAC,UAAU,MAAM,SAAS,OAAO,GAAG;AACrE,eAAO;AAAA,MACT;AACA,aAAO,eAAe,CAAC,GAAG,QAAQ;AAAA,IACpC,CAAC;AAAA,EACH,GAAG,CAAC,MAAM,cAAc,CAAC;AAEzB,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,QAAM,eACJ,eAAe,KAAK,CAAC,UAAU,MAAM,SAAS,WAAW,KACzD,aAAa,KAAK,CAAC,UAAU,MAAM,SAAS,WAAW,KACvD;AAEF,QAAM,YAAY,CAAC,QAAmC;AACpD,oBAAgB,CAAC,YAAY;AAC3B,YAAM,WAAW,QAAQ,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI;AAC9D,aAAO,WACH,QAAQ,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,IAC/C,iCAAiC,CAAC,GAAG,SAAS,GAAG,CAAC;AAAA,IACxD,CAAC;AAAA,EACH;AAEA,QAAM,qBAAqB,OAAO,WAAsC;AACtE,UAAM,YAAY,uBAAuB,OAAO,IAAI;AACpD,QAAI,qBAAqB,SAAS,GAAG,QAAQ;AAC3C;AAAA,IACF;AACA,4BAAwB,CAAC,aAAa;AAAA,MACpC,GAAG;AAAA,MACH,CAAC,SAAS,GAAG;AAAA,QACX,aAAa,OAAO;AAAA,QACpB,SAAS,QAAQ,SAAS,GAAG,WAAW,CAAC;AAAA,QACzC,QAAQ,QAAQ,SAAS,GAAG,UAAU;AAAA,QACtC,SAAS;AAAA,MACX;AAAA,IACF,EAAE;AAEF,QAAI;AACF,YAAM,UAAU,MAAM,qBAAqB,SAAS;AACpD,UAAI,CAAC,SAAS;AACZ;AAAA,MACF;AACA,8BAAwB,CAAC,aAAa;AAAA,QACpC,GAAG;AAAA,QACH,CAAC,SAAS,GAAG;AAAA,UACX,aAAa,QAAQ;AAAA,UACrB,SAAS,QAAQ;AAAA,UACjB,QAAQ;AAAA,UACR,SAAS;AAAA,QACX;AAAA,MACF,EAAE;AAAA,IACJ,QAAQ;AACN,8BAAwB,CAAC,aAAa;AAAA,QACpC,GAAG;AAAA,QACH,CAAC,SAAS,GAAG;AAAA,UACX,aAAa,QAAQ,SAAS,GAAG,eAAe,OAAO;AAAA,UACvD,SAAS,QAAQ,SAAS,GAAG,WAAW,CAAC;AAAA,UACzC,QAAQ,QAAQ,SAAS,GAAG,UAAU;AAAA,UACtC,SAAS;AAAA,QACX;AAAA,MACF,EAAE;AAAA,IACJ;AAAA,EACF;AAEA,QAAM,mBAAmB,CACvB,SACA,QAAQ,MAER,QAAQ,IAAI,CAAC,UAAU;AACrB,UAAM,WAAW,aAAa,KAAK,CAAC,SAAS,KAAK,SAAS,MAAM,IAAI;AACrE,UAAM,UAAU,gBAAgB,MAAM;AACtC,UAAM,WAAW,MAAM,SAAS;AAChC,UAAM,YAAY,uBAAuB,MAAM,IAAI;AACnD,UAAM,WAAW,oBAAoB,SAAS,KAAK;AACnD,UAAM,aAAa,qBAAqB,SAAS;AACjD,UAAM,eAAe,YAAY,WAAW,CAAC;AAE7C,WACE,gBAAAH,MAAC,SACC;AAAA,sBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAWK;AAAA,YACT;AAAA,YACA,WAAW,WACP,0BACA;AAAA,UACN;AAAA,UACA,OAAO;AAAA,YACL,aAAa,GAAG,QAAQ,kCAAkC,CAAC;AAAA,UAC7D;AAAA,UAEC;AAAA,uBACC,gBAAAN;AAAA,cAAC;AAAA;AAAA,gBACC,cAAY,sBAAsB,KAAK;AAAA,gBACvC,WAAU;AAAA,gBACV,MAAK;AAAA,gBACL,SAAS,MAAM;AACb,wBAAM,eAAe,CAAC;AACtB,yCAAuB,CAAC,aAAa;AAAA,oBACnC,GAAG;AAAA,oBACH,CAAC,SAAS,GAAG;AAAA,kBACf,EAAE;AACF,sBACE,gBACA,CAAC,YAAY,UACb,CAAC,YAAY,SACb;AACA,yBAAK,mBAAmB,KAAK;AAAA,kBAC/B;AAAA,gBACF;AAAA,gBAEA,0BAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,WAAWM;AAAA,sBACT;AAAA,sBACA,YAAY;AAAA,oBACd;AAAA;AAAA,gBACF;AAAA;AAAA,YACF,IAEA,gBAAAN,KAAC,UAAK,WAAU,yBAAwB;AAAA,YAE1C,gBAAAC;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,MAAK;AAAA,gBACL,SAAS,MAAM;AACb,iCAAe,MAAM,IAAI;AACzB,sBAAI,MAAM,SAAS,UAAU;AAC3B;AAAA,kBACF;AACA,wBAAM,eAAe,CAAC;AACtB,yCAAuB,CAAC,aAAa;AAAA,oBACnC,GAAG;AAAA,oBACH,CAAC,SAAS,GAAG;AAAA,kBACf,EAAE;AACF,sBACE,gBACA,CAAC,YAAY,UACb,CAAC,YAAY,SACb;AACA,yBAAK,mBAAmB,KAAK;AAAA,kBAC/B;AAAA,gBACF;AAAA,gBAEC;AAAA,6BACC,gBAAAD,KAACO,gBAAA,EAAc,WAAU,yCAAwC,IAEjE,gBAAAP,KAACQ,WAAA,EAAS,WAAU,yCAAwC;AAAA,kBAE9D,gBAAAR,KAAC,UAAK,WAAU,oCACb,gCAAsB,KAAK,GAC9B;AAAA;AAAA;AAAA,YACF;AAAA,YACA,gBAAAA;AAAA,cAACS;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,MAAK;AAAA,gBACL,SAAS,WAAW,cAAc;AAAA,gBAClC,SAAS,MAAM;AACb,iCAAe,MAAM,IAAI;AACzB,4BAAU,KAAK;AAAA,gBACjB;AAAA,gBAEC,qBAAW,gBAAAT,KAAC,aAAU,MAAM,IAAI,IAAK;AAAA;AAAA,YACxC;AAAA;AAAA;AAAA,MACF;AAAA,MACC,YAAY,WACX,YAAY,UACV,gBAAAC;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO;AAAA,YACL,aAAa,IAAI,QAAQ,KAAK,kCAAkC,EAAE;AAAA,UACpE;AAAA,UAEA;AAAA,4BAAAD,KAAC,eAAY,WAAU,yBAAwB;AAAA,YAC/C,gBAAAA,KAAC,UAAM,eAAK,EAAE,yBAAyB,GAAE;AAAA;AAAA;AAAA,MAC3C,IACE,aAAa,SAAS,IACxB,iBAAiB,cAAc,QAAQ,CAAC,IACtC,YAAY,SACd,gBAAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO;AAAA,YACL,aAAa,IAAI,QAAQ,KAAK,kCAAkC,EAAE;AAAA,UACpE;AAAA,UAEC,eAAK,EAAE,gCAAgC;AAAA;AAAA,MAC1C,IACE,OACF;AAAA,SA5GI,MAAM,IA6GhB;AAAA,EAEJ,CAAC;AAEH,QAAM,SACJ,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,QAAQ,iBAAiB;AAAA,MAClC,SAAS;AAAA,MAET,0BAAAC;AAAA,QAAC;AAAA;AAAA,UACC,cAAW;AAAA,UACX,WAAU;AAAA,UACV,MAAK;AAAA,UACL,SAAS,CAAC,UAAU,MAAM,gBAAgB;AAAA,UAE1C;AAAA,4BAAAD,KAAC,cAAW,WAAU,uDACpB,0BAAAC,MAAC,SAAI,WAAU,0CACb;AAAA,8BAAAA,MAAC,SAAI,WAAU,qBACb;AAAA,gCAAAD,KAAC,aAAW,eAAK,EAAE,uBAAuB,GAAE;AAAA,gBAC5C,gBAAAA,KAAC,mBACE,eAAK,EAAE,iCAAiC;AAAA,kBACvC,OAAO,aAAa;AAAA,gBACtB,CAAC,GACH;AAAA,iBACF;AAAA,cACA,gBAAAA;AAAA,gBAACS;AAAA,gBAAA;AAAA,kBACC,cAAY,KAAK,EAAE,gBAAgB;AAAA,kBACnC,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,SAAQ;AAAA,kBACR,SAAS;AAAA,kBAET,0BAAAT,KAACU,YAAA,EAAU,MAAM,IAAI;AAAA;AAAA,cACvB;AAAA,eACF,GACF;AAAA,YACA,gBAAAT,MAAC,eAAY,WAAU,oJACrB;AAAA,8BAAAA,MAAC,aAAQ,WAAU,6EACjB;AAAA,gCAAAD,KAAC,SAAI,WAAU,yDACb,0BAAAC,MAAC,SAAI,WAAU,YACb;AAAA,kCAAAD,KAAC,cAAW,WAAU,6FAA4F;AAAA,kBAClH,gBAAAA;AAAA,oBAACW;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,aAAa,KAAK,EAAE,mCAAmC;AAAA,sBACvD,OAAO;AAAA,sBACP,UAAU,CAAC,UAAU,eAAe,MAAM,OAAO,KAAK;AAAA;AAAA,kBACxD;AAAA,mBACF,GACF;AAAA,gBACA,gBAAAX,KAACY,aAAA,EAAW,WAAU,kBACpB,0BAAAZ,KAAC,SAAI,WAAU,2BACZ,sBACC,gBAAAA,KAAC,kBACC,0BAAAA,KAAC,eAAY,WAAU,uBAAsB,GAC/C,IACE,eAAe,WAAW,IAC5B,gBAAAA,KAAC,kBACE,mBAAS,WACN,KAAK,EAAE,6BAA6B,IACpC,KAAK,EAAE,gCAAgC,GAC7C,IACE,SAAS,WACX,gBAAAA,KAAC,SAAI,WAAU,eACZ,2BAAiB,iBAAiB,GACrC,IAEA,eAAe,IAAI,CAAC,UAAU;AAC5B,wBAAM,WAAW,aAAa;AAAA,oBAC5B,CAAC,SAAS,KAAK,SAAS,MAAM;AAAA,kBAChC;AACA,wBAAM,UAAU,gBAAgB,MAAM;AACtC,wBAAM,WAAW,MAAM,SAAS;AAChC,yBACE,gBAAAC;AAAA,oBAAC;AAAA;AAAA,sBACC,WAAWK;AAAA,wBACT;AAAA,wBACA,WAAW,WACP,wCACA;AAAA,sBACN;AAAA,sBAGA;AAAA,wCAAAL;AAAA,0BAAC;AAAA;AAAA,4BACC,WAAU;AAAA,4BACV,MAAK;AAAA,4BACL,SAAS,MAAM,eAAe,MAAM,IAAI;AAAA,4BAExC;AAAA,8CAAAD,KAAC,UAAK,WAAU,6FACb,qBACC,gBAAAA,KAACO,gBAAA,EAAc,WAAU,UAAS,IAElC,gBAAAP,KAACQ,WAAA,EAAS,WAAU,UAAS,GAEjC;AAAA,8BACA,gBAAAP,MAAC,UAAK,WAAU,WACd;AAAA,gDAAAD,KAAC,UAAK,WAAU,sDACb,gCAAsB,KAAK,GAC9B;AAAA,gCACA,gBAAAA,KAAC,UAAK,WAAU,gDACb,gBAAM,MACT;AAAA,iCACF;AAAA;AAAA;AAAA,wBACF;AAAA,wBACA,gBAAAA;AAAA,0BAACS;AAAA,0BAAA;AAAA,4BACC,MAAK;AAAA,4BACL,MAAK;AAAA,4BACL,SAAS,WAAW,cAAc;AAAA,4BAClC,SAAS,MAAM;AACb,6CAAe,MAAM,IAAI;AACzB,wCAAU,KAAK;AAAA,4BACjB;AAAA,4BAEC,qBAAW,gBAAAT,KAAC,aAAU,MAAM,IAAI,IAAK;AAAA;AAAA,wBACxC;AAAA;AAAA;AAAA,oBAjCK,MAAM;AAAA,kBAkCb;AAAA,gBAEJ,CAAC,GAEL,GACF;AAAA,iBACF;AAAA,cACA,gBAAAA,KAAC,WAAM,WAAU,mGACf,0BAAAA,KAAC,SAAI,WAAU,0DACZ,yBACC,gBAAAC,MAAC,SAAI,WAAU,kDACb;AAAA,gCAAAD,KAAC,SAAI,WAAU,0JACb,0BAAAC,MAAC,SAAI,WAAU,yBACb;AAAA,kCAAAD,KAAC,UAAK,WAAU,mGACb,uBAAa,SAAS,WACrB,gBAAAA,KAACO,gBAAA,EAAc,WAAU,UAAS,IAElC,gBAAAP,KAACQ,WAAA,EAAS,WAAU,UAAS,GAEjC;AAAA,kBACA,gBAAAR,KAAC,OAAE,WAAU,iFACV,uBAAa,SAAS,WACnB,aAAa,OACb,sBAAsB,YAAY,GACxC;AAAA,mBACF,GACF;AAAA,gBACA,gBAAAA,KAAC,SAAI,WAAU,0BACb,0BAAAC,MAAC,SAAI,WAAU,eACb;AAAA,kCAAAD,KAAC,OAAE,WAAU,sDACV,gCAAsB,YAAY,GACrC;AAAA,kBACA,gBAAAA,KAAC,OAAE,WAAU,uEACV,uBAAa,MAChB;AAAA,mBACF,GACF;AAAA,iBACF,IAEA,gBAAAA,KAAC,kBACE,mBAAS,WACN,KAAK,EAAE,6BAA6B,IACpC,KAAK,EAAE,gCAAgC,GAC7C,GAEJ,GACF;AAAA,eACF;AAAA,YACA,gBAAAC,MAAC,SAAI,WAAU,kHACb;AAAA,8BAAAA,MAAC,SAAI,WAAU,uDACb;AAAA,gCAAAD,KAAC,UAAK,WAAU,iCACb,eAAK,EAAE,iCAAiC;AAAA,kBACvC,OAAO,aAAa;AAAA,gBACtB,CAAC,GACH;AAAA,gBACC,aAAa,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,QAC7B,gBAAAA;AAAA,kBAACa;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBAGV,0BAAAb,KAAC,UAAK,WAAU,YAAY,gCAAsB,GAAG,GAAE;AAAA;AAAA,kBAFlD,IAAI;AAAA,gBAGX,CACD;AAAA,gBACA,aAAa,SAAS,IACrB,gBAAAC,MAACY,QAAA,EAAM,WAAU,2DAA0D;AAAA;AAAA,kBACvE,aAAa,SAAS;AAAA,mBAC1B,IACE;AAAA,iBACN;AAAA,cACA,gBAAAZ,MAAC,SAAI,WAAU,oEACb;AAAA,gCAAAD,KAACS,SAAA,EAAO,MAAK,UAAS,SAAQ,WAAU,SAAS,SAC9C,eAAK,EAAE,gBAAgB,GAC1B;AAAA,gBACA,gBAAAT;AAAA,kBAACS;AAAA,kBAAA;AAAA,oBACC,UAAU,aAAa,WAAW;AAAA,oBAClC,MAAK;AAAA,oBACL,SAAS,MAAM,UAAU,YAAY;AAAA,oBAEpC,eAAK,EAAE,yBAAyB;AAAA;AAAA,gBACnC;AAAA,iBACF;AAAA,eACF;AAAA;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAGF,MAAI,OAAO,aAAa,aAAa;AACnC,WAAO;AAAA,EACT;AACA,SAAO,aAAa,QAAQ,SAAS,IAAI;AAC3C;AAEA,SAASN,sBACP,aACA,YAKS;AACT,SAAO,OAAO,QAAQ,IAAI,eAAe,CAAC,GAAG,UAAU,MAAM;AAC/D;AAEA,SAAS,eAAe,EAAE,SAAS,GAA4B;AAC7D,SACE,gBAAAH,KAAC,SAAI,WAAU,wFACZ,UACH;AAEJ;AAEA,SAAS,sBAAsB,KAAwC;AACrE,SACE,IAAI,eAAe,IAAI,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,GAAG,EAAE,KAAK,IAAI;AAEzE;;;AL/lBI,SAME,OAAAc,MANF,QAAAC,aAAA;AA7CG,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAuC;AACrC,QAAM,aAAa,0BAA0B;AAAA,IAC3C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,gBAAgB,qBAAqB,UAAU;AACrD,QAAM,eAAe,oBAAoB,UAAU;AAEnD,EAAAC,WAAU,MAAM;AACd,QAAI,OAAO,WAAW,aAAa;AACjC,aAAO;AAAA,IACT;AAEA,UAAM,gCAAgC,CAAC,UAAiB;AACtD,YAAM,SAAU,MACb;AACH,UAAI,QAAQ,WAAW,QAAQ;AAC7B;AAAA,MACF;AACA,iBAAW,qBAAqB,OAAO,SAAS;AAAA,IAClD;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,YAAY,MAAM,CAAC;AAEvB,SACE,gBAAAD;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;AAAA,YACA,mBAAmB,MAAM;AACvB,yBAAW,kBAAkB,MAAM;AACnC,yBAAW,WAAW,IAAI;AAAA,YAC5B;AAAA,YACA,sBAAsB,MAAM;AAC1B,yBAAW,mBAAmB,MAAM;AAAA,YACtC;AAAA;AAAA,QACF;AAAA,QAEA,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAM,WAAW;AAAA,YACjB,aAAa,QAAQ;AAAA,YACrB,MAAM,WAAW,oBAAoB;AAAA,YACrC;AAAA,YACA,SAAS,MAAM,WAAW,mBAAmB,IAAI;AAAA,YACjD,WAAW,CAAC,SAAS;AACnB,mBAAK,WAAW,yBAAyB,IAAI;AAAA,YAC/C;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EACF;AAEJ;AAOA,IAAM,qCACJ;AAEK,SAAS,sCAAsC,OAG7C;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;AAWO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA6C;AAC3C,QAAM,cAAc,qBAChB,KAAK,EAAE,yBAAyB,IAChC,KAAK,EAAE,2BAA2B;AAEtC,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAWE;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,MAEA;AAAA,wBAAAF,MAAC,SAAI,WAAU,mCACb;AAAA,0BAAAD,KAAC,UAAK,WAAU,mFACb,iBAAO,KAAK,KAAK,KAAK,EAAE,OAAO,GAClC;AAAA,UACA,gBAAAA;AAAA,YAACI;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,gCAAgB;AAAA,cAClB;AAAA,cACA,eAAe,CAAC,UAAU,MAAM,gBAAgB;AAAA,cAChD,eAAe,CAAC,UAAU,MAAM,gBAAgB;AAAA,cAEhD,0BAAAJ,KAAC,aAAU,WAAU,eAAc;AAAA;AAAA,UACrC;AAAA,WACF;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;AAEA,SAAS,qBACP,YACA;AACA,QAAM,UAAU,WAAW,UAAU;AACrC,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AACA,SACE,WAAW,YAAY,OAAO,SAC9B,WAAW,OAAO,MAAM,KAAK,CAAC,UAAU,MAAM,YAAY,OAAO,KACjE;AAEJ;AAEA,SAAS,oBACP,YACA;AACA,QAAM,SAAS,WAAW,UAAU;AACpC,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AACA,SACE,WAAW,WAAW,OAAO,QAC7B,WAAW,YAAY,OAAO,MAAM;AAAA,IAClC,CAAC,SAAS,KAAK,WAAW;AAAA,EAC5B,KACA;AAEJ;","names":["useEffect","useRef","useState","Badge","Button","CloseIcon","FileCreateIcon","Input","ScrollArea","cn","Badge","Button","FileCreateIcon","cn","Button","cn","jsx","jsxs","jsx","jsxs","Button","Badge","cn","FileCreateIcon","Button","Input","Select","SelectContent","SelectItem","SelectTrigger","jsx","jsxs","Select","SelectTrigger","SelectContent","SelectItem","Input","Button","Badge","Button","Input","ScrollArea","Select","SelectContent","SelectItem","SelectTrigger","SelectValue","SparkIcon","jsx","jsxs","taskPriorityOptions","Badge","Button","ScrollArea","Input","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","SparkIcon","jsx","jsxs","useRef","useState","useEffect","cn","Button","FileCreateIcon","ScrollArea","Input","CloseIcon","Badge","useEffect","Button","cn","useEffect","useState","useState","useEffect","useEffect","useMemo","useState","Badge","Button","CloseIcon","DirectoryIcon","FileIcon","Input","ScrollArea","cn","jsx","jsxs","useState","hasFileAdapterMethod","useEffect","useMemo","cn","DirectoryIcon","FileIcon","Button","CloseIcon","Input","ScrollArea","Badge","jsx","jsxs","useEffect","cn","Button"]}
|