@devslab/dds-solid 0.28.0 → 0.29.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","names":["For","Show","createSignal","createUniqueId","onCleanup","onMount","JSX","ConsoleNavItem","id","href","label","badge","active","ConsoleNavGroup","items","ConsoleShellLabels","skip","menuOpen","menuClose","nav","ConsoleHeader","eyebrow","title","actions","Element","ConsoleShellProps","surface","activePath","brand","name","mark","context","value","labels","header","foot","children","isActive","explicit","undefined","segments","split","filter","Boolean","length","startsWith","fillBadgeLabel","template","count","replace","String","ConsoleShell","props","open","setOpen","close","hydrated","setHydrated","onKey","event","KeyboardEvent","key","document","addEventListener","removeEventListener","_$ssr","_tmpl$5","_$ssrHydrationKey","_$ssrAttribute","_$escape","_$createComponent","when","_$memo","_tmpl$","each","row","_tmpl$6","group","groupId","_tmpl$7","item","_tmpl$9","_tmpl$8","_tmpl$2","_tmpl$3","_tmpl$4","Dialog","ArkDialog","useDialog","usePresenceContext","FocusTrap","ariaHidden","createEffect","createMemo","createSignal","createUniqueId","onCleanup","Show","JSX","Dynamic","isServer","Portal","classes","focusable","join","DialogProps","open","defaultOpen","onOpenChange","title","Element","description","children","actions","closeOnEscape","closeOnOutside","class","id","role","contentAs","portal","portalMount","HTMLElement","unstyled","overlayClass","titleClass","descriptionClass","actionsClass","contentProps","Omit","HTMLAttributes","initialFocus","finalFocus","restoreFocus","onEscapeKeyDown","event","KeyboardEvent","additionalFocusContainers","frame","parts","DialogFrameParts","props","generated","panel","setPanel","api","details","closeOnInteractOutside","initialFocusEl","finalFocusEl","modal","trapFocus","preventScroll","persistentElements","filter","element","Boolean","map","ids","content","opener","ownerDocument","activeElement","trap","removeIsolation","ready","setReady","containers","isConnected","defaultView","requestAnimationFrame","document","escapeDeactivates","allowOutsideClick","delayInitialFocus","fallbackFocus","getShadowRoot","undefined","setReturnFocus","activate","targets","updateContainerElements","defer","cancelAnimationFrame","deactivate","returnFocus","cls","base","extra","Content","presence","nativeContent","merge","_$createComponent","_$mergeProps","component","Positioner","asChild","aria-describedby","_$memo","Title","Description","_$ssr","_tmpl$","_$ssrHydrationKey","_$ssrAttribute","_$escape","RootProvider","value","lazyMount","unmountOnExit","when","fallback","mount","RadioGroup","ArkRadioGroup","For","JSX","classes","RadioOption","value","label","Element","disabled","RadioGroupProps","options","defaultValue","onValueChange","name","form","required","class","props","initialValue","_$createComponent","Root","details","children","Label","each","option","Item","ItemHiddenInput","style","ItemText","directionPolicy","icons","DdsIconName","splitProps","JSX","classes","IconProps","Omit","SvgSVGAttributes","SVGSVGElement","name","label","size","directional","Icon","props","local","rest","icon","mirrorInRtl","includes","_$ssrElement","_$mergeProps","class","cssClass","viewBox","width","height","fill","stroke","stroke-width","strokeWidth","role","undefined","aria-label","aria-hidden","_$ssr","_tmpl$2","_$ssrHydrationKey","_$escape","_tmpl$","body","Show","JSX","StatusTone","createStatusPill","config","tones","Record","D","label","domain","value","locale","openDomains","NoInfer","open","Set","StatusPill","props","Element","tone","known","Boolean","resolved","found","Error","text","_$createComponent","when","has","fallback","_$ssr","_tmpl$","_$ssrHydrationKey","_$escape","children","_tmpl$2","_$ssrAttribute","Tabs","ArkTabs","useTabsContext","LocaleProvider","createUniqueId","mergeProps","splitProps","JSX","ParentProps","classes","useDirection","Direction","TabsProps","value","defaultValue","onValueChange","orientation","children","Element","id","dir","activationMode","tabId","panelId","unstyled","asChild","props","HTMLAttributes","HTMLDivElement","generated","root","direction","child","merge","ref","element","undefined","_$createComponent","locale","Root","_$mergeProps","details","lazyMount","unmountOnExit","class","ids","trigger","content","TabList","local","rest","List","TabProps","Omit","ButtonHTMLAttributes","HTMLButtonElement","Tab","Trigger","TabPanelProps","TabPanel","tabs","inactive","style","replace","display","Content","hidden","inert","Toast","ArkToast","Toaster","createToaster","space","createContext","createUniqueId","onCleanup","useContext","JSX","classes","ToastTone","ToastInput","message","Element","tone","duration","ToastRecord","id","ToastApi","show","toast","dismiss","clear","ToastContext","ToastProviderProps","children","defaultDuration","dismissLabel","regionLabel","class","ToastProvider","props","prefix","region","HTMLDivElement","scopedDocument","Document","getRootNode","Proxy","ownerDocument","document","get","target","property","getElementById","value","Reflect","bind","toaster","placement","overlap","gap","offsets","removeDelay","hotkey","max","Number","MAX_SAFE_INTEGER","pauseOnPageIdle","sequence","api","input","create","description","type","Infinity","meta","dds","remove","_$createComponent","Provider","role","aria-label","record","Root","Description","CloseTrigger","_$memo","useToast","context","Error","Tooltip","ArkTooltip","useTooltip","createUniqueId","splitProps","JSX","classes","createControllableSignal","TooltipTriggerProps","Omit","ButtonHTMLAttributes","HTMLButtonElement","onFocus","onBlur","onPointerEnter","onPointerLeave","TooltipProps","content","Element","children","props","open","defaultOpen","onOpenChange","id","class","generated","setOpen","value","defaultValue","onChange","next","api","ids","details","openDelay","closeDelay","_$createComponent","RootProvider","lazyMount","unmountOnExit","_$ssr","_tmpl$","_$ssrHydrationKey","_$ssrAttribute","_$escape","Trigger","asChild","merge","attributes","Positioner","Content"],"sources":["../src/console-shell.tsx","../src/dialog.tsx","../src/radio-group.tsx","../src/icon.tsx","../src/pending-action.ts","../src/status-pill.tsx","../src/tabs.tsx","../src/toast.tsx","../src/tooltip.tsx"],"sourcesContent":["import { For, Show, createSignal, createUniqueId, onCleanup, onMount, type JSX } from \"solid-js\";\n\n/** One item in a nav group's list. `active` is a caller override — pass it\n * only when the generic prefix rule below gets a route wrong. \"Index route\"\n * in that rule means an `href` exactly one path segment deep (e.g.\n * `/dashboard`); a console mounted under a path prefix (so its own root is\n * two or more segments deep) should pass `active` explicitly on that item\n * rather than rely on the generic rule. */\nexport interface ConsoleNavItem {\n id: string;\n href: string;\n label: string;\n badge?: number;\n active?: boolean;\n}\n\nexport interface ConsoleNavGroup {\n label: string;\n items: readonly ConsoleNavItem[];\n}\n\nexport interface ConsoleShellLabels {\n skip: string;\n menuOpen: string;\n menuClose: string;\n /** Accessible name for the rail's `<nav>` landmark (e.g. \"Dashboard\n * navigation\"). Required, not optional: a console page also has the\n * DataTable's pagination `<nav>` (named via its own `labels.nextPage`),\n * and an unnamed landmark next to a named one is a regression a\n * screen-reader user would notice immediately — the rail is the primary\n * nav, so it must never be the anonymous one. */\n nav: string;\n /** Badge accessible name template. `{count}` is substituted with the\n * item's pending count — DDS supplies no words of its own. */\n badge: string;\n}\n\nexport interface ConsoleHeader {\n eyebrow?: string;\n title: string;\n actions?: JSX.Element;\n}\n\nexport interface ConsoleShellProps {\n surface: string;\n activePath: string;\n brand: { href: string; name: string; mark: string };\n /** Lines pinned under the brand — a product's organization, environment,\n * or role context. */\n context?: readonly { label: string; value: string }[];\n nav: readonly ConsoleNavGroup[];\n labels: ConsoleShellLabels;\n header: ConsoleHeader;\n /** Slot for the rail's bottom — DDS must not depend on site-kit, so a\n * theme toggle, locale picker, or sign-out form all arrive as children\n * the product renders itself. */\n foot?: JSX.Element;\n children: JSX.Element;\n}\n\n/* An index route matches exactly; everything else matches by prefix. A caller\n that knows better passes `active` on the item. */\nfunction isActive(activePath: string, href: string, explicit?: boolean): boolean {\n if (explicit !== undefined) return explicit;\n const segments = href.split(\"/\").filter(Boolean);\n if (segments.length <= 1) return activePath === href;\n return activePath === href || activePath.startsWith(`${href}/`);\n}\n\n/** Fills the `{count}` placeholder in a consumer-supplied badge label\n * template. A function replacer, not `template.replace(\"{count}\", value)`\n * — a string replacement value is subject to special\n * `$&`/`$$`/`` $` ``/`$'` patterns. `count` is always a plain digit string\n * today, so this is defensive rather than a live bug, but it is the same\n * class of mistake as dds-table's analogous `sortBy` label fix — no\n * shared helper between the two packages (see that fix's note). */\nfunction fillBadgeLabel(template: string, count: number): string {\n return template.replace(\"{count}\", () => String(count));\n}\n\nexport function ConsoleShell(props: ConsoleShellProps): JSX.Element {\n const [open, setOpen] = createSignal(false);\n const close = () => setOpen(false);\n // Delegated listeners (the rail toggle's onClick among them) attach once\n // Solid finishes hydrating; this flips only then, so a harness can wait\n // for the same readiness signal a real click depends on instead of\n // guessing with a retry. onMount never runs during SSR, so this listener\n // is never attached — and this attribute never rendered — on the server.\n const [hydrated, setHydrated] = createSignal(false);\n onMount(() => {\n setHydrated(true);\n const onKey = (event: KeyboardEvent) => { if (event.key === \"Escape\") close(); };\n document.addEventListener(\"keydown\", onKey);\n onCleanup(() => document.removeEventListener(\"keydown\", onKey));\n });\n\n return (\n <div class=\"dds-console-shell\" data-surface={props.surface} data-hydrated={hydrated() ? \"true\" : undefined}>\n <a class=\"dds-console-skip dds-visually-hidden\" href=\"#dds-console-main\">{props.labels.skip}</a>\n <button\n class=\"dds-console-rail__toggle\"\n type=\"button\"\n data-action=\"toggle-rail\"\n aria-controls=\"dds-console-rail\"\n aria-expanded={open()}\n onClick={() => setOpen(!open())}\n >\n <span aria-hidden=\"true\" />\n <span class=\"dds-visually-hidden\">{open() ? props.labels.menuClose : props.labels.menuOpen}</span>\n </button>\n <div class=\"dds-console-rail__scrim\" data-open={open() ? \"true\" : \"false\"} onClick={close} />\n <aside id=\"dds-console-rail\" class=\"dds-console-rail\" data-open={open() ? \"true\" : \"false\"}>\n {/* No aria-label here: the decorative img (alt=\"\") contributes\n nothing to the accessible name, so it resolves to the visible\n \"{brand.name}\" text alone — the original concatenated a\n hardcoded English word (\"home\") onto this, which is exactly the\n kind of copy this package must not author itself. */}\n <a class=\"dds-console-rail__brand\" href={props.brand.href}>\n <img src={props.brand.mark} alt=\"\" width=\"20\" height=\"20\" />\n <strong>{props.brand.name}</strong>\n </a>\n <Show when={props.context && props.context.length > 0}>\n <dl class=\"dds-console-rail__context\">\n <For each={props.context}>{(row) => <div><dt>{row.label}</dt><dd>{row.value}</dd></div>}</For>\n </dl>\n </Show>\n <nav class=\"dds-console-rail__nav\" aria-label={props.labels.nav}>\n <For each={props.nav}>{(group) => {\n const groupId = `dds-console-group-${createUniqueId()}`;\n return (\n <section class=\"dds-console-rail__group\" aria-labelledby={groupId}>\n <h2 id={groupId} class=\"dds-console-rail__group-label\">{group.label}</h2>\n <ul>\n <For each={group.items}>{(item) => (\n <li>\n <a\n class=\"dds-console-rail__item\"\n data-nav={`${props.surface}.${item.id}`}\n href={item.href}\n aria-current={isActive(props.activePath, item.href, item.active) ? \"page\" : undefined}\n onClick={close}\n >\n <span>{item.label}</span>\n <Show when={item.badge !== undefined && item.badge > 0}>\n <span class=\"dds-console-rail__badge\" aria-label={fillBadgeLabel(props.labels.badge, item.badge!)}>{item.badge}</span>\n </Show>\n </a>\n </li>\n )}</For>\n </ul>\n </section>\n );\n }}</For>\n </nav>\n <Show when={props.foot}>\n <div class=\"dds-console-rail__foot\">{props.foot}</div>\n </Show>\n </aside>\n <main id=\"dds-console-main\" class=\"dds-console-main\" tabIndex={-1}>\n <header class=\"dds-console-page-header\">\n <div class=\"dds-console-page-header__text\">\n <Show when={props.header.eyebrow}>\n <p class=\"dds-console-page-eyebrow\">{props.header.eyebrow}</p>\n </Show>\n <h1>{props.header.title}</h1>\n </div>\n <Show when={props.header.actions}>\n <div class=\"dds-console-page-header__actions\">{props.header.actions}</div>\n </Show>\n </header>\n {props.children}\n </main>\n </div>\n );\n}\n","import { Dialog as ArkDialog, useDialog } from \"@ark-ui/solid/dialog\";\nimport { usePresenceContext } from \"@ark-ui/solid/presence\";\nimport { FocusTrap } from \"@zag-js/focus-trap\";\nimport { ariaHidden } from \"@zag-js/aria-hidden\";\nimport { createEffect, createMemo, createSignal, createUniqueId, onCleanup, Show, type JSX } from \"solid-js\";\nimport { Dynamic, isServer, Portal } from \"solid-js/web\";\nimport { classes } from \"./utils\";\n\nexport const focusable = [\n \"a[href]\", \"button:not([disabled])\", \"input:not([disabled])\",\n \"select:not([disabled])\", \"textarea:not([disabled])\", \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n\nexport interface DialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n title: JSX.Element;\n description?: JSX.Element;\n children: JSX.Element;\n actions?: JSX.Element;\n closeOnEscape?: boolean;\n closeOnOutside?: boolean;\n class?: string;\n id?: string;\n role?: \"dialog\" | \"alertdialog\";\n contentAs?: \"div\" | \"section\";\n portal?: boolean;\n portalMount?: HTMLElement;\n unstyled?: boolean;\n overlayClass?: string;\n titleClass?: string;\n descriptionClass?: string;\n actionsClass?: string;\n contentProps?: Omit<JSX.HTMLAttributes<HTMLElement>, \"children\" | \"class\" | \"id\" | \"role\" | \"ref\">;\n initialFocus?: () => HTMLElement | null | undefined;\n finalFocus?: () => HTMLElement | null | undefined;\n restoreFocus?: boolean;\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n /** Authorized external regions join both the Tab cycle and modal accessibility scope. */\n additionalFocusContainers?: () => readonly (HTMLElement | null | undefined)[];\n /** Customize the inner layout using DDS-owned, already labelled title/description nodes. */\n frame?: (parts: DialogFrameParts) => JSX.Element;\n}\n\nexport interface DialogFrameParts {\n title: JSX.Element;\n description: JSX.Element;\n children: JSX.Element;\n actions: JSX.Element;\n}\n\nexport function Dialog(props: DialogProps) {\n const generated = createUniqueId();\n const id = () => props.id ?? `dds-dialog-${generated}`;\n const [panel, setPanel] = createSignal<HTMLElement>();\n const api = useDialog(() => ({\n id: id(), open: props.open, defaultOpen: props.defaultOpen,\n onOpenChange: (details) => props.onOpenChange?.(details.open),\n closeOnEscape: props.closeOnEscape ?? true,\n closeOnInteractOutside: props.closeOnOutside ?? true,\n onEscapeKeyDown: props.onEscapeKeyDown,\n initialFocusEl: () => props.initialFocus?.() ?? null,\n finalFocusEl: () => props.finalFocus?.() ?? null,\n restoreFocus: props.restoreFocus ?? true,\n // Ark handles ordinary dialogs. A multi-container modal needs a shared\n // Zag trap and isolation target list instead of Ark's single content node.\n modal: !props.additionalFocusContainers,\n trapFocus: !props.additionalFocusContainers,\n preventScroll: true,\n role: props.role ?? \"dialog\",\n persistentElements: isServer ? [] : props.additionalFocusContainers?.().filter((element): element is HTMLElement => Boolean(element)).map(element => () => element),\n ids: { content: id(), title: `${id()}-title`, description: `${id()}-description` },\n }));\n const open = createMemo(() => api().open);\n createEffect(() => {\n const content = panel();\n if (!open() || !props.additionalFocusContainers || !content) return;\n const opener = content.ownerDocument.activeElement;\n let trap: FocusTrap | undefined;\n let removeIsolation: (() => void) | undefined;\n const [ready, setReady] = createSignal(false);\n const containers = () => [content, ...props.additionalFocusContainers!().filter((element): element is HTMLElement => Boolean(element?.isConnected && element.ownerDocument === content.ownerDocument))];\n const frame = content.ownerDocument.defaultView!.requestAnimationFrame(() => {\n trap = new FocusTrap(containers(), {\n document: content.ownerDocument,\n escapeDeactivates: false, allowOutsideClick: true, preventScroll: true,\n delayInitialFocus: false, fallbackFocus: content, getShadowRoot: true,\n initialFocus: () => props.initialFocus?.() ?? undefined,\n setReturnFocus: () => props.finalFocus?.() ?? (opener instanceof HTMLElement && opener.isConnected ? opener : false),\n });\n setReady(true);\n trap.activate();\n });\n createEffect(() => {\n if (!ready()) return;\n const targets = containers();\n trap!.updateContainerElements(targets);\n removeIsolation?.();\n removeIsolation = ariaHidden(targets, { defer: false });\n });\n onCleanup(() => {\n content.ownerDocument.defaultView!.cancelAnimationFrame(frame);\n removeIsolation?.();\n trap?.deactivate({ returnFocus: props.restoreFocus !== false });\n });\n });\n const cls = (base: string, extra?: string) => classes(props.unstyled ? undefined : base, extra);\n const Content = () => {\n const presence = usePresenceContext();\n const nativeContent = (merge: unknown) => <Dynamic component={props.contentAs ?? \"div\"}\n {...(merge as (props: JSX.HTMLAttributes<HTMLElement>) => JSX.HTMLAttributes<HTMLElement>)({})}\n ref={(element: HTMLElement) => {\n // Ark's asChild merger omits refs. Register both its presence node and\n // DDS's shared focus container on the actual native content element.\n presence().ref(element);\n setPanel(element);\n }}\n />;\n return <ArkDialog.Positioner class={cls(\"dds-dialog-overlay\", props.overlayClass)}>\n <ArkDialog.Content {...props.contentProps} ref={setPanel} class={cls(\"dds-dialog\", props.class)}\n {...(props.contentAs ? { asChild: nativeContent } : {})}\n role={props.role ?? \"dialog\"} aria-modal=\"true\" aria-describedby={props.description ? `${id()}-description` : undefined}>\n {(() => {\n const parts: DialogFrameParts = {\n get title() { return <ArkDialog.Title class={cls(\"dds-dialog__title\", props.titleClass)}>{props.title}</ArkDialog.Title>; },\n get description() { return props.description && <ArkDialog.Description class={cls(\"dds-dialog__body\", props.descriptionClass)}>{props.description}</ArkDialog.Description>; },\n get children() { return props.children; },\n get actions() { return props.actions && <div class={cls(\"dds-dialog__actions\", props.actionsClass)}>{props.actions}</div>; },\n };\n return props.frame ? props.frame(parts) : <>{parts.title}{parts.description}{parts.children}{parts.actions}</>;\n })()}\n </ArkDialog.Content>\n </ArkDialog.Positioner>;\n };\n return <ArkDialog.RootProvider value={api} lazyMount unmountOnExit>\n <Show when={props.portal} fallback={<Content />}><Portal {...(props.portalMount ? { mount: props.portalMount } : {})}><Content /></Portal></Show>\n </ArkDialog.RootProvider>;\n}\n","import { RadioGroup as ArkRadioGroup } from \"@ark-ui/solid/radio-group\";\nimport { For, type JSX } from \"solid-js\";\nimport { classes } from \"./utils\";\n\nexport interface RadioOption {\n value: string;\n label: JSX.Element;\n disabled?: boolean;\n}\nexport interface RadioGroupProps {\n options: readonly RadioOption[];\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n name?: string;\n form?: string;\n disabled?: boolean;\n required?: boolean;\n label: JSX.Element;\n class?: string;\n}\n\n/** Grouped radios delegate selection and roving keyboard focus to Ark. */\nexport function RadioGroup(props: RadioGroupProps) {\n const initialValue = props.value ?? props.defaultValue;\n return <ArkRadioGroup.Root\n value={props.value} defaultValue={props.defaultValue}\n name={props.name} form={props.form} disabled={props.disabled} required={props.required}\n onValueChange={(details) => { if (details.value !== null) props.onValueChange?.(details.value); }}\n class={classes(\"dds-radio-group\", props.class)}\n >\n <ArkRadioGroup.Label class=\"dds-field__label\">{props.label}</ArkRadioGroup.Label>\n <For each={props.options}>{(option) => <ArkRadioGroup.Item value={option.value} disabled={option.disabled} class=\"dds-check\">\n <ArkRadioGroup.ItemHiddenInput class=\"dds-check__input\" style={{}}\n ref={(input) => { input.defaultChecked = initialValue === option.value; }} />\n <ArkRadioGroup.ItemText>{option.label}</ArkRadioGroup.ItemText>\n </ArkRadioGroup.Item>}</For>\n </ArkRadioGroup.Root>;\n}\n","import { directionPolicy, icons, type DdsIconName } from \"@devslab/dds-icons\";\nimport { splitProps, type JSX } from \"solid-js\";\n\nimport { classes } from \"./utils\";\n\nexport interface IconProps extends Omit<JSX.SvgSVGAttributes<SVGSVGElement>, \"name\" | \"children\"> {\n name: DdsIconName;\n label?: string;\n size?: number | string;\n directional?: boolean;\n}\n\nexport function Icon(props: IconProps) {\n const [local, rest] = splitProps(props, [\"name\", \"label\", \"size\", \"directional\", \"class\"]);\n const icon = () => icons[local.name];\n const directional = () => local.directional ?? directionPolicy.mirrorInRtl.includes(local.name);\n return (\n <svg\n {...rest}\n class={classes(directional() && directionPolicy.cssClass, local.class)}\n viewBox={icon().viewBox}\n width={local.size ?? 24}\n height={local.size ?? 24}\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width={icon().strokeWidth}\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n role={local.label ? \"img\" : undefined}\n aria-label={local.label}\n aria-hidden={local.label ? undefined : \"true\"}\n >\n {local.label && <title>{local.label}</title>}\n <g innerHTML={icon().body} />\n </svg>\n );\n}\n","import { createSignal, getOwner, onCleanup, type Accessor } from \"solid-js\";\n\n/** Options for one `run` call. */\nexport interface PendingActionRunOptions {\n /**\n * Start even while another action runs: that one is aborted and this one takes its place, so the\n * latest request wins (a list reload after typing, paging or sorting). Without it a second start\n * while one runs is ignored, which is what a button wants.\n */\n replace?: boolean;\n}\n\n/**\n * Which of a screen's actions is running. A screen with several buttons gives each one its own\n * key, so only the button that started the work shows progress, while every other control can\n * still be locked through `busy`. One shared flag for all the buttons spins every one of them.\n */\nexport interface PendingAction<K extends string = string> {\n /** The key of the action now running, or null. */\n readonly current: Accessor<K | null>;\n /** True while any action runs: lock the other controls with it. */\n readonly busy: Accessor<boolean>;\n /** True while `key` is the running action: give that control its progress state. */\n is(key: K): boolean;\n /**\n * Runs `task` as `key` and clears the state when it settles, whether it resolves or throws (the\n * error reaches the caller). While another action runs it does nothing and resolves to undefined,\n * unless `replace` is set. The task receives a signal that aborts when this run stops counting:\n * `reset()`, a run that replaced it, or the owner going away. Check `signal.aborted` after each\n * await before touching the screen, or pass the signal to `fetch`.\n */\n run<T>(key: K, task: (signal: AbortSignal) => T | Promise<T>, options?: PendingActionRunOptions): Promise<T | undefined>;\n /** Stops tracking the running action and aborts its signal, for example when the screen's data was replaced. */\n reset(): void;\n}\n\n/** Tracks the running action of a screen; created in a component, it stops with that component. */\nexport function createPendingAction<K extends string = string>(): PendingAction<K> {\n const [current, setCurrent] = createSignal<K | null>(null);\n let active: AbortController | null = null;\n let disposed = false;\n const stop = () => {\n active?.abort();\n active = null;\n };\n if (getOwner()) onCleanup(() => { disposed = true; stop(); });\n return {\n current,\n busy: () => current() !== null,\n is: (key) => current() === key,\n async run(key, task, options) {\n if (disposed || (active && !options?.replace)) return undefined;\n stop();\n const controller = new AbortController();\n active = controller;\n setCurrent(() => key);\n try {\n return await task(controller.signal);\n } finally {\n if (active === controller) {\n active = null;\n setCurrent(null);\n }\n }\n },\n reset() {\n stop();\n setCurrent(null);\n },\n };\n}\n","import { Show, type JSX } from \"solid-js\";\n\nexport type StatusTone = \"success\" | \"warning\" | \"danger\" | \"info\" | \"brand\" | \"neutral\";\n\n/* The rule, not the vocabulary. A value a CLOSED domain does not know throws:\n that can only mean a schema gained a case the catalog forgot. A value an OPEN\n domain does not know renders as raw text: that is customer data, and it must\n not crash the screen.\n\n `tones` declares which domains exist; `openDomains` only selects among the\n domains `tones` already declared, so it must not itself widen or narrow that\n set. */\nexport function createStatusPill<D extends string>(config: {\n tones: Record<D, Record<string, StatusTone>>;\n label: (domain: D, value: string, locale: string) => string | undefined;\n openDomains?: readonly NoInfer<D>[];\n}) {\n const open = new Set<string>(config.openDomains ?? []);\n return function StatusPill(props: { domain: D; value: string; locale: string }): JSX.Element {\n const tone = () => config.tones[props.domain]?.[props.value];\n const label = () => config.label(props.domain, props.value, props.locale);\n const known = () => Boolean(tone() && label());\n const resolved = () => {\n const found = tone();\n if (!found) throw new Error(`StatusPill: no tone for ${props.domain}.${props.value}`);\n const text = label();\n if (!text) throw new Error(`StatusPill: no label for ${props.domain}.${props.value}`);\n return { tone: found, text };\n };\n return (\n <Show when={known() || !open.has(props.domain)} fallback={<code data-status={`${props.domain}.${props.value}`}>{props.value}</code>}>\n {(() => {\n const value = resolved();\n return (\n <span\n class={value.tone === \"neutral\" ? \"dds-badge\" : `dds-badge dds-badge--${value.tone}`}\n data-status={`${props.domain}.${props.value}`}\n data-tone={value.tone}\n >\n {value.text}\n </span>\n );\n })()}\n </Show>\n );\n };\n}\n","import { Tabs as ArkTabs, useTabsContext } from \"@ark-ui/solid/tabs\";\nimport { LocaleProvider } from \"@ark-ui/solid/locale\";\nimport { createUniqueId, mergeProps, splitProps, type JSX, type ParentProps } from \"solid-js\";\nimport { classes } from \"./utils\";\nimport { useDirection, type Direction } from \"./direction\";\n\nexport interface TabsProps {\n value?: string;\n defaultValue: string;\n onValueChange?: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n children: JSX.Element;\n id?: string;\n dir?: Direction;\n activationMode?: \"automatic\" | \"manual\";\n tabId?: (value: string) => string;\n panelId?: (value: string) => string;\n unstyled?: boolean;\n asChild?: (props: JSX.HTMLAttributes<HTMLDivElement>) => JSX.Element;\n}\n\nexport function Tabs(props: TabsProps) {\n const generated = createUniqueId();\n const id = () => props.id ?? `dds-tabs-${generated}`;\n let root: HTMLDivElement | undefined;\n const direction = useDirection(() => root, () => props.dir);\n const child = props.asChild ? (merge: unknown) => props.asChild!(mergeProps(\n (merge as (props: JSX.HTMLAttributes<HTMLDivElement>) => JSX.HTMLAttributes<HTMLDivElement>)({}),\n { ref: (element: HTMLDivElement) => { root = element; } },\n )) : undefined;\n return <LocaleProvider locale={direction() === \"rtl\" ? \"ar\" : \"en\"}><ArkTabs.Root ref={root}\n id={id()} value={props.value} defaultValue={props.defaultValue}\n orientation={props.orientation ?? \"horizontal\"} activationMode={props.activationMode ?? \"automatic\"}\n onValueChange={(details) => props.onValueChange?.(details.value)}\n lazyMount={false} unmountOnExit={false} class={props.unstyled ? undefined : \"dds-tabs-root\"}\n {...(child ? { asChild: child } : {})}\n ids={{ trigger: (value) => props.tabId?.(value) ?? `${id()}-tab-${value}`, content: (value) => props.panelId?.(value) ?? `${id()}-panel-${value}` }}\n >{props.children}</ArkTabs.Root></LocaleProvider>;\n}\n\nexport function TabList(props: ParentProps<JSX.HTMLAttributes<HTMLDivElement> & { unstyled?: boolean }>) {\n const [local, rest] = splitProps(props, [\"class\", \"children\", \"unstyled\"]);\n return <ArkTabs.List {...rest} class={classes(!local.unstyled && \"dds-tabs\", local.class)}>{local.children}</ArkTabs.List>;\n}\n\nexport interface TabProps extends Omit<JSX.ButtonHTMLAttributes<HTMLButtonElement>, \"value\" | \"class\"> {\n value: string;\n class?: string;\n unstyled?: boolean;\n asChild?: (props: JSX.ButtonHTMLAttributes<HTMLButtonElement>) => JSX.Element;\n}\n\nexport function Tab(props: ParentProps<TabProps>) {\n const [local, rest] = splitProps(props, [\"class\", \"children\", \"value\", \"unstyled\", \"asChild\"]);\n // Ark's factory supplies a merger; DDS exposes native button attributes.\n const child = local.asChild ? (merge: unknown) => local.asChild!(mergeProps(\n (merge as (props: JSX.ButtonHTMLAttributes<HTMLButtonElement>) => JSX.ButtonHTMLAttributes<HTMLButtonElement>)({}),\n { ref: props.ref },\n )) : undefined;\n return <ArkTabs.Trigger {...rest} value={local.value} class={classes(!local.unstyled && \"dds-tab\", local.class)} {...(child ? { asChild: child } : {})}>{local.children}</ArkTabs.Trigger>;\n}\n\nexport interface TabPanelProps extends JSX.HTMLAttributes<HTMLDivElement> { value: string }\n\nexport function TabPanel(props: ParentProps<TabPanelProps>) {\n const [local, rest] = splitProps(props, [\"value\", \"children\", \"style\"]);\n const tabs = useTabsContext();\n const inactive = () => tabs().value !== local.value;\n const style = () => !inactive() ? local.style : typeof local.style === \"string\"\n ? `${local.style.replace(/;+\\s*$/, \"\")};display:none;`\n : { ...local.style, display: \"none\" };\n return <ArkTabs.Content {...rest} value={local.value} style={style()} hidden={inactive()} inert={inactive()}>{local.children}</ArkTabs.Content>;\n}\n","import { Toast as ArkToast, Toaster, createToaster } from \"@ark-ui/solid/toast\";\nimport { space } from \"@devslab/dds-tokens\";\nimport { createContext, createUniqueId, onCleanup, useContext, type JSX } from \"solid-js\";\nimport { classes } from \"./utils\";\n\nexport type ToastTone = \"success\" | \"warning\" | \"danger\" | \"info\";\nexport interface ToastInput { message: JSX.Element; tone?: ToastTone; duration?: number }\nexport interface ToastRecord extends ToastInput { id: string }\nexport interface ToastApi {\n show: (toast: ToastInput) => string;\n dismiss: (id: string) => void;\n clear: () => void;\n}\nconst ToastContext = createContext<ToastApi>();\n\nexport interface ToastProviderProps {\n children: JSX.Element;\n defaultDuration?: number;\n dismissLabel?: string | ((toast: ToastRecord) => string);\n /** Optional localized label for the notification region. */\n regionLabel?: string;\n class?: string;\n}\n\nexport function ToastProvider(props: ToastProviderProps) {\n const prefix = createUniqueId();\n let region: HTMLDivElement | undefined;\n let scopedDocument: Document | undefined;\n // Zag derives group IDs from placement rather than provider identity. Keep\n // each provider's physical ID unique, and scope that one logical lookup.\n const getRootNode = () => scopedDocument ??= new Proxy(region?.ownerDocument ?? document, {\n get(target, property) {\n if (property === \"getElementById\") return (id: string) => id === \"toast-group:bottom-end\" ? region ?? null : target.getElementById(id);\n const value = Reflect.get(target, property, target);\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n });\n const toaster = createToaster({\n placement: \"bottom-end\", overlap: false, gap: space[8],\n // An empty array matches EVERY key in Zag. An impossible physical code\n // disables the global shortcut without stealing application focus.\n offsets: \"var(--dds-space-16)\", removeDelay: 0, hotkey: [\"DDS_NO_HOTKEY\"],\n max: Number.MAX_SAFE_INTEGER, pauseOnPageIdle: true,\n });\n let sequence = 0;\n const api: ToastApi = {\n show(input) {\n const id = `dds-toast-${prefix}-${++sequence}`;\n const duration = input.duration ?? props.defaultDuration ?? 5000;\n toaster.create({\n id, description: input.message, type: input.tone === \"danger\" ? \"error\" : input.tone ?? \"info\",\n duration: duration > 0 ? duration : Infinity,\n meta: { dds: { ...input, id } satisfies ToastRecord },\n });\n return id;\n },\n dismiss: (id) => toaster.remove(id),\n clear: () => toaster.remove(),\n };\n onCleanup(api.clear);\n return <ToastContext.Provider value={api}>\n {props.children}\n <Toaster toaster={toaster} ref={region} getRootNode={getRootNode} id={`dds-toast-region-${prefix}`}\n class={classes(\"dds-toast-region\", props.class)}\n role={props.regionLabel ? \"region\" : \"presentation\"} aria-label={props.regionLabel ?? \"\"}\n >{(toast) => {\n const record = () => toast().meta?.dds as ToastRecord;\n return <ArkToast.Root\n class={classes(\"dds-toast\", `dds-toast--${record().tone ?? \"info\"}`)}\n role={record().tone === \"danger\" ? \"alert\" : \"status\"}\n >\n <ArkToast.Description>{toast().description}</ArkToast.Description>\n {props.dismissLabel && <ArkToast.CloseTrigger\n class=\"dds-iconbtn dds-iconbtn--sm\"\n aria-label={typeof props.dismissLabel === \"function\" ? props.dismissLabel(record()) : props.dismissLabel}\n >×</ArkToast.CloseTrigger>}\n </ArkToast.Root>;\n }}</Toaster>\n </ToastContext.Provider>;\n}\n\nexport function useToast(): ToastApi {\n const context = useContext(ToastContext);\n if (!context) throw new Error(\"useToast must be called inside <ToastProvider>\");\n return context;\n}\n","import { Tooltip as ArkTooltip, useTooltip } from \"@ark-ui/solid/tooltip\";\nimport { createUniqueId, splitProps, type JSX } from \"solid-js\";\nimport { classes } from \"./utils\";\nimport { createControllableSignal } from \"./controllable\";\n\n/** Spread all trigger props onto the focusable trigger element. */\nexport interface TooltipTriggerProps extends Omit<JSX.ButtonHTMLAttributes<HTMLButtonElement>, \"aria-describedby\" | \"onFocus\" | \"onBlur\" | \"onPointerEnter\" | \"onPointerLeave\"> {\n \"aria-describedby\": string;\n onFocus: () => void;\n onBlur: () => void;\n onPointerEnter: () => void;\n onPointerLeave: () => void;\n}\n\nexport interface TooltipProps {\n content: JSX.Element;\n children: (props: TooltipTriggerProps) => JSX.Element;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n id?: string;\n class?: string;\n}\n\nexport function Tooltip(props: TooltipProps) {\n const generated = createUniqueId();\n const id = () => props.id ?? `dds-tooltip-${generated}`;\n const [open, setOpen] = createControllableSignal({\n value: () => props.open, defaultValue: props.defaultOpen ?? false,\n onChange: (next) => props.onOpenChange?.(next),\n });\n const api = useTooltip(() => ({\n id: id(), ids: { content: id() }, open: open(),\n onOpenChange: (details) => setOpen(details.open), openDelay: 0, closeDelay: 0,\n }));\n return <ArkTooltip.RootProvider value={api} lazyMount={false} unmountOnExit={false}>\n <span class={classes(\"dds-tooltip\", props.class)}>\n <ArkTooltip.Trigger asChild={(merge) => {\n const [, attributes] = splitProps(merge(), [\"onFocusIn\", \"onFocusOut\"]);\n return props.children({\n ...attributes, \"aria-describedby\": id(),\n // Preserve DDS's established composable, zero-argument callbacks.\n onFocus: () => api().setOpen(true), onBlur: () => api().setOpen(false),\n onPointerEnter: () => api().setOpen(true), onPointerLeave: () => api().setOpen(false),\n }); }} />\n <ArkTooltip.Positioner>\n <ArkTooltip.Content class=\"dds-tooltip__bubble\">{props.content}</ArkTooltip.Content>\n </ArkTooltip.Positioner>\n </span>\n </ArkTooltip.RootProvider>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DA,SAASqC,SAASV,YAAoBlB,MAAc6B,UAA6B;CAC/E,IAAIA,aAAaC,KAAAA,GAAW,OAAOD;CAEnC,IADiB7B,KAAKgC,MAAM,GAAG,CAAC,CAACC,OAAOC,OACpCH,CAAAA,CAASI,UAAU,GAAG,OAAOjB,eAAelB;CAChD,OAAOkB,eAAelB,QAAQkB,WAAWkB,WAAW,GAAGpC,KAAI,EAAG;AAChE;;;;;;;;AASA,SAASqC,eAAeC,UAAkBC,OAAuB;CAC/D,OAAOD,SAASE,QAAQ,iBAAiBC,OAAOF,KAAK,CAAC;AACxD;AAEA,SAAgBG,aAAaC,OAAuC;CAClE,MAAM,CAACC,MAAMC,WAAWpD,aAAa,KAAK;CAC1C,MAAMqD,cAAcD,QAAQ,KAAK;CAMjC,MAAM,CAACE,UAAUC,eAAevD,aAAa,KAAK;CAClDG,cAAc;EACZoD,YAAY,IAAI;EAChB,MAAMC,SAASC,UAAyB;GAAE,IAAIA,MAAME,QAAQ,UAAUN,MAAM;EAAG;EAC/EO,SAASC,iBAAiB,WAAWL,KAAK;EAC1CtD,gBAAgB0D,SAASE,oBAAoB,WAAWN,KAAK,CAAC;CAChE,CAAC;CAED,OAAAO,IAAAC,SAAAC,gBAAA,GAAAC,aAAA,gBAAAC,OAC+CjB,MAAM1B,SAAO,IAAA,GAAA,KAAA,IAAA0C,aAAA,iBAAiBZ,SAAS,IAAI,SAAMa,OAAG9B,KAAAA,GAAS,IAAA,GAAA,KAAA,GAAA8B,OAC9BjB,MAAMnB,OAAOjB,IAAI,GAAAoD,aAAA,iBAAAC,OAM1EhB,KAAK,GAAC,IAAA,GAAA,KAAA,GAIcA,KAAK,IAACgB,OAAGjB,MAAMnB,OAAOf,SAAS,IAAAmD,OAAGjB,MAAMnB,OAAOhB,QAAQ,GAAAmD,aAAA,aAE5Cf,KAAK,IAAI,SAAS,SAAO,KAAA,GAAAe,aAAA,aACRf,KAAK,IAAI,SAAS,SAAO,KAAA,GAAAe,aAAA,QAAAC,OAM/CjB,MAAMxB,MAAMnB,MAAI,IAAA,GAAA,KAAA,GAAA2D,aAAA,OAAAC,OAC7CjB,MAAMxB,MAAME,MAAI,IAAA,GAAA,KAAA,GAAAuC,OACjBjB,MAAMxB,MAAMC,IAAI,GAAAwC,OAAAC,gBAE1BrE,MAAI;EAAA,IAACsE,OAAI;GAAA,OAAEC,WAAA,CAAA,CAAApB,MAAMrB,OAAO,CAAA,CAAA,KAAIqB,MAAMrB,QAAQa,SAAS;EAAC;EAAA,IAAAR,WAAA;GAAA,OAAA6B,IAAAQ,UAAAN,gBAAA,GAAAE,OAAAC,gBAEhDtE,KAAG;IAAA,IAAC0E,OAAI;KAAA,OAAEtB,MAAMrB;IAAO;IAAAK,WAAIuC,QAAGV,IAAAW,SAAAT,gBAAA,GAAAE,OAAeM,IAAIjE,KAAK,GAAA2D,OAAWM,IAAI3C,KAAK,CAAA;GAAY,CAAA,CAAA,CAAA;EAAA;CAAA,CAAA,CAAA,GAAAoC,aAAA,cAAAC,OAG5CjB,MAAMnB,OAAOd,KAAG,IAAA,GAAA,KAAA,GAAAkD,OAAAC,gBAC5DtE,KAAG;EAAA,IAAC0E,OAAI;GAAA,OAAEtB,MAAMjC;EAAG;EAAAiB,WAAIyC,UAAU;GAChC,MAAMC,UAAU,qBAAqB3E,eAAe;GACpD,OAAA8D,IAAAc,SAAAZ,gBAAA,GAAAC,aAAA,mBAAAC,OAC4DS,SAAO,IAAA,GAAA,KAAA,GAAAV,aAAA,MAAAC,OACvDS,SAAO,IAAA,GAAA,KAAA,GAAAT,OAAyCQ,MAAMnE,KAAK,GAAA2D,OAAAC,gBAEhEtE,KAAG;IAAA,IAAC0E,OAAI;KAAA,OAAEG,MAAM/D;IAAK;IAAAsB,WAAI4C,SAAIf,IAAAgB,SAAAd,gBAAA,GAId,GAAAE,OAAGjB,MAAM1B,SAAO,IAAA,EAAA,GAAA2C,OAAIW,KAAKxE,IAAE,IAAA,KAAE4D,aAAA,QAAAC,OACjCW,KAAKvE,MAAI,IAAA,GAAA,KAAA,IAAA2D,aAAA,gBACD/B,SAASe,MAAMzB,YAAYqD,KAAKvE,MAAMuE,KAAKpE,MAAM,IAAI,SAAMyD,OAAG9B,KAAAA,GAAS,IAAA,GAAA,KAAA,GAAA8B,OAG9EW,KAAKtE,KAAK,GAAA2D,OAAAC,gBAChBrE,MAAI;KAAA,IAACsE,OAAI;MAAA,OAAEC,WAAAQ,KAAKrE,UAAU4B,KAAAA,CAAS,CAAA,CAAA,KAAIyC,KAAKrE,QAAQ;KAAC;KAAA,IAAAyB,WAAA;MAAA,OAAA6B,IAAAiB,SAAAf,gBAAA,GAAAC,aAAA,cAAAC,OACFvB,eAAeM,MAAMnB,OAAOtB,OAAOqE,KAAKrE,KAAM,GAAC,IAAA,GAAA,KAAA,GAAA0D,OAAGW,KAAKrE,KAAK,CAAA;KAAA;IAAA,CAAA,CAAA,CAAA;GAIrH,CAAA,CAAA,CAAA;EAIT;CAAC,CAAA,CAAA,GAAA0D,OAAAC,gBAEFrE,MAAI;EAAA,IAACsE,OAAI;GAAA,OAAEnB,MAAMjB;EAAI;EAAA,IAAAC,WAAA;GAAA,OAAA6B,IAAAkB,WAAAhB,gBAAA,GAAAE,OACiBjB,MAAMjB,IAAI,CAAA;EAAA;CAAA,CAAA,CAAA,GAAAkC,OAAAC,gBAM5CrE,MAAI;EAAA,IAACsE,OAAI;GAAA,OAAEnB,MAAMlB,OAAOb;EAAO;EAAA,IAAAe,WAAA;GAAA,OAAA6B,IAAAmB,SAAAjB,gBAAA,GAAAE,OACOjB,MAAMlB,OAAOb,OAAO,CAAA;EAAA;CAAA,CAAA,CAAA,GAAAgD,OAEtDjB,MAAMlB,OAAOZ,KAAK,GAAA+C,OAAAC,gBAExBrE,MAAI;EAAA,IAACsE,OAAI;GAAA,OAAEnB,MAAMlB,OAAOX;EAAO;EAAA,IAAAa,WAAA;GAAA,OAAA6B,IAAAoB,SAAAlB,gBAAA,GAAAE,OACiBjB,MAAMlB,OAAOX,OAAO,CAAA;EAAA;CAAA,CAAA,CAAA,GAAA8C,OAGtEjB,MAAMhB,QAAQ,CAAA;AAIvB;;;;;;;;ACtKyB;CACvB;CAAW;CAA0B;CACrC;CAA0B;CAA4B;AAAiC,CACxF,CAACoE,KAAK,GAAG;AAyCV,SAAgBlB,OAAOuD,OAAoB;CACzC,MAAMC,YAAY/C,eAAe;CACjC,MAAMsB,WAAWwB,MAAMxB,MAAM,cAAcyB;CAC3C,MAAM,CAACC,OAAOC,YAAYlD,aAA0B;CACpD,MAAMmD,MAAMzD,iBAAiB;EAC3B6B,IAAIA,GAAG;EAAGX,MAAMmC,MAAMnC;EAAMC,aAAakC,MAAMlC;EAC/CC,eAAesC,YAAYL,MAAMjC,eAAesC,QAAQxC,IAAI;EAC5DQ,eAAe2B,MAAM3B,iBAAiB;EACtCiC,wBAAwBN,MAAM1B,kBAAkB;EAChDmB,iBAAiBO,MAAMP;EACvBc,sBAAsBP,MAAMV,eAAe,KAAK;EAChDkB,oBAAoBR,MAAMT,aAAa,KAAK;EAC5CC,cAAcQ,MAAMR,gBAAgB;EAGpCiB,OAAO,CAACT,MAAMJ;EACdc,WAAW,CAACV,MAAMJ;EAClBe,eAAe;EACflC,MAAMuB,MAAMvB,QAAQ;EACpBmC,oBAAoBrD,WAAW,CAAA,IAAKyC,MAAMJ,4BAA4B,CAAC,CAACiB,QAAQC,YAAoCC,QAAQD,OAAO,CAAC,CAAC,CAACE,KAAIF,kBAAiBA,OAAO;EAClKG,KAAK;GAAEC,SAAS1C,GAAG;GAAGR,OAAO,GAAGQ,GAAG,EAAC;GAAUN,aAAa,GAAGM,GAAG,EAAC;EAAe;CACnF,EAAE;CACF,MAAMX,OAAOb,iBAAiBoD,IAAI,CAAC,CAACvC,IAAI;CACxCd,mBAAmB;EACjB,MAAMmE,UAAUhB,MAAM;EACtB,IAAI,CAACrC,KAAK,KAAK,CAACmC,MAAMJ,6BAA6B,CAACsB,SAAS;EAC7D,MAAMC,SAASD,QAAQE,cAAcC;EACrC,IAAIC;EACJ,IAAIC;EACJ,MAAM,CAACC,OAAOC,YAAYxE,aAAa,KAAK;EAC5C,MAAMyE,mBAAmB,CAACR,SAAS,GAAGlB,MAAMJ,0BAA2B,CAAC,CAACiB,QAAQC,YAAoCC,QAAQD,SAASa,eAAeb,QAAQM,kBAAkBF,QAAQE,aAAa,CAAC,CAAC;EACtM,MAAMvB,QAAQqB,QAAQE,cAAcQ,YAAaC,4BAA4B;GAC3EP,OAAO,IAAIzE,UAAU6E,WAAW,GAAG;IACjCI,UAAUZ,QAAQE;IAClBW,mBAAmB;IAAOC,mBAAmB;IAAMrB,eAAe;IAClEsB,mBAAmB;IAAOC,eAAehB;IAASiB,eAAe;IACjE7C,oBAAoBU,MAAMV,eAAe,KAAK8C,KAAAA;IAC9CC,sBAAsBrC,MAAMT,aAAa,MAAM4B,kBAAkBtC,eAAesC,OAAOQ,cAAcR,SAAS;GAChH,CAAC;GACDM,SAAS,IAAI;GACbH,KAAKgB,SAAS;EAChB,CAAC;EACDvF,mBAAmB;GACjB,IAAI,CAACyE,MAAM,GAAG;GACd,MAAMe,UAAUb,WAAW;GAC3BJ,KAAMkB,wBAAwBD,OAAO;GACrChB,kBAAkB;GAClBA,kBAAkBzE,WAAWyF,SAAS,EAAEE,OAAO,MAAM,CAAC;EACxD,CAAC;EACDtF,gBAAgB;GACd+D,QAAQE,cAAcQ,YAAac,qBAAqB7C,KAAK;GAC7D0B,kBAAkB;GAClBD,MAAMqB,WAAW,EAAEC,aAAa5C,MAAMR,iBAAiB,MAAM,CAAC;EAChE,CAAC;CACH,CAAC;CACD,MAAMqD,OAAOC,MAAcC,UAAmBtF,QAAQuC,MAAMlB,WAAWsD,KAAAA,IAAYU,MAAMC,KAAK;CAC9F,MAAMC,gBAAgB;EACHpG,mBAAmB;EACpC,MAAMsG,iBAAiBC,UAAcC,gBAAM9F,SAAO+F,aAAA,EAAA,IAACC,YAAS;GAAA,OAAEtD,MAAMtB,aAAa;EAAK,EAAA,SAC/EyE,MAAsF,CAAC,CAAC,CAAC,CAAA;EAQhG,OAAAC,gBAAQ1G,SAAU6G,YAAU;GAAA,KAAA,WAAA;IAAA,OAAQV,IAAI,sBAAsB7C,MAAMjB,YAAY;GAAC;GAAA,IAAAZ,WAAA;IAAA,OAAAiF,gBAChF1G,SAAUsG,SAAOK,mBAAKrD,MAAMb,cAAY,EAAA,KAAA,WAAA;KAAA,OAAwB0D,IAAI,cAAc7C,MAAMzB,KAAK;IAAC,EAAA,SACxFyB,MAAMtB,YAAY,EAAE8E,SAASN,cAAc,IAAI,CAAC,GAAC;KAAA,IACtDzE,OAAI;MAAA,OAAEuB,MAAMvB,QAAQ;KAAQ;KAAA,cAAA;KAAA,KAAA,sBAAA;MAAA,OAAsCiF,WAAA,CAAA,CAAA1D,MAAM9B,WAAW,CAAA,CAAA,IAAG,GAAGM,GAAG,EAAC,gBAAiB4D,KAAAA;KAAS;KAAA,IAAAjE,WAAA;MAAA,cAC/G;OACN,MAAM2B,QAA0B;QAC9B,IAAI9B,QAAQ;SAAE,OAAAoF,gBAAQ1G,SAAUiH,OAAK;UAAA,KAAA,WAAA;WAAA,OAAQd,IAAI,qBAAqB7C,MAAMhB,UAAU;UAAC;UAAA,IAAAb,WAAA;WAAA,OAAG6B,MAAMhC;UAAK;SAAA,CAAA;QAAqB;QAC1H,IAAIE,cAAc;SAAE,OAAO8B,MAAM9B,eAAWkF,gBAAK1G,SAAUkH,aAAW;UAAA,KAAA,WAAA;WAAA,OAAQf,IAAI,oBAAoB7C,MAAMf,gBAAgB;UAAC;UAAA,IAAAd,WAAA;WAAA,OAAG6B,MAAM9B;UAAW;SAAA,CAAA;QAA2B;QAC5K,IAAIC,WAAW;SAAE,OAAO6B,MAAM7B;QAAU;QACxC,IAAIC,UAAU;SAAE,OAAO4B,MAAM5B,WAAOyF,IAAAC,UAAAC,gBAAA,IAAAC,aAAA,SAAAC,OAAgBpB,IAAI,uBAAuB7C,MAAMd,YAAY,GAAC,IAAA,GAAA,KAAA,GAAA+E,OAAGjE,MAAM5B,OAAO,CAAA;QAAS;OAC7H;OACA,OAAO4B,MAAMH,QAAQG,MAAMH,MAAMC,KAAK,IAAC;QAAMA,MAAM9B;QAAO8B,MAAM5B;QAAa4B,MAAM3B;QAAU2B,MAAM1B;OAAO;MAC5G,EAAA,CAAG;KAAC;IAAA,CAAA,CAAA;GAAA;EAAA,CAAA;CAGR;CACA,OAAAgF,gBAAQ1G,SAAUwH,cAAY;EAACC,OAAO/D;EAAKgE,WAAS;EAACC,eAAa;EAAA,IAAAlG,WAAA;GAAA,OAAAiF,gBAC/DhG,MAAI;IAAA,IAACkH,OAAI;KAAA,OAAEtE,MAAMrB;IAAM;IAAA,IAAE4F,WAAQ;KAAA,OAAAnB,gBAAGJ,SAAO,CAAA,CAAA;IAAA;IAAA,IAAA7E,WAAA;KAAA,OAAAiF,gBAAM5F,QAAM6F,mBAAMrD,MAAMpB,cAAc,EAAE4F,OAAOxE,MAAMpB,YAAY,IAAI,CAAC,GAAC,EAAA,IAAAT,WAAA;MAAA,OAAAiF,gBAAIJ,SAAO,CAAA,CAAA;KAAA,EAAA,CAAA,CAAA;IAAA;GAAA,CAAA;EAAA;CAAA,CAAA;AAElI;;;;ACnHA,SAAgByB,WAAWkB,OAAwB;CAC5BA,MAAMZ,SAASY,MAAMN;CAC1C,OAAAQ,gBAAQnB,aAAcoB,MAAI;EAAA,IACxBf,QAAK;GAAA,OAAEY,MAAMZ;EAAK;EAAA,IAAEM,eAAY;GAAA,OAAEM,MAAMN;EAAY;EAAA,IACpDE,OAAI;GAAA,OAAEI,MAAMJ;EAAI;EAAA,IAAEC,OAAI;GAAA,OAAEG,MAAMH;EAAI;EAAA,IAAEN,WAAQ;GAAA,OAAES,MAAMT;EAAQ;EAAA,IAAEO,WAAQ;GAAA,OAAEE,MAAMF;EAAQ;EACtFH,gBAAgBS,YAAY;GAAE,IAAIA,QAAQhB,UAAU,MAAMY,MAAML,gBAAgBS,QAAQhB,KAAK;EAAG;EAAC,KAAA,WAAA;GAAA,OAC1FF,QAAQ,mBAAmBc,MAAMD,KAAK;EAAC;EAAA,IAAAM,WAAA;GAAA,OAAA,CAAAH,gBAE7CnB,aAAcuB,OAAK;IAAA,SAAA;IAAA,IAAAD,WAAA;KAAA,OAA2BL,MAAMX;IAAK;GAAA,CAAA,GAAAa,gBACzDlB,KAAG;IAAA,IAACuB,OAAI;KAAA,OAAEP,MAAMP;IAAO;IAAAY,WAAIG,WAAMN,gBAAMnB,aAAc0B,MAAI;KAAA,IAACrB,QAAK;MAAA,OAAEoB,OAAOpB;KAAK;KAAA,IAAEG,WAAQ;MAAA,OAAEiB,OAAOjB;KAAQ;KAAA,SAAA;KAAA,IAAAc,WAAA;MAAA,OAAA,CAAAH,gBACtGnB,aAAc2B,iBAAe;OAAA,SAAA;OAA0BC,OAAO,CAAC;MAAC,CAAA,GAAAT,gBAEhEnB,aAAc6B,UAAQ,EAAA,IAAAP,WAAA;OAAA,OAAEG,OAAOnB;MAAK,EAAA,CAAA,CAAA;KAAA;IAAA,CAAA;GAClB,CAAA,CAAA;EAAA;CAAA,CAAA;AAEzB;;;;;;;;;AC1BA,SAAgBsC,KAAKC,OAAkB;CACrC,MAAM,CAACC,OAAOC,QAAQd,WAAWY,OAAO;EAAC;EAAQ;EAAS;EAAQ;EAAe;CAAO,CAAC;CACzF,MAAMG,aAAajB,MAAMe,MAAMN;CAC/B,MAAMG,oBAAoBG,MAAMH,eAAeb,gBAAgBmB,YAAYC,SAASJ,MAAMN,IAAI;CAC9F,OAAAW,WAAA,OAAAC,aAEQL,MAAI;EAAA,KAAA,WAAA;GAAA,OACDZ,QAAQQ,YAAY,KAAKb,gBAAgBwB,UAAUR,MAAMO,KAAK;EAAC;EAAA,IACtEE,UAAO;GAAA,OAAEP,KAAK,CAAC,CAACO;EAAO;EAAA,IACvBC,QAAK;GAAA,OAAEV,MAAMJ,QAAQ;EAAE;EAAA,IACvBe,SAAM;GAAA,OAAEX,MAAMJ,QAAQ;EAAE;EACxBgB,MAAK;EACLC,QAAO;EAAc,KAAA,kBAAA;GAAA,OACPX,KAAK,CAAC,CAACa;EAAW;EAAA,kBACjB;EAAO,mBACN;EAAO,IACvBC,OAAI;GAAA,OAAEhB,MAAML,QAAQ,QAAQsB,KAAAA;EAAS;EAAA,KAAA,gBAAA;GAAA,OACzBjB,MAAML;EAAK;EAAA,KAAA,iBAAA;GAAA,OACVK,MAAML,QAAQsB,KAAAA,IAAY;EAAM;CAAA,CAAA,SAAA;EAAA;EAE5CjB,MAAML,SAAKyB,IAAAC,WAAAC,gBAAA,GAAAC,OAAYvB,MAAML,KAAK,CAAA;EAAS;EAAAyB,IAAAI,UAC9BtB,KAAK,CAAC,CAACuB,IAAI;CAAA,GAAA,IAAA;AAG/B;;;;ACCA,SAAgB,sBAAmE;CACjF,MAAM,CAAC,SAAS,cAAc,aAAuB,IAAI;CACzD,IAAI,SAAiC;CACrC,IAAI,WAAW;CACf,MAAM,aAAa;EACjB,QAAQ,MAAM;EACd,SAAS;CACX;CACA,IAAI,SAAS,GAAG,gBAAgB;EAAE,WAAW;EAAM,KAAK;CAAG,CAAC;CAC5D,OAAO;EACL;EACA,YAAY,QAAQ,MAAM;EAC1B,KAAK,QAAQ,QAAQ,MAAM;EAC3B,MAAM,IAAI,KAAK,MAAM,SAAS;GAC5B,IAAI,YAAa,UAAU,CAAC,SAAS,SAAU,OAAO,KAAA;GACtD,KAAK;GACL,MAAM,aAAa,IAAI,gBAAgB;GACvC,SAAS;GACT,iBAAiB,GAAG;GACpB,IAAI;IACF,OAAO,MAAM,KAAK,WAAW,MAAM;GACrC,UAAU;IACR,IAAI,WAAW,YAAY;KACzB,SAAS;KACT,WAAW,IAAI;IACjB;GACF;EACF;EACA,QAAQ;GACN,KAAK;GACL,WAAW,IAAI;EACjB;CACF;AACF;;;;;;;;;;;;;;;;AC1DA,SAAgBI,iBAAmCC,QAIhD;CACD,MAAMU,OAAO,IAAIC,IAAYX,OAAOQ,eAAe,CAAA,CAAE;CACrD,OAAO,SAASI,WAAWC,OAAkE;EAC3F,MAAME,aAAaf,OAAOC,MAAMY,MAAMR,OAAO,GAAGQ,MAAMP;EACtD,MAAMF,cAAcJ,OAAOI,MAAMS,MAAMR,QAAQQ,MAAMP,OAAOO,MAAMN,MAAM;EACxE,MAAMS,cAAcC,QAAQF,KAAK,KAAKX,MAAM,CAAC;EAC7C,MAAMc,iBAAiB;GACrB,MAAMC,QAAQJ,KAAK;GACnB,IAAI,CAACI,OAAO,MAAM,IAAIC,MAAM,2BAA2BP,MAAMR,OAAM,GAAIQ,MAAMP,OAAO;GACpF,MAAMe,OAAOjB,MAAM;GACnB,IAAI,CAACiB,MAAM,MAAM,IAAID,MAAM,4BAA4BP,MAAMR,OAAM,GAAIQ,MAAMP,OAAO;GACpF,OAAO;IAAES,MAAMI;IAAOE;GAAK;EAC7B;EACA,OAAAC,gBACG1B,MAAI;GAAA,IAAC2B,OAAI;IAAA,OAAEP,MAAM,KAAK,CAACN,KAAKc,IAAIX,MAAMR,MAAM;GAAC;GAAA,IAAEoB,WAAQ;IAAA,OAAAC,IAAAC,UAAAC,gBAAA,GAAqB,GAAAC,OAAGhB,MAAMR,QAAM,IAAA,EAAA,GAAAwB,OAAIhB,MAAMP,OAAK,IAAA,KAAEuB,OAAGhB,MAAMP,KAAK,CAAA;GAAA;GAAA,IAAAwB,WAAA;IAAA,cACjH;KACN,MAAMxB,QAAQY,SAAS;KACvB,OAAAQ,IAAAK,SAAAH,gBAAA,IAAAI,aAAA,SAEW1B,MAAMS,SAAS,YAAY,cAAc,wBAAAc,OAAwBvB,MAAMS,MAAI,IAAA,KAAE,KAAA,GACvE,GAAAc,OAAGhB,MAAMR,QAAM,IAAA,EAAA,GAAAwB,OAAIhB,MAAMP,OAAK,IAAA,KAAE0B,aAAA,aAAAH,OAClCvB,MAAMS,MAAI,IAAA,GAAA,KAAA,GAAAc,OAEpBvB,MAAMe,IAAI,CAAA;IAGjB,EAAA,CAAG;GAAC;EAAA,CAAA;CAGV;AACF;;;ACzBA,SAAgBY,KAAK0B,OAAkB;CACrC,MAAMG,YAAYzB,eAAe;CACjC,MAAMe,WAAWO,MAAMP,MAAM,YAAYU;CACzC,IAAIC;CACJ,MAAMC,YAAYrB,mBAAmBoB,YAAYJ,MAAMN,GAAG;CAC1D,MAAMY,QAAQN,MAAMD,WAAWQ,UAAmBP,MAAMD,QAASpB,WAC9D4B,MAA4F,CAAC,CAAC,GAC/F,EAAEC,MAAMC,YAA4B;EAAEL,OAAOK;CAAS,EAAE,CAC1D,CAAC,IAAIC,KAAAA;CACL,OAAAC,gBAAQlC,gBAAc;EAAA,IAACmC,SAAM;GAAA,OAAEP,UAAU,MAAM,QAAQ,OAAO;EAAI;EAAA,IAAAd,WAAA;GAAA,OAAAoB,gBAAGpC,OAAQsC,MAAIC,aAAA;IAAA,IAC/ErB,KAAE;KAAA,OAAEA,GAAG;IAAC;IAAA,IAAEN,QAAK;KAAA,OAAEa,MAAMb;IAAK;IAAA,IAAEC,eAAY;KAAA,OAAEY,MAAMZ;IAAY;IAAA,IAC9DE,cAAW;KAAA,OAAEU,MAAMV,eAAe;IAAY;IAAA,IAAEK,iBAAc;KAAA,OAAEK,MAAML,kBAAkB;IAAW;IACnGN,gBAAgB0B,YAAYf,MAAMX,gBAAgB0B,QAAQ5B,KAAK;IAC/D6B,WAAW;IAAOC,eAAe;IAAK,KAAA,WAAA;KAAA,OAASjB,MAAMF,WAAWY,KAAAA,IAAY;IAAe;GAAA,GACtFJ,QAAQ,EAAEP,SAASO,MAAM,IAAI,CAAC,GAAC;IACpCa,KAAK;KAAEC,UAAUjC,UAAUa,MAAMJ,QAAQT,KAAK,KAAK,GAAGM,GAAG,EAAC,OAAQN;KAASkC,UAAUlC,UAAUa,MAAMH,UAAUV,KAAK,KAAK,GAAGM,GAAG,EAAC,SAAUN;IAAQ;IAAC,IAAAI,WAAA;KAAA,OACnJS,MAAMT;IAAQ;GAAA,CAAA,CAAA;EAAA;CAAA,CAAA;AAClB;AAEA,SAAgB+B,QAAQtB,OAAiF;CACvG,MAAM,CAACuB,OAAOC,QAAQ5C,WAAWoB,OAAO;EAAC;EAAS;EAAY;CAAU,CAAC;CACzE,OAAAW,gBAAQpC,OAAQkD,MAAIX,aAAKU,MAAI;EAAA,KAAA,WAAA;GAAA,OAASzC,QAAQ,CAACwC,MAAMzB,YAAY,YAAYyB,MAAML,KAAK;EAAC;EAAA,IAAA3B,WAAA;GAAA,OAAGgC,MAAMhC;EAAQ;CAAA,CAAA,CAAA;AAC5G;AASA,SAAgBuC,IAAI9B,OAA8B;CAChD,MAAM,CAACuB,OAAOC,QAAQ5C,WAAWoB,OAAO;EAAC;EAAS;EAAY;EAAS;EAAY;CAAS,CAAC;CAE7F,MAAMM,QAAQiB,MAAMxB,WAAWQ,UAAmBgB,MAAMxB,QAASpB,WAC9D4B,MAA8G,CAAC,CAAC,GACjH,EAAEC,KAAKR,MAAMQ,IAAI,CACnB,CAAC,IAAIE,KAAAA;CACL,OAAAC,gBAAQpC,OAAQwD,SAAOjB,aAAKU,MAAI;EAAA,IAAErC,QAAK;GAAA,OAAEoC,MAAMpC;EAAK;EAAA,KAAA,WAAA;GAAA,OAASJ,QAAQ,CAACwC,MAAMzB,YAAY,WAAWyB,MAAML,KAAK;EAAC;CAAA,GAAOZ,QAAQ,EAAEP,SAASO,MAAM,IAAI,CAAC,GAAC,EAAA,IAAAf,WAAA;EAAA,OAAIgC,MAAMhC;CAAQ,EAAA,CAAA,CAAA;AACzK;AAIA,SAAgB0C,SAASjC,OAAmC;CAC1D,MAAM,CAACuB,OAAOC,QAAQ5C,WAAWoB,OAAO;EAAC;EAAS;EAAY;CAAO,CAAC;CACtE,MAAMkC,OAAO1D,eAAe;CAC5B,MAAM2D,iBAAiBD,KAAK,CAAC,CAAC/C,UAAUoC,MAAMpC;CAC9C,MAAMiD,cAAc,CAACD,SAAS,IAAIZ,MAAMa,QAAQ,OAAOb,MAAMa,UAAU,WACnE,GAAGb,MAAMa,MAAMC,QAAQ,UAAU,EAAE,EAAC,kBACpC;EAAE,GAAGd,MAAMa;EAAOE,SAAS;CAAO;CACtC,OAAA3B,gBAAQpC,OAAQgE,SAAOzB,aAAKU,MAAI;EAAA,IAAErC,QAAK;GAAA,OAAEoC,MAAMpC;EAAK;EAAA,IAAEiD,QAAK;GAAA,OAAEA,MAAM;EAAC;EAAA,IAAEI,SAAM;GAAA,OAAEL,SAAS;EAAC;EAAA,IAAEM,QAAK;GAAA,OAAEN,SAAS;EAAC;EAAA,IAAA5C,WAAA;GAAA,OAAGgC,MAAMhC;EAAQ;CAAA,CAAA,CAAA;AAC9H;;;AC3DA,IAAM2E,eAAenB,cAAwB;AAW7C,SAAgB0B,cAAcC,OAA2B;CACvD,MAAMC,SAAS3B,eAAe;CAE9B,IAAI8B;CAGJ,MAAME,oBAAoBF,mBAAmB,IAAIG,MAA+BE,UAAU,EACxFC,IAAIC,QAAQC,UAAU;EACpB,IAAIA,aAAa,kBAAkB,QAAQ1B,OAAeA,OAAO,2BAAqC,OAAOyB,OAAOE,eAAe3B,EAAE;EACrI,MAAM4B,QAAQC,QAAQL,IAAIC,QAAQC,UAAUD,MAAM;EAClD,OAAO,OAAOG,UAAU,aAAaA,MAAME,KAAKL,MAAM,IAAIG;CAC5D,EACF,CAAC;CACD,MAAMG,UAAU9C,cAAc;EAC5B+C,WAAW;EAAcC,SAAS;EAAOC,KAAKhD,MAAM;EAGpDiD,SAAS;EAAuBC,aAAa;EAAGC,QAAQ,CAAC,eAAe;EACxEC,KAAKC,OAAOC;EAAkBC,iBAAiB;CACjD,CAAC;CACD,IAAIC,WAAW;CACf,MAAMC,MAAgB;EACpBzC,KAAK0C,OAAO;GACV,MAAM5C,KAAK,aAAae,OAAM,GAAI,EAAE2B;GACpC,MAAM5C,WAAW8C,MAAM9C,YAAYgB,MAAML,mBAAmB;GAC5DsB,QAAQc,OAAO;IACb7C;IAAI8C,aAAaF,MAAMjD;IAASoD,MAAMH,MAAM/C,SAAS,WAAW,UAAU+C,MAAM/C,QAAQ;IACxFC,UAAUA,WAAW,IAAIA,WAAWkD;IACpCC,MAAM,EAAEC,KAAK;KAAE,GAAGN;KAAO5C;IAAG,EAAwB;GACtD,CAAC;GACD,OAAOA;EACT;EACAI,UAAUJ,OAAO+B,QAAQoB,OAAOnD,EAAE;EAClCK,aAAa0B,QAAQoB,OAAO;CAC9B;CACA9D,UAAUsD,IAAItC,KAAK;CACnB,OAAA+C,gBAAQ9C,aAAa+C,UAAQ;EAACzB,OAAOe;EAAG,IAAAnC,WAAA;GAAA,OAAA,CACrCM,MAAMN,UAAQ4C,gBACdpE,SAAO;IAAU+C;IAAmCX;IAAapB,IAAI,oBAAoBe;IAAQ,KAAA,WAAA;KAAA,OACzFvB,QAAQ,oBAAoBsB,MAAMF,KAAK;IAAC;IAAA,IAC/C0C,OAAI;KAAA,OAAExC,MAAMH,cAAc,WAAW;IAAc;IAAA,KAAA,gBAAA;KAAA,OAAcG,MAAMH,eAAe;IAAE;IAAAH,WACvFL,UAAU;KACX,MAAMqD,eAAerD,MAAM,CAAC,CAAC8C,MAAMC;KACnC,OAAAE,gBAAQrE,MAAS0E,MAAI;MAAA,KAAA,WAAA;OAAA,OACZjE,QAAQ,aAAa,cAAcgE,OAAO,CAAC,CAAC3D,QAAQ,QAAQ;MAAC;MAAA,IACpEyD,OAAI;OAAA,OAAEE,OAAO,CAAC,CAAC3D,SAAS,WAAW,UAAU;MAAQ;MAAA,IAAAW,WAAA;OAAA,OAAA,CAAA4C,gBAEpDrE,MAAS2E,aAAW,EAAA,IAAAlD,WAAA;QAAA,OAAEL,MAAM,CAAC,CAAC2C;OAAW,EAAA,CAAA,GACzChC,MAAMJ,gBAAY0C,gBAAKrE,MAAS4E,cAAY;QAAA,SAAA;QAAA,KAAA,gBAAA;SAAA,OAE/BC,WAAA,OAAO9C,MAAMJ,iBAAiB,UAAU,CAAA,CAAA,IAAGI,MAAMJ,aAAa8C,OAAO,CAAC,IAAI1C,MAAMJ;QAAY;QAAAF,UAAA;OAAA,CAAA,CAChF;MAAA;KAAA,CAAA;IAE9B;GAAC,CAAA,CAAA;EAAA;CAAA,CAAA;AAEL;AAEA,SAAgBqD,WAAqB;CACnC,MAAMC,UAAUxE,WAAWgB,YAAY;CACvC,IAAI,CAACwD,SAAS,MAAM,IAAIC,MAAM,gDAAgD;CAC9E,OAAOD;AACT;;;;;;;;;AC7DA,SAAgBE,QAAQoB,OAAqB;CAC3C,MAAMM,YAAYvB,eAAe;CACjC,MAAMqB,WAAWJ,MAAMI,MAAM,eAAeE;CAC5C,MAAM,CAACL,MAAMM,WAAWpB,yBAAyB;EAC/CqB,aAAaR,MAAMC;EAAMQ,cAAcT,MAAME,eAAe;EAC5DQ,WAAWC,SAASX,MAAMG,eAAeQ,IAAI;CAC/C,CAAC;CACD,MAAMC,MAAM9B,kBAAkB;EAC5BsB,IAAIA,GAAG;EAAGS,KAAK,EAAEhB,SAASO,GAAG,EAAE;EAAGH,MAAMA,KAAK;EAC7CE,eAAeW,YAAYP,QAAQO,QAAQb,IAAI;EAAGc,WAAW;EAAGC,YAAY;CAC9E,EAAE;CACF,OAAAC,gBAAQpC,UAAWqC,cAAY;EAACV,OAAOI;EAAKO,WAAW;EAAOC,eAAe;EAAK,IAAArB,WAAA;GAAA,OAAAsB,IAAAC,QAAAC,gBAAA,IAAAC,aAAA,SAAAC,OACnEvC,QAAQ,eAAec,MAAMK,KAAK,GAAC,IAAA,GAAA,KAAA,GAAAoB,OAAAR,gBAC7CpC,UAAW6C,SAAO,EAACC,UAAUC,UAAU;IACtC,MAAM,GAAGC,cAAc7C,WAAW4C,MAAM,GAAG,CAAC,aAAa,YAAY,CAAC;IACtE,OAAO5B,MAAMD,SAAS;KACtB,GAAG8B;KAAY,oBAAoBzB,GAAG;KAEtCZ,eAAeoB,IAAI,CAAC,CAACL,QAAQ,IAAI;KAAGd,cAAcmB,IAAI,CAAC,CAACL,QAAQ,KAAK;KACrEb,sBAAsBkB,IAAI,CAAC,CAACL,QAAQ,IAAI;KAAGZ,sBAAsBiB,IAAI,CAAC,CAACL,QAAQ,KAAK;IACtF,CAAC;GAAG,EAAC,CAAA,CAAA,GAAAkB,OAAAR,gBACJpC,UAAWiD,YAAU,EAAA,IAAA/B,WAAA;IAAA,OAAAkB,gBACnBpC,UAAWkD,SAAO;KAAA,SAAA;KAAA,IAAAhC,WAAA;MAAA,OAA8BC,MAAMH;KAAO;IAAA,CAAA;GAAA,EAAA,CAAA,CAAA,CAAA;EAAA;CAAA,CAAA;AAItE"}
1
+ {"version":3,"file":"server.js","names":["For","Show","createSignal","createUniqueId","JSX","ConsoleNavGroup","ConsoleShellLabels","LeftNavProps","surface","activePath","nav","labels","Pick","expandedGroups","defaultExpandedGroups","onExpandedGroupsChange","groupIds","onNavigate","isActive","href","explicit","undefined","segments","split","filter","Boolean","length","startsWith","fillBadgeLabel","template","count","replace","String","LeftNav","props","Element","internalExpandedGroups","setInternalExpandedGroups","flatMap","group","index","collapsible","items","some","item","active","id","expanded","toggleGroup","groupId","next","includes","value","_$ssr","_tmpl$","_$ssrHydrationKey","_$ssrAttribute","_$escape","_$createComponent","each","children","itemsId","stateId","isExpanded","_tmpl$3","when","fallback","label","_tmpl$2","_tmpl$6","icon","_tmpl$7","_tmpl$4","_$memo","badge","_tmpl$5","createSignal","createUniqueId","onMount","onCleanup","JSX","LayoutProps","navigationPosition","contentWidth","labels","skip","menuOpen","menuClose","surface","header","Element","navigation","railStart","railEnd","footer","children","Layout","props","id","railId","mainId","open","setOpen","hydrated","setHydrated","toggle","HTMLButtonElement","rail","HTMLElement","close","focus","focusables","Array","from","querySelectorAll","filter","el","closest","getClientRects","length","getComputedStyle","visibility","some","details","contains","querySelector","hasAttribute","window","matchMedia","media","resize","matches","addEventListener","removeEventListener","key","event","KeyboardEvent","preventDefault","items","first","last","at","shiftKey","document","activeElement","_$ssr","_tmpl$","_$ssrHydrationKey","_$ssrAttribute","_$escape","undefined","String","_tmpl$2","_tmpl$3","For","Show","JSX","LeftNav","Layout","ConsoleNavItem","id","href","label","icon","Element","badge","active","ConsoleNavGroup","collapsible","items","ConsoleShellLabels","skip","menuOpen","menuClose","nav","ConsoleHeader","eyebrow","title","actions","ConsoleShellProps","surface","activePath","brand","name","mark","context","value","navigation","expandedGroups","defaultExpandedGroups","onExpandedGroupsChange","groupIds","labels","header","foot","children","ConsoleShell","props","_$createComponent","railStart","_$ssr","_tmpl$","_$ssrHydrationKey","_$ssrAttribute","_$escape","when","_$memo","length","_tmpl$2","each","row","_tmpl$3","railEnd","_tmpl$4","_tmpl$7","_tmpl$5","_tmpl$6","Dialog","ArkDialog","useDialog","usePresenceContext","FocusTrap","ariaHidden","createEffect","createMemo","createSignal","createUniqueId","onCleanup","Show","JSX","Dynamic","isServer","Portal","classes","focusable","join","DialogProps","open","defaultOpen","onOpenChange","title","Element","description","children","actions","closeOnEscape","closeOnOutside","class","id","role","contentAs","portal","portalMount","HTMLElement","unstyled","overlayClass","titleClass","descriptionClass","actionsClass","contentProps","Omit","HTMLAttributes","initialFocus","finalFocus","restoreFocus","onEscapeKeyDown","event","KeyboardEvent","additionalFocusContainers","frame","parts","DialogFrameParts","props","generated","panel","setPanel","api","details","closeOnInteractOutside","initialFocusEl","finalFocusEl","modal","trapFocus","preventScroll","persistentElements","filter","element","Boolean","map","ids","content","opener","ownerDocument","activeElement","trap","removeIsolation","ready","setReady","containers","isConnected","defaultView","requestAnimationFrame","document","escapeDeactivates","allowOutsideClick","delayInitialFocus","fallbackFocus","getShadowRoot","undefined","setReturnFocus","activate","targets","updateContainerElements","defer","cancelAnimationFrame","deactivate","returnFocus","cls","base","extra","Content","presence","nativeContent","merge","_$createComponent","_$mergeProps","component","Positioner","asChild","aria-describedby","_$memo","Title","Description","_$ssr","_tmpl$","_$ssrHydrationKey","_$ssrAttribute","_$escape","RootProvider","value","lazyMount","unmountOnExit","when","fallback","mount","RadioGroup","ArkRadioGroup","For","JSX","classes","RadioOption","value","label","Element","disabled","RadioGroupProps","options","defaultValue","onValueChange","name","form","required","class","props","initialValue","_$createComponent","Root","details","children","Label","each","option","Item","ItemHiddenInput","style","ItemText","directionPolicy","icons","DdsIconName","splitProps","JSX","classes","IconProps","Omit","SvgSVGAttributes","SVGSVGElement","name","label","size","directional","Icon","props","local","rest","icon","mirrorInRtl","includes","_$ssrElement","_$mergeProps","class","cssClass","viewBox","width","height","fill","stroke","stroke-width","strokeWidth","role","undefined","aria-label","aria-hidden","_$ssr","_tmpl$2","_$ssrHydrationKey","_$escape","_tmpl$","body","Show","JSX","StatusTone","createStatusPill","config","tones","Record","D","label","domain","value","locale","openDomains","NoInfer","open","Set","StatusPill","props","Element","tone","known","Boolean","resolved","found","Error","text","_$createComponent","when","has","fallback","_$ssr","_tmpl$","_$ssrHydrationKey","_$escape","children","_tmpl$2","_$ssrAttribute","Tabs","ArkTabs","useTabsContext","LocaleProvider","createUniqueId","mergeProps","splitProps","JSX","ParentProps","classes","useDirection","Direction","TabsProps","value","defaultValue","onValueChange","orientation","children","Element","id","dir","activationMode","tabId","panelId","unstyled","asChild","props","HTMLAttributes","HTMLDivElement","generated","root","direction","child","merge","ref","element","undefined","_$createComponent","locale","Root","_$mergeProps","details","lazyMount","unmountOnExit","class","ids","trigger","content","TabList","local","rest","List","TabProps","Omit","ButtonHTMLAttributes","HTMLButtonElement","Tab","Trigger","TabPanelProps","TabPanel","tabs","inactive","style","replace","display","Content","hidden","inert","Toast","ArkToast","Toaster","createToaster","space","createContext","createUniqueId","onCleanup","useContext","JSX","classes","ToastTone","ToastInput","message","Element","tone","duration","ToastRecord","id","ToastApi","show","toast","dismiss","clear","ToastContext","ToastProviderProps","children","defaultDuration","dismissLabel","regionLabel","class","ToastProvider","props","prefix","region","HTMLDivElement","scopedDocument","Document","getRootNode","Proxy","ownerDocument","document","get","target","property","getElementById","value","Reflect","bind","toaster","placement","overlap","gap","offsets","removeDelay","hotkey","max","Number","MAX_SAFE_INTEGER","pauseOnPageIdle","sequence","api","input","create","description","type","Infinity","meta","dds","remove","_$createComponent","Provider","role","aria-label","record","Root","Description","CloseTrigger","_$memo","useToast","context","Error","Tooltip","ArkTooltip","useTooltip","createUniqueId","splitProps","JSX","classes","createControllableSignal","TooltipTriggerProps","Omit","ButtonHTMLAttributes","HTMLButtonElement","onFocus","onBlur","onPointerEnter","onPointerLeave","TooltipProps","content","Element","children","props","open","defaultOpen","onOpenChange","id","class","generated","setOpen","value","defaultValue","onChange","next","api","ids","details","openDelay","closeDelay","_$createComponent","RootProvider","lazyMount","unmountOnExit","_$ssr","_tmpl$","_$ssrHydrationKey","_$ssrAttribute","_$escape","Trigger","asChild","merge","attributes","Positioner","Content","For","onMount","onCleanup","JSX","LeftNavProps","TopNavProps","Pick","TopNav","props","Element","root","HTMLElement","outside","event","PointerEvent","contains","target","Node","querySelectorAll","forEach","el","removeAttribute","document","addEventListener","removeEventListener","_$ssr","_tmpl$","_$ssrHydrationKey","_$ssrAttribute","_$escape","labels","nav","_$createComponent","each","children","group","_tmpl$2","label","items","item","_tmpl$3","surface","id","href","active","activePath","split","filter","Boolean","length","startsWith","undefined","icon","_tmpl$4","badge","_tmpl$5","replace","String"],"sources":["../src/left-nav.tsx","../src/layout.tsx","../src/console-shell.tsx","../src/dialog.tsx","../src/radio-group.tsx","../src/icon.tsx","../src/pending-action.ts","../src/status-pill.tsx","../src/tabs.tsx","../src/toast.tsx","../src/tooltip.tsx","../src/top-nav.tsx"],"sourcesContent":["import { For, Show, createSignal, createUniqueId, type JSX } from \"solid-js\";\nimport type { ConsoleNavGroup, ConsoleShellLabels } from \"./console-shell\";\n\nexport interface LeftNavProps {\n surface: string;\n activePath: string;\n nav: readonly ConsoleNavGroup[];\n labels: Pick<ConsoleShellLabels, \"nav\" | \"badge\">;\n expandedGroups?: readonly string[] | undefined;\n defaultExpandedGroups?: readonly string[] | undefined;\n onExpandedGroupsChange?: ((groupIds: string[]) => void) | undefined;\n onNavigate?: () => void;\n}\n\n/* An index route matches exactly; everything else matches by prefix. A caller\n that knows better passes `active` on the item. */\nfunction isActive(\n activePath: string,\n href: string,\n explicit?: boolean,\n): boolean {\n if (explicit !== undefined) return explicit;\n const segments = href.split(\"/\").filter(Boolean);\n if (segments.length <= 1) return activePath === href;\n return activePath === href || activePath.startsWith(`${href}/`);\n}\n\n/** Fills the `{count}` placeholder in a consumer-supplied badge label\n * template. A function replacer, not `template.replace(\"{count}\", value)`\n * — a string replacement value is subject to special\n * `$&`/`$$`/`` $` ``/`$'` patterns. `count` is always a plain digit string\n * today, so this is defensive rather than a live bug, but it is the same\n * class of mistake as dds-table's analogous `sortBy` label fix — no\n * shared helper between the two packages (see that fix's note). */\nfunction fillBadgeLabel(template: string, count: number): string {\n return template.replace(\"{count}\", () => String(count));\n}\n\nexport function LeftNav(props: LeftNavProps): JSX.Element {\n const [internalExpandedGroups, setInternalExpandedGroups] = createSignal<\n readonly string[]\n >(\n props.defaultExpandedGroups ??\n props.nav.flatMap((group, index) =>\n group.collapsible &&\n group.items.some((item) =>\n isActive(props.activePath, item.href, item.active),\n )\n ? [group.id ?? `group-${index}`]\n : [],\n ),\n );\n const expanded = () => props.expandedGroups ?? internalExpandedGroups();\n const toggleGroup = (groupId: string) => {\n const next = expanded().includes(groupId)\n ? expanded().filter((value) => value !== groupId)\n : [...expanded(), groupId];\n if (props.expandedGroups === undefined) setInternalExpandedGroups(next);\n props.onExpandedGroupsChange?.(next);\n };\n return (\n <nav class=\"dds-console-rail__nav dds-left-nav\" aria-label={props.labels.nav}>\n <For each={props.nav}>\n {(group, index) => {\n const groupId = `dds-console-group-${createUniqueId()}`;\n const itemsId = `${groupId}-items`;\n const stateId = () => group.id ?? `group-${index()}`;\n const isExpanded = () =>\n !group.collapsible || expanded().includes(stateId());\n return (\n <section\n class=\"dds-console-rail__group\"\n aria-labelledby={groupId}\n data-collapsible={group.collapsible ? \"true\" : undefined}\n >\n <h2 id={groupId} class=\"dds-console-rail__group-label\">\n <Show when={group.collapsible} fallback={group.label}>\n <button\n type=\"button\"\n class=\"dds-console-rail__group-toggle\"\n aria-expanded={isExpanded()}\n aria-controls={itemsId}\n onClick={() => toggleGroup(stateId())}\n >\n <span>{group.label}</span>\n <span\n class=\"dds-console-rail__chevron\"\n aria-hidden=\"true\"\n />\n </button>\n </Show>\n </h2>\n <ul id={itemsId} hidden={!isExpanded()}>\n <For each={group.items}>\n {(item) => (\n <li>\n <a\n class=\"dds-console-rail__item\"\n data-nav={`${props.surface}.${item.id}`}\n href={item.href}\n aria-current={\n isActive(props.activePath, item.href, item.active)\n ? \"page\"\n : undefined\n }\n onClick={() => props.onNavigate?.()}\n >\n <Show\n when={item.icon != null}\n fallback={<span>{item.label}</span>}\n >\n <span class=\"dds-console-rail__item-content\">\n <span\n class=\"dds-console-rail__item-icon\"\n aria-hidden=\"true\"\n >\n {item.icon}\n </span>\n <span>{item.label}</span>\n </span>\n </Show>\n <Show when={item.badge !== undefined && item.badge > 0}>\n <span\n class=\"dds-console-rail__badge\"\n aria-label={fillBadgeLabel(\n props.labels.badge,\n item.badge!,\n )}\n >\n {item.badge}\n </span>\n </Show>\n </a>\n </li>\n )}\n </For>\n </ul>\n </section>\n );\n }}\n </For>\n </nav>\n );\n}\n","import {\n createSignal,\n createUniqueId,\n onMount,\n onCleanup,\n type JSX,\n} from \"solid-js\";\nexport interface LayoutProps {\n navigationPosition?: \"left\" | \"top\";\n contentWidth?: \"workspace\" | \"form\" | \"settings\" | \"full\";\n labels: { skip: string; menuOpen: string; menuClose: string };\n surface?: string;\n header?: JSX.Element;\n navigation?: JSX.Element;\n railStart?: JSX.Element;\n railEnd?: JSX.Element;\n footer?: JSX.Element;\n children: JSX.Element;\n}\nexport function Layout(props: LayoutProps): JSX.Element {\n const id = createUniqueId(),\n railId = `dds-console-rail-${id}`,\n mainId = `dds-console-main-${id}`;\n const [open, setOpen] = createSignal(false),\n [hydrated, setHydrated] = createSignal(false);\n let toggle: HTMLButtonElement | undefined, rail: HTMLElement | undefined;\n function close() {\n setOpen(false);\n toggle?.focus();\n }\n function focusables() {\n return [\n toggle,\n ...Array.from(\n rail?.querySelectorAll<HTMLElement>(\n 'a[href],button,summary,input,select,textarea,[tabindex=\"0\"]',\n ) ?? [],\n ),\n ].filter(\n (el): el is HTMLElement =>\n !!el &&\n !el.closest(\"[hidden]\") &&\n el.getClientRects().length > 0 &&\n getComputedStyle(el).visibility !== \"hidden\" &&\n !Array.from(rail?.querySelectorAll(\"details:not([open])\") ?? []).some(\n (details) =>\n details.contains(el) &&\n !details.querySelector(\"summary\")?.contains(el),\n ) &&\n !el.hasAttribute(\"disabled\"),\n );\n }\n onMount(() => {\n setHydrated(true);\n if (typeof window.matchMedia === \"function\") {\n const media = window.matchMedia(\"(max-width: 56.25rem)\");\n const resize = () => {\n if (!media.matches) setOpen(false);\n };\n media.addEventListener(\"change\", resize);\n onCleanup(() => media.removeEventListener(\"change\", resize));\n }\n function key(event: KeyboardEvent) {\n if (!open()) return;\n if (event.key === \"Escape\") {\n event.preventDefault();\n close();\n }\n if (event.key === \"Tab\") {\n const items = focusables(),\n first = items[0],\n last = items.at(-1);\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last?.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first?.focus();\n }\n }\n }\n document.addEventListener(\"keydown\", key);\n onCleanup(() => document.removeEventListener(\"keydown\", key));\n });\n return (\n <div\n class=\"dds-console-shell dds-layout\"\n data-navigation-position={props.navigationPosition ?? \"left\"}\n data-surface={props.surface}\n data-hydrated={hydrated() ? \"true\" : undefined}\n >\n <a class=\"dds-console-skip dds-visually-hidden\" href={`#${mainId}`}>\n {props.labels.skip}\n </a>\n <button\n ref={toggle}\n class=\"dds-console-rail__toggle\"\n type=\"button\"\n data-action=\"toggle-rail\"\n aria-controls={railId}\n aria-expanded={open()}\n onClick={() => {\n if (open()) close();\n else {\n setOpen(true);\n queueMicrotask(() => focusables()[1]?.focus());\n }\n }}\n >\n <span aria-hidden=\"true\" />\n <span class=\"dds-visually-hidden\">\n {open() ? props.labels.menuClose : props.labels.menuOpen}\n </span>\n </button>\n <div\n class=\"dds-console-rail__scrim\"\n data-open={String(open())}\n onClick={close}\n />\n <aside\n ref={rail}\n id={railId}\n class=\"dds-console-rail dds-layout__navigation\"\n data-open={String(open())}\n onClick={(event) => {\n if (\n open() &&\n event.target instanceof Element &&\n event.target.closest(\"a[href]\")\n )\n close();\n }}\n >\n {props.railStart}\n {props.navigation}\n {props.railEnd}\n </aside>\n <main id={mainId} class=\"dds-console-main dds-layout__main\" tabIndex={-1}>\n <div\n class=\"dds-layout__content\"\n data-width={props.contentWidth ?? \"workspace\"}\n >\n {props.header && (\n <header class=\"dds-layout__header\">{props.header}</header>\n )}\n {props.children}\n {props.footer && (\n <footer class=\"dds-layout__footer\">{props.footer}</footer>\n )}\n </div>\n </main>\n </div>\n );\n}\n","import { For, Show, type JSX } from \"solid-js\";\nimport { LeftNav } from \"./left-nav\";\nimport { Layout } from \"./layout\";\n/** One item in a nav group's list. `active` is a caller override — pass it\n * only when the generic prefix rule below gets a route wrong. \"Index route\"\n * in that rule means an `href` exactly one path segment deep (e.g.\n * `/dashboard`); a console mounted under a path prefix (so its own root is\n * two or more segments deep) should pass `active` explicitly on that item\n * rather than rely on the generic rule. */\nexport interface ConsoleNavItem {\n id: string;\n href: string;\n label: string;\n /** Decorative icon; the label supplies the accessible name. */\n icon?: JSX.Element;\n badge?: number;\n active?: boolean;\n}\n\nexport interface ConsoleNavGroup {\n /** Stable key for expansion state. Falls back to `group-${index}`. */\n id?: string;\n /** Opt in to a disclosure button; legacy groups remain expanded. */\n collapsible?: boolean;\n label: string;\n items: readonly ConsoleNavItem[];\n}\n\nexport interface ConsoleShellLabels {\n skip: string;\n menuOpen: string;\n menuClose: string;\n /** Accessible name for the rail's `<nav>` landmark (e.g. \"Dashboard\n * navigation\"). Required, not optional: a console page also has the\n * DataTable's pagination `<nav>` (named via its own `labels.nextPage`),\n * and an unnamed landmark next to a named one is a regression a\n * screen-reader user would notice immediately — the rail is the primary\n * nav, so it must never be the anonymous one. */\n nav: string;\n /** Badge accessible name template. `{count}` is substituted with the\n * item's pending count — DDS supplies no words of its own. */\n badge: string;\n}\n\nexport interface ConsoleHeader {\n eyebrow?: string;\n title: string;\n actions?: JSX.Element;\n}\n\nexport interface ConsoleShellProps {\n surface: string;\n activePath: string;\n brand: { href: string; name: string; mark: string };\n /** Lines pinned under the brand — a product's organization, environment,\n * or role context. */\n context?: readonly { label: string; value: string }[];\n nav?: readonly ConsoleNavGroup[];\n /** Custom menu content, such as a separately composed LeftNav. */\n navigation?: JSX.Element;\n expandedGroups?: readonly string[] | undefined;\n defaultExpandedGroups?: readonly string[] | undefined;\n onExpandedGroupsChange?: ((groupIds: string[]) => void) | undefined;\n labels: ConsoleShellLabels;\n header: ConsoleHeader;\n /** Slot for the rail's bottom — DDS must not depend on site-kit, so a\n * theme toggle, locale picker, or sign-out form all arrive as children\n * the product renders itself. */\n foot?: JSX.Element;\n children: JSX.Element;\n}\n\nexport function ConsoleShell(props: ConsoleShellProps): JSX.Element {\n return (\n <Layout\n labels={props.labels}\n surface={props.surface}\n railStart={\n <>\n <a class=\"dds-console-rail__brand\" href={props.brand.href}>\n <img src={props.brand.mark} alt=\"\" width=\"20\" height=\"20\" />\n <strong>{props.brand.name}</strong>\n </a>\n <Show when={props.context && props.context.length > 0}>\n <dl class=\"dds-console-rail__context\">\n <For each={props.context}>\n {(row) => (\n <div>\n <dt>{row.label}</dt>\n <dd>{row.value}</dd>\n </div>\n )}\n </For>\n </dl>\n </Show>\n </>\n }\n navigation={\n props.navigation ?? (\n <LeftNav\n surface={props.surface}\n activePath={props.activePath}\n nav={props.nav ?? []}\n labels={props.labels}\n expandedGroups={props.expandedGroups}\n defaultExpandedGroups={props.defaultExpandedGroups}\n onExpandedGroupsChange={props.onExpandedGroupsChange}\n />\n )\n }\n railEnd={\n props.foot && <div class=\"dds-console-rail__foot\">{props.foot}</div>\n }\n header={\n <div class=\"dds-console-page-header\">\n <div class=\"dds-console-page-header__text\">\n <Show when={props.header.eyebrow}>\n <p class=\"dds-console-page-eyebrow\">{props.header.eyebrow}</p>\n </Show>\n <h1>{props.header.title}</h1>\n </div>\n <Show when={props.header.actions}>\n <div class=\"dds-console-page-header__actions\">\n {props.header.actions}\n </div>\n </Show>\n </div>\n }\n >\n {props.children}\n </Layout>\n );\n}\n","import { Dialog as ArkDialog, useDialog } from \"@ark-ui/solid/dialog\";\nimport { usePresenceContext } from \"@ark-ui/solid/presence\";\nimport { FocusTrap } from \"@zag-js/focus-trap\";\nimport { ariaHidden } from \"@zag-js/aria-hidden\";\nimport { createEffect, createMemo, createSignal, createUniqueId, onCleanup, Show, type JSX } from \"solid-js\";\nimport { Dynamic, isServer, Portal } from \"solid-js/web\";\nimport { classes } from \"./utils\";\n\nexport const focusable = [\n \"a[href]\", \"button:not([disabled])\", \"input:not([disabled])\",\n \"select:not([disabled])\", \"textarea:not([disabled])\", \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n\nexport interface DialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n title: JSX.Element;\n description?: JSX.Element;\n children: JSX.Element;\n actions?: JSX.Element;\n closeOnEscape?: boolean;\n closeOnOutside?: boolean;\n class?: string;\n id?: string;\n role?: \"dialog\" | \"alertdialog\";\n contentAs?: \"div\" | \"section\";\n portal?: boolean;\n portalMount?: HTMLElement;\n unstyled?: boolean;\n overlayClass?: string;\n titleClass?: string;\n descriptionClass?: string;\n actionsClass?: string;\n contentProps?: Omit<JSX.HTMLAttributes<HTMLElement>, \"children\" | \"class\" | \"id\" | \"role\" | \"ref\">;\n initialFocus?: () => HTMLElement | null | undefined;\n finalFocus?: () => HTMLElement | null | undefined;\n restoreFocus?: boolean;\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n /** Authorized external regions join both the Tab cycle and modal accessibility scope. */\n additionalFocusContainers?: () => readonly (HTMLElement | null | undefined)[];\n /** Customize the inner layout using DDS-owned, already labelled title/description nodes. */\n frame?: (parts: DialogFrameParts) => JSX.Element;\n}\n\nexport interface DialogFrameParts {\n title: JSX.Element;\n description: JSX.Element;\n children: JSX.Element;\n actions: JSX.Element;\n}\n\nexport function Dialog(props: DialogProps) {\n const generated = createUniqueId();\n const id = () => props.id ?? `dds-dialog-${generated}`;\n const [panel, setPanel] = createSignal<HTMLElement>();\n const api = useDialog(() => ({\n id: id(), open: props.open, defaultOpen: props.defaultOpen,\n onOpenChange: (details) => props.onOpenChange?.(details.open),\n closeOnEscape: props.closeOnEscape ?? true,\n closeOnInteractOutside: props.closeOnOutside ?? true,\n onEscapeKeyDown: props.onEscapeKeyDown,\n initialFocusEl: () => props.initialFocus?.() ?? null,\n finalFocusEl: () => props.finalFocus?.() ?? null,\n restoreFocus: props.restoreFocus ?? true,\n // Ark handles ordinary dialogs. A multi-container modal needs a shared\n // Zag trap and isolation target list instead of Ark's single content node.\n modal: !props.additionalFocusContainers,\n trapFocus: !props.additionalFocusContainers,\n preventScroll: true,\n role: props.role ?? \"dialog\",\n persistentElements: isServer ? [] : props.additionalFocusContainers?.().filter((element): element is HTMLElement => Boolean(element)).map(element => () => element),\n ids: { content: id(), title: `${id()}-title`, description: `${id()}-description` },\n }));\n const open = createMemo(() => api().open);\n createEffect(() => {\n const content = panel();\n if (!open() || !props.additionalFocusContainers || !content) return;\n const opener = content.ownerDocument.activeElement;\n let trap: FocusTrap | undefined;\n let removeIsolation: (() => void) | undefined;\n const [ready, setReady] = createSignal(false);\n const containers = () => [content, ...props.additionalFocusContainers!().filter((element): element is HTMLElement => Boolean(element?.isConnected && element.ownerDocument === content.ownerDocument))];\n const frame = content.ownerDocument.defaultView!.requestAnimationFrame(() => {\n trap = new FocusTrap(containers(), {\n document: content.ownerDocument,\n escapeDeactivates: false, allowOutsideClick: true, preventScroll: true,\n delayInitialFocus: false, fallbackFocus: content, getShadowRoot: true,\n initialFocus: () => props.initialFocus?.() ?? undefined,\n setReturnFocus: () => props.finalFocus?.() ?? (opener instanceof HTMLElement && opener.isConnected ? opener : false),\n });\n setReady(true);\n trap.activate();\n });\n createEffect(() => {\n if (!ready()) return;\n const targets = containers();\n trap!.updateContainerElements(targets);\n removeIsolation?.();\n removeIsolation = ariaHidden(targets, { defer: false });\n });\n onCleanup(() => {\n content.ownerDocument.defaultView!.cancelAnimationFrame(frame);\n removeIsolation?.();\n trap?.deactivate({ returnFocus: props.restoreFocus !== false });\n });\n });\n const cls = (base: string, extra?: string) => classes(props.unstyled ? undefined : base, extra);\n const Content = () => {\n const presence = usePresenceContext();\n const nativeContent = (merge: unknown) => <Dynamic component={props.contentAs ?? \"div\"}\n {...(merge as (props: JSX.HTMLAttributes<HTMLElement>) => JSX.HTMLAttributes<HTMLElement>)({})}\n ref={(element: HTMLElement) => {\n // Ark's asChild merger omits refs. Register both its presence node and\n // DDS's shared focus container on the actual native content element.\n presence().ref(element);\n setPanel(element);\n }}\n />;\n return <ArkDialog.Positioner class={cls(\"dds-dialog-overlay\", props.overlayClass)}>\n <ArkDialog.Content {...props.contentProps} ref={setPanel} class={cls(\"dds-dialog\", props.class)}\n {...(props.contentAs ? { asChild: nativeContent } : {})}\n role={props.role ?? \"dialog\"} aria-modal=\"true\" aria-describedby={props.description ? `${id()}-description` : undefined}>\n {(() => {\n const parts: DialogFrameParts = {\n get title() { return <ArkDialog.Title class={cls(\"dds-dialog__title\", props.titleClass)}>{props.title}</ArkDialog.Title>; },\n get description() { return props.description && <ArkDialog.Description class={cls(\"dds-dialog__body\", props.descriptionClass)}>{props.description}</ArkDialog.Description>; },\n get children() { return props.children; },\n get actions() { return props.actions && <div class={cls(\"dds-dialog__actions\", props.actionsClass)}>{props.actions}</div>; },\n };\n return props.frame ? props.frame(parts) : <>{parts.title}{parts.description}{parts.children}{parts.actions}</>;\n })()}\n </ArkDialog.Content>\n </ArkDialog.Positioner>;\n };\n return <ArkDialog.RootProvider value={api} lazyMount unmountOnExit>\n <Show when={props.portal} fallback={<Content />}><Portal {...(props.portalMount ? { mount: props.portalMount } : {})}><Content /></Portal></Show>\n </ArkDialog.RootProvider>;\n}\n","import { RadioGroup as ArkRadioGroup } from \"@ark-ui/solid/radio-group\";\nimport { For, type JSX } from \"solid-js\";\nimport { classes } from \"./utils\";\n\nexport interface RadioOption {\n value: string;\n label: JSX.Element;\n disabled?: boolean;\n}\nexport interface RadioGroupProps {\n options: readonly RadioOption[];\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n name?: string;\n form?: string;\n disabled?: boolean;\n required?: boolean;\n label: JSX.Element;\n class?: string;\n}\n\n/** Grouped radios delegate selection and roving keyboard focus to Ark. */\nexport function RadioGroup(props: RadioGroupProps) {\n const initialValue = props.value ?? props.defaultValue;\n return <ArkRadioGroup.Root\n value={props.value} defaultValue={props.defaultValue}\n name={props.name} form={props.form} disabled={props.disabled} required={props.required}\n onValueChange={(details) => { if (details.value !== null) props.onValueChange?.(details.value); }}\n class={classes(\"dds-radio-group\", props.class)}\n >\n <ArkRadioGroup.Label class=\"dds-field__label\">{props.label}</ArkRadioGroup.Label>\n <For each={props.options}>{(option) => <ArkRadioGroup.Item value={option.value} disabled={option.disabled} class=\"dds-check\">\n <ArkRadioGroup.ItemHiddenInput class=\"dds-check__input\" style={{}}\n ref={(input) => { input.defaultChecked = initialValue === option.value; }} />\n <ArkRadioGroup.ItemText>{option.label}</ArkRadioGroup.ItemText>\n </ArkRadioGroup.Item>}</For>\n </ArkRadioGroup.Root>;\n}\n","import { directionPolicy, icons, type DdsIconName } from \"@devslab/dds-icons\";\nimport { splitProps, type JSX } from \"solid-js\";\n\nimport { classes } from \"./utils\";\n\nexport interface IconProps extends Omit<JSX.SvgSVGAttributes<SVGSVGElement>, \"name\" | \"children\"> {\n name: DdsIconName;\n label?: string;\n size?: number | string;\n directional?: boolean;\n}\n\nexport function Icon(props: IconProps) {\n const [local, rest] = splitProps(props, [\"name\", \"label\", \"size\", \"directional\", \"class\"]);\n const icon = () => icons[local.name];\n const directional = () => local.directional ?? directionPolicy.mirrorInRtl.includes(local.name);\n return (\n <svg\n {...rest}\n class={classes(directional() && directionPolicy.cssClass, local.class)}\n viewBox={icon().viewBox}\n width={local.size ?? 24}\n height={local.size ?? 24}\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width={icon().strokeWidth}\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n role={local.label ? \"img\" : undefined}\n aria-label={local.label}\n aria-hidden={local.label ? undefined : \"true\"}\n >\n {local.label && <title>{local.label}</title>}\n <g innerHTML={icon().body} />\n </svg>\n );\n}\n","import { createSignal, getOwner, onCleanup, type Accessor } from \"solid-js\";\n\n/** Options for one `run` call. */\nexport interface PendingActionRunOptions {\n /**\n * Start even while another action runs: that one is aborted and this one takes its place, so the\n * latest request wins (a list reload after typing, paging or sorting). Without it a second start\n * while one runs is ignored, which is what a button wants.\n */\n replace?: boolean;\n}\n\n/**\n * Which of a screen's actions is running. A screen with several buttons gives each one its own\n * key, so only the button that started the work shows progress, while every other control can\n * still be locked through `busy`. One shared flag for all the buttons spins every one of them.\n */\nexport interface PendingAction<K extends string = string> {\n /** The key of the action now running, or null. */\n readonly current: Accessor<K | null>;\n /** True while any action runs: lock the other controls with it. */\n readonly busy: Accessor<boolean>;\n /** True while `key` is the running action: give that control its progress state. */\n is(key: K): boolean;\n /**\n * Runs `task` as `key` and clears the state when it settles, whether it resolves or throws (the\n * error reaches the caller). While another action runs it does nothing and resolves to undefined,\n * unless `replace` is set. The task receives a signal that aborts when this run stops counting:\n * `reset()`, a run that replaced it, or the owner going away. Check `signal.aborted` after each\n * await before touching the screen, or pass the signal to `fetch`.\n */\n run<T>(key: K, task: (signal: AbortSignal) => T | Promise<T>, options?: PendingActionRunOptions): Promise<T | undefined>;\n /** Stops tracking the running action and aborts its signal, for example when the screen's data was replaced. */\n reset(): void;\n}\n\n/** Tracks the running action of a screen; created in a component, it stops with that component. */\nexport function createPendingAction<K extends string = string>(): PendingAction<K> {\n const [current, setCurrent] = createSignal<K | null>(null);\n let active: AbortController | null = null;\n let disposed = false;\n const stop = () => {\n active?.abort();\n active = null;\n };\n if (getOwner()) onCleanup(() => { disposed = true; stop(); });\n return {\n current,\n busy: () => current() !== null,\n is: (key) => current() === key,\n async run(key, task, options) {\n if (disposed || (active && !options?.replace)) return undefined;\n stop();\n const controller = new AbortController();\n active = controller;\n setCurrent(() => key);\n try {\n return await task(controller.signal);\n } finally {\n if (active === controller) {\n active = null;\n setCurrent(null);\n }\n }\n },\n reset() {\n stop();\n setCurrent(null);\n },\n };\n}\n","import { Show, type JSX } from \"solid-js\";\n\nexport type StatusTone = \"success\" | \"warning\" | \"danger\" | \"info\" | \"brand\" | \"neutral\";\n\n/* The rule, not the vocabulary. A value a CLOSED domain does not know throws:\n that can only mean a schema gained a case the catalog forgot. A value an OPEN\n domain does not know renders as raw text: that is customer data, and it must\n not crash the screen.\n\n `tones` declares which domains exist; `openDomains` only selects among the\n domains `tones` already declared, so it must not itself widen or narrow that\n set. */\nexport function createStatusPill<D extends string>(config: {\n tones: Record<D, Record<string, StatusTone>>;\n label: (domain: D, value: string, locale: string) => string | undefined;\n openDomains?: readonly NoInfer<D>[];\n}) {\n const open = new Set<string>(config.openDomains ?? []);\n return function StatusPill(props: { domain: D; value: string; locale: string }): JSX.Element {\n const tone = () => config.tones[props.domain]?.[props.value];\n const label = () => config.label(props.domain, props.value, props.locale);\n const known = () => Boolean(tone() && label());\n const resolved = () => {\n const found = tone();\n if (!found) throw new Error(`StatusPill: no tone for ${props.domain}.${props.value}`);\n const text = label();\n if (!text) throw new Error(`StatusPill: no label for ${props.domain}.${props.value}`);\n return { tone: found, text };\n };\n return (\n <Show when={known() || !open.has(props.domain)} fallback={<code data-status={`${props.domain}.${props.value}`}>{props.value}</code>}>\n {(() => {\n const value = resolved();\n return (\n <span\n class={value.tone === \"neutral\" ? \"dds-badge\" : `dds-badge dds-badge--${value.tone}`}\n data-status={`${props.domain}.${props.value}`}\n data-tone={value.tone}\n >\n {value.text}\n </span>\n );\n })()}\n </Show>\n );\n };\n}\n","import { Tabs as ArkTabs, useTabsContext } from \"@ark-ui/solid/tabs\";\nimport { LocaleProvider } from \"@ark-ui/solid/locale\";\nimport { createUniqueId, mergeProps, splitProps, type JSX, type ParentProps } from \"solid-js\";\nimport { classes } from \"./utils\";\nimport { useDirection, type Direction } from \"./direction\";\n\nexport interface TabsProps {\n value?: string;\n defaultValue: string;\n onValueChange?: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n children: JSX.Element;\n id?: string;\n dir?: Direction;\n activationMode?: \"automatic\" | \"manual\";\n tabId?: (value: string) => string;\n panelId?: (value: string) => string;\n unstyled?: boolean;\n asChild?: (props: JSX.HTMLAttributes<HTMLDivElement>) => JSX.Element;\n}\n\nexport function Tabs(props: TabsProps) {\n const generated = createUniqueId();\n const id = () => props.id ?? `dds-tabs-${generated}`;\n let root: HTMLDivElement | undefined;\n const direction = useDirection(() => root, () => props.dir);\n const child = props.asChild ? (merge: unknown) => props.asChild!(mergeProps(\n (merge as (props: JSX.HTMLAttributes<HTMLDivElement>) => JSX.HTMLAttributes<HTMLDivElement>)({}),\n { ref: (element: HTMLDivElement) => { root = element; } },\n )) : undefined;\n return <LocaleProvider locale={direction() === \"rtl\" ? \"ar\" : \"en\"}><ArkTabs.Root ref={root}\n id={id()} value={props.value} defaultValue={props.defaultValue}\n orientation={props.orientation ?? \"horizontal\"} activationMode={props.activationMode ?? \"automatic\"}\n onValueChange={(details) => props.onValueChange?.(details.value)}\n lazyMount={false} unmountOnExit={false} class={props.unstyled ? undefined : \"dds-tabs-root\"}\n {...(child ? { asChild: child } : {})}\n ids={{ trigger: (value) => props.tabId?.(value) ?? `${id()}-tab-${value}`, content: (value) => props.panelId?.(value) ?? `${id()}-panel-${value}` }}\n >{props.children}</ArkTabs.Root></LocaleProvider>;\n}\n\nexport function TabList(props: ParentProps<JSX.HTMLAttributes<HTMLDivElement> & { unstyled?: boolean }>) {\n const [local, rest] = splitProps(props, [\"class\", \"children\", \"unstyled\"]);\n return <ArkTabs.List {...rest} class={classes(!local.unstyled && \"dds-tabs\", local.class)}>{local.children}</ArkTabs.List>;\n}\n\nexport interface TabProps extends Omit<JSX.ButtonHTMLAttributes<HTMLButtonElement>, \"value\" | \"class\"> {\n value: string;\n class?: string;\n unstyled?: boolean;\n asChild?: (props: JSX.ButtonHTMLAttributes<HTMLButtonElement>) => JSX.Element;\n}\n\nexport function Tab(props: ParentProps<TabProps>) {\n const [local, rest] = splitProps(props, [\"class\", \"children\", \"value\", \"unstyled\", \"asChild\"]);\n // Ark's factory supplies a merger; DDS exposes native button attributes.\n const child = local.asChild ? (merge: unknown) => local.asChild!(mergeProps(\n (merge as (props: JSX.ButtonHTMLAttributes<HTMLButtonElement>) => JSX.ButtonHTMLAttributes<HTMLButtonElement>)({}),\n { ref: props.ref },\n )) : undefined;\n return <ArkTabs.Trigger {...rest} value={local.value} class={classes(!local.unstyled && \"dds-tab\", local.class)} {...(child ? { asChild: child } : {})}>{local.children}</ArkTabs.Trigger>;\n}\n\nexport interface TabPanelProps extends JSX.HTMLAttributes<HTMLDivElement> { value: string }\n\nexport function TabPanel(props: ParentProps<TabPanelProps>) {\n const [local, rest] = splitProps(props, [\"value\", \"children\", \"style\"]);\n const tabs = useTabsContext();\n const inactive = () => tabs().value !== local.value;\n const style = () => !inactive() ? local.style : typeof local.style === \"string\"\n ? `${local.style.replace(/;+\\s*$/, \"\")};display:none;`\n : { ...local.style, display: \"none\" };\n return <ArkTabs.Content {...rest} value={local.value} style={style()} hidden={inactive()} inert={inactive()}>{local.children}</ArkTabs.Content>;\n}\n","import { Toast as ArkToast, Toaster, createToaster } from \"@ark-ui/solid/toast\";\nimport { space } from \"@devslab/dds-tokens\";\nimport { createContext, createUniqueId, onCleanup, useContext, type JSX } from \"solid-js\";\nimport { classes } from \"./utils\";\n\nexport type ToastTone = \"success\" | \"warning\" | \"danger\" | \"info\";\nexport interface ToastInput { message: JSX.Element; tone?: ToastTone; duration?: number }\nexport interface ToastRecord extends ToastInput { id: string }\nexport interface ToastApi {\n show: (toast: ToastInput) => string;\n dismiss: (id: string) => void;\n clear: () => void;\n}\nconst ToastContext = createContext<ToastApi>();\n\nexport interface ToastProviderProps {\n children: JSX.Element;\n defaultDuration?: number;\n dismissLabel?: string | ((toast: ToastRecord) => string);\n /** Optional localized label for the notification region. */\n regionLabel?: string;\n class?: string;\n}\n\nexport function ToastProvider(props: ToastProviderProps) {\n const prefix = createUniqueId();\n let region: HTMLDivElement | undefined;\n let scopedDocument: Document | undefined;\n // Zag derives group IDs from placement rather than provider identity. Keep\n // each provider's physical ID unique, and scope that one logical lookup.\n const getRootNode = () => scopedDocument ??= new Proxy(region?.ownerDocument ?? document, {\n get(target, property) {\n if (property === \"getElementById\") return (id: string) => id === \"toast-group:bottom-end\" ? region ?? null : target.getElementById(id);\n const value = Reflect.get(target, property, target);\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n });\n const toaster = createToaster({\n placement: \"bottom-end\", overlap: false, gap: space[8],\n // An empty array matches EVERY key in Zag. An impossible physical code\n // disables the global shortcut without stealing application focus.\n offsets: \"var(--dds-space-16)\", removeDelay: 0, hotkey: [\"DDS_NO_HOTKEY\"],\n max: Number.MAX_SAFE_INTEGER, pauseOnPageIdle: true,\n });\n let sequence = 0;\n const api: ToastApi = {\n show(input) {\n const id = `dds-toast-${prefix}-${++sequence}`;\n const duration = input.duration ?? props.defaultDuration ?? 5000;\n toaster.create({\n id, description: input.message, type: input.tone === \"danger\" ? \"error\" : input.tone ?? \"info\",\n duration: duration > 0 ? duration : Infinity,\n meta: { dds: { ...input, id } satisfies ToastRecord },\n });\n return id;\n },\n dismiss: (id) => toaster.remove(id),\n clear: () => toaster.remove(),\n };\n onCleanup(api.clear);\n return <ToastContext.Provider value={api}>\n {props.children}\n <Toaster toaster={toaster} ref={region} getRootNode={getRootNode} id={`dds-toast-region-${prefix}`}\n class={classes(\"dds-toast-region\", props.class)}\n role={props.regionLabel ? \"region\" : \"presentation\"} aria-label={props.regionLabel ?? \"\"}\n >{(toast) => {\n const record = () => toast().meta?.dds as ToastRecord;\n return <ArkToast.Root\n class={classes(\"dds-toast\", `dds-toast--${record().tone ?? \"info\"}`)}\n role={record().tone === \"danger\" ? \"alert\" : \"status\"}\n >\n <ArkToast.Description>{toast().description}</ArkToast.Description>\n {props.dismissLabel && <ArkToast.CloseTrigger\n class=\"dds-iconbtn dds-iconbtn--sm\"\n aria-label={typeof props.dismissLabel === \"function\" ? props.dismissLabel(record()) : props.dismissLabel}\n >×</ArkToast.CloseTrigger>}\n </ArkToast.Root>;\n }}</Toaster>\n </ToastContext.Provider>;\n}\n\nexport function useToast(): ToastApi {\n const context = useContext(ToastContext);\n if (!context) throw new Error(\"useToast must be called inside <ToastProvider>\");\n return context;\n}\n","import { Tooltip as ArkTooltip, useTooltip } from \"@ark-ui/solid/tooltip\";\nimport { createUniqueId, splitProps, type JSX } from \"solid-js\";\nimport { classes } from \"./utils\";\nimport { createControllableSignal } from \"./controllable\";\n\n/** Spread all trigger props onto the focusable trigger element. */\nexport interface TooltipTriggerProps extends Omit<JSX.ButtonHTMLAttributes<HTMLButtonElement>, \"aria-describedby\" | \"onFocus\" | \"onBlur\" | \"onPointerEnter\" | \"onPointerLeave\"> {\n \"aria-describedby\": string;\n onFocus: () => void;\n onBlur: () => void;\n onPointerEnter: () => void;\n onPointerLeave: () => void;\n}\n\nexport interface TooltipProps {\n content: JSX.Element;\n children: (props: TooltipTriggerProps) => JSX.Element;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n id?: string;\n class?: string;\n}\n\nexport function Tooltip(props: TooltipProps) {\n const generated = createUniqueId();\n const id = () => props.id ?? `dds-tooltip-${generated}`;\n const [open, setOpen] = createControllableSignal({\n value: () => props.open, defaultValue: props.defaultOpen ?? false,\n onChange: (next) => props.onOpenChange?.(next),\n });\n const api = useTooltip(() => ({\n id: id(), ids: { content: id() }, open: open(),\n onOpenChange: (details) => setOpen(details.open), openDelay: 0, closeDelay: 0,\n }));\n return <ArkTooltip.RootProvider value={api} lazyMount={false} unmountOnExit={false}>\n <span class={classes(\"dds-tooltip\", props.class)}>\n <ArkTooltip.Trigger asChild={(merge) => {\n const [, attributes] = splitProps(merge(), [\"onFocusIn\", \"onFocusOut\"]);\n return props.children({\n ...attributes, \"aria-describedby\": id(),\n // Preserve DDS's established composable, zero-argument callbacks.\n onFocus: () => api().setOpen(true), onBlur: () => api().setOpen(false),\n onPointerEnter: () => api().setOpen(true), onPointerLeave: () => api().setOpen(false),\n }); }} />\n <ArkTooltip.Positioner>\n <ArkTooltip.Content class=\"dds-tooltip__bubble\">{props.content}</ArkTooltip.Content>\n </ArkTooltip.Positioner>\n </span>\n </ArkTooltip.RootProvider>;\n}\n","import { For, onMount, onCleanup, type JSX } from \"solid-js\";\nimport type { LeftNavProps } from \"./left-nav\";\nexport type TopNavProps = Pick<\n LeftNavProps,\n \"surface\" | \"activePath\" | \"nav\" | \"labels\" | \"onNavigate\"\n>;\nexport function TopNav(props: TopNavProps): JSX.Element {\n let root: HTMLElement | undefined;\n onMount(() => {\n const outside = (event: PointerEvent) => {\n if (!root?.contains(event.target as Node))\n root\n ?.querySelectorAll(\"details[open]\")\n .forEach((el) => el.removeAttribute(\"open\"));\n };\n document.addEventListener(\"pointerdown\", outside);\n onCleanup(() => document.removeEventListener(\"pointerdown\", outside));\n });\n return (\n <nav\n ref={root}\n class=\"dds-top-nav\"\n aria-label={props.labels.nav}\n onKeyDown={(event) => {\n if (event.key !== \"Escape\") return;\n const details = (event.target as Element).closest(\"details\");\n if (details?.open) {\n event.preventDefault();\n event.stopPropagation();\n details.open = false;\n details.querySelector(\"summary\")?.focus();\n }\n }}\n >\n <For each={props.nav}>\n {(group) => (\n <details class=\"dds-top-nav__group\">\n <summary class=\"dds-top-nav__trigger\">{group.label}</summary>\n <ul class=\"dds-top-nav__items\">\n <For each={group.items}>\n {(item) => (\n <li>\n <a\n class=\"dds-top-nav__item\"\n data-nav={`${props.surface}.${item.id}`}\n href={item.href}\n aria-current={\n (item.active ??\n (props.activePath === item.href ||\n (item.href.split(\"/\").filter(Boolean).length > 1 &&\n props.activePath.startsWith(`${item.href}/`))))\n ? \"page\"\n : undefined\n }\n onClick={(event) => {\n event.currentTarget\n .closest(\"details\")\n ?.removeAttribute(\"open\");\n props.onNavigate?.();\n }}\n >\n {item.icon != null && (\n <span class=\"dds-top-nav__item-icon\" aria-hidden=\"true\">\n {item.icon}\n </span>\n )}\n <span>{item.label}</span>\n {item.badge != null && item.badge > 0 && (\n <span\n class=\"dds-console-rail__badge\"\n aria-label={props.labels.badge.replace(\n \"{count}\",\n () => String(item.badge),\n )}\n >\n {item.badge}\n </span>\n )}\n </a>\n </li>\n )}\n </For>\n </ul>\n </details>\n )}\n </For>\n </nav>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,SAASkB,SACPT,YACAU,MACAC,UACS;CACT,IAAIA,aAAaC,KAAAA,GAAW,OAAOD;CAEnC,IADiBD,KAAKI,MAAM,GAAG,CAAC,CAACC,OAAOC,OACpCH,CAAAA,CAASI,UAAU,GAAG,OAAOjB,eAAeU;CAChD,OAAOV,eAAeU,QAAQV,WAAWkB,WAAW,GAAGR,KAAI,EAAG;AAChE;;;;;;;;AASA,SAASS,eAAeC,UAAkBC,OAAuB;CAC/D,OAAOD,SAASE,QAAQ,iBAAiBC,OAAOF,KAAK,CAAC;AACxD;AAEA,SAAgBG,QAAQC,OAAkC;CACxD,MAAM,CAACE,wBAAwBC,6BAA6BnC,aAG1DgC,MAAMpB,yBACJoB,MAAMxB,IAAI4B,SAASC,OAAOC,UACxBD,MAAME,eACNF,MAAMG,MAAMC,MAAMC,SAChB1B,SAASgB,MAAMzB,YAAYmC,KAAKzB,MAAMyB,KAAKC,MAAM,CACnD,IACI,CAACN,MAAMO,MAAM,SAASN,OAAO,IAC7B,CAAA,CACN,CACJ;CACA,MAAMO,iBAAiBb,MAAMrB,kBAAkBuB,uBAAuB;CAQtE,OAAAiB,IAAAC,UAAAC,gBAAA,GAAAC,aAAA,cAAAC,OAC8DvB,MAAMvB,OAAOD,KAAG,IAAA,GAAA,KAAA,GAAA+C,OAAAC,gBACzE1D,KAAG;EAAA,IAAC2D,OAAI;GAAA,OAAEzB,MAAMxB;EAAG;EAAAkD,WAChBrB,OAAOC,UAAU;GACjB,MAAMS,UAAU,qBAAqB9C,eAAe;GACpD,MAAM0D,UAAU,GAAGZ,QAAO;GAC1B,MAAMa,gBAAgBvB,MAAMO,MAAM,SAASN,MAAM;GACjD,MAAMuB,mBACJ,CAACxB,MAAME,eAAeM,SAAS,CAAC,CAACI,SAASW,QAAQ,CAAC;GACrD,OAAAT,IAAAW,WAAAT,gBAAA,GAAAC,aAAA,mBAAAC,OAGqBR,SAAO,IAAA,GAAA,KAAA,IAAAO,aAAA,oBACNjB,MAAME,cAAc,SAAMgB,OAAGpC,KAAAA,GAAS,IAAA,GAAA,KAAA,GAAAmC,aAAA,MAAAC,OAEhDR,SAAO,IAAA,GAAA,KAAA,GAAAQ,OAAAC,gBACZzD,MAAI;IAAA,IAACgE,OAAI;KAAA,OAAE1B,MAAME;IAAW;IAAA,IAAEyB,WAAQ;KAAA,OAAE3B,MAAM4B;IAAK;IAAA,IAAAP,WAAA;KAAA,OAAAP,IAAAe,WAAAb,gBAAA,GAAAC,aAAA,iBAAAC,OAIjCM,WAAW,GAAC,IAAA,GAAA,KAAA,IAAAP,aAAA,iBAAAC,OACZI,SAAO,IAAA,GAAA,KAAA,GAAAJ,OAGflB,MAAM4B,KAAK,CAAA;IAAA;GAAA,CAAA,CAAA,GAAAX,aAAA,MAAAC,OAQhBI,SAAO,IAAA,GAAA,KAAA,GAAAL,aAAA,UAAU,CAACO,WAAW,GAAC,IAAA,GAAAN,OAAAC,gBACnC1D,KAAG;IAAA,IAAC2D,OAAI;KAAA,OAAEpB,MAAMG;IAAK;IAAAkB,WAClBhB,SAAIS,IAAAgB,WAAAd,gBAAA,GAIU,GAAAE,OAAGvB,MAAM1B,SAAO,IAAA,EAAA,GAAAiD,OAAIb,KAAKE,IAAE,IAAA,KAAEU,aAAA,QAAAC,OACjCb,KAAKzB,MAAI,IAAA,GAAA,KAAA,IAAAqC,aAAA,gBAEbtC,SAASgB,MAAMzB,YAAYmC,KAAKzB,MAAMyB,KAAKC,MAAM,IAC7C,SAAMY,OACNpC,KAAAA,GAAS,IAAA,GAAA,KAAA,GAAAoC,OAAAC,gBAIdzD,MAAI;KAAA,IACHgE,OAAI;MAAA,OAAErB,KAAK0B,QAAQ;KAAI;KAAA,IACvBJ,WAAQ;MAAA,OAAAb,IAAAkB,WAAAhB,gBAAA,GAAAE,OAASb,KAAKuB,KAAK,CAAA;KAAA;KAAA,IAAAP,WAAA;MAAA,OAAAP,IAAAmB,WAAAjB,gBAAA,GAAAE,OAOtBb,KAAK0B,IAAI,GAAAb,OAELb,KAAKuB,KAAK,CAAA;KAAA;IAAA,CAAA,CAAA,GAAAV,OAAAC,gBAGpBzD,MAAI;KAAA,IAACgE,OAAI;MAAA,OAAEQ,WAAA7B,KAAK8B,UAAUrD,KAAAA,CAAS,CAAA,CAAA,KAAIuB,KAAK8B,QAAQ;KAAC;KAAA,IAAAd,WAAA;MAAA,OAAAP,IAAAsB,WAAApB,gBAAA,GAAAC,aAAA,cAAAC,OAGtC7B,eACVM,MAAMvB,OAAO+D,OACb9B,KAAK8B,KACP,GAAC,IAAA,GAAA,KAAA,GAAAjB,OAEAb,KAAK8B,KAAK,CAAA;KAAA;IAAA,CAAA,CAAA,CAAA;GAKpB,CAAA,CAAA,CAAA;EAKX;CAAC,CAAA,CAAA,CAAA;AAIT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5HA,SAAgBsB,OAAOC,OAAiC;CACtD,MAAMC,KAAKrB,eAAe,GACxBsB,SAAS,oBAAoBD,MAC7BE,SAAS,oBAAoBF;CAC/B,MAAM,CAACG,MAAMC,WAAW1B,aAAa,KAAK,GACxC,CAAC2B,UAAUC,eAAe5B,aAAa,KAAK;CAC9C,IAAI6B;CACJ,SAASI,QAAQ;EACfP,QAAQ,KAAK;CAEf;CACA,SAASS,aAAa;EACpB,OAAO,CACLN,QACA,GAAGO,MAAMC,KAGF,CAAA,CACP,CAAC,CACF,CAACE,QACCC,OACC,CAAC,CAACA,MACF,CAACA,GAAGC,QAAQ,UAAU,KACtBD,GAAGE,eAAe,CAAC,CAACC,SAAS,KAC7BC,iBAAiBJ,EAAE,CAAC,CAACK,eAAe,YACpC,CAACT,MAAMC,KAAsD,CAAA,CAAE,CAAC,CAACS,MAC9DC,YACCA,QAAQC,SAASR,EAAE,KACnB,CAACO,QAAQE,cAAc,SAAS,CAAC,EAAED,SAASR,EAAE,CAClD,KACA,CAACA,GAAGU,aAAa,UAAU,CAC/B;CACF;CACAhD,cAAc;EACZ0B,YAAY,IAAI;EAChB,IAAI,OAAOuB,OAAOC,eAAe,YAAY;GAC3C,MAAMC,QAAQF,OAAOC,WAAW,uBAAuB;GACvD,MAAME,eAAe;IACnB,IAAI,CAACD,MAAME,SAAS7B,QAAQ,KAAK;GACnC;GACA2B,MAAMG,iBAAiB,UAAUF,MAAM;GACvCnD,gBAAgBkD,MAAMI,oBAAoB,UAAUH,MAAM,CAAC;EAC7D;EACA,SAASI,IAAIC,OAAsB;GACjC,IAAI,CAAClC,KAAK,GAAG;GACb,IAAIkC,MAAMD,QAAQ,UAAU;IAC1BC,MAAME,eAAe;IACrB5B,MAAM;GACR;GACA,IAAI0B,MAAMD,QAAQ,OAAO;IACvB,MAAMI,QAAQ3B,WAAW,GACvB4B,QAAQD,MAAM,IACdE,OAAOF,MAAMG,GAAG,EAAE;IACpB,IAAIN,MAAMO,YAAYC,SAASC,kBAAkBL,OAAO;KACtDJ,MAAME,eAAe;KACrBG,MAAM9B,MAAM;IACd,OAAO,IAAI,CAACyB,MAAMO,YAAYC,SAASC,kBAAkBJ,MAAM;KAC7DL,MAAME,eAAe;KACrBE,OAAO7B,MAAM;IACf;GACF;EACF;EACAiC,SAASX,iBAAiB,WAAWE,GAAG;EACxCvD,gBAAgBgE,SAASV,oBAAoB,WAAWC,GAAG,CAAC;CAC9D,CAAC;CACD,OAAAW,IAAAC,UAAAC,gBAAA,GAAAC,aAAA,4BAAAC,OAG8BpD,MAAMf,sBAAsB,QAAM,IAAA,GAAA,KAAA,IAAAkE,aAAA,gBAAAC,OAC9CpD,MAAMT,SAAO,IAAA,GAAA,KAAA,IAAA4D,aAAA,iBACZ7C,SAAS,IAAI,SAAM8C,OAAGC,KAAAA,GAAS,IAAA,GAAA,KAAA,GAEQ,IAAAD,OAAIjD,QAAM,IAAA,KAAEiD,OAC/DpD,MAAMb,OAAOC,IAAI,GAAA+D,aAAA,iBAAAC,OAOHlD,QAAM,IAAA,GAAA,KAAA,IAAAiD,aAAA,iBAAAC,OACNhD,KAAK,GAAC,IAAA,GAAA,KAAA,GAWlBA,KAAK,IAACgD,OAAGpD,MAAMb,OAAOG,SAAS,IAAA8D,OAAGpD,MAAMb,OAAOE,QAAQ,GAAA8D,aAAA,aAAAC,OAK/CE,OAAOlD,KAAK,CAAC,GAAC,IAAA,GAAA,KAAA,GAAA+C,aAAA,MAAAC,OAKrBlD,QAAM,IAAA,GAAA,KAAA,GAAAiD,aAAA,aAAAC,OAECE,OAAOlD,KAAK,CAAC,GAAC,IAAA,GAAA,KAAA,GAAAgD,OAUxBpD,MAAML,SAAS,GAAAyD,OACfpD,MAAMN,UAAU,GAAA0D,OAChBpD,MAAMJ,OAAO,GAAAuD,aAAA,MAAAC,OAENjD,QAAM,IAAA,GAAA,KAAA,GAAAgD,aAAA,cAAAC,OAGApD,MAAMd,gBAAgB,aAAW,IAAA,GAAA,KAAA,GAE5Cc,MAAMR,UAAMwD,IAAAO,WAAAL,gBAAA,GAAAE,OACyBpD,MAAMR,MAAM,CAAA,GACjD4D,OACApD,MAAMF,QAAQ,GACdE,MAAMH,UAAMmD,IAAAQ,WAAAN,gBAAA,GAAAE,OACyBpD,MAAMH,MAAM,CAAA,CACjD;AAKX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjFA,SAAgBsG,aAAaC,OAAuC;CAClE,OAAAC,gBACGxC,QAAM;EAAA,IACLkC,SAAM;GAAA,OAAEK,MAAML;EAAM;EAAA,IACpBZ,UAAO;GAAA,OAAEiB,MAAMjB;EAAO;EAAA,IACtBmB,YAAS;GAAA,OAAA,CAAAC,IAAAC,UAAAC,gBAAA,GAAAC,aAAA,QAAAC,OAEoCP,MAAMf,MAAMrB,MAAI,IAAA,GAAA,KAAA,GAAA0C,aAAA,OAAAC,OAC7CP,MAAMf,MAAME,MAAI,IAAA,GAAA,KAAA,GAAAoB,OACjBP,MAAMf,MAAMC,IAAI,CAAA,GAAAe,gBAE1B3C,MAAI;IAAA,IAACkD,OAAI;KAAA,OAAEC,WAAA,CAAA,CAAAT,MAAMZ,OAAO,CAAA,CAAA,KAAIY,MAAMZ,QAAQsB,SAAS;IAAC;IAAA,IAAAZ,WAAA;KAAA,OAAAK,IAAAQ,WAAAN,gBAAA,GAAAE,OAAAN,gBAEhD5C,KAAG;MAAA,IAACuD,OAAI;OAAA,OAAEZ,MAAMZ;MAAO;MAAAU,WACpBe,QAAGV,IAAAW,WAAAT,gBAAA,GAAAE,OAEIM,IAAIhD,KAAK,GAAA0C,OACTM,IAAIxB,KAAK,CAAA;KAEjB,CAAA,CAAA,CAAA;IAAA;GAAA,CAAA,CAAA;EAAA;EAAA,IAMXC,aAAU;GAAA,OACRU,MAAMV,cAAUW,gBACbzC,SAAO;IAAA,IACNuB,UAAO;KAAA,OAAEiB,MAAMjB;IAAO;IAAA,IACtBC,aAAU;KAAA,OAAEgB,MAAMhB;IAAU;IAAA,IAC5BP,MAAG;KAAA,OAAEuB,MAAMvB,OAAO,CAAA;IAAE;IAAA,IACpBkB,SAAM;KAAA,OAAEK,MAAML;IAAM;IAAA,IACpBJ,iBAAc;KAAA,OAAES,MAAMT;IAAc;IAAA,IACpCC,wBAAqB;KAAA,OAAEQ,MAAMR;IAAqB;IAAA,IAClDC,yBAAsB;KAAA,OAAEO,MAAMP;IAAsB;GAAA,CAAA;EAEvD;EAAA,IAEHsB,UAAO;GAAA,OACLN,WAAA,CAAA,CAAAT,MAAMH,IAAI,CAAA,CAAA,KAAAM,IAAAa,WAAAX,gBAAA,GAAAE,OAAyCP,MAAMH,IAAI,CAAA;EAAO;EAAA,IAEtED,SAAM;GAAA,OAAAO,IAAAc,SAAAZ,gBAAA,GAAAE,OAAAN,gBAGC3C,MAAI;IAAA,IAACkD,OAAI;KAAA,OAAER,MAAMJ,OAAOjB;IAAO;IAAA,IAAAmB,WAAA;KAAA,OAAAK,IAAAe,WAAAb,gBAAA,GAAAE,OACOP,MAAMJ,OAAOjB,OAAO,CAAA;IAAA;GAAA,CAAA,CAAA,GAAA4B,OAEtDP,MAAMJ,OAAOhB,KAAK,GAAA2B,OAAAN,gBAExB3C,MAAI;IAAA,IAACkD,OAAI;KAAA,OAAER,MAAMJ,OAAOf;IAAO;IAAA,IAAAiB,WAAA;KAAA,OAAAK,IAAAgB,SAAAd,gBAAA,GAAAE,OAE3BP,MAAMJ,OAAOf,OAAO,CAAA;IAAA;GAAA,CAAA,CAAA,CAAA;EAAA;EAAA,IAAAiB,WAAA;GAAA,OAM5BE,MAAMF;EAAQ;CAAA,CAAA;AAGrB;;;;;;;;AC5HyB;CACvB;CAAW;CAA0B;CACrC;CAA0B;CAA4B;AAAiC,CACxF,CAACwC,KAAK,GAAG;AAyCV,SAAgBlB,OAAOuD,OAAoB;CACzC,MAAMC,YAAY/C,eAAe;CACjC,MAAMsB,WAAWwB,MAAMxB,MAAM,cAAcyB;CAC3C,MAAM,CAACC,OAAOC,YAAYlD,aAA0B;CACpD,MAAMmD,MAAMzD,iBAAiB;EAC3B6B,IAAIA,GAAG;EAAGX,MAAMmC,MAAMnC;EAAMC,aAAakC,MAAMlC;EAC/CC,eAAesC,YAAYL,MAAMjC,eAAesC,QAAQxC,IAAI;EAC5DQ,eAAe2B,MAAM3B,iBAAiB;EACtCiC,wBAAwBN,MAAM1B,kBAAkB;EAChDmB,iBAAiBO,MAAMP;EACvBc,sBAAsBP,MAAMV,eAAe,KAAK;EAChDkB,oBAAoBR,MAAMT,aAAa,KAAK;EAC5CC,cAAcQ,MAAMR,gBAAgB;EAGpCiB,OAAO,CAACT,MAAMJ;EACdc,WAAW,CAACV,MAAMJ;EAClBe,eAAe;EACflC,MAAMuB,MAAMvB,QAAQ;EACpBmC,oBAAoBrD,WAAW,CAAA,IAAKyC,MAAMJ,4BAA4B,CAAC,CAACiB,QAAQC,YAAoCC,QAAQD,OAAO,CAAC,CAAC,CAACE,KAAIF,kBAAiBA,OAAO;EAClKG,KAAK;GAAEC,SAAS1C,GAAG;GAAGR,OAAO,GAAGQ,GAAG,EAAC;GAAUN,aAAa,GAAGM,GAAG,EAAC;EAAe;CACnF,EAAE;CACF,MAAMX,OAAOb,iBAAiBoD,IAAI,CAAC,CAACvC,IAAI;CACxCd,mBAAmB;EACjB,MAAMmE,UAAUhB,MAAM;EACtB,IAAI,CAACrC,KAAK,KAAK,CAACmC,MAAMJ,6BAA6B,CAACsB,SAAS;EAC7D,MAAMC,SAASD,QAAQE,cAAcC;EACrC,IAAIC;EACJ,IAAIC;EACJ,MAAM,CAACC,OAAOC,YAAYxE,aAAa,KAAK;EAC5C,MAAMyE,mBAAmB,CAACR,SAAS,GAAGlB,MAAMJ,0BAA2B,CAAC,CAACiB,QAAQC,YAAoCC,QAAQD,SAASa,eAAeb,QAAQM,kBAAkBF,QAAQE,aAAa,CAAC,CAAC;EACtM,MAAMvB,QAAQqB,QAAQE,cAAcQ,YAAaC,4BAA4B;GAC3EP,OAAO,IAAIzE,UAAU6E,WAAW,GAAG;IACjCI,UAAUZ,QAAQE;IAClBW,mBAAmB;IAAOC,mBAAmB;IAAMrB,eAAe;IAClEsB,mBAAmB;IAAOC,eAAehB;IAASiB,eAAe;IACjE7C,oBAAoBU,MAAMV,eAAe,KAAK8C,KAAAA;IAC9CC,sBAAsBrC,MAAMT,aAAa,MAAM4B,kBAAkBtC,eAAesC,OAAOQ,cAAcR,SAAS;GAChH,CAAC;GACDM,SAAS,IAAI;GACbH,KAAKgB,SAAS;EAChB,CAAC;EACDvF,mBAAmB;GACjB,IAAI,CAACyE,MAAM,GAAG;GACd,MAAMe,UAAUb,WAAW;GAC3BJ,KAAMkB,wBAAwBD,OAAO;GACrChB,kBAAkB;GAClBA,kBAAkBzE,WAAWyF,SAAS,EAAEE,OAAO,MAAM,CAAC;EACxD,CAAC;EACDtF,gBAAgB;GACd+D,QAAQE,cAAcQ,YAAac,qBAAqB7C,KAAK;GAC7D0B,kBAAkB;GAClBD,MAAMqB,WAAW,EAAEC,aAAa5C,MAAMR,iBAAiB,MAAM,CAAC;EAChE,CAAC;CACH,CAAC;CACD,MAAMqD,OAAOC,MAAcC,UAAmBtF,QAAQuC,MAAMlB,WAAWsD,KAAAA,IAAYU,MAAMC,KAAK;CAC9F,MAAMC,gBAAgB;EACHpG,mBAAmB;EACpC,MAAMsG,iBAAiBC,UAAcC,gBAAM9F,SAAO+F,aAAA,EAAA,IAACC,YAAS;GAAA,OAAEtD,MAAMtB,aAAa;EAAK,EAAA,SAC/EyE,MAAsF,CAAC,CAAC,CAAC,CAAA;EAQhG,OAAAC,gBAAQ1G,SAAU6G,YAAU;GAAA,KAAA,WAAA;IAAA,OAAQV,IAAI,sBAAsB7C,MAAMjB,YAAY;GAAC;GAAA,IAAAZ,WAAA;IAAA,OAAAiF,gBAChF1G,SAAUsG,SAAOK,mBAAKrD,MAAMb,cAAY,EAAA,KAAA,WAAA;KAAA,OAAwB0D,IAAI,cAAc7C,MAAMzB,KAAK;IAAC,EAAA,SACxFyB,MAAMtB,YAAY,EAAE8E,SAASN,cAAc,IAAI,CAAC,GAAC;KAAA,IACtDzE,OAAI;MAAA,OAAEuB,MAAMvB,QAAQ;KAAQ;KAAA,cAAA;KAAA,KAAA,sBAAA;MAAA,OAAsCiF,WAAA,CAAA,CAAA1D,MAAM9B,WAAW,CAAA,CAAA,IAAG,GAAGM,GAAG,EAAC,gBAAiB4D,KAAAA;KAAS;KAAA,IAAAjE,WAAA;MAAA,cAC/G;OACN,MAAM2B,QAA0B;QAC9B,IAAI9B,QAAQ;SAAE,OAAAoF,gBAAQ1G,SAAUiH,OAAK;UAAA,KAAA,WAAA;WAAA,OAAQd,IAAI,qBAAqB7C,MAAMhB,UAAU;UAAC;UAAA,IAAAb,WAAA;WAAA,OAAG6B,MAAMhC;UAAK;SAAA,CAAA;QAAqB;QAC1H,IAAIE,cAAc;SAAE,OAAO8B,MAAM9B,eAAWkF,gBAAK1G,SAAUkH,aAAW;UAAA,KAAA,WAAA;WAAA,OAAQf,IAAI,oBAAoB7C,MAAMf,gBAAgB;UAAC;UAAA,IAAAd,WAAA;WAAA,OAAG6B,MAAM9B;UAAW;SAAA,CAAA;QAA2B;QAC5K,IAAIC,WAAW;SAAE,OAAO6B,MAAM7B;QAAU;QACxC,IAAIC,UAAU;SAAE,OAAO4B,MAAM5B,WAAOyF,IAAAC,UAAAC,gBAAA,IAAAC,aAAA,SAAAC,OAAgBpB,IAAI,uBAAuB7C,MAAMd,YAAY,GAAC,IAAA,GAAA,KAAA,GAAA+E,OAAGjE,MAAM5B,OAAO,CAAA;QAAS;OAC7H;OACA,OAAO4B,MAAMH,QAAQG,MAAMH,MAAMC,KAAK,IAAC;QAAMA,MAAM9B;QAAO8B,MAAM5B;QAAa4B,MAAM3B;QAAU2B,MAAM1B;OAAO;MAC5G,EAAA,CAAG;KAAC;IAAA,CAAA,CAAA;GAAA;EAAA,CAAA;CAGR;CACA,OAAAgF,gBAAQ1G,SAAUwH,cAAY;EAACC,OAAO/D;EAAKgE,WAAS;EAACC,eAAa;EAAA,IAAAlG,WAAA;GAAA,OAAAiF,gBAC/DhG,MAAI;IAAA,IAACkH,OAAI;KAAA,OAAEtE,MAAMrB;IAAM;IAAA,IAAE4F,WAAQ;KAAA,OAAAnB,gBAAGJ,SAAO,CAAA,CAAA;IAAA;IAAA,IAAA7E,WAAA;KAAA,OAAAiF,gBAAM5F,QAAM6F,mBAAMrD,MAAMpB,cAAc,EAAE4F,OAAOxE,MAAMpB,YAAY,IAAI,CAAC,GAAC,EAAA,IAAAT,WAAA;MAAA,OAAAiF,gBAAIJ,SAAO,CAAA,CAAA;KAAA,EAAA,CAAA,CAAA;IAAA;GAAA,CAAA;EAAA;CAAA,CAAA;AAElI;;;;ACnHA,SAAgByB,WAAWkB,OAAwB;CAC5BA,MAAMZ,SAASY,MAAMN;CAC1C,OAAAQ,gBAAQnB,aAAcoB,MAAI;EAAA,IACxBf,QAAK;GAAA,OAAEY,MAAMZ;EAAK;EAAA,IAAEM,eAAY;GAAA,OAAEM,MAAMN;EAAY;EAAA,IACpDE,OAAI;GAAA,OAAEI,MAAMJ;EAAI;EAAA,IAAEC,OAAI;GAAA,OAAEG,MAAMH;EAAI;EAAA,IAAEN,WAAQ;GAAA,OAAES,MAAMT;EAAQ;EAAA,IAAEO,WAAQ;GAAA,OAAEE,MAAMF;EAAQ;EACtFH,gBAAgBS,YAAY;GAAE,IAAIA,QAAQhB,UAAU,MAAMY,MAAML,gBAAgBS,QAAQhB,KAAK;EAAG;EAAC,KAAA,WAAA;GAAA,OAC1FF,QAAQ,mBAAmBc,MAAMD,KAAK;EAAC;EAAA,IAAAM,WAAA;GAAA,OAAA,CAAAH,gBAE7CnB,aAAcuB,OAAK;IAAA,SAAA;IAAA,IAAAD,WAAA;KAAA,OAA2BL,MAAMX;IAAK;GAAA,CAAA,GAAAa,gBACzDlB,KAAG;IAAA,IAACuB,OAAI;KAAA,OAAEP,MAAMP;IAAO;IAAAY,WAAIG,WAAMN,gBAAMnB,aAAc0B,MAAI;KAAA,IAACrB,QAAK;MAAA,OAAEoB,OAAOpB;KAAK;KAAA,IAAEG,WAAQ;MAAA,OAAEiB,OAAOjB;KAAQ;KAAA,SAAA;KAAA,IAAAc,WAAA;MAAA,OAAA,CAAAH,gBACtGnB,aAAc2B,iBAAe;OAAA,SAAA;OAA0BC,OAAO,CAAC;MAAC,CAAA,GAAAT,gBAEhEnB,aAAc6B,UAAQ,EAAA,IAAAP,WAAA;OAAA,OAAEG,OAAOnB;MAAK,EAAA,CAAA,CAAA;KAAA;IAAA,CAAA;GAClB,CAAA,CAAA;EAAA;CAAA,CAAA;AAEzB;;;;;;;;;AC1BA,SAAgBsC,KAAKC,OAAkB;CACrC,MAAM,CAACC,OAAOC,QAAQd,WAAWY,OAAO;EAAC;EAAQ;EAAS;EAAQ;EAAe;CAAO,CAAC;CACzF,MAAMG,aAAajB,MAAMe,MAAMN;CAC/B,MAAMG,oBAAoBG,MAAMH,eAAeb,gBAAgBmB,YAAYC,SAASJ,MAAMN,IAAI;CAC9F,OAAAW,WAAA,OAAAC,aAEQL,MAAI;EAAA,KAAA,WAAA;GAAA,OACDZ,QAAQQ,YAAY,KAAKb,gBAAgBwB,UAAUR,MAAMO,KAAK;EAAC;EAAA,IACtEE,UAAO;GAAA,OAAEP,KAAK,CAAC,CAACO;EAAO;EAAA,IACvBC,QAAK;GAAA,OAAEV,MAAMJ,QAAQ;EAAE;EAAA,IACvBe,SAAM;GAAA,OAAEX,MAAMJ,QAAQ;EAAE;EACxBgB,MAAK;EACLC,QAAO;EAAc,KAAA,kBAAA;GAAA,OACPX,KAAK,CAAC,CAACa;EAAW;EAAA,kBACjB;EAAO,mBACN;EAAO,IACvBC,OAAI;GAAA,OAAEhB,MAAML,QAAQ,QAAQsB,KAAAA;EAAS;EAAA,KAAA,gBAAA;GAAA,OACzBjB,MAAML;EAAK;EAAA,KAAA,iBAAA;GAAA,OACVK,MAAML,QAAQsB,KAAAA,IAAY;EAAM;CAAA,CAAA,SAAA;EAAA;EAE5CjB,MAAML,SAAKyB,IAAAC,WAAAC,gBAAA,GAAAC,OAAYvB,MAAML,KAAK,CAAA;EAAS;EAAAyB,IAAAI,UAC9BtB,KAAK,CAAC,CAACuB,IAAI;CAAA,GAAA,IAAA;AAG/B;;;;ACCA,SAAgB,sBAAmE;CACjF,MAAM,CAAC,SAAS,cAAc,aAAuB,IAAI;CACzD,IAAI,SAAiC;CACrC,IAAI,WAAW;CACf,MAAM,aAAa;EACjB,QAAQ,MAAM;EACd,SAAS;CACX;CACA,IAAI,SAAS,GAAG,gBAAgB;EAAE,WAAW;EAAM,KAAK;CAAG,CAAC;CAC5D,OAAO;EACL;EACA,YAAY,QAAQ,MAAM;EAC1B,KAAK,QAAQ,QAAQ,MAAM;EAC3B,MAAM,IAAI,KAAK,MAAM,SAAS;GAC5B,IAAI,YAAa,UAAU,CAAC,SAAS,SAAU,OAAO,KAAA;GACtD,KAAK;GACL,MAAM,aAAa,IAAI,gBAAgB;GACvC,SAAS;GACT,iBAAiB,GAAG;GACpB,IAAI;IACF,OAAO,MAAM,KAAK,WAAW,MAAM;GACrC,UAAU;IACR,IAAI,WAAW,YAAY;KACzB,SAAS;KACT,WAAW,IAAI;IACjB;GACF;EACF;EACA,QAAQ;GACN,KAAK;GACL,WAAW,IAAI;EACjB;CACF;AACF;;;;;;;;;;;;;;;;AC1DA,SAAgBI,iBAAmCC,QAIhD;CACD,MAAMU,OAAO,IAAIC,IAAYX,OAAOQ,eAAe,CAAA,CAAE;CACrD,OAAO,SAASI,WAAWC,OAAkE;EAC3F,MAAME,aAAaf,OAAOC,MAAMY,MAAMR,OAAO,GAAGQ,MAAMP;EACtD,MAAMF,cAAcJ,OAAOI,MAAMS,MAAMR,QAAQQ,MAAMP,OAAOO,MAAMN,MAAM;EACxE,MAAMS,cAAcC,QAAQF,KAAK,KAAKX,MAAM,CAAC;EAC7C,MAAMc,iBAAiB;GACrB,MAAMC,QAAQJ,KAAK;GACnB,IAAI,CAACI,OAAO,MAAM,IAAIC,MAAM,2BAA2BP,MAAMR,OAAM,GAAIQ,MAAMP,OAAO;GACpF,MAAMe,OAAOjB,MAAM;GACnB,IAAI,CAACiB,MAAM,MAAM,IAAID,MAAM,4BAA4BP,MAAMR,OAAM,GAAIQ,MAAMP,OAAO;GACpF,OAAO;IAAES,MAAMI;IAAOE;GAAK;EAC7B;EACA,OAAAC,gBACG1B,MAAI;GAAA,IAAC2B,OAAI;IAAA,OAAEP,MAAM,KAAK,CAACN,KAAKc,IAAIX,MAAMR,MAAM;GAAC;GAAA,IAAEoB,WAAQ;IAAA,OAAAC,IAAAC,UAAAC,gBAAA,GAAqB,GAAAC,OAAGhB,MAAMR,QAAM,IAAA,EAAA,GAAAwB,OAAIhB,MAAMP,OAAK,IAAA,KAAEuB,OAAGhB,MAAMP,KAAK,CAAA;GAAA;GAAA,IAAAwB,WAAA;IAAA,cACjH;KACN,MAAMxB,QAAQY,SAAS;KACvB,OAAAQ,IAAAK,WAAAH,gBAAA,IAAAI,aAAA,SAEW1B,MAAMS,SAAS,YAAY,cAAc,wBAAAc,OAAwBvB,MAAMS,MAAI,IAAA,KAAE,KAAA,GACvE,GAAAc,OAAGhB,MAAMR,QAAM,IAAA,EAAA,GAAAwB,OAAIhB,MAAMP,OAAK,IAAA,KAAE0B,aAAA,aAAAH,OAClCvB,MAAMS,MAAI,IAAA,GAAA,KAAA,GAAAc,OAEpBvB,MAAMe,IAAI,CAAA;IAGjB,EAAA,CAAG;GAAC;EAAA,CAAA;CAGV;AACF;;;ACzBA,SAAgBY,KAAK0B,OAAkB;CACrC,MAAMG,YAAYzB,eAAe;CACjC,MAAMe,WAAWO,MAAMP,MAAM,YAAYU;CACzC,IAAIC;CACJ,MAAMC,YAAYrB,mBAAmBoB,YAAYJ,MAAMN,GAAG;CAC1D,MAAMY,QAAQN,MAAMD,WAAWQ,UAAmBP,MAAMD,QAASpB,WAC9D4B,MAA4F,CAAC,CAAC,GAC/F,EAAEC,MAAMC,YAA4B;EAAEL,OAAOK;CAAS,EAAE,CAC1D,CAAC,IAAIC,KAAAA;CACL,OAAAC,gBAAQlC,gBAAc;EAAA,IAACmC,SAAM;GAAA,OAAEP,UAAU,MAAM,QAAQ,OAAO;EAAI;EAAA,IAAAd,WAAA;GAAA,OAAAoB,gBAAGpC,OAAQsC,MAAIC,aAAA;IAAA,IAC/ErB,KAAE;KAAA,OAAEA,GAAG;IAAC;IAAA,IAAEN,QAAK;KAAA,OAAEa,MAAMb;IAAK;IAAA,IAAEC,eAAY;KAAA,OAAEY,MAAMZ;IAAY;IAAA,IAC9DE,cAAW;KAAA,OAAEU,MAAMV,eAAe;IAAY;IAAA,IAAEK,iBAAc;KAAA,OAAEK,MAAML,kBAAkB;IAAW;IACnGN,gBAAgB0B,YAAYf,MAAMX,gBAAgB0B,QAAQ5B,KAAK;IAC/D6B,WAAW;IAAOC,eAAe;IAAK,KAAA,WAAA;KAAA,OAASjB,MAAMF,WAAWY,KAAAA,IAAY;IAAe;GAAA,GACtFJ,QAAQ,EAAEP,SAASO,MAAM,IAAI,CAAC,GAAC;IACpCa,KAAK;KAAEC,UAAUjC,UAAUa,MAAMJ,QAAQT,KAAK,KAAK,GAAGM,GAAG,EAAC,OAAQN;KAASkC,UAAUlC,UAAUa,MAAMH,UAAUV,KAAK,KAAK,GAAGM,GAAG,EAAC,SAAUN;IAAQ;IAAC,IAAAI,WAAA;KAAA,OACnJS,MAAMT;IAAQ;GAAA,CAAA,CAAA;EAAA;CAAA,CAAA;AAClB;AAEA,SAAgB+B,QAAQtB,OAAiF;CACvG,MAAM,CAACuB,OAAOC,QAAQ5C,WAAWoB,OAAO;EAAC;EAAS;EAAY;CAAU,CAAC;CACzE,OAAAW,gBAAQpC,OAAQkD,MAAIX,aAAKU,MAAI;EAAA,KAAA,WAAA;GAAA,OAASzC,QAAQ,CAACwC,MAAMzB,YAAY,YAAYyB,MAAML,KAAK;EAAC;EAAA,IAAA3B,WAAA;GAAA,OAAGgC,MAAMhC;EAAQ;CAAA,CAAA,CAAA;AAC5G;AASA,SAAgBuC,IAAI9B,OAA8B;CAChD,MAAM,CAACuB,OAAOC,QAAQ5C,WAAWoB,OAAO;EAAC;EAAS;EAAY;EAAS;EAAY;CAAS,CAAC;CAE7F,MAAMM,QAAQiB,MAAMxB,WAAWQ,UAAmBgB,MAAMxB,QAASpB,WAC9D4B,MAA8G,CAAC,CAAC,GACjH,EAAEC,KAAKR,MAAMQ,IAAI,CACnB,CAAC,IAAIE,KAAAA;CACL,OAAAC,gBAAQpC,OAAQwD,SAAOjB,aAAKU,MAAI;EAAA,IAAErC,QAAK;GAAA,OAAEoC,MAAMpC;EAAK;EAAA,KAAA,WAAA;GAAA,OAASJ,QAAQ,CAACwC,MAAMzB,YAAY,WAAWyB,MAAML,KAAK;EAAC;CAAA,GAAOZ,QAAQ,EAAEP,SAASO,MAAM,IAAI,CAAC,GAAC,EAAA,IAAAf,WAAA;EAAA,OAAIgC,MAAMhC;CAAQ,EAAA,CAAA,CAAA;AACzK;AAIA,SAAgB0C,SAASjC,OAAmC;CAC1D,MAAM,CAACuB,OAAOC,QAAQ5C,WAAWoB,OAAO;EAAC;EAAS;EAAY;CAAO,CAAC;CACtE,MAAMkC,OAAO1D,eAAe;CAC5B,MAAM2D,iBAAiBD,KAAK,CAAC,CAAC/C,UAAUoC,MAAMpC;CAC9C,MAAMiD,cAAc,CAACD,SAAS,IAAIZ,MAAMa,QAAQ,OAAOb,MAAMa,UAAU,WACnE,GAAGb,MAAMa,MAAMC,QAAQ,UAAU,EAAE,EAAC,kBACpC;EAAE,GAAGd,MAAMa;EAAOE,SAAS;CAAO;CACtC,OAAA3B,gBAAQpC,OAAQgE,SAAOzB,aAAKU,MAAI;EAAA,IAAErC,QAAK;GAAA,OAAEoC,MAAMpC;EAAK;EAAA,IAAEiD,QAAK;GAAA,OAAEA,MAAM;EAAC;EAAA,IAAEI,SAAM;GAAA,OAAEL,SAAS;EAAC;EAAA,IAAEM,QAAK;GAAA,OAAEN,SAAS;EAAC;EAAA,IAAA5C,WAAA;GAAA,OAAGgC,MAAMhC;EAAQ;CAAA,CAAA,CAAA;AAC9H;;;AC3DA,IAAM2E,eAAenB,cAAwB;AAW7C,SAAgB0B,cAAcC,OAA2B;CACvD,MAAMC,SAAS3B,eAAe;CAE9B,IAAI8B;CAGJ,MAAME,oBAAoBF,mBAAmB,IAAIG,MAA+BE,UAAU,EACxFC,IAAIC,QAAQC,UAAU;EACpB,IAAIA,aAAa,kBAAkB,QAAQ1B,OAAeA,OAAO,2BAAqC,OAAOyB,OAAOE,eAAe3B,EAAE;EACrI,MAAM4B,QAAQC,QAAQL,IAAIC,QAAQC,UAAUD,MAAM;EAClD,OAAO,OAAOG,UAAU,aAAaA,MAAME,KAAKL,MAAM,IAAIG;CAC5D,EACF,CAAC;CACD,MAAMG,UAAU9C,cAAc;EAC5B+C,WAAW;EAAcC,SAAS;EAAOC,KAAKhD,MAAM;EAGpDiD,SAAS;EAAuBC,aAAa;EAAGC,QAAQ,CAAC,eAAe;EACxEC,KAAKC,OAAOC;EAAkBC,iBAAiB;CACjD,CAAC;CACD,IAAIC,WAAW;CACf,MAAMC,MAAgB;EACpBzC,KAAK0C,OAAO;GACV,MAAM5C,KAAK,aAAae,OAAM,GAAI,EAAE2B;GACpC,MAAM5C,WAAW8C,MAAM9C,YAAYgB,MAAML,mBAAmB;GAC5DsB,QAAQc,OAAO;IACb7C;IAAI8C,aAAaF,MAAMjD;IAASoD,MAAMH,MAAM/C,SAAS,WAAW,UAAU+C,MAAM/C,QAAQ;IACxFC,UAAUA,WAAW,IAAIA,WAAWkD;IACpCC,MAAM,EAAEC,KAAK;KAAE,GAAGN;KAAO5C;IAAG,EAAwB;GACtD,CAAC;GACD,OAAOA;EACT;EACAI,UAAUJ,OAAO+B,QAAQoB,OAAOnD,EAAE;EAClCK,aAAa0B,QAAQoB,OAAO;CAC9B;CACA9D,UAAUsD,IAAItC,KAAK;CACnB,OAAA+C,gBAAQ9C,aAAa+C,UAAQ;EAACzB,OAAOe;EAAG,IAAAnC,WAAA;GAAA,OAAA,CACrCM,MAAMN,UAAQ4C,gBACdpE,SAAO;IAAU+C;IAAmCX;IAAapB,IAAI,oBAAoBe;IAAQ,KAAA,WAAA;KAAA,OACzFvB,QAAQ,oBAAoBsB,MAAMF,KAAK;IAAC;IAAA,IAC/C0C,OAAI;KAAA,OAAExC,MAAMH,cAAc,WAAW;IAAc;IAAA,KAAA,gBAAA;KAAA,OAAcG,MAAMH,eAAe;IAAE;IAAAH,WACvFL,UAAU;KACX,MAAMqD,eAAerD,MAAM,CAAC,CAAC8C,MAAMC;KACnC,OAAAE,gBAAQrE,MAAS0E,MAAI;MAAA,KAAA,WAAA;OAAA,OACZjE,QAAQ,aAAa,cAAcgE,OAAO,CAAC,CAAC3D,QAAQ,QAAQ;MAAC;MAAA,IACpEyD,OAAI;OAAA,OAAEE,OAAO,CAAC,CAAC3D,SAAS,WAAW,UAAU;MAAQ;MAAA,IAAAW,WAAA;OAAA,OAAA,CAAA4C,gBAEpDrE,MAAS2E,aAAW,EAAA,IAAAlD,WAAA;QAAA,OAAEL,MAAM,CAAC,CAAC2C;OAAW,EAAA,CAAA,GACzChC,MAAMJ,gBAAY0C,gBAAKrE,MAAS4E,cAAY;QAAA,SAAA;QAAA,KAAA,gBAAA;SAAA,OAE/BC,WAAA,OAAO9C,MAAMJ,iBAAiB,UAAU,CAAA,CAAA,IAAGI,MAAMJ,aAAa8C,OAAO,CAAC,IAAI1C,MAAMJ;QAAY;QAAAF,UAAA;OAAA,CAAA,CAChF;MAAA;KAAA,CAAA;IAE9B;GAAC,CAAA,CAAA;EAAA;CAAA,CAAA;AAEL;AAEA,SAAgBqD,WAAqB;CACnC,MAAMC,UAAUxE,WAAWgB,YAAY;CACvC,IAAI,CAACwD,SAAS,MAAM,IAAIC,MAAM,gDAAgD;CAC9E,OAAOD;AACT;;;;;;;;;AC7DA,SAAgBE,QAAQoB,OAAqB;CAC3C,MAAMM,YAAYvB,eAAe;CACjC,MAAMqB,WAAWJ,MAAMI,MAAM,eAAeE;CAC5C,MAAM,CAACL,MAAMM,WAAWpB,yBAAyB;EAC/CqB,aAAaR,MAAMC;EAAMQ,cAAcT,MAAME,eAAe;EAC5DQ,WAAWC,SAASX,MAAMG,eAAeQ,IAAI;CAC/C,CAAC;CACD,MAAMC,MAAM9B,kBAAkB;EAC5BsB,IAAIA,GAAG;EAAGS,KAAK,EAAEhB,SAASO,GAAG,EAAE;EAAGH,MAAMA,KAAK;EAC7CE,eAAeW,YAAYP,QAAQO,QAAQb,IAAI;EAAGc,WAAW;EAAGC,YAAY;CAC9E,EAAE;CACF,OAAAC,gBAAQpC,UAAWqC,cAAY;EAACV,OAAOI;EAAKO,WAAW;EAAOC,eAAe;EAAK,IAAArB,WAAA;GAAA,OAAAsB,IAAAC,UAAAC,gBAAA,IAAAC,aAAA,SAAAC,OACnEvC,QAAQ,eAAec,MAAMK,KAAK,GAAC,IAAA,GAAA,KAAA,GAAAoB,OAAAR,gBAC7CpC,UAAW6C,SAAO,EAACC,UAAUC,UAAU;IACtC,MAAM,GAAGC,cAAc7C,WAAW4C,MAAM,GAAG,CAAC,aAAa,YAAY,CAAC;IACtE,OAAO5B,MAAMD,SAAS;KACtB,GAAG8B;KAAY,oBAAoBzB,GAAG;KAEtCZ,eAAeoB,IAAI,CAAC,CAACL,QAAQ,IAAI;KAAGd,cAAcmB,IAAI,CAAC,CAACL,QAAQ,KAAK;KACrEb,sBAAsBkB,IAAI,CAAC,CAACL,QAAQ,IAAI;KAAGZ,sBAAsBiB,IAAI,CAAC,CAACL,QAAQ,KAAK;IACtF,CAAC;GAAG,EAAC,CAAA,CAAA,GAAAkB,OAAAR,gBACJpC,UAAWiD,YAAU,EAAA,IAAA/B,WAAA;IAAA,OAAAkB,gBACnBpC,UAAWkD,SAAO;KAAA,SAAA;KAAA,IAAAhC,WAAA;MAAA,OAA8BC,MAAMH;KAAO;IAAA,CAAA;GAAA,EAAA,CAAA,CAAA,CAAA;EAAA;CAAA,CAAA;AAItE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5CA,SAAgB0C,OAAOC,OAAiC;CAEtDP,cAAc;EACZ,MAAMW,WAAWC,UAAwB,CAKzC;EACAS,SAASC,iBAAiB,eAAeX,OAAO;EAChDV,gBAAgBoB,SAASE,oBAAoB,eAAeZ,OAAO,CAAC;CACtE,CAAC;CACD,OAAAa,IAAAC,QAAAC,gBAAA,GAAAC,aAAA,cAAAC,OAIgBrB,MAAMsB,OAAOC,KAAG,IAAA,GAAA,KAAA,GAAAF,OAAAG,gBAY3BhC,KAAG;EAAA,IAACiC,OAAI;GAAA,OAAEzB,MAAMuB;EAAG;EAAAG,WAChBC,UAAKV,IAAAW,SAAAT,gBAAA,GAAAE,OAEoCM,MAAME,KAAK,GAAAR,OAAAG,gBAE/ChC,KAAG;GAAA,IAACiC,OAAI;IAAA,OAAEE,MAAMG;GAAK;GAAAJ,WAClBK,SAAId,IAAAe,SAAAb,gBAAA,GAIU,GAAAE,OAAGrB,MAAMiC,SAAO,IAAA,EAAA,GAAAZ,OAAIU,KAAKG,IAAE,IAAA,KAAEd,aAAA,QAAAC,OACjCU,KAAKI,MAAI,IAAA,GAAA,KAAA,IAAAf,aAAA,gBAEZW,KAAKK,WACLpC,MAAMqC,eAAeN,KAAKI,QACxBJ,KAAKI,KAAKG,MAAM,GAAG,CAAC,CAACC,OAAOC,OAAO,CAAC,CAACC,SAAS,KAC7CzC,MAAMqC,WAAWK,WAAW,GAAGX,KAAKI,KAAI,EAAG,KAC3C,SAAMd,OACNsB,KAAAA,GAAS,IAAA,GAAA,KAAA,GASdZ,KAAKa,QAAQ,QAAI3B,IAAA4B,SAAA1B,gBAAA,GAAAE,OAEbU,KAAKa,IAAI,CAAA,GAEbvB,OACMU,KAAKF,KAAK,GAChBE,KAAKe,SAAS,QAAQf,KAAKe,QAAQ,KAAC7B,IAAA8B,SAAA5B,gBAAA,GAAAC,aAAA,cAAAC,OAGrBrB,MAAMsB,OAAOwB,MAAME,QAC7B,iBACMC,OAAOlB,KAAKe,KAAK,CACzB,GAAC,IAAA,GAAA,KAAA,GAAAzB,OAEAU,KAAKe,KAAK,CAAA,CAEd;EAGN,CAAA,CAAA,CAAA;CAIR,CAAA,CAAA,CAAA;AAIT"}
@@ -0,0 +1,5 @@
1
+ import { type JSX } from "solid-js";
2
+ import type { LeftNavProps } from "./left-nav";
3
+ export type TopNavProps = Pick<LeftNavProps, "surface" | "activePath" | "nav" | "labels" | "onNavigate">;
4
+ export declare function TopNav(props: TopNavProps): JSX.Element;
5
+ //# sourceMappingURL=top-nav.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"top-nav.d.ts","sourceRoot":"","sources":["../src/top-nav.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,YAAY,EACZ,SAAS,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,YAAY,CAC3D,CAAC;AACF,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,OAAO,CAkFtD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devslab/dds-solid",
3
- "version": "0.28.0",
3
+ "version": "0.29.1",
4
4
  "description": "Accessible SolidJS primitives for the DevsLab Design System",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -134,9 +134,9 @@
134
134
  },
135
135
  "dependencies": {
136
136
  "@ark-ui/solid": "5.39.3",
137
- "@devslab/dds-css": "0.28.0",
138
- "@devslab/dds-icons": "0.28.0",
139
- "@devslab/dds-tokens": "0.28.0",
137
+ "@devslab/dds-css": "0.29.1",
138
+ "@devslab/dds-icons": "0.29.1",
139
+ "@devslab/dds-tokens": "0.29.1",
140
140
  "@tanstack/solid-virtual": "3.13.48",
141
141
  "@zag-js/aria-hidden": "1.45.0",
142
142
  "@zag-js/focus-trap": "1.45.0"