@sonordev/site-kit 6.1.3 → 6.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/agent-manifest.json +7 -1
- package/dist/{AnalyticsProvider-QK6XBDEJ.js → AnalyticsProvider-JKWJGIH2.js} +10 -10
- package/dist/{AnalyticsProvider-QK6XBDEJ.js.map → AnalyticsProvider-JKWJGIH2.js.map} +1 -1
- package/dist/{AnalyticsProvider-TIJWTISP.mjs → AnalyticsProvider-T4UBUUV4.mjs} +6 -6
- package/dist/{AnalyticsProvider-TIJWTISP.mjs.map → AnalyticsProvider-T4UBUUV4.mjs.map} +1 -1
- package/dist/{ArticleViewTracker-I66RBWDK.mjs → ArticleViewTracker-AYYSXNJS.mjs} +5 -5
- package/dist/{ArticleViewTracker-I66RBWDK.mjs.map → ArticleViewTracker-AYYSXNJS.mjs.map} +1 -1
- package/dist/{ArticleViewTracker-ALE672ZR.js → ArticleViewTracker-F5IP734Z.js} +6 -6
- package/dist/{ArticleViewTracker-ALE672ZR.js.map → ArticleViewTracker-F5IP734Z.js.map} +1 -1
- package/dist/ChatWidget-3RVBHZCS.mjs +17 -0
- package/dist/{ChatWidget-LNOY4TUZ.mjs.map → ChatWidget-3RVBHZCS.mjs.map} +1 -1
- package/dist/ChatWidget-RFSI2XNU.js +34 -0
- package/dist/{ChatWidget-566CQUN6.js.map → ChatWidget-RFSI2XNU.js.map} +1 -1
- package/dist/EngageWidget-QO5S6YV5.js +21 -0
- package/dist/{EngageWidget-DF47YUHQ.js.map → EngageWidget-QO5S6YV5.js.map} +1 -1
- package/dist/EngageWidget-TE6S5KYT.mjs +12 -0
- package/dist/{EngageWidget-IGF7SC3R.mjs.map → EngageWidget-TE6S5KYT.mjs.map} +1 -1
- package/dist/{FileField-IK6E5IOC.js → FileField-JQSRKWXW.js} +6 -6
- package/dist/{FileField-IK6E5IOC.js.map → FileField-JQSRKWXW.js.map} +1 -1
- package/dist/{FileField-AG63W2BC.mjs → FileField-OXZXB3UW.mjs} +5 -5
- package/dist/{FileField-AG63W2BC.mjs.map → FileField-OXZXB3UW.mjs.map} +1 -1
- package/dist/{FormSpotlight-6MUDJWW5.js → FormSpotlight-H2A3JIFI.js} +9 -9
- package/dist/{FormSpotlight-6MUDJWW5.js.map → FormSpotlight-H2A3JIFI.js.map} +1 -1
- package/dist/{FormSpotlight-H7V4GBXG.mjs → FormSpotlight-PZ5RLZRV.mjs} +3 -3
- package/dist/{FormSpotlight-H7V4GBXG.mjs.map → FormSpotlight-PZ5RLZRV.mjs.map} +1 -1
- package/dist/{FormStage-ACETL7SD.mjs → FormStage-CIHL7OBA.mjs} +3 -3
- package/dist/{FormStage-ACETL7SD.mjs.map → FormStage-CIHL7OBA.mjs.map} +1 -1
- package/dist/{FormStage-ZXZRZ2LS.js → FormStage-ZA2FABYQ.js} +9 -9
- package/dist/{FormStage-ZXZRZ2LS.js.map → FormStage-ZA2FABYQ.js.map} +1 -1
- package/dist/ManagedForm-BVLS2QZR.js +25 -0
- package/dist/{ManagedForm-4U54NPW2.js.map → ManagedForm-BVLS2QZR.js.map} +1 -1
- package/dist/ManagedForm-PTCWSTC5.mjs +16 -0
- package/dist/{ManagedForm-MOBWSG4D.mjs.map → ManagedForm-PTCWSTC5.mjs.map} +1 -1
- package/dist/{ManagedNewsletterForm-5LBGBE2F.js → ManagedNewsletterForm-IB5VD43M.js} +8 -8
- package/dist/{ManagedNewsletterForm-5LBGBE2F.js.map → ManagedNewsletterForm-IB5VD43M.js.map} +1 -1
- package/dist/{ManagedNewsletterForm-OV3OEMUP.mjs → ManagedNewsletterForm-WMCRFDL7.mjs} +7 -7
- package/dist/{ManagedNewsletterForm-OV3OEMUP.mjs.map → ManagedNewsletterForm-WMCRFDL7.mjs.map} +1 -1
- package/dist/{SignalCore-QCVR7TZV.js → SignalCore-Q57NY7EG.js} +11 -11
- package/dist/{SignalCore-QCVR7TZV.js.map → SignalCore-Q57NY7EG.js.map} +1 -1
- package/dist/{SignalCore-XM2MHEGR.mjs → SignalCore-R44AWPYN.mjs} +5 -5
- package/dist/{SignalCore-XM2MHEGR.mjs.map → SignalCore-R44AWPYN.mjs.map} +1 -1
- package/dist/SitemapSync-NICUUMQF.mjs +9 -0
- package/dist/{SitemapSync-74EVNOFQ.mjs.map → SitemapSync-NICUUMQF.mjs.map} +1 -1
- package/dist/SitemapSync-ZP4PKZZ3.js +18 -0
- package/dist/{SitemapSync-BQFZAE3X.js.map → SitemapSync-ZP4PKZZ3.js.map} +1 -1
- package/dist/admin-auth/index.d.ts +109 -0
- package/dist/admin-auth/index.d.ts.map +1 -0
- package/dist/admin-auth/index.js +0 -0
- package/dist/admin-auth/index.js.map +1 -0
- package/dist/admin-auth/index.mjs +0 -0
- package/dist/admin-auth/index.mjs.map +1 -0
- package/dist/admin-auth/session.d.ts +32 -0
- package/dist/admin-auth/session.d.ts.map +1 -0
- package/dist/analytics/index.js +9 -9
- package/dist/analytics/index.mjs +4 -4
- package/dist/articles/index.js +1 -1
- package/dist/articles/index.mjs +1 -1
- package/dist/articles/server-ui.js +1 -1
- package/dist/articles/server-ui.mjs +1 -1
- package/dist/{chunk-YK7SEUFJ.mjs → chunk-22MXW53O.mjs} +4 -4
- package/dist/{chunk-YK7SEUFJ.mjs.map → chunk-22MXW53O.mjs.map} +1 -1
- package/dist/{chunk-I7KIVKVW.js → chunk-2JZFTPPE.js} +3 -3
- package/dist/{chunk-I7KIVKVW.js.map → chunk-2JZFTPPE.js.map} +1 -1
- package/dist/{chunk-BGBP4UN4.js → chunk-4BQQGOHC.js} +4 -4
- package/dist/{chunk-BGBP4UN4.js.map → chunk-4BQQGOHC.js.map} +1 -1
- package/dist/{chunk-LXBPTKYT.mjs → chunk-5XLPWHQC.mjs} +4 -4
- package/dist/{chunk-LXBPTKYT.mjs.map → chunk-5XLPWHQC.mjs.map} +1 -1
- package/dist/{chunk-TIFVAASU.mjs → chunk-5YA6SI4Z.mjs} +2 -2
- package/dist/{chunk-CTAYH725.js → chunk-6AAT724D.js} +11 -11
- package/dist/{chunk-CTAYH725.js.map → chunk-6AAT724D.js.map} +1 -1
- package/dist/{chunk-AGEE4CGH.js → chunk-6AIXHYFO.js} +5 -5
- package/dist/{chunk-AGEE4CGH.js.map → chunk-6AIXHYFO.js.map} +1 -1
- package/dist/{chunk-I4PUQYBI.mjs → chunk-6SH6HLWS.mjs} +3 -3
- package/dist/{chunk-I4PUQYBI.mjs.map → chunk-6SH6HLWS.mjs.map} +1 -1
- package/dist/{chunk-S6CMQTVZ.js → chunk-72WO3AE5.js} +5 -5
- package/dist/{chunk-S6CMQTVZ.js.map → chunk-72WO3AE5.js.map} +1 -1
- package/dist/{chunk-AEW7EFYU.js → chunk-AEN7EL6N.js} +20 -6
- package/dist/chunk-AEN7EL6N.js.map +1 -0
- package/dist/{chunk-5IQOPL7T.mjs → chunk-BSTV3T6P.mjs} +3 -3
- package/dist/{chunk-5IQOPL7T.mjs.map → chunk-BSTV3T6P.mjs.map} +1 -1
- package/dist/{chunk-2SLA2LOD.js → chunk-C3MRX7NL.js} +12 -12
- package/dist/{chunk-2SLA2LOD.js.map → chunk-C3MRX7NL.js.map} +1 -1
- package/dist/{chunk-D5KKVWZK.mjs → chunk-CBZJNMYS.mjs} +3 -3
- package/dist/{chunk-D5KKVWZK.mjs.map → chunk-CBZJNMYS.mjs.map} +1 -1
- package/dist/chunk-COCYQHK3.mjs +6 -0
- package/dist/{chunk-5FBALULE.mjs.map → chunk-COCYQHK3.mjs.map} +1 -1
- package/dist/{chunk-PTQHPWEK.mjs → chunk-DFAW62AX.mjs} +151 -165
- package/dist/chunk-DFAW62AX.mjs.map +1 -0
- package/dist/{chunk-NRT7MOEO.mjs → chunk-DN6BLVU7.mjs} +4 -4
- package/dist/{chunk-NRT7MOEO.mjs.map → chunk-DN6BLVU7.mjs.map} +1 -1
- package/dist/{chunk-IUNFAKOS.mjs → chunk-ED5GOAF6.mjs} +3 -3
- package/dist/{chunk-IUNFAKOS.mjs.map → chunk-ED5GOAF6.mjs.map} +1 -1
- package/dist/{chunk-IZRVSIOK.js → chunk-F4DZDIR4.js} +4 -4
- package/dist/{chunk-IZRVSIOK.js.map → chunk-F4DZDIR4.js.map} +1 -1
- package/dist/{chunk-VDGCZVUF.js → chunk-FFE6P6PQ.js} +14 -14
- package/dist/{chunk-VDGCZVUF.js.map → chunk-FFE6P6PQ.js.map} +1 -1
- package/dist/{chunk-RQG7I6O4.js → chunk-GBOSAWBR.js} +4 -4
- package/dist/{chunk-RQG7I6O4.js.map → chunk-GBOSAWBR.js.map} +1 -1
- package/dist/{chunk-DVZ4BMXX.mjs → chunk-HQCWWQAI.mjs} +7 -7
- package/dist/{chunk-DVZ4BMXX.mjs.map → chunk-HQCWWQAI.mjs.map} +1 -1
- package/dist/{chunk-KDLN2MR5.js → chunk-I5XK32OJ.js} +18 -18
- package/dist/{chunk-KDLN2MR5.js.map → chunk-I5XK32OJ.js.map} +1 -1
- package/dist/{chunk-XXSSUCJB.js → chunk-I7AZC5ZQ.js} +2 -2
- package/dist/{chunk-RGXYE2ZI.mjs → chunk-IHG7W5JH.mjs} +4 -4
- package/dist/{chunk-RGXYE2ZI.mjs.map → chunk-IHG7W5JH.mjs.map} +1 -1
- package/dist/chunk-IMWON7OV.mjs +27 -0
- package/dist/chunk-IMWON7OV.mjs.map +1 -0
- package/dist/{chunk-KEEZX6Q4.js → chunk-JCBENABK.js} +3 -3
- package/dist/{chunk-KEEZX6Q4.js.map → chunk-JCBENABK.js.map} +1 -1
- package/dist/chunk-JLIL5EFG.js +8 -0
- package/dist/{chunk-OI3FCJSP.js.map → chunk-JLIL5EFG.js.map} +1 -1
- package/dist/{chunk-7K6L33BX.mjs → chunk-JOYMIGR2.mjs} +22 -22
- package/dist/{chunk-ATPQ6264.js → chunk-JS75ORH7.js} +24 -24
- package/dist/{chunk-3MLVI5DH.mjs → chunk-KLKUI3US.mjs} +3 -3
- package/dist/{chunk-3MLVI5DH.mjs.map → chunk-KLKUI3US.mjs.map} +1 -1
- package/dist/{chunk-XCOMBHLF.js → chunk-L6XXUNJB.js} +8 -8
- package/dist/{chunk-XCOMBHLF.js.map → chunk-L6XXUNJB.js.map} +1 -1
- package/dist/{chunk-OZTVJSFX.js → chunk-LIWPIG7U.js} +160 -172
- package/dist/chunk-LIWPIG7U.js.map +1 -0
- package/dist/{chunk-OWEJXMKY.mjs → chunk-M436JMD4.mjs} +3 -3
- package/dist/{chunk-OWEJXMKY.mjs.map → chunk-M436JMD4.mjs.map} +1 -1
- package/dist/{chunk-EVETX2XF.mjs → chunk-NCURAYKL.mjs} +4 -4
- package/dist/{chunk-EVETX2XF.mjs.map → chunk-NCURAYKL.mjs.map} +1 -1
- package/dist/{chunk-ZUQSVCMD.js → chunk-NN2YE5WT.js} +3 -3
- package/dist/{chunk-RH4XEXTK.mjs → chunk-NNZDWY3L.mjs} +3 -3
- package/dist/{chunk-5OUOVPXC.js → chunk-OMYR2ORG.js} +8 -8
- package/dist/{chunk-5OUOVPXC.js.map → chunk-OMYR2ORG.js.map} +1 -1
- package/dist/{chunk-JSM4AYSZ.js → chunk-OZLYJSFE.js} +14 -14
- package/dist/{chunk-JSM4AYSZ.js.map → chunk-OZLYJSFE.js.map} +1 -1
- package/dist/{chunk-ESPOINPT.mjs → chunk-P2VWGMQU.mjs} +3 -3
- package/dist/{chunk-ESPOINPT.mjs.map → chunk-P2VWGMQU.mjs.map} +1 -1
- package/dist/{chunk-7VRK3DWU.js → chunk-P35JIP3J.js} +6 -6
- package/dist/{chunk-7VRK3DWU.js.map → chunk-P35JIP3J.js.map} +1 -1
- package/dist/{chunk-IWHAJBYL.js → chunk-PXN7LIYZ.js} +15 -15
- package/dist/{chunk-IWHAJBYL.js.map → chunk-PXN7LIYZ.js.map} +1 -1
- package/dist/{chunk-GYKFHQSZ.mjs → chunk-QSCE66KQ.mjs} +3 -3
- package/dist/{chunk-GYKFHQSZ.mjs.map → chunk-QSCE66KQ.mjs.map} +1 -1
- package/dist/{chunk-QSN2QST7.mjs → chunk-QUMXVJ2C.mjs} +3 -3
- package/dist/{chunk-QSN2QST7.mjs.map → chunk-QUMXVJ2C.mjs.map} +1 -1
- package/dist/{chunk-6FIIA6ME.mjs → chunk-RB53MKRX.mjs} +4 -4
- package/dist/{chunk-6FIIA6ME.mjs.map → chunk-RB53MKRX.mjs.map} +1 -1
- package/dist/{chunk-JAA42HR7.js → chunk-RDKICSVU.js} +7 -7
- package/dist/{chunk-JAA42HR7.js.map → chunk-RDKICSVU.js.map} +1 -1
- package/dist/{chunk-EXVHO3CZ.mjs → chunk-REGHZJQF.mjs} +3 -3
- package/dist/{chunk-EXVHO3CZ.mjs.map → chunk-REGHZJQF.mjs.map} +1 -1
- package/dist/{chunk-MTHMOXZF.js → chunk-RNEPZD2I.js} +6 -6
- package/dist/{chunk-MTHMOXZF.js.map → chunk-RNEPZD2I.js.map} +1 -1
- package/dist/{chunk-CI7T4ZRP.mjs → chunk-RSP6RDR2.mjs} +4 -4
- package/dist/{chunk-CI7T4ZRP.mjs.map → chunk-RSP6RDR2.mjs.map} +1 -1
- package/dist/{chunk-MLXUMVBK.mjs → chunk-UCMMIGC6.mjs} +20 -6
- package/dist/chunk-UCMMIGC6.mjs.map +1 -0
- package/dist/{chunk-MQEVQ5YB.js → chunk-UJFRMHUN.js} +3 -3
- package/dist/{chunk-MQEVQ5YB.js.map → chunk-UJFRMHUN.js.map} +1 -1
- package/dist/{chunk-3RISRHOK.mjs → chunk-W7HSYABM.mjs} +8 -8
- package/dist/{chunk-3RISRHOK.mjs.map → chunk-W7HSYABM.mjs.map} +1 -1
- package/dist/{chunk-OUP6UL74.mjs → chunk-X5WJ5XPZ.mjs} +3 -3
- package/dist/{chunk-OUP6UL74.mjs.map → chunk-X5WJ5XPZ.mjs.map} +1 -1
- package/dist/{chunk-P4J3WG6C.js → chunk-XRUKYQ43.js} +4 -4
- package/dist/{chunk-P4J3WG6C.js.map → chunk-XRUKYQ43.js.map} +1 -1
- package/dist/{chunk-YEHC7VMW.mjs → chunk-YZCRYK5M.mjs} +3 -3
- package/dist/{chunk-YEHC7VMW.mjs.map → chunk-YZCRYK5M.mjs.map} +1 -1
- package/dist/chunk-YZJ22HUQ.js +29 -0
- package/dist/chunk-YZJ22HUQ.js.map +1 -0
- package/dist/{chunk-EVKP4SOM.js → chunk-ZKM6ELMZ.js} +10 -10
- package/dist/{chunk-EVKP4SOM.js.map → chunk-ZKM6ELMZ.js.map} +1 -1
- package/dist/cli/index.js +211 -211
- package/dist/cli/index.mjs +151 -151
- package/dist/client/index.js +4 -4
- package/dist/client/index.mjs +3 -3
- package/dist/commerce/index.js +57 -57
- package/dist/commerce/index.mjs +5 -5
- package/dist/engage/ChatWidget.d.ts +61 -1
- package/dist/engage/ChatWidget.d.ts.map +1 -1
- package/dist/engage/chat-messages.d.ts +86 -0
- package/dist/engage/chat-messages.d.ts.map +1 -0
- package/dist/engage/index.js +10 -10
- package/dist/engage/index.mjs +7 -7
- package/dist/fleet/index.js +8 -8
- package/dist/fleet/index.mjs +4 -4
- package/dist/forms/index.js +16 -16
- 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/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/{lib-6GWWPDJR.js → lib-6HOOMENJ.js} +7 -7
- package/dist/{lib-WFB5RLEQ.js → lib-BGAWCSUH.js} +8 -8
- package/dist/{lib-N5PD6JNJ.mjs → lib-R7IQ4ZHE.mjs} +2 -2
- package/dist/lib-RSDMEKDQ.mjs +4 -0
- package/dist/maps/index.js +5 -5
- package/dist/maps/index.mjs +3 -3
- package/dist/motion/CountUp.d.ts +49 -0
- package/dist/motion/CountUp.d.ts.map +1 -0
- package/dist/motion/Parallax.d.ts +14 -0
- package/dist/motion/Parallax.d.ts.map +1 -1
- package/dist/motion/ScrollScene.d.ts +1 -1
- package/dist/motion/ScrollScene.d.ts.map +1 -1
- package/dist/motion/engine.d.ts +19 -0
- package/dist/motion/engine.d.ts.map +1 -1
- package/dist/motion/gsap.d.ts +55 -6
- package/dist/motion/gsap.d.ts.map +1 -1
- package/dist/motion/gsap.js +101 -4
- package/dist/motion/gsap.js.map +1 -1
- package/dist/motion/gsap.mjs +96 -3
- package/dist/motion/gsap.mjs.map +1 -1
- package/dist/motion/index.d.ts +1 -1
- package/dist/motion/index.d.ts.map +1 -1
- package/dist/motion/index.js +21 -40
- package/dist/motion/index.js.map +1 -1
- package/dist/motion/index.mjs +11 -32
- package/dist/motion/index.mjs.map +1 -1
- package/dist/motion/three.js +5 -5
- package/dist/motion/three.mjs +1 -1
- 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/seo/register-sitemap-cli.js +2 -2
- package/dist/seo/register-sitemap-cli.mjs +1 -1
- package/dist/server/index.js +3 -3
- package/dist/server/index.mjs +2 -2
- package/dist/shared/build-entries.d.ts +1 -0
- 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/sync/index.js +17 -17
- package/dist/sync/index.mjs +4 -4
- package/dist/{web-vitals.attribution-CHXXWO72.mjs → web-vitals.attribution-7LKLZ5GR.mjs} +3 -3
- package/dist/web-vitals.attribution-7LKLZ5GR.mjs.map +1 -0
- package/dist/{web-vitals.attribution-SQVZNHN3.js → web-vitals.attribution-ONVYQNRB.js} +3 -3
- package/dist/web-vitals.attribution-ONVYQNRB.js.map +1 -0
- package/package.json +6 -1
- package/dist/ChatWidget-566CQUN6.js +0 -26
- package/dist/ChatWidget-LNOY4TUZ.mjs +0 -17
- package/dist/EngageWidget-DF47YUHQ.js +0 -21
- package/dist/EngageWidget-IGF7SC3R.mjs +0 -12
- package/dist/ManagedForm-4U54NPW2.js +0 -25
- package/dist/ManagedForm-MOBWSG4D.mjs +0 -16
- package/dist/SitemapSync-74EVNOFQ.mjs +0 -9
- package/dist/SitemapSync-BQFZAE3X.js +0 -18
- package/dist/chunk-5FBALULE.mjs +0 -6
- package/dist/chunk-AEW7EFYU.js.map +0 -1
- package/dist/chunk-MLXUMVBK.mjs.map +0 -1
- package/dist/chunk-OI3FCJSP.js +0 -8
- package/dist/chunk-OZTVJSFX.js.map +0 -1
- package/dist/chunk-PTQHPWEK.mjs.map +0 -1
- package/dist/lib-BD4KKQBI.mjs +0 -4
- package/dist/web-vitals.attribution-CHXXWO72.mjs.map +0 -1
- package/dist/web-vitals.attribution-SQVZNHN3.js.map +0 -1
package/dist/motion/index.js
CHANGED
|
@@ -1,34 +1,12 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkYZJ22HUQ_js = require('../chunk-YZJ22HUQ.js');
|
|
5
|
+
var chunkAEN7EL6N_js = require('../chunk-AEN7EL6N.js');
|
|
5
6
|
require('../chunk-SNAQBZPT.js');
|
|
6
7
|
var react = require('react');
|
|
7
8
|
var jsxRuntime = require('react/jsx-runtime');
|
|
8
9
|
|
|
9
|
-
// src/motion/failsafe.ts
|
|
10
|
-
var scrolled = false;
|
|
11
|
-
var armed = false;
|
|
12
|
-
function arm() {
|
|
13
|
-
if (armed || typeof window === "undefined") return;
|
|
14
|
-
armed = true;
|
|
15
|
-
window.addEventListener(
|
|
16
|
-
"scroll",
|
|
17
|
-
() => {
|
|
18
|
-
scrolled = true;
|
|
19
|
-
},
|
|
20
|
-
{ passive: true, once: true }
|
|
21
|
-
);
|
|
22
|
-
}
|
|
23
|
-
function onNoScroll(fn, ms = 2500) {
|
|
24
|
-
if (typeof window === "undefined") return () => {
|
|
25
|
-
};
|
|
26
|
-
arm();
|
|
27
|
-
const t = setTimeout(() => {
|
|
28
|
-
if (!scrolled) fn();
|
|
29
|
-
}, ms);
|
|
30
|
-
return () => clearTimeout(t);
|
|
31
|
-
}
|
|
32
10
|
var DEFAULT_EASING = "cubic-bezier(0.22, 1, 0.36, 1)";
|
|
33
11
|
var DEFAULT_STAGGER = 0.08;
|
|
34
12
|
function hiddenTransform(from, distance, scale) {
|
|
@@ -62,7 +40,7 @@ function Reveal({
|
|
|
62
40
|
react.useEffect(() => {
|
|
63
41
|
const el = ref.current;
|
|
64
42
|
if (!el) return;
|
|
65
|
-
if (
|
|
43
|
+
if (chunkAEN7EL6N_js.prefersReducedMotion()) return;
|
|
66
44
|
const step = stagger === true ? DEFAULT_STAGGER : stagger || 0;
|
|
67
45
|
const targets = () => step > 0 && el.children.length > 0 ? Array.from(el.children) : [el];
|
|
68
46
|
const hiddenOpacity = String(opacity);
|
|
@@ -106,7 +84,7 @@ function Reveal({
|
|
|
106
84
|
foldObserver.disconnect();
|
|
107
85
|
if (!el.isConnected || entry?.isIntersecting) return;
|
|
108
86
|
hide(false);
|
|
109
|
-
cancelFailsafe = onNoScroll(() => {
|
|
87
|
+
cancelFailsafe = chunkYZJ22HUQ_js.onNoScroll(() => {
|
|
110
88
|
animObserver?.disconnect();
|
|
111
89
|
restore();
|
|
112
90
|
});
|
|
@@ -139,16 +117,16 @@ function Reveal({
|
|
|
139
117
|
return /* @__PURE__ */ jsxRuntime.jsx(Tag, { ref, id, className, style, "data-sk-reveal": "", children });
|
|
140
118
|
}
|
|
141
119
|
function useParallax(ref, options = {}) {
|
|
142
|
-
const { y = [40, -40], x, scale, opacity, rotate } = options;
|
|
120
|
+
const { y = [40, -40], x, scale, opacity, rotate, anchor } = options;
|
|
143
121
|
const easeRef = react.useRef(options.ease);
|
|
144
122
|
easeRef.current = options.ease;
|
|
145
|
-
const key = JSON.stringify([y, x, scale, opacity, rotate]);
|
|
123
|
+
const key = JSON.stringify([y, x, scale, opacity, rotate, anchor]);
|
|
146
124
|
react.useEffect(() => {
|
|
147
125
|
const el = ref.current;
|
|
148
126
|
if (!el) return;
|
|
149
|
-
if (
|
|
127
|
+
if (chunkAEN7EL6N_js.prefersReducedMotion()) return;
|
|
150
128
|
const between = (r, q) => r[0] + (r[1] - r[0]) * q;
|
|
151
|
-
return
|
|
129
|
+
return chunkAEN7EL6N_js.registerScene(
|
|
152
130
|
el,
|
|
153
131
|
(p, info) => {
|
|
154
132
|
const q = easeRef.current ? easeRef.current(p) : p;
|
|
@@ -159,7 +137,7 @@ function useParallax(ref, options = {}) {
|
|
|
159
137
|
if (opacity) el.style.opacity = String(between(opacity, q));
|
|
160
138
|
el.style.willChange = info.visible ? "transform" : "";
|
|
161
139
|
},
|
|
162
|
-
{ mode: "view", lerp: 1 }
|
|
140
|
+
{ mode: "view", lerp: 1, anchor }
|
|
163
141
|
);
|
|
164
142
|
}, [ref, key]);
|
|
165
143
|
}
|
|
@@ -172,20 +150,20 @@ function Parallax({ children, as = "div", className, style, id, ...options }) {
|
|
|
172
150
|
function useScrollScene(ref, onProgress, options = {}) {
|
|
173
151
|
const cbRef = react.useRef(onProgress);
|
|
174
152
|
cbRef.current = onProgress;
|
|
175
|
-
const { continuous, reducedP, mode, lerp, cssVar } = options;
|
|
153
|
+
const { continuous, reducedP, mode, lerp, anchor, cssVar } = options;
|
|
176
154
|
react.useEffect(() => {
|
|
177
155
|
const el = ref.current;
|
|
178
156
|
if (!el) return;
|
|
179
157
|
const prop = cssVar === false ? null : cssVar ?? "--sk-p";
|
|
180
|
-
return
|
|
158
|
+
return chunkAEN7EL6N_js.registerScene(
|
|
181
159
|
el,
|
|
182
160
|
(p, info) => {
|
|
183
161
|
if (prop) el.style.setProperty(prop, p.toFixed(4));
|
|
184
162
|
cbRef.current?.(p, info);
|
|
185
163
|
},
|
|
186
|
-
{ continuous, reducedP, mode, lerp }
|
|
164
|
+
{ continuous, reducedP, mode, lerp, anchor }
|
|
187
165
|
);
|
|
188
|
-
}, [ref, continuous, reducedP, mode, lerp, cssVar]);
|
|
166
|
+
}, [ref, continuous, reducedP, mode, lerp, anchor, cssVar]);
|
|
189
167
|
}
|
|
190
168
|
function ScrollScene({
|
|
191
169
|
children,
|
|
@@ -226,26 +204,29 @@ function ScrollScene({
|
|
|
226
204
|
);
|
|
227
205
|
}
|
|
228
206
|
|
|
207
|
+
Object.defineProperty(exports, "onNoScroll", {
|
|
208
|
+
enumerable: true,
|
|
209
|
+
get: function () { return chunkYZJ22HUQ_js.onNoScroll; }
|
|
210
|
+
});
|
|
229
211
|
Object.defineProperty(exports, "prefersReducedMotion", {
|
|
230
212
|
enumerable: true,
|
|
231
|
-
get: function () { return
|
|
213
|
+
get: function () { return chunkAEN7EL6N_js.prefersReducedMotion; }
|
|
232
214
|
});
|
|
233
215
|
Object.defineProperty(exports, "refreshScenes", {
|
|
234
216
|
enumerable: true,
|
|
235
|
-
get: function () { return
|
|
217
|
+
get: function () { return chunkAEN7EL6N_js.refreshScenes; }
|
|
236
218
|
});
|
|
237
219
|
Object.defineProperty(exports, "registerScene", {
|
|
238
220
|
enumerable: true,
|
|
239
|
-
get: function () { return
|
|
221
|
+
get: function () { return chunkAEN7EL6N_js.registerScene; }
|
|
240
222
|
});
|
|
241
223
|
Object.defineProperty(exports, "sceneProgress", {
|
|
242
224
|
enumerable: true,
|
|
243
|
-
get: function () { return
|
|
225
|
+
get: function () { return chunkAEN7EL6N_js.sceneProgress; }
|
|
244
226
|
});
|
|
245
227
|
exports.Parallax = Parallax;
|
|
246
228
|
exports.Reveal = Reveal;
|
|
247
229
|
exports.ScrollScene = ScrollScene;
|
|
248
|
-
exports.onNoScroll = onNoScroll;
|
|
249
230
|
exports.useParallax = useParallax;
|
|
250
231
|
exports.useScrollScene = useScrollScene;
|
|
251
232
|
//# sourceMappingURL=index.js.map
|
package/dist/motion/index.js.map
CHANGED
|
@@ -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","prefersReducedMotion","jsx","registerScene"],"mappings":"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","file":"index.js","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","prefersReducedMotion","onNoScroll","jsx","registerScene"],"mappings":"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","file":"index.js","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"]}
|
package/dist/motion/index.mjs
CHANGED
|
@@ -1,33 +1,12 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import {
|
|
3
|
-
export {
|
|
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,
|
|
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"]}
|
package/dist/motion/three.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
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 (
|
|
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
|
-
|
|
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
|
-
|
|
88
|
+
chunkAEN7EL6N_js.refreshScenes();
|
|
89
89
|
});
|
|
90
90
|
ro.observe(host);
|
|
91
91
|
const cleanupReady = optsRef.current.onReady?.(stage);
|
|
92
|
-
const unregister =
|
|
92
|
+
const unregister = chunkAEN7EL6N_js.registerScene(
|
|
93
93
|
pinEl,
|
|
94
94
|
(p, info) => {
|
|
95
95
|
if (lost) return;
|
package/dist/motion/three.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { prefersReducedMotion, refreshScenes, registerScene } from '../chunk-
|
|
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';
|
package/dist/search/index.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunkCLO3K7PF_js = require('../chunk-CLO3K7PF.js');
|
|
5
|
-
var
|
|
6
|
-
require('../chunk-
|
|
7
|
-
require('../chunk-
|
|
5
|
+
var chunkPXN7LIYZ_js = require('../chunk-PXN7LIYZ.js');
|
|
6
|
+
require('../chunk-4BQQGOHC.js');
|
|
7
|
+
require('../chunk-JLIL5EFG.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 chunkPXN7LIYZ_js.sonorFetch(
|
|
43
43
|
`${apiUrl}${chunkCLO3K7PF_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-CFRJ2MK5.mjs';
|
|
3
3
|
export { SEARCH_ENDPOINT } from '../chunk-CFRJ2MK5.mjs';
|
|
4
|
-
import { sonorFetch } from '../chunk-
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
4
|
+
import { sonorFetch } from '../chunk-RSP6RDR2.mjs';
|
|
5
|
+
import '../chunk-QSCE66KQ.mjs';
|
|
6
|
+
import '../chunk-COCYQHK3.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,19 +1,19 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunk72WO3AE5_js = require('../chunk-72WO3AE5.js');
|
|
5
5
|
require('../chunk-JONWE26J.js');
|
|
6
6
|
require('../chunk-5RNAUYWE.js');
|
|
7
|
-
require('../chunk-
|
|
8
|
-
require('../chunk-
|
|
9
|
-
require('../chunk-
|
|
7
|
+
require('../chunk-PXN7LIYZ.js');
|
|
8
|
+
require('../chunk-4BQQGOHC.js');
|
|
9
|
+
require('../chunk-JLIL5EFG.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
|
|
16
|
+
get: function () { return chunk72WO3AE5_js.SitemapSync; }
|
|
17
17
|
});
|
|
18
18
|
//# sourceMappingURL=client.js.map
|
|
19
19
|
//# sourceMappingURL=client.js.map
|
package/dist/seo/client.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { SitemapSync } from '../chunk-
|
|
2
|
+
export { SitemapSync } from '../chunk-KLKUI3US.mjs';
|
|
3
3
|
import '../chunk-C2CTLLIO.mjs';
|
|
4
4
|
import '../chunk-A6UYV475.mjs';
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
7
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-RSP6RDR2.mjs';
|
|
6
|
+
import '../chunk-QSCE66KQ.mjs';
|
|
7
|
+
import '../chunk-COCYQHK3.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
|
|
6
|
+
var chunk72WO3AE5_js = require('../chunk-72WO3AE5.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-
|
|
18
|
-
require('../chunk-
|
|
19
|
-
require('../chunk-
|
|
17
|
+
require('../chunk-PXN7LIYZ.js');
|
|
18
|
+
require('../chunk-4BQQGOHC.js');
|
|
19
|
+
require('../chunk-JLIL5EFG.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
|
|
709
|
+
get: function () { return chunk72WO3AE5_js.SitemapSync; }
|
|
710
710
|
});
|
|
711
711
|
Object.defineProperty(exports, "generateSitemap", {
|
|
712
712
|
enumerable: true,
|