@sonordev/site-kit 4.3.0 → 4.3.1
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 +14 -6
- package/agent-manifest.json +10 -3
- package/dist/AnalyticsProvider-7AR6JHXJ.js +31 -0
- package/dist/{AnalyticsProvider-WRAJE62B.js.map → AnalyticsProvider-7AR6JHXJ.js.map} +1 -1
- package/dist/AnalyticsProvider-VWYCBDBH.mjs +10 -0
- package/dist/{AnalyticsProvider-YZAOPVAY.mjs.map → AnalyticsProvider-VWYCBDBH.mjs.map} +1 -1
- package/dist/ChatWidget-CIDC64OF.js +20 -0
- package/dist/{ChatWidget-NMZGPP7A.js.map → ChatWidget-CIDC64OF.js.map} +1 -1
- package/dist/ChatWidget-XZQXPCLI.mjs +11 -0
- package/dist/{ChatWidget-ZI34F7JU.mjs.map → ChatWidget-XZQXPCLI.mjs.map} +1 -1
- package/dist/EngageWidget-27RJHFFZ.js +18 -0
- package/dist/{EngageWidget-2U4EN7OP.js.map → EngageWidget-27RJHFFZ.js.map} +1 -1
- package/dist/EngageWidget-RDX5XJ3V.mjs +9 -0
- package/dist/{EngageWidget-NI2BN6GO.mjs.map → EngageWidget-RDX5XJ3V.mjs.map} +1 -1
- package/dist/{FileField-UI6DAB3K.js → FileField-ASOR3XG5.js} +6 -6
- package/dist/{FileField-UI6DAB3K.js.map → FileField-ASOR3XG5.js.map} +1 -1
- package/dist/{FileField-I4UICUJF.mjs → FileField-HSPQLACF.mjs} +5 -5
- package/dist/{FileField-I4UICUJF.mjs.map → FileField-HSPQLACF.mjs.map} +1 -1
- package/dist/{FormSpotlight-LO4BU6FY.js → FormSpotlight-VTWP4X6H.js} +15 -15
- package/dist/{FormSpotlight-LO4BU6FY.js.map → FormSpotlight-VTWP4X6H.js.map} +1 -1
- package/dist/{FormSpotlight-RGFZMYPT.mjs → FormSpotlight-VZPPMBJU.mjs} +3 -3
- package/dist/{FormSpotlight-RGFZMYPT.mjs.map → FormSpotlight-VZPPMBJU.mjs.map} +1 -1
- package/dist/{FormStage-NT5ZAH5Y.js → FormStage-DUCY4VGI.js} +13 -13
- package/dist/{FormStage-NT5ZAH5Y.js.map → FormStage-DUCY4VGI.js.map} +1 -1
- package/dist/{FormStage-RBXMNWM3.mjs → FormStage-MTUODSRC.mjs} +3 -3
- package/dist/{FormStage-RBXMNWM3.mjs.map → FormStage-MTUODSRC.mjs.map} +1 -1
- package/dist/ManagedForm-6MTTWEER.js +23 -0
- package/dist/{ManagedForm-MKV5RM54.js.map → ManagedForm-6MTTWEER.js.map} +1 -1
- package/dist/ManagedForm-GKCCHPIX.mjs +14 -0
- package/dist/{ManagedForm-CJOFGQK6.mjs.map → ManagedForm-GKCCHPIX.mjs.map} +1 -1
- package/dist/{SignalCore-IX4L2TYS.js → SignalCore-HWTGSUMC.js} +11 -11
- package/dist/{SignalCore-IX4L2TYS.js.map → SignalCore-HWTGSUMC.js.map} +1 -1
- package/dist/{SignalCore-B2ZSLEXI.mjs → SignalCore-TG3G3VYI.mjs} +5 -5
- package/dist/{SignalCore-B2ZSLEXI.mjs.map → SignalCore-TG3G3VYI.mjs.map} +1 -1
- package/dist/SitemapSync-62VTFZDI.mjs +8 -0
- package/dist/{SitemapSync-2LLNO24P.mjs.map → SitemapSync-62VTFZDI.mjs.map} +1 -1
- package/dist/SitemapSync-PQMQAZMH.js +17 -0
- package/dist/{SitemapSync-B2CY2JYM.js.map → SitemapSync-PQMQAZMH.js.map} +1 -1
- package/dist/analytics/index.js +9 -9
- package/dist/analytics/index.mjs +4 -4
- package/dist/blog/server-ui.js +3 -3
- package/dist/blog/server-ui.mjs +2 -2
- package/dist/blog/server.js +41 -41
- package/dist/blog/server.mjs +2 -2
- package/dist/{chunk-K7QBRZLN.js → chunk-22UZYZKI.js} +18 -18
- package/dist/{chunk-K7QBRZLN.js.map → chunk-22UZYZKI.js.map} +1 -1
- package/dist/{chunk-3AAFSXFC.js → chunk-2MAYXWJI.js} +15 -15
- package/dist/{chunk-3AAFSXFC.js.map → chunk-2MAYXWJI.js.map} +1 -1
- package/dist/{chunk-NGAKS4WG.js → chunk-3FYSBRMT.js} +3 -3
- package/dist/{chunk-NGAKS4WG.js.map → chunk-3FYSBRMT.js.map} +1 -1
- package/dist/{chunk-QCZBXG7G.js → chunk-3TXX5KIN.js} +5 -5
- package/dist/{chunk-QCZBXG7G.js.map → chunk-3TXX5KIN.js.map} +1 -1
- package/dist/{chunk-SABYEM57.js → chunk-3YW4TAK2.js} +9 -9
- package/dist/{chunk-SABYEM57.js.map → chunk-3YW4TAK2.js.map} +1 -1
- package/dist/{chunk-TBIWQQVF.js → chunk-3ZWY6S4V.js} +15 -15
- package/dist/{chunk-TBIWQQVF.js.map → chunk-3ZWY6S4V.js.map} +1 -1
- package/dist/{chunk-GC3BC6HQ.js → chunk-46BMNWE6.js} +2 -2
- package/dist/chunk-46BMNWE6.js.map +1 -0
- package/dist/{chunk-OVIDFJIK.mjs → chunk-5YKMHPJL.mjs} +3 -3
- package/dist/chunk-5YKMHPJL.mjs.map +1 -0
- package/dist/{chunk-G5EETWKH.mjs → chunk-5Z44EOL6.mjs} +4 -4
- package/dist/{chunk-G5EETWKH.mjs.map → chunk-5Z44EOL6.mjs.map} +1 -1
- package/dist/{chunk-LVMPYAOQ.mjs → chunk-6726TSBB.mjs} +4 -4
- package/dist/{chunk-LVMPYAOQ.mjs.map → chunk-6726TSBB.mjs.map} +1 -1
- package/dist/{chunk-SACGTFCK.js → chunk-6CJP7BFM.js} +2 -2
- package/dist/chunk-6CJP7BFM.js.map +1 -0
- package/dist/{chunk-PA7ENTUZ.mjs → chunk-6VHVIBLQ.mjs} +3 -3
- package/dist/{chunk-PA7ENTUZ.mjs.map → chunk-6VHVIBLQ.mjs.map} +1 -1
- package/dist/{chunk-UDBUK5ZJ.mjs → chunk-6XNEGG5B.mjs} +28 -5
- package/dist/chunk-6XNEGG5B.mjs.map +1 -0
- package/dist/{chunk-F3MOVBEE.js → chunk-7M7LNHVD.js} +5 -5
- package/dist/{chunk-F3MOVBEE.js.map → chunk-7M7LNHVD.js.map} +1 -1
- package/dist/{chunk-6SN3ABID.mjs → chunk-ACAMCJJQ.mjs} +3 -3
- package/dist/{chunk-6SN3ABID.mjs.map → chunk-ACAMCJJQ.mjs.map} +1 -1
- package/dist/{chunk-KRARQ2ZF.mjs → chunk-AJQI3WTN.mjs} +2 -2
- package/dist/chunk-AJQI3WTN.mjs.map +1 -0
- package/dist/{chunk-5PBJ42NC.mjs → chunk-AVFXLKIP.mjs} +4 -4
- package/dist/{chunk-5PBJ42NC.mjs.map → chunk-AVFXLKIP.mjs.map} +1 -1
- package/dist/{chunk-U2CJZ6O5.mjs → chunk-B4BFQSSS.mjs} +4 -4
- package/dist/{chunk-U2CJZ6O5.mjs.map → chunk-B4BFQSSS.mjs.map} +1 -1
- package/dist/{chunk-IW6S62NR.js → chunk-BL26HJKE.js} +8 -8
- package/dist/{chunk-IW6S62NR.js.map → chunk-BL26HJKE.js.map} +1 -1
- package/dist/{chunk-3ZD2XCLE.mjs → chunk-BW6DSJEJ.mjs} +4 -4
- package/dist/{chunk-3ZD2XCLE.mjs.map → chunk-BW6DSJEJ.mjs.map} +1 -1
- package/dist/{chunk-XPNOM353.mjs → chunk-CCGFWAPD.mjs} +3 -3
- package/dist/{chunk-XPNOM353.mjs.map → chunk-CCGFWAPD.mjs.map} +1 -1
- package/dist/{chunk-UFT7IKDN.mjs → chunk-CJTU5EUQ.mjs} +3 -3
- package/dist/{chunk-UFT7IKDN.mjs.map → chunk-CJTU5EUQ.mjs.map} +1 -1
- package/dist/{chunk-OOBEJZJ5.js → chunk-DDP6XUF5.js} +3 -3
- package/dist/{chunk-OOBEJZJ5.js.map → chunk-DDP6XUF5.js.map} +1 -1
- package/dist/{chunk-ACL5FDJI.mjs → chunk-E637QPCS.mjs} +3 -3
- package/dist/{chunk-ACL5FDJI.mjs.map → chunk-E637QPCS.mjs.map} +1 -1
- package/dist/{chunk-TMKLH6MY.js → chunk-FBI6LYTM.js} +14 -14
- package/dist/{chunk-TMKLH6MY.js.map → chunk-FBI6LYTM.js.map} +1 -1
- package/dist/chunk-GFMUUALQ.js +8 -0
- package/dist/{chunk-U3P4WF2A.js.map → chunk-GFMUUALQ.js.map} +1 -1
- package/dist/{chunk-LTALFZX7.js → chunk-HSPDHVSJ.js} +6 -6
- package/dist/{chunk-LTALFZX7.js.map → chunk-HSPDHVSJ.js.map} +1 -1
- package/dist/{chunk-IWV72YOE.js → chunk-IM4OVQ4O.js} +14 -14
- package/dist/{chunk-IWV72YOE.js.map → chunk-IM4OVQ4O.js.map} +1 -1
- package/dist/{chunk-RW76CJBS.mjs → chunk-ISILFNCI.mjs} +3 -3
- package/dist/{chunk-RW76CJBS.mjs.map → chunk-ISILFNCI.mjs.map} +1 -1
- package/dist/{chunk-DYDJ6NCM.mjs → chunk-JEEWKAAY.mjs} +3 -3
- package/dist/{chunk-DYDJ6NCM.mjs.map → chunk-JEEWKAAY.mjs.map} +1 -1
- package/dist/{chunk-IT76CWZ2.mjs → chunk-JPHPRD4Z.mjs} +3 -3
- package/dist/{chunk-IT76CWZ2.mjs.map → chunk-JPHPRD4Z.mjs.map} +1 -1
- package/dist/{chunk-NF3QVKWU.js → chunk-JX3PO2MH.js} +4 -4
- package/dist/{chunk-NF3QVKWU.js.map → chunk-JX3PO2MH.js.map} +1 -1
- package/dist/{chunk-IZVV36RT.js → chunk-KI6LGZYL.js} +14 -14
- package/dist/{chunk-IZVV36RT.js.map → chunk-KI6LGZYL.js.map} +1 -1
- package/dist/{chunk-A624YYDG.js → chunk-L2LJQIM3.js} +11 -11
- package/dist/{chunk-A624YYDG.js.map → chunk-L2LJQIM3.js.map} +1 -1
- package/dist/{chunk-5S735BSH.mjs → chunk-LHQ5IEFS.mjs} +4 -4
- package/dist/{chunk-5S735BSH.mjs.map → chunk-LHQ5IEFS.mjs.map} +1 -1
- package/dist/{chunk-JJTCVH4Q.mjs → chunk-LYOM356F.mjs} +3 -3
- package/dist/{chunk-JJTCVH4Q.mjs.map → chunk-LYOM356F.mjs.map} +1 -1
- package/dist/{chunk-7X4LKAYJ.js → chunk-M5ZCJ34F.js} +14 -14
- package/dist/{chunk-7X4LKAYJ.js.map → chunk-M5ZCJ34F.js.map} +1 -1
- package/dist/{chunk-UDXWBLBH.js → chunk-MIYP7WFZ.js} +4 -4
- package/dist/{chunk-UDXWBLBH.js.map → chunk-MIYP7WFZ.js.map} +1 -1
- package/dist/{chunk-R2O5VDNJ.js → chunk-MPL42FJL.js} +12 -12
- package/dist/{chunk-R2O5VDNJ.js.map → chunk-MPL42FJL.js.map} +1 -1
- package/dist/{chunk-3DFYFDGC.mjs → chunk-MTKE7ASR.mjs} +3 -3
- package/dist/{chunk-3DFYFDGC.mjs.map → chunk-MTKE7ASR.mjs.map} +1 -1
- package/dist/{chunk-QPIKPWAZ.js → chunk-O5GHP7UO.js} +28 -5
- package/dist/chunk-O5GHP7UO.js.map +1 -0
- package/dist/{chunk-YSLGMCQH.mjs → chunk-OAOT72JI.mjs} +8 -8
- package/dist/{chunk-YSLGMCQH.mjs.map → chunk-OAOT72JI.mjs.map} +1 -1
- package/dist/{chunk-L4FHGCQ2.mjs → chunk-PK43IK7S.mjs} +3 -3
- package/dist/{chunk-L4FHGCQ2.mjs.map → chunk-PK43IK7S.mjs.map} +1 -1
- package/dist/{chunk-77CIIDE6.js → chunk-PXAALKTP.js} +3 -3
- package/dist/chunk-PXAALKTP.js.map +1 -0
- package/dist/chunk-Q3VBSR4M.mjs +6 -0
- package/dist/{chunk-2X5ZB5D7.mjs.map → chunk-Q3VBSR4M.mjs.map} +1 -1
- package/dist/{chunk-O4TMBV54.js → chunk-QC6EOISZ.js} +8 -8
- package/dist/{chunk-O4TMBV54.js.map → chunk-QC6EOISZ.js.map} +1 -1
- package/dist/{chunk-T6YDAJ5F.js → chunk-QIJIOKNT.js} +4 -4
- package/dist/{chunk-T6YDAJ5F.js.map → chunk-QIJIOKNT.js.map} +1 -1
- package/dist/{chunk-QEHPIQYN.mjs → chunk-RJBW2JFO.mjs} +3 -3
- package/dist/{chunk-QEHPIQYN.mjs.map → chunk-RJBW2JFO.mjs.map} +1 -1
- package/dist/{chunk-OBRGUSGB.mjs → chunk-RPLZIPTB.mjs} +3 -3
- package/dist/{chunk-OBRGUSGB.mjs.map → chunk-RPLZIPTB.mjs.map} +1 -1
- package/dist/{chunk-ANJBOE46.mjs → chunk-RRAUM373.mjs} +4 -4
- package/dist/{chunk-ANJBOE46.mjs.map → chunk-RRAUM373.mjs.map} +1 -1
- package/dist/{chunk-IUZ2RH4V.mjs → chunk-SFMNUVDN.mjs} +3 -3
- package/dist/{chunk-IUZ2RH4V.mjs.map → chunk-SFMNUVDN.mjs.map} +1 -1
- package/dist/{chunk-IWFQPGA2.mjs → chunk-SMCNQWEU.mjs} +7 -7
- package/dist/{chunk-IWFQPGA2.mjs.map → chunk-SMCNQWEU.mjs.map} +1 -1
- package/dist/{chunk-U3X6AKCN.mjs → chunk-SS74PQTF.mjs} +3 -3
- package/dist/{chunk-U3X6AKCN.mjs.map → chunk-SS74PQTF.mjs.map} +1 -1
- package/dist/{chunk-FIVPS4Z6.js → chunk-ST7YQMYN.js} +4 -4
- package/dist/{chunk-FIVPS4Z6.js.map → chunk-ST7YQMYN.js.map} +1 -1
- package/dist/{chunk-3KVG2PSJ.js → chunk-U2V6WHKY.js} +7 -7
- package/dist/{chunk-3KVG2PSJ.js.map → chunk-U2V6WHKY.js.map} +1 -1
- package/dist/{chunk-SM27DPML.js → chunk-U7WGZOJY.js} +12 -12
- package/dist/{chunk-SM27DPML.js.map → chunk-U7WGZOJY.js.map} +1 -1
- package/dist/{chunk-BGIT5M27.js → chunk-UE537WQU.js} +4 -4
- package/dist/{chunk-BGIT5M27.js.map → chunk-UE537WQU.js.map} +1 -1
- package/dist/{chunk-SRJSR6YP.mjs → chunk-UJ6CHZAI.mjs} +2 -2
- package/dist/chunk-UJ6CHZAI.mjs.map +1 -0
- package/dist/{chunk-2CHOHLB7.mjs → chunk-UOTXSWKZ.mjs} +3 -3
- package/dist/{chunk-2CHOHLB7.mjs.map → chunk-UOTXSWKZ.mjs.map} +1 -1
- package/dist/{chunk-CBUGUKRD.js → chunk-WMKE5XNV.js} +3 -3
- package/dist/{chunk-CBUGUKRD.js.map → chunk-WMKE5XNV.js.map} +1 -1
- package/dist/{chunk-PJZHIISA.js → chunk-Y5SN5HTO.js} +3 -3
- package/dist/{chunk-PJZHIISA.js.map → chunk-Y5SN5HTO.js.map} +1 -1
- package/dist/{chunk-JBX6KV46.mjs → chunk-YLZNSSNI.mjs} +4 -4
- package/dist/{chunk-JBX6KV46.mjs.map → chunk-YLZNSSNI.mjs.map} +1 -1
- package/dist/{chunk-IDSTSLMM.mjs → chunk-YXZTCBS7.mjs} +3 -3
- package/dist/{chunk-IDSTSLMM.mjs.map → chunk-YXZTCBS7.mjs.map} +1 -1
- package/dist/{chunk-2EA4DC2G.js → chunk-ZZV4EWMF.js} +5 -5
- package/dist/{chunk-2EA4DC2G.js.map → chunk-ZZV4EWMF.js.map} +1 -1
- package/dist/cli/commands/og.d.ts +33 -0
- package/dist/cli/commands/og.d.ts.map +1 -1
- package/dist/cli/commands/og.test.d.ts +2 -0
- package/dist/cli/commands/og.test.d.ts.map +1 -0
- package/dist/cli/index.js +61 -25
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +54 -18
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/index.js +4 -4
- package/dist/client/index.mjs +3 -3
- package/dist/cms/index.js +3 -3
- package/dist/cms/index.mjs +2 -2
- package/dist/cms/server.js +5 -5
- package/dist/cms/server.mjs +2 -2
- package/dist/commerce/index.js +56 -56
- package/dist/commerce/index.mjs +5 -5
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -2
- package/dist/config/index.js.map +1 -1
- package/dist/config/index.mjs +1 -1
- package/dist/config/index.mjs.map +1 -1
- 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 +12 -12
- package/dist/forms/server.mjs +9 -9
- 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 +68 -68
- package/dist/index.mjs +10 -10
- package/dist/layout/client.js +8 -8
- package/dist/layout/client.mjs +7 -7
- package/dist/layout/index.js +12 -12
- package/dist/layout/index.mjs +9 -9
- 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/og/config.d.ts +6 -0
- package/dist/og/config.d.ts.map +1 -1
- package/dist/og/index.js +5 -5
- package/dist/og/index.mjs +1 -1
- package/dist/og/pages.d.ts +39 -1
- package/dist/og/pages.d.ts.map +1 -1
- package/dist/{middleware → proxy}/index.d.ts +19 -9
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/{middleware → proxy}/index.js +10 -10
- package/dist/proxy/index.js.map +1 -0
- package/dist/{middleware → proxy}/index.mjs +7 -7
- package/dist/proxy/index.mjs.map +1 -0
- package/dist/proxy/securityHeaders.d.ts.map +1 -0
- package/dist/proxy/securityHeaders.test.d.ts.map +1 -0
- package/dist/{middleware → proxy}/segment.d.ts +1 -1
- package/dist/proxy/segment.d.ts.map +1 -0
- package/dist/proxy/segment.test.d.ts.map +1 -0
- package/dist/redirects/index.d.ts +2 -2
- package/dist/redirects/index.js +8 -8
- package/dist/redirects/index.mjs +1 -1
- package/dist/redirects/not-found.js +5 -5
- package/dist/redirects/not-found.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 +43 -43
- package/dist/seo/index.mjs +9 -9
- package/dist/seo/routing.d.ts +3 -3
- package/dist/seo/server.js +19 -19
- package/dist/seo/server.mjs +3 -3
- package/dist/server/index.js +8 -8
- package/dist/server/index.mjs +3 -3
- package/dist/server/server-fetch.d.ts +7 -0
- package/dist/server/server-fetch.d.ts.map +1 -1
- package/dist/server/server-fetch.test.d.ts +2 -0
- package/dist/server/server-fetch.test.d.ts.map +1 -0
- package/dist/{server-api-GRZ3ZBCC.js → server-api-DB2SIUP4.js} +22 -22
- package/dist/{server-api-GRZ3ZBCC.js.map → server-api-DB2SIUP4.js.map} +1 -1
- package/dist/{server-api-2RAXJS3T.mjs → server-api-HW4PL2L2.mjs} +4 -4
- package/dist/{server-api-2RAXJS3T.mjs.map → server-api-HW4PL2L2.mjs.map} +1 -1
- package/dist/shared/build-entries.d.ts +1 -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.d.ts +24 -0
- package/dist/sitemap/index.d.ts.map +1 -1
- package/dist/sitemap/index.js +24 -10
- package/dist/sitemap/index.js.map +1 -1
- package/dist/sitemap/index.mjs +24 -10
- package/dist/sitemap/index.mjs.map +1 -1
- package/dist/slots/index.js +2 -2
- package/dist/slots/index.mjs +1 -1
- package/dist/sync/index.js +16 -16
- package/dist/sync/index.mjs +4 -4
- package/package.json +9 -4
- package/dist/AnalyticsProvider-WRAJE62B.js +0 -31
- package/dist/AnalyticsProvider-YZAOPVAY.mjs +0 -10
- package/dist/ChatWidget-NMZGPP7A.js +0 -20
- package/dist/ChatWidget-ZI34F7JU.mjs +0 -11
- package/dist/EngageWidget-2U4EN7OP.js +0 -18
- package/dist/EngageWidget-NI2BN6GO.mjs +0 -9
- package/dist/ManagedForm-CJOFGQK6.mjs +0 -14
- package/dist/ManagedForm-MKV5RM54.js +0 -23
- package/dist/SitemapSync-2LLNO24P.mjs +0 -8
- package/dist/SitemapSync-B2CY2JYM.js +0 -17
- package/dist/chunk-2X5ZB5D7.mjs +0 -6
- package/dist/chunk-77CIIDE6.js.map +0 -1
- package/dist/chunk-GC3BC6HQ.js.map +0 -1
- package/dist/chunk-KRARQ2ZF.mjs.map +0 -1
- package/dist/chunk-OVIDFJIK.mjs.map +0 -1
- package/dist/chunk-QPIKPWAZ.js.map +0 -1
- package/dist/chunk-SACGTFCK.js.map +0 -1
- package/dist/chunk-SRJSR6YP.mjs.map +0 -1
- package/dist/chunk-U3P4WF2A.js +0 -8
- package/dist/chunk-UDBUK5ZJ.mjs.map +0 -1
- package/dist/middleware/index.d.ts.map +0 -1
- package/dist/middleware/index.js.map +0 -1
- package/dist/middleware/index.mjs.map +0 -1
- package/dist/middleware/securityHeaders.d.ts.map +0 -1
- package/dist/middleware/securityHeaders.test.d.ts.map +0 -1
- package/dist/middleware/segment.d.ts.map +0 -1
- package/dist/middleware/segment.test.d.ts.map +0 -1
- /package/dist/{middleware → proxy}/securityHeaders.d.ts +0 -0
- /package/dist/{middleware → proxy}/securityHeaders.test.d.ts +0 -0
- /package/dist/{middleware → proxy}/segment.test.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/forms/FormSpotlight.tsx"],"names":["stageFirstName","isEmptyValue","jsx","useFieldControls","useMemo","stageViews","useCallback","useState","useRef","useEffect","jsxs","StageStyles","stageEstimate","FormField","AUTO_ADVANCE_TYPES","SummaryTick"],"mappings":"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","file":"FormSpotlight-LO4BU6FY.js","sourcesContent":["'use client'\n\n/**\n * FormSpotlight — a professional form that CONVERSES back.\n *\n * At rest it is a normal form. The life:\n * - hovering a field expands it slightly; clicking keeps it expanded and a\n * GLOWING OUTLINE animates in around it\n * - the outline is ONE physical element: finishing a field and moving on,\n * the glow glides out of the old field and into the next (rect-tracked,\n * so it chases layout wherever the next field lives)\n * - a completed field earns its animated checkmark (the existing lock-in\n * tick + ring)\n * - when a whole row completes and you move on, the fields COLLAPSE INTO A\n * SENTENCE the form says back — \"Nice to meet you, Ramsey.\" /\n * \"We'll follow up at ramsey@… or 555‑0100.\" — with a drawn check and a\n * little edit button to reopen the row\n * - when the last requirement clears, the submit wakes (existing\n * [data-sk-ready] pop + breathe)\n *\n * Rows come from the classic grid's own math (stageViews): consecutive\n * half/third-width fields share a row, full-width fields stand alone,\n * chapters break rows.\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. Field index rides the existing step-tracking\n * pipe (totalSteps = question count) — form_analytics becomes a per-field\n * funnel with zero API changes.\n *\n * Construction rules: zero deps, one deduped style tag, data-sk-part on\n * everything, --sk-* theming, accents mix --sk-primary toward currentColor\n * (contrast law). Reduced motion collapses to instant states. SSR renders\n * the plain expanded form — the choreography arms only after interaction.\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 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\nconst NON_QUESTION_TYPES = ['heading', 'section_header', 'paragraph', 'hidden']\n/** Controls where the glow should wrap the whole wrapper, not one input. */\nconst MULTI_CONTROL_TYPES = ['radio', 'checkbox', 'rating', 'slider']\n\n// ============================================\n// Sentences — what the form says back (unit-tested)\n// ============================================\n\nfunction optionLabel(field: FormFieldType, value: unknown): string {\n const raw = Array.isArray(field.options) ? field.options : []\n const hit = raw.find(\n (o: any) => (typeof o === 'string' ? o : o?.value) === value,\n ) as any\n if (!hit) return String(value)\n return typeof hit === 'string' ? hit : hit.label || String(value)\n}\n\nfunction formatDateish(value: string): string | null {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value)\n if (!m) return null\n const MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December',\n ]\n const month = MONTHS[Number(m[2]) - 1]\n if (!month) return null\n return `${month} ${Number(m[3])}`\n}\n\n/** Render a configured completion message: {value}, {label}, {first_name},\n and {any_field_slug}. Unknown tokens resolve to '' rather than printing\n braces at the visitor. */\nexport function renderCompletionTemplate(\n template: string,\n field: FormFieldType,\n values: Record<string, unknown>,\n): string {\n const stringify = (v: unknown) =>\n Array.isArray(v) ? v.map(String).join(', ') : v === undefined || v === null ? '' : String(v)\n return template\n .replace(/\\{(\\w+)\\}/g, (_match, token: string) => {\n if (token === 'value') return stringify(values[field.slug])\n if (token === 'label') return field.label\n if (token === 'first_name') {\n const key = Object.keys(values).find((k) => /^first[_-]?name$/i.test(k))\n return (key ? stageFirstName(values[key]) : null) || ''\n }\n return stringify(values[token])\n })\n .replace(/\\s{2,}/g, ' ')\n .trim()\n}\n\n/**\n * The sentence a completed row collapses into. Warm, professional, specific.\n * Returns null when there is nothing worth saying (row left empty).\n *\n * A `completion_message` configured on any answered field in the row wins\n * over the built-in sentences — that is the Sonor-side override, so the copy\n * can be changed per form without a site deploy.\n */\nexport function groupSentence(\n fields: FormFieldType[],\n values: Record<string, unknown>,\n): string | null {\n const val = (f: FormFieldType) => values[f.slug]\n const answered = fields.filter((f) => !isEmptyValue(val(f)))\n if (answered.length === 0) return null\n\n // Author-configured copy wins, in field order.\n for (const f of answered) {\n const template = f.completion_message?.trim()\n if (template) {\n const rendered = renderCompletionTemplate(template, f, values)\n if (rendered) return rendered\n }\n }\n\n // Name row → the greeting.\n const firstNameField = fields.find((f) => /first[_-]?name|^fname$/i.test(f.slug))\n const anyNameField = fields.find(\n (f) => /(^|_|-)name($|_|-)/i.test(f.slug) || /name/i.test(f.slug),\n )\n if (firstNameField || anyNameField) {\n const source = firstNameField ?? anyNameField\n const name = stageFirstName(val(source!))\n if (name) return `Nice to meet you, ${name}.`\n }\n\n // Contact row → where the follow-up lands.\n const email = fields.find(\n (f) => f.field_type === 'email' && !isEmptyValue(val(f)),\n )\n const phone = fields.find(\n (f) => (f.field_type === 'phone' || f.field_type === 'tel') && !isEmptyValue(val(f)),\n )\n if (email && phone) return `We'll follow up at ${val(email)} or ${val(phone)}.`\n if (email) return `We'll follow up at ${val(email)}.`\n if (phone) return `We'll follow up at ${val(phone)}.`\n\n // Single-field rows by type.\n if (answered.length === 1) {\n const f = answered[0]\n const v = val(f)\n switch (f.field_type) {\n case 'date':\n case 'datetime': {\n const pretty = formatDateish(String(v))\n if (pretty) return `Locked in for ${pretty}.`\n break\n }\n case 'select':\n case 'radio':\n return `${optionLabel(f, v)} it is.`\n case 'rating':\n return `${v} stars. Appreciated.`\n case 'textarea':\n return `Got it. Thanks for the detail.`\n case 'checkbox':\n if (Array.isArray(v))\n return `${v.map((x) => optionLabel(f, x)).join(', ')}. Noted.`\n if (v === true) return `${f.label}. Noted.`\n break\n default:\n break\n }\n }\n\n // Fallback: honest and plain.\n return answered\n .map((f) => {\n const v = val(f)\n return `${f.label}: ${Array.isArray(v) ? v.join(', ') : String(v)}`\n })\n .join(' · ')\n}\n\n// ============================================\n// Styles (deduped tag; head/pips/collapse mechanics come from StageStyles)\n// ============================================\n\nconst STYLE_ID = 'sk-spot-css'\n\nconst CSS = `\n@keyframes sk-spot-shake-a { 0%, 100% { transform: translateX(0) } 18% { transform: translateX(-9px) } 40% { transform: translateX(7px) } 62% { transform: translateX(-5px) } 82% { transform: translateX(3px) } }\n@keyframes sk-spot-shake-b { 0%, 100% { transform: translateX(0) } 18% { transform: translateX(-9px) } 40% { transform: translateX(7px) } 62% { transform: translateX(-5px) } 82% { transform: translateX(3px) } }\n@keyframes sk-spot-glow-breathe {\n 0%, 100% { box-shadow: 0 0 14px 0 color-mix(in srgb, var(--sk-primary, #2563eb) 45%, transparent) }\n 50% { box-shadow: 0 0 24px 2px color-mix(in srgb, var(--sk-primary, #2563eb) 60%, transparent) }\n}\n\n.sk-spot { position: relative; }\n\n/* ---- The glow: one ring that VISITS fields. Its position never animates —\n on every move a GHOST plays the exit at the old field WHILE the real ring\n plays its entrance at the new one. One seamless overlapping gesture, zero\n timers (immune to background throttling). ---- */\n/* Leaves WITH the field: the field it is leaving relaxes from its focused\n scale back to rest, so the ring shrinks by the same amount on the same\n curve instead of expanding away from it. */\n@keyframes sk-glow-out {\n 0% { opacity: 1; transform: scale(1);\n box-shadow: 0 0 14px 0 color-mix(in srgb, var(--sk-primary, #2563eb) 45%, transparent) }\n 100% { opacity: 0; transform: scale(.98);\n box-shadow: 0 0 6px 0 color-mix(in srgb, var(--sk-primary, #2563eb) 0%, transparent) }\n}\n/* Settles in rather than popping: a hair under resting size, no overshoot\n past it, and the halo rises straight to rest instead of flaring first. */\n@keyframes sk-glow-in {\n 0% { opacity: 0; transform: scale(.985);\n box-shadow: 0 0 6px 0 color-mix(in srgb, var(--sk-primary, #2563eb) 20%, transparent) }\n 100% { opacity: 1; transform: scale(1);\n box-shadow: 0 0 14px 0 color-mix(in srgb, var(--sk-primary, #2563eb) 45%, transparent) }\n}\n.sk-spot__glow, .sk-spot__glow-ghost {\n position: absolute; pointer-events: none; z-index: 2;\n border: 2px solid color-mix(in srgb, var(--sk-primary, #2563eb) 72%, currentColor);\n border-radius: calc(var(--sk-input-radius, 6px) + 4px);\n}\n.sk-spot__glow { opacity: 0; transition: none; }\n.sk-spot__glow[data-sk-on=\"true\"] {\n /* ease-out, not a spring — the ring arrives and settles, never bounces. */\n animation:\n sk-glow-in .38s cubic-bezier(.22,.8,.3,1) both,\n sk-spot-glow-breathe 2.2s ease-in-out .42s infinite;\n}\n/* Same duration and curve as the field's own transform transition below, so\n ring and field relax together rather than on separate clocks. */\n.sk-spot__glow-ghost { animation: sk-glow-out .3s cubic-bezier(.22,1,.36,1) both; }\n\n/* ---- Rows ---- */\n.sk-spot__groups { display: flex; flex-direction: column; }\n/* A collapsed row keeps the height it had as fields (set inline), and the\n sentence rides in the middle of that reserved space. */\n[data-sk-part=\"spot-group\"] { display: flex; flex-direction: column; justify-content: center; }\n/* Vertical clip only: the collapse animation needs the y-axis contained,\n but scaled labels and the glow must never lose their left edge. */\n.sk-spot .sk-stage__collapse > div { overflow: visible clip; }\n.sk-spot__rowfields { display: flex; flex-wrap: wrap; gap: 16px; padding: 4px 2px 6px; }\n.sk-spot__rowfields > * { flex: 1 1 100%; }\n@media (min-width: 560px) {\n .sk-spot__rowfields > .sk-spot__q--sub { flex: 1 1 0; min-width: 180px; }\n}\n\n/* ---- Fields: hover expands a touch; the active one holds it ---- */\n.sk-spot__q {\n position: relative;\n transition: transform .3s cubic-bezier(.22,1,.36,1), opacity .3s ease;\n}\n.sk-spot__q:hover { transform: scale(1.015); }\n.sk-spot__q[data-sk-spot=\"active\"] { transform: scale(1.02); z-index: 1; }\n.sk-spot--live .sk-spot__q[data-sk-spot=\"idle\"]:not(:hover) { opacity: .72; }\n.sk-spot__q .sk-form__label { transition: opacity .3s ease; }\n.sk-spot--live .sk-spot__q[data-sk-spot=\"filled\"] .sk-form__label { opacity: .75; }\n\n/* ---- Sentence rows: what the form says back ---- */\n/* Both layers cross-fade as the rows morph, so neither pops in or out. */\n.sk-spot__rowfields { opacity: 1; transition: opacity .3s ease .08s; }\n[data-sk-group-state=\"sentence\"] .sk-spot__rowfields { opacity: 0; transition-delay: 0s; }\n.sk-spot__sentence {\n display: flex; align-items: center; gap: 10px;\n padding: 12px 2px;\n opacity: 1; transition: opacity .3s ease .08s;\n}\n[data-sk-group-state=\"open\"] .sk-spot__sentence { opacity: 0; transition-delay: 0s; }\n.sk-spot__sentence-text { font-weight: 600; overflow-wrap: anywhere; }\n.sk-spot__sentence-edit {\n margin-left: auto; flex-shrink: 0;\n display: inline-flex; align-items: center; justify-content: center;\n width: 26px; height: 26px; border-radius: 50%;\n background: none; cursor: pointer; color: inherit;\n border: 1px solid color-mix(in srgb, currentColor 30%, transparent);\n opacity: .6;\n transition: opacity .15s ease, background-color .15s ease;\n}\n.sk-spot__sentence-edit:hover,\n.sk-spot__sentence-edit:focus-visible {\n opacity: 1;\n background: color-mix(in srgb, currentColor 10%, transparent);\n}\n\n/* ---- Finale: the submit gets room and presence. :where() keeps the\n specificity at zero so site button theming always wins. ---- */\n.sk-spot :where(.sk-form__actions) { margin-top: 28px; display: flex; justify-content: flex-end; }\n.sk-spot :where([data-sk-part=\"spot-submit\"]) {\n padding: 13px 30px; font-size: 1.05em; min-width: 200px; cursor: pointer;\n}\n@media (max-width: 560px) {\n .sk-spot :where([data-sk-part=\"spot-submit\"]) { width: 100%; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .sk-spot__glow { animation: none !important; }\n .sk-spot__glow[data-sk-on=\"true\"] { opacity: 1;\n box-shadow: 0 0 14px 0 color-mix(in srgb, var(--sk-primary, #2563eb) 50%, transparent); }\n .sk-spot__glow-ghost { animation: none !important; opacity: 0; }\n .sk-spot__q { transition: none; animation: none !important; }\n .sk-spot__q:hover { transform: none; }\n .sk-spot__q[data-sk-spot=\"active\"] { transform: none; }\n .sk-spot__rowfields, .sk-spot__sentence { transition: none; }\n}\n`\n\nexport function SpotStyles() {\n return <style id={STYLE_ID} dangerouslySetInnerHTML={{ __html: CSS }} />\n}\n\nfunction PencilIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z\" />\n </svg>\n )\n}\n\n// ============================================\n// Component\n// ============================================\n\ninterface GlowRect {\n top: number\n left: number\n width: number\n height: number\n visible: boolean\n}\n\nexport function FormSpotlight({\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 // Rows from the classic grid's own math; conditional visibility live.\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 questions = useMemo(() => views.flatMap((v) => v.fields), [views])\n const questionCount = questions.length\n\n const groupOf = useCallback(\n (slug: string) => views.findIndex((v) => v.fields.some((f) => f.slug === slug)),\n [views],\n )\n\n const firstIncomplete = questions.findIndex((q) => !fieldIsComplete(q))\n const [activeSlug, setActiveSlug] = useState<string | null>(\n () => questions[Math.max(0, firstIncomplete)]?.slug ?? null,\n )\n // Choreography (glow, dimming, collapsing) arms only after interaction —\n // SSR and first paint are a calm, normal form.\n const [live, setLive] = useState(false)\n const [shakes, setShakes] = useState<Record<string, number>>({})\n const [collapsed, setCollapsed] = useState<Record<number, boolean>>({})\n const [glow, setGlow] = useState<GlowRect>({ top: 0, left: 0, width: 0, height: 0, visible: false })\n\n const formRef = useRef<HTMLFormElement | null>(null)\n const autoTimer = useRef<number | null>(null)\n\n const activeIndex = questions.findIndex((q) => q.slug === activeSlug)\n const activeGroup = activeSlug ? groupOf(activeSlug) : -1\n\n const groupComplete = useCallback(\n (view: StageView) =>\n view.fields.every(\n (f) => fieldIsComplete(f) || (!f.is_required && isEmptyValue(values[f.slug])),\n ) && view.fields.some((f) => !isEmptyValue(values[f.slug])),\n [fieldIsComplete, values],\n )\n\n const completeCount = questions.reduce((n, q) => n + (fieldIsComplete(q) ? 1 : 0), 0)\n const ready = momentum.total > 0 ? momentum.done >= momentum.total : true\n\n const clearAutoTimer = useCallback(() => {\n if (autoTimer.current !== null) {\n window.clearTimeout(autoTimer.current)\n autoTimer.current = null\n }\n }, [])\n useEffect(() => clearAutoTimer, [clearAutoTimer])\n\n // ---- The glow choreography: out on the old field, in on the new ----\n const measureRect = useCallback(\n (slug: string): Omit<GlowRect, 'visible'> | null => {\n const form = formRef.current\n if (!form) return null\n const wrapper = form.querySelector<HTMLElement>(`[data-sk-slug=\"${slug}\"]`)\n if (!wrapper) return null\n const field = questions.find((q) => q.slug === slug)\n const target = MULTI_CONTROL_TYPES.includes(field?.field_type || '')\n ? wrapper\n : wrapper.querySelector<HTMLElement>(\n 'input:not([data-sk-honeypot]), textarea, select, button',\n ) || wrapper\n const formRect = form.getBoundingClientRect()\n const rect = target.getBoundingClientRect()\n const PAD = 4\n return {\n top: rect.top - formRect.top - PAD,\n left: rect.left - formRect.left - PAD,\n width: rect.width + PAD * 2,\n height: rect.height + PAD * 2,\n }\n },\n [questions],\n )\n const measureRectRef = useRef(measureRect)\n measureRectRef.current = measureRect\n\n // The real ring (keyed by slug so its entrance replays per visit) + one\n // ghost slot replaying the exit at the rect the ring just left.\n const [glowOn, setGlowOn] = useState(false)\n const [ghost, setGhost] = useState<\n (Omit<GlowRect, 'visible'> & { key: number }) | null\n >(null)\n const ghostSeq = useRef(0)\n const glowStateRef = useRef({ on: false, rect: null as Omit<GlowRect, 'visible'> | null })\n\n useEffect(() => {\n if (!live) return\n const prev = glowStateRef.current\n const leave = () => {\n if (prev.on && prev.rect) {\n ghostSeq.current += 1\n setGhost({ ...prev.rect, key: ghostSeq.current })\n }\n }\n if (!activeSlug) {\n leave()\n setGlowOn(false)\n glowStateRef.current = { on: false, rect: null }\n return\n }\n const rect = measureRectRef.current(activeSlug)\n if (!rect) {\n leave()\n setGlowOn(false)\n glowStateRef.current = { on: false, rect: null }\n return\n }\n // Exit and entrance start the same frame — one seamless gesture.\n leave()\n setGlow({ ...rect, visible: true })\n setGlowOn(true)\n glowStateRef.current = { on: true, rect }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeSlug, live])\n\n // While resting on a field, follow layout reflow (rows collapsing above,\n // viewport resizes) with a position snap — never a cross-field slide.\n useEffect(() => {\n if (!live || typeof ResizeObserver === 'undefined') return\n const form = formRef.current\n if (!form) return\n const follow = () => {\n if (!glowStateRef.current.on) return\n const slug = activeSlugRef.current\n if (!slug) return\n const rect = measureRectRef.current(slug)\n if (rect) {\n setGlow({ ...rect, visible: true })\n glowStateRef.current = { on: true, rect }\n }\n }\n const ro = new ResizeObserver(follow)\n ro.observe(form)\n window.addEventListener('resize', follow)\n return () => {\n ro.disconnect()\n window.removeEventListener('resize', follow)\n }\n }, [live])\n\n // ---- Collapse rows into sentences once they're complete and left ----\n // The row's open height is captured first and held as a floor on the group,\n // so swapping fields for a sentence never shrinks the form box (and never\n // yanks the rest of the page upward mid-fill).\n const groupEls = useRef<Record<number, HTMLDivElement | null>>({})\n const [reserved, setReserved] = useState<Record<number, number>>({})\n useEffect(() => {\n if (!live) return\n const heights: Record<number, number> = {}\n setCollapsed((prev) => {\n let changed = false\n const next = { ...prev }\n views.forEach((view, i) => {\n if (i === activeGroup || prev[i]) return\n if (groupComplete(view) && groupSentence(view.fields, values)) {\n const height = groupEls.current[i]?.getBoundingClientRect().height\n if (height) heights[i] = height\n next[i] = true\n changed = true\n }\n })\n return changed ? next : prev\n })\n if (Object.keys(heights).length) {\n setReserved((prev) => ({ ...heights, ...prev }))\n }\n }, [activeGroup, live, views, groupComplete, values])\n\n const inputFor = useCallback((slug: string): HTMLElement | null => {\n return (\n formRef.current?.querySelector<HTMLElement>(\n `[data-sk-slug=\"${slug}\"] input:not([data-sk-honeypot]), [data-sk-slug=\"${slug}\"] textarea, [data-sk-slug=\"${slug}\"] select, [data-sk-slug=\"${slug}\"] button`,\n ) ?? null\n )\n }, [])\n\n const reopenGroup = useCallback(\n (index: number) => {\n setLive(true)\n setCollapsed((prev) => ({ ...prev, [index]: false }))\n const slug = views[index]?.fields[0]?.slug\n if (slug) {\n window.setTimeout(() => inputFor(slug)?.focus(), 120)\n const qIndex = questions.findIndex((q) => q.slug === slug)\n if (qIndex >= 0) trackStepChange(qIndex + 1)\n }\n },\n [views, questions, inputFor, trackStepChange],\n )\n\n /** Focus the next unanswered question after `from` (collapsed rows are\n complete by definition, so travel naturally skips them); with nothing\n left, land on the wake-lit submit. */\n const travelOnward = useCallback(\n (from: number) => {\n for (let i = from + 1; i < questions.length; i++) {\n if (!fieldIsComplete(questions[i])) {\n inputFor(questions[i].slug)?.focus()\n return\n }\n }\n for (let i = 0; i < from; i++) {\n if (!fieldIsComplete(questions[i])) {\n inputFor(questions[i].slug)?.focus()\n return\n }\n }\n setActiveSlug(null)\n formRef.current\n ?.querySelector<HTMLElement>('[data-sk-part=\"spot-submit\"]')\n ?.focus()\n },\n [questions, fieldIsComplete, inputFor],\n )\n\n const shake = useCallback((slug: string) => {\n setShakes((prev) => ({ ...prev, [slug]: (prev[slug] || 0) + 1 }))\n }, [])\n\n const advanceFrom = useCallback(\n (index: number) => {\n const q = questions[index]\n if (!q) return\n const error = validateField(q)\n if (error) {\n applyFieldError(q.slug, error)\n shake(q.slug)\n return\n }\n travelOnward(index)\n },\n [questions, validateField, applyFieldError, shake, travelOnward],\n )\n const advanceFromRef = useRef(advanceFrom)\n advanceFromRef.current = advanceFrom\n const activeIndexRef = useRef(activeIndex)\n activeIndexRef.current = activeIndex\n\n // Focus drives the spotlight. Native focusin (not React's synthetic focus\n // system): it works identically across React versions, portals, and\n // programmatic .focus() calls — the travel helpers depend on that.\n const activeSlugRef = useRef(activeSlug)\n activeSlugRef.current = activeSlug\n const questionsRef = useRef(questions)\n questionsRef.current = questions\n const trackStepChangeRef = useRef(trackStepChange)\n trackStepChangeRef.current = trackStepChange\n useEffect(() => {\n const form = formRef.current\n if (!form) return\n const onFocusIn = (e: FocusEvent) => {\n const wrapper = (e.target as HTMLElement | null)?.closest?.('[data-sk-slug]')\n const slug = wrapper?.getAttribute('data-sk-slug') ?? null\n setLive(true)\n if (slug && slug !== activeSlugRef.current) {\n setActiveSlug(slug)\n const index = questionsRef.current.findIndex((q) => q.slug === slug)\n if (index >= 0) trackStepChangeRef.current(index + 1)\n } else if (!slug) {\n setActiveSlug(null)\n }\n }\n form.addEventListener('focusin', onFocusIn)\n return () => form.removeEventListener('focusin', onFocusIn)\n }, [])\n\n const handleFieldChange = useCallback(\n (field: FormFieldType, soloAutoAdvance: boolean) => (value: unknown) => {\n setLive(true)\n setFieldValue(field.slug, value)\n if (soloAutoAdvance && !isEmptyValue(value)) {\n clearAutoTimer()\n autoTimer.current = window.setTimeout(() => {\n autoTimer.current = null\n if (activeIndexRef.current >= 0) advanceFromRef.current(activeIndexRef.current)\n }, 380)\n }\n },\n [setFieldValue, clearAutoTimer],\n )\n\n const travelInputs = useCallback((): HTMLElement[] => {\n const form = formRef.current\n if (!form) return []\n return questions\n .map((q) => inputFor(q.slug))\n .filter((el): el is HTMLElement => !!el)\n }, [questions, inputFor])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLFormElement>) => {\n const target = e.target as HTMLElement\n const tag = target.tagName\n const isField = tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT'\n if (!isField || activeIndex < 0) return\n\n if (e.key === 'Enter') {\n if (tag === 'TEXTAREA' && e.shiftKey) return\n e.preventDefault()\n advanceFrom(activeIndex)\n return\n }\n\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' || type === 'radio' || type === 'checkbox')\n return\n e.preventDefault()\n const inputs = travelInputs()\n const domIndex = inputs.indexOf(inputFor(questions[activeIndex].slug) as HTMLElement)\n if (e.key === 'ArrowDown') {\n const next = inputs[domIndex + 1]\n if (next) next.focus()\n else\n formRef.current\n ?.querySelector<HTMLElement>('[data-sk-part=\"spot-submit\"]')\n ?.focus()\n } else {\n const prev = inputs[domIndex - 1]\n if (prev) prev.focus()\n }\n }\n },\n [activeIndex, questions, advanceFrom, travelInputs, inputFor],\n )\n\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault()\n if (isSubmitting) return\n clearAutoTimer()\n void submit()\n },\n [isSubmitting, submit, clearAutoTimer],\n )\n\n // validateAll errors from a submit attempt: reopen the offending row if it\n // collapsed, sweep the glow there, shake.\n useEffect(() => {\n const offender = questions.find((q) => errors[q.slug])\n if (!offender) return\n const g = groupOf(offender.slug)\n if (g >= 0 && collapsed[g]) {\n setCollapsed((prev) => ({ ...prev, [g]: false }))\n window.setTimeout(() => inputFor(offender.slug)?.focus(), 120)\n shake(offender.slug)\n return\n }\n if (offender.slug !== activeSlug) {\n inputFor(offender.slug)?.focus()\n shake(offender.slug)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [errors])\n\n // Display-only fields (heading/paragraph) render standalone, in order.\n const firstFieldIdToView = useMemo(() => {\n const map = new Map<string, number>()\n views.forEach((v, i) => map.set(v.fields[0].id, i))\n return map\n }, [views])\n const renderedViews = new Set<number>()\n\n return (\n <form\n ref={formRef}\n className={`sk-form sk-spot ${live ? 'sk-spot--live ' : ''}${className || ''}`}\n data-sk-part=\"spotlight\"\n data-sk-state={isSubmitting ? 'submitting' : 'idle'}\n data-sk-ready={ready && momentum.total > 0 ? 'true' : undefined}\n onSubmit={handleSubmit}\n onKeyDown={handleKeyDown}\n >\n <StageStyles />\n <SpotStyles />\n\n {/* The glowing outline — it never belongs to a field, it VISITS. The\n ghost replays the exit at the old rect while the ring enters the\n new one: one seamless overlapping gesture. */}\n {ghost && (\n <span\n key={`ghost-${ghost.key}`}\n className=\"sk-spot__glow-ghost\"\n data-sk-part=\"spot-glow-ghost\"\n style={{ top: ghost.top, left: ghost.left, width: ghost.width, height: ghost.height }}\n onAnimationEnd={() =>\n setGhost((g) => (g && g.key === ghost.key ? null : g))\n }\n aria-hidden=\"true\"\n />\n )}\n <span\n key={`glow-${activeSlug || 'none'}`}\n className=\"sk-spot__glow\"\n data-sk-part=\"spot-glow\"\n data-sk-on={glowOn ? 'true' : undefined}\n style={{ top: glow.top, left: glow.left, width: glow.width, height: glow.height }}\n aria-hidden=\"true\"\n />\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={questionCount}\n aria-valuenow={completeCount}\n aria-valuetext={`${completeCount} of ${questionCount} answered`}\n >\n {questions.map((q, i) => (\n <span\n key={q.id}\n className=\"sk-stage__seg\"\n data-sk-lit={fieldIsComplete(q) ? '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={ready && momentum.total > 0 ? 'true' : undefined}\n aria-live=\"polite\"\n >\n {ready ? 'Ready' : `${completeCount} / ${questionCount}`}\n </span>\n </div>\n\n <div className=\"sk-spot__groups\" data-sk-part=\"spot-groups\">\n {(config.fields || []).map((field) => {\n if (!isFieldVisible(field)) return null\n if (NON_QUESTION_TYPES.includes(field.field_type)) {\n return (\n <FormField\n controls={fieldControls}\n key={field.id}\n field={field}\n value={values[field.slug]}\n onChange={(value) => setFieldValue(field.slug, value)}\n />\n )\n }\n const viewIndex = firstFieldIdToView.get(field.id)\n if (viewIndex === undefined || renderedViews.has(viewIndex)) return null\n renderedViews.add(viewIndex)\n const view = views[viewIndex]\n const isCollapsed = collapsed[viewIndex] === true\n // Computed in both states, never gated on isCollapsed: unmounting\n // the sentence on reopen made it vanish instantly while its layer\n // was still animating closed. Kept mounted, it collapses WITH the\n // layer and the fields bloom in over it.\n const sentence = groupSentence(view.fields, values)\n\n return (\n <div\n key={view.fields[0].id}\n ref={(el) => {\n groupEls.current[viewIndex] = el\n }}\n data-sk-part=\"spot-group\"\n data-sk-group-state={isCollapsed ? 'sentence' : 'open'}\n // Held in BOTH states, not just while collapsed: the open row\n // is exactly this tall anyway, so keeping the floor means the\n // box never changes height — collapsing to a sentence and\n // reopening to fields are both pure crossfades, with no jump\n // at either end.\n style={\n reserved[viewIndex] ? { minHeight: reserved[viewIndex] } : undefined\n }\n >\n {/* The row of fields — collapses away once it has been said. */}\n <div\n className=\"sk-stage__collapse\"\n style={{ gridTemplateRows: isCollapsed ? '0fr' : '1fr' }}\n >\n <div inert={isCollapsed ? true : undefined}>\n <div className=\"sk-spot__rowfields\" data-sk-part=\"spot-rowfields\">\n {view.fields.map((f) => {\n const isActive = f.slug === activeSlug\n const filled = fieldIsComplete(f)\n const shakeN = shakes[f.slug] || 0\n return (\n <div\n key={f.id}\n data-sk-slug={f.slug}\n data-sk-part=\"spot-question\"\n data-sk-spot={isActive ? 'active' : filled ? 'filled' : 'idle'}\n className={\n 'sk-spot__q' +\n (view.fields.length > 1 ? ' sk-spot__q--sub' : '') +\n ` sk-form__field-wrapper sk-form__field-wrapper--${f.width || 'full'}`\n }\n style={\n shakeN > 0\n ? {\n animation: `${shakeN % 2 ? 'sk-spot-shake-a' : 'sk-spot-shake-b'} .38s ease`,\n }\n : undefined\n }\n >\n <FormField\n controls={fieldControls}\n field={f}\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 />\n </div>\n )\n })}\n </div>\n </div>\n </div>\n\n {/* What the form says back — with its check and a way back. */}\n <div\n className=\"sk-stage__collapse\"\n style={{ gridTemplateRows: isCollapsed ? '1fr' : '0fr' }}\n >\n <div inert={isCollapsed ? undefined : true}>\n {sentence && (\n <div className=\"sk-spot__sentence\" data-sk-part=\"spot-sentence\">\n <SummaryTick />\n <span className=\"sk-spot__sentence-text\">{sentence}</span>\n <button\n type=\"button\"\n className=\"sk-spot__sentence-edit\"\n data-sk-part=\"spot-sentence-edit\"\n aria-label={`Edit ${view.fields.map((f) => f.label).join(', ')}`}\n onClick={() => reopenGroup(viewIndex)}\n >\n <PencilIcon />\n </button>\n </div>\n )}\n </div>\n </div>\n </div>\n )\n })}\n </div>\n\n <div className=\"sk-form__actions\" style={{ justifyContent: 'flex-end' }}>\n <button\n type=\"submit\"\n className=\"sk-form__btn sk-form__btn--submit\"\n data-sk-part=\"spot-submit\"\n disabled={isSubmitting}\n >\n {isSubmitting ? 'Submitting...' : config.submit_button_text}\n </button>\n </div>\n\n {submitError && (\n <p\n className=\"sk-form__submit-error\"\n role=\"alert\"\n style={{ color: 'var(--sk-error, #dc2626)', fontSize: 14, marginTop: 12 }}\n >\n {submitError}\n </p>\n )}\n\n {honeypot}\n </form>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/forms/FormSpotlight.tsx"],"names":["stageFirstName","isEmptyValue","jsx","useFieldControls","useMemo","stageViews","useCallback","useState","useRef","useEffect","jsxs","StageStyles","stageEstimate","FormField","AUTO_ADVANCE_TYPES","SummaryTick"],"mappings":"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","file":"FormSpotlight-VTWP4X6H.js","sourcesContent":["'use client'\n\n/**\n * FormSpotlight — a professional form that CONVERSES back.\n *\n * At rest it is a normal form. The life:\n * - hovering a field expands it slightly; clicking keeps it expanded and a\n * GLOWING OUTLINE animates in around it\n * - the outline is ONE physical element: finishing a field and moving on,\n * the glow glides out of the old field and into the next (rect-tracked,\n * so it chases layout wherever the next field lives)\n * - a completed field earns its animated checkmark (the existing lock-in\n * tick + ring)\n * - when a whole row completes and you move on, the fields COLLAPSE INTO A\n * SENTENCE the form says back — \"Nice to meet you, Ramsey.\" /\n * \"We'll follow up at ramsey@… or 555‑0100.\" — with a drawn check and a\n * little edit button to reopen the row\n * - when the last requirement clears, the submit wakes (existing\n * [data-sk-ready] pop + breathe)\n *\n * Rows come from the classic grid's own math (stageViews): consecutive\n * half/third-width fields share a row, full-width fields stand alone,\n * chapters break rows.\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. Field index rides the existing step-tracking\n * pipe (totalSteps = question count) — form_analytics becomes a per-field\n * funnel with zero API changes.\n *\n * Construction rules: zero deps, one deduped style tag, data-sk-part on\n * everything, --sk-* theming, accents mix --sk-primary toward currentColor\n * (contrast law). Reduced motion collapses to instant states. SSR renders\n * the plain expanded form — the choreography arms only after interaction.\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 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\nconst NON_QUESTION_TYPES = ['heading', 'section_header', 'paragraph', 'hidden']\n/** Controls where the glow should wrap the whole wrapper, not one input. */\nconst MULTI_CONTROL_TYPES = ['radio', 'checkbox', 'rating', 'slider']\n\n// ============================================\n// Sentences — what the form says back (unit-tested)\n// ============================================\n\nfunction optionLabel(field: FormFieldType, value: unknown): string {\n const raw = Array.isArray(field.options) ? field.options : []\n const hit = raw.find(\n (o: any) => (typeof o === 'string' ? o : o?.value) === value,\n ) as any\n if (!hit) return String(value)\n return typeof hit === 'string' ? hit : hit.label || String(value)\n}\n\nfunction formatDateish(value: string): string | null {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value)\n if (!m) return null\n const MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December',\n ]\n const month = MONTHS[Number(m[2]) - 1]\n if (!month) return null\n return `${month} ${Number(m[3])}`\n}\n\n/** Render a configured completion message: {value}, {label}, {first_name},\n and {any_field_slug}. Unknown tokens resolve to '' rather than printing\n braces at the visitor. */\nexport function renderCompletionTemplate(\n template: string,\n field: FormFieldType,\n values: Record<string, unknown>,\n): string {\n const stringify = (v: unknown) =>\n Array.isArray(v) ? v.map(String).join(', ') : v === undefined || v === null ? '' : String(v)\n return template\n .replace(/\\{(\\w+)\\}/g, (_match, token: string) => {\n if (token === 'value') return stringify(values[field.slug])\n if (token === 'label') return field.label\n if (token === 'first_name') {\n const key = Object.keys(values).find((k) => /^first[_-]?name$/i.test(k))\n return (key ? stageFirstName(values[key]) : null) || ''\n }\n return stringify(values[token])\n })\n .replace(/\\s{2,}/g, ' ')\n .trim()\n}\n\n/**\n * The sentence a completed row collapses into. Warm, professional, specific.\n * Returns null when there is nothing worth saying (row left empty).\n *\n * A `completion_message` configured on any answered field in the row wins\n * over the built-in sentences — that is the Sonor-side override, so the copy\n * can be changed per form without a site deploy.\n */\nexport function groupSentence(\n fields: FormFieldType[],\n values: Record<string, unknown>,\n): string | null {\n const val = (f: FormFieldType) => values[f.slug]\n const answered = fields.filter((f) => !isEmptyValue(val(f)))\n if (answered.length === 0) return null\n\n // Author-configured copy wins, in field order.\n for (const f of answered) {\n const template = f.completion_message?.trim()\n if (template) {\n const rendered = renderCompletionTemplate(template, f, values)\n if (rendered) return rendered\n }\n }\n\n // Name row → the greeting.\n const firstNameField = fields.find((f) => /first[_-]?name|^fname$/i.test(f.slug))\n const anyNameField = fields.find(\n (f) => /(^|_|-)name($|_|-)/i.test(f.slug) || /name/i.test(f.slug),\n )\n if (firstNameField || anyNameField) {\n const source = firstNameField ?? anyNameField\n const name = stageFirstName(val(source!))\n if (name) return `Nice to meet you, ${name}.`\n }\n\n // Contact row → where the follow-up lands.\n const email = fields.find(\n (f) => f.field_type === 'email' && !isEmptyValue(val(f)),\n )\n const phone = fields.find(\n (f) => (f.field_type === 'phone' || f.field_type === 'tel') && !isEmptyValue(val(f)),\n )\n if (email && phone) return `We'll follow up at ${val(email)} or ${val(phone)}.`\n if (email) return `We'll follow up at ${val(email)}.`\n if (phone) return `We'll follow up at ${val(phone)}.`\n\n // Single-field rows by type.\n if (answered.length === 1) {\n const f = answered[0]\n const v = val(f)\n switch (f.field_type) {\n case 'date':\n case 'datetime': {\n const pretty = formatDateish(String(v))\n if (pretty) return `Locked in for ${pretty}.`\n break\n }\n case 'select':\n case 'radio':\n return `${optionLabel(f, v)} it is.`\n case 'rating':\n return `${v} stars. Appreciated.`\n case 'textarea':\n return `Got it. Thanks for the detail.`\n case 'checkbox':\n if (Array.isArray(v))\n return `${v.map((x) => optionLabel(f, x)).join(', ')}. Noted.`\n if (v === true) return `${f.label}. Noted.`\n break\n default:\n break\n }\n }\n\n // Fallback: honest and plain.\n return answered\n .map((f) => {\n const v = val(f)\n return `${f.label}: ${Array.isArray(v) ? v.join(', ') : String(v)}`\n })\n .join(' · ')\n}\n\n// ============================================\n// Styles (deduped tag; head/pips/collapse mechanics come from StageStyles)\n// ============================================\n\nconst STYLE_ID = 'sk-spot-css'\n\nconst CSS = `\n@keyframes sk-spot-shake-a { 0%, 100% { transform: translateX(0) } 18% { transform: translateX(-9px) } 40% { transform: translateX(7px) } 62% { transform: translateX(-5px) } 82% { transform: translateX(3px) } }\n@keyframes sk-spot-shake-b { 0%, 100% { transform: translateX(0) } 18% { transform: translateX(-9px) } 40% { transform: translateX(7px) } 62% { transform: translateX(-5px) } 82% { transform: translateX(3px) } }\n@keyframes sk-spot-glow-breathe {\n 0%, 100% { box-shadow: 0 0 14px 0 color-mix(in srgb, var(--sk-primary, #2563eb) 45%, transparent) }\n 50% { box-shadow: 0 0 24px 2px color-mix(in srgb, var(--sk-primary, #2563eb) 60%, transparent) }\n}\n\n.sk-spot { position: relative; }\n\n/* ---- The glow: one ring that VISITS fields. Its position never animates —\n on every move a GHOST plays the exit at the old field WHILE the real ring\n plays its entrance at the new one. One seamless overlapping gesture, zero\n timers (immune to background throttling). ---- */\n/* Leaves WITH the field: the field it is leaving relaxes from its focused\n scale back to rest, so the ring shrinks by the same amount on the same\n curve instead of expanding away from it. */\n@keyframes sk-glow-out {\n 0% { opacity: 1; transform: scale(1);\n box-shadow: 0 0 14px 0 color-mix(in srgb, var(--sk-primary, #2563eb) 45%, transparent) }\n 100% { opacity: 0; transform: scale(.98);\n box-shadow: 0 0 6px 0 color-mix(in srgb, var(--sk-primary, #2563eb) 0%, transparent) }\n}\n/* Settles in rather than popping: a hair under resting size, no overshoot\n past it, and the halo rises straight to rest instead of flaring first. */\n@keyframes sk-glow-in {\n 0% { opacity: 0; transform: scale(.985);\n box-shadow: 0 0 6px 0 color-mix(in srgb, var(--sk-primary, #2563eb) 20%, transparent) }\n 100% { opacity: 1; transform: scale(1);\n box-shadow: 0 0 14px 0 color-mix(in srgb, var(--sk-primary, #2563eb) 45%, transparent) }\n}\n.sk-spot__glow, .sk-spot__glow-ghost {\n position: absolute; pointer-events: none; z-index: 2;\n border: 2px solid color-mix(in srgb, var(--sk-primary, #2563eb) 72%, currentColor);\n border-radius: calc(var(--sk-input-radius, 6px) + 4px);\n}\n.sk-spot__glow { opacity: 0; transition: none; }\n.sk-spot__glow[data-sk-on=\"true\"] {\n /* ease-out, not a spring — the ring arrives and settles, never bounces. */\n animation:\n sk-glow-in .38s cubic-bezier(.22,.8,.3,1) both,\n sk-spot-glow-breathe 2.2s ease-in-out .42s infinite;\n}\n/* Same duration and curve as the field's own transform transition below, so\n ring and field relax together rather than on separate clocks. */\n.sk-spot__glow-ghost { animation: sk-glow-out .3s cubic-bezier(.22,1,.36,1) both; }\n\n/* ---- Rows ---- */\n.sk-spot__groups { display: flex; flex-direction: column; }\n/* A collapsed row keeps the height it had as fields (set inline), and the\n sentence rides in the middle of that reserved space. */\n[data-sk-part=\"spot-group\"] { display: flex; flex-direction: column; justify-content: center; }\n/* Vertical clip only: the collapse animation needs the y-axis contained,\n but scaled labels and the glow must never lose their left edge. */\n.sk-spot .sk-stage__collapse > div { overflow: visible clip; }\n.sk-spot__rowfields { display: flex; flex-wrap: wrap; gap: 16px; padding: 4px 2px 6px; }\n.sk-spot__rowfields > * { flex: 1 1 100%; }\n@media (min-width: 560px) {\n .sk-spot__rowfields > .sk-spot__q--sub { flex: 1 1 0; min-width: 180px; }\n}\n\n/* ---- Fields: hover expands a touch; the active one holds it ---- */\n.sk-spot__q {\n position: relative;\n transition: transform .3s cubic-bezier(.22,1,.36,1), opacity .3s ease;\n}\n.sk-spot__q:hover { transform: scale(1.015); }\n.sk-spot__q[data-sk-spot=\"active\"] { transform: scale(1.02); z-index: 1; }\n.sk-spot--live .sk-spot__q[data-sk-spot=\"idle\"]:not(:hover) { opacity: .72; }\n.sk-spot__q .sk-form__label { transition: opacity .3s ease; }\n.sk-spot--live .sk-spot__q[data-sk-spot=\"filled\"] .sk-form__label { opacity: .75; }\n\n/* ---- Sentence rows: what the form says back ---- */\n/* Both layers cross-fade as the rows morph, so neither pops in or out. */\n.sk-spot__rowfields { opacity: 1; transition: opacity .3s ease .08s; }\n[data-sk-group-state=\"sentence\"] .sk-spot__rowfields { opacity: 0; transition-delay: 0s; }\n.sk-spot__sentence {\n display: flex; align-items: center; gap: 10px;\n padding: 12px 2px;\n opacity: 1; transition: opacity .3s ease .08s;\n}\n[data-sk-group-state=\"open\"] .sk-spot__sentence { opacity: 0; transition-delay: 0s; }\n.sk-spot__sentence-text { font-weight: 600; overflow-wrap: anywhere; }\n.sk-spot__sentence-edit {\n margin-left: auto; flex-shrink: 0;\n display: inline-flex; align-items: center; justify-content: center;\n width: 26px; height: 26px; border-radius: 50%;\n background: none; cursor: pointer; color: inherit;\n border: 1px solid color-mix(in srgb, currentColor 30%, transparent);\n opacity: .6;\n transition: opacity .15s ease, background-color .15s ease;\n}\n.sk-spot__sentence-edit:hover,\n.sk-spot__sentence-edit:focus-visible {\n opacity: 1;\n background: color-mix(in srgb, currentColor 10%, transparent);\n}\n\n/* ---- Finale: the submit gets room and presence. :where() keeps the\n specificity at zero so site button theming always wins. ---- */\n.sk-spot :where(.sk-form__actions) { margin-top: 28px; display: flex; justify-content: flex-end; }\n.sk-spot :where([data-sk-part=\"spot-submit\"]) {\n padding: 13px 30px; font-size: 1.05em; min-width: 200px; cursor: pointer;\n}\n@media (max-width: 560px) {\n .sk-spot :where([data-sk-part=\"spot-submit\"]) { width: 100%; }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .sk-spot__glow { animation: none !important; }\n .sk-spot__glow[data-sk-on=\"true\"] { opacity: 1;\n box-shadow: 0 0 14px 0 color-mix(in srgb, var(--sk-primary, #2563eb) 50%, transparent); }\n .sk-spot__glow-ghost { animation: none !important; opacity: 0; }\n .sk-spot__q { transition: none; animation: none !important; }\n .sk-spot__q:hover { transform: none; }\n .sk-spot__q[data-sk-spot=\"active\"] { transform: none; }\n .sk-spot__rowfields, .sk-spot__sentence { transition: none; }\n}\n`\n\nexport function SpotStyles() {\n return <style id={STYLE_ID} dangerouslySetInnerHTML={{ __html: CSS }} />\n}\n\nfunction PencilIcon() {\n return (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M17 3a2.85 2.85 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z\" />\n </svg>\n )\n}\n\n// ============================================\n// Component\n// ============================================\n\ninterface GlowRect {\n top: number\n left: number\n width: number\n height: number\n visible: boolean\n}\n\nexport function FormSpotlight({\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 // Rows from the classic grid's own math; conditional visibility live.\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 questions = useMemo(() => views.flatMap((v) => v.fields), [views])\n const questionCount = questions.length\n\n const groupOf = useCallback(\n (slug: string) => views.findIndex((v) => v.fields.some((f) => f.slug === slug)),\n [views],\n )\n\n const firstIncomplete = questions.findIndex((q) => !fieldIsComplete(q))\n const [activeSlug, setActiveSlug] = useState<string | null>(\n () => questions[Math.max(0, firstIncomplete)]?.slug ?? null,\n )\n // Choreography (glow, dimming, collapsing) arms only after interaction —\n // SSR and first paint are a calm, normal form.\n const [live, setLive] = useState(false)\n const [shakes, setShakes] = useState<Record<string, number>>({})\n const [collapsed, setCollapsed] = useState<Record<number, boolean>>({})\n const [glow, setGlow] = useState<GlowRect>({ top: 0, left: 0, width: 0, height: 0, visible: false })\n\n const formRef = useRef<HTMLFormElement | null>(null)\n const autoTimer = useRef<number | null>(null)\n\n const activeIndex = questions.findIndex((q) => q.slug === activeSlug)\n const activeGroup = activeSlug ? groupOf(activeSlug) : -1\n\n const groupComplete = useCallback(\n (view: StageView) =>\n view.fields.every(\n (f) => fieldIsComplete(f) || (!f.is_required && isEmptyValue(values[f.slug])),\n ) && view.fields.some((f) => !isEmptyValue(values[f.slug])),\n [fieldIsComplete, values],\n )\n\n const completeCount = questions.reduce((n, q) => n + (fieldIsComplete(q) ? 1 : 0), 0)\n const ready = momentum.total > 0 ? momentum.done >= momentum.total : true\n\n const clearAutoTimer = useCallback(() => {\n if (autoTimer.current !== null) {\n window.clearTimeout(autoTimer.current)\n autoTimer.current = null\n }\n }, [])\n useEffect(() => clearAutoTimer, [clearAutoTimer])\n\n // ---- The glow choreography: out on the old field, in on the new ----\n const measureRect = useCallback(\n (slug: string): Omit<GlowRect, 'visible'> | null => {\n const form = formRef.current\n if (!form) return null\n const wrapper = form.querySelector<HTMLElement>(`[data-sk-slug=\"${slug}\"]`)\n if (!wrapper) return null\n const field = questions.find((q) => q.slug === slug)\n const target = MULTI_CONTROL_TYPES.includes(field?.field_type || '')\n ? wrapper\n : wrapper.querySelector<HTMLElement>(\n 'input:not([data-sk-honeypot]), textarea, select, button',\n ) || wrapper\n const formRect = form.getBoundingClientRect()\n const rect = target.getBoundingClientRect()\n const PAD = 4\n return {\n top: rect.top - formRect.top - PAD,\n left: rect.left - formRect.left - PAD,\n width: rect.width + PAD * 2,\n height: rect.height + PAD * 2,\n }\n },\n [questions],\n )\n const measureRectRef = useRef(measureRect)\n measureRectRef.current = measureRect\n\n // The real ring (keyed by slug so its entrance replays per visit) + one\n // ghost slot replaying the exit at the rect the ring just left.\n const [glowOn, setGlowOn] = useState(false)\n const [ghost, setGhost] = useState<\n (Omit<GlowRect, 'visible'> & { key: number }) | null\n >(null)\n const ghostSeq = useRef(0)\n const glowStateRef = useRef({ on: false, rect: null as Omit<GlowRect, 'visible'> | null })\n\n useEffect(() => {\n if (!live) return\n const prev = glowStateRef.current\n const leave = () => {\n if (prev.on && prev.rect) {\n ghostSeq.current += 1\n setGhost({ ...prev.rect, key: ghostSeq.current })\n }\n }\n if (!activeSlug) {\n leave()\n setGlowOn(false)\n glowStateRef.current = { on: false, rect: null }\n return\n }\n const rect = measureRectRef.current(activeSlug)\n if (!rect) {\n leave()\n setGlowOn(false)\n glowStateRef.current = { on: false, rect: null }\n return\n }\n // Exit and entrance start the same frame — one seamless gesture.\n leave()\n setGlow({ ...rect, visible: true })\n setGlowOn(true)\n glowStateRef.current = { on: true, rect }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeSlug, live])\n\n // While resting on a field, follow layout reflow (rows collapsing above,\n // viewport resizes) with a position snap — never a cross-field slide.\n useEffect(() => {\n if (!live || typeof ResizeObserver === 'undefined') return\n const form = formRef.current\n if (!form) return\n const follow = () => {\n if (!glowStateRef.current.on) return\n const slug = activeSlugRef.current\n if (!slug) return\n const rect = measureRectRef.current(slug)\n if (rect) {\n setGlow({ ...rect, visible: true })\n glowStateRef.current = { on: true, rect }\n }\n }\n const ro = new ResizeObserver(follow)\n ro.observe(form)\n window.addEventListener('resize', follow)\n return () => {\n ro.disconnect()\n window.removeEventListener('resize', follow)\n }\n }, [live])\n\n // ---- Collapse rows into sentences once they're complete and left ----\n // The row's open height is captured first and held as a floor on the group,\n // so swapping fields for a sentence never shrinks the form box (and never\n // yanks the rest of the page upward mid-fill).\n const groupEls = useRef<Record<number, HTMLDivElement | null>>({})\n const [reserved, setReserved] = useState<Record<number, number>>({})\n useEffect(() => {\n if (!live) return\n const heights: Record<number, number> = {}\n setCollapsed((prev) => {\n let changed = false\n const next = { ...prev }\n views.forEach((view, i) => {\n if (i === activeGroup || prev[i]) return\n if (groupComplete(view) && groupSentence(view.fields, values)) {\n const height = groupEls.current[i]?.getBoundingClientRect().height\n if (height) heights[i] = height\n next[i] = true\n changed = true\n }\n })\n return changed ? next : prev\n })\n if (Object.keys(heights).length) {\n setReserved((prev) => ({ ...heights, ...prev }))\n }\n }, [activeGroup, live, views, groupComplete, values])\n\n const inputFor = useCallback((slug: string): HTMLElement | null => {\n return (\n formRef.current?.querySelector<HTMLElement>(\n `[data-sk-slug=\"${slug}\"] input:not([data-sk-honeypot]), [data-sk-slug=\"${slug}\"] textarea, [data-sk-slug=\"${slug}\"] select, [data-sk-slug=\"${slug}\"] button`,\n ) ?? null\n )\n }, [])\n\n const reopenGroup = useCallback(\n (index: number) => {\n setLive(true)\n setCollapsed((prev) => ({ ...prev, [index]: false }))\n const slug = views[index]?.fields[0]?.slug\n if (slug) {\n window.setTimeout(() => inputFor(slug)?.focus(), 120)\n const qIndex = questions.findIndex((q) => q.slug === slug)\n if (qIndex >= 0) trackStepChange(qIndex + 1)\n }\n },\n [views, questions, inputFor, trackStepChange],\n )\n\n /** Focus the next unanswered question after `from` (collapsed rows are\n complete by definition, so travel naturally skips them); with nothing\n left, land on the wake-lit submit. */\n const travelOnward = useCallback(\n (from: number) => {\n for (let i = from + 1; i < questions.length; i++) {\n if (!fieldIsComplete(questions[i])) {\n inputFor(questions[i].slug)?.focus()\n return\n }\n }\n for (let i = 0; i < from; i++) {\n if (!fieldIsComplete(questions[i])) {\n inputFor(questions[i].slug)?.focus()\n return\n }\n }\n setActiveSlug(null)\n formRef.current\n ?.querySelector<HTMLElement>('[data-sk-part=\"spot-submit\"]')\n ?.focus()\n },\n [questions, fieldIsComplete, inputFor],\n )\n\n const shake = useCallback((slug: string) => {\n setShakes((prev) => ({ ...prev, [slug]: (prev[slug] || 0) + 1 }))\n }, [])\n\n const advanceFrom = useCallback(\n (index: number) => {\n const q = questions[index]\n if (!q) return\n const error = validateField(q)\n if (error) {\n applyFieldError(q.slug, error)\n shake(q.slug)\n return\n }\n travelOnward(index)\n },\n [questions, validateField, applyFieldError, shake, travelOnward],\n )\n const advanceFromRef = useRef(advanceFrom)\n advanceFromRef.current = advanceFrom\n const activeIndexRef = useRef(activeIndex)\n activeIndexRef.current = activeIndex\n\n // Focus drives the spotlight. Native focusin (not React's synthetic focus\n // system): it works identically across React versions, portals, and\n // programmatic .focus() calls — the travel helpers depend on that.\n const activeSlugRef = useRef(activeSlug)\n activeSlugRef.current = activeSlug\n const questionsRef = useRef(questions)\n questionsRef.current = questions\n const trackStepChangeRef = useRef(trackStepChange)\n trackStepChangeRef.current = trackStepChange\n useEffect(() => {\n const form = formRef.current\n if (!form) return\n const onFocusIn = (e: FocusEvent) => {\n const wrapper = (e.target as HTMLElement | null)?.closest?.('[data-sk-slug]')\n const slug = wrapper?.getAttribute('data-sk-slug') ?? null\n setLive(true)\n if (slug && slug !== activeSlugRef.current) {\n setActiveSlug(slug)\n const index = questionsRef.current.findIndex((q) => q.slug === slug)\n if (index >= 0) trackStepChangeRef.current(index + 1)\n } else if (!slug) {\n setActiveSlug(null)\n }\n }\n form.addEventListener('focusin', onFocusIn)\n return () => form.removeEventListener('focusin', onFocusIn)\n }, [])\n\n const handleFieldChange = useCallback(\n (field: FormFieldType, soloAutoAdvance: boolean) => (value: unknown) => {\n setLive(true)\n setFieldValue(field.slug, value)\n if (soloAutoAdvance && !isEmptyValue(value)) {\n clearAutoTimer()\n autoTimer.current = window.setTimeout(() => {\n autoTimer.current = null\n if (activeIndexRef.current >= 0) advanceFromRef.current(activeIndexRef.current)\n }, 380)\n }\n },\n [setFieldValue, clearAutoTimer],\n )\n\n const travelInputs = useCallback((): HTMLElement[] => {\n const form = formRef.current\n if (!form) return []\n return questions\n .map((q) => inputFor(q.slug))\n .filter((el): el is HTMLElement => !!el)\n }, [questions, inputFor])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLFormElement>) => {\n const target = e.target as HTMLElement\n const tag = target.tagName\n const isField = tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT'\n if (!isField || activeIndex < 0) return\n\n if (e.key === 'Enter') {\n if (tag === 'TEXTAREA' && e.shiftKey) return\n e.preventDefault()\n advanceFrom(activeIndex)\n return\n }\n\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' || type === 'radio' || type === 'checkbox')\n return\n e.preventDefault()\n const inputs = travelInputs()\n const domIndex = inputs.indexOf(inputFor(questions[activeIndex].slug) as HTMLElement)\n if (e.key === 'ArrowDown') {\n const next = inputs[domIndex + 1]\n if (next) next.focus()\n else\n formRef.current\n ?.querySelector<HTMLElement>('[data-sk-part=\"spot-submit\"]')\n ?.focus()\n } else {\n const prev = inputs[domIndex - 1]\n if (prev) prev.focus()\n }\n }\n },\n [activeIndex, questions, advanceFrom, travelInputs, inputFor],\n )\n\n const handleSubmit = useCallback(\n (e: React.FormEvent) => {\n e.preventDefault()\n if (isSubmitting) return\n clearAutoTimer()\n void submit()\n },\n [isSubmitting, submit, clearAutoTimer],\n )\n\n // validateAll errors from a submit attempt: reopen the offending row if it\n // collapsed, sweep the glow there, shake.\n useEffect(() => {\n const offender = questions.find((q) => errors[q.slug])\n if (!offender) return\n const g = groupOf(offender.slug)\n if (g >= 0 && collapsed[g]) {\n setCollapsed((prev) => ({ ...prev, [g]: false }))\n window.setTimeout(() => inputFor(offender.slug)?.focus(), 120)\n shake(offender.slug)\n return\n }\n if (offender.slug !== activeSlug) {\n inputFor(offender.slug)?.focus()\n shake(offender.slug)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [errors])\n\n // Display-only fields (heading/paragraph) render standalone, in order.\n const firstFieldIdToView = useMemo(() => {\n const map = new Map<string, number>()\n views.forEach((v, i) => map.set(v.fields[0].id, i))\n return map\n }, [views])\n const renderedViews = new Set<number>()\n\n return (\n <form\n ref={formRef}\n className={`sk-form sk-spot ${live ? 'sk-spot--live ' : ''}${className || ''}`}\n data-sk-part=\"spotlight\"\n data-sk-state={isSubmitting ? 'submitting' : 'idle'}\n data-sk-ready={ready && momentum.total > 0 ? 'true' : undefined}\n onSubmit={handleSubmit}\n onKeyDown={handleKeyDown}\n >\n <StageStyles />\n <SpotStyles />\n\n {/* The glowing outline — it never belongs to a field, it VISITS. The\n ghost replays the exit at the old rect while the ring enters the\n new one: one seamless overlapping gesture. */}\n {ghost && (\n <span\n key={`ghost-${ghost.key}`}\n className=\"sk-spot__glow-ghost\"\n data-sk-part=\"spot-glow-ghost\"\n style={{ top: ghost.top, left: ghost.left, width: ghost.width, height: ghost.height }}\n onAnimationEnd={() =>\n setGhost((g) => (g && g.key === ghost.key ? null : g))\n }\n aria-hidden=\"true\"\n />\n )}\n <span\n key={`glow-${activeSlug || 'none'}`}\n className=\"sk-spot__glow\"\n data-sk-part=\"spot-glow\"\n data-sk-on={glowOn ? 'true' : undefined}\n style={{ top: glow.top, left: glow.left, width: glow.width, height: glow.height }}\n aria-hidden=\"true\"\n />\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={questionCount}\n aria-valuenow={completeCount}\n aria-valuetext={`${completeCount} of ${questionCount} answered`}\n >\n {questions.map((q, i) => (\n <span\n key={q.id}\n className=\"sk-stage__seg\"\n data-sk-lit={fieldIsComplete(q) ? '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={ready && momentum.total > 0 ? 'true' : undefined}\n aria-live=\"polite\"\n >\n {ready ? 'Ready' : `${completeCount} / ${questionCount}`}\n </span>\n </div>\n\n <div className=\"sk-spot__groups\" data-sk-part=\"spot-groups\">\n {(config.fields || []).map((field) => {\n if (!isFieldVisible(field)) return null\n if (NON_QUESTION_TYPES.includes(field.field_type)) {\n return (\n <FormField\n controls={fieldControls}\n key={field.id}\n field={field}\n value={values[field.slug]}\n onChange={(value) => setFieldValue(field.slug, value)}\n />\n )\n }\n const viewIndex = firstFieldIdToView.get(field.id)\n if (viewIndex === undefined || renderedViews.has(viewIndex)) return null\n renderedViews.add(viewIndex)\n const view = views[viewIndex]\n const isCollapsed = collapsed[viewIndex] === true\n // Computed in both states, never gated on isCollapsed: unmounting\n // the sentence on reopen made it vanish instantly while its layer\n // was still animating closed. Kept mounted, it collapses WITH the\n // layer and the fields bloom in over it.\n const sentence = groupSentence(view.fields, values)\n\n return (\n <div\n key={view.fields[0].id}\n ref={(el) => {\n groupEls.current[viewIndex] = el\n }}\n data-sk-part=\"spot-group\"\n data-sk-group-state={isCollapsed ? 'sentence' : 'open'}\n // Held in BOTH states, not just while collapsed: the open row\n // is exactly this tall anyway, so keeping the floor means the\n // box never changes height — collapsing to a sentence and\n // reopening to fields are both pure crossfades, with no jump\n // at either end.\n style={\n reserved[viewIndex] ? { minHeight: reserved[viewIndex] } : undefined\n }\n >\n {/* The row of fields — collapses away once it has been said. */}\n <div\n className=\"sk-stage__collapse\"\n style={{ gridTemplateRows: isCollapsed ? '0fr' : '1fr' }}\n >\n <div inert={isCollapsed ? true : undefined}>\n <div className=\"sk-spot__rowfields\" data-sk-part=\"spot-rowfields\">\n {view.fields.map((f) => {\n const isActive = f.slug === activeSlug\n const filled = fieldIsComplete(f)\n const shakeN = shakes[f.slug] || 0\n return (\n <div\n key={f.id}\n data-sk-slug={f.slug}\n data-sk-part=\"spot-question\"\n data-sk-spot={isActive ? 'active' : filled ? 'filled' : 'idle'}\n className={\n 'sk-spot__q' +\n (view.fields.length > 1 ? ' sk-spot__q--sub' : '') +\n ` sk-form__field-wrapper sk-form__field-wrapper--${f.width || 'full'}`\n }\n style={\n shakeN > 0\n ? {\n animation: `${shakeN % 2 ? 'sk-spot-shake-a' : 'sk-spot-shake-b'} .38s ease`,\n }\n : undefined\n }\n >\n <FormField\n controls={fieldControls}\n field={f}\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 />\n </div>\n )\n })}\n </div>\n </div>\n </div>\n\n {/* What the form says back — with its check and a way back. */}\n <div\n className=\"sk-stage__collapse\"\n style={{ gridTemplateRows: isCollapsed ? '1fr' : '0fr' }}\n >\n <div inert={isCollapsed ? undefined : true}>\n {sentence && (\n <div className=\"sk-spot__sentence\" data-sk-part=\"spot-sentence\">\n <SummaryTick />\n <span className=\"sk-spot__sentence-text\">{sentence}</span>\n <button\n type=\"button\"\n className=\"sk-spot__sentence-edit\"\n data-sk-part=\"spot-sentence-edit\"\n aria-label={`Edit ${view.fields.map((f) => f.label).join(', ')}`}\n onClick={() => reopenGroup(viewIndex)}\n >\n <PencilIcon />\n </button>\n </div>\n )}\n </div>\n </div>\n </div>\n )\n })}\n </div>\n\n <div className=\"sk-form__actions\" style={{ justifyContent: 'flex-end' }}>\n <button\n type=\"submit\"\n className=\"sk-form__btn sk-form__btn--submit\"\n data-sk-part=\"spot-submit\"\n disabled={isSubmitting}\n >\n {isSubmitting ? 'Submitting...' : config.submit_button_text}\n </button>\n </div>\n\n {submitError && (\n <p\n className=\"sk-form__submit-error\"\n role=\"alert\"\n style={{ color: 'var(--sk-error, #dc2626)', fontSize: 14, marginTop: 12 }}\n >\n {submitError}\n </p>\n )}\n\n {honeypot}\n </form>\n )\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { StageStyles, SummaryTick } from './chunk-WSPGXSBU.mjs';
|
|
3
|
-
import { stageFirstName, isEmptyValue, useFieldControls, stageViews, stageEstimate, AUTO_ADVANCE_TYPES } from './chunk-
|
|
3
|
+
import { stageFirstName, isEmptyValue, useFieldControls, stageViews, stageEstimate, AUTO_ADVANCE_TYPES } from './chunk-YXZTCBS7.mjs';
|
|
4
4
|
import { FormField } from './chunk-LB7LHVWI.mjs';
|
|
5
5
|
import './chunk-BEXTDHO4.mjs';
|
|
6
6
|
import { useMemo, useCallback, useState, useRef, useEffect } from 'react';
|
|
@@ -748,5 +748,5 @@ function FormSpotlight({
|
|
|
748
748
|
}
|
|
749
749
|
|
|
750
750
|
export { FormSpotlight, SpotStyles, groupSentence, renderCompletionTemplate };
|
|
751
|
-
//# sourceMappingURL=FormSpotlight-
|
|
752
|
-
//# sourceMappingURL=FormSpotlight-
|
|
751
|
+
//# sourceMappingURL=FormSpotlight-VZPPMBJU.mjs.map
|
|
752
|
+
//# sourceMappingURL=FormSpotlight-VZPPMBJU.mjs.map
|