@geomak/ui 7.5.1 → 7.5.3

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/index.d.cts CHANGED
@@ -370,29 +370,32 @@ declare function Typography({ variant, as, color, weight, align, truncate, muted
370
370
 
371
371
  type IconButtonVariant = 'primary' | 'bordered' | 'ghost';
372
372
  interface IconButtonProps {
373
- icon?: React.ReactNode;
374
- onClick?: React.MouseEventHandler<HTMLButtonElement>;
373
+ icon?: react__default.ReactNode;
374
+ onClick?: react__default.MouseEventHandler<HTMLButtonElement>;
375
375
  /** Visual style. Defaults to `'primary'`. */
376
376
  type?: IconButtonVariant;
377
377
  buttonType?: 'button' | 'submit' | 'reset';
378
378
  disabled?: boolean;
379
379
  size?: 'sm' | 'md' | 'lg';
380
380
  loading?: boolean;
381
- loadingIcon?: React.ReactNode;
381
+ loadingIcon?: react__default.ReactNode;
382
382
  title?: string;
383
383
  /** Extra classes appended to the button. */
384
384
  className?: string;
385
385
  /** Inline style on the button. */
386
- style?: React.CSSProperties;
386
+ style?: react__default.CSSProperties;
387
387
  }
388
388
  /**
389
389
  * Square icon-only button.
390
390
  *
391
+ * Uses `React.forwardRef` so it works as a Radix `asChild` trigger (Popover,
392
+ * PopConfirm, Tooltip, etc.) — those need a DOM ref to anchor floating content.
393
+ *
391
394
  * @example
392
395
  * <IconButton icon={<Icon.Search />} onClick={doSearch} />
393
396
  * <IconButton type="bordered" icon={<Icon.Edit />} />
394
397
  */
395
- declare function IconButton({ icon, onClick, type, buttonType, disabled, size, loading, loadingIcon, title, className, style, }: IconButtonProps): react_jsx_runtime.JSX.Element;
398
+ declare const IconButton: react__default.ForwardRefExoticComponent<IconButtonProps & react__default.RefAttributes<HTMLButtonElement>>;
396
399
 
397
400
  interface ButtonProps extends Omit<react__default.ButtonHTMLAttributes<HTMLButtonElement>, 'type' | 'content'> {
398
401
  /** Button content (text or nodes). */
package/dist/index.d.ts CHANGED
@@ -370,29 +370,32 @@ declare function Typography({ variant, as, color, weight, align, truncate, muted
370
370
 
371
371
  type IconButtonVariant = 'primary' | 'bordered' | 'ghost';
372
372
  interface IconButtonProps {
373
- icon?: React.ReactNode;
374
- onClick?: React.MouseEventHandler<HTMLButtonElement>;
373
+ icon?: react__default.ReactNode;
374
+ onClick?: react__default.MouseEventHandler<HTMLButtonElement>;
375
375
  /** Visual style. Defaults to `'primary'`. */
376
376
  type?: IconButtonVariant;
377
377
  buttonType?: 'button' | 'submit' | 'reset';
378
378
  disabled?: boolean;
379
379
  size?: 'sm' | 'md' | 'lg';
380
380
  loading?: boolean;
381
- loadingIcon?: React.ReactNode;
381
+ loadingIcon?: react__default.ReactNode;
382
382
  title?: string;
383
383
  /** Extra classes appended to the button. */
384
384
  className?: string;
385
385
  /** Inline style on the button. */
386
- style?: React.CSSProperties;
386
+ style?: react__default.CSSProperties;
387
387
  }
388
388
  /**
389
389
  * Square icon-only button.
390
390
  *
391
+ * Uses `React.forwardRef` so it works as a Radix `asChild` trigger (Popover,
392
+ * PopConfirm, Tooltip, etc.) — those need a DOM ref to anchor floating content.
393
+ *
391
394
  * @example
392
395
  * <IconButton icon={<Icon.Search />} onClick={doSearch} />
393
396
  * <IconButton type="bordered" icon={<Icon.Edit />} />
394
397
  */
395
- declare function IconButton({ icon, onClick, type, buttonType, disabled, size, loading, loadingIcon, title, className, style, }: IconButtonProps): react_jsx_runtime.JSX.Element;
398
+ declare const IconButton: react__default.ForwardRefExoticComponent<IconButtonProps & react__default.RefAttributes<HTMLButtonElement>>;
396
399
 
397
400
  interface ButtonProps extends Omit<react__default.ButtonHTMLAttributes<HTMLButtonElement>, 'type' | 'content'> {
398
401
  /** Button content (text or nodes). */
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  export { icons_default as Icon, createIcon } from './chunk-KAFJJO5O.js';
2
2
  import { colors_default } from './chunk-DXOWXLKK.js';
3
3
  export { colors_default as COLORS, PALETTE as palette, semanticTokens, vars } from './chunk-DXOWXLKK.js';
4
- import React30, { createContext, useState, useEffect, useMemo, useId, useCallback, useRef, useContext, useSyncExternalStore, useLayoutEffect } from 'react';
4
+ import React31, { useMemo, createContext, useState, useEffect, useId, useCallback, useRef, useContext, useSyncExternalStore, useLayoutEffect } from 'react';
5
5
  import { createPortal } from 'react-dom';
6
- import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
6
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
7
  import * as AvatarPrimitive from '@radix-ui/react-avatar';
8
8
  import * as DropdownMenu2 from '@radix-ui/react-dropdown-menu';
9
9
  import * as Dialog from '@radix-ui/react-dialog';
@@ -452,7 +452,7 @@ function Typography({
452
452
  }
453
453
  );
454
454
  }
455
- function IconButton({
455
+ var IconButton = React31.forwardRef(function IconButton2({
456
456
  icon,
457
457
  onClick,
458
458
  type = "primary",
@@ -464,7 +464,7 @@ function IconButton({
464
464
  title,
465
465
  className = "",
466
466
  style
467
- }) {
467
+ }, ref) {
468
468
  const colorScheme = useMemo(() => {
469
469
  if (type === "primary") {
470
470
  return "bg-accent text-accent-fg hover:bg-accent-hover";
@@ -480,6 +480,7 @@ function IconButton({
480
480
  return /* @__PURE__ */ jsx(
481
481
  "button",
482
482
  {
483
+ ref,
483
484
  type: buttonType,
484
485
  disabled: disabled || loading,
485
486
  onClick,
@@ -490,7 +491,9 @@ function IconButton({
490
491
  children: loading ? loadingIcon : icon
491
492
  }
492
493
  );
493
- }
494
+ });
495
+ IconButton.displayName = "IconButton";
496
+ var IconButton_default = IconButton;
494
497
  var VARIANT_CLASSES = {
495
498
  primary: [
496
499
  "bg-accent text-accent-fg",
@@ -558,7 +561,7 @@ var SIZE_CLASSES = {
558
561
  md: "h-9 px-4 text-sm gap-1.5 rounded-lg",
559
562
  lg: "h-11 px-5 text-sm gap-2 rounded-xl"
560
563
  };
561
- var Button = React30.forwardRef(function Button2({
564
+ var Button = React31.forwardRef(function Button2({
562
565
  content,
563
566
  variant = "primary",
564
567
  size = "md",
@@ -666,7 +669,7 @@ function MenuButton({
666
669
  "data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
667
670
  "data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95"
668
671
  ].join(" "),
669
- children: items.map((item) => /* @__PURE__ */ jsxs(React30.Fragment, { children: [
672
+ children: items.map((item) => /* @__PURE__ */ jsxs(React31.Fragment, { children: [
670
673
  item.separatorBefore && /* @__PURE__ */ jsx(DropdownMenu2.Separator, { className: "my-1 h-px bg-border" }),
671
674
  /* @__PURE__ */ jsxs(
672
675
  DropdownMenu2.Item,
@@ -1754,7 +1757,7 @@ function Kbd({
1754
1757
  style
1755
1758
  }) {
1756
1759
  if (keys && keys.length > 0) {
1757
- return /* @__PURE__ */ jsx("span", { className: cx("inline-flex items-center gap-1", className), style, children: keys.map((k, i) => /* @__PURE__ */ jsxs(React30.Fragment, { children: [
1760
+ return /* @__PURE__ */ jsx("span", { className: cx("inline-flex items-center gap-1", className), style, children: keys.map((k, i) => /* @__PURE__ */ jsxs(React31.Fragment, { children: [
1758
1761
  i > 0 && /* @__PURE__ */ jsx("span", { className: "text-foreground-muted text-xs select-none", children: separator }),
1759
1762
  /* @__PURE__ */ jsx("kbd", { className: [cap, SIZE3[size]].join(" "), children: k })
1760
1763
  ] }, `${k}-${i}`)) });
@@ -1846,7 +1849,7 @@ function FlatCarousel({
1846
1849
  style
1847
1850
  }) {
1848
1851
  const scrollerRef = useRef(null);
1849
- const slides = React30.Children.toArray(children);
1852
+ const slides = React31.Children.toArray(children);
1850
1853
  const [active, setActive] = useState(0);
1851
1854
  const [atStart, setAtStart] = useState(true);
1852
1855
  const [atEnd, setAtEnd] = useState(false);
@@ -1901,7 +1904,7 @@ function RotatingCarousel({
1901
1904
  className = "",
1902
1905
  style
1903
1906
  }) {
1904
- const slides = React30.Children.toArray(children);
1907
+ const slides = React31.Children.toArray(children);
1905
1908
  const count = slides.length;
1906
1909
  const [active, setActive] = useState(0);
1907
1910
  const reduced = useReducedMotion();
@@ -2260,7 +2263,7 @@ function Chat({
2260
2263
  }
2261
2264
  ),
2262
2265
  /* @__PURE__ */ jsx(
2263
- IconButton,
2266
+ IconButton_default,
2264
2267
  {
2265
2268
  type: "primary",
2266
2269
  icon: /* @__PURE__ */ jsx(SendIcon, {}),
@@ -2475,52 +2478,68 @@ function PopConfirm({
2475
2478
  onCancel?.();
2476
2479
  setOpen(false);
2477
2480
  };
2478
- return /* @__PURE__ */ jsxs(Popover.Root, { open: isOpen, onOpenChange: (o) => o ? setOpen(true) : handleCancel(), children: [
2479
- /* @__PURE__ */ jsx(Popover.Trigger, { asChild: true, children }),
2480
- /* @__PURE__ */ jsx(Popover.Portal, { children: /* @__PURE__ */ jsxs(
2481
- Popover.Content,
2482
- {
2483
- side,
2484
- sideOffset: 8,
2485
- collisionPadding: 12,
2486
- className: cx("z-[400] focus:outline-none", className),
2487
- children: [
2488
- /* @__PURE__ */ jsxs(
2489
- motion.div,
2490
- {
2491
- initial: { opacity: 0, scale: 0.95 },
2492
- animate: { opacity: 1, scale: 1 },
2493
- transition: { duration: 0.12, ease: [0.16, 1, 0.3, 1] },
2494
- className: "w-64 rounded-lg border border-border bg-surface p-3.5 shadow-lg",
2495
- children: [
2496
- /* @__PURE__ */ jsxs("div", { className: "flex gap-2.5", children: [
2497
- icon && /* @__PURE__ */ jsx("span", { className: `mt-0.5 flex h-5 w-5 flex-shrink-0 items-center justify-center ${ICON_COLOR[tone]}`, children: icon }),
2498
- /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
2499
- /* @__PURE__ */ jsx("div", { className: "text-sm font-medium text-foreground", children: title }),
2500
- description && /* @__PURE__ */ jsx("div", { className: "mt-1 text-xs text-foreground-secondary leading-snug", children: description })
2501
- ] })
2502
- ] }),
2503
- /* @__PURE__ */ jsxs("div", { className: "mt-3 flex justify-end gap-2", children: [
2504
- /* @__PURE__ */ jsx(Button_default, { content: cancelText, size: "sm", variant: "ghost", onClick: handleCancel }),
2505
- /* @__PURE__ */ jsx(
2506
- Button_default,
2507
- {
2508
- content: confirmText,
2509
- size: "sm",
2510
- variant: CONFIRM_VARIANT[tone],
2511
- loading,
2512
- onClick: handleConfirm
2513
- }
2514
- )
2515
- ] })
2516
- ]
2517
- }
2518
- ),
2519
- /* @__PURE__ */ jsx(Popover.Arrow, { className: "fill-surface" })
2520
- ]
2521
- }
2522
- ) })
2523
- ] });
2481
+ return /* @__PURE__ */ jsxs(
2482
+ Popover.Root,
2483
+ {
2484
+ open: isOpen,
2485
+ onOpenChange: (o) => {
2486
+ if (o) setOpen(true);
2487
+ else if (!loading) handleCancel();
2488
+ },
2489
+ children: [
2490
+ /* @__PURE__ */ jsx(Popover.Trigger, { asChild: true, children }),
2491
+ /* @__PURE__ */ jsx(Popover.Portal, { children: /* @__PURE__ */ jsxs(
2492
+ Popover.Content,
2493
+ {
2494
+ side,
2495
+ sideOffset: 8,
2496
+ collisionPadding: 12,
2497
+ className: cx("z-[400] focus:outline-none", className),
2498
+ onEscapeKeyDown: (e) => {
2499
+ if (loading) e.preventDefault();
2500
+ },
2501
+ onInteractOutside: (e) => {
2502
+ if (loading) e.preventDefault();
2503
+ },
2504
+ children: [
2505
+ /* @__PURE__ */ jsxs(
2506
+ motion.div,
2507
+ {
2508
+ initial: { opacity: 0, scale: 0.95 },
2509
+ animate: { opacity: 1, scale: 1 },
2510
+ transition: { duration: 0.12, ease: [0.16, 1, 0.3, 1] },
2511
+ className: "w-64 rounded-lg border border-border bg-surface p-3.5 shadow-lg",
2512
+ children: [
2513
+ /* @__PURE__ */ jsxs("div", { className: "flex gap-2.5", children: [
2514
+ icon && /* @__PURE__ */ jsx("span", { className: `mt-0.5 flex h-5 w-5 flex-shrink-0 items-center justify-center ${ICON_COLOR[tone]}`, children: icon }),
2515
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
2516
+ /* @__PURE__ */ jsx("div", { className: "text-sm font-medium text-foreground", children: title }),
2517
+ description && /* @__PURE__ */ jsx("div", { className: "mt-1 text-xs text-foreground-secondary leading-snug", children: description })
2518
+ ] })
2519
+ ] }),
2520
+ /* @__PURE__ */ jsxs("div", { className: "mt-3 flex justify-end gap-2", children: [
2521
+ /* @__PURE__ */ jsx(Button_default, { content: cancelText, size: "sm", variant: "ghost", disabled: loading, onClick: handleCancel }),
2522
+ /* @__PURE__ */ jsx(
2523
+ Button_default,
2524
+ {
2525
+ content: confirmText,
2526
+ size: "sm",
2527
+ variant: CONFIRM_VARIANT[tone],
2528
+ loading,
2529
+ onClick: handleConfirm
2530
+ }
2531
+ )
2532
+ ] })
2533
+ ]
2534
+ }
2535
+ ),
2536
+ /* @__PURE__ */ jsx(Popover.Arrow, { className: "fill-surface" })
2537
+ ]
2538
+ }
2539
+ ) })
2540
+ ]
2541
+ }
2542
+ );
2524
2543
  }
2525
2544
  var DEFAULT_EVENTS = ["mousemove", "mousedown", "keydown", "touchstart", "scroll", "wheel"];
2526
2545
  var formatTime = (ms) => {
@@ -2881,8 +2900,8 @@ function Scheduler({
2881
2900
  children: [
2882
2901
  /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3 border-b border-border px-4 py-3", children: [
2883
2902
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
2884
- /* @__PURE__ */ jsx(IconButton, { type: "bordered", size: "sm", icon: /* @__PURE__ */ jsx(Chevron4, { dir: "left" }), title: "Previous", onClick: () => go(-1) }),
2885
- /* @__PURE__ */ jsx(IconButton, { type: "bordered", size: "sm", icon: /* @__PURE__ */ jsx(Chevron4, { dir: "right" }), title: "Next", onClick: () => go(1) }),
2903
+ /* @__PURE__ */ jsx(IconButton_default, { type: "bordered", size: "sm", icon: /* @__PURE__ */ jsx(Chevron4, { dir: "left" }), title: "Previous", onClick: () => go(-1) }),
2904
+ /* @__PURE__ */ jsx(IconButton_default, { type: "bordered", size: "sm", icon: /* @__PURE__ */ jsx(Chevron4, { dir: "right" }), title: "Next", onClick: () => go(1) }),
2886
2905
  /* @__PURE__ */ jsx(Button_default, { variant: "ghost", size: "sm", content: "Today", onClick: goToday }),
2887
2906
  /* @__PURE__ */ jsx(
2888
2907
  MonthYearPicker,
@@ -3006,9 +3025,9 @@ function MonthYearPicker({ label, cursor, onPick }) {
3006
3025
  ].join(" "),
3007
3026
  children: [
3008
3027
  /* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center justify-between", children: [
3009
- /* @__PURE__ */ jsx(IconButton, { size: "sm", type: "bordered", icon: /* @__PURE__ */ jsx(Chevron4, { dir: "left" }), title: "Previous year", onClick: () => setViewYear((y) => y - 1) }),
3028
+ /* @__PURE__ */ jsx(IconButton_default, { size: "sm", type: "bordered", icon: /* @__PURE__ */ jsx(Chevron4, { dir: "left" }), title: "Previous year", onClick: () => setViewYear((y) => y - 1) }),
3010
3029
  /* @__PURE__ */ jsx("span", { className: "text-sm font-semibold tabular-nums text-foreground", children: viewYear }),
3011
- /* @__PURE__ */ jsx(IconButton, { size: "sm", type: "bordered", icon: /* @__PURE__ */ jsx(Chevron4, { dir: "right" }), title: "Next year", onClick: () => setViewYear((y) => y + 1) })
3030
+ /* @__PURE__ */ jsx(IconButton_default, { size: "sm", type: "bordered", icon: /* @__PURE__ */ jsx(Chevron4, { dir: "right" }), title: "Next year", onClick: () => setViewYear((y) => y + 1) })
3012
3031
  ] }),
3013
3032
  /* @__PURE__ */ jsx("div", { className: "grid grid-cols-3 gap-1", children: MONTHS_SHORT.map((m, i) => {
3014
3033
  const current = i === cursor.getMonth() && viewYear === cursor.getFullYear();
@@ -3392,7 +3411,7 @@ function CartButton({
3392
3411
  const { getItemCount } = useCart();
3393
3412
  const count = getItemCount();
3394
3413
  return /* @__PURE__ */ jsx(Badge, { count, max, tone: badgeTone, className, children: /* @__PURE__ */ jsx(
3395
- IconButton,
3414
+ IconButton_default,
3396
3415
  {
3397
3416
  type: variant,
3398
3417
  icon,
@@ -5221,7 +5240,7 @@ function Wizard({
5221
5240
  ] });
5222
5241
  }
5223
5242
  var SearchIcon = /* @__PURE__ */ jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "currentColor", className: "w-4 h-4", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { fillRule: "evenodd", d: "M10.5 3.75a6.75 6.75 0 100 13.5 6.75 6.75 0 000-13.5zM2.25 10.5a8.25 8.25 0 1114.59 5.28l4.69 4.69a.75.75 0 11-1.06 1.06l-4.69-4.69A8.25 8.25 0 012.25 10.5z", clipRule: "evenodd" }) });
5224
- var SearchInput = React30.forwardRef(function SearchInput2({ value, onChange, disabled, label, htmlFor, placeholder, name, inputStyle, style, layout = "vertical", size = "md", icon, helperText, className }, ref) {
5243
+ var SearchInput = React31.forwardRef(function SearchInput2({ value, onChange, disabled, label, htmlFor, placeholder, name, inputStyle, style, layout = "vertical", size = "md", icon, helperText, className }, ref) {
5225
5244
  return /* @__PURE__ */ jsx(Field, { className, label, htmlFor, layout, helperText, children: /* @__PURE__ */ jsxs(
5226
5245
  "div",
5227
5246
  {
@@ -5519,7 +5538,7 @@ function TableBody({
5519
5538
  return /* @__PURE__ */ jsx("tbody", { children: rows.map((row, i) => {
5520
5539
  const rowKey = getRowKey(row, i);
5521
5540
  const isExpanded = expanded.has(rowKey);
5522
- return /* @__PURE__ */ jsxs(React30.Fragment, { children: [
5541
+ return /* @__PURE__ */ jsxs(React31.Fragment, { children: [
5523
5542
  /* @__PURE__ */ jsxs(
5524
5543
  "tr",
5525
5544
  {
@@ -5970,7 +5989,7 @@ function FlyoutItems({ items }) {
5970
5989
  }
5971
5990
  function CollapsedFlyout({ item, trigger }) {
5972
5991
  const [open, setOpen] = useState(false);
5973
- const closeTimer = React30.useRef(void 0);
5992
+ const closeTimer = React31.useRef(void 0);
5974
5993
  const openNow = () => {
5975
5994
  window.clearTimeout(closeTimer.current);
5976
5995
  setOpen(true);
@@ -5979,7 +5998,7 @@ function CollapsedFlyout({ item, trigger }) {
5979
5998
  window.clearTimeout(closeTimer.current);
5980
5999
  closeTimer.current = window.setTimeout(() => setOpen(false), 150);
5981
6000
  };
5982
- React30.useEffect(() => () => window.clearTimeout(closeTimer.current), []);
6001
+ React31.useEffect(() => () => window.clearTimeout(closeTimer.current), []);
5983
6002
  return /* @__PURE__ */ jsxs(DropdownMenu2.Root, { open, onOpenChange: setOpen, modal: false, children: [
5984
6003
  /* @__PURE__ */ jsx(
5985
6004
  DropdownMenu2.Trigger,
@@ -6271,8 +6290,8 @@ function MegaMenuLink({ href, icon, description, active, onClick, children, clas
6271
6290
  function MegaMenuFeatured({ children, className = "" }) {
6272
6291
  return /* @__PURE__ */ jsx("div", { className: cx("min-w-0 rounded-lg bg-surface-raised border border-border p-4 flex flex-col", className), children });
6273
6292
  }
6274
- var elementsOfType = (children, type) => React30.Children.toArray(children).filter(
6275
- (c) => React30.isValidElement(c) && c.type === type
6293
+ var elementsOfType = (children, type) => React31.Children.toArray(children).filter(
6294
+ (c) => React31.isValidElement(c) && c.type === type
6276
6295
  );
6277
6296
  var MOBILE_CHEVRON = /* @__PURE__ */ jsx(
6278
6297
  "svg",
@@ -6309,9 +6328,9 @@ function MobileLinkRow({ link, onNavigate }) {
6309
6328
  );
6310
6329
  }
6311
6330
  function MobilePanel({ panel, onNavigate }) {
6312
- const nodes = React30.Children.toArray(panel.props.children);
6331
+ const nodes = React31.Children.toArray(panel.props.children);
6313
6332
  return /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-4 px-2 pb-3 pt-1", children: nodes.map((node, i) => {
6314
- if (!React30.isValidElement(node)) return null;
6333
+ if (!React31.isValidElement(node)) return null;
6315
6334
  const el = node;
6316
6335
  if (el.type === MegaMenuSection) {
6317
6336
  const { title, children } = el.props;
@@ -6720,7 +6739,7 @@ function ThemeProvider({
6720
6739
  className = "",
6721
6740
  style
6722
6741
  }) {
6723
- const id = React30.useId().replace(/:/g, "");
6742
+ const id = React31.useId().replace(/:/g, "");
6724
6743
  const scopeClass = `geo-th-${id}`;
6725
6744
  const divRef = useRef(null);
6726
6745
  useEffect(() => {
@@ -9028,7 +9047,7 @@ function OtpInput({
9028
9047
  emit(valid.join(""));
9029
9048
  focusBox(valid.length);
9030
9049
  };
9031
- return /* @__PURE__ */ jsx(Field, { className, label, htmlFor, errorId, errorMessage, required, layout, helperText, children: /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-2", role: "group", "aria-label": typeof label === "string" ? label : "One-time code", children: chars.map((char, idx) => /* @__PURE__ */ jsxs(React30.Fragment, { children: [
9050
+ return /* @__PURE__ */ jsx(Field, { className, label, htmlFor, errorId, errorMessage, required, layout, helperText, children: /* @__PURE__ */ jsx("div", { className: "flex flex-wrap items-center gap-2", role: "group", "aria-label": typeof label === "string" ? label : "One-time code", children: chars.map((char, idx) => /* @__PURE__ */ jsxs(React31.Fragment, { children: [
9032
9051
  /* @__PURE__ */ jsx(
9033
9052
  "input",
9034
9053
  {
@@ -10087,7 +10106,7 @@ function Blog({
10087
10106
  post.tag != null && !post.image && /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Badge, { tone: "accent", variant: "soft", size: "sm", children: post.tag }) }),
10088
10107
  /* @__PURE__ */ jsx("h3", { className: "text-base font-semibold leading-snug text-foreground transition-colors group-hover:text-accent", children: post.title }),
10089
10108
  post.excerpt != null && /* @__PURE__ */ jsx("p", { className: "line-clamp-3 text-sm leading-relaxed text-foreground-secondary", children: post.excerpt }),
10090
- meta.length > 0 && /* @__PURE__ */ jsx("div", { className: "mt-auto flex flex-wrap items-center gap-x-2 gap-y-1 pt-3 text-xs text-foreground-muted", children: meta.map((m, j) => /* @__PURE__ */ jsxs(React30.Fragment, { children: [
10109
+ meta.length > 0 && /* @__PURE__ */ jsx("div", { className: "mt-auto flex flex-wrap items-center gap-x-2 gap-y-1 pt-3 text-xs text-foreground-muted", children: meta.map((m, j) => /* @__PURE__ */ jsxs(React31.Fragment, { children: [
10091
10110
  j > 0 && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: "\xB7" }),
10092
10111
  /* @__PURE__ */ jsx("span", { children: m })
10093
10112
  ] }, j)) })
@@ -10260,6 +10279,6 @@ function LeadCapture({
10260
10279
  );
10261
10280
  }
10262
10281
 
10263
- export { Accordion_default as Accordion, AppShell, AutoComplete, Avatar, Badge, Blog, Box, Breadcrumbs, Button_default as Button, CARD_BRANDS, Card_default as Card, CardCarousel, Cart, CartButton, CartProvider, Catalog, CatalogCarousel, CatalogGrid, Chat, Checkbox, Checkout, ColorPicker, ContextMenu, CookieConsent, CreditCardForm, DateRangePicker, Drawer, Dropdown, EmptyCart, FAB, FadingBase, FeatureGrid, Field, FieldHelpIcon, FieldLabel, FileInput, Flex, Form, FormContext, FormField, FormStore, Grid, GridCard, IconButton, Jumbotron, Kbd, LeadCapture, List2 as List, LoadingSpinner, LogoutTimer, MegaMenu_default as MegaMenu, MenuButton, Modal, NotificationProvider, NumberInput, OpaqueGridCard, OtpInput, Parallax, Password, PasswordStrength, PopConfirm, Portal, PricingPlans, RadioGroup, RadioTile, Rating, ScalableContainer, Scheduler, SearchInput_default as SearchInput, SecureLayout, SegmentedControl, Sidebar, SkeletonBox, SkeletonCard, SkeletonCircle, SkeletonText, SlideShow, Slider, Socials, Statistic, Stepper, Switch, Table, Tabs_default as Tabs, TagsInput, DatePicker as Temporal, Testimonials, TextArea, TextInput, ThemeProvider, ThemeSwitch, TimePicker, Timeline, Tooltip, TooltipProvider, TopBar, Tree, TreeSelect, Typography, Video, VirtualList, Wizard, cardNumberError, cvvError, cx, defaultPasswordRules, detectBrand, expiryError, fieldShell, formatCardNumber, formatExpiry, isRequired, luhnValid, onlyDigits, patterns, runFieldRules, scorePassword, useBreakpoint, useCart, useFieldArray, useForm, useFormField, useFormStore, useJwt, useLocalStorage, useMediaQuery, useNotification };
10282
+ export { Accordion_default as Accordion, AppShell, AutoComplete, Avatar, Badge, Blog, Box, Breadcrumbs, Button_default as Button, CARD_BRANDS, Card_default as Card, CardCarousel, Cart, CartButton, CartProvider, Catalog, CatalogCarousel, CatalogGrid, Chat, Checkbox, Checkout, ColorPicker, ContextMenu, CookieConsent, CreditCardForm, DateRangePicker, Drawer, Dropdown, EmptyCart, FAB, FadingBase, FeatureGrid, Field, FieldHelpIcon, FieldLabel, FileInput, Flex, Form, FormContext, FormField, FormStore, Grid, GridCard, IconButton_default as IconButton, Jumbotron, Kbd, LeadCapture, List2 as List, LoadingSpinner, LogoutTimer, MegaMenu_default as MegaMenu, MenuButton, Modal, NotificationProvider, NumberInput, OpaqueGridCard, OtpInput, Parallax, Password, PasswordStrength, PopConfirm, Portal, PricingPlans, RadioGroup, RadioTile, Rating, ScalableContainer, Scheduler, SearchInput_default as SearchInput, SecureLayout, SegmentedControl, Sidebar, SkeletonBox, SkeletonCard, SkeletonCircle, SkeletonText, SlideShow, Slider, Socials, Statistic, Stepper, Switch, Table, Tabs_default as Tabs, TagsInput, DatePicker as Temporal, Testimonials, TextArea, TextInput, ThemeProvider, ThemeSwitch, TimePicker, Timeline, Tooltip, TooltipProvider, TopBar, Tree, TreeSelect, Typography, Video, VirtualList, Wizard, cardNumberError, cvvError, cx, defaultPasswordRules, detectBrand, expiryError, fieldShell, formatCardNumber, formatExpiry, isRequired, luhnValid, onlyDigits, patterns, runFieldRules, scorePassword, useBreakpoint, useCart, useFieldArray, useForm, useFormField, useFormStore, useJwt, useLocalStorage, useMediaQuery, useNotification };
10264
10283
  //# sourceMappingURL=index.js.map
10265
10284
  //# sourceMappingURL=index.js.map