@sonordev/site-kit 1.2.7

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 (300) hide show
  1. package/README.md +376 -0
  2. package/dist/SetupWizard-Cki06kB0.d.mts +12 -0
  3. package/dist/SetupWizard-Cki06kB0.d.ts +12 -0
  4. package/dist/analytics/index.d.mts +93 -0
  5. package/dist/analytics/index.d.ts +93 -0
  6. package/dist/analytics/index.js +89 -0
  7. package/dist/analytics/index.js.map +1 -0
  8. package/dist/analytics/index.mjs +71 -0
  9. package/dist/analytics/index.mjs.map +1 -0
  10. package/dist/api-CWtoFJCO.d.mts +137 -0
  11. package/dist/api-CWtoFJCO.d.ts +137 -0
  12. package/dist/blog/index.d.mts +305 -0
  13. package/dist/blog/index.d.ts +305 -0
  14. package/dist/blog/index.js +1578 -0
  15. package/dist/blog/index.js.map +1 -0
  16. package/dist/blog/index.mjs +1562 -0
  17. package/dist/blog/index.mjs.map +1 -0
  18. package/dist/blog/server.d.mts +229 -0
  19. package/dist/blog/server.d.ts +229 -0
  20. package/dist/blog/server.js +692 -0
  21. package/dist/blog/server.js.map +1 -0
  22. package/dist/blog/server.mjs +666 -0
  23. package/dist/blog/server.mjs.map +1 -0
  24. package/dist/chunk-24277A3Q.mjs +968 -0
  25. package/dist/chunk-24277A3Q.mjs.map +1 -0
  26. package/dist/chunk-373TK6TZ.js +321 -0
  27. package/dist/chunk-373TK6TZ.js.map +1 -0
  28. package/dist/chunk-3MYZS6PD.js +30 -0
  29. package/dist/chunk-3MYZS6PD.js.map +1 -0
  30. package/dist/chunk-43GBM4SX.js +283 -0
  31. package/dist/chunk-43GBM4SX.js.map +1 -0
  32. package/dist/chunk-4XPGGLVP.mjs +53 -0
  33. package/dist/chunk-4XPGGLVP.mjs.map +1 -0
  34. package/dist/chunk-622GAQP5.js +2008 -0
  35. package/dist/chunk-622GAQP5.js.map +1 -0
  36. package/dist/chunk-6BIPAKL4.mjs +28 -0
  37. package/dist/chunk-6BIPAKL4.mjs.map +1 -0
  38. package/dist/chunk-6ZCISNAB.mjs +343 -0
  39. package/dist/chunk-6ZCISNAB.mjs.map +1 -0
  40. package/dist/chunk-72MQFHYJ.js +1429 -0
  41. package/dist/chunk-72MQFHYJ.js.map +1 -0
  42. package/dist/chunk-7557OTHW.js +62 -0
  43. package/dist/chunk-7557OTHW.js.map +1 -0
  44. package/dist/chunk-7FUV73JZ.js +981 -0
  45. package/dist/chunk-7FUV73JZ.js.map +1 -0
  46. package/dist/chunk-7RF6PVHA.mjs +324 -0
  47. package/dist/chunk-7RF6PVHA.mjs.map +1 -0
  48. package/dist/chunk-7RYCHO6D.mjs +134 -0
  49. package/dist/chunk-7RYCHO6D.mjs.map +1 -0
  50. package/dist/chunk-7UKPRW25.mjs +1999 -0
  51. package/dist/chunk-7UKPRW25.mjs.map +1 -0
  52. package/dist/chunk-7URAOG2M.js +14864 -0
  53. package/dist/chunk-7URAOG2M.js.map +1 -0
  54. package/dist/chunk-AFAO3TGS.mjs +810 -0
  55. package/dist/chunk-AFAO3TGS.mjs.map +1 -0
  56. package/dist/chunk-BYLIU6XG.js +343 -0
  57. package/dist/chunk-BYLIU6XG.js.map +1 -0
  58. package/dist/chunk-D63MUKZ6.mjs +4423 -0
  59. package/dist/chunk-D63MUKZ6.mjs.map +1 -0
  60. package/dist/chunk-DDKW2FNA.js +390 -0
  61. package/dist/chunk-DDKW2FNA.js.map +1 -0
  62. package/dist/chunk-DQYMKR27.mjs +341 -0
  63. package/dist/chunk-DQYMKR27.mjs.map +1 -0
  64. package/dist/chunk-DW5UJKHH.js +221 -0
  65. package/dist/chunk-DW5UJKHH.js.map +1 -0
  66. package/dist/chunk-EEZCR6E6.js +50 -0
  67. package/dist/chunk-EEZCR6E6.js.map +1 -0
  68. package/dist/chunk-GCJXQ4AG.mjs +59 -0
  69. package/dist/chunk-GCJXQ4AG.mjs.map +1 -0
  70. package/dist/chunk-JGNQK2G6.mjs +14845 -0
  71. package/dist/chunk-JGNQK2G6.mjs.map +1 -0
  72. package/dist/chunk-JTLOJLWQ.mjs +563 -0
  73. package/dist/chunk-JTLOJLWQ.mjs.map +1 -0
  74. package/dist/chunk-K23A4G76.mjs +202 -0
  75. package/dist/chunk-K23A4G76.mjs.map +1 -0
  76. package/dist/chunk-KKU3K7RG.js +336 -0
  77. package/dist/chunk-KKU3K7RG.js.map +1 -0
  78. package/dist/chunk-KUGMH4ZF.js +571 -0
  79. package/dist/chunk-KUGMH4ZF.js.map +1 -0
  80. package/dist/chunk-LBVWVP72.js +110 -0
  81. package/dist/chunk-LBVWVP72.js.map +1 -0
  82. package/dist/chunk-LIVWLY2P.js +138 -0
  83. package/dist/chunk-LIVWLY2P.js.map +1 -0
  84. package/dist/chunk-M2T6R7BA.mjs +1003 -0
  85. package/dist/chunk-M2T6R7BA.mjs.map +1 -0
  86. package/dist/chunk-MV3QN7PW.mjs +47 -0
  87. package/dist/chunk-MV3QN7PW.mjs.map +1 -0
  88. package/dist/chunk-OB7E654K.js +72 -0
  89. package/dist/chunk-OB7E654K.js.map +1 -0
  90. package/dist/chunk-OIIKTGRL.mjs +380 -0
  91. package/dist/chunk-OIIKTGRL.mjs.map +1 -0
  92. package/dist/chunk-P3UWIUJS.mjs +1427 -0
  93. package/dist/chunk-P3UWIUJS.mjs.map +1 -0
  94. package/dist/chunk-PKN27UMH.mjs +136 -0
  95. package/dist/chunk-PKN27UMH.mjs.map +1 -0
  96. package/dist/chunk-QXV4667R.mjs +105 -0
  97. package/dist/chunk-QXV4667R.mjs.map +1 -0
  98. package/dist/chunk-S7FRYNSU.mjs +315 -0
  99. package/dist/chunk-S7FRYNSU.mjs.map +1 -0
  100. package/dist/chunk-TFLQX7K7.mjs +68 -0
  101. package/dist/chunk-TFLQX7K7.mjs.map +1 -0
  102. package/dist/chunk-UWE5PCYJ.mjs +279 -0
  103. package/dist/chunk-UWE5PCYJ.mjs.map +1 -0
  104. package/dist/chunk-UYFDNX2F.js +4469 -0
  105. package/dist/chunk-UYFDNX2F.js.map +1 -0
  106. package/dist/chunk-W4PALSGM.js +350 -0
  107. package/dist/chunk-W4PALSGM.js.map +1 -0
  108. package/dist/chunk-WECQ6KOB.js +1008 -0
  109. package/dist/chunk-WECQ6KOB.js.map +1 -0
  110. package/dist/chunk-XQQWI6WB.js +814 -0
  111. package/dist/chunk-XQQWI6WB.js.map +1 -0
  112. package/dist/chunk-XZJOZJB6.js +140 -0
  113. package/dist/chunk-XZJOZJB6.js.map +1 -0
  114. package/dist/chunk-ZSMWDLMK.js +63 -0
  115. package/dist/chunk-ZSMWDLMK.js.map +1 -0
  116. package/dist/cli/index.js +37243 -0
  117. package/dist/cli/index.js.map +1 -0
  118. package/dist/cli/index.mjs +37209 -0
  119. package/dist/cli/index.mjs.map +1 -0
  120. package/dist/commerce/index.d.mts +170 -0
  121. package/dist/commerce/index.d.ts +170 -0
  122. package/dist/commerce/index.js +174 -0
  123. package/dist/commerce/index.js.map +1 -0
  124. package/dist/commerce/index.mjs +5 -0
  125. package/dist/commerce/index.mjs.map +1 -0
  126. package/dist/commerce/server.d.mts +107 -0
  127. package/dist/commerce/server.d.ts +107 -0
  128. package/dist/commerce/server.js +187 -0
  129. package/dist/commerce/server.js.map +1 -0
  130. package/dist/commerce/server.mjs +177 -0
  131. package/dist/commerce/server.mjs.map +1 -0
  132. package/dist/config/index.d.mts +43 -0
  133. package/dist/config/index.d.ts +43 -0
  134. package/dist/config/index.js +66 -0
  135. package/dist/config/index.js.map +1 -0
  136. package/dist/config/index.mjs +64 -0
  137. package/dist/config/index.mjs.map +1 -0
  138. package/dist/engage/index.d.mts +33 -0
  139. package/dist/engage/index.d.ts +33 -0
  140. package/dist/engage/index.js +22 -0
  141. package/dist/engage/index.js.map +1 -0
  142. package/dist/engage/index.mjs +5 -0
  143. package/dist/engage/index.mjs.map +1 -0
  144. package/dist/forms/index.d.mts +437 -0
  145. package/dist/forms/index.d.ts +437 -0
  146. package/dist/forms/index.js +1168 -0
  147. package/dist/forms/index.js.map +1 -0
  148. package/dist/forms/index.mjs +1142 -0
  149. package/dist/forms/index.mjs.map +1 -0
  150. package/dist/generators-2XKQMPKH.mjs +4 -0
  151. package/dist/generators-2XKQMPKH.mjs.map +1 -0
  152. package/dist/generators-DTMO36DV.js +33 -0
  153. package/dist/generators-DTMO36DV.js.map +1 -0
  154. package/dist/images/index.d.mts +4 -0
  155. package/dist/images/index.d.ts +4 -0
  156. package/dist/images/index.js +46 -0
  157. package/dist/images/index.js.map +1 -0
  158. package/dist/images/index.mjs +5 -0
  159. package/dist/images/index.mjs.map +1 -0
  160. package/dist/images/server.d.mts +69 -0
  161. package/dist/images/server.d.ts +69 -0
  162. package/dist/images/server.js +21 -0
  163. package/dist/images/server.js.map +1 -0
  164. package/dist/images/server.mjs +4 -0
  165. package/dist/images/server.mjs.map +1 -0
  166. package/dist/index.d.mts +846 -0
  167. package/dist/index.d.ts +846 -0
  168. package/dist/index.js +2623 -0
  169. package/dist/index.js.map +1 -0
  170. package/dist/index.mjs +2416 -0
  171. package/dist/index.mjs.map +1 -0
  172. package/dist/layout/index.d.mts +53 -0
  173. package/dist/layout/index.d.ts +53 -0
  174. package/dist/layout/index.js +187 -0
  175. package/dist/layout/index.js.map +1 -0
  176. package/dist/layout/index.mjs +185 -0
  177. package/dist/layout/index.mjs.map +1 -0
  178. package/dist/llms/index.d.mts +448 -0
  179. package/dist/llms/index.d.ts +448 -0
  180. package/dist/llms/index.js +581 -0
  181. package/dist/llms/index.js.map +1 -0
  182. package/dist/llms/index.mjs +529 -0
  183. package/dist/llms/index.mjs.map +1 -0
  184. package/dist/manifest/index.d.mts +62 -0
  185. package/dist/manifest/index.d.ts +62 -0
  186. package/dist/manifest/index.js +85 -0
  187. package/dist/manifest/index.js.map +1 -0
  188. package/dist/manifest/index.mjs +83 -0
  189. package/dist/manifest/index.mjs.map +1 -0
  190. package/dist/middleware/index.d.mts +63 -0
  191. package/dist/middleware/index.d.ts +63 -0
  192. package/dist/middleware/index.js +54 -0
  193. package/dist/middleware/index.js.map +1 -0
  194. package/dist/middleware/index.mjs +51 -0
  195. package/dist/middleware/index.mjs.map +1 -0
  196. package/dist/migrator-2MQHOFDQ.mjs +4 -0
  197. package/dist/migrator-2MQHOFDQ.mjs.map +1 -0
  198. package/dist/migrator-THJCF6MZ.js +37 -0
  199. package/dist/migrator-THJCF6MZ.js.map +1 -0
  200. package/dist/redirects/index.d.mts +78 -0
  201. package/dist/redirects/index.d.ts +78 -0
  202. package/dist/redirects/index.js +26 -0
  203. package/dist/redirects/index.js.map +1 -0
  204. package/dist/redirects/index.mjs +5 -0
  205. package/dist/redirects/index.mjs.map +1 -0
  206. package/dist/reputation/index.d.mts +57 -0
  207. package/dist/reputation/index.d.ts +57 -0
  208. package/dist/reputation/index.js +21 -0
  209. package/dist/reputation/index.js.map +1 -0
  210. package/dist/reputation/index.mjs +4 -0
  211. package/dist/reputation/index.mjs.map +1 -0
  212. package/dist/robots/index.d.mts +38 -0
  213. package/dist/robots/index.d.ts +38 -0
  214. package/dist/robots/index.js +52 -0
  215. package/dist/robots/index.js.map +1 -0
  216. package/dist/robots/index.mjs +50 -0
  217. package/dist/robots/index.mjs.map +1 -0
  218. package/dist/routing-B5XS-6_W.d.mts +118 -0
  219. package/dist/routing-DZYzyDHw.d.ts +118 -0
  220. package/dist/scanner-GAF5PO5F.js +53 -0
  221. package/dist/scanner-GAF5PO5F.js.map +1 -0
  222. package/dist/scanner-LKJKW7IT.mjs +4 -0
  223. package/dist/scanner-LKJKW7IT.mjs.map +1 -0
  224. package/dist/securityHeaders-nwZ6nP4g.d.mts +24 -0
  225. package/dist/securityHeaders-nwZ6nP4g.d.ts +24 -0
  226. package/dist/seo/index.d.mts +600 -0
  227. package/dist/seo/index.d.ts +600 -0
  228. package/dist/seo/index.js +883 -0
  229. package/dist/seo/index.js.map +1 -0
  230. package/dist/seo/index.mjs +773 -0
  231. package/dist/seo/index.mjs.map +1 -0
  232. package/dist/seo/register-sitemap-cli.js +151 -0
  233. package/dist/seo/register-sitemap-cli.js.map +1 -0
  234. package/dist/seo/register-sitemap-cli.mjs +144 -0
  235. package/dist/seo/register-sitemap-cli.mjs.map +1 -0
  236. package/dist/seo/server.d.mts +107 -0
  237. package/dist/seo/server.d.ts +107 -0
  238. package/dist/seo/server.js +207 -0
  239. package/dist/seo/server.js.map +1 -0
  240. package/dist/seo/server.mjs +186 -0
  241. package/dist/seo/server.mjs.map +1 -0
  242. package/dist/server-api-EWXKOQZA.mjs +4 -0
  243. package/dist/server-api-EWXKOQZA.mjs.map +1 -0
  244. package/dist/server-api-GJPNRYUP.js +81 -0
  245. package/dist/server-api-GJPNRYUP.js.map +1 -0
  246. package/dist/setup/client.d.mts +60 -0
  247. package/dist/setup/client.d.ts +60 -0
  248. package/dist/setup/client.js +31 -0
  249. package/dist/setup/client.js.map +1 -0
  250. package/dist/setup/client.mjs +6 -0
  251. package/dist/setup/client.mjs.map +1 -0
  252. package/dist/setup/index.d.mts +5 -0
  253. package/dist/setup/index.d.ts +5 -0
  254. package/dist/setup/index.js +35 -0
  255. package/dist/setup/index.js.map +1 -0
  256. package/dist/setup/index.mjs +6 -0
  257. package/dist/setup/index.mjs.map +1 -0
  258. package/dist/setup/server.d.mts +14 -0
  259. package/dist/setup/server.d.ts +14 -0
  260. package/dist/setup/server.js +13 -0
  261. package/dist/setup/server.js.map +1 -0
  262. package/dist/setup/server.mjs +4 -0
  263. package/dist/setup/server.mjs.map +1 -0
  264. package/dist/site-config/index.d.mts +24 -0
  265. package/dist/site-config/index.d.ts +24 -0
  266. package/dist/site-config/index.js +17 -0
  267. package/dist/site-config/index.js.map +1 -0
  268. package/dist/site-config/index.mjs +4 -0
  269. package/dist/site-config/index.mjs.map +1 -0
  270. package/dist/sitemap/index.d.mts +96 -0
  271. package/dist/sitemap/index.d.ts +96 -0
  272. package/dist/sitemap/index.js +288 -0
  273. package/dist/sitemap/index.js.map +1 -0
  274. package/dist/sitemap/index.mjs +285 -0
  275. package/dist/sitemap/index.mjs.map +1 -0
  276. package/dist/socket-loader-J26QHHOB.js +16 -0
  277. package/dist/socket-loader-J26QHHOB.js.map +1 -0
  278. package/dist/socket-loader-R7S2YJ2J.mjs +14 -0
  279. package/dist/socket-loader-R7S2YJ2J.mjs.map +1 -0
  280. package/dist/types-0dmq3k20.d.mts +168 -0
  281. package/dist/types-0dmq3k20.d.ts +168 -0
  282. package/dist/types-Blb2QNkV.d.mts +263 -0
  283. package/dist/types-Blb2QNkV.d.ts +263 -0
  284. package/dist/types-BnCwwUX3.d.mts +250 -0
  285. package/dist/types-BnCwwUX3.d.ts +250 -0
  286. package/dist/types-CGlnp43R.d.mts +312 -0
  287. package/dist/types-CGlnp43R.d.ts +312 -0
  288. package/dist/types-D08004rU.d.mts +179 -0
  289. package/dist/types-D08004rU.d.ts +179 -0
  290. package/dist/types-DNSYU7qI.d.mts +127 -0
  291. package/dist/types-DNSYU7qI.d.ts +127 -0
  292. package/dist/types-KZP_VWZp.d.mts +266 -0
  293. package/dist/types-KZP_VWZp.d.ts +266 -0
  294. package/dist/useEventModal-BVTx69XE.d.mts +274 -0
  295. package/dist/useEventModal-Dx1dItTJ.d.ts +274 -0
  296. package/dist/web-vitals-444RLW3B.js +252 -0
  297. package/dist/web-vitals-444RLW3B.js.map +1 -0
  298. package/dist/web-vitals-KPICZIEF.mjs +241 -0
  299. package/dist/web-vitals-KPICZIEF.mjs.map +1 -0
  300. package/package.json +192 -0
@@ -0,0 +1,883 @@
1
+ 'use strict';
2
+
3
+ var chunkEEZCR6E6_js = require('../chunk-EEZCR6E6.js');
4
+ var chunkLIVWLY2P_js = require('../chunk-LIVWLY2P.js');
5
+ var chunkXZJOZJB6_js = require('../chunk-XZJOZJB6.js');
6
+ var chunkDW5UJKHH_js = require('../chunk-DW5UJKHH.js');
7
+ require('../chunk-ZSMWDLMK.js');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+ var react = require('react');
10
+
11
+ // src/seo/getManagedMetadata.ts
12
+ async function getManagedMetadata(options) {
13
+ const { path, fallback = {}, overrides = {}, favicon: faviconMode = "metadata" } = options;
14
+ const omitIcons = faviconMode === "component";
15
+ const result = await chunkDW5UJKHH_js.getSEOPageData(path);
16
+ const pageData = result?.page;
17
+ const projectData = result?.project;
18
+ if (!pageData) {
19
+ const fallbackMeta = {
20
+ ...fallback,
21
+ ...overrides,
22
+ _managed: false,
23
+ _source: "fallback"
24
+ };
25
+ if (!omitIcons && projectData?.logo_url) {
26
+ fallbackMeta.icons = {
27
+ icon: projectData.logo_url,
28
+ apple: projectData.logo_url
29
+ };
30
+ }
31
+ return fallbackMeta;
32
+ }
33
+ const metadata = {
34
+ _managed: true,
35
+ _source: "database"
36
+ };
37
+ if (!omitIcons && projectData?.logo_url) {
38
+ metadata.icons = {
39
+ icon: projectData.logo_url,
40
+ apple: projectData.logo_url
41
+ };
42
+ }
43
+ let signalData = null;
44
+ if (!pageData.managed_title && !pageData.managed_meta_description && !pageData.managed_description) {
45
+ try {
46
+ signalData = await chunkDW5UJKHH_js.ensureMetadata(path);
47
+ } catch {
48
+ }
49
+ }
50
+ if (pageData.managed_title) {
51
+ metadata.title = pageData.managed_title;
52
+ } else if (signalData?.managed_title) {
53
+ metadata.title = signalData.managed_title;
54
+ metadata._source = "signal";
55
+ } else if (fallback.title) {
56
+ metadata.title = fallback.title;
57
+ }
58
+ if (pageData.managed_meta_description || pageData.managed_description) {
59
+ metadata.description = pageData.managed_meta_description || pageData.managed_description;
60
+ } else if (signalData?.managed_meta_description) {
61
+ metadata.description = signalData.managed_meta_description;
62
+ metadata._source = "signal";
63
+ } else if (fallback.description) {
64
+ metadata.description = fallback.description;
65
+ }
66
+ if (pageData.managed_keywords?.length) {
67
+ metadata.keywords = pageData.managed_keywords;
68
+ } else if (signalData?.managed_keywords?.length) {
69
+ metadata.keywords = signalData.managed_keywords;
70
+ metadata._source = "signal";
71
+ } else if (fallback.keywords) {
72
+ metadata.keywords = fallback.keywords;
73
+ }
74
+ if (pageData.managed_robots) {
75
+ metadata.robots = pageData.managed_robots;
76
+ }
77
+ if (pageData.managed_canonical) {
78
+ metadata.alternates = {
79
+ ...metadata.alternates,
80
+ canonical: pageData.managed_canonical
81
+ };
82
+ }
83
+ const ogTitle = pageData.managed_og_title || pageData.managed_title;
84
+ const ogDescription = pageData.managed_og_description || pageData.managed_meta_description || pageData.managed_description;
85
+ const ogImage = pageData.managed_og_image;
86
+ if (ogTitle || ogDescription || ogImage) {
87
+ metadata.openGraph = {
88
+ ...ogTitle && { title: ogTitle },
89
+ ...ogDescription && { description: ogDescription },
90
+ ...ogImage && { images: [{ url: ogImage }] }
91
+ };
92
+ }
93
+ if (ogTitle || ogDescription || ogImage) {
94
+ metadata.twitter = {
95
+ card: "summary_large_image",
96
+ ...ogTitle && { title: ogTitle },
97
+ ...ogDescription && { description: ogDescription },
98
+ ...ogImage && { images: [ogImage] }
99
+ };
100
+ }
101
+ return {
102
+ ...metadata,
103
+ ...overrides,
104
+ _managed: true,
105
+ _source: "database"
106
+ };
107
+ }
108
+ async function getABVariant(options) {
109
+ const { path, field, sessionId } = options;
110
+ const test = await chunkDW5UJKHH_js.getABTest(path, field);
111
+ if (!test) {
112
+ return null;
113
+ }
114
+ let variant;
115
+ if (sessionId) {
116
+ const hash = sessionId.split("").reduce((acc, char) => {
117
+ return (acc << 5) - acc + char.charCodeAt(0);
118
+ }, 0);
119
+ variant = Math.abs(hash) % 100 < test.traffic_split * 100 ? "a" : "b";
120
+ } else {
121
+ variant = Math.random() < test.traffic_split ? "a" : "b";
122
+ }
123
+ chunkDW5UJKHH_js.recordABImpression(test.id, variant, sessionId).catch(() => {
124
+ });
125
+ return {
126
+ testId: test.id,
127
+ variant,
128
+ value: variant === "a" ? test.variant_a : test.variant_b
129
+ };
130
+ }
131
+ async function getManagedMetadataWithAB(options) {
132
+ const { sessionId, ...metadataOptions } = options;
133
+ const metadata = await getManagedMetadata(metadataOptions);
134
+ const titleTest = await getABVariant({
135
+ path: options.path,
136
+ field: "title",
137
+ sessionId
138
+ });
139
+ if (titleTest) {
140
+ metadata.title = titleTest.value;
141
+ }
142
+ const descTest = await getABVariant({
143
+ path: options.path,
144
+ field: "description",
145
+ sessionId
146
+ });
147
+ if (descTest) {
148
+ metadata.description = descTest.value;
149
+ }
150
+ return metadata;
151
+ }
152
+
153
+ // src/seo/withManagedMetadata.ts
154
+ function withManagedMetadata(path, pageMetadata) {
155
+ return async function generateMetadata(args, parent) {
156
+ const resolvedPath = typeof path === "function" ? await path(args) : path;
157
+ const managed = await getManagedMetadata({ path: resolvedPath });
158
+ if (!pageMetadata) {
159
+ return managed;
160
+ }
161
+ const pageSpecific = await pageMetadata(args, parent);
162
+ return {
163
+ ...managed,
164
+ ...pageSpecific,
165
+ openGraph: {
166
+ ...managed.openGraph,
167
+ ...pageSpecific.openGraph
168
+ },
169
+ twitter: {
170
+ ...managed.twitter,
171
+ ...pageSpecific.twitter
172
+ }
173
+ };
174
+ };
175
+ }
176
+ var DEFAULT_SPEAKABLE_SELECTORS = [
177
+ "h1",
178
+ '[data-speakable="true"]',
179
+ ".page-summary",
180
+ ".key-points",
181
+ '.aeo-block[data-speakable="true"]'
182
+ ];
183
+ async function ManagedSchema({
184
+ path,
185
+ additionalSchemas = [],
186
+ includeTypes,
187
+ excludeTypes,
188
+ speakable,
189
+ pageType = "WebPage",
190
+ pageName,
191
+ pageUrl,
192
+ includeEntityGraph = true
193
+ }) {
194
+ const schemas = await chunkDW5UJKHH_js.getSchemaMarkups(path, {
195
+ includeTypes,
196
+ excludeTypes
197
+ });
198
+ const pageData = await chunkDW5UJKHH_js.getSEOPageData(path);
199
+ let entitySchemas = [];
200
+ if (includeEntityGraph) {
201
+ try {
202
+ entitySchemas = await chunkDW5UJKHH_js.getEntityEnhancedSchema(path);
203
+ } catch {
204
+ }
205
+ }
206
+ const page = pageData?.page;
207
+ const siteUrl = pageData?.project?.site_url || "";
208
+ const allSchemas = [
209
+ ...entitySchemas,
210
+ ...schemas.map((s) => s.schema_json),
211
+ // Include auto-generated schema from Signal meta optimization
212
+ ...page?.managed_schema ? [page.managed_schema] : [],
213
+ ...additionalSchemas
214
+ ];
215
+ const hasBreadcrumb = allSchemas.some(
216
+ (s) => s && typeof s === "object" && s["@type"] === "BreadcrumbList"
217
+ );
218
+ if (!hasBreadcrumb && path !== "/" && siteUrl) {
219
+ allSchemas.push(createBreadcrumbSchema(siteUrl, path));
220
+ }
221
+ if (speakable && pageName && pageUrl) {
222
+ const speakableSchema = createSpeakableWebPageSchema(
223
+ pageType,
224
+ pageName,
225
+ pageUrl,
226
+ typeof speakable === "object" ? speakable : void 0
227
+ );
228
+ allSchemas.push(speakableSchema);
229
+ }
230
+ if (allSchemas.length === 0 && !includeEntityGraph) {
231
+ try {
232
+ const fallbackSchemas = await chunkDW5UJKHH_js.getEntityEnhancedSchema(path);
233
+ allSchemas.push(...fallbackSchemas);
234
+ } catch {
235
+ }
236
+ }
237
+ if (allSchemas.length === 0) {
238
+ return null;
239
+ }
240
+ const schemaContent = allSchemas.length === 1 ? allSchemas[0] : {
241
+ "@context": "https://schema.org",
242
+ "@graph": allSchemas.filter((s) => s && typeof s === "object").map((s) => {
243
+ const { "@context": _, ...rest } = s;
244
+ return rest;
245
+ })
246
+ };
247
+ const finalSchema = allSchemas.length === 1 ? { "@context": "https://schema.org", ...schemaContent } : schemaContent;
248
+ return /* @__PURE__ */ jsxRuntime.jsx(
249
+ "script",
250
+ {
251
+ type: "application/ld+json",
252
+ async: true,
253
+ dangerouslySetInnerHTML: {
254
+ __html: JSON.stringify(finalSchema, null, 0)
255
+ }
256
+ }
257
+ );
258
+ }
259
+ async function LLMSchema({
260
+ path
261
+ }) {
262
+ const { page: pageData } = await chunkDW5UJKHH_js.getSEOPageData(path);
263
+ if (!pageData?.managed_llm_schema) {
264
+ return null;
265
+ }
266
+ const llmSchema = {
267
+ "@context": "https://schema.org",
268
+ "@type": "WebPage",
269
+ ...pageData.managed_llm_schema,
270
+ // Add AI-specific metadata hints
271
+ additionalType: "https://uptrade.ai/ns/LLMOptimizedContent"
272
+ };
273
+ return /* @__PURE__ */ jsxRuntime.jsx(
274
+ "script",
275
+ {
276
+ type: "application/ld+json",
277
+ "data-llm-optimized": "true",
278
+ async: true,
279
+ dangerouslySetInnerHTML: {
280
+ __html: JSON.stringify(llmSchema, null, 0)
281
+ }
282
+ }
283
+ );
284
+ }
285
+ function createSchema(type, data) {
286
+ return {
287
+ "@context": "https://schema.org",
288
+ "@type": type,
289
+ ...data
290
+ };
291
+ }
292
+ function createSpeakableWebPageSchema(type, name, url, speakable) {
293
+ const speakableSpec = {
294
+ "@type": "SpeakableSpecification"
295
+ };
296
+ if (speakable?.cssSelector?.length) {
297
+ speakableSpec.cssSelector = speakable.cssSelector;
298
+ } else if (speakable?.xpath?.length) {
299
+ speakableSpec.xpath = speakable.xpath;
300
+ } else {
301
+ speakableSpec.cssSelector = DEFAULT_SPEAKABLE_SELECTORS;
302
+ }
303
+ return {
304
+ "@context": "https://schema.org",
305
+ "@type": type,
306
+ name,
307
+ url,
308
+ speakable: speakableSpec
309
+ };
310
+ }
311
+ function createBreadcrumbSchema(baseUrl, path, labels) {
312
+ const segments = path.split("/").filter(Boolean);
313
+ const items = segments.map((segment, index) => {
314
+ const itemPath = "/" + segments.slice(0, index + 1).join("/");
315
+ const label = labels?.[segment] || segment.replace(/-/g, " ").replace(/\b\w/g, (l) => l.toUpperCase());
316
+ return {
317
+ "@type": "ListItem",
318
+ position: index + 1,
319
+ name: label,
320
+ item: `${baseUrl}${itemPath}`
321
+ };
322
+ });
323
+ items.unshift({
324
+ "@type": "ListItem",
325
+ position: 0,
326
+ name: "Home",
327
+ item: baseUrl
328
+ });
329
+ items.forEach((item, index) => {
330
+ item.position = index + 1;
331
+ });
332
+ return createSchema("BreadcrumbList", {
333
+ itemListElement: items
334
+ });
335
+ }
336
+ var faqStyles = `
337
+ .uptrade-faq-items {
338
+ display: flex;
339
+ flex-direction: column;
340
+ gap: 0;
341
+ }
342
+ .uptrade-faq-item {
343
+ border-bottom: 1px solid rgba(0,0,0,0.08);
344
+ }
345
+ .uptrade-faq-item:first-child {
346
+ border-top: 1px solid rgba(0,0,0,0.08);
347
+ }
348
+ .uptrade-faq-item summary {
349
+ display: flex;
350
+ align-items: center;
351
+ justify-content: space-between;
352
+ cursor: pointer;
353
+ padding: 1.25rem 0;
354
+ font-weight: 600;
355
+ font-size: 1.05rem;
356
+ line-height: 1.5;
357
+ color: inherit;
358
+ list-style: none;
359
+ user-select: none;
360
+ transition: color 0.15s ease;
361
+ }
362
+ .uptrade-faq-item summary:hover {
363
+ opacity: 0.8;
364
+ }
365
+ .uptrade-faq-item summary::-webkit-details-marker {
366
+ display: none;
367
+ }
368
+ .uptrade-faq-item summary::marker {
369
+ display: none;
370
+ content: '';
371
+ }
372
+ .uptrade-faq-chevron {
373
+ flex-shrink: 0;
374
+ width: 1.25rem;
375
+ height: 1.25rem;
376
+ margin-left: 1rem;
377
+ transition: transform 0.2s ease;
378
+ opacity: 0.5;
379
+ }
380
+ .uptrade-faq-item[open] .uptrade-faq-chevron {
381
+ transform: rotate(180deg);
382
+ }
383
+ .uptrade-faq-answer {
384
+ padding: 0 0 1.25rem 0;
385
+ color: rgba(0,0,0,0.6);
386
+ line-height: 1.75;
387
+ font-size: 0.95rem;
388
+ }
389
+ .uptrade-faq-answer p {
390
+ margin: 0 0 0.75rem 0;
391
+ }
392
+ .uptrade-faq-answer p:last-child {
393
+ margin-bottom: 0;
394
+ }
395
+ .uptrade-faq-answer ul, .uptrade-faq-answer ol {
396
+ padding-left: 1.5rem;
397
+ margin: 0.5rem 0;
398
+ }
399
+ .uptrade-faq-answer li {
400
+ margin-bottom: 0.25rem;
401
+ }
402
+ .uptrade-faq-answer a {
403
+ color: inherit;
404
+ text-decoration: underline;
405
+ text-underline-offset: 2px;
406
+ }
407
+ .uptrade-faq-title {
408
+ font-size: 1.75rem;
409
+ font-weight: 700;
410
+ margin-bottom: 0.5rem;
411
+ }
412
+ .uptrade-faq-description {
413
+ color: rgba(0,0,0,0.6);
414
+ margin-bottom: 2rem;
415
+ font-size: 1rem;
416
+ line-height: 1.6;
417
+ }
418
+ `;
419
+ function ChevronDown() {
420
+ return /* @__PURE__ */ jsxRuntime.jsx(
421
+ "svg",
422
+ {
423
+ className: "uptrade-faq-chevron",
424
+ xmlns: "http://www.w3.org/2000/svg",
425
+ viewBox: "0 0 24 24",
426
+ fill: "none",
427
+ stroke: "currentColor",
428
+ strokeWidth: "2",
429
+ strokeLinecap: "round",
430
+ strokeLinejoin: "round",
431
+ children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "6 9 12 15 18 9" })
432
+ }
433
+ );
434
+ }
435
+ function DefaultFAQItem({ item, index }) {
436
+ return /* @__PURE__ */ jsxRuntime.jsxs("details", { className: "uptrade-faq-item", children: [
437
+ /* @__PURE__ */ jsxRuntime.jsxs("summary", { children: [
438
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: item.question }),
439
+ /* @__PURE__ */ jsxRuntime.jsx(ChevronDown, {})
440
+ ] }),
441
+ /* @__PURE__ */ jsxRuntime.jsx(
442
+ "div",
443
+ {
444
+ className: "uptrade-faq-answer",
445
+ dangerouslySetInnerHTML: { __html: item.answer }
446
+ }
447
+ )
448
+ ] }, item.id);
449
+ }
450
+ function generateFAQSchema(items) {
451
+ return createSchema("FAQPage", {
452
+ mainEntity: items.filter((item) => item.is_visible).map((item) => ({
453
+ "@type": "Question",
454
+ name: item.question,
455
+ acceptedAnswer: {
456
+ "@type": "Answer",
457
+ text: item.answer
458
+ }
459
+ }))
460
+ });
461
+ }
462
+ async function ManagedFAQ({
463
+ path,
464
+ className,
465
+ renderItem,
466
+ includeSchema = true,
467
+ showTitle = true
468
+ }) {
469
+ const faqData = await chunkDW5UJKHH_js.getFAQData(path);
470
+ if (!faqData || !faqData.items?.length) {
471
+ return null;
472
+ }
473
+ const visibleItems = faqData.items.filter((item) => item.is_visible);
474
+ if (visibleItems.length === 0) {
475
+ return null;
476
+ }
477
+ visibleItems.sort((a, b) => a.order - b.order);
478
+ const shouldIncludeSchema = includeSchema && faqData.include_schema;
479
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
480
+ shouldIncludeSchema && /* @__PURE__ */ jsxRuntime.jsx(
481
+ "script",
482
+ {
483
+ type: "application/ld+json",
484
+ dangerouslySetInnerHTML: {
485
+ __html: JSON.stringify(generateFAQSchema(visibleItems), null, 0)
486
+ }
487
+ }
488
+ ),
489
+ /* @__PURE__ */ jsxRuntime.jsx("style", { dangerouslySetInnerHTML: { __html: faqStyles } }),
490
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: className || "uptrade-faq", children: [
491
+ showTitle && faqData.title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "uptrade-faq-title", children: faqData.title }),
492
+ faqData.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "uptrade-faq-description", children: faqData.description }),
493
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "uptrade-faq-items", children: visibleItems.map(
494
+ (item, index) => renderItem ? renderItem(item, index) : /* @__PURE__ */ jsxRuntime.jsx(DefaultFAQItem, { item, index }, item.id)
495
+ ) })
496
+ ] })
497
+ ] });
498
+ }
499
+ function DefaultLinkRenderer({ link }) {
500
+ const href = link.target_url || link.target_path;
501
+ return /* @__PURE__ */ jsxRuntime.jsx(
502
+ "a",
503
+ {
504
+ href,
505
+ className: "uptrade-internal-link",
506
+ children: link.anchor_text
507
+ },
508
+ link.id
509
+ );
510
+ }
511
+ async function ManagedInternalLinks({
512
+ path,
513
+ position = "bottom",
514
+ limit = 5,
515
+ className,
516
+ renderLink
517
+ }) {
518
+ const links = await chunkDW5UJKHH_js.getInternalLinks(path, { position, limit });
519
+ if (!links.length) {
520
+ return null;
521
+ }
522
+ const containerClass = className || `uptrade-internal-links uptrade-internal-links--${position}`;
523
+ if (position === "inline") {
524
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: containerClass, children: links.map(
525
+ (link) => renderLink ? renderLink(link) : /* @__PURE__ */ jsxRuntime.jsx(DefaultLinkRenderer, { link }, link.id)
526
+ ) });
527
+ }
528
+ if (position === "sidebar") {
529
+ return /* @__PURE__ */ jsxRuntime.jsxs("aside", { className: containerClass, children: [
530
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "uptrade-internal-links-title", children: "Related Pages" }),
531
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "uptrade-internal-links-list", children: links.map((link) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: renderLink ? renderLink(link) : /* @__PURE__ */ jsxRuntime.jsx(DefaultLinkRenderer, { link }) }, link.id)) })
532
+ ] });
533
+ }
534
+ if (position === "related") {
535
+ return /* @__PURE__ */ jsxRuntime.jsxs("nav", { className: containerClass, "aria-label": "Related content", children: [
536
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "uptrade-internal-links-title", children: "You May Also Like" }),
537
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "uptrade-internal-links-grid", children: links.map((link) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "uptrade-internal-link-card", children: [
538
+ renderLink ? renderLink(link) : /* @__PURE__ */ jsxRuntime.jsx(DefaultLinkRenderer, { link }),
539
+ link.context && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "uptrade-internal-link-context", children: link.context })
540
+ ] }, link.id)) })
541
+ ] });
542
+ }
543
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: containerClass, children: [
544
+ /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "uptrade-internal-links-title", children: "Related Articles" }),
545
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "uptrade-internal-links-list", children: links.map((link) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: renderLink ? renderLink(link) : /* @__PURE__ */ jsxRuntime.jsx(DefaultLinkRenderer, { link }) }, link.id)) })
546
+ ] });
547
+ }
548
+ function renderMarkdown(content) {
549
+ return content.replace(/^### (.*$)/gim, "<h3>$1</h3>").replace(/^## (.*$)/gim, "<h2>$1</h2>").replace(/^# (.*$)/gim, "<h1>$1</h1>").replace(/\*\*(.*)\*\*/gim, "<strong>$1</strong>").replace(/\*(.*)\*/gim, "<em>$1</em>").replace(/\[(.*?)\]\((.*?)\)/gim, '<a href="$2">$1</a>').replace(/\n\n/gim, "</p><p>").replace(/^(.+)$/gim, "<p>$1</p>");
550
+ }
551
+ function injectEntityAnnotations(html, entities) {
552
+ if (!entities.length) return html;
553
+ let annotatedHtml = html;
554
+ const sortedEntities = [...entities].sort((a, b) => b.name.length - a.name.length);
555
+ for (const entity of sortedEntities) {
556
+ if (entity.name.length < 3) continue;
557
+ const regex = new RegExp(
558
+ `(?<![\\w-])(?<!data-sonor-entity=")${escapeRegExp(entity.name)}(?![\\w-])`,
559
+ "gi"
560
+ );
561
+ const schemaType = getSchemaTypeForEntity(entity.entity_type);
562
+ annotatedHtml = annotatedHtml.replace(regex, (match) => {
563
+ return `<span class="aeo-entity aeo-entity-${entity.entity_type}" data-sonor-entity="${entity.id}" data-sonor-entity-type="${entity.entity_type}" data-sonor-entity-name="${entity.name}" itemscope itemtype="https://schema.org/${schemaType}"><span itemprop="name">${match}</span></span>`;
564
+ });
565
+ }
566
+ return annotatedHtml;
567
+ }
568
+ function escapeRegExp(string) {
569
+ return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
570
+ }
571
+ function getSchemaTypeForEntity(entityType) {
572
+ const typeMap = {
573
+ organization: "Organization",
574
+ person: "Person",
575
+ service: "Service",
576
+ product: "Product",
577
+ location: "Place",
578
+ concept: "Thing",
579
+ credential: "EducationalOccupationalCredential"
580
+ };
581
+ return typeMap[entityType] || "Thing";
582
+ }
583
+ async function ManagedContent({
584
+ path,
585
+ section,
586
+ fallback,
587
+ className,
588
+ components = {},
589
+ injectEntityAnnotations: shouldInjectEntities = false
590
+ }) {
591
+ const block = await chunkDW5UJKHH_js.getContentBlock(path, section);
592
+ if (!block) {
593
+ if (fallback) {
594
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: fallback });
595
+ }
596
+ return null;
597
+ }
598
+ let entities = [];
599
+ if (shouldInjectEntities) {
600
+ try {
601
+ entities = await chunkDW5UJKHH_js.getEntities();
602
+ } catch (err) {
603
+ console.warn("@sonordev/seo: Failed to fetch entities for annotation:", err);
604
+ }
605
+ }
606
+ const containerClass = className || `uptrade-content uptrade-content--${section}`;
607
+ const processHtml = (html) => {
608
+ if (shouldInjectEntities && entities.length > 0) {
609
+ return injectEntityAnnotations(html, entities);
610
+ }
611
+ return html;
612
+ };
613
+ switch (block.content_type) {
614
+ case "html":
615
+ return /* @__PURE__ */ jsxRuntime.jsx(
616
+ "div",
617
+ {
618
+ className: containerClass,
619
+ dangerouslySetInnerHTML: { __html: processHtml(block.content) }
620
+ }
621
+ );
622
+ case "markdown":
623
+ const htmlContent = processHtml(renderMarkdown(block.content));
624
+ return /* @__PURE__ */ jsxRuntime.jsx(
625
+ "div",
626
+ {
627
+ className: containerClass,
628
+ dangerouslySetInnerHTML: { __html: htmlContent }
629
+ }
630
+ );
631
+ case "json":
632
+ const jsonData = typeof block.content === "string" ? JSON.parse(block.content) : block.content;
633
+ return /* @__PURE__ */ jsxRuntime.jsxs(
634
+ "div",
635
+ {
636
+ className: containerClass,
637
+ "data-content": JSON.stringify(jsonData),
638
+ children: [
639
+ jsonData.title && /* @__PURE__ */ jsxRuntime.jsx("h2", { children: jsonData.title }),
640
+ jsonData.subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "subtitle", children: jsonData.subtitle }),
641
+ jsonData.content && /* @__PURE__ */ jsxRuntime.jsx("div", { dangerouslySetInnerHTML: { __html: jsonData.content } }),
642
+ jsonData.items && /* @__PURE__ */ jsxRuntime.jsx("ul", { children: jsonData.items.map((item, index) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: typeof item === "string" ? item : item.text }, index)) })
643
+ ]
644
+ }
645
+ );
646
+ case "react":
647
+ const componentData = typeof block.content === "string" ? JSON.parse(block.content) : block.content;
648
+ const componentName = componentData.component;
649
+ const componentProps = componentData.props || {};
650
+ const Component = components[componentName];
651
+ if (!Component) {
652
+ console.warn(`@sonordev/seo: Component "${componentName}" not found in components map`);
653
+ return fallback ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: fallback }) : null;
654
+ }
655
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: containerClass, children: /* @__PURE__ */ jsxRuntime.jsx(Component, { ...componentProps }) });
656
+ default:
657
+ console.warn(`@sonordev/seo: Unknown content type "${block.content_type}"`);
658
+ return fallback ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: fallback }) : null;
659
+ }
660
+ }
661
+ async function getManagedContentData(path, section) {
662
+ return chunkDW5UJKHH_js.getContentBlock(path, section);
663
+ }
664
+ function getApiConfig() {
665
+ const apiUrl = process.env.UPTRADE_API_URL || process.env.NEXT_PUBLIC_UPTRADE_API_URL || "https://api.uptrademedia.com";
666
+ return { apiUrl };
667
+ }
668
+ var getLocationSection = react.cache(async (projectId, path, section) => {
669
+ const { apiUrl } = getApiConfig();
670
+ try {
671
+ const response = await fetch(`${apiUrl}/api/public/seo/location-content`, {
672
+ method: "POST",
673
+ headers: { "Content-Type": "application/json" },
674
+ body: JSON.stringify({
675
+ project_id: projectId,
676
+ path,
677
+ section
678
+ }),
679
+ next: { revalidate: 3600 }
680
+ // Cache for 1 hour
681
+ });
682
+ if (!response.ok) {
683
+ console.error(`LocationPageContent: Failed to fetch section "${section}" for path "${path}"`);
684
+ return null;
685
+ }
686
+ const data = await response.json();
687
+ return data;
688
+ } catch (error) {
689
+ console.error("LocationPageContent: API error:", error);
690
+ return null;
691
+ }
692
+ });
693
+ function HeroRenderer({ data, className }) {
694
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: className || "location-hero", children: [
695
+ /* @__PURE__ */ jsxRuntime.jsx("h1", { children: data.title }),
696
+ data.subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "subtitle", children: data.subtitle }),
697
+ data.stats && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "stats-grid", children: data.stats.map((stat, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "stat", children: [
698
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "stat-value", children: stat.value }),
699
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "stat-label", children: stat.label })
700
+ ] }, i)) }),
701
+ data.cta_text && data.cta_href && /* @__PURE__ */ jsxRuntime.jsx("a", { href: data.cta_href, className: "cta-button", children: data.cta_text })
702
+ ] });
703
+ }
704
+ function TextRenderer({ data, className }) {
705
+ if (data.html) {
706
+ return /* @__PURE__ */ jsxRuntime.jsx(
707
+ "section",
708
+ {
709
+ className: className || "location-text",
710
+ dangerouslySetInnerHTML: { __html: data.html }
711
+ }
712
+ );
713
+ }
714
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: className || "location-text", children: [
715
+ data.heading && /* @__PURE__ */ jsxRuntime.jsx("h2", { children: data.heading }),
716
+ data.paragraphs.map((p, i) => /* @__PURE__ */ jsxRuntime.jsx("p", { children: p }, i))
717
+ ] });
718
+ }
719
+ function ServicesGridRenderer({ data, className }) {
720
+ return /* @__PURE__ */ jsxRuntime.jsx("section", { className: className || "location-services-grid", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "services-list", children: data.services.map((service, i) => /* @__PURE__ */ jsxRuntime.jsxs("a", { href: service.href, className: "service-card", children: [
721
+ service.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "service-icon", children: service.icon }),
722
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { children: service.title }),
723
+ /* @__PURE__ */ jsxRuntime.jsx("p", { children: service.description })
724
+ ] }, i)) }) });
725
+ }
726
+ function DefaultRenderer({ data, className }) {
727
+ if (process.env.NODE_ENV === "development") {
728
+ return /* @__PURE__ */ jsxRuntime.jsx("section", { className, children: /* @__PURE__ */ jsxRuntime.jsx("pre", { style: { fontSize: "12px", background: "#f0f0f0", padding: "1rem" }, children: JSON.stringify(data, null, 2) }) });
729
+ }
730
+ if (typeof data.content === "string") {
731
+ return /* @__PURE__ */ jsxRuntime.jsx(
732
+ "section",
733
+ {
734
+ className,
735
+ dangerouslySetInnerHTML: { __html: data.content }
736
+ }
737
+ );
738
+ }
739
+ return null;
740
+ }
741
+ async function LocationPageContent({
742
+ projectId,
743
+ path,
744
+ section,
745
+ fallback = null,
746
+ className,
747
+ render
748
+ }) {
749
+ const data = await getLocationSection(projectId, path, section);
750
+ if (!data) {
751
+ return fallback;
752
+ }
753
+ if (render) {
754
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: render(data) });
755
+ }
756
+ switch (data.type) {
757
+ case "hero":
758
+ return /* @__PURE__ */ jsxRuntime.jsx(HeroRenderer, { data: data.content, className });
759
+ case "text":
760
+ case "intro":
761
+ case "about":
762
+ case "about_location":
763
+ return /* @__PURE__ */ jsxRuntime.jsx(TextRenderer, { data: data.content, className });
764
+ case "services_grid":
765
+ case "services":
766
+ return /* @__PURE__ */ jsxRuntime.jsx(ServicesGridRenderer, { data: data.content, className });
767
+ default:
768
+ return /* @__PURE__ */ jsxRuntime.jsx(DefaultRenderer, { data, className });
769
+ }
770
+ }
771
+
772
+ Object.defineProperty(exports, "ManagedNoScripts", {
773
+ enumerable: true,
774
+ get: function () { return chunkEEZCR6E6_js.ManagedNoScripts; }
775
+ });
776
+ Object.defineProperty(exports, "ManagedScripts", {
777
+ enumerable: true,
778
+ get: function () { return chunkEEZCR6E6_js.ManagedScripts; }
779
+ });
780
+ Object.defineProperty(exports, "SitemapSync", {
781
+ enumerable: true,
782
+ get: function () { return chunkLIVWLY2P_js.SitemapSync; }
783
+ });
784
+ Object.defineProperty(exports, "generateSitemap", {
785
+ enumerable: true,
786
+ get: function () { return chunkXZJOZJB6_js.generateSitemap; }
787
+ });
788
+ Object.defineProperty(exports, "getRedirect", {
789
+ enumerable: true,
790
+ get: function () { return chunkXZJOZJB6_js.getRedirect; }
791
+ });
792
+ Object.defineProperty(exports, "getRobotsDirective", {
793
+ enumerable: true,
794
+ get: function () { return chunkXZJOZJB6_js.getRobotsDirective; }
795
+ });
796
+ Object.defineProperty(exports, "isIndexable", {
797
+ enumerable: true,
798
+ get: function () { return chunkXZJOZJB6_js.isIndexable; }
799
+ });
800
+ Object.defineProperty(exports, "getABTest", {
801
+ enumerable: true,
802
+ get: function () { return chunkDW5UJKHH_js.getABTest; }
803
+ });
804
+ Object.defineProperty(exports, "getContentBlock", {
805
+ enumerable: true,
806
+ get: function () { return chunkDW5UJKHH_js.getContentBlock; }
807
+ });
808
+ Object.defineProperty(exports, "getEntities", {
809
+ enumerable: true,
810
+ get: function () { return chunkDW5UJKHH_js.getEntities; }
811
+ });
812
+ Object.defineProperty(exports, "getEntityEnhancedSchema", {
813
+ enumerable: true,
814
+ get: function () { return chunkDW5UJKHH_js.getEntityEnhancedSchema; }
815
+ });
816
+ Object.defineProperty(exports, "getFAQData", {
817
+ enumerable: true,
818
+ get: function () { return chunkDW5UJKHH_js.getFAQData; }
819
+ });
820
+ Object.defineProperty(exports, "getInternalLinks", {
821
+ enumerable: true,
822
+ get: function () { return chunkDW5UJKHH_js.getInternalLinks; }
823
+ });
824
+ Object.defineProperty(exports, "getManagedScripts", {
825
+ enumerable: true,
826
+ get: function () { return chunkDW5UJKHH_js.getManagedScripts; }
827
+ });
828
+ Object.defineProperty(exports, "getPrimaryEntity", {
829
+ enumerable: true,
830
+ get: function () { return chunkDW5UJKHH_js.getPrimaryEntity; }
831
+ });
832
+ Object.defineProperty(exports, "getRedirectData", {
833
+ enumerable: true,
834
+ get: function () { return chunkDW5UJKHH_js.getRedirectData; }
835
+ });
836
+ Object.defineProperty(exports, "getRobotsData", {
837
+ enumerable: true,
838
+ get: function () { return chunkDW5UJKHH_js.getRobotsData; }
839
+ });
840
+ Object.defineProperty(exports, "getSEOPageData", {
841
+ enumerable: true,
842
+ get: function () { return chunkDW5UJKHH_js.getSEOPageData; }
843
+ });
844
+ Object.defineProperty(exports, "getSchemaMarkups", {
845
+ enumerable: true,
846
+ get: function () { return chunkDW5UJKHH_js.getSchemaMarkups; }
847
+ });
848
+ Object.defineProperty(exports, "getSitemapEntries", {
849
+ enumerable: true,
850
+ get: function () { return chunkDW5UJKHH_js.getSitemapEntries; }
851
+ });
852
+ Object.defineProperty(exports, "getVisibilityScore", {
853
+ enumerable: true,
854
+ get: function () { return chunkDW5UJKHH_js.getVisibilityScore; }
855
+ });
856
+ Object.defineProperty(exports, "getVisibilitySummary", {
857
+ enumerable: true,
858
+ get: function () { return chunkDW5UJKHH_js.getVisibilitySummary; }
859
+ });
860
+ Object.defineProperty(exports, "recordABImpression", {
861
+ enumerable: true,
862
+ get: function () { return chunkDW5UJKHH_js.recordABImpression; }
863
+ });
864
+ Object.defineProperty(exports, "registerSitemap", {
865
+ enumerable: true,
866
+ get: function () { return chunkDW5UJKHH_js.registerSitemap; }
867
+ });
868
+ exports.LLMSchema = LLMSchema;
869
+ exports.LocationPageContent = LocationPageContent;
870
+ exports.ManagedContent = ManagedContent;
871
+ exports.ManagedFAQ = ManagedFAQ;
872
+ exports.ManagedInternalLinks = ManagedInternalLinks;
873
+ exports.ManagedSchema = ManagedSchema;
874
+ exports.createBreadcrumbSchema = createBreadcrumbSchema;
875
+ exports.createSchema = createSchema;
876
+ exports.getABVariant = getABVariant;
877
+ exports.getLocationSection = getLocationSection;
878
+ exports.getManagedContentData = getManagedContentData;
879
+ exports.getManagedMetadata = getManagedMetadata;
880
+ exports.getManagedMetadataWithAB = getManagedMetadataWithAB;
881
+ exports.withManagedMetadata = withManagedMetadata;
882
+ //# sourceMappingURL=index.js.map
883
+ //# sourceMappingURL=index.js.map