@flamingo-stack/openframe-frontend-core 0.0.705 → 0.0.706-snapshot.20261006190707

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.
Files changed (206) hide show
  1. package/dist/{chunk-4KX6OED2.cjs → chunk-2G7UYK35.cjs} +46 -46
  2. package/dist/{chunk-KOWVJD4V.cjs → chunk-2KXTOP6G.cjs} +70 -57
  3. package/dist/{chunk-A75QY6CD.cjs → chunk-2RNB5DTN.cjs} +21 -21
  4. package/dist/{chunk-PN2RKPDF.js → chunk-36BCTE7D.js} +10 -10
  5. package/dist/{chunk-ZSAGLQOD.cjs → chunk-3AHTOSXJ.cjs} +17 -17
  6. package/dist/{chunk-VR2ZLFCP.js → chunk-4IBPRIQH.js} +1 -1
  7. package/dist/{chunk-FCGC42TS.js → chunk-4L6XCMOU.js} +66 -62
  8. package/dist/{chunk-X5MQ7JRP.js → chunk-4UM2ETLM.js} +9 -9
  9. package/dist/{chunk-6NJKKO73.cjs → chunk-6I4ZAFO2.cjs} +15 -15
  10. package/dist/{chunk-RBDP4WDE.js → chunk-6IW7TWPV.js} +6 -6
  11. package/dist/{chunk-MMOODW57.cjs → chunk-6NTPY5QA.cjs} +1887 -94
  12. package/dist/{chunk-QFXRPRFT.js → chunk-6YKAT7NV.js} +3 -3
  13. package/dist/{chunk-HPWWNJE7.cjs → chunk-AOWDNSTM.cjs} +89 -89
  14. package/dist/{chunk-IHERL5V4.cjs → chunk-B73373AG.cjs} +34 -34
  15. package/dist/{chunk-DENB2XJC.js → chunk-CNWOMQQJ.js} +2 -2
  16. package/dist/{chunk-MP2C3LJ4.js → chunk-CUME3VTQ.js} +1 -1
  17. package/dist/{chunk-PDWVPI3S.js → chunk-CZ7Y7UG4.js} +4 -72
  18. package/dist/{chunk-YHM5AWTT.js → chunk-CZSZSDD4.js} +6 -6
  19. package/dist/{chunk-F6I6XZMN.js → chunk-DA5UDTLG.js} +5 -5
  20. package/dist/{chunk-MFFCUVWG.js → chunk-F57ECE2I.js} +1 -1
  21. package/dist/{chunk-CH5232HV.js → chunk-FI6GMDO7.js} +2455 -662
  22. package/dist/{chunk-NDESEPW5.js → chunk-FXJ3WWUB.js} +68 -0
  23. package/dist/{chunk-G5A3PSPV.js → chunk-HDOYSEOJ.js} +1080 -691
  24. package/dist/{chunk-VA5T32XA.js → chunk-I3ST4PLM.js} +2 -2
  25. package/dist/{chunk-5HBHO5TB.js → chunk-JPG7OHEG.js} +1 -1
  26. package/dist/{chunk-YFBM2K6X.cjs → chunk-JRU2CXLB.cjs} +4 -4
  27. package/dist/{chunk-MKXO4Q5P.js → chunk-KUC673HM.js} +383 -142
  28. package/dist/{chunk-JEZKGCZI.cjs → chunk-L6Y6OOKG.cjs} +26 -26
  29. package/dist/{chunk-F6AFPNDF.js → chunk-LFFB6EMB.js} +29 -16
  30. package/dist/{chunk-X72J4ACL.cjs → chunk-LLSUVPQC.cjs} +252 -8
  31. package/dist/{chunk-RKV5B7EU.cjs → chunk-LM7TXMLU.cjs} +72 -4
  32. package/dist/{chunk-6SEANMOU.js → chunk-LNW45N2C.js} +11 -11
  33. package/dist/{chunk-OUY3HHW6.cjs → chunk-LRQTJOF2.cjs} +928 -539
  34. package/dist/{chunk-DW7G4KG3.js → chunk-MR3A4MZV.js} +3 -3
  35. package/dist/{chunk-2YXVWZVF.js → chunk-N45D4ZXQ.js} +959 -715
  36. package/dist/{chunk-Z2VNQQ74.js → chunk-NCPTID44.js} +978 -942
  37. package/dist/{chunk-WA6GUYQ4.cjs → chunk-NSGXARGJ.cjs} +104 -104
  38. package/dist/{chunk-ABU3TGXA.cjs → chunk-OF6GEI5A.cjs} +3 -3
  39. package/dist/{chunk-IKTQ3ZAG.cjs → chunk-OJLR5MEO.cjs} +6 -6
  40. package/dist/{chunk-VESKITRQ.cjs → chunk-P42V6N34.cjs} +736 -732
  41. package/dist/{chunk-OHFS7VOU.cjs → chunk-PLYEKV3N.cjs} +2 -2
  42. package/dist/{chunk-7VVFKJY5.js → chunk-PO33GZVY.js} +1799 -3449
  43. package/dist/{chunk-7LS22BZU.cjs → chunk-QAOFMK2A.cjs} +14 -14
  44. package/dist/{chunk-VHCACDKP.cjs → chunk-RQRX4YC3.cjs} +39 -39
  45. package/dist/{chunk-3MX5S4CF.cjs → chunk-SEXWHIMS.cjs} +899 -2549
  46. package/dist/{chunk-AQWZNP6A.js → chunk-SS5MBHDP.js} +4 -4
  47. package/dist/{chunk-ZSAO2HBW.js → chunk-TDYIREDJ.js} +15 -15
  48. package/dist/{chunk-XOYH2YQE.cjs → chunk-UDFRUKLC.cjs} +2 -2
  49. package/dist/{chunk-TYWLNCNH.cjs → chunk-UVTD52MD.cjs} +14 -82
  50. package/dist/{chunk-N3COXDBH.cjs → chunk-VX4E6YSB.cjs} +41 -5
  51. package/dist/{chunk-2QEUFXNS.cjs → chunk-WCVZCGK5.cjs} +312 -71
  52. package/dist/{chunk-6XIF2Z7I.js → chunk-WMX26HB5.js} +3 -3
  53. package/dist/{chunk-D7BTSVMS.cjs → chunk-Y2GSOUCS.cjs} +2 -2
  54. package/dist/{chunk-4I45Y3DN.cjs → chunk-YBUT4AMG.cjs} +6 -6
  55. package/dist/components/case-studies/index.cjs +30 -32
  56. package/dist/components/case-studies/index.js +14 -16
  57. package/dist/components/chat/entity-cards/case-study-card.d.ts +11 -4
  58. package/dist/components/chat/entity-cards/case-study-card.d.ts.map +1 -1
  59. package/dist/components/chat/index.cjs +11 -11
  60. package/dist/components/chat/index.d.ts +1 -1
  61. package/dist/components/chat/index.d.ts.map +1 -1
  62. package/dist/components/chat/index.js +16 -16
  63. package/dist/components/chat/nav-link-anchor-via-runtime.d.ts +34 -5
  64. package/dist/components/chat/nav-link-anchor-via-runtime.d.ts.map +1 -1
  65. package/dist/components/chat/utils/icon-library.d.ts.map +1 -1
  66. package/dist/components/contact/index.cjs +12 -14
  67. package/dist/components/contact/index.js +11 -13
  68. package/dist/components/docs/index.cjs +15 -17
  69. package/dist/components/docs/index.js +14 -16
  70. package/dist/components/embeds/index.cjs +12 -14
  71. package/dist/components/embeds/index.js +11 -13
  72. package/dist/components/faq/index.cjs +13 -15
  73. package/dist/components/faq/index.js +12 -14
  74. package/dist/components/features/index.cjs +12 -14
  75. package/dist/components/features/index.js +21 -23
  76. package/dist/components/help-center-pages/index.cjs +118 -120
  77. package/dist/components/help-center-pages/index.js +33 -35
  78. package/dist/components/icons/index.cjs +3 -5
  79. package/dist/components/icons/index.js +9 -11
  80. package/dist/components/icons-v2-generated/index.cjs +3 -5
  81. package/dist/components/icons-v2-generated/index.js +2 -4
  82. package/dist/components/index.cjs +87 -158
  83. package/dist/components/index.d.ts +0 -2
  84. package/dist/components/index.d.ts.map +1 -1
  85. package/dist/components/index.js +331 -402
  86. package/dist/components/loading/page-layout-skeleton.d.ts +1 -1
  87. package/dist/components/meeting-scheduler/index.cjs +62 -64
  88. package/dist/components/meeting-scheduler/index.js +12 -14
  89. package/dist/components/navigation/index.cjs +28 -16
  90. package/dist/components/navigation/index.d.ts +14 -10
  91. package/dist/components/navigation/index.d.ts.map +1 -1
  92. package/dist/components/navigation/index.js +38 -26
  93. package/dist/components/navigation/mingo-ai-button.d.ts +38 -3
  94. package/dist/components/navigation/mingo-ai-button.d.ts.map +1 -1
  95. package/dist/components/navigation/mobile-nav-sheet-id.d.ts +3 -0
  96. package/dist/components/navigation/mobile-nav-sheet-id.d.ts.map +1 -0
  97. package/dist/components/navigation/mobile-nav-sheet.d.ts +48 -0
  98. package/dist/components/navigation/mobile-nav-sheet.d.ts.map +1 -0
  99. package/dist/components/navigation/nav-item-row.d.ts +27 -0
  100. package/dist/components/navigation/nav-item-row.d.ts.map +1 -0
  101. package/dist/components/navigation/nav-panel.d.ts +43 -0
  102. package/dist/components/navigation/nav-panel.d.ts.map +1 -0
  103. package/dist/components/navigation/navigation-sidebar-item.d.ts +1 -2
  104. package/dist/components/navigation/navigation-sidebar-item.d.ts.map +1 -1
  105. package/dist/components/navigation/site-footer.d.ts +28 -0
  106. package/dist/components/navigation/site-footer.d.ts.map +1 -0
  107. package/dist/components/navigation/site-header.d.ts +61 -0
  108. package/dist/components/navigation/site-header.d.ts.map +1 -0
  109. package/dist/components/navigation/site-nav-link.d.ts +26 -0
  110. package/dist/components/navigation/site-nav-link.d.ts.map +1 -0
  111. package/dist/components/navigation/top-navigation.d.ts +2 -2
  112. package/dist/components/navigation/top-navigation.d.ts.map +1 -1
  113. package/dist/components/onboarding-guides/index.cjs +15 -17
  114. package/dist/components/onboarding-guides/index.js +14 -16
  115. package/dist/components/platform/ToolBadge.d.ts +6 -0
  116. package/dist/components/platform/ToolBadge.d.ts.map +1 -1
  117. package/dist/components/related-content/index.cjs +10 -8
  118. package/dist/components/related-content/index.js +9 -7
  119. package/dist/components/tickets/index.cjs +16 -18
  120. package/dist/components/tickets/index.js +15 -17
  121. package/dist/components/ui/brand-association-card.d.ts +7 -0
  122. package/dist/components/ui/brand-association-card.d.ts.map +1 -1
  123. package/dist/components/ui/index.cjs +14 -14
  124. package/dist/components/ui/index.js +19 -19
  125. package/dist/hooks/index.cjs +19 -11
  126. package/dist/hooks/index.d.ts +1 -0
  127. package/dist/hooks/index.d.ts.map +1 -1
  128. package/dist/hooks/index.js +19 -11
  129. package/dist/hooks/ui/index.d.ts +3 -0
  130. package/dist/hooks/ui/index.d.ts.map +1 -1
  131. package/dist/hooks/ui/use-active-section.d.ts +10 -0
  132. package/dist/hooks/ui/use-active-section.d.ts.map +1 -0
  133. package/dist/hooks/ui/use-nav-menus.d.ts +48 -0
  134. package/dist/hooks/ui/use-nav-menus.d.ts.map +1 -0
  135. package/dist/hooks/ui/use-visitor-os.d.ts +15 -0
  136. package/dist/hooks/ui/use-visitor-os.d.ts.map +1 -0
  137. package/dist/hooks/use-location-hash.d.ts +9 -0
  138. package/dist/hooks/use-location-hash.d.ts.map +1 -0
  139. package/dist/index.cjs +56 -21
  140. package/dist/index.js +231 -196
  141. package/dist/types/case-study.d.ts +9 -0
  142. package/dist/types/case-study.d.ts.map +1 -1
  143. package/dist/types/navigation.d.ts +95 -65
  144. package/dist/types/navigation.d.ts.map +1 -1
  145. package/dist/utils/index.cjs +55 -0
  146. package/dist/utils/index.d.ts +1 -0
  147. package/dist/utils/index.d.ts.map +1 -1
  148. package/dist/utils/index.js +50 -1
  149. package/dist/utils/source-icons.d.ts.map +1 -1
  150. package/dist/utils/visitor-os.d.ts +45 -0
  151. package/dist/utils/visitor-os.d.ts.map +1 -0
  152. package/package.json +1 -1
  153. package/src/components/chat/entity-cards/case-study-card.tsx +115 -5
  154. package/src/components/chat/index.ts +7 -1
  155. package/src/components/chat/nav-link-anchor-via-runtime.tsx +62 -9
  156. package/src/components/chat/utils/icon-library.tsx +35 -1
  157. package/src/components/index.ts +0 -2
  158. package/src/components/loading/page-layout-skeleton.tsx +1 -1
  159. package/src/components/navigation/index.ts +21 -14
  160. package/src/components/navigation/mingo-ai-button.tsx +139 -63
  161. package/src/components/navigation/mobile-nav-sheet-id.ts +2 -0
  162. package/src/components/navigation/mobile-nav-sheet.tsx +241 -0
  163. package/src/components/navigation/nav-item-row.tsx +129 -0
  164. package/src/components/navigation/nav-panel.tsx +196 -0
  165. package/src/components/navigation/navigation-sidebar-item.tsx +1 -2
  166. package/src/components/navigation/site-footer.tsx +256 -0
  167. package/src/components/navigation/site-header.tsx +339 -0
  168. package/src/components/navigation/site-nav-link.tsx +41 -0
  169. package/src/components/navigation/ticket-alerts-button.tsx +2 -2
  170. package/src/components/navigation/top-navigation.tsx +2 -2
  171. package/src/components/platform/ToolBadge.tsx +18 -1
  172. package/src/components/ui/brand-association-card.tsx +25 -3
  173. package/src/hooks/index.ts +1 -0
  174. package/src/hooks/ui/index.ts +3 -0
  175. package/src/hooks/ui/use-active-section.ts +44 -0
  176. package/src/hooks/ui/use-nav-menus.ts +200 -0
  177. package/src/hooks/ui/use-visitor-os.ts +33 -0
  178. package/src/hooks/use-location-hash.ts +34 -0
  179. package/src/styles/chat-animations.css +57 -2
  180. package/src/types/case-study.ts +16 -0
  181. package/src/types/navigation.ts +80 -66
  182. package/src/utils/index.ts +1 -0
  183. package/src/utils/source-icons.ts +13 -0
  184. package/src/utils/visitor-os.ts +84 -0
  185. package/dist/chunk-LMBC5FFP.js +0 -43
  186. package/dist/chunk-O43V3EOS.js +0 -252
  187. package/dist/chunk-QZVSJF2K.cjs +0 -252
  188. package/dist/chunk-RALRPFDW.cjs +0 -43
  189. package/dist/components/footer-waitlist-button.d.ts +0 -29
  190. package/dist/components/footer-waitlist-button.d.ts.map +0 -1
  191. package/dist/components/footer.d.ts +0 -47
  192. package/dist/components/footer.d.ts.map +0 -1
  193. package/dist/components/navigation/client-only-header.d.ts +0 -8
  194. package/dist/components/navigation/client-only-header.d.ts.map +0 -1
  195. package/dist/components/navigation/header-skeleton.d.ts +0 -12
  196. package/dist/components/navigation/header-skeleton.d.ts.map +0 -1
  197. package/dist/components/navigation/header.d.ts +0 -9
  198. package/dist/components/navigation/header.d.ts.map +0 -1
  199. package/dist/components/navigation/mobile-nav-panel.d.ts +0 -10
  200. package/dist/components/navigation/mobile-nav-panel.d.ts.map +0 -1
  201. package/src/components/footer-waitlist-button.tsx +0 -53
  202. package/src/components/footer.tsx +0 -195
  203. package/src/components/navigation/client-only-header.tsx +0 -22
  204. package/src/components/navigation/header-skeleton.tsx +0 -74
  205. package/src/components/navigation/header.tsx +0 -429
  206. package/src/components/navigation/mobile-nav-panel.tsx +0 -155
@@ -9,7 +9,7 @@ var _chunkMZ4KBSH7cjs = require('./chunk-MZ4KBSH7.cjs');
9
9
 
10
10
 
11
11
 
12
- var _chunkABU3TGXAcjs = require('./chunk-ABU3TGXA.cjs');
12
+ var _chunkOF6GEI5Acjs = require('./chunk-OF6GEI5A.cjs');
13
13
 
14
14
 
15
15
 
@@ -18,7 +18,7 @@ var _chunkABU3TGXAcjs = require('./chunk-ABU3TGXA.cjs');
18
18
 
19
19
 
20
20
 
21
- var _chunkTYWLNCNHcjs = require('./chunk-TYWLNCNH.cjs');
21
+ var _chunkUVTD52MDcjs = require('./chunk-UVTD52MD.cjs');
22
22
 
23
23
 
24
24
 
@@ -27,21 +27,19 @@ var _chunk7DNL734Scjs = require('./chunk-7DNL734S.cjs');
27
27
 
28
28
 
29
29
 
30
- var _chunkX72J4ACLcjs = require('./chunk-X72J4ACL.cjs');
31
30
 
31
+ var _chunkLM7TXMLUcjs = require('./chunk-LM7TXMLU.cjs');
32
32
 
33
33
 
34
- var _chunkN3COXDBHcjs = require('./chunk-N3COXDBH.cjs');
35
34
 
36
35
 
37
36
 
38
37
 
38
+ var _chunkLLSUVPQCcjs = require('./chunk-LLSUVPQC.cjs');
39
39
 
40
- var _chunkRKV5B7EUcjs = require('./chunk-RKV5B7EU.cjs');
41
40
 
42
41
 
43
-
44
- var _chunkQZVSJF2Kcjs = require('./chunk-QZVSJF2K.cjs');
42
+ var _chunkVX4E6YSBcjs = require('./chunk-VX4E6YSB.cjs');
45
43
 
46
44
 
47
45
  var _chunk3ATAYP36cjs = require('./chunk-3ATAYP36.cjs');
@@ -145,9 +143,9 @@ function useDeferredError(error, value, delay = 1500) {
145
143
  }
146
144
 
147
145
  // src/hooks/ui/use-drag-and-drop-enabled.ts
148
- var DRAG_AND_DROP_MEDIA_QUERY = `(pointer: fine) and (hover: hover) and ${_chunkRKV5B7EUcjs.breakpoints.md}`;
146
+ var DRAG_AND_DROP_MEDIA_QUERY = `(pointer: fine) and (hover: hover) and ${_chunkLM7TXMLUcjs.breakpoints.md}`;
149
147
  function useDragAndDropEnabled() {
150
- return _nullishCoalesce(_chunkRKV5B7EUcjs.useMediaQuery.call(void 0, DRAG_AND_DROP_MEDIA_QUERY), () => ( false));
148
+ return _nullishCoalesce(_chunkLM7TXMLUcjs.useMediaQuery.call(void 0, DRAG_AND_DROP_MEDIA_QUERY), () => ( false));
151
149
  }
152
150
 
153
151
  // src/hooks/ui/use-focus-trap.ts
@@ -483,7 +481,7 @@ function useLocalStorage(key, initialValue, options) {
483
481
  });
484
482
  const validate = _optionalChain([options, 'optionalAccess', _17 => _17.validate]);
485
483
  const storage = _react.useMemo.call(void 0,
486
- () => _chunkRKV5B7EUcjs.createLocalStorageAdapter.call(void 0, { key, validate, logTag: `[useLocalStorage:${key}]` }),
484
+ () => _chunkLM7TXMLUcjs.createLocalStorageAdapter.call(void 0, { key, validate, logTag: `[useLocalStorage:${key}]` }),
487
485
  [key, validate]
488
486
  );
489
487
  const [storedValue, setStoredValue] = _react.useState.call(void 0, () => _nullishCoalesce(storage.load(), () => ( initialValue)));
@@ -767,7 +765,7 @@ function useSearch(config) {
767
765
  searchFnRef.current = searchFn;
768
766
  mapResultRef.current = mapResult;
769
767
  });
770
- const debouncedQuery = _chunkTYWLNCNHcjs.useDebounce.call(void 0, query, debounceMs);
768
+ const debouncedQuery = _chunkUVTD52MDcjs.useDebounce.call(void 0, query, debounceMs);
771
769
  const clearResults = _react.useCallback.call(void 0, () => {
772
770
  setResults(NO_RESULTS);
773
771
  setError(null);
@@ -897,6 +895,217 @@ function useWindowSize() {
897
895
  // src/hooks/ui/index.ts
898
896
  var _overlays = require('@react-aria/overlays');
899
897
 
898
+ // src/hooks/ui/use-active-section.ts
899
+
900
+ function pathOf(href) {
901
+ if (!href || !href.startsWith("/") || href.startsWith("//")) return null;
902
+ const path = href.split(/[?#]/)[0];
903
+ return path.length > 1 ? path.replace(/\/+$/, "") : "/";
904
+ }
905
+ function prefixHolds(prefix, pathname) {
906
+ if (prefix === "/") return pathname === "/";
907
+ return pathname === prefix || pathname.startsWith(`${prefix}/`);
908
+ }
909
+ function resolveActiveSection(menus, pathname) {
910
+ const current = pathOf(_nullishCoalesce(pathname, () => ( void 0)));
911
+ if (!current) return null;
912
+ let best = null;
913
+ for (const menu of menus) {
914
+ const prefixes = _optionalChain([menu, 'access', _30 => _30.match, 'optionalAccess', _31 => _31.length]) ? menu.match : [menu.href];
915
+ for (const raw of prefixes) {
916
+ const prefix = pathOf(raw);
917
+ if (!prefix || !prefixHolds(prefix, current)) continue;
918
+ if (!best || prefix.length > best.length) best = { id: menu.id, length: prefix.length };
919
+ }
920
+ }
921
+ return _nullishCoalesce(_optionalChain([best, 'optionalAccess', _32 => _32.id]), () => ( null));
922
+ }
923
+ function useActiveSection(menus, pathname) {
924
+ return _react.useMemo.call(void 0, () => resolveActiveSection(menus, pathname), [menus, pathname]);
925
+ }
926
+
927
+ // src/hooks/ui/use-nav-menus.ts
928
+
929
+
930
+
931
+
932
+
933
+
934
+
935
+ function useNavMenus({
936
+ pathname,
937
+ hoverOpenMs = 150,
938
+ hoverCloseMs = 300
939
+ }) {
940
+ const baseId = _react.useId.call(void 0, );
941
+ const [opened, setOpened] = _react.useState.call(void 0, null);
942
+ const stale = opened !== null && opened.pathname !== pathname;
943
+ if (stale) setOpened(null);
944
+ const openId = opened && !stale ? opened.id : null;
945
+ const triggers = _react.useRef.call(void 0, /* @__PURE__ */ new Map());
946
+ const panels = _react.useRef.call(void 0, /* @__PURE__ */ new Map());
947
+ const openTimer = _react.useRef.call(void 0, null);
948
+ const closeTimer = _react.useRef.call(void 0, null);
949
+ const openedByHover = _react.useRef.call(void 0, null);
950
+ const clearTimers = _react.useCallback.call(void 0, () => {
951
+ if (openTimer.current) clearTimeout(openTimer.current);
952
+ if (closeTimer.current) clearTimeout(closeTimer.current);
953
+ openTimer.current = null;
954
+ closeTimer.current = null;
955
+ }, []);
956
+ _react.useEffect.call(void 0, () => clearTimers, [clearTimers]);
957
+ const close = _react.useCallback.call(void 0, () => {
958
+ clearTimers();
959
+ setOpened(null);
960
+ }, [clearTimers]);
961
+ const cancelClose = _react.useCallback.call(void 0, () => {
962
+ if (closeTimer.current) clearTimeout(closeTimer.current);
963
+ closeTimer.current = null;
964
+ }, []);
965
+ const scheduleClose = _react.useCallback.call(void 0, () => {
966
+ if (openTimer.current) clearTimeout(openTimer.current);
967
+ openTimer.current = null;
968
+ cancelClose();
969
+ closeTimer.current = setTimeout(() => {
970
+ closeTimer.current = null;
971
+ setOpened(null);
972
+ }, hoverCloseMs);
973
+ }, [cancelClose, hoverCloseMs]);
974
+ _react.useEffect.call(void 0, () => {
975
+ if (!openId) return void 0;
976
+ const handleKeyDown = (event) => {
977
+ if (event.key !== "Escape") return;
978
+ const trigger = triggers.current.get(openId);
979
+ close();
980
+ _optionalChain([trigger, 'optionalAccess', _33 => _33.focus, 'call', _34 => _34({ preventScroll: true })]);
981
+ };
982
+ const handlePointerDown = (event) => {
983
+ const target = event.target;
984
+ if (!(target instanceof Node)) return;
985
+ for (const el of triggers.current.values()) if (el.contains(target)) return;
986
+ for (const el of panels.current.values()) if (el.contains(target)) return;
987
+ close();
988
+ };
989
+ document.addEventListener("keydown", handleKeyDown);
990
+ document.addEventListener("pointerdown", handlePointerDown);
991
+ return () => {
992
+ document.removeEventListener("keydown", handleKeyDown);
993
+ document.removeEventListener("pointerdown", handlePointerDown);
994
+ };
995
+ }, [openId, close]);
996
+ const getTriggerProps = _react.useCallback.call(void 0,
997
+ (id) => ({
998
+ ref: (el) => {
999
+ if (el) triggers.current.set(id, el);
1000
+ else triggers.current.delete(id);
1001
+ },
1002
+ "aria-expanded": openId === id,
1003
+ "aria-controls": `${baseId}-panel-${id}`,
1004
+ onClick: () => {
1005
+ clearTimers();
1006
+ const hovered = openedByHover.current === id;
1007
+ openedByHover.current = null;
1008
+ if (hovered) {
1009
+ setOpened({ id, pathname });
1010
+ return;
1011
+ }
1012
+ setOpened((prev) => prev && prev.id === id && prev.pathname === pathname ? null : { id, pathname });
1013
+ },
1014
+ onMouseEnter: () => {
1015
+ clearTimers();
1016
+ if (openId === id) return;
1017
+ if (openId !== null) {
1018
+ openedByHover.current = id;
1019
+ setOpened({ id, pathname });
1020
+ return;
1021
+ }
1022
+ openTimer.current = setTimeout(() => {
1023
+ openTimer.current = null;
1024
+ openedByHover.current = id;
1025
+ setOpened({ id, pathname });
1026
+ }, hoverOpenMs);
1027
+ },
1028
+ onMouseLeave: scheduleClose
1029
+ }),
1030
+ [baseId, openId, pathname, hoverOpenMs, clearTimers, scheduleClose]
1031
+ );
1032
+ const getPanelProps = _react.useCallback.call(void 0,
1033
+ (id) => ({
1034
+ ref: (el) => {
1035
+ if (el) panels.current.set(id, el);
1036
+ else panels.current.delete(id);
1037
+ },
1038
+ id: `${baseId}-panel-${id}`,
1039
+ inert: openId !== id,
1040
+ "data-state": openId === id ? "open" : "closed",
1041
+ onMouseEnter: cancelClose,
1042
+ onMouseLeave: scheduleClose
1043
+ }),
1044
+ [baseId, openId, cancelClose, scheduleClose]
1045
+ );
1046
+ return { openId, close, getTriggerProps, getPanelProps };
1047
+ }
1048
+
1049
+ // src/hooks/ui/use-visitor-os.ts
1050
+
1051
+
1052
+ // src/utils/visitor-os.ts
1053
+ var DESKTOP_OSES = ["mac", "windows", "linux"];
1054
+ var HINT_PLATFORMS = {
1055
+ macos: "mac",
1056
+ windows: "windows",
1057
+ linux: "linux",
1058
+ "chrome os": "linux",
1059
+ "chromium os": "linux",
1060
+ android: "android",
1061
+ ios: "ios"
1062
+ };
1063
+ function detectVisitorOs(userAgent, hints = {}) {
1064
+ const touchMac = (os) => os === "mac" && (_nullishCoalesce(hints.maxTouchPoints, () => ( 0))) > 1 ? "ios" : os;
1065
+ const hinted = HINT_PLATFORMS[(_nullishCoalesce(hints.platform, () => ( ""))).replace(/"/g, "").trim().toLowerCase()];
1066
+ if (hinted) return touchMac(hinted);
1067
+ const ua = _nullishCoalesce(userAgent, () => ( ""));
1068
+ if (!ua) return null;
1069
+ if (/iPhone|iPad|iPod/i.test(ua)) return "ios";
1070
+ if (/Android/i.test(ua)) return "android";
1071
+ if (/Windows NT|Win64|Win32/i.test(ua)) return "windows";
1072
+ if (/Macintosh|Mac OS X/i.test(ua)) return touchMac("mac");
1073
+ if (/Linux|X11|CrOS/i.test(ua)) return "linux";
1074
+ return null;
1075
+ }
1076
+ function desktopOsOf(os) {
1077
+ return os !== null && DESKTOP_OSES.includes(os) ? os : null;
1078
+ }
1079
+ function detectDesktopOs(userAgent, hints) {
1080
+ return desktopOsOf(detectVisitorOs(userAgent, hints));
1081
+ }
1082
+ function usesCommandKey(os) {
1083
+ return os === "mac" || os === "ios";
1084
+ }
1085
+ function shortcutLabel(os, key) {
1086
+ return usesCommandKey(os) ? `\u2318${key}` : `Ctrl ${key}`;
1087
+ }
1088
+
1089
+ // src/hooks/ui/use-visitor-os.ts
1090
+ var UNKNOWN = { known: false, os: null };
1091
+ var KNOWN = /* @__PURE__ */ new Map();
1092
+ var subscribe2 = () => () => {
1093
+ };
1094
+ var getServerSnapshot = () => UNKNOWN;
1095
+ function getSnapshot() {
1096
+ const stated = _optionalChain([navigator, 'access', _35 => _35.userAgentData, 'optionalAccess', _36 => _36.platform]);
1097
+ const os = detectVisitorOs(navigator.userAgent, { platform: stated, maxTouchPoints: navigator.maxTouchPoints });
1098
+ let state = KNOWN.get(os);
1099
+ if (!state) {
1100
+ state = { known: true, os };
1101
+ KNOWN.set(os, state);
1102
+ }
1103
+ return state;
1104
+ }
1105
+ function useVisitorOs() {
1106
+ return _react.useSyncExternalStore.call(void 0, subscribe2, getSnapshot, getServerSnapshot);
1107
+ }
1108
+
900
1109
  // src/hooks/platform/use-platform-config.ts
901
1110
 
902
1111
 
@@ -904,11 +1113,11 @@ var _overlays = require('@react-aria/overlays');
904
1113
  var _lucidereact = require('lucide-react');
905
1114
  var _jsxruntime = require('react/jsx-runtime');
906
1115
  function renderPlatformIcon(platformName, className) {
907
- const tinted = _chunk3ATAYP36cjs.cn.call(void 0, className, _chunkRKV5B7EUcjs.getPlatformBrandClasses.call(void 0, platformName).accentText);
1116
+ const tinted = _chunk3ATAYP36cjs.cn.call(void 0, className, _chunkLM7TXMLUcjs.getPlatformBrandClasses.call(void 0, platformName).accentText);
908
1117
  switch (platformName) {
909
1118
  case "openframe":
910
1119
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
911
- _chunkQZVSJF2Kcjs.OpenFrameLogo,
1120
+ _chunkLLSUVPQCcjs.OpenFrameLogo,
912
1121
  {
913
1122
  className: tinted,
914
1123
  lowerPathColor: "currentColor",
@@ -917,7 +1126,7 @@ function renderPlatformIcon(platformName, className) {
917
1126
  );
918
1127
  case "openmsp":
919
1128
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
920
- _chunkX72J4ACLcjs.OpenmspLogo,
1129
+ _chunkLLSUVPQCcjs.OpenmspLogo,
921
1130
  {
922
1131
  className: tinted,
923
1132
  backBubbleColor: "currentColor",
@@ -926,13 +1135,13 @@ function renderPlatformIcon(platformName, className) {
926
1135
  }
927
1136
  );
928
1137
  case "tmcg":
929
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkQZVSJF2Kcjs.MiamiCyberGangLogoFaceOnly, { className });
1138
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.MiamiCyberGangLogoFaceOnly, { className });
930
1139
  case "mlg":
931
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkX72J4ACLcjs.MlgLogo, { className: tinted, size: 20 });
1140
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.MlgLogo, { className: tinted, size: 20 });
932
1141
  case "universal":
933
1142
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Globe, { className: tinted });
934
1143
  default:
935
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkX72J4ACLcjs.FlamingoLogo, { className: tinted, fill: "currentColor" });
1144
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkLLSUVPQCcjs.FlamingoLogo, { className: tinted, fill: "currentColor" });
936
1145
  }
937
1146
  }
938
1147
  var platformIcons = {
@@ -972,7 +1181,7 @@ function getPlatformIconComponent(platformName, className = "h-6 w-6") {
972
1181
  return renderPlatformIcon(platformName, className);
973
1182
  }
974
1183
  function getPlatformColorClass(platformName) {
975
- return _chunkRKV5B7EUcjs.getPlatformBrandClasses.call(void 0, platformName).accentBg;
1184
+ return _chunkLM7TXMLUcjs.getPlatformBrandClasses.call(void 0, platformName).accentBg;
976
1185
  }
977
1186
 
978
1187
  // src/hooks/platform/use-platform-config.ts
@@ -1136,7 +1345,7 @@ function ToastHeader({
1136
1345
  "aria-label": "Close",
1137
1346
  onClick: () => _sonner.toast.dismiss(id),
1138
1347
  className: "absolute right-[7px] top-[7px] flex size-4 items-center justify-center text-ods-text-secondary transition-colors hover:text-ods-text-primary",
1139
- children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.XmarkIcon, { size: 16 })
1348
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.XmarkIcon, { size: 16 })
1140
1349
  }
1141
1350
  ) : null,
1142
1351
  showProgress && duration !== Infinity && duration > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -1200,11 +1409,11 @@ function CommandApprovalToast({
1200
1409
  }) {
1201
1410
  const [expanded, setExpanded] = _react.useState.call(void 0, defaultExpanded);
1202
1411
  const handleApprove = () => {
1203
- _optionalChain([onApprove, 'optionalCall', _30 => _30()]);
1412
+ _optionalChain([onApprove, 'optionalCall', _37 => _37()]);
1204
1413
  _sonner.toast.dismiss(id);
1205
1414
  };
1206
1415
  const handleReject = () => {
1207
- _optionalChain([onReject, 'optionalCall', _31 => _31()]);
1416
+ _optionalChain([onReject, 'optionalCall', _38 => _38()]);
1208
1417
  _sonner.toast.dismiss(id);
1209
1418
  };
1210
1419
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
@@ -1238,7 +1447,7 @@ function CommandApprovalToast({
1238
1447
  children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "overflow-hidden", children: [
1239
1448
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-11 w-full items-center gap-2 border-b border-ods-border bg-ods-card px-3 py-2", children: [
1240
1449
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "min-w-0 flex-1 truncate text-ods-text-primary text-h6", title: command, children: command }),
1241
- toolType ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTYWLNCNHcjs.ToolIcon, { toolType, size: 16 }) : null
1450
+ toolType ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUVTD52MDcjs.ToolIcon, { toolType, size: 16 }) : null
1242
1451
  ] }),
1243
1452
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-2 bg-ods-bg p-3", children: [
1244
1453
  approvalDescription ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary text-h6", children: approvalDescription }) : null,
@@ -1277,7 +1486,7 @@ function CommandApprovalToast({
1277
1486
  "aria-expanded": false,
1278
1487
  children: [
1279
1488
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex-1", children: "Show Command" }),
1280
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.Chevron02DownIcon, { size: 16 })
1489
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkVX4E6YSBcjs.Chevron02DownIcon, { size: 16 })
1281
1490
  ]
1282
1491
  }
1283
1492
  )
@@ -1411,7 +1620,7 @@ function useContactSubmission(options = {}) {
1411
1620
  if (isSubmitting) return;
1412
1621
  setIsSubmitting(true);
1413
1622
  try {
1414
- const response = await _chunkABU3TGXAcjs.contentFetch.call(void 0, contactUrl, {
1623
+ const response = await _chunkOF6GEI5Acjs.contentFetch.call(void 0, contactUrl, {
1415
1624
  method: "POST",
1416
1625
  headers: { "Content-Type": "application/json" },
1417
1626
  body: JSON.stringify({
@@ -1421,7 +1630,7 @@ function useContactSubmission(options = {}) {
1421
1630
  });
1422
1631
  if (!response.ok) {
1423
1632
  const failure = await response.json().catch(() => null);
1424
- throw new Error(_chunkTYWLNCNHcjs.apiErrorMessage.call(void 0, failure, "Failed to submit contact form"));
1633
+ throw new Error(_chunkUVTD52MDcjs.apiErrorMessage.call(void 0, failure, "Failed to submit contact form"));
1425
1634
  }
1426
1635
  setIsSuccess(true);
1427
1636
  const message = successToastMessage ? `Thank you! Your message has been sent. ${successToastMessage}` : "Thank you! Your message has been sent successfully.";
@@ -1740,12 +1949,12 @@ function useAuthenticatedImage(imageUrl, refreshKey, config) {
1740
1949
  };
1741
1950
  }, []);
1742
1951
  const active = settled && settled.key === cacheKey ? settled : null;
1743
- const cachedBlobUrl = cacheKey === null ? void 0 : _optionalChain([imageCache, 'access', _32 => _32.get, 'call', _33 => _33(cacheKey), 'optionalAccess', _34 => _34.blobUrl]);
1744
- const resolvedBlobUrl = _nullishCoalesce(_nullishCoalesce(_optionalChain([active, 'optionalAccess', _35 => _35.blobUrl]), () => ( cachedBlobUrl)), () => ( _optionalChain([settled, 'optionalAccess', _36 => _36.blobUrl])));
1952
+ const cachedBlobUrl = cacheKey === null ? void 0 : _optionalChain([imageCache, 'access', _39 => _39.get, 'call', _40 => _40(cacheKey), 'optionalAccess', _41 => _41.blobUrl]);
1953
+ const resolvedBlobUrl = _nullishCoalesce(_nullishCoalesce(_optionalChain([active, 'optionalAccess', _42 => _42.blobUrl]), () => ( cachedBlobUrl)), () => ( _optionalChain([settled, 'optionalAccess', _43 => _43.blobUrl])));
1745
1954
  return {
1746
1955
  imageUrl: cacheKey === null ? void 0 : resolvedBlobUrl,
1747
1956
  isLoading: cacheKey !== null && active === null && cachedBlobUrl === void 0,
1748
- error: _nullishCoalesce((cacheKey === null ? void 0 : _optionalChain([active, 'optionalAccess', _37 => _37.error])), () => ( null))
1957
+ error: _nullishCoalesce((cacheKey === null ? void 0 : _optionalChain([active, 'optionalAccess', _44 => _44.error])), () => ( null))
1749
1958
  };
1750
1959
  }
1751
1960
 
@@ -2106,7 +2315,7 @@ function variablesToUrlParams(variables, schema) {
2106
2315
  const params = new URLSearchParams();
2107
2316
  for (const [paramName, paramConfig] of Object.entries(schema)) {
2108
2317
  const value = getNestedValue(variables, paramConfig.graphqlPath);
2109
- if (!_chunkABU3TGXAcjs.shouldIncludeInUrl.call(void 0, value, paramConfig)) {
2318
+ if (!_chunkOF6GEI5Acjs.shouldIncludeInUrl.call(void 0, value, paramConfig)) {
2110
2319
  continue;
2111
2320
  }
2112
2321
  if (Array.isArray(value)) {
@@ -2135,7 +2344,7 @@ function coerceScalar(value, type) {
2135
2344
  return isNaN(num) ? null : num;
2136
2345
  }
2137
2346
  case "int":
2138
- return _chunkABU3TGXAcjs.positiveInt.call(void 0, value, null);
2347
+ return _chunkOF6GEI5Acjs.positiveInt.call(void 0, value, null);
2139
2348
  case "boolean":
2140
2349
  return value === "true" || value === "1";
2141
2350
  case "string":
@@ -2441,7 +2650,7 @@ function useApiParams(schema, options = {}) {
2441
2650
  return flattened;
2442
2651
  }, [stableSchema]);
2443
2652
  const rawParams = _react.useMemo.call(void 0, () => {
2444
- const result = _chunkABU3TGXAcjs.parseSchemaParams.call(void 0, stableSchema, new URLSearchParams(searchString), {
2653
+ const result = _chunkOF6GEI5Acjs.parseSchemaParams.call(void 0, stableSchema, new URLSearchParams(searchString), {
2445
2654
  absent: options.absent === "null" ? "null" : "undefined"
2446
2655
  });
2447
2656
  if (debug) {
@@ -2457,14 +2666,14 @@ function useApiParams(schema, options = {}) {
2457
2666
  }
2458
2667
  const params = stableParams;
2459
2668
  const addParamToSearchParams = _react.useCallback.call(void 0, (searchParams, key, value) => {
2460
- for (const [k, v] of _chunkABU3TGXAcjs.createSearchParams.call(void 0, { [key]: value })) searchParams.append(k, v);
2669
+ for (const [k, v] of _chunkOF6GEI5Acjs.createSearchParams.call(void 0, { [key]: value })) searchParams.append(k, v);
2461
2670
  }, []);
2462
2671
  const urlSearchParams = _react.useMemo.call(void 0, () => {
2463
2672
  const newParams = new URLSearchParams();
2464
2673
  for (const key of Object.keys(stableSchema)) {
2465
2674
  const value = params[key];
2466
2675
  const paramConfig = flattenedSchema[key];
2467
- if (!_chunkABU3TGXAcjs.shouldIncludeInUrl.call(void 0, value, paramConfig)) {
2676
+ if (!_chunkOF6GEI5Acjs.shouldIncludeInUrl.call(void 0, value, paramConfig)) {
2468
2677
  continue;
2469
2678
  }
2470
2679
  addParamToSearchParams(newParams, key, value);
@@ -2521,7 +2730,7 @@ function useApiParams(schema, options = {}) {
2521
2730
  return;
2522
2731
  }
2523
2732
  const newParams = new URLSearchParams();
2524
- if (_chunkABU3TGXAcjs.shouldIncludeInUrl.call(void 0, value, config)) {
2733
+ if (_chunkOF6GEI5Acjs.shouldIncludeInUrl.call(void 0, value, config)) {
2525
2734
  addParamToSearchParams(newParams, key, value);
2526
2735
  updateUrl(newParams);
2527
2736
  } else {
@@ -2540,7 +2749,7 @@ function useApiParams(schema, options = {}) {
2540
2749
  console.warn(`[useApiParams] Unknown parameter: ${key}`);
2541
2750
  continue;
2542
2751
  }
2543
- if (_chunkABU3TGXAcjs.shouldIncludeInUrl.call(void 0, value, flattenedSchema[key])) {
2752
+ if (_chunkOF6GEI5Acjs.shouldIncludeInUrl.call(void 0, value, flattenedSchema[key])) {
2544
2753
  addParamToSearchParams(newParams, key, value);
2545
2754
  } else {
2546
2755
  keysToRemove.push(key);
@@ -2565,7 +2774,7 @@ function useApiParams(schema, options = {}) {
2565
2774
  }, [router, debug]);
2566
2775
  const pendingParams = _react.useMemo.call(void 0, () => {
2567
2776
  if (pendingTail === void 0 || pendingTail === searchString) return params;
2568
- return _chunkABU3TGXAcjs.parseSchemaParams.call(void 0, stableSchema, new URLSearchParams(pendingTail), {
2777
+ return _chunkOF6GEI5Acjs.parseSchemaParams.call(void 0, stableSchema, new URLSearchParams(pendingTail), {
2569
2778
  absent: options.absent === "null" ? "null" : "undefined"
2570
2779
  });
2571
2780
  }, [pendingTail, searchString, params, stableSchema, options.absent]);
@@ -2736,7 +2945,7 @@ function useScenarioPlayer({
2736
2945
  initialScenario = 0,
2737
2946
  startAtEnd = false
2738
2947
  }) {
2739
- const auto = _chunkTYWLNCNHcjs.useAutoplay.call(void 0, enabled);
2948
+ const auto = _chunkUVTD52MDcjs.useAutoplay.call(void 0, enabled);
2740
2949
  const { reducedMotion, paused, setPaused } = auto;
2741
2950
  const [scenario, setScenario] = _react.useState.call(void 0, initialScenario);
2742
2951
  const [rawStep, setRawStep] = _react.useState.call(void 0, startAtEnd ? Number.MAX_SAFE_INTEGER : 0);
@@ -2798,7 +3007,7 @@ async function validateAccessCode(email, code, endpoints) {
2798
3007
  });
2799
3008
  if (!response.ok) {
2800
3009
  const failure = await response.json().catch(() => null);
2801
- throw new Error(_chunkTYWLNCNHcjs.apiErrorMessage.call(void 0, failure, "Validation request failed"));
3010
+ throw new Error(_chunkUVTD52MDcjs.apiErrorMessage.call(void 0, failure, "Validation request failed"));
2802
3011
  }
2803
3012
  return await response.json();
2804
3013
  } catch (error) {
@@ -2819,7 +3028,7 @@ async function consumeAccessCode(email, code, endpoints) {
2819
3028
  });
2820
3029
  if (!response.ok) {
2821
3030
  const failure = await response.json().catch(() => null);
2822
- throw new Error(_chunkTYWLNCNHcjs.apiErrorMessage.call(void 0, failure, "Consumption request failed"));
3031
+ throw new Error(_chunkUVTD52MDcjs.apiErrorMessage.call(void 0, failure, "Consumption request failed"));
2823
3032
  }
2824
3033
  return await response.json();
2825
3034
  } catch (error) {
@@ -2911,9 +3120,9 @@ function toFigmaEmbedUrl(url, opts) {
2911
3120
  if (match) {
2912
3121
  const [, urlType, fileKey, titleSlug, queryString] = match;
2913
3122
  const isSlides = urlType === "slides" || urlType === "deck";
2914
- const embedType = urlType === "proto" ? "proto" : isSlides ? _optionalChain([opts, 'optionalAccess', _38 => _38.slidesView]) === "browse" ? "slides" : "deck" : "design";
3123
+ const embedType = urlType === "proto" ? "proto" : isSlides ? _optionalChain([opts, 'optionalAccess', _45 => _45.slidesView]) === "browse" ? "slides" : "deck" : "design";
2915
3124
  const pathSuffix = titleSlug ? `/${titleSlug}` : "";
2916
- const params = new URLSearchParams(_optionalChain([queryString, 'optionalAccess', _39 => _39.replace, 'call', _40 => _40(/^\?/, "")]) || "");
3125
+ const params = new URLSearchParams(_optionalChain([queryString, 'optionalAccess', _46 => _46.replace, 'call', _47 => _47(/^\?/, "")]) || "");
2917
3126
  if (!params.has("embed-host")) {
2918
3127
  params.set("embed-host", "flamingo");
2919
3128
  }
@@ -2940,11 +3149,11 @@ function toClaudeMirrorPath(url, storageViewBaseUrl) {
2940
3149
  try {
2941
3150
  const u = new URL(url);
2942
3151
  const host = u.hostname.toLowerCase();
2943
- const id = host === "claude.ai" && _optionalChain([/^\/(?:code\/artifact|public\/artifacts)\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:[/?#]|$)/i, 'access', _41 => _41.exec, 'call', _42 => _42(
3152
+ const id = host === "claude.ai" && _optionalChain([/^\/(?:code\/artifact|public\/artifacts)\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:[/?#]|$)/i, 'access', _48 => _48.exec, 'call', _49 => _49(
2944
3153
  u.pathname
2945
- ), 'optionalAccess', _43 => _43[1]]) || host === "claude.site" && _optionalChain([/^\/artifacts\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:[/?#]|$)/i, 'access', _44 => _44.exec, 'call', _45 => _45(
3154
+ ), 'optionalAccess', _50 => _50[1]]) || host === "claude.site" && _optionalChain([/^\/artifacts\/([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:[/?#]|$)/i, 'access', _51 => _51.exec, 'call', _52 => _52(
2946
3155
  u.pathname
2947
- ), 'optionalAccess', _46 => _46[1]]) || null;
3156
+ ), 'optionalAccess', _53 => _53[1]]) || null;
2948
3157
  return id ? `${storageViewBaseUrl.replace(/\/$/, "")}/design-briefs/${id.toLowerCase()}.html` : null;
2949
3158
  } catch (e6) {
2950
3159
  return null;
@@ -2955,7 +3164,7 @@ function toClaudeEmbedUrl(url) {
2955
3164
  try {
2956
3165
  const u = new URL(url);
2957
3166
  const host = u.hostname.toLowerCase();
2958
- const publicId = host === "claude.ai" && _optionalChain([/^\/public\/artifacts\/([\w-]+)(?:\/embed)?\/?$/, 'access', _47 => _47.exec, 'call', _48 => _48(u.pathname), 'optionalAccess', _49 => _49[1]]) || host === "claude.site" && _optionalChain([/^\/artifacts\/([\w-]+)(?:\/embed)?\/?$/, 'access', _50 => _50.exec, 'call', _51 => _51(u.pathname), 'optionalAccess', _52 => _52[1]]) || null;
3167
+ const publicId = host === "claude.ai" && _optionalChain([/^\/public\/artifacts\/([\w-]+)(?:\/embed)?\/?$/, 'access', _54 => _54.exec, 'call', _55 => _55(u.pathname), 'optionalAccess', _56 => _56[1]]) || host === "claude.site" && _optionalChain([/^\/artifacts\/([\w-]+)(?:\/embed)?\/?$/, 'access', _57 => _57.exec, 'call', _58 => _58(u.pathname), 'optionalAccess', _59 => _59[1]]) || null;
2959
3168
  return publicId ? `https://claude.ai/public/artifacts/${publicId}/embed` : null;
2960
3169
  } catch (e7) {
2961
3170
  return null;
@@ -2968,14 +3177,14 @@ async function revalidateMirror(mirrorPath) {
2968
3177
  const res = await fetch(`${mirrorPath}?revalidate=1`);
2969
3178
  if (!res.ok) return null;
2970
3179
  const body = await res.json();
2971
- return _optionalChain([body, 'optionalAccess', _53 => _53.updated]) ? String(_nullishCoalesce(body.version, () => ( Date.now()))) : null;
3180
+ return _optionalChain([body, 'optionalAccess', _60 => _60.updated]) ? String(_nullishCoalesce(body.version, () => ( Date.now()))) : null;
2972
3181
  } catch (e8) {
2973
3182
  return null;
2974
3183
  }
2975
3184
  }
2976
3185
  function useClaudeMirrorSrc(url) {
2977
3186
  const endpoints = _chunkMZ4KBSH7cjs.useEndpointsRuntime.call(void 0, );
2978
- const mirrorPath = toClaudeMirrorPath(url, _optionalChain([endpoints, 'optionalAccess', _54 => _54.storageViewBaseUrl]));
3187
+ const mirrorPath = toClaudeMirrorPath(url, _optionalChain([endpoints, 'optionalAccess', _61 => _61.storageViewBaseUrl]));
2979
3188
  const [resolved, setResolved] = _react.useState.call(void 0, null);
2980
3189
  const state = resolved && resolved.key === mirrorPath ? resolved.value : { src: null, status: mirrorPath ? "probing" : "absent" };
2981
3190
  _react.useEffect.call(void 0, () => {
@@ -3004,11 +3213,32 @@ function useClaudeMirrorSrc(url) {
3004
3213
  return state;
3005
3214
  }
3006
3215
 
3216
+ // src/hooks/use-location-hash.ts
3217
+
3218
+ var HASH_EVENTS = ["hashchange", "popstate"];
3219
+ function subscribe3(onChange) {
3220
+ for (const event of HASH_EVENTS) window.addEventListener(event, onChange);
3221
+ return () => {
3222
+ for (const event of HASH_EVENTS) window.removeEventListener(event, onChange);
3223
+ };
3224
+ }
3225
+ function readHash() {
3226
+ const raw = _chunkUVTD52MDcjs.normalizeHashFragment.call(void 0, window.location.hash).replace(/^#/, "");
3227
+ try {
3228
+ return decodeURIComponent(raw);
3229
+ } catch (e9) {
3230
+ return raw;
3231
+ }
3232
+ }
3233
+ function useLocationHash() {
3234
+ return _react.useSyncExternalStore.call(void 0, subscribe3, readHash, () => "");
3235
+ }
3236
+
3007
3237
  // src/hooks/use-scroll-to-hash.ts
3008
3238
 
3009
3239
  var MAX_POLL_FRAMES = 60;
3010
3240
  function useScrollToHash(readyDep = true, options) {
3011
- const headerOffset = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _55 => _55.headerOffset]), () => ( 0));
3241
+ const headerOffset = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _62 => _62.headerOffset]), () => ( 0));
3012
3242
  _react.useEffect.call(void 0, () => {
3013
3243
  if (typeof window === "undefined") return void 0;
3014
3244
  if (readyDep === null || readyDep === false) return void 0;
@@ -3020,15 +3250,15 @@ function useScrollToHash(readyDep = true, options) {
3020
3250
  }
3021
3251
  };
3022
3252
  const tryScrollToHash = () => {
3023
- const hash = _chunkTYWLNCNHcjs.normalizeHashFragment.call(void 0, window.location.hash).slice(1);
3253
+ const hash = _chunkUVTD52MDcjs.normalizeHashFragment.call(void 0, window.location.hash).slice(1);
3024
3254
  if (!hash) return;
3025
3255
  cancelPoll();
3026
3256
  let frames = 0;
3027
3257
  const tick = () => {
3028
- const el = _chunkTYWLNCNHcjs.getHashTargetElement.call(void 0, hash);
3258
+ const el = _chunkUVTD52MDcjs.getHashTargetElement.call(void 0, hash);
3029
3259
  if (el) {
3030
3260
  rafId = null;
3031
- _chunkTYWLNCNHcjs.scrollElementIntoView.call(void 0, el, { headerOffset });
3261
+ _chunkUVTD52MDcjs.scrollElementIntoView.call(void 0, el, { headerOffset });
3032
3262
  return;
3033
3263
  }
3034
3264
  if (frames++ < MAX_POLL_FRAMES) {
@@ -3107,7 +3337,7 @@ function evaluateHumanitySignals(body, opts) {
3107
3337
  if (elapsedMs !== null && elapsedMs < opts.minFillMs) return { ...diagnostics, ok: false, reason: "too_fast" };
3108
3338
  return sourceField !== null ? { ...diagnostics, ok: true, note: "honeypot_autofill", sourceField } : { ...diagnostics, ok: true };
3109
3339
  }
3110
- var splitCsvEnv = (s) => _nullishCoalesce(_optionalChain([s, 'optionalAccess', _56 => _56.split, 'call', _57 => _57(","), 'access', _58 => _58.map, 'call', _59 => _59((t) => t.trim()), 'access', _60 => _60.filter, 'call', _61 => _61(Boolean)]), () => ( []));
3340
+ var splitCsvEnv = (s) => _nullishCoalesce(_optionalChain([s, 'optionalAccess', _63 => _63.split, 'call', _64 => _64(","), 'access', _65 => _65.map, 'call', _66 => _66((t) => t.trim()), 'access', _67 => _67.filter, 'call', _68 => _68(Boolean)]), () => ( []));
3111
3341
 
3112
3342
  // src/hooks/use-humanity-signals.ts
3113
3343
  function useHumanitySignals() {
@@ -3116,7 +3346,7 @@ function useHumanitySignals() {
3116
3346
  const startedAtRef = _react.useRef.call(void 0, mountedAt);
3117
3347
  const getSignals = _react.useCallback.call(void 0,
3118
3348
  () => ({
3119
- [HONEYPOT_FIELD]: _nullishCoalesce(_optionalChain([ref, 'access', _62 => _62.current, 'optionalAccess', _63 => _63.value]), () => ( "")),
3349
+ [HONEYPOT_FIELD]: _nullishCoalesce(_optionalChain([ref, 'access', _69 => _69.current, 'optionalAccess', _70 => _70.value]), () => ( "")),
3120
3350
  [ELAPSED_MS_FIELD]: typeof performance !== "undefined" ? Math.round(performance.now() - startedAtRef.current) : 0
3121
3351
  }),
3122
3352
  []
@@ -3276,8 +3506,8 @@ function captureFormRescueEvent(event, properties) {
3276
3506
  try {
3277
3507
  if (typeof window === "undefined") return;
3278
3508
  const ph = window.posthog;
3279
- if (typeof _optionalChain([ph, 'optionalAccess', _64 => _64.capture]) === "function") ph.capture(event, properties);
3280
- } catch (e9) {
3509
+ if (typeof _optionalChain([ph, 'optionalAccess', _71 => _71.capture]) === "function") ph.capture(event, properties);
3510
+ } catch (e10) {
3281
3511
  }
3282
3512
  }
3283
3513
 
@@ -3302,20 +3532,20 @@ function readLocalDraft(formId) {
3302
3532
  if (!isFormAttemptId(parsed.attemptId) || typeof parsed.savedAt !== "number") return null;
3303
3533
  if (Date.now() - parsed.savedAt > LOCAL_DRAFT_TTL_MS) return null;
3304
3534
  return { attemptId: parsed.attemptId, values: sanitizeRescueValues(parsed.values), savedAt: parsed.savedAt };
3305
- } catch (e10) {
3535
+ } catch (e11) {
3306
3536
  return null;
3307
3537
  }
3308
3538
  }
3309
3539
  function writeLocalDraft(formId, draft) {
3310
3540
  try {
3311
3541
  window.localStorage.setItem(STORAGE_PREFIX + formId, JSON.stringify(draft));
3312
- } catch (e11) {
3542
+ } catch (e12) {
3313
3543
  }
3314
3544
  }
3315
3545
  function clearLocalDraft(formId) {
3316
3546
  try {
3317
3547
  window.localStorage.removeItem(STORAGE_PREFIX + formId);
3318
- } catch (e12) {
3548
+ } catch (e13) {
3319
3549
  }
3320
3550
  }
3321
3551
  function completeFormRescue(form, attemptId) {
@@ -3323,7 +3553,7 @@ function completeFormRescue(form, attemptId) {
3323
3553
  const local = readLocalDraft(form.id);
3324
3554
  captureFormRescueEvent(FORM_RESCUE_EVENTS.submitted, {
3325
3555
  form_id: form.id,
3326
- attempt_id: isFormAttemptId(attemptId) ? attemptId : _nullishCoalesce(_optionalChain([local, 'optionalAccess', _65 => _65.attemptId]), () => ( null))
3556
+ attempt_id: isFormAttemptId(attemptId) ? attemptId : _nullishCoalesce(_optionalChain([local, 'optionalAccess', _72 => _72.attemptId]), () => ( null))
3327
3557
  });
3328
3558
  clearLocalDraft(form.id);
3329
3559
  }
@@ -3336,13 +3566,13 @@ function readUtm() {
3336
3566
  if (value) utm[key] = value.slice(0, 200);
3337
3567
  }
3338
3568
  return Object.keys(utm).length ? utm : void 0;
3339
- } catch (e13) {
3569
+ } catch (e14) {
3340
3570
  return void 0;
3341
3571
  }
3342
3572
  }
3343
3573
  function useFormRescue({ form, fieldNames, onRestore, getSignals }) {
3344
- const draftsUrl = _optionalChain([_chunkMZ4KBSH7cjs.useEndpointsRuntime.call(void 0, ), 'optionalAccess', _66 => _66.formDraftsUrl]);
3345
- const formId = _nullishCoalesce(_optionalChain([form, 'optionalAccess', _67 => _67.id]), () => ( null));
3574
+ const draftsUrl = _optionalChain([_chunkMZ4KBSH7cjs.useEndpointsRuntime.call(void 0, ), 'optionalAccess', _73 => _73.formDraftsUrl]);
3575
+ const formId = _nullishCoalesce(_optionalChain([form, 'optionalAccess', _74 => _74.id]), () => ( null));
3346
3576
  const attemptIdRef = _react.useRef.call(void 0, null);
3347
3577
  const resumeTokenRef = _react.useRef.call(void 0, null);
3348
3578
  const latestRef = _react.useRef.call(void 0, null);
@@ -3376,13 +3606,13 @@ function useFormRescue({ form, fieldNames, onRestore, getSignals }) {
3376
3606
  ...resumeTokenRef.current ? { resume_token: resumeTokenRef.current } : {}
3377
3607
  };
3378
3608
  try {
3379
- void _chunkABU3TGXAcjs.contentFetch.call(void 0, draftsUrl, {
3609
+ void _chunkOF6GEI5Acjs.contentFetch.call(void 0, draftsUrl, {
3380
3610
  method: "POST",
3381
3611
  headers: { "Content-Type": "application/json" },
3382
- body: JSON.stringify({ ...body, ..._nullishCoalesce(_optionalChain([getSignalsRef, 'access', _68 => _68.current, 'optionalCall', _69 => _69()]), () => ( {})) }),
3612
+ body: JSON.stringify({ ...body, ..._nullishCoalesce(_optionalChain([getSignalsRef, 'access', _75 => _75.current, 'optionalCall', _76 => _76()]), () => ( {})) }),
3383
3613
  keepalive
3384
3614
  }).catch(() => void 0);
3385
- } catch (e14) {
3615
+ } catch (e15) {
3386
3616
  }
3387
3617
  captureFormRescueEvent(FORM_RESCUE_EVENTS.progress, {
3388
3618
  form_id: formId,
@@ -3402,17 +3632,17 @@ function useFormRescue({ form, fieldNames, onRestore, getSignals }) {
3402
3632
  const local = readLocalDraft(formId);
3403
3633
  if (!local) return;
3404
3634
  attemptIdRef.current = local.attemptId;
3405
- if (Object.keys(local.values).length) _optionalChain([onRestoreRef, 'access', _70 => _70.current, 'optionalCall', _71 => _71(local.values)]);
3635
+ if (Object.keys(local.values).length) _optionalChain([onRestoreRef, 'access', _77 => _77.current, 'optionalCall', _78 => _78(local.values)]);
3406
3636
  };
3407
3637
  if (isResumeToken(token) && draftsUrl) {
3408
- _chunkABU3TGXAcjs.contentFetch.call(void 0, `${draftsUrl}/resume/${encodeURIComponent(token)}`).then(async (res) => res.ok ? await res.json() : null).then((data) => {
3638
+ _chunkOF6GEI5Acjs.contentFetch.call(void 0, `${draftsUrl}/resume/${encodeURIComponent(token)}`).then(async (res) => res.ok ? await res.json() : null).then((data) => {
3409
3639
  if (cancelled) return;
3410
3640
  if (!data || data.form_id !== formId) {
3411
3641
  restoreLocal();
3412
3642
  return;
3413
3643
  }
3414
3644
  resumeTokenRef.current = token;
3415
- _optionalChain([onRestoreRef, 'access', _72 => _72.current, 'optionalCall', _73 => _73(sanitizeRescueValues(data.values))]);
3645
+ _optionalChain([onRestoreRef, 'access', _79 => _79.current, 'optionalCall', _80 => _80(sanitizeRescueValues(data.values))]);
3416
3646
  captureFormRescueEvent(FORM_RESCUE_EVENTS.resumed, { form_id: formId, attempt_id: attemptId() });
3417
3647
  }).catch(() => {
3418
3648
  if (!cancelled) restoreLocal();
@@ -3436,8 +3666,8 @@ function useFormRescue({ form, fieldNames, onRestore, getSignals }) {
3436
3666
  captureFormRescueEvent(FORM_RESCUE_EVENTS.abandoned, {
3437
3667
  form_id: formId,
3438
3668
  attempt_id: attemptId(),
3439
- last_field: _nullishCoalesce(_optionalChain([latestRef, 'access', _74 => _74.current, 'optionalAccess', _75 => _75.last_field]), () => ( null)),
3440
- completion_pct: _nullishCoalesce(_optionalChain([latestRef, 'access', _76 => _76.current, 'optionalAccess', _77 => _77.completion_pct]), () => ( 0))
3669
+ last_field: _nullishCoalesce(_optionalChain([latestRef, 'access', _81 => _81.current, 'optionalAccess', _82 => _82.last_field]), () => ( null)),
3670
+ completion_pct: _nullishCoalesce(_optionalChain([latestRef, 'access', _83 => _83.current, 'optionalAccess', _84 => _84.completion_pct]), () => ( 0))
3441
3671
  });
3442
3672
  };
3443
3673
  const onVisibility = () => {
@@ -3657,4 +3887,15 @@ function useRescuedForm(form, { rescue, fields, getSignals, fieldPath }) {
3657
3887
 
3658
3888
 
3659
3889
 
3660
- exports.useAutoLimitTags = useAutoLimitTags; exports.useKeyboardCollisionPadding = useKeyboardCollisionPadding; exports.useDeferredError = useDeferredError; exports.DRAG_AND_DROP_MEDIA_QUERY = DRAG_AND_DROP_MEDIA_QUERY; exports.useDragAndDropEnabled = useDragAndDropEnabled; exports.useFocusTrap = useFocusTrap; exports.useHorizontalScrollbar = useHorizontalScrollbar; exports.useLocalStorage = useLocalStorage; exports.useMemoizedCallback = useMemoizedCallback; exports.useNotificationPermission = useNotificationPermission; exports.useOnboardingState = useOnboardingState; exports.useSearch = useSearch; exports.useTablePagination = useTablePagination; exports.useThrottle = useThrottle; exports.useWindowSize = useWindowSize; exports.usePreventScroll = _overlays.usePreventScroll; exports.platformIcons = platformIcons; exports.transformPlatformConfigsToOptions = transformPlatformConfigsToOptions; exports.getPlatformIcon = getPlatformIcon; exports.getSmallPlatformIcon = getSmallPlatformIcon; exports.getPlatformIconComponent = getPlatformIconComponent; exports.usePlatformConfig = usePlatformConfig; exports.usePlatformByValue = usePlatformByValue; exports.useValidatePlatform = useValidatePlatform; exports.dotColorByVariant = dotColorByVariant; exports.progressColorByVariant = progressColorByVariant; exports.ToastCard = ToastCard; exports.CommandApprovalToast = CommandApprovalToast; exports.Toaster = Toaster; exports.showToast = showToast; exports.showCommandApprovalToast = showCommandApprovalToast; exports.toast = toast; exports.useToast = useToast; exports.useContactSubmission = useContactSubmission; exports.useCopyToClipboard = useCopyToClipboard; exports.configureBatchImageFetch = configureBatchImageFetch; exports.batchFetchAuthenticatedImages = batchFetchAuthenticatedImages; exports.useBatchImages = useBatchImages; exports.configureAuthenticatedImage = configureAuthenticatedImage; exports.useAuthenticatedImage = useAuthenticatedImage; exports.flattenQueryVariables = flattenQueryVariables; exports.mergeDefaults = mergeDefaults; exports.validateSchema = validateSchema; exports.getArrayParams = getArrayParams; exports.getRequiredParams = getRequiredParams; exports.extractVariablesFromQuery = extractVariablesFromQuery; exports.isScalarType = isScalarType; exports.isInputObjectType = isInputObjectType; exports.GraphQLIntrospector = GraphQLIntrospector; exports.introspector = introspector; exports.urlParamsToVariables = urlParamsToVariables; exports.variablesToUrlParams = variablesToUrlParams; exports.coerceValue = coerceValue; exports.setNestedValue = setNestedValue; exports.getNestedValue = getNestedValue; exports.mergeVariables = mergeVariables; exports.clearParams = clearParams; exports.validateVariables = validateVariables; exports.useQueryParams = useQueryParams; exports.useApiParams = useApiParams; exports.useCursorPaginationState = useCursorPaginationState; exports.useNatsClient = useNatsClient; exports.useScenarioPlayer = useScenarioPlayer; exports.validateAccessCode = validateAccessCode; exports.consumeAccessCode = consumeAccessCode; exports.validateAndConsumeAccessCode = validateAndConsumeAccessCode; exports.useAccessCodeIntegration = useAccessCodeIntegration; exports.toGoogleSheetsEmbedUrl = toGoogleSheetsEmbedUrl; exports.toGoogleSheetsOriginalUrl = toGoogleSheetsOriginalUrl; exports.toFigmaEmbedUrl = toFigmaEmbedUrl; exports.isFigmaSlidesUrl = isFigmaSlidesUrl; exports.toFigmaOriginalUrl = toFigmaOriginalUrl; exports.toClaudeMirrorPath = toClaudeMirrorPath; exports.toClaudeEmbedUrl = toClaudeEmbedUrl; exports.useClaudeMirrorSrc = useClaudeMirrorSrc; exports.useScrollToHash = useScrollToHash; exports.HONEYPOT_FIELD = HONEYPOT_FIELD; exports.ELAPSED_MS_FIELD = ELAPSED_MS_FIELD; exports.DEFAULT_MIN_FILL_MS = DEFAULT_MIN_FILL_MS; exports.HUMANITY_SIGNAL_KEYS = HUMANITY_SIGNAL_KEYS; exports.isHumanitySignalKey = isHumanitySignalKey; exports.extractHumanitySignals = extractHumanitySignals; exports.findHoneypotCopySource = findHoneypotCopySource; exports.evaluateHumanitySignals = evaluateHumanitySignals; exports.splitCsvEnv = splitCsvEnv; exports.useHumanitySignals = useHumanitySignals; exports.defineRescueForm = defineRescueForm; exports.getRescueForm = getRescueForm; exports.listRescueForms = listRescueForms; exports.RESCUE_FORMS = RESCUE_FORMS; exports.FORM_RESCUE_VALUE_FIELDS = FORM_RESCUE_VALUE_FIELDS; exports.isExcludedRescueField = isExcludedRescueField; exports.FORM_RESCUE_MAX_VALUE_CHARS = FORM_RESCUE_MAX_VALUE_CHARS; exports.FORM_RESCUE_DEBOUNCE_MS = FORM_RESCUE_DEBOUNCE_MS; exports.FORM_RESCUE_MAX_FIELDS = FORM_RESCUE_MAX_FIELDS; exports.FORM_RESCUE_ATTEMPT_FIELD = FORM_RESCUE_ATTEMPT_FIELD; exports.FORM_RESCUE_RESUME_FIELD = FORM_RESCUE_RESUME_FIELD; exports.FORM_RESCUE_SUBMIT_KEYS = FORM_RESCUE_SUBMIT_KEYS; exports.FORM_RESCUE_RESUME_PARAM = FORM_RESCUE_RESUME_PARAM; exports.isResumeToken = isResumeToken; exports.FORM_DRAFT_STATUSES = FORM_DRAFT_STATUSES; exports.FORM_RESCUE_SKIP_REASONS = FORM_RESCUE_SKIP_REASONS; exports.isRescueEmail = isRescueEmail; exports.isFormAttemptId = isFormAttemptId; exports.sanitizeRescueValues = sanitizeRescueValues; exports.filledRescueFields = filledRescueFields; exports.rescueCompletionPct = rescueCompletionPct; exports.sanitizeRescueFieldName = sanitizeRescueFieldName; exports.parseFormDraftSaveRequest = parseFormDraftSaveRequest; exports.FORM_RESCUE_EVENTS = FORM_RESCUE_EVENTS; exports.captureFormRescueEvent = captureFormRescueEvent; exports.completeFormRescue = completeFormRescue; exports.useFormRescue = useFormRescue; exports.useRescuedForm = useRescuedForm;
3890
+
3891
+
3892
+
3893
+
3894
+
3895
+
3896
+
3897
+
3898
+
3899
+
3900
+
3901
+ exports.useAutoLimitTags = useAutoLimitTags; exports.useKeyboardCollisionPadding = useKeyboardCollisionPadding; exports.useDeferredError = useDeferredError; exports.DRAG_AND_DROP_MEDIA_QUERY = DRAG_AND_DROP_MEDIA_QUERY; exports.useDragAndDropEnabled = useDragAndDropEnabled; exports.useFocusTrap = useFocusTrap; exports.useHorizontalScrollbar = useHorizontalScrollbar; exports.useLocalStorage = useLocalStorage; exports.useMemoizedCallback = useMemoizedCallback; exports.useNotificationPermission = useNotificationPermission; exports.useOnboardingState = useOnboardingState; exports.useSearch = useSearch; exports.useTablePagination = useTablePagination; exports.useThrottle = useThrottle; exports.useWindowSize = useWindowSize; exports.resolveActiveSection = resolveActiveSection; exports.useActiveSection = useActiveSection; exports.useNavMenus = useNavMenus; exports.DESKTOP_OSES = DESKTOP_OSES; exports.detectVisitorOs = detectVisitorOs; exports.desktopOsOf = desktopOsOf; exports.detectDesktopOs = detectDesktopOs; exports.usesCommandKey = usesCommandKey; exports.shortcutLabel = shortcutLabel; exports.useVisitorOs = useVisitorOs; exports.usePreventScroll = _overlays.usePreventScroll; exports.platformIcons = platformIcons; exports.transformPlatformConfigsToOptions = transformPlatformConfigsToOptions; exports.getPlatformIcon = getPlatformIcon; exports.getSmallPlatformIcon = getSmallPlatformIcon; exports.getPlatformIconComponent = getPlatformIconComponent; exports.usePlatformConfig = usePlatformConfig; exports.usePlatformByValue = usePlatformByValue; exports.useValidatePlatform = useValidatePlatform; exports.dotColorByVariant = dotColorByVariant; exports.progressColorByVariant = progressColorByVariant; exports.ToastCard = ToastCard; exports.CommandApprovalToast = CommandApprovalToast; exports.Toaster = Toaster; exports.showToast = showToast; exports.showCommandApprovalToast = showCommandApprovalToast; exports.toast = toast; exports.useToast = useToast; exports.useContactSubmission = useContactSubmission; exports.useCopyToClipboard = useCopyToClipboard; exports.configureBatchImageFetch = configureBatchImageFetch; exports.batchFetchAuthenticatedImages = batchFetchAuthenticatedImages; exports.useBatchImages = useBatchImages; exports.configureAuthenticatedImage = configureAuthenticatedImage; exports.useAuthenticatedImage = useAuthenticatedImage; exports.flattenQueryVariables = flattenQueryVariables; exports.mergeDefaults = mergeDefaults; exports.validateSchema = validateSchema; exports.getArrayParams = getArrayParams; exports.getRequiredParams = getRequiredParams; exports.extractVariablesFromQuery = extractVariablesFromQuery; exports.isScalarType = isScalarType; exports.isInputObjectType = isInputObjectType; exports.GraphQLIntrospector = GraphQLIntrospector; exports.introspector = introspector; exports.urlParamsToVariables = urlParamsToVariables; exports.variablesToUrlParams = variablesToUrlParams; exports.coerceValue = coerceValue; exports.setNestedValue = setNestedValue; exports.getNestedValue = getNestedValue; exports.mergeVariables = mergeVariables; exports.clearParams = clearParams; exports.validateVariables = validateVariables; exports.useQueryParams = useQueryParams; exports.useApiParams = useApiParams; exports.useCursorPaginationState = useCursorPaginationState; exports.useNatsClient = useNatsClient; exports.useScenarioPlayer = useScenarioPlayer; exports.validateAccessCode = validateAccessCode; exports.consumeAccessCode = consumeAccessCode; exports.validateAndConsumeAccessCode = validateAndConsumeAccessCode; exports.useAccessCodeIntegration = useAccessCodeIntegration; exports.toGoogleSheetsEmbedUrl = toGoogleSheetsEmbedUrl; exports.toGoogleSheetsOriginalUrl = toGoogleSheetsOriginalUrl; exports.toFigmaEmbedUrl = toFigmaEmbedUrl; exports.isFigmaSlidesUrl = isFigmaSlidesUrl; exports.toFigmaOriginalUrl = toFigmaOriginalUrl; exports.toClaudeMirrorPath = toClaudeMirrorPath; exports.toClaudeEmbedUrl = toClaudeEmbedUrl; exports.useClaudeMirrorSrc = useClaudeMirrorSrc; exports.useLocationHash = useLocationHash; exports.useScrollToHash = useScrollToHash; exports.HONEYPOT_FIELD = HONEYPOT_FIELD; exports.ELAPSED_MS_FIELD = ELAPSED_MS_FIELD; exports.DEFAULT_MIN_FILL_MS = DEFAULT_MIN_FILL_MS; exports.HUMANITY_SIGNAL_KEYS = HUMANITY_SIGNAL_KEYS; exports.isHumanitySignalKey = isHumanitySignalKey; exports.extractHumanitySignals = extractHumanitySignals; exports.findHoneypotCopySource = findHoneypotCopySource; exports.evaluateHumanitySignals = evaluateHumanitySignals; exports.splitCsvEnv = splitCsvEnv; exports.useHumanitySignals = useHumanitySignals; exports.defineRescueForm = defineRescueForm; exports.getRescueForm = getRescueForm; exports.listRescueForms = listRescueForms; exports.RESCUE_FORMS = RESCUE_FORMS; exports.FORM_RESCUE_VALUE_FIELDS = FORM_RESCUE_VALUE_FIELDS; exports.isExcludedRescueField = isExcludedRescueField; exports.FORM_RESCUE_MAX_VALUE_CHARS = FORM_RESCUE_MAX_VALUE_CHARS; exports.FORM_RESCUE_DEBOUNCE_MS = FORM_RESCUE_DEBOUNCE_MS; exports.FORM_RESCUE_MAX_FIELDS = FORM_RESCUE_MAX_FIELDS; exports.FORM_RESCUE_ATTEMPT_FIELD = FORM_RESCUE_ATTEMPT_FIELD; exports.FORM_RESCUE_RESUME_FIELD = FORM_RESCUE_RESUME_FIELD; exports.FORM_RESCUE_SUBMIT_KEYS = FORM_RESCUE_SUBMIT_KEYS; exports.FORM_RESCUE_RESUME_PARAM = FORM_RESCUE_RESUME_PARAM; exports.isResumeToken = isResumeToken; exports.FORM_DRAFT_STATUSES = FORM_DRAFT_STATUSES; exports.FORM_RESCUE_SKIP_REASONS = FORM_RESCUE_SKIP_REASONS; exports.isRescueEmail = isRescueEmail; exports.isFormAttemptId = isFormAttemptId; exports.sanitizeRescueValues = sanitizeRescueValues; exports.filledRescueFields = filledRescueFields; exports.rescueCompletionPct = rescueCompletionPct; exports.sanitizeRescueFieldName = sanitizeRescueFieldName; exports.parseFormDraftSaveRequest = parseFormDraftSaveRequest; exports.FORM_RESCUE_EVENTS = FORM_RESCUE_EVENTS; exports.captureFormRescueEvent = captureFormRescueEvent; exports.completeFormRescue = completeFormRescue; exports.useFormRescue = useFormRescue; exports.useRescuedForm = useRescuedForm;