@exponential_app/eui-react 0.4.0 → 0.6.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.
@@ -416,6 +416,7 @@ function useZoomableImage2(o) {
416
416
  const pillRef = useRef2(null);
417
417
  const controller = useRef2(null);
418
418
  const [loaded, setLoaded] = useState(null);
419
+ const [ready, setReady] = useState(false);
419
420
  const [pill, setPill] = useState(REST_PILL);
420
421
  const [pillVisible, setPillVisible] = useState(true);
421
422
  const declared = zoomDeclaredSize(o.naturalWidth, o.naturalHeight);
@@ -449,11 +450,15 @@ function useZoomableImage2(o) {
449
450
  controller.current = null;
450
451
  };
451
452
  }, []);
452
- useLayoutEffect(() => setLoaded(null), [o.src]);
453
+ useLayoutEffect(() => {
454
+ setLoaded(null);
455
+ setReady(false);
456
+ }, [o.src]);
453
457
  useLayoutEffect(() => controller.current?.reset(), [o.src, natural?.width, natural?.height, o.initial, o.maxScale]);
454
458
  useLayoutEffect(() => controller.current?.syncScale(), [o.scale]);
455
459
  const onImageLoad = (e) => {
456
460
  const img = e.currentTarget;
461
+ setReady(true);
457
462
  if (!declared && img.naturalWidth > 0 && img.naturalHeight > 0)
458
463
  setLoaded({ width: img.naturalWidth, height: img.naturalHeight });
459
464
  };
@@ -462,7 +467,7 @@ function useZoomableImage2(o) {
462
467
  const f = c?.frame();
463
468
  return c && f ? zoomMenu(c.view(), f, fitLabel) : [];
464
469
  };
465
- return { rootRef, imageRef, pillRef, controller, natural, pill, pillVisible, onImageLoad, menuItems };
470
+ return { rootRef, imageRef, pillRef, controller, natural, ready, pill, pillVisible, onImageLoad, menuItems };
466
471
  }
467
472
  var ZOOMABLE_IMAGE_STRINGS2 = { zoomIn: `Zoom in`, zoomOut: `Zoom out`, zoomToFit: `Zoom to fit`, zoomLevel: `Zoom level`, zoomFit: `Fit` };
468
473
  function ZoomableImage2({ src, alt, naturalWidth, naturalHeight, initial = `auto`, maxScale, controls = `auto`, scale, onScaleChange, onZoom, onTap, strings, className, style, ...props }) {
@@ -592,5 +597,5 @@ function ZoomableImage2({ src, alt, naturalWidth, naturalHeight, initial = `auto
592
597
 
593
598
  export { cn2, getInitials2, ChoiceTilesFrame2, ChoiceTiles2, choiceColumns2, choiceToggle2, choiceValues2, buttonVariants2, Button2, DropdownMenu2, DropdownMenuPortal2, DropdownMenuTrigger2, DropdownMenuContent2, DropdownMenuGroup2, DropdownMenuItem2, DropdownMenuCheckboxItem2, DropdownMenuRadioGroup2, DropdownMenuRadioItem2, DropdownMenuLabel2, DropdownMenuSeparator2, DropdownMenuShortcut2, DropdownMenuSub2, DropdownMenuSubTrigger2, DropdownMenuSubContent2, useMediaQuery2, ZOOM_MATH2, useZoomableImage2, ZOOMABLE_IMAGE_STRINGS2, ZoomableImage2 };
594
599
 
595
- //# debugId=D29E7D264854B4E764756E2164756E21
596
- //# sourceMappingURL=index-eny7hh6w.js.map
600
+ //# debugId=E4A7D2F6E21DCD0D64756E2164756E21
601
+ //# sourceMappingURL=index-tayfb936.js.map
@@ -4,12 +4,12 @@
4
4
  "sourcesContent": [
5
5
  "import * as React from \"react\"\nimport { ImageIcon } from \"lucide-react\"\nimport { CHOICE_TILES_CLASSES, choiceColumns, choiceToggle, choiceValues, type ChoiceTileOption, type TileState } from \"@exponential_app/eui/web/primitives\"\n\nimport { cn } from \"./cn\"\n\nexport { choiceColumns, choiceToggle, choiceValues } from \"@exponential_app/eui/web/primitives\"\nexport type { ChoiceTileOption, TileState } from \"@exponential_app/eui/web/primitives\"\n\n// EXP-1280: picture choice tiles, ONE implementation for two skins.\n//\n// `ChoiceTilesFrame` is the headless half: the grid, one button per option\n// (radio tiles for a single pick, checkbox tiles for several), the roving tab\n// stop and the keys of catalog/a11y.json `ChoiceTiles`. The eUI native\n// (`natives/choice-tiles.tsx`) dresses it with the theme's recipe classes;\n// `ChoiceTiles` below dresses it with the app's Tailwind tokens at the SAME\n// geometry, so the plan card and an agent's surface draw the same tile.\n\ntype Attrs = Record<string, unknown>\n\nexport interface ChoiceTilesFrameProps {\n options: readonly ChoiceTileOption[]\n /** The picked values. */\n picked: readonly string[]\n multiple: boolean\n columns: number\n disabled?: boolean\n invalid?: boolean\n dir?: `ltr` | `rtl`\n /** A pick (already toggled for `multiple`): the next picked values. */\n onPick: (next: string[], value: string) => void\n rootProps?: Attrs\n tileProps: (state: TileState) => Attrs\n pictureProps: (state: TileState) => Attrs\n labelProps: (state: TileState) => Attrs\n descriptionProps: (state: TileState) => Attrs\n /** The picture's content (the frame keeps the box; a missing picture gets\n * the placeholder). */\n renderPicture: (src: string | null, state: TileState) => React.ReactNode\n /** Under the tiles (the field's errors), spanning every column. */\n after?: React.ReactNode\n rootRef?: React.Ref<HTMLDivElement>\n}\n\n/** The headless tiles: a `radiogroup` of `radio` buttons (single) or a\n * `group` of `checkbox` buttons (multiple). The picked tile (else the\n * first enabled one) is the tab stop; arrows move focus with wrap (a single\n * pick follows focus); Space/Enter toggle (the button's own click). Every\n * tile has a picture box once ANY option has an image, so a row keeps one\n * height. */\nexport function ChoiceTilesFrame({ options, picked, multiple, columns, disabled = false, invalid = false, dir = `ltr`, onPick, rootProps, tileProps, pictureProps, labelProps, descriptionProps, renderPicture, after, rootRef }: ChoiceTilesFrameProps) {\n const buttons = React.useRef<(HTMLButtonElement | null)[]>([])\n const order = React.useMemo(() => options.map((o) => o.value), [options])\n const pictures = options.some((o) => Boolean(o.image))\n const enabled = (i: number) => !disabled && !options[i]?.disabled\n const firstPicked = options.findIndex((o, i) => picked.includes(o.value) && enabled(i))\n const tabStop = firstPicked >= 0 ? firstPicked : options.findIndex((_, i) => enabled(i))\n const pick = (i: number) => {\n const value = options[i]!.value\n onPick(choiceToggle(picked, value, multiple, order), value)\n }\n const move = (from: number, delta: number) => {\n const n = options.length\n for (let step = 1; step <= n; step++) {\n const i = (((from + delta * step) % n) + n) % n\n if (enabled(i)) return i\n }\n return -1\n }\n const onKeyDown = (i: number) => (e: React.KeyboardEvent<HTMLButtonElement>) => {\n const forward = dir === `rtl` ? `ArrowLeft` : `ArrowRight`\n const back = dir === `rtl` ? `ArrowRight` : `ArrowLeft`\n const delta = e.key === forward || e.key === `ArrowDown` ? 1 : e.key === back || e.key === `ArrowUp` ? -1 : 0\n if (delta === 0) return\n e.preventDefault()\n const next = move(i, delta)\n if (next < 0) return\n buttons.current[next]?.focus()\n if (!multiple && !picked.includes(options[next]!.value)) pick(next)\n }\n return (\n <div\n ref={rootRef}\n role={multiple ? `group` : `radiogroup`}\n aria-invalid={invalid || undefined}\n aria-disabled={disabled || undefined}\n dir={dir}\n {...rootProps}\n style={{ display: `grid`, gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`, ...((rootProps?.style as React.CSSProperties | undefined) ?? {}) }}\n >\n {options.map((o, i) => {\n const state: TileState = { index: i, selected: picked.includes(o.value), disabled: !enabled(i) }\n const description = o.description ? String(o.description) : ``\n return (\n <button\n key={`${o.value}-${i}`}\n ref={(el) => {\n buttons.current[i] = el\n }}\n type=\"button\"\n role={multiple ? `checkbox` : `radio`}\n aria-checked={state.selected}\n aria-label={o.label}\n disabled={state.disabled}\n tabIndex={i === tabStop ? 0 : -1}\n data-state={state.selected ? `checked` : `unchecked`}\n data-value={o.value}\n onClick={() => pick(i)}\n onKeyDown={onKeyDown(i)}\n {...tileProps(state)}\n >\n {pictures ? (\n <span aria-hidden=\"true\" {...pictureProps(state)}>\n {renderPicture(o.image ? String(o.image) : null, state)}\n </span>\n ) : null}\n <span {...labelProps(state)}>{o.label}</span>\n {description ? <span {...descriptionProps(state)}>{description}</span> : null}\n </button>\n )\n })}\n {after}\n </div>\n )\n}\n\nexport interface ChoiceTilesProps {\n options: readonly ChoiceTileOption[]\n /** The pick: a string (single) or the picked values (multiple). */\n value: string | readonly string[] | null | undefined\n multiple?: boolean\n /** Tiles per row, 1–4 (default 2). */\n columns?: number\n disabled?: boolean\n /** Paints the destructive border (a required answer missing). */\n invalid?: boolean\n /** The next value: a string for a single pick, the values for `multiple`. */\n onChange?: (value: string | string[]) => void\n /** The picture element (the app passes an authorised <img> for\n * `/api/attachments/{id}`); default a plain lazy <img>. */\n renderImage?: (src: string, alt: string) => React.ReactNode\n className?: string\n \"aria-label\"?: string\n \"aria-labelledby\"?: string\n \"data-testid\"?: string\n dir?: `ltr` | `rtl`\n}\n\n/** THE picture choice (EXP-1280): the plan card's question blocks and the\n * standalone ask, at the eUI `ChoiceTiles` look. */\nfunction ChoiceTiles({ options, value, multiple = false, columns, disabled = false, invalid = false, onChange, renderImage, className, dir, ...rest }: ChoiceTilesProps) {\n const picked = choiceValues(value, multiple)\n const image = (src: string | null, label: string) =>\n src ? (renderImage ? renderImage(src, label) : <img src={src} alt={label} loading=\"lazy\" decoding=\"async\" className={CHOICE_TILES_CLASSES.image} />) : <ImageIcon className={CHOICE_TILES_CLASSES.placeholder} />\n return (\n <ChoiceTilesFrame\n options={options}\n picked={picked}\n multiple={multiple}\n columns={choiceColumns(columns)}\n disabled={disabled}\n invalid={invalid}\n dir={dir}\n onPick={(next) => onChange?.(multiple ? next : (next[0] ?? ``))}\n rootProps={{ \"data-slot\": `choice-tiles`, className: cn(CHOICE_TILES_CLASSES.root, className), \"aria-label\": rest[`aria-label`], \"aria-labelledby\": rest[`aria-labelledby`], \"data-testid\": rest[`data-testid`] }}\n tileProps={(s) => ({ \"data-slot\": `choice-tile`, className: cn(CHOICE_TILES_CLASSES.tile, s.selected && CHOICE_TILES_CLASSES.tileSelected, invalid && !s.selected && CHOICE_TILES_CLASSES.tileInvalid) })}\n pictureProps={() => ({ \"data-slot\": `choice-tile-picture`, className: CHOICE_TILES_CLASSES.picture })}\n labelProps={() => ({ className: CHOICE_TILES_CLASSES.label })}\n descriptionProps={() => ({ className: CHOICE_TILES_CLASSES.description })}\n renderPicture={(src, s) => image(src, options[s.index]?.label ?? ``)}\n />\n )\n}\n\nexport { ChoiceTiles }\n",
6
6
  "export { cn, getInitials } from \"@exponential_app/eui/web/primitives\"\n",
7
- "import { useEffect, useLayoutEffect, useRef, useState, type ComponentProps, type CSSProperties, type SyntheticEvent } from \"react\"\nimport { Maximize2Icon, MinusIcon, PlusIcon } from \"lucide-react\"\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 { Button } from \"./button\"\nimport { cn } from \"./cn\"\nimport { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuTrigger } from \"./dropdown-menu\"\nimport { useMediaQuery } 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\nexport interface ZoomableImageOptions {\n /** The picture as drawn (the native passes the host's media url). */\n src: string | undefined\n naturalWidth?: number\n naturalHeight?: number\n initial: ZoomInitial\n maxScale?: number\n /** The bound / controlled scale; undefined = the rest view. */\n scale?: number\n controls: ZoomControls\n /** The settle spring's CSS transition; null = snap. */\n transition: string | null\n onZoom?: (scale: number, atFit: boolean) => void\n onTap?: () => void\n}\n\n/** EXP-1586: the React binding of the shared zoom controller, used by the\n * `ZoomableImage` primitive and the catalog native alike. */\nexport function useZoomableImage(o: ZoomableImageOptions) {\n const rootRef = useRef<HTMLDivElement | null>(null)\n const imageRef = useRef<HTMLImageElement | null>(null)\n const pillRef = useRef<HTMLDivElement | null>(null)\n const controller = useRef<ZoomController | null>(null)\n const [loaded, setLoaded] = useState<ZoomSize | null>(null)\n const [pill, setPill] = useState<ZoomPillState>(REST_PILL)\n const [pillVisible, setPillVisible] = useState(true)\n const declared = zoomDeclaredSize(o.naturalWidth, o.naturalHeight)\n const natural = declared ?? loaded\n const latest = useRef({ ...o, natural })\n latest.current = { ...o, natural }\n useLayoutEffect(() => {\n const root = rootRef.current\n const image = imageRef.current\n if (!root || !image) return\n const c = createZoomController({\n math: ZOOM_MATH,\n root,\n image,\n pill: () => pillRef.current,\n natural: () => latest.current.natural,\n initial: () => latest.current.initial,\n maxScale: () => latest.current.maxScale,\n boundScale: () => latest.current.scale,\n transition: () => latest.current.transition,\n autoHide: () => latest.current.controls === `auto`,\n onPill: setPill,\n onPillVisible: setPillVisible,\n onZoom: (scale, atFit) => latest.current.onZoom?.(scale, atFit),\n onTap: () => latest.current.onTap?.(),\n })\n controller.current = c\n return () => {\n c.destroy()\n controller.current = null\n }\n }, [])\n // A new picture forgets the loaded size.\n useLayoutEffect(() => setLoaded(null), [o.src])\n // A new picture, size, opening or limit: the rest view, at once.\n useLayoutEffect(() => controller.current?.reset(), [o.src, natural?.width, natural?.height, o.initial, o.maxScale])\n useLayoutEffect(() => controller.current?.syncScale(), [o.scale])\n const onImageLoad = (e: SyntheticEvent<HTMLImageElement>) => {\n const img = e.currentTarget\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 c = controller.current\n const f = c?.frame()\n return c && f ? zoomMenu(c.view(), f, fitLabel) : []\n }\n return { rootRef, imageRef, pillRef, controller, natural, pill, pillVisible, onImageLoad, menuItems }\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` | `onTap`> & {\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}\n\n/** EXP-1586: the Exponential UI `ZoomableImage` native as a primitive: a\n * picture that zooms (pinch, ⌘/ctrl-wheel, double-click, + − 0 1) and pans\n * (drag, scroll) inside its box, with THE zoom pill. */\nexport function ZoomableImage({ src, alt, naturalWidth, naturalHeight, initial = `auto`, maxScale, controls = `auto`, scale, onScaleChange, onZoom, onTap, strings, className, style, ...props }: ZoomableImageProps) {\n const reducedMotion = useMediaQuery(`(prefers-reduced-motion: reduce)`)\n const t = { ...ZOOMABLE_IMAGE_STRINGS, ...strings }\n const zoom = useZoomableImage({\n src,\n naturalWidth,\n naturalHeight,\n initial,\n maxScale,\n scale,\n controls,\n transition: reducedMotion ? null : ZOOMABLE_IMAGE_TRANSITION,\n onZoom: (s, atFit) => {\n onScaleChange?.(s)\n onZoom?.({ scale: s, atFit })\n },\n onTap,\n })\n const [menuOpen, setMenuOpen] = useState(false)\n useEffect(() => zoom.controller.current?.holdPill(menuOpen), [menuOpen])\n const aspect = zoomBoxAspect(ZOOM_MATH, zoom.natural, style?.height !== undefined)\n const rootStyle: CSSProperties = { ...(aspect !== null ? { aspectRatio: String(aspect) } : {}), ...style }\n const { pill } = zoom\n return (\n <div ref={zoom.rootRef} data-slot=\"zoomable-image\" role=\"group\" aria-label={alt || undefined} tabIndex={0} className={cn(ZOOMABLE_IMAGE_CLASSES.root, className)} style={rootStyle} {...props}>\n <img ref={zoom.imageRef} data-slot=\"zoomable-image-image\" src={src || undefined} alt={alt} draggable={false} loading=\"lazy\" decoding=\"async\" className={ZOOMABLE_IMAGE_CLASSES.image} style={zoomImageStyle(zoom.natural)} onLoad={zoom.onImageLoad} />\n {controls !== `none` ? (\n <div ref={zoom.pillRef} data-slot=\"zoomable-image-pill\" data-state={zoom.pillVisible ? `open` : `closed`} role=\"toolbar\" className={cn(ZOOMABLE_IMAGE_CLASSES.pill, !zoom.pillVisible && ZOOMABLE_IMAGE_CLASSES.pillHidden)}>\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" className={ZOOMABLE_IMAGE_CLASSES.button} aria-label={t.zoomOut} disabled={pill.atMin} onClick={() => zoom.controller.current?.step(-1)}>\n <MinusIcon />\n </Button>\n <DropdownMenu open={menuOpen} onOpenChange={setMenuOpen}>\n <DropdownMenuTrigger asChild>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" className={ZOOMABLE_IMAGE_CLASSES.percent} aria-label={t.zoomLevel}>\n {pill.percent}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent side=\"top\" align=\"center\">\n {(menuOpen ? zoom.menuItems(t.zoomFit) : []).map((item) => (\n <DropdownMenuCheckboxItem\n key={item.label}\n checked={item.checked}\n onSelect={() => {\n const c = zoom.controller.current\n if (item.scale === null) c?.rest()\n else c?.zoomScale(item.scale)\n }}\n >\n {item.label}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" className={ZOOMABLE_IMAGE_CLASSES.button} aria-label={t.zoomIn} disabled={pill.atMax} onClick={() => zoom.controller.current?.step(1)}>\n <PlusIcon />\n </Button>\n <span aria-hidden=\"true\" data-slot=\"zoomable-image-divider\" className={ZOOMABLE_IMAGE_CLASSES.divider} />\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" className={ZOOMABLE_IMAGE_CLASSES.button} aria-label={t.zoomToFit} aria-pressed={pill.atRest} onClick={() => zoom.controller.current?.rest()}>\n <Maximize2Icon />\n </Button>\n </div>\n ) : null}\n </div>\n )\n}\n",
7
+ "import { useEffect, useLayoutEffect, useRef, useState, type ComponentProps, type CSSProperties, type SyntheticEvent } from \"react\"\nimport { Maximize2Icon, MinusIcon, PlusIcon } from \"lucide-react\"\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 { Button } from \"./button\"\nimport { cn } from \"./cn\"\nimport { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuTrigger } from \"./dropdown-menu\"\nimport { useMediaQuery } 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\nexport interface ZoomableImageOptions {\n /** The picture as drawn (the native passes the host's media url). */\n src: string | undefined\n naturalWidth?: number\n naturalHeight?: number\n initial: ZoomInitial\n maxScale?: number\n /** The bound / controlled scale; undefined = the rest view. */\n scale?: number\n controls: ZoomControls\n /** The settle spring's CSS transition; null = snap. */\n transition: string | null\n onZoom?: (scale: number, atFit: boolean) => void\n onTap?: () => void\n}\n\n/** EXP-1586: the React binding of the shared zoom controller, used by the\n * `ZoomableImage` primitive and the catalog native alike. */\nexport function useZoomableImage(o: ZoomableImageOptions) {\n const rootRef = useRef<HTMLDivElement | null>(null)\n const imageRef = useRef<HTMLImageElement | null>(null)\n const pillRef = useRef<HTMLDivElement | null>(null)\n const controller = useRef<ZoomController | null>(null)\n const [loaded, setLoaded] = useState<ZoomSize | null>(null)\n // The picture has painted (its `load` fired): until then (pending or\n // failed) the native draws its placeholder and no pill.\n const [ready, setReady] = useState(false)\n const [pill, setPill] = useState<ZoomPillState>(REST_PILL)\n const [pillVisible, setPillVisible] = useState(true)\n const declared = zoomDeclaredSize(o.naturalWidth, o.naturalHeight)\n const natural = declared ?? loaded\n const latest = useRef({ ...o, natural })\n latest.current = { ...o, natural }\n useLayoutEffect(() => {\n const root = rootRef.current\n const image = imageRef.current\n if (!root || !image) return\n const c = createZoomController({\n math: ZOOM_MATH,\n root,\n image,\n pill: () => pillRef.current,\n natural: () => latest.current.natural,\n initial: () => latest.current.initial,\n maxScale: () => latest.current.maxScale,\n boundScale: () => latest.current.scale,\n transition: () => latest.current.transition,\n autoHide: () => latest.current.controls === `auto`,\n onPill: setPill,\n onPillVisible: setPillVisible,\n onZoom: (scale, atFit) => latest.current.onZoom?.(scale, atFit),\n onTap: () => latest.current.onTap?.(),\n })\n controller.current = c\n return () => {\n c.destroy()\n controller.current = null\n }\n }, [])\n // A new picture forgets the loaded size.\n useLayoutEffect(() => {\n setLoaded(null)\n setReady(false)\n }, [o.src])\n // A new picture, size, opening or limit: the rest view, at once.\n useLayoutEffect(() => controller.current?.reset(), [o.src, natural?.width, natural?.height, o.initial, o.maxScale])\n useLayoutEffect(() => controller.current?.syncScale(), [o.scale])\n const onImageLoad = (e: SyntheticEvent<HTMLImageElement>) => {\n const img = e.currentTarget\n setReady(true)\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 c = controller.current\n const f = c?.frame()\n return c && f ? zoomMenu(c.view(), f, fitLabel) : []\n }\n return { rootRef, imageRef, pillRef, controller, natural, ready, pill, pillVisible, onImageLoad, menuItems }\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` | `onTap`> & {\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}\n\n/** EXP-1586: the Exponential UI `ZoomableImage` native as a primitive: a\n * picture that zooms (pinch, ⌘/ctrl-wheel, double-click, + − 0 1) and pans\n * (drag, scroll) inside its box, with THE zoom pill. */\nexport function ZoomableImage({ src, alt, naturalWidth, naturalHeight, initial = `auto`, maxScale, controls = `auto`, scale, onScaleChange, onZoom, onTap, strings, className, style, ...props }: ZoomableImageProps) {\n const reducedMotion = useMediaQuery(`(prefers-reduced-motion: reduce)`)\n const t = { ...ZOOMABLE_IMAGE_STRINGS, ...strings }\n const zoom = useZoomableImage({\n src,\n naturalWidth,\n naturalHeight,\n initial,\n maxScale,\n scale,\n controls,\n transition: reducedMotion ? null : ZOOMABLE_IMAGE_TRANSITION,\n onZoom: (s, atFit) => {\n onScaleChange?.(s)\n onZoom?.({ scale: s, atFit })\n },\n onTap,\n })\n const [menuOpen, setMenuOpen] = useState(false)\n useEffect(() => zoom.controller.current?.holdPill(menuOpen), [menuOpen])\n const aspect = zoomBoxAspect(ZOOM_MATH, zoom.natural, style?.height !== undefined)\n const rootStyle: CSSProperties = { ...(aspect !== null ? { aspectRatio: String(aspect) } : {}), ...style }\n const { pill } = zoom\n return (\n <div ref={zoom.rootRef} data-slot=\"zoomable-image\" role=\"group\" aria-label={alt || undefined} tabIndex={0} className={cn(ZOOMABLE_IMAGE_CLASSES.root, className)} style={rootStyle} {...props}>\n <img ref={zoom.imageRef} data-slot=\"zoomable-image-image\" src={src || undefined} alt={alt} draggable={false} loading=\"lazy\" decoding=\"async\" className={ZOOMABLE_IMAGE_CLASSES.image} style={zoomImageStyle(zoom.natural)} onLoad={zoom.onImageLoad} />\n {controls !== `none` ? (\n <div ref={zoom.pillRef} data-slot=\"zoomable-image-pill\" data-state={zoom.pillVisible ? `open` : `closed`} role=\"toolbar\" className={cn(ZOOMABLE_IMAGE_CLASSES.pill, !zoom.pillVisible && ZOOMABLE_IMAGE_CLASSES.pillHidden)}>\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" className={ZOOMABLE_IMAGE_CLASSES.button} aria-label={t.zoomOut} disabled={pill.atMin} onClick={() => zoom.controller.current?.step(-1)}>\n <MinusIcon />\n </Button>\n <DropdownMenu open={menuOpen} onOpenChange={setMenuOpen}>\n <DropdownMenuTrigger asChild>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" className={ZOOMABLE_IMAGE_CLASSES.percent} aria-label={t.zoomLevel}>\n {pill.percent}\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent side=\"top\" align=\"center\">\n {(menuOpen ? zoom.menuItems(t.zoomFit) : []).map((item) => (\n <DropdownMenuCheckboxItem\n key={item.label}\n checked={item.checked}\n onSelect={() => {\n const c = zoom.controller.current\n if (item.scale === null) c?.rest()\n else c?.zoomScale(item.scale)\n }}\n >\n {item.label}\n </DropdownMenuCheckboxItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" className={ZOOMABLE_IMAGE_CLASSES.button} aria-label={t.zoomIn} disabled={pill.atMax} onClick={() => zoom.controller.current?.step(1)}>\n <PlusIcon />\n </Button>\n <span aria-hidden=\"true\" data-slot=\"zoomable-image-divider\" className={ZOOMABLE_IMAGE_CLASSES.divider} />\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" className={ZOOMABLE_IMAGE_CLASSES.button} aria-label={t.zoomToFit} aria-pressed={pill.atRest} onClick={() => zoom.controller.current?.rest()}>\n <Maximize2Icon />\n </Button>\n </div>\n ) : null}\n </div>\n )\n}\n",
8
8
  "import * as React from \"react\"\nimport type { VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\nimport { buttonVariants } from \"@exponential_app/eui/web/primitives\"\n\nimport { cn } from \"./cn\"\n\nfunction Button({\n className,\n variant = `default`,\n size = `default`,\n asChild = false,\n ...props\n}: React.ComponentProps<`button`> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean\n }) {\n const Comp = asChild ? Slot.Root : `button`\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n )\n}\n\nexport { Button, buttonVariants }\n",
9
9
  "\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\"\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\"\nimport { DROPDOWN_MENU_CLASSES } from \"@exponential_app/eui/web/primitives\"\n\nimport { cn } from \"./cn\"\n\nfunction DropdownMenu({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />\n}\n\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return (\n <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />\n )\n}\n\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return (\n <DropdownMenuPrimitive.Trigger\n data-slot=\"dropdown-menu-trigger\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(DROPDOWN_MENU_CLASSES.content, className)}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n )\n}\n\nfunction DropdownMenuGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return (\n <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />\n )\n}\n\nfunction DropdownMenuItem({\n className,\n inset,\n variant = `default`,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n variant?: `default` | `destructive`\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(DROPDOWN_MENU_CLASSES.item, className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(DROPDOWN_MENU_CLASSES.checkItem, className)}\n checked={checked}\n {...props}\n >\n <span className={DROPDOWN_MENU_CLASSES.itemIndicator}>\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className={DROPDOWN_MENU_CLASSES.checkIcon} />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n )\n}\n\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return (\n <DropdownMenuPrimitive.RadioGroup\n data-slot=\"dropdown-menu-radio-group\"\n {...props}\n />\n )\n}\n\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(DROPDOWN_MENU_CLASSES.checkItem, className)}\n {...props}\n >\n <span className={DROPDOWN_MENU_CLASSES.itemIndicator}>\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className={DROPDOWN_MENU_CLASSES.radioIcon} />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n )\n}\n\nfunction DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(DROPDOWN_MENU_CLASSES.label, className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(DROPDOWN_MENU_CLASSES.separator, className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuShortcut({\n className,\n ...props\n}: React.ComponentProps<`span`>) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(DROPDOWN_MENU_CLASSES.shortcut, className)}\n {...props}\n />\n )\n}\n\nfunction DropdownMenuSub({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />\n}\n\nfunction DropdownMenuSubTrigger({\n className,\n inset,\n children,\n // EXP-687: a submenu that opens a destructive action reads red like the\n // item it leads to — same tokens as DropdownMenuItem's destructive variant.\n variant = `default`,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n variant?: `default` | `destructive`\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n data-variant={variant}\n className={cn(DROPDOWN_MENU_CLASSES.subTrigger, className)}\n {...props}\n >\n {children}\n <ChevronRightIcon className={DROPDOWN_MENU_CLASSES.subChevron} />\n </DropdownMenuPrimitive.SubTrigger>\n )\n}\n\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(DROPDOWN_MENU_CLASSES.subContent, className)}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\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",
10
10
  "import { useCallback, useSyncExternalStore } from \"react\"\n\n/** Whether `query` matches right now, following changes. Without a\n * `window` (SSR, static markup) or `matchMedia` it answers `false`. */\nexport function useMediaQuery(query: string): boolean {\n const subscribe = useCallback(\n (onChange: () => void) => {\n if (typeof window === `undefined` || typeof window.matchMedia !== `function`) return () => {}\n const mql = window.matchMedia(query)\n mql.addEventListener(`change`, onChange)\n return () => mql.removeEventListener(`change`, onChange)\n },\n [query]\n )\n const read = () =>\n typeof window !== `undefined` && typeof window.matchMedia === `function` && window.matchMedia(query).matches\n return useSyncExternalStore(subscribe, read, () => false)\n}\n"
11
11
  ],
12
- "mappings": "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",
13
- "debugId": "D29E7D264854B4E764756E2164756E21",
12
+ "mappings": ";AAAA;AACA;AACA;;;ACFA,eAAS,oBAAI;;;ADMb,0BAAS,gCAAe,+BAAc;AAAA;AA4C/B,SAAS,iBAAgB,GAAG,SAAS,QAAQ,UAAU,SAAS,WAAW,OAAO,UAAU,OAAO,MAAM,OAAO,QAAQ,WAAW,WAAW,cAAc,YAAY,kBAAkB,eAAe,OAAO,WAAkC;AAAA,EACvP,MAAM,UAAgB,aAAqC,CAAC,CAAC;AAAA,EAC7D,MAAM,QAAc,cAAQ,MAAM,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,OAAO,CAAC;AAAA,EACxE,MAAM,WAAW,QAAQ,KAAK,CAAC,MAAM,QAAQ,EAAE,KAAK,CAAC;AAAA,EACrD,MAAM,UAAU,CAAC,MAAc,CAAC,YAAY,CAAC,QAAQ,IAAI;AAAA,EACzD,MAAM,cAAc,QAAQ,UAAU,CAAC,GAAG,MAAM,OAAO,SAAS,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC;AAAA,EACtF,MAAM,UAAU,eAAe,IAAI,cAAc,QAAQ,UAAU,CAAC,GAAG,MAAM,QAAQ,CAAC,CAAC;AAAA,EACvF,MAAM,OAAO,CAAC,MAAc;AAAA,IAC1B,MAAM,QAAQ,QAAQ,GAAI;AAAA,IAC1B,OAAO,aAAa,QAAQ,OAAO,UAAU,KAAK,GAAG,KAAK;AAAA;AAAA,EAE5D,MAAM,OAAO,CAAC,MAAc,UAAkB;AAAA,IAC5C,MAAM,IAAI,QAAQ;AAAA,IAClB,SAAS,OAAO,EAAG,QAAQ,GAAG,QAAQ;AAAA,MACpC,MAAM,MAAO,OAAO,QAAQ,QAAQ,IAAK,KAAK;AAAA,MAC9C,IAAI,QAAQ,CAAC;AAAA,QAAG,OAAO;AAAA,IACzB;AAAA,IACA,OAAO;AAAA;AAAA,EAET,MAAM,YAAY,CAAC,MAAc,CAAC,MAA8C;AAAA,IAC9E,MAAM,UAAU,QAAQ,QAAQ,cAAc;AAAA,IAC9C,MAAM,OAAO,QAAQ,QAAQ,eAAe;AAAA,IAC5C,MAAM,QAAQ,EAAE,QAAQ,WAAW,EAAE,QAAQ,cAAc,IAAI,EAAE,QAAQ,QAAQ,EAAE,QAAQ,YAAY,KAAK;AAAA,IAC5G,IAAI,UAAU;AAAA,MAAG;AAAA,IACjB,EAAE,eAAe;AAAA,IACjB,MAAM,OAAO,KAAK,GAAG,KAAK;AAAA,IAC1B,IAAI,OAAO;AAAA,MAAG;AAAA,IACd,QAAQ,QAAQ,OAAO,MAAM;AAAA,IAC7B,IAAI,CAAC,YAAY,CAAC,OAAO,SAAS,QAAQ,MAAO,KAAK;AAAA,MAAG,KAAK,IAAI;AAAA;AAAA,EAEpE,uBACE,KAAC,OAAD;AAAA,IACE,KAAK;AAAA,IACL,MAAM,WAAW,UAAU;AAAA,IAC3B,gBAAc,WAAW;AAAA,IACzB,iBAAe,YAAY;AAAA,IAC3B;AAAA,OACI;AAAA,IACJ,OAAO,EAAE,SAAS,QAAQ,qBAAqB,UAAU,+BAAiC,WAAW,SAA6C,CAAC,EAAG;AAAA,IAPxJ,UAyCE;AAAA,MAhCC,QAAQ,IAAI,CAAC,GAAG,MAAM;AAAA,QACrB,MAAM,QAAmB,EAAE,OAAO,GAAG,UAAU,OAAO,SAAS,EAAE,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE;AAAA,QAC/F,MAAM,cAAc,EAAE,cAAc,OAAO,EAAE,WAAW,IAAI;AAAA,QAC5D,uBACE,KAAC,UAAD;AAAA,UAEE,KAAK,CAAC,OAAO;AAAA,YACX,QAAQ,QAAQ,KAAK;AAAA;AAAA,UAEvB,MAAK;AAAA,UACL,MAAM,WAAW,aAAa;AAAA,UAC9B,gBAAc,MAAM;AAAA,UACpB,cAAY,EAAE;AAAA,UACd,UAAU,MAAM;AAAA,UAChB,UAAU,MAAM,UAAU,IAAI;AAAA,UAC9B,cAAY,MAAM,WAAW,YAAY;AAAA,UACzC,cAAY,EAAE;AAAA,UACd,SAAS,MAAM,KAAK,CAAC;AAAA,UACrB,WAAW,UAAU,CAAC;AAAA,aAClB,UAAU,KAAK;AAAA,UAfrB,UAwBE;AAAA,YAPC,2BACC,IAAC,QAAD;AAAA,cAAM,eAAY;AAAA,iBAAW,aAAa,KAAK;AAAA,cAA/C,UACG,cAAc,EAAE,QAAQ,OAAO,EAAE,KAAK,IAAI,MAAM,KAAK;AAAA,aACtD,IACA;AAAA,4BACJ,IAAC,QAAD;AAAA,iBAAU,WAAW,KAAK;AAAA,cAA1B,UAA8B,EAAE;AAAA,aAAQ;AAAA,YACvC,8BAAc,IAAC,QAAD;AAAA,iBAAU,iBAAiB,KAAK;AAAA,cAAhC,UAAoC;AAAA,aAAc,IAAQ;AAAA;AAAA,WAtBpE,GAAG,EAAE,SAAS,GAuBnB;AAAA,OAEL;AAAA,MACA;AAAA;AAAA,GACD;AAAA;AA4BN,SAAS,YAAW,GAAG,SAAS,OAAO,WAAW,OAAO,SAAS,WAAW,OAAO,UAAU,OAAO,UAAU,aAAa,WAAW,QAAQ,QAA0B;AAAA,EACvK,MAAM,SAAS,aAAa,OAAO,QAAQ;AAAA,EAC3C,MAAM,QAAQ,CAAC,KAAoB,UACjC,MAAO,cAAc,YAAY,KAAK,KAAK,oBAAI,IAAC,OAAD;AAAA,IAAK;AAAA,IAAU,KAAK;AAAA,IAAO,SAAQ;AAAA,IAAO,UAAS;AAAA,IAAQ,WAAW,qBAAqB;AAAA,GAAO,oBAAM,IAAC,WAAD;AAAA,IAAW,WAAW,qBAAqB;AAAA,GAAa;AAAA,EACjN,uBACE,IAAC,mBAAD;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,cAAc,OAAO;AAAA,IAC9B;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,CAAC,SAAS,WAAW,WAAW,OAAQ,KAAK,MAAM,EAAG;AAAA,IAC9D,WAAW,EAAE,aAAa,gBAAgB,WAAW,IAAG,qBAAqB,MAAM,SAAS,GAAG,cAAc,KAAK,eAAe,mBAAmB,KAAK,oBAAoB,eAAe,KAAK,eAAe;AAAA,IAChN,WAAW,CAAC,OAAO,EAAE,aAAa,eAAe,WAAW,IAAG,qBAAqB,MAAM,EAAE,YAAY,qBAAqB,cAAc,WAAW,CAAC,EAAE,YAAY,qBAAqB,WAAW,EAAE;AAAA,IACvM,cAAc,OAAO,EAAE,aAAa,uBAAuB,WAAW,qBAAqB,QAAQ;AAAA,IACnG,YAAY,OAAO,EAAE,WAAW,qBAAqB,MAAM;AAAA,IAC3D,kBAAkB,OAAO,EAAE,WAAW,qBAAqB,YAAY;AAAA,IACvE,eAAe,CAAC,KAAK,MAAM,MAAM,KAAK,QAAQ,EAAE,QAAQ,SAAS,EAAE;AAAA,GACrE;AAAA;;;AE1KJ,+CAAqC;AACrC;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC1BA;AACA,2BAAS;;AAIT,SAAS,OAAM;AAAA,EACb;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP,UAAU;AAAA,KACP;AAAA,GAIA;AAAA,EACH,MAAM,OAAO,UAAU,KAAK,OAAO;AAAA,EAEnC,uBACE,KAAC,MAAD;AAAA,IACE,aAAU;AAAA,IACV,gBAAc;AAAA,IACd,aAAW;AAAA,IACX,WAAW,IAAG,gBAAe,EAAE,SAAS,MAAM,UAAU,CAAC,CAAC;AAAA,OACtD;AAAA,GACN;AAAA;;;ACvBJ;AACA,yBAAS;AACT;;AALA;AASA,SAAS,aAAY;AAAA,KAChB;AAAA,GACuD;AAAA,EAC1D,uBAAO,KAAC,sBAAsB,MAAvB;AAAA,IAA4B,aAAU;AAAA,OAAoB;AAAA,GAAO;AAAA;AAG1E,SAAS,mBAAkB;AAAA,KACtB;AAAA,GACyD;AAAA,EAC5D,uBACE,KAAC,sBAAsB,QAAvB;AAAA,IAA8B,aAAU;AAAA,OAA2B;AAAA,GAAO;AAAA;AAI9E,SAAS,oBAAmB;AAAA,KACvB;AAAA,GAC0D;AAAA,EAC7D,uBACE,KAAC,sBAAsB,SAAvB;AAAA,IACE,aAAU;AAAA,OACN;AAAA,GACN;AAAA;AAIJ,SAAS,oBAAmB;AAAA,EAC1B;AAAA,EACA,aAAa;AAAA,KACV;AAAA,GAC0D;AAAA,EAC7D,uBACE,KAAC,sBAAsB,QAAvB;AAAA,8BACE,KAAC,sBAAsB,SAAvB;AAAA,MACE,aAAU;AAAA,MACV;AAAA,MACA,WAAW,IAAG,sBAAsB,SAAS,SAAS;AAAA,SAClD;AAAA,KACN;AAAA,GACA;AAAA;AAIN,SAAS,kBAAiB;AAAA,KACrB;AAAA,GACwD;AAAA,EAC3D,uBACE,KAAC,sBAAsB,OAAvB;AAAA,IAA6B,aAAU;AAAA,OAA0B;AAAA,GAAO;AAAA;AAI5E,SAAS,iBAAgB;AAAA,EACvB;AAAA,EACA;AAAA,EACA,UAAU;AAAA,KACP;AAAA,GAIF;AAAA,EACD,uBACE,KAAC,sBAAsB,MAAvB;AAAA,IACE,aAAU;AAAA,IACV,cAAY;AAAA,IACZ,gBAAc;AAAA,IACd,WAAW,IAAG,sBAAsB,MAAM,SAAS;AAAA,OAC/C;AAAA,GACN;AAAA;AAIJ,SAAS,yBAAwB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,KACG;AAAA,GAC+D;AAAA,EAClE,uBACE,MAAC,sBAAsB,cAAvB;AAAA,IACE,aAAU;AAAA,IACV,WAAW,IAAG,sBAAsB,WAAW,SAAS;AAAA,IACxD;AAAA,OACI;AAAA,IAJN,UAYE;AAAA,sBANA,KAAC,QAAD;AAAA,QAAM,WAAW,sBAAsB;AAAA,QAAvC,0BACE,KAAC,sBAAsB,eAAvB;AAAA,oCACE,KAAC,WAAD;AAAA,YAAW,WAAW,sBAAsB;AAAA,WAAW;AAAA,SACvD;AAAA,OACF;AAAA,MACD;AAAA;AAAA,GACD;AAAA;AAIN,SAAS,uBAAsB;AAAA,KAC1B;AAAA,GAC6D;AAAA,EAChE,uBACE,KAAC,sBAAsB,YAAvB;AAAA,IACE,aAAU;AAAA,OACN;AAAA,GACN;AAAA;AAIJ,SAAS,sBAAqB;AAAA,EAC5B;AAAA,EACA;AAAA,KACG;AAAA,GAC4D;AAAA,EAC/D,uBACE,MAAC,sBAAsB,WAAvB;AAAA,IACE,aAAU;AAAA,IACV,WAAW,IAAG,sBAAsB,WAAW,SAAS;AAAA,OACpD;AAAA,IAHN,UAWE;AAAA,sBANA,KAAC,QAAD;AAAA,QAAM,WAAW,sBAAsB;AAAA,QAAvC,0BACE,KAAC,sBAAsB,eAAvB;AAAA,oCACE,KAAC,YAAD;AAAA,YAAY,WAAW,sBAAsB;AAAA,WAAW;AAAA,SACxD;AAAA,OACF;AAAA,MACD;AAAA;AAAA,GACD;AAAA;AAIN,SAAS,kBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,KACG;AAAA,GAGF;AAAA,EACD,uBACE,KAAC,sBAAsB,OAAvB;AAAA,IACE,aAAU;AAAA,IACV,cAAY;AAAA,IACZ,WAAW,IAAG,sBAAsB,OAAO,SAAS;AAAA,OAChD;AAAA,GACN;AAAA;AAIJ,SAAS,sBAAqB;AAAA,EAC5B;AAAA,KACG;AAAA,GAC4D;AAAA,EAC/D,uBACE,KAAC,sBAAsB,WAAvB;AAAA,IACE,aAAU;AAAA,IACV,WAAW,IAAG,sBAAsB,WAAW,SAAS;AAAA,OACpD;AAAA,GACN;AAAA;AAIJ,SAAS,qBAAoB;AAAA,EAC3B;AAAA,KACG;AAAA,GAC4B;AAAA,EAC/B,uBACE,KAAC,QAAD;AAAA,IACE,aAAU;AAAA,IACV,WAAW,IAAG,sBAAsB,UAAU,SAAS;AAAA,OACnD;AAAA,GACN;AAAA;AAIJ,SAAS,gBAAe;AAAA,KACnB;AAAA,GACsD;AAAA,EACzD,uBAAO,KAAC,sBAAsB,KAAvB;AAAA,IAA2B,aAAU;AAAA,OAAwB;AAAA,GAAO;AAAA;AAG7E,SAAS,uBAAsB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EAGA,UAAU;AAAA,KACP;AAAA,GAIF;AAAA,EACD,uBACE,MAAC,sBAAsB,YAAvB;AAAA,IACE,aAAU;AAAA,IACV,cAAY;AAAA,IACZ,gBAAc;AAAA,IACd,WAAW,IAAG,sBAAsB,YAAY,SAAS;AAAA,OACrD;AAAA,IALN,UASE;AAAA,MAFC;AAAA,sBACD,KAAC,kBAAD;AAAA,QAAkB,WAAW,sBAAsB;AAAA,OAAY;AAAA;AAAA,GAC/D;AAAA;AAIN,SAAS,uBAAsB;AAAA,EAC7B;AAAA,KACG;AAAA,GAC6D;AAAA,EAChE,uBACE,KAAC,sBAAsB,QAAvB;AAAA,8BACE,KAAC,sBAAsB,YAAvB;AAAA,MACE,aAAU;AAAA,MACV,WAAW,IAAG,sBAAsB,YAAY,SAAS;AAAA,SACrD;AAAA,KACN;AAAA,GACA;AAAA;;;AC5NN;AAIO,SAAS,cAAa,CAAC,OAAwB;AAAA,EACpD,MAAM,YAAY,YAChB,CAAC,aAAyB;AAAA,IACxB,IAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe;AAAA,MAAY,OAAO,MAAM;AAAA,IAC3F,MAAM,MAAM,OAAO,WAAW,KAAK;AAAA,IACnC,IAAI,iBAAiB,UAAU,QAAQ;AAAA,IACvC,OAAO,MAAM,IAAI,oBAAoB,UAAU,QAAQ;AAAA,KAEzD,CAAC,KAAK,CACR;AAAA,EACA,MAAM,OAAO,MACX,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,cAAc,OAAO,WAAW,KAAK,EAAE;AAAA,EACvG,OAAO,qBAAqB,WAAW,MAAM,MAAM,KAAK;AAAA;;;;AHkCnD,IAAM,aAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,YAA2B,EAAE,SAAS,YAAY,CAAC,GAAG,OAAO,OAAO,OAAO,OAAO,QAAQ,KAAK;AAoB9F,SAAS,iBAAgB,CAAC,GAAyB;AAAA,EACxD,MAAM,UAAU,QAA8B,IAAI;AAAA,EAClD,MAAM,WAAW,QAAgC,IAAI;AAAA,EACrD,MAAM,UAAU,QAA8B,IAAI;AAAA,EAClD,MAAM,aAAa,QAA8B,IAAI;AAAA,EACrD,OAAO,QAAQ,aAAa,SAA0B,IAAI;AAAA,EAG1D,OAAO,OAAO,YAAY,SAAS,KAAK;AAAA,EACxC,OAAO,MAAM,WAAW,SAAwB,SAAS;AAAA,EACzD,OAAO,aAAa,kBAAkB,SAAS,IAAI;AAAA,EACnD,MAAM,WAAW,iBAAiB,EAAE,cAAc,EAAE,aAAa;AAAA,EACjE,MAAM,UAAU,YAAY;AAAA,EAC5B,MAAM,SAAS,QAAO,KAAK,GAAG,QAAQ,CAAC;AAAA,EACvC,OAAO,UAAU,KAAK,GAAG,QAAQ;AAAA,EACjC,gBAAgB,MAAM;AAAA,IACpB,MAAM,OAAO,QAAQ;AAAA,IACrB,MAAM,QAAQ,SAAS;AAAA,IACvB,IAAI,CAAC,QAAQ,CAAC;AAAA,MAAO;AAAA,IACrB,MAAM,IAAI,qBAAqB;AAAA,MAC7B,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,MAAM,MAAM,QAAQ;AAAA,MACpB,SAAS,MAAM,OAAO,QAAQ;AAAA,MAC9B,SAAS,MAAM,OAAO,QAAQ;AAAA,MAC9B,UAAU,MAAM,OAAO,QAAQ;AAAA,MAC/B,YAAY,MAAM,OAAO,QAAQ;AAAA,MACjC,YAAY,MAAM,OAAO,QAAQ;AAAA,MACjC,UAAU,MAAM,OAAO,QAAQ,aAAa;AAAA,MAC5C,QAAQ;AAAA,MACR,eAAe;AAAA,MACf,QAAQ,CAAC,OAAO,UAAU,OAAO,QAAQ,SAAS,OAAO,KAAK;AAAA,MAC9D,OAAO,MAAM,OAAO,QAAQ,QAAQ;AAAA,IACtC,CAAC;AAAA,IACD,WAAW,UAAU;AAAA,IACrB,OAAO,MAAM;AAAA,MACX,EAAE,QAAQ;AAAA,MACV,WAAW,UAAU;AAAA;AAAA,KAEtB,CAAC,CAAC;AAAA,EAEL,gBAAgB,MAAM;AAAA,IACpB,UAAU,IAAI;AAAA,IACd,SAAS,KAAK;AAAA,KACb,CAAC,EAAE,GAAG,CAAC;AAAA,EAEV,gBAAgB,MAAM,WAAW,SAAS,MAAM,GAAG,CAAC,EAAE,KAAK,SAAS,OAAO,SAAS,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;AAAA,EAClH,gBAAgB,MAAM,WAAW,SAAS,UAAU,GAAG,CAAC,EAAE,KAAK,CAAC;AAAA,EAChE,MAAM,cAAc,CAAC,MAAwC;AAAA,IAC3D,MAAM,MAAM,EAAE;AAAA,IACd,SAAS,IAAI;AAAA,IACb,IAAI,CAAC,YAAY,IAAI,eAAe,KAAK,IAAI,gBAAgB;AAAA,MAAG,UAAU,EAAE,OAAO,IAAI,cAAc,QAAQ,IAAI,cAAc,CAAC;AAAA;AAAA,EAElI,MAAM,YAAY,CAAC,aAAqC;AAAA,IACtD,MAAM,IAAI,WAAW;AAAA,IACrB,MAAM,IAAI,GAAG,MAAM;AAAA,IACnB,OAAO,KAAK,IAAI,SAAS,EAAE,KAAK,GAAG,GAAG,QAAQ,IAAI,CAAC;AAAA;AAAA,EAErD,OAAO,EAAE,SAAS,UAAU,SAAS,YAAY,SAAS,OAAO,MAAM,aAAa,aAAa,UAAU;AAAA;AAYtG,IAAM,0BAA+C,EAAE,QAAQ,WAAW,SAAS,YAAY,WAAW,eAAe,WAAW,cAAc,SAAS,MAAM;AAwBjK,SAAS,cAAa,GAAG,KAAK,KAAK,cAAc,eAAe,UAAU,QAAQ,UAAU,WAAW,QAAQ,OAAO,eAAe,QAAQ,OAAO,SAAS,WAAW,UAAU,SAA6B;AAAA,EACpN,MAAM,gBAAgB,eAAc,kCAAkC;AAAA,EACtE,MAAM,IAAI,KAAK,4BAA2B,QAAQ;AAAA,EAClD,MAAM,OAAO,kBAAiB;AAAA,IAC5B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,gBAAgB,OAAO;AAAA,IACnC,QAAQ,CAAC,GAAG,UAAU;AAAA,MACpB,gBAAgB,CAAC;AAAA,MACjB,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;AAAA;AAAA,IAE9B;AAAA,EACF,CAAC;AAAA,EACD,OAAO,UAAU,eAAe,SAAS,KAAK;AAAA,EAC9C,UAAU,MAAM,KAAK,WAAW,SAAS,SAAS,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAAA,EACvE,MAAM,SAAS,cAAc,YAAW,KAAK,SAAS,OAAO,WAAW,SAAS;AAAA,EACjF,MAAM,YAA2B,KAAM,WAAW,OAAO,EAAE,aAAa,OAAO,MAAM,EAAE,IAAI,CAAC,MAAO,MAAM;AAAA,EACzG,QAAQ,SAAS;AAAA,EACjB,uBACE,MAAC,OAAD;AAAA,IAAK,KAAK,KAAK;AAAA,IAAS,aAAU;AAAA,IAAiB,MAAK;AAAA,IAAQ,cAAY,OAAO;AAAA,IAAW,UAAU;AAAA,IAAG,WAAW,IAAG,uBAAuB,MAAM,SAAS;AAAA,IAAG,OAAO;AAAA,OAAe;AAAA,IAAxL,UAsCE;AAAA,sBArCA,KAAC,OAAD;AAAA,QAAK,KAAK,KAAK;AAAA,QAAU,aAAU;AAAA,QAAuB,KAAK,OAAO;AAAA,QAAW;AAAA,QAAU,WAAW;AAAA,QAAO,SAAQ;AAAA,QAAO,UAAS;AAAA,QAAQ,WAAW,uBAAuB;AAAA,QAAO,OAAO,eAAe,KAAK,OAAO;AAAA,QAAG,QAAQ,KAAK;AAAA,OAAa;AAAA,MACpP,aAAa,yBACZ,MAAC,OAAD;AAAA,QAAK,KAAK,KAAK;AAAA,QAAS,aAAU;AAAA,QAAsB,cAAY,KAAK,cAAc,SAAS;AAAA,QAAU,MAAK;AAAA,QAAU,WAAW,IAAG,uBAAuB,MAAM,CAAC,KAAK,eAAe,uBAAuB,UAAU;AAAA,QAA1N,UAiCE;AAAA,0BAhCA,KAAC,SAAD;AAAA,YAAQ,MAAK;AAAA,YAAS,SAAQ;AAAA,YAAQ,MAAK;AAAA,YAAU,WAAW,uBAAuB;AAAA,YAAQ,cAAY,EAAE;AAAA,YAAS,UAAU,KAAK;AAAA,YAAO,SAAS,MAAM,KAAK,WAAW,SAAS,KAAK,EAAE;AAAA,YAA3L,0BACE,KAAC,WAAD,EAAW;AAAA,WACX;AAAA,0BACF,MAAC,eAAD;AAAA,YAAc,MAAM;AAAA,YAAU,cAAc;AAAA,YAA5C,UAqBE;AAAA,8BApBA,KAAC,sBAAD;AAAA,gBAAqB,SAAO;AAAA,gBAA5B,0BACE,KAAC,SAAD;AAAA,kBAAQ,MAAK;AAAA,kBAAS,SAAQ;AAAA,kBAAQ,MAAK;AAAA,kBAAK,WAAW,uBAAuB;AAAA,kBAAS,cAAY,EAAE;AAAA,kBAAzG,UACG,KAAK;AAAA,iBACN;AAAA,eACF;AAAA,8BACF,KAAC,sBAAD;AAAA,gBAAqB,MAAK;AAAA,gBAAM,OAAM;AAAA,gBAAtC,WACI,WAAW,KAAK,UAAU,EAAE,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,yBAChD,KAAC,2BAAD;AAAA,kBAEE,SAAS,KAAK;AAAA,kBACd,UAAU,MAAM;AAAA,oBACd,MAAM,IAAI,KAAK,WAAW;AAAA,oBAC1B,IAAI,KAAK,UAAU;AAAA,sBAAM,GAAG,KAAK;AAAA,oBACjC;AAAA,sBAAK,GAAG,UAAU,KAAK,KAAK;AAAA;AAAA,kBANhC,UASG,KAAK;AAAA,mBARD,KAAK,KASV,CACH;AAAA,eACD;AAAA;AAAA,WACF;AAAA,0BACF,KAAC,SAAD;AAAA,YAAQ,MAAK;AAAA,YAAS,SAAQ;AAAA,YAAQ,MAAK;AAAA,YAAU,WAAW,uBAAuB;AAAA,YAAQ,cAAY,EAAE;AAAA,YAAQ,UAAU,KAAK;AAAA,YAAO,SAAS,MAAM,KAAK,WAAW,SAAS,KAAK,CAAC;AAAA,YAAzL,0BACE,KAAC,UAAD,EAAU;AAAA,WACV;AAAA,0BACF,KAAC,QAAD;AAAA,YAAM,eAAY;AAAA,YAAO,aAAU;AAAA,YAAyB,WAAW,uBAAuB;AAAA,WAAS;AAAA,0BACvG,KAAC,SAAD;AAAA,YAAQ,MAAK;AAAA,YAAS,SAAQ;AAAA,YAAQ,MAAK;AAAA,YAAU,WAAW,uBAAuB;AAAA,YAAQ,cAAY,EAAE;AAAA,YAAW,gBAAc,KAAK;AAAA,YAAQ,SAAS,MAAM,KAAK,WAAW,SAAS,KAAK;AAAA,YAAhM,0BACE,KAAC,eAAD,EAAe;AAAA,WACf;AAAA;AAAA,OACF,IACA;AAAA;AAAA,GACJ;AAAA;",
13
+ "debugId": "E4A7D2F6E21DCD0D64756E2164756E21",
14
14
  "names": []
15
15
  }
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  choiceValues2,
5
5
  ZOOM_MATH2,
6
6
  useZoomableImage2
7
- } from "./chunks/index-eny7hh6w.js";
7
+ } from "./chunks/index-tayfb936.js";
8
8
 
9
9
  // packages/exponential-ui-react/src/surface.tsx
10
10
  import { useCallback as useCallback11, useEffect as useEffect22, useId as useId7, useImperativeHandle as useImperativeHandle2, useLayoutEffect as useLayoutEffect7, useMemo as useMemo19, useRef as useRef26, useState as useState22, useSyncExternalStore as useSyncExternalStore3 } from "react";
@@ -120,7 +120,7 @@ function extensionComponent(extensions, component) {
120
120
 
121
121
  // packages/exponential-ui-react/src/node-view.tsx
122
122
  import { Component, Fragment as Fragment8, memo as memo2, useCallback as useCallback10, useContext as useContext6, useEffect as useEffect21, useMemo as useMemo18, useRef as useRef25 } from "react";
123
- import { UNKNOWN_COMPONENT, instanceSegment, isResponsiveValue, nativeRecipeProps as nativeRecipeProps4, responsiveAt, templateItemKeys, templateSiteKey, withOwnWrites } from "@exponential_app/eui";
123
+ import { UNKNOWN_COMPONENT, instanceSegment, isResponsiveValue, nativeRecipeProps as nativeRecipeProps5, responsiveAt, templateItemKeys, templateSiteKey, withOwnWrites } from "@exponential_app/eui";
124
124
  import { dynamicStyleEntries, nodeClass, queryToken, styleDirection } from "@exponential_app/eui/web";
125
125
 
126
126
  // packages/exponential-ui-react/src/live.ts
@@ -253,6 +253,7 @@ import {
253
253
  Ellipsis,
254
254
  File,
255
255
  Hand,
256
+ Image as ImageGlyph,
256
257
  Info,
257
258
  LoaderCircle,
258
259
  Maximize2,
@@ -295,7 +296,8 @@ var CHROME = {
295
296
  pause: Pause,
296
297
  attach: Paperclip,
297
298
  spinner: LoaderCircle,
298
- placeholder: CircleDashed
299
+ placeholder: CircleDashed,
300
+ image: ImageGlyph
299
301
  };
300
302
  var FALLBACK_ICONS = {
301
303
  "ui-check": Check,
@@ -6751,7 +6753,7 @@ function IconNative({ props, rootProps }) {
6751
6753
  // packages/exponential-ui-react/src/natives/zoomable-image.tsx
6752
6754
  import { useEffect as useEffect20, useMemo as useMemo17, useState as useState21 } from "react";
6753
6755
  import { DropdownMenu as MenuPrimitive2 } from "radix-ui";
6754
- import { MEDIA_INTRINSIC_WIDTH as MEDIA_INTRINSIC_WIDTH2, OVERLAY_OFFSET as OVERLAY_OFFSET4, OVERLAY_PADDING as OVERLAY_PADDING4, ZOOM } from "@exponential_app/eui";
6756
+ import { MEDIA_INTRINSIC_WIDTH as MEDIA_INTRINSIC_WIDTH2, OVERLAY_OFFSET as OVERLAY_OFFSET4, OVERLAY_PADDING as OVERLAY_PADDING4, ZOOM, nativeRecipeProps as nativeRecipeProps4, resolveRecipe as resolveRecipe3 } from "@exponential_app/eui";
6755
6757
  import { ZOOMABLE_IMAGE_NATIVE_TRANSITION, zoomBoxAspect, zoomableImageLayout } from "@exponential_app/eui/web/primitives";
6756
6758
  import { jsx as jsx25, jsxs as jsxs20 } from "react/jsx-runtime";
6757
6759
  var LAYOUT = zoomableImageLayout(ZOOM.pill);
@@ -6801,6 +6803,8 @@ function ZoomableImageNative({ node, props, rootProps, emit, scope }) {
6801
6803
  c.zoomScale(picked.scale);
6802
6804
  };
6803
6805
  const { pill } = zoom;
6806
+ const radius = zoom.ready ? undefined : resolveRecipe3(ctx.theme, { component: `ZoomableImage`, part: `image`, props: nativeRecipeProps4(`ZoomableImage`, props, ctx.extensionDefs) }, ctx.mode).borderRadius;
6807
+ const ImageGlyph = CHROME.image;
6804
6808
  return /* @__PURE__ */ jsxs20("div", {
6805
6809
  ...rootProps,
6806
6810
  ref: zoom.rootRef,
@@ -6817,7 +6821,7 @@ function ZoomableImageNative({ node, props, rootProps, emit, scope }) {
6817
6821
  draggable: false,
6818
6822
  loading: "lazy",
6819
6823
  decoding: "async",
6820
- style: { ...LAYOUT.image, ...zoom.natural ? { width: zoom.natural.width, height: zoom.natural.height } : {} },
6824
+ style: { ...LAYOUT.image, ...zoom.natural ? { width: zoom.natural.width, height: zoom.natural.height } : {}, ...zoom.ready ? {} : LAYOUT.imagePending },
6821
6825
  onLoad: zoom.onImageLoad
6822
6826
  }),
6823
6827
  /* @__PURE__ */ jsx25("svg", {
@@ -6826,7 +6830,20 @@ function ZoomableImageNative({ node, props, rootProps, emit, scope }) {
6826
6830
  width: MEDIA_INTRINSIC_WIDTH2,
6827
6831
  height: 1
6828
6832
  }),
6829
- controls !== `none` ? /* @__PURE__ */ jsxs20("div", {
6833
+ zoom.ready ? null : /* @__PURE__ */ jsxs20("div", {
6834
+ className: "xui-zoom-placeholder",
6835
+ "aria-hidden": "true",
6836
+ style: radius !== undefined ? { borderRadius: radius } : undefined,
6837
+ children: [
6838
+ /* @__PURE__ */ jsx25(ImageGlyph, {
6839
+ "aria-hidden": "true"
6840
+ }),
6841
+ alt ? /* @__PURE__ */ jsx25("span", {
6842
+ children: alt
6843
+ }) : null
6844
+ ]
6845
+ }),
6846
+ controls !== `none` && zoom.ready ? /* @__PURE__ */ jsxs20("div", {
6830
6847
  ...part(`pill`),
6831
6848
  ref: zoom.pillRef,
6832
6849
  role: "toolbar",
@@ -7000,7 +7017,7 @@ function useRootProps(node, props, domId = node.id, recipeProps, style) {
7000
7017
  if (v !== undefined && v !== null && typeof v !== `object`)
7001
7018
  attrs[propAttribute2(macro, k)] = String(v);
7002
7019
  }
7003
- for (const [k, v] of Object.entries(nativeRecipeProps4(node.component, props, ctx.extensionDefs)))
7020
+ for (const [k, v] of Object.entries(nativeRecipeProps5(node.component, props, ctx.extensionDefs)))
7004
7021
  if (typeof v !== `object`)
7005
7022
  attrs[propAttribute2(false, k)] = String(v);
7006
7023
  if (ctx.states.length)
@@ -7384,7 +7401,8 @@ function lazyFormatter(locale, timeZone) {
7384
7401
  percent: (value, o) => get().percent(value, o),
7385
7402
  date: (value, o) => get().date(value, o),
7386
7403
  relativeTime: (value, now) => get().relativeTime(value, now),
7387
- plural: (value) => get().plural(value)
7404
+ plural: (value) => get().plural(value),
7405
+ offsetMinutes: (ms) => get().offsetMinutes?.(ms) ?? 0
7388
7406
  };
7389
7407
  }
7390
7408
  var platformZone = () => {
@@ -8058,5 +8076,5 @@ export {
8058
8076
  walkNodes
8059
8077
  };
8060
8078
 
8061
- //# debugId=39A4F0FB7E01DD0264756E2164756E21
8079
+ //# debugId=5A48BA09F5F12DD664756E2164756E21
8062
8080
  //# sourceMappingURL=index.js.map