@sonordev/site-kit 7.4.0 → 8.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/AGENTS.md +40 -12
  2. package/CHANGELOG.md +72 -0
  3. package/README.md +44 -18
  4. package/agent-manifest.json +111 -56
  5. package/dist/AnalyticsProvider-EGCZ2MVM.js +13 -0
  6. package/dist/{ArticleViewTracker-3DH53RSB.js → ArticleViewTracker-ATNVMT45.js} +6 -5
  7. package/dist/{BlocksPopup-FGWYVHCH.js → BlocksPopup-F636XNO4.js} +6 -5
  8. package/dist/{ChatWidget-CDQZCLVH.js → ChatWidget-EQTLKPJX.js} +8 -5
  9. package/dist/{FileField-IPJ7L2W6.js → FileField-BUD2YGN5.js} +5 -5
  10. package/dist/{FormSpotlight-CQI2DBWI.js → FormSpotlight-NGH56TGC.js} +3 -3
  11. package/dist/{FormStage-4WHD6ED4.js → FormStage-XZRC54SY.js} +3 -3
  12. package/dist/ManagedForm-CQDQ4CUN.js +19 -0
  13. package/dist/{ManagedNewsletterForm-3D2BK3KQ.js → ManagedNewsletterForm-KCN3BTKA.js} +9 -6
  14. package/dist/{SignalCore-HEQYITTM.js → SignalCore-RDQPM2L2.js} +7 -7
  15. package/dist/SiteChat-QBDOQ5ZZ.js +6 -0
  16. package/dist/SiteDesignReporter-426TUCUF.js +12 -0
  17. package/dist/SitePopups-KLUD6XIE.js +13 -0
  18. package/dist/SitemapSync-QOIMV5GO.js +9 -0
  19. package/dist/_client/booking-widget.js +6 -5
  20. package/dist/_client/testimonial-section.js +3 -2
  21. package/dist/affiliates/index.js +6 -6
  22. package/dist/analytics/index.js +73 -7
  23. package/dist/articles/index.js +2 -2
  24. package/dist/articles/server-ui.js +3 -3
  25. package/dist/articles/server.js +2 -2
  26. package/dist/brand.css +1 -1
  27. package/dist/chat/index.d.ts +1 -1
  28. package/dist/chat/index.js +39 -8
  29. package/dist/{chunk-CSN45MHO.js → chunk-3222QBUS.js} +13 -16
  30. package/dist/chunk-3G7YABRA.js +25 -0
  31. package/dist/{chunk-CGWUXUYZ.js → chunk-3RDJKIYO.js} +2 -2
  32. package/dist/{chunk-J4FSB4OG.js → chunk-3YKQLC7J.js} +5 -2
  33. package/dist/{chunk-3E3PPSNR.js → chunk-55JLUMAC.js} +2 -2
  34. package/dist/{chunk-EHR4NIMX.js → chunk-5GB2HHVJ.js} +3 -3
  35. package/dist/chunk-5ROTTMBL.js +19 -0
  36. package/dist/chunk-5TM3WPCI.js +7 -0
  37. package/dist/{chunk-DA5XC7Y6.js → chunk-6BXUSAOJ.js} +1 -1
  38. package/dist/{chunk-7HPZSWS4.js → chunk-6CJGZFOU.js} +1 -1
  39. package/dist/{chunk-RYVDGXC2.js → chunk-6KU7STM3.js} +3 -1
  40. package/dist/{chunk-JRCNUUNG.js → chunk-6KUCA5HG.js} +1 -1
  41. package/dist/{chunk-MDP7EB4J.js → chunk-7BSC6HF3.js} +5 -5
  42. package/dist/{chunk-YCFW2OQO.js → chunk-AGJODJ4V.js} +2 -2
  43. package/dist/{chunk-OOD6GMT4.js → chunk-B7QRRLTU.js} +6 -4
  44. package/dist/{chunk-X6F6SO4S.js → chunk-C7TLGL3R.js} +21 -1
  45. package/dist/{chunk-PQDJNIHR.js → chunk-CAF53GKN.js} +2 -2
  46. package/dist/{chunk-43OCZ3JA.js → chunk-CAH4Y4PY.js} +4 -2
  47. package/dist/{chunk-XA2BNW5M.js → chunk-DWNS6ZJM.js} +1 -1
  48. package/dist/{chunk-PXKIGZ2F.js → chunk-EATJPSTS.js} +1 -1
  49. package/dist/{chunk-XEMHGJEG.js → chunk-EE6IG5GK.js} +10 -10
  50. package/dist/{chunk-D2RGEWHS.js → chunk-FIGIJK5F.js} +2 -2
  51. package/dist/{chunk-PF64OEXC.js → chunk-GMXY2OOY.js} +2 -2
  52. package/dist/{chunk-IE5SSOCN.js → chunk-H3SDOSVU.js} +3 -11
  53. package/dist/{chunk-GK7TV7EK.js → chunk-IY6G67EF.js} +1 -1
  54. package/dist/{chunk-CG4ETW5Y.js → chunk-J6N5DCGW.js} +3 -3
  55. package/dist/{chunk-ATE6IFVK.js → chunk-JCFQGEG7.js} +1 -1
  56. package/dist/{chunk-4BHRA7TI.js → chunk-JIH32RH2.js} +3 -3
  57. package/dist/{chunk-ZTLMPUO6.js → chunk-LNSF6BJC.js} +1 -1
  58. package/dist/{chunk-5O62CER4.js → chunk-M62U7TJF.js} +1 -1
  59. package/dist/{chunk-EDYHROQ7.js → chunk-NFRJTOTB.js} +3 -3
  60. package/dist/{chunk-6LLTLLEJ.js → chunk-NKFRW2VB.js} +6 -5
  61. package/dist/{chunk-CKW4HFJG.js → chunk-OCKGB734.js} +3 -3
  62. package/dist/{chunk-4DJMJ4V5.js → chunk-OE3NXEOF.js} +1 -1
  63. package/dist/{chunk-KHQ5GD6T.js → chunk-S5G3A7OZ.js} +1 -1
  64. package/dist/{chunk-4NTBQNHA.js → chunk-TYAVHRWH.js} +80 -81
  65. package/dist/{chunk-ZTLU3BSW.js → chunk-TZ5RTANX.js} +2 -2
  66. package/dist/{chunk-4YTYGG2C.js → chunk-URJN75ZG.js} +29 -16
  67. package/dist/{chunk-FUQTV5O6.js → chunk-VQQV7FOX.js} +3 -3
  68. package/dist/{chunk-PKGN32AU.js → chunk-XPTJRVL2.js} +1 -1
  69. package/dist/{chunk-662ILEZ6.js → chunk-Y35BWW2C.js} +3 -7
  70. package/dist/{chunk-MHGAZ3LL.js → chunk-YGXWG54S.js} +3 -5
  71. package/dist/{chunk-AH4AXO4P.js → chunk-Z4MK4VOG.js} +1 -1
  72. package/dist/{chunk-AV4QAK5F.js → chunk-Z6PVFZRI.js} +5 -4
  73. package/dist/chunk-ZKADJNR2.js +52 -0
  74. package/dist/client/index.js +6 -5
  75. package/dist/contracts/entries.d.ts +1 -1
  76. package/dist/contracts/knowledge.d.ts +84 -0
  77. package/dist/contracts/sentences.d.ts +46 -0
  78. package/dist/contracts/site-cache.d.ts +2 -0
  79. package/dist/cta-bar/index.js +1 -1
  80. package/dist/fleet/index.js +6 -5
  81. package/dist/forms/field-autocomplete.d.ts +16 -8
  82. package/dist/forms/index.d.ts +5 -0
  83. package/dist/forms/index.js +17 -17
  84. package/dist/forms/server.js +7 -7
  85. package/dist/forms/static.js +2 -2
  86. package/dist/forms/submitForm.d.ts +5 -0
  87. package/dist/images/index.js +4 -4
  88. package/dist/index.d.ts +3 -7
  89. package/dist/index.js +1 -1
  90. package/dist/layout/SiteKitLayout.d.ts +2 -1
  91. package/dist/layout/client.js +11 -9
  92. package/dist/layout/index.js +13 -11
  93. package/dist/llms/index.js +7 -6
  94. package/dist/maps/index.js +6 -6
  95. package/dist/mcp/sonor.d.ts +47 -3
  96. package/dist/mcp/sonor.js +30 -20
  97. package/dist/proxy/index.d.ts +3 -3
  98. package/dist/proxy/index.js +1 -1
  99. package/dist/reputation/index.js +3 -2
  100. package/dist/reputation/server.js +2 -1
  101. package/dist/revalidate/index.js +3 -3
  102. package/dist/robots/indexnow.js +2 -2
  103. package/dist/runtime/index.d.ts +32 -0
  104. package/dist/runtime/index.js +7 -0
  105. package/dist/seo/api.d.ts +0 -4
  106. package/dist/seo/client.js +6 -5
  107. package/dist/seo/getManagedMetadata.d.ts +24 -0
  108. package/dist/seo/index.d.ts +2 -3
  109. package/dist/seo/index.js +14 -132
  110. package/dist/seo/indexnow.js +2 -2
  111. package/dist/seo/llms.js +7 -6
  112. package/dist/seo/register-sitemap-cli.js +2 -2
  113. package/dist/seo/server-api.d.ts +0 -6
  114. package/dist/seo/server.d.ts +1 -1
  115. package/dist/seo/server.js +4 -4
  116. package/dist/seo/sitemap.js +4 -3
  117. package/dist/seo/types.d.ts +9 -30
  118. package/dist/server/index.d.ts +8 -1
  119. package/dist/server/index.js +4 -3
  120. package/dist/server/mint-site-token.d.ts +0 -11
  121. package/dist/server/server-fetch.d.ts +19 -0
  122. package/dist/server-api-EGOKC7Q3.js +9 -0
  123. package/dist/shared/build-entries.d.ts +21 -9
  124. package/dist/shared/clientApiConfig.d.ts +56 -0
  125. package/dist/shared/identity-reader.d.ts +26 -0
  126. package/dist/shared/identity-storage.d.ts +30 -0
  127. package/dist/shared/identity.d.ts +13 -13
  128. package/dist/shared/import-specifiers.d.ts +74 -0
  129. package/dist/shared/sonorFetch.d.ts +4 -3
  130. package/dist/shared/source-graph.d.ts +4 -1
  131. package/dist/shared/version.d.ts +1 -1
  132. package/dist/signal/index.js +2 -2
  133. package/dist/sitemap/index.js +4 -3
  134. package/dist/slots/index.js +3 -3
  135. package/dist/sync/index.js +6 -5
  136. package/dist/types.d.ts +0 -1
  137. package/dist/website/cta-bar.js +1 -1
  138. package/dist/website/images.js +4 -4
  139. package/dist/website/index.js +7 -6
  140. package/dist/website/popups.js +10 -7
  141. package/dist/website/slots.js +3 -3
  142. package/dist/{writeLLMsTxt-OL4KQERZ.js → writeLLMsTxt-UZGN6IBU.js} +3 -2
  143. package/docs/MIGRATING-TO-7.md +5 -2
  144. package/docs/MIGRATING-TO-8.md +183 -0
  145. package/docs.json +4 -8
  146. package/package.json +18 -45
  147. package/skills/site-kit/SKILL.md +41 -11
  148. package/src/analytics/README.md +14 -14
  149. package/src/chat/README.md +7 -7
  150. package/src/forms/README.md +61 -6
  151. package/src/mcp/README.md +61 -20
  152. package/src/proxy/README.md +5 -4
  153. package/src/revalidate/README.md +2 -2
  154. package/src/runtime/README.md +51 -0
  155. package/src/seo/README.md +24 -8
  156. package/src/sync/README.md +2 -2
  157. package/src/website/README.md +3 -2
  158. package/dist/AnalyticsProvider-BQXV3ZF3.js +0 -11
  159. package/dist/ManagedForm-7FZNH4L2.js +0 -16
  160. package/dist/SiteChat-DMPDXY3W.js +0 -5
  161. package/dist/SiteDesignReporter-Y2IOJE52.js +0 -11
  162. package/dist/SitePopups-HD2LDKVU.js +0 -10
  163. package/dist/SitemapSync-OKPZHRX6.js +0 -8
  164. package/dist/chunk-24QZEO3Q.js +0 -41
  165. package/dist/chunk-BU66S5B7.js +0 -1
  166. package/dist/chunk-G3NHWMP5.js +0 -233
  167. package/dist/chunk-HODO5BX5.js +0 -28
  168. package/dist/chunk-L3AQCDCY.js +0 -386
  169. package/dist/chunk-P5GB6NEO.js +0 -66
  170. package/dist/chunk-SWKE6FWH.js +0 -47
  171. package/dist/cms/CmsPage.d.ts +0 -17
  172. package/dist/cms/CmsPreview.d.ts +0 -37
  173. package/dist/cms/CmsSection.d.ts +0 -8
  174. package/dist/cms/PortableTextRenderer.d.ts +0 -7
  175. package/dist/cms/index.d.ts +0 -37
  176. package/dist/cms/index.js +0 -5
  177. package/dist/cms/sanity-image.d.ts +0 -47
  178. package/dist/cms/sections/CtaSection.d.ts +0 -3
  179. package/dist/cms/sections/CustomSection.d.ts +0 -7
  180. package/dist/cms/sections/FaqSection.d.ts +0 -3
  181. package/dist/cms/sections/FormSection.d.ts +0 -8
  182. package/dist/cms/sections/GallerySection.d.ts +0 -3
  183. package/dist/cms/sections/HeroSection.d.ts +0 -3
  184. package/dist/cms/sections/RichTextSection.d.ts +0 -3
  185. package/dist/cms/sections/TestimonialsSection.d.ts +0 -3
  186. package/dist/cms/sections/index.d.ts +0 -8
  187. package/dist/cms/server-api.d.ts +0 -49
  188. package/dist/cms/server.d.ts +0 -1
  189. package/dist/cms/server.js +0 -5
  190. package/dist/cms/types.d.ts +0 -104
  191. package/dist/commerce/CalendarView.d.ts +0 -43
  192. package/dist/commerce/CheckoutForm.d.ts +0 -11
  193. package/dist/commerce/EventCalendar.d.ts +0 -26
  194. package/dist/commerce/EventCheckout.d.ts +0 -42
  195. package/dist/commerce/EventEmbed.d.ts +0 -11
  196. package/dist/commerce/EventModal.d.ts +0 -43
  197. package/dist/commerce/EventTile.d.ts +0 -10
  198. package/dist/commerce/EventsAgenda.d.ts +0 -38
  199. package/dist/commerce/EventsWidget.d.ts +0 -84
  200. package/dist/commerce/OfferingCard.d.ts +0 -9
  201. package/dist/commerce/OfferingList.d.ts +0 -9
  202. package/dist/commerce/ProductDetail.d.ts +0 -38
  203. package/dist/commerce/ProductEmbed.d.ts +0 -11
  204. package/dist/commerce/ProductGrid.d.ts +0 -41
  205. package/dist/commerce/ProductPage.d.ts +0 -39
  206. package/dist/commerce/RegistrationForm.d.ts +0 -9
  207. package/dist/commerce/SizeChart.d.ts +0 -8
  208. package/dist/commerce/UpcomingEvents.d.ts +0 -9
  209. package/dist/commerce/api.d.ts +0 -179
  210. package/dist/commerce/events-extras.d.ts +0 -60
  211. package/dist/commerce/index.d.ts +0 -33
  212. package/dist/commerce/index.js +0 -8022
  213. package/dist/commerce/server.d.ts +0 -161
  214. package/dist/commerce/server.js +0 -2
  215. package/dist/commerce/types.d.ts +0 -340
  216. package/dist/commerce/useEventModal.d.ts +0 -20
  217. package/dist/commerce/utils.d.ts +0 -17
  218. package/dist/engage/EngageWidget.d.ts +0 -21
  219. package/dist/engage/index.d.ts +0 -14
  220. package/dist/engage/index.js +0 -45
  221. package/dist/engage/types.d.ts +0 -33
  222. package/dist/seo/ManagedContent.d.ts +0 -14
  223. package/dist/server-api-BVCBLJKL.js +0 -9
  224. package/dist/website/cms/server.d.ts +0 -2
  225. package/dist/website/cms/server.js +0 -5
  226. package/dist/website/cms-server.d.ts +0 -2
  227. package/dist/website/cms.d.ts +0 -2
  228. package/dist/website/cms.js +0 -5
  229. package/src/commerce/README.md +0 -109
@@ -3,9 +3,10 @@ import { useDeferredActivation } from './chunk-YC7ELZS3.js';
3
3
  import { withSiteBody } from './chunk-MJP63SSS.js';
4
4
  import './chunk-FESKKJAS.js';
5
5
  import './chunk-A4CC4ZG3.js';
6
- import { sonorFetch } from './chunk-3E3PPSNR.js';
7
- import './chunk-GK7TV7EK.js';
8
- import './chunk-KHQ5GD6T.js';
6
+ import { readPublishedApiConfig } from './chunk-3G7YABRA.js';
7
+ import { sonorFetch } from './chunk-55JLUMAC.js';
8
+ import './chunk-IY6G67EF.js';
9
+ import './chunk-S5G3A7OZ.js';
9
10
  import './chunk-PKBMQBKP.js';
10
11
  import { useEffect } from 'react';
11
12
 
@@ -13,8 +14,8 @@ var SESSION_KEY_PREFIX = "__sonor_article_viewed__:";
13
14
  function trackArticleView(slug, site) {
14
15
  if (!slug || typeof window === "undefined") return;
15
16
  const w = window;
16
- const baseUrl = w.__SITE_KIT_API_URL__;
17
- if (!baseUrl || !w.__SITE_KIT_API_KEY__) return;
17
+ const { apiUrl: baseUrl, apiKey } = readPublishedApiConfig();
18
+ if (!baseUrl || !apiKey) return;
18
19
  const key = `${SESSION_KEY_PREFIX}${slug}`;
19
20
  try {
20
21
  if (sessionStorage.getItem(key)) return;
@@ -1,13 +1,14 @@
1
1
  'use client';
2
- import { getSiteDesignTokens } from './chunk-CG4ETW5Y.js';
2
+ import { getSiteDesignTokens } from './chunk-J6N5DCGW.js';
3
3
  import { DEFAULT_POPUP_TOKENS, PopupBlocks } from './chunk-BF7TZYC3.js';
4
4
  import { normalizePopupBlocks, toHexColor, readableOn } from './chunk-IHG36STL.js';
5
5
  import './chunk-S22FSH7C.js';
6
- import './chunk-43OCZ3JA.js';
6
+ import './chunk-CAH4Y4PY.js';
7
7
  import './chunk-EKBEOXTH.js';
8
- import './chunk-3E3PPSNR.js';
9
- import './chunk-GK7TV7EK.js';
10
- import './chunk-KHQ5GD6T.js';
8
+ import './chunk-3G7YABRA.js';
9
+ import './chunk-55JLUMAC.js';
10
+ import './chunk-IY6G67EF.js';
11
+ import './chunk-S5G3A7OZ.js';
11
12
  import './chunk-PKBMQBKP.js';
12
13
  import { useState } from 'react';
13
14
  import { jsx } from 'react/jsx-runtime';
@@ -1,17 +1,20 @@
1
- export { ChatWidget, EchoChat, isChatEnabled } from './chunk-OOD6GMT4.js';
1
+ export { ChatWidget, EchoChat, isChatEnabled } from './chunk-B7QRRLTU.js';
2
2
  import './chunk-6T6CQVNL.js';
3
3
  import './chunk-JE4A5S4F.js';
4
4
  import './chunk-27FISYK4.js';
5
- import './chunk-CSN45MHO.js';
5
+ import './chunk-3222QBUS.js';
6
6
  import './chunk-Q6E4OPGG.js';
7
+ import './chunk-5ROTTMBL.js';
7
8
  import './chunk-C2FZBUSS.js';
8
9
  import './chunk-5SQK3D53.js';
9
10
  import './chunk-HW7B43E5.js';
10
11
  import './chunk-NJCTQH2P.js';
11
12
  import './chunk-S22FSH7C.js';
12
13
  import './chunk-L2V5PUFN.js';
14
+ import './chunk-5TM3WPCI.js';
13
15
  import './chunk-GJWI74ZZ.js';
14
- import './chunk-3E3PPSNR.js';
15
- import './chunk-GK7TV7EK.js';
16
- import './chunk-KHQ5GD6T.js';
16
+ import './chunk-3G7YABRA.js';
17
+ import './chunk-55JLUMAC.js';
18
+ import './chunk-IY6G67EF.js';
19
+ import './chunk-S5G3A7OZ.js';
17
20
  import './chunk-PKBMQBKP.js';
@@ -1,7 +1,8 @@
1
1
  'use client';
2
- import { sonorFetch } from './chunk-3E3PPSNR.js';
3
- import './chunk-GK7TV7EK.js';
4
- import './chunk-KHQ5GD6T.js';
2
+ import { getClientApiConfig } from './chunk-3G7YABRA.js';
3
+ import { sonorFetch } from './chunk-55JLUMAC.js';
4
+ import './chunk-IY6G67EF.js';
5
+ import './chunk-S5G3A7OZ.js';
5
6
  import './chunk-PKBMQBKP.js';
6
7
  import React from 'react';
7
8
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
@@ -54,8 +55,7 @@ function FileField({
54
55
  ] });
55
56
  }
56
57
  async function uploadFormFile(file) {
57
- const apiUrl = typeof window !== "undefined" ? window.__SITE_KIT_API_URL__ || "https://api.sonor.io" : "https://api.sonor.io";
58
- const apiKey = typeof window !== "undefined" ? window.__SITE_KIT_API_KEY__ : void 0;
58
+ const { apiUrl, apiKey } = getClientApiConfig();
59
59
  if (!apiKey) {
60
60
  throw new Error("API key is required to upload files.");
61
61
  }
@@ -1,9 +1,9 @@
1
1
  'use client';
2
- import { StageStyles, SummaryTick } from './chunk-J4FSB4OG.js';
3
- import { stageFirstName, useFieldControls, stageViews, stageEstimate, AUTO_ADVANCE_TYPES } from './chunk-ATE6IFVK.js';
4
- import { FormField } from './chunk-4NTBQNHA.js';
2
+ import { StageStyles, SummaryTick } from './chunk-3YKQLC7J.js';
3
+ import { stageFirstName, useFieldControls, stageViews, stageEstimate, AUTO_ADVANCE_TYPES } from './chunk-JCFQGEG7.js';
5
4
  import { readAgentSubmit, formToolAttributes } from './chunk-Q6E4OPGG.js';
6
5
  import { isEmptyValue, unseenControlValues, isDisplayOnly } from './chunk-C2FZBUSS.js';
6
+ import { FormField } from './chunk-TYAVHRWH.js';
7
7
  import './chunk-HW7B43E5.js';
8
8
  import { DEFAULT_HONEYPOT_FIELD } from './chunk-NJCTQH2P.js';
9
9
  import './chunk-PKBMQBKP.js';
@@ -1,9 +1,9 @@
1
1
  'use client';
2
- import { StageStyles, SummaryTick } from './chunk-J4FSB4OG.js';
3
- import { useFieldControls, stageViews, stageFirstName, stageEstimate, formatAnswer, AUTO_ADVANCE_TYPES } from './chunk-ATE6IFVK.js';
4
- import { FormField } from './chunk-4NTBQNHA.js';
2
+ import { StageStyles, SummaryTick } from './chunk-3YKQLC7J.js';
3
+ import { useFieldControls, stageViews, stageFirstName, stageEstimate, formatAnswer, AUTO_ADVANCE_TYPES } from './chunk-JCFQGEG7.js';
5
4
  import { readAgentSubmit, formToolAttributes } from './chunk-Q6E4OPGG.js';
6
5
  import { isEmptyValue, unseenControlValues } from './chunk-C2FZBUSS.js';
6
+ import { FormField } from './chunk-TYAVHRWH.js';
7
7
  import './chunk-HW7B43E5.js';
8
8
  import { DEFAULT_HONEYPOT_FIELD } from './chunk-NJCTQH2P.js';
9
9
  import './chunk-PKBMQBKP.js';
@@ -0,0 +1,19 @@
1
+ export { ManagedForm } from './chunk-7BSC6HF3.js';
2
+ import './chunk-JCFQGEG7.js';
3
+ import './chunk-3222QBUS.js';
4
+ import './chunk-Q6E4OPGG.js';
5
+ import './chunk-5ROTTMBL.js';
6
+ import './chunk-C2FZBUSS.js';
7
+ import './chunk-DXO6SBMD.js';
8
+ import './chunk-TYAVHRWH.js';
9
+ import './chunk-5SQK3D53.js';
10
+ import './chunk-HW7B43E5.js';
11
+ import './chunk-NJCTQH2P.js';
12
+ import './chunk-L2V5PUFN.js';
13
+ import './chunk-5TM3WPCI.js';
14
+ import './chunk-GJWI74ZZ.js';
15
+ import './chunk-3G7YABRA.js';
16
+ import './chunk-55JLUMAC.js';
17
+ import './chunk-IY6G67EF.js';
18
+ import './chunk-S5G3A7OZ.js';
19
+ import './chunk-PKBMQBKP.js';
@@ -1,16 +1,19 @@
1
- import { NewsletterShell } from './chunk-SC4MZGWZ.js';
2
- import './chunk-GYF2ULVO.js';
3
- import { useForm } from './chunk-CSN45MHO.js';
1
+ import { useForm } from './chunk-3222QBUS.js';
4
2
  import './chunk-Q6E4OPGG.js';
3
+ import './chunk-5ROTTMBL.js';
5
4
  import './chunk-C2FZBUSS.js';
6
5
  import './chunk-5SQK3D53.js';
7
6
  import './chunk-HW7B43E5.js';
8
7
  import './chunk-NJCTQH2P.js';
8
+ import { NewsletterShell } from './chunk-SC4MZGWZ.js';
9
+ import './chunk-GYF2ULVO.js';
9
10
  import './chunk-L2V5PUFN.js';
11
+ import './chunk-5TM3WPCI.js';
10
12
  import './chunk-GJWI74ZZ.js';
11
- import './chunk-3E3PPSNR.js';
12
- import './chunk-GK7TV7EK.js';
13
- import './chunk-KHQ5GD6T.js';
13
+ import './chunk-3G7YABRA.js';
14
+ import './chunk-55JLUMAC.js';
15
+ import './chunk-IY6G67EF.js';
16
+ import './chunk-S5G3A7OZ.js';
14
17
  import './chunk-PKBMQBKP.js';
15
18
  import { jsx } from 'react/jsx-runtime';
16
19
 
@@ -1,17 +1,17 @@
1
1
  'use client';
2
- import { getOrCreateVisitorId, getOrCreateSessionId } from './chunk-24QZEO3Q.js';
2
+ import { getOrCreateVisitorId, getOrCreateSessionId } from './chunk-ZKADJNR2.js';
3
3
  import { onPageLeave } from './chunk-L2V5PUFN.js';
4
+ import './chunk-5TM3WPCI.js';
4
5
  import './chunk-GJWI74ZZ.js';
5
- import { sonorFetch } from './chunk-3E3PPSNR.js';
6
- import { getFreshCredential, isSiteToken } from './chunk-GK7TV7EK.js';
7
- import './chunk-KHQ5GD6T.js';
6
+ import { getClientApiConfig } from './chunk-3G7YABRA.js';
7
+ import { sonorFetch } from './chunk-55JLUMAC.js';
8
+ import { getFreshCredential, isSiteToken } from './chunk-IY6G67EF.js';
9
+ import './chunk-S5G3A7OZ.js';
8
10
  import './chunk-PKBMQBKP.js';
9
11
  import { useState, useRef, useEffect, useCallback } from 'react';
10
12
 
11
13
  function getApiConfig() {
12
- const apiUrl = typeof window !== "undefined" ? window.__SITE_KIT_API_URL__ || "https://api.sonor.io" : "https://api.sonor.io";
13
- const apiKey = typeof window !== "undefined" ? window.__SITE_KIT_API_KEY__ : void 0;
14
- return { apiUrl, apiKey };
14
+ return getClientApiConfig();
15
15
  }
16
16
  function isDebug() {
17
17
  return typeof window !== "undefined" && !!window.__SITE_KIT_DEBUG__;
@@ -0,0 +1,6 @@
1
+ export { SiteChat } from './chunk-AGJODJ4V.js';
2
+ import './chunk-27FISYK4.js';
3
+ import './chunk-CAH4Y4PY.js';
4
+ import './chunk-EKBEOXTH.js';
5
+ import './chunk-3G7YABRA.js';
6
+ import './chunk-PKBMQBKP.js';
@@ -0,0 +1,12 @@
1
+ export { SiteDesignReporter } from './chunk-CAF53GKN.js';
2
+ import './chunk-J6N5DCGW.js';
3
+ import './chunk-IHG36STL.js';
4
+ import './chunk-YC7ELZS3.js';
5
+ import './chunk-S22FSH7C.js';
6
+ import './chunk-CAH4Y4PY.js';
7
+ import './chunk-EKBEOXTH.js';
8
+ import './chunk-3G7YABRA.js';
9
+ import './chunk-55JLUMAC.js';
10
+ import './chunk-IY6G67EF.js';
11
+ import './chunk-S5G3A7OZ.js';
12
+ import './chunk-PKBMQBKP.js';
@@ -0,0 +1,13 @@
1
+ export { SitePopups } from './chunk-NKFRW2VB.js';
2
+ import './chunk-27FISYK4.js';
3
+ import './chunk-5ROTTMBL.js';
4
+ import './chunk-ZKADJNR2.js';
5
+ import './chunk-5TM3WPCI.js';
6
+ import './chunk-GJWI74ZZ.js';
7
+ import './chunk-CAH4Y4PY.js';
8
+ import './chunk-EKBEOXTH.js';
9
+ import './chunk-3G7YABRA.js';
10
+ import './chunk-55JLUMAC.js';
11
+ import './chunk-IY6G67EF.js';
12
+ import './chunk-S5G3A7OZ.js';
13
+ import './chunk-PKBMQBKP.js';
@@ -0,0 +1,9 @@
1
+ export { SitemapSync } from './chunk-FIGIJK5F.js';
2
+ import './chunk-YVKRYQRG.js';
3
+ import './chunk-CAH4Y4PY.js';
4
+ import './chunk-EKBEOXTH.js';
5
+ import './chunk-3G7YABRA.js';
6
+ import './chunk-55JLUMAC.js';
7
+ import './chunk-IY6G67EF.js';
8
+ import './chunk-S5G3A7OZ.js';
9
+ import './chunk-PKBMQBKP.js';
@@ -1,7 +1,8 @@
1
1
  'use client';
2
- export { BookingWidget, BookingWidget_default as default } from '../chunk-AV4QAK5F.js';
3
- import '../chunk-MHGAZ3LL.js';
4
- import '../chunk-3E3PPSNR.js';
5
- import '../chunk-GK7TV7EK.js';
6
- import '../chunk-KHQ5GD6T.js';
2
+ export { BookingWidget, BookingWidget_default as default } from '../chunk-Z6PVFZRI.js';
3
+ import '../chunk-YGXWG54S.js';
4
+ import '../chunk-3G7YABRA.js';
5
+ import '../chunk-55JLUMAC.js';
6
+ import '../chunk-IY6G67EF.js';
7
+ import '../chunk-S5G3A7OZ.js';
7
8
  import '../chunk-PKBMQBKP.js';
@@ -1,6 +1,7 @@
1
1
  'use client';
2
- export { TestimonialSection } from '../chunk-7HPZSWS4.js';
2
+ export { TestimonialSection } from '../chunk-6CJGZFOU.js';
3
3
  import '../chunk-CAT235HY.js';
4
- import '../chunk-EDYHROQ7.js';
4
+ import '../chunk-NFRJTOTB.js';
5
5
  import '../chunk-MH2DSGC6.js';
6
+ import '../chunk-3G7YABRA.js';
6
7
  import '../chunk-PKBMQBKP.js';
@@ -1,16 +1,16 @@
1
1
  'use client';
2
- import { sonorFetch } from '../chunk-3E3PPSNR.js';
3
- import '../chunk-GK7TV7EK.js';
4
- import '../chunk-KHQ5GD6T.js';
2
+ import { getClientApiConfig } from '../chunk-3G7YABRA.js';
3
+ import { sonorFetch } from '../chunk-55JLUMAC.js';
4
+ import '../chunk-IY6G67EF.js';
5
+ import '../chunk-S5G3A7OZ.js';
5
6
  import '../chunk-PKBMQBKP.js';
6
7
  import { useState, useEffect } from 'react';
7
8
  import { jsx, jsxs } from 'react/jsx-runtime';
8
9
 
9
10
  // src/affiliates/api.ts
10
11
  function getApiConfig() {
11
- const apiUrl = typeof window !== "undefined" ? window.__SITE_KIT_API_URL__ || "https://api.sonor.io" : "https://api.sonor.io";
12
- const apiKey = typeof window !== "undefined" ? window.__SITE_KIT_API_KEY__ || "" : "";
13
- return { apiUrl, apiKey };
12
+ const { apiUrl, apiKey } = getClientApiConfig();
13
+ return { apiUrl, apiKey: apiKey ?? "" };
14
14
  }
15
15
  async function apiGet(endpoint) {
16
16
  const { apiUrl, apiKey } = getApiConfig();
@@ -1,13 +1,79 @@
1
1
  'use client';
2
- export { ContactTracking, useContactTracking } from '../chunk-P5GB6NEO.js';
3
- export { AnalyticsProvider, WebVitals, useAnalytics, useAnalyticsOptional, useTrackEvent } from '../chunk-CKW4HFJG.js';
2
+ export { AnalyticsProvider, WebVitals, useAnalytics, useAnalyticsOptional, useTrackEvent } from '../chunk-OCKGB734.js';
3
+ import { trackConversion } from '../chunk-LCDVPAMR.js';
4
4
  export { trackConversion, trackEvent } from '../chunk-LCDVPAMR.js';
5
- import '../chunk-24QZEO3Q.js';
5
+ import '../chunk-ZKADJNR2.js';
6
6
  import '../chunk-L2V5PUFN.js';
7
+ import '../chunk-5TM3WPCI.js';
7
8
  import '../chunk-GJWI74ZZ.js';
8
- export { isCrossOriginFrame, isFramed, isTopFrameSameOrigin } from '../chunk-43OCZ3JA.js';
9
+ export { isCrossOriginFrame, isFramed, isTopFrameSameOrigin } from '../chunk-CAH4Y4PY.js';
9
10
  import '../chunk-EKBEOXTH.js';
10
- import '../chunk-3E3PPSNR.js';
11
- import '../chunk-GK7TV7EK.js';
12
- import '../chunk-KHQ5GD6T.js';
11
+ import '../chunk-3G7YABRA.js';
12
+ import '../chunk-55JLUMAC.js';
13
+ import '../chunk-IY6G67EF.js';
14
+ import '../chunk-S5G3A7OZ.js';
13
15
  import '../chunk-PKBMQBKP.js';
16
+ import { useCallback, useEffect } from 'react';
17
+
18
+ function useContactTracking(options = {}) {
19
+ const { autoTrack = true, debug = false } = options;
20
+ const trackPhoneClick = useCallback((phoneNumber, metadata) => {
21
+ if (debug) console.log("[Analytics] Phone click:", phoneNumber);
22
+ trackConversion({
23
+ type: "phone_call",
24
+ metadata: {
25
+ phoneNumber: phoneNumber.replace(/\D/g, ""),
26
+ // Normalize to digits
27
+ rawNumber: phoneNumber,
28
+ ...metadata
29
+ }
30
+ });
31
+ }, [debug]);
32
+ const trackEmailClick = useCallback((email, metadata) => {
33
+ if (debug) console.log("[Analytics] Email click:", email);
34
+ trackConversion({
35
+ type: "email_click",
36
+ metadata: {
37
+ email,
38
+ ...metadata
39
+ }
40
+ });
41
+ }, [debug]);
42
+ useEffect(() => {
43
+ if (!autoTrack || typeof document === "undefined") return;
44
+ const handleClick = (e) => {
45
+ const target = e.target;
46
+ const anchor = target.closest("a");
47
+ if (!anchor) return;
48
+ const href = anchor.getAttribute("href");
49
+ if (!href) return;
50
+ if (href.startsWith("tel:")) {
51
+ const phone = href.replace("tel:", "").trim();
52
+ trackPhoneClick(phone, {
53
+ linkText: anchor.textContent?.trim(),
54
+ source: "auto"
55
+ });
56
+ } else if (href.startsWith("mailto:")) {
57
+ const email = href.replace("mailto:", "").split("?")[0].trim();
58
+ trackEmailClick(email, {
59
+ linkText: anchor.textContent?.trim(),
60
+ source: "auto"
61
+ });
62
+ }
63
+ };
64
+ document.addEventListener("click", handleClick, { capture: true });
65
+ return () => {
66
+ document.removeEventListener("click", handleClick, { capture: true });
67
+ };
68
+ }, [autoTrack, trackPhoneClick, trackEmailClick]);
69
+ return {
70
+ trackPhoneClick,
71
+ trackEmailClick
72
+ };
73
+ }
74
+ function ContactTracking({ debug = false }) {
75
+ useContactTracking({ autoTrack: true, debug });
76
+ return null;
77
+ }
78
+
79
+ export { ContactTracking, useContactTracking };
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- export { ArticleFAQ } from '../chunk-GKGSXUVQ.js';
3
2
  import { NewsletterShell } from '../chunk-SC4MZGWZ.js';
3
+ export { ArticleFAQ } from '../chunk-GKGSXUVQ.js';
4
4
  import { getAuthorSocialLinks, readingTimeMinutes } from '../chunk-FV2VD7WM.js';
5
5
  export { ClusterNavigation, ServiceCallout, ServiceCallouts } from '../chunk-FV2VD7WM.js';
6
6
  import '../chunk-GYF2ULVO.js';
@@ -15,7 +15,7 @@ import '../chunk-PKBMQBKP.js';
15
15
  import React, { useState, Suspense, useEffect } from 'react';
16
16
  import { jsx, jsxs } from 'react/jsx-runtime';
17
17
 
18
- var ManagedNewsletterForm = React.lazy(() => import('../ManagedNewsletterForm-3D2BK3KQ.js'));
18
+ var ManagedNewsletterForm = React.lazy(() => import('../ManagedNewsletterForm-KCN3BTKA.js'));
19
19
  function NewsletterWidget({
20
20
  title = "Subscribe to Our Newsletter",
21
21
  description = "Get the latest posts delivered straight to your inbox.",
@@ -2,7 +2,7 @@ import { readingTimeMinutes, ServiceCallouts, ClusterNavigation, getAuthorSocial
2
2
  export { ClusterNavigation } from '../chunk-FV2VD7WM.js';
3
3
  import { widgetStyle, widgetTitleStyle } from '../chunk-GYF2ULVO.js';
4
4
  import { resolvePublicationSiteUrl, addExternalLinkTargets } from '../chunk-L5UOHS6E.js';
5
- import { fetchArticleBySlug, fetchRelatedArticles, fetchArticleCategories, getTopicCluster } from '../chunk-PKGN32AU.js';
5
+ import { fetchArticleBySlug, fetchRelatedArticles, fetchArticleCategories, getTopicCluster } from '../chunk-XPTJRVL2.js';
6
6
  export { articleTableCss, wrapArticleTables } from '../chunk-Y3INC4QJ.js';
7
7
  import { resolveArticleArtwork, articleArtworkImageStyle } from '../chunk-QXMIKDOL.js';
8
8
  export { resolveArticleArtwork } from '../chunk-QXMIKDOL.js';
@@ -10,7 +10,7 @@ import { createPublicationRoutes, articleCategorySlug } from '../chunk-WMVK77ND.
10
10
  export { articleCategorySlug, createPublicationRoutes, resolveArticleUrl, resolvePublicationUrl } from '../chunk-WMVK77ND.js';
11
11
  import '../chunk-VWWITFWM.js';
12
12
  import { withSiteParam } from '../chunk-MJP63SSS.js';
13
- import '../chunk-X6F6SO4S.js';
13
+ import '../chunk-C7TLGL3R.js';
14
14
  import '../chunk-MH2DSGC6.js';
15
15
  import '../chunk-YVKRYQRG.js';
16
16
  import '../chunk-FESKKJAS.js';
@@ -133,7 +133,7 @@ async function Article({
133
133
  ...item,
134
134
  answer: addExternalLinkTargets(item.answer || "", siteUrlResolved)
135
135
  })) ?? faqRaw;
136
- const { ArticleViewTracker } = await import('../ArticleViewTracker-3DH53RSB.js');
136
+ const { ArticleViewTracker } = await import('../ArticleViewTracker-ATNVMT45.js');
137
137
  if (children) {
138
138
  return /* @__PURE__ */ jsxs(Fragment, { children: [
139
139
  /* @__PURE__ */ jsx(ArticleViewTracker, { slug: post.slug, site }),
@@ -1,10 +1,10 @@
1
- export { FEED_DEFAULT_ITEMS, NEWS_SITEMAP_MAX_URLS, NEWS_SITEMAP_WINDOW_MS, SEO_LIMITS, buildNewsSitemapXml, cdata, generateAllArticleSchemas, generateArticleCategoryMetadata, generateArticleListSchema, generateArticleMetadata, generateArticleSchema, generateArticleSitemap, generateArticleStaticParams, generateAtomFeed, generateAuthorPageMetadata, generateAuthorStaticParams, generateBreadcrumbSchema, generateCategoryStaticParams, generateClusterArticleSchema, generateClusterBreadcrumbSchema, generateClusterItemListSchema, generateClusterLandingSchema, generateClusterPageMetadata, generateFaqSchema, generateHowToSchema, generateNewsSitemap, generatePublicationMetadata, generateRssFeed, getAllArticleSlugs, getAllArticles, getAllAuthorSlugs, getArticle, getArticleCategories, getAuthorBySlug, getAuthorPosts, getClusterNavigation, getPostsByCategory, getRelatedInsights, getTopicCluster, getTopicClusters, recentNewsPosts, requireArticle, sanitizeExcerpt, validateArticleSeo, validateMetaDescription, validateSeoTitle } from '../chunk-PKGN32AU.js';
1
+ export { FEED_DEFAULT_ITEMS, NEWS_SITEMAP_MAX_URLS, NEWS_SITEMAP_WINDOW_MS, SEO_LIMITS, buildNewsSitemapXml, cdata, generateAllArticleSchemas, generateArticleCategoryMetadata, generateArticleListSchema, generateArticleMetadata, generateArticleSchema, generateArticleSitemap, generateArticleStaticParams, generateAtomFeed, generateAuthorPageMetadata, generateAuthorStaticParams, generateBreadcrumbSchema, generateCategoryStaticParams, generateClusterArticleSchema, generateClusterBreadcrumbSchema, generateClusterItemListSchema, generateClusterLandingSchema, generateClusterPageMetadata, generateFaqSchema, generateHowToSchema, generateNewsSitemap, generatePublicationMetadata, generateRssFeed, getAllArticleSlugs, getAllArticles, getAllAuthorSlugs, getArticle, getArticleCategories, getAuthorBySlug, getAuthorPosts, getClusterNavigation, getPostsByCategory, getRelatedInsights, getTopicCluster, getTopicClusters, recentNewsPosts, requireArticle, sanitizeExcerpt, validateArticleSeo, validateMetaDescription, validateSeoTitle } from '../chunk-XPTJRVL2.js';
2
2
  export { articleTableCss, wrapArticleTables } from '../chunk-Y3INC4QJ.js';
3
3
  export { authorEntityId, generateArticleAuthorNode, generateAuthorPersonSchema, generateAuthorSchema, resolveArticleArtwork, withArticleAuthorIdentity } from '../chunk-QXMIKDOL.js';
4
4
  export { articleCategorySlug, createPublicationRoutes, resolveArticleUrl, resolvePublicationUrl } from '../chunk-WMVK77ND.js';
5
5
  import '../chunk-VWWITFWM.js';
6
6
  import '../chunk-MJP63SSS.js';
7
- import '../chunk-X6F6SO4S.js';
7
+ import '../chunk-C7TLGL3R.js';
8
8
  import '../chunk-MH2DSGC6.js';
9
9
  import '../chunk-FESKKJAS.js';
10
10
  import '../chunk-A4CC4ZG3.js';
package/dist/brand.css CHANGED
@@ -13,7 +13,7 @@
13
13
  * --sk-primary-rgb: 84, 185, 72;
14
14
  * }
15
15
  *
16
- * All site-kit components (forms, commerce, booking, chat, popups, blog)
16
+ * All site-kit components (forms, booking, chat, popups, blog) and the kits that build on it (commerce-kit)
17
17
  * read from these tokens. Set them once and every widget matches your brand.
18
18
  */
19
19
 
@@ -4,7 +4,7 @@
4
4
  * The chat launcher and Echo conversation a site shows. SiteKitLayout mounts
5
5
  * it for you (its `chat` prop); `SiteChat` places it yourself the same way
6
6
  * (idle-deferred, gated like analytics), and `ChatWidget` is the widget
7
- * itself. `@sonordev/site-kit/engage` (deprecated) re-exports these.
7
+ * itself.
8
8
  */
9
9
  export { SiteChat, type SiteChatProps } from './SiteChat';
10
10
  export { ChatWidget, EchoChat, isChatEnabled } from './ChatWidget';
@@ -1,22 +1,53 @@
1
1
  'use client';
2
- export { SONOR_PUBLIC_ECHO_DEFAULTS, getEchoWidgetProps } from '../chunk-HODO5BX5.js';
3
- export { ChatWidget, DEFAULT_LAUNCHER_OFFSET_BOTTOM, EchoChat, chatLauncherStyles, isChatEnabled } from '../chunk-OOD6GMT4.js';
4
- export { SiteChat } from '../chunk-YCFW2OQO.js';
2
+ export { ChatWidget, DEFAULT_LAUNCHER_OFFSET_BOTTOM, EchoChat, chatLauncherStyles, isChatEnabled } from '../chunk-B7QRRLTU.js';
3
+ export { SiteChat } from '../chunk-AGJODJ4V.js';
5
4
  import '../chunk-6T6CQVNL.js';
6
5
  import '../chunk-JE4A5S4F.js';
7
6
  import '../chunk-27FISYK4.js';
8
- import '../chunk-CSN45MHO.js';
7
+ import '../chunk-3222QBUS.js';
9
8
  import '../chunk-Q6E4OPGG.js';
9
+ import '../chunk-5ROTTMBL.js';
10
10
  import '../chunk-C2FZBUSS.js';
11
11
  import '../chunk-5SQK3D53.js';
12
12
  import '../chunk-HW7B43E5.js';
13
13
  import '../chunk-NJCTQH2P.js';
14
14
  import '../chunk-S22FSH7C.js';
15
15
  import '../chunk-L2V5PUFN.js';
16
+ import '../chunk-5TM3WPCI.js';
16
17
  import '../chunk-GJWI74ZZ.js';
17
- import '../chunk-43OCZ3JA.js';
18
+ import '../chunk-CAH4Y4PY.js';
18
19
  import '../chunk-EKBEOXTH.js';
19
- import '../chunk-3E3PPSNR.js';
20
- import '../chunk-GK7TV7EK.js';
21
- import '../chunk-KHQ5GD6T.js';
20
+ import '../chunk-3G7YABRA.js';
21
+ import '../chunk-55JLUMAC.js';
22
+ import '../chunk-IY6G67EF.js';
23
+ import '../chunk-S5G3A7OZ.js';
22
24
  import '../chunk-PKBMQBKP.js';
25
+
26
+ // src/chat/echo-config.ts
27
+ var SONOR_PUBLIC_ECHO_DEFAULTS = {
28
+ signalUrl: "https://signal.sonor.io",
29
+ welcomeMessage: "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?",
30
+ suggestedQuestions: [
31
+ "What does Sonor do?",
32
+ "How does Signal AI work?",
33
+ "What are the pricing plans?",
34
+ "Can I migrate from HubSpot?",
35
+ "How does the SEO module work?"
36
+ ],
37
+ brandColor: "#2563eb",
38
+ // blue-600 (~5.2:1 on white, AA); overridden by --sk-primary CSS var or API brand_primary
39
+ assistantName: "Echo"
40
+ };
41
+ function getEchoWidgetProps(config = SONOR_PUBLIC_ECHO_DEFAULTS) {
42
+ return {
43
+ signal_enabled: true,
44
+ signal_url: config.signalUrl || SONOR_PUBLIC_ECHO_DEFAULTS.signalUrl,
45
+ welcome_message: config.welcomeMessage || SONOR_PUBLIC_ECHO_DEFAULTS.welcomeMessage,
46
+ suggested_questions: config.suggestedQuestions || SONOR_PUBLIC_ECHO_DEFAULTS.suggestedQuestions,
47
+ brand_color: config.brandColor || SONOR_PUBLIC_ECHO_DEFAULTS.brandColor,
48
+ assistant_name: config.assistantName || SONOR_PUBLIC_ECHO_DEFAULTS.assistantName,
49
+ assistant_avatar: config.assistantAvatar
50
+ };
51
+ }
52
+
53
+ export { SONOR_PUBLIC_ECHO_DEFAULTS, getEchoWidgetProps };
@@ -1,11 +1,13 @@
1
1
  'use client';
2
2
  import { readAgentSubmit, formToolAttributes } from './chunk-Q6E4OPGG.js';
3
+ import { readAnalyticsIdentity } from './chunk-5ROTTMBL.js';
3
4
  import { isFieldVisible, validateField, isFieldComplete, unseenControlValues } from './chunk-C2FZBUSS.js';
4
5
  import { normalizeFormConfig, DEFAULT_FORM_SUCCESS_MESSAGE } from './chunk-5SQK3D53.js';
5
6
  import { DEFAULT_HONEYPOT_FIELD } from './chunk-NJCTQH2P.js';
6
7
  import { onPageLeave } from './chunk-L2V5PUFN.js';
7
8
  import { uuid } from './chunk-GJWI74ZZ.js';
8
- import { sonorFetch, sonorBeacon } from './chunk-3E3PPSNR.js';
9
+ import { readPublishedApiConfig, getClientApiConfig } from './chunk-3G7YABRA.js';
10
+ import { sonorFetch, sonorBeacon } from './chunk-55JLUMAC.js';
9
11
  import { useRef, useCallback, useEffect, useState, useMemo } from 'react';
10
12
 
11
13
  // src/forms/field-interactions.ts
@@ -190,8 +192,7 @@ function useFormTracking({
190
192
  return;
191
193
  }
192
194
  const startTracking = async (sessionId) => {
193
- const apiUrl = window.__SITE_KIT_API_URL__;
194
- const apiKey = window.__SITE_KIT_API_KEY__;
195
+ const { apiUrl, apiKey } = readPublishedApiConfig();
195
196
  if (!apiUrl || !apiKey) {
196
197
  if (debug) console.error("[Forms] Missing API URL or API key");
197
198
  return null;
@@ -232,8 +233,7 @@ function useFormTracking({
232
233
  });
233
234
  const reportAbandon = (analyticsId) => {
234
235
  if (!analyticsId) return;
235
- const apiUrl = window.__SITE_KIT_API_URL__;
236
- const apiKey = window.__SITE_KIT_API_KEY__;
236
+ const { apiUrl, apiKey } = readPublishedApiConfig();
237
237
  if (!apiUrl || !apiKey) return;
238
238
  if (!claimAbandon(session)) return;
239
239
  const now = Date.now();
@@ -287,8 +287,7 @@ function useFormTracking({
287
287
  }, []);
288
288
  const trackStepChange = useCallback(async (step) => {
289
289
  if (!enabled) return;
290
- const apiUrl = window.__SITE_KIT_API_URL__;
291
- const apiKey = window.__SITE_KIT_API_KEY__;
290
+ const { apiUrl, apiKey } = readPublishedApiConfig();
292
291
  if (!apiUrl || !apiKey) {
293
292
  if (debug) console.error("[Forms] Missing API URL or API key");
294
293
  return;
@@ -331,8 +330,7 @@ function useFormTracking({
331
330
  if (!enabled) return;
332
331
  const session = sessionRef.current;
333
332
  if (session) markCompleted(session);
334
- const apiUrl = window.__SITE_KIT_API_URL__;
335
- const apiKey = window.__SITE_KIT_API_KEY__;
333
+ const { apiUrl, apiKey } = readPublishedApiConfig();
336
334
  if (!apiUrl || !apiKey) {
337
335
  if (debug) console.error("[Forms] Missing API URL or API key");
338
336
  return;
@@ -551,9 +549,7 @@ function readGa4Identity() {
551
549
 
552
550
  // src/forms/submitForm.ts
553
551
  function getApiConfig() {
554
- const apiUrl = typeof window !== "undefined" ? window.__SITE_KIT_API_URL__ || "https://api.sonor.io" : process.env.SONOR_API_URL || process.env.NEXT_PUBLIC_SONOR_API_URL || "https://api.sonor.io";
555
- const apiKey = typeof window !== "undefined" ? window.__SITE_KIT_API_KEY__ : void 0;
556
- return { apiUrl, apiKey };
552
+ return getClientApiConfig();
557
553
  }
558
554
  function getUTMParams() {
559
555
  if (typeof window === "undefined") return {};
@@ -582,6 +578,7 @@ async function submitForm({
582
578
  const honeypotFieldName = config.honeypot_field || DEFAULT_HONEYPOT_FIELD;
583
579
  const utm = getUTMParams();
584
580
  const ga4 = readGa4Identity();
581
+ const identity = readAnalyticsIdentity();
585
582
  const payload = {
586
583
  formId: config.id,
587
584
  form_id: config.id,
@@ -593,11 +590,11 @@ async function submitForm({
593
590
  pageUrl: typeof window !== "undefined" ? window.location.href : null,
594
591
  referrer: typeof document !== "undefined" ? document.referrer || null : null,
595
592
  userAgent: typeof navigator !== "undefined" ? navigator.userAgent : null,
596
- sessionId: typeof sessionStorage !== "undefined" ? sessionStorage.getItem("_sk_sid") : null,
593
+ sessionId: identity.sessionId,
597
594
  // Anonymous visitor id (_sk_vid) — the same id Analytics/Signal stamp on
598
595
  // page views, so the Sonor side can bind this lead to its browsing session
599
596
  // (page -> lead attribution). Sent on every submission; null pre-hydration.
600
- visitorId: typeof localStorage !== "undefined" ? localStorage.getItem("_sk_vid") : null,
597
+ visitorId: identity.visitorId,
601
598
  recaptchaToken: recaptchaToken || void 0,
602
599
  utmSource: utm.utm_source,
603
600
  utmMedium: utm.utm_medium,
@@ -706,12 +703,12 @@ function useForm(formIdOrSlug, options = {}) {
706
703
  }
707
704
  return;
708
705
  }
709
- const apiUrl = typeof window !== "undefined" ? window.__SITE_KIT_API_URL__ || "https://api.sonor.io" : "https://api.sonor.io";
706
+ const { apiUrl } = getClientApiConfig();
710
707
  async function fetchForm() {
711
708
  try {
712
709
  setIsLoading(true);
713
710
  setFetchError(null);
714
- const readApiKey = () => typeof window !== "undefined" ? window.__SITE_KIT_API_KEY__ : void 0;
711
+ const readApiKey = () => readPublishedApiConfig().apiKey;
715
712
  let apiKey = readApiKey();
716
713
  for (let i = 0; i < 15 && !apiKey; i++) {
717
714
  await new Promise((r) => setTimeout(r, 100));