@exponential_app/eui-react 0.5.0 → 0.7.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 +31 -10
- package/dist/index.js.map +5 -5
- package/dist/primitives/index.js +5 -3
- package/dist/primitives/index.js.map +3 -3
- 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,
|
|
@@ -2739,6 +2741,7 @@ function VoiceWaveBarsNative({ node, props, rootProps, children }) {
|
|
|
2739
2741
|
latest.current = input;
|
|
2740
2742
|
const elapsed = useRef13(0);
|
|
2741
2743
|
const rects = useRef13([]);
|
|
2744
|
+
const svg = useRef13(null);
|
|
2742
2745
|
const animates = voiceWaveAnimates(activity) && !ctx.reducedMotion;
|
|
2743
2746
|
useEffect9(() => {
|
|
2744
2747
|
if (!animates) {
|
|
@@ -2754,7 +2757,7 @@ function VoiceWaveBarsNative({ node, props, rootProps, children }) {
|
|
|
2754
2757
|
el.setAttribute(`y`, String(bar.y));
|
|
2755
2758
|
el.setAttribute(`height`, String(bar.height));
|
|
2756
2759
|
});
|
|
2757
|
-
});
|
|
2760
|
+
}, svg.current);
|
|
2758
2761
|
}, [animates]);
|
|
2759
2762
|
const meter = voiceWaveBars({ ...input, elapsed: elapsed.current });
|
|
2760
2763
|
const colour = String(resolveRecipe(ctx.theme, { component: `VoiceWave`, part: `bar`, props: nativeRecipeProps2(`VoiceWave`, props) }, ctx.mode).color ?? `currentColor`);
|
|
@@ -2768,6 +2771,7 @@ function VoiceWaveBarsNative({ node, props, rootProps, children }) {
|
|
|
2768
2771
|
style: mergeStyle(rootProps, { width: meter.width, height: meter.height }),
|
|
2769
2772
|
children: [
|
|
2770
2773
|
/* @__PURE__ */ jsx12("svg", {
|
|
2774
|
+
ref: svg,
|
|
2771
2775
|
viewBox: `0 0 ${meter.width} ${meter.height}`,
|
|
2772
2776
|
width: meter.width,
|
|
2773
2777
|
height: meter.height,
|
|
@@ -2805,6 +2809,7 @@ function VoiceWaveRingNative({ node, props, rootProps, children }) {
|
|
|
2805
2809
|
latest.current = input;
|
|
2806
2810
|
const elapsed = useRef13(0);
|
|
2807
2811
|
const paths = useRef13([]);
|
|
2812
|
+
const svg = useRef13(null);
|
|
2808
2813
|
const animates = voiceWaveAnimates(activity) && !ctx.reducedMotion;
|
|
2809
2814
|
useEffect9(() => {
|
|
2810
2815
|
if (!animates) {
|
|
@@ -2814,7 +2819,7 @@ function VoiceWaveRingNative({ node, props, rootProps, children }) {
|
|
|
2814
2819
|
return voiceWaveClock((t) => {
|
|
2815
2820
|
elapsed.current = t;
|
|
2816
2821
|
voiceWave({ ...latest.current, elapsed: t }).rings.forEach((ring, k) => paths.current[k]?.setAttribute(`d`, voiceWavePath(ring)));
|
|
2817
|
-
});
|
|
2822
|
+
}, svg.current);
|
|
2818
2823
|
}, [animates]);
|
|
2819
2824
|
const childEl = useRef13(null);
|
|
2820
2825
|
const hasChild = node.children.length > 0;
|
|
@@ -2831,6 +2836,7 @@ function VoiceWaveRingNative({ node, props, rootProps, children }) {
|
|
|
2831
2836
|
style: mergeStyle(rootProps, { width: size, height: size }),
|
|
2832
2837
|
children: [
|
|
2833
2838
|
/* @__PURE__ */ jsx12("svg", {
|
|
2839
|
+
ref: svg,
|
|
2834
2840
|
viewBox: `0 0 ${size} ${size}`,
|
|
2835
2841
|
width: size,
|
|
2836
2842
|
height: size,
|
|
@@ -6751,7 +6757,7 @@ function IconNative({ props, rootProps }) {
|
|
|
6751
6757
|
// packages/exponential-ui-react/src/natives/zoomable-image.tsx
|
|
6752
6758
|
import { useEffect as useEffect20, useMemo as useMemo17, useState as useState21 } from "react";
|
|
6753
6759
|
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";
|
|
6760
|
+
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
6761
|
import { ZOOMABLE_IMAGE_NATIVE_TRANSITION, zoomBoxAspect, zoomableImageLayout } from "@exponential_app/eui/web/primitives";
|
|
6756
6762
|
import { jsx as jsx25, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
6757
6763
|
var LAYOUT = zoomableImageLayout(ZOOM.pill);
|
|
@@ -6801,6 +6807,8 @@ function ZoomableImageNative({ node, props, rootProps, emit, scope }) {
|
|
|
6801
6807
|
c.zoomScale(picked.scale);
|
|
6802
6808
|
};
|
|
6803
6809
|
const { pill } = zoom;
|
|
6810
|
+
const radius = zoom.ready ? undefined : resolveRecipe3(ctx.theme, { component: `ZoomableImage`, part: `image`, props: nativeRecipeProps4(`ZoomableImage`, props, ctx.extensionDefs) }, ctx.mode).borderRadius;
|
|
6811
|
+
const ImageGlyph = CHROME.image;
|
|
6804
6812
|
return /* @__PURE__ */ jsxs20("div", {
|
|
6805
6813
|
...rootProps,
|
|
6806
6814
|
ref: zoom.rootRef,
|
|
@@ -6817,7 +6825,7 @@ function ZoomableImageNative({ node, props, rootProps, emit, scope }) {
|
|
|
6817
6825
|
draggable: false,
|
|
6818
6826
|
loading: "lazy",
|
|
6819
6827
|
decoding: "async",
|
|
6820
|
-
style: { ...LAYOUT.image, ...zoom.natural ? { width: zoom.natural.width, height: zoom.natural.height } : {} },
|
|
6828
|
+
style: { ...LAYOUT.image, ...zoom.natural ? { width: zoom.natural.width, height: zoom.natural.height } : {}, ...zoom.ready ? {} : LAYOUT.imagePending },
|
|
6821
6829
|
onLoad: zoom.onImageLoad
|
|
6822
6830
|
}),
|
|
6823
6831
|
/* @__PURE__ */ jsx25("svg", {
|
|
@@ -6826,7 +6834,20 @@ function ZoomableImageNative({ node, props, rootProps, emit, scope }) {
|
|
|
6826
6834
|
width: MEDIA_INTRINSIC_WIDTH2,
|
|
6827
6835
|
height: 1
|
|
6828
6836
|
}),
|
|
6829
|
-
|
|
6837
|
+
zoom.ready ? null : /* @__PURE__ */ jsxs20("div", {
|
|
6838
|
+
className: "xui-zoom-placeholder",
|
|
6839
|
+
"aria-hidden": "true",
|
|
6840
|
+
style: radius !== undefined ? { borderRadius: radius } : undefined,
|
|
6841
|
+
children: [
|
|
6842
|
+
/* @__PURE__ */ jsx25(ImageGlyph, {
|
|
6843
|
+
"aria-hidden": "true"
|
|
6844
|
+
}),
|
|
6845
|
+
alt ? /* @__PURE__ */ jsx25("span", {
|
|
6846
|
+
children: alt
|
|
6847
|
+
}) : null
|
|
6848
|
+
]
|
|
6849
|
+
}),
|
|
6850
|
+
controls !== `none` && zoom.ready ? /* @__PURE__ */ jsxs20("div", {
|
|
6830
6851
|
...part(`pill`),
|
|
6831
6852
|
ref: zoom.pillRef,
|
|
6832
6853
|
role: "toolbar",
|
|
@@ -7000,7 +7021,7 @@ function useRootProps(node, props, domId = node.id, recipeProps, style) {
|
|
|
7000
7021
|
if (v !== undefined && v !== null && typeof v !== `object`)
|
|
7001
7022
|
attrs[propAttribute2(macro, k)] = String(v);
|
|
7002
7023
|
}
|
|
7003
|
-
for (const [k, v] of Object.entries(
|
|
7024
|
+
for (const [k, v] of Object.entries(nativeRecipeProps5(node.component, props, ctx.extensionDefs)))
|
|
7004
7025
|
if (typeof v !== `object`)
|
|
7005
7026
|
attrs[propAttribute2(false, k)] = String(v);
|
|
7006
7027
|
if (ctx.states.length)
|
|
@@ -8059,5 +8080,5 @@ export {
|
|
|
8059
8080
|
walkNodes
|
|
8060
8081
|
};
|
|
8061
8082
|
|
|
8062
|
-
//# debugId=
|
|
8083
|
+
//# debugId=BC5D9945895E03F164756E2164756E21
|
|
8063
8084
|
//# sourceMappingURL=index.js.map
|