@ohhwells/bridge 0.1.151 → 0.1.152

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.js CHANGED
@@ -6695,8 +6695,9 @@ function upsertMeta(selector, attr, token, value) {
6695
6695
  }
6696
6696
  if (el.getAttribute("content") !== value) el.setAttribute("content", value);
6697
6697
  }
6698
- function removeMeta(selector) {
6699
- document.head.querySelector(selector)?.remove();
6698
+ function clearMeta(selector) {
6699
+ const el = document.head.querySelector(selector);
6700
+ if (el && el.getAttribute("content") !== "") el.setAttribute("content", "");
6700
6701
  }
6701
6702
  function escapeXml(value) {
6702
6703
  return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
@@ -6726,8 +6727,8 @@ function applyOgImage(url) {
6726
6727
  upsertMeta('meta[name="twitter:card"]', "name", "twitter:card", "summary_large_image");
6727
6728
  return;
6728
6729
  }
6729
- removeMeta('meta[property="og:image"]');
6730
- removeMeta('meta[name="twitter:image"]');
6730
+ clearMeta('meta[property="og:image"]');
6731
+ clearMeta('meta[name="twitter:image"]');
6731
6732
  }
6732
6733
  function applyBrandChrome(content) {
6733
6734
  const name = content[BRAND_NAME_KEY];
@@ -11569,6 +11570,89 @@ function useLinkHrefGuardian(...deps) {
11569
11570
  }, deps);
11570
11571
  }
11571
11572
 
11573
+ // src/lib/sticky-search-params.ts
11574
+ var STICKY_EXACT = /* @__PURE__ */ new Set([
11575
+ // Site identity. Required in local dev and in the canvas editor's iframe, where there is no
11576
+ // router to inject __OHW_SUBDOMAIN__ or set the ohw-subdomain cookie, so the query string is
11577
+ // the only thing that says which site this is.
11578
+ "subdomain",
11579
+ // Ad-click / attribution ids. Dropping these on the first internal click is what breaks
11580
+ // campaign attribution for a site whose landing page is not the page that converts.
11581
+ "ref",
11582
+ "gclid",
11583
+ "fbclid",
11584
+ "msclkid",
11585
+ "ttclid",
11586
+ "twclid"
11587
+ ]);
11588
+ var STICKY_PREFIXES = ["utm_"];
11589
+ function isStickySearchParam(name) {
11590
+ const key = name.toLowerCase();
11591
+ return STICKY_EXACT.has(key) || STICKY_PREFIXES.some((p) => key.startsWith(p));
11592
+ }
11593
+ function applyStickySearchParams(target, currentSearch) {
11594
+ const current = new URLSearchParams(currentSearch);
11595
+ let changed = false;
11596
+ for (const [name, value] of current) {
11597
+ if (!isStickySearchParam(name)) continue;
11598
+ if (target.searchParams.has(name)) continue;
11599
+ target.searchParams.set(name, value);
11600
+ changed = true;
11601
+ }
11602
+ return changed;
11603
+ }
11604
+ function isPlainLeftClick(e) {
11605
+ return e.button === 0 && !e.metaKey && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.defaultPrevented;
11606
+ }
11607
+ function resolveStickyNavigation(anchor, currentSearch, origin) {
11608
+ if (anchor.target && anchor.target !== "_self") return null;
11609
+ if (anchor.hasAttribute("download")) return null;
11610
+ const href = anchor.getAttribute("href");
11611
+ if (!href) return null;
11612
+ if (href.startsWith("#")) return null;
11613
+ let url;
11614
+ try {
11615
+ url = new URL(href, origin);
11616
+ } catch {
11617
+ return null;
11618
+ }
11619
+ if (url.protocol !== "http:" && url.protocol !== "https:") return null;
11620
+ if (url.origin !== origin) return null;
11621
+ if (!applyStickySearchParams(url, currentSearch)) return null;
11622
+ return url.pathname + url.search + url.hash;
11623
+ }
11624
+
11625
+ // src/lib/content-mount-observer.ts
11626
+ var CONTENT_SELECTOR = "[data-ohw-key],[data-ohw-section],[data-ohw-editable]";
11627
+ function hasMountedContentNodes(records) {
11628
+ for (const record of records) {
11629
+ for (const node of record.addedNodes) {
11630
+ if (node.nodeType !== 1) continue;
11631
+ const el = node;
11632
+ if (el.matches(CONTENT_SELECTOR) || el.querySelector(CONTENT_SELECTOR)) return true;
11633
+ }
11634
+ }
11635
+ return false;
11636
+ }
11637
+
11638
+ // src/lib/content-fetch-policy.ts
11639
+ var overriddenPathsBySubdomain = /* @__PURE__ */ new Map();
11640
+ function recordOverriddenPaths(subdomain, raw) {
11641
+ overriddenPathsBySubdomain.set(
11642
+ subdomain,
11643
+ Array.isArray(raw) ? raw.filter((p) => typeof p === "string") : void 0
11644
+ );
11645
+ }
11646
+ function shouldFetchContentForPath(subdomain, path) {
11647
+ if (!overriddenPathsBySubdomain.has(subdomain)) return true;
11648
+ const overridden = overriddenPathsBySubdomain.get(subdomain);
11649
+ if (!overridden) return true;
11650
+ return overridden.includes(path);
11651
+ }
11652
+ function resetOverriddenPathsCache() {
11653
+ overriddenPathsBySubdomain.clear();
11654
+ }
11655
+
11572
11656
  // src/useSavedLinkNavigation.ts
11573
11657
  import { useEffect as useEffect2 } from "react";
11574
11658
  import { useRouter } from "next/navigation";
@@ -11593,8 +11677,10 @@ function useSavedLinkNavigation(isEditMode) {
11593
11677
  if (!href) return;
11594
11678
  e.preventDefault();
11595
11679
  e.stopPropagation();
11596
- if (isRouterHref(href)) router.push(href);
11597
- else window.location.assign(href);
11680
+ if (isRouterHref(href)) {
11681
+ const sticky = resolveStickyNavigation(anchor, window.location.search, window.location.origin);
11682
+ router.push(sticky ?? href);
11683
+ } else window.location.assign(href);
11598
11684
  };
11599
11685
  document.addEventListener("click", onClick, true);
11600
11686
  return () => document.removeEventListener("click", onClick, true);
@@ -12412,6 +12498,63 @@ function SchedulingWidget({ notifyOnConnect = false, initialScheduleId, insertAf
12412
12498
  );
12413
12499
  }
12414
12500
 
12501
+ // src/ui/OhwLoaderSurface.tsx
12502
+ import { Fragment as Fragment3, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
12503
+ var OHW_LOADER_STYLE = {
12504
+ position: "fixed",
12505
+ inset: 0,
12506
+ background: "var(--brand-background, #fff)",
12507
+ zIndex: 2147483646,
12508
+ display: "flex",
12509
+ alignItems: "center",
12510
+ justifyContent: "center"
12511
+ };
12512
+ var OHW_LOADER_SPIN_KEYFRAMES = "@keyframes ohw-loader-spin{to{transform:rotate(360deg)}}";
12513
+ function OhwLoaderSpinner() {
12514
+ return /* @__PURE__ */ jsxs4(Fragment3, { children: [
12515
+ /* @__PURE__ */ jsx6("style", { suppressHydrationWarning: true, dangerouslySetInnerHTML: { __html: OHW_LOADER_SPIN_KEYFRAMES } }),
12516
+ /* @__PURE__ */ jsxs4(
12517
+ "svg",
12518
+ {
12519
+ width: "28",
12520
+ height: "28",
12521
+ viewBox: "0 0 28 28",
12522
+ fill: "none",
12523
+ "aria-hidden": true,
12524
+ style: { animation: "ohw-loader-spin 0.7s linear infinite", transformOrigin: "center" },
12525
+ children: [
12526
+ /* @__PURE__ */ jsx6("circle", { cx: "14", cy: "14", r: "11", style: { stroke: "var(--brand-border, #E7E5E4)" }, strokeWidth: "3" }),
12527
+ /* @__PURE__ */ jsx6(
12528
+ "circle",
12529
+ {
12530
+ cx: "14",
12531
+ cy: "14",
12532
+ r: "11",
12533
+ style: { stroke: "var(--brand-primary, #1C1917)" },
12534
+ strokeWidth: "3",
12535
+ strokeDasharray: "17 52",
12536
+ strokeLinecap: "round"
12537
+ }
12538
+ )
12539
+ ]
12540
+ }
12541
+ )
12542
+ ] });
12543
+ }
12544
+ var OHW_LOADER_PREHYDRATE_SCRIPT = `(function(){try{var fromGlobal=typeof window!=="undefined"&&window.__OHW_SUBDOMAIN__?String(window.__OHW_SUBDOMAIN__):"";var p=location.hostname.split(".");var fromHost=location.hostname.endsWith(".ohhwells.site")&&p[0]&&p[0]!=="www"?p[0]:"";var fromQuery=new URLSearchParams(location.search).get("subdomain")||"";var fromCookie=(document.cookie.match(/(?:^|; )ohw-subdomain=([^;]*)/)||[])[1];fromCookie=fromCookie?decodeURIComponent(fromCookie):"";if(!fromGlobal&&!fromHost&&!fromQuery&&!fromCookie)return;var e=document.getElementById("ohw-loader");if(e)e.style.display="flex"}catch(e){}})();`;
12545
+ function OhwLoaderSurface() {
12546
+ return /* @__PURE__ */ jsxs4(Fragment3, { children: [
12547
+ /* @__PURE__ */ jsx6("div", { id: "ohw-loader", suppressHydrationWarning: true, style: { ...OHW_LOADER_STYLE, display: "none" }, children: /* @__PURE__ */ jsx6(OhwLoaderSpinner, {}) }),
12548
+ /* @__PURE__ */ jsx6(
12549
+ "script",
12550
+ {
12551
+ suppressHydrationWarning: true,
12552
+ dangerouslySetInnerHTML: { __html: OHW_LOADER_PREHYDRATE_SCRIPT }
12553
+ }
12554
+ )
12555
+ ] });
12556
+ }
12557
+
12415
12558
  // src/ui/toggle-group.tsx
12416
12559
  import * as React3 from "react";
12417
12560
 
@@ -15733,7 +15876,7 @@ var cva = (base, config) => (props) => {
15733
15876
 
15734
15877
  // src/ui/toggle.tsx
15735
15878
  import { Toggle as TogglePrimitive } from "radix-ui";
15736
- import { jsx as jsx6 } from "react/jsx-runtime";
15879
+ import { jsx as jsx7 } from "react/jsx-runtime";
15737
15880
  var toggleVariants = cva(
15738
15881
  "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=on]:bg-bridge-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
15739
15882
  {
@@ -15760,7 +15903,7 @@ function Toggle({
15760
15903
  size,
15761
15904
  ...props
15762
15905
  }) {
15763
- return /* @__PURE__ */ jsx6(
15906
+ return /* @__PURE__ */ jsx7(
15764
15907
  TogglePrimitive.Root,
15765
15908
  {
15766
15909
  "data-slot": "toggle",
@@ -15771,7 +15914,7 @@ function Toggle({
15771
15914
  }
15772
15915
 
15773
15916
  // src/ui/toggle-group.tsx
15774
- import { jsx as jsx7 } from "react/jsx-runtime";
15917
+ import { jsx as jsx8 } from "react/jsx-runtime";
15775
15918
  var ToggleGroupContext = React3.createContext({
15776
15919
  value: "",
15777
15920
  onValueChange: () => {
@@ -15784,13 +15927,13 @@ function ToggleGroup({
15784
15927
  children,
15785
15928
  ...props
15786
15929
  }) {
15787
- return /* @__PURE__ */ jsx7(
15930
+ return /* @__PURE__ */ jsx8(
15788
15931
  "div",
15789
15932
  {
15790
15933
  role: "group",
15791
15934
  className: cn("flex items-center gap-1 p-1 bg-muted rounded-md", className),
15792
15935
  ...props,
15793
- children: /* @__PURE__ */ jsx7(ToggleGroupContext.Provider, { value: { value, onValueChange }, children })
15936
+ children: /* @__PURE__ */ jsx8(ToggleGroupContext.Provider, { value: { value, onValueChange }, children })
15794
15937
  }
15795
15938
  );
15796
15939
  }
@@ -15801,7 +15944,7 @@ function ToggleGroupItem({
15801
15944
  ...props
15802
15945
  }) {
15803
15946
  const { value: groupValue, onValueChange } = React3.useContext(ToggleGroupContext);
15804
- return /* @__PURE__ */ jsx7(
15947
+ return /* @__PURE__ */ jsx8(
15805
15948
  Toggle,
15806
15949
  {
15807
15950
  pressed: groupValue === value,
@@ -15823,10 +15966,10 @@ function ToggleGroupItem({
15823
15966
  // src/ui/drag-handle.tsx
15824
15967
  import * as React4 from "react";
15825
15968
  import { GripVertical } from "lucide-react";
15826
- import { jsx as jsx8 } from "react/jsx-runtime";
15969
+ import { jsx as jsx9 } from "react/jsx-runtime";
15827
15970
  var DragHandle = React4.forwardRef(
15828
15971
  ({ className, type = "button", ...props }, ref) => {
15829
- return /* @__PURE__ */ jsx8(
15972
+ return /* @__PURE__ */ jsx9(
15830
15973
  "button",
15831
15974
  {
15832
15975
  ref,
@@ -15841,7 +15984,7 @@ var DragHandle = React4.forwardRef(
15841
15984
  className
15842
15985
  ),
15843
15986
  ...props,
15844
- children: /* @__PURE__ */ jsx8(GripVertical, { className: "size-4 shrink-0", "aria-hidden": "true" })
15987
+ children: /* @__PURE__ */ jsx9(GripVertical, { className: "size-4 shrink-0", "aria-hidden": "true" })
15845
15988
  }
15846
15989
  );
15847
15990
  }
@@ -15850,8 +15993,8 @@ DragHandle.displayName = "DragHandle";
15850
15993
 
15851
15994
  // src/ui/custom-toolbar.tsx
15852
15995
  import * as React5 from "react";
15853
- import { jsx as jsx9 } from "react/jsx-runtime";
15854
- var CustomToolbar = React5.forwardRef(({ className, onMouseDown, ...props }, ref) => /* @__PURE__ */ jsx9(
15996
+ import { jsx as jsx10 } from "react/jsx-runtime";
15997
+ var CustomToolbar = React5.forwardRef(({ className, onMouseDown, ...props }, ref) => /* @__PURE__ */ jsx10(
15855
15998
  "div",
15856
15999
  {
15857
16000
  ref,
@@ -15870,7 +16013,7 @@ var CustomToolbar = React5.forwardRef(({ className, onMouseDown, ...props }, ref
15870
16013
  ));
15871
16014
  CustomToolbar.displayName = "CustomToolbar";
15872
16015
  function CustomToolbarDivider({ className, ...props }) {
15873
- return /* @__PURE__ */ jsx9(
16016
+ return /* @__PURE__ */ jsx10(
15874
16017
  "span",
15875
16018
  {
15876
16019
  "aria-hidden": true,
@@ -15880,7 +16023,7 @@ function CustomToolbarDivider({ className, ...props }) {
15880
16023
  );
15881
16024
  }
15882
16025
  var CustomToolbarButton = React5.forwardRef(
15883
- ({ className, active = false, type = "button", ...props }, ref) => /* @__PURE__ */ jsx9(
16026
+ ({ className, active = false, type = "button", ...props }, ref) => /* @__PURE__ */ jsx10(
15884
16027
  "button",
15885
16028
  {
15886
16029
  ref,
@@ -15903,17 +16046,17 @@ import { Brush, Copy, CornerLeftUp, Heading, Link, MoreHorizontal, Plus, Trash2
15903
16046
  // src/ui/dropdown-menu.tsx
15904
16047
  import * as React6 from "react";
15905
16048
  import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui";
15906
- import { jsx as jsx10 } from "react/jsx-runtime";
16049
+ import { jsx as jsx11 } from "react/jsx-runtime";
15907
16050
  function DropdownMenu({ ...props }) {
15908
- return /* @__PURE__ */ jsx10(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
16051
+ return /* @__PURE__ */ jsx11(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
15909
16052
  }
15910
- var DropdownMenuTrigger = React6.forwardRef((props, ref) => /* @__PURE__ */ jsx10(DropdownMenuPrimitive.Trigger, { ref, "data-slot": "dropdown-menu-trigger", ...props }));
16053
+ var DropdownMenuTrigger = React6.forwardRef((props, ref) => /* @__PURE__ */ jsx11(DropdownMenuPrimitive.Trigger, { ref, "data-slot": "dropdown-menu-trigger", ...props }));
15911
16054
  DropdownMenuTrigger.displayName = "DropdownMenuTrigger";
15912
16055
  function DropdownMenuGroup({
15913
16056
  className,
15914
16057
  ...props
15915
16058
  }) {
15916
- return /* @__PURE__ */ jsx10(
16059
+ return /* @__PURE__ */ jsx11(
15917
16060
  DropdownMenuPrimitive.Group,
15918
16061
  {
15919
16062
  "data-slot": "dropdown-menu-group",
@@ -15927,7 +16070,7 @@ function DropdownMenuContent({
15927
16070
  sideOffset = 6,
15928
16071
  ...props
15929
16072
  }) {
15930
- return /* @__PURE__ */ jsx10(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx10(
16073
+ return /* @__PURE__ */ jsx11(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx11(
15931
16074
  DropdownMenuPrimitive.Content,
15932
16075
  {
15933
16076
  "data-slot": "dropdown-menu-content",
@@ -15951,7 +16094,7 @@ function DropdownMenuItem({
15951
16094
  variant = "default",
15952
16095
  ...props
15953
16096
  }) {
15954
- return /* @__PURE__ */ jsx10(
16097
+ return /* @__PURE__ */ jsx11(
15955
16098
  DropdownMenuPrimitive.Item,
15956
16099
  {
15957
16100
  "data-slot": "dropdown-menu-item",
@@ -15981,7 +16124,7 @@ function DropdownMenuSeparator({
15981
16124
  className,
15982
16125
  ...props
15983
16126
  }) {
15984
- return /* @__PURE__ */ jsx10(
16127
+ return /* @__PURE__ */ jsx11(
15985
16128
  DropdownMenuPrimitive.Separator,
15986
16129
  {
15987
16130
  "data-slot": "dropdown-menu-separator",
@@ -15993,18 +16136,18 @@ function DropdownMenuSeparator({
15993
16136
 
15994
16137
  // src/ui/tooltip.tsx
15995
16138
  import { Tooltip as TooltipPrimitive } from "radix-ui";
15996
- import { jsx as jsx11 } from "react/jsx-runtime";
16139
+ import { jsx as jsx12 } from "react/jsx-runtime";
15997
16140
  function TooltipProvider({
15998
16141
  delayDuration = 0,
15999
16142
  ...props
16000
16143
  }) {
16001
- return /* @__PURE__ */ jsx11(TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delayDuration, ...props });
16144
+ return /* @__PURE__ */ jsx12(TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delayDuration, ...props });
16002
16145
  }
16003
16146
  function Tooltip({ ...props }) {
16004
- return /* @__PURE__ */ jsx11(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props });
16147
+ return /* @__PURE__ */ jsx12(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props });
16005
16148
  }
16006
16149
  function TooltipTrigger({ ...props }) {
16007
- return /* @__PURE__ */ jsx11(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
16150
+ return /* @__PURE__ */ jsx12(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
16008
16151
  }
16009
16152
  var arrowClassBySide = {
16010
16153
  top: "before:bottom-0 before:left-1/2 before:-translate-x-1/2 before:translate-y-1/2",
@@ -16021,7 +16164,7 @@ function TooltipContent({
16021
16164
  ...props
16022
16165
  }) {
16023
16166
  const resolvedSide = side ?? "bottom";
16024
- return /* @__PURE__ */ jsx11(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx11(
16167
+ return /* @__PURE__ */ jsx12(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx12(
16025
16168
  TooltipPrimitive.Content,
16026
16169
  {
16027
16170
  "data-slot": "tooltip-content",
@@ -16044,7 +16187,7 @@ function TooltipContent({
16044
16187
  }
16045
16188
 
16046
16189
  // src/ui/item-action-toolbar.tsx
16047
- import { Fragment as Fragment3, jsx as jsx12, jsxs as jsxs4 } from "react/jsx-runtime";
16190
+ import { Fragment as Fragment4, jsx as jsx13, jsxs as jsxs5 } from "react/jsx-runtime";
16048
16191
  function ToolbarActionTooltip({
16049
16192
  label,
16050
16193
  side = "bottom",
@@ -16052,10 +16195,10 @@ function ToolbarActionTooltip({
16052
16195
  buttonProps,
16053
16196
  children
16054
16197
  }) {
16055
- const button = /* @__PURE__ */ jsx12(CustomToolbarButton, { type: "button", "aria-label": label, disabled, ...buttonProps, children });
16056
- return /* @__PURE__ */ jsxs4(Tooltip, { children: [
16057
- /* @__PURE__ */ jsx12(TooltipTrigger, { asChild: true, children: disabled ? /* @__PURE__ */ jsx12("span", { className: "inline-flex", children: button }) : button }),
16058
- /* @__PURE__ */ jsx12(TooltipContent, { side, sideOffset: 9, children: label })
16198
+ const button = /* @__PURE__ */ jsx13(CustomToolbarButton, { type: "button", "aria-label": label, disabled, ...buttonProps, children });
16199
+ return /* @__PURE__ */ jsxs5(Tooltip, { children: [
16200
+ /* @__PURE__ */ jsx13(TooltipTrigger, { asChild: true, children: disabled ? /* @__PURE__ */ jsx13("span", { className: "inline-flex", children: button }) : button }),
16201
+ /* @__PURE__ */ jsx13(TooltipContent, { side, sideOffset: 9, children: label })
16059
16202
  ] });
16060
16203
  }
16061
16204
  function ItemActionToolbar({
@@ -16086,9 +16229,9 @@ function ItemActionToolbar({
16086
16229
  const showDropdownToggle = dropdownOpen !== null && dropdownOpen !== void 0;
16087
16230
  const showHeadingToggle = headingVisible !== null && headingVisible !== void 0;
16088
16231
  const headingTooltip = headingVisible ? "Hide heading" : "Show heading";
16089
- return /* @__PURE__ */ jsx12(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxs4(CustomToolbar, { children: [
16090
- showDropdownToggle ? /* @__PURE__ */ jsxs4(Fragment3, { children: [
16091
- /* @__PURE__ */ jsxs4(
16232
+ return /* @__PURE__ */ jsx13(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxs5(CustomToolbar, { children: [
16233
+ showDropdownToggle ? /* @__PURE__ */ jsxs5(Fragment4, { children: [
16234
+ /* @__PURE__ */ jsxs5(
16092
16235
  ToggleGroup,
16093
16236
  {
16094
16237
  value: dropdownOpen ? "open" : "closed",
@@ -16100,7 +16243,7 @@ function ItemActionToolbar({
16100
16243
  e.stopPropagation();
16101
16244
  },
16102
16245
  children: [
16103
- /* @__PURE__ */ jsx12(
16246
+ /* @__PURE__ */ jsx13(
16104
16247
  ToggleGroupItem,
16105
16248
  {
16106
16249
  value: "closed",
@@ -16115,7 +16258,7 @@ function ItemActionToolbar({
16115
16258
  children: "Closed"
16116
16259
  }
16117
16260
  ),
16118
- /* @__PURE__ */ jsx12(
16261
+ /* @__PURE__ */ jsx13(
16119
16262
  ToggleGroupItem,
16120
16263
  {
16121
16264
  value: "open",
@@ -16133,9 +16276,9 @@ function ItemActionToolbar({
16133
16276
  ]
16134
16277
  }
16135
16278
  ),
16136
- /* @__PURE__ */ jsx12(CustomToolbarDivider, {})
16279
+ /* @__PURE__ */ jsx13(CustomToolbarDivider, {})
16137
16280
  ] }) : null,
16138
- showEditLink ? /* @__PURE__ */ jsx12(
16281
+ showEditLink ? /* @__PURE__ */ jsx13(
16139
16282
  ToolbarActionTooltip,
16140
16283
  {
16141
16284
  label: "Edit link",
@@ -16153,10 +16296,10 @@ function ItemActionToolbar({
16153
16296
  e.stopPropagation();
16154
16297
  }
16155
16298
  },
16156
- children: /* @__PURE__ */ jsx12(Link, { className: "size-4 shrink-0", "aria-hidden": true })
16299
+ children: /* @__PURE__ */ jsx13(Link, { className: "size-4 shrink-0", "aria-hidden": true })
16157
16300
  }
16158
16301
  ) : null,
16159
- showStyle ? /* @__PURE__ */ jsx12(
16302
+ showStyle ? /* @__PURE__ */ jsx13(
16160
16303
  ToolbarActionTooltip,
16161
16304
  {
16162
16305
  label: "Style",
@@ -16177,10 +16320,10 @@ function ItemActionToolbar({
16177
16320
  e.stopPropagation();
16178
16321
  }
16179
16322
  },
16180
- children: /* @__PURE__ */ jsx12(Brush, { className: "size-4 shrink-0", "aria-hidden": true })
16323
+ children: /* @__PURE__ */ jsx13(Brush, { className: "size-4 shrink-0", "aria-hidden": true })
16181
16324
  }
16182
16325
  ) : null,
16183
- showAddItem ? /* @__PURE__ */ jsx12(
16326
+ showAddItem ? /* @__PURE__ */ jsx13(
16184
16327
  ToolbarActionTooltip,
16185
16328
  {
16186
16329
  label: "Add item",
@@ -16194,10 +16337,10 @@ function ItemActionToolbar({
16194
16337
  onAddItem?.();
16195
16338
  }
16196
16339
  },
16197
- children: /* @__PURE__ */ jsx12(Plus, { className: "size-4 shrink-0", "aria-hidden": true })
16340
+ children: /* @__PURE__ */ jsx13(Plus, { className: "size-4 shrink-0", "aria-hidden": true })
16198
16341
  }
16199
16342
  ) : null,
16200
- showHeadingToggle ? /* @__PURE__ */ jsx12(
16343
+ showHeadingToggle ? /* @__PURE__ */ jsx13(
16201
16344
  ToolbarActionTooltip,
16202
16345
  {
16203
16346
  label: headingTooltip,
@@ -16214,12 +16357,12 @@ function ItemActionToolbar({
16214
16357
  onHeadingVisibleChange?.(!headingVisible);
16215
16358
  }
16216
16359
  },
16217
- children: /* @__PURE__ */ jsx12(Heading, { className: "size-4 shrink-0", "aria-hidden": true })
16360
+ children: /* @__PURE__ */ jsx13(Heading, { className: "size-4 shrink-0", "aria-hidden": true })
16218
16361
  }
16219
16362
  ) : null,
16220
- showMore ? /* @__PURE__ */ jsxs4(DropdownMenu, { open: moreOpen, onOpenChange: setMoreOpen, children: [
16221
- /* @__PURE__ */ jsxs4(Tooltip, { open: moreOpen ? false : void 0, children: [
16222
- /* @__PURE__ */ jsx12(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx12(DropdownMenuTrigger, { asChild: true, disabled: moreDisabled, children: /* @__PURE__ */ jsx12(
16363
+ showMore ? /* @__PURE__ */ jsxs5(DropdownMenu, { open: moreOpen, onOpenChange: setMoreOpen, children: [
16364
+ /* @__PURE__ */ jsxs5(Tooltip, { open: moreOpen ? false : void 0, children: [
16365
+ /* @__PURE__ */ jsx13(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx13(DropdownMenuTrigger, { asChild: true, disabled: moreDisabled, children: /* @__PURE__ */ jsx13(
16223
16366
  CustomToolbarButton,
16224
16367
  {
16225
16368
  type: "button",
@@ -16229,12 +16372,12 @@ function ItemActionToolbar({
16229
16372
  e.preventDefault();
16230
16373
  e.stopPropagation();
16231
16374
  },
16232
- children: /* @__PURE__ */ jsx12(MoreHorizontal, { className: "size-4 shrink-0", "aria-hidden": true })
16375
+ children: /* @__PURE__ */ jsx13(MoreHorizontal, { className: "size-4 shrink-0", "aria-hidden": true })
16233
16376
  }
16234
16377
  ) }) }),
16235
- /* @__PURE__ */ jsx12(TooltipContent, { side: tooltipSide, sideOffset: 9, children: "More" })
16378
+ /* @__PURE__ */ jsx13(TooltipContent, { side: tooltipSide, sideOffset: 9, children: "More" })
16236
16379
  ] }),
16237
- /* @__PURE__ */ jsxs4(
16380
+ /* @__PURE__ */ jsxs5(
16238
16381
  DropdownMenuContent,
16239
16382
  {
16240
16383
  align: "end",
@@ -16245,39 +16388,39 @@ function ItemActionToolbar({
16245
16388
  e.stopPropagation();
16246
16389
  },
16247
16390
  children: [
16248
- /* @__PURE__ */ jsxs4(DropdownMenuGroup, { children: [
16249
- /* @__PURE__ */ jsxs4(
16391
+ /* @__PURE__ */ jsxs5(DropdownMenuGroup, { children: [
16392
+ /* @__PURE__ */ jsxs5(
16250
16393
  DropdownMenuItem,
16251
16394
  {
16252
16395
  disabled: selectParentDisabled,
16253
16396
  onSelect: () => onSelectParent?.(),
16254
16397
  children: [
16255
- /* @__PURE__ */ jsx12(CornerLeftUp, { size: 12, "aria-hidden": true }),
16398
+ /* @__PURE__ */ jsx13(CornerLeftUp, { size: 12, "aria-hidden": true }),
16256
16399
  "Select parent"
16257
16400
  ]
16258
16401
  }
16259
16402
  ),
16260
- /* @__PURE__ */ jsxs4(
16403
+ /* @__PURE__ */ jsxs5(
16261
16404
  DropdownMenuItem,
16262
16405
  {
16263
16406
  disabled: duplicateDisabled,
16264
16407
  onSelect: () => onDuplicate?.(),
16265
16408
  children: [
16266
- /* @__PURE__ */ jsx12(Copy, { size: 12, "aria-hidden": true }),
16409
+ /* @__PURE__ */ jsx13(Copy, { size: 12, "aria-hidden": true }),
16267
16410
  "Duplicate"
16268
16411
  ]
16269
16412
  }
16270
16413
  )
16271
16414
  ] }),
16272
- /* @__PURE__ */ jsx12(DropdownMenuSeparator, {}),
16273
- /* @__PURE__ */ jsx12(DropdownMenuGroup, { children: /* @__PURE__ */ jsxs4(
16415
+ /* @__PURE__ */ jsx13(DropdownMenuSeparator, {}),
16416
+ /* @__PURE__ */ jsx13(DropdownMenuGroup, { children: /* @__PURE__ */ jsxs5(
16274
16417
  DropdownMenuItem,
16275
16418
  {
16276
16419
  variant: "destructive",
16277
16420
  disabled: deleteDisabled,
16278
16421
  onSelect: () => onDelete?.(),
16279
16422
  children: [
16280
- /* @__PURE__ */ jsx12(Trash2, { size: 15, "aria-hidden": true }),
16423
+ /* @__PURE__ */ jsx13(Trash2, { size: 15, "aria-hidden": true }),
16281
16424
  "Delete"
16282
16425
  ]
16283
16426
  }
@@ -16292,7 +16435,7 @@ function ItemActionToolbar({
16292
16435
  // src/ui/item-interaction-layer.tsx
16293
16436
  import { useLayoutEffect as useLayoutEffect2, useRef as useRef2, useState as useState5 } from "react";
16294
16437
  import { createPortal } from "react-dom";
16295
- import { jsx as jsx13, jsxs as jsxs5 } from "react/jsx-runtime";
16438
+ import { jsx as jsx14, jsxs as jsxs6 } from "react/jsx-runtime";
16296
16439
  var PRIMARY = "var(--ohw-primary, #0885FE)";
16297
16440
  var CHROME_RADIUS = 6;
16298
16441
  var FOCUS_RING = `0 0 0 4px color-mix(in srgb, ${PRIMARY} 12%, transparent)`;
@@ -16386,7 +16529,7 @@ function ClampedToolbarSlot({
16386
16529
  window.removeEventListener("resize", clamp);
16387
16530
  };
16388
16531
  }, [placement, children, align]);
16389
- return /* @__PURE__ */ jsx13(
16532
+ return /* @__PURE__ */ jsx14(
16390
16533
  "div",
16391
16534
  {
16392
16535
  ref: slotRef,
@@ -16461,7 +16604,7 @@ function DetachedBelowToolbarSlot({
16461
16604
  }, [centerX, belowRect, belowEl, children]);
16462
16605
  if (!portalTarget) return null;
16463
16606
  return createPortal(
16464
- /* @__PURE__ */ jsx13(
16607
+ /* @__PURE__ */ jsx14(
16465
16608
  "div",
16466
16609
  {
16467
16610
  ref: slotRef,
@@ -16519,7 +16662,7 @@ function ItemInteractionLayer({
16519
16662
  if (typeof elRef === "function") elRef(node);
16520
16663
  else if (elRef) elRef.current = node;
16521
16664
  };
16522
- return /* @__PURE__ */ jsxs5(
16665
+ return /* @__PURE__ */ jsxs6(
16523
16666
  "div",
16524
16667
  {
16525
16668
  ref: setRootRef,
@@ -16536,7 +16679,7 @@ function ItemInteractionLayer({
16536
16679
  display: hidden ? "none" : "block"
16537
16680
  },
16538
16681
  children: [
16539
- /* @__PURE__ */ jsx13(
16682
+ /* @__PURE__ */ jsx14(
16540
16683
  "div",
16541
16684
  {
16542
16685
  "aria-hidden": true,
@@ -16544,7 +16687,7 @@ function ItemInteractionLayer({
16544
16687
  style: { ...getChromeStyle(state), borderRadius: CHROME_RADIUS }
16545
16688
  }
16546
16689
  ),
16547
- itemDragEnabled && /* @__PURE__ */ jsx13(
16690
+ itemDragEnabled && /* @__PURE__ */ jsx14(
16548
16691
  "div",
16549
16692
  {
16550
16693
  "data-ohw-item-drag-surface": "",
@@ -16561,14 +16704,14 @@ function ItemInteractionLayer({
16561
16704
  }
16562
16705
  }
16563
16706
  ),
16564
- showDragHandle && /* @__PURE__ */ jsx13(
16707
+ showDragHandle && /* @__PURE__ */ jsx14(
16565
16708
  "div",
16566
16709
  {
16567
16710
  "data-ohw-drag-handle-container": "",
16568
16711
  className: "pointer-events-auto absolute left-0 top-1/2 z-10 -translate-x-[calc(100%+7px)] -translate-y-1/2",
16569
16712
  style: isDragging ? { opacity: 0 } : void 0,
16570
16713
  "aria-hidden": isDragging || void 0,
16571
- children: /* @__PURE__ */ jsx13(
16714
+ children: /* @__PURE__ */ jsx14(
16572
16715
  DragHandle,
16573
16716
  {
16574
16717
  draggable: !dragDisabled,
@@ -16598,9 +16741,9 @@ function ItemInteractionLayer({
16598
16741
  )
16599
16742
  }
16600
16743
  ),
16601
- showToolbar && state === "active-top" && /* @__PURE__ */ jsx13(ClampedToolbarSlot, { align: toolbarAlign, placement: "top", children: toolbar }),
16602
- showToolbar && state === "active-bottom" && !useDetachedBelowToolbar && /* @__PURE__ */ jsx13(ClampedToolbarSlot, { align: toolbarAlign, placement: "bottom", children: toolbar }),
16603
- useDetachedBelowToolbar && toolbarBelowRect ? /* @__PURE__ */ jsx13(
16744
+ showToolbar && state === "active-top" && /* @__PURE__ */ jsx14(ClampedToolbarSlot, { align: toolbarAlign, placement: "top", children: toolbar }),
16745
+ showToolbar && state === "active-bottom" && !useDetachedBelowToolbar && /* @__PURE__ */ jsx14(ClampedToolbarSlot, { align: toolbarAlign, placement: "bottom", children: toolbar }),
16746
+ useDetachedBelowToolbar && toolbarBelowRect ? /* @__PURE__ */ jsx14(
16604
16747
  DetachedBelowToolbarSlot,
16605
16748
  {
16606
16749
  centerX: rect.left + rect.width / 2,
@@ -17135,7 +17278,7 @@ function reconcileFieldsFromContent(form, content) {
17135
17278
 
17136
17279
  // src/ui/form-field-toolbar.tsx
17137
17280
  import { AtSign, Asterisk, ChevronDown as ChevronDown2, Copy as Copy2, MoreHorizontal as MoreHorizontal2, Phone, TextQuote, Trash2 as Trash22, Type } from "lucide-react";
17138
- import { jsx as jsx14, jsxs as jsxs6 } from "react/jsx-runtime";
17281
+ import { jsx as jsx15, jsxs as jsxs7 } from "react/jsx-runtime";
17139
17282
  var TYPE_ICONS = {
17140
17283
  "short-text": Type,
17141
17284
  "long-text": TextQuote,
@@ -17152,35 +17295,35 @@ function FormFieldToolbar({
17152
17295
  }) {
17153
17296
  const TypeIcon = TYPE_ICONS[type];
17154
17297
  const typeLabel = FIELD_TYPES.find((entry) => entry.type === type)?.label ?? "Short text";
17155
- return /* @__PURE__ */ jsxs6(
17298
+ return /* @__PURE__ */ jsxs7(
17156
17299
  "div",
17157
17300
  {
17158
17301
  "data-ohw-field-toolbar": "",
17159
17302
  className: "pointer-events-auto flex items-center gap-0.5 whitespace-nowrap rounded-lg border border-border bg-background p-1 shadow-md",
17160
17303
  children: [
17161
- /* @__PURE__ */ jsxs6(DropdownMenu, { children: [
17162
- /* @__PURE__ */ jsx14(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs6(
17304
+ /* @__PURE__ */ jsxs7(DropdownMenu, { children: [
17305
+ /* @__PURE__ */ jsx15(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs7(
17163
17306
  "button",
17164
17307
  {
17165
17308
  type: "button",
17166
17309
  className: "flex h-7 items-center gap-1.5 whitespace-nowrap rounded-md px-2 text-[13px] font-medium text-foreground transition-colors hover:bg-muted/70",
17167
17310
  "data-ohw-field-type-trigger": "",
17168
17311
  children: [
17169
- /* @__PURE__ */ jsx14(TypeIcon, { size: 14, strokeWidth: 1.75, "aria-hidden": true }),
17312
+ /* @__PURE__ */ jsx15(TypeIcon, { size: 14, strokeWidth: 1.75, "aria-hidden": true }),
17170
17313
  typeLabel,
17171
- /* @__PURE__ */ jsx14(ChevronDown2, { size: 13, className: "text-muted-foreground", "aria-hidden": true })
17314
+ /* @__PURE__ */ jsx15(ChevronDown2, { size: 13, className: "text-muted-foreground", "aria-hidden": true })
17172
17315
  ]
17173
17316
  }
17174
17317
  ) }),
17175
- /* @__PURE__ */ jsx14(DropdownMenuContent, { align: "start", sideOffset: 8, className: "min-w-47.5 p-1", children: FIELD_TYPES.map((entry) => {
17318
+ /* @__PURE__ */ jsx15(DropdownMenuContent, { align: "start", sideOffset: 8, className: "min-w-47.5 p-1", children: FIELD_TYPES.map((entry) => {
17176
17319
  const Icon = TYPE_ICONS[entry.type];
17177
- return /* @__PURE__ */ jsxs6(
17320
+ return /* @__PURE__ */ jsxs7(
17178
17321
  DropdownMenuItem,
17179
17322
  {
17180
17323
  onSelect: () => onTypeChange(entry.type),
17181
17324
  className: "rounded-md py-2 text-[13px] " + (entry.type === type ? "bg-bridge-primary/10" : ""),
17182
17325
  children: [
17183
- /* @__PURE__ */ jsx14(Icon, { size: 14, strokeWidth: 1.75, className: "shrink-0", "aria-hidden": true }),
17326
+ /* @__PURE__ */ jsx15(Icon, { size: 14, strokeWidth: 1.75, className: "shrink-0", "aria-hidden": true }),
17184
17327
  entry.label
17185
17328
  ]
17186
17329
  },
@@ -17188,8 +17331,8 @@ function FormFieldToolbar({
17188
17331
  );
17189
17332
  }) })
17190
17333
  ] }),
17191
- /* @__PURE__ */ jsx14("div", { className: "mx-0.5 h-5 w-px bg-border" }),
17192
- /* @__PURE__ */ jsxs6(
17334
+ /* @__PURE__ */ jsx15("div", { className: "mx-0.5 h-5 w-px bg-border" }),
17335
+ /* @__PURE__ */ jsxs7(
17193
17336
  "button",
17194
17337
  {
17195
17338
  type: "button",
@@ -17198,30 +17341,30 @@ function FormFieldToolbar({
17198
17341
  className: "flex h-7 items-center gap-1.5 whitespace-nowrap rounded-md px-2 text-[13px] font-medium transition-colors " + (required ? "bg-bridge-primary/10 text-bridge-primary" : "text-foreground hover:bg-muted/70"),
17199
17342
  "data-ohw-field-required-toggle": "",
17200
17343
  children: [
17201
- /* @__PURE__ */ jsx14(Asterisk, { size: 14, strokeWidth: 2, "aria-hidden": true }),
17344
+ /* @__PURE__ */ jsx15(Asterisk, { size: 14, strokeWidth: 2, "aria-hidden": true }),
17202
17345
  "Required"
17203
17346
  ]
17204
17347
  }
17205
17348
  ),
17206
- /* @__PURE__ */ jsx14("div", { className: "mx-0.5 h-5 w-px bg-border" }),
17207
- /* @__PURE__ */ jsxs6(DropdownMenu, { children: [
17208
- /* @__PURE__ */ jsx14(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx14(
17349
+ /* @__PURE__ */ jsx15("div", { className: "mx-0.5 h-5 w-px bg-border" }),
17350
+ /* @__PURE__ */ jsxs7(DropdownMenu, { children: [
17351
+ /* @__PURE__ */ jsx15(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsx15(
17209
17352
  "button",
17210
17353
  {
17211
17354
  type: "button",
17212
17355
  title: "More",
17213
17356
  "aria-label": "More",
17214
17357
  className: "flex h-7 w-7 items-center justify-center rounded-md text-foreground transition-colors hover:bg-muted/70",
17215
- children: /* @__PURE__ */ jsx14(MoreHorizontal2, { size: 15, "aria-hidden": true })
17358
+ children: /* @__PURE__ */ jsx15(MoreHorizontal2, { size: 15, "aria-hidden": true })
17216
17359
  }
17217
17360
  ) }),
17218
- /* @__PURE__ */ jsxs6(DropdownMenuContent, { align: "start", sideOffset: 8, className: "min-w-42.5 p-1", children: [
17219
- /* @__PURE__ */ jsxs6(DropdownMenuItem, { onSelect: onDuplicate, className: "rounded-md py-2 text-[13px]", children: [
17220
- /* @__PURE__ */ jsx14(Copy2, { size: 14, strokeWidth: 1.75, className: "shrink-0", "aria-hidden": true }),
17361
+ /* @__PURE__ */ jsxs7(DropdownMenuContent, { align: "start", sideOffset: 8, className: "min-w-42.5 p-1", children: [
17362
+ /* @__PURE__ */ jsxs7(DropdownMenuItem, { onSelect: onDuplicate, className: "rounded-md py-2 text-[13px]", children: [
17363
+ /* @__PURE__ */ jsx15(Copy2, { size: 14, strokeWidth: 1.75, className: "shrink-0", "aria-hidden": true }),
17221
17364
  "Duplicate"
17222
17365
  ] }),
17223
- /* @__PURE__ */ jsxs6(DropdownMenuItem, { variant: "destructive", onSelect: onDelete, className: "rounded-md py-2 text-[13px]", children: [
17224
- /* @__PURE__ */ jsx14(Trash22, { size: 14, strokeWidth: 1.75, className: "shrink-0", "aria-hidden": true }),
17366
+ /* @__PURE__ */ jsxs7(DropdownMenuItem, { variant: "destructive", onSelect: onDelete, className: "rounded-md py-2 text-[13px]", children: [
17367
+ /* @__PURE__ */ jsx15(Trash22, { size: 14, strokeWidth: 1.75, className: "shrink-0", "aria-hidden": true }),
17225
17368
  "Delete"
17226
17369
  ] })
17227
17370
  ] })
@@ -17231,21 +17374,21 @@ function FormFieldToolbar({
17231
17374
  );
17232
17375
  }
17233
17376
  function FieldTypePicker({ onPick }) {
17234
- return /* @__PURE__ */ jsx14(
17377
+ return /* @__PURE__ */ jsx15(
17235
17378
  "div",
17236
17379
  {
17237
17380
  "data-ohw-field-type-picker": "",
17238
17381
  className: "pointer-events-auto grid w-[280px] grid-cols-2 gap-2 rounded-xl border border-border bg-background p-3 shadow-lg",
17239
17382
  children: FIELD_TYPES.map((entry) => {
17240
17383
  const Icon = TYPE_ICONS[entry.type];
17241
- return /* @__PURE__ */ jsxs6(
17384
+ return /* @__PURE__ */ jsxs7(
17242
17385
  "button",
17243
17386
  {
17244
17387
  type: "button",
17245
17388
  onClick: () => onPick(entry.type),
17246
17389
  className: "flex h-[76px] flex-col items-center justify-center gap-2 rounded-xl border border-border text-[15px] font-medium text-foreground transition-colors hover:border-bridge-primary hover:bg-bridge-primary/5",
17247
17390
  children: [
17248
- /* @__PURE__ */ jsx14(Icon, { size: 26, strokeWidth: 1.5, "aria-hidden": true }),
17391
+ /* @__PURE__ */ jsx15(Icon, { size: 26, strokeWidth: 1.5, "aria-hidden": true }),
17249
17392
  entry.label
17250
17393
  ]
17251
17394
  },
@@ -17263,7 +17406,7 @@ import { Film, ImageIcon, Pause, Play as Play2, Volume2, VolumeX } from "lucide-
17263
17406
  // src/ui/button.tsx
17264
17407
  import * as React7 from "react";
17265
17408
  import { Slot } from "radix-ui";
17266
- import { jsx as jsx15 } from "react/jsx-runtime";
17409
+ import { jsx as jsx16 } from "react/jsx-runtime";
17267
17410
  var buttonVariants = cva(
17268
17411
  "inline-flex items-center justify-center gap-1 whitespace-nowrap rounded-md text-sm font-medium transition-colors outline-none disabled:pointer-events-none disabled:opacity-50 min-w-[80px] px-3 py-2",
17269
17412
  {
@@ -17287,7 +17430,7 @@ var buttonVariants = cva(
17287
17430
  var Button = React7.forwardRef(
17288
17431
  ({ className, variant, size, asChild = false, ...props }, ref) => {
17289
17432
  const Comp = asChild ? Slot.Root : "button";
17290
- return /* @__PURE__ */ jsx15(
17433
+ return /* @__PURE__ */ jsx16(
17291
17434
  Comp,
17292
17435
  {
17293
17436
  ref,
@@ -17321,7 +17464,7 @@ var MEDIA_SKELETON_CSS = `
17321
17464
  `;
17322
17465
 
17323
17466
  // src/ui/MediaOverlay.tsx
17324
- import { Fragment as Fragment4, jsx as jsx16, jsxs as jsxs7 } from "react/jsx-runtime";
17467
+ import { Fragment as Fragment5, jsx as jsx17, jsxs as jsxs8 } from "react/jsx-runtime";
17325
17468
  var VIDEO_SETTINGS_BAR_INSET = 8;
17326
17469
  var OVERLAY_BUTTON_STYLE = {
17327
17470
  pointerEvents: "auto",
@@ -17387,7 +17530,7 @@ function MediaOverlay({
17387
17530
  return () => anim.cancel();
17388
17531
  }, [isUploading, fadingOut, onFadeOutComplete, hover.key]);
17389
17532
  if (isUploading) {
17390
- return /* @__PURE__ */ jsx16(
17533
+ return /* @__PURE__ */ jsx17(
17391
17534
  "div",
17392
17535
  {
17393
17536
  ref: skeletonRef,
@@ -17396,11 +17539,11 @@ function MediaOverlay({
17396
17539
  "data-ohw-media-skeleton": "",
17397
17540
  "aria-hidden": true,
17398
17541
  style: { ...box, pointerEvents: "none" },
17399
- children: /* @__PURE__ */ jsx16("style", { children: MEDIA_SKELETON_CSS })
17542
+ children: /* @__PURE__ */ jsx17("style", { children: MEDIA_SKELETON_CSS })
17400
17543
  }
17401
17544
  );
17402
17545
  }
17403
- const settingsBar = isVideo && !hover.isDragOver && showChrome ? /* @__PURE__ */ jsxs7(
17546
+ const settingsBar = isVideo && !hover.isDragOver && showChrome ? /* @__PURE__ */ jsxs8(
17404
17547
  "div",
17405
17548
  {
17406
17549
  "data-ohw-bridge": "",
@@ -17416,7 +17559,7 @@ function MediaOverlay({
17416
17559
  },
17417
17560
  onClick: (e) => e.stopPropagation(),
17418
17561
  children: [
17419
- /* @__PURE__ */ jsx16(
17562
+ /* @__PURE__ */ jsx17(
17420
17563
  Button,
17421
17564
  {
17422
17565
  "data-ohw-media-overlay": "",
@@ -17431,10 +17574,10 @@ function MediaOverlay({
17431
17574
  e.stopPropagation();
17432
17575
  onVideoSettingsChange?.(hover.key, { autoplay: !autoplay });
17433
17576
  },
17434
- children: autoplay ? /* @__PURE__ */ jsx16(Pause, { size: 14 }) : /* @__PURE__ */ jsx16(Play2, { size: 14 })
17577
+ children: autoplay ? /* @__PURE__ */ jsx17(Pause, { size: 14 }) : /* @__PURE__ */ jsx17(Play2, { size: 14 })
17435
17578
  }
17436
17579
  ),
17437
- /* @__PURE__ */ jsx16(
17580
+ /* @__PURE__ */ jsx17(
17438
17581
  Button,
17439
17582
  {
17440
17583
  "data-ohw-media-overlay": "",
@@ -17449,15 +17592,15 @@ function MediaOverlay({
17449
17592
  e.stopPropagation();
17450
17593
  onVideoSettingsChange?.(hover.key, { muted: !muted });
17451
17594
  },
17452
- children: muted ? /* @__PURE__ */ jsx16(VolumeX, { size: 14 }) : /* @__PURE__ */ jsx16(Volume2, { size: 14 })
17595
+ children: muted ? /* @__PURE__ */ jsx17(VolumeX, { size: 14 }) : /* @__PURE__ */ jsx17(Volume2, { size: 14 })
17453
17596
  }
17454
17597
  )
17455
17598
  ]
17456
17599
  }
17457
17600
  ) : null;
17458
- return /* @__PURE__ */ jsxs7(Fragment4, { children: [
17601
+ return /* @__PURE__ */ jsxs8(Fragment5, { children: [
17459
17602
  settingsBar,
17460
- /* @__PURE__ */ jsxs7(
17603
+ /* @__PURE__ */ jsxs8(
17461
17604
  "div",
17462
17605
  {
17463
17606
  "data-ohw-bridge": "",
@@ -17477,7 +17620,7 @@ function MediaOverlay({
17477
17620
  },
17478
17621
  onClick: () => onSelect && !selected ? onSelect(hover.key) : onReplace(hover.key),
17479
17622
  children: [
17480
- /* @__PURE__ */ jsxs7(
17623
+ /* @__PURE__ */ jsxs8(
17481
17624
  Button,
17482
17625
  {
17483
17626
  ref: probeRef,
@@ -17495,12 +17638,12 @@ function MediaOverlay({
17495
17638
  pointerEvents: "none"
17496
17639
  },
17497
17640
  children: [
17498
- isVideo ? /* @__PURE__ */ jsx16(Film, { size: 14 }) : /* @__PURE__ */ jsx16(ImageIcon, { size: 14 }),
17641
+ isVideo ? /* @__PURE__ */ jsx17(Film, { size: 14 }) : /* @__PURE__ */ jsx17(ImageIcon, { size: 14 }),
17499
17642
  isVideo ? "Replace video" : "Replace image"
17500
17643
  ]
17501
17644
  }
17502
17645
  ),
17503
- replaceMode === "none" || cueOnly ? null : /* @__PURE__ */ jsxs7(
17646
+ replaceMode === "none" || cueOnly ? null : /* @__PURE__ */ jsxs8(
17504
17647
  Button,
17505
17648
  {
17506
17649
  "data-ohw-media-overlay": "",
@@ -17528,7 +17671,7 @@ function MediaOverlay({
17528
17671
  onReplace(hover.key);
17529
17672
  },
17530
17673
  children: [
17531
- isVideo ? /* @__PURE__ */ jsx16(Film, { size: 14 }) : /* @__PURE__ */ jsx16(ImageIcon, { size: 14 }),
17674
+ isVideo ? /* @__PURE__ */ jsx17(Film, { size: 14 }) : /* @__PURE__ */ jsx17(ImageIcon, { size: 14 }),
17532
17675
  replaceMode === "full" ? isVideo ? "Replace video" : hover.elementType === "bg-image" ? "Replace background" : "Replace image" : null
17533
17676
  ]
17534
17677
  }
@@ -17541,7 +17684,7 @@ function MediaOverlay({
17541
17684
 
17542
17685
  // src/ui/CarouselOverlay.tsx
17543
17686
  import { GalleryHorizontal } from "lucide-react";
17544
- import { jsx as jsx17, jsxs as jsxs8 } from "react/jsx-runtime";
17687
+ import { jsx as jsx18, jsxs as jsxs9 } from "react/jsx-runtime";
17545
17688
  var OVERLAY_BUTTON_STYLE2 = {
17546
17689
  pointerEvents: "auto",
17547
17690
  fontFamily: "Inter, sans-serif",
@@ -17554,7 +17697,7 @@ function CarouselOverlay({
17554
17697
  cueOnly = false
17555
17698
  }) {
17556
17699
  const { rect } = hover;
17557
- return /* @__PURE__ */ jsx17(
17700
+ return /* @__PURE__ */ jsx18(
17558
17701
  "div",
17559
17702
  {
17560
17703
  "data-ohw-bridge": "",
@@ -17572,7 +17715,7 @@ function CarouselOverlay({
17572
17715
  background: "color-mix(in srgb, var(--color-bridge-primary) 20%, transparent)"
17573
17716
  },
17574
17717
  onClick: () => onEdit(hover.key),
17575
- children: cueOnly ? null : /* @__PURE__ */ jsxs8(
17718
+ children: cueOnly ? null : /* @__PURE__ */ jsxs9(
17576
17719
  Button,
17577
17720
  {
17578
17721
  "data-ohw-carousel-overlay": "",
@@ -17586,7 +17729,7 @@ function CarouselOverlay({
17586
17729
  onEdit(hover.key);
17587
17730
  },
17588
17731
  children: [
17589
- /* @__PURE__ */ jsx17(GalleryHorizontal, { size: 14 }),
17732
+ /* @__PURE__ */ jsx18(GalleryHorizontal, { size: 14 }),
17590
17733
  "Edit gallery"
17591
17734
  ]
17592
17735
  }
@@ -17598,7 +17741,7 @@ function CarouselOverlay({
17598
17741
  // src/ui/ai-section/AiSectionOverlay.tsx
17599
17742
  import { useCallback as useCallback2, useEffect as useEffect5, useRef as useRef4, useState as useState7 } from "react";
17600
17743
  import { Check, X } from "lucide-react";
17601
- import { Fragment as Fragment5, jsx as jsx18, jsxs as jsxs9 } from "react/jsx-runtime";
17744
+ import { Fragment as Fragment6, jsx as jsx19, jsxs as jsxs10 } from "react/jsx-runtime";
17602
17745
  var findSectionElement = findByInstanceId;
17603
17746
  function readRect(instanceId) {
17604
17747
  const el = findSectionElement(instanceId);
@@ -17712,8 +17855,8 @@ function ReviewButton({
17712
17855
  color
17713
17856
  }) {
17714
17857
  const [hover, setHover] = useState7(false);
17715
- return /* @__PURE__ */ jsxs9("div", { style: { position: "relative" }, children: [
17716
- /* @__PURE__ */ jsx18(
17858
+ return /* @__PURE__ */ jsxs10("div", { style: { position: "relative" }, children: [
17859
+ /* @__PURE__ */ jsx19(
17717
17860
  "button",
17718
17861
  {
17719
17862
  type: "button",
@@ -17737,7 +17880,7 @@ function ReviewButton({
17737
17880
  children
17738
17881
  }
17739
17882
  ),
17740
- hover && /* @__PURE__ */ jsx18(
17883
+ hover && /* @__PURE__ */ jsx19(
17741
17884
  "div",
17742
17885
  {
17743
17886
  style: {
@@ -17938,8 +18081,8 @@ function AiSectionOverlay({
17938
18081
  isLast
17939
18082
  });
17940
18083
  }, [activeSelectionId, selectionRect, postToParent2]);
17941
- return /* @__PURE__ */ jsxs9(Fragment5, { children: [
17942
- hoverRect && /* @__PURE__ */ jsx18(
18084
+ return /* @__PURE__ */ jsxs10(Fragment6, { children: [
18085
+ hoverRect && /* @__PURE__ */ jsx19(
17943
18086
  "div",
17944
18087
  {
17945
18088
  "data-ohw-ai-section-hover": "",
@@ -17957,7 +18100,7 @@ function AiSectionOverlay({
17957
18100
  }
17958
18101
  }
17959
18102
  ),
17960
- showSelectionBorder && selectionRect && /* @__PURE__ */ jsx18(
18103
+ showSelectionBorder && selectionRect && /* @__PURE__ */ jsx19(
17961
18104
  "div",
17962
18105
  {
17963
18106
  "data-ohw-ai-section-selected": "",
@@ -17975,8 +18118,8 @@ function AiSectionOverlay({
17975
18118
  }
17976
18119
  }
17977
18120
  ),
17978
- reviewRect && /* @__PURE__ */ jsxs9(Fragment5, { children: [
17979
- subtractRect(reviewRect, navToggleHole).map((r2, i) => /* @__PURE__ */ jsx18(
18121
+ reviewRect && /* @__PURE__ */ jsxs10(Fragment6, { children: [
18122
+ subtractRect(reviewRect, navToggleHole).map((r2, i) => /* @__PURE__ */ jsx19(
17980
18123
  "div",
17981
18124
  {
17982
18125
  "data-ohw-ai-review": "",
@@ -17996,7 +18139,7 @@ function AiSectionOverlay({
17996
18139
  },
17997
18140
  i
17998
18141
  )),
17999
- /* @__PURE__ */ jsx18(
18142
+ /* @__PURE__ */ jsx19(
18000
18143
  "div",
18001
18144
  {
18002
18145
  "aria-hidden": true,
@@ -18013,7 +18156,7 @@ function AiSectionOverlay({
18013
18156
  }
18014
18157
  }
18015
18158
  ),
18016
- !reviewButtonsHidden && /* @__PURE__ */ jsxs9(
18159
+ !reviewButtonsHidden && /* @__PURE__ */ jsxs10(
18017
18160
  "div",
18018
18161
  {
18019
18162
  style: {
@@ -18028,8 +18171,8 @@ function AiSectionOverlay({
18028
18171
  zIndex: 2147483201
18029
18172
  },
18030
18173
  children: [
18031
- /* @__PURE__ */ jsx18(ReviewButton, { label: "Accept", onClick: () => decide("accept"), background: PRIMARY2, color: "#ffffff", children: /* @__PURE__ */ jsx18(Check, { size: 16, strokeWidth: 2.5, "aria-hidden": true }) }),
18032
- /* @__PURE__ */ jsx18(ReviewButton, { label: "Discard", onClick: () => decide("discard"), background: "#EFF6FF", color: "#0c0a09", children: /* @__PURE__ */ jsx18(X, { size: 16, strokeWidth: 2, "aria-hidden": true }) })
18174
+ /* @__PURE__ */ jsx19(ReviewButton, { label: "Accept", onClick: () => decide("accept"), background: PRIMARY2, color: "#ffffff", children: /* @__PURE__ */ jsx19(Check, { size: 16, strokeWidth: 2.5, "aria-hidden": true }) }),
18175
+ /* @__PURE__ */ jsx19(ReviewButton, { label: "Discard", onClick: () => decide("discard"), background: "#EFF6FF", color: "#0c0a09", children: /* @__PURE__ */ jsx19(X, { size: 16, strokeWidth: 2, "aria-hidden": true }) })
18033
18176
  ]
18034
18177
  }
18035
18178
  )
@@ -18179,7 +18322,7 @@ function setMediaStripItemLink(tree, index, link) {
18179
18322
  }
18180
18323
 
18181
18324
  // src/ui/ai-section/AiMediaStripOverlay.tsx
18182
- import { Fragment as Fragment6, jsx as jsx19, jsxs as jsxs10 } from "react/jsx-runtime";
18325
+ import { Fragment as Fragment7, jsx as jsx20, jsxs as jsxs11 } from "react/jsx-runtime";
18183
18326
  var PRIMARY3 = "#0885FE";
18184
18327
  var OHW_BLUE = `var(--ohw-primary, ${PRIMARY3})`;
18185
18328
  var OHW_BLUE_DARK = `color-mix(in srgb, var(--ohw-primary, ${PRIMARY3}) 60%, #000000)`;
@@ -18267,7 +18410,7 @@ function Pill({
18267
18410
  disabled,
18268
18411
  active
18269
18412
  }) {
18270
- return /* @__PURE__ */ jsx19(
18413
+ return /* @__PURE__ */ jsx20(
18271
18414
  "button",
18272
18415
  {
18273
18416
  type: "button",
@@ -18298,7 +18441,7 @@ function Pill({
18298
18441
  function AltInput({ value, onCommit }) {
18299
18442
  const [draft, setDraft] = useState8(value);
18300
18443
  useEffect6(() => setDraft(value), [value]);
18301
- return /* @__PURE__ */ jsxs10(
18444
+ return /* @__PURE__ */ jsxs11(
18302
18445
  "div",
18303
18446
  {
18304
18447
  style: {
@@ -18314,7 +18457,7 @@ function AltInput({ value, onCommit }) {
18314
18457
  boxSizing: "border-box"
18315
18458
  },
18316
18459
  children: [
18317
- /* @__PURE__ */ jsx19(
18460
+ /* @__PURE__ */ jsx20(
18318
18461
  "span",
18319
18462
  {
18320
18463
  style: {
@@ -18328,7 +18471,7 @@ function AltInput({ value, onCommit }) {
18328
18471
  children: "Alt"
18329
18472
  }
18330
18473
  ),
18331
- /* @__PURE__ */ jsx19(
18474
+ /* @__PURE__ */ jsx20(
18332
18475
  "input",
18333
18476
  {
18334
18477
  type: "text",
@@ -18397,7 +18540,7 @@ function LinkInput({ value, onCommit }) {
18397
18540
  setInvalid(false);
18398
18541
  onCommit(next);
18399
18542
  };
18400
- return /* @__PURE__ */ jsxs10(
18543
+ return /* @__PURE__ */ jsxs11(
18401
18544
  "div",
18402
18545
  {
18403
18546
  style: {
@@ -18414,7 +18557,7 @@ function LinkInput({ value, onCommit }) {
18414
18557
  boxShadow: invalid ? "inset 0 0 0 1.5px #EF4444" : "none"
18415
18558
  },
18416
18559
  children: [
18417
- /* @__PURE__ */ jsx19(
18560
+ /* @__PURE__ */ jsx20(
18418
18561
  "span",
18419
18562
  {
18420
18563
  style: {
@@ -18428,7 +18571,7 @@ function LinkInput({ value, onCommit }) {
18428
18571
  children: "Link"
18429
18572
  }
18430
18573
  ),
18431
- /* @__PURE__ */ jsx19(
18574
+ /* @__PURE__ */ jsx20(
18432
18575
  "input",
18433
18576
  {
18434
18577
  type: "text",
@@ -18504,7 +18647,7 @@ function MediaStripToolbar({
18504
18647
  width: "100%",
18505
18648
  scrollbarWidth: "none"
18506
18649
  } : { display: "flex", gap: 6, flexWrap: "nowrap", justifyContent: "center" };
18507
- return /* @__PURE__ */ jsxs10(
18650
+ return /* @__PURE__ */ jsxs11(
18508
18651
  "div",
18509
18652
  {
18510
18653
  "data-ohw-bridge": "",
@@ -18524,38 +18667,38 @@ function MediaStripToolbar({
18524
18667
  maxWidth: isMobile ? "calc(100vw - 24px)" : "none"
18525
18668
  },
18526
18669
  children: [
18527
- /* @__PURE__ */ jsxs10("div", { style: rowStyle, children: [
18528
- VARIANTS.map((v) => /* @__PURE__ */ jsx19(Pill, { label: v.label, active: variant === v.value, onClick: () => onSetVariant(v.value) }, v.value)),
18529
- ALIGNS.map((a) => /* @__PURE__ */ jsx19(Pill, { label: a.label, active: align === a.value, onClick: () => onSetAlign(a.value) }, a.value))
18670
+ /* @__PURE__ */ jsxs11("div", { style: rowStyle, children: [
18671
+ VARIANTS.map((v) => /* @__PURE__ */ jsx20(Pill, { label: v.label, active: variant === v.value, onClick: () => onSetVariant(v.value) }, v.value)),
18672
+ ALIGNS.map((a) => /* @__PURE__ */ jsx20(Pill, { label: a.label, active: align === a.value, onClick: () => onSetAlign(a.value) }, a.value))
18530
18673
  ] }),
18531
- /* @__PURE__ */ jsxs10("div", { style: rowStyle, children: [
18532
- HOVERS.map((h) => /* @__PURE__ */ jsx19(Pill, { label: h.label, active: hover === h.value, onClick: () => onSetHover(h.value) }, h.value)),
18533
- TREATMENTS.map((t) => /* @__PURE__ */ jsx19(Pill, { label: t.label, active: treatment === t.value, onClick: () => onSetTreatment(t.value) }, t.value))
18674
+ /* @__PURE__ */ jsxs11("div", { style: rowStyle, children: [
18675
+ HOVERS.map((h) => /* @__PURE__ */ jsx20(Pill, { label: h.label, active: hover === h.value, onClick: () => onSetHover(h.value) }, h.value)),
18676
+ TREATMENTS.map((t) => /* @__PURE__ */ jsx20(Pill, { label: t.label, active: treatment === t.value, onClick: () => onSetTreatment(t.value) }, t.value))
18534
18677
  ] }),
18535
- /* @__PURE__ */ jsxs10("div", { style: { display: "flex", gap: 6, alignItems: "center" }, children: [
18536
- /* @__PURE__ */ jsx19(Pill, { label: "\u2212", onClick: () => onResize(-8) }),
18537
- /* @__PURE__ */ jsxs10("span", { style: { color: "#ffffff", fontSize: 12, minWidth: 34, textAlign: "center" }, children: [
18678
+ /* @__PURE__ */ jsxs11("div", { style: { display: "flex", gap: 6, alignItems: "center" }, children: [
18679
+ /* @__PURE__ */ jsx20(Pill, { label: "\u2212", onClick: () => onResize(-8) }),
18680
+ /* @__PURE__ */ jsxs11("span", { style: { color: "#ffffff", fontSize: 12, minWidth: 34, textAlign: "center" }, children: [
18538
18681
  sizeValue,
18539
18682
  "px"
18540
18683
  ] }),
18541
- /* @__PURE__ */ jsx19(Pill, { label: "+", onClick: () => onResize(8) })
18684
+ /* @__PURE__ */ jsx20(Pill, { label: "+", onClick: () => onResize(8) })
18542
18685
  ] }),
18543
- /* @__PURE__ */ jsx19("div", { style: { display: "flex", justifyContent: "center", width: "100%" }, children: /* @__PURE__ */ jsx19(AltInput, { value: currentAlt, onCommit: onSetAlt }) }),
18544
- /* @__PURE__ */ jsx19("div", { style: { display: "flex", justifyContent: "center", width: "100%" }, children: /* @__PURE__ */ jsx19(LinkInput, { value: currentHref, onCommit: (href) => onSetLink(href, currentTarget) }) }),
18545
- currentHref && /* @__PURE__ */ jsxs10("div", { style: rowStyle, children: [
18546
- /* @__PURE__ */ jsx19(Pill, { label: "New tab", active: currentTarget === "new-tab", onClick: () => onSetLink(currentHref, "new-tab") }),
18547
- /* @__PURE__ */ jsx19(Pill, { label: "Same tab", active: currentTarget === "same-tab", onClick: () => onSetLink(currentHref, "same-tab") })
18686
+ /* @__PURE__ */ jsx20("div", { style: { display: "flex", justifyContent: "center", width: "100%" }, children: /* @__PURE__ */ jsx20(AltInput, { value: currentAlt, onCommit: onSetAlt }) }),
18687
+ /* @__PURE__ */ jsx20("div", { style: { display: "flex", justifyContent: "center", width: "100%" }, children: /* @__PURE__ */ jsx20(LinkInput, { value: currentHref, onCommit: (href) => onSetLink(href, currentTarget) }) }),
18688
+ currentHref && /* @__PURE__ */ jsxs11("div", { style: rowStyle, children: [
18689
+ /* @__PURE__ */ jsx20(Pill, { label: "New tab", active: currentTarget === "new-tab", onClick: () => onSetLink(currentHref, "new-tab") }),
18690
+ /* @__PURE__ */ jsx20(Pill, { label: "Same tab", active: currentTarget === "same-tab", onClick: () => onSetLink(currentHref, "same-tab") })
18548
18691
  ] }),
18549
- /* @__PURE__ */ jsxs10("div", { style: rowStyle, children: [
18550
- /* @__PURE__ */ jsx19(Pill, { label: "Change Image", onClick: onChangeImage }),
18551
- /* @__PURE__ */ jsx19(Pill, { label: "+ Item", onClick: onAddItem }),
18552
- /* @__PURE__ */ jsx19(Pill, { label: "\u2212 Item", onClick: onRemoveItem, disabled: itemCount <= 1 })
18692
+ /* @__PURE__ */ jsxs11("div", { style: rowStyle, children: [
18693
+ /* @__PURE__ */ jsx20(Pill, { label: "Change Image", onClick: onChangeImage }),
18694
+ /* @__PURE__ */ jsx20(Pill, { label: "+ Item", onClick: onAddItem }),
18695
+ /* @__PURE__ */ jsx20(Pill, { label: "\u2212 Item", onClick: onRemoveItem, disabled: itemCount <= 1 })
18553
18696
  ] }),
18554
- /* @__PURE__ */ jsxs10("div", { style: rowStyle, children: [
18555
- /* @__PURE__ */ jsx19(Pill, { label: "\u2190 Move", onClick: onMoveLeft, disabled: index <= 0 }),
18556
- /* @__PURE__ */ jsx19(Pill, { label: "\u2192 Move", onClick: onMoveRight, disabled: index >= itemCount - 1 })
18697
+ /* @__PURE__ */ jsxs11("div", { style: rowStyle, children: [
18698
+ /* @__PURE__ */ jsx20(Pill, { label: "\u2190 Move", onClick: onMoveLeft, disabled: index <= 0 }),
18699
+ /* @__PURE__ */ jsx20(Pill, { label: "\u2192 Move", onClick: onMoveRight, disabled: index >= itemCount - 1 })
18557
18700
  ] }),
18558
- error && /* @__PURE__ */ jsx19("div", { style: { color: "#FCA5A5", fontSize: 11, maxWidth: 220, textAlign: "center" }, children: error })
18701
+ error && /* @__PURE__ */ jsx20("div", { style: { color: "#FCA5A5", fontSize: 11, maxWidth: 220, textAlign: "center" }, children: error })
18559
18702
  ]
18560
18703
  }
18561
18704
  );
@@ -18684,8 +18827,8 @@ function AiMediaStripOverlay({
18684
18827
  const activeItemRect = useLiveItemRect(active);
18685
18828
  const TOOLBAR_APPROX_H = 170;
18686
18829
  const toolbarState = activeItemRect && activeItemRect.top < TOOLBAR_APPROX_H ? "active-bottom" : "active-top";
18687
- return /* @__PURE__ */ jsxs10(Fragment6, { children: [
18688
- hoverHandleRect && hover && /* @__PURE__ */ jsx19(
18830
+ return /* @__PURE__ */ jsxs11(Fragment7, { children: [
18831
+ hoverHandleRect && hover && /* @__PURE__ */ jsx20(
18689
18832
  "button",
18690
18833
  {
18691
18834
  type: "button",
@@ -18713,15 +18856,15 @@ function AiMediaStripOverlay({
18713
18856
  fontSize: 14,
18714
18857
  fontWeight: 700
18715
18858
  },
18716
- children: /* @__PURE__ */ jsx19(Star, { size: 14, style: { pointerEvents: "none" } })
18859
+ children: /* @__PURE__ */ jsx20(Star, { size: 14, style: { pointerEvents: "none" } })
18717
18860
  }
18718
18861
  ),
18719
- activeItemRect && active && activeEntry && /* @__PURE__ */ jsx19(
18862
+ activeItemRect && active && activeEntry && /* @__PURE__ */ jsx20(
18720
18863
  ItemInteractionLayer,
18721
18864
  {
18722
18865
  rect: activeItemRect,
18723
18866
  state: toolbarState,
18724
- toolbar: /* @__PURE__ */ jsx19(
18867
+ toolbar: /* @__PURE__ */ jsx20(
18725
18868
  MediaStripToolbar,
18726
18869
  {
18727
18870
  entry: activeEntry,
@@ -18801,7 +18944,7 @@ function AiMediaStripOverlay({
18801
18944
  // src/ui/ai-section/AiPricingCardOverlay.tsx
18802
18945
  import { useCallback as useCallback4, useEffect as useEffect7, useLayoutEffect as useLayoutEffect4, useRef as useRef6, useState as useState9 } from "react";
18803
18946
  import { Check as Check2, ChevronDown as ChevronDown3, Minus, Plus as Plus2, Star as Star2 } from "lucide-react";
18804
- import { Fragment as Fragment7, jsx as jsx20, jsxs as jsxs11 } from "react/jsx-runtime";
18947
+ import { Fragment as Fragment8, jsx as jsx21, jsxs as jsxs12 } from "react/jsx-runtime";
18805
18948
  var PRIMARY4 = "var(--ohw-primary, #0885FE)";
18806
18949
  var CHROME_SELECTOR = "[data-ohw-toolbar], [data-ohw-edit-chrome], [data-ohw-item-interaction], [data-ohw-link-modal-root], [data-ohw-section-picker], [data-ohw-ai-review], [data-ohw-more-menu]";
18807
18950
  function findPricingCardElement(sectionId, index) {
@@ -18890,7 +19033,7 @@ function GridToolbarSlot({ gridRect, children }) {
18890
19033
  return () => ro.disconnect();
18891
19034
  }, [centerX, children]);
18892
19035
  const mobile = window.innerWidth <= 480;
18893
- return /* @__PURE__ */ jsx20(
19036
+ return /* @__PURE__ */ jsx21(
18894
19037
  "div",
18895
19038
  {
18896
19039
  ref: slotRef,
@@ -18925,7 +19068,7 @@ function requestValidateTree2(postToParent2, tree) {
18925
19068
  });
18926
19069
  }
18927
19070
  function StyleSwatch({ style }) {
18928
- return /* @__PURE__ */ jsx20(
19071
+ return /* @__PURE__ */ jsx21(
18929
19072
  "span",
18930
19073
  {
18931
19074
  "aria-hidden": true,
@@ -18939,19 +19082,19 @@ function StyleSwatch({ style }) {
18939
19082
  );
18940
19083
  }
18941
19084
  function ButtonGlyph() {
18942
- return /* @__PURE__ */ jsxs11("svg", { width: "18", height: "12", viewBox: "0 0 18 12", fill: "none", "aria-hidden": true, style: { pointerEvents: "none" }, children: [
18943
- /* @__PURE__ */ jsx20("rect", { x: "0.75", y: "0.75", width: "16.5", height: "10.5", rx: "3", stroke: "currentColor", strokeWidth: "1.5" }),
18944
- /* @__PURE__ */ jsx20("path", { d: "M5.5 6H12.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" })
19085
+ return /* @__PURE__ */ jsxs12("svg", { width: "18", height: "12", viewBox: "0 0 18 12", fill: "none", "aria-hidden": true, style: { pointerEvents: "none" }, children: [
19086
+ /* @__PURE__ */ jsx21("rect", { x: "0.75", y: "0.75", width: "16.5", height: "10.5", rx: "3", stroke: "currentColor", strokeWidth: "1.5" }),
19087
+ /* @__PURE__ */ jsx21("path", { d: "M5.5 6H12.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" })
18945
19088
  ] });
18946
19089
  }
18947
19090
  function FeatureGlyph({ mode }) {
18948
- return /* @__PURE__ */ jsxs11("svg", { width: "18", height: "18", viewBox: "0 0 18 18", fill: "none", "aria-hidden": true, style: { pointerEvents: "none" }, children: [
18949
- /* @__PURE__ */ jsx20("circle", { cx: "8", cy: "8", r: "7.25", stroke: "currentColor", strokeWidth: "1.5" }),
18950
- /* @__PURE__ */ jsx20("path", { d: "M5 8.2L7.2 10.3L11 6", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }),
18951
- /* @__PURE__ */ jsx20("circle", { cx: "13.5", cy: "13.5", r: "4.25", fill: "var(--ohw-background, #ffffff)", stroke: "var(--ohw-background, #ffffff)", strokeWidth: "1" }),
18952
- /* @__PURE__ */ jsx20("circle", { cx: "13.5", cy: "13.5", r: "3.75", fill: "var(--ohw-background, #ffffff)", stroke: PRIMARY4, strokeWidth: "1" }),
18953
- /* @__PURE__ */ jsx20("path", { d: "M11.5 13.5H15.5", stroke: PRIMARY4, strokeWidth: "1.5", strokeLinecap: "round" }),
18954
- mode === "add" && /* @__PURE__ */ jsx20("path", { d: "M13.5 11.5V15.5", stroke: PRIMARY4, strokeWidth: "1.5", strokeLinecap: "round" })
19091
+ return /* @__PURE__ */ jsxs12("svg", { width: "18", height: "18", viewBox: "0 0 18 18", fill: "none", "aria-hidden": true, style: { pointerEvents: "none" }, children: [
19092
+ /* @__PURE__ */ jsx21("circle", { cx: "8", cy: "8", r: "7.25", stroke: "currentColor", strokeWidth: "1.5" }),
19093
+ /* @__PURE__ */ jsx21("path", { d: "M5 8.2L7.2 10.3L11 6", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }),
19094
+ /* @__PURE__ */ jsx21("circle", { cx: "13.5", cy: "13.5", r: "4.25", fill: "var(--ohw-background, #ffffff)", stroke: "var(--ohw-background, #ffffff)", strokeWidth: "1" }),
19095
+ /* @__PURE__ */ jsx21("circle", { cx: "13.5", cy: "13.5", r: "3.75", fill: "var(--ohw-background, #ffffff)", stroke: PRIMARY4, strokeWidth: "1" }),
19096
+ /* @__PURE__ */ jsx21("path", { d: "M11.5 13.5H15.5", stroke: PRIMARY4, strokeWidth: "1.5", strokeLinecap: "round" }),
19097
+ mode === "add" && /* @__PURE__ */ jsx21("path", { d: "M13.5 11.5V15.5", stroke: PRIMARY4, strokeWidth: "1.5", strokeLinecap: "round" })
18955
19098
  ] });
18956
19099
  }
18957
19100
  function ToolbarAction({
@@ -18960,14 +19103,14 @@ function ToolbarAction({
18960
19103
  disabled = false,
18961
19104
  children
18962
19105
  }) {
18963
- const button = /* @__PURE__ */ jsx20(CustomToolbarButton, { type: "button", "aria-label": label, disabled, onClick, className: "size-8", children });
18964
- return /* @__PURE__ */ jsxs11(Tooltip, { children: [
18965
- /* @__PURE__ */ jsx20(TooltipTrigger, { asChild: true, children: disabled ? /* @__PURE__ */ jsx20("span", { className: "inline-flex", children: button }) : button }),
18966
- /* @__PURE__ */ jsx20(TooltipContent, { side: "bottom", sideOffset: 8, children: label })
19106
+ const button = /* @__PURE__ */ jsx21(CustomToolbarButton, { type: "button", "aria-label": label, disabled, onClick, className: "size-8", children });
19107
+ return /* @__PURE__ */ jsxs12(Tooltip, { children: [
19108
+ /* @__PURE__ */ jsx21(TooltipTrigger, { asChild: true, children: disabled ? /* @__PURE__ */ jsx21("span", { className: "inline-flex", children: button }) : button }),
19109
+ /* @__PURE__ */ jsx21(TooltipContent, { side: "bottom", sideOffset: 8, children: label })
18967
19110
  ] });
18968
19111
  }
18969
19112
  function ToolbarSeparator() {
18970
- return /* @__PURE__ */ jsx20("span", { "aria-hidden": true, className: "mx-0.5 block h-6 w-px shrink-0 bg-border" });
19113
+ return /* @__PURE__ */ jsx21("span", { "aria-hidden": true, className: "mx-0.5 block h-6 w-px shrink-0 bg-border" });
18971
19114
  }
18972
19115
  function CardStyleMenu({
18973
19116
  value,
@@ -18975,7 +19118,7 @@ function CardStyleMenu({
18975
19118
  disabled = false
18976
19119
  }) {
18977
19120
  const current = PRICING_CARD_STYLES.find((s) => s.value === value) ?? PRICING_CARD_STYLES[0];
18978
- const trigger = /* @__PURE__ */ jsxs11(
19121
+ const trigger = /* @__PURE__ */ jsxs12(
18979
19122
  "button",
18980
19123
  {
18981
19124
  type: "button",
@@ -18986,28 +19129,28 @@ function CardStyleMenu({
18986
19129
  disabled && "cursor-not-allowed opacity-40 hover:bg-transparent"
18987
19130
  ),
18988
19131
  children: [
18989
- /* @__PURE__ */ jsx20(StyleSwatch, { style: current.value }),
18990
- /* @__PURE__ */ jsx20("span", { className: "flex-1 text-left", children: current.label }),
18991
- /* @__PURE__ */ jsx20(ChevronDown3, { size: 16, style: { pointerEvents: "none" } })
19132
+ /* @__PURE__ */ jsx21(StyleSwatch, { style: current.value }),
19133
+ /* @__PURE__ */ jsx21("span", { className: "flex-1 text-left", children: current.label }),
19134
+ /* @__PURE__ */ jsx21(ChevronDown3, { size: 16, style: { pointerEvents: "none" } })
18992
19135
  ]
18993
19136
  }
18994
19137
  );
18995
19138
  if (disabled) {
18996
- return /* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-1.5 pl-1.5", children: [
18997
- /* @__PURE__ */ jsx20("span", { className: "text-xs text-muted-foreground opacity-50", children: "Card style" }),
18998
- /* @__PURE__ */ jsxs11(Tooltip, { children: [
18999
- /* @__PURE__ */ jsx20(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx20("span", { className: "inline-flex", children: trigger }) }),
19000
- /* @__PURE__ */ jsx20(TooltipContent, { side: "bottom", sideOffset: 8, children: "Mark as featured to edit card style" })
19139
+ return /* @__PURE__ */ jsxs12("div", { className: "flex items-center gap-1.5 pl-1.5", children: [
19140
+ /* @__PURE__ */ jsx21("span", { className: "text-xs text-muted-foreground opacity-50", children: "Card style" }),
19141
+ /* @__PURE__ */ jsxs12(Tooltip, { children: [
19142
+ /* @__PURE__ */ jsx21(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx21("span", { className: "inline-flex", children: trigger }) }),
19143
+ /* @__PURE__ */ jsx21(TooltipContent, { side: "bottom", sideOffset: 8, children: "Mark as featured to edit card style" })
19001
19144
  ] })
19002
19145
  ] });
19003
19146
  }
19004
- return /* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-1.5 pl-1.5", children: [
19005
- /* @__PURE__ */ jsx20("span", { className: "text-xs text-muted-foreground", children: "Card style" }),
19006
- /* @__PURE__ */ jsxs11(DropdownMenu, { modal: false, children: [
19007
- /* @__PURE__ */ jsx20(DropdownMenuTrigger, { asChild: true, children: trigger }),
19008
- /* @__PURE__ */ jsx20(DropdownMenuContent, { align: "end", sideOffset: 8, className: "w-[152px] min-w-[152px] p-1", children: PRICING_CARD_STYLES.map((style) => {
19147
+ return /* @__PURE__ */ jsxs12("div", { className: "flex items-center gap-1.5 pl-1.5", children: [
19148
+ /* @__PURE__ */ jsx21("span", { className: "text-xs text-muted-foreground", children: "Card style" }),
19149
+ /* @__PURE__ */ jsxs12(DropdownMenu, { modal: false, children: [
19150
+ /* @__PURE__ */ jsx21(DropdownMenuTrigger, { asChild: true, children: trigger }),
19151
+ /* @__PURE__ */ jsx21(DropdownMenuContent, { align: "end", sideOffset: 8, className: "w-[152px] min-w-[152px] p-1", children: PRICING_CARD_STYLES.map((style) => {
19009
19152
  const selected = style.value === value;
19010
- return /* @__PURE__ */ jsxs11(
19153
+ return /* @__PURE__ */ jsxs12(
19011
19154
  DropdownMenuItem,
19012
19155
  {
19013
19156
  role: "menuitemradio",
@@ -19015,9 +19158,9 @@ function CardStyleMenu({
19015
19158
  onSelect: () => onChange(style.value),
19016
19159
  className: cn("grid grid-cols-[18px_1fr_16px] gap-2 py-2 pl-2 pr-2 text-[13px]", selected && "bg-muted"),
19017
19160
  children: [
19018
- /* @__PURE__ */ jsx20(StyleSwatch, { style: style.value }),
19019
- /* @__PURE__ */ jsx20("span", { children: style.label }),
19020
- selected && /* @__PURE__ */ jsx20(Check2, { size: 16, className: "text-bridge-primary" })
19161
+ /* @__PURE__ */ jsx21(StyleSwatch, { style: style.value }),
19162
+ /* @__PURE__ */ jsx21("span", { children: style.label }),
19163
+ selected && /* @__PURE__ */ jsx21(Check2, { size: 16, className: "text-bridge-primary" })
19021
19164
  ]
19022
19165
  },
19023
19166
  style.value
@@ -19047,7 +19190,7 @@ function PricingCardToolbar({
19047
19190
  const style = pricingCardStyle(entry.tree, index);
19048
19191
  const featuredTag = pricingCardFeaturedTag(entry.tree, index);
19049
19192
  const mobile = window.innerWidth <= 480;
19050
- return /* @__PURE__ */ jsx20(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxs11(
19193
+ return /* @__PURE__ */ jsx21(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsxs12(
19051
19194
  "div",
19052
19195
  {
19053
19196
  "data-ohw-bridge": "",
@@ -19059,7 +19202,7 @@ function PricingCardToolbar({
19059
19202
  ),
19060
19203
  style: { maxWidth: mobile ? "calc(100vw - 24px)" : void 0 },
19061
19204
  children: [
19062
- /* @__PURE__ */ jsxs11(
19205
+ /* @__PURE__ */ jsxs12(
19063
19206
  "div",
19064
19207
  {
19065
19208
  className: cn(
@@ -19068,8 +19211,8 @@ function PricingCardToolbar({
19068
19211
  mobile ? "flex-wrap justify-center" : "flex-nowrap"
19069
19212
  ),
19070
19213
  children: [
19071
- /* @__PURE__ */ jsxs11(Tooltip, { children: [
19072
- /* @__PURE__ */ jsx20(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx20(
19214
+ /* @__PURE__ */ jsxs12(Tooltip, { children: [
19215
+ /* @__PURE__ */ jsx21(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx21(
19073
19216
  CustomToolbarButton,
19074
19217
  {
19075
19218
  type: "button",
@@ -19077,7 +19220,7 @@ function PricingCardToolbar({
19077
19220
  "aria-pressed": featuredTag,
19078
19221
  onClick: () => onSetFeaturedTag(!featuredTag),
19079
19222
  className: "group size-8",
19080
- children: /* @__PURE__ */ jsx20(
19223
+ children: /* @__PURE__ */ jsx21(
19081
19224
  Star2,
19082
19225
  {
19083
19226
  size: 16,
@@ -19092,25 +19235,25 @@ function PricingCardToolbar({
19092
19235
  )
19093
19236
  }
19094
19237
  ) }),
19095
- /* @__PURE__ */ jsx20(TooltipContent, { side: "bottom", sideOffset: 8, children: featuredTag ? "Unmark featured" : "Mark as featured" })
19238
+ /* @__PURE__ */ jsx21(TooltipContent, { side: "bottom", sideOffset: 8, children: featuredTag ? "Unmark featured" : "Mark as featured" })
19096
19239
  ] }),
19097
- /* @__PURE__ */ jsx20(ToolbarSeparator, {}),
19098
- /* @__PURE__ */ jsx20(CardStyleMenu, { value: style, onChange: onSetStyle, disabled: !featuredTag }),
19099
- /* @__PURE__ */ jsx20(ToolbarSeparator, {}),
19100
- /* @__PURE__ */ jsx20(ToolbarAction, { label: "Add button", onClick: onAddButton, disabled: buttonCount >= 2, children: /* @__PURE__ */ jsx20(ButtonGlyph, {}) }),
19101
- /* @__PURE__ */ jsx20(ToolbarAction, { label: "Remove button", onClick: onRemoveButton, disabled: buttonCount === 0, children: /* @__PURE__ */ jsxs11("span", { className: "relative inline-flex", children: [
19102
- /* @__PURE__ */ jsx20(ButtonGlyph, {}),
19103
- /* @__PURE__ */ jsx20(Minus, { size: 10, strokeWidth: 2.5, className: "absolute -right-1.5 -top-1.5 rounded-full bg-background text-bridge-primary" })
19240
+ /* @__PURE__ */ jsx21(ToolbarSeparator, {}),
19241
+ /* @__PURE__ */ jsx21(CardStyleMenu, { value: style, onChange: onSetStyle, disabled: !featuredTag }),
19242
+ /* @__PURE__ */ jsx21(ToolbarSeparator, {}),
19243
+ /* @__PURE__ */ jsx21(ToolbarAction, { label: "Add button", onClick: onAddButton, disabled: buttonCount >= 2, children: /* @__PURE__ */ jsx21(ButtonGlyph, {}) }),
19244
+ /* @__PURE__ */ jsx21(ToolbarAction, { label: "Remove button", onClick: onRemoveButton, disabled: buttonCount === 0, children: /* @__PURE__ */ jsxs12("span", { className: "relative inline-flex", children: [
19245
+ /* @__PURE__ */ jsx21(ButtonGlyph, {}),
19246
+ /* @__PURE__ */ jsx21(Minus, { size: 10, strokeWidth: 2.5, className: "absolute -right-1.5 -top-1.5 rounded-full bg-background text-bridge-primary" })
19104
19247
  ] }) }),
19105
- /* @__PURE__ */ jsx20(ToolbarAction, { label: "Add feature", onClick: onAddFeature, disabled: featureCount >= 10, children: /* @__PURE__ */ jsx20(FeatureGlyph, { mode: "add" }) }),
19106
- /* @__PURE__ */ jsx20(ToolbarAction, { label: "Remove feature", onClick: onRemoveFeature, disabled: featureCount <= 1, children: /* @__PURE__ */ jsx20(FeatureGlyph, { mode: "remove" }) }),
19107
- /* @__PURE__ */ jsx20(ToolbarSeparator, {}),
19108
- /* @__PURE__ */ jsx20(ToolbarAction, { label: "Add tier", onClick: onAddTier, disabled: collectionCount >= 4, children: /* @__PURE__ */ jsx20(Plus2, { size: 16, style: { pointerEvents: "none" } }) }),
19109
- /* @__PURE__ */ jsx20(ToolbarAction, { label: "Remove tier", onClick: onRemoveTier, disabled: collectionCount <= 1, children: /* @__PURE__ */ jsx20(Minus, { size: 16, style: { pointerEvents: "none" } }) })
19248
+ /* @__PURE__ */ jsx21(ToolbarAction, { label: "Add feature", onClick: onAddFeature, disabled: featureCount >= 10, children: /* @__PURE__ */ jsx21(FeatureGlyph, { mode: "add" }) }),
19249
+ /* @__PURE__ */ jsx21(ToolbarAction, { label: "Remove feature", onClick: onRemoveFeature, disabled: featureCount <= 1, children: /* @__PURE__ */ jsx21(FeatureGlyph, { mode: "remove" }) }),
19250
+ /* @__PURE__ */ jsx21(ToolbarSeparator, {}),
19251
+ /* @__PURE__ */ jsx21(ToolbarAction, { label: "Add tier", onClick: onAddTier, disabled: collectionCount >= 4, children: /* @__PURE__ */ jsx21(Plus2, { size: 16, style: { pointerEvents: "none" } }) }),
19252
+ /* @__PURE__ */ jsx21(ToolbarAction, { label: "Remove tier", onClick: onRemoveTier, disabled: collectionCount <= 1, children: /* @__PURE__ */ jsx21(Minus, { size: 16, style: { pointerEvents: "none" } }) })
19110
19253
  ]
19111
19254
  }
19112
19255
  ),
19113
- error && /* @__PURE__ */ jsx20("div", { className: "max-w-[260px] rounded-md bg-background px-2 py-1 text-center text-[11px] text-destructive shadow-sm", children: error })
19256
+ error && /* @__PURE__ */ jsx21("div", { className: "max-w-[260px] rounded-md bg-background px-2 py-1 text-center text-[11px] text-destructive shadow-sm", children: error })
19114
19257
  ]
19115
19258
  }
19116
19259
  ) });
@@ -19228,11 +19371,11 @@ function AiPricingCardOverlay({
19228
19371
  const activeCardRect = useLiveCardRect(active);
19229
19372
  const activeGridRect = useLiveCardRect(active, true);
19230
19373
  const hoverRect = useLiveCardRect(hover && !sameRef(hover, active) ? hover : null);
19231
- return /* @__PURE__ */ jsxs11(Fragment7, { children: [
19232
- hoverRect && /* @__PURE__ */ jsx20(ItemInteractionLayer, { rect: hoverRect, state: "hover" }),
19233
- activeCardRect && activeGridRect && active && activeEntry && /* @__PURE__ */ jsxs11(Fragment7, { children: [
19234
- /* @__PURE__ */ jsx20(ItemInteractionLayer, { rect: activeCardRect, state: "active-top" }),
19235
- /* @__PURE__ */ jsx20(GridToolbarSlot, { gridRect: activeGridRect, children: /* @__PURE__ */ jsx20(
19374
+ return /* @__PURE__ */ jsxs12(Fragment8, { children: [
19375
+ hoverRect && /* @__PURE__ */ jsx21(ItemInteractionLayer, { rect: hoverRect, state: "hover" }),
19376
+ activeCardRect && activeGridRect && active && activeEntry && /* @__PURE__ */ jsxs12(Fragment8, { children: [
19377
+ /* @__PURE__ */ jsx21(ItemInteractionLayer, { rect: activeCardRect, state: "active-top" }),
19378
+ /* @__PURE__ */ jsx21(GridToolbarSlot, { gridRect: activeGridRect, children: /* @__PURE__ */ jsx21(
19236
19379
  PricingCardToolbar,
19237
19380
  {
19238
19381
  entry: activeEntry,
@@ -19260,7 +19403,7 @@ function AiPricingCardOverlay({
19260
19403
  onRemoveFeature: () => runMutation(active.sectionId, (tree) => removePricingCardFeature(tree, active.index))
19261
19404
  }
19262
19405
  ) }),
19263
- /* @__PURE__ */ jsx20(
19406
+ /* @__PURE__ */ jsx21(
19264
19407
  "div",
19265
19408
  {
19266
19409
  "data-ohw-bridge": "",
@@ -19353,7 +19496,7 @@ function extractYouTubeId(input) {
19353
19496
  }
19354
19497
 
19355
19498
  // src/ui/ai-section/AiVideoOverlay.tsx
19356
- import { Fragment as Fragment8, jsx as jsx21, jsxs as jsxs12 } from "react/jsx-runtime";
19499
+ import { Fragment as Fragment9, jsx as jsx22, jsxs as jsxs13 } from "react/jsx-runtime";
19357
19500
  var PRIMARY5 = "#0885FE";
19358
19501
  var OHW_BLUE2 = `var(--ohw-primary, ${PRIMARY5})`;
19359
19502
  var OHW_BLUE_DARK2 = `color-mix(in srgb, var(--ohw-primary, ${PRIMARY5}) 60%, #000000)`;
@@ -19421,7 +19564,7 @@ function Pill2({
19421
19564
  onClick,
19422
19565
  disabled
19423
19566
  }) {
19424
- return /* @__PURE__ */ jsx21(
19567
+ return /* @__PURE__ */ jsx22(
19425
19568
  "button",
19426
19569
  {
19427
19570
  type: "button",
@@ -19480,8 +19623,8 @@ function VideoUrlInput({ value, onCommit }) {
19480
19623
  onCommit(id);
19481
19624
  }
19482
19625
  };
19483
- return /* @__PURE__ */ jsxs12("div", { style: { display: "flex", flexDirection: "column", gap: 4, width: "100%", maxWidth: 280 }, children: [
19484
- /* @__PURE__ */ jsxs12(
19626
+ return /* @__PURE__ */ jsxs13("div", { style: { display: "flex", flexDirection: "column", gap: 4, width: "100%", maxWidth: 280 }, children: [
19627
+ /* @__PURE__ */ jsxs13(
19485
19628
  "div",
19486
19629
  {
19487
19630
  style: {
@@ -19497,7 +19640,7 @@ function VideoUrlInput({ value, onCommit }) {
19497
19640
  boxShadow: invalid ? "inset 0 0 0 1.5px #EF4444" : "none"
19498
19641
  },
19499
19642
  children: [
19500
- /* @__PURE__ */ jsx21(
19643
+ /* @__PURE__ */ jsx22(
19501
19644
  "span",
19502
19645
  {
19503
19646
  style: {
@@ -19512,7 +19655,7 @@ function VideoUrlInput({ value, onCommit }) {
19512
19655
  children: "Video"
19513
19656
  }
19514
19657
  ),
19515
- /* @__PURE__ */ jsx21(
19658
+ /* @__PURE__ */ jsx22(
19516
19659
  "input",
19517
19660
  {
19518
19661
  type: "text",
@@ -19549,7 +19692,7 @@ function VideoUrlInput({ value, onCommit }) {
19549
19692
  ]
19550
19693
  }
19551
19694
  ),
19552
- invalid && /* @__PURE__ */ jsx21("div", { style: { color: "#FCA5A5", fontSize: 11, textAlign: "center" }, children: "That doesn't look like a YouTube link \u2014 try pasting the video URL again." })
19695
+ invalid && /* @__PURE__ */ jsx22("div", { style: { color: "#FCA5A5", fontSize: 11, textAlign: "center" }, children: "That doesn't look like a YouTube link \u2014 try pasting the video URL again." })
19553
19696
  ] });
19554
19697
  }
19555
19698
  function VideoToolbar({
@@ -19559,7 +19702,7 @@ function VideoToolbar({
19559
19702
  onSetVideoId,
19560
19703
  onRemove
19561
19704
  }) {
19562
- return /* @__PURE__ */ jsxs12(
19705
+ return /* @__PURE__ */ jsxs13(
19563
19706
  "div",
19564
19707
  {
19565
19708
  "data-ohw-bridge": "",
@@ -19579,9 +19722,9 @@ function VideoToolbar({
19579
19722
  opacity: pending ? 0.6 : 1
19580
19723
  },
19581
19724
  children: [
19582
- /* @__PURE__ */ jsx21(VideoUrlInput, { value: videoId, onCommit: onSetVideoId }),
19583
- /* @__PURE__ */ jsx21(Pill2, { label: "Remove video", onClick: onRemove, disabled: !videoId }),
19584
- error && /* @__PURE__ */ jsx21("div", { style: { color: "#FCA5A5", fontSize: 11, maxWidth: 220, textAlign: "center" }, children: error })
19725
+ /* @__PURE__ */ jsx22(VideoUrlInput, { value: videoId, onCommit: onSetVideoId }),
19726
+ /* @__PURE__ */ jsx22(Pill2, { label: "Remove video", onClick: onRemove, disabled: !videoId }),
19727
+ error && /* @__PURE__ */ jsx22("div", { style: { color: "#FCA5A5", fontSize: 11, maxWidth: 220, textAlign: "center" }, children: error })
19585
19728
  ]
19586
19729
  }
19587
19730
  );
@@ -19701,8 +19844,8 @@ function AiVideoOverlay({
19701
19844
  const activeBlockRect = useLiveBlockRect(active);
19702
19845
  const TOOLBAR_APPROX_H = 90;
19703
19846
  const toolbarState = activeBlockRect && activeBlockRect.top < TOOLBAR_APPROX_H ? "active-bottom" : "active-top";
19704
- return /* @__PURE__ */ jsxs12(Fragment8, { children: [
19705
- hoverHandleRect && hover && /* @__PURE__ */ jsx21(
19847
+ return /* @__PURE__ */ jsxs13(Fragment9, { children: [
19848
+ hoverHandleRect && hover && /* @__PURE__ */ jsx22(
19706
19849
  "button",
19707
19850
  {
19708
19851
  type: "button",
@@ -19730,15 +19873,15 @@ function AiVideoOverlay({
19730
19873
  fontSize: 14,
19731
19874
  fontWeight: 700
19732
19875
  },
19733
- children: /* @__PURE__ */ jsx21(Star3, { size: 14, style: { pointerEvents: "none" } })
19876
+ children: /* @__PURE__ */ jsx22(Star3, { size: 14, style: { pointerEvents: "none" } })
19734
19877
  }
19735
19878
  ),
19736
- activeBlockRect && active && activeEntry && /* @__PURE__ */ jsx21(
19879
+ activeBlockRect && active && activeEntry && /* @__PURE__ */ jsx22(
19737
19880
  ItemInteractionLayer,
19738
19881
  {
19739
19882
  rect: activeBlockRect,
19740
19883
  state: toolbarState,
19741
- toolbar: /* @__PURE__ */ jsx21(
19884
+ toolbar: /* @__PURE__ */ jsx22(
19742
19885
  VideoToolbar,
19743
19886
  {
19744
19887
  videoId: videoIdAt(activeEntry.tree, active.path),
@@ -19813,7 +19956,7 @@ function setCarouselAutoplay(tree, on) {
19813
19956
  }
19814
19957
 
19815
19958
  // src/ui/ai-section/AiFadeCarouselOverlay.tsx
19816
- import { Fragment as Fragment9, jsx as jsx22, jsxs as jsxs13 } from "react/jsx-runtime";
19959
+ import { Fragment as Fragment10, jsx as jsx23, jsxs as jsxs14 } from "react/jsx-runtime";
19817
19960
  var PRIMARY6 = "#0885FE";
19818
19961
  var OHW_BLUE3 = `var(--ohw-primary, ${PRIMARY6})`;
19819
19962
  var OHW_BLUE_DARK3 = `color-mix(in srgb, var(--ohw-primary, ${PRIMARY6}) 60%, #000000)`;
@@ -19896,7 +20039,7 @@ function requestAssetPick2(postToParent2) {
19896
20039
  });
19897
20040
  }
19898
20041
  function Pill3({ label, onClick, disabled }) {
19899
- return /* @__PURE__ */ jsx22(
20042
+ return /* @__PURE__ */ jsx23(
19900
20043
  "button",
19901
20044
  {
19902
20045
  type: "button",
@@ -19930,7 +20073,7 @@ function TogglePill({
19930
20073
  onToggle,
19931
20074
  disabled
19932
20075
  }) {
19933
- return /* @__PURE__ */ jsxs13(
20076
+ return /* @__PURE__ */ jsxs14(
19934
20077
  "button",
19935
20078
  {
19936
20079
  type: "button",
@@ -19959,7 +20102,7 @@ function TogglePill({
19959
20102
  },
19960
20103
  children: [
19961
20104
  label,
19962
- /* @__PURE__ */ jsx22(
20105
+ /* @__PURE__ */ jsx23(
19963
20106
  "span",
19964
20107
  {
19965
20108
  "aria-hidden": true,
@@ -19975,7 +20118,7 @@ function TogglePill({
19975
20118
  background: on ? OHW_BLUE_DARK3 : "#CBD5E1",
19976
20119
  transition: "background 120ms ease"
19977
20120
  },
19978
- children: /* @__PURE__ */ jsx22(
20121
+ children: /* @__PURE__ */ jsx23(
19979
20122
  "span",
19980
20123
  {
19981
20124
  style: {
@@ -20004,7 +20147,7 @@ function CarouselSlideToolbar({
20004
20147
  onChangeImage,
20005
20148
  onToggleAutoplay
20006
20149
  }) {
20007
- return /* @__PURE__ */ jsxs13(
20150
+ return /* @__PURE__ */ jsxs14(
20008
20151
  "div",
20009
20152
  {
20010
20153
  "data-ohw-bridge": "",
@@ -20027,11 +20170,11 @@ function CarouselSlideToolbar({
20027
20170
  pointerEvents: pending ? "none" : "auto"
20028
20171
  },
20029
20172
  children: [
20030
- /* @__PURE__ */ jsxs13("div", { style: { display: "flex", gap: 6, alignItems: "center" }, children: [
20031
- /* @__PURE__ */ jsx22(Pill3, { label: "Change Image", onClick: onChangeImage }),
20032
- /* @__PURE__ */ jsx22(TogglePill, { label: "Autoplay", on: autoplay, onToggle: onToggleAutoplay })
20173
+ /* @__PURE__ */ jsxs14("div", { style: { display: "flex", gap: 6, alignItems: "center" }, children: [
20174
+ /* @__PURE__ */ jsx23(Pill3, { label: "Change Image", onClick: onChangeImage }),
20175
+ /* @__PURE__ */ jsx23(TogglePill, { label: "Autoplay", on: autoplay, onToggle: onToggleAutoplay })
20033
20176
  ] }),
20034
- error && /* @__PURE__ */ jsx22("div", { style: { color: "#FCA5A5", fontSize: 11, maxWidth: 220, textAlign: "center" }, children: error })
20177
+ error && /* @__PURE__ */ jsx23("div", { style: { color: "#FCA5A5", fontSize: 11, maxWidth: 220, textAlign: "center" }, children: error })
20035
20178
  ]
20036
20179
  }
20037
20180
  );
@@ -20171,8 +20314,8 @@ function AiFadeCarouselOverlay({
20171
20314
  const activeItemRect = useLiveItemRect2(active);
20172
20315
  const TOOLBAR_APPROX_H = 90;
20173
20316
  const toolbarState = activeItemRect && activeItemRect.top < TOOLBAR_APPROX_H ? "active-bottom" : "active-top";
20174
- return /* @__PURE__ */ jsxs13(Fragment9, { children: [
20175
- hoverHandleRect && hover && /* @__PURE__ */ jsx22(
20317
+ return /* @__PURE__ */ jsxs14(Fragment10, { children: [
20318
+ hoverHandleRect && hover && /* @__PURE__ */ jsx23(
20176
20319
  "button",
20177
20320
  {
20178
20321
  type: "button",
@@ -20201,10 +20344,10 @@ function AiFadeCarouselOverlay({
20201
20344
  fontSize: 14,
20202
20345
  fontWeight: 700
20203
20346
  },
20204
- children: /* @__PURE__ */ jsx22(Star4, { size: 14, style: { pointerEvents: "none" } })
20347
+ children: /* @__PURE__ */ jsx23(Star4, { size: 14, style: { pointerEvents: "none" } })
20205
20348
  }
20206
20349
  ),
20207
- swapping && /* @__PURE__ */ jsx22(
20350
+ swapping && /* @__PURE__ */ jsx23(
20208
20351
  "div",
20209
20352
  {
20210
20353
  ref: skeletonRef,
@@ -20222,15 +20365,15 @@ function AiFadeCarouselOverlay({
20222
20365
  zIndex: 2147483646,
20223
20366
  pointerEvents: "none"
20224
20367
  },
20225
- children: /* @__PURE__ */ jsx22("style", { children: MEDIA_SKELETON_CSS })
20368
+ children: /* @__PURE__ */ jsx23("style", { children: MEDIA_SKELETON_CSS })
20226
20369
  }
20227
20370
  ),
20228
- activeItemRect && active && activeEntry && /* @__PURE__ */ jsx22(
20371
+ activeItemRect && active && activeEntry && /* @__PURE__ */ jsx23(
20229
20372
  ItemInteractionLayer,
20230
20373
  {
20231
20374
  rect: activeItemRect,
20232
20375
  state: toolbarState,
20233
- toolbar: /* @__PURE__ */ jsx22(
20376
+ toolbar: /* @__PURE__ */ jsx23(
20234
20377
  CarouselSlideToolbar,
20235
20378
  {
20236
20379
  pending,
@@ -20587,22 +20730,22 @@ import { useEffect as useEffect13 } from "react";
20587
20730
  import * as React9 from "react";
20588
20731
  import { Dialog as DialogPrimitive } from "radix-ui";
20589
20732
  import { X as X2 } from "lucide-react";
20590
- import { jsx as jsx23, jsxs as jsxs14 } from "react/jsx-runtime";
20733
+ import { jsx as jsx24, jsxs as jsxs15 } from "react/jsx-runtime";
20591
20734
  function Dialog2({
20592
20735
  ...props
20593
20736
  }) {
20594
- return /* @__PURE__ */ jsx23(DialogPrimitive.Root, { "data-slot": "dialog", ...props });
20737
+ return /* @__PURE__ */ jsx24(DialogPrimitive.Root, { "data-slot": "dialog", ...props });
20595
20738
  }
20596
20739
  function DialogPortal({
20597
20740
  ...props
20598
20741
  }) {
20599
- return /* @__PURE__ */ jsx23(DialogPrimitive.Portal, { ...props });
20742
+ return /* @__PURE__ */ jsx24(DialogPrimitive.Portal, { ...props });
20600
20743
  }
20601
20744
  function DialogOverlay({
20602
20745
  className,
20603
20746
  ...props
20604
20747
  }) {
20605
- return /* @__PURE__ */ jsx23(
20748
+ return /* @__PURE__ */ jsx24(
20606
20749
  DialogPrimitive.Overlay,
20607
20750
  {
20608
20751
  "data-slot": "dialog-overlay",
@@ -20615,9 +20758,9 @@ function DialogOverlay({
20615
20758
  var DialogContent = React9.forwardRef(
20616
20759
  ({ className, children, showCloseButton = true, container, ...props }, ref) => {
20617
20760
  const positionMode = container ? "absolute" : "fixed";
20618
- return /* @__PURE__ */ jsxs14(DialogPortal, { container: container ?? void 0, children: [
20619
- /* @__PURE__ */ jsx23(DialogOverlay, { className: cn(positionMode, "inset-0") }),
20620
- /* @__PURE__ */ jsxs14(
20761
+ return /* @__PURE__ */ jsxs15(DialogPortal, { container: container ?? void 0, children: [
20762
+ /* @__PURE__ */ jsx24(DialogOverlay, { className: cn(positionMode, "inset-0") }),
20763
+ /* @__PURE__ */ jsxs15(
20621
20764
  DialogPrimitive.Content,
20622
20765
  {
20623
20766
  ref,
@@ -20633,13 +20776,13 @@ var DialogContent = React9.forwardRef(
20633
20776
  ...props,
20634
20777
  children: [
20635
20778
  children,
20636
- showCloseButton ? /* @__PURE__ */ jsx23(
20779
+ showCloseButton ? /* @__PURE__ */ jsx24(
20637
20780
  DialogPrimitive.Close,
20638
20781
  {
20639
20782
  type: "button",
20640
20783
  className: "absolute right-[9px] top-[9px] rounded-sm p-1.5 text-foreground hover:bg-muted/50",
20641
20784
  "aria-label": "Close",
20642
- children: /* @__PURE__ */ jsx23(X2, { size: 16, "aria-hidden": true })
20785
+ children: /* @__PURE__ */ jsx24(X2, { size: 16, "aria-hidden": true })
20643
20786
  }
20644
20787
  ) : null
20645
20788
  ]
@@ -20653,13 +20796,13 @@ function DialogHeader({
20653
20796
  className,
20654
20797
  ...props
20655
20798
  }) {
20656
- return /* @__PURE__ */ jsx23("div", { className: cn("flex flex-col gap-1.5", className), ...props });
20799
+ return /* @__PURE__ */ jsx24("div", { className: cn("flex flex-col gap-1.5", className), ...props });
20657
20800
  }
20658
20801
  function DialogFooter({
20659
20802
  className,
20660
20803
  ...props
20661
20804
  }) {
20662
- return /* @__PURE__ */ jsx23(
20805
+ return /* @__PURE__ */ jsx24(
20663
20806
  "div",
20664
20807
  {
20665
20808
  className: cn("flex items-center justify-end gap-2", className),
@@ -20667,7 +20810,7 @@ function DialogFooter({
20667
20810
  }
20668
20811
  );
20669
20812
  }
20670
- var DialogTitle = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
20813
+ var DialogTitle = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx24(
20671
20814
  DialogPrimitive.Title,
20672
20815
  {
20673
20816
  ref,
@@ -20679,7 +20822,7 @@ var DialogTitle = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE
20679
20822
  }
20680
20823
  ));
20681
20824
  DialogTitle.displayName = DialogPrimitive.Title.displayName;
20682
- var DialogDescription = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx23(
20825
+ var DialogDescription = React9.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx24(
20683
20826
  DialogPrimitive.Description,
20684
20827
  {
20685
20828
  ref,
@@ -20695,19 +20838,19 @@ import { Info, X as X4 } from "lucide-react";
20695
20838
 
20696
20839
  // src/ui/link-modal/DestinationBreadcrumb.tsx
20697
20840
  import { ArrowRight as ArrowRight2, File, GalleryVertical } from "lucide-react";
20698
- import { jsx as jsx24, jsxs as jsxs15 } from "react/jsx-runtime";
20841
+ import { jsx as jsx25, jsxs as jsxs16 } from "react/jsx-runtime";
20699
20842
  function DestinationBreadcrumb({
20700
20843
  pageTitle,
20701
20844
  sectionLabel
20702
20845
  }) {
20703
- return /* @__PURE__ */ jsxs15("div", { className: "flex w-full flex-col gap-2", children: [
20704
- /* @__PURE__ */ jsx24("p", { className: "text-sm font-medium! text-foreground m-0", children: "Destination" }),
20705
- /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-3", children: [
20706
- /* @__PURE__ */ jsxs15("div", { className: "flex items-center gap-2", children: [
20707
- /* @__PURE__ */ jsx24(File, { size: 16, className: "shrink-0 text-foreground", "aria-hidden": true }),
20708
- /* @__PURE__ */ jsx24("span", { className: "text-sm font-medium leading-none text-foreground!", children: pageTitle })
20846
+ return /* @__PURE__ */ jsxs16("div", { className: "flex w-full flex-col gap-2", children: [
20847
+ /* @__PURE__ */ jsx25("p", { className: "text-sm font-medium! text-foreground m-0", children: "Destination" }),
20848
+ /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-3", children: [
20849
+ /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2", children: [
20850
+ /* @__PURE__ */ jsx25(File, { size: 16, className: "shrink-0 text-foreground", "aria-hidden": true }),
20851
+ /* @__PURE__ */ jsx25("span", { className: "text-sm font-medium leading-none text-foreground!", children: pageTitle })
20709
20852
  ] }),
20710
- /* @__PURE__ */ jsx24(
20853
+ /* @__PURE__ */ jsx25(
20711
20854
  ArrowRight2,
20712
20855
  {
20713
20856
  size: 16,
@@ -20715,8 +20858,8 @@ function DestinationBreadcrumb({
20715
20858
  "aria-hidden": true
20716
20859
  }
20717
20860
  ),
20718
- /* @__PURE__ */ jsxs15("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
20719
- /* @__PURE__ */ jsx24(
20861
+ /* @__PURE__ */ jsxs16("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
20862
+ /* @__PURE__ */ jsx25(
20720
20863
  GalleryVertical,
20721
20864
  {
20722
20865
  size: 16,
@@ -20724,7 +20867,7 @@ function DestinationBreadcrumb({
20724
20867
  "aria-hidden": true
20725
20868
  }
20726
20869
  ),
20727
- /* @__PURE__ */ jsx24("span", { className: "truncate text-sm font-medium leading-none text-foreground", children: sectionLabel })
20870
+ /* @__PURE__ */ jsx25("span", { className: "truncate text-sm font-medium leading-none text-foreground", children: sectionLabel })
20728
20871
  ] })
20729
20872
  ] })
20730
20873
  ] });
@@ -20732,22 +20875,22 @@ function DestinationBreadcrumb({
20732
20875
 
20733
20876
  // src/ui/link-modal/SectionTreeItem.tsx
20734
20877
  import { GalleryVertical as GalleryVertical2 } from "lucide-react";
20735
- import { jsx as jsx25, jsxs as jsxs16 } from "react/jsx-runtime";
20878
+ import { jsx as jsx26, jsxs as jsxs17 } from "react/jsx-runtime";
20736
20879
  function SectionTreeItem({
20737
20880
  section,
20738
20881
  onSelect,
20739
20882
  selected
20740
20883
  }) {
20741
20884
  const interactive = Boolean(onSelect);
20742
- return /* @__PURE__ */ jsxs16("div", { className: "flex h-9 w-full items-end pl-3", children: [
20743
- /* @__PURE__ */ jsx25(
20885
+ return /* @__PURE__ */ jsxs17("div", { className: "flex h-9 w-full items-end pl-3", children: [
20886
+ /* @__PURE__ */ jsx26(
20744
20887
  "div",
20745
20888
  {
20746
20889
  className: "-mr-px h-9 w-2 shrink-0 rounded-bl-sm border-b border-l border-border mb-4",
20747
20890
  "aria-hidden": true
20748
20891
  }
20749
20892
  ),
20750
- /* @__PURE__ */ jsxs16(
20893
+ /* @__PURE__ */ jsxs17(
20751
20894
  "div",
20752
20895
  {
20753
20896
  role: interactive ? "button" : void 0,
@@ -20765,7 +20908,7 @@ function SectionTreeItem({
20765
20908
  interactive && selected && "border-bridge-primary"
20766
20909
  ),
20767
20910
  children: [
20768
- /* @__PURE__ */ jsx25(
20911
+ /* @__PURE__ */ jsx26(
20769
20912
  GalleryVertical2,
20770
20913
  {
20771
20914
  size: 16,
@@ -20773,7 +20916,7 @@ function SectionTreeItem({
20773
20916
  "aria-hidden": true
20774
20917
  }
20775
20918
  ),
20776
- /* @__PURE__ */ jsx25("span", { className: "truncate text-sm font-normal leading-5 text-foreground", children: section.label })
20919
+ /* @__PURE__ */ jsx26("span", { className: "truncate text-sm font-normal leading-5 text-foreground", children: section.label })
20777
20920
  ]
20778
20921
  }
20779
20922
  )
@@ -20785,10 +20928,10 @@ import { useEffect as useEffect10, useId as useId2, useRef as useRef9, useState
20785
20928
 
20786
20929
  // src/ui/input.tsx
20787
20930
  import * as React10 from "react";
20788
- import { jsx as jsx26 } from "react/jsx-runtime";
20931
+ import { jsx as jsx27 } from "react/jsx-runtime";
20789
20932
  var Input = React10.forwardRef(
20790
20933
  ({ className, type, ...props }, ref) => {
20791
- return /* @__PURE__ */ jsx26(
20934
+ return /* @__PURE__ */ jsx27(
20792
20935
  "input",
20793
20936
  {
20794
20937
  type,
@@ -20807,9 +20950,9 @@ Input.displayName = "Input";
20807
20950
 
20808
20951
  // src/ui/label.tsx
20809
20952
  import { Label as LabelPrimitive } from "radix-ui";
20810
- import { jsx as jsx27 } from "react/jsx-runtime";
20953
+ import { jsx as jsx28 } from "react/jsx-runtime";
20811
20954
  function Label({ className, ...props }) {
20812
- return /* @__PURE__ */ jsx27(
20955
+ return /* @__PURE__ */ jsx28(
20813
20956
  LabelPrimitive.Root,
20814
20957
  {
20815
20958
  "data-slot": "label",
@@ -20821,11 +20964,11 @@ function Label({ className, ...props }) {
20821
20964
 
20822
20965
  // src/ui/link-modal/UrlOrPageInput.tsx
20823
20966
  import { ChevronDown as ChevronDown4, File as File2, X as X3 } from "lucide-react";
20824
- import { jsx as jsx28, jsxs as jsxs17 } from "react/jsx-runtime";
20967
+ import { jsx as jsx29, jsxs as jsxs18 } from "react/jsx-runtime";
20825
20968
  function FieldChevron({
20826
20969
  onClick
20827
20970
  }) {
20828
- return /* @__PURE__ */ jsx28(
20971
+ return /* @__PURE__ */ jsx29(
20829
20972
  "button",
20830
20973
  {
20831
20974
  type: "button",
@@ -20833,7 +20976,7 @@ function FieldChevron({
20833
20976
  onClick,
20834
20977
  "aria-label": "Open page list",
20835
20978
  tabIndex: -1,
20836
- children: /* @__PURE__ */ jsx28(ChevronDown4, { size: 16 })
20979
+ children: /* @__PURE__ */ jsx29(ChevronDown4, { size: 16 })
20837
20980
  }
20838
20981
  );
20839
20982
  }
@@ -20894,11 +21037,11 @@ function UrlOrPageInput({
20894
21037
  "data-ohw-link-field flex h-[36px] w-full items-center overflow-hidden rounded-md border bg-background pl-3 pr-3 py-2 outline-none transition-[border-color,box-shadow]",
20895
21038
  urlError ? "border-destructive shadow-[0_0_0_1px_var(--ohw-destructive)]" : isFocused ? "border-bridge-primary shadow-[0_0_0_1px_var(--ohw-primary)]" : "border-input"
20896
21039
  );
20897
- return /* @__PURE__ */ jsxs17("div", { className: "flex w-full flex-col gap-2 p-0", children: [
20898
- /* @__PURE__ */ jsx28(Label, { htmlFor: inputId, className: cn(urlError && "text-destructive"), children: "Destination" }),
20899
- /* @__PURE__ */ jsxs17("div", { ref: rootRef, className: "relative w-full", children: [
20900
- /* @__PURE__ */ jsxs17("div", { "data-ohw-link-field": true, className: fieldClassName, children: [
20901
- selectedPage ? /* @__PURE__ */ jsx28("div", { className: "flex shrink-0 items-center pr-2", children: /* @__PURE__ */ jsx28(
21040
+ return /* @__PURE__ */ jsxs18("div", { className: "flex w-full flex-col gap-2 p-0", children: [
21041
+ /* @__PURE__ */ jsx29(Label, { htmlFor: inputId, className: cn(urlError && "text-destructive"), children: "Destination" }),
21042
+ /* @__PURE__ */ jsxs18("div", { ref: rootRef, className: "relative w-full", children: [
21043
+ /* @__PURE__ */ jsxs18("div", { "data-ohw-link-field": true, className: fieldClassName, children: [
21044
+ selectedPage ? /* @__PURE__ */ jsx29("div", { className: "flex shrink-0 items-center pr-2", children: /* @__PURE__ */ jsx29(
20902
21045
  File2,
20903
21046
  {
20904
21047
  size: 16,
@@ -20906,7 +21049,7 @@ function UrlOrPageInput({
20906
21049
  "aria-hidden": true
20907
21050
  }
20908
21051
  ) }) : null,
20909
- readOnly ? /* @__PURE__ */ jsx28("span", { className: "min-w-0 flex-1 truncate text-sm leading-5 text-foreground", children: selectedPage?.title ?? value }) : /* @__PURE__ */ jsx28(
21052
+ readOnly ? /* @__PURE__ */ jsx29("span", { className: "min-w-0 flex-1 truncate text-sm leading-5 text-foreground", children: selectedPage?.title ?? value }) : /* @__PURE__ */ jsx29(
20910
21053
  Input,
20911
21054
  {
20912
21055
  ref: inputRef,
@@ -20932,7 +21075,7 @@ function UrlOrPageInput({
20932
21075
  )
20933
21076
  }
20934
21077
  ),
20935
- selectedPage && !readOnly ? /* @__PURE__ */ jsx28(
21078
+ selectedPage && !readOnly ? /* @__PURE__ */ jsx29(
20936
21079
  "button",
20937
21080
  {
20938
21081
  type: "button",
@@ -20940,26 +21083,26 @@ function UrlOrPageInput({
20940
21083
  onMouseDown: clearSelection,
20941
21084
  "aria-label": "Clear selected page",
20942
21085
  tabIndex: -1,
20943
- children: /* @__PURE__ */ jsx28(X3, { size: 16, "aria-hidden": true })
21086
+ children: /* @__PURE__ */ jsx29(X3, { size: 16, "aria-hidden": true })
20944
21087
  }
20945
21088
  ) : null,
20946
- !readOnly ? /* @__PURE__ */ jsx28(FieldChevron, { onClick: toggleDropdown }) : null
21089
+ !readOnly ? /* @__PURE__ */ jsx29(FieldChevron, { onClick: toggleDropdown }) : null
20947
21090
  ] }),
20948
- dropdownOpen && !readOnly && filteredPages.length > 0 ? /* @__PURE__ */ jsx28(
21091
+ dropdownOpen && !readOnly && filteredPages.length > 0 ? /* @__PURE__ */ jsx29(
20949
21092
  "div",
20950
21093
  {
20951
21094
  "data-ohw-link-page-dropdown": "",
20952
21095
  className: "absolute left-0 right-0 top-[calc(100%+4px)] z-50 max-h-48 overflow-auto rounded-lg border border-border bg-popover py-1 shadow-lg",
20953
21096
  onMouseDown: (e) => e.preventDefault(),
20954
- children: filteredPages.map((page) => /* @__PURE__ */ jsxs17(
21097
+ children: filteredPages.map((page) => /* @__PURE__ */ jsxs18(
20955
21098
  "button",
20956
21099
  {
20957
21100
  type: "button",
20958
21101
  className: "flex h-9 w-full items-center gap-2 border-0 bg-transparent px-3 text-left text-sm leading-5 text-foreground outline-none hover:bg-muted",
20959
21102
  onClick: () => onPageSelect(page),
20960
21103
  children: [
20961
- /* @__PURE__ */ jsx28(File2, { size: 16, className: "shrink-0", "aria-hidden": true }),
20962
- /* @__PURE__ */ jsx28("span", { className: "truncate", children: page.title })
21104
+ /* @__PURE__ */ jsx29(File2, { size: 16, className: "shrink-0", "aria-hidden": true }),
21105
+ /* @__PURE__ */ jsx29("span", { className: "truncate", children: page.title })
20963
21106
  ]
20964
21107
  },
20965
21108
  page.path
@@ -20967,34 +21110,34 @@ function UrlOrPageInput({
20967
21110
  }
20968
21111
  ) : null
20969
21112
  ] }),
20970
- urlError ? /* @__PURE__ */ jsx28("p", { className: "text-sm font-medium text-destructive", children: urlError }) : null
21113
+ urlError ? /* @__PURE__ */ jsx29("p", { className: "text-sm font-medium text-destructive", children: urlError }) : null
20971
21114
  ] });
20972
21115
  }
20973
21116
 
20974
21117
  // src/ui/link-modal/LinkEditorPanel.tsx
20975
- import { Fragment as Fragment10, jsx as jsx29, jsxs as jsxs18 } from "react/jsx-runtime";
21118
+ import { Fragment as Fragment11, jsx as jsx30, jsxs as jsxs19 } from "react/jsx-runtime";
20976
21119
  function LinkEditorPanel({ state, onClose }) {
20977
21120
  const isCancel = state.secondaryLabel === "Cancel" || state.secondaryLabel === "Back to sections";
20978
- return /* @__PURE__ */ jsxs18(Fragment10, { children: [
20979
- /* @__PURE__ */ jsx29(DialogClose, { asChild: true, children: /* @__PURE__ */ jsx29(
21121
+ return /* @__PURE__ */ jsxs19(Fragment11, { children: [
21122
+ /* @__PURE__ */ jsx30(DialogClose, { asChild: true, children: /* @__PURE__ */ jsx30(
20980
21123
  "button",
20981
21124
  {
20982
21125
  type: "button",
20983
21126
  className: "absolute right-[9px] top-[9px] rounded-sm p-1.5 text-foreground hover:bg-muted/50 h-7",
20984
21127
  "aria-label": "Close",
20985
21128
  onClick: onClose,
20986
- children: /* @__PURE__ */ jsx29(X4, { size: 16, "aria-hidden": true })
21129
+ children: /* @__PURE__ */ jsx30(X4, { size: 16, "aria-hidden": true })
20987
21130
  }
20988
21131
  ) }),
20989
- /* @__PURE__ */ jsx29(DialogHeader, { className: "w-full gap-1.5 p-6 pr-12", children: /* @__PURE__ */ jsx29(DialogTitle, { className: "m-0 w-full break-words", children: state.title }) }),
20990
- /* @__PURE__ */ jsxs18("div", { className: "flex w-full flex-col gap-3 px-6 pb-8 pt-1", children: [
20991
- state.showBreadcrumb && state.selectedPage && state.selectedSection ? /* @__PURE__ */ jsx29(
21132
+ /* @__PURE__ */ jsx30(DialogHeader, { className: "w-full gap-1.5 p-6 pr-12", children: /* @__PURE__ */ jsx30(DialogTitle, { className: "m-0 w-full break-words", children: state.title }) }),
21133
+ /* @__PURE__ */ jsxs19("div", { className: "flex w-full flex-col gap-3 px-6 pb-8 pt-1", children: [
21134
+ state.showBreadcrumb && state.selectedPage && state.selectedSection ? /* @__PURE__ */ jsx30(
20992
21135
  DestinationBreadcrumb,
20993
21136
  {
20994
21137
  pageTitle: state.selectedPage.title,
20995
21138
  sectionLabel: state.selectedSection.label
20996
21139
  }
20997
- ) : /* @__PURE__ */ jsx29(
21140
+ ) : /* @__PURE__ */ jsx30(
20998
21141
  UrlOrPageInput,
20999
21142
  {
21000
21143
  value: state.searchValue,
@@ -21007,8 +21150,8 @@ function LinkEditorPanel({ state, onClose }) {
21007
21150
  urlError: state.urlError
21008
21151
  }
21009
21152
  ),
21010
- state.showChooseSection ? /* @__PURE__ */ jsxs18("div", { className: "flex flex-col justify-center gap-2", children: [
21011
- /* @__PURE__ */ jsx29(
21153
+ state.showChooseSection ? /* @__PURE__ */ jsxs19("div", { className: "flex flex-col justify-center gap-2", children: [
21154
+ /* @__PURE__ */ jsx30(
21012
21155
  Button,
21013
21156
  {
21014
21157
  type: "button",
@@ -21019,15 +21162,15 @@ function LinkEditorPanel({ state, onClose }) {
21019
21162
  children: "Choose a section"
21020
21163
  }
21021
21164
  ),
21022
- /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-1 text-sm text-muted-foreground", children: [
21023
- /* @__PURE__ */ jsx29(Info, { size: 16, className: "shrink-0", "aria-hidden": true }),
21024
- /* @__PURE__ */ jsx29("span", { children: "Pick a section this link should scroll to." })
21165
+ /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-1 text-sm text-muted-foreground", children: [
21166
+ /* @__PURE__ */ jsx30(Info, { size: 16, className: "shrink-0", "aria-hidden": true }),
21167
+ /* @__PURE__ */ jsx30("span", { children: "Pick a section this link should scroll to." })
21025
21168
  ] })
21026
21169
  ] }) : null,
21027
- state.showSectionRow && state.selectedSection ? /* @__PURE__ */ jsx29(SectionTreeItem, { section: state.selectedSection, selected: true }) : null
21170
+ state.showSectionRow && state.selectedSection ? /* @__PURE__ */ jsx30(SectionTreeItem, { section: state.selectedSection, selected: true }) : null
21028
21171
  ] }),
21029
- /* @__PURE__ */ jsxs18(DialogFooter, { className: "w-full px-6 pb-6", children: [
21030
- /* @__PURE__ */ jsx29(
21172
+ /* @__PURE__ */ jsxs19(DialogFooter, { className: "w-full px-6 pb-6", children: [
21173
+ /* @__PURE__ */ jsx30(
21031
21174
  Button,
21032
21175
  {
21033
21176
  type: "button",
@@ -21042,7 +21185,7 @@ function LinkEditorPanel({ state, onClose }) {
21042
21185
  children: state.secondaryLabel
21043
21186
  }
21044
21187
  ),
21045
- /* @__PURE__ */ jsx29(
21188
+ /* @__PURE__ */ jsx30(
21046
21189
  Button,
21047
21190
  {
21048
21191
  type: "button",
@@ -21085,7 +21228,7 @@ function getIframeChromeClip(parentScroll) {
21085
21228
  }
21086
21229
 
21087
21230
  // src/ui/link-modal/SectionPickerOverlay.tsx
21088
- import { jsx as jsx30, jsxs as jsxs19 } from "react/jsx-runtime";
21231
+ import { jsx as jsx31, jsxs as jsxs20 } from "react/jsx-runtime";
21089
21232
  var DIM_OVERLAY = "rgba(0, 0, 0, 0.45)";
21090
21233
  function rectsEqual(a, b) {
21091
21234
  if (a.size !== b.size) return false;
@@ -21316,7 +21459,7 @@ function SectionPickerOverlay({
21316
21459
  const portalRoot = typeof document !== "undefined" ? document.querySelector("[data-ohw-bridge-root]") ?? document.body : null;
21317
21460
  if (!portalRoot) return null;
21318
21461
  return createPortal2(
21319
- /* @__PURE__ */ jsxs19(
21462
+ /* @__PURE__ */ jsxs20(
21320
21463
  "div",
21321
21464
  {
21322
21465
  "data-ohw-section-picker": "",
@@ -21326,12 +21469,12 @@ function SectionPickerOverlay({
21326
21469
  role: "dialog",
21327
21470
  "aria-label": "Choose a section",
21328
21471
  children: [
21329
- /* @__PURE__ */ jsx30(
21472
+ /* @__PURE__ */ jsx31(
21330
21473
  "div",
21331
21474
  {
21332
21475
  className: "pointer-events-auto fixed left-5 z-[2]",
21333
21476
  style: { top: chromeClip.top + 20 },
21334
- children: /* @__PURE__ */ jsxs19(
21477
+ children: /* @__PURE__ */ jsxs20(
21335
21478
  Button,
21336
21479
  {
21337
21480
  type: "button",
@@ -21340,14 +21483,14 @@ function SectionPickerOverlay({
21340
21483
  className: "h-8 min-w-0 gap-1 border-border bg-background px-2 py-1.5 shadow-sm hover:bg-muted cursor-pointer",
21341
21484
  onClick: onBack,
21342
21485
  children: [
21343
- /* @__PURE__ */ jsx30(ArrowLeft2, { className: "size-4 shrink-0", "aria-hidden": true }),
21486
+ /* @__PURE__ */ jsx31(ArrowLeft2, { className: "size-4 shrink-0", "aria-hidden": true }),
21344
21487
  "Back"
21345
21488
  ]
21346
21489
  }
21347
21490
  )
21348
21491
  }
21349
21492
  ),
21350
- /* @__PURE__ */ jsx30(
21493
+ /* @__PURE__ */ jsx31(
21351
21494
  "div",
21352
21495
  {
21353
21496
  className: "pointer-events-none fixed left-1/2 z-[2] rounded-lg px-4 py-3 text-xs leading-4 tracking-[0.18px] text-white shadow-md",
@@ -21360,7 +21503,7 @@ function SectionPickerOverlay({
21360
21503
  children: "Click on section to select"
21361
21504
  }
21362
21505
  ),
21363
- !isOnTargetPage ? /* @__PURE__ */ jsx30(
21506
+ !isOnTargetPage ? /* @__PURE__ */ jsx31(
21364
21507
  "div",
21365
21508
  {
21366
21509
  className: "pointer-events-none fixed left-1/2 z-[1] -translate-x-1/2 rounded-md px-3 py-2 text-sm text-muted-foreground shadow-sm",
@@ -21368,14 +21511,14 @@ function SectionPickerOverlay({
21368
21511
  children: "Loading page preview\u2026"
21369
21512
  }
21370
21513
  ) : null,
21371
- isOnTargetPage && liveSections.length === 0 ? /* @__PURE__ */ jsx30("div", { className: "pointer-events-auto fixed inset-0 z-[1] flex items-center justify-center bg-muted/40", children: /* @__PURE__ */ jsx30("p", { className: "text-sm text-muted-foreground", children: "No sections found on this page." }) }) : null,
21514
+ isOnTargetPage && liveSections.length === 0 ? /* @__PURE__ */ jsx31("div", { className: "pointer-events-auto fixed inset-0 z-[1] flex items-center justify-center bg-muted/40", children: /* @__PURE__ */ jsx31("p", { className: "text-sm text-muted-foreground", children: "No sections found on this page." }) }) : null,
21372
21515
  isOnTargetPage ? liveSections.map((section) => {
21373
21516
  const rect = rects.get(section.id);
21374
21517
  if (!rect || rect.width <= 0 || rect.height <= 0) return null;
21375
21518
  const isSelected = selectedId === section.id;
21376
21519
  const isHovered = hoveredId === section.id;
21377
21520
  const isLit = isSelected || isHovered;
21378
- return /* @__PURE__ */ jsxs19(
21521
+ return /* @__PURE__ */ jsxs20(
21379
21522
  "button",
21380
21523
  {
21381
21524
  type: "button",
@@ -21390,7 +21533,7 @@ function SectionPickerOverlay({
21390
21533
  "aria-label": `Select section ${section.label}`,
21391
21534
  onClick: () => handleSelect(section),
21392
21535
  children: [
21393
- isLit ? /* @__PURE__ */ jsx30(
21536
+ isLit ? /* @__PURE__ */ jsx31(
21394
21537
  "span",
21395
21538
  {
21396
21539
  className: "pointer-events-none absolute",
@@ -21403,13 +21546,13 @@ function SectionPickerOverlay({
21403
21546
  "aria-hidden": true
21404
21547
  }
21405
21548
  ) : null,
21406
- isSelected ? /* @__PURE__ */ jsx30(
21549
+ isSelected ? /* @__PURE__ */ jsx31(
21407
21550
  "span",
21408
21551
  {
21409
21552
  className: "absolute right-3 top-3 flex size-8 items-center justify-center rounded-full text-white",
21410
21553
  style: { backgroundColor: "var(--ohw-primary, #0885fe)" },
21411
21554
  "aria-hidden": true,
21412
- children: /* @__PURE__ */ jsx30(Check3, { className: "size-5" })
21555
+ children: /* @__PURE__ */ jsx31(Check3, { className: "size-5" })
21413
21556
  }
21414
21557
  ) : null
21415
21558
  ]
@@ -21589,7 +21732,7 @@ function useLinkModalState({
21589
21732
  }
21590
21733
 
21591
21734
  // src/ui/link-modal/LinkPopover.tsx
21592
- import { Fragment as Fragment11, jsx as jsx31, jsxs as jsxs20 } from "react/jsx-runtime";
21735
+ import { Fragment as Fragment12, jsx as jsx32, jsxs as jsxs21 } from "react/jsx-runtime";
21593
21736
  function postToParent(data) {
21594
21737
  window.parent?.postMessage(data, "*");
21595
21738
  }
@@ -21685,15 +21828,15 @@ function LinkPopover({
21685
21828
  );
21686
21829
  };
21687
21830
  }, [open, sectionPickerActive]);
21688
- return /* @__PURE__ */ jsxs20(Fragment11, { children: [
21689
- /* @__PURE__ */ jsx31(
21831
+ return /* @__PURE__ */ jsxs21(Fragment12, { children: [
21832
+ /* @__PURE__ */ jsx32(
21690
21833
  Dialog2,
21691
21834
  {
21692
21835
  open: open && !sectionPickerActive,
21693
21836
  onOpenChange: (next) => {
21694
21837
  if (!next) onClose?.();
21695
21838
  },
21696
- children: /* @__PURE__ */ jsx31(
21839
+ children: /* @__PURE__ */ jsx32(
21697
21840
  DialogContent,
21698
21841
  {
21699
21842
  ref: panelRef,
@@ -21703,12 +21846,12 @@ function LinkPopover({
21703
21846
  "data-ohw-bridge": "",
21704
21847
  showCloseButton: false,
21705
21848
  className: "gap-0 p-0 w-full max-w-[448px] pointer-events-auto z-[2147483646] overflow-visible",
21706
- children: /* @__PURE__ */ jsx31(LinkEditorPanel, { state, onClose })
21849
+ children: /* @__PURE__ */ jsx32(LinkEditorPanel, { state, onClose })
21707
21850
  }
21708
21851
  )
21709
21852
  }
21710
21853
  ),
21711
- sectionPickerActive && state.selectedPage ? /* @__PURE__ */ jsx31(
21854
+ sectionPickerActive && state.selectedPage ? /* @__PURE__ */ jsx32(
21712
21855
  SectionPickerOverlay,
21713
21856
  {
21714
21857
  pagePath: state.selectedPage.path,
@@ -21867,7 +22010,7 @@ import {
21867
22010
  useState as useState15
21868
22011
  } from "react";
21869
22012
  import { X as X5 } from "lucide-react";
21870
- import { jsx as jsx32, jsxs as jsxs21 } from "react/jsx-runtime";
22013
+ import { jsx as jsx33, jsxs as jsxs22 } from "react/jsx-runtime";
21871
22014
  var PANEL_WIDTH = 256;
21872
22015
  var EDGE_MARGIN = 16;
21873
22016
  var HEADER_MIN = 56;
@@ -22039,7 +22182,7 @@ function FloatingPanel({
22039
22182
  }, [open]);
22040
22183
  useEffect14(() => () => document.documentElement.removeAttribute("data-ohw-panel-dragging"), []);
22041
22184
  if (!open) return null;
22042
- return /* @__PURE__ */ jsxs21(
22185
+ return /* @__PURE__ */ jsxs22(
22043
22186
  "div",
22044
22187
  {
22045
22188
  ref: panelRef,
@@ -22056,7 +22199,7 @@ function FloatingPanel({
22056
22199
  onPointerDown: (e) => e.stopPropagation(),
22057
22200
  onClick: (e) => e.stopPropagation(),
22058
22201
  children: [
22059
- /* @__PURE__ */ jsxs21(
22202
+ /* @__PURE__ */ jsxs22(
22060
22203
  "div",
22061
22204
  {
22062
22205
  "data-ohw-floating-panel-header": "",
@@ -22066,14 +22209,14 @@ function FloatingPanel({
22066
22209
  onPointerUp: endDrag,
22067
22210
  onPointerCancel: endDrag,
22068
22211
  children: [
22069
- /* @__PURE__ */ jsxs21("div", { className: "flex min-w-0 flex-1 flex-col gap-1.5", children: [
22070
- /* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-2", children: [
22071
- icon ? /* @__PURE__ */ jsx32("span", { className: "shrink-0 text-foreground", children: icon }) : null,
22072
- /* @__PURE__ */ jsx32("p", { className: "min-w-0 flex-1 text-lg font-semibold leading-7 text-foreground", children: title })
22212
+ /* @__PURE__ */ jsxs22("div", { className: "flex min-w-0 flex-1 flex-col gap-1.5", children: [
22213
+ /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-2", children: [
22214
+ icon ? /* @__PURE__ */ jsx33("span", { className: "shrink-0 text-foreground", children: icon }) : null,
22215
+ /* @__PURE__ */ jsx33("p", { className: "min-w-0 flex-1 text-lg font-semibold leading-7 text-foreground", children: title })
22073
22216
  ] }),
22074
- context ? /* @__PURE__ */ jsx32("p", { className: "w-full text-sm leading-5 text-muted-foreground", children: context }) : null
22217
+ context ? /* @__PURE__ */ jsx33("p", { className: "w-full text-sm leading-5 text-muted-foreground", children: context }) : null
22075
22218
  ] }),
22076
- /* @__PURE__ */ jsx32(
22219
+ /* @__PURE__ */ jsx33(
22077
22220
  "button",
22078
22221
  {
22079
22222
  type: "button",
@@ -22085,13 +22228,13 @@ function FloatingPanel({
22085
22228
  onClose();
22086
22229
  },
22087
22230
  onPointerDown: (e) => e.stopPropagation(),
22088
- children: /* @__PURE__ */ jsx32(X5, { size: 16, "aria-hidden": true })
22231
+ children: /* @__PURE__ */ jsx33(X5, { size: 16, "aria-hidden": true })
22089
22232
  }
22090
22233
  )
22091
22234
  ]
22092
22235
  }
22093
22236
  ),
22094
- /* @__PURE__ */ jsx32(
22237
+ /* @__PURE__ */ jsx33(
22095
22238
  "div",
22096
22239
  {
22097
22240
  "data-ohw-floating-panel-body": "",
@@ -22109,15 +22252,15 @@ function FloatingPanel({
22109
22252
  }
22110
22253
 
22111
22254
  // src/ui/socials-display-panel.tsx
22112
- import { jsx as jsx33, jsxs as jsxs22 } from "react/jsx-runtime";
22255
+ import { jsx as jsx34, jsxs as jsxs23 } from "react/jsx-runtime";
22113
22256
  function DisplaySwitch({
22114
22257
  label,
22115
22258
  checked,
22116
22259
  disabled,
22117
22260
  onChange
22118
22261
  }) {
22119
- return /* @__PURE__ */ jsxs22("div", { className: "flex w-full items-center gap-2", children: [
22120
- /* @__PURE__ */ jsx33(
22262
+ return /* @__PURE__ */ jsxs23("div", { className: "flex w-full items-center gap-2", children: [
22263
+ /* @__PURE__ */ jsx34(
22121
22264
  "span",
22122
22265
  {
22123
22266
  className: cn(
@@ -22127,7 +22270,7 @@ function DisplaySwitch({
22127
22270
  children: label
22128
22271
  }
22129
22272
  ),
22130
- /* @__PURE__ */ jsx33(
22273
+ /* @__PURE__ */ jsx34(
22131
22274
  "button",
22132
22275
  {
22133
22276
  type: "button",
@@ -22141,7 +22284,7 @@ function DisplaySwitch({
22141
22284
  checked ? "bg-bridge-primary" : "bg-primary-50",
22142
22285
  disabled ? "cursor-default opacity-50" : "cursor-pointer"
22143
22286
  ),
22144
- children: /* @__PURE__ */ jsx33(
22287
+ children: /* @__PURE__ */ jsx34(
22145
22288
  "span",
22146
22289
  {
22147
22290
  className: cn(
@@ -22155,8 +22298,8 @@ function DisplaySwitch({
22155
22298
  ] });
22156
22299
  }
22157
22300
  function SocialsDisplayPanel({ display, onChange, className }) {
22158
- return /* @__PURE__ */ jsxs22("div", { className: cn("flex w-full flex-col gap-3", className), children: [
22159
- /* @__PURE__ */ jsx33(
22301
+ return /* @__PURE__ */ jsxs23("div", { className: cn("flex w-full flex-col gap-3", className), children: [
22302
+ /* @__PURE__ */ jsx34(
22160
22303
  DisplaySwitch,
22161
22304
  {
22162
22305
  label: "Text",
@@ -22165,7 +22308,7 @@ function SocialsDisplayPanel({ display, onChange, className }) {
22165
22308
  onChange: (text) => onChange({ ...display, text })
22166
22309
  }
22167
22310
  ),
22168
- /* @__PURE__ */ jsx33(
22311
+ /* @__PURE__ */ jsx34(
22169
22312
  DisplaySwitch,
22170
22313
  {
22171
22314
  label: "Icon",
@@ -22179,7 +22322,7 @@ function SocialsDisplayPanel({ display, onChange, className }) {
22179
22322
 
22180
22323
  // src/ui/button-style-panel.tsx
22181
22324
  import { Check as Check4 } from "lucide-react";
22182
- import { jsx as jsx34, jsxs as jsxs23 } from "react/jsx-runtime";
22325
+ import { jsx as jsx35, jsxs as jsxs24 } from "react/jsx-runtime";
22183
22326
  var SIZE_LABEL = { s: "S", m: "M", l: "L" };
22184
22327
  function ButtonStylePanel({
22185
22328
  variants,
@@ -22193,15 +22336,15 @@ function ButtonStylePanel({
22193
22336
  }) {
22194
22337
  const preview = scaleGeometry(sizes.m, 0.75);
22195
22338
  const label = previewLabel.trim() || "Book Now";
22196
- return /* @__PURE__ */ jsxs23("div", { className: "flex w-full flex-col gap-5", children: [
22197
- /* @__PURE__ */ jsxs23("section", { className: "flex w-full flex-col gap-2.5", children: [
22198
- /* @__PURE__ */ jsx34("h3", { className: "text-xs font-semibold uppercase leading-4 tracking-[0.6px] text-stone-500 font-sans", children: "Variants" }),
22199
- /* @__PURE__ */ jsx34("div", { className: "flex w-full flex-col gap-2.5", children: BUTTON_VARIANT_IDS.map((id) => {
22339
+ return /* @__PURE__ */ jsxs24("div", { className: "flex w-full flex-col gap-5", children: [
22340
+ /* @__PURE__ */ jsxs24("section", { className: "flex w-full flex-col gap-2.5", children: [
22341
+ /* @__PURE__ */ jsx35("h3", { className: "text-xs font-semibold uppercase leading-4 tracking-[0.6px] text-stone-500 font-sans", children: "Variants" }),
22342
+ /* @__PURE__ */ jsx35("div", { className: "flex w-full flex-col gap-2.5", children: BUTTON_VARIANT_IDS.map((id) => {
22200
22343
  const chrome = variants[id];
22201
22344
  const selected = id === variant;
22202
22345
  const hasBorder = parseFloat(chrome.borderWidth) > 0;
22203
22346
  const cardSlot = previewSlotForChrome(chrome, slotBackground);
22204
- return /* @__PURE__ */ jsxs23(
22347
+ return /* @__PURE__ */ jsxs24(
22205
22348
  "button",
22206
22349
  {
22207
22350
  type: "button",
@@ -22217,12 +22360,12 @@ function ButtonStylePanel({
22217
22360
  selected ? "border-2 border-primary" : "border border-border"
22218
22361
  ),
22219
22362
  children: [
22220
- /* @__PURE__ */ jsx34(
22363
+ /* @__PURE__ */ jsx35(
22221
22364
  "div",
22222
22365
  {
22223
22366
  className: "flex w-full items-center justify-center py-4",
22224
22367
  style: { background: cardSlot },
22225
- children: /* @__PURE__ */ jsx34(
22368
+ children: /* @__PURE__ */ jsx35(
22226
22369
  "span",
22227
22370
  {
22228
22371
  className: "inline-flex items-center justify-center whitespace-nowrap font-semibold uppercase leading-none",
@@ -22244,12 +22387,12 @@ function ButtonStylePanel({
22244
22387
  )
22245
22388
  }
22246
22389
  ),
22247
- selected ? /* @__PURE__ */ jsx34(
22390
+ selected ? /* @__PURE__ */ jsx35(
22248
22391
  "span",
22249
22392
  {
22250
22393
  className: "absolute right-0.5 top-0.5 flex size-5 items-center justify-center rounded-full bg-primary text-primary-foreground",
22251
22394
  "aria-hidden": true,
22252
- children: /* @__PURE__ */ jsx34(Check4, { className: "size-3", strokeWidth: 3 })
22395
+ children: /* @__PURE__ */ jsx35(Check4, { className: "size-3", strokeWidth: 3 })
22253
22396
  }
22254
22397
  ) : null
22255
22398
  ]
@@ -22258,9 +22401,9 @@ function ButtonStylePanel({
22258
22401
  );
22259
22402
  }) })
22260
22403
  ] }),
22261
- /* @__PURE__ */ jsxs23("section", { className: "flex w-full flex-col gap-2.5", children: [
22262
- /* @__PURE__ */ jsx34("h3", { className: "text-xs font-semibold uppercase leading-4 tracking-[0.6px] text-stone-500 font-sans", children: "Size" }),
22263
- /* @__PURE__ */ jsx34(
22404
+ /* @__PURE__ */ jsxs24("section", { className: "flex w-full flex-col gap-2.5", children: [
22405
+ /* @__PURE__ */ jsx35("h3", { className: "text-xs font-semibold uppercase leading-4 tracking-[0.6px] text-stone-500 font-sans", children: "Size" }),
22406
+ /* @__PURE__ */ jsx35(
22264
22407
  "div",
22265
22408
  {
22266
22409
  className: "flex w-full items-start rounded-lg bg-stone-100 p-1",
@@ -22268,7 +22411,7 @@ function ButtonStylePanel({
22268
22411
  "aria-label": "Size",
22269
22412
  children: BUTTON_SIZE_IDS.map((id) => {
22270
22413
  const selected = id === size;
22271
- return /* @__PURE__ */ jsx34(
22414
+ return /* @__PURE__ */ jsx35(
22272
22415
  "button",
22273
22416
  {
22274
22417
  type: "button",
@@ -23275,7 +23418,7 @@ function useSectionDrag({
23275
23418
 
23276
23419
  // src/ui/footer-container-chrome.tsx
23277
23420
  import { Plus as Plus3 } from "lucide-react";
23278
- import { jsx as jsx35, jsxs as jsxs24 } from "react/jsx-runtime";
23421
+ import { jsx as jsx36, jsxs as jsxs25 } from "react/jsx-runtime";
23279
23422
  function FooterContainerChrome({
23280
23423
  rect,
23281
23424
  onAdd,
@@ -23283,7 +23426,7 @@ function FooterContainerChrome({
23283
23426
  }) {
23284
23427
  const chromeGap = 6;
23285
23428
  const buttonMargin = 7;
23286
- return /* @__PURE__ */ jsx35(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsx35(
23429
+ return /* @__PURE__ */ jsx36(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsx36(
23287
23430
  "div",
23288
23431
  {
23289
23432
  "data-ohw-footer-container-chrome": "",
@@ -23295,8 +23438,8 @@ function FooterContainerChrome({
23295
23438
  width: rect.width + chromeGap * 2,
23296
23439
  height: rect.height + chromeGap * 2
23297
23440
  },
23298
- children: /* @__PURE__ */ jsxs24(Tooltip, { children: [
23299
- /* @__PURE__ */ jsx35(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx35(
23441
+ children: /* @__PURE__ */ jsxs25(Tooltip, { children: [
23442
+ /* @__PURE__ */ jsx36(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx36(
23300
23443
  "button",
23301
23444
  {
23302
23445
  type: "button",
@@ -23315,10 +23458,10 @@ function FooterContainerChrome({
23315
23458
  if (addDisabled) return;
23316
23459
  onAdd();
23317
23460
  },
23318
- children: /* @__PURE__ */ jsx35(Plus3, { className: "size-4 shrink-0 text-foreground", "aria-hidden": true })
23461
+ children: /* @__PURE__ */ jsx36(Plus3, { className: "size-4 shrink-0 text-foreground", "aria-hidden": true })
23319
23462
  }
23320
23463
  ) }),
23321
- /* @__PURE__ */ jsx35(TooltipContent, { side: "bottom", sideOffset: 9, children: addDisabled ? "Maximum columns reached" : "Add item" })
23464
+ /* @__PURE__ */ jsx36(TooltipContent, { side: "bottom", sideOffset: 9, children: addDisabled ? "Maximum columns reached" : "Add item" })
23322
23465
  ] })
23323
23466
  }
23324
23467
  ) });
@@ -23495,13 +23638,13 @@ function deleteSelectedNavFooterItem(deps) {
23495
23638
 
23496
23639
  // src/ui/navbar-container-chrome.tsx
23497
23640
  import { Plus as Plus4 } from "lucide-react";
23498
- import { jsx as jsx36 } from "react/jsx-runtime";
23641
+ import { jsx as jsx37 } from "react/jsx-runtime";
23499
23642
  function NavbarContainerChrome({
23500
23643
  rect,
23501
23644
  onAdd
23502
23645
  }) {
23503
23646
  const chromeGap = 6;
23504
- return /* @__PURE__ */ jsx36(
23647
+ return /* @__PURE__ */ jsx37(
23505
23648
  "div",
23506
23649
  {
23507
23650
  "data-ohw-navbar-container-chrome": "",
@@ -23513,7 +23656,7 @@ function NavbarContainerChrome({
23513
23656
  width: rect.width + chromeGap * 2,
23514
23657
  height: rect.height + chromeGap * 2
23515
23658
  },
23516
- children: /* @__PURE__ */ jsx36(
23659
+ children: /* @__PURE__ */ jsx37(
23517
23660
  "button",
23518
23661
  {
23519
23662
  type: "button",
@@ -23530,7 +23673,7 @@ function NavbarContainerChrome({
23530
23673
  e.stopPropagation();
23531
23674
  onAdd();
23532
23675
  },
23533
- children: /* @__PURE__ */ jsx36(Plus4, { className: "size-4 shrink-0 text-foreground", "aria-hidden": true })
23676
+ children: /* @__PURE__ */ jsx37(Plus4, { className: "size-4 shrink-0 text-foreground", "aria-hidden": true })
23534
23677
  }
23535
23678
  )
23536
23679
  }
@@ -23539,7 +23682,7 @@ function NavbarContainerChrome({
23539
23682
 
23540
23683
  // src/ui/drop-indicator.tsx
23541
23684
  import * as React11 from "react";
23542
- import { jsx as jsx37 } from "react/jsx-runtime";
23685
+ import { jsx as jsx38 } from "react/jsx-runtime";
23543
23686
  var dropIndicatorVariants = cva(
23544
23687
  "ov-gap-line pointer-events-none shrink-0 transition-opacity duration-150",
23545
23688
  {
@@ -23563,7 +23706,7 @@ var dropIndicatorVariants = cva(
23563
23706
  );
23564
23707
  var DropIndicator = React11.forwardRef(
23565
23708
  ({ className, direction, state, ...props }, ref) => {
23566
- return /* @__PURE__ */ jsx37(
23709
+ return /* @__PURE__ */ jsx38(
23567
23710
  "div",
23568
23711
  {
23569
23712
  ref,
@@ -23580,7 +23723,7 @@ var DropIndicator = React11.forwardRef(
23580
23723
  DropIndicator.displayName = "DropIndicator";
23581
23724
 
23582
23725
  // src/ui/badge.tsx
23583
- import { jsx as jsx38 } from "react/jsx-runtime";
23726
+ import { jsx as jsx39 } from "react/jsx-runtime";
23584
23727
  var badgeVariants = cva(
23585
23728
  "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
23586
23729
  {
@@ -23598,12 +23741,12 @@ var badgeVariants = cva(
23598
23741
  }
23599
23742
  );
23600
23743
  function Badge({ className, variant, ...props }) {
23601
- return /* @__PURE__ */ jsx38("div", { className: cn(badgeVariants({ variant }), className), ...props });
23744
+ return /* @__PURE__ */ jsx39("div", { className: cn(badgeVariants({ variant }), className), ...props });
23602
23745
  }
23603
23746
 
23604
23747
  // src/OhhwellsBridge.tsx
23605
23748
  import { Brush as Brush2, Link as Link2, Plus as Plus5, Settings } from "lucide-react";
23606
- import { Fragment as Fragment12, jsx as jsx39, jsxs as jsxs25 } from "react/jsx-runtime";
23749
+ import { Fragment as Fragment13, jsx as jsx40, jsxs as jsxs26 } from "react/jsx-runtime";
23607
23750
  var PRIMARY7 = "#0885FE";
23608
23751
  var IMAGE_FADE_MS = 300;
23609
23752
  var MEDIA_SETTLE_TIMEOUT_MS = 2500;
@@ -23725,7 +23868,7 @@ function duplicateSchedulingWidget(instanceId, scheduleId) {
23725
23868
  schedulingRoots.set(container, root);
23726
23869
  flushSync3(() => {
23727
23870
  root.render(
23728
- /* @__PURE__ */ jsx39(
23871
+ /* @__PURE__ */ jsx40(
23729
23872
  SchedulingWidget,
23730
23873
  {
23731
23874
  notifyOnConnect: false,
@@ -23853,7 +23996,7 @@ function mountSchedulingWidget(anchorId, notifyOnConnect = false, scheduleId, be
23853
23996
  schedulingRoots.set(container, root);
23854
23997
  flushSync3(() => {
23855
23998
  root.render(
23856
- /* @__PURE__ */ jsx39(
23999
+ /* @__PURE__ */ jsx40(
23857
24000
  SchedulingWidget,
23858
24001
  {
23859
24002
  notifyOnConnect,
@@ -24633,7 +24776,7 @@ function EditGlowChrome({
24633
24776
  hideHandle = false
24634
24777
  }) {
24635
24778
  const GAP = SELECTION_CHROME_GAP2;
24636
- return /* @__PURE__ */ jsxs25(
24779
+ return /* @__PURE__ */ jsxs26(
24637
24780
  "div",
24638
24781
  {
24639
24782
  ref: elRef,
@@ -24648,7 +24791,7 @@ function EditGlowChrome({
24648
24791
  zIndex: 2147483646
24649
24792
  },
24650
24793
  children: [
24651
- /* @__PURE__ */ jsx39(
24794
+ /* @__PURE__ */ jsx40(
24652
24795
  "div",
24653
24796
  {
24654
24797
  style: {
@@ -24662,7 +24805,7 @@ function EditGlowChrome({
24662
24805
  }
24663
24806
  }
24664
24807
  ),
24665
- reorderHrefKey && !hideHandle && /* @__PURE__ */ jsx39(
24808
+ reorderHrefKey && !hideHandle && /* @__PURE__ */ jsx40(
24666
24809
  "div",
24667
24810
  {
24668
24811
  "data-ohw-drag-handle-container": "",
@@ -24674,7 +24817,7 @@ function EditGlowChrome({
24674
24817
  transform: "translate(calc(-100% - 7px), -50%)",
24675
24818
  pointerEvents: dragDisabled ? "none" : "auto"
24676
24819
  },
24677
- children: /* @__PURE__ */ jsx39(
24820
+ children: /* @__PURE__ */ jsx40(
24678
24821
  DragHandle,
24679
24822
  {
24680
24823
  "aria-label": `Reorder ${reorderHrefKey}`,
@@ -24878,7 +25021,7 @@ function FloatingToolbar({
24878
25021
  return () => ro.disconnect();
24879
25022
  }, [showEditLink, activeCommands]);
24880
25023
  const { top, left, transform } = calcToolbarPos(rect, parentScroll, measuredW);
24881
- return /* @__PURE__ */ jsx39(
25024
+ return /* @__PURE__ */ jsx40(
24882
25025
  "div",
24883
25026
  {
24884
25027
  ref: setRefs,
@@ -24890,12 +25033,12 @@ function FloatingToolbar({
24890
25033
  zIndex: 2147483647,
24891
25034
  pointerEvents: "auto"
24892
25035
  },
24893
- children: /* @__PURE__ */ jsxs25(CustomToolbar, { children: [
24894
- TOOLBAR_GROUPS.map((btns, gi) => /* @__PURE__ */ jsxs25(React12.Fragment, { children: [
24895
- gi > 0 && /* @__PURE__ */ jsx39(CustomToolbarDivider, {}),
25036
+ children: /* @__PURE__ */ jsxs26(CustomToolbar, { children: [
25037
+ TOOLBAR_GROUPS.map((btns, gi) => /* @__PURE__ */ jsxs26(React12.Fragment, { children: [
25038
+ gi > 0 && /* @__PURE__ */ jsx40(CustomToolbarDivider, {}),
24896
25039
  btns.map((btn) => {
24897
25040
  const isActive = activeCommands.has(btn.cmd);
24898
- return /* @__PURE__ */ jsx39(
25041
+ return /* @__PURE__ */ jsx40(
24899
25042
  CustomToolbarButton,
24900
25043
  {
24901
25044
  title: btn.title,
@@ -24904,7 +25047,7 @@ function FloatingToolbar({
24904
25047
  e.preventDefault();
24905
25048
  onCommand(btn.cmd);
24906
25049
  },
24907
- children: /* @__PURE__ */ jsx39(
25050
+ children: /* @__PURE__ */ jsx40(
24908
25051
  "svg",
24909
25052
  {
24910
25053
  width: "16",
@@ -24925,7 +25068,7 @@ function FloatingToolbar({
24925
25068
  );
24926
25069
  })
24927
25070
  ] }, gi)),
24928
- showEditLink ? /* @__PURE__ */ jsx39(
25071
+ showEditLink ? /* @__PURE__ */ jsx40(
24929
25072
  CustomToolbarButton,
24930
25073
  {
24931
25074
  type: "button",
@@ -24939,7 +25082,7 @@ function FloatingToolbar({
24939
25082
  e.preventDefault();
24940
25083
  e.stopPropagation();
24941
25084
  },
24942
- children: /* @__PURE__ */ jsx39(Link2, { className: "size-4 shrink-0", "aria-hidden": true })
25085
+ children: /* @__PURE__ */ jsx40(Link2, { className: "size-4 shrink-0", "aria-hidden": true })
24943
25086
  }
24944
25087
  ) : null
24945
25088
  ] })
@@ -24956,7 +25099,7 @@ function StateToggle({
24956
25099
  states,
24957
25100
  onStateChange
24958
25101
  }) {
24959
- return /* @__PURE__ */ jsx39(
25102
+ return /* @__PURE__ */ jsx40(
24960
25103
  ToggleGroup,
24961
25104
  {
24962
25105
  "data-ohw-state-toggle": "",
@@ -24970,52 +25113,15 @@ function StateToggle({
24970
25113
  left: rect.right - 8,
24971
25114
  transform: "translateX(-100%)"
24972
25115
  },
24973
- children: states.map((state) => /* @__PURE__ */ jsx39(ToggleGroupItem, { value: state, size: "sm", children: state }, state))
25116
+ children: states.map((state) => /* @__PURE__ */ jsx40(ToggleGroupItem, { value: state, size: "sm", children: state }, state))
24974
25117
  }
24975
25118
  );
24976
25119
  }
24977
25120
  var contentCache = /* @__PURE__ */ new Map();
24978
25121
  var fetchedContentPaths = /* @__PURE__ */ new Set();
24979
25122
  var brandingCache = /* @__PURE__ */ new Map();
24980
- var OHW_LOADER_STYLE = {
24981
- position: "fixed",
24982
- inset: 0,
24983
- background: "#fff",
24984
- zIndex: 2147483646,
24985
- display: "flex",
24986
- alignItems: "center",
24987
- justifyContent: "center"
24988
- };
24989
- function OhwLoaderSpinner() {
24990
- return /* @__PURE__ */ jsxs25("svg", { width: "28", height: "28", viewBox: "0 0 28 28", fill: "none", "aria-hidden": true, children: [
24991
- /* @__PURE__ */ jsx39("circle", { cx: "14", cy: "14", r: "11", stroke: "#E7E5E4", strokeWidth: "3" }),
24992
- /* @__PURE__ */ jsx39(
24993
- "circle",
24994
- {
24995
- cx: "14",
24996
- cy: "14",
24997
- r: "11",
24998
- stroke: "#1C1917",
24999
- strokeWidth: "3",
25000
- strokeDasharray: "17 52",
25001
- strokeLinecap: "round",
25002
- children: /* @__PURE__ */ jsx39(
25003
- "animateTransform",
25004
- {
25005
- attributeName: "transform",
25006
- type: "rotate",
25007
- from: "0 14 14",
25008
- to: "360 14 14",
25009
- dur: "0.7s",
25010
- repeatCount: "indefinite"
25011
- }
25012
- )
25013
- }
25014
- )
25015
- ] });
25016
- }
25017
25123
  function OhwBrandMark() {
25018
- return /* @__PURE__ */ jsxs25(
25124
+ return /* @__PURE__ */ jsxs26(
25019
25125
  "svg",
25020
25126
  {
25021
25127
  width: "16",
@@ -25026,7 +25132,7 @@ function OhwBrandMark() {
25026
25132
  style: { display: "block", flexShrink: 0 },
25027
25133
  xmlns: "http://www.w3.org/2000/svg",
25028
25134
  children: [
25029
- /* @__PURE__ */ jsx39(
25135
+ /* @__PURE__ */ jsx40(
25030
25136
  "mask",
25031
25137
  {
25032
25138
  id: "ohw-badge-mark",
@@ -25036,15 +25142,15 @@ function OhwBrandMark() {
25036
25142
  y: "0",
25037
25143
  width: "48",
25038
25144
  height: "48",
25039
- children: /* @__PURE__ */ jsx39("path", { d: "M23.8741 48C37.0594 48 47.7481 37.2548 47.7481 24C47.7481 10.7452 37.0594 0 23.8741 0C10.6888 0 0 10.7452 0 24C0 37.2548 10.6888 48 23.8741 48Z", fill: "white" })
25145
+ children: /* @__PURE__ */ jsx40("path", { d: "M23.8741 48C37.0594 48 47.7481 37.2548 47.7481 24C47.7481 10.7452 37.0594 0 23.8741 0C10.6888 0 0 10.7452 0 24C0 37.2548 10.6888 48 23.8741 48Z", fill: "white" })
25040
25146
  }
25041
25147
  ),
25042
- /* @__PURE__ */ jsxs25("g", { mask: "url(#ohw-badge-mark)", children: [
25043
- /* @__PURE__ */ jsx39("path", { d: "M23.8731 48.0497C37.0584 48.0497 47.7472 37.3046 47.7472 24.0497C47.7472 10.7949 37.0584 0.0497208 23.8731 0.0497208C10.6878 0.0497208 -0.000976562 10.7949 -0.000976562 24.0497C-0.000976562 37.3046 10.6878 48.0497 23.8731 48.0497Z", fill: "#0078E5" }),
25044
- /* @__PURE__ */ jsx39("path", { d: "M17.1307 14.7172C13.1687 14.7172 9.38102 18.1154 8.65114 22.34C8.38885 23.8488 8.5598 25.2581 9.06929 26.4451C6.20005 29.1677 1.77216 27.8721 -1.40212 26.1536C-2.73618 25.4317 -3.92695 27.4745 -2.59037 28.1981C1.33389 30.3226 6.86037 31.6621 10.4402 28.4188C11.4718 29.3859 12.867 29.9621 14.4894 29.9621C18.4161 29.9621 22.2038 26.5318 22.9337 22.34C23.6636 18.1162 21.0566 14.7172 17.1298 14.7172H17.1307ZM19.9798 22.34C19.5281 25.0399 17.2689 27.231 14.9754 27.231C12.6466 27.231 11.1877 25.0399 11.6394 22.34C12.1262 19.6401 14.3151 17.4482 16.6438 17.4482C18.9374 17.4482 20.4667 19.6401 19.9798 22.34Z", fill: "white" }),
25045
- /* @__PURE__ */ jsx39("path", { d: "M40.0017 27.0262C39.1797 27.081 38.2721 26.995 37.4668 26.7415C37.3344 26.6993 37.28 26.5401 37.3529 26.4205C37.5959 26.0212 37.8255 25.6152 38.009 25.1889C38.1071 24.9918 38.2018 24.793 38.2897 24.5908C38.3274 24.5041 38.4163 24.451 38.5101 24.4619C38.63 24.4754 38.7054 24.4821 38.8881 24.4821L39.1529 24.4796L39.8283 24.4543C45.9229 24.0492 50.4765 20.4319 54.8466 16.9014C56.0172 15.9554 57.6932 17.6208 56.5116 18.5752C51.7687 22.4065 47.1966 26.5081 40.9319 26.9689", fill: "white" }),
25046
- /* @__PURE__ */ jsx39("path", { d: "M37.9687 24.27C38.4472 23.1319 38.7656 21.9045 38.9609 20.6991C39.5927 16.76 38.5058 14.2193 36.1553 14.2193C34.1835 14.2193 33.1469 17.2427 32.9199 18.8694C32.743 19.9872 32.5914 22.1219 33.6028 23.9524C33.7553 24.259 34.15 24.7712 34.471 25.1259C34.5447 25.2067 34.6746 25.2 34.7349 25.1082C34.9528 24.7788 35.1615 24.4039 35.3584 24.0257C35.5444 23.6677 35.5888 23.6138 35.8587 23.0207C35.8838 22.966 35.8813 22.9002 35.8478 22.8505C35.5888 22.4597 35.2168 21.9787 35.1204 21.4614C34.9184 20.4455 34.9436 19.2257 35.2218 18.1078C35.4413 17.3118 35.7195 16.7844 35.9039 16.5106C35.9466 16.4466 36.0279 16.4129 36.0975 16.4449C36.369 16.5671 36.5827 16.8838 36.7385 17.396C37.0167 18.2089 37.0167 19.3782 36.814 20.6999C36.6991 21.5271 36.4771 22.3729 36.1746 23.1673C36.1293 23.308 36.0757 23.4461 36.0187 23.5826C36.0187 23.5868 36.0187 23.591 36.0187 23.5961C35.9911 23.6946 35.9207 23.8067 35.8846 23.901C35.5536 24.5497 35.2344 25.1697 34.8439 25.7838C34.8388 25.7863 34.8346 25.7914 34.8296 25.7931C34.6528 26.0525 34.4718 26.2901 34.2866 26.4965C34.2774 26.5099 34.2682 26.5234 34.2589 26.5369C34.2405 26.5638 34.2179 26.5815 34.1944 26.595C33.5064 27.3212 32.7665 27.6893 32.0123 27.6893C31.8606 27.6893 31.6838 27.664 31.507 27.4349C31.3042 27.1299 30.85 26.0879 31.2539 22.9112C31.4785 21.3949 31.8011 20.0268 31.931 19.5408C31.9579 19.4413 31.8908 19.3419 31.7886 19.3293L30.0062 19.1162C29.9241 19.1061 29.8478 19.1566 29.8252 19.2366C29.2704 21.1615 27.0305 27.6885 24.9599 27.6885C24.328 27.6885 24.1512 26.6211 24.1001 26.2909C23.775 23.6264 25.528 18.5492 29.5302 16.2267C29.6048 16.1838 29.635 16.0928 29.5998 16.0136L28.9042 14.467C28.8632 14.3752 28.7501 14.3389 28.6638 14.3886C25.8079 16.0414 24.1847 18.5231 23.2915 20.3436C22.2046 22.5793 21.6993 25.0189 21.9515 26.8738C22.1795 28.7794 23.1398 29.872 24.6054 29.872C26.0543 29.872 27.4369 28.9066 28.7098 27.0187C28.7953 26.8915 28.9889 26.9311 29.0149 27.0819C29.2646 28.5283 29.9811 29.872 31.6579 29.872C33.5282 29.872 35.3232 28.7288 36.7134 26.6447C36.7712 26.5874 36.7972 26.5411 36.8181 26.4906C36.8232 26.4931 36.8282 26.4948 36.8332 26.4973C37.01 26.2025 37.181 25.9051 37.3444 25.6027C37.4508 25.4005 37.5572 25.1992 37.6586 24.9945C37.7181 24.874 37.7743 24.7527 37.8262 24.6289C37.838 24.6002 37.8547 24.5665 37.8706 24.5337", fill: "white" }),
25047
- /* @__PURE__ */ jsx39("path", { d: "M30.5839 31.6397C25.7546 34.8577 19.4773 34.7853 14.6907 31.5243C13.5368 30.7384 12.5044 32.6498 13.6474 33.4281C19.034 37.0985 26.3077 37.096 31.7218 33.488C32.8791 32.7172 31.7478 30.8639 30.5839 31.6397Z", fill: "white" })
25148
+ /* @__PURE__ */ jsxs26("g", { mask: "url(#ohw-badge-mark)", children: [
25149
+ /* @__PURE__ */ jsx40("path", { d: "M23.8731 48.0497C37.0584 48.0497 47.7472 37.3046 47.7472 24.0497C47.7472 10.7949 37.0584 0.0497208 23.8731 0.0497208C10.6878 0.0497208 -0.000976562 10.7949 -0.000976562 24.0497C-0.000976562 37.3046 10.6878 48.0497 23.8731 48.0497Z", fill: "#0078E5" }),
25150
+ /* @__PURE__ */ jsx40("path", { d: "M17.1307 14.7172C13.1687 14.7172 9.38102 18.1154 8.65114 22.34C8.38885 23.8488 8.5598 25.2581 9.06929 26.4451C6.20005 29.1677 1.77216 27.8721 -1.40212 26.1536C-2.73618 25.4317 -3.92695 27.4745 -2.59037 28.1981C1.33389 30.3226 6.86037 31.6621 10.4402 28.4188C11.4718 29.3859 12.867 29.9621 14.4894 29.9621C18.4161 29.9621 22.2038 26.5318 22.9337 22.34C23.6636 18.1162 21.0566 14.7172 17.1298 14.7172H17.1307ZM19.9798 22.34C19.5281 25.0399 17.2689 27.231 14.9754 27.231C12.6466 27.231 11.1877 25.0399 11.6394 22.34C12.1262 19.6401 14.3151 17.4482 16.6438 17.4482C18.9374 17.4482 20.4667 19.6401 19.9798 22.34Z", fill: "white" }),
25151
+ /* @__PURE__ */ jsx40("path", { d: "M40.0017 27.0262C39.1797 27.081 38.2721 26.995 37.4668 26.7415C37.3344 26.6993 37.28 26.5401 37.3529 26.4205C37.5959 26.0212 37.8255 25.6152 38.009 25.1889C38.1071 24.9918 38.2018 24.793 38.2897 24.5908C38.3274 24.5041 38.4163 24.451 38.5101 24.4619C38.63 24.4754 38.7054 24.4821 38.8881 24.4821L39.1529 24.4796L39.8283 24.4543C45.9229 24.0492 50.4765 20.4319 54.8466 16.9014C56.0172 15.9554 57.6932 17.6208 56.5116 18.5752C51.7687 22.4065 47.1966 26.5081 40.9319 26.9689", fill: "white" }),
25152
+ /* @__PURE__ */ jsx40("path", { d: "M37.9687 24.27C38.4472 23.1319 38.7656 21.9045 38.9609 20.6991C39.5927 16.76 38.5058 14.2193 36.1553 14.2193C34.1835 14.2193 33.1469 17.2427 32.9199 18.8694C32.743 19.9872 32.5914 22.1219 33.6028 23.9524C33.7553 24.259 34.15 24.7712 34.471 25.1259C34.5447 25.2067 34.6746 25.2 34.7349 25.1082C34.9528 24.7788 35.1615 24.4039 35.3584 24.0257C35.5444 23.6677 35.5888 23.6138 35.8587 23.0207C35.8838 22.966 35.8813 22.9002 35.8478 22.8505C35.5888 22.4597 35.2168 21.9787 35.1204 21.4614C34.9184 20.4455 34.9436 19.2257 35.2218 18.1078C35.4413 17.3118 35.7195 16.7844 35.9039 16.5106C35.9466 16.4466 36.0279 16.4129 36.0975 16.4449C36.369 16.5671 36.5827 16.8838 36.7385 17.396C37.0167 18.2089 37.0167 19.3782 36.814 20.6999C36.6991 21.5271 36.4771 22.3729 36.1746 23.1673C36.1293 23.308 36.0757 23.4461 36.0187 23.5826C36.0187 23.5868 36.0187 23.591 36.0187 23.5961C35.9911 23.6946 35.9207 23.8067 35.8846 23.901C35.5536 24.5497 35.2344 25.1697 34.8439 25.7838C34.8388 25.7863 34.8346 25.7914 34.8296 25.7931C34.6528 26.0525 34.4718 26.2901 34.2866 26.4965C34.2774 26.5099 34.2682 26.5234 34.2589 26.5369C34.2405 26.5638 34.2179 26.5815 34.1944 26.595C33.5064 27.3212 32.7665 27.6893 32.0123 27.6893C31.8606 27.6893 31.6838 27.664 31.507 27.4349C31.3042 27.1299 30.85 26.0879 31.2539 22.9112C31.4785 21.3949 31.8011 20.0268 31.931 19.5408C31.9579 19.4413 31.8908 19.3419 31.7886 19.3293L30.0062 19.1162C29.9241 19.1061 29.8478 19.1566 29.8252 19.2366C29.2704 21.1615 27.0305 27.6885 24.9599 27.6885C24.328 27.6885 24.1512 26.6211 24.1001 26.2909C23.775 23.6264 25.528 18.5492 29.5302 16.2267C29.6048 16.1838 29.635 16.0928 29.5998 16.0136L28.9042 14.467C28.8632 14.3752 28.7501 14.3389 28.6638 14.3886C25.8079 16.0414 24.1847 18.5231 23.2915 20.3436C22.2046 22.5793 21.6993 25.0189 21.9515 26.8738C22.1795 28.7794 23.1398 29.872 24.6054 29.872C26.0543 29.872 27.4369 28.9066 28.7098 27.0187C28.7953 26.8915 28.9889 26.9311 29.0149 27.0819C29.2646 28.5283 29.9811 29.872 31.6579 29.872C33.5282 29.872 35.3232 28.7288 36.7134 26.6447C36.7712 26.5874 36.7972 26.5411 36.8181 26.4906C36.8232 26.4931 36.8282 26.4948 36.8332 26.4973C37.01 26.2025 37.181 25.9051 37.3444 25.6027C37.4508 25.4005 37.5572 25.1992 37.6586 24.9945C37.7181 24.874 37.7743 24.7527 37.8262 24.6289C37.838 24.6002 37.8547 24.5665 37.8706 24.5337", fill: "white" }),
25153
+ /* @__PURE__ */ jsx40("path", { d: "M30.5839 31.6397C25.7546 34.8577 19.4773 34.7853 14.6907 31.5243C13.5368 30.7384 12.5044 32.6498 13.6474 33.4281C19.034 37.0985 26.3077 37.096 31.7218 33.488C32.8791 32.7172 31.7478 30.8639 30.5839 31.6397Z", fill: "white" })
25048
25154
  ] })
25049
25155
  ]
25050
25156
  }
@@ -25081,7 +25187,7 @@ var OHW_BADGE_LABEL_STYLE = {
25081
25187
  whiteSpace: "nowrap"
25082
25188
  };
25083
25189
  function MadeWithOhhWells() {
25084
- return /* @__PURE__ */ jsxs25(
25190
+ return /* @__PURE__ */ jsxs26(
25085
25191
  "a",
25086
25192
  {
25087
25193
  href: "https://ohhwells.com",
@@ -25091,13 +25197,12 @@ function MadeWithOhhWells() {
25091
25197
  "data-ohw-badge": "",
25092
25198
  style: OHW_BADGE_STYLE,
25093
25199
  children: [
25094
- /* @__PURE__ */ jsx39(OhwBrandMark, {}),
25095
- /* @__PURE__ */ jsx39("span", { style: OHW_BADGE_LABEL_STYLE, children: "Made with OhhWells" })
25200
+ /* @__PURE__ */ jsx40(OhwBrandMark, {}),
25201
+ /* @__PURE__ */ jsx40("span", { style: OHW_BADGE_LABEL_STYLE, children: "Made with OhhWells" })
25096
25202
  ]
25097
25203
  }
25098
25204
  );
25099
25205
  }
25100
- var OHW_LOADER_PREHYDRATE_SCRIPT = `(function(){try{var fromGlobal=typeof window!=="undefined"&&window.__OHW_SUBDOMAIN__?String(window.__OHW_SUBDOMAIN__):"";var p=location.hostname.split(".");var fromHost=location.hostname.endsWith(".ohhwells.site")&&p[0]&&p[0]!=="www"?p[0]:"";var fromQuery=new URLSearchParams(location.search).get("subdomain")||"";var fromCookie=(document.cookie.match(/(?:^|; )ohw-subdomain=([^;]*)/)||[])[1];fromCookie=fromCookie?decodeURIComponent(fromCookie):"";if(!fromGlobal&&!fromHost&&!fromQuery&&!fromCookie)return;var e=document.getElementById("ohw-loader");if(e)e.style.display="flex"}catch(e){}})();`;
25101
25206
  function subdomainFromCookie() {
25102
25207
  if (typeof document === "undefined") return "";
25103
25208
  const match = document.cookie.match(/(?:^|; )ohw-subdomain=([^;]*)/);
@@ -27458,6 +27563,7 @@ function OhhwellsBridge() {
27458
27563
  const branding = Boolean(data?.showBranding);
27459
27564
  contentCache.set(subdomain, content);
27460
27565
  brandingCache.set(subdomain, branding);
27566
+ recordOverriddenPaths(subdomain, data?.overriddenPaths);
27461
27567
  setShowBranding(branding);
27462
27568
  return applyContent(content);
27463
27569
  }).catch(() => {
@@ -27656,7 +27762,7 @@ function OhhwellsBridge() {
27656
27762
  };
27657
27763
  applyFromCache();
27658
27764
  const pathCacheKey = `${subdomain}::${pathname}`;
27659
- if (!fetchedContentPaths.has(pathCacheKey)) {
27765
+ if (!fetchedContentPaths.has(pathCacheKey) && shouldFetchContentForPath(subdomain, pathname)) {
27660
27766
  fetchedContentPaths.add(pathCacheKey);
27661
27767
  const apiUrl = process.env.NEXT_PUBLIC_FLOWOPS_API_URL ?? "https://flowops-backend-staging-2yfdh7pwpq-as.a.run.app";
27662
27768
  fetch(`${apiUrl}/api/public/sites/${subdomain}/content?path=${encodeURIComponent(pathname)}`, { cache: "no-store" }).then((r2) => r2.ok ? r2.json() : null).then((data) => {
@@ -27666,7 +27772,17 @@ function OhhwellsBridge() {
27666
27772
  }).catch(() => {
27667
27773
  });
27668
27774
  }
27669
- observer = new MutationObserver(scheduleApply);
27775
+ observer = new MutationObserver((records) => {
27776
+ if (hasMountedContentNodes(records)) {
27777
+ if (debounceTimer) {
27778
+ clearTimeout(debounceTimer);
27779
+ debounceTimer = null;
27780
+ }
27781
+ applyFromCache();
27782
+ return;
27783
+ }
27784
+ scheduleApply();
27785
+ });
27670
27786
  observer.observe(document.body, { childList: true, subtree: true });
27671
27787
  return () => {
27672
27788
  observer?.disconnect();
@@ -27880,21 +27996,19 @@ function OhhwellsBridge() {
27880
27996
  };
27881
27997
  }, [pathname, isEditMode, postToParent2]);
27882
27998
  useEffect17(() => {
27883
- if (!subdomainFromQuery || isEditMode) return;
27999
+ if (isEditMode) return;
27884
28000
  const handleClick = (e) => {
28001
+ if (!isPlainLeftClick(e)) return;
27885
28002
  const anchor = e.target.closest("a");
27886
- if (!anchor || anchor.target === "_blank" || e.defaultPrevented) return;
27887
- const href = anchor.getAttribute("href");
27888
- if (!href || /^(https?:|mailto:|tel:|#)/.test(href)) return;
27889
- const url = new URL(href, window.location.origin);
27890
- if (url.searchParams.has("subdomain")) return;
28003
+ if (!anchor) return;
28004
+ const next = resolveStickyNavigation(anchor, window.location.search, window.location.origin);
28005
+ if (!next) return;
27891
28006
  e.preventDefault();
27892
- url.searchParams.set("subdomain", subdomainFromQuery);
27893
- router.push(url.pathname + url.search);
28007
+ router.push(next);
27894
28008
  };
27895
28009
  document.addEventListener("click", handleClick, true);
27896
28010
  return () => document.removeEventListener("click", handleClick, true);
27897
- }, [subdomainFromQuery, isEditMode, router]);
28011
+ }, [isEditMode, router, pathname]);
27898
28012
  useEffect17(() => {
27899
28013
  if (!isEditMode) {
27900
28014
  editStylesRef.current?.base.remove();
@@ -31613,7 +31727,7 @@ function OhhwellsBridge() {
31613
31727
  postToParent2({
31614
31728
  type: "ow:ready",
31615
31729
  version: "1",
31616
- bridgeVersion: "0.1.151",
31730
+ bridgeVersion: "0.1.152",
31617
31731
  path: pathname,
31618
31732
  nodes: collectEditableNodes(editContentRef.current),
31619
31733
  sections
@@ -32150,14 +32264,13 @@ function OhhwellsBridge() {
32150
32264
  },
32151
32265
  [postToParent2]
32152
32266
  );
32153
- return /* @__PURE__ */ jsxs25(Fragment12, { children: [
32154
- /* @__PURE__ */ jsx39("div", { id: "ohw-loader", suppressHydrationWarning: true, style: { ...OHW_LOADER_STYLE, display: "none" }, children: /* @__PURE__ */ jsx39(OhwLoaderSpinner, {}) }),
32155
- /* @__PURE__ */ jsx39("script", { suppressHydrationWarning: true, dangerouslySetInnerHTML: { __html: OHW_LOADER_PREHYDRATE_SCRIPT } }),
32156
- subdomain && !isEditMode && showBranding && /* @__PURE__ */ jsx39(MadeWithOhhWells, {}),
32267
+ return /* @__PURE__ */ jsxs26(Fragment13, { children: [
32268
+ /* @__PURE__ */ jsx40(OhwLoaderSurface, {}),
32269
+ subdomain && !isEditMode && showBranding && /* @__PURE__ */ jsx40(MadeWithOhhWells, {}),
32157
32270
  bridgeRoot ? createPortal3(
32158
- /* @__PURE__ */ jsxs25(Fragment12, { children: [
32159
- /* @__PURE__ */ jsx39("div", { ref: attachVisibleViewport, "data-ohw-visible-viewport": "", "aria-hidden": true }),
32160
- isEditMode && /* @__PURE__ */ jsx39(
32271
+ /* @__PURE__ */ jsxs26(Fragment13, { children: [
32272
+ /* @__PURE__ */ jsx40("div", { ref: attachVisibleViewport, "data-ohw-visible-viewport": "", "aria-hidden": true }),
32273
+ isEditMode && /* @__PURE__ */ jsx40(
32161
32274
  AiSectionOverlay,
32162
32275
  {
32163
32276
  postToParent: postToParent2,
@@ -32165,7 +32278,7 @@ function OhhwellsBridge() {
32165
32278
  onSelectionChange: handleAiSectionSelectionChange
32166
32279
  }
32167
32280
  ),
32168
- isEditMode && /* @__PURE__ */ jsx39(
32281
+ isEditMode && /* @__PURE__ */ jsx40(
32169
32282
  AiMediaStripOverlay,
32170
32283
  {
32171
32284
  postToParent: postToParent2,
@@ -32174,7 +32287,7 @@ function OhhwellsBridge() {
32174
32287
  clearInteractionChromeRef
32175
32288
  }
32176
32289
  ),
32177
- isEditMode && /* @__PURE__ */ jsx39(
32290
+ isEditMode && /* @__PURE__ */ jsx40(
32178
32291
  AiPricingCardOverlay,
32179
32292
  {
32180
32293
  postToParent: postToParent2,
@@ -32182,7 +32295,7 @@ function OhhwellsBridge() {
32182
32295
  applyTreeLocalRef
32183
32296
  }
32184
32297
  ),
32185
- isEditMode && /* @__PURE__ */ jsx39(
32298
+ isEditMode && /* @__PURE__ */ jsx40(
32186
32299
  AiVideoOverlay,
32187
32300
  {
32188
32301
  postToParent: postToParent2,
@@ -32191,7 +32304,7 @@ function OhhwellsBridge() {
32191
32304
  clearInteractionChromeRef
32192
32305
  }
32193
32306
  ),
32194
- isEditMode && /* @__PURE__ */ jsx39(
32307
+ isEditMode && /* @__PURE__ */ jsx40(
32195
32308
  AiFadeCarouselOverlay,
32196
32309
  {
32197
32310
  postToParent: postToParent2,
@@ -32200,12 +32313,12 @@ function OhhwellsBridge() {
32200
32313
  clearInteractionChromeRef
32201
32314
  }
32202
32315
  ),
32203
- isSectionDragging && sectionDropSlots.map((slot, i) => /* @__PURE__ */ jsx39(
32316
+ isSectionDragging && sectionDropSlots.map((slot, i) => /* @__PURE__ */ jsx40(
32204
32317
  "div",
32205
32318
  {
32206
32319
  className: "pointer-events-none fixed z-2147483646",
32207
32320
  style: { left: slot.left, top: slot.y, width: slot.width, height: 3, transform: "translateY(-50%)" },
32208
- children: /* @__PURE__ */ jsx39(
32321
+ children: /* @__PURE__ */ jsx40(
32209
32322
  DropIndicator,
32210
32323
  {
32211
32324
  direction: "horizontal",
@@ -32216,7 +32329,7 @@ function OhhwellsBridge() {
32216
32329
  },
32217
32330
  `section-drop-${slot.insertIndex}-${i}`
32218
32331
  )),
32219
- Object.entries(uploadingRects).map(([key, { rect, fadingOut }]) => /* @__PURE__ */ jsx39(
32332
+ Object.entries(uploadingRects).map(([key, { rect, fadingOut }]) => /* @__PURE__ */ jsx40(
32220
32333
  MediaOverlay,
32221
32334
  {
32222
32335
  hover: { key, rect, elementType: "image", isDragOver: false, hasTextOverlap: false },
@@ -32227,7 +32340,7 @@ function OhhwellsBridge() {
32227
32340
  },
32228
32341
  `uploading-${key}`
32229
32342
  )),
32230
- mediaHover && !(mediaHover.key in uploadingRects) && mediaHover.key !== selectedMedia?.key && /* @__PURE__ */ jsx39(
32343
+ mediaHover && !(mediaHover.key in uploadingRects) && mediaHover.key !== selectedMedia?.key && /* @__PURE__ */ jsx40(
32231
32344
  MediaOverlay,
32232
32345
  {
32233
32346
  hover: mediaHover,
@@ -32238,7 +32351,7 @@ function OhhwellsBridge() {
32238
32351
  onVideoSettingsChange: handleVideoSettingsChange
32239
32352
  }
32240
32353
  ),
32241
- selectedMedia && !(selectedMedia.key in uploadingRects) && !linkPopover && /* @__PURE__ */ jsx39(
32354
+ selectedMedia && !(selectedMedia.key in uploadingRects) && !linkPopover && /* @__PURE__ */ jsx40(
32242
32355
  MediaOverlay,
32243
32356
  {
32244
32357
  hover: selectedMedia,
@@ -32250,7 +32363,7 @@ function OhhwellsBridge() {
32250
32363
  onVideoSettingsChange: handleVideoSettingsChange
32251
32364
  }
32252
32365
  ),
32253
- carouselHover && !linkPopover && !isItemDragging && /* @__PURE__ */ jsx39(
32366
+ carouselHover && !linkPopover && !isItemDragging && /* @__PURE__ */ jsx40(
32254
32367
  CarouselOverlay,
32255
32368
  {
32256
32369
  hover: carouselHover,
@@ -32258,10 +32371,10 @@ function OhhwellsBridge() {
32258
32371
  cueOnly: !!carouselHover.fullBleedSectionId && carouselHover.fullBleedSectionId !== selectedAiSectionId
32259
32372
  }
32260
32373
  ),
32261
- siblingHintRect && !linkPopover && !isItemDragging && siblingHintRects.length === 0 && /* @__PURE__ */ jsx39(ItemInteractionLayer, { rect: siblingHintRect, state: "sibling-hint" }),
32262
- siblingHintRects.length > 0 && !linkPopover && !isItemDragging && siblingHintRects.map((rect, i) => /* @__PURE__ */ jsx39(ItemInteractionLayer, { rect, state: "sibling-hint" }, `sibling-hint-${i}`)),
32263
- isItemDragging && draggedItemRect && selectedElRef.current !== footerDragRef.current?.draggedEl && selectedElRef.current !== navDragRef.current?.draggedEl && selectedElRef.current !== buttonCollectionDragRef.current && /* @__PURE__ */ jsx39(ItemInteractionLayer, { rect: draggedItemRect, state: "dragging" }),
32264
- isItemDragging && footerDropSlots.map((slot, i) => /* @__PURE__ */ jsx39(
32374
+ siblingHintRect && !linkPopover && !isItemDragging && siblingHintRects.length === 0 && /* @__PURE__ */ jsx40(ItemInteractionLayer, { rect: siblingHintRect, state: "sibling-hint" }),
32375
+ siblingHintRects.length > 0 && !linkPopover && !isItemDragging && siblingHintRects.map((rect, i) => /* @__PURE__ */ jsx40(ItemInteractionLayer, { rect, state: "sibling-hint" }, `sibling-hint-${i}`)),
32376
+ isItemDragging && draggedItemRect && selectedElRef.current !== footerDragRef.current?.draggedEl && selectedElRef.current !== navDragRef.current?.draggedEl && selectedElRef.current !== buttonCollectionDragRef.current && /* @__PURE__ */ jsx40(ItemInteractionLayer, { rect: draggedItemRect, state: "dragging" }),
32377
+ isItemDragging && footerDropSlots.map((slot, i) => /* @__PURE__ */ jsx40(
32265
32378
  "div",
32266
32379
  {
32267
32380
  className: "pointer-events-none fixed z-2147483646",
@@ -32271,7 +32384,7 @@ function OhhwellsBridge() {
32271
32384
  width: slot.width,
32272
32385
  height: slot.height
32273
32386
  },
32274
- children: /* @__PURE__ */ jsx39(
32387
+ children: /* @__PURE__ */ jsx40(
32275
32388
  DropIndicator,
32276
32389
  {
32277
32390
  direction: slot.direction,
@@ -32282,7 +32395,7 @@ function OhhwellsBridge() {
32282
32395
  },
32283
32396
  `footer-drop-${slot.direction}-${slot.columnIndex}-${slot.insertIndex}-${i}`
32284
32397
  )),
32285
- isItemDragging && navDropSlots.map((slot, i) => /* @__PURE__ */ jsx39(
32398
+ isItemDragging && navDropSlots.map((slot, i) => /* @__PURE__ */ jsx40(
32286
32399
  "div",
32287
32400
  {
32288
32401
  className: "pointer-events-none fixed z-2147483646",
@@ -32292,7 +32405,7 @@ function OhhwellsBridge() {
32292
32405
  width: slot.width,
32293
32406
  height: slot.height
32294
32407
  },
32295
- children: /* @__PURE__ */ jsx39(
32408
+ children: /* @__PURE__ */ jsx40(
32296
32409
  DropIndicator,
32297
32410
  {
32298
32411
  direction: slot.direction,
@@ -32303,7 +32416,7 @@ function OhhwellsBridge() {
32303
32416
  },
32304
32417
  `nav-drop-${slot.direction}-${slot.parentId ?? "root"}-${slot.insertIndex}-${i}`
32305
32418
  )),
32306
- isItemDragging && buttonDropSlots.map((slot, i) => /* @__PURE__ */ jsx39(
32419
+ isItemDragging && buttonDropSlots.map((slot, i) => /* @__PURE__ */ jsx40(
32307
32420
  "div",
32308
32421
  {
32309
32422
  className: "pointer-events-none fixed z-2147483646",
@@ -32313,7 +32426,7 @@ function OhhwellsBridge() {
32313
32426
  width: slot.width,
32314
32427
  height: slot.height
32315
32428
  },
32316
- children: /* @__PURE__ */ jsx39(
32429
+ children: /* @__PURE__ */ jsx40(
32317
32430
  DropIndicator,
32318
32431
  {
32319
32432
  direction: slot.direction,
@@ -32324,10 +32437,10 @@ function OhhwellsBridge() {
32324
32437
  },
32325
32438
  `button-drop-${slot.direction}-${slot.insertIndex}-${i}`
32326
32439
  )),
32327
- hoveredNavContainerRect && (toolbarVariant !== "select-frame" || isFooterFrameSelection) && !linkPopover && !isItemDragging && /* @__PURE__ */ jsx39(ItemInteractionLayer, { rect: hoveredNavContainerRect, state: "hover" }),
32328
- hoveredItemRect && !linkPopover && !hoveredNavContainerRect && !isItemDragging && hoveredItemElRef.current !== selectedElRef.current && /* @__PURE__ */ jsx39(ItemInteractionLayer, { rect: hoveredItemRect, state: "hover" }),
32329
- hoveredTextRect && !hoveredNavContainerRect && !hoveredItemRect && !isItemDragging && toolbarVariant !== "rich-text" && /* @__PURE__ */ jsx39(ItemInteractionLayer, { rect: hoveredTextRect, state: "hover" }),
32330
- formPickRect && !isItemDragging && /* @__PURE__ */ jsx39(
32440
+ hoveredNavContainerRect && (toolbarVariant !== "select-frame" || isFooterFrameSelection) && !linkPopover && !isItemDragging && /* @__PURE__ */ jsx40(ItemInteractionLayer, { rect: hoveredNavContainerRect, state: "hover" }),
32441
+ hoveredItemRect && !linkPopover && !hoveredNavContainerRect && !isItemDragging && hoveredItemElRef.current !== selectedElRef.current && /* @__PURE__ */ jsx40(ItemInteractionLayer, { rect: hoveredItemRect, state: "hover" }),
32442
+ hoveredTextRect && !hoveredNavContainerRect && !hoveredItemRect && !isItemDragging && toolbarVariant !== "rich-text" && /* @__PURE__ */ jsx40(ItemInteractionLayer, { rect: hoveredTextRect, state: "hover" }),
32443
+ formPickRect && !isItemDragging && /* @__PURE__ */ jsx40(
32331
32444
  ItemInteractionLayer,
32332
32445
  {
32333
32446
  rect: formPickRect,
@@ -32335,13 +32448,13 @@ function OhhwellsBridge() {
32335
32448
  itemDragSurface: false,
32336
32449
  toolbarAlign: "left",
32337
32450
  chromeGap: 24,
32338
- toolbar: fieldPickRect ? void 0 : /* @__PURE__ */ jsxs25(
32451
+ toolbar: fieldPickRect ? void 0 : /* @__PURE__ */ jsxs26(
32339
32452
  "div",
32340
32453
  {
32341
32454
  "data-ohw-form-toolbar": "",
32342
32455
  className: "pointer-events-auto flex items-center gap-0.5 whitespace-nowrap rounded-lg border border-border bg-background p-1 shadow-md",
32343
32456
  children: [
32344
- /* @__PURE__ */ jsx39(
32457
+ /* @__PURE__ */ jsx40(
32345
32458
  "button",
32346
32459
  {
32347
32460
  type: "button",
@@ -32349,11 +32462,11 @@ function OhhwellsBridge() {
32349
32462
  className: "flex h-7 w-7 items-center justify-center rounded-md text-foreground transition-colors hover:bg-muted/80",
32350
32463
  onClick: () => setFieldTypePickerOpen((open) => !open),
32351
32464
  "data-ohw-add-field": "",
32352
- children: /* @__PURE__ */ jsx39(Plus5, { size: 15, "aria-hidden": true })
32465
+ children: /* @__PURE__ */ jsx40(Plus5, { size: 15, "aria-hidden": true })
32353
32466
  }
32354
32467
  ),
32355
- /* @__PURE__ */ jsx39("div", { className: "mx-0.5 h-5 w-px bg-border" }),
32356
- /* @__PURE__ */ jsxs25(
32468
+ /* @__PURE__ */ jsx40("div", { className: "mx-0.5 h-5 w-px bg-border" }),
32469
+ /* @__PURE__ */ jsxs26(
32357
32470
  "button",
32358
32471
  {
32359
32472
  type: "button",
@@ -32369,11 +32482,11 @@ function OhhwellsBridge() {
32369
32482
  });
32370
32483
  },
32371
32484
  children: [
32372
- /* @__PURE__ */ jsx39(Settings, { size: 14, "aria-hidden": true }),
32485
+ /* @__PURE__ */ jsx40(Settings, { size: 14, "aria-hidden": true }),
32373
32486
  "Form settings",
32374
32487
  formPickCount ? (
32375
32488
  // Counter pill, per the design — not a text suffix.
32376
- /* @__PURE__ */ jsx39(
32489
+ /* @__PURE__ */ jsx40(
32377
32490
  "span",
32378
32491
  {
32379
32492
  "data-ohw-form-count": "",
@@ -32385,8 +32498,8 @@ function OhhwellsBridge() {
32385
32498
  ]
32386
32499
  }
32387
32500
  ),
32388
- /* @__PURE__ */ jsx39("div", { className: "mx-0.5 h-5 w-px bg-border" }),
32389
- /* @__PURE__ */ jsx39("div", { className: "flex items-center rounded-md bg-muted/70 p-0.5", children: ["default", "success"].map((state) => /* @__PURE__ */ jsx39(
32501
+ /* @__PURE__ */ jsx40("div", { className: "mx-0.5 h-5 w-px bg-border" }),
32502
+ /* @__PURE__ */ jsx40("div", { className: "flex items-center rounded-md bg-muted/70 p-0.5", children: ["default", "success"].map((state) => /* @__PURE__ */ jsx40(
32390
32503
  "button",
32391
32504
  {
32392
32505
  type: "button",
@@ -32417,7 +32530,7 @@ function OhhwellsBridge() {
32417
32530
  )
32418
32531
  }
32419
32532
  ),
32420
- formHoverRect && !isItemDragging && /* @__PURE__ */ jsx39(
32533
+ formHoverRect && !isItemDragging && /* @__PURE__ */ jsx40(
32421
32534
  ItemInteractionLayer,
32422
32535
  {
32423
32536
  rect: formHoverRect,
@@ -32425,7 +32538,7 @@ function OhhwellsBridge() {
32425
32538
  chromeGap: formHoverElRef.current && getFieldWrapper(formHoverElRef.current) ? 8 : 24
32426
32539
  }
32427
32540
  ),
32428
- fieldPickRect && fieldPickState && !isItemDragging && toolbarVariant !== "rich-text" && /* @__PURE__ */ jsx39(
32541
+ fieldPickRect && fieldPickState && !isItemDragging && toolbarVariant !== "rich-text" && /* @__PURE__ */ jsx40(
32429
32542
  ItemInteractionLayer,
32430
32543
  {
32431
32544
  rect: fieldPickRect,
@@ -32437,7 +32550,7 @@ function OhhwellsBridge() {
32437
32550
  dragHandleLabel: "Reorder field",
32438
32551
  onDragHandleDragStart: handleFieldDragStart,
32439
32552
  onDragHandleDragEnd: handleFieldDragEnd,
32440
- toolbar: /* @__PURE__ */ jsx39(
32553
+ toolbar: /* @__PURE__ */ jsx40(
32441
32554
  FormFieldToolbar,
32442
32555
  {
32443
32556
  type: fieldPickState.type,
@@ -32450,12 +32563,12 @@ function OhhwellsBridge() {
32450
32563
  )
32451
32564
  }
32452
32565
  ),
32453
- fieldDragging ? fieldDropSlots.map((slot, i) => /* @__PURE__ */ jsx39(
32566
+ fieldDragging ? fieldDropSlots.map((slot, i) => /* @__PURE__ */ jsx40(
32454
32567
  "div",
32455
32568
  {
32456
32569
  className: "pointer-events-none fixed z-[2147483644]",
32457
32570
  style: { top: slot.top, left: slot.left, width: slot.width },
32458
- children: /* @__PURE__ */ jsx39(
32571
+ children: /* @__PURE__ */ jsx40(
32459
32572
  DropIndicator,
32460
32573
  {
32461
32574
  direction: "horizontal",
@@ -32468,7 +32581,7 @@ function OhhwellsBridge() {
32468
32581
  )) : null,
32469
32582
  fieldTypePickerOpen && formPickRect ? (() => {
32470
32583
  const toolbar = document.querySelector("[data-ohw-form-toolbar]")?.getBoundingClientRect();
32471
- return /* @__PURE__ */ jsx39(
32584
+ return /* @__PURE__ */ jsx40(
32472
32585
  "div",
32473
32586
  {
32474
32587
  className: "pointer-events-none fixed z-[2147483645]",
@@ -32476,12 +32589,12 @@ function OhhwellsBridge() {
32476
32589
  top: toolbar ? toolbar.bottom + 6 : formPickRect.top + 16,
32477
32590
  left: toolbar ? toolbar.left : formPickRect.left + 24
32478
32591
  },
32479
- children: /* @__PURE__ */ jsx39(FieldTypePicker, { onPick: handleAddField })
32592
+ children: /* @__PURE__ */ jsx40(FieldTypePicker, { onPick: handleAddField })
32480
32593
  }
32481
32594
  );
32482
32595
  })() : null,
32483
- toolbarVariant === "select-frame" && toolbarRect && !linkPopover && !isItemDragging && !isFooterFrameSelection && selectedElRef.current && isNavbarLinksContainer2(selectedElRef.current) && /* @__PURE__ */ jsx39(NavbarContainerChrome, { rect: toolbarRect, onAdd: handleAddTopLevelNavItem }),
32484
- toolbarVariant === "select-frame" && toolbarRect && !linkPopover && !isItemDragging && !isFooterFrameSelection && selectedElRef.current && isFooterLinksContainer(selectedElRef.current) && /* @__PURE__ */ jsx39(
32596
+ toolbarVariant === "select-frame" && toolbarRect && !linkPopover && !isItemDragging && !isFooterFrameSelection && selectedElRef.current && isNavbarLinksContainer2(selectedElRef.current) && /* @__PURE__ */ jsx40(NavbarContainerChrome, { rect: toolbarRect, onAdd: handleAddTopLevelNavItem }),
32597
+ toolbarVariant === "select-frame" && toolbarRect && !linkPopover && !isItemDragging && !isFooterFrameSelection && selectedElRef.current && isFooterLinksContainer(selectedElRef.current) && /* @__PURE__ */ jsx40(
32485
32598
  FooterContainerChrome,
32486
32599
  {
32487
32600
  rect: toolbarRect,
@@ -32489,7 +32602,7 @@ function OhhwellsBridge() {
32489
32602
  addDisabled: !canAddFooterColumn()
32490
32603
  }
32491
32604
  ),
32492
- toolbarRect && !linkPopover && (toolbarVariant === "link-action" || toolbarVariant === "select-frame" || toolbarVariant === "logo") && /* @__PURE__ */ jsx39(
32605
+ toolbarRect && !linkPopover && (toolbarVariant === "link-action" || toolbarVariant === "select-frame" || toolbarVariant === "logo") && /* @__PURE__ */ jsx40(
32493
32606
  ItemInteractionLayer,
32494
32607
  {
32495
32608
  rect: isItemDragging && draggedItemRect && (footerDragRef.current?.wasSelected || navDragRef.current?.wasSelected || selectedElRef.current === buttonCollectionDragRef.current) ? draggedItemRect : toolbarRect,
@@ -32509,7 +32622,7 @@ function OhhwellsBridge() {
32509
32622
  onItemPointerDown: toolbarVariant === "logo" ? void 0 : handleItemChromePointerDown,
32510
32623
  onItemClick: toolbarVariant === "logo" ? void 0 : handleItemChromeClick,
32511
32624
  itemDragSurface: toolbarVariant !== "logo" && !isFooterFrameSelection && !selectedIsSocialsRow,
32512
- toolbar: toolbarVariant === "link-action" && !isItemDragging || toolbarVariant === "select-frame" && (isFooterFrameSelection || selectedIsSocialsRow) && !isItemDragging ? /* @__PURE__ */ jsx39(
32625
+ toolbar: toolbarVariant === "link-action" && !isItemDragging || toolbarVariant === "select-frame" && (isFooterFrameSelection || selectedIsSocialsRow) && !isItemDragging ? /* @__PURE__ */ jsx40(
32513
32626
  ItemActionToolbar,
32514
32627
  {
32515
32628
  onEditLink: openLinkPopoverForSelected,
@@ -32560,8 +32673,8 @@ function OhhwellsBridge() {
32560
32673
  ) : void 0
32561
32674
  }
32562
32675
  ),
32563
- toolbarRect && toolbarVariant === "rich-text" && !linkPopover && !isRectOutsideClip(toolbarRect, getIframeVisibleClip(parentScrollRef.current)) && /* @__PURE__ */ jsxs25(Fragment12, { children: [
32564
- /* @__PURE__ */ jsx39(
32676
+ toolbarRect && toolbarVariant === "rich-text" && !linkPopover && !isRectOutsideClip(toolbarRect, getIframeVisibleClip(parentScrollRef.current)) && /* @__PURE__ */ jsxs26(Fragment13, { children: [
32677
+ /* @__PURE__ */ jsx40(
32565
32678
  EditGlowChrome,
32566
32679
  {
32567
32680
  rect: toolbarRect,
@@ -32571,7 +32684,7 @@ function OhhwellsBridge() {
32571
32684
  hideHandle: isItemDragging
32572
32685
  }
32573
32686
  ),
32574
- /* @__PURE__ */ jsx39(
32687
+ /* @__PURE__ */ jsx40(
32575
32688
  FloatingToolbar,
32576
32689
  {
32577
32690
  rect: toolbarRect,
@@ -32584,7 +32697,7 @@ function OhhwellsBridge() {
32584
32697
  }
32585
32698
  )
32586
32699
  ] }),
32587
- maxBadge && /* @__PURE__ */ jsxs25(
32700
+ maxBadge && /* @__PURE__ */ jsxs26(
32588
32701
  "div",
32589
32702
  {
32590
32703
  "data-ohw-max-badge": "",
@@ -32610,7 +32723,7 @@ function OhhwellsBridge() {
32610
32723
  ]
32611
32724
  }
32612
32725
  ),
32613
- toggleState && !linkPopover && /* @__PURE__ */ jsx39(
32726
+ toggleState && !linkPopover && /* @__PURE__ */ jsx40(
32614
32727
  StateToggle,
32615
32728
  {
32616
32729
  rect: toggleState.rect,
@@ -32619,15 +32732,15 @@ function OhhwellsBridge() {
32619
32732
  onStateChange: handleStateChange
32620
32733
  }
32621
32734
  ),
32622
- sectionGap && !linkPopover && /* @__PURE__ */ jsxs25(
32735
+ sectionGap && !linkPopover && /* @__PURE__ */ jsxs26(
32623
32736
  "div",
32624
32737
  {
32625
32738
  "data-ohw-section-insert-line": "",
32626
32739
  className: "fixed left-0 w-full z-2147483646 flex items-center pointer-events-none",
32627
32740
  style: { top: sectionGap.y, transform: "translateY(-50%)" },
32628
32741
  children: [
32629
- /* @__PURE__ */ jsx39("div", { className: "flex-1 bg-bridge-primary", style: { height: 3 } }),
32630
- /* @__PURE__ */ jsx39(
32742
+ /* @__PURE__ */ jsx40("div", { className: "flex-1 bg-bridge-primary", style: { height: 3 } }),
32743
+ /* @__PURE__ */ jsx40(
32631
32744
  Badge,
32632
32745
  {
32633
32746
  className: "px-8 py-1 bg-bridge-primary hover:bg-bridge-primary text-primary-foreground text-xs font-medium shrink-0 rounded-full cursor-pointer pointer-events-auto",
@@ -32644,11 +32757,11 @@ function OhhwellsBridge() {
32644
32757
  children: "Add Section"
32645
32758
  }
32646
32759
  ),
32647
- /* @__PURE__ */ jsx39("div", { className: "flex-1 bg-bridge-primary", style: { height: 3 } })
32760
+ /* @__PURE__ */ jsx40("div", { className: "flex-1 bg-bridge-primary", style: { height: 3 } })
32648
32761
  ]
32649
32762
  }
32650
32763
  ),
32651
- linkPopover && dialogPortalContainer ? /* @__PURE__ */ jsx39(
32764
+ linkPopover && dialogPortalContainer ? /* @__PURE__ */ jsx40(
32652
32765
  LinkPopover,
32653
32766
  {
32654
32767
  panelRef: linkPopoverPanelRef,
@@ -32665,7 +32778,7 @@ function OhhwellsBridge() {
32665
32778
  },
32666
32779
  linkPopover.key
32667
32780
  ) : null,
32668
- floatingPanel && floatingPanel.kind === "socials-display" ? /* @__PURE__ */ jsx39(
32781
+ floatingPanel && floatingPanel.kind === "socials-display" ? /* @__PURE__ */ jsx40(
32669
32782
  FloatingPanel,
32670
32783
  {
32671
32784
  open: true,
@@ -32675,7 +32788,7 @@ function OhhwellsBridge() {
32675
32788
  onPositionChange: setFloatingPanelPos,
32676
32789
  parentScroll: parentScrollSnap ?? parentScrollRef.current,
32677
32790
  onClose: closeFloatingPanelOnly,
32678
- children: /* @__PURE__ */ jsx39(
32791
+ children: /* @__PURE__ */ jsx40(
32679
32792
  SocialsDisplayPanel,
32680
32793
  {
32681
32794
  display: socialsDisplayFor(floatingPanel.row, editContentRef.current),
@@ -32696,19 +32809,19 @@ function OhhwellsBridge() {
32696
32809
  const tokens = tokensFromButton(button);
32697
32810
  const current = assignmentFor(button, editContentRef.current, tokens);
32698
32811
  void buttonStyleTick;
32699
- return /* @__PURE__ */ jsx39(
32812
+ return /* @__PURE__ */ jsx40(
32700
32813
  FloatingPanel,
32701
32814
  {
32702
32815
  open: true,
32703
32816
  title: floatingPanel.title,
32704
32817
  context: floatingPanel.context,
32705
- icon: /* @__PURE__ */ jsx39(Brush2, { className: "size-4 shrink-0", "aria-hidden": true }),
32818
+ icon: /* @__PURE__ */ jsx40(Brush2, { className: "size-4 shrink-0", "aria-hidden": true }),
32706
32819
  position: floatingPanelPos,
32707
32820
  onPositionChange: setFloatingPanelPos,
32708
32821
  parentScroll: parentScrollSnap ?? parentScrollRef.current,
32709
32822
  onClose: closeFloatingPanelOnly,
32710
32823
  bodyClassName: "gap-5",
32711
- children: /* @__PURE__ */ jsx39(
32824
+ children: /* @__PURE__ */ jsx40(
32712
32825
  ButtonStylePanel,
32713
32826
  {
32714
32827
  variants: tokens.variants,
@@ -32736,10 +32849,10 @@ function OhhwellsBridge() {
32736
32849
 
32737
32850
  // src/ui/EmptySection.tsx
32738
32851
  import Link3 from "next/link";
32739
- import { Fragment as Fragment13, jsx as jsx40, jsxs as jsxs26 } from "react/jsx-runtime";
32852
+ import { Fragment as Fragment14, jsx as jsx41, jsxs as jsxs27 } from "react/jsx-runtime";
32740
32853
  function EmptySection({ title, homeHref = "/", eyebrowKey, titleKey, subtitleKey }) {
32741
- return /* @__PURE__ */ jsxs26(Fragment13, { children: [
32742
- /* @__PURE__ */ jsx40(
32854
+ return /* @__PURE__ */ jsxs27(Fragment14, { children: [
32855
+ /* @__PURE__ */ jsx41(
32743
32856
  "p",
32744
32857
  {
32745
32858
  style: {
@@ -32751,10 +32864,10 @@ function EmptySection({ title, homeHref = "/", eyebrowKey, titleKey, subtitleKey
32751
32864
  color: "var(--brand-accent)",
32752
32865
  marginBottom: "1.5rem"
32753
32866
  },
32754
- children: /* @__PURE__ */ jsx40(Link3, { href: homeHref, style: { color: "inherit" }, children: /* @__PURE__ */ jsx40("span", { ...eyebrowKey ? { "data-ohw-editable": "text", "data-ohw-key": eyebrowKey } : {}, children: "Home" }) })
32867
+ children: /* @__PURE__ */ jsx41(Link3, { href: homeHref, style: { color: "inherit" }, children: /* @__PURE__ */ jsx41("span", { ...eyebrowKey ? { "data-ohw-editable": "text", "data-ohw-key": eyebrowKey } : {}, children: "Home" }) })
32755
32868
  }
32756
32869
  ),
32757
- /* @__PURE__ */ jsx40(
32870
+ /* @__PURE__ */ jsx41(
32758
32871
  "h1",
32759
32872
  {
32760
32873
  style: {
@@ -32769,7 +32882,7 @@ function EmptySection({ title, homeHref = "/", eyebrowKey, titleKey, subtitleKey
32769
32882
  children: title
32770
32883
  }
32771
32884
  ),
32772
- /* @__PURE__ */ jsx40(
32885
+ /* @__PURE__ */ jsx41(
32773
32886
  "p",
32774
32887
  {
32775
32888
  style: {
@@ -32793,6 +32906,7 @@ export {
32793
32906
  AI_TREE_TOKENS,
32794
32907
  AiFooterRenderer,
32795
32908
  AiTreeRenderer,
32909
+ BRAND_TITLE_KEY,
32796
32910
  CustomToolbar,
32797
32911
  CustomToolbarButton,
32798
32912
  CustomToolbarDivider,
@@ -32812,7 +32926,12 @@ export {
32812
32926
  ItemInteractionLayer,
32813
32927
  LinkEditorPanel,
32814
32928
  LinkPopover,
32929
+ OHW_LOADER_PREHYDRATE_SCRIPT,
32930
+ OHW_LOADER_STYLE,
32815
32931
  OhhwellsBridge,
32932
+ OhwLoaderSpinner,
32933
+ OhwLoaderSurface,
32934
+ SITE_OG_IMAGE_KEY,
32816
32935
  SchedulingWidget,
32817
32936
  Toggle,
32818
32937
  ToggleGroup,
@@ -32823,6 +32942,8 @@ export {
32823
32942
  TooltipTrigger,
32824
32943
  addFooterLinkColumn,
32825
32944
  appendFooterSocial,
32945
+ applyBrandChrome,
32946
+ applyStickySearchParams,
32826
32947
  buildDefaultFooterTree,
32827
32948
  buildTarget,
32828
32949
  dropIndicatorVariants,
@@ -32830,18 +32951,25 @@ export {
32830
32951
  filterAvailablePages,
32831
32952
  foldAlignIntoTrees,
32832
32953
  getEditModeInitialState,
32954
+ hasMountedContentNodes,
32833
32955
  insertFooterHours,
32834
32956
  isEditSessionActive,
32957
+ isPlainLeftClick,
32835
32958
  isRenderableFooterTree,
32836
32959
  isRenderableTree,
32960
+ isStickySearchParam,
32837
32961
  isValidUrl,
32838
32962
  nextViableSlide,
32839
32963
  parseAiFooterState,
32840
32964
  parseAiSectionsState,
32841
32965
  parseTarget,
32966
+ recordOverriddenPaths,
32842
32967
  removeFooterBlock,
32968
+ resetOverriddenPathsCache,
32843
32969
  resolveFooterCopyright,
32970
+ resolveStickyNavigation,
32844
32971
  serializeAiFooterState,
32972
+ shouldFetchContentForPath,
32845
32973
  stepViableSlide,
32846
32974
  stripTextAlignCss,
32847
32975
  toggleVariants,