@sonordev/site-kit 6.1.1 → 6.2.0

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 (270) hide show
  1. package/agent-manifest.json +1 -1
  2. package/dist/{AnalyticsProvider-5G5AFHZN.js → AnalyticsProvider-AT5XFQKT.js} +10 -10
  3. package/dist/{AnalyticsProvider-5G5AFHZN.js.map → AnalyticsProvider-AT5XFQKT.js.map} +1 -1
  4. package/dist/{AnalyticsProvider-33L4E6LO.mjs → AnalyticsProvider-KPK3N52Q.mjs} +6 -6
  5. package/dist/{AnalyticsProvider-33L4E6LO.mjs.map → AnalyticsProvider-KPK3N52Q.mjs.map} +1 -1
  6. package/dist/{ArticleViewTracker-U2KFUSZF.js → ArticleViewTracker-3PFASMTC.js} +6 -6
  7. package/dist/{ArticleViewTracker-U2KFUSZF.js.map → ArticleViewTracker-3PFASMTC.js.map} +1 -1
  8. package/dist/{ArticleViewTracker-VZRMPK4S.mjs → ArticleViewTracker-KIKKHBO6.mjs} +5 -5
  9. package/dist/{ArticleViewTracker-VZRMPK4S.mjs.map → ArticleViewTracker-KIKKHBO6.mjs.map} +1 -1
  10. package/dist/ChatWidget-6PXV6RSI.mjs +17 -0
  11. package/dist/{ChatWidget-LH3QZYKR.mjs.map → ChatWidget-6PXV6RSI.mjs.map} +1 -1
  12. package/dist/ChatWidget-D27PSWMO.js +34 -0
  13. package/dist/{ChatWidget-RUCQMCMN.js.map → ChatWidget-D27PSWMO.js.map} +1 -1
  14. package/dist/EngageWidget-SPZL3KPX.js +21 -0
  15. package/dist/{EngageWidget-X2CBW7DV.js.map → EngageWidget-SPZL3KPX.js.map} +1 -1
  16. package/dist/EngageWidget-YRTVPYAY.mjs +12 -0
  17. package/dist/{EngageWidget-34BQXU7K.mjs.map → EngageWidget-YRTVPYAY.mjs.map} +1 -1
  18. package/dist/{FileField-2MMV53BG.js → FileField-6RC33ORG.js} +6 -6
  19. package/dist/{FileField-2MMV53BG.js.map → FileField-6RC33ORG.js.map} +1 -1
  20. package/dist/{FileField-REUU36RJ.mjs → FileField-GXNG2LH2.mjs} +5 -5
  21. package/dist/{FileField-REUU36RJ.mjs.map → FileField-GXNG2LH2.mjs.map} +1 -1
  22. package/dist/{FormSpotlight-Y27TPQ4G.js → FormSpotlight-73E2CMV6.js} +9 -9
  23. package/dist/{FormSpotlight-Y27TPQ4G.js.map → FormSpotlight-73E2CMV6.js.map} +1 -1
  24. package/dist/{FormSpotlight-ZV3IS66K.mjs → FormSpotlight-YDUF3TSC.mjs} +3 -3
  25. package/dist/{FormSpotlight-ZV3IS66K.mjs.map → FormSpotlight-YDUF3TSC.mjs.map} +1 -1
  26. package/dist/{FormStage-K7Z6IEPM.js → FormStage-BL5FREFE.js} +9 -9
  27. package/dist/{FormStage-K7Z6IEPM.js.map → FormStage-BL5FREFE.js.map} +1 -1
  28. package/dist/{FormStage-6NUGCDJR.mjs → FormStage-VJZHYW6J.mjs} +3 -3
  29. package/dist/{FormStage-6NUGCDJR.mjs.map → FormStage-VJZHYW6J.mjs.map} +1 -1
  30. package/dist/ManagedForm-FUIOTKSI.js +25 -0
  31. package/dist/{ManagedForm-O67ILXN7.js.map → ManagedForm-FUIOTKSI.js.map} +1 -1
  32. package/dist/ManagedForm-Z2S37RFX.mjs +16 -0
  33. package/dist/{ManagedForm-EUDKMS5G.mjs.map → ManagedForm-Z2S37RFX.mjs.map} +1 -1
  34. package/dist/{ManagedNewsletterForm-QBJODAIA.js → ManagedNewsletterForm-3D3IW6JG.js} +8 -8
  35. package/dist/{ManagedNewsletterForm-QBJODAIA.js.map → ManagedNewsletterForm-3D3IW6JG.js.map} +1 -1
  36. package/dist/{ManagedNewsletterForm-IGWTZW7X.mjs → ManagedNewsletterForm-ZXASCHZV.mjs} +7 -7
  37. package/dist/{ManagedNewsletterForm-IGWTZW7X.mjs.map → ManagedNewsletterForm-ZXASCHZV.mjs.map} +1 -1
  38. package/dist/{SignalCore-UR4KVU5X.mjs → SignalCore-LKSU7UYG.mjs} +5 -5
  39. package/dist/{SignalCore-UR4KVU5X.mjs.map → SignalCore-LKSU7UYG.mjs.map} +1 -1
  40. package/dist/{SignalCore-KQDRH44V.js → SignalCore-RNMT4ZP4.js} +11 -11
  41. package/dist/{SignalCore-KQDRH44V.js.map → SignalCore-RNMT4ZP4.js.map} +1 -1
  42. package/dist/SitemapSync-IDJ3PXER.js +18 -0
  43. package/dist/{SitemapSync-DQALPBTR.js.map → SitemapSync-IDJ3PXER.js.map} +1 -1
  44. package/dist/SitemapSync-NTYKLAEH.mjs +9 -0
  45. package/dist/{SitemapSync-QYV3X5LH.mjs.map → SitemapSync-NTYKLAEH.mjs.map} +1 -1
  46. package/dist/analytics/index.js +9 -9
  47. package/dist/analytics/index.mjs +4 -4
  48. package/dist/articles/index.js +1 -1
  49. package/dist/articles/index.mjs +1 -1
  50. package/dist/articles/server-ui.js +1 -1
  51. package/dist/articles/server-ui.mjs +1 -1
  52. package/dist/brand/extract-brand-profile.d.ts +2 -7
  53. package/dist/brand/extract-brand-profile.d.ts.map +1 -1
  54. package/dist/{chunk-3SHAY7PK.mjs → chunk-22WIVF4O.mjs} +234 -197
  55. package/dist/chunk-22WIVF4O.mjs.map +1 -0
  56. package/dist/{chunk-VNJTU6LG.js → chunk-3NDDCSWR.js} +15 -15
  57. package/dist/{chunk-VNJTU6LG.js.map → chunk-3NDDCSWR.js.map} +1 -1
  58. package/dist/{chunk-MSSFRRXJ.mjs → chunk-3T74AR7S.mjs} +4 -4
  59. package/dist/{chunk-MSSFRRXJ.mjs.map → chunk-3T74AR7S.mjs.map} +1 -1
  60. package/dist/{chunk-OP42HO3Z.mjs → chunk-4FWJ5K5O.mjs} +3 -3
  61. package/dist/{chunk-OP42HO3Z.mjs.map → chunk-4FWJ5K5O.mjs.map} +1 -1
  62. package/dist/{chunk-CJ5YPYAE.mjs → chunk-53OU4TGU.mjs} +4 -4
  63. package/dist/{chunk-CJ5YPYAE.mjs.map → chunk-53OU4TGU.mjs.map} +1 -1
  64. package/dist/{chunk-NJSD5QY6.js → chunk-5IOMLUQS.js} +7 -7
  65. package/dist/{chunk-NJSD5QY6.js.map → chunk-5IOMLUQS.js.map} +1 -1
  66. package/dist/{chunk-S24WZNFP.js → chunk-5L46GS7N.js} +6 -6
  67. package/dist/{chunk-S24WZNFP.js.map → chunk-5L46GS7N.js.map} +1 -1
  68. package/dist/{chunk-6K3YRSYN.js → chunk-7JRFYQKN.js} +10 -10
  69. package/dist/{chunk-6K3YRSYN.js.map → chunk-7JRFYQKN.js.map} +1 -1
  70. package/dist/{chunk-MJTHYT3D.js → chunk-7JYLE3X6.js} +4 -4
  71. package/dist/{chunk-MJTHYT3D.js.map → chunk-7JYLE3X6.js.map} +1 -1
  72. package/dist/{chunk-JOYMIGR2.mjs → chunk-7K6L33BX.mjs} +22 -22
  73. package/dist/{chunk-R2BHRDPZ.mjs → chunk-7OOPIYLP.mjs} +3 -3
  74. package/dist/{chunk-R2BHRDPZ.mjs.map → chunk-7OOPIYLP.mjs.map} +1 -1
  75. package/dist/{chunk-WWJQGMMN.js → chunk-A4WTX36Y.js} +12 -12
  76. package/dist/{chunk-WWJQGMMN.js.map → chunk-A4WTX36Y.js.map} +1 -1
  77. package/dist/{chunk-AEW7EFYU.js → chunk-AEN7EL6N.js} +20 -6
  78. package/dist/chunk-AEN7EL6N.js.map +1 -0
  79. package/dist/{chunk-JS75ORH7.js → chunk-ATPQ6264.js} +24 -24
  80. package/dist/{chunk-7IM7VG4E.js → chunk-BYVAXSH5.js} +6 -6
  81. package/dist/{chunk-7IM7VG4E.js.map → chunk-BYVAXSH5.js.map} +1 -1
  82. package/dist/{chunk-ME5636V6.js → chunk-CRIZNSD2.js} +3 -3
  83. package/dist/{chunk-ME5636V6.js.map → chunk-CRIZNSD2.js.map} +1 -1
  84. package/dist/{chunk-YZMI7QQ2.mjs → chunk-EG3F5AHL.mjs} +4 -4
  85. package/dist/{chunk-YZMI7QQ2.mjs.map → chunk-EG3F5AHL.mjs.map} +1 -1
  86. package/dist/{chunk-VPZUQXZV.mjs → chunk-EJTRU275.mjs} +4 -4
  87. package/dist/{chunk-VPZUQXZV.mjs.map → chunk-EJTRU275.mjs.map} +1 -1
  88. package/dist/{chunk-MWX6QO7A.mjs → chunk-GSH4DBAD.mjs} +3 -3
  89. package/dist/{chunk-MWX6QO7A.mjs.map → chunk-GSH4DBAD.mjs.map} +1 -1
  90. package/dist/chunk-IMWON7OV.mjs +27 -0
  91. package/dist/chunk-IMWON7OV.mjs.map +1 -0
  92. package/dist/{chunk-HH5EMIXK.js → chunk-IPLOSM5F.js} +14 -14
  93. package/dist/{chunk-HH5EMIXK.js.map → chunk-IPLOSM5F.js.map} +1 -1
  94. package/dist/{chunk-OTCJRVFJ.js → chunk-ITJ5ZF33.js} +3 -3
  95. package/dist/{chunk-OTCJRVFJ.js.map → chunk-ITJ5ZF33.js.map} +1 -1
  96. package/dist/{chunk-U3SQBAUQ.mjs → chunk-IXJ2H4MU.mjs} +8 -8
  97. package/dist/{chunk-U3SQBAUQ.mjs.map → chunk-IXJ2H4MU.mjs.map} +1 -1
  98. package/dist/{chunk-7PCXI25T.mjs → chunk-JLVKZTYZ.mjs} +3 -3
  99. package/dist/{chunk-7PCXI25T.mjs.map → chunk-JLVKZTYZ.mjs.map} +1 -1
  100. package/dist/{chunk-U2DWXE2A.mjs → chunk-JOSSKN4J.mjs} +3 -3
  101. package/dist/{chunk-U2DWXE2A.mjs.map → chunk-JOSSKN4J.mjs.map} +1 -1
  102. package/dist/chunk-LGFRHT34.js +8 -0
  103. package/dist/{chunk-QWUDHOUE.js.map → chunk-LGFRHT34.js.map} +1 -1
  104. package/dist/chunk-M2N7NY3V.js +103 -0
  105. package/dist/chunk-M2N7NY3V.js.map +1 -0
  106. package/dist/{chunk-QYRJ4IQD.js → chunk-NJVU2DCX.js} +243 -204
  107. package/dist/chunk-NJVU2DCX.js.map +1 -0
  108. package/dist/chunk-NYXENHD2.mjs +96 -0
  109. package/dist/chunk-NYXENHD2.mjs.map +1 -0
  110. package/dist/{chunk-Y4A4G5XJ.js → chunk-OASA6M53.js} +5 -5
  111. package/dist/{chunk-Y4A4G5XJ.js.map → chunk-OASA6M53.js.map} +1 -1
  112. package/dist/{chunk-AG7MWWGP.mjs → chunk-P2UCNCQZ.mjs} +4 -4
  113. package/dist/{chunk-AG7MWWGP.mjs.map → chunk-P2UCNCQZ.mjs.map} +1 -1
  114. package/dist/{chunk-NNZDWY3L.mjs → chunk-RH4XEXTK.mjs} +3 -3
  115. package/dist/{chunk-46GMNQWN.js → chunk-RKRCWQBU.js} +3 -3
  116. package/dist/{chunk-46GMNQWN.js.map → chunk-RKRCWQBU.js.map} +1 -1
  117. package/dist/{chunk-VNSV5SY7.mjs → chunk-RKWBC43M.mjs} +3 -3
  118. package/dist/{chunk-VNSV5SY7.mjs.map → chunk-RKWBC43M.mjs.map} +1 -1
  119. package/dist/{chunk-BRED7YSL.js → chunk-RPDSNMVR.js} +11 -11
  120. package/dist/{chunk-BRED7YSL.js.map → chunk-RPDSNMVR.js.map} +1 -1
  121. package/dist/{chunk-3E7ZXPOB.mjs → chunk-RT7XKV6A.mjs} +4 -4
  122. package/dist/{chunk-3E7ZXPOB.mjs.map → chunk-RT7XKV6A.mjs.map} +1 -1
  123. package/dist/{chunk-JZCG25XK.js → chunk-RWJ3IJUP.js} +14 -14
  124. package/dist/{chunk-JZCG25XK.js.map → chunk-RWJ3IJUP.js.map} +1 -1
  125. package/dist/{chunk-22KPMJIQ.mjs → chunk-S4LTYXPR.mjs} +3 -3
  126. package/dist/{chunk-22KPMJIQ.mjs.map → chunk-S4LTYXPR.mjs.map} +1 -1
  127. package/dist/chunk-SIHPFJ6C.mjs +6 -0
  128. package/dist/{chunk-HQWPCX3N.mjs.map → chunk-SIHPFJ6C.mjs.map} +1 -1
  129. package/dist/{chunk-IPGIFBRN.js → chunk-T742S2CY.js} +4 -4
  130. package/dist/{chunk-IPGIFBRN.js.map → chunk-T742S2CY.js.map} +1 -1
  131. package/dist/{chunk-YCA4KCRF.mjs → chunk-TBAP7JNJ.mjs} +3 -3
  132. package/dist/{chunk-YCA4KCRF.mjs.map → chunk-TBAP7JNJ.mjs.map} +1 -1
  133. package/dist/{chunk-5YA6SI4Z.mjs → chunk-TIFVAASU.mjs} +2 -2
  134. package/dist/{chunk-MLXUMVBK.mjs → chunk-UCMMIGC6.mjs} +20 -6
  135. package/dist/chunk-UCMMIGC6.mjs.map +1 -0
  136. package/dist/{chunk-U577PJLH.mjs → chunk-UPF6HX5C.mjs} +7 -7
  137. package/dist/{chunk-U577PJLH.mjs.map → chunk-UPF6HX5C.mjs.map} +1 -1
  138. package/dist/{chunk-OB7K6EFK.js → chunk-UTCZNQ4G.js} +5 -5
  139. package/dist/{chunk-OB7K6EFK.js.map → chunk-UTCZNQ4G.js.map} +1 -1
  140. package/dist/{chunk-DGWFHL35.mjs → chunk-UV3HJDMT.mjs} +3 -3
  141. package/dist/{chunk-DGWFHL35.mjs.map → chunk-UV3HJDMT.mjs.map} +1 -1
  142. package/dist/{chunk-EF7QCYLF.js → chunk-W6GQNGIM.js} +4 -4
  143. package/dist/{chunk-EF7QCYLF.js.map → chunk-W6GQNGIM.js.map} +1 -1
  144. package/dist/{chunk-WVNUOUQI.mjs → chunk-W7D27SYJ.mjs} +3 -3
  145. package/dist/{chunk-WVNUOUQI.mjs.map → chunk-W7D27SYJ.mjs.map} +1 -1
  146. package/dist/{chunk-NK7ZWPAO.js → chunk-WI6RV2U4.js} +18 -18
  147. package/dist/{chunk-NK7ZWPAO.js.map → chunk-WI6RV2U4.js.map} +1 -1
  148. package/dist/{chunk-GZLMMX76.mjs → chunk-XAPGVZNN.mjs} +3 -3
  149. package/dist/{chunk-GZLMMX76.mjs.map → chunk-XAPGVZNN.mjs.map} +1 -1
  150. package/dist/{chunk-I7AZC5ZQ.js → chunk-XXSSUCJB.js} +2 -2
  151. package/dist/{chunk-3H3DTYFQ.js → chunk-Y63EG5CW.js} +8 -8
  152. package/dist/{chunk-3H3DTYFQ.js.map → chunk-Y63EG5CW.js.map} +1 -1
  153. package/dist/{chunk-D6VMDDQR.js → chunk-YNI7WQJN.js} +8 -8
  154. package/dist/{chunk-D6VMDDQR.js.map → chunk-YNI7WQJN.js.map} +1 -1
  155. package/dist/chunk-YZJ22HUQ.js +29 -0
  156. package/dist/chunk-YZJ22HUQ.js.map +1 -0
  157. package/dist/{chunk-OUZQL5PV.js → chunk-ZRCA5YGZ.js} +4 -4
  158. package/dist/{chunk-OUZQL5PV.js.map → chunk-ZRCA5YGZ.js.map} +1 -1
  159. package/dist/{chunk-7DMAVD7W.mjs → chunk-ZRD75SE5.mjs} +3 -3
  160. package/dist/{chunk-7DMAVD7W.mjs.map → chunk-ZRD75SE5.mjs.map} +1 -1
  161. package/dist/{chunk-NN2YE5WT.js → chunk-ZUQSVCMD.js} +3 -3
  162. package/dist/{chunk-6ZMEJSNX.mjs → chunk-ZZ6P27A5.mjs} +4 -4
  163. package/dist/{chunk-6ZMEJSNX.mjs.map → chunk-ZZ6P27A5.mjs.map} +1 -1
  164. package/dist/cli/index.js +211 -211
  165. package/dist/cli/index.mjs +151 -151
  166. package/dist/client/index.js +4 -4
  167. package/dist/client/index.mjs +3 -3
  168. package/dist/commerce/index.js +57 -57
  169. package/dist/commerce/index.mjs +5 -5
  170. package/dist/cta-bar/CtaBar.d.ts +15 -4
  171. package/dist/cta-bar/CtaBar.d.ts.map +1 -1
  172. package/dist/cta-bar/index.js +6 -12
  173. package/dist/cta-bar/index.js.map +1 -1
  174. package/dist/cta-bar/index.mjs +6 -12
  175. package/dist/cta-bar/index.mjs.map +1 -1
  176. package/dist/engage/ChatWidget.d.ts +60 -1
  177. package/dist/engage/ChatWidget.d.ts.map +1 -1
  178. package/dist/engage/EchoUiActions.d.ts +5 -2
  179. package/dist/engage/EchoUiActions.d.ts.map +1 -1
  180. package/dist/engage/brand-color.d.ts +37 -0
  181. package/dist/engage/brand-color.d.ts.map +1 -0
  182. package/dist/engage/chat-messages.d.ts +86 -0
  183. package/dist/engage/chat-messages.d.ts.map +1 -0
  184. package/dist/engage/index.js +11 -10
  185. package/dist/engage/index.js.map +1 -1
  186. package/dist/engage/index.mjs +8 -7
  187. package/dist/engage/index.mjs.map +1 -1
  188. package/dist/fleet/index.js +8 -8
  189. package/dist/fleet/index.mjs +4 -4
  190. package/dist/forms/index.js +16 -16
  191. package/dist/forms/index.mjs +9 -9
  192. package/dist/forms/server.js +10 -10
  193. package/dist/forms/server.mjs +8 -8
  194. package/dist/forms/static.js +7 -7
  195. package/dist/forms/static.mjs +6 -6
  196. package/dist/images/index.js +11 -11
  197. package/dist/images/index.mjs +4 -4
  198. package/dist/index.js +63 -63
  199. package/dist/index.mjs +9 -9
  200. package/dist/layout/client.js +8 -8
  201. package/dist/layout/client.mjs +7 -7
  202. package/dist/layout/index.js +10 -10
  203. package/dist/layout/index.mjs +8 -8
  204. package/dist/{lib-6HOOMENJ.js → lib-6GWWPDJR.js} +7 -7
  205. package/dist/lib-BD4KKQBI.mjs +4 -0
  206. package/dist/{lib-R7IQ4ZHE.mjs → lib-N5PD6JNJ.mjs} +2 -2
  207. package/dist/{lib-BGAWCSUH.js → lib-WFB5RLEQ.js} +8 -8
  208. package/dist/maps/index.js +5 -5
  209. package/dist/maps/index.mjs +3 -3
  210. package/dist/motion/CountUp.d.ts +49 -0
  211. package/dist/motion/CountUp.d.ts.map +1 -0
  212. package/dist/motion/Parallax.d.ts +14 -0
  213. package/dist/motion/Parallax.d.ts.map +1 -1
  214. package/dist/motion/ScrollScene.d.ts +1 -1
  215. package/dist/motion/ScrollScene.d.ts.map +1 -1
  216. package/dist/motion/engine.d.ts +19 -0
  217. package/dist/motion/engine.d.ts.map +1 -1
  218. package/dist/motion/gsap.d.ts +55 -6
  219. package/dist/motion/gsap.d.ts.map +1 -1
  220. package/dist/motion/gsap.js +101 -4
  221. package/dist/motion/gsap.js.map +1 -1
  222. package/dist/motion/gsap.mjs +96 -3
  223. package/dist/motion/gsap.mjs.map +1 -1
  224. package/dist/motion/index.d.ts +1 -1
  225. package/dist/motion/index.d.ts.map +1 -1
  226. package/dist/motion/index.js +21 -40
  227. package/dist/motion/index.js.map +1 -1
  228. package/dist/motion/index.mjs +11 -32
  229. package/dist/motion/index.mjs.map +1 -1
  230. package/dist/motion/three.js +5 -5
  231. package/dist/motion/three.mjs +1 -1
  232. package/dist/search/index.js +4 -4
  233. package/dist/search/index.mjs +3 -3
  234. package/dist/seo/client.js +5 -5
  235. package/dist/seo/client.mjs +4 -4
  236. package/dist/seo/index.js +5 -5
  237. package/dist/seo/index.mjs +4 -4
  238. package/dist/seo/register-sitemap-cli.js +12 -93
  239. package/dist/seo/register-sitemap-cli.mjs +2 -83
  240. package/dist/server/index.js +3 -3
  241. package/dist/server/index.mjs +2 -2
  242. package/dist/shared/color.d.ts +39 -0
  243. package/dist/shared/color.d.ts.map +1 -0
  244. package/dist/shared/version.d.ts +1 -1
  245. package/dist/signal/index.js +11 -11
  246. package/dist/signal/index.mjs +2 -2
  247. package/dist/sync/index.js +17 -17
  248. package/dist/sync/index.mjs +4 -4
  249. package/dist/{web-vitals.attribution-7LKLZ5GR.mjs → web-vitals.attribution-CHXXWO72.mjs} +3 -3
  250. package/dist/web-vitals.attribution-CHXXWO72.mjs.map +1 -0
  251. package/dist/{web-vitals.attribution-ONVYQNRB.js → web-vitals.attribution-SQVZNHN3.js} +3 -3
  252. package/dist/web-vitals.attribution-SQVZNHN3.js.map +1 -0
  253. package/package.json +1 -1
  254. package/dist/ChatWidget-LH3QZYKR.mjs +0 -16
  255. package/dist/ChatWidget-RUCQMCMN.js +0 -25
  256. package/dist/EngageWidget-34BQXU7K.mjs +0 -12
  257. package/dist/EngageWidget-X2CBW7DV.js +0 -21
  258. package/dist/ManagedForm-EUDKMS5G.mjs +0 -16
  259. package/dist/ManagedForm-O67ILXN7.js +0 -25
  260. package/dist/SitemapSync-DQALPBTR.js +0 -18
  261. package/dist/SitemapSync-QYV3X5LH.mjs +0 -9
  262. package/dist/chunk-3SHAY7PK.mjs.map +0 -1
  263. package/dist/chunk-AEW7EFYU.js.map +0 -1
  264. package/dist/chunk-HQWPCX3N.mjs +0 -6
  265. package/dist/chunk-MLXUMVBK.mjs.map +0 -1
  266. package/dist/chunk-QWUDHOUE.js +0 -8
  267. package/dist/chunk-QYRJ4IQD.js.map +0 -1
  268. package/dist/lib-RSDMEKDQ.mjs +0 -4
  269. package/dist/web-vitals.attribution-7LKLZ5GR.mjs.map +0 -1
  270. package/dist/web-vitals.attribution-ONVYQNRB.js.map +0 -1
@@ -1,33 +1,12 @@
1
1
  'use client';
2
- import { prefersReducedMotion, registerScene } from '../chunk-MLXUMVBK.mjs';
3
- export { prefersReducedMotion, refreshScenes, registerScene, sceneProgress } from '../chunk-MLXUMVBK.mjs';
2
+ import { onNoScroll } from '../chunk-IMWON7OV.mjs';
3
+ export { onNoScroll } from '../chunk-IMWON7OV.mjs';
4
+ import { prefersReducedMotion, registerScene } from '../chunk-UCMMIGC6.mjs';
5
+ export { prefersReducedMotion, refreshScenes, registerScene, sceneProgress } from '../chunk-UCMMIGC6.mjs';
4
6
  import '../chunk-BEXTDHO4.mjs';
5
7
  import { useRef, useEffect } from 'react';
6
8
  import { jsx } from 'react/jsx-runtime';
7
9
 
8
- // src/motion/failsafe.ts
9
- var scrolled = false;
10
- var armed = false;
11
- function arm() {
12
- if (armed || typeof window === "undefined") return;
13
- armed = true;
14
- window.addEventListener(
15
- "scroll",
16
- () => {
17
- scrolled = true;
18
- },
19
- { passive: true, once: true }
20
- );
21
- }
22
- function onNoScroll(fn, ms = 2500) {
23
- if (typeof window === "undefined") return () => {
24
- };
25
- arm();
26
- const t = setTimeout(() => {
27
- if (!scrolled) fn();
28
- }, ms);
29
- return () => clearTimeout(t);
30
- }
31
10
  var DEFAULT_EASING = "cubic-bezier(0.22, 1, 0.36, 1)";
32
11
  var DEFAULT_STAGGER = 0.08;
33
12
  function hiddenTransform(from, distance, scale) {
@@ -138,10 +117,10 @@ function Reveal({
138
117
  return /* @__PURE__ */ jsx(Tag, { ref, id, className, style, "data-sk-reveal": "", children });
139
118
  }
140
119
  function useParallax(ref, options = {}) {
141
- const { y = [40, -40], x, scale, opacity, rotate } = options;
120
+ const { y = [40, -40], x, scale, opacity, rotate, anchor } = options;
142
121
  const easeRef = useRef(options.ease);
143
122
  easeRef.current = options.ease;
144
- const key = JSON.stringify([y, x, scale, opacity, rotate]);
123
+ const key = JSON.stringify([y, x, scale, opacity, rotate, anchor]);
145
124
  useEffect(() => {
146
125
  const el = ref.current;
147
126
  if (!el) return;
@@ -158,7 +137,7 @@ function useParallax(ref, options = {}) {
158
137
  if (opacity) el.style.opacity = String(between(opacity, q));
159
138
  el.style.willChange = info.visible ? "transform" : "";
160
139
  },
161
- { mode: "view", lerp: 1 }
140
+ { mode: "view", lerp: 1, anchor }
162
141
  );
163
142
  }, [ref, key]);
164
143
  }
@@ -171,7 +150,7 @@ function Parallax({ children, as = "div", className, style, id, ...options }) {
171
150
  function useScrollScene(ref, onProgress, options = {}) {
172
151
  const cbRef = useRef(onProgress);
173
152
  cbRef.current = onProgress;
174
- const { continuous, reducedP, mode, lerp, cssVar } = options;
153
+ const { continuous, reducedP, mode, lerp, anchor, cssVar } = options;
175
154
  useEffect(() => {
176
155
  const el = ref.current;
177
156
  if (!el) return;
@@ -182,9 +161,9 @@ function useScrollScene(ref, onProgress, options = {}) {
182
161
  if (prop) el.style.setProperty(prop, p.toFixed(4));
183
162
  cbRef.current?.(p, info);
184
163
  },
185
- { continuous, reducedP, mode, lerp }
164
+ { continuous, reducedP, mode, lerp, anchor }
186
165
  );
187
- }, [ref, continuous, reducedP, mode, lerp, cssVar]);
166
+ }, [ref, continuous, reducedP, mode, lerp, anchor, cssVar]);
188
167
  }
189
168
  function ScrollScene({
190
169
  children,
@@ -225,6 +204,6 @@ function ScrollScene({
225
204
  );
226
205
  }
227
206
 
228
- export { Parallax, Reveal, ScrollScene, onNoScroll, useParallax, useScrollScene };
207
+ export { Parallax, Reveal, ScrollScene, useParallax, useScrollScene };
229
208
  //# sourceMappingURL=index.mjs.map
230
209
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/motion/failsafe.ts","../../src/motion/Reveal.tsx","../../src/motion/Parallax.tsx","../../src/motion/ScrollScene.tsx"],"names":["useRef","useEffect","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Renderer failsafe for scroll-entrance reveals.\n *\n * Headless renderers — Google's Web Rendering Service included — execute\n * JavaScript but never scroll, so a scroll-triggered reveal would leave\n * below-the-fold content transparent in the rendered snapshot that gets\n * indexed. (Measured at ~85 transparent elements on one page before this\n * guard existed.) If the visitor hasn't scrolled shortly after a reveal\n * arms, we assume nobody is going to and show the content. Real visitors\n * scroll well inside the window, so animations are unaffected.\n *\n * Single source of truth for every reveal system in the kit. Ported from\n * upforge.io's lib/reveal-failsafe.\n */\n\nlet scrolled = false\nlet armed = false\n\nfunction arm() {\n if (armed || typeof window === 'undefined') return\n armed = true\n window.addEventListener(\n 'scroll',\n () => {\n scrolled = true\n },\n { passive: true, once: true },\n )\n}\n\n/**\n * Run `fn` after `ms` milliseconds unless the visitor scrolls first.\n * Returns a cancel function for effect cleanups.\n */\nexport function onNoScroll(fn: () => void, ms = 2500): () => void {\n if (typeof window === 'undefined') return () => {}\n arm()\n const t = setTimeout(() => {\n if (!scrolled) fn()\n }, ms)\n return () => clearTimeout(t)\n}\n","'use client'\n\nimport { useEffect, useRef, type CSSProperties, type ElementType, type ReactNode } from 'react'\nimport { prefersReducedMotion } from './engine'\nimport { onNoScroll } from './failsafe'\n\n/**\n * <Reveal> — scroll-entrance reveal with no animation library.\n *\n * The SEO contract, in order of importance:\n *\n * 1. The server HTML is fully visible. Nothing is hidden by a stylesheet or\n * an inline style at render time, so crawlers, no-JS visitors, and the\n * LCP measurement all see the finished page.\n * 2. Above-the-fold content is never touched. On mount, one\n * IntersectionObserver pass asks whether the element is already on\n * screen; if it is, this component does nothing at all.\n * 3. Only below-the-fold content is hidden (offscreen, so nobody sees the\n * swap) and revealed with a compositor-only CSS transition on opacity\n * and transform as it scrolls in.\n * 4. A headless renderer that never scrolls gets the content back after\n * 2.5s (see ./failsafe), so the indexed snapshot is never transparent.\n * 5. prefers-reduced-motion disables all of it.\n *\n * Replaces the per-site Reveal / ScrollReveal / RevealOnScroll components.\n */\n\nexport type RevealDirection = 'up' | 'down' | 'left' | 'right' | 'none'\n\nexport interface RevealProps {\n children?: ReactNode\n /** Element to render. Default \"div\". */\n as?: ElementType\n className?: string\n style?: CSSProperties\n id?: string\n /** Where the element travels in from. Default \"up\" (starts lower). */\n from?: RevealDirection\n /** Travel distance in px. Default 24. */\n distance?: number\n /** Seconds before the transition starts. Default 0. */\n delay?: number\n /** Transition length in seconds. Default 0.7. */\n duration?: number\n /**\n * Reveal the element's direct children one after another instead of the\n * element itself. `true` = 0.08s apart; a number = that many seconds.\n */\n stagger?: boolean | number\n /** Play once (default) or re-hide when the element scrolls back out. */\n once?: boolean\n /**\n * How far up the viewport the element's top must travel before it\n * reveals, as a fraction of viewport height. 0.15 (default) = reveal when\n * the top crosses 85% down the screen.\n */\n threshold?: number\n /** Starting scale, e.g. 0.96. Off by default. */\n scale?: number\n /** Starting opacity. Default 0. */\n opacity?: number\n /** CSS easing. Default an ease-out-quint curve. */\n easing?: string\n}\n\nconst DEFAULT_EASING = 'cubic-bezier(0.22, 1, 0.36, 1)'\nconst DEFAULT_STAGGER = 0.08\n\nfunction hiddenTransform(from: RevealDirection, distance: number, scale?: number): string {\n let t = ''\n if (from === 'up') t = `translate3d(0, ${distance}px, 0)`\n else if (from === 'down') t = `translate3d(0, ${-distance}px, 0)`\n else if (from === 'left') t = `translate3d(${-distance}px, 0, 0)`\n else if (from === 'right') t = `translate3d(${distance}px, 0, 0)`\n if (scale !== undefined) t = `${t} scale(${scale})`.trim()\n return t\n}\n\nexport function Reveal({\n children,\n as = 'div',\n className,\n style,\n id,\n from = 'up',\n distance = 24,\n delay = 0,\n duration = 0.7,\n stagger = false,\n once = true,\n threshold = 0.15,\n scale,\n opacity = 0,\n easing = DEFAULT_EASING,\n}: RevealProps) {\n const ref = useRef<HTMLElement>(null)\n const Tag = as as ElementType\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n if (prefersReducedMotion()) return\n\n const step = stagger === true ? DEFAULT_STAGGER : stagger || 0\n const targets = (): HTMLElement[] =>\n step > 0 && el.children.length > 0\n ? (Array.from(el.children) as HTMLElement[])\n : [el]\n const hiddenOpacity = String(opacity)\n const transform = hiddenTransform(from, distance, scale)\n\n let clearTimer: ReturnType<typeof setTimeout> | undefined\n let animObserver: IntersectionObserver | null = null\n let cancelFailsafe: (() => void) | undefined\n let shown = false\n\n const hide = (animated: boolean) => {\n clearTimeout(clearTimer)\n for (const t of targets()) {\n t.style.transition = animated\n ? `opacity ${duration * 0.5}s ${easing}, transform ${duration * 0.5}s ${easing}`\n : 'none'\n t.style.opacity = hiddenOpacity\n t.style.transform = transform\n }\n }\n\n const show = () => {\n const list = targets()\n let total = 0\n list.forEach((t, i) => {\n const d = delay + step * i\n total = Math.max(total, d + duration)\n t.style.transition = `opacity ${duration}s ${easing} ${d}s, transform ${duration}s ${easing} ${d}s`\n t.style.opacity = ''\n t.style.transform = ''\n })\n // Once the transition has run, drop the inline transition too, so the\n // element is back to exactly what the stylesheet says.\n clearTimeout(clearTimer)\n clearTimer = setTimeout(() => {\n for (const t of list) t.style.transition = ''\n }, total * 1000 + 100)\n }\n\n const restore = () => {\n clearTimeout(clearTimer)\n for (const t of targets()) {\n t.style.transition = ''\n t.style.opacity = ''\n t.style.transform = ''\n }\n }\n\n // Pass 1: one observation with no margin tells us above-vs-below fold\n // without a forced layout read. Above the fold: leave the static render\n // alone. Below: hide (offscreen, unseen) and arm the reveal.\n const foldObserver = new IntersectionObserver(([entry]) => {\n foldObserver.disconnect()\n if (!el.isConnected || entry?.isIntersecting) return\n\n hide(false)\n\n cancelFailsafe = onNoScroll(() => {\n animObserver?.disconnect()\n restore()\n })\n\n animObserver = new IntersectionObserver(\n ([e]) => {\n if (!e) return\n if (e.isIntersecting) {\n shown = true\n if (once) animObserver?.disconnect()\n show()\n } else if (shown && !once) {\n hide(true)\n }\n },\n // Fire when the element's top crosses `threshold` up from the\n // bottom edge — the same trigger line as GSAP's \"top 85%\", and it\n // works for elements taller than the viewport.\n { rootMargin: `0px 0px -${Math.round(threshold * 100)}% 0px`, threshold: 0 },\n )\n animObserver.observe(el)\n })\n foldObserver.observe(el)\n\n return () => {\n foldObserver.disconnect()\n animObserver?.disconnect()\n cancelFailsafe?.()\n clearTimeout(clearTimer)\n }\n }, [from, distance, delay, duration, stagger, once, threshold, scale, opacity, easing])\n\n return (\n <Tag ref={ref} id={id} className={className} style={style} data-sk-reveal=\"\">\n {children}\n </Tag>\n )\n}\n","'use client'\n\nimport {\n useEffect,\n useRef,\n type CSSProperties,\n type ElementType,\n type ReactNode,\n type RefObject,\n} from 'react'\nimport { prefersReducedMotion, registerScene } from './engine'\n\n/**\n * Scroll-linked parallax with no animation library.\n *\n * The element's progress through the viewport (0 as its top enters at the\n * bottom, 1 as its bottom leaves at the top) is mapped onto transform and\n * opacity — compositor-only properties, so a page full of these never\n * triggers layout or paint. Driven by the shared engine, so thirty of them\n * cost one requestAnimationFrame.\n *\n * Server-rendered exactly as authored: no offset, no hidden state. Under\n * prefers-reduced-motion nothing registers and the element stays put.\n *\n * Replaces the per-site ParallaxImage / ParallaxY components: wrap the\n * image in an overflow-hidden frame and give <Parallax> a scale so the\n * travel never shows the frame's edges.\n */\n\nexport interface ParallaxOptions {\n /** Vertical travel in px as [at p=0, at p=1]. Default [40, -40]. */\n y?: [number, number]\n /** Horizontal travel in px. */\n x?: [number, number]\n /** Scale as [from, to]. */\n scale?: [number, number]\n /** Opacity as [from, to]. */\n opacity?: [number, number]\n /** Rotation in degrees as [from, to]. */\n rotate?: [number, number]\n /** Remap progress before it's applied (e.g. an ease-in-out). */\n ease?: (p: number) => number\n}\n\nexport function useParallax(ref: RefObject<HTMLElement | null>, options: ParallaxOptions = {}): void {\n const { y = [40, -40], x, scale, opacity, rotate } = options\n const easeRef = useRef(options.ease)\n easeRef.current = options.ease\n // Ranges are small tuples; a string key keeps the effect stable across\n // renders that pass a fresh array literal with the same values.\n const key = JSON.stringify([y, x, scale, opacity, rotate])\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n if (prefersReducedMotion()) return\n\n const between = (r: [number, number], q: number) => r[0] + (r[1] - r[0]) * q\n\n return registerScene(\n el,\n (p, info) => {\n const q = easeRef.current ? easeRef.current(p) : p\n let t = `translate3d(${x ? between(x, q) : 0}px, ${between(y, q)}px, 0)`\n if (scale) t += ` scale(${between(scale, q)})`\n if (rotate) t += ` rotate(${between(rotate, q)}deg)`\n el.style.transform = t\n if (opacity) el.style.opacity = String(between(opacity, q))\n // Promote to its own layer only while it's actually moving on screen.\n el.style.willChange = info.visible ? 'transform' : ''\n },\n { mode: 'view', lerp: 1 },\n )\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref, key])\n}\n\nexport interface ParallaxProps extends ParallaxOptions {\n children?: ReactNode\n /** Element to render. Default \"div\". */\n as?: ElementType\n className?: string\n style?: CSSProperties\n id?: string\n}\n\nexport function Parallax({ children, as = 'div', className, style, id, ...options }: ParallaxProps) {\n const ref = useRef<HTMLElement>(null)\n const Tag = as as ElementType\n useParallax(ref, options)\n return (\n <Tag ref={ref} id={id} className={className} style={style} data-sk-parallax=\"\">\n {children}\n </Tag>\n )\n}\n","'use client'\n\nimport {\n useEffect,\n useRef,\n type CSSProperties,\n type ElementType,\n type ReactNode,\n type RefObject,\n} from 'react'\nimport { registerScene, type SceneInfo, type SceneOptions } from './engine'\n\n/**\n * A pinned scene: a tall wrapper with a sticky, viewport-sized stage inside\n * it. As the visitor scrolls the wrapper's height, the stage stays put and\n * the scene's progress runs 0 → 1. This is the unit of scroll cinema.\n *\n * What it does for you on every frame:\n * - writes progress to a CSS custom property on the wrapper (`--sk-p` by\n * default), so choreography can be pure CSS: `opacity: var(--sk-p)`,\n * `transform: translateX(calc(var(--sk-p) * -40vw))` — no per-frame JS.\n * - calls `onProgress(p, info)` for anything that needs code (canvas\n * frame-scrub, three.js, DOM measured moves).\n *\n * The children are server-rendered. A \"use client\" component still renders\n * its children on the server when they arrive as props, so the copy inside\n * a scene is in the HTML for crawlers and for first paint. What you must\n * NOT do is load this (or a component containing it) through\n * `dynamic(..., { ssr: false })` — that de-opts the whole subtree to client\n * rendering and the copy disappears from the HTML.\n */\n\nexport interface UseScrollSceneOptions extends SceneOptions {\n /** CSS custom property to write progress to. Default \"--sk-p\"; false to skip. */\n cssVar?: string | false\n}\n\nexport function useScrollScene(\n ref: RefObject<HTMLElement | null>,\n onProgress?: (p: number, info: SceneInfo) => void,\n options: UseScrollSceneOptions = {},\n): void {\n const cbRef = useRef(onProgress)\n cbRef.current = onProgress\n const { continuous, reducedP, mode, lerp, cssVar } = options\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n const prop = cssVar === false ? null : (cssVar ?? '--sk-p')\n return registerScene(\n el,\n (p, info) => {\n if (prop) el.style.setProperty(prop, p.toFixed(4))\n cbRef.current?.(p, info)\n },\n { continuous, reducedP, mode, lerp },\n )\n }, [ref, continuous, reducedP, mode, lerp, cssVar])\n}\n\nexport interface ScrollSceneProps extends Omit<UseScrollSceneOptions, 'mode'> {\n children?: ReactNode\n /** Scroll length of the scene — the wrapper's height. Default \"300vh\". */\n length?: string\n /** Wrapper element. Default \"section\". */\n as?: ElementType\n className?: string\n style?: CSSProperties\n id?: string\n /** Class/style for the sticky stage that holds the children. */\n stageClassName?: string\n stageStyle?: CSSProperties\n onProgress?: (p: number, info: SceneInfo) => void\n}\n\nexport function ScrollScene({\n children,\n length = '300vh',\n as = 'section',\n className,\n style,\n id,\n stageClassName,\n stageStyle,\n onProgress,\n continuous,\n reducedP,\n lerp,\n cssVar,\n}: ScrollSceneProps) {\n const ref = useRef<HTMLElement>(null)\n const Tag = as as ElementType\n useScrollScene(ref, onProgress, { continuous, reducedP, lerp, cssVar, mode: 'pin' })\n return (\n <Tag\n ref={ref}\n id={id}\n className={className}\n style={{ position: 'relative', height: length, ...style }}\n data-sk-scene=\"\"\n >\n <div\n className={stageClassName}\n style={{ position: 'sticky', top: 0, height: '100svh', overflow: 'hidden', ...stageStyle }}\n data-sk-stage=\"\"\n >\n {children}\n </div>\n </Tag>\n )\n}\n"]}
1
+ {"version":3,"sources":["../../src/motion/Reveal.tsx","../../src/motion/Parallax.tsx","../../src/motion/ScrollScene.tsx"],"names":["useRef","useEffect","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["'use client'\n\nimport { useEffect, useRef, type CSSProperties, type ElementType, type ReactNode } from 'react'\nimport { prefersReducedMotion } from './engine'\nimport { onNoScroll } from './failsafe'\n\n/**\n * <Reveal> — scroll-entrance reveal with no animation library.\n *\n * The SEO contract, in order of importance:\n *\n * 1. The server HTML is fully visible. Nothing is hidden by a stylesheet or\n * an inline style at render time, so crawlers, no-JS visitors, and the\n * LCP measurement all see the finished page.\n * 2. Above-the-fold content is never touched. On mount, one\n * IntersectionObserver pass asks whether the element is already on\n * screen; if it is, this component does nothing at all.\n * 3. Only below-the-fold content is hidden (offscreen, so nobody sees the\n * swap) and revealed with a compositor-only CSS transition on opacity\n * and transform as it scrolls in.\n * 4. A headless renderer that never scrolls gets the content back after\n * 2.5s (see ./failsafe), so the indexed snapshot is never transparent.\n * 5. prefers-reduced-motion disables all of it.\n *\n * Replaces the per-site Reveal / ScrollReveal / RevealOnScroll components.\n */\n\nexport type RevealDirection = 'up' | 'down' | 'left' | 'right' | 'none'\n\nexport interface RevealProps {\n children?: ReactNode\n /** Element to render. Default \"div\". */\n as?: ElementType\n className?: string\n style?: CSSProperties\n id?: string\n /** Where the element travels in from. Default \"up\" (starts lower). */\n from?: RevealDirection\n /** Travel distance in px. Default 24. */\n distance?: number\n /** Seconds before the transition starts. Default 0. */\n delay?: number\n /** Transition length in seconds. Default 0.7. */\n duration?: number\n /**\n * Reveal the element's direct children one after another instead of the\n * element itself. `true` = 0.08s apart; a number = that many seconds.\n */\n stagger?: boolean | number\n /** Play once (default) or re-hide when the element scrolls back out. */\n once?: boolean\n /**\n * How far up the viewport the element's top must travel before it\n * reveals, as a fraction of viewport height. 0.15 (default) = reveal when\n * the top crosses 85% down the screen.\n */\n threshold?: number\n /** Starting scale, e.g. 0.96. Off by default. */\n scale?: number\n /** Starting opacity. Default 0. */\n opacity?: number\n /** CSS easing. Default an ease-out-quint curve. */\n easing?: string\n}\n\nconst DEFAULT_EASING = 'cubic-bezier(0.22, 1, 0.36, 1)'\nconst DEFAULT_STAGGER = 0.08\n\nfunction hiddenTransform(from: RevealDirection, distance: number, scale?: number): string {\n let t = ''\n if (from === 'up') t = `translate3d(0, ${distance}px, 0)`\n else if (from === 'down') t = `translate3d(0, ${-distance}px, 0)`\n else if (from === 'left') t = `translate3d(${-distance}px, 0, 0)`\n else if (from === 'right') t = `translate3d(${distance}px, 0, 0)`\n if (scale !== undefined) t = `${t} scale(${scale})`.trim()\n return t\n}\n\nexport function Reveal({\n children,\n as = 'div',\n className,\n style,\n id,\n from = 'up',\n distance = 24,\n delay = 0,\n duration = 0.7,\n stagger = false,\n once = true,\n threshold = 0.15,\n scale,\n opacity = 0,\n easing = DEFAULT_EASING,\n}: RevealProps) {\n const ref = useRef<HTMLElement>(null)\n const Tag = as as ElementType\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n if (prefersReducedMotion()) return\n\n const step = stagger === true ? DEFAULT_STAGGER : stagger || 0\n const targets = (): HTMLElement[] =>\n step > 0 && el.children.length > 0\n ? (Array.from(el.children) as HTMLElement[])\n : [el]\n const hiddenOpacity = String(opacity)\n const transform = hiddenTransform(from, distance, scale)\n\n let clearTimer: ReturnType<typeof setTimeout> | undefined\n let animObserver: IntersectionObserver | null = null\n let cancelFailsafe: (() => void) | undefined\n let shown = false\n\n const hide = (animated: boolean) => {\n clearTimeout(clearTimer)\n for (const t of targets()) {\n t.style.transition = animated\n ? `opacity ${duration * 0.5}s ${easing}, transform ${duration * 0.5}s ${easing}`\n : 'none'\n t.style.opacity = hiddenOpacity\n t.style.transform = transform\n }\n }\n\n const show = () => {\n const list = targets()\n let total = 0\n list.forEach((t, i) => {\n const d = delay + step * i\n total = Math.max(total, d + duration)\n t.style.transition = `opacity ${duration}s ${easing} ${d}s, transform ${duration}s ${easing} ${d}s`\n t.style.opacity = ''\n t.style.transform = ''\n })\n // Once the transition has run, drop the inline transition too, so the\n // element is back to exactly what the stylesheet says.\n clearTimeout(clearTimer)\n clearTimer = setTimeout(() => {\n for (const t of list) t.style.transition = ''\n }, total * 1000 + 100)\n }\n\n const restore = () => {\n clearTimeout(clearTimer)\n for (const t of targets()) {\n t.style.transition = ''\n t.style.opacity = ''\n t.style.transform = ''\n }\n }\n\n // Pass 1: one observation with no margin tells us above-vs-below fold\n // without a forced layout read. Above the fold: leave the static render\n // alone. Below: hide (offscreen, unseen) and arm the reveal.\n const foldObserver = new IntersectionObserver(([entry]) => {\n foldObserver.disconnect()\n if (!el.isConnected || entry?.isIntersecting) return\n\n hide(false)\n\n cancelFailsafe = onNoScroll(() => {\n animObserver?.disconnect()\n restore()\n })\n\n animObserver = new IntersectionObserver(\n ([e]) => {\n if (!e) return\n if (e.isIntersecting) {\n shown = true\n if (once) animObserver?.disconnect()\n show()\n } else if (shown && !once) {\n hide(true)\n }\n },\n // Fire when the element's top crosses `threshold` up from the\n // bottom edge — the same trigger line as GSAP's \"top 85%\", and it\n // works for elements taller than the viewport.\n { rootMargin: `0px 0px -${Math.round(threshold * 100)}% 0px`, threshold: 0 },\n )\n animObserver.observe(el)\n })\n foldObserver.observe(el)\n\n return () => {\n foldObserver.disconnect()\n animObserver?.disconnect()\n cancelFailsafe?.()\n clearTimeout(clearTimer)\n }\n }, [from, distance, delay, duration, stagger, once, threshold, scale, opacity, easing])\n\n return (\n <Tag ref={ref} id={id} className={className} style={style} data-sk-reveal=\"\">\n {children}\n </Tag>\n )\n}\n","'use client'\n\nimport {\n useEffect,\n useRef,\n type CSSProperties,\n type ElementType,\n type ReactNode,\n type RefObject,\n} from 'react'\nimport { prefersReducedMotion, registerScene, type SceneAnchor } from './engine'\n\n/**\n * Scroll-linked parallax with no animation library.\n *\n * The element's progress through the viewport (0 as its top enters at the\n * bottom, 1 as its bottom leaves at the top) is mapped onto transform and\n * opacity — compositor-only properties, so a page full of these never\n * triggers layout or paint. Driven by the shared engine, so thirty of them\n * cost one requestAnimationFrame.\n *\n * Server-rendered exactly as authored: no offset, no hidden state. Under\n * prefers-reduced-motion nothing registers and the element stays put.\n *\n * Replaces the per-site ParallaxImage / ParallaxY components: wrap the\n * image in an overflow-hidden frame and give <Parallax> a scale so the\n * travel never shows the frame's edges.\n *\n * Above the fold, pass `anchor=\"load\"`: a hero layer loads partway through\n * its trip, so without it the layer jumps to that frame on hydration (and\n * a hero photo is usually the LCP element). Anchored, each range starts\n * from its first value at the position the page loaded and moves at the\n * usual rate from there, so give it ranges that start at rest: y={[0, 120]}.\n */\n\nexport interface ParallaxOptions {\n /** Vertical travel in px as [at p=0, at p=1]. Default [40, -40]. */\n y?: [number, number]\n /** Horizontal travel in px. */\n x?: [number, number]\n /** Scale as [from, to]. */\n scale?: [number, number]\n /** Opacity as [from, to]. */\n opacity?: [number, number]\n /** Rotation in degrees as [from, to]. */\n rotate?: [number, number]\n /** Remap progress before it's applied (e.g. an ease-in-out). */\n ease?: (p: number) => number\n /**\n * \"load\" counts progress from where the page was when the layer armed,\n * so the first frame renders each range's first value and nothing moves\n * until the visitor scrolls. For layers above the fold. See\n * SceneOptions.anchor.\n */\n anchor?: SceneAnchor\n}\n\nexport function useParallax(ref: RefObject<HTMLElement | null>, options: ParallaxOptions = {}): void {\n const { y = [40, -40], x, scale, opacity, rotate, anchor } = options\n const easeRef = useRef(options.ease)\n easeRef.current = options.ease\n // Ranges are small tuples; a string key keeps the effect stable across\n // renders that pass a fresh array literal with the same values.\n const key = JSON.stringify([y, x, scale, opacity, rotate, anchor])\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n if (prefersReducedMotion()) return\n\n const between = (r: [number, number], q: number) => r[0] + (r[1] - r[0]) * q\n\n return registerScene(\n el,\n (p, info) => {\n const q = easeRef.current ? easeRef.current(p) : p\n let t = `translate3d(${x ? between(x, q) : 0}px, ${between(y, q)}px, 0)`\n if (scale) t += ` scale(${between(scale, q)})`\n if (rotate) t += ` rotate(${between(rotate, q)}deg)`\n el.style.transform = t\n if (opacity) el.style.opacity = String(between(opacity, q))\n // Promote to its own layer only while it's actually moving on screen.\n el.style.willChange = info.visible ? 'transform' : ''\n },\n { mode: 'view', lerp: 1, anchor },\n )\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ref, key])\n}\n\nexport interface ParallaxProps extends ParallaxOptions {\n children?: ReactNode\n /** Element to render. Default \"div\". */\n as?: ElementType\n className?: string\n style?: CSSProperties\n id?: string\n}\n\nexport function Parallax({ children, as = 'div', className, style, id, ...options }: ParallaxProps) {\n const ref = useRef<HTMLElement>(null)\n const Tag = as as ElementType\n useParallax(ref, options)\n return (\n <Tag ref={ref} id={id} className={className} style={style} data-sk-parallax=\"\">\n {children}\n </Tag>\n )\n}\n","'use client'\n\nimport {\n useEffect,\n useRef,\n type CSSProperties,\n type ElementType,\n type ReactNode,\n type RefObject,\n} from 'react'\nimport { registerScene, type SceneInfo, type SceneOptions } from './engine'\n\n/**\n * A pinned scene: a tall wrapper with a sticky, viewport-sized stage inside\n * it. As the visitor scrolls the wrapper's height, the stage stays put and\n * the scene's progress runs 0 → 1. This is the unit of scroll cinema.\n *\n * What it does for you on every frame:\n * - writes progress to a CSS custom property on the wrapper (`--sk-p` by\n * default), so choreography can be pure CSS: `opacity: var(--sk-p)`,\n * `transform: translateX(calc(var(--sk-p) * -40vw))` — no per-frame JS.\n * - calls `onProgress(p, info)` for anything that needs code (canvas\n * frame-scrub, three.js, DOM measured moves).\n *\n * The children are server-rendered. A \"use client\" component still renders\n * its children on the server when they arrive as props, so the copy inside\n * a scene is in the HTML for crawlers and for first paint. What you must\n * NOT do is load this (or a component containing it) through\n * `dynamic(..., { ssr: false })` — that de-opts the whole subtree to client\n * rendering and the copy disappears from the HTML.\n */\n\nexport interface UseScrollSceneOptions extends SceneOptions {\n /** CSS custom property to write progress to. Default \"--sk-p\"; false to skip. */\n cssVar?: string | false\n}\n\nexport function useScrollScene(\n ref: RefObject<HTMLElement | null>,\n onProgress?: (p: number, info: SceneInfo) => void,\n options: UseScrollSceneOptions = {},\n): void {\n const cbRef = useRef(onProgress)\n cbRef.current = onProgress\n const { continuous, reducedP, mode, lerp, anchor, cssVar } = options\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n const prop = cssVar === false ? null : (cssVar ?? '--sk-p')\n return registerScene(\n el,\n (p, info) => {\n if (prop) el.style.setProperty(prop, p.toFixed(4))\n cbRef.current?.(p, info)\n },\n { continuous, reducedP, mode, lerp, anchor },\n )\n }, [ref, continuous, reducedP, mode, lerp, anchor, cssVar])\n}\n\n// A pinned scene's progress is its pin, so `anchor` stays on the hook only.\nexport interface ScrollSceneProps extends Omit<UseScrollSceneOptions, 'mode' | 'anchor'> {\n children?: ReactNode\n /** Scroll length of the scene — the wrapper's height. Default \"300vh\". */\n length?: string\n /** Wrapper element. Default \"section\". */\n as?: ElementType\n className?: string\n style?: CSSProperties\n id?: string\n /** Class/style for the sticky stage that holds the children. */\n stageClassName?: string\n stageStyle?: CSSProperties\n onProgress?: (p: number, info: SceneInfo) => void\n}\n\nexport function ScrollScene({\n children,\n length = '300vh',\n as = 'section',\n className,\n style,\n id,\n stageClassName,\n stageStyle,\n onProgress,\n continuous,\n reducedP,\n lerp,\n cssVar,\n}: ScrollSceneProps) {\n const ref = useRef<HTMLElement>(null)\n const Tag = as as ElementType\n useScrollScene(ref, onProgress, { continuous, reducedP, lerp, cssVar, mode: 'pin' })\n return (\n <Tag\n ref={ref}\n id={id}\n className={className}\n style={{ position: 'relative', height: length, ...style }}\n data-sk-scene=\"\"\n >\n <div\n className={stageClassName}\n style={{ position: 'sticky', top: 0, height: '100svh', overflow: 'hidden', ...stageStyle }}\n data-sk-stage=\"\"\n >\n {children}\n </div>\n </Tag>\n )\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkAEW7EFYU_js = require('../chunk-AEW7EFYU.js');
4
+ var chunkAEN7EL6N_js = require('../chunk-AEN7EL6N.js');
5
5
  require('../chunk-SNAQBZPT.js');
6
6
  var react = require('react');
7
7
  var three = require('three');
@@ -9,7 +9,7 @@ var three = require('three');
9
9
  var webglProbe = null;
10
10
  function canRunWebGL() {
11
11
  if (typeof window === "undefined") return false;
12
- if (chunkAEW7EFYU_js.prefersReducedMotion()) return false;
12
+ if (chunkAEN7EL6N_js.prefersReducedMotion()) return false;
13
13
  const nav = navigator;
14
14
  if (nav.connection?.saveData) return false;
15
15
  if (webglProbe === null) {
@@ -79,17 +79,17 @@ function useThreeStage(pin, options) {
79
79
  };
80
80
  const onRestored = () => {
81
81
  lost = false;
82
- chunkAEW7EFYU_js.refreshScenes();
82
+ chunkAEN7EL6N_js.refreshScenes();
83
83
  };
84
84
  canvas.addEventListener("webglcontextlost", onLost);
85
85
  canvas.addEventListener("webglcontextrestored", onRestored);
86
86
  const ro = new ResizeObserver(() => {
87
87
  size();
88
- chunkAEW7EFYU_js.refreshScenes();
88
+ chunkAEN7EL6N_js.refreshScenes();
89
89
  });
90
90
  ro.observe(host);
91
91
  const cleanupReady = optsRef.current.onReady?.(stage);
92
- const unregister = chunkAEW7EFYU_js.registerScene(
92
+ const unregister = chunkAEN7EL6N_js.registerScene(
93
93
  pinEl,
94
94
  (p, info) => {
95
95
  if (lost) return;
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { prefersReducedMotion, refreshScenes, registerScene } from '../chunk-MLXUMVBK.mjs';
2
+ import { prefersReducedMotion, refreshScenes, registerScene } from '../chunk-UCMMIGC6.mjs';
3
3
  import '../chunk-BEXTDHO4.mjs';
4
4
  import { useRef, useEffect } from 'react';
5
5
  import { WebGLRenderer, Scene, PerspectiveCamera, TextureLoader, SRGBColorSpace } from 'three';
@@ -2,9 +2,9 @@
2
2
  'use strict';
3
3
 
4
4
  var chunkCLO3K7PF_js = require('../chunk-CLO3K7PF.js');
5
- var chunkVNJTU6LG_js = require('../chunk-VNJTU6LG.js');
6
- require('../chunk-IPGIFBRN.js');
7
- require('../chunk-QWUDHOUE.js');
5
+ var chunk3NDDCSWR_js = require('../chunk-3NDDCSWR.js');
6
+ require('../chunk-T742S2CY.js');
7
+ require('../chunk-LGFRHT34.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 chunkVNJTU6LG_js.sonorFetch(
42
+ const res = await chunk3NDDCSWR_js.sonorFetch(
43
43
  `${apiUrl}${chunkCLO3K7PF_js.SEARCH_ENDPOINT}`,
44
44
  {
45
45
  method: "POST",
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  import { SEARCH_ENDPOINT } from '../chunk-CFRJ2MK5.mjs';
3
3
  export { SEARCH_ENDPOINT } from '../chunk-CFRJ2MK5.mjs';
4
- import { sonorFetch } from '../chunk-6ZMEJSNX.mjs';
5
- import '../chunk-YCA4KCRF.mjs';
6
- import '../chunk-HQWPCX3N.mjs';
4
+ import { sonorFetch } from '../chunk-ZZ6P27A5.mjs';
5
+ import '../chunk-TBAP7JNJ.mjs';
6
+ import '../chunk-SIHPFJ6C.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,19 +1,19 @@
1
1
  'use client';
2
2
  'use strict';
3
3
 
4
- var chunkOB7K6EFK_js = require('../chunk-OB7K6EFK.js');
4
+ var chunkUTCZNQ4G_js = require('../chunk-UTCZNQ4G.js');
5
5
  require('../chunk-JONWE26J.js');
6
6
  require('../chunk-5RNAUYWE.js');
7
- require('../chunk-VNJTU6LG.js');
8
- require('../chunk-IPGIFBRN.js');
9
- require('../chunk-QWUDHOUE.js');
7
+ require('../chunk-3NDDCSWR.js');
8
+ require('../chunk-T742S2CY.js');
9
+ require('../chunk-LGFRHT34.js');
10
10
  require('../chunk-SNAQBZPT.js');
11
11
 
12
12
 
13
13
 
14
14
  Object.defineProperty(exports, "SitemapSync", {
15
15
  enumerable: true,
16
- get: function () { return chunkOB7K6EFK_js.SitemapSync; }
16
+ get: function () { return chunkUTCZNQ4G_js.SitemapSync; }
17
17
  });
18
18
  //# sourceMappingURL=client.js.map
19
19
  //# sourceMappingURL=client.js.map
@@ -1,10 +1,10 @@
1
1
  'use client';
2
- export { SitemapSync } from '../chunk-7PCXI25T.mjs';
2
+ export { SitemapSync } from '../chunk-JLVKZTYZ.mjs';
3
3
  import '../chunk-C2CTLLIO.mjs';
4
4
  import '../chunk-A6UYV475.mjs';
5
- import '../chunk-6ZMEJSNX.mjs';
6
- import '../chunk-YCA4KCRF.mjs';
7
- import '../chunk-HQWPCX3N.mjs';
5
+ import '../chunk-ZZ6P27A5.mjs';
6
+ import '../chunk-TBAP7JNJ.mjs';
7
+ import '../chunk-SIHPFJ6C.mjs';
8
8
  import '../chunk-BEXTDHO4.mjs';
9
9
  //# sourceMappingURL=client.mjs.map
10
10
  //# sourceMappingURL=client.mjs.map
package/dist/seo/index.js CHANGED
@@ -3,7 +3,7 @@
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 chunkOB7K6EFK_js = require('../chunk-OB7K6EFK.js');
6
+ var chunkUTCZNQ4G_js = require('../chunk-UTCZNQ4G.js');
7
7
  var chunkTST2IKYO_js = require('../chunk-TST2IKYO.js');
8
8
  var chunkOSU4QA5M_js = require('../chunk-OSU4QA5M.js');
9
9
  require('../chunk-CXAXZFFW.js');
@@ -14,9 +14,9 @@ require('../chunk-IBJOGXQI.js');
14
14
  require('../chunk-UZKXOZHR.js');
15
15
  require('../chunk-SWIKKSKL.js');
16
16
  require('../chunk-5RNAUYWE.js');
17
- require('../chunk-VNJTU6LG.js');
18
- require('../chunk-IPGIFBRN.js');
19
- require('../chunk-QWUDHOUE.js');
17
+ require('../chunk-3NDDCSWR.js');
18
+ require('../chunk-T742S2CY.js');
19
+ require('../chunk-LGFRHT34.js');
20
20
  require('../chunk-SNAQBZPT.js');
21
21
  var react = require('react');
22
22
  var jsxRuntime = require('react/jsx-runtime');
@@ -706,7 +706,7 @@ Object.defineProperty(exports, "ManagedScripts", {
706
706
  });
707
707
  Object.defineProperty(exports, "SitemapSync", {
708
708
  enumerable: true,
709
- get: function () { return chunkOB7K6EFK_js.SitemapSync; }
709
+ get: function () { return chunkUTCZNQ4G_js.SitemapSync; }
710
710
  });
711
711
  Object.defineProperty(exports, "generateSitemap", {
712
712
  enumerable: true,
@@ -1,7 +1,7 @@
1
1
  export { ManagedNoScripts, ManagedScripts } from '../chunk-6PJTLBRR.mjs';
2
2
  import { pickManagedLlmSchemaForJsonLd } from '../chunk-PENNTSJE.mjs';
3
3
  import { safeJsonLd } from '../chunk-662YHKWW.mjs';
4
- export { SitemapSync } from '../chunk-7PCXI25T.mjs';
4
+ export { SitemapSync } from '../chunk-JLVKZTYZ.mjs';
5
5
  import { getManagedMetadata } from '../chunk-JSXLTZUP.mjs';
6
6
  export { generateSitemap, getABVariant, getManagedMetadata, getManagedMetadataWithAB, getRedirect, getRobotsDirective, isIndexable } from '../chunk-JSXLTZUP.mjs';
7
7
  import { getContentBlock, getSchemaMarkups, getSEOPageData, getEntityEnhancedSchema, getFAQData, getInternalLinks, getEntities, pruneSchemaTypes } from '../chunk-NE6QGHFT.mjs';
@@ -14,9 +14,9 @@ import '../chunk-YPGUV6BT.mjs';
14
14
  import '../chunk-KZVSB5WE.mjs';
15
15
  import '../chunk-ZN4HBK5C.mjs';
16
16
  import '../chunk-A6UYV475.mjs';
17
- import '../chunk-6ZMEJSNX.mjs';
18
- import '../chunk-YCA4KCRF.mjs';
19
- import '../chunk-HQWPCX3N.mjs';
17
+ import '../chunk-ZZ6P27A5.mjs';
18
+ import '../chunk-TBAP7JNJ.mjs';
19
+ import '../chunk-SIHPFJ6C.mjs';
20
20
  import '../chunk-BEXTDHO4.mjs';
21
21
  import { cache, Suspense } from 'react';
22
22
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,12 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  'use strict';
3
3
 
4
- var chunkNN2YE5WT_js = require('../chunk-NN2YE5WT.js');
4
+ var chunkZUQSVCMD_js = require('../chunk-ZUQSVCMD.js');
5
5
  var chunkY2CP5J6Q_js = require('../chunk-Y2CP5J6Q.js');
6
6
  var chunkJONWE26J_js = require('../chunk-JONWE26J.js');
7
7
  var chunkIBJOGXQI_js = require('../chunk-IBJOGXQI.js');
8
8
  require('../chunk-UZKXOZHR.js');
9
9
  require('../chunk-SWIKKSKL.js');
10
+ var chunkM2N7NY3V_js = require('../chunk-M2N7NY3V.js');
10
11
  var chunkSNAQBZPT_js = require('../chunk-SNAQBZPT.js');
11
12
  var path = require('path');
12
13
  var fs = require('fs');
@@ -17,95 +18,13 @@ var path__default = /*#__PURE__*/_interopDefault(path);
17
18
  var fs__default = /*#__PURE__*/_interopDefault(fs);
18
19
 
19
20
  // src/seo/register-sitemap-cli.ts
20
- var import_dotenv = chunkSNAQBZPT_js.__toESM(chunkNN2YE5WT_js.require_main());
21
+ var import_dotenv = chunkSNAQBZPT_js.__toESM(chunkZUQSVCMD_js.require_main());
21
22
  var BRAND_PROFILE_EXTRACTOR_VERSION = 2;
22
- var HEX_COLOR = /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;
23
- var DARK_LUMINANCE = 0.179;
24
- function channel(v) {
25
- const c = v / 255;
26
- return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
27
- }
28
- function rgbLuminance({ r, g, b }) {
29
- return 0.2126 * channel(r) + 0.7152 * channel(g) + 0.0722 * channel(b);
30
- }
31
- function hexToRgb(hex) {
32
- if (!HEX_COLOR.test(hex)) return null;
33
- let c = hex.slice(1);
34
- if (c.length <= 4) c = c.split("").map((ch) => ch + ch).join("");
35
- if (c.length === 8 && c.slice(6) === "00") return null;
36
- return {
37
- r: parseInt(c.slice(0, 2), 16),
38
- g: parseInt(c.slice(2, 4), 16),
39
- b: parseInt(c.slice(4, 6), 16)
40
- };
41
- }
42
- function hslToRgb(h, s, l) {
43
- const k = (n) => (n + h / 30) % 12;
44
- const a = s * Math.min(l, 1 - l);
45
- const f = (n) => l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));
46
- return { r: Math.round(f(0) * 255), g: Math.round(f(8) * 255), b: Math.round(f(4) * 255) };
47
- }
48
- function colorArgs(inner) {
49
- const [main2, alpha] = inner.split("/");
50
- const parts = main2.split(/[\s,]+/).filter(Boolean);
51
- if (alpha === void 0 && parts.length === 4) return { parts: parts.slice(0, 3), alpha: parts[3] };
52
- return { parts, alpha: alpha?.trim() };
53
- }
54
- function isTransparentAlpha(alpha) {
55
- if (!alpha) return false;
56
- const n = alpha.endsWith("%") ? parseFloat(alpha) / 100 : parseFloat(alpha);
57
- return n === 0;
58
- }
59
- function colorLuminance(value) {
60
- const v = value.trim().toLowerCase();
61
- if (!v || v === "transparent") return null;
62
- if (v === "white") return 1;
63
- if (v === "black") return 0;
64
- if (v.startsWith("#")) {
65
- const rgb = hexToRgb(v);
66
- return rgb ? rgbLuminance(rgb) : null;
67
- }
68
- const fn = v.match(/^([a-z]+)\((.*)\)$/);
69
- if (fn) {
70
- const [, name, inner] = fn;
71
- const { parts, alpha } = colorArgs(inner);
72
- if (isTransparentAlpha(alpha) || parts.length < 3) return null;
73
- const num = (p, scale) => p.endsWith("%") ? parseFloat(p) / 100 * scale : parseFloat(p);
74
- if (name === "rgb" || name === "rgba") {
75
- const [r, g, b] = parts.map((p) => num(p, 255));
76
- if ([r, g, b].some(Number.isNaN)) return null;
77
- return rgbLuminance({ r, g, b });
78
- }
79
- if (name === "hsl" || name === "hsla") {
80
- const h = parseFloat(parts[0]);
81
- const s = num(parts[1], 1);
82
- const l = num(parts[2], 1);
83
- if ([h, s, l].some(Number.isNaN)) return null;
84
- return rgbLuminance(hslToRgb(h, s, l));
85
- }
86
- if (name === "oklch" || name === "oklab") {
87
- const L = num(parts[0], 1);
88
- return Number.isNaN(L) ? null : Math.min(1, Math.max(0, L)) ** 3;
89
- }
90
- if (name === "lab" || name === "lch") {
91
- const L = num(parts[0], 100);
92
- if (Number.isNaN(L)) return null;
93
- const f = (L + 16) / 116;
94
- return Math.min(1, Math.max(0, L > 8 ? f ** 3 : L / 903.3));
95
- }
96
- return null;
97
- }
98
- const triple = v.match(/^(-?[\d.]+)(?:deg)?\s+([\d.]+)%\s+([\d.]+)%$/);
99
- if (triple) {
100
- return rgbLuminance(hslToRgb(parseFloat(triple[1]), parseFloat(triple[2]) / 100, parseFloat(triple[3]) / 100));
101
- }
102
- return null;
103
- }
104
23
  function decideTheme(background, text) {
105
- const bg = background ? colorLuminance(background) : null;
106
- if (bg !== null) return bg < DARK_LUMINANCE ? "dark" : "light";
107
- const fg = text ? colorLuminance(text) : null;
108
- if (fg !== null) return fg < DARK_LUMINANCE ? "light" : "dark";
24
+ const bg = background ? chunkM2N7NY3V_js.colorLuminance(background) : null;
25
+ if (bg !== null) return bg < chunkM2N7NY3V_js.DARK_LUMINANCE ? "dark" : "light";
26
+ const fg = text ? chunkM2N7NY3V_js.colorLuminance(text) : null;
27
+ if (fg !== null) return fg < chunkM2N7NY3V_js.DARK_LUMINANCE ? "light" : "dark";
109
28
  return void 0;
110
29
  }
111
30
  var DARK_MODE_SIGNALS = [
@@ -209,9 +128,9 @@ function resolveColorValue(value, vars) {
209
128
  if (!value) return void 0;
210
129
  const resolved = resolveValue(value, vars);
211
130
  if (!resolved || /gradient|url\(/i.test(resolved)) return void 0;
212
- if (colorLuminance(resolved) !== null) return resolved;
131
+ if (chunkM2N7NY3V_js.colorLuminance(resolved) !== null) return resolved;
213
132
  const token = resolved.match(/#[0-9a-f]{3,8}\b|(?:rgba?|hsla?|oklch|oklab|lab|lch)\([^)]*\)/i);
214
- return token && colorLuminance(token[0]) !== null ? token[0] : void 0;
133
+ return token && chunkM2N7NY3V_js.colorLuminance(token[0]) !== null ? token[0] : void 0;
215
134
  }
216
135
  function findResolvedColor(vars, ...keys) {
217
136
  for (const key of keys) {
@@ -223,7 +142,7 @@ function findResolvedColor(vars, ...keys) {
223
142
  function findColor(vars, ...keys) {
224
143
  for (const key of keys) {
225
144
  const val = vars[key];
226
- if (val && HEX_COLOR.test(val)) return val;
145
+ if (val && chunkM2N7NY3V_js.HEX_COLOR.test(val)) return val;
227
146
  }
228
147
  return void 0;
229
148
  }
@@ -377,7 +296,7 @@ function extractBrandProfile(projectDir) {
377
296
  "color-foreground",
378
297
  "text-color"
379
298
  );
380
- const background = pageBackground && HEX_COLOR.test(pageBackground) ? pageBackground : void 0;
299
+ const background = pageBackground && chunkM2N7NY3V_js.HEX_COLOR.test(pageBackground) ? pageBackground : void 0;
381
300
  const surface = findColor(
382
301
  cssVars,
383
302
  "color-charcoal-light",
@@ -385,7 +304,7 @@ function extractBrandProfile(projectDir) {
385
304
  "color-surface",
386
305
  "sk-bg-elevated"
387
306
  );
388
- const textColor = pageText && HEX_COLOR.test(pageText) ? pageText : void 0;
307
+ const textColor = pageText && chunkM2N7NY3V_js.HEX_COLOR.test(pageText) ? pageText : void 0;
389
308
  const gradient = designSystem.gradient || void 0;
390
309
  const headingFont = tailwindResult.fonts.sans || tailwindResult.fonts.heading || extractFontFromCss(cssVars, "font-heading", "font-display", "font-sans");
391
310
  const bodyFont = tailwindResult.fonts.sans || tailwindResult.fonts.body || extractFontFromCss(cssVars, "font-body", "font-sans");
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import { require_main } from '../chunk-NNZDWY3L.mjs';
2
+ import { require_main } from '../chunk-RH4XEXTK.mjs';
3
3
  import { findSitemapRoute, findAppDirForDiscovery, discoverNextJsRoutes } from '../chunk-UHYRVALN.mjs';
4
4
  import { inferPageType } from '../chunk-C2CTLLIO.mjs';
5
5
  import { resolveSyncSite, postRegisterSitemap } from '../chunk-YPGUV6BT.mjs';
6
6
  import '../chunk-KZVSB5WE.mjs';
7
7
  import '../chunk-ZN4HBK5C.mjs';
8
+ import { HEX_COLOR, colorLuminance, DARK_LUMINANCE } from '../chunk-NYXENHD2.mjs';
8
9
  import { __toESM } from '../chunk-BEXTDHO4.mjs';
9
10
  import path from 'path';
10
11
  import fs from 'fs';
@@ -12,88 +13,6 @@ import fs from 'fs';
12
13
  // src/seo/register-sitemap-cli.ts
13
14
  var import_dotenv = __toESM(require_main());
14
15
  var BRAND_PROFILE_EXTRACTOR_VERSION = 2;
15
- var HEX_COLOR = /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;
16
- var DARK_LUMINANCE = 0.179;
17
- function channel(v) {
18
- const c = v / 255;
19
- return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
20
- }
21
- function rgbLuminance({ r, g, b }) {
22
- return 0.2126 * channel(r) + 0.7152 * channel(g) + 0.0722 * channel(b);
23
- }
24
- function hexToRgb(hex) {
25
- if (!HEX_COLOR.test(hex)) return null;
26
- let c = hex.slice(1);
27
- if (c.length <= 4) c = c.split("").map((ch) => ch + ch).join("");
28
- if (c.length === 8 && c.slice(6) === "00") return null;
29
- return {
30
- r: parseInt(c.slice(0, 2), 16),
31
- g: parseInt(c.slice(2, 4), 16),
32
- b: parseInt(c.slice(4, 6), 16)
33
- };
34
- }
35
- function hslToRgb(h, s, l) {
36
- const k = (n) => (n + h / 30) % 12;
37
- const a = s * Math.min(l, 1 - l);
38
- const f = (n) => l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));
39
- return { r: Math.round(f(0) * 255), g: Math.round(f(8) * 255), b: Math.round(f(4) * 255) };
40
- }
41
- function colorArgs(inner) {
42
- const [main2, alpha] = inner.split("/");
43
- const parts = main2.split(/[\s,]+/).filter(Boolean);
44
- if (alpha === void 0 && parts.length === 4) return { parts: parts.slice(0, 3), alpha: parts[3] };
45
- return { parts, alpha: alpha?.trim() };
46
- }
47
- function isTransparentAlpha(alpha) {
48
- if (!alpha) return false;
49
- const n = alpha.endsWith("%") ? parseFloat(alpha) / 100 : parseFloat(alpha);
50
- return n === 0;
51
- }
52
- function colorLuminance(value) {
53
- const v = value.trim().toLowerCase();
54
- if (!v || v === "transparent") return null;
55
- if (v === "white") return 1;
56
- if (v === "black") return 0;
57
- if (v.startsWith("#")) {
58
- const rgb = hexToRgb(v);
59
- return rgb ? rgbLuminance(rgb) : null;
60
- }
61
- const fn = v.match(/^([a-z]+)\((.*)\)$/);
62
- if (fn) {
63
- const [, name, inner] = fn;
64
- const { parts, alpha } = colorArgs(inner);
65
- if (isTransparentAlpha(alpha) || parts.length < 3) return null;
66
- const num = (p, scale) => p.endsWith("%") ? parseFloat(p) / 100 * scale : parseFloat(p);
67
- if (name === "rgb" || name === "rgba") {
68
- const [r, g, b] = parts.map((p) => num(p, 255));
69
- if ([r, g, b].some(Number.isNaN)) return null;
70
- return rgbLuminance({ r, g, b });
71
- }
72
- if (name === "hsl" || name === "hsla") {
73
- const h = parseFloat(parts[0]);
74
- const s = num(parts[1], 1);
75
- const l = num(parts[2], 1);
76
- if ([h, s, l].some(Number.isNaN)) return null;
77
- return rgbLuminance(hslToRgb(h, s, l));
78
- }
79
- if (name === "oklch" || name === "oklab") {
80
- const L = num(parts[0], 1);
81
- return Number.isNaN(L) ? null : Math.min(1, Math.max(0, L)) ** 3;
82
- }
83
- if (name === "lab" || name === "lch") {
84
- const L = num(parts[0], 100);
85
- if (Number.isNaN(L)) return null;
86
- const f = (L + 16) / 116;
87
- return Math.min(1, Math.max(0, L > 8 ? f ** 3 : L / 903.3));
88
- }
89
- return null;
90
- }
91
- const triple = v.match(/^(-?[\d.]+)(?:deg)?\s+([\d.]+)%\s+([\d.]+)%$/);
92
- if (triple) {
93
- return rgbLuminance(hslToRgb(parseFloat(triple[1]), parseFloat(triple[2]) / 100, parseFloat(triple[3]) / 100));
94
- }
95
- return null;
96
- }
97
16
  function decideTheme(background, text) {
98
17
  const bg = background ? colorLuminance(background) : null;
99
18
  if (bg !== null) return bg < DARK_LUMINANCE ? "dark" : "light";