@exponential_app/eui-react 0.5.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.
- package/dist/chunks/{index-eny7hh6w.js → index-tayfb936.js} +9 -4
- package/dist/chunks/{index-eny7hh6w.js.map → index-tayfb936.js.map} +3 -3
- package/dist/index.js +25 -8
- package/dist/index.js.map +4 -4
- package/dist/primitives/index.js +1 -1
- package/dist/types/icons.d.ts +2 -0
- package/dist/types/primitives/zoomable-image.d.ts +1 -0
- package/package.json +2 -2
|
@@ -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(() =>
|
|
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=
|
|
596
|
-
//# sourceMappingURL=index-
|
|
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": "
|
|
12
|
+
"mappings": "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",
|
|
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-
|
|
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
|
|
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
|
-
|
|
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(
|
|
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)
|
|
@@ -8059,5 +8076,5 @@ export {
|
|
|
8059
8076
|
walkNodes
|
|
8060
8077
|
};
|
|
8061
8078
|
|
|
8062
|
-
//# debugId=
|
|
8079
|
+
//# debugId=5A48BA09F5F12DD664756E2164756E21
|
|
8063
8080
|
//# sourceMappingURL=index.js.map
|