@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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunkMVHR77V4_js = require('./chunk-MVHR77V4.js');
|
|
5
|
-
var
|
|
5
|
+
var chunkVTEIXKBA_js = require('./chunk-VTEIXKBA.js');
|
|
6
6
|
var chunk2ACKOMAL_js = require('./chunk-2ACKOMAL.js');
|
|
7
7
|
require('./chunk-SNAQBZPT.js');
|
|
8
8
|
var react = require('react');
|
|
@@ -27,7 +27,7 @@ function FormStage({
|
|
|
27
27
|
trackStepChange,
|
|
28
28
|
honeypot
|
|
29
29
|
}) {
|
|
30
|
-
const fieldControls =
|
|
30
|
+
const fieldControls = chunkVTEIXKBA_js.useFieldControls(config.fields);
|
|
31
31
|
const [activeIndex, setActiveIndex] = react.useState(0);
|
|
32
32
|
const [visited, setVisited] = react.useState({});
|
|
33
33
|
const [shakeCount, setShakeCount] = react.useState(0);
|
|
@@ -35,7 +35,7 @@ function FormStage({
|
|
|
35
35
|
const autoAdvanceTimer = react.useRef(null);
|
|
36
36
|
const hasInteractedRef = react.useRef(false);
|
|
37
37
|
const views = react.useMemo(() => {
|
|
38
|
-
return
|
|
38
|
+
return chunkVTEIXKBA_js.stageViews(config).map((v) => ({ ...v, fields: v.fields.filter(isFieldVisible) })).filter((v) => v.fields.length > 0);
|
|
39
39
|
}, [config, isFieldVisible]);
|
|
40
40
|
const total = views.length;
|
|
41
41
|
const questionCount = react.useMemo(
|
|
@@ -50,7 +50,7 @@ function FormStage({
|
|
|
50
50
|
[views]
|
|
51
51
|
);
|
|
52
52
|
const nameField = nameViewIndex >= 0 ? views[nameViewIndex].fields.find((f) => /^first[_-]?name$/i.test(f.slug)) : void 0;
|
|
53
|
-
const firstName = nameField ?
|
|
53
|
+
const firstName = nameField ? chunkVTEIXKBA_js.stageFirstName(values[nameField.slug]) : null;
|
|
54
54
|
const clearAutoAdvance = react.useCallback(() => {
|
|
55
55
|
if (autoAdvanceTimer.current !== null) {
|
|
56
56
|
window.clearTimeout(autoAdvanceTimer.current);
|
|
@@ -59,7 +59,7 @@ function FormStage({
|
|
|
59
59
|
}, []);
|
|
60
60
|
react.useEffect(() => clearAutoAdvance, [clearAutoAdvance]);
|
|
61
61
|
const beatHasValue = react.useCallback(
|
|
62
|
-
(index) => (views[index]?.fields || []).some((f) => !
|
|
62
|
+
(index) => (views[index]?.fields || []).some((f) => !chunkVTEIXKBA_js.isEmptyValue(values[f.slug])),
|
|
63
63
|
[views, values]
|
|
64
64
|
);
|
|
65
65
|
const beatComplete = react.useCallback(
|
|
@@ -67,7 +67,7 @@ function FormStage({
|
|
|
67
67
|
const v = views[index];
|
|
68
68
|
if (!v) return false;
|
|
69
69
|
return v.fields.every(
|
|
70
|
-
(f) => fieldIsComplete(f) || !f.is_required &&
|
|
70
|
+
(f) => fieldIsComplete(f) || !f.is_required && chunkVTEIXKBA_js.isEmptyValue(values[f.slug])
|
|
71
71
|
) && (beatHasValue(index) || visited[index] === true);
|
|
72
72
|
},
|
|
73
73
|
[views, fieldIsComplete, values, beatHasValue, visited]
|
|
@@ -146,7 +146,7 @@ function FormStage({
|
|
|
146
146
|
(field, soloAutoAdvance) => (value) => {
|
|
147
147
|
hasInteractedRef.current = true;
|
|
148
148
|
setFieldValue(field.slug, value);
|
|
149
|
-
if (soloAutoAdvance && !
|
|
149
|
+
if (soloAutoAdvance && !chunkVTEIXKBA_js.isEmptyValue(value)) {
|
|
150
150
|
clearAutoAdvance();
|
|
151
151
|
autoAdvanceTimer.current = window.setTimeout(() => {
|
|
152
152
|
autoAdvanceTimer.current = null;
|
|
@@ -220,7 +220,7 @@ function FormStage({
|
|
|
220
220
|
const completeBeats = views.reduce((n, _v, i) => n + (beatComplete(i) ? 1 : 0), 0);
|
|
221
221
|
const activeView = activeIndex === REST ? null : views[activeIndex];
|
|
222
222
|
!!activeView && activeView.fields.length > 1;
|
|
223
|
-
const activeAllOptionalEmpty = !!activeView && activeView.fields.every((f) => !f.is_required &&
|
|
223
|
+
const activeAllOptionalEmpty = !!activeView && activeView.fields.every((f) => !f.is_required && chunkVTEIXKBA_js.isEmptyValue(values[f.slug]));
|
|
224
224
|
const activeHasTextarea = !!activeView && activeView.fields.some((f) => f.field_type === "textarea");
|
|
225
225
|
const eyebrow = activeIndex !== REST && firstName && activeIndex === nameViewIndex + 1 ? { text: `Nice to meet you, ${firstName}.`, greet: true } : activeView?.step?.title ? { text: activeView.step.title, greet: false } : null;
|
|
226
226
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -237,7 +237,7 @@ function FormStage({
|
|
|
237
237
|
/* @__PURE__ */ jsxRuntime.jsx(chunkMVHR77V4_js.StageStyles, {}),
|
|
238
238
|
/* @__PURE__ */ jsxRuntime.jsxs("header", { className: "sk-stage__head", "data-sk-part": "stage-head", children: [
|
|
239
239
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sk-stage__head-name", children: config.name }),
|
|
240
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sk-stage__head-meta", "data-sk-part": "stage-estimate", children: `Takes ${
|
|
240
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sk-stage__head-meta", "data-sk-part": "stage-estimate", children: `Takes ${chunkVTEIXKBA_js.stageEstimate(questionCount)}` })
|
|
241
241
|
] }),
|
|
242
242
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sk-stage__hud", "data-sk-part": "stage-hud", children: [
|
|
243
243
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -277,7 +277,7 @@ function FormStage({
|
|
|
277
277
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "sk-stage__beats", "data-sk-part": "stage-beats", children: views.map((view, i) => {
|
|
278
278
|
const isActive = i === activeIndex;
|
|
279
279
|
const filled = visited[i] === true || beatHasValue(i);
|
|
280
|
-
const answers = view.fields.map((f) =>
|
|
280
|
+
const answers = view.fields.map((f) => chunkVTEIXKBA_js.formatAnswer(values[f.slug])).filter((a) => a !== null);
|
|
281
281
|
const summaryValue = answers.length ? answers.join(" \xB7 ") : filled ? "Skipped" : null;
|
|
282
282
|
const summaryLabel = view.step?.title || view.fields.map((f) => f.label).join(" \xB7 ");
|
|
283
283
|
const complete = beatComplete(i) && answers.length > 0;
|
|
@@ -341,7 +341,7 @@ function FormStage({
|
|
|
341
341
|
showValid: !!touched[f.slug] && !errors[f.slug] && fieldIsComplete(f),
|
|
342
342
|
onChange: handleFieldChange(
|
|
343
343
|
f,
|
|
344
|
-
view.fields.length === 1 &&
|
|
344
|
+
view.fields.length === 1 && chunkVTEIXKBA_js.AUTO_ADVANCE_TYPES.includes(f.field_type)
|
|
345
345
|
),
|
|
346
346
|
classPrefix: "sk-stage"
|
|
347
347
|
},
|
|
@@ -413,5 +413,5 @@ function FormStage({
|
|
|
413
413
|
}
|
|
414
414
|
|
|
415
415
|
exports.FormStage = FormStage;
|
|
416
|
-
//# sourceMappingURL=FormStage-
|
|
417
|
-
//# sourceMappingURL=FormStage-
|
|
416
|
+
//# sourceMappingURL=FormStage-SBQQZDW6.js.map
|
|
417
|
+
//# sourceMappingURL=FormStage-SBQQZDW6.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/forms/FormStage.tsx"],"names":["useFieldControls","useState","useRef","useMemo","stageViews","useEffect","stageFirstName","useCallback","isEmptyValue","jsxs","jsx","StageStyles","stageEstimate","formatAnswer","SummaryTick","FormField","AUTO_ADVANCE_TYPES","Fragment"],"mappings":"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","file":"FormStage-5Z53Z2WY.js","sourcesContent":["'use client'\n\n/**\n * FormStage — the \"stage\" experience: a spotlight ACCORDION. Beats expand and\n * collapse on one surface (paired grid-rows morphs: the active beat blooms\n * while the previous settles into a filled summary row of label · answer ·\n * tick; upcoming beats wait as dim numbered rows). Enter advances: next field\n * in the beat, then the next beat, then the wake-lit submit. Because every\n * answer stays visible, the form is its own review — no confirm screen.\n *\n * A beat is a VIEW, not a field (see experience-plan.ts): consecutive\n * half/third-width fields share a beat exactly like they share a row in the\n * classic grid; full-width fields stand alone; steps break beats.\n *\n * This is a RENDER BRANCH of FormClient, never a customRender: FormClient\n * still owns values/errors/honeypot/submit, so spam defense and validation\n * are identical to classic. Beat index rides the existing step-tracking pipe,\n * turning form_analytics into a per-beat funnel with zero API changes.\n *\n * Loaded lazily by FormClient — classic-form sites never download it.\n */\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useFieldControls } from './field-controls'\nimport { FormField } from './FormField'\nimport { StageStyles, SummaryTick } from './experience-chrome'\nimport {\n AUTO_ADVANCE_TYPES,\n formatAnswer,\n isEmptyValue,\n stageEstimate,\n stageFirstName,\n stageViews,\n} from './experience-plan'\nimport type { StageView } from './experience-plan'\nimport type { ExperienceRenderProps, FormField as FormFieldType } from './types'\n\n/** -1 = at rest (nothing active — every beat settled, submit has the floor). */\nconst REST = -1\n\nexport function FormStage({\n config,\n values,\n errors,\n touched,\n isSubmitting,\n submitError,\n momentum,\n className,\n setFieldValue,\n validateField,\n isFieldVisible,\n fieldIsComplete,\n applyFieldError,\n submit,\n trackStepChange,\n honeypot,\n}: ExperienceRenderProps) {\n // Same on-demand date/file controls the classic form uses.\n const fieldControls = useFieldControls(config.fields)\n const [activeIndex, setActiveIndex] = useState(0)\n // Beats deliberately passed through (including skipped-empty optionals) —\n // drives \"Skipped\" vs \"not there yet\" in the settled rows.\n const [visited, setVisited] = useState<Record<number, boolean>>({})\n // Incremented on each rejected advance so the shake animation replays.\n const [shakeCount, setShakeCount] = useState(0)\n\n const formRef = useRef<HTMLFormElement | null>(null)\n const autoAdvanceTimer = useRef<number | null>(null)\n // Focus is only ever moved after the user has interacted — never on load.\n const hasInteractedRef = useRef(false)\n\n // The run respects conditional visibility live — answering an earlier\n // beat can add or remove later ones.\n const views = useMemo(() => {\n return stageViews(config)\n .map((v) => ({ ...v, fields: v.fields.filter(isFieldVisible) }))\n .filter((v) => v.fields.length > 0)\n }, [config, isFieldVisible])\n const total = views.length\n const questionCount = useMemo(\n () => views.reduce((n, v) => n + v.fields.length, 0),\n [views],\n )\n\n // Clamp if a conditional hid beats behind the cursor.\n useEffect(() => {\n if (activeIndex > 0 && activeIndex >= total) setActiveIndex(total - 1)\n }, [activeIndex, total])\n\n // Greeting: the beat right after the first-name answer says hello.\n const nameViewIndex = useMemo(\n () => views.findIndex((v) => v.fields.some((f) => /^first[_-]?name$/i.test(f.slug))),\n [views],\n )\n const nameField =\n nameViewIndex >= 0\n ? views[nameViewIndex].fields.find((f) => /^first[_-]?name$/i.test(f.slug))\n : undefined\n const firstName = nameField ? stageFirstName(values[nameField.slug]) : null\n\n const clearAutoAdvance = useCallback(() => {\n if (autoAdvanceTimer.current !== null) {\n window.clearTimeout(autoAdvanceTimer.current)\n autoAdvanceTimer.current = null\n }\n }, [])\n useEffect(() => clearAutoAdvance, [clearAutoAdvance])\n\n const beatHasValue = useCallback(\n (index: number) =>\n (views[index]?.fields || []).some((f) => !isEmptyValue(values[f.slug])),\n [views, values],\n )\n const beatComplete = useCallback(\n (index: number) => {\n const v = views[index]\n if (!v) return false\n return v.fields.every(\n (f) => fieldIsComplete(f) || (!f.is_required && isEmptyValue(values[f.slug])),\n ) && (beatHasValue(index) || visited[index] === true)\n },\n [views, fieldIsComplete, values, beatHasValue, visited],\n )\n\n const activate = useCallback(\n (index: number) => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n setShakeCount(0)\n setActiveIndex(index)\n if (index !== REST) trackStepChange(index + 1)\n },\n [clearAutoAdvance, trackStepChange],\n )\n\n const advance = useCallback(() => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n const view = views[activeIndex]\n if (!view) return\n let failed = false\n for (const field of view.fields) {\n const error = validateField(field)\n if (error) {\n applyFieldError(field.slug, error)\n failed = true\n }\n }\n if (failed) {\n setShakeCount((n) => n + 1)\n return\n }\n setShakeCount(0)\n setVisited((prev) => ({ ...prev, [activeIndex]: true }))\n if (activeIndex >= views.length - 1) {\n // Every beat settled — the submit takes the floor (wake glow via\n // [data-sk-ready] once momentum completes).\n setActiveIndex(REST)\n } else {\n setActiveIndex(activeIndex + 1)\n trackStepChange(activeIndex + 2)\n }\n }, [views, activeIndex, validateField, applyFieldError, trackStepChange, clearAutoAdvance])\n\n // advance() closes over stale state inside the auto-advance timeout — the\n // ref always points at the freshest render's advance.\n const advanceRef = useRef(advance)\n advanceRef.current = advance\n\n // Validation errors raised by submit()'s validateAll while at rest: travel\n // to the first offending beat, shaking. (Errors raised by advance() are\n // always in the active beat, so this never fights the user's typing.)\n useEffect(() => {\n const index = views.findIndex((v) => v.fields.some((f) => errors[f.slug]))\n if (index >= 0 && index !== activeIndex) {\n setActiveIndex(index)\n setShakeCount((n) => n + 1)\n trackStepChange(index + 1)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [errors])\n\n // Land focus inside the newly active beat — first errored field after a\n // shake, else the first field. At rest, focus the finale submit so Enter\n // finishes the arc. Only after real interaction, never on load.\n useEffect(() => {\n if (!hasInteractedRef.current) return\n const timer = window.setTimeout(() => {\n if (activeIndex === REST) {\n formRef.current\n ?.querySelector<HTMLElement>('[data-sk-part=\"stage-submit\"]')\n ?.focus()\n return\n }\n const root = formRef.current?.querySelector<HTMLElement>(\n '[data-sk-beat-state=\"active\"]',\n )\n if (!root) return\n const inputs = Array.from(\n root.querySelectorAll<HTMLElement>(\n 'input:not([data-sk-honeypot]), textarea, select',\n ),\n )\n const errored = inputs.find((el) => {\n const name = el.getAttribute('name')\n return name ? !!errors[name] : false\n })\n ;(errored || inputs[0])?.focus({ preventScroll: false })\n }, 90) // let the bloom start so focus scroll lands on settled layout\n return () => window.clearTimeout(timer)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeIndex, shakeCount])\n\n const handleFieldChange = useCallback(\n (field: FormFieldType, soloAutoAdvance: boolean) => (value: unknown) => {\n hasInteractedRef.current = true\n setFieldValue(field.slug, value)\n // A solo single-select beat locks in and advances after a moment — the\n // pick IS the confirmation. Grouped beats and text wait for Enter/OK.\n if (soloAutoAdvance && !isEmptyValue(value)) {\n clearAutoAdvance()\n autoAdvanceTimer.current = window.setTimeout(() => {\n autoAdvanceTimer.current = null\n advanceRef.current()\n }, 380)\n }\n },\n [setFieldValue, clearAutoAdvance],\n )\n\n /** Focusable travel order inside the active beat (excludes radio/checkbox\n — those advance via their own click/auto-advance path). */\n const travelInputs = useCallback((): HTMLElement[] => {\n const root = formRef.current?.querySelector<HTMLElement>(\n '[data-sk-beat-state=\"active\"]',\n )\n if (!root) return []\n return Array.from(\n root.querySelectorAll<HTMLElement>(\n 'input:not([data-sk-honeypot]):not([type=\"radio\"]):not([type=\"checkbox\"]), textarea, select',\n ),\n )\n }, [])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLFormElement>) => {\n if (activeIndex === REST) return\n const target = e.target as HTMLElement\n const tag = target.tagName\n const isField = tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT'\n if (!isField) return\n\n // Enter does the next thing: next field in the beat, else next beat.\n // Shift+Enter keeps making newlines in long answers.\n if (e.key === 'Enter') {\n if (tag === 'TEXTAREA' && e.shiftKey) return\n e.preventDefault()\n const inputs = travelInputs()\n const index = inputs.indexOf(target)\n if (index >= 0 && index < inputs.length - 1) inputs[index + 1].focus()\n else advance()\n return\n }\n\n // Vertical arrows travel too — but never where they already mean\n // something (textarea caret, select option, number/range steppers).\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n if (tag !== 'INPUT') return\n const type = (target as HTMLInputElement).type\n if (type === 'number' || type === 'range') return\n e.preventDefault()\n const inputs = travelInputs()\n const index = inputs.indexOf(target)\n if (e.key === 'ArrowDown') {\n if (index >= 0 && index < inputs.length - 1) inputs[index + 1].focus()\n else advance()\n } else {\n if (index > 0) inputs[index - 1].focus()\n else if (activeIndex > 0) activate(activeIndex - 1)\n }\n }\n },\n [activeIndex, advance, activate, travelInputs],\n )\n\n // Enter inside a beat routes through keydown; form submission here only\n // fires from the beat's OK button. The finale submit is type=\"button\".\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault()\n if (isSubmitting) return\n if (activeIndex !== REST) advance()\n else void submit()\n },\n [activeIndex, isSubmitting, advance, submit],\n )\n\n const handleFinaleSubmit = useCallback(() => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n if (isSubmitting) return\n // validateAll inside submit() surfaces gaps; the errors effect then\n // travels to the first offending beat.\n void submit()\n }, [isSubmitting, submit, clearAutoAdvance])\n\n const ready = momentum.total > 0 ? momentum.done >= momentum.total : true\n const completeBeats = views.reduce((n, _v, i) => n + (beatComplete(i) ? 1 : 0), 0)\n\n const activeView = activeIndex === REST ? null : views[activeIndex]\n const activeIsGroup = !!activeView && activeView.fields.length > 1\n const activeAllOptionalEmpty =\n !!activeView &&\n activeView.fields.every((f) => !f.is_required && isEmptyValue(values[f.slug]))\n const activeHasTextarea =\n !!activeView && activeView.fields.some((f) => f.field_type === 'textarea')\n const eyebrow =\n activeIndex !== REST && firstName && activeIndex === nameViewIndex + 1\n ? { text: `Nice to meet you, ${firstName}.`, greet: true }\n : activeView?.step?.title\n ? { text: activeView.step.title, greet: false }\n : null\n\n return (\n <form\n ref={formRef}\n className={`sk-form sk-stage ${className || ''}`}\n data-sk-part=\"stage\"\n data-sk-state={isSubmitting ? 'submitting' : 'idle'}\n data-sk-ready={activeIndex === REST && ready && total > 0 ? 'true' : undefined}\n onSubmit={handleSubmit}\n onKeyDown={handleKeyDown}\n >\n <StageStyles />\n\n <header className=\"sk-stage__head\" data-sk-part=\"stage-head\">\n <span className=\"sk-stage__head-name\">{config.name}</span>\n <span className=\"sk-stage__head-meta\" data-sk-part=\"stage-estimate\">\n {`Takes ${stageEstimate(questionCount)}`}\n </span>\n </header>\n\n <div className=\"sk-stage__hud\" data-sk-part=\"stage-hud\">\n <div\n className=\"sk-stage__meter\"\n data-sk-part=\"stage-meter\"\n role=\"progressbar\"\n // A progressbar must have an accessible name; aria-valuetext alone\n // is not one (axe: aria-progressbar-name).\n aria-label=\"Form progress\"\n aria-valuemin={0}\n aria-valuemax={total}\n aria-valuenow={completeBeats}\n aria-valuetext={`${completeBeats} of ${total} answered`}\n >\n {views.map((v, i) => (\n <span\n key={v.fields[0].id}\n className=\"sk-stage__seg\"\n data-sk-lit={beatComplete(i) ? 'true' : undefined}\n data-sk-live={i === activeIndex ? 'true' : undefined}\n aria-hidden=\"true\"\n />\n ))}\n </div>\n <span\n className=\"sk-stage__counter\"\n data-sk-part=\"stage-counter\"\n data-sk-ready={activeIndex === REST && ready ? 'true' : undefined}\n aria-live=\"polite\"\n >\n {activeIndex === REST\n ? ready\n ? 'Ready'\n : `${completeBeats} / ${total}`\n : `${activeIndex + 1} / ${total}`}\n </span>\n </div>\n\n <div className=\"sk-stage__beats\" data-sk-part=\"stage-beats\">\n {views.map((view, i) => {\n const isActive = i === activeIndex\n const filled = visited[i] === true || beatHasValue(i)\n const answers = view.fields\n .map((f) => formatAnswer(values[f.slug]))\n .filter((a): a is string => a !== null)\n const summaryValue = answers.length\n ? answers.join(' · ')\n : filled\n ? 'Skipped'\n : null\n const summaryLabel =\n view.step?.title || view.fields.map((f) => f.label).join(' · ')\n const complete = beatComplete(i) && answers.length > 0\n\n return (\n <section\n key={view.fields[0].id}\n className=\"sk-stage__beat\"\n data-sk-part=\"stage-beat\"\n data-sk-beat-state={isActive ? 'active' : filled ? 'filled' : 'upcoming'}\n data-sk-beat-filled={filled ? 'true' : undefined}\n >\n {/* Settled / waiting row — collapses away while active. */}\n <div className=\"sk-stage__collapse sk-stage__collapse--summary\">\n <div inert={isActive ? true : undefined}>\n <div className=\"sk-stage__summary-inner\">\n <button\n type=\"button\"\n className=\"sk-stage__summary\"\n data-sk-part=\"stage-summary\"\n onClick={() => activate(i)}\n >\n <span className=\"sk-stage__summary-idx\" aria-hidden=\"true\">\n {String(i + 1).padStart(2, '0')}\n </span>\n <span className=\"sk-stage__summary-label\">{summaryLabel}</span>\n {summaryValue !== null && (\n <span\n className={\n 'sk-stage__summary-value' +\n (answers.length === 0\n ? ' sk-stage__summary-value--skipped'\n : '')\n }\n >\n {summaryValue}\n {complete && <SummaryTick />}\n </span>\n )}\n </button>\n </div>\n </div>\n </div>\n\n {/* The lit stage — blooms open while everything else settles. */}\n <div className=\"sk-stage__collapse sk-stage__collapse--body\">\n <div inert={isActive ? undefined : true}>\n <div\n key={isActive ? shakeCount : 0}\n className={\n 'sk-stage__body-inner' +\n (isActive && shakeCount > 0 ? ' sk-stage__shake' : '')\n }\n >\n {isActive && eyebrow && (\n <p\n className={\n 'sk-stage__eyebrow' +\n (eyebrow.greet ? ' sk-stage__eyebrow--greet' : '')\n }\n data-sk-part=\"stage-eyebrow\"\n >\n {eyebrow.text}\n </p>\n )}\n <div\n className={\n 'sk-stage__question' +\n (view.fields.length > 1 ? ' sk-stage__question--group' : '')\n }\n data-sk-part=\"stage-question\"\n >\n <div className=\"sk-stage__fields\">\n {view.fields.map((f) => (\n <FormField\n controls={fieldControls}\n key={f.id}\n // The question IS the label — a hide_label form\n // still asks it.\n field={{ ...f, hide_label: false }}\n value={values[f.slug]}\n error={errors[f.slug]}\n showValid={\n !!touched[f.slug] && !errors[f.slug] && fieldIsComplete(f)\n }\n onChange={handleFieldChange(\n f,\n view.fields.length === 1 &&\n AUTO_ADVANCE_TYPES.includes(f.field_type),\n )}\n classPrefix=\"sk-stage\"\n />\n ))}\n </div>\n <div className=\"sk-stage__actions\" data-sk-part=\"stage-actions\">\n <button\n type=\"submit\"\n className=\"sk-form__btn sk-form__btn--submit\"\n data-sk-part=\"stage-ok\"\n >\n {isActive && activeAllOptionalEmpty ? 'Skip' : 'OK'}\n </button>\n <span className=\"sk-stage__hint\" data-sk-part=\"stage-hint\">\n {isActive && activeHasTextarea ? (\n <>\n <kbd>Enter ↵</kbd> to continue · <kbd>Shift + Enter</kbd>{' '}\n for a new line\n </>\n ) : (\n <>\n press <kbd>Enter ↵</kbd>\n </>\n )}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n )\n })}\n </div>\n\n {/* The finale — wakes ([data-sk-ready] pop + breathe) once every\n requirement clears and the run is at rest. */}\n <div className=\"sk-stage__finale\" data-sk-part=\"stage-finale\">\n <button\n type=\"button\"\n className=\"sk-form__btn sk-form__btn--submit\"\n data-sk-part=\"stage-submit\"\n disabled={isSubmitting}\n onClick={handleFinaleSubmit}\n >\n {isSubmitting ? 'Submitting...' : config.submit_button_text}\n </button>\n {activeIndex === REST && ready && (\n <span className=\"sk-stage__hint\">\n press <kbd>Enter ↵</kbd>\n </span>\n )}\n </div>\n\n {submitError && (\n <p\n className=\"sk-stage__submit-error\"\n role=\"alert\"\n style={{ color: 'var(--sk-error, #dc2626)' }}\n >\n {submitError}\n </p>\n )}\n\n {honeypot}\n </form>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/forms/FormStage.tsx"],"names":["useFieldControls","useState","useRef","useMemo","stageViews","useEffect","stageFirstName","useCallback","isEmptyValue","jsxs","jsx","StageStyles","stageEstimate","formatAnswer","SummaryTick","FormField","AUTO_ADVANCE_TYPES","Fragment"],"mappings":"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","file":"FormStage-SBQQZDW6.js","sourcesContent":["'use client'\n\n/**\n * FormStage — the \"stage\" experience: a spotlight ACCORDION. Beats expand and\n * collapse on one surface (paired grid-rows morphs: the active beat blooms\n * while the previous settles into a filled summary row of label · answer ·\n * tick; upcoming beats wait as dim numbered rows). Enter advances: next field\n * in the beat, then the next beat, then the wake-lit submit. Because every\n * answer stays visible, the form is its own review — no confirm screen.\n *\n * A beat is a VIEW, not a field (see experience-plan.ts): consecutive\n * half/third-width fields share a beat exactly like they share a row in the\n * classic grid; full-width fields stand alone; steps break beats.\n *\n * This is a RENDER BRANCH of FormClient, never a customRender: FormClient\n * still owns values/errors/honeypot/submit, so spam defense and validation\n * are identical to classic. Beat index rides the existing step-tracking pipe,\n * turning form_analytics into a per-beat funnel with zero API changes.\n *\n * Loaded lazily by FormClient — classic-form sites never download it.\n */\n\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useFieldControls } from './field-controls'\nimport { FormField } from './FormField'\nimport { StageStyles, SummaryTick } from './experience-chrome'\nimport {\n AUTO_ADVANCE_TYPES,\n formatAnswer,\n isEmptyValue,\n stageEstimate,\n stageFirstName,\n stageViews,\n} from './experience-plan'\nimport type { StageView } from './experience-plan'\nimport type { ExperienceRenderProps, FormField as FormFieldType } from './types'\n\n/** -1 = at rest (nothing active — every beat settled, submit has the floor). */\nconst REST = -1\n\nexport function FormStage({\n config,\n values,\n errors,\n touched,\n isSubmitting,\n submitError,\n momentum,\n className,\n setFieldValue,\n validateField,\n isFieldVisible,\n fieldIsComplete,\n applyFieldError,\n submit,\n trackStepChange,\n honeypot,\n}: ExperienceRenderProps) {\n // Same on-demand date/file controls the classic form uses.\n const fieldControls = useFieldControls(config.fields)\n const [activeIndex, setActiveIndex] = useState(0)\n // Beats deliberately passed through (including skipped-empty optionals) —\n // drives \"Skipped\" vs \"not there yet\" in the settled rows.\n const [visited, setVisited] = useState<Record<number, boolean>>({})\n // Incremented on each rejected advance so the shake animation replays.\n const [shakeCount, setShakeCount] = useState(0)\n\n const formRef = useRef<HTMLFormElement | null>(null)\n const autoAdvanceTimer = useRef<number | null>(null)\n // Focus is only ever moved after the user has interacted — never on load.\n const hasInteractedRef = useRef(false)\n\n // The run respects conditional visibility live — answering an earlier\n // beat can add or remove later ones.\n const views = useMemo(() => {\n return stageViews(config)\n .map((v) => ({ ...v, fields: v.fields.filter(isFieldVisible) }))\n .filter((v) => v.fields.length > 0)\n }, [config, isFieldVisible])\n const total = views.length\n const questionCount = useMemo(\n () => views.reduce((n, v) => n + v.fields.length, 0),\n [views],\n )\n\n // Clamp if a conditional hid beats behind the cursor.\n useEffect(() => {\n if (activeIndex > 0 && activeIndex >= total) setActiveIndex(total - 1)\n }, [activeIndex, total])\n\n // Greeting: the beat right after the first-name answer says hello.\n const nameViewIndex = useMemo(\n () => views.findIndex((v) => v.fields.some((f) => /^first[_-]?name$/i.test(f.slug))),\n [views],\n )\n const nameField =\n nameViewIndex >= 0\n ? views[nameViewIndex].fields.find((f) => /^first[_-]?name$/i.test(f.slug))\n : undefined\n const firstName = nameField ? stageFirstName(values[nameField.slug]) : null\n\n const clearAutoAdvance = useCallback(() => {\n if (autoAdvanceTimer.current !== null) {\n window.clearTimeout(autoAdvanceTimer.current)\n autoAdvanceTimer.current = null\n }\n }, [])\n useEffect(() => clearAutoAdvance, [clearAutoAdvance])\n\n const beatHasValue = useCallback(\n (index: number) =>\n (views[index]?.fields || []).some((f) => !isEmptyValue(values[f.slug])),\n [views, values],\n )\n const beatComplete = useCallback(\n (index: number) => {\n const v = views[index]\n if (!v) return false\n return v.fields.every(\n (f) => fieldIsComplete(f) || (!f.is_required && isEmptyValue(values[f.slug])),\n ) && (beatHasValue(index) || visited[index] === true)\n },\n [views, fieldIsComplete, values, beatHasValue, visited],\n )\n\n const activate = useCallback(\n (index: number) => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n setShakeCount(0)\n setActiveIndex(index)\n if (index !== REST) trackStepChange(index + 1)\n },\n [clearAutoAdvance, trackStepChange],\n )\n\n const advance = useCallback(() => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n const view = views[activeIndex]\n if (!view) return\n let failed = false\n for (const field of view.fields) {\n const error = validateField(field)\n if (error) {\n applyFieldError(field.slug, error)\n failed = true\n }\n }\n if (failed) {\n setShakeCount((n) => n + 1)\n return\n }\n setShakeCount(0)\n setVisited((prev) => ({ ...prev, [activeIndex]: true }))\n if (activeIndex >= views.length - 1) {\n // Every beat settled — the submit takes the floor (wake glow via\n // [data-sk-ready] once momentum completes).\n setActiveIndex(REST)\n } else {\n setActiveIndex(activeIndex + 1)\n trackStepChange(activeIndex + 2)\n }\n }, [views, activeIndex, validateField, applyFieldError, trackStepChange, clearAutoAdvance])\n\n // advance() closes over stale state inside the auto-advance timeout — the\n // ref always points at the freshest render's advance.\n const advanceRef = useRef(advance)\n advanceRef.current = advance\n\n // Validation errors raised by submit()'s validateAll while at rest: travel\n // to the first offending beat, shaking. (Errors raised by advance() are\n // always in the active beat, so this never fights the user's typing.)\n useEffect(() => {\n const index = views.findIndex((v) => v.fields.some((f) => errors[f.slug]))\n if (index >= 0 && index !== activeIndex) {\n setActiveIndex(index)\n setShakeCount((n) => n + 1)\n trackStepChange(index + 1)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [errors])\n\n // Land focus inside the newly active beat — first errored field after a\n // shake, else the first field. At rest, focus the finale submit so Enter\n // finishes the arc. Only after real interaction, never on load.\n useEffect(() => {\n if (!hasInteractedRef.current) return\n const timer = window.setTimeout(() => {\n if (activeIndex === REST) {\n formRef.current\n ?.querySelector<HTMLElement>('[data-sk-part=\"stage-submit\"]')\n ?.focus()\n return\n }\n const root = formRef.current?.querySelector<HTMLElement>(\n '[data-sk-beat-state=\"active\"]',\n )\n if (!root) return\n const inputs = Array.from(\n root.querySelectorAll<HTMLElement>(\n 'input:not([data-sk-honeypot]), textarea, select',\n ),\n )\n const errored = inputs.find((el) => {\n const name = el.getAttribute('name')\n return name ? !!errors[name] : false\n })\n ;(errored || inputs[0])?.focus({ preventScroll: false })\n }, 90) // let the bloom start so focus scroll lands on settled layout\n return () => window.clearTimeout(timer)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeIndex, shakeCount])\n\n const handleFieldChange = useCallback(\n (field: FormFieldType, soloAutoAdvance: boolean) => (value: unknown) => {\n hasInteractedRef.current = true\n setFieldValue(field.slug, value)\n // A solo single-select beat locks in and advances after a moment — the\n // pick IS the confirmation. Grouped beats and text wait for Enter/OK.\n if (soloAutoAdvance && !isEmptyValue(value)) {\n clearAutoAdvance()\n autoAdvanceTimer.current = window.setTimeout(() => {\n autoAdvanceTimer.current = null\n advanceRef.current()\n }, 380)\n }\n },\n [setFieldValue, clearAutoAdvance],\n )\n\n /** Focusable travel order inside the active beat (excludes radio/checkbox\n — those advance via their own click/auto-advance path). */\n const travelInputs = useCallback((): HTMLElement[] => {\n const root = formRef.current?.querySelector<HTMLElement>(\n '[data-sk-beat-state=\"active\"]',\n )\n if (!root) return []\n return Array.from(\n root.querySelectorAll<HTMLElement>(\n 'input:not([data-sk-honeypot]):not([type=\"radio\"]):not([type=\"checkbox\"]), textarea, select',\n ),\n )\n }, [])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLFormElement>) => {\n if (activeIndex === REST) return\n const target = e.target as HTMLElement\n const tag = target.tagName\n const isField = tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT'\n if (!isField) return\n\n // Enter does the next thing: next field in the beat, else next beat.\n // Shift+Enter keeps making newlines in long answers.\n if (e.key === 'Enter') {\n if (tag === 'TEXTAREA' && e.shiftKey) return\n e.preventDefault()\n const inputs = travelInputs()\n const index = inputs.indexOf(target)\n if (index >= 0 && index < inputs.length - 1) inputs[index + 1].focus()\n else advance()\n return\n }\n\n // Vertical arrows travel too — but never where they already mean\n // something (textarea caret, select option, number/range steppers).\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n if (tag !== 'INPUT') return\n const type = (target as HTMLInputElement).type\n if (type === 'number' || type === 'range') return\n e.preventDefault()\n const inputs = travelInputs()\n const index = inputs.indexOf(target)\n if (e.key === 'ArrowDown') {\n if (index >= 0 && index < inputs.length - 1) inputs[index + 1].focus()\n else advance()\n } else {\n if (index > 0) inputs[index - 1].focus()\n else if (activeIndex > 0) activate(activeIndex - 1)\n }\n }\n },\n [activeIndex, advance, activate, travelInputs],\n )\n\n // Enter inside a beat routes through keydown; form submission here only\n // fires from the beat's OK button. The finale submit is type=\"button\".\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault()\n if (isSubmitting) return\n if (activeIndex !== REST) advance()\n else void submit()\n },\n [activeIndex, isSubmitting, advance, submit],\n )\n\n const handleFinaleSubmit = useCallback(() => {\n hasInteractedRef.current = true\n clearAutoAdvance()\n if (isSubmitting) return\n // validateAll inside submit() surfaces gaps; the errors effect then\n // travels to the first offending beat.\n void submit()\n }, [isSubmitting, submit, clearAutoAdvance])\n\n const ready = momentum.total > 0 ? momentum.done >= momentum.total : true\n const completeBeats = views.reduce((n, _v, i) => n + (beatComplete(i) ? 1 : 0), 0)\n\n const activeView = activeIndex === REST ? null : views[activeIndex]\n const activeIsGroup = !!activeView && activeView.fields.length > 1\n const activeAllOptionalEmpty =\n !!activeView &&\n activeView.fields.every((f) => !f.is_required && isEmptyValue(values[f.slug]))\n const activeHasTextarea =\n !!activeView && activeView.fields.some((f) => f.field_type === 'textarea')\n const eyebrow =\n activeIndex !== REST && firstName && activeIndex === nameViewIndex + 1\n ? { text: `Nice to meet you, ${firstName}.`, greet: true }\n : activeView?.step?.title\n ? { text: activeView.step.title, greet: false }\n : null\n\n return (\n <form\n ref={formRef}\n className={`sk-form sk-stage ${className || ''}`}\n data-sk-part=\"stage\"\n data-sk-state={isSubmitting ? 'submitting' : 'idle'}\n data-sk-ready={activeIndex === REST && ready && total > 0 ? 'true' : undefined}\n onSubmit={handleSubmit}\n onKeyDown={handleKeyDown}\n >\n <StageStyles />\n\n <header className=\"sk-stage__head\" data-sk-part=\"stage-head\">\n <span className=\"sk-stage__head-name\">{config.name}</span>\n <span className=\"sk-stage__head-meta\" data-sk-part=\"stage-estimate\">\n {`Takes ${stageEstimate(questionCount)}`}\n </span>\n </header>\n\n <div className=\"sk-stage__hud\" data-sk-part=\"stage-hud\">\n <div\n className=\"sk-stage__meter\"\n data-sk-part=\"stage-meter\"\n role=\"progressbar\"\n // A progressbar must have an accessible name; aria-valuetext alone\n // is not one (axe: aria-progressbar-name).\n aria-label=\"Form progress\"\n aria-valuemin={0}\n aria-valuemax={total}\n aria-valuenow={completeBeats}\n aria-valuetext={`${completeBeats} of ${total} answered`}\n >\n {views.map((v, i) => (\n <span\n key={v.fields[0].id}\n className=\"sk-stage__seg\"\n data-sk-lit={beatComplete(i) ? 'true' : undefined}\n data-sk-live={i === activeIndex ? 'true' : undefined}\n aria-hidden=\"true\"\n />\n ))}\n </div>\n <span\n className=\"sk-stage__counter\"\n data-sk-part=\"stage-counter\"\n data-sk-ready={activeIndex === REST && ready ? 'true' : undefined}\n aria-live=\"polite\"\n >\n {activeIndex === REST\n ? ready\n ? 'Ready'\n : `${completeBeats} / ${total}`\n : `${activeIndex + 1} / ${total}`}\n </span>\n </div>\n\n <div className=\"sk-stage__beats\" data-sk-part=\"stage-beats\">\n {views.map((view, i) => {\n const isActive = i === activeIndex\n const filled = visited[i] === true || beatHasValue(i)\n const answers = view.fields\n .map((f) => formatAnswer(values[f.slug]))\n .filter((a): a is string => a !== null)\n const summaryValue = answers.length\n ? answers.join(' · ')\n : filled\n ? 'Skipped'\n : null\n const summaryLabel =\n view.step?.title || view.fields.map((f) => f.label).join(' · ')\n const complete = beatComplete(i) && answers.length > 0\n\n return (\n <section\n key={view.fields[0].id}\n className=\"sk-stage__beat\"\n data-sk-part=\"stage-beat\"\n data-sk-beat-state={isActive ? 'active' : filled ? 'filled' : 'upcoming'}\n data-sk-beat-filled={filled ? 'true' : undefined}\n >\n {/* Settled / waiting row — collapses away while active. */}\n <div className=\"sk-stage__collapse sk-stage__collapse--summary\">\n <div inert={isActive ? true : undefined}>\n <div className=\"sk-stage__summary-inner\">\n <button\n type=\"button\"\n className=\"sk-stage__summary\"\n data-sk-part=\"stage-summary\"\n onClick={() => activate(i)}\n >\n <span className=\"sk-stage__summary-idx\" aria-hidden=\"true\">\n {String(i + 1).padStart(2, '0')}\n </span>\n <span className=\"sk-stage__summary-label\">{summaryLabel}</span>\n {summaryValue !== null && (\n <span\n className={\n 'sk-stage__summary-value' +\n (answers.length === 0\n ? ' sk-stage__summary-value--skipped'\n : '')\n }\n >\n {summaryValue}\n {complete && <SummaryTick />}\n </span>\n )}\n </button>\n </div>\n </div>\n </div>\n\n {/* The lit stage — blooms open while everything else settles. */}\n <div className=\"sk-stage__collapse sk-stage__collapse--body\">\n <div inert={isActive ? undefined : true}>\n <div\n key={isActive ? shakeCount : 0}\n className={\n 'sk-stage__body-inner' +\n (isActive && shakeCount > 0 ? ' sk-stage__shake' : '')\n }\n >\n {isActive && eyebrow && (\n <p\n className={\n 'sk-stage__eyebrow' +\n (eyebrow.greet ? ' sk-stage__eyebrow--greet' : '')\n }\n data-sk-part=\"stage-eyebrow\"\n >\n {eyebrow.text}\n </p>\n )}\n <div\n className={\n 'sk-stage__question' +\n (view.fields.length > 1 ? ' sk-stage__question--group' : '')\n }\n data-sk-part=\"stage-question\"\n >\n <div className=\"sk-stage__fields\">\n {view.fields.map((f) => (\n <FormField\n controls={fieldControls}\n key={f.id}\n // The question IS the label — a hide_label form\n // still asks it.\n field={{ ...f, hide_label: false }}\n value={values[f.slug]}\n error={errors[f.slug]}\n showValid={\n !!touched[f.slug] && !errors[f.slug] && fieldIsComplete(f)\n }\n onChange={handleFieldChange(\n f,\n view.fields.length === 1 &&\n AUTO_ADVANCE_TYPES.includes(f.field_type),\n )}\n classPrefix=\"sk-stage\"\n />\n ))}\n </div>\n <div className=\"sk-stage__actions\" data-sk-part=\"stage-actions\">\n <button\n type=\"submit\"\n className=\"sk-form__btn sk-form__btn--submit\"\n data-sk-part=\"stage-ok\"\n >\n {isActive && activeAllOptionalEmpty ? 'Skip' : 'OK'}\n </button>\n <span className=\"sk-stage__hint\" data-sk-part=\"stage-hint\">\n {isActive && activeHasTextarea ? (\n <>\n <kbd>Enter ↵</kbd> to continue · <kbd>Shift + Enter</kbd>{' '}\n for a new line\n </>\n ) : (\n <>\n press <kbd>Enter ↵</kbd>\n </>\n )}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n )\n })}\n </div>\n\n {/* The finale — wakes ([data-sk-ready] pop + breathe) once every\n requirement clears and the run is at rest. */}\n <div className=\"sk-stage__finale\" data-sk-part=\"stage-finale\">\n <button\n type=\"button\"\n className=\"sk-form__btn sk-form__btn--submit\"\n data-sk-part=\"stage-submit\"\n disabled={isSubmitting}\n onClick={handleFinaleSubmit}\n >\n {isSubmitting ? 'Submitting...' : config.submit_button_text}\n </button>\n {activeIndex === REST && ready && (\n <span className=\"sk-stage__hint\">\n press <kbd>Enter ↵</kbd>\n </span>\n )}\n </div>\n\n {submitError && (\n <p\n className=\"sk-stage__submit-error\"\n role=\"alert\"\n style={{ color: 'var(--sk-error, #dc2626)' }}\n >\n {submitError}\n </p>\n )}\n\n {honeypot}\n </form>\n )\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkWZ6QNL2D_js = require('./chunk-WZ6QNL2D.js');
|
|
4
|
+
require('./chunk-VTEIXKBA.js');
|
|
5
|
+
require('./chunk-2OZ2SMZH.js');
|
|
6
|
+
require('./chunk-2ACKOMAL.js');
|
|
7
|
+
require('./chunk-XYZZJZGS.js');
|
|
8
|
+
require('./chunk-LFBMFACZ.js');
|
|
9
|
+
require('./chunk-KHPJ3CEL.js');
|
|
10
|
+
require('./chunk-VJMPIRSD.js');
|
|
11
|
+
require('./chunk-RMLRZOVE.js');
|
|
12
|
+
require('./chunk-7NMI7M56.js');
|
|
13
|
+
require('./chunk-BIZT7AYK.js');
|
|
14
|
+
require('./chunk-SNAQBZPT.js');
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
Object.defineProperty(exports, "ManagedForm", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () { return chunkWZ6QNL2D_js.ManagedForm; }
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=ManagedForm-6LII4DED.js.map
|
|
23
|
+
//# sourceMappingURL=ManagedForm-6LII4DED.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"ManagedForm-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"ManagedForm-6LII4DED.js"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { ManagedForm } from './chunk-W7QMCG2A.mjs';
|
|
2
|
+
import './chunk-MOVMDHGE.mjs';
|
|
3
|
+
import './chunk-DXFZA34N.mjs';
|
|
4
|
+
import './chunk-LB7LHVWI.mjs';
|
|
5
|
+
import './chunk-KHHMU4UH.mjs';
|
|
6
|
+
import './chunk-ITV76G3L.mjs';
|
|
7
|
+
import './chunk-TMVKRQGJ.mjs';
|
|
8
|
+
import './chunk-6EDVCUAG.mjs';
|
|
9
|
+
import './chunk-F4DZH4E5.mjs';
|
|
10
|
+
import './chunk-HHX72A2B.mjs';
|
|
11
|
+
import './chunk-3PTKHSF7.mjs';
|
|
12
|
+
import './chunk-BEXTDHO4.mjs';
|
|
13
|
+
//# sourceMappingURL=ManagedForm-O3JRRWZ6.mjs.map
|
|
14
|
+
//# sourceMappingURL=ManagedForm-O3JRRWZ6.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"ManagedForm-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"ManagedForm-O3JRRWZ6.mjs"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { NewsletterShell } from './chunk-AK6JZ3OE.mjs';
|
|
2
2
|
import './chunk-YFX3Q56O.mjs';
|
|
3
|
-
import { useForm } from './chunk-
|
|
4
|
-
import './chunk-
|
|
3
|
+
import { useForm } from './chunk-KHHMU4UH.mjs';
|
|
4
|
+
import './chunk-ITV76G3L.mjs';
|
|
5
5
|
import './chunk-TMVKRQGJ.mjs';
|
|
6
6
|
import './chunk-6EDVCUAG.mjs';
|
|
7
|
-
import './chunk-
|
|
8
|
-
import './chunk-
|
|
9
|
-
import './chunk-
|
|
7
|
+
import './chunk-F4DZH4E5.mjs';
|
|
8
|
+
import './chunk-HHX72A2B.mjs';
|
|
9
|
+
import './chunk-3PTKHSF7.mjs';
|
|
10
10
|
import './chunk-BEXTDHO4.mjs';
|
|
11
11
|
import { jsx } from 'react/jsx-runtime';
|
|
12
12
|
|
|
@@ -58,5 +58,5 @@ function ManagedNewsletterForm({
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
export { ManagedNewsletterForm as default };
|
|
61
|
-
//# sourceMappingURL=ManagedNewsletterForm-
|
|
62
|
-
//# sourceMappingURL=ManagedNewsletterForm-
|
|
61
|
+
//# sourceMappingURL=ManagedNewsletterForm-FFFF5UEX.mjs.map
|
|
62
|
+
//# sourceMappingURL=ManagedNewsletterForm-FFFF5UEX.mjs.map
|
package/dist/{ManagedNewsletterForm-6DET3VGZ.mjs.map → ManagedNewsletterForm-FFFF5UEX.mjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/blog/ManagedNewsletterForm.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAgBe,SAAR,qBAAA,CAAuC;AAAA,EAC5C,QAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EACyF;AACvF,EAAA,MAAM;AAAA,IACJ,IAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,MACE,OAAA,CAAQ,QAAA,EAAU,EAAE,cAAA,EAAgB,MAAM,CAAA;AAE9C,EAAA,IAAI,UAAA,EAAY;AAEd,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,+BAAA,EAAkC,QAAQ,CAAA,qBAAA,CAAA,EAAyB,UAAU,CAAA;AAC1F,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,EAAA,MAAM,aACJ,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,OAAO,CAAA,IAC9C,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,OAAO,CAAA,IACxC,UAAU,CAAC,CAAA;AACb,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,+BAAA,EAAkC,QAAQ,CAAA,eAAA,CAAiB,CAAA;AACxE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAO,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,IAAI,KAAK,EAAE,CAAA;AAAA,MAC3C,eAAe,CAAC,KAAA,KAAU,aAAA,CAAc,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA,MAC9D,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,KAAK,MAAA,EAAO;AAAA,MACd,CAAA;AAAA,MACA,QAAQ,UAAA,GAAa,SAAA,GAAY,YAAA,GAAe,YAAA,GAAe,cAAc,OAAA,GAAU,MAAA;AAAA,MACvF,cAAA;AAAA,MACA,YAAA,EAAc;AAAA;AAAA,GAChB;AAEJ","file":"ManagedNewsletterForm-
|
|
1
|
+
{"version":3,"sources":["../src/blog/ManagedNewsletterForm.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAgBe,SAAR,qBAAA,CAAuC;AAAA,EAC5C,QAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EACyF;AACvF,EAAA,MAAM;AAAA,IACJ,IAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,MACE,OAAA,CAAQ,QAAA,EAAU,EAAE,cAAA,EAAgB,MAAM,CAAA;AAE9C,EAAA,IAAI,UAAA,EAAY;AAEd,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,+BAAA,EAAkC,QAAQ,CAAA,qBAAA,CAAA,EAAyB,UAAU,CAAA;AAC1F,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,EAAA,MAAM,aACJ,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,OAAO,CAAA,IAC9C,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,OAAO,CAAA,IACxC,UAAU,CAAC,CAAA;AACb,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,+BAAA,EAAkC,QAAQ,CAAA,eAAA,CAAiB,CAAA;AACxE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAO,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,IAAI,KAAK,EAAE,CAAA;AAAA,MAC3C,eAAe,CAAC,KAAA,KAAU,aAAA,CAAc,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA,MAC9D,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,KAAK,MAAA,EAAO;AAAA,MACd,CAAA;AAAA,MACA,QAAQ,UAAA,GAAa,SAAA,GAAY,YAAA,GAAe,YAAA,GAAe,cAAc,OAAA,GAAU,MAAA;AAAA,MACvF,cAAA;AAAA,MACA,YAAA,EAAc;AAAA;AAAA,GAChB;AAEJ","file":"ManagedNewsletterForm-FFFF5UEX.mjs","sourcesContent":["'use client'\n\n/**\n * Managed-forms mode of NewsletterWidget — its own module, loaded via\n * React.lazy, so the useForm graph (forms engine, sonorFetch, site token)\n * stays out of the blog entry's eager bundle. Blog consumers only pay for\n * it when a formSlug newsletter actually mounts (enforced by the\n * integration harness's bundle budget, which measures the eager\n * static-import graph).\n */\n\nimport React from 'react'\nimport { useForm } from '../forms/useForm'\nimport { NewsletterShell, type NewsletterShellProps } from './NewsletterShell'\nimport type { NewsletterWidgetProps } from './NewsletterWidget'\n\nexport default function ManagedNewsletterForm({\n formSlug,\n title,\n description,\n buttonText,\n successMessage,\n}: Required<Pick<NewsletterWidgetProps, 'formSlug'>> &\n Pick<NewsletterShellProps, 'title' | 'description' | 'buttonText' | 'successMessage'>) {\n const {\n form,\n fetchError,\n allFields,\n values,\n setFieldValue,\n submit,\n isSubmitting,\n isComplete,\n submitError,\n } = useForm(formSlug, { trackAnalytics: true })\n\n if (fetchError) {\n // A typo'd slug must not resurrect the silent dead-form behavior.\n console.warn(`[Blog] NewsletterWidget: form \"${formSlug}\" could not be loaded`, fetchError)\n return null\n }\n if (!form) return null // still loading\n\n const emailField =\n allFields.find((f) => f.field_type === 'email') ??\n allFields.find((f) => f.slug === 'email') ??\n allFields[0]\n if (!emailField) {\n console.warn(`[Blog] NewsletterWidget: form \"${formSlug}\" has no fields`)\n return null\n }\n\n return (\n <NewsletterShell\n title={title}\n description={description}\n buttonText={buttonText}\n email={String(values[emailField.slug] ?? '')}\n onEmailChange={(value) => setFieldValue(emailField.slug, value)}\n onFormSubmit={(e) => {\n e.preventDefault()\n void submit()\n }}\n status={isComplete ? 'success' : isSubmitting ? 'submitting' : submitError ? 'error' : 'idle'}\n successMessage={successMessage}\n errorMessage={submitError}\n />\n )\n}\n"]}
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
var chunkDO6ATNLN_js = require('./chunk-DO6ATNLN.js');
|
|
4
4
|
require('./chunk-HX6ZG3PP.js');
|
|
5
|
-
var
|
|
6
|
-
require('./chunk-
|
|
5
|
+
var chunkXYZZJZGS_js = require('./chunk-XYZZJZGS.js');
|
|
6
|
+
require('./chunk-LFBMFACZ.js');
|
|
7
7
|
require('./chunk-KHPJ3CEL.js');
|
|
8
8
|
require('./chunk-VJMPIRSD.js');
|
|
9
|
-
require('./chunk-
|
|
10
|
-
require('./chunk-
|
|
11
|
-
require('./chunk-
|
|
9
|
+
require('./chunk-RMLRZOVE.js');
|
|
10
|
+
require('./chunk-7NMI7M56.js');
|
|
11
|
+
require('./chunk-BIZT7AYK.js');
|
|
12
12
|
require('./chunk-SNAQBZPT.js');
|
|
13
13
|
var jsxRuntime = require('react/jsx-runtime');
|
|
14
14
|
|
|
@@ -29,7 +29,7 @@ function ManagedNewsletterForm({
|
|
|
29
29
|
isSubmitting,
|
|
30
30
|
isComplete,
|
|
31
31
|
submitError
|
|
32
|
-
} =
|
|
32
|
+
} = chunkXYZZJZGS_js.useForm(formSlug, { trackAnalytics: true });
|
|
33
33
|
if (fetchError) {
|
|
34
34
|
console.warn(`[Blog] NewsletterWidget: form "${formSlug}" could not be loaded`, fetchError);
|
|
35
35
|
return null;
|
|
@@ -60,5 +60,5 @@ function ManagedNewsletterForm({
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
module.exports = ManagedNewsletterForm;
|
|
63
|
-
//# sourceMappingURL=ManagedNewsletterForm-
|
|
64
|
-
//# sourceMappingURL=ManagedNewsletterForm-
|
|
63
|
+
//# sourceMappingURL=ManagedNewsletterForm-Z7NYZPAN.js.map
|
|
64
|
+
//# sourceMappingURL=ManagedNewsletterForm-Z7NYZPAN.js.map
|
package/dist/{ManagedNewsletterForm-PG4EX3W6.js.map → ManagedNewsletterForm-Z7NYZPAN.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/blog/ManagedNewsletterForm.tsx"],"names":["useForm","jsx","NewsletterShell"],"mappings":";;;;;;;;;;;;;;AAgBe,SAAR,qBAAA,CAAuC;AAAA,EAC5C,QAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EACyF;AACvF,EAAA,MAAM;AAAA,IACJ,IAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,MACEA,wBAAA,CAAQ,QAAA,EAAU,EAAE,cAAA,EAAgB,MAAM,CAAA;AAE9C,EAAA,IAAI,UAAA,EAAY;AAEd,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,+BAAA,EAAkC,QAAQ,CAAA,qBAAA,CAAA,EAAyB,UAAU,CAAA;AAC1F,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,EAAA,MAAM,aACJ,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,OAAO,CAAA,IAC9C,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,OAAO,CAAA,IACxC,UAAU,CAAC,CAAA;AACb,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,+BAAA,EAAkC,QAAQ,CAAA,eAAA,CAAiB,CAAA;AACxE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEC,cAAA;AAAA,IAACC,gCAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAO,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,IAAI,KAAK,EAAE,CAAA;AAAA,MAC3C,eAAe,CAAC,KAAA,KAAU,aAAA,CAAc,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA,MAC9D,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,KAAK,MAAA,EAAO;AAAA,MACd,CAAA;AAAA,MACA,QAAQ,UAAA,GAAa,SAAA,GAAY,YAAA,GAAe,YAAA,GAAe,cAAc,OAAA,GAAU,MAAA;AAAA,MACvF,cAAA;AAAA,MACA,YAAA,EAAc;AAAA;AAAA,GAChB;AAEJ","file":"ManagedNewsletterForm-
|
|
1
|
+
{"version":3,"sources":["../src/blog/ManagedNewsletterForm.tsx"],"names":["useForm","jsx","NewsletterShell"],"mappings":";;;;;;;;;;;;;;AAgBe,SAAR,qBAAA,CAAuC;AAAA,EAC5C,QAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EACyF;AACvF,EAAA,MAAM;AAAA,IACJ,IAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,MACEA,wBAAA,CAAQ,QAAA,EAAU,EAAE,cAAA,EAAgB,MAAM,CAAA;AAE9C,EAAA,IAAI,UAAA,EAAY;AAEd,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,+BAAA,EAAkC,QAAQ,CAAA,qBAAA,CAAA,EAAyB,UAAU,CAAA;AAC1F,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,EAAA,MAAM,aACJ,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,eAAe,OAAO,CAAA,IAC9C,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,OAAO,CAAA,IACxC,UAAU,CAAC,CAAA;AACb,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,+BAAA,EAAkC,QAAQ,CAAA,eAAA,CAAiB,CAAA;AACxE,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEC,cAAA;AAAA,IAACC,gCAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,OAAO,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,IAAI,KAAK,EAAE,CAAA;AAAA,MAC3C,eAAe,CAAC,KAAA,KAAU,aAAA,CAAc,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA,MAC9D,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,KAAK,MAAA,EAAO;AAAA,MACd,CAAA;AAAA,MACA,QAAQ,UAAA,GAAa,SAAA,GAAY,YAAA,GAAe,YAAA,GAAe,cAAc,OAAA,GAAU,MAAA;AAAA,MACvF,cAAA;AAAA,MACA,YAAA,EAAc;AAAA;AAAA,GAChB;AAEJ","file":"ManagedNewsletterForm-Z7NYZPAN.js","sourcesContent":["'use client'\n\n/**\n * Managed-forms mode of NewsletterWidget — its own module, loaded via\n * React.lazy, so the useForm graph (forms engine, sonorFetch, site token)\n * stays out of the blog entry's eager bundle. Blog consumers only pay for\n * it when a formSlug newsletter actually mounts (enforced by the\n * integration harness's bundle budget, which measures the eager\n * static-import graph).\n */\n\nimport React from 'react'\nimport { useForm } from '../forms/useForm'\nimport { NewsletterShell, type NewsletterShellProps } from './NewsletterShell'\nimport type { NewsletterWidgetProps } from './NewsletterWidget'\n\nexport default function ManagedNewsletterForm({\n formSlug,\n title,\n description,\n buttonText,\n successMessage,\n}: Required<Pick<NewsletterWidgetProps, 'formSlug'>> &\n Pick<NewsletterShellProps, 'title' | 'description' | 'buttonText' | 'successMessage'>) {\n const {\n form,\n fetchError,\n allFields,\n values,\n setFieldValue,\n submit,\n isSubmitting,\n isComplete,\n submitError,\n } = useForm(formSlug, { trackAnalytics: true })\n\n if (fetchError) {\n // A typo'd slug must not resurrect the silent dead-form behavior.\n console.warn(`[Blog] NewsletterWidget: form \"${formSlug}\" could not be loaded`, fetchError)\n return null\n }\n if (!form) return null // still loading\n\n const emailField =\n allFields.find((f) => f.field_type === 'email') ??\n allFields.find((f) => f.slug === 'email') ??\n allFields[0]\n if (!emailField) {\n console.warn(`[Blog] NewsletterWidget: form \"${formSlug}\" has no fields`)\n return null\n }\n\n return (\n <NewsletterShell\n title={title}\n description={description}\n buttonText={buttonText}\n email={String(values[emailField.slug] ?? '')}\n onEmailChange={(value) => setFieldValue(emailField.slug, value)}\n onFormSubmit={(e) => {\n e.preventDefault()\n void submit()\n }}\n status={isComplete ? 'success' : isSubmitting ? 'submitting' : submitError ? 'error' : 'idle'}\n successMessage={successMessage}\n errorMessage={submitError}\n />\n )\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { getOrCreateVisitorId, getOrCreateSessionId } from './chunk-ZZQAGCSI.mjs';
|
|
3
3
|
import './chunk-6EDVCUAG.mjs';
|
|
4
|
-
import { sonorFetch } from './chunk-
|
|
5
|
-
import { getFreshCredential, isSiteToken } from './chunk-
|
|
6
|
-
import './chunk-
|
|
4
|
+
import { sonorFetch } from './chunk-F4DZH4E5.mjs';
|
|
5
|
+
import { getFreshCredential, isSiteToken } from './chunk-HHX72A2B.mjs';
|
|
6
|
+
import './chunk-3PTKHSF7.mjs';
|
|
7
7
|
import './chunk-BEXTDHO4.mjs';
|
|
8
8
|
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
9
9
|
|
|
@@ -326,5 +326,5 @@ function SignalCore({
|
|
|
326
326
|
}
|
|
327
327
|
|
|
328
328
|
export { SignalCore };
|
|
329
|
-
//# sourceMappingURL=SignalCore-
|
|
330
|
-
//# sourceMappingURL=SignalCore-
|
|
329
|
+
//# sourceMappingURL=SignalCore-IUOSVYUE.mjs.map
|
|
330
|
+
//# sourceMappingURL=SignalCore-IUOSVYUE.mjs.map
|