@sonordev/site-kit 6.1.0 → 6.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. package/agent-manifest.json +2 -2
  2. package/dist/{AnalyticsProvider-V6G45QG7.js → AnalyticsProvider-QK6XBDEJ.js} +10 -10
  3. package/dist/{AnalyticsProvider-V6G45QG7.js.map → AnalyticsProvider-QK6XBDEJ.js.map} +1 -1
  4. package/dist/{AnalyticsProvider-PO6SSJG2.mjs → AnalyticsProvider-TIJWTISP.mjs} +6 -6
  5. package/dist/{AnalyticsProvider-PO6SSJG2.mjs.map → AnalyticsProvider-TIJWTISP.mjs.map} +1 -1
  6. package/dist/{ArticleViewTracker-FE2YWHX4.js → ArticleViewTracker-ALE672ZR.js} +6 -6
  7. package/dist/{ArticleViewTracker-FE2YWHX4.js.map → ArticleViewTracker-ALE672ZR.js.map} +1 -1
  8. package/dist/{ArticleViewTracker-CML36HJZ.mjs → ArticleViewTracker-I66RBWDK.mjs} +5 -5
  9. package/dist/{ArticleViewTracker-CML36HJZ.mjs.map → ArticleViewTracker-I66RBWDK.mjs.map} +1 -1
  10. package/dist/ChatWidget-566CQUN6.js +26 -0
  11. package/dist/{ChatWidget-YL34KOZM.js.map → ChatWidget-566CQUN6.js.map} +1 -1
  12. package/dist/ChatWidget-LNOY4TUZ.mjs +17 -0
  13. package/dist/{ChatWidget-GVNDKGUU.mjs.map → ChatWidget-LNOY4TUZ.mjs.map} +1 -1
  14. package/dist/EngageWidget-DF47YUHQ.js +21 -0
  15. package/dist/{EngageWidget-IQRKRYPG.js.map → EngageWidget-DF47YUHQ.js.map} +1 -1
  16. package/dist/EngageWidget-IGF7SC3R.mjs +12 -0
  17. package/dist/{EngageWidget-465O5XUV.mjs.map → EngageWidget-IGF7SC3R.mjs.map} +1 -1
  18. package/dist/{FileField-FWKSBFRX.mjs → FileField-AG63W2BC.mjs} +5 -5
  19. package/dist/{FileField-FWKSBFRX.mjs.map → FileField-AG63W2BC.mjs.map} +1 -1
  20. package/dist/{FileField-F3PFKMIF.js → FileField-IK6E5IOC.js} +6 -6
  21. package/dist/{FileField-F3PFKMIF.js.map → FileField-IK6E5IOC.js.map} +1 -1
  22. package/dist/{FormSpotlight-DJQ3P3EX.js → FormSpotlight-6MUDJWW5.js} +9 -9
  23. package/dist/{FormSpotlight-DJQ3P3EX.js.map → FormSpotlight-6MUDJWW5.js.map} +1 -1
  24. package/dist/{FormSpotlight-K4LP2DMP.mjs → FormSpotlight-H7V4GBXG.mjs} +3 -3
  25. package/dist/{FormSpotlight-K4LP2DMP.mjs.map → FormSpotlight-H7V4GBXG.mjs.map} +1 -1
  26. package/dist/{FormStage-YKVTHPKV.mjs → FormStage-ACETL7SD.mjs} +3 -3
  27. package/dist/{FormStage-YKVTHPKV.mjs.map → FormStage-ACETL7SD.mjs.map} +1 -1
  28. package/dist/{FormStage-QMGZ3MOT.js → FormStage-ZXZRZ2LS.js} +9 -9
  29. package/dist/{FormStage-QMGZ3MOT.js.map → FormStage-ZXZRZ2LS.js.map} +1 -1
  30. package/dist/ManagedForm-4U54NPW2.js +25 -0
  31. package/dist/{ManagedForm-MLPETHSQ.js.map → ManagedForm-4U54NPW2.js.map} +1 -1
  32. package/dist/ManagedForm-MOBWSG4D.mjs +16 -0
  33. package/dist/{ManagedForm-P3L34ALG.mjs.map → ManagedForm-MOBWSG4D.mjs.map} +1 -1
  34. package/dist/{ManagedNewsletterForm-R4LLZBRQ.js → ManagedNewsletterForm-5LBGBE2F.js} +8 -8
  35. package/dist/{ManagedNewsletterForm-R4LLZBRQ.js.map → ManagedNewsletterForm-5LBGBE2F.js.map} +1 -1
  36. package/dist/{ManagedNewsletterForm-C5YQH7MP.mjs → ManagedNewsletterForm-OV3OEMUP.mjs} +7 -7
  37. package/dist/{ManagedNewsletterForm-C5YQH7MP.mjs.map → ManagedNewsletterForm-OV3OEMUP.mjs.map} +1 -1
  38. package/dist/{SignalCore-CLELIKFI.js → SignalCore-QCVR7TZV.js} +11 -11
  39. package/dist/{SignalCore-CLELIKFI.js.map → SignalCore-QCVR7TZV.js.map} +1 -1
  40. package/dist/{SignalCore-BNYNS6P7.mjs → SignalCore-XM2MHEGR.mjs} +5 -5
  41. package/dist/{SignalCore-BNYNS6P7.mjs.map → SignalCore-XM2MHEGR.mjs.map} +1 -1
  42. package/dist/SitemapSync-74EVNOFQ.mjs +9 -0
  43. package/dist/{SitemapSync-SIKJCK7N.mjs.map → SitemapSync-74EVNOFQ.mjs.map} +1 -1
  44. package/dist/SitemapSync-BQFZAE3X.js +18 -0
  45. package/dist/{SitemapSync-P7XWL6VV.js.map → SitemapSync-BQFZAE3X.js.map} +1 -1
  46. package/dist/analytics/index.js +9 -9
  47. package/dist/analytics/index.mjs +4 -4
  48. package/dist/articles/index.js +1 -1
  49. package/dist/articles/index.mjs +1 -1
  50. package/dist/articles/server-ui.js +1 -1
  51. package/dist/articles/server-ui.mjs +1 -1
  52. package/dist/brand/extract-brand-profile.d.ts +2 -7
  53. package/dist/brand/extract-brand-profile.d.ts.map +1 -1
  54. package/dist/{chunk-SDGS2R5O.js → chunk-2SLA2LOD.js} +12 -12
  55. package/dist/{chunk-SDGS2R5O.js.map → chunk-2SLA2LOD.js.map} +1 -1
  56. package/dist/{chunk-QC6VQ2IW.mjs → chunk-3MLVI5DH.mjs} +3 -3
  57. package/dist/{chunk-QC6VQ2IW.mjs.map → chunk-3MLVI5DH.mjs.map} +1 -1
  58. package/dist/{chunk-TA3TQTDA.mjs → chunk-3RISRHOK.mjs} +8 -8
  59. package/dist/{chunk-TA3TQTDA.mjs.map → chunk-3RISRHOK.mjs.map} +1 -1
  60. package/dist/chunk-5FBALULE.mjs +6 -0
  61. package/dist/{chunk-ACKFL6WA.mjs.map → chunk-5FBALULE.mjs.map} +1 -1
  62. package/dist/{chunk-ESAPT5JT.mjs → chunk-5IQOPL7T.mjs} +3 -3
  63. package/dist/{chunk-ESAPT5JT.mjs.map → chunk-5IQOPL7T.mjs.map} +1 -1
  64. package/dist/{chunk-YS7Y2PQG.js → chunk-5OUOVPXC.js} +8 -8
  65. package/dist/{chunk-YS7Y2PQG.js.map → chunk-5OUOVPXC.js.map} +1 -1
  66. package/dist/{chunk-YP5WAFTI.mjs → chunk-6FIIA6ME.mjs} +4 -4
  67. package/dist/{chunk-YP5WAFTI.mjs.map → chunk-6FIIA6ME.mjs.map} +1 -1
  68. package/dist/{chunk-JOYMIGR2.mjs → chunk-7K6L33BX.mjs} +22 -22
  69. package/dist/{chunk-RVFOUPK4.js → chunk-7VRK3DWU.js} +6 -6
  70. package/dist/{chunk-RVFOUPK4.js.map → chunk-7VRK3DWU.js.map} +1 -1
  71. package/dist/{chunk-IDJY2JWU.js → chunk-AGEE4CGH.js} +5 -5
  72. package/dist/{chunk-IDJY2JWU.js.map → chunk-AGEE4CGH.js.map} +1 -1
  73. package/dist/{chunk-JS75ORH7.js → chunk-ATPQ6264.js} +24 -24
  74. package/dist/{chunk-LF44SJPP.js → chunk-BGBP4UN4.js} +4 -4
  75. package/dist/{chunk-LF44SJPP.js.map → chunk-BGBP4UN4.js.map} +1 -1
  76. package/dist/{chunk-RGCUND5Q.mjs → chunk-CI7T4ZRP.mjs} +4 -4
  77. package/dist/{chunk-RGCUND5Q.mjs.map → chunk-CI7T4ZRP.mjs.map} +1 -1
  78. package/dist/{chunk-KDNB6BYH.js → chunk-CTAYH725.js} +11 -11
  79. package/dist/{chunk-KDNB6BYH.js.map → chunk-CTAYH725.js.map} +1 -1
  80. package/dist/{chunk-YKNXBWPZ.mjs → chunk-D5KKVWZK.mjs} +3 -3
  81. package/dist/{chunk-YKNXBWPZ.mjs.map → chunk-D5KKVWZK.mjs.map} +1 -1
  82. package/dist/{chunk-XGELGOF6.mjs → chunk-DVZ4BMXX.mjs} +7 -7
  83. package/dist/{chunk-XGELGOF6.mjs.map → chunk-DVZ4BMXX.mjs.map} +1 -1
  84. package/dist/{chunk-FQAZBJJO.mjs → chunk-ESPOINPT.mjs} +3 -3
  85. package/dist/{chunk-FQAZBJJO.mjs.map → chunk-ESPOINPT.mjs.map} +1 -1
  86. package/dist/{chunk-XOYQKFKI.mjs → chunk-EVETX2XF.mjs} +4 -4
  87. package/dist/{chunk-XOYQKFKI.mjs.map → chunk-EVETX2XF.mjs.map} +1 -1
  88. package/dist/{chunk-ITVQV7DK.js → chunk-EVKP4SOM.js} +10 -10
  89. package/dist/{chunk-ITVQV7DK.js.map → chunk-EVKP4SOM.js.map} +1 -1
  90. package/dist/{chunk-CJX2MC62.mjs → chunk-EXVHO3CZ.mjs} +3 -3
  91. package/dist/{chunk-CJX2MC62.mjs.map → chunk-EXVHO3CZ.mjs.map} +1 -1
  92. package/dist/{chunk-3DXJHMQM.mjs → chunk-GYKFHQSZ.mjs} +3 -3
  93. package/dist/{chunk-3DXJHMQM.mjs.map → chunk-GYKFHQSZ.mjs.map} +1 -1
  94. package/dist/{chunk-H5FCJBAN.mjs → chunk-I4PUQYBI.mjs} +3 -3
  95. package/dist/{chunk-H5FCJBAN.mjs.map → chunk-I4PUQYBI.mjs.map} +1 -1
  96. package/dist/{chunk-DQXEYUTD.js → chunk-I7KIVKVW.js} +3 -3
  97. package/dist/{chunk-DQXEYUTD.js.map → chunk-I7KIVKVW.js.map} +1 -1
  98. package/dist/{chunk-L3GAEBJU.mjs → chunk-IUNFAKOS.mjs} +3 -3
  99. package/dist/{chunk-L3GAEBJU.mjs.map → chunk-IUNFAKOS.mjs.map} +1 -1
  100. package/dist/{chunk-ZQJGCQHC.js → chunk-IWHAJBYL.js} +15 -15
  101. package/dist/{chunk-ZQJGCQHC.js.map → chunk-IWHAJBYL.js.map} +1 -1
  102. package/dist/{chunk-AQUWWATH.js → chunk-IZRVSIOK.js} +4 -4
  103. package/dist/{chunk-AQUWWATH.js.map → chunk-IZRVSIOK.js.map} +1 -1
  104. package/dist/{chunk-TMNFPVK5.js → chunk-JAA42HR7.js} +7 -7
  105. package/dist/{chunk-TMNFPVK5.js.map → chunk-JAA42HR7.js.map} +1 -1
  106. package/dist/{chunk-Y53BIB7A.js → chunk-JSM4AYSZ.js} +14 -14
  107. package/dist/{chunk-Y53BIB7A.js.map → chunk-JSM4AYSZ.js.map} +1 -1
  108. package/dist/{chunk-MZK5APTV.js → chunk-KDLN2MR5.js} +18 -18
  109. package/dist/{chunk-MZK5APTV.js.map → chunk-KDLN2MR5.js.map} +1 -1
  110. package/dist/{chunk-BGOPF6J2.js → chunk-KEEZX6Q4.js} +3 -3
  111. package/dist/{chunk-BGOPF6J2.js.map → chunk-KEEZX6Q4.js.map} +1 -1
  112. package/dist/{chunk-6OSHL7H5.mjs → chunk-LXBPTKYT.mjs} +4 -4
  113. package/dist/{chunk-6OSHL7H5.mjs.map → chunk-LXBPTKYT.mjs.map} +1 -1
  114. package/dist/chunk-M2N7NY3V.js +103 -0
  115. package/dist/chunk-M2N7NY3V.js.map +1 -0
  116. package/dist/{chunk-36NE4PSS.js → chunk-MQEVQ5YB.js} +3 -3
  117. package/dist/{chunk-36NE4PSS.js.map → chunk-MQEVQ5YB.js.map} +1 -1
  118. package/dist/{chunk-DXBSBWSS.js → chunk-MTHMOXZF.js} +6 -6
  119. package/dist/{chunk-DXBSBWSS.js.map → chunk-MTHMOXZF.js.map} +1 -1
  120. package/dist/{chunk-BDSNEB3O.mjs → chunk-NRT7MOEO.mjs} +4 -4
  121. package/dist/{chunk-BDSNEB3O.mjs.map → chunk-NRT7MOEO.mjs.map} +1 -1
  122. package/dist/chunk-NYXENHD2.mjs +96 -0
  123. package/dist/chunk-NYXENHD2.mjs.map +1 -0
  124. package/dist/chunk-OI3FCJSP.js +8 -0
  125. package/dist/{chunk-OXA4ZSX2.js.map → chunk-OI3FCJSP.js.map} +1 -1
  126. package/dist/{chunk-F6BYWNHU.mjs → chunk-OUP6UL74.mjs} +3 -3
  127. package/dist/{chunk-F6BYWNHU.mjs.map → chunk-OUP6UL74.mjs.map} +1 -1
  128. package/dist/{chunk-OQWAJBYA.mjs → chunk-OWEJXMKY.mjs} +3 -3
  129. package/dist/{chunk-OQWAJBYA.mjs.map → chunk-OWEJXMKY.mjs.map} +1 -1
  130. package/dist/{chunk-XKJLJLQ4.js → chunk-OZTVJSFX.js} +107 -49
  131. package/dist/chunk-OZTVJSFX.js.map +1 -0
  132. package/dist/{chunk-QF3XTEXV.js → chunk-P4J3WG6C.js} +4 -4
  133. package/dist/{chunk-QF3XTEXV.js.map → chunk-P4J3WG6C.js.map} +1 -1
  134. package/dist/{chunk-4EJI4IOX.mjs → chunk-PTQHPWEK.mjs} +97 -39
  135. package/dist/chunk-PTQHPWEK.mjs.map +1 -0
  136. package/dist/{chunk-OF4V7CSP.mjs → chunk-QSN2QST7.mjs} +3 -3
  137. package/dist/{chunk-OF4V7CSP.mjs.map → chunk-QSN2QST7.mjs.map} +1 -1
  138. package/dist/{chunk-NMKUYGKK.mjs → chunk-RGXYE2ZI.mjs} +4 -4
  139. package/dist/{chunk-NMKUYGKK.mjs.map → chunk-RGXYE2ZI.mjs.map} +1 -1
  140. package/dist/{chunk-NNZDWY3L.mjs → chunk-RH4XEXTK.mjs} +3 -3
  141. package/dist/{chunk-NDVKIDMN.js → chunk-RQG7I6O4.js} +4 -4
  142. package/dist/{chunk-NDVKIDMN.js.map → chunk-RQG7I6O4.js.map} +1 -1
  143. package/dist/{chunk-VK74LC4H.js → chunk-S6CMQTVZ.js} +5 -5
  144. package/dist/{chunk-VK74LC4H.js.map → chunk-S6CMQTVZ.js.map} +1 -1
  145. package/dist/{chunk-5YA6SI4Z.mjs → chunk-TIFVAASU.mjs} +2 -2
  146. package/dist/{chunk-K4LLYQFZ.js → chunk-VDGCZVUF.js} +14 -14
  147. package/dist/{chunk-K4LLYQFZ.js.map → chunk-VDGCZVUF.js.map} +1 -1
  148. package/dist/{chunk-I4RU3RCS.js → chunk-XCOMBHLF.js} +8 -8
  149. package/dist/{chunk-I4RU3RCS.js.map → chunk-XCOMBHLF.js.map} +1 -1
  150. package/dist/{chunk-I7AZC5ZQ.js → chunk-XXSSUCJB.js} +2 -2
  151. package/dist/{chunk-ZQSJK65K.mjs → chunk-YEHC7VMW.mjs} +3 -3
  152. package/dist/{chunk-ZQSJK65K.mjs.map → chunk-YEHC7VMW.mjs.map} +1 -1
  153. package/dist/{chunk-KKTSAT7I.mjs → chunk-YK7SEUFJ.mjs} +4 -4
  154. package/dist/{chunk-KKTSAT7I.mjs.map → chunk-YK7SEUFJ.mjs.map} +1 -1
  155. package/dist/{chunk-NN2YE5WT.js → chunk-ZUQSVCMD.js} +3 -3
  156. package/dist/cli/index.js +211 -211
  157. package/dist/cli/index.mjs +151 -151
  158. package/dist/client/index.js +4 -4
  159. package/dist/client/index.mjs +3 -3
  160. package/dist/commerce/index.js +57 -57
  161. package/dist/commerce/index.mjs +5 -5
  162. package/dist/cta-bar/CtaBar.d.ts +21 -7
  163. package/dist/cta-bar/CtaBar.d.ts.map +1 -1
  164. package/dist/cta-bar/index.js +9 -12
  165. package/dist/cta-bar/index.js.map +1 -1
  166. package/dist/cta-bar/index.mjs +9 -12
  167. package/dist/cta-bar/index.mjs.map +1 -1
  168. package/dist/cta-bar/styles.d.ts.map +1 -1
  169. package/dist/engage/ChatWidget.d.ts.map +1 -1
  170. package/dist/engage/EchoUiActions.d.ts +5 -2
  171. package/dist/engage/EchoUiActions.d.ts.map +1 -1
  172. package/dist/engage/brand-color.d.ts +37 -0
  173. package/dist/engage/brand-color.d.ts.map +1 -0
  174. package/dist/engage/index.js +11 -10
  175. package/dist/engage/index.js.map +1 -1
  176. package/dist/engage/index.mjs +8 -7
  177. package/dist/engage/index.mjs.map +1 -1
  178. package/dist/fleet/index.js +8 -8
  179. package/dist/fleet/index.mjs +4 -4
  180. package/dist/forms/index.js +16 -16
  181. package/dist/forms/index.mjs +9 -9
  182. package/dist/forms/server.js +10 -10
  183. package/dist/forms/server.mjs +8 -8
  184. package/dist/forms/static.js +7 -7
  185. package/dist/forms/static.mjs +6 -6
  186. package/dist/images/index.js +11 -11
  187. package/dist/images/index.mjs +4 -4
  188. package/dist/index.js +63 -63
  189. package/dist/index.mjs +9 -9
  190. package/dist/layout/client.js +8 -8
  191. package/dist/layout/client.mjs +7 -7
  192. package/dist/layout/index.js +10 -10
  193. package/dist/layout/index.mjs +8 -8
  194. package/dist/{lib-6HOOMENJ.js → lib-6GWWPDJR.js} +7 -7
  195. package/dist/lib-BD4KKQBI.mjs +4 -0
  196. package/dist/{lib-R7IQ4ZHE.mjs → lib-N5PD6JNJ.mjs} +2 -2
  197. package/dist/{lib-BGAWCSUH.js → lib-WFB5RLEQ.js} +8 -8
  198. package/dist/maps/index.js +5 -5
  199. package/dist/maps/index.mjs +3 -3
  200. package/dist/search/index.js +4 -4
  201. package/dist/search/index.mjs +3 -3
  202. package/dist/seo/client.js +5 -5
  203. package/dist/seo/client.mjs +4 -4
  204. package/dist/seo/index.js +5 -5
  205. package/dist/seo/index.mjs +4 -4
  206. package/dist/seo/register-sitemap-cli.js +12 -93
  207. package/dist/seo/register-sitemap-cli.mjs +2 -83
  208. package/dist/server/index.js +3 -3
  209. package/dist/server/index.mjs +2 -2
  210. package/dist/shared/color.d.ts +39 -0
  211. package/dist/shared/color.d.ts.map +1 -0
  212. package/dist/shared/version.d.ts +1 -1
  213. package/dist/signal/index.js +11 -11
  214. package/dist/signal/index.mjs +2 -2
  215. package/dist/sync/index.js +17 -17
  216. package/dist/sync/index.mjs +4 -4
  217. package/dist/{web-vitals.attribution-7LKLZ5GR.mjs → web-vitals.attribution-CHXXWO72.mjs} +3 -3
  218. package/dist/web-vitals.attribution-CHXXWO72.mjs.map +1 -0
  219. package/dist/{web-vitals.attribution-ONVYQNRB.js → web-vitals.attribution-SQVZNHN3.js} +3 -3
  220. package/dist/web-vitals.attribution-SQVZNHN3.js.map +1 -0
  221. package/package.json +1 -1
  222. package/skills/site-kit/SKILL.md +3 -2
  223. package/dist/ChatWidget-GVNDKGUU.mjs +0 -16
  224. package/dist/ChatWidget-YL34KOZM.js +0 -25
  225. package/dist/EngageWidget-465O5XUV.mjs +0 -12
  226. package/dist/EngageWidget-IQRKRYPG.js +0 -21
  227. package/dist/ManagedForm-MLPETHSQ.js +0 -25
  228. package/dist/ManagedForm-P3L34ALG.mjs +0 -16
  229. package/dist/SitemapSync-P7XWL6VV.js +0 -18
  230. package/dist/SitemapSync-SIKJCK7N.mjs +0 -9
  231. package/dist/chunk-4EJI4IOX.mjs.map +0 -1
  232. package/dist/chunk-ACKFL6WA.mjs +0 -6
  233. package/dist/chunk-OXA4ZSX2.js +0 -8
  234. package/dist/chunk-XKJLJLQ4.js.map +0 -1
  235. package/dist/lib-RSDMEKDQ.mjs +0 -4
  236. package/dist/web-vitals.attribution-7LKLZ5GR.mjs.map +0 -1
  237. package/dist/web-vitals.attribution-ONVYQNRB.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cta-bar/styles.tsx","../../src/cta-bar/CtaBar.tsx"],"names":["jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit/cta-bar — stylesheet\n *\n * Layout and states only. The surface itself is the shared Liquid Glass\n * recipe (`../shared/glass`), applied by putting `sk-glass` on the bar.\n *\n * Geometry is driven by three tokens, and the same three produce the\n * bar's height, the spacer that reserves room for it, and the Echo launcher\n * clearance. Set them on :root, not on the bar, so all three read them:\n *\n * --sk-cta-bar-inset gap from the screen edges (12px)\n * --sk-cta-bar-padding gap between glass and buttons (6px)\n * --sk-cta-bar-action-height button height (48px)\n *\n * Colour tokens: --sk-cta-bar-text, --sk-cta-primary-bg,\n * --sk-cta-primary-text, --sk-cta-secondary-bg, --sk-cta-secondary-text,\n * plus the --sk-glass-* tokens for the surface.\n */\n\nimport * as React from 'react'\n\nexport const CTA_BAR_STYLE_HREF = 'sk-cta-bar'\n\n/** Show-at-and-above widths per breakpoint name, mirroring Tailwind's defaults. */\nexport const CTA_BAR_BREAKPOINTS = { sm: 640, md: 768, lg: 1024, xl: 1280 } as const\nexport type CtaBarBreakpoint = keyof typeof CTA_BAR_BREAKPOINTS | 'none'\n\nconst BAR_HEIGHT =\n 'calc(var(--sk-cta-bar-action-height, 48px) + 2 * var(--sk-cta-bar-padding, 6px))'\n\n/**\n * Where the Echo launcher goes while a bar is on screen: one bar height plus\n * the bar's own inset, plus 12px of air. Uses the full (not compact) height,\n * so the launcher holds still while the bar breathes during a scroll.\n */\nexport const ECHO_CLEARANCE = `calc(${BAR_HEIGHT} + var(--sk-cta-bar-inset, 12px) + 12px)`\n\n/**\n * The room the bar needs at the end of the page. The spacer is this tall,\n * and it's published as `--sk-cta-bar-space` on <html> while a bar is\n * present below its breakpoint, so a site can pad its footer with it\n * (`spacer={false}`) and let the footer's own background run under the bar\n * instead of a blank strip after it. Reserved whether or not the bar is\n * currently hidden, so showing and hiding never shifts the layout.\n */\nexport const CTA_BAR_SPACE = `calc(${BAR_HEIGHT} + 2 * var(--sk-cta-bar-inset, 12px) + env(safe-area-inset-bottom, 0px))`\n\nfunction presentBelow(name: string, px: number | null): string {\n const rules = `\n html:has(.sk-cta-bar[data-breakpoint=\"${name}\"]) {\n --sk-cta-bar-space: ${CTA_BAR_SPACE};\n }\n html:has(.sk-cta-bar[data-breakpoint=\"${name}\"][data-echo-clearance]:not([data-hidden])) {\n --sk-echo-offset-bottom: ${ECHO_CLEARANCE};\n }`\n return px == null ? `\\n@media all {${rules}\\n}` : `\\n@media (max-width: ${px - 0.02}px) {${rules}\\n}`\n}\n\nfunction perBreakpoint(): string {\n return Object.entries(CTA_BAR_BREAKPOINTS)\n .map(\n ([name, px]) => `\n@media (min-width: ${px}px) {\n .sk-cta-bar[data-breakpoint=\"${name}\"], .sk-cta-bar-spacer[data-breakpoint=\"${name}\"] { display: none; }\n}${presentBelow(name, px)}`,\n )\n .join('')\n}\n\nexport const CTA_BAR_CSS = `\n.sk-cta-bar {\n --sk-cta-h: var(--sk-cta-bar-action-height, 48px);\n --sk-cta-pad: var(--sk-cta-bar-padding, 6px);\n position: fixed;\n z-index: var(--sk-cta-bar-z, 40);\n left: var(--sk-cta-bar-inset, 12px);\n right: var(--sk-cta-bar-inset, 12px);\n bottom: calc(var(--sk-cta-bar-inset, 12px) + env(safe-area-inset-bottom, 0px) + var(--sk-vv-layout-gap, 0px));\n max-width: var(--sk-cta-bar-max-width, 520px);\n margin: 0 auto;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: var(--sk-cta-pad);\n border-radius: calc(var(--sk-cta-h) / 2 + var(--sk-cta-pad));\n color: var(--sk-cta-bar-text, var(--sk-text-primary, #111827));\n font-family: inherit;\n transition:\n transform 450ms cubic-bezier(0.2, 0.8, 0.2, 1),\n padding 250ms ease,\n border-radius 250ms ease,\n visibility 0s linear 0s;\n}\n.sk-cta-bar[data-layout=\"fit\"] { width: fit-content; }\n.sk-cta-bar[data-compact] {\n --sk-cta-h: calc(var(--sk-cta-bar-action-height, 48px) - 8px);\n --sk-cta-pad: calc(var(--sk-cta-bar-padding, 6px) - 2px);\n}\n.sk-cta-bar[data-hidden] {\n transform: translateY(calc(100% + var(--sk-cta-bar-inset, 12px) + env(safe-area-inset-bottom, 0px) + 16px));\n visibility: hidden;\n transition:\n transform 350ms cubic-bezier(0.4, 0, 1, 1),\n visibility 0s linear 350ms;\n}\n.sk-cta-bar__action {\n flex: 1 1 0%;\n min-width: 0;\n box-sizing: border-box;\n height: var(--sk-cta-h);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 0 18px;\n margin: 0;\n border: 0;\n border-radius: 999px;\n font: inherit;\n font-size: 15px;\n font-weight: 600;\n line-height: 1;\n text-decoration: none;\n white-space: nowrap;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition:\n height 250ms ease,\n flex-grow 300ms ease,\n flex-basis 300ms ease,\n padding 250ms ease,\n transform 150ms ease;\n}\n.sk-cta-bar[data-layout=\"fit\"] .sk-cta-bar__action { flex: 0 0 auto; }\n.sk-cta-bar__action:active { transform: scale(0.97); }\n.sk-cta-bar__action:focus-visible {\n outline: 2px solid var(--sk-cta-bar-focus, currentColor);\n outline-offset: 2px;\n}\n.sk-cta-bar__action[data-variant=\"primary\"] {\n background: var(--sk-cta-primary-bg, var(--sk-primary, #2563eb));\n color: var(--sk-cta-primary-text, #ffffff);\n box-shadow:\n inset 0 1px 0 color-mix(in srgb, #ffffff 28%, transparent),\n 0 1px 2px rgba(0, 0, 0, 0.12);\n}\n.sk-cta-bar__action[data-variant=\"secondary\"] {\n background: var(--sk-cta-secondary-bg, color-mix(in srgb, currentColor 8%, transparent));\n color: var(--sk-cta-secondary-text, inherit);\n box-shadow: inset 0 0 0 1px color-mix(in srgb, currentColor 16%, transparent);\n}\n.sk-cta-bar__icon { display: inline-flex; flex-shrink: 0; }\n.sk-cta-bar__icon > svg { width: 18px; height: 18px; }\n.sk-cta-bar__label { min-width: 0; overflow: hidden; text-overflow: ellipsis; }\n.sk-cta-bar[data-compact] .sk-cta-bar__action[data-collapse] {\n flex: 0 0 var(--sk-cta-h);\n padding: 0;\n}\n.sk-cta-bar[data-compact] .sk-cta-bar__action[data-collapse] .sk-cta-bar__label {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n}\n.sk-cta-bar-spacer { height: ${CTA_BAR_SPACE}; }${presentBelow('none', null)}${perBreakpoint()}\n@media (prefers-reduced-motion: reduce) {\n .sk-cta-bar, .sk-cta-bar[data-hidden], .sk-cta-bar__action { transition: none; }\n}\n@media (scripting: none) {\n .sk-cta-bar[data-hidden] { transform: none; visibility: visible; }\n}\n`\n\nexport function CtaBarStyles() {\n return (\n <style href={CTA_BAR_STYLE_HREF} precedence=\"default\">\n {CTA_BAR_CSS}\n </style>\n )\n}\n","/**\n * @sonordev/site-kit/cta-bar — the Liquid Glass mobile CTA bar\n *\n * Single source of truth for the fleet's sticky mobile action bar. Before\n * 6.1.0 eleven sites each carried their own, and each had solved a different\n * subset of the same problems: hiding over the form it points at, staying off\n * the hero until the hero CTA scrolls away, getting out from under the Echo\n * launcher, riding out iOS toolbar resizes. This component does all of them.\n *\n * Server component. It renders plain markup plus a childless behaviour\n * island, so a server layout can pass Next <Link>s straight in:\n *\n * <CtaBar label=\"Call or book\" showAfter=\"#hero-cta\" hideOver=\"#quote\">\n * <CtaBarAction href=\"tel:+15135550100\" icon={<Phone />} variant=\"secondary\">Call</CtaBarAction>\n * <CtaBarAction as={Link} href=\"/quote\" icon={<ClipboardCheck />}>Free quote</CtaBarAction>\n * </CtaBar>\n *\n * Render it once, at the layout root and outside <main> (it's an <aside>\n * landmark). Never inside a blurred header: backdrop-filter on an ancestor\n * turns it into the containing block for this fixed bar.\n */\n\nimport * as React from 'react'\nimport { GlassStyles } from '../shared/glass'\nimport { CtaBarBehavior } from './CtaBarBehavior'\nimport { CtaBarStyles, type CtaBarBreakpoint } from './styles'\n\nexport interface CtaBarProps {\n children: React.ReactNode\n /** Accessible name of the bar's landmark. Default \"Quick actions\". */\n label?: string\n /** The bar is hidden at this width and above. `none` shows it at every width. Default `lg` (1024px). */\n breakpoint?: CtaBarBreakpoint\n /** `fill` stretches actions across the bar; `fit` hugs a single action in a centred capsule. Default `fill`. */\n layout?: 'fill' | 'fit'\n /**\n * CSS selector. The bar stays off screen until this element has scrolled\n * off the top, e.g. the hero's own CTA. If nothing matches, the bar shows.\n */\n showAfter?: string\n /** CSS selector(s). The bar steps aside while any match is on screen, e.g. the form it points at, or the footer. */\n hideOver?: string | string[]\n /** Hide while a text field has focus (the keyboard is up). Default true. */\n hideWhileTyping?: boolean\n /** Tighten while scrolling down, restore on scroll up. Default true. */\n compactOnScroll?: boolean\n /** Lift the Echo launcher above the bar while the bar is on screen. Default true. */\n echoClearance?: boolean\n /** Reserve the bar's height at the end of the page so it never covers the footer. Default true. */\n spacer?: boolean\n /** Send a `cta_click` analytics event for each action tap. Default true. */\n track?: boolean\n className?: string\n id?: string\n}\n\nfunction cx(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(' ')\n}\n\nexport function CtaBar({\n children,\n label = 'Quick actions',\n breakpoint = 'lg',\n layout = 'fill',\n showAfter,\n hideOver,\n hideWhileTyping = true,\n compactOnScroll = true,\n echoClearance = true,\n spacer = true,\n track = true,\n className,\n id,\n}: CtaBarProps) {\n const hideOverList = hideOver == null ? undefined : Array.isArray(hideOver) ? hideOver : [hideOver]\n return (\n <>\n <GlassStyles />\n <CtaBarStyles />\n {spacer ? <div className=\"sk-cta-bar-spacer\" data-breakpoint={breakpoint} aria-hidden=\"true\" /> : null}\n <aside\n id={id}\n aria-label={label}\n className={cx('sk-cta-bar', 'sk-glass', className)}\n data-sk-cta-bar=\"\"\n data-breakpoint={breakpoint}\n data-layout={layout}\n data-echo-clearance={echoClearance ? '' : undefined}\n // Server-rendered off screen when it waits for a start element, so it\n // never slides in over the hero during hydration. JS-off visitors get\n // it back through the stylesheet's (scripting: none) rule.\n data-hidden={showAfter ? '' : undefined}\n >\n {children}\n <CtaBarBehavior\n showAfter={showAfter}\n hideOver={hideOverList}\n hideWhileTyping={hideWhileTyping}\n compactOnScroll={compactOnScroll}\n track={track}\n />\n </aside>\n </>\n )\n}\n\ntype CtaBarActionOwnProps = {\n /** Element or component to render, e.g. Next's Link. Default: `a` with an href, `button` without. */\n as?: React.ElementType\n /** Leading icon; decorative, hidden from assistive tech. */\n icon?: React.ReactNode\n /** `primary` = solid brand, `secondary` = tinted glass, `plain` = layout only (style it yourself). Default `primary`. */\n variant?: 'primary' | 'secondary' | 'plain'\n /**\n * Fold to icon-only while the bar is compact. Default: true for a\n * secondary action with an icon. The label stays in the accessible name.\n */\n collapse?: boolean\n children: React.ReactNode\n className?: string\n}\n\nexport type CtaBarActionProps = CtaBarActionOwnProps &\n Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, keyof CtaBarActionOwnProps> &\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, keyof CtaBarActionOwnProps | keyof React.AnchorHTMLAttributes<HTMLAnchorElement>>\n\nexport function CtaBarAction({\n as,\n icon,\n variant = 'primary',\n collapse,\n children,\n className,\n ...rest\n}: CtaBarActionProps) {\n const Comp: React.ElementType = as ?? (rest.href ? 'a' : 'button')\n const folds = collapse ?? (variant === 'secondary' && icon != null)\n return (\n <Comp\n {...(Comp === 'button' && !('type' in rest) ? { type: 'button' } : null)}\n {...rest}\n className={cx('sk-cta-bar__action', className)}\n data-variant={variant}\n data-collapse={folds ? '' : undefined}\n >\n {icon != null ? (\n <span className=\"sk-cta-bar__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n ) : null}\n <span className=\"sk-cta-bar__label\">{children}</span>\n </Comp>\n )\n}\n"]}
1
+ {"version":3,"sources":["../../src/cta-bar/styles.tsx","../../src/cta-bar/CtaBar.tsx"],"names":["jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit/cta-bar — stylesheet\n *\n * Layout and states only. The surface itself is the shared Liquid Glass\n * recipe (`../shared/glass`), applied by putting `sk-glass` on the bar.\n *\n * Geometry is driven by three tokens, and the same three produce the\n * bar's height, the spacer that reserves room for it, and the Echo launcher\n * clearance. Set them on :root, not on the bar, so all three read them:\n *\n * --sk-cta-bar-inset gap from the screen edges (12px)\n * --sk-cta-bar-padding gap between glass and buttons (6px)\n * --sk-cta-bar-action-height button height (48px)\n *\n * Colour tokens: --sk-cta-bar-text, --sk-cta-primary-bg,\n * --sk-cta-primary-text, --sk-cta-secondary-bg, --sk-cta-secondary-text,\n * plus the --sk-glass-* tokens for the surface.\n */\n\nimport * as React from 'react'\n\nexport const CTA_BAR_STYLE_HREF = 'sk-cta-bar'\n\n/** Show-at-and-above widths per breakpoint name, mirroring Tailwind's defaults. */\nexport const CTA_BAR_BREAKPOINTS = { sm: 640, md: 768, lg: 1024, xl: 1280 } as const\nexport type CtaBarBreakpoint = keyof typeof CTA_BAR_BREAKPOINTS | 'none'\n\nconst BAR_HEIGHT =\n 'calc(var(--sk-cta-bar-action-height, 48px) + 2 * var(--sk-cta-bar-padding, 6px))'\n\n/**\n * Where the Echo launcher goes while a bar is on screen: one bar height plus\n * the bar's own inset, plus 12px of air. Uses the full (not compact) height,\n * so the launcher holds still while the bar breathes during a scroll.\n */\nexport const ECHO_CLEARANCE = `calc(${BAR_HEIGHT} + var(--sk-cta-bar-inset, 12px) + 12px)`\n\n/**\n * The room the bar needs at the end of the page. The spacer is this tall,\n * and it's published as `--sk-cta-bar-space` on <html> while a bar is\n * present below its breakpoint, so a site can pad its footer with it\n * (`spacer={false}`) and let the footer's own background run under the bar\n * instead of a blank strip after it. Reserved whether or not the bar is\n * currently hidden, so showing and hiding never shifts the layout.\n */\nexport const CTA_BAR_SPACE = `calc(${BAR_HEIGHT} + 2 * var(--sk-cta-bar-inset, 12px) + env(safe-area-inset-bottom, 0px))`\n\nfunction presentBelow(name: string, px: number | null): string {\n const rules = `\n html:has(.sk-cta-bar[data-breakpoint=\"${name}\"]) {\n --sk-cta-bar-space: ${CTA_BAR_SPACE};\n }\n html:has(.sk-cta-bar[data-breakpoint=\"${name}\"][data-echo-clearance]:not([data-hidden])) {\n --sk-echo-offset-bottom: ${ECHO_CLEARANCE};\n }`\n return px == null ? `\\n@media all {${rules}\\n}` : `\\n@media (max-width: ${px - 0.02}px) {${rules}\\n}`\n}\n\nfunction perBreakpoint(): string {\n return Object.entries(CTA_BAR_BREAKPOINTS)\n .map(\n ([name, px]) => `\n@media (min-width: ${px}px) {\n .sk-cta-bar[data-breakpoint=\"${name}\"], .sk-cta-bar-spacer[data-breakpoint=\"${name}\"] { display: none; }\n}${presentBelow(name, px)}`,\n )\n .join('')\n}\n\nexport const CTA_BAR_CSS = `\n.sk-cta-bar {\n --sk-cta-h: var(--sk-cta-bar-action-height, 48px);\n --sk-cta-pad: var(--sk-cta-bar-padding, 6px);\n position: fixed;\n z-index: var(--sk-cta-bar-z, 40);\n left: var(--sk-cta-bar-inset, 12px);\n right: var(--sk-cta-bar-inset, 12px);\n bottom: calc(var(--sk-cta-bar-inset, 12px) + env(safe-area-inset-bottom, 0px) + var(--sk-vv-layout-gap, 0px));\n max-width: var(--sk-cta-bar-max-width, 520px);\n margin: 0 auto;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: var(--sk-cta-pad);\n border-radius: calc(var(--sk-cta-h) / 2 + var(--sk-cta-pad));\n color: var(--sk-cta-bar-text, var(--sk-text-primary, #111827));\n font-family: inherit;\n transition:\n transform 450ms cubic-bezier(0.2, 0.8, 0.2, 1),\n padding 250ms ease,\n border-radius 250ms ease,\n visibility 0s linear 0s;\n}\n.sk-cta-bar[data-layout=\"fit\"] { width: fit-content; }\n.sk-cta-bar[data-compact] {\n --sk-cta-h: calc(var(--sk-cta-bar-action-height, 48px) - 8px);\n --sk-cta-pad: calc(var(--sk-cta-bar-padding, 6px) - 2px);\n}\n.sk-cta-bar[data-hidden] {\n transform: translateY(calc(100% + var(--sk-cta-bar-inset, 12px) + env(safe-area-inset-bottom, 0px) + 16px));\n visibility: hidden;\n transition:\n transform 350ms cubic-bezier(0.4, 0, 1, 1),\n visibility 0s linear 350ms;\n}\n.sk-cta-bar__action {\n flex: 1 1 0%;\n min-width: 0;\n box-sizing: border-box;\n height: var(--sk-cta-h);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 0 18px;\n margin: 0;\n border: 0;\n border-radius: 999px;\n font: inherit;\n font-size: 15px;\n font-weight: 600;\n line-height: 1;\n text-decoration: none;\n white-space: nowrap;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition:\n height 250ms ease,\n flex-grow 300ms ease,\n flex-basis 300ms ease,\n padding 250ms ease,\n transform 150ms ease;\n}\n.sk-cta-bar[data-layout=\"fit\"] .sk-cta-bar__action { flex: 0 0 auto; }\n.sk-cta-bar__action:active { transform: scale(0.97); }\n.sk-cta-bar__action:focus-visible {\n outline: 2px solid var(--sk-cta-bar-focus, currentColor);\n outline-offset: 2px;\n}\n.sk-cta-bar__action[data-variant=\"primary\"] {\n background: var(--sk-cta-primary-bg, var(--sk-primary, #2563eb));\n color: var(--sk-cta-primary-text, #ffffff);\n box-shadow:\n inset 0 1px 0 color-mix(in srgb, #ffffff 28%, transparent),\n 0 1px 2px rgba(0, 0, 0, 0.12);\n}\n.sk-cta-bar__action[data-variant=\"secondary\"] {\n background: var(--sk-cta-secondary-bg, color-mix(in srgb, currentColor 8%, transparent));\n color: var(--sk-cta-secondary-text, inherit);\n box-shadow: inset 0 0 0 1px color-mix(in srgb, currentColor 16%, transparent);\n}\n.sk-cta-bar__icon { display: inline-flex; flex-shrink: 0; }\n.sk-cta-bar__icon > svg { width: 18px; height: 18px; }\n.sk-cta-bar__label { min-width: 0; overflow: hidden; text-overflow: ellipsis; }\n.sk-cta-bar[data-compact] .sk-cta-bar__action[data-collapse] {\n flex: 0 0 var(--sk-cta-h);\n padding: 0;\n}\n.sk-cta-bar[data-compact] .sk-cta-bar__action[data-collapse] .sk-cta-bar__label {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n}\n.sk-cta-bar-spacer { height: ${CTA_BAR_SPACE}; }${presentBelow('none', null)}${perBreakpoint()}\n@media (prefers-reduced-motion: reduce) {\n .sk-cta-bar, .sk-cta-bar[data-hidden], .sk-cta-bar__action { transition: none; }\n}\n@media (scripting: none) {\n .sk-cta-bar[data-hidden] { transform: none; visibility: visible; }\n}\n@media print {\n .sk-cta-bar, .sk-cta-bar-spacer { display: none !important; }\n}\n`\n\nexport function CtaBarStyles() {\n return (\n <style href={CTA_BAR_STYLE_HREF} precedence=\"default\">\n {CTA_BAR_CSS}\n </style>\n )\n}\n","/**\n * @sonordev/site-kit/cta-bar — the Liquid Glass mobile CTA bar\n *\n * Single source of truth for the fleet's sticky mobile action bar. Before\n * 6.1.0 eleven sites each carried their own, and each had solved a different\n * subset of the same problems: hiding over the form it points at, staying off\n * the hero until the hero CTA scrolls away, getting out from under the Echo\n * launcher, riding out iOS toolbar resizes. This component does all of them.\n *\n * Server component. It renders plain markup plus a childless behaviour\n * island, so a server layout can pass Next <Link>s straight in:\n *\n * <CtaBar label=\"Call or book\" showAfter=\"#hero-cta\" hideOver=\"#quote\">\n * <CtaBarAction href=\"tel:+15135550100\" icon={<Phone />} variant=\"secondary\">Call</CtaBarAction>\n * <CtaBarAction as={Link} href=\"/quote\" icon={<ClipboardCheck />}>Free quote</CtaBarAction>\n * </CtaBar>\n *\n * Render it once per page: at the layout root for a site-wide bar, or inside\n * a page for a page-specific one. It's a labelled <aside>, which is valid at\n * either depth (axe 4.13 retired the rule that wanted complementary\n * landmarks top level; the fixture app runs axe on both placements). Never\n * inside a blurred header: backdrop-filter on an ancestor turns it into the\n * containing block for this fixed bar.\n */\n\nimport * as React from 'react'\nimport { GlassStyles } from '../shared/glass'\nimport { CtaBarBehavior } from './CtaBarBehavior'\nimport { CtaBarStyles, type CtaBarBreakpoint } from './styles'\n\nexport interface CtaBarProps {\n children: React.ReactNode\n /** Accessible name of the bar's landmark. Default \"Quick actions\". */\n label?: string\n /** The bar is hidden at this width and above. `none` shows it at every width. Default `lg` (1024px). */\n breakpoint?: CtaBarBreakpoint\n /** `fill` stretches actions across the bar; `fit` hugs a single action in a centred capsule. Default `fill`. */\n layout?: 'fill' | 'fit'\n /**\n * CSS selector. The bar stays off screen until this element has scrolled\n * off the top, e.g. the hero's own CTA. If nothing matches, the bar shows.\n */\n showAfter?: string\n /** CSS selector(s). The bar steps aside while any match is on screen, e.g. the form it points at, or the footer. */\n hideOver?: string | string[]\n /** Hide while a text field has focus (the keyboard is up). Default true. */\n hideWhileTyping?: boolean\n /** Tighten while scrolling down, restore on scroll up. Default true. */\n compactOnScroll?: boolean\n /** Lift the Echo launcher above the bar while the bar is on screen. Default true. */\n echoClearance?: boolean\n /** Reserve the bar's height at the end of the page so it never covers the footer. Default true. */\n spacer?: boolean\n /** Send a `cta_click` analytics event for each action tap. Default true. */\n track?: boolean\n className?: string\n id?: string\n}\n\nfunction cx(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(' ')\n}\n\nexport function CtaBar({\n children,\n label = 'Quick actions',\n breakpoint = 'lg',\n layout = 'fill',\n showAfter,\n hideOver,\n hideWhileTyping = true,\n compactOnScroll = true,\n echoClearance = true,\n spacer = true,\n track = true,\n className,\n id,\n}: CtaBarProps) {\n const hideOverList = hideOver == null ? undefined : Array.isArray(hideOver) ? hideOver : [hideOver]\n return (\n <>\n <GlassStyles />\n <CtaBarStyles />\n {spacer ? <div className=\"sk-cta-bar-spacer\" data-breakpoint={breakpoint} aria-hidden=\"true\" /> : null}\n <aside\n id={id}\n aria-label={label}\n className={cx('sk-cta-bar', 'sk-glass', className)}\n data-sk-cta-bar=\"\"\n data-breakpoint={breakpoint}\n data-layout={layout}\n data-echo-clearance={echoClearance ? '' : undefined}\n // Server-rendered off screen when it waits for a start element, so it\n // never slides in over the hero during hydration. JS-off visitors get\n // it back through the stylesheet's (scripting: none) rule.\n data-hidden={showAfter ? '' : undefined}\n >\n {children}\n <CtaBarBehavior\n showAfter={showAfter}\n hideOver={hideOverList}\n hideWhileTyping={hideWhileTyping}\n compactOnScroll={compactOnScroll}\n track={track}\n />\n </aside>\n </>\n )\n}\n\n/** The props CtaBarAction owns. Never taken from the rendered element's own props. */\ntype CtaBarActionOwnProps = {\n /** Leading icon; decorative, hidden from assistive tech. */\n icon?: React.ReactNode\n /** `primary` = solid brand, `secondary` = tinted glass, `plain` = layout only (style it yourself). Default `primary`. */\n variant?: 'primary' | 'secondary' | 'plain'\n /**\n * Fold to icon-only while the bar is compact. Default: true for a\n * secondary action with an icon. The label stays in the accessible name.\n */\n collapse?: boolean\n children: React.ReactNode\n className?: string\n}\n\n/** Without `as` it renders an `a` (with an href) or a `button`, so it takes both. */\ntype CtaBarActionDefaultAttributes = Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, keyof CtaBarActionOwnProps> &\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, keyof CtaBarActionOwnProps | keyof React.AnchorHTMLAttributes<HTMLAnchorElement>>\n\n/**\n * Polymorphic on `as`. With no `as`, the default `a`/`button` attributes\n * (what 6.1.0 accepted, so existing callers don't change). With `as`, the\n * rendered component's own props, required ones included, minus the five\n * CtaBarAction owns: `<CtaBarAction as={ScheduleTourButton} values={…}>`\n * type-checks, and forgetting a prop the component requires doesn't.\n */\nexport type CtaBarActionProps<C extends React.ElementType | undefined = undefined> = CtaBarActionOwnProps & {\n /** Element or component to render, e.g. Next's Link. Default: `a` with an href, `button` without. */\n as?: C\n} & (C extends React.ElementType\n ? Omit<React.ComponentPropsWithoutRef<C>, keyof CtaBarActionOwnProps | 'as'>\n : CtaBarActionDefaultAttributes)\n\nexport function CtaBarAction<C extends React.ElementType | undefined = undefined>(props: CtaBarActionProps<C>) {\n const { as, icon, variant = 'primary', collapse, children, className, ...rest } = props\n // The rest is generic over `as`; the only field read here is `href`.\n const attrs = rest as Record<string, unknown>\n const Comp: React.ElementType = (as as React.ElementType | undefined) ?? (attrs.href ? 'a' : 'button')\n const folds = collapse ?? (variant === 'secondary' && icon != null)\n return (\n <Comp\n {...(Comp === 'button' && !('type' in attrs) ? { type: 'button' } : null)}\n {...attrs}\n className={cx('sk-cta-bar__action', className)}\n data-variant={variant}\n data-collapse={folds ? '' : undefined}\n >\n {icon != null ? (\n <span className=\"sk-cta-bar__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n ) : null}\n <span className=\"sk-cta-bar__label\">{children}</span>\n </Comp>\n )\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/cta-bar/styles.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,eAAO,MAAM,kBAAkB,eAAe,CAAA;AAE9C,mFAAmF;AACnF,eAAO,MAAM,mBAAmB;aAAK,EAAE,EAAE,GAAG;aAAE,EAAE,EAAE,GAAG;aAAE,EAAE,EAAE,IAAI;aAAE,EAAE,EAAE,IAAI;CAAW,CAAA;AACpF,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,mBAAmB,GAAG,MAAM,CAAA;AAKxE;;;;GAIG;AACH,eAAO,MAAM,cAAc,kIAA+D,CAAA;AAE1F;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,kKAA+F,CAAA;AAwBzH,eAAO,MAAM,WAAW,QA0GvB,CAAA;AAED,wBAAgB,YAAY,sBAM3B"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/cta-bar/styles.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,eAAO,MAAM,kBAAkB,eAAe,CAAA;AAE9C,mFAAmF;AACnF,eAAO,MAAM,mBAAmB;aAAK,EAAE,EAAE,GAAG;aAAE,EAAE,EAAE,GAAG;aAAE,EAAE,EAAE,IAAI;aAAE,EAAE,EAAE,IAAI;CAAW,CAAA;AACpF,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,mBAAmB,GAAG,MAAM,CAAA;AAKxE;;;;GAIG;AACH,eAAO,MAAM,cAAc,kIAA+D,CAAA;AAE1F;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,kKAA+F,CAAA;AAwBzH,eAAO,MAAM,WAAW,QA6GvB,CAAA;AAED,wBAAgB,YAAY,sBAM3B"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChatWidget.d.ts","sourceRoot":"","sources":["../../src/engage/ChatWidget.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAmD,MAAM,OAAO,CAAA;AAEvE,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,SAAS,CAAA;AAkBnD,UAAU,eAAe;IACvB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oFAAoF;IACpF,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC9B,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AA6KD,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,EAAE,eAAe,qBAykDzR"}
1
+ {"version":3,"file":"ChatWidget.d.ts","sourceRoot":"","sources":["../../src/engage/ChatWidget.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAoE,MAAM,OAAO,CAAA;AAExF,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,SAAS,CAAA;AAmBnD,UAAU,eAAe;IACvB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oFAAoF;IACpF,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC9B,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AA2KD,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,EAAE,eAAe,qBAwlDzR"}
@@ -3,7 +3,8 @@
3
3
  *
4
4
  * Renders the optional `uiActions` the visitor Echo concierge returns alongside
5
5
  * a chat reply (see signal-api echo.service.ts). Rendered beneath the assistant
6
- * message in ChatWidget, on-brand with the widget's primary-color tokens.
6
+ * message in ChatWidget, on-brand with the widget's primary-color tokens and
7
+ * the brand foreground colours from brand-color.ts.
7
8
  *
8
9
  * - show_form → compact inline managed form (reuses the canonical
9
10
  * forms `useForm` fetch/validate/submit path) with optional prefill.
@@ -20,9 +21,11 @@ export interface EchoUiActionsProps {
20
21
  actions: UiAction[];
21
22
  primaryColor: string;
22
23
  primaryRgb: string;
24
+ /** The brand as text on the panel: ChatWidget's `brandTextColor(primaryColor, panelTint)`. */
25
+ brandText: string;
23
26
  /** Called by a suggest_action chip — send the message as the next turn or navigate. */
24
27
  onSuggest: (action: string | undefined, message: string) => void;
25
28
  }
26
- export declare function EchoUiActions({ actions, primaryColor, primaryRgb, onSuggest }: EchoUiActionsProps): React.JSX.Element | null;
29
+ export declare function EchoUiActions({ actions, primaryColor, primaryRgb, brandText, onSuggest }: EchoUiActionsProps): React.JSX.Element | null;
27
30
  export { isNavigable };
28
31
  //# sourceMappingURL=EchoUiActions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EchoUiActions.d.ts","sourceRoot":"","sources":["../../src/engage/EchoUiActions.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAmBvC,mFAAmF;AACnF,iBAAS,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE5C;AAwRD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,QAAQ,EAAE,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,uFAAuF;IACvF,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACjE;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,kBAAkB,4BAiDjG;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
1
+ {"version":3,"file":"EchoUiActions.d.ts","sourceRoot":"","sources":["../../src/engage/EchoUiActions.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAoBvC,mFAAmF;AACnF,iBAAS,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE5C;AAyRD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,QAAQ,EAAE,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,8FAA8F;IAC9F,SAAS,EAAE,MAAM,CAAA;IACjB,uFAAuF;IACvF,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACjE;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,kBAAkB,4BAkD5G;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @sonordev/site-kit/engage — Echo's brand colours
3
+ *
4
+ * Single source of truth for how Echo turns the site's brand colour into
5
+ * foreground colours. ChatWidget and EchoUiActions route every such decision
6
+ * through here; don't re-derive one inline.
7
+ *
8
+ * - Brand as a FILL (launcher, avatar tile, the visitor's bubbles, the send
9
+ * and submit buttons) stays the raw brand, and text on it is
10
+ * `onBrandColor(brand)`.
11
+ * - Brand as TEXT on the glass panel (quick-action chips, the phone link,
12
+ * markdown link buttons, suggestion chips, the handoff button, the
13
+ * sent-message check) is `brandTextColor(brand, panelTint)`: the raw brand
14
+ * when it already reads, otherwise the brand pulled toward black (light
15
+ * panel) or white (dark panel) just far enough to clear WCAG AA.
16
+ *
17
+ * Why: a light brand (Gunning Homes' #d4af37 gold, any yellow) drawn as text
18
+ * on the ~86% white panel sat at about 2:1.
19
+ */
20
+ /** Light enough that text and icons on a fill of it should be dark. Unreadable colours count as dark. */
21
+ export declare function isLightColor(color: string): boolean;
22
+ /** Text or icon colour on a fill of the brand. */
23
+ export declare function onBrandColor(brand: string): string;
24
+ /**
25
+ * An "r, g, b" triplet for `rgba(var(--sk-primary-rgb, <triplet>), a)`, or
26
+ * the fallback when the colour can't be read.
27
+ */
28
+ export declare function rgbTriplet(color: string, fallback?: string): string;
29
+ /**
30
+ * The brand as text on Echo's glass panel.
31
+ *
32
+ * `panelTint` is the panel's resolved tint (the glass recipe's
33
+ * `--sk-glass-t`: `--sk-glass-tint`, then `--sk-bg`, then white). Unset or
34
+ * unreadable, the panel is taken to be white, the default.
35
+ */
36
+ export declare function brandTextColor(brand: string, panelTint?: string | null): string;
37
+ //# sourceMappingURL=brand-color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand-color.d.ts","sourceRoot":"","sources":["../../src/engage/brand-color.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AA4CH,yGAAyG;AACzG,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAInD;AAED,kDAAkD;AAClD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAgB,GAAG,MAAM,CAK1E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAuB/E"}
@@ -1,22 +1,23 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkXKJLJLQ4_js = require('../chunk-XKJLJLQ4.js');
5
- var chunkRVFOUPK4_js = require('../chunk-RVFOUPK4.js');
4
+ var chunkOZTVJSFX_js = require('../chunk-OZTVJSFX.js');
5
+ var chunk7VRK3DWU_js = require('../chunk-7VRK3DWU.js');
6
6
  require('../chunk-ESP5RMB7.js');
7
7
  require('../chunk-NBOBOYMT.js');
8
8
  require('../chunk-G6WF4G3E.js');
9
- require('../chunk-SDGS2R5O.js');
9
+ require('../chunk-2SLA2LOD.js');
10
10
  require('../chunk-5XFFUP6D.js');
11
- require('../chunk-AQUWWATH.js');
11
+ require('../chunk-IZRVSIOK.js');
12
12
  require('../chunk-KHPJ3CEL.js');
13
+ require('../chunk-M2N7NY3V.js');
13
14
  require('../chunk-RC4WWQXR.js');
14
15
  require('../chunk-P4Y75QSU.js');
15
16
  require('../chunk-VJMPIRSD.js');
16
17
  require('../chunk-5RNAUYWE.js');
17
- require('../chunk-ZQJGCQHC.js');
18
- require('../chunk-LF44SJPP.js');
19
- require('../chunk-OXA4ZSX2.js');
18
+ require('../chunk-IWHAJBYL.js');
19
+ require('../chunk-BGBP4UN4.js');
20
+ require('../chunk-OI3FCJSP.js');
20
21
  require('../chunk-SNAQBZPT.js');
21
22
 
22
23
  // src/engage/echo-config.ts
@@ -48,15 +49,15 @@ function getEchoWidgetProps(config = SONOR_PUBLIC_ECHO_DEFAULTS) {
48
49
 
49
50
  Object.defineProperty(exports, "ChatWidget", {
50
51
  enumerable: true,
51
- get: function () { return chunkXKJLJLQ4_js.ChatWidget; }
52
+ get: function () { return chunkOZTVJSFX_js.ChatWidget; }
52
53
  });
53
54
  Object.defineProperty(exports, "DesignRenderer", {
54
55
  enumerable: true,
55
- get: function () { return chunkRVFOUPK4_js.DesignRenderer; }
56
+ get: function () { return chunk7VRK3DWU_js.DesignRenderer; }
56
57
  });
57
58
  Object.defineProperty(exports, "EngageWidget", {
58
59
  enumerable: true,
59
- get: function () { return chunkRVFOUPK4_js.EngageWidget; }
60
+ get: function () { return chunk7VRK3DWU_js.EngageWidget; }
60
61
  });
61
62
  exports.SONOR_PUBLIC_ECHO_DEFAULTS = SONOR_PUBLIC_ECHO_DEFAULTS;
62
63
  exports.getEchoWidgetProps = getEchoWidgetProps;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/engage/echo-config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAgBO,IAAM,0BAAA,GAA+C;AAAA,EAC1D,SAAA,EAAW,yBAAA;AAAA,EACX,cAAA,EACE,0KAAA;AAAA,EACF,kBAAA,EAAoB;AAAA,IAClB,qBAAA;AAAA,IACA,0BAAA;AAAA,IACA,6BAAA;AAAA,IACA,6BAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAY,SAAA;AAAA;AAAA,EACZ,aAAA,EAAe;AACjB;AAEO,SAAS,kBAAA,CAAmB,SAA2B,0BAAA,EAA4B;AACxF,EAAA,OAAO;AAAA,IACL,cAAA,EAAgB,IAAA;AAAA,IAChB,UAAA,EAAY,MAAA,CAAO,SAAA,IAAa,0BAAA,CAA2B,SAAA;AAAA,IAC3D,eAAA,EAAiB,MAAA,CAAO,cAAA,IAAkB,0BAAA,CAA2B,cAAA;AAAA,IACrE,mBAAA,EAAqB,MAAA,CAAO,kBAAA,IAAsB,0BAAA,CAA2B,kBAAA;AAAA,IAC7E,WAAA,EAAa,MAAA,CAAO,UAAA,IAAc,0BAAA,CAA2B,UAAA;AAAA,IAC7D,cAAA,EAAgB,MAAA,CAAO,aAAA,IAAiB,0BAAA,CAA2B,aAAA;AAAA,IACnE,kBAAkB,MAAA,CAAO;AAAA,GAC3B;AACF","file":"index.js","sourcesContent":["/**\n * @sonordev/site-kit/engage - Echo Public Configuration\n *\n * Helpers for configuring the ChatWidget with Echo-specific defaults\n * for the Sonor public site (sonor.io).\n */\n\nexport interface EchoPublicConfig {\n signalUrl?: string\n welcomeMessage?: string\n suggestedQuestions?: string[]\n brandColor?: string\n assistantName?: string\n assistantAvatar?: string\n}\n\nexport const SONOR_PUBLIC_ECHO_DEFAULTS: EchoPublicConfig = {\n signalUrl: 'https://signal.sonor.io',\n welcomeMessage:\n \"Hi! I'm Echo, Sonor's AI assistant. I can answer questions about our platform, help you understand pricing, or get you started with a demo. What would you like to know?\",\n suggestedQuestions: [\n 'What does Sonor do?',\n 'How does Signal AI work?',\n 'What are the pricing plans?',\n 'Can I migrate from HubSpot?',\n 'How does the SEO module work?',\n ],\n brandColor: '#2563eb', // blue-600 (~5.2:1 on white, AA); overridden by --sk-primary CSS var or API brand_primary\n assistantName: 'Echo',\n}\n\nexport function getEchoWidgetProps(config: EchoPublicConfig = SONOR_PUBLIC_ECHO_DEFAULTS) {\n return {\n signal_enabled: true,\n signal_url: config.signalUrl || SONOR_PUBLIC_ECHO_DEFAULTS.signalUrl,\n welcome_message: config.welcomeMessage || SONOR_PUBLIC_ECHO_DEFAULTS.welcomeMessage,\n suggested_questions: config.suggestedQuestions || SONOR_PUBLIC_ECHO_DEFAULTS.suggestedQuestions,\n brand_color: config.brandColor || SONOR_PUBLIC_ECHO_DEFAULTS.brandColor,\n assistant_name: config.assistantName || SONOR_PUBLIC_ECHO_DEFAULTS.assistantName,\n assistant_avatar: config.assistantAvatar,\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/engage/echo-config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAgBO,IAAM,0BAAA,GAA+C;AAAA,EAC1D,SAAA,EAAW,yBAAA;AAAA,EACX,cAAA,EACE,0KAAA;AAAA,EACF,kBAAA,EAAoB;AAAA,IAClB,qBAAA;AAAA,IACA,0BAAA;AAAA,IACA,6BAAA;AAAA,IACA,6BAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAY,SAAA;AAAA;AAAA,EACZ,aAAA,EAAe;AACjB;AAEO,SAAS,kBAAA,CAAmB,SAA2B,0BAAA,EAA4B;AACxF,EAAA,OAAO;AAAA,IACL,cAAA,EAAgB,IAAA;AAAA,IAChB,UAAA,EAAY,MAAA,CAAO,SAAA,IAAa,0BAAA,CAA2B,SAAA;AAAA,IAC3D,eAAA,EAAiB,MAAA,CAAO,cAAA,IAAkB,0BAAA,CAA2B,cAAA;AAAA,IACrE,mBAAA,EAAqB,MAAA,CAAO,kBAAA,IAAsB,0BAAA,CAA2B,kBAAA;AAAA,IAC7E,WAAA,EAAa,MAAA,CAAO,UAAA,IAAc,0BAAA,CAA2B,UAAA;AAAA,IAC7D,cAAA,EAAgB,MAAA,CAAO,aAAA,IAAiB,0BAAA,CAA2B,aAAA;AAAA,IACnE,kBAAkB,MAAA,CAAO;AAAA,GAC3B;AACF","file":"index.js","sourcesContent":["/**\n * @sonordev/site-kit/engage - Echo Public Configuration\n *\n * Helpers for configuring the ChatWidget with Echo-specific defaults\n * for the Sonor public site (sonor.io).\n */\n\nexport interface EchoPublicConfig {\n signalUrl?: string\n welcomeMessage?: string\n suggestedQuestions?: string[]\n brandColor?: string\n assistantName?: string\n assistantAvatar?: string\n}\n\nexport const SONOR_PUBLIC_ECHO_DEFAULTS: EchoPublicConfig = {\n signalUrl: 'https://signal.sonor.io',\n welcomeMessage:\n \"Hi! I'm Echo, Sonor's AI assistant. I can answer questions about our platform, help you understand pricing, or get you started with a demo. What would you like to know?\",\n suggestedQuestions: [\n 'What does Sonor do?',\n 'How does Signal AI work?',\n 'What are the pricing plans?',\n 'Can I migrate from HubSpot?',\n 'How does the SEO module work?',\n ],\n brandColor: '#2563eb', // blue-600 (~5.2:1 on white, AA); overridden by --sk-primary CSS var or API brand_primary\n assistantName: 'Echo',\n}\n\nexport function getEchoWidgetProps(config: EchoPublicConfig = SONOR_PUBLIC_ECHO_DEFAULTS) {\n return {\n signal_enabled: true,\n signal_url: config.signalUrl || SONOR_PUBLIC_ECHO_DEFAULTS.signalUrl,\n welcome_message: config.welcomeMessage || SONOR_PUBLIC_ECHO_DEFAULTS.welcomeMessage,\n suggested_questions: config.suggestedQuestions || SONOR_PUBLIC_ECHO_DEFAULTS.suggestedQuestions,\n brand_color: config.brandColor || SONOR_PUBLIC_ECHO_DEFAULTS.brandColor,\n assistant_name: config.assistantName || SONOR_PUBLIC_ECHO_DEFAULTS.assistantName,\n assistant_avatar: config.assistantAvatar,\n }\n}\n"]}
@@ -1,20 +1,21 @@
1
1
  'use client';
2
- export { ChatWidget } from '../chunk-4EJI4IOX.mjs';
3
- export { DesignRenderer, EngageWidget } from '../chunk-NMKUYGKK.mjs';
2
+ export { ChatWidget } from '../chunk-PTQHPWEK.mjs';
3
+ export { DesignRenderer, EngageWidget } from '../chunk-RGXYE2ZI.mjs';
4
4
  import '../chunk-4U5NCKQY.mjs';
5
5
  import '../chunk-OBKS3CPP.mjs';
6
6
  import '../chunk-NSWO43XW.mjs';
7
- import '../chunk-YP5WAFTI.mjs';
7
+ import '../chunk-6FIIA6ME.mjs';
8
8
  import '../chunk-QRHVMTHF.mjs';
9
- import '../chunk-OQWAJBYA.mjs';
9
+ import '../chunk-OWEJXMKY.mjs';
10
10
  import '../chunk-TMVKRQGJ.mjs';
11
+ import '../chunk-NYXENHD2.mjs';
11
12
  import '../chunk-ZZQAGCSI.mjs';
12
13
  import '../chunk-5SANRSX3.mjs';
13
14
  import '../chunk-6EDVCUAG.mjs';
14
15
  import '../chunk-A6UYV475.mjs';
15
- import '../chunk-RGCUND5Q.mjs';
16
- import '../chunk-3DXJHMQM.mjs';
17
- import '../chunk-ACKFL6WA.mjs';
16
+ import '../chunk-CI7T4ZRP.mjs';
17
+ import '../chunk-GYKFHQSZ.mjs';
18
+ import '../chunk-5FBALULE.mjs';
18
19
  import '../chunk-BEXTDHO4.mjs';
19
20
 
20
21
  // src/engage/echo-config.ts
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/engage/echo-config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAgBO,IAAM,0BAAA,GAA+C;AAAA,EAC1D,SAAA,EAAW,yBAAA;AAAA,EACX,cAAA,EACE,0KAAA;AAAA,EACF,kBAAA,EAAoB;AAAA,IAClB,qBAAA;AAAA,IACA,0BAAA;AAAA,IACA,6BAAA;AAAA,IACA,6BAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAY,SAAA;AAAA;AAAA,EACZ,aAAA,EAAe;AACjB;AAEO,SAAS,kBAAA,CAAmB,SAA2B,0BAAA,EAA4B;AACxF,EAAA,OAAO;AAAA,IACL,cAAA,EAAgB,IAAA;AAAA,IAChB,UAAA,EAAY,MAAA,CAAO,SAAA,IAAa,0BAAA,CAA2B,SAAA;AAAA,IAC3D,eAAA,EAAiB,MAAA,CAAO,cAAA,IAAkB,0BAAA,CAA2B,cAAA;AAAA,IACrE,mBAAA,EAAqB,MAAA,CAAO,kBAAA,IAAsB,0BAAA,CAA2B,kBAAA;AAAA,IAC7E,WAAA,EAAa,MAAA,CAAO,UAAA,IAAc,0BAAA,CAA2B,UAAA;AAAA,IAC7D,cAAA,EAAgB,MAAA,CAAO,aAAA,IAAiB,0BAAA,CAA2B,aAAA;AAAA,IACnE,kBAAkB,MAAA,CAAO;AAAA,GAC3B;AACF","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit/engage - Echo Public Configuration\n *\n * Helpers for configuring the ChatWidget with Echo-specific defaults\n * for the Sonor public site (sonor.io).\n */\n\nexport interface EchoPublicConfig {\n signalUrl?: string\n welcomeMessage?: string\n suggestedQuestions?: string[]\n brandColor?: string\n assistantName?: string\n assistantAvatar?: string\n}\n\nexport const SONOR_PUBLIC_ECHO_DEFAULTS: EchoPublicConfig = {\n signalUrl: 'https://signal.sonor.io',\n welcomeMessage:\n \"Hi! I'm Echo, Sonor's AI assistant. I can answer questions about our platform, help you understand pricing, or get you started with a demo. What would you like to know?\",\n suggestedQuestions: [\n 'What does Sonor do?',\n 'How does Signal AI work?',\n 'What are the pricing plans?',\n 'Can I migrate from HubSpot?',\n 'How does the SEO module work?',\n ],\n brandColor: '#2563eb', // blue-600 (~5.2:1 on white, AA); overridden by --sk-primary CSS var or API brand_primary\n assistantName: 'Echo',\n}\n\nexport function getEchoWidgetProps(config: EchoPublicConfig = SONOR_PUBLIC_ECHO_DEFAULTS) {\n return {\n signal_enabled: true,\n signal_url: config.signalUrl || SONOR_PUBLIC_ECHO_DEFAULTS.signalUrl,\n welcome_message: config.welcomeMessage || SONOR_PUBLIC_ECHO_DEFAULTS.welcomeMessage,\n suggested_questions: config.suggestedQuestions || SONOR_PUBLIC_ECHO_DEFAULTS.suggestedQuestions,\n brand_color: config.brandColor || SONOR_PUBLIC_ECHO_DEFAULTS.brandColor,\n assistant_name: config.assistantName || SONOR_PUBLIC_ECHO_DEFAULTS.assistantName,\n assistant_avatar: config.assistantAvatar,\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/engage/echo-config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAgBO,IAAM,0BAAA,GAA+C;AAAA,EAC1D,SAAA,EAAW,yBAAA;AAAA,EACX,cAAA,EACE,0KAAA;AAAA,EACF,kBAAA,EAAoB;AAAA,IAClB,qBAAA;AAAA,IACA,0BAAA;AAAA,IACA,6BAAA;AAAA,IACA,6BAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAY,SAAA;AAAA;AAAA,EACZ,aAAA,EAAe;AACjB;AAEO,SAAS,kBAAA,CAAmB,SAA2B,0BAAA,EAA4B;AACxF,EAAA,OAAO;AAAA,IACL,cAAA,EAAgB,IAAA;AAAA,IAChB,UAAA,EAAY,MAAA,CAAO,SAAA,IAAa,0BAAA,CAA2B,SAAA;AAAA,IAC3D,eAAA,EAAiB,MAAA,CAAO,cAAA,IAAkB,0BAAA,CAA2B,cAAA;AAAA,IACrE,mBAAA,EAAqB,MAAA,CAAO,kBAAA,IAAsB,0BAAA,CAA2B,kBAAA;AAAA,IAC7E,WAAA,EAAa,MAAA,CAAO,UAAA,IAAc,0BAAA,CAA2B,UAAA;AAAA,IAC7D,cAAA,EAAgB,MAAA,CAAO,aAAA,IAAiB,0BAAA,CAA2B,aAAA;AAAA,IACnE,kBAAkB,MAAA,CAAO;AAAA,GAC3B;AACF","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit/engage - Echo Public Configuration\n *\n * Helpers for configuring the ChatWidget with Echo-specific defaults\n * for the Sonor public site (sonor.io).\n */\n\nexport interface EchoPublicConfig {\n signalUrl?: string\n welcomeMessage?: string\n suggestedQuestions?: string[]\n brandColor?: string\n assistantName?: string\n assistantAvatar?: string\n}\n\nexport const SONOR_PUBLIC_ECHO_DEFAULTS: EchoPublicConfig = {\n signalUrl: 'https://signal.sonor.io',\n welcomeMessage:\n \"Hi! I'm Echo, Sonor's AI assistant. I can answer questions about our platform, help you understand pricing, or get you started with a demo. What would you like to know?\",\n suggestedQuestions: [\n 'What does Sonor do?',\n 'How does Signal AI work?',\n 'What are the pricing plans?',\n 'Can I migrate from HubSpot?',\n 'How does the SEO module work?',\n ],\n brandColor: '#2563eb', // blue-600 (~5.2:1 on white, AA); overridden by --sk-primary CSS var or API brand_primary\n assistantName: 'Echo',\n}\n\nexport function getEchoWidgetProps(config: EchoPublicConfig = SONOR_PUBLIC_ECHO_DEFAULTS) {\n return {\n signal_enabled: true,\n signal_url: config.signalUrl || SONOR_PUBLIC_ECHO_DEFAULTS.signalUrl,\n welcome_message: config.welcomeMessage || SONOR_PUBLIC_ECHO_DEFAULTS.welcomeMessage,\n suggested_questions: config.suggestedQuestions || SONOR_PUBLIC_ECHO_DEFAULTS.suggestedQuestions,\n brand_color: config.brandColor || SONOR_PUBLIC_ECHO_DEFAULTS.brandColor,\n assistant_name: config.assistantName || SONOR_PUBLIC_ECHO_DEFAULTS.assistantName,\n assistant_avatar: config.assistantAvatar,\n }\n}\n"]}
@@ -1,32 +1,32 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkTMNFPVK5_js = require('../chunk-TMNFPVK5.js');
4
+ var chunkJAA42HR7_js = require('../chunk-JAA42HR7.js');
5
5
  var chunk7THQ4UW3_js = require('../chunk-7THQ4UW3.js');
6
6
  require('../chunk-HGNSJXWT.js');
7
7
  require('../chunk-5RNAUYWE.js');
8
- require('../chunk-ZQJGCQHC.js');
9
- require('../chunk-LF44SJPP.js');
10
- require('../chunk-OXA4ZSX2.js');
8
+ require('../chunk-IWHAJBYL.js');
9
+ require('../chunk-BGBP4UN4.js');
10
+ require('../chunk-OI3FCJSP.js');
11
11
  require('../chunk-SNAQBZPT.js');
12
12
 
13
13
 
14
14
 
15
15
  Object.defineProperty(exports, "FLEET_HEARTBEAT_PATH", {
16
16
  enumerable: true,
17
- get: function () { return chunkTMNFPVK5_js.FLEET_HEARTBEAT_PATH; }
17
+ get: function () { return chunkJAA42HR7_js.FLEET_HEARTBEAT_PATH; }
18
18
  });
19
19
  Object.defineProperty(exports, "FleetHeartbeat", {
20
20
  enumerable: true,
21
- get: function () { return chunkTMNFPVK5_js.FleetHeartbeat; }
21
+ get: function () { return chunkJAA42HR7_js.FleetHeartbeat; }
22
22
  });
23
23
  Object.defineProperty(exports, "detectNextVersion", {
24
24
  enumerable: true,
25
- get: function () { return chunkTMNFPVK5_js.detectNextVersion; }
25
+ get: function () { return chunkJAA42HR7_js.detectNextVersion; }
26
26
  });
27
27
  Object.defineProperty(exports, "sendFleetHeartbeat", {
28
28
  enumerable: true,
29
- get: function () { return chunkTMNFPVK5_js.sendFleetHeartbeat; }
29
+ get: function () { return chunkJAA42HR7_js.sendFleetHeartbeat; }
30
30
  });
31
31
  Object.defineProperty(exports, "FLEET_CONTRACT_VERSION", {
32
32
  enumerable: true,
@@ -1,11 +1,11 @@
1
1
  'use client';
2
- export { FLEET_HEARTBEAT_PATH, FleetHeartbeat, detectNextVersion, sendFleetHeartbeat } from '../chunk-XOYQKFKI.mjs';
2
+ export { FLEET_HEARTBEAT_PATH, FleetHeartbeat, detectNextVersion, sendFleetHeartbeat } from '../chunk-EVETX2XF.mjs';
3
3
  export { FLEET_CONTRACT_VERSION, FLEET_MODULES, FLEET_MODULES_MAX, FLEET_SITE_MAX_LENGTH, FLEET_VERSION_MAX_LENGTH, FLEET_VERSION_PATTERN, buildFleetHeartbeatPayload, isFleetModule, normalizeFleetModules, normalizeFleetSite, sanitizeFleetVersion } from '../chunk-4WCA2HM6.mjs';
4
4
  import '../chunk-ZVBLXXNJ.mjs';
5
5
  import '../chunk-A6UYV475.mjs';
6
- import '../chunk-RGCUND5Q.mjs';
7
- import '../chunk-3DXJHMQM.mjs';
8
- import '../chunk-ACKFL6WA.mjs';
6
+ import '../chunk-CI7T4ZRP.mjs';
7
+ import '../chunk-GYKFHQSZ.mjs';
8
+ import '../chunk-5FBALULE.mjs';
9
9
  import '../chunk-BEXTDHO4.mjs';
10
10
  //# sourceMappingURL=index.mjs.map
11
11
  //# sourceMappingURL=index.mjs.map
@@ -1,23 +1,23 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkMZK5APTV_js = require('../chunk-MZK5APTV.js');
4
+ var chunkKDLN2MR5_js = require('../chunk-KDLN2MR5.js');
5
5
  var chunkDVYYGHSG_js = require('../chunk-DVYYGHSG.js');
6
6
  var chunkYVJASVVK_js = require('../chunk-YVJASVVK.js');
7
- require('../chunk-36NE4PSS.js');
8
- var chunkDQXEYUTD_js = require('../chunk-DQXEYUTD.js');
7
+ require('../chunk-MQEVQ5YB.js');
8
+ var chunkI7KIVKVW_js = require('../chunk-I7KIVKVW.js');
9
9
  require('../chunk-HGNSJXWT.js');
10
- require('../chunk-NDVKIDMN.js');
10
+ require('../chunk-RQG7I6O4.js');
11
11
  var chunkXA2GJFVM_js = require('../chunk-XA2GJFVM.js');
12
- var chunkSDGS2R5O_js = require('../chunk-SDGS2R5O.js');
12
+ var chunk2SLA2LOD_js = require('../chunk-2SLA2LOD.js');
13
13
  require('../chunk-5XFFUP6D.js');
14
- var chunkAQUWWATH_js = require('../chunk-AQUWWATH.js');
14
+ var chunkIZRVSIOK_js = require('../chunk-IZRVSIOK.js');
15
15
  require('../chunk-KHPJ3CEL.js');
16
16
  require('../chunk-P4Y75QSU.js');
17
17
  require('../chunk-VJMPIRSD.js');
18
- var chunkZQJGCQHC_js = require('../chunk-ZQJGCQHC.js');
19
- require('../chunk-LF44SJPP.js');
20
- require('../chunk-OXA4ZSX2.js');
18
+ var chunkIWHAJBYL_js = require('../chunk-IWHAJBYL.js');
19
+ require('../chunk-BGBP4UN4.js');
20
+ require('../chunk-OI3FCJSP.js');
21
21
  require('../chunk-SNAQBZPT.js');
22
22
 
23
23
  // src/forms/formsApi.ts
@@ -49,7 +49,7 @@ async function apiRequest(method, path, body) {
49
49
  const token = await getAuthToken();
50
50
  headers["Authorization"] = `Bearer ${token}`;
51
51
  }
52
- const response = await chunkZQJGCQHC_js.sonorFetch(`${baseUrl}${path}`, {
52
+ const response = await chunkIWHAJBYL_js.sonorFetch(`${baseUrl}${path}`, {
53
53
  method,
54
54
  headers,
55
55
  body: body ? JSON.stringify(body) : void 0
@@ -340,11 +340,11 @@ async function initializeForms(forms) {
340
340
 
341
341
  Object.defineProperty(exports, "FormClient", {
342
342
  enumerable: true,
343
- get: function () { return chunkMZK5APTV_js.FormClient; }
343
+ get: function () { return chunkKDLN2MR5_js.FormClient; }
344
344
  });
345
345
  Object.defineProperty(exports, "ManagedForm", {
346
346
  enumerable: true,
347
- get: function () { return chunkMZK5APTV_js.ManagedForm; }
347
+ get: function () { return chunkKDLN2MR5_js.ManagedForm; }
348
348
  });
349
349
  Object.defineProperty(exports, "DatePicker", {
350
350
  enumerable: true,
@@ -356,7 +356,7 @@ Object.defineProperty(exports, "FormCelebration", {
356
356
  });
357
357
  Object.defineProperty(exports, "FormEnhancer", {
358
358
  enumerable: true,
359
- get: function () { return chunkDQXEYUTD_js.FormEnhancer; }
359
+ get: function () { return chunkI7KIVKVW_js.FormEnhancer; }
360
360
  });
361
361
  Object.defineProperty(exports, "FormFieldComponent", {
362
362
  enumerable: true,
@@ -364,15 +364,15 @@ Object.defineProperty(exports, "FormFieldComponent", {
364
364
  });
365
365
  Object.defineProperty(exports, "useForm", {
366
366
  enumerable: true,
367
- get: function () { return chunkSDGS2R5O_js.useForm; }
367
+ get: function () { return chunk2SLA2LOD_js.useForm; }
368
368
  });
369
369
  Object.defineProperty(exports, "useFormTracking", {
370
370
  enumerable: true,
371
- get: function () { return chunkSDGS2R5O_js.useFormTracking; }
371
+ get: function () { return chunk2SLA2LOD_js.useFormTracking; }
372
372
  });
373
373
  Object.defineProperty(exports, "DEFAULT_FORM_SUCCESS_MESSAGE", {
374
374
  enumerable: true,
375
- get: function () { return chunkAQUWWATH_js.DEFAULT_FORM_SUCCESS_MESSAGE; }
375
+ get: function () { return chunkIZRVSIOK_js.DEFAULT_FORM_SUCCESS_MESSAGE; }
376
376
  });
377
377
  exports.configureFormsApi = configureFormsApi;
378
378
  exports.defineForm = defineForm;
@@ -1,21 +1,21 @@
1
1
  'use client';
2
- export { FormClient, ManagedForm } from '../chunk-XGELGOF6.mjs';
2
+ export { FormClient, ManagedForm } from '../chunk-DVZ4BMXX.mjs';
3
3
  export { DatePicker } from '../chunk-MU3D5IO7.mjs';
4
4
  export { FormCelebration } from '../chunk-54CARHDR.mjs';
5
- import '../chunk-F6BYWNHU.mjs';
6
- export { FormEnhancer } from '../chunk-CJX2MC62.mjs';
5
+ import '../chunk-OUP6UL74.mjs';
6
+ export { FormEnhancer } from '../chunk-EXVHO3CZ.mjs';
7
7
  import '../chunk-ZVBLXXNJ.mjs';
8
- import '../chunk-OF4V7CSP.mjs';
8
+ import '../chunk-QSN2QST7.mjs';
9
9
  export { FormField as FormFieldComponent } from '../chunk-VJV7WUR2.mjs';
10
- export { useForm, useFormTracking } from '../chunk-YP5WAFTI.mjs';
10
+ export { useForm, useFormTracking } from '../chunk-6FIIA6ME.mjs';
11
11
  import '../chunk-QRHVMTHF.mjs';
12
- export { DEFAULT_FORM_SUCCESS_MESSAGE } from '../chunk-OQWAJBYA.mjs';
12
+ export { DEFAULT_FORM_SUCCESS_MESSAGE } from '../chunk-OWEJXMKY.mjs';
13
13
  import '../chunk-TMVKRQGJ.mjs';
14
14
  import '../chunk-5SANRSX3.mjs';
15
15
  import '../chunk-6EDVCUAG.mjs';
16
- import { sonorFetch } from '../chunk-RGCUND5Q.mjs';
17
- import '../chunk-3DXJHMQM.mjs';
18
- import '../chunk-ACKFL6WA.mjs';
16
+ import { sonorFetch } from '../chunk-CI7T4ZRP.mjs';
17
+ import '../chunk-GYKFHQSZ.mjs';
18
+ import '../chunk-5FBALULE.mjs';
19
19
  import '../chunk-BEXTDHO4.mjs';
20
20
 
21
21
  // src/forms/formsApi.ts
@@ -1,16 +1,16 @@
1
1
  'use strict';
2
2
 
3
- var chunkDQXEYUTD_js = require('../chunk-DQXEYUTD.js');
3
+ var chunkI7KIVKVW_js = require('../chunk-I7KIVKVW.js');
4
4
  require('../chunk-HGNSJXWT.js');
5
- var chunkI4RU3RCS_js = require('../chunk-I4RU3RCS.js');
6
- require('../chunk-NDVKIDMN.js');
5
+ var chunkXCOMBHLF_js = require('../chunk-XCOMBHLF.js');
6
+ require('../chunk-RQG7I6O4.js');
7
7
  require('../chunk-XA2GJFVM.js');
8
8
  var chunkO5GHP7UO_js = require('../chunk-O5GHP7UO.js');
9
- require('../chunk-AQUWWATH.js');
9
+ require('../chunk-IZRVSIOK.js');
10
10
  require('../chunk-KHPJ3CEL.js');
11
- require('../chunk-ZQJGCQHC.js');
12
- require('../chunk-LF44SJPP.js');
13
- require('../chunk-OXA4ZSX2.js');
11
+ require('../chunk-IWHAJBYL.js');
12
+ require('../chunk-BGBP4UN4.js');
13
+ require('../chunk-OI3FCJSP.js');
14
14
  require('../chunk-SNAQBZPT.js');
15
15
  var jsxRuntime = require('react/jsx-runtime');
16
16
 
@@ -27,10 +27,10 @@ async function ServerForm({
27
27
  defaultValues
28
28
  }) {
29
29
  const config = initialConfig ?? await getFormConfig(formId, configOptions);
30
- const shell = /* @__PURE__ */ jsxRuntime.jsx(chunkI4RU3RCS_js.StaticForm, { config, className, nativeReturnTo: returnTo });
30
+ const shell = /* @__PURE__ */ jsxRuntime.jsx(chunkXCOMBHLF_js.StaticForm, { config, className, nativeReturnTo: returnTo });
31
31
  if (!enhance) return shell;
32
32
  return /* @__PURE__ */ jsxRuntime.jsx(
33
- chunkDQXEYUTD_js.FormEnhancer,
33
+ chunkI7KIVKVW_js.FormEnhancer,
34
34
  {
35
35
  formId,
36
36
  initialConfig: config,
@@ -64,7 +64,7 @@ async function getFormConfig(formIdOrSlug, options = {}) {
64
64
 
65
65
  Object.defineProperty(exports, "StaticForm", {
66
66
  enumerable: true,
67
- get: function () { return chunkI4RU3RCS_js.StaticForm; }
67
+ get: function () { return chunkXCOMBHLF_js.StaticForm; }
68
68
  });
69
69
  exports.ServerForm = ServerForm;
70
70
  exports.getFormConfig = getFormConfig;
@@ -1,15 +1,15 @@
1
- import { FormEnhancer } from '../chunk-CJX2MC62.mjs';
1
+ import { FormEnhancer } from '../chunk-EXVHO3CZ.mjs';
2
2
  import '../chunk-ZVBLXXNJ.mjs';
3
- import { StaticForm } from '../chunk-6OSHL7H5.mjs';
4
- export { StaticForm } from '../chunk-6OSHL7H5.mjs';
5
- import '../chunk-OF4V7CSP.mjs';
3
+ import { StaticForm } from '../chunk-LXBPTKYT.mjs';
4
+ export { StaticForm } from '../chunk-LXBPTKYT.mjs';
5
+ import '../chunk-QSN2QST7.mjs';
6
6
  import '../chunk-VJV7WUR2.mjs';
7
7
  import { serverApiFetch } from '../chunk-6XNEGG5B.mjs';
8
- import '../chunk-OQWAJBYA.mjs';
8
+ import '../chunk-OWEJXMKY.mjs';
9
9
  import '../chunk-TMVKRQGJ.mjs';
10
- import '../chunk-RGCUND5Q.mjs';
11
- import '../chunk-3DXJHMQM.mjs';
12
- import '../chunk-ACKFL6WA.mjs';
10
+ import '../chunk-CI7T4ZRP.mjs';
11
+ import '../chunk-GYKFHQSZ.mjs';
12
+ import '../chunk-5FBALULE.mjs';
13
13
  import '../chunk-BEXTDHO4.mjs';
14
14
  import { jsx } from 'react/jsx-runtime';
15
15
 
@@ -1,20 +1,20 @@
1
1
  'use strict';
2
2
 
3
- var chunkI4RU3RCS_js = require('../chunk-I4RU3RCS.js');
4
- require('../chunk-NDVKIDMN.js');
3
+ var chunkXCOMBHLF_js = require('../chunk-XCOMBHLF.js');
4
+ require('../chunk-RQG7I6O4.js');
5
5
  require('../chunk-XA2GJFVM.js');
6
- require('../chunk-AQUWWATH.js');
6
+ require('../chunk-IZRVSIOK.js');
7
7
  require('../chunk-KHPJ3CEL.js');
8
- require('../chunk-ZQJGCQHC.js');
9
- require('../chunk-LF44SJPP.js');
10
- require('../chunk-OXA4ZSX2.js');
8
+ require('../chunk-IWHAJBYL.js');
9
+ require('../chunk-BGBP4UN4.js');
10
+ require('../chunk-OI3FCJSP.js');
11
11
  require('../chunk-SNAQBZPT.js');
12
12
 
13
13
 
14
14
 
15
15
  Object.defineProperty(exports, "StaticForm", {
16
16
  enumerable: true,
17
- get: function () { return chunkI4RU3RCS_js.StaticForm; }
17
+ get: function () { return chunkXCOMBHLF_js.StaticForm; }
18
18
  });
19
19
  //# sourceMappingURL=static.js.map
20
20
  //# sourceMappingURL=static.js.map
@@ -1,11 +1,11 @@
1
- export { StaticForm } from '../chunk-6OSHL7H5.mjs';
2
- import '../chunk-OF4V7CSP.mjs';
1
+ export { StaticForm } from '../chunk-LXBPTKYT.mjs';
2
+ import '../chunk-QSN2QST7.mjs';
3
3
  import '../chunk-VJV7WUR2.mjs';
4
- import '../chunk-OQWAJBYA.mjs';
4
+ import '../chunk-OWEJXMKY.mjs';
5
5
  import '../chunk-TMVKRQGJ.mjs';
6
- import '../chunk-RGCUND5Q.mjs';
7
- import '../chunk-3DXJHMQM.mjs';
8
- import '../chunk-ACKFL6WA.mjs';
6
+ import '../chunk-CI7T4ZRP.mjs';
7
+ import '../chunk-GYKFHQSZ.mjs';
8
+ import '../chunk-5FBALULE.mjs';
9
9
  import '../chunk-BEXTDHO4.mjs';
10
10
  //# sourceMappingURL=static.mjs.map
11
11
  //# sourceMappingURL=static.mjs.map