@sonordev/site-kit 5.0.0 → 5.3.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.
- package/README.md +15 -0
- package/agent-manifest.json +30 -6
- package/dist/AnalyticsProvider-2YV4ZVZD.js +31 -0
- package/dist/{AnalyticsProvider-TXM3DRLI.js.map → AnalyticsProvider-2YV4ZVZD.js.map} +1 -1
- package/dist/AnalyticsProvider-XSPROVHM.mjs +10 -0
- package/dist/{AnalyticsProvider-KCLRFOX6.mjs.map → AnalyticsProvider-XSPROVHM.mjs.map} +1 -1
- package/dist/{BlogViewTracker-J6LRGUHU.js → BlogViewTracker-BQBJTL5L.js} +6 -6
- package/dist/{BlogViewTracker-J6LRGUHU.js.map → BlogViewTracker-BQBJTL5L.js.map} +1 -1
- package/dist/{BlogViewTracker-PZWAWB3O.mjs → BlogViewTracker-FEAXIUEW.mjs} +5 -5
- package/dist/{BlogViewTracker-PZWAWB3O.mjs.map → BlogViewTracker-FEAXIUEW.mjs.map} +1 -1
- package/dist/ChatWidget-B2DI2OWH.mjs +11 -0
- package/dist/{ChatWidget-PMDPSZXG.mjs.map → ChatWidget-B2DI2OWH.mjs.map} +1 -1
- package/dist/ChatWidget-GPBFJ4A3.js +20 -0
- package/dist/{ChatWidget-LD54Z2PQ.js.map → ChatWidget-GPBFJ4A3.js.map} +1 -1
- package/dist/EngageWidget-JXJSFONK.js +18 -0
- package/dist/{EngageWidget-BF5NMQ5A.js.map → EngageWidget-JXJSFONK.js.map} +1 -1
- package/dist/EngageWidget-KF4HU4YA.mjs +9 -0
- package/dist/{EngageWidget-4CBFRN4Y.mjs.map → EngageWidget-KF4HU4YA.mjs.map} +1 -1
- package/dist/{FileField-VXADIOMN.js → FileField-22BB34L3.js} +6 -6
- package/dist/{FileField-VXADIOMN.js.map → FileField-22BB34L3.js.map} +1 -1
- package/dist/{FileField-FFRHS3XP.mjs → FileField-WI6SADBA.mjs} +5 -5
- package/dist/{FileField-FFRHS3XP.mjs.map → FileField-WI6SADBA.mjs.map} +1 -1
- package/dist/{FormSpotlight-KE46EDP5.mjs → FormSpotlight-6FZV6JOA.mjs} +3 -3
- package/dist/{FormSpotlight-KE46EDP5.mjs.map → FormSpotlight-6FZV6JOA.mjs.map} +1 -1
- package/dist/{FormSpotlight-JG4ZHS56.js → FormSpotlight-QCIN67NB.js} +15 -15
- package/dist/{FormSpotlight-JG4ZHS56.js.map → FormSpotlight-QCIN67NB.js.map} +1 -1
- package/dist/{FormStage-PZKWEXZE.mjs → FormStage-P3IIHVCC.mjs} +3 -3
- package/dist/{FormStage-PZKWEXZE.mjs.map → FormStage-P3IIHVCC.mjs.map} +1 -1
- package/dist/{FormStage-5Z53Z2WY.js → FormStage-SBQQZDW6.js} +13 -13
- package/dist/{FormStage-5Z53Z2WY.js.map → FormStage-SBQQZDW6.js.map} +1 -1
- package/dist/ManagedForm-6LII4DED.js +23 -0
- package/dist/{ManagedForm-E4WHMARH.js.map → ManagedForm-6LII4DED.js.map} +1 -1
- package/dist/ManagedForm-O3JRRWZ6.mjs +14 -0
- package/dist/{ManagedForm-VU2TKV6J.mjs.map → ManagedForm-O3JRRWZ6.mjs.map} +1 -1
- package/dist/{ManagedNewsletterForm-6DET3VGZ.mjs → ManagedNewsletterForm-FFFF5UEX.mjs} +7 -7
- package/dist/{ManagedNewsletterForm-6DET3VGZ.mjs.map → ManagedNewsletterForm-FFFF5UEX.mjs.map} +1 -1
- package/dist/{ManagedNewsletterForm-PG4EX3W6.js → ManagedNewsletterForm-Z7NYZPAN.js} +8 -8
- package/dist/{ManagedNewsletterForm-PG4EX3W6.js.map → ManagedNewsletterForm-Z7NYZPAN.js.map} +1 -1
- package/dist/{SignalCore-RZVTLUC2.mjs → SignalCore-IUOSVYUE.mjs} +5 -5
- package/dist/{SignalCore-RZVTLUC2.mjs.map → SignalCore-IUOSVYUE.mjs.map} +1 -1
- package/dist/{SignalCore-TCUVXVMN.js → SignalCore-WL5WKQEI.js} +11 -11
- package/dist/{SignalCore-TCUVXVMN.js.map → SignalCore-WL5WKQEI.js.map} +1 -1
- package/dist/SitemapSync-2O5UM4GM.mjs +8 -0
- package/dist/{SitemapSync-T75NAFB3.mjs.map → SitemapSync-2O5UM4GM.mjs.map} +1 -1
- package/dist/SitemapSync-LA67GKKS.js +17 -0
- package/dist/{SitemapSync-AJU4DM3G.js.map → SitemapSync-LA67GKKS.js.map} +1 -1
- package/dist/analytics/index.js +9 -9
- package/dist/analytics/index.mjs +4 -4
- package/dist/blog/index.d.ts +9 -5
- package/dist/blog/index.d.ts.map +1 -1
- package/dist/blog/index.js +20 -20
- package/dist/blog/index.mjs +3 -3
- package/dist/blog/server-ui.js +14 -14
- package/dist/blog/server-ui.mjs +2 -2
- package/dist/{chunk-LZY374FB.js → chunk-2OZ2SMZH.js} +4 -4
- package/dist/{chunk-LZY374FB.js.map → chunk-2OZ2SMZH.js.map} +1 -1
- package/dist/{chunk-BQY3FJ3R.js → chunk-3DQXXYCS.js} +8 -8
- package/dist/{chunk-BQY3FJ3R.js.map → chunk-3DQXXYCS.js.map} +1 -1
- package/dist/chunk-3PTKHSF7.mjs +6 -0
- package/dist/{chunk-JPTJGLKS.mjs.map → chunk-3PTKHSF7.mjs.map} +1 -1
- package/dist/{chunk-PPCTL4B5.mjs → chunk-4TU246Q4.mjs} +10 -3
- package/dist/chunk-4TU246Q4.mjs.map +1 -0
- package/dist/{chunk-3FZ76VI5.js → chunk-4YJFC6FC.js} +14 -14
- package/dist/{chunk-3FZ76VI5.js.map → chunk-4YJFC6FC.js.map} +1 -1
- package/dist/{chunk-7T4VMXKD.js → chunk-5I7UEXJL.js} +3 -3
- package/dist/{chunk-7T4VMXKD.js.map → chunk-5I7UEXJL.js.map} +1 -1
- package/dist/{chunk-MGPHBVOK.js → chunk-6ABEAO2K.js} +9 -9
- package/dist/{chunk-MGPHBVOK.js.map → chunk-6ABEAO2K.js.map} +1 -1
- package/dist/{chunk-SW6KWUNI.mjs → chunk-6RYCAW5B.mjs} +3 -3
- package/dist/{chunk-SW6KWUNI.mjs.map → chunk-6RYCAW5B.mjs.map} +1 -1
- package/dist/{chunk-MVJQ4ZA2.mjs → chunk-7MQR4KDL.mjs} +4 -4
- package/dist/{chunk-MVJQ4ZA2.mjs.map → chunk-7MQR4KDL.mjs.map} +1 -1
- package/dist/{chunk-FQ3JQV3M.js → chunk-7NMI7M56.js} +4 -4
- package/dist/{chunk-FQ3JQV3M.js.map → chunk-7NMI7M56.js.map} +1 -1
- package/dist/{chunk-XPAHKYX7.mjs → chunk-7OCQ4646.mjs} +3 -3
- package/dist/{chunk-XPAHKYX7.mjs.map → chunk-7OCQ4646.mjs.map} +1 -1
- package/dist/chunk-AEW7EFYU.js +147 -0
- package/dist/chunk-AEW7EFYU.js.map +1 -0
- package/dist/{chunk-OGPS3DKE.js → chunk-B7FHRTBA.js} +5 -5
- package/dist/{chunk-OGPS3DKE.js.map → chunk-B7FHRTBA.js.map} +1 -1
- package/dist/{chunk-SXPINIJG.mjs → chunk-BAFGZQWP.mjs} +4 -4
- package/dist/{chunk-SXPINIJG.mjs.map → chunk-BAFGZQWP.mjs.map} +1 -1
- package/dist/chunk-BIZT7AYK.js +8 -0
- package/dist/{chunk-S65JSRWW.js.map → chunk-BIZT7AYK.js.map} +1 -1
- package/dist/{chunk-EISVUD75.mjs → chunk-D2D3YKWT.mjs} +3 -3
- package/dist/{chunk-EISVUD75.mjs.map → chunk-D2D3YKWT.mjs.map} +1 -1
- package/dist/{chunk-FTBABL3T.mjs → chunk-DXFZA34N.mjs} +3 -3
- package/dist/{chunk-FTBABL3T.mjs.map → chunk-DXFZA34N.mjs.map} +1 -1
- package/dist/{chunk-4UHO6DPJ.mjs → chunk-F4DZH4E5.mjs} +4 -4
- package/dist/{chunk-4UHO6DPJ.mjs.map → chunk-F4DZH4E5.mjs.map} +1 -1
- package/dist/{chunk-QH3WVTEK.mjs → chunk-FDLFXHUU.mjs} +4 -4
- package/dist/{chunk-QH3WVTEK.mjs.map → chunk-FDLFXHUU.mjs.map} +1 -1
- package/dist/{chunk-MWXBRCM2.mjs → chunk-GCY6VPBG.mjs} +3 -3
- package/dist/{chunk-MWXBRCM2.mjs.map → chunk-GCY6VPBG.mjs.map} +1 -1
- package/dist/{chunk-LLKXPJSE.js → chunk-GF7CQMBL.js} +7 -7
- package/dist/{chunk-LLKXPJSE.js.map → chunk-GF7CQMBL.js.map} +1 -1
- package/dist/{chunk-FDWDXMJL.mjs → chunk-HHX72A2B.mjs} +3 -3
- package/dist/{chunk-FDWDXMJL.mjs.map → chunk-HHX72A2B.mjs.map} +1 -1
- package/dist/{chunk-UFURXSAI.mjs → chunk-ITV76G3L.mjs} +39 -3
- package/dist/chunk-ITV76G3L.mjs.map +1 -0
- package/dist/{chunk-N3RWPAR5.js → chunk-JJ6AI6LW.js} +5 -5
- package/dist/{chunk-N3RWPAR5.js.map → chunk-JJ6AI6LW.js.map} +1 -1
- package/dist/{chunk-AXYKBQVI.mjs → chunk-K447AIIB.mjs} +8 -8
- package/dist/{chunk-AXYKBQVI.mjs.map → chunk-K447AIIB.mjs.map} +1 -1
- package/dist/{chunk-6QQFEJIP.js → chunk-K6YQ73IX.js} +8 -8
- package/dist/{chunk-6QQFEJIP.js.map → chunk-K6YQ73IX.js.map} +1 -1
- package/dist/{chunk-FCKL5CF3.mjs → chunk-KC2FCI5V.mjs} +3 -3
- package/dist/{chunk-FCKL5CF3.mjs.map → chunk-KC2FCI5V.mjs.map} +1 -1
- package/dist/{chunk-YVE65W47.mjs → chunk-KHHMU4UH.mjs} +4 -4
- package/dist/{chunk-YVE65W47.mjs.map → chunk-KHHMU4UH.mjs.map} +1 -1
- package/dist/{chunk-HEUCDF3O.mjs → chunk-KIGIAA6Q.mjs} +3 -3
- package/dist/{chunk-HEUCDF3O.mjs.map → chunk-KIGIAA6Q.mjs.map} +1 -1
- package/dist/{chunk-5OHHYGD6.js → chunk-KMNIW4K4.js} +15 -15
- package/dist/{chunk-5OHHYGD6.js.map → chunk-KMNIW4K4.js.map} +1 -1
- package/dist/{chunk-PZE5L2FK.mjs → chunk-LCRWCOPI.mjs} +4 -4
- package/dist/{chunk-PZE5L2FK.mjs.map → chunk-LCRWCOPI.mjs.map} +1 -1
- package/dist/{chunk-62ODUWUX.js → chunk-LFBMFACZ.js} +40 -4
- package/dist/chunk-LFBMFACZ.js.map +1 -0
- package/dist/chunk-MLXUMVBK.mjs +142 -0
- package/dist/chunk-MLXUMVBK.mjs.map +1 -0
- package/dist/{chunk-3SMG4EXR.mjs → chunk-MOVMDHGE.mjs} +3 -3
- package/dist/{chunk-3SMG4EXR.mjs.map → chunk-MOVMDHGE.mjs.map} +1 -1
- package/dist/{chunk-KWH6RAVY.js → chunk-NQLE3V3T.js} +11 -11
- package/dist/{chunk-KWH6RAVY.js.map → chunk-NQLE3V3T.js.map} +1 -1
- package/dist/{chunk-5JNLZRLX.mjs → chunk-O2KN2SC7.mjs} +3 -3
- package/dist/{chunk-5JNLZRLX.mjs.map → chunk-O2KN2SC7.mjs.map} +1 -1
- package/dist/{chunk-IX5RAZWX.js → chunk-OQBDJRVP.js} +6 -6
- package/dist/{chunk-IX5RAZWX.js.map → chunk-OQBDJRVP.js.map} +1 -1
- package/dist/{chunk-MPO6TRLS.js → chunk-PEIWCJXS.js} +14 -14
- package/dist/{chunk-MPO6TRLS.js.map → chunk-PEIWCJXS.js.map} +1 -1
- package/dist/{chunk-VACFVPNF.js → chunk-RE54UKET.js} +14 -14
- package/dist/{chunk-VACFVPNF.js.map → chunk-RE54UKET.js.map} +1 -1
- package/dist/{chunk-4D2G5ZNP.js → chunk-RMLRZOVE.js} +15 -15
- package/dist/{chunk-4D2G5ZNP.js.map → chunk-RMLRZOVE.js.map} +1 -1
- package/dist/{chunk-GCZMDY2T.js → chunk-ULGTZ2VU.js} +3 -3
- package/dist/{chunk-GCZMDY2T.js.map → chunk-ULGTZ2VU.js.map} +1 -1
- package/dist/{chunk-JY3KZDEM.js → chunk-VTEIXKBA.js} +3 -3
- package/dist/{chunk-JY3KZDEM.js.map → chunk-VTEIXKBA.js.map} +1 -1
- package/dist/{chunk-YGRHEEPX.mjs → chunk-W7QMCG2A.mjs} +7 -7
- package/dist/{chunk-YGRHEEPX.mjs.map → chunk-W7QMCG2A.mjs.map} +1 -1
- package/dist/{chunk-HCN2US4M.js → chunk-WZ6QNL2D.js} +18 -18
- package/dist/{chunk-HCN2US4M.js.map → chunk-WZ6QNL2D.js.map} +1 -1
- package/dist/{chunk-YSZB2DRX.mjs → chunk-X4H2RAIQ.mjs} +3 -3
- package/dist/{chunk-YSZB2DRX.mjs.map → chunk-X4H2RAIQ.mjs.map} +1 -1
- package/dist/{chunk-JIUVBSQZ.js → chunk-X6SAM7CR.js} +3 -3
- package/dist/{chunk-JIUVBSQZ.js.map → chunk-X6SAM7CR.js.map} +1 -1
- package/dist/{chunk-J4JXAFSW.mjs → chunk-XRONA2QL.mjs} +3 -3
- package/dist/{chunk-J4JXAFSW.mjs.map → chunk-XRONA2QL.mjs.map} +1 -1
- package/dist/{chunk-5JQLLF2T.js → chunk-XYZZJZGS.js} +12 -12
- package/dist/{chunk-5JQLLF2T.js.map → chunk-XYZZJZGS.js.map} +1 -1
- package/dist/{chunk-DX6D7HDI.js → chunk-XZI6KUB3.js} +4 -4
- package/dist/{chunk-DX6D7HDI.js.map → chunk-XZI6KUB3.js.map} +1 -1
- package/dist/{chunk-UV6KQUSL.mjs → chunk-YDIINUWD.mjs} +3 -3
- package/dist/{chunk-UV6KQUSL.mjs.map → chunk-YDIINUWD.mjs.map} +1 -1
- package/dist/{chunk-QI2H5KK6.mjs → chunk-YUOVAWCL.mjs} +4 -4
- package/dist/{chunk-QI2H5KK6.mjs.map → chunk-YUOVAWCL.mjs.map} +1 -1
- package/dist/{chunk-UABMMR7U.js → chunk-Z33JXJTJ.js} +10 -3
- package/dist/chunk-Z33JXJTJ.js.map +1 -0
- package/dist/cli/index.js +3 -3
- package/dist/cli/index.mjs +1 -1
- package/dist/client/index.js +4 -4
- package/dist/client/index.mjs +3 -3
- package/dist/commerce/index.js +56 -56
- package/dist/commerce/index.mjs +5 -5
- package/dist/commerce/server-result.test.d.ts +2 -0
- package/dist/commerce/server-result.test.d.ts.map +1 -0
- package/dist/commerce/server.d.ts +51 -0
- package/dist/commerce/server.d.ts.map +1 -1
- package/dist/commerce/server.js +57 -24
- package/dist/commerce/server.js.map +1 -1
- package/dist/commerce/server.mjs +54 -25
- package/dist/commerce/server.mjs.map +1 -1
- package/dist/engage/index.js +13 -13
- package/dist/engage/index.mjs +7 -7
- package/dist/fleet/index.js +8 -8
- package/dist/fleet/index.mjs +4 -4
- package/dist/forms/ga4-identity.d.ts +31 -0
- package/dist/forms/ga4-identity.d.ts.map +1 -0
- package/dist/forms/ga4-identity.test.d.ts +2 -0
- package/dist/forms/ga4-identity.test.d.ts.map +1 -0
- package/dist/forms/index.js +22 -22
- package/dist/forms/index.mjs +9 -9
- package/dist/forms/server.js +10 -10
- package/dist/forms/server.mjs +8 -8
- package/dist/forms/static.js +7 -7
- package/dist/forms/static.mjs +6 -6
- package/dist/forms/submitForm.d.ts.map +1 -1
- package/dist/forms/types.d.ts +13 -0
- package/dist/forms/types.d.ts.map +1 -1
- package/dist/images/index.js +11 -11
- package/dist/images/index.mjs +4 -4
- package/dist/index.js +63 -63
- package/dist/index.mjs +9 -9
- package/dist/layout/client.js +8 -8
- package/dist/layout/client.mjs +7 -7
- package/dist/layout/index.js +10 -10
- package/dist/layout/index.mjs +8 -8
- package/dist/llms/generateLLMsTxt.d.ts.map +1 -1
- package/dist/llms/humanize-industry.d.ts +9 -0
- package/dist/llms/humanize-industry.d.ts.map +1 -0
- package/dist/llms/humanize-industry.test.d.ts +2 -0
- package/dist/llms/humanize-industry.test.d.ts.map +1 -0
- package/dist/llms/index.js +12 -12
- package/dist/llms/index.mjs +2 -2
- package/dist/maps/index.js +5 -5
- package/dist/maps/index.mjs +3 -3
- package/dist/motion/Parallax.d.ts +42 -0
- package/dist/motion/Parallax.d.ts.map +1 -0
- package/dist/motion/Reveal.d.ts +59 -0
- package/dist/motion/Reveal.d.ts.map +1 -0
- package/dist/motion/ScrollScene.d.ts +42 -0
- package/dist/motion/ScrollScene.d.ts.map +1 -0
- package/dist/motion/engine.d.ts +74 -0
- package/dist/motion/engine.d.ts.map +1 -0
- package/dist/motion/failsafe.d.ts +20 -0
- package/dist/motion/failsafe.d.ts.map +1 -0
- package/dist/motion/gsap.d.ts +84 -0
- package/dist/motion/gsap.d.ts.map +1 -0
- package/dist/motion/gsap.js +103 -0
- package/dist/motion/gsap.js.map +1 -0
- package/dist/motion/gsap.mjs +99 -0
- package/dist/motion/gsap.mjs.map +1 -0
- package/dist/motion/index.d.ts +31 -0
- package/dist/motion/index.d.ts.map +1 -0
- package/dist/motion/index.js +252 -0
- package/dist/motion/index.js.map +1 -0
- package/dist/motion/index.mjs +230 -0
- package/dist/motion/index.mjs.map +1 -0
- package/dist/motion/motion.test.d.ts +16 -0
- package/dist/motion/motion.test.d.ts.map +1 -0
- package/dist/motion/three.d.ts +105 -0
- package/dist/motion/three.d.ts.map +1 -0
- package/dist/motion/three.js +150 -0
- package/dist/motion/three.js.map +1 -0
- package/dist/motion/three.mjs +145 -0
- package/dist/motion/three.mjs.map +1 -0
- package/dist/search/index.js +4 -4
- package/dist/search/index.mjs +3 -3
- package/dist/seo/client.js +5 -5
- package/dist/seo/client.mjs +4 -4
- package/dist/seo/index.js +5 -5
- package/dist/seo/index.mjs +4 -4
- package/dist/server/index.js +3 -3
- package/dist/server/index.mjs +2 -2
- package/dist/shared/build-entries.d.ts +7 -1
- package/dist/shared/build-entries.d.ts.map +1 -1
- package/dist/shared/version.d.ts +1 -1
- package/dist/signal/index.js +11 -11
- package/dist/signal/index.mjs +2 -2
- package/dist/sitemap/index.js +2 -2
- package/dist/sitemap/index.mjs +1 -1
- package/dist/sync/index.js +16 -16
- package/dist/sync/index.mjs +4 -4
- package/package.json +28 -2
- package/skills/site-kit/SKILL.md +6 -0
- package/dist/AnalyticsProvider-KCLRFOX6.mjs +0 -10
- package/dist/AnalyticsProvider-TXM3DRLI.js +0 -31
- package/dist/ChatWidget-LD54Z2PQ.js +0 -20
- package/dist/ChatWidget-PMDPSZXG.mjs +0 -11
- package/dist/EngageWidget-4CBFRN4Y.mjs +0 -9
- package/dist/EngageWidget-BF5NMQ5A.js +0 -18
- package/dist/ManagedForm-E4WHMARH.js +0 -23
- package/dist/ManagedForm-VU2TKV6J.mjs +0 -14
- package/dist/SitemapSync-AJU4DM3G.js +0 -17
- package/dist/SitemapSync-T75NAFB3.mjs +0 -8
- package/dist/chunk-62ODUWUX.js.map +0 -1
- package/dist/chunk-JPTJGLKS.mjs +0 -6
- package/dist/chunk-PPCTL4B5.mjs.map +0 -1
- package/dist/chunk-S65JSRWW.js +0 -8
- package/dist/chunk-UABMMR7U.js.map +0 -1
- package/dist/chunk-UFURXSAI.mjs.map +0 -1
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @sonordev/site-kit/motion/three — the Upforge motion standard, tier 2.
|
|
3
|
+
*
|
|
4
|
+
* WebGL stages driven by the scroll engine. Requires the optional peer
|
|
5
|
+
* `three` (~180KB gzipped — flagship builds only):
|
|
6
|
+
*
|
|
7
|
+
* npm i three && npm i -D @types/three
|
|
8
|
+
*
|
|
9
|
+
* A site that never imports this subpath never installs three. NOTHING
|
|
10
|
+
* outside this file may import from 'three' (src/motion/motion.test.tsx
|
|
11
|
+
* enforces it).
|
|
12
|
+
*
|
|
13
|
+
* How it must be used, so the page still ranks and still paints fast:
|
|
14
|
+
*
|
|
15
|
+
* - The scene component that calls `useThreeStage` is loaded with
|
|
16
|
+
* `dynamic(() => import('./Scene'), { ssr: false })` and mounted as a
|
|
17
|
+
* CHILDLESS sibling next to the server-rendered stage — never wrapping
|
|
18
|
+
* it. The copy stays in the HTML; three arrives as its own chunk, on
|
|
19
|
+
* approach.
|
|
20
|
+
* - The canvas is created here at runtime and slotted behind the stage's
|
|
21
|
+
* content. Give that content `position: relative` (and a z-index if
|
|
22
|
+
* needed) so it paints above the canvas.
|
|
23
|
+
* - Every word of copy lives in the DOM, never in the canvas.
|
|
24
|
+
* - `canRunWebGL()` is false under reduced motion, Save-Data, or without
|
|
25
|
+
* WebGL; the hook then mounts nothing and the visitor keeps the
|
|
26
|
+
* server-rendered still. Mobile gets composed stills by design.
|
|
27
|
+
* - Byte budget: ≤5MB of models/textures per scene, fetched on approach.
|
|
28
|
+
*
|
|
29
|
+
* upforgelabs.com is the reference build (components/cinema/SiteScene.tsx).
|
|
30
|
+
*/
|
|
31
|
+
import { type RefObject } from 'react';
|
|
32
|
+
import { PerspectiveCamera, Scene, WebGLRenderer, type Object3D, type Texture } from 'three';
|
|
33
|
+
import { type SceneInfo, type SceneOptions } from './engine';
|
|
34
|
+
/**
|
|
35
|
+
* Whether a WebGL scene should run for this visitor at all. False under
|
|
36
|
+
* prefers-reduced-motion, Save-Data, or when the browser has no WebGL.
|
|
37
|
+
* Always false on the server.
|
|
38
|
+
*/
|
|
39
|
+
export declare function canRunWebGL(): boolean;
|
|
40
|
+
export interface ThreeStage {
|
|
41
|
+
renderer: WebGLRenderer;
|
|
42
|
+
scene: Scene;
|
|
43
|
+
camera: PerspectiveCamera;
|
|
44
|
+
canvas: HTMLCanvasElement;
|
|
45
|
+
/** CSS pixel size of the stage. */
|
|
46
|
+
width: number;
|
|
47
|
+
height: number;
|
|
48
|
+
dpr: number;
|
|
49
|
+
}
|
|
50
|
+
export interface UseThreeStageOptions extends Pick<SceneOptions, 'continuous' | 'reducedP' | 'lerp'> {
|
|
51
|
+
/** Draw the frame for progress p. Called only while the scene is near the viewport. */
|
|
52
|
+
render: (p: number, stage: ThreeStage, info: SceneInfo) => void;
|
|
53
|
+
/** Build the scene. May return a cleanup for anything it allocated outside the scene graph. */
|
|
54
|
+
onReady?: (stage: ThreeStage) => void | (() => void);
|
|
55
|
+
/** Called after every resize, with the camera already updated. */
|
|
56
|
+
onResize?: (stage: ThreeStage) => void;
|
|
57
|
+
/**
|
|
58
|
+
* Element the canvas fills and is sized to. Default: the pin's
|
|
59
|
+
* `[data-sk-stage]` child (what <ScrollScene> renders), else the pin.
|
|
60
|
+
*/
|
|
61
|
+
mount?: RefObject<HTMLElement | null>;
|
|
62
|
+
/** Cap on devicePixelRatio. Default 1.75. */
|
|
63
|
+
maxDpr?: number;
|
|
64
|
+
alpha?: boolean;
|
|
65
|
+
antialias?: boolean;
|
|
66
|
+
fov?: number;
|
|
67
|
+
near?: number;
|
|
68
|
+
far?: number;
|
|
69
|
+
/** DOM event dispatched on the pin once the stage is ready. Default "sk:scene-ready"; false to skip. */
|
|
70
|
+
readyEvent?: string | false;
|
|
71
|
+
/** Override the canRunWebGL() gate. */
|
|
72
|
+
enabled?: boolean;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Mount a three.js renderer on a pinned scene and drive it from scroll.
|
|
76
|
+
* Owns the canvas, sizing, DPR, context loss, and disposal.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* // Scene.tsx — loaded with dynamic(..., { ssr: false }) as a childless sibling
|
|
80
|
+
* 'use client'
|
|
81
|
+
* export default function Scene({ pin }: { pin: RefObject<HTMLElement | null> }) {
|
|
82
|
+
* useThreeStage(pin, {
|
|
83
|
+
* onReady: ({ scene, camera }) => { camera.position.z = 5; scene.add(mesh) },
|
|
84
|
+
* render: (p, { renderer, scene, camera }) => {
|
|
85
|
+
* camera.position.z = 5 - p * 4
|
|
86
|
+
* renderer.render(scene, camera)
|
|
87
|
+
* },
|
|
88
|
+
* })
|
|
89
|
+
* return null
|
|
90
|
+
* }
|
|
91
|
+
*/
|
|
92
|
+
export declare function useThreeStage(pin: RefObject<HTMLElement | null>, options: UseThreeStageOptions): void;
|
|
93
|
+
/**
|
|
94
|
+
* Load a texture and never throw: resolves null on any failure (a
|
|
95
|
+
* cross-origin image without CORS headers, a 404), so one bad asset can't
|
|
96
|
+
* take a whole scene down. sRGB by default, which is right for photographs
|
|
97
|
+
* and screenshots.
|
|
98
|
+
*/
|
|
99
|
+
export declare function loadTexture(url: string, options?: {
|
|
100
|
+
crossOrigin?: string;
|
|
101
|
+
colorSpace?: Texture['colorSpace'];
|
|
102
|
+
}): Promise<Texture | null>;
|
|
103
|
+
/** Dispose every geometry, material, and texture under `root`. */
|
|
104
|
+
export declare function disposeObject(root: Object3D): void;
|
|
105
|
+
//# sourceMappingURL=three.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"three.d.ts","sourceRoot":"","sources":["../../src/motion/three.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACzD,OAAO,EACL,iBAAiB,EACjB,KAAK,EAGL,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,OAAO,EACb,MAAM,OAAO,CAAA;AACd,OAAO,EAAsD,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAA;AAIhH;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAcrC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,aAAa,CAAA;IACvB,KAAK,EAAE,KAAK,CAAA;IACZ,MAAM,EAAE,iBAAiB,CAAA;IACzB,MAAM,EAAE,iBAAiB,CAAA;IACzB,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;IAClG,uFAAuF;IACvF,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;IAC/D,+FAA+F;IAC/F,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAA;IACpD,kEAAkE;IAClE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IACtC;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACrC,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,wGAAwG;IACxG,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAC3B,uCAAuC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAuGrG;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;CAAO,GACzE,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAczB;AAED,kEAAkE;AAClE,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAiBlD"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var chunkAEW7EFYU_js = require('../chunk-AEW7EFYU.js');
|
|
5
|
+
require('../chunk-SNAQBZPT.js');
|
|
6
|
+
var react = require('react');
|
|
7
|
+
var three = require('three');
|
|
8
|
+
|
|
9
|
+
var webglProbe = null;
|
|
10
|
+
function canRunWebGL() {
|
|
11
|
+
if (typeof window === "undefined") return false;
|
|
12
|
+
if (chunkAEW7EFYU_js.prefersReducedMotion()) return false;
|
|
13
|
+
const nav = navigator;
|
|
14
|
+
if (nav.connection?.saveData) return false;
|
|
15
|
+
if (webglProbe === null) {
|
|
16
|
+
try {
|
|
17
|
+
const c = document.createElement("canvas");
|
|
18
|
+
webglProbe = !!(c.getContext("webgl2") || c.getContext("webgl"));
|
|
19
|
+
} catch {
|
|
20
|
+
webglProbe = false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return webglProbe;
|
|
24
|
+
}
|
|
25
|
+
function useThreeStage(pin, options) {
|
|
26
|
+
const optsRef = react.useRef(options);
|
|
27
|
+
optsRef.current = options;
|
|
28
|
+
react.useEffect(() => {
|
|
29
|
+
const pinEl = pin.current;
|
|
30
|
+
if (!pinEl) return;
|
|
31
|
+
const o = optsRef.current;
|
|
32
|
+
if (o.enabled === false || o.enabled === void 0 && !canRunWebGL()) return;
|
|
33
|
+
const host = o.mount?.current ?? pinEl.querySelector("[data-sk-stage]") ?? pinEl;
|
|
34
|
+
const canvas = document.createElement("canvas");
|
|
35
|
+
Object.assign(canvas.style, {
|
|
36
|
+
position: "absolute",
|
|
37
|
+
inset: "0",
|
|
38
|
+
width: "100%",
|
|
39
|
+
height: "100%",
|
|
40
|
+
display: "block",
|
|
41
|
+
pointerEvents: "none"
|
|
42
|
+
});
|
|
43
|
+
canvas.setAttribute("data-sk-three", "");
|
|
44
|
+
canvas.setAttribute("aria-hidden", "true");
|
|
45
|
+
if (getComputedStyle(host).position === "static") host.style.position = "relative";
|
|
46
|
+
host.prepend(canvas);
|
|
47
|
+
let renderer;
|
|
48
|
+
try {
|
|
49
|
+
renderer = new three.WebGLRenderer({
|
|
50
|
+
canvas,
|
|
51
|
+
alpha: o.alpha ?? true,
|
|
52
|
+
antialias: o.antialias ?? true,
|
|
53
|
+
powerPreference: "high-performance"
|
|
54
|
+
});
|
|
55
|
+
} catch {
|
|
56
|
+
canvas.remove();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const scene = new three.Scene();
|
|
60
|
+
const camera = new three.PerspectiveCamera(o.fov ?? 50, 1, o.near ?? 0.1, o.far ?? 1e3);
|
|
61
|
+
const stage = { renderer, scene, camera, canvas, width: 1, height: 1, dpr: 1 };
|
|
62
|
+
const size = () => {
|
|
63
|
+
const w = host.clientWidth || 1;
|
|
64
|
+
const h = host.clientHeight || 1;
|
|
65
|
+
stage.width = w;
|
|
66
|
+
stage.height = h;
|
|
67
|
+
stage.dpr = Math.min(window.devicePixelRatio || 1, optsRef.current.maxDpr ?? 1.75);
|
|
68
|
+
renderer.setPixelRatio(stage.dpr);
|
|
69
|
+
renderer.setSize(w, h, false);
|
|
70
|
+
camera.aspect = w / h;
|
|
71
|
+
camera.updateProjectionMatrix();
|
|
72
|
+
optsRef.current.onResize?.(stage);
|
|
73
|
+
};
|
|
74
|
+
size();
|
|
75
|
+
let lost = false;
|
|
76
|
+
const onLost = (e) => {
|
|
77
|
+
e.preventDefault();
|
|
78
|
+
lost = true;
|
|
79
|
+
};
|
|
80
|
+
const onRestored = () => {
|
|
81
|
+
lost = false;
|
|
82
|
+
chunkAEW7EFYU_js.refreshScenes();
|
|
83
|
+
};
|
|
84
|
+
canvas.addEventListener("webglcontextlost", onLost);
|
|
85
|
+
canvas.addEventListener("webglcontextrestored", onRestored);
|
|
86
|
+
const ro = new ResizeObserver(() => {
|
|
87
|
+
size();
|
|
88
|
+
chunkAEW7EFYU_js.refreshScenes();
|
|
89
|
+
});
|
|
90
|
+
ro.observe(host);
|
|
91
|
+
const cleanupReady = optsRef.current.onReady?.(stage);
|
|
92
|
+
const unregister = chunkAEW7EFYU_js.registerScene(
|
|
93
|
+
pinEl,
|
|
94
|
+
(p, info) => {
|
|
95
|
+
if (lost) return;
|
|
96
|
+
optsRef.current.render(p, stage, info);
|
|
97
|
+
},
|
|
98
|
+
{ continuous: o.continuous, reducedP: o.reducedP, lerp: o.lerp, mode: "pin" }
|
|
99
|
+
);
|
|
100
|
+
const evt = o.readyEvent === false ? null : o.readyEvent ?? "sk:scene-ready";
|
|
101
|
+
if (evt) pinEl.dispatchEvent(new CustomEvent(evt, { bubbles: true }));
|
|
102
|
+
return () => {
|
|
103
|
+
unregister();
|
|
104
|
+
ro.disconnect();
|
|
105
|
+
canvas.removeEventListener("webglcontextlost", onLost);
|
|
106
|
+
canvas.removeEventListener("webglcontextrestored", onRestored);
|
|
107
|
+
if (typeof cleanupReady === "function") cleanupReady();
|
|
108
|
+
disposeObject(scene);
|
|
109
|
+
renderer.dispose();
|
|
110
|
+
canvas.remove();
|
|
111
|
+
};
|
|
112
|
+
}, [pin]);
|
|
113
|
+
}
|
|
114
|
+
function loadTexture(url, options = {}) {
|
|
115
|
+
return new Promise((resolve) => {
|
|
116
|
+
const loader = new three.TextureLoader();
|
|
117
|
+
loader.setCrossOrigin(options.crossOrigin ?? "anonymous");
|
|
118
|
+
loader.load(
|
|
119
|
+
url,
|
|
120
|
+
(t) => {
|
|
121
|
+
t.colorSpace = options.colorSpace ?? three.SRGBColorSpace;
|
|
122
|
+
resolve(t);
|
|
123
|
+
},
|
|
124
|
+
void 0,
|
|
125
|
+
() => resolve(null)
|
|
126
|
+
);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
function disposeObject(root) {
|
|
130
|
+
root.traverse((obj) => {
|
|
131
|
+
const mesh = obj;
|
|
132
|
+
mesh.geometry?.dispose();
|
|
133
|
+
const mats = Array.isArray(mesh.material) ? mesh.material : mesh.material ? [mesh.material] : [];
|
|
134
|
+
for (const m of mats) {
|
|
135
|
+
for (const v of Object.values(m)) {
|
|
136
|
+
if (v && typeof v === "object" && v.isTexture) {
|
|
137
|
+
v.dispose();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
m.dispose();
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
exports.canRunWebGL = canRunWebGL;
|
|
146
|
+
exports.disposeObject = disposeObject;
|
|
147
|
+
exports.loadTexture = loadTexture;
|
|
148
|
+
exports.useThreeStage = useThreeStage;
|
|
149
|
+
//# sourceMappingURL=three.js.map
|
|
150
|
+
//# sourceMappingURL=three.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/motion/three.ts"],"names":["prefersReducedMotion","useRef","useEffect","WebGLRenderer","Scene","PerspectiveCamera","refreshScenes","registerScene","TextureLoader","SRGBColorSpace"],"mappings":"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","file":"three.js","sourcesContent":["/**\n * @sonordev/site-kit/motion/three — the Upforge motion standard, tier 2.\n *\n * WebGL stages driven by the scroll engine. Requires the optional peer\n * `three` (~180KB gzipped — flagship builds only):\n *\n * npm i three && npm i -D @types/three\n *\n * A site that never imports this subpath never installs three. NOTHING\n * outside this file may import from 'three' (src/motion/motion.test.tsx\n * enforces it).\n *\n * How it must be used, so the page still ranks and still paints fast:\n *\n * - The scene component that calls `useThreeStage` is loaded with\n * `dynamic(() => import('./Scene'), { ssr: false })` and mounted as a\n * CHILDLESS sibling next to the server-rendered stage — never wrapping\n * it. The copy stays in the HTML; three arrives as its own chunk, on\n * approach.\n * - The canvas is created here at runtime and slotted behind the stage's\n * content. Give that content `position: relative` (and a z-index if\n * needed) so it paints above the canvas.\n * - Every word of copy lives in the DOM, never in the canvas.\n * - `canRunWebGL()` is false under reduced motion, Save-Data, or without\n * WebGL; the hook then mounts nothing and the visitor keeps the\n * server-rendered still. Mobile gets composed stills by design.\n * - Byte budget: ≤5MB of models/textures per scene, fetched on approach.\n *\n * upforgelabs.com is the reference build (components/cinema/SiteScene.tsx).\n */\n\n'use client'\n\nimport { useEffect, useRef, type RefObject } from 'react'\nimport {\n PerspectiveCamera,\n Scene,\n SRGBColorSpace,\n TextureLoader,\n WebGLRenderer,\n type Object3D,\n type Texture,\n} from 'three'\nimport { prefersReducedMotion, refreshScenes, registerScene, type SceneInfo, type SceneOptions } from './engine'\n\nlet webglProbe: boolean | null = null\n\n/**\n * Whether a WebGL scene should run for this visitor at all. False under\n * prefers-reduced-motion, Save-Data, or when the browser has no WebGL.\n * Always false on the server.\n */\nexport function canRunWebGL(): boolean {\n if (typeof window === 'undefined') return false\n if (prefersReducedMotion()) return false\n const nav = navigator as Navigator & { connection?: { saveData?: boolean } }\n if (nav.connection?.saveData) return false\n if (webglProbe === null) {\n try {\n const c = document.createElement('canvas')\n webglProbe = !!(c.getContext('webgl2') || c.getContext('webgl'))\n } catch {\n webglProbe = false\n }\n }\n return webglProbe\n}\n\nexport interface ThreeStage {\n renderer: WebGLRenderer\n scene: Scene\n camera: PerspectiveCamera\n canvas: HTMLCanvasElement\n /** CSS pixel size of the stage. */\n width: number\n height: number\n dpr: number\n}\n\nexport interface UseThreeStageOptions extends Pick<SceneOptions, 'continuous' | 'reducedP' | 'lerp'> {\n /** Draw the frame for progress p. Called only while the scene is near the viewport. */\n render: (p: number, stage: ThreeStage, info: SceneInfo) => void\n /** Build the scene. May return a cleanup for anything it allocated outside the scene graph. */\n onReady?: (stage: ThreeStage) => void | (() => void)\n /** Called after every resize, with the camera already updated. */\n onResize?: (stage: ThreeStage) => void\n /**\n * Element the canvas fills and is sized to. Default: the pin's\n * `[data-sk-stage]` child (what <ScrollScene> renders), else the pin.\n */\n mount?: RefObject<HTMLElement | null>\n /** Cap on devicePixelRatio. Default 1.75. */\n maxDpr?: number\n alpha?: boolean\n antialias?: boolean\n fov?: number\n near?: number\n far?: number\n /** DOM event dispatched on the pin once the stage is ready. Default \"sk:scene-ready\"; false to skip. */\n readyEvent?: string | false\n /** Override the canRunWebGL() gate. */\n enabled?: boolean\n}\n\n/**\n * Mount a three.js renderer on a pinned scene and drive it from scroll.\n * Owns the canvas, sizing, DPR, context loss, and disposal.\n *\n * @example\n * // Scene.tsx — loaded with dynamic(..., { ssr: false }) as a childless sibling\n * 'use client'\n * export default function Scene({ pin }: { pin: RefObject<HTMLElement | null> }) {\n * useThreeStage(pin, {\n * onReady: ({ scene, camera }) => { camera.position.z = 5; scene.add(mesh) },\n * render: (p, { renderer, scene, camera }) => {\n * camera.position.z = 5 - p * 4\n * renderer.render(scene, camera)\n * },\n * })\n * return null\n * }\n */\nexport function useThreeStage(pin: RefObject<HTMLElement | null>, options: UseThreeStageOptions): void {\n const optsRef = useRef(options)\n optsRef.current = options\n\n useEffect(() => {\n const pinEl = pin.current\n if (!pinEl) return\n const o = optsRef.current\n if (o.enabled === false || (o.enabled === undefined && !canRunWebGL())) return\n\n const host =\n o.mount?.current ??\n (pinEl.querySelector('[data-sk-stage]') as HTMLElement | null) ??\n pinEl\n\n const canvas = document.createElement('canvas')\n Object.assign(canvas.style, {\n position: 'absolute',\n inset: '0',\n width: '100%',\n height: '100%',\n display: 'block',\n pointerEvents: 'none',\n } satisfies Partial<CSSStyleDeclaration>)\n canvas.setAttribute('data-sk-three', '')\n canvas.setAttribute('aria-hidden', 'true')\n if (getComputedStyle(host).position === 'static') host.style.position = 'relative'\n host.prepend(canvas)\n\n let renderer: WebGLRenderer\n try {\n renderer = new WebGLRenderer({\n canvas,\n alpha: o.alpha ?? true,\n antialias: o.antialias ?? true,\n powerPreference: 'high-performance',\n })\n } catch {\n canvas.remove()\n return\n }\n\n const scene = new Scene()\n const camera = new PerspectiveCamera(o.fov ?? 50, 1, o.near ?? 0.1, o.far ?? 1000)\n const stage: ThreeStage = { renderer, scene, camera, canvas, width: 1, height: 1, dpr: 1 }\n\n const size = () => {\n const w = host.clientWidth || 1\n const h = host.clientHeight || 1\n stage.width = w\n stage.height = h\n stage.dpr = Math.min(window.devicePixelRatio || 1, optsRef.current.maxDpr ?? 1.75)\n renderer.setPixelRatio(stage.dpr)\n renderer.setSize(w, h, false)\n camera.aspect = w / h\n camera.updateProjectionMatrix()\n optsRef.current.onResize?.(stage)\n }\n size()\n\n let lost = false\n const onLost = (e: Event) => {\n e.preventDefault()\n lost = true\n }\n const onRestored = () => {\n lost = false\n refreshScenes()\n }\n canvas.addEventListener('webglcontextlost', onLost)\n canvas.addEventListener('webglcontextrestored', onRestored)\n\n const ro = new ResizeObserver(() => {\n size()\n refreshScenes()\n })\n ro.observe(host)\n\n const cleanupReady = optsRef.current.onReady?.(stage)\n\n const unregister = registerScene(\n pinEl,\n (p, info) => {\n if (lost) return\n optsRef.current.render(p, stage, info)\n },\n { continuous: o.continuous, reducedP: o.reducedP, lerp: o.lerp, mode: 'pin' },\n )\n\n const evt = o.readyEvent === false ? null : (o.readyEvent ?? 'sk:scene-ready')\n if (evt) pinEl.dispatchEvent(new CustomEvent(evt, { bubbles: true }))\n\n return () => {\n unregister()\n ro.disconnect()\n canvas.removeEventListener('webglcontextlost', onLost)\n canvas.removeEventListener('webglcontextrestored', onRestored)\n if (typeof cleanupReady === 'function') cleanupReady()\n disposeObject(scene)\n renderer.dispose()\n canvas.remove()\n }\n }, [pin])\n}\n\n/**\n * Load a texture and never throw: resolves null on any failure (a\n * cross-origin image without CORS headers, a 404), so one bad asset can't\n * take a whole scene down. sRGB by default, which is right for photographs\n * and screenshots.\n */\nexport function loadTexture(\n url: string,\n options: { crossOrigin?: string; colorSpace?: Texture['colorSpace'] } = {},\n): Promise<Texture | null> {\n return new Promise((resolve) => {\n const loader = new TextureLoader()\n loader.setCrossOrigin(options.crossOrigin ?? 'anonymous')\n loader.load(\n url,\n (t) => {\n t.colorSpace = options.colorSpace ?? SRGBColorSpace\n resolve(t)\n },\n undefined,\n () => resolve(null),\n )\n })\n}\n\n/** Dispose every geometry, material, and texture under `root`. */\nexport function disposeObject(root: Object3D): void {\n root.traverse((obj) => {\n const mesh = obj as Object3D & {\n geometry?: { dispose(): void }\n material?: unknown\n }\n mesh.geometry?.dispose()\n const mats = Array.isArray(mesh.material) ? mesh.material : mesh.material ? [mesh.material] : []\n for (const m of mats as Array<Record<string, unknown> & { dispose(): void }>) {\n for (const v of Object.values(m)) {\n if (v && typeof v === 'object' && (v as { isTexture?: boolean }).isTexture) {\n ;(v as Texture).dispose()\n }\n }\n m.dispose()\n }\n })\n}\n"]}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { prefersReducedMotion, refreshScenes, registerScene } from '../chunk-MLXUMVBK.mjs';
|
|
3
|
+
import '../chunk-BEXTDHO4.mjs';
|
|
4
|
+
import { useRef, useEffect } from 'react';
|
|
5
|
+
import { WebGLRenderer, Scene, PerspectiveCamera, TextureLoader, SRGBColorSpace } from 'three';
|
|
6
|
+
|
|
7
|
+
var webglProbe = null;
|
|
8
|
+
function canRunWebGL() {
|
|
9
|
+
if (typeof window === "undefined") return false;
|
|
10
|
+
if (prefersReducedMotion()) return false;
|
|
11
|
+
const nav = navigator;
|
|
12
|
+
if (nav.connection?.saveData) return false;
|
|
13
|
+
if (webglProbe === null) {
|
|
14
|
+
try {
|
|
15
|
+
const c = document.createElement("canvas");
|
|
16
|
+
webglProbe = !!(c.getContext("webgl2") || c.getContext("webgl"));
|
|
17
|
+
} catch {
|
|
18
|
+
webglProbe = false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return webglProbe;
|
|
22
|
+
}
|
|
23
|
+
function useThreeStage(pin, options) {
|
|
24
|
+
const optsRef = useRef(options);
|
|
25
|
+
optsRef.current = options;
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
const pinEl = pin.current;
|
|
28
|
+
if (!pinEl) return;
|
|
29
|
+
const o = optsRef.current;
|
|
30
|
+
if (o.enabled === false || o.enabled === void 0 && !canRunWebGL()) return;
|
|
31
|
+
const host = o.mount?.current ?? pinEl.querySelector("[data-sk-stage]") ?? pinEl;
|
|
32
|
+
const canvas = document.createElement("canvas");
|
|
33
|
+
Object.assign(canvas.style, {
|
|
34
|
+
position: "absolute",
|
|
35
|
+
inset: "0",
|
|
36
|
+
width: "100%",
|
|
37
|
+
height: "100%",
|
|
38
|
+
display: "block",
|
|
39
|
+
pointerEvents: "none"
|
|
40
|
+
});
|
|
41
|
+
canvas.setAttribute("data-sk-three", "");
|
|
42
|
+
canvas.setAttribute("aria-hidden", "true");
|
|
43
|
+
if (getComputedStyle(host).position === "static") host.style.position = "relative";
|
|
44
|
+
host.prepend(canvas);
|
|
45
|
+
let renderer;
|
|
46
|
+
try {
|
|
47
|
+
renderer = new WebGLRenderer({
|
|
48
|
+
canvas,
|
|
49
|
+
alpha: o.alpha ?? true,
|
|
50
|
+
antialias: o.antialias ?? true,
|
|
51
|
+
powerPreference: "high-performance"
|
|
52
|
+
});
|
|
53
|
+
} catch {
|
|
54
|
+
canvas.remove();
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const scene = new Scene();
|
|
58
|
+
const camera = new PerspectiveCamera(o.fov ?? 50, 1, o.near ?? 0.1, o.far ?? 1e3);
|
|
59
|
+
const stage = { renderer, scene, camera, canvas, width: 1, height: 1, dpr: 1 };
|
|
60
|
+
const size = () => {
|
|
61
|
+
const w = host.clientWidth || 1;
|
|
62
|
+
const h = host.clientHeight || 1;
|
|
63
|
+
stage.width = w;
|
|
64
|
+
stage.height = h;
|
|
65
|
+
stage.dpr = Math.min(window.devicePixelRatio || 1, optsRef.current.maxDpr ?? 1.75);
|
|
66
|
+
renderer.setPixelRatio(stage.dpr);
|
|
67
|
+
renderer.setSize(w, h, false);
|
|
68
|
+
camera.aspect = w / h;
|
|
69
|
+
camera.updateProjectionMatrix();
|
|
70
|
+
optsRef.current.onResize?.(stage);
|
|
71
|
+
};
|
|
72
|
+
size();
|
|
73
|
+
let lost = false;
|
|
74
|
+
const onLost = (e) => {
|
|
75
|
+
e.preventDefault();
|
|
76
|
+
lost = true;
|
|
77
|
+
};
|
|
78
|
+
const onRestored = () => {
|
|
79
|
+
lost = false;
|
|
80
|
+
refreshScenes();
|
|
81
|
+
};
|
|
82
|
+
canvas.addEventListener("webglcontextlost", onLost);
|
|
83
|
+
canvas.addEventListener("webglcontextrestored", onRestored);
|
|
84
|
+
const ro = new ResizeObserver(() => {
|
|
85
|
+
size();
|
|
86
|
+
refreshScenes();
|
|
87
|
+
});
|
|
88
|
+
ro.observe(host);
|
|
89
|
+
const cleanupReady = optsRef.current.onReady?.(stage);
|
|
90
|
+
const unregister = registerScene(
|
|
91
|
+
pinEl,
|
|
92
|
+
(p, info) => {
|
|
93
|
+
if (lost) return;
|
|
94
|
+
optsRef.current.render(p, stage, info);
|
|
95
|
+
},
|
|
96
|
+
{ continuous: o.continuous, reducedP: o.reducedP, lerp: o.lerp, mode: "pin" }
|
|
97
|
+
);
|
|
98
|
+
const evt = o.readyEvent === false ? null : o.readyEvent ?? "sk:scene-ready";
|
|
99
|
+
if (evt) pinEl.dispatchEvent(new CustomEvent(evt, { bubbles: true }));
|
|
100
|
+
return () => {
|
|
101
|
+
unregister();
|
|
102
|
+
ro.disconnect();
|
|
103
|
+
canvas.removeEventListener("webglcontextlost", onLost);
|
|
104
|
+
canvas.removeEventListener("webglcontextrestored", onRestored);
|
|
105
|
+
if (typeof cleanupReady === "function") cleanupReady();
|
|
106
|
+
disposeObject(scene);
|
|
107
|
+
renderer.dispose();
|
|
108
|
+
canvas.remove();
|
|
109
|
+
};
|
|
110
|
+
}, [pin]);
|
|
111
|
+
}
|
|
112
|
+
function loadTexture(url, options = {}) {
|
|
113
|
+
return new Promise((resolve) => {
|
|
114
|
+
const loader = new TextureLoader();
|
|
115
|
+
loader.setCrossOrigin(options.crossOrigin ?? "anonymous");
|
|
116
|
+
loader.load(
|
|
117
|
+
url,
|
|
118
|
+
(t) => {
|
|
119
|
+
t.colorSpace = options.colorSpace ?? SRGBColorSpace;
|
|
120
|
+
resolve(t);
|
|
121
|
+
},
|
|
122
|
+
void 0,
|
|
123
|
+
() => resolve(null)
|
|
124
|
+
);
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
function disposeObject(root) {
|
|
128
|
+
root.traverse((obj) => {
|
|
129
|
+
const mesh = obj;
|
|
130
|
+
mesh.geometry?.dispose();
|
|
131
|
+
const mats = Array.isArray(mesh.material) ? mesh.material : mesh.material ? [mesh.material] : [];
|
|
132
|
+
for (const m of mats) {
|
|
133
|
+
for (const v of Object.values(m)) {
|
|
134
|
+
if (v && typeof v === "object" && v.isTexture) {
|
|
135
|
+
v.dispose();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
m.dispose();
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export { canRunWebGL, disposeObject, loadTexture, useThreeStage };
|
|
144
|
+
//# sourceMappingURL=three.mjs.map
|
|
145
|
+
//# sourceMappingURL=three.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/motion/three.ts"],"names":[],"mappings":"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","file":"three.mjs","sourcesContent":["/**\n * @sonordev/site-kit/motion/three — the Upforge motion standard, tier 2.\n *\n * WebGL stages driven by the scroll engine. Requires the optional peer\n * `three` (~180KB gzipped — flagship builds only):\n *\n * npm i three && npm i -D @types/three\n *\n * A site that never imports this subpath never installs three. NOTHING\n * outside this file may import from 'three' (src/motion/motion.test.tsx\n * enforces it).\n *\n * How it must be used, so the page still ranks and still paints fast:\n *\n * - The scene component that calls `useThreeStage` is loaded with\n * `dynamic(() => import('./Scene'), { ssr: false })` and mounted as a\n * CHILDLESS sibling next to the server-rendered stage — never wrapping\n * it. The copy stays in the HTML; three arrives as its own chunk, on\n * approach.\n * - The canvas is created here at runtime and slotted behind the stage's\n * content. Give that content `position: relative` (and a z-index if\n * needed) so it paints above the canvas.\n * - Every word of copy lives in the DOM, never in the canvas.\n * - `canRunWebGL()` is false under reduced motion, Save-Data, or without\n * WebGL; the hook then mounts nothing and the visitor keeps the\n * server-rendered still. Mobile gets composed stills by design.\n * - Byte budget: ≤5MB of models/textures per scene, fetched on approach.\n *\n * upforgelabs.com is the reference build (components/cinema/SiteScene.tsx).\n */\n\n'use client'\n\nimport { useEffect, useRef, type RefObject } from 'react'\nimport {\n PerspectiveCamera,\n Scene,\n SRGBColorSpace,\n TextureLoader,\n WebGLRenderer,\n type Object3D,\n type Texture,\n} from 'three'\nimport { prefersReducedMotion, refreshScenes, registerScene, type SceneInfo, type SceneOptions } from './engine'\n\nlet webglProbe: boolean | null = null\n\n/**\n * Whether a WebGL scene should run for this visitor at all. False under\n * prefers-reduced-motion, Save-Data, or when the browser has no WebGL.\n * Always false on the server.\n */\nexport function canRunWebGL(): boolean {\n if (typeof window === 'undefined') return false\n if (prefersReducedMotion()) return false\n const nav = navigator as Navigator & { connection?: { saveData?: boolean } }\n if (nav.connection?.saveData) return false\n if (webglProbe === null) {\n try {\n const c = document.createElement('canvas')\n webglProbe = !!(c.getContext('webgl2') || c.getContext('webgl'))\n } catch {\n webglProbe = false\n }\n }\n return webglProbe\n}\n\nexport interface ThreeStage {\n renderer: WebGLRenderer\n scene: Scene\n camera: PerspectiveCamera\n canvas: HTMLCanvasElement\n /** CSS pixel size of the stage. */\n width: number\n height: number\n dpr: number\n}\n\nexport interface UseThreeStageOptions extends Pick<SceneOptions, 'continuous' | 'reducedP' | 'lerp'> {\n /** Draw the frame for progress p. Called only while the scene is near the viewport. */\n render: (p: number, stage: ThreeStage, info: SceneInfo) => void\n /** Build the scene. May return a cleanup for anything it allocated outside the scene graph. */\n onReady?: (stage: ThreeStage) => void | (() => void)\n /** Called after every resize, with the camera already updated. */\n onResize?: (stage: ThreeStage) => void\n /**\n * Element the canvas fills and is sized to. Default: the pin's\n * `[data-sk-stage]` child (what <ScrollScene> renders), else the pin.\n */\n mount?: RefObject<HTMLElement | null>\n /** Cap on devicePixelRatio. Default 1.75. */\n maxDpr?: number\n alpha?: boolean\n antialias?: boolean\n fov?: number\n near?: number\n far?: number\n /** DOM event dispatched on the pin once the stage is ready. Default \"sk:scene-ready\"; false to skip. */\n readyEvent?: string | false\n /** Override the canRunWebGL() gate. */\n enabled?: boolean\n}\n\n/**\n * Mount a three.js renderer on a pinned scene and drive it from scroll.\n * Owns the canvas, sizing, DPR, context loss, and disposal.\n *\n * @example\n * // Scene.tsx — loaded with dynamic(..., { ssr: false }) as a childless sibling\n * 'use client'\n * export default function Scene({ pin }: { pin: RefObject<HTMLElement | null> }) {\n * useThreeStage(pin, {\n * onReady: ({ scene, camera }) => { camera.position.z = 5; scene.add(mesh) },\n * render: (p, { renderer, scene, camera }) => {\n * camera.position.z = 5 - p * 4\n * renderer.render(scene, camera)\n * },\n * })\n * return null\n * }\n */\nexport function useThreeStage(pin: RefObject<HTMLElement | null>, options: UseThreeStageOptions): void {\n const optsRef = useRef(options)\n optsRef.current = options\n\n useEffect(() => {\n const pinEl = pin.current\n if (!pinEl) return\n const o = optsRef.current\n if (o.enabled === false || (o.enabled === undefined && !canRunWebGL())) return\n\n const host =\n o.mount?.current ??\n (pinEl.querySelector('[data-sk-stage]') as HTMLElement | null) ??\n pinEl\n\n const canvas = document.createElement('canvas')\n Object.assign(canvas.style, {\n position: 'absolute',\n inset: '0',\n width: '100%',\n height: '100%',\n display: 'block',\n pointerEvents: 'none',\n } satisfies Partial<CSSStyleDeclaration>)\n canvas.setAttribute('data-sk-three', '')\n canvas.setAttribute('aria-hidden', 'true')\n if (getComputedStyle(host).position === 'static') host.style.position = 'relative'\n host.prepend(canvas)\n\n let renderer: WebGLRenderer\n try {\n renderer = new WebGLRenderer({\n canvas,\n alpha: o.alpha ?? true,\n antialias: o.antialias ?? true,\n powerPreference: 'high-performance',\n })\n } catch {\n canvas.remove()\n return\n }\n\n const scene = new Scene()\n const camera = new PerspectiveCamera(o.fov ?? 50, 1, o.near ?? 0.1, o.far ?? 1000)\n const stage: ThreeStage = { renderer, scene, camera, canvas, width: 1, height: 1, dpr: 1 }\n\n const size = () => {\n const w = host.clientWidth || 1\n const h = host.clientHeight || 1\n stage.width = w\n stage.height = h\n stage.dpr = Math.min(window.devicePixelRatio || 1, optsRef.current.maxDpr ?? 1.75)\n renderer.setPixelRatio(stage.dpr)\n renderer.setSize(w, h, false)\n camera.aspect = w / h\n camera.updateProjectionMatrix()\n optsRef.current.onResize?.(stage)\n }\n size()\n\n let lost = false\n const onLost = (e: Event) => {\n e.preventDefault()\n lost = true\n }\n const onRestored = () => {\n lost = false\n refreshScenes()\n }\n canvas.addEventListener('webglcontextlost', onLost)\n canvas.addEventListener('webglcontextrestored', onRestored)\n\n const ro = new ResizeObserver(() => {\n size()\n refreshScenes()\n })\n ro.observe(host)\n\n const cleanupReady = optsRef.current.onReady?.(stage)\n\n const unregister = registerScene(\n pinEl,\n (p, info) => {\n if (lost) return\n optsRef.current.render(p, stage, info)\n },\n { continuous: o.continuous, reducedP: o.reducedP, lerp: o.lerp, mode: 'pin' },\n )\n\n const evt = o.readyEvent === false ? null : (o.readyEvent ?? 'sk:scene-ready')\n if (evt) pinEl.dispatchEvent(new CustomEvent(evt, { bubbles: true }))\n\n return () => {\n unregister()\n ro.disconnect()\n canvas.removeEventListener('webglcontextlost', onLost)\n canvas.removeEventListener('webglcontextrestored', onRestored)\n if (typeof cleanupReady === 'function') cleanupReady()\n disposeObject(scene)\n renderer.dispose()\n canvas.remove()\n }\n }, [pin])\n}\n\n/**\n * Load a texture and never throw: resolves null on any failure (a\n * cross-origin image without CORS headers, a 404), so one bad asset can't\n * take a whole scene down. sRGB by default, which is right for photographs\n * and screenshots.\n */\nexport function loadTexture(\n url: string,\n options: { crossOrigin?: string; colorSpace?: Texture['colorSpace'] } = {},\n): Promise<Texture | null> {\n return new Promise((resolve) => {\n const loader = new TextureLoader()\n loader.setCrossOrigin(options.crossOrigin ?? 'anonymous')\n loader.load(\n url,\n (t) => {\n t.colorSpace = options.colorSpace ?? SRGBColorSpace\n resolve(t)\n },\n undefined,\n () => resolve(null),\n )\n })\n}\n\n/** Dispose every geometry, material, and texture under `root`. */\nexport function disposeObject(root: Object3D): void {\n root.traverse((obj) => {\n const mesh = obj as Object3D & {\n geometry?: { dispose(): void }\n material?: unknown\n }\n mesh.geometry?.dispose()\n const mats = Array.isArray(mesh.material) ? mesh.material : mesh.material ? [mesh.material] : []\n for (const m of mats as Array<Record<string, unknown> & { dispose(): void }>) {\n for (const v of Object.values(m)) {\n if (v && typeof v === 'object' && (v as { isTexture?: boolean }).isTexture) {\n ;(v as Texture).dispose()\n }\n }\n m.dispose()\n }\n })\n}\n"]}
|
package/dist/search/index.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunkG2WC3CXW_js = require('../chunk-G2WC3CXW.js');
|
|
5
|
-
var
|
|
6
|
-
require('../chunk-
|
|
7
|
-
require('../chunk-
|
|
5
|
+
var chunkRMLRZOVE_js = require('../chunk-RMLRZOVE.js');
|
|
6
|
+
require('../chunk-7NMI7M56.js');
|
|
7
|
+
require('../chunk-BIZT7AYK.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
|
|
42
|
+
const res = await chunkRMLRZOVE_js.sonorFetch(
|
|
43
43
|
`${apiUrl}${chunkG2WC3CXW_js.SEARCH_ENDPOINT}`,
|
|
44
44
|
{
|
|
45
45
|
method: "POST",
|
package/dist/search/index.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { SEARCH_ENDPOINT } from '../chunk-75A4KY4X.mjs';
|
|
3
3
|
export { SEARCH_ENDPOINT } from '../chunk-75A4KY4X.mjs';
|
|
4
|
-
import { sonorFetch } from '../chunk-
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
4
|
+
import { sonorFetch } from '../chunk-F4DZH4E5.mjs';
|
|
5
|
+
import '../chunk-HHX72A2B.mjs';
|
|
6
|
+
import '../chunk-3PTKHSF7.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';
|
package/dist/seo/client.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkB7FHRTBA_js = require('../chunk-B7FHRTBA.js');
|
|
5
5
|
require('../chunk-JEOKDUPQ.js');
|
|
6
|
-
require('../chunk-
|
|
7
|
-
require('../chunk-
|
|
8
|
-
require('../chunk-
|
|
6
|
+
require('../chunk-RMLRZOVE.js');
|
|
7
|
+
require('../chunk-7NMI7M56.js');
|
|
8
|
+
require('../chunk-BIZT7AYK.js');
|
|
9
9
|
require('../chunk-SNAQBZPT.js');
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
Object.defineProperty(exports, "SitemapSync", {
|
|
14
14
|
enumerable: true,
|
|
15
|
-
get: function () { return
|
|
15
|
+
get: function () { return chunkB7FHRTBA_js.SitemapSync; }
|
|
16
16
|
});
|
|
17
17
|
//# sourceMappingURL=client.js.map
|
|
18
18
|
//# sourceMappingURL=client.js.map
|
package/dist/seo/client.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { SitemapSync } from '../chunk-
|
|
2
|
+
export { SitemapSync } from '../chunk-XRONA2QL.mjs';
|
|
3
3
|
import '../chunk-QJU6HBSK.mjs';
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-F4DZH4E5.mjs';
|
|
5
|
+
import '../chunk-HHX72A2B.mjs';
|
|
6
|
+
import '../chunk-3PTKHSF7.mjs';
|
|
7
7
|
import '../chunk-BEXTDHO4.mjs';
|
|
8
8
|
//# sourceMappingURL=client.mjs.map
|
|
9
9
|
//# sourceMappingURL=client.mjs.map
|
package/dist/seo/index.js
CHANGED
|
@@ -3,14 +3,14 @@
|
|
|
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
|
|
6
|
+
var chunkB7FHRTBA_js = require('../chunk-B7FHRTBA.js');
|
|
7
7
|
var chunkL2LJQIM3_js = require('../chunk-L2LJQIM3.js');
|
|
8
8
|
var chunk3TXX5KIN_js = require('../chunk-3TXX5KIN.js');
|
|
9
9
|
require('../chunk-O5GHP7UO.js');
|
|
10
10
|
require('../chunk-JEOKDUPQ.js');
|
|
11
|
-
require('../chunk-
|
|
12
|
-
require('../chunk-
|
|
13
|
-
require('../chunk-
|
|
11
|
+
require('../chunk-RMLRZOVE.js');
|
|
12
|
+
require('../chunk-7NMI7M56.js');
|
|
13
|
+
require('../chunk-BIZT7AYK.js');
|
|
14
14
|
require('../chunk-SNAQBZPT.js');
|
|
15
15
|
var react = require('react');
|
|
16
16
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -687,7 +687,7 @@ Object.defineProperty(exports, "ManagedScripts", {
|
|
|
687
687
|
});
|
|
688
688
|
Object.defineProperty(exports, "SitemapSync", {
|
|
689
689
|
enumerable: true,
|
|
690
|
-
get: function () { return
|
|
690
|
+
get: function () { return chunkB7FHRTBA_js.SitemapSync; }
|
|
691
691
|
});
|
|
692
692
|
Object.defineProperty(exports, "generateSitemap", {
|
|
693
693
|
enumerable: true,
|
package/dist/seo/index.mjs
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
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-
|
|
4
|
+
export { SitemapSync } from '../chunk-XRONA2QL.mjs';
|
|
5
5
|
import { getManagedMetadata } from '../chunk-B4BFQSSS.mjs';
|
|
6
6
|
export { generateSitemap, getABVariant, getManagedMetadata, getManagedMetadataWithAB, getRedirect, getRobotsDirective, isIndexable } from '../chunk-B4BFQSSS.mjs';
|
|
7
7
|
import { getContentBlock, getSchemaMarkups, getSEOPageData, getEntityEnhancedSchema, getFAQData, getInternalLinks, getEntities } from '../chunk-UOTXSWKZ.mjs';
|
|
8
8
|
export { getABTest, getContentBlock, getEntities, getEntityEnhancedSchema, getFAQData, getInternalLinks, getManagedScripts, getPrimaryEntity, getRedirectData, getRobotsData, getSEOPageData, getSchemaMarkups, getSitemapEntries, getVisibilityScore, getVisibilitySummary, recordABImpression, registerSitemap } from '../chunk-UOTXSWKZ.mjs';
|
|
9
9
|
import '../chunk-6XNEGG5B.mjs';
|
|
10
10
|
import '../chunk-QJU6HBSK.mjs';
|
|
11
|
-
import '../chunk-
|
|
12
|
-
import '../chunk-
|
|
13
|
-
import '../chunk-
|
|
11
|
+
import '../chunk-F4DZH4E5.mjs';
|
|
12
|
+
import '../chunk-HHX72A2B.mjs';
|
|
13
|
+
import '../chunk-3PTKHSF7.mjs';
|
|
14
14
|
import '../chunk-BEXTDHO4.mjs';
|
|
15
15
|
import { cache, Suspense } from 'react';
|
|
16
16
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
package/dist/server/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkXZI6KUB3_js = require('../chunk-XZI6KUB3.js');
|
|
4
4
|
var chunkO5GHP7UO_js = require('../chunk-O5GHP7UO.js');
|
|
5
|
-
require('../chunk-
|
|
5
|
+
require('../chunk-BIZT7AYK.js');
|
|
6
6
|
require('../chunk-SNAQBZPT.js');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
Object.defineProperty(exports, "resolveClientCredential", {
|
|
11
11
|
enumerable: true,
|
|
12
|
-
get: function () { return
|
|
12
|
+
get: function () { return chunkXZI6KUB3_js.resolveClientCredential; }
|
|
13
13
|
});
|
|
14
14
|
Object.defineProperty(exports, "requireServerApiConfig", {
|
|
15
15
|
enumerable: true,
|
package/dist/server/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { resolveClientCredential } from '../chunk-
|
|
1
|
+
export { resolveClientCredential } from '../chunk-6RYCAW5B.mjs';
|
|
2
2
|
export { requireServerApiConfig, resolveApiOrigin, resolveServerApiConfig, serverApiFetch } from '../chunk-6XNEGG5B.mjs';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-3PTKHSF7.mjs';
|
|
4
4
|
import '../chunk-BEXTDHO4.mjs';
|
|
5
5
|
//# sourceMappingURL=index.mjs.map
|
|
6
6
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -98,6 +98,12 @@ export declare const entry: {
|
|
|
98
98
|
readonly 'cms/index': 'src/cms/index.ts';
|
|
99
99
|
readonly 'cms/server': 'src/cms/server.ts';
|
|
100
100
|
readonly 'maps/index': 'src/maps/index.ts';
|
|
101
|
+
/** Tier 0: zero-dep Reveal / Parallax / ScrollScene on the scroll engine */
|
|
102
|
+
readonly 'motion/index': 'src/motion/index.ts';
|
|
103
|
+
/** Tier 1: GSAP, lazy-loaded — optional peer `gsap`; only this file may import it */
|
|
104
|
+
readonly 'motion/gsap': 'src/motion/gsap.ts';
|
|
105
|
+
/** Tier 2: three.js stages on the engine — optional peer `three`; only this file may import it */
|
|
106
|
+
readonly 'motion/three': 'src/motion/three.ts';
|
|
101
107
|
readonly 'cli/index': 'src/cli/index.ts';
|
|
102
108
|
};
|
|
103
109
|
/**
|
|
@@ -114,7 +120,7 @@ export declare const entry: {
|
|
|
114
120
|
* `server-only` module. Add new client entries HERE — that keeps the stamp and
|
|
115
121
|
* the guard reading the same list.
|
|
116
122
|
*/
|
|
117
|
-
export declare const CLIENT_ENTRIES: readonly ["forms/index", "search/index", "analytics/index", "seo/client", "engage/index", "signal/index", "commerce/index", "layout/client", "client/index", "fleet/index", "blog/index", "maps/index", "mcp/client"];
|
|
123
|
+
export declare const CLIENT_ENTRIES: readonly ["forms/index", "search/index", "analytics/index", "seo/client", "engage/index", "signal/index", "commerce/index", "layout/client", "client/index", "fleet/index", "blog/index", "maps/index", "mcp/client", "motion/index", "motion/gsap", "motion/three"];
|
|
118
124
|
/**
|
|
119
125
|
* CLI binaries are consumed via `bin`/`npx`, never imported as typed modules, so they
|
|
120
126
|
* don't ship `.d.ts`. Everything else in `entry` gets declarations.
|