@exponential_app/eui-solid 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zoomable-image-CmoMEUF6.js","sources":["../../src/icons.tsx","../../src/style.ts","../../src/platform.ts","../../src/behaviors/style-writer.ts","../../src/behaviors/portal.tsx","../../src/behaviors/presence.ts","../../src/behaviors/dismissable-layer.ts","../../src/behaviors/focus-scope.ts","../../src/behaviors/focus-guards.ts","../../src/behaviors/scroll-lock.ts","../../src/behaviors/modal.ts","../../src/behaviors/popper.tsx","../../src/behaviors/grace-area.ts","../../src/behaviors/visually-hidden.tsx","../../src/behaviors/typeahead.ts","../../src/behaviors/menu.tsx","../../src/behaviors/roving-focus.ts","../../src/behaviors/listbox.ts","../../src/behaviors/element-size.ts","../../src/behaviors/bubble-input.tsx","../../src/behaviors/image-loading-status.ts","../../src/primitives/button.tsx","../../src/behaviors/dialog.tsx","../../src/primitives/dropdown-menu.tsx","../../src/primitives/use-media-query.ts","../../src/primitives/zoomable-image.tsx"],"sourcesContent":["// FEED-128: icons on Solid (React's icons.tsx). The catalog's `Icon` names\n// come from the host's registry (`host.icons`); the renderer's OWN parts\n// draw the glyph `core.catalog.json` `builtinIcons` names (`BuiltinIcon` in\n// natives/shared.tsx), through the host first and then the fallbacks below:\n// the SAME Lucide glyphs, by the SAME names, as the React renderer.\n//\n// THE INVARIANT: an icon paints the `<svg>` lucide-react paints. lucide-solid\n// 0.544.0 carries the same SVG data as lucide-react 0.544.0 but differs in\n// its wrapper: it adds a `lucide-icon` class, renders each child's `key` as\n// an attribute, keeps `width`/`height` when they are passed undefined, and\n// never adds lucide-react's default `aria-hidden=\"true\"`. So a Lucide glyph\n// is PROBED once (its children's tags + attributes, its class tokens) and\n// painted by `LucideSvg`, which writes lucide-react's attribute set. A host\n// icon that is not a Lucide glyph is rendered as it is.\n\nimport { For, createRoot, splitProps, type JSX } from \"solid-js\"\nimport { Dynamic } from \"solid-js/web\"\nimport {\n ArrowLeft,\n AudioLines,\n Calendar,\n Check,\n CheckCheck,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n ChevronUp,\n ChevronsUpDown,\n CircleCheck,\n CircleDashed,\n CircleStop,\n CircleX,\n Clock,\n Copy,\n Ear,\n Ellipsis,\n File,\n Hand,\n Info,\n LoaderCircle,\n Maximize2,\n Menu,\n Mic,\n MicOff,\n Minus,\n Paperclip,\n PhoneIncoming,\n PhoneOff,\n Play,\n Pause,\n Plus,\n QrCode,\n ScanLine,\n Search,\n Send,\n Square,\n Star,\n TriangleAlert,\n Upload,\n Volume2,\n X,\n Icon as LucideIcon,\n} from \"lucide-solid\"\nimport type { IconNode, LucideProps } from \"lucide-solid\"\nimport { CUSTOM_ICON_NODES, lookupIcon } from \"@exponential_app/eui/web\"\nimport type { IconComponent, IconMap } from \"./host\"\n\n/** The renderer's own chrome glyphs that are NOT catalog part glyphs. */\nexport const CHROME = {\n check: Check,\n chevronDown: ChevronDown,\n chevronUp: ChevronUp,\n chevronLeft: ChevronLeft,\n chevronRight: ChevronRight,\n close: X,\n search: Search,\n calendar: Calendar,\n send: Send,\n stop: Square,\n play: Play,\n pause: Pause,\n attach: Paperclip,\n spinner: LoaderCircle,\n placeholder: CircleDashed,\n} as const\n\n/** icons.json concept / registry names → the Lucide glyph icons.json gives\n * them, for every name the catalog's `builtinIcons` and the core macros\n * draw (React's table, name for name). */\nexport const FALLBACK_ICONS: Record<string, IconComponent> = {\n \"ui-check\": Check,\n \"ui-chevron-down\": ChevronDown,\n \"ui-chevron-up\": ChevronUp,\n \"ui-chevron-left\": ChevronLeft,\n \"ui-chevron-right\": ChevronRight,\n \"ui-selector\": ChevronsUpDown,\n \"ui-close\": X,\n \"ui-copy\": Copy,\n \"ui-file\": File,\n \"ui-minus\": Minus,\n \"ui-add\": Plus,\n \"ui-clock\": Clock,\n \"ui-info\": Info,\n \"ui-success\": CircleCheck,\n \"ui-warning\": TriangleAlert,\n \"ui-error\": CircleX,\n \"ui-stop\": CircleStop,\n \"ui-attach\": Paperclip,\n \"ui-send\": Send,\n \"ui-back\": ArrowLeft,\n \"ui-more\": Ellipsis,\n \"ui-menu\": Menu,\n \"ui-search\": Search,\n \"ui-icon-placeholder\": CircleDashed,\n // VAPP-162: the round-5 pieces (MessageBubble, CallSurface, QrScanner, the hold button).\n \"ui-read\": CheckCheck,\n \"ui-scan\": ScanLine,\n \"ui-qr-code\": QrCode,\n \"ui-hold\": Hand,\n // EXP-1586: the ZoomableImage pill's fit button.\n \"ui-fullscreen\": Maximize2,\n \"voice-level\": AudioLines,\n \"call-mute\": Mic,\n \"call-unmute\": MicOff,\n \"call-speaker\": Volume2,\n \"call-speaker-off\": Ear,\n \"call-end\": PhoneOff,\n \"call-incoming\": PhoneIncoming,\n calendar: Calendar,\n search: Search,\n upload: Upload,\n star: Star,\n // VAPP-163: the icons.json names a Lucide registry has no glyph for (the\n // OS marks, the progress pies), React's table name for name.\n ...Object.fromEntries(Object.entries(CUSTOM_ICON_NODES).map(([name, node]) => [name, (props: LucideProps) => <LucideIcon {...props} name={name} iconNode={node as IconNode} />])),\n}\n\nexport function resolveIcon(icons: IconMap | undefined, name: string): IconComponent | undefined {\n return lookupIcon(icons, name, FALLBACK_ICONS)\n}\n\n/** A probed Lucide glyph: its class tokens (lucide-react's: `lucide-<name>`\n * twice, deduplicated) and its children. */\ninterface LucideShape {\n classes: string[]\n nodes: [string, Record<string, string>][]\n}\n\nconst shapes = new WeakMap<IconComponent, LucideShape | null>()\n\nfunction probe(icon: IconComponent): LucideShape | null {\n if (shapes.has(icon)) return shapes.get(icon)!\n let shape: LucideShape | null = null\n if (typeof document !== `undefined`) {\n try {\n createRoot((dispose) => {\n const el = icon({}) as unknown\n if (el instanceof Element && el.localName === `svg` && el.classList.contains(`lucide`)) {\n const classes = Array.from(el.classList).filter((c) => c !== `lucide` && c !== `lucide-icon`)\n const nodes = Array.from(el.children).map((child): [string, Record<string, string>] => {\n const attrs: Record<string, string> = {}\n for (const a of Array.from(child.attributes)) if (a.name !== `key`) attrs[a.name] = a.value\n return [child.localName, attrs]\n })\n shape = { classes, nodes }\n }\n dispose()\n })\n } catch {\n shape = null\n }\n }\n shapes.set(icon, shape)\n return shape\n}\n\nconst mergeClasses = (...classes: (string | undefined)[]): string => classes.filter((c, i, all): c is string => Boolean(c) && c!.trim() !== `` && all.indexOf(c) === i).join(` `).trim()\n\nexport type LucideSvgProps = JSX.SvgSVGAttributes<SVGSVGElement> & { shape: LucideShape; size?: number | string; class?: string; \"data-icon\"?: string; \"data-icon-missing\"?: string; \"data-slot\"?: string }\n\n/** lucide-react's `<svg>` for a probed glyph: its defaults (`width`/`height`\n * = `size` ?? 24 unless passed explicitly, even undefined), `class=\"lucide\n * lucide-<name> <class>\"`, `aria-hidden=\"true\"` unless an a11y prop is\n * passed, the children without their `key`. */\nfunction LucideSvg(props: LucideSvgProps) {\n const [local, rest] = splitProps(props, [`shape`, `size`, `class`])\n const hasA11y = () => Object.keys(rest).some((k) => k.startsWith(`aria-`) || k === `role` || k === `title`)\n const size = () => local.size ?? 24\n // React spreads `rest` last: a key present in it wins even when undefined.\n const attr = (name: string, fallback: unknown) => (name in rest ? (rest as Record<string, unknown>)[name] : fallback)\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden={hasA11y() ? undefined : `true`}\n {...rest}\n width={attr(`width`, size()) as string | undefined}\n height={attr(`height`, size()) as string | undefined}\n class={mergeClasses(`lucide`, mergeClasses(...local.shape.classes, local.class))}\n >\n <For each={local.shape.nodes}>{([tag, attrs]) => <Dynamic component={tag} {...attrs} />}</For>\n </svg>\n )\n}\n\n/** One icon as lucide-react paints it (a Lucide glyph through `LucideSvg`,\n * any other host component as it is). */\nexport function PaintIcon(props: { icon: IconComponent } & JSX.SvgSVGAttributes<SVGSVGElement> & { size?: number | string; class?: string; [data: `data-${string}`]: string | undefined }) {\n const [local, rest] = splitProps(props, [`icon`])\n return (\n <Dynamic\n component={(() => {\n const icon = local.icon\n const shape = probe(icon)\n return shape ? (p: Omit<LucideSvgProps, `shape`>) => <LucideSvg shape={shape} {...p} /> : icon\n })()}\n {...rest}\n />\n )\n}\n\nexport function IconGlyph(props: { icons?: IconMap; name: string; size?: number; class?: string } & JSX.SvgSVGAttributes<SVGSVGElement> & { [data: `data-${string}`]: string | undefined }) {\n const [local, rest] = splitProps(props, [`icons`, `name`, `size`, `class`])\n const resolved = () => resolveIcon(local.icons, local.name)\n return (\n <PaintIcon\n icon={resolved() ?? CircleDashed}\n aria-hidden=\"true\"\n data-icon={local.name}\n data-icon-missing={resolved() ? undefined : `true`}\n size={local.size}\n class={local.class}\n {...rest}\n />\n )\n}\n","// FEED-128: React's inline-style semantics for the Solid renderer. A\n// painter writes the SAME style object as its React twin (camelCase keys,\n// numbers for lengths) and passes it through `css()`, which does what\n// react-dom's `setValueForStyle` does: camelCase → kebab-case (`ms` →\n// `-ms-`), a non-zero number gets `px` unless the property is unitless\n// (React's own list), strings are trimmed, null / boolean / '' drop the\n// property, custom properties (`--x`) pass as they are. Key order is kept,\n// so the serialised `style` attribute matches React's.\n\nexport type StyleInput = Record<string, string | number | null | undefined | boolean>\nexport type SolidStyle = Record<string, string>\n\nconst UNITLESS = new Set(\n `animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp`.split(` `)\n)\n\nconst hyphenated = new Map<string, string>()\nfunction hyphenate(name: string): string {\n let hit = hyphenated.get(name)\n if (hit === undefined) {\n hit = name.includes(`-`) ? name : name.replace(/([A-Z])/g, `-$1`).toLowerCase().replace(/^ms-/, `-ms-`)\n hyphenated.set(name, hit)\n }\n return hit\n}\n\n/** A React style object → Solid's (kebab-case keys, string values). */\nexport function css(style: StyleInput | undefined | null): SolidStyle | undefined {\n if (!style) return undefined\n const out: SolidStyle = {}\n for (const [name, value] of Object.entries(style)) {\n if (value === null || value === undefined || typeof value === `boolean` || value === ``) continue\n if (name.startsWith(`--`)) {\n out[name] = String(value)\n continue\n }\n const key = name === `cssFloat` ? `float` : hyphenate(name)\n out[key] = typeof value === `number` && value !== 0 && !UNITLESS.has(name) ? `${value}px` : String(value).trim()\n }\n return out\n}\n\n/** A length prop (`width={390}` / `\"100%\"`) the React way. */\nexport const px = (v: number | string): string => (typeof v === `number` ? (v === 0 ? `0` : `${v}px`) : v)\n","// FEED-128: the platform preferences a surface follows LIVE (dark mode for\n// `mode: system`, `prefers-contrast: more`, reduced motion, a hover-capable\n// pointer) and an element's measured box, as Solid primitives (React's\n// platform.ts). Listeners are removed when the owner is disposed.\n\nimport { createEffect, createSignal, getOwner, onCleanup, type Accessor } from \"solid-js\"\nimport { layoutSize } from \"@exponential_app/eui/web\"\n\n/** `matchMedia(query).matches`, live; `fallback` without `matchMedia`\n * (SSR, jsdom). */\nexport function createMediaQuery(query: string, fallback = false): Accessor<boolean> {\n if (typeof window === `undefined` || typeof window.matchMedia !== `function`) return () => fallback\n const mql = window.matchMedia(query)\n const [matches, setMatches] = createSignal(mql.matches)\n const onChange = () => setMatches(mql.matches)\n mql.addEventListener?.(`change`, onChange)\n if (getOwner()) onCleanup(() => mql.removeEventListener?.(`change`, onChange))\n return matches\n}\n\nexport interface BoxSize {\n width: number\n height: number\n /** False until the first measurement. */\n measured: boolean\n}\n\n/** An element's border box in layout px (NEW-82: unzoomed, untransformed;\n * `layoutSize`), live (ResizeObserver, disconnected on cleanup). */\nexport function createElementSize(el: Accessor<HTMLElement | null | undefined>, initialWidth = 0): Accessor<BoxSize> {\n const [size, setSize] = createSignal<BoxSize>({ width: initialWidth, height: 0, measured: false })\n createEffect(() => {\n const node = el()\n if (!node) return\n const read = (entries?: ResizeObserverEntry[]) => {\n const r = layoutSize(node, entries?.find((e) => e.target === node))\n const cur = size()\n // No layout yet (SSR, jsdom, display:none): keep the initial guess.\n if (!cur.measured && r.width === 0 && r.height === 0) return\n if (cur.measured && cur.width === r.width && cur.height === r.height) return\n setSize({ width: r.width, height: r.height, measured: true })\n }\n read()\n if (typeof ResizeObserver === `undefined`) return\n const ro = new ResizeObserver((entries) => read(entries))\n ro.observe(node)\n onCleanup(() => ro.disconnect())\n })\n return size\n}\n","// FEED-131: React's inline-style writes on a live element (react-dom's\n// `setValueForStyles`): the order of the `style` attribute's declarations is\n// what the web-parity check diffs, so every Radix-shaped style write goes\n// through here.\n\nimport { createRenderEffect, type Accessor } from \"solid-js\"\n\nexport type StyleObject = Record<string, string | undefined>\n\n/** React's `setValueForStyles(node, next, prev)` (kebab-case keys): a key\n * gone from `next` is cleared, a changed one is written; an existing\n * declaration keeps its place in the `style` attribute, a new one appends. */\nexport function styleWriter(el: HTMLElement): (next: StyleObject) => void {\n let prev: StyleObject | null = null\n const write = (k: string, v: string | undefined) => el.style.setProperty(k, v === undefined ? `` : v)\n return (next) => {\n if (prev) {\n for (const k of Object.keys(prev)) if (!(k in next)) write(k, ``)\n for (const k of Object.keys(next)) if (prev[k] !== next[k]) write(k, next[k])\n } else for (const k of Object.keys(next)) write(k, next[k])\n prev = { ...next }\n }\n}\n\n/** Write `style()` with React's semantics on `el`, first now, then on change. */\nexport function bindStyle(el: HTMLElement, style: Accessor<StyleObject>) {\n const write = styleWriter(el)\n createRenderEffect(() => write(style()))\n}\n","// FEED-131: Radix `Portal` on Solid: the content is appended to the mount\n// node ITSELF, no wrapper element (Solid's `<Portal>` adds a `<div>`).\n\nimport { Show, children as resolveChildren, onCleanup, type JSX } from \"solid-js\"\nimport { insert } from \"solid-js/web\"\n\n/** A portal WITHOUT a wrapper (Solid's `<Portal>` adds a `<div>`, Radix's\n * appends the content itself): the children are inserted before an empty\n * text marker appended to `mount`, in mount order. */\nexport function LayerPortal(props: { mount: HTMLElement | null; children: JSX.Element }): JSX.Element {\n return (\n <Show when={props.mount}>\n {(mount) => {\n const el = mount()\n // The children first: a portal mounting INSIDE this content in the\n // same pass (a Popover open in an opening Dialog) lands BEFORE it,\n // as React places a portal's deeper host nodes first; one opened\n // later appends after it.\n const nodes = resolveChildren(() => props.children)\n const marker = document.createTextNode(``)\n el.appendChild(marker)\n insert(el, nodes, marker)\n onCleanup(() => {\n for (const n of [nodes()].flat(Infinity as 1) as unknown[]) if (n instanceof Node && n.parentNode === el) el.removeChild(n)\n marker.remove()\n })\n return null\n }}\n </Show>\n )\n}\n\n/** Mounts `el` at the end of `container` while the owner lives (Radix's\n * Portal: no wrapper element, unlike Solid's <Portal>). */\nexport function mountIn(container: HTMLElement, el: Node) {\n container.appendChild(el)\n onCleanup(() => el.parentNode?.removeChild(el))\n}\n","// FEED-131: Radix `Presence`: a closing part stays mounted while the exit\n// animation its closed state starts runs.\n\nimport { createEffect, createSignal, on, onCleanup, untrack, type Accessor } from \"solid-js\"\n\n/** Radix `Presence`: mounted while `present`, and on close until the exit\n * animation the closed state starts has ended (none = at once). */\nexport function createPresence(present: Accessor<boolean>): { mounted: Accessor<boolean>; ref: (el: HTMLElement) => void } {\n const [mounted, setMounted] = createSignal(untrack(present))\n let node: HTMLElement | undefined\n let openName = `none`\n let stop: (() => void) | undefined\n const nameOf = (el: HTMLElement) => getComputedStyle(el).animationName || `none`\n createEffect(\n on(present, (p) => {\n stop?.()\n stop = undefined\n if (p) {\n setMounted(true)\n return\n }\n const el = node\n if (!el || !el.isConnected) return setMounted(false)\n const styles = getComputedStyle(el)\n const current = styles.animationName || `none`\n if (current === `none` || styles.display === `none` || current === openName) return setMounted(false)\n const done = (e: AnimationEvent) => {\n if (e.target !== el || !nameOf(el).split(`,`).map((s) => s.trim()).includes(e.animationName)) return\n stop?.()\n setMounted(false)\n }\n el.addEventListener(`animationend`, done)\n el.addEventListener(`animationcancel`, done)\n stop = () => {\n el.removeEventListener(`animationend`, done)\n el.removeEventListener(`animationcancel`, done)\n }\n }, { defer: true })\n )\n onCleanup(() => stop?.())\n return {\n mounted,\n ref: (el) => {\n node = el\n el.addEventListener(`animationstart`, (e) => {\n if (e.target === el && untrack(present)) openName = nameOf(el)\n })\n },\n }\n}\n","// FEED-131: Radix `DismissableLayer`: the layer stack (Escape answers the\n// highest layer only), a pointer down or a focus outside dismisses, a modal\n// layer turns the body's pointer events off. `dismissable` is the Select's\n// and Combobox's lighter variant with its OWN stack (no modal layers, no\n// nested-layer containment), kept as it was ported.\n\nimport { createContext, createSignal, onCleanup, onMount, untrack, useContext, type Accessor } from \"solid-js\"\n\nexport interface Layer {\n el?: HTMLElement\n parent?: Layer\n kids: Set<Layer>\n}\nexport const LAYERS: Layer[] = []\nexport const MODAL_LAYERS: Layer[] = []\nconst [layersVersion, setLayersVersion] = createSignal(0)\nlet originalBodyPointerEvents = ``\nexport const LayerContext = createContext<Layer | undefined>()\n\n/** Inside this layer or one it opened (Radix checks the React tree, where a\n * portalled child layer still sits under its parent). */\nexport function layerContains(layer: Layer, target: Node | null): boolean {\n if (!target) return false\n if (layer.el?.contains(target)) return true\n for (const kid of layer.kids) if (layerContains(kid, target)) return true\n return false\n}\n\nexport interface OutsideEvent {\n target: EventTarget | null\n detail: { originalEvent: Event }\n defaultPrevented: boolean\n preventDefault: () => void\n}\nexport const outsideEvent = (originalEvent: Event): OutsideEvent => {\n const e: OutsideEvent = { target: originalEvent.target, detail: { originalEvent }, defaultPrevented: false, preventDefault: () => (e.defaultPrevented = true) }\n return e\n}\n\nexport interface LayerOptions {\n disableOutsidePointerEvents?: Accessor<boolean>\n onEscapeKeyDown?: (e: KeyboardEvent) => void\n onPointerDownOutside?: (e: OutsideEvent) => void\n onFocusOutside?: (e: OutsideEvent) => void\n onInteractOutside?: (e: OutsideEvent) => void\n onDismiss: () => void\n}\n\n/** Radix `DismissableLayer` on `el` (call `attach(el)` once it is in the\n * document): Escape (the highest layer only), a pointer down outside, a\n * focus outside; a modal layer turns the body's pointer events off.\n * `pointerEvents()` = the layer's own `pointer-events` (Radix's value). */\nexport function createLayer(o: LayerOptions): { layer: Layer; attach: (el: HTMLElement) => void; pointerEvents: (registered: boolean) => string | undefined } {\n const parent = useContext(LayerContext)\n const layer: Layer = { parent, kids: new Set() }\n const modal = () => o.disableOutsidePointerEvents?.() ?? false\n const enabled = () => {\n const highest = MODAL_LAYERS[MODAL_LAYERS.length - 1]\n return LAYERS.indexOf(layer) >= (highest ? LAYERS.indexOf(highest) : -1)\n }\n const pointerEvents = (registered: boolean) => {\n layersVersion()\n if (MODAL_LAYERS.length === 0) return undefined\n const highest = MODAL_LAYERS[MODAL_LAYERS.length - 1]\n const index = registered ? LAYERS.indexOf(layer) : -1\n return index >= LAYERS.indexOf(highest) ? `auto` : `none`\n }\n const attach = (el: HTMLElement) => {\n layer.el = el\n const doc = el.ownerDocument\n const disable = untrack(modal)\n if (disable) {\n if (MODAL_LAYERS.length === 0) {\n originalBodyPointerEvents = doc.body.style.pointerEvents\n doc.body.style.pointerEvents = `none`\n }\n MODAL_LAYERS.push(layer)\n }\n LAYERS.push(layer)\n parent?.kids.add(layer)\n setLayersVersion((v) => v + 1)\n let clickHandler: ((e: Event) => void) | undefined\n const pointerDown = (event: PointerEvent) => {\n if (event.target && !layerContains(layer, event.target as Node)) {\n const run = () => {\n if (!enabled()) return\n const e = outsideEvent(event)\n o.onPointerDownOutside?.(e)\n o.onInteractOutside?.(e)\n if (!e.defaultPrevented) o.onDismiss()\n }\n if (event.pointerType === `touch`) {\n if (clickHandler) doc.removeEventListener(`click`, clickHandler)\n clickHandler = run\n doc.addEventListener(`click`, clickHandler, { once: true })\n } else run()\n } else if (clickHandler) doc.removeEventListener(`click`, clickHandler)\n }\n const focusIn = (event: FocusEvent) => {\n if (!event.target || layerContains(layer, event.target as Node)) return\n const e = outsideEvent(event)\n o.onFocusOutside?.(e)\n o.onInteractOutside?.(e)\n if (!e.defaultPrevented) o.onDismiss()\n }\n const keyDown = (event: KeyboardEvent) => {\n if (event.key !== `Escape`) return\n if (LAYERS.indexOf(layer) !== LAYERS.length - 1) return\n o.onEscapeKeyDown?.(event)\n if (!event.defaultPrevented) {\n event.preventDefault()\n o.onDismiss()\n }\n }\n const timer = setTimeout(() => doc.addEventListener(`pointerdown`, pointerDown), 0)\n doc.addEventListener(`focusin`, focusIn)\n doc.addEventListener(`keydown`, keyDown, { capture: true })\n onCleanup(() => {\n clearTimeout(timer)\n doc.removeEventListener(`pointerdown`, pointerDown)\n if (clickHandler) doc.removeEventListener(`click`, clickHandler)\n doc.removeEventListener(`focusin`, focusIn)\n doc.removeEventListener(`keydown`, keyDown, { capture: true })\n if (disable && MODAL_LAYERS.length === 1) doc.body.style.pointerEvents = originalBodyPointerEvents\n LAYERS.splice(LAYERS.indexOf(layer), 1)\n const m = MODAL_LAYERS.indexOf(layer)\n if (m >= 0) MODAL_LAYERS.splice(m, 1)\n parent?.kids.delete(layer)\n setLayersVersion((v) => v + 1)\n })\n }\n return { layer, attach, pointerEvents }\n}\n\n/** The open overlay layers, innermost last: only the top one answers\n * Escape (Radix's DismissableLayer stack). */\nconst layers: HTMLElement[] = []\n\n/** Radix's DismissableLayer: Escape, a pointerdown outside (and, unless\n * `keepOnFocusOutside`, focus moving outside) dismiss. `isInside` widens\n * \"inside\" (the trigger of a non-modal popover). */\nexport function dismissable(opts: { layer: () => HTMLElement | undefined; onDismiss: () => void; isInside?: (target: Node) => boolean; keepOnFocusOutside?: boolean; onOutside?: () => void }) {\n onMount(() => {\n const layer = opts.layer()\n if (!layer) return\n layers.push(layer)\n const inside = (t: EventTarget | null) => t instanceof Node && (layer.contains(t) || Boolean(opts.isInside?.(t)))\n const onKey = (e: KeyboardEvent) => {\n if (e.key !== `Escape` || layers[layers.length - 1] !== layer) return\n e.preventDefault()\n e.stopImmediatePropagation()\n opts.onDismiss()\n }\n const onPointer = (e: PointerEvent) => {\n if (inside(e.target)) return\n opts.onOutside?.()\n opts.onDismiss()\n }\n const onFocusIn = (e: FocusEvent) => {\n if (opts.keepOnFocusOutside || inside(e.target)) return\n opts.onOutside?.()\n opts.onDismiss()\n }\n document.addEventListener(`keydown`, onKey, { capture: true })\n document.addEventListener(`focusin`, onFocusIn)\n // Radix registers the pointer listener a tick later: the event that\n // opened the layer must not close it.\n const timer = window.setTimeout(() => document.addEventListener(`pointerdown`, onPointer))\n onCleanup(() => {\n window.clearTimeout(timer)\n document.removeEventListener(`keydown`, onKey, { capture: true })\n document.removeEventListener(`focusin`, onFocusIn)\n document.removeEventListener(`pointerdown`, onPointer)\n const i = layers.indexOf(layer)\n if (i >= 0) layers.splice(i, 1)\n })\n })\n}\n","// FEED-131: Radix `FocusScope`: the scope stack (a newer scope pauses the\n// one below), auto focus on mount and back on unmount, the trap, the Tab loop.\n\nimport { onCleanup, untrack, type Accessor } from \"solid-js\"\n\ninterface Scope {\n paused: boolean\n}\nlet SCOPES: Scope[] = []\nconst scopesAdd = (s: Scope) => {\n const active = SCOPES[0]\n if (active && active !== s) active.paused = true\n SCOPES = [s, ...SCOPES.filter((x) => x !== s)]\n}\nconst scopesRemove = (s: Scope) => {\n SCOPES = SCOPES.filter((x) => x !== s)\n if (SCOPES[0]) SCOPES[0].paused = false\n}\n\nexport function tabbables(container: HTMLElement): HTMLElement[] {\n const nodes: HTMLElement[] = []\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node) => {\n const el = node as HTMLElement & { disabled?: boolean; type?: string }\n const hiddenInput = el.tagName === `INPUT` && el.type === `hidden`\n if (el.disabled || el.hidden || hiddenInput) return NodeFilter.FILTER_SKIP\n return el.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP\n },\n })\n while (walker.nextNode()) nodes.push(walker.currentNode as HTMLElement)\n return nodes\n}\nexport function isHidden(node: HTMLElement | null, upTo: HTMLElement): boolean {\n if (node && getComputedStyle(node).visibility === `hidden`) return true\n while (node) {\n if (node === upTo) return false\n if (getComputedStyle(node).display === `none`) return true\n node = node.parentElement\n }\n return false\n}\nexport function focusEl(el: HTMLElement | null | undefined, select = false) {\n if (!el?.focus) return\n const prev = document.activeElement\n el.focus({ preventScroll: true })\n if (el !== prev && select && el instanceof HTMLInputElement && `select` in el) el.select()\n}\nexport function focusFirst(candidates: (HTMLElement | null | undefined)[], select = false) {\n const prev = document.activeElement\n for (const c of candidates) {\n focusEl(c, select)\n if (document.activeElement !== prev) return\n }\n}\n\nexport const AUTOFOCUS_ON_MOUNT = `focusScope.autoFocusOnMount`\nexport const AUTOFOCUS_ON_UNMOUNT = `focusScope.autoFocusOnUnmount`\n\n/** Radix `FocusScope` on `el`: auto focus on mount (the first tabbable, else\n * the container; `onMountAutoFocus` may prevent it), focus back on unmount\n * (`onUnmountAutoFocus` may prevent it), `trapped` keeps the focus inside,\n * `loop` wraps Tab. Returns the container's keydown handler. */\nexport function createFocusScope(o: { trapped: Accessor<boolean>; loop: boolean; onMountAutoFocus?: (e: Event) => void; onUnmountAutoFocus?: (e: Event) => void }): { attach: (el: HTMLElement) => void; onKeyDown: (e: KeyboardEvent) => void } {\n const scope: Scope = { paused: false }\n let container: HTMLElement | undefined\n const attach = (el: HTMLElement) => {\n // Radix's FocusScope effect runs one commit AFTER the dismissable layers\n // of the same mount registered their outside listeners (its container\n // is state): every overlay mounted together listens before any of them\n // takes the focus (a Popover open next to an opening Dialog loses).\n let started = false\n let disposed = false\n let previouslyFocused: HTMLElement | null = null\n let lastFocused: HTMLElement | null = null\n const focusIn = (event: FocusEvent) => {\n if (!untrack(o.trapped) || scope.paused) return\n const target = event.target as HTMLElement | null\n if (el.contains(target)) lastFocused = target\n else focusEl(lastFocused, true)\n }\n const focusOut = (event: FocusEvent) => {\n if (!untrack(o.trapped) || scope.paused) return\n const related = event.relatedTarget as HTMLElement | null\n if (related === null) return\n if (!el.contains(related)) focusEl(lastFocused, true)\n }\n const observer = new MutationObserver((mutations) => {\n if (!untrack(o.trapped) || scope.paused) return\n if (document.activeElement !== document.body) return\n for (const m of mutations) if (m.removedNodes.length > 0) focusEl(el)\n })\n queueMicrotask(() => {\n if (disposed || !el.isConnected) return\n started = true\n container = el\n scopesAdd(scope)\n previouslyFocused = document.activeElement as HTMLElement | null\n if (!el.contains(previouslyFocused)) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, { bubbles: false, cancelable: true })\n const onMount = (e: Event) => o.onMountAutoFocus?.(e)\n el.addEventListener(AUTOFOCUS_ON_MOUNT, onMount)\n el.dispatchEvent(mountEvent)\n el.removeEventListener(AUTOFOCUS_ON_MOUNT, onMount)\n if (!mountEvent.defaultPrevented) {\n focusFirst(tabbables(el).filter((n) => n.tagName !== `A`), true)\n if (document.activeElement === previouslyFocused) focusEl(el)\n }\n }\n // The trap (Radix: focusin/focusout on the document + a mutation watch).\n document.addEventListener(`focusin`, focusIn)\n document.addEventListener(`focusout`, focusOut)\n observer.observe(el, { childList: true, subtree: true })\n })\n onCleanup(() => {\n disposed = true\n if (!started) return\n document.removeEventListener(`focusin`, focusIn)\n document.removeEventListener(`focusout`, focusOut)\n observer.disconnect()\n const prev = previouslyFocused\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, { bubbles: false, cancelable: true })\n const onUnmount = (e: Event) => o.onUnmountAutoFocus?.(e)\n el.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmount)\n el.dispatchEvent(unmountEvent)\n if (!unmountEvent.defaultPrevented) focusEl(prev ?? document.body, true)\n el.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmount)\n scopesRemove(scope)\n }, 0)\n })\n }\n const onKeyDown = (event: KeyboardEvent) => {\n if (!o.loop && !untrack(o.trapped)) return\n if (scope.paused || !container) return\n const isTab = event.key === `Tab` && !event.altKey && !event.ctrlKey && !event.metaKey\n const focused = document.activeElement as HTMLElement | null\n if (!isTab || !focused) return\n const candidates = tabbables(container)\n const first = candidates.find((c) => !isHidden(c, container!))\n const last = [...candidates].reverse().find((c) => !isHidden(c, container!))\n if (!first || !last) {\n if (focused === container) event.preventDefault()\n } else if (!event.shiftKey && focused === last) {\n event.preventDefault()\n if (o.loop) focusEl(first, true)\n } else if (event.shiftKey && focused === first) {\n event.preventDefault()\n if (o.loop) focusEl(last, true)\n }\n }\n return { attach, onKeyDown }\n}\n","// FEED-131: Radix `FocusGuards`.\n\nimport { onCleanup } from \"solid-js\"\n\nlet guardCount = 0\nexport function createGuard(): HTMLSpanElement {\n const el = document.createElement(`span`)\n el.setAttribute(`data-radix-focus-guard`, ``)\n el.tabIndex = 0\n el.style.outline = `none`\n el.style.opacity = `0`\n el.style.position = `fixed`\n el.style.pointerEvents = `none`\n return el\n}\n/** Radix `useFocusGuards`: two focusable spans at the body's edges while\n * any overlay that needs them is up. */\nexport function useFocusGuards() {\n const edges = document.querySelectorAll(`[data-radix-focus-guard]`)\n document.body.insertAdjacentElement(`afterbegin`, edges[0] ?? createGuard())\n document.body.insertAdjacentElement(`beforeend`, edges[1] ?? createGuard())\n guardCount++\n onCleanup(() => {\n if (guardCount === 1) document.querySelectorAll(`[data-radix-focus-guard]`).forEach((n) => n.remove())\n guardCount--\n })\n}\n","// FEED-131: react-remove-scroll-bar's body lock, as Radix's modal parts use it.\n\nimport { onCleanup } from \"solid-js\"\n\nexport const LOCK_ATTRIBUTE = `data-scroll-locked`\nlet lockSheets = 0\nlet lockSheet: HTMLStyleElement | null = null\n/** react-remove-scroll-bar's body lock (the same sheet, the same counter\n * attribute) while a modal overlay is up. */\nexport function useScrollLock() {\n const body = document.body\n const count = () => {\n const n = parseInt(body.getAttribute(LOCK_ATTRIBUTE) || `0`, 10)\n return isFinite(n) ? n : 0\n }\n body.setAttribute(LOCK_ATTRIBUTE, String(count() + 1))\n if (lockSheets === 0) {\n const cs = getComputedStyle(body)\n const parse = (x: string) => parseInt(x || ``, 10) || 0\n const [left, top, right] = [parse(cs.marginLeft), parse(cs.marginTop), parse(cs.marginRight)]\n const gap = Math.max(0, window.innerWidth - document.documentElement.clientWidth + right - left)\n const important = `!important`\n const css = `\\n .with-scroll-bars-hidden {\\n overflow: hidden ${important};\\n padding-right: ${gap}px ${important};\\n }\\n body[${LOCK_ATTRIBUTE}] {\\n overflow: hidden ${important};\\n overscroll-behavior: contain;\\n ${[`position: relative ${important};`, `\\n padding-left: ${left}px;\\n padding-top: ${top}px;\\n padding-right: ${right}px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: ${gap}px ${important};\\n `].join(``)}\\n }\\n \\n .right-scroll-bar-position {\\n right: ${gap}px ${important};\\n }\\n \\n .width-before-scroll-bar {\\n margin-right: ${gap}px ${important};\\n }\\n \\n .right-scroll-bar-position .right-scroll-bar-position {\\n right: 0 ${important};\\n }\\n \\n .width-before-scroll-bar .width-before-scroll-bar {\\n margin-right: 0 ${important};\\n }\\n \\n body[${LOCK_ATTRIBUTE}] {\\n --removed-body-scroll-bar-size: ${gap}px;\\n }\\n`\n lockSheet = document.createElement(`style`)\n lockSheet.type = `text/css`\n lockSheet.appendChild(document.createTextNode(css))\n ;(document.head || document.getElementsByTagName(`head`)[0]).appendChild(lockSheet)\n }\n lockSheets++\n onCleanup(() => {\n const n = count() - 1\n if (n <= 0) body.removeAttribute(LOCK_ATTRIBUTE)\n else body.setAttribute(LOCK_ATTRIBUTE, String(n))\n lockSheets--\n if (!lockSheets && lockSheet) {\n lockSheet.remove()\n lockSheet = null\n }\n })\n}\n","// FEED-131: Radix's modal content effects (`hideOthers` + the scroll lock).\n\nimport { onCleanup } from \"solid-js\"\nimport { hideOthers } from \"aria-hidden\"\nimport { useScrollLock } from \"./scroll-lock\"\n\n/** Radix's modal content: the rest of the page `aria-hidden` (live regions\n * and scripts kept), the focus guards, the scroll lock. */\nexport function useModalEffects(el: HTMLElement, lockScroll: boolean) {\n const undo = hideOthers(el)\n onCleanup(undo)\n if (lockScroll) useScrollLock()\n}\n","// FEED-131: Radix `Popper` on @floating-ui/dom: Radix's middleware (offset\n// → shift(limitShift) → flip → size → transformOrigin, `strategy: fixed`),\n// the `data-radix-popper-content-wrapper` and its inline style in Radix's\n// order, the content's `--radix-<kind>-*` variables. `popperWrapper` is the\n// Select's and Combobox's variant (a reactive `style`, placed once mounted),\n// kept as it was ported.\n\nimport { createEffect, createMemo, createSignal, onCleanup, onMount, untrack, type Accessor, type JSX } from \"solid-js\"\nimport { insert } from \"solid-js/web\"\nimport { autoUpdate, computePosition, flip, limitShift, offset, shift, size, type Middleware, type Placement, type VirtualElement } from \"@floating-ui/dom\"\nimport { css, type StyleInput } from \"../style\"\nimport { styleWriter, type StyleObject } from \"./style-writer\"\n\nexport type Side = `top` | `right` | `bottom` | `left`\nexport type Align = `start` | `center` | `end`\n\n/** Radix Popper's `transformOrigin` middleware (no arrow: always hidden). */\nexport const transformOrigin: Middleware = {\n name: `transformOrigin`,\n fn(data) {\n const [placedSide, placedAlign = `center`] = data.placement.split(`-`) as [Side, Align | undefined]\n const noArrowAlign = { start: `0%`, center: `50%`, end: `100%` }[placedAlign]\n let x = ``\n let y = ``\n if (placedSide === `bottom`) {\n x = noArrowAlign\n y = `${-0}px`\n } else if (placedSide === `top`) {\n x = noArrowAlign\n y = `${data.rects.floating.height + 0}px`\n } else if (placedSide === `right`) {\n x = `${-0}px`\n y = noArrowAlign\n } else if (placedSide === `left`) {\n x = `${data.rects.floating.width + 0}px`\n y = noArrowAlign\n }\n return { data: { x, y } }\n },\n}\n\nexport interface PopperState {\n placedSide: Accessor<Side>\n placedAlign: Accessor<Align>\n isPositioned: Accessor<boolean>\n /** The content element (its computed `z-index` goes on the wrapper). */\n setContent: (el: HTMLElement) => void\n}\n\n/** Radix `PopperContent`: the `data-radix-popper-content-wrapper` (fixed,\n * translated, `min-width: max-content`, the content's z-index, the\n * `--radix-popper-*` variables) around the content `children(state)`.\n * Placement = floating-ui with Radix's middleware, auto-updated. */\nexport function Popper(props: { anchor: Element | VirtualElement | null | undefined; side: Side; align: Align; sideOffset: number; alignOffset?: number; collisionPadding: number; dir?: string; children: (state: PopperState) => JSX.Element }): JSX.Element {\n const desired = () => (props.align === `center` ? props.side : `${props.side}-${props.align}`) as Placement\n const [placement, setPlacement] = createSignal<Placement>(untrack(desired))\n const [isPositioned, setPositioned] = createSignal(false)\n const [content, setContent] = createSignal<HTMLElement>()\n let pos = { x: 0, y: 0, origin: undefined as { x: string; y: string } | undefined }\n let floatingSet = false\n let zIndex: string | undefined\n let disposed = false\n const wrapper = (<div data-radix-popper-content-wrapper=\"\" dir={props.dir as `ltr` | `rtl` | undefined} />) as HTMLDivElement\n const writeWrapper = styleWriter(wrapper)\n const dpr = () => wrapper.ownerDocument.defaultView?.devicePixelRatio || 1\n const roundByDPR = (v: number) => Math.round(v * dpr()) / dpr()\n const paintWrapper = () => {\n const s: StyleObject = { position: `fixed`, left: `0`, top: `0` }\n // floating-ui's floatingStyles: the transform (+ will-change at DPR ≥ 1.5) once the floating element is known.\n if (floatingSet) {\n s.transform = `translate(${roundByDPR(pos.x)}px, ${roundByDPR(pos.y)}px)`\n if (dpr() >= 1.5) s[`will-change`] = `transform`\n }\n s.transform = untrack(isPositioned) ? s.transform : `translate(0, -200%)`\n s[`min-width`] = `max-content`\n s[`z-index`] = zIndex || undefined\n s[`--radix-popper-transform-origin`] = [pos.origin?.x, pos.origin?.y].join(` `)\n writeWrapper(s)\n }\n paintWrapper()\n const state: PopperState = { placedSide: () => placement().split(`-`)[0] as Side, placedAlign: () => (placement().split(`-`)[1] ?? `center`) as Align, isPositioned, setContent }\n insert(wrapper, untrack(() => props.children(state)))\n createEffect(() => {\n const anchor = props.anchor\n const el = content()\n if (!anchor || !el) return\n untrack(() => {\n floatingSet = true\n paintWrapper()\n zIndex = getComputedStyle(el).zIndex\n paintWrapper()\n })\n const padding = props.collisionPadding\n const detect = { padding, boundary: [] as Element[], altBoundary: false }\n const middleware = [\n offset({ mainAxis: props.sideOffset, alignmentAxis: props.alignOffset ?? 0 }),\n shift({ mainAxis: true, crossAxis: false, limiter: limitShift(), ...detect }),\n flip({ ...detect }),\n size({\n ...detect,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const st = elements.floating.style\n st.setProperty(`--radix-popper-available-width`, `${availableWidth}px`)\n st.setProperty(`--radix-popper-available-height`, `${availableHeight}px`)\n st.setProperty(`--radix-popper-anchor-width`, `${rects.reference.width}px`)\n st.setProperty(`--radix-popper-anchor-height`, `${rects.reference.height}px`)\n },\n }),\n transformOrigin,\n ]\n const placementNow = desired()\n const update = () => {\n void computePosition(anchor, wrapper, { strategy: `fixed`, placement: placementNow, middleware }).then((d) => {\n if (disposed) return\n const origin = d.middlewareData.transformOrigin as { x: string; y: string } | undefined\n const same = untrack(isPositioned) && pos.x === d.x && pos.y === d.y && pos.origin?.x === origin?.x && pos.origin?.y === origin?.y && untrack(placement) === d.placement\n if (same) return\n pos = { x: d.x, y: d.y, origin }\n setPlacement(d.placement)\n setPositioned(true)\n paintWrapper()\n })\n }\n const stop = autoUpdate(anchor, wrapper, update, { animationFrame: false })\n onCleanup(stop)\n })\n onCleanup(() => (disposed = true))\n return wrapper\n}\n\n/** The content's own style the way Radix composes it: `prefix` (a menu's\n * `outline`), the dismissable layer's `pointer-events`, the popper's\n * `--radix-<kind>-*` variables, then `animation: none` until placed. */\nexport function popperContentStyle(kind: string, trigger: string, pointerEvents: string | undefined, positioned: boolean, prefix: StyleObject = {}): StyleObject {\n return {\n ...prefix,\n \"pointer-events\": pointerEvents,\n [`--radix-${kind}-content-transform-origin`]: `var(--radix-popper-transform-origin)`,\n [`--radix-${kind}-content-available-width`]: `var(--radix-popper-available-width)`,\n [`--radix-${kind}-content-available-height`]: `var(--radix-popper-available-height)`,\n [`--radix-${kind}-${trigger}-width`]: `var(--radix-popper-anchor-width)`,\n [`--radix-${kind}-${trigger}-height`]: `var(--radix-popper-anchor-height)`,\n animation: positioned ? undefined : `none`,\n }\n}\n\nexport interface Placed {\n side: string\n align: string\n positioned: boolean\n}\n\n/** Radix's PopperContent: the fixed wrapper (`data-radix-popper-content-\n * wrapper`, floating-ui's translate, `--radix-popper-*`), the content's\n * placed side/align. `content` renders the content element. */\nexport function popperWrapper(opts: { anchor: () => HTMLElement | undefined; sideOffset: number; align: `start` | `center` | `end`; collisionPadding: number; dir?: () => `ltr` | `rtl` | `auto` | undefined; onPlaced?: () => void; content: (placed: Accessor<Placed>, ref: (el: HTMLElement) => void) => JSX.Element }): HTMLElement {\n const [pos, setPos] = createSignal<{ x: number; y: number; placement: Placement; origin: [string, string] } | null>(null)\n const [zIndex, setZIndex] = createSignal<string>()\n let contentEl: HTMLElement | undefined\n const dpr = () => (typeof window === `undefined` ? 1 : window.devicePixelRatio || 1)\n const round = (v: number) => Math.round(v * dpr()) / dpr()\n const placed = createMemo<Placed>(() => {\n const p = pos()\n const [side, align = `center`] = (p?.placement ?? `bottom-${opts.align}`).split(`-`)\n return { side, align: opts.align === `center` && !p ? `center` : align, positioned: p !== null }\n })\n const style = () => {\n const p = pos()\n const s: StyleInput = { position: `fixed`, left: 0, top: 0, transform: p ? `translate(${round(p.x)}px, ${round(p.y)}px)` : `translate(0, -200%)` }\n if (dpr() >= 1.5) s.willChange = `transform`\n s.minWidth = `max-content`\n s.zIndex = zIndex()\n s[`--radix-popper-transform-origin`] = p ? p.origin.join(` `) : ` `\n return css(s)\n }\n const wrapper = (\n <div data-radix-popper-content-wrapper=\"\" style={style()} dir={opts.dir?.()}>\n {opts.content(placed, (el) => (contentEl = el))}\n </div>\n ) as HTMLElement\n onMount(() => {\n if (contentEl) setZIndex(getComputedStyle(contentEl).zIndex)\n const anchor = opts.anchor()\n if (!anchor) return\n const detect = { padding: opts.collisionPadding, boundary: [] as Element[], altBoundary: false }\n let alive = true\n const update = () =>\n void computePosition(anchor, wrapper, {\n strategy: `fixed`,\n placement: (opts.align === `center` ? `bottom` : `bottom-${opts.align}`) as Placement,\n middleware: [\n offset({ mainAxis: opts.sideOffset, alignmentAxis: 0 }),\n shift({ mainAxis: true, crossAxis: false, limiter: limitShift(), ...detect }),\n flip({ ...detect }),\n size({\n ...detect,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const st = elements.floating.style\n st.setProperty(`--radix-popper-available-width`, `${availableWidth}px`)\n st.setProperty(`--radix-popper-available-height`, `${availableHeight}px`)\n st.setProperty(`--radix-popper-anchor-width`, `${rects.reference.width}px`)\n st.setProperty(`--radix-popper-anchor-height`, `${rects.reference.height}px`)\n },\n }),\n transformOrigin,\n ],\n }).then((r) => {\n if (!alive) return\n const first = pos() === null\n const origin = r.middlewareData.transformOrigin as { x: string; y: string } | undefined\n setPos({ x: r.x, y: r.y, placement: r.placement, origin: [origin?.x ?? ``, origin?.y ?? ``] })\n if (first) opts.onPlaced?.()\n })\n const stop = autoUpdate(anchor, wrapper, update, { animationFrame: false })\n onCleanup(() => {\n alive = false\n stop()\n })\n })\n return wrapper\n}\n","// FEED-131: Radix's pointer grace area (Tooltip's hoverable content, the\n// Menu's submenu): the polygon from the exit point to the target's box.\n\nexport type Point = { x: number; y: number }\n/** Is the point inside the polygon (ray casting, Radix's `isPointInPolygon`)? */\nexport function inPolygon(point: Point, polygon: Point[]): boolean {\n let inside = false\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const a = polygon[i]\n const b = polygon[j]\n if (a.y > point.y !== b.y > point.y && point.x < ((b.x - a.x) * (point.y - a.y)) / (b.y - a.y) + a.x) inside = !inside\n }\n return inside\n}\n/** The convex hull of points (Andrew's monotone chain, Radix's `getHull`). */\nexport function hull(points: Point[]): Point[] {\n const sorted = [...points].sort((a, b) => (a.x < b.x ? -1 : a.x > b.x ? 1 : a.y < b.y ? -1 : a.y > b.y ? 1 : 0))\n if (sorted.length <= 1) return sorted\n const cross = (o: Point, a: Point, b: Point) => (a.x - o.x) * (b.y - o.y) - (a.y - o.y) * (b.x - o.x)\n const upper: Point[] = []\n for (const p of sorted) {\n while (upper.length >= 2 && cross(upper[upper.length - 2], upper[upper.length - 1], p) >= 0) upper.pop()\n upper.push(p)\n }\n upper.pop()\n const lower: Point[] = []\n for (let i = sorted.length - 1; i >= 0; i--) {\n const p = sorted[i]\n while (lower.length >= 2 && cross(lower[lower.length - 2], lower[lower.length - 1], p) >= 0) lower.pop()\n lower.push(p)\n }\n lower.pop()\n return upper.length === 1 && lower.length === 1 && upper[0].x === lower[0].x && upper[0].y === lower[0].y ? upper : upper.concat(lower)\n}\n/** The grace area from the exit point to a hover target's box. */\nexport function graceArea(exit: Point, from: DOMRect, to: DOMRect): Point[] {\n const padding = 5\n const top = Math.abs(from.top - exit.y)\n const bottom = Math.abs(from.bottom - exit.y)\n const right = Math.abs(from.right - exit.x)\n const left = Math.abs(from.left - exit.x)\n const m = Math.min(top, bottom, right, left)\n const padded: Point[] =\n m === left\n ? [{ x: exit.x + padding, y: exit.y - padding }, { x: exit.x + padding, y: exit.y + padding }]\n : m === right\n ? [{ x: exit.x - padding, y: exit.y - padding }, { x: exit.x - padding, y: exit.y + padding }]\n : m === top\n ? [{ x: exit.x - padding, y: exit.y + padding }, { x: exit.x + padding, y: exit.y + padding }]\n : [{ x: exit.x - padding, y: exit.y - padding }, { x: exit.x + padding, y: exit.y - padding }]\n return hull([...padded, { x: to.left, y: to.top }, { x: to.right, y: to.top }, { x: to.right, y: to.bottom }, { x: to.left, y: to.bottom }])\n}\n","// FEED-131: Radix `VisuallyHidden`.\n\nimport type { JSX } from \"solid-js\"\nimport { styleWriter } from \"./style-writer\"\n\n/** Radix `VisuallyHidden` with `role=\"tooltip\"` (its inline style, in its order). */\nexport function VisuallyHidden(props: { id: string; children: JSX.Element }): JSX.Element {\n const el = (\n <span id={props.id} role=\"tooltip\">\n {props.children}\n </span>\n ) as HTMLSpanElement\n styleWriter(el)({ position: `absolute`, border: `0`, width: `1px`, height: `1px`, padding: `0`, margin: `-1px`, overflow: `hidden`, clip: `rect(0, 0, 0, 0)`, \"white-space\": `nowrap`, \"word-wrap\": `normal` })\n return el\n}\n","// FEED-131: Radix's typeahead (`useTypeaheadSearch` + `getNextMatch`): a\n// 1 s buffer, a repeated letter cycles through the matches. `getNextMatch`\n// takes the labels (Menu), `findNextItem` the items (Select).\n\nimport { onCleanup } from \"solid-js\"\n\nexport const wrapArray = <T,>(array: T[], start: number) => array.map((_, i) => array[(start + i) % array.length])\n\nexport function getNextMatch(values: string[], search: string, currentMatch?: string): string | undefined {\n const isRepeated = search.length > 1 && Array.from(search).every((c) => c === search[0])\n const normalized = isRepeated ? search[0] : search\n const currentIndex = currentMatch ? values.indexOf(currentMatch) : -1\n let wrapped = wrapArray(values, Math.max(currentIndex, 0))\n if (normalized.length === 1) wrapped = wrapped.filter((v) => v !== currentMatch)\n const next = wrapped.find((v) => v.toLowerCase().startsWith(normalized.toLowerCase()))\n return next !== currentMatch ? next : undefined\n}\n\n/** Radix's Select type-ahead: a 1 s buffer, a repeated letter cycles. */\nexport function radixTypeahead(onSearch: (search: string) => void) {\n let search = ``\n let timer = 0\n const update = (v: string) => {\n search = v\n window.clearTimeout(timer)\n if (v !== ``) timer = window.setTimeout(() => update(``), 1000)\n }\n onCleanup(() => window.clearTimeout(timer))\n return {\n get search() {\n return search\n },\n type: (key: string) => {\n const next = search + key\n onSearch(next)\n update(next)\n },\n reset: () => {\n search = ``\n window.clearTimeout(timer)\n },\n }\n}\n\nexport function findNextItem<T extends { label: string }>(items: T[], search: string, current: T | undefined): T | undefined {\n const repeated = search.length > 1 && Array.from(search).every((c) => c === search[0])\n const normalized = repeated ? search[0] : search\n const at = current ? items.indexOf(current) : -1\n let wrapped = items.map((_, i) => items[(Math.max(at, 0) + i) % items.length])\n if (normalized.length === 1) wrapped = wrapped.filter((v) => v !== current)\n const next = wrapped.find((item) => item.label.toLowerCase().startsWith(normalized.toLowerCase()))\n return next !== current ? next : undefined\n}\n","// FEED-131: Radix `Menu`'s content machinery: `MenuContent` (Radix\n// `MenuContentImpl`: a dismissable layer + a focus scope + the popper, roving\n// focus over the items, typeahead, first/last keys, the pointer grace toward\n// a submenu; the ROOT content is modal), `createMenuRow` (`MenuItemImpl` +\n// `RovingFocusGroupItem`) and `createSelectable` (`MenuItem`), the keyboard\n// tracking (`isUsingKeyboardRef`). The rows' own DOM (parts, labels, icons)\n// is the painter's.\n\nimport { createContext, createSignal, onCleanup, onMount, untrack, useContext, type Accessor, type JSX } from \"solid-js\"\nimport type { VirtualElement } from \"@floating-ui/dom\"\nimport { OVERLAY_PADDING } from \"@exponential_app/eui\"\nimport { createLayer, LayerContext, type OutsideEvent } from \"./dismissable-layer\"\nimport { createFocusScope, focusFirst } from \"./focus-scope\"\nimport { useFocusGuards } from \"./focus-guards\"\nimport { useModalEffects } from \"./modal\"\nimport { inPolygon, type Point } from \"./grace-area\"\nimport { Popper, popperContentStyle, type Align, type Side } from \"./popper\"\nimport { bindStyle } from \"./style-writer\"\nimport { getNextMatch } from \"./typeahead\"\n\n/** Whether the person drives the menus with the keyboard (Radix's\n * `isUsingKeyboardRef`: a keydown says yes, a pointer says no). */\nlet usingKeyboard = false\nlet keyboardListeners = 0\nexport function useKeyboardTracking() {\n const key = () => (usingKeyboard = true)\n const pointer = () => (usingKeyboard = false)\n if (keyboardListeners++ === 0) {\n document.addEventListener(`keydown`, key, { capture: true })\n document.addEventListener(`pointerdown`, pointer, { capture: true })\n document.addEventListener(`pointermove`, pointer, { capture: true })\n }\n onCleanup(() => {\n if (--keyboardListeners === 0) {\n document.removeEventListener(`keydown`, key, { capture: true })\n document.removeEventListener(`pointerdown`, pointer, { capture: true })\n document.removeEventListener(`pointermove`, pointer, { capture: true })\n }\n })\n}\n\n/** One menu level's content (Radix `MenuContentImpl`): roving focus over its\n * items, typeahead, first/last keys, the pointer grace toward a submenu. */\nexport interface MenuLevel {\n content: () => HTMLElement | undefined\n highlighted: Accessor<HTMLElement | undefined>\n setHighlighted: (el: HTMLElement | undefined) => void\n tabStop: Accessor<HTMLElement | undefined>\n setTabStop: (el: HTMLElement | undefined) => void\n search: () => string\n onItemEnter: (e: PointerEvent) => boolean\n onItemLeave: (e: PointerEvent) => void\n onTriggerLeave: (e: PointerEvent) => boolean\n setGrace: (grace: { area: Point[]; side: Side } | null) => void\n}\nexport const MenuLevelContext = createContext<MenuLevel>()\n\nexport const FIRST_KEYS = [`ArrowDown`, `PageUp`, `Home`]\nexport const LAST_KEYS = [`ArrowUp`, `PageDown`, `End`]\nexport const itemsOf = (content: HTMLElement | undefined) => (content ? Array.from(content.querySelectorAll<HTMLElement>(`:scope [data-radix-collection-item]`)).filter((el) => el.closest(`[data-radix-menu-content]`) === content) : [])\n\nexport type MenuContentProps = {\n anchor: Element | VirtualElement | null | undefined\n side: Side\n align: Align\n sideOffset: number\n alignOffset?: number\n /** The popper's collision padding (default `OVERLAY_PADDING`, the natives';\n * the primitive set passes Radix's 0). */\n collisionPadding?: number\n /** A layer registered in this same mount pass is not visible to this\n * content's FIRST style (Radix's default-body portals: the outer layer\n * registers one commit after the nested content first renders), so its\n * `pointer-events` starts unset. The primitive set passes it. */\n lagParentLayer?: boolean\n /** Root content: modal (trap, outside pointer events off, scroll lock,\n * aria-hidden), focus to the content on mount. */\n root: boolean\n id?: string\n labelledBy?: string\n attrs: () => Record<string, unknown>\n state: () => string\n onDismiss: () => void\n onEscapeKeyDown?: (e: KeyboardEvent) => void\n onFocusOutside?: (e: OutsideEvent) => void\n onInteractOutside?: (e: OutsideEvent) => void\n onCloseAutoFocus: (e: Event) => void\n /** The reading direction (the popper wrapper's and the content's `dir`). */\n dir: `ltr` | `rtl`\n /** The `--radix-<kind>-content-*` prefix: `dropdown-menu` or `context-menu`. */\n kind: string\n onKeyDown?: (e: KeyboardEvent) => void\n setContent?: (el: HTMLElement | undefined) => void\n children: JSX.Element\n}\n\nexport function MenuContent(props: MenuContentProps): JSX.Element {\n const layer = createLayer({\n disableOutsidePointerEvents: () => props.root,\n onEscapeKeyDown: (e) => props.onEscapeKeyDown?.(e),\n onFocusOutside: (e) => {\n if (props.root) e.preventDefault()\n props.onFocusOutside?.(e)\n },\n onInteractOutside: (e) => props.onInteractOutside?.(e),\n onDismiss: () => props.onDismiss(),\n })\n const scope = createFocusScope({\n trapped: () => props.root,\n loop: false,\n onMountAutoFocus: (e) => {\n e.preventDefault()\n if (props.root || usingKeyboard) contentEl?.focus({ preventScroll: true })\n },\n onUnmountAutoFocus: (e) => props.onCloseAutoFocus(e),\n })\n const [registered, setRegistered] = createSignal(false)\n const [highlighted, setHighlighted] = createSignal<HTMLElement>()\n const [tabStop, setTabStop] = createSignal<HTMLElement>()\n let contentEl: HTMLElement | undefined\n let search = ``\n let searchTimer: ReturnType<typeof setTimeout> | undefined\n let grace: { area: Point[]; side: Side } | null = null\n let pointerDir: Side = `right`\n let lastPointerX = 0\n const movingToSubmenu = (e: PointerEvent) => Boolean(grace && pointerDir === grace.side && inPolygon({ x: e.clientX, y: e.clientY }, grace.area))\n const level: MenuLevel = {\n content: () => contentEl,\n highlighted,\n setHighlighted,\n tabStop,\n setTabStop,\n search: () => search,\n onItemEnter: (e) => movingToSubmenu(e),\n onItemLeave: (e) => {\n if (movingToSubmenu(e)) return\n contentEl?.focus({ preventScroll: true })\n setTabStop(undefined)\n },\n onTriggerLeave: (e) => movingToSubmenu(e),\n setGrace: (g) => (grace = g),\n }\n onCleanup(() => clearTimeout(searchTimer))\n const typeahead = (key: string) => {\n const next = search + key\n const items = itemsOf(contentEl).filter((el) => !el.hasAttribute(`data-disabled`))\n const current = document.activeElement\n const currentMatch = items.find((el) => el === current)?.textContent ?? undefined\n const values = items.map((el) => el.textContent ?? ``)\n const match = getNextMatch(values, next, currentMatch)\n const target = items.find((el) => (el.textContent ?? ``) === match)\n const update = (value: string) => {\n search = value\n clearTimeout(searchTimer)\n if (value !== ``) searchTimer = setTimeout(() => update(``), 1000)\n }\n update(next)\n if (target) setTimeout(() => target.focus())\n }\n return (\n <Popper anchor={props.anchor} side={props.side} align={props.align} sideOffset={props.sideOffset} alignOffset={props.alignOffset} collisionPadding={props.collisionPadding ?? OVERLAY_PADDING} dir={props.dir}>\n {(popper) => {\n const el = (\n <div\n data-side={popper.placedSide()}\n data-align={popper.placedAlign()}\n role=\"menu\"\n aria-orientation=\"vertical\"\n data-state={props.state()}\n data-radix-menu-content=\"\"\n dir={props.dir}\n id={props.id}\n aria-labelledby={props.labelledBy}\n {...props.attrs()}\n tabindex=\"-1\"\n data-orientation=\"vertical\"\n onKeyDown={(e: KeyboardEvent) => {\n scope.onKeyDown(e)\n const target = e.target as HTMLElement\n const inside = target.closest(`[data-radix-menu-content]`) === el\n const modifier = e.ctrlKey || e.altKey || e.metaKey\n if (inside) {\n if (e.key === `Tab`) e.preventDefault()\n if (!modifier && e.key.length === 1) typeahead(e.key)\n }\n props.onKeyDown?.(e)\n if (e.target !== el) return\n if (!FIRST_KEYS.includes(e.key) && !LAST_KEYS.includes(e.key)) return\n e.preventDefault()\n const nodes = itemsOf(el).filter((n) => !n.hasAttribute(`data-disabled`))\n if (LAST_KEYS.includes(e.key)) nodes.reverse()\n focusFirst(nodes)\n }}\n onFocus={(e: FocusEvent) => {\n // Radix RovingFocusGroup entry focus: the keyboard lands on the first item.\n if (e.target !== el || !usingKeyboard) return\n const nodes = itemsOf(el).filter((n) => !n.hasAttribute(`data-disabled`))\n const current = untrack(tabStop)\n focusFirst([current, ...nodes].filter(Boolean))\n }}\n onPointerMove={(e: PointerEvent) => {\n if (e.pointerType !== `mouse`) return\n if (el.contains(e.target as Node) && lastPointerX !== e.clientX) {\n pointerDir = e.clientX > lastPointerX ? `right` : `left`\n lastPointerX = e.clientX\n }\n }}\n >\n <LayerContext.Provider value={layer.layer}>\n <MenuLevelContext.Provider value={level}>{props.children}</MenuLevelContext.Provider>\n </LayerContext.Provider>\n </div>\n ) as HTMLDivElement\n contentEl = el\n props.setContent?.(el)\n onCleanup(() => props.setContent?.(undefined))\n popper.setContent(el)\n bindStyle(el, () => popperContentStyle(props.kind, `trigger`, props.lagParentLayer && !registered() ? undefined : layer.pointerEvents(registered()), popper.isPositioned(), { outline: `none` }))\n onMount(() => {\n layer.attach(el)\n setRegistered(true)\n scope.attach(el)\n useFocusGuards()\n if (props.root) useModalEffects(el, true)\n })\n return el\n }}\n </Popper>\n )\n}\n\n/** The attributes + behaviour every menu row shares (Radix `MenuItemImpl` +\n * `RovingFocusGroupItem`): roving tabindex, `data-highlighted` while\n * focused, pointer highlight, arrow keys. */\nexport function createMenuRow(disabled: Accessor<boolean>) {\n const level = useContext(MenuLevelContext)!\n let el: HTMLElement | undefined\n const attrs = (): Record<string, unknown> => ({\n tabindex: level.tabStop() === el && el !== undefined ? `0` : `-1`,\n \"data-orientation\": `vertical`,\n \"data-radix-collection-item\": ``,\n \"data-highlighted\": level.highlighted() === el && el !== undefined ? `` : undefined,\n \"aria-disabled\": disabled() ? `true` : undefined,\n \"data-disabled\": disabled() ? `` : undefined,\n })\n const handlers = {\n onFocus: () => {\n level.setHighlighted(el)\n if (!untrack(disabled)) level.setTabStop(el)\n },\n onBlur: () => {\n if (untrack(level.highlighted) === el) level.setHighlighted(undefined)\n },\n onPointerMove: (e: PointerEvent) => {\n if (e.pointerType !== `mouse`) return\n if (untrack(disabled)) level.onItemLeave(e)\n else if (!level.onItemEnter(e)) el?.focus({ preventScroll: true })\n },\n onPointerLeave: (e: PointerEvent) => {\n if (e.pointerType !== `mouse`) return\n level.onItemLeave(e)\n },\n onKeyDown: (e: KeyboardEvent) => {\n if (e.target !== e.currentTarget) return\n const intent = e.key === `ArrowUp` ? `prev` : e.key === `ArrowDown` ? `next` : e.key === `Home` || e.key === `PageUp` ? `first` : e.key === `End` || e.key === `PageDown` ? `last` : undefined\n if (!intent || e.metaKey || e.ctrlKey || e.altKey || e.shiftKey) return\n e.preventDefault()\n let candidates = itemsOf(level.content()).filter((n) => !n.hasAttribute(`data-disabled`))\n if (intent === `last`) candidates.reverse()\n else if (intent === `prev` || intent === `next`) {\n if (intent === `prev`) candidates.reverse()\n const at = candidates.indexOf(e.currentTarget as HTMLElement)\n candidates = candidates.slice(at + 1)\n }\n focusFirst(candidates)\n },\n }\n return { attrs, handlers, ref: (node: HTMLElement) => (el = node), level }\n}\n\n/** A selectable row (Radix `MenuItem`): click / Enter / Space select it, a\n * press that started elsewhere selects on release; `onSelect` may prevent\n * the `close` (the root menu's). */\nexport function createSelectable(disabled: Accessor<boolean>, onSelect: (e: Event) => void, close: () => void) {\n const row = createMenuRow(disabled)\n let pointerDownHere = false\n const select = () => {\n if (untrack(disabled)) return\n const e = new CustomEvent(`menu.itemSelect`, { bubbles: true, cancelable: true })\n onSelect(e)\n if (e.defaultPrevented) pointerDownHere = false\n else close()\n }\n const handlers = {\n ...row.handlers,\n onClick: select,\n onPointerDown: () => (pointerDownHere = true),\n onPointerUp: (e: PointerEvent) => {\n if (!pointerDownHere) (e.currentTarget as HTMLElement)?.click()\n },\n onKeyDown: (e: KeyboardEvent) => {\n row.handlers.onKeyDown(e)\n if (e.defaultPrevented) return\n const typingAhead = row.level.search() !== ``\n if (untrack(disabled) || (typingAhead && e.key === ` `)) return\n if (e.key === `Enter` || e.key === ` `) {\n ;(e.currentTarget as HTMLElement).click()\n e.preventDefault()\n }\n },\n }\n return { ...row, handlers }\n}\n","// FEED-131: Radix `RovingFocusGroup`: the group's own tab stop (`tabindex=0`\n// until an item holds the stop, entry focus to the active item), the items'\n// roving `tabindex`, the arrow/Home/End intents by orientation and `dir`,\n// `focusFirst` in a timeout. Tabs, Segmented (Radix ToggleGroup) and the\n// Radio group's keys use it.\n\nimport { createSignal } from \"solid-js\"\nimport { wrapArray } from \"./typeahead\"\n\nexport type Intent = `first` | `last` | `prev` | `next`\nexport const KEY_INTENT: Record<string, Intent> = { ArrowLeft: `prev`, ArrowUp: `prev`, ArrowRight: `next`, ArrowDown: `next`, PageUp: `first`, Home: `first`, PageDown: `last`, End: `last` }\n\nexport function focusIntent(e: KeyboardEvent, orientation: `horizontal` | `vertical` | undefined, dir: `ltr` | `rtl`): Intent | undefined {\n let key = e.key\n if (dir === `rtl`) key = key === `ArrowLeft` ? `ArrowRight` : key === `ArrowRight` ? `ArrowLeft` : key\n if (orientation === `vertical` && (key === `ArrowLeft` || key === `ArrowRight`)) return undefined\n if (orientation === `horizontal` && (key === `ArrowUp` || key === `ArrowDown`)) return undefined\n return KEY_INTENT[key]\n}\n\n/** Radix RovingFocusGroup's `focusFirst`: the first candidate that takes\n * focus (a candidate already focused stops the walk). */\nexport function rovingFocusFirst(candidates: (HTMLElement | null | undefined)[]): void {\n const previous = document.activeElement\n for (const candidate of candidates) {\n if (!candidate) continue\n if (candidate === previous) return\n candidate.focus()\n if (document.activeElement !== previous) return\n }\n}\n\ntype Orientation = `horizontal` | `vertical` | undefined\n\n/** Radix's RovingFocusGroup: the group's own attributes + handlers, and\n * each item's. `items()` = the item elements in order, `orientation` a value or an accessor, `focusable(el)`,\n * `active(el)` = the selected one (the group's entry focus). */\nexport function createRovingGroup(opts: { orientation?: Orientation | (() => Orientation); dir: () => `ltr` | `rtl`; loop: boolean; items: () => HTMLElement[]; focusable: (el: HTMLElement) => boolean; active: (el: HTMLElement) => boolean }) {\n const orientation = (): Orientation => (typeof opts.orientation === `function` ? opts.orientation() : opts.orientation)\n const [stop, setStop] = createSignal<HTMLElement | null>(null)\n const [tabbingBackOut, setTabbingBackOut] = createSignal(false)\n let clickFocus = false\n const group = (): Record<string, unknown> => ({ tabindex: tabbingBackOut() ? -1 : 0, \"data-orientation\": orientation() })\n // React's onFocus/onBlur BUBBLE (focusin/focusout): a click on an item\n // resets the click flag through the group.\n const groupHandlers = {\n onMouseDown: () => void (clickFocus = true),\n onFocusIn: (e: FocusEvent) => {\n const keyboard = !clickFocus\n if (e.target === e.currentTarget && keyboard && !tabbingBackOut()) {\n const items = opts.items().filter(opts.focusable)\n const activeItem = items.find(opts.active)\n const current = items.find((el) => el === stop())\n rovingFocusFirst([activeItem, current, ...items].filter((el): el is HTMLElement => Boolean(el)))\n }\n clickFocus = false\n },\n onFocusOut: () => setTabbingBackOut(false),\n }\n const item = (el: () => HTMLElement | undefined, focusable: () => boolean) => ({\n tabindex: () => (stop() !== null && stop() === el() ? 0 : -1),\n onMouseDown: (e: MouseEvent) => {\n if (!focusable()) e.preventDefault()\n else setStop(el() ?? null)\n },\n onFocus: () => setStop(el() ?? null),\n onKeyDown: (e: KeyboardEvent) => {\n if (e.key === `Tab` && e.shiftKey) {\n setTabbingBackOut(true)\n return\n }\n if (e.target !== e.currentTarget) return\n const intent = focusIntent(e, orientation(), opts.dir())\n if (intent === undefined) return\n if (e.metaKey || e.ctrlKey || e.altKey || e.shiftKey) return\n e.preventDefault()\n let candidates = opts.items().filter(opts.focusable)\n if (intent === `last`) candidates.reverse()\n else if (intent === `prev` || intent === `next`) {\n if (intent === `prev`) candidates.reverse()\n const at = candidates.indexOf(e.currentTarget as HTMLElement)\n candidates = opts.loop ? wrapArray(candidates, at + 1) : candidates.slice(at + 1)\n }\n setTimeout(() => rovingFocusFirst(candidates))\n },\n })\n return { group, groupHandlers, item }\n}\n","// FEED-131: the listbox keyboard model (React's natives/listbox.ts\n// `useListNavigation`) and Radix Select's trigger keys. `createListNavigation`\n// = the Select's and the ChipInput's (the clamp runs as an effect);\n// `createListNavigationSync` = the TimePicker's (the clamp runs as a\n// computation). The two differ in timing only, kept apart so neither moves.\n\nimport { createComputed, createEffect, createSignal, untrack, type Accessor } from \"solid-js\"\nimport { nextEnabledIndex, typeaheadStep } from \"@exponential_app/eui/web\"\n\nexport interface ListNavOptions {\n count: Accessor<number>\n isDisabled?: (index: number) => boolean\n labelOf?: (index: number) => string\n onPick: (index: number) => void\n /** Type-ahead (off when a search field owns the keys). */\n typeahead?: Accessor<boolean>\n initial?: number\n}\n\n/** React's `useListNavigation`: an active option (aria-activedescendant,\n * focus stays where it is), ArrowUp/ArrowDown move it (wrapping, skipping\n * disabled), Home/End jump, Enter picks, printable keys type-ahead by label\n * when the list owns focus. */\nexport function createListNavigation(o: ListNavOptions) {\n const isDisabled = o.isDisabled ?? (() => false)\n const labelOf = o.labelOf ?? (() => ``)\n const typeahead = o.typeahead ?? (() => false)\n const [active, setActive] = createSignal(o.initial ?? -1)\n let buffer = { text: ``, at: 0 }\n createEffect(() => {\n const count = o.count()\n if (active() >= count) setActive(count - 1)\n })\n const move = (from: number, delta: number) => nextEnabledIndex(o.count(), from, delta, isDisabled)\n const onKeyDown = (e: KeyboardEvent) => {\n const count = o.count()\n const a = active()\n if (e.key === `ArrowDown`) {\n e.preventDefault()\n setActive(move(a < 0 ? -1 : a, 1))\n } else if (e.key === `ArrowUp`) {\n e.preventDefault()\n setActive(move(a < 0 ? 0 : a, -1))\n } else if (e.key === `Home`) {\n e.preventDefault()\n setActive(move(-1, 1))\n } else if (e.key === `End`) {\n e.preventDefault()\n setActive(move(0, -1))\n } else if (e.key === `Enter` || (e.key === ` ` && typeahead() && buffer.text === ``)) {\n if (a >= 0 && a < count && !isDisabled(a)) {\n e.preventDefault()\n o.onPick(a)\n }\n } else if (typeahead() && e.key.length === 1 && !e.metaKey && !e.ctrlKey && !e.altKey) {\n const step = typeaheadStep(buffer, e.key, Date.now(), a, count, isDisabled, labelOf)\n buffer = step.buffer\n if (step.index >= 0) setActive(step.index)\n }\n }\n return { active, setActive, onKeyDown }\n}\n\nexport interface ListNavSyncOptions {\n count: Accessor<number>\n isDisabled?: (index: number) => boolean\n labelOf?: (index: number) => string\n onPick: (index: number) => void\n /** Type-ahead (off when a search field owns the keys). */\n typeahead?: boolean\n initial?: number\n}\n\n/** The TimePicker's variant of `createListNavigation`: `typeahead` is a\n * constant, the active index is clamped to the count SYNCHRONOUSLY\n * (`createComputed`, before the list renders) and `setActive` is a plain\n * setter (no updater function). React's `useListNavigation`: an active\n * option (aria-activedescendant, focus stays where it is), ArrowUp/ArrowDown\n * move it (wrapping, skipping disabled), Home/End jump, Enter picks,\n * printable keys type-ahead. */\nexport function createListNavigationSync(o: ListNavSyncOptions): { active: Accessor<number>; setActive: (i: number) => void; onKeyDown: (e: KeyboardEvent) => void } {\n const isDisabled = o.isDisabled ?? (() => false)\n const labelOf = o.labelOf ?? (() => ``)\n const [active, setActive] = createSignal(o.initial ?? -1)\n let buffer = { text: ``, at: 0 }\n createComputed(() => {\n const c = o.count()\n if (untrack(active) >= c) setActive(c - 1)\n })\n const move = (from: number, delta: number) => nextEnabledIndex(o.count(), from, delta, isDisabled)\n const onKeyDown = (e: KeyboardEvent) => {\n const count = o.count()\n const a = active()\n if (e.key === `ArrowDown`) {\n e.preventDefault()\n setActive(move(a < 0 ? -1 : a, 1))\n } else if (e.key === `ArrowUp`) {\n e.preventDefault()\n setActive(move(a < 0 ? 0 : a, -1))\n } else if (e.key === `Home`) {\n e.preventDefault()\n setActive(move(-1, 1))\n } else if (e.key === `End`) {\n e.preventDefault()\n setActive(move(0, -1))\n } else if (e.key === `Enter` || (e.key === ` ` && o.typeahead && buffer.text === ``)) {\n if (a >= 0 && a < count && !isDisabled(a)) {\n e.preventDefault()\n o.onPick(a)\n }\n } else if (o.typeahead && e.key.length === 1 && !e.metaKey && !e.ctrlKey && !e.altKey) {\n const step = typeaheadStep(buffer, e.key, Date.now(), a, count, isDisabled, labelOf)\n buffer = step.buffer\n if (step.index >= 0) setActive(step.index)\n }\n }\n return { active, setActive: (i) => setActive(i), onKeyDown }\n}\n\n/** Radix Select: the keys that open the content from the trigger, and the\n * keys that pick the focused item. */\nexport const OPEN_KEYS = [` `, `Enter`, `ArrowUp`, `ArrowDown`]\nexport const SELECTION_KEYS = [` `, `Enter`]\n","// FEED-131: Radix `useSize`. (The renderer's own `createElementSize` in\n// platform.ts is the surface's measured box: a different contract.)\n\nimport { createEffect, createSignal, onCleanup, type Accessor } from \"solid-js\"\n\n/** Radix's `useSize`: the element's border-box size once mounted, then\n * followed by a ResizeObserver (undefined before the first measure). */\nexport function createElementSize(el: Accessor<HTMLElement | undefined>): Accessor<{ width: number; height: number } | undefined> {\n const [size, setSize] = createSignal<{ width: number; height: number } | undefined>(undefined, { equals: (a, b) => a?.width === b?.width && a?.height === b?.height })\n createEffect(() => {\n const node = el()\n if (!node) return setSize(undefined)\n setSize({ width: node.offsetWidth, height: node.offsetHeight })\n if (typeof ResizeObserver === `undefined`) return\n const ro = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (!entry) return\n let width: number\n let height: number\n if (`borderBoxSize` in entry && entry.borderBoxSize) {\n const box = (Array.isArray(entry.borderBoxSize) ? entry.borderBoxSize[0] : entry.borderBoxSize) as ResizeObserverSize\n width = box.inlineSize\n height = box.blockSize\n } else {\n width = node.offsetWidth\n height = node.offsetHeight\n }\n setSize({ width, height })\n })\n ro.observe(node, { box: `border-box` })\n onCleanup(() => ro.unobserve(node))\n })\n return size\n}\n","// FEED-131: Radix's hidden form inputs (`BubbleInput`, `BubbleSelect`):\n// rendered only inside a <form> (`createInForm`, Radix's `isFormControl`),\n// a state change replayed on them with the native setter + a bubbling event\n// so <form> listeners see it.\n\nimport { For, createEffect, createSignal, on, onMount, untrack, type Accessor, type JSX } from \"solid-js\"\nimport { bool, str } from \"@exponential_app/eui/web\"\nimport { css } from \"../style\"\nimport { createElementSize } from \"./element-size\"\n\n/** Radix's `isFormControl`: the control sits in a <form> (decided once\n * mounted; Radix renders its bubble input only then). */\nexport function createInForm(el: Accessor<HTMLElement | undefined>): Accessor<boolean> {\n const [inForm, setInForm] = createSignal(false)\n onMount(() => setInForm(Boolean(el()?.closest(`form`))))\n return inForm\n}\n\n/** Radix's bubble-input effect: a state change replays on the hidden input\n * (the native setter + a bubbling event) so <form> listeners see it. */\nexport function bubbleOnChange<T>(input: () => HTMLInputElement | HTMLSelectElement | undefined, value: Accessor<T>, apply: (el: HTMLInputElement | HTMLSelectElement, v: T) => void, event: string, bubbles: () => boolean = () => true) {\n createEffect(\n on(\n value,\n (v) => {\n const el = input()\n if (!el) return\n apply(el, v)\n el.dispatchEvent(new Event(event, { bubbles: bubbles() }))\n },\n { defer: true }\n )\n )\n}\n\nexport const setChecked = (el: HTMLInputElement | HTMLSelectElement, v: boolean) => Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, `checked`)?.set?.call(el, v)\n\n/** Radix's hidden checkbox/radio bubble input (inside a <form> only). */\nexport function BubbleCheck(props: { type: `checkbox` | `radio`; control: HTMLElement | undefined; checked: boolean; name?: string; value: string; disabled: boolean; transformFirst: boolean; bubbles: () => boolean }): JSX.Element {\n let input: HTMLInputElement | undefined\n const size = createElementSize(() => props.control)\n const initial = untrack(() => props.checked)\n bubbleOnChange(() => input, () => props.checked, setChecked, `click`, props.bubbles)\n const style = () => {\n const s = size()\n const box = s ? { width: s.width, height: s.height } : {}\n const fixed = { position: `absolute`, pointerEvents: `none`, opacity: 0, margin: 0 }\n return css(props.transformFirst ? { transform: `translateX(-100%)`, ...box, ...fixed } : { ...box, ...fixed, transform: `translateX(-100%)` })\n }\n return <input ref={input} type={props.type} aria-hidden=\"true\" attr:checked={initial ? `` : undefined} name={props.name} value={props.value} disabled={props.disabled} tabindex={-1} style={style()} />\n}\n\nexport function SliderBubble(props: { name?: string; value: number }): JSX.Element {\n let input: HTMLInputElement | undefined\n const initial = untrack(() => String(props.value))\n bubbleOnChange(() => input, () => props.value, (el, v) => Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, `value`)?.set?.call(el, v), `input`)\n return <input ref={input} style={css({ display: `none` })} name={props.name} attr:value={initial} />\n}\n\n/** Radix's visually-hidden native <select> (inside a <form>). */\nexport function NativeSelect(props: { name: string; value: string | undefined; disabled: boolean; options: { label: string; value: string; disabled?: boolean }[]; onChange: (v: string) => void }): JSX.Element {\n let el: HTMLSelectElement | undefined\n const initial = untrack(() => props.value)\n createEffect(\n on(\n () => props.value,\n (v) => {\n if (!el) return\n Object.getOwnPropertyDescriptor(window.HTMLSelectElement.prototype, `value`)?.set?.call(el, v)\n el.dispatchEvent(new Event(`change`, { bubbles: true }))\n },\n { defer: true }\n )\n )\n const hidden = css({ position: `absolute`, border: 0, width: 1, height: 1, padding: 0, margin: -1, overflow: `hidden`, clip: `rect(0, 0, 0, 0)`, whiteSpace: `nowrap`, wordWrap: `normal` })\n return (\n <select ref={el} aria-hidden=\"true\" tabindex={-1} name={props.name} disabled={props.disabled} style={hidden} onChange={(e) => props.onChange(e.currentTarget.value)}>\n {initial === undefined ? <option value=\"\" /> : null}\n <For each={props.options}>\n {(o) => (\n <option value={o.value} disabled={bool(o.disabled)} attr:selected={initial !== undefined && o.value === initial ? `` : undefined}>\n {str(o.label)}\n </option>\n )}\n </For>\n </select>\n )\n}\n","// FEED-131: Radix Avatar's image-load state machine.\n\nimport { createComputed, createSignal, onCleanup } from \"solid-js\"\n\nexport type LoadingStatus = `idle` | `loading` | `loaded` | `error`\n\n/** Radix Avatar's `useImageLoadingStatus`: a detached `Image` probes the\n * src; the <img> paints only once it LOADED. */\nexport function createImageLoadingStatus(src: () => string | undefined): () => LoadingStatus {\n const [status, setStatus] = createSignal<LoadingStatus>(`idle`)\n const image = typeof window === `undefined` ? null : new window.Image()\n const resolve = (s: string | undefined): LoadingStatus => {\n if (!image) return `idle`\n if (!s) return `error`\n if (image.src !== s) image.src = s\n return image.complete && image.naturalWidth > 0 ? `loaded` : `loading`\n }\n createComputed(() => setStatus(resolve(src())))\n if (image) {\n const loaded = () => setStatus(`loaded`)\n const errored = () => setStatus(`error`)\n image.addEventListener(`load`, loaded)\n image.addEventListener(`error`, errored)\n onCleanup(() => {\n image.removeEventListener(`load`, loaded)\n image.removeEventListener(`error`, errored)\n })\n }\n return status\n}\n","import { splitProps, type ComponentProps, type ValidComponent } from \"solid-js\"\nimport { Dynamic } from \"solid-js/web\"\nimport { buttonVariants, type ButtonVariantProps } from \"@exponential_app/eui/web/primitives\"\n\nimport { cn } from \"./cn\"\n\nexport type ButtonProps = ComponentProps<`button`> &\n ButtonVariantProps & {\n /** React's `asChild`: the element (a tag or a component) the button\n * paints as, wearing exactly what Radix's Slot merges onto the child. */\n as?: ValidComponent\n href?: string\n target?: string\n rel?: string\n }\n\nfunction Button(props: ButtonProps) {\n const [local, rest] = splitProps(props, [`class`, `variant`, `size`, `as`])\n const variant = () => local.variant ?? `default`\n const size = () => local.size ?? `default`\n return (\n <Dynamic\n component={local.as ?? `button`}\n data-slot=\"button\"\n data-variant={variant()}\n data-size={size()}\n class={cn(buttonVariants({ variant: variant(), size: size(), className: local.class }))}\n {...rest}\n />\n )\n}\n\nexport { Button, buttonVariants }\n","// FEED-131: Radix `Dialog` on plain elements for the primitive set (Dialog,\n// Sheet, AlertDialog): the Root's state + ids, the Trigger and Close (an `as`\n// element wears Radix's attributes, React's `asChild`), the Portal (one per\n// part, no wrapper, `document.body` by default), the Overlay (scroll lock,\n// `pointer-events: auto`), the Content (the dismissable layer, the focus\n// scope, the focus guards, `hideOthers` when modal), Title and Description.\n// Plus the small pieces every overlay twin shares: the controllable open\n// state, handler composition, ref merging, React-style inline styles.\n\nimport { Show, createContext, createSignal, onMount, splitProps, untrack, useContext, type Accessor, type JSX, type ValidComponent } from \"solid-js\"\nimport { Dynamic } from \"solid-js/web\"\nimport { createLayer, type OutsideEvent } from \"./dismissable-layer\"\nimport { createFocusScope } from \"./focus-scope\"\nimport { useFocusGuards } from \"./focus-guards\"\nimport { useModalEffects } from \"./modal\"\nimport { LayerPortal } from \"./portal\"\nimport { createPresence } from \"./presence\"\nimport { useScrollLock } from \"./scroll-lock\"\nimport { bindStyle, type StyleObject } from \"./style-writer\"\n\nexport type { OutsideEvent }\n\n/** Calls a Solid event handler prop (a function or a `[fn, data]` pair). */\nexport function callHandler<E extends Event>(handler: unknown, event: E): void {\n if (typeof handler === `function`) handler(event)\n else if (Array.isArray(handler) && typeof handler[0] === `function`) handler[0](handler[1], event)\n}\n\n/** Radix's `composeEventHandlers`: the caller's handler first, ours unless it\n * prevented the default. */\nexport function composeHandlers<E extends Event>(user: unknown, ours: (event: E) => void, checkForDefaultPrevented = true): (event: E) => void {\n return (event) => {\n callHandler(user, event)\n if (!checkForDefaultPrevented || !event.defaultPrevented) ours(event)\n }\n}\n\n/** Calls a Solid `ref` prop (a compiled ref callback) with the element. */\nexport function callRef(ref: unknown, el: unknown): void {\n if (typeof ref === `function`) ref(el)\n}\n\n/** Every ref callback of `refs` receives the element. */\nexport function mergeRefs<T>(...refs: unknown[]): (el: T) => void {\n return (el) => {\n for (const r of refs) if (typeof r === `function`) r(el)\n }\n}\n\n/** A Solid `style` prop (object or string) as a kebab-case object for\n * `bindStyle` (React's semantics: the caller's style merges into ours). */\nexport function styleObject(style: unknown): StyleObject {\n if (!style || typeof style !== `object`) return {}\n const out: StyleObject = {}\n for (const [k, v] of Object.entries(style as Record<string, unknown>)) out[k] = v === undefined || v === null ? undefined : String(v)\n return out\n}\n\n/** Radix `useControllableState` for an overlay's `open`: controlled when\n * `open()` is defined, else local from `defaultOpen`; `onOpenChange` fires\n * on a change only, BEFORE the parts re-render (Radix calls it before its\n * portalled content mounts: a Tooltip's \"another tooltip opened\" event\n * must not reach its own content). */\nexport function createOpenState(o: { open: () => boolean | undefined; defaultOpen?: boolean; onOpenChange: () => ((open: boolean) => void) | undefined }): [Accessor<boolean>, (next: boolean) => void] {\n const [inner, setInner] = createSignal(untrack(() => o.defaultOpen) ?? false)\n const open = () => o.open() ?? inner()\n const set = (next: boolean) => {\n const prev = untrack(open)\n if (next !== prev) untrack(o.onOpenChange)?.(next)\n if (untrack(o.open) === undefined) setInner(next)\n }\n return [open, set]\n}\n\nexport const stateOf = (open: boolean) => (open ? `open` : `closed`)\n\nlet layerMounted = false\n/** A primitive layer attached in this task (see `layerMountedThisTask`). */\nexport function noteLayerMount(): void {\n if (layerMounted) return\n layerMounted = true\n queueMicrotask(() => (layerMounted = false))\n}\n/** Whether a primitive layer attached in this same task: a content created\n * now mounts NESTED in it (Radix registers that outer layer one commit\n * after this content's first render, so its first `pointer-events` is\n * unset). */\nexport function layerMountedThisTask(): boolean {\n return layerMounted\n}\n\n/** The layer's `pointer-events` with that lag applied. */\nexport function layerPointerEvents(layer: { pointerEvents: (registered: boolean) => string | undefined }, registered: boolean, lag: boolean): string | undefined {\n return lag && !registered ? undefined : layer.pointerEvents(registered)\n}\n\nexport interface DialogContextValue {\n open: Accessor<boolean>\n setOpen: (open: boolean) => void\n modal: boolean\n contentId: string\n titleId: string\n descriptionId: string\n trigger: Accessor<HTMLElement | undefined>\n setTrigger: (el: HTMLElement | undefined) => void\n}\n\nconst DialogContext = createContext<DialogContextValue>()\n\nexport function useDialogContext(part: string): DialogContextValue {\n const ctx = useContext(DialogContext)\n if (!ctx) throw new Error(`\\`${part}\\` must be used within \\`Dialog\\``)\n return ctx\n}\n\nexport interface DialogRootProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n modal?: boolean\n children?: JSX.Element\n}\n\n/** Radix `Dialog` (Root): renders no element. */\nexport function DialogRoot(props: DialogRootProps): JSX.Element {\n const [open, setOpen] = createOpenState({ open: () => props.open, defaultOpen: props.defaultOpen, onOpenChange: () => props.onOpenChange })\n const [trigger, setTrigger] = createSignal<HTMLElement>()\n const value: DialogContextValue = {\n open,\n setOpen,\n modal: untrack(() => props.modal) ?? true,\n contentId: `radix-${createId()}`,\n titleId: `radix-${createId()}`,\n descriptionId: `radix-${createId()}`,\n trigger,\n setTrigger,\n }\n return <DialogContext.Provider value={value}>{props.children}</DialogContext.Provider>\n}\n\nlet idCounter = 0\n/** A fresh id: `radix-<n>` keeps the parity rename rule (generated ids). */\nexport function createId(): string {\n return `s${++idCounter}`\n}\n\nexport type AsProps = { as?: ValidComponent; ref?: unknown; onClick?: unknown; children?: JSX.Element; [key: string]: unknown }\n\n/** Radix `DialogTrigger`: `type=\"button\"`, `aria-haspopup=\"dialog\"`,\n * `aria-expanded`, `aria-controls`, `data-state`, a click toggles. */\nexport function DialogTriggerPart(props: AsProps): JSX.Element {\n const ctx = useDialogContext(`DialogTrigger`)\n const [local, rest] = splitProps(props, [`as`, `ref`, `onClick`])\n return (\n <Dynamic\n component={local.as ?? `button`}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-expanded={ctx.open() ? `true` : `false`}\n aria-controls={ctx.contentId}\n data-state={stateOf(ctx.open())}\n {...rest}\n ref={mergeRefs(local.ref, ctx.setTrigger)}\n onClick={composeHandlers(local.onClick, () => ctx.setOpen(!untrack(ctx.open)))}\n />\n )\n}\n\n/** Radix `DialogClose`: `type=\"button\"`, a click closes. */\nexport function DialogClosePart(props: AsProps): JSX.Element {\n const ctx = useDialogContext(`DialogClose`)\n const [local, rest] = splitProps(props, [`as`, `ref`, `onClick`])\n return <Dynamic component={local.as ?? `button`} type=\"button\" {...rest} ref={local.ref} onClick={composeHandlers(local.onClick, () => ctx.setOpen(false))} />\n}\n\n/** Radix `Portal` as the primitives use it: the children appended to\n * `container`, no wrapper. Without a container Radix mounts into\n * `document.body` one commit LATER (its `mounted` state): a portal nested\n * in another portal's content lands after it, once the outer content's\n * effects (`hideOthers`, the focus guards) ran. */\nexport function DialogPortalPart(props: { container?: HTMLElement | null; children?: JSX.Element }): JSX.Element {\n const [mounted, setMounted] = createSignal(false)\n onMount(() => setMounted(true))\n return <LayerPortal mount={props.container !== undefined ? props.container : mounted() ? document.body : null}>{props.children}</LayerPortal>\n}\n\n/** Radix `DialogOverlay` (modal dialogs only): `data-state`, the scroll\n * lock, `pointer-events: auto`; present while open (+ its exit animation). */\nexport function DialogOverlayPart(props: { style?: unknown; ref?: unknown; [key: string]: unknown }): JSX.Element {\n const ctx = useDialogContext(`DialogOverlay`)\n const presence = createPresence(ctx.open)\n const [local, rest] = splitProps(props, [`style`, `ref`])\n const Overlay = () => {\n const el = (<div data-state={stateOf(ctx.open())} {...rest} />) as HTMLDivElement\n presence.ref(el)\n bindStyle(el, () => ({ \"pointer-events\": `auto`, ...styleObject(local.style) }))\n callRef(local.ref, el)\n onMount(() => useScrollLock())\n return el\n }\n return (\n <Show when={ctx.modal && presence.mounted()}>\n <Overlay />\n </Show>\n )\n}\n\nexport interface DialogContentPartProps {\n role?: string\n style?: unknown\n ref?: unknown\n onOpenAutoFocus?: (e: Event) => void\n onCloseAutoFocus?: (e: Event) => void\n onEscapeKeyDown?: (e: KeyboardEvent) => void\n onPointerDownOutside?: (e: OutsideEvent) => void\n onFocusOutside?: (e: OutsideEvent) => void\n onInteractOutside?: (e: OutsideEvent) => void\n onKeyDown?: unknown\n children?: JSX.Element\n [key: string]: unknown\n}\n\n/** Radix `DialogContent` (modal or not, per the Root): `role=\"dialog\"`,\n * `id`, `aria-describedby`, `aria-labelledby`, `data-state`,\n * `tabindex=\"-1\"`, the layer's `pointer-events`; present while open. */\nexport function DialogContentPart(props: DialogContentPartProps): JSX.Element {\n const ctx = useDialogContext(`DialogContent`)\n const presence = createPresence(ctx.open)\n const [local, rest] = splitProps(props, [`role`, `style`, `ref`, `children`, `onOpenAutoFocus`, `onCloseAutoFocus`, `onEscapeKeyDown`, `onPointerDownOutside`, `onFocusOutside`, `onInteractOutside`, `onKeyDown`])\n const Content = () => {\n const modal = ctx.modal\n let interactedOutside = false\n let pointerDownOutside = false\n const layer = createLayer({\n disableOutsidePointerEvents: () => modal,\n onEscapeKeyDown: (e) => local.onEscapeKeyDown?.(e),\n onPointerDownOutside: (e) => {\n local.onPointerDownOutside?.(e)\n if (!modal || e.defaultPrevented) return\n const original = e.detail.originalEvent as PointerEvent\n const ctrlLeftClick = original.button === 0 && original.ctrlKey === true\n if (original.button === 2 || ctrlLeftClick) e.preventDefault()\n },\n onFocusOutside: (e) => {\n local.onFocusOutside?.(e)\n if (modal && !e.defaultPrevented) e.preventDefault()\n },\n onInteractOutside: (e) => {\n local.onInteractOutside?.(e)\n if (modal) return\n if (!e.defaultPrevented) {\n interactedOutside = true\n if (e.detail.originalEvent.type === `pointerdown`) pointerDownOutside = true\n }\n const target = e.target as Node | null\n if (target && ctx.trigger()?.contains(target)) e.preventDefault()\n if (e.detail.originalEvent.type === `focusin` && pointerDownOutside) e.preventDefault()\n },\n onDismiss: () => ctx.setOpen(false),\n })\n const scope = createFocusScope({\n trapped: () => modal && ctx.open(),\n loop: true,\n onMountAutoFocus: (e) => local.onOpenAutoFocus?.(e),\n onUnmountAutoFocus: (e) => {\n if (modal) {\n local.onCloseAutoFocus?.(e)\n if (e.defaultPrevented) return\n e.preventDefault()\n ctx.trigger()?.focus()\n return\n }\n local.onCloseAutoFocus?.(e)\n if (!e.defaultPrevented) {\n if (!interactedOutside) ctx.trigger()?.focus()\n e.preventDefault()\n }\n interactedOutside = false\n pointerDownOutside = false\n },\n })\n const [registered, setRegistered] = createSignal(false)\n const lag = layerMountedThisTask()\n const el = (\n <div\n role={(local.role ?? `dialog`) as `dialog`}\n id={ctx.contentId}\n aria-describedby={ctx.descriptionId}\n aria-labelledby={ctx.titleId}\n data-state={stateOf(ctx.open())}\n tabindex=\"-1\"\n {...rest}\n onKeyDown={(e: KeyboardEvent) => {\n callHandler(local.onKeyDown, e)\n scope.onKeyDown(e)\n }}\n >\n {local.children}\n </div>\n ) as HTMLDivElement\n presence.ref(el)\n bindStyle(el, () => ({ \"pointer-events\": layerPointerEvents(layer, registered(), lag), ...styleObject(local.style) }))\n callRef(local.ref, el)\n onMount(() => {\n layer.attach(el)\n setRegistered(true)\n noteLayerMount()\n scope.attach(el)\n useFocusGuards()\n if (modal) useModalEffects(el, false)\n })\n return el\n }\n return (\n <Show when={presence.mounted()}>\n <Content />\n </Show>\n )\n}\n\n/** Radix `DialogTitle`: `<h2 id=titleId>`. */\nexport function DialogTitlePart(props: { [key: string]: unknown; children?: JSX.Element }): JSX.Element {\n const ctx = useDialogContext(`DialogTitle`)\n return <h2 id={ctx.titleId} {...props} />\n}\n\n/** Radix `DialogDescription`: `<p id=descriptionId>`. */\nexport function DialogDescriptionPart(props: { [key: string]: unknown; children?: JSX.Element }): JSX.Element {\n const ctx = useDialogContext(`DialogDescription`)\n return <p id={ctx.descriptionId} {...props} />\n}\n","import { Show, createContext, createEffect, createSignal, on, onCleanup, splitProps, untrack, useContext, type Accessor, type ComponentProps, type JSX } from \"solid-js\"\nimport { Dynamic } from \"solid-js/web\"\nimport { Check, ChevronRight, Circle } from \"lucide-solid\"\nimport { DROPDOWN_MENU_CLASSES } from \"@exponential_app/eui/web/primitives\"\n\nimport { MenuContent, createMenuRow, createPresence, createSelectable, useKeyboardTracking, type Align, type OutsideEvent, type Side } from \"../behaviors\"\nimport { DialogPortalPart, layerMountedThisTask, noteLayerMount, callRef, composeHandlers, createId, createOpenState, mergeRefs, stateOf, type AsProps } from \"../behaviors/dialog\"\nimport { PaintIcon } from \"../icons\"\nimport { cn } from \"./cn\"\n\n// Radix DropdownMenu on plain elements, on the Menu machinery of\n// ../behaviors/menu (the modal root content, roving focus, typeahead, the\n// submenus' pointer grace): every part shadcn's dropdown-menu.tsx exports.\n\ninterface RootValue {\n open: Accessor<boolean>\n setOpen: (open: boolean) => void\n triggerId: string\n contentId: string\n trigger: Accessor<HTMLElement | undefined>\n setTrigger: (el: HTMLElement | undefined) => void\n dir: () => `ltr` | `rtl`\n}\nconst RootContext = createContext<RootValue>()\nconst useRoot = (part: string) => {\n const ctx = useContext(RootContext)\n if (!ctx) throw new Error(`\\`${part}\\` must be used within \\`DropdownMenu\\``)\n return ctx\n}\n/** The open state of the enclosing menu level (the root or a submenu). */\nconst LevelOpenContext = createContext<Accessor<boolean>>(() => false)\n\nexport interface DropdownMenuProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n /** Radix's `modal` (the root content is always modal here). */\n modal?: boolean\n dir?: `ltr` | `rtl`\n children?: JSX.Element\n}\n\nfunction DropdownMenu(props: DropdownMenuProps) {\n const [open, setOpen] = createOpenState({ open: () => props.open, defaultOpen: props.defaultOpen, onOpenChange: () => props.onOpenChange })\n const [trigger, setTrigger] = createSignal<HTMLElement>()\n useKeyboardTracking()\n const value: RootValue = { open, setOpen, triggerId: `radix-${createId()}`, contentId: `radix-${createId()}`, trigger, setTrigger, dir: () => props.dir ?? `ltr` }\n return (\n <RootContext.Provider value={value}>\n <LevelOpenContext.Provider value={open}>{props.children}</LevelOpenContext.Provider>\n </RootContext.Provider>\n )\n}\n\nfunction DropdownMenuPortal(props: { container?: HTMLElement | null; children?: JSX.Element }) {\n return <DialogPortalPart {...props} />\n}\n\nfunction DropdownMenuTrigger(props: AsProps & { disabled?: boolean }) {\n const ctx = useRoot(`DropdownMenuTrigger`)\n const [local, rest] = splitProps(props, [`as`, `ref`, `disabled`, `onPointerDown`, `onKeyDown`])\n const disabled = () => local.disabled ?? false\n return (\n <Dynamic\n component={local.as ?? `button`}\n data-slot=\"dropdown-menu-trigger\"\n type=\"button\"\n id={ctx.triggerId}\n aria-haspopup=\"menu\"\n aria-expanded={ctx.open() ? `true` : `false`}\n aria-controls={ctx.open() ? ctx.contentId : undefined}\n data-state={stateOf(ctx.open())}\n data-disabled={disabled() ? `` : undefined}\n disabled={disabled()}\n {...rest}\n ref={mergeRefs(local.ref, ctx.setTrigger)}\n onPointerDown={composeHandlers(local.onPointerDown, (e: PointerEvent) => {\n if (!untrack(disabled) && e.button === 0 && e.ctrlKey === false) {\n const was = untrack(ctx.open)\n ctx.setOpen(!was)\n if (!was) e.preventDefault()\n }\n })}\n onKeyDown={composeHandlers(local.onKeyDown, (e: KeyboardEvent) => {\n if (untrack(disabled)) return\n if ([`Enter`, ` `].includes(e.key)) ctx.setOpen(!untrack(ctx.open))\n if (e.key === `ArrowDown`) ctx.setOpen(true)\n if ([`Enter`, ` `, `ArrowDown`].includes(e.key)) e.preventDefault()\n })}\n />\n )\n}\n\ntype ContentProps = Omit<ComponentProps<`div`>, `style` | `onKeyDown`> & {\n side?: Side\n align?: Align\n sideOffset?: number\n alignOffset?: number\n collisionPadding?: number\n container?: HTMLElement | null\n onKeyDown?: (e: KeyboardEvent) => void\n onCloseAutoFocus?: (e: Event) => void\n onEscapeKeyDown?: (e: KeyboardEvent) => void\n onFocusOutside?: (e: OutsideEvent) => void\n onInteractOutside?: (e: OutsideEvent) => void\n}\n\nconst CONTENT_KEYS = [`class`, `side`, `align`, `sideOffset`, `alignOffset`, `collisionPadding`, `container`, `children`, `ref`, `onKeyDown`, `onCloseAutoFocus`, `onEscapeKeyDown`, `onFocusOutside`, `onInteractOutside`] as const\n\nfunction DropdownMenuContent(props: ContentProps) {\n const ctx = useRoot(`DropdownMenuContent`)\n const [local, rest] = splitProps(props, CONTENT_KEYS)\n const presence = createPresence(ctx.open)\n let interactedOutside = false\n return (\n <DropdownMenuPortal container={local.container}>\n <Show when={presence.mounted()}>\n {(_) => {\n const lag = layerMountedThisTask()\n return (\n <MenuContent\n anchor={ctx.trigger()}\n side={local.side ?? `bottom`}\n align={local.align ?? `center`}\n sideOffset={local.sideOffset ?? 4}\n alignOffset={local.alignOffset}\n collisionPadding={local.collisionPadding ?? 0}\n dir={ctx.dir()}\n kind=\"dropdown-menu\"\n lagParentLayer={lag}\n root\n id={ctx.contentId}\n labelledBy={ctx.triggerId}\n state={() => stateOf(ctx.open())}\n attrs={() => ({ \"data-slot\": `dropdown-menu-content`, class: cn(DROPDOWN_MENU_CLASSES.content, local.class), ...rest })}\n setContent={(el) => {\n if (el) {\n presence.ref(el)\n noteLayerMount()\n callRef(local.ref, el)\n }\n }}\n onDismiss={() => ctx.setOpen(false)}\n onKeyDown={local.onKeyDown}\n onEscapeKeyDown={local.onEscapeKeyDown}\n onFocusOutside={local.onFocusOutside}\n onInteractOutside={(e) => {\n local.onInteractOutside?.(e)\n if (e.defaultPrevented) return\n const original = e.detail.originalEvent as PointerEvent\n const ctrlLeftClick = original.button === 0 && original.ctrlKey === true\n if (original.button === 2 || ctrlLeftClick) interactedOutside = true\n }}\n onCloseAutoFocus={(e) => {\n local.onCloseAutoFocus?.(e)\n if (e.defaultPrevented) return\n if (!interactedOutside) ctx.trigger()?.focus()\n interactedOutside = false\n e.preventDefault()\n }}\n >\n {local.children}\n </MenuContent>\n )\n }}\n </Show>\n </DropdownMenuPortal>\n )\n}\n\nfunction DropdownMenuGroup(props: ComponentProps<`div`>) {\n return <div role=\"group\" data-slot=\"dropdown-menu-group\" {...props} />\n}\n\nconst insetAttr = (inset: boolean | undefined) => (inset === undefined ? undefined : String(inset))\n\ntype ItemProps = Omit<ComponentProps<`div`>, `onSelect`> & {\n disabled?: boolean\n onSelect?: (e: Event) => void\n}\n\n/** Radix `MenuItem`'s row: the roving attributes, the selection, the\n * caller's handlers first. */\nfunction createItem(local: { disabled?: boolean; onSelect?: (e: Event) => void; ref?: unknown; onClick?: unknown; onPointerDown?: unknown; onPointerUp?: unknown; onPointerMove?: unknown; onPointerLeave?: unknown; onKeyDown?: unknown; onFocus?: unknown; onBlur?: unknown }, onSelect: (e: Event) => void) {\n const root = useRoot(`DropdownMenuItem`)\n const row = createSelectable(\n () => local.disabled ?? false,\n (e) => onSelect(e),\n () => root.setOpen(false)\n )\n const h = row.handlers\n return {\n attrs: row.attrs,\n ref: mergeRefs(row.ref, local.ref),\n handlers: {\n onClick: composeHandlers(local.onClick, h.onClick),\n onPointerDown: composeHandlers(local.onPointerDown, h.onPointerDown, false),\n onPointerUp: composeHandlers(local.onPointerUp, h.onPointerUp),\n onPointerMove: composeHandlers(local.onPointerMove, h.onPointerMove),\n onPointerLeave: composeHandlers(local.onPointerLeave, h.onPointerLeave),\n onKeyDown: composeHandlers(local.onKeyDown, h.onKeyDown),\n onFocus: composeHandlers(local.onFocus, h.onFocus),\n onBlur: composeHandlers(local.onBlur, h.onBlur),\n },\n }\n}\n\nconst ITEM_KEYS = [`disabled`, `onSelect`, `ref`, `onClick`, `onPointerDown`, `onPointerUp`, `onPointerMove`, `onPointerLeave`, `onKeyDown`, `onFocus`, `onBlur`] as const\n\nfunction DropdownMenuItem(props: ItemProps & { inset?: boolean; variant?: `default` | `destructive` }) {\n const [local, handlers, rest] = splitProps(props, [`class`, `inset`, `variant`], ITEM_KEYS)\n const item = createItem(handlers, (e) => handlers.onSelect?.(e))\n return (\n <div\n ref={item.ref}\n role=\"menuitem\"\n {...item.attrs()}\n data-slot=\"dropdown-menu-item\"\n data-inset={insetAttr(local.inset)}\n data-variant={local.variant ?? `default`}\n class={cn(DROPDOWN_MENU_CLASSES.item, local.class)}\n {...rest}\n {...(item.handlers as JSX.HTMLAttributes<HTMLDivElement>)}\n />\n )\n}\n\ntype CheckedState = boolean | `indeterminate`\nconst checkedState = (c: CheckedState) => (c === `indeterminate` ? `indeterminate` : c ? `checked` : `unchecked`)\nconst IndicatorContext = createContext<Accessor<CheckedState>>(() => false)\n\nfunction ItemIndicator(props: { children?: JSX.Element }) {\n const checked = useContext(IndicatorContext)\n return (\n <Show when={checked() === true || checked() === `indeterminate`}>\n <span data-state={checkedState(checked())}>{props.children}</span>\n </Show>\n )\n}\n\nfunction DropdownMenuCheckboxItem(props: ItemProps & { checked?: CheckedState; onCheckedChange?: (checked: boolean) => void }) {\n const [local, handlers, rest] = splitProps(props, [`class`, `children`, `checked`, `onCheckedChange`], ITEM_KEYS)\n const checked = () => local.checked ?? false\n const item = createItem(handlers, (e) => {\n handlers.onSelect?.(e)\n const c = untrack(checked)\n local.onCheckedChange?.(c === `indeterminate` ? true : !c)\n })\n return (\n <IndicatorContext.Provider value={checked}>\n <div\n ref={item.ref}\n role=\"menuitemcheckbox\"\n aria-checked={checked() === `indeterminate` ? `mixed` : checked() ? `true` : `false`}\n {...item.attrs()}\n data-slot=\"dropdown-menu-checkbox-item\"\n class={cn(DROPDOWN_MENU_CLASSES.checkItem, local.class)}\n {...rest}\n data-state={checkedState(checked())}\n {...(item.handlers as JSX.HTMLAttributes<HTMLDivElement>)}\n >\n <span class={DROPDOWN_MENU_CLASSES.itemIndicator}>\n <ItemIndicator>\n <PaintIcon icon={Check} class={DROPDOWN_MENU_CLASSES.checkIcon} />\n </ItemIndicator>\n </span>\n {local.children}\n </div>\n </IndicatorContext.Provider>\n )\n}\n\nconst RadioGroupContext = createContext<{ value: () => string | undefined; onValueChange: (value: string) => void }>({ value: () => undefined, onValueChange: () => {} })\n\nfunction DropdownMenuRadioGroup(props: Omit<ComponentProps<`div`>, `onChange`> & { value?: string; onValueChange?: (value: string) => void }) {\n const [local, rest] = splitProps(props, [`value`, `onValueChange`])\n return (\n <RadioGroupContext.Provider value={{ value: () => local.value, onValueChange: (v) => local.onValueChange?.(v) }}>\n <div role=\"group\" data-slot=\"dropdown-menu-radio-group\" {...rest} />\n </RadioGroupContext.Provider>\n )\n}\n\nfunction DropdownMenuRadioItem(props: ItemProps & { value: string }) {\n const [local, handlers, rest] = splitProps(props, [`class`, `children`, `value`], ITEM_KEYS)\n const group = useContext(RadioGroupContext)\n const checked = () => local.value === group.value()\n const item = createItem(handlers, (e) => {\n handlers.onSelect?.(e)\n group.onValueChange(local.value)\n })\n return (\n <IndicatorContext.Provider value={checked}>\n <div\n ref={item.ref}\n role=\"menuitemradio\"\n aria-checked={checked() ? `true` : `false`}\n {...item.attrs()}\n data-slot=\"dropdown-menu-radio-item\"\n class={cn(DROPDOWN_MENU_CLASSES.checkItem, local.class)}\n {...rest}\n data-state={checkedState(checked())}\n {...(item.handlers as JSX.HTMLAttributes<HTMLDivElement>)}\n >\n <span class={DROPDOWN_MENU_CLASSES.itemIndicator}>\n <ItemIndicator>\n <PaintIcon icon={Circle} class={DROPDOWN_MENU_CLASSES.radioIcon} />\n </ItemIndicator>\n </span>\n {local.children}\n </div>\n </IndicatorContext.Provider>\n )\n}\n\nfunction DropdownMenuLabel(props: ComponentProps<`div`> & { inset?: boolean }) {\n const [local, rest] = splitProps(props, [`class`, `inset`])\n return <div data-slot=\"dropdown-menu-label\" data-inset={insetAttr(local.inset)} class={cn(DROPDOWN_MENU_CLASSES.label, local.class)} {...rest} />\n}\n\nfunction DropdownMenuSeparator(props: ComponentProps<`div`>) {\n const [local, rest] = splitProps(props, [`class`])\n return <div role=\"separator\" aria-orientation=\"horizontal\" data-slot=\"dropdown-menu-separator\" class={cn(DROPDOWN_MENU_CLASSES.separator, local.class)} {...rest} />\n}\n\nfunction DropdownMenuShortcut(props: ComponentProps<`span`>) {\n const [local, rest] = splitProps(props, [`class`])\n return <span data-slot=\"dropdown-menu-shortcut\" class={cn(DROPDOWN_MENU_CLASSES.shortcut, local.class)} {...rest} />\n}\n\ninterface SubValue {\n open: Accessor<boolean>\n setOpen: (open: boolean) => void\n triggerId: string\n contentId: string\n trigger: Accessor<HTMLElement | undefined>\n setTrigger: (el: HTMLElement | undefined) => void\n content: Accessor<HTMLElement | undefined>\n setContent: (el: HTMLElement | undefined) => void\n}\nconst SubContext = createContext<SubValue>()\nconst useSub = (part: string) => {\n const ctx = useContext(SubContext)\n if (!ctx) throw new Error(`\\`${part}\\` must be used within \\`DropdownMenuSub\\``)\n return ctx\n}\n\nfunction DropdownMenuSub(props: { open?: boolean; defaultOpen?: boolean; onOpenChange?: (open: boolean) => void; children?: JSX.Element }) {\n const parentOpen = useContext(LevelOpenContext)\n const [open, setOpen] = createOpenState({ open: () => props.open, defaultOpen: props.defaultOpen, onOpenChange: () => props.onOpenChange })\n const [trigger, setTrigger] = createSignal<HTMLElement>()\n const [content, setContent] = createSignal<HTMLElement>()\n // A submenu closes with the menu it sits in.\n createEffect(on(parentOpen, (o) => o === false && setOpen(false)))\n onCleanup(() => setOpen(false))\n const value: SubValue = { open, setOpen, triggerId: `radix-${createId()}`, contentId: `radix-${createId()}`, trigger, setTrigger, content, setContent }\n return (\n <SubContext.Provider value={value}>\n <LevelOpenContext.Provider value={open}>{props.children}</LevelOpenContext.Provider>\n </SubContext.Provider>\n )\n}\n\nfunction DropdownMenuSubTrigger(props: ComponentProps<`div`> & { inset?: boolean; variant?: `default` | `destructive`; disabled?: boolean }) {\n const root = useRoot(`DropdownMenuSubTrigger`)\n const sub = useSub(`DropdownMenuSubTrigger`)\n const [local, rest] = splitProps(props, [`class`, `inset`, `variant`, `children`, `disabled`, `ref`, `onClick`, `onPointerMove`, `onPointerLeave`, `onKeyDown`, `onFocus`, `onBlur`])\n const disabled = () => local.disabled ?? false\n const row = createMenuRow(disabled)\n let openTimer: ReturnType<typeof setTimeout> | undefined\n let graceTimer: ReturnType<typeof setTimeout> | undefined\n const clearOpenTimer = () => {\n clearTimeout(openTimer)\n openTimer = undefined\n }\n onCleanup(() => {\n clearOpenTimer()\n clearTimeout(graceTimer)\n row.level.setGrace(null)\n })\n const openKey = () => (root.dir() === `rtl` ? `ArrowLeft` : `ArrowRight`)\n return (\n <div\n ref={mergeRefs(row.ref, sub.setTrigger, local.ref)}\n role=\"menuitem\"\n id={sub.triggerId}\n aria-haspopup=\"menu\"\n aria-expanded={sub.open() ? `true` : `false`}\n aria-controls={sub.contentId}\n data-state={stateOf(sub.open())}\n {...row.attrs()}\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={insetAttr(local.inset)}\n data-variant={local.variant ?? `default`}\n class={cn(DROPDOWN_MENU_CLASSES.subTrigger, local.class)}\n {...rest}\n onClick={composeHandlers(local.onClick, (e: MouseEvent) => {\n if (untrack(disabled)) return\n ;(e.currentTarget as HTMLElement).focus()\n if (!untrack(sub.open)) sub.setOpen(true)\n })}\n onPointerMove={composeHandlers(local.onPointerMove, (e: PointerEvent) => {\n if (e.pointerType !== `mouse`) return\n // Moving toward the open submenu: neither re-open nor re-focus.\n if (row.level.onItemEnter(e)) return\n if (!untrack(disabled) && !untrack(sub.open) && !openTimer) {\n row.level.setGrace(null)\n openTimer = setTimeout(() => {\n sub.setOpen(true)\n clearOpenTimer()\n }, 100)\n }\n row.handlers.onPointerMove(e)\n })}\n onPointerLeave={composeHandlers(local.onPointerLeave, (e: PointerEvent) => {\n if (e.pointerType !== `mouse`) return\n clearOpenTimer()\n const content = sub.content()\n const rect = content?.getBoundingClientRect()\n if (content && rect) {\n const side = content.dataset.side as Side\n const right = side === `right`\n const bleed = right ? -5 : 5\n const near = rect[right ? `left` : `right`]\n const far = rect[right ? `right` : `left`]\n row.level.setGrace({\n area: [\n { x: e.clientX + bleed, y: e.clientY },\n { x: near, y: rect.top },\n { x: far, y: rect.top },\n { x: far, y: rect.bottom },\n { x: near, y: rect.bottom },\n ],\n side,\n })\n clearTimeout(graceTimer)\n graceTimer = setTimeout(() => row.level.setGrace(null), 300)\n } else {\n if (row.level.onTriggerLeave(e)) return\n row.level.setGrace(null)\n row.handlers.onPointerLeave(e)\n }\n })}\n onKeyDown={composeHandlers(local.onKeyDown, (e: KeyboardEvent) => {\n const typingAhead = row.level.search() !== ``\n if (untrack(disabled) || (typingAhead && e.key === ` `)) return\n if ([`Enter`, ` `, openKey()].includes(e.key)) {\n sub.setOpen(true)\n sub.content()?.focus()\n e.preventDefault()\n return\n }\n row.handlers.onKeyDown(e)\n })}\n onFocus={composeHandlers(local.onFocus, row.handlers.onFocus)}\n onBlur={composeHandlers(local.onBlur, row.handlers.onBlur)}\n >\n {local.children}\n <PaintIcon icon={ChevronRight} class={DROPDOWN_MENU_CLASSES.subChevron} />\n </div>\n )\n}\n\nfunction DropdownMenuSubContent(props: ContentProps) {\n const root = useRoot(`DropdownMenuSubContent`)\n const sub = useSub(`DropdownMenuSubContent`)\n const [local, rest] = splitProps(props, CONTENT_KEYS)\n const presence = createPresence(sub.open)\n const closeKey = () => (root.dir() === `rtl` ? `ArrowRight` : `ArrowLeft`)\n return (\n <DropdownMenuPortal container={local.container}>\n <Show when={presence.mounted()}>\n {(_) => {\n const lag = layerMountedThisTask()\n return (\n <MenuContent\n anchor={sub.trigger()}\n side={root.dir() === `rtl` ? `left` : `right`}\n align=\"start\"\n sideOffset={local.sideOffset ?? 0}\n alignOffset={local.alignOffset}\n collisionPadding={local.collisionPadding ?? 0}\n dir={root.dir()}\n kind=\"dropdown-menu\"\n lagParentLayer={lag}\n root={false}\n id={sub.contentId}\n labelledBy={sub.triggerId}\n state={() => stateOf(sub.open())}\n attrs={() => ({ \"data-slot\": `dropdown-menu-sub-content`, class: cn(DROPDOWN_MENU_CLASSES.subContent, local.class), ...rest })}\n setContent={(el) => {\n sub.setContent(el)\n if (el) {\n presence.ref(el)\n noteLayerMount()\n callRef(local.ref, el)\n }\n }}\n // Radix's sub content has no dismiss of its own: the root's layer\n // answers outside pointers, Escape closes the whole menu.\n onDismiss={() => {}}\n onEscapeKeyDown={(e) => {\n local.onEscapeKeyDown?.(e)\n if (e.defaultPrevented) return\n root.setOpen(false)\n e.preventDefault()\n }}\n onFocusOutside={(e) => {\n local.onFocusOutside?.(e)\n if (e.defaultPrevented) return\n if (e.target !== sub.trigger()) sub.setOpen(false)\n }}\n onInteractOutside={local.onInteractOutside}\n onCloseAutoFocus={(e) => e.preventDefault()}\n onKeyDown={(e) => {\n local.onKeyDown?.(e)\n if (e.defaultPrevented) return\n if (sub.content()?.contains(e.target as Node) && e.key === closeKey()) {\n sub.setOpen(false)\n sub.trigger()?.focus()\n e.preventDefault()\n }\n }}\n >\n {local.children}\n </MenuContent>\n )\n }}\n </Show>\n </DropdownMenuPortal>\n )\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n}\n","import { createSignal, onCleanup, type Accessor } from \"solid-js\"\n\n/** Whether `query` matches right now, following changes (React's\n * `useMediaQuery`). Without a `window` or `matchMedia` it answers `false`. */\nexport function createMediaQuery(query: string): Accessor<boolean> {\n if (typeof window === `undefined` || typeof window.matchMedia !== `function`) return () => false\n const mql = window.matchMedia(query)\n const [matches, setMatches] = createSignal(mql.matches)\n const onChange = () => setMatches(window.matchMedia(query).matches)\n mql.addEventListener(`change`, onChange)\n onCleanup(() => mql.removeEventListener(`change`, onChange))\n return matches\n}\n","import { For, Show, createEffect, createSignal, on, onCleanup, onMount, splitProps, type Accessor, type ComponentProps, type JSX } from \"solid-js\"\nimport { Maximize2, Minus, Plus } from \"lucide-solid\"\nimport {\n ZOOM,\n zoomAtRest,\n zoomBounds,\n zoomCentre,\n zoomClamp,\n zoomDoubleTap,\n zoomDrag,\n zoomIsTall,\n zoomKey,\n zoomMenu,\n zoomMomentum,\n zoomMomentumActive,\n zoomPanRoom,\n zoomPercent,\n zoomPinch,\n zoomResize,\n zoomRestView,\n zoomScroll,\n zoomStep,\n zoomTo,\n zoomWheel,\n type ZoomInitial,\n type ZoomMenuItem,\n type ZoomSize,\n} from \"@exponential_app/eui\"\nimport {\n ZOOMABLE_IMAGE_CLASSES,\n ZOOMABLE_IMAGE_TRANSITION,\n createZoomController,\n zoomBoxAspect,\n zoomDeclaredSize,\n zoomImageStyle,\n type ZoomControls,\n type ZoomController,\n type ZoomMath,\n type ZoomPillState,\n} from \"@exponential_app/eui/web/primitives\"\n\nimport { PaintIcon } from \"../icons\"\nimport { css } from \"../style\"\nimport { Button } from \"./button\"\nimport { cn } from \"./cn\"\nimport { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuTrigger } from \"./dropdown-menu\"\nimport { createMediaQuery } from \"./use-media-query\"\n\nexport type { ZoomControls, ZoomPillState } from \"@exponential_app/eui/web/primitives\"\nexport type { ZoomInitial } from \"@exponential_app/eui\"\n\n/** The core's zoom functions, injected into the shared controller. */\nexport const ZOOM_MATH: ZoomMath = {\n ZOOM,\n zoomIsTall,\n zoomRestView,\n zoomClamp,\n zoomAtRest,\n zoomTo,\n zoomCentre,\n zoomWheel,\n zoomScroll,\n zoomStep,\n zoomDoubleTap,\n zoomKey,\n zoomDrag,\n zoomPinch,\n zoomMomentum,\n zoomMomentumActive,\n zoomPanRoom,\n zoomResize,\n zoomPercent,\n zoomMenu,\n zoomBounds,\n}\n\nconst REST_PILL: ZoomPillState = { percent: zoomPercent(1), atMin: false, atMax: false, atRest: true }\n\n/** Live inputs (getters) of `createZoomableImage`. */\nexport interface ZoomableImageOptions {\n src: () => string | undefined\n naturalWidth: () => number | undefined\n naturalHeight: () => number | undefined\n initial: () => ZoomInitial\n maxScale: () => number | undefined\n scale: () => number | undefined\n controls: () => ZoomControls\n transition: () => string | null\n onZoom?: (scale: number, atFit: boolean) => void\n onTap?: () => void\n}\n\n/** EXP-1586 (React's `useZoomableImage`): the Solid binding of the shared\n * zoom controller, used by the `ZoomableImage` primitive and the native. */\nexport function createZoomableImage(o: ZoomableImageOptions) {\n let root: HTMLDivElement | undefined\n let image: HTMLImageElement | undefined\n let pillEl: HTMLDivElement | undefined\n let controller: ZoomController | null = null\n const [loaded, setLoaded] = createSignal<ZoomSize | null>(null)\n const [pill, setPill] = createSignal<ZoomPillState>(REST_PILL)\n const [pillVisible, setPillVisible] = createSignal(true)\n const declared = () => zoomDeclaredSize(o.naturalWidth(), o.naturalHeight())\n const natural: Accessor<ZoomSize | null> = () => declared() ?? loaded()\n onMount(() => {\n if (!root || !image) return\n const c = createZoomController({\n math: ZOOM_MATH,\n root,\n image,\n pill: () => pillEl ?? null,\n natural,\n initial: o.initial,\n maxScale: o.maxScale,\n boundScale: o.scale,\n transition: o.transition,\n autoHide: () => o.controls() === `auto`,\n onPill: (p) => setPill(p),\n onPillVisible: setPillVisible,\n onZoom: (scale, atFit) => o.onZoom?.(scale, atFit),\n onTap: () => o.onTap?.(),\n })\n controller = c\n onCleanup(() => {\n c.destroy()\n controller = null\n })\n })\n // A new picture forgets the loaded size; a new picture, size, opening or\n // limit: the rest view, at once.\n createEffect(on(o.src, () => setLoaded(null), { defer: true }))\n createEffect(on([o.src, () => natural()?.width, () => natural()?.height, o.initial, o.maxScale], () => controller?.reset(), { defer: true }))\n createEffect(on(o.scale, () => controller?.syncScale(), { defer: true }))\n const onImageLoad = (e: Event) => {\n const img = e.currentTarget as HTMLImageElement\n if (!declared() && img.naturalWidth > 0 && img.naturalHeight > 0) setLoaded({ width: img.naturalWidth, height: img.naturalHeight })\n }\n const menuItems = (fitLabel: string): ZoomMenuItem[] => {\n const f = controller?.frame()\n return controller && f ? zoomMenu(controller.view(), f, fitLabel) : []\n }\n return {\n rootRef: (el: HTMLDivElement) => (root = el),\n imageRef: (el: HTMLImageElement) => (image = el),\n pillRef: (el: HTMLDivElement) => (pillEl = el),\n controller: () => controller,\n natural,\n pill,\n pillVisible,\n onImageLoad,\n menuItems,\n }\n}\n\n/** The pill's labels (catalog/strings.json; override per host). */\nexport interface ZoomableImageStrings {\n zoomIn: string\n zoomOut: string\n zoomToFit: string\n zoomLevel: string\n zoomFit: string\n}\n\nexport const ZOOMABLE_IMAGE_STRINGS: ZoomableImageStrings = { zoomIn: `Zoom in`, zoomOut: `Zoom out`, zoomToFit: `Zoom to fit`, zoomLevel: `Zoom level`, zoomFit: `Fit` }\n\nexport type ZoomableImageProps = Omit<ComponentProps<`div`>, `children` | `style`> & {\n src: string\n alt: string\n naturalWidth?: number\n naturalHeight?: number\n /** auto = fitWidth for a tall picture, else fit. */\n initial?: ZoomInitial\n maxScale?: number\n controls?: ZoomControls\n /** 1 = 100%; undefined = the rest view. */\n scale?: number\n onScaleChange?: (scale: number) => void\n /** A settled zoom change. */\n onZoom?: (zoom: { scale: number; atFit: boolean }) => void\n /** A single tap / click at rest. */\n onTap?: () => void\n strings?: Partial<ZoomableImageStrings>\n /** React-style inline style (camelCase, numbers = px). */\n style?: Record<string, string | number>\n}\n\n/** EXP-1586: React's `ZoomableImage` (the Exponential UI native as a\n * primitive: zoom + pan + THE zoom pill). */\nexport function ZoomableImage(props: ZoomableImageProps): JSX.Element {\n const [local, rest] = splitProps(props, [`src`, `alt`, `naturalWidth`, `naturalHeight`, `initial`, `maxScale`, `controls`, `scale`, `onScaleChange`, `onZoom`, `onTap`, `strings`, `class`, `style`])\n const reducedMotion = createMediaQuery(`(prefers-reduced-motion: reduce)`)\n const t = () => ({ ...ZOOMABLE_IMAGE_STRINGS, ...local.strings })\n const controls = () => local.controls ?? `auto`\n const zoom = createZoomableImage({\n src: () => local.src,\n naturalWidth: () => local.naturalWidth,\n naturalHeight: () => local.naturalHeight,\n initial: () => local.initial ?? `auto`,\n maxScale: () => local.maxScale,\n scale: () => local.scale,\n controls,\n transition: () => (reducedMotion() ? null : ZOOMABLE_IMAGE_TRANSITION),\n onZoom: (s, atFit) => {\n local.onScaleChange?.(s)\n local.onZoom?.({ scale: s, atFit })\n },\n onTap: () => local.onTap?.(),\n })\n const [menuOpen, setMenuOpen] = createSignal(false)\n createEffect(on(menuOpen, (open) => zoom.controller()?.holdPill(open), { defer: true }))\n const rootStyle = () => {\n const aspect = zoomBoxAspect(ZOOM_MATH, zoom.natural(), local.style?.height !== undefined)\n return css({ ...(aspect !== null ? { aspectRatio: String(aspect) } : {}), ...local.style })\n }\n return (\n <div ref={zoom.rootRef} data-slot=\"zoomable-image\" role=\"group\" aria-label={local.alt || undefined} tabindex={0} class={cn(ZOOMABLE_IMAGE_CLASSES.root, local.class)} style={rootStyle()} {...rest}>\n <img ref={zoom.imageRef} data-slot=\"zoomable-image-image\" src={local.src || undefined} alt={local.alt} draggable={false} loading=\"lazy\" decoding=\"async\" class={ZOOMABLE_IMAGE_CLASSES.image} style={css(zoomImageStyle(zoom.natural()))} onLoad={zoom.onImageLoad} />\n <Show when={controls() !== `none`}>\n <div ref={zoom.pillRef} data-slot=\"zoomable-image-pill\" data-state={zoom.pillVisible() ? `open` : `closed`} role=\"toolbar\" class={cn(ZOOMABLE_IMAGE_CLASSES.pill, !zoom.pillVisible() && ZOOMABLE_IMAGE_CLASSES.pillHidden)}>\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" class={ZOOMABLE_IMAGE_CLASSES.button} aria-label={t().zoomOut} disabled={zoom.pill().atMin} onClick={() => zoom.controller()?.step(-1)}>\n <PaintIcon icon={Minus} />\n </Button>\n <DropdownMenu open={menuOpen()} onOpenChange={setMenuOpen}>\n <DropdownMenuTrigger as={Button} type=\"button\" variant=\"ghost\" size=\"sm\" class={ZOOMABLE_IMAGE_CLASSES.percent} aria-label={t().zoomLevel}>\n {zoom.pill().percent}\n </DropdownMenuTrigger>\n <DropdownMenuContent side=\"top\" align=\"center\">\n <For each={menuOpen() ? zoom.menuItems(t().zoomFit) : []}>\n {(item) => (\n <DropdownMenuCheckboxItem\n checked={item.checked}\n onSelect={() => {\n const c = zoom.controller()\n if (item.scale === null) c?.rest()\n else c?.zoomScale(item.scale)\n }}\n >\n {item.label}\n </DropdownMenuCheckboxItem>\n )}\n </For>\n </DropdownMenuContent>\n </DropdownMenu>\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" class={ZOOMABLE_IMAGE_CLASSES.button} aria-label={t().zoomIn} disabled={zoom.pill().atMax} onClick={() => zoom.controller()?.step(1)}>\n <PaintIcon icon={Plus} />\n </Button>\n <span aria-hidden=\"true\" data-slot=\"zoomable-image-divider\" class={ZOOMABLE_IMAGE_CLASSES.divider} />\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" class={ZOOMABLE_IMAGE_CLASSES.button} aria-label={t().zoomToFit} aria-pressed={zoom.pill().atRest ? `true` : `false`} onClick={() => zoom.controller()?.rest()}>\n <PaintIcon icon={Maximize2} />\n </Button>\n </div>\n </Show>\n </div>\n )\n}\n"],"names":["CHROME","check","Check","chevronDown","ChevronDown","chevronUp","ChevronUp","chevronLeft","ChevronLeft","chevronRight","ChevronRight","close","X","search","Search","calendar","Calendar","send","Send","stop","Square","play","Play","pause","Pause","attach","Paperclip","spinner","LoaderCircle","placeholder","CircleDashed","FALLBACK_ICONS","ChevronsUpDown","Copy","File","Minus","Plus","Clock","Info","CircleCheck","TriangleAlert","CircleX","CircleStop","ArrowLeft","Ellipsis","Menu","CheckCheck","ScanLine","QrCode","Hand","Maximize2","AudioLines","Mic","MicOff","Volume2","Ear","PhoneOff","PhoneIncoming","upload","Upload","star","Star","Object","fromEntries","entries","CUSTOM_ICON_NODES","map","name","node","props","_$createComponent","LucideIcon","_$mergeProps","iconNode","resolveIcon","icons","lookupIcon","shapes","WeakMap","probe","icon","has","get","shape","document","createRoot","dispose","el","Element","localName","classList","contains","classes","Array","from","filter","c","nodes","children","child","attrs","a","attributes","value","set","mergeClasses","i","all","Boolean","trim","indexOf","join","LucideSvg","local","rest","splitProps","hasA11y","keys","some","k","startsWith","size","attr","fallback","_el$","_tmpl$","_$spread","undefined","width","height","class","_$insert","For","each","tag","Dynamic","component","PaintIcon","p","IconGlyph","resolved","style","createMediaQuery","createElementSize","LayerPortal","Show","when","mount","resolveChildren","marker","createTextNode","appendChild","insert","onCleanup","n","flat","Infinity","Node","parentNode","removeChild","remove","mountIn","container","onMount","css","transformOrigin","fn","data","placedSide","placedAlign","placement","split","noArrowAlign","start","center","end","x","y","rects","floating","Popper","desired","align","side","setPlacement","createSignal","untrack","isPositioned","setPositioned","content","setContent","pos","origin","floatingSet","zIndex","disposed","wrapper","_$effect","_$setAttribute","dir","writeWrapper","styleWriter","dpr","ownerDocument","defaultView","devicePixelRatio","roundByDPR","v","Math","round","paintWrapper","s","position","left","top","transform","state","createEffect","anchor","getComputedStyle","padding","collisionPadding","detect","boundary","altBoundary","middleware","offset","mainAxis","sideOffset","alignmentAxis","alignOffset","shift","crossAxis","limiter","limitShift","flip","apply","elements","availableWidth","availableHeight","st","setProperty","reference","placementNow","update","computePosition","strategy","then","d","middlewareData","same","autoUpdate","animationFrame","popperContentStyle","kind","trigger","pointerEvents","positioned","prefix","animation","popperWrapper","opts","setPos","setZIndex","contentEl","window","placed","createMemo","willChange","minWidth","_el$2","_p$","_v$","_v$2","e","_$style","t","alive","r","first","onPlaced","VisuallyHidden","id","border","margin","overflow","clip","usingKeyboard","keyboardListeners","useKeyboardTracking","key","pointer","addEventListener","capture","removeEventListener","MenuLevelContext","createContext","FIRST_KEYS","LAST_KEYS","itemsOf","querySelectorAll","closest","MenuContent","layer","createLayer","disableOutsidePointerEvents","root","onEscapeKeyDown","onFocusOutside","preventDefault","onInteractOutside","onDismiss","scope","createFocusScope","trapped","loop","onMountAutoFocus","focus","preventScroll","onUnmountAutoFocus","onCloseAutoFocus","registered","setRegistered","highlighted","setHighlighted","tabStop","setTabStop","searchTimer","grace","pointerDir","lastPointerX","movingToSubmenu","inPolygon","clientX","clientY","area","level","onItemEnter","onItemLeave","onTriggerLeave","setGrace","g","clearTimeout","typeahead","next","items","hasAttribute","current","activeElement","currentMatch","find","textContent","values","match","getNextMatch","target","setTimeout","OVERLAY_PADDING","popper","labelledBy","onKeyDown","inside","modifier","ctrlKey","altKey","metaKey","length","includes","reverse","focusFirst","onFocus","onPointerMove","pointerType","LayerContext","Provider","bindStyle","lagParentLayer","outline","useFocusGuards","useModalEffects","createMenuRow","disabled","useContext","tabindex","handlers","onBlur","onPointerLeave","currentTarget","intent","shiftKey","candidates","at","slice","ref","createSelectable","onSelect","row","pointerDownHere","select","CustomEvent","bubbles","cancelable","defaultPrevented","onClick","onPointerDown","onPointerUp","click","typingAhead","createInForm","inForm","setInForm","bubbleOnChange","input","event","on","dispatchEvent","Event","defer","setChecked","getOwnPropertyDescriptor","HTMLInputElement","prototype","call","BubbleCheck","control","initial","checked","box","fixed","opacity","transformFirst","_ref$","_$use","type","_v$3","_v$4","o","SliderBubble","String","_tmpl$2","_ref$2","_v$5","display","_v$6","NativeSelect","HTMLSelectElement","hidden","whiteSpace","wordWrap","_el$3","_tmpl$3","onChange","_ref$3","_tmpl$4","options","_el$5","_tmpl$5","str","label","_v$0","bool","_v$1","_v$7","_v$8","_v$9","Button","variant","as","cn","buttonVariants","className","callHandler","handler","isArray","composeHandlers","user","ours","checkForDefaultPrevented","callRef","mergeRefs","refs","styleObject","out","createOpenState","inner","setInner","defaultOpen","open","prev","onOpenChange","stateOf","layerMounted","noteLayerMount","queueMicrotask","layerMountedThisTask","layerPointerEvents","lag","DialogContext","useDialogContext","part","ctx","Error","DialogRoot","setOpen","setTrigger","modal","contentId","createId","titleId","descriptionId","idCounter","DialogTriggerPart","r$","DialogClosePart","DialogPortalPart","mounted","setMounted","_$memo","body","DialogOverlayPart","presence","createPresence","Overlay","useScrollLock","DialogContentPart","Content","interactedOutside","pointerDownOutside","onPointerDownOutside","original","detail","originalEvent","ctrlLeftClick","button","onOpenAutoFocus","role","DialogTitlePart","DialogDescriptionPart","_el$4","RootContext","useRoot","LevelOpenContext","DropdownMenu","triggerId","DropdownMenuPortal","DropdownMenuTrigger","was","CONTENT_KEYS","DropdownMenuContent","_","DROPDOWN_MENU_CLASSES","DropdownMenuGroup","insetAttr","inset","createItem","h","ITEM_KEYS","DropdownMenuItem","item","checkedState","IndicatorContext","ItemIndicator","DropdownMenuCheckboxItem","onCheckedChange","firstChild","checkItem","checkIcon","_$className","itemIndicator","RadioGroupContext","onValueChange","DropdownMenuRadioGroup","_el$6","DropdownMenuRadioItem","group","_el$7","_tmpl$6","_el$8","_ref$4","Circle","radioIcon","DropdownMenuLabel","_el$9","_tmpl$7","DropdownMenuSeparator","_el$0","_tmpl$8","separator","DropdownMenuShortcut","_el$1","_tmpl$9","shortcut","SubContext","useSub","DropdownMenuSub","parentOpen","DropdownMenuSubTrigger","sub","openTimer","graceTimer","clearOpenTimer","openKey","_el$10","_tmpl$0","_ref$5","subTrigger","rect","getBoundingClientRect","dataset","right","bleed","near","far","bottom","subChevron","DropdownMenuSubContent","closeKey","subContent","ZOOM_MATH","ZOOM","zoomIsTall","zoomRestView","zoomClamp","zoomAtRest","zoomTo","zoomCentre","zoomWheel","zoomScroll","zoomStep","zoomDoubleTap","zoomKey","zoomDrag","zoomPinch","zoomMomentum","zoomMomentumActive","zoomPanRoom","zoomResize","zoomPercent","zoomMenu","zoomBounds","REST_PILL","percent","atMin","atMax","atRest","createZoomableImage","image","pillEl","controller","loaded","setLoaded","pill","setPill","pillVisible","setPillVisible","declared","zoomDeclaredSize","naturalWidth","naturalHeight","natural","createZoomController","math","maxScale","boundScale","scale","transition","autoHide","controls","onPill","onPillVisible","onZoom","atFit","onTap","destroy","src","reset","syncScale","onImageLoad","img","menuItems","fitLabel","f","frame","view","rootRef","imageRef","pillRef","ZOOMABLE_IMAGE_STRINGS","zoomIn","zoomOut","zoomToFit","zoomLevel","zoomFit","ZoomableImage","reducedMotion","strings","zoom","ZOOMABLE_IMAGE_TRANSITION","onScaleChange","menuOpen","setMenuOpen","holdPill","rootStyle","aspect","zoomBoxAspect","aspectRatio","alt","ZOOMABLE_IMAGE_CLASSES","_$addEventListener","step","zoomScale","pillHidden","divider","zoomImageStyle"],"mappings":"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"}