@sonordev/site-kit 4.2.4 → 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 +20 -3
- package/dist/AnalyticsProvider-7AR6JHXJ.js +31 -0
- package/dist/{AnalyticsProvider-LFSSF7MQ.js.map → AnalyticsProvider-7AR6JHXJ.js.map} +1 -1
- package/dist/AnalyticsProvider-VWYCBDBH.mjs +10 -0
- package/dist/{AnalyticsProvider-HVPZPHZI.mjs.map → AnalyticsProvider-VWYCBDBH.mjs.map} +1 -1
- package/dist/ChatWidget-CIDC64OF.js +20 -0
- package/dist/{ChatWidget-RFVIYV5C.js.map → ChatWidget-CIDC64OF.js.map} +1 -1
- package/dist/ChatWidget-XZQXPCLI.mjs +11 -0
- package/dist/{ChatWidget-7E4PLIYQ.mjs.map → ChatWidget-XZQXPCLI.mjs.map} +1 -1
- package/dist/EngageWidget-27RJHFFZ.js +18 -0
- package/dist/{EngageWidget-LPMSXVT6.js.map → EngageWidget-27RJHFFZ.js.map} +1 -1
- package/dist/EngageWidget-RDX5XJ3V.mjs +9 -0
- package/dist/{EngageWidget-N7EQGSSL.mjs.map → EngageWidget-RDX5XJ3V.mjs.map} +1 -1
- package/dist/{FileField-Y7NOLT27.js → FileField-ASOR3XG5.js} +6 -6
- package/dist/{FileField-Y7NOLT27.js.map → FileField-ASOR3XG5.js.map} +1 -1
- package/dist/{FileField-AS6TUTXA.mjs → FileField-HSPQLACF.mjs} +5 -5
- package/dist/{FileField-AS6TUTXA.mjs.map → FileField-HSPQLACF.mjs.map} +1 -1
- package/dist/{FormSpotlight-RMYOXT2T.js → FormSpotlight-VTWP4X6H.js} +15 -15
- package/dist/{FormSpotlight-RMYOXT2T.js.map → FormSpotlight-VTWP4X6H.js.map} +1 -1
- package/dist/{FormSpotlight-I6FEUYAA.mjs → FormSpotlight-VZPPMBJU.mjs} +3 -3
- package/dist/{FormSpotlight-I6FEUYAA.mjs.map → FormSpotlight-VZPPMBJU.mjs.map} +1 -1
- package/dist/{FormStage-44OWEWZM.js → FormStage-DUCY4VGI.js} +13 -13
- package/dist/{FormStage-44OWEWZM.js.map → FormStage-DUCY4VGI.js.map} +1 -1
- package/dist/{FormStage-G3MUJMTC.mjs → FormStage-MTUODSRC.mjs} +3 -3
- package/dist/{FormStage-G3MUJMTC.mjs.map → FormStage-MTUODSRC.mjs.map} +1 -1
- package/dist/ManagedForm-6MTTWEER.js +23 -0
- package/dist/{ManagedForm-YC6WLYVJ.js.map → ManagedForm-6MTTWEER.js.map} +1 -1
- package/dist/ManagedForm-GKCCHPIX.mjs +14 -0
- package/dist/{ManagedForm-LVBNVUZE.mjs.map → ManagedForm-GKCCHPIX.mjs.map} +1 -1
- package/dist/{SignalCore-AW5VDA4Y.js → SignalCore-HWTGSUMC.js} +11 -11
- package/dist/{SignalCore-AW5VDA4Y.js.map → SignalCore-HWTGSUMC.js.map} +1 -1
- package/dist/{SignalCore-DYBIG4JP.mjs → SignalCore-TG3G3VYI.mjs} +5 -5
- package/dist/{SignalCore-DYBIG4JP.mjs.map → SignalCore-TG3G3VYI.mjs.map} +1 -1
- package/dist/SitemapSync-62VTFZDI.mjs +8 -0
- package/dist/{SitemapSync-2JJOGL7D.mjs.map → SitemapSync-62VTFZDI.mjs.map} +1 -1
- package/dist/SitemapSync-PQMQAZMH.js +17 -0
- package/dist/{SitemapSync-S54TSZLM.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-LSNIDSLQ.js → chunk-22UZYZKI.js} +18 -18
- package/dist/{chunk-LSNIDSLQ.js.map → chunk-22UZYZKI.js.map} +1 -1
- package/dist/{chunk-KPSESCYA.js → chunk-2MAYXWJI.js} +15 -15
- package/dist/{chunk-KPSESCYA.js.map → chunk-2MAYXWJI.js.map} +1 -1
- package/dist/{chunk-2MFLOK2I.js → chunk-3FYSBRMT.js} +3 -3
- package/dist/{chunk-2MFLOK2I.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-KDWKSL7U.js → chunk-3YW4TAK2.js} +9 -9
- package/dist/{chunk-KDWKSL7U.js.map → chunk-3YW4TAK2.js.map} +1 -1
- package/dist/{chunk-ZJNIM4GQ.js → chunk-3ZWY6S4V.js} +15 -15
- package/dist/{chunk-ZJNIM4GQ.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-CPJA5XTO.mjs → chunk-5Z44EOL6.mjs} +4 -4
- package/dist/{chunk-CPJA5XTO.mjs.map → chunk-5Z44EOL6.mjs.map} +1 -1
- package/dist/{chunk-33OSUHPZ.mjs → chunk-6726TSBB.mjs} +4 -4
- package/dist/{chunk-33OSUHPZ.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-RH5WIBIA.js → chunk-7M7LNHVD.js} +7 -7
- package/dist/{chunk-RH5WIBIA.js.map → chunk-7M7LNHVD.js.map} +1 -1
- package/dist/{chunk-6ZQFCZPW.mjs → chunk-ACAMCJJQ.mjs} +3 -3
- package/dist/{chunk-6ZQFCZPW.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-XWBQLPTZ.mjs → chunk-AVFXLKIP.mjs} +4 -4
- package/dist/{chunk-XWBQLPTZ.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-OIY5O3SE.js → chunk-BL26HJKE.js} +8 -8
- package/dist/{chunk-OIY5O3SE.js.map → chunk-BL26HJKE.js.map} +1 -1
- package/dist/{chunk-XLD6K3BV.mjs → chunk-BW6DSJEJ.mjs} +4 -4
- package/dist/{chunk-XLD6K3BV.mjs.map → chunk-BW6DSJEJ.mjs.map} +1 -1
- package/dist/{chunk-SYR7YSB2.mjs → chunk-CCGFWAPD.mjs} +3 -3
- package/dist/{chunk-SYR7YSB2.mjs.map → chunk-CCGFWAPD.mjs.map} +1 -1
- package/dist/{chunk-HP7V2DI3.mjs → chunk-CJTU5EUQ.mjs} +4 -4
- package/dist/{chunk-HP7V2DI3.mjs.map → chunk-CJTU5EUQ.mjs.map} +1 -1
- package/dist/{chunk-A7O7IWL7.js → chunk-DDP6XUF5.js} +3 -3
- package/dist/{chunk-A7O7IWL7.js.map → chunk-DDP6XUF5.js.map} +1 -1
- package/dist/{chunk-UHVII7W7.mjs → chunk-E637QPCS.mjs} +3 -3
- package/dist/{chunk-UHVII7W7.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-4JVFWTER.js.map → chunk-GFMUUALQ.js.map} +1 -1
- package/dist/{chunk-5K2CX5LK.js → chunk-HSPDHVSJ.js} +6 -6
- package/dist/{chunk-5K2CX5LK.js.map → chunk-HSPDHVSJ.js.map} +1 -1
- package/dist/{chunk-BX6FFL2Y.js → chunk-HXHDOIV6.js} +5 -5
- package/dist/{chunk-BX6FFL2Y.js.map → chunk-HXHDOIV6.js.map} +1 -1
- package/dist/{chunk-YHGMM2XF.js → chunk-IM4OVQ4O.js} +14 -14
- package/dist/{chunk-YHGMM2XF.js.map → chunk-IM4OVQ4O.js.map} +1 -1
- package/dist/{chunk-UVRB4SQU.mjs → chunk-ISILFNCI.mjs} +3 -3
- package/dist/{chunk-UVRB4SQU.mjs.map → chunk-ISILFNCI.mjs.map} +1 -1
- package/dist/{chunk-E3F6OOVQ.mjs → chunk-JEEWKAAY.mjs} +3 -3
- package/dist/{chunk-E3F6OOVQ.mjs.map → chunk-JEEWKAAY.mjs.map} +1 -1
- package/dist/{chunk-BJW6YR6W.mjs → chunk-JPHPRD4Z.mjs} +3 -3
- package/dist/{chunk-BJW6YR6W.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-ARFWE2EL.js → chunk-KI6LGZYL.js} +14 -14
- package/dist/{chunk-ARFWE2EL.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-2MLIU6OJ.mjs → chunk-LHQ5IEFS.mjs} +4 -4
- package/dist/{chunk-2MLIU6OJ.mjs.map → chunk-LHQ5IEFS.mjs.map} +1 -1
- package/dist/{chunk-V3HJLXAI.mjs → chunk-LYOM356F.mjs} +3 -3
- package/dist/{chunk-V3HJLXAI.mjs.map → chunk-LYOM356F.mjs.map} +1 -1
- package/dist/{chunk-C6HDI464.js → chunk-M5ZCJ34F.js} +14 -14
- package/dist/{chunk-C6HDI464.js.map → chunk-M5ZCJ34F.js.map} +1 -1
- package/dist/{chunk-LUXCT2NU.js → chunk-MIYP7WFZ.js} +4 -4
- package/dist/{chunk-LUXCT2NU.js.map → chunk-MIYP7WFZ.js.map} +1 -1
- package/dist/{chunk-2XLWCYB3.js → chunk-MPL42FJL.js} +12 -12
- package/dist/{chunk-2XLWCYB3.js.map → chunk-MPL42FJL.js.map} +1 -1
- package/dist/{chunk-C6CNCDIN.mjs → chunk-MTKE7ASR.mjs} +3 -3
- package/dist/{chunk-C6CNCDIN.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-SSRQHRZB.mjs → chunk-OAOT72JI.mjs} +8 -8
- package/dist/{chunk-SSRQHRZB.mjs.map → chunk-OAOT72JI.mjs.map} +1 -1
- package/dist/{chunk-UBSZ466T.mjs → chunk-PK43IK7S.mjs} +3 -3
- package/dist/{chunk-UBSZ466T.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-EFMPOC6L.mjs.map → chunk-Q3VBSR4M.mjs.map} +1 -1
- package/dist/{chunk-QQCOIGLN.js → chunk-QC6EOISZ.js} +8 -8
- package/dist/{chunk-QQCOIGLN.js.map → chunk-QC6EOISZ.js.map} +1 -1
- package/dist/{chunk-BDDTZJKC.js → chunk-QIJIOKNT.js} +4 -4
- package/dist/{chunk-BDDTZJKC.js.map → chunk-QIJIOKNT.js.map} +1 -1
- package/dist/{chunk-XKBADVXN.mjs → chunk-RJBW2JFO.mjs} +3 -3
- package/dist/{chunk-XKBADVXN.mjs.map → chunk-RJBW2JFO.mjs.map} +1 -1
- package/dist/{chunk-FSSVIYQ7.mjs → chunk-RPLZIPTB.mjs} +3 -3
- package/dist/{chunk-FSSVIYQ7.mjs.map → chunk-RPLZIPTB.mjs.map} +1 -1
- package/dist/{chunk-YDOWCCE2.mjs → chunk-RRAUM373.mjs} +4 -4
- package/dist/{chunk-YDOWCCE2.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-L5GUV4M7.mjs → chunk-SMCNQWEU.mjs} +7 -7
- package/dist/{chunk-L5GUV4M7.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-NK6K4VHD.js → chunk-ST7YQMYN.js} +4 -4
- package/dist/{chunk-NK6K4VHD.js.map → chunk-ST7YQMYN.js.map} +1 -1
- package/dist/{chunk-NB4MK2Q5.js → chunk-SWIKKSKL.js} +3 -2
- package/dist/chunk-SWIKKSKL.js.map +1 -0
- package/dist/{chunk-ICJ7EU4Z.js → chunk-U2V6WHKY.js} +7 -7
- package/dist/{chunk-ICJ7EU4Z.js.map → chunk-U2V6WHKY.js.map} +1 -1
- package/dist/{chunk-JHOMOLZA.js → chunk-U7WGZOJY.js} +12 -12
- package/dist/{chunk-JHOMOLZA.js.map → chunk-U7WGZOJY.js.map} +1 -1
- package/dist/{chunk-U7L7FW3K.js → chunk-UE537WQU.js} +4 -4
- package/dist/{chunk-U7L7FW3K.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-GU5OTUQS.mjs → chunk-VS67QHNX.mjs} +3 -3
- package/dist/{chunk-GU5OTUQS.mjs.map → chunk-VS67QHNX.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-YZ6UYIXD.js → chunk-Y5SN5HTO.js} +3 -3
- package/dist/{chunk-YZ6UYIXD.js.map → chunk-Y5SN5HTO.js.map} +1 -1
- package/dist/{chunk-WX6VKFHW.mjs → chunk-YLZNSSNI.mjs} +4 -4
- package/dist/{chunk-WX6VKFHW.mjs.map → chunk-YLZNSSNI.mjs.map} +1 -1
- package/dist/{chunk-ULV3DZ27.mjs → chunk-YXZTCBS7.mjs} +3 -3
- package/dist/{chunk-ULV3DZ27.mjs.map → chunk-YXZTCBS7.mjs.map} +1 -1
- package/dist/{chunk-NI7OY4FW.mjs → chunk-ZN4HBK5C.mjs} +3 -2
- package/dist/chunk-ZN4HBK5C.mjs.map +1 -0
- package/dist/{chunk-CLD3IE6D.js → chunk-ZZV4EWMF.js} +5 -5
- package/dist/{chunk-CLD3IE6D.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 +5 -5
- package/dist/client/index.mjs +4 -4
- 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 +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/index.js +21 -21
- package/dist/forms/index.mjs +10 -10
- 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 +9 -9
- package/dist/layout/client.mjs +8 -8
- package/dist/layout/index.js +13 -13
- package/dist/layout/index.mjs +10 -10
- 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/mcp/WebMcpTools.d.ts +60 -0
- package/dist/mcp/WebMcpTools.d.ts.map +1 -0
- package/dist/mcp/client.d.ts +9 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +132 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/client.mjs +129 -0
- package/dist/mcp/client.mjs.map +1 -0
- package/dist/mcp/declarative.d.ts +77 -0
- package/dist/mcp/declarative.d.ts.map +1 -0
- package/dist/mcp/handlers.d.ts +92 -0
- package/dist/mcp/handlers.d.ts.map +1 -0
- package/dist/mcp/index.d.ts +29 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +537 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/index.mjs +509 -0
- package/dist/mcp/index.mjs.map +1 -0
- package/dist/mcp/protocol.d.ts +140 -0
- package/dist/mcp/protocol.d.ts.map +1 -0
- package/dist/mcp/protocol.test.d.ts +2 -0
- package/dist/mcp/protocol.test.d.ts.map +1 -0
- package/dist/mcp/serverCard.d.ts +77 -0
- package/dist/mcp/serverCard.d.ts.map +1 -0
- package/dist/mcp/types.d.ts +154 -0
- package/dist/mcp/types.d.ts.map +1 -0
- 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/seo-pages/contract.js +6 -6
- package/dist/seo-pages/contract.mjs +2 -2
- 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 +5 -2
- 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/sites/contract.js +9 -9
- package/dist/sites/contract.mjs +2 -2
- package/dist/sites/normalize.d.ts +2 -1
- package/dist/sites/normalize.d.ts.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 +19 -4
- package/dist/AnalyticsProvider-HVPZPHZI.mjs +0 -10
- package/dist/AnalyticsProvider-LFSSF7MQ.js +0 -31
- package/dist/ChatWidget-7E4PLIYQ.mjs +0 -11
- package/dist/ChatWidget-RFVIYV5C.js +0 -20
- package/dist/EngageWidget-LPMSXVT6.js +0 -18
- package/dist/EngageWidget-N7EQGSSL.mjs +0 -9
- package/dist/ManagedForm-LVBNVUZE.mjs +0 -14
- package/dist/ManagedForm-YC6WLYVJ.js +0 -23
- package/dist/SitemapSync-2JJOGL7D.mjs +0 -8
- package/dist/SitemapSync-S54TSZLM.js +0 -17
- package/dist/chunk-4JVFWTER.js +0 -8
- package/dist/chunk-77CIIDE6.js.map +0 -1
- package/dist/chunk-EFMPOC6L.mjs +0 -6
- package/dist/chunk-GC3BC6HQ.js.map +0 -1
- package/dist/chunk-KRARQ2ZF.mjs.map +0 -1
- package/dist/chunk-NB4MK2Q5.js.map +0 -1
- package/dist/chunk-NI7OY4FW.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-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
package/README.md
CHANGED
|
@@ -38,14 +38,22 @@ export default function RootLayout({ children }: { children: React.ReactNode })
|
|
|
38
38
|
|
|
39
39
|
`SiteKitLayout` is an RSC-compatible async Server Component that auto-composes: analytics tracking, Engage widgets, favicons, managed scripts, and sitemap sync. No client-side provider wrapping needed.
|
|
40
40
|
|
|
41
|
-
**
|
|
41
|
+
**Proxy (optional but recommended):**
|
|
42
42
|
|
|
43
43
|
```ts
|
|
44
|
-
//
|
|
45
|
-
import {
|
|
46
|
-
|
|
47
|
-
export default
|
|
48
|
-
|
|
44
|
+
// proxy.ts
|
|
45
|
+
import { createProxy } from '@sonordev/site-kit/proxy'
|
|
46
|
+
|
|
47
|
+
export default createProxy()
|
|
48
|
+
|
|
49
|
+
// Inlined on purpose: Next statically parses `config.matcher` at build time
|
|
50
|
+
// and rejects an imported value. `siteKitMatcher` is a reference value to
|
|
51
|
+
// copy from, never a binding to export.
|
|
52
|
+
export const config = {
|
|
53
|
+
matcher: [
|
|
54
|
+
'/((?!_next/static|_next/image|favicon\\.ico|.*\\.(?:ico|png|jpg|jpeg|gif|webp|svg|woff2?)$).*)',
|
|
55
|
+
],
|
|
56
|
+
}
|
|
49
57
|
```
|
|
50
58
|
|
|
51
59
|
Handles Portal-managed redirects, security headers, and AI discovery headers.
|
package/agent-manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"package": "@sonordev/site-kit",
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.3.1",
|
|
5
5
|
"description": "Machine-readable manifest for coding agents integrating a site with Sonor. See AGENTS.md (shipped) and docs/SITE-KIT-AGENT-NATIVE.md.",
|
|
6
6
|
"env": {
|
|
7
7
|
"required": [
|
|
@@ -239,6 +239,16 @@
|
|
|
239
239
|
"side": "server",
|
|
240
240
|
"purpose": "Pure LLM/GEO sanitizers + contract version — imported by the Nest APIs."
|
|
241
241
|
},
|
|
242
|
+
{
|
|
243
|
+
"name": "mcp",
|
|
244
|
+
"import": "@sonordev/site-kit/mcp",
|
|
245
|
+
"side": "unknown"
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"name": "mcp/client",
|
|
249
|
+
"import": "@sonordev/site-kit/mcp/client",
|
|
250
|
+
"side": "unknown"
|
|
251
|
+
},
|
|
242
252
|
{
|
|
243
253
|
"name": "slots",
|
|
244
254
|
"import": "@sonordev/site-kit/slots",
|
|
@@ -301,12 +311,19 @@
|
|
|
301
311
|
"primary": true,
|
|
302
312
|
"purpose": "SiteKitLayout — the root integration point. Wrap {children}. Reads SONOR_API_KEY server-side."
|
|
303
313
|
},
|
|
314
|
+
{
|
|
315
|
+
"name": "proxy",
|
|
316
|
+
"import": "@sonordev/site-kit/proxy",
|
|
317
|
+
"side": "server",
|
|
318
|
+
"purpose": "createProxy + security headers, exported from proxy.ts. Next 16 renamed the middleware file convention to proxy.",
|
|
319
|
+
"caution": "`export const config = siteKitMatcher` is a BUILD ERROR — Next statically parses config.matcher and rejects imported values, so inline the array. Do not add a `runtime` export: Proxy defaults to Node and the option throws in proxy files. On Netlify, a Node-runtime middleware silently does not run."
|
|
320
|
+
},
|
|
304
321
|
{
|
|
305
322
|
"name": "middleware",
|
|
306
323
|
"import": "@sonordev/site-kit/middleware",
|
|
307
324
|
"side": "server",
|
|
308
|
-
"purpose": "
|
|
309
|
-
"caution": "
|
|
325
|
+
"purpose": "DEPRECATED alias of the proxy module — identical exports, same built file. Use @sonordev/site-kit/proxy.",
|
|
326
|
+
"caution": "Kept so the 100+ sites already importing it keep building. New code should import @sonordev/site-kit/proxy and call createProxy."
|
|
310
327
|
},
|
|
311
328
|
{
|
|
312
329
|
"name": "manifest",
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkIM4OVQ4O_js = require('./chunk-IM4OVQ4O.js');
|
|
4
|
+
require('./chunk-HMFFAUCD.js');
|
|
5
|
+
require('./chunk-RC4WWQXR.js');
|
|
6
|
+
require('./chunk-VJMPIRSD.js');
|
|
7
|
+
require('./chunk-3ZWY6S4V.js');
|
|
8
|
+
require('./chunk-ST7YQMYN.js');
|
|
9
|
+
require('./chunk-GFMUUALQ.js');
|
|
10
|
+
require('./chunk-SNAQBZPT.js');
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
Object.defineProperty(exports, "AnalyticsProvider", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function () { return chunkIM4OVQ4O_js.AnalyticsProvider; }
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "useAnalytics", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () { return chunkIM4OVQ4O_js.useAnalytics; }
|
|
21
|
+
});
|
|
22
|
+
Object.defineProperty(exports, "useAnalyticsOptional", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
get: function () { return chunkIM4OVQ4O_js.useAnalyticsOptional; }
|
|
25
|
+
});
|
|
26
|
+
Object.defineProperty(exports, "useTrackEvent", {
|
|
27
|
+
enumerable: true,
|
|
28
|
+
get: function () { return chunkIM4OVQ4O_js.useTrackEvent; }
|
|
29
|
+
});
|
|
30
|
+
//# sourceMappingURL=AnalyticsProvider-7AR6JHXJ.js.map
|
|
31
|
+
//# sourceMappingURL=AnalyticsProvider-7AR6JHXJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"AnalyticsProvider-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"AnalyticsProvider-7AR6JHXJ.js"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { AnalyticsProvider, useAnalytics, useAnalyticsOptional, useTrackEvent } from './chunk-ACAMCJJQ.mjs';
|
|
2
|
+
import './chunk-3DPXOZAU.mjs';
|
|
3
|
+
import './chunk-ZZQAGCSI.mjs';
|
|
4
|
+
import './chunk-6EDVCUAG.mjs';
|
|
5
|
+
import './chunk-AVFXLKIP.mjs';
|
|
6
|
+
import './chunk-RPLZIPTB.mjs';
|
|
7
|
+
import './chunk-Q3VBSR4M.mjs';
|
|
8
|
+
import './chunk-BEXTDHO4.mjs';
|
|
9
|
+
//# sourceMappingURL=AnalyticsProvider-VWYCBDBH.mjs.map
|
|
10
|
+
//# sourceMappingURL=AnalyticsProvider-VWYCBDBH.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"AnalyticsProvider-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"AnalyticsProvider-VWYCBDBH.mjs"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk2MAYXWJI_js = require('./chunk-2MAYXWJI.js');
|
|
4
|
+
require('./chunk-MPL42FJL.js');
|
|
5
|
+
require('./chunk-QIJIOKNT.js');
|
|
6
|
+
require('./chunk-KHPJ3CEL.js');
|
|
7
|
+
require('./chunk-VJMPIRSD.js');
|
|
8
|
+
require('./chunk-3ZWY6S4V.js');
|
|
9
|
+
require('./chunk-ST7YQMYN.js');
|
|
10
|
+
require('./chunk-GFMUUALQ.js');
|
|
11
|
+
require('./chunk-SNAQBZPT.js');
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
Object.defineProperty(exports, "ChatWidget", {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () { return chunk2MAYXWJI_js.ChatWidget; }
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=ChatWidget-CIDC64OF.js.map
|
|
20
|
+
//# sourceMappingURL=ChatWidget-CIDC64OF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"ChatWidget-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"ChatWidget-CIDC64OF.js"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { ChatWidget } from './chunk-BW6DSJEJ.mjs';
|
|
2
|
+
import './chunk-6726TSBB.mjs';
|
|
3
|
+
import './chunk-JEEWKAAY.mjs';
|
|
4
|
+
import './chunk-TMVKRQGJ.mjs';
|
|
5
|
+
import './chunk-6EDVCUAG.mjs';
|
|
6
|
+
import './chunk-AVFXLKIP.mjs';
|
|
7
|
+
import './chunk-RPLZIPTB.mjs';
|
|
8
|
+
import './chunk-Q3VBSR4M.mjs';
|
|
9
|
+
import './chunk-BEXTDHO4.mjs';
|
|
10
|
+
//# sourceMappingURL=ChatWidget-XZQXPCLI.mjs.map
|
|
11
|
+
//# sourceMappingURL=ChatWidget-XZQXPCLI.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"ChatWidget-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"ChatWidget-XZQXPCLI.mjs"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkHSPDHVSJ_js = require('./chunk-HSPDHVSJ.js');
|
|
4
|
+
require('./chunk-RC4WWQXR.js');
|
|
5
|
+
require('./chunk-VJMPIRSD.js');
|
|
6
|
+
require('./chunk-3ZWY6S4V.js');
|
|
7
|
+
require('./chunk-ST7YQMYN.js');
|
|
8
|
+
require('./chunk-GFMUUALQ.js');
|
|
9
|
+
require('./chunk-SNAQBZPT.js');
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
Object.defineProperty(exports, "EngageWidget", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
get: function () { return chunkHSPDHVSJ_js.EngageWidget; }
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=EngageWidget-27RJHFFZ.js.map
|
|
18
|
+
//# sourceMappingURL=EngageWidget-27RJHFFZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"EngageWidget-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"EngageWidget-27RJHFFZ.js"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { EngageWidget } from './chunk-5Z44EOL6.mjs';
|
|
2
|
+
import './chunk-ZZQAGCSI.mjs';
|
|
3
|
+
import './chunk-6EDVCUAG.mjs';
|
|
4
|
+
import './chunk-AVFXLKIP.mjs';
|
|
5
|
+
import './chunk-RPLZIPTB.mjs';
|
|
6
|
+
import './chunk-Q3VBSR4M.mjs';
|
|
7
|
+
import './chunk-BEXTDHO4.mjs';
|
|
8
|
+
//# sourceMappingURL=EngageWidget-RDX5XJ3V.mjs.map
|
|
9
|
+
//# sourceMappingURL=EngageWidget-RDX5XJ3V.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"EngageWidget-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"EngageWidget-RDX5XJ3V.mjs"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
require('./chunk-
|
|
6
|
-
require('./chunk-
|
|
4
|
+
var chunk3ZWY6S4V_js = require('./chunk-3ZWY6S4V.js');
|
|
5
|
+
require('./chunk-ST7YQMYN.js');
|
|
6
|
+
require('./chunk-GFMUUALQ.js');
|
|
7
7
|
require('./chunk-SNAQBZPT.js');
|
|
8
8
|
var React = require('react');
|
|
9
9
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -67,7 +67,7 @@ async function uploadFormFile(file) {
|
|
|
67
67
|
}
|
|
68
68
|
const body = new FormData();
|
|
69
69
|
body.append("file", file);
|
|
70
|
-
const response = await
|
|
70
|
+
const response = await chunk3ZWY6S4V_js.sonorFetch(
|
|
71
71
|
`${apiUrl}/api/public/forms/upload`,
|
|
72
72
|
{
|
|
73
73
|
method: "POST",
|
|
@@ -87,5 +87,5 @@ async function uploadFormFile(file) {
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
exports.FileField = FileField;
|
|
90
|
-
//# sourceMappingURL=FileField-
|
|
91
|
-
//# sourceMappingURL=FileField-
|
|
90
|
+
//# sourceMappingURL=FileField-ASOR3XG5.js.map
|
|
91
|
+
//# sourceMappingURL=FileField-ASOR3XG5.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/forms/FileField.tsx"],"names":["React","jsxs","Fragment","jsx","sonorFetch"],"mappings":"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","file":"FileField-
|
|
1
|
+
{"version":3,"sources":["../src/forms/FileField.tsx"],"names":["React","jsxs","Fragment","jsx","sonorFetch"],"mappings":";;;;;;;;;;;;;AAmCO,SAAS,SAAA,CAAU;AAAA,EACxB,KAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,sBAAA,CAAM,SAAyC,MAAM,CAAA;AACjF,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,sBAAA,CAAM,SAAS,EAAE,CAAA;AAEjD,EAAA,MAAM,UAAA,GAAa,OAAO,CAAA,KAA2C;AACnE,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAA;AAC/B,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,WAAA,CAAY,KAAK,IAAI,CAAA;AACrB,IAAA,SAAA,CAAU,WAAW,CAAA;AACrB,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,cAAA,CAAe,IAAI,CAAA;AACrC,MAAA,QAAA,CAAS,GAAG,CAAA;AACZ,MAAA,SAAA,CAAU,MAAM,CAAA;AAAA,IAClB,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,+BAA+B,GAAG,CAAA;AAChD,MAAA,QAAA,CAAS,EAAE,CAAA;AACX,MAAA,SAAA,CAAU,OAAO,CAAA;AAAA,IACnB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEC,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAC,cAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,OAAA;AAAA,QACJ,SAAA,EAAW,CAAA,EAAG,WAAW,CAAA,QAAA,EAAW,WAAW,CAAA,aAAA,CAAA;AAAA,QAC/C,IAAA,EAAK,MAAA;AAAA,QACL,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,UAAU,KAAA,CAAM,WAAA;AAAA,QAChB,UAAU,MAAA,KAAW,WAAA;AAAA,QACrB,QAAA,EAAU,UAAA;AAAA,QACV,KAAA,EAAO;AAAA;AAAA,KACT;AAAA,IACC,MAAA,KAAW,WAAA,oBACVF,eAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,KAAA,EAAO,kCAAA,EAAoC,QAAA,EAAU,EAAA,EAAI,SAAA,EAAW,CAAA,EAAE,EAAG,QAAA,EAAA;AAAA,MAAA,YAAA;AAAA,MACxE,QAAA;AAAA,MAAS;AAAA,KAAA,EACtB,CAAA;AAAA,IAED,MAAA,KAAW,OAAA,oBACVE,cAAA,CAAC,GAAA,EAAA,EAAE,MAAK,OAAA,EAAQ,KAAA,EAAO,EAAE,KAAA,EAAO,4BAA4B,QAAA,EAAU,EAAA,EAAI,SAAA,EAAW,CAAA,IAAK,QAAA,EAAA,8CAAA,EAE1F;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAGA,eAAe,eAAe,IAAA,EAA6B;AACzD,EAAA,MAAM,SACJ,OAAO,MAAA,KAAW,WAAA,GACb,MAAA,CAAe,wBAAwB,sBAAA,GACxC,sBAAA;AACN,EAAA,MAAM,MAAA,GACJ,OAAO,MAAA,KAAW,WAAA,GAAe,OAAe,oBAAA,GAAuB,MAAA;AACzE,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,EACxD;AAEA,EAAA,MAAM,IAAA,GAAO,IAAI,QAAA,EAAS;AAC1B,EAAA,IAAA,CAAK,MAAA,CAAO,QAAQ,IAAI,CAAA;AAGxB,EAAA,MAAM,WAAW,MAAMC,2BAAA;AAAA,IACrB,GAAG,MAAM,CAAA,wBAAA,CAAA;AAAA,IACT;AAAA,MACE,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,aAAA,EAAe,CAAA,OAAA,EAAU,MAAM,CAAA,CAAA,EAAG;AAAA,MAC7C;AAAA,KACF;AAAA,IACA,EAAE,OAAA,EAAS,CAAA,EAAG,SAAA,EAAW,GAAA;AAAM,GACjC;AAEA,EAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,QAAA,CAAS,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,EACtD;AACA,EAAA,MAAM,OAAQ,MAAM,QAAA,CAAS,MAAK,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA;AACpD,EAAA,IAAI,CAAC,MAAM,GAAA,EAAK;AACd,IAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,EAChD;AACA,EAAA,OAAO,IAAA,CAAK,GAAA;AACd","file":"FileField-ASOR3XG5.js","sourcesContent":["'use client'\n\n/**\n * File upload field — the one field type that cannot render on the server.\n *\n * It holds upload state and reads the browser-published credential globals, so\n * it lives here rather than in FormField.tsx. Pulling it out is what lets\n * FormField drop its `'use client'` directive and render inside a Server\n * Component (see StaticForm.tsx); a form WITHOUT a file field now ships no\n * field-rendering JavaScript at all.\n *\n * Uploads the chosen file to the Sonor API, which stores it and returns a\n * public URL — that URL becomes the field value, so large files never touch\n * the JSON submission body. The value stays empty until the upload succeeds,\n * so a required file field correctly blocks submission until the upload\n * completes (rather than submitting a useless bare filename).\n *\n * Note: forms containing a file field are NOT native-POST eligible (see\n * native-fallback.tsx) — a form-encoded POST cannot run this upload — so the\n * server shell renders a plain disabled-looking file input and the real\n * control arrives with the enhancement.\n */\n\nimport React from 'react'\nimport type { FormField as FormFieldType } from './types'\nimport { sonorFetch } from '../shared/sonorFetch'\n\nexport interface FileFieldProps {\n field: FormFieldType\n inputId: string\n classPrefix: string\n baseInputStyle: React.CSSProperties\n onChange: (value: unknown) => void\n}\n\nexport function FileField({\n field,\n inputId,\n classPrefix,\n baseInputStyle,\n onChange,\n}: FileFieldProps) {\n const [status, setStatus] = React.useState<'idle' | 'uploading' | 'error'>('idle')\n const [fileName, setFileName] = React.useState('')\n\n const handleFile = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0]\n if (!file) return\n setFileName(file.name)\n setStatus('uploading')\n onChange('') // clear any prior URL until this upload completes\n try {\n const url = await uploadFormFile(file)\n onChange(url)\n setStatus('idle')\n } catch (err) {\n console.error('[Forms] File upload failed:', err)\n onChange('')\n setStatus('error')\n }\n }\n\n return (\n <>\n <input\n id={inputId}\n className={`${classPrefix}__input ${classPrefix}__input--file`}\n type=\"file\"\n name={field.slug}\n required={field.is_required}\n disabled={status === 'uploading'}\n onChange={handleFile}\n style={baseInputStyle}\n />\n {status === 'uploading' && (\n <p style={{ color: 'var(--sk-text-tertiary, #6b7280)', fontSize: 14, marginTop: 4 }}>\n Uploading {fileName}…\n </p>\n )}\n {status === 'error' && (\n <p role=\"alert\" style={{ color: 'var(--sk-error, #dc2626)', fontSize: 14, marginTop: 4 }}>\n Upload failed. Please choose the file again.\n </p>\n )}\n </>\n )\n}\n\n/** Upload a single file to the Sonor API and return its stored public URL. */\nasync function uploadFormFile(file: File): Promise<string> {\n const apiUrl =\n typeof window !== 'undefined'\n ? (window as any).__SITE_KIT_API_URL__ || 'https://api.sonor.io'\n : 'https://api.sonor.io'\n const apiKey =\n typeof window !== 'undefined' ? (window as any).__SITE_KIT_API_KEY__ : undefined\n if (!apiKey) {\n throw new Error('API key is required to upload files.')\n }\n\n const body = new FormData()\n body.append('file', file)\n\n // No Content-Type header — the browser sets the multipart boundary itself.\n const response = await sonorFetch(\n `${apiUrl}/api/public/forms/upload`,\n {\n method: 'POST',\n headers: { Authorization: `Bearer ${apiKey}` },\n body,\n },\n { retries: 1, timeoutMs: 60000 },\n )\n\n if (!response.ok) {\n throw new Error(`Upload failed (${response.status})`)\n }\n const data = (await response.json().catch(() => null)) as { url?: string } | null\n if (!data?.url) {\n throw new Error('Upload did not return a URL.')\n }\n return data.url\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { sonorFetch } from './chunk-
|
|
3
|
-
import './chunk-
|
|
4
|
-
import './chunk-
|
|
2
|
+
import { sonorFetch } from './chunk-AVFXLKIP.mjs';
|
|
3
|
+
import './chunk-RPLZIPTB.mjs';
|
|
4
|
+
import './chunk-Q3VBSR4M.mjs';
|
|
5
5
|
import './chunk-BEXTDHO4.mjs';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
@@ -81,5 +81,5 @@ async function uploadFormFile(file) {
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
export { FileField };
|
|
84
|
-
//# sourceMappingURL=FileField-
|
|
85
|
-
//# sourceMappingURL=FileField-
|
|
84
|
+
//# sourceMappingURL=FileField-HSPQLACF.mjs.map
|
|
85
|
+
//# sourceMappingURL=FileField-HSPQLACF.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/forms/FileField.tsx"],"names":[],"mappings":"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","file":"FileField-
|
|
1
|
+
{"version":3,"sources":["../src/forms/FileField.tsx"],"names":[],"mappings":"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","file":"FileField-HSPQLACF.mjs","sourcesContent":["'use client'\n\n/**\n * File upload field — the one field type that cannot render on the server.\n *\n * It holds upload state and reads the browser-published credential globals, so\n * it lives here rather than in FormField.tsx. Pulling it out is what lets\n * FormField drop its `'use client'` directive and render inside a Server\n * Component (see StaticForm.tsx); a form WITHOUT a file field now ships no\n * field-rendering JavaScript at all.\n *\n * Uploads the chosen file to the Sonor API, which stores it and returns a\n * public URL — that URL becomes the field value, so large files never touch\n * the JSON submission body. The value stays empty until the upload succeeds,\n * so a required file field correctly blocks submission until the upload\n * completes (rather than submitting a useless bare filename).\n *\n * Note: forms containing a file field are NOT native-POST eligible (see\n * native-fallback.tsx) — a form-encoded POST cannot run this upload — so the\n * server shell renders a plain disabled-looking file input and the real\n * control arrives with the enhancement.\n */\n\nimport React from 'react'\nimport type { FormField as FormFieldType } from './types'\nimport { sonorFetch } from '../shared/sonorFetch'\n\nexport interface FileFieldProps {\n field: FormFieldType\n inputId: string\n classPrefix: string\n baseInputStyle: React.CSSProperties\n onChange: (value: unknown) => void\n}\n\nexport function FileField({\n field,\n inputId,\n classPrefix,\n baseInputStyle,\n onChange,\n}: FileFieldProps) {\n const [status, setStatus] = React.useState<'idle' | 'uploading' | 'error'>('idle')\n const [fileName, setFileName] = React.useState('')\n\n const handleFile = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0]\n if (!file) return\n setFileName(file.name)\n setStatus('uploading')\n onChange('') // clear any prior URL until this upload completes\n try {\n const url = await uploadFormFile(file)\n onChange(url)\n setStatus('idle')\n } catch (err) {\n console.error('[Forms] File upload failed:', err)\n onChange('')\n setStatus('error')\n }\n }\n\n return (\n <>\n <input\n id={inputId}\n className={`${classPrefix}__input ${classPrefix}__input--file`}\n type=\"file\"\n name={field.slug}\n required={field.is_required}\n disabled={status === 'uploading'}\n onChange={handleFile}\n style={baseInputStyle}\n />\n {status === 'uploading' && (\n <p style={{ color: 'var(--sk-text-tertiary, #6b7280)', fontSize: 14, marginTop: 4 }}>\n Uploading {fileName}…\n </p>\n )}\n {status === 'error' && (\n <p role=\"alert\" style={{ color: 'var(--sk-error, #dc2626)', fontSize: 14, marginTop: 4 }}>\n Upload failed. Please choose the file again.\n </p>\n )}\n </>\n )\n}\n\n/** Upload a single file to the Sonor API and return its stored public URL. */\nasync function uploadFormFile(file: File): Promise<string> {\n const apiUrl =\n typeof window !== 'undefined'\n ? (window as any).__SITE_KIT_API_URL__ || 'https://api.sonor.io'\n : 'https://api.sonor.io'\n const apiKey =\n typeof window !== 'undefined' ? (window as any).__SITE_KIT_API_KEY__ : undefined\n if (!apiKey) {\n throw new Error('API key is required to upload files.')\n }\n\n const body = new FormData()\n body.append('file', file)\n\n // No Content-Type header — the browser sets the multipart boundary itself.\n const response = await sonorFetch(\n `${apiUrl}/api/public/forms/upload`,\n {\n method: 'POST',\n headers: { Authorization: `Bearer ${apiKey}` },\n body,\n },\n { retries: 1, timeoutMs: 60000 },\n )\n\n if (!response.ok) {\n throw new Error(`Upload failed (${response.status})`)\n }\n const data = (await response.json().catch(() => null)) as { url?: string } | null\n if (!data?.url) {\n throw new Error('Upload did not return a URL.')\n }\n return data.url\n}\n"]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunkMVHR77V4_js = require('./chunk-MVHR77V4.js');
|
|
5
|
-
var
|
|
5
|
+
var chunkDDP6XUF5_js = require('./chunk-DDP6XUF5.js');
|
|
6
6
|
var chunk2ACKOMAL_js = require('./chunk-2ACKOMAL.js');
|
|
7
7
|
require('./chunk-SNAQBZPT.js');
|
|
8
8
|
var react = require('react');
|
|
@@ -46,14 +46,14 @@ function renderCompletionTemplate(template, field, values) {
|
|
|
46
46
|
if (token === "label") return field.label;
|
|
47
47
|
if (token === "first_name") {
|
|
48
48
|
const key = Object.keys(values).find((k) => /^first[_-]?name$/i.test(k));
|
|
49
|
-
return (key ?
|
|
49
|
+
return (key ? chunkDDP6XUF5_js.stageFirstName(values[key]) : null) || "";
|
|
50
50
|
}
|
|
51
51
|
return stringify(values[token]);
|
|
52
52
|
}).replace(/\s{2,}/g, " ").trim();
|
|
53
53
|
}
|
|
54
54
|
function groupSentence(fields, values) {
|
|
55
55
|
const val = (f) => values[f.slug];
|
|
56
|
-
const answered = fields.filter((f) => !
|
|
56
|
+
const answered = fields.filter((f) => !chunkDDP6XUF5_js.isEmptyValue(val(f)));
|
|
57
57
|
if (answered.length === 0) return null;
|
|
58
58
|
for (const f of answered) {
|
|
59
59
|
const template = f.completion_message?.trim();
|
|
@@ -68,14 +68,14 @@ function groupSentence(fields, values) {
|
|
|
68
68
|
);
|
|
69
69
|
if (firstNameField || anyNameField) {
|
|
70
70
|
const source = firstNameField ?? anyNameField;
|
|
71
|
-
const name =
|
|
71
|
+
const name = chunkDDP6XUF5_js.stageFirstName(val(source));
|
|
72
72
|
if (name) return `Nice to meet you, ${name}.`;
|
|
73
73
|
}
|
|
74
74
|
const email = fields.find(
|
|
75
|
-
(f) => f.field_type === "email" && !
|
|
75
|
+
(f) => f.field_type === "email" && !chunkDDP6XUF5_js.isEmptyValue(val(f))
|
|
76
76
|
);
|
|
77
77
|
const phone = fields.find(
|
|
78
|
-
(f) => (f.field_type === "phone" || f.field_type === "tel") && !
|
|
78
|
+
(f) => (f.field_type === "phone" || f.field_type === "tel") && !chunkDDP6XUF5_js.isEmptyValue(val(f))
|
|
79
79
|
);
|
|
80
80
|
if (email && phone) return `We'll follow up at ${val(email)} or ${val(phone)}.`;
|
|
81
81
|
if (email) return `We'll follow up at ${val(email)}.`;
|
|
@@ -253,9 +253,9 @@ function FormSpotlight({
|
|
|
253
253
|
trackStepChange,
|
|
254
254
|
honeypot
|
|
255
255
|
}) {
|
|
256
|
-
const fieldControls =
|
|
256
|
+
const fieldControls = chunkDDP6XUF5_js.useFieldControls(config.fields);
|
|
257
257
|
const views = react.useMemo(() => {
|
|
258
|
-
return
|
|
258
|
+
return chunkDDP6XUF5_js.stageViews(config).map((v) => ({ ...v, fields: v.fields.filter(isFieldVisible) })).filter((v) => v.fields.length > 0);
|
|
259
259
|
}, [config, isFieldVisible]);
|
|
260
260
|
const questions = react.useMemo(() => views.flatMap((v) => v.fields), [views]);
|
|
261
261
|
const questionCount = questions.length;
|
|
@@ -277,8 +277,8 @@ function FormSpotlight({
|
|
|
277
277
|
const activeGroup = activeSlug ? groupOf(activeSlug) : -1;
|
|
278
278
|
const groupComplete = react.useCallback(
|
|
279
279
|
(view) => view.fields.every(
|
|
280
|
-
(f) => fieldIsComplete(f) || !f.is_required &&
|
|
281
|
-
) && view.fields.some((f) => !
|
|
280
|
+
(f) => fieldIsComplete(f) || !f.is_required && chunkDDP6XUF5_js.isEmptyValue(values[f.slug])
|
|
281
|
+
) && view.fields.some((f) => !chunkDDP6XUF5_js.isEmptyValue(values[f.slug])),
|
|
282
282
|
[fieldIsComplete, values]
|
|
283
283
|
);
|
|
284
284
|
const completeCount = questions.reduce((n, q) => n + (fieldIsComplete(q) ? 1 : 0), 0);
|
|
@@ -476,7 +476,7 @@ function FormSpotlight({
|
|
|
476
476
|
(field, soloAutoAdvance) => (value) => {
|
|
477
477
|
setLive(true);
|
|
478
478
|
setFieldValue(field.slug, value);
|
|
479
|
-
if (soloAutoAdvance && !
|
|
479
|
+
if (soloAutoAdvance && !chunkDDP6XUF5_js.isEmptyValue(value)) {
|
|
480
480
|
clearAutoTimer();
|
|
481
481
|
autoTimer.current = window.setTimeout(() => {
|
|
482
482
|
autoTimer.current = null;
|
|
@@ -591,7 +591,7 @@ function FormSpotlight({
|
|
|
591
591
|
),
|
|
592
592
|
/* @__PURE__ */ jsxRuntime.jsxs("header", { className: "sk-stage__head", "data-sk-part": "stage-head", children: [
|
|
593
593
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sk-stage__head-name", children: config.name }),
|
|
594
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sk-stage__head-meta", "data-sk-part": "stage-estimate", children: `Takes ${
|
|
594
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "sk-stage__head-meta", "data-sk-part": "stage-estimate", children: `Takes ${chunkDDP6XUF5_js.stageEstimate(questionCount)}` })
|
|
595
595
|
] }),
|
|
596
596
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sk-stage__hud", "data-sk-part": "stage-hud", children: [
|
|
597
597
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -687,7 +687,7 @@ function FormSpotlight({
|
|
|
687
687
|
showValid: !!touched[f.slug] && !errors[f.slug] && fieldIsComplete(f),
|
|
688
688
|
onChange: handleFieldChange(
|
|
689
689
|
f,
|
|
690
|
-
view.fields.length === 1 &&
|
|
690
|
+
view.fields.length === 1 && chunkDDP6XUF5_js.AUTO_ADVANCE_TYPES.includes(f.field_type)
|
|
691
691
|
)
|
|
692
692
|
}
|
|
693
693
|
)
|
|
@@ -753,5 +753,5 @@ exports.FormSpotlight = FormSpotlight;
|
|
|
753
753
|
exports.SpotStyles = SpotStyles;
|
|
754
754
|
exports.groupSentence = groupSentence;
|
|
755
755
|
exports.renderCompletionTemplate = renderCompletionTemplate;
|
|
756
|
-
//# sourceMappingURL=FormSpotlight-
|
|
757
|
-
//# sourceMappingURL=FormSpotlight-
|
|
756
|
+
//# sourceMappingURL=FormSpotlight-VTWP4X6H.js.map
|
|
757
|
+
//# sourceMappingURL=FormSpotlight-VTWP4X6H.js.map
|