@pstdio/workbench 0.11.2 → 0.11.4
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/react.d.ts +1 -1
- package/dist/react.js +3052 -2991
- package/dist/react.js.map +1 -1
- package/dist/webview-runtime.js +1 -1
- package/dist/webview-runtime.js.map +1 -1
- package/package.json +3 -3
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sources":["../src/react/breadcrumb/breadcrumb-view.tsx","../src/react/shared/use-workbench-composition-panels.ts","../src/react/theme/workbench-theme-background.ts","../src/react/command-palette/command-palette-params.ts","../src/react/command-palette/palette-view.tsx","../src/react/command-palette/command-palette-resources.tsx","../src/react/command-palette/command-param-descriptors.ts","../src/react/command-palette/command-param-field.tsx","../src/react/command-palette/command-params-dialog.tsx","../src/react/region/panel-widget-open.ts","../src/react/command-palette/panel-widget-palette.tsx","../src/react/command-palette/resource-palette.tsx","../src/react/command-palette/theme-palette.tsx","../src/react/command-palette/command-palette.tsx","../src/react/focus/focus-region.tsx","../src/react/menus/menu-items.ts","../src/react/header/header-action-items.ts","../src/react/header/header-actions.tsx","../src/react/keybindings/tanstack-hotkey-adapter.ts","../src/react/keybindings/workbench-keybinding-dispatcher.tsx","../src/react/renderers/tree/tree-actions.tsx","../src/react/menus/resource-actions.tsx","../src/react/notifications/notification-host.tsx","../src/react/shared/use-workbench-location-resource.ts","../src/react/region/widget-host.tsx","../src/react/region/mode-chrome.tsx","../src/react/region/region.tsx","../src/react/region/panel-add-menu.tsx","../src/react/region/region-tabs-visibility.ts","../src/react/region/region-tabs-visibility-hooks.ts","../src/react/region/region-tab.tsx","../src/react/region/sortable-region-tab-list.tsx","../src/react/region/region-tabs.tsx","../src/react/renderers/data-table/data-table-view-model.ts","../src/react/renderers/data-table/data-table-view.tsx","../src/react/renderers/settings/preference-schema-to-params.ts","../src/react/renderers/settings/preferences-form.tsx","../src/react/renderers/tree/tree-list-adapter.tsx","../src/react/renderers/tree/tree-params-dialog.tsx","../src/react/renderers/tree/tree-view-body.tsx","../src/react/renderers/tree/tree-view-move.ts","../src/react/renderers/tree/tree-view-navigation.ts","../src/react/renderers/tree/tree-view-search.tsx","../src/react/renderers/tree/tree-view-load.ts","../src/react/renderers/tree/use-tree-data.ts","../src/react/renderers/tree/use-tree-view-customization.ts","../src/react/renderers/tree/tree-view.tsx","../src/react/settings/use-settings-revision.ts","../src/react/settings/settings-surface-panel.tsx","../src/react/settings/settings-overlay.tsx","../src/react/settings/settings-resources.ts","../src/react/settings/settings-tree.ts","../src/react/settings/settings-module.tsx","../src/react/workbench/workbench-panel-state.ts","../src/react/panel-menu/panel-menu-sizing.ts","../src/react/panel-menu/panel-menu.tsx","../src/react/shared/use-workbench-mode-region-settings.ts","../src/react/side-panel/side-panel.tsx","../src/react/terminal/terminal-placement-binding.ts","../src/react/terminal/workbench-terminal-panel.tsx","../src/react/terminal/terminal-module.tsx","../src/react/theme/use-workbench-theme-preferences.ts","../src/react/theme/workbench-theme-provider.tsx","../src/react/theme/workbench-theme-scope.tsx","../src/react/workbench/overlay-layer.tsx","../src/react/header/resource-actions.tsx","../src/react/header/workbench-nav-chrome.tsx","../src/react/renderers/controls/controls-view.tsx","../src/react/renderers/controls/install-controls-renderer.ts","../src/react/renderers/data-table/install-data-table-renderer.ts","../src/react/renderers/file/install-file-renderer.ts","../src/react/renderers/kanban/kanban-presentation.ts","../src/react/renderers/kanban/kanban-view-query.ts","../src/react/renderers/kanban/kanban-view-storage.ts","../src/react/renderers/kanban/kanban-view.tsx","../src/react/renderers/kanban/install-kanban-renderer.ts","../src/react/renderers/tree/install-tree-renderer.ts","../src/react/theme/use-workbench-file-icon-theme-preferences.ts","../src/react/workbench/use-workbench-region-content.ts","../src/react/workbench/header-bottom-border.tsx","../src/react/workbench/use-workbench-main-panels.ts","../src/react/workbench/workbench-secondary-panel.tsx","../src/react/workbench/workbench-body.tsx","../src/react/workbench/workbench-panels.tsx","../src/react/workbench/workbench-side-panel-layout.tsx","../src/react/workbench/workbench-side-panel-boundary.tsx","../src/react/workbench/workbench.tsx","../src/react/workbench/workbench-module-host.tsx"],"sourcesContent":["import { HStack, Text } from \"@chakra-ui/react\";\nimport { Breadcrumb, type SessionCompletionStatus, SessionIndicator } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport type { WorkbenchBreadcrumbItem, WorkbenchCore } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface WorkbenchBreadcrumbViewProps {\n workbench: WorkbenchCore;\n}\nconst getSessionStatus = (item: WorkbenchBreadcrumbItem) =>\n typeof item.resource?.metadata?.status === \"string\"\n ? (item.resource.metadata.status as SessionCompletionStatus)\n : undefined;\nconst WorkbenchBreadcrumbIcon = (props: { item: WorkbenchBreadcrumbItem }) => {\n const { item } = props;\n const status = getSessionStatus(item);\n if (item.indicator === \"session-status\" || item.resource?.type === \"session\") {\n return <SessionIndicator status={status} boxSize=\"14px\" />;\n }\n if (!item.icon) return null;\n return (\n <Text as=\"span\" aria-hidden=\"true\" color=\"fg.muted\" display=\"inline-flex\" flexShrink={0}>\n <WorkbenchIcon name={item.icon} size={14} />\n </Text>\n );\n};\nconst WorkbenchBreadcrumbTitle = (props: { item: WorkbenchBreadcrumbItem }) => {\n const { item } = props;\n const title = item.title as ReactNode;\n return (\n <HStack as=\"span\" gap=\"2xs\" minW=\"0\">\n <WorkbenchBreadcrumbIcon item={item} />\n <Text as=\"span\" minW=\"0\" maxW=\"15rem\" truncate>\n {title}\n </Text>\n </HStack>\n );\n};\nexport const buildWorkbenchBreadcrumbItems = (items: WorkbenchBreadcrumbItem[] | undefined) =>\n (items ?? []).map((item) => ({\n title: <WorkbenchBreadcrumbTitle item={item} />,\n url: item.url,\n onClick: item.onClick,\n }));\nexport const WorkbenchBreadcrumbView = (props: WorkbenchBreadcrumbViewProps) => {\n const { workbench } = props;\n const items = useWorkbenchStore(workbench.breadcrumbs.store, (state) => state.items) ?? [];\n if (items.length === 0) return null;\n return (\n <Breadcrumb items={buildWorkbenchBreadcrumbItems(items)} separator=\"/\" separatorGap=\"xs\" display=\"flex\" h=\"full\" />\n );\n};\n","import type { WorkbenchCompositionRegionPanels, WorkbenchCore, WorkbenchPanelRegion } from \"../../core\";\nimport { useWorkbenchStore } from \"./use-workbench-store\";\n\nexport type WorkbenchCompositionPanelsByRegion = Record<WorkbenchPanelRegion, WorkbenchCompositionRegionPanels>;\n\nexport const useWorkbenchCompositionPanels = (workbench: WorkbenchCore): WorkbenchCompositionPanelsByRegion => {\n \"use no memo\";\n\n useWorkbenchStore(workbench.layout.store, (state) => state);\n useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n useWorkbenchStore(workbench.commands.store, (state) => state);\n useWorkbenchStore(workbench.context.store, (state) => state);\n\n return {\n main: workbench.composition.panelsFor(\"main\"),\n secondary: workbench.composition.panelsFor(\"secondary\"),\n side: workbench.composition.panelsFor(\"side\"),\n };\n};\n","import type { WorkbenchRegion } from \"../../core\";\n\nconst chakraBackgrounds = {\n sidenav: \"var(--chakra-colors-bg-subtle)\",\n main: \"var(--chakra-colors-bg)\",\n panel: \"var(--chakra-colors-bg-panel)\",\n} as const;\n\nconst vscodeColor = (token: string, fallback: string) =>\n `var(--chakra-colors-vscode-${token.replaceAll(\".\", \"-\")}, ${fallback})`;\n\nexport const workbenchBackgrounds = {\n sidenav: vscodeColor(\"sideBar.background\", chakraBackgrounds.sidenav),\n main: vscodeColor(\"editor.background\", chakraBackgrounds.main),\n panel: vscodeColor(\"panel.background\", chakraBackgrounds.panel),\n widget: vscodeColor(\"editorWidget.background\", vscodeColor(\"panel.background\", chakraBackgrounds.panel)),\n} as const;\n\nconst workbenchRegionBackgrounds = {\n nav: workbenchBackgrounds.main,\n activity: workbenchBackgrounds.main,\n sidenav: workbenchBackgrounds.sidenav,\n \"main-header\": workbenchBackgrounds.main,\n \"main-left-menu\": workbenchBackgrounds.panel,\n main: workbenchBackgrounds.main,\n \"main-right-menu\": workbenchBackgrounds.panel,\n \"secondary-header\": workbenchBackgrounds.panel,\n \"secondary-left-menu\": workbenchBackgrounds.panel,\n secondary: workbenchBackgrounds.panel,\n \"secondary-right-menu\": workbenchBackgrounds.panel,\n status: workbenchBackgrounds.main,\n overlay: workbenchBackgrounds.widget,\n \"side-header\": workbenchBackgrounds.widget,\n \"side-left-menu\": workbenchBackgrounds.widget,\n side: workbenchBackgrounds.widget,\n \"side-right-menu\": workbenchBackgrounds.widget,\n} as const satisfies Record<WorkbenchRegion, string>;\n\nexport const workbenchFocusBorder = vscodeColor(\"focusBorder\", \"var(--chakra-colors-color-palette-focus-ring)\");\n\nexport const workbenchCommandPaletteBackground = workbenchBackgrounds.widget;\n\nexport const getWorkbenchRegionBackground = (region: WorkbenchRegion) => workbenchRegionBackgrounds[region];\n","import { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { FileUploadValue } from \"@pstdio/ui\";\nimport type { CommandParamDescriptor, CommandParamSchema, WorkbenchCommandExecutionContext } from \"../../core\";\nexport interface CommandFilesParamValue {\n refs: string[];\n uploads: FileUploadValue[];\n}\nexport type CommandParamValue = string | boolean | string[] | CommandFilesParamValue | undefined;\nexport interface CommandParamEntry extends CommandParamDescriptor {\n key: string;\n label: string;\n}\nconst humanize = (value: string) => {\n const spaced = value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[-_]+/g, \" \")\n .trim();\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n};\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\nexport const isFileUploadValue = (value: unknown): value is FileUploadValue => {\n if (!isRecord(value) || !isRecord(value.file)) return false;\n return typeof value.id === \"string\" && typeof value.file.name === \"string\" && typeof value.status === \"string\";\n};\nexport const isCommandFilesParamValue = (value: unknown): value is CommandFilesParamValue =>\n isRecord(value) &&\n Array.isArray(value.refs) &&\n value.refs.every((ref) => typeof ref === \"string\") &&\n Array.isArray(value.uploads) &&\n value.uploads.every(isFileUploadValue);\nexport const createCommandFilesParamValue = (input: Partial<CommandFilesParamValue> = {}): CommandFilesParamValue => ({\n refs: [...(input.refs ?? [])],\n uploads: [...(input.uploads ?? [])],\n});\nconst commandFilesParamValue = (raw: unknown, multiple: boolean | undefined) => {\n const value = isCommandFilesParamValue(raw)\n ? createCommandFilesParamValue(raw)\n : createCommandFilesParamValue({\n refs: Array.isArray(raw) ? raw.filter((item): item is string => typeof item === \"string\") : [],\n uploads: Array.isArray(raw) ? raw.filter(isFileUploadValue) : [],\n });\n if (multiple !== false) return value;\n if (value.uploads[0]) return createCommandFilesParamValue({ uploads: [value.uploads[0]] });\n return createCommandFilesParamValue({ refs: value.refs.slice(0, 1) });\n};\nconst stringifyEditableValue = (value: unknown) => {\n if (value === undefined || value === null) return \"\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n return JSON.stringify(value);\n};\nconst toIdentifierPrefix = (value: string) =>\n value\n .replace(/[^a-zA-Z0-9]+([a-zA-Z0-9])/g, (_match, char: string) => char.toUpperCase())\n .replace(/^[A-Z]/, (char) => char.toLowerCase());\nconst metadataString = (metadata: Record<string, unknown> | undefined, key: string) => {\n const value = metadata?.[key];\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\") return String(value);\n return undefined;\n};\nconst resourceContextValue = (entry: CommandParamEntry, context: WorkbenchCommandExecutionContext | undefined) => {\n const resource = context?.resource;\n if (!resource) return undefined;\n const metadataValue = metadataString(resource.metadata, entry.key);\n if (metadataValue !== undefined) return metadataValue;\n if (entry.key === `${toIdentifierPrefix(resource.type)}Id`) return resource.id ?? resourceKey(resource);\n if (entry.type === \"resource\" && (!entry.resourceType || entry.resourceType === resource.type)) {\n return {\n type: resource.type,\n id: resource.id ?? resourceKey(resource),\n ...(resource.label ? { label: resource.label } : {}),\n ...(resource.metadata ? { metadata: resource.metadata } : {}),\n };\n }\n return undefined;\n};\nconst dedupeOptions = (options: CommandParamDescriptor[\"options\"]) => {\n if (!options) return options;\n const seen = new Set<string>();\n return options.filter((option) => {\n if (seen.has(option.value)) return false;\n seen.add(option.value);\n return true;\n });\n};\nexport const hasCommandParameters = (params: CommandParamSchema | undefined) =>\n listCommandParamEntries(params).length > 0;\nexport const listCommandParamEntries = (params: CommandParamSchema | undefined): CommandParamEntry[] =>\n Object.entries(params ?? {}).flatMap(([key, param]) =>\n param.resolvedFrom === \"resource\"\n ? []\n : [\n {\n ...param,\n options: dedupeOptions(param.options),\n key,\n label: param.label ?? humanize(key),\n },\n ],\n );\nexport const buildCommandParamInitialValues = (\n params: CommandParamSchema | undefined,\n baseArgs?: unknown,\n context?: WorkbenchCommandExecutionContext,\n): Record<string, CommandParamValue> => {\n const base = isRecord(baseArgs) ? baseArgs : {};\n const values: Record<string, CommandParamValue> = {};\n for (const entry of listCommandParamEntries(params)) {\n const raw = Object.hasOwn(base, entry.key)\n ? base[entry.key]\n : (resourceContextValue(entry, context) ?? entry.defaultValue);\n if (entry.type === \"boolean\") {\n values[entry.key] = raw === undefined ? undefined : raw === true || raw === \"true\";\n continue;\n }\n if (entry.type === \"files\") {\n values[entry.key] = commandFilesParamValue(raw, entry.multiple);\n continue;\n }\n if (entry.type === \"multi-select\") {\n values[entry.key] = Array.isArray(raw) ? raw.map(String) : [];\n continue;\n }\n values[entry.key] = stringifyEditableValue(raw);\n }\n return values;\n};\nconst isEmptyValue = (value: CommandParamValue) => {\n if (isCommandFilesParamValue(value)) return value.refs.length === 0 && value.uploads.length === 0;\n return value === undefined || value === \"\" || (Array.isArray(value) && value.length === 0);\n};\nconst parseJsonValue = (entry: CommandParamEntry, value: CommandParamValue) => {\n if (typeof value !== \"string\") return value;\n try {\n return JSON.parse(value);\n } catch {\n throw new Error(`Invalid JSON for ${entry.label}`);\n }\n};\nconst normalizeValue = (entry: CommandParamEntry, value: CommandParamValue) => {\n if (entry.type === \"number\") {\n const numberValue = Number(value);\n if (!Number.isFinite(numberValue)) throw new Error(`Invalid number for ${entry.label}`);\n return numberValue;\n }\n if (entry.type === \"boolean\") return value === true || value === \"true\";\n if (entry.type === \"files\") return isCommandFilesParamValue(value) ? value : createCommandFilesParamValue();\n if (entry.type === \"json\" || entry.type === \"resource\" || entry.type === \"repo\" || entry.type === \"harness\") {\n return parseJsonValue(entry, value);\n }\n if (entry.type === \"multi-select\") return Array.isArray(value) ? value : String(value).split(\",\").filter(Boolean);\n return String(value ?? \"\");\n};\nexport const normalizeCommandParamValues = (\n params: CommandParamSchema | undefined,\n values: Record<string, CommandParamValue>,\n) => {\n const normalized: Record<string, unknown> = {};\n for (const entry of listCommandParamEntries(params)) {\n const value = values[entry.key];\n if (isEmptyValue(value)) {\n if (entry.required) throw new Error(`Missing required parameter: ${entry.label}`);\n continue;\n }\n normalized[entry.key] = normalizeValue(entry, value);\n }\n return normalized;\n};\nexport const mergeCommandParamArgs = (baseArgs: unknown, params: Record<string, unknown>) => ({\n ...(isRecord(baseArgs) ? baseArgs : {}),\n ...params,\n});\n","import type { PaletteMode } from \"@pstdio/ui\";\nimport { Search, Terminal } from \"lucide-react\";\nimport type { WorkbenchCommandPaletteView } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\n\nexport const SEARCH_MODE_ID = \"search\";\nexport const COMMAND_MODE_ID = \"command\";\nexport const THEME_MODE_ID = \"theme\";\n\nexport const workbenchPaletteModes: PaletteMode[] = [{ id: SEARCH_MODE_ID }, { id: COMMAND_MODE_ID, inputPrefix: \">\" }];\n\nexport const isThemePaletteView = (view: WorkbenchCommandPaletteView) => view === THEME_MODE_ID;\n\nexport const isPickerPaletteView = isThemePaletteView;\n\nexport const getPaletteViewMode = (view: WorkbenchCommandPaletteView) => {\n if (isThemePaletteView(view)) return THEME_MODE_ID;\n return undefined;\n};\n\nexport const getPaletteViewModes = (view: WorkbenchCommandPaletteView) => {\n if (isPickerPaletteView(view)) return undefined;\n\n return workbenchPaletteModes;\n};\n\nexport const getPaletteInitialActiveIndex = (input: {\n view: WorkbenchCommandPaletteView;\n themeInitialActiveIndex: number;\n}) => {\n if (isThemePaletteView(input.view)) return input.themeInitialActiveIndex;\n\n return 0;\n};\n\nexport const getPaletteInputIcon = (input: { view: WorkbenchCommandPaletteView; mode: string | undefined }) => {\n if (isThemePaletteView(input.view)) return <WorkbenchIcon name=\"Palette\" size={16} />;\n if (input.mode === COMMAND_MODE_ID) return <Terminal size={16} aria-hidden=\"true\" />;\n\n return <Search size={16} aria-hidden=\"true\" />;\n};\n\nexport const getPalettePlaceholder = (input: { view: WorkbenchCommandPaletteView; mode: string | undefined }) => {\n if (isThemePaletteView(input.view)) return \"Search themes\";\n if (input.mode === COMMAND_MODE_ID) return \"Run command\";\n\n return \"Search resources\";\n};\n","import type { PaletteEntry } from \"@pstdio/ui\";\nimport { useEffect, useState } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { SEARCH_MODE_ID } from \"./palette-view\";\n\nconst RESOURCE_QUERY_LIMIT = 25;\nconst RESOURCE_QUERY_DEBOUNCE_MS = 150;\n\ninterface UseWorkbenchCommandPaletteResourceEntriesInput {\n workbench: WorkbenchCore;\n query: string;\n open: boolean;\n onClose: () => void;\n}\n\n// Fetches extension-provided palette results for the live query (debounced) and maps\n// them to search-mode palette entries. Provider errors are isolated by the registry, so\n// one failing provider never blanks the palette.\nexport const useWorkbenchCommandPaletteResourceEntries = (input: UseWorkbenchCommandPaletteResourceEntriesInput) => {\n const { workbench, query, open, onClose } = input;\n const refreshToken = useWorkbenchStore(workbench.commandPaletteResources.store, (state) => state.refreshToken);\n const [entries, setEntries] = useState<PaletteEntry[]>([]);\n\n useEffect(() => {\n if (!open) {\n setEntries([]);\n return;\n }\n\n // Read so an explicit registry refresh (refreshToken bump) re-runs this query.\n void refreshToken;\n let cancelled = false;\n const handle = setTimeout(() => {\n void workbench.commandPaletteResources.queryProviders({ query, limit: RESOURCE_QUERY_LIMIT }).then((groups) => {\n if (cancelled) return;\n setEntries(\n groups.flatMap((group) =>\n group.results.map((result) => ({\n id: `workbench-command-palette-resource:${result.id}`,\n mode: SEARCH_MODE_ID,\n label: result.label,\n searchText: `${query} ${result.label} ${(result.keywords ?? []).join(\" \")}`.trim(),\n description: result.description,\n group: result.group ?? group.title,\n icon: result.icon ? <WorkbenchIcon name={result.icon} /> : undefined,\n onActivate: () => {\n onClose();\n void Promise.resolve(result.activate()).catch(() => undefined);\n },\n })),\n ),\n );\n });\n }, RESOURCE_QUERY_DEBOUNCE_MS);\n\n return () => {\n cancelled = true;\n clearTimeout(handle);\n };\n }, [workbench, query, open, refreshToken, onClose]);\n\n return entries;\n};\n","import type { Param, ParamValue, SelectionOption } from \"@pstdio/ui\";\nimport {\n type CommandParamEntry,\n type CommandParamValue,\n createCommandFilesParamValue,\n isCommandFilesParamValue,\n isFileUploadValue,\n} from \"./command-palette-params\";\n\nconst asText = (value: CommandParamValue) => (typeof value === \"string\" ? value : \"\");\n\nconst asList = (value: CommandParamValue) => (Array.isArray(value) ? value : []);\n\n/** Required params carry the marker in their name — the editor has no required state. */\nexport const commandParamName = (entry: CommandParamEntry) => `${entry.label}${entry.required ? \" *\" : \"\"}`;\n\nconst commandParamOptions = (entry: CommandParamEntry): SelectionOption[] =>\n (entry.options ?? []).map((option) => ({ id: option.value, name: option.label, icon: option.icon }));\n\n// Structured params (harness, repo, template) are normally rendered by the host,\n// which knows how to fetch their options. Without a host renderer they fall back\n// to the JSON they are serialized as, so the command can still be run.\nconst JSON_PARAM_TYPES = new Set([\"json\", \"resource\", \"repo\", \"harness\"]);\n\n/**\n * Maps a declared command param onto the design-system control that owns that\n * kind of input, so a command dialog is built from the same rows as every other\n * param surface rather than from hand-rolled fields.\n */\nexport const buildCommandParam = (entry: CommandParamEntry, value: CommandParamValue): Param => {\n const base = { id: entry.key, name: commandParamName(entry), description: entry.description };\n\n if (entry.type === \"boolean\") return { ...base, type: \"boolean\", defaultValue: value === true };\n\n if (entry.type === \"number\") return { ...base, type: \"number\", defaultValue: Number(asText(value)) };\n\n if (entry.type === \"markdown\") return { ...base, type: \"markdown\", defaultValue: asText(value) };\n\n if (entry.type === \"files\") {\n return {\n ...base,\n type: \"fileUpload\",\n defaultValue: isCommandFilesParamValue(value) ? value.uploads : [],\n accept: entry.accept,\n multiple: entry.multiple,\n };\n }\n\n if (entry.type === \"multi-select\") {\n return {\n ...base,\n type: \"selection\",\n defaultValue: asList(value),\n options: commandParamOptions(entry),\n multiSelect: true,\n placeholder: `Select ${entry.label.toLowerCase()}`,\n searchable: (entry.options?.length ?? 0) > 5,\n };\n }\n\n if ((entry.type === \"select\" || entry.type === \"template\") && entry.options?.length) {\n return {\n ...base,\n type: \"selection\",\n defaultValue: asText(value),\n options: commandParamOptions(entry),\n placeholder: `Select ${entry.label.toLowerCase()}`,\n searchable: entry.options.length > 5,\n clearable: !entry.required,\n };\n }\n\n if (entry.type === \"longtext\" || JSON_PARAM_TYPES.has(entry.type)) {\n return { ...base, type: \"text\", defaultValue: asText(value), singleLine: false };\n }\n\n return { ...base, type: \"text\", defaultValue: asText(value), singleLine: true };\n};\n\n/** Narrows an editor value back to what a command param can carry. */\nexport const readCommandParamValue = (value: ParamValue, entry?: CommandParamEntry): CommandParamValue => {\n if (typeof value === \"boolean\") return value;\n if (entry?.type === \"files\") {\n return createCommandFilesParamValue({ uploads: Array.isArray(value) ? value.filter(isFileUploadValue) : [] });\n }\n if (Array.isArray(value)) return value.map(String);\n return String(value ?? \"\");\n};\n","import { ParamEditorRow } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport type { WorkbenchCommandExecutionContext } from \"../../core\";\nimport { type CommandParamEntry, type CommandParamValue, isCommandFilesParamValue } from \"./command-palette-params\";\nimport { buildCommandParam, readCommandParamValue } from \"./command-param-descriptors\";\n\nexport interface CommandParamFieldProps {\n entry: CommandParamEntry;\n value: CommandParamValue;\n context?: WorkbenchCommandExecutionContext;\n disabled: boolean;\n onChange: (value: CommandParamValue) => void;\n}\n\n// Lets the host supply field UI for param types the workbench cannot render on its\n// own (e.g. harness/repo selectors backed by host data). Returning a falsy value\n// defers to the built-in field for that entry.\nexport type CommandParamFieldRenderer = (props: CommandParamFieldProps) => ReactNode;\n\nexport const CommandParamField = (props: Omit<CommandParamFieldProps, \"context\">) => {\n const { entry, value, disabled, onChange } = props;\n\n const change = (next: Parameters<typeof readCommandParamValue>[0]) => {\n const nextValue = readCommandParamValue(next, entry);\n if (entry.type !== \"files\" || !isCommandFilesParamValue(value) || !isCommandFilesParamValue(nextValue)) {\n onChange(nextValue);\n return;\n }\n\n const refs = entry.multiple === false && nextValue.uploads.length > 0 ? [] : value.refs;\n onChange({ ...nextValue, refs });\n };\n\n return (\n <ParamEditorRow\n param={buildCommandParam(entry, value)}\n readOnly={disabled}\n onChange={(_id, next) => change(next)}\n />\n );\n};\n","import { Button, CloseButton, Dialog, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport { handleDialogAcceptShortcut, ScrollArea } from \"@pstdio/ui\";\nimport { Fragment, useEffect, useState } from \"react\";\nimport type { Command, RegisteredMenuItem, WorkbenchCommandExecutionContext } from \"../../core\";\nimport {\n buildCommandParamInitialValues,\n type CommandParamEntry,\n type CommandParamValue,\n isCommandFilesParamValue,\n listCommandParamEntries,\n mergeCommandParamArgs,\n normalizeCommandParamValues,\n} from \"./command-palette-params\";\nimport { CommandParamField, type CommandParamFieldRenderer } from \"./command-param-field\";\n\nexport interface CommandParamsRequest {\n record: { command: Pick<Command, \"id\" | \"label\" | \"description\" | \"params\"> };\n action?: RegisteredMenuItem;\n label: string;\n // Confirm-button label for the dialog (defaults to \"Run\").\n submitLabel?: string;\n args?: unknown;\n context?: WorkbenchCommandExecutionContext;\n}\n\nexport type { CommandParamFieldProps, CommandParamFieldRenderer } from \"./command-param-field\";\n\ninterface CommandParamsDialogProps {\n request: CommandParamsRequest | null;\n renderParamField?: CommandParamFieldRenderer;\n prepareArgs?: (input: {\n commandId: string;\n args: unknown;\n context?: WorkbenchCommandExecutionContext;\n onArgsChange: (args: unknown) => void;\n }) => Promise<unknown>;\n onClose: () => void;\n onRun: (input: {\n commandId: string;\n args: unknown;\n context?: WorkbenchCommandExecutionContext;\n label: string;\n }) => Promise<void>;\n}\n\nconst isFilled = (entry: CommandParamEntry, value: CommandParamValue) => {\n if (entry.type === \"boolean\") return value !== undefined;\n if (isCommandFilesParamValue(value)) return value.refs.length + value.uploads.length > 0;\n if (Array.isArray(value)) return value.length > 0;\n return typeof value === \"string\" && value.length > 0;\n};\n\nexport const CommandParamsDialog = (props: CommandParamsDialogProps) => {\n const { request, renderParamField, prepareArgs, onClose, onRun } = props;\n const [values, setValues] = useState<Record<string, CommandParamValue>>({});\n const [error, setError] = useState<string | undefined>();\n const [submitting, setSubmitting] = useState(false);\n const entries = listCommandParamEntries(request?.record.command.params);\n\n useEffect(() => {\n setValues(buildCommandParamInitialValues(request?.record.command.params, request?.args, request?.context));\n setError(undefined);\n setSubmitting(false);\n }, [request]);\n\n const close = () => {\n if (submitting) return;\n onClose();\n };\n\n const setValue = (key: string, value: CommandParamValue) => {\n setValues((current) => ({ ...current, [key]: value }));\n };\n\n const run = async () => {\n if (!request || submitting) return;\n setSubmitting(true);\n setError(undefined);\n try {\n const params = normalizeCommandParamValues(request.record.command.params, values);\n const args = mergeCommandParamArgs(request.args, params);\n const preparedArgs = prepareArgs\n ? await prepareArgs({\n commandId: request.record.command.id,\n args,\n context: request.context,\n onArgsChange: (nextArgs) =>\n setValues(buildCommandParamInitialValues(request.record.command.params, nextArgs, request.context)),\n })\n : args;\n await onRun({\n commandId: request.record.command.id,\n args: preparedArgs,\n context: request.context,\n label: request.label,\n });\n onClose();\n } catch (caught) {\n setError(caught instanceof Error ? caught.message : \"Command failed.\");\n } finally {\n setSubmitting(false);\n }\n };\n\n const isValid = entries.every((entry) => !entry.required || isFilled(entry, values[entry.key]));\n\n return (\n <Dialog.Root\n open={request !== null}\n size=\"lg\"\n scrollBehavior=\"inside\"\n onOpenChange={(details) => !details.open && close()}\n >\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content\n display=\"flex\"\n flexDirection=\"column\"\n maxH=\"calc(100% - 48px)\"\n onKeyDownCapture={(event) => handleDialogAcceptShortcut(event, () => void run(), isValid && !submitting)}\n >\n <Dialog.Header>\n <Stack gap=\"2xs\" minW=\"0\">\n <Text textStyle=\"heading/M/semibold\">{request?.label ?? \"Run command\"}</Text>\n {request?.record.command.description ? (\n <Text textStyle=\"paragraph/XS/regular\" color=\"fg.muted\" truncate>\n {request.record.command.description}\n </Text>\n ) : null}\n </Stack>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" disabled={submitting} />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body flex=\"1\" minH=\"0\" p=\"0\">\n <ScrollArea h=\"full\" contentProps={{ px: \"sm\", py: \"md\" }}>\n {/* Fields carry the param editor's own row padding, so the form is a\n flush stack of rows rather than rows spaced twice over. */}\n <Stack gap=\"0\">\n {entries.map((entry) => {\n const fieldProps = {\n entry,\n value: values[entry.key],\n disabled: submitting,\n onChange: (value: CommandParamValue) => setValue(entry.key, value),\n };\n const custom = renderParamField?.({ ...fieldProps, context: request?.context });\n return <Fragment key={entry.key}>{custom ?? <CommandParamField {...fieldProps} />}</Fragment>;\n })}\n {error ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.error\" px=\"sm\" pt=\"xs\">\n {error}\n </Text>\n ) : null}\n </Stack>\n </ScrollArea>\n </Dialog.Body>\n <Dialog.Footer>\n <HStack gap=\"2\">\n <Button size=\"sm\" variant=\"ghost\" disabled={submitting} onClick={close}>\n Cancel\n </Button>\n <Button size=\"sm\" variant=\"primary\" disabled={!isValid} loading={submitting} onClick={() => void run()}>\n {request?.submitLabel ?? \"Run\"}\n </Button>\n </HStack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import type {\n RegisteredWidgetContribution,\n ResourceRef,\n WorkbenchCompositionAddablePanel,\n WorkbenchCore,\n WorkbenchPanelRegion,\n} from \"../../core\";\n\ninterface OpenPanelWidgetInput {\n workbench: WorkbenchCore;\n widget: RegisteredWidgetContribution;\n region: WorkbenchPanelRegion;\n resource?: ResourceRef;\n pinned?: boolean;\n open?: WorkbenchCompositionAddablePanel[\"open\"];\n}\n\nexport const getPanelLabel = (region: WorkbenchPanelRegion) => {\n if (region === \"secondary\") return \"Secondary\";\n if (region === \"side\") return \"Side\";\n return \"Main\";\n};\n\nexport const openPanelWidget = (input: OpenPanelWidgetInput) => {\n const { open, pinned, region, resource, widget, workbench } = input;\n\n if (open) {\n open(resource);\n } else if (widget.openCommand) {\n void workbench.commands.executeCommand(widget.openCommand.commandId, widget.openCommand.args, {\n source: \"panel-add\",\n ...(resource ? { resource } : {}),\n });\n } else {\n const widgetResource = widget.resourceKinds?.length || widget.canOpen ? resource : undefined;\n // Adding a tab from the region's \"+\" tray is the user asking for a tab that stays.\n // The resource only binds the tab to its location; the tab is the widget, so it\n // keeps the widget's title instead of inheriting the location resource's label.\n workbench.layout.openWidget(widget.id, {\n region,\n resource: widgetResource,\n title: widget.title,\n closable: true,\n pinned,\n role: region === \"main\" ? \"location\" : \"sub-panel\",\n tabRetention: \"persistent\",\n });\n }\n\n if (region === \"secondary\") {\n workbench.shell.setRegionOpen(\"secondary\", true);\n }\n if (region === \"side\" && workbench.sidePanel.getMode() === \"closed\") {\n workbench.sidePanel.setMode(\"attached\");\n }\n};\n","import type { PaletteEntry } from \"@pstdio/ui\";\nimport { type WorkbenchCore, workbenchPanelRegions } from \"../../core\";\nimport { getPanelLabel, openPanelWidget } from \"../region/panel-widget-open\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport type { WorkbenchCompositionPanelsByRegion } from \"../shared/use-workbench-composition-panels\";\nimport { COMMAND_MODE_ID } from \"./palette-view\";\n\nexport const createWorkbenchPanelWidgetPaletteEntries = (input: {\n workbench: WorkbenchCore;\n onClose: () => void;\n panelsByRegion?: WorkbenchCompositionPanelsByRegion;\n}) => {\n const { onClose, panelsByRegion, workbench } = input;\n const resource = workbench.getPrimaryResource();\n return workbenchPanelRegions.flatMap((region) =>\n (panelsByRegion?.[region] ?? workbench.composition.panelsFor(region)).addable.map((panel): PaletteEntry => {\n const widget = panel.contribution;\n const panelLabel = getPanelLabel(region);\n const label = `Open ${widget.title} in ${panelLabel} Panel`;\n\n return {\n id: `workbench-panel:${region}:${widget.id}`,\n mode: COMMAND_MODE_ID,\n label,\n searchText: `${label} ${widget.id}`,\n group: \"Panels\",\n icon: widget.icon ? <WorkbenchIcon name={widget.icon} /> : undefined,\n onActivate: () => {\n onClose();\n openPanelWidget({ workbench, widget, region, resource, pinned: panel.pinned, open: panel.open });\n },\n };\n }),\n );\n};\n","import { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { PaletteEntry } from \"@pstdio/ui\";\nimport type { ResourceBrowseEntry, WorkbenchCore } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { SEARCH_MODE_ID } from \"./palette-view\";\nexport interface WorkbenchResourcePaletteEntry extends PaletteEntry {\n resourceKey: string;\n mode: typeof SEARCH_MODE_ID;\n}\nconst createResourceEntry = (input: {\n workbench: WorkbenchCore;\n entry: ResourceBrowseEntry;\n onClose: () => void;\n}): WorkbenchResourcePaletteEntry | undefined => {\n const { entry, onClose, workbench } = input;\n const { resource } = entry;\n const label = entry.resource.label ?? resourceKey(entry.resource);\n const kind = workbench.resources.getKind(resource.type);\n const icon = resource.icon ?? kind?.icon;\n const activate = entry.activate;\n if (!activate) return undefined;\n return {\n id: `workbench-resource:${resourceKey(resource)}`,\n resourceKey: resourceKey(resource),\n mode: SEARCH_MODE_ID,\n label,\n searchText: entry.searchText ?? label,\n description: entry.description,\n group: entry.group,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n onActivate: () => {\n onClose();\n void Promise.resolve(activate(resource)).catch(() => undefined);\n },\n };\n};\nexport const createWorkbenchResourcePaletteEntries = (input: {\n workbench: WorkbenchCore;\n query: string;\n onClose: () => void;\n}) => {\n const { onClose, query, workbench } = input;\n return workbench.resources\n .listResources(query)\n .map((entry) => createResourceEntry({ workbench, entry, onClose }))\n .filter((entry): entry is WorkbenchResourcePaletteEntry => entry !== undefined);\n};\n","import type { PaletteEntry, ThemePreference, ThemePreferenceOption } from \"@pstdio/ui\";\nimport { WorkbenchIcon } from \"../shared/icon\";\n\nconst THEME_MODE_ID = \"theme\";\n\nexport interface WorkbenchThemePaletteEntry extends PaletteEntry {\n themePreference: ThemePreference;\n mode: typeof THEME_MODE_ID;\n}\n\nconst getThemeIconName = (preference: ThemePreference) => {\n if (preference === \"pstdio-light\") return \"Sun\";\n if (preference === \"pstdio-dark\") return \"Moon\";\n return \"Palette\";\n};\n\nconst getThemePreferenceLabel = (themePreference: ThemePreferenceOption) => themePreference.title ?? themePreference.id;\n\nexport const getThemePreferenceEntryIndex = (\n themePreference: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[],\n) => {\n const index = themePreferences.findIndex((preference) => preference.id === themePreference);\n\n return Math.max(index, 0);\n};\n\nconst THEME_GROUP_LABELS = { light: \"Light\", dark: \"Dark\" } as const;\n\n// Group entries by appearance mode (lights first) so cycling the picker stays\n// within one mode instead of flashing light/dark/light on every step.\nconst byModeThenLabel = (a: ThemePreferenceOption, b: ThemePreferenceOption) => {\n if (a.mode !== b.mode) return a.mode === \"light\" ? -1 : 1;\n return getThemePreferenceLabel(a).localeCompare(getThemePreferenceLabel(b));\n};\n\nexport const createWorkbenchThemePreferencePaletteEntries = (input: {\n themePreference: ThemePreference;\n themePreferences: readonly ThemePreferenceOption[];\n setThemePreference: (themePreference: ThemePreference) => void;\n onClose: () => void;\n}) => {\n const { onClose, setThemePreference, themePreference, themePreferences } = input;\n\n return [...themePreferences].sort(byModeThenLabel).map((preference): WorkbenchThemePaletteEntry => {\n const label = getThemePreferenceLabel(preference);\n\n return {\n id: `theme:${preference.id}`,\n themePreference: preference.id,\n mode: THEME_MODE_ID,\n label,\n searchText: `theme color appearance ${preference.mode} ${preference.id} ${label}`,\n group: THEME_GROUP_LABELS[preference.mode],\n icon: <WorkbenchIcon name={getThemeIconName(preference.id)} />,\n isSelected: preference.id === themePreference,\n onActivate: () => {\n setThemePreference(preference.id);\n onClose();\n },\n };\n });\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { Palette, type PaletteEntry, PaletteShortcut, type ThemePreference, useThemePreference } from \"@pstdio/ui\";\nimport { type ReactNode, useEffect, useRef, useState } from \"react\";\nimport {\n type Command,\n type KeybindingSequence,\n type MenuPath,\n type RegisteredCommand,\n type RegisteredMenuItem,\n type WorkbenchCommandExecutionContext,\n type WorkbenchCore,\n workbenchCommandPaletteMenuPath,\n} from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchCompositionPanels } from \"../shared/use-workbench-composition-panels\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchCommandPaletteBackground } from \"../theme/workbench-theme-background\";\nimport { hasCommandParameters } from \"./command-palette-params\";\nimport { useWorkbenchCommandPaletteResourceEntries } from \"./command-palette-resources\";\nimport {\n type CommandParamFieldRenderer,\n CommandParamsDialog,\n type CommandParamsRequest,\n} from \"./command-params-dialog\";\nimport {\n COMMAND_MODE_ID,\n getPaletteInitialActiveIndex,\n getPaletteInputIcon,\n getPalettePlaceholder,\n getPaletteViewMode,\n getPaletteViewModes,\n isPickerPaletteView,\n isThemePaletteView,\n} from \"./palette-view\";\nimport { createWorkbenchPanelWidgetPaletteEntries } from \"./panel-widget-palette\";\nimport { createWorkbenchResourcePaletteEntries } from \"./resource-palette\";\nimport {\n createWorkbenchThemePreferencePaletteEntries,\n getThemePreferenceEntryIndex,\n type WorkbenchThemePaletteEntry,\n} from \"./theme-palette\";\n\nexport type { WorkbenchResourcePaletteEntry } from \"./resource-palette\";\nexport { createWorkbenchResourcePaletteEntries };\n\ninterface WorkbenchCommandPaletteProps {\n workbench: WorkbenchCore;\n open: boolean;\n menuPath?: MenuPath;\n initialQuery?: string;\n renderParamField?: CommandParamFieldRenderer;\n onClose: () => void;\n}\n\nexport interface WorkbenchCommandPaletteEntry extends PaletteEntry {\n commandId: string;\n mode: typeof COMMAND_MODE_ID;\n}\n\ninterface WorkbenchThemePreviewState {\n baseTheme: ThemePreference;\n}\n\ninterface WorkbenchCommandPaletteRecord {\n record: RegisteredCommand;\n action?: RegisteredMenuItem;\n}\n\nconst rollbackThemePreview = (\n setThemePreference: (themePreference: ThemePreference) => void,\n themePreviewRef: { current: WorkbenchThemePreviewState | null },\n) => {\n const preview = themePreviewRef.current;\n themePreviewRef.current = null;\n if (preview) setThemePreference(preview.baseTheme);\n};\n\nconst getCommandSearchText = (command: Command, label: string) =>\n [label, command.id, command.description, command.category].filter(Boolean).join(\" \");\n\nconst createShortcutByCommandId = (workbench: WorkbenchCore) =>\n new Map(\n workbench.keybindings.listCommandKeybindings().map((keybinding) => [keybinding.commandId, keybinding.keybinding]),\n );\n\nconst getShortcut = (binding: KeybindingSequence | undefined): ReactNode =>\n binding ? <PaletteShortcut binding={binding} /> : undefined;\n\nconst getCommandErrorMessage = (error: unknown) => (error instanceof Error ? error.message : \"Command failed.\");\n\nconst commandExecutionContext = (workbench: WorkbenchCore): WorkbenchCommandExecutionContext | undefined => {\n const resource = workbench.getPrimaryResource();\n return resource ? { resource } : undefined;\n};\n\nconst executePaletteCommand = async (input: {\n workbench: WorkbenchCore;\n commandId: string;\n args: unknown;\n context?: WorkbenchCommandExecutionContext;\n label: string;\n}) => {\n const { args, commandId, context, label, workbench } = input;\n try {\n await workbench.commands.executeCommand(commandId, args, context);\n } catch (error) {\n workbench.notifications.show({ level: \"error\", title: `${label} failed`, message: getCommandErrorMessage(error) });\n }\n};\n\nconst createEntry = (input: {\n workbench: WorkbenchCore;\n record: RegisteredCommand;\n action?: RegisteredMenuItem;\n shortcutByCommandId: Map<string, KeybindingSequence>;\n onClose: () => void;\n onRequestParams?: (request: CommandParamsRequest) => void;\n}): WorkbenchCommandPaletteEntry | null => {\n const { action, onClose, onRequestParams, record, workbench, shortcutByCommandId } = input;\n const args = action?.args;\n\n if (!workbench.commands.isCommandVisible(record.command.id, args)) return null;\n\n const label = action?.label ?? record.command.label;\n const icon = action?.icon ?? record.command.icon;\n const group = action?.group ?? record.command.category;\n\n return {\n id: `workbench-command:${record.command.id}`,\n commandId: record.command.id,\n mode: COMMAND_MODE_ID,\n label,\n searchText: getCommandSearchText(record.command, label),\n description: record.command.description,\n group,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n shortcut: getShortcut(shortcutByCommandId.get(record.command.id)),\n onActivate: () => {\n const context = commandExecutionContext(workbench);\n onClose();\n if (hasCommandParameters(record.command.params) && onRequestParams) {\n onRequestParams({ record, action, label, args, context });\n return;\n }\n void executePaletteCommand({ workbench, commandId: record.command.id, args, context, label });\n },\n };\n};\n\nconst getRecordGroup = (item: WorkbenchCommandPaletteRecord) =>\n item.action?.group ?? item.record.command.category ?? \"\";\n\nconst getRecordOrder = (item: WorkbenchCommandPaletteRecord) => item.action?.order ?? 0;\n\nconst byCommandPaletteGroup = (left: WorkbenchCommandPaletteRecord, right: WorkbenchCommandPaletteRecord) => {\n const groupComparison = getRecordGroup(left).localeCompare(getRecordGroup(right));\n if (groupComparison !== 0) return groupComparison;\n\n return getRecordOrder(left) - getRecordOrder(right);\n};\n\nconst listCommandRecords = (workbench: WorkbenchCore, menuPath?: MenuPath) => {\n if (!menuPath) {\n return workbench.commands.listCommands().map((record) => ({ record, action: undefined }));\n }\n\n return workbench.layout\n .listMenuItems(menuPath)\n .filter((action) => workbench.context.matches(action.when))\n .map((action) => {\n const record = workbench.commands.getCommand(action.commandId);\n return record ? { record, action } : null;\n })\n .filter((item): item is { record: RegisteredCommand; action: RegisteredMenuItem } => item !== null);\n};\n\nexport const createWorkbenchCommandPaletteEntries = (input: {\n workbench: WorkbenchCore;\n menuPath?: MenuPath;\n onClose: () => void;\n onRequestParams?: (request: CommandParamsRequest) => void;\n}) => {\n const { menuPath, onClose, onRequestParams, workbench } = input;\n const shortcutByCommandId = createShortcutByCommandId(workbench);\n\n return listCommandRecords(workbench, menuPath)\n .sort(byCommandPaletteGroup)\n .map(({ record, action }) =>\n createEntry({ workbench, record, action, shortcutByCommandId, onClose, onRequestParams }),\n )\n .filter((entry): entry is WorkbenchCommandPaletteEntry => entry !== null);\n};\n\nexport const WorkbenchCommandPalette = (props: WorkbenchCommandPaletteProps) => {\n const {\n workbench,\n open,\n menuPath = workbenchCommandPaletteMenuPath,\n initialQuery = \"\",\n renderParamField,\n onClose,\n } = props;\n const { themePreference, themePreferences, setThemePreference } = useThemePreference();\n const view = useWorkbenchStore(workbench.commandPalette.store, (state) => state.view);\n const themePreviewRef = useRef<WorkbenchThemePreviewState | null>(null);\n const paramsRequest = useWorkbenchStore(workbench.commandPalette.store, (state) => state.paramsRequest);\n const [liveQuery, setLiveQuery] = useState(initialQuery);\n const commandPaletteResourceEntries = useWorkbenchCommandPaletteResourceEntries({\n workbench,\n query: liveQuery,\n open,\n onClose,\n });\n const compositionPanels = useWorkbenchCompositionPanels(workbench);\n\n const closePalette = () => {\n rollbackThemePreview(setThemePreference, themePreviewRef);\n onClose();\n };\n\n const exitPickerView = () => {\n rollbackThemePreview(setThemePreference, themePreviewRef);\n workbench.commandPalette.open({ view: \"main\" });\n };\n\n const commitThemePreview = () => {\n themePreviewRef.current = null;\n onClose();\n };\n\n const commandEntries = createWorkbenchCommandPaletteEntries({\n workbench,\n menuPath,\n onClose,\n onRequestParams: (request) => workbench.commandPalette.requestParams(request),\n });\n const resourceEntries = createWorkbenchResourcePaletteEntries({ workbench, query: initialQuery, onClose });\n const themeEntries = createWorkbenchThemePreferencePaletteEntries({\n themePreference,\n themePreferences,\n setThemePreference,\n onClose: commitThemePreview,\n });\n const panelWidgetEntries = createWorkbenchPanelWidgetPaletteEntries({\n workbench,\n onClose,\n panelsByRegion: compositionPanels,\n });\n const entries = [\n ...resourceEntries,\n ...commandPaletteResourceEntries,\n ...commandEntries,\n ...panelWidgetEntries,\n ...themeEntries,\n ];\n const themeInitialActiveIndex = getThemePreferenceEntryIndex(themePreference, themePreferences);\n const isThemeView = isThemePaletteView(view);\n const initialActiveIndex = getPaletteInitialActiveIndex({\n view,\n themeInitialActiveIndex,\n });\n const activeViewMode = getPaletteViewMode(view);\n const activeViewModes = getPaletteViewModes(view);\n\n useEffect(() => {\n if (open) setLiveQuery(initialQuery);\n }, [initialQuery, open]);\n\n useEffect(() => {\n if (open && isThemeView) {\n if (!themePreviewRef.current) themePreviewRef.current = { baseTheme: themePreference };\n return;\n }\n\n rollbackThemePreview(setThemePreference, themePreviewRef);\n }, [isThemeView, open, setThemePreference, themePreference]);\n\n return (\n <>\n <Box\n display=\"contents\"\n css={{\n \"& [data-scope=dialog][data-part=backdrop], & [data-scope=dialog][data-part=positioner]\": {\n position: \"absolute\",\n inset: \"0\",\n },\n \"& [data-scope=dialog][data-part=positioner]\": {\n alignItems: \"center\",\n justifyContent: \"center\",\n h: \"full\",\n minH: \"0\",\n padding: \"md\",\n w: \"full\",\n },\n \"& [data-scope=dialog][data-part=content]\": { background: workbenchCommandPaletteBackground },\n }}\n >\n <Palette\n open={open}\n entries={entries}\n initialQuery={initialQuery}\n initialActiveIndex={initialActiveIndex}\n mode={activeViewMode}\n modes={activeViewModes}\n resetKey={`${view}:${initialQuery}`}\n inputIcon={({ mode }) => getPaletteInputIcon({ view, mode })}\n placeholder={({ mode }) => getPalettePlaceholder({ view, mode })}\n emptyLabel=\"No results found.\"\n onActiveEntryChange={(entry) => {\n if (!open || !isThemeView) return;\n const themeEntry = entry as WorkbenchThemePaletteEntry | null;\n if (!themeEntry?.themePreference || themeEntry.themePreference === themePreference) return;\n setThemePreference(themeEntry.themePreference);\n }}\n onQueryChange={setLiveQuery}\n onClose={closePalette}\n onEscape={(ctx) => {\n if (isPickerPaletteView(view)) {\n exitPickerView();\n return true;\n }\n\n if (ctx.query.length > 0) {\n ctx.setQuery(\"\");\n ctx.setActiveIndex(0);\n return true;\n }\n\n closePalette();\n return true;\n }}\n />\n </Box>\n <CommandParamsDialog\n request={paramsRequest}\n renderParamField={renderParamField}\n prepareArgs={(input) =>\n workbench.commands.prepareCommandArgs(input.commandId, input.args, input.context, input.onArgsChange)\n }\n onClose={() => workbench.commandPalette.clearParams()}\n onRun={(input) => executePaletteCommand({ workbench, ...input })}\n />\n </>\n );\n};\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\nimport { type ReactNode, useEffect, useRef } from \"react\";\nimport type { WorkbenchCore, WorkbenchFocusRegionId } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface WorkbenchFocusRegionProps extends BoxProps {\n workbench: WorkbenchCore;\n region: WorkbenchFocusRegionId;\n children: ReactNode;\n}\n\nexport const WorkbenchFocusRegion = (props: WorkbenchFocusRegionProps) => {\n const { workbench, region, children, ...boxProps } = props;\n const activeRegion = useWorkbenchStore(workbench.focus.store, (state) => state.activeRegion);\n const ref = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const element = ref.current;\n if (!element || activeRegion !== region) return;\n if (element.contains(document.activeElement)) return;\n element.focus({ preventScroll: true });\n }, [activeRegion, region]);\n\n return (\n <Box\n ref={ref}\n tabIndex={-1}\n outline=\"none\"\n onFocusCapture={(event) => {\n if (event.currentTarget.contains(event.target)) workbench.focus.setActiveRegion(region);\n }}\n {...boxProps}\n >\n {children}\n </Box>\n );\n};\n","import type {\n ContextKeyValue,\n MenuPath,\n RegisteredCommand,\n RegisteredMenuItem,\n ResourceRef,\n WorkbenchCore,\n} from \"../../core\";\nimport {\n createWorkbenchResourceContextValues,\n matchesContextExpression,\n workbenchResourceIdContextKey,\n workbenchResourceMetadataContextKey,\n workbenchResourceTypeContextKey,\n} from \"../../core\";\nimport { byContributionPriority } from \"../../core/shared/contributions/metadata\";\n\nexport interface WorkbenchMenuItem {\n id: string;\n commandId: string;\n label: string;\n description?: string;\n icon: string | undefined;\n iconSrc?: string;\n overflowLabel?: string;\n group: string | undefined;\n args: unknown;\n disabled: boolean;\n separatorBefore?: boolean;\n readOnly?: true;\n}\n\ninterface WorkbenchMenuItemState {\n itemsByPath: Record<string, RegisteredMenuItem[]>;\n commands: Record<string, RegisteredCommand>;\n contextValues: Record<string, ContextKeyValue>;\n}\n\nconst menuPathKey = (path: MenuPath) => path.join(\"/\");\n\ninterface WorkbenchMenuItemContext {\n resource?: ResourceRef | undefined;\n}\n\nconst workbenchResourceMetadataContextKeyPrefix = workbenchResourceMetadataContextKey(\"\");\n\nconst isWorkbenchResourceContextKey = (key: string) =>\n key === workbenchResourceTypeContextKey ||\n key === workbenchResourceIdContextKey ||\n key.startsWith(workbenchResourceMetadataContextKeyPrefix);\n\nconst omitWorkbenchResourceContextValues = (values: Record<string, ContextKeyValue>) => {\n const result: Record<string, ContextKeyValue> = {};\n\n for (const [key, value] of Object.entries(values)) {\n if (!isWorkbenchResourceContextKey(key)) result[key] = value;\n }\n\n return result;\n};\n\nconst resolveContextValues = (state: WorkbenchMenuItemState, context: WorkbenchMenuItemContext | undefined) => {\n const baseContextValues = context ? omitWorkbenchResourceContextValues(state.contextValues) : state.contextValues;\n\n return {\n ...baseContextValues,\n ...createWorkbenchResourceContextValues(context?.resource),\n };\n};\n\nexport const listWorkbenchMenuItemsFromState = (\n state: WorkbenchMenuItemState,\n menuPath: MenuPath,\n context?: WorkbenchMenuItemContext,\n) => {\n const contextValues = resolveContextValues(state, context);\n\n return [...(state.itemsByPath[menuPathKey(menuPath)] ?? [])]\n .sort((left, right) => {\n const leftOrder = left.order ?? 0;\n const rightOrder = right.order ?? 0;\n return leftOrder - rightOrder || byContributionPriority(left, right);\n })\n .filter((action) => matchesContextExpression(contextValues, action.when))\n .map((action, index) => {\n const record = state.commands[action.commandId];\n if (!record) return null;\n\n const args = action.args;\n if (record.handler.isVisible?.(args) === false) return null;\n\n return {\n id: `${action.commandId}:${index}`,\n commandId: record.command.id,\n label: action.label ?? record.command.label,\n ...((action.description ?? record.command.description)\n ? { description: action.description ?? record.command.description }\n : {}),\n icon: action.icon ?? record.command.icon,\n ...(action.iconSrc ? { iconSrc: action.iconSrc } : {}),\n ...(action.overflowLabel ? { overflowLabel: action.overflowLabel } : {}),\n group: action.group,\n args,\n disabled: action.readOnly === true || record.handler.isEnabled?.(args) === false,\n ...(action.readOnly ? { readOnly: true } : {}),\n } satisfies WorkbenchMenuItem;\n })\n .filter((item): item is WorkbenchMenuItem => item !== null);\n};\n\nexport const listWorkbenchMenuItems = (\n workbench: WorkbenchCore,\n menuPath: MenuPath,\n context?: WorkbenchMenuItemContext,\n) =>\n listWorkbenchMenuItemsFromState(\n {\n itemsByPath: workbench.layout.menuStore.getState().itemsByPath,\n commands: workbench.commands.store.getState().commands,\n contextValues: workbench.context.store.getState().values,\n },\n menuPath,\n context,\n );\n","import type { WorkbenchMenuItem } from \"../menus/menu-items\";\n\nexport type WorkbenchHeaderOverflowItem = WorkbenchMenuItem & { separatorBefore?: boolean };\n\nexport interface WorkbenchHeaderActionGroups {\n inlineItems: WorkbenchMenuItem[];\n overflowItems: WorkbenchHeaderOverflowItem[];\n}\n\nconst isKernelAction = (item: WorkbenchMenuItem) => item.group === \"kernel\";\n\nconst isOverflowAction = (item: WorkbenchMenuItem) => item.group === \"overflow\" || isKernelAction(item);\n\nconst withLeadingSeparator = (items: WorkbenchMenuItem[], enabled: boolean) => {\n if (!enabled || items.length === 0) return items;\n\n const [first, ...rest] = items;\n if (!first) return rest;\n\n return [{ ...first, separatorBefore: true as const }, ...rest];\n};\n\nconst resolveOverflowItems = (items: WorkbenchMenuItem[]) => {\n const regularItems = items.filter((item) => !isKernelAction(item));\n const kernelItems = items.filter(isKernelAction);\n\n return [...regularItems, ...withLeadingSeparator(kernelItems, regularItems.length > 0)];\n};\n\nexport const resolveWorkbenchHeaderActionGroups = (items: WorkbenchMenuItem[]) =>\n ({\n inlineItems: items.filter((item) => !isOverflowAction(item)),\n overflowItems: resolveOverflowItems(items.filter(isOverflowAction)),\n }) satisfies WorkbenchHeaderActionGroups;\n\nexport const resolveWorkbenchHeaderOverflowLabel = (items: WorkbenchMenuItem[]) =>\n items.find((item) => item.overflowLabel)?.overflowLabel ?? \"More header actions\";\n","import { Button, HStack, IconButton, Menu, Portal } from \"@chakra-ui/react\";\nimport { ListRow, Tooltip } from \"@pstdio/ui\";\nimport { Fragment } from \"react\";\nimport {\n getAnchorResource,\n type MenuPath,\n type ResourceRef,\n type WorkbenchCommandExecutionContext,\n type WorkbenchCore,\n} from \"../../core\";\nimport { hasCommandParameters } from \"../command-palette/command-palette-params\";\nimport { listWorkbenchMenuItemsFromState, type WorkbenchMenuItem } from \"../menus/menu-items\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { resolveWorkbenchHeaderActionGroups, resolveWorkbenchHeaderOverflowLabel } from \"./header-action-items\";\n\ninterface WorkbenchHeaderActionsProps {\n workbench: WorkbenchCore;\n menuPath: MenuPath;\n controlSize?: \"2xs\" | \"xs\";\n}\n\nconst commandExecutionContext = (resource: ResourceRef | undefined): WorkbenchCommandExecutionContext | undefined =>\n resource ? { resource } : undefined;\n\nconst WorkbenchInlineHeaderAction = (props: {\n item: WorkbenchMenuItem;\n onSelect: (item: WorkbenchMenuItem) => void;\n controlSize: \"2xs\" | \"xs\";\n}) => {\n const { controlSize, item, onSelect } = props;\n const onClick = () => onSelect(item);\n\n if (item.group === \"primary\" || !item.icon) {\n return (\n <Button\n key={item.id}\n size={controlSize}\n variant={item.group === \"primary\" ? \"primary\" : \"subtle\"}\n disabled={item.disabled}\n onClick={onClick}\n >\n {item.icon ? <WorkbenchIcon name={item.icon} size={14} /> : null}\n {item.label}\n </Button>\n );\n }\n\n return (\n <Tooltip key={item.id} content={item.label}>\n <IconButton size={controlSize} variant=\"ghost\" aria-label={item.label} disabled={item.disabled} onClick={onClick}>\n <WorkbenchIcon name={item.icon} size={16} />\n </IconButton>\n </Tooltip>\n );\n};\n\nexport const WorkbenchHeaderActions = (props: WorkbenchHeaderActionsProps) => {\n const { controlSize = \"xs\", menuPath, workbench } = props;\n const commands = useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n const contextValues = useWorkbenchStore(workbench.context.store, (state) => state.values);\n const itemsByPath = useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n const resource = useWorkbenchStore(workbench.layout.store, (state) => getAnchorResource(state.layout, \"primary\"));\n const items = listWorkbenchMenuItemsFromState({ itemsByPath, commands, contextValues }, menuPath, { resource });\n const { inlineItems, overflowItems } = resolveWorkbenchHeaderActionGroups(items);\n\n // Actions whose command declares parameters collect that input through the shared\n // command params dialog (opened via the command palette store) before running;\n // parameterless actions execute immediately.\n const onSelect = (item: WorkbenchMenuItem) => {\n const command = commands[item.commandId]?.command;\n const args = item.args;\n const context = commandExecutionContext(resource);\n if (command && hasCommandParameters(command.params)) {\n workbench.commandPalette.requestParams({ record: { command }, label: item.label, args, context });\n return;\n }\n void workbench.commands.executeCommand(item.commandId, args, context).catch(() => undefined);\n };\n\n if (items.length === 0) return null;\n\n return (\n <HStack flexShrink={0} gap=\"2xs\" minW=\"0\">\n {inlineItems.map((item) => (\n <WorkbenchInlineHeaderAction key={item.id} item={item} onSelect={onSelect} controlSize={controlSize} />\n ))}\n {overflowItems.length > 0 ? (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton\n size={controlSize}\n variant=\"ghost\"\n aria-label={resolveWorkbenchHeaderOverflowLabel(overflowItems)}\n >\n <WorkbenchIcon name=\"MoreHorizontal\" size={16} />\n </IconButton>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"220px\" bg=\"bg\">\n {overflowItems.map((item) => (\n <Fragment key={item.id}>\n {item.separatorBefore ? <Menu.Separator /> : null}\n <Menu.Item value={item.id} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n id={item.id}\n label={item.label}\n icon={item.icon ? <WorkbenchIcon name={item.icon} size={16} /> : undefined}\n disabled={item.disabled}\n onActivate={() => onSelect(item)}\n />\n </Menu.Item>\n </Fragment>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n ) : null}\n </HStack>\n );\n};\n","import { type UseHotkeyDefinition, useHotkeys } from \"@tanstack/react-hotkeys\";\nimport type { WorkbenchHotkeyRegistration } from \"./workbench-keybinding-dispatcher\";\n\nexport const useTanStackWorkbenchHotkeys = (registrations: WorkbenchHotkeyRegistration[]) => {\n const hotkeys: UseHotkeyDefinition[] = registrations.map((registration) => ({\n hotkey: registration.hotkey as UseHotkeyDefinition[\"hotkey\"],\n callback: (event) => {\n event.preventDefault();\n void registration.execute();\n },\n options: {\n enabled: registration.enabled,\n ignoreInputs: registration.ignoreInputs,\n preventDefault: true,\n stopPropagation: true,\n },\n }));\n\n useHotkeys(hotkeys, {\n ignoreInputs: true,\n preventDefault: true,\n stopPropagation: true,\n });\n};\n","import { useEffect, useState } from \"react\";\nimport { getKeybindingSteps, type KeybindingSequence, type WorkbenchCore } from \"../../core\";\nimport { useTanStackWorkbenchHotkeys } from \"./tanstack-hotkey-adapter\";\n\nexport interface WorkbenchHotkeyRegistration {\n id: string;\n hotkey: KeybindingSequence;\n enabled: boolean;\n ignoreInputs: boolean;\n execute(): Promise<unknown>;\n}\n\nexport interface CreateWorkbenchHotkeyRegistrationsInput {\n workbench: WorkbenchCore;\n disabled?: boolean;\n commandIds?: readonly string[];\n}\n\nexport interface WorkbenchKeybindingDispatcherProps {\n workbench: WorkbenchCore;\n disabled?: boolean;\n commandIds?: readonly string[];\n}\n\nconst keyAliases: Record<string, string> = {\n alt: \"Alt\",\n cmd: \"Meta\",\n command: \"Meta\",\n ctrl: \"Control\",\n control: \"Control\",\n meta: \"Meta\",\n mod: \"Mod\",\n option: \"Alt\",\n shift: \"Shift\",\n};\n\nconst normalizeWorkbenchKeybindingStep = (keybinding: string) =>\n keybinding\n .split(\"+\")\n .map((part) => {\n const trimmed = part.trim();\n const alias = keyAliases[trimmed.toLowerCase()];\n if (alias) return alias;\n if (trimmed.length === 1) return trimmed.toUpperCase();\n return trimmed.slice(0, 1).toUpperCase() + trimmed.slice(1);\n })\n .join(\"+\");\n\nexport const normalizeWorkbenchKeybinding = (keybinding: KeybindingSequence): KeybindingSequence => {\n const steps = getKeybindingSteps(keybinding).map(normalizeWorkbenchKeybindingStep);\n return steps.length === 1 ? (steps[0] ?? \"\") : steps;\n};\n\nexport const createWorkbenchHotkeyRegistrations = (input: CreateWorkbenchHotkeyRegistrationsInput) => {\n const { workbench, disabled = false, commandIds } = input;\n const allowedCommandIds = commandIds ? new Set(commandIds) : undefined;\n\n return workbench.keybindings.listActiveKeybindings().flatMap((keybinding, index) => {\n const action = keybinding.action;\n if (action.kind === \"command\") {\n if (allowedCommandIds && !allowedCommandIds.has(action.commandId)) return [];\n const record = workbench.commands.getCommand(action.commandId);\n if (!record) return [];\n const enabled =\n !disabled &&\n workbench.commands.isCommandVisible(record.command.id, action.args) &&\n workbench.commands.isCommandEnabled(record.command.id, action.args);\n return [\n {\n id: record.command.id,\n hotkey: normalizeWorkbenchKeybinding(keybinding.keybinding),\n enabled,\n ignoreInputs: true,\n execute: () => workbench.navigation.openTarget(action),\n } satisfies WorkbenchHotkeyRegistration,\n ];\n }\n if (allowedCommandIds) return [];\n return [\n {\n id: `workbench.keybinding.${index}`,\n hotkey: normalizeWorkbenchKeybinding(keybinding.keybinding),\n enabled: !disabled,\n ignoreInputs: true,\n execute: () => workbench.navigation.openTarget(action),\n } satisfies WorkbenchHotkeyRegistration,\n ];\n });\n};\n\nexport const WorkbenchKeybindingDispatcher = (props: WorkbenchKeybindingDispatcherProps) => {\n const { workbench, disabled, commandIds } = props;\n const [registrations, setRegistrations] = useState(() =>\n createWorkbenchHotkeyRegistrations({ workbench, disabled, commandIds }),\n );\n useEffect(() => {\n const refresh = () => setRegistrations(createWorkbenchHotkeyRegistrations({ workbench, disabled, commandIds }));\n const subscriptions = [workbench.keybindings.store, workbench.context.store, workbench.commands.store].map(\n (store) => store.subscribe(refresh),\n );\n refresh();\n return () => {\n for (const unsubscribe of subscriptions) unsubscribe();\n };\n }, [workbench, disabled, commandIds]);\n useTanStackWorkbenchHotkeys(registrations);\n\n return null;\n};\n","import { Box, HStack, Text } from \"@chakra-ui/react\";\nimport { PaletteShortcut, type TreeListAction, type TreeListActionMenuItem } from \"@pstdio/ui\";\nimport type {\n ContextKeyValue,\n KeybindingSequence,\n MenuPath,\n RegisteredCommand,\n TreeAction,\n WorkbenchCommandExecutionContext,\n WorkbenchCoreContributionContext,\n} from \"../../../core\";\nimport { createWorkbenchResourceContextValues, matchesContextExpression } from \"../../../core\";\nimport { hasCommandParameters } from \"../../command-palette/command-palette-params\";\nimport type { CommandParamsRequest } from \"../../command-palette/command-params-dialog\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\n\nexport interface TreeActionParamsRequest {\n request: CommandParamsRequest;\n run: (args: unknown) => Promise<void>;\n}\n\ninterface CreateTreeActionItemsInput {\n actions?: TreeAction[];\n workbench: WorkbenchCoreContributionContext;\n context?: WorkbenchCommandExecutionContext;\n onCommandError?: (error: unknown) => void;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n}\n\ninterface CreateTreeMenuItemsInput {\n workbench: WorkbenchCoreContributionContext;\n menuPath: MenuPath;\n context?: WorkbenchCommandExecutionContext;\n onCommandError?: (error: unknown) => void;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n}\n\ninterface CreateTreeContextMenuItemsInput {\n actions?: TreeAction[];\n menuPath?: MenuPath;\n workbench: WorkbenchCoreContributionContext;\n context?: WorkbenchCommandExecutionContext;\n onCommandError?: (error: unknown) => void;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n}\n\nconst commandContextValues = (\n workbench: WorkbenchCoreContributionContext,\n context: WorkbenchCommandExecutionContext | undefined,\n): Record<string, ContextKeyValue> => ({\n ...workbench.context.snapshot(),\n ...createWorkbenchResourceContextValues(context?.resource),\n});\n\nconst isRegisteredCommandVisible = (\n record: RegisteredCommand,\n args: unknown,\n contextValues: Record<string, ContextKeyValue>,\n) => {\n if (!matchesContextExpression(contextValues, record.command.when)) return false;\n return record.handler.isVisible?.(args) !== false;\n};\n\nconst executeTreeAction = async (input: {\n action: TreeAction;\n workbench: WorkbenchCoreContributionContext;\n args?: unknown;\n context?: WorkbenchCommandExecutionContext;\n}) => {\n const { action, args, context, workbench } = input;\n const record = action.commandId ? workbench.commands.getCommand(action.commandId) : undefined;\n const resolvedArgs = args ?? action.args;\n await (record\n ? workbench.commands.executeCommand(record.command.id, resolvedArgs, context)\n : action.run?.(resolvedArgs));\n};\n\nconst runTreeAction = async (input: {\n action: TreeAction;\n workbench: WorkbenchCoreContributionContext;\n onCommandError?: (error: unknown) => void;\n args?: unknown;\n context?: WorkbenchCommandExecutionContext;\n}) => {\n const { action, args, context, onCommandError, workbench } = input;\n try {\n await executeTreeAction({ action, args, context, workbench });\n } catch (error) {\n onCommandError?.(error);\n throw error;\n }\n};\n\nconst resolveTreeActionCommand = (workbench: WorkbenchCoreContributionContext, action: TreeAction) => {\n if (!action.commandId) return undefined;\n return workbench.commands.getCommand(action.commandId);\n};\n\nconst isTreeActionVisible = (\n workbench: WorkbenchCoreContributionContext,\n action: TreeAction,\n contextValues: Record<string, ContextKeyValue>,\n) => {\n if (!matchesContextExpression(contextValues, action.when)) return false;\n\n const record = resolveTreeActionCommand(workbench, action);\n if (action.commandId && !record) return false;\n\n return record ? isRegisteredCommandVisible(record, action.args, contextValues) : true;\n};\n\nconst isTreeActionEnabled = (workbench: WorkbenchCoreContributionContext, action: TreeAction) => {\n if (action.disabled) return false;\n\n const record = resolveTreeActionCommand(workbench, action);\n return record ? workbench.commands.isCommandEnabled(record.command.id, action.args) : true;\n};\n\nconst createMenuIcon = (input: { icon?: string; iconSrc?: string }) => {\n const { icon, iconSrc } = input;\n if (iconSrc) {\n return (\n <Box boxSize=\"16px\" bg=\"white\" borderRadius=\"4px\" p=\"1px\" display=\"grid\" placeItems=\"center\">\n <img\n src={iconSrc}\n alt=\"\"\n aria-hidden=\"true\"\n width={14}\n height={14}\n style={{ display: \"block\", width: \"100%\", height: \"100%\", objectFit: \"contain\" }}\n />\n </Box>\n );\n }\n\n return icon ? <WorkbenchIcon name={icon} /> : undefined;\n};\n\nconst createMenuEndContent = (input: { external?: boolean; binding?: KeybindingSequence }) => {\n const { binding, external } = input;\n if (external) return <WorkbenchIcon name=\"ArrowUpRight\" size={14} color=\"fg.muted\" />;\n if (binding) return <PaletteShortcut binding={binding} />;\n return undefined;\n};\n\nconst withLeadingSeparator = <T extends TreeListActionMenuItem>(items: T[], enabled: boolean) => {\n if (!enabled || items.length === 0) return items;\n const [first, ...rest] = items;\n return [{ ...first, separatorBefore: true }, ...rest];\n};\n\nconst isKernelMenuAction = (group: string | undefined) => group === \"kernel\";\n\nconst createTreeMenuItemGroups = (input: CreateTreeMenuItemsInput) => {\n const { context, menuPath, onCommandError, onRequestParams, workbench } = input;\n const contextValues = commandContextValues(workbench, context);\n const shortcuts = new Map(workbench.keybindings.listCommandKeybindings().map((k) => [k.commandId, k.keybinding]));\n const regularItems: TreeListActionMenuItem[] = [];\n const kernelItems: TreeListActionMenuItem[] = [];\n\n for (const [index, action] of workbench.layout.listMenuItems(menuPath).entries()) {\n if (!matchesContextExpression(contextValues, action.when)) continue;\n\n const record = workbench.commands.getCommand(action.commandId);\n if (!record) continue;\n\n const args = action.args;\n if (!isRegisteredCommandVisible(record, args, contextValues)) continue;\n\n const icon = action.icon ?? record.command.icon;\n const binding = shortcuts.get(record.command.id);\n const readOnly = action.readOnly === true;\n const label = action.label ?? record.command.label;\n const requestParams =\n hasCommandParameters(record.command.params) && onRequestParams\n ? () =>\n onRequestParams({\n request: {\n record: { command: record.command },\n label,\n args,\n context,\n },\n run: async (nextArgs) => {\n try {\n await workbench.commands.executeCommand(record.command.id, nextArgs, context);\n } catch (error) {\n onCommandError?.(error);\n throw error;\n }\n },\n })\n : undefined;\n const item = {\n id: `${action.commandId}:${index}`,\n label,\n commandId: action.sourceCommandId ?? record.command.id,\n description: action.description ?? record.command.description,\n icon: createMenuIcon({ icon, iconSrc: action.iconSrc }),\n endContent: createMenuEndContent({ external: action.external, binding }),\n disabled: readOnly || !workbench.commands.isCommandEnabled(record.command.id, args),\n readOnly,\n onAction: readOnly\n ? undefined\n : () => {\n if (requestParams) {\n requestParams();\n return;\n }\n void workbench.commands\n .executeCommand(record.command.id, args, context)\n .catch((error) => onCommandError?.(error));\n },\n };\n\n if (isKernelMenuAction(action.group)) {\n kernelItems.push(item);\n } else {\n regularItems.push(item);\n }\n }\n\n return { regularItems, kernelItems };\n};\n\nexport const createTreeMenuItems = (input: CreateTreeMenuItemsInput) => {\n const { regularItems, kernelItems } = createTreeMenuItemGroups(input);\n return [...regularItems, ...withLeadingSeparator(kernelItems, regularItems.length > 0)];\n};\n\nconst createTreeActionMenuItems = (input: CreateTreeContextMenuItemsInput) => {\n const { actions = [], context, onCommandError, onRequestParams, workbench } = input;\n const contextValues = commandContextValues(workbench, context);\n const shortcuts = new Map(workbench.keybindings.listCommandKeybindings().map((k) => [k.commandId, k.keybinding]));\n const items: TreeListActionMenuItem[] = [];\n\n for (const action of actions) {\n if (!isTreeActionVisible(workbench, action, contextValues)) continue;\n\n const record = resolveTreeActionCommand(workbench, action);\n const label = action.label ?? record?.command.label;\n if (!label) continue;\n\n const icon = action.icon ?? record?.command.icon;\n const disabled = !isTreeActionEnabled(workbench, action);\n const binding = action.commandId ? shortcuts.get(action.commandId) : undefined;\n const requestParams =\n hasCommandParameters(action.params) && onRequestParams\n ? () =>\n onRequestParams({\n request: {\n record: { command: { id: action.commandId ?? action.id, label, params: action.params } },\n label,\n submitLabel: action.submitLabel,\n args: action.args,\n context,\n },\n run: (args) => runTreeAction({ action, args, context, workbench, onCommandError }),\n })\n : undefined;\n items.push({\n id: action.id,\n label,\n commandId: record?.command.id ?? action.commandId,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n endContent: binding ? <PaletteShortcut binding={binding} /> : undefined,\n disabled,\n onAction: () => {\n if (disabled) return;\n if (requestParams) {\n requestParams();\n return;\n }\n void runTreeAction({ action, context, workbench, onCommandError }).catch(() => undefined);\n },\n });\n }\n\n return items;\n};\n\nexport const createTreeContextMenuItems = (input: CreateTreeContextMenuItemsInput) => {\n const actionItems = createTreeActionMenuItems(input);\n const { regularItems, kernelItems } = input.menuPath\n ? createTreeMenuItemGroups({ ...input, menuPath: input.menuPath })\n : { regularItems: [], kernelItems: [] };\n const visibleRegularItems = [...actionItems, ...regularItems];\n\n return [...visibleRegularItems, ...withLeadingSeparator(kernelItems, visibleRegularItems.length > 0)];\n};\n\nexport const createTreeActionItems = (input: CreateTreeActionItemsInput) => {\n const { actions = [], context, onCommandError, onRequestParams, workbench } = input;\n const contextValues = commandContextValues(workbench, context);\n const shortcuts = new Map(workbench.keybindings.listCommandKeybindings().map((k) => [k.commandId, k.keybinding]));\n const items: TreeListAction[] = [];\n\n for (const action of actions) {\n if (!isTreeActionVisible(workbench, action, contextValues) || !isTreeActionEnabled(workbench, action)) continue;\n\n const record = resolveTreeActionCommand(workbench, action);\n const label = action.label ?? record?.command.label;\n if (!label) continue;\n\n const icon = action.icon ?? record?.command.icon;\n const binding = action.commandId ? shortcuts.get(action.commandId) : undefined;\n const requestParams =\n hasCommandParameters(action.params) && onRequestParams\n ? () =>\n onRequestParams({\n request: {\n record: { command: { id: action.commandId ?? action.id, label, params: action.params } },\n label,\n submitLabel: action.submitLabel,\n args: action.args,\n context,\n },\n run: (args) => runTreeAction({ action, args, context, workbench, onCommandError }),\n })\n : undefined;\n items.push({\n id: action.id,\n label,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n tooltip: binding ? (\n <HStack gap=\"2\">\n <Text>{label}</Text>\n <PaletteShortcut binding={binding} />\n </HStack>\n ) : undefined,\n onAction: () => {\n if (requestParams) {\n requestParams();\n return;\n }\n void runTreeAction({ action, context, workbench, onCommandError }).catch(() => undefined);\n },\n });\n }\n\n return items;\n};\n","import { Icon } from \"@chakra-ui/react\";\nimport type { ResourceContextAction, TreeListActionMenuItem } from \"@pstdio/ui\";\nimport type { ResourceRef, WorkbenchCoreContributionContext } from \"../../core\";\nimport { resourceContextMenuPath } from \"../../core\";\nimport { createTreeContextMenuItems } from \"../renderers/tree/tree-actions\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\nconst toResourceContextAction = (item: TreeListActionMenuItem): ResourceContextAction => ({\n key: item.id,\n label: item.label,\n commandId: item.commandId,\n icon: typeof item.icon === \"function\" ? <Icon as={item.icon} boxSize=\"16px\" /> : item.icon,\n endContent: item.endContent,\n isDisabled: item.disabled,\n separatorBefore: item.separatorBefore,\n onClick: () => item.onAction?.(),\n});\nexport const createWorkbenchResourceActions = (workbench: WorkbenchCoreContributionContext, resource: ResourceRef) =>\n createTreeContextMenuItems({\n menuPath: resourceContextMenuPath(resource.type),\n workbench,\n context: { resource },\n onRequestParams: ({ request }) => workbench.commandPalette.requestParams(request),\n }).map(toResourceContextAction);\nexport const useWorkbenchResourceActionResolver = (workbench: WorkbenchCoreContributionContext) => {\n useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n useWorkbenchStore(workbench.context.store, (state) => state.values);\n useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n return (resource: ResourceRef) => createWorkbenchResourceActions(workbench, resource);\n};\n","import type { ToastStatusChangeDetails } from \"@chakra-ui/react\";\nimport { toaster } from \"@pstdio/ui\";\nimport { useEffect, useRef } from \"react\";\nimport type { RegisteredWorkbenchNotification, WorkbenchCore, WorkbenchNotificationAction } from \"../../core\";\n\n// Bridges `workbench.notifications` into the shared `@pstdio/ui` toaster singleton.\n// The Workbench shell renders the viewport once alongside the rest of its chrome.\ninterface WorkbenchNotificationHostProps {\n workbench: WorkbenchCore;\n}\n\nconst executeNotificationAction = (input: { action: WorkbenchNotificationAction; workbench: WorkbenchCore }) => {\n const { action, workbench } = input;\n void workbench.commands.executeCommand(action.commandId, action.args).catch(() => undefined);\n};\n\nexport const WorkbenchNotificationHost = (props: WorkbenchNotificationHostProps) => {\n const { workbench } = props;\n const shownNotificationIds = useRef(new Set<string>());\n\n useEffect(() => {\n const showNotification = (notification: RegisteredWorkbenchNotification) => {\n const action = notification.actions?.[0];\n const toastAction = action\n ? {\n label: action.title,\n onClick: () => executeNotificationAction({ action, workbench }),\n }\n : undefined;\n const toastOptions = {\n id: notification.id,\n type: notification.level,\n title: notification.title,\n description: notification.message,\n action: toastAction,\n closable: true,\n onStatusChange: (details: ToastStatusChangeDetails) => {\n if (details.status === \"unmounted\") workbench.notifications.dismiss(notification.id);\n },\n };\n\n if (shownNotificationIds.current.has(notification.id)) {\n toaster.update(notification.id, toastOptions);\n return;\n }\n\n shownNotificationIds.current.add(notification.id);\n toaster.create(toastOptions);\n };\n\n for (const notification of workbench.notifications.listNotifications()) showNotification(notification);\n\n const subscription = workbench.notifications.subscribe((event) => {\n if (event.type === \"show\") {\n showNotification(event.notification);\n return;\n }\n\n shownNotificationIds.current.delete(event.id);\n toaster.dismiss(event.id);\n });\n\n return () => {\n subscription.dispose();\n for (const id of shownNotificationIds.current) toaster.dismiss(id);\n shownNotificationIds.current.clear();\n };\n }, [workbench]);\n\n return null;\n};\n","import type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"./use-workbench-store\";\n\nexport const useWorkbenchLocationResource = (workbench: WorkbenchCore) =>\n useWorkbenchStore(workbench.pages.store, (state) => state.location?.resource);\n\nexport const useWorkbenchActiveModeId = (workbench: WorkbenchCore) =>\n useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n","import { Box, Center } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport type {\n RegisteredPlaceholderContribution,\n RegisteredWidgetContribution,\n RegisteredWorkbenchView,\n WorkbenchCore,\n WorkbenchPanelContribution,\n WorkbenchRegion,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport { getWorkbenchRenderers } from \"../../core\";\nimport { toPanelContribution, toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface WorkbenchWidgetHostProps {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n widget?: RegisteredWidgetContribution | RegisteredPlaceholderContribution;\n region?: WorkbenchRegion;\n}\n\nconst WorkbenchWidgetFallback = (props: { label: string }) => {\n const { label } = props;\n\n return (\n <Center h=\"full\" w=\"full\" color=\"fg.muted\" p=\"md\" aria-label={label}>\n <WorkbenchIcon name=\"circle-alert\" size={20} />\n </Center>\n );\n};\n\nconst WorkbenchRenderedWidgetFrame = (props: { children: ReactNode }) => {\n const { children } = props;\n\n return (\n <Box flex=\"1\" minW=\"0\" minH=\"0\" w=\"full\" h=\"full\" overflow=\"hidden\">\n {children}\n </Box>\n );\n};\n\nconst noopRefresh = () => undefined;\n\nconst toHostedPanel = (input: {\n placement: WorkbenchWidgetPlacement;\n region?: WorkbenchRegion;\n view?: RegisteredWorkbenchView;\n widget?: RegisteredWidgetContribution | RegisteredPlaceholderContribution;\n}) => {\n if (input.view) {\n return {\n id: input.placement.contributionId,\n title: input.placement.title ?? input.view.title,\n icon: input.view.icon,\n region: input.region ?? input.widget?.region ?? \"main\",\n rendererId: input.view.id,\n } satisfies WorkbenchPanelContribution;\n }\n if (input.widget) {\n if (\"singleton\" in input.widget) return toPanelContribution(input.widget as RegisteredWidgetContribution);\n return input.widget;\n }\n return undefined;\n};\n\nexport const WorkbenchWidgetHost = (props: WorkbenchWidgetHostProps) => {\n const { workbench, placement } = props;\n const widget = props.widget ?? workbench.layout.getWidget(placement.contributionId);\n const view = placement.viewId ? workbench.views.getView(placement.viewId) : undefined;\n const rendererId = view?.id ?? widget?.rendererId ?? \"\";\n const refresh = noopRefresh;\n const rendererFromStore = useWorkbenchStore(\n getWorkbenchRenderers(workbench).store,\n (state) => state.renderers[rendererId],\n );\n const renderer = rendererFromStore ?? getWorkbenchRenderers(workbench).getRenderer(rendererId);\n useWorkbenchStore(getWorkbenchRenderers(workbench).store, (state) => state.refreshKeys[rendererId] ?? 0);\n\n if (!widget && !view) {\n return <WorkbenchWidgetFallback label=\"Widget contribution is no longer registered.\" />;\n }\n const panel = toHostedPanel({ placement, region: props.region, view, widget });\n if (!panel) return <WorkbenchWidgetFallback label=\"View contribution is no longer registered.\" />;\n const instance = toPanelInstance(placement);\n\n return (\n // `flex: 1 0 auto` lets the host fill its region when the widget is short and\n // grow past it when the widget is tall, so the region's ScrollArea can scroll.\n <Box display=\"flex\" flex=\"1 0 auto\" minW=\"0\" minH=\"0\" w=\"full\" overflow=\"hidden\">\n {renderer ? (\n <WorkbenchRenderedWidgetFrame>\n {renderer.render({ workbench, panel, instance, refresh }) as ReactNode}\n </WorkbenchRenderedWidgetFrame>\n ) : (\n <WorkbenchWidgetFallback label={`No renderer registered for ${rendererId}.`} />\n )}\n </Box>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { WorkbenchCore, WorkbenchRegion } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { WorkbenchWidgetHost } from \"./widget-host\";\n\nexport const useModeChrome = (workbench: WorkbenchCore, region: WorkbenchRegion) =>\n useWorkbenchStore(workbench.modes.store, (state) => {\n const mode = state.activeModeId ? state.modes[state.activeModeId] : undefined;\n if (region !== \"nav\" && region !== \"sidenav\" && region !== \"activity\" && region !== \"status\") return undefined;\n return mode?.chrome?.[region];\n });\n\nexport const ModeChromeView = (props: { workbench: WorkbenchCore; viewId: string; region: WorkbenchRegion }) => {\n const { workbench, viewId, region } = props;\n return (\n <Box h=\"full\" w=\"full\" minH=\"0\" position=\"relative\">\n <Box position=\"absolute\" inset=\"0\" display=\"flex\">\n <WorkbenchWidgetHost\n key={viewId}\n workbench={workbench}\n region={region}\n placement={{ widgetId: viewId, contributionId: viewId, viewId, closable: false }}\n />\n </Box>\n </Box>\n );\n};\n","import { Box, Flex } from \"@chakra-ui/react\";\nimport { ScrollArea } from \"@pstdio/ui\";\nimport type {\n RegisteredPlaceholderContribution,\n WorkbenchCore,\n WorkbenchPanelMenuRegion,\n WorkbenchRegion as WorkbenchRegionId,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n getWorkbenchPanelForMenuRegion,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchModeEligibility,\n matchesWorkbenchPanelMenuOwner,\n workbenchPanelMenuRegions,\n} from \"../../core\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { getWorkbenchRegionBackground } from \"../theme/workbench-theme-background\";\nimport { ModeChromeView, useModeChrome } from \"./mode-chrome\";\nimport { WorkbenchWidgetHost } from \"./widget-host\";\n\ninterface WorkbenchRegionProps {\n workbench: WorkbenchCore;\n region: WorkbenchRegionId;\n title?: string;\n pointerEvents?: \"auto\" | \"none\";\n transparent?: boolean;\n}\n\n// Header bars and the status bar lay their content out in a row, so they\n// scroll on the X axis; every other region scrolls vertically.\nconst horizontalScrollRegions = new Set<WorkbenchRegionId>([\n \"nav\",\n \"main-header\",\n \"secondary-header\",\n \"side-header\",\n \"status\",\n]);\n\nconst panelMenuRegionIds = new Set<WorkbenchRegionId>(\n Object.values(workbenchPanelMenuRegions).flatMap((regions) => Object.values(regions)),\n);\nconst sidePanelRegionIds = new Set<WorkbenchRegionId>([\"side\", \"side-header\", \"side-left-menu\", \"side-right-menu\"]);\n\n// A flex column at least as tall as the viewport lets a widget fill the region\n// (e.g. a tree with a pinned footer) while still growing and scrolling.\nconst verticalContentProps = { display: \"flex\", flexDirection: \"column\", minH: \"100%\", position: \"relative\" } as const;\n\n// Horizontal header regions need a definite content height so full-height\n// controls can stretch through the ScrollArea's content wrapper.\nconst horizontalContentProps = {\n display: \"flex\",\n alignItems: \"stretch\",\n h: \"full\",\n minH: \"100%\",\n position: \"relative\",\n} as const;\n\nconst getActivePlacement = (widgets: WorkbenchWidgetPlacement[], activeWidgetId?: string) =>\n widgets.find((placement) => placement.widgetId === activeWidgetId) ?? widgets[0];\n\nexport const resolveRenderedRegionPlacements = (\n widgets: WorkbenchWidgetPlacement[],\n activeWidgetId?: string,\n region?: WorkbenchRegionId,\n): WorkbenchWidgetPlacement[] => {\n if (region === \"sidenav\") return widgets;\n const activePlacement = getActivePlacement(widgets, activeWidgetId);\n if (!activePlacement) return [];\n return widgets.filter(\n (placement) => placement.widgetId === activePlacement.widgetId || placement.mountStrategy === \"keep-mounted\",\n );\n};\n\nexport const resolveRegionPlacementRenderState = (\n placement: WorkbenchWidgetPlacement,\n activeWidgetId: string | undefined,\n region?: WorkbenchRegionId,\n) => {\n const active = placement.widgetId === activeWidgetId;\n const additive = region === \"sidenav\";\n return {\n active,\n display: \"flex\",\n pointerEvents: active || additive ? \"auto\" : \"none\",\n position: active || additive ? \"relative\" : \"absolute\",\n visibility: active || additive ? \"visible\" : \"hidden\",\n } as const;\n};\n\nconst createPlaceholderPlacement = (placeholder: RegisteredPlaceholderContribution): WorkbenchWidgetPlacement => ({\n widgetId: placeholder.id,\n contributionId: placeholder.id,\n title: placeholder.title,\n closable: false,\n});\n\ninterface WorkbenchRegionPlacementProps {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n activeWidgetId?: string;\n globalActiveWidgetId?: string;\n region: WorkbenchRegionId;\n}\n\nconst WorkbenchRegionPlacement = (props: WorkbenchRegionPlacementProps) => {\n const { workbench, placement, activeWidgetId, globalActiveWidgetId, region } = props;\n const renderState = resolveRegionPlacementRenderState(placement, activeWidgetId, region);\n const additive = region === \"sidenav\";\n const overlaysActivePlacement = !renderState.active && !additive;\n let flex: string | undefined;\n if (additive) flex = \"1 1 0\";\n else if (renderState.active) flex = \"1 0 auto\";\n\n const activatePlacement = () => {\n if (placement.widgetId !== globalActiveWidgetId) workbench.layout.activatePanel(placement.widgetId);\n };\n\n return (\n <Box\n display={renderState.display}\n flex={flex}\n h={overlaysActivePlacement ? \"full\" : undefined}\n inset={overlaysActivePlacement ? \"0\" : undefined}\n minH=\"0\"\n minW=\"0\"\n onPointerDown={additive ? activatePlacement : undefined}\n onFocusCapture={additive ? activatePlacement : undefined}\n overflow=\"hidden\"\n pointerEvents={renderState.pointerEvents}\n position={renderState.position}\n visibility={renderState.visibility}\n w=\"full\"\n >\n <WorkbenchWidgetHost workbench={workbench} placement={placement} />\n </Box>\n );\n};\n\nexport const WorkbenchRegion = (props: WorkbenchRegionProps) => {\n const { workbench, region, title, pointerEvents = \"auto\", transparent = false } = props;\n const chrome = useModeChrome(workbench, region);\n const locationResource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const layout = useWorkbenchStore(workbench.layout.store, (state) => state.layout);\n const currentRegionState = layout.regions[region];\n const registeredWidgets = useWorkbenchStore(workbench.layout.store, (state) => state.widgets);\n const activeSubPanel = panelMenuRegionIds.has(region)\n ? getActiveWorkbenchSubPanel(\n layout,\n getWorkbenchPanelForMenuRegion(region as WorkbenchPanelMenuRegion),\n locationResource,\n { ignoreOwnerResourceKey: sidePanelRegionIds.has(region) },\n )\n : undefined;\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layout);\n const regionState = {\n ...currentRegionState,\n widgets: currentRegionState.widgets.filter((placement) => {\n const contribution = registeredWidgets[placement.contributionId];\n return contribution\n ? (sidePanelRegionIds.has(region)\n ? matchesWorkbenchModeEligibility(contribution, modeId)\n : isWorkbenchPanelPlacementVisible(contribution, locationResource, modeId, placement, {\n location: activeLocationPanel,\n })) &&\n matchesWorkbenchPanelMenuOwner(contribution, {\n locationPanel: activeLocationPanel,\n subPanel: activeSubPanel,\n })\n : false;\n }),\n };\n const globalActiveWidgetId = useWorkbenchStore(workbench.layout.store, (state) => state.layout.activeWidgetId);\n const activePlacement = getActivePlacement(regionState.widgets, regionState.activeWidgetId);\n const placeholder = activePlacement ? undefined : workbench.layout.getPlaceholder(region);\n const placement = activePlacement ?? (placeholder ? createPlaceholderPlacement(placeholder) : undefined);\n const renderedPlacements = activePlacement\n ? resolveRenderedRegionPlacements(regionState.widgets, activePlacement.widgetId, region)\n : [];\n\n if (chrome === false) return null;\n if (chrome) return <ModeChromeView workbench={workbench} region={region} viewId={chrome} />;\n if (!placement) return null;\n\n const scrollsHorizontally = horizontalScrollRegions.has(region);\n\n // Interacting with a region makes its active widget the globally-active one (so clicking\n // into the Side Panel session sets it global-active) without touching the primary anchor,\n // which only follows `main`. Placeholders are not real widgets, so only activate a real\n // placement that is not already active.\n const activatePlacement = (target: WorkbenchWidgetPlacement | undefined) => {\n if (target && target.widgetId !== globalActiveWidgetId) {\n workbench.layout.activatePanel(target.widgetId);\n }\n };\n const additive = region === \"sidenav\";\n\n return (\n <Flex\n as=\"section\"\n direction=\"column\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n bg={transparent ? \"transparent\" : getWorkbenchRegionBackground(region)}\n overflow=\"hidden\"\n pointerEvents={pointerEvents}\n aria-label={title ?? region}\n onPointerDown={additive ? undefined : () => activatePlacement(activePlacement)}\n onFocusCapture={additive ? undefined : () => activatePlacement(activePlacement)}\n >\n {/* The region owns scrolling: overflowing widget content scrolls here\n with the same narrow overlay scrollbar used across the workbench. */}\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n size=\"xs\"\n showVerticalScrollbar={!scrollsHorizontally}\n showHorizontalScrollbar={scrollsHorizontally}\n // Horizontal bars hold a single row that should stay vertically\n // centered; the ScrollArea otherwise top-aligns its flowing content.\n viewportProps={scrollsHorizontally ? { justifyContent: \"center\" } : undefined}\n // Vertical regions host a flex column so a widget can fill the region\n // (e.g. a tree with a pinned footer) yet still grow and scroll.\n contentProps={scrollsHorizontally ? horizontalContentProps : verticalContentProps}\n >\n {placeholder ? (\n <WorkbenchWidgetHost workbench={workbench} placement={placement} widget={placeholder} />\n ) : (\n renderedPlacements.map((renderedPlacement) => (\n <WorkbenchRegionPlacement\n key={renderedPlacement.widgetId}\n workbench={workbench}\n placement={renderedPlacement}\n activeWidgetId={activePlacement?.widgetId}\n globalActiveWidgetId={globalActiveWidgetId}\n region={region}\n />\n ))\n )}\n </ScrollArea>\n </Flex>\n );\n};\n","import { IconButton, Menu, Portal } from \"@chakra-ui/react\";\nimport { ListRow, PANEL_HEADER_CONTROL_SIZE, Tooltip } from \"@pstdio/ui\";\nimport { useRef } from \"react\";\nimport type { ResourceRef, WorkbenchCompositionAddablePanel, WorkbenchCore, WorkbenchPanelRegion } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { openPanelWidget } from \"./panel-widget-open\";\n\ninterface WorkbenchPanelAddMenuProps {\n workbench: WorkbenchCore;\n region: WorkbenchPanelRegion;\n resource?: ResourceRef;\n panels: readonly WorkbenchCompositionAddablePanel[];\n}\n\nexport const WorkbenchPanelAddMenu = (props: WorkbenchPanelAddMenuProps) => {\n const { panels, region, resource, workbench } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const label = \"Add panel\";\n if (panels.length === 0) return null;\n\n const openPanel = (panel: WorkbenchCompositionAddablePanel) =>\n openPanelWidget({\n workbench,\n widget: panel.contribution,\n region,\n resource,\n pinned: panel.pinned,\n open: panel.open,\n });\n\n const trigger = (\n <IconButton\n ref={panels.length > 1 ? triggerRef : undefined}\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={label}\n flexShrink={0}\n onClick={panels.length === 1 ? () => openPanel(panels[0]) : undefined}\n >\n <WorkbenchIcon name=\"plus\" size={13} />\n </IconButton>\n );\n\n if (panels.length === 1) return <Tooltip content={label}>{trigger}</Tooltip>;\n\n return (\n <Menu.Root positioning={{ placement: \"bottom-start\", getAnchorElement: () => triggerRef.current }}>\n <Tooltip content={label}>\n <Menu.Trigger asChild>{trigger}</Menu.Trigger>\n </Tooltip>\n <Portal>\n <Menu.Positioner>\n <Menu.Content aria-label={label} minW=\"17.5rem\" bg=\"bg\">\n {panels.map((panel) => (\n <Menu.Item key={panel.contribution.id} value={`widget:${panel.contribution.id}`} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label={panel.contribution.title}\n icon={\n panel.contribution.icon ? <WorkbenchIcon name={panel.contribution.icon} size={14} /> : undefined\n }\n onActivate={() => openPanel(panel)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import type { WorkbenchRegion, WorkbenchWidgetPlacement } from \"../../core\";\n\nexport const toTabKey = (regionId: string, placement: WorkbenchWidgetPlacement) =>\n `${regionId}:${placement.contributionId}`;\n\n// Sidenav placements compose as vertical navigation sections. They never become tabs.\nexport const suppressesSidenavTabStrip = (region: WorkbenchRegion, _placements: WorkbenchWidgetPlacement[]) =>\n region === \"sidenav\";\n\n// A Sub Panel tab presents its widget; the resource on its placement only binds\n// it to a Location. Location and content tabs present the resource they show.\nexport const resolveTabIconName = (\n placement: WorkbenchWidgetPlacement,\n widget: { icon?: string } | undefined,\n resourceKindIcon: string | undefined,\n) => {\n const resourceIcon = placement.resource?.icon ?? resourceKindIcon;\n if (placement.role === \"sub-panel\") return widget?.icon ?? resourceIcon;\n return resourceIcon ?? widget?.icon;\n};\n\nexport const resolveDisplayedActiveWidgetId = (\n visiblePlacements: WorkbenchWidgetPlacement[],\n activeWidgetId: string | undefined,\n): string | undefined => {\n if (!activeWidgetId) return visiblePlacements[0]?.widgetId;\n const hasActive = visiblePlacements.some((placement) => placement.widgetId === activeWidgetId);\n if (hasActive) return activeWidgetId;\n return visiblePlacements[0]?.widgetId;\n};\n","import { filterVisibleTabs, useTabVisibilityStore } from \"@pstdio/ui\";\nimport {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchPanelMenuOwner,\n type WorkbenchCore,\n type WorkbenchPanelRegion,\n type WorkbenchRegion,\n type WorkbenchWidgetPlacement,\n workbenchPanelMenuRegions,\n workbenchPanelRegions,\n workbenchRegionTabLeadingMenuPath,\n} from \"../../core\";\nimport { listWorkbenchMenuItemsFromState } from \"../menus/menu-items\";\nimport { useWorkbenchCompositionPanels } from \"../shared/use-workbench-composition-panels\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { suppressesSidenavTabStrip, toTabKey } from \"./region-tabs-visibility\";\n\nconst isWorkbenchPanelRegion = (region: WorkbenchRegion): region is WorkbenchPanelRegion =>\n workbenchPanelRegions.some((panelRegion) => panelRegion === region);\n\nexport const shouldShowRegionTabs = (\n placements: WorkbenchWidgetPlacement[],\n options: { alwaysShowTabs?: boolean } = {},\n) => placements.length > 1 || (placements.length === 1 && (options.alwaysShowTabs ?? placements[0]?.closable) === true);\n\ninterface WorkbenchPanelHeaderVisibility {\n hasTabs?: boolean;\n hasPanelMenus?: boolean;\n hasHeaderActions?: boolean;\n}\n\nexport const shouldShowPanelHeader = (input: WorkbenchPanelHeaderVisibility) =>\n input.hasTabs === true || input.hasPanelMenus === true || input.hasHeaderActions === true;\n\nexport const isPlacementEligibleForRegion = (\n workbench: WorkbenchCore,\n region: WorkbenchRegion,\n placement: WorkbenchWidgetPlacement,\n resource = workbench.getPrimaryResource(),\n modeId = workbench.modes.getActiveModeId(),\n) => {\n const widget = workbench.layout.getWidget(placement.contributionId);\n return widget\n ? isWorkbenchPanelPlacementVisible(widget, resource, modeId, placement, {\n ignoreResourceLocation: region === \"side\",\n location: getActiveWorkbenchLocationPanel(workbench.layout.getLayout()),\n })\n : false;\n};\n\nexport const useWorkbenchRegionTabsState = (\n workbench: WorkbenchCore,\n region: WorkbenchRegion,\n visibilityStorageKey?: string,\n) => {\n const commands = useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n const contextValues = useWorkbenchStore(workbench.context.store, (state) => state.values);\n const itemsByPath = useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n const layoutState = useWorkbenchStore(workbench.layout.store, (state) => state);\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const compositionPanels = useWorkbenchCompositionPanels(workbench);\n const tabStore = useTabVisibilityStore(visibilityStorageKey ?? region, (state) => state);\n const regionState = layoutState.layout.regions[region];\n const subPanelPlacements = regionState.widgets.filter(\n (placement) =>\n placement.role === \"sub-panel\" && isPlacementEligibleForRegion(workbench, region, placement, resource, modeId),\n );\n const visibleSubPanels = filterVisibleTabs(subPanelPlacements, tabStore.tabOverrides, (placement) =>\n toTabKey(region, placement),\n );\n const visibleSubPanelIds = new Set(visibleSubPanels.map((placement) => placement.widgetId));\n const visiblePlacements = regionState.widgets.filter(\n (placement) => visibleSubPanelIds.has(placement.widgetId) || (region === \"main\" && placement.role === \"location\"),\n );\n const leadingItems = listWorkbenchMenuItemsFromState(\n { itemsByPath, commands, contextValues },\n workbenchRegionTabLeadingMenuPath(region),\n );\n const panelRegion = isWorkbenchPanelRegion(region) ? region : undefined;\n const eligibleSubPanels = panelRegion ? compositionPanels[panelRegion].addable : [];\n const showTabs =\n !suppressesSidenavTabStrip(region, visiblePlacements) &&\n shouldShowRegionTabs(visiblePlacements, {\n alwaysShowTabs: workbench.layout.getRegionSettings(region)?.alwaysShowTabs,\n });\n const hasActions = leadingItems.length > 0 || eligibleSubPanels.length > 0;\n\n return {\n commands,\n regionState,\n resource,\n tabStore: { tabOverrides: tabStore.tabOverrides, toggleTab: tabStore.toggleTab, reset: tabStore.reset },\n subPanelPlacements,\n visiblePlacements,\n leadingItems,\n panelRegion,\n eligibleSubPanels,\n showTabs,\n hasActions,\n };\n};\n\nexport const useWorkbenchPanelHeaderVisible = (workbench: WorkbenchCore, region: WorkbenchPanelRegion) => {\n const layoutState = useWorkbenchStore(workbench.layout.store, (state) => state);\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const { showTabs, hasActions } = useWorkbenchRegionTabsState(workbench, region);\n const activeSubPanel = getActiveWorkbenchSubPanel(layoutState.layout, region, resource, {\n ignoreOwnerResourceKey: region === \"side\",\n });\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layoutState.layout);\n const menuRegions = workbenchPanelMenuRegions[region];\n const hasPanelMenus = [menuRegions.left, menuRegions.right].some(\n (menuRegion) =>\n layoutState.layout.regions[menuRegion].widgets.some(\n (placement) =>\n isPlacementEligibleForRegion(workbench, region, placement, resource, modeId) &&\n matchesWorkbenchPanelMenuOwner(layoutState.widgets[placement.contributionId], {\n locationPanel: activeLocationPanel,\n subPanel: activeSubPanel,\n }),\n ) || Boolean(workbench.layout.getPlaceholder(menuRegion)),\n );\n\n return shouldShowPanelHeader({ hasTabs: showTabs, hasHeaderActions: hasActions, hasPanelMenus });\n};\n\nexport const useWorkbenchRegionTabsVisible = (workbench: WorkbenchCore, region: WorkbenchRegion) => {\n const { showTabs, hasActions } = useWorkbenchRegionTabsState(workbench, region);\n return showTabs || hasActions;\n};\n","import { Box, CloseButton, Menu, Portal, Tabs, Text } from \"@chakra-ui/react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { ListRow } from \"@pstdio/ui\";\nimport { type KeyboardEvent, type MouseEvent as ReactMouseEvent, type ReactNode, useEffect, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchTabMenuGroup, WorkbenchTabSnapshot, WorkbenchWidgetPlacement } from \"../../core\";\nimport { toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { resolveTabIconName } from \"./region-tabs-visibility\";\n\ninterface WorkbenchRegionTabProps {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n activeWidgetId: string | undefined;\n disabled?: boolean;\n nextWidgetId?: string;\n previousWidgetId?: string;\n sortable?: boolean;\n}\nconst useTabSnapshot = (placement: WorkbenchWidgetPlacement): WorkbenchTabSnapshot => {\n const tab = placement.tab;\n const [snapshot, setSnapshot] = useState(() => tab?.getSnapshot(toPanelInstance(placement)) ?? {});\n useEffect(() => {\n const refresh = () => setSnapshot(tab?.getSnapshot(toPanelInstance(placement)) ?? {});\n const subscription = tab?.subscribe?.(refresh);\n refresh();\n if (!subscription) return undefined;\n return typeof subscription === \"function\" ? subscription : () => subscription.dispose();\n }, [placement, tab]);\n return snapshot;\n};\nconst useRegionTabBehavior = (input: WorkbenchRegionTabProps, tabSnapshot: WorkbenchTabSnapshot) => {\n const { disabled = false, nextWidgetId, placement, previousWidgetId, sortable = false, workbench } = input;\n const isPreview = placement.tabRetention === \"preview\";\n const hasCustomMenu = Boolean(tabSnapshot.menu?.some((group) => group.rows.length > 0));\n const hasContextMenu = isPreview;\n const sortableState = useSortable({ id: placement.widgetId, disabled: disabled || !sortable });\n const [openMenu, setOpenMenu] = useState<\"custom\" | \"context\">();\n const [anchor, setAnchor] = useState({ x: 0, y: 0, width: 0, height: 0 });\n const openTabMenu = (menu: \"custom\" | \"context\", event: ReactMouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n const rect = event.currentTarget.getBoundingClientRect();\n setAnchor({ x: rect.x, y: rect.y, width: rect.width, height: rect.height });\n setOpenMenu(menu);\n };\n const openCustomMenu = (event: ReactMouseEvent<HTMLElement>) => {\n if (hasCustomMenu && !disabled) openTabMenu(\"custom\", event);\n };\n const openContextMenu = (event: ReactMouseEvent<HTMLElement>) => {\n if (hasContextMenu && !disabled) openTabMenu(\"context\", event);\n };\n const setMenuOpen = (menu: \"custom\" | \"context\", open: boolean) => {\n setOpenMenu((current) => (open ? menu : current === menu ? undefined : current));\n };\n const reorderWithKeyboard = (event: KeyboardEvent<HTMLElement>) => {\n if (!sortable || disabled || !event.altKey) return;\n if (event.key === \"ArrowLeft\" && previousWidgetId) {\n event.preventDefault();\n workbench.layout.reorderPanel(placement.widgetId, { beforeWidgetId: previousWidgetId });\n }\n if (event.key === \"ArrowRight\" && nextWidgetId) {\n event.preventDefault();\n workbench.layout.reorderPanel(placement.widgetId, { afterWidgetId: nextWidgetId });\n }\n };\n return {\n anchor,\n hasCustomMenu,\n hasContextMenu,\n isPreview,\n openContextMenu,\n openCustomMenu,\n openMenu,\n reorderWithKeyboard,\n setMenuOpen,\n sortableState,\n tabSnapshot,\n };\n};\nconst WorkbenchRegionTabMenuSurface = (props: {\n anchor: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n children: ReactNode;\n label: string;\n open: boolean;\n setMenuOpen(open: boolean): void;\n}) => {\n const { anchor, children, label, open, setMenuOpen } = props;\n return (\n <Menu.Root\n open={open}\n onOpenChange={(details) => setMenuOpen(details.open)}\n positioning={{ placement: \"bottom-start\", getAnchorRect: () => anchor, offset: { mainAxis: 0 } }}\n >\n <Portal>\n <Menu.Positioner>\n <Menu.Content aria-label={label} minW=\"18.75rem\" bg=\"bg\">\n {children}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\nconst WorkbenchRegionTabContextMenu = (props: {\n anchor: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n label: string;\n open: boolean;\n placement: WorkbenchWidgetPlacement;\n setMenuOpen(open: boolean): void;\n workbench: WorkbenchCore;\n}) => {\n const { anchor, label, open, placement, setMenuOpen, workbench } = props;\n return (\n <WorkbenchRegionTabMenuSurface\n anchor={anchor}\n label={`${label} context menu`}\n open={open}\n setMenuOpen={setMenuOpen}\n >\n <Menu.Item value=\"keep-open\" asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n id=\"keep-open\"\n label=\"Keep Open\"\n icon={<WorkbenchIcon name=\"pin\" size={14} />}\n onActivate={() => {\n if (placement.placementIdentity) workbench.pinPlacement(placement.placementIdentity);\n else workbench.layout.updatePanel(placement.widgetId, { strategy: { kind: \"persistent\" } });\n }}\n />\n </Menu.Item>\n </WorkbenchRegionTabMenuSurface>\n );\n};\nconst WorkbenchRegionTabLabel = (props: {\n icon?: string;\n indicator?: WorkbenchTabSnapshot[\"indicator\"];\n id: string;\n label: string;\n}) => {\n const { icon, id, indicator, label } = props;\n return (\n <>\n {indicator ? (\n <WorkbenchIcon\n name={indicator.icon}\n size={12}\n flexShrink={0}\n color={indicator.color ?? \"fg.muted\"}\n aria-label={indicator.label}\n />\n ) : icon ? (\n <WorkbenchIcon name={icon} size={12} flexShrink={0} color=\"fg.muted\" />\n ) : null}\n <Text as=\"span\" id={id} minW=\"0\" truncate>\n {label}\n </Text>\n </>\n );\n};\nconst activateTabAction = (\n workbench: WorkbenchCore,\n action: NonNullable<WorkbenchTabMenuGroup[\"rows\"][number][\"action\"]>,\n) => {\n if (action.kind === \"command\") {\n void workbench.commands.executeCommand(action.commandId, action.args);\n return;\n }\n void workbench.navigation.openTarget(action.target);\n};\nconst WorkbenchStructuredTabMenu = (props: { groups: readonly WorkbenchTabMenuGroup[]; workbench: WorkbenchCore }) => {\n const { groups, workbench } = props;\n return groups.map((group, groupIndex) => (\n <Box key={group.id} display=\"contents\">\n {groupIndex > 0 ? <Menu.Separator /> : null}\n {group.rows.map((row) => (\n <Menu.Item key={row.id} value={row.id} disabled={row.disabled} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n id={row.id}\n label={row.label}\n icon={row.icon ? <WorkbenchIcon name={row.icon} size={16} /> : undefined}\n iconColor={row.iconColor}\n isSelected={row.selected}\n disabled={row.disabled}\n onActivate={row.action ? () => activateTabAction(workbench, row.action!) : undefined}\n />\n </Menu.Item>\n ))}\n </Box>\n ));\n};\nconst WorkbenchRegionTabCloseButton = (props: {\n disabled: boolean;\n isActive: boolean;\n label: string;\n placement: WorkbenchWidgetPlacement;\n workbench: WorkbenchCore;\n}) => {\n const { disabled, isActive, label, placement, workbench } = props;\n if (placement.closable !== true) return null;\n return (\n <CloseButton\n as=\"span\"\n role=\"button\"\n aria-label={`Close ${label}`}\n aria-disabled={disabled}\n size=\"2xs\"\n boxSize=\"1rem\"\n minW=\"1rem\"\n p=\"0\"\n borderRadius=\"2xs\"\n flexShrink={0}\n me=\"-1\"\n opacity={isActive ? \"1\" : \"0\"}\n pointerEvents={isActive ? \"auto\" : \"none\"}\n color=\"fg.muted\"\n _groupHover={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _groupFocusWithin={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _hover={{ bg: \"transparent\", color: \"fg\" }}\n _active={{ bg: \"transparent\" }}\n transition=\"opacity 120ms ease\"\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.stopPropagation();\n if (disabled) return;\n const identity = placement.placementIdentity;\n if (identity) {\n workbench.closePlacement(identity);\n return;\n }\n workbench.layout.closePanel(placement.widgetId);\n }}\n />\n );\n};\nconst WorkbenchRegionTabMenus = (props: {\n behavior: ReturnType<typeof useRegionTabBehavior>;\n label: string;\n placement: WorkbenchWidgetPlacement;\n workbench: WorkbenchCore;\n}) => {\n const { behavior, label, placement, workbench } = props;\n return (\n <>\n {behavior.hasCustomMenu ? (\n <WorkbenchRegionTabMenuSurface\n anchor={behavior.anchor}\n label={`${label} menu`}\n open={behavior.openMenu === \"custom\"}\n setMenuOpen={(open) => behavior.setMenuOpen(\"custom\", open)}\n >\n <WorkbenchStructuredTabMenu groups={behavior.tabSnapshot.menu ?? []} workbench={workbench} />\n </WorkbenchRegionTabMenuSurface>\n ) : null}\n {behavior.hasContextMenu ? (\n <WorkbenchRegionTabContextMenu\n anchor={behavior.anchor}\n label={label}\n open={behavior.openMenu === \"context\"}\n placement={placement}\n setMenuOpen={(open) => behavior.setMenuOpen(\"context\", open)}\n workbench={workbench}\n />\n ) : null}\n </>\n );\n};\nexport const WorkbenchRegionTab = (props: WorkbenchRegionTabProps) => {\n const { activeWidgetId, disabled = false, placement, sortable = false, workbench } = props;\n const isActive = placement.widgetId === activeWidgetId;\n const tabSnapshot = useTabSnapshot(placement);\n const label = tabSnapshot.label ?? placement.resource?.label ?? placement.title ?? placement.contributionId;\n const labelId = `workbench-tab-label-${placement.widgetId}`;\n const widget = workbench.layout.getWidget(placement.contributionId);\n const icon = resolveTabIconName(\n placement,\n widget,\n placement.resource ? workbench.resources.getKind(placement.resource.type)?.icon : undefined,\n );\n const behavior = useRegionTabBehavior(props, tabSnapshot);\n const { isDragging, listeners, setNodeRef, transform, transition } = behavior.sortableState;\n const menuOpen =\n (behavior.openMenu === \"custom\" && behavior.hasCustomMenu) ||\n (behavior.openMenu === \"context\" && behavior.hasContextMenu);\n return (\n <>\n <Tabs.Trigger\n ref={setNodeRef}\n value={placement.widgetId}\n maxW=\"12rem\"\n minW=\"0\"\n flexShrink={0}\n title={label}\n // Name the tab from its label element alone. Computing the name from the tab's\n // contents would fold in the nested Close button, so a closable tab would be\n // called \"Artifacts Close Artifacts\" and rename itself the moment it became\n // closable. The label element still carries any status or count a tab renders.\n aria-labelledby={labelId}\n disabled={disabled}\n className=\"group\"\n aria-haspopup={behavior.hasCustomMenu || behavior.hasContextMenu ? \"menu\" : undefined}\n aria-expanded={behavior.hasCustomMenu || behavior.hasContextMenu ? menuOpen : undefined}\n aria-keyshortcuts={sortable ? \"Alt+ArrowLeft Alt+ArrowRight\" : undefined}\n fontStyle={behavior.isPreview ? \"italic\" : undefined}\n opacity={isDragging ? \"0.5\" : undefined}\n transform={CSS.Transform.toString(transform)}\n transition={transition}\n {...listeners}\n onKeyDown={behavior.reorderWithKeyboard}\n onContextMenu={behavior.hasContextMenu ? behavior.openContextMenu : undefined}\n onClick={behavior.hasCustomMenu && isActive && !disabled ? behavior.openCustomMenu : undefined}\n >\n <WorkbenchRegionTabLabel\n icon={tabSnapshot.icon ?? icon}\n id={labelId}\n indicator={tabSnapshot.indicator}\n label={label}\n />\n <WorkbenchRegionTabCloseButton\n disabled={disabled}\n isActive={isActive}\n label={label}\n placement={placement}\n workbench={workbench}\n />\n </Tabs.Trigger>\n <WorkbenchRegionTabMenus behavior={behavior} label={label} placement={placement} workbench={workbench} />\n </>\n );\n};\n","import { Tabs } from \"@chakra-ui/react\";\nimport { closestCenter, DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { horizontalListSortingStrategy, SortableContext } from \"@dnd-kit/sortable\";\nimport type { ReactNode } from \"react\";\nimport type {\n ResourceRef,\n WorkbenchCompositionAddablePanel,\n WorkbenchCore,\n WorkbenchPanelRegion,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport { WorkbenchPanelAddMenu } from \"./panel-add-menu\";\nimport { WorkbenchRegionTab } from \"./region-tab\";\n\ninterface SortableRegionTabListProps {\n activeWidgetId?: string;\n disabled: boolean;\n leadingActions: ReactNode;\n panelRegion?: WorkbenchPanelRegion;\n placements: WorkbenchWidgetPlacement[];\n resource?: ResourceRef;\n eligibleSubPanels: readonly WorkbenchCompositionAddablePanel[];\n workbench: WorkbenchCore;\n}\n\nexport const SortableRegionTabList = (props: SortableRegionTabListProps) => {\n const { activeWidgetId, disabled, eligibleSubPanels, leadingActions, panelRegion, placements, resource, workbench } =\n props;\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n const reorderable = placements.filter(\n (placement) => placement.role === \"sub-panel\" && placement.tabRetention !== \"preview\",\n );\n const reorderWidget = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const activeIndex = placements.findIndex((placement) => placement.widgetId === active.id);\n const overIndex = placements.findIndex((placement) => placement.widgetId === over.id);\n const source = placements[activeIndex];\n const target = placements[overIndex];\n if (\n source?.role !== \"sub-panel\" ||\n source.tabRetention === \"preview\" ||\n target?.role !== \"sub-panel\" ||\n target.tabRetention === \"preview\"\n ) {\n return;\n }\n workbench.layout.reorderPanel(\n String(active.id),\n activeIndex < overIndex ? { afterWidgetId: target.widgetId } : { beforeWidgetId: target.widgetId },\n );\n };\n\n return (\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={reorderWidget}>\n <SortableContext\n items={placements.map((placement) => placement.widgetId)}\n strategy={horizontalListSortingStrategy}\n >\n <Tabs.List h=\"full\" minH=\"0\" minW=\"max-content\" alignItems=\"center\" gap=\"2xs\" justifyContent=\"flex-start\">\n {placements.map((placement) => {\n const reorderableIndex = reorderable.findIndex((candidate) => candidate.widgetId === placement.widgetId);\n return (\n <WorkbenchRegionTab\n key={placement.widgetId}\n workbench={workbench}\n placement={placement}\n activeWidgetId={activeWidgetId}\n disabled={disabled}\n sortable={reorderableIndex >= 0}\n previousWidgetId={reorderable[reorderableIndex - 1]?.widgetId}\n nextWidgetId={reorderable[reorderableIndex + 1]?.widgetId}\n />\n );\n })}\n {panelRegion ? (\n <WorkbenchPanelAddMenu\n workbench={workbench}\n region={panelRegion}\n resource={resource}\n panels={eligibleSubPanels}\n />\n ) : null}\n {leadingActions}\n </Tabs.List>\n </SortableContext>\n </DndContext>\n );\n};\n","import { HStack, IconButton, Menu, Portal, Tabs } from \"@chakra-ui/react\";\nimport {\n buildTabVisibilityMenuActions,\n ListRow,\n PANEL_HEADER_CONTROL_SIZE,\n PANEL_HEADER_TAB_SIZE,\n ScrollArea,\n Tooltip,\n} from \"@pstdio/ui\";\nimport type { MouseEvent as ReactMouseEvent } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchRegion as WorkbenchRegionId, WorkbenchWidgetPlacement } from \"../../core\";\nimport { hasCommandParameters } from \"../command-palette/command-palette-params\";\nimport type { WorkbenchMenuItem } from \"../menus/menu-items\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { WorkbenchPanelAddMenu } from \"./panel-add-menu\";\nimport { resolveDisplayedActiveWidgetId, resolveTabIconName, toTabKey } from \"./region-tabs-visibility\";\nimport { useWorkbenchRegionTabsState } from \"./region-tabs-visibility-hooks\";\nimport { SortableRegionTabList } from \"./sortable-region-tab-list\";\n\nexport {\n shouldShowPanelHeader,\n shouldShowRegionTabs,\n useWorkbenchPanelHeaderVisible,\n useWorkbenchRegionTabsVisible,\n} from \"./region-tabs-visibility-hooks\";\n\ninterface WorkbenchRegionTabsProps {\n workbench: WorkbenchCore;\n region: WorkbenchRegionId;\n visibilityStorageKey?: string;\n}\nconst resolvePlacementIcon = (workbench: WorkbenchCore, placement: WorkbenchWidgetPlacement) => {\n const iconName = resolveTabIconName(\n placement,\n workbench.layout.getWidget(placement.contributionId),\n placement.resource ? workbench.resources.getKind(placement.resource.type)?.icon : undefined,\n );\n return iconName ? <WorkbenchIcon name={iconName} size={14} /> : undefined;\n};\nexport const WorkbenchRegionTabs = (props: WorkbenchRegionTabsProps) => {\n const { workbench, region, visibilityStorageKey } = props;\n const {\n commands,\n regionState,\n resource,\n tabStore,\n subPanelPlacements,\n visiblePlacements,\n leadingItems,\n panelRegion,\n eligibleSubPanels,\n showTabs,\n hasActions,\n } = useWorkbenchRegionTabsState(workbench, region, visibilityStorageKey);\n const tabOverrides = tabStore.tabOverrides;\n const getKey = (placement: WorkbenchWidgetPlacement) => toTabKey(region, placement);\n const [viewport, setViewport] = useState<HTMLDivElement | null>(null);\n const [menuOpen, setMenuOpen] = useState(false);\n const [anchor, setAnchor] = useState({ x: 0, y: 0, width: 0, height: 0 });\n const menuActions = buildTabVisibilityMenuActions(\n subPanelPlacements,\n tabOverrides,\n {\n onToggleTab: (key, hiddenByDefault) => tabStore.toggleTab(key, hiddenByDefault),\n onResetAll: () => tabStore.reset(),\n },\n getKey,\n {\n visibleIcon: <WorkbenchIcon name=\"eye\" size={14} />,\n hiddenIcon: <WorkbenchIcon name=\"eye-off\" size={14} />,\n resetIcon: <WorkbenchIcon name=\"rotate-ccw\" size={14} />,\n },\n (placement) => resolvePlacementIcon(workbench, placement),\n );\n const hasVisibilityMenu = menuActions.length > 0;\n const openVisibilityMenu = (event: ReactMouseEvent<HTMLElement>) => {\n if (!hasVisibilityMenu) return;\n event.preventDefault();\n const target = event.target instanceof Element ? event.target.closest('[role=\"tab\"]') : undefined;\n const rect = (target ?? event.currentTarget).getBoundingClientRect();\n setAnchor({ x: rect.x, y: rect.y, width: rect.width, height: rect.height });\n setMenuOpen(true);\n };\n // Translate vertical wheel into horizontal scrolling so the tab strip scrolls\n // with a plain mouse wheel — no modifier key required.\n useEffect(() => {\n if (!viewport) return;\n const onWheel = (event: WheelEvent) => {\n if (event.deltaY === 0 || viewport.scrollWidth <= viewport.clientWidth) return;\n viewport.scrollLeft += event.deltaY;\n event.preventDefault();\n };\n viewport.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => viewport.removeEventListener(\"wheel\", onWheel);\n }, [viewport]);\n if (!showTabs && !hasActions) return null;\n const activeWidgetId = resolveDisplayedActiveWidgetId(visiblePlacements, regionState.activeWidgetId);\n const onSelectLeadingItem = (item: WorkbenchMenuItem) => {\n const command = commands[item.commandId]?.command;\n if (command && hasCommandParameters(command.params)) {\n workbench.commandPalette.requestParams({ record: { command }, label: item.label, args: item.args });\n return;\n }\n void workbench.commands.executeCommand(item.commandId, item.args).catch(() => undefined);\n };\n const leadingActions = leadingItems.map((item) => (\n <Tooltip key={item.id} content={item.label}>\n <IconButton\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={item.label}\n disabled={item.disabled}\n flexShrink={0}\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.stopPropagation();\n onSelectLeadingItem(item);\n }}\n >\n <WorkbenchIcon name={item.icon ?? \"plus\"} size={14} />\n </IconButton>\n </Tooltip>\n ));\n if (!showTabs) {\n return (\n <HStack flex=\"1 1 auto\" h=\"full\" minW=\"0\" gap=\"2xs\">\n {panelRegion ? (\n <WorkbenchPanelAddMenu\n workbench={workbench}\n region={panelRegion}\n resource={resource}\n panels={eligibleSubPanels}\n />\n ) : null}\n {leadingActions}\n </HStack>\n );\n }\n return (\n <Tabs.Root\n value={activeWidgetId}\n onValueChange={(details) => {\n const placement = visiblePlacements.find((candidate) => candidate.widgetId === details.value);\n if (placement?.role === \"location\") {\n workbench.layout.setRegionActiveWidget(region, placement.widgetId);\n return;\n }\n workbench.layout.activatePanel(details.value);\n }}\n variant=\"subtle\"\n colorPalette=\"gray\"\n justify=\"start\"\n size={PANEL_HEADER_TAB_SIZE}\n alignSelf=\"stretch\"\n flex=\"1 1 auto\"\n maxW=\"full\"\n minW=\"0\"\n h=\"full\"\n position=\"relative\"\n zIndex=\"1\"\n onContextMenu={hasVisibilityMenu ? openVisibilityMenu : undefined}\n >\n {/* Overflowing tabs scroll horizontally; the overlay scrollbar adds no\n height so the active tab still meets the header's bottom edge. */}\n <ScrollArea\n viewportRef={setViewport}\n size=\"xs\"\n h=\"full\"\n w=\"max-content\"\n maxW=\"full\"\n minW=\"0\"\n showVerticalScrollbar={false}\n showHorizontalScrollbar\n contentProps={{ h: \"full\" }}\n >\n {/* Chakra's size=\"sm\" list sets a 36px min-height that overflows the 2rem header and\n makes the horizontal-only viewport scroll vertically; minH=\"0\" lets h=\"full\" win. */}\n <SortableRegionTabList\n disabled={false}\n workbench={workbench}\n placements={visiblePlacements}\n activeWidgetId={activeWidgetId}\n panelRegion={panelRegion}\n resource={resource}\n eligibleSubPanels={eligibleSubPanels}\n leadingActions={leadingActions}\n />\n </ScrollArea>\n {hasVisibilityMenu ? (\n <Menu.Root\n open={menuOpen}\n onOpenChange={(details) => setMenuOpen(details.open)}\n positioning={{\n placement: \"bottom-start\",\n getAnchorRect: () => anchor,\n offset: { mainAxis: 0 },\n }}\n >\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"220px\" bg=\"bg\">\n {menuActions.map((action) => (\n <Menu.Item key={action.key} value={action.key} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label={action.label}\n icon={action.icon}\n endContent={action.endContent}\n disabled={action.isDisabled}\n onActivate={action.onClick}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n ) : null}\n </Tabs.Root>\n );\n};\n","import { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { ResourceContextAction } from \"@pstdio/ui\";\nimport type { DataTableSelectionAction, RowData } from \"@pstdio/ui/data-table\";\nimport type { ReactNode } from \"react\";\nimport type {\n DataTableRendererColumn,\n DataTableRendererQueryResult,\n DataTableRendererRow,\n DataTableRendererSelectionAction,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nexport const resolveDataTableRendererColumns = (\n result: DataTableRendererQueryResult,\n contributionColumns?: DataTableRendererColumn[],\n) => {\n if (result.columns) return result.columns;\n if (contributionColumns) return contributionColumns;\n const firstRow = result.rows[0];\n return firstRow ? Object.keys(firstRow.values).map((id): DataTableRendererColumn => ({ id })) : [];\n};\nexport const buildDataTableRendererData = (rows: DataTableRendererRow[], columns: DataTableRendererColumn[]) => {\n const rowByData = new WeakMap<Record<string, unknown>, DataTableRendererRow>();\n const data = rows.map((row) => {\n const values = Object.fromEntries(columns.map((column) => [column.id, row.values[column.id]]));\n rowByData.set(values, row);\n return values;\n });\n return { data, rowByData };\n};\nexport const resolveDataTableRendererSelectionActions = (\n actions: DataTableRendererSelectionAction[],\n rowByData: WeakMap<RowData, DataTableRendererRow>,\n): DataTableSelectionAction[] =>\n actions.map((action) => ({\n label: action.label,\n icon: action.icon as ReactNode,\n destructive: action.destructive,\n onSelect: (data) => {\n const rows = data.flatMap((row) => {\n const rendererRow = rowByData.get(row);\n return rendererRow ? [rendererRow] : [];\n });\n void action.run(rows);\n },\n }));\nexport const resolveDataTableRendererResourceActions = (\n data: RowData,\n rowByData: WeakMap<RowData, DataTableRendererRow>,\n resolveResourceActions: (resource: NonNullable<DataTableRendererRow[\"resource\"]>) => ResourceContextAction[],\n) => {\n const resource = rowByData.get(data)?.resource;\n if (!resource) return [];\n return resolveResourceActions(resource)\n .filter((action) => !action.isDisabled)\n .map((action) => ({\n label: action.label,\n icon: action.icon,\n onSelect: (_context?: unknown) => void action.onClick(),\n }));\n};\nexport const resolveDataTableRendererStorageKey = (rendererId: string, placement: WorkbenchPanelInstance) => {\n const identity = resourceKey(placement.resource) ?? placement.resource?.id ?? \"unscoped\";\n return `pstdio:workbench:dataTableRenderer:${rendererId}:${placement.instanceId}:${identity}`;\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { EmptyState } from \"@pstdio/ui\";\nimport {\n DataTable,\n type DataTableColumnRenderer,\n type DataTableColumnStat,\n type DataTableRowAction,\n DataTableSkeleton,\n type RowData,\n} from \"@pstdio/ui/data-table\";\nimport { type ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n DataTableRendererQueryResult,\n RegisteredDataTableRendererContribution,\n WorkbenchCore,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nimport { getWorkbenchRenderers } from \"../../../core\";\nimport { useWorkbenchResourceActionResolver } from \"../../menus/resource-actions\";\nimport {\n buildDataTableRendererData,\n resolveDataTableRendererColumns,\n resolveDataTableRendererResourceActions,\n resolveDataTableRendererSelectionActions,\n resolveDataTableRendererStorageKey,\n} from \"./data-table-view-model\";\n\ninterface WorkbenchDataTableViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredDataTableRendererContribution;\n placement: WorkbenchPanelInstance;\n}\nconst initialResult: DataTableRendererQueryResult = { rows: [] };\n// Tabs unmount when they deactivate, so without a cache every revisit flashes a\n// loading state. The last result renders instantly while the fresh query runs.\nconst lastResults = new Map<string, DataTableRendererQueryResult>();\nconst resultCacheKey = (contributionId: string, placement: WorkbenchPanelInstance) =>\n `${contributionId} ${resourceKey(placement.resource) ?? \"\"}`;\nexport const WorkbenchDataTableView = (props: WorkbenchDataTableViewProps) => {\n const { workbench, contribution, placement } = props;\n const resolveResourceActions = useWorkbenchResourceActionResolver(workbench);\n const cacheKey = resultCacheKey(contribution.id, placement);\n const [result, setResult] = useState(() => lastResults.get(cacheKey) ?? initialResult);\n const [loading, setLoading] = useState(() => !lastResults.has(cacheKey));\n const requestRef = useRef(0);\n useEffect(() => {\n let cancelled = false;\n const runQuery = () => {\n requestRef.current += 1;\n const requestId = requestRef.current;\n Promise.resolve(\n contribution.executeQuery({ resource: placement.resource, modeId: workbench.modes.getActiveModeId() }),\n ).then((next) => {\n if (cancelled || requestRef.current !== requestId) return;\n lastResults.set(cacheKey, next);\n setResult(next);\n setLoading(false);\n });\n };\n runQuery();\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = getWorkbenchRenderers(workbench).onDidRefreshDataTableRenderer((event) => {\n if (event.dataTableRendererId === contribution.id) runQuery();\n });\n return () => {\n cancelled = true;\n if (typeof subscription === \"function\") subscription();\n else subscription?.dispose();\n refreshSubscription.dispose();\n };\n }, [cacheKey, contribution, placement.resource, workbench]);\n const columns = resolveDataTableRendererColumns(result, contribution.columns);\n const model = useMemo(() => buildDataTableRendererData(result.rows, columns), [columns, result.rows]);\n const labels = Object.fromEntries(\n columns.filter((column) => column.label).map((column) => [column.id, column.label!]),\n );\n const descriptions = Object.fromEntries(\n columns.filter((column) => column.description).map((column) => [column.id, column.description!]),\n );\n const icons = Object.fromEntries(\n columns.filter((column) => column.icon).map((column) => [column.id, column.icon as ReactNode]),\n );\n const stats = Object.fromEntries(\n columns.filter((column) => column.stat).map((column) => [column.id, column.stat as DataTableColumnStat]),\n );\n const renderers = Object.fromEntries(\n columns\n .filter((column) => column.renderer)\n .map((column) => [column.id, column.renderer as DataTableColumnRenderer]),\n );\n const rowActions: DataTableRowAction[] = (contribution.rowActions ?? []).map((action) => ({\n label: action.label,\n icon: action.icon as ReactNode,\n destructive: action.destructive,\n onSelect: (data) => {\n const row = model.rowByData.get(data);\n if (row) void action.run(row);\n },\n }));\n const selectionActions = resolveDataTableRendererSelectionActions(\n contribution.selectionActions ?? [],\n model.rowByData,\n );\n const openRow = (data: RowData) => {\n const row = model.rowByData.get(data);\n if (!row) return;\n if (contribution.onRowActivate) void Promise.resolve(contribution.onRowActivate(row)).catch(() => undefined);\n };\n if (loading) {\n // The table chrome renders instantly: declared columns become real headers\n // and only the row values shimmer until the first query resolves.\n const skeletonColumns = (contribution.columns ?? [])\n .filter((column) => !column.hidden)\n .map((column) => ({ id: column.id, label: column.label ?? column.id }));\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\">\n <DataTableSkeleton columns={skeletonColumns.length > 0 ? skeletonColumns : undefined} />\n </Stack>\n );\n }\n if (result.rows.length === 0) {\n return (\n <EmptyState h=\"full\" title={contribution.emptyTitle ?? \"No rows\"} description={contribution.emptyDescription} />\n );\n }\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\">\n <DataTable\n data={model.data}\n getRowId={(data) => model.rowByData.get(data)?.id ?? \"\"}\n toolbarStorageKey={resolveDataTableRendererStorageKey(contribution.id, placement)}\n compactHeaders={labels}\n columnDescriptions={descriptions}\n columnIcons={icons}\n hiddenColumns={columns.filter((column) => column.hidden).map((column) => column.id)}\n columnStats={stats}\n columnRenderers={renderers}\n initialPageSize={contribution.initialPageSize}\n pageSizeOptions={contribution.pageSizeOptions}\n selectionMode={contribution.selectionMode}\n selectionActions={selectionActions}\n rowActions={rowActions}\n getRowActions={(data) => resolveDataTableRendererResourceActions(data, model.rowByData, resolveResourceActions)}\n onRowClick={openRow}\n isRowInteractive={(data) => {\n const row = model.rowByData.get(data);\n return Boolean(row && contribution.onRowActivate);\n }}\n getCellContextMenuActions={(context) =>\n resolveDataTableRendererResourceActions(context.row, model.rowByData, resolveResourceActions)\n }\n fullWidth\n />\n </Stack>\n );\n};\n","import type { ParamEditorProps } from \"@pstdio/ui\";\nimport type { PreferencePropertySchema, PreferenceValue } from \"../../../core\";\n\n// `@pstdio/ui` does not export the Param union by name, so derive it from the\n// editor props — this keeps the mapper honest about what the editor accepts.\ntype Param = NonNullable<ParamEditorProps[\"params\"]>[number];\ntype ParamValue = Parameters<NonNullable<ParamEditorProps[\"onChange\"]>>[1];\n\nexport interface PreferenceParamEntry {\n name: string;\n schema: PreferencePropertySchema;\n label?: string;\n /** Current value; falls back to the schema default when omitted. */\n value?: PreferenceValue;\n}\n\n// Booleans have no dedicated param-editor control, so they render as a two-option\n// selection. Array/object schemas without an enum have no editor at all and are skipped.\nconst BOOLEAN_OPTIONS = [\n { id: \"true\", name: \"On\" },\n { id: \"false\", name: \"Off\" },\n];\n\nconst humanize = (value: string) => {\n const segment = value.split(\".\").at(-1) ?? value;\n const spaced = segment.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\").replace(/[-_]/g, \" \");\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n};\n\nconst toOptions = (values: PreferenceValue[]) =>\n values.map((value) => ({ id: String(value), name: humanize(String(value)) }));\n\nconst toParam = (entry: PreferenceParamEntry): Param | undefined => {\n const { name, schema } = entry;\n const label = entry.label ?? humanize(name);\n const description = schema.description;\n const current = entry.value ?? schema.default;\n const base = { id: name, name: label, description };\n\n if (schema.type === \"number\") {\n return { ...base, type: \"number\", defaultValue: Number(current ?? 0) };\n }\n\n if (schema.type === \"boolean\") {\n return { ...base, type: \"selection\", defaultValue: String(Boolean(current)), options: BOOLEAN_OPTIONS };\n }\n\n if (schema.type === \"string\") {\n if (schema.enum) {\n return { ...base, type: \"selection\", defaultValue: String(current ?? \"\"), options: toOptions(schema.enum) };\n }\n return { ...base, type: \"text\", defaultValue: String(current ?? \"\"), singleLine: true };\n }\n\n if (schema.type === \"array\" && schema.enum) {\n const defaultValue = Array.isArray(current) ? current.map(String) : [];\n return { ...base, type: \"selection\", multiSelect: true, defaultValue, options: toOptions(schema.enum) };\n }\n\n return undefined;\n};\n\nexport const preferenceSchemaToParams = (entries: PreferenceParamEntry[]) =>\n entries.map(toParam).filter((param): param is Param => param !== undefined);\n\nexport const paramValueToPreference = (schema: PreferencePropertySchema, value: ParamValue): PreferenceValue => {\n if (schema.type === \"boolean\") return value === \"true\";\n if (schema.type === \"number\") return Number(value);\n if (schema.type === \"array\") return Array.isArray(value) ? value.map(String) : [];\n return String(value);\n};\n","import { Button, HStack, Stack } from \"@chakra-ui/react\";\nimport { ParamEditor, type ParamEditorProps } from \"@pstdio/ui\";\nimport { useState } from \"react\";\nimport type { PreferenceRegistry, PreferenceScope } from \"../../../core\";\nimport {\n type PreferenceParamEntry,\n paramValueToPreference,\n preferenceSchemaToParams,\n} from \"./preference-schema-to-params\";\n\ntype ParamValue = Parameters<NonNullable<ParamEditorProps[\"onChange\"]>>[1];\n\nexport interface WorkbenchPreferencesFormProps {\n preferences: PreferenceRegistry;\n /** Preference names to edit; an object form overrides the displayed label. */\n names: (string | { name: string; label?: string })[];\n /** Resolves the scopeId for a preference's scope (e.g. \"project\" -> active project id). */\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n /** \"live\" persists on change (default); \"apply\" stages edits behind Save/Discard. */\n mode?: \"live\" | \"apply\";\n}\n\nconst toName = (entry: string | { name: string; label?: string }) =>\n typeof entry === \"string\" ? { name: entry } : entry;\n\n// Renders a param editor auto-generated from the registered preference schema. The\n// form is generic: it knows only about preference names + scope, never the domain.\nexport const WorkbenchPreferencesForm = (props: WorkbenchPreferencesFormProps) => {\n const { preferences, names, resolveScopeId, mode = \"live\" } = props;\n const [staged, setStaged] = useState<Record<string, ParamValue>>({});\n const [formKey, setFormKey] = useState(0);\n\n const scopeRef = (scope: PreferenceScope) => ({ scope, scopeId: resolveScopeId?.(scope) });\n\n const entries: PreferenceParamEntry[] = [];\n for (const candidate of names) {\n const { name, label } = toName(candidate);\n const schema = preferences.getSchema(name);\n if (!schema) continue;\n entries.push({ name, label, schema, value: preferences.getValue(name, scopeRef(schema.scope)) });\n }\n\n const params = preferenceSchemaToParams(entries);\n const schemaByName = new Map(entries.map((entry) => [entry.name, entry.schema]));\n\n const persist = (name: string, value: ParamValue) => {\n const schema = schemaByName.get(name);\n if (!schema) return;\n preferences.setValue(name, paramValueToPreference(schema, value), scopeRef(schema.scope));\n };\n\n const handleChange = (id: string, value: ParamValue) => {\n if (mode === \"apply\") {\n setStaged((current) => ({ ...current, [id]: value }));\n return;\n }\n persist(id, value);\n };\n\n const save = () => {\n for (const [name, value] of Object.entries(staged)) persist(name, value);\n setStaged({});\n setFormKey((key) => key + 1);\n };\n\n const discard = () => {\n setStaged({});\n setFormKey((key) => key + 1);\n };\n\n const hasStaged = Object.keys(staged).length > 0;\n\n return (\n <Stack gap=\"md\" maxW=\"640px\">\n <ParamEditor key={formKey} params={params} onChange={handleChange} fullWidth />\n {mode === \"apply\" && (\n <HStack gap=\"sm\">\n <Button size=\"sm\" onClick={save} disabled={!hasStaged}>\n Save\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={discard} disabled={!hasStaged}>\n Discard\n </Button>\n </HStack>\n )}\n </Stack>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { PageLocation, PageRef } from \"@pstdio/sdk/extensions\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { PaletteShortcut, Tooltip, type TreeListNode, type TreeListSection } from \"@pstdio/ui\";\nimport { DiffBubble } from \"@pstdio/ui/diff\";\nimport type { ReactNode } from \"react\";\nimport {\n getWorkbenchSelectionResourceKeys,\n type NavigationTarget,\n type ResourceRef,\n resourceContextMenuPath,\n type TreeNode,\n type TreeViewSection,\n type WorkbenchCore,\n} from \"../../../core\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\nimport { createTreeActionItems, createTreeContextMenuItems, type TreeActionParamsRequest } from \"./tree-actions\";\n\ninterface TreeNodeRenderContext {\n workbench: WorkbenchCore;\n onCommandError?: (error: unknown) => void;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n}\nexport const resolveTreeListActiveNodeId = (activeNodeId: string | null | undefined, selectedNodeId?: string) => {\n if (!activeNodeId) return selectedNodeId;\n return activeNodeId;\n};\ninterface ResolveTreeListSelectionInput {\n sections: TreeViewSection[];\n childrenByNodeId: Record<string, TreeNode[]>;\n activeNodeId?: string | null;\n activeLocation?: PageLocation;\n activeResource?: ResourceRef;\n selectedNodeId?: string;\n}\nconst activeNodeIds = (ids: string[]) => {\n const uniqueIds = [...new Set(ids)];\n if (uniqueIds.length === 0) return undefined;\n return uniqueIds.length === 1 ? uniqueIds[0] : uniqueIds;\n};\nconst resolveTreeNodeResourceKey = (node: TreeNode) => {\n if (node.resource) return resourceKey(node.resource);\n return undefined;\n};\nconst listTreeNodes = (nodes: TreeNode[], childrenByNodeId: Record<string, TreeNode[]>): TreeNode[] =>\n nodes.flatMap((node) => [\n node,\n ...listTreeNodes([...(node.children ?? []), ...(childrenByNodeId[node.id] ?? [])], childrenByNodeId),\n ]);\nconst listSectionNodes = (sections: TreeViewSection[], childrenByNodeId: Record<string, TreeNode[]>) =>\n sections.flatMap((section) => listTreeNodes(section.nodes, childrenByNodeId));\nconst resolveActiveResourceNodeIds = (\n sections: TreeViewSection[],\n childrenByNodeId: Record<string, TreeNode[]>,\n resourceKeys: string[],\n) => {\n const nodes = listSectionNodes(sections, childrenByNodeId);\n for (const resourceKey of resourceKeys) {\n const matches = nodes\n .filter((node) => node.id === resourceKey || resolveTreeNodeResourceKey(node) === resourceKey)\n .map((node) => node.id);\n if (matches.length > 0) return activeNodeIds(matches);\n }\n return undefined;\n};\nconst findSectionNode = (sections: TreeViewSection[], nodeId: string, childrenByNodeId: Record<string, TreeNode[]>) =>\n listSectionNodes(sections, childrenByNodeId).find((node) => node.id === nodeId);\nexport const filterTreeListSelection = (\n sections: TreeViewSection[],\n childrenByNodeId: Record<string, TreeNode[]>,\n selection: string | string[] | undefined,\n) => {\n const selectedIds = typeof selection === \"string\" ? [selection] : (selection ?? []);\n return activeNodeIds(selectedIds.filter((nodeId) => findSectionNode(sections, nodeId, childrenByNodeId)));\n};\nconst pageRefsEqual = (left: PageRef, right: PageRef) => left.id === right.id && left.extensionId === right.extensionId;\nconst targetMatchesPage = (target: NavigationTarget | undefined, activePage: PageRef, activeResource?: ResourceRef) => {\n if (!target) return false;\n const targets = target.kind === \"compound\" ? target.targets : [target];\n return targets.some(\n (candidate) =>\n candidate.kind === \"page\" &&\n pageRefsEqual(candidate.page, activePage) &&\n (candidate.resource\n ? activeResource !== undefined && resourceKey(candidate.resource) === resourceKey(activeResource)\n : activeResource === undefined),\n );\n};\nconst resolveActivePageNodeIds = (\n sections: TreeViewSection[],\n childrenByNodeId: Record<string, TreeNode[]>,\n activePage: PageRef | undefined,\n activeResource: ResourceRef | undefined,\n) => {\n if (!activePage) return undefined;\n return activeNodeIds(\n listSectionNodes(sections, childrenByNodeId)\n .filter((node) => targetMatchesPage(node.target, activePage, activeResource))\n .map((node) => node.id),\n );\n};\nexport const resolveTreeListSelection = (input: ResolveTreeListSelectionInput) => {\n const { sections, childrenByNodeId, activeNodeId, activeLocation, activeResource, selectedNodeId } = input;\n if (activeNodeId) return activeNodeId;\n // Keep renderer selection on the nodes so it survives composing and scoping trees.\n const declaredSelection = activeNodeIds(\n listSectionNodes(sections, childrenByNodeId)\n .filter((node) => node.selected)\n .map((node) => node.id),\n );\n if (declaredSelection) return declaredSelection;\n const activeResourceKeys = getWorkbenchSelectionResourceKeys(activeResource);\n let selectedResourceKey: string | undefined;\n if (selectedNodeId) {\n const selectedNode = findSectionNode(sections, selectedNodeId, childrenByNodeId);\n selectedResourceKey = selectedNode ? resolveTreeNodeResourceKey(selectedNode) : undefined;\n if (selectedResourceKey && activeResourceKeys.includes(selectedResourceKey)) return selectedNodeId;\n // Keep the selected document when several nodes target the same page and resource.\n if (activeLocation && targetMatchesPage(selectedNode?.target, activeLocation.page, activeLocation.resource)) {\n return selectedNodeId;\n }\n }\n const activeResourceNodeId = resolveActiveResourceNodeIds(sections, childrenByNodeId, activeResourceKeys);\n if (activeResourceNodeId) return activeResourceNodeId;\n const activePageNodeId = resolveActivePageNodeIds(\n sections,\n childrenByNodeId,\n activeLocation?.page,\n activeLocation?.resource,\n );\n if (activePageNodeId) return activePageNodeId;\n if (!selectedNodeId) return undefined;\n if (activeResourceKeys.length > 0 && selectedResourceKey) return undefined;\n return selectedNodeId;\n};\nconst canVirtualizeTreeNode = (node: TreeListNode) =>\n node.inlineInput === undefined && node.isContainer !== true && (node.children ?? []).length === 0;\nexport const canVirtualizeTreeSections = (sections: TreeListSection[]) =>\n sections.every((section) => section.nodes.every(canVirtualizeTreeNode));\nconst findNode = (nodes: TreeNode[], nodeId: string, childrenByNodeId: Record<string, TreeNode[]>): TreeNode | null => {\n for (const node of nodes) {\n if (node.id === nodeId) return node;\n const child = findNode([...(node.children ?? []), ...(childrenByNodeId[node.id] ?? [])], nodeId, childrenByNodeId);\n if (child) return child;\n }\n return null;\n};\nexport const findNodeInSections = (\n sections: TreeViewSection[],\n nodeId: string,\n childrenByNodeId: Record<string, TreeNode[]>,\n) => {\n for (const section of sections) {\n const node = findNode(section.nodes, nodeId, childrenByNodeId);\n if (node) return node;\n }\n return null;\n};\nconst wrapTreeNodeIcon = (icon: ReactNode, iconTooltip: string | undefined) => {\n if (!iconTooltip) return icon;\n return (\n <Tooltip content={iconTooltip} openDelay={300}>\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" justifyContent=\"center\">\n {icon}\n </Box>\n </Tooltip>\n );\n};\nconst resolveTreeNodeIcon = (node: TreeNode): ReactNode | undefined => {\n let icon: ReactNode | undefined;\n if (node.iconElement !== undefined) {\n icon = node.iconElement as ReactNode;\n } else if (node.icon) {\n icon = <WorkbenchIcon name={node.icon} />;\n }\n return icon === undefined ? undefined : wrapTreeNodeIcon(icon, node.iconTooltip);\n};\nconst resolveTreeNodeNavigationIntent = (node: TreeNode) => {\n if (node.target) return { id: \"target\", payload: node.target };\n if (node.resource) return { id: \"resource\", payload: node.resource };\n return undefined;\n};\nconst resolveTreeNodeResource = (node: TreeNode): ResourceRef | undefined => {\n if (node.resource) return node.resource;\n return undefined;\n};\nconst renderShortcutEndContent = (binding: string | string[] | undefined) => {\n if (!binding) return undefined;\n return (\n <Box\n opacity=\"0\"\n pointerEvents=\"none\"\n display=\"inline-flex\"\n alignItems=\"center\"\n transition=\"opacity 120ms ease\"\n _groupHover={{ opacity: \"1\" }}\n >\n <PaletteShortcut binding={binding} />\n </Box>\n );\n};\nconst resolveTreeNodeEndContent = (\n node: TreeNode,\n resource: ResourceRef | undefined,\n binding: string | string[] | undefined,\n) => {\n if (node.endContent !== undefined) return node.endContent as ReactNode;\n const shortcut = renderShortcutEndContent(binding);\n if (shortcut) return shortcut;\n const additions = resource?.metadata?.diffAdditions;\n const deletions = resource?.metadata?.diffDeletions;\n if (resource?.type !== \"workspace\" || typeof additions !== \"number\" || typeof deletions !== \"number\") {\n return undefined;\n }\n return <DiffBubble additions={additions} deletions={deletions} variant=\"ghost\" size=\"small\" />;\n};\nconst toTreeListSectionEmptyNode = (section: TreeViewSection): TreeListNode | undefined => {\n if (!section.emptyState || section.nodes.length > 0) return undefined;\n return {\n id: `${section.id}:empty`,\n label: section.emptyState.title,\n description: section.emptyState.description,\n icon: section.emptyState.icon ? <WorkbenchIcon name={section.emptyState.icon} /> : undefined,\n disabled: true,\n rowVariant: \"empty-state\",\n };\n};\nconst toTreeListNode = (\n node: TreeNode,\n childrenByNodeId: Record<string, TreeNode[]>,\n context: TreeNodeRenderContext,\n) => {\n const navigationIntent = resolveTreeNodeNavigationIntent(node);\n const resource = resolveTreeNodeResource(node);\n const commandContext = resource ? { resource } : undefined;\n const contextMenuItems = createTreeContextMenuItems({\n actions: node.contextMenuActions,\n menuPath: node.contextMenuPath ?? node.menuPath ?? (resource ? resourceContextMenuPath(resource.type) : undefined),\n workbench: context.workbench,\n context: commandContext,\n onCommandError: context.onCommandError,\n onRequestParams: context.onRequestParams,\n });\n const menuItems = node.menuPath && contextMenuItems.length > 0 ? contextMenuItems : undefined;\n const shortcuts = new Map(\n context.workbench.keybindings.listCommandKeybindings().map((k) => [k.commandId, k.keybinding]),\n );\n const binding = node.commandId ? shortcuts.get(node.commandId) : undefined;\n const treeNode: TreeListNode = {\n id: node.id,\n moveScope: node.moveScope,\n label: node.label,\n description: node.description,\n icon: resolveTreeNodeIcon(node),\n iconColor: node.iconColor,\n disabled: node.disabled,\n rowVariant: node.rowVariant,\n inlineInput: node.inlineInput,\n showContextMenuTrigger: node.showContextMenuTrigger,\n canHide: node.canHide,\n canReorder: node.canReorder,\n canDrag: node.canDrag,\n canDrop: node.canDrop,\n hiddenByDefault: node.hiddenByDefault,\n actions: createTreeActionItems({\n actions: node.actions,\n workbench: context.workbench,\n context: commandContext,\n onCommandError: context.onCommandError,\n onRequestParams: context.onRequestParams,\n }),\n endContent: resolveTreeNodeEndContent(node, resource, binding),\n menuItems,\n contextMenuItems: contextMenuItems.length > 0 ? contextMenuItems : undefined,\n ...(node.menuPlacement ? { menuPlacement: node.menuPlacement } : {}),\n isContainer: node.collapsible,\n isNavigable: Boolean(navigationIntent),\n navigationIntent,\n children: [...(node.children ?? []), ...(childrenByNodeId[node.id] ?? [])].map((child) =>\n toTreeListNode(child, childrenByNodeId, context),\n ),\n } as TreeListNode;\n return treeNode;\n};\nexport const toTreeListSection = (\n section: TreeViewSection,\n childrenByNodeId: Record<string, TreeNode[]>,\n context: TreeNodeRenderContext,\n) => {\n const emptyNode = toTreeListSectionEmptyNode(section);\n return {\n id: section.id,\n moveScope: section.moveScope,\n label: section.label,\n actions: createTreeActionItems({\n actions: section.actions,\n workbench: context.workbench,\n onCommandError: context.onCommandError,\n onRequestParams: context.onRequestParams,\n }),\n collapsible: section.collapsible,\n canHide: section.canHide,\n canReorder: section.canReorder,\n hiddenByDefault: section.hiddenByDefault,\n nodes: emptyNode ? [emptyNode] : section.nodes.map((node) => toTreeListNode(node, childrenByNodeId, context)),\n };\n};\n","import type { WorkbenchCore } from \"../../../core\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-params-dialog\";\nimport { CommandParamsDialog } from \"../../command-palette/command-params-dialog\";\nimport type { TreeActionParamsRequest } from \"./tree-actions\";\n\ninterface TreeParamsDialogProps {\n request: TreeActionParamsRequest | null;\n renderParamField?: CommandParamFieldRenderer;\n workbench: WorkbenchCore;\n onClose: () => void;\n}\n\nexport const TreeParamsDialog = (props: TreeParamsDialogProps) => {\n const { request, renderParamField, workbench, onClose } = props;\n return (\n <CommandParamsDialog\n request={request?.request ?? null}\n renderParamField={renderParamField}\n prepareArgs={(input) =>\n workbench.commands.getCommand(input.commandId)\n ? workbench.commands.prepareCommandArgs(input.commandId, input.args, input.context, input.onArgsChange)\n : Promise.resolve(input.args)\n }\n onClose={onClose}\n onRun={async ({ args }) => {\n await request?.run(args);\n }}\n />\n );\n};\n","import { Skeleton, Stack } from \"@chakra-ui/react\";\nimport {\n EmptyState,\n type ResourceContextAction,\n TreeList,\n type TreeListMovePolicy,\n type TreeListSection,\n} from \"@pstdio/ui\";\nimport type { RefObject } from \"react\";\nimport { canVirtualizeTreeSections } from \"./tree-list-adapter\";\n\nconst TREE_SKELETON_WIDTHS = [\"70%\", \"50%\", \"82%\", \"60%\", \"44%\", \"76%\"];\n\nconst TreeViewSkeleton = () => (\n <Stack gap=\"sm\" px=\"sm\" py=\"xs\" aria-hidden>\n {TREE_SKELETON_WIDTHS.map((width, index) => (\n <Skeleton key={`${width}-${index}`} height=\"4\" width={width} borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n\ninterface TreeViewBodyProps {\n error?: string | null;\n loading: boolean;\n moduleLoading?: boolean;\n sections: TreeListSection[];\n backgroundContextActions?: ResourceContextAction[];\n draggable?: boolean;\n customizationAvailable?: boolean;\n activeNodeId: string | string[] | undefined;\n expandedNodeIds: string[];\n expandedSectionIds: string[];\n scrollRef: RefObject<HTMLDivElement | null>;\n onToggleSection: (sectionId: string) => void;\n onToggleNode: (nodeId: string) => void;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n canMove?: TreeListMovePolicy;\n onMoveNode?: (sourceNodeId: string, targetNodeId?: string) => void;\n onNavigate: (event: Parameters<NonNullable<Parameters<typeof TreeList>[0][\"onNavigate\"]>>[0]) => void;\n}\n\nexport const TreeViewBody = (props: TreeViewBodyProps) => {\n const {\n error,\n loading,\n moduleLoading,\n sections,\n backgroundContextActions,\n draggable,\n customizationAvailable,\n activeNodeId,\n expandedNodeIds,\n expandedSectionIds,\n scrollRef,\n onToggleSection,\n onToggleNode,\n onReorderSections,\n onReorderNodes,\n canMove,\n onMoveNode,\n onNavigate,\n } = props;\n\n if (error) return <EmptyState title=\"Could not load files\" description={error} />;\n if (loading) return null;\n if (moduleLoading) return <TreeViewSkeleton />;\n\n // Keep an empty-but-customizable tree right-clickable so a fully-hidden tree\n // can still be restored from the back-of-tree menu.\n if (sections.length === 0 && (backgroundContextActions?.length ?? 0) === 0 && !customizationAvailable) {\n return <EmptyState minH=\"12rem\" title=\"No tree items\" />;\n }\n\n return (\n <TreeList\n sections={sections}\n backgroundContextActions={backgroundContextActions}\n draggable={draggable}\n expandedNodeIds={expandedNodeIds}\n expandedSectionIds={expandedSectionIds}\n activeNodeId={activeNodeId}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n nodeGap=\"1px\"\n virtualize={canVirtualizeTreeSections(sections)}\n scrollRef={scrollRef}\n onToggleSection={onToggleSection}\n onToggleNode={onToggleNode}\n onReorderSections={onReorderSections}\n onReorderNodes={onReorderNodes}\n canMove={canMove}\n onMoveNode={onMoveNode}\n onNavigate={onNavigate}\n />\n );\n};\n","import type {\n RegisteredTreeRendererContribution,\n ResourceRef,\n TreeNode,\n TreeViewSection,\n WorkbenchCore,\n} from \"../../../core\";\nimport { getWorkbenchRenderers } from \"../../../core\";\nimport { findNodeInSections } from \"./tree-list-adapter\";\n\ninterface MoveTreeNodeContext {\n workbench: WorkbenchCore;\n renderer: RegisteredTreeRendererContribution;\n resource?: ResourceRef;\n viewId?: string;\n sections: TreeViewSection[];\n childrenByNodeId: Record<string, TreeNode[]>;\n onError?: (error: unknown) => void;\n}\n\nexport const createMoveTreeNode = (context: MoveTreeNodeContext) =>\n context.renderer.moveNode\n ? (sourceNodeId: string, targetNodeId?: string) => {\n const source = findNodeInSections(context.sections, sourceNodeId, context.childrenByNodeId);\n const target = targetNodeId\n ? (findNodeInSections(context.sections, targetNodeId, context.childrenByNodeId) ?? undefined)\n : undefined;\n if (!source || (targetNodeId && !target)) return;\n const trees = getWorkbenchRenderers(context.workbench);\n void Promise.resolve(\n context.renderer.moveNode?.(source, target, {\n resource: context.resource,\n viewId: context.viewId,\n state: trees.getTreeState(context.renderer.id),\n refresh: () => trees.refresh(context.renderer.id),\n setSelectedNode: (nodeId) => trees.setSelectedNode(context.renderer.id, nodeId),\n }),\n ).catch(context.onError);\n }\n : undefined;\n","import type { NavigationTarget } from \"../../../core\";\n\nexport const shouldSelectTreeNodeForNavigationTarget = (target: NavigationTarget) => {\n const items = target.kind === \"compound\" ? target.targets : [target];\n return items.some((item) => item.kind === \"page\" || item.kind === \"panel\");\n};\n","import { Input, InputGroup } from \"@chakra-ui/react\";\nimport { Header } from \"@pstdio/ui\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\n\ninterface TreeViewSearchProps {\n visible: boolean;\n placeholder?: string;\n value: string;\n onChange: (value: string) => void;\n}\n\nexport const TreeViewSearch = (props: TreeViewSearchProps) => {\n const { visible, placeholder = \"Search files\", value, onChange } = props;\n if (!visible) return null;\n\n return (\n <Header flexShrink={0} borderBottomWidth=\"1px\" borderColor=\"border.subtle\" bg=\"bg\">\n <InputGroup startElement={<WorkbenchIcon name=\"search\" size={14} />} width=\"full\">\n <Input\n size=\"sm\"\n variant=\"borderless\"\n aria-label={placeholder}\n placeholder={placeholder}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n />\n </InputGroup>\n </Header>\n );\n};\n","import type { TreeNode, TreeQueryContext, TreeRendererRegistry, TreeViewSection } from \"../../../core\";\n\nconst isUnregisteredTreeError = (trees: TreeRendererRegistry, treeId: string, error: unknown) =>\n error instanceof Error &&\n error.message === `Tree renderer not registered: ${treeId}` &&\n !trees.getTreeRenderer(treeId);\n\nexport interface LoadedTreeData {\n header: TreeViewSection[];\n body: TreeViewSection[];\n footer: TreeViewSection[];\n}\n\nconst listTreeNodes = (data: LoadedTreeData) => [\n ...data.header.flatMap((section) => section.nodes),\n ...data.body.flatMap((section) => section.nodes),\n ...data.footer.flatMap((section) => section.nodes),\n];\n\nexport const loadExpandedTreeChildren = async (\n trees: TreeRendererRegistry,\n treeId: string,\n data: LoadedTreeData,\n expandedNodeIds: string[],\n ctx: TreeQueryContext = {},\n) => {\n const expanded = new Set(expandedNodeIds);\n const visited = new Set<string>();\n const childrenByNodeId: Record<string, TreeNode[]> = {};\n\n const loadNodes = async (nodes: TreeNode[]) => {\n await Promise.all(\n nodes.map(async (node) => {\n if (!expanded.has(node.id) || visited.has(node.id)) return;\n visited.add(node.id);\n const children = node.children ?? (await trees.getChildren(treeId, node, ctx));\n if (!node.children) childrenByNodeId[node.id] = children;\n await loadNodes(children);\n }),\n );\n };\n\n await loadNodes(listTreeNodes(data));\n return childrenByNodeId;\n};\n\n// A tree reloads whenever the open resource changes (e.g. selecting a different\n// sidenav item) or a refresh fires. Only show the loading state before a tree has\n// produced any content; reloads keep the current content so the sidenav never\n// blanks between selections.\nexport const shouldShowTreeLoading = (loadedTreeId: string | null, treeViewId: string) => loadedTreeId !== treeViewId;\n\nexport const expandDefaultTreeSections = (trees: TreeRendererRegistry, treeId: string) => {\n const tree = trees.getTreeRenderer(treeId);\n if (!tree) return;\n for (const sectionId of tree.defaultExpandedSectionIds ?? []) {\n trees.setSectionExpanded(treeId, sectionId, true);\n }\n};\n\nexport const loadTreeData = async (\n trees: TreeRendererRegistry,\n treeId: string,\n ctx: TreeQueryContext = {},\n): Promise<LoadedTreeData | null> => {\n if (!trees.getTreeRenderer(treeId)) return null;\n\n try {\n const [header, body, footer] = await Promise.all([\n trees.getHeader(treeId, ctx),\n trees.getBody(treeId, ctx),\n trees.getFooter(treeId, ctx),\n ]);\n return { header, body, footer };\n } catch (error) {\n if (isUnregisteredTreeError(trees, treeId, error)) return null;\n throw error;\n }\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport {\n getWorkbenchRenderers,\n type ResourceRef,\n type TreeNode,\n type TreeViewSection,\n type WorkbenchCore,\n} from \"../../../core\";\nimport {\n expandDefaultTreeSections,\n loadExpandedTreeChildren,\n loadTreeData,\n shouldShowTreeLoading,\n} from \"./tree-view-load\";\n\nexport const useTreeData = (\n workbench: WorkbenchCore,\n treeViewId: string,\n resource?: ResourceRef,\n viewId?: string,\n filter?: string,\n) => {\n const [header, setHeader] = useState<TreeViewSection[]>([]);\n const [body, setBody] = useState<TreeViewSection[]>([]);\n const [footer, setFooter] = useState<TreeViewSection[]>([]);\n const [childrenByNodeId, setChildrenByNodeId] = useState<Record<string, TreeNode[]>>({});\n const [error, setError] = useState<string | null>(null);\n const [loading, setLoading] = useState(true);\n const loadedTreeIdRef = useRef<string | null>(null);\n const loadRevisionRef = useRef(0);\n\n useEffect(() => {\n let cancelled = false;\n expandDefaultTreeSections(getWorkbenchRenderers(workbench), treeViewId);\n\n const loadTree = () => {\n const loadRevision = ++loadRevisionRef.current;\n if (shouldShowTreeLoading(loadedTreeIdRef.current, treeViewId)) setLoading(true);\n setError(null);\n void loadTreeData(getWorkbenchRenderers(workbench), treeViewId, { resource, viewId, filter })\n .then(async (data) => {\n if (cancelled || loadRevision !== loadRevisionRef.current) return;\n const treeStillRegistered = getWorkbenchRenderers(workbench).getTreeRenderer(treeViewId);\n const children =\n data && treeStillRegistered\n ? await loadExpandedTreeChildren(\n getWorkbenchRenderers(workbench),\n treeViewId,\n data,\n getWorkbenchRenderers(workbench).getTreeState(treeViewId).expandedNodeIds,\n { resource, viewId, filter },\n )\n : {};\n if (cancelled || loadRevision !== loadRevisionRef.current) return;\n loadedTreeIdRef.current = treeViewId;\n setHeader(data?.header ?? []);\n setBody(data?.body ?? []);\n setFooter(data?.footer ?? []);\n setChildrenByNodeId(children);\n setLoading(false);\n })\n .catch((loadError) => {\n if (cancelled || loadRevision !== loadRevisionRef.current) return;\n setError(loadError instanceof Error ? loadError.message : \"The file tree could not be loaded.\");\n setLoading(false);\n });\n };\n\n loadTree();\n const disposable = getWorkbenchRenderers(workbench).onDidRefresh((event) => {\n if (event.treeId === treeViewId) loadTree();\n });\n return () => {\n cancelled = true;\n disposable.dispose();\n };\n }, [filter, resource, viewId, workbench, treeViewId]);\n\n return { body, childrenByNodeId, error, footer, header, loading, setChildrenByNodeId };\n};\n","import {\n applyTreeListOrder,\n buildTreeVisibilityMenuActions,\n filterVisibleSections,\n type ResourceContextAction,\n resolveVisibility,\n type TreeListActionMenuItem,\n type TreeListNode,\n type TreeListSection,\n useTreeListOrderStore,\n useTreeListVisibilityStore,\n type VisibilityOverride,\n} from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\n\ninterface TreeViewRegions {\n headerSections: TreeListSection[];\n sections: TreeListSection[];\n footerSections: TreeListSection[];\n}\n\nexport type TreeViewSlot = \"header\" | \"content\" | \"footer\";\n\ninterface TreeViewCustomization {\n // Header sections with hidden entries removed — what the pinned header renders.\n visibleHeaderSections: TreeListSection[];\n // Sections with hidden categories removed — what the tree body renders.\n visibleSections: TreeListSection[];\n // Footer sections with hidden entries removed — what the pinned footer renders.\n visibleFooterSections: TreeListSection[];\n // Back-of-tree right-click menu: header rows, body categories, and footer rows that opt in.\n backgroundContextActions: ResourceContextAction[];\n customizationRevision: string;\n onReorderSections: (slot: TreeViewSlot, nextSectionIds: string[]) => void;\n onMoveSection: (nextSectionIds: string[], sourceSectionId: string, destinationSectionId: string) => void;\n onReorderNodes: (sectionId: string, nextNodeIds: string[]) => void;\n}\n\ninterface VisibilityToggleIcons {\n visibleIcon: ReactNode;\n hiddenIcon: ReactNode;\n resetIcon?: ReactNode;\n}\n\ninterface NodeVisibilityActions {\n onToggleNode: (id: string, hiddenByDefault: boolean) => void;\n}\n\ninterface TreeViewCustomizationOptions {\n suppressNodeContextMenus?: boolean;\n}\n\nconst toStringLabel = (label: ReactNode, fallback: string) => (typeof label === \"string\" ? label : fallback);\n\nconst isCustomizableNode = (node: TreeListNode) => node.canHide === true || node.hiddenByDefault === true;\n\nconst visibilityContextIcon = (effective: VisibilityOverride, icons: VisibilityToggleIcons) =>\n effective === \"shown\" ? icons.hiddenIcon : icons.visibleIcon;\n\nconst buildNodeVisibilityContextMenuItem = (\n node: TreeListNode,\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: NodeVisibilityActions,\n icons: VisibilityToggleIcons,\n): TreeListActionMenuItem | undefined => {\n if (!isCustomizableNode(node)) return undefined;\n\n const hiddenByDefault = node.hiddenByDefault === true;\n const effective = resolveVisibility(nodeOverrides[node.id], hiddenByDefault);\n const label = toStringLabel(node.label, node.id);\n const existingItems = node.contextMenuItems ?? [];\n\n return {\n id: `tree-visibility:${node.id}`,\n label: effective === \"shown\" ? `Hide ${label}` : `Show ${label}`,\n icon: visibilityContextIcon(effective, icons),\n ...(existingItems.length > 0 ? { separatorBefore: true } : {}),\n onAction: () => actions.onToggleNode(node.id, hiddenByDefault),\n };\n};\n\nexport const addRegionNodeVisibilityContextMenuItems = (\n nodes: TreeListNode[],\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: NodeVisibilityActions,\n icons: VisibilityToggleIcons,\n enabled = true,\n) => {\n if (!enabled) return nodes;\n let changed = false;\n const next = nodes.map((node) => {\n const item = buildNodeVisibilityContextMenuItem(node, nodeOverrides, actions, icons);\n if (!item) return node;\n\n changed = true;\n return { ...node, contextMenuItems: [...(node.contextMenuItems ?? []), item] };\n });\n\n return changed ? next : nodes;\n};\n\nconst addSectionNodeVisibilityContextMenuItems = (\n sections: TreeListSection[],\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: NodeVisibilityActions,\n icons: VisibilityToggleIcons,\n enabled: boolean,\n) => {\n let changed = false;\n const next = sections.map((section) => {\n const nodes = addRegionNodeVisibilityContextMenuItems(section.nodes, nodeOverrides, actions, icons, enabled);\n if (nodes === section.nodes) return section;\n changed = true;\n return { ...section, nodes };\n });\n return changed ? next : sections;\n};\n\n// Wires the generic @pstdio/ui visibility primitives onto a single tree host. Visibility is\n// persisted per `storageKey`, so each tree view customizes independently. The menu is built from\n// the unfiltered regions so hidden entries stay listed (eye-off) and can be brought back —\n// covering header rows, body categories, and footer rows (never individual body items).\nexport const useTreeViewCustomization = (\n storageKey: string,\n regions: TreeViewRegions,\n icons: VisibilityToggleIcons,\n options: TreeViewCustomizationOptions = {},\n): TreeViewCustomization => {\n const sectionOverrides = useTreeListVisibilityStore(storageKey, (state) => state.sectionOverrides);\n const nodeOverrides = useTreeListVisibilityStore(storageKey, (state) => state.nodeOverrides);\n const toggleSection = useTreeListVisibilityStore(storageKey, (state) => state.toggleSection);\n const toggleNode = useTreeListVisibilityStore(storageKey, (state) => state.toggleNode);\n const resetVisibility = useTreeListVisibilityStore(storageKey, (state) => state.reset);\n const sectionOrder = useTreeListOrderStore(storageKey, (state) => state.sectionOrder);\n const nodeOrderBySection = useTreeListOrderStore(storageKey, (state) => state.nodeOrderBySection);\n const sectionSlotById = useTreeListOrderStore(storageKey, (state) => state.sectionSlotById);\n const setSectionOrder = useTreeListOrderStore(storageKey, (state) => state.setSectionOrder);\n const setNodeOrder = useTreeListOrderStore(storageKey, (state) => state.setNodeOrder);\n const setSectionSlot = useTreeListOrderStore(storageKey, (state) => state.setSectionSlot);\n const resetOrder = useTreeListOrderStore(storageKey, (state) => state.reset);\n const visibilityActions = {\n onToggleSection: toggleSection,\n onToggleNode: toggleNode,\n onResetAll: () => {\n resetVisibility();\n resetOrder();\n },\n };\n\n const defaultSlotBySectionId = new Map([\n ...regions.headerSections.map((section) => [section.id, \"header\" as const] as const),\n ...regions.sections.map((section) => [section.id, \"content\" as const] as const),\n ...regions.footerSections.map((section) => [section.id, \"footer\" as const] as const),\n ]);\n const orderedSectionsBySlot: Record<TreeViewSlot, TreeListSection[]> = { header: [], content: [], footer: [] };\n const orderedAllSections = applyTreeListOrder(\n [...regions.headerSections, ...regions.sections, ...regions.footerSections],\n sectionOrder,\n nodeOrderBySection,\n );\n for (const section of orderedAllSections) {\n const slot = sectionSlotById[section.id] ?? defaultSlotBySectionId.get(section.id) ?? \"content\";\n orderedSectionsBySlot[slot].push(section);\n }\n const orderedHeaderSections = orderedSectionsBySlot.header;\n const orderedSections = orderedSectionsBySlot.content;\n const orderedFooterSections = orderedSectionsBySlot.footer;\n const includeNodeContextMenus = options.suppressNodeContextMenus !== true;\n\n const headerSections = addSectionNodeVisibilityContextMenuItems(\n orderedHeaderSections,\n nodeOverrides,\n visibilityActions,\n icons,\n includeNodeContextMenus,\n );\n const contentSections = addSectionNodeVisibilityContextMenuItems(\n orderedSections,\n nodeOverrides,\n visibilityActions,\n icons,\n includeNodeContextMenus,\n );\n const footerSections = addSectionNodeVisibilityContextMenuItems(\n orderedFooterSections,\n nodeOverrides,\n visibilityActions,\n icons,\n includeNodeContextMenus,\n );\n const visibleHeaderSections = filterVisibleSections(headerSections, sectionOverrides, nodeOverrides);\n const visibleSections = filterVisibleSections(contentSections, sectionOverrides, nodeOverrides);\n const visibleFooterSections = filterVisibleSections(footerSections, sectionOverrides, nodeOverrides);\n const backgroundContextActions = buildTreeVisibilityMenuActions(\n { headerSections: orderedHeaderSections, sections: orderedSections, footerSections: orderedFooterSections },\n sectionOverrides,\n nodeOverrides,\n visibilityActions,\n icons,\n );\n\n const customizationRevision = JSON.stringify({\n header: orderedHeaderSections.map((section) => [\n section.id,\n toStringLabel(section.label, section.id),\n section.nodes.map((node) => [node.id, toStringLabel(node.label, node.id)]),\n ]),\n main: orderedSections.map((section) => [\n section.id,\n toStringLabel(section.label, section.id),\n section.nodes.map((node) => [node.id, toStringLabel(node.label, node.id)]),\n ]),\n footer: orderedFooterSections.map((section) => [\n section.id,\n toStringLabel(section.label, section.id),\n section.nodes.map((node) => [node.id, toStringLabel(node.label, node.id)]),\n ]),\n sectionOverrides,\n nodeOverrides,\n sectionOrder,\n nodeOrderBySection,\n sectionSlotById,\n });\n\n return {\n visibleHeaderSections,\n visibleSections,\n visibleFooterSections,\n backgroundContextActions,\n customizationRevision,\n onReorderSections: (slot, nextSectionIds) => {\n const idsBySlot: Record<TreeViewSlot, string[]> = {\n header: orderedHeaderSections.map((section) => section.id),\n content: orderedSections.map((section) => section.id),\n footer: orderedFooterSections.map((section) => section.id),\n };\n idsBySlot[slot] = nextSectionIds;\n setSectionOrder([...idsBySlot.header, ...idsBySlot.content, ...idsBySlot.footer]);\n },\n onMoveSection: (nextSectionIds, sourceSectionId, destinationSectionId) => {\n const destinationSlot =\n sectionSlotById[destinationSectionId] ?? defaultSlotBySectionId.get(destinationSectionId) ?? \"content\";\n setSectionSlot(sourceSectionId, destinationSlot);\n setSectionOrder(nextSectionIds);\n },\n onReorderNodes: setNodeOrder,\n };\n};\n","import { Box, Flex, Text } from \"@chakra-ui/react\";\nimport { type ResourceContextAction, ScrollArea, TreeList, TreeListDragProvider } from \"@pstdio/ui\";\nimport { type Dispatch, type SetStateAction, useEffect, useRef, useState } from \"react\";\nimport type {\n NavigationTarget,\n ResourceRef,\n TreeNode,\n TreeRendererState,\n TreeViewSection,\n WorkbenchCore,\n} from \"../../../core\";\nimport { getAnchorResource, getWorkbenchRenderers } from \"../../../core\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-params-dialog\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\nimport { useWorkbenchStore } from \"../../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../../theme/workbench-theme-background\";\nimport type { TreeActionParamsRequest } from \"./tree-actions\";\nimport {\n filterTreeListSelection,\n findNodeInSections,\n resolveTreeListSelection,\n toTreeListSection,\n} from \"./tree-list-adapter\";\nimport { TreeParamsDialog } from \"./tree-params-dialog\";\nimport { TreeViewBody } from \"./tree-view-body\";\nimport { createMoveTreeNode } from \"./tree-view-move\";\nimport { shouldSelectTreeNodeForNavigationTarget } from \"./tree-view-navigation\";\nimport { TreeViewSearch } from \"./tree-view-search\";\nimport { useTreeData } from \"./use-tree-data\";\nimport { useTreeViewCustomization } from \"./use-tree-view-customization\";\n\ninterface WorkbenchTreeViewProps {\n workbench: WorkbenchCore;\n treeViewId: string;\n activeNodeId?: string | null;\n resource?: ResourceRef;\n viewId?: string;\n renderParamField?: CommandParamFieldRenderer;\n onOpenResourceError?: (error: unknown) => void;\n onSidenavContextActionsChange?: (actions: ResourceContextAction[]) => void;\n}\n\nconst EMPTY_TREE_STATE: TreeRendererState = { expandedNodeIds: [], expandedSectionIds: [] };\n\ntype WorkbenchLayoutState = ReturnType<WorkbenchCore[\"layout\"][\"getLayout\"]>;\n\nconst resolveActivePlacement = (\n widgets: WorkbenchLayoutState[\"regions\"][\"overlay\"][\"widgets\"],\n activeWidgetId: string | undefined,\n) => widgets.find((entry) => entry.widgetId === activeWidgetId) ?? widgets[0];\n\nconst resolveTreeActiveResource = (layout: WorkbenchLayoutState) =>\n resolveActivePlacement(layout.regions.overlay.widgets, layout.regions.overlay.activeWidgetId)?.resource ??\n getAnchorResource(layout, \"primary\");\n\nconst useSidenavContextActions = (\n actions: ResourceContextAction[],\n revision: string,\n onChange: ((actions: ResourceContextAction[]) => void) | undefined,\n) => {\n const actionsRef = useRef(actions);\n actionsRef.current = actions;\n\n useEffect(() => {\n void revision;\n onChange?.(actionsRef.current);\n }, [revision, onChange]);\n\n useEffect(\n () => () => {\n onChange?.([]);\n },\n [onChange],\n );\n};\n\ninterface TreeNavigationContext {\n workbench: WorkbenchCore;\n treeViewId: string;\n onOpenResourceError?: (error: unknown) => void;\n}\n\nconst navigateTreeNode = (\n context: TreeNavigationContext,\n nodeId: string,\n intent: { id?: string; payload?: unknown } | undefined,\n) => {\n if (intent?.id === \"target\") {\n const target = intent.payload as NavigationTarget;\n if (shouldSelectTreeNodeForNavigationTarget(target)) {\n getWorkbenchRenderers(context.workbench).setSelectedNode(context.treeViewId, nodeId);\n }\n void context.workbench.navigation.openTarget(target).catch(context.onOpenResourceError);\n return;\n }\n};\n\ninterface ToggleTreeNodeContext {\n workbench: WorkbenchCore;\n treeViewId: string;\n resource?: ResourceRef;\n viewId?: string;\n body: TreeViewSection[];\n header: TreeViewSection[];\n footer: TreeViewSection[];\n childrenByNodeId: Record<string, TreeNode[]>;\n expandedNodeIds: string[];\n setChildrenByNodeId: Dispatch<SetStateAction<Record<string, TreeNode[]>>>;\n}\n\nconst createToggleTreeNode = (context: ToggleTreeNodeContext) => (nodeId: string) => {\n const node =\n findNodeInSections(context.body, nodeId, context.childrenByNodeId) ??\n findNodeInSections([...context.header, ...context.footer], nodeId, context.childrenByNodeId);\n if (!node) return;\n\n const expanded = context.expandedNodeIds.includes(nodeId);\n getWorkbenchRenderers(context.workbench).setNodeExpanded(context.treeViewId, nodeId, !expanded);\n if (expanded || context.childrenByNodeId[nodeId] || node.children) return;\n\n void getWorkbenchRenderers(context.workbench)\n .getChildren(context.treeViewId, node, { resource: context.resource, viewId: context.viewId })\n .then((children) => {\n context.setChildrenByNodeId((current) => ({ ...current, [nodeId]: children }));\n });\n};\n\nexport const WorkbenchTreeView = (props: WorkbenchTreeViewProps) => {\n const {\n workbench,\n treeViewId,\n activeNodeId,\n resource,\n viewId,\n renderParamField,\n onOpenResourceError,\n onSidenavContextActionsChange,\n } = props;\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const treeRenderer = getWorkbenchRenderers(workbench).getTreeRenderer(treeViewId);\n const [filter, setFilter] = useState(\"\");\n const treeState =\n useWorkbenchStore(getWorkbenchRenderers(workbench).treeStore, (state) => state.statesByTreeId[treeViewId]) ??\n EMPTY_TREE_STATE;\n const projectId = useWorkbenchStore(workbench.pages.store, (state) => state.projectId);\n const activeLocation = useWorkbenchStore(workbench.pages.store, (state) => state.location);\n const activeResource = useWorkbenchStore(workbench.layout.store, (state) => resolveTreeActiveResource(state.layout));\n const { body, childrenByNodeId, error, footer, header, loading, setChildrenByNodeId } = useTreeData(\n workbench,\n treeViewId,\n resource,\n viewId,\n treeRenderer?.searchable ? filter.trim() || undefined : undefined,\n );\n const [paramsRequest, setParamsRequest] = useState<TreeActionParamsRequest | null>(null);\n\n const adapterContext = {\n workbench,\n onCommandError: onOpenResourceError,\n onRequestParams: setParamsRequest,\n };\n const rawSections = body.map((section) => toTreeListSection(section, childrenByNodeId, adapterContext));\n const rawHeaderSections = header.map((section) => toTreeListSection(section, childrenByNodeId, adapterContext));\n const rawFooterSections = footer.map((section) => toTreeListSection(section, childrenByNodeId, adapterContext));\n const {\n visibleHeaderSections,\n visibleSections,\n visibleFooterSections,\n backgroundContextActions,\n customizationRevision,\n onReorderSections,\n onReorderNodes,\n onMoveSection,\n } = useTreeViewCustomization(\n `${treeViewId}:${projectId ?? \"global\"}`,\n {\n headerSections: rawHeaderSections,\n sections: rawSections,\n footerSections: rawFooterSections,\n },\n {\n visibleIcon: <WorkbenchIcon name=\"eye\" size={14} />,\n hiddenIcon: <WorkbenchIcon name=\"eye-off\" size={14} />,\n resetIcon: <WorkbenchIcon name=\"rotate-ccw\" size={14} />,\n },\n { suppressNodeContextMenus: Boolean(onSidenavContextActionsChange) },\n );\n useSidenavContextActions(backgroundContextActions, customizationRevision, onSidenavContextActionsChange);\n if (!treeRenderer) {\n return (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"sm\">\n Tree renderer is no longer registered.\n </Text>\n );\n }\n\n const toggleNode = createToggleTreeNode({\n workbench,\n treeViewId,\n resource,\n viewId,\n body,\n header,\n footer,\n childrenByNodeId,\n expandedNodeIds: treeState.expandedNodeIds,\n setChildrenByNodeId,\n });\n\n const toggleSection = (sectionId: string) => {\n const expanded = treeState.expandedSectionIds.includes(sectionId);\n\n getWorkbenchRenderers(workbench).setSectionExpanded(treeViewId, sectionId, !expanded);\n };\n const moveNode = createMoveTreeNode({\n workbench,\n renderer: treeRenderer,\n resource,\n viewId,\n sections: body,\n childrenByNodeId,\n onError: onOpenResourceError,\n });\n\n const navigationContext = { workbench, treeViewId, onOpenResourceError };\n\n const activeNodeSelection = resolveTreeListSelection({\n sections: [...header, ...body, ...footer],\n childrenByNodeId,\n activeNodeId,\n activeLocation,\n activeResource,\n selectedNodeId: treeState.selectedNodeId,\n });\n const headerActiveNodeId = filterTreeListSelection(header, childrenByNodeId, activeNodeSelection);\n const bodyActiveNodeId = filterTreeListSelection(body, childrenByNodeId, activeNodeSelection);\n const footerActiveNodeId = filterTreeListSelection(footer, childrenByNodeId, activeNodeSelection);\n\n return (\n <TreeListDragProvider\n sections={[...visibleHeaderSections, ...visibleSections, ...visibleFooterSections]}\n canMove={treeRenderer.canMove}\n onReorderSections={onMoveSection}\n onReorderNodes={onReorderNodes}\n >\n <Flex as=\"section\" direction=\"column\" h=\"full\" minH=\"0\" minW=\"0\" aria-label={treeRenderer.title}>\n {!loading && visibleHeaderSections.length > 0 ? (\n <Flex bg={workbenchBackgrounds.sidenav} flexShrink={0}>\n <TreeList\n sections={visibleHeaderSections}\n draggable={Boolean(onSidenavContextActionsChange)}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n activeNodeId={headerActiveNodeId}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n nodeGap=\"1px\"\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n onReorderSections={(nextSectionIds) => onReorderSections(\"header\", nextSectionIds)}\n onReorderNodes={onReorderNodes}\n canMove={treeRenderer.canMove}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Flex>\n ) : null}\n <TreeViewSearch\n visible={!loading && Boolean(treeRenderer.searchable)}\n placeholder={treeRenderer.searchPlaceholder}\n value={filter}\n onChange={setFilter}\n />\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n w=\"full\"\n viewportRef={scrollRef}\n viewportProps={{\n display: \"block\",\n style: { overflowX: \"hidden\" },\n }}\n contentProps={{\n style: { minWidth: \"100%\", width: \"100%\", minHeight: \"100%\", display: \"flex\", flexDirection: \"column\" },\n }}\n >\n <Box w=\"full\" minW=\"0\" flex=\"1 0 auto\" display=\"flex\" flexDirection=\"column\">\n <TreeViewBody\n error={error}\n loading={loading}\n moduleLoading={treeState.loading}\n sections={visibleSections}\n backgroundContextActions={onSidenavContextActionsChange ? undefined : backgroundContextActions}\n draggable={Boolean(onSidenavContextActionsChange)}\n customizationAvailable={Boolean(onSidenavContextActionsChange)}\n activeNodeId={bodyActiveNodeId}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n scrollRef={scrollRef}\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n onReorderSections={(nextSectionIds) => onReorderSections(\"content\", nextSectionIds)}\n onReorderNodes={onReorderNodes}\n canMove={treeRenderer.canMove}\n onMoveNode={moveNode}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Box>\n </ScrollArea>\n {!loading && visibleFooterSections.length > 0 ? (\n <Flex bg={workbenchBackgrounds.sidenav} flexShrink={0}>\n <TreeList\n sections={visibleFooterSections}\n draggable={Boolean(onSidenavContextActionsChange)}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n activeNodeId={footerActiveNodeId}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n nodeGap=\"1px\"\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n onReorderSections={(nextSectionIds) => onReorderSections(\"footer\", nextSectionIds)}\n onReorderNodes={onReorderNodes}\n canMove={treeRenderer.canMove}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Flex>\n ) : null}\n <TreeParamsDialog\n request={paramsRequest}\n renderParamField={renderParamField}\n workbench={workbench}\n onClose={() => setParamsRequest(null)}\n />\n </Flex>\n </TreeListDragProvider>\n );\n};\n","import { useSyncExternalStore } from \"react\";\nimport type { SettingsRegistry } from \"../../core\";\n\nexport const useSettingsRevision = (settings: SettingsRegistry) =>\n useSyncExternalStore(\n (listener) => settings.store.subscribe(() => listener()),\n () => settings.store.getState().revision,\n () => settings.store.getState().revision,\n );\n","import { Box, Flex, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { EmptyState, ScrollArea } from \"@pstdio/ui\";\nimport { type ReactNode, useEffect, useState } from \"react\";\nimport {\n type CollectionSettingsPanel,\n getWorkbenchRenderers,\n type PreferenceScope,\n type SettingsRegistry,\n type WorkbenchPanelRenderInput,\n} from \"../../core\";\nimport { WorkbenchPreferencesForm } from \"../renderers/settings/preferences-form\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { useSettingsRevision } from \"./use-settings-revision\";\nexport interface SettingsSurfacePanelProps {\n input: WorkbenchPanelRenderInput;\n settings: SettingsRegistry;\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n}\nconst Centered = (props: { children: ReactNode }) => (\n <Flex h=\"full\" minH=\"0\" align=\"center\" justify=\"center\" p=\"lg\">\n {props.children}\n </Flex>\n);\nconst ScrollableSettingsContent = (props: { children: ReactNode }) => (\n <ScrollArea h=\"full\" minH=\"0\" contentProps={{ h: \"full\", minH: \"full\" }}>\n <Box h=\"full\" minH=\"full\">\n {props.children}\n </Box>\n </ScrollArea>\n);\nconst SettingsViewContent = (props: { input: WorkbenchPanelRenderInput; panelId: string; viewId: string }) => {\n const { input, panelId, viewId } = props;\n const renderer = useWorkbenchStore(getWorkbenchRenderers(input.workbench).store, (state) => state.renderers[viewId]);\n useWorkbenchStore(getWorkbenchRenderers(input.workbench).store, (state) => state.refreshKeys[viewId] ?? 0);\n if (!renderer) {\n return (\n <Centered>\n <EmptyState title=\"Settings View not found\" />\n </Centered>\n );\n }\n return (\n <ScrollableSettingsContent>\n {renderer.render({ ...input, instance: { ...input.instance, panelId, viewId } }) as ReactNode}\n </ScrollableSettingsContent>\n );\n};\n// Resolve async collection data before rendering its registered View. The View\n// can read the current item from settings by the stable panel and item ids.\nconst CollectionItemView = (props: {\n panel: CollectionSettingsPanel;\n itemId: string;\n input: WorkbenchPanelRenderInput;\n}) => {\n const { panel, itemId, input } = props;\n const resolveCollectionItem = input.workbench.settings.resolveCollectionItem;\n const [state, setState] = useState<{\n status: \"loading\" | \"ready\" | \"missing\";\n }>({\n status: \"loading\",\n });\n useEffect(() => {\n let alive = true;\n setState({ status: \"loading\" });\n resolveCollectionItem(panel.id, itemId).then((item) => {\n if (!alive) return;\n setState(item === undefined ? { status: \"missing\" } : { status: \"ready\" });\n });\n return () => {\n alive = false;\n };\n }, [panel, itemId, resolveCollectionItem]);\n if (state.status === \"loading\")\n return (\n <Centered>\n <Spinner size=\"sm\" />\n </Centered>\n );\n if (state.status === \"missing\")\n return (\n <Centered>\n <EmptyState title=\"Item not found\" />\n </Centered>\n );\n return <SettingsViewContent input={input} panelId={panel.id} viewId={panel.viewId} />;\n};\n// The single main-region renderer for the settings surface. Dispatches the open\n// resource to a schema form, a custom view, or a collection item editor.\nexport const SettingsSurfacePanel = (props: SettingsSurfacePanelProps) => {\n const { input, settings, resolveScopeId } = props;\n const revision = useSettingsRevision(settings);\n const resource = input.instance.resource;\n const panelId = typeof resource?.metadata?.panelId === \"string\" ? resource.metadata.panelId : undefined;\n const itemId = typeof resource?.metadata?.itemId === \"string\" ? resource.metadata.itemId : undefined;\n const panel = panelId ? settings.getPanel(panelId) : undefined;\n if (!panel) {\n return (\n <Centered>\n <EmptyState title=\"Select a settings entry\" description=\"Pick an item from the settings sidenav.\" />\n </Centered>\n );\n }\n if (panel.kind === \"view\") return <SettingsViewContent input={input} panelId={panel.id} viewId={panel.viewId} />;\n if (panel.kind === \"collection\") {\n if (!itemId)\n return (\n <Centered>\n <EmptyState title={panel.title} />\n </Centered>\n );\n return (\n <CollectionItemView\n key={`${resourceKey(resource) ?? itemId}:${revision}`}\n panel={panel}\n itemId={itemId}\n input={input}\n />\n );\n }\n return (\n <ScrollArea h=\"full\" minH=\"0\" contentProps={{ p: \"lg\", display: \"flex\", flexDirection: \"column\", gap: \"md\" }}>\n <Stack gap=\"xs\">\n <Text textStyle=\"heading/M/semibold\">{panel.title}</Text>\n {panel.description && (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" maxW=\"640px\">\n {panel.description}\n </Text>\n )}\n </Stack>\n <WorkbenchPreferencesForm\n preferences={input.workbench.preferences}\n names={panel.preferences}\n resolveScopeId={resolveScopeId}\n mode={panel.save ?? \"live\"}\n />\n </ScrollArea>\n );\n};\n","import { Box, Flex, Text } from \"@chakra-ui/react\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { ResizableSplitLayout } from \"@pstdio/ui\";\nimport type { PreferenceScope, SettingsRegistry, WorkbenchPanelRenderInput } from \"../../core\";\nimport { WorkbenchTreeView } from \"../renderers/tree/tree-view\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { SettingsSurfacePanel } from \"./settings-surface-panel\";\nimport { useSettingsRevision } from \"./use-settings-revision\";\nexport interface SettingsOverlayProps {\n input: WorkbenchPanelRenderInput;\n settings: SettingsRegistry;\n navTreeId: string;\n title: string;\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n}\n// The settings surface rendered inside the overlay dialog: a titled header bar,\n// then a full-height resizable nav on the left and the dispatching panel on the\n// right. Nav clicks execute the settings command, which re-opens this singleton\n// overlay with the new resource — selection stays resource-driven and the dialog\n// never closes mid-navigation.\nexport const SettingsOverlay = (props: SettingsOverlayProps) => {\n const { input, settings, navTreeId, title, resolveScopeId } = props;\n useSettingsRevision(settings);\n const resource = input.instance.resource;\n const nav = (\n <Box h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" bg=\"bg.subtle\">\n <WorkbenchTreeView\n workbench={input.workbench}\n treeViewId={navTreeId}\n resource={resource}\n activeNodeId={resourceKey(resource)}\n />\n </Box>\n );\n const content = (\n <Box flex=\"1\" h=\"full\" minH=\"0\" minW=\"0\">\n <SettingsSurfacePanel input={input} settings={settings} resolveScopeId={resolveScopeId} />\n </Box>\n );\n return (\n <Flex direction=\"column\" position=\"absolute\" inset=\"0\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <Flex\n align=\"center\"\n bg=\"bg.subtle\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n flexShrink={0}\n gap=\"2\"\n h=\"12\"\n px=\"3.5\"\n >\n <Box color=\"fg.accent\" display=\"inline-flex\">\n <WorkbenchIcon name=\"settings\" size={16} />\n </Box>\n <Text fontWeight=\"semibold\" textStyle=\"sm\">\n {title}\n </Text>\n </Flex>\n <Box flex=\"1\" minH=\"0\" minW=\"0\" position=\"relative\" overflow=\"hidden\">\n <ResizableSplitLayout\n position=\"absolute\"\n inset=\"0\"\n minH=\"0\"\n minW=\"0\"\n resizableSide=\"left\"\n resizablePanel={nav}\n contentPanel={content}\n defaultSizePx={280}\n minSizePx={220}\n maxSizePx={420}\n contentMinSizePx={360}\n collapsible={false}\n resizeLabel=\"Resize settings navigation\"\n separator=\"line\"\n />\n </Box>\n </Flex>\n );\n};\n","import type { ResourceRef, SettingsScope } from \"../../core\";\nexport const SETTINGS_RESOURCE_KIND = \"workbench-settings\";\nexport const WORKBENCH_SETTINGS_OPEN_COMMAND_ID = \"workbench.settings.open\";\nexport const settingsPanelResource = (panel: { id: string; title: string; icon?: string }): ResourceRef => ({\n type: SETTINGS_RESOURCE_KIND,\n id: panel.id,\n label: panel.title,\n icon: panel.icon,\n metadata: { panelId: panel.id },\n});\nexport const settingsItemResource = (\n panelId: string,\n item: {\n id: string;\n label: string;\n icon?: string;\n },\n): ResourceRef => ({\n type: SETTINGS_RESOURCE_KIND,\n id: `${panelId}::${item.id}`,\n label: item.label,\n icon: item.icon,\n metadata: { panelId, itemId: item.id },\n});\n// Project-scoped entries stay hidden until a project scope id is available; global\n// entries are always visible. Mirrors the old dashboards' projectless behavior.\nexport const isSettingsScopeVisible = (scope: SettingsScope | undefined, hasProjectScope: boolean) =>\n (scope ?? \"project\") !== \"project\" || hasProjectScope;\n","import { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type {\n CollectionSettingsPanel,\n RegisteredSettingsPanel,\n SettingsAction,\n SettingsRegistry,\n TreeAction,\n TreeNode,\n TreeViewSection,\n} from \"../../core\";\nimport {\n isSettingsScopeVisible,\n settingsItemResource,\n settingsPanelResource,\n WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n} from \"./settings-resources\";\nexport const FALLBACK_SECTION_ID = \"settings\";\nconst toTreeActions = (actions: SettingsAction[] | undefined): TreeAction[] | undefined =>\n actions?.map((action) => ({ id: action.id, label: action.label, icon: action.icon, run: action.run }));\nconst collectionItemNode = (panel: CollectionSettingsPanel, item: unknown): TreeNode => {\n const id = panel.itemId(item);\n const label = panel.itemLabel(item);\n const icon = panel.itemIcon?.(item);\n const resource = settingsItemResource(panel.id, { id, label, icon });\n return {\n id: resourceKey(resource),\n label,\n icon,\n resource,\n target: {\n kind: \"command\",\n commandId: WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n args: { panelId: panel.id, itemId: id },\n },\n };\n};\nconst orderGroupKeys = (keys: string[], order: string[] | undefined) => {\n const indexOf = (key: string) => {\n const index = order?.indexOf(key) ?? -1;\n return index === -1 ? Number.POSITIVE_INFINITY : index;\n };\n return [...keys].sort((left, right) => indexOf(left) - indexOf(right));\n};\nconst collectionChildren = async (panel: CollectionSettingsPanel): Promise<TreeNode[]> => {\n const items = await Promise.resolve(panel.items()).catch(() => []);\n if (!panel.groupBy) return items.map((item) => collectionItemNode(panel, item));\n const groupBy = panel.groupBy;\n const byKey = new Map<string, unknown[]>();\n for (const item of items) {\n const key = groupBy.key(item);\n const list = byKey.get(key) ?? [];\n list.push(item);\n byKey.set(key, list);\n }\n return orderGroupKeys([...byKey.keys()], groupBy.order).map((key) => ({\n id: `${panel.id}:group:${key}`,\n label: groupBy.label(key),\n icon: groupBy.icon?.(key),\n collapsible: true,\n children: (byKey.get(key) ?? []).map((item) => collectionItemNode(panel, item)),\n }));\n};\nconst panelToNode = async (panel: RegisteredSettingsPanel): Promise<TreeNode> => {\n if (panel.kind === \"collection\") {\n return {\n id: `settings-collection:${panel.id}`,\n label: panel.title,\n icon: panel.icon,\n collapsible: true,\n actions: toTreeActions(panel.actions),\n children: await collectionChildren(panel),\n };\n }\n const resource = settingsPanelResource(panel);\n return {\n id: resourceKey(resource),\n label: panel.title,\n icon: panel.icon,\n resource,\n target: {\n kind: \"command\",\n commandId: WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n args: { panelId: panel.id },\n },\n };\n};\nexport interface BuildSettingsTreeInput {\n settings: SettingsRegistry;\n hasProjectScope: boolean;\n matchesWhen(expression?: string): boolean;\n}\n// Derives the settings navigation tree from the registry: one section per registered\n// section (headerless when titleless), schema/custom panels as leaves, and collection\n// panels expanded into per-item nodes (optionally grouped). Scope gates project entries.\nexport const buildSettingsTreeBody = async (input: BuildSettingsTreeInput): Promise<TreeViewSection[]> => {\n const { settings, hasProjectScope, matchesWhen } = input;\n const sections = settings.listSections();\n const sectionsById = new Map(sections.map((section) => [section.id, section]));\n const panels = settings\n .listPanels()\n .filter((panel) => isSettingsScopeVisible(panel.scope, hasProjectScope) && matchesWhen(panel.when));\n const bySection = new Map<string, RegisteredSettingsPanel[]>();\n for (const panel of panels) {\n const sectionId = panel.section && sectionsById.has(panel.section) ? panel.section : FALLBACK_SECTION_ID;\n const list = bySection.get(sectionId) ?? [];\n list.push(panel);\n bySection.set(sectionId, list);\n }\n const renderOrder = sections.map((section) => section.id);\n if (bySection.has(FALLBACK_SECTION_ID) && !sectionsById.has(FALLBACK_SECTION_ID)) {\n renderOrder.push(FALLBACK_SECTION_ID);\n }\n const result: TreeViewSection[] = [];\n for (const sectionId of renderOrder) {\n const section = sectionsById.get(sectionId);\n // Sections are containers — only hide one that is *explicitly* project-scoped.\n // No-scope sections fall through and are dropped below if they have no content.\n if (section?.scope === \"project\" && !hasProjectScope) continue;\n const sectionPanels = bySection.get(sectionId) ?? [];\n const actions = toTreeActions(section?.actions);\n if (sectionPanels.length === 0 && !actions) continue;\n const nodes: TreeNode[] = [];\n for (const panel of sectionPanels) nodes.push(await panelToNode(panel));\n // Settings groups are plain labels, not accordions — the whole tree stays visible.\n result.push({ id: sectionId, label: section?.title, actions, nodes, collapsible: false });\n }\n return result;\n};\n","import {\n type PreferenceScope,\n standardResourceIcons,\n type WorkbenchModuleContext,\n type WorkbenchModuleContribution,\n} from \"../../core\";\nimport { SettingsOverlay } from \"./settings-overlay\";\nimport {\n isSettingsScopeVisible,\n settingsItemResource,\n settingsPanelResource,\n WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n} from \"./settings-resources\";\nimport { SettingsSurfacePanel } from \"./settings-surface-panel\";\nimport { buildSettingsTreeBody, FALLBACK_SECTION_ID } from \"./settings-tree\";\n\nexport interface WorkbenchSettingsModuleOptions {\n /** Maps a preference scope (e.g. \"project\") to its scope id; project entries hide until this resolves. */\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n /** Heading shown at the top of the settings overlay. */\n title?: string;\n}\n\n// The single overlay placement that hosts the whole settings surface.\nexport const WORKBENCH_SETTINGS_WIDGET_ID = \"workbench.settings\";\nexport const WORKBENCH_SETTINGS_NAV_WIDGET_ID = \"workbench.settings.nav\";\nexport const WORKBENCH_SETTINGS_PANEL_WIDGET_ID = \"workbench.settings.panel\";\n\n// Built-in command to open settings at the first visible panel. Always registered\n// by the surface, so it is available in the command palette without host wiring;\n// hosts only add a curated menu item pointing at this id if they want one.\nexport { WORKBENCH_SETTINGS_OPEN_COMMAND_ID } from \"./settings-resources\";\n\nconst WIDGET_ID = WORKBENCH_SETTINGS_WIDGET_ID;\n\nconst openSettings = (input: { args: unknown; ctx: WorkbenchModuleContext; hasProjectScope: () => boolean }) => {\n const { args, ctx, hasProjectScope } = input;\n const requested = args && typeof args === \"object\" ? args : undefined;\n const panelId = requested && \"panelId\" in requested ? requested.panelId : undefined;\n const itemId = requested && \"itemId\" in requested ? requested.itemId : undefined;\n const requestedPanel = typeof panelId === \"string\" ? ctx.settings.getPanel(panelId) : undefined;\n const isVisible = (entry: NonNullable<typeof requestedPanel>) =>\n isSettingsScopeVisible(entry.scope, hasProjectScope()) && ctx.context.matches(entry.when);\n const panel =\n (requestedPanel && isVisible(requestedPanel) ? requestedPanel : undefined) ??\n ctx.settings.listPanels().find(isVisible);\n if (!panel) return undefined;\n const resource =\n panel.kind === \"collection\" && typeof itemId === \"string\"\n ? settingsItemResource(panel.id, { id: itemId, label: itemId })\n : settingsPanelResource(panel);\n ctx.overlays.openOverlay(WIDGET_ID, {\n resource,\n title: resource.label,\n });\n return resource;\n};\n\n// The unified Settings surface: a full-window modal overlay containing a nav tree\n// (derived from `ctx.settings`) and a dispatching panel, plus a resource presenter\n// that pops the overlay. Contributors only call ctx.settings.registerSection/\n// registerPanel — this renders and wires everything; hosts add no mode or presenter.\nexport const createWorkbenchSettingsModule = (\n options: WorkbenchSettingsModuleOptions = {},\n): WorkbenchModuleContribution => {\n const title = options.title ?? \"Settings\";\n const hasProjectScope = () => options.resolveScopeId?.(\"project\") !== undefined;\n\n return {\n id: \"workbench.settings.surface\",\n activate(ctx) {\n ctx.views.registerView({\n id: WORKBENCH_SETTINGS_NAV_WIDGET_ID,\n title: `${title} navigation`,\n body: {\n kind: \"tree\",\n // Settings sections read as a single scannable list, so every section starts expanded.\n defaultExpandedSectionIds: [...ctx.settings.listSections().map((section) => section.id), FALLBACK_SECTION_ID],\n getBody: () =>\n buildSettingsTreeBody({\n settings: ctx.settings,\n hasProjectScope: hasProjectScope(),\n matchesWhen: (when) => ctx.context.matches(when),\n }),\n getChildren: () => [],\n },\n });\n\n ctx.views.registerView({\n id: WORKBENCH_SETTINGS_PANEL_WIDGET_ID,\n title,\n body: {\n kind: \"react\",\n render: (input) => (\n <SettingsSurfacePanel input={input} settings={ctx.settings} resolveScopeId={options.resolveScopeId} />\n ),\n },\n });\n\n ctx.views.registerView({\n id: WIDGET_ID,\n title,\n body: {\n kind: \"react\",\n render: (input) => (\n <SettingsOverlay\n input={input}\n settings={ctx.settings}\n navTreeId={WORKBENCH_SETTINGS_NAV_WIDGET_ID}\n title={title}\n resolveScopeId={options.resolveScopeId}\n />\n ),\n },\n });\n ctx.overlays.registerOverlay({\n id: WIDGET_ID,\n viewId: WIDGET_ID,\n config: {\n size: \"xl\",\n scrollBehavior: \"inside\",\n contentHeight: \"min(760px, 88vh)\",\n contentMaxWidth: \"min(1440px, 94vw)\",\n contentWidth: \"94vw\",\n closeTriggerTop: \"3.5\",\n // Settings hosts nested overlays (confirmations, popovers) that portal\n // outside this dialog's content; outside-interact dismissal would treat\n // clicks in them as \"close settings\". Esc and the close button remain.\n closeOnInteractOutside: false,\n },\n });\n\n ctx.commands.registerCommand(\n {\n id: WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n label: \"Open settings\",\n category: \"Settings\",\n icon: standardResourceIcons.settings,\n },\n {\n execute: (args) => openSettings({ args, ctx, hasProjectScope }),\n },\n );\n\n // Keep the tree in sync as contributions register or their context conditions change.\n const refreshNavigation = () => {\n if (ctx.views.getView(WORKBENCH_SETTINGS_NAV_WIDGET_ID)) {\n ctx.views.refreshView(WORKBENCH_SETTINGS_NAV_WIDGET_ID);\n }\n };\n const unsubscribeSettings = ctx.settings.store.subscribe(refreshNavigation);\n const unsubscribeContext = ctx.context.store.subscribe(refreshNavigation);\n return {\n dispose() {\n unsubscribeSettings();\n unsubscribeContext();\n },\n };\n },\n };\n};\n","import type { WorkbenchCore, WorkbenchRegion } from \"../../core\";\n\nexport const resolvePanelCollapsible = (workbench: WorkbenchCore, ...regions: WorkbenchRegion[]) =>\n regions.every((region) => workbench.layout.getRegionCollapsible(region));\n","interface CanAttachWorkbenchPanelMenuInput {\n panelWidth: number;\n targetMenuMinSize: number;\n attachedMenuMinSizes: readonly number[];\n}\n\nexport const PANEL_CONTENT_MIN_SIZE_PX = 120;\nexport const PANEL_MENU_RESIZE_HANDLE_SIZE_PX = 1;\nexport const PANEL_MENU_COLLAPSE_THRESHOLD_PX = 480;\n\nexport const shouldCollapseWorkbenchPanelMenus = (panelWidth: number) =>\n panelWidth > 0 && panelWidth <= PANEL_MENU_COLLAPSE_THRESHOLD_PX;\n\nexport const canAttachWorkbenchPanelMenu = (input: CanAttachWorkbenchPanelMenuInput) => {\n const menuMinSizes = [...input.attachedMenuMinSizes, input.targetMenuMinSize];\n const requiredWidth =\n PANEL_CONTENT_MIN_SIZE_PX +\n menuMinSizes.reduce((total, size) => total + size, 0) +\n menuMinSizes.length * PANEL_MENU_RESIZE_HANDLE_SIZE_PX;\n\n return input.panelWidth >= requiredWidth;\n};\n","import { Box, HStack, IconButton, Menu, Portal, Text } from \"@chakra-ui/react\";\nimport { AttachedMenu, Header, PANEL_HEADER_CONTROL_SIZE, ResizableSplitLayout, Tooltip } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchModeEligibility,\n matchesWorkbenchPanelMenuOwner,\n type WorkbenchCore,\n type WorkbenchPanelMenuRegion,\n type WorkbenchPanelMenuSide,\n type WorkbenchPanelRegion,\n type WorkbenchRegionSize,\n workbenchPanelMenuRegions,\n} from \"../../core\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { resolvePanelCollapsible } from \"../workbench/workbench-panel-state\";\nimport {\n canAttachWorkbenchPanelMenu,\n PANEL_CONTENT_MIN_SIZE_PX,\n shouldCollapseWorkbenchPanelMenus,\n} from \"./panel-menu-sizing\";\n\nconst PANEL_MENU_SIZE = { defaultPx: 280, minPx: 144, maxPx: 320 };\n\nconst panelLabels: Record<WorkbenchPanelRegion, string> = {\n main: \"Main\",\n secondary: \"Secondary\",\n side: \"Side\",\n};\n\nconst resolveRegionSize = (regionSize: WorkbenchRegionSize | undefined) => ({\n defaultPx: regionSize?.defaultPx ?? PANEL_MENU_SIZE.defaultPx,\n minPx: regionSize?.minPx ?? PANEL_MENU_SIZE.minPx,\n maxPx: regionSize ? regionSize.maxPx : PANEL_MENU_SIZE.maxPx,\n});\n\nexport const getWorkbenchPanelMenuLabel = (panel: WorkbenchPanelRegion, side: WorkbenchPanelMenuSide) =>\n `${panelLabels[panel]} ${side} menu`;\n\ninterface WorkbenchPanelMenuView {\n region: WorkbenchPanelMenuRegion;\n side: WorkbenchPanelMenuSide;\n label: string;\n title: string;\n icon: string;\n has: boolean;\n collapsed: boolean;\n responsiveCollapsed: boolean;\n collapsible: boolean;\n size: ReturnType<typeof resolveRegionSize>;\n onOpen: () => void;\n onCollapsedChange: (collapsed: boolean) => void;\n}\n\nconst useWorkbenchPanelMenu = (\n workbench: WorkbenchCore,\n panel: WorkbenchPanelRegion,\n side: WorkbenchPanelMenuSide,\n responsiveCollapsed = false,\n): WorkbenchPanelMenuView => {\n const region = workbenchPanelMenuRegions[panel][side];\n const locationResource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const layout = useWorkbenchStore(workbench.layout.store, (state) => state.layout);\n const registeredWidgets = useWorkbenchStore(workbench.layout.store, (state) => state.widgets);\n const currentRegionState = layout.regions[region];\n const activeSubPanel = getActiveWorkbenchSubPanel(layout, panel, locationResource, {\n ignoreOwnerResourceKey: panel === \"side\",\n });\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layout);\n const regionState = {\n ...currentRegionState,\n widgets: currentRegionState.widgets.filter((placement) => {\n const contribution = registeredWidgets[placement.contributionId];\n return contribution\n ? (panel === \"side\"\n ? matchesWorkbenchModeEligibility(contribution, modeId)\n : isWorkbenchPanelPlacementVisible(contribution, locationResource, modeId, placement, {\n location: activeLocationPanel,\n })) &&\n matchesWorkbenchPanelMenuOwner(contribution, {\n locationPanel: activeLocationPanel,\n subPanel: activeSubPanel,\n })\n : false;\n }),\n };\n const activePlacement =\n regionState.widgets.find((placement) => placement.widgetId === regionState.activeWidgetId) ??\n regionState.widgets[0];\n const widget = activePlacement ? registeredWidgets[activePlacement.contributionId] : undefined;\n const collapsible = useWorkbenchStore(workbench.layout.store, () => resolvePanelCollapsible(workbench, region));\n const panelStateKey = activePlacement ? `panel-menu:${activePlacement.widgetId}` : region;\n const open = useWorkbenchStore(workbench.panelMenuState.store, (state) => state.openByMenuId[panelStateKey] ?? true);\n\n return {\n region,\n side,\n label: getWorkbenchPanelMenuLabel(panel, side),\n title: widget?.title ?? getWorkbenchPanelMenuLabel(panel, side),\n icon: widget?.icon ?? (side === \"left\" ? \"PanelLeft\" : \"PanelRight\"),\n has: regionState.widgets.length > 0 || Boolean(workbench.layout.getPlaceholder(region)),\n collapsed: (!open || responsiveCollapsed) && collapsible,\n responsiveCollapsed,\n collapsible,\n size: resolveRegionSize(workbench.layout.getRegionSize(region)),\n onOpen: () => workbench.panelMenuState.setOpen(panelStateKey, true),\n onCollapsedChange: (collapsed) => {\n if (!collapsed || collapsible) workbench.panelMenuState.setOpen(panelStateKey, !collapsed);\n },\n };\n};\n\nconst WorkbenchPanelMenu = (props: { workbench: WorkbenchCore; view: WorkbenchPanelMenuView }) => {\n const { view, workbench } = props;\n const panel = view.region.split(\"-\")[0] as WorkbenchPanelRegion;\n const background = panel === \"side\" ? workbenchBackgrounds.widget : workbenchBackgrounds.panel;\n\n return (\n <AttachedMenu\n data-workbench-panel-menu={`${panel}-${view.side}`}\n data-workbench-region={view.region}\n bg={background}\n >\n <WorkbenchRegion workbench={workbench} region={view.region} title={view.label} transparent />\n </AttachedMenu>\n );\n};\n\nconst addPanelMenu = (input: { content: ReactNode; view: WorkbenchPanelMenuView; workbench: WorkbenchCore }) => {\n const { content, view, workbench } = input;\n if (!view.has) return content;\n\n return (\n <ResizableSplitLayout\n minH=\"0\"\n minW=\"0\"\n resizableSide={view.side}\n resizablePanel={<WorkbenchPanelMenu workbench={workbench} view={view} />}\n contentPanel={content}\n collapsed={view.collapsed}\n collapsible={view.collapsible}\n defaultSizePx={view.size.defaultPx}\n minSizePx={view.size.minPx}\n maxSizePx={view.size.maxPx}\n contentMinSizePx={PANEL_CONTENT_MIN_SIZE_PX}\n resizeLabel={`Resize ${view.label}`}\n separator=\"line\"\n onSizeChange={(width) => workbench.layout.setRegionSize(view.region, width)}\n onCollapsedChange={view.onCollapsedChange}\n />\n );\n};\n\nexport const WorkbenchPanelMenuLayout = (props: {\n workbench: WorkbenchCore;\n panel: WorkbenchPanelRegion;\n children: ReactNode;\n}) => {\n const { children, panel, workbench } = props;\n const panelWidth = useWorkbenchPanelWidth(panel);\n const responsiveCollapsed = shouldCollapseWorkbenchPanelMenus(panelWidth);\n const left = useWorkbenchPanelMenu(workbench, panel, \"left\", responsiveCollapsed);\n const right = useWorkbenchPanelMenu(workbench, panel, \"right\", responsiveCollapsed);\n const withRight = addPanelMenu({ content: children, view: right, workbench });\n return addPanelMenu({ content: withRight, view: left, workbench });\n};\n\nconst useWorkbenchPanelWidth = (panel: WorkbenchPanelRegion) => {\n const [width, setWidth] = useState(0);\n\n useEffect(() => {\n const element = document.querySelector<HTMLElement>(`[data-workbench-panel=\"${panel}\"]`);\n if (!element) return;\n\n const measure = () => setWidth(element.clientWidth);\n measure();\n const observer = new ResizeObserver(measure);\n observer.observe(element);\n return () => observer.disconnect();\n }, [panel]);\n\n return width;\n};\n\ninterface WorkbenchPanelMenuOpenerProps {\n view: WorkbenchPanelMenuView;\n workbench: WorkbenchCore;\n canAttach: boolean;\n}\n\nconst WorkbenchPanelMenuOpener = (props: WorkbenchPanelMenuOpenerProps) => {\n const { canAttach, view, workbench } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n return (\n <Menu.Root\n positioning={{ placement: \"bottom-start\", offset: { mainAxis: 0 }, getAnchorElement: () => triggerRef.current }}\n onExitComplete={() => triggerRef.current?.focus()}\n >\n <Tooltip content={view.title}>\n <Menu.Trigger asChild>\n <IconButton\n ref={triggerRef}\n variant=\"ghost\"\n size={PANEL_HEADER_CONTROL_SIZE}\n aria-label={`Open ${view.label}`}\n flexShrink={0}\n >\n <WorkbenchIcon name={view.side === \"left\" ? \"PanelLeftOpen\" : \"PanelRightOpen\"} size={14} />\n </IconButton>\n </Menu.Trigger>\n </Tooltip>\n <Portal>\n <Menu.Positioner>\n <Menu.Content\n aria-label={`${view.label} controls`}\n data-workbench-panel-menu-controls={view.region}\n boxShadow=\"none\"\n display=\"flex\"\n flexDirection=\"column\"\n h=\"64\"\n maxW=\"64\"\n minW=\"64\"\n overflow=\"hidden\"\n p=\"0\"\n w=\"64\"\n >\n <Header variant=\"narrow\" borderBottomWidth=\"1px\" borderColor=\"border.subtle\" flexShrink={0} gap=\"xs\">\n <WorkbenchIcon name={view.icon} size={14} />\n <Text flex=\"1\" minW=\"0\" textStyle=\"label/S/medium\" truncate>\n {view.title}\n </Text>\n <Tooltip content={canAttach ? `Attach ${view.label}` : \"Panel is too narrow to attach this menu\"}>\n <Box as=\"span\" display=\"inline-flex\">\n <IconButton\n variant=\"ghost\"\n size=\"xs\"\n aria-label={`Attach ${view.label}`}\n disabled={!canAttach}\n onClick={view.onOpen}\n >\n <WorkbenchIcon name={view.side === \"left\" ? \"PanelLeft\" : \"PanelRight\"} size={14} />\n </IconButton>\n </Box>\n </Tooltip>\n </Header>\n <Box flex=\"1\" minH=\"0\" minW=\"0\">\n <WorkbenchRegion workbench={workbench} region={view.region} title={view.label} transparent />\n </Box>\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n\nexport const WorkbenchPanelMenuOpeners = (props: { workbench: WorkbenchCore; panel: WorkbenchPanelRegion }) => {\n const { panel, workbench } = props;\n const panelWidth = useWorkbenchPanelWidth(panel);\n const responsiveCollapsed = shouldCollapseWorkbenchPanelMenus(panelWidth);\n const left = useWorkbenchPanelMenu(workbench, panel, \"left\", responsiveCollapsed);\n const right = useWorkbenchPanelMenu(workbench, panel, \"right\", responsiveCollapsed);\n const views = [left, right];\n const closedMenus = [left, right].filter((view) => view.has && view.collapsed);\n\n if (closedMenus.length === 0) return null;\n\n return (\n <HStack flexShrink={0} gap=\"2xs\" minW=\"0\">\n {closedMenus.map((view) => {\n const attachedMenuMinSizes = views\n .filter((candidate) => candidate.has && !candidate.collapsed)\n .map((candidate) => candidate.size.minPx);\n const canAttach =\n !view.responsiveCollapsed &&\n canAttachWorkbenchPanelMenu({\n panelWidth,\n targetMenuMinSize: view.size.minPx,\n attachedMenuMinSizes,\n });\n\n return <WorkbenchPanelMenuOpener key={view.region} view={view} workbench={workbench} canAttach={canAttach} />;\n })}\n </HStack>\n );\n};\n","import { useShallow } from \"zustand/react/shallow\";\nimport type { WorkbenchCore, WorkbenchRegion } from \"../../core\";\nimport { useWorkbenchStore } from \"./use-workbench-store\";\n\n// Read mode policy through its store so the React compiler sees policy changes.\nexport const useWorkbenchModeRegionSettings = (workbench: WorkbenchCore, region: WorkbenchRegion) =>\n useWorkbenchStore(\n workbench.modes.store,\n useShallow(() => workbench.layout.getRegionSettings(region)),\n );\n","import { Box, Flex, IconButton, Text } from \"@chakra-ui/react\";\nimport { AttachedPanel, BubbleButton, BubblePanel, Header, PANEL_HEADER_CONTROL_SIZE, Tooltip } from \"@pstdio/ui\";\nimport { MessageCircle, Minimize2 } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { WorkbenchPanelMenuLayout, WorkbenchPanelMenuOpeners } from \"../panel-menu/panel-menu\";\nimport { useWorkbenchModeRegionSettings } from \"../shared/use-workbench-mode-region-settings\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\n\ninterface WorkbenchSidePanelProps {\n workbench: WorkbenchCore;\n contentSlotRef: (node: HTMLDivElement | null) => void;\n bottomOffset?: string;\n header?: ReactNode;\n bubbleIcon?: ReactNode;\n onOpen?: () => void;\n}\n\nconst floatingPanelBottom = (bottomOffset: string | undefined) =>\n bottomOffset ? `calc(${bottomOffset} + 0.75rem)` : \"3\";\n\nconst launcherBottom = (bottomOffset: string | undefined) => (bottomOffset ? `calc(${bottomOffset} + 1.5rem)` : \"6\");\n\nconst WorkbenchSidePanelTitle = () => (\n <Box flex=\"1\" minW=\"0\">\n <Text textStyle=\"label/S/medium\" color=\"fg\" truncate>\n Side Panel\n </Text>\n </Box>\n);\n\ninterface WorkbenchSidePanelHeaderProps {\n header?: ReactNode;\n}\n\nconst WorkbenchSidePanelHeader = (props: WorkbenchSidePanelHeaderProps) => {\n const { header } = props;\n\n return header ?? <WorkbenchSidePanelTitle />;\n};\n\nexport const WorkbenchAttachedSidePanel = (props: WorkbenchSidePanelProps) => {\n const { workbench, contentSlotRef, header } = props;\n const settings = useWorkbenchModeRegionSettings(workbench, \"side\");\n const canFloat = useWorkbenchStore(workbench.modes.store, () => workbench.sidePanel.canFloat());\n\n return (\n <WorkbenchFocusRegion workbench={workbench} region=\"side\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <AttachedPanel\n data-testid=\"workbench-side-panel-attached\"\n data-workbench-panel=\"side\"\n data-workbench-region=\"side\"\n width=\"full\"\n minWidth=\"0\"\n bg={workbenchBackgrounds.widget}\n layerStyle=\"panel\"\n header={\n settings?.showHeader !== false && (header || canFloat) ? (\n <Header data-workbench-panel-header=\"side\" variant=\"main\" flexShrink={0} gap=\"sm\">\n <WorkbenchSidePanelHeader header={header} />\n <WorkbenchPanelMenuOpeners workbench={workbench} panel=\"side\" />\n {canFloat ? (\n <Tooltip content=\"Float Side Panel\">\n <IconButton\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label=\"Float Side Panel\"\n onClick={() => workbench.sidePanel.setMode(\"floating\")}\n >\n <Minimize2 size={16} />\n </IconButton>\n </Tooltip>\n ) : null}\n </Header>\n ) : undefined\n }\n >\n <WorkbenchPanelMenuLayout workbench={workbench} panel=\"side\">\n <Flex ref={contentSlotRef} flex=\"1\" minH={0} direction=\"column\" />\n </WorkbenchPanelMenuLayout>\n </AttachedPanel>\n </WorkbenchFocusRegion>\n );\n};\n\nexport const WorkbenchFloatingSidePanel = (props: WorkbenchSidePanelProps) => {\n const { workbench, contentSlotRef, bottomOffset, header, bubbleIcon, onOpen } = props;\n const mode = workbench.sidePanel.getMode();\n\n if (!workbench.sidePanel.canFloat() || mode === \"attached\") return null;\n\n if (mode === \"closed\") {\n return (\n <BubbleButton\n aria-label=\"Open Side Panel\"\n containerProps={{ bottom: launcherBottom(bottomOffset) }}\n tooltip=\"Open Side Panel\"\n onClick={onOpen ?? (() => workbench.sidePanel.setMode(\"floating\"))}\n >\n {bubbleIcon ?? <MessageCircle size={20} strokeWidth={2} />}\n </BubbleButton>\n );\n }\n\n return (\n <BubblePanel\n isOpen\n aria-label=\"Side Panel\"\n testId=\"workbench-side-panel-floating\"\n closeLabel=\"Close Side Panel\"\n containerProps={{ bottom: floatingPanelBottom(bottomOffset), bg: workbenchBackgrounds.widget }}\n popOutLabel=\"Reattach Side Panel\"\n onClose={() => workbench.sidePanel.setMode(\"closed\")}\n onPopOut={() => workbench.sidePanel.setMode(\"attached\")}\n menu={<WorkbenchSidePanelHeader header={header} />}\n >\n <Flex ref={contentSlotRef} flex=\"1\" minH={0} direction=\"column\" />\n </BubblePanel>\n );\n};\n","export const terminalPlacementBindingId = (scope: string | undefined, instanceId: string) =>\n JSON.stringify([scope, instanceId]);\n","import { Box, Center, Text } from \"@chakra-ui/react\";\nimport { useThemePreference } from \"@pstdio/ui\";\nimport { Terminal, type TerminalBridge } from \"@pstdio/ui/terminal\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { ResourceRef, WorkbenchCore, WorkbenchPanelInstance, WorkbenchTerminalController } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { terminalPlacementBindingId } from \"./terminal-placement-binding\";\n\ninterface ControllerTerminalBridgeOptions {\n getBindingId?: () => string | undefined;\n getResource?: () => ResourceRef | undefined;\n getTitle?: () => string | undefined;\n}\n\nconst workspacePathFromResource = (resource: ResourceRef | undefined) => {\n const workspacePath = resource?.metadata?.workspacePath;\n return typeof workspacePath === \"string\" && workspacePath.length > 0 ? workspacePath : undefined;\n};\n\nconst withTerminalRequestDefaults = (\n request: Parameters<TerminalBridge[\"openSession\"]>[0],\n resource: ResourceRef | undefined,\n) => {\n const cwd = workspacePathFromResource(resource);\n return cwd && !request.cwd ? { ...request, cwd } : request;\n};\n\n// Adapts the core terminal controller to the renderer-side `TerminalBridge`\n// contract. Sessions opened by the panel land in the same controller registry\n// the `terminal.session` webview capability uses, so host UI and extension\n// webviews always see one session registry.\nexport const createControllerTerminalBridge = (\n terminal: WorkbenchTerminalController,\n options: ControllerTerminalBridgeOptions = {},\n): TerminalBridge => ({\n async openSession(request) {\n const { sessionId } = await terminal.open({\n bindingId: options.getBindingId?.(),\n request: withTerminalRequestDefaults(request, options.getResource?.()),\n title: options.getTitle?.(),\n });\n return {\n id: sessionId,\n write: (data) => terminal.write({ sessionId, data }),\n resize: (cols, rows) => terminal.resize({ sessionId, cols, rows }),\n kill: (signal) => terminal.kill({ sessionId, signal }),\n onData: (handler) => terminal.subscribe(sessionId, { onData: handler }),\n onExit: (handler) => terminal.subscribe(sessionId, { onExit: handler }),\n onError: (handler) => terminal.subscribe(sessionId, { onError: handler }),\n };\n },\n});\n\ninterface WorkbenchTerminalPanelProps {\n placement: WorkbenchPanelInstance;\n workbench: WorkbenchCore;\n}\n\n/**\n * Body of the host-owned terminal panel. Chrome (tab, title, close action,\n * resize) comes from the workbench `secondary` region; this component only mounts\n * the terminal bound to the workbench terminal controller. Collapsing the panel\n * keeps the terminal mounted. Scope changes keep the session alive; the terminal\n * module ends it when its tab is explicitly closed.\n */\nexport const WorkbenchTerminalPanel = (props: WorkbenchTerminalPanelProps) => {\n const { placement, workbench } = props;\n const { themePreference } = useThemePreference();\n const placementRef = useRef(placement);\n placementRef.current = placement;\n const [bridge] = useState(() =>\n createControllerTerminalBridge(workbench.terminal, {\n getBindingId: () =>\n terminalPlacementBindingId(workbench.layout.getPersistenceScope(), placementRef.current.instanceId),\n getResource: () => placementRef.current.resource,\n getTitle: () => placementRef.current.title,\n }),\n );\n const [sessionId, setSessionId] = useState<string>();\n // The terminal resource label follows the session's foreground process name.\n const processTitle = useWorkbenchStore(workbench.terminal.store, (state) =>\n sessionId ? state.sessionsById[sessionId]?.title : undefined,\n );\n const active = useWorkbenchStore(workbench.layout.store, (state) => {\n const region = state.layout.regions.secondary;\n return (region.activeWidgetId ?? region.widgets[0]?.widgetId) === placement.instanceId;\n });\n const updateShellPlacement = workbench.shellPlacements.updatePlacement;\n\n useEffect(() => {\n if (!sessionId || !processTitle) return;\n const currentPlacement = workbench.layout\n .getLayout()\n .regions.secondary.widgets.find((candidate) => candidate.widgetId === placement.instanceId);\n const identity = currentPlacement?.placementIdentity;\n if (identity?.kind === \"shell\" && currentPlacement?.resource) {\n updateShellPlacement(identity, { resource: { ...currentPlacement.resource, label: processTitle } });\n }\n }, [sessionId, processTitle, placement.instanceId, workbench.layout, updateShellPlacement]);\n\n if (!workbench.terminal.isAvailable()) {\n return (\n <Center h=\"full\" px=\"md\">\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n Terminal sessions are not available in this workbench host.\n </Text>\n </Center>\n );\n }\n\n return (\n <Box h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <Terminal\n bridge={bridge}\n theme={/dark/i.test(themePreference) ? \"dark\" : \"light\"}\n autoFocus={active}\n killOnUnmount={false}\n onSessionOpen={setSessionId}\n />\n </Box>\n );\n};\n","import type { ResourceRef, WorkbenchCoreContributionContext, WorkbenchModuleContribution } from \"../../core\";\nimport { toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { terminalPlacementBindingId } from \"./terminal-placement-binding\";\nimport { WorkbenchTerminalPanel } from \"./workbench-terminal-panel\";\n// The host-owned terminal panel in the workbench `secondary` (bottom) region.\n// Exported so hosts can open or assert it directly.\nexport const WORKBENCH_TERMINAL_WIDGET_ID = \"workbench.terminal\";\n// Built-in command to open (or focus) the terminal panel. Registered by the\n// surface module so it is available in the command palette without host wiring.\nexport const WORKBENCH_TERMINAL_OPEN_COMMAND_ID = \"workbench.terminal.open\";\n/** Suggested secondary-region size for hosts that mount the terminal (createWorkbench regionSettings). */\nexport const WORKBENCH_TERMINAL_PANEL_SIZE = { defaultPx: 240, minPx: 128 };\ninterface OpenWorkbenchTerminalOptions {\n resource?: ResourceRef;\n reveal?: boolean;\n}\ntype TerminalResource = OpenWorkbenchTerminalOptions[\"resource\"];\nconst terminalInstanceIds = (ctx: WorkbenchCoreContributionContext) =>\n new Set(\n ctx.layout\n .listPanelInstances(\"secondary\")\n .filter((placement) => placement.viewId === WORKBENCH_TERMINAL_WIDGET_ID)\n .map((placement) => placement.instanceId),\n );\nconst watchClosedTerminalPlacements = (ctx: WorkbenchCoreContributionContext) => {\n // A scope rotation temporarily removes every placement. Only an explicit tab\n // close should end the PTY bound to that placement.\n let changingScope = false;\n const willChangeScope = ctx.layout.onWillChangePersistenceScope(() => {\n changingScope = true;\n });\n const didChangeScope = ctx.layout.onDidChangePersistenceScope(() => {\n changingScope = false;\n });\n const unsubscribeLayout = ctx.layout.store.subscribe((state, previousState) => {\n if (changingScope) return;\n const currentIds = new Set(\n state.layout.regions.secondary.widgets\n .filter((placement) => placement.viewId === WORKBENCH_TERMINAL_WIDGET_ID)\n .map((placement) => placement.widgetId),\n );\n const previousIds = previousState.layout.regions.secondary.widgets\n .filter((placement) => placement.viewId === WORKBENCH_TERMINAL_WIDGET_ID)\n .map((placement) => placement.widgetId);\n const scope = ctx.layout.getPersistenceScope();\n for (const instanceId of previousIds) {\n if (!currentIds.has(instanceId)) void ctx.terminal.killBinding(terminalPlacementBindingId(scope, instanceId));\n }\n });\n return {\n dispose() {\n unsubscribeLayout();\n willChangeScope.dispose();\n didChangeScope.dispose();\n const scope = ctx.layout.getPersistenceScope();\n for (const instanceId of terminalInstanceIds(ctx)) {\n void ctx.terminal.killBinding(terminalPlacementBindingId(scope, instanceId));\n }\n },\n };\n};\nconst terminalTitlePattern = /^Terminal (\\d+)$/;\nconst nextTerminalIndexes = new WeakMap<WorkbenchCoreContributionContext[\"layout\"][\"store\"], number>();\nconst getInitialTerminalIndex = (ctx: WorkbenchCoreContributionContext) => {\n const terminalPlacements = ctx.layout\n .getLayout()\n .regions.secondary.widgets.filter((placement) => placement.viewId === WORKBENCH_TERMINAL_WIDGET_ID);\n const titleIndexes = terminalPlacements\n .map((placement) => terminalTitlePattern.exec(placement.title ?? \"\")?.[1])\n .filter((index): index is string => index !== undefined)\n .map((index) => Number.parseInt(index, 10));\n return Math.max(terminalPlacements.length, ...titleIndexes) + 1;\n};\nconst getNextTerminalTitle = (ctx: WorkbenchCoreContributionContext) => {\n const nextIndex = Math.max(nextTerminalIndexes.get(ctx.layout.store) ?? 1, getInitialTerminalIndex(ctx));\n nextTerminalIndexes.set(ctx.layout.store, nextIndex + 1);\n return `Terminal ${nextIndex}`;\n};\nconst hasWorkspacePath = (resource: TerminalResource) =>\n typeof resource?.metadata?.workspacePath === \"string\" && resource.metadata.workspacePath.length > 0;\nconst getTerminalResource = (ctx: WorkbenchCoreContributionContext, resource: TerminalResource) => {\n const activeResource = ctx.getActiveResource();\n const primaryResource = ctx.getPrimaryResource();\n return (\n (hasWorkspacePath(resource) ? resource : undefined) ??\n (hasWorkspacePath(activeResource) ? activeResource : undefined) ??\n (hasWorkspacePath(primaryResource) ? primaryResource : undefined) ??\n resource ??\n primaryResource\n );\n};\n// Opens a new terminal placement, revealing the bottom region if it is collapsed.\nexport const openWorkbenchTerminal = (\n ctx: WorkbenchCoreContributionContext,\n input: OpenWorkbenchTerminalOptions = {},\n) => {\n const { reveal = true } = input;\n const workspace = getTerminalResource(ctx, input.resource);\n const title = getNextTerminalTitle(ctx);\n const index = Number.parseInt(terminalTitlePattern.exec(title)?.[1] ?? \"1\", 10);\n const id = `${String(index).padStart(8, \"0\")}-${globalThis.crypto.randomUUID()}`;\n const resource: ResourceRef = {\n type: \"terminal\",\n id,\n label: title,\n icon: \"SquareTerminal\",\n metadata: workspace?.metadata,\n };\n const identity = ctx.shellPlacements.openPlacement({\n placementId: WORKBENCH_TERMINAL_WIDGET_ID,\n resource,\n open: \"pin\",\n title,\n });\n if (identity.kind !== \"shell\") throw new Error(\"Terminal placement must be shell-owned\");\n if (reveal) {\n ctx.shell.setRegionOpen(\"secondary\", true);\n }\n const placement = ctx.layout\n .getLayout()\n .regions.secondary.widgets.find(\n (candidate) =>\n candidate.placementIdentity?.kind === \"shell\" &&\n candidate.placementIdentity.placementId === identity.placementId &&\n candidate.placementIdentity.instanceKey === identity.instanceKey,\n );\n if (!placement) throw new Error(`Terminal placement did not open: ${identity.instanceKey}`);\n return toPanelInstance(placement);\n};\n/**\n * Host-owned terminal surface: tabbed placements in the `secondary` region whose\n * chrome, focus, lifecycle, and styling belong to the workbench. Sessions are\n * owned by `workbench.terminal` (the same registry the `terminal.session`\n * webview capability uses); the host injects a session opener via\n * `workbench.terminal.setSessionOpener(...)`. Closing a tab kills its session;\n * disposing the controller kills every live session.\n */\nexport const createWorkbenchTerminalModule = (): WorkbenchModuleContribution => ({\n id: \"workbench.terminal.surface\",\n activate(ctx) {\n const disposables = [\n ctx.views.registerView({\n id: WORKBENCH_TERMINAL_WIDGET_ID,\n title: \"Terminal\",\n body: {\n kind: \"react\",\n render: (input) => <WorkbenchTerminalPanel placement={input.instance} workbench={input.workbench} />,\n },\n }),\n ctx.shellPlacements.registerPlacement({\n id: WORKBENCH_TERMINAL_WIDGET_ID,\n item: {\n kind: \"binding\",\n binding: {\n kinds: [\n {\n kind: \"resource-kind\",\n id: \"terminal\",\n },\n ],\n view: {\n kind: \"view\",\n id: WORKBENCH_TERMINAL_WIDGET_ID,\n },\n cardinality: \"many\",\n add: { kind: \"command\", target: { command: { kind: \"command\", id: WORKBENCH_TERMINAL_OPEN_COMMAND_ID } } },\n },\n },\n region: \"secondary\",\n mountStrategy: \"keep-mounted\",\n // Background flows mint terminals without user intent; a closed Secondary\n // Panel must stay closed until an explicit open reveals it.\n hiddenByDefault: true,\n }),\n watchClosedTerminalPlacements(ctx),\n ctx.commands.registerCommand(\n {\n id: WORKBENCH_TERMINAL_OPEN_COMMAND_ID,\n label: \"Open terminal\",\n category: \"Terminal\",\n icon: \"SquareTerminal\",\n },\n { execute: (_args, context) => openWorkbenchTerminal(ctx, { resource: context?.resource }) },\n ),\n ];\n return disposables;\n },\n});\n","import { defaultThemePreferences } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\n// The theme set a workbench offers: the built-in workbench themes plus whatever\n// is registered in `workbench.themes` (e.g. extension-contributed themes). The\n// list shrinks when a contribution is disposed, so the theme picker only ever\n// lists themes whose owner is still active.\nexport const useWorkbenchThemePreferences = (workbench: WorkbenchCore) => {\n const contributed = useWorkbenchStore(workbench.themes.store, (state) => state.themes);\n return [...defaultThemePreferences, ...contributed];\n};\n","import {\n ChakraProvider,\n type FileIconThemePreferenceOption,\n FileIconThemePreferenceProvider,\n psTheme,\n type ThemePreference,\n type ThemePreferenceOption,\n ThemePreferenceProvider,\n} from \"@pstdio/ui\";\nimport { createContext, type ReactNode, useContext } from \"react\";\n\ninterface WorkbenchThemeProviderProps {\n children: ReactNode;\n initialThemePreference?: ThemePreference;\n defaultThemePreference?: ThemePreference;\n preferenceScope?: string;\n themePreferences?: readonly ThemePreferenceOption[];\n fileIconThemePreferences?: readonly FileIconThemePreferenceOption[];\n}\n\nconst WorkbenchThemeProviderContext = createContext(false);\n\nexport const WorkbenchThemeProvider = (props: WorkbenchThemeProviderProps) => {\n const { children, initialThemePreference, themePreferences, fileIconThemePreferences } = props;\n const hasWorkbenchThemeProvider = useContext(WorkbenchThemeProviderContext);\n\n if (hasWorkbenchThemeProvider) return children;\n\n return (\n <WorkbenchThemeProviderContext value>\n <ThemePreferenceProvider\n initialPreference={initialThemePreference}\n defaultPreference={props.defaultThemePreference}\n preferenceScope={props.preferenceScope}\n themePreferences={themePreferences}\n >\n <FileIconThemePreferenceProvider themePreferences={fileIconThemePreferences}>\n <ChakraProvider value={psTheme}>{children}</ChakraProvider>\n </FileIconThemePreferenceProvider>\n </ThemePreferenceProvider>\n </WorkbenchThemeProviderContext>\n );\n};\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\ninterface WorkbenchThemeScopeProps extends Omit<BoxProps, \"children\"> {\n children: ReactNode;\n}\n\nexport const WorkbenchThemeScope = (props: WorkbenchThemeScopeProps) => {\n const { children, ...boxProps } = props;\n\n return <Box {...boxProps}>{children}</Box>;\n};\n","import { Center, Dialog, Portal } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { getWorkbenchRenderers, type WorkbenchCore, type WorkbenchWidgetPlacement } from \"../../core\";\nimport { toPanelContribution, toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\nexport interface WorkbenchOverlayWidgetConfig {\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"cover\" | \"full\";\n placement?: \"center\" | \"top\" | \"bottom\";\n scrollBehavior?: \"inside\" | \"outside\";\n closeOnEscape?: boolean;\n closeOnInteractOutside?: boolean;\n /** Controls dialog semantics. Every workbench overlay blocks background pointer input. */\n modal?: boolean;\n preventScroll?: boolean;\n trapFocus?: boolean;\n motionPreset?: \"scale\" | \"slide-in-bottom\" | \"slide-in-top\" | \"slide-in-left\" | \"slide-in-right\" | \"none\";\n role?: \"dialog\" | \"alertdialog\";\n contentHeight?: string;\n contentMaxHeight?: string;\n contentMinHeight?: string;\n contentWidth?: string;\n contentMaxWidth?: string;\n closeTriggerTop?: string;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst stringValue = (record: Record<string, unknown>, key: string) => {\n const value = record[key];\n return typeof value === \"string\" ? value : undefined;\n};\n\nconst booleanValue = (record: Record<string, unknown>, key: string) => {\n const value = record[key];\n return typeof value === \"boolean\" ? value : undefined;\n};\n\nconst resolveOverlayConfig = (config: unknown): WorkbenchOverlayWidgetConfig => {\n if (!isRecord(config)) return {};\n\n const overlayConfig: WorkbenchOverlayWidgetConfig = {};\n const size = stringValue(config, \"size\");\n const placement = stringValue(config, \"placement\");\n const scrollBehavior = stringValue(config, \"scrollBehavior\");\n const closeOnEscape = booleanValue(config, \"closeOnEscape\");\n const closeOnInteractOutside = booleanValue(config, \"closeOnInteractOutside\");\n const modal = booleanValue(config, \"modal\");\n const preventScroll = booleanValue(config, \"preventScroll\");\n const trapFocus = booleanValue(config, \"trapFocus\");\n const motionPreset = stringValue(config, \"motionPreset\");\n const role = stringValue(config, \"role\");\n const contentHeight = stringValue(config, \"contentHeight\");\n const contentMaxHeight = stringValue(config, \"contentMaxHeight\");\n const contentMinHeight = stringValue(config, \"contentMinHeight\");\n const contentWidth = stringValue(config, \"contentWidth\");\n const contentMaxWidth = stringValue(config, \"contentMaxWidth\");\n const closeTriggerTop = stringValue(config, \"closeTriggerTop\");\n\n if (size) overlayConfig.size = size as WorkbenchOverlayWidgetConfig[\"size\"];\n if (placement) overlayConfig.placement = placement as WorkbenchOverlayWidgetConfig[\"placement\"];\n if (scrollBehavior) overlayConfig.scrollBehavior = scrollBehavior as WorkbenchOverlayWidgetConfig[\"scrollBehavior\"];\n if (closeOnEscape !== undefined) overlayConfig.closeOnEscape = closeOnEscape;\n if (closeOnInteractOutside !== undefined) overlayConfig.closeOnInteractOutside = closeOnInteractOutside;\n if (modal !== undefined) overlayConfig.modal = modal;\n if (preventScroll !== undefined) overlayConfig.preventScroll = preventScroll;\n if (trapFocus !== undefined) overlayConfig.trapFocus = trapFocus;\n if (motionPreset) overlayConfig.motionPreset = motionPreset as WorkbenchOverlayWidgetConfig[\"motionPreset\"];\n if (role) overlayConfig.role = role as WorkbenchOverlayWidgetConfig[\"role\"];\n if (contentHeight) overlayConfig.contentHeight = contentHeight;\n if (contentMaxHeight) overlayConfig.contentMaxHeight = contentMaxHeight;\n if (contentMinHeight) overlayConfig.contentMinHeight = contentMinHeight;\n if (contentWidth) overlayConfig.contentWidth = contentWidth;\n if (contentMaxWidth) overlayConfig.contentMaxWidth = contentMaxWidth;\n if (closeTriggerTop) overlayConfig.closeTriggerTop = closeTriggerTop;\n return overlayConfig;\n};\n\nexport const resolveOverlayDialogConfig = (placement: Pick<WorkbenchWidgetPlacement, \"closable\">, config: unknown) => {\n const closeable = placement.closable === true;\n const overlayConfig = resolveOverlayConfig(config);\n\n return {\n size: \"xl\",\n scrollBehavior: \"inside\",\n modal: true,\n preventScroll: true,\n trapFocus: true,\n ...overlayConfig,\n closeOnEscape: closeable && (overlayConfig.closeOnEscape ?? true),\n closeOnInteractOutside: closeable && (overlayConfig.closeOnInteractOutside ?? true),\n } satisfies WorkbenchOverlayWidgetConfig;\n};\n\nconst resolveActivePlacement = (widgets: WorkbenchWidgetPlacement[], activeWidgetId?: string) =>\n widgets.find((entry) => entry.widgetId === activeWidgetId) ?? widgets[0];\n\nexport const resolveOverlayDialogRenderState = (\n activePlacement: WorkbenchWidgetPlacement | undefined,\n exitingPlacement: WorkbenchWidgetPlacement | undefined,\n) => {\n if (activePlacement) return { open: true, placement: activePlacement };\n if (exitingPlacement) return { open: false, placement: exitingPlacement };\n return undefined;\n};\n\nconst WorkbenchOverlayFallback = (props: { label: string }) => (\n <Center h=\"full\" w=\"full\" color=\"fg.muted\" p=\"md\" aria-label={props.label}>\n <WorkbenchIcon name=\"circle-alert\" size={20} />\n </Center>\n);\n\ninterface WorkbenchOverlayLayerProps {\n workbench: WorkbenchCore;\n}\n\nexport const WorkbenchOverlayLayer = (props: WorkbenchOverlayLayerProps) => {\n const { workbench } = props;\n const overlayRegion = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.overlay);\n const renderers = useWorkbenchStore(getWorkbenchRenderers(workbench).store, (state) => state.renderers);\n useWorkbenchStore(getWorkbenchRenderers(workbench).store, (state) => state.refreshKeys);\n const [exitingPlacement, setExitingPlacement] = useState<WorkbenchWidgetPlacement | undefined>();\n\n const activePlacement = resolveActivePlacement(overlayRegion.widgets, overlayRegion.activeWidgetId);\n const renderState = resolveOverlayDialogRenderState(activePlacement, exitingPlacement);\n\n useEffect(() => {\n if (activePlacement) setExitingPlacement(undefined);\n }, [activePlacement]);\n\n if (!renderState) return null;\n\n const { open, placement } = renderState;\n const widget = workbench.layout.getWidget(placement.contributionId);\n const overlayConfig = resolveOverlayDialogConfig(placement, widget?.config);\n const {\n contentHeight,\n contentMaxHeight,\n contentMinHeight,\n contentWidth,\n contentMaxWidth,\n closeTriggerTop,\n ...dialogRootConfig\n } = overlayConfig;\n const renderer = widget ? renderers[widget.rendererId] : undefined;\n const canCloseOverlay = open && placement.closable === true;\n const closeLabel = placement.title ?? widget?.title ?? \"overlay\";\n\n const body =\n widget && renderer ? (\n (renderer.render({\n workbench,\n panel: toPanelContribution(widget),\n instance: toPanelInstance(placement),\n refresh: () => undefined,\n }) as ReactNode)\n ) : (\n <WorkbenchOverlayFallback\n label={\n widget ? `No renderer registered for ${widget.rendererId}.` : \"Widget contribution is no longer registered.\"\n }\n />\n );\n\n const handleOpenChange = (details: { open: boolean }) => {\n if (!details.open && canCloseOverlay) {\n setExitingPlacement(placement);\n workbench.layout.closePanel(placement.widgetId);\n }\n };\n\n const handleExitComplete = () => {\n setExitingPlacement((current) => (current?.widgetId === placement.widgetId ? undefined : current));\n };\n\n // Nested overlays (confirmation dialogs, popovers, menus) portal outside this\n // dialog's content, so their clicks register as outside interactions here. If\n // the interaction landed inside any overlay content, it cannot mean \"dismiss\n // the settings dialog\" — the widget's own content never reaches this handler.\n const handleInteractOutside = (event: CustomEvent<{ originalEvent?: Event }>) => {\n const target = event.detail.originalEvent?.target;\n if (target instanceof Element && target.closest('[data-part=\"content\"]')) {\n event.preventDefault();\n }\n };\n\n return (\n <Dialog.Root\n {...dialogRootConfig}\n open={open}\n onExitComplete={handleExitComplete}\n onOpenChange={handleOpenChange}\n onInteractOutside={handleInteractOutside}\n >\n <Portal>\n <Dialog.Backdrop position=\"fixed\" inset=\"0\" pointerEvents=\"auto\" />\n <Dialog.Positioner\n position=\"fixed\"\n inset=\"0\"\n overflow={dialogRootConfig.scrollBehavior === \"outside\" ? \"auto\" : \"hidden\"}\n pointerEvents=\"auto\"\n >\n <Dialog.Content\n position=\"relative\"\n overflow=\"hidden\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n h={contentHeight}\n maxH={contentMaxHeight}\n minH={contentMinHeight}\n w={contentWidth}\n maxW={contentMaxWidth}\n >\n {body}\n {canCloseOverlay ? (\n <Dialog.CloseTrigger\n aria-label={`Close ${closeLabel}`}\n alignItems=\"center\"\n borderRadius=\"sm\"\n color=\"fg.muted\"\n cursor=\"pointer\"\n display=\"inline-flex\"\n h=\"5\"\n insetEnd=\"1\"\n justifyContent=\"center\"\n position=\"absolute\"\n top={closeTriggerTop ?? \"1\"}\n w=\"5\"\n zIndex=\"1\"\n _hover={{ bg: \"bg.subtle\", color: \"fg\" }}\n >\n <WorkbenchIcon name=\"x\" size={16} />\n </Dialog.CloseTrigger>\n ) : null}\n </Dialog.Content>\n </Dialog.Positioner>\n </Portal>\n </Dialog.Root>\n );\n};\n","import { IconButton } from \"@chakra-ui/react\";\nimport { ResourceActionMenu } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchResourceActionResolver } from \"../menus/resource-actions\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nexport const WorkbenchBreadcrumbResourceActions = (props: { workbench: WorkbenchCore }) => {\n const { workbench } = props;\n const items = useWorkbenchStore(workbench.breadcrumbs.store, (state) => state.items) ?? [];\n const resolveActions = useWorkbenchResourceActionResolver(workbench);\n const resource = items.at(-1)?.resource;\n const actions = resource ? resolveActions(resource) : [];\n if (!resource || actions.length === 0) return null;\n const label = resource.label ?? resource.id ?? resource.type;\n return (\n <ResourceActionMenu actions={actions} positioning={{ placement: \"bottom-start\" }}>\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label={`Actions for ${label}`}\n data-workbench-breadcrumb-resource-actions=\"\"\n >\n <WorkbenchIcon name=\"ChevronDown\" size={14} />\n </IconButton>\n </ResourceActionMenu>\n );\n};\n","import { Box, HStack, IconButton } from \"@chakra-ui/react\";\nimport { Header, PANEL_HEADER_CONTROL_SIZE, Tooltip } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { workbenchTopHeaderLeadingMenuPath, workbenchTopHeaderTrailingMenuPath } from \"../../core\";\nimport { WorkbenchBreadcrumbView } from \"../breadcrumb/breadcrumb-view\";\nimport { ModeChromeView, useModeChrome } from \"../region/mode-chrome\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchHeaderActions } from \"./header-actions\";\nimport { WorkbenchBreadcrumbResourceActions } from \"./resource-actions\";\n\nexport interface WorkbenchNavRegionControl {\n id: \"sidenav\" | \"secondary\" | \"side\";\n label: string;\n icon: \"PanelLeft\" | \"PanelBottom\" | \"PanelRight\";\n open: boolean;\n onToggle: () => void;\n}\n\ninterface WorkbenchNavChromeProps {\n workbench: WorkbenchCore;\n hasNav: boolean;\n regionControls: WorkbenchNavRegionControl[];\n}\n\nconst WorkbenchRegionControl = (props: { control: WorkbenchNavRegionControl }) => {\n const { control } = props;\n\n return (\n <Tooltip content={control.label}>\n <IconButton\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={control.label}\n aria-pressed={control.open}\n onClick={control.onToggle}\n >\n <WorkbenchIcon name={control.icon} size={14} />\n </IconButton>\n </Tooltip>\n );\n};\n\ninterface WorkbenchNavigationControlsProps {\n workbench: WorkbenchCore;\n regionControls: WorkbenchNavRegionControl[];\n}\n\nconst WorkbenchNavigationControls = (props: WorkbenchNavigationControlsProps) => {\n const { workbench, regionControls } = props;\n const history = useWorkbenchStore(workbench.pageLocations.historyStore, (state) => state);\n\n return (\n <HStack gap=\"2xs\" flexShrink={0}>\n {regionControls.map((control) => (\n <WorkbenchRegionControl key={control.id} control={control} />\n ))}\n <Tooltip content=\"Navigate back\">\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label=\"Navigate back\"\n disabled={!history.canGoBack}\n onClick={() => workbench.pageLocations.goBack()}\n >\n <WorkbenchIcon name=\"ArrowLeft\" size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Navigate forward\">\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label=\"Navigate forward\"\n disabled={!history.canGoForward}\n onClick={() => workbench.pageLocations.goForward()}\n >\n <WorkbenchIcon name=\"ArrowRight\" size={14} />\n </IconButton>\n </Tooltip>\n </HStack>\n );\n};\n\nconst WorkbenchRegionControls = (props: { controls: WorkbenchNavRegionControl[] }) => {\n const { controls } = props;\n\n return (\n <HStack gap=\"2xs\" flexShrink={0}>\n {controls.map((control) => (\n <WorkbenchRegionControl key={control.id} control={control} />\n ))}\n </HStack>\n );\n};\n\nexport const WorkbenchNavChrome = (props: WorkbenchNavChromeProps) => {\n const { workbench, hasNav, regionControls } = props;\n const chrome = useModeChrome(workbench, \"nav\");\n const sidenavControls = regionControls.filter((control) => control.id === \"sidenav\");\n const trailingRegionControls = regionControls.filter((control) => control.id !== \"sidenav\");\n\n if (chrome === false) return null;\n if (chrome)\n return (\n <Header data-workbench-region=\"nav\" variant=\"main\" padding=\"0\" flexShrink={0}>\n <Box flex=\"1\" minW=\"0\" h=\"full\" overflow=\"hidden\">\n <ModeChromeView workbench={workbench} viewId={chrome} region=\"nav\" />\n </Box>\n <WorkbenchRegionControls controls={regionControls} />\n </Header>\n );\n\n return (\n <Header\n data-workbench-region=\"nav\"\n variant=\"main\"\n bg={workbenchBackgrounds.main}\n position=\"relative\"\n flexShrink={0}\n gap=\"xs\"\n overflow=\"hidden\"\n overflowY=\"hidden\"\n >\n <WorkbenchHeaderActions workbench={workbench} menuPath={workbenchTopHeaderLeadingMenuPath} />\n <WorkbenchNavigationControls workbench={workbench} regionControls={sidenavControls} />\n <Box h=\"full\" minW=\"0\" maxW=\"60%\" overflow=\"hidden\">\n {hasNav ? (\n <WorkbenchRegion workbench={workbench} region=\"nav\" title=\"Nav Chrome\" />\n ) : (\n <WorkbenchBreadcrumbView workbench={workbench} />\n )}\n </Box>\n <HStack data-workbench-breadcrumb-action-slot=\"\" flexShrink={0} gap=\"2xs\" h=\"6\" justifyContent=\"center\" minW=\"6\">\n <WorkbenchBreadcrumbResourceActions workbench={workbench} />\n </HStack>\n <Box flex=\"1\" minW=\"0\" />\n <WorkbenchHeaderActions workbench={workbench} menuPath={workbenchTopHeaderTrailingMenuPath} />\n <WorkbenchRegionControls controls={trailingRegionControls} />\n </Header>\n );\n};\n","import { Box, Button, Flex, Stack, Text } from \"@chakra-ui/react\";\nimport type { ControlValueMap } from \"@pstdio/sdk/extensions\";\nimport type { InputGroup, Param, ParamValue } from \"@pstdio/ui\";\nimport { ParamEditor, ScrollArea } from \"@pstdio/ui\";\nimport { controlValueSchema } from \"pstdio-api-contracts\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n getWorkbenchRenderers,\n type RegisteredControlsRendererContribution,\n type WorkbenchCore,\n type WorkbenchPanelInstance,\n} from \"../../../core\";\n\ninterface WorkbenchControlsViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredControlsRendererContribution;\n placement: WorkbenchPanelInstance;\n}\ninterface ControlsViewState {\n params: Param[];\n groups: InputGroup[];\n values: ControlValueMap;\n readOnly: boolean;\n loading: boolean;\n error?: string;\n}\nconst initialState: ControlsViewState = { params: [], groups: [], values: {}, readOnly: false, loading: true };\nexport const WorkbenchControlsView = (props: WorkbenchControlsViewProps) => {\n const { workbench, contribution, placement } = props;\n const resource = placement.resource;\n const [state, setState] = useState<ControlsViewState>(initialState);\n const requestRef = useRef(0);\n useEffect(() => {\n let cancelled = false;\n setState(initialState);\n const runQuery = () => {\n requestRef.current += 1;\n const requestId = requestRef.current;\n Promise.resolve()\n .then(() => contribution.executeQuery(resource))\n .then((result) => {\n if (cancelled || requestRef.current !== requestId) return;\n const values = { ...(contribution.defaultValues ?? {}), ...(result.values ?? {}) };\n const next = {\n params: result.params ?? [],\n groups: result.groups ?? [],\n values,\n readOnly: Boolean(result.readOnly),\n loading: false,\n };\n setState(next);\n })\n .catch((error: unknown) => {\n if (cancelled || requestRef.current !== requestId) return;\n setState({ ...initialState, loading: false, error: error instanceof Error ? error.message : String(error) });\n });\n };\n runQuery();\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = getWorkbenchRenderers(workbench).onDidRefreshControlsRenderer((event) => {\n if (event.controlsRendererId === contribution.id) runQuery();\n });\n return () => {\n cancelled = true;\n if (typeof subscription === \"function\") subscription();\n else subscription?.dispose();\n refreshSubscription.dispose();\n };\n }, [contribution, resource, workbench]);\n const readOnly = state.readOnly || (!contribution.updateValue && !contribution.apply);\n const showFooter = !readOnly && (Boolean(contribution.apply) || Boolean(contribution.reset));\n const handleChange = (id: string, input: ParamValue) => {\n const value = controlValueSchema.parse(input);\n // The command runs outside the setState updater: React may invoke updaters\n // twice (StrictMode), which would double-execute the update command.\n const values = { ...state.values, [id]: value };\n if (contribution.updateValue) void contribution.updateValue({ controlId: id, value, values, resource });\n setState((prev) => ({ ...prev, values: { ...prev.values, [id]: value } }));\n };\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\">\n <ScrollArea flex=\"1\" minH=\"0\" minW=\"0\" w=\"full\" size=\"xs\">\n <ControlsContent state={state} contribution={contribution} readOnly={readOnly} onChange={handleChange} />\n </ScrollArea>\n {showFooter ? (\n <Flex borderTopWidth=\"1px\" borderColor=\"border.muted\" px=\"sm\" py=\"xs\" gap=\"xs\" justifyContent=\"flex-end\">\n {contribution.reset ? (\n <Button\n size=\"xs\"\n variant=\"ghost\"\n onClick={() => {\n void contribution.reset?.({ resource });\n }}\n >\n Reset\n </Button>\n ) : null}\n {contribution.apply ? (\n <Button\n size=\"xs\"\n variant=\"subtle\"\n onClick={() => {\n void contribution.apply?.({ values: state.values, resource });\n }}\n >\n Apply\n </Button>\n ) : null}\n </Flex>\n ) : null}\n </Stack>\n );\n};\n\ninterface ControlsContentProps {\n state: ControlsViewState;\n contribution: RegisteredControlsRendererContribution;\n readOnly: boolean;\n onChange(id: string, value: ParamValue): void;\n}\nconst ControlsContent = (props: ControlsContentProps) => {\n const { state, contribution, readOnly, onChange } = props;\n if (state.loading)\n return (\n <Box p=\"md\">\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n Loading…\n </Text>\n </Box>\n );\n if (state.error)\n return (\n <Box p=\"md\">\n <Text role=\"alert\" textStyle=\"paragraph/S/regular\" color=\"fg\">\n {state.error}\n </Text>\n </Box>\n );\n if (state.params.length || state.groups.length)\n return (\n <ParamEditor\n variant=\"small\"\n params={state.params}\n groups={state.groups}\n defaultValues={state.values}\n readOnly={readOnly}\n onChange={onChange}\n />\n );\n return (\n <Box p=\"md\">\n <Text textStyle=\"label/M/medium\" color=\"fg\">\n {contribution.emptyTitle || \"No controls\"}\n </Text>\n {contribution.emptyDescription ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" mt=\"2xs\">\n {contribution.emptyDescription}\n </Text>\n ) : null}\n </Box>\n );\n};\n","import { createElement } from \"react\";\nimport { getWorkbenchRenderers, type WorkbenchCore } from \"../../../core\";\nimport { WorkbenchControlsView } from \"./controls-view\";\n\n// Track per-core installation so repeated <Workbench> renders are idempotent.\nconst installed = new WeakSet<WorkbenchCore>();\n\nexport const installWorkbenchControlsRenderer = (workbench: WorkbenchCore) => {\n if (installed.has(workbench)) return;\n installed.add(workbench);\n getWorkbenchRenderers(workbench).setControlsRendererImplementation(\n ({ workbench: scope, instance, controlsRendererId }) => {\n const contribution = getWorkbenchRenderers(scope).getControlsRenderer(controlsRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchControlsView, { workbench: scope, contribution, placement: instance });\n },\n );\n};\n","import { createElement } from \"react\";\nimport { getWorkbenchRenderers, type WorkbenchCore } from \"../../../core\";\nimport { WorkbenchDataTableView } from \"./data-table-view\";\n\nconst installed = new WeakSet<WorkbenchCore>();\n\nexport const installWorkbenchDataTableRenderer = (workbench: WorkbenchCore) => {\n if (installed.has(workbench)) return;\n installed.add(workbench);\n getWorkbenchRenderers(workbench).setDataTableRendererImplementation(\n ({ workbench: scope, instance, dataTableRendererId }) => {\n const contribution = getWorkbenchRenderers(scope).getDataTableRenderer(dataTableRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchDataTableView, { workbench: scope, contribution, placement: instance });\n },\n );\n};\n","import { createElement, lazy, Suspense } from \"react\";\nimport { getWorkbenchRenderers, type WorkbenchCore } from \"../../../core\";\n\nconst loadWorkbenchFileRendererView = () =>\n import(\"./file-renderer-view\").then((module) => ({\n default: module.WorkbenchFileRendererView,\n }));\n\nconst WorkbenchFileRendererView = lazy(loadWorkbenchFileRendererView);\n\n// Track per-core installation so repeated <Workbench> renders are idempotent.\nconst installed = new WeakSet<WorkbenchCore>();\n\nexport const installWorkbenchFileRenderer = (workbench: WorkbenchCore) => {\n if (installed.has(workbench)) return;\n installed.add(workbench);\n getWorkbenchRenderers(workbench).setFileRendererImplementation(({ workbench: scope, instance, fileRendererId }) => {\n const contribution = getWorkbenchRenderers(scope).getFileRenderer(fileRendererId);\n if (!contribution) return null;\n return createElement(\n Suspense,\n { fallback: null },\n createElement(WorkbenchFileRendererView, { workbench: scope, contribution, placement: instance }),\n );\n });\n};\n","import type { ComponentType, ReactNode } from \"react\";\nimport type {\n AttributeDescriptor,\n AttributesSource,\n BoardColumnConfig,\n KanbanRendererContribution,\n KanbanRendererRow,\n RegisteredKanbanRendererContribution,\n ResourceContextAction,\n} from \"../../../core\";\n\ntype ReactColumnIcon = ComponentType<{ size?: number | string }>;\nexport type ReactAttributeDescriptor = AttributeDescriptor<ReactNode>;\nexport type ReactAttributesSource = AttributesSource<ReactNode>;\nexport type ReactBoardColumnConfig = BoardColumnConfig<ReactColumnIcon>;\nexport type ReactResourceContextAction = ResourceContextAction<ReactNode>;\nexport type ReactKanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> =\n KanbanRendererContribution<TRow, ReactNode, ReactColumnIcon>;\n\n// The core stores presentation values without choosing a UI framework, as it\n// does for view.render. Installing the React renderer binds that presentation.\nexport const bindReactKanbanPresentation = (contribution: RegisteredKanbanRendererContribution) =>\n contribution as RegisteredKanbanRendererContribution<KanbanRendererRow, ReactNode, ReactColumnIcon>;\n","export const createKanbanViewQuerySequencer = () => {\n let latestQueryId = 0;\n\n return {\n next: () => {\n latestQueryId += 1;\n return latestQueryId;\n },\n isLatest: (queryId: number) => queryId === latestQueryId,\n };\n};\n\nexport const executeKanbanViewQuery = async <TRow>(executeQuery: () => Promise<TRow[]> | TRow[]) => {\n try {\n return await executeQuery();\n } catch {\n return [];\n }\n};\n","import type { WorkbenchPanelInstance } from \"../../../core\";\n\nconst resolveProjectScope = (placement: WorkbenchPanelInstance, storageScope: string | undefined) => {\n const metadata = placement.resource?.metadata;\n const projectId = metadata?.projectId;\n if (typeof projectId === \"string\") return projectId;\n\n const favoriteScope = metadata?.favoriteScope;\n if (!favoriteScope || typeof favoriteScope !== \"object\" || Array.isArray(favoriteScope)) {\n return storageScope;\n }\n\n const scope = favoriteScope as { scope?: unknown; projectId?: unknown };\n return scope.scope === \"project\" && typeof scope.projectId === \"string\" ? scope.projectId : undefined;\n};\n\nexport const resolveKanbanRendererStorageKey = (\n kanbanRendererId: string,\n placement: WorkbenchPanelInstance,\n storageScope?: string,\n) => {\n const baseKey = `pstdio:workbench:kanbanRenderer:${kanbanRendererId}:${placement.instanceId}`;\n const projectScope = resolveProjectScope(placement, storageScope);\n return projectScope ? `${baseKey}:project:${projectScope}` : baseKey;\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { type ResourceContextAction, ScrollArea } from \"@pstdio/ui\";\nimport {\n type AttributeDescriptor,\n type AttributesSource,\n isAttributesSource,\n KanbanRenderer,\n type KanbanRendererRow,\n useKanbanRendererStore,\n} from \"@pstdio/ui/kanban-renderer\";\nimport { type ReactNode, useEffect, useRef, useState, useSyncExternalStore } from \"react\";\nimport type {\n KanbanRendererQueryState,\n RegisteredKanbanRendererContribution,\n ResourceRef,\n WorkbenchCore,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nimport { getWorkbenchRenderers } from \"../../../core\";\nimport { useWorkbenchResourceActionResolver } from \"../../menus/resource-actions\";\nimport { bindReactKanbanPresentation } from \"./kanban-presentation\";\nimport { createKanbanViewQuerySequencer, executeKanbanViewQuery } from \"./kanban-view-query\";\nimport { resolveKanbanRendererStorageKey } from \"./kanban-view-storage\";\n\ninterface WorkbenchKanbanViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredKanbanRendererContribution;\n placement: WorkbenchPanelInstance;\n}\n\ninterface WorkbenchKanbanViewFrameProps {\n children: ReactNode;\n usesInternalScroll: boolean;\n}\n\nconst kanbanViewScrollContentProps = { display: \"flex\", flexDirection: \"column\", minH: \"100%\" } as const;\n\nconst WorkbenchKanbanViewFrame = (props: WorkbenchKanbanViewFrameProps) => {\n const { children, usesInternalScroll } = props;\n\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\" position={usesInternalScroll ? \"relative\" : undefined}>\n {usesInternalScroll ? (\n // Board columns own vertical scrolling; do not let their content height\n // make the workbench region's outer ScrollArea become the scroll owner.\n <Box position=\"absolute\" inset=\"0\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n {children}\n </Box>\n ) : (\n <ScrollArea flex=\"1\" minH=\"0\" minW=\"0\" w=\"full\" size=\"xs\" contentProps={kanbanViewScrollContentProps}>\n {children}\n </ScrollArea>\n )}\n </Stack>\n );\n};\n\nconst noopSubscribe = () => () => {};\n\nexport const isKanbanRowResource = (resource: unknown): resource is ResourceRef =>\n Boolean(\n resource &&\n typeof resource === \"object\" &&\n \"type\" in resource &&\n typeof resource.type === \"string\" &&\n \"id\" in resource &&\n typeof resource.id === \"string\",\n );\n\nconst useResolvedContributionAttributes = (attributes: AttributeDescriptor[] | AttributesSource) => {\n const source = isAttributesSource(attributes) ? attributes : undefined;\n const fallback = source ? undefined : (attributes as AttributeDescriptor[]);\n const subscribe = source ? source.subscribe : noopSubscribe;\n const getSnapshot = source ? source.getSnapshot : () => fallback!;\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n};\n\nexport const mergeKanbanViewRowActions = (\n resourceActions: ResourceContextAction[],\n contributionActions: ResourceContextAction[],\n) => {\n const resourceActionKeys = new Set(resourceActions.map((action) => action.key));\n const resourceCommandIds = new Set(resourceActions.flatMap((action) => (action.commandId ? [action.commandId] : [])));\n return [\n ...resourceActions,\n ...contributionActions.filter(\n (action) =>\n !resourceActionKeys.has(action.key) && (!action.commandId || !resourceCommandIds.has(action.commandId)),\n ),\n ];\n};\n\nexport const WorkbenchKanbanView = (props: WorkbenchKanbanViewProps) => {\n const { workbench, placement } = props;\n const contribution = bindReactKanbanPresentation(props.contribution);\n const resolveResourceActions = useWorkbenchResourceActionResolver(workbench);\n const attributes = useResolvedContributionAttributes(contribution.attributes);\n const storageKey = resolveKanbanRendererStorageKey(contribution.id, placement, contribution.storageScope);\n const initialState = {\n settings: contribution.defaultSettings,\n filters: contribution.defaultFilters,\n views: contribution.defaultViews,\n activeViewId: contribution.defaultActiveViewId,\n };\n\n const settings = useKanbanRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useKanbanRendererStore(storageKey, (state) => state.filters, initialState);\n\n const [rows, setRows] = useState<KanbanRendererRow[]>([]);\n const querySequencer = useRef(createKanbanViewQuerySequencer());\n\n // Run executeQuery whenever settings/filters change.\n useEffect(() => {\n let cancelled = false;\n const runQuery = () => {\n const queryId = querySequencer.current.next();\n const state: KanbanRendererQueryState = { settings, filters };\n void executeKanbanViewQuery(() => contribution.executeQuery(state)).then((next) => {\n if (cancelled || !querySequencer.current.isLatest(queryId)) return;\n setRows(next);\n });\n };\n runQuery();\n\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = getWorkbenchRenderers(workbench).onDidRefreshKanbanRenderer((event) => {\n if (event.kanbanRendererId === contribution.id) runQuery();\n });\n return () => {\n cancelled = true;\n if (typeof subscription === \"function\") {\n subscription();\n } else {\n subscription?.dispose();\n }\n refreshSubscription.dispose();\n };\n }, [contribution, filters, settings, workbench]);\n\n const handleOpenRow = (row: KanbanRendererRow) => {\n if (contribution.onRowActivate) void Promise.resolve(contribution.onRowActivate(row)).catch(() => undefined);\n };\n\n const getRowContextMenuActions = (row: KanbanRendererRow) => {\n const resourceActions = isKanbanRowResource(row.resource) ? resolveResourceActions(row.resource) : [];\n const contributionActions = contribution.getRowContextMenuActions?.(row) ?? [];\n return mergeKanbanViewRowActions(resourceActions, contributionActions);\n };\n\n return (\n <WorkbenchKanbanViewFrame usesInternalScroll={settings.viewMode === \"board\"}>\n <KanbanRenderer\n rows={rows}\n storageKey={storageKey}\n attributes={attributes}\n defaultSettings={contribution.defaultSettings}\n defaultFilters={contribution.defaultFilters}\n defaultViews={contribution.defaultViews}\n defaultActiveViewId={contribution.defaultActiveViewId}\n emptyTitle={contribution.emptyTitle}\n emptyDescription={contribution.emptyDescription}\n getBoardColumnConfig={contribution.getBoardColumnConfig}\n hideToolbar={contribution.hideToolbar}\n onRowClick={contribution.onRowActivate ? handleOpenRow : undefined}\n onAttributeChange={contribution.onAttributeChange}\n onReorder={contribution.onReorder}\n createRow={contribution.createRow}\n onCreateRow={contribution.onCreateRow}\n onColumnAction={contribution.onColumnAction}\n getRowContextMenuActions={getRowContextMenuActions}\n />\n </WorkbenchKanbanViewFrame>\n );\n};\n","import { createElement } from \"react\";\nimport { getWorkbenchRenderers, type WorkbenchCore } from \"../../../core\";\nimport { WorkbenchKanbanView } from \"./kanban-view\";\n\n// Track per-core installation so repeated <Workbench> renders are idempotent.\nconst installed = new WeakSet<WorkbenchCore>();\n\nexport const installWorkbenchKanbanRenderer = (workbench: WorkbenchCore) => {\n if (installed.has(workbench)) return;\n installed.add(workbench);\n getWorkbenchRenderers(workbench).setKanbanRendererImplementation(\n ({ workbench: scope, instance, kanbanRendererId }) => {\n const contribution = getWorkbenchRenderers(scope).getKanbanRenderer(kanbanRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchKanbanView, { workbench: scope, contribution, placement: instance });\n },\n );\n};\n","import type { ResourceContextAction } from \"@pstdio/ui\";\nimport { createElement } from \"react\";\nimport { getWorkbenchRenderers, type WorkbenchCore } from \"../../../core\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-params-dialog\";\nimport { WorkbenchTreeView } from \"./tree-view\";\n\ninterface InstallWorkbenchTreeRendererInput {\n renderParamField?: CommandParamFieldRenderer;\n onSidenavContextActionsChange?: (actions: ResourceContextAction[]) => void;\n}\n\ninterface WorkbenchTreeRendererInstallation {\n renderParamField: CommandParamFieldRenderer | undefined;\n onSidenavContextActionsChange: ((actions: ResourceContextAction[]) => void) | undefined;\n}\n\n// Track per-core installation so repeated <Workbench> renders are idempotent.\nconst installed = new WeakMap<WorkbenchCore, WorkbenchTreeRendererInstallation>();\n\nconst isSidenavPlacement = (workbench: WorkbenchCore, instanceId: string) =>\n workbench.layout.getLayout().regions.sidenav.widgets.some((placement) => placement.widgetId === instanceId);\n\nconst viewContextId = (workbench: WorkbenchCore, panelId: string, viewId: string | undefined) => {\n const config = workbench.layout.getPanel(panelId)?.config;\n if (config && typeof config === \"object\" && \"viewContextId\" in config) {\n const candidate = config.viewContextId;\n if (typeof candidate === \"string\") return candidate;\n }\n return viewId;\n};\n\nexport const installWorkbenchTreeRenderer = (\n workbench: WorkbenchCore,\n input: InstallWorkbenchTreeRendererInput = {},\n) => {\n const current = installed.get(workbench);\n if (current) {\n current.renderParamField = input.renderParamField;\n current.onSidenavContextActionsChange = input.onSidenavContextActionsChange;\n return;\n }\n\n const installation = {\n renderParamField: input.renderParamField,\n onSidenavContextActionsChange: input.onSidenavContextActionsChange,\n };\n installed.set(workbench, installation);\n getWorkbenchRenderers(workbench).setTreeRendererImplementation(({ workbench: scope, instance, treeId }) =>\n createElement(WorkbenchTreeView, {\n workbench: scope,\n treeViewId: treeId,\n resource: instance.resource,\n viewId: viewContextId(scope, instance.panelId, instance.viewId),\n renderParamField: installation.renderParamField,\n onSidenavContextActionsChange: isSidenavPlacement(scope, instance.instanceId)\n ? installation.onSidenavContextActionsChange\n : undefined,\n }),\n );\n};\n","import type { FileIconThemePreferenceOption } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\n// The file icon themes a workbench offers: whatever is registered in\n// `workbench.fileIconThemes` (e.g. extension-contributed themes). The list\n// shrinks when a contribution is disposed, mirroring color themes.\nexport const useWorkbenchFileIconThemePreferences = (workbench: WorkbenchCore) =>\n useWorkbenchStore(\n workbench.fileIconThemes.store,\n (state) => state.themes,\n ) as readonly FileIconThemePreferenceOption[];\n","import {\n getActiveWorkbenchLocationPanel,\n getWorkbenchModePanelForRegion,\n isWorkbenchModePanelAvailable,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchModeEligibility,\n type WorkbenchCore,\n type WorkbenchRegion,\n} from \"../../core\";\nimport { useModeChrome } from \"../region/mode-chrome\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface WorkbenchRegionContentOptions {\n locationScoped?: boolean;\n}\n\nexport const useWorkbenchRegionContent = (\n workbench: WorkbenchCore,\n region: WorkbenchRegion,\n options: WorkbenchRegionContentOptions = {},\n) => {\n const chrome = useModeChrome(workbench, region);\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const modePanel = getWorkbenchModePanelForRegion(region);\n const panelAvailable =\n !modePanel || isWorkbenchModePanelAvailable(modeId ? workbench.modes.getMode(modeId) : undefined, modePanel);\n\n return useWorkbenchStore(workbench.layout.store, (state) => {\n if (chrome !== undefined) return chrome !== false;\n if (!panelAvailable) return false;\n if (state.placeholders[region]) return true;\n if (!options.locationScoped) return state.layout.regions[region].widgets.length > 0;\n\n return state.layout.regions[region].widgets.some((placement) => {\n const widget = state.widgets[placement.contributionId];\n if (!widget) return false;\n return region === \"side\"\n ? matchesWorkbenchModeEligibility(widget, modeId)\n : isWorkbenchPanelPlacementVisible(widget, resource, modeId, placement, {\n location: getActiveWorkbenchLocationPanel(state.layout),\n });\n });\n });\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { WorkbenchCore, WorkbenchRegion } from \"../../core\";\n\ninterface WorkbenchHeaderBorderProps {\n workbench: WorkbenchCore;\n region: WorkbenchRegion;\n}\n\n// The header's bottom edge is painted as an absolutely-positioned line instead\n// of a CSS border so an active outline tab can sit on top of it and merge with\n// the panel content below. Hosting headers must set `position=\"relative\"`; the\n// tab strip uses a higher `zIndex` so the active tab paints over this line.\nexport const WorkbenchHeaderBorder = (props: WorkbenchHeaderBorderProps) => {\n const { workbench, region } = props;\n\n if (!workbench.layout.getRegionHeaderBorderBottom(region)) return null;\n\n return (\n <Box position=\"absolute\" insetInline=\"0\" bottom=\"0\" h=\"1px\" bg=\"border.subtle\" pointerEvents=\"none\" zIndex=\"0\" />\n );\n};\n","import type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchPanelHeaderVisible } from \"../region/region-tabs\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { useWorkbenchRegionContent } from \"./use-workbench-region-content\";\nimport { resolvePanelCollapsible } from \"./workbench-panel-state\";\n\n// The collapse/reveal state of one panel around the main editor region, bundled so\n// WorkbenchBody receives one object per panel instead of six flat props.\nexport interface WorkbenchPanelView {\n has: boolean;\n hasHeader: boolean;\n collapsible: boolean;\n collapsed: boolean;\n onCollapsedChange: (collapsed: boolean) => void;\n}\n\nexport interface WorkbenchMainPanels {\n hasMainHeader: boolean;\n secondaryPanel: WorkbenchPanelView;\n}\n\nconst useSecondaryPanelView = (workbench: WorkbenchCore) => {\n const hasContent = useWorkbenchRegionContent(workbench, \"secondary\", { locationScoped: true });\n const hasHeader = useWorkbenchRegionContent(workbench, \"secondary-header\");\n const hasPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"secondary\");\n const collapsible = useWorkbenchStore(workbench.layout.store, () =>\n resolvePanelCollapsible(workbench, \"secondary-header\", \"secondary\"),\n );\n const open = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.secondary.visible);\n\n return {\n has: hasContent || hasHeader || hasPanelHeader,\n hasHeader,\n collapsible,\n collapsed: !open,\n onCollapsedChange: (collapsed: boolean) => {\n if (!collapsed || collapsible) workbench.shell.setRegionOpen(\"secondary\", !collapsed);\n },\n };\n};\n\n// Subscribe to derived panel facts rather than the whole layout. Replaying a\n// resource can replace the active main placement without rebuilding the shell.\nexport const useWorkbenchMainPanels = (workbench: WorkbenchCore) => {\n const hasMainHeader = useWorkbenchRegionContent(workbench, \"main-header\");\n const secondaryPanel = useSecondaryPanelView(workbench);\n\n return {\n hasMainHeader,\n secondaryPanel,\n };\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { Header } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { WorkbenchPanelMenuLayout, WorkbenchPanelMenuOpeners } from \"../panel-menu/panel-menu\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { useWorkbenchPanelHeaderVisible, WorkbenchRegionTabs } from \"../region/region-tabs\";\nimport { useWorkbenchModeRegionSettings } from \"../shared/use-workbench-mode-region-settings\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchHeaderBorder } from \"./header-bottom-border\";\n\ninterface WorkbenchSecondaryPanelProps {\n workbench: WorkbenchCore;\n hasSecondaryHeader: boolean;\n}\n\nexport const WorkbenchSecondaryPanel = (props: WorkbenchSecondaryPanelProps) => {\n const { workbench, hasSecondaryHeader } = props;\n const hasPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"secondary\");\n const settings = useWorkbenchModeRegionSettings(workbench, \"secondary\");\n\n return (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"secondary\"\n data-workbench-panel=\"secondary\"\n data-workbench-region=\"secondary\"\n as=\"section\"\n bg={workbenchBackgrounds.panel}\n layerStyle=\"panel\"\n flex=\"1\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n display=\"flex\"\n flexDirection=\"column\"\n w=\"full\"\n >\n {settings?.showHeader !== false && (hasSecondaryHeader || hasPanelHeader) ? (\n <Header\n data-workbench-panel-header=\"secondary\"\n variant=\"main\"\n bg={workbenchBackgrounds.panel}\n position=\"relative\"\n flexShrink={0}\n gap=\"xs\"\n overflow=\"hidden\"\n overflowY=\"hidden\"\n >\n <WorkbenchRegionTabs workbench={workbench} region=\"secondary\" />\n {hasSecondaryHeader ? (\n <Box flex=\"1\" h=\"full\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchRegion workbench={workbench} region=\"secondary-header\" title=\"Secondary Panel header\" />\n </Box>\n ) : null}\n <WorkbenchPanelMenuOpeners workbench={workbench} panel=\"secondary\" />\n <WorkbenchHeaderBorder workbench={workbench} region=\"secondary-header\" />\n </Header>\n ) : null}\n <Box flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchPanelMenuLayout workbench={workbench} panel=\"secondary\">\n <WorkbenchRegion workbench={workbench} region=\"secondary\" title=\"Secondary Panel\" />\n </WorkbenchPanelMenuLayout>\n </Box>\n </WorkbenchFocusRegion>\n );\n};\n","import { Box, Grid } from \"@chakra-ui/react\";\nimport { Header, PANEL_HEADER_CONTROL_SIZE, ResizableSplitLayout } from \"@pstdio/ui\";\nimport { headerTrailingMenuPath, type WorkbenchCore, type WorkbenchRegionSize } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { WorkbenchHeaderActions } from \"../header/header-actions\";\nimport { WorkbenchPanelMenuLayout, WorkbenchPanelMenuOpeners } from \"../panel-menu/panel-menu\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport {\n useWorkbenchPanelHeaderVisible,\n useWorkbenchRegionTabsVisible,\n WorkbenchRegionTabs,\n} from \"../region/region-tabs\";\nimport { useWorkbenchModeRegionSettings } from \"../shared/use-workbench-mode-region-settings\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchHeaderBorder } from \"./header-bottom-border\";\nimport { useWorkbenchMainPanels } from \"./use-workbench-main-panels\";\nimport { WorkbenchSecondaryPanel } from \"./workbench-secondary-panel\";\n\ninterface WorkbenchBodyProps {\n workbench: WorkbenchCore;\n}\n\nconst SECONDARY_PANEL_SIZE = { defaultPx: 240, minPx: 128, maxPx: 420 };\nconst SECONDARY_PANEL_CONTENT_MIN_SIZE_PX = 240;\nconst mainHeaderTrailingMenuPath = headerTrailingMenuPath(\"main\");\n\nconst resolveRegionSize = (\n regionSize: WorkbenchRegionSize | undefined,\n persistedSize: number | undefined,\n fallback: Required<WorkbenchRegionSize>,\n) => ({\n defaultPx: persistedSize ?? regionSize?.defaultPx ?? fallback.defaultPx,\n minPx: regionSize?.minPx ?? fallback.minPx,\n maxPx: regionSize ? regionSize.maxPx : fallback.maxPx,\n});\n\ninterface MainHeaderBarProps {\n workbench: WorkbenchCore;\n hasMainHeader: boolean;\n}\n\nconst MainHeaderBar = (props: MainHeaderBarProps) => {\n const { workbench, hasMainHeader } = props;\n const hasMainContentTabs = useWorkbenchRegionTabsVisible(workbench, \"main\");\n const hasPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"main\");\n const settings = useWorkbenchModeRegionSettings(workbench, \"main\");\n\n if (settings?.showHeader === false || (!hasMainHeader && !hasPanelHeader)) return null;\n\n return (\n <Header\n data-workbench-panel-header=\"main\"\n variant=\"main\"\n bg={workbenchBackgrounds.main}\n position=\"relative\"\n flexShrink={0}\n gap=\"xs\"\n overflow=\"hidden\"\n overflowY=\"hidden\"\n >\n <WorkbenchRegionTabs workbench={workbench} region=\"main\" />\n {/* The tab strip grows into the empty header, so only claim space when a\n main-header view is actually mounted or when there are no tabs to claim it. */}\n <Box flex={hasMainHeader || !hasMainContentTabs ? \"1\" : \"0\"} h=\"full\" minW=\"0\" overflow=\"hidden\">\n {hasMainHeader ? <WorkbenchRegion workbench={workbench} region=\"main-header\" title=\"Main header\" /> : null}\n </Box>\n <WorkbenchHeaderActions\n workbench={workbench}\n menuPath={mainHeaderTrailingMenuPath}\n controlSize={PANEL_HEADER_CONTROL_SIZE}\n />\n <WorkbenchPanelMenuOpeners workbench={workbench} panel=\"main\" />\n <WorkbenchHeaderBorder workbench={workbench} region=\"main-header\" />\n </Header>\n );\n};\n\nexport const WorkbenchBody = (props: WorkbenchBodyProps) => {\n const { workbench } = props;\n const modeSettings = useWorkbenchModeRegionSettings(workbench, \"secondary\");\n const panels = useWorkbenchMainPanels(workbench);\n const { hasMainHeader, secondaryPanel } = panels;\n const persistedSecondarySize = useWorkbenchStore(\n workbench.layout.store,\n (state) => state.layout.regions.secondary.size,\n );\n const secondaryPanelSize = resolveRegionSize(\n modeSettings?.size ?? workbench.layout.getRegionSize(\"secondary\"),\n persistedSecondarySize,\n SECONDARY_PANEL_SIZE,\n );\n\n const mainRegion = (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"main\"\n data-workbench-region=\"main\"\n bg={workbenchBackgrounds.main}\n flex=\"1\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n overflow=\"hidden\"\n >\n <WorkbenchRegion workbench={workbench} region=\"main\" title=\"Main\" />\n </WorkbenchFocusRegion>\n );\n const mainPanelWithMenus = (\n <WorkbenchPanelMenuLayout workbench={workbench} panel=\"main\">\n {mainRegion}\n </WorkbenchPanelMenuLayout>\n );\n\n const mainContent = (\n <Grid\n data-workbench-panel=\"main\"\n gridTemplateRows=\"auto minmax(0, 1fr)\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n bg={workbenchBackgrounds.main}\n layerStyle=\"panel\"\n >\n <MainHeaderBar workbench={workbench} hasMainHeader={hasMainHeader} />\n <Box gridRow=\"2\" h=\"full\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n {mainPanelWithMenus}\n </Box>\n </Grid>\n );\n\n if (!secondaryPanel.has)\n return (\n <Grid as=\"main\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n {mainContent}\n </Grid>\n );\n\n return (\n <ResizableSplitLayout\n as=\"main\"\n minH=\"0\"\n minW=\"0\"\n resizableSide=\"bottom\"\n contentPanel={mainContent}\n resizablePanel={<WorkbenchSecondaryPanel workbench={workbench} hasSecondaryHeader={secondaryPanel.hasHeader} />}\n collapsed={secondaryPanel.collapsed}\n collapsible={secondaryPanel.collapsible}\n defaultSizePx={secondaryPanelSize.defaultPx}\n minSizePx={secondaryPanelSize.minPx}\n maxSizePx={secondaryPanelSize.maxPx}\n contentMinSizePx={SECONDARY_PANEL_CONTENT_MIN_SIZE_PX}\n resizeLabel=\"Resize Secondary Panel\"\n onSizeChange={(height) => workbench.layout.setRegionSize(\"secondary\", height)}\n onCollapsedChange={secondaryPanel.onCollapsedChange}\n />\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { ModeChromeView, useModeChrome } from \"../region/mode-chrome\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchWidgetHost } from \"../region/widget-host\";\nimport { useWorkbenchActiveModeId } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\n\ninterface WorkbenchSidenavProps {\n workbench: WorkbenchCore;\n contextActions: ResourceContextAction[];\n}\n\nexport const WorkbenchSidenav = (props: WorkbenchSidenavProps) => {\n const { workbench, contextActions } = props;\n\n return (\n <ResourceContextMenu actions={contextActions} closeOnSelect={false} keepMountedWhenEmpty>\n <Box h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"sidenav\"\n data-workbench-region=\"sidenav\"\n as=\"aside\"\n bg={workbenchBackgrounds.sidenav}\n layerStyle=\"panel\"\n display=\"flex\"\n flexDirection=\"column\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n w=\"full\"\n >\n <Box flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchRegion workbench={workbench} region=\"sidenav\" title=\"Sidenav\" />\n </Box>\n </WorkbenchFocusRegion>\n </Box>\n </ResourceContextMenu>\n );\n};\n\ninterface WorkbenchRegionPanelProps {\n workbench: WorkbenchCore;\n}\n\nexport const WORKBENCH_STATUS_BAR_HEIGHT = \"2rem\";\n\ninterface WorkbenchStatusBarItemsProps {\n workbench: WorkbenchCore;\n slot: \"leading\" | \"trailing\";\n}\n\nconst WorkbenchStatusBarItems = (props: WorkbenchStatusBarItemsProps) => {\n const { slot, workbench } = props;\n const activeModeId = useWorkbenchActiveModeId(workbench);\n const items = activeModeId === workbench.modes.getActiveModeId() ? workbench.statusBar.listVisibleItems(slot) : [];\n\n return items.map((item) => {\n const view = workbench.views.getView(item.viewId);\n if (!view) return null;\n return (\n <Box key={item.id} display=\"flex\" alignItems=\"center\" minW=\"0\" h=\"full\">\n <WorkbenchWidgetHost\n workbench={workbench}\n region=\"status\"\n placement={{\n widgetId: item.id,\n contributionId: view.id,\n viewId: view.id,\n title: view.title,\n closable: false,\n }}\n />\n </Box>\n );\n });\n};\n\nexport const WorkbenchActivityBar = (props: WorkbenchRegionPanelProps) => {\n const { workbench } = props;\n\n return (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"activity\"\n data-workbench-region=\"activity\"\n as=\"nav\"\n flexShrink={0}\n h=\"full\"\n minH=\"0\"\n overflow=\"hidden\"\n w=\"3.5rem\"\n >\n <WorkbenchRegion workbench={workbench} region=\"activity\" title=\"Activity bar\" />\n </WorkbenchFocusRegion>\n );\n};\n\nexport const WorkbenchStatusBar = (props: WorkbenchRegionPanelProps) => {\n const { workbench } = props;\n useWorkbenchStore(workbench.statusBar.store, (state) => state.items);\n const chrome = useModeChrome(workbench, \"status\");\n\n return (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"status\"\n data-workbench-region=\"status\"\n as=\"footer\"\n flexShrink={0}\n h={WORKBENCH_STATUS_BAR_HEIGHT}\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n >\n {chrome ? (\n <ModeChromeView workbench={workbench} region=\"status\" viewId={chrome} />\n ) : (\n <Box display=\"flex\" alignItems=\"stretch\" justifyContent=\"space-between\" h=\"full\" minW=\"0\" w=\"full\">\n <Box display=\"flex\" alignItems=\"stretch\" minW=\"0\" h=\"full\">\n <WorkbenchStatusBarItems workbench={workbench} slot=\"leading\" />\n </Box>\n <Box display=\"flex\" alignItems=\"stretch\" minW=\"0\" h=\"full\">\n <WorkbenchStatusBarItems workbench={workbench} slot=\"trailing\" />\n </Box>\n </Box>\n )}\n </WorkbenchFocusRegion>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { ResizableSplitLayout } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchRegionTabs } from \"../region/region-tabs\";\nimport { useWorkbenchModeRegionSettings } from \"../shared/use-workbench-mode-region-settings\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { WorkbenchAttachedSidePanel } from \"../side-panel/side-panel\";\n\nconst ATTACHED_PANEL_DEFAULT_SIZE_PX = 420;\nconst ATTACHED_PANEL_MIN_SIZE_PX = 320;\n\ninterface WorkbenchSidePanelRegionPortalProps {\n workbench: WorkbenchCore;\n hasSidePanel: boolean;\n mounted: boolean;\n sidePanelHost: HTMLDivElement | null;\n}\n\nexport const WorkbenchSidePanelRegionPortal = (props: WorkbenchSidePanelRegionPortalProps) => {\n const { workbench, hasSidePanel, mounted, sidePanelHost } = props;\n\n if (!hasSidePanel || !mounted || !sidePanelHost) return null;\n\n return createPortal(\n <WorkbenchRegion workbench={workbench} region=\"side\" title=\"Side Panel\" transparent />,\n sidePanelHost,\n );\n};\n\ninterface WorkbenchSidePanelRegionHeaderProps {\n workbench: WorkbenchCore;\n hasSideHeader: boolean;\n}\n\nexport const WorkbenchSidePanelRegionHeader = (props: WorkbenchSidePanelRegionHeaderProps) => {\n const { workbench, hasSideHeader } = props;\n\n return (\n <Box alignItems=\"center\" display=\"flex\" flex=\"1\" h=\"full\" minW=\"0\" overflow=\"hidden\" w=\"full\">\n <WorkbenchRegionTabs workbench={workbench} region=\"side\" />\n {hasSideHeader ? (\n <Box flex=\"1\" h=\"full\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchRegion workbench={workbench} region=\"side-header\" title=\"Side Panel header\" transparent />\n </Box>\n ) : null}\n </Box>\n );\n};\n\ninterface WorkbenchAttachedSidePanelLayoutProps {\n workbench: WorkbenchCore;\n attached: boolean;\n contentPanel: ReactNode;\n contentMinSizePx: number;\n header: ReactNode;\n onAttachedSlotChange: (slot: HTMLDivElement | null) => void;\n onCollapse: () => void;\n}\n\nexport const WorkbenchAttachedSidePanelLayout = (props: WorkbenchAttachedSidePanelLayoutProps) => {\n const { workbench, attached, contentPanel, contentMinSizePx, header, onAttachedSlotChange, onCollapse } = props;\n const persistedSize = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.side.size);\n const modeSettings = useWorkbenchModeRegionSettings(workbench, \"side\");\n const size = modeSettings?.size ?? workbench.layout.getRegionSize(\"side\");\n const collapsible = modeSettings?.collapsible ?? workbench.layout.getRegionCollapsible(\"side\");\n\n return (\n <ResizableSplitLayout\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n resizableSide=\"right\"\n contentPanel={contentPanel}\n resizablePanel={\n <WorkbenchAttachedSidePanel workbench={workbench} contentSlotRef={onAttachedSlotChange} header={header} />\n }\n collapsed={!attached}\n defaultSizePx={persistedSize ?? size?.defaultPx ?? ATTACHED_PANEL_DEFAULT_SIZE_PX}\n minSizePx={size?.minPx ?? ATTACHED_PANEL_MIN_SIZE_PX}\n maxSizePx={size?.maxPx}\n collapsible={collapsible}\n onSizeChange={(width) => workbench.layout.setRegionSize(\"side\", width)}\n contentMinSizePx={contentMinSizePx}\n resizeLabel=\"Resize Side Panel\"\n onCollapsedChange={(collapsed) => {\n if (attached && collapsed) onCollapse();\n }}\n />\n );\n};\n","import { Flex } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchAttachedSidePanelLayout } from \"./workbench-side-panel-layout\";\n\ninterface WorkbenchSidePanelBoundaryProps {\n workbench: WorkbenchCore;\n showAttachedSidePanel: boolean;\n contentFrame: ReactNode;\n sideHeader: ReactNode;\n contentMinSizePx: number;\n onAttachedSlotChange(slot: HTMLDivElement | null): void;\n}\n\ninterface WorkbenchKeyboardFrameProps {\n children: ReactNode;\n}\n\nconst interactivePointerTargetSelector = [\n \"a[href]\",\n \"button\",\n \"input\",\n \"select\",\n \"textarea\",\n \"[contenteditable='true']\",\n \"[role='button']\",\n \"[role='checkbox']\",\n \"[role='menuitem']\",\n \"[role='option']\",\n \"[role='radio']\",\n \"[role='switch']\",\n \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n\nconst hasClosest = (target: EventTarget | null): target is EventTarget & { closest(selector: string): unknown } =>\n typeof (target as { closest?: unknown } | null)?.closest === \"function\";\n\nexport const shouldFocusWorkbenchKeyboardFrame = (target: EventTarget | null, currentTarget: EventTarget) => {\n if (target === currentTarget) return true;\n if (!hasClosest(target)) return false;\n return !target.closest(interactivePointerTargetSelector);\n};\n\nconst focusWorkbenchKeyboardFrame = (element: HTMLDivElement | null) => {\n element?.focus({ preventScroll: true });\n};\n\nconst WorkbenchKeyboardFrame = (props: WorkbenchKeyboardFrameProps) => {\n const { children } = props;\n const ref = useRef<HTMLDivElement | null>(null);\n\n useLayoutEffect(() => {\n focusWorkbenchKeyboardFrame(ref.current);\n }, []);\n\n return (\n <Flex\n ref={ref}\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n tabIndex={-1}\n outline=\"none\"\n onPointerDown={(event) => {\n if (shouldFocusWorkbenchKeyboardFrame(event.target, event.currentTarget)) {\n focusWorkbenchKeyboardFrame(event.currentTarget);\n }\n }}\n >\n {children}\n </Flex>\n );\n};\n\nexport const WorkbenchSidePanelBoundary = (props: WorkbenchSidePanelBoundaryProps) => {\n const { workbench, showAttachedSidePanel, contentFrame, sideHeader, contentMinSizePx, onAttachedSlotChange } = props;\n\n return (\n <WorkbenchKeyboardFrame>\n <WorkbenchAttachedSidePanelLayout\n workbench={workbench}\n attached={showAttachedSidePanel}\n contentPanel={contentFrame}\n contentMinSizePx={contentMinSizePx}\n header={sideHeader}\n onAttachedSlotChange={onAttachedSlotChange}\n onCollapse={() => workbench.sidePanel.setMode(\"closed\")}\n />\n </WorkbenchKeyboardFrame>\n );\n};\n","import { Flex } from \"@chakra-ui/react\";\nimport { ResizableSplitLayout, type ResourceContextAction, Toaster } from \"@pstdio/ui\";\nimport { type ReactNode, useLayoutEffect, useRef, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchShellOpenRegion } from \"../../core\";\nimport { WorkbenchCommandPalette } from \"../command-palette/command-palette\";\nimport type { CommandParamFieldRenderer } from \"../command-palette/command-params-dialog\";\nimport { WorkbenchNavChrome, type WorkbenchNavRegionControl } from \"../header/workbench-nav-chrome\";\nimport { WorkbenchKeybindingDispatcher } from \"../keybindings/workbench-keybinding-dispatcher\";\nimport { WorkbenchNotificationHost } from \"../notifications/notification-host\";\nimport { useModeChrome } from \"../region/mode-chrome\";\nimport { useWorkbenchPanelHeaderVisible } from \"../region/region-tabs\";\nimport { installWorkbenchControlsRenderer } from \"../renderers/controls/install-controls-renderer\";\nimport { installWorkbenchDataTableRenderer } from \"../renderers/data-table/install-data-table-renderer\";\nimport { installWorkbenchFileRenderer } from \"../renderers/file/install-file-renderer\";\nimport { installWorkbenchKanbanRenderer } from \"../renderers/kanban/install-kanban-renderer\";\nimport { installWorkbenchTreeRenderer } from \"../renderers/tree/install-tree-renderer\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { WorkbenchFloatingSidePanel } from \"../side-panel/side-panel\";\nimport { useWorkbenchFileIconThemePreferences } from \"../theme/use-workbench-file-icon-theme-preferences\";\nimport { useWorkbenchThemePreferences } from \"../theme/use-workbench-theme-preferences\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchThemeProvider } from \"../theme/workbench-theme-provider\";\nimport { WorkbenchThemeScope } from \"../theme/workbench-theme-scope\";\nimport { WorkbenchOverlayLayer } from \"./overlay-layer\";\nimport { useWorkbenchRegionContent } from \"./use-workbench-region-content\";\nimport { WorkbenchBody } from \"./workbench-body\";\nimport { resolvePanelCollapsible } from \"./workbench-panel-state\";\nimport {\n WORKBENCH_STATUS_BAR_HEIGHT,\n WorkbenchActivityBar,\n WorkbenchSidenav,\n WorkbenchStatusBar,\n} from \"./workbench-panels\";\nimport { WorkbenchSidePanelBoundary } from \"./workbench-side-panel-boundary\";\nimport { WorkbenchSidePanelRegionHeader, WorkbenchSidePanelRegionPortal } from \"./workbench-side-panel-layout\";\n\ninterface WorkbenchProps {\n workbench: WorkbenchCore;\n /** Host chrome above all workbench regions, inside the current theme. */\n titleBar?: ReactNode;\n renderParamField?: CommandParamFieldRenderer;\n /** Icon shown in the closed Side Panel's bubble launcher. */\n sidePanelBubbleIcon?: ReactNode;\n /** Host action for opening the closed Side Panel from its bubble launcher. */\n onOpenSidePanel?: () => void;\n}\n\nconst SIDENAV_DEFAULT_SIZE_PX = 250;\nconst SIDENAV_MIN_SIZE_PX = 200;\nconst CONTENT_MIN_SIZE_PX = 320;\n\nconst resolveSidenavSize = (workbench: WorkbenchCore, persistedSize: number | undefined) => {\n const regionSize = workbench.layout.getRegionSize(\"sidenav\");\n\n return {\n defaultPx: persistedSize ?? regionSize?.defaultPx ?? SIDENAV_DEFAULT_SIZE_PX,\n minPx: regionSize?.minPx ?? SIDENAV_MIN_SIZE_PX,\n maxPx: regionSize?.maxPx,\n };\n};\n\nconst createSidePanelHost = () => {\n if (typeof document === \"undefined\") return null;\n const host = document.createElement(\"div\");\n host.style.display = \"contents\";\n host.dataset.workbenchSidePanelHost = \"\";\n return host;\n};\n\nexport const resolveActiveSidePanelSlot = (input: {\n mounted: boolean;\n mode: \"attached\" | \"floating\" | \"closed\";\n attachedSlot: HTMLDivElement | null;\n floatingSlot: HTMLDivElement | null;\n}) => {\n if (!input.mounted) return null;\n if (input.mode === \"floating\") return input.floatingSlot;\n return input.attachedSlot;\n};\n\nconst useWorkbenchLayoutFlags = (workbench: WorkbenchCore) => {\n const statusChrome = useModeChrome(workbench, \"status\");\n const statusBarItems = useWorkbenchStore(workbench.statusBar.store, (state) => state.items);\n useWorkbenchStore(workbench.context.store, (state) => state.values);\n const activeModeId = useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n return {\n hasNavWidgets: useWorkbenchRegionContent(workbench, \"nav\"),\n hasActivityBarWidgets: useWorkbenchRegionContent(workbench, \"activity\"),\n hasSidenavWidgets: useWorkbenchRegionContent(workbench, \"sidenav\"),\n hasSecondaryHeaderWidgets: useWorkbenchRegionContent(workbench, \"secondary-header\"),\n hasSecondaryWidgets: useWorkbenchRegionContent(workbench, \"secondary\", { locationScoped: true }),\n hasSideHeaderWidgets: useWorkbenchRegionContent(workbench, \"side-header\"),\n hasSideWidgets: useWorkbenchRegionContent(workbench, \"side\", { locationScoped: true }),\n hasStatusWidgets:\n statusChrome !== undefined\n ? statusChrome !== false\n : activeModeId === workbench.modes.getActiveModeId() &&\n Object.keys(statusBarItems).length > 0 &&\n workbench.statusBar.listVisibleItems().length > 0,\n };\n};\n\ninterface WorkbenchRegionControlsInput {\n showSidenav: boolean;\n sidenavOpen: boolean;\n showSecondaryPanel: boolean;\n secondaryPanelOpen: boolean;\n hasSidePanel: boolean;\n sidePanelMode: \"attached\" | \"floating\" | \"closed\";\n setPanelOpen: (region: WorkbenchShellOpenRegion, open: boolean) => void;\n}\n\nconst createWorkbenchRegionControls = (input: WorkbenchRegionControlsInput) => {\n const controls: WorkbenchNavRegionControl[] = [];\n\n if (input.showSidenav && !input.sidenavOpen) {\n controls.push({\n id: \"sidenav\",\n label: \"Show Sidenav\",\n icon: \"PanelLeft\",\n open: false,\n onToggle: () => input.setPanelOpen(\"sidenav\", true),\n });\n }\n\n if (input.showSecondaryPanel) {\n controls.push({\n id: \"secondary\",\n label: input.secondaryPanelOpen ? \"Hide Secondary Panel\" : \"Show Secondary Panel\",\n icon: \"PanelBottom\",\n open: input.secondaryPanelOpen,\n onToggle: () => input.setPanelOpen(\"secondary\", !input.secondaryPanelOpen),\n });\n }\n\n if (input.hasSidePanel) {\n const open = input.sidePanelMode !== \"closed\";\n controls.push({\n id: \"side\",\n label: open ? \"Hide Side Panel\" : \"Show Side Panel\",\n icon: \"PanelRight\",\n open,\n onToggle: () => input.setPanelOpen(\"side\", !open),\n });\n }\n\n return controls;\n};\n\nconst WorkbenchContent = (props: WorkbenchProps) => {\n const { workbench, renderParamField, sidePanelBubbleIcon, onOpenSidePanel, titleBar } = props;\n const [sidenavContextActions, setSidenavContextActions] = useState<ResourceContextAction[]>([]);\n installWorkbenchTreeRenderer(workbench, {\n renderParamField,\n onSidenavContextActionsChange: setSidenavContextActions,\n });\n installWorkbenchKanbanRenderer(workbench);\n installWorkbenchDataTableRenderer(workbench);\n installWorkbenchFileRenderer(workbench);\n installWorkbenchControlsRenderer(workbench);\n const [attachedSidePanelSlot, setAttachedSidePanelSlot] = useState<HTMLDivElement | null>(null);\n const [floatingSidePanelSlot, setFloatingSidePanelSlot] = useState<HTMLDivElement | null>(null);\n const sidePanelHostRef = useRef<HTMLDivElement | null>(null);\n if (!sidePanelHostRef.current) sidePanelHostRef.current = createSidePanelHost();\n\n const sidePanelMode = useWorkbenchStore(workbench.sidePanel.store, (state) => state.mode);\n const paletteOpen = useWorkbenchStore(workbench.commandPalette.store, (state) => state.open);\n const paletteInitialQuery = useWorkbenchStore(workbench.commandPalette.store, (state) => state.initialQuery);\n const sidenavOpen = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.sidenav.visible);\n const secondaryPanelOpen = useWorkbenchStore(\n workbench.layout.store,\n (state) => state.layout.regions.secondary.visible,\n );\n const hasSecondaryPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"secondary\");\n const hasSidePanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"side\");\n const floatingPanelsAllowed = useWorkbenchStore(workbench.modes.store, () => workbench.sidePanel.canFloat());\n\n const {\n hasActivityBarWidgets,\n hasNavWidgets,\n hasSideHeaderWidgets,\n hasSideWidgets,\n hasSidenavWidgets,\n hasSecondaryHeaderWidgets,\n hasSecondaryWidgets,\n hasStatusWidgets,\n } = useWorkbenchLayoutFlags(workbench);\n const hasSidePanel = hasSideHeaderWidgets || hasSideWidgets || hasSidePanelHeader;\n const showSidenav = hasSidenavWidgets;\n const sidenavCollapsible = resolvePanelCollapsible(workbench, \"sidenav\");\n const showSecondaryPanel = hasSecondaryHeaderWidgets || hasSecondaryWidgets || hasSecondaryPanelHeader;\n const persistedSidenavSize = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.sidenav.size);\n const sidenavSize = resolveSidenavSize(workbench, persistedSidenavSize);\n const showAttachedSidePanel = hasSidePanel && sidePanelMode === \"attached\";\n // Closed removes the Side Panel's footprint, not its live region. Keeping the\n // portal in the hidden attached slot preserves provider and renderer state.\n const mountSidePanel = hasSidePanel;\n const setPanelOpen = workbench.shell.setRegionOpen;\n const regionControls = createWorkbenchRegionControls({\n showSidenav,\n sidenavOpen,\n showSecondaryPanel,\n secondaryPanelOpen,\n hasSidePanel,\n sidePanelMode,\n setPanelOpen,\n });\n\n const sideHeader =\n hasSideHeaderWidgets || hasSidePanelHeader ? (\n <WorkbenchSidePanelRegionHeader workbench={workbench} hasSideHeader={hasSideHeaderWidgets} />\n ) : undefined;\n const activeSidePanelSlot = resolveActiveSidePanelSlot({\n mounted: mountSidePanel,\n mode: sidePanelMode,\n attachedSlot: attachedSidePanelSlot,\n floatingSlot: floatingSidePanelSlot,\n });\n\n useLayoutEffect(() => {\n const host = sidePanelHostRef.current;\n if (!host) return;\n if (activeSidePanelSlot) {\n if (host.parentNode !== activeSidePanelSlot) activeSidePanelSlot.appendChild(host);\n } else if (!mountSidePanel && host.parentNode) {\n host.parentNode.removeChild(host);\n }\n }, [activeSidePanelSlot, mountSidePanel]);\n\n const contentWithHeader = (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <WorkbenchNavChrome workbench={workbench} hasNav={hasNavWidgets} regionControls={regionControls} />\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchBody workbench={workbench} />\n </Flex>\n </Flex>\n );\n\n const contentWithSidenav = showSidenav ? (\n <ResizableSplitLayout\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n resizablePanel={<WorkbenchSidenav workbench={workbench} contextActions={sidenavContextActions} />}\n contentPanel={contentWithHeader}\n collapsed={!sidenavOpen}\n collapsible={sidenavCollapsible}\n defaultSizePx={sidenavSize.defaultPx}\n minSizePx={sidenavSize.minPx}\n maxSizePx={sidenavSize.maxPx}\n contentMinSizePx={CONTENT_MIN_SIZE_PX}\n resizeLabel=\"Resize sidenav\"\n onSizeChange={(width) => workbench.layout.setRegionSize(\"sidenav\", width)}\n onCollapsedChange={(collapsed) => {\n if (!collapsed || sidenavCollapsible) setPanelOpen(\"sidenav\", !collapsed);\n }}\n />\n ) : (\n contentWithHeader\n );\n\n const contentFrame = (\n <Flex position=\"relative\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" bg={workbenchBackgrounds.main} color=\"fg\">\n {hasActivityBarWidgets ? <WorkbenchActivityBar workbench={workbench} /> : null}\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\" position=\"relative\">\n {contentWithSidenav}\n </Flex>\n <WorkbenchOverlayLayer workbench={workbench} />\n </Flex>\n );\n\n return (\n <WorkbenchThemeScope h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <Flex direction=\"column\" h=\"full\" minH=\"0\" minW=\"0\" position=\"relative\" w=\"full\">\n {titleBar}\n <Flex\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n py=\"panel-gap\"\n pr=\"panel-gap\"\n pl={hasActivityBarWidgets ? \"0\" : \"panel-gap\"}\n >\n <WorkbenchSidePanelBoundary\n workbench={workbench}\n showAttachedSidePanel={showAttachedSidePanel}\n contentFrame={contentFrame}\n sideHeader={sideHeader}\n contentMinSizePx={CONTENT_MIN_SIZE_PX}\n onAttachedSlotChange={setAttachedSidePanelSlot}\n />\n </Flex>\n {hasStatusWidgets ? <WorkbenchStatusBar workbench={workbench} /> : null}\n {hasSidePanel && floatingPanelsAllowed ? (\n <WorkbenchFloatingSidePanel\n workbench={workbench}\n bubbleIcon={sidePanelBubbleIcon}\n onOpen={onOpenSidePanel}\n contentSlotRef={setFloatingSidePanelSlot}\n bottomOffset={hasStatusWidgets ? WORKBENCH_STATUS_BAR_HEIGHT : undefined}\n header={sideHeader}\n />\n ) : null}\n <WorkbenchCommandPalette\n workbench={workbench}\n open={paletteOpen}\n initialQuery={paletteInitialQuery}\n renderParamField={renderParamField}\n onClose={() => workbench.commandPalette.close()}\n />\n <WorkbenchKeybindingDispatcher workbench={workbench} />\n <WorkbenchNotificationHost workbench={workbench} />\n </Flex>\n <WorkbenchSidePanelRegionPortal\n workbench={workbench}\n hasSidePanel={hasSidePanel}\n mounted={mountSidePanel}\n sidePanelHost={sidePanelHostRef.current}\n />\n </WorkbenchThemeScope>\n );\n};\n\nexport const Workbench = (props: WorkbenchProps) => {\n const themePreferences = useWorkbenchThemePreferences(props.workbench);\n const mode = useWorkbenchStore(props.workbench.modes.store, (state) =>\n state.activeModeId ? state.modes[state.activeModeId] : undefined,\n );\n const fileIconThemePreferences = useWorkbenchFileIconThemePreferences(props.workbench);\n\n return (\n <WorkbenchThemeProvider\n themePreferences={themePreferences}\n fileIconThemePreferences={fileIconThemePreferences}\n defaultThemePreference={mode?.defaultTheme}\n preferenceScope={mode?.defaultTheme ? mode.id : undefined}\n >\n <WorkbenchContent {...props} />\n <Toaster />\n </WorkbenchThemeProvider>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport type { Disposable, WorkbenchCore, WorkbenchModuleContribution } from \"../../core\";\n\nexport interface WorkbenchModuleHostRegistration {\n disposable: Disposable;\n}\n\nexport interface WorkbenchModuleHostProps {\n workbench: WorkbenchCore;\n modules: readonly WorkbenchModuleContribution[];\n}\n\nexport const disposeWorkbenchModuleHostRegistrations = (\n registrations: Map<string, WorkbenchModuleHostRegistration>,\n) => {\n for (const registration of registrations.values()) registration.disposable.dispose();\n registrations.clear();\n};\n\nexport const syncWorkbenchModuleHostRegistrations = (\n workbench: WorkbenchCore,\n registrations: Map<string, WorkbenchModuleHostRegistration>,\n modules: readonly WorkbenchModuleContribution[],\n) => {\n const moduleIds = new Set(modules.map((module) => module.id));\n\n for (const [id, registration] of registrations) {\n if (!moduleIds.has(id)) {\n registration.disposable.dispose();\n registrations.delete(id);\n }\n }\n\n for (const module of modules) {\n if (!registrations.has(module.id)) {\n registrations.set(module.id, { disposable: workbench.registerModule(module) });\n }\n }\n};\n\nexport const WorkbenchModuleHost = (props: WorkbenchModuleHostProps) => {\n const { workbench, modules } = props;\n const registeredWorkbench = useRef(workbench);\n const registrations = useRef(new Map<string, WorkbenchModuleHostRegistration>());\n\n useEffect(() => {\n if (registeredWorkbench.current !== workbench) {\n disposeWorkbenchModuleHostRegistrations(registrations.current);\n registeredWorkbench.current = workbench;\n }\n\n syncWorkbenchModuleHostRegistrations(workbench, registrations.current, modules);\n }, [modules, workbench]);\n\n useEffect(() => () => disposeWorkbenchModuleHostRegistrations(registrations.current), []);\n\n return null;\n};\n"],"names":["getSessionStatus","item","resource","metadata","status","undefined","WorkbenchBreadcrumbIcon","props","$","_c","t0","indicator","type","t1","jsx","SessionIndicator","icon","Text","WorkbenchIcon","WorkbenchBreadcrumbTitle","title","t2","HStack","buildWorkbenchBreadcrumbItems","items","map","url","onClick","WorkbenchBreadcrumbView","workbench","useWorkbenchStore","breadcrumbs","store","_temp","length","Breadcrumb","state","useWorkbenchCompositionPanels","layout","modes","activeModeId","commands","context","main","composition","panelsFor","secondary","side","chakraBackgrounds","sidenav","panel","vscodeColor","token","fallback","replaceAll","workbenchBackgrounds","widget","workbenchRegionBackgrounds","nav","activity","overlay","workbenchCommandPaletteBackground","getWorkbenchRegionBackground","region","humanize","value","spaced","replace","trim","charAt","toUpperCase","slice","isRecord","Array","isArray","isFileUploadValue","file","id","name","isCommandFilesParamValue","refs","every","ref","uploads","createCommandFilesParamValue","input","commandFilesParamValue","raw","multiple","filter","stringifyEditableValue","String","JSON","stringify","toIdentifierPrefix","_match","char","toLowerCase","metadataString","key","resourceContextValue","entry","metadataValue","resourceKey","resourceType","label","dedupeOptions","options","seen","Set","option","has","add","hasCommandParameters","params","listCommandParamEntries","Object","entries","flatMap","param","resolvedFrom","buildCommandParamInitialValues","baseArgs","base","values","hasOwn","defaultValue","isEmptyValue","parseJsonValue","parse","Error","normalizeValue","numberValue","Number","isFinite","split","Boolean","normalizeCommandParamValues","normalized","required","mergeCommandParamArgs","SEARCH_MODE_ID","COMMAND_MODE_ID","THEME_MODE_ID","workbenchPaletteModes","inputPrefix","isThemePaletteView","view","isPickerPaletteView","getPaletteViewMode","getPaletteViewModes","getPaletteInitialActiveIndex","themeInitialActiveIndex","getPaletteInputIcon","mode","Terminal","Search","getPalettePlaceholder","RESOURCE_QUERY_LIMIT","RESOURCE_QUERY_DEBOUNCE_MS","useWorkbenchCommandPaletteResourceEntries","query","open","onClose","refreshToken","commandPaletteResources","Symbol","for","setEntries","useState","cancelled","handle","setTimeout","queryProviders","limit","then","groups","group","results","result","searchText","keywords","join","description","onActivate","Promise","resolve","activate","catch","_temp2","clearTimeout","useEffect","asText","asList","commandParamName","commandParamOptions","JSON_PARAM_TYPES","buildCommandParam","accept","multiSelect","placeholder","searchable","clearable","singleLine","readCommandParamValue","CommandParamField","disabled","onChange","next","nextValue","change","_id","next_0","t3","ParamEditorRow","isFilled","CommandParamsDialog","request","renderParamField","prepareArgs","onRun","setValues","error","setError","submitting","setSubmitting","record","command","args","close","setValue","current","run","preparedArgs","commandId","onArgsChange","nextArgs","caught","message","isValid","Dialog","details","jsxs","event","handleDialogAcceptShortcut","Stack","CloseButton","ScrollArea","px","py","fieldProps","custom","Fragment","Button","submitLabel","getPanelLabel","openPanelWidget","pinned","openCommand","executeCommand","source","widgetResource","resourceKinds","canOpen","openWidget","closable","role","tabRetention","shell","setRegionOpen","sidePanel","getMode","setMode","createWorkbenchPanelWidgetPaletteEntries","panelsByRegion","getPrimaryResource","workbenchPanelRegions","addable","contribution","panelLabel","createResourceEntry","kind","resources","getKind","createWorkbenchResourcePaletteEntries","listResources","getThemeIconName","preference","getThemePreferenceLabel","themePreference","getThemePreferenceEntryIndex","themePreferences","index","findIndex","Math","max","THEME_GROUP_LABELS","light","dark","byModeThenLabel","a","b","localeCompare","createWorkbenchThemePreferencePaletteEntries","setThemePreference","sort","isSelected","rollbackThemePreview","themePreviewRef","preview","baseTheme","getCommandSearchText","category","createShortcutByCommandId","Map","keybindings","listCommandKeybindings","keybinding","getShortcut","binding","PaletteShortcut","getCommandErrorMessage","commandExecutionContext","executePaletteCommand","notifications","show","level","createEntry","action","onRequestParams","shortcutByCommandId","isCommandVisible","shortcut","get","getRecordGroup","getRecordOrder","order","byCommandPaletteGroup","left","right","groupComparison","listCommandRecords","menuPath","listMenuItems","matches","when","getCommand","listCommands","createWorkbenchCommandPaletteEntries","WorkbenchCommandPalette","workbenchCommandPaletteMenuPath","initialQuery","useThemePreference","commandPalette","useRef","paramsRequest","liveQuery","setLiveQuery","commandPaletteResourceEntries","compositionPanels","closePalette","exitPickerView","commitThemePreview","commandEntries","requestParams","resourceEntries","themeEntries","panelWidgetEntries","isThemeView","initialActiveIndex","activeViewMode","activeViewModes","Box","position","inset","alignItems","justifyContent","h","minH","padding","w","background","Palette","themeEntry","ctx","setQuery","setActiveIndex","prepareCommandArgs","clearParams","WorkbenchFocusRegion","boxProps","children","activeRegion","focus","element","contains","document","activeElement","preventScroll","currentTarget","target","setActiveRegion","menuPathKey","path","workbenchResourceMetadataContextKeyPrefix","workbenchResourceMetadataContextKey","isWorkbenchResourceContextKey","workbenchResourceTypeContextKey","workbenchResourceIdContextKey","startsWith","omitWorkbenchResourceContextValues","resolveContextValues","contextValues","createWorkbenchResourceContextValues","listWorkbenchMenuItemsFromState","itemsByPath","leftOrder","rightOrder","byContributionPriority","matchesContextExpression","handler","isVisible","iconSrc","overflowLabel","readOnly","isEnabled","listWorkbenchMenuItems","menuStore","getState","isKernelAction","isOverflowAction","withLeadingSeparator","enabled","first","rest","separatorBefore","resolveOverflowItems","regularItems","kernelItems","resolveWorkbenchHeaderActionGroups","inlineItems","overflowItems","resolveWorkbenchHeaderOverflowLabel","find","WorkbenchInlineHeaderAction","controlSize","onSelect","IconButton","Tooltip","WorkbenchHeaderActions","_temp3","_temp4","T0","t4","t5","t6","bb0","t7","_temp5","t8","item_0","Menu","Portal","item_1","ListRow","state_0","state_1","state_2","getAnchorResource","useTanStackWorkbenchHotkeys","registrations","hotkeys","ignoreInputs","preventDefault","stopPropagation","useHotkeys","registration","hotkey","callback","execute","keyAliases","alt","cmd","ctrl","control","meta","mod","shift","normalizeWorkbenchKeybindingStep","part","trimmed","alias","normalizeWorkbenchKeybinding","steps","getKeybindingSteps","createWorkbenchHotkeyRegistrations","commandIds","allowedCommandIds","listActiveKeybindings","isCommandEnabled","navigation","openTarget","WorkbenchKeybindingDispatcher","setRegistrations","refresh","subscriptions","subscribe","unsubscribe","commandContextValues","snapshot","isRegisteredCommandVisible","executeTreeAction","resolvedArgs","runTreeAction","onCommandError","resolveTreeActionCommand","isTreeActionVisible","isTreeActionEnabled","createMenuIcon","display","width","height","objectFit","createMenuEndContent","external","isKernelMenuAction","createTreeMenuItemGroups","shortcuts","k","sourceCommandId","endContent","onAction","push","createTreeActionMenuItems","actions","createTreeContextMenuItems","actionItems","visibleRegularItems","createTreeActionItems","tooltip","toResourceContextAction","Icon","isDisabled","createWorkbenchResourceActions","resourceContextMenuPath","useWorkbenchResourceActionResolver","executeNotificationAction","WorkbenchNotificationHost","shownNotificationIds","showNotification","notification","toastAction","toastOptions","onStatusChange","dismiss","toaster","update","create","notification_0","listNotifications","subscription","delete","dispose","clear","useWorkbenchLocationResource","pages","useWorkbenchActiveModeId","location","WorkbenchWidgetFallback","Center","WorkbenchRenderedWidgetFrame","noopRefresh","toHostedPanel","placement","contributionId","rendererId","toPanelContribution","WorkbenchWidgetHost","getWidget","viewId","views","getView","getWorkbenchRenderers","renderer","renderers","getRenderer","refreshKeys","instance","toPanelInstance","render","t9","useModeChrome","chrome","ModeChromeView","widgetId","horizontalScrollRegions","panelMenuRegionIds","workbenchPanelMenuRegions","regions","sidePanelRegionIds","verticalContentProps","flexDirection","horizontalContentProps","getActivePlacement","widgets","activeWidgetId","resolveRenderedRegionPlacements","activePlacement","mountStrategy","resolveRegionPlacementRenderState","active","additive","pointerEvents","visibility","createPlaceholderPlacement","WorkbenchRegionPlacement","globalActiveWidgetId","renderState","overlaysActivePlacement","flex","activatePanel","activatePlacement","WorkbenchRegion","transparent","locationResource","modeId","currentRegionState","registeredWidgets","activeSubPanel","getActiveWorkbenchSubPanel","getWorkbenchPanelForMenuRegion","ignoreOwnerResourceKey","activeLocationPanel","getActiveWorkbenchLocationPanel","regionState","matchesWorkbenchModeEligibility","isWorkbenchPanelPlacementVisible","matchesWorkbenchPanelMenuOwner","locationPanel","subPanel","getPlaceholder","placement_0","renderedPlacements","scrollsHorizontally","Flex","t10","t11","t12","t13","t14","T1","t15","t16","t17","t18","t19","t20","t21","t22","t23","renderedPlacement","t24","t25","WorkbenchPanelAddMenu","panels","triggerRef","openPanel","PANEL_HEADER_CONTROL_SIZE","trigger","getAnchorElement","panel_0","toTabKey","regionId","suppressesSidenavTabStrip","_placements","resolveTabIconName","resourceKindIcon","resourceIcon","resolveDisplayedActiveWidgetId","visiblePlacements","some","isWorkbenchPanelRegion","panelRegion","shouldShowRegionTabs","placements","alwaysShowTabs","shouldShowPanelHeader","hasTabs","hasPanelMenus","hasHeaderActions","isPlacementEligibleForRegion","getActiveModeId","ignoreResourceLocation","getLayout","useWorkbenchRegionTabsState","visibilityStorageKey","layoutState","tabStore","useTabVisibilityStore","subPanelPlacements","tabOverrides","visibleSubPanels","filterVisibleTabs","_temp6","visibleSubPanelIds","eligibleSubPanels","leadingItems","placement_2","workbenchRegionTabLeadingMenuPath","getRegionSettings","showTabs","hasActions","reset","toggleTab","useWorkbenchPanelHeaderVisible","_temp7","menuRegions","menuRegion","useWorkbenchRegionTabsVisible","state_3","placement_1","useTabSnapshot","tab","getSnapshot","setSnapshot","useRegionTabBehavior","tabSnapshot","nextWidgetId","previousWidgetId","sortable","isPreview","menu","hasCustomMenu","hasContextMenu","sortableState","useSortable","openMenu","setOpenMenu","x","y","anchor","setAnchor","rect","getBoundingClientRect","openTabMenu","event_0","openCustomMenu","event_1","openContextMenu","menu_0","setMenuOpen","event_2","altKey","reorderPanel","beforeWidgetId","afterWidgetId","reorderWithKeyboard","WorkbenchRegionTabMenuSurface","mainAxis","getAnchorRect","offset","WorkbenchRegionTabContextMenu","placementIdentity","pinPlacement","updatePanel","strategy","WorkbenchRegionTabLabel","color","activateTabAction","WorkbenchStructuredTabMenu","groupIndex","rows","row","iconColor","selected","WorkbenchRegionTabCloseButton","isActive","opacity","bg","identity","closePlacement","closePanel","WorkbenchRegionTabMenus","behavior","open_0","WorkbenchRegionTab","labelId","isDragging","listeners","setNodeRef","transform","transition","menuOpen","CSS","Transform","toString","Tabs","SortableRegionTabList","leadingActions","activationConstraint","distance","sensors","useSensors","useSensor","PointerSensor","T2","reorderable","over","activeIndex","overIndex","reorderWidget","DndContext","closestCenter","SortableContext","horizontalListSortingStrategy","List","placement_3","reorderableIndex","candidate","resolvePlacementIcon","iconName","WorkbenchRegionTabs","getKey","viewport","setViewport","hiddenByDefault","menuActions","buildTabVisibilityMenuActions","onToggleTab","onResetAll","visibleIcon","hiddenIcon","resetIcon","hasVisibilityMenu","Element","closest","openVisibilityMenu","onWheel","deltaY","scrollWidth","clientWidth","scrollLeft","addEventListener","passive","removeEventListener","onSelectLeadingItem","setRegionActiveWidget","PANEL_HEADER_TAB_SIZE","t26","t27","t28","t29","t30","details_0","t31","Root","resolveDataTableRendererColumns","contributionColumns","columns","firstRow","keys","buildDataTableRendererData","rowByData","WeakMap","data","fromEntries","column","set","resolveDataTableRendererSelectionActions","destructive","rendererRow","resolveDataTableRendererResourceActions","resolveResourceActions","_context","resolveDataTableRendererStorageKey","instanceId","initialResult","lastResults","resultCacheKey","WorkbenchDataTableView","cacheKey","setResult","loading","setLoading","requestRef","runQuery","requestId","executeQuery","refreshSubscription","onDidRefreshDataTableRenderer","dataTableRendererId","model","labels","descriptions","icons","_temp8","stats","_temp9","_temp0","rowActions","selectionActions","data_0","row_0","onRowActivate","_temp1","openRow","_temp10","_temp11","skeletonColumns","DataTableSkeleton","emptyTitle","emptyDescription","EmptyState","data_1","_temp12","_temp13","data_2","data_3","initialPageSize","pageSizeOptions","selectionMode","DataTable","column_0","column_1","column_2","column_3","column_4","column_5","stat","column_6","column_7","column_8","column_9","hidden","column_10","column_11","column_12","BOOLEAN_OPTIONS","at","toOptions","toParam","schema","default","enum","preferenceSchemaToParams","paramValueToPreference","toName","WorkbenchPreferencesForm","preferences","names","resolveScopeId","staged","setStaged","formKey","setFormKey","scope","scopeId","scopeRef","getSchema","getValue","schemaByName","name_0","schema_0","persist","value_0","handleChange","name_1","value_1","save","discard","hasStaged","ParamEditor","key_0","activeNodeIds","ids","uniqueIds","resolveTreeNodeResourceKey","node","listTreeNodes","nodes","childrenByNodeId","listSectionNodes","sections","section","resolveActiveResourceNodeIds","resourceKeys","findSectionNode","nodeId","filterTreeListSelection","selection","pageRefsEqual","extensionId","targetMatchesPage","activePage","activeResource","targets","page","resolveActivePageNodeIds","resolveTreeListSelection","activeNodeId","activeLocation","selectedNodeId","declaredSelection","activeResourceKeys","getWorkbenchSelectionResourceKeys","selectedResourceKey","selectedNode","includes","activeResourceNodeId","activePageNodeId","canVirtualizeTreeNode","inlineInput","isContainer","canVirtualizeTreeSections","findNode","child","findNodeInSections","wrapTreeNodeIcon","iconTooltip","resolveTreeNodeIcon","iconElement","resolveTreeNodeNavigationIntent","payload","resolveTreeNodeResource","renderShortcutEndContent","resolveTreeNodeEndContent","additions","diffAdditions","deletions","diffDeletions","DiffBubble","toTreeListSectionEmptyNode","emptyState","rowVariant","toTreeListNode","navigationIntent","commandContext","contextMenuItems","contextMenuActions","contextMenuPath","menuItems","moveScope","showContextMenuTrigger","canHide","canReorder","canDrag","canDrop","menuPlacement","collapsible","isNavigable","toTreeListSection","emptyNode","TreeParamsDialog","TREE_SKELETON_WIDTHS","TreeViewSkeleton","TreeViewBody","moduleLoading","backgroundContextActions","draggable","customizationAvailable","expandedNodeIds","expandedSectionIds","scrollRef","onToggleSection","onToggleNode","onReorderSections","onReorderNodes","canMove","onMoveNode","onNavigate","TreeList","Skeleton","createMoveTreeNode","moveNode","sourceNodeId","targetNodeId","trees","getTreeState","setSelectedNode","onError","shouldSelectTreeNodeForNavigationTarget","TreeViewSearch","visible","Header","InputGroup","Input","isUnregisteredTreeError","treeId","getTreeRenderer","header","body","footer","loadExpandedTreeChildren","expanded","visited","loadNodes","all","getChildren","shouldShowTreeLoading","loadedTreeId","treeViewId","expandDefaultTreeSections","tree","sectionId","defaultExpandedSectionIds","setSectionExpanded","loadTreeData","getHeader","getBody","getFooter","useTreeData","setHeader","setBody","setFooter","setChildrenByNodeId","loadedTreeIdRef","loadRevisionRef","loadTree","loadRevision","treeStillRegistered","loadError","disposable","onDidRefresh","toStringLabel","isCustomizableNode","visibilityContextIcon","effective","buildNodeVisibilityContextMenuItem","nodeOverrides","resolveVisibility","existingItems","addRegionNodeVisibilityContextMenuItems","changed","addSectionNodeVisibilityContextMenuItems","useTreeViewCustomization","storageKey","sectionOverrides","useTreeListVisibilityStore","toggleSection","toggleNode","resetVisibility","sectionOrder","useTreeListOrderStore","nodeOrderBySection","sectionSlotById","setSectionOrder","setNodeOrder","setSectionSlot","resetOrder","defaultSlotBySectionId","orderedFooterSections","orderedHeaderSections","orderedSections","visibleFooterSections","visibleHeaderSections","visibleSections","footerSections","headerSections","visibilityActions","orderedSectionsBySlot","content","orderedAllSections","applyTreeListOrder","section_2","slot","includeNodeContextMenus","suppressNodeContextMenus","contentSections","filterVisibleSections","buildTreeVisibilityMenuActions","_temp15","_temp17","_temp19","customizationRevision","slot_0","nextSectionIds","idsBySlot","_temp20","_temp21","_temp22","nextSectionIds_0","sourceSectionId","destinationSectionId","destinationSlot","onMoveSection","state_4","state_5","state_6","state_7","state_8","state_9","state_10","section_0","section_1","_temp14","section_3","_temp16","node_0","section_4","_temp18","node_1","section_5","section_6","section_7","section_8","EMPTY_TREE_STATE","resolveActivePlacement","resolveTreeActiveResource","useSidenavContextActions","revision","actionsRef","navigateTreeNode","intent","onOpenResourceError","createToggleTreeNode","setNodeExpanded","WorkbenchTreeView","onSidenavContextActionsChange","treeRenderer","setFilter","treeState","treeStore","statesByTreeId","projectId","setParamsRequest","rawHeaderSections","rawSections","adapterContext","rawFooterSections","navigationContext","bodyActiveNodeId","headerActiveNodeId","activeNodeSelection","footerActiveNodeId","searchPlaceholder","style","overflowX","minWidth","minHeight","nextSectionIds_1","TreeListDragProvider","useSettingsRevision","settings","listener","useSyncExternalStore","Centered","ScrollableSettingsContent","SettingsViewContent","panelId","CollectionItemView","itemId","resolveCollectionItem","setState","alive","Spinner","SettingsSurfacePanel","getPanel","p","gap","SettingsOverlay","navTreeId","ResizableSplitLayout","SETTINGS_RESOURCE_KIND","WORKBENCH_SETTINGS_OPEN_COMMAND_ID","settingsPanelResource","settingsItemResource","isSettingsScopeVisible","hasProjectScope","FALLBACK_SECTION_ID","toTreeActions","collectionItemNode","itemLabel","itemIcon","orderGroupKeys","indexOf","POSITIVE_INFINITY","collectionChildren","groupBy","byKey","list","panelToNode","buildSettingsTreeBody","matchesWhen","listSections","sectionsById","listPanels","bySection","renderOrder","sectionPanels","WORKBENCH_SETTINGS_WIDGET_ID","WORKBENCH_SETTINGS_NAV_WIDGET_ID","WORKBENCH_SETTINGS_PANEL_WIDGET_ID","WIDGET_ID","openSettings","requested","requestedPanel","overlays","openOverlay","createWorkbenchSettingsModule","registerView","registerOverlay","config","size","scrollBehavior","contentHeight","contentMaxWidth","contentWidth","closeTriggerTop","closeOnInteractOutside","registerCommand","standardResourceIcons","refreshNavigation","refreshView","unsubscribeSettings","unsubscribeContext","resolvePanelCollapsible","getRegionCollapsible","PANEL_CONTENT_MIN_SIZE_PX","PANEL_MENU_RESIZE_HANDLE_SIZE_PX","PANEL_MENU_COLLAPSE_THRESHOLD_PX","shouldCollapseWorkbenchPanelMenus","panelWidth","canAttachWorkbenchPanelMenu","menuMinSizes","attachedMenuMinSizes","targetMenuMinSize","requiredWidth","reduce","total","PANEL_MENU_SIZE","defaultPx","minPx","maxPx","panelLabels","resolveRegionSize","regionSize","getWorkbenchPanelMenuLabel","useWorkbenchPanelMenu","responsiveCollapsed","panelStateKey","openByMenuId","panelMenuState","getRegionSize","setOpen","collapsed","onOpen","onCollapsedChange","WorkbenchPanelMenu","AttachedMenu","addPanelMenu","setRegionSize","WorkbenchPanelMenuLayout","useWorkbenchPanelWidth","withRight","setWidth","querySelector","measure","observer","ResizeObserver","observe","disconnect","WorkbenchPanelMenuOpener","canAttach","WorkbenchPanelMenuOpeners","closedMenus","view_0","candidate_0","useWorkbenchModeRegionSettings","useShallow","floatingPanelBottom","bottomOffset","launcherBottom","WorkbenchSidePanelTitle","WorkbenchSidePanelHeader","WorkbenchAttachedSidePanel","contentSlotRef","canFloat","showHeader","Minimize2","AttachedPanel","WorkbenchFloatingSidePanel","bubbleIcon","bottom","MessageCircle","BubbleButton","BubblePanel","terminalPlacementBindingId","workspacePathFromResource","workspacePath","withTerminalRequestDefaults","cwd","createControllerTerminalBridge","terminal","openSession","sessionId","bindingId","getBindingId","getResource","getTitle","write","resize","cols","kill","signal","onData","onExit","WorkbenchTerminalPanel","placementRef","bridge","getPersistenceScope","setSessionId","processTitle","sessionsById","updateShellPlacement","shellPlacements","updatePlacement","currentPlacement","isAvailable","test","WORKBENCH_TERMINAL_WIDGET_ID","WORKBENCH_TERMINAL_OPEN_COMMAND_ID","WORKBENCH_TERMINAL_PANEL_SIZE","terminalInstanceIds","listPanelInstances","watchClosedTerminalPlacements","changingScope","willChangeScope","onWillChangePersistenceScope","didChangeScope","onDidChangePersistenceScope","unsubscribeLayout","previousState","currentIds","previousIds","killBinding","terminalTitlePattern","nextTerminalIndexes","getInitialTerminalIndex","terminalPlacements","titleIndexes","exec","parseInt","getNextTerminalTitle","nextIndex","hasWorkspacePath","getTerminalResource","getActiveResource","primaryResource","openWorkbenchTerminal","reveal","workspace","padStart","globalThis","crypto","randomUUID","openPlacement","placementId","instanceKey","createWorkbenchTerminalModule","registerPlacement","kinds","cardinality","_args","useWorkbenchThemePreferences","contributed","themes","defaultThemePreferences","WorkbenchThemeProviderContext","createContext","WorkbenchThemeProvider","initialThemePreference","fileIconThemePreferences","useContext","ChakraProvider","psTheme","FileIconThemePreferenceProvider","defaultThemePreference","preferenceScope","ThemePreferenceProvider","WorkbenchThemeScope","stringValue","booleanValue","resolveOverlayConfig","overlayConfig","closeOnEscape","modal","trapFocus","motionPreset","contentMaxHeight","contentMinHeight","resolveOverlayDialogConfig","closeable","resolveOverlayDialogRenderState","exitingPlacement","WorkbenchOverlayFallback","WorkbenchOverlayLayer","overlayRegion","setExitingPlacement","dialogRootConfig","canCloseOverlay","closeLabel","handleOpenChange","handleExitComplete","handleInteractOutside","detail","originalEvent","WorkbenchBreadcrumbResourceActions","resolveActions","ResourceActionMenu","WorkbenchRegionControl","onToggle","WorkbenchNavigationControls","regionControls","history","pageLocations","historyStore","canGoBack","goBack","canGoForward","goForward","WorkbenchRegionControls","controls","WorkbenchNavChrome","hasNav","sidenavControls","trailingRegionControls","workbenchTopHeaderLeadingMenuPath","workbenchTopHeaderTrailingMenuPath","control_0","initialState","WorkbenchControlsView","defaultValues","onDidRefreshControlsRenderer","controlsRendererId","updateValue","apply","showFooter","controlValueSchema","values_0","controlId","prev","ControlsContent","installed","WeakSet","installWorkbenchControlsRenderer","setControlsRendererImplementation","getControlsRenderer","createElement","installWorkbenchDataTableRenderer","setDataTableRendererImplementation","getDataTableRenderer","loadWorkbenchFileRendererView","module","WorkbenchFileRendererView","lazy","installWorkbenchFileRenderer","setFileRendererImplementation","fileRendererId","getFileRenderer","Suspense","bindReactKanbanPresentation","createKanbanViewQuerySequencer","latestQueryId","isLatest","queryId","executeKanbanViewQuery","resolveProjectScope","storageScope","favoriteScope","resolveKanbanRendererStorageKey","kanbanRendererId","baseKey","projectScope","kanbanViewScrollContentProps","WorkbenchKanbanViewFrame","usesInternalScroll","noopSubscribe","isKanbanRowResource","useResolvedContributionAttributes","attributes","isAttributesSource","mergeKanbanViewRowActions","resourceActions","contributionActions","resourceActionKeys","resourceCommandIds","WorkbenchKanbanView","defaultActiveViewId","defaultFilters","defaultSettings","defaultViews","filters","activeViewId","useKanbanRendererStore","setRows","querySequencer","onDidRefreshKanbanRenderer","handleOpenRow","getRowContextMenuActions","viewMode","createRow","getBoardColumnConfig","hideToolbar","onAttributeChange","onColumnAction","onCreateRow","onReorder","KanbanRenderer","installWorkbenchKanbanRenderer","setKanbanRendererImplementation","getKanbanRenderer","isSidenavPlacement","viewContextId","installWorkbenchTreeRenderer","installation","setTreeRendererImplementation","useWorkbenchFileIconThemePreferences","fileIconThemes","useWorkbenchRegionContent","modePanel","getWorkbenchModePanelForRegion","isWorkbenchModePanelAvailable","panelAvailable","placeholders","locationScoped","WorkbenchHeaderBorder","getRegionHeaderBorderBottom","useSecondaryPanelView","hasContent","hasHeader","hasPanelHeader","useWorkbenchMainPanels","hasMainHeader","secondaryPanel","WorkbenchSecondaryPanel","hasSecondaryHeader","SECONDARY_PANEL_SIZE","SECONDARY_PANEL_CONTENT_MIN_SIZE_PX","mainHeaderTrailingMenuPath","headerTrailingMenuPath","persistedSize","MainHeaderBar","hasMainContentTabs","WorkbenchBody","modeSettings","persistedSecondarySize","secondaryPanelSize","mainRegion","mainPanelWithMenus","Grid","mainContent","WorkbenchSidenav","contextActions","ResourceContextMenu","WORKBENCH_STATUS_BAR_HEIGHT","WorkbenchStatusBarItems","statusBar","listVisibleItems","WorkbenchActivityBar","WorkbenchStatusBar","ATTACHED_PANEL_DEFAULT_SIZE_PX","ATTACHED_PANEL_MIN_SIZE_PX","WorkbenchSidePanelRegionPortal","hasSidePanel","mounted","sidePanelHost","createPortal","WorkbenchSidePanelRegionHeader","hasSideHeader","WorkbenchAttachedSidePanelLayout","attached","contentPanel","contentMinSizePx","onAttachedSlotChange","onCollapse","interactivePointerTargetSelector","hasClosest","shouldFocusWorkbenchKeyboardFrame","focusWorkbenchKeyboardFrame","WorkbenchKeyboardFrame","useLayoutEffect","WorkbenchSidePanelBoundary","showAttachedSidePanel","contentFrame","sideHeader","SIDENAV_DEFAULT_SIZE_PX","SIDENAV_MIN_SIZE_PX","CONTENT_MIN_SIZE_PX","resolveSidenavSize","createSidePanelHost","host","dataset","workbenchSidePanelHost","resolveActiveSidePanelSlot","floatingSlot","attachedSlot","useWorkbenchLayoutFlags","statusChrome","statusBarItems","hasNavWidgets","hasActivityBarWidgets","hasSidenavWidgets","hasSecondaryHeaderWidgets","hasSecondaryWidgets","hasSideHeaderWidgets","hasSideWidgets","hasStatusWidgets","createWorkbenchRegionControls","showSidenav","sidenavOpen","setPanelOpen","showSecondaryPanel","secondaryPanelOpen","sidePanelMode","WorkbenchContent","sidePanelBubbleIcon","onOpenSidePanel","titleBar","sidenavContextActions","setSidenavContextActions","attachedSidePanelSlot","setAttachedSidePanelSlot","floatingSidePanelSlot","setFloatingSidePanelSlot","sidePanelHostRef","paletteOpen","paletteInitialQuery","hasSecondaryPanelHeader","hasSidePanelHeader","floatingPanelsAllowed","sidenavCollapsible","persistedSidenavSize","sidenavSize","mountSidePanel","activeSidePanelSlot","parentNode","appendChild","removeChild","contentWithHeader","contentWithSidenav","Workbench","defaultTheme","Toaster","disposeWorkbenchModuleHostRegistrations","syncWorkbenchModuleHostRegistrations","modules","moduleIds","registerModule","WorkbenchModuleHost","registeredWorkbench"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAUA,MAAMA,KAAmBA,CAACC,MACxB,OAAOA,EAAKC,UAAUC,UAAUC,UAAW,WACtCH,EAAKC,SAASC,SAASC,SACxBC,QACAC,KAA0BC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC9B;AAAA,IAAAR,MAAAA;AAAAA,EAAAA,IAAiBM;AAAM,MAAAG;AAAA,EAAAF,SAAAP,KACRS,IAAAV,GAAiBC,CAAI,GAACO,OAAAP,GAAAO,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAArC,QAAAJ,IAAeM;AACf,MAAIT,EAAIU,cAAe,oBAAoBV,EAAIC,UAAeU,SAAK,WAAS;AAAA,QAAAC;AAAA,WAAAL,SAAAJ,KACnES,IAAA,gBAAAC,EAACC,IAAA,EAAyBX,QAAAA,GAAgB,SAAA,QAAM,GAAGI,OAAAJ,GAAAI,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAAnDK;AAAAA,EAAmD;AAE5D,MAAI,CAACZ,EAAIe;AAAK,WAAS;AAAK,MAAAH;AAAA,SAAAL,EAAA,CAAA,MAAAP,EAAAe,QAE1BH,sBAACI,IAAA,EAAQ,IAAA,QAAmB,eAAA,QAAa,OAAA,YAAmB,SAAA,eAA0B,YAAA,GACpF,4BAACC,GAAA,EAAoB,MAAAjB,EAAIe,MAAa,MAAA,IAAE,EAAA,CAC1C,GAAOR,EAAA,CAAA,IAAAP,EAAAe,MAAAR,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAFPK;AAEO,GAGLM,KAA2BZ,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC/B;AAAA,IAAAR,MAAAA;AAAAA,EAAAA,IAAiBM,GACjBa,IAAcnB,EAAImB;AAAoB,MAAAV;AAAA,EAAAF,SAAAP,KAGlCS,sBAACJ,MAA8BL,MAAAA,EAAAA,CAAI,GAAIO,OAAAP,GAAAO,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,EAAAL,SAAAY,KACvCP,IAAA,gBAAAC,EAACG,IAAA,EAAQ,IAAA,QAAY,MAAA,KAAS,MAAA,SAAQ,UAAA,IACnCG,UAAAA,EAAAA,CACH,GAAOZ,OAAAY,GAAAZ,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AAAA,SAAAb,EAAA,CAAA,MAAAE,KAAAF,SAAAK,KAJTQ,sBAACC,IAAA,EAAU,IAAA,QAAW,KAAA,OAAW,MAAA,KAC/BZ,UAAAA;AAAAA,IAAAA;AAAAA,IACAG;AAAAA,EAAAA,GAGF,GAASL,OAAAE,GAAAF,OAAAK,GAAAL,OAAAa,KAAAA,IAAAb,EAAA,CAAA,GALTa;AAKS,GAGAE,KAAgCA,CAACC,OAC3CA,KAAS,CAAA,GAAIC,IAAKxB,CAAAA,OAAU;AAAA,EAC3BmB,OAAO,gBAAAN,EAACK,IAAA,EAAyB,MAAAlB,EAAA,CAAW;AAAA,EAC5CyB,KAAKzB,EAAKyB;AAAAA,EACVC,SAAS1B,EAAK0B;AAChB,EAAE,GACSC,KAA0BrB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GACrC;AAAA,IAAAoB,WAAAA;AAAAA,EAAAA,IAAsBtB,GACtBiB,IAAcM,EAAkBD,EAASE,YAAYC,OAAQC,EAA4B,KAA3E,CAAA;AACd,MAAIT,EAAKU,WAAY;AAAC,WAAS;AAAK,MAAAxB;AAAA,EAAAF,SAAAgB,KAEfd,IAAAa,GAA8BC,CAAK,GAAChB,OAAAgB,GAAAhB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,SAAAL,SAAAE,KAAvDG,IAAA,gBAAAC,EAACqB,IAAA,EAAkB,OAAAzB,GAAgD,WAAA,KAAiB,cAAA,MAAa,SAAA,QAAS,GAAA,OAAA,CAAM,GAAGF,OAAAE,GAAAF,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAAnHK;AAAmH;AALhF,SAAAoB,GAAAG,GAAA;AAAA,SAEmCA,EAAKZ;AAAM;AC1C9E,MAAMa,KAAgCA,CAACR,MAAiE;AAC7G;AAEAC,SAAAA,EAAkBD,EAAUS,OAAON,OAAQI,CAAAA,MAAUA,CAAK,GAC1DN,EAAkBD,EAAUU,MAAMP,OAAQI,CAAAA,MAAUA,EAAMI,YAAY,GACtEV,EAAkBD,EAAUY,SAAST,OAAQI,CAAAA,MAAUA,CAAK,GAC5DN,EAAkBD,EAAUa,QAAQV,OAAQI,CAAAA,MAAUA,CAAK,GAEpD;AAAA,IACLO,MAAMd,EAAUe,YAAYC,UAAU,MAAM;AAAA,IAC5CC,WAAWjB,EAAUe,YAAYC,UAAU,WAAW;AAAA,IACtDE,MAAMlB,EAAUe,YAAYC,UAAU,MAAM;AAAA,EAAA;AAEhD,GChBMG,KAAoB;AAAA,EACxBC,SAAS;AAAA,EACTN,MAAM;AAAA,EACNO,OAAO;AACT,GAEMC,KAAcA,CAACC,GAAeC,MAClC,8BAA8BD,EAAME,WAAW,KAAK,GAAG,CAAC,KAAKD,CAAQ,KAE1DE,IAAuB;AAAA,EAClCN,SAASE,GAAY,sBAAsBH,GAAkBC,OAAO;AAAA,EACpEN,MAAMQ,GAAY,qBAAqBH,GAAkBL,IAAI;AAAA,EAC7DO,OAAOC,GAAY,oBAAoBH,GAAkBE,KAAK;AAAA,EAC9DM,QAAQL,GAAY,2BAA2BA,GAAY,oBAAoBH,GAAkBE,KAAK,CAAC;AACzG,GAEMO,KAA6B;AAAA,EACjCC,KAAKH,EAAqBZ;AAAAA,EAC1BgB,UAAUJ,EAAqBZ;AAAAA,EAC/BM,SAASM,EAAqBN;AAAAA,EAC9B,eAAeM,EAAqBZ;AAAAA,EACpC,kBAAkBY,EAAqBL;AAAAA,EACvCP,MAAMY,EAAqBZ;AAAAA,EAC3B,mBAAmBY,EAAqBL;AAAAA,EACxC,oBAAoBK,EAAqBL;AAAAA,EACzC,uBAAuBK,EAAqBL;AAAAA,EAC5CJ,WAAWS,EAAqBL;AAAAA,EAChC,wBAAwBK,EAAqBL;AAAAA,EAC7C9C,QAAQmD,EAAqBZ;AAAAA,EAC7BiB,SAASL,EAAqBC;AAAAA,EAC9B,eAAeD,EAAqBC;AAAAA,EACpC,kBAAkBD,EAAqBC;AAAAA,EACvCT,MAAMQ,EAAqBC;AAAAA,EAC3B,mBAAmBD,EAAqBC;AAC1C;AAEoCL,GAAY,eAAe,+CAA+C;AAEvG,MAAMU,KAAoCN,EAAqBC,QAEzDM,KAA+BA,CAACC,MAA4BN,GAA2BM,CAAM,GC9BpGC,KAAWA,CAACC,MAAkB;AAClC,QAAMC,IAASD,EACZE,QAAQ,sBAAsB,OAAO,EACrCA,QAAQ,UAAU,GAAG,EACrBC,KAAAA;AACH,SAAOF,EAAOG,OAAO,CAAC,EAAEC,gBAAgBJ,EAAOK,MAAM,CAAC;AACxD,GACMC,KAAWA,CAACP,MAChB,OAAOA,KAAU,YAAYA,MAAU,QAAQ,CAACQ,MAAMC,QAAQT,CAAK,GACxDU,KAAoBA,CAACV,MAC5B,CAACO,GAASP,CAAK,KAAK,CAACO,GAASP,EAAMW,IAAI,IAAU,KAC/C,OAAOX,EAAMY,MAAO,YAAY,OAAOZ,EAAMW,KAAKE,QAAS,YAAY,OAAOb,EAAM7D,UAAW,UAE3F2E,KAA2BA,CAACd,MACvCO,GAASP,CAAK,KACdQ,MAAMC,QAAQT,EAAMe,IAAI,KACxBf,EAAMe,KAAKC,MAAOC,CAAAA,MAAQ,OAAOA,KAAQ,QAAQ,KACjDT,MAAMC,QAAQT,EAAMkB,OAAO,KAC3BlB,EAAMkB,QAAQF,MAAMN,EAAiB,GAC1BS,KAA+BA,CAACC,IAAyC,QAAgC;AAAA,EACpHL,MAAM,CAAC,GAAIK,EAAML,QAAQ,CAAA,CAAG;AAAA,EAC5BG,SAAS,CAAC,GAAIE,EAAMF,WAAW,CAAA,CAAG;AACpC,IACMG,KAAyBA,CAACC,GAAcC,MAAkC;AAC9E,QAAMvB,IAAQc,GAAyBQ,CAAG,IACtCH,GAA6BG,CAAG,IAChCH,GAA6B;AAAA,IAC3BJ,MAAMP,MAAMC,QAAQa,CAAG,IAAIA,EAAIE,OAAO,CAACxF,MAAyB,OAAOA,KAAS,QAAQ,IAAI,CAAA;AAAA,IAC5FkF,SAASV,MAAMC,QAAQa,CAAG,IAAIA,EAAIE,OAAOd,EAAiB,IAAI,CAAA;AAAA,EAAA,CAC/D;AACL,SAAIa,MAAa,KAAcvB,IAC3BA,EAAMkB,QAAQ,CAAC,IAAUC,GAA6B;AAAA,IAAED,SAAS,CAAClB,EAAMkB,QAAQ,CAAC,CAAC;AAAA,EAAA,CAAG,IAClFC,GAA6B;AAAA,IAAEJ,MAAMf,EAAMe,KAAKT,MAAM,GAAG,CAAC;AAAA,EAAA,CAAG;AACtE,GACMmB,KAAyBA,CAACzB,MACHA,KAAU,OAAa,KAC9C,OAAOA,KAAU,WAAiBA,IAClC,OAAOA,KAAU,YAAY,OAAOA,KAAU,YAAkB0B,OAAO1B,CAAK,IACzE2B,KAAKC,UAAU5B,CAAK,GAEvB6B,KAAqBA,CAAC7B,MAC1BA,EACGE,QAAQ,+BAA+B,CAAC4B,GAAQC,MAAiBA,EAAK1B,YAAAA,CAAa,EACnFH,QAAQ,UAAW6B,CAAAA,MAASA,EAAKC,aAAa,GAC7CC,KAAiBA,CAAC/F,GAA+CgG,MAAgB;AACrF,QAAMlC,IAAQ9D,IAAWgG,CAAG;AAC5B,MAAI,OAAOlC,KAAU,SAAU,QAAOA;AACtC,MAAI,OAAOA,KAAU,SAAU,QAAO0B,OAAO1B,CAAK;AAEpD,GACMmC,KAAuBA,CAACC,GAA0B3D,MAA0D;AAChH,QAAMxC,IAAWwC,GAASxC;AAC1B,MAAI,CAACA,EAAU;AACf,QAAMoG,IAAgBJ,GAAehG,EAASC,UAAUkG,EAAMF,GAAG;AACjE,MAAIG,MAAkBjG,OAAW,QAAOiG;AACxC,MAAID,EAAMF,QAAQ,GAAGL,GAAmB5F,EAASU,IAAI,CAAC,KAAM,QAAOV,EAAS2E,MAAM0B,GAAYrG,CAAQ;AACtG,MAAImG,EAAMzF,SAAS,eAAe,CAACyF,EAAMG,gBAAgBH,EAAMG,iBAAiBtG,EAASU;AACvF,WAAO;AAAA,MACLA,MAAMV,EAASU;AAAAA,MACfiE,IAAI3E,EAAS2E,MAAM0B,GAAYrG,CAAQ;AAAA,MACvC,GAAIA,EAASuG,QAAQ;AAAA,QAAEA,OAAOvG,EAASuG;AAAAA,MAAAA,IAAU,CAAA;AAAA,MACjD,GAAIvG,EAASC,WAAW;AAAA,QAAEA,UAAUD,EAASC;AAAAA,MAAAA,IAAa,CAAA;AAAA,IAAC;AAIjE,GACMuG,KAAgBA,CAACC,MAA+C;AACpE,MAAI,CAACA,EAAS,QAAOA;AACrB,QAAMC,wBAAWC,IAAAA;AACjB,SAAOF,EAAQlB,OAAQqB,CAAAA,MACjBF,EAAKG,IAAID,EAAO7C,KAAK,IAAU,MACnC2C,EAAKI,IAAIF,EAAO7C,KAAK,GACd,GACR;AACH,GACagD,KAAuBA,CAACC,MACnCC,GAAwBD,CAAM,EAAEhF,SAAS,GAC9BiF,KAA0BA,CAACD,MACtCE,OAAOC,QAAQH,KAAU,CAAA,CAAE,EAAEI,QAAQ,CAAC,CAACnB,GAAKoB,CAAK,MAC/CA,EAAMC,iBAAiB,aACnB,CAAA,IACA,CACE;AAAA,EACE,GAAGD;AAAAA,EACHZ,SAASD,GAAca,EAAMZ,OAAO;AAAA,EACpCR,KAAAA;AAAAA,EACAM,OAAOc,EAAMd,SAASzC,GAASmC,CAAG;AACpC,CAAC,CAET,GACWsB,KAAiCA,CAC5CP,GACAQ,GACAhF,MACsC;AACtC,QAAMiF,IAAOnD,GAASkD,CAAQ,IAAIA,IAAW,CAAA,GACvCE,IAA4C,CAAA;AAClD,aAAWvB,KAASc,GAAwBD,CAAM,GAAG;AACnD,UAAM3B,IAAM6B,OAAOS,OAAOF,GAAMtB,EAAMF,GAAG,IACrCwB,EAAKtB,EAAMF,GAAG,IACbC,GAAqBC,GAAO3D,CAAO,KAAK2D,EAAMyB;AACnD,QAAIzB,EAAMzF,SAAS,WAAW;AAC5BgH,MAAAA,EAAOvB,EAAMF,GAAG,IAAIZ,MAAQlF,SAAYA,SAAYkF,MAAQ,MAAQA,MAAQ;AAC5E;AAAA,IACF;AACA,QAAIc,EAAMzF,SAAS,SAAS;AAC1BgH,MAAAA,EAAOvB,EAAMF,GAAG,IAAIb,GAAuBC,GAAKc,EAAMb,QAAQ;AAC9D;AAAA,IACF;AACA,QAAIa,EAAMzF,SAAS,gBAAgB;AACjCgH,MAAAA,EAAOvB,EAAMF,GAAG,IAAI1B,MAAMC,QAAQa,CAAG,IAAIA,EAAI9D,IAAIkE,MAAM,IAAI,CAAA;AAC3D;AAAA,IACF;AACAiC,IAAAA,EAAOvB,EAAMF,GAAG,IAAIT,GAAuBH,CAAG;AAAA,EAChD;AACA,SAAOqC;AACT,GACMG,KAAeA,CAAC9D,MAChBc,GAAyBd,CAAK,IAAUA,EAAMe,KAAK9C,WAAW,KAAK+B,EAAMkB,QAAQjD,WAAW,IACzF+B,MAAU5D,UAAa4D,MAAU,MAAOQ,MAAMC,QAAQT,CAAK,KAAKA,EAAM/B,WAAW,GAEpF8F,KAAiBA,CAAC3B,GAA0BpC,MAA6B;AAC7E,MAAI,OAAOA,KAAU,SAAU,QAAOA;AACtC,MAAI;AACF,WAAO2B,KAAKqC,MAAMhE,CAAK;AAAA,EACzB,QAAQ;AACN,UAAM,IAAIiE,MAAM,oBAAoB7B,EAAMI,KAAK,EAAE;AAAA,EACnD;AACF,GACM0B,KAAiBA,CAAC9B,GAA0BpC,MAA6B;AAC7E,MAAIoC,EAAMzF,SAAS,UAAU;AAC3B,UAAMwH,IAAcC,OAAOpE,CAAK;AAChC,QAAI,CAACoE,OAAOC,SAASF,CAAW,EAAG,OAAM,IAAIF,MAAM,sBAAsB7B,EAAMI,KAAK,EAAE;AACtF,WAAO2B;AAAAA,EACT;AACA,SAAI/B,EAAMzF,SAAS,YAAkBqD,MAAU,MAAQA,MAAU,SAC7DoC,EAAMzF,SAAS,UAAgBmE,GAAyBd,CAAK,IAAIA,IAAQmB,GAAAA,IACzEiB,EAAMzF,SAAS,UAAUyF,EAAMzF,SAAS,cAAcyF,EAAMzF,SAAS,UAAUyF,EAAMzF,SAAS,YACzFoH,GAAe3B,GAAOpC,CAAK,IAEhCoC,EAAMzF,SAAS,iBAAuB6D,MAAMC,QAAQT,CAAK,IAAIA,IAAQ0B,OAAO1B,CAAK,EAAEsE,MAAM,GAAG,EAAE9C,OAAO+C,OAAO,IACzG7C,OAAO1B,KAAS,EAAE;AAC3B,GACawE,KAA8BA,CACzCvB,GACAU,MACG;AACH,QAAMc,IAAsC,CAAA;AAC5C,aAAWrC,KAASc,GAAwBD,CAAM,GAAG;AACnD,UAAMjD,IAAQ2D,EAAOvB,EAAMF,GAAG;AAC9B,QAAI4B,GAAa9D,CAAK,GAAG;AACvB,UAAIoC,EAAMsC,SAAU,OAAM,IAAIT,MAAM,+BAA+B7B,EAAMI,KAAK,EAAE;AAChF;AAAA,IACF;AACAiC,IAAAA,EAAWrC,EAAMF,GAAG,IAAIgC,GAAe9B,GAAOpC,CAAK;AAAA,EACrD;AACA,SAAOyE;AACT,GACaE,KAAwBA,CAAClB,GAAmBR,OAAqC;AAAA,EAC5F,GAAI1C,GAASkD,CAAQ,IAAIA,IAAW,CAAA;AAAA,EACpC,GAAGR;AACL,ICxKa2B,KAAiB,UACjBC,KAAkB,WAClBC,KAAgB,SAEhBC,KAAuC,CAAC;AAAA,EAAEnE,IAAIgE;AAAe,GAAG;AAAA,EAAEhE,IAAIiE;AAAAA,EAAiBG,aAAa;AAAI,CAAC,GAEzGC,KAAqBA,CAACC,MAAsCA,MAASJ,IAErEK,KAAsBF,IAEtBG,KAAqBA,CAACF,MAAsC;AACvE,MAAID,GAAmBC,CAAI,EAAG,QAAOJ;AAEvC,GAEaO,KAAsBA,CAACH,MAAsC;AACxE,MAAIC,CAAAA,GAAoBD,CAAI;AAE5B,WAAOH;AACT,GAEaO,KAA+BA,CAAClE,MAIvC6D,GAAmB7D,EAAM8D,IAAI,IAAU9D,EAAMmE,0BAE1C,GAGIC,KAAsBA,CAACpE,MAC9B6D,GAAmB7D,EAAM8D,IAAI,sBAAWjI,GAAA,EAAc,MAAK,WAAU,MAAM,GAAA,CAAG,IAC9EmE,EAAMqE,SAASZ,uBAAyBa,IAAA,EAAS,MAAM,IAAI,eAAY,OAAA,CAAM,IAE1E,gBAAA7I,EAAC8I,IAAA,EAAO,MAAM,IAAI,eAAY,QAAM,GAGhCC,KAAwBA,CAACxE,MAChC6D,GAAmB7D,EAAM8D,IAAI,IAAU,kBACvC9D,EAAMqE,SAASZ,KAAwB,gBAEpC,oBCvCHgB,KAAuB,IACvBC,KAA6B,KAYtBC,KAA4C3E,CAAAA,MAAA;AAAA,QAAA7E,IAAAC,EAAA,EAAA,GACvD;AAAA,IAAAoB,WAAAA;AAAAA,IAAAoI,OAAAA;AAAAA,IAAAC,MAAAA;AAAAA,IAAAC,SAAAA;AAAAA,EAAAA,IAA4C9E,GAC5C+E,IAAqBtI,EAAkBD,EAASwI,wBAAwBrI,OAAQC,EAA6B;AAAE,MAAAvB;AAAA,EAAAF,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACxD7J,IAAA,CAAA,GAAEF,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAzD,QAAA,CAAA6G,GAAAmD,CAAA,IAA8BC,EAAyB/J,CAAE;AAAE,MAAAG;AAAA,EAAAL,EAAA,CAAA,MAAA2J,KAAA3J,SAAA0J,KAAA1J,EAAA,CAAA,MAAAyJ,KAAAzJ,EAAA,CAAA,MAAAqB,EAAAwI,2BAEjDxJ,IAAAA,MAAA;AACR,QAAI,CAACqJ,GAAI;AACPM,MAAAA,EAAW,CAAA,CAAE;AAAC;AAAA,IAAA;AAMhB,QAAAE,IAAgB;AAChB,UAAAC,IAAeC,WAAW,MAAA;AACnB/I,MAAAA,EAASwI,wBAAwBQ,eAAgB;AAAA,QAAAZ,OAAAA;AAAAA,QAAAa,OAAgBhB;AAAAA,MAAAA,CAAsB,EAACiB,KAAMC,CAAAA,MAAA;AACjG,QAAIN,KACJF,EACEQ,EAAM1D,QAAS2D,CAAAA,MACbA,EAAKC,QAAQzJ,IAAK0J,CAAAA,OAAa;AAAA,UAAAtG,IACzB,sCAAsCsG,EAAMtG,EAAG;AAAA,UAAE6E,MAC/Cb;AAAAA,UAAcpC,OACb0E,EAAM1E;AAAAA,UAAM2E,YACP,GAAGnB,CAAK,IAAIkB,EAAM1E,KAAM,KAAK0E,EAAME,YAAN,CAAA,GAAqBC,KAAO,GAAG,CAAC,GAAElH,KAAAA;AAAAA,UAAOmH,aACrEJ,EAAMI;AAAAA,UAAYN,OACxBE,EAAMF,SAAUA,EAAK7J;AAAAA,UAAMJ,MAC5BmK,EAAMnK,OAAQ,gBAAAF,EAACI,KAAoB,MAAAiK,EAAMnK,MAAK,IAA9CX;AAAAA,UAA8DmL,YACxDA,MAAA;AACVrB,YAAAA,EAAAA,GACKsB,QAAOC,QAASP,EAAMQ,SAAAA,CAAW,EAACC,MAAOC,EAAe;AAAA,UAAC;AAAA,QAAA,EAEhE,CACJ,CACF;AAAA,MAAC,CACF;AAAA,IAAC,GACD9B,EAA0B;AAAE,WAExB,MAAA;AACLW,MAAAA,IAAYA,IACZoB,aAAanB,CAAM;AAAA,IAAC;AAAA,EACrB,GACFnK,OAAA2J,GAAA3J,OAAA0J,GAAA1J,OAAAyJ,GAAAzJ,EAAA,CAAA,IAAAqB,EAAAwI,yBAAA7J,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AAAA,SAAAb,EAAA,CAAA,MAAA2J,KAAA3J,EAAA,CAAA,MAAA0J,KAAA1J,EAAA,CAAA,MAAAyJ,KAAAzJ,EAAA,CAAA,MAAA4J,KAAA5J,UAAAqB,KAAER,IAAA,CAACQ,GAAWoI,GAAOC,GAAME,GAAcD,CAAO,GAAC3J,OAAA2J,GAAA3J,OAAA0J,GAAA1J,OAAAyJ,GAAAzJ,OAAA4J,GAAA5J,QAAAqB,GAAArB,QAAAa,KAAAA,IAAAb,EAAA,EAAA,GApClDuL,GAAUlL,GAoCPQ,CAA+C,GAE3CgG;AAAO;AA3CyC,SAAApF,GAAAG,GAAA;AAAA,SAEoCA,EAAKgI;AAAa;AAFtD,SAAAyB,KAAA;AAAA;ACXzD,MAAMG,KAASA,CAAC/H,MAA8B,OAAOA,KAAU,WAAWA,IAAQ,IAE5EgI,KAASA,CAAChI,MAA8BQ,MAAMC,QAAQT,CAAK,IAAIA,IAAQ,CAAA,GAGhEiI,KAAmBA,CAAC7F,MAA6B,GAAGA,EAAMI,KAAK,GAAGJ,EAAMsC,WAAW,OAAO,EAAE,IAEnGwD,KAAsBA,CAAC9F,OAC1BA,EAAMM,WAAW,IAAIlF,IAAKqF,CAAAA,OAAY;AAAA,EAAEjC,IAAIiC,EAAO7C;AAAAA,EAAOa,MAAMgC,EAAOL;AAAAA,EAAOzF,MAAM8F,EAAO9F;AAAK,EAAE,GAK/FoL,yBAAuBvF,IAAI,CAAC,QAAQ,YAAY,QAAQ,SAAS,CAAC,GAO3DwF,KAAoBA,CAAChG,GAA0BpC,MAAoC;AAC9F,QAAM0D,IAAO;AAAA,IAAE9C,IAAIwB,EAAMF;AAAAA,IAAKrB,MAAMoH,GAAiB7F,CAAK;AAAA,IAAGkF,aAAalF,EAAMkF;AAAAA,EAAAA;AAEhF,SAAIlF,EAAMzF,SAAS,YAAkB;AAAA,IAAE,GAAG+G;AAAAA,IAAM/G,MAAM;AAAA,IAAWkH,cAAc7D,MAAU;AAAA,EAAA,IAErFoC,EAAMzF,SAAS,WAAiB;AAAA,IAAE,GAAG+G;AAAAA,IAAM/G,MAAM;AAAA,IAAUkH,cAAcO,OAAO2D,GAAO/H,CAAK,CAAC;AAAA,EAAA,IAE7FoC,EAAMzF,SAAS,aAAmB;AAAA,IAAE,GAAG+G;AAAAA,IAAM/G,MAAM;AAAA,IAAYkH,cAAckE,GAAO/H,CAAK;AAAA,EAAA,IAEzFoC,EAAMzF,SAAS,UACV;AAAA,IACL,GAAG+G;AAAAA,IACH/G,MAAM;AAAA,IACNkH,cAAc/C,GAAyBd,CAAK,IAAIA,EAAMkB,UAAU,CAAA;AAAA,IAChEmH,QAAQjG,EAAMiG;AAAAA,IACd9G,UAAUa,EAAMb;AAAAA,EAAAA,IAIhBa,EAAMzF,SAAS,iBACV;AAAA,IACL,GAAG+G;AAAAA,IACH/G,MAAM;AAAA,IACNkH,cAAcmE,GAAOhI,CAAK;AAAA,IAC1B0C,SAASwF,GAAoB9F,CAAK;AAAA,IAClCkG,aAAa;AAAA,IACbC,aAAa,UAAUnG,EAAMI,MAAMR,aAAa;AAAA,IAChDwG,aAAapG,EAAMM,SAASzE,UAAU,KAAK;AAAA,EAAA,KAI1CmE,EAAMzF,SAAS,YAAYyF,EAAMzF,SAAS,eAAeyF,EAAMM,SAASzE,SACpE;AAAA,IACL,GAAGyF;AAAAA,IACH/G,MAAM;AAAA,IACNkH,cAAckE,GAAO/H,CAAK;AAAA,IAC1B0C,SAASwF,GAAoB9F,CAAK;AAAA,IAClCmG,aAAa,UAAUnG,EAAMI,MAAMR,aAAa;AAAA,IAChDwG,YAAYpG,EAAMM,QAAQzE,SAAS;AAAA,IACnCwK,WAAW,CAACrG,EAAMsC;AAAAA,EAAAA,IAIlBtC,EAAMzF,SAAS,cAAcwL,GAAiBrF,IAAIV,EAAMzF,IAAI,IACvD;AAAA,IAAE,GAAG+G;AAAAA,IAAM/G,MAAM;AAAA,IAAQkH,cAAckE,GAAO/H,CAAK;AAAA,IAAG0I,YAAY;AAAA,EAAA,IAGpE;AAAA,IAAE,GAAGhF;AAAAA,IAAM/G,MAAM;AAAA,IAAQkH,cAAckE,GAAO/H,CAAK;AAAA,IAAG0I,YAAY;AAAA,EAAA;AAC3E,GAGaC,KAAwBA,CAAC3I,GAAmBoC,MACnD,OAAOpC,KAAU,YAAkBA,IACnCoC,GAAOzF,SAAS,UACXwE,GAA6B;AAAA,EAAED,SAASV,MAAMC,QAAQT,CAAK,IAAIA,EAAMwB,OAAOd,EAAiB,IAAI,CAAA;AAAA,CAAI,IAE1GF,MAAMC,QAAQT,CAAK,IAAUA,EAAMxC,IAAIkE,MAAM,IAC1CA,OAAO1B,KAAS,EAAE,GCnEd4I,KAAoBtM,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC/B;AAAA,IAAA4F,OAAAA;AAAAA,IAAApC,OAAAA;AAAAA,IAAA6I,UAAAA;AAAAA,IAAAC,UAAAA;AAAAA,EAAAA,IAA6CxM;AAAM,MAAAG;AAAA,EAAAF,EAAA,CAAA,MAAA6F,KAAA7F,SAAAuM,KAAAvM,EAAA,CAAA,MAAAyD,KAEpCvD,IAAAsM,CAAAA,MAAA;AACb,UAAAC,IAAkBL,GAAsBI,GAAM3G,CAAK;AACnD,QAAIA,EAAKzF,SAAU,WAAf,CAA2BmE,GAAyBd,CAAK,KAAzD,CAA+Dc,GAAyBkI,CAAS,GAAC;AACpGF,MAAAA,EAASE,CAAS;AAAC;AAAA,IAAA;AAIrB,UAAAjI,IAAaqB,EAAKb,aAAc,MAASyH,EAAS9H,QAAQjD,SAAU,IAAvD,CAAA,IAAgE+B,EAAKe;AAClF+H,IAAAA,EAAS;AAAA,MAAA,GAAKE;AAAAA,MAASjI,MAAAA;AAAAA,IAAAA,CAAQ;AAAA,EAAC,GACjCxE,OAAA6F,GAAA7F,OAAAuM,GAAAvM,OAAAyD,GAAAzD,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AATD,QAAA0M,IAAexM;AASb,MAAAG;AAAA,EAAAL,EAAA,CAAA,MAAA6F,KAAA7F,SAAAyD,KAISpD,IAAAwL,GAAkBhG,GAAOpC,CAAK,GAACzD,OAAA6F,GAAA7F,OAAAyD,GAAAzD,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AAAA,EAAAb,SAAA0M,KAE5B7L,IAAAA,CAAA8L,GAAAC,MAAeF,EAAOF,CAAI,GAACxM,OAAA0M,GAAA1M,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAA6M;AAAA,SAAA7M,EAAA,CAAA,MAAAsM,KAAAtM,UAAAK,KAAAL,EAAA,EAAA,MAAAa,KAHvCgM,sBAACC,IAAA,EACQ,OAAAzM,GACGiM,UAAAA,GACA,UAAAzL,GAA2B,GACrCb,OAAAsM,GAAAtM,QAAAK,GAAAL,QAAAa,GAAAb,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA,GAJF6M;AAIE,GCOAE,KAAWA,CAAClH,GAA0BpC,MACtCoC,EAAMzF,SAAS,YAAkBqD,MAAU5D,SAC3C0E,GAAyBd,CAAK,IAAUA,EAAMe,KAAK9C,SAAS+B,EAAMkB,QAAQjD,SAAS,KACnFuC,MAAMC,QAAQT,CAAK,KAChB,OAAOA,KAAU,aAAYA,EAAM/B,SAAS,GAGxCsL,KAAsBA,CAACjN,MAAoC;AACtE,QAAM;AAAA,IAAEkN,SAAAA;AAAAA,IAASC,kBAAAA;AAAAA,IAAkBC,aAAAA;AAAAA,IAAaxD,SAAAA;AAAAA,IAASyD,OAAAA;AAAAA,EAAAA,IAAUrN,GAC7D,CAACqH,GAAQiG,CAAS,IAAIpD,EAA4C,CAAA,CAAE,GACpE,CAACqD,GAAOC,CAAQ,IAAItD,EAAAA,GACpB,CAACuD,GAAYC,CAAa,IAAIxD,EAAS,EAAK,GAC5CpD,IAAUF,GAAwBsG,GAASS,OAAOC,QAAQjH,MAAM;AAEtE6E,EAAAA,GAAU,MAAM;AACd8B,IAAAA,EAAUpG,GAA+BgG,GAASS,OAAOC,QAAQjH,QAAQuG,GAASW,MAAMX,GAAS/K,OAAO,CAAC,GACzGqL,EAAS1N,MAAS,GAClB4N,EAAc,EAAK;AAAA,EACrB,GAAG,CAACR,CAAO,CAAC;AAEZ,QAAMY,IAAQA,MAAM;AAClB,IAAIL,KACJ7D,EAAAA;AAAAA,EACF,GAEMmE,IAAWA,CAACnI,GAAalC,MAA6B;AAC1D4J,IAAAA,EAAWU,CAAAA,OAAa;AAAA,MAAE,GAAGA;AAAAA,MAAS,CAACpI,CAAG,GAAGlC;AAAAA,IAAAA,EAAQ;AAAA,EACvD,GAEMuK,IAAM,YAAY;AACtB,QAAI,GAACf,KAAWO,IAChBC;AAAAA,MAAAA,EAAc,EAAI,GAClBF,EAAS1N,MAAS;AAClB,UAAI;AACF,cAAM6G,IAASuB,GAA4BgF,EAAQS,OAAOC,QAAQjH,QAAQU,CAAM,GAC1EwG,IAAOxF,GAAsB6E,EAAQW,MAAMlH,CAAM,GACjDuH,IAAed,IACjB,MAAMA,EAAY;AAAA,UAChBe,WAAWjB,EAAQS,OAAOC,QAAQtJ;AAAAA,UAClCuJ,MAAAA;AAAAA,UACA1L,SAAS+K,EAAQ/K;AAAAA,UACjBiM,cAAeC,CAAAA,MACbf,EAAUpG,GAA+BgG,EAAQS,OAAOC,QAAQjH,QAAQ0H,GAAUnB,EAAQ/K,OAAO,CAAC;AAAA,QAAA,CACrG,IACD0L;AACJ,cAAMR,EAAM;AAAA,UACVc,WAAWjB,EAAQS,OAAOC,QAAQtJ;AAAAA,UAClCuJ,MAAMK;AAAAA,UACN/L,SAAS+K,EAAQ/K;AAAAA,UACjB+D,OAAOgH,EAAQhH;AAAAA,QAAAA,CAChB,GACD0D,EAAAA;AAAAA,MACF,SAAS0E,GAAQ;AACfd,QAAAA,EAASc,aAAkB3G,QAAQ2G,EAAOC,UAAU,iBAAiB;AAAA,MACvE,UAAA;AACEb,QAAAA,EAAc,EAAK;AAAA,MACrB;AAAA;AAAA,EACF,GAEMc,IAAU1H,EAAQpC,MAAOoB,CAAAA,MAAU,CAACA,EAAMsC,YAAY4E,GAASlH,GAAOuB,EAAOvB,EAAMF,GAAG,CAAC,CAAC;AAE9F,2BACG6I,GAAO,MAAP,EACC,MAAMvB,MAAY,MAClB,MAAK,MACL,gBAAe,UACf,cAAewB,CAAAA,MAAY,CAACA,EAAQ/E,QAAQmE,KAE5C,UAAA;AAAA,IAAA,gBAAAvN,EAACkO,GAAO,UAAP,EAAe;AAAA,IAChB,gBAAAlO,EAACkO,GAAO,YAAP,EACC,UAAA,gBAAAE,EAACF,GAAO,SAAP,EACC,SAAQ,QACR,eAAc,UACd,MAAK,qBACL,kBAAmBG,CAAAA,MAAUC,GAA2BD,GAAO;AAAM,MAAKX,EAAAA;AAAAA,OAAOO,KAAW,CAACf,CAAU,GAEvG,UAAA;AAAA,MAAA,gBAAAkB,EAACF,GAAO,QAAP,EACC,UAAA;AAAA,QAAA,gBAAAE,EAACG,IAAA,EAAM,KAAI,OAAM,MAAK,KACpB,UAAA;AAAA,UAAA,gBAAAvO,EAACG,IAAA,EAAK,WAAU,sBAAsBwM,UAAAA,GAAShH,SAAS,eAAc;AAAA,UACrEgH,GAASS,OAAOC,QAAQ5C,cACvB,gBAAAzK,EAACG,MAAK,WAAU,wBAAuB,OAAM,YAAW,UAAQ,IAC7DwM,UAAAA,EAAQS,OAAOC,QAAQ5C,aAC1B,IACE;AAAA,QAAA,GACN;AAAA,QACA,gBAAAzK,EAACkO,GAAO,cAAP,EAAoB,SAAO,IAC1B,UAAA,gBAAAlO,EAACwO,IAAA,EAAY,MAAK,MAAK,UAAUtB,EAAAA,CAAW,EAAA,CAC9C;AAAA,MAAA,GACF;AAAA,MACA,gBAAAlN,EAACkO,GAAO,MAAP,EAAY,MAAK,KAAI,MAAK,KAAI,GAAE,KAC/B,UAAA,gBAAAlO,EAACyO,IAAA,EAAW,GAAE,QAAO,cAAc;AAAA,QAAEC,IAAI;AAAA,QAAMC,IAAI;AAAA,MAAA,GAGjD,UAAA,gBAAAP,EAACG,IAAA,EAAM,KAAI,KACRhI,UAAAA;AAAAA,QAAAA,EAAQ5F,IAAK4E,CAAAA,MAAU;AACtB,gBAAMqJ,IAAa;AAAA,YACjBrJ,OAAAA;AAAAA,YACApC,OAAO2D,EAAOvB,EAAMF,GAAG;AAAA,YACvB2G,UAAUkB;AAAAA,YACVjB,UAAUA,CAAC9I,MAA6BqK,EAASjI,EAAMF,KAAKlC,CAAK;AAAA,UAAA,GAE7D0L,IAASjC,IAAmB;AAAA,YAAE,GAAGgC;AAAAA,YAAYhN,SAAS+K,GAAS/K;AAAAA,UAAAA,CAAS;AAC9E,iBAAO,gBAAA5B,EAAC8O,MAA0BD,UAAAA,KAAU,gBAAA7O,EAAC+L,MAAkB,GAAI6C,EAAAA,CAAW,KAAxDrJ,EAAMF,GAAsD;AAAA,QACpF,CAAC;AAAA,QACA2H,IACC,gBAAAhN,EAACG,IAAA,EAAK,WAAU,uBAAsB,OAAM,YAAW,IAAG,MAAK,IAAG,MAC/D6M,UAAAA,EAAAA,CACH,IACE;AAAA,MAAA,EAAA,CACN,GACF,GACF;AAAA,wBACCkB,GAAO,QAAP,EACC,UAAA,gBAAAE,EAAC5N,IAAA,EAAO,KAAI,KACV,UAAA;AAAA,QAAA,gBAAAR,EAAC+O,IAAA,EAAO,MAAK,MAAK,SAAQ,SAAQ,UAAU7B,GAAY,SAASK,GAAM,UAAA,SAAA,CAEvE;AAAA,0BACCwB,IAAA,EAAO,MAAK,MAAK,SAAQ,WAAU,UAAU,CAACd,GAAS,SAASf,GAAY,SAAS,MAAA;AAAM,UAAKQ;WAC9Ff,UAAAA,GAASqC,eAAe,MAAA,CAC3B;AAAA,MAAA,EAAA,CACF,EAAA,CACF;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,EAAA,GACF;AAEJ,GC1JaC,KAAgBA,CAAChM,MACxBA,MAAW,cAAoB,cAC/BA,MAAW,SAAe,SACvB,QAGIiM,KAAkBA,CAAC3K,MAAgC;AAC9D,QAAM;AAAA,IAAE6E,MAAAA;AAAAA,IAAM+F,QAAAA;AAAAA,IAAQlM,QAAAA;AAAAA,IAAQ7D,UAAAA;AAAAA,IAAUsD,QAAAA;AAAAA,IAAQ3B,WAAAA;AAAAA,EAAAA,IAAcwD;AAE9D,MAAI6E;AACFA,IAAAA,EAAKhK,CAAQ;AAAA,WACJsD,EAAO0M;AAChB,IAAKrO,EAAUY,SAAS0N,eAAe3M,EAAO0M,YAAYxB,WAAWlL,EAAO0M,YAAY9B,MAAM;AAAA,MAC5FgC,QAAQ;AAAA,MACR,GAAIlQ,IAAW;AAAA,QAAEA,UAAAA;AAAAA,MAAAA,IAAa,CAAA;AAAA,IAAC,CAChC;AAAA,OACI;AACL,UAAMmQ,IAAiB7M,EAAO8M,eAAepO,UAAUsB,EAAO+M,UAAUrQ,IAAWG;AAInFwB,IAAAA,EAAUS,OAAOkO,WAAWhN,EAAOqB,IAAI;AAAA,MACrCd,QAAAA;AAAAA,MACA7D,UAAUmQ;AAAAA,MACVjP,OAAOoC,EAAOpC;AAAAA,MACdqP,UAAU;AAAA,MACVR,QAAAA;AAAAA,MACAS,MAAM3M,MAAW,SAAS,aAAa;AAAA,MACvC4M,cAAc;AAAA,IAAA,CACf;AAAA,EACH;AAEA,EAAI5M,MAAW,eACblC,EAAU+O,MAAMC,cAAc,aAAa,EAAI,GAE7C9M,MAAW,UAAUlC,EAAUiP,UAAUC,QAAAA,MAAc,YACzDlP,EAAUiP,UAAUE,QAAQ,UAAU;AAE1C,GChDaC,KAA2CA,CAAC5L,MAInD;AACJ,QAAM;AAAA,IAAE8E,SAAAA;AAAAA,IAAS+G,gBAAAA;AAAAA,IAAgBrP,WAAAA;AAAAA,EAAAA,IAAcwD,GACzCnF,IAAW2B,EAAUsP,mBAAAA;AAC3B,SAAOC,GAAsB9J,QAASvD,CAAAA,OACnCmN,IAAiBnN,CAAM,KAAKlC,EAAUe,YAAYC,UAAUkB,CAAM,GAAGsN,QAAQ5P,IAAI,CAACyB,MAAwB;AACzG,UAAMM,IAASN,EAAMoO,cACfC,IAAaxB,GAAchM,CAAM,GACjC0C,IAAQ,QAAQjD,EAAOpC,KAAK,OAAOmQ,CAAU;AAEnD,WAAO;AAAA,MACL1M,IAAI,mBAAmBd,CAAM,IAAIP,EAAOqB,EAAE;AAAA,MAC1C6E,MAAMZ;AAAAA,MACNrC,OAAAA;AAAAA,MACA2E,YAAY,GAAG3E,CAAK,IAAIjD,EAAOqB,EAAE;AAAA,MACjCoG,OAAO;AAAA,MACPjK,MAAMwC,EAAOxC,OAAO,gBAAAF,EAACI,KAAc,MAAMsC,EAAOxC,MAAK,IAAMX;AAAAA,MAC3DmL,YAAYA,MAAM;AAChBrB,QAAAA,EAAAA,GACA6F,GAAgB;AAAA,UAAEnO,WAAAA;AAAAA,UAAW2B,QAAAA;AAAAA,UAAQO,QAAAA;AAAAA,UAAQ7D,UAAAA;AAAAA,UAAU+P,QAAQ/M,EAAM+M;AAAAA,UAAQ/F,MAAMhH,EAAMgH;AAAAA,QAAAA,CAAM;AAAA,MACjG;AAAA,IAAA;AAAA,EAEJ,CAAC,CACH;AACF,GCzBMsH,KAAsBA,CAACnM,MAIoB;AAC/C,QAAM;AAAA,IAAEgB,OAAAA;AAAAA,IAAO8D,SAAAA;AAAAA,IAAStI,WAAAA;AAAAA,EAAAA,IAAcwD,GAChC;AAAA,IAAEnF,UAAAA;AAAAA,EAAAA,IAAamG,GACfI,IAAQJ,EAAMnG,SAASuG,SAASF,GAAYF,EAAMnG,QAAQ,GAC1DuR,IAAO5P,EAAU6P,UAAUC,QAAQzR,EAASU,IAAI,GAChDI,IAAOd,EAASc,QAAQyQ,GAAMzQ,MAC9B2K,IAAWtF,EAAMsF;AACvB,MAAKA;AACL,WAAO;AAAA,MACL9G,IAAI,sBAAsB0B,GAAYrG,CAAQ,CAAC;AAAA,MAC/CqG,aAAaA,GAAYrG,CAAQ;AAAA,MACjCwJ,MAAMb;AAAAA,MACNpC,OAAAA;AAAAA,MACA2E,YAAY/E,EAAM+E,cAAc3E;AAAAA,MAChC8E,aAAalF,EAAMkF;AAAAA,MACnBN,OAAO5E,EAAM4E;AAAAA,MACbjK,MAAMA,IAAO,gBAAAF,EAACI,GAAA,EAAc,MAAMF,GAAK,IAAMX;AAAAA,MAC7CmL,YAAYA,MAAM;AAChBrB,QAAAA,EAAAA,GACKsB,QAAQC,QAAQC,EAASzL,CAAQ,CAAC,EAAE0L,MAAM,MAAA;AAAA,SAAe;AAAA,MAChE;AAAA,IAAA;AAEJ,GACagG,KAAwCA,CAACvM,MAIhD;AACJ,QAAM;AAAA,IAAE8E,SAAAA;AAAAA,IAASF,OAAAA;AAAAA,IAAOpI,WAAAA;AAAAA,EAAAA,IAAcwD;AACtC,SAAOxD,EAAU6P,UACdG,cAAc5H,CAAK,EACnBxI,IAAK4E,OAAUmL,GAAoB;AAAA,IAAE3P,WAAAA;AAAAA,IAAWwE,OAAAA;AAAAA,IAAO8D,SAAAA;AAAAA,EAAAA,CAAS,CAAC,EACjE1E,OAAO,CAACY,MAAkDA,MAAUhG,MAAS;AAClF,GC3CM0I,KAAgB,SAOhB+I,KAAmBA,CAACC,MACpBA,MAAe,iBAAuB,QACtCA,MAAe,gBAAsB,SAClC,WAGHC,KAA0BA,CAACC,MAA2CA,EAAgB7Q,SAAS6Q,EAAgBpN,IAExGqN,KAA+BA,CAC1CD,GACAE,MACG;AACH,QAAMC,IAAQD,EAAiBE,UAAWN,CAAAA,MAAeA,EAAWlN,OAAOoN,CAAe;AAE1F,SAAOK,KAAKC,IAAIH,GAAO,CAAC;AAC1B,GAEMI,KAAqB;AAAA,EAAEC,OAAO;AAAA,EAASC,MAAM;AAAO,GAIpDC,KAAkBA,CAACC,GAA0BC,MAC7CD,EAAElJ,SAASmJ,EAAEnJ,OAAakJ,EAAElJ,SAAS,UAAU,KAAK,IACjDsI,GAAwBY,CAAC,EAAEE,cAAcd,GAAwBa,CAAC,CAAC,GAG/DE,KAA+CA,CAAC1N,MAKvD;AACJ,QAAM;AAAA,IAAE8E,SAAAA;AAAAA,IAAS6I,oBAAAA;AAAAA,IAAoBf,iBAAAA;AAAAA,IAAiBE,kBAAAA;AAAAA,EAAAA,IAAqB9M;AAE3E,SAAO,CAAC,GAAG8M,CAAgB,EAAEc,KAAKN,EAAe,EAAElR,IAAI,CAACsQ,MAA2C;AACjG,UAAMtL,IAAQuL,GAAwBD,CAAU;AAEhD,WAAO;AAAA,MACLlN,IAAI,SAASkN,EAAWlN,EAAE;AAAA,MAC1BoN,iBAAiBF,EAAWlN;AAAAA,MAC5B6E,MAAMX;AAAAA,MACNtC,OAAAA;AAAAA,MACA2E,YAAY,0BAA0B2G,EAAWrI,IAAI,IAAIqI,EAAWlN,EAAE,IAAI4B,CAAK;AAAA,MAC/EwE,OAAOuH,GAAmBT,EAAWrI,IAAI;AAAA,MACzC1I,MAAM,gBAAAF,EAACI,GAAA,EAAc,MAAM4Q,GAAiBC,EAAWlN,EAAE,GAAE;AAAA,MAC3DqO,YAAYnB,EAAWlN,OAAOoN;AAAAA,MAC9BzG,YAAYA,MAAM;AAChBwH,QAAAA,EAAmBjB,EAAWlN,EAAE,GAChCsF,EAAAA;AAAAA,MACF;AAAA,IAAA;AAAA,EAEJ,CAAC;AACH,GCMMgJ,KAAuBA,CAC3BH,GACAI,MACG;AACH,QAAMC,IAAUD,EAAgB7E;AAChC6E,EAAAA,EAAgB7E,UAAU,MACtB8E,KAASL,EAAmBK,EAAQC,SAAS;AACnD,GAEMC,KAAuBA,CAACpF,GAAkB1H,MAC9C,CAACA,GAAO0H,EAAQtJ,IAAIsJ,EAAQ5C,aAAa4C,EAAQqF,QAAQ,EAAE/N,OAAO+C,OAAO,EAAE8C,KAAK,GAAG,GAE/EmI,KAA4BA,CAAC5R,MACjC,IAAI6R,IACF7R,EAAU8R,YAAYC,uBAAAA,EAAyBnS,IAAKoS,OAAe,CAACA,EAAWnF,WAAWmF,EAAWA,UAAU,CAAC,CAClH,GAEIC,KAAcA,CAACC,MACnBA,IAAU,gBAAAjT,EAACkT,IAAA,EAAgB,SAAAD,GAAiB,IAAM1T,QAE9C4T,KAAyBA,CAACnG,MAAoBA,aAAiB5F,QAAQ4F,EAAMgB,UAAU,mBAEvFoF,KAA0BA,CAACrS,MAA2E;AAC1G,QAAM3B,IAAW2B,EAAUsP,mBAAAA;AAC3B,SAAOjR,IAAW;AAAA,IAAEA,UAAAA;AAAAA,EAAAA,IAAaG;AACnC,GAEM8T,KAAwB,OAAO9O,MAM/B;AACJ,QAAM;AAAA,IAAE+I,MAAAA;AAAAA,IAAMM,WAAAA;AAAAA,IAAWhM,SAAAA;AAAAA,IAAS+D,OAAAA;AAAAA,IAAO5E,WAAAA;AAAAA,EAAAA,IAAcwD;AACvD,MAAI;AACF,UAAMxD,EAAUY,SAAS0N,eAAezB,GAAWN,GAAM1L,CAAO;AAAA,EAClE,SAASoL,GAAO;AACdjM,IAAAA,EAAUuS,cAAcC,KAAK;AAAA,MAAEC,OAAO;AAAA,MAASlT,OAAO,GAAGqF,CAAK;AAAA,MAAWqI,SAASmF,GAAuBnG,CAAK;AAAA,IAAA,CAAG;AAAA,EACnH;AACF,GAEMyG,KAAcA,CAAClP,MAOsB;AACzC,QAAM;AAAA,IAAEmP,QAAAA;AAAAA,IAAQrK,SAAAA;AAAAA,IAASsK,iBAAAA;AAAAA,IAAiBvG,QAAAA;AAAAA,IAAQrM,WAAAA;AAAAA,IAAW6S,qBAAAA;AAAAA,EAAAA,IAAwBrP,GAC/E+I,IAAOoG,GAAQpG;AAErB,MAAI,CAACvM,EAAUY,SAASkS,iBAAiBzG,EAAOC,QAAQtJ,IAAIuJ,CAAI,EAAG,QAAO;AAE1E,QAAM3H,IAAQ+N,GAAQ/N,SAASyH,EAAOC,QAAQ1H,OACxCzF,IAAOwT,GAAQxT,QAAQkN,EAAOC,QAAQnN,MACtCiK,IAAQuJ,GAAQvJ,SAASiD,EAAOC,QAAQqF;AAE9C,SAAO;AAAA,IACL3O,IAAI,qBAAqBqJ,EAAOC,QAAQtJ,EAAE;AAAA,IAC1C6J,WAAWR,EAAOC,QAAQtJ;AAAAA,IAC1B6E,MAAMZ;AAAAA,IACNrC,OAAAA;AAAAA,IACA2E,YAAYmI,GAAqBrF,EAAOC,SAAS1H,CAAK;AAAA,IACtD8E,aAAa2C,EAAOC,QAAQ5C;AAAAA,IAC5BN,OAAAA;AAAAA,IACAjK,MAAMA,IAAO,gBAAAF,EAACI,GAAA,EAAc,MAAMF,GAAK,IAAMX;AAAAA,IAC7CuU,UAAUd,GAAYY,EAAoBG,IAAI3G,EAAOC,QAAQtJ,EAAE,CAAC;AAAA,IAChE2G,YAAYA,MAAM;AAChB,YAAM9I,IAAUwR,GAAwBrS,CAAS;AAEjD,UADAsI,EAAAA,GACIlD,GAAqBiH,EAAOC,QAAQjH,MAAM,KAAKuN,GAAiB;AAClEA,QAAAA,EAAgB;AAAA,UAAEvG,QAAAA;AAAAA,UAAQsG,QAAAA;AAAAA,UAAQ/N,OAAAA;AAAAA,UAAO2H,MAAAA;AAAAA,UAAM1L,SAAAA;AAAAA,QAAAA,CAAS;AACxD;AAAA,MACF;AACA,MAAKyR,GAAsB;AAAA,QAAEtS,WAAAA;AAAAA,QAAW6M,WAAWR,EAAOC,QAAQtJ;AAAAA,QAAIuJ,MAAAA;AAAAA,QAAM1L,SAAAA;AAAAA,QAAS+D,OAAAA;AAAAA,MAAAA,CAAO;AAAA,IAC9F;AAAA,EAAA;AAEJ,GAEMqO,KAAiBA,CAAC7U,MACtBA,EAAKuU,QAAQvJ,SAAShL,EAAKiO,OAAOC,QAAQqF,YAAY,IAElDuB,KAAiBA,CAAC9U,MAAwCA,EAAKuU,QAAQQ,SAAS,GAEhFC,KAAwBA,CAACC,GAAqCC,MAAyC;AAC3G,QAAMC,IAAkBN,GAAeI,CAAI,EAAEpC,cAAcgC,GAAeK,CAAK,CAAC;AAChF,SAAIC,MAAoB,IAAUA,IAE3BL,GAAeG,CAAI,IAAIH,GAAeI,CAAK;AACpD,GAEME,KAAqBA,CAACxT,GAA0ByT,MAC/CA,IAIEzT,EAAUS,OACdiT,cAAcD,CAAQ,EACtB7P,OAAQ+O,CAAAA,MAAW3S,EAAUa,QAAQ8S,QAAQhB,EAAOiB,IAAI,CAAC,EACzDhU,IAAK+S,CAAAA,MAAW;AACf,QAAMtG,IAASrM,EAAUY,SAASiT,WAAWlB,EAAO9F,SAAS;AAC7D,SAAOR,IAAS;AAAA,IAAEA,QAAAA;AAAAA,IAAQsG,QAAAA;AAAAA,EAAAA,IAAW;AACvC,CAAC,EACA/O,OAAO,CAACxF,MAA4EA,MAAS,IAAI,IAV3F4B,EAAUY,SAASkT,aAAAA,EAAelU,IAAKyM,CAAAA,OAAY;AAAA,EAAEA,QAAAA;AAAAA,EAAQsG,QAAQnU;AAAAA,EAAY,GAa/EuV,KAAuCA,CAACvQ,MAK/C;AACJ,QAAM;AAAA,IAAEiQ,UAAAA;AAAAA,IAAUnL,SAAAA;AAAAA,IAASsK,iBAAAA;AAAAA,IAAiB5S,WAAAA;AAAAA,EAAAA,IAAcwD,GACpDqP,IAAsBjB,GAA0B5R,CAAS;AAE/D,SAAOwT,GAAmBxT,GAAWyT,CAAQ,EAC1CrC,KAAKgC,EAAqB,EAC1BxT,IAAI,CAAC;AAAA,IAAEyM,QAAAA;AAAAA,IAAQsG,QAAAA;AAAAA,EAAAA,MACdD,GAAY;AAAA,IAAE1S,WAAAA;AAAAA,IAAWqM,QAAAA;AAAAA,IAAQsG,QAAAA;AAAAA,IAAQE,qBAAAA;AAAAA,IAAqBvK,SAAAA;AAAAA,IAASsK,iBAAAA;AAAAA,EAAAA,CAAiB,CAC1F,EACChP,OAAO,CAACY,MAAiDA,MAAU,IAAI;AAC5E,GAEawP,KAA0BA,CAACtV,MAAwC;AAC9E,QAAM;AAAA,IACJsB,WAAAA;AAAAA,IACAqI,MAAAA;AAAAA,IACAoL,UAAAA,IAAWQ;AAAAA,IACXC,cAAAA,IAAe;AAAA,IACfrI,kBAAAA;AAAAA,IACAvD,SAAAA;AAAAA,EAAAA,IACE5J,GACE;AAAA,IAAE0R,iBAAAA;AAAAA,IAAiBE,kBAAAA;AAAAA,IAAkBa,oBAAAA;AAAAA,EAAAA,IAAuBgD,GAAAA,GAC5D7M,IAAOrH,EAAkBD,EAAUoU,eAAejU,OAAQI,CAAAA,MAAUA,EAAM+G,IAAI,GAC9EiK,IAAkB8C,GAA0C,IAAI,GAChEC,IAAgBrU,EAAkBD,EAAUoU,eAAejU,OAAQI,CAAAA,MAAUA,EAAM+T,aAAa,GAChG,CAACC,GAAWC,CAAY,IAAI5L,EAASsL,CAAY,GACjDO,IAAgCtM,GAA0C;AAAA,IAC9EnI,WAAAA;AAAAA,IACAoI,OAAOmM;AAAAA,IACPlM,MAAAA;AAAAA,IACAC,SAAAA;AAAAA,EAAAA,CACD,GACKoM,IAAoBlU,GAA8BR,CAAS,GAE3D2U,IAAeA,MAAM;AACzBrD,IAAAA,GAAqBH,GAAoBI,CAAe,GACxDjJ,EAAAA;AAAAA,EACF,GAEMsM,IAAiBA,MAAM;AAC3BtD,IAAAA,GAAqBH,GAAoBI,CAAe,GACxDvR,EAAUoU,eAAe/L,KAAK;AAAA,MAAEf,MAAM;AAAA,IAAA,CAAQ;AAAA,EAChD,GAEMuN,IAAqBA,MAAM;AAC/BtD,IAAAA,EAAgB7E,UAAU,MAC1BpE,EAAAA;AAAAA,EACF,GAEMwM,IAAiBf,GAAqC;AAAA,IAC1D/T,WAAAA;AAAAA,IACAyT,UAAAA;AAAAA,IACAnL,SAAAA;AAAAA,IACAsK,iBAAkBhH,CAAAA,MAAY5L,EAAUoU,eAAeW,cAAcnJ,CAAO;AAAA,EAAA,CAC7E,GACKoJ,IAAkBjF,GAAsC;AAAA,IAAE/P,WAAAA;AAAAA,IAAWoI,OAAO8L;AAAAA,IAAc5L,SAAAA;AAAAA,EAAAA,CAAS,GACnG2M,IAAe/D,GAA6C;AAAA,IAChEd,iBAAAA;AAAAA,IACAE,kBAAAA;AAAAA,IACAa,oBAAAA;AAAAA,IACA7I,SAASuM;AAAAA,EAAAA,CACV,GACKK,IAAqB9F,GAAyC;AAAA,IAClEpP,WAAAA;AAAAA,IACAsI,SAAAA;AAAAA,IACA+G,gBAAgBqF;AAAAA,EAAAA,CACjB,GACKlP,IAAU,CACd,GAAGwP,GACH,GAAGP,GACH,GAAGK,GACH,GAAGI,GACH,GAAGD,CAAY,GAEXtN,IAA0B0I,GAA6BD,GAAiBE,CAAgB,GACxF6E,IAAc9N,GAAmBC,CAAI,GACrC8N,IAAqB1N,GAA6B;AAAA,IACtDJ,MAAAA;AAAAA,IACAK,yBAAAA;AAAAA,EAAAA,CACD,GACK0N,IAAiB7N,GAAmBF,CAAI,GACxCgO,IAAkB7N,GAAoBH,CAAI;AAEhD4C,SAAAA,GAAU,MAAM;AACd,IAAI7B,OAAmB6L,CAAY;AAAA,EACrC,GAAG,CAACA,GAAc7L,CAAI,CAAC,GAEvB6B,GAAU,MAAM;AACd,QAAI7B,KAAQ8M,GAAa;AACvB,MAAK5D,EAAgB7E,YAAS6E,EAAgB7E,UAAU;AAAA,QAAE+E,WAAWrB;AAAAA,MAAAA;AACrE;AAAA,IACF;AAEAkB,IAAAA,GAAqBH,GAAoBI,CAAe;AAAA,EAC1D,GAAG,CAAC4D,GAAa9M,GAAM8I,GAAoBf,CAAe,CAAC,GAGzD,gBAAA/C,EAAAU,IAAA,EACE,UAAA;AAAA,IAAA,gBAAA9O,EAACsW,GAAA,EACC,SAAQ,YACR,KAAK;AAAA,MACH,0FAA0F;AAAA,QACxFC,UAAU;AAAA,QACVC,OAAO;AAAA,MAAA;AAAA,MAET,+CAA+C;AAAA,QAC7CC,YAAY;AAAA,QACZC,gBAAgB;AAAA,QAChBC,GAAG;AAAA,QACHC,MAAM;AAAA,QACNC,SAAS;AAAA,QACTC,GAAG;AAAA,MAAA;AAAA,MAEL,4CAA4C;AAAA,QAAEC,YAAYhU;AAAAA,MAAAA;AAAAA,IAAkC,GAG9F,UAAA,gBAAA/C,EAACgX,IAAA,EACC,MAAA5N,GACA,SAAA7C,GACA,cAAA0O,GACA,oBAAAkB,GACA,MAAMC,GACN,OAAOC,GACP,UAAU,GAAGhO,CAAI,IAAI4M,CAAY,IACjC,WAAW,CAAC;AAAA,MAAErM,MAAAA;AAAAA,IAAAA,MAAWD,GAAoB;AAAA,MAAEN,MAAAA;AAAAA,MAAMO,MAAAA;AAAAA,IAAAA,CAAM,GAC3D,aAAa,CAAC;AAAA,MAAEA,MAAAA;AAAAA,IAAAA,MAAWG,GAAsB;AAAA,MAAEV,MAAAA;AAAAA,MAAMO,MAAAA;AAAAA,IAAAA,CAAM,GAC/D,YAAW,qBACX,qBAAsBrD,CAAAA,MAAU;AAC9B,UAAI,CAAC6D,KAAQ,CAAC8M,EAAa;AAC3B,YAAMe,IAAa1R;AACnB,MAAI,CAAC0R,GAAY9F,mBAAmB8F,EAAW9F,oBAAoBA,KACnEe,EAAmB+E,EAAW9F,eAAe;AAAA,IAC/C,GACA,eAAeoE,GACf,SAASG,GACT,UAAWwB,CAAAA,MACL5O,GAAoBD,CAAI,KAC1BsN,EAAAA,GACO,MAGLuB,EAAI/N,MAAM/H,SAAS,KACrB8V,EAAIC,SAAS,EAAE,GACfD,EAAIE,eAAe,CAAC,GACb,OAGT1B,EAAAA,GACO,KACP,EAAA,CAEN;AAAA,IACA,gBAAA1V,EAAC0M,IAAA,EACC,SAAS2I,GACT,kBAAAzI,GACA,aAAcrI,CAAAA,MACZxD,EAAUY,SAAS0V,mBAAmB9S,EAAMqJ,WAAWrJ,EAAM+I,MAAM/I,EAAM3C,SAAS2C,EAAMsJ,YAAY,GAEtG,SAAS,MAAM9M,EAAUoU,eAAemC,YAAAA,GACxC,OAAQ/S,CAAAA,MAAU8O,GAAsB;AAAA,MAAEtS,WAAAA;AAAAA,MAAW,GAAGwD;AAAAA,IAAAA,CAAO,EAAA,CAAE;AAAA,EAAA,GAErE;AAEJ,GC7UagT,KAAuB9X,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA;AAAA,MAAA6X,GAAAC,GAAAxU,GAAAlC;AAAA,EAAArB,SAAAD,KAClC;AAAA,IAAAsB,WAAAA;AAAAA,IAAAkC,QAAAA;AAAAA,IAAAwU,UAAAA;AAAAA,IAAA,GAAAD;AAAAA,EAAAA,IAAqD/X,GAAMC,OAAAD,GAAAC,OAAA8X,GAAA9X,OAAA+X,GAAA/X,OAAAuD,GAAAvD,OAAAqB,MAAAyW,IAAA9X,EAAA,CAAA,GAAA+X,IAAA/X,EAAA,CAAA,GAAAuD,IAAAvD,EAAA,CAAA,GAAAqB,IAAArB,EAAA,CAAA;AAC3D,QAAAgY,IAAqB1W,EAAkBD,EAAS4W,MAAMzW,OAAQC,EAA6B,GAC3FiD,IAAYgR,GAA8B,IAAI;AAAE,MAAAxV,GAAAG;AAAA,EAAAL,EAAA,CAAA,MAAAgY,KAAAhY,SAAAuD,KAEtCrD,IAAAA,MAAA;AACR,UAAAgY,IAAgBxT,EAAGqJ;AACnB,IAAI,CAACmK,KAAWF,MAAiBzU,KAC7B2U,EAAOC,SAAUC,SAAQC,aAAc,KAC3CH,EAAOD,MAAO;AAAA,MAAAK,eAAiB;AAAA,IAAA,CAAM;AAAA,EAAC,GACrCjY,IAAA,CAAC2X,GAAczU,CAAM,GAACvD,OAAAgY,GAAAhY,OAAAuD,GAAAvD,OAAAE,GAAAF,OAAAK,MAAAH,IAAAF,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA,IALzBuL,GAAUrL,GAKPG,CAAsB;AAAC,MAAAQ;AAAA,EAAAb,SAAAuD,KAAAvD,EAAA,EAAA,MAAAqB,EAAA4W,SAONpX,IAAA8N,CAAAA,MAAA;AACd,IAAIA,EAAK4J,cAAcJ,SAAUxJ,EAAK6J,MAAO,KAAGnX,EAAS4W,MAAMQ,gBAAiBlV,CAAM;AAAA,EAAE,GACzFvD,OAAAuD,GAAAvD,EAAA,EAAA,IAAAqB,EAAA4W,OAAAjY,QAAAa,KAAAA,IAAAb,EAAA,EAAA;AAAA,MAAA6M;AAAA,SAAA7M,EAAA,EAAA,MAAA8X,KAAA9X,UAAA+X,KAAA/X,EAAA,EAAA,MAAAa,KANHgM,IAAA,gBAAAvM,EAACsW,GAAA,EACMlS,KAAAA,GACK,UAAA,IACF,SAAA,QACQ,gBAAA7D,GAEf,GACGiX,GAEHC,UAAAA,EAAAA,CACH,GAAM/X,QAAA8X,GAAA9X,QAAA+X,GAAA/X,QAAAa,GAAAb,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA,GAVN6M;AAUM;AAvB0B,SAAApL,GAAAG,GAAA;AAAA,SAEuCA,EAAKoW;AAAa;ACyB7F,MAAMU,KAAcA,CAACC,MAAmBA,EAAK7N,KAAK,GAAG,GAM/C8N,KAA4CC,GAAoC,EAAE,GAElFC,KAAgCA,CAACnT,MACrCA,MAAQoT,MACRpT,MAAQqT,MACRrT,EAAIsT,WAAWL,EAAyC,GAEpDM,KAAqCA,CAAC9R,MAA4C;AACtF,QAAMuD,IAA0C,CAAA;AAEhD,aAAW,CAAChF,GAAKlC,CAAK,KAAKmD,OAAOC,QAAQO,CAAM;AAC9C,IAAK0R,GAA8BnT,CAAG,MAAGgF,EAAOhF,CAAG,IAAIlC;AAGzD,SAAOkH;AACT,GAEMwO,KAAuBA,CAACvX,GAA+BM,OAGpD;AAAA,EACL,GAHwBA,IAAUgX,GAAmCtX,EAAMwX,aAAa,IAAIxX,EAAMwX;AAAAA,EAIlG,GAAGC,GAAqCnX,GAASxC,QAAQ;AAAA,IAIhD4Z,KAAkCA,CAC7C1X,GACAkT,GACA5S,MACG;AACH,QAAMkX,IAAgBD,GAAqBvX,GAAOM,CAAO;AAEzD,SAAO,CAAC,GAAIN,EAAM2X,YAAYb,GAAY5D,CAAQ,CAAC,KAAK,CAAA,CAAG,EACxDrC,KAAK,CAACiC,GAAMC,MAAU;AACrB,UAAM6E,IAAY9E,EAAKF,SAAS,GAC1BiF,IAAa9E,EAAMH,SAAS;AAClC,WAAOgF,IAAYC,KAAcC,GAAuBhF,GAAMC,CAAK;AAAA,EACrE,CAAC,EACA1P,OAAQ+O,CAAAA,MAAW2F,GAAyBP,GAAepF,EAAOiB,IAAI,CAAC,EACvEhU,IAAI,CAAC+S,GAAQpC,MAAU;AACtB,UAAMlE,IAAS9L,EAAMK,SAAS+R,EAAO9F,SAAS;AAC9C,QAAI,CAACR,EAAQ,QAAO;AAEpB,UAAME,IAAOoG,EAAOpG;AACpB,WAAIF,EAAOkM,QAAQC,YAAYjM,CAAI,MAAM,KAAc,OAEhD;AAAA,MACLvJ,IAAI,GAAG2P,EAAO9F,SAAS,IAAI0D,CAAK;AAAA,MAChC1D,WAAWR,EAAOC,QAAQtJ;AAAAA,MAC1B4B,OAAO+N,EAAO/N,SAASyH,EAAOC,QAAQ1H;AAAAA,MACtC,GAAK+N,EAAOjJ,eAAe2C,EAAOC,QAAQ5C,cACtC;AAAA,QAAEA,aAAaiJ,EAAOjJ,eAAe2C,EAAOC,QAAQ5C;AAAAA,MAAAA,IACpD,CAAA;AAAA,MACJvK,MAAMwT,EAAOxT,QAAQkN,EAAOC,QAAQnN;AAAAA,MACpC,GAAIwT,EAAO8F,UAAU;AAAA,QAAEA,SAAS9F,EAAO8F;AAAAA,MAAAA,IAAY,CAAA;AAAA,MACnD,GAAI9F,EAAO+F,gBAAgB;AAAA,QAAEA,eAAe/F,EAAO+F;AAAAA,MAAAA,IAAkB,CAAA;AAAA,MACrEtP,OAAOuJ,EAAOvJ;AAAAA,MACdmD,MAAAA;AAAAA,MACAtB,UAAU0H,EAAOgG,aAAa,MAAQtM,EAAOkM,QAAQK,YAAYrM,CAAI,MAAM;AAAA,MAC3E,GAAIoG,EAAOgG,WAAW;AAAA,QAAEA,UAAU;AAAA,MAAA,IAAS,CAAA;AAAA,IAAC;AAAA,EAEhD,CAAC,EACA/U,OAAO,CAACxF,MAAoCA,MAAS,IAAI;AAC9D,GAEaya,KAAyBA,CACpC7Y,GACAyT,GACA5S,MAEAoX,GACE;AAAA,EACEC,aAAalY,EAAUS,OAAOqY,UAAUC,WAAWb;AAAAA,EACnDtX,UAAUZ,EAAUY,SAAST,MAAM4Y,WAAWnY;AAAAA,EAC9CmX,eAAe/X,EAAUa,QAAQV,MAAM4Y,WAAWhT;AACpD,GACA0N,GACA5S,CACF,GClHImY,KAAiBA,CAAC5a,MAA4BA,EAAKgL,UAAU,UAE7D6P,KAAmBA,CAAC7a,MAA4BA,EAAKgL,UAAU,cAAc4P,GAAe5a,CAAI,GAEhG8a,KAAuBA,CAACvZ,GAA4BwZ,MAAqB;AAC7E,MAAI,CAACA,KAAWxZ,EAAMU,WAAW,EAAG,QAAOV;AAE3C,QAAM,CAACyZ,GAAO,GAAGC,CAAI,IAAI1Z;AACzB,SAAKyZ,IAEE,CAAC;AAAA,IAAE,GAAGA;AAAAA,IAAOE,iBAAiB;AAAA,EAAA,GAAiB,GAAGD,CAAI,IAF1CA;AAGrB,GAEME,KAAuBA,CAAC5Z,MAA+B;AAC3D,QAAM6Z,IAAe7Z,EAAMiE,OAAQxF,OAAS,CAAC4a,GAAe5a,CAAI,CAAC,GAC3Dqb,IAAc9Z,EAAMiE,OAAOoV,EAAc;AAE/C,SAAO,CAAC,GAAGQ,GAAc,GAAGN,GAAqBO,GAAaD,EAAanZ,SAAS,CAAC,CAAC;AACxF,GAEaqZ,KAAqCA,CAAC/Z,OAChD;AAAA,EACCga,aAAaha,EAAMiE,OAAQxF,OAAS,CAAC6a,GAAiB7a,CAAI,CAAC;AAAA,EAC3Dwb,eAAeL,GAAqB5Z,EAAMiE,OAAOqV,EAAgB,CAAC;AACpE,IAEWY,KAAsCA,CAACla,MAClDA,EAAMma,KAAM1b,CAAAA,MAASA,EAAKsa,aAAa,GAAGA,iBAAiB,uBCdvDrG,KAA0BA,CAAChU,MAC/BA,IAAW;AAAA,EAAEA,UAAAA;AAAS,IAAIG,QAEtBub,KAA8Brb,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAKlC;AAAA,IAAAob,aAAAA;AAAAA,IAAA5b,MAAAA;AAAAA,IAAA6b,UAAAA;AAAAA,EAAAA,IAAwCvb;AAAM,MAAAG;AAAA,EAAAF,EAAA,CAAA,MAAAP,KAAAO,SAAAsb,KAC9Bpb,IAAAA,MAAMob,EAAS7b,CAAI,GAACO,OAAAP,GAAAO,OAAAsb,GAAAtb,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAApC,QAAAmB,IAAgBjB;AAEhB,MAAIT,EAAIgL,UAAW,aAAf,CAA6BhL,EAAIe,MAAK;AAK3B,UAAAH,IAAAZ,EAAIgL,UAAW,YAAf,YAAA;AAA+C,QAAA5J;AAAA,IAAAb,EAAA,CAAA,MAAAP,EAAAe,QAIvDK,IAAApB,EAAIe,OAAQ,gBAAAF,EAACI,GAAA,EAAoB,MAAAjB,EAAIe,MAAa,MAAA,GAAA,CAAE,IAApD,MAA+DR,EAAA,CAAA,IAAAP,EAAAe,MAAAR,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,QAAA6M;AAAA,WAAA7M,EAAA,CAAA,MAAAqb,KAAArb,EAAA,CAAA,MAAAP,EAAA6M,YAAAtM,EAAA,CAAA,MAAAP,EAAA4E,MAAArE,EAAA,CAAA,MAAAP,EAAAwG,SAAAjG,EAAA,CAAA,MAAAmB,KAAAnB,EAAA,EAAA,MAAAK,KAAAL,UAAAa,KAPlEgM,IAAA,gBAAA6B,EAACW,IAAA,EAEOgM,SACG,SAAAhb,GACC,UAAAZ,EAAI6M,UACLnL,SAAAA,GAERN,UAAAA;AAAAA,MAAAA;AAAAA,MACApB,EAAIwG;AAAAA,IAAAA,EAAAA,GAPAxG,EAAI4E,EAQX,GAASrE,OAAAqb,GAAArb,EAAA,CAAA,IAAAP,EAAA6M,UAAAtM,EAAA,CAAA,IAAAP,EAAA4E,IAAArE,EAAA,CAAA,IAAAP,EAAAwG,OAAAjG,OAAAmB,GAAAnB,QAAAK,GAAAL,QAAAa,GAAAb,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA,GATT6M;AAAAA,EASS;AAEZ,MAAAxM;AAAA,EAAAL,EAAA,EAAA,MAAAP,EAAAe,QAKKH,sBAACK,GAAA,EAAoB,MAAAjB,EAAIe,MAAa,MAAA,IAAE,GAAIR,EAAA,EAAA,IAAAP,EAAAe,MAAAR,QAAAK,KAAAA,IAAAL,EAAA,EAAA;AAAA,MAAAa;AAAA,EAAAb,UAAAqb,KAAArb,EAAA,EAAA,MAAAP,EAAA6M,YAAAtM,UAAAP,EAAAwG,SAAAjG,UAAAmB,KAAAnB,EAAA,EAAA,MAAAK,KAD9CQ,sBAAC0a,IAAA,EAAiBF,SAAqB,SAAA,SAAoB,cAAA5b,EAAIwG,OAAkB,UAAAxG,EAAI6M,UAAoBnL,SAAAA,GACvGd,UAAAA,GACF,GAAaL,QAAAqb,GAAArb,EAAA,EAAA,IAAAP,EAAA6M,UAAAtM,EAAA,EAAA,IAAAP,EAAAwG,OAAAjG,QAAAmB,GAAAnB,QAAAK,GAAAL,QAAAa,KAAAA,IAAAb,EAAA,EAAA;AAAA,MAAA6M;AAAA,SAAA7M,EAAA,EAAA,MAAAP,EAAA4E,MAAArE,EAAA,EAAA,MAAAP,EAAAwG,SAAAjG,UAAAa,KAHfgM,sBAAC2O,IAAA,EAA+B,SAAA/b,EAAIwG,OAClCpF,UAAAA,KADYpB,EAAI4E,EAIlB,GAAUrE,EAAA,EAAA,IAAAP,EAAA4E,IAAArE,EAAA,EAAA,IAAAP,EAAAwG,OAAAjG,QAAAa,GAAAb,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA,GAJV6M;AAIU,GAID4O,KAAyB1b,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACpC;AAAA,IAAAob,aAAAnb;AAAAA,IAAA4U,UAAAA;AAAAA,IAAAzT,WAAAA;AAAAA,EAAAA,IAAoDtB,GAA5Csb,IAAAnb,MAAAL,SAAA,OAAAK,GACR+B,IAAiBX,EAAkBD,EAASY,SAAST,OAAQC,EAAyB,GACtF2X,IAAsB9X,EAAkBD,EAASa,QAAQV,OAAQ6J,EAAuB,GACxFkO,IAAoBjY,EAAkBD,EAASS,OAAOqY,WAAYuB,EAA4B,GAC9Fhc,IAAiB4B,EAAkBD,EAASS,OAAON,OAAQma,EAAqD;AAAE,MAAAC,GAAAvb,GAAAQ,GAAAgM,GAAAgP,GAAAC,GAAAC;AAAA,MAAA/b,EAAA,CAAA,MAAAiC,KAAAjC,EAAA,CAAA,MAAAoZ,KAAApZ,SAAAqb,KAAArb,EAAA,CAAA,MAAAuZ,KAAAvZ,EAAA,CAAA,MAAA8U,KAAA9U,EAAA,CAAA,MAAAN,KAAAM,EAAA,CAAA,MAAAqB,EAAAoU,kBAAAzV,EAAA,CAAA,MAAAqB,EAAAY,UAAA;AAkBnF8Z,IAAAA,IAAAjS,uBAAIC,IAAJ,6BAAG;AAACiS,IAAAA,GAAA;AAjBnC,YAAAhb,IAAcsY,GAAgC;AAAA,QAAAC,aAAAA;AAAAA,QAAAtX,UAAAA;AAAAA,QAAAmX,eAAAA;AAAAA,MAAAA,GAA0CtE,GAAU;AAAA,QAAApV,UAAAA;AAAAA,MAAAA,CAAY,GAC9G;AAAA,QAAAsb,aAAAA;AAAAA,QAAAC,eAAAA;AAAAA,MAAAA,IAAuCF,GAAmC/Z,CAAK;AAAE,UAAAib;AAAA,MAAAjc,EAAA,EAAA,MAAAiC,KAAAjC,EAAA,EAAA,MAAAN,KAAAM,EAAA,EAAA,MAAAqB,EAAAoU,kBAAAzV,EAAA,EAAA,MAAAqB,EAAAY,YAKhEga,IAAAxc,CAAAA,MAAA;AACf,cAAAkO,IAAgB1L,EAASxC,EAAIyO,SAAU,GAAUP,SACjDC,IAAanO,EAAImO,MACjB1L,IAAgBwR,GAAwBhU,CAAQ;AAChD,YAAIiO,KAAWlH,GAAqBkH,EAAOjH,MAAO,GAAC;AACjDrF,UAAAA,EAASoU,eAAeW,cAAe;AAAA,YAAA1I,QAAU;AAAA,cAAAC,SAAAA;AAAAA,YAAAA;AAAAA,YAAW1H,OAASxG,EAAIwG;AAAAA,YAAM2H,MAAAA;AAAAA,YAAA1L,SAAAA;AAAAA,UAAAA,CAAiB;AAAC;AAAA,QAAA;AAG9Fb,QAAAA,EAASY,SAAS0N,eAAgBlQ,EAAIyO,WAAYN,GAAM1L,CAAO,EAACkJ,MAAO8Q,EAAe;AAAA,MAAC,GAC7Flc,QAAAiC,GAAAjC,QAAAN,GAAAM,EAAA,EAAA,IAAAqB,EAAAoU,gBAAAzV,EAAA,EAAA,IAAAqB,EAAAY,UAAAjC,QAAAic,KAAAA,IAAAjc,EAAA,EAAA;AATD,YAAAsb,IAAiBW;AAWjB,UAAIjb,EAAKU,WAAY,GAAC;AAASqa,QAAAA,IAAA;AAAA,cAAAC;AAAAA,MAAI;AAGhCJ,MAAAA,IAAA9a,IAAmBT,IAAA,GAAOQ,IAAA,OAAWgM,IAAA;AAAG,UAAAsP;AAAA,MAAAnc,EAAA,EAAA,MAAAqb,KAAArb,UAAAsb,KACtBa,IAAAC,CAAAA,wBACdhB,IAAA,EAAgD3b,MAAAA,GAAgB6b,UAAAA,GAAuBD,aAAAA,KAAtD5b,EAAI4E,EAA6D,GACpGrE,QAAAqb,GAAArb,QAAAsb,GAAAtb,QAAAmc,KAAAA,IAAAnc,EAAA,EAAA,GAFA6b,IAAAb,EAAW/Z,IAAKkb,CAEhB,GACAL,IAAAb,EAAavZ,SAAU,IACtB,gBAAAgN,EAAA2N,GAAA,MAAA,EACE,UAAA;AAAA,QAAA,gBAAA/b,EAAA+b,GAAA,SAAA,EAAc,SAAA,IACZ,UAAA,gBAAA/b,EAACib,IAAA,EACOF,MAAAA,GACE,SAAA,SACI,cAAAH,GAAoCD,CAAa,GAE7D,UAAA,gBAAA3a,EAACI,GAAA,EAAmB,MAAA,kBAAuB,MAAA,OAC7C,EAAA,CACF;AAAA,0BACC4b,IAAA,EACC,UAAA,gBAAAhc,EAAA+b,GAAA,YAAA,EACE,0CAAmB,MAAA,SAAW,IAAA,MAC3BpB,YAAaha,IAAKsb,CAAAA,wBAChBnN,IAAA,EACE3P,UAAAA;AAAAA,UAAAA,EAAIkb,kBAAmB,gBAAAra,EAAA+b,GAAA,WAAA,CAAA,CAAA,IAAvB;AAAA,uCACiB,OAAA5c,EAAI4E,IAAK,SAAA,IACzB,UAAA,gBAAA/D,EAACkc,IAAA,EACC,SAAA,IACQ,SAAA,cACJ,IAAA/c,EAAI4E,IACD,OAAA5E,EAAIwG,OACL,MAAAxG,EAAIe,OAAQ,gBAAAF,EAACI,KAAoB,MAAAjB,EAAIe,MAAa,MAAA,GAAA,CAAE,IAApDX,QACI,UAAAJ,EAAI6M,UACF,YAAA,MAAMgP,EAAS7b,CAAI,MAEnC;AAAA,QAAA,EAAA,GAZaA,EAAI4E,EAanB,CACD,EAAA,CACH,GACF,EAAA,CACF;AAAA,MAAA,EAAA,CACF,IAjCD;AAAA,IAkCO;AAAArE,IAAAA,OAAAiC,GAAAjC,OAAAoZ,GAAApZ,OAAAqb,GAAArb,OAAAuZ,GAAAvZ,OAAA8U,GAAA9U,OAAAN,GAAAM,EAAA,CAAA,IAAAqB,EAAAoU,gBAAAzV,EAAA,CAAA,IAAAqB,EAAAY,UAAAjC,OAAA4b,GAAA5b,OAAAK,GAAAL,QAAAa,GAAAb,QAAA6M,GAAA7M,QAAA6b,GAAA7b,QAAA8b,GAAA9b,QAAA+b;AAAAA,EAAA;AAAAH,IAAAA,IAAA5b,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA,GAAAa,IAAAb,EAAA,EAAA,GAAA6M,IAAA7M,EAAA,EAAA,GAAA6b,IAAA7b,EAAA,EAAA,GAAA8b,IAAA9b,EAAA,EAAA,GAAA+b,IAAA/b,EAAA,EAAA;AAAA,MAAA+b,MAAAjS,uBAAAC,IAAA,6BAAA;AAAA,WAAAgS;AAAA,MAAAE;AAAA,SAAAjc,UAAA4b,KAAA5b,EAAA,EAAA,MAAAK,KAAAL,EAAA,EAAA,MAAAa,KAAAb,EAAA,EAAA,MAAA6M,KAAA7M,UAAA6b,KAAA7b,EAAA,EAAA,MAAA8b,KAtCVG,sBAACL,GAAA,EAAmB,YAAAvb,GAAO,KAAAQ,GAAW,MAAAgM,GACnCgP,UAAAA;AAAAA,IAAAA;AAAAA,IAGAC;AAAAA,EAAAA,GAmCH,GAAS9b,QAAA4b,GAAA5b,QAAAK,GAAAL,QAAAa,GAAAb,QAAA6M,GAAA7M,QAAA6b,GAAA7b,QAAA8b,GAAA9b,QAAAic,KAAAA,IAAAjc,EAAA,EAAA,GAvCTic;AAuCS;AAjEyB,SAAAxa,GAAAG,GAAA;AAAA,SAEoCA,EAAKK;AAAS;AAFlD,SAAAoJ,GAAAoR,GAAA;AAAA,SAGwC7a,EAAKwF;AAAO;AAHpD,SAAAsU,GAAAgB,GAAA;AAAA,SAIyC9a,EAAK2X;AAAY;AAJ1D,SAAAoC,GAAAgB,GAAA;AAAA,SAKkCC,GAAkBhb,EAAKE,QAAS,SAAS;AAAC;AAL5E,SAAAoa,KAAA;AAAA;ACtD/B,MAAMW,KAA8BC,CAAAA,MAAA;AAAA,QAAA9c,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAA,EAAAF,SAAA8c,KACF5c,IAAA4c,EAAa7b,IAAKQ,EAYvD,GAACzB,OAAA8c,GAAA9c,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAZH,QAAA+c,IAAuC7c;AAYnC,MAAAG;AAAA,EAAAL,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAEgB1J,IAAA;AAAA,IAAA2c,cACJ;AAAA,IAAIC,gBACF;AAAA,IAAIC,iBACH;AAAA,EAAA,GAClBld,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAJDmd,GAAWJ,GAAS1c,CAInB;AAAC;AAnBuC,SAAAoB,GAAA2b,GAAA;AAAA,SACmC;AAAA,IAAAC,QAClED,EAAYC;AAAAA,IAAwCC,UAClD3O,CAAAA,MAAA;AACRA,MAAAA,EAAKsO,eAAAA,GACAG,EAAYG,QAAAA;AAAAA,IAAU;AAAA,IAC5BpX,SACQ;AAAA,MAAAqU,SACE4C,EAAY5C;AAAAA,MAAQwC,cACfI,EAAYJ;AAAAA,MAAaC,gBACvB;AAAA,MAAIC,iBACH;AAAA,IAAA;AAAA,EACnB;AACD;ACQH,MAAMM,KAAqC;AAAA,EACzCC,KAAK;AAAA,EACLC,KAAK;AAAA,EACL/P,SAAS;AAAA,EACTgQ,MAAM;AAAA,EACNC,SAAS;AAAA,EACTC,MAAM;AAAA,EACNC,KAAK;AAAA,EACLxX,QAAQ;AAAA,EACRyX,OAAO;AACT,GAEMC,KAAmCA,CAAC3K,MACxCA,EACGtL,MAAM,GAAG,EACT9G,IAAKgd,CAAAA,MAAS;AACb,QAAMC,IAAUD,EAAKra,KAAAA,GACfua,IAAQX,GAAWU,EAAQzY,YAAAA,CAAa;AAC9C,SAAI0Y,MACAD,EAAQxc,WAAW,IAAUwc,EAAQpa,YAAAA,IAClCoa,EAAQna,MAAM,GAAG,CAAC,EAAED,gBAAgBoa,EAAQna,MAAM,CAAC;AAC5D,CAAC,EACA+G,KAAK,GAAG,GAEAsT,KAA+BA,CAAC/K,MAAuD;AAClG,QAAMgL,IAAQC,GAAmBjL,CAAU,EAAEpS,IAAI+c,EAAgC;AACjF,SAAOK,EAAM3c,WAAW,IAAK2c,EAAM,CAAC,KAAK,KAAMA;AACjD,GAEaE,KAAqCA,CAAC1Z,MAAmD;AACpG,QAAM;AAAA,IAAExD,WAAAA;AAAAA,IAAWiL,UAAAA,IAAW;AAAA,IAAOkS,YAAAA;AAAAA,EAAAA,IAAe3Z,GAC9C4Z,IAAoBD,IAAa,IAAInY,IAAImY,CAAU,IAAI3e;AAE7D,SAAOwB,EAAU8R,YAAYuL,sBAAAA,EAAwB5X,QAAQ,CAACuM,GAAYzB,MAAU;AAClF,UAAMoC,IAASX,EAAWW;AAC1B,QAAIA,EAAO/C,SAAS,WAAW;AAC7B,UAAIwN,KAAqB,CAACA,EAAkBlY,IAAIyN,EAAO9F,SAAS,UAAU,CAAA;AAC1E,YAAMR,IAASrM,EAAUY,SAASiT,WAAWlB,EAAO9F,SAAS;AAC7D,UAAI,CAACR,EAAQ,QAAO,CAAA;AACpB,YAAM8M,IACJ,CAAClO,KACDjL,EAAUY,SAASkS,iBAAiBzG,EAAOC,QAAQtJ,IAAI2P,EAAOpG,IAAI,KAClEvM,EAAUY,SAAS0c,iBAAiBjR,EAAOC,QAAQtJ,IAAI2P,EAAOpG,IAAI;AACpE,aAAO,CACL;AAAA,QACEvJ,IAAIqJ,EAAOC,QAAQtJ;AAAAA,QACnBgZ,QAAQe,GAA6B/K,EAAWA,UAAU;AAAA,QAC1DmH,SAAAA;AAAAA,QACAwC,cAAc;AAAA,QACdO,SAASA,MAAMlc,EAAUud,WAAWC,WAAW7K,CAAM;AAAA,MAAA,CAChB;AAAA,IAE3C;AACA,WAAIyK,IAA0B,CAAA,IACvB,CACL;AAAA,MACEpa,IAAI,wBAAwBuN,CAAK;AAAA,MACjCyL,QAAQe,GAA6B/K,EAAWA,UAAU;AAAA,MAC1DmH,SAAS,CAAClO;AAAAA,MACV0Q,cAAc;AAAA,MACdO,SAASA,MAAMlc,EAAUud,WAAWC,WAAW7K,CAAM;AAAA,IAAA,CAChB;AAAA,EAE3C,CAAC;AACH,GAEa8K,KAAgC/e,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC3C;AAAA,IAAAoB,WAAAA;AAAAA,IAAAiL,UAAAA;AAAAA,IAAAkS,YAAAA;AAAAA,EAAAA,IAA4Cze;AAAM,MAAAG;AAAA,EAAAF,EAAA,CAAA,MAAAwe,KAAAxe,SAAAsM,KAAAtM,EAAA,CAAA,MAAAqB,KACCnB,IAAAA,MACjDqe,GAAmC;AAAA,IAAAld,WAAAA;AAAAA,IAAAiL,UAAAA;AAAAA,IAAAkS,YAAAA;AAAAA,EAAAA,CAAmC,GAACxe,OAAAwe,GAAAxe,OAAAsM,GAAAtM,OAAAqB,GAAArB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AADzE,QAAA,CAAA8c,GAAAiC,CAAA,IAA0C9U,EAAS/J,CAEnD;AAAE,MAAAG,GAAAQ;AAAA,SAAAb,EAAA,CAAA,MAAAwe,KAAAxe,SAAAsM,KAAAtM,EAAA,CAAA,MAAAqB,KACQhB,IAAAA,MAAA;AACR,UAAA2e,IAAgBA,MAAMD,EAAiBR,GAAmC;AAAA,MAAAld,WAAAA;AAAAA,MAAAiL,UAAAA;AAAAA,MAAAkS,YAAAA;AAAAA,IAAAA,CAAmC,CAAC,GAC9GS,IAAsB,CAAC5d,EAAS8R,YAAY3R,OAAQH,EAASa,QAAQV,OAAQH,EAASY,SAAST,KAAM,EAACP,IACpGO,OAAWA,EAAK0d,UAAWF,CAAO,CACpC;AACAA,WAAAA,EAAAA,GACO,MAAA;AACL,iBAAKG,KAAqBF;AAAeE,QAAAA,EAAAA;AAAAA,IAAc;AAAA,EACxD,GACAte,KAACQ,GAAWiL,GAAUkS,CAAU,GAACxe,OAAAwe,GAAAxe,OAAAsM,GAAAtM,OAAAqB,GAAArB,OAAAK,GAAAL,OAAAa,MAAAR,IAAAL,EAAA,CAAA,GAAAa,IAAAb,EAAA,CAAA,IATpCuL,GAAUlL,GASPQ,CAAiC,GACpCgc,GAA4BC,CAAa,GAElC;AAAI,GC7DPsC,KAAuBA,CAC3B/d,GACAa,OACqC;AAAA,EACrC,GAAGb,EAAUa,QAAQmd,SAAAA;AAAAA,EACrB,GAAGhG,GAAqCnX,GAASxC,QAAQ;AAC3D,IAEM4f,KAA6BA,CACjC5R,GACAE,GACAwL,MAEKO,GAAyBP,GAAe1L,EAAOC,QAAQsH,IAAI,IACzDvH,EAAOkM,QAAQC,YAAYjM,CAAI,MAAM,KAD8B,IAItE2R,KAAoB,OAAO1a,MAK3B;AACJ,QAAM;AAAA,IAAEmP,QAAAA;AAAAA,IAAQpG,MAAAA;AAAAA,IAAM1L,SAAAA;AAAAA,IAASb,WAAAA;AAAAA,EAAAA,IAAcwD,GACvC6I,IAASsG,EAAO9F,YAAY7M,EAAUY,SAASiT,WAAWlB,EAAO9F,SAAS,IAAIrO,QAC9E2f,IAAe5R,KAAQoG,EAAOpG;AACpC,SAAOF,IACHrM,EAAUY,SAAS0N,eAAejC,EAAOC,QAAQtJ,IAAImb,GAActd,CAAO,IAC1E8R,EAAOhG,MAAMwR,CAAY;AAC/B,GAEMC,KAAgB,OAAO5a,MAMvB;AACJ,QAAM;AAAA,IAAEmP,QAAAA;AAAAA,IAAQpG,MAAAA;AAAAA,IAAM1L,SAAAA;AAAAA,IAASwd,gBAAAA;AAAAA,IAAgBre,WAAAA;AAAAA,EAAAA,IAAcwD;AAC7D,MAAI;AACF,UAAM0a,GAAkB;AAAA,MAAEvL,QAAAA;AAAAA,MAAQpG,MAAAA;AAAAA,MAAM1L,SAAAA;AAAAA,MAASb,WAAAA;AAAAA,IAAAA,CAAW;AAAA,EAC9D,SAASiM,GAAO;AACdoS,UAAAA,IAAiBpS,CAAK,GAChBA;AAAAA,EACR;AACF,GAEMqS,KAA2BA,CAACte,GAA6C2S,MAAuB;AACpG,MAAKA,EAAO9F;AACZ,WAAO7M,EAAUY,SAASiT,WAAWlB,EAAO9F,SAAS;AACvD,GAEM0R,KAAsBA,CAC1Bve,GACA2S,GACAoF,MACG;AACH,MAAI,CAACO,GAAyBP,GAAepF,EAAOiB,IAAI,EAAG,QAAO;AAElE,QAAMvH,IAASiS,GAAyBte,GAAW2S,CAAM;AACzD,SAAIA,EAAO9F,aAAa,CAACR,IAAe,KAEjCA,IAAS4R,GAA2B5R,GAAQsG,EAAOpG,MAAMwL,CAAa,IAAI;AACnF,GAEMyG,KAAsBA,CAACxe,GAA6C2S,MAAuB;AAC/F,MAAIA,EAAO1H,SAAU,QAAO;AAE5B,QAAMoB,IAASiS,GAAyBte,GAAW2S,CAAM;AACzD,SAAOtG,IAASrM,EAAUY,SAAS0c,iBAAiBjR,EAAOC,QAAQtJ,IAAI2P,EAAOpG,IAAI,IAAI;AACxF,GAEMkS,KAAiBA,CAACjb,MAA+C;AACrE,QAAM;AAAA,IAAErE,MAAAA;AAAAA,IAAMsZ,SAAAA;AAAAA,EAAAA,IAAYjV;AAC1B,SAAIiV,IAEA,gBAAAxZ,EAACsW,GAAA,EAAI,SAAQ,QAAO,IAAG,SAAQ,cAAa,OAAM,GAAE,OAAM,SAAQ,QAAO,YAAW,UAClF,UAAA,gBAAAtW,EAAC,OAAA,EACC,KAAKwZ,GACL,KAAI,IACJ,eAAY,QACZ,OAAO,IACP,QAAQ,IACR,OAAO;AAAA,IAAEiG,SAAS;AAAA,IAASC,OAAO;AAAA,IAAQC,QAAQ;AAAA,IAAQC,WAAW;AAAA,EAAA,GAAY,EAAA,CAErF,IAIG1f,IAAO,gBAAAF,EAACI,GAAA,EAAc,MAAMF,GAAK,IAAMX;AAChD,GAEMsgB,KAAuBA,CAACtb,MAAgE;AAC5F,QAAM;AAAA,IAAE0O,SAAAA;AAAAA,IAAS6M,UAAAA;AAAAA,EAAAA,IAAavb;AAC9B,MAAIub,UAAiB,gBAAA9f,EAACI,GAAA,EAAc,MAAK,gBAAe,MAAM,IAAI,OAAM,WAAA,CAAU;AAClF,MAAI6S,EAAS,QAAO,gBAAAjT,EAACkT,IAAA,EAAgB,SAAAD,EAAA,CAAiB;AAExD,GAEMgH,KAAuB,CAAmCvZ,GAAYwZ,MAAqB;AAC/F,MAAI,CAACA,KAAWxZ,EAAMU,WAAW,EAAG,QAAOV;AAC3C,QAAM,CAACyZ,GAAO,GAAGC,CAAI,IAAI1Z;AACzB,SAAO,CAAC;AAAA,IAAE,GAAGyZ;AAAAA,IAAOE,iBAAiB;AAAA,EAAA,GAAQ,GAAGD,CAAI;AACtD,GAEM2F,KAAqBA,CAAC5V,MAA8BA,MAAU,UAE9D6V,KAA2BA,CAACzb,MAAoC;AACpE,QAAM;AAAA,IAAE3C,SAAAA;AAAAA,IAAS4S,UAAAA;AAAAA,IAAU4K,gBAAAA;AAAAA,IAAgBzL,iBAAAA;AAAAA,IAAiB5S,WAAAA;AAAAA,EAAAA,IAAcwD,GACpEuU,IAAgBgG,GAAqB/d,GAAWa,CAAO,GACvDqe,IAAY,IAAIrN,IAAI7R,EAAU8R,YAAYC,uBAAAA,EAAyBnS,IAAKuf,CAAAA,MAAM,CAACA,EAAEtS,WAAWsS,EAAEnN,UAAU,CAAC,CAAC,GAC1GwH,IAAyC,CAAA,GACzCC,IAAwC,CAAA;AAE9C,aAAW,CAAClJ,GAAOoC,CAAM,KAAK3S,EAAUS,OAAOiT,cAAcD,CAAQ,EAAEjO,WAAW;AAChF,QAAI,CAAC8S,GAAyBP,GAAepF,EAAOiB,IAAI,EAAG;AAE3D,UAAMvH,IAASrM,EAAUY,SAASiT,WAAWlB,EAAO9F,SAAS;AAC7D,QAAI,CAACR,EAAQ;AAEb,UAAME,IAAOoG,EAAOpG;AACpB,QAAI,CAAC0R,GAA2B5R,GAAQE,GAAMwL,CAAa,EAAG;AAE9D,UAAM5Y,IAAOwT,EAAOxT,QAAQkN,EAAOC,QAAQnN,MACrC+S,IAAUgN,EAAUlM,IAAI3G,EAAOC,QAAQtJ,EAAE,GACzC2V,IAAWhG,EAAOgG,aAAa,IAC/B/T,IAAQ+N,EAAO/N,SAASyH,EAAOC,QAAQ1H,OACvCmQ,IACJ3P,GAAqBiH,EAAOC,QAAQjH,MAAM,KAAKuN,IAC3C,MACEA,EAAgB;AAAA,MACdhH,SAAS;AAAA,QACPS,QAAQ;AAAA,UAAEC,SAASD,EAAOC;AAAAA,QAAAA;AAAAA,QAC1B1H,OAAAA;AAAAA,QACA2H,MAAAA;AAAAA,QACA1L,SAAAA;AAAAA,MAAAA;AAAAA,MAEF8L,KAAK,OAAOI,MAAa;AACvB,YAAI;AACF,gBAAM/M,EAAUY,SAAS0N,eAAejC,EAAOC,QAAQtJ,IAAI+J,GAAUlM,CAAO;AAAA,QAC9E,SAASoL,GAAO;AACdoS,gBAAAA,IAAiBpS,CAAK,GAChBA;AAAAA,QACR;AAAA,MACF;AAAA,IAAA,CACD,IACHzN,QACAJ,IAAO;AAAA,MACX4E,IAAI,GAAG2P,EAAO9F,SAAS,IAAI0D,CAAK;AAAA,MAChC3L,OAAAA;AAAAA,MACAiI,WAAW8F,EAAOyM,mBAAmB/S,EAAOC,QAAQtJ;AAAAA,MACpD0G,aAAaiJ,EAAOjJ,eAAe2C,EAAOC,QAAQ5C;AAAAA,MAClDvK,MAAMsf,GAAe;AAAA,QAAEtf,MAAAA;AAAAA,QAAMsZ,SAAS9F,EAAO8F;AAAAA,MAAAA,CAAS;AAAA,MACtD4G,YAAYP,GAAqB;AAAA,QAAEC,UAAUpM,EAAOoM;AAAAA,QAAU7M,SAAAA;AAAAA,MAAAA,CAAS;AAAA,MACvEjH,UAAU0N,KAAY,CAAC3Y,EAAUY,SAAS0c,iBAAiBjR,EAAOC,QAAQtJ,IAAIuJ,CAAI;AAAA,MAClFoM,UAAAA;AAAAA,MACA2G,UAAU3G,IACNna,SACA,MAAM;AACJ,YAAIuW,GAAe;AACjBA,UAAAA,EAAAA;AACA;AAAA,QACF;AACA,QAAK/U,EAAUY,SACZ0N,eAAejC,EAAOC,QAAQtJ,IAAIuJ,GAAM1L,CAAO,EAC/CkJ,MAAOkC,CAAAA,MAAUoS,IAAiBpS,CAAK,CAAC;AAAA,MAC7C;AAAA,IAAA;AAGN,IAAI+S,GAAmBrM,EAAOvJ,KAAK,IACjCqQ,EAAY8F,KAAKnhB,CAAI,IAErBob,EAAa+F,KAAKnhB,CAAI;AAAA,EAE1B;AAEA,SAAO;AAAA,IAAEob,cAAAA;AAAAA,IAAcC,aAAAA;AAAAA,EAAAA;AACzB,GAOM+F,KAA4BA,CAAChc,MAA2C;AAC5E,QAAM;AAAA,IAAEic,SAAAA,IAAU,CAAA;AAAA,IAAI5e,SAAAA;AAAAA,IAASwd,gBAAAA;AAAAA,IAAgBzL,iBAAAA;AAAAA,IAAiB5S,WAAAA;AAAAA,EAAAA,IAAcwD,GACxEuU,IAAgBgG,GAAqB/d,GAAWa,CAAO,GACvDqe,IAAY,IAAIrN,IAAI7R,EAAU8R,YAAYC,uBAAAA,EAAyBnS,IAAKuf,CAAAA,MAAM,CAACA,EAAEtS,WAAWsS,EAAEnN,UAAU,CAAC,CAAC,GAC1GrS,IAAkC,CAAA;AAExC,aAAWgT,KAAU8M,GAAS;AAC5B,QAAI,CAAClB,GAAoBve,GAAW2S,GAAQoF,CAAa,EAAG;AAE5D,UAAM1L,IAASiS,GAAyBte,GAAW2S,CAAM,GACnD/N,IAAQ+N,EAAO/N,SAASyH,GAAQC,QAAQ1H;AAC9C,QAAI,CAACA,EAAO;AAEZ,UAAMzF,IAAOwT,EAAOxT,QAAQkN,GAAQC,QAAQnN,MACtC8L,IAAW,CAACuT,GAAoBxe,GAAW2S,CAAM,GACjDT,IAAUS,EAAO9F,YAAYqS,EAAUlM,IAAIL,EAAO9F,SAAS,IAAIrO,QAC/DuW,IACJ3P,GAAqBuN,EAAOtN,MAAM,KAAKuN,IACnC,MACEA,EAAgB;AAAA,MACdhH,SAAS;AAAA,QACPS,QAAQ;AAAA,UAAEC,SAAS;AAAA,YAAEtJ,IAAI2P,EAAO9F,aAAa8F,EAAO3P;AAAAA,YAAI4B,OAAAA;AAAAA,YAAOS,QAAQsN,EAAOtN;AAAAA,UAAAA;AAAAA,QAAO;AAAA,QACrFT,OAAAA;AAAAA,QACAqJ,aAAa0E,EAAO1E;AAAAA,QACpB1B,MAAMoG,EAAOpG;AAAAA,QACb1L,SAAAA;AAAAA,MAAAA;AAAAA,MAEF8L,KAAMJ,OAAS6R,GAAc;AAAA,QAAEzL,QAAAA;AAAAA,QAAQpG,MAAAA;AAAAA,QAAM1L,SAAAA;AAAAA,QAASb,WAAAA;AAAAA,QAAWqe,gBAAAA;AAAAA,MAAAA,CAAgB;AAAA,IAAA,CAClF,IACH7f;AACNmB,IAAAA,EAAM4f,KAAK;AAAA,MACTvc,IAAI2P,EAAO3P;AAAAA,MACX4B,OAAAA;AAAAA,MACAiI,WAAWR,GAAQC,QAAQtJ,MAAM2P,EAAO9F;AAAAA,MACxC1N,MAAMA,IAAO,gBAAAF,EAACI,GAAA,EAAc,MAAMF,GAAK,IAAMX;AAAAA,MAC7C6gB,YAAYnN,IAAU,gBAAAjT,EAACkT,IAAA,EAAgB,SAAAD,GAAiB,IAAM1T;AAAAA,MAC9DyM,UAAAA;AAAAA,MACAqU,UAAUA,MAAM;AACd,YAAIrU,CAAAA,GACJ;AAAA,cAAI8J,GAAe;AACjBA,YAAAA,EAAAA;AACA;AAAA,UACF;AACA,UAAKqJ,GAAc;AAAA,YAAEzL,QAAAA;AAAAA,YAAQ9R,SAAAA;AAAAA,YAASb,WAAAA;AAAAA,YAAWqe,gBAAAA;AAAAA,UAAAA,CAAgB,EAAEtU,MAAM,MAAA;AAAA,WAAe;AAAA;AAAA,MAC1F;AAAA,IAAA,CACD;AAAA,EACH;AAEA,SAAOpK;AACT,GAEa+f,KAA6BA,CAAClc,MAA2C;AACpF,QAAMmc,IAAcH,GAA0Bhc,CAAK,GAC7C;AAAA,IAAEgW,cAAAA;AAAAA,IAAcC,aAAAA;AAAAA,EAAAA,IAAgBjW,EAAMiQ,WACxCwL,GAAyB;AAAA,IAAE,GAAGzb;AAAAA,IAAOiQ,UAAUjQ,EAAMiQ;AAAAA,EAAAA,CAAU,IAC/D;AAAA,IAAE+F,cAAc,CAAA;AAAA,IAAIC,aAAa,CAAA;AAAA,EAAA,GAC/BmG,IAAsB,CAAC,GAAGD,GAAa,GAAGnG,CAAY;AAE5D,SAAO,CAAC,GAAGoG,GAAqB,GAAG1G,GAAqBO,GAAamG,EAAoBvf,SAAS,CAAC,CAAC;AACtG,GAEawf,KAAwBA,CAACrc,MAAsC;AAC1E,QAAM;AAAA,IAAEic,SAAAA,IAAU,CAAA;AAAA,IAAI5e,SAAAA;AAAAA,IAASwd,gBAAAA;AAAAA,IAAgBzL,iBAAAA;AAAAA,IAAiB5S,WAAAA;AAAAA,EAAAA,IAAcwD,GACxEuU,IAAgBgG,GAAqB/d,GAAWa,CAAO,GACvDqe,IAAY,IAAIrN,IAAI7R,EAAU8R,YAAYC,uBAAAA,EAAyBnS,IAAKuf,CAAAA,MAAM,CAACA,EAAEtS,WAAWsS,EAAEnN,UAAU,CAAC,CAAC,GAC1GrS,IAA0B,CAAA;AAEhC,aAAWgT,KAAU8M,GAAS;AAC5B,QAAI,CAAClB,GAAoBve,GAAW2S,GAAQoF,CAAa,KAAK,CAACyG,GAAoBxe,GAAW2S,CAAM,EAAG;AAEvG,UAAMtG,IAASiS,GAAyBte,GAAW2S,CAAM,GACnD/N,IAAQ+N,EAAO/N,SAASyH,GAAQC,QAAQ1H;AAC9C,QAAI,CAACA,EAAO;AAEZ,UAAMzF,IAAOwT,EAAOxT,QAAQkN,GAAQC,QAAQnN,MACtC+S,IAAUS,EAAO9F,YAAYqS,EAAUlM,IAAIL,EAAO9F,SAAS,IAAIrO,QAC/DuW,IACJ3P,GAAqBuN,EAAOtN,MAAM,KAAKuN,IACnC,MACEA,EAAgB;AAAA,MACdhH,SAAS;AAAA,QACPS,QAAQ;AAAA,UAAEC,SAAS;AAAA,YAAEtJ,IAAI2P,EAAO9F,aAAa8F,EAAO3P;AAAAA,YAAI4B,OAAAA;AAAAA,YAAOS,QAAQsN,EAAOtN;AAAAA,UAAAA;AAAAA,QAAO;AAAA,QACrFT,OAAAA;AAAAA,QACAqJ,aAAa0E,EAAO1E;AAAAA,QACpB1B,MAAMoG,EAAOpG;AAAAA,QACb1L,SAAAA;AAAAA,MAAAA;AAAAA,MAEF8L,KAAMJ,OAAS6R,GAAc;AAAA,QAAEzL,QAAAA;AAAAA,QAAQpG,MAAAA;AAAAA,QAAM1L,SAAAA;AAAAA,QAASb,WAAAA;AAAAA,QAAWqe,gBAAAA;AAAAA,MAAAA,CAAgB;AAAA,IAAA,CAClF,IACH7f;AACNmB,IAAAA,EAAM4f,KAAK;AAAA,MACTvc,IAAI2P,EAAO3P;AAAAA,MACX4B,OAAAA;AAAAA,MACAzF,MAAMA,IAAO,gBAAAF,EAACI,GAAA,EAAc,MAAMF,GAAK,IAAMX;AAAAA,MAC7CshB,SAAS5N,IACP,gBAAA7E,EAAC5N,IAAA,EAAO,KAAI,KACV,UAAA;AAAA,QAAA,gBAAAR,EAACG,MAAMwF,UAAAA,EAAAA,CAAM;AAAA,QACb,gBAAA3F,EAACkT,MAAgB,SAAAD,EAAA,CAAiB;AAAA,MAAA,EAAA,CACpC,IACE1T;AAAAA,MACJ8gB,UAAUA,MAAM;AACd,YAAIvK,GAAe;AACjBA,UAAAA,EAAAA;AACA;AAAA,QACF;AACA,QAAKqJ,GAAc;AAAA,UAAEzL,QAAAA;AAAAA,UAAQ9R,SAAAA;AAAAA,UAASb,WAAAA;AAAAA,UAAWqe,gBAAAA;AAAAA,QAAAA,CAAgB,EAAEtU,MAAM,MAAA;AAAA,SAAe;AAAA,MAC1F;AAAA,IAAA,CACD;AAAA,EACH;AAEA,SAAOpK;AACT,GC9UMogB,KAA0BA,CAAC3hB,OAAyD;AAAA,EACxFkG,KAAKlG,EAAK4E;AAAAA,EACV4B,OAAOxG,EAAKwG;AAAAA,EACZiI,WAAWzO,EAAKyO;AAAAA,EAChB1N,MAAM,OAAOf,EAAKe,QAAS,aAAa,gBAAAF,EAAC+gB,IAAA,EAAK,IAAI5hB,EAAKe,MAAM,SAAQ,OAAA,CAAM,IAAMf,EAAKe;AAAAA,EACtFkgB,YAAYjhB,EAAKihB;AAAAA,EACjBY,YAAY7hB,EAAK6M;AAAAA,EACjBqO,iBAAiBlb,EAAKkb;AAAAA,EACtBxZ,SAASA,MAAM1B,EAAKkhB,WAAAA;AACtB,IACaY,KAAiCA,CAAClgB,GAA6C3B,MAC1FqhB,GAA2B;AAAA,EACzBjM,UAAU0M,GAAwB9hB,EAASU,IAAI;AAAA,EAC/CiB,WAAAA;AAAAA,EACAa,SAAS;AAAA,IAAExC,UAAAA;AAAAA,EAAAA;AAAAA,EACXuU,iBAAiBA,CAAC;AAAA,IAAEhH,SAAAA;AAAAA,EAAAA,MAAc5L,EAAUoU,eAAeW,cAAcnJ,CAAO;AAClF,CAAC,EAAEhM,IAAImgB,EAAuB,GACnBK,KAAqCpgB,CAAAA,MAAA;AAAA,QAAArB,IAAAC,EAAA,CAAA;AAChDqB,EAAAA,EAAkBD,EAASY,SAAST,OAAQC,EAAyB,GACrEH,EAAkBD,EAASa,QAAQV,OAAQ6J,EAAuB,GAClE/J,EAAkBD,EAASS,OAAOqY,WAAYuB,EAA4B;AAAC,MAAAxb;AAAA,SAAAF,SAAAqB,KACpEnB,IAAAR,CAAAA,MAA2B6hB,GAA+BlgB,GAAW3B,CAAQ,GAACM,OAAAqB,GAAArB,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAA9EE;AAA8E;AAJrC,SAAAuB,GAAAG,GAAA;AAAA,SACOA,EAAKK;AAAS;AADrB,SAAAoJ,GAAAoR,GAAA;AAAA,SAEM7a,EAAKwF;AAAO;AAFlB,SAAAsU,GAAAgB,GAAA;AAAA,SAGS9a,EAAK2X;AAAY;AChB5E,MAAMmI,KAA4BA,CAAC7c,MAA6E;AAC9G,QAAM;AAAA,IAAEmP,QAAAA;AAAAA,IAAQ3S,WAAAA;AAAAA,EAAAA,IAAcwD;AAC9B,EAAKxD,EAAUY,SAAS0N,eAAeqE,EAAO9F,WAAW8F,EAAOpG,IAAI,EAAExC,MAAM,MAAA;AAAA,GAAe;AAC7F,GAEauW,KAA4B5hB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GACvC;AAAA,IAAAoB,WAAAA;AAAAA,EAAAA,IAAsBtB;AAAM,MAAAG;AAAA,EAAAF,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACQ7J,wBAAImG,IAAAA,GAAarG,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAArD,QAAA4hB,IAA6BlM,GAAOxV,CAAiB;AAAE,MAAAG,GAAAQ;AAAA,SAAAb,SAAAqB,KAE7ChB,IAAAA,MAAA;AACR,UAAAwhB,IAAyBC,CAAAA,MAAA;AACvB,YAAA9N,IAAe8N,EAAYhB,UAAa,CAAA,GACxCiB,IAAoB/N,IAAA;AAAA,QAAA/N,OAEP+N,EAAMpT;AAAAA,QAAMO,SACVA,MAAMugB,GAA0B;AAAA,UAAA1N,QAAAA;AAAAA,UAAA3S,WAAAA;AAAAA,QAAAA,CAAqB;AAAA,MAAA,IAHhDxB,QAMpBmiB,IAAqB;AAAA,QAAA3d,IACfyd,EAAYzd;AAAAA,QAAGjE,MACb0hB,EAAYhO;AAAAA,QAAMlT,OACjBkhB,EAAYlhB;AAAAA,QAAMmK,aACZ+W,EAAYxT;AAAAA,QAAQ0F,QACzB+N;AAAAA,QAAW9R,UACT;AAAA,QAAIgS,gBACExT,CAAAA,MAAA;AACd,UAAIA,EAAO7O,WAAY,eAAayB,EAASuS,cAAcsO,QAASJ,EAAYzd,EAAG;AAAA,QAAE;AAAA,MAAA;AAIzF,UAAIud,EAAoB7T,QAAQxH,IAAKub,EAAYzd,EAAG,GAAC;AACnD8d,QAAAA,GAAOC,OAAQN,EAAYzd,IAAK2d,CAAY;AAAC;AAAA,MAAA;AAI/CJ,MAAAA,EAAoB7T,QAAQvH,IAAKsb,EAAYzd,EAAG,GAChD8d,GAAOE,OAAQL,CAAY;AAAA,IAAC;AAG9B,eAAKM,KAAsBjhB,EAASuS,cAAc2O,kBAAAA;AAAsBV,MAAAA,EAAiBC,CAAY;AAErG,UAAAU,IAAqBnhB,EAASuS,cAAcsL,UAAWvQ,CAAAA,MAAA;AACrD,UAAIA,EAAKvO,SAAU,QAAM;AACvByhB,QAAAA,EAAiBlT,EAAKmT,YAAa;AAAC;AAAA,MAAA;AAItCF,MAAAA,EAAoB7T,QAAQ0U,OAAQ9T,EAAKtK,EAAG,GAC5C8d,GAAOD,QAASvT,EAAKtK,EAAG;AAAA,IAAC,CAC1B;AAAE,WAEI,MAAA;AACLme,MAAAA,EAAYE,QAAAA;AACZ,iBAAKre,KAAYud,EAAoB7T;AAAUoU,QAAAA,GAAOD,QAAS7d,CAAE;AACjEud,MAAAA,EAAoB7T,QAAQ4U,MAAAA;AAAAA,IAAQ;AAAA,EACrC,GACA9hB,IAAA,CAACQ,CAAS,GAACrB,OAAAqB,GAAArB,OAAAK,GAAAL,OAAAa,MAAAR,IAAAL,EAAA,CAAA,GAAAa,IAAAb,EAAA,CAAA,IA/CduL,GAAUlL,GA+CPQ,CAAW,GAEP;AAAI,GClEA+hB,KAA+BvhB,CAAAA,MAC1CC,EAAkBD,EAASwhB,MAAMrhB,OAAQC,EAAmC,GAEjEqhB,KAA2BzhB,CAAAA,MACtCC,EAAkBD,EAASU,MAAMP,OAAQ6J,EAA6B;AAJ5B,SAAA5J,GAAAG,GAAA;AAAA,SACUA,EAAKmhB,UAAmBrjB;AAAA;AAEtC,SAAA2L,GAAAzJ,GAAA;AAAA,SACcA,EAAKI;AAAa;ACgBxE,MAAMghB,KAA0BjjB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC9B;AAAA,IAAAgG,OAAAA;AAAAA,EAAAA,IAAkBlG;AAAM,MAAAG;AAAA,EAAAF,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAIpB7J,IAAA,gBAAAI,EAACI,GAAA,EAAmB,MAAA,gBAAqB,MAAA,IAAE,GAAIV,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,SAAAL,SAAAiG,KADjD5F,IAAA,gBAAAC,EAAC2iB,IAAA,EAAS,GAAA,QAAS,GAAA,QAAa,OAAA,YAAa,GAAA,MAAiBhd,cAAAA,GAC5D/F,UAAAA,GACF,GAASF,OAAAiG,GAAAjG,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAFTK;AAES,GAIP6iB,KAA+BnjB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GACnC;AAAA,IAAA8X,UAAAA;AAAAA,EAAAA,IAAqBhY;AAAM,MAAAG;AAAA,SAAAF,SAAA+X,KAGzB7X,IAAA,gBAAAI,EAACsW,GAAA,EAAS,MAAA,KAAS,MAAA,KAAS,MAAA,KAAM,GAAA,QAAS,GAAA,QAAgB,UAAA,UACxDmB,UAAAA,GACH,GAAM/X,OAAA+X,GAAA/X,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAFNE;AAEM,GAIJijB,KAAcA,MAAAA;AAAAA,GAEdC,KAAgBA,CAACve,MAKjB;AACJ,MAAIA,EAAM8D;AACR,WAAO;AAAA,MACLtE,IAAIQ,EAAMwe,UAAUC;AAAAA,MACpB1iB,OAAOiE,EAAMwe,UAAUziB,SAASiE,EAAM8D,KAAK/H;AAAAA,MAC3CJ,MAAMqE,EAAM8D,KAAKnI;AAAAA,MACjB+C,QAAQsB,EAAMtB,UAAUsB,EAAM7B,QAAQO,UAAU;AAAA,MAChDggB,YAAY1e,EAAM8D,KAAKtE;AAAAA,IAAAA;AAG3B,MAAIQ,EAAM7B;AACR,WAAI,eAAe6B,EAAM7B,SAAewgB,GAAoB3e,EAAM7B,MAAsC,IACjG6B,EAAM7B;AAGjB,GAEaygB,KAAsB1jB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GACjC;AAAA,IAAAoB,WAAAA;AAAAA,IAAAgiB,WAAAA;AAAAA,EAAAA,IAAiCtjB,GACjCiD,IAAejD,EAAKiD,UAAW3B,EAASS,OAAO4hB,UAAWL,EAASC,cAAe,GAClF3a,IAAa0a,EAASM,SAAUtiB,EAASuiB,MAAMC,QAASR,EAASM,MAAmB,IAAvE9jB,QACb0jB,IAAmB5a,GAAItE,MAAQrB,GAAMugB,cAAlB;AAAqC,MAAArjB;AAAA,EAAAF,SAAAqB,KAGtDnB,IAAA4jB,EAAsBziB,CAAS,GAACrB,OAAAqB,GAAArB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAGlC,QAAA+jB,IAJ0BziB,EACxBpB,EAAgCsB,OAChCI,OAAWA,EAAKoiB,UAAWT,CAAU,CACvC,KACsCO,EAAsBziB,CAAS,EAAC4iB,YAAaV,CAAU;AAAE,MAAAljB;AAG/F,MAH+FL,SAAAqB,KAC7EhB,IAAAyjB,EAAsBziB,CAAS,GAACrB,OAAAqB,GAAArB,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAAlDsB,EAAkBjB,EAAgCmB,OAAQib,CAAAA,MAAW7a,EAAKsiB,YAAaX,CAAU,KAA5B,CAAkC,GAEnG,CAACvgB,KAAD,CAAY2F,GAAI;AAAA,QAAA9H;AAAA,WAAAb,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACXlJ,sBAACmiB,IAAA,EAA8B,OAAA,+CAAA,CAA8C,GAAGhjB,OAAAa,KAAAA,IAAAb,EAAA,CAAA,GAAhFa;AAAAA,EAAgF;AAEzF,QAAA6B,IAAc0gB,GAAc;AAAA,IAAAC,WAAAA;AAAAA,IAAA9f,QAAqBxD,EAAKwD;AAAAA,IAAOoF,MAAAA;AAAAA,IAAA3F,QAAAA;AAAAA,EAAAA,CAAgB;AAC7E,MAAI,CAACN,GAAK;AAAA,QAAA7B;AAAA,WAAAb,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAASlJ,sBAACmiB,IAAA,EAA8B,OAAA,6CAAA,CAA4C,GAAGhjB,OAAAa,KAAAA,IAAAb,EAAA,CAAA,GAA9Ea;AAAAA,EAA8E;AACjG,QAAAsjB,IAAiBC,GAAgBf,CAAS,GAKvCzH,IAAAhF,GAAY/V,IAAA,QAAYgM,IAAA,YAAgBgP,IAAA,KAASC,IAAA,KAAMC,IAAA,QAAgBE,IAAA,UACrEE,IAAA4H,IACC,gBAAAzjB,EAAC4iB,IAAA,EACEa,YAAQM,OAAQ;AAAA,IAAAhjB,WAAAA;AAAAA,IAAAqB,OAAAA;AAAAA,IAAAyhB,UAAAA;AAAAA,IAAAnF,SArBTmE;AAAAA,EAAAA,CAqBgD,GAC1D,IAEA,gBAAA7iB,EAAC0iB,MAA+B,qCAA8BO,CAAU,KAAG;AAC5E,MAAAe;AAAA,SAAAtkB,EAAA,CAAA,MAAA4b,KAAA5b,SAAAmc,KAPHmI,IAAA,gBAAAhkB,EAACsb,GAAA,EAAY,SAAA/a,GAAY,MAAAgM,GAAgB,MAAAgP,GAAS,MAAAC,GAAM,GAAAC,GAAgB,UAAAE,GACrEE,UAAAA,GAOH,GAAMnc,OAAA4b,GAAA5b,OAAAmc,GAAAnc,OAAAskB,KAAAA,IAAAtkB,EAAA,CAAA,GARNskB;AAQM,GC7FGC,KAAgBA,CAAAljB,GAAAkC,MAAA;AAAA,QAAAvD,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAA,SAAAF,SAAAuD,KACcrD,IAAA0B,CAAAA,MAAA;AACvC,UAAAsH,IAAatH,EAAKI,eAAgBJ,EAAKG,MAAOH,EAAKI,YAAa,IAAnDnC;AACb,QAAI0D,EAAAA,MAAW,SAASA,MAAW,aAAaA,MAAW,cAAcA,MAAW;AAA2B,aACxG2F,GAAIsb,SAAWjhB,CAAM;AAAA,EAAC,GAC9BvD,OAAAuD,GAAAvD,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAJDsB,EAAkBD,EAASU,MAAMP,OAAQtB,CAIxC;AAAC,GAESukB,KAAiB1kB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC5B;AAAA,IAAAoB,WAAAA;AAAAA,IAAAsiB,QAAAA;AAAAA,IAAApgB,QAAAA;AAAAA,EAAAA,IAAsCxD;AAAM,MAAAG;AAAA,EAAAF,SAAA2jB,KAQzBzjB,IAAA;AAAA,IAAAwkB,UAAYf;AAAAA,IAAML,gBAAkBK;AAAAA,IAAMA,QAAAA;AAAAA,IAAA1T,UAAoB;AAAA,EAAA,GAAOjQ,OAAA2jB,GAAA3jB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,SAAAL,EAAA,CAAA,MAAAuD,KAAAvD,EAAA,CAAA,MAAAE,KAAAF,EAAA,CAAA,MAAA2jB,KAAA3jB,SAAAqB,KANtFhB,IAAA,gBAAAC,EAACsW,GAAA,EAAM,GAAA,QAAS,GAAA,QAAY,MAAA,KAAa,UAAA,YACvC,UAAA,gBAAAtW,EAACsW,GAAA,EAAa,UAAA,YAAiB,OAAA,KAAY,SAAA,QACzC,UAAA,gBAAAtW,EAACmjB,IAAA,EAEYpiB,WAAAA,GACHkC,QAAAA,GACG,WAAArD,EAAAA,GAHNyjB,CAG2E,EAAA,CAEpF,GACF,GAAM3jB,OAAAuD,GAAAvD,OAAAE,GAAAF,OAAA2jB,GAAA3jB,OAAAqB,GAAArB,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GATNK;AASM,GCUJskB,yBAA8Bte,IAAuB,CACzD,OACA,eACA,oBACA,eACA,QAAQ,CACT,GAEKue,KAAqB,IAAIve,IAC7BO,OAAOQ,OAAOyd,EAAyB,EAAE/d,QAASge,CAAAA,MAAYle,OAAOQ,OAAO0d,CAAO,CAAC,CACtF,GACMC,yBAAyB1e,IAAuB,CAAC,QAAQ,eAAe,kBAAkB,iBAAiB,CAAC,GAI5G2e,KAAuB;AAAA,EAAEjF,SAAS;AAAA,EAAQkF,eAAe;AAAA,EAAU/N,MAAM;AAAA,EAAQL,UAAU;AAAW,GAItGqO,KAAyB;AAAA,EAC7BnF,SAAS;AAAA,EACThJ,YAAY;AAAA,EACZE,GAAG;AAAA,EACHC,MAAM;AAAA,EACNL,UAAU;AACZ,GAEMsO,KAAqBA,CAACC,GAAqCC,MAC/DD,EAAQjK,KAAMkI,CAAAA,MAAcA,EAAUqB,aAAaW,CAAc,KAAKD,EAAQ,CAAC,GAEpEE,KAAkCA,CAC7CF,GACAC,GACA9hB,MAC+B;AAC/B,MAAIA,MAAW,UAAW,QAAO6hB;AACjC,QAAMG,IAAkBJ,GAAmBC,GAASC,CAAc;AAClE,SAAKE,IACEH,EAAQngB,OACZoe,CAAAA,MAAcA,EAAUqB,aAAaa,EAAgBb,YAAYrB,EAAUmC,kBAAkB,cAChG,IAH6B,CAAA;AAI/B,GAEaC,KAAoCA,CAC/CpC,GACAgC,GACA9hB,MACG;AACH,QAAMmiB,IAASrC,EAAUqB,aAAaW,GAChCM,IAAWpiB,MAAW;AAC5B,SAAO;AAAA,IACLmiB,QAAAA;AAAAA,IACA3F,SAAS;AAAA,IACT6F,eAAeF,KAAUC,IAAW,SAAS;AAAA,IAC7C9O,UAAU6O,KAAUC,IAAW,aAAa;AAAA,IAC5CE,YAAYH,KAAUC,IAAW,YAAY;AAAA,EAAA;AAEjD,GAEMG,KAA6BA,CAAC9Z,OAA8E;AAAA,EAChH0Y,UAAU1Y,EAAY3H;AAAAA,EACtBif,gBAAgBtX,EAAY3H;AAAAA,EAC5BzD,OAAOoL,EAAYpL;AAAAA,EACnBqP,UAAU;AACZ,IAUM8V,KAA2BhmB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC/B;AAAA,IAAAoB,WAAAA;AAAAA,IAAAgiB,WAAAA;AAAAA,IAAAgC,gBAAAA;AAAAA,IAAAW,sBAAAA;AAAAA,IAAAziB,QAAAA;AAAAA,EAAAA,IAA+ExD;AAAM,MAAAG;AAAA,EAAAF,EAAA,CAAA,MAAAqlB,KAAArlB,SAAAqjB,KAAArjB,EAAA,CAAA,MAAAuD,KACjErD,IAAAulB,GAAkCpC,GAAWgC,GAAgB9hB,CAAM,GAACvD,OAAAqlB,GAAArlB,OAAAqjB,GAAArjB,OAAAuD,GAAAvD,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAxF,QAAAimB,IAAoB/lB,GACpBylB,IAAiBpiB,MAAW,WAC5B2iB,IAAgC,CAACD,EAAWP,UAAZ,CAAwBC;AACpDQ,MAAAA;AACJ,EAAIR,IAAUQ,IAAOA,UACZF,EAAWP,WAASS,IAAOA;AAAW,MAAA9lB;AAAA,EAAAL,EAAA,CAAA,MAAAgmB,KAAAhmB,SAAAqjB,KAAArjB,EAAA,CAAA,MAAAqB,KAErBhB,IAAAA,MAAA;AACxB,IAAIgjB,EAASqB,aAAcsB,KAAsB3kB,EAASS,OAAOskB,cAAe/C,EAASqB,QAAS;AAAA,EAAE,GACrG1kB,OAAAgmB,GAAAhmB,OAAAqjB,GAAArjB,OAAAqB,GAAArB,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAFD,QAAAqmB,IAA0BhmB,GAQnBQ,IAAAqlB,IAAA,SAAArmB,QACIgN,IAAAqZ,IAAA,MAAArmB,QAGQgc,IAAA8J,IAAAU,IAAAxmB,QACCic,IAAA6J,IAAAU,IAAAxmB;AAAwC,MAAAkc;AAAA,EAAA/b,EAAA,CAAA,MAAAqjB,KAAArjB,SAAAqB,KAOxD0a,IAAA,gBAAAzb,EAACmjB,IAAA,EAA+BpiB,WAAAA,GAAsBgiB,WAAAA,EAAAA,CAAS,GAAIrjB,OAAAqjB,GAAArjB,OAAAqB,GAAArB,QAAA+b,KAAAA,IAAA/b,EAAA,EAAA;AAAA,MAAAic;AAAA,SAAAjc,UAAAmmB,KAAAnmB,EAAA,EAAA,MAAAimB,EAAAlG,WAAA/f,EAAA,EAAA,MAAAimB,EAAAL,iBAAA5lB,EAAA,EAAA,MAAAimB,EAAApP,YAAA7W,UAAAimB,EAAAJ,cAAA7lB,UAAAa,KAAAb,EAAA,EAAA,MAAA6M,KAAA7M,EAAA,EAAA,MAAA6b,KAAA7b,UAAA8b,KAAA9b,EAAA,EAAA,MAAA+b,KAfrEE,sBAACrF,GAAA,EACU,SAAAqP,EAAWlG,SACdoG,MAAAA,GACH,GAAAtlB,GACI,OAAAgM,GACF,MAAA,KACA,MAAA,KACU,eAAAgP,GACC,gBAAAC,GACP,UAAA,UACM,eAAAmK,EAAWL,eAChB,UAAAK,EAAWpP,UACT,YAAAoP,EAAWJ,YACrB,GAAA,QAEF9J,UAAAA,GACF,GAAM/b,QAAAmmB,GAAAnmB,EAAA,EAAA,IAAAimB,EAAAlG,SAAA/f,EAAA,EAAA,IAAAimB,EAAAL,eAAA5lB,EAAA,EAAA,IAAAimB,EAAApP,UAAA7W,EAAA,EAAA,IAAAimB,EAAAJ,YAAA7lB,QAAAa,GAAAb,QAAA6M,GAAA7M,QAAA6b,GAAA7b,QAAA8b,GAAA9b,QAAA+b,GAAA/b,QAAAic,KAAAA,IAAAjc,EAAA,EAAA,GAhBNic;AAgBM,GAIGqK,KAAkBvmB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC7B;AAAA,IAAAoB,WAAAA;AAAAA,IAAAkC,QAAAA;AAAAA,IAAA3C,OAAAA;AAAAA,IAAAglB,eAAA1lB;AAAAA,IAAAqmB,aAAAlmB;AAAAA,EAAAA,IAAkFN,GAAhD6lB,IAAA1lB,MAAAL,SAAA,SAAAK,GAAwBqmB,IAAAlmB,MAAAR,SAAA,KAAAQ,GAC1DmkB,IAAeD,GAAcljB,GAAWkC,CAAM,GAC9CijB,IAAyB5D,GAA6BvhB,CAAS,GAC/DolB,IAAe3D,GAAyBzhB,CAAS,GACjDS,IAAeR,EAAkBD,EAASS,OAAON,OAAQC,EAAuB,GAChFilB,IAA2B5kB,EAAMgjB,QAASvhB,CAAM,GAChDojB,IAA0BrlB,EAAkBD,EAASS,OAAON,OAAQ6J,EAAwB,GAC5Fub,IAAuBhC,GAAkBre,IAAKhD,CAOlC,IANRsjB,GACE/kB,GACAglB,GAA+BvjB,CAAkC,GACjEijB,GACA;AAAA,IAAAO,wBAA0BhC,GAAkBxe,IAAKhD,CAAM;AAAA,EAAA,CAEjD,IAPW1D,QAQvBmnB,IAA4BC,GAAgCnlB,CAAM,GAClEolB,IAAoB;AAAA,IAAA,GACfR;AAAAA,IAAkBtB,SACZsB,EAAkBtB,QAAQngB,OAAQoe,CAAAA,OAAA;AACzC,YAAAvS,KAAqB6V,EAAkBtD,GAASC,cAAe;AAAE,aAC1DxS,MACFiU,GAAkBxe,IAAKhD,CAInB,IAHD4jB,GAAgCrW,IAAc2V,CAG7C,IAFDW,GAAiCtW,IAAc0V,GAAkBC,GAAQpD,IAAW;AAAA,QAAAN,UACxEiE;AAAAA,MAAAA,CACX,MACHK,GAA+BvW,IAAc;AAAA,QAAAwW,eAC5BN;AAAAA,QAAmBO,UACxBX;AAAAA,MAAAA,CACX,IATA;AAAA,IAUE,CACV;AAAA,EAAA,GAEHZ,IAA6B1kB,EAAkBD,EAASS,OAAON,OAAQka,EAAsC,GAC7G6J,IAAwBJ,GAAmB+B,EAAW9B,SAAU8B,EAAW7B,cAAe,GAC1FrZ,IAAoBuZ,IAAA1lB,SAA8BwB,EAASS,OAAO0lB,eAAgBjkB,CAAM,GACxFkkB,IAAkBlC,MAAoBvZ,IAAc8Z,GAA2B9Z,CAAuB,IAAhEnM,SACtC6nB,IAA2BnC,IACvBD,GAAgC4B,EAAW9B,SAAUG,EAAeb,UAAWnhB,CAC9E,IAFsB,CAAA;AAI3B,MAAIihB,MAAW;AAAK,WAAS;AAC7B,MAAIA,GAAM;AAAA,QAAA3jB;AAAA,WAAAb,EAAA,CAAA,MAAAwkB,KAAAxkB,SAAAuD,KAAAvD,EAAA,CAAA,MAAAqB,KAASR,uBAAC4jB,IAAA,EAA0BpjB,WAAAA,GAAmBkC,QAAAA,GAAgBihB,QAAAA,GAAM,GAAIxkB,OAAAwkB,GAAAxkB,OAAAuD,GAAAvD,OAAAqB,GAAArB,OAAAa,MAAAA,KAAAb,EAAA,CAAA,GAAxEa;AAAAA,EAAwE;AAC3F,MAAI,CAACwiB;AAAS,WAAS;AAAK,MAAAxiB;AAAA,EAAAb,SAAAuD,KAEA1C,IAAA8jB,GAAuBpe,IAAKhD,CAAM,GAACvD,OAAAuD,GAAAvD,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAA/D,QAAA2nB,IAA4B9mB;AAAoC,MAAAgM;AAAA,EAAA7M,SAAAgmB,KAAAhmB,EAAA,CAAA,MAAAqB,EAAAS,UAMtC+K,IAAA2L,CAAAA,OAAA;AACxB,IAAIA,MAAUA,GAAMkM,aAAcsB,KAChC3kB,EAASS,OAAOskB,cAAe5N,GAAMkM,QAAS;AAAA,EAC/C,GACF1kB,OAAAgmB,GAAAhmB,EAAA,CAAA,IAAAqB,EAAAS,QAAA9B,OAAA6M,KAAAA,IAAA7M,EAAA,CAAA;AAJD,QAAAqmB,IAA0BxZ,GAK1B8Y,IAAiBpiB,MAAW,WAGzBqY,IAAAgM,IACI/L,IAAA,WACOC,IAAA,UACRC,IAAA,QACGE,IAAA,KACAE,IAAA,KACHmI,IAAA;AAAM,MAAAuD;AAAA,EAAA7nB,EAAA,CAAA,MAAAuD,KAAAvD,UAAAumB,KACJsB,IAAAtB,IAAA,gBAA8BjjB,GAA6BC,CAAM,GAACvD,OAAAuD,GAAAvD,QAAAumB,GAAAvmB,QAAA6nB,KAAAA,IAAA7nB,EAAA,EAAA;AAC7D,QAAA8nB,IAAA,UAEGC,IAAAnnB,KAAA2C,GACGykB,KAAArC,IAAA9lB,SAAA,MAA6BwmB,EAAkBd,CAAe,GAC7D0C,KAAAtC,IAAA9lB,SAAA,MAA6BwmB,EAAkBd,CAAe,GAI7E2C,IAAAnZ,IACMoZ,IAAA,KACAC,KAAA,KACAC,KAAA,KACHC,IAAA,QACGC,KAAA,MACkBC,MAACb;AAAmB,MAAAc;AAAA,EAAAzoB,UAAA2nB,KAI5Bc,IAAAd,IAAA;AAAA,IAAA3Q,gBAAwC;AAAA,EAAA,IAAxCnX,QAA8DG,QAAA2nB,GAAA3nB,QAAAyoB,KAAAA,IAAAzoB,EAAA,EAAA;AAG/D,QAAA0oB,IAAAf,IAAAzC,KAAAF,IAEb2D,KAAA3c,IACC,gBAAA1L,EAACmjB,IAAA,EAA+BpiB,WAAAA,GAAsBgiB,WAAAA,GAAmBrX,QAAAA,EAAAA,CAAW,IAEpF0b,EAAkBzmB,IAAK2nB,QACrB,gBAAAtoB,EAACylB,IAAA,EAEY1kB,WAAAA,GACAunB,WAAAA,IACK,gBAAArD,GAAeb,UACTsB,sBAAAA,GACdziB,QAAAA,EAAAA,GALHqlB,GAAiBlE,SAQ5B;AAAC,MAAAmE;AAAA,EAAA7oB,UAAAkoB,KAAAloB,EAAA,EAAA,MAAA2nB,KAAA3nB,EAAA,EAAA,MAAAwoB,MAAAxoB,EAAA,EAAA,MAAAyoB,KAAAzoB,UAAA0oB,KAAA1oB,EAAA,EAAA,MAAA2oB,MA5BHE,KAAA,gBAAAvoB,EAAC4nB,KACM,MAAAC,GACA,MAAAC,IACA,MAAAC,IACH,GAAAC,GACG,MAAAC,IACkB,uBAAAC,IACEb,yBAAAA,GAGV,eAAAc,GAGD,cAAAC,GAEbC,UAAAA,GAAAA,CAcH,GAAa3oB,QAAAkoB,GAAAloB,QAAA2nB,GAAA3nB,QAAAwoB,IAAAxoB,QAAAyoB,GAAAzoB,QAAA0oB,GAAA1oB,QAAA2oB,IAAA3oB,QAAA6oB,MAAAA,KAAA7oB,EAAA,EAAA;AAAA,MAAA8oB;AAAA,SAAA9oB,EAAA,EAAA,MAAA4b,KAAA5b,EAAA,EAAA,MAAA4lB,KAAA5lB,EAAA,EAAA,MAAA6nB,KAAA7nB,UAAA+nB,KAAA/nB,EAAA,EAAA,MAAAgoB,MAAAhoB,EAAA,EAAA,MAAAioB,MAAAjoB,EAAA,EAAA,MAAA6oB,MA7CfC,uBAAClN,GAAA,EACI,IAAAC,GACO,WAAAC,GACR,GAAAC,GACG,MAAAE,GACA,MAAAE,GACH,GAAAmI,GACE,IAAAuD,GACK,UAAAC,GACMlC,eAAAA,GACH,cAAAmC,GACG,eAAAC,IACC,gBAAAC,IAIhBY,UAAAA,GAAAA,CA8BF,GAAO7oB,QAAA4b,GAAA5b,QAAA4lB,GAAA5lB,QAAA6nB,GAAA7nB,QAAA+nB,GAAA/nB,QAAAgoB,IAAAhoB,QAAAioB,IAAAjoB,QAAA6oB,IAAA7oB,QAAA8oB,MAAAA,KAAA9oB,EAAA,EAAA,GA9CP8oB;AA8CO;AA1GoB,SAAArnB,GAAAG,GAAA;AAAA,SAKuCA,EAAKE;AAAO;AALnD,SAAAuJ,GAAAoR,GAAA;AAAA,SAOkD7a,EAAKwjB;AAAQ;AAP/D,SAAA1J,GAAAgB,GAAA;AAAA,SAkCqD9a,EAAKE,OAAOujB;AAAe;AClKxG,MAAM0D,KAAwBhpB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACnC;AAAA,IAAA+oB,QAAAA;AAAAA,IAAAzlB,QAAAA;AAAAA,IAAA7D,UAAAA;AAAAA,IAAA2B,WAAAA;AAAAA,EAAAA,IAAgDtB,GAChDkpB,IAAmBvT,GAA0B,IAAI;AAEjD,MAAIsT,EAAMtnB,WAAY;AAAC,WAAS;AAAK,MAAAxB;AAAA,EAAAF,EAAA,CAAA,MAAAuD,KAAAvD,SAAAN,KAAAM,EAAA,CAAA,MAAAqB,KAEnBnB,IAAAwC,OAChB8M,GAAgB;AAAA,IAAAnO,WAAAA;AAAAA,IAAA2B,QAENN,EAAKoO;AAAAA,IAAavN,QAAAA;AAAAA,IAAA7D,UAAAA;AAAAA,IAAA+P,QAGlB/M,EAAK+M;AAAAA,IAAO/F,MACdhH,EAAKgH;AAAAA,EAAAA,CACZ,GAAC1J,OAAAuD,GAAAvD,OAAAN,GAAAM,OAAAqB,GAAArB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AARJ,QAAAkpB,IAAkBhpB,GAYTG,IAAA2oB,EAAMtnB,SAAU,IAAhBunB,IAAAppB;AAA0C,MAAAgB;AAAA,EAAAb,EAAA,CAAA,MAAAkpB,KAAAlpB,EAAA,CAAA,MAAAgpB,EAAA,CAAA,KAAAhpB,EAAA,CAAA,MAAAgpB,EAAAtnB,UAKtCb,IAAAmoB,EAAMtnB,WAAY,IAAlB,MAA4BwnB,EAAUF,EAAM,CAAA,CAAG,IAA/CnpB,QAA4DG,OAAAkpB,GAAAlpB,OAAAgpB,EAAA,CAAA,GAAAhpB,EAAA,CAAA,IAAAgpB,EAAAtnB,QAAA1B,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAA6M;AAAA,EAAA7M,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAErE8C,IAAA,gBAAAvM,EAACI,GAAA,EAAmB,MAAA,QAAa,MAAA,IAAE,GAAIV,OAAA6M,KAAAA,IAAA7M,EAAA,CAAA;AAAA,MAAA6b;AAAA,EAAA7b,EAAA,CAAA,MAAAK,KAAAL,UAAAa,KARzCgb,sBAACN,IAAA,EACM,KAAAlb,GACC8oB,MAAAA,IACE,SAAA,SACIljB,cAlBF,aAmBE,YAAA,GACH,SAAApF,GAETgM,UAAAA,GACF,GAAa7M,OAAAK,GAAAL,QAAAa,GAAAb,QAAA6b,KAAAA,IAAA7b,EAAA,EAAA;AAVf,QAAAopB,IACEvN;AAYF,MAAImN,EAAMtnB,WAAY,GAAC;AAAA,QAAAoa;AAAA,WAAA9b,UAAAopB,KAAStN,IAAA,gBAAAxb,EAACkb,IAAA,EAAiBvV,SA1BpC,aA0B4CmjB,UAAAA,GAAQ,GAAUppB,QAAAopB,GAAAppB,QAAA8b,KAAAA,IAAA9b,EAAA,EAAA,GAA5C8b;AAAAA,EAA4C;AAAC,MAAAA;AAAA,EAAA9b,EAAA,EAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAGnD+R,IAAA;AAAA,IAAAuH,WAAa;AAAA,IAAcgG,kBAAoBA,MAAMJ,EAAUlb;AAAAA,EAAAA,GAAU/N,QAAA8b,KAAAA,IAAA9b,EAAA,EAAA;AAAA,MAAA+b;AAAA,EAAA/b,UAAAopB,KAC/FrN,sBAACP,IAAA,EAAiBvV,SA9BR,aA+BR,UAAA,gBAAA3F,EAAA+b,GAAA,SAAA,EAAc,SAAA,IAAS+M,UAAAA,EAAAA,CAAQ,GACjC,GAAUppB,QAAAopB,GAAAppB,QAAA+b,KAAAA,IAAA/b,EAAA,EAAA;AAAA,MAAAic;AAAA,MAAAjc,EAAA,EAAA,MAAAkpB,KAAAlpB,UAAAgpB,GAAA;AAAA,QAAA7M;AAAA,IAAAnc,UAAAkpB,KAIQ/M,IAAAmN,OACV,gBAAAhpB,aAA8C,OAAA,UAAUoC,EAAKoO,aAAazM,EAAG,IAAI,aAC/E,UAAA,gBAAA/D,EAACkc,IAAA,EACC,SAAA,IACQ,SAAA,cACD,OAAA9Z,EAAKoO,aAAalQ,OAEvB,MAAA8B,EAAKoO,aAAatQ,OAAQ,gBAAAF,EAACI,KAAoB,MAAAgC,EAAKoO,aAAatQ,MAAa,MAAA,QAA9EX,QAEU,YAAA,MAAMqpB,EAAUxmB,CAAK,EAAA,MARrBA,EAAKoO,aAAazM,EAUlC,GACDrE,QAAAkpB,GAAAlpB,QAAAmc,KAAAA,IAAAnc,EAAA,EAAA,GAZAic,IAAA+M,EAAM/nB,IAAKkb,CAYX,GAACnc,QAAAkpB,GAAAlpB,QAAAgpB,GAAAhpB,QAAAic;AAAAA,EAAA;AAAAA,IAAAA,IAAAjc,EAAA,EAAA;AAAA,MAAAmc;AAAA,EAAAnc,UAAAic,KAfRE,sBAACG,IAAA,EACC,UAAA,gBAAAhc,EAAA+b,GAAA,YAAA,EACE,4BAAAA,GAAA,SAAA,EAA0BpW,cAnCpB,aAmCgC,MAAA,WAAa,IAAA,MAChDgW,UAAAA,GAaH,GACF,EAAA,CACF,GAASjc,QAAAic,GAAAjc,QAAAmc,KAAAA,IAAAnc,EAAA,EAAA;AAAA,MAAAskB;AAAA,SAAAtkB,EAAA,EAAA,MAAA+b,KAAA/b,UAAAmc,KAtBXmI,IAAA,gBAAA5V,EAAA2N,GAAA,MAAA,EAAwB,aAAAP,GACtBC,UAAAA;AAAAA,IAAAA;AAAAA,IAGAI;AAAAA,EAAAA,GAmBF,GAAYnc,QAAA+b,GAAA/b,QAAAmc,GAAAnc,QAAAskB,KAAAA,IAAAtkB,EAAA,EAAA,GAvBZskB;AAuBY,GCnEHiF,KAAWA,CAACC,GAAkBnG,MACzC,GAAGmG,CAAQ,IAAInG,EAAUC,cAAc,IAG5BmG,KAA4BA,CAAClmB,GAAyBmmB,MACjEnmB,MAAW,WAIAomB,KAAqBA,CAChCtG,GACArgB,GACA4mB,MACG;AACH,QAAMC,IAAexG,EAAU3jB,UAAUc,QAAQopB;AACjD,SAAIvG,EAAUnT,SAAS,cAAoBlN,GAAQxC,QAAQqpB,IACpDA,KAAgB7mB,GAAQxC;AACjC,GAEaspB,KAAiCA,CAC5CC,GACA1E,MAEKA,KACa0E,EAAkBC,KAAM3G,CAAAA,MAAcA,EAAUqB,aAAaW,CAAc,IACvEA,IAFM0E,EAAkB,CAAC,GAAGrF,UCL9CuF,KAAyBA,CAAC1mB,MAC9BqN,GAAsBoZ,KAAME,CAAAA,MAAgBA,MAAgB3mB,CAAM,GAEvD4mB,KAAuBA,CAClCC,GACAjkB,IAAwC,CAAA,MACrCikB,EAAW1oB,SAAS,KAAM0oB,EAAW1oB,WAAW,MAAMyE,EAAQkkB,kBAAkBD,EAAW,CAAC,GAAGna,cAAc,IAQrGqa,KAAwBA,CAACzlB,MACpCA,EAAM0lB,YAAY,MAAQ1lB,EAAM2lB,kBAAkB,MAAQ3lB,EAAM4lB,qBAAqB,IAE1EC,KAA+BA,CAC1CrpB,GACAkC,GACA8f,GACA3jB,IAAW2B,EAAUsP,mBAAAA,GACrB8V,IAASplB,EAAUU,MAAM4oB,sBACtB;AACH,QAAM3nB,IAAS3B,EAAUS,OAAO4hB,UAAUL,EAAUC,cAAc;AAClE,SAAOtgB,IACHokB,GAAiCpkB,GAAQtD,GAAU+mB,GAAQpD,GAAW;AAAA,IACpEuH,wBAAwBrnB,MAAW;AAAA,IACnCwf,UAAUkE,GAAgC5lB,EAAUS,OAAO+oB,WAAW;AAAA,EAAA,CACvE,IACD;AACN,GAEaC,KAA8BA,CAAAzpB,GAAAkC,GAAAwnB,MAAA;AAAA,QAAA/qB,IAAAC,EAAA,EAAA,GAKzCgC,IAAiBX,EAAkBD,EAASY,SAAST,OAAQC,EAAyB,GACtF2X,IAAsB9X,EAAkBD,EAASa,QAAQV,OAAQ6J,EAAuB,GACxFkO,IAAoBjY,EAAkBD,EAASS,OAAOqY,WAAYuB,EAA4B,GAC9FsP,IAAoB1pB,EAAkBD,EAASS,OAAON,OAAQma,EAAgB,GAC9Ejc,IAAiBkjB,GAA6BvhB,CAAS,GACvDolB,IAAe3D,GAAyBzhB,CAAS,GACjD0U,IAA0BlU,GAA8BR,CAAS,GACjE4pB,IAAiBC,GAAsBH,KAAAxnB,GAAgC2Y,EAAgB,GACvFgL,IAAoB8D,EAAWlpB,OAAOgjB,QAASvhB,CAAM;AAAE,MAAA4nB,GAAAjrB;AAAA,MAAAF,EAAA,CAAA,MAAAymB,KAAAzmB,EAAA,CAAA,MAAAuD,KAAAvD,EAAA,CAAA,MAAAknB,EAAA9B,WAAAplB,EAAA,CAAA,MAAAN,KAAAM,EAAA,CAAA,MAAAirB,EAAAG,gBAAAprB,EAAA,CAAA,MAAAqB,GAAA;AAAA,QAAAhB;AAAA,IAAAL,EAAA,CAAA,MAAAymB,KAAAzmB,EAAA,CAAA,MAAAuD,KAAAvD,EAAA,EAAA,MAAAN,KAAAM,UAAAqB,KAErDhB,IAAAgjB,CAAAA,MACEA,EAASnT,SAAU,eAAewa,GAA6BrpB,GAAWkC,GAAQ8f,GAAW3jB,GAAU+mB,CAAM,GAACzmB,OAAAymB,GAAAzmB,OAAAuD,GAAAvD,QAAAN,GAAAM,QAAAqB,GAAArB,QAAAK,KAAAA,IAAAL,EAAA,EAAA,GAFlHmrB,IAA2BjE,EAAW9B,QAAQngB,OAC5C5E,CAEF;AAAE,QAAAQ;AAAA,IAAAb,UAAAuD,KACoF1C,IAAA4mB,CAAAA,MACpF8B,GAAShmB,GAAQ8f,CAAS,GAACrjB,QAAAuD,GAAAvD,QAAAa,KAAAA,IAAAb,EAAA,EAAA;AAD7B,UAAAqrB,IAAyBC,GAAkBH,GAAoBF,EAAQG,cAAevqB,CAEtF;AAC2BX,IAAAA,IAAA,IAAImG,IAAIglB,EAAgBpqB,IAAKsqB,EAAiC,CAAC,GAACvrB,OAAAymB,GAAAzmB,OAAAuD,GAAAvD,EAAA,CAAA,IAAAknB,EAAA9B,SAAAplB,OAAAN,GAAAM,EAAA,CAAA,IAAAirB,EAAAG,cAAAprB,OAAAqB,GAAArB,OAAAmrB,GAAAnrB,OAAAE;AAAAA,EAAA;AAAAirB,IAAAA,IAAAnrB,EAAA,CAAA,GAAAE,IAAAF,EAAA,CAAA;AAA3F,QAAAwrB,IAA2BtrB;AAAiE,MAAAurB,GAAAC,GAAAxB,GAAA7pB,GAAA0pB;AAAA,MAAA/pB,EAAA,EAAA,MAAAiC,KAAAjC,EAAA,EAAA,MAAA+V,KAAA/V,UAAAoZ,KAAApZ,EAAA,EAAA,MAAAuZ,KAAAvZ,EAAA,EAAA,MAAAuD,KAAAvD,EAAA,EAAA,MAAAknB,EAAA9B,WAAAplB,EAAA,EAAA,MAAAwrB,KAAAxrB,EAAA,EAAA,MAAAqB,EAAAS,QAAA;AAAA,QAAAjB;AAAA,IAAAb,EAAA,EAAA,MAAAuD,KAAAvD,UAAAwrB,KAE1F3qB,IAAA8qB,CAAAA,MAAeH,EAAkBjlB,IAAK8c,EAASqB,QAAiE,KAAlDnhB,MAAW,UAAU8f,EAASnT,SAAU,YAAWlQ,QAAAuD,GAAAvD,QAAAwrB,GAAAxrB,QAAAa,KAAAA,IAAAb,EAAA,EAAA,GADnH+pB,IAA0B7C,EAAW9B,QAAQngB,OAC3CpE,CACF;AAAE,QAAAgM;AAAA,IAAA7M,EAAA,EAAA,MAAAiC,KAAAjC,EAAA,EAAA,MAAAoZ,KAAApZ,EAAA,EAAA,MAAAuZ,KAAAvZ,UAAAuD,KACmBsJ,IAAAyM,GACnB;AAAA,MAAAC,aAAAA;AAAAA,MAAAtX,UAAAA;AAAAA,MAAAmX,eAAAA;AAAAA,IAAAA,GACAwS,GAAkCroB,CAAM,CAC1C,GAACvD,QAAAiC,GAAAjC,QAAAoZ,GAAApZ,QAAAuZ,GAAAvZ,QAAAuD,GAAAvD,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA,GAHD0rB,IAAqB7e,GAIrBqd,IAAoBD,GAAuB1mB,CAA2B,IAAlDA,IAAA1D;AAAoD,QAAAgc;AAAA,IAAA7b,EAAA,EAAA,MAAA+V,KAAA/V,UAAAkqB,KAC9CrO,IAAAqO,IAAcnU,EAAkBmU,CAAW,EAACrZ,UAA5C,CAAA,GAAyD7Q,QAAA+V,GAAA/V,QAAAkqB,GAAAlqB,QAAA6b,KAAAA,IAAA7b,EAAA,EAAA,GAAnFyrB,IAA0B5P,GAExBxb,IAAA,CAACopB,GAA0BlmB,CAAyB,KACpD4mB,GAAqBJ,GAAmB;AAAA,MAAAM,gBACtBhpB,EAASS,OAAO+pB,kBAAmBtoB,CAAsB,GAAC8mB;AAAAA,IAAAA,CAC3E,GAACrqB,QAAAiC,GAAAjC,QAAA+V,GAAA/V,QAAAoZ,GAAApZ,QAAAuZ,GAAAvZ,QAAAuD,GAAAvD,EAAA,EAAA,IAAAknB,EAAA9B,SAAAplB,QAAAwrB,GAAAxrB,EAAA,EAAA,IAAAqB,EAAAS,QAAA9B,QAAAyrB,GAAAzrB,QAAA0rB,GAAA1rB,QAAAkqB,GAAAlqB,QAAAK,GAAAL,QAAA+pB;AAAAA,EAAA;AAAA0B,IAAAA,IAAAzrB,EAAA,EAAA,GAAA0rB,IAAA1rB,EAAA,EAAA,GAAAkqB,IAAAlqB,EAAA,EAAA,GAAAK,IAAAL,EAAA,EAAA,GAAA+pB,IAAA/pB,EAAA,EAAA;AAJJ,QAAA8rB,IACEzrB,GAIF0rB,IAAmBL,EAAYhqB,SAAU,KAAK+pB,EAAiB/pB,SAAU;AAAE,MAAAb;AAAA,EAAAb,EAAA,EAAA,MAAAirB,EAAAe,SAAAhsB,EAAA,EAAA,MAAAirB,EAAAG,gBAAAprB,EAAA,EAAA,MAAAirB,EAAAgB,aAM/DprB,IAAA;AAAA,IAAAuqB,cAAgBH,EAAQG;AAAAA,IAAaa,WAAahB,EAAQgB;AAAAA,IAAUD,OAASf,EAAQe;AAAAA,EAAAA,GAAQhsB,EAAA,EAAA,IAAAirB,EAAAe,OAAAhsB,EAAA,EAAA,IAAAirB,EAAAG,cAAAprB,EAAA,EAAA,IAAAirB,EAAAgB,WAAAjsB,QAAAa,KAAAA,IAAAb,EAAA,EAAA;AAAA,MAAA6M;AAAA,SAAA7M,EAAA,EAAA,MAAAiC,KAAAjC,EAAA,EAAA,MAAAyrB,KAAAzrB,UAAA+rB,KAAA/rB,EAAA,EAAA,MAAA0rB,KAAA1rB,EAAA,EAAA,MAAAkqB,KAAAlqB,EAAA,EAAA,MAAAknB,KAAAlnB,EAAA,EAAA,MAAAN,KAAAM,UAAA8rB,KAAA9rB,EAAA,EAAA,MAAAmrB,KAAAnrB,EAAA,EAAA,MAAAa,KAAAb,UAAA+pB,KAJlGld,IAAA;AAAA,IAAA5K,UAAAA;AAAAA,IAAAilB,aAAAA;AAAAA,IAAAxnB,UAAAA;AAAAA,IAAAurB,UAIKpqB;AAAAA,IAA6FsqB,oBAAAA;AAAAA,IAAApB,mBAAAA;AAAAA,IAAA2B,cAAAA;AAAAA,IAAAxB,aAAAA;AAAAA,IAAAuB,mBAAAA;AAAAA,IAAAK,UAAAA;AAAAA,IAAAC,YAAAA;AAAAA,EAAAA,GAQxG/rB,QAAAiC,GAAAjC,QAAAyrB,GAAAzrB,QAAA+rB,GAAA/rB,QAAA0rB,GAAA1rB,QAAAkqB,GAAAlqB,QAAAknB,GAAAlnB,QAAAN,GAAAM,QAAA8rB,GAAA9rB,QAAAmrB,GAAAnrB,QAAAa,GAAAb,QAAA+pB,GAAA/pB,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA,GAZM6M;AAYN,GAGUqf,KAAiCA,CAAA7qB,GAAAkC,MAAA;AAAA,QAAAvD,IAAAC,EAAA,EAAA,GAC5C+qB,IAAoB1pB,EAAkBD,EAASS,OAAON,OAAQ2qB,EAAgB,GAC9EzsB,IAAiBkjB,GAA6BvhB,CAAS,GACvDolB,IAAe3D,GAAyBzhB,CAAS,GACjD;AAAA,IAAAyqB,UAAAA;AAAAA,IAAAC,YAAAA;AAAAA,EAAAA,IAAiCjB,GAA4BzpB,GAAWkC,CAAM;AAAE,MAAArD;AAAA,MAAAF,EAAA,CAAA,MAAAgrB,EAAAlpB,UAAA9B,EAAA,CAAA,MAAAgrB,EAAA5F,WAAAplB,SAAAymB,KAAAzmB,EAAA,CAAA,MAAAuD,KAAAvD,EAAA,CAAA,MAAAN,KAAAM,EAAA,CAAA,MAAAqB,GAAA;AAChF,UAAAulB,IAAuBC,GAA2BmE,EAAWlpB,QAASyB,GAAQ7D,GAAU;AAAA,MAAAqnB,wBAC9DxjB,MAAW;AAAA,IAAA,CACpC,GACDyjB,IAA4BC,GAAgC+D,EAAWlpB,MAAO,GAC9EsqB,IAAoBvH,GAA0BthB,CAAM;AAC9BrD,IAAAA,IAAA,CAACksB,EAAW1X,MAAO0X,EAAWzX,KAAM,EAACqV,KACzDqC,CAAAA,MACErB,EAAWlpB,OAAOgjB,QAASuH,CAAU,EAACjH,QAAQ4E,KAC5C3G,CAAAA,MACEqH,GAA6BrpB,GAAWkC,GAAQ8f,GAAW3jB,GAAU+mB,CAIpE,KAHDY,GAA+B2D,EAAW5F,QAAS/B,EAASC,cAAe,GAAG;AAAA,MAAAgE,eAC7DN;AAAAA,MAAmBO,UACxBX;AAAAA,IAAAA,CACX,CACmD,KAAnD5e,EAAQ3G,EAASS,OAAO0lB,eAAgB6E,CAAU,CAC3D,GAACrsB,EAAA,CAAA,IAAAgrB,EAAAlpB,QAAA9B,EAAA,CAAA,IAAAgrB,EAAA5F,SAAAplB,OAAAymB,GAAAzmB,OAAAuD,GAAAvD,OAAAN,GAAAM,OAAAqB,GAAArB,OAAAE;AAAAA,EAAA;AAAAA,IAAAA,IAAAF,EAAA,CAAA;AAVD,QAAAwqB,IAAsBtqB;AAUpB,MAAAG;AAAA,SAAAL,EAAA,CAAA,MAAA+rB,KAAA/rB,SAAAwqB,KAAAxqB,EAAA,CAAA,MAAA8rB,KAEKzrB,IAAAiqB,GAAsB;AAAA,IAAAC,SAAWuB;AAAAA,IAAQrB,kBAAoBsB;AAAAA,IAAUvB,eAAAA;AAAAA,EAAAA,CAAiB,GAACxqB,OAAA+rB,GAAA/rB,OAAAwqB,GAAAxqB,OAAA8rB,GAAA9rB,QAAAK,KAAAA,IAAAL,EAAA,EAAA,GAAzFK;AAAyF,GAGrFisB,KAAgCA,CAAAjrB,GAAAkC,MAAA;AAC3C,QAAA;AAAA,IAAAuoB,UAAAA;AAAAA,IAAAC,YAAAA;AAAAA,EAAAA,IAAiCjB,GAA4BzpB,GAAWkC,CAAM;AAAE,SACzEuoB,KAAAC;AAAsB;AAhFY,SAAAtqB,GAAAG,GAAA;AAAA,SAK+BA,EAAKK;AAAS;AAL7C,SAAAoJ,GAAAoR,GAAA;AAAA,SAMmC7a,EAAKwF;AAAO;AAN/C,SAAAsU,GAAAgB,GAAA;AAAA,SAOoC9a,EAAK2X;AAAY;AAPrD,SAAAoC,GAAAgB,GAAA;AAAA,SAQgC/a;AAAK;AARrC,SAAAsa,GAAAqQ,GAAA;AAAA,SAYyC3qB;AAAK;AAZ9C,SAAA2pB,GAAAiB,GAAA;AAAA,SAqB8BnJ,EAASqB;AAAS;AAgC7C,SAAAyH,GAAAvqB,GAAA;AAAA,SAC6BA;AAAK;ACxFhF,MAAM6qB,KAAiBpJ,CAAAA,MAAA;AAAA,QAAArjB,IAAAC,EAAA,CAAA,GACrBysB,IAAYrJ,EAASqJ;AAAK,MAAAxsB;AAAA,EAAAF,EAAA,CAAA,MAAAqjB,KAAArjB,SAAA0sB,KACexsB,IAAAA,MAAMwsB,GAAGC,YAAcvI,GAAgBf,CAAS,CAAO,KAAjD,CAAA,GAAkDrjB,OAAAqjB,GAAArjB,OAAA0sB,GAAA1sB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAjG,QAAA,CAAAqf,GAAAuN,CAAA,IAAgC3iB,EAAS/J,CAAwD;AAAE,MAAAG,GAAAQ;AAAA,SAAAb,EAAA,CAAA,MAAAqjB,KAAArjB,SAAA0sB,KACzFrsB,IAAAA,MAAA;AACR,UAAA2e,IAAgBA,MAAM4N,EAAYF,GAAGC,YAAcvI,GAAgBf,CAAS,CAAO,KAAjD,EAAkD,GACpFb,IAAqBkK,GAAGxN,YAAcF,CAAO;AAE7C,QADAA,EAAAA,GACI,EAACwD;AAA+B,aAC7B,OAAOA,KAAiB,aAAxBA,IAAA,MAA0DA,EAAYE,QAAAA;AAAAA,EAAU,GACtF7hB,IAAA,CAACwiB,GAAWqJ,CAAG,GAAC1sB,OAAAqjB,GAAArjB,OAAA0sB,GAAA1sB,OAAAK,GAAAL,OAAAa,MAAAR,IAAAL,EAAA,CAAA,GAAAa,IAAAb,EAAA,CAAA,IANnBuL,GAAUlL,GAMPQ,CAAgB,GACZwe;AAAQ,GAEXwN,KAAuBA,CAAAhoB,GAAAioB,MAAA;AAAA,QAAA9sB,IAAAC,EAAA,EAAA,GAC3B;AAAA,IAAAqM,UAAApM;AAAAA,IAAA6sB,cAAAA;AAAAA,IAAA1J,WAAAA;AAAAA,IAAA2J,kBAAAA;AAAAA,IAAAC,UAAA5sB;AAAAA,IAAAgB,WAAAA;AAAAA,EAAAA,IAAqGwD,GAA7FyH,IAAApM,MAAAL,SAAA,KAAAK,GAA6D+sB,IAAA5sB,MAAAR,SAAA,KAAAQ,GACrE6sB,IAAkB7J,EAASlT,iBAAkB;AAAU,MAAAtP;AAAA,EAAAb,EAAA,CAAA,MAAA8sB,EAAAK,QACzBtsB,IAAAisB,EAAWK,MAAWnD,KAACvoB,EAAgC,GAACzB,EAAA,CAAA,IAAA8sB,EAAAK,MAAAntB,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAtF,QAAAotB,IAAsBplB,EAAQnH,GAC9BwsB,IAAuBH,GAC+CrgB,IAAAP,KAAA,CAAa2gB;AAAQ,MAAApR;AAAA,EAAA7b,SAAAqjB,EAAAqB,YAAA1kB,SAAA6M,KAAzDgP,IAAA;AAAA,IAAAxX,IAAMgf,EAASqB;AAAAA,IAASpY,UAAYO;AAAAA,EAAAA,GAAuB7M,EAAA,CAAA,IAAAqjB,EAAAqB,UAAA1kB,OAAA6M,GAAA7M,OAAA6b,KAAAA,IAAA7b,EAAA,CAAA;AAA7F,QAAAstB,IAAsBC,GAAY1R,CAA2D,GAC7F,CAAA2R,GAAAC,CAAA,IAAgCxjB,EAAAA;AAAiC,MAAA6R;AAAA,EAAA9b,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAC5B+R,IAAA;AAAA,IAAA4R,GAAK;AAAA,IAACC,GAAK;AAAA,IAAC3N,OAAS;AAAA,IAACC,QAAU;AAAA,EAAA,GAAGjgB,OAAA8b,KAAAA,IAAA9b,EAAA,CAAA;AAAxE,QAAA,CAAA4tB,GAAAC,CAAA,IAA4B5jB,EAAS6R,CAAmC;AAAE,MAAAC;AAAA,EAAA/b,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACtDgS,IAAAA,CAAAoR,GAAAxe,MAAA;AAClBA,IAAAA,EAAKsO,eAAAA,GACLtO,EAAKuO,gBAAAA;AACL,UAAA4Q,IAAanf,EAAK4J,cAAcwV,sBAAAA;AAChCF,IAAAA,EAAU;AAAA,MAAAH,GAAKI,EAAIJ;AAAAA,MAAEC,GAAKG,EAAIH;AAAAA,MAAE3N,OAAS8N,EAAI9N;AAAAA,MAAMC,QAAU6N,EAAI7N;AAAAA,IAAAA,CAAS,GAC1EwN,EAAYN,CAAI;AAAA,EAAC,GAClBntB,OAAA+b,KAAAA,IAAA/b,EAAA,CAAA;AAND,QAAAguB,IAAoBjS;AAMlB,MAAAE;AAAA,EAAAjc,EAAA,CAAA,MAAAsM,KAAAtM,SAAAotB,KACqBnR,IAAAgS,CAAAA,MAAA;AACrB,IAAIb,KAAA,CAAkB9gB,KAAU0hB,EAAY,UAAUrf,CAAK;AAAA,EAAE,GAC9D3O,OAAAsM,GAAAtM,OAAAotB,GAAAptB,OAAAic,KAAAA,IAAAjc,EAAA,CAAA;AAFD,QAAAkuB,IAAuBjS;AAErB,MAAAE;AAAA,EAAAnc,EAAA,EAAA,MAAAsM,KAAAtM,UAAAqtB,KACsBlR,IAAAgS,CAAAA,MAAA;AACtB,IAAId,KAAA,CAAmB/gB,KAAU0hB,EAAY,WAAWrf,CAAK;AAAA,EAAE,GAChE3O,QAAAsM,GAAAtM,QAAAqtB,GAAArtB,QAAAmc,KAAAA,IAAAnc,EAAA,EAAA;AAFD,QAAAouB,IAAwBjS;AAEtB,MAAAmI;AAAA,EAAAtkB,EAAA,EAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACkBua,IAAAA,CAAA+J,GAAA3kB,MAAA;AAClB+jB,IAAAA,EAAY1f,OAAcrE,IAAA2kB,IAActgB,MAAYof,IAAZttB,SAAAkO,CAAuC;AAAA,EAAC,GACjF/N,QAAAskB,KAAAA,IAAAtkB,EAAA,EAAA;AAFD,QAAAsuB,IAAoBhK;AAElB,MAAAuD;AAAA,EAAA7nB,EAAA,EAAA,MAAAsM,KAAAtM,UAAA+sB,KAAA/sB,EAAA,EAAA,MAAAqjB,EAAAqB,YAAA1kB,EAAA,EAAA,MAAAgtB,KAAAhtB,UAAAitB,KAAAjtB,EAAA,EAAA,MAAAqB,KAC0BwmB,IAAA0G,CAAAA,MAAA;AAC1B,IAAI,CAACtB,KAAD3gB,KAAA,CAA0BqC,EAAK6f,WAC/B7f,EAAKhJ,QAAS,eAAdqnB,MACFre,EAAKsO,eAAAA,GACL5b,EAASS,OAAO2sB,aAAcpL,EAASqB,UAAW;AAAA,MAAAgK,gBAAkB1B;AAAAA,IAAAA,CAAkB,IAEpFre,EAAKhJ,QAAS,gBAAdonB,MACFpe,EAAKsO,eAAAA,GACL5b,EAASS,OAAO2sB,aAAcpL,EAASqB,UAAW;AAAA,MAAAiK,eAAiB5B;AAAAA,IAAAA,CAAc;AAAA,EAClF,GACF/sB,QAAAsM,GAAAtM,QAAA+sB,GAAA/sB,EAAA,EAAA,IAAAqjB,EAAAqB,UAAA1kB,QAAAgtB,GAAAhtB,QAAAitB,GAAAjtB,QAAAqB,GAAArB,QAAA6nB,KAAAA,IAAA7nB,EAAA,EAAA;AAVD,QAAA4uB,IAA4B/G;AAU1B,MAAAC;AAAA,SAAA9nB,EAAA,EAAA,MAAA4tB,KAAA5tB,UAAAqtB,KAAArtB,EAAA,EAAA,MAAAotB,KAAAptB,UAAAktB,KAAAltB,EAAA,EAAA,MAAAouB,KAAApuB,UAAAkuB,KAAAluB,EAAA,EAAA,MAAAwtB,KAAAxtB,EAAA,EAAA,MAAA4uB,KAAA5uB,EAAA,EAAA,MAAAstB,KAAAttB,UAAA8sB,KACKhF,IAAA;AAAA,IAAA8F,QAAAA;AAAAA,IAAAR,eAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAH,WAAAA;AAAAA,IAAAkB,iBAAAA;AAAAA,IAAAF,gBAAAA;AAAAA,IAAAV,UAAAA;AAAAA,IAAAoB,qBAAAA;AAAAA,IAAAN,aAAAA;AAAAA,IAAAhB,eAAAA;AAAAA,IAAAR,aAAAA;AAAAA,EAAAA,GAYN9sB,QAAA4tB,GAAA5tB,QAAAqtB,GAAArtB,QAAAotB,GAAAptB,QAAAktB,GAAAltB,QAAAouB,GAAApuB,QAAAkuB,GAAAluB,QAAAwtB,GAAAxtB,QAAA4uB,GAAA5uB,QAAAstB,GAAAttB,QAAA8sB,GAAA9sB,QAAA8nB,KAAAA,IAAA9nB,EAAA,EAAA,GAZM8nB;AAYN,GAEG+G,KAAgC9uB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAYpC;AAAA,IAAA2tB,QAAAA;AAAAA,IAAA7V,UAAAA;AAAAA,IAAA9R,OAAAA;AAAAA,IAAAyD,MAAAA;AAAAA,IAAA4kB,aAAAA;AAAAA,EAAAA,IAAuDvuB;AAAM,MAAAG;AAAA,EAAAF,SAAAsuB,KAI3CpuB,IAAAuO,CAAAA,MAAa6f,EAAY7f,EAAO/E,IAAK,GAAC1J,OAAAsuB,GAAAtuB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,EAAAL,SAAA4tB,KACKvtB,IAAAA,MAAMutB,GAAM5tB,OAAA4tB,GAAA5tB,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AAAA,EAAAb,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAAUlJ,IAAA;AAAA,IAAAiuB,UAAY;AAAA,EAAA,GAAG9uB,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAA6M;AAAA,EAAA7M,SAAAK,KAAjFwM,IAAA;AAAA,IAAAwW,WAAa;AAAA,IAAc0L,eAAiB1uB;AAAAA,IAAY2uB,QAAUnuB;AAAAA,EAAAA,GAAiBb,OAAAK,GAAAL,OAAA6M,KAAAA,IAAA7M,EAAA,CAAA;AAAA,MAAA6b;AAAA,EAAA7b,EAAA,CAAA,MAAA+X,KAAA/X,SAAAiG,KAEhG4V,sBAACS,IAAA,EACC,UAAA,gBAAAhc,EAAA+b,GAAA,YAAA,EACE,4BAAAA,GAAA,SAAA,EAA0BpW,cAAAA,GAAY,MAAA,YAAc,IAAA,MACjD8R,UAAAA,EAAAA,CACH,GACF,GACF,GAAS/X,OAAA+X,GAAA/X,OAAAiG,GAAAjG,OAAA6b,KAAAA,IAAA7b,EAAA,CAAA;AAAA,MAAA8b;AAAA,SAAA9b,EAAA,EAAA,MAAA0J,KAAA1J,EAAA,EAAA,MAAAE,KAAAF,EAAA,EAAA,MAAA6M,KAAA7M,UAAA6b,KAXXC,IAAA,gBAAAxb,EAAA+b,GAAA,MAAA,EACQ3S,MAAAA,GACQ,cAAAxJ,GACD,aAAA2M,GAEbgP,UAAAA,EAAAA,CAOF,GAAY7b,QAAA0J,GAAA1J,QAAAE,GAAAF,QAAA6M,GAAA7M,QAAA6b,GAAA7b,QAAA8b,KAAAA,IAAA9b,EAAA,EAAA,GAZZ8b;AAYY,GAGVmT,KAAgClvB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAapC;AAAA,IAAA2tB,QAAAA;AAAAA,IAAA3nB,OAAAA;AAAAA,IAAAyD,MAAAA;AAAAA,IAAA2Z,WAAAA;AAAAA,IAAAiL,aAAAA;AAAAA,IAAAjtB,WAAAA;AAAAA,EAAAA,IAAmEtB,GAIxDG,IAAA,GAAG+F,CAAK;AAAe,MAAA5F;AAAA,EAAAL,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAUpB1J,IAAA,gBAAAC,EAACI,GAAA,EAAmB,MAAA,OAAY,MAAA,IAAE,GAAIV,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AAAA,EAAAb,EAAA,CAAA,MAAAqjB,EAAA6L,qBAAAlvB,EAAA,CAAA,MAAAqjB,EAAAqB,YAAA1kB,SAAAqB,KANhDR,iCAAiB,OAAA,aAAY,SAAA,IAC3B,UAAA,gBAAAP,EAACkc,IAAA,EACC,aACQ,SAAA,cACL,IAAA,aACG,OAAA,aACA,MAAAnc,GACM,YAAA,MAAA;AACV,IAAIgjB,EAAS6L,oBAAoB7tB,EAAS8tB,aAAc9L,EAAS6L,iBAAkB,IAC9E7tB,EAASS,OAAOstB,YAAa/L,EAASqB,UAAW;AAAA,MAAA2K,UAAY;AAAA,QAAApe,MAAQ;AAAA,MAAA;AAAA,IAAa,CAAG;AAAA,EAAE,MAGlG,GAAYjR,EAAA,CAAA,IAAAqjB,EAAA6L,mBAAAlvB,EAAA,CAAA,IAAAqjB,EAAAqB,UAAA1kB,OAAAqB,GAAArB,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAA6M;AAAA,SAAA7M,EAAA,CAAA,MAAA4tB,KAAA5tB,EAAA,CAAA,MAAA0J,KAAA1J,EAAA,CAAA,MAAAsuB,KAAAtuB,EAAA,CAAA,MAAAE,KAAAF,SAAAa,KAlBdgM,sBAACgiB,IAAA,EACSjB,QAAAA,GACD,OAAA1tB,GACDwJ,MAAAA,GACO4kB,aAAAA,GAEbztB,UAAAA,EAAAA,CAaF,GAAgCb,OAAA4tB,GAAA5tB,OAAA0J,GAAA1J,OAAAsuB,GAAAtuB,OAAAE,GAAAF,OAAAa,GAAAb,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA,GAnBhC6M;AAmBgC,GAG9ByiB,KAA0BvvB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAM9B;AAAA,IAAAO,MAAAA;AAAAA,IAAA6D,IAAAA;AAAAA,IAAAlE,WAAAA;AAAAA,IAAA8F,OAAAA;AAAAA,EAAAA,IAAuClG;AAAM,MAAAG;AAAA,EAAAF,EAAA,CAAA,MAAAQ,KAAAR,SAAAG,KAGxCD,IAAAC,IACC,gBAAAG,EAACI,GAAA,EACO,MAAAP,EAASK,MACT,MAAA,IACM,eACL,OAAAL,EAASovB,SAAT,YACK,cAAApvB,EAAS8F,MAAAA,CAAM,IAE3BzF,IACF,gBAAAF,EAACI,GAAA,EAAoBF,MAAAA,GAAY,MAAA,IAAgB,YAAA,GAAS,OAAA,YAAU,IADlE,MAEIR,OAAAQ,GAAAR,OAAAG,GAAAH,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,EAAAL,EAAA,CAAA,MAAAqE,KAAArE,SAAAiG,KACR5F,IAAA,gBAAAC,EAACG,MAAQ,IAAA,QAAW4D,IAAAA,GAAS,MAAA,KAAI,UAAA,IAC9B4B,UAAAA,EAAAA,CACH,GAAOjG,OAAAqE,GAAArE,OAAAiG,GAAAjG,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AAAA,SAAAb,EAAA,CAAA,MAAAE,KAAAF,SAAAK,KAdTQ,4BACGX,UAAAA;AAAAA,IAAAA;AAAAA,IAWDG;AAAAA,EAAAA,GAEO,GACNL,OAAAE,GAAAF,OAAAK,GAAAL,OAAAa,KAAAA,IAAAb,EAAA,CAAA,GAfHa;AAeG,GAGD2uB,KAAoBA,CACxBnuB,GACA2S,MACG;AACH,MAAIA,EAAO/C,SAAS,WAAW;AAC7B,IAAK5P,EAAUY,SAAS0N,eAAeqE,EAAO9F,WAAW8F,EAAOpG,IAAI;AACpE;AAAA,EACF;AACA,EAAKvM,EAAUud,WAAWC,WAAW7K,EAAOwE,MAAM;AACpD,GACMiX,KAA6BA,CAAC1vB,MAAkF;AACpH,QAAM;AAAA,IAAEyK,QAAAA;AAAAA,IAAQnJ,WAAAA;AAAAA,EAAAA,IAActB;AAC9B,SAAOyK,EAAOvJ,IAAI,CAACwJ,GAAOilB,MACxB,gBAAAhhB,EAACkI,GAAA,EAAmB,SAAQ,YACzB8Y,UAAAA;AAAAA,IAAAA,IAAa,IAAI,gBAAApvB,EAAC+b,GAAK,WAAL,CAAA,CAAc,IAAM;AAAA,IACtC5R,EAAMklB,KAAK1uB,IAAK2uB,CAAAA,MACf,gBAAAtvB,EAAC+b,GAAK,MAAL,EAAuB,OAAOuT,EAAIvrB,IAAI,UAAUurB,EAAItjB,UAAU,SAAO,IACpE,UAAA,gBAAAhM,EAACkc,IAAA,EACC,SAAO,IACP,SAAQ,cACR,IAAIoT,EAAIvrB,IACR,OAAOurB,EAAI3pB,OACX,MAAM2pB,EAAIpvB,OAAO,gBAAAF,EAACI,GAAA,EAAc,MAAMkvB,EAAIpvB,MAAM,MAAM,GAAA,KAASX,QAC/D,WAAW+vB,EAAIC,WACf,YAAYD,EAAIE,UAChB,UAAUF,EAAItjB,UACd,YAAYsjB,EAAI5b,SAAS,MAAMwb,GAAkBnuB,GAAWuuB,EAAI5b,MAAO,IAAInU,OAAAA,CAAU,EAAA,GAVzE+vB,EAAIvrB,EAYpB,CACD;AAAA,EAAA,KAhBOoG,EAAMpG,EAiBhB,CACD;AACH,GACM0rB,KAAgChwB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAOpC;AAAA,IAAAqM,UAAAA;AAAAA,IAAA0jB,UAAAA;AAAAA,IAAA/pB,OAAAA;AAAAA,IAAAod,WAAAA;AAAAA,IAAAhiB,WAAAA;AAAAA,EAAAA,IAA4DtB;AAC5D,MAAIsjB,EAASpT,aAAc;AAAI,WAAS;AAKxB,QAAA/P,IAAA,SAAS+F,CAAK,IASjB5F,IAAA2vB,IAAA,MAAA,KACMnvB,IAAAmvB,IAAA,SAAA;AAA0B,MAAAnjB,GAAAgP,GAAAC,GAAAC;AAAA,EAAA/b,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAE5B8C,IAAA;AAAA,IAAAojB,SAAW;AAAA,IAAGrK,eAAiB;AAAA,EAAA,GACzB/J,IAAA;AAAA,IAAAoU,SAAW;AAAA,IAAGrK,eAAiB;AAAA,EAAA,GAC1C9J,IAAA;AAAA,IAAAoU,IAAM;AAAA,IAAaX,OAAS;AAAA,EAAA,GAC3BxT,IAAA;AAAA,IAAAmU,IAAM;AAAA,EAAA,GAAelwB,OAAA6M,GAAA7M,OAAA6b,GAAA7b,OAAA8b,GAAA9b,OAAA+b,MAAAlP,IAAA7M,EAAA,CAAA,GAAA6b,IAAA7b,EAAA,CAAA,GAAA8b,IAAA9b,EAAA,CAAA,GAAA+b,IAAA/b,EAAA,CAAA;AAAA,MAAAic;AAAA,EAAAjc,EAAA,CAAA,MAAAsM,KAAAtM,EAAA,CAAA,MAAAqjB,EAAA6L,qBAAAlvB,SAAAqjB,EAAAqB,YAAA1kB,SAAAqB,KAGrB4a,IAAAgS,CAAAA,MAAA;AAEP,QADAtf,EAAKuO,gBAAAA,GACD5Q;AAAQ;AACZ,UAAA6jB,IAAiB9M,EAAS6L;AAC1B,QAAIiB,GAAQ;AACV9uB,MAAAA,EAAS+uB,eAAgBD,CAAQ;AAAC;AAAA,IAAA;AAGpC9uB,IAAAA,EAASS,OAAOuuB,WAAYhN,EAASqB,QAAS;AAAA,EAAC,GAChD1kB,OAAAsM,GAAAtM,EAAA,CAAA,IAAAqjB,EAAA6L,mBAAAlvB,EAAA,CAAA,IAAAqjB,EAAAqB,UAAA1kB,OAAAqB,GAAArB,OAAAic,KAAAA,IAAAjc,EAAA,CAAA;AAAA,MAAAmc;AAAA,SAAAnc,EAAA,CAAA,MAAAsM,KAAAtM,EAAA,EAAA,MAAAE,KAAAF,EAAA,EAAA,MAAAK,KAAAL,EAAA,EAAA,MAAAa,KAAAb,UAAAic,KA9BHE,sBAACrN,IAAA,EACI,IAAA,QACE,MAAA,UACO,cAAA5O,GACGoM,iBAAAA,GACV,MAAA,OACG,SAAA,QACH,MAAA,QACH,GAAA,KACW,cAAA,OACD,YAAA,GACT,IAAA,MACM,SAAAjM,GACM,eAAAQ,GACT,OAAA,YACO,aAAAgM,GACM,mBAAAgP,GACX,QAAAC,GACC,SAAAC,GACE,YAAA,sBACI,eAAA1Q,IACN,SAAA4Q,GASR,GACDjc,OAAAsM,GAAAtM,QAAAE,GAAAF,QAAAK,GAAAL,QAAAa,GAAAb,QAAAic,GAAAjc,QAAAmc,KAAAA,IAAAnc,EAAA,EAAA,GA/BFmc;AA+BE,GAGAmU,KAA0BvwB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAM9B;AAAA,IAAAswB,UAAAA;AAAAA,IAAAtqB,OAAAA;AAAAA,IAAAod,WAAAA;AAAAA,IAAAhiB,WAAAA;AAAAA,EAAAA,IAAkDtB;AAAM,MAAAG;AAAA,EAAAF,EAAA,CAAA,MAAAuwB,KAAAvwB,SAAAiG,KAAAjG,EAAA,CAAA,MAAAqB,KAGnDnB,IAAAqwB,EAAQnD,gBACP,gBAAA9sB,EAACuuB,IAAA,EACS,QAAA0B,EAAQ3C,QACT,OAAA,GAAG3nB,CAAK,SACT,MAAAsqB,EAAQ/C,aAAc,UACf,aAAA9jB,CAAAA,MAAU6mB,EAAQjC,YAAa,UAAU5kB,CAAI,GAE1D,4BAAC+lB,IAAA,EAAmC,QAAAc,EAAQzD,YAAYK,QAApB,CAAA,GAA4C9rB,WAAAA,EAAAA,CAAS,GAC3F,IARD,MASOrB,OAAAuwB,GAAAvwB,OAAAiG,GAAAjG,OAAAqB,GAAArB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,EAAAL,EAAA,CAAA,MAAAuwB,KAAAvwB,EAAA,CAAA,MAAAiG,KAAAjG,EAAA,CAAA,MAAAqjB,KAAArjB,SAAAqB,KACPhB,IAAAkwB,EAAQlD,iBACP,gBAAA/sB,EAAC2uB,IAAA,EACS,QAAAsB,EAAQ3C,QACT3nB,OAAAA,GACD,MAAAsqB,EAAQ/C,aAAc,WACjBnK,WAAAA,GACE,aAAAmN,CAAAA,MAAUD,EAAQjC,YAAa,WAAW5kB,CAAI,GAChDrI,WAAAA,EAAAA,CAAS,IAPvB,MASOrB,OAAAuwB,GAAAvwB,OAAAiG,GAAAjG,OAAAqjB,GAAArjB,OAAAqB,GAAArB,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AAAA,SAAAb,EAAA,CAAA,MAAAE,KAAAF,UAAAK,KApBVQ,4BACGX,UAAAA;AAAAA,IAAAA;AAAAA,IAUAG;AAAAA,EAAAA,GASO,GACPL,OAAAE,GAAAF,QAAAK,GAAAL,QAAAa,KAAAA,IAAAb,EAAA,EAAA,GArBHa;AAqBG,GAGM4vB,KAAqB1wB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAChC;AAAA,IAAAolB,gBAAAA;AAAAA,IAAA/Y,UAAApM;AAAAA,IAAAmjB,WAAAA;AAAAA,IAAA4J,UAAA5sB;AAAAA,IAAAgB,WAAAA;AAAAA,EAAAA,IAAqFtB,GAA7DuM,IAAApM,MAAAL,SAAA,KAAAK,GAA6B+sB,IAAA5sB,MAAAR,SAAA,KAAAQ,GACrD2vB,IAAiB3M,EAASqB,aAAcW,GACxCyH,IAAoBL,GAAepJ,CAAS,GAC5Cpd,IAAc6mB,EAAW7mB,SAAUod,EAAS3jB,UAAgBuG,SAAIod,EAASziB,SAAUyiB,EAASC,gBAC5FoN,IAAgB,uBAAuBrN,EAASqB,QAAS;AAAG,MAAA7jB;AAAA,MAAAb,EAAA,CAAA,MAAAqjB,KAAArjB,EAAA,CAAA,MAAAqB,EAAAS,UAAA9B,EAAA,CAAA,MAAAqB,EAAA6P,WAAA;AAC5D,UAAAlO,IAAe3B,EAASS,OAAO4hB,UAAWL,EAASC,cAAe;AACrDziB,IAAAA,IAAA8oB,GACXtG,GACArgB,GACAqgB,EAAS3jB,WAAY2B,EAAS6P,UAAUC,QAASkS,EAAS3jB,SAASU,IAAW,GAACI,OAA/EX,MACF,GAACG,OAAAqjB,GAAArjB,EAAA,CAAA,IAAAqB,EAAAS,QAAA9B,EAAA,CAAA,IAAAqB,EAAA6P,WAAAlR,OAAAa;AAAAA,EAAA;AAAAA,IAAAA,IAAAb,EAAA,CAAA;AAJD,QAAAQ,IAAaK,GAKb0vB,IAAiB1D,GAAqB9sB,GAAO+sB,CAAW,GACxD;AAAA,IAAA6D,YAAAA;AAAAA,IAAAC,WAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,WAAAA;AAAAA,IAAAC,YAAAA;AAAAA,EAAAA,IAAqER,EAAQjD,eAC7E0D,IACGT,EAAQ/C,aAAc,YAAY+C,EAAQnD,iBAC1CmD,EAAQ/C,aAAc,aAAa+C,EAAQlD,gBAKjCxgB,IAAAwW,EAASqB,UAYD7I,IAAA0U,EAAQnD,iBAAkBmD,EAAQlD,iBAAlC,SAAAxtB,QACAic,IAAAyU,EAAQnD,iBAAkBmD,EAAQlD,iBAAlC2D,IAAAnxB,QACIkc,IAAAkR,IAAA,iCAAAptB,QACRoc,IAAAsU,EAAQrD,YAAR,WAAArtB,QACFsc,IAAAwU,IAAA,QAAA9wB;AAA8B,MAAAykB;AAAA,EAAAtkB,SAAA8wB,KAC5BxM,IAAA2M,GAAGC,UAAUC,SAAUL,CAAS,GAAC9wB,OAAA8wB,GAAA9wB,OAAAskB,KAAAA,IAAAtkB,EAAA,CAAA;AAI7B,QAAA6nB,IAAA0I,EAAQlD,iBAAkBkD,EAAQnC,kBAAlCvuB,QACNioB,IAAAyI,EAAQnD,iBAAR4C,KAAA,CAAuC1jB,IAAWikB,EAAQrC,iBAA1DruB,QAGDkoB,IAAA+E,EAAWtsB,QAAXA;AAAwB,MAAAwnB;AAAA,EAAAhoB,EAAA,CAAA,MAAAiG,KAAAjG,SAAA0wB,KAAA1wB,EAAA,CAAA,MAAA+nB,KAAA/nB,EAAA,CAAA,MAAA8sB,EAAA3sB,aADhC6nB,IAAA,gBAAA1nB,EAACgvB,MACO,MAAAvH,GACF2I,IAAAA,GACO,WAAA5D,EAAW3sB,WACf8F,OAAAA,EAAAA,CAAK,GACZjG,OAAAiG,GAAAjG,OAAA0wB,GAAA1wB,OAAA+nB,GAAA/nB,EAAA,CAAA,IAAA8sB,EAAA3sB,WAAAH,QAAAgoB,KAAAA,IAAAhoB,EAAA,EAAA;AAAA,MAAAioB;AAAA,EAAAjoB,EAAA,EAAA,MAAAsM,KAAAtM,EAAA,EAAA,MAAAgwB,KAAAhwB,EAAA,EAAA,MAAAiG,KAAAjG,EAAA,EAAA,MAAAqjB,KAAArjB,UAAAqB,KACF4mB,sBAAC8H,IAAA,EACWzjB,UAAAA,GACA0jB,UAAAA,GACH/pB,OAAAA,GACIod,WAAAA,GACAhiB,WAAAA,GAAS,GACpBrB,QAAAsM,GAAAtM,QAAAgwB,GAAAhwB,QAAAiG,GAAAjG,QAAAqjB,GAAArjB,QAAAqB,GAAArB,QAAAioB,KAAAA,IAAAjoB,EAAA,EAAA;AAAA,MAAAmoB;AAAA,EAAAnoB,EAAA,EAAA,MAAAuwB,EAAA3B,uBAAA5uB,EAAA,EAAA,MAAAsM,KAAAtM,EAAA,EAAA,MAAAiG,KAAAjG,EAAA,EAAA,MAAA0wB,KAAA1wB,UAAA4wB,KAAA5wB,EAAA,EAAA,MAAAqjB,EAAAqB,YAAA1kB,UAAA6wB,KAAA7wB,EAAA,EAAA,MAAA6nB,KAAA7nB,EAAA,EAAA,MAAA8nB,KAAA9nB,EAAA,EAAA,MAAAgoB,KAAAhoB,EAAA,EAAA,MAAAioB,KAAAjoB,EAAA,EAAA,MAAA6b,KAAA7b,UAAA8b,KAAA9b,EAAA,EAAA,MAAA+b,KAAA/b,EAAA,EAAA,MAAAic,KAAAjc,EAAA,EAAA,MAAAmc,KAAAnc,EAAA,EAAA,MAAAskB,KAAAtkB,UAAA+wB,KAtCJ5I,sBAAAiJ,GAAA,SAAA,EACOP,KAAAA,GACE,OAAAhkB,GACF,MAAA,SACA,MAAA,KACO,YAAA,GACL5G,OAAAA,GAKUyqB,mBAAAA,GACPpkB,UAAAA,GACA,WAAA,SACK,iBAAAuP,GACA,iBAAAC,GACI,qBAAAC,GACR,WAAAE,GACF,SAAAE,GACE,WAAAmI,GACCyM,YAAAA,GAAU,GAClBH,GACO,WAAAL,EAAQ3B,qBACJ,eAAA/G,GACN,SAAAC,GAETE,UAAAA;AAAAA,IAAAA;AAAAA,IAMAC;AAAAA,EAAAA,GAOF,GAAejoB,EAAA,EAAA,IAAAuwB,EAAA3B,qBAAA5uB,QAAAsM,GAAAtM,QAAAiG,GAAAjG,QAAA0wB,GAAA1wB,QAAA4wB,GAAA5wB,EAAA,EAAA,IAAAqjB,EAAAqB,UAAA1kB,QAAA6wB,GAAA7wB,QAAA6nB,GAAA7nB,QAAA8nB,GAAA9nB,QAAAgoB,GAAAhoB,QAAAioB,GAAAjoB,QAAA6b,GAAA7b,QAAA8b,GAAA9b,QAAA+b,GAAA/b,QAAAic,GAAAjc,QAAAmc,GAAAnc,QAAAskB,GAAAtkB,QAAA+wB,GAAA/wB,QAAAmoB,KAAAA,IAAAnoB,EAAA,EAAA;AAAA,MAAAooB;AAAA,EAAApoB,EAAA,EAAA,MAAAuwB,KAAAvwB,EAAA,EAAA,MAAAiG,KAAAjG,EAAA,EAAA,MAAAqjB,KAAArjB,UAAAqB,KACf+mB,IAAA,gBAAA9nB,EAACgwB,IAAA,EAAkCC,UAAAA,GAAiBtqB,OAAAA,GAAkBod,WAAAA,GAAsBhiB,WAAAA,GAAS,GAAIrB,QAAAuwB,GAAAvwB,QAAAiG,GAAAjG,QAAAqjB,GAAArjB,QAAAqB,GAAArB,QAAAooB,KAAAA,IAAApoB,EAAA,EAAA;AAAA,MAAAqoB;AAAA,SAAAroB,EAAA,EAAA,MAAAmoB,KAAAnoB,UAAAooB,KAzC3GC,4BACEF,UAAAA;AAAAA,IAAAA;AAAAA,IAwCAC;AAAAA,EAAAA,GAAyG,GACxGpoB,QAAAmoB,GAAAnoB,QAAAooB,GAAApoB,QAAAqoB,KAAAA,IAAAroB,EAAA,EAAA,GA1CHqoB;AA0CG;AAtTsB,SAAA5mB,GAAAgJ,GAAA;AAAA,SAGqCA,EAAKklB,KAAKjuB,SAAU;AAAC;AA2KjD,SAAA2J,GAAAsD,GAAA;AAAA,SA8BNA,EAAKuO,gBAAAA;AAAkB;AClNhD,MAAMmU,KAAwBtxB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACnC;AAAA,IAAAolB,gBAAAA;AAAAA,IAAA/Y,UAAAA;AAAAA,IAAAmf,mBAAAA;AAAAA,IAAA6F,gBAAAA;AAAAA,IAAApH,aAAAA;AAAAA,IAAAE,YAAAA;AAAAA,IAAA1qB,UAAAA;AAAAA,IAAA2B,WAAAA;AAAAA,EAAAA,IACEtB;AAAM,MAAAG;AAAA,EAAAF,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAC4C7J,IAAA;AAAA,IAAAqxB,sBAAwB;AAAA,MAAAC,UAAY;AAAA,IAAA;AAAA,EAAE,GAAGxxB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAA7F,QAAAyxB,IAAgBC,GAAWC,GAAUC,IAAe1xB,CAAyC,CAAC;AAAE,MAAA0b,GAAAsM,GAAA2J,GAAAxxB,GAAAwnB,GAAAC,GAAAC,GAAAlnB,GAAAgM,GAAAgP,GAAAC,GAAAC,GAAAE,GAAAE,GAAAmI;AAAA,MAAAtkB,EAAA,CAAA,MAAAqlB,KAAArlB,EAAA,CAAA,MAAAsM,KAAAtM,EAAA,CAAA,MAAAoqB,KAAApqB,EAAA,CAAA,MAAAyxB,KAAAzxB,SAAAqB,GAAA;AAChG,UAAAywB,IAAoB1H,EAAUnlB,OAC5BxD,EACF;AAAE,QAAAumB;AAAA,IAAAhoB,EAAA,EAAA,MAAAoqB,KAAApqB,UAAAqB,KACoB2mB,IAAArZ,CAAAA,MAAA;AACpB,YAAA;AAAA,QAAA+W,QAAAA;AAAAA,QAAAqM,MAAAA;AAAAA,MAAAA,IAAyBpjB;AACzB,UAAI,CAACojB,KAAQrM,EAAMrhB,OAAQ0tB,EAAI1tB;AAAG;AAClC,YAAA2tB,IAAoB5H,EAAUvY,UAAW4V,OAAepE,EAASqB,aAAcgB,EAAMrhB,EAAG,GACxF4tB,KAAkB7H,EAAUvY,UAAW2a,OAAenJ,EAASqB,aAAcqN,EAAI1tB,EAAG,GACpFuL,KAAewa,EAAW4H,CAAW,GACrCxZ,IAAe4R,EAAW6H,EAAS;AACnC,MACEriB,IAAMM,SAAW,eACjBN,GAAMO,iBAAkB,aACxBqI,GAAMtI,SAAW,eACjBsI,EAAMrI,iBAAkB,aAI1B9O,EAASS,OAAO2sB,aACdtpB,OAAOugB,EAAMrhB,EAAG,GAChB2tB,IAAcC,KAAd;AAAA,QAAAtD,eAA2CnW,EAAMkM;AAAAA,MAAAA,IAAjD;AAAA,QAAAgK,gBAAiFlW,EAAMkM;AAAAA,MAAAA,CACzF;AAAA,IAAC,GACF1kB,QAAAoqB,GAAApqB,QAAAqB,GAAArB,QAAAgoB,KAAAA,IAAAhoB,EAAA,EAAA;AAnBD,UAAAkyB,IAAsBlK;AAsBnB6J,IAAAA,IAAAM,IAAoBV,IAAAA,GAA6BW,IAAAA,IAA0BF,IAAAA,GACzEhK,IAAAmK,IAAeryB,UAAAoqB,KACPjO,IAAAiO,EAAUnpB,IAAKoK,EAAiC,GAACrL,QAAAoqB,GAAApqB,QAAAmc,KAAAA,IAAAnc,EAAA,EAAA,GAC9CsyB,IAAAA,IAET1W,IAAAwV,GAAImB,MAAQlyB,IAAA,QAAYQ,IAAA,KAASgM,IAAA,eAAyBgP,IAAA,UAAaC,IAAA,OAAqBC,IAAA,cAC1FE,IAAAmO,EAAUnpB,IAAKuxB,CAAAA,MAAA;AACd,YAAAC,IAAyBX,EAAWjgB,UAAW6gB,OAAeA,EAAShO,aAAcrB,EAASqB,QAAS;AAAE,aAEvG,gBAAApkB,EAACmwB,MAEYpvB,WAAAA,GACAgiB,WAAAA,GACKgC,gBAAAA,GACN/Y,UAAAA,GACA,UAAAmmB,KAAoB,GACZ,kBAAAX,EAAYW,IAAmB,CAAC,GAAW/N,UAC/C,cAAAoN,EAAYW,IAAmB,CAAC,GAAW/N,YAPpDrB,EAASqB,QAO2C;AAAA,IACzD,CAEL,GAAC1kB,OAAAqlB,GAAArlB,OAAAsM,GAAAtM,OAAAoqB,GAAApqB,OAAAyxB,GAAAzxB,OAAAqB,GAAArB,OAAA4b,GAAA5b,OAAAkoB,GAAAloB,OAAA6xB,GAAA7xB,OAAAK,GAAAL,QAAA6nB,GAAA7nB,QAAA8nB,GAAA9nB,QAAA+nB,GAAA/nB,QAAAa,GAAAb,QAAA6M,GAAA7M,QAAA6b,GAAA7b,QAAA8b,GAAA9b,QAAA+b,GAAA/b,QAAAic,GAAAjc,QAAAmc,GAAAnc,QAAAskB;AAAAA,EAAA;AAAA1I,IAAAA,IAAA5b,EAAA,CAAA,GAAAkoB,IAAAloB,EAAA,CAAA,GAAA6xB,IAAA7xB,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA,GAAA6nB,IAAA7nB,EAAA,EAAA,GAAA8nB,IAAA9nB,EAAA,EAAA,GAAA+nB,IAAA/nB,EAAA,EAAA,GAAAa,IAAAb,EAAA,EAAA,GAAA6M,IAAA7M,EAAA,EAAA,GAAA6b,IAAA7b,EAAA,EAAA,GAAA8b,IAAA9b,EAAA,EAAA,GAAA+b,IAAA/b,EAAA,EAAA,GAAAic,IAAAjc,EAAA,EAAA,GAAAmc,IAAAnc,EAAA,EAAA,GAAAskB,IAAAtkB,EAAA,EAAA;AAAA,MAAAgoB;AAAA,EAAAhoB,EAAA,EAAA,MAAAyrB,KAAAzrB,EAAA,EAAA,MAAAkqB,KAAAlqB,EAAA,EAAA,MAAAN,KAAAM,UAAAqB,KACD2mB,IAAAkC,sBACEnB,IAAA,EACY1nB,WAAAA,GACH6oB,QAAAA,GACExqB,UAAAA,GACF+rB,QAAAA,EAAAA,CAAiB,IAL5B,MAOOzrB,QAAAyrB,GAAAzrB,QAAAkqB,GAAAlqB,QAAAN,GAAAM,QAAAqB,GAAArB,QAAAgoB,KAAAA,IAAAhoB,EAAA,EAAA;AAAA,MAAAioB;AAAA,EAAAjoB,EAAA,EAAA,MAAA4b,KAAA5b,UAAAsxB,KAAAtxB,EAAA,EAAA,MAAAK,KAAAL,UAAAgoB,KAAAhoB,EAAA,EAAA,MAAAa,KAAAb,UAAA6M,KAAA7M,EAAA,EAAA,MAAA6b,KAAA7b,EAAA,EAAA,MAAA8b,KAAA9b,EAAA,EAAA,MAAA+b,KAAA/b,UAAAic,KAvBVgM,IAAA,gBAAAvZ,EAACkN,GAAA,EAAY,GAAAvb,GAAY,MAAAQ,GAAS,MAAAgM,GAAyB,YAAAgP,GAAa,KAAAC,GAAqB,gBAAAC,GAC1FE,UAAAA;AAAAA,IAAAA;AAAAA,IAeA+L;AAAAA,IAQAsJ;AAAAA,EAAAA,GACH,GAAYtxB,QAAA4b,GAAA5b,QAAAsxB,GAAAtxB,QAAAK,GAAAL,QAAAgoB,GAAAhoB,QAAAa,GAAAb,QAAA6M,GAAA7M,QAAA6b,GAAA7b,QAAA8b,GAAA9b,QAAA+b,GAAA/b,QAAAic,GAAAjc,QAAAioB,KAAAA,IAAAjoB,EAAA,EAAA;AAAA,MAAAmoB;AAAA,EAAAnoB,EAAA,EAAA,MAAAkoB,KAAAloB,EAAA,EAAA,MAAAioB,KAAAjoB,EAAA,EAAA,MAAAmc,KAAAnc,UAAAskB,KA7Bd6D,sBAACD,GAAA,EACQ,OAAA/L,GACGmW,UAAAA,GAEVrK,UAAAA,GA0BF,GAAkBjoB,QAAAkoB,GAAAloB,QAAAioB,GAAAjoB,QAAAmc,GAAAnc,QAAAskB,GAAAtkB,QAAAmoB,KAAAA,IAAAnoB,EAAA,EAAA;AAAA,MAAAooB;AAAA,SAAApoB,EAAA,EAAA,MAAA6xB,KAAA7xB,EAAA,EAAA,MAAA6nB,KAAA7nB,EAAA,EAAA,MAAA8nB,KAAA9nB,EAAA,EAAA,MAAA+nB,KAAA/nB,UAAAmoB,KA/BpBC,IAAA,gBAAA9nB,EAACuxB,KAAoBJ,SAAAA,GAA6BW,oBAAAA,GAA0BF,WAAAA,GAC1E/J,UAAAA,EAAAA,CA+BF,GAAanoB,QAAA6xB,GAAA7xB,QAAA6nB,GAAA7nB,QAAA8nB,GAAA9nB,QAAA+nB,GAAA/nB,QAAAmoB,GAAAnoB,QAAAooB,KAAAA,IAAApoB,EAAA,EAAA,GAhCbooB;AAgCa;AA7DoB,SAAA3mB,GAAA4hB,GAAA;AAAA,SAKlBA,EAASnT,SAAU,eAAemT,EAASlT,iBAAkB;AAAS;AALpD,SAAA9E,GAAAsgB,GAAA;AAAA,SA+BQtI,EAASqB;AAAS;ACxB/D,MAAMiO,KAAuBA,CAACtxB,GAA0BgiB,MAAwC;AAC9F,QAAMuP,IAAWjJ,GACftG,GACAhiB,EAAUS,OAAO4hB,UAAUL,EAAUC,cAAc,GACnDD,EAAU3jB,WAAW2B,EAAU6P,UAAUC,QAAQkS,EAAU3jB,SAASU,IAAI,GAAGI,OAAOX,MACpF;AACA,SAAO+yB,IAAW,gBAAAtyB,EAACI,GAAA,EAAc,MAAMkyB,GAAU,MAAM,IAAG,IAAM/yB;AAClE,GACagzB,KAAsB9yB,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACjC;AAAA,IAAAoB,WAAAA;AAAAA,IAAAkC,QAAAA;AAAAA,IAAAwnB,sBAAAA;AAAAA,EAAAA,IAAoDhrB,GACpD;AAAA,IAAAkC,UAAAA;AAAAA,IAAAilB,aAAAA;AAAAA,IAAAxnB,UAAAA;AAAAA,IAAAurB,UAAAA;AAAAA,IAAAE,oBAAAA;AAAAA,IAAApB,mBAAAA;AAAAA,IAAA2B,cAAAA;AAAAA,IAAAxB,aAAAA;AAAAA,IAAAuB,mBAAAA;AAAAA,IAAAK,UAAAA;AAAAA,IAAAC,YAAAA;AAAAA,EAAAA,IAYIjB,GAA4BzpB,GAAWkC,GAAQwnB,CAAoB,GACvEK,IAAqBH,EAAQG;AAAc,MAAAlrB;AAAA,EAAAF,SAAAuD,KAC5BrD,IAAAmjB,CAAAA,MAAyCkG,GAAShmB,GAAQ8f,CAAS,GAACrjB,OAAAuD,GAAAvD,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAnF,QAAA8yB,IAAe5yB,GACf,CAAA6yB,GAAAC,CAAA,IAAgC/oB,EAAgC,IAAI,GACpE,CAAA+mB,GAAA1C,CAAA,IAAgCrkB,EAAS,EAAK;AAAE,MAAA5J;AAAA,EAAAL,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACX1J,IAAA;AAAA,IAAAqtB,GAAK;AAAA,IAACC,GAAK;AAAA,IAAC3N,OAAS;AAAA,IAACC,QAAU;AAAA,EAAA,GAAGjgB,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAxE,QAAA,CAAA4tB,GAAAC,CAAA,IAA4B5jB,EAAS5J,CAAmC;AAAE,MAAAQ,GAAAgM;AAAA,EAAA7M,SAAAirB,KAKzDpqB,IAAAA,CAAA8E,GAAAstB,OAA0BhI,EAAQgB,UAAWtmB,GAAKstB,EAAe,GAClEpmB,IAAAA,MAAMoe,EAAQe,MAAAA,GAAQhsB,OAAAirB,GAAAjrB,OAAAa,GAAAb,OAAA6M,MAAAhM,IAAAb,EAAA,CAAA,GAAA6M,IAAA7M,EAAA,CAAA;AAAA,MAAA6b,GAAAC,GAAAC;AAAA,EAAA/b,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAIrB8R,IAAA,gBAAAvb,EAACI,GAAA,EAAmB,MAAA,OAAY,MAAA,IAAE,GACnCob,IAAA,gBAAAxb,EAACI,GAAA,EAAmB,MAAA,WAAgB,MAAA,IAAE,GACvCqb,IAAA,gBAAAzb,EAACI,GAAA,EAAmB,MAAA,cAAmB,MAAA,IAAE,GAAIV,OAAA6b,GAAA7b,OAAA8b,GAAA9b,OAAA+b,MAAAF,IAAA7b,EAAA,CAAA,GAAA8b,IAAA9b,EAAA,CAAA,GAAA+b,IAAA/b,EAAA,CAAA;AAAA,MAAAic;AAAA,EAAAjc,SAAAqB,KAE1D4a,IAAAwL,CAAAA,MAAekL,GAAqBtxB,GAAWgiB,CAAS,GAACrjB,OAAAqB,GAAArB,QAAAic,KAAAA,IAAAjc,EAAA,EAAA;AAb3D,QAAAkzB,IAAoBC,GAClBhI,GACAC,GACA;AAAA,IAAAgI,aACevyB;AAAAA,IAAkEwyB,YACnExmB;AAAAA,EAAAA,GAEdimB,GACA;AAAA,IAAAQ,aACezX;AAAAA,IAAsC0X,YACvCzX;AAAAA,IAA0C0X,WAC3CzX;AAAAA,EAAAA,GAEbE,CACF,GACAwX,IAA0BP,EAAWxxB,SAAU;AAAE,MAAAya;AAAA,EAAAnc,UAAAyzB,KACtBtX,IAAAxN,CAAAA,MAAA;AACzB,QAAI,CAAC8kB;AAAiB;AACtB9kB,IAAAA,EAAKsO,eAAAA;AAEL,UAAA6Q,OADenf,EAAK6J,kBAAmBkb,UAAU/kB,EAAK6J,OAAOmb,QAAS,cAA0B,IAAjF9zB,WACS8O,EAAK4J,eAAcwV,sBAAAA;AAC3CF,IAAAA,EAAU;AAAA,MAAAH,GAAKI,GAAIJ;AAAAA,MAAEC,GAAKG,GAAIH;AAAAA,MAAE3N,OAAS8N,GAAI9N;AAAAA,MAAMC,QAAU6N,GAAI7N;AAAAA,IAAAA,CAAS,GAC1EqO,EAAY,EAAI;AAAA,EAAC,GAClBtuB,QAAAyzB,GAAAzzB,QAAAmc,KAAAA,IAAAnc,EAAA,EAAA;AAPD,QAAA4zB,IAA2BzX;AAOzB,MAAA0L,GAAAvD;AAaF,MAbEtkB,UAAA+yB,KAGQzO,IAAAA,MAAA;AACR,QAAI,CAACyO;AAAQ;AACb,UAAAc,IAAgB5F,CAAAA,OAAA;AACd,MAAItf,GAAKmlB,WAAY,KAAKf,EAAQgB,eAAgBhB,EAAQiB,gBAC1DjB,EAAQkB,aAARlB,EAAQkB,aAAetlB,GAAKmlB,QAC5BnlB,GAAKsO,eAAAA;AAAAA,IAAiB;AAExB8V,WAAAA,EAAQmB,iBAAkB,SAASL,GAAS;AAAA,MAAAM,SAAW;AAAA,IAAA,CAAO,GACvD,MAAMpB,EAAQqB,oBAAqB,SAASP,CAAO;AAAA,EAAC,GAC1DhM,IAAA,CAACkL,CAAQ,GAAC/yB,QAAA+yB,GAAA/yB,QAAA6nB,GAAA7nB,QAAAskB,MAAAuD,IAAA7nB,EAAA,EAAA,GAAAskB,IAAAtkB,EAAA,EAAA,IATbuL,GAAU+Y,GASPuD,CAAU,GACT,CAACiE,KAAD,CAAcC;AAAU,WAAS;AAAK,MAAAjE;AAAA,EAAA9nB,UAAAknB,EAAA7B,kBAAArlB,UAAA+pB,KACnBjC,KAAAgC,GAA+BC,GAAmB7C,EAAW7B,cAAe,GAACrlB,EAAA,EAAA,IAAAknB,EAAA7B,gBAAArlB,QAAA+pB,GAAA/pB,QAAA8nB,MAAAA,KAAA9nB,EAAA,EAAA;AAApG,QAAAqlB,KAAuByC;AAA8E,MAAAC;AAAA,EAAA/nB,EAAA,EAAA,MAAAiC,KAAAjC,UAAAqB,KACzE0mB,IAAAtoB,CAAAA,MAAA;AAC1B,UAAAkO,KAAgB1L,EAASxC,EAAIyO,SAAU,GAAUP;AACjD,QAAIA,MAAWlH,GAAqBkH,GAAOjH,MAAO,GAAC;AACjDrF,MAAAA,EAASoU,eAAeW,cAAe;AAAA,QAAA1I,QAAU;AAAA,UAAAC,SAAAA;AAAAA,QAAAA;AAAAA,QAAW1H,OAASxG,EAAIwG;AAAAA,QAAM2H,MAAQnO,EAAImO;AAAAA,MAAAA,CAAO;AAAC;AAAA,IAAA;AAGhGvM,IAAAA,EAASY,SAAS0N,eAAgBlQ,EAAIyO,WAAYzO,EAAImO,IAAK,EAACxC,MAAO3J,EAAe;AAAA,EAAC,GACzFzB,QAAAiC,GAAAjC,QAAAqB,GAAArB,QAAA+nB,KAAAA,IAAA/nB,EAAA,EAAA;AAPD,QAAAq0B,IAA4BtM;AAO1B,MAAAC;AAAA,MAAAhoB,EAAA,EAAA,MAAA0rB,KAAA1rB,UAAAq0B,GAAA;AAAA,QAAApM;AAAA,IAAAjoB,UAAAq0B,KACsCpM,IAAA7L,CAAAA,OACtC,gBAAA9b,EAACkb,IAAA,EAA+B,SAAA/b,GAAIwG,OAClC,UAAA,gBAAA3F,EAACib,IAAA,EACO4N,MAAAA,IACE,SAAA,SACI,cAAA1pB,GAAIwG,OACN,UAAAxG,GAAI6M,UACF,YAAA,GACG,eAAAjB,IACN,SAAAkjB,CAAAA,OAAA;AACP5f,MAAAA,GAAKuO,gBAAAA,GACLmX,EAAoB50B,EAAI;AAAA,IAAC,GAG3B,UAAA,gBAAAa,EAACI,GAAA,EAAoB,MAAAjB,GAAIe,QAAJ,QAA2B,MAAA,GAAA,CAAE,EAAA,CACpD,EAAA,GAdYf,GAAI4E,EAelB,GACDrE,QAAAq0B,GAAAr0B,QAAAioB,KAAAA,IAAAjoB,EAAA,EAAA,GAjBsBgoB,KAAA0D,EAAYzqB,IAAKgnB,CAiBvC,GAACjoB,QAAA0rB,GAAA1rB,QAAAq0B,GAAAr0B,QAAAgoB;AAAAA,EAAA;AAAAA,IAAAA,KAAAhoB,EAAA,EAAA;AAjBF,QAAAsxB,KAAuBtJ;AAkBvB,MAAI,CAAC8D,GAAQ;AAAA,QAAA7D;AAAA,IAAAjoB,EAAA,EAAA,MAAAyrB,KAAAzrB,EAAA,EAAA,MAAAkqB,KAAAlqB,EAAA,EAAA,MAAAN,KAAAM,UAAAqB,KAGN4mB,IAAAiC,IACC,gBAAA5pB,EAACyoB,IAAA,EACY1nB,WAAAA,GACH6oB,QAAAA,GACExqB,UAAAA,GACF+rB,QAAAA,EAAAA,CAAiB,IAL5B,MAOOzrB,QAAAyrB,GAAAzrB,QAAAkqB,GAAAlqB,QAAAN,GAAAM,QAAAqB,GAAArB,QAAAioB,KAAAA,IAAAjoB,EAAA,EAAA;AAAA,QAAAmoB;AAAA,WAAAnoB,EAAA,EAAA,MAAAsxB,MAAAtxB,UAAAioB,KARVE,KAAA,gBAAAzZ,EAAC5N,IAAA,EAAY,MAAA,YAAa,GAAA,QAAY,MAAA,KAAQ,KAAA,OAC3CmnB,UAAAA;AAAAA,MAAAA;AAAAA,MAQAqJ;AAAAA,IAAAA,GACH,GAAStxB,QAAAsxB,IAAAtxB,QAAAioB,GAAAjoB,QAAAmoB,MAAAA,KAAAnoB,EAAA,EAAA,GAVTmoB;AAAAA,EAUS;AAIV,QAAAF,IAAAmJ;AAAI,MAAAjJ;AAAA,EAAAnoB,EAAA,EAAA,MAAAuD,KAAAvD,EAAA,EAAA,MAAA+pB,KAAA/pB,EAAA,EAAA,MAAAqB,EAAAS,UAEYqmB,KAAA1Z,CAAAA,MAAA;AACb,UAAA+d,KAAkBzC,EAAiB5O,KAAMuX,QAAeA,GAAShO,aAAcjW,EAAOhL,KAAM;AAC5F,QAAI4f,IAASnT,SAAW,YAAU;AAChC7O,MAAAA,EAASS,OAAOwyB,sBAAuB/wB,GAAQ8f,GAASqB,QAAS;AAAC;AAAA,IAAA;AAGpErjB,IAAAA,EAASS,OAAOskB,cAAe3X,EAAOhL,KAAM;AAAA,EAAC,GAC9CzD,QAAAuD,GAAAvD,QAAA+pB,GAAA/pB,EAAA,EAAA,IAAAqB,EAAAS,QAAA9B,QAAAmoB,MAAAA,KAAAnoB,EAAA,EAAA;AACO,QAAAooB,KAAA,UACKC,IAAA,QACLC,IAAA,SACFiM,KAAAA,IACI/L,KAAA,WACLC,KAAA,YACAC,KAAA,QACAC,KAAA,KACHE,KAAA,QACOC,KAAA,YACF0L,KAAA,KACQC,KAAAhB,IAAAG,IAAA/zB;AAAkD,MAAA60B;AAAA,EAAA10B,EAAA,EAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAajD2qB,KAAA;AAAA,IAAAzd,GAAK;AAAA,EAAA,GAAQjX,QAAA00B,MAAAA,KAAA10B,EAAA,EAAA;AAAA,MAAA20B;AAAA,EAAA30B,EAAA,EAAA,MAAAqlB,MAAArlB,EAAA,EAAA,MAAAyrB,KAAAzrB,EAAA,EAAA,MAAAsxB,MAAAtxB,UAAAkqB,KAAAlqB,EAAA,EAAA,MAAAN,KAAAM,EAAA,EAAA,MAAA+pB,KAAA/pB,EAAA,EAAA,MAAAqB,KAT7BszB,uBAAC5lB,IAAA,EACcikB,aAAAA,GACR,MAAA,MACH,GAAA,QACA,GAAA,eACG,MAAA,QACA,MAAA,KACkB,uBAAA,IACvB,6BACc,cAAA0B,IAId,UAAA,gBAAAp0B,EAAC+wB,IAAA,EACW,cACChwB,WAAAA,GACC0oB,YAAAA,GACI1E,gBAAAA,IACH6E,aAAAA,GACHxqB,UAAAA,GACS+rB,mBAAAA,GACH6F,gBAAAA,IAAc,GAElC,GAAatxB,QAAAqlB,IAAArlB,QAAAyrB,GAAAzrB,QAAAsxB,IAAAtxB,QAAAkqB,GAAAlqB,QAAAN,GAAAM,QAAA+pB,GAAA/pB,QAAAqB,GAAArB,QAAA20B,MAAAA,KAAA30B,EAAA,EAAA;AACZ,QAAA40B,KAAAnB,IACC,gBAAAnzB,aACQ0wB,MAAAA,GACQ,cAAA6D,CAAAA,MAAavG,EAAY7f,EAAO/E,IAAK,GACtC,aAAA;AAAA,IAAA2Z,WACA;AAAA,IAAc0L,eACVA,MAAMnB;AAAAA,IAAMoB,QACnB;AAAA,MAAAF,UAAY;AAAA,IAAA;AAAA,EAAE,GAGxB,4BAACxS,IAAA,EACC,UAAA,gBAAAhc,EAAA+b,GAAA,YAAA,EACE,UAAA,gBAAA/b,EAAA+b,GAAA,SAAA,EAAmB,MAAA,SAAW,IAAA,MAC3B6W,UAAAA,EAAWjyB,IAAKya,EAYhB,EAAA,CACH,EAAA,CACF,GACF,EAAA,CACF,IA7BD;AA8BO,MAAAoZ;AAAA,SAAA90B,EAAA,EAAA,MAAAqlB,MAAArlB,EAAA,EAAA,MAAAioB,EAAA8M,QAAA/0B,EAAA,EAAA,MAAAmoB,MAAAnoB,EAAA,EAAA,MAAAuoB,MAAAvoB,EAAA,EAAA,MAAAy0B,MAAAz0B,EAAA,EAAA,MAAA20B,MAAA30B,EAAA,EAAA,MAAA40B,MA/EVE,iCACSzP,WACQ,eAAA8C,IAQP,SAAAC,IACK,cAAAC,GACL,SAAAC,GACFiM,UACI,WAAA/L,IACL,MAAAC,IACA,MAAAC,IACA,MAAAC,IACH,GAAAE,IACO,UAAAC,IACF,QAAA0L,IACQ,eAAAC,IAIfE,UAAAA;AAAAA,IAAAA;AAAAA,IAwBCC;AAAAA,EAAAA,GA+BH,GAAY50B,QAAAqlB,IAAArlB,EAAA,EAAA,IAAAioB,EAAA8M,MAAA/0B,QAAAmoB,IAAAnoB,QAAAuoB,IAAAvoB,QAAAy0B,IAAAz0B,QAAA20B,IAAA30B,QAAA40B,IAAA50B,QAAA80B,MAAAA,KAAA90B,EAAA,EAAA,GAhFZ80B;AAgFY;AApLmB,SAAArzB,KAAA;AAAA;AAAA,SAAA4J,GAAA8iB,GAAA;AAAA,SA0EDxf,EAAKuO,gBAAAA;AAAkB;AA1EtB,SAAAxB,GAAA1H,GAAA;AAAA,SAmKjB,gBAAA1T,EAAA+b,GAAA,MAAA,EAAmC,OAAArI,EAAMrO,KAAM,aAC7C,UAAA,gBAAArF,EAACkc,IAAA,EACC,SAAA,IACQ,SAAA,cACD,OAAAxI,EAAM/N,OACP,MAAA+N,EAAMxT,MACA,YAAAwT,EAAM0M,YACR,UAAA1M,EAAMsN,YACJ,YAAAtN,EAAM7S,QAAAA,MARN6S,EAAMrO,GAUtB;AAAY;AC1MvB,MAAMqvB,KAAkCA,CAC7CrqB,GACAsqB,MACG;AACH,MAAItqB,EAAOuqB,QAAS,QAAOvqB,EAAOuqB;AAClC,MAAID,EAAqB,QAAOA;AAChC,QAAME,IAAWxqB,EAAOglB,KAAK,CAAC;AAC9B,SAAOwF,IAAWvuB,OAAOwuB,KAAKD,EAAS/tB,MAAM,EAAEnG,IAAI,CAACoD,OAAiC;AAAA,IAAEA,IAAAA;AAAAA,EAAAA,EAAK,IAAI,CAAA;AAClG,GACagxB,KAA6BA,CAAC1F,GAA8BuF,MAAuC;AAC9G,QAAMI,wBAAgBC,QAAAA;AAMtB,SAAO;AAAA,IAAEC,MALI7F,EAAK1uB,IAAK2uB,CAAAA,MAAQ;AAC7B,YAAMxoB,IAASR,OAAO6uB,YAAYP,EAAQj0B,IAAKy0B,CAAAA,MAAW,CAACA,EAAOrxB,IAAIurB,EAAIxoB,OAAOsuB,EAAOrxB,EAAE,CAAC,CAAC,CAAC;AAC7FixB,aAAAA,EAAUK,IAAIvuB,GAAQwoB,CAAG,GAClBxoB;AAAAA,IACT,CAAC;AAAA,IACckuB,WAAAA;AAAAA,EAAAA;AACjB,GACaM,KAA2CA,CACtD9U,GACAwU,MAEAxU,EAAQ7f,IAAK+S,CAAAA,OAAY;AAAA,EACvB/N,OAAO+N,EAAO/N;AAAAA,EACdzF,MAAMwT,EAAOxT;AAAAA,EACbq1B,aAAa7hB,EAAO6hB;AAAAA,EACpBva,UAAWka,CAAAA,MAAS;AAClB,UAAM7F,IAAO6F,EAAK1uB,QAAS8oB,CAAAA,MAAQ;AACjC,YAAMkG,IAAcR,EAAUjhB,IAAIub,CAAG;AACrC,aAAOkG,IAAc,CAACA,CAAW,IAAI,CAAA;AAAA,IACvC,CAAC;AACD,IAAK9hB,EAAOhG,IAAI2hB,CAAI;AAAA,EACtB;AACF,EAAE,GACSoG,KAA0CA,CACrDP,GACAF,GACAU,MACG;AACH,QAAMt2B,IAAW41B,EAAUjhB,IAAImhB,CAAI,GAAG91B;AACtC,SAAKA,IACEs2B,EAAuBt2B,CAAQ,EACnCuF,OAAQ+O,CAAAA,MAAW,CAACA,EAAOsN,UAAU,EACrCrgB,IAAK+S,CAAAA,OAAY;AAAA,IAChB/N,OAAO+N,EAAO/N;AAAAA,IACdzF,MAAMwT,EAAOxT;AAAAA,IACb8a,UAAUA,CAAC2a;AAAuB,MAAKjiB,EAAO7S,QAAAA;AAAAA;AAAAA,EAAQ,EACtD,IAPkB,CAAA;AAQxB,GACa+0B,KAAqCA,CAAC3S,GAAoBF,MAAsC;AAC3G,QAAM8M,IAAWpqB,GAAYsd,EAAU3jB,QAAQ,KAAK2jB,EAAU3jB,UAAU2E,MAAM;AAC9E,SAAO,sCAAsCkf,CAAU,IAAIF,EAAU8S,UAAU,IAAIhG,CAAQ;AAC7F,GC9BMiG,KAA8C;AAAA,EAAEzG,MAAM,CAAA;AAAG,GAGzD0G,yBAAkBnjB,IAAAA,GAClBojB,KAAiBA,CAAChT,GAAwBD,MAC9C,GAAGC,CAAc,IAAIvd,GAAYsd,EAAU3jB,QAAQ,KAAK,EAAE,IAC/C62B,KAAyBx2B,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACpC;AAAA,IAAAoB,WAAAA;AAAAA,IAAAyP,cAAAA;AAAAA,IAAAuS,WAAAA;AAAAA,EAAAA,IAA+CtjB,GAC/Ci2B,IAA+BvU,GAAmCpgB,CAAS;AAAE,MAAAnB;AAAA,EAAAF,SAAA8Q,EAAAzM,MAAArE,SAAAqjB,KAC5DnjB,IAAAo2B,GAAexlB,EAAYzM,IAAKgf,CAAS,GAACrjB,EAAA,CAAA,IAAA8Q,EAAAzM,IAAArE,OAAAqjB,GAAArjB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAA3D,QAAAw2B,IAAiBt2B;AAA2C,MAAAG;AAAA,EAAAL,SAAAw2B,KACvBn2B,IAAAA,MAAMg2B,GAAWhiB,IAAKmiB,CAAyB,KAAzCJ,IAA0Cp2B,OAAAw2B,GAAAx2B,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAArF,QAAA,CAAA2K,GAAA8rB,CAAA,IAA4BxsB,EAAS5J,CAAgD;AAAE,MAAAQ;AAAA,EAAAb,SAAAw2B,KAChD31B,IAAAA,MAAM,CAACw1B,GAAW9vB,IAAKiwB,CAAQ,GAACx2B,OAAAw2B,GAAAx2B,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAvE,QAAA,CAAA02B,GAAAC,CAAA,IAA8B1sB,EAASpJ,CAAgC,GACvE+1B,IAAmBlhB,GAAO,CAAC;AAAE,MAAA7I,GAAAgP;AAAA,EAAA7b,EAAA,CAAA,MAAAw2B,KAAAx2B,SAAA8Q,KAAA9Q,EAAA,CAAA,MAAAqjB,EAAA3jB,YAAAM,UAAAqB,KACnBwL,IAAAA,MAAA;AACR,QAAA3C,IAAgB;AAChB,UAAA2sB,IAAiBA,MAAA;AACfD,MAAAA,EAAU7oB,UAAV6oB,EAAU7oB,UAAY;AACtB,YAAA+oB,KAAkBF,EAAU7oB;AAC5B9C,cAAOC,QACL4F,EAAYimB,aAAc;AAAA,QAAAr3B,UAAY2jB,EAAS3jB;AAAAA,QAAS+mB,QAAUplB,EAASU,MAAM4oB,gBAAAA;AAAAA,MAAiB,CAAG,CACvG,EAACpgB,KAAMiC,CAAAA,OAAA;AACL,QAAItC,KAAa0sB,EAAU7oB,YAAa+oB,OACxCT,GAAWV,IAAKa,GAAUhqB,EAAI,GAC9BiqB,EAAUjqB,EAAI,GACdmqB,EAAW,EAAK;AAAA,MAAC,CAClB;AAAA,IAAC;AAEJE,IAAAA,EAAAA;AACA,UAAArU,KAAqB1R,EAAYoO,YAAa2X,CAAQ,GACtDG,KAA4BlT,EAAsBziB,CAAS,EAAC41B,8BAA+BtoB,CAAAA,OAAA;AACzF,MAAIA,GAAKuoB,wBAAyBpmB,EAAYzM,MAAKwyB,EAAAA;AAAAA,IAAW,CAC/D;AAAE,WACI,MAAA;AACL3sB,MAAAA,IAAYA,IACR,OAAOsY,MAAiB,aAAYA,GAAAA,IACnCA,IAAYE,QAAAA,GACjBsU,GAAmBtU,QAAAA;AAAAA,IAAU;AAAA,EAC9B,GACA7G,IAAA,CAAC2a,GAAU1lB,GAAcuS,EAAS3jB,UAAW2B,CAAS,GAACrB,OAAAw2B,GAAAx2B,OAAA8Q,GAAA9Q,EAAA,CAAA,IAAAqjB,EAAA3jB,UAAAM,QAAAqB,GAAArB,QAAA6M,GAAA7M,QAAA6b,MAAAhP,IAAA7M,EAAA,EAAA,GAAA6b,IAAA7b,EAAA,EAAA,IAzB1DuL,GAAUsB,GAyBPgP,CAAuD;AAAC,MAAAC;AAAA,EAAA9b,UAAA8Q,EAAAokB,WAAAl1B,UAAA2K,KAC3CmR,IAAAkZ,GAAgCrqB,GAAQmG,EAAYokB,OAAQ,GAACl1B,EAAA,EAAA,IAAA8Q,EAAAokB,SAAAl1B,QAAA2K,GAAA3K,QAAA8b,KAAAA,IAAA9b,EAAA,EAAA;AAA7E,QAAAk1B,IAAgBpZ;AAA8D,MAAAC;AAAA,EAAA/b,UAAAk1B,KAAAl1B,EAAA,EAAA,MAAA2K,EAAAglB,QAClD5T,IAAAsZ,GAA2B1qB,EAAMglB,MAAOuF,CAAO,GAACl1B,QAAAk1B,GAAAl1B,EAAA,EAAA,IAAA2K,EAAAglB,MAAA3vB,QAAA+b,KAAAA,IAAA/b,EAAA,EAAA;AAA5E,QAAAm3B,IAA4Bpb;AAA0E,MAAAE;AAAA,EAAAjc,UAAAk1B,KACvFjZ,IAAArV,OAAM6uB,YACnBP,EAAOjwB,OAAQxD,EAAwB,EAACR,IAAKoK,EAAsC,CACrF,GAACrL,QAAAk1B,GAAAl1B,QAAAic,KAAAA,IAAAjc,EAAA,EAAA;AAFD,QAAAo3B,IAAenb;AAEb,MAAAE;AAAA,EAAAnc,UAAAk1B,KACmB/Y,IAAAvV,OAAM6uB,YACzBP,EAAOjwB,OAAQyW,EAA8B,EAACza,IAAK0a,EAA4C,CACjG,GAAC3b,QAAAk1B,GAAAl1B,QAAAmc,KAAAA,IAAAnc,EAAA,EAAA;AAFD,QAAAq3B,IAAqBlb;AAEnB,MAAAmI;AAAA,EAAAtkB,UAAAk1B,KACY5Q,IAAA1d,OAAM6uB,YAClBP,EAAOjwB,OAAQiX,EAAuB,EAACjb,IAAKsqB,EAAiD,CAC/F,GAACvrB,QAAAk1B,GAAAl1B,QAAAskB,KAAAA,IAAAtkB,EAAA,EAAA;AAFD,QAAAs3B,IAAchT;AAEZ,MAAAuD;AAAA,EAAA7nB,UAAAk1B,KACYrN,IAAAjhB,OAAM6uB,YAClBP,EAAOjwB,OAAQknB,EAAuB,EAAClrB,IAAKs2B,EAA2D,CACzG,GAACv3B,QAAAk1B,GAAAl1B,QAAA6nB,KAAAA,IAAA7nB,EAAA,EAAA;AAFD,QAAAw3B,IAAc3P;AAEZ,MAAAC;AAAA,EAAA9nB,UAAAk1B,KACgBpN,IAAAlhB,OAAM6uB,YACtBP,EAAOjwB,OACGwyB,EAA2B,EAACx2B,IAC/By2B,EAAmE,CAC5E,GAAC13B,QAAAk1B,GAAAl1B,QAAA8nB,KAAAA,IAAA9nB,EAAA,EAAA;AAJD,QAAAgkB,IAAkB8D;AAIhB,MAAAC;AAAA,EAAA/nB,EAAA,EAAA,MAAA8Q,EAAA6mB,cACwC5P,IAAAjX,EAAY6mB,cAAZ,CAAA,GAA6B33B,EAAA,EAAA,IAAA8Q,EAAA6mB,YAAA33B,QAAA+nB,KAAAA,IAAA/nB,EAAA,EAAA;AAAA,MAAAgoB;AAAA,MAAAhoB,UAAAm3B,EAAA7B,aAAAt1B,UAAA+nB,GAAA;AAAA,QAAAE;AAAA,IAAAjoB,EAAA,EAAA,MAAAm3B,EAAA7B,aAAMrN,IAAAjU,CAAAA,OAAa;AAAA,MAAA/N,OACjF+N,EAAM/N;AAAAA,MAAMzF,MACbwT,EAAMxT;AAAAA,MAAkBq1B,aACjB7hB,EAAM6hB;AAAAA,MAAYva,UACrBka,CAAAA,OAAA;AACR,cAAA5F,KAAYuH,EAAK7B,UAAUjhB,IAAKmhB,EAAI;AACpC,QAAI5F,MAAU5b,EAAMhG,IAAK4hB,EAAG;AAAA,MAAE;AAAA,IAAA,IAEhC5vB,EAAA,EAAA,IAAAm3B,EAAA7B,WAAAt1B,QAAAioB,KAAAA,IAAAjoB,EAAA,EAAA,GARuCgoB,IAACD,EAA6B9mB,IAAMgnB,CAQ3E,GAACjoB,EAAA,EAAA,IAAAm3B,EAAA7B,WAAAt1B,QAAA+nB,GAAA/nB,QAAAgoB;AAAAA,EAAA;AAAAA,IAAAA,IAAAhoB,EAAA,EAAA;AARH,QAAA23B,IAAyC3P;AAQrC,MAAAC;AAAA,EAAAjoB,EAAA,EAAA,MAAA8Q,EAAA8mB,oBAEF3P,IAAAnX,EAAY8mB,oBAAZ,CAAA,GAAmC53B,EAAA,EAAA,IAAA8Q,EAAA8mB,kBAAA53B,QAAAioB,KAAAA,IAAAjoB,EAAA,EAAA;AAAA,MAAAmoB;AAAA,EAAAnoB,UAAAm3B,EAAA7B,aAAAt1B,UAAAioB,KADZE,IAAAyN,GACvB3N,GACAkP,EAAK7B,SACP,GAACt1B,EAAA,EAAA,IAAAm3B,EAAA7B,WAAAt1B,QAAAioB,GAAAjoB,QAAAmoB,KAAAA,IAAAnoB,EAAA,EAAA;AAHD,QAAA43B,IAAyBzP;AAGvB,MAAAC;AAAA,EAAApoB,UAAA8Q,KAAA9Q,EAAA,EAAA,MAAAm3B,EAAA7B,aACclN,IAAAyP,CAAAA,MAAA;AACd,UAAAC,IAAYX,EAAK7B,UAAUjhB,IAAKmhB,CAAI;AACpC,IAAK5F,KACD9e,EAAYinB,iBAAqB9sB,QAAOC,QAAS4F,EAAYinB,cAAenI,CAAG,CAAC,EAACxkB,MAAO4sB,EAAe;AAAA,EAAE,GAC9Gh4B,QAAA8Q,GAAA9Q,EAAA,EAAA,IAAAm3B,EAAA7B,WAAAt1B,QAAAooB,KAAAA,IAAApoB,EAAA,EAAA;AAJD,QAAAi4B,KAAgB7P;AAKhB,MAAIsO,GAAO;AAAA,QAAArO;AAAA,IAAAroB,EAAA,EAAA,MAAA8Q,EAAAokB,WAGe7M,KAACvX,EAAYokB,WAAZ,CAAA,GAA0BjwB,OACzCizB,EAA0B,EAACj3B,IAC9Bk3B,EAAiE,GAACn4B,EAAA,EAAA,IAAA8Q,EAAAokB,SAAAl1B,QAAAqoB,KAAAA,IAAAroB,EAAA,EAAA;AAFzE,UAAAo4B,IAAwB/P,GAKQC,KAAA8P,EAAe12B,SAAU,IAAzB02B,IAAAv4B;AAAwD,QAAA0oB;AAAA,WAAAvoB,UAAAsoB,MADtFC,uBAAC1Z,IAAA,EAAQ,GAAA,QAAY,MAAA,KAAS,MAAA,KAAQ,KAAA,KAAO,IAAA,MAAc,UAAA,UACzD,4BAACwpB,IAAA,EAA2B,SAAA/P,IAAwD,GACtF,GAAQtoB,QAAAsoB,IAAAtoB,QAAAuoB,MAAAA,KAAAvoB,EAAA,EAAA,GAFRuoB;AAAAA,EAEQ;AAGZ,MAAI5d,EAAMglB,KAAKjuB,WAAY,GAAC;AAEI,UAAA2mB,IAAAvX,EAAYwnB,cAAZ;AAAoC,QAAAhQ;AAAA,WAAAtoB,UAAA8Q,EAAAynB,oBAAAv4B,UAAAqoB,KAAhEC,sBAACkQ,IAAA,EAAa,GAAA,QAAc,OAAAnQ,GAAmD,aAAAvX,EAAYynB,iBAAAA,CAAiB,GAAIv4B,EAAA,EAAA,IAAA8Q,EAAAynB,kBAAAv4B,QAAAqoB,GAAAroB,QAAAsoB,KAAAA,IAAAtoB,EAAA,EAAA,GAAhHsoB;AAAAA,EAAgH;AAMxG,QAAAD,KAAA8O,EAAK3B;AAAK,MAAAlN;AAAA,EAAAtoB,EAAA,EAAA,MAAAm3B,EAAA7B,aACNhN,IAAAmQ,OAAUtB,EAAK7B,UAAUjhB,IAAKmhB,CAAQ,GAACnxB,MAA7B,IAAmCrE,EAAA,EAAA,IAAAm3B,EAAA7B,WAAAt1B,QAAAsoB,KAAAA,IAAAtoB,EAAA,EAAA;AAAA,MAAAuoB;AAAA,EAAAvoB,UAAA8Q,EAAAzM,MAAArE,UAAAqjB,KACpCkF,IAAA2N,GAAmCplB,EAAYzM,IAAKgf,CAAS,GAACrjB,EAAA,EAAA,IAAA8Q,EAAAzM,IAAArE,QAAAqjB,GAAArjB,QAAAuoB,KAAAA,IAAAvoB,EAAA,EAAA;AAAA,MAAAwoB;AAAA,EAAAxoB,UAAAk1B,KAIlE1M,KAAA0M,EAAOjwB,OAAQyzB,EAAyB,EAACz3B,IAAK03B,EAAqB,GAAC34B,QAAAk1B,GAAAl1B,QAAAwoB,MAAAA,KAAAxoB,EAAA,EAAA;AAAA,MAAAyoB;AAAA,EAAAzoB,UAAAm3B,EAAA7B,aAAAt1B,UAAAg2B,KAQpEvN,KAAAmQ,CAAAA,MAAU7C,GAAwCP,GAAM2B,EAAK7B,WAAYU,CAAsB,GAACh2B,EAAA,EAAA,IAAAm3B,EAAA7B,WAAAt1B,QAAAg2B,GAAAh2B,QAAAyoB,MAAAA,KAAAzoB,EAAA,EAAA;AAAA,MAAA0oB;AAAA,EAAA1oB,EAAA,EAAA,MAAA8Q,EAAAinB,iBAAA/3B,EAAA,EAAA,MAAAm3B,EAAA7B,aAE7F5M,IAAAmQ,CAAAA,MAET7wB,GADKmvB,EAAK7B,UAAUjhB,IAAKmhB,CAAI,KACd1kB,EAAYinB,gBACnC/3B,EAAA,EAAA,IAAA8Q,EAAAinB,eAAA/3B,EAAA,EAAA,IAAAm3B,EAAA7B,WAAAt1B,QAAA0oB,KAAAA,IAAA1oB,EAAA,EAAA;AAAA,MAAA2oB;AAAA,EAAA3oB,UAAAm3B,EAAA7B,aAAAt1B,UAAAg2B,KAC0BrN,KAAAzmB,OACzB6zB,GAAwC7zB,EAAO0tB,KAAMuH,EAAK7B,WAAYU,CAAsB,GAACh2B,EAAA,EAAA,IAAAm3B,EAAA7B,WAAAt1B,QAAAg2B,GAAAh2B,QAAA2oB,MAAAA,KAAA3oB,EAAA,EAAA;AAAA,MAAA6oB;AAAA,SAAA7oB,EAAA,EAAA,MAAA8Q,EAAAgoB,mBAAA94B,EAAA,EAAA,MAAA8Q,EAAAioB,mBAAA/4B,EAAA,EAAA,MAAA8Q,EAAAkoB,iBAAAh5B,EAAA,EAAA,MAAAq3B,KAAAr3B,EAAA,EAAA,MAAAs3B,KAAAt3B,EAAA,EAAA,MAAAo3B,KAAAp3B,EAAA,EAAA,MAAAm3B,EAAA3B,QAAAx1B,EAAA,EAAA,MAAAi4B,MAAAj4B,UAAAgkB,KAAAhkB,EAAA,EAAA,MAAA23B,KAAA33B,EAAA,EAAA,MAAA43B,KAAA53B,EAAA,EAAA,MAAAw3B,KAAAx3B,EAAA,EAAA,MAAAsoB,KAAAtoB,UAAAuoB,KAAAvoB,EAAA,EAAA,MAAAwoB,MAAAxoB,EAAA,EAAA,MAAAyoB,MAAAzoB,EAAA,EAAA,MAAA0oB,KAAA1oB,UAAA2oB,MAvBnGE,KAAA,gBAAAvoB,EAACuO,IAAA,EAAQ,GAAA,QAAY,MAAA,KAAS,MAAA,KAAQ,KAAA,KAAO,IAAA,MAAc,UAAA,UACzD,UAAA,gBAAAvO,EAAC24B,IAAA,EACO,MAAA5Q,IACI,UAAAC,GACS,mBAAAC,GACH6O,gBAAAA,GACIC,oBAAAA,GACPC,aAAAA,GACE,eAAA9O,IACFgP,aAAAA,GACIxT,iBAAAA,GACA,iBAAAlT,EAAYgoB,iBACZ,iBAAAhoB,EAAYioB,iBACd,eAAAjoB,EAAYkoB,eACTpB,kBAAAA,GACND,YAAAA,GACG,eAAAlP,IACHwP,YAAAA,IACM,kBAAAvP,GAIS,2BAAAC,IAG3B,WAAA,GAAA,CAAS,EAAA,CAEb,GAAQ3oB,EAAA,EAAA,IAAA8Q,EAAAgoB,iBAAA94B,EAAA,EAAA,IAAA8Q,EAAAioB,iBAAA/4B,EAAA,EAAA,IAAA8Q,EAAAkoB,eAAAh5B,QAAAq3B,GAAAr3B,QAAAs3B,GAAAt3B,QAAAo3B,GAAAp3B,EAAA,EAAA,IAAAm3B,EAAA3B,MAAAx1B,QAAAi4B,IAAAj4B,QAAAgkB,GAAAhkB,QAAA23B,GAAA33B,QAAA43B,GAAA53B,QAAAw3B,GAAAx3B,QAAAsoB,GAAAtoB,QAAAuoB,GAAAvoB,QAAAwoB,IAAAxoB,QAAAyoB,IAAAzoB,QAAA0oB,GAAA1oB,QAAA2oB,IAAA3oB,QAAA6oB,MAAAA,KAAA7oB,EAAA,EAAA,GA3BR6oB;AA2BQ;AAnH0B,SAAApnB,GAAAi0B,GAAA;AAAA,SAoCPA,EAAMzvB;AAAM;AApCL,SAAAoF,GAAA6tB,GAAA;AAAA,SAoCuB,CAACxD,EAAMrxB,IAAKqxB,EAAMzvB,KAAM;AAAE;AApCjD,SAAAyV,GAAAyd,GAAA;AAAA,SAuCPzD,EAAM3qB;AAAY;AAvCX,SAAA4Q,GAAAyd,GAAA;AAAA,SAuC6B,CAAC1D,EAAMrxB,IAAKqxB,EAAM3qB,WAAY;AAAE;AAvC7D,SAAAmR,GAAAmd,GAAA;AAAA,SA0CP3D,EAAMl1B;AAAK;AA1CJ,SAAA+qB,GAAA+N,GAAA;AAAA,SA0CsB,CAAC5D,EAAMrxB,IAAKqxB,EAAMl1B,IAAkB;AAAC;AA1C3D,SAAA2rB,GAAAoN,GAAA;AAAA,SA6CP7D,EAAM8D;AAAK;AA7CJ,SAAAjC,GAAAkC,GAAA;AAAA,SA6CsB,CAAC/D,EAAMrxB,IAAKqxB,EAAM8D,IAA4B;AAAC;AA7CrE,SAAA/B,GAAAiC,GAAA;AAAA,SAiDZhE,EAAM3R;AAAS;AAjDH,SAAA2T,GAAAiC,GAAA;AAAA,SAkDf,CAACjE,EAAMrxB,IAAKqxB,EAAM3R,QAAoC;AAAC;AAlDxC,SAAAiU,KAAA;AAAA;AAAA,SAAAE,GAAA0B,GAAA;AAAA,SA0EZ,CAAClE,EAAMmE;AAAO;AA1EF,SAAA1B,GAAA2B,GAAA;AAAA,SA2Ed;AAAA,IAAAz1B,IAAMqxB,EAAMrxB;AAAAA,IAAG4B,OAASyvB,EAAMzvB,SAAUyvB,EAAMrxB;AAAAA,EAAAA;AAAK;AA3ErC,SAAAq0B,GAAAqB,GAAA;AAAA,SAgGYrE,EAAMmE;AAAO;AAhGzB,SAAAlB,GAAAqB,GAAA;AAAA,SAgG2CtE,EAAMrxB;AAAG;ACrH1F,MAAM41B,KAAkB,CACtB;AAAA,EAAE51B,IAAI;AAAA,EAAQC,MAAM;AAAK,GACzB;AAAA,EAAED,IAAI;AAAA,EAASC,MAAM;AAAM,CAAC,GAGxBd,KAAWA,CAACC,MAAkB;AAElC,QAAMC,KADUD,EAAMsE,MAAM,GAAG,EAAEmyB,GAAG,EAAE,KAAKz2B,GACpBE,QAAQ,sBAAsB,OAAO,EAAEA,QAAQ,SAAS,GAAG;AAClF,SAAOD,EAAOG,OAAO,CAAC,EAAEC,gBAAgBJ,EAAOK,MAAM,CAAC;AACxD,GAEMo2B,KAAYA,CAAC/yB,MACjBA,EAAOnG,IAAKwC,CAAAA,OAAW;AAAA,EAAEY,IAAIc,OAAO1B,CAAK;AAAA,EAAGa,MAAMd,GAAS2B,OAAO1B,CAAK,CAAC;AAAE,EAAE,GAExE22B,KAAUA,CAACv0B,MAAmD;AAClE,QAAM;AAAA,IAAEvB,MAAAA;AAAAA,IAAM+1B,QAAAA;AAAAA,EAAAA,IAAWx0B,GACnBI,IAAQJ,EAAMI,SAASzC,GAASc,CAAI,GACpCyG,IAAcsvB,EAAOtvB,aACrBgD,IAAUlI,EAAMpC,SAAS42B,EAAOC,SAChCnzB,IAAO;AAAA,IAAE9C,IAAIC;AAAAA,IAAMA,MAAM2B;AAAAA,IAAO8E,aAAAA;AAAAA,EAAAA;AAEtC,MAAIsvB,EAAOj6B,SAAS;AAClB,WAAO;AAAA,MAAE,GAAG+G;AAAAA,MAAM/G,MAAM;AAAA,MAAUkH,cAAcO,OAAOkG,KAAW,CAAC;AAAA,IAAA;AAGrE,MAAIssB,EAAOj6B,SAAS;AAClB,WAAO;AAAA,MAAE,GAAG+G;AAAAA,MAAM/G,MAAM;AAAA,MAAakH,cAAcnC,OAAO6C,EAAQ+F,CAAQ;AAAA,MAAG5H,SAAS8zB;AAAAA,IAAAA;AAGxF,MAAII,EAAOj6B,SAAS;AAClB,WAAIi6B,EAAOE,OACF;AAAA,MAAE,GAAGpzB;AAAAA,MAAM/G,MAAM;AAAA,MAAakH,cAAcnC,OAAO4I,KAAW,EAAE;AAAA,MAAG5H,SAASg0B,GAAUE,EAAOE,IAAI;AAAA,IAAA,IAEnG;AAAA,MAAE,GAAGpzB;AAAAA,MAAM/G,MAAM;AAAA,MAAQkH,cAAcnC,OAAO4I,KAAW,EAAE;AAAA,MAAG5B,YAAY;AAAA,IAAA;AAGnF,MAAIkuB,EAAOj6B,SAAS,WAAWi6B,EAAOE,MAAM;AAC1C,UAAMjzB,IAAerD,MAAMC,QAAQ6J,CAAO,IAAIA,EAAQ9M,IAAIkE,MAAM,IAAI,CAAA;AACpE,WAAO;AAAA,MAAE,GAAGgC;AAAAA,MAAM/G,MAAM;AAAA,MAAa2L,aAAa;AAAA,MAAMzE,cAAAA;AAAAA,MAAcnB,SAASg0B,GAAUE,EAAOE,IAAI;AAAA,IAAA;AAAA,EACtG;AAGF,GAEaC,KAA2BA,CAAC3zB,MACvCA,EAAQ5F,IAAIm5B,EAAO,EAAEn1B,OAAO,CAAC8B,MAA0BA,MAAUlH,MAAS,GAE/D46B,KAAyBA,CAACJ,GAAkC52B,MACnE42B,EAAOj6B,SAAS,YAAkBqD,MAAU,SAC5C42B,EAAOj6B,SAAS,WAAiByH,OAAOpE,CAAK,IAC7C42B,EAAOj6B,SAAS,UAAgB6D,MAAMC,QAAQT,CAAK,IAAIA,EAAMxC,IAAIkE,MAAM,IAAI,CAAA,IACxEA,OAAO1B,CAAK,GC/Cfi3B,KAASA,CAAC70B,MACd,OAAOA,KAAU,WAAW;AAAA,EAAEvB,MAAMuB;AAAM,IAAIA,GAInC80B,KAA2B56B,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACtC;AAAA,IAAA26B,aAAAA;AAAAA,IAAAC,OAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAA5xB,MAAAhJ;AAAAA,EAAAA,IAA8DH,GAAlBmJ,IAAAhJ,MAAAL,SAAA,SAAAK;AAAa,MAAAG;AAAA,EAAAL,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACQ1J,QAAEL,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAnE,QAAA,CAAA+6B,GAAAC,CAAA,IAA4B/wB,EAAqC5J,CAAE,GACnE,CAAA46B,GAAAC,CAAA,IAA8BjxB,EAAS,CAAC;AAAE,MAAApJ;AAAA,EAAAb,SAAA86B,KAEzBj6B,IAAAs6B,CAAAA,OAA6B;AAAA,IAAAA,OAAAA;AAAAA,IAAAC,SAAkBN,IAAiBK,CAAK;AAAA,EAAA,IAAIn7B,OAAA86B,GAAA96B,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAA1F,QAAAq7B,IAAiBx6B;AAA0E,MAAAgG,GAAAgG;AAAA,MAAA7M,EAAA,CAAA,MAAA66B,KAAA76B,SAAA46B,KAAA56B,EAAA,CAAA,MAAAq7B,GAAA;AAE3Fx0B,IAAAA,IAAwC,CAAA;AACxC,eAAK6rB,KAAmBmI,GAAK;AAC3B,YAAA;AAAA,QAAAv2B,MAAAA;AAAAA,QAAA2B,OAAAA;AAAAA,MAAAA,IAAwBy0B,GAAOhI,CAAS,GACxC2H,IAAeO,EAAWU,UAAWh3B,CAAI;AACzC,MAAK+1B,KACLxzB,EAAO+Z,KAAM;AAAA,QAAAtc,MAAAA;AAAAA,QAAA2B,OAAAA;AAAAA,QAAAo0B,QAAAA;AAAAA,QAAA52B,OAA8Bm3B,EAAWW,SAAUj3B,GAAM+2B,EAAShB,EAAMc,KAAM,CAAC;AAAA,MAAA,CAAG;AAAA,IAAC;AAGnFtuB,IAAAA,IAAA2tB,GAAyB3zB,CAAO,GAAC7G,OAAA66B,GAAA76B,OAAA46B,GAAA56B,OAAAq7B,GAAAr7B,OAAA6G,GAAA7G,OAAA6M;AAAAA,EAAA;AAAAhG,IAAAA,IAAA7G,EAAA,CAAA,GAAA6M,IAAA7M,EAAA,CAAA;AAAhD,QAAA0G,IAAemG;AAAkC,MAAAgP;AAAA,EAAA7b,SAAA6G,KAC5BgV,IAAA,IAAI3I,IAAIrM,EAAO5F,IAAKQ,EAAqC,CAAC,GAACzB,OAAA6G,GAAA7G,OAAA6b,KAAAA,IAAA7b,EAAA,CAAA;AAAhF,QAAAw7B,IAAqB3f;AAA4D,MAAAC;AAAA,EAAA9b,EAAA,EAAA,MAAA46B,KAAA56B,UAAAw7B,KAAAx7B,EAAA,EAAA,MAAAq7B,KAEjEvf,IAAAA,CAAA2f,GAAAh4B,MAAA;AACd,UAAAi4B,IAAeF,EAAYnnB,IAAK/P,CAAI;AACpC,IAAK+1B,KACLO,EAAW9sB,SAAUxJ,GAAMm2B,GAAuBJ,GAAQ52B,CAAK,GAAG43B,EAAShB,EAAMc,KAAM,CAAC;AAAA,EAAC,GAC1Fn7B,QAAA46B,GAAA56B,QAAAw7B,GAAAx7B,QAAAq7B,GAAAr7B,QAAA8b,KAAAA,IAAA9b,EAAA,EAAA;AAJD,QAAA27B,IAAgB7f;AAId,MAAAC;AAAA,EAAA/b,EAAA,EAAA,MAAAkJ,KAAAlJ,UAAA27B,KAEmB5f,IAAAA,CAAA1X,GAAAu3B,MAAA;AACnB,QAAI1yB,MAAS,SAAO;AAClB8xB,MAAAA,EAAUjtB,CAAAA,OAAc;AAAA,QAAA,GAAKA;AAAAA,QAAO,CAAG1J,CAAE,GAAGZ;AAAAA,MAAAA,EAAQ;AAAC;AAAA,IAAA;AAGvDk4B,IAAAA,EAAQt3B,GAAIZ,CAAK;AAAA,EAAC,GACnBzD,QAAAkJ,GAAAlJ,QAAA27B,GAAA37B,QAAA+b,KAAAA,IAAA/b,EAAA,EAAA;AAND,QAAA67B,IAAqB9f;AAMnB,MAAAE;AAAA,EAAAjc,EAAA,EAAA,MAAA27B,KAAA37B,UAAA+6B,KAEW9e,IAAAA,MAAA;AACX,eAAK,CAAA6f,GAAAC,CAAA,KAAuBn1B,OAAMC,QAASk0B,CAAM;AAAGY,MAAAA,EAAQr3B,GAAMb,CAAK;AACvEu3B,IAAAA,EAAU,CAAA,CAAE,GACZE,EAAW7vB,EAAgB;AAAA,EAAC,GAC7BrL,QAAA27B,GAAA37B,QAAA+6B,GAAA/6B,QAAAic,KAAAA,IAAAjc,EAAA,EAAA;AAJD,QAAAg8B,IAAa/f;AAIX,MAAAE;AAAA,EAAAnc,EAAA,EAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAEcoS,IAAAA,MAAA;AACd6e,IAAAA,EAAU,CAAA,CAAE,GACZE,EAAWxf,EAAgB;AAAA,EAAC,GAC7B1b,QAAAmc,KAAAA,IAAAnc,EAAA,EAAA;AAHD,QAAAi8B,IAAgB9f;AAGd,MAAAmI;AAAA,EAAAtkB,UAAA+6B,KAEgBzW,IAAA1d,OAAMwuB,KAAM2F,CAAM,GAAC/6B,QAAA+6B,GAAA/6B,QAAAskB,KAAAA,IAAAtkB,EAAA,EAAA;AAArC,QAAAk8B,IAAkB5X,EAAmB5iB,SAAU;AAAE,MAAAmmB;AAAA,EAAA7nB,EAAA,EAAA,MAAAi7B,KAAAj7B,UAAA67B,KAAA77B,EAAA,EAAA,MAAA0G,KAI7CmhB,sBAACsU,IAAA,EAAkCz1B,QAAAA,GAAkBm1B,UAAAA,GAAc,WAAA,MAAjDZ,CAA0D,GAAGj7B,QAAAi7B,GAAAj7B,QAAA67B,GAAA77B,QAAA0G,GAAA1G,QAAA6nB,KAAAA,IAAA7nB,EAAA,EAAA;AAAA,MAAA8nB;AAAA,EAAA9nB,EAAA,EAAA,MAAAk8B,KAAAl8B,UAAAkJ,KAAAlJ,EAAA,EAAA,MAAAg8B,KAC9ElU,IAAA5e,MAAS,WACR,gBAAAwF,EAAC5N,IAAA,EAAW,KAAA,MACV,UAAA;AAAA,IAAA,gBAAAR,EAAC+O,IAAA,EAAY,MAAA,MAAc2sB,SAAAA,GAAgB,UAAA,CAACE,GAAW,UAAA,OAAA,CAEvD;AAAA,IACA,gBAAA57B,EAAC+O,IAAA,EAAY,MAAA,MAAa,SAAA,WAAmB4sB,SAAAA,GAAmB,UAAA,CAACC,GAAW,UAAA,UAAA,CAE5E;AAAA,EAAA,GACF,GACDl8B,QAAAk8B,GAAAl8B,QAAAkJ,GAAAlJ,QAAAg8B,GAAAh8B,QAAA8nB,KAAAA,IAAA9nB,EAAA,EAAA;AAAA,MAAA+nB;AAAA,SAAA/nB,EAAA,EAAA,MAAA6nB,KAAA7nB,UAAA8nB,KAXHC,sBAAClZ,IAAA,EAAU,KAAA,MAAU,MAAA,SACnBgZ,UAAAA;AAAAA,IAAAA;AAAAA,IACCC;AAAAA,EAAAA,GAUH,GAAQ9nB,QAAA6nB,GAAA7nB,QAAA8nB,GAAA9nB,QAAA+nB,KAAAA,IAAA/nB,EAAA,EAAA,GAZR+nB;AAYQ;AA1D4B,SAAAtmB,GAAAoE,GAAA;AAAA,SAgBc,CAACA,EAAKvB,MAAOuB,EAAKw0B,MAAO;AAAC;AAhBxC,SAAAhvB,GAAA1F,GAAA;AAAA,SAmChBA,IAAM;AAAC;AAnCS,SAAA+V,GAAA0gB,GAAA;AAAA,SAwChBz2B,IAAM;AAAC;AChC/B,MAAM02B,KAAgBA,CAACC,MAAkB;AACvC,QAAMC,IAAY,CAAC,GAAG,IAAIl2B,IAAIi2B,CAAG,CAAC;AAClC,MAAIC,EAAU76B,WAAW;AACzB,WAAO66B,EAAU76B,WAAW,IAAI66B,EAAU,CAAC,IAAIA;AACjD,GACMC,KAA6BA,CAACC,MAAmB;AACrD,MAAIA,EAAK/8B,SAAU,QAAOqG,GAAY02B,EAAK/8B,QAAQ;AAErD,GACMg9B,KAAgBA,CAACC,GAAmBC,MACxCD,EAAM71B,QAAS21B,CAAAA,MAAS,CACtBA,GACA,GAAGC,GAAc,CAAC,GAAID,EAAK1kB,YAAY,IAAK,GAAI6kB,EAAiBH,EAAKp4B,EAAE,KAAK,CAAA,CAAG,GAAGu4B,CAAgB,CAAC,CACrG,GACGC,KAAmBA,CAACC,GAA6BF,MACrDE,EAASh2B,QAASi2B,CAAAA,MAAYL,GAAcK,EAAQJ,OAAOC,CAAgB,CAAC,GACxEI,KAA+BA,CACnCF,GACAF,GACAK,MACG;AACH,QAAMN,IAAQE,GAAiBC,GAAUF,CAAgB;AACzD,aAAW72B,KAAek3B,GAAc;AACtC,UAAMjoB,IAAU2nB,EACb13B,OAAQw3B,CAAAA,MAASA,EAAKp4B,OAAO0B,KAAey2B,GAA2BC,CAAI,MAAM12B,CAAW,EAC5F9E,IAAKw7B,CAAAA,MAASA,EAAKp4B,EAAE;AACxB,QAAI2Q,EAAQtT,SAAS,EAAG,QAAO26B,GAAcrnB,CAAO;AAAA,EACtD;AAEF,GACMkoB,KAAkBA,CAACJ,GAA6BK,GAAgBP,MACpEC,GAAiBC,GAAUF,CAAgB,EAAEzhB,KAAMshB,CAAAA,MAASA,EAAKp4B,OAAO84B,CAAM,GACnEC,KAA0BA,CACrCN,GACAF,GACAS,MAGOhB,IADa,OAAOgB,KAAc,WAAW,CAACA,CAAS,IAAKA,KAAa,CAAA,GAC/Cp4B,OAAQk4B,CAAAA,MAAWD,GAAgBJ,GAAUK,GAAQP,CAAgB,CAAC,CAAC,GAEpGU,KAAgBA,CAAC5oB,GAAeC,MAAmBD,EAAKrQ,OAAOsQ,EAAMtQ,MAAMqQ,EAAK6oB,gBAAgB5oB,EAAM4oB,aACtGC,KAAoBA,CAAChlB,GAAsCilB,GAAqBC,MAC/EllB,KACWA,EAAOvH,SAAS,aAAauH,EAAOmlB,UAAU,CAACnlB,CAAM,GACtDwR,KACZ0I,CAAAA,MACCA,EAAUzhB,SAAS,UACnBqsB,GAAc5K,EAAUkL,MAAMH,CAAU,MACvC/K,EAAUhzB,WACPg+B,MAAmB79B,UAAakG,GAAY2sB,EAAUhzB,QAAQ,MAAMqG,GAAY23B,CAAc,IAC9FA,MAAmB79B,OAC3B,IAToB,IAWhBg+B,KAA2BA,CAC/Bf,GACAF,GACAa,GACAC,MACG;AACH,MAAKD;AACL,WAAOpB,GACLQ,GAAiBC,GAAUF,CAAgB,EACxC33B,OAAQw3B,OAASe,GAAkBf,EAAKjkB,QAAQilB,GAAYC,CAAc,CAAC,EAC3Ez8B,IAAKw7B,CAAAA,MAASA,EAAKp4B,EAAE,CAC1B;AACF,GACay5B,KAA2BA,CAACj5B,MAAyC;AAChF,QAAM;AAAA,IAAEi4B,UAAAA;AAAAA,IAAUF,kBAAAA;AAAAA,IAAkBmB,cAAAA;AAAAA,IAAcC,gBAAAA;AAAAA,IAAgBN,gBAAAA;AAAAA,IAAgBO,gBAAAA;AAAAA,EAAAA,IAAmBp5B;AACrG,MAAIk5B,EAAc,QAAOA;AAEzB,QAAMG,IAAoB7B,GACxBQ,GAAiBC,GAAUF,CAAgB,EACxC33B,OAAQw3B,CAAAA,MAASA,EAAK3M,QAAQ,EAC9B7uB,IAAKw7B,CAAAA,MAASA,EAAKp4B,EAAE,CAC1B;AACA,MAAI65B,EAAmB,QAAOA;AAC9B,QAAMC,IAAqBC,GAAkCV,CAAc;AAC3E,MAAIW;AACJ,MAAIJ,GAAgB;AAClB,UAAMK,IAAepB,GAAgBJ,GAAUmB,GAAgBrB,CAAgB;AAI/E,QAHAyB,IAAsBC,IAAe9B,GAA2B8B,CAAY,IAAIz+B,QAC5Ew+B,KAAuBF,EAAmBI,SAASF,CAAmB,KAEtEL,KAAkBR,GAAkBc,GAAc9lB,QAAQwlB,EAAeJ,MAAMI,EAAet+B,QAAQ;AACxG,aAAOu+B;AAAAA,EAEX;AACA,QAAMO,IAAuBxB,GAA6BF,GAAUF,GAAkBuB,CAAkB;AACxG,MAAIK,EAAsB,QAAOA;AACjC,QAAMC,IAAmBZ,GACvBf,GACAF,GACAoB,GAAgBJ,MAChBI,GAAgBt+B,QAClB;AACA,MAAI++B,EAAkB,QAAOA;AAC7B,MAAKR,KACDE,EAAAA,EAAmBz8B,SAAS,KAAK28B;AACrC,WAAOJ;AACT,GACMS,KAAwBA,CAACjC,MAC7BA,EAAKkC,gBAAgB9+B,UAAa48B,EAAKmC,gBAAgB,OAASnC,EAAK1kB,YAAY,CAAA,GAAIrW,WAAW,GACrFm9B,KAA4BA,CAAC/B,MACxCA,EAASr4B,MAAOs4B,OAAYA,EAAQJ,MAAMl4B,MAAMi6B,EAAqB,CAAC,GAClEI,KAAWA,CAACnC,GAAmBQ,GAAgBP,MAAkE;AACrH,aAAWH,KAAQE,GAAO;AACxB,QAAIF,EAAKp4B,OAAO84B,EAAQ,QAAOV;AAC/B,UAAMsC,IAAQD,GAAS,CAAC,GAAIrC,EAAK1kB,YAAY,CAAA,GAAK,GAAI6kB,EAAiBH,EAAKp4B,EAAE,KAAK,CAAA,CAAG,GAAG84B,GAAQP,CAAgB;AACjH,QAAImC,EAAO,QAAOA;AAAAA,EACpB;AACA,SAAO;AACT,GACaC,KAAqBA,CAChClC,GACAK,GACAP,MACG;AACH,aAAWG,KAAWD,GAAU;AAC9B,UAAML,IAAOqC,GAAS/B,EAAQJ,OAAOQ,GAAQP,CAAgB;AAC7D,QAAIH,EAAM,QAAOA;AAAAA,EACnB;AACA,SAAO;AACT,GACMwC,KAAmBA,CAACz+B,GAAiB0+B,MACpCA,sBAEF1jB,IAAA,EAAQ,SAAS0jB,GAAa,WAAW,KACxC,UAAA,gBAAA5+B,EAACsW,GAAA,EAAI,IAAG,QAAO,SAAQ,eAAc,YAAW,UAAS,gBAAe,UACrEpW,aACH,GACF,IANuBA,GASrB2+B,KAAsBA,CAAC1C,MAA0C;AACrE,MAAIj8B;AACJ,SAAIi8B,EAAK2C,gBAAgBv/B,SACvBW,IAAOi8B,EAAK2C,cACH3C,EAAKj8B,SACdA,IAAO,gBAAAF,EAACI,GAAA,EAAc,MAAM+7B,EAAKj8B,MAAK,IAEjCA,MAASX,SAAYA,SAAYo/B,GAAiBz+B,GAAMi8B,EAAKyC,WAAW;AACjF,GACMG,KAAkCA,CAAC5C,MAAmB;AAC1D,MAAIA,EAAKjkB,OAAQ,QAAO;AAAA,IAAEnU,IAAI;AAAA,IAAUi7B,SAAS7C,EAAKjkB;AAAAA,EAAAA;AACtD,MAAIikB,EAAK/8B,SAAU,QAAO;AAAA,IAAE2E,IAAI;AAAA,IAAYi7B,SAAS7C,EAAK/8B;AAAAA,EAAAA;AAE5D,GACM6/B,KAA0BA,CAAC9C,MAA4C;AAC3E,MAAIA,EAAK/8B,SAAU,QAAO+8B,EAAK/8B;AAEjC,GACM8/B,KAA2BA,CAACjsB,MAA2C;AAC3E,MAAKA;AACL,WACE,gBAAAjT,EAACsW,GAAA,EACC,SAAQ,KACR,eAAc,QACd,SAAQ,eACR,YAAW,UACX,YAAW,sBACX,aAAa;AAAA,MAAEqZ,SAAS;AAAA,IAAA,GAExB,UAAA,gBAAA3vB,EAACkT,IAAA,EAAgB,SAAAD,EAAA,CAAiB,EAAA,CACpC;AAEJ,GACMksB,KAA4BA,CAChChD,GACA/8B,GACA6T,MACG;AACH,MAAIkpB,EAAK/b,eAAe7gB,OAAW,QAAO48B,EAAK/b;AAC/C,QAAMtM,IAAWorB,GAAyBjsB,CAAO;AACjD,MAAIa,EAAU,QAAOA;AACrB,QAAMsrB,IAAYhgC,GAAUC,UAAUggC,eAChCC,IAAYlgC,GAAUC,UAAUkgC;AACtC,MAAIngC,EAAAA,GAAUU,SAAS,eAAe,OAAOs/B,KAAc,YAAY,OAAOE,KAAc;AAG5F,6BAAQE,IAAA,EAAW,WAAAJ,GAAsB,WAAAE,GAAsB,SAAQ,SAAQ,MAAK,SAAO;AAC7F,GACMG,KAA6BA,CAAChD,MAAuD;AACzF,MAAI,GAACA,EAAQiD,cAAcjD,EAAQJ,MAAMj7B,SAAS;AAClD,WAAO;AAAA,MACL2C,IAAI,GAAG04B,EAAQ14B,EAAE;AAAA,MACjB4B,OAAO82B,EAAQiD,WAAWp/B;AAAAA,MAC1BmK,aAAagyB,EAAQiD,WAAWj1B;AAAAA,MAChCvK,MAAMu8B,EAAQiD,WAAWx/B,OAAO,gBAAAF,EAACI,KAAc,MAAMq8B,EAAQiD,WAAWx/B,KAAAA,CAAK,IAAMX;AAAAA,MACnFyM,UAAU;AAAA,MACV2zB,YAAY;AAAA,IAAA;AAEhB,GACMC,KAAiBA,CACrBzD,GACAG,GACA16B,MACG;AACH,QAAMi+B,IAAmBd,GAAgC5C,CAAI,GACvD/8B,IAAW6/B,GAAwB9C,CAAI,GACvC2D,IAAiB1gC,IAAW;AAAA,IAAEA,UAAAA;AAAAA,EAAAA,IAAaG,QAC3CwgC,IAAmBtf,GAA2B;AAAA,IAClDD,SAAS2b,EAAK6D;AAAAA,IACdxrB,UAAU2nB,EAAK8D,mBAAmB9D,EAAK3nB,aAAapV,IAAW8hB,GAAwB9hB,EAASU,IAAI,IAAIP;AAAAA,IACxGwB,WAAWa,EAAQb;AAAAA,IACnBa,SAASk+B;AAAAA,IACT1gB,gBAAgBxd,EAAQwd;AAAAA,IACxBzL,iBAAiB/R,EAAQ+R;AAAAA,EAAAA,CAC1B,GACKusB,IAAY/D,EAAK3nB,YAAYurB,EAAiB3+B,SAAS,IAAI2+B,IAAmBxgC,QAC9E0gB,IAAY,IAAIrN,IACpBhR,EAAQb,UAAU8R,YAAYC,uBAAAA,EAAyBnS,IAAKuf,CAAAA,MAAM,CAACA,EAAEtS,WAAWsS,EAAEnN,UAAU,CAAC,CAC/F,GACME,IAAUkpB,EAAKvuB,YAAYqS,EAAUlM,IAAIooB,EAAKvuB,SAAS,IAAIrO;AAmCjE,SAlC+B;AAAA,IAC7BwE,IAAIo4B,EAAKp4B;AAAAA,IACTo8B,WAAWhE,EAAKgE;AAAAA,IAChBx6B,OAAOw2B,EAAKx2B;AAAAA,IACZ8E,aAAa0xB,EAAK1xB;AAAAA,IAClBvK,MAAM2+B,GAAoB1C,CAAI;AAAA,IAC9B5M,WAAW4M,EAAK5M;AAAAA,IAChBvjB,UAAUmwB,EAAKnwB;AAAAA,IACf2zB,YAAYxD,EAAKwD;AAAAA,IACjBtB,aAAalC,EAAKkC;AAAAA,IAClB+B,wBAAwBjE,EAAKiE;AAAAA,IAC7BC,SAASlE,EAAKkE;AAAAA,IACdC,YAAYnE,EAAKmE;AAAAA,IACjBC,SAASpE,EAAKoE;AAAAA,IACdC,SAASrE,EAAKqE;AAAAA,IACd7N,iBAAiBwJ,EAAKxJ;AAAAA,IACtBnS,SAASI,GAAsB;AAAA,MAC7BJ,SAAS2b,EAAK3b;AAAAA,MACdzf,WAAWa,EAAQb;AAAAA,MACnBa,SAASk+B;AAAAA,MACT1gB,gBAAgBxd,EAAQwd;AAAAA,MACxBzL,iBAAiB/R,EAAQ+R;AAAAA,IAAAA,CAC1B;AAAA,IACDyM,YAAY+e,GAA0BhD,GAAM/8B,GAAU6T,CAAO;AAAA,IAC7DitB,WAAAA;AAAAA,IACAH,kBAAkBA,EAAiB3+B,SAAS,IAAI2+B,IAAmBxgC;AAAAA,IACnE,GAAI48B,EAAKsE,gBAAgB;AAAA,MAAEA,eAAetE,EAAKsE;AAAAA,IAAAA,IAAkB,CAAA;AAAA,IACjEnC,aAAanC,EAAKuE;AAAAA,IAClBC,aAAaj5B,EAAQm4B;AAAAA,IACrBA,kBAAAA;AAAAA,IACApoB,UAAU,CAAC,GAAI0kB,EAAK1kB,YAAY,CAAA,GAAK,GAAI6kB,EAAiBH,EAAKp4B,EAAE,KAAK,CAAA,CAAG,EAAEpD,IAAK89B,OAC9EmB,GAAenB,GAAOnC,GAAkB16B,CAAO,CACjD;AAAA,EAAA;AAGJ,GACag/B,KAAoBA,CAC/BnE,GACAH,GACA16B,MACG;AACH,QAAMi/B,IAAYpB,GAA2BhD,CAAO;AACpD,SAAO;AAAA,IACL14B,IAAI04B,EAAQ14B;AAAAA,IACZo8B,WAAW1D,EAAQ0D;AAAAA,IACnBx6B,OAAO82B,EAAQ92B;AAAAA,IACf6a,SAASI,GAAsB;AAAA,MAC7BJ,SAASic,EAAQjc;AAAAA,MACjBzf,WAAWa,EAAQb;AAAAA,MACnBqe,gBAAgBxd,EAAQwd;AAAAA,MACxBzL,iBAAiB/R,EAAQ+R;AAAAA,IAAAA,CAC1B;AAAA,IACD+sB,aAAajE,EAAQiE;AAAAA,IACrBL,SAAS5D,EAAQ4D;AAAAA,IACjBC,YAAY7D,EAAQ6D;AAAAA,IACpB3N,iBAAiB8J,EAAQ9J;AAAAA,IACzB0J,OAAOwE,IAAY,CAACA,CAAS,IAAIpE,EAAQJ,MAAM17B,IAAKw7B,CAAAA,MAASyD,GAAezD,GAAMG,GAAkB16B,CAAO,CAAC;AAAA,EAAA;AAEhH,GCtSak/B,KAAmBrhC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC9B;AAAA,IAAAgN,SAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,IAAA7L,WAAAA;AAAAA,IAAAsI,SAAAA;AAAAA,EAAAA,IAA0D5J,GAG7CG,IAAA+M,GAAOA,WAAP;AAAwB,MAAA5M;AAAA,EAAAL,EAAA,CAAA,MAAAqB,EAAAY,YAEpB5B,IAAAwE,CAAAA,MACXxD,EAASY,SAASiT,WAAYrQ,EAAKqJ,SAEL,IAD1B7M,EAASY,SAAS0V,mBAAoB9S,EAAKqJ,WAAYrJ,EAAK+I,MAAO/I,EAAK3C,SAAU2C,EAAKsJ,YAC7D,IAA1BlD,QAAOC,QAASrG,EAAK+I,IAAK,GAAC5N,EAAA,CAAA,IAAAqB,EAAAY,UAAAjC,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AAAA,EAAAb,SAAAiN,KAG1BpM,WAAAgM,MAAA;AAAO,UAAA;AAAA,MAAAe,MAAAA;AAAAA,IAAAA,IAAAf;AACZ,UAAMI,GAAOe,IAAMJ,CAAI;AAAA,EAAC,GACzB5N,OAAAiN,GAAAjN,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAA6M;AAAA,SAAA7M,EAAA,CAAA,MAAA2J,KAAA3J,EAAA,CAAA,MAAAkN,KAAAlN,EAAA,CAAA,MAAAE,KAAAF,EAAA,CAAA,MAAAK,KAAAL,SAAAa,KAXHgM,IAAA,gBAAAvM,EAAC0M,MACU,SAAA9M,GACSgN,kBAAAA,GACL,aAAA7M,GAKJsJ,SAAAA,GACF,OAAA9I,EAAAA,CAEN,GACDb,OAAA2J,GAAA3J,OAAAkN,GAAAlN,OAAAE,GAAAF,OAAAK,GAAAL,OAAAa,GAAAb,OAAA6M,KAAAA,IAAA7M,EAAA,CAAA,GAZF6M;AAYE,GChBAw0B,KAAuB,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,GAEhEC,KAAmBA,MAAA;AAAA,QAAAthC,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAA,SAAAF,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACvB7J,IAAA,gBAAAI,EAACuO,IAAA,EAAU,KAAA,MAAQ,IAAA,MAAQ,IAAA,MAAK,eAAA,IAC7BwyB,UAAAA,GAAoBpgC,IAAKQ,EAEzB,GACH,GAAQzB,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAJRE;AAIQ,GAwBGqhC,KAAexhC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC1B;AAAA,IAAAqN,OAAAA;AAAAA,IAAAopB,SAAAA;AAAAA,IAAA8K,eAAAA;AAAAA,IAAA1E,UAAAA;AAAAA,IAAA2E,0BAAAA;AAAAA,IAAAC,WAAAA;AAAAA,IAAAC,wBAAAA;AAAAA,IAAA5D,cAAAA;AAAAA,IAAA6D,iBAAAA;AAAAA,IAAAC,oBAAAA;AAAAA,IAAAC,WAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAC,cAAAA;AAAAA,IAAAC,mBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAC,SAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAC,YAAAA;AAAAA,EAAAA,IAmBItiC;AAEJ,MAAIuN,GAAK;AAAA,QAAApN;AAAA,WAAAF,SAAAsN,KAASpN,IAAA,gBAAAI,EAACk4B,IAAA,EAAiB,OAAA,wBAAoClrB,aAAAA,GAAK,GAAItN,OAAAsN,GAAAtN,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAA/DE;AAAAA,EAA+D;AACjF,MAAIw2B;AAAO,WAAS;AACpB,MAAI8K,GAAa;AAAA,QAAAthC;AAAA,WAAAF,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAAS7J,sBAACohC,IAAA,EAAgB,GAAGthC,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAApBE;AAAAA,EAAoB;AAI9C,MAAI48B,EAAQp7B,WAAY,MAAM+/B,GAAwB//B,UAAxB,OAA2C,KAArE,CAA2EigC,GAAsB;AAAA,QAAAzhC;AAAA,WAAAF,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAC5F7J,IAAA,gBAAAI,EAACk4B,IAAA,EAAgB,MAAA,SAAc,OAAA,iBAAe,GAAGx4B,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAAjDE;AAAAA,EAAiD;AACzD,MAAAA;AAAA,EAAAF,SAAA88B,KAae58B,IAAA2+B,GAA0B/B,CAAQ,GAAC98B,OAAA88B,GAAA98B,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,SAAAL,EAAA,CAAA,MAAA+9B,KAAA/9B,EAAA,CAAA,MAAAyhC,KAAAzhC,EAAA,CAAA,MAAAmiC,KAAAniC,EAAA,CAAA,MAAA0hC,KAAA1hC,EAAA,EAAA,MAAA4hC,KAAA5hC,EAAA,EAAA,MAAA6hC,KAAA7hC,EAAA,EAAA,MAAAoiC,KAAApiC,UAAAqiC,KAAAriC,EAAA,EAAA,MAAAkiC,KAAAliC,EAAA,EAAA,MAAAiiC,KAAAjiC,EAAA,EAAA,MAAAgiC,KAAAhiC,EAAA,EAAA,MAAA+hC,KAAA/hC,EAAA,EAAA,MAAA8hC,KAAA9hC,EAAA,EAAA,MAAA88B,KAAA98B,EAAA,EAAA,MAAAE,KAVjDG,sBAACiiC,MACWxF,UAAAA,GACgB2E,0BAAAA,GACfC,WAAAA,GACME,iBAAAA,GACGC,oBAAAA,GACN9D,cAAAA,GACH,YAAA,WACA,YAAA,MACH,SAAA,OACI,YAAA79B,GACD4hC,WAAAA,GACMC,iBAAAA,GACHC,cAAAA,GACKC,mBAAAA,GACHC,gBAAAA,GACPC,SAAAA,GACGC,YAAAA,GACAC,YAAAA,EAAAA,CAAU,GACtBriC,OAAA+9B,GAAA/9B,OAAAyhC,GAAAzhC,OAAAmiC,GAAAniC,OAAA0hC,GAAA1hC,QAAA4hC,GAAA5hC,QAAA6hC,GAAA7hC,QAAAoiC,GAAApiC,QAAAqiC,GAAAriC,QAAAkiC,GAAAliC,QAAAiiC,GAAAjiC,QAAAgiC,GAAAhiC,QAAA+hC,GAAA/hC,QAAA8hC,GAAA9hC,QAAA88B,GAAA98B,QAAAE,GAAAF,QAAAK,KAAAA,IAAAL,EAAA,EAAA,GAnBFK;AAmBE;AAjFmB,SAAAoB,GAAAue,GAAApO,GAAA;AAAA,SAGnB,gBAAAtR,EAACiiC,IAAA,EAA0C,QAAA,KAAWviB,OAAAA,GAAoB,cAAA,KAAA,MAAxDA,CAAK,IAAIpO,CAAK,EAA8C;AAAG;ACIhF,MAAM4wB,KAAqBA,CAACtgC,MACjCA,EAAQ6hB,SAAS0e,WACb,CAACC,GAAsBC,MAA0B;AAC/C,QAAM/yB,IAASovB,GAAmB98B,EAAQ46B,UAAU4F,GAAcxgC,EAAQ06B,gBAAgB,GACpFpkB,IAASmqB,IACV3D,GAAmB98B,EAAQ46B,UAAU6F,GAAczgC,EAAQ06B,gBAAgB,KAAK/8B,SACjFA;AACJ,MAAI,CAAC+P,KAAW+yB,KAAgB,CAACnqB,EAAS;AAC1C,QAAMoqB,IAAQ9e,EAAsB5hB,EAAQb,SAAS;AACrD,EAAK4J,QAAQC,QACXhJ,EAAQ6hB,SAAS0e,WAAW7yB,GAAQ4I,GAAQ;AAAA,IAC1C9Y,UAAUwC,EAAQxC;AAAAA,IAClBikB,QAAQzhB,EAAQyhB;AAAAA,IAChB/hB,OAAOghC,EAAMC,aAAa3gC,EAAQ6hB,SAAS1f,EAAE;AAAA,IAC7C2a,SAASA,MAAM4jB,EAAM5jB,QAAQ9c,EAAQ6hB,SAAS1f,EAAE;AAAA,IAChDy+B,iBAAkB3F,CAAAA,MAAWyF,EAAME,gBAAgB5gC,EAAQ6hB,SAAS1f,IAAI84B,CAAM;AAAA,EAAA,CAC/E,CACH,EAAE/xB,MAAMlJ,EAAQ6gC,OAAO;AACzB,IACAljC,QCrCOmjC,KAA0CA,CAACxqB,OACxCA,EAAOvH,SAAS,aAAauH,EAAOmlB,UAAU,CAACnlB,CAAM,GACtDwR,KAAMvqB,CAAAA,MAASA,EAAKwR,SAAS,UAAUxR,EAAKwR,SAAS,OAAO,GCO9DgyB,KAAiBljC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC5B;AAAA,IAAAijC,SAAAA;AAAAA,IAAAl3B,aAAA9L;AAAAA,IAAAuD,OAAAA;AAAAA,IAAA8I,UAAAA;AAAAA,EAAAA,IAAmExM,GAAlDiM,IAAA9L,MAAAL,SAAA,iBAAAK;AACjB,MAAI,CAACgjC;AAAO,WAAS;AAAK,MAAA7iC;AAAA,EAAAL,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAII1J,IAAA,gBAAAC,EAACI,GAAA,EAAmB,MAAA,UAAe,MAAA,IAAE,GAAIV,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AAAA,EAAAb,SAAAuM,KAOrD1L,IAAA8N,CAAAA,MAAWpC,EAASoC,EAAK6J,OAAO/U,KAAM,GAACzD,OAAAuM,GAAAvM,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAA6M;AAAA,SAAA7M,EAAA,CAAA,MAAAgM,KAAAhM,SAAAa,KAAAb,EAAA,CAAA,MAAAyD,KARvDoJ,IAAA,gBAAAvM,EAAC6iC,IAAA,EAAmB,YAAA,GAAqB,mBAAA,OAAkB,aAAA,iBAAmB,IAAA,MAC5E,UAAA,gBAAA7iC,EAAC8iC,IAAA,EAAyB,cAAA/iC,GAAiD,OAAA,QACzE,UAAA,gBAAAC,EAAC+iC,IAAA,EACM,MAAA,MACG,SAAA,cACIr3B,cAAAA,GACCA,aAAAA,GACNvI,OAAAA,GACG,UAAA5C,EAAAA,IAEd,GACF,GAASb,OAAAgM,GAAAhM,OAAAa,GAAAb,OAAAyD,GAAAzD,OAAA6M,KAAAA,IAAA7M,EAAA,CAAA,GAXT6M;AAWS,GCzBPy2B,KAA0BA,CAACV,GAA6BW,GAAgBj2B,MAC5EA,aAAiB5F,SACjB4F,EAAMgB,YAAY,iCAAiCi1B,CAAM,MACzD,CAACX,EAAMY,gBAAgBD,CAAM,GAQzB7G,KAAgBA,CAAClH,MAAyB,CAC9C,GAAGA,EAAKiO,OAAO38B,QAASi2B,CAAAA,MAAYA,EAAQJ,KAAK,GACjD,GAAGnH,EAAKkO,KAAK58B,QAASi2B,CAAAA,MAAYA,EAAQJ,KAAK,GAC/C,GAAGnH,EAAKmO,OAAO78B,QAASi2B,CAAAA,MAAYA,EAAQJ,KAAK,CAAC,GAGvCiH,KAA2B,OACtChB,GACAW,GACA/N,GACAoM,GACApqB,IAAwB,OACrB;AACH,QAAMqsB,IAAW,IAAIx9B,IAAIu7B,CAAe,GAClCkC,wBAAcz9B,IAAAA,GACdu2B,IAA+C,CAAA,GAE/CmH,IAAY,OAAOpH,MAAsB;AAC7C,UAAM1xB,QAAQ+4B,IACZrH,EAAM17B,IAAI,OAAOw7B,MAAS;AACxB,UAAI,CAACoH,EAASt9B,IAAIk2B,EAAKp4B,EAAE,KAAKy/B,EAAQv9B,IAAIk2B,EAAKp4B,EAAE,EAAG;AACpDy/B,MAAAA,EAAQt9B,IAAIi2B,EAAKp4B,EAAE;AACnB,YAAM0T,IAAW0kB,EAAK1kB,YAAa,MAAM6qB,EAAMqB,YAAYV,GAAQ9G,GAAMjlB,CAAG;AAC5E,MAAKilB,EAAK1kB,aAAU6kB,EAAiBH,EAAKp4B,EAAE,IAAI0T,IAChD,MAAMgsB,EAAUhsB,CAAQ;AAAA,IAC1B,CAAC,CACH;AAAA,EACF;AAEA,eAAMgsB,EAAUrH,GAAclH,CAAI,CAAC,GAC5BoH;AACT,GAMasH,KAAwBA,CAACC,GAA6BC,MAAuBD,MAAiBC,GAE9FC,KAA4BA,CAACzB,GAA6BW,MAAmB;AACxF,QAAMe,IAAO1B,EAAMY,gBAAgBD,CAAM;AACzC,MAAKe;AACL,eAAWC,KAAaD,EAAKE,6BAA6B,CAAA;AACxD5B,MAAAA,EAAM6B,mBAAmBlB,GAAQgB,GAAW,EAAI;AAEpD,GAEaG,KAAe,OAC1B9B,GACAW,GACA/rB,IAAwB,CAAA,MACW;AACnC,MAAI,CAACorB,EAAMY,gBAAgBD,CAAM,EAAG,QAAO;AAE3C,MAAI;AACF,UAAM,CAACE,GAAQC,GAAMC,CAAM,IAAI,MAAM14B,QAAQ+4B,IAAI,CAC/CpB,EAAM+B,UAAUpB,GAAQ/rB,CAAG,GAC3BorB,EAAMgC,QAAQrB,GAAQ/rB,CAAG,GACzBorB,EAAMiC,UAAUtB,GAAQ/rB,CAAG,CAAC,CAC7B;AACD,WAAO;AAAA,MAAEisB,QAAAA;AAAAA,MAAQC,MAAAA;AAAAA,MAAMC,QAAAA;AAAAA,IAAAA;AAAAA,EACzB,SAASr2B,GAAO;AACd,QAAIg2B,GAAwBV,GAAOW,GAAQj2B,CAAK,EAAG,QAAO;AAC1D,UAAMA;AAAAA,EACR;AACF,GC/Daw3B,KAAcA,CAAAzjC,GAAA+iC,GAAA1kC,GAAAikB,GAAA1e,MAAA;AAAA,QAAAjF,IAAAC,EAAA,EAAA;AAAA,MAAAC;AAAA,EAAAF,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAO+B7J,IAAA,CAAA,GAAEF,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAA1D,QAAA,CAAAyjC,GAAAsB,CAAA,IAA4B96B,EAA4B/J,CAAE;AAAE,MAAAG;AAAA,EAAAL,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACR1J,IAAA,CAAA,GAAEL,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAtD,QAAA,CAAA0jC,GAAAsB,CAAA,IAAwB/6B,EAA4B5J,CAAE;AAAE,MAAAQ;AAAA,EAAAb,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACAlJ,IAAA,CAAA,GAAEb,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAA1D,QAAA,CAAA2jC,GAAAsB,CAAA,IAA4Bh7B,EAA4BpJ,CAAE;AAAE,MAAAgM;AAAA,EAAA7M,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACyB8C,QAAE7M,OAAA6M,KAAAA,IAAA7M,EAAA,CAAA;AAAvF,QAAA,CAAA48B,GAAAsI,CAAA,IAAgDj7B,EAAqC4C,CAAE,GACvF,CAAAS,GAAAC,CAAA,IAA0BtD,EAAwB,IAAI,GACtD,CAAAysB,GAAAC,CAAA,IAA8B1sB,EAAS,EAAI,GAC3Ck7B,IAAwBzvB,GAAsB,IAAI,GAClD0vB,IAAwB1vB,GAAO,CAAC;AAAE,MAAAmG,GAAAC;AAAA,EAAA9b,EAAA,CAAA,MAAAiF,KAAAjF,EAAA,CAAA,MAAAN,KAAAM,EAAA,CAAA,MAAAokC,KAAApkC,EAAA,CAAA,MAAA2jB,KAAA3jB,SAAAqB,KAExBwa,IAAAA,MAAA;AACR,QAAA3R,IAAgB;AAChBm6B,IAAAA,GAA0BvgB,EAAsBziB,CAAS,GAAG+iC,CAAU;AAEtE,UAAAiB,IAAiBA,MAAA;AACf,YAAAC,IAAuBF,EAAer3B,UAAfq3B,EAAer3B,UAAQ;AAC9C,MAAIm2B,GAAsBiB,EAAep3B,SAAUq2B,CAAU,KAAGzN,EAAW,EAAI,GAC/EppB,EAAS,IAAI,GACRm3B,GAAa5gB,EAAsBziB,CAAS,GAAG+iC,GAAY;AAAA,QAAA1kC,UAAAA;AAAAA,QAAAikB,QAAAA;AAAAA,QAAA1e,QAAAA;AAAAA,MAAAA,CAA4B,EAACsF,KACrF,OAAAirB,MAAA;AACJ,YAAItrB,KAAao7B,MAAiBF,EAAer3B;AAAQ;AACzD,cAAAw3B,IAA4BzhB,EAAsBziB,CAAS,EAACmiC,gBAAiBY,CAAU,GACvFrsB,IACEyd,KAAA+P,IAAA,MACU3B,GACJ9f,EAAsBziB,CAAS,GAC/B+iC,GACA5O,GACA1R,EAAsBziB,CAAS,EAACwhC,aAAcuB,CAAU,EAACxC,iBACzD;AAAA,UAAAliC,UAAAA;AAAAA,UAAAikB,QAAAA;AAAAA,UAAA1e,QAAAA;AAAAA,QAAAA,CACF,IAPJ,CAAA;AASF,QAAIiF,KAAao7B,MAAiBF,EAAer3B,YACjDo3B,EAAep3B,UAAWq2B,GAC1BW,EAAUvP,GAAIiO,UAAJ,EAAkB,GAC5BuB,EAAQxP,GAAIkO,QAAJ,EAAgB,GACxBuB,EAAUzP,GAAImO,UAAJ,EAAkB,GAC5BuB,EAAoBntB,CAAQ,GAC5B4e,EAAW,EAAK;AAAA,MAAC,CAClB,EAACvrB,MACKo6B,CAAAA,MAAA;AACL,QAAIt7B,KAAao7B,MAAiBF,EAAer3B,YACjDR,EAASi4B,aAAqB99B,QAAQ89B,EAASl3B,UAAtC,oCAAqF,GAC9FqoB,EAAW,EAAK;AAAA,MAAC,CAClB;AAAA,IAAC;AAGN0O,IAAAA,EAAAA;AACA,UAAAI,IAAmB3hB,EAAsBziB,CAAS,EAACqkC,aAAc/2B,CAAAA,MAAA;AAC/D,MAAIA,EAAK40B,WAAYa,KAAYiB,EAAAA;AAAAA,IAAW,CAC7C;AAAE,WACI,MAAA;AACLn7B,MAAAA,IAAYA,IACZu7B,EAAU/iB,QAAAA;AAAAA,IAAU;AAAA,EACrB,GACA5G,IAAA,CAAC7W,GAAQvF,GAAUikB,GAAQtiB,GAAW+iC,CAAU,GAACpkC,OAAAiF,GAAAjF,OAAAN,GAAAM,OAAAokC,GAAApkC,OAAA2jB,GAAA3jB,OAAAqB,GAAArB,OAAA6b,GAAA7b,QAAA8b,MAAAD,IAAA7b,EAAA,CAAA,GAAA8b,IAAA9b,EAAA,EAAA,IA7CpDuL,GAAUsQ,GA6CPC,CAAiD;AAAC,MAAAC;AAAA,SAAA/b,UAAA0jC,KAAA1jC,EAAA,EAAA,MAAA48B,KAAA58B,EAAA,EAAA,MAAAsN,KAAAtN,EAAA,EAAA,MAAA2jC,KAAA3jC,UAAAyjC,KAAAzjC,EAAA,EAAA,MAAA02B,KAE9C3a,IAAA;AAAA,IAAA2nB,MAAAA;AAAAA,IAAA9G,kBAAAA;AAAAA,IAAAtvB,OAAAA;AAAAA,IAAAq2B,QAAAA;AAAAA,IAAAF,QAAAA;AAAAA,IAAA/M,SAAAA;AAAAA,IAAAwO,qBAAAA;AAAAA,EAAAA,GAA+EllC,QAAA0jC,GAAA1jC,QAAA48B,GAAA58B,QAAAsN,GAAAtN,QAAA2jC,GAAA3jC,QAAAyjC,GAAAzjC,QAAA02B,GAAA12B,QAAA+b,KAAAA,IAAA/b,EAAA,EAAA,GAA/E+b;AAA+E,GC1BlF4pB,KAAgBA,CAAC1/B,GAAkBpD,MAAsB,OAAOoD,KAAU,WAAWA,IAAQpD,GAE7F+iC,KAAqBA,CAACnJ,MAAuBA,EAAKkE,YAAY,MAAQlE,EAAKxJ,oBAAoB,IAE/F4S,KAAwBA,CAACC,GAA+BxO,MAC5DwO,MAAc,UAAUxO,EAAM/D,aAAa+D,EAAMhE,aAE7CyS,KAAqCA,CACzCtJ,GACAuJ,GACAllB,GACAwW,MACuC;AACvC,MAAI,CAACsO,GAAmBnJ,CAAI,EAAG;AAE/B,QAAMxJ,IAAkBwJ,EAAKxJ,oBAAoB,IAC3C6S,IAAYG,GAAkBD,EAAcvJ,EAAKp4B,EAAE,GAAG4uB,CAAe,GACrEhtB,IAAQ0/B,GAAclJ,EAAKx2B,OAAOw2B,EAAKp4B,EAAE,GACzC6hC,IAAgBzJ,EAAK4D,oBAAoB,CAAA;AAE/C,SAAO;AAAA,IACLh8B,IAAI,mBAAmBo4B,EAAKp4B,EAAE;AAAA,IAC9B4B,OAAO6/B,MAAc,UAAU,QAAQ7/B,CAAK,KAAK,QAAQA,CAAK;AAAA,IAC9DzF,MAAMqlC,GAAsBC,GAAWxO,CAAK;AAAA,IAC5C,GAAI4O,EAAcxkC,SAAS,IAAI;AAAA,MAAEiZ,iBAAiB;AAAA,IAAA,IAAS,CAAA;AAAA,IAC3DgG,UAAUA,MAAMG,EAAQkhB,aAAavF,EAAKp4B,IAAI4uB,CAAe;AAAA,EAAA;AAEjE,GAEakT,KAA0CA,CACrDxJ,GACAqJ,GACAllB,GACAwW,GACA9c,IAAU,OACP;AACH,MAAI,CAACA,EAAS,QAAOmiB;AACrB,MAAIyJ,IAAU;AACd,QAAM55B,IAAOmwB,EAAM17B,IAAKw7B,CAAAA,MAAS;AAC/B,UAAMh9B,IAAOsmC,GAAmCtJ,GAAMuJ,GAAellB,GAASwW,CAAK;AACnF,WAAK73B,KAEL2mC,IAAU,IACH;AAAA,MAAE,GAAG3J;AAAAA,MAAM4D,kBAAkB,CAAC,GAAI5D,EAAK4D,oBAAoB,CAAA,GAAK5gC,CAAI;AAAA,IAAA,KAHzDg9B;AAAAA,EAIpB,CAAC;AAED,SAAO2J,IAAU55B,IAAOmwB;AAC1B,GAEM0J,KAA2CA,CAC/CvJ,GACAkJ,GACAllB,GACAwW,GACA9c,MACG;AACH,MAAI4rB,IAAU;AACd,QAAM55B,IAAOswB,EAAS77B,IAAK87B,CAAAA,MAAY;AACrC,UAAMJ,IAAQwJ,GAAwCpJ,EAAQJ,OAAOqJ,GAAellB,GAASwW,GAAO9c,CAAO;AAC3G,WAAImiB,MAAUI,EAAQJ,QAAcI,KACpCqJ,IAAU,IACH;AAAA,MAAE,GAAGrJ;AAAAA,MAASJ,OAAAA;AAAAA,IAAAA;AAAAA,EACvB,CAAC;AACD,SAAOyJ,IAAU55B,IAAOswB;AAC1B,GAMawJ,KAA2BA,CAAAC,GAAAzhB,GAAAwS,GAAAp3B,MAAA;AAAA,QAAAF,IAAAC,EAAA,EAAA;AAAA,MAAAI;AAAA,EAAAL,SAAAE,KAItCG,IAAAH,MAAAL,SAAA,CAAA,IAAAK,GAA0CF,OAAAE,GAAAF,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAA1C,QAAAmG,IAAA9F,GAEAmmC,IAAyBC,GAA2BF,GAAY9kC,EAAiC,GACjGukC,IAAsBS,GAA2BF,GAAYl7B,EAA8B,GAC3Fq7B,IAAsBD,GAA2BF,GAAY7qB,EAA8B,GAC3FirB,IAAmBF,GAA2BF,GAAY5qB,EAA2B,GACrFirB,IAAwBH,GAA2BF,GAAYrqB,EAAsB,GACrF2qB,IAAqBC,GAAsBP,GAAYhb,EAA6B,GACpFwb,IAA2BD,GAAsBP,GAAYpa,EAAmC,GAChG6a,IAAwBF,GAAsBP,GAAYhP,EAAgC,GAC1F0P,IAAwBH,GAAsBP,GAAY9O,EAAgC,GAC1FyP,IAAqBJ,GAAsBP,GAAY7O,EAA6B,GACpFyP,IAAuBL,GAAsBP,GAAYvO,EAA+B,GACxFoP,IAAmBN,GAAsBP,GAAYrO,EAAsB;AAAE,MAAAr3B;AAAA,EAAAb,EAAA,CAAA,MAAAonC,KAAApnC,SAAA4mC,KAI/D/lC,IAAAA,MAAA;AACV+lC,IAAAA,EAAAA,GACAQ,EAAAA;AAAAA,EAAY,GACbpnC,OAAAonC,GAAApnC,OAAA4mC,GAAA5mC,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAAyhC,GAAA4F,GAAAC,GAAAC,GAAAC,GAAA36B,GAAA46B,GAAAC,GAAAC;AAAA,MAAA3nC,EAAA,CAAA,MAAAs3B,KAAAt3B,EAAA,CAAA,MAAA+mC,KAAA/mC,EAAA,CAAA,MAAAgmC,KAAAhmC,SAAAmG,KAAAnG,EAAA,CAAA,MAAA8kB,EAAA8iB,kBAAA5nC,EAAA,EAAA,MAAA8kB,EAAA+iB,kBAAA7nC,EAAA,EAAA,MAAA8kB,EAAAgY,YAAA98B,EAAA,EAAA,MAAA6mC,KAAA7mC,EAAA,EAAA,MAAAwmC,KAAAxmC,UAAAgnC,KAAAhnC,EAAA,EAAA,MAAAa,KAAAb,EAAA,EAAA,MAAA2mC,KAAA3mC,EAAA,EAAA,MAAA0mC,GAAA;AANH,UAAAoB,IAA0B;AAAA,MAAA/F,iBACP2E;AAAAA,MAAa1E,cAChB2E;AAAAA,MAAUtT,YACZxyB;AAAAA,IAAAA;AAIZ,QAAAgb;AAAA,IAAA7b,EAAA,EAAA,MAAA8kB,EAAA8iB,kBAAA5nC,EAAA,EAAA,MAAA8kB,EAAA+iB,kBAAA7nC,EAAA,EAAA,MAAA8kB,EAAAgY,YAE6BjhB,IAAA,IAAI3I,IAAI,CAAA,GAClC4R,EAAO+iB,eAAe5mC,IAAKk3B,EAAqD,MAChFrT,EAAOgY,SAAS77B,IAAKy3B,EAAsD,MAC3E5T,EAAO8iB,eAAe3mC,IAAK03B,EAAqD,CAAC,CACrF,GAAC34B,EAAA,EAAA,IAAA8kB,EAAA8iB,gBAAA5nC,EAAA,EAAA,IAAA8kB,EAAA+iB,gBAAA7nC,EAAA,EAAA,IAAA8kB,EAAAgY,UAAA98B,QAAA6b,KAAAA,IAAA7b,EAAA,EAAA,GAJFqnC,IAA+BxrB;AAK/B,UAAAksB,IAAuE;AAAA,MAAAtE,QAAU,CAAA;AAAA,MAAEuE,SAAW,CAAA;AAAA,MAAErE,QAAU,CAAA;AAAA,IAAA,GAC1GsE,IAA2BC,GACzB,IAAIpjB,EAAO+iB,gBAAe,GAAK/iB,EAAOgY,UAAS,GAAKhY,EAAO8iB,cAAe,GAC1Ef,GACAE,CACF;AACA,eAAKoB,KAAiBF,GAAkB;AACtC,YAAAG,KAAapB,EAAgBjK,EAAO14B,EAAG,KAAKgjC,EAAsBhzB,IAAK0oB,EAAO14B,EAAG,KAApE;AACb0jC,MAAAA,EAAsBK,EAAI,EAACxnB,KAAMmc,CAAO;AAAA,IAAC;AAE3CwK,IAAAA,IAA8BQ,EAAqBtE,QACnD+D,IAAwBO,EAAqBC,SAC7CV,IAA8BS,EAAqBpE;AACnD,UAAA0E,IAAgCliC,EAAOmiC,6BAA8B,IAErET,KAAuBxB,GACrBkB,GACAvB,GACA8B,GACAxQ,GACA+Q,CACF,GACAE,KAAwBlC,GACtBmB,GACAxB,GACA8B,GACAxQ,GACA+Q,CACF,GACAT,IAAuBvB,GACrBiB,GACAtB,GACA8B,GACAxQ,GACA+Q,CACF;AACAX,IAAAA,IAA8Bc,GAAsBX,IAAgBrB,GAAkBR,CAAa,GACnG2B,IAAwBa,GAAsBD,IAAiB/B,GAAkBR,CAAa,GAC9FyB,IAA8Be,GAAsBZ,GAAgBpB,GAAkBR,CAAa,GACnGvE,IAAiCgH,GAC/B;AAAA,MAAAZ,gBAAkBN;AAAAA,MAAqBzK,UAAY0K;AAAAA,MAAeI,gBAAkBN;AAAAA,IAAAA,GACpFd,GACAR,GACA8B,GACAxQ,CACF,GAE8BzqB,IAAAzH,KAAIC,UAAW;AAAA,MAAAo+B,QACnC8D,EAAqBtmC,IAAKynC,EAIjC;AAAA,MAACvmC,MACIqlC,EAAevmC,IAAK0nC,EAIzB;AAAA,MAAChF,QACM2D,EAAqBrmC,IAAK2nC,EAIjC;AAAA,MAACpC,kBAAAA;AAAAA,MAAAR,eAAAA;AAAAA,MAAAa,cAAAA;AAAAA,MAAAE,oBAAAA;AAAAA,MAAAC,iBAAAA;AAAAA,IAAAA,CAMH,GAAChnC,OAAAs3B,GAAAt3B,OAAA+mC,GAAA/mC,OAAAgmC,GAAAhmC,OAAAmG,GAAAnG,EAAA,CAAA,IAAA8kB,EAAA8iB,gBAAA5nC,EAAA,EAAA,IAAA8kB,EAAA+iB,gBAAA7nC,EAAA,EAAA,IAAA8kB,EAAAgY,UAAA98B,QAAA6mC,GAAA7mC,QAAAwmC,GAAAxmC,QAAAgnC,GAAAhnC,QAAAa,GAAAb,QAAA2mC,GAAA3mC,QAAA0mC,GAAA1mC,QAAAyhC,GAAAzhC,QAAAqnC,GAAArnC,QAAAsnC,GAAAtnC,QAAAunC,GAAAvnC,QAAAwnC,GAAAxnC,QAAA6M,GAAA7M,QAAAynC,GAAAznC,QAAA0nC,GAAA1nC,QAAA2nC;AAAAA,EAAA;AAAAlG,IAAAA,IAAAzhC,EAAA,EAAA,GAAAqnC,IAAArnC,EAAA,EAAA,GAAAsnC,IAAAtnC,EAAA,EAAA,GAAAunC,IAAAvnC,EAAA,EAAA,GAAAwnC,IAAAxnC,EAAA,EAAA,GAAA6M,IAAA7M,EAAA,EAAA,GAAAynC,IAAAznC,EAAA,EAAA,GAAA0nC,IAAA1nC,EAAA,EAAA,GAAA2nC,IAAA3nC,EAAA,EAAA;AArBF,QAAA6oC,IAA8Bh8B;AAqB3B,MAAAgP;AAAA,EAAA7b,EAAA,EAAA,MAAAsnC,KAAAtnC,EAAA,EAAA,MAAAunC,KAAAvnC,EAAA,EAAA,MAAAwnC,KAAAxnC,UAAAinC,KAQkBprB,IAAAA,CAAAitB,GAAAC,MAAA;AACjB,UAAAC,IAAkD;AAAA,MAAAvF,QACxC8D,EAAqBtmC,IAAKgoC,EAAuB;AAAA,MAACjB,SACjDR,EAAevmC,IAAKioC,EAAuB;AAAA,MAACvF,QAC7C2D,EAAqBrmC,IAAKkoC,EAAuB;AAAA,IAAA;AAE3DH,IAAAA,EAAUZ,CAAI,IAAIW,GAClB9B,EAAgB,CAAA,GAAI+B,EAASvF,QAAO,GAAKuF,EAAShB,SAAQ,GAAKgB,EAASrF,MAAO,CAAC;AAAA,EAAC,GAClF3jC,QAAAsnC,GAAAtnC,QAAAunC,GAAAvnC,QAAAwnC,GAAAxnC,QAAAinC,GAAAjnC,QAAA6b,KAAAA,IAAA7b,EAAA,EAAA;AAAA,MAAA8b;AAAA,EAAA9b,EAAA,EAAA,MAAAqnC,KAAArnC,EAAA,EAAA,MAAAgnC,KAAAhnC,EAAA,EAAA,MAAAinC,KAAAjnC,UAAAmnC,KACcrrB,IAAAA,CAAAstB,GAAAC,GAAAC,MAAA;AACb,UAAAC,IACEvC,EAAgBsC,CAAoB,KAAKjC,EAAsBhzB,IAAKi1B,CAAoB,KAAxF;AACFnC,IAAAA,EAAekC,GAAiBE,CAAe,GAC/CtC,EAAgB8B,CAAc;AAAA,EAAC,GAChC/oC,QAAAqnC,GAAArnC,QAAAgnC,GAAAhnC,QAAAinC,GAAAjnC,QAAAmnC,GAAAnnC,QAAA8b,KAAAA,IAAA9b,EAAA,EAAA;AAAA,MAAA+b;AAAA,SAAA/b,EAAA,EAAA,MAAAyhC,KAAAzhC,EAAA,EAAA,MAAA6oC,KAAA7oC,EAAA,EAAA,MAAAknC,KAAAlnC,EAAA,EAAA,MAAA6b,KAAA7b,EAAA,EAAA,MAAA8b,KAAA9b,EAAA,EAAA,MAAAynC,KAAAznC,EAAA,EAAA,MAAA0nC,KAAA1nC,UAAA2nC,KApBI5rB,IAAA;AAAA,IAAA2rB,uBAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAF,uBAAAA;AAAAA,IAAAhG,0BAAAA;AAAAA,IAAAoH,uBAAAA;AAAAA,IAAA5G,mBAMcpmB;AAAAA,IAQlB2tB,eACc1tB;AAAAA,IAKdomB,gBACegF;AAAAA,EAAAA,GACjBlnC,QAAAyhC,GAAAzhC,QAAA6oC,GAAA7oC,QAAAknC,GAAAlnC,QAAA6b,GAAA7b,QAAA8b,GAAA9b,QAAAynC,GAAAznC,QAAA0nC,GAAA1nC,QAAA2nC,GAAA3nC,QAAA+b,KAAAA,IAAA/b,EAAA,EAAA,GAtBM+b;AAsBN;AA5HqC,SAAAta,GAAAG,GAAA;AAAA,SAMqCA,EAAK4kC;AAAiB;AAN3D,SAAAn7B,GAAAoR,GAAA;AAAA,SAOkC7a,EAAKokC;AAAc;AAPrD,SAAAtqB,GAAAgB,GAAA;AAAA,SAQkC9a,EAAK8kC;AAAc;AARrD,SAAA/qB,GAAAgB,GAAA;AAAA,SAS+B/a,EAAK+kC;AAAW;AAT/C,SAAAzqB,GAAAqQ,GAAA;AAAA,SAUoC3qB,EAAKoqB;AAAM;AAV/C,SAAAT,GAAAke,GAAA;AAAA,SAW4B7nC,EAAKilC;AAAa;AAX9C,SAAA1a,GAAAud,GAAA;AAAA,SAYkC9nC,EAAKmlC;AAAmB;AAZ1D,SAAAxP,GAAAoS,GAAA;AAAA,SAa+B/nC,EAAKolC;AAAgB;AAbpD,SAAAvP,GAAAmS,GAAA;AAAA,SAc+BhoC,EAAKqlC;AAAgB;AAdpD,SAAAvP,GAAAmS,GAAA;AAAA,SAe4BjoC,EAAKslC;AAAa;AAf9C,SAAAlP,GAAA8R,GAAA;AAAA,SAgB8BloC,EAAKulC;AAAe;AAhBlD,SAAAjP,GAAA6R,GAAA;AAAA,SAiB0BnoC,EAAKoqB;AAAM;AAjBrC,SAAAmM,GAAA4E,GAAA;AAAA,SA4BO,CAACA,EAAO14B,IAAK,QAAiB;AAAU;AA5B/C,SAAAq0B,GAAAsR,GAAA;AAAA,SA6BC,CAACjN,EAAO14B,IAAK,SAAkB;AAAU;AA7B1C,SAAAs0B,GAAAsR,GAAA;AAAA,SA8BO,CAAClN,EAAO14B,IAAK,QAAiB;AAAU;AA9B/C,SAAA6lC,GAAAzN,GAAA;AAAA,SAmFN,CAACA,EAAIp4B,IAAKshC,GAAclJ,EAAIx2B,OAAQw2B,EAAIp4B,EAAG,CAAC;AAAC;AAnFvC,SAAAqkC,GAAAyB,GAAA;AAAA,SAgFW,CAC7CpN,EAAO14B,IACPshC,GAAc5I,EAAO92B,OAAQ82B,EAAO14B,EAAG,GACvC04B,EAAOJ,MAAM17B,IAAKipC,EAAuD,CAAC;AAC3E;AApFmC,SAAAE,GAAAC,GAAA;AAAA,SAwFN,CAAC5N,EAAIp4B,IAAKshC,GAAclJ,EAAIx2B,OAAQw2B,EAAIp4B,EAAG,CAAC;AAAC;AAxFvC,SAAAskC,GAAA2B,GAAA;AAAA,SAqFG,CACrCvN,EAAO14B,IACPshC,GAAc5I,EAAO92B,OAAQ82B,EAAO14B,EAAG,GACvC04B,EAAOJ,MAAM17B,IAAKmpC,EAAuD,CAAC;AAC3E;AAzFmC,SAAAG,GAAAC,GAAA;AAAA,SA6FN,CAAC/N,EAAIp4B,IAAKshC,GAAclJ,EAAIx2B,OAAQw2B,EAAIp4B,EAAG,CAAC;AAAC;AA7FvC,SAAAukC,GAAA6B,GAAA;AAAA,SA0FW,CAC7C1N,EAAO14B,IACPshC,GAAc5I,EAAO92B,OAAQ82B,EAAO14B,EAAG,GACvC04B,EAAOJ,MAAM17B,IAAKspC,EAAuD,CAAC;AAC3E;AA9FmC,SAAAtB,GAAAyB,GAAA;AAAA,SA8Ge3N,EAAO14B;AAAG;AA9GzB,SAAA6kC,GAAAyB,GAAA;AAAA,SA+GU5N,EAAO14B;AAAG;AA/GpB,SAAA8kC,GAAAyB,GAAA;AAAA,SAgHe7N,EAAO14B;AAAG;AChMjE,MAAMwmC,KAAsC;AAAA,EAAEjJ,iBAAiB,CAAA;AAAA,EAAIC,oBAAoB,CAAA;AAAG,GAIpFiJ,KAAyBA,CAC7B1lB,GACAC,MACGD,EAAQjK,KAAMtV,CAAAA,MAAUA,EAAM6e,aAAaW,CAAc,KAAKD,EAAQ,CAAC,GAEtE2lB,KAA4BA,CAACjpC,MACjCgpC,GAAuBhpC,EAAOgjB,QAAQ1hB,QAAQgiB,SAAStjB,EAAOgjB,QAAQ1hB,QAAQiiB,cAAc,GAAG3lB,YAC/Fkd,GAAkB9a,GAAQ,SAAS,GAE/BkpC,KAA2BA,CAC/BlqB,GACAmqB,GACA1+B,MACG;AACH,QAAM2+B,IAAax1B,GAAOoL,CAAO;AACjCoqB,EAAAA,EAAWn9B,UAAU+S,GAErBvV,GAAU,MAAM;AAEdgB,IAAAA,IAAW2+B,EAAWn9B,OAAO;AAAA,EAC/B,GAAG,CAACk9B,GAAU1+B,CAAQ,CAAC,GAEvBhB,GACE,MAAM,MAAM;AACVgB,IAAAA,IAAW,CAAA,CAAE;AAAA,EACf,GACA,CAACA,CAAQ,CACX;AACF,GAQM4+B,KAAmBA,CACvBjpC,GACAi7B,GACAiO,MACG;AACH,MAAIA,GAAQ/mC,OAAO,UAAU;AAC3B,UAAMmU,IAAS4yB,EAAO9L;AACtB,IAAI0D,GAAwCxqB,CAAM,KAChDsL,EAAsB5hB,EAAQb,SAAS,EAAEyhC,gBAAgB5gC,EAAQkiC,YAAYjH,CAAM,GAEhFj7B,EAAQb,UAAUud,WAAWC,WAAWrG,CAAM,EAAEpN,MAAMlJ,EAAQmpC,mBAAmB;AACtF;AAAA,EACF;AACF,GAeMC,KAAuBA,CAACppC,MAAmC,CAACi7B,MAAmB;AACnF,QAAMV,IACJuC,GAAmB98B,EAAQwhC,MAAMvG,GAAQj7B,EAAQ06B,gBAAgB,KACjEoC,GAAmB,CAAC,GAAG98B,EAAQuhC,QAAQ,GAAGvhC,EAAQyhC,MAAM,GAAGxG,GAAQj7B,EAAQ06B,gBAAgB;AAC7F,MAAI,CAACH,EAAM;AAEX,QAAMoH,IAAW3hC,EAAQ0/B,gBAAgBrD,SAASpB,CAAM;AAExD,EADArZ,EAAsB5hB,EAAQb,SAAS,EAAEkqC,gBAAgBrpC,EAAQkiC,YAAYjH,GAAQ,CAAC0G,CAAQ,GAC1FA,EAAAA,KAAY3hC,EAAQ06B,iBAAiBO,CAAM,KAAKV,EAAK1kB,aAEpD+L,EAAsB5hB,EAAQb,SAAS,EACzC4iC,YAAY/hC,EAAQkiC,YAAY3H,GAAM;AAAA,IAAE/8B,UAAUwC,EAAQxC;AAAAA,IAAUikB,QAAQzhB,EAAQyhB;AAAAA,EAAAA,CAAQ,EAC5FpZ,KAAMwN,CAAAA,MAAa;AAClB7V,IAAAA,EAAQgjC,oBAAqBn3B,CAAAA,OAAa;AAAA,MAAE,GAAGA;AAAAA,MAAS,CAACovB,CAAM,GAAGplB;AAAAA,IAAAA,EAAW;AAAA,EAC/E,CAAC;AACL,GAEayzB,KAAoBzrC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,GAAA,GAC/B;AAAA,IAAAoB,WAAAA;AAAAA,IAAA+iC,YAAAA;AAAAA,IAAArG,cAAAA;AAAAA,IAAAr+B,UAAAA;AAAAA,IAAAikB,QAAAA;AAAAA,IAAAzW,kBAAAA;AAAAA,IAAAm+B,qBAAAA;AAAAA,IAAAI,+BAAAA;AAAAA,EAAAA,IASI1rC,GACJ+hC,IAAkBpsB,GAA8B,IAAI,GACpDg2B,IAAqB5nB,EAAsBziB,CAAS,EAACmiC,gBAAiBY,CAAU,GAChF,CAAAn/B,GAAA0mC,CAAA,IAA4B1hC,EAAS,EAAE,GACvC2hC,IACEtqC,EAAkBwiB,EAAsBziB,CAAS,EAACwqC,WAAYjqC,CAAAA,MAAWA,EAAKkqC,eAAgB1H,CAAU,CACzF,KADfyG,IAEFkB,IAAkBzqC,EAAkBD,EAASwhB,MAAMrhB,OAAQC,EAA0B,GACrFu8B,IAAuB18B,EAAkBD,EAASwhB,MAAMrhB,OAAQ6J,EAAyB,GACzFqyB,IAAuBp8B,EAAkBD,EAASS,OAAON,OAAQka,EAAkD,GACnH;AAAA,IAAAgoB,MAAAA;AAAAA,IAAA9G,kBAAAA;AAAAA,IAAAtvB,OAAAA;AAAAA,IAAAq2B,QAAAA;AAAAA,IAAAF,QAAAA;AAAAA,IAAA/M,SAAAA;AAAAA,IAAAwO,qBAAAA;AAAAA,EAAAA,IAAwFJ,GACtFzjC,GACA+iC,GACA1kC,GACAikB,GACA+nB,GAAYz/B,cAAehH,EAAMrB,UAAN/D,MAC7B,GACA,CAAA8V,GAAAq2B,CAAA,IAA0C/hC,EAAyC,IAAI;AAAE,MAAAgiC,GAAAC,GAAAhsC;AAAA,MAAAF,EAAA,CAAA,MAAA0jC,KAAA1jC,EAAA,CAAA,MAAA48B,KAAA58B,EAAA,CAAA,MAAA2jC,KAAA3jC,SAAAyjC,KAAAzjC,EAAA,CAAA,MAAAqrC,KAAArrC,EAAA,CAAA,MAAAgsC,KAAAhsC,EAAA,CAAA,MAAAqB,GAAA;AAEzF,UAAA8qC,IAAuB;AAAA,MAAA9qC,WAAAA;AAAAA,MAAAqe,gBAEL2rB;AAAAA,MAAmBp3B,iBAClB+3B;AAAAA,IAAAA;AAEnBE,IAAAA,IAAoBxI,EAAIziC,IAAK87B,CAAAA,OAAamE,GAAkBnE,IAASH,GAAkBuP,CAAc,CAAC,GACtGF,IAA0BxI,EAAMxiC,IAAK+oC,CAAAA,OAAa9I,GAAkBnE,IAASH,GAAkBuP,CAAc,CAAC,GACpFjsC,IAAAyjC,EAAM1iC,IAAKgpC,CAAAA,OAAa/I,GAAkBnE,IAASH,GAAkBuP,CAAc,CAAC,GAACnsC,OAAA0jC,GAAA1jC,OAAA48B,GAAA58B,OAAA2jC,GAAA3jC,OAAAyjC,GAAAzjC,OAAAqrC,GAAArrC,OAAAgsC,GAAAhsC,OAAAqB,GAAArB,OAAAisC,GAAAjsC,OAAAksC,GAAAlsC,OAAAE;AAAAA,EAAA;AAAA+rC,IAAAA,IAAAjsC,EAAA,CAAA,GAAAksC,IAAAlsC,EAAA,CAAA,GAAAE,IAAAF,EAAA,CAAA;AAA/G,QAAAosC,IAA0BlsC;AAAsF,MAAAG;AAAA,EAAAL,EAAA,EAAA,MAAAosC,KAAApsC,UAAAisC,KAAAjsC,EAAA,EAAA,MAAAksC,KAY9G7rC,IAAA;AAAA,IAAAwnC,gBACkBoE;AAAAA,IAAiBnP,UACvBoP;AAAAA,IAAWtE,gBACLwE;AAAAA,EAAAA,GACjBpsC,QAAAosC,GAAApsC,QAAAisC,GAAAjsC,QAAAksC,GAAAlsC,QAAAK,KAAAA,IAAAL,EAAA,EAAA;AAAA,MAAAa;AAAA,EAAAb,EAAA,EAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACDlJ,IAAA;AAAA,IAAAyyB,aACe,gBAAAhzB,EAACI,GAAA,EAAmB,MAAA,OAAY,MAAA,IAAE;AAAA,IAAI6yB,YACvC,gBAAAjzB,EAACI,GAAA,EAAmB,MAAA,WAAgB,MAAA,IAAE;AAAA,IAAI8yB,WAC3C,gBAAAlzB,EAACI,GAAA,EAAmB,MAAA,cAAmB,MAAA,GAAA,CAAE;AAAA,EAAA,GACrDV,QAAAa,KAAAA,IAAAb,EAAA,EAAA;AAC2B,QAAA6M,IAAA7E,EAAQyjC;AAA8B,MAAA5vB;AAAA,EAAA7b,UAAA6M,KAAlEgP,IAAA;AAAA,IAAAysB,0BAA4Bz7B;AAAAA,EAAAA,GAAwC7M,QAAA6M,GAAA7M,QAAA6b,KAAAA,IAAA7b,EAAA,EAAA;AArBtE,QAAA;AAAA,IAAA0nC,uBAAAA;AAAAA,IAAAC,iBAAAA;AAAAA,IAAAF,uBAAAA;AAAAA,IAAAhG,0BAAAA;AAAAA,IAAAoH,uBAAAA;AAAAA,IAAA5G,mBAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,IAAAsH,eAAAA;AAAAA,EAAAA,IASIlD,GACF,GAAGlC,CAAU,IAAI2H,KAAA,QAAqB,IACtC1rC,GAKAQ,GAKAgb,CACF;AAEA,MADAmvB,GAAyBvJ,IAA0BoH,IAAuB4C,CAA6B,GACnG,CAACC,GAAY;AAAA,QAAA5vB;AAAA,WAAA9b,EAAA,EAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAEb+R,sBAACrb,IAAA,EAAe,WAAA,uBAA4B,OAAA,YAAa,GAAA,MAAK,UAAA,yCAAA,CAE9D,GAAOT,QAAA8b,KAAAA,IAAA9b,EAAA,EAAA,GAFP8b;AAAAA,EAEO;AAEV,MAAAA;AAAA,EAAA9b,EAAA,EAAA,MAAA0jC,KAAA1jC,EAAA,EAAA,MAAA48B,KAAA58B,EAAA,EAAA,MAAA2jC,KAAA3jC,EAAA,EAAA,MAAAyjC,KAAAzjC,UAAAN,KAAAM,EAAA,EAAA,MAAAklC,KAAAllC,UAAA4rC,EAAAhK,mBAAA5hC,EAAA,EAAA,MAAAokC,KAAApkC,EAAA,EAAA,MAAA2jB,KAAA3jB,UAAAqB,KAEkBya,KAAAwvB,GAAqB;AAAA,IAAAjqC,WAAAA;AAAAA,IAAA+iC,YAAAA;AAAAA,IAAA1kC,UAAAA;AAAAA,IAAAikB,QAAAA;AAAAA,IAAA+f,MAAAA;AAAAA,IAAAD,QAAAA;AAAAA,IAAAE,QAAAA;AAAAA,IAAA/G,kBAAAA;AAAAA,IAAAgF,iBASrBgK,EAAShK;AAAAA,IAAgBsD,qBAAAA;AAAAA,EAAAA,CAE3C,GAACllC,QAAA0jC,GAAA1jC,QAAA48B,GAAA58B,QAAA2jC,GAAA3jC,QAAAyjC,GAAAzjC,QAAAN,GAAAM,QAAAklC,GAAAllC,EAAA,EAAA,IAAA4rC,EAAAhK,iBAAA5hC,QAAAokC,GAAApkC,QAAA2jB,GAAA3jB,QAAAqB,GAAArB,QAAA8b,MAAAA,KAAA9b,EAAA,EAAA;AAXF,QAAA2mC,IAAmB7qB;AAWhB,MAAAC;AAAA,EAAA/b,EAAA,EAAA,MAAA4rC,EAAA/J,sBAAA7hC,EAAA,EAAA,MAAAokC,KAAApkC,EAAA,EAAA,MAAAqB,KAEmB0a,KAAAwoB,CAAAA,MAAA;AACpB,UAAAV,KAAiB+H,EAAS/J,mBAAmBtD,SAAUgG,CAAS;AAEhEzgB,IAAAA,EAAsBziB,CAAS,EAACojC,mBAAoBL,GAAYG,GAAW,CAACV,EAAQ;AAAA,EAAC,GACtF7jC,EAAA,EAAA,IAAA4rC,EAAA/J,oBAAA7hC,QAAAokC,GAAApkC,QAAAqB,GAAArB,QAAA+b,MAAAA,KAAA/b,EAAA,EAAA;AAJD,QAAA0mC,KAAsB3qB,IAKtB0mB,IAAiBD,GAAmB;AAAA,IAAAnhC,WAAAA;AAAAA,IAAA0iB,UAExB2nB;AAAAA,IAAYhsC,UAAAA;AAAAA,IAAAikB,QAAAA;AAAAA,IAAAmZ,UAGZ4G;AAAAA,IAAI9G,kBAAAA;AAAAA,IAAAmG,SAELsI;AAAAA,EAAAA,CACV;AAAE,MAAApvB;AAAA,EAAAjc,EAAA,EAAA,MAAAqrC,KAAArrC,UAAAokC,KAAApkC,EAAA,EAAA,MAAAqB,KAEuB4a,IAAA;AAAA,IAAA5a,WAAAA;AAAAA,IAAA+iC,YAAAA;AAAAA,IAAAiH,qBAAAA;AAAAA,EAAAA,GAA8CrrC,QAAAqrC,GAAArrC,QAAAokC,GAAApkC,QAAAqB,GAAArB,QAAAic,KAAAA,IAAAjc,EAAA,EAAA;AAAxE,QAAAqsC,KAA0BpwB;AAA+C,MAAAqwB,IAAAC,IAAApwB;AAAA,MAAAnc,EAAA,EAAA,MAAAg+B,KAAAh+B,EAAA,EAAA,MAAA+9B,KAAA/9B,EAAA,EAAA,MAAA09B,KAAA19B,UAAA0jC,KAAA1jC,EAAA,EAAA,MAAA48B,KAAA58B,EAAA,EAAA,MAAA2jC,KAAA3jC,EAAA,EAAA,MAAAyjC,KAAAzjC,EAAA,EAAA,MAAA4rC,EAAA3N,gBAAA;AAEzE,UAAAuO,IAA4B1O,GAAyB;AAAA,MAAAhB,UACzC,CAAA,GAAI2G,MAAWC,GAAI,GAAKC,CAAM;AAAA,MAAC/G,kBAAAA;AAAAA,MAAAmB,cAAAA;AAAAA,MAAAC,gBAAAA;AAAAA,MAAAN,gBAAAA;AAAAA,MAAAO,gBAKzB2N,EAAS3N;AAAAA,IAAAA,CAC1B;AACDsO,IAAAA,KAA2BnP,GAAwBqG,GAAQ7G,GAAkB4P,CAAmB,GAChGF,KAAyBlP,GAAwBsG,GAAM9G,GAAkB4P,CAAmB,GACjErwB,KAAAihB,GAAwBuG,GAAQ/G,GAAkB4P,CAAmB,GAACxsC,QAAAg+B,GAAAh+B,QAAA+9B,GAAA/9B,QAAA09B,GAAA19B,QAAA0jC,GAAA1jC,QAAA48B,GAAA58B,QAAA2jC,GAAA3jC,QAAAyjC,GAAAzjC,EAAA,EAAA,IAAA4rC,EAAA3N,gBAAAj+B,QAAAssC,IAAAtsC,QAAAusC,IAAAvsC,QAAAmc;AAAAA,EAAA;AAAAmwB,IAAAA,KAAAtsC,EAAA,EAAA,GAAAusC,KAAAvsC,EAAA,EAAA,GAAAmc,KAAAnc,EAAA,EAAA;AAAjG,QAAAysC,KAA2BtwB;AAAuE,MAAAmI;AAAA,EAAAtkB,EAAA,EAAA,MAAAynC,KAAAznC,UAAA0nC,KAAA1nC,EAAA,EAAA,MAAA2nC,KAIpFrjB,SAAIojB,GAAqB,GAAKC,GAAe,GAAKF,CAAqB,GAACznC,QAAAynC,GAAAznC,QAAA0nC,GAAA1nC,QAAA2nC,GAAA3nC,QAAAskB,MAAAA,KAAAtkB,EAAA,EAAA;AACzE,QAAA6nB,KAAA6jB,EAAYvJ,SAIwDra,KAAA4jB,EAAY9qC;AAAM,MAAAmnB;AAAA,EAAA/nB,EAAA,EAAA,MAAAusC,MAAAvsC,UAAA02B,KAAA12B,EAAA,EAAA,MAAAqsC,MAAArsC,EAAA,EAAA,MAAAkiC,KAAAliC,EAAA,EAAA,MAAAiiC,KAAAjiC,EAAA,EAAA,MAAAyrC,KAAAzrC,EAAA,EAAA,MAAA2mC,KAAA3mC,EAAA,EAAA,MAAA0mC,MAAA1mC,UAAA0rC,EAAAvJ,WAAAniC,EAAA,EAAA,MAAA4rC,EAAAhK,mBAAA5hC,EAAA,EAAA,MAAA4rC,EAAA/J,sBAAA7hC,EAAA,EAAA,MAAA0nC,KAC5F3f,KAAA,CAAC2O,KAAWgR,EAAqBhmC,SAAU,IAC1C,gBAAApB,EAACsnB,IAAA,EAAS,IAAA7kB,EAAoBN,SAAsB,YAAA,GAClD,UAAA,gBAAAnC,EAACgiC,IAAA,EACWoF,UAAAA,GACC,WAAA1/B,EAAQyjC,GACF,iBAAAG,EAAShK,iBACN,oBAAAgK,EAAS/J,oBACf0K,cAAAA,IACH,YAAA,WACA,YAAA,MACH,SAAA,OACS7F,iBAAAA,IACHC,cAAAA,GACK,mBAAAoC,CAAAA,MAAoB9G,EAAkB,UAAU8G,CAAc,GACjE7G,gBAAAA,GACP,SAAAwJ,EAAYvJ,SACT,YAAAxzB,CAAAA,MAAWw8B,GAAiBkB,IAAmB19B,EAAKwuB,QAASxuB,EAAKy8B,MAAO,EAAA,CAAC,EAAA,CAE1F,IAlBD,MAmBOprC,QAAAusC,IAAAvsC,QAAA02B,GAAA12B,QAAAqsC,IAAArsC,QAAAkiC,GAAAliC,QAAAiiC,GAAAjiC,QAAAyrC,GAAAzrC,QAAA2mC,GAAA3mC,QAAA0mC,IAAA1mC,EAAA,EAAA,IAAA0rC,EAAAvJ,SAAAniC,EAAA,EAAA,IAAA4rC,EAAAhK,iBAAA5hC,EAAA,EAAA,IAAA4rC,EAAA/J,oBAAA7hC,QAAA0nC,GAAA1nC,QAAA+nB,MAAAA,KAAA/nB,EAAA,EAAA;AAEG,QAAAgoB,MAAC0O,KAAW1uB,EAAQ0jC,EAAYz/B;AAAY,MAAAgc;AAAA,EAAAjoB,EAAA,EAAA,MAAAiF,KAAAjF,UAAA2rC,KAAA3rC,EAAA,EAAA,MAAAgoB,MAAAhoB,EAAA,EAAA,MAAA0rC,EAAAgB,qBADvDzkB,KAAA,gBAAA3nB,EAAC2iC,IAAA,EACU,SAAAjb,IACI,aAAA0jB,EAAYgB,mBAClBznC,OAAAA,GACG0mC,UAAAA,EAAAA,CAAS,GACnB3rC,QAAAiF,GAAAjF,QAAA2rC,GAAA3rC,QAAAgoB,IAAAhoB,EAAA,EAAA,IAAA0rC,EAAAgB,mBAAA1sC,QAAAioB,MAAAA,KAAAjoB,EAAA,EAAA;AAAA,MAAAmoB,IAAAC;AAAA,EAAApoB,EAAA,EAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAMeoe,KAAA;AAAA,IAAApI,SACJ;AAAA,IAAO4sB,OACT;AAAA,MAAAC,WAAa;AAAA,IAAA;AAAA,EAAS,GAEjBxkB,KAAA;AAAA,IAAAukB,OACL;AAAA,MAAAE,UAAY;AAAA,MAAM7sB,OAAS;AAAA,MAAM8sB,WAAa;AAAA,MAAM/sB,SAAW;AAAA,MAAMkF,eAAiB;AAAA,IAAA;AAAA,EAAS,GACvGjlB,QAAAmoB,IAAAnoB,QAAAooB,OAAAD,KAAAnoB,EAAA,EAAA,GAAAooB,KAAApoB,EAAA,EAAA;AAMkB,QAAAqoB,IAAAujB,EAASlV,SAEEpO,KAAAmjB,IAAA5rC,SAAA4hC,IACflZ,KAAAvgB,EAAQyjC,GACKjjB,KAAAxgB,EAAQyjC;AAA8B,MAAAhjB;AAAA,EAAAzoB,UAAAiiC,KAO3CxZ,KAAA2gB,CAAAA,MAAoBnH,EAAkB,WAAW8G,CAAc,GAAC/oC,QAAAiiC,GAAAjiC,QAAAyoB,MAAAA,KAAAzoB,EAAA,EAAA;AAAA,MAAA0oB;AAAA,EAAA1oB,UAAAqsC,MAIvE3jB,KAAAuF,OAAWkd,GAAiBkB,IAAmB19B,EAAKwuB,QAASxuB,EAAKy8B,MAAO,GAACprC,QAAAqsC,IAAArsC,QAAA0oB,MAAAA,KAAA1oB,EAAA,EAAA;AAAA,MAAA2oB;AAAA,EAAA3oB,EAAA,EAAA,MAAAssC,MAAAtsC,EAAA,EAAA,MAAAsN,KAAAtN,UAAA02B,KAAA12B,EAAA,EAAA,MAAAyiC,KAAAziC,EAAA,EAAA,MAAAkiC,KAAAliC,EAAA,EAAA,MAAAsoB,MAAAtoB,EAAA,EAAA,MAAAuoB,MAAAvoB,UAAAwoB,MAAAxoB,EAAA,EAAA,MAAAyoB,MAAAzoB,EAAA,EAAA,MAAA0oB,MAAA1oB,EAAA,EAAA,MAAA2mC,KAAA3mC,EAAA,EAAA,MAAA0mC,MAAA1mC,EAAA,EAAA,MAAA0rC,EAAAvJ,WAAAniC,EAAA,EAAA,MAAA4rC,EAAAhK,mBAAA5hC,EAAA,EAAA,MAAA4rC,EAAA/J,sBAAA7hC,EAAA,EAAA,MAAA4rC,EAAAlV,WAAA12B,UAAA2nC,KAhC5Fhf,uBAAC5Z,IAAA,EACM,MAAA,KACA,MAAA,KACH,GAAA,QACW+yB,aAAAA,GACE,eAAA3Z,IAID,cAAAC,IAId,UAAA,gBAAA9nB,EAACsW,GAAA,EAAM,GAAA,QAAY,MAAA,KAAS,MAAA,YAAmB,SAAA,QAAqB,eAAA,UAClE,UAAA,gBAAAtW,EAACihC,IAAA,EACQj0B,OAAAA,GACEopB,SAAAA,GACM,eAAArO,GACLsf,UAAAA,GACgB,0BAAArf,IACf,WAAAC,IACa,wBAAAC,IACV8jB,kBACG,iBAAAV,EAAShK,iBACN,oBAAAgK,EAAS/J,oBAClBC,WAAAA,GACM4E,iBAAAA,IACHC,cAAAA,GACK,mBAAAle,IACHyZ,gBAAAA,GACP,SAAAwJ,EAAYvJ,SACTM,YAAAA,GACA,YAAA/Z,GAAAA,CAA0E,GAE1F,GACF,GAAa1oB,QAAAssC,IAAAtsC,QAAAsN,GAAAtN,QAAA02B,GAAA12B,QAAAyiC,GAAAziC,QAAAkiC,GAAAliC,QAAAsoB,IAAAtoB,QAAAuoB,IAAAvoB,QAAAwoB,IAAAxoB,QAAAyoB,IAAAzoB,QAAA0oB,IAAA1oB,QAAA2mC,GAAA3mC,QAAA0mC,IAAA1mC,EAAA,EAAA,IAAA0rC,EAAAvJ,SAAAniC,EAAA,EAAA,IAAA4rC,EAAAhK,iBAAA5hC,EAAA,EAAA,IAAA4rC,EAAA/J,oBAAA7hC,EAAA,EAAA,IAAA4rC,EAAAlV,SAAA12B,QAAA2nC,GAAA3nC,QAAA2oB,MAAAA,KAAA3oB,EAAA,EAAA;AAAA,MAAA6oB;AAAA,EAAA7oB,EAAA,EAAA,MAAAysC,MAAAzsC,UAAA02B,KAAA12B,EAAA,EAAA,MAAAqsC,MAAArsC,EAAA,EAAA,MAAAkiC,KAAAliC,EAAA,EAAA,MAAAiiC,KAAAjiC,EAAA,EAAA,MAAAyrC,KAAAzrC,EAAA,GAAA,MAAA2mC,KAAA3mC,EAAA,GAAA,MAAA0mC,MAAA1mC,WAAA0rC,EAAAvJ,WAAAniC,EAAA,GAAA,MAAA4rC,EAAAhK,mBAAA5hC,EAAA,GAAA,MAAA4rC,EAAA/J,sBAAA7hC,EAAA,GAAA,MAAAynC,KACZ5e,KAAA,CAAC6N,KAAW+Q,EAAqB/lC,SAAU,IAC1C,gBAAApB,EAACsnB,IAAA,EAAS,IAAA7kB,EAAoBN,SAAsB,YAAA,GAClD,UAAA,gBAAAnC,EAACgiC,IAAA,EACWmF,UAAAA,GACC,WAAAz/B,EAAQyjC,GACF,iBAAAG,EAAShK,iBACN,oBAAAgK,EAAS/J,oBACf4K,cAAAA,IACH,YAAA,WACA,YAAA,MACH,SAAA,OACS/F,iBAAAA,IACHC,cAAAA,GACK,mBAAAoG,CAAAA,MAAoB9K,EAAkB,UAAU8G,CAAc,GACjE7G,gBAAAA,GACP,SAAAwJ,EAAYvJ,SACT,YAAAhU,CAAAA,MAAWgd,GAAiBkB,IAAmB19B,EAAKwuB,QAASxuB,EAAKy8B,MAAO,EAAA,CAAC,EAAA,CAE1F,IAlBD,MAmBOprC,QAAAysC,IAAAzsC,QAAA02B,GAAA12B,QAAAqsC,IAAArsC,QAAAkiC,GAAAliC,QAAAiiC,GAAAjiC,QAAAyrC,GAAAzrC,SAAA2mC,GAAA3mC,SAAA0mC,IAAA1mC,EAAA,GAAA,IAAA0rC,EAAAvJ,SAAAniC,EAAA,GAAA,IAAA4rC,EAAAhK,iBAAA5hC,EAAA,GAAA,IAAA4rC,EAAA/J,oBAAA7hC,SAAAynC,GAAAznC,SAAA6oB,MAAAA,KAAA7oB,EAAA,GAAA;AAAA,MAAA8oB;AAAA,EAAA9oB,WAAAgsC,KAKGljB,KAAAA,MAAMkjB,EAAiB,IAAI,GAAChsC,SAAAgsC,GAAAhsC,SAAA8oB,MAAAA,KAAA9oB,EAAA,GAAA;AAAA,MAAAw0B;AAAA,EAAAx0B,EAAA,GAAA,MAAA2V,KAAA3V,EAAA,GAAA,MAAAkN,KAAAlN,EAAA,GAAA,MAAA8oB,MAAA9oB,WAAAqB,KAJvCmzB,uBAAC4M,IAAA,EACUzrB,SAAAA,GACSzI,kBAAAA,GACP7L,WAAAA,GACF,SAAAynB,IAA4B,GACrC9oB,SAAA2V,GAAA3V,SAAAkN,GAAAlN,SAAA8oB,IAAA9oB,SAAAqB,GAAArB,SAAAw0B,MAAAA,KAAAx0B,EAAA,GAAA;AAAA,MAAAy0B;AAAA,EAAAz0B,EAAA,GAAA,MAAA+nB,MAAA/nB,WAAAioB,MAAAjoB,EAAA,GAAA,MAAA2oB,MAAA3oB,EAAA,GAAA,MAAA6oB,MAAA7oB,EAAA,GAAA,MAAAw0B,MAAAx0B,EAAA,GAAA,MAAA0rC,EAAA9qC,SAxFJ6zB,KAAA,gBAAA/lB,EAACkZ,IAAA,EAAQ,IAAA,WAAoB,WAAA,UAAW,GAAA,QAAY,MAAA,KAAS,MAAA,KAAgB,cAAAE,IAC1EC,UAAAA;AAAAA,IAAAA;AAAAA,IAoBDE;AAAAA,IAMAU;AAAAA,IAoCCE;AAAAA,IAoBD2L;AAAAA,EAAAA,GAMF,GAAOx0B,SAAA+nB,IAAA/nB,SAAAioB,IAAAjoB,SAAA2oB,IAAA3oB,SAAA6oB,IAAA7oB,SAAAw0B,IAAAx0B,EAAA,GAAA,IAAA0rC,EAAA9qC,OAAAZ,SAAAy0B,MAAAA,KAAAz0B,EAAA,GAAA;AAAA,MAAA00B;AAAA,SAAA10B,WAAAwpC,MAAAxpC,EAAA,GAAA,MAAAkiC,KAAAliC,EAAA,GAAA,MAAAy0B,MAAAz0B,WAAAskB,MAAAtkB,EAAA,GAAA,MAAA0rC,EAAAvJ,WA/FTzN,KAAA,gBAAAp0B,EAAC0sC,MACW,UAAA1oB,IACD,SAAAuD,IACU2hB,mBAAAA,IACHtH,gBAAAA,GAEhBzN,UAAAA,GAAAA,CA0FF,GAAuBz0B,SAAAwpC,IAAAxpC,SAAAkiC,GAAAliC,SAAAy0B,IAAAz0B,SAAAskB,IAAAtkB,EAAA,GAAA,IAAA0rC,EAAAvJ,SAAAniC,SAAA00B,MAAAA,KAAA10B,EAAA,GAAA,GAhGvB00B;AAgGuB;AAhNM,SAAAjzB,GAAAgb,GAAA;AAAA,SAiBuC7a,EAAKmqC;AAAU;AAjBtD,SAAA1gC,GAAAqR,GAAA;AAAA,SAkB4C9a,EAAKmhB;AAAS;AAlB1D,SAAArH,GAAAiB,GAAA;AAAA,SAmB6CouB,GAA0BnpC,EAAKE,MAAO;AAAC;AC/I9G,MAAMmrC,KAAsBC,CAAAA,MAAA;AAAA,QAAAltC,IAAAC,EAAA,CAAA;AAAA,MAAAC,GAAAG,GAAAQ;AAAA,SAAAb,EAAA,CAAA,MAAAktC,EAAA1rC,SAE/BtB,IAAAitC,OAAcD,EAAQ1rC,MAAM0d,UAAW,MAAMiuB,GAAU,GACvD9sC,IAAAA,MAAM6sC,EAAQ1rC,MAAM4Y,SAAAA,EAAW6wB,UAC/BpqC,IAAAA,MAAMqsC,EAAQ1rC,MAAM4Y,SAAAA,EAAW6wB,UAASjrC,EAAA,CAAA,IAAAktC,EAAA1rC,OAAAxB,OAAAE,GAAAF,OAAAK,GAAAL,OAAAa,MAAAX,IAAAF,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA,GAAAa,IAAAb,EAAA,CAAA,IAH1CotC,GACEltC,GACAG,GACAQ,CACF;AAAC,GCWGwsC,KAAWttC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAA,SAAAF,EAAA,CAAA,MAAAD,EAAAgY,YACf7X,IAAA,gBAAAI,EAACsnB,IAAA,EAAO,GAAA,QAAY,MAAA,KAAU,OAAA,UAAiB,SAAA,UAAW,GAAA,MACvD7nB,YAAKgY,UACR,GAAO/X,EAAA,CAAA,IAAAD,EAAAgY,UAAA/X,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAFPE;AAEO,GAEHotC,KAA4BvtC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAA,EAAAF,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACY7J,IAAA;AAAA,IAAA+W,GAAK;AAAA,IAAMC,MAAQ;AAAA,EAAA,GAAQlX,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,SAAAL,EAAA,CAAA,MAAAD,EAAAgY,YAAvE1X,sBAAC0O,IAAA,EAAa,GAAA,QAAY,MAAA,KAAkB,cAAA7O,GAC1C,UAAA,gBAAAI,EAACsW,GAAA,EAAM,GAAA,QAAY,MAAA,QAChB7W,UAAAA,EAAKgY,UACR,GACF,GAAa/X,EAAA,CAAA,IAAAD,EAAAgY,UAAA/X,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAJbK;AAIa,GAETktC,KAAsBxtC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC1B;AAAA,IAAA4E,OAAAA;AAAAA,IAAA2oC,SAAAA;AAAAA,IAAA7pB,QAAAA;AAAAA,EAAAA,IAAmC5jB;AAAM,MAAAG;AAAA,EAAAF,EAAA,CAAA,MAAA6E,EAAAxD,aACNnB,IAAA4jB,EAAsBjf,EAAKxD,SAAU,GAACrB,EAAA,CAAA,IAAA6E,EAAAxD,WAAArB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,EAAAL,SAAA2jB,KAAQtjB,IAAAuB,CAAAA,MAAWA,EAAKoiB,UAAWL,CAAM,GAAC3jB,OAAA2jB,GAAA3jB,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAnH,QAAA+jB,IAAiBziB,EAAkBpB,EAAsCsB,OAAQnB,CAAkC;AAAE,MAAAQ;AAAA,EAAAb,EAAA,CAAA,MAAA6E,EAAAxD,aACnGR,IAAAijB,EAAsBjf,EAAKxD,SAAU,GAACrB,EAAA,CAAA,IAAA6E,EAAAxD,WAAArB,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAA6M;AACxD,MADwD7M,SAAA2jB,KAAQ9W,IAAA4P,CAAAA,MAAW7a,EAAKsiB,YAAaP,CAAM,KAAxB,GAA8B3jB,OAAA2jB,GAAA3jB,OAAA6M,KAAAA,IAAA7M,EAAA,CAAA,GAAzGsB,EAAkBT,EAAsCW,OAAQqL,CAAyC,GACrG,CAACkX,GAAQ;AAAA,QAAAlI;AAAA,WAAA7b,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAET8R,IAAA,gBAAAvb,EAAC+sC,IAAA,EACC,4BAAC7U,IAAA,EAAiB,OAAA,2BAAyB,GAC7C,GAAWx4B,OAAA6b,KAAAA,IAAA7b,EAAA,CAAA,GAFX6b;AAAAA,EAEW;AAEd,MAAAA;AAAA,EAAA7b,EAAA,CAAA,MAAA6E,KAAA7E,EAAA,EAAA,MAAAwtC,KAAAxtC,EAAA,EAAA,MAAA+jB,KAAA/jB,UAAA2jB,KAGI9H,IAAAkI,EAAQM,OAAQ;AAAA,IAAA,GAAKxf;AAAAA,IAAKsf,UAAY;AAAA,MAAA,GAAKtf,EAAKsf;AAAAA,MAASqpB,SAAAA;AAAAA,MAAA7pB,QAAAA;AAAAA,IAAAA;AAAAA,EAAkB,CAAG,GAAC3jB,OAAA6E,GAAA7E,QAAAwtC,GAAAxtC,QAAA+jB,GAAA/jB,QAAA2jB,GAAA3jB,QAAA6b,KAAAA,IAAA7b,EAAA,EAAA;AAA/E,QAAA8b,IAAAD;AAA4F,MAAAE;AAAA,SAAA/b,UAAA8b,KAD/FC,IAAA,gBAAAzb,EAACgtC,MACExxB,UAAAA,EAAAA,CACH,GAA4B9b,QAAA8b,GAAA9b,QAAA+b,KAAAA,IAAA/b,EAAA,EAAA,GAF5B+b;AAE4B,GAK1B0xB,KAAqB1tC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAKzB;AAAA,IAAAyC,OAAAA;AAAAA,IAAAgrC,QAAAA;AAAAA,IAAA7oC,OAAAA;AAAAA,EAAAA,IAAiC9E,GACjC4tC,IAA8B9oC,EAAKxD,UAAU6rC,SAASS;AAAuB,MAAAztC;AAAA,EAAAF,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAG1E7J,IAAA;AAAA,IAAAN,QACO;AAAA,EAAA,GACTI,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAJD,QAAA,CAAA4B,GAAAgsC,CAAA,IAA0B3jC,EAEvB/J,CAEF;AAAE,MAAAG;AAAA,EAAAL,EAAA,CAAA,MAAA0tC,KAAA1tC,EAAA,CAAA,MAAA0C,EAAA2B,MAAArE,EAAA,CAAA,MAAA2tC,KACOttC,IAAAA,MAAA;AACR,QAAAwtC,IAAY;AACZD,WAAAA,EAAS;AAAA,MAAAhuC,QAAU;AAAA,IAAA,CAAW,GAC9B+tC,EAAsBjrC,EAAK2B,IAAKqpC,CAAM,EAACnjC,KAAM9K,CAAAA,MAAA;AAC3C,MAAKouC,KACLD,EAASnuC,MAASI,SAAT;AAAA,QAAAD,QAA+B;AAAA,MAAA,IAA/B;AAAA,QAAAA,QAAuD;AAAA,MAAA,CAAS;AAAA,IAAC,CAC3E,GACM,MAAA;AACLiuC,MAAAA,IAAQA;AAAAA,IAAH;AAAA,EACN,GACF7tC,OAAA0tC,GAAA1tC,EAAA,CAAA,IAAA0C,EAAA2B,IAAArE,OAAA2tC,GAAA3tC,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AACD,MADCb,EAAA,CAAA,MAAA0tC,KAAA1tC,SAAA0C,KAAA1C,EAAA,CAAA,MAAA2tC,KAAE9sC,KAAC6B,GAAOgrC,GAAQC,CAAqB,GAAC3tC,OAAA0tC,GAAA1tC,OAAA0C,GAAA1C,OAAA2tC,GAAA3tC,OAAAa,KAAAA,IAAAb,EAAA,CAAA,GAVzCuL,GAAUlL,GAUPQ,CAAsC,GACrCe,EAAKhC,WAAY,WAAS;AAAA,QAAAiN;AAAA,WAAA7M,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAE1B8C,IAAA,gBAAAvM,EAAC+sC,IAAA,EACC,4BAACS,IAAA,EAAa,MAAA,MAAI,GACpB,GAAW9tC,OAAA6M,KAAAA,IAAA7M,EAAA,CAAA,GAFX6M;AAAAA,EAEW;AAEf,MAAIjL,EAAKhC,WAAY,WAAS;AAAA,QAAAiN;AAAA,WAAA7M,EAAA,EAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAE1B8C,IAAA,gBAAAvM,EAAC+sC,IAAA,EACC,4BAAC7U,IAAA,EAAiB,OAAA,kBAAgB,GACpC,GAAWx4B,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA,GAFX6M;AAAAA,EAEW;AACX,MAAAA;AAAA,SAAA7M,EAAA,EAAA,MAAA6E,KAAA7E,EAAA,EAAA,MAAA0C,EAAA2B,MAAArE,EAAA,EAAA,MAAA0C,EAAAihB,UACG9W,IAAA,gBAAAvM,EAACitC,MAA2B1oC,OAAAA,GAAgB,SAAAnC,EAAK2B,IAAa,QAAA3B,EAAKihB,OAAAA,CAAO,GAAI3jB,QAAA6E,GAAA7E,EAAA,EAAA,IAAA0C,EAAA2B,IAAArE,EAAA,EAAA,IAAA0C,EAAAihB,QAAA3jB,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA,GAA9E6M;AAA8E,GAI1EkhC,KAAuBhuC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAClC;AAAA,IAAA4E,OAAAA;AAAAA,IAAAqoC,UAAAA;AAAAA,IAAApS,gBAAAA;AAAAA,EAAAA,IAA4C/6B,GAC5CkrC,IAAiBgC,GAAoBC,CAAQ,GAC7CxtC,IAAiBmF,EAAKsf,SAASzkB,UAC/B8tC,IAAgB,OAAO9tC,GAAQC,UAAmB6tC,WAAK,WAAW9tC,EAAQC,SAAS6tC,UAAnE3tC,QAChB6tC,IAAe,OAAOhuC,GAAQC,UAAkB+tC,UAAK,WAAWhuC,EAAQC,SAAS+tC,SAAlE7tC;AAAsF,MAAAK;AAAA,EAAAF,EAAA,CAAA,MAAAwtC,KAAAxtC,SAAAktC,KACvFhtC,IAAAstC,IAAUN,EAAQc,SAAUR,CAAmB,IAA/C3tC,QAAgDG,OAAAwtC,GAAAxtC,OAAAktC,GAAAltC,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAA9D,QAAA0C,IAAcxC;AACd,MAAI,CAACwC,GAAK;AAAA,QAAArC;AAAA,WAAAL,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAEN1J,sBAACgtC,IAAA,EACC,UAAA,gBAAA/sC,EAACk4B,MAAiB,OAAA,2BAAsC,aAAA,0CAAA,CAAyC,EAAA,CACnG,GAAWx4B,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAFXK;AAAAA,EAEW;AAGf,MAAIqC,EAAKuO,SAAU,QAAM;AAAA,QAAA5Q;AAAA,WAAAL,EAAA,CAAA,MAAA6E,KAAA7E,EAAA,CAAA,MAAA0C,EAAA2B,MAAArE,EAAA,CAAA,MAAA0C,EAAAihB,UAAStjB,sBAACktC,IAAA,EAA2B1oC,OAAAA,GAAgB,SAAAnC,EAAK2B,IAAa,QAAA3B,EAAKihB,OAAAA,CAAO,GAAI3jB,OAAA6E,GAAA7E,EAAA,CAAA,IAAA0C,EAAA2B,IAAArE,EAAA,CAAA,IAAA0C,EAAAihB,QAAA3jB,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAA9EK;AAAAA,EAA8E;AAChH,MAAIqC,EAAKuO,SAAU,cAAY;AAC7B,QAAI,CAACy8B,GAAM;AAAA,UAAArtC;AAAA,aAAAL,EAAA,CAAA,MAAA0C,EAAA9B,SAEPP,sBAACgtC,IAAA,EACC,UAAA,gBAAA/sC,EAACk4B,MAAkB,OAAA91B,EAAK9B,OAAM,EAAA,CAChC,GAAWZ,EAAA,CAAA,IAAA0C,EAAA9B,OAAAZ,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAFXK;AAAAA,IAEW;AACX,QAAAA;AAAA,IAAAL,EAAA,EAAA,MAAA0tC,KAAA1tC,UAAAN,KAGQW,IAAA0F,GAAYrG,CAAkB,KAA9BguC,GAA+B1tC,QAAA0tC,GAAA1tC,QAAAN,GAAAM,QAAAK,KAAAA,IAAAL,EAAA,EAAA;AAAlC,UAAAa,IAAA,GAAGR,CAA+B,IAAI4qC,CAAQ;AAAE,QAAAp+B;AAAA,WAAA7M,EAAA,EAAA,MAAA6E,KAAA7E,EAAA,EAAA,MAAA0tC,KAAA1tC,EAAA,EAAA,MAAA0C,KAAA1C,UAAAa,KADvDgM,IAAA,gBAAAvM,EAACmtC,IAAA,EAEQ/qC,OAAAA,GACCgrC,QAAAA,GACD7oC,OAAAA,KAHFhE,CAGO,GACZb,QAAA6E,GAAA7E,QAAA0tC,GAAA1tC,QAAA0C,GAAA1C,QAAAa,GAAAb,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA,GALF6M;AAAAA,EAKE;AAEL,MAAAxM;AAAA,EAAAL,EAAA,EAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAE6C1J,IAAA;AAAA,IAAA4tC,GAAK;AAAA,IAAIluB,SAAW;AAAA,IAAMkF,eAAiB;AAAA,IAAQipB,KAAO;AAAA,EAAA,GAAMluC,QAAAK,KAAAA,IAAAL,EAAA,EAAA;AAAA,MAAAa;AAAA,EAAAb,EAAA,EAAA,MAAA0C,EAAA9B,SAExGC,IAAA,gBAAAP,EAACG,IAAA,EAAe,WAAA,sBAAsBiC,YAAK9B,OAAO,GAAOZ,EAAA,EAAA,IAAA0C,EAAA9B,OAAAZ,QAAAa,KAAAA,IAAAb,EAAA,EAAA;AAAA,MAAA6M;AAAA,EAAA7M,EAAA,EAAA,MAAA0C,EAAAqI,eACxD8B,IAAAnK,EAAKqI,eACJ,gBAAAzK,EAACG,IAAA,EAAe,WAAA,uBAA4B,OAAA,YAAgB,MAAA,SACzDiC,UAAAA,EAAKqI,aACR,GACD/K,EAAA,EAAA,IAAA0C,EAAAqI,aAAA/K,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA;AAAA,MAAA6b;AAAA,EAAA7b,EAAA,EAAA,MAAAa,KAAAb,UAAA6M,KANHgP,IAAA,gBAAAnN,EAACG,IAAA,EAAU,KAAA,MACThO,UAAAA;AAAAA,IAAAA;AAAAA,IACCgM;AAAAA,EAAAA,GAKH,GAAQ7M,QAAAa,GAAAb,QAAA6M,GAAA7M,QAAA6b,KAAAA,IAAA7b,EAAA,EAAA;AAKA,QAAA8b,IAAApZ,EAAKs5B,QAAL;AAAoB,MAAAjgB;AAAA,EAAA/b,UAAA6E,EAAAxD,UAAAu5B,eAAA56B,EAAA,EAAA,MAAA0C,EAAAk4B,eAAA56B,EAAA,EAAA,MAAA86B,KAAA96B,UAAA8b,KAJ5BC,IAAA,gBAAAzb,EAACq6B,IAAA,EACc,aAAA91B,EAAKxD,UAAUu5B,aACrB,OAAAl4B,EAAKk4B,aACIE,gBAAAA,GACV,MAAAhf,EAAAA,CAAoB,GAC1B9b,EAAA,EAAA,IAAA6E,EAAAxD,UAAAu5B,aAAA56B,EAAA,EAAA,IAAA0C,EAAAk4B,aAAA56B,QAAA86B,GAAA96B,QAAA8b,GAAA9b,QAAA+b,KAAAA,IAAA/b,EAAA,EAAA;AAAA,MAAAic;AAAA,SAAAjc,EAAA,EAAA,MAAA6b,KAAA7b,UAAA+b,KAdJE,sBAAClN,IAAA,EAAa,GAAA,QAAY,MAAA,KAAkB,cAAA1O,GAC1Cwb,UAAAA;AAAAA,IAAAA;AAAAA,IAQAE;AAAAA,EAAAA,GAMF,GAAa/b,QAAA6b,GAAA7b,QAAA+b,GAAA/b,QAAAic,KAAAA,IAAAjc,EAAA,EAAA,GAfbic;AAea,GCpHJkyB,KAAkBpuC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC7B;AAAA,IAAA4E,OAAAA;AAAAA,IAAAqoC,UAAAA;AAAAA,IAAAkB,WAAAA;AAAAA,IAAAxtC,OAAAA;AAAAA,IAAAk6B,gBAAAA;AAAAA,EAAAA,IAA8D/6B;AAC9DktC,EAAAA,GAAoBC,CAAQ;AAC5B,QAAAxtC,IAAiBmF,EAAKsf,SAASzkB,UAIdQ,IAAA2E,EAAKxD;AAAU,MAAAhB;AAAA,EAAAL,SAAAN,KAGZW,IAAA0F,GAAYrG,CAAQ,GAACM,OAAAN,GAAAM,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AAAA,EAAAb,EAAA,CAAA,MAAA6E,EAAAxD,aAAArB,EAAA,CAAA,MAAAouC,KAAApuC,EAAA,CAAA,MAAAN,KAAAM,SAAAK,KALvCQ,IAAA,gBAAAP,EAACsW,KAAM,GAAA,QAAY,MAAA,KAAS,MAAA,KAAM,GAAA,QAAU,IAAA,aAC1C,UAAA,gBAAAtW,EAACkrC,MACY,WAAAtrC,GACCkuC,YAAAA,GACF1uC,UAAAA,GACI,cAAAW,EAAAA,CAAqB,EAAA,CAEvC,GAAML,EAAA,CAAA,IAAA6E,EAAAxD,WAAArB,OAAAouC,GAAApuC,OAAAN,GAAAM,OAAAK,GAAAL,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AARR,QAAAkD,IACErC;AAQA,MAAAgM;AAAA,EAAA7M,EAAA,CAAA,MAAA6E,KAAA7E,SAAA86B,KAAA96B,EAAA,CAAA,MAAAktC,KAEArgC,sBAAC+J,GAAA,EAAS,MAAA,KAAM,GAAA,QAAY,MAAA,KAAS,MAAA,KACnC,UAAA,gBAAAtW,EAACytC,IAAA,EAA4BlpC,OAAAA,GAAiBqoC,UAAAA,GAA0BpS,gBAAAA,GAAc,GACxF,GAAM96B,OAAA6E,GAAA7E,OAAA86B,GAAA96B,OAAAktC,GAAAltC,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA;AAHR,QAAAgoC,IACEn7B;AAGA,MAAAgP;AAAA,EAAA7b,EAAA,EAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAaI8R,IAAA,gBAAAvb,EAACsW,GAAA,EAAU,OAAA,aAAoB,SAAA,eAC7B,UAAA,gBAAAtW,EAACI,GAAA,EAAmB,MAAA,YAAiB,MAAA,GAAA,CAAE,GACzC,GAAMV,QAAA6b,KAAAA,IAAA7b,EAAA,EAAA;AAAA,MAAA8b;AAAA,EAAA9b,UAAAY,KAZRkb,sBAAC8L,IAAA,EACO,OAAA,UACH,IAAA,aACe,mBAAA,OACN,aAAA,iBACA,YAAA,GACR,KAAA,KACF,GAAA,MACC,IAAA,OAEH/L,UAAAA;AAAAA,IAAAA;AAAAA,sBAGCpb,IAAA,EAAgB,YAAA,YAAqB,WAAA,MACnCG,UAAAA,EAAAA,CACH;AAAA,EAAA,GACF,GAAOZ,QAAAY,GAAAZ,QAAA8b,KAAAA,IAAA9b,EAAA,EAAA;AAAA,MAAA+b;AAAA,EAAA/b,EAAA,EAAA,MAAAgoC,KAAAhoC,UAAAkD,KACP6Y,sBAACnF,GAAA,EAAS,MAAA,KAAS,MAAA,KAAS,MAAA,KAAa,UAAA,YAAoB,UAAA,UAC3D,4BAACy3B,IAAA,EACU,UAAA,YACH,OAAA,KACD,MAAA,KACA,MAAA,KACS,eAAA,QACEnrC,mBACF8kC,cAAAA,GACC,eAAA,KACJ,gBACA,WAAA,KACO,kBAAA,KACL,iBACD,aAAA,8BACF,WAAA,QAAM,GAEpB,GAAMhoC,QAAAgoC,GAAAhoC,QAAAkD,GAAAlD,QAAA+b,KAAAA,IAAA/b,EAAA,EAAA;AAAA,MAAAic;AAAA,SAAAjc,EAAA,EAAA,MAAA8b,KAAA9b,UAAA+b,KAnCRE,IAAA,gBAAAvN,EAACkZ,IAAA,EAAe,WAAA,UAAkB,UAAA,YAAiB,OAAA,KAAS,MAAA,KAAS,MAAA,KAAa,UAAA,UAChF9L,UAAAA;AAAAA,IAAAA;AAAAA,IAiBAC;AAAAA,EAAAA,GAkBF,GAAO/b,QAAA8b,GAAA9b,QAAA+b,GAAA/b,QAAAic,KAAAA,IAAAjc,EAAA,EAAA,GApCPic;AAoCO,GC3EEqyB,KAAyB,sBACzBC,KAAqC,2BACrCC,KAAwBA,CAAC9rC,OAAsE;AAAA,EAC1GtC,MAAMkuC;AAAAA,EACNjqC,IAAI3B,EAAM2B;AAAAA,EACV4B,OAAOvD,EAAM9B;AAAAA,EACbJ,MAAMkC,EAAMlC;AAAAA,EACZb,UAAU;AAAA,IAAE6tC,SAAS9qC,EAAM2B;AAAAA,EAAAA;AAC7B,IACaoqC,KAAuBA,CAClCjB,GACA/tC,OAKiB;AAAA,EACjBW,MAAMkuC;AAAAA,EACNjqC,IAAI,GAAGmpC,CAAO,KAAK/tC,EAAK4E,EAAE;AAAA,EAC1B4B,OAAOxG,EAAKwG;AAAAA,EACZzF,MAAMf,EAAKe;AAAAA,EACXb,UAAU;AAAA,IAAE6tC,SAAAA;AAAAA,IAASE,QAAQjuC,EAAK4E;AAAAA,EAAAA;AACpC,IAGaqqC,KAAyBA,CAACvT,GAAkCwT,OACtExT,KAAS,eAAe,aAAawT,GCX3BC,KAAsB,YAC7BC,KAAgBA,CAAC/tB,MACrBA,GAAS7f,IAAK+S,CAAAA,OAAY;AAAA,EAAE3P,IAAI2P,EAAO3P;AAAAA,EAAI4B,OAAO+N,EAAO/N;AAAAA,EAAOzF,MAAMwT,EAAOxT;AAAAA,EAAMwN,KAAKgG,EAAOhG;AAAI,EAAE,GACjG8gC,KAAqBA,CAACpsC,GAAgCjD,MAA4B;AACtF,QAAM4E,IAAK3B,EAAMgrC,OAAOjuC,CAAI,GACtBwG,IAAQvD,EAAMqsC,UAAUtvC,CAAI,GAC5Be,IAAOkC,EAAMssC,WAAWvvC,CAAI,GAC5BC,IAAW+uC,GAAqB/rC,EAAM2B,IAAI;AAAA,IAAEA,IAAAA;AAAAA,IAAI4B,OAAAA;AAAAA,IAAOzF,MAAAA;AAAAA,EAAAA,CAAM;AACnE,SAAO;AAAA,IACL6D,IAAI0B,GAAYrG,CAAQ;AAAA,IACxBuG,OAAAA;AAAAA,IACAzF,MAAAA;AAAAA,IACAd,UAAAA;AAAAA,IACA8Y,QAAQ;AAAA,MACNvH,MAAM;AAAA,MACN/C,WAAWqgC;AAAAA,MACX3gC,MAAM;AAAA,QAAE4/B,SAAS9qC,EAAM2B;AAAAA,QAAIqpC,QAAQrpC;AAAAA,MAAAA;AAAAA,IAAG;AAAA,EACxC;AAEJ,GACM4qC,KAAiBA,CAAC7Z,GAAgB5gB,MAAgC;AACtE,QAAM06B,IAAUA,CAACvpC,MAAgB;AAC/B,UAAMiM,IAAQ4C,GAAO06B,QAAQvpC,CAAG,KAAK;AACrC,WAAOiM,MAAU,KAAK/J,OAAOsnC,oBAAoBv9B;AAAAA,EACnD;AACA,SAAO,CAAC,GAAGwjB,CAAI,EAAE3iB,KAAK,CAACiC,GAAMC,MAAUu6B,EAAQx6B,CAAI,IAAIw6B,EAAQv6B,CAAK,CAAC;AACvE,GACMy6B,KAAqB,OAAO1sC,MAAwD;AACxF,QAAM1B,IAAQ,MAAMiK,QAAQC,QAAQxI,EAAM1B,OAAO,EAAEoK,MAAM,MAAM,EAAE;AACjE,MAAI,CAAC1I,EAAM2sC,QAAS,QAAOruC,EAAMC,IAAKxB,CAAAA,MAASqvC,GAAmBpsC,GAAOjD,CAAI,CAAC;AAC9E,QAAM4vC,IAAU3sC,EAAM2sC,SAChBC,wBAAYp8B,IAAAA;AAClB,aAAWzT,KAAQuB,GAAO;AACxB,UAAM2E,IAAM0pC,EAAQ1pC,IAAIlG,CAAI,GACtB8vC,IAAOD,EAAMj7B,IAAI1O,CAAG,KAAK,CAAA;AAC/B4pC,IAAAA,EAAK3uB,KAAKnhB,CAAI,GACd6vC,EAAM3Z,IAAIhwB,GAAK4pC,CAAI;AAAA,EACrB;AACA,SAAON,GAAe,CAAC,GAAGK,EAAMla,KAAAA,CAAM,GAAGia,EAAQ76B,KAAK,EAAEvT,IAAK0E,CAAAA,OAAS;AAAA,IACpEtB,IAAI,GAAG3B,EAAM2B,EAAE,UAAUsB,CAAG;AAAA,IAC5BM,OAAOopC,EAAQppC,MAAMN,CAAG;AAAA,IACxBnF,MAAM6uC,EAAQ7uC,OAAOmF,CAAG;AAAA,IACxBq7B,aAAa;AAAA,IACbjpB,WAAWu3B,EAAMj7B,IAAI1O,CAAG,KAAK,CAAA,GAAI1E,IAAKxB,CAAAA,MAASqvC,GAAmBpsC,GAAOjD,CAAI,CAAC;AAAA,EAAA,EAC9E;AACJ,GACM+vC,KAAc,OAAO9sC,MAAsD;AAC/E,MAAIA,EAAMuO,SAAS;AACjB,WAAO;AAAA,MACL5M,IAAI,uBAAuB3B,EAAM2B,EAAE;AAAA,MACnC4B,OAAOvD,EAAM9B;AAAAA,MACbJ,MAAMkC,EAAMlC;AAAAA,MACZwgC,aAAa;AAAA,MACblgB,SAAS+tB,GAAcnsC,EAAMoe,OAAO;AAAA,MACpC/I,UAAU,MAAMq3B,GAAmB1sC,CAAK;AAAA,IAAA;AAG5C,QAAMhD,IAAW8uC,GAAsB9rC,CAAK;AAC5C,SAAO;AAAA,IACL2B,IAAI0B,GAAYrG,CAAQ;AAAA,IACxBuG,OAAOvD,EAAM9B;AAAAA,IACbJ,MAAMkC,EAAMlC;AAAAA,IACZd,UAAAA;AAAAA,IACA8Y,QAAQ;AAAA,MACNvH,MAAM;AAAA,MACN/C,WAAWqgC;AAAAA,MACX3gC,MAAM;AAAA,QAAE4/B,SAAS9qC,EAAM2B;AAAAA,MAAAA;AAAAA,IAAG;AAAA,EAC5B;AAEJ,GASaorC,KAAwB,OAAO5qC,MAA8D;AACxG,QAAM;AAAA,IAAEqoC,UAAAA;AAAAA,IAAUyB,iBAAAA;AAAAA,IAAiBe,aAAAA;AAAAA,EAAAA,IAAgB7qC,GAC7Ci4B,IAAWoQ,EAASyC,aAAAA,GACpBC,IAAe,IAAI18B,IAAI4pB,EAAS77B,IAAK87B,CAAAA,MAAY,CAACA,EAAQ14B,IAAI04B,CAAO,CAAC,CAAC,GACvE/T,IAASkkB,EACZ2C,WAAAA,EACA5qC,OAAQvC,CAAAA,MAAUgsC,GAAuBhsC,EAAMy4B,OAAOwT,CAAe,KAAKe,EAAYhtC,EAAMuS,IAAI,CAAC,GAC9F66B,wBAAgB58B,IAAAA;AACtB,aAAWxQ,KAASsmB,GAAQ;AAC1B,UAAMub,IAAY7hC,EAAMq6B,WAAW6S,EAAarpC,IAAI7D,EAAMq6B,OAAO,IAAIr6B,EAAMq6B,UAAU6R,IAC/EW,IAAOO,EAAUz7B,IAAIkwB,CAAS,KAAK,CAAA;AACzCgL,IAAAA,EAAK3uB,KAAKle,CAAK,GACfotC,EAAUna,IAAI4O,GAAWgL,CAAI;AAAA,EAC/B;AACA,QAAMQ,IAAcjT,EAAS77B,IAAK87B,CAAAA,MAAYA,EAAQ14B,EAAE;AACxD,EAAIyrC,EAAUvpC,IAAIqoC,EAAmB,KAAK,CAACgB,EAAarpC,IAAIqoC,EAAmB,KAC7EmB,EAAYnvB,KAAKguB,EAAmB;AAEtC,QAAMjkC,IAA4B,CAAA;AAClC,aAAW45B,KAAawL,GAAa;AACnC,UAAMhT,IAAU6S,EAAav7B,IAAIkwB,CAAS;AAG1C,QAAIxH,GAAS5B,UAAU,aAAa,CAACwT,EAAiB;AACtD,UAAMqB,IAAgBF,EAAUz7B,IAAIkwB,CAAS,KAAK,CAAA,GAC5CzjB,IAAU+tB,GAAc9R,GAASjc,OAAO;AAC9C,QAAIkvB,EAActuC,WAAW,KAAK,CAACof,EAAS;AAC5C,UAAM6b,IAAoB,CAAA;AAC1B,eAAWj6B,KAASstC,EAAerT,CAAAA,EAAM/b,KAAK,MAAM4uB,GAAY9sC,CAAK,CAAC;AAEtEiI,IAAAA,EAAOiW,KAAK;AAAA,MAAEvc,IAAIkgC;AAAAA,MAAWt+B,OAAO82B,GAASn8B;AAAAA,MAAOkgB,SAAAA;AAAAA,MAAS6b,OAAAA;AAAAA,MAAOqE,aAAa;AAAA,IAAA,CAAO;AAAA,EAC1F;AACA,SAAOr2B;AACT,GCvGaslC,KAA+B,sBAC/BC,KAAmC,0BACnCC,KAAqC,4BAO5CC,KAAYH,IAEZI,KAAeA,CAACxrC,MAA0F;AAC9G,QAAM;AAAA,IAAE+I,MAAAA;AAAAA,IAAM4J,KAAAA;AAAAA,IAAKm3B,iBAAAA;AAAAA,EAAAA,IAAoB9pC,GACjCyrC,IAAY1iC,KAAQ,OAAOA,KAAS,WAAWA,IAAO/N,QACtD2tC,IAAU8C,KAAa,aAAaA,IAAYA,EAAU9C,UAAU3tC,QACpE6tC,IAAS4C,KAAa,YAAYA,IAAYA,EAAU5C,SAAS7tC,QACjE0wC,IAAiB,OAAO/C,KAAY,WAAWh2B,EAAI01B,SAASc,SAASR,CAAO,IAAI3tC,QAChFga,IAAYA,CAAChU,MACjB6oC,GAAuB7oC,EAAMs1B,OAAOwT,EAAAA,CAAiB,KAAKn3B,EAAItV,QAAQ8S,QAAQnP,EAAMoP,IAAI,GACpFvS,KACH6tC,KAAkB12B,EAAU02B,CAAc,IAAIA,IAAiB1wC,WAChE2X,EAAI01B,SAAS2C,WAAAA,EAAa10B,KAAKtB,CAAS;AAC1C,MAAI,CAACnX,EAAO;AACZ,QAAMhD,IACJgD,EAAMuO,SAAS,gBAAgB,OAAOy8B,KAAW,WAC7Ce,GAAqB/rC,EAAM2B,IAAI;AAAA,IAAEA,IAAIqpC;AAAAA,IAAQznC,OAAOynC;AAAAA,EAAAA,CAAQ,IAC5Dc,GAAsB9rC,CAAK;AACjC8U,SAAAA,EAAIg5B,SAASC,YAAYL,IAAW;AAAA,IAClC1wC,UAAAA;AAAAA,IACAkB,OAAOlB,EAASuG;AAAAA,EAAAA,CACjB,GACMvG;AACT,GAMagxC,KAAgCA,CAC3CvqC,IAA0C,OACV;AAChC,QAAMvF,IAAQuF,EAAQvF,SAAS,YACzB+tC,IAAkBA,MAAMxoC,EAAQ20B,iBAAiB,SAAS,MAAMj7B;AAEtE,SAAO;AAAA,IACLwE,IAAI;AAAA,IACJ8G,SAASqM,GAAK;AACZA,MAAAA,EAAIoM,MAAM+sB,aAAa;AAAA,QACrBtsC,IAAI6rC;AAAAA,QACJtvC,OAAO,GAAGA,CAAK;AAAA,QACf8iC,MAAM;AAAA,UACJzyB,MAAM;AAAA;AAAA,UAENuzB,2BAA2B,CAAC,GAAGhtB,EAAI01B,SAASyC,aAAAA,EAAe1uC,IAAK87B,CAAAA,MAAYA,EAAQ14B,EAAE,GAAGuqC,EAAmB;AAAA,UAC5GhK,SAASA,MACP6K,GAAsB;AAAA,YACpBvC,UAAU11B,EAAI01B;AAAAA,YACdyB,iBAAiBA,EAAAA;AAAAA,YACjBe,aAAcz6B,CAAAA,MAASuC,EAAItV,QAAQ8S,QAAQC,CAAI;AAAA,UAAA,CAChD;AAAA,UACHgvB,aAAaA,MAAM,CAAA;AAAA,QAAA;AAAA,MACrB,CACD,GAEDzsB,EAAIoM,MAAM+sB,aAAa;AAAA,QACrBtsC,IAAI8rC;AAAAA,QACJvvC,OAAAA;AAAAA,QACA8iC,MAAM;AAAA,UACJzyB,MAAM;AAAA,UACNoT,QAASxf,CAAAA,MACP,gBAAAvE,EAACytC,IAAA,EAAqB,OAAAlpC,GAAc,UAAU2S,EAAI01B,UAAU,gBAAgB/mC,EAAQ20B,eAAAA,CAAe;AAAA,QAAA;AAAA,MAEvG,CACD,GAEDtjB,EAAIoM,MAAM+sB,aAAa;AAAA,QACrBtsC,IAAI+rC;AAAAA,QACJxvC,OAAAA;AAAAA,QACA8iC,MAAM;AAAA,UACJzyB,MAAM;AAAA,UACNoT,QAASxf,CAAAA,MACP,gBAAAvE,EAAC6tC,IAAA,EACC,OAAAtpC,GACA,UAAU2S,EAAI01B,UACd,WAAWgD,IACX,OAAAtvC,GACA,gBAAgBuF,EAAQ20B,eAAAA,CAAe;AAAA,QAAA;AAAA,MAG7C,CACD,GACDtjB,EAAIg5B,SAASI,gBAAgB;AAAA,QAC3BvsC,IAAI+rC;AAAAA,QACJzsB,QAAQysB;AAAAA,QACRS,QAAQ;AAAA,UACNC,MAAM;AAAA,UACNC,gBAAgB;AAAA,UAChBC,eAAe;AAAA,UACfC,iBAAiB;AAAA,UACjBC,cAAc;AAAA,UACdC,iBAAiB;AAAA;AAAA;AAAA;AAAA,UAIjBC,wBAAwB;AAAA,QAAA;AAAA,MAC1B,CACD,GAED55B,EAAIvV,SAASovC,gBACX;AAAA,QACEhtC,IAAIkqC;AAAAA,QACJtoC,OAAO;AAAA,QACP+M,UAAU;AAAA,QACVxS,MAAM8wC,GAAsBpE;AAAAA,MAAAA,GAE9B;AAAA,QACE3vB,SAAU3P,OAASyiC,GAAa;AAAA,UAAEziC,MAAAA;AAAAA,UAAM4J,KAAAA;AAAAA,UAAKm3B,iBAAAA;AAAAA,QAAAA,CAAiB;AAAA,MAAA,CAElE;AAGA,YAAM4C,IAAoBA,MAAM;AAC9B,QAAI/5B,EAAIoM,MAAMC,QAAQqsB,EAAgC,KACpD14B,EAAIoM,MAAM4tB,YAAYtB,EAAgC;AAAA,MAE1D,GACMuB,IAAsBj6B,EAAI01B,SAAS1rC,MAAM0d,UAAUqyB,CAAiB,GACpEG,IAAqBl6B,EAAItV,QAAQV,MAAM0d,UAAUqyB,CAAiB;AACxE,aAAO;AAAA,QACL7uB,UAAU;AACR+uB,UAAAA,EAAAA,GACAC,EAAAA;AAAAA,QACF;AAAA,MAAA;AAAA,IAEJ;AAAA,EAAA;AAEJ,GC9JaC,KAA0BA,CAACtwC,MAA6ByjB,MACnEA,EAAQrgB,MAAOlB,CAAAA,MAAWlC,EAAUS,OAAO8vC,qBAAqBruC,CAAM,CAAC,GCG5DsuC,KAA4B,KAC5BC,KAAmC,GACnCC,KAAmC,KAEnCC,KAAoCA,CAACC,MAChDA,IAAa,KAAKA,KAAcF,IAErBG,KAA8BA,CAACrtC,MAA4C;AACtF,QAAMstC,IAAe,CAAC,GAAGttC,EAAMutC,sBAAsBvtC,EAAMwtC,iBAAiB,GACtEC,IACJT,KACAM,EAAaI,OAAO,CAACC,GAAO1B,MAAS0B,IAAQ1B,GAAM,CAAC,IACpDqB,EAAazwC,SAASowC;AAExB,SAAOjtC,EAAMotC,cAAcK;AAC7B,GCQMG,KAAkB;AAAA,EAAEC,WAAW;AAAA,EAAKC,OAAO;AAAA,EAAKC,OAAO;AAAI,GAE3DC,KAAoD;AAAA,EACxD1wC,MAAM;AAAA,EACNG,WAAW;AAAA,EACXC,MAAM;AACR,GAEMuwC,KAAoBA,CAACC,OAAiD;AAAA,EAC1EL,WAAWK,GAAYL,aAAaD,GAAgBC;AAAAA,EACpDC,OAAOI,GAAYJ,SAASF,GAAgBE;AAAAA,EAC5CC,OAAOG,IAAaA,EAAWH,QAAQH,GAAgBG;AACzD,IAEaI,KAA6BA,CAACtwC,GAA6BH,MACtE,GAAGswC,GAAYnwC,CAAK,CAAC,IAAIH,CAAI,SAiBzB0wC,KAAwBA,CAAA5xC,GAAAqB,GAAAH,GAAArC,MAAA;AAAA,QAAAF,IAAAC,EAAA,EAAA,GAI5BizC,IAAAhzC,MAAAL,SAAA,KAAAK,GAEAqD,IAAeshB,GAA0BniB,CAAK,EAAEH,CAAI,GACpDikB,IAAyB5D,GAA6BvhB,CAAS,GAC/DolB,IAAe3D,GAAyBzhB,CAAS,GACjDS,IAAeR,EAAkBD,EAASS,OAAON,OAAQC,EAAuB,GAChFklB,IAA0BrlB,EAAkBD,EAASS,OAAON,OAAQ6J,EAAwB,GAC5Fqb,IAA2B5kB,EAAMgjB,QAASvhB,CAAM;AAAE,MAAA2jB,GAAA7mB;AAAA,MAAAL,SAAA0mB,KAAA1mB,EAAA,CAAA,MAAA8B,KAAA9B,EAAA,CAAA,MAAAwmB,KAAAxmB,EAAA,CAAA,MAAAymB,KAAAzmB,SAAA0C,KAAA1C,EAAA,CAAA,MAAA2mB,GAAA;AAClD,UAAAC,IAAuBC,GAA2B/kB,GAAQY,GAAO8jB,GAAkB;AAAA,MAAAO,wBACzDrkB,MAAU;AAAA,IAAA,CACnC,GACDskB,IAA4BC,GAAgCnlB,CAAM;AAClEolB,IAAAA,IAAoB;AAAA,MAAA,GACfR;AAAAA,MAAkBtB,SACZsB,EAAkBtB,QAAQngB,OAAQoe,CAAAA,MAAA;AACzC,cAAAvS,IAAqB6V,EAAkBtD,EAASC,cAAe;AAAE,eAC1DxS,KACFpO,MAAU,SACPykB,GAAgCrW,GAAc2V,CAG7C,IAFDW,GAAiCtW,GAAc0V,GAAkBC,GAAQpD,GAAW;AAAA,UAAAN,UACxEiE;AAAAA,QAAAA,CACX,MACHK,GAA+BvW,GAAc;AAAA,UAAAwW,eAC5BN;AAAAA,UAAmBO,UACxBX;AAAAA,QAAAA,CACX,IATA;AAAA,MAUE,CACV;AAAA,IAAA,GAGDvmB,IAAA6mB,EAAW9B,QAAQjK,KAAMsM,CAAAA,MAAepE,EAASqB,aAAcwC,EAAW7B,cACrD,KAArB6B,EAAW9B,QAAQ,CAAA,GAAGplB,OAAA0mB,GAAA1mB,OAAA8B,GAAA9B,OAAAwmB,GAAAxmB,OAAAymB,GAAAzmB,OAAA0C,GAAA1C,OAAA2mB,GAAA3mB,OAAAknB,GAAAlnB,OAAAK;AAAAA,EAAA;AAAA6mB,IAAAA,IAAAlnB,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA;AAFxB,QAAAulB,IACEllB,GAEF2C,IAAeuiB,IAAkBoB,EAAkBpB,EAAejC,cAAe,IAAlEzjB;AAAgF,MAAAgB;AAAA,EAAAb,EAAA,CAAA,MAAAuD,KAAAvD,SAAAqB,KACjCR,IAAAA,MAAM8wC,GAAwBtwC,GAAWkC,CAAM,GAACvD,OAAAuD,GAAAvD,OAAAqB,GAAArB,QAAAa,KAAAA,IAAAb,EAAA,EAAA;AAA9G,QAAAghC,IAAoB1/B,EAAkBD,EAASS,OAAON,OAAQX,CAAgD,GAC9GsyC,IAAsB5tB,IAAA,cAAgCA,EAAeb,QAAS,KAAxDnhB;AAAoE,MAAAsJ;AAAA,EAAA7M,UAAAmzC,KAC3BtmC,IAAA6P,CAAAA,MAAW9a,EAAKwxC,aAAcD,CAAa,KAAhC,IAAyCnzC,QAAAmzC,GAAAnzC,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA;AAAnH,QAAA0J,IAAapI,EAAkBD,EAASgyC,eAAe7xC,OAAQqL,CAAoD;AAAE,MAAAgP;AAAA,EAAA7b,EAAA,EAAA,MAAA0C,KAAA1C,UAAAuC,KAK5GsZ,IAAAm3B,GAA2BtwC,GAAOH,CAAI,GAACvC,QAAA0C,GAAA1C,QAAAuC,GAAAvC,QAAA6b,KAAAA,IAAA7b,EAAA,EAAA;AAAA,MAAA8b;AAAA,EAAA9b,EAAA,EAAA,MAAA0C,KAAA1C,EAAA,EAAA,MAAAuC,KAAAvC,EAAA,EAAA,MAAAgD,GAAApC,SACvCkb,IAAA9Y,GAAMpC,SAAWoyC,GAA2BtwC,GAAOH,CAAI,GAACvC,QAAA0C,GAAA1C,QAAAuC,GAAAvC,EAAA,EAAA,IAAAgD,GAAApC,OAAAZ,QAAA8b,KAAAA,IAAA9b,EAAA,EAAA;AACzD,QAAA+b,IAAA/Y,GAAMxC,SAAW+B,MAAS,SAAT,cAAA;AAA6C,MAAA0Z;AAAA,EAAAjc,EAAA,EAAA,MAAAuD,KAAAvD,UAAAknB,EAAA9B,QAAA1jB,UAAA1B,EAAA,EAAA,MAAAqB,EAAAS,UAC/Dma,IAAAiL,EAAW9B,QAAQ1jB,SAAU,KAAKsG,EAAQ3G,EAASS,OAAO0lB,eAAgBjkB,CAAM,GAAEvD,QAAAuD,GAAAvD,EAAA,EAAA,IAAAknB,EAAA9B,QAAA1jB,QAAA1B,EAAA,EAAA,IAAAqB,EAAAS,QAAA9B,QAAAic,KAAAA,IAAAjc,EAAA,EAAA;AAC5E,QAAAmc,KAAC,CAACzS,KAADwpC,MAADlS;AAA6C,MAAA1c;AAAA,EAAAtkB,UAAAuD,KAAAvD,EAAA,EAAA,MAAAqB,EAAAS,UAGlDwiB,IAAAwuB,GAAkBzxC,EAASS,OAAOwxC,cAAe/vC,CAAM,CAAC,GAACvD,QAAAuD,GAAAvD,EAAA,EAAA,IAAAqB,EAAAS,QAAA9B,QAAAskB,KAAAA,IAAAtkB,EAAA,EAAA;AAAA,MAAA6nB;AAAA,EAAA7nB,UAAAmzC,KAAAnzC,EAAA,EAAA,MAAAqB,EAAAgyC,kBACvDxrB,IAAAA,MAAMxmB,EAASgyC,eAAeE,QAASJ,GAAe,EAAI,GAACnzC,QAAAmzC,GAAAnzC,EAAA,EAAA,IAAAqB,EAAAgyC,gBAAArzC,QAAA6nB,KAAAA,IAAA7nB,EAAA,EAAA;AAAA,MAAA8nB;AAAA,EAAA9nB,EAAA,EAAA,MAAAghC,KAAAhhC,EAAA,EAAA,MAAAmzC,KAAAnzC,EAAA,EAAA,MAAAqB,EAAAgyC,kBAChDvrB,IAAA0rB,CAAAA,MAAA;AACjB,KAAI,CAACA,KAADxS,MAA2B3/B,EAASgyC,eAAeE,QAASJ,GAAe,CAACK,CAAS;AAAA,EAAE,GAC5FxzC,QAAAghC,GAAAhhC,QAAAmzC,GAAAnzC,EAAA,EAAA,IAAAqB,EAAAgyC,gBAAArzC,QAAA8nB,KAAAA,IAAA9nB,EAAA,EAAA;AAAA,MAAA+nB;AAAA,SAAA/nB,UAAAghC,KAAAhhC,EAAA,EAAA,MAAAuD,KAAAvD,EAAA,EAAA,MAAAkzC,KAAAlzC,UAAAuC,KAAAvC,EAAA,EAAA,MAAA6nB,KAAA7nB,EAAA,EAAA,MAAA8nB,KAAA9nB,EAAA,EAAA,MAAA6b,KAAA7b,UAAA8b,KAAA9b,EAAA,EAAA,MAAA+b,KAAA/b,EAAA,EAAA,MAAAic,KAAAjc,UAAAmc,KAAAnc,EAAA,EAAA,MAAAskB,KAdIyD,IAAA;AAAA,IAAAxkB,QAAAA;AAAAA,IAAAhB,MAAAA;AAAAA,IAAA0D,OAGE4V;AAAAA,IAAuCjb,OACvCkb;AAAAA,IAAwDtb,MACzDub;AAAAA,IAA8DxV,KAC/D0V;AAAAA,IAAkFu3B,WAC5Er3B;AAAAA,IAA6C+2B,qBAAAA;AAAAA,IAAAlS,aAAAA;AAAAA,IAAA8P,MAGlDxsB;AAAAA,IAAyDmvB,QACvD5rB;AAAAA,IAA2D6rB,mBAChD5rB;AAAAA,EAAAA,GAGpB9nB,QAAAghC,GAAAhhC,QAAAuD,GAAAvD,QAAAkzC,GAAAlzC,QAAAuC,GAAAvC,QAAA6nB,GAAA7nB,QAAA8nB,GAAA9nB,QAAA6b,GAAA7b,QAAA8b,GAAA9b,QAAA+b,GAAA/b,QAAAic,GAAAjc,QAAAmc,GAAAnc,QAAAskB,GAAAtkB,QAAA+nB,KAAAA,IAAA/nB,EAAA,EAAA,GAfM+nB;AAeN,GAGG4rB,KAAqB5zC,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACzB;AAAA,IAAA0I,MAAAA;AAAAA,IAAAtH,WAAAA;AAAAA,EAAAA,IAA4BtB;AAAM,MAAAG;AAAA,EAAAF,EAAA,CAAA,MAAA2I,EAAApF,UACpBrD,IAAAyI,EAAIpF,OAAOwE,MAAO,GAAG,GAAC/H,EAAA,CAAA,IAAA2I,EAAApF,QAAAvD,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAApC,QAAA0C,IAAcxC,EAAsB,CAAA,GACpCmX,IAAmB3U,MAAU,SAASK,EAAoBC,SAAUD,EAAoBL,OAIzDrC,IAAA,GAAGqC,CAAK,IAAIiG,EAAIpG,IAAK;AAAE,MAAA1B;AAAA,EAAAb,EAAA,CAAA,MAAA2I,EAAA1C,SAAAjG,EAAA,CAAA,MAAA2I,EAAApF,UAAAvD,SAAAqB,KAIlDR,IAAA,gBAAAP,EAACgmB,IAAA,EAA2BjlB,WAAAA,GAAmB,QAAAsH,EAAIpF,QAAgB,OAAAoF,EAAI1C,OAAQ,aAAA,GAAA,CAAW,GAAGjG,EAAA,CAAA,IAAA2I,EAAA1C,OAAAjG,EAAA,CAAA,IAAA2I,EAAApF,QAAAvD,OAAAqB,GAAArB,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAA6M;AAAA,SAAA7M,EAAA,CAAA,MAAAqX,KAAArX,SAAAK,KAAAL,EAAA,CAAA,MAAAa,KAAAb,EAAA,CAAA,MAAA2I,EAAApF,UAL/FsJ,IAAA,gBAAAvM,EAACszC,MAC4B,6BAAAvzC,GACJ,yBAAAsI,EAAIpF,QACvB8T,IAAAA,GAEJxW,UAAAA,EAAAA,CACF,GAAeb,OAAAqX,GAAArX,OAAAK,GAAAL,OAAAa,GAAAb,EAAA,CAAA,IAAA2I,EAAApF,QAAAvD,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA,GANf6M;AAMe,GAIbgnC,KAAeA,CAAChvC,MAA0F;AAC9G,QAAM;AAAA,IAAEmjC,SAAAA;AAAAA,IAASr/B,MAAAA;AAAAA,IAAMtH,WAAAA;AAAAA,EAAAA,IAAcwD;AACrC,SAAK8D,EAAKpC,MAGR,gBAAAjG,EAAC+tC,IAAA,EACC,MAAK,KACL,MAAK,KACL,eAAe1lC,EAAKpG,MACpB,gBAAgB,gBAAAjC,EAACqzC,IAAA,EAAmB,WAAAtyC,GAAsB,MAAAsH,EAAA,CAAW,GACrE,cAAcq/B,GACd,WAAWr/B,EAAK6qC,WAChB,aAAa7qC,EAAKq4B,aAClB,eAAer4B,EAAKmoC,KAAK4B,WACzB,WAAW/pC,EAAKmoC,KAAK6B,OACrB,WAAWhqC,EAAKmoC,KAAK8B,OACrB,kBAAkBf,IAClB,aAAa,UAAUlpC,EAAK1C,KAAK,IACjC,WAAU,QACV,cAAe+Z,CAAAA,MAAU3e,EAAUS,OAAOgyC,cAAcnrC,EAAKpF,QAAQyc,CAAK,GAC1E,mBAAmBrX,EAAK+qC,kBAAAA,CAAkB,IAlBxB1L;AAqBxB,GAEa+L,KAA2Bh0C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAKtC;AAAA,IAAA8X,UAAAA;AAAAA,IAAArV,OAAAA;AAAAA,IAAArB,WAAAA;AAAAA,EAAAA,IAAuCtB,GACvCkyC,IAAmB+B,GAAuBtxC,CAAK;AAAE,MAAAxC;AAAA,EAAAF,SAAAiyC,KACrB/xC,IAAA8xC,GAAkCC,CAAU,GAACjyC,OAAAiyC,GAAAjyC,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAzE,QAAAkzC,IAA4BhzC,GAC5BwU,IAAau+B,GAAsB5xC,GAAWqB,GAAO,QAAQwwC,CAAmB,GAChFv+B,IAAcs+B,GAAsB5xC,GAAWqB,GAAO,SAASwwC,CAAmB;AAAE,MAAA7yC;AAAA,MAAAL,EAAA,CAAA,MAAA+X,KAAA/X,EAAA,CAAA,MAAA0U,KAAA1U,EAAA,CAAA,MAAA2U,KAAA3U,SAAAqB,GAAA;AACpF,UAAA4yC,IAAkBJ,GAAa;AAAA,MAAA7L,SAAWjwB;AAAAA,MAAQpP,MAAQgM;AAAAA,MAAKtT,WAAAA;AAAAA,IAAAA,CAAa;AACrEhB,IAAAA,IAAAwzC,GAAa;AAAA,MAAA7L,SAAWiM;AAAAA,MAAStrC,MAAQ+L;AAAAA,MAAIrT,WAAAA;AAAAA,IAAAA,CAAa,GAACrB,OAAA+X,GAAA/X,OAAA0U,GAAA1U,OAAA2U,GAAA3U,OAAAqB,GAAArB,OAAAK;AAAAA,EAAA;AAAAA,IAAAA,IAAAL,EAAA,CAAA;AAAA,SAA3DK;AAA2D,GAG9D2zC,KAAyBtxC,CAAAA,MAAA;AAAA,QAAA1C,IAAAC,EAAA,CAAA,GAC7B,CAAA+f,GAAAk0B,CAAA,IAA0BjqC,EAAS,CAAC;AAAE,MAAA/J,GAAAG;AAAA,SAAAL,SAAA0C,KAE5BxC,IAAAA,MAAA;AACR,UAAAgY,IAAgBE,SAAQ+7B,cAA4B,0BAA0BzxC,CAAK,IAAI;AACvF,QAAI,CAACwV;AAAO;AAEZ,UAAAk8B,IAAgBA,MAAMF,EAASh8B,EAAO8b,WAAY;AAClDogB,IAAAA,EAAAA;AACA,UAAAC,IAAiB,IAAIC,eAAeF,CAAO;AAC3CC,WAAAA,EAAQE,QAASr8B,CAAO,GACjB,MAAMm8B,EAAQG,WAAAA;AAAAA,EAAa,GACjCn0C,IAAA,CAACqC,CAAK,GAAC1C,OAAA0C,GAAA1C,OAAAE,GAAAF,OAAAK,MAAAH,IAAAF,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA,IATVuL,GAAUrL,GASPG,CAAO,GAEH2f;AAAK,GASRy0B,KAA2B10C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC/B;AAAA,IAAAy0C,WAAAA;AAAAA,IAAA/rC,MAAAA;AAAAA,IAAAtH,WAAAA;AAAAA,EAAAA,IAAuCtB,GACvCkpB,IAAmBvT,GAA0B,IAAI;AAAE,MAAAxV,GAAAG;AAAA,EAAAL,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAIlC7J,IAAA;AAAA,IAAAmjB,WAAa;AAAA,IAAc2L,QAAU;AAAA,MAAAF,UAAY;AAAA,IAAA;AAAA,IAAGzF,kBAAoBA,MAAMJ,EAAUlb;AAAAA,EAAAA,GACrF1N,IAAAA,MAAM4oB,EAAUlb,SAAekK,MAAAA,GAAEjY,OAAAE,GAAAF,OAAAK,MAAAH,IAAAF,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA;AAQ/B,QAAAa,IAAA,QAAQ8H,EAAI1C,KAAM,IAGT4G,IAAAlE,EAAIpG,SAAU,SAAd,kBAAA;AAAyD,MAAAsZ;AAAA,EAAA7b,SAAA6M,KAA9EgP,IAAA,gBAAAvb,EAACI,GAAA,EAAoB,MAAAmM,GAAiE,MAAA,IAAE,GAAI7M,OAAA6M,GAAA7M,OAAA6b,KAAAA,IAAA7b,EAAA,CAAA;AAAA,MAAA8b;AAAA,EAAA9b,EAAA,CAAA,MAAAa,KAAAb,SAAA6b,KARhGC,oCAAc,SAAA,IACZ,4BAACP,IAAA,EACM0N,KAAAA,GACG,SAAA,SACFE,MAAAA,IACM,cAAAtoB,GACA,YAAA,GAEZgb,aACF,EAAA,CACF,GAAe7b,OAAAa,GAAAb,OAAA6b,GAAA7b,OAAA8b,KAAAA,IAAA9b,EAAA,CAAA;AAAA,MAAA+b;AAAA,EAAA/b,SAAA8b,KAAA9b,EAAA,CAAA,MAAA2I,EAAA/H,SAXjBmb,sBAACP,IAAA,EAAiB,SAAA7S,EAAI/H,OACpBkb,UAAAA,GAWF,GAAU9b,OAAA8b,GAAA9b,EAAA,CAAA,IAAA2I,EAAA/H,OAAAZ,OAAA+b,KAAAA,IAAA/b,EAAA,CAAA;AAIQ,QAAAic,IAAA,GAAGtT,EAAI1C,KAAM;AAAW,MAAAkW;AAAA,EAAAnc,EAAA,EAAA,MAAA2I,EAAAnI,QAalC2b,sBAACzb,GAAA,EAAoB,MAAAiI,EAAInI,MAAa,MAAA,IAAE,GAAIR,EAAA,EAAA,IAAA2I,EAAAnI,MAAAR,QAAAmc,KAAAA,IAAAnc,EAAA,EAAA;AAAA,MAAAskB;AAAA,EAAAtkB,EAAA,EAAA,MAAA2I,EAAA/H,SAC5C0jB,IAAA,gBAAAhkB,EAACG,IAAA,EAAU,MAAA,KAAS,MAAA,KAAc,WAAA,kBAAiB,UAAA,IAChDkI,UAAAA,EAAI/H,OACP,GAAOZ,EAAA,EAAA,IAAA2I,EAAA/H,OAAAZ,QAAAskB,KAAAA,IAAAtkB,EAAA,EAAA;AACW,QAAA6nB,IAAA6sB,IAAA,UAAsB/rC,EAAI1C,KAAM,KAAhC,2CAKA6hB,IAAA,UAAUnf,EAAI1C,KAAM,IACtB8hB,KAAC2sB,GAGU1sB,IAAArf,EAAIpG,SAAU,SAAd,cAAA;AAAiD,MAAA0lB;AAAA,EAAAjoB,UAAAgoB,KAAtEC,IAAA,gBAAA3nB,EAACI,GAAA,EAAoB,MAAAsnB,GAAyD,MAAA,IAAE,GAAIhoB,QAAAgoB,GAAAhoB,QAAAioB,KAAAA,IAAAjoB,EAAA,EAAA;AAAA,MAAAmoB;AAAA,EAAAnoB,EAAA,EAAA,MAAA8nB,KAAA9nB,UAAA+nB,KAAA/nB,EAAA,EAAA,MAAAioB,KAAAjoB,EAAA,EAAA,MAAA2I,EAAA8qC,UARxFtrB,IAAA,gBAAA7nB,EAACsW,KAAO,IAAA,QAAe,SAAA,eACrB,UAAA,gBAAAtW,EAACib,MACS,SAAA,SACH,MAAA,MACO,cAAAuM,GACF,UAAAC,GACD,SAAApf,EAAI8qC,QAEbxrB,aACF,EAAA,CACF,GAAMjoB,QAAA8nB,GAAA9nB,QAAA+nB,GAAA/nB,QAAAioB,GAAAjoB,EAAA,EAAA,IAAA2I,EAAA8qC,QAAAzzC,QAAAmoB,KAAAA,IAAAnoB,EAAA,EAAA;AAAA,MAAAooB;AAAA,EAAApoB,EAAA,EAAA,MAAA6nB,KAAA7nB,UAAAmoB,KAXRC,IAAA,gBAAA9nB,EAACkb,IAAA,EAAiB,SAAAqM,GAChBM,UAAAA,GAWF,GAAUnoB,QAAA6nB,GAAA7nB,QAAAmoB,GAAAnoB,QAAAooB,KAAAA,IAAApoB,EAAA,EAAA;AAAA,MAAAqoB;AAAA,EAAAroB,EAAA,EAAA,MAAAooB,KAAApoB,UAAAmc,KAAAnc,EAAA,EAAA,MAAAskB,KAjBZ+D,IAAA,gBAAA3Z,EAACy0B,IAAA,EAAe,SAAA,UAA2B,mBAAA,OAAkB,aAAA,iBAA4B,YAAA,GAAO,KAAA,MAC9FhnB,UAAAA;AAAAA,IAAAA;AAAAA,IACAmI;AAAAA,IAGA8D;AAAAA,EAAAA,GAaF,GAASpoB,QAAAooB,GAAApoB,QAAAmc,GAAAnc,QAAAskB,GAAAtkB,QAAAqoB,KAAAA,IAAAroB,EAAA,EAAA;AAAA,MAAAsoB;AAAA,EAAAtoB,EAAA,EAAA,MAAA2I,EAAA1C,SAAAjG,EAAA,EAAA,MAAA2I,EAAApF,UAAAvD,UAAAqB,KACTinB,sBAAC1R,GAAA,EAAS,MAAA,KAAS,MAAA,KAAS,MAAA,KAC1B,UAAA,gBAAAtW,EAACgmB,MAA2BjlB,WAAAA,GAAmB,QAAAsH,EAAIpF,QAAgB,OAAAoF,EAAI1C,OAAQ,iBAAW,EAAA,CAC5F,GAAMjG,EAAA,EAAA,IAAA2I,EAAA1C,OAAAjG,EAAA,EAAA,IAAA2I,EAAApF,QAAAvD,QAAAqB,GAAArB,QAAAsoB,KAAAA,IAAAtoB,EAAA,EAAA;AAAA,MAAAuoB;AAAA,EAAAvoB,EAAA,EAAA,MAAAqoB,KAAAroB,UAAAsoB,KAAAtoB,EAAA,EAAA,MAAAic,KAAAjc,EAAA,EAAA,MAAA2I,EAAApF,UApCZglB,IAAA,gBAAAjoB,EAACgc,IAAA,EACC,UAAA,gBAAAhc,EAAA+b,GAAA,YAAA,EACE,UAAA,gBAAA3N,EAAA2N,GAAA,SAAA,EACc,cAAAJ,GACwB,sCAAAtT,EAAIpF,QAC9B,WAAA,QACF,SAAA,QACM,eAAA,UACZ,GAAA,MACG,MAAA,MACA,MAAA,MACI,UAAA,UACP,GAAA,KACA,GAAA,MAEF8kB,UAAAA;AAAAA,IAAAA;AAAAA,IAmBAC;AAAAA,EAAAA,EAAAA,CAGF,GACF,GACF,GAAStoB,QAAAqoB,GAAAroB,QAAAsoB,GAAAtoB,QAAAic,GAAAjc,EAAA,EAAA,IAAA2I,EAAApF,QAAAvD,QAAAuoB,KAAAA,IAAAvoB,EAAA,EAAA;AAAA,MAAAwoB;AAAA,SAAAxoB,EAAA,EAAA,MAAAuoB,KAAAvoB,UAAA+b,KAxDXyM,iCACe,aAAAtoB,GACG,gBAAAG,GAEhB0b,UAAAA;AAAAA,IAAAA;AAAAA,IAaAwM;AAAAA,EAAAA,GAwCF,GAAYvoB,QAAAuoB,GAAAvoB,QAAA+b,GAAA/b,QAAAwoB,KAAAA,IAAAxoB,EAAA,EAAA,GAzDZwoB;AAyDY,GAIHmsB,KAA4B50C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GACvC;AAAA,IAAAyC,OAAAA;AAAAA,IAAArB,WAAAA;AAAAA,EAAAA,IAA6BtB,GAC7BkyC,IAAmB+B,GAAuBtxC,CAAK;AAAE,MAAAxC;AAAA,EAAAF,SAAAiyC,KACrB/xC,IAAA8xC,GAAkCC,CAAU,GAACjyC,OAAAiyC,GAAAjyC,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAzE,QAAAkzC,IAA4BhzC,GAC5BwU,IAAau+B,GAAsB5xC,GAAWqB,GAAO,QAAQwwC,CAAmB,GAChFv+B,IAAcs+B,GAAsB5xC,GAAWqB,GAAO,SAASwwC,CAAmB;AAAE,MAAA7yC,GAAAQ;AAAA,MAAAb,EAAA,CAAA,MAAA0U,KAAA1U,EAAA,CAAA,MAAAiyC,KAAAjyC,EAAA,CAAA,MAAA2U,KAAA3U,SAAAqB,GAAA;AAI/CR,IAAAA,IAAAiJ,uBAAIC,IAAJ,6BAAG;AAACiS,IAAAA,GAAA;AAHzC,YAAA4H,IAAc,CAAClP,GAAMC,CAAK,GAC1BigC,IAAoB,CAAClgC,GAAMC,CAAK,EAAC1P,OAAQyW,EAAoC;AAE7E,UAAIk5B,EAAWlzC,WAAY,GAAC;AAASb,QAAAA,IAAA;AAAA,cAAAmb;AAAAA,MAAI;AAGvC3b,MAAAA,IAAA,gBAAAC,EAACQ,IAAA,EAAmB,YAAA,GAAO,KAAA,OAAW,MAAA,KACnC8zC,UAAAA,EAAW3zC,IAAK4zC,CAAAA,MAAA;AACf,cAAAzC,IAA6BxuB,EAAK3e,OACxB0W,EAAoD,EAAC1a,IACxDib,EAAmC,GAC1Cw4B,IACE,CAAC/rC,EAAIuqC,uBACLhB,GAA4B;AAAA,UAAAD,YAAAA;AAAAA,UAAAI,mBAEP1pC,EAAImoC,KAAK6B;AAAAA,UAAMP,sBAAAA;AAAAA,QAAAA,CAEnC;AAAE,iCAEGqC,IAAA,EAAiD9rC,MAAAA,GAAiBtH,WAAAA,GAAsBqzC,WAAAA,EAAAA,GAA1D/rC,EAAIpF,MAA+D;AAAA,MAAI,CAC9G,EAAA,CACH;AAAA,IAAS;AAAAvD,IAAAA,OAAA0U,GAAA1U,OAAAiyC,GAAAjyC,OAAA2U,GAAA3U,OAAAqB,GAAArB,OAAAK,GAAAL,OAAAa;AAAAA,EAAA;AAAAR,IAAAA,IAAAL,EAAA,CAAA,GAAAa,IAAAb,EAAA,CAAA;AAAA,SAAAa,MAAAiJ,uBAAAC,IAAA,6BAAA,IAAAlJ,IAfTR;AAeS;AAtOiB,SAAAoB,GAAAG,GAAA;AAAA,SASwCA,EAAKE;AAAO;AATpD,SAAAuJ,GAAAoR,GAAA;AAAA,SAUmD7a,EAAKwjB;AAAQ;AAiMrD,SAAA1J,GAAA/S,GAAA;AAAA,SAOYA,EAAIpC,OAAQoC,EAAI6qC;AAAU;AAPtC,SAAA73B,GAAA+W,GAAA;AAAA,SAeRA,EAASnsB,OAAT,CAAkBmsB,EAAS8gB;AAAU;AAf7B,SAAAt3B,GAAA44B,GAAA;AAAA,SAgBXpiB,EAASoe,KAAK6B;AAAM;ACnR3C,MAAMoC,KAAiCA,CAAA1zC,GAAAkC,MAAA;AAAA,QAAAvD,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAA,SAAAF,SAAAuD,KAAAvD,EAAA,CAAA,MAAAqB,EAAAS,UAG/B5B,IAAAA,MAAMmB,EAASS,OAAO+pB,kBAAmBtoB,CAAM,GAACvD,OAAAuD,GAAAvD,EAAA,CAAA,IAAAqB,EAAAS,QAAA9B,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAF7DsB,EACED,EAASU,MAAMP,OACfwzC,GAAW90C,CAAgD,CAC7D;AAAC,GCWG+0C,KAAsBA,CAACC,MAC3BA,IAAe,QAAQA,CAAY,gBAAgB,KAE/CC,KAAiBA,CAACD,MAAsCA,IAAe,QAAQA,CAAY,eAAe,KAE1GE,KAA0BA,MAAA;AAAA,QAAAp1C,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAA,SAAAF,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAC9B7J,IAAA,gBAAAI,EAACsW,GAAA,EAAS,MAAA,KAAS,MAAA,KACjB,UAAA,gBAAAtW,EAACG,IAAA,EAAe,WAAA,kBAAuB,OAAA,MAAK,UAAA,IAAS,wBAErD,GACF,GAAMT,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAJNE;AAIM,GAOFm1C,KAA2Bt1C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC/B;AAAA,IAAAwjC,QAAAA;AAAAA,EAAAA,IAAmB1jC;AAAM,MAAAG;AAAA,SAAAF,SAAAyjC,KAElBvjC,IAAAujC,uBAAW2R,IAAA,CAAA,CAAuB,GAAGp1C,OAAAyjC,GAAAzjC,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAArCE;AAAqC,GAGjCo1C,KAA6Bv1C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACxC;AAAA,IAAAoB,WAAAA;AAAAA,IAAAk0C,gBAAAA;AAAAA,IAAA9R,QAAAA;AAAAA,EAAAA,IAA8C1jC,GAC9CmtC,IAAiB6H,GAA+B1zC,GAAW,MAAM;AAAE,MAAAnB;AAAA,EAAAF,EAAA,CAAA,MAAAqB,EAAAiP,aACTpQ,IAAAA,MAAMmB,EAASiP,UAAUklC,SAAAA,GAAWx1C,EAAA,CAAA,IAAAqB,EAAAiP,WAAAtQ,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAA9F,QAAAw1C,IAAiBl0C,EAAkBD,EAASU,MAAMP,OAAQtB,CAAoC;AAAE,MAAAG;AAAA,EAAAL,EAAA,CAAA,MAAAw1C,KAAAx1C,SAAAyjC,KAAAzjC,EAAA,CAAA,MAAAktC,GAAAuI,cAAAz1C,SAAAqB,KAaxFhB,IAAA6sC,GAAQuI,eAAiB,OAAUhS,KAAA+R,KACjC,gBAAA9mC,EAACy0B,IAAA,EAAmC,+BAAA,QAAe,SAAA,QAAmB,YAAA,GAAO,KAAA,MAC3E,UAAA;AAAA,IAAA,gBAAA7iC,EAAC+0C,MAAiC5R,QAAAA,GAAM;AAAA,IACxC,gBAAAnjC,EAACq0C,IAAA,EAAqCtzC,WAAAA,GAAiB,OAAA,OAAA,CAAM;AAAA,IAC5Dm0C,IACC,gBAAAl1C,EAACkb,IAAA,EAAgB,SAAA,oBACf,UAAA,gBAAAlb,EAACib,IAAA,EACO4N,MAAAA,IACE,SAAA,SACG,cAAA,oBACF,SAAA,MAAM9nB,EAASiP,UAAUE,QAAS,UAAU,GAErD,UAAA,gBAAAlQ,EAACo1C,IAAA,EAAgB,MAAA,GAAA,CAAE,EAAA,CACrB,EAAA,CACF,IAVD;AAAA,EAAA,EAAA,CAYH,IAhBF71C,QAiBaG,OAAAw1C,GAAAx1C,OAAAyjC,GAAAzjC,EAAA,CAAA,IAAAktC,GAAAuI,YAAAz1C,OAAAqB,GAAArB,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AAAA,EAAAb,SAAAu1C,KAIb10C,sBAAC+mB,MAAU2tB,KAAAA,GAAqB,MAAA,KAAU,MAAA,GAAa,WAAA,SAAA,CAAQ,GAAGv1C,OAAAu1C,GAAAv1C,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAA6M;AAAA,EAAA7M,EAAA,CAAA,MAAAa,KAAAb,UAAAqB,KADpEwL,sBAACknC,IAAA,EAAoC1yC,WAAAA,GAAiB,OAAA,QACpDR,UAAAA,GACF,GAA2Bb,OAAAa,GAAAb,QAAAqB,GAAArB,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA;AAAA,MAAA6b;AAAA,EAAA7b,EAAA,EAAA,MAAAK,KAAAL,UAAA6M,KA/B7BgP,sBAAC85B,IAAA,EACa,eAAA,iCACS,wBAAA,QACC,yBAAA,QAChB,OAAA,QACG,UAAA,KACL,IAAA5yC,EAAoBC,QACb,YAAA,SAET,QAAA3C,GAoBFwM,UAAAA,EAAAA,CAGF,GAAgB7M,QAAAK,GAAAL,QAAA6M,GAAA7M,QAAA6b,KAAAA,IAAA7b,EAAA,EAAA;AAAA,MAAA8b;AAAA,SAAA9b,EAAA,EAAA,MAAA6b,KAAA7b,UAAAqB,KAjClBya,IAAA,gBAAAxb,EAACuX,IAAA,EAAgCxW,WAAAA,GAAkB,QAAA,QAAS,GAAA,QAAY,MAAA,KAAS,MAAA,KAAM,GAAA,QACrFwa,UAAAA,GAiCF,GAAuB7b,QAAA6b,GAAA7b,QAAAqB,GAAArB,QAAA8b,KAAAA,IAAA9b,EAAA,EAAA,GAlCvB8b;AAkCuB,GAId85B,KAA6B71C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACxC;AAAA,IAAAoB,WAAAA;AAAAA,IAAAk0C,gBAAAA;AAAAA,IAAAL,cAAAA;AAAAA,IAAAzR,QAAAA;AAAAA,IAAAoS,YAAAA;AAAAA,IAAApC,QAAAA;AAAAA,EAAAA,IAAgF1zC,GAChFmJ,IAAa7H,EAASiP,UAAUC,QAAAA;AAEhC,MAAI,CAAClP,EAASiP,UAAUklC,SAAAA,KAAetsC,MAAS;AAAU,WAAS;AAEnE,MAAIA,MAAS,UAAQ;AAAA,QAAAhJ;AAAA,IAAAF,SAAAk1C,KAIWh1C,IAAAi1C,GAAeD,CAAY,GAACl1C,OAAAk1C,GAAAl1C,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,QAAAK;AAAA,IAAAL,SAAAE,KAAtCG,IAAA;AAAA,MAAAy1C,QAAU51C;AAAAA,IAAAA,GAA8BF,OAAAE,GAAAF,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,QAAAa;AAAA,IAAAb,SAAAyzC,KAAAzzC,EAAA,CAAA,MAAAqB,EAAAiP,aAE/CzP,IAAA4yC,MAAA,MAAiBpyC,EAASiP,UAAUE,QAAS,UAAU,IAAExQ,OAAAyzC,GAAAzzC,EAAA,CAAA,IAAAqB,EAAAiP,WAAAtQ,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,QAAA6M;AAAA,IAAA7M,SAAA61C,KAEjEhpC,IAAAgpC,KAAc,gBAAAv1C,EAACy1C,MAAoB,MAAA,IAAiB,gBAAC,GAAI/1C,OAAA61C,GAAA71C,OAAA6M,KAAAA,IAAA7M,EAAA,CAAA;AAAA,QAAA6b;AAAA,WAAA7b,EAAA,CAAA,MAAAK,KAAAL,UAAAa,KAAAb,EAAA,EAAA,MAAA6M,KAN5DgP,IAAA,gBAAAvb,EAAC01C,IAAA,EACY,cAAA,mBACK,gBAAA31C,GACR,SAAA,mBACC,SAAAQ,GAERgM,UAAAA,EAAAA,CACH,GAAe7M,OAAAK,GAAAL,QAAAa,GAAAb,QAAA6M,GAAA7M,QAAA6b,KAAAA,IAAA7b,EAAA,EAAA,GAPf6b;AAAAA,EAOe;AAElB,MAAA3b;AAAA,EAAAF,UAAAk1C,KAQ6Bh1C,IAAA+0C,GAAoBC,CAAY,GAACl1C,QAAAk1C,GAAAl1C,QAAAE,KAAAA,IAAAF,EAAA,EAAA;AAAA,MAAAK;AAAA,EAAAL,UAAAE,KAA3CG,IAAA;AAAA,IAAAy1C,QAAU51C;AAAAA,IAAiCgwB,IAAMntB,EAAoBC;AAAAA,EAAAA,GAAShD,QAAAE,GAAAF,QAAAK,KAAAA,IAAAL,EAAA,EAAA;AAAA,MAAAa,GAAAgM;AAAA,EAAA7M,EAAA,EAAA,MAAAqB,EAAAiP,aAErFzP,IAAAA,MAAMQ,EAASiP,UAAUE,QAAS,QAAQ,GACzC3D,IAAAA,MAAMxL,EAASiP,UAAUE,QAAS,UAAU,GAACxQ,EAAA,EAAA,IAAAqB,EAAAiP,WAAAtQ,QAAAa,GAAAb,QAAA6M,MAAAhM,IAAAb,EAAA,EAAA,GAAA6M,IAAA7M,EAAA,EAAA;AAAA,MAAA6b;AAAA,EAAA7b,UAAAyjC,KACjD5nB,sBAACw5B,MAAiC5R,QAAAA,EAAAA,CAAM,GAAIzjC,QAAAyjC,GAAAzjC,QAAA6b,KAAAA,IAAA7b,EAAA,EAAA;AAAA,MAAA8b;AAAA,EAAA9b,UAAAu1C,KAElDz5B,sBAAC8L,MAAU2tB,KAAAA,GAAqB,MAAA,KAAU,MAAA,GAAa,WAAA,SAAA,CAAQ,GAAGv1C,QAAAu1C,GAAAv1C,QAAA8b,KAAAA,IAAA9b,EAAA,EAAA;AAAA,MAAA+b;AAAA,SAAA/b,EAAA,EAAA,MAAAK,KAAAL,EAAA,EAAA,MAAAa,KAAAb,EAAA,EAAA,MAAA6M,KAAA7M,EAAA,EAAA,MAAA6b,KAAA7b,UAAA8b,KAXpEC,IAAA,gBAAAzb,EAAC21C,MACC,YACW,cAAA,cACJ,QAAA,iCACI,YAAA,oBACK,gBAAA51C,GACJ,aAAA,uBACH,SAAAQ,GACC,UAAAgM,GACJ,MAAAgP,GAENC,UAAAA,EAAAA,CACF,GAAc9b,QAAAK,GAAAL,QAAAa,GAAAb,QAAA6M,GAAA7M,QAAA6b,GAAA7b,QAAA8b,GAAA9b,QAAA+b,KAAAA,IAAA/b,EAAA,EAAA,GAZd+b;AAYc,GCvHLm6B,KAA6BA,CAAC/a,GAA2BhF,MACpE/wB,KAAKC,UAAU,CAAC81B,GAAOhF,CAAU,CAAC,GCa9BggB,KAA4BA,CAACz2C,MAAsC;AACvE,QAAM02C,IAAgB12C,GAAUC,UAAUy2C;AAC1C,SAAO,OAAOA,KAAkB,YAAYA,EAAc10C,SAAS,IAAI00C,IAAgBv2C;AACzF,GAEMw2C,KAA8BA,CAClCppC,GACAvN,MACG;AACH,QAAM42C,IAAMH,GAA0Bz2C,CAAQ;AAC9C,SAAO42C,KAAO,CAACrpC,EAAQqpC,MAAM;AAAA,IAAE,GAAGrpC;AAAAA,IAASqpC,KAAAA;AAAAA,EAAAA,IAAQrpC;AACrD,GAMaspC,KAAiCA,CAC5CC,GACArwC,IAA2C,QACvB;AAAA,EACpB,MAAMswC,YAAYxpC,GAAS;AACzB,UAAM;AAAA,MAAEypC,WAAAA;AAAAA,IAAAA,IAAc,MAAMF,EAAS9sC,KAAK;AAAA,MACxCitC,WAAWxwC,EAAQywC,eAAAA;AAAAA,MACnB3pC,SAASopC,GAA4BppC,GAAS9G,EAAQ0wC,eAAe;AAAA,MACrEj2C,OAAOuF,EAAQ2wC,WAAAA;AAAAA,IAAW,CAC3B;AACD,WAAO;AAAA,MACLzyC,IAAIqyC;AAAAA,MACJK,OAAQvhB,CAAAA,MAASghB,EAASO,MAAM;AAAA,QAAEL,WAAAA;AAAAA,QAAWlhB,MAAAA;AAAAA,MAAAA,CAAM;AAAA,MACnDwhB,QAAQA,CAACC,GAAMtnB,MAAS6mB,EAASQ,OAAO;AAAA,QAAEN,WAAAA;AAAAA,QAAWO,MAAAA;AAAAA,QAAMtnB,MAAAA;AAAAA,MAAAA,CAAM;AAAA,MACjEunB,MAAOC,CAAAA,MAAWX,EAASU,KAAK;AAAA,QAAER,WAAAA;AAAAA,QAAWS,QAAAA;AAAAA,MAAAA,CAAQ;AAAA,MACrDC,QAASx9B,CAAAA,MAAY48B,EAASt3B,UAAUw3B,GAAW;AAAA,QAAEU,QAAQx9B;AAAAA,MAAAA,CAAS;AAAA,MACtEy9B,QAASz9B,CAAAA,MAAY48B,EAASt3B,UAAUw3B,GAAW;AAAA,QAAEW,QAAQz9B;AAAAA,MAAAA,CAAS;AAAA,MACtEmpB,SAAUnpB,CAAAA,MAAY48B,EAASt3B,UAAUw3B,GAAW;AAAA,QAAE3T,SAASnpB;AAAAA,MAAAA,CAAS;AAAA,IAAA;AAAA,EAE5E;AACF,IAca09B,KAAyBA,CAACv3C,MAAuC;AAC5E,QAAM;AAAA,IAAEsjB,WAAAA;AAAAA,IAAWhiB,WAAAA;AAAAA,EAAAA,IAActB,GAC3B;AAAA,IAAE0R,iBAAAA;AAAAA,EAAAA,IAAoB+D,GAAAA,GACtB+hC,IAAe7hC,GAAO2N,CAAS;AACrCk0B,EAAAA,EAAaxpC,UAAUsV;AACvB,QAAM,CAACm0B,CAAM,IAAIvtC,EAAS,MACxBssC,GAA+Bl1C,EAAUm1C,UAAU;AAAA,IACjDI,cAAcA,MACZV,GAA2B70C,EAAUS,OAAO21C,uBAAuBF,EAAaxpC,QAAQooB,UAAU;AAAA,IACpG0gB,aAAaA,MAAMU,EAAaxpC,QAAQrO;AAAAA,IACxCo3C,UAAUA,MAAMS,EAAaxpC,QAAQnN;AAAAA,EAAAA,CACtC,CACH,GACM,CAAC81C,GAAWgB,CAAY,IAAIztC,EAAAA,GAE5B0tC,IAAer2C,EAAkBD,EAAUm1C,SAASh1C,OAAQI,CAAAA,MAChE80C,IAAY90C,EAAMg2C,aAAalB,CAAS,GAAG91C,QAAQf,MACrD,GACM6lB,IAASpkB,EAAkBD,EAAUS,OAAON,OAAQI,CAAAA,MAAU;AAClE,UAAM2B,IAAS3B,EAAME,OAAOgjB,QAAQxiB;AACpC,YAAQiB,EAAO8hB,kBAAkB9hB,EAAO6hB,QAAQ,CAAC,GAAGV,cAAcrB,EAAU8S;AAAAA,EAC9E,CAAC,GACK0hB,IAAuBx2C,EAAUy2C,gBAAgBC;AAavD,SAXAxsC,GAAU,MAAM;AACd,QAAI,CAACmrC,KAAa,CAACiB,EAAc;AACjC,UAAMK,IAAmB32C,EAAUS,OAChC+oB,UAAAA,EACA/F,QAAQxiB,UAAU8iB,QAAQjK,KAAMuX,CAAAA,MAAcA,EAAUhO,aAAarB,EAAU8S,UAAU,GACtFhG,IAAW6nB,GAAkB9oB;AACnC,IAAIiB,GAAUlf,SAAS,WAAW+mC,GAAkBt4C,YAClDm4C,EAAqB1nB,GAAU;AAAA,MAAEzwB,UAAU;AAAA,QAAE,GAAGs4C,EAAiBt4C;AAAAA,QAAUuG,OAAO0xC;AAAAA,MAAAA;AAAAA,IAAa,CAAG;AAAA,EAEtG,GAAG,CAACjB,GAAWiB,GAAct0B,EAAU8S,YAAY90B,EAAUS,QAAQ+1C,CAAoB,CAAC,GAErFx2C,EAAUm1C,SAASyB,gBAWtB,gBAAA33C,EAACsW,GAAA,EAAI,GAAE,QAAO,MAAK,KAAI,MAAK,KAAI,GAAE,QAChC,UAAA,gBAAAtW,EAAC6I,IAAA,EACC,QAAAquC,GACA,OAAO,QAAQU,KAAKzmC,CAAe,IAAI,SAAS,SAChD,WAAWiU,GACX,eAAe,IACf,eAAegyB,EAAAA,CAAa,EAAA,CAEhC,IAjBE,gBAAAp3C,EAAC2iB,IAAA,EAAO,GAAE,QAAO,IAAG,MAClB,UAAA,gBAAA3iB,EAACG,IAAA,EAAK,WAAU,uBAAsB,OAAM,YAAU,yEAEtD,GACF;AAeN,GCnHa03C,KAA+B,sBAG/BC,KAAqC,2BAErCC,KAAgC;AAAA,EAAE3F,WAAW;AAAA,EAAKC,OAAO;AAAI,GAMpE2F,KAAsBA,CAAC9gC,MAC3B,IAAInR,IACFmR,EAAI1V,OACDy2C,mBAAmB,WAAW,EAC9BtzC,OAAQoe,CAAAA,MAAcA,EAAUM,WAAWw0B,EAA4B,EACvEl3C,IAAKoiB,CAAAA,MAAcA,EAAU8S,UAAU,CAC5C,GACIqiB,KAAgCA,CAAChhC,MAA0C;AAG/E,MAAIihC,IAAgB;AACpB,QAAMC,IAAkBlhC,EAAI1V,OAAO62C,6BAA6B,MAAM;AACpEF,IAAAA,IAAgB;AAAA,EAClB,CAAC,GACKG,IAAiBphC,EAAI1V,OAAO+2C,4BAA4B,MAAM;AAClEJ,IAAAA,IAAgB;AAAA,EAClB,CAAC,GACKK,IAAoBthC,EAAI1V,OAAON,MAAM0d,UAAU,CAACtd,GAAOm3C,MAAkB;AAC7E,QAAIN,EAAe;AACnB,UAAMO,IAAa,IAAI3yC,IACrBzE,EAAME,OAAOgjB,QAAQxiB,UAAU8iB,QAC5BngB,OAAQoe,CAAAA,MAAcA,EAAUM,WAAWw0B,EAA4B,EACvEl3C,IAAKoiB,CAAAA,MAAcA,EAAUqB,QAAQ,CAC1C,GACMu0B,IAAcF,EAAcj3C,OAAOgjB,QAAQxiB,UAAU8iB,QACxDngB,OAAQoe,CAAAA,MAAcA,EAAUM,WAAWw0B,EAA4B,EACvEl3C,IAAKoiB,CAAAA,MAAcA,EAAUqB,QAAQ,GAClCyW,IAAQ3jB,EAAI1V,OAAO21C,oBAAAA;AACzB,eAAWthB,KAAc8iB;AACvB,MAAKD,EAAWzyC,IAAI4vB,CAAU,KAAQ3e,EAAIg/B,SAAS0C,YAAYhD,GAA2B/a,GAAOhF,CAAU,CAAC;AAAA,EAEhH,CAAC;AACD,SAAO;AAAA,IACLzT,UAAU;AACRo2B,MAAAA,EAAAA,GACAJ,EAAgBh2B,QAAAA,GAChBk2B,EAAel2B,QAAAA;AACf,YAAMyY,IAAQ3jB,EAAI1V,OAAO21C,oBAAAA;AACzB,iBAAWthB,KAAcmiB,GAAoB9gC,CAAG;AAC9C,QAAKA,EAAIg/B,SAAS0C,YAAYhD,GAA2B/a,GAAOhF,CAAU,CAAC;AAAA,IAE/E;AAAA,EAAA;AAEJ,GACMgjB,KAAuB,oBACvBC,yBAA0B7jB,QAAAA,GAC1B8jB,KAA0BA,CAAC7hC,MAA0C;AACzE,QAAM8hC,IAAqB9hC,EAAI1V,OAC5B+oB,UAAAA,EACA/F,QAAQxiB,UAAU8iB,QAAQngB,OAAQoe,CAAAA,MAAcA,EAAUM,WAAWw0B,EAA4B,GAC9FoB,IAAeD,EAClBr4C,IAAKoiB,CAAAA,MAAc81B,GAAqBK,KAAKn2B,EAAUziB,SAAS,EAAE,IAAI,CAAC,CAAC,EACxEqE,OAAO,CAAC2M,MAA2BA,MAAU/R,MAAS,EACtDoB,IAAK2Q,CAAAA,MAAU/J,OAAO4xC,SAAS7nC,GAAO,EAAE,CAAC;AAC5C,SAAOE,KAAKC,IAAIunC,EAAmB53C,QAAQ,GAAG63C,CAAY,IAAI;AAChE,GACMG,KAAuBA,CAACliC,MAA0C;AACtE,QAAMmiC,IAAY7nC,KAAKC,IAAIqnC,GAAoB/kC,IAAImD,EAAI1V,OAAON,KAAK,KAAK,GAAG63C,GAAwB7hC,CAAG,CAAC;AACvG4hC,SAAAA,GAAoBzjB,IAAIne,EAAI1V,OAAON,OAAOm4C,IAAY,CAAC,GAChD,YAAYA,CAAS;AAC9B,GACMC,KAAmBA,CAACl6C,MACxB,OAAOA,GAAUC,UAAUy2C,iBAAkB,YAAY12C,EAASC,SAASy2C,cAAc10C,SAAS,GAC9Fm4C,KAAsBA,CAACriC,GAAuC9X,MAA+B;AACjG,QAAMg+B,IAAiBlmB,EAAIsiC,kBAAAA,GACrBC,IAAkBviC,EAAI7G,mBAAAA;AAC5B,UACGipC,GAAiBl6C,CAAQ,IAAIA,IAAWG,YACxC+5C,GAAiBlc,CAAc,IAAIA,IAAiB79B,YACpD+5C,GAAiBG,CAAe,IAAIA,IAAkBl6C,WACvDH,KACAq6C;AAEJ,GAEaC,KAAwBA,CACnCxiC,GACA3S,IAAsC,OACnC;AACH,QAAM;AAAA,IAAEo1C,QAAAA,IAAS;AAAA,EAAA,IAASp1C,GACpBq1C,IAAYL,GAAoBriC,GAAK3S,EAAMnF,QAAQ,GACnDkB,IAAQ84C,GAAqBliC,CAAG,GAChC5F,IAAQ/J,OAAO4xC,SAASN,GAAqBK,KAAK54C,CAAK,IAAI,CAAC,KAAK,KAAK,EAAE,GAExElB,IAAwB;AAAA,IAC5BU,MAAM;AAAA,IACNiE,IAHS,GAAGc,OAAOyM,CAAK,EAAEuoC,SAAS,GAAG,GAAG,CAAC,IAAIC,WAAWC,OAAOC,YAAY;AAAA,IAI5Er0C,OAAOrF;AAAAA,IACPJ,MAAM;AAAA,IACNb,UAAUu6C,GAAWv6C;AAAAA,EAAAA,GAEjBwwB,IAAW3Y,EAAIsgC,gBAAgByC,cAAc;AAAA,IACjDC,aAAarC;AAAAA,IACbz4C,UAAAA;AAAAA,IACAgK,MAAM;AAAA,IACN9I,OAAAA;AAAAA,EAAAA,CACD;AACD,MAAIuvB,EAASlf,SAAS,QAAS,OAAM,IAAIvJ,MAAM,wCAAwC;AACvF,EAAIuyC,KACFziC,EAAIpH,MAAMC,cAAc,aAAa,EAAI;AAE3C,QAAMgT,IAAY7L,EAAI1V,OACnB+oB,UAAAA,EACA/F,QAAQxiB,UAAU8iB,QAAQjK,KACxBuX,CAAAA,MACCA,EAAUxD,mBAAmBje,SAAS,WACtCyhB,EAAUxD,kBAAkBsrB,gBAAgBrqB,EAASqqB,eACrD9nB,EAAUxD,kBAAkBurB,gBAAgBtqB,EAASsqB,WACzD;AACF,MAAI,CAACp3B,EAAW,OAAM,IAAI3b,MAAM,oCAAoCyoB,EAASsqB,WAAW,EAAE;AAC1F,SAAOr2B,GAAgBf,CAAS;AAClC,GASaq3B,KAAgCA,OAAoC;AAAA,EAC/Er2C,IAAI;AAAA,EACJ8G,SAASqM,GAAK;AA8CZ,WA7CoB,CAClBA,EAAIoM,MAAM+sB,aAAa;AAAA,MACrBtsC,IAAI8zC;AAAAA,MACJv3C,OAAO;AAAA,MACP8iC,MAAM;AAAA,QACJzyB,MAAM;AAAA,QACNoT,QAASxf,OAAU,gBAAAvE,EAACg3C,IAAA,EAAuB,WAAWzyC,EAAMsf,UAAU,WAAWtf,EAAMxD,UAAAA,CAAU;AAAA,MAAA;AAAA,IACnG,CACD,GACDmW,EAAIsgC,gBAAgB6C,kBAAkB;AAAA,MACpCt2C,IAAI8zC;AAAAA,MACJ14C,MAAM;AAAA,QACJwR,MAAM;AAAA,QACNsC,SAAS;AAAA,UACPqnC,OAAO,CACL;AAAA,YACE3pC,MAAM;AAAA,YACN5M,IAAI;AAAA,UAAA,CACL;AAAA,UAEHsE,MAAM;AAAA,YACJsI,MAAM;AAAA,YACN5M,IAAI8zC;AAAAA,UAAAA;AAAAA,UAEN0C,aAAa;AAAA,UACbr0C,KAAK;AAAA,YAAEyK,MAAM;AAAA,YAAWuH,QAAQ;AAAA,cAAE7K,SAAS;AAAA,gBAAEsD,MAAM;AAAA,gBAAW5M,IAAI+zC;AAAAA,cAAAA;AAAAA,YAAmC;AAAA,UAAE;AAAA,QAAE;AAAA,MAC3G;AAAA,MAEF70C,QAAQ;AAAA,MACRiiB,eAAe;AAAA;AAAA;AAAA,MAGfyN,iBAAiB;AAAA,IAAA,CAClB,GACDulB,GAA8BhhC,CAAG,GACjCA,EAAIvV,SAASovC,gBACX;AAAA,MACEhtC,IAAI+zC;AAAAA,MACJnyC,OAAO;AAAA,MACP+M,UAAU;AAAA,MACVxS,MAAM;AAAA,IAAA,GAER;AAAA,MAAE+c,SAASA,CAACu9B,GAAO54C,MAAY83C,GAAsBxiC,GAAK;AAAA,QAAE9X,UAAUwC,GAASxC;AAAAA,MAAAA,CAAU;AAAA,IAAA,CAC3F,CAAC;AAAA,EAGL;AACF,ICnLaq7C,KAA+B15C,CAAAA,MAAA;AAAA,QAAArB,IAAAC,EAAA,CAAA,GAC1C+6C,IAAoB15C,EAAkBD,EAAS45C,OAAOz5C,OAAQC,EAAuB;AAAE,MAAAvB;AAAA,SAAAF,SAAAg7C,KAChF96C,IAAA,CAAA,GAAIg7C,IAAuB,GAAKF,CAAW,GAACh7C,OAAAg7C,GAAAh7C,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAA5CE;AAA4C;AAFT,SAAAuB,GAAAG,GAAA;AAAA,SAC+BA,EAAKq5C;AAAO;ACWvF,MAAME,KAAgCC,GAAc,EAAK,GAE5CC,KAAyBt7C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACpC;AAAA,IAAA8X,UAAAA;AAAAA,IAAAujC,wBAAAA;AAAAA,IAAA3pC,kBAAAA;AAAAA,IAAA4pC,0BAAAA;AAAAA,EAAAA,IAAyFx7C;AAGzF,MAFkCy7C,GAAWL,EAA6B;AAE7C,WAASpjC;AAAS,MAAA7X;AAAA,EAAAF,SAAA+X,KAWvC7X,IAAA,gBAAAI,EAACm7C,IAAA,EAAsBC,OAAAA,IAAU3jC,UAAAA,GAAS,GAAiB/X,OAAA+X,GAAA/X,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,EAAAL,EAAA,CAAA,MAAAu7C,KAAAv7C,SAAAE,KAD7DG,IAAA,gBAAAC,EAACq7C,IAAA,EAAkDJ,kBAAAA,GACjDr7C,UAAAA,GACF,GAAkCF,OAAAu7C,GAAAv7C,OAAAE,GAAAF,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AAAA,SAAAb,SAAAs7C,KAAAt7C,EAAA,CAAA,MAAAD,EAAA67C,0BAAA57C,SAAAD,EAAA87C,mBAAA77C,SAAAK,KAAAL,EAAA,CAAA,MAAA2R,KATtC9Q,sBAACs6C,IAAA,EAA8B,OAAA,IAC7B,UAAA,gBAAA76C,EAACw7C,MACoBR,sBACA,mBAAAv7C,EAAK67C,wBACP,iBAAA77C,EAAK87C,iBACJlqC,kBAAAA,GAElBtR,aAGF,GACF,GAAgCL,OAAAs7C,GAAAt7C,EAAA,CAAA,IAAAD,EAAA67C,wBAAA57C,EAAA,CAAA,IAAAD,EAAA87C,iBAAA77C,OAAAK,GAAAL,OAAA2R,GAAA3R,QAAAa,KAAAA,IAAAb,EAAA,EAAA,GAXhCa;AAWgC,GCjCvBk7C,KAAsBh8C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAA6X,GAAAC;AAAA,EAAA/X,SAAAD,KACjC;AAAA,IAAAgY,UAAAA;AAAAA,IAAA,GAAAD;AAAAA,EAAAA,IAAkC/X,GAAMC,OAAAD,GAAAC,OAAA8X,GAAA9X,OAAA+X,MAAAD,IAAA9X,EAAA,CAAA,GAAA+X,IAAA/X,EAAA,CAAA;AAAA,MAAAE;AAAA,SAAAF,EAAA,CAAA,MAAA8X,KAAA9X,SAAA+X,KAEjC7X,IAAA,gBAAAI,EAACsW,GAAA,EAAG,GAAKkB,GAAWC,UAAAA,EAAAA,CAAS,GAAM/X,OAAA8X,GAAA9X,OAAA+X,GAAA/X,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAAnCE;AAAmC,GCkBtC8D,KAAWA,CAACP,MAChB,OAAOA,KAAU,YAAYA,MAAU,QAAQ,CAACQ,MAAMC,QAAQT,CAAK,GAE/Du4C,KAAcA,CAACtuC,GAAiC/H,MAAgB;AACpE,QAAMlC,IAAQiK,EAAO/H,CAAG;AACxB,SAAO,OAAOlC,KAAU,WAAWA,IAAQ5D;AAC7C,GAEMo8C,KAAeA,CAACvuC,GAAiC/H,MAAgB;AACrE,QAAMlC,IAAQiK,EAAO/H,CAAG;AACxB,SAAO,OAAOlC,KAAU,YAAYA,IAAQ5D;AAC9C,GAEMq8C,KAAuBA,CAACrL,MAAkD;AAC9E,MAAI,CAAC7sC,GAAS6sC,CAAM,UAAU,CAAA;AAE9B,QAAMsL,IAA8C,CAAA,GAC9CrL,IAAOkL,GAAYnL,GAAQ,MAAM,GACjCxtB,IAAY24B,GAAYnL,GAAQ,WAAW,GAC3CE,IAAiBiL,GAAYnL,GAAQ,gBAAgB,GACrDuL,IAAgBH,GAAapL,GAAQ,eAAe,GACpDO,IAAyB6K,GAAapL,GAAQ,wBAAwB,GACtEwL,IAAQJ,GAAapL,GAAQ,OAAO,GACpCv4B,IAAgB2jC,GAAapL,GAAQ,eAAe,GACpDyL,IAAYL,GAAapL,GAAQ,WAAW,GAC5C0L,IAAeP,GAAYnL,GAAQ,cAAc,GACjD3gC,IAAO8rC,GAAYnL,GAAQ,MAAM,GACjCG,IAAgBgL,GAAYnL,GAAQ,eAAe,GACnD2L,IAAmBR,GAAYnL,GAAQ,kBAAkB,GACzD4L,IAAmBT,GAAYnL,GAAQ,kBAAkB,GACzDK,IAAe8K,GAAYnL,GAAQ,cAAc,GACjDI,IAAkB+K,GAAYnL,GAAQ,iBAAiB,GACvDM,IAAkB6K,GAAYnL,GAAQ,iBAAiB;AAE7D,SAAIC,QAAoBA,OAAOA,IAC3BztB,QAAyBA,YAAYA,IACrC0tB,QAA8BA,iBAAiBA,IAC/CqL,MAAkBv8C,WAAWs8C,EAAcC,gBAAgBA,IAC3DhL,MAA2BvxC,WAAWs8C,EAAc/K,yBAAyBA,IAC7EiL,MAAUx8C,WAAWs8C,EAAcE,QAAQA,IAC3C/jC,MAAkBzY,WAAWs8C,EAAc7jC,gBAAgBA,IAC3DgkC,MAAcz8C,WAAWs8C,EAAcG,YAAYA,IACnDC,QAA4BA,eAAeA,IAC3CrsC,QAAoBA,OAAOA,IAC3B8gC,QAA6BA,gBAAgBA,IAC7CwL,QAAgCA,mBAAmBA,IACnDC,QAAgCA,mBAAmBA,IACnDvL,QAA4BA,eAAeA,IAC3CD,QAA+BA,kBAAkBA,IACjDE,QAA+BA,kBAAkBA,IAC9CgL;AACT,GAEaO,KAA6BA,CAACr5B,GAAuDwtB,MAAoB;AACpH,QAAM8L,IAAYt5B,EAAUpT,aAAa,IACnCksC,IAAgBD,GAAqBrL,CAAM;AAEjD,SAAO;AAAA,IACLC,MAAM;AAAA,IACNC,gBAAgB;AAAA,IAChBsL,OAAO;AAAA,IACP/jC,eAAe;AAAA,IACfgkC,WAAW;AAAA,IACX,GAAGH;AAAAA,IACHC,eAAeO,MAAcR,EAAcC,iBAAiB;AAAA,IAC5DhL,wBAAwBuL,MAAcR,EAAc/K,0BAA0B;AAAA,EAAA;AAElF,GAEMtG,KAAyBA,CAAC1lB,GAAqCC,MACnED,EAAQjK,KAAMtV,CAAAA,MAAUA,EAAM6e,aAAaW,CAAc,KAAKD,EAAQ,CAAC,GAE5Dw3B,KAAkCA,CAC7Cr3B,GACAs3B,MACG;AACH,MAAIt3B,EAAiB,QAAO;AAAA,IAAE7b,MAAM;AAAA,IAAM2Z,WAAWkC;AAAAA,EAAAA;AACrD,MAAIs3B,EAAkB,QAAO;AAAA,IAAEnzC,MAAM;AAAA,IAAO2Z,WAAWw5B;AAAAA,EAAAA;AAEzD,GAEMC,KAA2B/8C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA;AAAA,MAAAC;AAAA,EAAAF,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAE7B7J,IAAA,gBAAAI,EAACI,GAAA,EAAmB,MAAA,gBAAqB,MAAA,IAAE,GAAIV,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,SAAAL,EAAA,CAAA,MAAAD,EAAAkG,SADjD5F,IAAA,gBAAAC,EAAC2iB,IAAA,EAAS,GAAA,QAAS,GAAA,QAAa,OAAA,YAAa,GAAA,MAAiB,cAAAljB,EAAKkG,OACjE/F,UAAAA,GACF,GAASF,EAAA,CAAA,IAAAD,EAAAkG,OAAAjG,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAFTK;AAES,GAOE08C,KAAwBh9C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACnC;AAAA,IAAAoB,WAAAA;AAAAA,EAAAA,IAAsBtB,GACtBi9C,IAAsB17C,EAAkBD,EAASS,OAAON,OAAQC,EAAuC;AAAE,MAAAvB;AAAA,EAAAF,SAAAqB,KACrEnB,IAAA4jB,EAAsBziB,CAAS,GAACrB,OAAAqB,GAAArB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAApE,QAAAgkB,IAAkB1iB,EAAkBpB,EAAgCsB,OAAQ6J,EAA0B;AAAE,MAAAhL;AAAA,EAAAL,SAAAqB,KACtFhB,IAAAyjB,EAAsBziB,CAAS,GAACrB,OAAAqB,GAAArB,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAAlDsB,EAAkBjB,EAAgCmB,OAAQka,EAA4B;AACtF,QAAA,CAAAmhC,GAAAI,CAAA,IAAgDhzC,EAAAA,GAEhDsb,IAAwBulB,GAAuBkS,EAAa53B,SAAU43B,EAAa33B,cAAe,GAClGY,IAAoB22B,GAAgCr3B,GAAiBs3B,CAAgB;AAMrF,MAJAtxC,GAAU,MAAA;AACR,IAAIga,KAAiB03B,EAAoBp9C,MAAS;AAAA,EAAE,GACnD,CAAC0lB,CAAe,CAAC,GAEhB,CAACU;AAAW,WAAS;AAEzB,QAAA;AAAA,IAAAvc,MAAAA;AAAAA,IAAA2Z,WAAAA;AAAAA,EAAAA,IAA4B4C,GAC5BjjB,IAAe3B,EAASS,OAAO4hB,UAAWL,EAASC,cAAe,GAClE64B,IAAsBO,GAA2Br5B,GAAWrgB,GAAM6tC,MAAQ,GAC1E;AAAA,IAAAG,eAAAA;AAAAA,IAAAwL,kBAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,IAAAvL,cAAAA;AAAAA,IAAAD,iBAAAA;AAAAA,IAAAE,iBAAAA;AAAAA,IAAA,GAAA+L;AAAAA,EAAAA,IAQIf,GACJp4B,IAAiB/gB,IAASghB,EAAUhhB,EAAMugB,UAAW,IAApC1jB,QACjBs9C,IAAwBzzC,KAAQ2Z,EAASpT,aAAc,IACvDmtC,IAAmB/5B,EAASziB,SAAUoC,GAAMpC,SAAzB,WAEnB8iC,IACE1gC,KAAA+gB,IACGA,EAAQM,OAAQ;AAAA,IAAAhjB,WAAAA;AAAAA,IAAAqB,OAER8gB,GAAoBxgB,CAAM;AAAA,IAACmhB,UACxBC,GAAgBf,CAAS;AAAA,IAACrE,SAC3BrD;AAAAA,EAAAA,CACV,IAED,gBAAArb,EAACw8C,IAAA,EAEG,OAAA95C,IAAA,8BAAuCA,EAAMugB,UAAW,MAAxD,+CAAA,CAA4G;AAGhH,MAAA1iB;AAAA,EAAAb,EAAA,CAAA,MAAAm9C,KAAAn9C,EAAA,CAAA,MAAAqjB,KAAArjB,EAAA,CAAA,MAAAqB,EAAAS,UAEqBjB,IAAA4N,CAAAA,MAAA;AACvB,IAAI,CAACA,EAAO/E,QAARyzC,MACFF,EAAoB55B,CAAS,GAC7BhiB,EAASS,OAAOuuB,WAAYhN,EAASqB,QAAS;AAAA,EAC/C,GACF1kB,OAAAm9C,GAAAn9C,OAAAqjB,GAAArjB,EAAA,CAAA,IAAAqB,EAAAS,QAAA9B,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AALD,QAAAq9C,IAAyBx8C;AAKvB,MAAAgM;AAAA,EAAA7M,SAAAqjB,KAEyBxW,IAAAA,MAAA;AACzBowC,IAAAA,EAAoBlvC,OAAcA,GAAO2W,aAAerB,EAASqB,WAA/B7kB,SAAAkO,CAA+D;AAAA,EAAC,GACnG/N,OAAAqjB,GAAArjB,OAAA6M,KAAAA,IAAA7M,EAAA,CAAA;AAFD,QAAAs9C,IAA2BzwC,GAQ3B0wC,IAA8BrhC;AAK5B,MAAAL;AAAA,EAAA7b,EAAA,EAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAWI8R,IAAA,gBAAAvb,EAAAkO,GAAA,UAAA,EAA0B,UAAA,SAAc,OAAA,KAAkB,eAAA,OAAA,CAAM,GAAGxO,QAAA6b,KAAAA,IAAA7b,EAAA,EAAA;AAIvD,QAAA8b,IAAAohC,EAAgBnM,mBAAoB,YAApC,SAAA;AAAiE,MAAAh1B;AAAA,EAAA/b,EAAA,EAAA,MAAAm9C,KAAAn9C,UAAAo9C,KAAAp9C,EAAA,EAAA,MAAAmxC,KAexEp1B,IAAAohC,IACC,gBAAA78C,EAAAkO,GAAA,cAAA,EACc,cAAA,SAAS4uC,CAAU,IACpB,YAAA,UACE,cAAA,MACP,OAAA,YACC,QAAA,WACC,SAAA,eACN,GAAA,KACO,UAAA,KACM,gBAAA,UACN,UAAA,YACJ,KAAAjM,KAAA,KACH,GAAA,KACK,QAAA,KACC,QAAA;AAAA,IAAAjhB,IAAM;AAAA,IAAWX,OAAS;AAAA,EAAA,GAElC,4BAAC7uB,GAAA,EAAmB,MAAA,KAAU,MAAA,GAAA,CAAE,GAClC,IAlBD,MAmBOV,QAAAm9C,GAAAn9C,QAAAo9C,GAAAp9C,QAAAmxC,GAAAnxC,QAAA+b,KAAAA,IAAA/b,EAAA,EAAA;AAAA,MAAAic;AAAA,EAAAjc,EAAA,EAAA,MAAA0jC,KAAA1jC,EAAA,EAAA,MAAAgxC,KAAAhxC,EAAA,EAAA,MAAAw8C,KAAAx8C,UAAAixC,KAAAjxC,EAAA,EAAA,MAAAy8C,KAAAz8C,EAAA,EAAA,MAAAkxC,KAAAlxC,EAAA,EAAA,MAAA+b,KA/BVE,IAAA,gBAAAvN,EAAAF,GAAA,SAAA,EACW,UAAA,YACA,UAAA,UACG,aAAA,OACA,aAAA,iBACTwiC,GAAAA,GACGwL,MAAAA,GACAC,SACHvL,GAAAA,GACGD;;IAGLl1B;AAAAA,EAAAA,GAoBH,GAAiB/b,QAAA0jC,GAAA1jC,QAAAgxC,GAAAhxC,QAAAw8C,GAAAx8C,QAAAixC,GAAAjxC,QAAAy8C,GAAAz8C,QAAAkxC,GAAAlxC,QAAA+b,GAAA/b,QAAAic,KAAAA,IAAAjc,EAAA,EAAA;AAAA,MAAAmc;AAAA,EAAAnc,EAAA,EAAA,MAAA8b,KAAA9b,UAAAic,KAxCrBE,sBAACG,IAAA,EACCT,UAAAA;AAAAA,IAAAA;AAAAA,IACA,gBAAAvb,EAAAkO,GAAA,YAAA,EACW,UAAA,SACH,OAAA,KACI,UAAAsN,GACI,eAAA,QAEdG,UAAAA,EAAAA,CAiCF;AAAA,EAAA,GACF,GAASjc,QAAA8b,GAAA9b,QAAAic,GAAAjc,QAAAmc,KAAAA,IAAAnc,EAAA,EAAA;AAAA,MAAAskB;AAAA,SAAAtkB,EAAA,EAAA,MAAAk9C,KAAAl9C,EAAA,EAAA,MAAAs9C,KAAAt9C,EAAA,EAAA,MAAAq9C,KAAAr9C,EAAA,EAAA,MAAA0J,KAAA1J,UAAAmc,KAjDXmI,IAAA,gBAAAhkB,EAAAkO,GAAA,MAAA,EAAA,GACM0uC,GACExzC,MAAAA,GACU4zC,gBAAAA,GACFD,cAAAA,GACKE,mBAAAA,GAEnBphC,UAAAA,GA2CF,GAAcnc,QAAAk9C,GAAAl9C,QAAAs9C,GAAAt9C,QAAAq9C,GAAAr9C,QAAA0J,GAAA1J,QAAAmc,GAAAnc,QAAAskB,KAAAA,IAAAtkB,EAAA,EAAA,GAlDdskB;AAkDc;AAzHmB,SAAA7iB,GAAAG,GAAA;AAAA,SAEwCA,EAAKE,OAAOgjB,QAAQ1hB;AAAQ;AAFpE,SAAAiI,GAAAoR,GAAA;AAAA,SAGoD7a,EAAKoiB;AAAU;AAHnE,SAAAtI,GAAAgB,GAAA;AAAA,SAIkC9a,EAAKsiB;AAAY;AAJnD,SAAAvI,KAAA;AAAA;AAAA,SAAAO,GAAAvN,GAAA;AAgEjC,QAAA6J,IAAe7J,EAAK6uC,OAAOC,eAAsBjlC;AACjD,EAAIA,aAAkBkb,WAAWlb,EAAMmb,QAAS,uBAAuB,KACrEhlB,EAAKsO,eAAAA;AACN;ACpLE,MAAMygC,KAAqC39C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAChD;AAAA,IAAAoB,WAAAA;AAAAA,EAAAA,IAAsBtB,GACtBiB,IAAcM,EAAkBD,EAASE,YAAYC,OAAQC,EAA4B,KAA3E,CAAA,GACdk8C,IAAuBl8B,GAAmCpgB,CAAS,GACnE3B,IAAiBsB,EAAKk5B,GAAI,EAAY,GAACx6B,UACvCohB,IAAgBphB,IAAWi+C,EAAej+C,CAAa,IAAvC,CAAA;AAChB,MAAI,CAACA,KAAYohB,EAAOpf,WAAY;AAAC,WAAS;AAC9C,QAAAuE,IAAcvG,EAAQuG,SAAUvG,EAAQ2E,MAAO3E,EAAQU;AAAM,MAAAF;AAAA,EAAAF,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAER7J,IAAA;AAAA,IAAAmjB,WAAa;AAAA,EAAA,GAAgBrjB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAIhE,QAAAK,IAAA,eAAe4F,CAAK;AAAE,MAAApF;AAAA,EAAAb,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAGlClJ,IAAA,gBAAAP,EAACI,GAAA,EAAmB,MAAA,eAAoB,MAAA,IAAE,GAAIV,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAA6M;AAAA,EAAA7M,SAAAK,KANhDwM,IAAA,gBAAAvM,EAACib,IAAA,EACM,MAAA,MACG,SAAA,SACI,cAAAlb,GAC+B,8CAAA,IAE3CQ,UAAAA,EAAAA,CACF,GAAab,OAAAK,GAAAL,OAAA6M,KAAAA,IAAA7M,EAAA,CAAA;AAAA,MAAA6b;AAAA,SAAA7b,EAAA,CAAA,MAAA8gB,KAAA9gB,SAAA6M,KARfgP,sBAAC+hC,IAAA,EAA4B98B,SAAAA,GAAsB,aAAA5gB,GACjD2M,UAAAA,GAQF,GAAqB7M,OAAA8gB,GAAA9gB,OAAA6M,GAAA7M,OAAA6b,KAAAA,IAAA7b,EAAA,CAAA,GATrB6b;AASqB;AAlByB,SAAApa,GAAAG,GAAA;AAAA,SAEwBA,EAAKZ;AAAM;ACmBrF,MAAM68C,KAAyB99C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC7B;AAAA,IAAA2d,SAAAA;AAAAA,EAAAA,IAAoB7d;AAAM,MAAAG;AAAA,EAAAF,EAAA,CAAA,MAAA4d,EAAApd,QAWpBN,sBAACQ,GAAA,EAAoB,MAAAkd,EAAOpd,MAAa,MAAA,IAAE,GAAIR,EAAA,CAAA,IAAA4d,EAAApd,MAAAR,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,EAAAL,SAAA4d,EAAA3X,SAAAjG,SAAA4d,EAAAkgC,YAAA99C,SAAA4d,EAAAlU,QAAA1J,SAAAE,KAPjDG,sBAACkb,IAAA,EACO4N,MAAAA,IACE,SAAA,SACI,cAAAvL,EAAO3X,OACL,gBAAA2X,EAAOlU,MACZ,SAAAkU,EAAOkgC,UAEhB59C,UAAAA,GACF,GAAaF,EAAA,CAAA,IAAA4d,EAAA3X,OAAAjG,EAAA,CAAA,IAAA4d,EAAAkgC,UAAA99C,EAAA,CAAA,IAAA4d,EAAAlU,MAAA1J,OAAAE,GAAAF,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AAAA,SAAAb,SAAA4d,EAAA3X,SAAAjG,SAAAK,KATfQ,sBAAC2a,IAAA,EAAiB,SAAAoC,EAAO3X,OACvB5F,UAAAA,GASF,GAAUL,EAAA,CAAA,IAAA4d,EAAA3X,OAAAjG,OAAAK,GAAAL,OAAAa,KAAAA,IAAAb,EAAA,CAAA,GAVVa;AAUU,GASRk9C,KAA8Bh+C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAClC;AAAA,IAAAoB,WAAAA;AAAAA,IAAA28C,gBAAAA;AAAAA,EAAAA,IAAsCj+C,GACtCk+C,IAAgB38C,EAAkBD,EAAS68C,cAAcC,cAAe18C,EAAgB;AAAE,MAAAvB;AAAA,EAAAF,SAAAg+C,KAIrF99C,IAAA89C,EAAc/8C,IAAKoK,EAEnB,GAACrL,OAAAg+C,GAAAh+C,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAMY,QAAAK,IAAA,CAAC49C,EAAOG;AAAU,MAAAv9C;AAAA,EAAAb,EAAA,CAAA,MAAAqB,EAAA68C,iBACnBr9C,IAAAA,MAAMQ,EAAS68C,cAAcG,OAAAA,GAASr+C,EAAA,CAAA,IAAAqB,EAAA68C,eAAAl+C,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAA6M;AAAA,EAAA7M,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAE/C8C,IAAA,gBAAAvM,EAACI,GAAA,EAAmB,MAAA,aAAkB,MAAA,IAAE,GAAIV,OAAA6M,KAAAA,IAAA7M,EAAA,CAAA;AAAA,MAAA6b;AAAA,EAAA7b,EAAA,CAAA,MAAAK,KAAAL,SAAAa,KARhDgb,sBAACL,IAAA,EAAgB,SAAA,iBACf,UAAA,gBAAAlb,EAACib,MACM,MAAA,MACG,SAAA,SACG,cAAA,iBACD,UAAAlb,GACD,SAAAQ,GAETgM,aACF,GACF,GAAU7M,OAAAK,GAAAL,OAAAa,GAAAb,OAAA6b,KAAAA,IAAA7b,EAAA,CAAA;AAMI,QAAA8b,IAAA,CAACmiC,EAAOK;AAAa,MAAAviC;AAAA,EAAA/b,EAAA,CAAA,MAAAqB,EAAA68C,iBACtBniC,IAAAA,MAAM1a,EAAS68C,cAAcK,UAAAA,GAAYv+C,EAAA,CAAA,IAAAqB,EAAA68C,eAAAl+C,OAAA+b,KAAAA,IAAA/b,EAAA,CAAA;AAAA,MAAAic;AAAA,EAAAjc,EAAA,EAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAElDkS,IAAA,gBAAA3b,EAACI,GAAA,EAAmB,MAAA,cAAmB,MAAA,IAAE,GAAIV,QAAAic,KAAAA,IAAAjc,EAAA,EAAA;AAAA,MAAAmc;AAAA,EAAAnc,EAAA,EAAA,MAAA8b,KAAA9b,UAAA+b,KARjDI,sBAACX,IAAA,EAAgB,SAAA,oBACf,UAAA,gBAAAlb,EAACib,MACM,MAAA,MACG,SAAA,SACG,cAAA,oBACD,UAAAO,GACD,SAAAC,GAETE,aACF,GACF,GAAUjc,QAAA8b,GAAA9b,QAAA+b,GAAA/b,QAAAmc,KAAAA,IAAAnc,EAAA,EAAA;AAAA,MAAAskB;AAAA,SAAAtkB,EAAA,EAAA,MAAAE,KAAAF,UAAA6b,KAAA7b,EAAA,EAAA,MAAAmc,KAzBZmI,IAAA,gBAAA5V,EAAC5N,IAAA,EAAW,KAAA,OAAkB,YAAA,GAC3BZ,UAAAA;AAAAA,IAAAA;AAAAA,IAGD2b;AAAAA,IAWAM;AAAAA,EAAAA,GAWF,GAASnc,QAAAE,GAAAF,QAAA6b,GAAA7b,QAAAmc,GAAAnc,QAAAskB,KAAAA,IAAAtkB,EAAA,EAAA,GA1BTskB;AA0BS,GAIPk6B,KAA0Bz+C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC9B;AAAA,IAAAw+C,UAAAA;AAAAA,EAAAA,IAAqB1+C;AAAM,MAAAG;AAAA,EAAAF,SAAAy+C,KAItBv+C,IAAAu+C,EAAQx9C,IAAKya,EAEb,GAAC1b,OAAAy+C,GAAAz+C,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,SAAAL,SAAAE,KAHJG,sBAACS,IAAA,EAAW,KAAA,OAAkB,YAAA,GAC3BZ,UAAAA,GAGH,GAASF,OAAAE,GAAAF,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAJTK;AAIS,GAIAq+C,KAAqB3+C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAChC;AAAA,IAAAoB,WAAAA;AAAAA,IAAAs9C,QAAAA;AAAAA,IAAAX,gBAAAA;AAAAA,EAAAA,IAA8Cj+C,GAC9CykB,IAAeD,GAAcljB,GAAW,KAAK;AAAE,MAAAnB;AAAA,EAAAF,SAAAg+C,KACvB99C,IAAA89C,EAAc/4C,OAAQ0W,EAAqC,GAAC3b,OAAAg+C,GAAAh+C,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAApF,QAAA4+C,IAAwB1+C;AAA6D,MAAAG;AAAA,EAAAL,SAAAg+C,KACtD39C,IAAA29C,EAAc/4C,OAAQiX,EAAqC,GAAClc,OAAAg+C,GAAAh+C,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAA3F,QAAA6+C,IAA+Bx+C;AAE/B,MAAImkB,MAAW;AAAK,WAAS;AAC7B,MAAIA,GAAM;AAAA,QAAA3jB;AAAA,IAAAb,EAAA,CAAA,MAAAwkB,KAAAxkB,SAAAqB,KAGJR,sBAAC+V,GAAA,EAAS,MAAA,KAAS,MAAA,KAAM,GAAA,QAAgB,UAAA,UACvC,4BAAC6N,IAAA,EAA0BpjB,WAAAA,GAAmBmjB,QAAAA,GAAe,QAAA,OAAK,GACpE,GAAMxkB,OAAAwkB,GAAAxkB,OAAAqB,GAAArB,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,QAAA6M;AAAA,IAAA7M,SAAAg+C,KACNnxC,sBAAC2xC,IAAA,EAAkCR,UAAAA,EAAAA,CAAc,GAAIh+C,OAAAg+C,GAAAh+C,OAAA6M,KAAAA,IAAA7M,EAAA,CAAA;AAAA,QAAA6b;AAAA,WAAA7b,EAAA,CAAA,MAAAa,KAAAb,UAAA6M,KAJvDgP,IAAA,gBAAAnN,EAACy0B,IAAA,EAA6B,yBAAA,OAAc,SAAA,QAAe,SAAA,KAAgB,YAAA,GACzEtiC,UAAAA;AAAAA,MAAAA;AAAAA,MAGAgM;AAAAA,IAAAA,GACF,GAAS7M,OAAAa,GAAAb,QAAA6M,GAAA7M,QAAA6b,KAAAA,IAAA7b,EAAA,EAAA,GALT6b;AAAAA,EAKS;AACT,MAAAhb;AAAA,EAAAb,UAAAqB,KAaAR,IAAA,gBAAAP,EAACmb,IAAA,EAAkCpa,WAAAA,GAAqBy9C,UAAAA,IAAiC,GAAI9+C,QAAAqB,GAAArB,QAAAa,KAAAA,IAAAb,EAAA,EAAA;AAAA,MAAA6M;AAAA,EAAA7M,EAAA,EAAA,MAAA4+C,KAAA5+C,UAAAqB,KAC7FwL,IAAA,gBAAAvM,EAACy9C,IAAA,EAAuC18C,WAAAA,GAA2Bu9C,gBAAAA,GAAe,GAAI5+C,QAAA4+C,GAAA5+C,QAAAqB,GAAArB,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA;AAAA,MAAA6b;AAAA,EAAA7b,EAAA,EAAA,MAAA2+C,KAAA3+C,UAAAqB,KACtFwa,IAAA,gBAAAvb,EAACsW,KAAM,GAAA,QAAY,MAAA,KAAS,MAAA,OAAe,UAAA,UACxC+nC,UAAAA,sBACEr4B,IAAA,EAA2BjlB,WAAAA,GAAkB,QAAA,OAAY,OAAA,cAAY,IAEtE,gBAAAf,EAACc,IAAA,EAAmCC,WAAAA,EAAAA,CAAS,EAAA,CAEjD,GAAMrB,QAAA2+C,GAAA3+C,QAAAqB,GAAArB,QAAA6b,KAAAA,IAAA7b,EAAA,EAAA;AAAA,MAAA8b;AAAA,EAAA9b,UAAAqB,KACNya,sBAAChb,IAAA,EAA6C,yCAAA,IAAe,YAAA,GAAO,KAAA,OAAQ,GAAA,KAAmB,gBAAA,UAAc,MAAA,KAC3G,UAAA,gBAAAR,EAACo9C,IAAA,EAA8Cr8C,WAAAA,GAAS,GAC1D,GAASrB,QAAAqB,GAAArB,QAAA8b,KAAAA,IAAA9b,EAAA,EAAA;AAAA,MAAA+b;AAAA,EAAA/b,EAAA,EAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACTgS,IAAA,gBAAAzb,EAACsW,GAAA,EAAS,MAAA,KAAS,MAAA,KAAG,GAAG5W,QAAA+b,KAAAA,IAAA/b,EAAA,EAAA;AAAA,MAAAic;AAAA,EAAAjc,UAAAqB,KACzB4a,IAAA,gBAAA3b,EAACmb,IAAA,EAAkCpa,WAAAA,GAAqB09C,UAAAA,IAAkC,GAAI/+C,QAAAqB,GAAArB,QAAAic,KAAAA,IAAAjc,EAAA,EAAA;AAAA,MAAAmc;AAAA,EAAAnc,UAAA6+C,KAC9F1iC,sBAACqiC,IAAA,EAAkCK,UAAAA,EAAAA,CAAsB,GAAI7+C,QAAA6+C,GAAA7+C,QAAAmc,KAAAA,IAAAnc,EAAA,EAAA;AAAA,MAAAskB;AAAA,SAAAtkB,UAAAa,KAAAb,EAAA,EAAA,MAAA6M,KAAA7M,EAAA,EAAA,MAAA6b,KAAA7b,EAAA,EAAA,MAAA8b,KAAA9b,UAAAic,KAAAjc,EAAA,EAAA,MAAAmc,KAxB/DmI,sBAAC6e,IAAA,EACuB,yBAAA,OACd,SAAA,QACJ,IAAApgC,EAAoBZ,MACf,UAAA,YACG,YAAA,GACR,KAAA,MACK,UAAA,UACC,WAAA,UAEVtB,UAAAA;AAAAA,IAAAA;AAAAA,IACAgM;AAAAA,IACAgP;AAAAA,IAOAC;AAAAA,IAGAC;AAAAA,IACAE;AAAAA,IACAE;AAAAA,EAAAA,GACF,GAASnc,QAAAa,GAAAb,QAAA6M,GAAA7M,QAAA6b,GAAA7b,QAAA8b,GAAA9b,QAAAic,GAAAjc,QAAAmc,GAAAnc,QAAAskB,KAAAA,IAAAtkB,EAAA,EAAA,GAzBTskB;AAyBS;AA1FuB,SAAA7iB,GAAAG,GAAA;AAAA,SAEiDA;AAAK;AAFtD,SAAAyJ,GAAAuS,GAAA;AAAA,SAO5B,gBAAAtd,EAACu9C,IAAA,EAAiDjgC,SAAAA,EAAAA,GAArBA,EAAOvZ,EAAqB;AAAI;AA4BrC,SAAAqX,GAAAkC,GAAA;AAAA,SAMxB,gBAAAtd,EAACu9C,IAAA,EAAiDjgC,SAAAA,EAAAA,GAArBA,EAAOvZ,EAAqB;AAAI;AAMnC,SAAAsX,GAAAiC,GAAA;AAAA,SAG2BA,EAAOvZ,OAAQ;AAAS;AAHnD,SAAA6X,GAAA8iC,GAAA;AAAA,SAIkCphC,EAAOvZ,OAAQ;AAAS;AC3E5F,MAAM46C,KAAkC;AAAA,EAAEv4C,QAAQ,CAAA;AAAA,EAAI8D,QAAQ,CAAA;AAAA,EAAIpD,QAAQ,CAAA;AAAA,EAAI4S,UAAU;AAAA,EAAO0c,SAAS;AAAK,GAChGwoB,KAAwBn/C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACnC;AAAA,IAAAoB,WAAAA;AAAAA,IAAAyP,cAAAA;AAAAA,IAAAuS,WAAAA;AAAAA,EAAAA,IAA+CtjB,GAC/CL,IAAiB2jB,EAAS3jB,UAC1B,CAAAkC,GAAAgsC,CAAA,IAA0B3jC,EAA4Bg1C,EAAY,GAClEroB,IAAmBlhB,GAAO,CAAC;AAAE,MAAAxV,GAAAG;AAAA,EAAAL,EAAA,CAAA,MAAA8Q,KAAA9Q,SAAAN,KAAAM,EAAA,CAAA,MAAAqB,KACnBnB,IAAAA,MAAA;AACR,QAAAgK,IAAgB;AAChB0jC,IAAAA,EAASqR,EAAY;AACrB,UAAApoB,IAAiBA,MAAA;AACfD,MAAAA,EAAU7oB,UAAV6oB,EAAU7oB,UAAY;AACtB,YAAA+oB,IAAkBF,EAAU7oB;AAC5B9C,cAAOC,QAAAA,EAAUX,KACT,MAAMuG,EAAYimB,aAAcr3B,CAAQ,CAAC,EAAC6K,KAC1CI,CAAAA,MAAA;AACJ,YAAIT,KAAa0sB,EAAU7oB,YAAa+oB;AAAS;AACjD,cAAA1vB,IAAe;AAAA,UAAA,GAAM0J,EAAYquC,iBAAZ,CAAA;AAAA,UAAgC,GAAOx0C,EAAMvD,UAAN,CAAA;AAAA,QAAkB,GAC9EoF,IAAa;AAAA,UAAA9F,QACHiE,EAAMjE,UAAN,CAAA;AAAA,UAAmB8D,QACnBG,EAAMH,UAAN,CAAA;AAAA,UAAmBpD,QAAAA;AAAAA,UAAA4S,UAEjBhS,EAAQ2C,EAAMqP;AAAAA,UAAU0c,SACzB;AAAA,QAAA;AAEXkX,QAAAA,EAASphC,CAAI;AAAA,MAAC,CACf,EAACpB,MACKkC,CAAAA,MAAA;AACL,QAAIpD,KAAa0sB,EAAU7oB,YAAa+oB,KACxC8W,EAAS;AAAA,UAAA,GAAKqR;AAAAA,UAAYvoB,SAAW;AAAA,UAAKppB,OAASA,aAAiB5F,QAAQ4F,EAAKgB,UAAWnJ,OAAOmI,CAAK;AAAA,QAAA,CAAG;AAAA,MAAC,CAC7G;AAAA,IAAC;AAENupB,IAAAA,EAAAA;AACA,UAAArU,IAAqB1R,EAAYoO,YAAa2X,CAAQ,GACtDG,IAA4BlT,EAAsBziB,CAAS,EAAC+9C,6BAA8BzwC,CAAAA,MAAA;AACxF,MAAIA,EAAK0wC,uBAAwBvuC,EAAYzM,MAAKwyB,EAAAA;AAAAA,IAAW,CAC9D;AAAE,WACI,MAAA;AACL3sB,MAAAA,IAAYA,IACR,OAAOsY,KAAiB,aAAYA,EAAAA,IACnCA,GAAYE,QAAAA,GACjBsU,EAAmBtU,QAAAA;AAAAA,IAAU;AAAA,EAC9B,GACAriB,KAACyQ,GAAcpR,GAAU2B,CAAS,GAACrB,OAAA8Q,GAAA9Q,OAAAN,GAAAM,OAAAqB,GAAArB,OAAAE,GAAAF,OAAAK,MAAAH,IAAAF,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA,IApCtCuL,GAAUrL,GAoCPG,CAAmC;AACtC,QAAA2Z,IAAiBpY,EAAKoY,YAAc,CAAClJ,EAAYwuC,eAAb,CAA8BxuC,EAAYyuC,OAC9EC,IAAmB,CAACxlC,MAAahS,EAAQ8I,EAAYyuC,SAAWv3C,EAAQ8I,EAAYkb;AAAS,MAAAnrB;AAAA,EAAAb,EAAA,CAAA,MAAA8Q,KAAA9Q,EAAA,CAAA,MAAAN,KAAAM,EAAA,CAAA,MAAA4B,EAAAwF,UACxEvG,IAAAA,CAAAwD,GAAAQ,MAAA;AACnB,UAAApB,IAAcg8C,GAAkBh4C,MAAO5C,CAAK,GAG5C66C,IAAe;AAAA,MAAA,GAAK99C,EAAKwF;AAAAA,MAAO,CAAG/C,CAAE,GAAGZ;AAAAA,IAAAA;AACxC,IAAIqN,EAAYwuC,eAAmBxuC,EAAYwuC,YAAa;AAAA,MAAAK,WAAat7C;AAAAA,MAAEZ,OAAAA;AAAAA,MAAA2D,QAASA;AAAAA,MAAM1H,UAAAA;AAAAA,IAAAA,CAAY,GACtGkuC,EAASgS,CAAAA,OAAW;AAAA,MAAA,GAAKA;AAAAA,MAAIx4C,QAAU;AAAA,QAAA,GAAKw4C,EAAIx4C;AAAAA,QAAO,CAAG/C,CAAE,GAAGZ;AAAAA,MAAAA;AAAAA,IAAM,EAAI;AAAA,EAAC,GAC3EzD,OAAA8Q,GAAA9Q,OAAAN,GAAAM,EAAA,CAAA,IAAA4B,EAAAwF,QAAApH,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAPD,QAAA67B,IAAqBh7B;AAOnB,MAAAgM;AAAA,EAAA7M,EAAA,CAAA,MAAA8Q,KAAA9Q,EAAA,EAAA,MAAA67B,KAAA77B,EAAA,EAAA,MAAAga,KAAAha,UAAA4B,KAGEiL,sBAACkC,IAAA,EAAgB,MAAA,KAAS,MAAA,KAAS,MAAA,KAAM,GAAA,QAAY,MAAA,MACnD,4BAAC8wC,IAAA,EAAuBj+C,OAAAA,GAAqBkP,cAAAA,GAAwBkJ,UAAAA,GAAoB6hB,aAAY,EAAA,CACvG,GAAa77B,OAAA8Q,GAAA9Q,QAAA67B,GAAA77B,QAAAga,GAAAha,QAAA4B,GAAA5B,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA;AAAA,MAAA6b;AAAA,EAAA7b,EAAA,EAAA,MAAA8Q,KAAA9Q,UAAAN,KAAAM,EAAA,EAAA,MAAAw/C,KAAAx/C,EAAA,EAAA,MAAA4B,EAAAwF,UACZyU,IAAA2jC,IACC,gBAAA9wC,EAACkZ,IAAA,EAAoB,gBAAA,OAAkB,aAAA,gBAAkB,IAAA,MAAQ,IAAA,MAAS,KAAA,MAAoB,gBAAA,YAC3F9W,UAAAA;AAAAA,IAAAA,EAAYkb,0BACV3c,IAAA,EACM,MAAA,MACG,SAAA,SACC,SAAA,MAAA;AACFyB,MAAAA,EAAYkb,QAAS;AAAA,QAAAtsB,UAAAA;AAAAA,MAAAA,CAAY;AAAA,IAAC,GAE1C,mBAED,IATD;AAAA,IAWAoR,EAAYyuC,QACX,gBAAAj/C,EAAC+O,IAAA,EACM,MAAA,MACG,SAAA,UACC,SAAA,MAAA;AACFyB,MAAAA,EAAYyuC,QAAS;AAAA,QAAAn4C,QAAUxF,EAAKwF;AAAAA,QAAO1H,UAAAA;AAAAA,MAAAA,CAAY;AAAA,IAAC,GAEhE,mBAED,IATD;AAAA,EAAA,EAAA,CAWH,IAxBD,MAyBOM,QAAA8Q,GAAA9Q,QAAAN,GAAAM,QAAAw/C,GAAAx/C,EAAA,EAAA,IAAA4B,EAAAwF,QAAApH,QAAA6b,KAAAA,IAAA7b,EAAA,EAAA;AAAA,MAAA8b;AAAA,SAAA9b,EAAA,EAAA,MAAA6M,KAAA7M,UAAA6b,KA7BVC,IAAA,gBAAApN,EAACG,IAAA,EAAQ,GAAA,QAAY,MAAA,KAAQ,KAAA,KAAO,IAAA,MAAc,UAAA,UAChDhC,UAAAA;AAAAA,IAAAA;AAAAA,IAGCgP;AAAAA,EAAAA,GA0BH,GAAQ7b,QAAA6M,GAAA7M,QAAA6b,GAAA7b,QAAA8b,KAAAA,IAAA9b,EAAA,EAAA,GA9BR8b;AA8BQ,GAUN+jC,KAAkB9/C,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACtB;AAAA,IAAA2B,OAAAA;AAAAA,IAAAkP,cAAAA;AAAAA,IAAAkJ,UAAAA;AAAAA,IAAAzN,UAAAA;AAAAA,EAAAA,IAAoDxM;AACpD,MAAI6B,EAAK80B,SAAQ;AAAA,QAAAx2B;AAAA,WAAAF,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAEb7J,IAAA,gBAAAI,EAACsW,GAAA,EAAM,GAAA,MACL,UAAA,gBAAAtW,EAACG,IAAA,EAAe,WAAA,mBAAwB,OAAA,YAAW,UAAA,WAAA,CAEnD,GACF,GAAMT,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAJNE;AAAAA,EAIM;AAEV,MAAI0B,EAAK0L,OAAM;AAAA,QAAApN;AAAA,WAAAF,EAAA,CAAA,MAAA4B,EAAA0L,SAEXpN,IAAA,gBAAAI,EAACsW,GAAA,EAAM,GAAA,MACL,UAAA,gBAAAtW,EAACG,IAAA,EAAU,MAAA,SAAkB,WAAA,uBAA4B,OAAA,MACtDmB,UAAAA,EAAK0L,OACR,GACF,GAAMtN,EAAA,CAAA,IAAA4B,EAAA0L,OAAAtN,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAJNE;AAAAA,EAIM;AAEV,MAAI0B,EAAK8E,OAAOhF,UAAWE,EAAK4I,OAAO9I,QAAO;AAAA,QAAAxB;AAAA,WAAAF,EAAA,CAAA,MAAAuM,KAAAvM,SAAAga,KAAAha,EAAA,CAAA,MAAA4B,EAAA4I,UAAAxK,EAAA,CAAA,MAAA4B,EAAA8E,UAAA1G,EAAA,CAAA,MAAA4B,EAAAwF,UAE1ClH,sBAACi8B,IAAA,EACS,SAAA,SACA,QAAAv6B,EAAK8E,QACL,QAAA9E,EAAK4I,QACE,eAAA5I,EAAKwF,QACV4S,UAAAA,GACAzN,UAAAA,GAAQ,GAClBvM,OAAAuM,GAAAvM,OAAAga,GAAAha,EAAA,CAAA,IAAA4B,EAAA4I,QAAAxK,EAAA,CAAA,IAAA4B,EAAA8E,QAAA1G,EAAA,CAAA,IAAA4B,EAAAwF,QAAApH,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAPFE;AAAAA,EAOE;AAKC,QAAAA,IAAA4Q,EAAYwnB,cAAZ;AAAwC,MAAAj4B;AAAA,EAAAL,SAAAE,KAD3CG,sBAACI,IAAA,EAAe,WAAA,kBAAuB,OAAA,MACpCP,UAAAA,GACH,GAAOF,OAAAE,GAAAF,QAAAK,KAAAA,IAAAL,EAAA,EAAA;AAAA,MAAAa;AAAA,EAAAb,EAAA,EAAA,MAAA8Q,EAAAynB,oBACN13B,IAAAiQ,EAAYynB,mBACX,gBAAAj4B,EAACG,IAAA,EAAe,WAAA,mBAAwB,OAAA,YAAc,IAAA,OACnDqQ,UAAAA,EAAYynB,iBAAAA,CACf,IAHD,MAIOv4B,EAAA,EAAA,IAAA8Q,EAAAynB,kBAAAv4B,QAAAa,KAAAA,IAAAb,EAAA,EAAA;AAAA,MAAA6M;AAAA,SAAA7M,EAAA,EAAA,MAAAK,KAAAL,UAAAa,KARVgM,IAAA,gBAAA6B,EAACkI,GAAA,EAAM,GAAA,MACLvW,UAAAA;AAAAA,IAAAA;AAAAA,IAGCQ;AAAAA,EAAAA,GAKH,GAAMb,QAAAK,GAAAL,QAAAa,GAAAb,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA,GATN6M;AASM,GC1JJizC,yBAAgBC,QAAAA,GAETC,KAAmCA,CAAC3+C,MAA6B;AAC5E,EAAIy+C,GAAUv5C,IAAIlF,CAAS,MAC3By+C,GAAUt5C,IAAInF,CAAS,GACvByiB,EAAsBziB,CAAS,EAAE4+C,kCAC/B,CAAC;AAAA,IAAE5+C,WAAW85B;AAAAA,IAAOhX,UAAAA;AAAAA,IAAUk7B,oBAAAA;AAAAA,EAAAA,MAAyB;AACtD,UAAMvuC,IAAegT,EAAsBqX,CAAK,EAAE+kB,oBAAoBb,CAAkB;AACxF,WAAKvuC,IACEqvC,GAAcjB,IAAuB;AAAA,MAAE79C,WAAW85B;AAAAA,MAAOrqB,cAAAA;AAAAA,MAAcuS,WAAWc;AAAAA,IAAAA,CAAU,IADzE;AAAA,EAE5B,CACF;AACF,GCbM27B,yBAAgBC,QAAAA,GAETK,KAAoCA,CAAC/+C,MAA6B;AAC7E,EAAIy+C,GAAUv5C,IAAIlF,CAAS,MAC3By+C,GAAUt5C,IAAInF,CAAS,GACvByiB,EAAsBziB,CAAS,EAAEg/C,mCAC/B,CAAC;AAAA,IAAEh/C,WAAW85B;AAAAA,IAAOhX,UAAAA;AAAAA,IAAU+S,qBAAAA;AAAAA,EAAAA,MAA0B;AACvD,UAAMpmB,IAAegT,EAAsBqX,CAAK,EAAEmlB,qBAAqBppB,CAAmB;AAC1F,WAAKpmB,IACEqvC,GAAc5pB,IAAwB;AAAA,MAAEl1B,WAAW85B;AAAAA,MAAOrqB,cAAAA;AAAAA,MAAcuS,WAAWc;AAAAA,IAAAA,CAAU,IAD1E;AAAA,EAE5B,CACF;AACF,GCbMo8B,KAAgCA,MACpC,OAAO,kCAAsB,EAAEh2C,KAAMi2C,CAAAA,OAAY;AAAA,EAC/ClmB,SAASkmB,EAAOC;AAClB,EAAE,GAEEA,KAA4BC,GAAKH,EAA6B,GAG9DT,yBAAgBC,QAAAA,GAETY,KAA+BA,CAACt/C,MAA6B;AACxE,EAAIy+C,GAAUv5C,IAAIlF,CAAS,MAC3By+C,GAAUt5C,IAAInF,CAAS,GACvByiB,EAAsBziB,CAAS,EAAEu/C,8BAA8B,CAAC;AAAA,IAAEv/C,WAAW85B;AAAAA,IAAOhX,UAAAA;AAAAA,IAAU08B,gBAAAA;AAAAA,EAAAA,MAAqB;AACjH,UAAM/vC,IAAegT,EAAsBqX,CAAK,EAAE2lB,gBAAgBD,CAAc;AAChF,WAAK/vC,IACEqvC,GACLY,IACA;AAAA,MAAEl+C,UAAU;AAAA,IAAA,GACZs9C,GAAcM,IAA2B;AAAA,MAAEp/C,WAAW85B;AAAAA,MAAOrqB,cAAAA;AAAAA,MAAcuS,WAAWc;AAAAA,IAAAA,CAAU,CAClG,IAL0B;AAAA,EAM5B,CAAC;AACH,GCJa68B,KAA8BA,CAAClwC,MAC1CA,GCtBWmwC,KAAiCA,MAAM;AAClD,MAAIC,IAAgB;AAEpB,SAAO;AAAA,IACL10C,MAAMA,OACJ00C,KAAiB,GACVA;AAAAA,IAETC,UAAUA,CAACC,MAAoBA,MAAYF;AAAAA,EAAAA;AAE/C,GAEaG,KAAyB,OAAatqB,MAAiD;AAClG,MAAI;AACF,WAAO,MAAMA,EAAAA;AAAAA,EACf,QAAQ;AACN,WAAO,CAAA;AAAA,EACT;AACF,GChBMuqB,KAAsBA,CAACj+B,GAAmCk+B,MAAqC;AACnG,QAAM5hD,IAAW0jB,EAAU3jB,UAAUC,UAC/BosC,IAAYpsC,GAAUosC;AAC5B,MAAI,OAAOA,KAAc,SAAU,QAAOA;AAE1C,QAAMyV,IAAgB7hD,GAAU6hD;AAChC,MAAI,CAACA,KAAiB,OAAOA,KAAkB,YAAYv9C,MAAMC,QAAQs9C,CAAa;AACpF,WAAOD;AAGT,QAAMpmB,IAAQqmB;AACd,SAAOrmB,EAAMA,UAAU,aAAa,OAAOA,EAAM4Q,aAAc,WAAW5Q,EAAM4Q,YAAYlsC;AAC9F,GAEa4hD,KAAkCA,CAC7CC,GACAr+B,GACAk+B,MACG;AACH,QAAMI,IAAU,mCAAmCD,CAAgB,IAAIr+B,EAAU8S,UAAU,IACrFyrB,IAAeN,GAAoBj+B,GAAWk+B,CAAY;AAChE,SAAOK,IAAe,GAAGD,CAAO,YAAYC,CAAY,KAAKD;AAC/D,GCWME,KAA+B;AAAA,EAAE9hC,SAAS;AAAA,EAAQkF,eAAe;AAAA,EAAU/N,MAAM;AAAO,GAExF4qC,KAA2B/hD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC/B;AAAA,IAAA8X,UAAAA;AAAAA,IAAAgqC,oBAAAA;AAAAA,EAAAA,IAAyChiD,GAG8BG,IAAA6hD,IAAA,aAAAliD;AAA2C,MAAAQ;AAAA,EAAAL,EAAA,CAAA,MAAA+X,KAAA/X,SAAA+hD,KAC7G1hD,IAAA0hD,IAGC,gBAAAzhD,EAACsW,GAAA,EAAa,UAAA,YAAiB,OAAA,KAAS,MAAA,KAAS,MAAA,KAAa,UAAA,UAC3DmB,UAAAA,EAAAA,CACH,IAEA,gBAAAzX,EAACyO,IAAA,EAAgB,MAAA,KAAS,MAAA,KAAS,MAAA,KAAM,GAAA,QAAY,MAAA,MAAmB8yC,cAAAA,IACrE9pC,UAAAA,GACH,GACD/X,OAAA+X,GAAA/X,OAAA+hD,GAAA/hD,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AAAA,SAAAb,EAAA,CAAA,MAAAE,KAAAF,SAAAK,KAXHQ,IAAA,gBAAAP,EAACuO,IAAA,EAAQ,GAAA,QAAY,MAAA,KAAQ,KAAA,KAAO,IAAA,MAAc,UAAA,UAAmB,UAAA3O,GAClEG,UAAAA,GAWH,GAAQL,OAAAE,GAAAF,OAAAK,GAAAL,OAAAa,KAAAA,IAAAb,EAAA,CAAA,GAZRa;AAYQ,GAINmhD,KAAgBA,MAAM,MAAM;AAAC,GAEtBC,KAAsBA,CAACviD,MAClCsI,GACEtI,KACE,OAAOA,KAAa,YACpB,UAAUA,KACV,OAAOA,EAASU,QAAS,YACzB,QAAQV,KACR,OAAOA,EAAS2E,MAAO,WAGvB69C,KAAoCC,CAAAA,MAAA;AAAA,QAAAniD,IAAAC,EAAA,CAAA,GACxC2P,IAAewyC,GAAmBD,CAAmC,IAAtDA,IAAAtiD,QACfgD,IAAiB+M,IAAA/P,SAAsBsiD,GACvCjjC,IAAkBtP,IAASA,EAAMsP,YAAf8iC;AAA0C,MAAA9hD;AAAA,EAAAF,EAAA,CAAA,MAAA6C,KAAA7C,SAAA4P,KACxC1P,IAAA0P,IAASA,EAAM+c,cAAf,MAAoC9pB,GAAS7C,OAAA6C,GAAA7C,OAAA4P,GAAA5P,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAjE,QAAA2sB,IAAoBzsB;AAA8C,SAC3DktC,GAAqBluB,GAAWyN,GAAaA,CAAW;AAAC,GAGrD01B,KAA4BA,CACvCC,GACAC,MACG;AACH,QAAMC,IAAqB,IAAIn8C,IAAIi8C,EAAgBrhD,IAAK+S,CAAAA,MAAWA,EAAOrO,GAAG,CAAC,GACxE88C,IAAqB,IAAIp8C,IAAIi8C,EAAgBx7C,QAASkN,CAAAA,MAAYA,EAAO9F,YAAY,CAAC8F,EAAO9F,SAAS,IAAI,CAAA,CAAG,CAAC;AACpH,SAAO,CACL,GAAGo0C,GACH,GAAGC,EAAoBt9C,OACpB+O,CAAAA,MACC,CAACwuC,EAAmBj8C,IAAIyN,EAAOrO,GAAG,MAAM,CAACqO,EAAO9F,aAAa,CAACu0C,EAAmBl8C,IAAIyN,EAAO9F,SAAS,EACzG,CAAC;AAEL,GAEaw0C,KAAsB3iD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACjC;AAAA,IAAAoB,WAAAA;AAAAA,IAAAgiB,WAAAA;AAAAA,EAAAA,IAAiCtjB,GACjC+Q,IAAqBkwC,GAA4BjhD,EAAK+Q,YAAa,GACnEklB,IAA+BvU,GAAmCpgB,CAAS,GAC3E8gD,IAAmBD,GAAkCpxC,EAAYqxC,UAAW,GAC5E5b,IAAmBkb,GAAgC3wC,EAAYzM,IAAKgf,GAAWvS,EAAYywC,YAAa;AAAE,MAAArhD;AAAA,EAAAF,SAAA8Q,EAAA6xC,uBAAA3iD,EAAA,CAAA,MAAA8Q,EAAA8xC,kBAAA5iD,EAAA,CAAA,MAAA8Q,EAAA+xC,mBAAA7iD,EAAA,CAAA,MAAA8Q,EAAAgyC,gBACrF5iD,IAAA;AAAA,IAAAgtC,UACTp8B,EAAY+xC;AAAAA,IAAgBE,SAC7BjyC,EAAY8xC;AAAAA,IAAeh/B,OAC7B9S,EAAYgyC;AAAAA,IAAaE,cAClBlyC,EAAY6xC;AAAAA,EAAAA,GAC3B3iD,EAAA,CAAA,IAAA8Q,EAAA6xC,qBAAA3iD,EAAA,CAAA,IAAA8Q,EAAA8xC,gBAAA5iD,EAAA,CAAA,IAAA8Q,EAAA+xC,iBAAA7iD,EAAA,CAAA,IAAA8Q,EAAAgyC,cAAA9iD,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AALD,QAAAi/C,IAAqB/+C,GAOrBgtC,IAAiB+V,GAAuB1c,GAAY9kC,IAA2Bw9C,CAAY,GAC3F8D,IAAgBE,GAAuB1c,GAAYl7B,IAA0B4zC,CAAY;AAAE,MAAA5+C;AAAA,EAAAL,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAErC1J,IAAA,CAAA,GAAEL,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAxD,QAAA,CAAA2vB,GAAAuzB,CAAA,IAAwBj5C,EAA8B5J,CAAE;AAAE,MAAAQ;AAAA,EAAAb,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAC5BlJ,IAAAogD,GAAAA,GAAgCjhD,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAA9D,QAAAmjD,IAAuBztC,GAAO7U,CAAgC;AAAE,MAAAgM,GAAAgP;AAAA,EAAA7b,EAAA,CAAA,MAAA8Q,KAAA9Q,EAAA,CAAA,MAAA+iD,KAAA/iD,EAAA,CAAA,MAAAktC,KAAAltC,UAAAqB,KAGtDwL,IAAAA,MAAA;AACR,QAAA3C,IAAgB;AAChB,UAAA2sB,IAAiBA,MAAA;AACf,YAAAuqB,IAAgB+B,EAAcp1C,QAAQvB,KAAAA,GACtCkQ,IAAwC;AAAA,QAAAwwB,UAAAA;AAAAA,QAAA6V,SAAAA;AAAAA,MAAAA;AACnC1B,MAAAA,GAAuB,MAAMvwC,EAAYimB,aAAcn1B,CAAK,CAAC,EAAC2I,KAAMiC,CAAAA,MAAA;AACvE,QAAItC,KAAA,CAAci5C,EAAcp1C,QAAQozC,SAAUC,CAAO,KACzD8B,EAAQ12C,CAAI;AAAA,MAAC,CACd;AAAA,IAAC;AAEJqqB,IAAAA,EAAAA;AAEA,UAAArU,IAAqB1R,EAAYoO,YAAa2X,CAAQ,GACtDG,IAA4BlT,EAAsBziB,CAAS,EAAC+hD,2BAA4Bz0C,CAAAA,MAAA;AACtF,MAAIA,EAAK+yC,qBAAsB5wC,EAAYzM,MAAKwyB,EAAAA;AAAAA,IAAW,CAC5D;AAAE,WACI,MAAA;AACL3sB,MAAAA,IAAYA,IACR,OAAOsY,KAAiB,aAC1BA,EAAAA,IAEAA,GAAYE,QAAAA,GAEdsU,EAAmBtU,QAAAA;AAAAA,IAAU;AAAA,EAC9B,GACA7G,IAAA,CAAC/K,GAAciyC,GAAS7V,GAAU7rC,CAAS,GAACrB,OAAA8Q,GAAA9Q,OAAA+iD,GAAA/iD,OAAAktC,GAAAltC,QAAAqB,GAAArB,QAAA6M,GAAA7M,QAAA6b,MAAAhP,IAAA7M,EAAA,EAAA,GAAA6b,IAAA7b,EAAA,EAAA,IAzB/CuL,GAAUsB,GAyBPgP,CAA4C;AAAC,MAAAC;AAAA,EAAA9b,UAAA8Q,KAE1BgL,IAAA8T,CAAAA,MAAA;AACpB,IAAI9e,EAAYinB,iBAAqB9sB,QAAOC,QAAS4F,EAAYinB,cAAenI,CAAG,CAAC,EAACxkB,MAAOsQ,EAAe;AAAA,EAAE,GAC9G1b,QAAA8Q,GAAA9Q,QAAA8b,KAAAA,IAAA9b,EAAA,EAAA;AAFD,QAAAqjD,IAAsBvnC;AAEpB,MAAAC;AAAA,EAAA/b,EAAA,EAAA,MAAA8Q,KAAA9Q,UAAAg2B,KAE+Bja,IAAA+b,CAAAA,MAAA;AAC/B,UAAAwqB,IAAwBL,GAAoBryB,EAAGlwB,QAAqD,IAAxCs2B,EAAuBpG,EAAGlwB,QAAc,IAA5E,CAAA,GACxB6iD,IAA4BzxC,EAAYwyC,2BAA4B1zB,CAAS,KAAjD,CAAA;AAAmD,WACxEyyB,GAA0BC,GAAiBC,CAAmB;AAAA,EAAC,GACvEviD,QAAA8Q,GAAA9Q,QAAAg2B,GAAAh2B,QAAA+b,KAAAA,IAAA/b,EAAA,EAAA;AAJD,QAAAsjD,IAAiCvnC,GAOeE,IAAAixB,EAAQqW,aAAc,SAapDpnC,IAAArL,EAAYinB,gBAAZsrB,IAAAxjD;AAAsD,MAAAykB;AAAA,EAAAtkB,UAAAmiD,KAAAniD,EAAA,EAAA,MAAA8Q,EAAA0yC,aAAAxjD,EAAA,EAAA,MAAA8Q,EAAA6xC,uBAAA3iD,EAAA,EAAA,MAAA8Q,EAAA8xC,kBAAA5iD,UAAA8Q,EAAA+xC,mBAAA7iD,UAAA8Q,EAAAgyC,gBAAA9iD,UAAA8Q,EAAAynB,oBAAAv4B,UAAA8Q,EAAAwnB,cAAAt4B,EAAA,EAAA,MAAA8Q,EAAA2yC,wBAAAzjD,EAAA,EAAA,MAAA8Q,EAAA4yC,eAAA1jD,EAAA,EAAA,MAAA8Q,EAAA6yC,qBAAA3jD,EAAA,EAAA,MAAA8Q,EAAA8yC,kBAAA5jD,EAAA,EAAA,MAAA8Q,EAAA+yC,eAAA7jD,EAAA,EAAA,MAAA8Q,EAAAgzC,aAAA9jD,EAAA,EAAA,MAAAsjD,KAAAtjD,EAAA,EAAA,MAAA2vB,KAAA3vB,UAAAumC,KAAAvmC,EAAA,EAAA,MAAAmc,KAZpEmI,IAAA,gBAAAhkB,EAACyjD,MACOp0B,MAAAA,GACM4W,YAAAA,GACA4b,YAAAA,GACK,iBAAArxC,EAAY+xC,iBACb,gBAAA/xC,EAAY8xC,gBACd,cAAA9xC,EAAYgyC,cACL,qBAAAhyC,EAAY6xC,qBACrB,YAAA7xC,EAAYwnB,YACN,kBAAAxnB,EAAYynB,kBACR,sBAAAznB,EAAY2yC,sBACrB,aAAA3yC,EAAY4yC,aACb,YAAAvnC,GACO,mBAAArL,EAAY6yC,mBACpB,WAAA7yC,EAAYgzC,WACZ,WAAAhzC,EAAY0yC,WACV,aAAA1yC,EAAY+yC,aACT,gBAAA/yC,EAAY8yC,gBACFN,0BAAAA,EAAAA,CAAwB,GAClDtjD,QAAAmiD,GAAAniD,EAAA,EAAA,IAAA8Q,EAAA0yC,WAAAxjD,EAAA,EAAA,IAAA8Q,EAAA6xC,qBAAA3iD,EAAA,EAAA,IAAA8Q,EAAA8xC,gBAAA5iD,EAAA,EAAA,IAAA8Q,EAAA+xC,iBAAA7iD,EAAA,EAAA,IAAA8Q,EAAAgyC,cAAA9iD,EAAA,EAAA,IAAA8Q,EAAAynB,kBAAAv4B,EAAA,EAAA,IAAA8Q,EAAAwnB,YAAAt4B,EAAA,EAAA,IAAA8Q,EAAA2yC,sBAAAzjD,EAAA,EAAA,IAAA8Q,EAAA4yC,aAAA1jD,EAAA,EAAA,IAAA8Q,EAAA6yC,mBAAA3jD,EAAA,EAAA,IAAA8Q,EAAA8yC,gBAAA5jD,EAAA,EAAA,IAAA8Q,EAAA+yC,aAAA7jD,EAAA,EAAA,IAAA8Q,EAAAgzC,WAAA9jD,QAAAsjD,GAAAtjD,QAAA2vB,GAAA3vB,QAAAumC,GAAAvmC,QAAAmc,GAAAnc,QAAAskB,KAAAA,IAAAtkB,EAAA,EAAA;AAAA,MAAA6nB;AAAA,SAAA7nB,EAAA,EAAA,MAAAic,KAAAjc,UAAAskB,KApBJuD,IAAA,gBAAAvnB,EAACwhD,IAAA,EAA6C,oBAAA7lC,GAC5CqI,UAAAA,GAoBF,GAA2BtkB,QAAAic,GAAAjc,QAAAskB,GAAAtkB,QAAA6nB,KAAAA,IAAA7nB,EAAA,EAAA,GArB3B6nB;AAqB2B;AA/EI,SAAApmB,GAAAG,GAAA;AAAA,SAa8BA,EAAKsrC;AAAS;AAb5C,SAAA7hC,GAAAoR,GAAA;AAAA,SAc6B7a,EAAKmhD;AAAQ;AAd1C,SAAArnC,KAAA;AAAA;ACvFnC,MAAMokC,yBAAgBC,QAAAA,GAETiE,KAAiCA,CAAC3iD,MAA6B;AAC1E,EAAIy+C,GAAUv5C,IAAIlF,CAAS,MAC3By+C,GAAUt5C,IAAInF,CAAS,GACvByiB,EAAsBziB,CAAS,EAAE4iD,gCAC/B,CAAC;AAAA,IAAE5iD,WAAW85B;AAAAA,IAAOhX,UAAAA;AAAAA,IAAUu9B,kBAAAA;AAAAA,EAAAA,MAAuB;AACpD,UAAM5wC,IAAegT,EAAsBqX,CAAK,EAAE+oB,kBAAkBxC,CAAgB;AACpF,WAAK5wC,IACEqvC,GAAcuC,IAAqB;AAAA,MAAErhD,WAAW85B;AAAAA,MAAOrqB,cAAAA;AAAAA,MAAcuS,WAAWc;AAAAA,IAAAA,CAAU,IADvE;AAAA,EAE5B,CACF;AACF,GCAM27B,yBAAgBvqB,QAAAA,GAEhB4uB,KAAqBA,CAAC9iD,GAA0B80B,MACpD90B,EAAUS,OAAO+oB,YAAY/F,QAAQriB,QAAQ2iB,QAAQ4E,KAAM3G,CAAAA,MAAcA,EAAUqB,aAAayR,CAAU,GAEtGiuB,KAAgBA,CAAC/iD,GAA0BmsC,GAAiB7pB,MAA+B;AAC/F,QAAMktB,IAASxvC,EAAUS,OAAOksC,SAASR,CAAO,GAAGqD;AACnD,MAAIA,KAAU,OAAOA,KAAW,YAAY,mBAAmBA,GAAQ;AACrE,UAAMne,IAAYme,EAAOuT;AACzB,QAAI,OAAO1xB,KAAc,SAAU,QAAOA;AAAAA,EAC5C;AACA,SAAO/O;AACT,GAEa0gC,KAA+BA,CAC1ChjD,GACAwD,IAA2C,OACxC;AACH,QAAMkJ,IAAU+xC,GAAUzrC,IAAIhT,CAAS;AACvC,MAAI0M,GAAS;AACXA,IAAAA,EAAQb,mBAAmBrI,EAAMqI,kBACjCa,EAAQ09B,gCAAgC5mC,EAAM4mC;AAC9C;AAAA,EACF;AAEA,QAAM6Y,IAAe;AAAA,IACnBp3C,kBAAkBrI,EAAMqI;AAAAA,IACxBu+B,+BAA+B5mC,EAAM4mC;AAAAA,EAAAA;AAEvCqU,EAAAA,GAAUnqB,IAAIt0B,GAAWijD,CAAY,GACrCxgC,EAAsBziB,CAAS,EAAEkjD,8BAA8B,CAAC;AAAA,IAAEljD,WAAW85B;AAAAA,IAAOhX,UAAAA;AAAAA,IAAUof,QAAAA;AAAAA,EAAAA,MAC5F4c,GAAc3U,IAAmB;AAAA,IAC/BnqC,WAAW85B;AAAAA,IACXiJ,YAAYb;AAAAA,IACZ7jC,UAAUykB,EAASzkB;AAAAA,IACnBikB,QAAQygC,GAAcjpB,GAAOhX,EAASqpB,SAASrpB,EAASR,MAAM;AAAA,IAC9DzW,kBAAkBo3C,EAAap3C;AAAAA,IAC/Bu+B,+BAA+B0Y,GAAmBhpB,GAAOhX,EAASgS,UAAU,IACxEmuB,EAAa7Y,gCACb5rC;AAAAA,EAAAA,CACL,CACH;AACF,GCpDa2kD,KAAuCnjD,CAAAA,MAClDC,EACED,EAASojD,eAAejjD,OACxBC,EACF;AAJkD,SAAAA,GAAAG,GAAA;AAAA,SAGrCA,EAAKq5C;AAAO;ACOpB,MAAMyJ,KAA4BA,CAAArjD,GAAAkC,GAAArD,MAAA;AAAA,QAAAF,IAAAC,EAAA,EAAA;AAAA,MAAAI;AAAA,EAAAL,SAAAE,KAGvCG,IAAAH,MAAAL,SAAA,CAAA,IAAAK,GAA2CF,OAAAE,GAAAF,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAA3C,QAAAmG,IAAA9F,GAEAmkB,IAAeD,GAAcljB,GAAWkC,CAAM,GAC9C7D,IAAiBkjB,GAA6BvhB,CAAS,GACvDolB,IAAe3D,GAAyBzhB,CAAS;AAAE,MAAAR;AAAA,MAAAb,EAAA,CAAA,MAAAymB,KAAAzmB,EAAA,CAAA,MAAAuD,KAAAvD,EAAA,CAAA,MAAAqB,EAAAU,OAAA;AACnD,UAAA4iD,IAAkBC,GAA+BrhD,CAAM;AAErD1C,IAAAA,KAAC8jD,KAAaE,GAA8Bp+B,IAASplB,EAASU,MAAMwO,QAASkW,CAAkB,IAAnD5mB,QAAsD8kD,CAAS,GAAC3kD,OAAAymB,GAAAzmB,OAAAuD,GAAAvD,EAAA,CAAA,IAAAqB,EAAAU,OAAA/B,OAAAa;AAAAA,EAAA;AAAAA,IAAAA,IAAAb,EAAA,CAAA;AAD9G,QAAA8kD,IACEjkD;AAA6G,MAAAgM;AAAA,SAAA7M,SAAAwkB,KAAAxkB,EAAA,CAAA,MAAAymB,KAAAzmB,EAAA,CAAA,MAAAmG,KAAAnG,EAAA,CAAA,MAAA8kD,KAAA9kD,UAAAuD,KAAAvD,EAAA,EAAA,MAAAN,KAE9DmN,IAAAjL,CAAAA,MAC3C4iB,MAAW3kB,SAAkB2kB,MAAW,KACvCsgC,IACDljD,EAAKmjD,aAAcxhD,CAAM,IAAU,KAClC4C,EAAO6+C,iBAELpjD,EAAKE,OAAOgjB,QAASvhB,CAAM,EAAC6hB,QAAQ4E,KAAM3G,CAAAA,MAAA;AAC/C,UAAArgB,IAAepB,EAAKwjB,QAAS/B,EAASC,cAAe;AACrD,WAAKtgB,IACEO,MAAW,SACd4jB,GAAgCnkB,GAAQyjB,CAGvC,IAFDW,GAAiCpkB,GAAQtD,GAAU+mB,GAAQpD,GAAW;AAAA,MAAAN,UAC1DkE,GAAgCrlB,EAAKE,MAAO;AAAA,IAAA,CACvD,IALe;AAAA,EAKd,CACP,IAVmCF,EAAKE,OAAOgjB,QAASvhB,CAAM,EAAC6hB,QAAQ1jB,SAAU,IAFtD,IAa7B1B,OAAAwkB,GAAAxkB,OAAAymB,GAAAzmB,OAAAmG,GAAAnG,OAAA8kD,GAAA9kD,QAAAuD,GAAAvD,QAAAN,GAAAM,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA,GAfMsB,EAAkBD,EAASS,OAAON,OAAQqL,CAehD;AAAC,GChCSo4C,KAAwBllD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GACnC;AAAA,IAAAoB,WAAAA;AAAAA,IAAAkC,QAAAA;AAAAA,EAAAA,IAA8BxD;AAE9B,MAAI,CAACsB,EAASS,OAAOojD,4BAA6B3hD,CAAM;AAAC,WAAS;AAAK,MAAArD;AAAA,SAAAF,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAGrE7J,IAAA,gBAAAI,EAACsW,GAAA,EAAa,UAAA,YAAuB,aAAA,KAAW,QAAA,KAAM,GAAA,OAAS,IAAA,iBAA8B,eAAA,QAAc,QAAA,KAAG,GAAG5W,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAAjHE;AAAiH,GCG/GilD,KAAwB9jD,CAAAA,MAAA;AAAA,QAAArB,IAAAC,EAAA,EAAA;AAAA,MAAAC;AAAA,EAAAF,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACyC7J,IAAA;AAAA,IAAA8kD,gBAAkB;AAAA,EAAA,GAAMhlD,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAA7F,QAAAolD,IAAmBV,GAA0BrjD,GAAW,aAAanB,CAAwB,GAC7FmlD,IAAkBX,GAA0BrjD,GAAW,kBAAkB,GACzEikD,IAAuBp5B,GAA+B7qB,GAAW,WAAW;AAAE,MAAAhB;AAAA,EAAAL,SAAAqB,KAChBhB,IAAAA,MAC5DsxC,GAAwBtwC,GAAW,oBAAoB,WAAW,GAACrB,OAAAqB,GAAArB,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AADrE,QAAAghC,IAAoB1/B,EAAkBD,EAASS,OAAON,OAAQnB,CAE9D,GACAqJ,IAAapI,EAAkBD,EAASS,OAAON,OAAQC,EAAiD,GAGjGZ,IAAAukD,KAAAC,KAAAC,GAGMz4C,KAACnD;AAAI,MAAAmS;AAAA,EAAA7b,SAAAghC,KAAAhhC,EAAA,CAAA,MAAAqB,EAAA+O,SACGyL,IAAA23B,CAAAA,MAAA;AACjB,KAAI,CAACA,KAADxS,MAA2B3/B,EAAS+O,MAAMC,cAAe,aAAa,CAACmjC,CAAS;AAAA,EAAE,GACvFxzC,OAAAghC,GAAAhhC,EAAA,CAAA,IAAAqB,EAAA+O,OAAApQ,OAAA6b,KAAAA,IAAA7b,EAAA,CAAA;AAAA,MAAA8b;AAAA,SAAA9b,EAAA,CAAA,MAAAghC,KAAAhhC,EAAA,CAAA,MAAAqlD,KAAArlD,EAAA,CAAA,MAAAa,KAAAb,EAAA,CAAA,MAAA6M,KAAA7M,UAAA6b,KAPIC,IAAA;AAAA,IAAAvV,KACA1F;AAAAA,IAAyCwkD,WAAAA;AAAAA,IAAArkB,aAAAA;AAAAA,IAAAwS,WAGnC3mC;AAAAA,IAAK6mC,mBACG73B;AAAAA,EAAAA,GAGpB7b,OAAAghC,GAAAhhC,OAAAqlD,GAAArlD,OAAAa,GAAAb,OAAA6M,GAAA7M,QAAA6b,GAAA7b,QAAA8b,KAAAA,IAAA9b,EAAA,EAAA,GARM8b;AAQN,GAKUypC,KAAyBlkD,CAAAA,MAAA;AAAA,QAAArB,IAAAC,EAAA,CAAA,GACpCulD,IAAsBd,GAA0BrjD,GAAW,aAAa,GACxEokD,IAAuBN,GAAsB9jD,CAAS;AAAE,MAAAnB;AAAA,SAAAF,EAAA,CAAA,MAAAwlD,KAAAxlD,SAAAylD,KAEjDvlD,IAAA;AAAA,IAAAslD,eAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,EAAAA,GAGNzlD,OAAAwlD,GAAAxlD,OAAAylD,GAAAzlD,OAAAE,KAAAA,IAAAF,EAAA,CAAA,GAHME;AAGN;AA7B2B,SAAAuB,GAAAG,GAAA;AAAA,SAOsCA,EAAKE,OAAOgjB,QAAQxiB,UAAU4gC;AAAQ;ACZnG,MAAMwiB,KAA0B3lD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACrC;AAAA,IAAAoB,WAAAA;AAAAA,IAAAskD,oBAAAA;AAAAA,EAAAA,IAA0C5lD,GAC1CulD,IAAuBp5B,GAA+B7qB,GAAW,WAAW,GAC5E6rC,IAAiB6H,GAA+B1zC,GAAW,WAAW;AAAE,MAAAnB;AAAA,EAAAF,EAAA,CAAA,MAAAslD,KAAAtlD,SAAA2lD,KAAA3lD,EAAA,CAAA,MAAAktC,GAAAuI,cAAAz1C,SAAAqB,KAoBnEnB,IAAAgtC,GAAQuI,eAAiB,OAAUkQ,KAAAL,KAClC,gBAAA52C,EAACy0B,IAAA,EAC6B,+BAAA,aACpB,SAAA,QACJ,IAAApgC,EAAoBL,OACf,UAAA,YACG,YAAA,GACR,KAAA,MACK,UAAA,UACC,WAAA,UAEV,UAAA;AAAA,IAAA,gBAAApC,EAACuyB,IAAA,EAA+BxxB,WAAAA,GAAkB,QAAA,YAAA,CAAW;AAAA,IAC5DskD,IACC,gBAAArlD,EAACsW,GAAA,EAAS,MAAA,KAAM,GAAA,QAAY,MAAA,KAAa,UAAA,UACvC,UAAA,gBAAAtW,EAACgmB,MAA2BjlB,WAAAA,GAAkB,QAAA,oBAAyB,OAAA,yBAAA,CAAwB,GACjG,IAHD;AAAA,IAKD,gBAAAf,EAACq0C,IAAA,EAAqCtzC,WAAAA,GAAiB,OAAA,YAAA,CAAW;AAAA,IAClE,gBAAAf,EAAC2kD,IAAA,EAAiC5jD,WAAAA,GAAkB,QAAA,mBAAA,CAAkB;AAAA,EAAA,EAAA,CACxE,IAnBD,MAoBOrB,OAAAslD,GAAAtlD,OAAA2lD,GAAA3lD,EAAA,CAAA,IAAAktC,GAAAuI,YAAAz1C,OAAAqB,GAAArB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,EAAAL,SAAAqB,KAGJhB,sBAACimB,IAAA,EAA2BjlB,WAAAA,GAAkB,QAAA,aAAkB,OAAA,mBAAiB,GAAGrB,OAAAqB,GAAArB,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AAAA,EAAAb,EAAA,CAAA,MAAAK,KAAAL,SAAAqB,KAFxFR,sBAAC+V,GAAA,EAAS,MAAA,KAAS,MAAA,KAAS,MAAA,KAAa,UAAA,UACvC,4BAACm9B,IAAA,EAAoC1yC,WAAAA,GAAiB,OAAA,aACpDhB,aACF,GACF,GAAML,OAAAK,GAAAL,OAAAqB,GAAArB,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAA6M;AAAA,SAAA7M,EAAA,EAAA,MAAAE,KAAAF,UAAAa,KAAAb,EAAA,EAAA,MAAAqB,KA1CRwL,sBAACgL,IAAA,EACYxW,WAAAA,GACJ,QAAA,aACc,wBAAA,aACC,yBAAA,aACnB,IAAA,WACC,IAAA0B,EAAoBL,OACb,YAAA,SACN,MAAA,KACH,GAAA,QACG,MAAA,KACA,MAAA,KACI,UAAA,UACD,SAAA,QACM,eAAA,UACZ,GAAA,QAEDxC,UAAAA;AAAAA,IAAAA;AAAAA,IAqBDW;AAAAA,EAAAA,GAKF,GAAuBb,QAAAE,GAAAF,QAAAa,GAAAb,QAAAqB,GAAArB,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA,GA3CvB6M;AA2CuB,GC1CrB+4C,KAAuB;AAAA,EAAElT,WAAW;AAAA,EAAKC,OAAO;AAAA,EAAKC,OAAO;AAAI,GAChEiT,KAAsC,KACtCC,KAA6BC,GAAuB,MAAM,GAE1DjT,KAAoBA,CACxBC,GACAiT,GACAnjD,OACI;AAAA,EACJ6vC,WAAWsT,KAAiBjT,GAAYL,aAAa7vC,EAAS6vC;AAAAA,EAC9DC,OAAOI,GAAYJ,SAAS9vC,EAAS8vC;AAAAA,EACrCC,OAAOG,IAAaA,EAAWH,QAAQ/vC,EAAS+vC;AAClD,IAOMqT,KAAgBlmD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACpB;AAAA,IAAAoB,WAAAA;AAAAA,IAAAmkD,eAAAA;AAAAA,EAAAA,IAAqCzlD,GACrCmmD,IAA2B55B,GAA8BjrB,GAAW,MAAM,GAC1EikD,IAAuBp5B,GAA+B7qB,GAAW,MAAM;AAGvE,MAFiB0zC,GAA+B1zC,GAAW,MAAM,GAErDo0C,eAAiB,MAAU,CAAC+P,KAAD,CAAmBF;AAAe,WAAS;AAAK,MAAAplD;AAAA,EAAAF,SAAAqB,KAanFnB,IAAA,gBAAAI,EAACuyB,IAAA,EAA+BxxB,WAAAA,GAAkB,QAAA,QAAM,GAAGrB,OAAAqB,GAAArB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAGhD,QAAAK,IAAAmlD,KAAA,CAAkBU,IAAlB,MAAA;AAAgD,MAAArlD;AAAA,EAAAb,EAAA,CAAA,MAAAwlD,KAAAxlD,SAAAqB,KACxDR,IAAA2kD,sBAAiBl/B,IAAA,EAA2BjlB,WAAAA,GAAkB,QAAA,eAAoB,OAAA,eAAa,IAA/F,MAAyGrB,OAAAwlD,GAAAxlD,OAAAqB,GAAArB,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAA6M;AAAA,EAAA7M,EAAA,CAAA,MAAAK,KAAAL,SAAAa,KAD5GgM,IAAA,gBAAAvM,EAACsW,GAAA,EAAU,MAAAvW,GAAoD,GAAA,QAAY,MAAA,KAAa,UAAA,UACrFQ,UAAAA,EAAAA,CACH,GAAMb,OAAAK,GAAAL,OAAAa,GAAAb,OAAA6M,KAAAA,IAAA7M,EAAA,CAAA;AAAA,MAAA6b,GAAAC,GAAAC;AAAA,EAAA/b,SAAAqB,KACNwa,sBAACJ,IAAA,EACYpa,WAAAA,GACDykD,cACG38B,aAAAA,IAAyB,GAExCrN,IAAA,gBAAAxb,EAACq0C,IAAA,EAAqCtzC,WAAAA,GAAiB,OAAA,QAAM,GAC7D0a,IAAA,gBAAAzb,EAAC2kD,IAAA,EAAiC5jD,WAAAA,GAAkB,QAAA,eAAa,GAAGrB,OAAAqB,GAAArB,OAAA6b,GAAA7b,QAAA8b,GAAA9b,QAAA+b,MAAAF,IAAA7b,EAAA,CAAA,GAAA8b,IAAA9b,EAAA,EAAA,GAAA+b,IAAA/b,EAAA,EAAA;AAAA,MAAAic;AAAA,SAAAjc,EAAA,EAAA,MAAAE,KAAAF,EAAA,EAAA,MAAA6M,KAAA7M,EAAA,EAAA,MAAA6b,KAAA7b,EAAA,EAAA,MAAA8b,KAAA9b,UAAA+b,KAtBtEE,sBAACknB,IAAA,EAC6B,+BAAA,QACpB,SAAA,QACJ,IAAApgC,EAAoBZ,MACf,UAAA,YACG,YAAA,GACR,KAAA,MACK,UAAA,UACC,WAAA,UAEVjC,UAAAA;AAAAA,IAAAA;AAAAA,IAGA2M;AAAAA,IAGAgP;AAAAA,IAKAC;AAAAA,IACAC;AAAAA,EAAAA,GACF,GAAS/b,QAAAE,GAAAF,QAAA6M,GAAA7M,QAAA6b,GAAA7b,QAAA8b,GAAA9b,QAAA+b,GAAA/b,QAAAic,KAAAA,IAAAjc,EAAA,EAAA,GAvBTic;AAuBS,GAIAkqC,KAAgBpmD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC3B;AAAA,IAAAoB,WAAAA;AAAAA,EAAAA,IAAsBtB,GACtBqmD,IAAqBrR,GAA+B1zC,GAAW,WAAW,GAC1E2nB,IAAeu8B,GAAuBlkD,CAAS,GAC/C;AAAA,IAAAmkD,eAAAA;AAAAA,IAAAC,gBAAAA;AAAAA,EAAAA,IAA0Cz8B,GAC1Cq9B,IAA+B/kD,EAC7BD,EAASS,OAAON,OAChBC,EACF;AAAE,MAAAvB;AAAA,EAAAF,EAAA,CAAA,MAAAomD,GAAAtV,QAAA9wC,EAAA,CAAA,MAAAqB,EAAAS,UAEA5B,IAAAkmD,GAAYtV,QAAUzvC,EAASS,OAAOwxC,cAAe,WAAW,GAACtzC,EAAA,CAAA,IAAAomD,GAAAtV,MAAA9wC,EAAA,CAAA,IAAAqB,EAAAS,QAAA9B,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,EAAAL,EAAA,CAAA,MAAAqmD,KAAArmD,SAAAE,KADxCG,IAAAyyC,GACzB5yC,GACAmmD,GACAT,EACF,GAAC5lD,OAAAqmD,GAAArmD,OAAAE,GAAAF,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAJD,QAAAsmD,IAA2BjmD;AAIzB,MAAAQ;AAAA,EAAAb,SAAAqB,KAeER,sBAACylB,IAAA,EAA2BjlB,WAAAA,GAAkB,QAAA,QAAa,OAAA,QAAM,GAAGrB,OAAAqB,GAAArB,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAA6M;AAAA,EAAA7M,EAAA,CAAA,MAAAa,KAAAb,SAAAqB,KAZtEwL,IAAA,gBAAAvM,EAACuX,MACYxW,WAAAA,GACJ,QAAA,QACe,yBAAA,QAClB,IAAA0B,EAAoBZ,MACnB,MAAA,KACH,GAAA,QACG,MAAA,KACA,MAAA,KACH,GAAA,QACO,UAAA,UAETtB,UAAAA,EAAAA,CACF,GAAuBb,OAAAa,GAAAb,OAAAqB,GAAArB,QAAA6M,KAAAA,IAAA7M,EAAA,EAAA;AAdzB,QAAAumD,IACE15C;AAcA,MAAAgP;AAAA,EAAA7b,EAAA,EAAA,MAAAumD,KAAAvmD,UAAAqB,KAEAwa,sBAACk4B,IAAA,EAAoC1yC,WAAAA,GAAiB,OAAA,QACnDklD,UAAAA,GACH,GAA2BvmD,QAAAumD,GAAAvmD,QAAAqB,GAAArB,QAAA6b,KAAAA,IAAA7b,EAAA,EAAA;AAH7B,QAAAwmD,IACE3qC;AAGA,MAAAC;AAAA,EAAA9b,EAAA,EAAA,MAAAwlD,KAAAxlD,UAAAqB,KAaEya,IAAA,gBAAAxb,EAAC2lD,IAAA,EAAyB5kD,WAAAA,GAA0BmkD,eAAAA,EAAAA,CAAa,GAAIxlD,QAAAwlD,GAAAxlD,QAAAqB,GAAArB,QAAA8b,KAAAA,IAAA9b,EAAA,EAAA;AAAA,MAAA+b;AAAA,EAAA/b,UAAAwmD,KACrEzqC,IAAA,gBAAAzb,EAACsW,GAAA,EAAY,SAAA,KAAM,GAAA,QAAY,MAAA,KAAS,MAAA,KAAa,UAAA,UAClD4vC,UAAAA,GACH,GAAMxmD,QAAAwmD,GAAAxmD,QAAA+b,KAAAA,IAAA/b,EAAA,EAAA;AAAA,MAAAic;AAAA,EAAAjc,EAAA,EAAA,MAAA8b,KAAA9b,UAAA+b,KAbRE,sBAACwqC,IAAA,EACsB,wBAAA,QACJ,kBAAA,uBACf,GAAA,QACG,MAAA,KACA,MAAA,KACH,GAAA,QACE,IAAA1jD,EAAoBZ,MACb,YAAA,SAEX2Z,UAAAA;AAAAA,IAAAA;AAAAA,IACAC;AAAAA,EAAAA,GAGF,GAAO/b,QAAA8b,GAAA9b,QAAA+b,GAAA/b,QAAAic,KAAAA,IAAAjc,EAAA,EAAA;AAfT,QAAA0mD,IACEzqC;AAiBF,MAAI,CAACwpC,EAAcl/C,KAAI;AAAA,QAAA4V;AAAA,WAAAnc,UAAA0mD,KAEnBvqC,IAAA,gBAAA7b,EAACmmD,IAAA,EAAQ,IAAA,QAAS,GAAA,QAAY,MAAA,KAAS,MAAA,KAAM,GAAA,QAC1CC,UAAAA,GACH,GAAO1mD,QAAA0mD,GAAA1mD,QAAAmc,KAAAA,IAAAnc,EAAA,EAAA,GAFPmc;AAAAA,EAEO;AACP,MAAAA;AAAA,EAAAnc,UAAAylD,EAAAJ,aAAArlD,UAAAqB,KASgB8a,IAAA,gBAAA7b,EAAColD,IAAA,EAAmCrkD,WAAAA,GAA+B,oBAAAokD,EAAcJ,WAAU,GAAIrlD,EAAA,EAAA,IAAAylD,EAAAJ,WAAArlD,QAAAqB,GAAArB,QAAAmc,KAAAA,IAAAnc,EAAA,EAAA;AAAA,MAAAskB;AAAA,EAAAtkB,EAAA,EAAA,MAAAqB,EAAAS,UAQjGwiB,IAAArE,CAAAA,MAAY5e,EAASS,OAAOgyC,cAAe,aAAa7zB,CAAM,GAACjgB,EAAA,EAAA,IAAAqB,EAAAS,QAAA9B,QAAAskB,KAAAA,IAAAtkB,EAAA,EAAA;AAAA,MAAA6nB;AAAA,SAAA7nB,UAAA0mD,KAAA1mD,EAAA,EAAA,MAAAylD,EAAAjS,aAAAxzC,EAAA,EAAA,MAAAylD,EAAAzkB,eAAAhhC,EAAA,EAAA,MAAAylD,EAAA/R,qBAAA1zC,UAAAsmD,EAAA5T,aAAA1yC,UAAAsmD,EAAA1T,SAAA5yC,UAAAsmD,EAAA3T,SAAA3yC,UAAAmc,KAAAnc,EAAA,EAAA,MAAAskB,KAd/EuD,sBAACwmB,IAAA,EACI,IAAA,QACE,MAAA,KACA,MAAA,KACS,eAAA,UACAqY,cAAAA,GACE,gBAAAvqC,GACL,WAAAspC,EAAcjS,WACZ,aAAAiS,EAAczkB,aACZ,eAAAslB,EAAkB5T,WACtB,WAAA4T,EAAkB3T,OAClB,WAAA2T,EAAkB1T,OACXiT,kBAAAA,IACN,aAAA,0BACE,cAAAvhC,GACK,mBAAAmhC,EAAc/R,mBAAkB,GACnD1zC,QAAA0mD,GAAA1mD,EAAA,EAAA,IAAAylD,EAAAjS,WAAAxzC,EAAA,EAAA,IAAAylD,EAAAzkB,aAAAhhC,EAAA,EAAA,IAAAylD,EAAA/R,mBAAA1zC,EAAA,EAAA,IAAAsmD,EAAA5T,WAAA1yC,EAAA,EAAA,IAAAsmD,EAAA1T,OAAA5yC,EAAA,EAAA,IAAAsmD,EAAA3T,OAAA3yC,QAAAmc,GAAAnc,QAAAskB,GAAAtkB,QAAA6nB,KAAAA,IAAA7nB,EAAA,EAAA,GAhBF6nB;AAgBE;AA/EuB,SAAApmB,GAAAG,GAAA;AAAA,SAOdA,EAAKE,OAAOgjB,QAAQxiB,UAAUwuC;AAAK;ACrE3C,MAAM6V,KAAmB5mD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC9B;AAAA,IAAAoB,WAAAA;AAAAA,IAAAulD,gBAAAA;AAAAA,EAAAA,IAAsC7mD;AAAM,MAAAG;AAAA,EAAAF,SAAAqB,KAoBpCnB,sBAAC0W,GAAA,EAAS,MAAA,KAAS,MAAA,KAAS,MAAA,KAAa,UAAA,UACvC,4BAAC0P,IAAA,EAA2BjlB,WAAAA,GAAkB,QAAA,WAAgB,OAAA,WAAS,GACzE,GAAMrB,OAAAqB,GAAArB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,EAAAL,EAAA,CAAA,MAAAE,KAAAF,SAAAqB,KAlBVhB,sBAACuW,GAAA,EAAM,GAAA,QAAY,MAAA,KAAS,MAAA,KAAM,GAAA,QAChC,4BAACiB,IAAA,EACYxW,WAAAA,GACJ,QAAA,WACe,yBAAA,WACnB,IAAA,SACC,IAAA0B,EAAoBN,SACb,YAAA,SACH,SAAA,QACM,eAAA,UACZ,GAAA,QACG,MAAA,KACA,MAAA,KACI,UAAA,UACP,GAAA,QAEFvC,aAGF,GACF,GAAMF,OAAAE,GAAAF,OAAAqB,GAAArB,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AAAA,SAAAb,EAAA,CAAA,MAAA4mD,KAAA5mD,SAAAK,KArBRQ,IAAA,gBAAAP,EAACumD,MAA6BD,SAAAA,GAA+B,eAAA,IAAO,sBAAA,IAClEvmD,UAAAA,EAAAA,CAqBF,GAAsBL,OAAA4mD,GAAA5mD,OAAAK,GAAAL,OAAAa,KAAAA,IAAAb,EAAA,CAAA,GAtBtBa;AAsBsB,GAQbimD,KAA8B,QAOrCC,KAA0BhnD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC9B;AAAA,IAAAmoC,MAAAA;AAAAA,IAAA/mC,WAAAA;AAAAA,EAAAA,IAA4BtB,GAC5BiC,IAAqB8gB,GAAyBzhB,CAAS;AAAE,MAAAnB;AAAA,MAAAF,EAAA,CAAA,MAAAgC,KAAAhC,SAAAooC,KAAApoC,EAAA,CAAA,MAAAqB,GAAA;AACzD,UAAAL,IAAcgB,MAAiBX,EAASU,MAAM4oB,oBAAqBtpB,EAAS2lD,UAAUC,iBAAkB7e,CAAS,IAAnG,CAAA;AAAqG,QAAA/nC;AAAA,IAAAL,SAAAqB,KAElGhB,IAAAZ,CAAAA,MAAA;AACf,YAAAkJ,IAAatH,EAASuiB,MAAMC,QAASpkB,EAAIkkB,MAAO;AAChD,aAAKhb,IAEH,gBAAArI,EAACsW,GAAA,EAA0B,SAAA,QAAkB,YAAA,UAAc,MAAA,KAAM,GAAA,QAC/D,UAAA,gBAAAtW,EAACmjB,IAAA,EACYpiB,WAAAA,GACJ,QAAA,UACI,WAAA;AAAA,QAAAqjB,UACCjlB,EAAI4E;AAAAA,QAAGif,gBACD3a,EAAItE;AAAAA,QAAGsf,QACfhb,EAAItE;AAAAA,QAAGzD,OACR+H,EAAI/H;AAAAA,QAAMqP,UACP;AAAA,MAAA,GACX,EAAA,GAVKxQ,EAAI4E,EAYd,IAdgB;AAAA,IAcV,GAETrE,OAAAqB,GAAArB,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAlBME,IAAAc,EAAKC,IAAKZ,CAkBhB,GAACL,OAAAgC,GAAAhC,OAAAooC,GAAApoC,OAAAqB,GAAArB,OAAAE;AAAAA,EAAA;AAAAA,IAAAA,IAAAF,EAAA,CAAA;AAAA,SAlBKE;AAkBL,GAGSgnD,KAAuBnnD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAClC;AAAA,IAAAoB,WAAAA;AAAAA,EAAAA,IAAsBtB;AAAM,MAAAG;AAAA,EAAAF,SAAAqB,KAcxBnB,sBAAComB,IAAA,EAA2BjlB,WAAAA,GAAkB,QAAA,YAAiB,OAAA,gBAAc,GAAGrB,OAAAqB,GAAArB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,SAAAL,EAAA,CAAA,MAAAE,KAAAF,SAAAqB,KAXlFhB,sBAACwX,IAAA,EACYxW,WAAAA,GACJ,QAAA,YACe,yBAAA,YACnB,IAAA,OACS,eACV,GAAA,QACG,MAAA,KACI,UAAA,UACP,GAAA,UAEFnB,UAAAA,EAAAA,CACF,GAAuBF,OAAAE,GAAAF,OAAAqB,GAAArB,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAZvBK;AAYuB,GAId8mD,KAAqBpnD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAChC;AAAA,IAAAoB,WAAAA;AAAAA,EAAAA,IAAsBtB;AACtBuB,EAAAA,EAAkBD,EAAS2lD,UAAUxlD,OAAQC,EAAsB;AACnE,QAAA+iB,IAAeD,GAAcljB,GAAW,QAAQ;AAAE,MAAAnB;AAAA,EAAAF,EAAA,CAAA,MAAAwkB,KAAAxkB,SAAAqB,KAc7CnB,IAAAskB,sBACEC,IAAA,EAA0BpjB,WAAAA,GAAkB,QAAA,UAAiBmjB,QAAAA,GAAM,IAEpE,gBAAA9V,EAACkI,GAAA,EAAY,SAAA,QAAkB,YAAA,WAAyB,gBAAA,iBAAkB,GAAA,QAAY,MAAA,KAAM,GAAA,QAC1F,UAAA;AAAA,IAAA,gBAAAtW,EAACsW,GAAA,EAAY,SAAA,QAAkB,YAAA,WAAe,MAAA,KAAM,GAAA,QAClD,UAAA,gBAAAtW,EAACymD,IAAA,EAAmC1lD,WAAAA,GAAgB,MAAA,WAAS,GAC/D;AAAA,IACA,gBAAAf,EAACsW,GAAA,EAAY,SAAA,QAAkB,YAAA,WAAe,MAAA,KAAM,GAAA,QAClD,UAAA,gBAAAtW,EAACymD,IAAA,EAAmC1lD,WAAAA,GAAgB,MAAA,YAAU,EAAA,CAChE;AAAA,EAAA,GACF,GACDrB,OAAAwkB,GAAAxkB,OAAAqB,GAAArB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,SAAAL,EAAA,CAAA,MAAAE,KAAAF,SAAAqB,KAtBHhB,sBAACwX,IAAA,EACYxW,WAAAA,GACJ,QAAA,UACe,yBAAA,UACnB,IAAA,UACS,YAAA,GACTylD,OACE,MAAA,KACA,MAAA,KACI,UAAA,UAER5mD,UAAAA,EAAAA,CAYH,GAAuBF,OAAAE,GAAAF,OAAAqB,GAAArB,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAvBvBK;AAuBuB;AA7BO,SAAAoB,GAAAG,GAAA;AAAA,SAEwBA,EAAKZ;AAAM;AC9FrE,MAAMomD,KAAiC,KACjCC,KAA6B,KAStBC,KAAiCvnD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC5C;AAAA,IAAAoB,WAAAA;AAAAA,IAAAkmD,cAAAA;AAAAA,IAAAC,SAAAA;AAAAA,IAAAC,eAAAA;AAAAA,EAAAA,IAA4D1nD;AAE5D,MAAI,CAACwnD,KAAD,CAAkBC,KAAlB,CAA8BC;AAAa,WAAS;AAAK,MAAAvnD;AAAA,EAAAF,SAAAqB,KAG3DnB,IAAA,gBAAAI,EAACgmB,MAA2BjlB,WAAAA,GAAkB,QAAA,QAAa,OAAA,cAAa,aAAA,GAAA,CAAW,GAAGrB,OAAAqB,GAAArB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,SAAAL,EAAA,CAAA,MAAAynD,KAAAznD,SAAAE,KADjFG,IAAAqnD,GACLxnD,GACAunD,CACF,GAACznD,OAAAynD,GAAAznD,OAAAE,GAAAF,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAHMK;AAGN,GAQUsnD,KAAiC5nD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC5C;AAAA,IAAAoB,WAAAA;AAAAA,IAAAumD,eAAAA;AAAAA,EAAAA,IAAqC7nD;AAAM,MAAAG;AAAA,EAAAF,SAAAqB,KAIvCnB,IAAA,gBAAAI,EAACuyB,IAAA,EAA+BxxB,WAAAA,GAAkB,QAAA,QAAM,GAAGrB,OAAAqB,GAAArB,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,EAAAL,EAAA,CAAA,MAAA4nD,KAAA5nD,SAAAqB,KAC1DhB,IAAAunD,sBACEhxC,GAAA,EAAS,MAAA,KAAM,GAAA,QAAY,MAAA,KAAa,UAAA,UACvC,UAAA,gBAAAtW,EAACgmB,IAAA,EAA2BjlB,WAAAA,GAAkB,QAAA,eAAoB,OAAA,qBAAoB,aAAA,OACxF,IAHD,MAIOrB,OAAA4nD,GAAA5nD,OAAAqB,GAAArB,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAAA,MAAAa;AAAA,SAAAb,EAAA,CAAA,MAAAE,KAAAF,SAAAK,KANVQ,sBAAC+V,GAAA,EAAe,YAAA,UAAiB,SAAA,QAAY,MAAA,KAAM,GAAA,QAAY,MAAA,KAAa,UAAA,UAAW,GAAA,QACrF1W,UAAAA;AAAAA,IAAAA;AAAAA,IACCG;AAAAA,EAAAA,GAKH,GAAML,OAAAE,GAAAF,OAAAK,GAAAL,OAAAa,KAAAA,IAAAb,EAAA,CAAA,GAPNa;AAOM,GAcGgnD,KAAmC9nD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GAC9C;AAAA,IAAAoB,WAAAA;AAAAA,IAAAymD,UAAAA;AAAAA,IAAAC,cAAAA;AAAAA,IAAAC,kBAAAA;AAAAA,IAAAvkB,QAAAA;AAAAA,IAAAwkB,sBAAAA;AAAAA,IAAAC,YAAAA;AAAAA,EAAAA,IAA0GnoD,GAC1GimD,IAAsB1kD,EAAkBD,EAASS,OAAON,OAAQC,EAAyC,GACzG2kD,IAAqBrR,GAA+B1zC,GAAW,MAAM;AAAE,MAAAnB;AAAA,EAAAF,EAAA,CAAA,MAAAomD,GAAAtV,QAAA9wC,EAAA,CAAA,MAAAqB,EAAAS,UAC1D5B,IAAAkmD,GAAYtV,QAAUzvC,EAASS,OAAOwxC,cAAe,MAAM,GAACtzC,EAAA,CAAA,IAAAomD,GAAAtV,MAAA9wC,EAAA,CAAA,IAAAqB,EAAAS,QAAA9B,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAzE,QAAA8wC,IAAa5wC;AAA6D,MAAAG;AAAA,EAAAL,EAAA,CAAA,MAAAomD,GAAAplB,eAAAhhC,EAAA,CAAA,MAAAqB,EAAAS,UACtDzB,IAAA+lD,GAAYplB,eAAiB3/B,EAASS,OAAO8vC,qBAAsB,MAAM,GAAC5xC,EAAA,CAAA,IAAAomD,GAAAplB,aAAAhhC,EAAA,CAAA,IAAAqB,EAAAS,QAAA9B,OAAAK,KAAAA,IAAAL,EAAA,CAAA;AAA9F,QAAAghC,IAAoB3gC;AAA2E,MAAAQ;AAAA,EAAAb,EAAA,CAAA,MAAAyjC,KAAAzjC,SAAAioD,KAAAjoD,EAAA,CAAA,MAAAqB,KAWzFR,sBAACy0C,IAAA,EAAsCj0C,WAAAA,GAA2B4mD,mBAA8BxkB,QAAAA,GAAM,GAAIzjC,OAAAyjC,GAAAzjC,OAAAioD,GAAAjoD,OAAAqB,GAAArB,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAEjG,QAAA6M,KAACi7C,GACGjsC,IAAAmqC,KAAiBlV,GAAI4B,aAArB0U,IACJtrC,IAAAg1B,GAAI6B,SAAJ0U,IACAtrC,IAAA+0B,GAAI8B;AAAO,MAAA32B;AAAA,EAAAjc,EAAA,EAAA,MAAAqB,EAAAS,UAERma,IAAA+D,CAAAA,MAAW3e,EAASS,OAAOgyC,cAAe,QAAQ9zB,CAAK,GAAChgB,EAAA,EAAA,IAAAqB,EAAAS,QAAA9B,QAAAic,KAAAA,IAAAjc,EAAA,EAAA;AAAA,MAAAmc;AAAA,EAAAnc,EAAA,EAAA,MAAA8nD,KAAA9nD,UAAAkoD,KAGnD/rC,IAAAq3B,CAAAA,MAAA;AACjB,IAAIsU,KAAAtU,KAAuB0U,EAAAA;AAAAA,EAAa,GACzCloD,QAAA8nD,GAAA9nD,QAAAkoD,GAAAloD,QAAAmc,KAAAA,IAAAnc,EAAA,EAAA;AAAA,MAAAskB;AAAA,SAAAtkB,EAAA,EAAA,MAAAghC,KAAAhhC,UAAAgoD,KAAAhoD,EAAA,EAAA,MAAA+nD,KAAA/nD,UAAAa,KAAAb,EAAA,EAAA,MAAA6M,KAAA7M,UAAA6b,KAAA7b,EAAA,EAAA,MAAA8b,KAAA9b,EAAA,EAAA,MAAA+b,KAAA/b,EAAA,EAAA,MAAAic,KAAAjc,UAAAmc,KApBHmI,sBAAC+pB,IAAA,EACG,GAAA,QACG,MAAA,KACA,MAAA,KACH,GAAA,QACY,eAAA,SACA0Z,cAAAA,GAEZ,gBAAAlnD,GAES,WAAAgM,GACI,eAAAgP,GACJ,WAAAC,GACA,WAAAC,GACEilB,aAAAA,GACC,cAAA/kB,GACI+rC,kBAAAA,GACN,aAAA,qBACO,mBAAA7rC,GAElB,GACDnc,QAAAghC,GAAAhhC,QAAAgoD,GAAAhoD,QAAA+nD,GAAA/nD,QAAAa,GAAAb,QAAA6M,GAAA7M,QAAA6b,GAAA7b,QAAA8b,GAAA9b,QAAA+b,GAAA/b,QAAAic,GAAAjc,QAAAmc,GAAAnc,QAAAskB,KAAAA,IAAAtkB,EAAA,EAAA,GArBFskB;AAqBE;AA7B0C,SAAA7iB,GAAAG,GAAA;AAAA,SAE6BA,EAAKE,OAAOgjB,QAAQviB,KAAKuuC;AAAK;AC7C3G,MAAMqX,KAAmC,CACvC,WACA,UACA,SACA,UACA,YACA,4BACA,mBACA,qBACA,qBACA,mBACA,kBACA,mBACA,iCAAiC,EACjCr9C,KAAK,GAAG,GAEJs9C,KAAaA,CAAC5vC,MAClB,OAAQA,GAAyCmb,WAAY,YAElD00B,KAAoCA,CAAC7vC,GAA4BD,MACxEC,MAAWD,IAAsB,KAChC6vC,GAAW5vC,CAAM,IACf,CAACA,EAAOmb,QAAQw0B,EAAgC,IADvB,IAI5BG,KAA8BA,CAACpwC,MAAmC;AACtEA,EAAAA,GAASD,MAAM;AAAA,IAAEK,eAAe;AAAA,EAAA,CAAM;AACxC,GAEMiwC,KAAyBxoD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GAC7B;AAAA,IAAA8X,UAAAA;AAAAA,EAAAA,IAAqBhY,GACrB2E,IAAYgR,GAA8B,IAAI;AAAE,MAAAxV,GAAAG;AAAA,EAAAL,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAEhC7J,IAAAA,MAAA;AACdooD,IAAAA,GAA4B5jD,EAAGqJ,OAAQ;AAAA,EAAC,GACvC1N,IAAA,CAAA,GAAEL,OAAAE,GAAAF,OAAAK,MAAAH,IAAAF,EAAA,CAAA,GAAAK,IAAAL,EAAA,CAAA,IAFLwoD,GAAgBtoD,GAEbG,CAAE;AAAC,MAAAQ;AAAA,SAAAb,SAAA+X,KAGJlX,sBAAC+mB,IAAA,EACMljB,KAAAA,GACH,GAAA,QACG,MAAA,KACA,MAAA,KACH,GAAA,QACQ,UAAA,IACF,SAAA,QACO,eAAAjD,iBAOjB,GAAOzB,OAAA+X,GAAA/X,OAAAa,KAAAA,IAAAb,EAAA,CAAA,GAfPa;AAeO,GAIE4nD,KAA6B1oD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,EAAA,GACxC;AAAA,IAAAoB,WAAAA;AAAAA,IAAAqnD,uBAAAA;AAAAA,IAAAC,cAAAA;AAAAA,IAAAC,YAAAA;AAAAA,IAAAZ,kBAAAA;AAAAA,IAAAC,sBAAAA;AAAAA,EAAAA,IAA+GloD;AAAM,MAAAG;AAAA,EAAAF,EAAA,CAAA,MAAAqB,EAAAiP,aAWnGpQ,IAAAA,MAAMmB,EAASiP,UAAUE,QAAS,QAAQ,GAACxQ,EAAA,CAAA,IAAAqB,EAAAiP,WAAAtQ,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAAA,MAAAK;AAAA,SAAAL,EAAA,CAAA,MAAA2oD,KAAA3oD,EAAA,CAAA,MAAAgoD,KAAAhoD,EAAA,CAAA,MAAAioD,KAAAjoD,SAAA0oD,KAAA1oD,EAAA,CAAA,MAAA4oD,KAAA5oD,EAAA,CAAA,MAAAE,KAAAF,EAAA,CAAA,MAAAqB,KAR3DhB,IAAA,gBAAAC,EAACioD,IAAA,EACC,UAAA,gBAAAjoD,EAACunD,IAAA,EACYxmD,WAAAA,GACDqnD,aACIC,cAAAA,GACIX,kBAAAA,GACVY,WACcX,sBAAAA,GACV,YAAA/nD,GAA2C,GAE3D,GAAyBF,OAAA2oD,GAAA3oD,OAAAgoD,GAAAhoD,OAAAioD,GAAAjoD,OAAA0oD,GAAA1oD,OAAA4oD,GAAA5oD,OAAAE,GAAAF,OAAAqB,GAAArB,OAAAK,KAAAA,IAAAL,EAAA,CAAA,GAVzBK;AAUyB;AA1CE,SAAAoB,GAAAkN,GAAA;AAkBvB,EAAI05C,GAAkC15C,EAAK6J,QAAS7J,EAAK4J,aAAc,KACrE+vC,GAA4B35C,EAAK4J,aAAc;AAChD;ACrBT,MAAMswC,KAA0B,KAC1BC,KAAsB,KACtBC,KAAsB,KAEtBC,KAAqBA,CAAC3nD,GAA0B2kD,MAAsC;AAC1F,QAAMjT,IAAa1xC,EAAUS,OAAOwxC,cAAc,SAAS;AAE3D,SAAO;AAAA,IACLZ,WAAWsT,KAAiBjT,GAAYL,aAAamW;AAAAA,IACrDlW,OAAOI,GAAYJ,SAASmW;AAAAA,IAC5BlW,OAAOG,GAAYH;AAAAA,EAAAA;AAEvB,GAEMqW,KAAsBA,MAAM;AAChC,MAAI,OAAO7wC,WAAa,IAAa,QAAO;AAC5C,QAAM8wC,IAAO9wC,SAAS+nC,cAAc,KAAK;AACzC+I,SAAAA,EAAKvc,MAAM5sB,UAAU,YACrBmpC,EAAKC,QAAQC,yBAAyB,IAC/BF;AACT,GAEaG,KAA6BA,CAACxkD,MAMpCA,EAAM2iD,UACP3iD,EAAMqE,SAAS,aAAmBrE,EAAMykD,eACrCzkD,EAAM0kD,eAFc,MAKvBC,KAA0BnoD,CAAAA,MAAA;AAAA,QAAArB,IAAAC,EAAA,EAAA,GAC9BwpD,IAAqBllC,GAAcljB,GAAW,QAAQ,GACtDqoD,IAAuBpoD,EAAkBD,EAAS2lD,UAAUxlD,OAAQC,EAAsB;AAC1FH,EAAAA,EAAkBD,EAASa,QAAQV,OAAQ6J,EAAuB;AAClE,QAAArJ,IAAqBV,EAAkBD,EAASU,MAAMP,OAAQka,EAA6B,GAE1Exb,IAAAwkD,GAA0BrjD,GAAW,KAAK,GAClChB,IAAAqkD,GAA0BrjD,GAAW,UAAU,GACnDR,IAAA6jD,GAA0BrjD,GAAW,SAAS,GACtCwL,IAAA63C,GAA0BrjD,GAAW,kBAAkB;AAAC,MAAAwa;AAAA,EAAA7b,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACZ8R,IAAA;AAAA,IAAAmpC,gBAAkB;AAAA,EAAA,GAAMhlD,OAAA6b,KAAAA,IAAA7b,EAAA,CAAA;AAA1E,QAAA8b,IAAA4oC,GAA0BrjD,GAAW,aAAawa,CAAwB,GACzEE,IAAA2oC,GAA0BrjD,GAAW,aAAa;AAAC,MAAA4a;AAAA,EAAAjc,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACZkS,IAAA;AAAA,IAAA+oC,gBAAkB;AAAA,EAAA,GAAMhlD,OAAAic,KAAAA,IAAAjc,EAAA,CAAA;AAArE,QAAAmc,IAAAuoC,GAA0BrjD,GAAW,QAAQ4a,CAAwB;AAAC,MAAAqI;AAAA,EAAAtkB,SAAAgC,KAAAhC,EAAA,CAAA,MAAA0pD,KAAA1pD,EAAA,CAAA,MAAAypD,KAAAzpD,EAAA,CAAA,MAAAqB,EAAAU,SAAA/B,EAAA,CAAA,MAAAqB,EAAA2lD,aAEpF1iC,IAAAmlC,MAAiB5pD,SACb4pD,MAAiB,KACjBznD,MAAiBX,EAASU,MAAM4oB,gBAAAA,KAChC/jB,OAAMwuB,KAAMs0B,CAAc,EAAChoD,SAAU,KACrCL,EAAS2lD,UAAUC,mBAAmBvlD,SAAU,GAAC1B,OAAAgC,GAAAhC,OAAA0pD,GAAA1pD,OAAAypD,GAAAzpD,EAAA,CAAA,IAAAqB,EAAAU,OAAA/B,EAAA,CAAA,IAAAqB,EAAA2lD,WAAAhnD,OAAAskB,KAAAA,IAAAtkB,EAAA,CAAA;AAAA,MAAA6nB;AAAA,SAAA7nB,EAAA,CAAA,MAAAE,KAAAF,EAAA,CAAA,MAAAK,KAAAL,EAAA,EAAA,MAAAa,KAAAb,EAAA,EAAA,MAAA6M,KAAA7M,EAAA,EAAA,MAAA8b,KAAA9b,EAAA,EAAA,MAAA+b,KAAA/b,EAAA,EAAA,MAAAmc,KAAAnc,UAAAskB,KAblDuD,IAAA;AAAA,IAAA8hC,eACUzpD;AAAAA,IAA2C0pD,uBACnCvpD;AAAAA,IAAgDwpD,mBACpDhpD;AAAAA,IAA+CipD,2BACvCj9C;AAAAA,IAAwDk9C,qBAC9DjuC;AAAAA,IAA2EkuC,sBAC1EjuC;AAAAA,IAAmDkuC,gBACzD9tC;AAAAA,IAAsE+tC,kBAEpF5lC;AAAAA,EAAAA,GAKHtkB,OAAAE,GAAAF,OAAAK,GAAAL,QAAAa,GAAAb,QAAA6M,GAAA7M,QAAA8b,GAAA9b,QAAA+b,GAAA/b,QAAAmc,GAAAnc,QAAAskB,GAAAtkB,QAAA6nB,KAAAA,IAAA7nB,EAAA,EAAA,GAdM6nB;AAcN,GAaGsiC,KAAgCA,CAACtlD,MAAwC;AAC7E,QAAM45C,IAAwC,CAAA;AAsB9C,MApBI55C,EAAMulD,eAAe,CAACvlD,EAAMwlD,eAC9B5L,EAAS79B,KAAK;AAAA,IACZvc,IAAI;AAAA,IACJ4B,OAAO;AAAA,IACPzF,MAAM;AAAA,IACNkJ,MAAM;AAAA,IACNo0C,UAAUA,MAAMj5C,EAAMylD,aAAa,WAAW,EAAI;AAAA,EAAA,CACnD,GAGCzlD,EAAM0lD,sBACR9L,EAAS79B,KAAK;AAAA,IACZvc,IAAI;AAAA,IACJ4B,OAAOpB,EAAM2lD,qBAAqB,yBAAyB;AAAA,IAC3DhqD,MAAM;AAAA,IACNkJ,MAAM7E,EAAM2lD;AAAAA,IACZ1M,UAAUA,MAAMj5C,EAAMylD,aAAa,aAAa,CAACzlD,EAAM2lD,kBAAkB;AAAA,EAAA,CAC1E,GAGC3lD,EAAM0iD,cAAc;AACtB,UAAM79C,IAAO7E,EAAM4lD,kBAAkB;AACrChM,IAAAA,EAAS79B,KAAK;AAAA,MACZvc,IAAI;AAAA,MACJ4B,OAAOyD,IAAO,oBAAoB;AAAA,MAClClJ,MAAM;AAAA,MACNkJ,MAAAA;AAAAA,MACAo0C,UAAUA,MAAMj5C,EAAMylD,aAAa,QAAQ,CAAC5gD,CAAI;AAAA,IAAA,CACjD;AAAA,EACH;AAEA,SAAO+0C;AACT,GAEMiM,KAAmBA,CAAC3qD,MAA0B;AAClD,QAAM;AAAA,IAAEsB,WAAAA;AAAAA,IAAW6L,kBAAAA;AAAAA,IAAkBy9C,qBAAAA;AAAAA,IAAqBC,iBAAAA;AAAAA,IAAiBC,UAAAA;AAAAA,EAAAA,IAAa9qD,GAClF,CAAC+qD,GAAuBC,CAAwB,IAAI9gD,EAAkC,CAAA,CAAE;AAC9Fo6C,EAAAA,GAA6BhjD,GAAW;AAAA,IACtC6L,kBAAAA;AAAAA,IACAu+B,+BAA+Bsf;AAAAA,EAAAA,CAChC,GACD/G,GAA+B3iD,CAAS,GACxC++C,GAAkC/+C,CAAS,GAC3Cs/C,GAA6Bt/C,CAAS,GACtC2+C,GAAiC3+C,CAAS;AAC1C,QAAM,CAAC2pD,GAAuBC,CAAwB,IAAIhhD,EAAgC,IAAI,GACxF,CAACihD,GAAuBC,CAAwB,IAAIlhD,EAAgC,IAAI,GACxFmhD,IAAmB11C,GAA8B,IAAI;AAC3D,EAAK01C,EAAiBr9C,YAASq9C,EAAiBr9C,UAAUk7C,GAAAA;AAE1D,QAAMwB,IAAgBnpD,EAAkBD,EAAUiP,UAAU9O,OAAQI,CAAAA,MAAUA,EAAMsH,IAAI,GAClFmiD,IAAc/pD,EAAkBD,EAAUoU,eAAejU,OAAQI,CAAAA,MAAUA,EAAM8H,IAAI,GACrF4hD,IAAsBhqD,EAAkBD,EAAUoU,eAAejU,OAAQI,CAAAA,MAAUA,EAAM2T,YAAY,GACrG80C,IAAc/oD,EAAkBD,EAAUS,OAAON,OAAQI,OAAUA,EAAME,OAAOgjB,QAAQriB,QAAQygC,OAAO,GACvGsnB,IAAqBlpD,EACzBD,EAAUS,OAAON,OAChBI,OAAUA,EAAME,OAAOgjB,QAAQxiB,UAAU4gC,OAC5C,GACMqoB,IAA0Br/B,GAA+B7qB,GAAW,WAAW,GAC/EmqD,IAAqBt/B,GAA+B7qB,GAAW,MAAM,GACrEoqD,IAAwBnqD,EAAkBD,EAAUU,MAAMP,OAAO,MAAMH,EAAUiP,UAAUklC,UAAU,GAErG;AAAA,IACJoU,uBAAAA;AAAAA,IACAD,eAAAA;AAAAA,IACAK,sBAAAA;AAAAA,IACAC,gBAAAA;AAAAA,IACAJ,mBAAAA;AAAAA,IACAC,2BAAAA;AAAAA,IACAC,qBAAAA;AAAAA,IACAG,kBAAAA;AAAAA,EAAAA,IACEV,GAAwBnoD,CAAS,GAC/BkmD,IAAeyC,KAAwBC,KAAkBuB,GACzDpB,IAAcP,GACd6B,IAAqB/Z,GAAwBtwC,GAAW,SAAS,GACjEkpD,IAAqBT,KAA6BC,KAAuBwB,GACzEI,IAAuBrqD,EAAkBD,EAAUS,OAAON,OAAQI,OAAUA,EAAME,OAAOgjB,QAAQriB,QAAQquC,IAAI,GAC7G8a,IAAc5C,GAAmB3nD,GAAWsqD,CAAoB,GAChEjD,IAAwBnB,KAAgBkD,MAAkB,YAG1DoB,IAAiBtE,GACjB+C,IAAejpD,EAAU+O,MAAMC,eAC/B2tC,KAAiBmM,GAA8B;AAAA,IACnDC,aAAAA;AAAAA,IACAC,aAAAA;AAAAA,IACAE,oBAAAA;AAAAA,IACAC,oBAAAA;AAAAA,IACAjD,cAAAA;AAAAA,IACAkD,eAAAA;AAAAA,IACAH,cAAAA;AAAAA,EAAAA,CACD,GAEK1B,KACJoB,KAAwBwB,IACtB,gBAAAlrD,EAACqnD,MAA+B,WAAAtmD,GAAsB,eAAe2oD,GAAqB,IACxFnqD,QACAisD,IAAsBzC,GAA2B;AAAA,IACrD7B,SAASqE;AAAAA,IACT3iD,MAAMuhD;AAAAA,IACNlB,cAAcyB;AAAAA,IACd1B,cAAc4B;AAAAA,EAAAA,CACf;AAED1C,EAAAA,GAAgB,MAAM;AACpB,UAAMU,IAAOkC,EAAiBr9C;AAC9B,IAAKm7C,MACD4C,IACE5C,EAAK6C,eAAeD,KAAqBA,EAAoBE,YAAY9C,CAAI,IACxE,CAAC2C,KAAkB3C,EAAK6C,cACjC7C,EAAK6C,WAAWE,YAAY/C,CAAI;AAAA,EAEpC,GAAG,CAAC4C,GAAqBD,CAAc,CAAC;AAExC,QAAMK,IACJ,gBAAAx9C,EAACkZ,IAAA,EAAK,WAAU,UAAS,GAAE,QAAO,MAAK,KAAI,MAAK,KAAI,GAAE,QACpD,UAAA;AAAA,IAAA,gBAAAtnB,EAACo+C,IAAA,EAAmB,WAAAr9C,GAAsB,QAAQsoD,GAAe,gBAAA3L,IAA+B;AAAA,IAChG,gBAAA19C,EAACsnB,IAAA,EAAK,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,UAAS,UACxC,UAAA,gBAAAtnB,EAAC6lD,IAAA,EAAc,WAAA9kD,GAAqB,EAAA,CACtC;AAAA,EAAA,GACF,GAGI8qD,KAAqB/B,IACzB,gBAAA9pD,EAAC+tC,IAAA,EACC,MAAK,KACL,MAAK,KACL,MAAK,KACL,gBAAgB,gBAAA/tC,EAACqmD,IAAA,EAAiB,WAAAtlD,GAAsB,gBAAgBypD,EAAAA,CAAsB,GAC9F,cAAcoB,GACd,WAAW,CAAC7B,GACZ,aAAaqB,GACb,eAAeE,EAAYlZ,WAC3B,WAAWkZ,EAAYjZ,OACvB,WAAWiZ,EAAYhZ,OACvB,kBAAkBmW,IAClB,aAAY,kBACZ,cAAe/oC,OAAU3e,EAAUS,OAAOgyC,cAAc,WAAW9zB,CAAK,GACxE,mBAAoBwzB,CAAAA,MAAc;AAChC,KAAI,CAACA,KAAakY,MAAoBpB,EAAa,WAAW,CAAC9W,CAAS;AAAA,EAC1E,GAAE,IAGJ0Y,GAGIvD,KACJ,gBAAAj6C,EAACkZ,IAAA,EAAK,UAAS,YAAW,GAAE,QAAO,MAAK,KAAI,MAAK,KAAI,GAAE,QAAO,IAAI7kB,EAAqBZ,MAAM,OAAM,MAChGynD,UAAAA;AAAAA,IAAAA,IAAwB,gBAAAtpD,EAAC4mD,IAAA,EAAqB,WAAA7lD,EAAA,CAAqB,IAAM;AAAA,IAC1E,gBAAAf,EAACsnB,IAAA,EAAK,MAAK,KAAI,MAAK,KAAI,MAAK,KAAI,UAAS,UAAS,UAAS,YACzDukC,UAAAA,IACH;AAAA,IACA,gBAAA7rD,EAACy8C,MAAsB,WAAA17C,EAAA,CAAqB;AAAA,EAAA,GAC9C;AAGF,SACE,gBAAAqN,EAACqtC,MAAoB,GAAE,QAAO,MAAK,KAAI,MAAK,KAAI,GAAE,QAChD,UAAA;AAAA,IAAA,gBAAArtC,EAACkZ,IAAA,EAAK,WAAU,UAAS,GAAE,QAAO,MAAK,KAAI,MAAK,KAAI,UAAS,YAAW,GAAE,QACvEijC,UAAAA;AAAAA,MAAAA;AAAAA,MACD,gBAAAvqD,EAACsnB,IAAA,EACC,MAAK,KACL,MAAK,KACL,MAAK,KACL,UAAS,UACT,IAAG,aACH,IAAG,aACH,IAAIgiC,IAAwB,MAAM,aAElC,UAAA,gBAAAtpD,EAACmoD,IAAA,EACC,WAAApnD,GACA,uBAAAqnD,GACA,cAAAC,IACA,YAAAC,IACA,kBAAkBG,IAClB,sBAAsBkC,EAAAA,CAAyB,GAEnD;AAAA,MACCf,IAAmB,gBAAA5pD,EAAC6mD,IAAA,EAAmB,WAAA9lD,EAAA,CAAqB,IAAM;AAAA,MAClEkmD,KAAgBkE,IACf,gBAAAnrD,EAACs1C,IAAA,EACC,WAAAv0C,GACA,YAAYspD,GACZ,QAAQC,GACR,gBAAgBO,GAChB,cAAcjB,IAAmBpD,KAA8BjnD,QAC/D,QAAQ+oD,IAAW,IAEnB;AAAA,MACJ,gBAAAtoD,EAAC+U,IAAA,EACC,WAAAhU,GACA,MAAMgqD,GACN,cAAcC,GACd,kBAAAp+C,GACA,SAAS,MAAM7L,EAAUoU,eAAe5H,QAAM,CAAE;AAAA,MAElD,gBAAAvN,EAACwe,MAA8B,WAAAzd,GAAqB;AAAA,MACpD,gBAAAf,EAACqhB,MAA0B,WAAAtgB,EAAA,CAAqB;AAAA,IAAA,GAClD;AAAA,IACA,gBAAAf,EAACgnD,MACC,WAAAjmD,GACA,cAAAkmD,GACA,SAASsE,GACT,eAAeT,EAAiBr9C,QAAAA,CAAQ;AAAA,EAAA,GAE5C;AAEJ,GAEaq+C,KAAYrsD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GACvB0R,IAAyBopC,GAA6Bh7C,EAAKsB,SAAU,GACrE6H,IAAa5H,EAAkBvB,EAAKsB,UAAUU,MAAMP,OAAQma,EAE5D,GACA4/B,IAAiCiJ,GAAqCzkD,EAAKsB,SAAU,GAMzDnB,IAAAgJ,GAAImjD,cACXhsD,IAAA6I,GAAImjD,eAAiBnjD,EAAI7E,KAAzBxE;AAAwC,MAAAgB;AAAA,EAAAb,SAAAD,KAEzDc,IAAA,gBAAAP,EAACoqD,IAAA,EAAgB,GAAK3qD,EAAAA,CAAK,GAAIC,OAAAD,GAAAC,OAAAa,KAAAA,IAAAb,EAAA,CAAA;AAAA,MAAA6M;AAAA,EAAA7M,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAC/B8C,sBAACy/C,IAAA,EAAO,GAAGtsD,OAAA6M,KAAAA,IAAA7M,EAAA,CAAA;AAAA,MAAA6b;AAAA,SAAA7b,EAAA,CAAA,MAAAu7C,KAAAv7C,EAAA,CAAA,MAAAE,KAAAF,EAAA,CAAA,MAAAK,KAAAL,EAAA,CAAA,MAAAa,KAAAb,SAAA2R,KAPbkK,sBAACw/B,IAAA,EACmB1pC,kBAAAA,GACQ4pC,0BAAAA,GACF,wBAAAr7C,GACP,iBAAAG,GAEjBQ,UAAAA;AAAAA,IAAAA;AAAAA,IACAgM;AAAAA,EAAAA,GACF,GAAyB7M,OAAAu7C,GAAAv7C,OAAAE,GAAAF,OAAAK,GAAAL,OAAAa,GAAAb,OAAA2R,GAAA3R,OAAA6b,KAAAA,IAAA7b,EAAA,CAAA,GARzB6b;AAQyB;AApQG,SAAApa,GAAAG,GAAA;AAAA,SAEiDA,EAAKZ;AAAM;AAF5D,SAAAqK,GAAAoR,GAAA;AAAA,SAGwB7a,EAAKwF;AAAO;AAHpC,SAAAsU,GAAAgB,GAAA;AAAA,SAI2C9a,EAAKI;AAAa;AAgPpE,SAAA2Z,GAAA/Z,GAAA;AAAA,SAGrBA,EAAKI,eAAgBJ,EAAKG,MAAOH,EAAKI,YAAa,IAAnDnC;AAAgE;AC3T7D,MAAM0sD,KAA0CA,CACrDzvC,MACG;AACH,aAAWM,KAAgBN,EAAc1V,OAAAA,EAAUgW,CAAAA,EAAaqoB,WAAW/iB,QAAAA;AAC3E5F,EAAAA,EAAc6F,MAAAA;AAChB,GAEa6pC,KAAuCA,CAClDnrD,GACAyb,GACA2vC,MACG;AACH,QAAMC,IAAY,IAAIrmD,IAAIomD,EAAQxrD,IAAKu/C,CAAAA,MAAWA,EAAOn8C,EAAE,CAAC;AAE5D,aAAW,CAACA,GAAI+Y,CAAY,KAAKN;AAC/B,IAAK4vC,EAAUnmD,IAAIlC,CAAE,MACnB+Y,EAAaqoB,WAAW/iB,QAAAA,GACxB5F,EAAc2F,OAAOpe,CAAE;AAI3B,aAAWm8C,KAAUiM;AACnB,IAAK3vC,EAAcvW,IAAIi6C,EAAOn8C,EAAE,KAC9ByY,EAAc6Y,IAAI6qB,EAAOn8C,IAAI;AAAA,MAAEohC,YAAYpkC,EAAUsrD,eAAenM,CAAM;AAAA,IAAA,CAAG;AAGnF,GAEaoM,KAAsB7sD,CAAAA,MAAA;AAAA,QAAAC,IAAAC,EAAA,CAAA,GACjC;AAAA,IAAAoB,WAAAA;AAAAA,IAAAorD,SAAAA;AAAAA,EAAAA,IAA+B1sD,GAC/B8sD,IAA4Bn3C,GAAOrU,CAAS;AAAE,MAAAnB;AAAA,EAAAF,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KACjB7J,wBAAIgT,IAAAA,GAA8ClT,OAAAE,KAAAA,IAAAF,EAAA,CAAA;AAA/E,QAAA8c,IAAsBpH,GAAOxV,CAAkD;AAAE,MAAAG,GAAAQ;AAAA,EAAAb,EAAA,CAAA,MAAAysD,KAAAzsD,SAAAqB,KAEvEhB,IAAAA,MAAA;AACR,IAAIwsD,EAAmB9+C,YAAa1M,MAClCkrD,GAAwCzvC,EAAa/O,OAAQ,GAC7D8+C,EAAmB9+C,UAAW1M,IAGhCmrD,GAAqCnrD,GAAWyb,EAAa/O,SAAU0+C,CAAO;AAAA,EAAC,GAC9E5rD,IAAA,CAAC4rD,GAASprD,CAAS,GAACrB,OAAAysD,GAAAzsD,OAAAqB,GAAArB,OAAAK,GAAAL,OAAAa,MAAAR,IAAAL,EAAA,CAAA,GAAAa,IAAAb,EAAA,CAAA,IAPvBuL,GAAUlL,GAOPQ,CAAoB;AAAC,MAAAgM,GAAAgP;AAAA,SAAA7b,EAAA,CAAA,MAAA8J,uBAAAC,IAAA,2BAAA,KAEd8C,IAAAA,MAAM,MAAM0/C,GAAwCzvC,EAAa/O,OAAQ,GAAG8N,IAAA,CAAA,GAAE7b,OAAA6M,GAAA7M,OAAA6b,MAAAhP,IAAA7M,EAAA,CAAA,GAAA6b,IAAA7b,EAAA,CAAA,IAAxFuL,GAAUsB,GAA4EgP,CAAE,GAEjF;AAAI;"}
|
|
1
|
+
{"version":3,"file":"react.js","sources":["../src/react/breadcrumb/breadcrumb-view.tsx","../src/react/shared/use-workbench-composition-panels.ts","../src/react/theme/workbench-theme-background.ts","../src/react/command-palette/command-palette-params.ts","../src/react/command-palette/palette-view.tsx","../src/react/command-palette/command-palette-resources.tsx","../src/react/command-palette/command-param-descriptors.ts","../src/react/command-palette/command-param-field.tsx","../src/react/command-palette/command-params-dialog.tsx","../src/react/region/panel-widget-open.ts","../src/react/command-palette/panel-widget-palette.tsx","../src/react/command-palette/resource-palette.tsx","../src/react/command-palette/theme-palette.tsx","../src/react/command-palette/command-palette.tsx","../src/react/focus/focus-region.tsx","../src/react/menus/menu-items.ts","../src/react/header/header-action-items.ts","../src/react/header/header-actions.tsx","../src/react/keybindings/tanstack-hotkey-adapter.ts","../src/react/keybindings/workbench-keybinding-dispatcher.tsx","../src/react/renderers/tree/tree-actions.tsx","../src/react/menus/resource-actions.tsx","../src/react/notifications/notification-host.tsx","../src/react/shared/use-workbench-location-resource.ts","../src/react/region/retained-view-placements.ts","../src/react/region/use-retained-view-placements.ts","../src/react/region/widget-host.tsx","../src/react/region/mode-chrome.tsx","../src/react/region/region.tsx","../src/react/region/panel-add-menu.tsx","../src/react/region/region-tabs-visibility.ts","../src/react/region/region-tabs-visibility-hooks.ts","../src/react/region/region-tab.tsx","../src/react/region/sortable-region-tab-list.tsx","../src/react/region/region-tabs.tsx","../src/react/renderers/data-table/data-table-view-model.ts","../src/react/renderers/data-table/data-table-view.tsx","../src/react/renderers/settings/preference-schema-to-params.ts","../src/react/renderers/settings/preferences-form.tsx","../src/react/renderers/tree/tree-list-adapter.tsx","../src/react/renderers/tree/tree-params-dialog.tsx","../src/react/renderers/tree/tree-view-body.tsx","../src/react/renderers/tree/tree-view-move.ts","../src/react/renderers/tree/tree-view-navigation.ts","../src/react/renderers/tree/tree-view-search.tsx","../src/react/renderers/tree/tree-view-load.ts","../src/react/renderers/tree/use-tree-data.ts","../src/react/renderers/tree/use-tree-view-customization.ts","../src/react/renderers/tree/tree-view.tsx","../src/react/settings/use-settings-revision.ts","../src/react/settings/settings-surface-panel.tsx","../src/react/settings/settings-overlay.tsx","../src/react/settings/settings-resources.ts","../src/react/settings/settings-tree.ts","../src/react/settings/settings-module.tsx","../src/react/workbench/workbench-panel-state.ts","../src/react/panel-menu/panel-menu-sizing.ts","../src/react/panel-menu/panel-menu.tsx","../src/react/shared/use-workbench-mode-region-settings.ts","../src/react/side-panel/side-panel.tsx","../src/react/terminal/terminal-placement-binding.ts","../src/react/terminal/workbench-terminal-panel.tsx","../src/react/terminal/terminal-module.tsx","../src/react/theme/use-workbench-theme-preferences.ts","../src/react/theme/workbench-theme-provider.tsx","../src/react/theme/workbench-theme-scope.tsx","../src/react/workbench/overlay-layer.tsx","../src/react/header/resource-actions.tsx","../src/react/header/workbench-nav-chrome.tsx","../src/react/renderers/controls/controls-view.tsx","../src/react/renderers/controls/install-controls-renderer.ts","../src/react/renderers/data-table/install-data-table-renderer.ts","../src/react/renderers/file/install-file-renderer.ts","../src/react/renderers/kanban/kanban-presentation.ts","../src/react/renderers/kanban/kanban-view-query.ts","../src/react/renderers/kanban/kanban-view-storage.ts","../src/react/renderers/kanban/kanban-view.tsx","../src/react/renderers/kanban/install-kanban-renderer.ts","../src/react/renderers/tree/install-tree-renderer.ts","../src/react/theme/use-workbench-file-icon-theme-preferences.ts","../src/react/workbench/use-workbench-region-content.ts","../src/react/workbench/header-bottom-border.tsx","../src/react/workbench/use-workbench-main-panels.ts","../src/react/workbench/workbench-secondary-panel.tsx","../src/react/workbench/workbench-body.tsx","../src/react/workbench/workbench-panels.tsx","../src/react/workbench/workbench-side-panel-layout.tsx","../src/react/workbench/workbench-side-panel-boundary.tsx","../src/react/workbench/workbench.tsx","../src/react/workbench/workbench-module-host.tsx"],"sourcesContent":["import { HStack, Text } from \"@chakra-ui/react\";\nimport { Breadcrumb, type SessionCompletionStatus, SessionIndicator } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport type { WorkbenchBreadcrumbItem, WorkbenchCore } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface WorkbenchBreadcrumbViewProps {\n workbench: WorkbenchCore;\n}\nconst getSessionStatus = (item: WorkbenchBreadcrumbItem) =>\n typeof item.resource?.metadata?.status === \"string\"\n ? (item.resource.metadata.status as SessionCompletionStatus)\n : undefined;\nconst WorkbenchBreadcrumbIcon = (props: { item: WorkbenchBreadcrumbItem }) => {\n const { item } = props;\n const status = getSessionStatus(item);\n if (item.indicator === \"session-status\" || item.resource?.type === \"session\") {\n return <SessionIndicator status={status} boxSize=\"14px\" />;\n }\n if (!item.icon) return null;\n return (\n <Text as=\"span\" aria-hidden=\"true\" color=\"fg.muted\" display=\"inline-flex\" flexShrink={0}>\n <WorkbenchIcon name={item.icon} size={14} />\n </Text>\n );\n};\nconst WorkbenchBreadcrumbTitle = (props: { item: WorkbenchBreadcrumbItem }) => {\n const { item } = props;\n const title = item.title as ReactNode;\n return (\n <HStack as=\"span\" gap=\"2xs\" minW=\"0\">\n <WorkbenchBreadcrumbIcon item={item} />\n <Text as=\"span\" minW=\"0\" maxW=\"15rem\" truncate>\n {title}\n </Text>\n </HStack>\n );\n};\nexport const buildWorkbenchBreadcrumbItems = (items: WorkbenchBreadcrumbItem[] | undefined) =>\n (items ?? []).map((item) => ({\n title: <WorkbenchBreadcrumbTitle item={item} />,\n url: item.url,\n onClick: item.onClick,\n }));\nexport const WorkbenchBreadcrumbView = (props: WorkbenchBreadcrumbViewProps) => {\n const { workbench } = props;\n const items = useWorkbenchStore(workbench.breadcrumbs.store, (state) => state.items) ?? [];\n if (items.length === 0) return null;\n return (\n <Breadcrumb items={buildWorkbenchBreadcrumbItems(items)} separator=\"/\" separatorGap=\"xs\" display=\"flex\" h=\"full\" />\n );\n};\n","import type { WorkbenchCompositionRegionPanels, WorkbenchCore, WorkbenchPanelRegion } from \"../../core\";\nimport { useWorkbenchStore } from \"./use-workbench-store\";\n\nexport type WorkbenchCompositionPanelsByRegion = Record<WorkbenchPanelRegion, WorkbenchCompositionRegionPanels>;\n\nexport const useWorkbenchCompositionPanels = (workbench: WorkbenchCore): WorkbenchCompositionPanelsByRegion => {\n \"use no memo\";\n\n useWorkbenchStore(workbench.layout.store, (state) => state);\n useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n useWorkbenchStore(workbench.commands.store, (state) => state);\n useWorkbenchStore(workbench.context.store, (state) => state);\n\n return {\n main: workbench.composition.panelsFor(\"main\"),\n secondary: workbench.composition.panelsFor(\"secondary\"),\n side: workbench.composition.panelsFor(\"side\"),\n };\n};\n","import type { WorkbenchRegion } from \"../../core\";\n\nconst chakraBackgrounds = {\n sidenav: \"var(--chakra-colors-bg-subtle)\",\n main: \"var(--chakra-colors-bg)\",\n panel: \"var(--chakra-colors-bg-panel)\",\n} as const;\n\nconst vscodeColor = (token: string, fallback: string) =>\n `var(--chakra-colors-vscode-${token.replaceAll(\".\", \"-\")}, ${fallback})`;\n\nexport const workbenchBackgrounds = {\n sidenav: vscodeColor(\"sideBar.background\", chakraBackgrounds.sidenav),\n main: vscodeColor(\"editor.background\", chakraBackgrounds.main),\n panel: vscodeColor(\"panel.background\", chakraBackgrounds.panel),\n widget: vscodeColor(\"editorWidget.background\", vscodeColor(\"panel.background\", chakraBackgrounds.panel)),\n} as const;\n\nconst workbenchRegionBackgrounds = {\n nav: workbenchBackgrounds.main,\n activity: workbenchBackgrounds.main,\n sidenav: workbenchBackgrounds.sidenav,\n \"main-header\": workbenchBackgrounds.main,\n \"main-left-menu\": workbenchBackgrounds.panel,\n main: workbenchBackgrounds.main,\n \"main-right-menu\": workbenchBackgrounds.panel,\n \"secondary-header\": workbenchBackgrounds.panel,\n \"secondary-left-menu\": workbenchBackgrounds.panel,\n secondary: workbenchBackgrounds.panel,\n \"secondary-right-menu\": workbenchBackgrounds.panel,\n status: workbenchBackgrounds.main,\n overlay: workbenchBackgrounds.widget,\n \"side-header\": workbenchBackgrounds.widget,\n \"side-left-menu\": workbenchBackgrounds.widget,\n side: workbenchBackgrounds.widget,\n \"side-right-menu\": workbenchBackgrounds.widget,\n} as const satisfies Record<WorkbenchRegion, string>;\n\nexport const workbenchFocusBorder = vscodeColor(\"focusBorder\", \"var(--chakra-colors-color-palette-focus-ring)\");\n\nexport const workbenchCommandPaletteBackground = workbenchBackgrounds.widget;\n\nexport const getWorkbenchRegionBackground = (region: WorkbenchRegion) => workbenchRegionBackgrounds[region];\n","import { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { FileUploadValue } from \"@pstdio/ui\";\nimport type { CommandParamDescriptor, CommandParamSchema, WorkbenchCommandExecutionContext } from \"../../core\";\nexport interface CommandFilesParamValue {\n refs: string[];\n uploads: FileUploadValue[];\n}\nexport type CommandParamValue = string | boolean | string[] | CommandFilesParamValue | undefined;\nexport interface CommandParamEntry extends CommandParamDescriptor {\n key: string;\n label: string;\n}\nconst humanize = (value: string) => {\n const spaced = value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[-_]+/g, \" \")\n .trim();\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n};\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\nexport const isFileUploadValue = (value: unknown): value is FileUploadValue => {\n if (!isRecord(value) || !isRecord(value.file)) return false;\n return typeof value.id === \"string\" && typeof value.file.name === \"string\" && typeof value.status === \"string\";\n};\nexport const isCommandFilesParamValue = (value: unknown): value is CommandFilesParamValue =>\n isRecord(value) &&\n Array.isArray(value.refs) &&\n value.refs.every((ref) => typeof ref === \"string\") &&\n Array.isArray(value.uploads) &&\n value.uploads.every(isFileUploadValue);\nexport const createCommandFilesParamValue = (input: Partial<CommandFilesParamValue> = {}): CommandFilesParamValue => ({\n refs: [...(input.refs ?? [])],\n uploads: [...(input.uploads ?? [])],\n});\nconst commandFilesParamValue = (raw: unknown, multiple: boolean | undefined) => {\n const value = isCommandFilesParamValue(raw)\n ? createCommandFilesParamValue(raw)\n : createCommandFilesParamValue({\n refs: Array.isArray(raw) ? raw.filter((item): item is string => typeof item === \"string\") : [],\n uploads: Array.isArray(raw) ? raw.filter(isFileUploadValue) : [],\n });\n if (multiple !== false) return value;\n if (value.uploads[0]) return createCommandFilesParamValue({ uploads: [value.uploads[0]] });\n return createCommandFilesParamValue({ refs: value.refs.slice(0, 1) });\n};\nconst stringifyEditableValue = (value: unknown) => {\n if (value === undefined || value === null) return \"\";\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n return JSON.stringify(value);\n};\nconst toIdentifierPrefix = (value: string) =>\n value\n .replace(/[^a-zA-Z0-9]+([a-zA-Z0-9])/g, (_match, char: string) => char.toUpperCase())\n .replace(/^[A-Z]/, (char) => char.toLowerCase());\nconst metadataString = (metadata: Record<string, unknown> | undefined, key: string) => {\n const value = metadata?.[key];\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\") return String(value);\n return undefined;\n};\nconst resourceContextValue = (entry: CommandParamEntry, context: WorkbenchCommandExecutionContext | undefined) => {\n const resource = context?.resource;\n if (!resource) return undefined;\n const metadataValue = metadataString(resource.metadata, entry.key);\n if (metadataValue !== undefined) return metadataValue;\n if (entry.key === `${toIdentifierPrefix(resource.type)}Id`) return resource.id ?? resourceKey(resource);\n if (entry.type === \"resource\" && (!entry.resourceType || entry.resourceType === resource.type)) {\n return {\n type: resource.type,\n id: resource.id ?? resourceKey(resource),\n ...(resource.label ? { label: resource.label } : {}),\n ...(resource.metadata ? { metadata: resource.metadata } : {}),\n };\n }\n return undefined;\n};\nconst dedupeOptions = (options: CommandParamDescriptor[\"options\"]) => {\n if (!options) return options;\n const seen = new Set<string>();\n return options.filter((option) => {\n if (seen.has(option.value)) return false;\n seen.add(option.value);\n return true;\n });\n};\nexport const hasCommandParameters = (params: CommandParamSchema | undefined) =>\n listCommandParamEntries(params).length > 0;\nexport const listCommandParamEntries = (params: CommandParamSchema | undefined): CommandParamEntry[] =>\n Object.entries(params ?? {}).flatMap(([key, param]) =>\n param.resolvedFrom === \"resource\"\n ? []\n : [\n {\n ...param,\n options: dedupeOptions(param.options),\n key,\n label: param.label ?? humanize(key),\n },\n ],\n );\nexport const buildCommandParamInitialValues = (\n params: CommandParamSchema | undefined,\n baseArgs?: unknown,\n context?: WorkbenchCommandExecutionContext,\n): Record<string, CommandParamValue> => {\n const base = isRecord(baseArgs) ? baseArgs : {};\n const values: Record<string, CommandParamValue> = {};\n for (const entry of listCommandParamEntries(params)) {\n const raw = Object.hasOwn(base, entry.key)\n ? base[entry.key]\n : (resourceContextValue(entry, context) ?? entry.defaultValue);\n if (entry.type === \"boolean\") {\n values[entry.key] = raw === undefined ? undefined : raw === true || raw === \"true\";\n continue;\n }\n if (entry.type === \"files\") {\n values[entry.key] = commandFilesParamValue(raw, entry.multiple);\n continue;\n }\n if (entry.type === \"multi-select\") {\n values[entry.key] = Array.isArray(raw) ? raw.map(String) : [];\n continue;\n }\n values[entry.key] = stringifyEditableValue(raw);\n }\n return values;\n};\nconst isEmptyValue = (value: CommandParamValue) => {\n if (isCommandFilesParamValue(value)) return value.refs.length === 0 && value.uploads.length === 0;\n return value === undefined || value === \"\" || (Array.isArray(value) && value.length === 0);\n};\nconst parseJsonValue = (entry: CommandParamEntry, value: CommandParamValue) => {\n if (typeof value !== \"string\") return value;\n try {\n return JSON.parse(value);\n } catch {\n throw new Error(`Invalid JSON for ${entry.label}`);\n }\n};\nconst normalizeValue = (entry: CommandParamEntry, value: CommandParamValue) => {\n if (entry.type === \"number\") {\n const numberValue = Number(value);\n if (!Number.isFinite(numberValue)) throw new Error(`Invalid number for ${entry.label}`);\n return numberValue;\n }\n if (entry.type === \"boolean\") return value === true || value === \"true\";\n if (entry.type === \"files\") return isCommandFilesParamValue(value) ? value : createCommandFilesParamValue();\n if (entry.type === \"json\" || entry.type === \"resource\" || entry.type === \"repo\" || entry.type === \"harness\") {\n return parseJsonValue(entry, value);\n }\n if (entry.type === \"multi-select\") return Array.isArray(value) ? value : String(value).split(\",\").filter(Boolean);\n return String(value ?? \"\");\n};\nexport const normalizeCommandParamValues = (\n params: CommandParamSchema | undefined,\n values: Record<string, CommandParamValue>,\n) => {\n const normalized: Record<string, unknown> = {};\n for (const entry of listCommandParamEntries(params)) {\n const value = values[entry.key];\n if (isEmptyValue(value)) {\n if (entry.required) throw new Error(`Missing required parameter: ${entry.label}`);\n continue;\n }\n normalized[entry.key] = normalizeValue(entry, value);\n }\n return normalized;\n};\nexport const mergeCommandParamArgs = (baseArgs: unknown, params: Record<string, unknown>) => ({\n ...(isRecord(baseArgs) ? baseArgs : {}),\n ...params,\n});\n","import type { PaletteMode } from \"@pstdio/ui\";\nimport { Search, Terminal } from \"lucide-react\";\nimport type { WorkbenchCommandPaletteView } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\n\nexport const SEARCH_MODE_ID = \"search\";\nexport const COMMAND_MODE_ID = \"command\";\nexport const THEME_MODE_ID = \"theme\";\n\nexport const workbenchPaletteModes: PaletteMode[] = [{ id: SEARCH_MODE_ID }, { id: COMMAND_MODE_ID, inputPrefix: \">\" }];\n\nexport const isThemePaletteView = (view: WorkbenchCommandPaletteView) => view === THEME_MODE_ID;\n\nexport const isPickerPaletteView = isThemePaletteView;\n\nexport const getPaletteViewMode = (view: WorkbenchCommandPaletteView) => {\n if (isThemePaletteView(view)) return THEME_MODE_ID;\n return undefined;\n};\n\nexport const getPaletteViewModes = (view: WorkbenchCommandPaletteView) => {\n if (isPickerPaletteView(view)) return undefined;\n\n return workbenchPaletteModes;\n};\n\nexport const getPaletteInitialActiveIndex = (input: {\n view: WorkbenchCommandPaletteView;\n themeInitialActiveIndex: number;\n}) => {\n if (isThemePaletteView(input.view)) return input.themeInitialActiveIndex;\n\n return 0;\n};\n\nexport const getPaletteInputIcon = (input: { view: WorkbenchCommandPaletteView; mode: string | undefined }) => {\n if (isThemePaletteView(input.view)) return <WorkbenchIcon name=\"Palette\" size={16} />;\n if (input.mode === COMMAND_MODE_ID) return <Terminal size={16} aria-hidden=\"true\" />;\n\n return <Search size={16} aria-hidden=\"true\" />;\n};\n\nexport const getPalettePlaceholder = (input: { view: WorkbenchCommandPaletteView; mode: string | undefined }) => {\n if (isThemePaletteView(input.view)) return \"Search themes\";\n if (input.mode === COMMAND_MODE_ID) return \"Run command\";\n\n return \"Search resources\";\n};\n","import type { PaletteEntry } from \"@pstdio/ui\";\nimport { useEffect, useState } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { SEARCH_MODE_ID } from \"./palette-view\";\n\nconst RESOURCE_QUERY_LIMIT = 25;\nconst RESOURCE_QUERY_DEBOUNCE_MS = 150;\n\ninterface UseWorkbenchCommandPaletteResourceEntriesInput {\n workbench: WorkbenchCore;\n query: string;\n open: boolean;\n onClose: () => void;\n}\n\n// Fetches extension-provided palette results for the live query (debounced) and maps\n// them to search-mode palette entries. Provider errors are isolated by the registry, so\n// one failing provider never blanks the palette.\nexport const useWorkbenchCommandPaletteResourceEntries = (input: UseWorkbenchCommandPaletteResourceEntriesInput) => {\n const { workbench, query, open, onClose } = input;\n const refreshToken = useWorkbenchStore(workbench.commandPaletteResources.store, (state) => state.refreshToken);\n const [entries, setEntries] = useState<PaletteEntry[]>([]);\n\n useEffect(() => {\n if (!open) {\n setEntries([]);\n return;\n }\n\n // Read so an explicit registry refresh (refreshToken bump) re-runs this query.\n void refreshToken;\n let cancelled = false;\n const handle = setTimeout(() => {\n void workbench.commandPaletteResources.queryProviders({ query, limit: RESOURCE_QUERY_LIMIT }).then((groups) => {\n if (cancelled) return;\n setEntries(\n groups.flatMap((group) =>\n group.results.map((result) => ({\n id: `workbench-command-palette-resource:${result.id}`,\n mode: SEARCH_MODE_ID,\n label: result.label,\n searchText: `${query} ${result.label} ${(result.keywords ?? []).join(\" \")}`.trim(),\n description: result.description,\n group: result.group ?? group.title,\n icon: result.icon ? <WorkbenchIcon name={result.icon} /> : undefined,\n onActivate: () => {\n onClose();\n void Promise.resolve(result.activate()).catch(() => undefined);\n },\n })),\n ),\n );\n });\n }, RESOURCE_QUERY_DEBOUNCE_MS);\n\n return () => {\n cancelled = true;\n clearTimeout(handle);\n };\n }, [workbench, query, open, refreshToken, onClose]);\n\n return entries;\n};\n","import type { Param, ParamValue, SelectionOption } from \"@pstdio/ui\";\nimport {\n type CommandParamEntry,\n type CommandParamValue,\n createCommandFilesParamValue,\n isCommandFilesParamValue,\n isFileUploadValue,\n} from \"./command-palette-params\";\n\nconst asText = (value: CommandParamValue) => (typeof value === \"string\" ? value : \"\");\n\nconst asList = (value: CommandParamValue) => (Array.isArray(value) ? value : []);\n\n/** Required params carry the marker in their name — the editor has no required state. */\nexport const commandParamName = (entry: CommandParamEntry) => `${entry.label}${entry.required ? \" *\" : \"\"}`;\n\nconst commandParamOptions = (entry: CommandParamEntry): SelectionOption[] =>\n (entry.options ?? []).map((option) => ({ id: option.value, name: option.label, icon: option.icon }));\n\n// Structured params (harness, repo, template) are normally rendered by the host,\n// which knows how to fetch their options. Without a host renderer they fall back\n// to the JSON they are serialized as, so the command can still be run.\nconst JSON_PARAM_TYPES = new Set([\"json\", \"resource\", \"repo\", \"harness\"]);\n\n/**\n * Maps a declared command param onto the design-system control that owns that\n * kind of input, so a command dialog is built from the same rows as every other\n * param surface rather than from hand-rolled fields.\n */\nexport const buildCommandParam = (entry: CommandParamEntry, value: CommandParamValue): Param => {\n const base = { id: entry.key, name: commandParamName(entry), description: entry.description };\n\n if (entry.type === \"boolean\") return { ...base, type: \"boolean\", defaultValue: value === true };\n\n if (entry.type === \"number\") return { ...base, type: \"number\", defaultValue: Number(asText(value)) };\n\n if (entry.type === \"markdown\") return { ...base, type: \"markdown\", defaultValue: asText(value) };\n\n if (entry.type === \"files\") {\n return {\n ...base,\n type: \"fileUpload\",\n defaultValue: isCommandFilesParamValue(value) ? value.uploads : [],\n accept: entry.accept,\n multiple: entry.multiple,\n };\n }\n\n if (entry.type === \"multi-select\") {\n return {\n ...base,\n type: \"selection\",\n defaultValue: asList(value),\n options: commandParamOptions(entry),\n multiSelect: true,\n placeholder: `Select ${entry.label.toLowerCase()}`,\n searchable: (entry.options?.length ?? 0) > 5,\n };\n }\n\n if ((entry.type === \"select\" || entry.type === \"template\") && entry.options?.length) {\n return {\n ...base,\n type: \"selection\",\n defaultValue: asText(value),\n options: commandParamOptions(entry),\n placeholder: `Select ${entry.label.toLowerCase()}`,\n searchable: entry.options.length > 5,\n clearable: !entry.required,\n };\n }\n\n if (entry.type === \"longtext\" || JSON_PARAM_TYPES.has(entry.type)) {\n return { ...base, type: \"text\", defaultValue: asText(value), singleLine: false };\n }\n\n return { ...base, type: \"text\", defaultValue: asText(value), singleLine: true };\n};\n\n/** Narrows an editor value back to what a command param can carry. */\nexport const readCommandParamValue = (value: ParamValue, entry?: CommandParamEntry): CommandParamValue => {\n if (typeof value === \"boolean\") return value;\n if (entry?.type === \"files\") {\n return createCommandFilesParamValue({ uploads: Array.isArray(value) ? value.filter(isFileUploadValue) : [] });\n }\n if (Array.isArray(value)) return value.map(String);\n return String(value ?? \"\");\n};\n","import { ParamEditorRow } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport type { WorkbenchCommandExecutionContext } from \"../../core\";\nimport { type CommandParamEntry, type CommandParamValue, isCommandFilesParamValue } from \"./command-palette-params\";\nimport { buildCommandParam, readCommandParamValue } from \"./command-param-descriptors\";\n\nexport interface CommandParamFieldProps {\n entry: CommandParamEntry;\n value: CommandParamValue;\n context?: WorkbenchCommandExecutionContext;\n disabled: boolean;\n onChange: (value: CommandParamValue) => void;\n}\n\n// Lets the host supply field UI for param types the workbench cannot render on its\n// own (e.g. harness/repo selectors backed by host data). Returning a falsy value\n// defers to the built-in field for that entry.\nexport type CommandParamFieldRenderer = (props: CommandParamFieldProps) => ReactNode;\n\nexport const CommandParamField = (props: Omit<CommandParamFieldProps, \"context\">) => {\n const { entry, value, disabled, onChange } = props;\n\n const change = (next: Parameters<typeof readCommandParamValue>[0]) => {\n const nextValue = readCommandParamValue(next, entry);\n if (entry.type !== \"files\" || !isCommandFilesParamValue(value) || !isCommandFilesParamValue(nextValue)) {\n onChange(nextValue);\n return;\n }\n\n const refs = entry.multiple === false && nextValue.uploads.length > 0 ? [] : value.refs;\n onChange({ ...nextValue, refs });\n };\n\n return (\n <ParamEditorRow\n param={buildCommandParam(entry, value)}\n readOnly={disabled}\n onChange={(_id, next) => change(next)}\n />\n );\n};\n","import { Button, CloseButton, Dialog, HStack, Stack, Text } from \"@chakra-ui/react\";\nimport { handleDialogAcceptShortcut, ScrollArea } from \"@pstdio/ui\";\nimport { Fragment, useEffect, useState } from \"react\";\nimport type { Command, RegisteredMenuItem, WorkbenchCommandExecutionContext } from \"../../core\";\nimport {\n buildCommandParamInitialValues,\n type CommandParamEntry,\n type CommandParamValue,\n isCommandFilesParamValue,\n listCommandParamEntries,\n mergeCommandParamArgs,\n normalizeCommandParamValues,\n} from \"./command-palette-params\";\nimport { CommandParamField, type CommandParamFieldRenderer } from \"./command-param-field\";\n\nexport interface CommandParamsRequest {\n record: { command: Pick<Command, \"id\" | \"label\" | \"description\" | \"params\"> };\n action?: RegisteredMenuItem;\n label: string;\n // Confirm-button label for the dialog (defaults to \"Run\").\n submitLabel?: string;\n args?: unknown;\n context?: WorkbenchCommandExecutionContext;\n}\n\nexport type { CommandParamFieldProps, CommandParamFieldRenderer } from \"./command-param-field\";\n\ninterface CommandParamsDialogProps {\n request: CommandParamsRequest | null;\n renderParamField?: CommandParamFieldRenderer;\n prepareArgs?: (input: {\n commandId: string;\n args: unknown;\n context?: WorkbenchCommandExecutionContext;\n onArgsChange: (args: unknown) => void;\n }) => Promise<unknown>;\n onClose: () => void;\n onRun: (input: {\n commandId: string;\n args: unknown;\n context?: WorkbenchCommandExecutionContext;\n label: string;\n }) => Promise<void>;\n}\n\nconst isFilled = (entry: CommandParamEntry, value: CommandParamValue) => {\n if (entry.type === \"boolean\") return value !== undefined;\n if (isCommandFilesParamValue(value)) return value.refs.length + value.uploads.length > 0;\n if (Array.isArray(value)) return value.length > 0;\n return typeof value === \"string\" && value.length > 0;\n};\n\nexport const CommandParamsDialog = (props: CommandParamsDialogProps) => {\n const { request, renderParamField, prepareArgs, onClose, onRun } = props;\n const [values, setValues] = useState<Record<string, CommandParamValue>>({});\n const [error, setError] = useState<string | undefined>();\n const [submitting, setSubmitting] = useState(false);\n const entries = listCommandParamEntries(request?.record.command.params);\n\n useEffect(() => {\n setValues(buildCommandParamInitialValues(request?.record.command.params, request?.args, request?.context));\n setError(undefined);\n setSubmitting(false);\n }, [request]);\n\n const close = () => {\n if (submitting) return;\n onClose();\n };\n\n const setValue = (key: string, value: CommandParamValue) => {\n setValues((current) => ({ ...current, [key]: value }));\n };\n\n const run = async () => {\n if (!request || submitting) return;\n setSubmitting(true);\n setError(undefined);\n try {\n const params = normalizeCommandParamValues(request.record.command.params, values);\n const args = mergeCommandParamArgs(request.args, params);\n const preparedArgs = prepareArgs\n ? await prepareArgs({\n commandId: request.record.command.id,\n args,\n context: request.context,\n onArgsChange: (nextArgs) =>\n setValues(buildCommandParamInitialValues(request.record.command.params, nextArgs, request.context)),\n })\n : args;\n await onRun({\n commandId: request.record.command.id,\n args: preparedArgs,\n context: request.context,\n label: request.label,\n });\n onClose();\n } catch (caught) {\n setError(caught instanceof Error ? caught.message : \"Command failed.\");\n } finally {\n setSubmitting(false);\n }\n };\n\n const isValid = entries.every((entry) => !entry.required || isFilled(entry, values[entry.key]));\n\n return (\n <Dialog.Root\n open={request !== null}\n size=\"lg\"\n scrollBehavior=\"inside\"\n onOpenChange={(details) => !details.open && close()}\n >\n <Dialog.Backdrop />\n <Dialog.Positioner>\n <Dialog.Content\n display=\"flex\"\n flexDirection=\"column\"\n maxH=\"calc(100% - 48px)\"\n onKeyDownCapture={(event) => handleDialogAcceptShortcut(event, () => void run(), isValid && !submitting)}\n >\n <Dialog.Header>\n <Stack gap=\"2xs\" minW=\"0\">\n <Text textStyle=\"heading/M/semibold\">{request?.label ?? \"Run command\"}</Text>\n {request?.record.command.description ? (\n <Text textStyle=\"paragraph/XS/regular\" color=\"fg.muted\" truncate>\n {request.record.command.description}\n </Text>\n ) : null}\n </Stack>\n <Dialog.CloseTrigger asChild>\n <CloseButton size=\"sm\" disabled={submitting} />\n </Dialog.CloseTrigger>\n </Dialog.Header>\n <Dialog.Body flex=\"1\" minH=\"0\" p=\"0\">\n <ScrollArea h=\"full\" contentProps={{ px: \"sm\", py: \"md\" }}>\n {/* Fields carry the param editor's own row padding, so the form is a\n flush stack of rows rather than rows spaced twice over. */}\n <Stack gap=\"0\">\n {entries.map((entry) => {\n const fieldProps = {\n entry,\n value: values[entry.key],\n disabled: submitting,\n onChange: (value: CommandParamValue) => setValue(entry.key, value),\n };\n const custom = renderParamField?.({ ...fieldProps, context: request?.context });\n return <Fragment key={entry.key}>{custom ?? <CommandParamField {...fieldProps} />}</Fragment>;\n })}\n {error ? (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.error\" px=\"sm\" pt=\"xs\">\n {error}\n </Text>\n ) : null}\n </Stack>\n </ScrollArea>\n </Dialog.Body>\n <Dialog.Footer>\n <HStack gap=\"2\">\n <Button size=\"sm\" variant=\"ghost\" disabled={submitting} onClick={close}>\n Cancel\n </Button>\n <Button size=\"sm\" variant=\"primary\" disabled={!isValid} loading={submitting} onClick={() => void run()}>\n {request?.submitLabel ?? \"Run\"}\n </Button>\n </HStack>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Positioner>\n </Dialog.Root>\n );\n};\n","import type {\n RegisteredWidgetContribution,\n ResourceRef,\n WorkbenchCompositionAddablePanel,\n WorkbenchCore,\n WorkbenchPanelRegion,\n} from \"../../core\";\n\ninterface OpenPanelWidgetInput {\n workbench: WorkbenchCore;\n widget: RegisteredWidgetContribution;\n region: WorkbenchPanelRegion;\n resource?: ResourceRef;\n pinned?: boolean;\n open?: WorkbenchCompositionAddablePanel[\"open\"];\n}\n\nexport const getPanelLabel = (region: WorkbenchPanelRegion) => {\n if (region === \"secondary\") return \"Secondary\";\n if (region === \"side\") return \"Side\";\n return \"Main\";\n};\n\nexport const openPanelWidget = (input: OpenPanelWidgetInput) => {\n const { open, pinned, region, resource, widget, workbench } = input;\n\n if (open) {\n open(resource);\n } else if (widget.openCommand) {\n void workbench.commands.executeCommand(widget.openCommand.commandId, widget.openCommand.args, {\n source: \"panel-add\",\n ...(resource ? { resource } : {}),\n });\n } else {\n const widgetResource = widget.resourceKinds?.length || widget.canOpen ? resource : undefined;\n // Adding a tab from the region's \"+\" tray is the user asking for a tab that stays.\n // The resource only binds the tab to its location; the tab is the widget, so it\n // keeps the widget's title instead of inheriting the location resource's label.\n workbench.layout.openWidget(widget.id, {\n region,\n resource: widgetResource,\n title: widget.title,\n closable: true,\n pinned,\n role: region === \"main\" ? \"location\" : \"sub-panel\",\n tabRetention: \"persistent\",\n });\n }\n\n if (region === \"secondary\") {\n workbench.shell.setRegionOpen(\"secondary\", true);\n }\n if (region === \"side\" && workbench.sidePanel.getMode() === \"closed\") {\n workbench.sidePanel.setMode(\"attached\");\n }\n};\n","import type { PaletteEntry } from \"@pstdio/ui\";\nimport { type WorkbenchCore, workbenchPanelRegions } from \"../../core\";\nimport { getPanelLabel, openPanelWidget } from \"../region/panel-widget-open\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport type { WorkbenchCompositionPanelsByRegion } from \"../shared/use-workbench-composition-panels\";\nimport { COMMAND_MODE_ID } from \"./palette-view\";\n\nexport const createWorkbenchPanelWidgetPaletteEntries = (input: {\n workbench: WorkbenchCore;\n onClose: () => void;\n panelsByRegion?: WorkbenchCompositionPanelsByRegion;\n}) => {\n const { onClose, panelsByRegion, workbench } = input;\n const resource = workbench.getPrimaryResource();\n return workbenchPanelRegions.flatMap((region) =>\n (panelsByRegion?.[region] ?? workbench.composition.panelsFor(region)).addable.map((panel): PaletteEntry => {\n const widget = panel.contribution;\n const panelLabel = getPanelLabel(region);\n const label = `Open ${widget.title} in ${panelLabel} Panel`;\n\n return {\n id: `workbench-panel:${region}:${widget.id}`,\n mode: COMMAND_MODE_ID,\n label,\n searchText: `${label} ${widget.id}`,\n group: \"Panels\",\n icon: widget.icon ? <WorkbenchIcon name={widget.icon} /> : undefined,\n onActivate: () => {\n onClose();\n openPanelWidget({ workbench, widget, region, resource, pinned: panel.pinned, open: panel.open });\n },\n };\n }),\n );\n};\n","import { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { PaletteEntry } from \"@pstdio/ui\";\nimport type { ResourceBrowseEntry, WorkbenchCore } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { SEARCH_MODE_ID } from \"./palette-view\";\nexport interface WorkbenchResourcePaletteEntry extends PaletteEntry {\n resourceKey: string;\n mode: typeof SEARCH_MODE_ID;\n}\nconst createResourceEntry = (input: {\n workbench: WorkbenchCore;\n entry: ResourceBrowseEntry;\n onClose: () => void;\n}): WorkbenchResourcePaletteEntry | undefined => {\n const { entry, onClose, workbench } = input;\n const { resource } = entry;\n const label = entry.resource.label ?? resourceKey(entry.resource);\n const kind = workbench.resources.getKind(resource.type);\n const icon = resource.icon ?? kind?.icon;\n const activate = entry.activate;\n if (!activate) return undefined;\n return {\n id: `workbench-resource:${resourceKey(resource)}`,\n resourceKey: resourceKey(resource),\n mode: SEARCH_MODE_ID,\n label,\n searchText: entry.searchText ?? label,\n description: entry.description,\n group: entry.group,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n onActivate: () => {\n onClose();\n void Promise.resolve(activate(resource)).catch(() => undefined);\n },\n };\n};\nexport const createWorkbenchResourcePaletteEntries = (input: {\n workbench: WorkbenchCore;\n query: string;\n onClose: () => void;\n}) => {\n const { onClose, query, workbench } = input;\n return workbench.resources\n .listResources(query)\n .map((entry) => createResourceEntry({ workbench, entry, onClose }))\n .filter((entry): entry is WorkbenchResourcePaletteEntry => entry !== undefined);\n};\n","import type { PaletteEntry, ThemePreference, ThemePreferenceOption } from \"@pstdio/ui\";\nimport { WorkbenchIcon } from \"../shared/icon\";\n\nconst THEME_MODE_ID = \"theme\";\n\nexport interface WorkbenchThemePaletteEntry extends PaletteEntry {\n themePreference: ThemePreference;\n mode: typeof THEME_MODE_ID;\n}\n\nconst getThemeIconName = (preference: ThemePreference) => {\n if (preference === \"pstdio-light\") return \"Sun\";\n if (preference === \"pstdio-dark\") return \"Moon\";\n return \"Palette\";\n};\n\nconst getThemePreferenceLabel = (themePreference: ThemePreferenceOption) => themePreference.title ?? themePreference.id;\n\nexport const getThemePreferenceEntryIndex = (\n themePreference: ThemePreference,\n themePreferences: readonly ThemePreferenceOption[],\n) => {\n const index = themePreferences.findIndex((preference) => preference.id === themePreference);\n\n return Math.max(index, 0);\n};\n\nconst THEME_GROUP_LABELS = { light: \"Light\", dark: \"Dark\" } as const;\n\n// Group entries by appearance mode (lights first) so cycling the picker stays\n// within one mode instead of flashing light/dark/light on every step.\nconst byModeThenLabel = (a: ThemePreferenceOption, b: ThemePreferenceOption) => {\n if (a.mode !== b.mode) return a.mode === \"light\" ? -1 : 1;\n return getThemePreferenceLabel(a).localeCompare(getThemePreferenceLabel(b));\n};\n\nexport const createWorkbenchThemePreferencePaletteEntries = (input: {\n themePreference: ThemePreference;\n themePreferences: readonly ThemePreferenceOption[];\n setThemePreference: (themePreference: ThemePreference) => void;\n onClose: () => void;\n}) => {\n const { onClose, setThemePreference, themePreference, themePreferences } = input;\n\n return [...themePreferences].sort(byModeThenLabel).map((preference): WorkbenchThemePaletteEntry => {\n const label = getThemePreferenceLabel(preference);\n\n return {\n id: `theme:${preference.id}`,\n themePreference: preference.id,\n mode: THEME_MODE_ID,\n label,\n searchText: `theme color appearance ${preference.mode} ${preference.id} ${label}`,\n group: THEME_GROUP_LABELS[preference.mode],\n icon: <WorkbenchIcon name={getThemeIconName(preference.id)} />,\n isSelected: preference.id === themePreference,\n onActivate: () => {\n setThemePreference(preference.id);\n onClose();\n },\n };\n });\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { Palette, type PaletteEntry, PaletteShortcut, type ThemePreference, useThemePreference } from \"@pstdio/ui\";\nimport { type ReactNode, useEffect, useRef, useState } from \"react\";\nimport {\n type Command,\n type KeybindingSequence,\n type MenuPath,\n type RegisteredCommand,\n type RegisteredMenuItem,\n type WorkbenchCommandExecutionContext,\n type WorkbenchCore,\n workbenchCommandPaletteMenuPath,\n} from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchCompositionPanels } from \"../shared/use-workbench-composition-panels\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchCommandPaletteBackground } from \"../theme/workbench-theme-background\";\nimport { hasCommandParameters } from \"./command-palette-params\";\nimport { useWorkbenchCommandPaletteResourceEntries } from \"./command-palette-resources\";\nimport {\n type CommandParamFieldRenderer,\n CommandParamsDialog,\n type CommandParamsRequest,\n} from \"./command-params-dialog\";\nimport {\n COMMAND_MODE_ID,\n getPaletteInitialActiveIndex,\n getPaletteInputIcon,\n getPalettePlaceholder,\n getPaletteViewMode,\n getPaletteViewModes,\n isPickerPaletteView,\n isThemePaletteView,\n} from \"./palette-view\";\nimport { createWorkbenchPanelWidgetPaletteEntries } from \"./panel-widget-palette\";\nimport { createWorkbenchResourcePaletteEntries } from \"./resource-palette\";\nimport {\n createWorkbenchThemePreferencePaletteEntries,\n getThemePreferenceEntryIndex,\n type WorkbenchThemePaletteEntry,\n} from \"./theme-palette\";\n\nexport type { WorkbenchResourcePaletteEntry } from \"./resource-palette\";\nexport { createWorkbenchResourcePaletteEntries };\n\ninterface WorkbenchCommandPaletteProps {\n workbench: WorkbenchCore;\n open: boolean;\n menuPath?: MenuPath;\n initialQuery?: string;\n renderParamField?: CommandParamFieldRenderer;\n onClose: () => void;\n}\n\nexport interface WorkbenchCommandPaletteEntry extends PaletteEntry {\n commandId: string;\n mode: typeof COMMAND_MODE_ID;\n}\n\ninterface WorkbenchThemePreviewState {\n baseTheme: ThemePreference;\n}\n\ninterface WorkbenchCommandPaletteRecord {\n record: RegisteredCommand;\n action?: RegisteredMenuItem;\n}\n\nconst rollbackThemePreview = (\n setThemePreference: (themePreference: ThemePreference) => void,\n themePreviewRef: { current: WorkbenchThemePreviewState | null },\n) => {\n const preview = themePreviewRef.current;\n themePreviewRef.current = null;\n if (preview) setThemePreference(preview.baseTheme);\n};\n\nconst getCommandSearchText = (command: Command, label: string) =>\n [label, command.id, command.description, command.category].filter(Boolean).join(\" \");\n\nconst createShortcutByCommandId = (workbench: WorkbenchCore) =>\n new Map(\n workbench.keybindings.listCommandKeybindings().map((keybinding) => [keybinding.commandId, keybinding.keybinding]),\n );\n\nconst getShortcut = (binding: KeybindingSequence | undefined): ReactNode =>\n binding ? <PaletteShortcut binding={binding} /> : undefined;\n\nconst getCommandErrorMessage = (error: unknown) => (error instanceof Error ? error.message : \"Command failed.\");\n\nconst commandExecutionContext = (workbench: WorkbenchCore): WorkbenchCommandExecutionContext | undefined => {\n const resource = workbench.getPrimaryResource();\n return resource ? { resource } : undefined;\n};\n\nconst executePaletteCommand = async (input: {\n workbench: WorkbenchCore;\n commandId: string;\n args: unknown;\n context?: WorkbenchCommandExecutionContext;\n label: string;\n}) => {\n const { args, commandId, context, label, workbench } = input;\n try {\n await workbench.commands.executeCommand(commandId, args, context);\n } catch (error) {\n workbench.notifications.show({ level: \"error\", title: `${label} failed`, message: getCommandErrorMessage(error) });\n }\n};\n\nconst createEntry = (input: {\n workbench: WorkbenchCore;\n record: RegisteredCommand;\n action?: RegisteredMenuItem;\n shortcutByCommandId: Map<string, KeybindingSequence>;\n onClose: () => void;\n onRequestParams?: (request: CommandParamsRequest) => void;\n}): WorkbenchCommandPaletteEntry | null => {\n const { action, onClose, onRequestParams, record, workbench, shortcutByCommandId } = input;\n const args = action?.args;\n\n if (!workbench.commands.isCommandVisible(record.command.id, args)) return null;\n\n const label = action?.label ?? record.command.label;\n const icon = action?.icon ?? record.command.icon;\n const group = action?.group ?? record.command.category;\n\n return {\n id: `workbench-command:${record.command.id}`,\n commandId: record.command.id,\n mode: COMMAND_MODE_ID,\n label,\n searchText: getCommandSearchText(record.command, label),\n description: record.command.description,\n group,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n shortcut: getShortcut(shortcutByCommandId.get(record.command.id)),\n onActivate: () => {\n const context = commandExecutionContext(workbench);\n onClose();\n if (hasCommandParameters(record.command.params) && onRequestParams) {\n onRequestParams({ record, action, label, args, context });\n return;\n }\n void executePaletteCommand({ workbench, commandId: record.command.id, args, context, label });\n },\n };\n};\n\nconst getRecordGroup = (item: WorkbenchCommandPaletteRecord) =>\n item.action?.group ?? item.record.command.category ?? \"\";\n\nconst getRecordOrder = (item: WorkbenchCommandPaletteRecord) => item.action?.order ?? 0;\n\nconst byCommandPaletteGroup = (left: WorkbenchCommandPaletteRecord, right: WorkbenchCommandPaletteRecord) => {\n const groupComparison = getRecordGroup(left).localeCompare(getRecordGroup(right));\n if (groupComparison !== 0) return groupComparison;\n\n return getRecordOrder(left) - getRecordOrder(right);\n};\n\nconst listCommandRecords = (workbench: WorkbenchCore, menuPath?: MenuPath) => {\n if (!menuPath) {\n return workbench.commands.listCommands().map((record) => ({ record, action: undefined }));\n }\n\n return workbench.layout\n .listMenuItems(menuPath)\n .filter((action) => workbench.context.matches(action.when))\n .map((action) => {\n const record = workbench.commands.getCommand(action.commandId);\n return record ? { record, action } : null;\n })\n .filter((item): item is { record: RegisteredCommand; action: RegisteredMenuItem } => item !== null);\n};\n\nexport const createWorkbenchCommandPaletteEntries = (input: {\n workbench: WorkbenchCore;\n menuPath?: MenuPath;\n onClose: () => void;\n onRequestParams?: (request: CommandParamsRequest) => void;\n}) => {\n const { menuPath, onClose, onRequestParams, workbench } = input;\n const shortcutByCommandId = createShortcutByCommandId(workbench);\n\n return listCommandRecords(workbench, menuPath)\n .sort(byCommandPaletteGroup)\n .map(({ record, action }) =>\n createEntry({ workbench, record, action, shortcutByCommandId, onClose, onRequestParams }),\n )\n .filter((entry): entry is WorkbenchCommandPaletteEntry => entry !== null);\n};\n\nexport const WorkbenchCommandPalette = (props: WorkbenchCommandPaletteProps) => {\n const {\n workbench,\n open,\n menuPath = workbenchCommandPaletteMenuPath,\n initialQuery = \"\",\n renderParamField,\n onClose,\n } = props;\n const { themePreference, themePreferences, setThemePreference } = useThemePreference();\n const view = useWorkbenchStore(workbench.commandPalette.store, (state) => state.view);\n const themePreviewRef = useRef<WorkbenchThemePreviewState | null>(null);\n const paramsRequest = useWorkbenchStore(workbench.commandPalette.store, (state) => state.paramsRequest);\n const [liveQuery, setLiveQuery] = useState(initialQuery);\n const commandPaletteResourceEntries = useWorkbenchCommandPaletteResourceEntries({\n workbench,\n query: liveQuery,\n open,\n onClose,\n });\n const compositionPanels = useWorkbenchCompositionPanels(workbench);\n\n const closePalette = () => {\n rollbackThemePreview(setThemePreference, themePreviewRef);\n onClose();\n };\n\n const exitPickerView = () => {\n rollbackThemePreview(setThemePreference, themePreviewRef);\n workbench.commandPalette.open({ view: \"main\" });\n };\n\n const commitThemePreview = () => {\n themePreviewRef.current = null;\n onClose();\n };\n\n const commandEntries = createWorkbenchCommandPaletteEntries({\n workbench,\n menuPath,\n onClose,\n onRequestParams: (request) => workbench.commandPalette.requestParams(request),\n });\n const resourceEntries = createWorkbenchResourcePaletteEntries({ workbench, query: initialQuery, onClose });\n const themeEntries = createWorkbenchThemePreferencePaletteEntries({\n themePreference,\n themePreferences,\n setThemePreference,\n onClose: commitThemePreview,\n });\n const panelWidgetEntries = createWorkbenchPanelWidgetPaletteEntries({\n workbench,\n onClose,\n panelsByRegion: compositionPanels,\n });\n const entries = [\n ...resourceEntries,\n ...commandPaletteResourceEntries,\n ...commandEntries,\n ...panelWidgetEntries,\n ...themeEntries,\n ];\n const themeInitialActiveIndex = getThemePreferenceEntryIndex(themePreference, themePreferences);\n const isThemeView = isThemePaletteView(view);\n const initialActiveIndex = getPaletteInitialActiveIndex({\n view,\n themeInitialActiveIndex,\n });\n const activeViewMode = getPaletteViewMode(view);\n const activeViewModes = getPaletteViewModes(view);\n\n useEffect(() => {\n if (open) setLiveQuery(initialQuery);\n }, [initialQuery, open]);\n\n useEffect(() => {\n if (open && isThemeView) {\n if (!themePreviewRef.current) themePreviewRef.current = { baseTheme: themePreference };\n return;\n }\n\n rollbackThemePreview(setThemePreference, themePreviewRef);\n }, [isThemeView, open, setThemePreference, themePreference]);\n\n return (\n <>\n <Box\n display=\"contents\"\n css={{\n \"& [data-scope=dialog][data-part=backdrop], & [data-scope=dialog][data-part=positioner]\": {\n position: \"absolute\",\n inset: \"0\",\n },\n \"& [data-scope=dialog][data-part=positioner]\": {\n alignItems: \"center\",\n justifyContent: \"center\",\n h: \"full\",\n minH: \"0\",\n padding: \"md\",\n w: \"full\",\n },\n \"& [data-scope=dialog][data-part=content]\": { background: workbenchCommandPaletteBackground },\n }}\n >\n <Palette\n open={open}\n entries={entries}\n initialQuery={initialQuery}\n initialActiveIndex={initialActiveIndex}\n mode={activeViewMode}\n modes={activeViewModes}\n resetKey={`${view}:${initialQuery}`}\n inputIcon={({ mode }) => getPaletteInputIcon({ view, mode })}\n placeholder={({ mode }) => getPalettePlaceholder({ view, mode })}\n emptyLabel=\"No results found.\"\n onActiveEntryChange={(entry) => {\n if (!open || !isThemeView) return;\n const themeEntry = entry as WorkbenchThemePaletteEntry | null;\n if (!themeEntry?.themePreference || themeEntry.themePreference === themePreference) return;\n setThemePreference(themeEntry.themePreference);\n }}\n onQueryChange={setLiveQuery}\n onClose={closePalette}\n onEscape={(ctx) => {\n if (isPickerPaletteView(view)) {\n exitPickerView();\n return true;\n }\n\n if (ctx.query.length > 0) {\n ctx.setQuery(\"\");\n ctx.setActiveIndex(0);\n return true;\n }\n\n closePalette();\n return true;\n }}\n />\n </Box>\n <CommandParamsDialog\n request={paramsRequest}\n renderParamField={renderParamField}\n prepareArgs={(input) =>\n workbench.commands.prepareCommandArgs(input.commandId, input.args, input.context, input.onArgsChange)\n }\n onClose={() => workbench.commandPalette.clearParams()}\n onRun={(input) => executePaletteCommand({ workbench, ...input })}\n />\n </>\n );\n};\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\nimport { type ReactNode, useEffect, useRef } from \"react\";\nimport type { WorkbenchCore, WorkbenchFocusRegionId } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface WorkbenchFocusRegionProps extends BoxProps {\n workbench: WorkbenchCore;\n region: WorkbenchFocusRegionId;\n children: ReactNode;\n}\n\nexport const WorkbenchFocusRegion = (props: WorkbenchFocusRegionProps) => {\n const { workbench, region, children, ...boxProps } = props;\n const activeRegion = useWorkbenchStore(workbench.focus.store, (state) => state.activeRegion);\n const ref = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const element = ref.current;\n if (!element || activeRegion !== region) return;\n if (element.contains(document.activeElement)) return;\n element.focus({ preventScroll: true });\n }, [activeRegion, region]);\n\n return (\n <Box\n ref={ref}\n tabIndex={-1}\n outline=\"none\"\n onFocusCapture={(event) => {\n if (event.currentTarget.contains(event.target)) workbench.focus.setActiveRegion(region);\n }}\n {...boxProps}\n >\n {children}\n </Box>\n );\n};\n","import type {\n ContextKeyValue,\n MenuPath,\n RegisteredCommand,\n RegisteredMenuItem,\n ResourceRef,\n WorkbenchCore,\n} from \"../../core\";\nimport {\n createWorkbenchResourceContextValues,\n matchesContextExpression,\n workbenchResourceIdContextKey,\n workbenchResourceMetadataContextKey,\n workbenchResourceTypeContextKey,\n} from \"../../core\";\nimport { byContributionPriority } from \"../../core/shared/contributions/metadata\";\n\nexport interface WorkbenchMenuItem {\n id: string;\n commandId: string;\n label: string;\n description?: string;\n icon: string | undefined;\n iconSrc?: string;\n overflowLabel?: string;\n group: string | undefined;\n args: unknown;\n disabled: boolean;\n separatorBefore?: boolean;\n readOnly?: true;\n}\n\ninterface WorkbenchMenuItemState {\n itemsByPath: Record<string, RegisteredMenuItem[]>;\n commands: Record<string, RegisteredCommand>;\n contextValues: Record<string, ContextKeyValue>;\n}\n\nconst menuPathKey = (path: MenuPath) => path.join(\"/\");\n\ninterface WorkbenchMenuItemContext {\n resource?: ResourceRef | undefined;\n}\n\nconst workbenchResourceMetadataContextKeyPrefix = workbenchResourceMetadataContextKey(\"\");\n\nconst isWorkbenchResourceContextKey = (key: string) =>\n key === workbenchResourceTypeContextKey ||\n key === workbenchResourceIdContextKey ||\n key.startsWith(workbenchResourceMetadataContextKeyPrefix);\n\nconst omitWorkbenchResourceContextValues = (values: Record<string, ContextKeyValue>) => {\n const result: Record<string, ContextKeyValue> = {};\n\n for (const [key, value] of Object.entries(values)) {\n if (!isWorkbenchResourceContextKey(key)) result[key] = value;\n }\n\n return result;\n};\n\nconst resolveContextValues = (state: WorkbenchMenuItemState, context: WorkbenchMenuItemContext | undefined) => {\n const baseContextValues = context ? omitWorkbenchResourceContextValues(state.contextValues) : state.contextValues;\n\n return {\n ...baseContextValues,\n ...createWorkbenchResourceContextValues(context?.resource),\n };\n};\n\nexport const listWorkbenchMenuItemsFromState = (\n state: WorkbenchMenuItemState,\n menuPath: MenuPath,\n context?: WorkbenchMenuItemContext,\n) => {\n const contextValues = resolveContextValues(state, context);\n\n return [...(state.itemsByPath[menuPathKey(menuPath)] ?? [])]\n .sort((left, right) => {\n const leftOrder = left.order ?? 0;\n const rightOrder = right.order ?? 0;\n return leftOrder - rightOrder || byContributionPriority(left, right);\n })\n .filter((action) => matchesContextExpression(contextValues, action.when))\n .map((action, index) => {\n const record = state.commands[action.commandId];\n if (!record) return null;\n\n const args = action.args;\n if (record.handler.isVisible?.(args) === false) return null;\n\n return {\n id: `${action.commandId}:${index}`,\n commandId: record.command.id,\n label: action.label ?? record.command.label,\n ...((action.description ?? record.command.description)\n ? { description: action.description ?? record.command.description }\n : {}),\n icon: action.icon ?? record.command.icon,\n ...(action.iconSrc ? { iconSrc: action.iconSrc } : {}),\n ...(action.overflowLabel ? { overflowLabel: action.overflowLabel } : {}),\n group: action.group,\n args,\n disabled: action.readOnly === true || record.handler.isEnabled?.(args) === false,\n ...(action.readOnly ? { readOnly: true } : {}),\n } satisfies WorkbenchMenuItem;\n })\n .filter((item): item is WorkbenchMenuItem => item !== null);\n};\n\nexport const listWorkbenchMenuItems = (\n workbench: WorkbenchCore,\n menuPath: MenuPath,\n context?: WorkbenchMenuItemContext,\n) =>\n listWorkbenchMenuItemsFromState(\n {\n itemsByPath: workbench.layout.menuStore.getState().itemsByPath,\n commands: workbench.commands.store.getState().commands,\n contextValues: workbench.context.store.getState().values,\n },\n menuPath,\n context,\n );\n","import type { WorkbenchMenuItem } from \"../menus/menu-items\";\n\nexport type WorkbenchHeaderOverflowItem = WorkbenchMenuItem & { separatorBefore?: boolean };\n\nexport interface WorkbenchHeaderActionGroups {\n inlineItems: WorkbenchMenuItem[];\n overflowItems: WorkbenchHeaderOverflowItem[];\n}\n\nconst isKernelAction = (item: WorkbenchMenuItem) => item.group === \"kernel\";\n\nconst isOverflowAction = (item: WorkbenchMenuItem) => item.group === \"overflow\" || isKernelAction(item);\n\nconst withLeadingSeparator = (items: WorkbenchMenuItem[], enabled: boolean) => {\n if (!enabled || items.length === 0) return items;\n\n const [first, ...rest] = items;\n if (!first) return rest;\n\n return [{ ...first, separatorBefore: true as const }, ...rest];\n};\n\nconst resolveOverflowItems = (items: WorkbenchMenuItem[]) => {\n const regularItems = items.filter((item) => !isKernelAction(item));\n const kernelItems = items.filter(isKernelAction);\n\n return [...regularItems, ...withLeadingSeparator(kernelItems, regularItems.length > 0)];\n};\n\nexport const resolveWorkbenchHeaderActionGroups = (items: WorkbenchMenuItem[]) =>\n ({\n inlineItems: items.filter((item) => !isOverflowAction(item)),\n overflowItems: resolveOverflowItems(items.filter(isOverflowAction)),\n }) satisfies WorkbenchHeaderActionGroups;\n\nexport const resolveWorkbenchHeaderOverflowLabel = (items: WorkbenchMenuItem[]) =>\n items.find((item) => item.overflowLabel)?.overflowLabel ?? \"More header actions\";\n","import { Button, HStack, IconButton, Menu, Portal } from \"@chakra-ui/react\";\nimport { ListRow, Tooltip } from \"@pstdio/ui\";\nimport { Fragment } from \"react\";\nimport {\n getAnchorResource,\n type MenuPath,\n type ResourceRef,\n type WorkbenchCommandExecutionContext,\n type WorkbenchCore,\n} from \"../../core\";\nimport { hasCommandParameters } from \"../command-palette/command-palette-params\";\nimport { listWorkbenchMenuItemsFromState, type WorkbenchMenuItem } from \"../menus/menu-items\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { resolveWorkbenchHeaderActionGroups, resolveWorkbenchHeaderOverflowLabel } from \"./header-action-items\";\n\ninterface WorkbenchHeaderActionsProps {\n workbench: WorkbenchCore;\n menuPath: MenuPath;\n controlSize?: \"2xs\" | \"xs\";\n}\n\nconst commandExecutionContext = (resource: ResourceRef | undefined): WorkbenchCommandExecutionContext | undefined =>\n resource ? { resource } : undefined;\n\nconst WorkbenchInlineHeaderAction = (props: {\n item: WorkbenchMenuItem;\n onSelect: (item: WorkbenchMenuItem) => void;\n controlSize: \"2xs\" | \"xs\";\n}) => {\n const { controlSize, item, onSelect } = props;\n const onClick = () => onSelect(item);\n\n if (item.group === \"primary\" || !item.icon) {\n return (\n <Button\n key={item.id}\n size={controlSize}\n variant={item.group === \"primary\" ? \"primary\" : \"subtle\"}\n disabled={item.disabled}\n onClick={onClick}\n >\n {item.icon ? <WorkbenchIcon name={item.icon} size={14} /> : null}\n {item.label}\n </Button>\n );\n }\n\n return (\n <Tooltip key={item.id} content={item.label}>\n <IconButton size={controlSize} variant=\"ghost\" aria-label={item.label} disabled={item.disabled} onClick={onClick}>\n <WorkbenchIcon name={item.icon} size={16} />\n </IconButton>\n </Tooltip>\n );\n};\n\nexport const WorkbenchHeaderActions = (props: WorkbenchHeaderActionsProps) => {\n const { controlSize = \"xs\", menuPath, workbench } = props;\n const commands = useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n const contextValues = useWorkbenchStore(workbench.context.store, (state) => state.values);\n const itemsByPath = useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n const resource = useWorkbenchStore(workbench.layout.store, (state) => getAnchorResource(state.layout, \"primary\"));\n const items = listWorkbenchMenuItemsFromState({ itemsByPath, commands, contextValues }, menuPath, { resource });\n const { inlineItems, overflowItems } = resolveWorkbenchHeaderActionGroups(items);\n\n // Actions whose command declares parameters collect that input through the shared\n // command params dialog (opened via the command palette store) before running;\n // parameterless actions execute immediately.\n const onSelect = (item: WorkbenchMenuItem) => {\n const command = commands[item.commandId]?.command;\n const args = item.args;\n const context = commandExecutionContext(resource);\n if (command && hasCommandParameters(command.params)) {\n workbench.commandPalette.requestParams({ record: { command }, label: item.label, args, context });\n return;\n }\n void workbench.commands.executeCommand(item.commandId, args, context).catch(() => undefined);\n };\n\n if (items.length === 0) return null;\n\n return (\n <HStack flexShrink={0} gap=\"2xs\" minW=\"0\">\n {inlineItems.map((item) => (\n <WorkbenchInlineHeaderAction key={item.id} item={item} onSelect={onSelect} controlSize={controlSize} />\n ))}\n {overflowItems.length > 0 ? (\n <Menu.Root>\n <Menu.Trigger asChild>\n <IconButton\n size={controlSize}\n variant=\"ghost\"\n aria-label={resolveWorkbenchHeaderOverflowLabel(overflowItems)}\n >\n <WorkbenchIcon name=\"MoreHorizontal\" size={16} />\n </IconButton>\n </Menu.Trigger>\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"220px\" bg=\"bg\">\n {overflowItems.map((item) => (\n <Fragment key={item.id}>\n {item.separatorBefore ? <Menu.Separator /> : null}\n <Menu.Item value={item.id} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n id={item.id}\n label={item.label}\n icon={item.icon ? <WorkbenchIcon name={item.icon} size={16} /> : undefined}\n disabled={item.disabled}\n onActivate={() => onSelect(item)}\n />\n </Menu.Item>\n </Fragment>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n ) : null}\n </HStack>\n );\n};\n","import { type UseHotkeyDefinition, useHotkeys } from \"@tanstack/react-hotkeys\";\nimport type { WorkbenchHotkeyRegistration } from \"./workbench-keybinding-dispatcher\";\n\nexport const useTanStackWorkbenchHotkeys = (registrations: WorkbenchHotkeyRegistration[]) => {\n const hotkeys: UseHotkeyDefinition[] = registrations.map((registration) => ({\n hotkey: registration.hotkey as UseHotkeyDefinition[\"hotkey\"],\n callback: (event) => {\n event.preventDefault();\n void registration.execute();\n },\n options: {\n enabled: registration.enabled,\n ignoreInputs: registration.ignoreInputs,\n preventDefault: true,\n stopPropagation: true,\n },\n }));\n\n useHotkeys(hotkeys, {\n ignoreInputs: true,\n preventDefault: true,\n stopPropagation: true,\n });\n};\n","import { useEffect, useState } from \"react\";\nimport { getKeybindingSteps, type KeybindingSequence, type WorkbenchCore } from \"../../core\";\nimport { useTanStackWorkbenchHotkeys } from \"./tanstack-hotkey-adapter\";\n\nexport interface WorkbenchHotkeyRegistration {\n id: string;\n hotkey: KeybindingSequence;\n enabled: boolean;\n ignoreInputs: boolean;\n execute(): Promise<unknown>;\n}\n\nexport interface CreateWorkbenchHotkeyRegistrationsInput {\n workbench: WorkbenchCore;\n disabled?: boolean;\n commandIds?: readonly string[];\n}\n\nexport interface WorkbenchKeybindingDispatcherProps {\n workbench: WorkbenchCore;\n disabled?: boolean;\n commandIds?: readonly string[];\n}\n\nconst keyAliases: Record<string, string> = {\n alt: \"Alt\",\n cmd: \"Meta\",\n command: \"Meta\",\n ctrl: \"Control\",\n control: \"Control\",\n meta: \"Meta\",\n mod: \"Mod\",\n option: \"Alt\",\n shift: \"Shift\",\n};\n\nconst normalizeWorkbenchKeybindingStep = (keybinding: string) =>\n keybinding\n .split(\"+\")\n .map((part) => {\n const trimmed = part.trim();\n const alias = keyAliases[trimmed.toLowerCase()];\n if (alias) return alias;\n if (trimmed.length === 1) return trimmed.toUpperCase();\n return trimmed.slice(0, 1).toUpperCase() + trimmed.slice(1);\n })\n .join(\"+\");\n\nexport const normalizeWorkbenchKeybinding = (keybinding: KeybindingSequence): KeybindingSequence => {\n const steps = getKeybindingSteps(keybinding).map(normalizeWorkbenchKeybindingStep);\n return steps.length === 1 ? (steps[0] ?? \"\") : steps;\n};\n\nexport const createWorkbenchHotkeyRegistrations = (input: CreateWorkbenchHotkeyRegistrationsInput) => {\n const { workbench, disabled = false, commandIds } = input;\n const allowedCommandIds = commandIds ? new Set(commandIds) : undefined;\n\n return workbench.keybindings.listActiveKeybindings().flatMap((keybinding, index) => {\n const action = keybinding.action;\n if (action.kind === \"command\") {\n if (allowedCommandIds && !allowedCommandIds.has(action.commandId)) return [];\n const record = workbench.commands.getCommand(action.commandId);\n if (!record) return [];\n const enabled =\n !disabled &&\n workbench.commands.isCommandVisible(record.command.id, action.args) &&\n workbench.commands.isCommandEnabled(record.command.id, action.args);\n return [\n {\n id: record.command.id,\n hotkey: normalizeWorkbenchKeybinding(keybinding.keybinding),\n enabled,\n ignoreInputs: true,\n execute: () => workbench.navigation.openTarget(action),\n } satisfies WorkbenchHotkeyRegistration,\n ];\n }\n if (allowedCommandIds) return [];\n return [\n {\n id: `workbench.keybinding.${index}`,\n hotkey: normalizeWorkbenchKeybinding(keybinding.keybinding),\n enabled: !disabled,\n ignoreInputs: true,\n execute: () => workbench.navigation.openTarget(action),\n } satisfies WorkbenchHotkeyRegistration,\n ];\n });\n};\n\nexport const WorkbenchKeybindingDispatcher = (props: WorkbenchKeybindingDispatcherProps) => {\n const { workbench, disabled, commandIds } = props;\n const [registrations, setRegistrations] = useState(() =>\n createWorkbenchHotkeyRegistrations({ workbench, disabled, commandIds }),\n );\n useEffect(() => {\n const refresh = () => setRegistrations(createWorkbenchHotkeyRegistrations({ workbench, disabled, commandIds }));\n const subscriptions = [workbench.keybindings.store, workbench.context.store, workbench.commands.store].map(\n (store) => store.subscribe(refresh),\n );\n refresh();\n return () => {\n for (const unsubscribe of subscriptions) unsubscribe();\n };\n }, [workbench, disabled, commandIds]);\n useTanStackWorkbenchHotkeys(registrations);\n\n return null;\n};\n","import { Box, HStack, Text } from \"@chakra-ui/react\";\nimport { PaletteShortcut, type TreeListAction, type TreeListActionMenuItem } from \"@pstdio/ui\";\nimport type {\n ContextKeyValue,\n KeybindingSequence,\n MenuPath,\n RegisteredCommand,\n TreeAction,\n WorkbenchCommandExecutionContext,\n WorkbenchCoreContributionContext,\n} from \"../../../core\";\nimport { createWorkbenchResourceContextValues, matchesContextExpression } from \"../../../core\";\nimport { hasCommandParameters } from \"../../command-palette/command-palette-params\";\nimport type { CommandParamsRequest } from \"../../command-palette/command-params-dialog\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\n\nexport interface TreeActionParamsRequest {\n request: CommandParamsRequest;\n run: (args: unknown) => Promise<void>;\n}\n\ninterface CreateTreeActionItemsInput {\n actions?: TreeAction[];\n workbench: WorkbenchCoreContributionContext;\n context?: WorkbenchCommandExecutionContext;\n onCommandError?: (error: unknown) => void;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n}\n\ninterface CreateTreeMenuItemsInput {\n workbench: WorkbenchCoreContributionContext;\n menuPath: MenuPath;\n context?: WorkbenchCommandExecutionContext;\n onCommandError?: (error: unknown) => void;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n}\n\ninterface CreateTreeContextMenuItemsInput {\n actions?: TreeAction[];\n menuPath?: MenuPath;\n workbench: WorkbenchCoreContributionContext;\n context?: WorkbenchCommandExecutionContext;\n onCommandError?: (error: unknown) => void;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n}\n\nconst commandContextValues = (\n workbench: WorkbenchCoreContributionContext,\n context: WorkbenchCommandExecutionContext | undefined,\n): Record<string, ContextKeyValue> => ({\n ...workbench.context.snapshot(),\n ...createWorkbenchResourceContextValues(context?.resource),\n});\n\nconst isRegisteredCommandVisible = (\n record: RegisteredCommand,\n args: unknown,\n contextValues: Record<string, ContextKeyValue>,\n) => {\n if (!matchesContextExpression(contextValues, record.command.when)) return false;\n return record.handler.isVisible?.(args) !== false;\n};\n\nconst executeTreeAction = async (input: {\n action: TreeAction;\n workbench: WorkbenchCoreContributionContext;\n args?: unknown;\n context?: WorkbenchCommandExecutionContext;\n}) => {\n const { action, args, context, workbench } = input;\n const record = action.commandId ? workbench.commands.getCommand(action.commandId) : undefined;\n const resolvedArgs = args ?? action.args;\n await (record\n ? workbench.commands.executeCommand(record.command.id, resolvedArgs, context)\n : action.run?.(resolvedArgs));\n};\n\nconst runTreeAction = async (input: {\n action: TreeAction;\n workbench: WorkbenchCoreContributionContext;\n onCommandError?: (error: unknown) => void;\n args?: unknown;\n context?: WorkbenchCommandExecutionContext;\n}) => {\n const { action, args, context, onCommandError, workbench } = input;\n try {\n await executeTreeAction({ action, args, context, workbench });\n } catch (error) {\n onCommandError?.(error);\n throw error;\n }\n};\n\nconst resolveTreeActionCommand = (workbench: WorkbenchCoreContributionContext, action: TreeAction) => {\n if (!action.commandId) return undefined;\n return workbench.commands.getCommand(action.commandId);\n};\n\nconst isTreeActionVisible = (\n workbench: WorkbenchCoreContributionContext,\n action: TreeAction,\n contextValues: Record<string, ContextKeyValue>,\n) => {\n if (!matchesContextExpression(contextValues, action.when)) return false;\n\n const record = resolveTreeActionCommand(workbench, action);\n if (action.commandId && !record) return false;\n\n return record ? isRegisteredCommandVisible(record, action.args, contextValues) : true;\n};\n\nconst isTreeActionEnabled = (workbench: WorkbenchCoreContributionContext, action: TreeAction) => {\n if (action.disabled) return false;\n\n const record = resolveTreeActionCommand(workbench, action);\n return record ? workbench.commands.isCommandEnabled(record.command.id, action.args) : true;\n};\n\nconst createMenuIcon = (input: { icon?: string; iconSrc?: string }) => {\n const { icon, iconSrc } = input;\n if (iconSrc) {\n return (\n <Box boxSize=\"16px\" bg=\"white\" borderRadius=\"4px\" p=\"1px\" display=\"grid\" placeItems=\"center\">\n <img\n src={iconSrc}\n alt=\"\"\n aria-hidden=\"true\"\n width={14}\n height={14}\n style={{ display: \"block\", width: \"100%\", height: \"100%\", objectFit: \"contain\" }}\n />\n </Box>\n );\n }\n\n return icon ? <WorkbenchIcon name={icon} /> : undefined;\n};\n\nconst createMenuEndContent = (input: { external?: boolean; binding?: KeybindingSequence }) => {\n const { binding, external } = input;\n if (external) return <WorkbenchIcon name=\"ArrowUpRight\" size={14} color=\"fg.muted\" />;\n if (binding) return <PaletteShortcut binding={binding} />;\n return undefined;\n};\n\nconst withLeadingSeparator = <T extends TreeListActionMenuItem>(items: T[], enabled: boolean) => {\n if (!enabled || items.length === 0) return items;\n const [first, ...rest] = items;\n return [{ ...first, separatorBefore: true }, ...rest];\n};\n\nconst isKernelMenuAction = (group: string | undefined) => group === \"kernel\";\n\nconst createTreeMenuItemGroups = (input: CreateTreeMenuItemsInput) => {\n const { context, menuPath, onCommandError, onRequestParams, workbench } = input;\n const contextValues = commandContextValues(workbench, context);\n const shortcuts = new Map(workbench.keybindings.listCommandKeybindings().map((k) => [k.commandId, k.keybinding]));\n const regularItems: TreeListActionMenuItem[] = [];\n const kernelItems: TreeListActionMenuItem[] = [];\n\n for (const [index, action] of workbench.layout.listMenuItems(menuPath).entries()) {\n if (!matchesContextExpression(contextValues, action.when)) continue;\n\n const record = workbench.commands.getCommand(action.commandId);\n if (!record) continue;\n\n const args = action.args;\n if (!isRegisteredCommandVisible(record, args, contextValues)) continue;\n\n const icon = action.icon ?? record.command.icon;\n const binding = shortcuts.get(record.command.id);\n const readOnly = action.readOnly === true;\n const label = action.label ?? record.command.label;\n const requestParams =\n hasCommandParameters(record.command.params) && onRequestParams\n ? () =>\n onRequestParams({\n request: {\n record: { command: record.command },\n label,\n args,\n context,\n },\n run: async (nextArgs) => {\n try {\n await workbench.commands.executeCommand(record.command.id, nextArgs, context);\n } catch (error) {\n onCommandError?.(error);\n throw error;\n }\n },\n })\n : undefined;\n const item = {\n id: `${action.commandId}:${index}`,\n label,\n commandId: action.sourceCommandId ?? record.command.id,\n description: action.description ?? record.command.description,\n icon: createMenuIcon({ icon, iconSrc: action.iconSrc }),\n endContent: createMenuEndContent({ external: action.external, binding }),\n disabled: readOnly || !workbench.commands.isCommandEnabled(record.command.id, args),\n readOnly,\n onAction: readOnly\n ? undefined\n : () => {\n if (requestParams) {\n requestParams();\n return;\n }\n void workbench.commands\n .executeCommand(record.command.id, args, context)\n .catch((error) => onCommandError?.(error));\n },\n };\n\n if (isKernelMenuAction(action.group)) {\n kernelItems.push(item);\n } else {\n regularItems.push(item);\n }\n }\n\n return { regularItems, kernelItems };\n};\n\nexport const createTreeMenuItems = (input: CreateTreeMenuItemsInput) => {\n const { regularItems, kernelItems } = createTreeMenuItemGroups(input);\n return [...regularItems, ...withLeadingSeparator(kernelItems, regularItems.length > 0)];\n};\n\nconst createTreeActionMenuItems = (input: CreateTreeContextMenuItemsInput) => {\n const { actions = [], context, onCommandError, onRequestParams, workbench } = input;\n const contextValues = commandContextValues(workbench, context);\n const shortcuts = new Map(workbench.keybindings.listCommandKeybindings().map((k) => [k.commandId, k.keybinding]));\n const items: TreeListActionMenuItem[] = [];\n\n for (const action of actions) {\n if (!isTreeActionVisible(workbench, action, contextValues)) continue;\n\n const record = resolveTreeActionCommand(workbench, action);\n const label = action.label ?? record?.command.label;\n if (!label) continue;\n\n const icon = action.icon ?? record?.command.icon;\n const disabled = !isTreeActionEnabled(workbench, action);\n const binding = action.commandId ? shortcuts.get(action.commandId) : undefined;\n const requestParams =\n hasCommandParameters(action.params) && onRequestParams\n ? () =>\n onRequestParams({\n request: {\n record: { command: { id: action.commandId ?? action.id, label, params: action.params } },\n label,\n submitLabel: action.submitLabel,\n args: action.args,\n context,\n },\n run: (args) => runTreeAction({ action, args, context, workbench, onCommandError }),\n })\n : undefined;\n items.push({\n id: action.id,\n label,\n commandId: record?.command.id ?? action.commandId,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n endContent: binding ? <PaletteShortcut binding={binding} /> : undefined,\n disabled,\n onAction: () => {\n if (disabled) return;\n if (requestParams) {\n requestParams();\n return;\n }\n void runTreeAction({ action, context, workbench, onCommandError }).catch(() => undefined);\n },\n });\n }\n\n return items;\n};\n\nexport const createTreeContextMenuItems = (input: CreateTreeContextMenuItemsInput) => {\n const actionItems = createTreeActionMenuItems(input);\n const { regularItems, kernelItems } = input.menuPath\n ? createTreeMenuItemGroups({ ...input, menuPath: input.menuPath })\n : { regularItems: [], kernelItems: [] };\n const visibleRegularItems = [...actionItems, ...regularItems];\n\n return [...visibleRegularItems, ...withLeadingSeparator(kernelItems, visibleRegularItems.length > 0)];\n};\n\nexport const createTreeActionItems = (input: CreateTreeActionItemsInput) => {\n const { actions = [], context, onCommandError, onRequestParams, workbench } = input;\n const contextValues = commandContextValues(workbench, context);\n const shortcuts = new Map(workbench.keybindings.listCommandKeybindings().map((k) => [k.commandId, k.keybinding]));\n const items: TreeListAction[] = [];\n\n for (const action of actions) {\n if (!isTreeActionVisible(workbench, action, contextValues) || !isTreeActionEnabled(workbench, action)) continue;\n\n const record = resolveTreeActionCommand(workbench, action);\n const label = action.label ?? record?.command.label;\n if (!label) continue;\n\n const icon = action.icon ?? record?.command.icon;\n const binding = action.commandId ? shortcuts.get(action.commandId) : undefined;\n const requestParams =\n hasCommandParameters(action.params) && onRequestParams\n ? () =>\n onRequestParams({\n request: {\n record: { command: { id: action.commandId ?? action.id, label, params: action.params } },\n label,\n submitLabel: action.submitLabel,\n args: action.args,\n context,\n },\n run: (args) => runTreeAction({ action, args, context, workbench, onCommandError }),\n })\n : undefined;\n items.push({\n id: action.id,\n label,\n icon: icon ? <WorkbenchIcon name={icon} /> : undefined,\n tooltip: binding ? (\n <HStack gap=\"2\">\n <Text>{label}</Text>\n <PaletteShortcut binding={binding} />\n </HStack>\n ) : undefined,\n onAction: () => {\n if (requestParams) {\n requestParams();\n return;\n }\n void runTreeAction({ action, context, workbench, onCommandError }).catch(() => undefined);\n },\n });\n }\n\n return items;\n};\n","import { Icon } from \"@chakra-ui/react\";\nimport type { ResourceContextAction, TreeListActionMenuItem } from \"@pstdio/ui\";\nimport type { ResourceRef, WorkbenchCoreContributionContext } from \"../../core\";\nimport { resourceContextMenuPath } from \"../../core\";\nimport { createTreeContextMenuItems } from \"../renderers/tree/tree-actions\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\nconst toResourceContextAction = (item: TreeListActionMenuItem): ResourceContextAction => ({\n key: item.id,\n label: item.label,\n commandId: item.commandId,\n icon: typeof item.icon === \"function\" ? <Icon as={item.icon} boxSize=\"16px\" /> : item.icon,\n endContent: item.endContent,\n isDisabled: item.disabled,\n separatorBefore: item.separatorBefore,\n onClick: () => item.onAction?.(),\n});\nexport const createWorkbenchResourceActions = (workbench: WorkbenchCoreContributionContext, resource: ResourceRef) =>\n createTreeContextMenuItems({\n menuPath: resourceContextMenuPath(resource.type),\n workbench,\n context: { resource },\n onRequestParams: ({ request }) => workbench.commandPalette.requestParams(request),\n }).map(toResourceContextAction);\nexport const useWorkbenchResourceActionResolver = (workbench: WorkbenchCoreContributionContext) => {\n useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n useWorkbenchStore(workbench.context.store, (state) => state.values);\n useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n return (resource: ResourceRef) => createWorkbenchResourceActions(workbench, resource);\n};\n","import type { ToastStatusChangeDetails } from \"@chakra-ui/react\";\nimport { toaster } from \"@pstdio/ui\";\nimport { useEffect, useRef } from \"react\";\nimport type { RegisteredWorkbenchNotification, WorkbenchCore, WorkbenchNotificationAction } from \"../../core\";\n\n// Bridges `workbench.notifications` into the shared `@pstdio/ui` toaster singleton.\n// The Workbench shell renders the viewport once alongside the rest of its chrome.\ninterface WorkbenchNotificationHostProps {\n workbench: WorkbenchCore;\n}\n\nconst executeNotificationAction = (input: { action: WorkbenchNotificationAction; workbench: WorkbenchCore }) => {\n const { action, workbench } = input;\n void workbench.commands.executeCommand(action.commandId, action.args).catch(() => undefined);\n};\n\nexport const WorkbenchNotificationHost = (props: WorkbenchNotificationHostProps) => {\n const { workbench } = props;\n const shownNotificationIds = useRef(new Set<string>());\n\n useEffect(() => {\n const showNotification = (notification: RegisteredWorkbenchNotification) => {\n const action = notification.actions?.[0];\n const toastAction = action\n ? {\n label: action.title,\n onClick: () => executeNotificationAction({ action, workbench }),\n }\n : undefined;\n const toastOptions = {\n id: notification.id,\n type: notification.level,\n title: notification.title,\n description: notification.message,\n action: toastAction,\n closable: true,\n onStatusChange: (details: ToastStatusChangeDetails) => {\n if (details.status === \"unmounted\") workbench.notifications.dismiss(notification.id);\n },\n };\n\n if (shownNotificationIds.current.has(notification.id)) {\n toaster.update(notification.id, toastOptions);\n return;\n }\n\n shownNotificationIds.current.add(notification.id);\n toaster.create(toastOptions);\n };\n\n for (const notification of workbench.notifications.listNotifications()) showNotification(notification);\n\n const subscription = workbench.notifications.subscribe((event) => {\n if (event.type === \"show\") {\n showNotification(event.notification);\n return;\n }\n\n shownNotificationIds.current.delete(event.id);\n toaster.dismiss(event.id);\n });\n\n return () => {\n subscription.dispose();\n for (const id of shownNotificationIds.current) toaster.dismiss(id);\n shownNotificationIds.current.clear();\n };\n }, [workbench]);\n\n return null;\n};\n","import type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"./use-workbench-store\";\n\nexport const useWorkbenchLocationResource = (workbench: WorkbenchCore) =>\n useWorkbenchStore(workbench.pages.store, (state) => state.location?.resource);\n\nexport const useWorkbenchActiveModeId = (workbench: WorkbenchCore) =>\n useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n","import type { WorkbenchWidgetPlacement } from \"../../core\";\n\nexport const retainViewPlacements = (\n previous: WorkbenchWidgetPlacement[],\n current: WorkbenchWidgetPlacement[],\n registeredViews: ReadonlySet<string>,\n) => {\n const retained = new Map(\n previous\n .filter((placement) => placement.viewId && registeredViews.has(placement.viewId))\n .map((placement) => [placement.widgetId, placement]),\n );\n for (const placement of current) {\n const existing = previous.find((entry) => entry.widgetId === placement.widgetId);\n const unchanged =\n existing &&\n Object.keys(existing).length === Object.keys(placement).length &&\n Object.entries(placement).every(([key, value]) => Reflect.get(existing, key) === value);\n retained.set(placement.widgetId, unchanged ? existing : placement);\n }\n const next = [...retained.values()];\n return next.length === previous.length && next.every((placement, index) => placement === previous[index])\n ? previous\n : next;\n};\n","import { useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchWidgetPlacement } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { retainViewPlacements } from \"./retained-view-placements\";\n\n// A region owns live views; the active location owns only their visibility.\n// Keep this cache in React so it is discarded with the workbench, never persisted.\nexport const useRetainedViewPlacements = (workbench: WorkbenchCore, current: WorkbenchWidgetPlacement[]) => {\n const views = useWorkbenchStore(workbench.views.store, (state) => state.views);\n const [previous, setPrevious] = useState(current);\n const placements = retainViewPlacements(previous, current, new Set(Object.keys(views)));\n if (previous !== placements) setPrevious(placements);\n return placements;\n};\n","import { Box, Center } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport type {\n RegisteredPlaceholderContribution,\n RegisteredWidgetContribution,\n RegisteredWorkbenchView,\n WorkbenchCore,\n WorkbenchPanelContribution,\n WorkbenchRegion,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport { getWorkbenchRenderers } from \"../../core\";\nimport { toPanelContribution, toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface WorkbenchWidgetHostProps {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n widget?: RegisteredWidgetContribution | RegisteredPlaceholderContribution;\n region?: WorkbenchRegion;\n}\n\nconst WorkbenchWidgetFallback = (props: { label: string }) => {\n const { label } = props;\n\n return (\n <Center h=\"full\" w=\"full\" color=\"fg.muted\" p=\"md\" aria-label={label}>\n <WorkbenchIcon name=\"circle-alert\" size={20} />\n </Center>\n );\n};\n\nconst WorkbenchRenderedWidgetFrame = (props: { children: ReactNode }) => {\n const { children } = props;\n\n return (\n <Box flex=\"1\" minW=\"0\" minH=\"0\" w=\"full\" h=\"full\" overflow=\"hidden\">\n {children}\n </Box>\n );\n};\n\nconst noopRefresh = () => undefined;\n\nconst toHostedPanel = (input: {\n placement: WorkbenchWidgetPlacement;\n region?: WorkbenchRegion;\n view?: RegisteredWorkbenchView;\n widget?: RegisteredWidgetContribution | RegisteredPlaceholderContribution;\n}) => {\n if (input.view) {\n return {\n id: input.placement.contributionId,\n title: input.placement.title ?? input.view.title,\n icon: input.view.icon,\n region: input.region ?? input.widget?.region ?? \"main\",\n rendererId: input.view.id,\n } satisfies WorkbenchPanelContribution;\n }\n if (input.widget) {\n if (\"singleton\" in input.widget) return toPanelContribution(input.widget as RegisteredWidgetContribution);\n return input.widget;\n }\n return undefined;\n};\n\nexport const WorkbenchWidgetHost = (props: WorkbenchWidgetHostProps) => {\n const { workbench, placement } = props;\n const widget = props.widget ?? workbench.layout.getWidget(placement.contributionId);\n const view = placement.viewId ? workbench.views.getView(placement.viewId) : undefined;\n const rendererId = view?.id ?? widget?.rendererId ?? \"\";\n const refresh = noopRefresh;\n const rendererFromStore = useWorkbenchStore(\n getWorkbenchRenderers(workbench).store,\n (state) => state.renderers[rendererId],\n );\n const renderer = rendererFromStore ?? getWorkbenchRenderers(workbench).getRenderer(rendererId);\n useWorkbenchStore(getWorkbenchRenderers(workbench).store, (state) => state.refreshKeys[rendererId] ?? 0);\n\n if (!widget && !view) {\n return <WorkbenchWidgetFallback label=\"Widget contribution is no longer registered.\" />;\n }\n const panel = toHostedPanel({ placement, region: props.region, view, widget });\n if (!panel) return <WorkbenchWidgetFallback label=\"View contribution is no longer registered.\" />;\n const instance = toPanelInstance(placement);\n\n return (\n // `flex: 1 0 auto` lets the host fill its region when the widget is short and\n // grow past it when the widget is tall, so the region's ScrollArea can scroll.\n <Box display=\"flex\" flex=\"1 0 auto\" minW=\"0\" minH=\"0\" w=\"full\" overflow=\"hidden\">\n {renderer ? (\n <WorkbenchRenderedWidgetFrame>\n {renderer.render({ workbench, panel, instance, refresh }) as ReactNode}\n </WorkbenchRenderedWidgetFrame>\n ) : (\n <WorkbenchWidgetFallback label={`No renderer registered for ${rendererId}.`} />\n )}\n </Box>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { WorkbenchCore, WorkbenchRegion } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { useRetainedViewPlacements } from \"./use-retained-view-placements\";\nimport { WorkbenchWidgetHost } from \"./widget-host\";\n\nexport const useModeChrome = (workbench: WorkbenchCore, region: WorkbenchRegion) =>\n useWorkbenchStore(workbench.modes.store, (state) => {\n const mode = state.activeModeId ? state.modes[state.activeModeId] : undefined;\n if (region !== \"nav\" && region !== \"sidenav\" && region !== \"activity\" && region !== \"status\") return undefined;\n return mode?.chrome?.[region];\n });\n\nexport const ModeChromeView = (props: { workbench: WorkbenchCore; viewId?: string; region: WorkbenchRegion }) => {\n const { workbench, viewId, region } = props;\n const placements = useRetainedViewPlacements(\n workbench,\n viewId ? [{ widgetId: viewId, contributionId: viewId, viewId, closable: false }] : [],\n );\n return (\n <Box h=\"full\" w=\"full\" minH=\"0\" position=\"relative\" display={viewId ? \"block\" : \"none\"}>\n {placements.map((placement) => (\n <Box\n key={placement.widgetId}\n position=\"absolute\"\n inset=\"0\"\n display={placement.viewId === viewId ? \"flex\" : \"none\"}\n inert={placement.viewId !== viewId}\n >\n <WorkbenchWidgetHost workbench={workbench} region={region} placement={placement} />\n </Box>\n ))}\n </Box>\n );\n};\n","import { Box, Flex } from \"@chakra-ui/react\";\nimport { ScrollArea } from \"@pstdio/ui\";\nimport type {\n RegisteredPlaceholderContribution,\n WorkbenchCore,\n WorkbenchPanelMenuRegion,\n WorkbenchRegion as WorkbenchRegionId,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n getWorkbenchPanelForMenuRegion,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchModeEligibility,\n matchesWorkbenchPanelMenuOwner,\n workbenchPanelMenuRegions,\n} from \"../../core\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { getWorkbenchRegionBackground } from \"../theme/workbench-theme-background\";\nimport { ModeChromeView, useModeChrome } from \"./mode-chrome\";\nimport { useRetainedViewPlacements } from \"./use-retained-view-placements\";\nimport { WorkbenchWidgetHost } from \"./widget-host\";\n\ninterface WorkbenchRegionProps {\n workbench: WorkbenchCore;\n region: WorkbenchRegionId;\n title?: string;\n pointerEvents?: \"auto\" | \"none\";\n transparent?: boolean;\n}\n\n// Header bars and the status bar lay their content out in a row, so they\n// scroll on the X axis; every other region scrolls vertically.\nconst horizontalScrollRegions = new Set<WorkbenchRegionId>([\n \"nav\",\n \"main-header\",\n \"secondary-header\",\n \"side-header\",\n \"status\",\n]);\n\nconst panelMenuRegionIds = new Set<WorkbenchRegionId>(\n Object.values(workbenchPanelMenuRegions).flatMap((regions) => Object.values(regions)),\n);\nconst sidePanelRegionIds = new Set<WorkbenchRegionId>([\"side\", \"side-header\", \"side-left-menu\", \"side-right-menu\"]);\n\n// A flex column at least as tall as the viewport lets a widget fill the region\n// (e.g. a tree with a pinned footer) while still growing and scrolling.\nconst verticalContentProps = { display: \"flex\", flexDirection: \"column\", minH: \"100%\", position: \"relative\" } as const;\n\n// Horizontal header regions need a definite content height so full-height\n// controls can stretch through the ScrollArea's content wrapper.\nconst horizontalContentProps = {\n display: \"flex\",\n alignItems: \"stretch\",\n h: \"full\",\n minH: \"100%\",\n position: \"relative\",\n} as const;\n\nconst getActivePlacement = (widgets: WorkbenchWidgetPlacement[], activeWidgetId?: string) =>\n widgets.find((placement) => placement.widgetId === activeWidgetId) ?? widgets[0];\n\nexport const resolveRenderedRegionPlacements = (\n widgets: WorkbenchWidgetPlacement[],\n activeWidgetId?: string,\n region?: WorkbenchRegionId,\n): WorkbenchWidgetPlacement[] => {\n if (region === \"sidenav\") return widgets;\n const activePlacement = getActivePlacement(widgets, activeWidgetId);\n if (!activePlacement) return [];\n return widgets.filter(\n (placement) => placement.widgetId === activePlacement.widgetId || placement.mountStrategy === \"keep-mounted\",\n );\n};\n\nexport const resolveRegionPlacementRenderState = (\n placement: WorkbenchWidgetPlacement,\n activeWidgetId: string | undefined,\n region?: WorkbenchRegionId,\n) => {\n const active = placement.widgetId === activeWidgetId;\n const additive = region === \"sidenav\";\n return {\n active,\n display: \"flex\",\n pointerEvents: active || additive ? \"auto\" : \"none\",\n position: active || additive ? \"relative\" : \"absolute\",\n visibility: active || additive ? \"visible\" : \"hidden\",\n } as const;\n};\n\nconst createPlaceholderPlacement = (placeholder: RegisteredPlaceholderContribution): WorkbenchWidgetPlacement => ({\n widgetId: placeholder.id,\n contributionId: placeholder.id,\n title: placeholder.title,\n closable: false,\n});\n\ninterface WorkbenchRegionPlacementProps {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n activeWidgetId?: string;\n globalActiveWidgetId?: string;\n region: WorkbenchRegionId;\n visible: boolean;\n order: number;\n}\n\nconst WorkbenchRegionPlacement = (props: WorkbenchRegionPlacementProps) => {\n const { workbench, placement, activeWidgetId, globalActiveWidgetId, region, visible, order } = props;\n const renderState = resolveRegionPlacementRenderState(placement, activeWidgetId, region);\n const additive = region === \"sidenav\";\n const overlaysActivePlacement = !renderState.active && !additive;\n let flex: string | undefined;\n if (additive) flex = \"1 1 0\";\n else if (renderState.active) flex = \"1 0 auto\";\n\n const activatePlacement = () => {\n if (placement.widgetId !== globalActiveWidgetId) workbench.layout.activatePanel(placement.widgetId);\n };\n\n return (\n <Box\n display={visible ? renderState.display : \"none\"}\n inert={!visible || (!renderState.active && !additive)}\n order={order}\n flex={flex}\n h={overlaysActivePlacement ? \"full\" : undefined}\n inset={overlaysActivePlacement ? \"0\" : undefined}\n minH=\"0\"\n minW=\"0\"\n onPointerDown={additive ? activatePlacement : undefined}\n onFocusCapture={additive ? activatePlacement : undefined}\n overflow=\"hidden\"\n pointerEvents={renderState.pointerEvents}\n position={renderState.position}\n visibility={renderState.visibility}\n w=\"full\"\n >\n <WorkbenchWidgetHost workbench={workbench} placement={placement} />\n </Box>\n );\n};\n\nexport const WorkbenchRegion = (props: WorkbenchRegionProps) => {\n const { workbench, region, title, pointerEvents = \"auto\", transparent = false } = props;\n const chrome = useModeChrome(workbench, region);\n const locationResource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const layout = useWorkbenchStore(workbench.layout.store, (state) => state.layout);\n const currentRegionState = layout.regions[region];\n const registeredWidgets = useWorkbenchStore(workbench.layout.store, (state) => state.widgets);\n const activeSubPanel = panelMenuRegionIds.has(region)\n ? getActiveWorkbenchSubPanel(\n layout,\n getWorkbenchPanelForMenuRegion(region as WorkbenchPanelMenuRegion),\n locationResource,\n { ignoreOwnerResourceKey: sidePanelRegionIds.has(region) },\n )\n : undefined;\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layout);\n const regionState = {\n ...currentRegionState,\n widgets: currentRegionState.widgets.filter((placement) => {\n const contribution = registeredWidgets[placement.contributionId];\n return contribution\n ? (sidePanelRegionIds.has(region)\n ? matchesWorkbenchModeEligibility(contribution, modeId)\n : isWorkbenchPanelPlacementVisible(contribution, locationResource, modeId, placement, {\n location: activeLocationPanel,\n })) &&\n matchesWorkbenchPanelMenuOwner(contribution, {\n locationPanel: activeLocationPanel,\n subPanel: activeSubPanel,\n })\n : false;\n }),\n };\n const globalActiveWidgetId = useWorkbenchStore(workbench.layout.store, (state) => state.layout.activeWidgetId);\n const activePlacement = getActivePlacement(regionState.widgets, regionState.activeWidgetId);\n const placeholder = activePlacement ? undefined : workbench.layout.getPlaceholder(region);\n const placement = activePlacement ?? (placeholder ? createPlaceholderPlacement(placeholder) : undefined);\n const renderedPlacements = activePlacement\n ? resolveRenderedRegionPlacements(regionState.widgets, activePlacement.widgetId, region)\n : [];\n\n const retainedPlacements = useRetainedViewPlacements(workbench, chrome !== undefined ? [] : renderedPlacements);\n const visibleIds = new Set(renderedPlacements.map((entry) => entry.widgetId));\n\n const scrollsHorizontally = horizontalScrollRegions.has(region);\n\n // Interacting with a region makes its active widget the globally-active one (so clicking\n // into the Side Panel session sets it global-active) without touching the primary anchor,\n // which only follows `main`. Placeholders are not real widgets, so only activate a real\n // placement that is not already active.\n const activatePlacement = (target: WorkbenchWidgetPlacement | undefined) => {\n if (target && target.widgetId !== globalActiveWidgetId) {\n workbench.layout.activatePanel(target.widgetId);\n }\n };\n const additive = region === \"sidenav\";\n\n return (\n <Flex\n as=\"section\"\n display={chrome === false ? \"none\" : \"flex\"}\n direction=\"column\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n bg={transparent ? \"transparent\" : getWorkbenchRegionBackground(region)}\n overflow=\"hidden\"\n pointerEvents={pointerEvents}\n aria-label={title ?? region}\n onPointerDown={additive ? undefined : () => activatePlacement(activePlacement)}\n onFocusCapture={additive ? undefined : () => activatePlacement(activePlacement)}\n >\n {/* The region owns scrolling: overflowing widget content scrolls here\n with the same narrow overlay scrollbar used across the workbench. */}\n <ModeChromeView workbench={workbench} region={region} viewId={chrome || undefined} />\n <ScrollArea\n display={chrome ? \"none\" : \"flex\"}\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n size=\"xs\"\n showVerticalScrollbar={!scrollsHorizontally}\n showHorizontalScrollbar={scrollsHorizontally}\n // Horizontal bars hold a single row that should stay vertically\n // centered; the ScrollArea otherwise top-aligns its flowing content.\n viewportProps={scrollsHorizontally ? { justifyContent: \"center\" } : undefined}\n // Vertical regions host a flex column so a widget can fill the region\n // (e.g. a tree with a pinned footer) yet still grow and scroll.\n contentProps={scrollsHorizontally ? horizontalContentProps : verticalContentProps}\n >\n {placeholder && placement ? (\n <WorkbenchWidgetHost workbench={workbench} placement={placement} widget={placeholder} />\n ) : null}\n {retainedPlacements.map((renderedPlacement) => (\n <WorkbenchRegionPlacement\n key={renderedPlacement.widgetId}\n visible={!chrome && visibleIds.has(renderedPlacement.widgetId)}\n order={renderedPlacements.findIndex((entry) => entry.widgetId === renderedPlacement.widgetId)}\n workbench={workbench}\n placement={renderedPlacement}\n activeWidgetId={activePlacement?.widgetId}\n globalActiveWidgetId={globalActiveWidgetId}\n region={region}\n />\n ))}\n </ScrollArea>\n </Flex>\n );\n};\n","import { IconButton, Menu, Portal } from \"@chakra-ui/react\";\nimport { ListRow, PANEL_HEADER_CONTROL_SIZE, Tooltip } from \"@pstdio/ui\";\nimport { useRef } from \"react\";\nimport type { ResourceRef, WorkbenchCompositionAddablePanel, WorkbenchCore, WorkbenchPanelRegion } from \"../../core\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { openPanelWidget } from \"./panel-widget-open\";\n\ninterface WorkbenchPanelAddMenuProps {\n workbench: WorkbenchCore;\n region: WorkbenchPanelRegion;\n resource?: ResourceRef;\n panels: readonly WorkbenchCompositionAddablePanel[];\n}\n\nexport const WorkbenchPanelAddMenu = (props: WorkbenchPanelAddMenuProps) => {\n const { panels, region, resource, workbench } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const label = \"Add panel\";\n if (panels.length === 0) return null;\n\n const openPanel = (panel: WorkbenchCompositionAddablePanel) =>\n openPanelWidget({\n workbench,\n widget: panel.contribution,\n region,\n resource,\n pinned: panel.pinned,\n open: panel.open,\n });\n\n const trigger = (\n <IconButton\n ref={panels.length > 1 ? triggerRef : undefined}\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={label}\n flexShrink={0}\n onClick={panels.length === 1 ? () => openPanel(panels[0]) : undefined}\n >\n <WorkbenchIcon name=\"plus\" size={13} />\n </IconButton>\n );\n\n if (panels.length === 1) return <Tooltip content={label}>{trigger}</Tooltip>;\n\n return (\n <Menu.Root positioning={{ placement: \"bottom-start\", getAnchorElement: () => triggerRef.current }}>\n <Tooltip content={label}>\n <Menu.Trigger asChild>{trigger}</Menu.Trigger>\n </Tooltip>\n <Portal>\n <Menu.Positioner>\n <Menu.Content aria-label={label} minW=\"17.5rem\" bg=\"bg\">\n {panels.map((panel) => (\n <Menu.Item key={panel.contribution.id} value={`widget:${panel.contribution.id}`} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label={panel.contribution.title}\n icon={\n panel.contribution.icon ? <WorkbenchIcon name={panel.contribution.icon} size={14} /> : undefined\n }\n onActivate={() => openPanel(panel)}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n","import type { WorkbenchRegion, WorkbenchWidgetPlacement } from \"../../core\";\n\nexport const toTabKey = (regionId: string, placement: WorkbenchWidgetPlacement) =>\n `${regionId}:${placement.contributionId}`;\n\n// Sidenav placements compose as vertical navigation sections. They never become tabs.\nexport const suppressesSidenavTabStrip = (region: WorkbenchRegion, _placements: WorkbenchWidgetPlacement[]) =>\n region === \"sidenav\";\n\n// A Sub Panel tab presents its widget; the resource on its placement only binds\n// it to a Location. Location and content tabs present the resource they show.\nexport const resolveTabIconName = (\n placement: WorkbenchWidgetPlacement,\n widget: { icon?: string } | undefined,\n resourceKindIcon: string | undefined,\n) => {\n const resourceIcon = placement.resource?.icon ?? resourceKindIcon;\n if (placement.role === \"sub-panel\") return widget?.icon ?? resourceIcon;\n return resourceIcon ?? widget?.icon;\n};\n\nexport const resolveDisplayedActiveWidgetId = (\n visiblePlacements: WorkbenchWidgetPlacement[],\n activeWidgetId: string | undefined,\n): string | undefined => {\n if (!activeWidgetId) return visiblePlacements[0]?.widgetId;\n const hasActive = visiblePlacements.some((placement) => placement.widgetId === activeWidgetId);\n if (hasActive) return activeWidgetId;\n return visiblePlacements[0]?.widgetId;\n};\n","import { filterVisibleTabs, useTabVisibilityStore } from \"@pstdio/ui\";\nimport {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchPanelMenuOwner,\n type WorkbenchCore,\n type WorkbenchPanelRegion,\n type WorkbenchRegion,\n type WorkbenchWidgetPlacement,\n workbenchPanelMenuRegions,\n workbenchPanelRegions,\n workbenchRegionTabLeadingMenuPath,\n} from \"../../core\";\nimport { listWorkbenchMenuItemsFromState } from \"../menus/menu-items\";\nimport { useWorkbenchCompositionPanels } from \"../shared/use-workbench-composition-panels\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { suppressesSidenavTabStrip, toTabKey } from \"./region-tabs-visibility\";\n\nconst isWorkbenchPanelRegion = (region: WorkbenchRegion): region is WorkbenchPanelRegion =>\n workbenchPanelRegions.some((panelRegion) => panelRegion === region);\n\nexport const shouldShowRegionTabs = (\n placements: WorkbenchWidgetPlacement[],\n options: { alwaysShowTabs?: boolean } = {},\n) => placements.length > 1 || (placements.length === 1 && (options.alwaysShowTabs ?? placements[0]?.closable) === true);\n\ninterface WorkbenchPanelHeaderVisibility {\n hasTabs?: boolean;\n hasPanelMenus?: boolean;\n hasHeaderActions?: boolean;\n}\n\nexport const shouldShowPanelHeader = (input: WorkbenchPanelHeaderVisibility) =>\n input.hasTabs === true || input.hasPanelMenus === true || input.hasHeaderActions === true;\n\nexport const isPlacementEligibleForRegion = (\n workbench: WorkbenchCore,\n region: WorkbenchRegion,\n placement: WorkbenchWidgetPlacement,\n resource = workbench.getPrimaryResource(),\n modeId = workbench.modes.getActiveModeId(),\n) => {\n const widget = workbench.layout.getWidget(placement.contributionId);\n return widget\n ? isWorkbenchPanelPlacementVisible(widget, resource, modeId, placement, {\n ignoreResourceLocation: region === \"side\",\n location: getActiveWorkbenchLocationPanel(workbench.layout.getLayout()),\n })\n : false;\n};\n\nexport const useWorkbenchRegionTabsState = (\n workbench: WorkbenchCore,\n region: WorkbenchRegion,\n visibilityStorageKey?: string,\n) => {\n const commands = useWorkbenchStore(workbench.commands.store, (state) => state.commands);\n const contextValues = useWorkbenchStore(workbench.context.store, (state) => state.values);\n const itemsByPath = useWorkbenchStore(workbench.layout.menuStore, (state) => state.itemsByPath);\n const layoutState = useWorkbenchStore(workbench.layout.store, (state) => state);\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const compositionPanels = useWorkbenchCompositionPanels(workbench);\n const tabStore = useTabVisibilityStore(visibilityStorageKey ?? region, (state) => state);\n const regionState = layoutState.layout.regions[region];\n const subPanelPlacements = regionState.widgets.filter(\n (placement) =>\n placement.role === \"sub-panel\" && isPlacementEligibleForRegion(workbench, region, placement, resource, modeId),\n );\n const visibleSubPanels = filterVisibleTabs(subPanelPlacements, tabStore.tabOverrides, (placement) =>\n toTabKey(region, placement),\n );\n const visibleSubPanelIds = new Set(visibleSubPanels.map((placement) => placement.widgetId));\n const visiblePlacements = regionState.widgets.filter(\n (placement) => visibleSubPanelIds.has(placement.widgetId) || (region === \"main\" && placement.role === \"location\"),\n );\n const leadingItems = listWorkbenchMenuItemsFromState(\n { itemsByPath, commands, contextValues },\n workbenchRegionTabLeadingMenuPath(region),\n );\n const panelRegion = isWorkbenchPanelRegion(region) ? region : undefined;\n const eligibleSubPanels = panelRegion ? compositionPanels[panelRegion].addable : [];\n const showTabs =\n !suppressesSidenavTabStrip(region, visiblePlacements) &&\n shouldShowRegionTabs(visiblePlacements, {\n alwaysShowTabs: workbench.layout.getRegionSettings(region)?.alwaysShowTabs,\n });\n const hasActions = leadingItems.length > 0 || eligibleSubPanels.length > 0;\n\n return {\n commands,\n regionState,\n resource,\n tabStore: { tabOverrides: tabStore.tabOverrides, toggleTab: tabStore.toggleTab, reset: tabStore.reset },\n subPanelPlacements,\n visiblePlacements,\n leadingItems,\n panelRegion,\n eligibleSubPanels,\n showTabs,\n hasActions,\n };\n};\n\nexport const useWorkbenchPanelHeaderVisible = (workbench: WorkbenchCore, region: WorkbenchPanelRegion) => {\n const layoutState = useWorkbenchStore(workbench.layout.store, (state) => state);\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const { showTabs, hasActions } = useWorkbenchRegionTabsState(workbench, region);\n const activeSubPanel = getActiveWorkbenchSubPanel(layoutState.layout, region, resource, {\n ignoreOwnerResourceKey: region === \"side\",\n });\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layoutState.layout);\n const menuRegions = workbenchPanelMenuRegions[region];\n const hasPanelMenus = [menuRegions.left, menuRegions.right].some(\n (menuRegion) =>\n layoutState.layout.regions[menuRegion].widgets.some(\n (placement) =>\n isPlacementEligibleForRegion(workbench, region, placement, resource, modeId) &&\n matchesWorkbenchPanelMenuOwner(layoutState.widgets[placement.contributionId], {\n locationPanel: activeLocationPanel,\n subPanel: activeSubPanel,\n }),\n ) || Boolean(workbench.layout.getPlaceholder(menuRegion)),\n );\n\n return shouldShowPanelHeader({ hasTabs: showTabs, hasHeaderActions: hasActions, hasPanelMenus });\n};\n\nexport const useWorkbenchRegionTabsVisible = (workbench: WorkbenchCore, region: WorkbenchRegion) => {\n const { showTabs, hasActions } = useWorkbenchRegionTabsState(workbench, region);\n return showTabs || hasActions;\n};\n","import { Box, CloseButton, Menu, Portal, Tabs, Text } from \"@chakra-ui/react\";\nimport { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { ListRow } from \"@pstdio/ui\";\nimport { type KeyboardEvent, type MouseEvent as ReactMouseEvent, type ReactNode, useEffect, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchTabMenuGroup, WorkbenchTabSnapshot, WorkbenchWidgetPlacement } from \"../../core\";\nimport { toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { resolveTabIconName } from \"./region-tabs-visibility\";\n\ninterface WorkbenchRegionTabProps {\n workbench: WorkbenchCore;\n placement: WorkbenchWidgetPlacement;\n activeWidgetId: string | undefined;\n disabled?: boolean;\n nextWidgetId?: string;\n previousWidgetId?: string;\n sortable?: boolean;\n}\nconst useTabSnapshot = (placement: WorkbenchWidgetPlacement): WorkbenchTabSnapshot => {\n const tab = placement.tab;\n const [snapshot, setSnapshot] = useState(() => tab?.getSnapshot(toPanelInstance(placement)) ?? {});\n useEffect(() => {\n const refresh = () => setSnapshot(tab?.getSnapshot(toPanelInstance(placement)) ?? {});\n const subscription = tab?.subscribe?.(refresh);\n refresh();\n if (!subscription) return undefined;\n return typeof subscription === \"function\" ? subscription : () => subscription.dispose();\n }, [placement, tab]);\n return snapshot;\n};\nconst useRegionTabBehavior = (input: WorkbenchRegionTabProps, tabSnapshot: WorkbenchTabSnapshot) => {\n const { disabled = false, nextWidgetId, placement, previousWidgetId, sortable = false, workbench } = input;\n const isPreview = placement.tabRetention === \"preview\";\n const hasCustomMenu = Boolean(tabSnapshot.menu?.some((group) => group.rows.length > 0));\n const hasContextMenu = isPreview;\n const sortableState = useSortable({ id: placement.widgetId, disabled: disabled || !sortable });\n const [openMenu, setOpenMenu] = useState<\"custom\" | \"context\">();\n const [anchor, setAnchor] = useState({ x: 0, y: 0, width: 0, height: 0 });\n const openTabMenu = (menu: \"custom\" | \"context\", event: ReactMouseEvent<HTMLElement>) => {\n event.preventDefault();\n event.stopPropagation();\n const rect = event.currentTarget.getBoundingClientRect();\n setAnchor({ x: rect.x, y: rect.y, width: rect.width, height: rect.height });\n setOpenMenu(menu);\n };\n const openCustomMenu = (event: ReactMouseEvent<HTMLElement>) => {\n if (hasCustomMenu && !disabled) openTabMenu(\"custom\", event);\n };\n const openContextMenu = (event: ReactMouseEvent<HTMLElement>) => {\n if (hasContextMenu && !disabled) openTabMenu(\"context\", event);\n };\n const setMenuOpen = (menu: \"custom\" | \"context\", open: boolean) => {\n setOpenMenu((current) => (open ? menu : current === menu ? undefined : current));\n };\n const reorderWithKeyboard = (event: KeyboardEvent<HTMLElement>) => {\n if (!sortable || disabled || !event.altKey) return;\n if (event.key === \"ArrowLeft\" && previousWidgetId) {\n event.preventDefault();\n workbench.layout.reorderPanel(placement.widgetId, { beforeWidgetId: previousWidgetId });\n }\n if (event.key === \"ArrowRight\" && nextWidgetId) {\n event.preventDefault();\n workbench.layout.reorderPanel(placement.widgetId, { afterWidgetId: nextWidgetId });\n }\n };\n return {\n anchor,\n hasCustomMenu,\n hasContextMenu,\n isPreview,\n openContextMenu,\n openCustomMenu,\n openMenu,\n reorderWithKeyboard,\n setMenuOpen,\n sortableState,\n tabSnapshot,\n };\n};\nconst WorkbenchRegionTabMenuSurface = (props: {\n anchor: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n children: ReactNode;\n label: string;\n open: boolean;\n setMenuOpen(open: boolean): void;\n}) => {\n const { anchor, children, label, open, setMenuOpen } = props;\n return (\n <Menu.Root\n open={open}\n onOpenChange={(details) => setMenuOpen(details.open)}\n positioning={{ placement: \"bottom-start\", getAnchorRect: () => anchor, offset: { mainAxis: 0 } }}\n >\n <Portal>\n <Menu.Positioner>\n <Menu.Content aria-label={label} minW=\"18.75rem\" bg=\"bg\">\n {children}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\nconst WorkbenchRegionTabContextMenu = (props: {\n anchor: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n label: string;\n open: boolean;\n placement: WorkbenchWidgetPlacement;\n setMenuOpen(open: boolean): void;\n workbench: WorkbenchCore;\n}) => {\n const { anchor, label, open, placement, setMenuOpen, workbench } = props;\n return (\n <WorkbenchRegionTabMenuSurface\n anchor={anchor}\n label={`${label} context menu`}\n open={open}\n setMenuOpen={setMenuOpen}\n >\n <Menu.Item value=\"keep-open\" asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n id=\"keep-open\"\n label=\"Keep Open\"\n icon={<WorkbenchIcon name=\"pin\" size={14} />}\n onActivate={() => {\n if (placement.placementIdentity) workbench.pinPlacement(placement.placementIdentity);\n else workbench.layout.updatePanel(placement.widgetId, { strategy: { kind: \"persistent\" } });\n }}\n />\n </Menu.Item>\n </WorkbenchRegionTabMenuSurface>\n );\n};\nconst WorkbenchRegionTabLabel = (props: {\n icon?: string;\n indicator?: WorkbenchTabSnapshot[\"indicator\"];\n id: string;\n label: string;\n}) => {\n const { icon, id, indicator, label } = props;\n return (\n <>\n {indicator ? (\n <WorkbenchIcon\n name={indicator.icon}\n size={12}\n flexShrink={0}\n color={indicator.color ?? \"fg.muted\"}\n aria-label={indicator.label}\n />\n ) : icon ? (\n <WorkbenchIcon name={icon} size={12} flexShrink={0} color=\"fg.muted\" />\n ) : null}\n <Text as=\"span\" id={id} minW=\"0\" truncate>\n {label}\n </Text>\n </>\n );\n};\nconst activateTabAction = (\n workbench: WorkbenchCore,\n action: NonNullable<WorkbenchTabMenuGroup[\"rows\"][number][\"action\"]>,\n) => {\n if (action.kind === \"command\") {\n void workbench.commands.executeCommand(action.commandId, action.args);\n return;\n }\n void workbench.navigation.openTarget(action.target);\n};\nconst WorkbenchStructuredTabMenu = (props: { groups: readonly WorkbenchTabMenuGroup[]; workbench: WorkbenchCore }) => {\n const { groups, workbench } = props;\n return groups.map((group, groupIndex) => (\n <Box key={group.id} display=\"contents\">\n {groupIndex > 0 ? <Menu.Separator /> : null}\n {group.rows.map((row) => (\n <Menu.Item key={row.id} value={row.id} disabled={row.disabled} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n id={row.id}\n label={row.label}\n icon={row.icon ? <WorkbenchIcon name={row.icon} size={16} /> : undefined}\n iconColor={row.iconColor}\n isSelected={row.selected}\n disabled={row.disabled}\n onActivate={row.action ? () => activateTabAction(workbench, row.action!) : undefined}\n />\n </Menu.Item>\n ))}\n </Box>\n ));\n};\nconst WorkbenchRegionTabCloseButton = (props: {\n disabled: boolean;\n isActive: boolean;\n label: string;\n placement: WorkbenchWidgetPlacement;\n workbench: WorkbenchCore;\n}) => {\n const { disabled, isActive, label, placement, workbench } = props;\n if (placement.closable !== true) return null;\n return (\n <CloseButton\n as=\"span\"\n role=\"button\"\n aria-label={`Close ${label}`}\n aria-disabled={disabled}\n size=\"2xs\"\n boxSize=\"1rem\"\n minW=\"1rem\"\n p=\"0\"\n borderRadius=\"2xs\"\n flexShrink={0}\n me=\"-1\"\n opacity={isActive ? \"1\" : \"0\"}\n pointerEvents={isActive ? \"auto\" : \"none\"}\n color=\"fg.muted\"\n _groupHover={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _groupFocusWithin={{ opacity: \"1\", pointerEvents: \"auto\" }}\n _hover={{ bg: \"transparent\", color: \"fg\" }}\n _active={{ bg: \"transparent\" }}\n transition=\"opacity 120ms ease\"\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.stopPropagation();\n if (disabled) return;\n const identity = placement.placementIdentity;\n if (identity) {\n workbench.closePlacement(identity);\n return;\n }\n workbench.layout.closePanel(placement.widgetId);\n }}\n />\n );\n};\nconst WorkbenchRegionTabMenus = (props: {\n behavior: ReturnType<typeof useRegionTabBehavior>;\n label: string;\n placement: WorkbenchWidgetPlacement;\n workbench: WorkbenchCore;\n}) => {\n const { behavior, label, placement, workbench } = props;\n return (\n <>\n {behavior.hasCustomMenu ? (\n <WorkbenchRegionTabMenuSurface\n anchor={behavior.anchor}\n label={`${label} menu`}\n open={behavior.openMenu === \"custom\"}\n setMenuOpen={(open) => behavior.setMenuOpen(\"custom\", open)}\n >\n <WorkbenchStructuredTabMenu groups={behavior.tabSnapshot.menu ?? []} workbench={workbench} />\n </WorkbenchRegionTabMenuSurface>\n ) : null}\n {behavior.hasContextMenu ? (\n <WorkbenchRegionTabContextMenu\n anchor={behavior.anchor}\n label={label}\n open={behavior.openMenu === \"context\"}\n placement={placement}\n setMenuOpen={(open) => behavior.setMenuOpen(\"context\", open)}\n workbench={workbench}\n />\n ) : null}\n </>\n );\n};\nexport const WorkbenchRegionTab = (props: WorkbenchRegionTabProps) => {\n const { activeWidgetId, disabled = false, placement, sortable = false, workbench } = props;\n const isActive = placement.widgetId === activeWidgetId;\n const tabSnapshot = useTabSnapshot(placement);\n const label = tabSnapshot.label ?? placement.resource?.label ?? placement.title ?? placement.contributionId;\n const labelId = `workbench-tab-label-${placement.widgetId}`;\n const widget = workbench.layout.getWidget(placement.contributionId);\n const icon = resolveTabIconName(\n placement,\n widget,\n placement.resource ? workbench.resources.getKind(placement.resource.type)?.icon : undefined,\n );\n const behavior = useRegionTabBehavior(props, tabSnapshot);\n const { isDragging, listeners, setNodeRef, transform, transition } = behavior.sortableState;\n const menuOpen =\n (behavior.openMenu === \"custom\" && behavior.hasCustomMenu) ||\n (behavior.openMenu === \"context\" && behavior.hasContextMenu);\n return (\n <>\n <Tabs.Trigger\n ref={setNodeRef}\n value={placement.widgetId}\n maxW=\"12rem\"\n minW=\"0\"\n flexShrink={0}\n title={label}\n // Name the tab from its label element alone. Computing the name from the tab's\n // contents would fold in the nested Close button, so a closable tab would be\n // called \"Artifacts Close Artifacts\" and rename itself the moment it became\n // closable. The label element still carries any status or count a tab renders.\n aria-labelledby={labelId}\n disabled={disabled}\n className=\"group\"\n aria-haspopup={behavior.hasCustomMenu || behavior.hasContextMenu ? \"menu\" : undefined}\n aria-expanded={behavior.hasCustomMenu || behavior.hasContextMenu ? menuOpen : undefined}\n aria-keyshortcuts={sortable ? \"Alt+ArrowLeft Alt+ArrowRight\" : undefined}\n fontStyle={behavior.isPreview ? \"italic\" : undefined}\n opacity={isDragging ? \"0.5\" : undefined}\n transform={CSS.Transform.toString(transform)}\n transition={transition}\n {...listeners}\n onKeyDown={behavior.reorderWithKeyboard}\n onContextMenu={behavior.hasContextMenu ? behavior.openContextMenu : undefined}\n onClick={behavior.hasCustomMenu && isActive && !disabled ? behavior.openCustomMenu : undefined}\n >\n <WorkbenchRegionTabLabel\n icon={tabSnapshot.icon ?? icon}\n id={labelId}\n indicator={tabSnapshot.indicator}\n label={label}\n />\n <WorkbenchRegionTabCloseButton\n disabled={disabled}\n isActive={isActive}\n label={label}\n placement={placement}\n workbench={workbench}\n />\n </Tabs.Trigger>\n <WorkbenchRegionTabMenus behavior={behavior} label={label} placement={placement} workbench={workbench} />\n </>\n );\n};\n","import { Tabs } from \"@chakra-ui/react\";\nimport { closestCenter, DndContext, type DragEndEvent, PointerSensor, useSensor, useSensors } from \"@dnd-kit/core\";\nimport { horizontalListSortingStrategy, SortableContext } from \"@dnd-kit/sortable\";\nimport type { ReactNode } from \"react\";\nimport type {\n ResourceRef,\n WorkbenchCompositionAddablePanel,\n WorkbenchCore,\n WorkbenchPanelRegion,\n WorkbenchWidgetPlacement,\n} from \"../../core\";\nimport { WorkbenchPanelAddMenu } from \"./panel-add-menu\";\nimport { WorkbenchRegionTab } from \"./region-tab\";\n\ninterface SortableRegionTabListProps {\n activeWidgetId?: string;\n disabled: boolean;\n leadingActions: ReactNode;\n panelRegion?: WorkbenchPanelRegion;\n placements: WorkbenchWidgetPlacement[];\n resource?: ResourceRef;\n eligibleSubPanels: readonly WorkbenchCompositionAddablePanel[];\n workbench: WorkbenchCore;\n}\n\nexport const SortableRegionTabList = (props: SortableRegionTabListProps) => {\n const { activeWidgetId, disabled, eligibleSubPanels, leadingActions, panelRegion, placements, resource, workbench } =\n props;\n const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));\n const reorderable = placements.filter(\n (placement) => placement.role === \"sub-panel\" && placement.tabRetention !== \"preview\",\n );\n const reorderWidget = (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const activeIndex = placements.findIndex((placement) => placement.widgetId === active.id);\n const overIndex = placements.findIndex((placement) => placement.widgetId === over.id);\n const source = placements[activeIndex];\n const target = placements[overIndex];\n if (\n source?.role !== \"sub-panel\" ||\n source.tabRetention === \"preview\" ||\n target?.role !== \"sub-panel\" ||\n target.tabRetention === \"preview\"\n ) {\n return;\n }\n workbench.layout.reorderPanel(\n String(active.id),\n activeIndex < overIndex ? { afterWidgetId: target.widgetId } : { beforeWidgetId: target.widgetId },\n );\n };\n\n return (\n <DndContext sensors={sensors} collisionDetection={closestCenter} onDragEnd={reorderWidget}>\n <SortableContext\n items={placements.map((placement) => placement.widgetId)}\n strategy={horizontalListSortingStrategy}\n >\n <Tabs.List h=\"full\" minH=\"0\" minW=\"max-content\" alignItems=\"center\" gap=\"2xs\" justifyContent=\"flex-start\">\n {placements.map((placement) => {\n const reorderableIndex = reorderable.findIndex((candidate) => candidate.widgetId === placement.widgetId);\n return (\n <WorkbenchRegionTab\n key={placement.widgetId}\n workbench={workbench}\n placement={placement}\n activeWidgetId={activeWidgetId}\n disabled={disabled}\n sortable={reorderableIndex >= 0}\n previousWidgetId={reorderable[reorderableIndex - 1]?.widgetId}\n nextWidgetId={reorderable[reorderableIndex + 1]?.widgetId}\n />\n );\n })}\n {panelRegion ? (\n <WorkbenchPanelAddMenu\n workbench={workbench}\n region={panelRegion}\n resource={resource}\n panels={eligibleSubPanels}\n />\n ) : null}\n {leadingActions}\n </Tabs.List>\n </SortableContext>\n </DndContext>\n );\n};\n","import { HStack, IconButton, Menu, Portal, Tabs } from \"@chakra-ui/react\";\nimport {\n buildTabVisibilityMenuActions,\n ListRow,\n PANEL_HEADER_CONTROL_SIZE,\n PANEL_HEADER_TAB_SIZE,\n ScrollArea,\n Tooltip,\n} from \"@pstdio/ui\";\nimport type { MouseEvent as ReactMouseEvent } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchRegion as WorkbenchRegionId, WorkbenchWidgetPlacement } from \"../../core\";\nimport { hasCommandParameters } from \"../command-palette/command-palette-params\";\nimport type { WorkbenchMenuItem } from \"../menus/menu-items\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { WorkbenchPanelAddMenu } from \"./panel-add-menu\";\nimport { resolveDisplayedActiveWidgetId, resolveTabIconName, toTabKey } from \"./region-tabs-visibility\";\nimport { useWorkbenchRegionTabsState } from \"./region-tabs-visibility-hooks\";\nimport { SortableRegionTabList } from \"./sortable-region-tab-list\";\n\nexport {\n shouldShowPanelHeader,\n shouldShowRegionTabs,\n useWorkbenchPanelHeaderVisible,\n useWorkbenchRegionTabsVisible,\n} from \"./region-tabs-visibility-hooks\";\n\ninterface WorkbenchRegionTabsProps {\n workbench: WorkbenchCore;\n region: WorkbenchRegionId;\n visibilityStorageKey?: string;\n}\nconst resolvePlacementIcon = (workbench: WorkbenchCore, placement: WorkbenchWidgetPlacement) => {\n const iconName = resolveTabIconName(\n placement,\n workbench.layout.getWidget(placement.contributionId),\n placement.resource ? workbench.resources.getKind(placement.resource.type)?.icon : undefined,\n );\n return iconName ? <WorkbenchIcon name={iconName} size={14} /> : undefined;\n};\nexport const WorkbenchRegionTabs = (props: WorkbenchRegionTabsProps) => {\n const { workbench, region, visibilityStorageKey } = props;\n const {\n commands,\n regionState,\n resource,\n tabStore,\n subPanelPlacements,\n visiblePlacements,\n leadingItems,\n panelRegion,\n eligibleSubPanels,\n showTabs,\n hasActions,\n } = useWorkbenchRegionTabsState(workbench, region, visibilityStorageKey);\n const tabOverrides = tabStore.tabOverrides;\n const getKey = (placement: WorkbenchWidgetPlacement) => toTabKey(region, placement);\n const [viewport, setViewport] = useState<HTMLDivElement | null>(null);\n const [menuOpen, setMenuOpen] = useState(false);\n const [anchor, setAnchor] = useState({ x: 0, y: 0, width: 0, height: 0 });\n const menuActions = buildTabVisibilityMenuActions(\n subPanelPlacements,\n tabOverrides,\n {\n onToggleTab: (key, hiddenByDefault) => tabStore.toggleTab(key, hiddenByDefault),\n onResetAll: () => tabStore.reset(),\n },\n getKey,\n {\n visibleIcon: <WorkbenchIcon name=\"eye\" size={14} />,\n hiddenIcon: <WorkbenchIcon name=\"eye-off\" size={14} />,\n resetIcon: <WorkbenchIcon name=\"rotate-ccw\" size={14} />,\n },\n (placement) => resolvePlacementIcon(workbench, placement),\n );\n const hasVisibilityMenu = menuActions.length > 0;\n const openVisibilityMenu = (event: ReactMouseEvent<HTMLElement>) => {\n if (!hasVisibilityMenu) return;\n event.preventDefault();\n const target = event.target instanceof Element ? event.target.closest('[role=\"tab\"]') : undefined;\n const rect = (target ?? event.currentTarget).getBoundingClientRect();\n setAnchor({ x: rect.x, y: rect.y, width: rect.width, height: rect.height });\n setMenuOpen(true);\n };\n // Translate vertical wheel into horizontal scrolling so the tab strip scrolls\n // with a plain mouse wheel — no modifier key required.\n useEffect(() => {\n if (!viewport) return;\n const onWheel = (event: WheelEvent) => {\n if (event.deltaY === 0 || viewport.scrollWidth <= viewport.clientWidth) return;\n viewport.scrollLeft += event.deltaY;\n event.preventDefault();\n };\n viewport.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => viewport.removeEventListener(\"wheel\", onWheel);\n }, [viewport]);\n if (!showTabs && !hasActions) return null;\n const activeWidgetId = resolveDisplayedActiveWidgetId(visiblePlacements, regionState.activeWidgetId);\n const onSelectLeadingItem = (item: WorkbenchMenuItem) => {\n const command = commands[item.commandId]?.command;\n if (command && hasCommandParameters(command.params)) {\n workbench.commandPalette.requestParams({ record: { command }, label: item.label, args: item.args });\n return;\n }\n void workbench.commands.executeCommand(item.commandId, item.args).catch(() => undefined);\n };\n const leadingActions = leadingItems.map((item) => (\n <Tooltip key={item.id} content={item.label}>\n <IconButton\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={item.label}\n disabled={item.disabled}\n flexShrink={0}\n onPointerDown={(event) => event.stopPropagation()}\n onClick={(event) => {\n event.stopPropagation();\n onSelectLeadingItem(item);\n }}\n >\n <WorkbenchIcon name={item.icon ?? \"plus\"} size={14} />\n </IconButton>\n </Tooltip>\n ));\n if (!showTabs) {\n return (\n <HStack flex=\"1 1 auto\" h=\"full\" minW=\"0\" gap=\"2xs\">\n {panelRegion ? (\n <WorkbenchPanelAddMenu\n workbench={workbench}\n region={panelRegion}\n resource={resource}\n panels={eligibleSubPanels}\n />\n ) : null}\n {leadingActions}\n </HStack>\n );\n }\n return (\n <Tabs.Root\n value={activeWidgetId}\n onValueChange={(details) => {\n const placement = visiblePlacements.find((candidate) => candidate.widgetId === details.value);\n if (placement?.role === \"location\") {\n workbench.layout.setRegionActiveWidget(region, placement.widgetId);\n return;\n }\n workbench.layout.activatePanel(details.value);\n }}\n variant=\"subtle\"\n colorPalette=\"gray\"\n justify=\"start\"\n size={PANEL_HEADER_TAB_SIZE}\n alignSelf=\"stretch\"\n flex=\"1 1 auto\"\n maxW=\"full\"\n minW=\"0\"\n h=\"full\"\n position=\"relative\"\n zIndex=\"1\"\n onContextMenu={hasVisibilityMenu ? openVisibilityMenu : undefined}\n >\n {/* Overflowing tabs scroll horizontally; the overlay scrollbar adds no\n height so the active tab still meets the header's bottom edge. */}\n <ScrollArea\n viewportRef={setViewport}\n size=\"xs\"\n h=\"full\"\n w=\"max-content\"\n maxW=\"full\"\n minW=\"0\"\n showVerticalScrollbar={false}\n showHorizontalScrollbar\n contentProps={{ h: \"full\" }}\n >\n {/* Chakra's size=\"sm\" list sets a 36px min-height that overflows the 2rem header and\n makes the horizontal-only viewport scroll vertically; minH=\"0\" lets h=\"full\" win. */}\n <SortableRegionTabList\n disabled={false}\n workbench={workbench}\n placements={visiblePlacements}\n activeWidgetId={activeWidgetId}\n panelRegion={panelRegion}\n resource={resource}\n eligibleSubPanels={eligibleSubPanels}\n leadingActions={leadingActions}\n />\n </ScrollArea>\n {hasVisibilityMenu ? (\n <Menu.Root\n open={menuOpen}\n onOpenChange={(details) => setMenuOpen(details.open)}\n positioning={{\n placement: \"bottom-start\",\n getAnchorRect: () => anchor,\n offset: { mainAxis: 0 },\n }}\n >\n <Portal>\n <Menu.Positioner>\n <Menu.Content minW=\"220px\" bg=\"bg\">\n {menuActions.map((action) => (\n <Menu.Item key={action.key} value={action.key} asChild>\n <ListRow\n asChild\n variant=\"full-width\"\n label={action.label}\n icon={action.icon}\n endContent={action.endContent}\n disabled={action.isDisabled}\n onActivate={action.onClick}\n />\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n ) : null}\n </Tabs.Root>\n );\n};\n","import { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type { ResourceContextAction } from \"@pstdio/ui\";\nimport type { DataTableSelectionAction, RowData } from \"@pstdio/ui/data-table\";\nimport type { ReactNode } from \"react\";\nimport type {\n DataTableRendererColumn,\n DataTableRendererQueryResult,\n DataTableRendererRow,\n DataTableRendererSelectionAction,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nexport const resolveDataTableRendererColumns = (\n result: DataTableRendererQueryResult,\n contributionColumns?: DataTableRendererColumn[],\n) => {\n if (result.columns) return result.columns;\n if (contributionColumns) return contributionColumns;\n const firstRow = result.rows[0];\n return firstRow ? Object.keys(firstRow.values).map((id): DataTableRendererColumn => ({ id })) : [];\n};\nexport const buildDataTableRendererData = (rows: DataTableRendererRow[], columns: DataTableRendererColumn[]) => {\n const rowByData = new WeakMap<Record<string, unknown>, DataTableRendererRow>();\n const data = rows.map((row) => {\n const values = Object.fromEntries(columns.map((column) => [column.id, row.values[column.id]]));\n rowByData.set(values, row);\n return values;\n });\n return { data, rowByData };\n};\nexport const resolveDataTableRendererSelectionActions = (\n actions: DataTableRendererSelectionAction[],\n rowByData: WeakMap<RowData, DataTableRendererRow>,\n): DataTableSelectionAction[] =>\n actions.map((action) => ({\n label: action.label,\n icon: action.icon as ReactNode,\n destructive: action.destructive,\n onSelect: (data) => {\n const rows = data.flatMap((row) => {\n const rendererRow = rowByData.get(row);\n return rendererRow ? [rendererRow] : [];\n });\n void action.run(rows);\n },\n }));\nexport const resolveDataTableRendererResourceActions = (\n data: RowData,\n rowByData: WeakMap<RowData, DataTableRendererRow>,\n resolveResourceActions: (resource: NonNullable<DataTableRendererRow[\"resource\"]>) => ResourceContextAction[],\n) => {\n const resource = rowByData.get(data)?.resource;\n if (!resource) return [];\n return resolveResourceActions(resource)\n .filter((action) => !action.isDisabled)\n .map((action) => ({\n label: action.label,\n icon: action.icon,\n onSelect: (_context?: unknown) => void action.onClick(),\n }));\n};\nexport const resolveDataTableRendererStorageKey = (rendererId: string, placement: WorkbenchPanelInstance) => {\n const identity = resourceKey(placement.resource) ?? placement.resource?.id ?? \"unscoped\";\n return `pstdio:workbench:dataTableRenderer:${rendererId}:${placement.instanceId}:${identity}`;\n};\n","import { Stack } from \"@chakra-ui/react\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { EmptyState } from \"@pstdio/ui\";\nimport {\n DataTable,\n type DataTableColumnRenderer,\n type DataTableColumnStat,\n type DataTableRowAction,\n DataTableSkeleton,\n type RowData,\n} from \"@pstdio/ui/data-table\";\nimport { type ReactNode, useEffect, useMemo, useRef, useState } from \"react\";\nimport type {\n DataTableRendererQueryResult,\n RegisteredDataTableRendererContribution,\n WorkbenchCore,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nimport { getWorkbenchRenderers } from \"../../../core\";\nimport { useWorkbenchResourceActionResolver } from \"../../menus/resource-actions\";\nimport {\n buildDataTableRendererData,\n resolveDataTableRendererColumns,\n resolveDataTableRendererResourceActions,\n resolveDataTableRendererSelectionActions,\n resolveDataTableRendererStorageKey,\n} from \"./data-table-view-model\";\n\ninterface WorkbenchDataTableViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredDataTableRendererContribution;\n placement: WorkbenchPanelInstance;\n}\nconst initialResult: DataTableRendererQueryResult = { rows: [] };\n// Tabs unmount when they deactivate, so without a cache every revisit flashes a\n// loading state. The last result renders instantly while the fresh query runs.\nconst lastResults = new Map<string, DataTableRendererQueryResult>();\nconst resultCacheKey = (contributionId: string, placement: WorkbenchPanelInstance) =>\n `${contributionId} ${resourceKey(placement.resource) ?? \"\"}`;\nexport const WorkbenchDataTableView = (props: WorkbenchDataTableViewProps) => {\n const { workbench, contribution, placement } = props;\n const resolveResourceActions = useWorkbenchResourceActionResolver(workbench);\n const cacheKey = resultCacheKey(contribution.id, placement);\n const [result, setResult] = useState(() => lastResults.get(cacheKey) ?? initialResult);\n const [loading, setLoading] = useState(() => !lastResults.has(cacheKey));\n const requestRef = useRef(0);\n useEffect(() => {\n let cancelled = false;\n const runQuery = () => {\n requestRef.current += 1;\n const requestId = requestRef.current;\n Promise.resolve(\n contribution.executeQuery({ resource: placement.resource, modeId: workbench.modes.getActiveModeId() }),\n ).then((next) => {\n if (cancelled || requestRef.current !== requestId) return;\n lastResults.set(cacheKey, next);\n setResult(next);\n setLoading(false);\n });\n };\n runQuery();\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = getWorkbenchRenderers(workbench).onDidRefreshDataTableRenderer((event) => {\n if (event.dataTableRendererId === contribution.id) runQuery();\n });\n return () => {\n cancelled = true;\n if (typeof subscription === \"function\") subscription();\n else subscription?.dispose();\n refreshSubscription.dispose();\n };\n }, [cacheKey, contribution, placement.resource, workbench]);\n const columns = resolveDataTableRendererColumns(result, contribution.columns);\n const model = useMemo(() => buildDataTableRendererData(result.rows, columns), [columns, result.rows]);\n const labels = Object.fromEntries(\n columns.filter((column) => column.label).map((column) => [column.id, column.label!]),\n );\n const descriptions = Object.fromEntries(\n columns.filter((column) => column.description).map((column) => [column.id, column.description!]),\n );\n const icons = Object.fromEntries(\n columns.filter((column) => column.icon).map((column) => [column.id, column.icon as ReactNode]),\n );\n const stats = Object.fromEntries(\n columns.filter((column) => column.stat).map((column) => [column.id, column.stat as DataTableColumnStat]),\n );\n const renderers = Object.fromEntries(\n columns\n .filter((column) => column.renderer)\n .map((column) => [column.id, column.renderer as DataTableColumnRenderer]),\n );\n const rowActions: DataTableRowAction[] = (contribution.rowActions ?? []).map((action) => ({\n label: action.label,\n icon: action.icon as ReactNode,\n destructive: action.destructive,\n onSelect: (data) => {\n const row = model.rowByData.get(data);\n if (row) void action.run(row);\n },\n }));\n const selectionActions = resolveDataTableRendererSelectionActions(\n contribution.selectionActions ?? [],\n model.rowByData,\n );\n const openRow = (data: RowData) => {\n const row = model.rowByData.get(data);\n if (!row) return;\n if (contribution.onRowActivate) void Promise.resolve(contribution.onRowActivate(row)).catch(() => undefined);\n };\n if (loading) {\n // The table chrome renders instantly: declared columns become real headers\n // and only the row values shimmer until the first query resolves.\n const skeletonColumns = (contribution.columns ?? [])\n .filter((column) => !column.hidden)\n .map((column) => ({ id: column.id, label: column.label ?? column.id }));\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\">\n <DataTableSkeleton columns={skeletonColumns.length > 0 ? skeletonColumns : undefined} />\n </Stack>\n );\n }\n if (result.rows.length === 0) {\n return (\n <EmptyState h=\"full\" title={contribution.emptyTitle ?? \"No rows\"} description={contribution.emptyDescription} />\n );\n }\n return (\n <Stack h=\"full\" minH=\"0\" minW=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\">\n <DataTable\n data={model.data}\n getRowId={(data) => model.rowByData.get(data)?.id ?? \"\"}\n toolbarStorageKey={resolveDataTableRendererStorageKey(contribution.id, placement)}\n compactHeaders={labels}\n columnDescriptions={descriptions}\n columnIcons={icons}\n hiddenColumns={columns.filter((column) => column.hidden).map((column) => column.id)}\n columnStats={stats}\n columnRenderers={renderers}\n initialPageSize={contribution.initialPageSize}\n pageSizeOptions={contribution.pageSizeOptions}\n selectionMode={contribution.selectionMode}\n selectionActions={selectionActions}\n rowActions={rowActions}\n getRowActions={(data) => resolveDataTableRendererResourceActions(data, model.rowByData, resolveResourceActions)}\n onRowClick={openRow}\n isRowInteractive={(data) => {\n const row = model.rowByData.get(data);\n return Boolean(row && contribution.onRowActivate);\n }}\n getCellContextMenuActions={(context) =>\n resolveDataTableRendererResourceActions(context.row, model.rowByData, resolveResourceActions)\n }\n fullWidth\n />\n </Stack>\n );\n};\n","import type { ParamEditorProps } from \"@pstdio/ui\";\nimport type { PreferencePropertySchema, PreferenceValue } from \"../../../core\";\n\n// `@pstdio/ui` does not export the Param union by name, so derive it from the\n// editor props — this keeps the mapper honest about what the editor accepts.\ntype Param = NonNullable<ParamEditorProps[\"params\"]>[number];\ntype ParamValue = Parameters<NonNullable<ParamEditorProps[\"onChange\"]>>[1];\n\nexport interface PreferenceParamEntry {\n name: string;\n schema: PreferencePropertySchema;\n label?: string;\n /** Current value; falls back to the schema default when omitted. */\n value?: PreferenceValue;\n}\n\n// Booleans have no dedicated param-editor control, so they render as a two-option\n// selection. Array/object schemas without an enum have no editor at all and are skipped.\nconst BOOLEAN_OPTIONS = [\n { id: \"true\", name: \"On\" },\n { id: \"false\", name: \"Off\" },\n];\n\nconst humanize = (value: string) => {\n const segment = value.split(\".\").at(-1) ?? value;\n const spaced = segment.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\").replace(/[-_]/g, \" \");\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n};\n\nconst toOptions = (values: PreferenceValue[]) =>\n values.map((value) => ({ id: String(value), name: humanize(String(value)) }));\n\nconst toParam = (entry: PreferenceParamEntry): Param | undefined => {\n const { name, schema } = entry;\n const label = entry.label ?? humanize(name);\n const description = schema.description;\n const current = entry.value ?? schema.default;\n const base = { id: name, name: label, description };\n\n if (schema.type === \"number\") {\n return { ...base, type: \"number\", defaultValue: Number(current ?? 0) };\n }\n\n if (schema.type === \"boolean\") {\n return { ...base, type: \"selection\", defaultValue: String(Boolean(current)), options: BOOLEAN_OPTIONS };\n }\n\n if (schema.type === \"string\") {\n if (schema.enum) {\n return { ...base, type: \"selection\", defaultValue: String(current ?? \"\"), options: toOptions(schema.enum) };\n }\n return { ...base, type: \"text\", defaultValue: String(current ?? \"\"), singleLine: true };\n }\n\n if (schema.type === \"array\" && schema.enum) {\n const defaultValue = Array.isArray(current) ? current.map(String) : [];\n return { ...base, type: \"selection\", multiSelect: true, defaultValue, options: toOptions(schema.enum) };\n }\n\n return undefined;\n};\n\nexport const preferenceSchemaToParams = (entries: PreferenceParamEntry[]) =>\n entries.map(toParam).filter((param): param is Param => param !== undefined);\n\nexport const paramValueToPreference = (schema: PreferencePropertySchema, value: ParamValue): PreferenceValue => {\n if (schema.type === \"boolean\") return value === \"true\";\n if (schema.type === \"number\") return Number(value);\n if (schema.type === \"array\") return Array.isArray(value) ? value.map(String) : [];\n return String(value);\n};\n","import { Button, HStack, Stack } from \"@chakra-ui/react\";\nimport { ParamEditor, type ParamEditorProps } from \"@pstdio/ui\";\nimport { useState } from \"react\";\nimport type { PreferenceRegistry, PreferenceScope } from \"../../../core\";\nimport {\n type PreferenceParamEntry,\n paramValueToPreference,\n preferenceSchemaToParams,\n} from \"./preference-schema-to-params\";\n\ntype ParamValue = Parameters<NonNullable<ParamEditorProps[\"onChange\"]>>[1];\n\nexport interface WorkbenchPreferencesFormProps {\n preferences: PreferenceRegistry;\n /** Preference names to edit; an object form overrides the displayed label. */\n names: (string | { name: string; label?: string })[];\n /** Resolves the scopeId for a preference's scope (e.g. \"project\" -> active project id). */\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n /** \"live\" persists on change (default); \"apply\" stages edits behind Save/Discard. */\n mode?: \"live\" | \"apply\";\n}\n\nconst toName = (entry: string | { name: string; label?: string }) =>\n typeof entry === \"string\" ? { name: entry } : entry;\n\n// Renders a param editor auto-generated from the registered preference schema. The\n// form is generic: it knows only about preference names + scope, never the domain.\nexport const WorkbenchPreferencesForm = (props: WorkbenchPreferencesFormProps) => {\n const { preferences, names, resolveScopeId, mode = \"live\" } = props;\n const [staged, setStaged] = useState<Record<string, ParamValue>>({});\n const [formKey, setFormKey] = useState(0);\n\n const scopeRef = (scope: PreferenceScope) => ({ scope, scopeId: resolveScopeId?.(scope) });\n\n const entries: PreferenceParamEntry[] = [];\n for (const candidate of names) {\n const { name, label } = toName(candidate);\n const schema = preferences.getSchema(name);\n if (!schema) continue;\n entries.push({ name, label, schema, value: preferences.getValue(name, scopeRef(schema.scope)) });\n }\n\n const params = preferenceSchemaToParams(entries);\n const schemaByName = new Map(entries.map((entry) => [entry.name, entry.schema]));\n\n const persist = (name: string, value: ParamValue) => {\n const schema = schemaByName.get(name);\n if (!schema) return;\n preferences.setValue(name, paramValueToPreference(schema, value), scopeRef(schema.scope));\n };\n\n const handleChange = (id: string, value: ParamValue) => {\n if (mode === \"apply\") {\n setStaged((current) => ({ ...current, [id]: value }));\n return;\n }\n persist(id, value);\n };\n\n const save = () => {\n for (const [name, value] of Object.entries(staged)) persist(name, value);\n setStaged({});\n setFormKey((key) => key + 1);\n };\n\n const discard = () => {\n setStaged({});\n setFormKey((key) => key + 1);\n };\n\n const hasStaged = Object.keys(staged).length > 0;\n\n return (\n <Stack gap=\"md\" maxW=\"640px\">\n <ParamEditor key={formKey} params={params} onChange={handleChange} fullWidth />\n {mode === \"apply\" && (\n <HStack gap=\"sm\">\n <Button size=\"sm\" onClick={save} disabled={!hasStaged}>\n Save\n </Button>\n <Button size=\"sm\" variant=\"outline\" onClick={discard} disabled={!hasStaged}>\n Discard\n </Button>\n </HStack>\n )}\n </Stack>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { PageLocation, PageRef } from \"@pstdio/sdk/extensions\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { PaletteShortcut, Tooltip, type TreeListNode, type TreeListSection } from \"@pstdio/ui\";\nimport { DiffBubble } from \"@pstdio/ui/diff\";\nimport type { ReactNode } from \"react\";\nimport {\n getWorkbenchSelectionResourceKeys,\n type NavigationTarget,\n type ResourceRef,\n resourceContextMenuPath,\n type TreeNode,\n type TreeViewSection,\n type WorkbenchCore,\n} from \"../../../core\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\nimport { createTreeActionItems, createTreeContextMenuItems, type TreeActionParamsRequest } from \"./tree-actions\";\n\ninterface TreeNodeRenderContext {\n workbench: WorkbenchCore;\n onCommandError?: (error: unknown) => void;\n onRequestParams?: (request: TreeActionParamsRequest) => void;\n}\nexport const resolveTreeListActiveNodeId = (activeNodeId: string | null | undefined, selectedNodeId?: string) => {\n if (!activeNodeId) return selectedNodeId;\n return activeNodeId;\n};\ninterface ResolveTreeListSelectionInput {\n sections: TreeViewSection[];\n childrenByNodeId: Record<string, TreeNode[]>;\n activeNodeId?: string | null;\n activeLocation?: PageLocation;\n activeResource?: ResourceRef;\n selectedNodeId?: string;\n}\nconst activeNodeIds = (ids: string[]) => {\n const uniqueIds = [...new Set(ids)];\n if (uniqueIds.length === 0) return undefined;\n return uniqueIds.length === 1 ? uniqueIds[0] : uniqueIds;\n};\nconst resolveTreeNodeResourceKey = (node: TreeNode) => {\n if (node.resource) return resourceKey(node.resource);\n return undefined;\n};\nconst listTreeNodes = (nodes: TreeNode[], childrenByNodeId: Record<string, TreeNode[]>): TreeNode[] =>\n nodes.flatMap((node) => [\n node,\n ...listTreeNodes([...(node.children ?? []), ...(childrenByNodeId[node.id] ?? [])], childrenByNodeId),\n ]);\nconst listSectionNodes = (sections: TreeViewSection[], childrenByNodeId: Record<string, TreeNode[]>) =>\n sections.flatMap((section) => listTreeNodes(section.nodes, childrenByNodeId));\nconst resolveActiveResourceNodeIds = (\n sections: TreeViewSection[],\n childrenByNodeId: Record<string, TreeNode[]>,\n resourceKeys: string[],\n) => {\n const nodes = listSectionNodes(sections, childrenByNodeId);\n for (const resourceKey of resourceKeys) {\n const matches = nodes\n .filter((node) => node.id === resourceKey || resolveTreeNodeResourceKey(node) === resourceKey)\n .map((node) => node.id);\n if (matches.length > 0) return activeNodeIds(matches);\n }\n return undefined;\n};\nconst findSectionNode = (sections: TreeViewSection[], nodeId: string, childrenByNodeId: Record<string, TreeNode[]>) =>\n listSectionNodes(sections, childrenByNodeId).find((node) => node.id === nodeId);\nexport const filterTreeListSelection = (\n sections: TreeViewSection[],\n childrenByNodeId: Record<string, TreeNode[]>,\n selection: string | string[] | undefined,\n) => {\n const selectedIds = typeof selection === \"string\" ? [selection] : (selection ?? []);\n return activeNodeIds(selectedIds.filter((nodeId) => findSectionNode(sections, nodeId, childrenByNodeId)));\n};\nconst pageRefsEqual = (left: PageRef, right: PageRef) => left.id === right.id && left.extensionId === right.extensionId;\nconst targetMatchesPage = (target: NavigationTarget | undefined, activePage: PageRef, activeResource?: ResourceRef) => {\n if (!target) return false;\n const targets = target.kind === \"compound\" ? target.targets : [target];\n return targets.some(\n (candidate) =>\n candidate.kind === \"page\" &&\n pageRefsEqual(candidate.page, activePage) &&\n (candidate.resource\n ? activeResource !== undefined && resourceKey(candidate.resource) === resourceKey(activeResource)\n : activeResource === undefined),\n );\n};\nconst resolveActivePageNodeIds = (\n sections: TreeViewSection[],\n childrenByNodeId: Record<string, TreeNode[]>,\n activePage: PageRef | undefined,\n activeResource: ResourceRef | undefined,\n) => {\n if (!activePage) return undefined;\n return activeNodeIds(\n listSectionNodes(sections, childrenByNodeId)\n .filter((node) => targetMatchesPage(node.target, activePage, activeResource))\n .map((node) => node.id),\n );\n};\nexport const resolveTreeListSelection = (input: ResolveTreeListSelectionInput) => {\n const { sections, childrenByNodeId, activeNodeId, activeLocation, activeResource, selectedNodeId } = input;\n if (activeNodeId) return activeNodeId;\n // Keep renderer selection on the nodes so it survives composing and scoping trees.\n const declaredSelection = activeNodeIds(\n listSectionNodes(sections, childrenByNodeId)\n .filter((node) => node.selected)\n .map((node) => node.id),\n );\n if (declaredSelection) return declaredSelection;\n const activeResourceKeys = getWorkbenchSelectionResourceKeys(activeResource);\n let selectedResourceKey: string | undefined;\n if (selectedNodeId) {\n const selectedNode = findSectionNode(sections, selectedNodeId, childrenByNodeId);\n selectedResourceKey = selectedNode ? resolveTreeNodeResourceKey(selectedNode) : undefined;\n if (selectedResourceKey && activeResourceKeys.includes(selectedResourceKey)) return selectedNodeId;\n // Keep the selected document when several nodes target the same page and resource.\n if (activeLocation && targetMatchesPage(selectedNode?.target, activeLocation.page, activeLocation.resource)) {\n return selectedNodeId;\n }\n }\n const activeResourceNodeId = resolveActiveResourceNodeIds(sections, childrenByNodeId, activeResourceKeys);\n if (activeResourceNodeId) return activeResourceNodeId;\n const activePageNodeId = resolveActivePageNodeIds(\n sections,\n childrenByNodeId,\n activeLocation?.page,\n activeLocation?.resource,\n );\n if (activePageNodeId) return activePageNodeId;\n if (!selectedNodeId) return undefined;\n if (activeResourceKeys.length > 0 && selectedResourceKey) return undefined;\n return selectedNodeId;\n};\nconst canVirtualizeTreeNode = (node: TreeListNode) =>\n node.inlineInput === undefined && node.isContainer !== true && (node.children ?? []).length === 0;\nexport const canVirtualizeTreeSections = (sections: TreeListSection[]) =>\n sections.every((section) => section.nodes.every(canVirtualizeTreeNode));\nconst findNode = (nodes: TreeNode[], nodeId: string, childrenByNodeId: Record<string, TreeNode[]>): TreeNode | null => {\n for (const node of nodes) {\n if (node.id === nodeId) return node;\n const child = findNode([...(node.children ?? []), ...(childrenByNodeId[node.id] ?? [])], nodeId, childrenByNodeId);\n if (child) return child;\n }\n return null;\n};\nexport const findNodeInSections = (\n sections: TreeViewSection[],\n nodeId: string,\n childrenByNodeId: Record<string, TreeNode[]>,\n) => {\n for (const section of sections) {\n const node = findNode(section.nodes, nodeId, childrenByNodeId);\n if (node) return node;\n }\n return null;\n};\nconst wrapTreeNodeIcon = (icon: ReactNode, iconTooltip: string | undefined) => {\n if (!iconTooltip) return icon;\n return (\n <Tooltip content={iconTooltip} openDelay={300}>\n <Box as=\"span\" display=\"inline-flex\" alignItems=\"center\" justifyContent=\"center\">\n {icon}\n </Box>\n </Tooltip>\n );\n};\nconst resolveTreeNodeIcon = (node: TreeNode): ReactNode | undefined => {\n let icon: ReactNode | undefined;\n if (node.iconElement !== undefined) {\n icon = node.iconElement as ReactNode;\n } else if (node.icon) {\n icon = <WorkbenchIcon name={node.icon} />;\n }\n return icon === undefined ? undefined : wrapTreeNodeIcon(icon, node.iconTooltip);\n};\nconst resolveTreeNodeNavigationIntent = (node: TreeNode) => {\n if (node.target) return { id: \"target\", payload: node.target };\n if (node.resource) return { id: \"resource\", payload: node.resource };\n return undefined;\n};\nconst resolveTreeNodeResource = (node: TreeNode): ResourceRef | undefined => {\n if (node.resource) return node.resource;\n return undefined;\n};\nconst renderShortcutEndContent = (binding: string | string[] | undefined) => {\n if (!binding) return undefined;\n return (\n <Box\n opacity=\"0\"\n pointerEvents=\"none\"\n display=\"inline-flex\"\n alignItems=\"center\"\n transition=\"opacity 120ms ease\"\n _groupHover={{ opacity: \"1\" }}\n >\n <PaletteShortcut binding={binding} />\n </Box>\n );\n};\nconst resolveTreeNodeEndContent = (\n node: TreeNode,\n resource: ResourceRef | undefined,\n binding: string | string[] | undefined,\n) => {\n if (node.endContent !== undefined) return node.endContent as ReactNode;\n const shortcut = renderShortcutEndContent(binding);\n if (shortcut) return shortcut;\n const additions = resource?.metadata?.diffAdditions;\n const deletions = resource?.metadata?.diffDeletions;\n if (resource?.type !== \"workspace\" || typeof additions !== \"number\" || typeof deletions !== \"number\") {\n return undefined;\n }\n return <DiffBubble additions={additions} deletions={deletions} variant=\"ghost\" size=\"small\" />;\n};\nconst toTreeListSectionEmptyNode = (section: TreeViewSection): TreeListNode | undefined => {\n if (!section.emptyState || section.nodes.length > 0) return undefined;\n return {\n id: `${section.id}:empty`,\n label: section.emptyState.title,\n description: section.emptyState.description,\n icon: section.emptyState.icon ? <WorkbenchIcon name={section.emptyState.icon} /> : undefined,\n disabled: true,\n rowVariant: \"empty-state\",\n };\n};\nconst toTreeListNode = (\n node: TreeNode,\n childrenByNodeId: Record<string, TreeNode[]>,\n context: TreeNodeRenderContext,\n) => {\n const navigationIntent = resolveTreeNodeNavigationIntent(node);\n const resource = resolveTreeNodeResource(node);\n const commandContext = resource ? { resource } : undefined;\n const contextMenuItems = createTreeContextMenuItems({\n actions: node.contextMenuActions,\n menuPath: node.contextMenuPath ?? node.menuPath ?? (resource ? resourceContextMenuPath(resource.type) : undefined),\n workbench: context.workbench,\n context: commandContext,\n onCommandError: context.onCommandError,\n onRequestParams: context.onRequestParams,\n });\n const menuItems = node.menuPath && contextMenuItems.length > 0 ? contextMenuItems : undefined;\n const shortcuts = new Map(\n context.workbench.keybindings.listCommandKeybindings().map((k) => [k.commandId, k.keybinding]),\n );\n const binding = node.commandId ? shortcuts.get(node.commandId) : undefined;\n const treeNode: TreeListNode = {\n id: node.id,\n moveScope: node.moveScope,\n label: node.label,\n description: node.description,\n icon: resolveTreeNodeIcon(node),\n iconColor: node.iconColor,\n disabled: node.disabled,\n rowVariant: node.rowVariant,\n inlineInput: node.inlineInput,\n showContextMenuTrigger: node.showContextMenuTrigger,\n canHide: node.canHide,\n canReorder: node.canReorder,\n canDrag: node.canDrag,\n canDrop: node.canDrop,\n hiddenByDefault: node.hiddenByDefault,\n actions: createTreeActionItems({\n actions: node.actions,\n workbench: context.workbench,\n context: commandContext,\n onCommandError: context.onCommandError,\n onRequestParams: context.onRequestParams,\n }),\n endContent: resolveTreeNodeEndContent(node, resource, binding),\n menuItems,\n contextMenuItems: contextMenuItems.length > 0 ? contextMenuItems : undefined,\n ...(node.menuPlacement ? { menuPlacement: node.menuPlacement } : {}),\n isContainer: node.collapsible,\n isNavigable: Boolean(navigationIntent),\n navigationIntent,\n children: [...(node.children ?? []), ...(childrenByNodeId[node.id] ?? [])].map((child) =>\n toTreeListNode(child, childrenByNodeId, context),\n ),\n } as TreeListNode;\n return treeNode;\n};\nexport const toTreeListSection = (\n section: TreeViewSection,\n childrenByNodeId: Record<string, TreeNode[]>,\n context: TreeNodeRenderContext,\n) => {\n const emptyNode = toTreeListSectionEmptyNode(section);\n return {\n id: section.id,\n moveScope: section.moveScope,\n label: section.label,\n actions: createTreeActionItems({\n actions: section.actions,\n workbench: context.workbench,\n onCommandError: context.onCommandError,\n onRequestParams: context.onRequestParams,\n }),\n collapsible: section.collapsible,\n canHide: section.canHide,\n canReorder: section.canReorder,\n hiddenByDefault: section.hiddenByDefault,\n nodes: emptyNode ? [emptyNode] : section.nodes.map((node) => toTreeListNode(node, childrenByNodeId, context)),\n };\n};\n","import type { WorkbenchCore } from \"../../../core\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-params-dialog\";\nimport { CommandParamsDialog } from \"../../command-palette/command-params-dialog\";\nimport type { TreeActionParamsRequest } from \"./tree-actions\";\n\ninterface TreeParamsDialogProps {\n request: TreeActionParamsRequest | null;\n renderParamField?: CommandParamFieldRenderer;\n workbench: WorkbenchCore;\n onClose: () => void;\n}\n\nexport const TreeParamsDialog = (props: TreeParamsDialogProps) => {\n const { request, renderParamField, workbench, onClose } = props;\n return (\n <CommandParamsDialog\n request={request?.request ?? null}\n renderParamField={renderParamField}\n prepareArgs={(input) =>\n workbench.commands.getCommand(input.commandId)\n ? workbench.commands.prepareCommandArgs(input.commandId, input.args, input.context, input.onArgsChange)\n : Promise.resolve(input.args)\n }\n onClose={onClose}\n onRun={async ({ args }) => {\n await request?.run(args);\n }}\n />\n );\n};\n","import { Skeleton, Stack } from \"@chakra-ui/react\";\nimport {\n EmptyState,\n type ResourceContextAction,\n TreeList,\n type TreeListMovePolicy,\n type TreeListSection,\n} from \"@pstdio/ui\";\nimport type { RefObject } from \"react\";\nimport { canVirtualizeTreeSections } from \"./tree-list-adapter\";\n\nconst TREE_SKELETON_WIDTHS = [\"70%\", \"50%\", \"82%\", \"60%\", \"44%\", \"76%\"];\n\nconst TreeViewSkeleton = () => (\n <Stack gap=\"sm\" px=\"sm\" py=\"xs\" aria-hidden>\n {TREE_SKELETON_WIDTHS.map((width, index) => (\n <Skeleton key={`${width}-${index}`} height=\"4\" width={width} borderRadius=\"xs\" />\n ))}\n </Stack>\n);\n\ninterface TreeViewBodyProps {\n error?: string | null;\n loading: boolean;\n moduleLoading?: boolean;\n sections: TreeListSection[];\n backgroundContextActions?: ResourceContextAction[];\n draggable?: boolean;\n customizationAvailable?: boolean;\n activeNodeId: string | string[] | undefined;\n expandedNodeIds: string[];\n expandedSectionIds: string[];\n scrollRef: RefObject<HTMLDivElement | null>;\n onToggleSection: (sectionId: string) => void;\n onToggleNode: (nodeId: string) => void;\n onReorderSections?: (nextSectionIds: string[]) => void;\n onReorderNodes?: (sectionId: string, nextNodeIds: string[]) => void;\n canMove?: TreeListMovePolicy;\n onMoveNode?: (sourceNodeId: string, targetNodeId?: string) => void;\n onNavigate: (event: Parameters<NonNullable<Parameters<typeof TreeList>[0][\"onNavigate\"]>>[0]) => void;\n}\n\nexport const TreeViewBody = (props: TreeViewBodyProps) => {\n const {\n error,\n loading,\n moduleLoading,\n sections,\n backgroundContextActions,\n draggable,\n customizationAvailable,\n activeNodeId,\n expandedNodeIds,\n expandedSectionIds,\n scrollRef,\n onToggleSection,\n onToggleNode,\n onReorderSections,\n onReorderNodes,\n canMove,\n onMoveNode,\n onNavigate,\n } = props;\n\n if (error) return <EmptyState title=\"Could not load files\" description={error} />;\n if (loading) return null;\n if (moduleLoading) return <TreeViewSkeleton />;\n\n // Keep an empty-but-customizable tree right-clickable so a fully-hidden tree\n // can still be restored from the back-of-tree menu.\n if (sections.length === 0 && (backgroundContextActions?.length ?? 0) === 0 && !customizationAvailable) {\n return <EmptyState minH=\"12rem\" title=\"No tree items\" />;\n }\n\n return (\n <TreeList\n sections={sections}\n backgroundContextActions={backgroundContextActions}\n draggable={draggable}\n expandedNodeIds={expandedNodeIds}\n expandedSectionIds={expandedSectionIds}\n activeNodeId={activeNodeId}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n nodeGap=\"1px\"\n virtualize={canVirtualizeTreeSections(sections)}\n scrollRef={scrollRef}\n onToggleSection={onToggleSection}\n onToggleNode={onToggleNode}\n onReorderSections={onReorderSections}\n onReorderNodes={onReorderNodes}\n canMove={canMove}\n onMoveNode={onMoveNode}\n onNavigate={onNavigate}\n />\n );\n};\n","import type {\n RegisteredTreeRendererContribution,\n ResourceRef,\n TreeNode,\n TreeViewSection,\n WorkbenchCore,\n} from \"../../../core\";\nimport { getWorkbenchRenderers } from \"../../../core\";\nimport { findNodeInSections } from \"./tree-list-adapter\";\n\ninterface MoveTreeNodeContext {\n workbench: WorkbenchCore;\n renderer: RegisteredTreeRendererContribution;\n resource?: ResourceRef;\n viewId?: string;\n sections: TreeViewSection[];\n childrenByNodeId: Record<string, TreeNode[]>;\n onError?: (error: unknown) => void;\n}\n\nexport const createMoveTreeNode = (context: MoveTreeNodeContext) =>\n context.renderer.moveNode\n ? (sourceNodeId: string, targetNodeId?: string) => {\n const source = findNodeInSections(context.sections, sourceNodeId, context.childrenByNodeId);\n const target = targetNodeId\n ? (findNodeInSections(context.sections, targetNodeId, context.childrenByNodeId) ?? undefined)\n : undefined;\n if (!source || (targetNodeId && !target)) return;\n const trees = getWorkbenchRenderers(context.workbench);\n void Promise.resolve(\n context.renderer.moveNode?.(source, target, {\n resource: context.resource,\n viewId: context.viewId,\n state: trees.getTreeState(context.renderer.id),\n refresh: () => trees.refresh(context.renderer.id),\n setSelectedNode: (nodeId) => trees.setSelectedNode(context.renderer.id, nodeId),\n }),\n ).catch(context.onError);\n }\n : undefined;\n","import type { NavigationTarget } from \"../../../core\";\n\nexport const shouldSelectTreeNodeForNavigationTarget = (target: NavigationTarget) => {\n const items = target.kind === \"compound\" ? target.targets : [target];\n return items.some((item) => item.kind === \"page\" || item.kind === \"panel\");\n};\n","import { Input, InputGroup } from \"@chakra-ui/react\";\nimport { Header } from \"@pstdio/ui\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\n\ninterface TreeViewSearchProps {\n visible: boolean;\n placeholder?: string;\n value: string;\n onChange: (value: string) => void;\n}\n\nexport const TreeViewSearch = (props: TreeViewSearchProps) => {\n const { visible, placeholder = \"Search files\", value, onChange } = props;\n if (!visible) return null;\n\n return (\n <Header flexShrink={0} borderBottomWidth=\"1px\" borderColor=\"border.subtle\" bg=\"bg\">\n <InputGroup startElement={<WorkbenchIcon name=\"search\" size={14} />} width=\"full\">\n <Input\n size=\"sm\"\n variant=\"borderless\"\n aria-label={placeholder}\n placeholder={placeholder}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n />\n </InputGroup>\n </Header>\n );\n};\n","import type { TreeNode, TreeQueryContext, TreeRendererRegistry, TreeViewSection } from \"../../../core\";\n\nconst isUnregisteredTreeError = (trees: TreeRendererRegistry, treeId: string, error: unknown) =>\n error instanceof Error &&\n error.message === `Tree renderer not registered: ${treeId}` &&\n !trees.getTreeRenderer(treeId);\n\nexport interface LoadedTreeData {\n header: TreeViewSection[];\n body: TreeViewSection[];\n footer: TreeViewSection[];\n}\n\nconst listTreeNodes = (data: LoadedTreeData) => [\n ...data.header.flatMap((section) => section.nodes),\n ...data.body.flatMap((section) => section.nodes),\n ...data.footer.flatMap((section) => section.nodes),\n];\n\nexport const loadExpandedTreeChildren = async (\n trees: TreeRendererRegistry,\n treeId: string,\n data: LoadedTreeData,\n expandedNodeIds: string[],\n ctx: TreeQueryContext = {},\n) => {\n const expanded = new Set(expandedNodeIds);\n const visited = new Set<string>();\n const childrenByNodeId: Record<string, TreeNode[]> = {};\n\n const loadNodes = async (nodes: TreeNode[]) => {\n await Promise.all(\n nodes.map(async (node) => {\n if (!expanded.has(node.id) || visited.has(node.id)) return;\n visited.add(node.id);\n const children = node.children ?? (await trees.getChildren(treeId, node, ctx));\n if (!node.children) childrenByNodeId[node.id] = children;\n await loadNodes(children);\n }),\n );\n };\n\n await loadNodes(listTreeNodes(data));\n return childrenByNodeId;\n};\n\nexport const expandDefaultTreeSections = (trees: TreeRendererRegistry, treeId: string) => {\n const tree = trees.getTreeRenderer(treeId);\n if (!tree) return;\n for (const sectionId of tree.defaultExpandedSectionIds ?? []) {\n trees.setSectionExpanded(treeId, sectionId, true);\n }\n};\n\nexport const loadTreeData = async (\n trees: TreeRendererRegistry,\n treeId: string,\n ctx: TreeQueryContext = {},\n): Promise<LoadedTreeData | null> => {\n if (!trees.getTreeRenderer(treeId)) return null;\n\n try {\n const [header, body, footer] = await Promise.all([\n trees.getHeader(treeId, ctx),\n trees.getBody(treeId, ctx),\n trees.getFooter(treeId, ctx),\n ]);\n return { header, body, footer };\n } catch (error) {\n if (isUnregisteredTreeError(trees, treeId, error)) return null;\n throw error;\n }\n};\n","import { useEffect, useRef, useState } from \"react\";\nimport { getWorkbenchRenderers, type ResourceRef, type TreeNode, type WorkbenchCore } from \"../../../core\";\nimport {\n expandDefaultTreeSections,\n type LoadedTreeData,\n loadExpandedTreeChildren,\n loadTreeData,\n} from \"./tree-view-load\";\n\nexport const useTreeData = (\n workbench: WorkbenchCore,\n treeViewId: string,\n resource?: ResourceRef,\n viewId?: string,\n filter?: string,\n) => {\n const [data, setData] = useState<(LoadedTreeData & { treeViewId: string; filter?: string }) | null>(null);\n const [childrenByNodeId, setChildrenByNodeId] = useState<Record<string, TreeNode[]>>({});\n const [error, setError] = useState<string | null>(null);\n const loadRevisionRef = useRef(0);\n\n useEffect(() => {\n let cancelled = false;\n expandDefaultTreeSections(getWorkbenchRenderers(workbench), treeViewId);\n\n const loadTree = () => {\n const loadRevision = ++loadRevisionRef.current;\n setError(null);\n void loadTreeData(getWorkbenchRenderers(workbench), treeViewId, { resource, viewId, filter })\n .then(async (data) => {\n if (cancelled || loadRevision !== loadRevisionRef.current) return;\n const treeStillRegistered = getWorkbenchRenderers(workbench).getTreeRenderer(treeViewId);\n const children =\n data && treeStillRegistered\n ? await loadExpandedTreeChildren(\n getWorkbenchRenderers(workbench),\n treeViewId,\n data,\n getWorkbenchRenderers(workbench).getTreeState(treeViewId).expandedNodeIds,\n { resource, viewId, filter },\n )\n : {};\n if (cancelled || loadRevision !== loadRevisionRef.current) return;\n setData({\n header: data?.header ?? [],\n body: data?.body ?? [],\n footer: data?.footer ?? [],\n treeViewId,\n filter,\n });\n setChildrenByNodeId(children);\n })\n .catch((loadError) => {\n if (cancelled || loadRevision !== loadRevisionRef.current) return;\n setError(loadError instanceof Error ? loadError.message : \"The file tree could not be loaded.\");\n });\n };\n\n loadTree();\n const disposable = getWorkbenchRenderers(workbench).onDidRefresh((event) => {\n if (event.treeId === treeViewId) loadTree();\n });\n return () => {\n cancelled = true;\n disposable.dispose();\n };\n }, [filter, resource, viewId, workbench, treeViewId]);\n\n // Refreshes preserve the current tree, but a different query must not expose\n // stale rows that can disappear in the middle of a click.\n const loading = !error && (data?.treeViewId !== treeViewId || data?.filter !== filter);\n return {\n body: data?.body ?? [],\n childrenByNodeId,\n error,\n footer: data?.footer ?? [],\n header: data?.header ?? [],\n loading,\n setChildrenByNodeId,\n };\n};\n","import {\n applyTreeListOrder,\n buildTreeVisibilityMenuActions,\n filterVisibleSections,\n type ResourceContextAction,\n resolveVisibility,\n type TreeListActionMenuItem,\n type TreeListNode,\n type TreeListSection,\n useTreeListOrderStore,\n useTreeListVisibilityStore,\n type VisibilityOverride,\n} from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\n\ninterface TreeViewRegions {\n headerSections: TreeListSection[];\n sections: TreeListSection[];\n footerSections: TreeListSection[];\n}\n\nexport type TreeViewSlot = \"header\" | \"content\" | \"footer\";\n\ninterface TreeViewCustomization {\n // Header sections with hidden entries removed — what the pinned header renders.\n visibleHeaderSections: TreeListSection[];\n // Sections with hidden categories removed — what the tree body renders.\n visibleSections: TreeListSection[];\n // Footer sections with hidden entries removed — what the pinned footer renders.\n visibleFooterSections: TreeListSection[];\n // Back-of-tree right-click menu: header rows, body categories, and footer rows that opt in.\n backgroundContextActions: ResourceContextAction[];\n customizationRevision: string;\n onReorderSections: (slot: TreeViewSlot, nextSectionIds: string[]) => void;\n onMoveSection: (nextSectionIds: string[], sourceSectionId: string, destinationSectionId: string) => void;\n onReorderNodes: (sectionId: string, nextNodeIds: string[]) => void;\n}\n\ninterface VisibilityToggleIcons {\n visibleIcon: ReactNode;\n hiddenIcon: ReactNode;\n resetIcon?: ReactNode;\n}\n\ninterface NodeVisibilityActions {\n onToggleNode: (id: string, hiddenByDefault: boolean) => void;\n}\n\ninterface TreeViewCustomizationOptions {\n suppressNodeContextMenus?: boolean;\n}\n\nconst toStringLabel = (label: ReactNode, fallback: string) => (typeof label === \"string\" ? label : fallback);\n\nconst isCustomizableNode = (node: TreeListNode) => node.canHide === true || node.hiddenByDefault === true;\n\nconst visibilityContextIcon = (effective: VisibilityOverride, icons: VisibilityToggleIcons) =>\n effective === \"shown\" ? icons.hiddenIcon : icons.visibleIcon;\n\nconst buildNodeVisibilityContextMenuItem = (\n node: TreeListNode,\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: NodeVisibilityActions,\n icons: VisibilityToggleIcons,\n): TreeListActionMenuItem | undefined => {\n if (!isCustomizableNode(node)) return undefined;\n\n const hiddenByDefault = node.hiddenByDefault === true;\n const effective = resolveVisibility(nodeOverrides[node.id], hiddenByDefault);\n const label = toStringLabel(node.label, node.id);\n const existingItems = node.contextMenuItems ?? [];\n\n return {\n id: `tree-visibility:${node.id}`,\n label: effective === \"shown\" ? `Hide ${label}` : `Show ${label}`,\n icon: visibilityContextIcon(effective, icons),\n ...(existingItems.length > 0 ? { separatorBefore: true } : {}),\n onAction: () => actions.onToggleNode(node.id, hiddenByDefault),\n };\n};\n\nexport const addRegionNodeVisibilityContextMenuItems = (\n nodes: TreeListNode[],\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: NodeVisibilityActions,\n icons: VisibilityToggleIcons,\n enabled = true,\n) => {\n if (!enabled) return nodes;\n let changed = false;\n const next = nodes.map((node) => {\n const item = buildNodeVisibilityContextMenuItem(node, nodeOverrides, actions, icons);\n if (!item) return node;\n\n changed = true;\n return { ...node, contextMenuItems: [...(node.contextMenuItems ?? []), item] };\n });\n\n return changed ? next : nodes;\n};\n\nconst addSectionNodeVisibilityContextMenuItems = (\n sections: TreeListSection[],\n nodeOverrides: Record<string, VisibilityOverride>,\n actions: NodeVisibilityActions,\n icons: VisibilityToggleIcons,\n enabled: boolean,\n) => {\n let changed = false;\n const next = sections.map((section) => {\n const nodes = addRegionNodeVisibilityContextMenuItems(section.nodes, nodeOverrides, actions, icons, enabled);\n if (nodes === section.nodes) return section;\n changed = true;\n return { ...section, nodes };\n });\n return changed ? next : sections;\n};\n\n// Wires the generic @pstdio/ui visibility primitives onto a single tree host. Visibility is\n// persisted per `storageKey`, so each tree view customizes independently. The menu is built from\n// the unfiltered regions so hidden entries stay listed (eye-off) and can be brought back —\n// covering header rows, body categories, and footer rows (never individual body items).\nexport const useTreeViewCustomization = (\n storageKey: string,\n regions: TreeViewRegions,\n icons: VisibilityToggleIcons,\n options: TreeViewCustomizationOptions = {},\n): TreeViewCustomization => {\n const sectionOverrides = useTreeListVisibilityStore(storageKey, (state) => state.sectionOverrides);\n const nodeOverrides = useTreeListVisibilityStore(storageKey, (state) => state.nodeOverrides);\n const toggleSection = useTreeListVisibilityStore(storageKey, (state) => state.toggleSection);\n const toggleNode = useTreeListVisibilityStore(storageKey, (state) => state.toggleNode);\n const resetVisibility = useTreeListVisibilityStore(storageKey, (state) => state.reset);\n const sectionOrder = useTreeListOrderStore(storageKey, (state) => state.sectionOrder);\n const nodeOrderBySection = useTreeListOrderStore(storageKey, (state) => state.nodeOrderBySection);\n const sectionSlotById = useTreeListOrderStore(storageKey, (state) => state.sectionSlotById);\n const setSectionOrder = useTreeListOrderStore(storageKey, (state) => state.setSectionOrder);\n const setNodeOrder = useTreeListOrderStore(storageKey, (state) => state.setNodeOrder);\n const setSectionSlot = useTreeListOrderStore(storageKey, (state) => state.setSectionSlot);\n const resetOrder = useTreeListOrderStore(storageKey, (state) => state.reset);\n const visibilityActions = {\n onToggleSection: toggleSection,\n onToggleNode: toggleNode,\n onResetAll: () => {\n resetVisibility();\n resetOrder();\n },\n };\n\n const defaultSlotBySectionId = new Map([\n ...regions.headerSections.map((section) => [section.id, \"header\" as const] as const),\n ...regions.sections.map((section) => [section.id, \"content\" as const] as const),\n ...regions.footerSections.map((section) => [section.id, \"footer\" as const] as const),\n ]);\n const orderedSectionsBySlot: Record<TreeViewSlot, TreeListSection[]> = { header: [], content: [], footer: [] };\n const orderedAllSections = applyTreeListOrder(\n [...regions.headerSections, ...regions.sections, ...regions.footerSections],\n sectionOrder,\n nodeOrderBySection,\n );\n for (const section of orderedAllSections) {\n const slot = sectionSlotById[section.id] ?? defaultSlotBySectionId.get(section.id) ?? \"content\";\n orderedSectionsBySlot[slot].push(section);\n }\n const orderedHeaderSections = orderedSectionsBySlot.header;\n const orderedSections = orderedSectionsBySlot.content;\n const orderedFooterSections = orderedSectionsBySlot.footer;\n const includeNodeContextMenus = options.suppressNodeContextMenus !== true;\n\n const headerSections = addSectionNodeVisibilityContextMenuItems(\n orderedHeaderSections,\n nodeOverrides,\n visibilityActions,\n icons,\n includeNodeContextMenus,\n );\n const contentSections = addSectionNodeVisibilityContextMenuItems(\n orderedSections,\n nodeOverrides,\n visibilityActions,\n icons,\n includeNodeContextMenus,\n );\n const footerSections = addSectionNodeVisibilityContextMenuItems(\n orderedFooterSections,\n nodeOverrides,\n visibilityActions,\n icons,\n includeNodeContextMenus,\n );\n const visibleHeaderSections = filterVisibleSections(headerSections, sectionOverrides, nodeOverrides);\n const visibleSections = filterVisibleSections(contentSections, sectionOverrides, nodeOverrides);\n const visibleFooterSections = filterVisibleSections(footerSections, sectionOverrides, nodeOverrides);\n const backgroundContextActions = buildTreeVisibilityMenuActions(\n { headerSections: orderedHeaderSections, sections: orderedSections, footerSections: orderedFooterSections },\n sectionOverrides,\n nodeOverrides,\n visibilityActions,\n icons,\n );\n\n const customizationRevision = JSON.stringify({\n header: orderedHeaderSections.map((section) => [\n section.id,\n toStringLabel(section.label, section.id),\n section.nodes.map((node) => [node.id, toStringLabel(node.label, node.id)]),\n ]),\n main: orderedSections.map((section) => [\n section.id,\n toStringLabel(section.label, section.id),\n section.nodes.map((node) => [node.id, toStringLabel(node.label, node.id)]),\n ]),\n footer: orderedFooterSections.map((section) => [\n section.id,\n toStringLabel(section.label, section.id),\n section.nodes.map((node) => [node.id, toStringLabel(node.label, node.id)]),\n ]),\n sectionOverrides,\n nodeOverrides,\n sectionOrder,\n nodeOrderBySection,\n sectionSlotById,\n });\n\n return {\n visibleHeaderSections,\n visibleSections,\n visibleFooterSections,\n backgroundContextActions,\n customizationRevision,\n onReorderSections: (slot, nextSectionIds) => {\n const idsBySlot: Record<TreeViewSlot, string[]> = {\n header: orderedHeaderSections.map((section) => section.id),\n content: orderedSections.map((section) => section.id),\n footer: orderedFooterSections.map((section) => section.id),\n };\n idsBySlot[slot] = nextSectionIds;\n setSectionOrder([...idsBySlot.header, ...idsBySlot.content, ...idsBySlot.footer]);\n },\n onMoveSection: (nextSectionIds, sourceSectionId, destinationSectionId) => {\n const destinationSlot =\n sectionSlotById[destinationSectionId] ?? defaultSlotBySectionId.get(destinationSectionId) ?? \"content\";\n setSectionSlot(sourceSectionId, destinationSlot);\n setSectionOrder(nextSectionIds);\n },\n onReorderNodes: setNodeOrder,\n };\n};\n","import { Box, Flex, Text } from \"@chakra-ui/react\";\nimport { type ResourceContextAction, ScrollArea, TreeList, TreeListDragProvider } from \"@pstdio/ui\";\nimport { type Dispatch, type SetStateAction, useEffect, useRef, useState } from \"react\";\nimport type {\n NavigationTarget,\n ResourceRef,\n TreeNode,\n TreeRendererState,\n TreeViewSection,\n WorkbenchCore,\n} from \"../../../core\";\nimport { getAnchorResource, getWorkbenchRenderers } from \"../../../core\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-params-dialog\";\nimport { WorkbenchIcon } from \"../../shared/icon\";\nimport { useWorkbenchStore } from \"../../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../../theme/workbench-theme-background\";\nimport type { TreeActionParamsRequest } from \"./tree-actions\";\nimport {\n filterTreeListSelection,\n findNodeInSections,\n resolveTreeListSelection,\n toTreeListSection,\n} from \"./tree-list-adapter\";\nimport { TreeParamsDialog } from \"./tree-params-dialog\";\nimport { TreeViewBody } from \"./tree-view-body\";\nimport { createMoveTreeNode } from \"./tree-view-move\";\nimport { shouldSelectTreeNodeForNavigationTarget } from \"./tree-view-navigation\";\nimport { TreeViewSearch } from \"./tree-view-search\";\nimport { useTreeData } from \"./use-tree-data\";\nimport { useTreeViewCustomization } from \"./use-tree-view-customization\";\n\ninterface WorkbenchTreeViewProps {\n workbench: WorkbenchCore;\n treeViewId: string;\n activeNodeId?: string | null;\n resource?: ResourceRef;\n viewId?: string;\n renderParamField?: CommandParamFieldRenderer;\n onOpenResourceError?: (error: unknown) => void;\n onSidenavContextActionsChange?: (actions: ResourceContextAction[]) => void;\n}\n\nconst EMPTY_TREE_STATE: TreeRendererState = { expandedNodeIds: [], expandedSectionIds: [] };\n\ntype WorkbenchLayoutState = ReturnType<WorkbenchCore[\"layout\"][\"getLayout\"]>;\n\nconst resolveActivePlacement = (\n widgets: WorkbenchLayoutState[\"regions\"][\"overlay\"][\"widgets\"],\n activeWidgetId: string | undefined,\n) => widgets.find((entry) => entry.widgetId === activeWidgetId) ?? widgets[0];\n\nconst resolveTreeActiveResource = (layout: WorkbenchLayoutState) =>\n resolveActivePlacement(layout.regions.overlay.widgets, layout.regions.overlay.activeWidgetId)?.resource ??\n getAnchorResource(layout, \"primary\");\n\nconst useSidenavContextActions = (\n actions: ResourceContextAction[],\n revision: string,\n onChange: ((actions: ResourceContextAction[]) => void) | undefined,\n) => {\n const actionsRef = useRef(actions);\n actionsRef.current = actions;\n\n useEffect(() => {\n void revision;\n onChange?.(actionsRef.current);\n }, [revision, onChange]);\n\n useEffect(\n () => () => {\n onChange?.([]);\n },\n [onChange],\n );\n};\n\ninterface TreeNavigationContext {\n workbench: WorkbenchCore;\n treeViewId: string;\n onOpenResourceError?: (error: unknown) => void;\n}\n\nconst navigateTreeNode = (\n context: TreeNavigationContext,\n nodeId: string,\n intent: { id?: string; payload?: unknown } | undefined,\n) => {\n if (intent?.id === \"target\") {\n const target = intent.payload as NavigationTarget;\n if (shouldSelectTreeNodeForNavigationTarget(target)) {\n getWorkbenchRenderers(context.workbench).setSelectedNode(context.treeViewId, nodeId);\n }\n void context.workbench.navigation.openTarget(target).catch(context.onOpenResourceError);\n return;\n }\n};\n\ninterface ToggleTreeNodeContext {\n workbench: WorkbenchCore;\n treeViewId: string;\n resource?: ResourceRef;\n viewId?: string;\n body: TreeViewSection[];\n header: TreeViewSection[];\n footer: TreeViewSection[];\n childrenByNodeId: Record<string, TreeNode[]>;\n expandedNodeIds: string[];\n setChildrenByNodeId: Dispatch<SetStateAction<Record<string, TreeNode[]>>>;\n}\n\nconst createToggleTreeNode = (context: ToggleTreeNodeContext) => (nodeId: string) => {\n const node =\n findNodeInSections(context.body, nodeId, context.childrenByNodeId) ??\n findNodeInSections([...context.header, ...context.footer], nodeId, context.childrenByNodeId);\n if (!node) return;\n\n const expanded = context.expandedNodeIds.includes(nodeId);\n getWorkbenchRenderers(context.workbench).setNodeExpanded(context.treeViewId, nodeId, !expanded);\n if (expanded || context.childrenByNodeId[nodeId] || node.children) return;\n\n void getWorkbenchRenderers(context.workbench)\n .getChildren(context.treeViewId, node, { resource: context.resource, viewId: context.viewId })\n .then((children) => {\n context.setChildrenByNodeId((current) => ({ ...current, [nodeId]: children }));\n });\n};\n\nexport const WorkbenchTreeView = (props: WorkbenchTreeViewProps) => {\n const {\n workbench,\n treeViewId,\n activeNodeId,\n resource,\n viewId,\n renderParamField,\n onOpenResourceError,\n onSidenavContextActionsChange,\n } = props;\n const scrollRef = useRef<HTMLDivElement | null>(null);\n const treeRenderer = getWorkbenchRenderers(workbench).getTreeRenderer(treeViewId);\n const [filter, setFilter] = useState(\"\");\n const treeState =\n useWorkbenchStore(getWorkbenchRenderers(workbench).treeStore, (state) => state.statesByTreeId[treeViewId]) ??\n EMPTY_TREE_STATE;\n const projectId = useWorkbenchStore(workbench.pages.store, (state) => state.projectId);\n const activeLocation = useWorkbenchStore(workbench.pages.store, (state) => state.location);\n const activeResource = useWorkbenchStore(workbench.layout.store, (state) => resolveTreeActiveResource(state.layout));\n const { body, childrenByNodeId, error, footer, header, loading, setChildrenByNodeId } = useTreeData(\n workbench,\n treeViewId,\n resource,\n viewId,\n treeRenderer?.searchable ? filter.trim() || undefined : undefined,\n );\n const [paramsRequest, setParamsRequest] = useState<TreeActionParamsRequest | null>(null);\n\n const adapterContext = {\n workbench,\n onCommandError: onOpenResourceError,\n onRequestParams: setParamsRequest,\n };\n const rawSections = body.map((section) => toTreeListSection(section, childrenByNodeId, adapterContext));\n const rawHeaderSections = header.map((section) => toTreeListSection(section, childrenByNodeId, adapterContext));\n const rawFooterSections = footer.map((section) => toTreeListSection(section, childrenByNodeId, adapterContext));\n const {\n visibleHeaderSections,\n visibleSections,\n visibleFooterSections,\n backgroundContextActions,\n customizationRevision,\n onReorderSections,\n onReorderNodes,\n onMoveSection,\n } = useTreeViewCustomization(\n `${treeViewId}:${projectId ?? \"global\"}`,\n {\n headerSections: rawHeaderSections,\n sections: rawSections,\n footerSections: rawFooterSections,\n },\n {\n visibleIcon: <WorkbenchIcon name=\"eye\" size={14} />,\n hiddenIcon: <WorkbenchIcon name=\"eye-off\" size={14} />,\n resetIcon: <WorkbenchIcon name=\"rotate-ccw\" size={14} />,\n },\n { suppressNodeContextMenus: Boolean(onSidenavContextActionsChange) },\n );\n useSidenavContextActions(backgroundContextActions, customizationRevision, onSidenavContextActionsChange);\n if (!treeRenderer) {\n return (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" p=\"sm\">\n Tree renderer is no longer registered.\n </Text>\n );\n }\n\n const toggleNode = createToggleTreeNode({\n workbench,\n treeViewId,\n resource,\n viewId,\n body,\n header,\n footer,\n childrenByNodeId,\n expandedNodeIds: treeState.expandedNodeIds,\n setChildrenByNodeId,\n });\n\n const toggleSection = (sectionId: string) => {\n const expanded = treeState.expandedSectionIds.includes(sectionId);\n\n getWorkbenchRenderers(workbench).setSectionExpanded(treeViewId, sectionId, !expanded);\n };\n const moveNode = createMoveTreeNode({\n workbench,\n renderer: treeRenderer,\n resource,\n viewId,\n sections: body,\n childrenByNodeId,\n onError: onOpenResourceError,\n });\n\n const navigationContext = { workbench, treeViewId, onOpenResourceError };\n\n const activeNodeSelection = resolveTreeListSelection({\n sections: [...header, ...body, ...footer],\n childrenByNodeId,\n activeNodeId,\n activeLocation,\n activeResource,\n selectedNodeId: treeState.selectedNodeId,\n });\n const headerActiveNodeId = filterTreeListSelection(header, childrenByNodeId, activeNodeSelection);\n const bodyActiveNodeId = filterTreeListSelection(body, childrenByNodeId, activeNodeSelection);\n const footerActiveNodeId = filterTreeListSelection(footer, childrenByNodeId, activeNodeSelection);\n\n return (\n <TreeListDragProvider\n sections={[...visibleHeaderSections, ...visibleSections, ...visibleFooterSections]}\n canMove={treeRenderer.canMove}\n onReorderSections={onMoveSection}\n onReorderNodes={onReorderNodes}\n >\n <Flex\n as=\"section\"\n direction=\"column\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n aria-label={treeRenderer.title}\n aria-busy={loading}\n >\n {!loading && visibleHeaderSections.length > 0 ? (\n <Flex bg={workbenchBackgrounds.sidenav} flexShrink={0}>\n <TreeList\n sections={visibleHeaderSections}\n draggable={Boolean(onSidenavContextActionsChange)}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n activeNodeId={headerActiveNodeId}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n nodeGap=\"1px\"\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n onReorderSections={(nextSectionIds) => onReorderSections(\"header\", nextSectionIds)}\n onReorderNodes={onReorderNodes}\n canMove={treeRenderer.canMove}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Flex>\n ) : null}\n <TreeViewSearch\n visible={Boolean(treeRenderer.searchable)}\n placeholder={treeRenderer.searchPlaceholder}\n value={filter}\n onChange={setFilter}\n />\n <ScrollArea\n flex=\"1\"\n minH=\"0\"\n w=\"full\"\n viewportRef={scrollRef}\n viewportProps={{\n display: \"block\",\n style: { overflowX: \"hidden\" },\n }}\n contentProps={{\n style: { minWidth: \"100%\", width: \"100%\", minHeight: \"100%\", display: \"flex\", flexDirection: \"column\" },\n }}\n >\n <Box w=\"full\" minW=\"0\" flex=\"1 0 auto\" display=\"flex\" flexDirection=\"column\">\n <TreeViewBody\n error={error}\n loading={loading}\n moduleLoading={treeState.loading}\n sections={visibleSections}\n backgroundContextActions={onSidenavContextActionsChange ? undefined : backgroundContextActions}\n draggable={Boolean(onSidenavContextActionsChange)}\n customizationAvailable={Boolean(onSidenavContextActionsChange)}\n activeNodeId={bodyActiveNodeId}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n scrollRef={scrollRef}\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n onReorderSections={(nextSectionIds) => onReorderSections(\"content\", nextSectionIds)}\n onReorderNodes={onReorderNodes}\n canMove={treeRenderer.canMove}\n onMoveNode={moveNode}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Box>\n </ScrollArea>\n {!loading && visibleFooterSections.length > 0 ? (\n <Flex bg={workbenchBackgrounds.sidenav} flexShrink={0}>\n <TreeList\n sections={visibleFooterSections}\n draggable={Boolean(onSidenavContextActionsChange)}\n expandedNodeIds={treeState.expandedNodeIds}\n expandedSectionIds={treeState.expandedSectionIds}\n activeNodeId={footerActiveNodeId}\n rowVariant=\"compact\"\n sectionGap=\"md\"\n nodeGap=\"1px\"\n onToggleSection={toggleSection}\n onToggleNode={toggleNode}\n onReorderSections={(nextSectionIds) => onReorderSections(\"footer\", nextSectionIds)}\n onReorderNodes={onReorderNodes}\n canMove={treeRenderer.canMove}\n onNavigate={(event) => navigateTreeNode(navigationContext, event.nodeId, event.intent)}\n />\n </Flex>\n ) : null}\n <TreeParamsDialog\n request={paramsRequest}\n renderParamField={renderParamField}\n workbench={workbench}\n onClose={() => setParamsRequest(null)}\n />\n </Flex>\n </TreeListDragProvider>\n );\n};\n","import { useSyncExternalStore } from \"react\";\nimport type { SettingsRegistry } from \"../../core\";\n\nexport const useSettingsRevision = (settings: SettingsRegistry) =>\n useSyncExternalStore(\n (listener) => settings.store.subscribe(() => listener()),\n () => settings.store.getState().revision,\n () => settings.store.getState().revision,\n );\n","import { Box, Flex, Spinner, Stack, Text } from \"@chakra-ui/react\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { EmptyState, ScrollArea } from \"@pstdio/ui\";\nimport { type ReactNode, useEffect, useState } from \"react\";\nimport {\n type CollectionSettingsPanel,\n getWorkbenchRenderers,\n type PreferenceScope,\n type SettingsRegistry,\n type WorkbenchPanelRenderInput,\n} from \"../../core\";\nimport { WorkbenchPreferencesForm } from \"../renderers/settings/preferences-form\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { useSettingsRevision } from \"./use-settings-revision\";\nexport interface SettingsSurfacePanelProps {\n input: WorkbenchPanelRenderInput;\n settings: SettingsRegistry;\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n}\nconst Centered = (props: { children: ReactNode }) => (\n <Flex h=\"full\" minH=\"0\" align=\"center\" justify=\"center\" p=\"lg\">\n {props.children}\n </Flex>\n);\nconst ScrollableSettingsContent = (props: { children: ReactNode }) => (\n <ScrollArea h=\"full\" minH=\"0\" contentProps={{ h: \"full\", minH: \"full\" }}>\n <Box h=\"full\" minH=\"full\">\n {props.children}\n </Box>\n </ScrollArea>\n);\nconst SettingsViewContent = (props: { input: WorkbenchPanelRenderInput; panelId: string; viewId: string }) => {\n const { input, panelId, viewId } = props;\n const renderer = useWorkbenchStore(getWorkbenchRenderers(input.workbench).store, (state) => state.renderers[viewId]);\n useWorkbenchStore(getWorkbenchRenderers(input.workbench).store, (state) => state.refreshKeys[viewId] ?? 0);\n if (!renderer) {\n return (\n <Centered>\n <EmptyState title=\"Settings View not found\" />\n </Centered>\n );\n }\n return (\n <ScrollableSettingsContent>\n {renderer.render({ ...input, instance: { ...input.instance, panelId, viewId } }) as ReactNode}\n </ScrollableSettingsContent>\n );\n};\n// Resolve async collection data before rendering its registered View. The View\n// can read the current item from settings by the stable panel and item ids.\nconst CollectionItemView = (props: {\n panel: CollectionSettingsPanel;\n itemId: string;\n input: WorkbenchPanelRenderInput;\n}) => {\n const { panel, itemId, input } = props;\n const resolveCollectionItem = input.workbench.settings.resolveCollectionItem;\n const [state, setState] = useState<{\n status: \"loading\" | \"ready\" | \"missing\";\n }>({\n status: \"loading\",\n });\n useEffect(() => {\n let alive = true;\n setState({ status: \"loading\" });\n resolveCollectionItem(panel.id, itemId).then((item) => {\n if (!alive) return;\n setState(item === undefined ? { status: \"missing\" } : { status: \"ready\" });\n });\n return () => {\n alive = false;\n };\n }, [panel, itemId, resolveCollectionItem]);\n if (state.status === \"loading\")\n return (\n <Centered>\n <Spinner size=\"sm\" />\n </Centered>\n );\n if (state.status === \"missing\")\n return (\n <Centered>\n <EmptyState title=\"Item not found\" />\n </Centered>\n );\n return <SettingsViewContent input={input} panelId={panel.id} viewId={panel.viewId} />;\n};\n// The single main-region renderer for the settings surface. Dispatches the open\n// resource to a schema form, a custom view, or a collection item editor.\nexport const SettingsSurfacePanel = (props: SettingsSurfacePanelProps) => {\n const { input, settings, resolveScopeId } = props;\n const revision = useSettingsRevision(settings);\n const resource = input.instance.resource;\n const panelId = typeof resource?.metadata?.panelId === \"string\" ? resource.metadata.panelId : undefined;\n const itemId = typeof resource?.metadata?.itemId === \"string\" ? resource.metadata.itemId : undefined;\n const panel = panelId ? settings.getPanel(panelId) : undefined;\n if (!panel) {\n return (\n <Centered>\n <EmptyState title=\"Select a settings entry\" description=\"Pick an item from the settings sidenav.\" />\n </Centered>\n );\n }\n if (panel.kind === \"view\") return <SettingsViewContent input={input} panelId={panel.id} viewId={panel.viewId} />;\n if (panel.kind === \"collection\") {\n if (!itemId)\n return (\n <Centered>\n <EmptyState title={panel.title} />\n </Centered>\n );\n return (\n <CollectionItemView\n key={`${resourceKey(resource) ?? itemId}:${revision}`}\n panel={panel}\n itemId={itemId}\n input={input}\n />\n );\n }\n return (\n <ScrollArea h=\"full\" minH=\"0\" contentProps={{ p: \"lg\", display: \"flex\", flexDirection: \"column\", gap: \"md\" }}>\n <Stack gap=\"xs\">\n <Text textStyle=\"heading/M/semibold\">{panel.title}</Text>\n {panel.description && (\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\" maxW=\"640px\">\n {panel.description}\n </Text>\n )}\n </Stack>\n <WorkbenchPreferencesForm\n preferences={input.workbench.preferences}\n names={panel.preferences}\n resolveScopeId={resolveScopeId}\n mode={panel.save ?? \"live\"}\n />\n </ScrollArea>\n );\n};\n","import { Box, Flex, Text } from \"@chakra-ui/react\";\nimport { resourceKey } from \"@pstdio/sdk/extensions\";\nimport { ResizableSplitLayout } from \"@pstdio/ui\";\nimport type { PreferenceScope, SettingsRegistry, WorkbenchPanelRenderInput } from \"../../core\";\nimport { WorkbenchTreeView } from \"../renderers/tree/tree-view\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { SettingsSurfacePanel } from \"./settings-surface-panel\";\nimport { useSettingsRevision } from \"./use-settings-revision\";\nexport interface SettingsOverlayProps {\n input: WorkbenchPanelRenderInput;\n settings: SettingsRegistry;\n navTreeId: string;\n title: string;\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n}\n// The settings surface rendered inside the overlay dialog: a titled header bar,\n// then a full-height resizable nav on the left and the dispatching panel on the\n// right. Nav clicks execute the settings command, which re-opens this singleton\n// overlay with the new resource — selection stays resource-driven and the dialog\n// never closes mid-navigation.\nexport const SettingsOverlay = (props: SettingsOverlayProps) => {\n const { input, settings, navTreeId, title, resolveScopeId } = props;\n useSettingsRevision(settings);\n const resource = input.instance.resource;\n const nav = (\n <Box h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" bg=\"bg.subtle\">\n <WorkbenchTreeView\n workbench={input.workbench}\n treeViewId={navTreeId}\n resource={resource}\n activeNodeId={resourceKey(resource)}\n />\n </Box>\n );\n const content = (\n <Box flex=\"1\" h=\"full\" minH=\"0\" minW=\"0\">\n <SettingsSurfacePanel input={input} settings={settings} resolveScopeId={resolveScopeId} />\n </Box>\n );\n return (\n <Flex direction=\"column\" position=\"absolute\" inset=\"0\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <Flex\n align=\"center\"\n bg=\"bg.subtle\"\n borderBottomWidth=\"1px\"\n borderColor=\"border.subtle\"\n flexShrink={0}\n gap=\"2\"\n h=\"12\"\n px=\"3.5\"\n >\n <Box color=\"fg.accent\" display=\"inline-flex\">\n <WorkbenchIcon name=\"settings\" size={16} />\n </Box>\n <Text fontWeight=\"semibold\" textStyle=\"sm\">\n {title}\n </Text>\n </Flex>\n <Box flex=\"1\" minH=\"0\" minW=\"0\" position=\"relative\" overflow=\"hidden\">\n <ResizableSplitLayout\n position=\"absolute\"\n inset=\"0\"\n minH=\"0\"\n minW=\"0\"\n resizableSide=\"left\"\n resizablePanel={nav}\n contentPanel={content}\n defaultSizePx={280}\n minSizePx={220}\n maxSizePx={420}\n contentMinSizePx={360}\n collapsible={false}\n resizeLabel=\"Resize settings navigation\"\n separator=\"line\"\n />\n </Box>\n </Flex>\n );\n};\n","import type { ResourceRef, SettingsScope } from \"../../core\";\nexport const SETTINGS_RESOURCE_KIND = \"workbench-settings\";\nexport const WORKBENCH_SETTINGS_OPEN_COMMAND_ID = \"workbench.settings.open\";\nexport const settingsPanelResource = (panel: { id: string; title: string; icon?: string }): ResourceRef => ({\n type: SETTINGS_RESOURCE_KIND,\n id: panel.id,\n label: panel.title,\n icon: panel.icon,\n metadata: { panelId: panel.id },\n});\nexport const settingsItemResource = (\n panelId: string,\n item: {\n id: string;\n label: string;\n icon?: string;\n },\n): ResourceRef => ({\n type: SETTINGS_RESOURCE_KIND,\n id: `${panelId}::${item.id}`,\n label: item.label,\n icon: item.icon,\n metadata: { panelId, itemId: item.id },\n});\n// Project-scoped entries stay hidden until a project scope id is available; global\n// entries are always visible. Mirrors the old dashboards' projectless behavior.\nexport const isSettingsScopeVisible = (scope: SettingsScope | undefined, hasProjectScope: boolean) =>\n (scope ?? \"project\") !== \"project\" || hasProjectScope;\n","import { resourceKey } from \"@pstdio/sdk/extensions\";\nimport type {\n CollectionSettingsPanel,\n RegisteredSettingsPanel,\n SettingsAction,\n SettingsRegistry,\n TreeAction,\n TreeNode,\n TreeViewSection,\n} from \"../../core\";\nimport {\n isSettingsScopeVisible,\n settingsItemResource,\n settingsPanelResource,\n WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n} from \"./settings-resources\";\nexport const FALLBACK_SECTION_ID = \"settings\";\nconst toTreeActions = (actions: SettingsAction[] | undefined): TreeAction[] | undefined =>\n actions?.map((action) => ({ id: action.id, label: action.label, icon: action.icon, run: action.run }));\nconst collectionItemNode = (panel: CollectionSettingsPanel, item: unknown): TreeNode => {\n const id = panel.itemId(item);\n const label = panel.itemLabel(item);\n const icon = panel.itemIcon?.(item);\n const resource = settingsItemResource(panel.id, { id, label, icon });\n return {\n id: resourceKey(resource),\n label,\n icon,\n resource,\n target: {\n kind: \"command\",\n commandId: WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n args: { panelId: panel.id, itemId: id },\n },\n };\n};\nconst orderGroupKeys = (keys: string[], order: string[] | undefined) => {\n const indexOf = (key: string) => {\n const index = order?.indexOf(key) ?? -1;\n return index === -1 ? Number.POSITIVE_INFINITY : index;\n };\n return [...keys].sort((left, right) => indexOf(left) - indexOf(right));\n};\nconst collectionChildren = async (panel: CollectionSettingsPanel): Promise<TreeNode[]> => {\n const items = await Promise.resolve(panel.items()).catch(() => []);\n if (!panel.groupBy) return items.map((item) => collectionItemNode(panel, item));\n const groupBy = panel.groupBy;\n const byKey = new Map<string, unknown[]>();\n for (const item of items) {\n const key = groupBy.key(item);\n const list = byKey.get(key) ?? [];\n list.push(item);\n byKey.set(key, list);\n }\n return orderGroupKeys([...byKey.keys()], groupBy.order).map((key) => ({\n id: `${panel.id}:group:${key}`,\n label: groupBy.label(key),\n icon: groupBy.icon?.(key),\n collapsible: true,\n children: (byKey.get(key) ?? []).map((item) => collectionItemNode(panel, item)),\n }));\n};\nconst panelToNode = async (panel: RegisteredSettingsPanel): Promise<TreeNode> => {\n if (panel.kind === \"collection\") {\n return {\n id: `settings-collection:${panel.id}`,\n label: panel.title,\n icon: panel.icon,\n collapsible: true,\n actions: toTreeActions(panel.actions),\n children: await collectionChildren(panel),\n };\n }\n const resource = settingsPanelResource(panel);\n return {\n id: resourceKey(resource),\n label: panel.title,\n icon: panel.icon,\n resource,\n target: {\n kind: \"command\",\n commandId: WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n args: { panelId: panel.id },\n },\n };\n};\nexport interface BuildSettingsTreeInput {\n settings: SettingsRegistry;\n hasProjectScope: boolean;\n matchesWhen(expression?: string): boolean;\n}\n// Derives the settings navigation tree from the registry: one section per registered\n// section (headerless when titleless), schema/custom panels as leaves, and collection\n// panels expanded into per-item nodes (optionally grouped). Scope gates project entries.\nexport const buildSettingsTreeBody = async (input: BuildSettingsTreeInput): Promise<TreeViewSection[]> => {\n const { settings, hasProjectScope, matchesWhen } = input;\n const sections = settings.listSections();\n const sectionsById = new Map(sections.map((section) => [section.id, section]));\n const panels = settings\n .listPanels()\n .filter((panel) => isSettingsScopeVisible(panel.scope, hasProjectScope) && matchesWhen(panel.when));\n const bySection = new Map<string, RegisteredSettingsPanel[]>();\n for (const panel of panels) {\n const sectionId = panel.section && sectionsById.has(panel.section) ? panel.section : FALLBACK_SECTION_ID;\n const list = bySection.get(sectionId) ?? [];\n list.push(panel);\n bySection.set(sectionId, list);\n }\n const renderOrder = sections.map((section) => section.id);\n if (bySection.has(FALLBACK_SECTION_ID) && !sectionsById.has(FALLBACK_SECTION_ID)) {\n renderOrder.push(FALLBACK_SECTION_ID);\n }\n const result: TreeViewSection[] = [];\n for (const sectionId of renderOrder) {\n const section = sectionsById.get(sectionId);\n // Sections are containers — only hide one that is *explicitly* project-scoped.\n // No-scope sections fall through and are dropped below if they have no content.\n if (section?.scope === \"project\" && !hasProjectScope) continue;\n const sectionPanels = bySection.get(sectionId) ?? [];\n const actions = toTreeActions(section?.actions);\n if (sectionPanels.length === 0 && !actions) continue;\n const nodes: TreeNode[] = [];\n for (const panel of sectionPanels) nodes.push(await panelToNode(panel));\n // Settings groups are plain labels, not accordions — the whole tree stays visible.\n result.push({ id: sectionId, label: section?.title, actions, nodes, collapsible: false });\n }\n return result;\n};\n","import {\n type PreferenceScope,\n standardResourceIcons,\n type WorkbenchModuleContext,\n type WorkbenchModuleContribution,\n} from \"../../core\";\nimport { SettingsOverlay } from \"./settings-overlay\";\nimport {\n isSettingsScopeVisible,\n settingsItemResource,\n settingsPanelResource,\n WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n} from \"./settings-resources\";\nimport { SettingsSurfacePanel } from \"./settings-surface-panel\";\nimport { buildSettingsTreeBody, FALLBACK_SECTION_ID } from \"./settings-tree\";\n\nexport interface WorkbenchSettingsModuleOptions {\n /** Maps a preference scope (e.g. \"project\") to its scope id; project entries hide until this resolves. */\n resolveScopeId?: (scope: PreferenceScope) => string | undefined;\n /** Heading shown at the top of the settings overlay. */\n title?: string;\n}\n\n// The single overlay placement that hosts the whole settings surface.\nexport const WORKBENCH_SETTINGS_WIDGET_ID = \"workbench.settings\";\nexport const WORKBENCH_SETTINGS_NAV_WIDGET_ID = \"workbench.settings.nav\";\nexport const WORKBENCH_SETTINGS_PANEL_WIDGET_ID = \"workbench.settings.panel\";\n\n// Built-in command to open settings at the first visible panel. Always registered\n// by the surface, so it is available in the command palette without host wiring;\n// hosts only add a curated menu item pointing at this id if they want one.\nexport { WORKBENCH_SETTINGS_OPEN_COMMAND_ID } from \"./settings-resources\";\n\nconst WIDGET_ID = WORKBENCH_SETTINGS_WIDGET_ID;\n\nconst openSettings = (input: { args: unknown; ctx: WorkbenchModuleContext; hasProjectScope: () => boolean }) => {\n const { args, ctx, hasProjectScope } = input;\n const requested = args && typeof args === \"object\" ? args : undefined;\n const panelId = requested && \"panelId\" in requested ? requested.panelId : undefined;\n const itemId = requested && \"itemId\" in requested ? requested.itemId : undefined;\n const requestedPanel = typeof panelId === \"string\" ? ctx.settings.getPanel(panelId) : undefined;\n const isVisible = (entry: NonNullable<typeof requestedPanel>) =>\n isSettingsScopeVisible(entry.scope, hasProjectScope()) && ctx.context.matches(entry.when);\n const panel =\n (requestedPanel && isVisible(requestedPanel) ? requestedPanel : undefined) ??\n ctx.settings.listPanels().find(isVisible);\n if (!panel) return undefined;\n const resource =\n panel.kind === \"collection\" && typeof itemId === \"string\"\n ? settingsItemResource(panel.id, { id: itemId, label: itemId })\n : settingsPanelResource(panel);\n ctx.overlays.openOverlay(WIDGET_ID, {\n resource,\n title: resource.label,\n });\n return resource;\n};\n\n// The unified Settings surface: a full-window modal overlay containing a nav tree\n// (derived from `ctx.settings`) and a dispatching panel, plus a resource presenter\n// that pops the overlay. Contributors only call ctx.settings.registerSection/\n// registerPanel — this renders and wires everything; hosts add no mode or presenter.\nexport const createWorkbenchSettingsModule = (\n options: WorkbenchSettingsModuleOptions = {},\n): WorkbenchModuleContribution => {\n const title = options.title ?? \"Settings\";\n const hasProjectScope = () => options.resolveScopeId?.(\"project\") !== undefined;\n\n return {\n id: \"workbench.settings.surface\",\n activate(ctx) {\n ctx.views.registerView({\n id: WORKBENCH_SETTINGS_NAV_WIDGET_ID,\n title: `${title} navigation`,\n body: {\n kind: \"tree\",\n // Settings sections read as a single scannable list, so every section starts expanded.\n defaultExpandedSectionIds: [...ctx.settings.listSections().map((section) => section.id), FALLBACK_SECTION_ID],\n getBody: () =>\n buildSettingsTreeBody({\n settings: ctx.settings,\n hasProjectScope: hasProjectScope(),\n matchesWhen: (when) => ctx.context.matches(when),\n }),\n getChildren: () => [],\n },\n });\n\n ctx.views.registerView({\n id: WORKBENCH_SETTINGS_PANEL_WIDGET_ID,\n title,\n body: {\n kind: \"react\",\n render: (input) => (\n <SettingsSurfacePanel input={input} settings={ctx.settings} resolveScopeId={options.resolveScopeId} />\n ),\n },\n });\n\n ctx.views.registerView({\n id: WIDGET_ID,\n title,\n body: {\n kind: \"react\",\n render: (input) => (\n <SettingsOverlay\n input={input}\n settings={ctx.settings}\n navTreeId={WORKBENCH_SETTINGS_NAV_WIDGET_ID}\n title={title}\n resolveScopeId={options.resolveScopeId}\n />\n ),\n },\n });\n ctx.overlays.registerOverlay({\n id: WIDGET_ID,\n viewId: WIDGET_ID,\n config: {\n size: \"xl\",\n scrollBehavior: \"inside\",\n contentHeight: \"min(760px, 88vh)\",\n contentMaxWidth: \"min(1440px, 94vw)\",\n contentWidth: \"94vw\",\n closeTriggerTop: \"3.5\",\n // Settings hosts nested overlays (confirmations, popovers) that portal\n // outside this dialog's content; outside-interact dismissal would treat\n // clicks in them as \"close settings\". Esc and the close button remain.\n closeOnInteractOutside: false,\n },\n });\n\n ctx.commands.registerCommand(\n {\n id: WORKBENCH_SETTINGS_OPEN_COMMAND_ID,\n label: \"Open settings\",\n category: \"Settings\",\n icon: standardResourceIcons.settings,\n },\n {\n execute: (args) => openSettings({ args, ctx, hasProjectScope }),\n },\n );\n\n // Keep the tree in sync as contributions register or their context conditions change.\n const refreshNavigation = () => {\n if (ctx.views.getView(WORKBENCH_SETTINGS_NAV_WIDGET_ID)) {\n ctx.views.refreshView(WORKBENCH_SETTINGS_NAV_WIDGET_ID);\n }\n };\n const unsubscribeSettings = ctx.settings.store.subscribe(refreshNavigation);\n const unsubscribeContext = ctx.context.store.subscribe(refreshNavigation);\n return {\n dispose() {\n unsubscribeSettings();\n unsubscribeContext();\n },\n };\n },\n };\n};\n","import type { WorkbenchCore, WorkbenchRegion } from \"../../core\";\n\nexport const resolvePanelCollapsible = (workbench: WorkbenchCore, ...regions: WorkbenchRegion[]) =>\n regions.every((region) => workbench.layout.getRegionCollapsible(region));\n","interface CanAttachWorkbenchPanelMenuInput {\n panelWidth: number;\n targetMenuMinSize: number;\n attachedMenuMinSizes: readonly number[];\n}\n\nexport const PANEL_CONTENT_MIN_SIZE_PX = 120;\nexport const PANEL_MENU_RESIZE_HANDLE_SIZE_PX = 1;\nexport const PANEL_MENU_COLLAPSE_THRESHOLD_PX = 480;\n\nexport const shouldCollapseWorkbenchPanelMenus = (panelWidth: number) =>\n panelWidth > 0 && panelWidth <= PANEL_MENU_COLLAPSE_THRESHOLD_PX;\n\nexport const canAttachWorkbenchPanelMenu = (input: CanAttachWorkbenchPanelMenuInput) => {\n const menuMinSizes = [...input.attachedMenuMinSizes, input.targetMenuMinSize];\n const requiredWidth =\n PANEL_CONTENT_MIN_SIZE_PX +\n menuMinSizes.reduce((total, size) => total + size, 0) +\n menuMinSizes.length * PANEL_MENU_RESIZE_HANDLE_SIZE_PX;\n\n return input.panelWidth >= requiredWidth;\n};\n","import { Box, HStack, IconButton, Menu, Portal, Text } from \"@chakra-ui/react\";\nimport { AttachedMenu, Header, PANEL_HEADER_CONTROL_SIZE, ResizableSplitLayout, Tooltip } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n getActiveWorkbenchLocationPanel,\n getActiveWorkbenchSubPanel,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchModeEligibility,\n matchesWorkbenchPanelMenuOwner,\n type WorkbenchCore,\n type WorkbenchPanelMenuRegion,\n type WorkbenchPanelMenuSide,\n type WorkbenchPanelRegion,\n type WorkbenchRegionSize,\n workbenchPanelMenuRegions,\n} from \"../../core\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { resolvePanelCollapsible } from \"../workbench/workbench-panel-state\";\nimport {\n canAttachWorkbenchPanelMenu,\n PANEL_CONTENT_MIN_SIZE_PX,\n shouldCollapseWorkbenchPanelMenus,\n} from \"./panel-menu-sizing\";\n\nconst PANEL_MENU_SIZE = { defaultPx: 280, minPx: 144, maxPx: 320 };\n\nconst panelLabels: Record<WorkbenchPanelRegion, string> = {\n main: \"Main\",\n secondary: \"Secondary\",\n side: \"Side\",\n};\n\nconst resolveRegionSize = (regionSize: WorkbenchRegionSize | undefined) => ({\n defaultPx: regionSize?.defaultPx ?? PANEL_MENU_SIZE.defaultPx,\n minPx: regionSize?.minPx ?? PANEL_MENU_SIZE.minPx,\n maxPx: regionSize ? regionSize.maxPx : PANEL_MENU_SIZE.maxPx,\n});\n\nexport const getWorkbenchPanelMenuLabel = (panel: WorkbenchPanelRegion, side: WorkbenchPanelMenuSide) =>\n `${panelLabels[panel]} ${side} menu`;\n\ninterface WorkbenchPanelMenuView {\n region: WorkbenchPanelMenuRegion;\n side: WorkbenchPanelMenuSide;\n label: string;\n title: string;\n icon: string;\n has: boolean;\n collapsed: boolean;\n responsiveCollapsed: boolean;\n collapsible: boolean;\n size: ReturnType<typeof resolveRegionSize>;\n onOpen: () => void;\n onCollapsedChange: (collapsed: boolean) => void;\n}\n\nconst useWorkbenchPanelMenu = (\n workbench: WorkbenchCore,\n panel: WorkbenchPanelRegion,\n side: WorkbenchPanelMenuSide,\n responsiveCollapsed = false,\n): WorkbenchPanelMenuView => {\n const region = workbenchPanelMenuRegions[panel][side];\n const locationResource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const layout = useWorkbenchStore(workbench.layout.store, (state) => state.layout);\n const registeredWidgets = useWorkbenchStore(workbench.layout.store, (state) => state.widgets);\n const currentRegionState = layout.regions[region];\n const activeSubPanel = getActiveWorkbenchSubPanel(layout, panel, locationResource, {\n ignoreOwnerResourceKey: panel === \"side\",\n });\n const activeLocationPanel = getActiveWorkbenchLocationPanel(layout);\n const regionState = {\n ...currentRegionState,\n widgets: currentRegionState.widgets.filter((placement) => {\n const contribution = registeredWidgets[placement.contributionId];\n return contribution\n ? (panel === \"side\"\n ? matchesWorkbenchModeEligibility(contribution, modeId)\n : isWorkbenchPanelPlacementVisible(contribution, locationResource, modeId, placement, {\n location: activeLocationPanel,\n })) &&\n matchesWorkbenchPanelMenuOwner(contribution, {\n locationPanel: activeLocationPanel,\n subPanel: activeSubPanel,\n })\n : false;\n }),\n };\n const activePlacement =\n regionState.widgets.find((placement) => placement.widgetId === regionState.activeWidgetId) ??\n regionState.widgets[0];\n const widget = activePlacement ? registeredWidgets[activePlacement.contributionId] : undefined;\n const collapsible = useWorkbenchStore(workbench.layout.store, () => resolvePanelCollapsible(workbench, region));\n const panelStateKey = activePlacement ? `panel-menu:${activePlacement.widgetId}` : region;\n const open = useWorkbenchStore(workbench.panelMenuState.store, (state) => state.openByMenuId[panelStateKey] ?? true);\n\n return {\n region,\n side,\n label: getWorkbenchPanelMenuLabel(panel, side),\n title: widget?.title ?? getWorkbenchPanelMenuLabel(panel, side),\n icon: widget?.icon ?? (side === \"left\" ? \"PanelLeft\" : \"PanelRight\"),\n has: regionState.widgets.length > 0 || Boolean(workbench.layout.getPlaceholder(region)),\n collapsed: (!open || responsiveCollapsed) && collapsible,\n responsiveCollapsed,\n collapsible,\n size: resolveRegionSize(workbench.layout.getRegionSize(region)),\n onOpen: () => workbench.panelMenuState.setOpen(panelStateKey, true),\n onCollapsedChange: (collapsed) => {\n if (!collapsed || collapsible) workbench.panelMenuState.setOpen(panelStateKey, !collapsed);\n },\n };\n};\n\nconst WorkbenchPanelMenu = (props: { workbench: WorkbenchCore; view: WorkbenchPanelMenuView }) => {\n const { view, workbench } = props;\n const panel = view.region.split(\"-\")[0] as WorkbenchPanelRegion;\n const background = panel === \"side\" ? workbenchBackgrounds.widget : workbenchBackgrounds.panel;\n\n return (\n <AttachedMenu\n data-workbench-panel-menu={`${panel}-${view.side}`}\n data-workbench-region={view.region}\n bg={background}\n >\n <WorkbenchRegion workbench={workbench} region={view.region} title={view.label} transparent />\n </AttachedMenu>\n );\n};\n\nconst addPanelMenu = (input: { content: ReactNode; view: WorkbenchPanelMenuView; workbench: WorkbenchCore }) => {\n const { content, view, workbench } = input;\n\n return (\n <ResizableSplitLayout\n minH=\"0\"\n minW=\"0\"\n resizableSide={view.side}\n resizablePanel={<WorkbenchPanelMenu workbench={workbench} view={view} />}\n contentPanel={content}\n collapsed={!view.has || view.collapsed}\n collapsible={view.collapsible}\n defaultSizePx={view.size.defaultPx}\n minSizePx={view.size.minPx}\n maxSizePx={view.size.maxPx}\n contentMinSizePx={PANEL_CONTENT_MIN_SIZE_PX}\n resizeLabel={`Resize ${view.label}`}\n separator=\"line\"\n onSizeChange={(width) => workbench.layout.setRegionSize(view.region, width)}\n onCollapsedChange={view.onCollapsedChange}\n />\n );\n};\n\nexport const WorkbenchPanelMenuLayout = (props: {\n workbench: WorkbenchCore;\n panel: WorkbenchPanelRegion;\n children: ReactNode;\n}) => {\n const { children, panel, workbench } = props;\n const panelWidth = useWorkbenchPanelWidth(panel);\n const responsiveCollapsed = shouldCollapseWorkbenchPanelMenus(panelWidth);\n const left = useWorkbenchPanelMenu(workbench, panel, \"left\", responsiveCollapsed);\n const right = useWorkbenchPanelMenu(workbench, panel, \"right\", responsiveCollapsed);\n const withRight = addPanelMenu({ content: children, view: right, workbench });\n return addPanelMenu({ content: withRight, view: left, workbench });\n};\n\nconst useWorkbenchPanelWidth = (panel: WorkbenchPanelRegion) => {\n const [width, setWidth] = useState(0);\n\n useEffect(() => {\n const element = document.querySelector<HTMLElement>(`[data-workbench-panel=\"${panel}\"]`);\n if (!element) return;\n\n const measure = () => setWidth(element.clientWidth);\n measure();\n const observer = new ResizeObserver(measure);\n observer.observe(element);\n return () => observer.disconnect();\n }, [panel]);\n\n return width;\n};\n\ninterface WorkbenchPanelMenuOpenerProps {\n view: WorkbenchPanelMenuView;\n workbench: WorkbenchCore;\n canAttach: boolean;\n}\n\nconst WorkbenchPanelMenuOpener = (props: WorkbenchPanelMenuOpenerProps) => {\n const { canAttach, view, workbench } = props;\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n return (\n <Menu.Root\n positioning={{ placement: \"bottom-start\", offset: { mainAxis: 0 }, getAnchorElement: () => triggerRef.current }}\n onExitComplete={() => triggerRef.current?.focus()}\n >\n <Tooltip content={view.title}>\n <Menu.Trigger asChild>\n <IconButton\n ref={triggerRef}\n variant=\"ghost\"\n size={PANEL_HEADER_CONTROL_SIZE}\n aria-label={`Open ${view.label}`}\n flexShrink={0}\n >\n <WorkbenchIcon name={view.side === \"left\" ? \"PanelLeftOpen\" : \"PanelRightOpen\"} size={14} />\n </IconButton>\n </Menu.Trigger>\n </Tooltip>\n <Portal>\n <Menu.Positioner>\n <Menu.Content\n aria-label={`${view.label} controls`}\n data-workbench-panel-menu-controls={view.region}\n boxShadow=\"none\"\n display=\"flex\"\n flexDirection=\"column\"\n h=\"64\"\n maxW=\"64\"\n minW=\"64\"\n overflow=\"hidden\"\n p=\"0\"\n w=\"64\"\n >\n <Header variant=\"narrow\" borderBottomWidth=\"1px\" borderColor=\"border.subtle\" flexShrink={0} gap=\"xs\">\n <WorkbenchIcon name={view.icon} size={14} />\n <Text flex=\"1\" minW=\"0\" textStyle=\"label/S/medium\" truncate>\n {view.title}\n </Text>\n <Tooltip content={canAttach ? `Attach ${view.label}` : \"Panel is too narrow to attach this menu\"}>\n <Box as=\"span\" display=\"inline-flex\">\n <IconButton\n variant=\"ghost\"\n size=\"xs\"\n aria-label={`Attach ${view.label}`}\n disabled={!canAttach}\n onClick={view.onOpen}\n >\n <WorkbenchIcon name={view.side === \"left\" ? \"PanelLeft\" : \"PanelRight\"} size={14} />\n </IconButton>\n </Box>\n </Tooltip>\n </Header>\n <Box flex=\"1\" minH=\"0\" minW=\"0\">\n <WorkbenchRegion workbench={workbench} region={view.region} title={view.label} transparent />\n </Box>\n </Menu.Content>\n </Menu.Positioner>\n </Portal>\n </Menu.Root>\n );\n};\n\nexport const WorkbenchPanelMenuOpeners = (props: { workbench: WorkbenchCore; panel: WorkbenchPanelRegion }) => {\n const { panel, workbench } = props;\n const panelWidth = useWorkbenchPanelWidth(panel);\n const responsiveCollapsed = shouldCollapseWorkbenchPanelMenus(panelWidth);\n const left = useWorkbenchPanelMenu(workbench, panel, \"left\", responsiveCollapsed);\n const right = useWorkbenchPanelMenu(workbench, panel, \"right\", responsiveCollapsed);\n const views = [left, right];\n const closedMenus = [left, right].filter((view) => view.has && view.collapsed);\n\n if (closedMenus.length === 0) return null;\n\n return (\n <HStack flexShrink={0} gap=\"2xs\" minW=\"0\">\n {closedMenus.map((view) => {\n const attachedMenuMinSizes = views\n .filter((candidate) => candidate.has && !candidate.collapsed)\n .map((candidate) => candidate.size.minPx);\n const canAttach =\n !view.responsiveCollapsed &&\n canAttachWorkbenchPanelMenu({\n panelWidth,\n targetMenuMinSize: view.size.minPx,\n attachedMenuMinSizes,\n });\n\n return <WorkbenchPanelMenuOpener key={view.region} view={view} workbench={workbench} canAttach={canAttach} />;\n })}\n </HStack>\n );\n};\n","import { useShallow } from \"zustand/react/shallow\";\nimport type { WorkbenchCore, WorkbenchRegion } from \"../../core\";\nimport { useWorkbenchStore } from \"./use-workbench-store\";\n\n// Read mode policy through its store so the React compiler sees policy changes.\nexport const useWorkbenchModeRegionSettings = (workbench: WorkbenchCore, region: WorkbenchRegion) =>\n useWorkbenchStore(\n workbench.modes.store,\n useShallow(() => workbench.layout.getRegionSettings(region)),\n );\n","import { Box, Flex, IconButton, Text } from \"@chakra-ui/react\";\nimport { AttachedPanel, BubbleButton, BubblePanel, Header, PANEL_HEADER_CONTROL_SIZE, Tooltip } from \"@pstdio/ui\";\nimport { MessageCircle, Minimize2 } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { WorkbenchPanelMenuLayout, WorkbenchPanelMenuOpeners } from \"../panel-menu/panel-menu\";\nimport { useWorkbenchModeRegionSettings } from \"../shared/use-workbench-mode-region-settings\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\n\ninterface WorkbenchSidePanelProps {\n workbench: WorkbenchCore;\n contentSlotRef: (node: HTMLDivElement | null) => void;\n bottomOffset?: string;\n header?: ReactNode;\n bubbleIcon?: ReactNode;\n onOpen?: () => void;\n}\n\nconst floatingPanelBottom = (bottomOffset: string | undefined) =>\n bottomOffset ? `calc(${bottomOffset} + 0.75rem)` : \"3\";\n\nconst launcherBottom = (bottomOffset: string | undefined) => (bottomOffset ? `calc(${bottomOffset} + 1.5rem)` : \"6\");\n\nconst WorkbenchSidePanelTitle = () => (\n <Box flex=\"1\" minW=\"0\">\n <Text textStyle=\"label/S/medium\" color=\"fg\" truncate>\n Side Panel\n </Text>\n </Box>\n);\n\ninterface WorkbenchSidePanelHeaderProps {\n header?: ReactNode;\n}\n\nconst WorkbenchSidePanelHeader = (props: WorkbenchSidePanelHeaderProps) => {\n const { header } = props;\n\n return header ?? <WorkbenchSidePanelTitle />;\n};\n\nexport const WorkbenchAttachedSidePanel = (props: WorkbenchSidePanelProps) => {\n const { workbench, contentSlotRef, header } = props;\n const settings = useWorkbenchModeRegionSettings(workbench, \"side\");\n const canFloat = useWorkbenchStore(workbench.modes.store, () => workbench.sidePanel.canFloat());\n\n return (\n <WorkbenchFocusRegion workbench={workbench} region=\"side\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <AttachedPanel\n data-testid=\"workbench-side-panel-attached\"\n data-workbench-panel=\"side\"\n data-workbench-region=\"side\"\n width=\"full\"\n minWidth=\"0\"\n bg={workbenchBackgrounds.widget}\n layerStyle=\"panel\"\n header={\n settings?.showHeader !== false && (header || canFloat) ? (\n <Header data-workbench-panel-header=\"side\" variant=\"main\" flexShrink={0} gap=\"sm\">\n <WorkbenchSidePanelHeader header={header} />\n <WorkbenchPanelMenuOpeners workbench={workbench} panel=\"side\" />\n {canFloat ? (\n <Tooltip content=\"Float Side Panel\">\n <IconButton\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label=\"Float Side Panel\"\n onClick={() => workbench.sidePanel.setMode(\"floating\")}\n >\n <Minimize2 size={16} />\n </IconButton>\n </Tooltip>\n ) : null}\n </Header>\n ) : undefined\n }\n >\n <WorkbenchPanelMenuLayout workbench={workbench} panel=\"side\">\n <Flex ref={contentSlotRef} flex=\"1\" minH={0} direction=\"column\" />\n </WorkbenchPanelMenuLayout>\n </AttachedPanel>\n </WorkbenchFocusRegion>\n );\n};\n\nexport const WorkbenchFloatingSidePanel = (props: WorkbenchSidePanelProps) => {\n const { workbench, contentSlotRef, bottomOffset, header, bubbleIcon, onOpen } = props;\n const mode = workbench.sidePanel.getMode();\n\n if (!workbench.sidePanel.canFloat() || mode === \"attached\") return null;\n\n if (mode === \"closed\") {\n return (\n <BubbleButton\n aria-label=\"Open Side Panel\"\n containerProps={{ bottom: launcherBottom(bottomOffset) }}\n tooltip=\"Open Side Panel\"\n onClick={onOpen ?? (() => workbench.sidePanel.setMode(\"floating\"))}\n >\n {bubbleIcon ?? <MessageCircle size={20} strokeWidth={2} />}\n </BubbleButton>\n );\n }\n\n return (\n <BubblePanel\n isOpen\n aria-label=\"Side Panel\"\n testId=\"workbench-side-panel-floating\"\n closeLabel=\"Close Side Panel\"\n containerProps={{ bottom: floatingPanelBottom(bottomOffset), bg: workbenchBackgrounds.widget }}\n popOutLabel=\"Reattach Side Panel\"\n onClose={() => workbench.sidePanel.setMode(\"closed\")}\n onPopOut={() => workbench.sidePanel.setMode(\"attached\")}\n menu={<WorkbenchSidePanelHeader header={header} />}\n >\n <Flex ref={contentSlotRef} flex=\"1\" minH={0} direction=\"column\" />\n </BubblePanel>\n );\n};\n","export const terminalPlacementBindingId = (scope: string | undefined, instanceId: string) =>\n JSON.stringify([scope, instanceId]);\n","import { Box, Center, Text } from \"@chakra-ui/react\";\nimport { useThemePreference } from \"@pstdio/ui\";\nimport { Terminal, type TerminalBridge } from \"@pstdio/ui/terminal\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { ResourceRef, WorkbenchCore, WorkbenchPanelInstance, WorkbenchTerminalController } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { terminalPlacementBindingId } from \"./terminal-placement-binding\";\n\ninterface ControllerTerminalBridgeOptions {\n getBindingId?: () => string | undefined;\n getResource?: () => ResourceRef | undefined;\n getTitle?: () => string | undefined;\n}\n\nconst workspacePathFromResource = (resource: ResourceRef | undefined) => {\n const workspacePath = resource?.metadata?.workspacePath;\n return typeof workspacePath === \"string\" && workspacePath.length > 0 ? workspacePath : undefined;\n};\n\nconst withTerminalRequestDefaults = (\n request: Parameters<TerminalBridge[\"openSession\"]>[0],\n resource: ResourceRef | undefined,\n) => {\n const cwd = workspacePathFromResource(resource);\n return cwd && !request.cwd ? { ...request, cwd } : request;\n};\n\n// Adapts the core terminal controller to the renderer-side `TerminalBridge`\n// contract. Sessions opened by the panel land in the same controller registry\n// the `terminal.session` webview capability uses, so host UI and extension\n// webviews always see one session registry.\nexport const createControllerTerminalBridge = (\n terminal: WorkbenchTerminalController,\n options: ControllerTerminalBridgeOptions = {},\n): TerminalBridge => ({\n async openSession(request) {\n const { sessionId } = await terminal.open({\n bindingId: options.getBindingId?.(),\n request: withTerminalRequestDefaults(request, options.getResource?.()),\n title: options.getTitle?.(),\n });\n return {\n id: sessionId,\n write: (data) => terminal.write({ sessionId, data }),\n resize: (cols, rows) => terminal.resize({ sessionId, cols, rows }),\n kill: (signal) => terminal.kill({ sessionId, signal }),\n onData: (handler) => terminal.subscribe(sessionId, { onData: handler }),\n onExit: (handler) => terminal.subscribe(sessionId, { onExit: handler }),\n onError: (handler) => terminal.subscribe(sessionId, { onError: handler }),\n };\n },\n});\n\ninterface WorkbenchTerminalPanelProps {\n placement: WorkbenchPanelInstance;\n workbench: WorkbenchCore;\n}\n\n/**\n * Body of the host-owned terminal panel. Chrome (tab, title, close action,\n * resize) comes from the workbench `secondary` region; this component only mounts\n * the terminal bound to the workbench terminal controller. Collapsing the panel\n * keeps the terminal mounted. Scope changes keep the session alive; the terminal\n * module ends it when its tab is explicitly closed.\n */\nexport const WorkbenchTerminalPanel = (props: WorkbenchTerminalPanelProps) => {\n const { placement, workbench } = props;\n const { themePreference } = useThemePreference();\n const placementRef = useRef(placement);\n placementRef.current = placement;\n const [bridge] = useState(() =>\n createControllerTerminalBridge(workbench.terminal, {\n getBindingId: () =>\n terminalPlacementBindingId(workbench.layout.getPersistenceScope(), placementRef.current.instanceId),\n getResource: () => placementRef.current.resource,\n getTitle: () => placementRef.current.title,\n }),\n );\n const [sessionId, setSessionId] = useState<string>();\n // The terminal resource label follows the session's foreground process name.\n const processTitle = useWorkbenchStore(workbench.terminal.store, (state) =>\n sessionId ? state.sessionsById[sessionId]?.title : undefined,\n );\n const active = useWorkbenchStore(workbench.layout.store, (state) => {\n const region = state.layout.regions.secondary;\n return (region.activeWidgetId ?? region.widgets[0]?.widgetId) === placement.instanceId;\n });\n const updateShellPlacement = workbench.shellPlacements.updatePlacement;\n\n useEffect(() => {\n if (!sessionId || !processTitle) return;\n const currentPlacement = workbench.layout\n .getLayout()\n .regions.secondary.widgets.find((candidate) => candidate.widgetId === placement.instanceId);\n const identity = currentPlacement?.placementIdentity;\n if (identity?.kind === \"shell\" && currentPlacement?.resource) {\n updateShellPlacement(identity, { resource: { ...currentPlacement.resource, label: processTitle } });\n }\n }, [sessionId, processTitle, placement.instanceId, workbench.layout, updateShellPlacement]);\n\n if (!workbench.terminal.isAvailable()) {\n return (\n <Center h=\"full\" px=\"md\">\n <Text textStyle=\"paragraph/S/regular\" color=\"fg.muted\">\n Terminal sessions are not available in this workbench host.\n </Text>\n </Center>\n );\n }\n\n return (\n <Box h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <Terminal\n bridge={bridge}\n theme={/dark/i.test(themePreference) ? \"dark\" : \"light\"}\n autoFocus={active}\n killOnUnmount={false}\n onSessionOpen={setSessionId}\n />\n </Box>\n );\n};\n","import type { ResourceRef, WorkbenchCoreContributionContext, WorkbenchModuleContribution } from \"../../core\";\nimport { toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { terminalPlacementBindingId } from \"./terminal-placement-binding\";\nimport { WorkbenchTerminalPanel } from \"./workbench-terminal-panel\";\n// The host-owned terminal panel in the workbench `secondary` (bottom) region.\n// Exported so hosts can open or assert it directly.\nexport const WORKBENCH_TERMINAL_WIDGET_ID = \"workbench.terminal\";\n// Built-in command to open (or focus) the terminal panel. Registered by the\n// surface module so it is available in the command palette without host wiring.\nexport const WORKBENCH_TERMINAL_OPEN_COMMAND_ID = \"workbench.terminal.open\";\n/** Suggested secondary-region size for hosts that mount the terminal (createWorkbench regionSettings). */\nexport const WORKBENCH_TERMINAL_PANEL_SIZE = { defaultPx: 240, minPx: 128 };\ninterface OpenWorkbenchTerminalOptions {\n resource?: ResourceRef;\n reveal?: boolean;\n}\ntype TerminalResource = OpenWorkbenchTerminalOptions[\"resource\"];\nconst terminalInstanceIds = (ctx: WorkbenchCoreContributionContext) =>\n new Set(\n ctx.layout\n .listPanelInstances(\"secondary\")\n .filter((placement) => placement.viewId === WORKBENCH_TERMINAL_WIDGET_ID)\n .map((placement) => placement.instanceId),\n );\nconst watchClosedTerminalPlacements = (ctx: WorkbenchCoreContributionContext) => {\n // A scope rotation temporarily removes every placement. Only an explicit tab\n // close should end the PTY bound to that placement.\n let changingScope = false;\n const willChangeScope = ctx.layout.onWillChangePersistenceScope(() => {\n changingScope = true;\n });\n const didChangeScope = ctx.layout.onDidChangePersistenceScope(() => {\n changingScope = false;\n });\n const unsubscribeLayout = ctx.layout.store.subscribe((state, previousState) => {\n if (changingScope) return;\n const currentIds = new Set(\n state.layout.regions.secondary.widgets\n .filter((placement) => placement.viewId === WORKBENCH_TERMINAL_WIDGET_ID)\n .map((placement) => placement.widgetId),\n );\n const previousIds = previousState.layout.regions.secondary.widgets\n .filter((placement) => placement.viewId === WORKBENCH_TERMINAL_WIDGET_ID)\n .map((placement) => placement.widgetId);\n const scope = ctx.layout.getPersistenceScope();\n for (const instanceId of previousIds) {\n if (!currentIds.has(instanceId)) void ctx.terminal.killBinding(terminalPlacementBindingId(scope, instanceId));\n }\n });\n return {\n dispose() {\n unsubscribeLayout();\n willChangeScope.dispose();\n didChangeScope.dispose();\n const scope = ctx.layout.getPersistenceScope();\n for (const instanceId of terminalInstanceIds(ctx)) {\n void ctx.terminal.killBinding(terminalPlacementBindingId(scope, instanceId));\n }\n },\n };\n};\nconst terminalTitlePattern = /^Terminal (\\d+)$/;\nconst nextTerminalIndexes = new WeakMap<WorkbenchCoreContributionContext[\"layout\"][\"store\"], number>();\nconst getInitialTerminalIndex = (ctx: WorkbenchCoreContributionContext) => {\n const terminalPlacements = ctx.layout\n .getLayout()\n .regions.secondary.widgets.filter((placement) => placement.viewId === WORKBENCH_TERMINAL_WIDGET_ID);\n const titleIndexes = terminalPlacements\n .map((placement) => terminalTitlePattern.exec(placement.title ?? \"\")?.[1])\n .filter((index): index is string => index !== undefined)\n .map((index) => Number.parseInt(index, 10));\n return Math.max(terminalPlacements.length, ...titleIndexes) + 1;\n};\nconst getNextTerminalTitle = (ctx: WorkbenchCoreContributionContext) => {\n const nextIndex = Math.max(nextTerminalIndexes.get(ctx.layout.store) ?? 1, getInitialTerminalIndex(ctx));\n nextTerminalIndexes.set(ctx.layout.store, nextIndex + 1);\n return `Terminal ${nextIndex}`;\n};\nconst hasWorkspacePath = (resource: TerminalResource) =>\n typeof resource?.metadata?.workspacePath === \"string\" && resource.metadata.workspacePath.length > 0;\nconst getTerminalResource = (ctx: WorkbenchCoreContributionContext, resource: TerminalResource) => {\n const activeResource = ctx.getActiveResource();\n const primaryResource = ctx.getPrimaryResource();\n return (\n (hasWorkspacePath(resource) ? resource : undefined) ??\n (hasWorkspacePath(activeResource) ? activeResource : undefined) ??\n (hasWorkspacePath(primaryResource) ? primaryResource : undefined) ??\n resource ??\n primaryResource\n );\n};\n// Opens a new terminal placement, revealing the bottom region if it is collapsed.\nexport const openWorkbenchTerminal = (\n ctx: WorkbenchCoreContributionContext,\n input: OpenWorkbenchTerminalOptions = {},\n) => {\n const { reveal = true } = input;\n const workspace = getTerminalResource(ctx, input.resource);\n const title = getNextTerminalTitle(ctx);\n const index = Number.parseInt(terminalTitlePattern.exec(title)?.[1] ?? \"1\", 10);\n const id = `${String(index).padStart(8, \"0\")}-${globalThis.crypto.randomUUID()}`;\n const resource: ResourceRef = {\n type: \"terminal\",\n id,\n label: title,\n icon: \"SquareTerminal\",\n metadata: workspace?.metadata,\n };\n const identity = ctx.shellPlacements.openPlacement({\n placementId: WORKBENCH_TERMINAL_WIDGET_ID,\n resource,\n open: \"pin\",\n title,\n });\n if (identity.kind !== \"shell\") throw new Error(\"Terminal placement must be shell-owned\");\n if (reveal) {\n ctx.shell.setRegionOpen(\"secondary\", true);\n }\n const placement = ctx.layout\n .getLayout()\n .regions.secondary.widgets.find(\n (candidate) =>\n candidate.placementIdentity?.kind === \"shell\" &&\n candidate.placementIdentity.placementId === identity.placementId &&\n candidate.placementIdentity.instanceKey === identity.instanceKey,\n );\n if (!placement) throw new Error(`Terminal placement did not open: ${identity.instanceKey}`);\n return toPanelInstance(placement);\n};\n/**\n * Host-owned terminal surface: tabbed placements in the `secondary` region whose\n * chrome, focus, lifecycle, and styling belong to the workbench. Sessions are\n * owned by `workbench.terminal` (the same registry the `terminal.session`\n * webview capability uses); the host injects a session opener via\n * `workbench.terminal.setSessionOpener(...)`. Closing a tab kills its session;\n * disposing the controller kills every live session.\n */\nexport const createWorkbenchTerminalModule = (): WorkbenchModuleContribution => ({\n id: \"workbench.terminal.surface\",\n activate(ctx) {\n const disposables = [\n ctx.views.registerView({\n id: WORKBENCH_TERMINAL_WIDGET_ID,\n title: \"Terminal\",\n body: {\n kind: \"react\",\n render: (input) => <WorkbenchTerminalPanel placement={input.instance} workbench={input.workbench} />,\n },\n }),\n ctx.shellPlacements.registerPlacement({\n id: WORKBENCH_TERMINAL_WIDGET_ID,\n item: {\n kind: \"binding\",\n binding: {\n kinds: [\n {\n kind: \"resource-kind\",\n id: \"terminal\",\n },\n ],\n view: {\n kind: \"view\",\n id: WORKBENCH_TERMINAL_WIDGET_ID,\n },\n cardinality: \"many\",\n add: { kind: \"command\", target: { command: { kind: \"command\", id: WORKBENCH_TERMINAL_OPEN_COMMAND_ID } } },\n },\n },\n region: \"secondary\",\n mountStrategy: \"keep-mounted\",\n // Background flows mint terminals without user intent; a closed Secondary\n // Panel must stay closed until an explicit open reveals it.\n hiddenByDefault: true,\n }),\n watchClosedTerminalPlacements(ctx),\n ctx.commands.registerCommand(\n {\n id: WORKBENCH_TERMINAL_OPEN_COMMAND_ID,\n label: \"Open terminal\",\n category: \"Terminal\",\n icon: \"SquareTerminal\",\n },\n { execute: (_args, context) => openWorkbenchTerminal(ctx, { resource: context?.resource }) },\n ),\n ];\n return disposables;\n },\n});\n","import { defaultThemePreferences } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\n// The theme set a workbench offers: the built-in workbench themes plus whatever\n// is registered in `workbench.themes` (e.g. extension-contributed themes). The\n// list shrinks when a contribution is disposed, so the theme picker only ever\n// lists themes whose owner is still active.\nexport const useWorkbenchThemePreferences = (workbench: WorkbenchCore) => {\n const contributed = useWorkbenchStore(workbench.themes.store, (state) => state.themes);\n return [...defaultThemePreferences, ...contributed];\n};\n","import {\n ChakraProvider,\n type FileIconThemePreferenceOption,\n FileIconThemePreferenceProvider,\n psTheme,\n type ThemePreference,\n type ThemePreferenceOption,\n ThemePreferenceProvider,\n} from \"@pstdio/ui\";\nimport { createContext, type ReactNode, useContext } from \"react\";\n\ninterface WorkbenchThemeProviderProps {\n children: ReactNode;\n initialThemePreference?: ThemePreference;\n defaultThemePreference?: ThemePreference;\n preferenceScope?: string;\n themePreferences?: readonly ThemePreferenceOption[];\n fileIconThemePreferences?: readonly FileIconThemePreferenceOption[];\n}\n\nconst WorkbenchThemeProviderContext = createContext(false);\n\nexport const WorkbenchThemeProvider = (props: WorkbenchThemeProviderProps) => {\n const { children, initialThemePreference, themePreferences, fileIconThemePreferences } = props;\n const hasWorkbenchThemeProvider = useContext(WorkbenchThemeProviderContext);\n\n if (hasWorkbenchThemeProvider) return children;\n\n return (\n <WorkbenchThemeProviderContext value>\n <ThemePreferenceProvider\n initialPreference={initialThemePreference}\n defaultPreference={props.defaultThemePreference}\n preferenceScope={props.preferenceScope}\n themePreferences={themePreferences}\n >\n <FileIconThemePreferenceProvider themePreferences={fileIconThemePreferences}>\n <ChakraProvider value={psTheme}>{children}</ChakraProvider>\n </FileIconThemePreferenceProvider>\n </ThemePreferenceProvider>\n </WorkbenchThemeProviderContext>\n );\n};\n","import { Box, type BoxProps } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\n\ninterface WorkbenchThemeScopeProps extends Omit<BoxProps, \"children\"> {\n children: ReactNode;\n}\n\nexport const WorkbenchThemeScope = (props: WorkbenchThemeScopeProps) => {\n const { children, ...boxProps } = props;\n\n return <Box {...boxProps}>{children}</Box>;\n};\n","import { Center, Dialog, Portal } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { getWorkbenchRenderers, type WorkbenchCore, type WorkbenchWidgetPlacement } from \"../../core\";\nimport { toPanelContribution, toPanelInstance } from \"../../core/registries/layout/panel-api\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\nexport interface WorkbenchOverlayWidgetConfig {\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"cover\" | \"full\";\n placement?: \"center\" | \"top\" | \"bottom\";\n scrollBehavior?: \"inside\" | \"outside\";\n closeOnEscape?: boolean;\n closeOnInteractOutside?: boolean;\n /** Controls dialog semantics. Every workbench overlay blocks background pointer input. */\n modal?: boolean;\n preventScroll?: boolean;\n trapFocus?: boolean;\n motionPreset?: \"scale\" | \"slide-in-bottom\" | \"slide-in-top\" | \"slide-in-left\" | \"slide-in-right\" | \"none\";\n role?: \"dialog\" | \"alertdialog\";\n contentHeight?: string;\n contentMaxHeight?: string;\n contentMinHeight?: string;\n contentWidth?: string;\n contentMaxWidth?: string;\n closeTriggerTop?: string;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst stringValue = (record: Record<string, unknown>, key: string) => {\n const value = record[key];\n return typeof value === \"string\" ? value : undefined;\n};\n\nconst booleanValue = (record: Record<string, unknown>, key: string) => {\n const value = record[key];\n return typeof value === \"boolean\" ? value : undefined;\n};\n\nconst resolveOverlayConfig = (config: unknown): WorkbenchOverlayWidgetConfig => {\n if (!isRecord(config)) return {};\n\n const overlayConfig: WorkbenchOverlayWidgetConfig = {};\n const size = stringValue(config, \"size\");\n const placement = stringValue(config, \"placement\");\n const scrollBehavior = stringValue(config, \"scrollBehavior\");\n const closeOnEscape = booleanValue(config, \"closeOnEscape\");\n const closeOnInteractOutside = booleanValue(config, \"closeOnInteractOutside\");\n const modal = booleanValue(config, \"modal\");\n const preventScroll = booleanValue(config, \"preventScroll\");\n const trapFocus = booleanValue(config, \"trapFocus\");\n const motionPreset = stringValue(config, \"motionPreset\");\n const role = stringValue(config, \"role\");\n const contentHeight = stringValue(config, \"contentHeight\");\n const contentMaxHeight = stringValue(config, \"contentMaxHeight\");\n const contentMinHeight = stringValue(config, \"contentMinHeight\");\n const contentWidth = stringValue(config, \"contentWidth\");\n const contentMaxWidth = stringValue(config, \"contentMaxWidth\");\n const closeTriggerTop = stringValue(config, \"closeTriggerTop\");\n\n if (size) overlayConfig.size = size as WorkbenchOverlayWidgetConfig[\"size\"];\n if (placement) overlayConfig.placement = placement as WorkbenchOverlayWidgetConfig[\"placement\"];\n if (scrollBehavior) overlayConfig.scrollBehavior = scrollBehavior as WorkbenchOverlayWidgetConfig[\"scrollBehavior\"];\n if (closeOnEscape !== undefined) overlayConfig.closeOnEscape = closeOnEscape;\n if (closeOnInteractOutside !== undefined) overlayConfig.closeOnInteractOutside = closeOnInteractOutside;\n if (modal !== undefined) overlayConfig.modal = modal;\n if (preventScroll !== undefined) overlayConfig.preventScroll = preventScroll;\n if (trapFocus !== undefined) overlayConfig.trapFocus = trapFocus;\n if (motionPreset) overlayConfig.motionPreset = motionPreset as WorkbenchOverlayWidgetConfig[\"motionPreset\"];\n if (role) overlayConfig.role = role as WorkbenchOverlayWidgetConfig[\"role\"];\n if (contentHeight) overlayConfig.contentHeight = contentHeight;\n if (contentMaxHeight) overlayConfig.contentMaxHeight = contentMaxHeight;\n if (contentMinHeight) overlayConfig.contentMinHeight = contentMinHeight;\n if (contentWidth) overlayConfig.contentWidth = contentWidth;\n if (contentMaxWidth) overlayConfig.contentMaxWidth = contentMaxWidth;\n if (closeTriggerTop) overlayConfig.closeTriggerTop = closeTriggerTop;\n return overlayConfig;\n};\n\nexport const resolveOverlayDialogConfig = (placement: Pick<WorkbenchWidgetPlacement, \"closable\">, config: unknown) => {\n const closeable = placement.closable === true;\n const overlayConfig = resolveOverlayConfig(config);\n\n return {\n size: \"xl\",\n scrollBehavior: \"inside\",\n modal: true,\n preventScroll: true,\n trapFocus: true,\n ...overlayConfig,\n closeOnEscape: closeable && (overlayConfig.closeOnEscape ?? true),\n closeOnInteractOutside: closeable && (overlayConfig.closeOnInteractOutside ?? true),\n } satisfies WorkbenchOverlayWidgetConfig;\n};\n\nconst resolveActivePlacement = (widgets: WorkbenchWidgetPlacement[], activeWidgetId?: string) =>\n widgets.find((entry) => entry.widgetId === activeWidgetId) ?? widgets[0];\n\nexport const resolveOverlayDialogRenderState = (\n activePlacement: WorkbenchWidgetPlacement | undefined,\n exitingPlacement: WorkbenchWidgetPlacement | undefined,\n) => {\n if (activePlacement) return { open: true, placement: activePlacement };\n if (exitingPlacement) return { open: false, placement: exitingPlacement };\n return undefined;\n};\n\nconst WorkbenchOverlayFallback = (props: { label: string }) => (\n <Center h=\"full\" w=\"full\" color=\"fg.muted\" p=\"md\" aria-label={props.label}>\n <WorkbenchIcon name=\"circle-alert\" size={20} />\n </Center>\n);\n\ninterface WorkbenchOverlayLayerProps {\n workbench: WorkbenchCore;\n}\n\nexport const WorkbenchOverlayLayer = (props: WorkbenchOverlayLayerProps) => {\n const { workbench } = props;\n const overlayRegion = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.overlay);\n const renderers = useWorkbenchStore(getWorkbenchRenderers(workbench).store, (state) => state.renderers);\n useWorkbenchStore(getWorkbenchRenderers(workbench).store, (state) => state.refreshKeys);\n const [exitingPlacement, setExitingPlacement] = useState<WorkbenchWidgetPlacement | undefined>();\n\n const activePlacement = resolveActivePlacement(overlayRegion.widgets, overlayRegion.activeWidgetId);\n const renderState = resolveOverlayDialogRenderState(activePlacement, exitingPlacement);\n\n useEffect(() => {\n if (activePlacement) setExitingPlacement(undefined);\n }, [activePlacement]);\n\n if (!renderState) return null;\n\n const { open, placement } = renderState;\n const widget = workbench.layout.getWidget(placement.contributionId);\n const overlayConfig = resolveOverlayDialogConfig(placement, widget?.config);\n const {\n contentHeight,\n contentMaxHeight,\n contentMinHeight,\n contentWidth,\n contentMaxWidth,\n closeTriggerTop,\n ...dialogRootConfig\n } = overlayConfig;\n const renderer = widget ? renderers[widget.rendererId] : undefined;\n const canCloseOverlay = open && placement.closable === true;\n const closeLabel = placement.title ?? widget?.title ?? \"overlay\";\n\n const body =\n widget && renderer ? (\n (renderer.render({\n workbench,\n panel: toPanelContribution(widget),\n instance: toPanelInstance(placement),\n refresh: () => undefined,\n }) as ReactNode)\n ) : (\n <WorkbenchOverlayFallback\n label={\n widget ? `No renderer registered for ${widget.rendererId}.` : \"Widget contribution is no longer registered.\"\n }\n />\n );\n\n const handleOpenChange = (details: { open: boolean }) => {\n if (!details.open && canCloseOverlay) {\n setExitingPlacement(placement);\n workbench.layout.closePanel(placement.widgetId);\n }\n };\n\n const handleExitComplete = () => {\n setExitingPlacement((current) => (current?.widgetId === placement.widgetId ? undefined : current));\n };\n\n // Nested overlays (confirmation dialogs, popovers, menus) portal outside this\n // dialog's content, so their clicks register as outside interactions here. If\n // the interaction landed inside any overlay content, it cannot mean \"dismiss\n // the settings dialog\" — the widget's own content never reaches this handler.\n const handleInteractOutside = (event: CustomEvent<{ originalEvent?: Event }>) => {\n const target = event.detail.originalEvent?.target;\n if (target instanceof Element && target.closest('[data-part=\"content\"]')) {\n event.preventDefault();\n }\n };\n\n return (\n <Dialog.Root\n {...dialogRootConfig}\n open={open}\n onExitComplete={handleExitComplete}\n onOpenChange={handleOpenChange}\n onInteractOutside={handleInteractOutside}\n >\n <Portal>\n <Dialog.Backdrop position=\"fixed\" inset=\"0\" pointerEvents=\"auto\" />\n <Dialog.Positioner\n position=\"fixed\"\n inset=\"0\"\n overflow={dialogRootConfig.scrollBehavior === \"outside\" ? \"auto\" : \"hidden\"}\n pointerEvents=\"auto\"\n >\n <Dialog.Content\n position=\"relative\"\n overflow=\"hidden\"\n borderWidth=\"1px\"\n borderColor=\"border.subtle\"\n h={contentHeight}\n maxH={contentMaxHeight}\n minH={contentMinHeight}\n w={contentWidth}\n maxW={contentMaxWidth}\n >\n {body}\n {canCloseOverlay ? (\n <Dialog.CloseTrigger\n aria-label={`Close ${closeLabel}`}\n alignItems=\"center\"\n borderRadius=\"sm\"\n color=\"fg.muted\"\n cursor=\"pointer\"\n display=\"inline-flex\"\n h=\"5\"\n insetEnd=\"1\"\n justifyContent=\"center\"\n position=\"absolute\"\n top={closeTriggerTop ?? \"1\"}\n w=\"5\"\n zIndex=\"1\"\n _hover={{ bg: \"bg.subtle\", color: \"fg\" }}\n >\n <WorkbenchIcon name=\"x\" size={16} />\n </Dialog.CloseTrigger>\n ) : null}\n </Dialog.Content>\n </Dialog.Positioner>\n </Portal>\n </Dialog.Root>\n );\n};\n","import { IconButton } from \"@chakra-ui/react\";\nimport { ResourceActionMenu } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchResourceActionResolver } from \"../menus/resource-actions\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nexport const WorkbenchBreadcrumbResourceActions = (props: { workbench: WorkbenchCore }) => {\n const { workbench } = props;\n const items = useWorkbenchStore(workbench.breadcrumbs.store, (state) => state.items) ?? [];\n const resolveActions = useWorkbenchResourceActionResolver(workbench);\n const resource = items.at(-1)?.resource;\n const actions = resource ? resolveActions(resource) : [];\n if (!resource || actions.length === 0) return null;\n const label = resource.label ?? resource.id ?? resource.type;\n return (\n <ResourceActionMenu actions={actions} positioning={{ placement: \"bottom-start\" }}>\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label={`Actions for ${label}`}\n data-workbench-breadcrumb-resource-actions=\"\"\n >\n <WorkbenchIcon name=\"ChevronDown\" size={14} />\n </IconButton>\n </ResourceActionMenu>\n );\n};\n","import { Box, HStack, IconButton } from \"@chakra-ui/react\";\nimport { Header, PANEL_HEADER_CONTROL_SIZE, Tooltip } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { workbenchTopHeaderLeadingMenuPath, workbenchTopHeaderTrailingMenuPath } from \"../../core\";\nimport { WorkbenchBreadcrumbView } from \"../breadcrumb/breadcrumb-view\";\nimport { useModeChrome } from \"../region/mode-chrome\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchIcon } from \"../shared/icon\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchHeaderActions } from \"./header-actions\";\nimport { WorkbenchBreadcrumbResourceActions } from \"./resource-actions\";\n\nexport interface WorkbenchNavRegionControl {\n id: \"sidenav\" | \"secondary\" | \"side\";\n label: string;\n icon: \"PanelLeft\" | \"PanelBottom\" | \"PanelRight\";\n open: boolean;\n onToggle: () => void;\n}\n\ninterface WorkbenchNavChromeProps {\n workbench: WorkbenchCore;\n hasNav: boolean;\n regionControls: WorkbenchNavRegionControl[];\n}\n\nconst WorkbenchRegionControl = (props: { control: WorkbenchNavRegionControl }) => {\n const { control } = props;\n\n return (\n <Tooltip content={control.label}>\n <IconButton\n size={PANEL_HEADER_CONTROL_SIZE}\n variant=\"ghost\"\n aria-label={control.label}\n aria-pressed={control.open}\n onClick={control.onToggle}\n >\n <WorkbenchIcon name={control.icon} size={14} />\n </IconButton>\n </Tooltip>\n );\n};\n\ninterface WorkbenchNavigationControlsProps {\n workbench: WorkbenchCore;\n regionControls: WorkbenchNavRegionControl[];\n}\n\nconst WorkbenchNavigationControls = (props: WorkbenchNavigationControlsProps) => {\n const { workbench, regionControls } = props;\n const history = useWorkbenchStore(workbench.pageLocations.historyStore, (state) => state);\n\n return (\n <HStack gap=\"2xs\" flexShrink={0}>\n {regionControls.map((control) => (\n <WorkbenchRegionControl key={control.id} control={control} />\n ))}\n <Tooltip content=\"Navigate back\">\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label=\"Navigate back\"\n disabled={!history.canGoBack}\n onClick={() => workbench.pageLocations.goBack()}\n >\n <WorkbenchIcon name=\"ArrowLeft\" size={14} />\n </IconButton>\n </Tooltip>\n <Tooltip content=\"Navigate forward\">\n <IconButton\n size=\"xs\"\n variant=\"ghost\"\n aria-label=\"Navigate forward\"\n disabled={!history.canGoForward}\n onClick={() => workbench.pageLocations.goForward()}\n >\n <WorkbenchIcon name=\"ArrowRight\" size={14} />\n </IconButton>\n </Tooltip>\n </HStack>\n );\n};\n\nconst WorkbenchRegionControls = (props: { controls: WorkbenchNavRegionControl[] }) => {\n const { controls } = props;\n\n return (\n <HStack gap=\"2xs\" flexShrink={0}>\n {controls.map((control) => (\n <WorkbenchRegionControl key={control.id} control={control} />\n ))}\n </HStack>\n );\n};\n\nexport const WorkbenchNavChrome = (props: WorkbenchNavChromeProps) => {\n const { workbench, hasNav, regionControls } = props;\n const chrome = useModeChrome(workbench, \"nav\");\n const sidenavControls = regionControls.filter((control) => control.id === \"sidenav\");\n const trailingRegionControls = regionControls.filter((control) => control.id !== \"sidenav\");\n\n return (\n <Header\n data-workbench-region=\"nav\"\n display={chrome === false ? \"none\" : \"flex\"}\n variant=\"main\"\n padding={chrome ? \"0\" : undefined}\n bg={workbenchBackgrounds.main}\n position=\"relative\"\n flexShrink={0}\n gap=\"xs\"\n overflow=\"hidden\"\n overflowY=\"hidden\"\n >\n <Box display={chrome ? \"none\" : \"contents\"}>\n <WorkbenchHeaderActions workbench={workbench} menuPath={workbenchTopHeaderLeadingMenuPath} />\n <WorkbenchNavigationControls workbench={workbench} regionControls={sidenavControls} />\n </Box>\n <Box\n display={hasNav ? \"block\" : \"none\"}\n flex={chrome ? \"1\" : undefined}\n h=\"full\"\n minW=\"0\"\n maxW={chrome ? undefined : \"60%\"}\n overflow=\"hidden\"\n >\n <WorkbenchRegion workbench={workbench} region=\"nav\" title=\"Nav Chrome\" />\n </Box>\n <Box display={chrome ? \"none\" : \"contents\"}>\n {!hasNav ? (\n <Box h=\"full\" minW=\"0\" maxW=\"60%\" overflow=\"hidden\">\n <WorkbenchBreadcrumbView workbench={workbench} />\n </Box>\n ) : null}\n <HStack\n data-workbench-breadcrumb-action-slot=\"\"\n flexShrink={0}\n gap=\"2xs\"\n h=\"6\"\n justifyContent=\"center\"\n minW=\"6\"\n >\n <WorkbenchBreadcrumbResourceActions workbench={workbench} />\n </HStack>\n <Box flex=\"1\" minW=\"0\" />\n <WorkbenchHeaderActions workbench={workbench} menuPath={workbenchTopHeaderTrailingMenuPath} />\n </Box>\n <WorkbenchRegionControls controls={chrome ? regionControls : trailingRegionControls} />\n </Header>\n );\n};\n","import { Box, Button, Flex, Stack, Text } from \"@chakra-ui/react\";\nimport type { ControlValueMap } from \"@pstdio/sdk/extensions\";\nimport type { InputGroup, Param, ParamValue } from \"@pstdio/ui\";\nimport { ParamEditor, ScrollArea } from \"@pstdio/ui\";\nimport { controlValueSchema } from \"pstdio-api-contracts\";\nimport { useEffect, useRef, useState } from \"react\";\nimport {\n getWorkbenchRenderers,\n type RegisteredControlsRendererContribution,\n type WorkbenchCore,\n type WorkbenchPanelInstance,\n} from \"../../../core\";\n\ninterface WorkbenchControlsViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredControlsRendererContribution;\n placement: WorkbenchPanelInstance;\n}\ninterface ControlsViewState {\n params: Param[];\n groups: InputGroup[];\n values: ControlValueMap;\n readOnly: boolean;\n loading: boolean;\n error?: string;\n}\nconst initialState: ControlsViewState = { params: [], groups: [], values: {}, readOnly: false, loading: true };\nexport const WorkbenchControlsView = (props: WorkbenchControlsViewProps) => {\n const { workbench, contribution, placement } = props;\n const resource = placement.resource;\n const [state, setState] = useState<ControlsViewState>(initialState);\n const requestRef = useRef(0);\n useEffect(() => {\n let cancelled = false;\n setState(initialState);\n const runQuery = () => {\n requestRef.current += 1;\n const requestId = requestRef.current;\n Promise.resolve()\n .then(() => contribution.executeQuery(resource))\n .then((result) => {\n if (cancelled || requestRef.current !== requestId) return;\n const values = { ...(contribution.defaultValues ?? {}), ...(result.values ?? {}) };\n const next = {\n params: result.params ?? [],\n groups: result.groups ?? [],\n values,\n readOnly: Boolean(result.readOnly),\n loading: false,\n };\n setState(next);\n })\n .catch((error: unknown) => {\n if (cancelled || requestRef.current !== requestId) return;\n setState({ ...initialState, loading: false, error: error instanceof Error ? error.message : String(error) });\n });\n };\n runQuery();\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = getWorkbenchRenderers(workbench).onDidRefreshControlsRenderer((event) => {\n if (event.controlsRendererId === contribution.id) runQuery();\n });\n return () => {\n cancelled = true;\n if (typeof subscription === \"function\") subscription();\n else subscription?.dispose();\n refreshSubscription.dispose();\n };\n }, [contribution, resource, workbench]);\n const readOnly = state.readOnly || (!contribution.updateValue && !contribution.apply);\n const showFooter = !readOnly && (Boolean(contribution.apply) || Boolean(contribution.reset));\n const handleChange = (id: string, input: ParamValue) => {\n const value = controlValueSchema.parse(input);\n // The command runs outside the setState updater: React may invoke updaters\n // twice (StrictMode), which would double-execute the update command.\n const values = { ...state.values, [id]: value };\n if (contribution.updateValue) void contribution.updateValue({ controlId: id, value, values, resource });\n setState((prev) => ({ ...prev, values: { ...prev.values, [id]: value } }));\n };\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\">\n <ScrollArea flex=\"1\" minH=\"0\" minW=\"0\" w=\"full\" size=\"xs\">\n <ControlsContent state={state} contribution={contribution} readOnly={readOnly} onChange={handleChange} />\n </ScrollArea>\n {showFooter ? (\n <Flex borderTopWidth=\"1px\" borderColor=\"border.muted\" px=\"sm\" py=\"xs\" gap=\"xs\" justifyContent=\"flex-end\">\n {contribution.reset ? (\n <Button\n size=\"xs\"\n variant=\"ghost\"\n onClick={() => {\n void contribution.reset?.({ resource });\n }}\n >\n Reset\n </Button>\n ) : null}\n {contribution.apply ? (\n <Button\n size=\"xs\"\n variant=\"subtle\"\n onClick={() => {\n void contribution.apply?.({ values: state.values, resource });\n }}\n >\n Apply\n </Button>\n ) : null}\n </Flex>\n ) : null}\n </Stack>\n );\n};\n\ninterface ControlsContentProps {\n state: ControlsViewState;\n contribution: RegisteredControlsRendererContribution;\n readOnly: boolean;\n onChange(id: string, value: ParamValue): void;\n}\nconst ControlsContent = (props: ControlsContentProps) => {\n const { state, contribution, readOnly, onChange } = props;\n if (state.loading)\n return (\n <Box p=\"md\">\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\">\n Loading…\n </Text>\n </Box>\n );\n if (state.error)\n return (\n <Box p=\"md\">\n <Text role=\"alert\" textStyle=\"paragraph/S/regular\" color=\"fg\">\n {state.error}\n </Text>\n </Box>\n );\n if (state.params.length || state.groups.length)\n return (\n <ParamEditor\n variant=\"small\"\n params={state.params}\n groups={state.groups}\n defaultValues={state.values}\n readOnly={readOnly}\n onChange={onChange}\n />\n );\n return (\n <Box p=\"md\">\n <Text textStyle=\"label/M/medium\" color=\"fg\">\n {contribution.emptyTitle || \"No controls\"}\n </Text>\n {contribution.emptyDescription ? (\n <Text textStyle=\"label/S/regular\" color=\"fg.muted\" mt=\"2xs\">\n {contribution.emptyDescription}\n </Text>\n ) : null}\n </Box>\n );\n};\n","import { createElement } from \"react\";\nimport { getWorkbenchRenderers, type WorkbenchCore } from \"../../../core\";\nimport { WorkbenchControlsView } from \"./controls-view\";\n\n// Track per-core installation so repeated <Workbench> renders are idempotent.\nconst installed = new WeakSet<WorkbenchCore>();\n\nexport const installWorkbenchControlsRenderer = (workbench: WorkbenchCore) => {\n if (installed.has(workbench)) return;\n installed.add(workbench);\n getWorkbenchRenderers(workbench).setControlsRendererImplementation(\n ({ workbench: scope, instance, controlsRendererId }) => {\n const contribution = getWorkbenchRenderers(scope).getControlsRenderer(controlsRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchControlsView, { workbench: scope, contribution, placement: instance });\n },\n );\n};\n","import { createElement } from \"react\";\nimport { getWorkbenchRenderers, type WorkbenchCore } from \"../../../core\";\nimport { WorkbenchDataTableView } from \"./data-table-view\";\n\nconst installed = new WeakSet<WorkbenchCore>();\n\nexport const installWorkbenchDataTableRenderer = (workbench: WorkbenchCore) => {\n if (installed.has(workbench)) return;\n installed.add(workbench);\n getWorkbenchRenderers(workbench).setDataTableRendererImplementation(\n ({ workbench: scope, instance, dataTableRendererId }) => {\n const contribution = getWorkbenchRenderers(scope).getDataTableRenderer(dataTableRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchDataTableView, { workbench: scope, contribution, placement: instance });\n },\n );\n};\n","import { createElement, lazy, Suspense } from \"react\";\nimport { getWorkbenchRenderers, type WorkbenchCore } from \"../../../core\";\n\nconst loadWorkbenchFileRendererView = () =>\n import(\"./file-renderer-view\").then((module) => ({\n default: module.WorkbenchFileRendererView,\n }));\n\nconst WorkbenchFileRendererView = lazy(loadWorkbenchFileRendererView);\n\n// Track per-core installation so repeated <Workbench> renders are idempotent.\nconst installed = new WeakSet<WorkbenchCore>();\n\nexport const installWorkbenchFileRenderer = (workbench: WorkbenchCore) => {\n if (installed.has(workbench)) return;\n installed.add(workbench);\n getWorkbenchRenderers(workbench).setFileRendererImplementation(({ workbench: scope, instance, fileRendererId }) => {\n const contribution = getWorkbenchRenderers(scope).getFileRenderer(fileRendererId);\n if (!contribution) return null;\n return createElement(\n Suspense,\n { fallback: null },\n createElement(WorkbenchFileRendererView, { workbench: scope, contribution, placement: instance }),\n );\n });\n};\n","import type { ComponentType, ReactNode } from \"react\";\nimport type {\n AttributeDescriptor,\n AttributesSource,\n BoardColumnConfig,\n KanbanRendererContribution,\n KanbanRendererRow,\n RegisteredKanbanRendererContribution,\n ResourceContextAction,\n} from \"../../../core\";\n\ntype ReactColumnIcon = ComponentType<{ size?: number | string }>;\nexport type ReactAttributeDescriptor = AttributeDescriptor<ReactNode>;\nexport type ReactAttributesSource = AttributesSource<ReactNode>;\nexport type ReactBoardColumnConfig = BoardColumnConfig<ReactColumnIcon>;\nexport type ReactResourceContextAction = ResourceContextAction<ReactNode>;\nexport type ReactKanbanRendererContribution<TRow extends KanbanRendererRow = KanbanRendererRow> =\n KanbanRendererContribution<TRow, ReactNode, ReactColumnIcon>;\n\n// The core stores presentation values without choosing a UI framework, as it\n// does for view.render. Installing the React renderer binds that presentation.\nexport const bindReactKanbanPresentation = (contribution: RegisteredKanbanRendererContribution) =>\n contribution as RegisteredKanbanRendererContribution<KanbanRendererRow, ReactNode, ReactColumnIcon>;\n","export const createKanbanViewQuerySequencer = () => {\n let latestQueryId = 0;\n\n return {\n next: () => {\n latestQueryId += 1;\n return latestQueryId;\n },\n isLatest: (queryId: number) => queryId === latestQueryId,\n };\n};\n\nexport const executeKanbanViewQuery = async <TRow>(executeQuery: () => Promise<TRow[]> | TRow[]) => {\n try {\n return await executeQuery();\n } catch {\n return [];\n }\n};\n","import type { WorkbenchPanelInstance } from \"../../../core\";\n\nconst resolveProjectScope = (placement: WorkbenchPanelInstance, storageScope: string | undefined) => {\n const metadata = placement.resource?.metadata;\n const projectId = metadata?.projectId;\n if (typeof projectId === \"string\") return projectId;\n\n const favoriteScope = metadata?.favoriteScope;\n if (!favoriteScope || typeof favoriteScope !== \"object\" || Array.isArray(favoriteScope)) {\n return storageScope;\n }\n\n const scope = favoriteScope as { scope?: unknown; projectId?: unknown };\n return scope.scope === \"project\" && typeof scope.projectId === \"string\" ? scope.projectId : undefined;\n};\n\nexport const resolveKanbanRendererStorageKey = (\n kanbanRendererId: string,\n placement: WorkbenchPanelInstance,\n storageScope?: string,\n) => {\n const baseKey = `pstdio:workbench:kanbanRenderer:${kanbanRendererId}:${placement.instanceId}`;\n const projectScope = resolveProjectScope(placement, storageScope);\n return projectScope ? `${baseKey}:project:${projectScope}` : baseKey;\n};\n","import { Box, Stack } from \"@chakra-ui/react\";\nimport { type ResourceContextAction, ScrollArea } from \"@pstdio/ui\";\nimport {\n type AttributeDescriptor,\n type AttributesSource,\n isAttributesSource,\n KanbanRenderer,\n type KanbanRendererRow,\n useKanbanRendererStore,\n} from \"@pstdio/ui/kanban-renderer\";\nimport { type ReactNode, useEffect, useRef, useState, useSyncExternalStore } from \"react\";\nimport type {\n KanbanRendererQueryState,\n RegisteredKanbanRendererContribution,\n ResourceRef,\n WorkbenchCore,\n WorkbenchPanelInstance,\n} from \"../../../core\";\nimport { getWorkbenchRenderers } from \"../../../core\";\nimport { useWorkbenchResourceActionResolver } from \"../../menus/resource-actions\";\nimport { bindReactKanbanPresentation } from \"./kanban-presentation\";\nimport { createKanbanViewQuerySequencer, executeKanbanViewQuery } from \"./kanban-view-query\";\nimport { resolveKanbanRendererStorageKey } from \"./kanban-view-storage\";\n\ninterface WorkbenchKanbanViewProps {\n workbench: WorkbenchCore;\n contribution: RegisteredKanbanRendererContribution;\n placement: WorkbenchPanelInstance;\n}\n\ninterface WorkbenchKanbanViewFrameProps {\n children: ReactNode;\n usesInternalScroll: boolean;\n}\n\nconst kanbanViewScrollContentProps = { display: \"flex\", flexDirection: \"column\", minH: \"100%\" } as const;\n\nconst WorkbenchKanbanViewFrame = (props: WorkbenchKanbanViewFrameProps) => {\n const { children, usesInternalScroll } = props;\n\n return (\n <Stack h=\"full\" minH=\"0\" gap=\"0\" bg=\"bg\" overflow=\"hidden\" position={usesInternalScroll ? \"relative\" : undefined}>\n {usesInternalScroll ? (\n // Board columns own vertical scrolling; do not let their content height\n // make the workbench region's outer ScrollArea become the scroll owner.\n <Box position=\"absolute\" inset=\"0\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n {children}\n </Box>\n ) : (\n <ScrollArea flex=\"1\" minH=\"0\" minW=\"0\" w=\"full\" size=\"xs\" contentProps={kanbanViewScrollContentProps}>\n {children}\n </ScrollArea>\n )}\n </Stack>\n );\n};\n\nconst noopSubscribe = () => () => {};\n\nexport const isKanbanRowResource = (resource: unknown): resource is ResourceRef =>\n Boolean(\n resource &&\n typeof resource === \"object\" &&\n \"type\" in resource &&\n typeof resource.type === \"string\" &&\n \"id\" in resource &&\n typeof resource.id === \"string\",\n );\n\nconst useResolvedContributionAttributes = (attributes: AttributeDescriptor[] | AttributesSource) => {\n const source = isAttributesSource(attributes) ? attributes : undefined;\n const fallback = source ? undefined : (attributes as AttributeDescriptor[]);\n const subscribe = source ? source.subscribe : noopSubscribe;\n const getSnapshot = source ? source.getSnapshot : () => fallback!;\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n};\n\nexport const mergeKanbanViewRowActions = (\n resourceActions: ResourceContextAction[],\n contributionActions: ResourceContextAction[],\n) => {\n const resourceActionKeys = new Set(resourceActions.map((action) => action.key));\n const resourceCommandIds = new Set(resourceActions.flatMap((action) => (action.commandId ? [action.commandId] : [])));\n return [\n ...resourceActions,\n ...contributionActions.filter(\n (action) =>\n !resourceActionKeys.has(action.key) && (!action.commandId || !resourceCommandIds.has(action.commandId)),\n ),\n ];\n};\n\nexport const WorkbenchKanbanView = (props: WorkbenchKanbanViewProps) => {\n const { workbench, placement } = props;\n const contribution = bindReactKanbanPresentation(props.contribution);\n const resolveResourceActions = useWorkbenchResourceActionResolver(workbench);\n const attributes = useResolvedContributionAttributes(contribution.attributes);\n const storageKey = resolveKanbanRendererStorageKey(contribution.id, placement, contribution.storageScope);\n const initialState = {\n settings: contribution.defaultSettings,\n filters: contribution.defaultFilters,\n views: contribution.defaultViews,\n activeViewId: contribution.defaultActiveViewId,\n };\n\n const settings = useKanbanRendererStore(storageKey, (state) => state.settings, initialState);\n const filters = useKanbanRendererStore(storageKey, (state) => state.filters, initialState);\n\n const [rows, setRows] = useState<KanbanRendererRow[]>([]);\n const querySequencer = useRef(createKanbanViewQuerySequencer());\n\n // Run executeQuery whenever settings/filters change.\n useEffect(() => {\n let cancelled = false;\n const runQuery = () => {\n const queryId = querySequencer.current.next();\n const state: KanbanRendererQueryState = { settings, filters };\n void executeKanbanViewQuery(() => contribution.executeQuery(state)).then((next) => {\n if (cancelled || !querySequencer.current.isLatest(queryId)) return;\n setRows(next);\n });\n };\n runQuery();\n\n const subscription = contribution.subscribe?.(runQuery);\n const refreshSubscription = getWorkbenchRenderers(workbench).onDidRefreshKanbanRenderer((event) => {\n if (event.kanbanRendererId === contribution.id) runQuery();\n });\n return () => {\n cancelled = true;\n if (typeof subscription === \"function\") {\n subscription();\n } else {\n subscription?.dispose();\n }\n refreshSubscription.dispose();\n };\n }, [contribution, filters, settings, workbench]);\n\n const handleOpenRow = (row: KanbanRendererRow) => {\n if (contribution.onRowActivate) void Promise.resolve(contribution.onRowActivate(row)).catch(() => undefined);\n };\n\n const getRowContextMenuActions = (row: KanbanRendererRow) => {\n const resourceActions = isKanbanRowResource(row.resource) ? resolveResourceActions(row.resource) : [];\n const contributionActions = contribution.getRowContextMenuActions?.(row) ?? [];\n return mergeKanbanViewRowActions(resourceActions, contributionActions);\n };\n\n return (\n <WorkbenchKanbanViewFrame usesInternalScroll={settings.viewMode === \"board\"}>\n <KanbanRenderer\n rows={rows}\n storageKey={storageKey}\n attributes={attributes}\n defaultSettings={contribution.defaultSettings}\n defaultFilters={contribution.defaultFilters}\n defaultViews={contribution.defaultViews}\n defaultActiveViewId={contribution.defaultActiveViewId}\n emptyTitle={contribution.emptyTitle}\n emptyDescription={contribution.emptyDescription}\n getBoardColumnConfig={contribution.getBoardColumnConfig}\n hideToolbar={contribution.hideToolbar}\n onRowClick={contribution.onRowActivate ? handleOpenRow : undefined}\n onAttributeChange={contribution.onAttributeChange}\n onReorder={contribution.onReorder}\n createRow={contribution.createRow}\n onCreateRow={contribution.onCreateRow}\n onColumnAction={contribution.onColumnAction}\n getRowContextMenuActions={getRowContextMenuActions}\n />\n </WorkbenchKanbanViewFrame>\n );\n};\n","import { createElement } from \"react\";\nimport { getWorkbenchRenderers, type WorkbenchCore } from \"../../../core\";\nimport { WorkbenchKanbanView } from \"./kanban-view\";\n\n// Track per-core installation so repeated <Workbench> renders are idempotent.\nconst installed = new WeakSet<WorkbenchCore>();\n\nexport const installWorkbenchKanbanRenderer = (workbench: WorkbenchCore) => {\n if (installed.has(workbench)) return;\n installed.add(workbench);\n getWorkbenchRenderers(workbench).setKanbanRendererImplementation(\n ({ workbench: scope, instance, kanbanRendererId }) => {\n const contribution = getWorkbenchRenderers(scope).getKanbanRenderer(kanbanRendererId);\n if (!contribution) return null;\n return createElement(WorkbenchKanbanView, { workbench: scope, contribution, placement: instance });\n },\n );\n};\n","import type { ResourceContextAction } from \"@pstdio/ui\";\nimport { createElement } from \"react\";\nimport { getWorkbenchRenderers, type WorkbenchCore } from \"../../../core\";\nimport type { CommandParamFieldRenderer } from \"../../command-palette/command-params-dialog\";\nimport { WorkbenchTreeView } from \"./tree-view\";\n\ninterface InstallWorkbenchTreeRendererInput {\n renderParamField?: CommandParamFieldRenderer;\n onSidenavContextActionsChange?: (actions: ResourceContextAction[]) => void;\n}\n\ninterface WorkbenchTreeRendererInstallation {\n renderParamField: CommandParamFieldRenderer | undefined;\n onSidenavContextActionsChange: ((actions: ResourceContextAction[]) => void) | undefined;\n}\n\n// Track per-core installation so repeated <Workbench> renders are idempotent.\nconst installed = new WeakMap<WorkbenchCore, WorkbenchTreeRendererInstallation>();\n\nconst isSidenavPlacement = (workbench: WorkbenchCore, instanceId: string) =>\n workbench.layout.getLayout().regions.sidenav.widgets.some((placement) => placement.widgetId === instanceId);\n\nconst viewContextId = (workbench: WorkbenchCore, panelId: string, viewId: string | undefined) => {\n const config = workbench.layout.getPanel(panelId)?.config;\n if (config && typeof config === \"object\" && \"viewContextId\" in config) {\n const candidate = config.viewContextId;\n if (typeof candidate === \"string\") return candidate;\n }\n return viewId;\n};\n\nexport const installWorkbenchTreeRenderer = (\n workbench: WorkbenchCore,\n input: InstallWorkbenchTreeRendererInput = {},\n) => {\n const current = installed.get(workbench);\n if (current) {\n current.renderParamField = input.renderParamField;\n current.onSidenavContextActionsChange = input.onSidenavContextActionsChange;\n return;\n }\n\n const installation = {\n renderParamField: input.renderParamField,\n onSidenavContextActionsChange: input.onSidenavContextActionsChange,\n };\n installed.set(workbench, installation);\n getWorkbenchRenderers(workbench).setTreeRendererImplementation(({ workbench: scope, instance, treeId }) =>\n createElement(WorkbenchTreeView, {\n workbench: scope,\n treeViewId: treeId,\n resource: instance.resource,\n viewId: viewContextId(scope, instance.panelId, instance.viewId),\n renderParamField: installation.renderParamField,\n onSidenavContextActionsChange: isSidenavPlacement(scope, instance.instanceId)\n ? installation.onSidenavContextActionsChange\n : undefined,\n }),\n );\n};\n","import type { FileIconThemePreferenceOption } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\n// The file icon themes a workbench offers: whatever is registered in\n// `workbench.fileIconThemes` (e.g. extension-contributed themes). The list\n// shrinks when a contribution is disposed, mirroring color themes.\nexport const useWorkbenchFileIconThemePreferences = (workbench: WorkbenchCore) =>\n useWorkbenchStore(\n workbench.fileIconThemes.store,\n (state) => state.themes,\n ) as readonly FileIconThemePreferenceOption[];\n","import {\n getActiveWorkbenchLocationPanel,\n getWorkbenchModePanelForRegion,\n isWorkbenchModePanelAvailable,\n isWorkbenchPanelPlacementVisible,\n matchesWorkbenchModeEligibility,\n type WorkbenchCore,\n type WorkbenchRegion,\n} from \"../../core\";\nimport { useModeChrome } from \"../region/mode-chrome\";\nimport { useWorkbenchActiveModeId, useWorkbenchLocationResource } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\n\ninterface WorkbenchRegionContentOptions {\n locationScoped?: boolean;\n}\n\nexport const useWorkbenchRegionContent = (\n workbench: WorkbenchCore,\n region: WorkbenchRegion,\n options: WorkbenchRegionContentOptions = {},\n) => {\n const chrome = useModeChrome(workbench, region);\n const resource = useWorkbenchLocationResource(workbench);\n const modeId = useWorkbenchActiveModeId(workbench);\n const modePanel = getWorkbenchModePanelForRegion(region);\n const panelAvailable =\n !modePanel || isWorkbenchModePanelAvailable(modeId ? workbench.modes.getMode(modeId) : undefined, modePanel);\n\n return useWorkbenchStore(workbench.layout.store, (state) => {\n if (chrome !== undefined) return chrome !== false;\n if (!panelAvailable) return false;\n if (state.placeholders[region]) return true;\n if (!options.locationScoped) return state.layout.regions[region].widgets.length > 0;\n\n return state.layout.regions[region].widgets.some((placement) => {\n const widget = state.widgets[placement.contributionId];\n if (!widget) return false;\n return region === \"side\"\n ? matchesWorkbenchModeEligibility(widget, modeId)\n : isWorkbenchPanelPlacementVisible(widget, resource, modeId, placement, {\n location: getActiveWorkbenchLocationPanel(state.layout),\n });\n });\n });\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { WorkbenchCore, WorkbenchRegion } from \"../../core\";\n\ninterface WorkbenchHeaderBorderProps {\n workbench: WorkbenchCore;\n region: WorkbenchRegion;\n}\n\n// The header's bottom edge is painted as an absolutely-positioned line instead\n// of a CSS border so an active outline tab can sit on top of it and merge with\n// the panel content below. Hosting headers must set `position=\"relative\"`; the\n// tab strip uses a higher `zIndex` so the active tab paints over this line.\nexport const WorkbenchHeaderBorder = (props: WorkbenchHeaderBorderProps) => {\n const { workbench, region } = props;\n\n if (!workbench.layout.getRegionHeaderBorderBottom(region)) return null;\n\n return (\n <Box position=\"absolute\" insetInline=\"0\" bottom=\"0\" h=\"1px\" bg=\"border.subtle\" pointerEvents=\"none\" zIndex=\"0\" />\n );\n};\n","import type { WorkbenchCore } from \"../../core\";\nimport { useWorkbenchPanelHeaderVisible } from \"../region/region-tabs\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { useWorkbenchRegionContent } from \"./use-workbench-region-content\";\nimport { resolvePanelCollapsible } from \"./workbench-panel-state\";\n\n// The collapse/reveal state of one panel around the main editor region, bundled so\n// WorkbenchBody receives one object per panel instead of six flat props.\nexport interface WorkbenchPanelView {\n has: boolean;\n hasHeader: boolean;\n collapsible: boolean;\n collapsed: boolean;\n onCollapsedChange: (collapsed: boolean) => void;\n}\n\nexport interface WorkbenchMainPanels {\n hasMainHeader: boolean;\n secondaryPanel: WorkbenchPanelView;\n}\n\nconst useSecondaryPanelView = (workbench: WorkbenchCore) => {\n const hasContent = useWorkbenchRegionContent(workbench, \"secondary\", { locationScoped: true });\n const hasHeader = useWorkbenchRegionContent(workbench, \"secondary-header\");\n const hasPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"secondary\");\n const collapsible = useWorkbenchStore(workbench.layout.store, () =>\n resolvePanelCollapsible(workbench, \"secondary-header\", \"secondary\"),\n );\n const open = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.secondary.visible);\n\n return {\n has: hasContent || hasHeader || hasPanelHeader,\n hasHeader,\n collapsible,\n collapsed: !open,\n onCollapsedChange: (collapsed: boolean) => {\n if (!collapsed || collapsible) workbench.shell.setRegionOpen(\"secondary\", !collapsed);\n },\n };\n};\n\n// Subscribe to derived panel facts rather than the whole layout. Replaying a\n// resource can replace the active main placement without rebuilding the shell.\nexport const useWorkbenchMainPanels = (workbench: WorkbenchCore) => {\n const hasMainHeader = useWorkbenchRegionContent(workbench, \"main-header\");\n const secondaryPanel = useSecondaryPanelView(workbench);\n\n return {\n hasMainHeader,\n secondaryPanel,\n };\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { Header } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { WorkbenchPanelMenuLayout, WorkbenchPanelMenuOpeners } from \"../panel-menu/panel-menu\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { useWorkbenchPanelHeaderVisible, WorkbenchRegionTabs } from \"../region/region-tabs\";\nimport { useWorkbenchModeRegionSettings } from \"../shared/use-workbench-mode-region-settings\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchHeaderBorder } from \"./header-bottom-border\";\n\ninterface WorkbenchSecondaryPanelProps {\n workbench: WorkbenchCore;\n hasSecondaryHeader: boolean;\n}\n\nexport const WorkbenchSecondaryPanel = (props: WorkbenchSecondaryPanelProps) => {\n const { workbench, hasSecondaryHeader } = props;\n const hasPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"secondary\");\n const settings = useWorkbenchModeRegionSettings(workbench, \"secondary\");\n\n return (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"secondary\"\n data-workbench-panel=\"secondary\"\n data-workbench-region=\"secondary\"\n as=\"section\"\n bg={workbenchBackgrounds.panel}\n layerStyle=\"panel\"\n flex=\"1\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n display=\"flex\"\n flexDirection=\"column\"\n w=\"full\"\n >\n <Header\n display={settings?.showHeader !== false && (hasSecondaryHeader || hasPanelHeader) ? \"flex\" : \"none\"}\n data-workbench-panel-header=\"secondary\"\n variant=\"main\"\n bg={workbenchBackgrounds.panel}\n position=\"relative\"\n flexShrink={0}\n gap=\"xs\"\n overflow=\"hidden\"\n overflowY=\"hidden\"\n >\n <WorkbenchRegionTabs workbench={workbench} region=\"secondary\" />\n <Box display={hasSecondaryHeader ? \"block\" : \"none\"} flex=\"1\" h=\"full\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchRegion workbench={workbench} region=\"secondary-header\" title=\"Secondary Panel header\" />\n </Box>\n <WorkbenchPanelMenuOpeners workbench={workbench} panel=\"secondary\" />\n <WorkbenchHeaderBorder workbench={workbench} region=\"secondary-header\" />\n </Header>\n <Box flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchPanelMenuLayout workbench={workbench} panel=\"secondary\">\n <WorkbenchRegion workbench={workbench} region=\"secondary\" title=\"Secondary Panel\" />\n </WorkbenchPanelMenuLayout>\n </Box>\n </WorkbenchFocusRegion>\n );\n};\n","import { Box, Grid } from \"@chakra-ui/react\";\nimport { Header, PANEL_HEADER_CONTROL_SIZE, ResizableSplitLayout } from \"@pstdio/ui\";\nimport { headerTrailingMenuPath, type WorkbenchCore, type WorkbenchRegionSize } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { WorkbenchHeaderActions } from \"../header/header-actions\";\nimport { WorkbenchPanelMenuLayout, WorkbenchPanelMenuOpeners } from \"../panel-menu/panel-menu\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport {\n useWorkbenchPanelHeaderVisible,\n useWorkbenchRegionTabsVisible,\n WorkbenchRegionTabs,\n} from \"../region/region-tabs\";\nimport { useWorkbenchModeRegionSettings } from \"../shared/use-workbench-mode-region-settings\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchHeaderBorder } from \"./header-bottom-border\";\nimport { useWorkbenchMainPanels } from \"./use-workbench-main-panels\";\nimport { WorkbenchSecondaryPanel } from \"./workbench-secondary-panel\";\n\ninterface WorkbenchBodyProps {\n workbench: WorkbenchCore;\n}\n\nconst SECONDARY_PANEL_SIZE = { defaultPx: 240, minPx: 128, maxPx: 420 };\nconst SECONDARY_PANEL_CONTENT_MIN_SIZE_PX = 240;\nconst mainHeaderTrailingMenuPath = headerTrailingMenuPath(\"main\");\n\nconst resolveRegionSize = (\n regionSize: WorkbenchRegionSize | undefined,\n persistedSize: number | undefined,\n fallback: Required<WorkbenchRegionSize>,\n) => ({\n defaultPx: persistedSize ?? regionSize?.defaultPx ?? fallback.defaultPx,\n minPx: regionSize?.minPx ?? fallback.minPx,\n maxPx: regionSize ? regionSize.maxPx : fallback.maxPx,\n});\n\ninterface MainHeaderBarProps {\n workbench: WorkbenchCore;\n hasMainHeader: boolean;\n}\n\nconst MainHeaderBar = (props: MainHeaderBarProps) => {\n const { workbench, hasMainHeader } = props;\n const hasMainContentTabs = useWorkbenchRegionTabsVisible(workbench, \"main\");\n const hasPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"main\");\n const settings = useWorkbenchModeRegionSettings(workbench, \"main\");\n\n const visible = settings?.showHeader !== false && (hasMainHeader || hasPanelHeader);\n\n return (\n <Header\n data-workbench-panel-header=\"main\"\n display={visible ? \"flex\" : \"none\"}\n variant=\"main\"\n bg={workbenchBackgrounds.main}\n position=\"relative\"\n flexShrink={0}\n gap=\"xs\"\n overflow=\"hidden\"\n overflowY=\"hidden\"\n >\n <WorkbenchRegionTabs workbench={workbench} region=\"main\" />\n {/* The tab strip grows into the empty header, so only claim space when a\n main-header view is actually mounted or when there are no tabs to claim it. */}\n <Box flex={hasMainHeader || !hasMainContentTabs ? \"1\" : \"0\"} h=\"full\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchRegion workbench={workbench} region=\"main-header\" title=\"Main header\" />\n </Box>\n <WorkbenchHeaderActions\n workbench={workbench}\n menuPath={mainHeaderTrailingMenuPath}\n controlSize={PANEL_HEADER_CONTROL_SIZE}\n />\n <WorkbenchPanelMenuOpeners workbench={workbench} panel=\"main\" />\n <WorkbenchHeaderBorder workbench={workbench} region=\"main-header\" />\n </Header>\n );\n};\n\nexport const WorkbenchBody = (props: WorkbenchBodyProps) => {\n const { workbench } = props;\n const modeSettings = useWorkbenchModeRegionSettings(workbench, \"secondary\");\n const panels = useWorkbenchMainPanels(workbench);\n const { hasMainHeader, secondaryPanel } = panels;\n const persistedSecondarySize = useWorkbenchStore(\n workbench.layout.store,\n (state) => state.layout.regions.secondary.size,\n );\n const secondaryPanelSize = resolveRegionSize(\n modeSettings?.size ?? workbench.layout.getRegionSize(\"secondary\"),\n persistedSecondarySize,\n SECONDARY_PANEL_SIZE,\n );\n\n const mainRegion = (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"main\"\n data-workbench-region=\"main\"\n bg={workbenchBackgrounds.main}\n flex=\"1\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n overflow=\"hidden\"\n >\n <WorkbenchRegion workbench={workbench} region=\"main\" title=\"Main\" />\n </WorkbenchFocusRegion>\n );\n const mainPanelWithMenus = (\n <WorkbenchPanelMenuLayout workbench={workbench} panel=\"main\">\n {mainRegion}\n </WorkbenchPanelMenuLayout>\n );\n\n const mainContent = (\n <Grid\n data-workbench-panel=\"main\"\n gridTemplateRows=\"auto minmax(0, 1fr)\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n bg={workbenchBackgrounds.main}\n layerStyle=\"panel\"\n >\n <MainHeaderBar workbench={workbench} hasMainHeader={hasMainHeader} />\n <Box gridRow=\"2\" h=\"full\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n {mainPanelWithMenus}\n </Box>\n </Grid>\n );\n\n return (\n <ResizableSplitLayout\n as=\"main\"\n minH=\"0\"\n minW=\"0\"\n resizableSide=\"bottom\"\n contentPanel={mainContent}\n resizablePanel={<WorkbenchSecondaryPanel workbench={workbench} hasSecondaryHeader={secondaryPanel.hasHeader} />}\n collapsed={!secondaryPanel.has || secondaryPanel.collapsed}\n collapsible={secondaryPanel.collapsible}\n defaultSizePx={secondaryPanelSize.defaultPx}\n minSizePx={secondaryPanelSize.minPx}\n maxSizePx={secondaryPanelSize.maxPx}\n contentMinSizePx={SECONDARY_PANEL_CONTENT_MIN_SIZE_PX}\n resizeLabel=\"Resize Secondary Panel\"\n onSizeChange={(height) => workbench.layout.setRegionSize(\"secondary\", height)}\n onCollapsedChange={secondaryPanel.onCollapsedChange}\n />\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { type ResourceContextAction, ResourceContextMenu } from \"@pstdio/ui\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchFocusRegion } from \"../focus/focus-region\";\nimport { ModeChromeView, useModeChrome } from \"../region/mode-chrome\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { useRetainedViewPlacements } from \"../region/use-retained-view-placements\";\nimport { WorkbenchWidgetHost } from \"../region/widget-host\";\nimport { useWorkbenchActiveModeId } from \"../shared/use-workbench-location-resource\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\n\ninterface WorkbenchSidenavProps {\n workbench: WorkbenchCore;\n contextActions: ResourceContextAction[];\n}\n\nexport const WorkbenchSidenav = (props: WorkbenchSidenavProps) => {\n const { workbench, contextActions } = props;\n\n return (\n <ResourceContextMenu actions={contextActions} closeOnSelect={false} keepMountedWhenEmpty>\n <Box h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"sidenav\"\n data-workbench-region=\"sidenav\"\n as=\"aside\"\n bg={workbenchBackgrounds.sidenav}\n layerStyle=\"panel\"\n display=\"flex\"\n flexDirection=\"column\"\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n w=\"full\"\n >\n <Box flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchRegion workbench={workbench} region=\"sidenav\" title=\"Sidenav\" />\n </Box>\n </WorkbenchFocusRegion>\n </Box>\n </ResourceContextMenu>\n );\n};\n\ninterface WorkbenchRegionPanelProps {\n workbench: WorkbenchCore;\n visible?: boolean;\n}\n\nexport const WORKBENCH_STATUS_BAR_HEIGHT = \"2rem\";\n\ninterface WorkbenchStatusBarItemsProps {\n workbench: WorkbenchCore;\n slot: \"leading\" | \"trailing\";\n}\n\nconst WorkbenchStatusBarItems = (props: WorkbenchStatusBarItemsProps) => {\n const { slot, workbench } = props;\n const activeModeId = useWorkbenchActiveModeId(workbench);\n const items = activeModeId === workbench.modes.getActiveModeId() ? workbench.statusBar.listVisibleItems(slot) : [];\n\n const placements = useRetainedViewPlacements(\n workbench,\n items.map((item) => ({\n widgetId: item.id,\n contributionId: item.viewId,\n viewId: item.viewId,\n title: workbench.views.getView(item.viewId)?.title,\n closable: false,\n })),\n );\n return placements.map((placement) => {\n const order = items.findIndex((item) => item.id === placement.widgetId);\n return (\n <Box\n key={placement.widgetId}\n display={order < 0 ? \"none\" : \"flex\"}\n inert={order < 0}\n order={order}\n alignItems=\"center\"\n minW=\"0\"\n h=\"full\"\n >\n <WorkbenchWidgetHost workbench={workbench} region=\"status\" placement={placement} />\n </Box>\n );\n });\n};\n\nexport const WorkbenchActivityBar = (props: WorkbenchRegionPanelProps) => {\n const { workbench } = props;\n\n return (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"activity\"\n data-workbench-region=\"activity\"\n display={props.visible === false ? \"none\" : \"block\"}\n as=\"nav\"\n flexShrink={0}\n h=\"full\"\n minH=\"0\"\n overflow=\"hidden\"\n w=\"3.5rem\"\n >\n <WorkbenchRegion workbench={workbench} region=\"activity\" title=\"Activity bar\" />\n </WorkbenchFocusRegion>\n );\n};\n\nexport const WorkbenchStatusBar = (props: WorkbenchRegionPanelProps) => {\n const { workbench } = props;\n useWorkbenchStore(workbench.statusBar.store, (state) => state.items);\n const chrome = useModeChrome(workbench, \"status\");\n\n return (\n <WorkbenchFocusRegion\n workbench={workbench}\n region=\"status\"\n data-workbench-region=\"status\"\n display={props.visible === false ? \"none\" : \"block\"}\n as=\"footer\"\n flexShrink={0}\n h={WORKBENCH_STATUS_BAR_HEIGHT}\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n >\n <ModeChromeView workbench={workbench} region=\"status\" viewId={chrome || undefined} />\n <Box\n display={chrome ? \"none\" : \"flex\"}\n alignItems=\"stretch\"\n justifyContent=\"space-between\"\n h=\"full\"\n minW=\"0\"\n w=\"full\"\n >\n <Box display=\"flex\" alignItems=\"stretch\" minW=\"0\" h=\"full\">\n <WorkbenchStatusBarItems workbench={workbench} slot=\"leading\" />\n </Box>\n <Box display=\"flex\" alignItems=\"stretch\" minW=\"0\" h=\"full\">\n <WorkbenchStatusBarItems workbench={workbench} slot=\"trailing\" />\n </Box>\n </Box>\n </WorkbenchFocusRegion>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport { ResizableSplitLayout } from \"@pstdio/ui\";\nimport type { ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchRegion } from \"../region/region\";\nimport { WorkbenchRegionTabs } from \"../region/region-tabs\";\nimport { useWorkbenchModeRegionSettings } from \"../shared/use-workbench-mode-region-settings\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { WorkbenchAttachedSidePanel } from \"../side-panel/side-panel\";\n\nconst ATTACHED_PANEL_DEFAULT_SIZE_PX = 420;\nconst ATTACHED_PANEL_MIN_SIZE_PX = 320;\n\ninterface WorkbenchSidePanelRegionPortalProps {\n workbench: WorkbenchCore;\n sidePanelHost: HTMLDivElement | null;\n}\n\nexport const WorkbenchSidePanelRegionPortal = (props: WorkbenchSidePanelRegionPortalProps) => {\n const { workbench, sidePanelHost } = props;\n\n if (!sidePanelHost) return null;\n\n return createPortal(\n <WorkbenchRegion workbench={workbench} region=\"side\" title=\"Side Panel\" transparent />,\n sidePanelHost,\n );\n};\n\ninterface WorkbenchSidePanelRegionHeaderProps {\n workbench: WorkbenchCore;\n hasSideHeader: boolean;\n}\n\nexport const WorkbenchSidePanelRegionHeader = (props: WorkbenchSidePanelRegionHeaderProps) => {\n const { workbench, hasSideHeader } = props;\n\n return (\n <Box alignItems=\"center\" display=\"flex\" flex=\"1\" h=\"full\" minW=\"0\" overflow=\"hidden\" w=\"full\">\n <WorkbenchRegionTabs workbench={workbench} region=\"side\" />\n {hasSideHeader ? (\n <Box flex=\"1\" h=\"full\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchRegion workbench={workbench} region=\"side-header\" title=\"Side Panel header\" transparent />\n </Box>\n ) : null}\n </Box>\n );\n};\n\ninterface WorkbenchAttachedSidePanelLayoutProps {\n workbench: WorkbenchCore;\n attached: boolean;\n contentPanel: ReactNode;\n contentMinSizePx: number;\n header: ReactNode;\n onAttachedSlotChange: (slot: HTMLDivElement | null) => void;\n onCollapse: () => void;\n}\n\nexport const WorkbenchAttachedSidePanelLayout = (props: WorkbenchAttachedSidePanelLayoutProps) => {\n const { workbench, attached, contentPanel, contentMinSizePx, header, onAttachedSlotChange, onCollapse } = props;\n const persistedSize = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.side.size);\n const modeSettings = useWorkbenchModeRegionSettings(workbench, \"side\");\n const size = modeSettings?.size ?? workbench.layout.getRegionSize(\"side\");\n const collapsible = modeSettings?.collapsible ?? workbench.layout.getRegionCollapsible(\"side\");\n\n return (\n <ResizableSplitLayout\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n resizableSide=\"right\"\n contentPanel={contentPanel}\n resizablePanel={\n <WorkbenchAttachedSidePanel workbench={workbench} contentSlotRef={onAttachedSlotChange} header={header} />\n }\n collapsed={!attached}\n defaultSizePx={persistedSize ?? size?.defaultPx ?? ATTACHED_PANEL_DEFAULT_SIZE_PX}\n minSizePx={size?.minPx ?? ATTACHED_PANEL_MIN_SIZE_PX}\n maxSizePx={size?.maxPx}\n collapsible={collapsible}\n onSizeChange={(width) => workbench.layout.setRegionSize(\"side\", width)}\n contentMinSizePx={contentMinSizePx}\n resizeLabel=\"Resize Side Panel\"\n onCollapsedChange={(collapsed) => {\n if (attached && collapsed) onCollapse();\n }}\n />\n );\n};\n","import { Flex } from \"@chakra-ui/react\";\nimport type { ReactNode } from \"react\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport type { WorkbenchCore } from \"../../core\";\nimport { WorkbenchAttachedSidePanelLayout } from \"./workbench-side-panel-layout\";\n\ninterface WorkbenchSidePanelBoundaryProps {\n workbench: WorkbenchCore;\n showAttachedSidePanel: boolean;\n contentFrame: ReactNode;\n sideHeader: ReactNode;\n contentMinSizePx: number;\n onAttachedSlotChange(slot: HTMLDivElement | null): void;\n}\n\ninterface WorkbenchKeyboardFrameProps {\n children: ReactNode;\n}\n\nconst interactivePointerTargetSelector = [\n \"a[href]\",\n \"button\",\n \"input\",\n \"select\",\n \"textarea\",\n \"[contenteditable='true']\",\n \"[role='button']\",\n \"[role='checkbox']\",\n \"[role='menuitem']\",\n \"[role='option']\",\n \"[role='radio']\",\n \"[role='switch']\",\n \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n\nconst hasClosest = (target: EventTarget | null): target is EventTarget & { closest(selector: string): unknown } =>\n typeof (target as { closest?: unknown } | null)?.closest === \"function\";\n\nexport const shouldFocusWorkbenchKeyboardFrame = (target: EventTarget | null, currentTarget: EventTarget) => {\n if (target === currentTarget) return true;\n if (!hasClosest(target)) return false;\n return !target.closest(interactivePointerTargetSelector);\n};\n\nconst focusWorkbenchKeyboardFrame = (element: HTMLDivElement | null) => {\n element?.focus({ preventScroll: true });\n};\n\nconst WorkbenchKeyboardFrame = (props: WorkbenchKeyboardFrameProps) => {\n const { children } = props;\n const ref = useRef<HTMLDivElement | null>(null);\n\n useLayoutEffect(() => {\n focusWorkbenchKeyboardFrame(ref.current);\n }, []);\n\n return (\n <Flex\n ref={ref}\n h=\"full\"\n minH=\"0\"\n minW=\"0\"\n w=\"full\"\n tabIndex={-1}\n outline=\"none\"\n onPointerDown={(event) => {\n if (shouldFocusWorkbenchKeyboardFrame(event.target, event.currentTarget)) {\n focusWorkbenchKeyboardFrame(event.currentTarget);\n }\n }}\n >\n {children}\n </Flex>\n );\n};\n\nexport const WorkbenchSidePanelBoundary = (props: WorkbenchSidePanelBoundaryProps) => {\n const { workbench, showAttachedSidePanel, contentFrame, sideHeader, contentMinSizePx, onAttachedSlotChange } = props;\n\n return (\n <WorkbenchKeyboardFrame>\n <WorkbenchAttachedSidePanelLayout\n workbench={workbench}\n attached={showAttachedSidePanel}\n contentPanel={contentFrame}\n contentMinSizePx={contentMinSizePx}\n header={sideHeader}\n onAttachedSlotChange={onAttachedSlotChange}\n onCollapse={() => workbench.sidePanel.setMode(\"closed\")}\n />\n </WorkbenchKeyboardFrame>\n );\n};\n","import { Flex } from \"@chakra-ui/react\";\nimport { ResizableSplitLayout, type ResourceContextAction, Toaster } from \"@pstdio/ui\";\nimport { type ReactNode, useLayoutEffect, useRef, useState } from \"react\";\nimport type { WorkbenchCore, WorkbenchShellOpenRegion } from \"../../core\";\nimport { WorkbenchCommandPalette } from \"../command-palette/command-palette\";\nimport type { CommandParamFieldRenderer } from \"../command-palette/command-params-dialog\";\nimport { WorkbenchNavChrome, type WorkbenchNavRegionControl } from \"../header/workbench-nav-chrome\";\nimport { WorkbenchKeybindingDispatcher } from \"../keybindings/workbench-keybinding-dispatcher\";\nimport { WorkbenchNotificationHost } from \"../notifications/notification-host\";\nimport { useModeChrome } from \"../region/mode-chrome\";\nimport { useWorkbenchPanelHeaderVisible } from \"../region/region-tabs\";\nimport { installWorkbenchControlsRenderer } from \"../renderers/controls/install-controls-renderer\";\nimport { installWorkbenchDataTableRenderer } from \"../renderers/data-table/install-data-table-renderer\";\nimport { installWorkbenchFileRenderer } from \"../renderers/file/install-file-renderer\";\nimport { installWorkbenchKanbanRenderer } from \"../renderers/kanban/install-kanban-renderer\";\nimport { installWorkbenchTreeRenderer } from \"../renderers/tree/install-tree-renderer\";\nimport { useWorkbenchStore } from \"../shared/use-workbench-store\";\nimport { WorkbenchFloatingSidePanel } from \"../side-panel/side-panel\";\nimport { useWorkbenchFileIconThemePreferences } from \"../theme/use-workbench-file-icon-theme-preferences\";\nimport { useWorkbenchThemePreferences } from \"../theme/use-workbench-theme-preferences\";\nimport { workbenchBackgrounds } from \"../theme/workbench-theme-background\";\nimport { WorkbenchThemeProvider } from \"../theme/workbench-theme-provider\";\nimport { WorkbenchThemeScope } from \"../theme/workbench-theme-scope\";\nimport { WorkbenchOverlayLayer } from \"./overlay-layer\";\nimport { useWorkbenchRegionContent } from \"./use-workbench-region-content\";\nimport { WorkbenchBody } from \"./workbench-body\";\nimport { resolvePanelCollapsible } from \"./workbench-panel-state\";\nimport {\n WORKBENCH_STATUS_BAR_HEIGHT,\n WorkbenchActivityBar,\n WorkbenchSidenav,\n WorkbenchStatusBar,\n} from \"./workbench-panels\";\nimport { WorkbenchSidePanelBoundary } from \"./workbench-side-panel-boundary\";\nimport { WorkbenchSidePanelRegionHeader, WorkbenchSidePanelRegionPortal } from \"./workbench-side-panel-layout\";\n\ninterface WorkbenchProps {\n workbench: WorkbenchCore;\n /** Host chrome above all workbench regions, inside the current theme. */\n titleBar?: ReactNode;\n renderParamField?: CommandParamFieldRenderer;\n /** Icon shown in the closed Side Panel's bubble launcher. */\n sidePanelBubbleIcon?: ReactNode;\n /** Host action for opening the closed Side Panel from its bubble launcher. */\n onOpenSidePanel?: () => void;\n}\n\nconst SIDENAV_DEFAULT_SIZE_PX = 250;\nconst SIDENAV_MIN_SIZE_PX = 200;\nconst CONTENT_MIN_SIZE_PX = 320;\n\nconst resolveSidenavSize = (workbench: WorkbenchCore, persistedSize: number | undefined) => {\n const regionSize = workbench.layout.getRegionSize(\"sidenav\");\n\n return {\n defaultPx: persistedSize ?? regionSize?.defaultPx ?? SIDENAV_DEFAULT_SIZE_PX,\n minPx: regionSize?.minPx ?? SIDENAV_MIN_SIZE_PX,\n maxPx: regionSize?.maxPx,\n };\n};\n\nconst createSidePanelHost = () => {\n if (typeof document === \"undefined\") return null;\n const host = document.createElement(\"div\");\n host.style.display = \"contents\";\n host.dataset.workbenchSidePanelHost = \"\";\n return host;\n};\n\nconst useWorkbenchLayoutFlags = (workbench: WorkbenchCore) => {\n const statusChrome = useModeChrome(workbench, \"status\");\n const statusBarItems = useWorkbenchStore(workbench.statusBar.store, (state) => state.items);\n useWorkbenchStore(workbench.context.store, (state) => state.values);\n const activeModeId = useWorkbenchStore(workbench.modes.store, (state) => state.activeModeId);\n return {\n hasNavWidgets: useWorkbenchRegionContent(workbench, \"nav\"),\n hasActivityBarWidgets: useWorkbenchRegionContent(workbench, \"activity\"),\n hasSidenavWidgets: useWorkbenchRegionContent(workbench, \"sidenav\"),\n hasSecondaryHeaderWidgets: useWorkbenchRegionContent(workbench, \"secondary-header\"),\n hasSecondaryWidgets: useWorkbenchRegionContent(workbench, \"secondary\", { locationScoped: true }),\n hasSideHeaderWidgets: useWorkbenchRegionContent(workbench, \"side-header\"),\n hasSideWidgets: useWorkbenchRegionContent(workbench, \"side\", { locationScoped: true }),\n hasStatusWidgets:\n statusChrome !== undefined\n ? statusChrome !== false\n : activeModeId === workbench.modes.getActiveModeId() &&\n Object.keys(statusBarItems).length > 0 &&\n workbench.statusBar.listVisibleItems().length > 0,\n };\n};\n\ninterface WorkbenchRegionControlsInput {\n showSidenav: boolean;\n sidenavOpen: boolean;\n showSecondaryPanel: boolean;\n secondaryPanelOpen: boolean;\n hasSidePanel: boolean;\n sidePanelMode: \"attached\" | \"floating\" | \"closed\";\n setPanelOpen: (region: WorkbenchShellOpenRegion, open: boolean) => void;\n}\n\nconst createWorkbenchRegionControls = (input: WorkbenchRegionControlsInput) => {\n const controls: WorkbenchNavRegionControl[] = [];\n\n if (input.showSidenav && !input.sidenavOpen) {\n controls.push({\n id: \"sidenav\",\n label: \"Show Sidenav\",\n icon: \"PanelLeft\",\n open: false,\n onToggle: () => input.setPanelOpen(\"sidenav\", true),\n });\n }\n\n if (input.showSecondaryPanel) {\n controls.push({\n id: \"secondary\",\n label: input.secondaryPanelOpen ? \"Hide Secondary Panel\" : \"Show Secondary Panel\",\n icon: \"PanelBottom\",\n open: input.secondaryPanelOpen,\n onToggle: () => input.setPanelOpen(\"secondary\", !input.secondaryPanelOpen),\n });\n }\n\n if (input.hasSidePanel) {\n const open = input.sidePanelMode !== \"closed\";\n controls.push({\n id: \"side\",\n label: open ? \"Hide Side Panel\" : \"Show Side Panel\",\n icon: \"PanelRight\",\n open,\n onToggle: () => input.setPanelOpen(\"side\", !open),\n });\n }\n\n return controls;\n};\n\nconst WorkbenchContent = (props: WorkbenchProps) => {\n const { workbench, renderParamField, sidePanelBubbleIcon, onOpenSidePanel, titleBar } = props;\n const [sidenavContextActions, setSidenavContextActions] = useState<ResourceContextAction[]>([]);\n installWorkbenchTreeRenderer(workbench, {\n renderParamField,\n onSidenavContextActionsChange: setSidenavContextActions,\n });\n installWorkbenchKanbanRenderer(workbench);\n installWorkbenchDataTableRenderer(workbench);\n installWorkbenchFileRenderer(workbench);\n installWorkbenchControlsRenderer(workbench);\n const [attachedSidePanelSlot, setAttachedSidePanelSlot] = useState<HTMLDivElement | null>(null);\n const [floatingSidePanelSlot, setFloatingSidePanelSlot] = useState<HTMLDivElement | null>(null);\n const sidePanelHostRef = useRef<HTMLDivElement | null>(null);\n if (!sidePanelHostRef.current) sidePanelHostRef.current = createSidePanelHost();\n\n const sidePanelMode = useWorkbenchStore(workbench.sidePanel.store, (state) => state.mode);\n const paletteOpen = useWorkbenchStore(workbench.commandPalette.store, (state) => state.open);\n const paletteInitialQuery = useWorkbenchStore(workbench.commandPalette.store, (state) => state.initialQuery);\n const sidenavOpen = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.sidenav.visible);\n const secondaryPanelOpen = useWorkbenchStore(\n workbench.layout.store,\n (state) => state.layout.regions.secondary.visible,\n );\n const hasSecondaryPanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"secondary\");\n const hasSidePanelHeader = useWorkbenchPanelHeaderVisible(workbench, \"side\");\n const floatingPanelsAllowed = useWorkbenchStore(workbench.modes.store, () => workbench.sidePanel.canFloat());\n\n const {\n hasActivityBarWidgets,\n hasNavWidgets,\n hasSideHeaderWidgets,\n hasSideWidgets,\n hasSidenavWidgets,\n hasSecondaryHeaderWidgets,\n hasSecondaryWidgets,\n hasStatusWidgets,\n } = useWorkbenchLayoutFlags(workbench);\n const hasSidePanel = hasSideHeaderWidgets || hasSideWidgets || hasSidePanelHeader;\n const showSidenav = hasSidenavWidgets;\n const sidenavCollapsible = resolvePanelCollapsible(workbench, \"sidenav\");\n const showSecondaryPanel = hasSecondaryHeaderWidgets || hasSecondaryWidgets || hasSecondaryPanelHeader;\n const persistedSidenavSize = useWorkbenchStore(workbench.layout.store, (state) => state.layout.regions.sidenav.size);\n const sidenavSize = resolveSidenavSize(workbench, persistedSidenavSize);\n const showAttachedSidePanel = hasSidePanel && sidePanelMode === \"attached\";\n // Closed removes the Side Panel's footprint, not its live region. Keeping the\n // portal in the hidden attached slot preserves provider and renderer state.\n const setPanelOpen = workbench.shell.setRegionOpen;\n const regionControls = createWorkbenchRegionControls({\n showSidenav,\n sidenavOpen,\n showSecondaryPanel,\n secondaryPanelOpen,\n hasSidePanel,\n sidePanelMode,\n setPanelOpen,\n });\n\n const sideHeader =\n hasSideHeaderWidgets || hasSidePanelHeader ? (\n <WorkbenchSidePanelRegionHeader workbench={workbench} hasSideHeader={hasSideHeaderWidgets} />\n ) : undefined;\n const activeSidePanelSlot = sidePanelMode === \"floating\" ? floatingSidePanelSlot : attachedSidePanelSlot;\n\n useLayoutEffect(() => {\n const host = sidePanelHostRef.current;\n if (!host) return;\n if (activeSidePanelSlot) {\n if (host.parentNode !== activeSidePanelSlot) activeSidePanelSlot.appendChild(host);\n }\n }, [activeSidePanelSlot]);\n\n const contentWithHeader = (\n <Flex direction=\"column\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <WorkbenchNavChrome workbench={workbench} hasNav={hasNavWidgets} regionControls={regionControls} />\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\">\n <WorkbenchBody workbench={workbench} />\n </Flex>\n </Flex>\n );\n\n const contentWithSidenav = (\n <ResizableSplitLayout\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n resizablePanel={<WorkbenchSidenav workbench={workbench} contextActions={sidenavContextActions} />}\n contentPanel={contentWithHeader}\n collapsed={!showSidenav || !sidenavOpen}\n collapsible={sidenavCollapsible}\n defaultSizePx={sidenavSize.defaultPx}\n minSizePx={sidenavSize.minPx}\n maxSizePx={sidenavSize.maxPx}\n contentMinSizePx={CONTENT_MIN_SIZE_PX}\n resizeLabel=\"Resize sidenav\"\n onSizeChange={(width) => workbench.layout.setRegionSize(\"sidenav\", width)}\n onCollapsedChange={(collapsed) => {\n if (!collapsed || sidenavCollapsible) setPanelOpen(\"sidenav\", !collapsed);\n }}\n />\n );\n\n const contentFrame = (\n <Flex position=\"relative\" h=\"full\" minH=\"0\" minW=\"0\" w=\"full\" bg={workbenchBackgrounds.main} color=\"fg\">\n <WorkbenchActivityBar workbench={workbench} visible={hasActivityBarWidgets} />\n <Flex flex=\"1\" minH=\"0\" minW=\"0\" overflow=\"hidden\" position=\"relative\">\n {contentWithSidenav}\n </Flex>\n <WorkbenchOverlayLayer workbench={workbench} />\n </Flex>\n );\n\n return (\n <WorkbenchThemeScope h=\"full\" minH=\"0\" minW=\"0\" w=\"full\">\n <Flex direction=\"column\" h=\"full\" minH=\"0\" minW=\"0\" position=\"relative\" w=\"full\">\n {titleBar}\n <Flex\n flex=\"1\"\n minH=\"0\"\n minW=\"0\"\n overflow=\"hidden\"\n py=\"panel-gap\"\n pr=\"panel-gap\"\n pl={hasActivityBarWidgets ? \"0\" : \"panel-gap\"}\n >\n <WorkbenchSidePanelBoundary\n workbench={workbench}\n showAttachedSidePanel={showAttachedSidePanel}\n contentFrame={contentFrame}\n sideHeader={sideHeader}\n contentMinSizePx={CONTENT_MIN_SIZE_PX}\n onAttachedSlotChange={setAttachedSidePanelSlot}\n />\n </Flex>\n <WorkbenchStatusBar workbench={workbench} visible={hasStatusWidgets} />\n {hasSidePanel && floatingPanelsAllowed ? (\n <WorkbenchFloatingSidePanel\n workbench={workbench}\n bubbleIcon={sidePanelBubbleIcon}\n onOpen={onOpenSidePanel}\n contentSlotRef={setFloatingSidePanelSlot}\n bottomOffset={hasStatusWidgets ? WORKBENCH_STATUS_BAR_HEIGHT : undefined}\n header={sideHeader}\n />\n ) : null}\n <WorkbenchCommandPalette\n workbench={workbench}\n open={paletteOpen}\n initialQuery={paletteInitialQuery}\n renderParamField={renderParamField}\n onClose={() => workbench.commandPalette.close()}\n />\n <WorkbenchKeybindingDispatcher workbench={workbench} />\n <WorkbenchNotificationHost workbench={workbench} />\n </Flex>\n <WorkbenchSidePanelRegionPortal workbench={workbench} sidePanelHost={sidePanelHostRef.current} />\n </WorkbenchThemeScope>\n );\n};\n\nexport const Workbench = (props: WorkbenchProps) => {\n const projectId = useWorkbenchStore(props.workbench.pages.store, (state) => state.projectId);\n const themePreferences = useWorkbenchThemePreferences(props.workbench);\n const mode = useWorkbenchStore(props.workbench.modes.store, (state) =>\n state.activeModeId ? state.modes[state.activeModeId] : undefined,\n );\n const fileIconThemePreferences = useWorkbenchFileIconThemePreferences(props.workbench);\n\n return (\n <WorkbenchThemeProvider\n themePreferences={themePreferences}\n fileIconThemePreferences={fileIconThemePreferences}\n defaultThemePreference={mode?.defaultTheme}\n preferenceScope={mode?.defaultTheme ? mode.id : undefined}\n >\n <WorkbenchContent key={projectId} {...props} />\n <Toaster />\n </WorkbenchThemeProvider>\n );\n};\n","import { useEffect, useRef } from \"react\";\nimport type { Disposable, WorkbenchCore, WorkbenchModuleContribution } from \"../../core\";\n\nexport interface WorkbenchModuleHostRegistration {\n disposable: Disposable;\n}\n\nexport interface WorkbenchModuleHostProps {\n workbench: WorkbenchCore;\n modules: readonly WorkbenchModuleContribution[];\n}\n\nexport const disposeWorkbenchModuleHostRegistrations = (\n registrations: Map<string, WorkbenchModuleHostRegistration>,\n) => {\n for (const registration of registrations.values()) registration.disposable.dispose();\n registrations.clear();\n};\n\nexport const syncWorkbenchModuleHostRegistrations = (\n workbench: WorkbenchCore,\n registrations: Map<string, WorkbenchModuleHostRegistration>,\n modules: readonly WorkbenchModuleContribution[],\n) => {\n const moduleIds = new Set(modules.map((module) => module.id));\n\n for (const [id, registration] of registrations) {\n if (!moduleIds.has(id)) {\n registration.disposable.dispose();\n registrations.delete(id);\n }\n }\n\n for (const module of modules) {\n if (!registrations.has(module.id)) {\n registrations.set(module.id, { disposable: workbench.registerModule(module) });\n }\n }\n};\n\nexport const WorkbenchModuleHost = (props: WorkbenchModuleHostProps) => {\n const { workbench, modules } = props;\n const registeredWorkbench = useRef(workbench);\n const registrations = useRef(new Map<string, WorkbenchModuleHostRegistration>());\n\n useEffect(() => {\n if (registeredWorkbench.current !== workbench) {\n disposeWorkbenchModuleHostRegistrations(registrations.current);\n registeredWorkbench.current = workbench;\n }\n\n syncWorkbenchModuleHostRegistrations(workbench, registrations.current, modules);\n }, [modules, workbench]);\n\n useEffect(() => () => disposeWorkbenchModuleHostRegistrations(registrations.current), []);\n\n return null;\n};\n"],"names":["getSessionStatus","item","resource","metadata","status","undefined","WorkbenchBreadcrumbIcon","props","$","_c","t0","indicator","type","t1","jsx","SessionIndicator","icon","Text","WorkbenchIcon","WorkbenchBreadcrumbTitle","title","t2","HStack","buildWorkbenchBreadcrumbItems","items","map","url","onClick","WorkbenchBreadcrumbView","workbench","useWorkbenchStore","breadcrumbs","store","_temp","length","Breadcrumb","state","useWorkbenchCompositionPanels","layout","modes","activeModeId","commands","context","main","composition","panelsFor","secondary","side","chakraBackgrounds","sidenav","panel","vscodeColor","token","fallback","replaceAll","workbenchBackgrounds","widget","workbenchRegionBackgrounds","nav","activity","overlay","workbenchCommandPaletteBackground","getWorkbenchRegionBackground","region","humanize","value","spaced","replace","trim","charAt","toUpperCase","slice","isRecord","Array","isArray","isFileUploadValue","file","id","name","isCommandFilesParamValue","refs","every","ref","uploads","createCommandFilesParamValue","input","commandFilesParamValue","raw","multiple","filter","stringifyEditableValue","String","JSON","stringify","toIdentifierPrefix","_match","char","toLowerCase","metadataString","key","resourceContextValue","entry","metadataValue","resourceKey","resourceType","label","dedupeOptions","options","seen","Set","option","has","add","hasCommandParameters","params","listCommandParamEntries","Object","entries","flatMap","param","resolvedFrom","buildCommandParamInitialValues","baseArgs","base","values","hasOwn","defaultValue","isEmptyValue","parseJsonValue","parse","Error","normalizeValue","numberValue","Number","isFinite","split","Boolean","normalizeCommandParamValues","normalized","required","mergeCommandParamArgs","SEARCH_MODE_ID","COMMAND_MODE_ID","THEME_MODE_ID","workbenchPaletteModes","inputPrefix","isThemePaletteView","view","isPickerPaletteView","getPaletteViewMode","getPaletteViewModes","getPaletteInitialActiveIndex","themeInitialActiveIndex","getPaletteInputIcon","mode","Terminal","Search","getPalettePlaceholder","RESOURCE_QUERY_LIMIT","RESOURCE_QUERY_DEBOUNCE_MS","useWorkbenchCommandPaletteResourceEntries","query","open","onClose","refreshToken","commandPaletteResources","Symbol","for","setEntries","useState","cancelled","handle","setTimeout","queryProviders","limit","then","groups","group","results","result","searchText","keywords","join","description","onActivate","Promise","resolve","activate","catch","_temp2","clearTimeout","useEffect","asText","asList","commandParamName","commandParamOptions","JSON_PARAM_TYPES","buildCommandParam","accept","multiSelect","placeholder","searchable","clearable","singleLine","readCommandParamValue","CommandParamField","disabled","onChange","next","nextValue","change","_id","next_0","t3","ParamEditorRow","isFilled","CommandParamsDialog","request","renderParamField","prepareArgs","onRun","setValues","error","setError","submitting","setSubmitting","record","command","args","close","setValue","current","run","preparedArgs","commandId","onArgsChange","nextArgs","caught","message","isValid","Dialog","details","jsxs","event","handleDialogAcceptShortcut","Stack","CloseButton","ScrollArea","px","py","fieldProps","custom","Fragment","Button","submitLabel","getPanelLabel","openPanelWidget","pinned","openCommand","executeCommand","source","widgetResource","resourceKinds","canOpen","openWidget","closable","role","tabRetention","shell","setRegionOpen","sidePanel","getMode","setMode","createWorkbenchPanelWidgetPaletteEntries","panelsByRegion","getPrimaryResource","workbenchPanelRegions","addable","contribution","panelLabel","createResourceEntry","kind","resources","getKind","createWorkbenchResourcePaletteEntries","listResources","getThemeIconName","preference","getThemePreferenceLabel","themePreference","getThemePreferenceEntryIndex","themePreferences","index","findIndex","Math","max","THEME_GROUP_LABELS","light","dark","byModeThenLabel","a","b","localeCompare","createWorkbenchThemePreferencePaletteEntries","setThemePreference","sort","isSelected","rollbackThemePreview","themePreviewRef","preview","baseTheme","getCommandSearchText","category","createShortcutByCommandId","Map","keybindings","listCommandKeybindings","keybinding","getShortcut","binding","PaletteShortcut","getCommandErrorMessage","commandExecutionContext","executePaletteCommand","notifications","show","level","createEntry","action","onRequestParams","shortcutByCommandId","isCommandVisible","shortcut","get","getRecordGroup","getRecordOrder","order","byCommandPaletteGroup","left","right","groupComparison","listCommandRecords","menuPath","listMenuItems","matches","when","getCommand","listCommands","createWorkbenchCommandPaletteEntries","WorkbenchCommandPalette","workbenchCommandPaletteMenuPath","initialQuery","useThemePreference","commandPalette","useRef","paramsRequest","liveQuery","setLiveQuery","commandPaletteResourceEntries","compositionPanels","closePalette","exitPickerView","commitThemePreview","commandEntries","requestParams","resourceEntries","themeEntries","panelWidgetEntries","isThemeView","initialActiveIndex","activeViewMode","activeViewModes","Box","position","inset","alignItems","justifyContent","h","minH","padding","w","background","Palette","themeEntry","ctx","setQuery","setActiveIndex","prepareCommandArgs","clearParams","WorkbenchFocusRegion","boxProps","children","activeRegion","focus","element","contains","document","activeElement","preventScroll","currentTarget","target","setActiveRegion","menuPathKey","path","workbenchResourceMetadataContextKeyPrefix","workbenchResourceMetadataContextKey","isWorkbenchResourceContextKey","workbenchResourceTypeContextKey","workbenchResourceIdContextKey","startsWith","omitWorkbenchResourceContextValues","resolveContextValues","contextValues","createWorkbenchResourceContextValues","listWorkbenchMenuItemsFromState","itemsByPath","leftOrder","rightOrder","byContributionPriority","matchesContextExpression","handler","isVisible","iconSrc","overflowLabel","readOnly","isEnabled","listWorkbenchMenuItems","menuStore","getState","isKernelAction","isOverflowAction","withLeadingSeparator","enabled","first","rest","separatorBefore","resolveOverflowItems","regularItems","kernelItems","resolveWorkbenchHeaderActionGroups","inlineItems","overflowItems","resolveWorkbenchHeaderOverflowLabel","find","WorkbenchInlineHeaderAction","controlSize","onSelect","IconButton","Tooltip","WorkbenchHeaderActions","_temp3","_temp4","T0","t4","t5","t6","bb0","t7","_temp5","t8","item_0","Menu","Portal","item_1","ListRow","state_0","state_1","state_2","getAnchorResource","useTanStackWorkbenchHotkeys","registrations","hotkeys","ignoreInputs","preventDefault","stopPropagation","useHotkeys","registration","hotkey","callback","execute","keyAliases","alt","cmd","ctrl","control","meta","mod","shift","normalizeWorkbenchKeybindingStep","part","trimmed","alias","normalizeWorkbenchKeybinding","steps","getKeybindingSteps","createWorkbenchHotkeyRegistrations","commandIds","allowedCommandIds","listActiveKeybindings","isCommandEnabled","navigation","openTarget","WorkbenchKeybindingDispatcher","setRegistrations","refresh","subscriptions","subscribe","unsubscribe","commandContextValues","snapshot","isRegisteredCommandVisible","executeTreeAction","resolvedArgs","runTreeAction","onCommandError","resolveTreeActionCommand","isTreeActionVisible","isTreeActionEnabled","createMenuIcon","display","width","height","objectFit","createMenuEndContent","external","isKernelMenuAction","createTreeMenuItemGroups","shortcuts","k","sourceCommandId","endContent","onAction","push","createTreeActionMenuItems","actions","createTreeContextMenuItems","actionItems","visibleRegularItems","createTreeActionItems","tooltip","toResourceContextAction","Icon","isDisabled","createWorkbenchResourceActions","resourceContextMenuPath","useWorkbenchResourceActionResolver","executeNotificationAction","WorkbenchNotificationHost","shownNotificationIds","showNotification","notification","toastAction","toastOptions","onStatusChange","dismiss","toaster","update","create","notification_0","listNotifications","subscription","delete","dispose","clear","useWorkbenchLocationResource","pages","useWorkbenchActiveModeId","location","retainViewPlacements","previous","registeredViews","retained","placement","viewId","widgetId","existing","unchanged","keys","Reflect","set","useRetainedViewPlacements","views","setPrevious","placements","WorkbenchWidgetFallback","Center","WorkbenchRenderedWidgetFrame","noopRefresh","toHostedPanel","contributionId","rendererId","toPanelContribution","WorkbenchWidgetHost","getWidget","getView","getWorkbenchRenderers","renderer","renderers","getRenderer","refreshKeys","instance","toPanelInstance","render","t9","useModeChrome","chrome","ModeChromeView","horizontalScrollRegions","panelMenuRegionIds","workbenchPanelMenuRegions","regions","sidePanelRegionIds","verticalContentProps","flexDirection","horizontalContentProps","getActivePlacement","widgets","activeWidgetId","resolveRenderedRegionPlacements","activePlacement","mountStrategy","resolveRegionPlacementRenderState","active","additive","pointerEvents","visibility","createPlaceholderPlacement","WorkbenchRegionPlacement","globalActiveWidgetId","visible","renderState","overlaysActivePlacement","flex","activatePanel","activatePlacement","WorkbenchRegion","transparent","locationResource","modeId","currentRegionState","registeredWidgets","activeSubPanel","getActiveWorkbenchSubPanel","getWorkbenchPanelForMenuRegion","ignoreOwnerResourceKey","activeLocationPanel","getActiveWorkbenchLocationPanel","regionState","matchesWorkbenchModeEligibility","isWorkbenchPanelPlacementVisible","matchesWorkbenchPanelMenuOwner","locationPanel","subPanel","getPlaceholder","placement_0","renderedPlacements","retainedPlacements","visibleIds","scrollsHorizontally","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","renderedPlacement","entry_0","t20","Flex","WorkbenchPanelAddMenu","panels","triggerRef","openPanel","PANEL_HEADER_CONTROL_SIZE","trigger","getAnchorElement","panel_0","toTabKey","regionId","suppressesSidenavTabStrip","_placements","resolveTabIconName","resourceKindIcon","resourceIcon","resolveDisplayedActiveWidgetId","visiblePlacements","some","isWorkbenchPanelRegion","panelRegion","shouldShowRegionTabs","alwaysShowTabs","shouldShowPanelHeader","hasTabs","hasPanelMenus","hasHeaderActions","isPlacementEligibleForRegion","getActiveModeId","ignoreResourceLocation","getLayout","useWorkbenchRegionTabsState","visibilityStorageKey","layoutState","tabStore","useTabVisibilityStore","subPanelPlacements","tabOverrides","visibleSubPanels","filterVisibleTabs","_temp6","visibleSubPanelIds","eligibleSubPanels","leadingItems","placement_2","workbenchRegionTabLeadingMenuPath","getRegionSettings","showTabs","hasActions","reset","toggleTab","useWorkbenchPanelHeaderVisible","_temp7","menuRegions","menuRegion","useWorkbenchRegionTabsVisible","state_3","placement_1","useTabSnapshot","tab","getSnapshot","setSnapshot","useRegionTabBehavior","tabSnapshot","nextWidgetId","previousWidgetId","sortable","isPreview","menu","hasCustomMenu","hasContextMenu","sortableState","useSortable","openMenu","setOpenMenu","x","y","anchor","setAnchor","rect","getBoundingClientRect","openTabMenu","event_0","openCustomMenu","event_1","openContextMenu","menu_0","setMenuOpen","event_2","altKey","reorderPanel","beforeWidgetId","afterWidgetId","reorderWithKeyboard","WorkbenchRegionTabMenuSurface","mainAxis","getAnchorRect","offset","WorkbenchRegionTabContextMenu","placementIdentity","pinPlacement","updatePanel","strategy","WorkbenchRegionTabLabel","color","activateTabAction","WorkbenchStructuredTabMenu","groupIndex","rows","row","iconColor","selected","WorkbenchRegionTabCloseButton","isActive","opacity","bg","identity","closePlacement","closePanel","WorkbenchRegionTabMenus","behavior","open_0","WorkbenchRegionTab","labelId","isDragging","listeners","setNodeRef","transform","transition","menuOpen","CSS","Transform","toString","Tabs","SortableRegionTabList","leadingActions","activationConstraint","distance","sensors","useSensors","useSensor","PointerSensor","T1","T2","reorderable","over","activeIndex","overIndex","reorderWidget","DndContext","closestCenter","SortableContext","horizontalListSortingStrategy","List","placement_3","reorderableIndex","candidate","resolvePlacementIcon","iconName","WorkbenchRegionTabs","getKey","viewport","setViewport","hiddenByDefault","menuActions","buildTabVisibilityMenuActions","onToggleTab","onResetAll","visibleIcon","hiddenIcon","resetIcon","hasVisibilityMenu","Element","closest","openVisibilityMenu","onWheel","deltaY","scrollWidth","clientWidth","scrollLeft","addEventListener","passive","removeEventListener","onSelectLeadingItem","setRegionActiveWidget","PANEL_HEADER_TAB_SIZE","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","details_0","t31","Root","resolveDataTableRendererColumns","contributionColumns","columns","firstRow","buildDataTableRendererData","rowByData","WeakMap","data","fromEntries","column","resolveDataTableRendererSelectionActions","destructive","rendererRow","resolveDataTableRendererResourceActions","resolveResourceActions","_context","resolveDataTableRendererStorageKey","instanceId","initialResult","lastResults","resultCacheKey","WorkbenchDataTableView","cacheKey","setResult","loading","setLoading","requestRef","runQuery","requestId","executeQuery","refreshSubscription","onDidRefreshDataTableRenderer","dataTableRendererId","model","labels","descriptions","icons","_temp8","stats","_temp9","_temp0","rowActions","selectionActions","data_0","row_0","onRowActivate","_temp1","openRow","_temp10","_temp11","skeletonColumns","DataTableSkeleton","emptyTitle","emptyDescription","EmptyState","data_1","_temp12","_temp13","data_2","data_3","initialPageSize","pageSizeOptions","selectionMode","DataTable","column_0","column_1","column_2","column_3","column_4","column_5","stat","column_6","column_7","column_8","column_9","hidden","column_10","column_11","column_12","BOOLEAN_OPTIONS","at","toOptions","toParam","schema","default","enum","preferenceSchemaToParams","paramValueToPreference","toName","WorkbenchPreferencesForm","preferences","names","resolveScopeId","staged","setStaged","formKey","setFormKey","scope","scopeId","scopeRef","getSchema","getValue","schemaByName","name_0","schema_0","persist","value_0","handleChange","name_1","value_1","save","discard","hasStaged","ParamEditor","key_0","activeNodeIds","ids","uniqueIds","resolveTreeNodeResourceKey","node","listTreeNodes","nodes","childrenByNodeId","listSectionNodes","sections","section","resolveActiveResourceNodeIds","resourceKeys","findSectionNode","nodeId","filterTreeListSelection","selection","pageRefsEqual","extensionId","targetMatchesPage","activePage","activeResource","targets","page","resolveActivePageNodeIds","resolveTreeListSelection","activeNodeId","activeLocation","selectedNodeId","declaredSelection","activeResourceKeys","getWorkbenchSelectionResourceKeys","selectedResourceKey","selectedNode","includes","activeResourceNodeId","activePageNodeId","canVirtualizeTreeNode","inlineInput","isContainer","canVirtualizeTreeSections","findNode","child","findNodeInSections","wrapTreeNodeIcon","iconTooltip","resolveTreeNodeIcon","iconElement","resolveTreeNodeNavigationIntent","payload","resolveTreeNodeResource","renderShortcutEndContent","resolveTreeNodeEndContent","additions","diffAdditions","deletions","diffDeletions","DiffBubble","toTreeListSectionEmptyNode","emptyState","rowVariant","toTreeListNode","navigationIntent","commandContext","contextMenuItems","contextMenuActions","contextMenuPath","menuItems","moveScope","showContextMenuTrigger","canHide","canReorder","canDrag","canDrop","menuPlacement","collapsible","isNavigable","toTreeListSection","emptyNode","TreeParamsDialog","TREE_SKELETON_WIDTHS","TreeViewSkeleton","TreeViewBody","moduleLoading","backgroundContextActions","draggable","customizationAvailable","expandedNodeIds","expandedSectionIds","scrollRef","onToggleSection","onToggleNode","onReorderSections","onReorderNodes","canMove","onMoveNode","onNavigate","TreeList","Skeleton","createMoveTreeNode","moveNode","sourceNodeId","targetNodeId","trees","getTreeState","setSelectedNode","onError","shouldSelectTreeNodeForNavigationTarget","TreeViewSearch","Header","InputGroup","Input","isUnregisteredTreeError","treeId","getTreeRenderer","header","body","footer","loadExpandedTreeChildren","expanded","visited","loadNodes","all","getChildren","expandDefaultTreeSections","tree","sectionId","defaultExpandedSectionIds","setSectionExpanded","loadTreeData","getHeader","getBody","getFooter","useTreeData","treeViewId","setData","setChildrenByNodeId","loadRevisionRef","loadTree","loadRevision","treeStillRegistered","loadError","disposable","onDidRefresh","toStringLabel","isCustomizableNode","visibilityContextIcon","effective","buildNodeVisibilityContextMenuItem","nodeOverrides","resolveVisibility","existingItems","addRegionNodeVisibilityContextMenuItems","changed","addSectionNodeVisibilityContextMenuItems","useTreeViewCustomization","storageKey","sectionOverrides","useTreeListVisibilityStore","toggleSection","toggleNode","resetVisibility","sectionOrder","useTreeListOrderStore","nodeOrderBySection","sectionSlotById","setSectionOrder","setNodeOrder","setSectionSlot","resetOrder","defaultSlotBySectionId","orderedFooterSections","orderedHeaderSections","orderedSections","visibleFooterSections","visibleHeaderSections","visibleSections","footerSections","headerSections","visibilityActions","orderedSectionsBySlot","content","orderedAllSections","applyTreeListOrder","section_2","slot","includeNodeContextMenus","suppressNodeContextMenus","contentSections","filterVisibleSections","buildTreeVisibilityMenuActions","_temp15","_temp17","_temp19","customizationRevision","slot_0","nextSectionIds","idsBySlot","_temp20","_temp21","_temp22","nextSectionIds_0","sourceSectionId","destinationSectionId","destinationSlot","onMoveSection","state_4","state_5","state_6","state_7","state_8","state_9","state_10","section_0","section_1","_temp14","section_3","_temp16","node_0","section_4","_temp18","node_1","section_5","section_6","section_7","section_8","EMPTY_TREE_STATE","resolveActivePlacement","resolveTreeActiveResource","useSidenavContextActions","revision","actionsRef","navigateTreeNode","intent","onOpenResourceError","createToggleTreeNode","setNodeExpanded","WorkbenchTreeView","onSidenavContextActionsChange","treeRenderer","setFilter","treeState","treeStore","statesByTreeId","projectId","setParamsRequest","rawHeaderSections","rawSections","adapterContext","rawFooterSections","navigationContext","bodyActiveNodeId","headerActiveNodeId","activeNodeSelection","footerActiveNodeId","searchPlaceholder","style","overflowX","minWidth","minHeight","nextSectionIds_1","TreeListDragProvider","useSettingsRevision","settings","listener","useSyncExternalStore","Centered","ScrollableSettingsContent","SettingsViewContent","panelId","CollectionItemView","itemId","resolveCollectionItem","setState","alive","Spinner","SettingsSurfacePanel","getPanel","p","gap","SettingsOverlay","navTreeId","ResizableSplitLayout","SETTINGS_RESOURCE_KIND","WORKBENCH_SETTINGS_OPEN_COMMAND_ID","settingsPanelResource","settingsItemResource","isSettingsScopeVisible","hasProjectScope","FALLBACK_SECTION_ID","toTreeActions","collectionItemNode","itemLabel","itemIcon","orderGroupKeys","indexOf","POSITIVE_INFINITY","collectionChildren","groupBy","byKey","list","panelToNode","buildSettingsTreeBody","matchesWhen","listSections","sectionsById","listPanels","bySection","renderOrder","sectionPanels","WORKBENCH_SETTINGS_WIDGET_ID","WORKBENCH_SETTINGS_NAV_WIDGET_ID","WORKBENCH_SETTINGS_PANEL_WIDGET_ID","WIDGET_ID","openSettings","requested","requestedPanel","overlays","openOverlay","createWorkbenchSettingsModule","registerView","registerOverlay","config","size","scrollBehavior","contentHeight","contentMaxWidth","contentWidth","closeTriggerTop","closeOnInteractOutside","registerCommand","standardResourceIcons","refreshNavigation","refreshView","unsubscribeSettings","unsubscribeContext","resolvePanelCollapsible","getRegionCollapsible","PANEL_CONTENT_MIN_SIZE_PX","PANEL_MENU_RESIZE_HANDLE_SIZE_PX","PANEL_MENU_COLLAPSE_THRESHOLD_PX","shouldCollapseWorkbenchPanelMenus","panelWidth","canAttachWorkbenchPanelMenu","menuMinSizes","attachedMenuMinSizes","targetMenuMinSize","requiredWidth","reduce","total","PANEL_MENU_SIZE","defaultPx","minPx","maxPx","panelLabels","resolveRegionSize","regionSize","getWorkbenchPanelMenuLabel","useWorkbenchPanelMenu","responsiveCollapsed","panelStateKey","openByMenuId","panelMenuState","getRegionSize","setOpen","collapsed","onOpen","onCollapsedChange","WorkbenchPanelMenu","AttachedMenu","addPanelMenu","setRegionSize","WorkbenchPanelMenuLayout","useWorkbenchPanelWidth","withRight","setWidth","querySelector","measure","observer","ResizeObserver","observe","disconnect","WorkbenchPanelMenuOpener","canAttach","WorkbenchPanelMenuOpeners","closedMenus","view_0","candidate_0","useWorkbenchModeRegionSettings","useShallow","floatingPanelBottom","bottomOffset","launcherBottom","WorkbenchSidePanelTitle","WorkbenchSidePanelHeader","WorkbenchAttachedSidePanel","contentSlotRef","canFloat","showHeader","Minimize2","AttachedPanel","WorkbenchFloatingSidePanel","bubbleIcon","bottom","MessageCircle","BubbleButton","BubblePanel","terminalPlacementBindingId","workspacePathFromResource","workspacePath","withTerminalRequestDefaults","cwd","createControllerTerminalBridge","terminal","openSession","sessionId","bindingId","getBindingId","getResource","getTitle","write","resize","cols","kill","signal","onData","onExit","WorkbenchTerminalPanel","placementRef","bridge","getPersistenceScope","setSessionId","processTitle","sessionsById","updateShellPlacement","shellPlacements","updatePlacement","currentPlacement","isAvailable","test","WORKBENCH_TERMINAL_WIDGET_ID","WORKBENCH_TERMINAL_OPEN_COMMAND_ID","WORKBENCH_TERMINAL_PANEL_SIZE","terminalInstanceIds","listPanelInstances","watchClosedTerminalPlacements","changingScope","willChangeScope","onWillChangePersistenceScope","didChangeScope","onDidChangePersistenceScope","unsubscribeLayout","previousState","currentIds","previousIds","killBinding","terminalTitlePattern","nextTerminalIndexes","getInitialTerminalIndex","terminalPlacements","titleIndexes","exec","parseInt","getNextTerminalTitle","nextIndex","hasWorkspacePath","getTerminalResource","getActiveResource","primaryResource","openWorkbenchTerminal","reveal","workspace","padStart","globalThis","crypto","randomUUID","openPlacement","placementId","instanceKey","createWorkbenchTerminalModule","registerPlacement","kinds","cardinality","_args","useWorkbenchThemePreferences","contributed","themes","defaultThemePreferences","WorkbenchThemeProviderContext","createContext","WorkbenchThemeProvider","initialThemePreference","fileIconThemePreferences","useContext","ChakraProvider","psTheme","FileIconThemePreferenceProvider","defaultThemePreference","preferenceScope","ThemePreferenceProvider","WorkbenchThemeScope","stringValue","booleanValue","resolveOverlayConfig","overlayConfig","closeOnEscape","modal","trapFocus","motionPreset","contentMaxHeight","contentMinHeight","resolveOverlayDialogConfig","closeable","resolveOverlayDialogRenderState","exitingPlacement","WorkbenchOverlayFallback","WorkbenchOverlayLayer","overlayRegion","setExitingPlacement","dialogRootConfig","canCloseOverlay","closeLabel","handleOpenChange","handleExitComplete","handleInteractOutside","detail","originalEvent","WorkbenchBreadcrumbResourceActions","resolveActions","ResourceActionMenu","WorkbenchRegionControl","onToggle","WorkbenchNavigationControls","regionControls","history","pageLocations","historyStore","canGoBack","goBack","canGoForward","goForward","WorkbenchRegionControls","controls","WorkbenchNavChrome","hasNav","sidenavControls","trailingRegionControls","workbenchTopHeaderLeadingMenuPath","workbenchTopHeaderTrailingMenuPath","control_0","initialState","WorkbenchControlsView","defaultValues","onDidRefreshControlsRenderer","controlsRendererId","updateValue","apply","showFooter","controlValueSchema","values_0","controlId","prev","ControlsContent","installed","WeakSet","installWorkbenchControlsRenderer","setControlsRendererImplementation","getControlsRenderer","createElement","installWorkbenchDataTableRenderer","setDataTableRendererImplementation","getDataTableRenderer","loadWorkbenchFileRendererView","module","WorkbenchFileRendererView","lazy","installWorkbenchFileRenderer","setFileRendererImplementation","fileRendererId","getFileRenderer","Suspense","bindReactKanbanPresentation","createKanbanViewQuerySequencer","latestQueryId","isLatest","queryId","executeKanbanViewQuery","resolveProjectScope","storageScope","favoriteScope","resolveKanbanRendererStorageKey","kanbanRendererId","baseKey","projectScope","kanbanViewScrollContentProps","WorkbenchKanbanViewFrame","usesInternalScroll","noopSubscribe","isKanbanRowResource","useResolvedContributionAttributes","attributes","isAttributesSource","mergeKanbanViewRowActions","resourceActions","contributionActions","resourceActionKeys","resourceCommandIds","WorkbenchKanbanView","defaultActiveViewId","defaultFilters","defaultSettings","defaultViews","filters","activeViewId","useKanbanRendererStore","setRows","querySequencer","onDidRefreshKanbanRenderer","handleOpenRow","getRowContextMenuActions","viewMode","createRow","getBoardColumnConfig","hideToolbar","onAttributeChange","onColumnAction","onCreateRow","onReorder","KanbanRenderer","installWorkbenchKanbanRenderer","setKanbanRendererImplementation","getKanbanRenderer","isSidenavPlacement","viewContextId","installWorkbenchTreeRenderer","installation","setTreeRendererImplementation","useWorkbenchFileIconThemePreferences","fileIconThemes","useWorkbenchRegionContent","modePanel","getWorkbenchModePanelForRegion","isWorkbenchModePanelAvailable","panelAvailable","placeholders","locationScoped","WorkbenchHeaderBorder","getRegionHeaderBorderBottom","useSecondaryPanelView","hasContent","hasHeader","hasPanelHeader","useWorkbenchMainPanels","hasMainHeader","secondaryPanel","WorkbenchSecondaryPanel","hasSecondaryHeader","SECONDARY_PANEL_SIZE","SECONDARY_PANEL_CONTENT_MIN_SIZE_PX","mainHeaderTrailingMenuPath","headerTrailingMenuPath","persistedSize","MainHeaderBar","hasMainContentTabs","WorkbenchBody","modeSettings","persistedSecondarySize","secondaryPanelSize","mainRegion","mainPanelWithMenus","Grid","mainContent","WorkbenchSidenav","contextActions","ResourceContextMenu","WORKBENCH_STATUS_BAR_HEIGHT","WorkbenchStatusBarItems","statusBar","listVisibleItems","WorkbenchActivityBar","WorkbenchStatusBar","ATTACHED_PANEL_DEFAULT_SIZE_PX","ATTACHED_PANEL_MIN_SIZE_PX","WorkbenchSidePanelRegionPortal","sidePanelHost","createPortal","WorkbenchSidePanelRegionHeader","hasSideHeader","WorkbenchAttachedSidePanelLayout","attached","contentPanel","contentMinSizePx","onAttachedSlotChange","onCollapse","interactivePointerTargetSelector","hasClosest","shouldFocusWorkbenchKeyboardFrame","focusWorkbenchKeyboardFrame","WorkbenchKeyboardFrame","useLayoutEffect","WorkbenchSidePanelBoundary","showAttachedSidePanel","contentFrame","sideHeader","SIDENAV_DEFAULT_SIZE_PX","SIDENAV_MIN_SIZE_PX","CONTENT_MIN_SIZE_PX","resolveSidenavSize","createSidePanelHost","host","dataset","workbenchSidePanelHost","useWorkbenchLayoutFlags","statusChrome","statusBarItems","hasNavWidgets","hasActivityBarWidgets","hasSidenavWidgets","hasSecondaryHeaderWidgets","hasSecondaryWidgets","hasSideHeaderWidgets","hasSideWidgets","hasStatusWidgets","createWorkbenchRegionControls","showSidenav","sidenavOpen","setPanelOpen","showSecondaryPanel","secondaryPanelOpen","hasSidePanel","sidePanelMode","WorkbenchContent","sidePanelBubbleIcon","onOpenSidePanel","titleBar","sidenavContextActions","setSidenavContextActions","attachedSidePanelSlot","setAttachedSidePanelSlot","floatingSidePanelSlot","setFloatingSidePanelSlot","sidePanelHostRef","paletteOpen","paletteInitialQuery","hasSecondaryPanelHeader","hasSidePanelHeader","floatingPanelsAllowed","sidenavCollapsible","persistedSidenavSize","sidenavSize","activeSidePanelSlot","parentNode","appendChild","contentWithSidenav","Workbench","defaultTheme","Toaster","disposeWorkbenchModuleHostRegistrations","syncWorkbenchModuleHostRegistrations","modules","moduleIds","registerModule","WorkbenchModuleHost","registeredWorkbench"],"mappings":"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"}
|