@birdycom/omniaui-react 0.11.2 → 0.12.1

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.ts CHANGED
@@ -713,7 +713,7 @@ interface DropdownProps extends HTMLAttributes<HTMLDivElement> {
713
713
  triggerProps?: ButtonProps;
714
714
  }
715
715
  /**
716
- * Trigger button + `<div class="oc-dropdown-menu" popover>`, wired with `popovertarget`
716
+ * Trigger button + `<div class="oc-dropdown-menu" popover>`, wired with `popoverTarget`
717
717
  * (native popover and anchor positioning, no state needed).
718
718
  */
719
719
  declare const Dropdown: react.ForwardRefExoticComponent<DropdownProps & react.RefAttributes<HTMLDivElement>>;
@@ -1977,8 +1977,14 @@ interface ToggleFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "
1977
1977
  declare const ToggleField: react.ForwardRefExoticComponent<ToggleFieldProps & react.RefAttributes<HTMLInputElement>>;
1978
1978
 
1979
1979
  interface TooltipProps extends Omit<HTMLAttributes<HTMLSpanElement>, "content"> {
1980
- /** Tooltip text (`data-tooltip`). */
1980
+ /** Tooltip text (`data-tooltip`); with `heading`, the lines under the title. */
1981
1981
  content: string;
1982
+ /** Keep the line breaks of `content` (`oc-tooltip--multiline`). */
1983
+ multiline?: boolean;
1984
+ /** Title above `content` (`.oc-tooltip__title`: larger, capital first letter); renders `.oc-tooltip__content`. */
1985
+ heading?: string;
1986
+ /** Preferred side (default top); with anchor positioning it moves to the other side when there is no room. */
1987
+ side?: "top" | "bottom" | "left" | "right";
1982
1988
  children: ReactNode;
1983
1989
  }
1984
1990
  /** `<span class="oc-tooltip" data-tooltip>`: CSS-only tooltip around its children. */
package/dist/index.js CHANGED
@@ -770,7 +770,7 @@ var ColumnMenu = forwardRef26(function ColumnMenu2({ columns, children, triggerL
770
770
  return /* @__PURE__ */ jsxs19("div", { ref, className: cx("oc-column-menu-scope", className), ...rest, children: [
771
771
  /* @__PURE__ */ jsxs19("div", { className: "oc-table-toolbar", children: [
772
772
  /* @__PURE__ */ jsx26("span", { className: "oc-table-toolbar-spacer" }),
773
- /* @__PURE__ */ jsx26("button", { className: "oc-btn oc-btn--outline oc-btn--sm", type: "button", ...attrs({ popovertarget: menuId }), children: triggerLabel })
773
+ /* @__PURE__ */ jsx26("button", { className: "oc-btn oc-btn--outline oc-btn--sm", type: "button", popoverTarget: menuId, children: triggerLabel })
774
774
  ] }),
775
775
  /* @__PURE__ */ jsxs19("div", { className: "oc-column-menu", id: menuId, ...attrs({ popover: "" }), children: [
776
776
  /* @__PURE__ */ jsx26("p", { className: "oc-column-menu-title", children: title }),
@@ -1811,7 +1811,7 @@ var Dropdown = forwardRef35(function Dropdown2({ trigger, triggerProps, classNam
1811
1811
  const auto = useId12();
1812
1812
  const menuId = id ?? `oc-menu-${auto.replace(/:/g, "")}`;
1813
1813
  return /* @__PURE__ */ jsxs28(Fragment7, { children: [
1814
- /* @__PURE__ */ jsx36(Button, { variant: "outline", ...triggerProps, ...attrs({ popovertarget: menuId }), children: trigger }),
1814
+ /* @__PURE__ */ jsx36(Button, { variant: "outline", ...triggerProps, popoverTarget: menuId, children: trigger }),
1815
1815
  /* @__PURE__ */ jsx36("div", { ref, className: cx("oc-dropdown-menu", className), id: menuId, ...attrs({ popover: "" }), ...rest, children })
1816
1816
  ] });
1817
1817
  });
@@ -1892,7 +1892,7 @@ var EmojiPicker = forwardRef37(function EmojiPicker2({ groups = defaultGroups, o
1892
1892
  );
1893
1893
  if (inline) return panel;
1894
1894
  return /* @__PURE__ */ jsxs30(Fragment8, { children: [
1895
- /* @__PURE__ */ jsx38("button", { type: "button", className: "oc-emoji-picker__trigger", "aria-label": triggerLabel, ...attrs({ popovertarget: panelId }), children: trigger }),
1895
+ /* @__PURE__ */ jsx38("button", { type: "button", className: "oc-emoji-picker__trigger", "aria-label": triggerLabel, popoverTarget: panelId, children: trigger }),
1896
1896
  panel
1897
1897
  ] });
1898
1898
  });
@@ -2198,6 +2198,17 @@ var Lightbox = forwardRef51(function Lightbox2({ images, title, thumbnails = tru
2198
2198
  const dlg = useDialog(inner, { open, defaultOpen, onOpenChange });
2199
2199
  const single = images.length === 1;
2200
2200
  const slideId = (i) => `${base}-${(i % images.length + images.length) % images.length + 1}`;
2201
+ const go = (i) => (e) => {
2202
+ const slide = document.getElementById(slideId(i));
2203
+ if (!slide) return;
2204
+ e.preventDefault();
2205
+ slide.scrollIntoView?.({ behavior: matchMedia("(prefers-reduced-motion: reduce)").matches ? "instant" : "smooth", block: "nearest", inline: "center" });
2206
+ };
2207
+ const onClose = (...args) => {
2208
+ const slide = location.hash && document.getElementById(decodeURIComponent(location.hash.slice(1)));
2209
+ if (slide && inner.current?.contains(slide)) history.replaceState(history.state, "", location.pathname + location.search);
2210
+ return dlg.onClose(...args);
2211
+ };
2201
2212
  useEffect6(() => {
2202
2213
  if (dlg.open) document.getElementById(slideId(start))?.scrollIntoView?.({ behavior: "instant", block: "nearest", inline: "center" });
2203
2214
  }, [dlg.open, start]);
@@ -2206,15 +2217,15 @@ var Lightbox = forwardRef51(function Lightbox2({ images, title, thumbnails = tru
2206
2217
  setStart(i);
2207
2218
  dlg.setOpen(true);
2208
2219
  }, children: media2(img, img.thumb ?? img.src) }, i)) }),
2209
- /* @__PURE__ */ jsxs43("dialog", { ref, className: cx("oc-lightbox", single && "oc-lightbox--single", className), "aria-label": label, ...attrs({ closedby: "any" }), ...rest, onClose: dlg.onClose, children: [
2220
+ /* @__PURE__ */ jsxs43("dialog", { ref, className: cx("oc-lightbox", single && "oc-lightbox--single", className), "aria-label": label, ...attrs({ closedby: "any" }), ...rest, onClose, children: [
2210
2221
  /* @__PURE__ */ jsxs43("div", { className: "oc-lightbox__bar", children: [
2211
2222
  title != null ? /* @__PURE__ */ jsx53("h2", { className: "oc-lightbox__title", children: title }) : /* @__PURE__ */ jsx53("span", {}),
2212
2223
  /* @__PURE__ */ jsx53("button", { type: "button", className: "oc-lightbox__close", "aria-label": "Close", onClick: dlg.close, children: "\u2715" })
2213
2224
  ] }),
2214
2225
  /* @__PURE__ */ jsx53("div", { className: "oc-lightbox__track", tabIndex: 0, "aria-label": "Photos, use the arrow keys", children: images.map((img, i) => /* @__PURE__ */ jsxs43("figure", { className: "oc-lightbox__slide", id: slideId(i), children: [
2215
2226
  /* @__PURE__ */ jsx53("div", { className: "oc-lightbox__media", children: media2(img, img.src) }),
2216
- !single && /* @__PURE__ */ jsx53("a", { className: "oc-lightbox__nav oc-lightbox__nav--prev", href: `#${slideId(i - 1)}`, "aria-label": "Previous photo", children: "\u2190" }),
2217
- !single && /* @__PURE__ */ jsx53("a", { className: "oc-lightbox__nav oc-lightbox__nav--next", href: `#${slideId(i + 1)}`, "aria-label": "Next photo", children: "\u2192" }),
2227
+ !single && /* @__PURE__ */ jsx53("a", { className: "oc-lightbox__nav oc-lightbox__nav--prev", href: `#${slideId(i - 1)}`, onClick: go(i - 1), "aria-label": "Previous photo", children: "\u2190" }),
2228
+ !single && /* @__PURE__ */ jsx53("a", { className: "oc-lightbox__nav oc-lightbox__nav--next", href: `#${slideId(i + 1)}`, onClick: go(i + 1), "aria-label": "Next photo", children: "\u2192" }),
2218
2229
  /* @__PURE__ */ jsxs43("figcaption", { className: "oc-lightbox__caption", children: [
2219
2230
  !single && /* @__PURE__ */ jsxs43("span", { className: "oc-lightbox__counter", children: [
2220
2231
  i + 1,
@@ -2331,7 +2342,7 @@ var MediaCard = forwardRef56(function MediaCard2({ title, href, meta, avatar, th
2331
2342
  /* @__PURE__ */ jsx58("h3", { className: "oc-media-card__title", children: /* @__PURE__ */ jsx58("a", { href, children: title }) }),
2332
2343
  meta != null && /* @__PURE__ */ jsx58("p", { className: "oc-media-card__meta", children: meta })
2333
2344
  ] }),
2334
- menu != null && /* @__PURE__ */ jsx58("button", { type: "button", className: "oc-media-card__menu", "aria-label": "More actions", ...attrs({ popovertarget: menuId }), children: "\u22EE" })
2345
+ menu != null && /* @__PURE__ */ jsx58("button", { type: "button", className: "oc-media-card__menu", "aria-label": "More actions", popoverTarget: menuId, children: "\u22EE" })
2335
2346
  ] }),
2336
2347
  menu != null && /* @__PURE__ */ jsx58("div", { className: "oc-dropdown-menu", id: menuId, ...attrs({ popover: "" }), children: menu })
2337
2348
  ] });
@@ -2353,7 +2364,7 @@ var MediaRow = forwardRef57(function MediaRow2({ title, href, meta, thumb, curre
2353
2364
  meta != null && /* @__PURE__ */ jsx59("p", { className: "oc-media-row__meta", children: meta })
2354
2365
  ] }),
2355
2366
  menu != null && /* @__PURE__ */ jsxs48(Fragment13, { children: [
2356
- /* @__PURE__ */ jsx59("button", { type: "button", className: "oc-media-row__menu", "aria-label": "More actions", ...attrs({ popovertarget: menuId }), children: "\u22EE" }),
2367
+ /* @__PURE__ */ jsx59("button", { type: "button", className: "oc-media-row__menu", "aria-label": "More actions", popoverTarget: menuId, children: "\u22EE" }),
2357
2368
  /* @__PURE__ */ jsx59("div", { className: "oc-dropdown-menu", id: menuId, ...attrs({ popover: "" }), children: menu })
2358
2369
  ] })
2359
2370
  ] });
@@ -2582,7 +2593,7 @@ var MessageThread = forwardRef59(function MessageThread2({
2582
2593
  (status || menu) && /* @__PURE__ */ jsxs50("div", { className: "oc-message-thread__actions", children: [
2583
2594
  status && /* @__PURE__ */ jsx61("span", { className: cx("oc-badge", status.variant && `oc-badge--${status.variant}`), children: status.label }),
2584
2595
  menu && /* @__PURE__ */ jsxs50(Fragment15, { children: [
2585
- /* @__PURE__ */ jsx61("button", { type: "button", className: "oc-message-thread__icon-btn", ...attrs({ popovertarget: `${base}-menu` }), "aria-label": "Conversation actions", children: /* @__PURE__ */ jsxs50("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: [
2596
+ /* @__PURE__ */ jsx61("button", { type: "button", className: "oc-message-thread__icon-btn", popoverTarget: `${base}-menu`, "aria-label": "Conversation actions", children: /* @__PURE__ */ jsxs50("svg", { viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: [
2586
2597
  /* @__PURE__ */ jsx61("circle", { cx: "12", cy: "5", r: "1.8" }),
2587
2598
  /* @__PURE__ */ jsx61("circle", { cx: "12", cy: "12", r: "1.8" }),
2588
2599
  /* @__PURE__ */ jsx61("circle", { cx: "12", cy: "19", r: "1.8" })
@@ -2677,7 +2688,7 @@ var NavmenuDropdown = forwardRef61(function NavmenuDropdown2({ label, className,
2677
2688
  const auto = useId24();
2678
2689
  const menuId = id ?? `oc-navmenu-${auto.replace(/:/g, "")}`;
2679
2690
  return /* @__PURE__ */ jsxs52("li", { children: [
2680
- /* @__PURE__ */ jsx63("button", { className: "oc-navmenu-link oc-navmenu-link--caret", type: "button", ...attrs({ popovertarget: menuId }), children: label }),
2691
+ /* @__PURE__ */ jsx63("button", { className: "oc-navmenu-link oc-navmenu-link--caret", type: "button", popoverTarget: menuId, children: label }),
2681
2692
  /* @__PURE__ */ jsx63("div", { ref, className: cx("oc-dropdown-menu", className), id: menuId, ...attrs({ popover: "" }), ...rest, children })
2682
2693
  ] });
2683
2694
  });
@@ -2886,7 +2897,7 @@ var Popover = forwardRef70(function Popover2({ trigger, triggerProps, size = "md
2886
2897
  const auto = useId25();
2887
2898
  const panelId = id ?? `oc-popover-${auto.replace(/:/g, "")}`;
2888
2899
  return /* @__PURE__ */ jsxs58(Fragment16, { children: [
2889
- /* @__PURE__ */ jsx72(Button, { variant: "outline", type: "button", ...triggerProps, ...attrs({ popovertarget: panelId }), children: trigger }),
2900
+ /* @__PURE__ */ jsx72(Button, { variant: "outline", type: "button", ...triggerProps, popoverTarget: panelId, children: trigger }),
2890
2901
  /* @__PURE__ */ jsxs58("div", { ref, className: cx("oc-popover", size !== "md" && `oc-popover--${size}`, className), id: panelId, ...attrs({ popover: "" }), ...rest, children: [
2891
2902
  title != null && /* @__PURE__ */ jsx72("h3", { className: "oc-popover-title", children: title }),
2892
2903
  text != null && /* @__PURE__ */ jsx72("p", { className: "oc-popover-text", children: text }),
@@ -3456,7 +3467,7 @@ var TableActionsMenu = forwardRef89(function TableActionsMenu2({ label, id, clas
3456
3467
  const auto = useId29();
3457
3468
  const menuId = id ?? `oc-table-actions-menu-${auto.replace(/:/g, "")}`;
3458
3469
  return /* @__PURE__ */ jsxs75(Fragment21, { children: [
3459
- /* @__PURE__ */ jsx91("button", { className: "oc-table-actions-more", type: "button", "aria-label": label, ...attrs({ popovertarget: menuId }) }),
3470
+ /* @__PURE__ */ jsx91("button", { className: "oc-table-actions-more", type: "button", "aria-label": label, popoverTarget: menuId }),
3460
3471
  /* @__PURE__ */ jsx91("div", { ref, id: menuId, className: cx("oc-dropdown-menu", className), ...attrs({ popover: "" }), ...rest, children })
3461
3472
  ] });
3462
3473
  });
@@ -3741,9 +3752,17 @@ var ToggleField = forwardRef99(function ToggleField2({ label, description, card,
3741
3752
 
3742
3753
  // src/components/Tooltip.tsx
3743
3754
  import { forwardRef as forwardRef100 } from "react";
3744
- import { jsx as jsx102 } from "react/jsx-runtime";
3745
- var Tooltip = forwardRef100(function Tooltip2({ content, className, ...rest }, ref) {
3746
- return /* @__PURE__ */ jsx102("span", { ref, className: cx("oc-tooltip", className), "data-tooltip": content, ...rest });
3755
+ import { jsx as jsx102, jsxs as jsxs85 } from "react/jsx-runtime";
3756
+ var Tooltip = forwardRef100(function Tooltip2({ content, multiline, heading, side, className, children, ...rest }, ref) {
3757
+ const classes = cx("oc-tooltip", multiline && !heading && "oc-tooltip--multiline", side && side !== "top" && `oc-tooltip--${side}`, className);
3758
+ if (!heading) return /* @__PURE__ */ jsx102("span", { ref, className: classes, "data-tooltip": content, ...rest, children });
3759
+ return /* @__PURE__ */ jsxs85("span", { ref, className: classes, ...rest, children: [
3760
+ children,
3761
+ /* @__PURE__ */ jsxs85("span", { className: "oc-tooltip__content", role: "tooltip", children: [
3762
+ /* @__PURE__ */ jsx102("span", { className: "oc-tooltip__title", children: heading }),
3763
+ content
3764
+ ] })
3765
+ ] });
3747
3766
  });
3748
3767
 
3749
3768
  // src/components/TopProgress.tsx
@@ -3773,10 +3792,10 @@ var TopProgress = forwardRef101(function TopProgress2({ active = true, tone = "d
3773
3792
 
3774
3793
  // src/components/Tree.tsx
3775
3794
  import { forwardRef as forwardRef102 } from "react";
3776
- import { Fragment as Fragment24, jsx as jsx104, jsxs as jsxs85 } from "react/jsx-runtime";
3795
+ import { Fragment as Fragment24, jsx as jsx104, jsxs as jsxs86 } from "react/jsx-runtime";
3777
3796
  function RowContent({ item }) {
3778
3797
  const isLink = item.href !== void 0;
3779
- return /* @__PURE__ */ jsxs85(Fragment24, { children: [
3798
+ return /* @__PURE__ */ jsxs86(Fragment24, { children: [
3780
3799
  item.icon != null && /* @__PURE__ */ jsx104("span", { className: "oc-tree-icon", "aria-hidden": "true", children: item.icon }),
3781
3800
  isLink ? /* @__PURE__ */ jsx104("a", { className: "oc-tree-label", href: item.href, "aria-current": item.current ? "true" : void 0, children: item.label }) : /* @__PURE__ */ jsx104("span", { className: "oc-tree-label", children: item.label }),
3782
3801
  item.count != null && /* @__PURE__ */ jsx104("span", { className: "oc-tree-count", children: item.count }),
@@ -3789,7 +3808,7 @@ function TreeNode({ item }) {
3789
3808
  if (!item.children?.length) {
3790
3809
  return /* @__PURE__ */ jsx104("li", { children: /* @__PURE__ */ jsx104("div", { className: rowCls, "aria-current": rowCurrent, children: /* @__PURE__ */ jsx104(RowContent, { item }) }) });
3791
3810
  }
3792
- return /* @__PURE__ */ jsx104("li", { children: /* @__PURE__ */ jsxs85("details", { className: "oc-tree-node", open: item.open, children: [
3811
+ return /* @__PURE__ */ jsx104("li", { children: /* @__PURE__ */ jsxs86("details", { className: "oc-tree-node", open: item.open, children: [
3793
3812
  /* @__PURE__ */ jsx104("summary", { className: rowCls, "aria-current": rowCurrent, children: /* @__PURE__ */ jsx104(RowContent, { item }) }),
3794
3813
  /* @__PURE__ */ jsx104(TreeList, { items: item.children })
3795
3814
  ] }) });
@@ -3798,8 +3817,8 @@ function TreeList({ items }) {
3798
3817
  return /* @__PURE__ */ jsx104("ul", { className: "oc-tree-list", children: items.map((item, i) => /* @__PURE__ */ jsx104(TreeNode, { item }, i)) });
3799
3818
  }
3800
3819
  var Tree = forwardRef102(function Tree2({ items, head, headActions, quiet, flush, className, ...rest }, ref) {
3801
- return /* @__PURE__ */ jsxs85("div", { ref, className: cx("oc-tree", quiet && "oc-tree--quiet", flush && "oc-tree--flush", className), ...rest, children: [
3802
- head != null && /* @__PURE__ */ jsxs85("div", { className: "oc-tree-row oc-tree-head", children: [
3820
+ return /* @__PURE__ */ jsxs86("div", { ref, className: cx("oc-tree", quiet && "oc-tree--quiet", flush && "oc-tree--flush", className), ...rest, children: [
3821
+ head != null && /* @__PURE__ */ jsxs86("div", { className: "oc-tree-row oc-tree-head", children: [
3803
3822
  /* @__PURE__ */ jsx104("span", { className: "oc-tree-label", children: head }),
3804
3823
  headActions != null && /* @__PURE__ */ jsx104("span", { className: "oc-tree-actions", children: headActions })
3805
3824
  ] }),
@@ -3809,29 +3828,29 @@ var Tree = forwardRef102(function Tree2({ items, head, headActions, quiet, flush
3809
3828
 
3810
3829
  // src/components/UpgradeBanner.tsx
3811
3830
  import { forwardRef as forwardRef103 } from "react";
3812
- import { Fragment as Fragment25, jsx as jsx105, jsxs as jsxs86 } from "react/jsx-runtime";
3831
+ import { Fragment as Fragment25, jsx as jsx105, jsxs as jsxs87 } from "react/jsx-runtime";
3813
3832
  var UpgradeBanner = forwardRef103(function UpgradeBanner2({ title, plan, text, usage, icon, actions, premium, compact, onDismiss, dismissLabel = "Dismiss", className, children, ...rest }, ref) {
3814
3833
  const cls = cx("oc-upgrade-banner", premium && "oc-upgrade-banner--premium", compact && "oc-upgrade-banner--compact", className);
3815
3834
  const body = text ?? children;
3816
- return /* @__PURE__ */ jsxs86("aside", { ref, className: cls, ...rest, children: [
3835
+ return /* @__PURE__ */ jsxs87("aside", { ref, className: cls, ...rest, children: [
3817
3836
  icon != null && /* @__PURE__ */ jsx105("span", { className: "oc-upgrade-banner-icon", "aria-hidden": "true", children: icon }),
3818
- /* @__PURE__ */ jsxs86("div", { className: "oc-upgrade-banner-body", children: [
3819
- /* @__PURE__ */ jsxs86("p", { className: "oc-upgrade-banner-title", children: [
3837
+ /* @__PURE__ */ jsxs87("div", { className: "oc-upgrade-banner-body", children: [
3838
+ /* @__PURE__ */ jsxs87("p", { className: "oc-upgrade-banner-title", children: [
3820
3839
  title,
3821
- plan != null && /* @__PURE__ */ jsxs86(Fragment25, { children: [
3840
+ plan != null && /* @__PURE__ */ jsxs87(Fragment25, { children: [
3822
3841
  " ",
3823
3842
  /* @__PURE__ */ jsx105("span", { className: "oc-upgrade-banner-plan", children: plan })
3824
3843
  ] })
3825
3844
  ] }),
3826
3845
  body != null && /* @__PURE__ */ jsx105("p", { className: "oc-upgrade-banner-text", children: body }),
3827
- usage && /* @__PURE__ */ jsxs86("div", { className: "oc-upgrade-banner-usage", children: [
3846
+ usage && /* @__PURE__ */ jsxs87("div", { className: "oc-upgrade-banner-usage", children: [
3828
3847
  /* @__PURE__ */ jsx105("span", { children: usage.label }),
3829
- /* @__PURE__ */ jsxs86("meter", { className: "oc-upgrade-banner-meter", min: 0, max: usage.max, low: usage.max * 0.6, high: usage.max * 0.8, optimum: 0, value: usage.value, children: [
3848
+ /* @__PURE__ */ jsxs87("meter", { className: "oc-upgrade-banner-meter", min: 0, max: usage.max, low: usage.max * 0.6, high: usage.max * 0.8, optimum: 0, value: usage.value, children: [
3830
3849
  usage.value,
3831
3850
  " of ",
3832
3851
  usage.max
3833
3852
  ] }),
3834
- /* @__PURE__ */ jsxs86("span", { children: [
3853
+ /* @__PURE__ */ jsxs87("span", { children: [
3835
3854
  usage.value,
3836
3855
  " / ",
3837
3856
  usage.max
@@ -3845,11 +3864,11 @@ var UpgradeBanner = forwardRef103(function UpgradeBanner2({ title, plan, text, u
3845
3864
 
3846
3865
  // src/components/User.tsx
3847
3866
  import { forwardRef as forwardRef104 } from "react";
3848
- import { jsx as jsx106, jsxs as jsxs87 } from "react/jsx-runtime";
3867
+ import { jsx as jsx106, jsxs as jsxs88 } from "react/jsx-runtime";
3849
3868
  var User = forwardRef104(function User2({ name, email, initials, avatarSrc, avatarSize = "md", className, ...rest }, ref) {
3850
- return /* @__PURE__ */ jsxs87("div", { ref, className: cx("oc-user", className), ...rest, children: [
3869
+ return /* @__PURE__ */ jsxs88("div", { ref, className: cx("oc-user", className), ...rest, children: [
3851
3870
  /* @__PURE__ */ jsx106(Avatar, { size: avatarSize, src: avatarSrc, children: initials }),
3852
- /* @__PURE__ */ jsxs87("span", { className: "oc-user-text", children: [
3871
+ /* @__PURE__ */ jsxs88("span", { className: "oc-user-text", children: [
3853
3872
  /* @__PURE__ */ jsx106("span", { className: "oc-user-name", children: name }),
3854
3873
  email != null && /* @__PURE__ */ jsx106("span", { className: "oc-user-email", children: email })
3855
3874
  ] })
@@ -3858,11 +3877,11 @@ var User = forwardRef104(function User2({ name, email, initials, avatarSrc, avat
3858
3877
 
3859
3878
  // src/components/VersionBanner.tsx
3860
3879
  import { forwardRef as forwardRef105 } from "react";
3861
- import { jsx as jsx107, jsxs as jsxs88 } from "react/jsx-runtime";
3880
+ import { jsx as jsx107, jsxs as jsxs89 } from "react/jsx-runtime";
3862
3881
  var VersionBanner = forwardRef105(function VersionBanner2({ version, text, short = "New version", actionLabel = "Reload", onReload, tone = "warning", floating, className, ...rest }, ref) {
3863
3882
  if (!version) return null;
3864
3883
  const cls = cx("oc-version-banner", tone !== "warning" && `oc-version-banner--${tone}`, floating && "oc-version-banner--floating", className);
3865
- return /* @__PURE__ */ jsxs88("div", { ref, className: cls, role: "status", ...rest, children: [
3884
+ return /* @__PURE__ */ jsxs89("div", { ref, className: cls, role: "status", ...rest, children: [
3866
3885
  /* @__PURE__ */ jsx107("span", { className: "oc-version-banner-dot", "aria-hidden": "true" }),
3867
3886
  /* @__PURE__ */ jsx107("span", { className: "oc-version-banner-text", children: text ?? `New version (${version}) available - reload the page` }),
3868
3887
  /* @__PURE__ */ jsx107("span", { className: "oc-version-banner-short", children: short }),
@@ -3872,15 +3891,15 @@ var VersionBanner = forwardRef105(function VersionBanner2({ version, text, short
3872
3891
 
3873
3892
  // src/blocks/BlockAboutTimeline.tsx
3874
3893
  import { forwardRef as forwardRef106, useId as useId34 } from "react";
3875
- import { jsx as jsx108, jsxs as jsxs89 } from "react/jsx-runtime";
3894
+ import { jsx as jsx108, jsxs as jsxs90 } from "react/jsx-runtime";
3876
3895
  var BlockAboutTimeline = forwardRef106(function BlockAboutTimeline2({ eyebrow, title, children, timeline = [], image, imageAlt = "", badge, reverse = false, className, ...rest }, ref) {
3877
3896
  const titleId = `oc-about-title-${useId34().replace(/[^\w-]/g, "")}`;
3878
- return /* @__PURE__ */ jsx108("section", { ref, className: cx("oc-block-about", reverse && "oc-block-about--reverse", className), "aria-labelledby": titleId, ...rest, children: /* @__PURE__ */ jsxs89("div", { className: "oc-block-about-inner", children: [
3879
- /* @__PURE__ */ jsxs89("figure", { className: "oc-block-about-media", "aria-hidden": image ? void 0 : true, children: [
3897
+ return /* @__PURE__ */ jsx108("section", { ref, className: cx("oc-block-about", reverse && "oc-block-about--reverse", className), "aria-labelledby": titleId, ...rest, children: /* @__PURE__ */ jsxs90("div", { className: "oc-block-about-inner", children: [
3898
+ /* @__PURE__ */ jsxs90("figure", { className: "oc-block-about-media", "aria-hidden": image ? void 0 : true, children: [
3880
3899
  image && /* @__PURE__ */ jsx108("img", { src: image, alt: imageAlt, loading: "lazy" }),
3881
3900
  badge != null && /* @__PURE__ */ jsx108("span", { className: "oc-block-about-badge", children: badge })
3882
3901
  ] }),
3883
- /* @__PURE__ */ jsxs89("div", { className: "oc-block-about-copy", children: [
3902
+ /* @__PURE__ */ jsxs90("div", { className: "oc-block-about-copy", children: [
3884
3903
  eyebrow != null && /* @__PURE__ */ jsx108("p", { className: "oc-eyebrow", children: eyebrow }),
3885
3904
  /* @__PURE__ */ jsx108("h2", { className: "oc-block-about-title", id: titleId, children: title }),
3886
3905
  children,
@@ -3891,10 +3910,10 @@ var BlockAboutTimeline = forwardRef106(function BlockAboutTimeline2({ eyebrow, t
3891
3910
 
3892
3911
  // src/blocks/BlockAppHeader.tsx
3893
3912
  import { forwardRef as forwardRef107 } from "react";
3894
- import { jsx as jsx109, jsxs as jsxs90 } from "react/jsx-runtime";
3913
+ import { jsx as jsx109, jsxs as jsxs91 } from "react/jsx-runtime";
3895
3914
  var BlockAppHeader = forwardRef107(function BlockAppHeader2({ toggleFor, toggleLabel = "Toggle sidebar", nav, navLabel = "Module navigation", actions, title, className, ...rest }, ref) {
3896
- return /* @__PURE__ */ jsxs90("header", { ref, className: cx("oc-block-appbar", className), ...rest, children: [
3897
- toggleFor && /* @__PURE__ */ jsxs90("label", { className: "oc-btn oc-btn--ghost oc-btn--icon", htmlFor: toggleFor, title: toggleLabel, children: [
3915
+ return /* @__PURE__ */ jsxs91("header", { ref, className: cx("oc-block-appbar", className), ...rest, children: [
3916
+ toggleFor && /* @__PURE__ */ jsxs91("label", { className: "oc-btn oc-btn--ghost oc-btn--icon", htmlFor: toggleFor, title: toggleLabel, children: [
3898
3917
  /* @__PURE__ */ jsx109(Icon, { d: "M4 6h16M4 12h16M4 18h16" }),
3899
3918
  /* @__PURE__ */ jsx109("span", { className: "oc-visually-hidden", children: toggleLabel })
3900
3919
  ] }),
@@ -3906,11 +3925,11 @@ var BlockAppHeader = forwardRef107(function BlockAppHeader2({ toggleFor, toggleL
3906
3925
 
3907
3926
  // src/blocks/BlockAppShell.tsx
3908
3927
  import { forwardRef as forwardRef108, useId as useId35 } from "react";
3909
- import { jsx as jsx110, jsxs as jsxs91 } from "react/jsx-runtime";
3928
+ import { jsx as jsx110, jsxs as jsxs92 } from "react/jsx-runtime";
3910
3929
  var BlockAppShell = forwardRef108(function BlockAppShell2({ sidebar, header, breadcrumbs, toggleId, height, className, style, children, ...rest }, ref) {
3911
3930
  const auto = useId35();
3912
3931
  const id = toggleId ?? `oc-shell-toggle-${auto.replace(/:/g, "")}`;
3913
- return /* @__PURE__ */ jsxs91(
3932
+ return /* @__PURE__ */ jsxs92(
3914
3933
  "div",
3915
3934
  {
3916
3935
  ref,
@@ -3920,7 +3939,7 @@ var BlockAppShell = forwardRef108(function BlockAppShell2({ sidebar, header, bre
3920
3939
  children: [
3921
3940
  /* @__PURE__ */ jsx110("input", { className: "oc-block-shell-toggle", type: "checkbox", id, "aria-label": "Collapse sidebar" }),
3922
3941
  sidebar,
3923
- /* @__PURE__ */ jsxs91("div", { className: "oc-block-shell-main", children: [
3942
+ /* @__PURE__ */ jsxs92("div", { className: "oc-block-shell-main", children: [
3924
3943
  header,
3925
3944
  breadcrumbs && /* @__PURE__ */ jsx110("div", { className: "oc-block-shell-breadcrumbs", children: /* @__PURE__ */ jsx110("nav", { "aria-label": "Breadcrumb", children: /* @__PURE__ */ jsx110("ol", { className: "oc-breadcrumb", children: breadcrumbs.map(
3926
3945
  (item, i) => item.href && i < breadcrumbs.length - 1 ? /* @__PURE__ */ jsx110("li", { className: "oc-breadcrumb-item", children: /* @__PURE__ */ jsx110("a", { href: item.href, children: item.label }) }, i) : /* @__PURE__ */ jsx110("li", { className: "oc-breadcrumb-item", "aria-current": "page", children: item.label }, i)
@@ -3934,7 +3953,7 @@ var BlockAppShell = forwardRef108(function BlockAppShell2({ sidebar, header, bre
3934
3953
 
3935
3954
  // src/blocks/BlockAuth.tsx
3936
3955
  import { forwardRef as forwardRef109, useId as useId36 } from "react";
3937
- import { Fragment as Fragment26, jsx as jsx111, jsxs as jsxs92 } from "react/jsx-runtime";
3956
+ import { Fragment as Fragment26, jsx as jsx111, jsxs as jsxs93 } from "react/jsx-runtime";
3938
3957
  var BlockAuth = forwardRef109(function BlockAuth2({ title = "Sign in", subtitle, submitLabel = "Sign in", socialLabel, dividerLabel = "or continue with", footer, onSubmit, onSocial, className, ...rest }, ref) {
3939
3958
  const id = useId36().replace(/:/g, "");
3940
3959
  const submit = (e) => {
@@ -3942,20 +3961,20 @@ var BlockAuth = forwardRef109(function BlockAuth2({ title = "Sign in", subtitle,
3942
3961
  const data = new FormData(e.currentTarget);
3943
3962
  onSubmit?.({ email: String(data.get("email") ?? ""), password: String(data.get("password") ?? "") });
3944
3963
  };
3945
- return /* @__PURE__ */ jsxs92("div", { ref, className: cx("oc-block-auth", className), ...rest, children: [
3946
- /* @__PURE__ */ jsxs92("form", { className: "oc-block-auth-card", onSubmit: submit, children: [
3964
+ return /* @__PURE__ */ jsxs93("div", { ref, className: cx("oc-block-auth", className), ...rest, children: [
3965
+ /* @__PURE__ */ jsxs93("form", { className: "oc-block-auth-card", onSubmit: submit, children: [
3947
3966
  /* @__PURE__ */ jsx111("h2", { children: title }),
3948
3967
  subtitle != null && /* @__PURE__ */ jsx111("p", { className: "oc-block-subtitle", children: subtitle }),
3949
- /* @__PURE__ */ jsxs92("div", { className: "oc-form-group", children: [
3968
+ /* @__PURE__ */ jsxs93("div", { className: "oc-form-group", children: [
3950
3969
  /* @__PURE__ */ jsx111("label", { className: "oc-label", htmlFor: `${id}-email`, children: "Email" }),
3951
3970
  /* @__PURE__ */ jsx111("input", { className: "oc-input", id: `${id}-email`, name: "email", type: "email", placeholder: "name@company.com" })
3952
3971
  ] }),
3953
- /* @__PURE__ */ jsxs92("div", { className: "oc-form-group", children: [
3972
+ /* @__PURE__ */ jsxs93("div", { className: "oc-form-group", children: [
3954
3973
  /* @__PURE__ */ jsx111("label", { className: "oc-label", htmlFor: `${id}-password`, children: "Password" }),
3955
3974
  /* @__PURE__ */ jsx111("input", { className: "oc-input", id: `${id}-password`, name: "password", type: "password", placeholder: "********" })
3956
3975
  ] }),
3957
3976
  /* @__PURE__ */ jsx111("button", { className: "oc-btn", type: "submit", style: { width: "100%" }, children: submitLabel }),
3958
- socialLabel != null && /* @__PURE__ */ jsxs92(Fragment26, { children: [
3977
+ socialLabel != null && /* @__PURE__ */ jsxs93(Fragment26, { children: [
3959
3978
  /* @__PURE__ */ jsx111("div", { className: "oc-block-auth-divider", children: dividerLabel }),
3960
3979
  /* @__PURE__ */ jsx111("button", { className: "oc-btn oc-btn--outline", type: "button", style: { width: "100%" }, onClick: onSocial, children: socialLabel })
3961
3980
  ] })
@@ -3966,7 +3985,7 @@ var BlockAuth = forwardRef109(function BlockAuth2({ title = "Sign in", subtitle,
3966
3985
 
3967
3986
  // src/blocks/BlockAuthSplit.tsx
3968
3987
  import { forwardRef as forwardRef110, useId as useId37 } from "react";
3969
- import { jsx as jsx112, jsxs as jsxs93 } from "react/jsx-runtime";
3988
+ import { jsx as jsx112, jsxs as jsxs94 } from "react/jsx-runtime";
3970
3989
  var BlockAuthSplit = forwardRef110(function BlockAuthSplit2({
3971
3990
  logo,
3972
3991
  logoHref = "#",
@@ -3992,28 +4011,28 @@ var BlockAuthSplit = forwardRef110(function BlockAuthSplit2({
3992
4011
  remember: data.get("remember") != null
3993
4012
  });
3994
4013
  };
3995
- return /* @__PURE__ */ jsxs93("div", { ref, className: cx("oc-block-authsplit", className), ...rest, children: [
3996
- /* @__PURE__ */ jsxs93("aside", { className: "oc-block-authsplit-brand", children: [
4014
+ return /* @__PURE__ */ jsxs94("div", { ref, className: cx("oc-block-authsplit", className), ...rest, children: [
4015
+ /* @__PURE__ */ jsxs94("aside", { className: "oc-block-authsplit-brand", children: [
3997
4016
  logo != null && /* @__PURE__ */ jsx112("a", { className: "oc-block-authsplit-logo", href: logoHref, children: logo }),
3998
- quote != null && /* @__PURE__ */ jsxs93("blockquote", { className: "oc-block-authsplit-quote", children: [
4017
+ quote != null && /* @__PURE__ */ jsxs94("blockquote", { className: "oc-block-authsplit-quote", children: [
3999
4018
  /* @__PURE__ */ jsx112("p", { children: quote }),
4000
4019
  quoteAuthor != null && /* @__PURE__ */ jsx112("footer", { children: quoteAuthor })
4001
4020
  ] })
4002
4021
  ] }),
4003
- /* @__PURE__ */ jsx112("div", { className: "oc-block-authsplit-form", children: /* @__PURE__ */ jsxs93("form", { className: "oc-block-authsplit-card", onSubmit: submit, children: [
4022
+ /* @__PURE__ */ jsx112("div", { className: "oc-block-authsplit-form", children: /* @__PURE__ */ jsxs94("form", { className: "oc-block-authsplit-card", onSubmit: submit, children: [
4004
4023
  /* @__PURE__ */ jsx112("h1", { className: "oc-block-authsplit-title", children: title }),
4005
4024
  subtitle != null && /* @__PURE__ */ jsx112("p", { className: "oc-block-authsplit-subtitle", children: subtitle }),
4006
- /* @__PURE__ */ jsxs93("div", { className: "oc-block-authsplit-fields", children: [
4007
- /* @__PURE__ */ jsxs93("div", { className: "oc-field", children: [
4025
+ /* @__PURE__ */ jsxs94("div", { className: "oc-block-authsplit-fields", children: [
4026
+ /* @__PURE__ */ jsxs94("div", { className: "oc-field", children: [
4008
4027
  /* @__PURE__ */ jsx112("label", { className: "oc-field-label", htmlFor: `${id}-email`, children: "E-mail" }),
4009
4028
  /* @__PURE__ */ jsx112("input", { className: "oc-input", id: `${id}-email`, name: "email", type: "email", autoComplete: "username", placeholder: "name@company.com", required: true })
4010
4029
  ] }),
4011
- /* @__PURE__ */ jsxs93("div", { className: "oc-field", children: [
4030
+ /* @__PURE__ */ jsxs94("div", { className: "oc-field", children: [
4012
4031
  /* @__PURE__ */ jsx112("label", { className: "oc-field-label", htmlFor: `${id}-password`, children: "Password" }),
4013
4032
  /* @__PURE__ */ jsx112(PasswordInput, { id: `${id}-password`, name: "password", required: true })
4014
4033
  ] }),
4015
- /* @__PURE__ */ jsxs93("div", { className: "oc-block-authsplit-row", children: [
4016
- /* @__PURE__ */ jsxs93("label", { children: [
4034
+ /* @__PURE__ */ jsxs94("div", { className: "oc-block-authsplit-row", children: [
4035
+ /* @__PURE__ */ jsxs94("label", { children: [
4017
4036
  /* @__PURE__ */ jsx112("input", { className: "oc-checkbox", type: "checkbox", name: "remember" }),
4018
4037
  " ",
4019
4038
  rememberLabel
@@ -4028,11 +4047,11 @@ var BlockAuthSplit = forwardRef110(function BlockAuthSplit2({
4028
4047
 
4029
4048
  // src/blocks/BlockContactGrid.tsx
4030
4049
  import { forwardRef as forwardRef111, useId as useId38 } from "react";
4031
- import { jsx as jsx113, jsxs as jsxs94 } from "react/jsx-runtime";
4050
+ import { jsx as jsx113, jsxs as jsxs95 } from "react/jsx-runtime";
4032
4051
  var BlockContactGrid = forwardRef111(function BlockContactGrid2({ eyebrow, title, lead, cards, plain = false, className, ...rest }, ref) {
4033
4052
  const titleId = `oc-contact-title-${useId38().replace(/[^\w-]/g, "")}`;
4034
- return /* @__PURE__ */ jsxs94("section", { ref, className: cx("oc-block-contact", plain && "oc-block-contact--plain", className), "aria-labelledby": title != null ? titleId : void 0, ...rest, children: [
4035
- (eyebrow != null || title != null || lead != null) && /* @__PURE__ */ jsxs94("div", { className: "oc-block-contact-head", children: [
4053
+ return /* @__PURE__ */ jsxs95("section", { ref, className: cx("oc-block-contact", plain && "oc-block-contact--plain", className), "aria-labelledby": title != null ? titleId : void 0, ...rest, children: [
4054
+ (eyebrow != null || title != null || lead != null) && /* @__PURE__ */ jsxs95("div", { className: "oc-block-contact-head", children: [
4036
4055
  eyebrow != null && /* @__PURE__ */ jsx113("p", { className: "oc-eyebrow", children: eyebrow }),
4037
4056
  title != null && /* @__PURE__ */ jsx113("h2", { className: "oc-block-contact-heading", id: titleId, children: title }),
4038
4057
  lead != null && /* @__PURE__ */ jsx113("p", { className: "oc-block-contact-lead", children: lead })
@@ -4041,7 +4060,7 @@ var BlockContactGrid = forwardRef111(function BlockContactGrid2({ eyebrow, title
4041
4060
  const Card2 = card.address ? "address" : "article";
4042
4061
  const Title = card.address ? "span" : "h3";
4043
4062
  const Line = card.address ? "span" : "p";
4044
- return /* @__PURE__ */ jsxs94(Card2, { className: "oc-block-contact-card", children: [
4063
+ return /* @__PURE__ */ jsxs95(Card2, { className: "oc-block-contact-card", children: [
4045
4064
  card.icon != null && /* @__PURE__ */ jsx113("span", { className: cx("oc-product-mark oc-product-mark--sm oc-product-mark--soft", card.accent && `oc-accent--${card.accent}`), "aria-hidden": "true", children: card.icon }),
4046
4065
  /* @__PURE__ */ jsx113(Title, { className: "oc-block-contact-title", children: card.title }),
4047
4066
  card.lines.map(
@@ -4054,9 +4073,9 @@ var BlockContactGrid = forwardRef111(function BlockContactGrid2({ eyebrow, title
4054
4073
 
4055
4074
  // src/blocks/BlockCta.tsx
4056
4075
  import { forwardRef as forwardRef112 } from "react";
4057
- import { jsx as jsx114, jsxs as jsxs95 } from "react/jsx-runtime";
4076
+ import { jsx as jsx114, jsxs as jsxs96 } from "react/jsx-runtime";
4058
4077
  var BlockCta = forwardRef112(function BlockCta2({ title, description, actions, className, ...rest }, ref) {
4059
- return /* @__PURE__ */ jsxs95("div", { ref, className: cx("oc-block-cta", className), ...rest, children: [
4078
+ return /* @__PURE__ */ jsxs96("div", { ref, className: cx("oc-block-cta", className), ...rest, children: [
4060
4079
  /* @__PURE__ */ jsx114("h2", { children: title }),
4061
4080
  description != null && /* @__PURE__ */ jsx114("p", { children: description }),
4062
4081
  actions != null && /* @__PURE__ */ jsx114("div", { className: "oc-block-hero-actions", children: actions })
@@ -4065,17 +4084,17 @@ var BlockCta = forwardRef112(function BlockCta2({ title, description, actions, c
4065
4084
 
4066
4085
  // src/blocks/BlockDataTable.tsx
4067
4086
  import { forwardRef as forwardRef113 } from "react";
4068
- import { jsx as jsx115, jsxs as jsxs96 } from "react/jsx-runtime";
4087
+ import { jsx as jsx115, jsxs as jsxs97 } from "react/jsx-runtime";
4069
4088
  var BlockDataTable = forwardRef113(function BlockDataTable2({ title, description, actions, toolbar, bulk, footer, className, children, ...rest }, ref) {
4070
- return /* @__PURE__ */ jsxs96("section", { ref, className: cx("oc-card oc-block-datatable", className), ...rest, children: [
4071
- /* @__PURE__ */ jsxs96("header", { className: "oc-block-datatable-head", children: [
4072
- /* @__PURE__ */ jsxs96("div", { children: [
4089
+ return /* @__PURE__ */ jsxs97("section", { ref, className: cx("oc-card oc-block-datatable", className), ...rest, children: [
4090
+ /* @__PURE__ */ jsxs97("header", { className: "oc-block-datatable-head", children: [
4091
+ /* @__PURE__ */ jsxs97("div", { children: [
4073
4092
  title != null && /* @__PURE__ */ jsx115("h2", { className: "oc-block-datatable-title", children: title }),
4074
4093
  description != null && /* @__PURE__ */ jsx115("p", { className: "oc-block-datatable-description", children: description })
4075
4094
  ] }),
4076
4095
  actions != null && /* @__PURE__ */ jsx115("div", { children: actions })
4077
4096
  ] }),
4078
- /* @__PURE__ */ jsxs96("div", { className: "oc-block-datatable-body", children: [
4097
+ /* @__PURE__ */ jsxs97("div", { className: "oc-block-datatable-body", children: [
4079
4098
  toolbar != null && /* @__PURE__ */ jsx115("div", { className: "oc-table-toolbar", children: toolbar }),
4080
4099
  bulk != null && /* @__PURE__ */ jsx115("div", { className: "oc-block-datatable-bulk", children: bulk }),
4081
4100
  children,
@@ -4095,20 +4114,20 @@ function FilterPill({ current, className, ...rest }) {
4095
4114
 
4096
4115
  // src/blocks/BlockFaq.tsx
4097
4116
  import { forwardRef as forwardRef114, useId as useId39 } from "react";
4098
- import { jsx as jsx116, jsxs as jsxs97 } from "react/jsx-runtime";
4117
+ import { jsx as jsx116, jsxs as jsxs98 } from "react/jsx-runtime";
4099
4118
  var BlockFaq = forwardRef114(function BlockFaq2({ eyebrow, title, lead, items, openIndex = 0, more, split = false, name, className, ...rest }, ref) {
4100
4119
  const auto = useId39().replace(/[^\w-]/g, "");
4101
4120
  const group = name ?? `oc-faq-${auto}`;
4102
4121
  const titleId = `oc-faq-title-${auto}`;
4103
- return /* @__PURE__ */ jsx116("section", { ref, className: cx("oc-block-faq", split && "oc-block-faq--split", className), "aria-labelledby": titleId, ...rest, children: /* @__PURE__ */ jsxs97("div", { className: "oc-block-faq-inner", children: [
4104
- /* @__PURE__ */ jsxs97("div", { className: "oc-block-faq-head", children: [
4122
+ return /* @__PURE__ */ jsx116("section", { ref, className: cx("oc-block-faq", split && "oc-block-faq--split", className), "aria-labelledby": titleId, ...rest, children: /* @__PURE__ */ jsxs98("div", { className: "oc-block-faq-inner", children: [
4123
+ /* @__PURE__ */ jsxs98("div", { className: "oc-block-faq-head", children: [
4105
4124
  eyebrow != null && /* @__PURE__ */ jsx116("p", { className: "oc-eyebrow", children: eyebrow }),
4106
4125
  /* @__PURE__ */ jsx116("h2", { className: "oc-block-faq-title", id: titleId, children: title }),
4107
4126
  lead != null && /* @__PURE__ */ jsx116("p", { className: "oc-block-faq-lead", children: lead })
4108
4127
  ] }),
4109
4128
  /* @__PURE__ */ jsx116("div", { className: "oc-accordion oc-block-faq-list", children: items.map((item, i) => (
4110
4129
  // "name" groups the items; React 19 passes it through, older versions too (unknown attribute on details).
4111
- /* @__PURE__ */ jsxs97("details", { className: "oc-accordion-item", ...{ name: group }, open: i === openIndex || void 0, children: [
4130
+ /* @__PURE__ */ jsxs98("details", { className: "oc-accordion-item", ...{ name: group }, open: i === openIndex || void 0, children: [
4112
4131
  /* @__PURE__ */ jsx116("summary", { className: "oc-accordion-trigger", children: item.question }),
4113
4132
  /* @__PURE__ */ jsx116("div", { className: "oc-accordion-content", children: item.answer })
4114
4133
  ] }, i)
@@ -4119,12 +4138,12 @@ var BlockFaq = forwardRef114(function BlockFaq2({ eyebrow, title, lead, items, o
4119
4138
 
4120
4139
  // src/blocks/BlockFeatures.tsx
4121
4140
  import { forwardRef as forwardRef115 } from "react";
4122
- import { jsx as jsx117, jsxs as jsxs98 } from "react/jsx-runtime";
4141
+ import { jsx as jsx117, jsxs as jsxs99 } from "react/jsx-runtime";
4123
4142
  var BlockFeatures = forwardRef115(function BlockFeatures2({ title, description, features, className, ...rest }, ref) {
4124
- return /* @__PURE__ */ jsxs98("div", { ref, className: cx("oc-block-features", className), ...rest, children: [
4143
+ return /* @__PURE__ */ jsxs99("div", { ref, className: cx("oc-block-features", className), ...rest, children: [
4125
4144
  title != null && /* @__PURE__ */ jsx117("h2", { children: title }),
4126
4145
  description != null && /* @__PURE__ */ jsx117("p", { children: description }),
4127
- /* @__PURE__ */ jsx117("div", { className: "oc-block-features-grid", children: features.map((f, i) => /* @__PURE__ */ jsxs98("div", { className: "oc-block-feature-card", children: [
4146
+ /* @__PURE__ */ jsx117("div", { className: "oc-block-features-grid", children: features.map((f, i) => /* @__PURE__ */ jsxs99("div", { className: "oc-block-feature-card", children: [
4128
4147
  f.icon != null && /* @__PURE__ */ jsx117("div", { className: "oc-block-feature-icon", children: f.icon }),
4129
4148
  /* @__PURE__ */ jsx117("h3", { children: f.title }),
4130
4149
  f.description != null && /* @__PURE__ */ jsx117("p", { children: f.description })
@@ -4134,14 +4153,14 @@ var BlockFeatures = forwardRef115(function BlockFeatures2({ title, description,
4134
4153
 
4135
4154
  // src/blocks/BlockFooter.tsx
4136
4155
  import { forwardRef as forwardRef116 } from "react";
4137
- import { jsx as jsx118, jsxs as jsxs99 } from "react/jsx-runtime";
4156
+ import { jsx as jsx118, jsxs as jsxs100 } from "react/jsx-runtime";
4138
4157
  var BlockFooter = forwardRef116(function BlockFooter2({ columns, copyright, credit, className, ...rest }, ref) {
4139
- return /* @__PURE__ */ jsxs99("div", { ref, className: cx("oc-block-footer", className), ...rest, children: [
4140
- /* @__PURE__ */ jsx118("div", { className: "oc-block-footer-grid", children: columns.map((col, i) => /* @__PURE__ */ jsxs99("div", { className: "oc-block-footer-col", children: [
4158
+ return /* @__PURE__ */ jsxs100("div", { ref, className: cx("oc-block-footer", className), ...rest, children: [
4159
+ /* @__PURE__ */ jsx118("div", { className: "oc-block-footer-grid", children: columns.map((col, i) => /* @__PURE__ */ jsxs100("div", { className: "oc-block-footer-col", children: [
4141
4160
  /* @__PURE__ */ jsx118("h4", { children: col.title }),
4142
4161
  /* @__PURE__ */ jsx118("ul", { children: col.links.map((l, j) => /* @__PURE__ */ jsx118("li", { children: /* @__PURE__ */ jsx118("a", { href: l.href, children: l.label }) }, j)) })
4143
4162
  ] }, i)) }),
4144
- (copyright != null || credit != null) && /* @__PURE__ */ jsxs99("div", { className: "oc-block-footer-bottom", children: [
4163
+ (copyright != null || credit != null) && /* @__PURE__ */ jsxs100("div", { className: "oc-block-footer-bottom", children: [
4145
4164
  /* @__PURE__ */ jsx118("span", { children: copyright }),
4146
4165
  /* @__PURE__ */ jsx118("span", { children: credit })
4147
4166
  ] })
@@ -4150,9 +4169,9 @@ var BlockFooter = forwardRef116(function BlockFooter2({ columns, copyright, cred
4150
4169
 
4151
4170
  // src/blocks/BlockFormPage.tsx
4152
4171
  import { forwardRef as forwardRef117 } from "react";
4153
- import { jsx as jsx119, jsxs as jsxs100 } from "react/jsx-runtime";
4172
+ import { jsx as jsx119, jsxs as jsxs101 } from "react/jsx-runtime";
4154
4173
  var BlockFormPage = forwardRef117(function BlockFormPage2({ actions, className, children, ...rest }, ref) {
4155
- return /* @__PURE__ */ jsxs100("form", { ref, className: cx("oc-block-formpage", className), ...rest, children: [
4174
+ return /* @__PURE__ */ jsxs101("form", { ref, className: cx("oc-block-formpage", className), ...rest, children: [
4156
4175
  children,
4157
4176
  actions != null && /* @__PURE__ */ jsx119("div", { className: "oc-block-formpage-actions", children: actions })
4158
4177
  ] });
@@ -4163,9 +4182,9 @@ function BlockFormPageGrid({ className, ...rest }) {
4163
4182
 
4164
4183
  // src/blocks/BlockHero.tsx
4165
4184
  import { forwardRef as forwardRef118 } from "react";
4166
- import { jsx as jsx120, jsxs as jsxs101 } from "react/jsx-runtime";
4185
+ import { jsx as jsx120, jsxs as jsxs102 } from "react/jsx-runtime";
4167
4186
  var BlockHero = forwardRef118(function BlockHero2({ badge, title, description, actions, className, ...rest }, ref) {
4168
- return /* @__PURE__ */ jsxs101("div", { ref, className: cx("oc-block-hero", className), ...rest, children: [
4187
+ return /* @__PURE__ */ jsxs102("div", { ref, className: cx("oc-block-hero", className), ...rest, children: [
4169
4188
  badge != null && /* @__PURE__ */ jsx120("span", { className: "oc-block-hero-badge", children: badge }),
4170
4189
  /* @__PURE__ */ jsx120("h1", { children: title }),
4171
4190
  description != null && /* @__PURE__ */ jsx120("p", { children: description }),
@@ -4175,24 +4194,24 @@ var BlockHero = forwardRef118(function BlockHero2({ badge, title, description, a
4175
4194
 
4176
4195
  // src/blocks/BlockHeroCode.tsx
4177
4196
  import { forwardRef as forwardRef119 } from "react";
4178
- import { jsx as jsx121, jsxs as jsxs102 } from "react/jsx-runtime";
4197
+ import { jsx as jsx121, jsxs as jsxs103 } from "react/jsx-runtime";
4179
4198
  var DEFAULT_TILES = [
4180
4199
  { glyph: "\u25C6", accent: "green", style: { inset: "-0.5rem auto auto 8%" } },
4181
4200
  { glyph: "\u25C9", accent: "violet", style: { inset: "0 6% auto auto", animationDelay: "-2s" } },
4182
4201
  { glyph: "\u25B2", accent: "orange", style: { inset: "auto 10% -0.5rem auto", animationDelay: "-4s" } }
4183
4202
  ];
4184
4203
  var BlockHeroCode = forwardRef119(function BlockHeroCode2({ eyebrow, title, lead, actions, codeTitle, code, tiles = DEFAULT_TILES, className, ...rest }, ref) {
4185
- return /* @__PURE__ */ jsx121("section", { ref, className: cx("oc-section-pad", className), ...rest, children: /* @__PURE__ */ jsxs102("div", { className: "oc-container oc-split", children: [
4186
- /* @__PURE__ */ jsxs102("div", { children: [
4204
+ return /* @__PURE__ */ jsx121("section", { ref, className: cx("oc-section-pad", className), ...rest, children: /* @__PURE__ */ jsxs103("div", { className: "oc-container oc-split", children: [
4205
+ /* @__PURE__ */ jsxs103("div", { children: [
4187
4206
  eyebrow != null && /* @__PURE__ */ jsx121("p", { className: "oc-eyebrow", children: eyebrow }),
4188
4207
  /* @__PURE__ */ jsx121("h1", { className: "oc-display", children: title }),
4189
4208
  lead != null && /* @__PURE__ */ jsx121("p", { className: "oc-lead", children: lead }),
4190
4209
  actions != null && /* @__PURE__ */ jsx121("div", { className: "flex flex-wrap gap-1 mt-2", children: actions })
4191
4210
  ] }),
4192
- /* @__PURE__ */ jsxs102("div", { className: "relative p-2", children: [
4211
+ /* @__PURE__ */ jsxs103("div", { className: "relative p-2", children: [
4193
4212
  tiles.map((tile, i) => /* @__PURE__ */ jsx121("span", { className: `oc-icon-tile oc-icon-tile--float oc-accent--${tile.accent} absolute`, style: tile.style, "aria-hidden": "true", children: tile.glyph }, i)),
4194
- /* @__PURE__ */ jsxs102("div", { className: "oc-code-window", children: [
4195
- /* @__PURE__ */ jsxs102("div", { className: "oc-code-window__bar", children: [
4213
+ /* @__PURE__ */ jsxs103("div", { className: "oc-code-window", children: [
4214
+ /* @__PURE__ */ jsxs103("div", { className: "oc-code-window__bar", children: [
4196
4215
  /* @__PURE__ */ jsx121("i", {}),
4197
4216
  /* @__PURE__ */ jsx121("i", {}),
4198
4217
  /* @__PURE__ */ jsx121("i", {}),
@@ -4206,7 +4225,7 @@ var BlockHeroCode = forwardRef119(function BlockHeroCode2({ eyebrow, title, lead
4206
4225
 
4207
4226
  // src/blocks/BlockHeroOrbit.tsx
4208
4227
  import { forwardRef as forwardRef120 } from "react";
4209
- import { jsx as jsx122, jsxs as jsxs103 } from "react/jsx-runtime";
4228
+ import { jsx as jsx122, jsxs as jsxs104 } from "react/jsx-runtime";
4210
4229
  var DEFAULT_MARKS = [
4211
4230
  { glyph: "\u25C6", accent: "green" },
4212
4231
  { glyph: "\u25C9", accent: "violet" },
@@ -4217,17 +4236,17 @@ var DEFAULT_MARKS = [
4217
4236
  ];
4218
4237
  var BlockHeroOrbit = forwardRef120(function BlockHeroOrbit2({ eyebrow, title, lead, actions, marks = DEFAULT_MARKS, codeTitle, code = "", center, duration, className, ...rest }, ref) {
4219
4238
  const visualStyle = duration ? { "--oc-orbit-duration": duration } : void 0;
4220
- return /* @__PURE__ */ jsx122("section", { ref, className: cx("oc-block-orbit oc-section-pad", className), ...rest, children: /* @__PURE__ */ jsxs103("div", { className: "oc-container oc-split", children: [
4221
- /* @__PURE__ */ jsxs103("div", { children: [
4239
+ return /* @__PURE__ */ jsx122("section", { ref, className: cx("oc-block-orbit oc-section-pad", className), ...rest, children: /* @__PURE__ */ jsxs104("div", { className: "oc-container oc-split", children: [
4240
+ /* @__PURE__ */ jsxs104("div", { children: [
4222
4241
  eyebrow != null && /* @__PURE__ */ jsx122("p", { className: "oc-eyebrow", children: eyebrow }),
4223
4242
  /* @__PURE__ */ jsx122("h1", { className: "oc-display", children: title }),
4224
4243
  lead != null && /* @__PURE__ */ jsx122("p", { className: "oc-lead", children: lead }),
4225
4244
  actions != null && /* @__PURE__ */ jsx122("div", { className: "flex flex-wrap gap-1 mt-2", children: actions })
4226
4245
  ] }),
4227
- /* @__PURE__ */ jsxs103("div", { className: "oc-block-orbit-visual", style: visualStyle, children: [
4246
+ /* @__PURE__ */ jsxs104("div", { className: "oc-block-orbit-visual", style: visualStyle, children: [
4228
4247
  /* @__PURE__ */ jsx122("div", { className: "oc-block-orbit-ring", "aria-hidden": "true", children: marks.map((mark, i) => /* @__PURE__ */ jsx122("span", { className: "oc-block-orbit-mark", style: { "--oc-orbit-angle": `${360 / marks.length * i}deg` }, children: /* @__PURE__ */ jsx122("span", { className: `oc-product-mark oc-product-mark--sm oc-accent--${mark.accent}`, children: mark.glyph }) }, i)) }),
4229
- center ?? /* @__PURE__ */ jsxs103("div", { className: "oc-code-window oc-block-orbit-center", children: [
4230
- /* @__PURE__ */ jsxs103("div", { className: "oc-code-window__bar", children: [
4248
+ center ?? /* @__PURE__ */ jsxs104("div", { className: "oc-code-window oc-block-orbit-center", children: [
4249
+ /* @__PURE__ */ jsxs104("div", { className: "oc-code-window__bar", children: [
4231
4250
  /* @__PURE__ */ jsx122("i", {}),
4232
4251
  /* @__PURE__ */ jsx122("i", {}),
4233
4252
  /* @__PURE__ */ jsx122("i", {}),
@@ -4241,10 +4260,10 @@ var BlockHeroOrbit = forwardRef120(function BlockHeroOrbit2({ eyebrow, title, le
4241
4260
 
4242
4261
  // src/blocks/BlockHeroSplit.tsx
4243
4262
  import { forwardRef as forwardRef121 } from "react";
4244
- import { jsx as jsx123, jsxs as jsxs104 } from "react/jsx-runtime";
4263
+ import { jsx as jsx123, jsxs as jsxs105 } from "react/jsx-runtime";
4245
4264
  var BlockHeroSplit = forwardRef121(function BlockHeroSplit2({ title, description, actions, visual, className, ...rest }, ref) {
4246
- return /* @__PURE__ */ jsxs104("div", { ref, className: cx("oc-block-hero-split", className), ...rest, children: [
4247
- /* @__PURE__ */ jsxs104("div", { children: [
4265
+ return /* @__PURE__ */ jsxs105("div", { ref, className: cx("oc-block-hero-split", className), ...rest, children: [
4266
+ /* @__PURE__ */ jsxs105("div", { children: [
4248
4267
  /* @__PURE__ */ jsx123("h1", { children: title }),
4249
4268
  description != null && /* @__PURE__ */ jsx123("p", { children: description }),
4250
4269
  actions != null && /* @__PURE__ */ jsx123("div", { className: "oc-block-hero-actions justify-start", children: actions })
@@ -4255,12 +4274,12 @@ var BlockHeroSplit = forwardRef121(function BlockHeroSplit2({ title, description
4255
4274
 
4256
4275
  // src/blocks/BlockModuleHeader.tsx
4257
4276
  import { forwardRef as forwardRef122 } from "react";
4258
- import { jsx as jsx124, jsxs as jsxs105 } from "react/jsx-runtime";
4277
+ import { jsx as jsx124, jsxs as jsxs106 } from "react/jsx-runtime";
4259
4278
  var BlockModuleHeader = forwardRef122(function BlockModuleHeader2({ icon, title, intro, meta, actions, className, ...rest }, ref) {
4260
- return /* @__PURE__ */ jsxs105("header", { ref, className: cx("oc-block-modulehead", className), ...rest, children: [
4261
- /* @__PURE__ */ jsxs105("div", { className: "oc-block-modulehead-band", children: [
4279
+ return /* @__PURE__ */ jsxs106("header", { ref, className: cx("oc-block-modulehead", className), ...rest, children: [
4280
+ /* @__PURE__ */ jsxs106("div", { className: "oc-block-modulehead-band", children: [
4262
4281
  icon != null && /* @__PURE__ */ jsx124("span", { className: "oc-block-modulehead-icon", "aria-hidden": "true", children: icon }),
4263
- /* @__PURE__ */ jsxs105("div", { className: "oc-block-modulehead-body", children: [
4282
+ /* @__PURE__ */ jsxs106("div", { className: "oc-block-modulehead-body", children: [
4264
4283
  /* @__PURE__ */ jsx124("h1", { className: "oc-block-modulehead-title", children: title }),
4265
4284
  intro != null && /* @__PURE__ */ jsx124("p", { className: "oc-block-modulehead-intro", children: intro }),
4266
4285
  meta != null && /* @__PURE__ */ jsx124("div", { className: "oc-block-modulehead-meta", children: meta })
@@ -4272,9 +4291,9 @@ var BlockModuleHeader = forwardRef122(function BlockModuleHeader2({ icon, title,
4272
4291
 
4273
4292
  // src/blocks/BlockPageHero.tsx
4274
4293
  import { forwardRef as forwardRef123 } from "react";
4275
- import { jsx as jsx125, jsxs as jsxs106 } from "react/jsx-runtime";
4294
+ import { jsx as jsx125, jsxs as jsxs107 } from "react/jsx-runtime";
4276
4295
  var BlockPageHero = forwardRef123(function BlockPageHero2({ eyebrow, title, description, actions, className, ...rest }, ref) {
4277
- return /* @__PURE__ */ jsxs106("section", { ref, className: cx("oc-hero", className), ...rest, children: [
4296
+ return /* @__PURE__ */ jsxs107("section", { ref, className: cx("oc-hero", className), ...rest, children: [
4278
4297
  eyebrow != null && /* @__PURE__ */ jsx125("span", { className: "oc-hero-eyebrow", children: eyebrow }),
4279
4298
  /* @__PURE__ */ jsx125("h1", { className: "oc-hero-title", children: title }),
4280
4299
  description != null && /* @__PURE__ */ jsx125("p", { className: "oc-hero-text", children: description }),
@@ -4284,12 +4303,12 @@ var BlockPageHero = forwardRef123(function BlockPageHero2({ eyebrow, title, desc
4284
4303
 
4285
4304
  // src/blocks/BlockPortfolioGrid.tsx
4286
4305
  import { forwardRef as forwardRef124, useId as useId40 } from "react";
4287
- import { jsx as jsx126, jsxs as jsxs107 } from "react/jsx-runtime";
4306
+ import { jsx as jsx126, jsxs as jsxs108 } from "react/jsx-runtime";
4288
4307
  var BlockPortfolioGrid = forwardRef124(function BlockPortfolioGrid2({ eyebrow, title, lead, link, projects, two = false, className, ...rest }, ref) {
4289
4308
  const titleId = `oc-portfolio-title-${useId40().replace(/[^\w-]/g, "")}`;
4290
- return /* @__PURE__ */ jsx126("section", { ref, className: cx("oc-block-portfolio oc-section-pad", two && "oc-block-portfolio--two", className), "aria-labelledby": titleId, ...rest, children: /* @__PURE__ */ jsxs107("div", { className: "oc-container", children: [
4291
- /* @__PURE__ */ jsxs107("div", { className: "oc-block-portfolio-head", children: [
4292
- /* @__PURE__ */ jsxs107("div", { children: [
4309
+ return /* @__PURE__ */ jsx126("section", { ref, className: cx("oc-block-portfolio oc-section-pad", two && "oc-block-portfolio--two", className), "aria-labelledby": titleId, ...rest, children: /* @__PURE__ */ jsxs108("div", { className: "oc-container", children: [
4310
+ /* @__PURE__ */ jsxs108("div", { className: "oc-block-portfolio-head", children: [
4311
+ /* @__PURE__ */ jsxs108("div", { children: [
4293
4312
  eyebrow != null && /* @__PURE__ */ jsx126("p", { className: "oc-eyebrow", children: eyebrow }),
4294
4313
  /* @__PURE__ */ jsx126("h2", { className: "oc-display oc-display--md", id: titleId, children: title }),
4295
4314
  lead != null && /* @__PURE__ */ jsx126("p", { className: "oc-block-portfolio-lead", children: lead })
@@ -4302,19 +4321,19 @@ var BlockPortfolioGrid = forwardRef124(function BlockPortfolioGrid2({ eyebrow, t
4302
4321
 
4303
4322
  // src/blocks/BlockPricing.tsx
4304
4323
  import { forwardRef as forwardRef125 } from "react";
4305
- import { Fragment as Fragment27, jsx as jsx127, jsxs as jsxs108 } from "react/jsx-runtime";
4324
+ import { Fragment as Fragment27, jsx as jsx127, jsxs as jsxs109 } from "react/jsx-runtime";
4306
4325
  var BlockPricing = forwardRef125(function BlockPricing2({ title, description, plans, className, ...rest }, ref) {
4307
- return /* @__PURE__ */ jsxs108("div", { ref, className: cx("oc-block-pricing", className), ...rest, children: [
4326
+ return /* @__PURE__ */ jsxs109("div", { ref, className: cx("oc-block-pricing", className), ...rest, children: [
4308
4327
  title != null && /* @__PURE__ */ jsx127("h2", { children: title }),
4309
4328
  description != null && /* @__PURE__ */ jsx127("p", { children: description }),
4310
4329
  /* @__PURE__ */ jsx127("div", { className: "oc-block-pricing-grid", children: plans.map((plan, i) => {
4311
4330
  const variant = plan.featured ? "default" : "outline";
4312
- return /* @__PURE__ */ jsxs108("div", { className: cx("oc-block-pricing-card", plan.featured && "oc-block-pricing-card--featured"), children: [
4331
+ return /* @__PURE__ */ jsxs109("div", { className: cx("oc-block-pricing-card", plan.featured && "oc-block-pricing-card--featured"), children: [
4313
4332
  /* @__PURE__ */ jsx127("p", { className: "oc-block-pricing-name", children: plan.name }),
4314
4333
  plan.description != null && /* @__PURE__ */ jsx127("p", { className: "oc-block-pricing-desc", children: plan.description }),
4315
- /* @__PURE__ */ jsxs108("p", { className: "oc-block-pricing-price", children: [
4334
+ /* @__PURE__ */ jsxs109("p", { className: "oc-block-pricing-price", children: [
4316
4335
  plan.price,
4317
- plan.period != null && /* @__PURE__ */ jsxs108(Fragment27, { children: [
4336
+ plan.period != null && /* @__PURE__ */ jsxs109(Fragment27, { children: [
4318
4337
  " ",
4319
4338
  /* @__PURE__ */ jsx127("span", { children: plan.period })
4320
4339
  ] })
@@ -4328,16 +4347,16 @@ var BlockPricing = forwardRef125(function BlockPricing2({ title, description, pl
4328
4347
 
4329
4348
  // src/blocks/BlockProcess.tsx
4330
4349
  import { forwardRef as forwardRef126 } from "react";
4331
- import { jsx as jsx128, jsxs as jsxs109 } from "react/jsx-runtime";
4350
+ import { jsx as jsx128, jsxs as jsxs110 } from "react/jsx-runtime";
4332
4351
  var BlockProcess = forwardRef126(function BlockProcess2({ eyebrow, title, steps, marquee, marqueeLabel = "Technologies", className, ...rest }, ref) {
4333
- return /* @__PURE__ */ jsx128("section", { ref, className: cx("oc-section-pad", className), ...rest, children: /* @__PURE__ */ jsxs109("div", { className: "oc-container", children: [
4352
+ return /* @__PURE__ */ jsx128("section", { ref, className: cx("oc-section-pad", className), ...rest, children: /* @__PURE__ */ jsxs110("div", { className: "oc-container", children: [
4334
4353
  eyebrow != null && /* @__PURE__ */ jsx128("p", { className: "oc-eyebrow", children: eyebrow }),
4335
4354
  /* @__PURE__ */ jsx128("h2", { className: "oc-display oc-display--md", children: title }),
4336
- /* @__PURE__ */ jsx128("ol", { className: "oc-steps", children: steps.map((s, i) => /* @__PURE__ */ jsxs109("li", { children: [
4355
+ /* @__PURE__ */ jsx128("ol", { className: "oc-steps", children: steps.map((s, i) => /* @__PURE__ */ jsxs110("li", { children: [
4337
4356
  /* @__PURE__ */ jsx128("h3", { children: s.title }),
4338
4357
  s.text != null && /* @__PURE__ */ jsx128("p", { children: s.text })
4339
4358
  ] }, i)) }),
4340
- marquee && marquee.length > 0 && /* @__PURE__ */ jsx128("div", { className: "oc-marquee mt-4", "aria-label": marqueeLabel, children: /* @__PURE__ */ jsxs109("div", { className: "oc-marquee__track", children: [
4359
+ marquee && marquee.length > 0 && /* @__PURE__ */ jsx128("div", { className: "oc-marquee mt-4", "aria-label": marqueeLabel, children: /* @__PURE__ */ jsxs110("div", { className: "oc-marquee__track", children: [
4341
4360
  marquee.map((m) => /* @__PURE__ */ jsx128("span", { className: "oc-marquee__item", children: m }, m)),
4342
4361
  marquee.map((m) => /* @__PURE__ */ jsx128("span", { className: "oc-marquee__item", "aria-hidden": "true", children: m }, `dup-${m}`))
4343
4362
  ] }) })
@@ -4346,13 +4365,13 @@ var BlockProcess = forwardRef126(function BlockProcess2({ eyebrow, title, steps,
4346
4365
 
4347
4366
  // src/blocks/BlockProductGrid.tsx
4348
4367
  import { forwardRef as forwardRef127 } from "react";
4349
- import { jsx as jsx129, jsxs as jsxs110 } from "react/jsx-runtime";
4368
+ import { jsx as jsx129, jsxs as jsxs111 } from "react/jsx-runtime";
4350
4369
  var BlockProductGrid = forwardRef127(function BlockProductGrid2({ eyebrow, title, products, className, ...rest }, ref) {
4351
- return /* @__PURE__ */ jsx129("section", { ref, className: cx("oc-section-pad", className), ...rest, children: /* @__PURE__ */ jsxs110("div", { className: "oc-container", children: [
4370
+ return /* @__PURE__ */ jsx129("section", { ref, className: cx("oc-section-pad", className), ...rest, children: /* @__PURE__ */ jsxs111("div", { className: "oc-container", children: [
4352
4371
  eyebrow != null && /* @__PURE__ */ jsx129("p", { className: "oc-eyebrow", children: eyebrow }),
4353
4372
  /* @__PURE__ */ jsx129("h2", { className: "oc-display oc-display--md", children: title }),
4354
- /* @__PURE__ */ jsx129("div", { className: "oc-card-grid", children: products.map((p, i) => /* @__PURE__ */ jsxs110("a", { className: cx("oc-product-card", p.accent && `oc-accent--${p.accent}`), href: p.href, children: [
4355
- /* @__PURE__ */ jsxs110("div", { className: "oc-product-card__top", children: [
4373
+ /* @__PURE__ */ jsx129("div", { className: "oc-card-grid", children: products.map((p, i) => /* @__PURE__ */ jsxs111("a", { className: cx("oc-product-card", p.accent && `oc-accent--${p.accent}`), href: p.href, children: [
4374
+ /* @__PURE__ */ jsxs111("div", { className: "oc-product-card__top", children: [
4356
4375
  p.icon != null && /* @__PURE__ */ jsx129("span", { className: "oc-icon-tile", "aria-hidden": "true", children: p.icon }),
4357
4376
  p.pill != null && /* @__PURE__ */ jsx129("span", { className: "oc-pill", children: p.pill })
4358
4377
  ] }),
@@ -4366,16 +4385,16 @@ var BlockProductGrid = forwardRef127(function BlockProductGrid2({ eyebrow, title
4366
4385
 
4367
4386
  // src/blocks/BlockProfileHeader.tsx
4368
4387
  import { forwardRef as forwardRef128, useId as useId41 } from "react";
4369
- import { jsx as jsx130, jsxs as jsxs111 } from "react/jsx-runtime";
4388
+ import { jsx as jsx130, jsxs as jsxs112 } from "react/jsx-runtime";
4370
4389
  var BlockProfileHeader = forwardRef128(function BlockProfileHeader2({ name, meta, bio, avatar, banner, actions, tabs = [], tabsLabel = "Profile sections", compact = false, headingLevel = 1, className, ...rest }, ref) {
4371
4390
  const nameId = `oc-profile-name-${useId41().replace(/[^\w-]/g, "")}`;
4372
4391
  const Heading3 = headingLevel === 1 ? "h1" : "h2";
4373
4392
  const bannerStyle = banner ? { "--oc-profile-banner": `url("${banner}")` } : void 0;
4374
- return /* @__PURE__ */ jsxs111("section", { ref, className: cx("oc-block-profile", compact && "oc-block-profile--compact", className), "aria-labelledby": nameId, ...rest, children: [
4393
+ return /* @__PURE__ */ jsxs112("section", { ref, className: cx("oc-block-profile", compact && "oc-block-profile--compact", className), "aria-labelledby": nameId, ...rest, children: [
4375
4394
  /* @__PURE__ */ jsx130("div", { className: "oc-block-profile-banner", style: bannerStyle, "aria-hidden": "true" }),
4376
- /* @__PURE__ */ jsxs111("div", { className: "oc-block-profile-bar", children: [
4395
+ /* @__PURE__ */ jsxs112("div", { className: "oc-block-profile-bar", children: [
4377
4396
  /* @__PURE__ */ jsx130("span", { className: "oc-avatar oc-block-profile-avatar", "aria-hidden": "true", children: avatar }),
4378
- /* @__PURE__ */ jsxs111("div", { className: "oc-block-profile-info", children: [
4397
+ /* @__PURE__ */ jsxs112("div", { className: "oc-block-profile-info", children: [
4379
4398
  /* @__PURE__ */ jsx130(Heading3, { className: "oc-block-profile-name", id: nameId, children: name }),
4380
4399
  meta != null && /* @__PURE__ */ jsx130("p", { className: "oc-block-profile-meta", children: meta }),
4381
4400
  bio != null && /* @__PURE__ */ jsx130("p", { className: "oc-block-profile-bio", children: bio })
@@ -4388,21 +4407,21 @@ var BlockProfileHeader = forwardRef128(function BlockProfileHeader2({ name, meta
4388
4407
 
4389
4408
  // src/blocks/BlockShowcase.tsx
4390
4409
  import { forwardRef as forwardRef129 } from "react";
4391
- import { jsx as jsx131, jsxs as jsxs112 } from "react/jsx-runtime";
4410
+ import { jsx as jsx131, jsxs as jsxs113 } from "react/jsx-runtime";
4392
4411
  var BlockShowcase = forwardRef129(function BlockShowcase2({ eyebrow, title, projects, cardMin = "26rem", className, ...rest }, ref) {
4393
- return /* @__PURE__ */ jsx131("section", { ref, className: cx("oc-section-pad", className), ...rest, children: /* @__PURE__ */ jsxs112("div", { className: "oc-container", children: [
4412
+ return /* @__PURE__ */ jsx131("section", { ref, className: cx("oc-section-pad", className), ...rest, children: /* @__PURE__ */ jsxs113("div", { className: "oc-container", children: [
4394
4413
  eyebrow != null && /* @__PURE__ */ jsx131("p", { className: "oc-eyebrow", children: eyebrow }),
4395
4414
  /* @__PURE__ */ jsx131("h2", { className: "oc-display oc-display--md", children: title }),
4396
- /* @__PURE__ */ jsx131("div", { className: "oc-card-grid", style: { "--oc-card-min": cardMin }, children: projects.map((p, i) => /* @__PURE__ */ jsxs112("a", { className: cx("oc-product-card", p.accent && `oc-accent--${p.accent}`, "p-0 overflow-hidden"), href: p.href, children: [
4397
- /* @__PURE__ */ jsxs112("span", { className: "oc-browser-frame m-1", children: [
4398
- /* @__PURE__ */ jsxs112("span", { className: "oc-browser-frame__bar", children: [
4415
+ /* @__PURE__ */ jsx131("div", { className: "oc-card-grid", style: { "--oc-card-min": cardMin }, children: projects.map((p, i) => /* @__PURE__ */ jsxs113("a", { className: cx("oc-product-card", p.accent && `oc-accent--${p.accent}`, "p-0 overflow-hidden"), href: p.href, children: [
4416
+ /* @__PURE__ */ jsxs113("span", { className: "oc-browser-frame m-1", children: [
4417
+ /* @__PURE__ */ jsxs113("span", { className: "oc-browser-frame__bar", children: [
4399
4418
  /* @__PURE__ */ jsx131("i", {}),
4400
4419
  /* @__PURE__ */ jsx131("i", {}),
4401
4420
  /* @__PURE__ */ jsx131("i", {})
4402
4421
  ] }),
4403
4422
  /* @__PURE__ */ jsx131("span", { className: "oc-browser-frame__body", style: p.background ? { background: p.background } : void 0, children: p.image && /* @__PURE__ */ jsx131("img", { src: p.image, alt: p.imageAlt ?? "" }) })
4404
4423
  ] }),
4405
- /* @__PURE__ */ jsxs112("span", { className: "grid gap-0.5 p-1.5 pt-0", children: [
4424
+ /* @__PURE__ */ jsxs113("span", { className: "grid gap-0.5 p-1.5 pt-0", children: [
4406
4425
  p.pill != null && /* @__PURE__ */ jsx131("span", { className: "oc-pill oc-pill--accent", children: p.pill }),
4407
4426
  /* @__PURE__ */ jsx131("span", { className: "oc-product-card__name", children: p.name }),
4408
4427
  p.summary != null && /* @__PURE__ */ jsx131("span", { className: "oc-product-card__summary", children: p.summary }),
@@ -4414,21 +4433,21 @@ var BlockShowcase = forwardRef129(function BlockShowcase2({ eyebrow, title, proj
4414
4433
 
4415
4434
  // src/blocks/BlockSiteFooter.tsx
4416
4435
  import { forwardRef as forwardRef130 } from "react";
4417
- import { jsx as jsx132, jsxs as jsxs113 } from "react/jsx-runtime";
4436
+ import { jsx as jsx132, jsxs as jsxs114 } from "react/jsx-runtime";
4418
4437
  var BlockSiteFooter = forwardRef130(function BlockSiteFooter2({ brand, brandHref = "/", about, columns, copyright, credit, className, ...rest }, ref) {
4419
- return /* @__PURE__ */ jsx132("footer", { ref, className: cx("oc-site-footer", className), ...rest, children: /* @__PURE__ */ jsxs113("div", { className: "oc-container", children: [
4420
- /* @__PURE__ */ jsxs113("div", { className: "oc-site-footer__grid", children: [
4421
- /* @__PURE__ */ jsxs113("div", { className: "oc-site-footer__about", children: [
4438
+ return /* @__PURE__ */ jsx132("footer", { ref, className: cx("oc-site-footer", className), ...rest, children: /* @__PURE__ */ jsxs114("div", { className: "oc-container", children: [
4439
+ /* @__PURE__ */ jsxs114("div", { className: "oc-site-footer__grid", children: [
4440
+ /* @__PURE__ */ jsxs114("div", { className: "oc-site-footer__about", children: [
4422
4441
  /* @__PURE__ */ jsx132("a", { className: "oc-site-header__brand", href: brandHref, children: brand }),
4423
4442
  about != null && /* @__PURE__ */ jsx132("p", { children: about })
4424
4443
  ] }),
4425
- columns.map((col, i) => /* @__PURE__ */ jsxs113("div", { children: [
4444
+ columns.map((col, i) => /* @__PURE__ */ jsxs114("div", { children: [
4426
4445
  /* @__PURE__ */ jsx132("h2", { className: "oc-site-footer__title", children: col.title }),
4427
4446
  col.links && /* @__PURE__ */ jsx132("ul", { className: "oc-site-footer__list", children: col.links.map((l, j) => /* @__PURE__ */ jsx132("li", { children: /* @__PURE__ */ jsx132("a", { href: l.href, children: l.label }) }, j)) }),
4428
4447
  col.address != null && /* @__PURE__ */ jsx132("address", { className: "oc-site-footer__list", children: col.address })
4429
4448
  ] }, i))
4430
4449
  ] }),
4431
- (copyright != null || credit != null) && /* @__PURE__ */ jsxs113("div", { className: "oc-site-footer__bottom", children: [
4450
+ (copyright != null || credit != null) && /* @__PURE__ */ jsxs114("div", { className: "oc-site-footer__bottom", children: [
4432
4451
  /* @__PURE__ */ jsx132("span", { children: copyright }),
4433
4452
  /* @__PURE__ */ jsx132("span", { children: credit })
4434
4453
  ] })
@@ -4437,13 +4456,13 @@ var BlockSiteFooter = forwardRef130(function BlockSiteFooter2({ brand, brandHref
4437
4456
 
4438
4457
  // src/blocks/BlockSiteHeader.tsx
4439
4458
  import { forwardRef as forwardRef131, useId as useId42 } from "react";
4440
- import { jsx as jsx133, jsxs as jsxs114 } from "react/jsx-runtime";
4459
+ import { jsx as jsx133, jsxs as jsxs115 } from "react/jsx-runtime";
4441
4460
  var BlockSiteHeader = forwardRef131(function BlockSiteHeader2({ brand, brandHref = "/", links, cta, menuLabel = "Menu", className, ...rest }, ref) {
4442
4461
  const navId = `oc-site-nav-${useId42().replace(/:/g, "")}`;
4443
- return /* @__PURE__ */ jsx133("header", { ref, className: cx("oc-site-header", className), ...rest, children: /* @__PURE__ */ jsxs114("div", { className: "oc-container oc-site-header__inner", children: [
4462
+ return /* @__PURE__ */ jsx133("header", { ref, className: cx("oc-site-header", className), ...rest, children: /* @__PURE__ */ jsxs115("div", { className: "oc-container oc-site-header__inner", children: [
4444
4463
  /* @__PURE__ */ jsx133("a", { className: "oc-site-header__brand", href: brandHref, children: brand }),
4445
- /* @__PURE__ */ jsx133("button", { className: "oc-site-header__toggle", type: "button", "aria-label": menuLabel, ...attrs({ popovertarget: navId }), children: "\u2630" }),
4446
- /* @__PURE__ */ jsxs114("nav", { className: "oc-site-header__nav", id: navId, "aria-label": "Main", ...attrs({ popover: "" }), children: [
4464
+ /* @__PURE__ */ jsx133("button", { className: "oc-site-header__toggle", type: "button", "aria-label": menuLabel, popoverTarget: navId, children: "\u2630" }),
4465
+ /* @__PURE__ */ jsxs115("nav", { className: "oc-site-header__nav", id: navId, "aria-label": "Main", ...attrs({ popover: "" }), children: [
4447
4466
  links.map((l, i) => /* @__PURE__ */ jsx133("a", { href: l.href, "aria-current": l.current ? "page" : void 0, children: l.label }, i)),
4448
4467
  cta
4449
4468
  ] })
@@ -4452,15 +4471,15 @@ var BlockSiteHeader = forwardRef131(function BlockSiteHeader2({ brand, brandHref
4452
4471
 
4453
4472
  // src/blocks/BlockSpotlight.tsx
4454
4473
  import { forwardRef as forwardRef132 } from "react";
4455
- import { jsx as jsx134, jsxs as jsxs115 } from "react/jsx-runtime";
4474
+ import { jsx as jsx134, jsxs as jsxs116 } from "react/jsx-runtime";
4456
4475
  var BlockSpotlight = forwardRef132(function BlockSpotlight2({ accent, badge, icon, title, tagline, lead, action, modules, className, ...rest }, ref) {
4457
- return /* @__PURE__ */ jsx134("section", { ref, className: cx("oc-section-pad", className), ...rest, children: /* @__PURE__ */ jsx134("div", { className: "oc-container", children: /* @__PURE__ */ jsxs115("div", { className: cx("oc-spotlight", accent && `oc-accent--${accent}`), children: [
4458
- /* @__PURE__ */ jsxs115("div", { children: [
4459
- badge != null && /* @__PURE__ */ jsxs115("span", { className: "oc-pill oc-pill--accent", children: [
4476
+ return /* @__PURE__ */ jsx134("section", { ref, className: cx("oc-section-pad", className), ...rest, children: /* @__PURE__ */ jsx134("div", { className: "oc-container", children: /* @__PURE__ */ jsxs116("div", { className: cx("oc-spotlight", accent && `oc-accent--${accent}`), children: [
4477
+ /* @__PURE__ */ jsxs116("div", { children: [
4478
+ badge != null && /* @__PURE__ */ jsxs116("span", { className: "oc-pill oc-pill--accent", children: [
4460
4479
  /* @__PURE__ */ jsx134("span", { className: "oc-status-dot" }),
4461
4480
  badge
4462
4481
  ] }),
4463
- /* @__PURE__ */ jsxs115("h2", { className: "oc-spotlight__title", children: [
4482
+ /* @__PURE__ */ jsxs116("h2", { className: "oc-spotlight__title", children: [
4464
4483
  icon != null && /* @__PURE__ */ jsx134("span", { className: "oc-icon-tile oc-icon-tile--lg", "aria-hidden": "true", children: icon }),
4465
4484
  title
4466
4485
  ] }),
@@ -4468,7 +4487,7 @@ var BlockSpotlight = forwardRef132(function BlockSpotlight2({ accent, badge, ico
4468
4487
  lead != null && /* @__PURE__ */ jsx134("p", { className: "oc-lead", children: lead }),
4469
4488
  action
4470
4489
  ] }),
4471
- modules && /* @__PURE__ */ jsx134("ul", { className: "oc-spotlight__modules", children: modules.map((m, i) => /* @__PURE__ */ jsxs115("li", { children: [
4490
+ modules && /* @__PURE__ */ jsx134("ul", { className: "oc-spotlight__modules", children: modules.map((m, i) => /* @__PURE__ */ jsxs116("li", { children: [
4472
4491
  m.icon != null && /* @__PURE__ */ jsx134("span", { className: "oc-icon-tile oc-icon-tile--sm", "aria-hidden": "true", children: m.icon }),
4473
4492
  m.label
4474
4493
  ] }, i)) })
@@ -4477,9 +4496,9 @@ var BlockSpotlight = forwardRef132(function BlockSpotlight2({ accent, badge, ico
4477
4496
 
4478
4497
  // src/blocks/BlockStats.tsx
4479
4498
  import { forwardRef as forwardRef133 } from "react";
4480
- import { jsx as jsx135, jsxs as jsxs116 } from "react/jsx-runtime";
4499
+ import { jsx as jsx135, jsxs as jsxs117 } from "react/jsx-runtime";
4481
4500
  var BlockStats = forwardRef133(function BlockStats2({ stats, className, ...rest }, ref) {
4482
- return /* @__PURE__ */ jsx135("div", { ref, className: cx("oc-block-stats", className), ...rest, children: stats.map((s, i) => /* @__PURE__ */ jsxs116("div", { className: "oc-block-stat", children: [
4501
+ return /* @__PURE__ */ jsx135("div", { ref, className: cx("oc-block-stats", className), ...rest, children: stats.map((s, i) => /* @__PURE__ */ jsxs117("div", { className: "oc-block-stat", children: [
4483
4502
  /* @__PURE__ */ jsx135("div", { className: "oc-block-stat-value", children: s.value }),
4484
4503
  /* @__PURE__ */ jsx135("div", { className: "oc-block-stat-label", children: s.label })
4485
4504
  ] }, i)) });
@@ -4487,9 +4506,9 @@ var BlockStats = forwardRef133(function BlockStats2({ stats, className, ...rest
4487
4506
 
4488
4507
  // src/blocks/BlockStatsCounter.tsx
4489
4508
  import { forwardRef as forwardRef134 } from "react";
4490
- import { jsx as jsx136, jsxs as jsxs117 } from "react/jsx-runtime";
4509
+ import { jsx as jsx136, jsxs as jsxs118 } from "react/jsx-runtime";
4491
4510
  var BlockStatsCounter = forwardRef134(function BlockStatsCounter2({ stats, className, ...rest }, ref) {
4492
- return /* @__PURE__ */ jsx136("div", { ref, className: cx("oc-block-stats", className), ...rest, children: stats.map((s, i) => /* @__PURE__ */ jsxs117("div", { className: "oc-block-stat", children: [
4511
+ return /* @__PURE__ */ jsx136("div", { ref, className: cx("oc-block-stats", className), ...rest, children: stats.map((s, i) => /* @__PURE__ */ jsxs118("div", { className: "oc-block-stat", children: [
4493
4512
  /* @__PURE__ */ jsx136(Counter, { className: "oc-block-stat-value", to: s.to, suffix: s.suffix }),
4494
4513
  /* @__PURE__ */ jsx136("span", { className: "oc-block-stat-label", children: s.label })
4495
4514
  ] }, i)) });
@@ -4497,11 +4516,11 @@ var BlockStatsCounter = forwardRef134(function BlockStatsCounter2({ stats, class
4497
4516
 
4498
4517
  // src/blocks/BlockTeamList.tsx
4499
4518
  import { forwardRef as forwardRef135 } from "react";
4500
- import { Fragment as Fragment28, jsx as jsx137, jsxs as jsxs118 } from "react/jsx-runtime";
4519
+ import { Fragment as Fragment28, jsx as jsx137, jsxs as jsxs119 } from "react/jsx-runtime";
4501
4520
  var BlockTeamList = forwardRef135(function BlockTeamList2({ members, className, ...rest }, ref) {
4502
- return /* @__PURE__ */ jsx137("div", { ref, className: cx("oc-block-team", className), ...rest, children: members.map((m, i) => /* @__PURE__ */ jsxs118("div", { className: "oc-block-team-row", children: [
4521
+ return /* @__PURE__ */ jsx137("div", { ref, className: cx("oc-block-team", className), ...rest, children: members.map((m, i) => /* @__PURE__ */ jsxs119("div", { className: "oc-block-team-row", children: [
4503
4522
  /* @__PURE__ */ jsx137(User, { name: m.name, email: m.email, initials: m.initials, avatarSrc: m.avatarSrc }),
4504
- /* @__PURE__ */ jsxs118("div", { className: "oc-block-team-meta", children: [
4523
+ /* @__PURE__ */ jsxs119("div", { className: "oc-block-team-meta", children: [
4505
4524
  m.role != null && /* @__PURE__ */ jsx137(Badge, { variant: m.roleVariant, children: m.role }),
4506
4525
  m.menu != null && /* @__PURE__ */ jsx137(Dropdown, { trigger: /* @__PURE__ */ jsx137(Fragment28, { children: "\u2026" }), triggerProps: { variant: "ghost", icon: true, size: "sm", type: "button", "aria-label": m.menuLabel ?? "Member actions" }, children: m.menu })
4507
4526
  ] })
@@ -4510,7 +4529,7 @@ var BlockTeamList = forwardRef135(function BlockTeamList2({ members, className,
4510
4529
 
4511
4530
  // src/blocks/BlockTwoFactor.tsx
4512
4531
  import { forwardRef as forwardRef136, useId as useId43, useState as useState15 } from "react";
4513
- import { jsx as jsx138, jsxs as jsxs119 } from "react/jsx-runtime";
4532
+ import { jsx as jsx138, jsxs as jsxs120 } from "react/jsx-runtime";
4514
4533
  var BlockTwoFactor = forwardRef136(function BlockTwoFactor2({ qr, setupKey, recoveryCodes, codeLength = 6, onSubmit, submitLabel = "Enable two-factor", className, ...rest }, ref) {
4515
4534
  const id = `oc-twofactor-${useId43().replace(/:/g, "")}`;
4516
4535
  const [code, setCode] = useState15("");
@@ -4518,17 +4537,17 @@ var BlockTwoFactor = forwardRef136(function BlockTwoFactor2({ qr, setupKey, reco
4518
4537
  e.preventDefault();
4519
4538
  onSubmit?.(code);
4520
4539
  };
4521
- return /* @__PURE__ */ jsxs119("div", { ref, className: cx("oc-block-twofactor", className), ...rest, children: [
4522
- /* @__PURE__ */ jsxs119("section", { className: "oc-block-twofactor-step", children: [
4540
+ return /* @__PURE__ */ jsxs120("div", { ref, className: cx("oc-block-twofactor", className), ...rest, children: [
4541
+ /* @__PURE__ */ jsxs120("section", { className: "oc-block-twofactor-step", children: [
4523
4542
  /* @__PURE__ */ jsx138(Heading, { size: "sm", title: "1. Scan the QR code", description: "Use an authenticator app, or enter the key manually." }),
4524
- /* @__PURE__ */ jsxs119("div", { className: "oc-block-twofactor-center", children: [
4543
+ /* @__PURE__ */ jsxs120("div", { className: "oc-block-twofactor-center", children: [
4525
4544
  qr ?? /* @__PURE__ */ jsx138("div", { className: "oc-block-twofactor-qr", role: "img", "aria-label": "QR code", children: "QR code" }),
4526
4545
  /* @__PURE__ */ jsx138(CopyField, { value: setupKey, label: "Setup key" })
4527
4546
  ] })
4528
4547
  ] }),
4529
- /* @__PURE__ */ jsxs119("form", { className: "oc-block-twofactor-step", onSubmit: submit, children: [
4548
+ /* @__PURE__ */ jsxs120("form", { className: "oc-block-twofactor-step", onSubmit: submit, children: [
4530
4549
  /* @__PURE__ */ jsx138(Heading, { size: "sm", title: "2. Confirm with a code" }),
4531
- /* @__PURE__ */ jsxs119("div", { className: "oc-field", children: [
4550
+ /* @__PURE__ */ jsxs120("div", { className: "oc-field", children: [
4532
4551
  /* @__PURE__ */ jsx138("label", { className: "oc-field-label", htmlFor: id, children: "Authentication code" }),
4533
4552
  /* @__PURE__ */ jsx138(OtpInput, { id, name: "code", length: codeLength, value: code, onChange: setCode })
4534
4553
  ] }),
@@ -4540,7 +4559,7 @@ var BlockTwoFactor = forwardRef136(function BlockTwoFactor2({ qr, setupKey, reco
4540
4559
 
4541
4560
  // src/blocks/BlockWizardDialog.tsx
4542
4561
  import { forwardRef as forwardRef137, useId as useId44, useRef as useRef13 } from "react";
4543
- import { jsx as jsx139, jsxs as jsxs120 } from "react/jsx-runtime";
4562
+ import { jsx as jsx139, jsxs as jsxs121 } from "react/jsx-runtime";
4544
4563
  var BlockWizardDialog = forwardRef137(function BlockWizardDialog2({
4545
4564
  open,
4546
4565
  defaultOpen,
@@ -4574,15 +4593,15 @@ var BlockWizardDialog = forwardRef137(function BlockWizardDialog2({
4574
4593
  ...attrs({ closedby: "closerequest" }),
4575
4594
  ...rest,
4576
4595
  onClose: dlg.onClose,
4577
- children: /* @__PURE__ */ jsx139(DialogContext.Provider, { value: { close: dlg.close }, children: /* @__PURE__ */ jsx139("div", { className: "oc-modal-content oc-modal-content--xl", children: /* @__PURE__ */ jsxs120("div", { className: "oc-block-wizard", children: [
4596
+ children: /* @__PURE__ */ jsx139(DialogContext.Provider, { value: { close: dlg.close }, children: /* @__PURE__ */ jsx139("div", { className: "oc-modal-content oc-modal-content--xl", children: /* @__PURE__ */ jsxs121("div", { className: "oc-block-wizard", children: [
4578
4597
  /* @__PURE__ */ jsx139("div", { className: "oc-block-wizard-rail", children: /* @__PURE__ */ jsx139(Stepper, { steps: steps.map((s) => ({ label: s.label })), current, onStepChange: setCurrent, "aria-label": stepperLabel }) }),
4579
- /* @__PURE__ */ jsxs120("div", { className: "oc-block-wizard-main", children: [
4580
- /* @__PURE__ */ jsxs120("div", { className: "oc-modal-header", children: [
4598
+ /* @__PURE__ */ jsxs121("div", { className: "oc-block-wizard-main", children: [
4599
+ /* @__PURE__ */ jsxs121("div", { className: "oc-modal-header", children: [
4581
4600
  /* @__PURE__ */ jsx139("h2", { className: "oc-modal-title", id: titleId, children: active?.label }),
4582
4601
  /* @__PURE__ */ jsx139("p", { className: "oc-modal-description", children: description ?? `Step ${current + 1} of ${steps.length}` })
4583
4602
  ] }),
4584
4603
  /* @__PURE__ */ jsx139("div", { className: "oc-block-wizard-step", children: active?.content }),
4585
- /* @__PURE__ */ jsxs120("div", { className: "oc-modal-footer", children: [
4604
+ /* @__PURE__ */ jsxs121("div", { className: "oc-modal-footer", children: [
4586
4605
  /* @__PURE__ */ jsx139("button", { className: "oc-btn oc-btn--outline", type: "button", disabled: current === 0, onClick: () => setCurrent(current - 1), children: backLabel }),
4587
4606
  /* @__PURE__ */ jsx139(
4588
4607
  "button",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@birdycom/omniaui-react",
3
- "version": "0.11.2",
3
+ "version": "0.12.1",
4
4
  "description": "OmniaUI for React: typed function components and page blocks that render the exact @birdycom/omniaui and @birdycom/omniaui-blocks markup.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -29,7 +29,7 @@ export const BlockSiteHeader = forwardRef<HTMLElement, BlockSiteHeaderProps>(fun
29
29
  <header ref={ref} className={cx("oc-site-header", className)} {...rest}>
30
30
  <div className="oc-container oc-site-header__inner">
31
31
  <a className="oc-site-header__brand" href={brandHref}>{brand}</a>
32
- <button className="oc-site-header__toggle" type="button" aria-label={menuLabel} {...attrs({ popovertarget: navId })}>&#9776;</button>
32
+ <button className="oc-site-header__toggle" type="button" aria-label={menuLabel} popoverTarget={navId}>&#9776;</button>
33
33
  <nav className="oc-site-header__nav" id={navId} aria-label="Main" {...attrs({ popover: "" })}>
34
34
  {links.map((l, i) => (
35
35
  <a key={i} href={l.href} aria-current={l.current ? "page" : undefined}>{l.label}</a>
@@ -36,7 +36,7 @@ export const ColumnMenu = forwardRef<HTMLDivElement, ColumnMenuProps>(function C
36
36
  <div ref={ref} className={cx("oc-column-menu-scope", className)} {...rest}>
37
37
  <div className="oc-table-toolbar">
38
38
  <span className="oc-table-toolbar-spacer" />
39
- <button className="oc-btn oc-btn--outline oc-btn--sm" type="button" {...attrs({ popovertarget: menuId })}>
39
+ <button className="oc-btn oc-btn--outline oc-btn--sm" type="button" popoverTarget={menuId}>
40
40
  {triggerLabel}
41
41
  </button>
42
42
  </div>
@@ -12,7 +12,7 @@ export interface DropdownProps extends HTMLAttributes<HTMLDivElement> {
12
12
  }
13
13
 
14
14
  /**
15
- * Trigger button + `<div class="oc-dropdown-menu" popover>`, wired with `popovertarget`
15
+ * Trigger button + `<div class="oc-dropdown-menu" popover>`, wired with `popoverTarget`
16
16
  * (native popover and anchor positioning, no state needed).
17
17
  */
18
18
  export const Dropdown = forwardRef<HTMLDivElement, DropdownProps>(function Dropdown(
@@ -23,7 +23,7 @@ export const Dropdown = forwardRef<HTMLDivElement, DropdownProps>(function Dropd
23
23
  const menuId = id ?? `oc-menu-${auto.replace(/:/g, "")}`;
24
24
  return (
25
25
  <>
26
- <Button variant="outline" {...triggerProps} {...attrs({ popovertarget: menuId })}>{trigger}</Button>
26
+ <Button variant="outline" {...triggerProps} popoverTarget={menuId}>{trigger}</Button>
27
27
  <div ref={ref} className={cx("oc-dropdown-menu", className)} id={menuId} {...attrs({ popover: "" })} {...rest}>
28
28
  {children}
29
29
  </div>
@@ -65,7 +65,7 @@ export const EmojiPicker = forwardRef<HTMLDivElement, EmojiPickerProps>(function
65
65
  if (inline) return panel;
66
66
  return (
67
67
  <>
68
- <button type="button" className="oc-emoji-picker__trigger" aria-label={triggerLabel} {...attrs({ popovertarget: panelId })}>{trigger}</button>
68
+ <button type="button" className="oc-emoji-picker__trigger" aria-label={triggerLabel} popoverTarget={panelId}>{trigger}</button>
69
69
  {panel}
70
70
  </>
71
71
  );
@@ -43,6 +43,20 @@ export const Lightbox = forwardRef<HTMLDialogElement, LightboxProps>(function Li
43
43
  const single = images.length === 1;
44
44
  const slideId = (i: number) => `${base}-${((i % images.length) + images.length) % images.length + 1}`;
45
45
 
46
+ // Prev / next stay links (they work without JavaScript), but scroll without putting #slide in the address and the
47
+ // history; on close a slide hash of this viewer is removed (it was there when the links were followed natively).
48
+ const go = (i: number) => (e: { preventDefault(): void }) => {
49
+ const slide = document.getElementById(slideId(i));
50
+ if (!slide) return;
51
+ e.preventDefault();
52
+ slide.scrollIntoView?.({ behavior: matchMedia("(prefers-reduced-motion: reduce)").matches ? "instant" as ScrollBehavior : "smooth", block: "nearest", inline: "center" });
53
+ };
54
+ const onClose: typeof dlg.onClose = (...args) => {
55
+ const slide = location.hash && document.getElementById(decodeURIComponent(location.hash.slice(1)));
56
+ if (slide && inner.current?.contains(slide)) history.replaceState(history.state, "", location.pathname + location.search);
57
+ return dlg.onClose(...args);
58
+ };
59
+
46
60
  // After opening: jump (without animation) to the photo that was clicked.
47
61
  useEffect(() => {
48
62
  if (dlg.open) document.getElementById(slideId(start))?.scrollIntoView?.({ behavior: "instant" as ScrollBehavior, block: "nearest", inline: "center" });
@@ -60,7 +74,7 @@ export const Lightbox = forwardRef<HTMLDialogElement, LightboxProps>(function Li
60
74
  ))}
61
75
  </div>
62
76
  )}
63
- <dialog ref={ref} className={cx("oc-lightbox", single && "oc-lightbox--single", className)} aria-label={label} {...attrs({ closedby: "any" })} {...rest} onClose={dlg.onClose}>
77
+ <dialog ref={ref} className={cx("oc-lightbox", single && "oc-lightbox--single", className)} aria-label={label} {...attrs({ closedby: "any" })} {...rest} onClose={onClose}>
64
78
  <div className="oc-lightbox__bar">
65
79
  {title != null ? <h2 className="oc-lightbox__title">{title}</h2> : <span />}
66
80
  <button type="button" className="oc-lightbox__close" aria-label="Close" onClick={dlg.close}>&#10005;</button>
@@ -69,8 +83,8 @@ export const Lightbox = forwardRef<HTMLDialogElement, LightboxProps>(function Li
69
83
  {images.map((img, i) => (
70
84
  <figure key={i} className="oc-lightbox__slide" id={slideId(i)}>
71
85
  <div className="oc-lightbox__media">{media(img, img.src)}</div>
72
- {!single && <a className="oc-lightbox__nav oc-lightbox__nav--prev" href={`#${slideId(i - 1)}`} aria-label="Previous photo">&#8592;</a>}
73
- {!single && <a className="oc-lightbox__nav oc-lightbox__nav--next" href={`#${slideId(i + 1)}`} aria-label="Next photo">&#8594;</a>}
86
+ {!single && <a className="oc-lightbox__nav oc-lightbox__nav--prev" href={`#${slideId(i - 1)}`} onClick={go(i - 1)} aria-label="Previous photo">&#8592;</a>}
87
+ {!single && <a className="oc-lightbox__nav oc-lightbox__nav--next" href={`#${slideId(i + 1)}`} onClick={go(i + 1)} aria-label="Next photo">&#8594;</a>}
74
88
  <figcaption className="oc-lightbox__caption">
75
89
  {!single && <span className="oc-lightbox__counter">{i + 1} / {images.length}</span>} {img.caption ?? img.alt}
76
90
  </figcaption>
@@ -38,7 +38,7 @@ export const MediaCard = forwardRef<HTMLElement, MediaCardProps>(function MediaC
38
38
  {meta != null && <p className="oc-media-card__meta">{meta}</p>}
39
39
  </div>
40
40
  {menu != null && (
41
- <button type="button" className="oc-media-card__menu" aria-label="More actions" {...attrs({ popovertarget: menuId })}>&#8942;</button>
41
+ <button type="button" className="oc-media-card__menu" aria-label="More actions" popoverTarget={menuId}>&#8942;</button>
42
42
  )}
43
43
  </div>
44
44
  {menu != null && <div className="oc-dropdown-menu" id={menuId} {...attrs({ popover: "" })}>{menu}</div>}
@@ -44,7 +44,7 @@ export const MediaRow = forwardRef<HTMLLIElement, MediaRowProps>(function MediaR
44
44
  </div>
45
45
  {menu != null && (
46
46
  <>
47
- <button type="button" className="oc-media-row__menu" aria-label="More actions" {...attrs({ popovertarget: menuId })}>&#8942;</button>
47
+ <button type="button" className="oc-media-row__menu" aria-label="More actions" popoverTarget={menuId}>&#8942;</button>
48
48
  <div className="oc-dropdown-menu" id={menuId} {...attrs({ popover: "" })}>{menu}</div>
49
49
  </>
50
50
  )}
@@ -131,7 +131,7 @@ export const MessageThread = forwardRef<HTMLElement, MessageThreadProps>(functio
131
131
  {status && <span className={cx("oc-badge", status.variant && `oc-badge--${status.variant}`)}>{status.label}</span>}
132
132
  {menu && (
133
133
  <>
134
- <button type="button" className="oc-message-thread__icon-btn" {...attrs({ popovertarget: `${base}-menu` })} aria-label="Conversation actions">
134
+ <button type="button" className="oc-message-thread__icon-btn" popoverTarget={`${base}-menu`} aria-label="Conversation actions">
135
135
  <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><circle cx="12" cy="5" r="1.8" /><circle cx="12" cy="12" r="1.8" /><circle cx="12" cy="19" r="1.8" /></svg>
136
136
  </button>
137
137
  <div className="oc-dropdown-menu" id={`${base}-menu`} {...attrs({ popover: "" })} role="menu">
@@ -53,7 +53,7 @@ export const NavmenuDropdown = forwardRef<HTMLDivElement, NavmenuDropdownProps>(
53
53
  const menuId = id ?? `oc-navmenu-${auto.replace(/:/g, "")}`;
54
54
  return (
55
55
  <li>
56
- <button className="oc-navmenu-link oc-navmenu-link--caret" type="button" {...attrs({ popovertarget: menuId })}>{label}</button>
56
+ <button className="oc-navmenu-link oc-navmenu-link--caret" type="button" popoverTarget={menuId}>{label}</button>
57
57
  <div ref={ref} className={cx("oc-dropdown-menu", className)} id={menuId} {...attrs({ popover: "" })} {...rest}>
58
58
  {children}
59
59
  </div>
@@ -23,7 +23,7 @@ export const Popover = forwardRef<HTMLDivElement, PopoverProps>(function Popover
23
23
  const panelId = id ?? `oc-popover-${auto.replace(/:/g, "")}`;
24
24
  return (
25
25
  <>
26
- <Button variant="outline" type="button" {...triggerProps} {...attrs({ popovertarget: panelId })}>{trigger}</Button>
26
+ <Button variant="outline" type="button" {...triggerProps} popoverTarget={panelId}>{trigger}</Button>
27
27
  <div ref={ref} className={cx("oc-popover", size !== "md" && `oc-popover--${size}`, className)} id={panelId} {...attrs({ popover: "" })} {...rest}>
28
28
  {title != null && <h3 className="oc-popover-title">{title}</h3>}
29
29
  {text != null && <p className="oc-popover-text">{text}</p>}
@@ -45,7 +45,7 @@ export const TableActionsMenu = forwardRef<HTMLDivElement, TableActionsMenuProps
45
45
  const menuId = id ?? `oc-table-actions-menu-${auto.replace(/:/g, "")}`;
46
46
  return (
47
47
  <>
48
- <button className="oc-table-actions-more" type="button" aria-label={label} {...attrs({ popovertarget: menuId })} />
48
+ <button className="oc-table-actions-more" type="button" aria-label={label} popoverTarget={menuId} />
49
49
  <div ref={ref} id={menuId} className={cx("oc-dropdown-menu", className)} {...attrs({ popover: "" })} {...rest}>
50
50
  {children}
51
51
  </div>
@@ -3,12 +3,28 @@ import type { HTMLAttributes, ReactNode } from "react";
3
3
  import { cx } from "../utils";
4
4
 
5
5
  export interface TooltipProps extends Omit<HTMLAttributes<HTMLSpanElement>, "content"> {
6
- /** Tooltip text (`data-tooltip`). */
6
+ /** Tooltip text (`data-tooltip`); with `heading`, the lines under the title. */
7
7
  content: string;
8
+ /** Keep the line breaks of `content` (`oc-tooltip--multiline`). */
9
+ multiline?: boolean;
10
+ /** Title above `content` (`.oc-tooltip__title`: larger, capital first letter); renders `.oc-tooltip__content`. */
11
+ heading?: string;
12
+ /** Preferred side (default top); with anchor positioning it moves to the other side when there is no room. */
13
+ side?: "top" | "bottom" | "left" | "right";
8
14
  children: ReactNode;
9
15
  }
10
16
 
11
17
  /** `<span class="oc-tooltip" data-tooltip>`: CSS-only tooltip around its children. */
12
- export const Tooltip = forwardRef<HTMLSpanElement, TooltipProps>(function Tooltip({ content, className, ...rest }, ref) {
13
- return <span ref={ref} className={cx("oc-tooltip", className)} data-tooltip={content} {...rest} />;
18
+ export const Tooltip = forwardRef<HTMLSpanElement, TooltipProps>(function Tooltip({ content, multiline, heading, side, className, children, ...rest }, ref) {
19
+ const classes = cx("oc-tooltip", multiline && !heading && "oc-tooltip--multiline", side && side !== "top" && `oc-tooltip--${side}`, className);
20
+ if (!heading) return <span ref={ref} className={classes} data-tooltip={content} {...rest}>{children}</span>;
21
+ return (
22
+ <span ref={ref} className={classes} {...rest}>
23
+ {children}
24
+ <span className="oc-tooltip__content" role="tooltip">
25
+ <span className="oc-tooltip__title">{heading}</span>
26
+ {content}
27
+ </span>
28
+ </span>
29
+ );
14
30
  });