@sonordev/site-kit 5.3.1 → 5.3.2

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 (236) hide show
  1. package/agent-manifest.json +1 -1
  2. package/dist/AnalyticsProvider-2XK54UZW.mjs +11 -0
  3. package/dist/{AnalyticsProvider-NA7EMJCA.mjs.map → AnalyticsProvider-2XK54UZW.mjs.map} +1 -1
  4. package/dist/AnalyticsProvider-PM7SOGOS.js +32 -0
  5. package/dist/{AnalyticsProvider-XE3ADUUH.js.map → AnalyticsProvider-PM7SOGOS.js.map} +1 -1
  6. package/dist/{BlogViewTracker-DVJHZ7CM.js → BlogViewTracker-3BIUF5TI.js} +6 -6
  7. package/dist/{BlogViewTracker-DVJHZ7CM.js.map → BlogViewTracker-3BIUF5TI.js.map} +1 -1
  8. package/dist/{BlogViewTracker-MKJYTTJQ.mjs → BlogViewTracker-KFUDRDQK.mjs} +5 -5
  9. package/dist/{BlogViewTracker-MKJYTTJQ.mjs.map → BlogViewTracker-KFUDRDQK.mjs.map} +1 -1
  10. package/dist/ChatWidget-4PHZHGG5.mjs +11 -0
  11. package/dist/{ChatWidget-BD4F4XLD.mjs.map → ChatWidget-4PHZHGG5.mjs.map} +1 -1
  12. package/dist/ChatWidget-7BYSGNO2.js +20 -0
  13. package/dist/{ChatWidget-BZ3KOSXG.js.map → ChatWidget-7BYSGNO2.js.map} +1 -1
  14. package/dist/EngageWidget-D6M6QWEC.mjs +9 -0
  15. package/dist/{EngageWidget-L7B6PCM3.mjs.map → EngageWidget-D6M6QWEC.mjs.map} +1 -1
  16. package/dist/EngageWidget-Q4ITKTMJ.js +18 -0
  17. package/dist/{EngageWidget-JPP6EDCJ.js.map → EngageWidget-Q4ITKTMJ.js.map} +1 -1
  18. package/dist/{FileField-7WPRONDS.mjs → FileField-PQQDX4IR.mjs} +5 -5
  19. package/dist/{FileField-7WPRONDS.mjs.map → FileField-PQQDX4IR.mjs.map} +1 -1
  20. package/dist/{FileField-GHT7444Y.js → FileField-YBBIJOCK.js} +6 -6
  21. package/dist/{FileField-GHT7444Y.js.map → FileField-YBBIJOCK.js.map} +1 -1
  22. package/dist/{FormSpotlight-WZVS6HHR.mjs → FormSpotlight-7TIIWFTP.mjs} +3 -3
  23. package/dist/{FormSpotlight-WZVS6HHR.mjs.map → FormSpotlight-7TIIWFTP.mjs.map} +1 -1
  24. package/dist/{FormSpotlight-BB2IB7IX.js → FormSpotlight-WUN24F3P.js} +15 -15
  25. package/dist/{FormSpotlight-BB2IB7IX.js.map → FormSpotlight-WUN24F3P.js.map} +1 -1
  26. package/dist/{FormStage-FLBLXENZ.js → FormStage-CM7OVLUT.js} +13 -13
  27. package/dist/{FormStage-FLBLXENZ.js.map → FormStage-CM7OVLUT.js.map} +1 -1
  28. package/dist/{FormStage-Y3NHHMV2.mjs → FormStage-TFN2GIBO.mjs} +3 -3
  29. package/dist/{FormStage-Y3NHHMV2.mjs.map → FormStage-TFN2GIBO.mjs.map} +1 -1
  30. package/dist/ManagedForm-N63YGVNY.js +23 -0
  31. package/dist/{ManagedForm-2OPCHDNJ.js.map → ManagedForm-N63YGVNY.js.map} +1 -1
  32. package/dist/ManagedForm-ZUXLHEQU.mjs +14 -0
  33. package/dist/{ManagedForm-AJM6D4SK.mjs.map → ManagedForm-ZUXLHEQU.mjs.map} +1 -1
  34. package/dist/{ManagedNewsletterForm-MJI2JXIB.mjs → ManagedNewsletterForm-4AVKTZ2A.mjs} +7 -7
  35. package/dist/{ManagedNewsletterForm-MJI2JXIB.mjs.map → ManagedNewsletterForm-4AVKTZ2A.mjs.map} +1 -1
  36. package/dist/{ManagedNewsletterForm-L2ZHJ7F4.js → ManagedNewsletterForm-PIVJTU5L.js} +8 -8
  37. package/dist/{ManagedNewsletterForm-L2ZHJ7F4.js.map → ManagedNewsletterForm-PIVJTU5L.js.map} +1 -1
  38. package/dist/{SignalCore-G2VM7NUP.js → SignalCore-2M5TISM7.js} +11 -11
  39. package/dist/{SignalCore-G2VM7NUP.js.map → SignalCore-2M5TISM7.js.map} +1 -1
  40. package/dist/{SignalCore-23YDDSWO.mjs → SignalCore-LT4NCPOR.mjs} +5 -5
  41. package/dist/{SignalCore-23YDDSWO.mjs.map → SignalCore-LT4NCPOR.mjs.map} +1 -1
  42. package/dist/SitemapSync-7OBOJG2L.js +18 -0
  43. package/dist/{SitemapSync-T2N3TCWF.js.map → SitemapSync-7OBOJG2L.js.map} +1 -1
  44. package/dist/SitemapSync-G3OLECFI.mjs +9 -0
  45. package/dist/{SitemapSync-YLWMU6J3.mjs.map → SitemapSync-G3OLECFI.mjs.map} +1 -1
  46. package/dist/SitemapSync.d.ts.map +1 -1
  47. package/dist/analytics/AnalyticsProvider.d.ts +11 -1
  48. package/dist/analytics/AnalyticsProvider.d.ts.map +1 -1
  49. package/dist/analytics/WebVitals.d.ts +7 -1
  50. package/dist/analytics/WebVitals.d.ts.map +1 -1
  51. package/dist/analytics/index.d.ts +1 -0
  52. package/dist/analytics/index.d.ts.map +1 -1
  53. package/dist/analytics/index.js +25 -12
  54. package/dist/analytics/index.mjs +6 -5
  55. package/dist/analytics/send-gate.d.ts +119 -0
  56. package/dist/analytics/send-gate.d.ts.map +1 -0
  57. package/dist/analytics/send-gate.test.d.ts +20 -0
  58. package/dist/analytics/send-gate.test.d.ts.map +1 -0
  59. package/dist/blog/index.js +20 -20
  60. package/dist/blog/index.mjs +3 -3
  61. package/dist/blog/server-ui.js +14 -14
  62. package/dist/blog/server-ui.mjs +2 -2
  63. package/dist/blog/types.d.ts +3 -0
  64. package/dist/blog/types.d.ts.map +1 -1
  65. package/dist/{chunk-EDZWNCSE.js → chunk-3EPMDPWI.js} +2 -2
  66. package/dist/{chunk-EDZWNCSE.js.map → chunk-3EPMDPWI.js.map} +1 -1
  67. package/dist/{chunk-7UPPYERC.mjs → chunk-42F5EK24.mjs} +4 -4
  68. package/dist/{chunk-7UPPYERC.mjs.map → chunk-42F5EK24.mjs.map} +1 -1
  69. package/dist/{chunk-5HMN3FXL.js → chunk-4DE2KJ7R.js} +8 -8
  70. package/dist/{chunk-5HMN3FXL.js.map → chunk-4DE2KJ7R.js.map} +1 -1
  71. package/dist/{chunk-DTX4R45S.js → chunk-5BZDHZCN.js} +4 -4
  72. package/dist/{chunk-DTX4R45S.js.map → chunk-5BZDHZCN.js.map} +1 -1
  73. package/dist/{chunk-I72AUITZ.mjs → chunk-67CHHDBL.mjs} +3 -3
  74. package/dist/{chunk-I72AUITZ.mjs.map → chunk-67CHHDBL.mjs.map} +1 -1
  75. package/dist/{chunk-UJOEN4X6.js → chunk-6AZTRTCG.js} +15 -15
  76. package/dist/{chunk-UJOEN4X6.js.map → chunk-6AZTRTCG.js.map} +1 -1
  77. package/dist/{chunk-PA5ZVCW2.mjs → chunk-6QABCGM6.mjs} +3 -3
  78. package/dist/{chunk-PA5ZVCW2.mjs.map → chunk-6QABCGM6.mjs.map} +1 -1
  79. package/dist/{chunk-77HT6TYK.mjs → chunk-6VG65AIA.mjs} +3 -3
  80. package/dist/{chunk-77HT6TYK.mjs.map → chunk-6VG65AIA.mjs.map} +1 -1
  81. package/dist/{chunk-2MPOO6QJ.js → chunk-757HXAYX.js} +3 -3
  82. package/dist/{chunk-2MPOO6QJ.js.map → chunk-757HXAYX.js.map} +1 -1
  83. package/dist/{chunk-ZMFJXFUY.js → chunk-A3NNUKFA.js} +3 -3
  84. package/dist/{chunk-ZMFJXFUY.js.map → chunk-A3NNUKFA.js.map} +1 -1
  85. package/dist/{chunk-NW5CBNRU.mjs → chunk-AVM4OZHR.mjs} +3 -3
  86. package/dist/{chunk-NW5CBNRU.mjs.map → chunk-AVM4OZHR.mjs.map} +1 -1
  87. package/dist/{chunk-FH4LLJFL.mjs → chunk-AXAIUCSF.mjs} +9 -8
  88. package/dist/chunk-AXAIUCSF.mjs.map +1 -0
  89. package/dist/{chunk-AKQA5ZYZ.mjs → chunk-CQUA2AUA.mjs} +3 -3
  90. package/dist/{chunk-AKQA5ZYZ.mjs.map → chunk-CQUA2AUA.mjs.map} +1 -1
  91. package/dist/chunk-D37M7MIH.js +8 -0
  92. package/dist/{chunk-TMQKZ4DO.js.map → chunk-D37M7MIH.js.map} +1 -1
  93. package/dist/{chunk-ISKJLXB4.mjs → chunk-DVH3JHZ3.mjs} +4 -4
  94. package/dist/{chunk-ISKJLXB4.mjs.map → chunk-DVH3JHZ3.mjs.map} +1 -1
  95. package/dist/{chunk-LHD45PGP.js → chunk-DYKFC7WY.js} +8 -8
  96. package/dist/{chunk-LHD45PGP.js.map → chunk-DYKFC7WY.js.map} +1 -1
  97. package/dist/{chunk-X4PL7R63.mjs → chunk-DZDWBQKA.mjs} +3 -3
  98. package/dist/{chunk-X4PL7R63.mjs.map → chunk-DZDWBQKA.mjs.map} +1 -1
  99. package/dist/{chunk-GTK3CGWF.js → chunk-E33HJMRP.js} +6 -6
  100. package/dist/{chunk-GTK3CGWF.js.map → chunk-E33HJMRP.js.map} +1 -1
  101. package/dist/{chunk-4S7BHFGT.js → chunk-FDVE56JS.js} +3 -3
  102. package/dist/{chunk-4S7BHFGT.js.map → chunk-FDVE56JS.js.map} +1 -1
  103. package/dist/{chunk-SHZXSIRH.js → chunk-FFJVQWKO.js} +4 -4
  104. package/dist/{chunk-SHZXSIRH.js.map → chunk-FFJVQWKO.js.map} +1 -1
  105. package/dist/{chunk-HIV5YK5G.js → chunk-G3YUSRCL.js} +4 -4
  106. package/dist/{chunk-HIV5YK5G.js.map → chunk-G3YUSRCL.js.map} +1 -1
  107. package/dist/{chunk-APL44ZVK.js → chunk-GFNXWS3I.js} +5 -5
  108. package/dist/{chunk-APL44ZVK.js.map → chunk-GFNXWS3I.js.map} +1 -1
  109. package/dist/{chunk-GPH3VVLP.js → chunk-GPNBBUEN.js} +3 -3
  110. package/dist/{chunk-GPH3VVLP.js.map → chunk-GPNBBUEN.js.map} +1 -1
  111. package/dist/{chunk-VGX6G3TA.mjs → chunk-HDQTZAGE.mjs} +3 -3
  112. package/dist/{chunk-VGX6G3TA.mjs.map → chunk-HDQTZAGE.mjs.map} +1 -1
  113. package/dist/{chunk-COAVBUMS.mjs → chunk-HVFXFPUJ.mjs} +3 -3
  114. package/dist/{chunk-COAVBUMS.mjs.map → chunk-HVFXFPUJ.mjs.map} +1 -1
  115. package/dist/{chunk-XR47TOGW.mjs → chunk-JSLYNYTB.mjs} +3 -3
  116. package/dist/{chunk-XR47TOGW.mjs.map → chunk-JSLYNYTB.mjs.map} +1 -1
  117. package/dist/{chunk-W47J6ZZG.mjs → chunk-JTO3K5B7.mjs} +4 -4
  118. package/dist/{chunk-W47J6ZZG.mjs.map → chunk-JTO3K5B7.mjs.map} +1 -1
  119. package/dist/{chunk-QG7WHAGD.js → chunk-K37JPEQW.js} +15 -15
  120. package/dist/{chunk-QG7WHAGD.js.map → chunk-K37JPEQW.js.map} +1 -1
  121. package/dist/{chunk-DBJRJ2Q2.mjs → chunk-KOP3DPIR.mjs} +4 -4
  122. package/dist/{chunk-DBJRJ2Q2.mjs.map → chunk-KOP3DPIR.mjs.map} +1 -1
  123. package/dist/{chunk-LFJRMY4V.js → chunk-KPFPSOYS.js} +12 -12
  124. package/dist/{chunk-LFJRMY4V.js.map → chunk-KPFPSOYS.js.map} +1 -1
  125. package/dist/{chunk-KP56C66Z.js → chunk-M7FWXEXC.js} +126 -188
  126. package/dist/chunk-M7FWXEXC.js.map +1 -0
  127. package/dist/{chunk-UYR22S67.js → chunk-MANX6422.js} +7 -7
  128. package/dist/{chunk-UYR22S67.js.map → chunk-MANX6422.js.map} +1 -1
  129. package/dist/{chunk-WZZYTFDV.mjs → chunk-N3C323NY.mjs} +8 -3
  130. package/dist/chunk-N3C323NY.mjs.map +1 -0
  131. package/dist/{chunk-R4PFWVGZ.mjs → chunk-NSLYY62T.mjs} +4 -4
  132. package/dist/{chunk-R4PFWVGZ.mjs.map → chunk-NSLYY62T.mjs.map} +1 -1
  133. package/dist/chunk-NVSWTDWU.mjs +25 -0
  134. package/dist/chunk-NVSWTDWU.mjs.map +1 -0
  135. package/dist/{chunk-WD57YWY5.mjs → chunk-OC6PU7U2.mjs} +3 -3
  136. package/dist/{chunk-WD57YWY5.mjs.map → chunk-OC6PU7U2.mjs.map} +1 -1
  137. package/dist/{chunk-2VQ5YXOD.js → chunk-OIJ435IZ.js} +18 -18
  138. package/dist/{chunk-2VQ5YXOD.js.map → chunk-OIJ435IZ.js.map} +1 -1
  139. package/dist/chunk-OL2QBWAU.js +29 -0
  140. package/dist/chunk-OL2QBWAU.js.map +1 -0
  141. package/dist/chunk-OUERH2T4.mjs +6 -0
  142. package/dist/{chunk-HRQ4367C.mjs.map → chunk-OUERH2T4.mjs.map} +1 -1
  143. package/dist/{chunk-VLR2UYO4.js → chunk-PEEQMI7U.js} +12 -11
  144. package/dist/chunk-PEEQMI7U.js.map +1 -0
  145. package/dist/{chunk-47566YF4.js → chunk-PZXKFHPO.js} +14 -14
  146. package/dist/{chunk-47566YF4.js.map → chunk-PZXKFHPO.js.map} +1 -1
  147. package/dist/{chunk-SI7R3IJX.mjs → chunk-QZ54OCWD.mjs} +7 -7
  148. package/dist/{chunk-SI7R3IJX.mjs.map → chunk-QZ54OCWD.mjs.map} +1 -1
  149. package/dist/{chunk-GQTSQR63.js → chunk-R3LYTIVN.js} +10 -5
  150. package/dist/chunk-R3LYTIVN.js.map +1 -0
  151. package/dist/{chunk-26JXNW7B.mjs → chunk-RO55G3OA.mjs} +2 -2
  152. package/dist/{chunk-26JXNW7B.mjs.map → chunk-RO55G3OA.mjs.map} +1 -1
  153. package/dist/{chunk-4IMZ45YA.mjs → chunk-TS3N3LGZ.mjs} +4 -4
  154. package/dist/{chunk-4IMZ45YA.mjs.map → chunk-TS3N3LGZ.mjs.map} +1 -1
  155. package/dist/{chunk-TAIGHH5J.js → chunk-W23TMUKB.js} +9 -9
  156. package/dist/{chunk-TAIGHH5J.js.map → chunk-W23TMUKB.js.map} +1 -1
  157. package/dist/{chunk-5TGSM5EQ.js → chunk-XQZTOWS3.js} +14 -14
  158. package/dist/{chunk-5TGSM5EQ.js.map → chunk-XQZTOWS3.js.map} +1 -1
  159. package/dist/{chunk-GM5E6R5W.mjs → chunk-XW5KNCWJ.mjs} +3 -3
  160. package/dist/{chunk-GM5E6R5W.mjs.map → chunk-XW5KNCWJ.mjs.map} +1 -1
  161. package/dist/{chunk-AJBJH3BA.mjs → chunk-Y7SRO7MJ.mjs} +127 -189
  162. package/dist/chunk-Y7SRO7MJ.mjs.map +1 -0
  163. package/dist/{chunk-AVPMSJCQ.js → chunk-Z7K5AMCE.js} +4 -4
  164. package/dist/{chunk-AVPMSJCQ.js.map → chunk-Z7K5AMCE.js.map} +1 -1
  165. package/dist/{chunk-4HL6CAZ7.mjs → chunk-ZKR5AJV5.mjs} +4 -4
  166. package/dist/{chunk-4HL6CAZ7.mjs.map → chunk-ZKR5AJV5.mjs.map} +1 -1
  167. package/dist/{chunk-DN6A6KXH.mjs → chunk-ZOJ3TLO5.mjs} +3 -3
  168. package/dist/{chunk-DN6A6KXH.mjs.map → chunk-ZOJ3TLO5.mjs.map} +1 -1
  169. package/dist/cli/index.js +3 -3
  170. package/dist/cli/index.mjs +1 -1
  171. package/dist/client/index.js +4 -4
  172. package/dist/client/index.mjs +3 -3
  173. package/dist/commerce/index.js +58 -57
  174. package/dist/commerce/index.mjs +7 -6
  175. package/dist/engage/index.js +10 -10
  176. package/dist/engage/index.mjs +7 -7
  177. package/dist/fleet/index.js +8 -8
  178. package/dist/fleet/index.mjs +4 -4
  179. package/dist/forms/index.js +16 -16
  180. package/dist/forms/index.mjs +9 -9
  181. package/dist/forms/server.js +10 -10
  182. package/dist/forms/server.mjs +8 -8
  183. package/dist/forms/static.js +7 -7
  184. package/dist/forms/static.mjs +6 -6
  185. package/dist/images/index.js +11 -11
  186. package/dist/images/index.mjs +4 -4
  187. package/dist/index.js +65 -64
  188. package/dist/index.js.map +1 -1
  189. package/dist/index.mjs +11 -10
  190. package/dist/index.mjs.map +1 -1
  191. package/dist/layout/SiteKitClientProviders.d.ts.map +1 -1
  192. package/dist/layout/client.d.ts.map +1 -1
  193. package/dist/layout/client.js +8 -8
  194. package/dist/layout/client.mjs +7 -7
  195. package/dist/layout/index.js +10 -10
  196. package/dist/layout/index.mjs +8 -8
  197. package/dist/layout/types.d.ts +16 -0
  198. package/dist/layout/types.d.ts.map +1 -1
  199. package/dist/maps/index.js +5 -5
  200. package/dist/maps/index.mjs +3 -3
  201. package/dist/search/index.js +4 -4
  202. package/dist/search/index.mjs +3 -3
  203. package/dist/seo/client.js +6 -5
  204. package/dist/seo/client.mjs +5 -4
  205. package/dist/seo/index.js +6 -5
  206. package/dist/seo/index.js.map +1 -1
  207. package/dist/seo/index.mjs +5 -4
  208. package/dist/seo/index.mjs.map +1 -1
  209. package/dist/server/index.js +3 -3
  210. package/dist/server/index.mjs +2 -2
  211. package/dist/shared/frame.d.ts +71 -0
  212. package/dist/shared/frame.d.ts.map +1 -0
  213. package/dist/shared/version.d.ts +1 -1
  214. package/dist/signal/index.js +11 -11
  215. package/dist/signal/index.mjs +2 -2
  216. package/dist/sync/index.js +16 -16
  217. package/dist/sync/index.mjs +4 -4
  218. package/package.json +1 -1
  219. package/dist/AnalyticsProvider-NA7EMJCA.mjs +0 -10
  220. package/dist/AnalyticsProvider-XE3ADUUH.js +0 -31
  221. package/dist/ChatWidget-BD4F4XLD.mjs +0 -11
  222. package/dist/ChatWidget-BZ3KOSXG.js +0 -20
  223. package/dist/EngageWidget-JPP6EDCJ.js +0 -18
  224. package/dist/EngageWidget-L7B6PCM3.mjs +0 -9
  225. package/dist/ManagedForm-2OPCHDNJ.js +0 -23
  226. package/dist/ManagedForm-AJM6D4SK.mjs +0 -14
  227. package/dist/SitemapSync-T2N3TCWF.js +0 -17
  228. package/dist/SitemapSync-YLWMU6J3.mjs +0 -8
  229. package/dist/chunk-AJBJH3BA.mjs.map +0 -1
  230. package/dist/chunk-FH4LLJFL.mjs.map +0 -1
  231. package/dist/chunk-GQTSQR63.js.map +0 -1
  232. package/dist/chunk-HRQ4367C.mjs +0 -6
  233. package/dist/chunk-KP56C66Z.js.map +0 -1
  234. package/dist/chunk-TMQKZ4DO.js +0 -8
  235. package/dist/chunk-VLR2UYO4.js.map +0 -1
  236. package/dist/chunk-WZZYTFDV.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/affiliates/api.ts","../src/affiliates/useAffiliates.ts","../src/affiliates/AffiliatesWidget.tsx"],"names":["getTrackingUrl"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit/affiliates - Affiliates API\n * \n * API functions for fetching affiliate data for client sites.\n * All data goes through Portal API with API key auth - never Supabase directly.\n */\n\nimport { sonorFetch } from '../shared/sonorFetch'\nimport type { Affiliate, AffiliateWithOffers, FetchAffiliatesOptions } from './types'\n\n// ============================================\n// API Config Helpers\n// ============================================\n\nfunction getApiConfig() {\n const apiUrl = typeof window !== 'undefined' \n ? (window as any).__SITE_KIT_API_URL__ || 'https://api.sonor.io'\n : 'https://api.sonor.io'\n const apiKey = typeof window !== 'undefined' \n ? (window as any).__SITE_KIT_API_KEY__ || ''\n : ''\n return { apiUrl, apiKey }\n}\n\nasync function apiGet<T>(endpoint: string): Promise<T | null> {\n const { apiUrl, apiKey } = getApiConfig()\n \n if (!apiKey) {\n console.error('[Affiliates] No API key configured')\n return null\n }\n \n try {\n // Route through sonorFetch (the canonical transport) — NOT bare fetch — so a\n // stale build-time seed token is transparently refreshed and a 401 triggers\n // one refresh+retry. The credential goes via options.apiKey, never a header:\n // sonorFetch injects the freshest token as x-api-key; a hand-set header would\n // pin the stale seed and 401.\n const response = await sonorFetch(\n `${apiUrl}${endpoint}`,\n { method: 'GET' },\n { apiKey, retries: 0 },\n )\n\n if (!response.ok) {\n console.error(`[Affiliates] API error: ${response.statusText}`)\n return null\n }\n \n return await response.json()\n } catch (error) {\n console.error('[Affiliates] Network error:', error)\n return null\n }\n}\n\n// ============================================\n// Fetch Affiliates\n// ============================================\n\n/**\n * Fetch all active affiliates for the project\n * \n * @example\n * ```ts\n * const affiliates = await fetchAffiliates()\n * ```\n */\nexport async function fetchAffiliates(\n options: FetchAffiliatesOptions = {}\n): Promise<AffiliateWithOffers[]> {\n const result = await apiGet<{ affiliates: AffiliateWithOffers[] }>(\n '/api/public/affiliates'\n )\n \n return result?.affiliates || []\n}\n\n/**\n * Build a tracking URL for an affiliate offer\n * When clicked, this redirects through our tracking endpoint and then to the destination\n * \n * @example\n * ```ts\n * const trackingUrl = getTrackingUrl(affiliate.id, offer.id)\n * // Returns: https://api.sonor.io/a/{affiliateId}/{offerId}\n * ```\n */\nexport function getTrackingUrl(affiliateId: string, offerId: string): string {\n const { apiUrl } = getApiConfig()\n return `${apiUrl}/a/${affiliateId}/${offerId}`\n}\n","/**\n * @sonordev/site-kit/affiliates - useAffiliates Hook\n * \n * React hook for fetching and displaying affiliates on client sites.\n */\n\n'use client'\n\nimport { useState, useEffect } from 'react'\nimport type { AffiliateWithOffers } from './types'\nimport { fetchAffiliates, getTrackingUrl } from './api'\n\nexport interface UseAffiliatesResult {\n affiliates: AffiliateWithOffers[]\n isLoading: boolean\n error: string | null\n getTrackingUrl: (affiliateId: string, offerId: string) => string\n}\n\n/**\n * Hook to fetch affiliates for display on client sites\n * \n * @example\n * ```tsx\n * function AffiliatesSection() {\n * const { affiliates, isLoading } = useAffiliates()\n * \n * if (isLoading) return <div>Loading...</div>\n * \n * return (\n * <div className=\"grid grid-cols-3 gap-4\">\n * {affiliates.map(affiliate => (\n * <AffiliateCard key={affiliate.id} affiliate={affiliate} />\n * ))}\n * </div>\n * )\n * }\n * ```\n */\nexport function useAffiliates(): UseAffiliatesResult {\n const [affiliates, setAffiliates] = useState<AffiliateWithOffers[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n\n useEffect(() => {\n async function load() {\n try {\n setIsLoading(true)\n setError(null)\n const data = await fetchAffiliates()\n setAffiliates(data)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load affiliates')\n } finally {\n setIsLoading(false)\n }\n }\n \n load()\n }, [])\n\n return {\n affiliates,\n isLoading,\n error,\n getTrackingUrl,\n }\n}\n","/**\n * @sonordev/site-kit/affiliates - AffiliatesWidget Component\n * \n * Unstyled, headless component for displaying affiliates.\n * Client sites can wrap this or use it directly with their own styling.\n */\n\n'use client'\n\nimport React from 'react'\nimport { useAffiliates } from './useAffiliates'\nimport type { AffiliateWithOffers, AffiliateOffer } from './types'\n\n// ============================================\n// Affiliate Card (Unstyled)\n// ============================================\n\nexport interface AffiliateCardProps {\n affiliate: AffiliateWithOffers\n className?: string\n /** Optional custom render for the logo */\n renderLogo?: (affiliate: AffiliateWithOffers) => React.ReactNode\n /** Show offers as links below the card */\n showOffers?: boolean\n}\n\n/**\n * Single affiliate card - unstyled, bring your own CSS\n * \n * @example\n * ```tsx\n * <AffiliateCard \n * affiliate={affiliate}\n * className=\"p-4 bg-white rounded-lg shadow\"\n * showOffers\n * />\n * ```\n */\nexport function AffiliateCard({\n affiliate,\n className = '',\n renderLogo,\n showOffers = false,\n}: AffiliateCardProps) {\n const { getTrackingUrl } = useAffiliates()\n \n const defaultLogo = (\n <div data-affiliate-logo className=\"affiliate-logo\">\n {affiliate.logo_url ? (\n <img \n src={affiliate.logo_url} \n alt={affiliate.name}\n loading=\"lazy\"\n />\n ) : (\n <span>{affiliate.name.charAt(0)}</span>\n )}\n </div>\n )\n\n return (\n <div className={className} data-affiliate-card data-affiliate-id={affiliate.id}>\n {/* Logo */}\n {renderLogo ? renderLogo(affiliate) : defaultLogo}\n \n {/* Name */}\n <div data-affiliate-name className=\"affiliate-name\">\n {affiliate.name}\n </div>\n \n {/* Website link */}\n {affiliate.website_url && (\n <a \n href={affiliate.website_url}\n target=\"_blank\"\n rel=\"noopener noreferrer sponsored\"\n data-affiliate-website\n className=\"affiliate-website\"\n >\n Visit Website\n </a>\n )}\n \n {/* Offers */}\n {showOffers && affiliate.offers && affiliate.offers.length > 0 && (\n <div data-affiliate-offers className=\"affiliate-offers\">\n {affiliate.offers.map(offer => (\n <a\n key={offer.id}\n href={getTrackingUrl(affiliate.id, offer.id)}\n target=\"_blank\"\n rel=\"noopener noreferrer sponsored\"\n data-affiliate-offer\n data-offer-id={offer.id}\n className=\"affiliate-offer\"\n >\n {offer.name}\n </a>\n ))}\n </div>\n )}\n </div>\n )\n}\n\n// ============================================\n// Affiliates Grid (Unstyled)\n// ============================================\n\nexport interface AffiliatesWidgetProps {\n className?: string\n /** Custom loading component */\n loadingComponent?: React.ReactNode\n /** Custom empty state component */\n emptyComponent?: React.ReactNode\n /** Custom error component */\n errorComponent?: React.ReactNode\n /** Show offers on each card */\n showOffers?: boolean\n /** Custom render function for each affiliate */\n renderAffiliate?: (affiliate: AffiliateWithOffers) => React.ReactNode\n /** Maximum number to display */\n limit?: number\n}\n\n/**\n * Display a grid of affiliates - unstyled, bring your own CSS\n * \n * @example\n * ```tsx\n * // Basic usage\n * <AffiliatesWidget className=\"grid grid-cols-3 gap-4\" />\n * \n * // With custom rendering\n * <AffiliatesWidget\n * renderAffiliate={(affiliate) => (\n * <MyCustomCard key={affiliate.id} data={affiliate} />\n * )}\n * />\n * ```\n */\nexport function AffiliatesWidget({\n className = '',\n loadingComponent,\n emptyComponent,\n errorComponent,\n showOffers = false,\n renderAffiliate,\n limit,\n}: AffiliatesWidgetProps) {\n const { affiliates, isLoading, error, getTrackingUrl } = useAffiliates()\n \n if (isLoading) {\n return loadingComponent || <div data-affiliates-loading>Loading affiliates...</div>\n }\n \n if (error) {\n return errorComponent || <div data-affiliates-error>{error}</div>\n }\n \n const displayAffiliates = limit ? affiliates.slice(0, limit) : affiliates\n \n if (displayAffiliates.length === 0) {\n return emptyComponent || null\n }\n \n return (\n <div className={className} data-affiliates-widget>\n {displayAffiliates.map(affiliate => \n renderAffiliate \n ? renderAffiliate(affiliate)\n : <AffiliateCard \n key={affiliate.id} \n affiliate={affiliate} \n showOffers={showOffers}\n />\n )}\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/affiliates/api.ts","../src/affiliates/useAffiliates.ts","../src/affiliates/AffiliatesWidget.tsx"],"names":["getTrackingUrl"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit/affiliates - Affiliates API\n * \n * API functions for fetching affiliate data for client sites.\n * All data goes through Portal API with API key auth - never Supabase directly.\n */\n\nimport { sonorFetch } from '../shared/sonorFetch'\nimport type { Affiliate, AffiliateWithOffers, FetchAffiliatesOptions } from './types'\n\n// ============================================\n// API Config Helpers\n// ============================================\n\nfunction getApiConfig() {\n const apiUrl = typeof window !== 'undefined' \n ? (window as any).__SITE_KIT_API_URL__ || 'https://api.sonor.io'\n : 'https://api.sonor.io'\n const apiKey = typeof window !== 'undefined' \n ? (window as any).__SITE_KIT_API_KEY__ || ''\n : ''\n return { apiUrl, apiKey }\n}\n\nasync function apiGet<T>(endpoint: string): Promise<T | null> {\n const { apiUrl, apiKey } = getApiConfig()\n \n if (!apiKey) {\n console.error('[Affiliates] No API key configured')\n return null\n }\n \n try {\n // Route through sonorFetch (the canonical transport) — NOT bare fetch — so a\n // stale build-time seed token is transparently refreshed and a 401 triggers\n // one refresh+retry. The credential goes via options.apiKey, never a header:\n // sonorFetch injects the freshest token as x-api-key; a hand-set header would\n // pin the stale seed and 401.\n const response = await sonorFetch(\n `${apiUrl}${endpoint}`,\n { method: 'GET' },\n { apiKey, retries: 0 },\n )\n\n if (!response.ok) {\n console.error(`[Affiliates] API error: ${response.statusText}`)\n return null\n }\n \n return await response.json()\n } catch (error) {\n console.error('[Affiliates] Network error:', error)\n return null\n }\n}\n\n// ============================================\n// Fetch Affiliates\n// ============================================\n\n/**\n * Fetch all active affiliates for the project\n * \n * @example\n * ```ts\n * const affiliates = await fetchAffiliates()\n * ```\n */\nexport async function fetchAffiliates(\n options: FetchAffiliatesOptions = {}\n): Promise<AffiliateWithOffers[]> {\n const result = await apiGet<{ affiliates: AffiliateWithOffers[] }>(\n '/api/public/affiliates'\n )\n \n return result?.affiliates || []\n}\n\n/**\n * Build a tracking URL for an affiliate offer\n * When clicked, this redirects through our tracking endpoint and then to the destination\n * \n * @example\n * ```ts\n * const trackingUrl = getTrackingUrl(affiliate.id, offer.id)\n * // Returns: https://api.sonor.io/a/{affiliateId}/{offerId}\n * ```\n */\nexport function getTrackingUrl(affiliateId: string, offerId: string): string {\n const { apiUrl } = getApiConfig()\n return `${apiUrl}/a/${affiliateId}/${offerId}`\n}\n","/**\n * @sonordev/site-kit/affiliates - useAffiliates Hook\n * \n * React hook for fetching and displaying affiliates on client sites.\n */\n\n'use client'\n\nimport { useState, useEffect } from 'react'\nimport type { AffiliateWithOffers } from './types'\nimport { fetchAffiliates, getTrackingUrl } from './api'\n\nexport interface UseAffiliatesResult {\n affiliates: AffiliateWithOffers[]\n isLoading: boolean\n error: string | null\n getTrackingUrl: (affiliateId: string, offerId: string) => string\n}\n\n/**\n * Hook to fetch affiliates for display on client sites\n * \n * @example\n * ```tsx\n * function AffiliatesSection() {\n * const { affiliates, isLoading } = useAffiliates()\n * \n * if (isLoading) return <div>Loading...</div>\n * \n * return (\n * <div className=\"grid grid-cols-3 gap-4\">\n * {affiliates.map(affiliate => (\n * <AffiliateCard key={affiliate.id} affiliate={affiliate} />\n * ))}\n * </div>\n * )\n * }\n * ```\n */\nexport function useAffiliates(): UseAffiliatesResult {\n const [affiliates, setAffiliates] = useState<AffiliateWithOffers[]>([])\n const [isLoading, setIsLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n\n useEffect(() => {\n async function load() {\n try {\n setIsLoading(true)\n setError(null)\n const data = await fetchAffiliates()\n setAffiliates(data)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load affiliates')\n } finally {\n setIsLoading(false)\n }\n }\n \n load()\n }, [])\n\n return {\n affiliates,\n isLoading,\n error,\n getTrackingUrl,\n }\n}\n","/**\n * @sonordev/site-kit/affiliates - AffiliatesWidget Component\n * \n * Unstyled, headless component for displaying affiliates.\n * Client sites can wrap this or use it directly with their own styling.\n */\n\n'use client'\n\nimport React from 'react'\nimport { useAffiliates } from './useAffiliates'\nimport type { AffiliateWithOffers, AffiliateOffer } from './types'\n\n// ============================================\n// Affiliate Card (Unstyled)\n// ============================================\n\nexport interface AffiliateCardProps {\n affiliate: AffiliateWithOffers\n className?: string\n /** Optional custom render for the logo */\n renderLogo?: (affiliate: AffiliateWithOffers) => React.ReactNode\n /** Show offers as links below the card */\n showOffers?: boolean\n}\n\n/**\n * Single affiliate card - unstyled, bring your own CSS\n * \n * @example\n * ```tsx\n * <AffiliateCard \n * affiliate={affiliate}\n * className=\"p-4 bg-white rounded-lg shadow\"\n * showOffers\n * />\n * ```\n */\nexport function AffiliateCard({\n affiliate,\n className = '',\n renderLogo,\n showOffers = false,\n}: AffiliateCardProps) {\n const { getTrackingUrl } = useAffiliates()\n \n const defaultLogo = (\n <div data-affiliate-logo className=\"affiliate-logo\">\n {affiliate.logo_url ? (\n <img \n src={affiliate.logo_url} \n alt={affiliate.name}\n loading=\"lazy\"\n />\n ) : (\n <span>{affiliate.name.charAt(0)}</span>\n )}\n </div>\n )\n\n return (\n <div className={className} data-affiliate-card data-affiliate-id={affiliate.id}>\n {/* Logo */}\n {renderLogo ? renderLogo(affiliate) : defaultLogo}\n \n {/* Name */}\n <div data-affiliate-name className=\"affiliate-name\">\n {affiliate.name}\n </div>\n \n {/* Website link */}\n {affiliate.website_url && (\n <a \n href={affiliate.website_url}\n target=\"_blank\"\n rel=\"noopener noreferrer sponsored\"\n data-affiliate-website\n className=\"affiliate-website\"\n >\n Visit Website\n </a>\n )}\n \n {/* Offers */}\n {showOffers && affiliate.offers && affiliate.offers.length > 0 && (\n <div data-affiliate-offers className=\"affiliate-offers\">\n {affiliate.offers.map(offer => (\n <a\n key={offer.id}\n href={getTrackingUrl(affiliate.id, offer.id)}\n target=\"_blank\"\n rel=\"noopener noreferrer sponsored\"\n data-affiliate-offer\n data-offer-id={offer.id}\n className=\"affiliate-offer\"\n >\n {offer.name}\n </a>\n ))}\n </div>\n )}\n </div>\n )\n}\n\n// ============================================\n// Affiliates Grid (Unstyled)\n// ============================================\n\nexport interface AffiliatesWidgetProps {\n className?: string\n /** Custom loading component */\n loadingComponent?: React.ReactNode\n /** Custom empty state component */\n emptyComponent?: React.ReactNode\n /** Custom error component */\n errorComponent?: React.ReactNode\n /** Show offers on each card */\n showOffers?: boolean\n /** Custom render function for each affiliate */\n renderAffiliate?: (affiliate: AffiliateWithOffers) => React.ReactNode\n /** Maximum number to display */\n limit?: number\n}\n\n/**\n * Display a grid of affiliates - unstyled, bring your own CSS\n * \n * @example\n * ```tsx\n * // Basic usage\n * <AffiliatesWidget className=\"grid grid-cols-3 gap-4\" />\n * \n * // With custom rendering\n * <AffiliatesWidget\n * renderAffiliate={(affiliate) => (\n * <MyCustomCard key={affiliate.id} data={affiliate} />\n * )}\n * />\n * ```\n */\nexport function AffiliatesWidget({\n className = '',\n loadingComponent,\n emptyComponent,\n errorComponent,\n showOffers = false,\n renderAffiliate,\n limit,\n}: AffiliatesWidgetProps) {\n const { affiliates, isLoading, error, getTrackingUrl } = useAffiliates()\n \n if (isLoading) {\n return loadingComponent || <div data-affiliates-loading>Loading affiliates...</div>\n }\n \n if (error) {\n return errorComponent || <div data-affiliates-error>{error}</div>\n }\n \n const displayAffiliates = limit ? affiliates.slice(0, limit) : affiliates\n \n if (displayAffiliates.length === 0) {\n return emptyComponent || null\n }\n \n return (\n <div className={className} data-affiliates-widget>\n {displayAffiliates.map(affiliate => \n renderAffiliate \n ? renderAffiliate(affiliate)\n : <AffiliateCard \n key={affiliate.id} \n affiliate={affiliate} \n showOffers={showOffers}\n />\n )}\n </div>\n )\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SiteKitClientProviders.d.ts","sourceRoot":"","sources":["../../src/layout/SiteKitClientProviders.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,EAA2C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAmBtF,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AA4B1E,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IACrC,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IAC/B,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IAC/B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,EACT,SAAgB,EAChB,MAAa,EACb,MAAc,EACd,WAAmB,EACnB,KAAY,EACZ,KAAY,EACZ,KAAa,EACb,cAAc,GACf,EAAE,2BAA2B,qBAuJ7B"}
1
+ {"version":3,"file":"SiteKitClientProviders.d.ts","sourceRoot":"","sources":["../../src/layout/SiteKitClientProviders.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,EAA2C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAmBtF,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AA4B1E,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IACrC,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IAC/B,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IAC/B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,EACT,SAAgB,EAChB,MAAa,EACb,MAAc,EACd,WAAmB,EACnB,KAAY,EACZ,KAAY,EACZ,KAAa,EACb,cAAc,GACf,EAAE,2BAA2B,qBA0J7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"SiteKitClientProviders.d.ts","sourceRoot":"","sources":["../../src/layout/SiteKitClientProviders.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,EAA2C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAmBtF,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AA4B1E,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IACrC,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IAC/B,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IAC/B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,EACT,SAAgB,EAChB,MAAa,EACb,MAAc,EACd,WAAmB,EACnB,KAAY,EACZ,KAAY,EACZ,KAAa,EACb,cAAc,GACf,EAAE,2BAA2B,qBAuJ7B"}
1
+ {"version":3,"file":"SiteKitClientProviders.d.ts","sourceRoot":"","sources":["../../src/layout/SiteKitClientProviders.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,EAA2C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAmBtF,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AA4B1E,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,SAAS,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,GAAG,eAAe,CAAA;IACrC,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IAC/B,MAAM,CAAC,EAAE,OAAO,GAAG,YAAY,CAAA;IAC/B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,MAAM,EACN,MAAM,EACN,SAAS,EACT,SAAgB,EAChB,MAAa,EACb,MAAc,EACd,WAAmB,EACnB,KAAY,EACZ,KAAY,EACZ,KAAa,EACb,cAAc,GACf,EAAE,2BAA2B,qBA0J7B"}
@@ -1,26 +1,26 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkVLR2UYO4_js = require('../chunk-VLR2UYO4.js');
5
- require('../chunk-APL44ZVK.js');
6
- require('../chunk-UYR22S67.js');
4
+ var chunkPEEQMI7U_js = require('../chunk-PEEQMI7U.js');
5
+ require('../chunk-GFNXWS3I.js');
6
+ require('../chunk-MANX6422.js');
7
7
  require('../chunk-Q2NBD54V.js');
8
8
  require('../chunk-OZ3FU4BT.js');
9
9
  require('../chunk-SWIKKSKL.js');
10
10
  require('../chunk-HGNSJXWT.js');
11
- require('../chunk-GPH3VVLP.js');
11
+ require('../chunk-GPNBBUEN.js');
12
12
  require('../chunk-RC4WWQXR.js');
13
13
  require('../chunk-VJMPIRSD.js');
14
- require('../chunk-UJOEN4X6.js');
15
- require('../chunk-SHZXSIRH.js');
16
- require('../chunk-TMQKZ4DO.js');
14
+ require('../chunk-6AZTRTCG.js');
15
+ require('../chunk-FFJVQWKO.js');
16
+ require('../chunk-D37M7MIH.js');
17
17
  require('../chunk-SNAQBZPT.js');
18
18
 
19
19
 
20
20
 
21
21
  Object.defineProperty(exports, "SiteKitClientProviders", {
22
22
  enumerable: true,
23
- get: function () { return chunkVLR2UYO4_js.SiteKitClientProviders; }
23
+ get: function () { return chunkPEEQMI7U_js.SiteKitClientProviders; }
24
24
  });
25
25
  //# sourceMappingURL=client.js.map
26
26
  //# sourceMappingURL=client.js.map
@@ -1,17 +1,17 @@
1
1
  'use client';
2
- export { SiteKitClientProviders } from '../chunk-FH4LLJFL.mjs';
3
- import '../chunk-NW5CBNRU.mjs';
4
- import '../chunk-W47J6ZZG.mjs';
2
+ export { SiteKitClientProviders } from '../chunk-AXAIUCSF.mjs';
3
+ import '../chunk-AVM4OZHR.mjs';
4
+ import '../chunk-JTO3K5B7.mjs';
5
5
  import '../chunk-ZPLN537Q.mjs';
6
6
  import '../chunk-GZJE23Y5.mjs';
7
7
  import '../chunk-ZN4HBK5C.mjs';
8
8
  import '../chunk-ZVBLXXNJ.mjs';
9
- import '../chunk-WD57YWY5.mjs';
9
+ import '../chunk-OC6PU7U2.mjs';
10
10
  import '../chunk-ZZQAGCSI.mjs';
11
11
  import '../chunk-6EDVCUAG.mjs';
12
- import '../chunk-4HL6CAZ7.mjs';
13
- import '../chunk-AKQA5ZYZ.mjs';
14
- import '../chunk-HRQ4367C.mjs';
12
+ import '../chunk-ZKR5AJV5.mjs';
13
+ import '../chunk-CQUA2AUA.mjs';
14
+ import '../chunk-OUERH2T4.mjs';
15
15
  import '../chunk-BEXTDHO4.mjs';
16
16
  //# sourceMappingURL=client.mjs.map
17
17
  //# sourceMappingURL=client.mjs.map
@@ -1,22 +1,22 @@
1
1
  'use strict';
2
2
 
3
- var chunkVLR2UYO4_js = require('../chunk-VLR2UYO4.js');
4
- require('../chunk-APL44ZVK.js');
5
- require('../chunk-UYR22S67.js');
3
+ var chunkPEEQMI7U_js = require('../chunk-PEEQMI7U.js');
4
+ require('../chunk-GFNXWS3I.js');
5
+ require('../chunk-MANX6422.js');
6
6
  require('../chunk-Q2NBD54V.js');
7
7
  require('../chunk-OZ3FU4BT.js');
8
8
  require('../chunk-SWIKKSKL.js');
9
9
  require('../chunk-HGNSJXWT.js');
10
10
  var chunkGCPPXUAI_js = require('../chunk-GCPPXUAI.js');
11
- require('../chunk-GPH3VVLP.js');
12
- var chunkAVPMSJCQ_js = require('../chunk-AVPMSJCQ.js');
11
+ require('../chunk-GPNBBUEN.js');
12
+ var chunkZ7K5AMCE_js = require('../chunk-Z7K5AMCE.js');
13
13
  var chunkDV2LJYFD_js = require('../chunk-DV2LJYFD.js');
14
14
  var chunkO5GHP7UO_js = require('../chunk-O5GHP7UO.js');
15
15
  require('../chunk-RC4WWQXR.js');
16
16
  require('../chunk-VJMPIRSD.js');
17
- require('../chunk-UJOEN4X6.js');
18
- require('../chunk-SHZXSIRH.js');
19
- require('../chunk-TMQKZ4DO.js');
17
+ require('../chunk-6AZTRTCG.js');
18
+ require('../chunk-FFJVQWKO.js');
19
+ require('../chunk-D37M7MIH.js');
20
20
  require('../chunk-SNAQBZPT.js');
21
21
  var jsxRuntime = require('react/jsx-runtime');
22
22
 
@@ -70,7 +70,7 @@ async function SiteKitLayout({
70
70
  );
71
71
  }
72
72
  const apiOrigin = chunkO5GHP7UO_js.resolveApiOrigin(resolvedApiUrl);
73
- const clientCredential = await chunkAVPMSJCQ_js.resolveClientCredential(resolvedApiKey, resolvedApiUrl);
73
+ const clientCredential = await chunkZ7K5AMCE_js.resolveClientCredential(resolvedApiKey, resolvedApiUrl);
74
74
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
75
75
  /* @__PURE__ */ jsxRuntime.jsx("link", { rel: "preconnect", href: apiOrigin, crossOrigin: "anonymous" }),
76
76
  /* @__PURE__ */ jsxRuntime.jsx("link", { rel: "dns-prefetch", href: apiOrigin }),
@@ -78,7 +78,7 @@ async function SiteKitLayout({
78
78
  managedScripts && /* @__PURE__ */ jsxRuntime.jsx(chunkDV2LJYFD_js.ManagedScripts, { position: "head" }),
79
79
  speculation && /* @__PURE__ */ jsxRuntime.jsx(SpeculationRules, { ...typeof speculation === "object" ? speculation : {} }),
80
80
  /* @__PURE__ */ jsxRuntime.jsxs(
81
- chunkVLR2UYO4_js.SiteKitClientProviders,
81
+ chunkPEEQMI7U_js.SiteKitClientProviders,
82
82
  {
83
83
  apiKey: clientCredential,
84
84
  apiUrl: resolvedApiUrl,
@@ -1,20 +1,20 @@
1
- import { SiteKitClientProviders } from '../chunk-FH4LLJFL.mjs';
2
- import '../chunk-NW5CBNRU.mjs';
3
- import '../chunk-W47J6ZZG.mjs';
1
+ import { SiteKitClientProviders } from '../chunk-AXAIUCSF.mjs';
2
+ import '../chunk-AVM4OZHR.mjs';
3
+ import '../chunk-JTO3K5B7.mjs';
4
4
  import '../chunk-ZPLN537Q.mjs';
5
5
  import '../chunk-GZJE23Y5.mjs';
6
6
  import '../chunk-ZN4HBK5C.mjs';
7
7
  import '../chunk-ZVBLXXNJ.mjs';
8
8
  import { ManagedFavicon } from '../chunk-CU6OGBKK.mjs';
9
- import '../chunk-WD57YWY5.mjs';
10
- import { resolveClientCredential } from '../chunk-DN6A6KXH.mjs';
9
+ import '../chunk-OC6PU7U2.mjs';
10
+ import { resolveClientCredential } from '../chunk-ZOJ3TLO5.mjs';
11
11
  import { ManagedScripts } from '../chunk-6PJTLBRR.mjs';
12
12
  import { resolveApiOrigin } from '../chunk-6XNEGG5B.mjs';
13
13
  import '../chunk-ZZQAGCSI.mjs';
14
14
  import '../chunk-6EDVCUAG.mjs';
15
- import '../chunk-4HL6CAZ7.mjs';
16
- import '../chunk-AKQA5ZYZ.mjs';
17
- import '../chunk-HRQ4367C.mjs';
15
+ import '../chunk-ZKR5AJV5.mjs';
16
+ import '../chunk-CQUA2AUA.mjs';
17
+ import '../chunk-OUERH2T4.mjs';
18
18
  import '../chunk-BEXTDHO4.mjs';
19
19
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
20
20
 
@@ -19,6 +19,22 @@ export interface AnalyticsConfig {
19
19
  * `NEXT_PUBLIC_SITE_URL`, then to `window.location.host`.
20
20
  */
21
21
  site?: string;
22
+ /**
23
+ * Report analytics even when this site is loaded inside a CROSS-ORIGIN
24
+ * iframe. Default false.
25
+ *
26
+ * A framed page's visitor is on whoever framed it, not on this site, so by
27
+ * default an embed reports nothing — see `analytics/send-gate.ts` for the
28
+ * phantom traffic that prompted this (Upforge case studies embed live
29
+ * client sites, and every view was writing page views into the client's own
30
+ * project). Same-origin frames are never blocked: a site embedding itself
31
+ * is a real visit to that site.
32
+ *
33
+ * Set this to true only for a site that is deliberately distributed as an
34
+ * embed — a widget, a partner-hosted booking or menu page — where the frame
35
+ * IS the product and its traffic is genuinely yours.
36
+ */
37
+ allowInFrame?: boolean;
22
38
  }
23
39
  export interface EngageConfig {
24
40
  position?: 'bottom-right' | 'bottom-left';
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,CAAA;IACzC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/layout/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;;;;;;;;;;OAcG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,CAAA;IACzC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B"}
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkUJOEN4X6_js = require('../chunk-UJOEN4X6.js');
5
- require('../chunk-SHZXSIRH.js');
6
- require('../chunk-TMQKZ4DO.js');
4
+ var chunk6AZTRTCG_js = require('../chunk-6AZTRTCG.js');
5
+ require('../chunk-FFJVQWKO.js');
6
+ require('../chunk-D37M7MIH.js');
7
7
  require('../chunk-SNAQBZPT.js');
8
8
  var react = require('react');
9
9
  var reactGoogleMaps = require('@vis.gl/react-google-maps');
@@ -141,7 +141,7 @@ async function fetchMapsConfig() {
141
141
  const { apiUrl, apiKey } = getApiConfig();
142
142
  if (apiKey) {
143
143
  try {
144
- const res = await chunkUJOEN4X6_js.sonorFetch(
144
+ const res = await chunk6AZTRTCG_js.sonorFetch(
145
145
  `${apiUrl}/api/public/maps/config`,
146
146
  { headers: { "Content-Type": "application/json" } },
147
147
  { apiKey }
@@ -181,7 +181,7 @@ async function fetchNearbyPlaces(params) {
181
181
  });
182
182
  if (params.radius) searchParams.set("radius", String(params.radius));
183
183
  if (params.limit) searchParams.set("limit", String(params.limit));
184
- const res = await chunkUJOEN4X6_js.sonorFetch(
184
+ const res = await chunk6AZTRTCG_js.sonorFetch(
185
185
  `${apiUrl}/api/public/maps/nearby-places?${searchParams}`,
186
186
  { headers: { "Content-Type": "application/json" } },
187
187
  { apiKey }
@@ -1,7 +1,7 @@
1
1
  'use client';
2
- import { sonorFetch } from '../chunk-4HL6CAZ7.mjs';
3
- import '../chunk-AKQA5ZYZ.mjs';
4
- import '../chunk-HRQ4367C.mjs';
2
+ import { sonorFetch } from '../chunk-ZKR5AJV5.mjs';
3
+ import '../chunk-CQUA2AUA.mjs';
4
+ import '../chunk-OUERH2T4.mjs';
5
5
  import '../chunk-BEXTDHO4.mjs';
6
6
  import { useState, useCallback, useEffect } from 'react';
7
7
  import { APIProvider, Map as Map$1, AdvancedMarker, Pin, InfoWindow } from '@vis.gl/react-google-maps';
@@ -2,9 +2,9 @@
2
2
  'use strict';
3
3
 
4
4
  var chunkG2WC3CXW_js = require('../chunk-G2WC3CXW.js');
5
- var chunkUJOEN4X6_js = require('../chunk-UJOEN4X6.js');
6
- require('../chunk-SHZXSIRH.js');
7
- require('../chunk-TMQKZ4DO.js');
5
+ var chunk6AZTRTCG_js = require('../chunk-6AZTRTCG.js');
6
+ require('../chunk-FFJVQWKO.js');
7
+ require('../chunk-D37M7MIH.js');
8
8
  require('../chunk-SNAQBZPT.js');
9
9
  var react = require('react');
10
10
  var jsxRuntime = require('react/jsx-runtime');
@@ -39,7 +39,7 @@ function useSiteSearch(options = {}) {
39
39
  const apiUrl = typeof window !== "undefined" ? window.__SITE_KIT_API_URL__ || "https://api.sonor.io" : "https://api.sonor.io";
40
40
  const apiKey = typeof window !== "undefined" ? window.__SITE_KIT_API_KEY__ : void 0;
41
41
  const resolvedSite = site ?? (typeof window !== "undefined" ? window.__SITE_KIT_SITE__ : void 0);
42
- const res = await chunkUJOEN4X6_js.sonorFetch(
42
+ const res = await chunk6AZTRTCG_js.sonorFetch(
43
43
  `${apiUrl}${chunkG2WC3CXW_js.SEARCH_ENDPOINT}`,
44
44
  {
45
45
  method: "POST",
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  import { SEARCH_ENDPOINT } from '../chunk-75A4KY4X.mjs';
3
3
  export { SEARCH_ENDPOINT } from '../chunk-75A4KY4X.mjs';
4
- import { sonorFetch } from '../chunk-4HL6CAZ7.mjs';
5
- import '../chunk-AKQA5ZYZ.mjs';
6
- import '../chunk-HRQ4367C.mjs';
4
+ import { sonorFetch } from '../chunk-ZKR5AJV5.mjs';
5
+ import '../chunk-CQUA2AUA.mjs';
6
+ import '../chunk-OUERH2T4.mjs';
7
7
  import '../chunk-BEXTDHO4.mjs';
8
8
  import { useState, useRef, useCallback, useEffect } from 'react';
9
9
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,18 +1,19 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkGQTSQR63_js = require('../chunk-GQTSQR63.js');
4
+ var chunkR3LYTIVN_js = require('../chunk-R3LYTIVN.js');
5
5
  require('../chunk-JEOKDUPQ.js');
6
- require('../chunk-UJOEN4X6.js');
7
- require('../chunk-SHZXSIRH.js');
8
- require('../chunk-TMQKZ4DO.js');
6
+ require('../chunk-OL2QBWAU.js');
7
+ require('../chunk-6AZTRTCG.js');
8
+ require('../chunk-FFJVQWKO.js');
9
+ require('../chunk-D37M7MIH.js');
9
10
  require('../chunk-SNAQBZPT.js');
10
11
 
11
12
 
12
13
 
13
14
  Object.defineProperty(exports, "SitemapSync", {
14
15
  enumerable: true,
15
- get: function () { return chunkGQTSQR63_js.SitemapSync; }
16
+ get: function () { return chunkR3LYTIVN_js.SitemapSync; }
16
17
  });
17
18
  //# sourceMappingURL=client.js.map
18
19
  //# sourceMappingURL=client.js.map
@@ -1,9 +1,10 @@
1
1
  'use client';
2
- export { SitemapSync } from '../chunk-WZZYTFDV.mjs';
2
+ export { SitemapSync } from '../chunk-N3C323NY.mjs';
3
3
  import '../chunk-QJU6HBSK.mjs';
4
- import '../chunk-4HL6CAZ7.mjs';
5
- import '../chunk-AKQA5ZYZ.mjs';
6
- import '../chunk-HRQ4367C.mjs';
4
+ import '../chunk-NVSWTDWU.mjs';
5
+ import '../chunk-ZKR5AJV5.mjs';
6
+ import '../chunk-CQUA2AUA.mjs';
7
+ import '../chunk-OUERH2T4.mjs';
7
8
  import '../chunk-BEXTDHO4.mjs';
8
9
  //# sourceMappingURL=client.mjs.map
9
10
  //# sourceMappingURL=client.mjs.map
package/dist/seo/index.js CHANGED
@@ -3,14 +3,15 @@
3
3
  var chunkDV2LJYFD_js = require('../chunk-DV2LJYFD.js');
4
4
  var chunkH6AU3WKF_js = require('../chunk-H6AU3WKF.js');
5
5
  var chunkJ7QI3GDX_js = require('../chunk-J7QI3GDX.js');
6
- var chunkGQTSQR63_js = require('../chunk-GQTSQR63.js');
6
+ var chunkR3LYTIVN_js = require('../chunk-R3LYTIVN.js');
7
7
  var chunkL2LJQIM3_js = require('../chunk-L2LJQIM3.js');
8
8
  var chunk3TXX5KIN_js = require('../chunk-3TXX5KIN.js');
9
9
  require('../chunk-O5GHP7UO.js');
10
10
  require('../chunk-JEOKDUPQ.js');
11
- require('../chunk-UJOEN4X6.js');
12
- require('../chunk-SHZXSIRH.js');
13
- require('../chunk-TMQKZ4DO.js');
11
+ require('../chunk-OL2QBWAU.js');
12
+ require('../chunk-6AZTRTCG.js');
13
+ require('../chunk-FFJVQWKO.js');
14
+ require('../chunk-D37M7MIH.js');
14
15
  require('../chunk-SNAQBZPT.js');
15
16
  var react = require('react');
16
17
  var jsxRuntime = require('react/jsx-runtime');
@@ -687,7 +688,7 @@ Object.defineProperty(exports, "ManagedScripts", {
687
688
  });
688
689
  Object.defineProperty(exports, "SitemapSync", {
689
690
  enumerable: true,
690
- get: function () { return chunkGQTSQR63_js.SitemapSync; }
691
+ get: function () { return chunkR3LYTIVN_js.SitemapSync; }
691
692
  });
692
693
  Object.defineProperty(exports, "generateSitemap", {
693
694
  enumerable: true,