@sonordev/site-kit 6.1.1 → 6.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-manifest.json +1 -1
- package/dist/{AnalyticsProvider-5G5AFHZN.js → AnalyticsProvider-AT5XFQKT.js} +10 -10
- package/dist/{AnalyticsProvider-5G5AFHZN.js.map → AnalyticsProvider-AT5XFQKT.js.map} +1 -1
- package/dist/{AnalyticsProvider-33L4E6LO.mjs → AnalyticsProvider-KPK3N52Q.mjs} +6 -6
- package/dist/{AnalyticsProvider-33L4E6LO.mjs.map → AnalyticsProvider-KPK3N52Q.mjs.map} +1 -1
- package/dist/{ArticleViewTracker-U2KFUSZF.js → ArticleViewTracker-3PFASMTC.js} +6 -6
- package/dist/{ArticleViewTracker-U2KFUSZF.js.map → ArticleViewTracker-3PFASMTC.js.map} +1 -1
- package/dist/{ArticleViewTracker-VZRMPK4S.mjs → ArticleViewTracker-KIKKHBO6.mjs} +5 -5
- package/dist/{ArticleViewTracker-VZRMPK4S.mjs.map → ArticleViewTracker-KIKKHBO6.mjs.map} +1 -1
- package/dist/ChatWidget-6PXV6RSI.mjs +17 -0
- package/dist/{ChatWidget-LH3QZYKR.mjs.map → ChatWidget-6PXV6RSI.mjs.map} +1 -1
- package/dist/ChatWidget-D27PSWMO.js +34 -0
- package/dist/{ChatWidget-RUCQMCMN.js.map → ChatWidget-D27PSWMO.js.map} +1 -1
- package/dist/EngageWidget-SPZL3KPX.js +21 -0
- package/dist/{EngageWidget-X2CBW7DV.js.map → EngageWidget-SPZL3KPX.js.map} +1 -1
- package/dist/EngageWidget-YRTVPYAY.mjs +12 -0
- package/dist/{EngageWidget-34BQXU7K.mjs.map → EngageWidget-YRTVPYAY.mjs.map} +1 -1
- package/dist/{FileField-2MMV53BG.js → FileField-6RC33ORG.js} +6 -6
- package/dist/{FileField-2MMV53BG.js.map → FileField-6RC33ORG.js.map} +1 -1
- package/dist/{FileField-REUU36RJ.mjs → FileField-GXNG2LH2.mjs} +5 -5
- package/dist/{FileField-REUU36RJ.mjs.map → FileField-GXNG2LH2.mjs.map} +1 -1
- package/dist/{FormSpotlight-Y27TPQ4G.js → FormSpotlight-73E2CMV6.js} +9 -9
- package/dist/{FormSpotlight-Y27TPQ4G.js.map → FormSpotlight-73E2CMV6.js.map} +1 -1
- package/dist/{FormSpotlight-ZV3IS66K.mjs → FormSpotlight-YDUF3TSC.mjs} +3 -3
- package/dist/{FormSpotlight-ZV3IS66K.mjs.map → FormSpotlight-YDUF3TSC.mjs.map} +1 -1
- package/dist/{FormStage-K7Z6IEPM.js → FormStage-BL5FREFE.js} +9 -9
- package/dist/{FormStage-K7Z6IEPM.js.map → FormStage-BL5FREFE.js.map} +1 -1
- package/dist/{FormStage-6NUGCDJR.mjs → FormStage-VJZHYW6J.mjs} +3 -3
- package/dist/{FormStage-6NUGCDJR.mjs.map → FormStage-VJZHYW6J.mjs.map} +1 -1
- package/dist/ManagedForm-FUIOTKSI.js +25 -0
- package/dist/{ManagedForm-O67ILXN7.js.map → ManagedForm-FUIOTKSI.js.map} +1 -1
- package/dist/ManagedForm-Z2S37RFX.mjs +16 -0
- package/dist/{ManagedForm-EUDKMS5G.mjs.map → ManagedForm-Z2S37RFX.mjs.map} +1 -1
- package/dist/{ManagedNewsletterForm-QBJODAIA.js → ManagedNewsletterForm-3D3IW6JG.js} +8 -8
- package/dist/{ManagedNewsletterForm-QBJODAIA.js.map → ManagedNewsletterForm-3D3IW6JG.js.map} +1 -1
- package/dist/{ManagedNewsletterForm-IGWTZW7X.mjs → ManagedNewsletterForm-ZXASCHZV.mjs} +7 -7
- package/dist/{ManagedNewsletterForm-IGWTZW7X.mjs.map → ManagedNewsletterForm-ZXASCHZV.mjs.map} +1 -1
- package/dist/{SignalCore-UR4KVU5X.mjs → SignalCore-LKSU7UYG.mjs} +5 -5
- package/dist/{SignalCore-UR4KVU5X.mjs.map → SignalCore-LKSU7UYG.mjs.map} +1 -1
- package/dist/{SignalCore-KQDRH44V.js → SignalCore-RNMT4ZP4.js} +11 -11
- package/dist/{SignalCore-KQDRH44V.js.map → SignalCore-RNMT4ZP4.js.map} +1 -1
- package/dist/SitemapSync-IDJ3PXER.js +18 -0
- package/dist/{SitemapSync-DQALPBTR.js.map → SitemapSync-IDJ3PXER.js.map} +1 -1
- package/dist/SitemapSync-NTYKLAEH.mjs +9 -0
- package/dist/{SitemapSync-QYV3X5LH.mjs.map → SitemapSync-NTYKLAEH.mjs.map} +1 -1
- package/dist/analytics/index.js +9 -9
- package/dist/analytics/index.mjs +4 -4
- package/dist/articles/index.js +1 -1
- package/dist/articles/index.mjs +1 -1
- package/dist/articles/server-ui.js +1 -1
- package/dist/articles/server-ui.mjs +1 -1
- package/dist/brand/extract-brand-profile.d.ts +2 -7
- package/dist/brand/extract-brand-profile.d.ts.map +1 -1
- package/dist/{chunk-3SHAY7PK.mjs → chunk-22WIVF4O.mjs} +234 -197
- package/dist/chunk-22WIVF4O.mjs.map +1 -0
- package/dist/{chunk-VNJTU6LG.js → chunk-3NDDCSWR.js} +15 -15
- package/dist/{chunk-VNJTU6LG.js.map → chunk-3NDDCSWR.js.map} +1 -1
- package/dist/{chunk-MSSFRRXJ.mjs → chunk-3T74AR7S.mjs} +4 -4
- package/dist/{chunk-MSSFRRXJ.mjs.map → chunk-3T74AR7S.mjs.map} +1 -1
- package/dist/{chunk-OP42HO3Z.mjs → chunk-4FWJ5K5O.mjs} +3 -3
- package/dist/{chunk-OP42HO3Z.mjs.map → chunk-4FWJ5K5O.mjs.map} +1 -1
- package/dist/{chunk-CJ5YPYAE.mjs → chunk-53OU4TGU.mjs} +4 -4
- package/dist/{chunk-CJ5YPYAE.mjs.map → chunk-53OU4TGU.mjs.map} +1 -1
- package/dist/{chunk-NJSD5QY6.js → chunk-5IOMLUQS.js} +7 -7
- package/dist/{chunk-NJSD5QY6.js.map → chunk-5IOMLUQS.js.map} +1 -1
- package/dist/{chunk-S24WZNFP.js → chunk-5L46GS7N.js} +6 -6
- package/dist/{chunk-S24WZNFP.js.map → chunk-5L46GS7N.js.map} +1 -1
- package/dist/{chunk-6K3YRSYN.js → chunk-7JRFYQKN.js} +10 -10
- package/dist/{chunk-6K3YRSYN.js.map → chunk-7JRFYQKN.js.map} +1 -1
- package/dist/{chunk-MJTHYT3D.js → chunk-7JYLE3X6.js} +4 -4
- package/dist/{chunk-MJTHYT3D.js.map → chunk-7JYLE3X6.js.map} +1 -1
- package/dist/{chunk-JOYMIGR2.mjs → chunk-7K6L33BX.mjs} +22 -22
- package/dist/{chunk-R2BHRDPZ.mjs → chunk-7OOPIYLP.mjs} +3 -3
- package/dist/{chunk-R2BHRDPZ.mjs.map → chunk-7OOPIYLP.mjs.map} +1 -1
- package/dist/{chunk-WWJQGMMN.js → chunk-A4WTX36Y.js} +12 -12
- package/dist/{chunk-WWJQGMMN.js.map → chunk-A4WTX36Y.js.map} +1 -1
- package/dist/{chunk-AEW7EFYU.js → chunk-AEN7EL6N.js} +20 -6
- package/dist/chunk-AEN7EL6N.js.map +1 -0
- package/dist/{chunk-JS75ORH7.js → chunk-ATPQ6264.js} +24 -24
- package/dist/{chunk-7IM7VG4E.js → chunk-BYVAXSH5.js} +6 -6
- package/dist/{chunk-7IM7VG4E.js.map → chunk-BYVAXSH5.js.map} +1 -1
- package/dist/{chunk-ME5636V6.js → chunk-CRIZNSD2.js} +3 -3
- package/dist/{chunk-ME5636V6.js.map → chunk-CRIZNSD2.js.map} +1 -1
- package/dist/{chunk-YZMI7QQ2.mjs → chunk-EG3F5AHL.mjs} +4 -4
- package/dist/{chunk-YZMI7QQ2.mjs.map → chunk-EG3F5AHL.mjs.map} +1 -1
- package/dist/{chunk-VPZUQXZV.mjs → chunk-EJTRU275.mjs} +4 -4
- package/dist/{chunk-VPZUQXZV.mjs.map → chunk-EJTRU275.mjs.map} +1 -1
- package/dist/{chunk-MWX6QO7A.mjs → chunk-GSH4DBAD.mjs} +3 -3
- package/dist/{chunk-MWX6QO7A.mjs.map → chunk-GSH4DBAD.mjs.map} +1 -1
- package/dist/chunk-IMWON7OV.mjs +27 -0
- package/dist/chunk-IMWON7OV.mjs.map +1 -0
- package/dist/{chunk-HH5EMIXK.js → chunk-IPLOSM5F.js} +14 -14
- package/dist/{chunk-HH5EMIXK.js.map → chunk-IPLOSM5F.js.map} +1 -1
- package/dist/{chunk-OTCJRVFJ.js → chunk-ITJ5ZF33.js} +3 -3
- package/dist/{chunk-OTCJRVFJ.js.map → chunk-ITJ5ZF33.js.map} +1 -1
- package/dist/{chunk-U3SQBAUQ.mjs → chunk-IXJ2H4MU.mjs} +8 -8
- package/dist/{chunk-U3SQBAUQ.mjs.map → chunk-IXJ2H4MU.mjs.map} +1 -1
- package/dist/{chunk-7PCXI25T.mjs → chunk-JLVKZTYZ.mjs} +3 -3
- package/dist/{chunk-7PCXI25T.mjs.map → chunk-JLVKZTYZ.mjs.map} +1 -1
- package/dist/{chunk-U2DWXE2A.mjs → chunk-JOSSKN4J.mjs} +3 -3
- package/dist/{chunk-U2DWXE2A.mjs.map → chunk-JOSSKN4J.mjs.map} +1 -1
- package/dist/chunk-LGFRHT34.js +8 -0
- package/dist/{chunk-QWUDHOUE.js.map → chunk-LGFRHT34.js.map} +1 -1
- package/dist/chunk-M2N7NY3V.js +103 -0
- package/dist/chunk-M2N7NY3V.js.map +1 -0
- package/dist/{chunk-QYRJ4IQD.js → chunk-NJVU2DCX.js} +243 -204
- package/dist/chunk-NJVU2DCX.js.map +1 -0
- package/dist/chunk-NYXENHD2.mjs +96 -0
- package/dist/chunk-NYXENHD2.mjs.map +1 -0
- package/dist/{chunk-Y4A4G5XJ.js → chunk-OASA6M53.js} +5 -5
- package/dist/{chunk-Y4A4G5XJ.js.map → chunk-OASA6M53.js.map} +1 -1
- package/dist/{chunk-AG7MWWGP.mjs → chunk-P2UCNCQZ.mjs} +4 -4
- package/dist/{chunk-AG7MWWGP.mjs.map → chunk-P2UCNCQZ.mjs.map} +1 -1
- package/dist/{chunk-NNZDWY3L.mjs → chunk-RH4XEXTK.mjs} +3 -3
- package/dist/{chunk-46GMNQWN.js → chunk-RKRCWQBU.js} +3 -3
- package/dist/{chunk-46GMNQWN.js.map → chunk-RKRCWQBU.js.map} +1 -1
- package/dist/{chunk-VNSV5SY7.mjs → chunk-RKWBC43M.mjs} +3 -3
- package/dist/{chunk-VNSV5SY7.mjs.map → chunk-RKWBC43M.mjs.map} +1 -1
- package/dist/{chunk-BRED7YSL.js → chunk-RPDSNMVR.js} +11 -11
- package/dist/{chunk-BRED7YSL.js.map → chunk-RPDSNMVR.js.map} +1 -1
- package/dist/{chunk-3E7ZXPOB.mjs → chunk-RT7XKV6A.mjs} +4 -4
- package/dist/{chunk-3E7ZXPOB.mjs.map → chunk-RT7XKV6A.mjs.map} +1 -1
- package/dist/{chunk-JZCG25XK.js → chunk-RWJ3IJUP.js} +14 -14
- package/dist/{chunk-JZCG25XK.js.map → chunk-RWJ3IJUP.js.map} +1 -1
- package/dist/{chunk-22KPMJIQ.mjs → chunk-S4LTYXPR.mjs} +3 -3
- package/dist/{chunk-22KPMJIQ.mjs.map → chunk-S4LTYXPR.mjs.map} +1 -1
- package/dist/chunk-SIHPFJ6C.mjs +6 -0
- package/dist/{chunk-HQWPCX3N.mjs.map → chunk-SIHPFJ6C.mjs.map} +1 -1
- package/dist/{chunk-IPGIFBRN.js → chunk-T742S2CY.js} +4 -4
- package/dist/{chunk-IPGIFBRN.js.map → chunk-T742S2CY.js.map} +1 -1
- package/dist/{chunk-YCA4KCRF.mjs → chunk-TBAP7JNJ.mjs} +3 -3
- package/dist/{chunk-YCA4KCRF.mjs.map → chunk-TBAP7JNJ.mjs.map} +1 -1
- package/dist/{chunk-5YA6SI4Z.mjs → chunk-TIFVAASU.mjs} +2 -2
- package/dist/{chunk-MLXUMVBK.mjs → chunk-UCMMIGC6.mjs} +20 -6
- package/dist/chunk-UCMMIGC6.mjs.map +1 -0
- package/dist/{chunk-U577PJLH.mjs → chunk-UPF6HX5C.mjs} +7 -7
- package/dist/{chunk-U577PJLH.mjs.map → chunk-UPF6HX5C.mjs.map} +1 -1
- package/dist/{chunk-OB7K6EFK.js → chunk-UTCZNQ4G.js} +5 -5
- package/dist/{chunk-OB7K6EFK.js.map → chunk-UTCZNQ4G.js.map} +1 -1
- package/dist/{chunk-DGWFHL35.mjs → chunk-UV3HJDMT.mjs} +3 -3
- package/dist/{chunk-DGWFHL35.mjs.map → chunk-UV3HJDMT.mjs.map} +1 -1
- package/dist/{chunk-EF7QCYLF.js → chunk-W6GQNGIM.js} +4 -4
- package/dist/{chunk-EF7QCYLF.js.map → chunk-W6GQNGIM.js.map} +1 -1
- package/dist/{chunk-WVNUOUQI.mjs → chunk-W7D27SYJ.mjs} +3 -3
- package/dist/{chunk-WVNUOUQI.mjs.map → chunk-W7D27SYJ.mjs.map} +1 -1
- package/dist/{chunk-NK7ZWPAO.js → chunk-WI6RV2U4.js} +18 -18
- package/dist/{chunk-NK7ZWPAO.js.map → chunk-WI6RV2U4.js.map} +1 -1
- package/dist/{chunk-GZLMMX76.mjs → chunk-XAPGVZNN.mjs} +3 -3
- package/dist/{chunk-GZLMMX76.mjs.map → chunk-XAPGVZNN.mjs.map} +1 -1
- package/dist/{chunk-I7AZC5ZQ.js → chunk-XXSSUCJB.js} +2 -2
- package/dist/{chunk-3H3DTYFQ.js → chunk-Y63EG5CW.js} +8 -8
- package/dist/{chunk-3H3DTYFQ.js.map → chunk-Y63EG5CW.js.map} +1 -1
- package/dist/{chunk-D6VMDDQR.js → chunk-YNI7WQJN.js} +8 -8
- package/dist/{chunk-D6VMDDQR.js.map → chunk-YNI7WQJN.js.map} +1 -1
- package/dist/chunk-YZJ22HUQ.js +29 -0
- package/dist/chunk-YZJ22HUQ.js.map +1 -0
- package/dist/{chunk-OUZQL5PV.js → chunk-ZRCA5YGZ.js} +4 -4
- package/dist/{chunk-OUZQL5PV.js.map → chunk-ZRCA5YGZ.js.map} +1 -1
- package/dist/{chunk-7DMAVD7W.mjs → chunk-ZRD75SE5.mjs} +3 -3
- package/dist/{chunk-7DMAVD7W.mjs.map → chunk-ZRD75SE5.mjs.map} +1 -1
- package/dist/{chunk-NN2YE5WT.js → chunk-ZUQSVCMD.js} +3 -3
- package/dist/{chunk-6ZMEJSNX.mjs → chunk-ZZ6P27A5.mjs} +4 -4
- package/dist/{chunk-6ZMEJSNX.mjs.map → chunk-ZZ6P27A5.mjs.map} +1 -1
- package/dist/cli/index.js +211 -211
- package/dist/cli/index.mjs +151 -151
- package/dist/client/index.js +4 -4
- package/dist/client/index.mjs +3 -3
- package/dist/commerce/index.js +57 -57
- package/dist/commerce/index.mjs +5 -5
- package/dist/cta-bar/CtaBar.d.ts +15 -4
- package/dist/cta-bar/CtaBar.d.ts.map +1 -1
- package/dist/cta-bar/index.js +6 -12
- package/dist/cta-bar/index.js.map +1 -1
- package/dist/cta-bar/index.mjs +6 -12
- package/dist/cta-bar/index.mjs.map +1 -1
- package/dist/engage/ChatWidget.d.ts +60 -1
- package/dist/engage/ChatWidget.d.ts.map +1 -1
- package/dist/engage/EchoUiActions.d.ts +5 -2
- package/dist/engage/EchoUiActions.d.ts.map +1 -1
- package/dist/engage/brand-color.d.ts +37 -0
- package/dist/engage/brand-color.d.ts.map +1 -0
- package/dist/engage/chat-messages.d.ts +86 -0
- package/dist/engage/chat-messages.d.ts.map +1 -0
- package/dist/engage/index.js +11 -10
- package/dist/engage/index.js.map +1 -1
- package/dist/engage/index.mjs +8 -7
- package/dist/engage/index.mjs.map +1 -1
- package/dist/fleet/index.js +8 -8
- package/dist/fleet/index.mjs +4 -4
- package/dist/forms/index.js +16 -16
- package/dist/forms/index.mjs +9 -9
- package/dist/forms/server.js +10 -10
- package/dist/forms/server.mjs +8 -8
- package/dist/forms/static.js +7 -7
- package/dist/forms/static.mjs +6 -6
- package/dist/images/index.js +11 -11
- package/dist/images/index.mjs +4 -4
- package/dist/index.js +63 -63
- package/dist/index.mjs +9 -9
- package/dist/layout/client.js +8 -8
- package/dist/layout/client.mjs +7 -7
- package/dist/layout/index.js +10 -10
- package/dist/layout/index.mjs +8 -8
- package/dist/{lib-6HOOMENJ.js → lib-6GWWPDJR.js} +7 -7
- package/dist/lib-BD4KKQBI.mjs +4 -0
- package/dist/{lib-R7IQ4ZHE.mjs → lib-N5PD6JNJ.mjs} +2 -2
- package/dist/{lib-BGAWCSUH.js → lib-WFB5RLEQ.js} +8 -8
- package/dist/maps/index.js +5 -5
- package/dist/maps/index.mjs +3 -3
- package/dist/motion/CountUp.d.ts +49 -0
- package/dist/motion/CountUp.d.ts.map +1 -0
- package/dist/motion/Parallax.d.ts +14 -0
- package/dist/motion/Parallax.d.ts.map +1 -1
- package/dist/motion/ScrollScene.d.ts +1 -1
- package/dist/motion/ScrollScene.d.ts.map +1 -1
- package/dist/motion/engine.d.ts +19 -0
- package/dist/motion/engine.d.ts.map +1 -1
- package/dist/motion/gsap.d.ts +55 -6
- package/dist/motion/gsap.d.ts.map +1 -1
- package/dist/motion/gsap.js +101 -4
- package/dist/motion/gsap.js.map +1 -1
- package/dist/motion/gsap.mjs +96 -3
- package/dist/motion/gsap.mjs.map +1 -1
- package/dist/motion/index.d.ts +1 -1
- package/dist/motion/index.d.ts.map +1 -1
- package/dist/motion/index.js +21 -40
- package/dist/motion/index.js.map +1 -1
- package/dist/motion/index.mjs +11 -32
- package/dist/motion/index.mjs.map +1 -1
- package/dist/motion/three.js +5 -5
- package/dist/motion/three.mjs +1 -1
- package/dist/search/index.js +4 -4
- package/dist/search/index.mjs +3 -3
- package/dist/seo/client.js +5 -5
- package/dist/seo/client.mjs +4 -4
- package/dist/seo/index.js +5 -5
- package/dist/seo/index.mjs +4 -4
- package/dist/seo/register-sitemap-cli.js +12 -93
- package/dist/seo/register-sitemap-cli.mjs +2 -83
- package/dist/server/index.js +3 -3
- package/dist/server/index.mjs +2 -2
- package/dist/shared/color.d.ts +39 -0
- package/dist/shared/color.d.ts.map +1 -0
- package/dist/shared/version.d.ts +1 -1
- package/dist/signal/index.js +11 -11
- package/dist/signal/index.mjs +2 -2
- package/dist/sync/index.js +17 -17
- package/dist/sync/index.mjs +4 -4
- package/dist/{web-vitals.attribution-7LKLZ5GR.mjs → web-vitals.attribution-CHXXWO72.mjs} +3 -3
- package/dist/web-vitals.attribution-CHXXWO72.mjs.map +1 -0
- package/dist/{web-vitals.attribution-ONVYQNRB.js → web-vitals.attribution-SQVZNHN3.js} +3 -3
- package/dist/web-vitals.attribution-SQVZNHN3.js.map +1 -0
- package/package.json +1 -1
- package/dist/ChatWidget-LH3QZYKR.mjs +0 -16
- package/dist/ChatWidget-RUCQMCMN.js +0 -25
- package/dist/EngageWidget-34BQXU7K.mjs +0 -12
- package/dist/EngageWidget-X2CBW7DV.js +0 -21
- package/dist/ManagedForm-EUDKMS5G.mjs +0 -16
- package/dist/ManagedForm-O67ILXN7.js +0 -25
- package/dist/SitemapSync-DQALPBTR.js +0 -18
- package/dist/SitemapSync-QYV3X5LH.mjs +0 -9
- package/dist/chunk-3SHAY7PK.mjs.map +0 -1
- package/dist/chunk-AEW7EFYU.js.map +0 -1
- package/dist/chunk-HQWPCX3N.mjs +0 -6
- package/dist/chunk-MLXUMVBK.mjs.map +0 -1
- package/dist/chunk-QWUDHOUE.js +0 -8
- package/dist/chunk-QYRJ4IQD.js.map +0 -1
- package/dist/lib-RSDMEKDQ.mjs +0 -4
- package/dist/web-vitals.attribution-7LKLZ5GR.mjs.map +0 -1
- package/dist/web-vitals.attribution-ONVYQNRB.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cta-bar/styles.tsx","../../src/cta-bar/CtaBar.tsx"],"names":["jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit/cta-bar — stylesheet\n *\n * Layout and states only. The surface itself is the shared Liquid Glass\n * recipe (`../shared/glass`), applied by putting `sk-glass` on the bar.\n *\n * Geometry is driven by three tokens, and the same three produce the\n * bar's height, the spacer that reserves room for it, and the Echo launcher\n * clearance. Set them on :root, not on the bar, so all three read them:\n *\n * --sk-cta-bar-inset gap from the screen edges (12px)\n * --sk-cta-bar-padding gap between glass and buttons (6px)\n * --sk-cta-bar-action-height button height (48px)\n *\n * Colour tokens: --sk-cta-bar-text, --sk-cta-primary-bg,\n * --sk-cta-primary-text, --sk-cta-secondary-bg, --sk-cta-secondary-text,\n * plus the --sk-glass-* tokens for the surface.\n */\n\nimport * as React from 'react'\n\nexport const CTA_BAR_STYLE_HREF = 'sk-cta-bar'\n\n/** Show-at-and-above widths per breakpoint name, mirroring Tailwind's defaults. */\nexport const CTA_BAR_BREAKPOINTS = { sm: 640, md: 768, lg: 1024, xl: 1280 } as const\nexport type CtaBarBreakpoint = keyof typeof CTA_BAR_BREAKPOINTS | 'none'\n\nconst BAR_HEIGHT =\n 'calc(var(--sk-cta-bar-action-height, 48px) + 2 * var(--sk-cta-bar-padding, 6px))'\n\n/**\n * Where the Echo launcher goes while a bar is on screen: one bar height plus\n * the bar's own inset, plus 12px of air. Uses the full (not compact) height,\n * so the launcher holds still while the bar breathes during a scroll.\n */\nexport const ECHO_CLEARANCE = `calc(${BAR_HEIGHT} + var(--sk-cta-bar-inset, 12px) + 12px)`\n\n/**\n * The room the bar needs at the end of the page. The spacer is this tall,\n * and it's published as `--sk-cta-bar-space` on <html> while a bar is\n * present below its breakpoint, so a site can pad its footer with it\n * (`spacer={false}`) and let the footer's own background run under the bar\n * instead of a blank strip after it. Reserved whether or not the bar is\n * currently hidden, so showing and hiding never shifts the layout.\n */\nexport const CTA_BAR_SPACE = `calc(${BAR_HEIGHT} + 2 * var(--sk-cta-bar-inset, 12px) + env(safe-area-inset-bottom, 0px))`\n\nfunction presentBelow(name: string, px: number | null): string {\n const rules = `\n html:has(.sk-cta-bar[data-breakpoint=\"${name}\"]) {\n --sk-cta-bar-space: ${CTA_BAR_SPACE};\n }\n html:has(.sk-cta-bar[data-breakpoint=\"${name}\"][data-echo-clearance]:not([data-hidden])) {\n --sk-echo-offset-bottom: ${ECHO_CLEARANCE};\n }`\n return px == null ? `\\n@media all {${rules}\\n}` : `\\n@media (max-width: ${px - 0.02}px) {${rules}\\n}`\n}\n\nfunction perBreakpoint(): string {\n return Object.entries(CTA_BAR_BREAKPOINTS)\n .map(\n ([name, px]) => `\n@media (min-width: ${px}px) {\n .sk-cta-bar[data-breakpoint=\"${name}\"], .sk-cta-bar-spacer[data-breakpoint=\"${name}\"] { display: none; }\n}${presentBelow(name, px)}`,\n )\n .join('')\n}\n\nexport const CTA_BAR_CSS = `\n.sk-cta-bar {\n --sk-cta-h: var(--sk-cta-bar-action-height, 48px);\n --sk-cta-pad: var(--sk-cta-bar-padding, 6px);\n position: fixed;\n z-index: var(--sk-cta-bar-z, 40);\n left: var(--sk-cta-bar-inset, 12px);\n right: var(--sk-cta-bar-inset, 12px);\n bottom: calc(var(--sk-cta-bar-inset, 12px) + env(safe-area-inset-bottom, 0px) + var(--sk-vv-layout-gap, 0px));\n max-width: var(--sk-cta-bar-max-width, 520px);\n margin: 0 auto;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: var(--sk-cta-pad);\n border-radius: calc(var(--sk-cta-h) / 2 + var(--sk-cta-pad));\n color: var(--sk-cta-bar-text, var(--sk-text-primary, #111827));\n font-family: inherit;\n transition:\n transform 450ms cubic-bezier(0.2, 0.8, 0.2, 1),\n padding 250ms ease,\n border-radius 250ms ease,\n visibility 0s linear 0s;\n}\n.sk-cta-bar[data-layout=\"fit\"] { width: fit-content; }\n.sk-cta-bar[data-compact] {\n --sk-cta-h: calc(var(--sk-cta-bar-action-height, 48px) - 8px);\n --sk-cta-pad: calc(var(--sk-cta-bar-padding, 6px) - 2px);\n}\n.sk-cta-bar[data-hidden] {\n transform: translateY(calc(100% + var(--sk-cta-bar-inset, 12px) + env(safe-area-inset-bottom, 0px) + 16px));\n visibility: hidden;\n transition:\n transform 350ms cubic-bezier(0.4, 0, 1, 1),\n visibility 0s linear 350ms;\n}\n.sk-cta-bar__action {\n flex: 1 1 0%;\n min-width: 0;\n box-sizing: border-box;\n height: var(--sk-cta-h);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 0 18px;\n margin: 0;\n border: 0;\n border-radius: 999px;\n font: inherit;\n font-size: 15px;\n font-weight: 600;\n line-height: 1;\n text-decoration: none;\n white-space: nowrap;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition:\n height 250ms ease,\n flex-grow 300ms ease,\n flex-basis 300ms ease,\n padding 250ms ease,\n transform 150ms ease;\n}\n.sk-cta-bar[data-layout=\"fit\"] .sk-cta-bar__action { flex: 0 0 auto; }\n.sk-cta-bar__action:active { transform: scale(0.97); }\n.sk-cta-bar__action:focus-visible {\n outline: 2px solid var(--sk-cta-bar-focus, currentColor);\n outline-offset: 2px;\n}\n.sk-cta-bar__action[data-variant=\"primary\"] {\n background: var(--sk-cta-primary-bg, var(--sk-primary, #2563eb));\n color: var(--sk-cta-primary-text, #ffffff);\n box-shadow:\n inset 0 1px 0 color-mix(in srgb, #ffffff 28%, transparent),\n 0 1px 2px rgba(0, 0, 0, 0.12);\n}\n.sk-cta-bar__action[data-variant=\"secondary\"] {\n background: var(--sk-cta-secondary-bg, color-mix(in srgb, currentColor 8%, transparent));\n color: var(--sk-cta-secondary-text, inherit);\n box-shadow: inset 0 0 0 1px color-mix(in srgb, currentColor 16%, transparent);\n}\n.sk-cta-bar__icon { display: inline-flex; flex-shrink: 0; }\n.sk-cta-bar__icon > svg { width: 18px; height: 18px; }\n.sk-cta-bar__label { min-width: 0; overflow: hidden; text-overflow: ellipsis; }\n.sk-cta-bar[data-compact] .sk-cta-bar__action[data-collapse] {\n flex: 0 0 var(--sk-cta-h);\n padding: 0;\n}\n.sk-cta-bar[data-compact] .sk-cta-bar__action[data-collapse] .sk-cta-bar__label {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n}\n.sk-cta-bar-spacer { height: ${CTA_BAR_SPACE}; }${presentBelow('none', null)}${perBreakpoint()}\n@media (prefers-reduced-motion: reduce) {\n .sk-cta-bar, .sk-cta-bar[data-hidden], .sk-cta-bar__action { transition: none; }\n}\n@media (scripting: none) {\n .sk-cta-bar[data-hidden] { transform: none; visibility: visible; }\n}\n@media print {\n .sk-cta-bar, .sk-cta-bar-spacer { display: none !important; }\n}\n`\n\nexport function CtaBarStyles() {\n return (\n <style href={CTA_BAR_STYLE_HREF} precedence=\"default\">\n {CTA_BAR_CSS}\n </style>\n )\n}\n","/**\n * @sonordev/site-kit/cta-bar — the Liquid Glass mobile CTA bar\n *\n * Single source of truth for the fleet's sticky mobile action bar. Before\n * 6.1.0 eleven sites each carried their own, and each had solved a different\n * subset of the same problems: hiding over the form it points at, staying off\n * the hero until the hero CTA scrolls away, getting out from under the Echo\n * launcher, riding out iOS toolbar resizes. This component does all of them.\n *\n * Server component. It renders plain markup plus a childless behaviour\n * island, so a server layout can pass Next <Link>s straight in:\n *\n * <CtaBar label=\"Call or book\" showAfter=\"#hero-cta\" hideOver=\"#quote\">\n * <CtaBarAction href=\"tel:+15135550100\" icon={<Phone />} variant=\"secondary\">Call</CtaBarAction>\n * <CtaBarAction as={Link} href=\"/quote\" icon={<ClipboardCheck />}>Free quote</CtaBarAction>\n * </CtaBar>\n *\n * Render it once per page: at the layout root for a site-wide bar, or inside\n * a page for a page-specific one. It's a labelled <aside>, which is valid at\n * either depth (axe 4.13 retired the rule that wanted complementary\n * landmarks top level; the fixture app runs axe on both placements). Never\n * inside a blurred header: backdrop-filter on an ancestor turns it into the\n * containing block for this fixed bar.\n */\n\nimport * as React from 'react'\nimport { GlassStyles } from '../shared/glass'\nimport { CtaBarBehavior } from './CtaBarBehavior'\nimport { CtaBarStyles, type CtaBarBreakpoint } from './styles'\n\nexport interface CtaBarProps {\n children: React.ReactNode\n /** Accessible name of the bar's landmark. Default \"Quick actions\". */\n label?: string\n /** The bar is hidden at this width and above. `none` shows it at every width. Default `lg` (1024px). */\n breakpoint?: CtaBarBreakpoint\n /** `fill` stretches actions across the bar; `fit` hugs a single action in a centred capsule. Default `fill`. */\n layout?: 'fill' | 'fit'\n /**\n * CSS selector. The bar stays off screen until this element has scrolled\n * off the top, e.g. the hero's own CTA. If nothing matches, the bar shows.\n */\n showAfter?: string\n /** CSS selector(s). The bar steps aside while any match is on screen, e.g. the form it points at, or the footer. */\n hideOver?: string | string[]\n /** Hide while a text field has focus (the keyboard is up). Default true. */\n hideWhileTyping?: boolean\n /** Tighten while scrolling down, restore on scroll up. Default true. */\n compactOnScroll?: boolean\n /** Lift the Echo launcher above the bar while the bar is on screen. Default true. */\n echoClearance?: boolean\n /** Reserve the bar's height at the end of the page so it never covers the footer. Default true. */\n spacer?: boolean\n /** Send a `cta_click` analytics event for each action tap. Default true. */\n track?: boolean\n className?: string\n id?: string\n}\n\nfunction cx(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(' ')\n}\n\nexport function CtaBar({\n children,\n label = 'Quick actions',\n breakpoint = 'lg',\n layout = 'fill',\n showAfter,\n hideOver,\n hideWhileTyping = true,\n compactOnScroll = true,\n echoClearance = true,\n spacer = true,\n track = true,\n className,\n id,\n}: CtaBarProps) {\n const hideOverList = hideOver == null ? undefined : Array.isArray(hideOver) ? hideOver : [hideOver]\n return (\n <>\n <GlassStyles />\n <CtaBarStyles />\n {spacer ? <div className=\"sk-cta-bar-spacer\" data-breakpoint={breakpoint} aria-hidden=\"true\" /> : null}\n <aside\n id={id}\n aria-label={label}\n className={cx('sk-cta-bar', 'sk-glass', className)}\n data-sk-cta-bar=\"\"\n data-breakpoint={breakpoint}\n data-layout={layout}\n data-echo-clearance={echoClearance ? '' : undefined}\n // Server-rendered off screen when it waits for a start element, so it\n // never slides in over the hero during hydration. JS-off visitors get\n // it back through the stylesheet's (scripting: none) rule.\n data-hidden={showAfter ? '' : undefined}\n >\n {children}\n <CtaBarBehavior\n showAfter={showAfter}\n hideOver={hideOverList}\n hideWhileTyping={hideWhileTyping}\n compactOnScroll={compactOnScroll}\n track={track}\n />\n </aside>\n </>\n )\n}\n\ntype CtaBarActionOwnProps = {\n /** Element or component to render, e.g. Next's Link. Default: `a` with an href, `button` without. */\n as?: React.ElementType\n /** Leading icon; decorative, hidden from assistive tech. */\n icon?: React.ReactNode\n /** `primary` = solid brand, `secondary` = tinted glass, `plain` = layout only (style it yourself). Default `primary`. */\n variant?: 'primary' | 'secondary' | 'plain'\n /**\n * Fold to icon-only while the bar is compact. Default: true for a\n * secondary action with an icon. The label stays in the accessible name.\n */\n collapse?: boolean\n children: React.ReactNode\n className?: string\n}\n\nexport type CtaBarActionProps = CtaBarActionOwnProps &\n Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, keyof CtaBarActionOwnProps> &\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, keyof CtaBarActionOwnProps | keyof React.AnchorHTMLAttributes<HTMLAnchorElement>>\n\nexport function CtaBarAction({\n as,\n icon,\n variant = 'primary',\n collapse,\n children,\n className,\n ...rest\n}: CtaBarActionProps) {\n const Comp: React.ElementType = as ?? (rest.href ? 'a' : 'button')\n const folds = collapse ?? (variant === 'secondary' && icon != null)\n return (\n <Comp\n {...(Comp === 'button' && !('type' in rest) ? { type: 'button' } : null)}\n {...rest}\n className={cx('sk-cta-bar__action', className)}\n data-variant={variant}\n data-collapse={folds ? '' : undefined}\n >\n {icon != null ? (\n <span className=\"sk-cta-bar__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n ) : null}\n <span className=\"sk-cta-bar__label\">{children}</span>\n </Comp>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cta-bar/styles.tsx","../../src/cta-bar/CtaBar.tsx"],"names":["jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit/cta-bar — stylesheet\n *\n * Layout and states only. The surface itself is the shared Liquid Glass\n * recipe (`../shared/glass`), applied by putting `sk-glass` on the bar.\n *\n * Geometry is driven by three tokens, and the same three produce the\n * bar's height, the spacer that reserves room for it, and the Echo launcher\n * clearance. Set them on :root, not on the bar, so all three read them:\n *\n * --sk-cta-bar-inset gap from the screen edges (12px)\n * --sk-cta-bar-padding gap between glass and buttons (6px)\n * --sk-cta-bar-action-height button height (48px)\n *\n * Colour tokens: --sk-cta-bar-text, --sk-cta-primary-bg,\n * --sk-cta-primary-text, --sk-cta-secondary-bg, --sk-cta-secondary-text,\n * plus the --sk-glass-* tokens for the surface.\n */\n\nimport * as React from 'react'\n\nexport const CTA_BAR_STYLE_HREF = 'sk-cta-bar'\n\n/** Show-at-and-above widths per breakpoint name, mirroring Tailwind's defaults. */\nexport const CTA_BAR_BREAKPOINTS = { sm: 640, md: 768, lg: 1024, xl: 1280 } as const\nexport type CtaBarBreakpoint = keyof typeof CTA_BAR_BREAKPOINTS | 'none'\n\nconst BAR_HEIGHT =\n 'calc(var(--sk-cta-bar-action-height, 48px) + 2 * var(--sk-cta-bar-padding, 6px))'\n\n/**\n * Where the Echo launcher goes while a bar is on screen: one bar height plus\n * the bar's own inset, plus 12px of air. Uses the full (not compact) height,\n * so the launcher holds still while the bar breathes during a scroll.\n */\nexport const ECHO_CLEARANCE = `calc(${BAR_HEIGHT} + var(--sk-cta-bar-inset, 12px) + 12px)`\n\n/**\n * The room the bar needs at the end of the page. The spacer is this tall,\n * and it's published as `--sk-cta-bar-space` on <html> while a bar is\n * present below its breakpoint, so a site can pad its footer with it\n * (`spacer={false}`) and let the footer's own background run under the bar\n * instead of a blank strip after it. Reserved whether or not the bar is\n * currently hidden, so showing and hiding never shifts the layout.\n */\nexport const CTA_BAR_SPACE = `calc(${BAR_HEIGHT} + 2 * var(--sk-cta-bar-inset, 12px) + env(safe-area-inset-bottom, 0px))`\n\nfunction presentBelow(name: string, px: number | null): string {\n const rules = `\n html:has(.sk-cta-bar[data-breakpoint=\"${name}\"]) {\n --sk-cta-bar-space: ${CTA_BAR_SPACE};\n }\n html:has(.sk-cta-bar[data-breakpoint=\"${name}\"][data-echo-clearance]:not([data-hidden])) {\n --sk-echo-offset-bottom: ${ECHO_CLEARANCE};\n }`\n return px == null ? `\\n@media all {${rules}\\n}` : `\\n@media (max-width: ${px - 0.02}px) {${rules}\\n}`\n}\n\nfunction perBreakpoint(): string {\n return Object.entries(CTA_BAR_BREAKPOINTS)\n .map(\n ([name, px]) => `\n@media (min-width: ${px}px) {\n .sk-cta-bar[data-breakpoint=\"${name}\"], .sk-cta-bar-spacer[data-breakpoint=\"${name}\"] { display: none; }\n}${presentBelow(name, px)}`,\n )\n .join('')\n}\n\nexport const CTA_BAR_CSS = `\n.sk-cta-bar {\n --sk-cta-h: var(--sk-cta-bar-action-height, 48px);\n --sk-cta-pad: var(--sk-cta-bar-padding, 6px);\n position: fixed;\n z-index: var(--sk-cta-bar-z, 40);\n left: var(--sk-cta-bar-inset, 12px);\n right: var(--sk-cta-bar-inset, 12px);\n bottom: calc(var(--sk-cta-bar-inset, 12px) + env(safe-area-inset-bottom, 0px) + var(--sk-vv-layout-gap, 0px));\n max-width: var(--sk-cta-bar-max-width, 520px);\n margin: 0 auto;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: var(--sk-cta-pad);\n border-radius: calc(var(--sk-cta-h) / 2 + var(--sk-cta-pad));\n color: var(--sk-cta-bar-text, var(--sk-text-primary, #111827));\n font-family: inherit;\n transition:\n transform 450ms cubic-bezier(0.2, 0.8, 0.2, 1),\n padding 250ms ease,\n border-radius 250ms ease,\n visibility 0s linear 0s;\n}\n.sk-cta-bar[data-layout=\"fit\"] { width: fit-content; }\n.sk-cta-bar[data-compact] {\n --sk-cta-h: calc(var(--sk-cta-bar-action-height, 48px) - 8px);\n --sk-cta-pad: calc(var(--sk-cta-bar-padding, 6px) - 2px);\n}\n.sk-cta-bar[data-hidden] {\n transform: translateY(calc(100% + var(--sk-cta-bar-inset, 12px) + env(safe-area-inset-bottom, 0px) + 16px));\n visibility: hidden;\n transition:\n transform 350ms cubic-bezier(0.4, 0, 1, 1),\n visibility 0s linear 350ms;\n}\n.sk-cta-bar__action {\n flex: 1 1 0%;\n min-width: 0;\n box-sizing: border-box;\n height: var(--sk-cta-h);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 0 18px;\n margin: 0;\n border: 0;\n border-radius: 999px;\n font: inherit;\n font-size: 15px;\n font-weight: 600;\n line-height: 1;\n text-decoration: none;\n white-space: nowrap;\n cursor: pointer;\n -webkit-tap-highlight-color: transparent;\n transition:\n height 250ms ease,\n flex-grow 300ms ease,\n flex-basis 300ms ease,\n padding 250ms ease,\n transform 150ms ease;\n}\n.sk-cta-bar[data-layout=\"fit\"] .sk-cta-bar__action { flex: 0 0 auto; }\n.sk-cta-bar__action:active { transform: scale(0.97); }\n.sk-cta-bar__action:focus-visible {\n outline: 2px solid var(--sk-cta-bar-focus, currentColor);\n outline-offset: 2px;\n}\n.sk-cta-bar__action[data-variant=\"primary\"] {\n background: var(--sk-cta-primary-bg, var(--sk-primary, #2563eb));\n color: var(--sk-cta-primary-text, #ffffff);\n box-shadow:\n inset 0 1px 0 color-mix(in srgb, #ffffff 28%, transparent),\n 0 1px 2px rgba(0, 0, 0, 0.12);\n}\n.sk-cta-bar__action[data-variant=\"secondary\"] {\n background: var(--sk-cta-secondary-bg, color-mix(in srgb, currentColor 8%, transparent));\n color: var(--sk-cta-secondary-text, inherit);\n box-shadow: inset 0 0 0 1px color-mix(in srgb, currentColor 16%, transparent);\n}\n.sk-cta-bar__icon { display: inline-flex; flex-shrink: 0; }\n.sk-cta-bar__icon > svg { width: 18px; height: 18px; }\n.sk-cta-bar__label { min-width: 0; overflow: hidden; text-overflow: ellipsis; }\n.sk-cta-bar[data-compact] .sk-cta-bar__action[data-collapse] {\n flex: 0 0 var(--sk-cta-h);\n padding: 0;\n}\n.sk-cta-bar[data-compact] .sk-cta-bar__action[data-collapse] .sk-cta-bar__label {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n}\n.sk-cta-bar-spacer { height: ${CTA_BAR_SPACE}; }${presentBelow('none', null)}${perBreakpoint()}\n@media (prefers-reduced-motion: reduce) {\n .sk-cta-bar, .sk-cta-bar[data-hidden], .sk-cta-bar__action { transition: none; }\n}\n@media (scripting: none) {\n .sk-cta-bar[data-hidden] { transform: none; visibility: visible; }\n}\n@media print {\n .sk-cta-bar, .sk-cta-bar-spacer { display: none !important; }\n}\n`\n\nexport function CtaBarStyles() {\n return (\n <style href={CTA_BAR_STYLE_HREF} precedence=\"default\">\n {CTA_BAR_CSS}\n </style>\n )\n}\n","/**\n * @sonordev/site-kit/cta-bar — the Liquid Glass mobile CTA bar\n *\n * Single source of truth for the fleet's sticky mobile action bar. Before\n * 6.1.0 eleven sites each carried their own, and each had solved a different\n * subset of the same problems: hiding over the form it points at, staying off\n * the hero until the hero CTA scrolls away, getting out from under the Echo\n * launcher, riding out iOS toolbar resizes. This component does all of them.\n *\n * Server component. It renders plain markup plus a childless behaviour\n * island, so a server layout can pass Next <Link>s straight in:\n *\n * <CtaBar label=\"Call or book\" showAfter=\"#hero-cta\" hideOver=\"#quote\">\n * <CtaBarAction href=\"tel:+15135550100\" icon={<Phone />} variant=\"secondary\">Call</CtaBarAction>\n * <CtaBarAction as={Link} href=\"/quote\" icon={<ClipboardCheck />}>Free quote</CtaBarAction>\n * </CtaBar>\n *\n * Render it once per page: at the layout root for a site-wide bar, or inside\n * a page for a page-specific one. It's a labelled <aside>, which is valid at\n * either depth (axe 4.13 retired the rule that wanted complementary\n * landmarks top level; the fixture app runs axe on both placements). Never\n * inside a blurred header: backdrop-filter on an ancestor turns it into the\n * containing block for this fixed bar.\n */\n\nimport * as React from 'react'\nimport { GlassStyles } from '../shared/glass'\nimport { CtaBarBehavior } from './CtaBarBehavior'\nimport { CtaBarStyles, type CtaBarBreakpoint } from './styles'\n\nexport interface CtaBarProps {\n children: React.ReactNode\n /** Accessible name of the bar's landmark. Default \"Quick actions\". */\n label?: string\n /** The bar is hidden at this width and above. `none` shows it at every width. Default `lg` (1024px). */\n breakpoint?: CtaBarBreakpoint\n /** `fill` stretches actions across the bar; `fit` hugs a single action in a centred capsule. Default `fill`. */\n layout?: 'fill' | 'fit'\n /**\n * CSS selector. The bar stays off screen until this element has scrolled\n * off the top, e.g. the hero's own CTA. If nothing matches, the bar shows.\n */\n showAfter?: string\n /** CSS selector(s). The bar steps aside while any match is on screen, e.g. the form it points at, or the footer. */\n hideOver?: string | string[]\n /** Hide while a text field has focus (the keyboard is up). Default true. */\n hideWhileTyping?: boolean\n /** Tighten while scrolling down, restore on scroll up. Default true. */\n compactOnScroll?: boolean\n /** Lift the Echo launcher above the bar while the bar is on screen. Default true. */\n echoClearance?: boolean\n /** Reserve the bar's height at the end of the page so it never covers the footer. Default true. */\n spacer?: boolean\n /** Send a `cta_click` analytics event for each action tap. Default true. */\n track?: boolean\n className?: string\n id?: string\n}\n\nfunction cx(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(' ')\n}\n\nexport function CtaBar({\n children,\n label = 'Quick actions',\n breakpoint = 'lg',\n layout = 'fill',\n showAfter,\n hideOver,\n hideWhileTyping = true,\n compactOnScroll = true,\n echoClearance = true,\n spacer = true,\n track = true,\n className,\n id,\n}: CtaBarProps) {\n const hideOverList = hideOver == null ? undefined : Array.isArray(hideOver) ? hideOver : [hideOver]\n return (\n <>\n <GlassStyles />\n <CtaBarStyles />\n {spacer ? <div className=\"sk-cta-bar-spacer\" data-breakpoint={breakpoint} aria-hidden=\"true\" /> : null}\n <aside\n id={id}\n aria-label={label}\n className={cx('sk-cta-bar', 'sk-glass', className)}\n data-sk-cta-bar=\"\"\n data-breakpoint={breakpoint}\n data-layout={layout}\n data-echo-clearance={echoClearance ? '' : undefined}\n // Server-rendered off screen when it waits for a start element, so it\n // never slides in over the hero during hydration. JS-off visitors get\n // it back through the stylesheet's (scripting: none) rule.\n data-hidden={showAfter ? '' : undefined}\n >\n {children}\n <CtaBarBehavior\n showAfter={showAfter}\n hideOver={hideOverList}\n hideWhileTyping={hideWhileTyping}\n compactOnScroll={compactOnScroll}\n track={track}\n />\n </aside>\n </>\n )\n}\n\n/** The props CtaBarAction owns. Never taken from the rendered element's own props. */\ntype CtaBarActionOwnProps = {\n /** Leading icon; decorative, hidden from assistive tech. */\n icon?: React.ReactNode\n /** `primary` = solid brand, `secondary` = tinted glass, `plain` = layout only (style it yourself). Default `primary`. */\n variant?: 'primary' | 'secondary' | 'plain'\n /**\n * Fold to icon-only while the bar is compact. Default: true for a\n * secondary action with an icon. The label stays in the accessible name.\n */\n collapse?: boolean\n children: React.ReactNode\n className?: string\n}\n\n/** Without `as` it renders an `a` (with an href) or a `button`, so it takes both. */\ntype CtaBarActionDefaultAttributes = Omit<React.AnchorHTMLAttributes<HTMLAnchorElement>, keyof CtaBarActionOwnProps> &\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, keyof CtaBarActionOwnProps | keyof React.AnchorHTMLAttributes<HTMLAnchorElement>>\n\n/**\n * Polymorphic on `as`. With no `as`, the default `a`/`button` attributes\n * (what 6.1.0 accepted, so existing callers don't change). With `as`, the\n * rendered component's own props, required ones included, minus the five\n * CtaBarAction owns: `<CtaBarAction as={ScheduleTourButton} values={…}>`\n * type-checks, and forgetting a prop the component requires doesn't.\n */\nexport type CtaBarActionProps<C extends React.ElementType | undefined = undefined> = CtaBarActionOwnProps & {\n /** Element or component to render, e.g. Next's Link. Default: `a` with an href, `button` without. */\n as?: C\n} & (C extends React.ElementType\n ? Omit<React.ComponentPropsWithoutRef<C>, keyof CtaBarActionOwnProps | 'as'>\n : CtaBarActionDefaultAttributes)\n\nexport function CtaBarAction<C extends React.ElementType | undefined = undefined>(props: CtaBarActionProps<C>) {\n const { as, icon, variant = 'primary', collapse, children, className, ...rest } = props\n // The rest is generic over `as`; the only field read here is `href`.\n const attrs = rest as Record<string, unknown>\n const Comp: React.ElementType = (as as React.ElementType | undefined) ?? (attrs.href ? 'a' : 'button')\n const folds = collapse ?? (variant === 'secondary' && icon != null)\n return (\n <Comp\n {...(Comp === 'button' && !('type' in attrs) ? { type: 'button' } : null)}\n {...attrs}\n className={cx('sk-cta-bar__action', className)}\n data-variant={variant}\n data-collapse={folds ? '' : undefined}\n >\n {icon != null ? (\n <span className=\"sk-cta-bar__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n ) : null}\n <span className=\"sk-cta-bar__label\">{children}</span>\n </Comp>\n )\n}\n"]}
|
|
@@ -28,6 +28,65 @@ interface ChatWidgetProps {
|
|
|
28
28
|
/** Avatar URL for the assistant shown in the header */
|
|
29
29
|
assistant_avatar?: string;
|
|
30
30
|
}
|
|
31
|
-
|
|
31
|
+
/** Enriched widget config from API (engage_chat_config + project settings) */
|
|
32
|
+
interface WidgetConfigFromApi {
|
|
33
|
+
is_enabled?: boolean;
|
|
34
|
+
position?: string;
|
|
35
|
+
initial_message?: string;
|
|
36
|
+
welcome_message?: string;
|
|
37
|
+
form_heading?: string;
|
|
38
|
+
form_description?: string;
|
|
39
|
+
offline_message?: string;
|
|
40
|
+
offlineFormSlug?: string;
|
|
41
|
+
chat_mode?: string;
|
|
42
|
+
signal_enabled?: boolean;
|
|
43
|
+
offline_mode?: string;
|
|
44
|
+
offline_heading?: string;
|
|
45
|
+
offline_subheading?: string;
|
|
46
|
+
welcome_screen_enabled?: boolean;
|
|
47
|
+
welcome_quick_actions?: string[];
|
|
48
|
+
handoff_enabled?: boolean;
|
|
49
|
+
show_powered_by?: boolean;
|
|
50
|
+
business_hours?: any;
|
|
51
|
+
brand_primary?: string;
|
|
52
|
+
logo_url?: string;
|
|
53
|
+
project_name?: string;
|
|
54
|
+
business_info?: {
|
|
55
|
+
name?: string;
|
|
56
|
+
phone?: string;
|
|
57
|
+
domain?: string;
|
|
58
|
+
address?: string;
|
|
59
|
+
hours?: any;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Whether Echo belongs on this site, given the project's widget config.
|
|
64
|
+
*
|
|
65
|
+
* Sonor decides this: the Engage "Enable Chat Widget" switch, stored as
|
|
66
|
+
* `engage_chat_config.is_enabled` and spread into `GET /engage/widget/config`.
|
|
67
|
+
* A project that never saved chat settings has no row, so the field is absent
|
|
68
|
+
* and Echo stays on; only an explicit `false` hides it, which also keeps an
|
|
69
|
+
* API that predates the field showing it. `null` means the config hasn't
|
|
70
|
+
* arrived or couldn't be fetched, and the chat can't run without it either.
|
|
71
|
+
*/
|
|
72
|
+
export declare function isChatEnabled(config: WidgetConfigFromApi | null): config is WidgetConfigFromApi;
|
|
73
|
+
/**
|
|
74
|
+
* Echo's launcher and chat window, shown only while the project's chat switch
|
|
75
|
+
* in Sonor is on. Nothing renders until the widget config arrives, so a site
|
|
76
|
+
* whose owner switched chat off never flashes a launcher and never starts
|
|
77
|
+
* Echo's availability polling.
|
|
78
|
+
*/
|
|
79
|
+
export declare function ChatWidget(props: ChatWidgetProps): React.JSX.Element | null;
|
|
80
|
+
interface EchoChatProps extends ChatWidgetProps {
|
|
81
|
+
projectId: string;
|
|
82
|
+
widgetConfig: WidgetConfigFromApi;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Echo itself, mounted by ChatWidget once the project's config says chat is
|
|
86
|
+
* on. Exported for the launcher tests, which render it with a resolved config
|
|
87
|
+
* because the package's vitest has no DOM to run ChatWidget's fetch in. Not
|
|
88
|
+
* part of the public `@sonordev/site-kit/engage` API.
|
|
89
|
+
*/
|
|
90
|
+
export declare function EchoChat({ projectId, widgetConfig, config, apiUrl: propApiUrl, signalUrl: propSignalUrl, suggested_questions: propSuggestedQuestions, assistant_name: propAssistantName, welcome_message: propWelcomeMessage, assistant_avatar: propAssistantAvatar }: EchoChatProps): React.JSX.Element;
|
|
32
91
|
export {};
|
|
33
92
|
//# sourceMappingURL=ChatWidget.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatWidget.d.ts","sourceRoot":"","sources":["../../src/engage/ChatWidget.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"ChatWidget.d.ts","sourceRoot":"","sources":["../../src/engage/ChatWidget.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAoE,MAAM,OAAO,CAAA;AAExF,OAAO,KAAK,EAAE,UAAU,EAAY,MAAM,SAAS,CAAA;AAoBnD,UAAU,eAAe;IACvB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,oFAAoF;IACpF,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC9B,gFAAgF;IAChF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAgBD,8EAA8E;AAC9E,UAAU,mBAAmB;IAE3B,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAA;IAChC,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,cAAc,CAAC,EAAE,GAAG,CAAA;IAEpB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB,aAAa,CAAC,EAAE;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,KAAK,CAAC,EAAE,GAAG,CAAA;KACZ,CAAA;CACF;AAsFD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,GAAG,MAAM,IAAI,mBAAmB,CAE/F;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,4BA8ChD;AAED,UAAU,aAAc,SAAQ,eAAe;IAC7C,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,mBAAmB,CAAA;CAClC;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,EAAE,aAAa,qBAg+CpR"}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Renders the optional `uiActions` the visitor Echo concierge returns alongside
|
|
5
5
|
* a chat reply (see signal-api echo.service.ts). Rendered beneath the assistant
|
|
6
|
-
* message in ChatWidget, on-brand with the widget's primary-color tokens
|
|
6
|
+
* message in ChatWidget, on-brand with the widget's primary-color tokens and
|
|
7
|
+
* the brand foreground colours from brand-color.ts.
|
|
7
8
|
*
|
|
8
9
|
* - show_form → compact inline managed form (reuses the canonical
|
|
9
10
|
* forms `useForm` fetch/validate/submit path) with optional prefill.
|
|
@@ -20,9 +21,11 @@ export interface EchoUiActionsProps {
|
|
|
20
21
|
actions: UiAction[];
|
|
21
22
|
primaryColor: string;
|
|
22
23
|
primaryRgb: string;
|
|
24
|
+
/** The brand as text on the panel: ChatWidget's `brandTextColor(primaryColor, panelTint)`. */
|
|
25
|
+
brandText: string;
|
|
23
26
|
/** Called by a suggest_action chip — send the message as the next turn or navigate. */
|
|
24
27
|
onSuggest: (action: string | undefined, message: string) => void;
|
|
25
28
|
}
|
|
26
|
-
export declare function EchoUiActions({ actions, primaryColor, primaryRgb, onSuggest }: EchoUiActionsProps): React.JSX.Element | null;
|
|
29
|
+
export declare function EchoUiActions({ actions, primaryColor, primaryRgb, brandText, onSuggest }: EchoUiActionsProps): React.JSX.Element | null;
|
|
27
30
|
export { isNavigable };
|
|
28
31
|
//# sourceMappingURL=EchoUiActions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EchoUiActions.d.ts","sourceRoot":"","sources":["../../src/engage/EchoUiActions.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"EchoUiActions.d.ts","sourceRoot":"","sources":["../../src/engage/EchoUiActions.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAoBvC,mFAAmF;AACnF,iBAAS,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE5C;AAyRD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,QAAQ,EAAE,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,8FAA8F;IAC9F,SAAS,EAAE,MAAM,CAAA;IACjB,uFAAuF;IACvF,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACjE;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,kBAAkB,4BAkD5G;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @sonordev/site-kit/engage — Echo's brand colours
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for how Echo turns the site's brand colour into
|
|
5
|
+
* foreground colours. ChatWidget and EchoUiActions route every such decision
|
|
6
|
+
* through here; don't re-derive one inline.
|
|
7
|
+
*
|
|
8
|
+
* - Brand as a FILL (launcher, avatar tile, the visitor's bubbles, the send
|
|
9
|
+
* and submit buttons) stays the raw brand, and text on it is
|
|
10
|
+
* `onBrandColor(brand)`.
|
|
11
|
+
* - Brand as TEXT on the glass panel (quick-action chips, the phone link,
|
|
12
|
+
* markdown link buttons, suggestion chips, the handoff button, the
|
|
13
|
+
* sent-message check) is `brandTextColor(brand, panelTint)`: the raw brand
|
|
14
|
+
* when it already reads, otherwise the brand pulled toward black (light
|
|
15
|
+
* panel) or white (dark panel) just far enough to clear WCAG AA.
|
|
16
|
+
*
|
|
17
|
+
* Why: a light brand (Gunning Homes' #d4af37 gold, any yellow) drawn as text
|
|
18
|
+
* on the ~86% white panel sat at about 2:1.
|
|
19
|
+
*/
|
|
20
|
+
/** Light enough that text and icons on a fill of it should be dark. Unreadable colours count as dark. */
|
|
21
|
+
export declare function isLightColor(color: string): boolean;
|
|
22
|
+
/** Text or icon colour on a fill of the brand. */
|
|
23
|
+
export declare function onBrandColor(brand: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* An "r, g, b" triplet for `rgba(var(--sk-primary-rgb, <triplet>), a)`, or
|
|
26
|
+
* the fallback when the colour can't be read.
|
|
27
|
+
*/
|
|
28
|
+
export declare function rgbTriplet(color: string, fallback?: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* The brand as text on Echo's glass panel.
|
|
31
|
+
*
|
|
32
|
+
* `panelTint` is the panel's resolved tint (the glass recipe's
|
|
33
|
+
* `--sk-glass-t`: `--sk-glass-tint`, then `--sk-bg`, then white). Unset or
|
|
34
|
+
* unreadable, the panel is taken to be white, the default.
|
|
35
|
+
*/
|
|
36
|
+
export declare function brandTextColor(brand: string, panelTint?: string | null): string;
|
|
37
|
+
//# sourceMappingURL=brand-color.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"brand-color.d.ts","sourceRoot":"","sources":["../../src/engage/brand-color.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AA4CH,yGAAyG;AACzG,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAInD;AAED,kDAAkD;AAClD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAgB,GAAG,MAAM,CAK1E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAuB/E"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @sonordev/site-kit/engage — Echo's transcript: message shapes and turns
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for what ChatWidget adds to the transcript when a
|
|
5
|
+
* visitor speaks, and for the one AI turn every send path goes through.
|
|
6
|
+
*
|
|
7
|
+
* The rule that keeps a message from showing twice: a visitor's bubble is
|
|
8
|
+
* drawn once, at the moment they act (typing and sending, clicking a
|
|
9
|
+
* suggestion chip, or starting the chat with a quick-action chip). Delivery
|
|
10
|
+
* afterwards (to Echo, or over the live-chat socket) only sends; it never
|
|
11
|
+
* draws the visitor's bubble. The opening quick-action message used to be
|
|
12
|
+
* drawn by `startChat` and again when the session came up, so every AI-mode
|
|
13
|
+
* visitor who started from a chip saw it twice.
|
|
14
|
+
*/
|
|
15
|
+
import type { UiAction } from './types';
|
|
16
|
+
export interface MessageAttachment {
|
|
17
|
+
name: string;
|
|
18
|
+
url: string;
|
|
19
|
+
size?: number;
|
|
20
|
+
mimeType?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface Message {
|
|
23
|
+
id: string;
|
|
24
|
+
role: 'user' | 'assistant' | 'agent' | 'system';
|
|
25
|
+
content: string;
|
|
26
|
+
timestamp: Date;
|
|
27
|
+
agentName?: string;
|
|
28
|
+
attachments?: MessageAttachment[];
|
|
29
|
+
suggestions?: string[];
|
|
30
|
+
sendFailed?: boolean;
|
|
31
|
+
/** When true, show "Talk to a person" button (AI cannot answer or user requested handoff) */
|
|
32
|
+
offerHandoff?: boolean;
|
|
33
|
+
/** Optional inline UI actions returned by the visitor Echo endpoint (forms, suggestion chips). */
|
|
34
|
+
uiActions?: UiAction[];
|
|
35
|
+
}
|
|
36
|
+
/** What the visitor Echo endpoint answers a turn with (ChatWidget's sendToSignalApi). */
|
|
37
|
+
export interface EchoReply {
|
|
38
|
+
content: string;
|
|
39
|
+
suggestions?: string[];
|
|
40
|
+
offerHandoff?: boolean;
|
|
41
|
+
uiActions?: UiAction[];
|
|
42
|
+
}
|
|
43
|
+
/** Detect if text expresses intent to talk to a live person */
|
|
44
|
+
export declare function userRequestedHandoff(text: string): boolean;
|
|
45
|
+
/** The visitor's bubble. Draw it once, when they act. */
|
|
46
|
+
export declare function visitorMessage(content: string, attachments?: MessageAttachment[]): Message;
|
|
47
|
+
/**
|
|
48
|
+
* The transcript a chat begins with: the welcome, then the quick-action
|
|
49
|
+
* message the visitor started it with, if any. This is where that message's
|
|
50
|
+
* bubble is drawn, in AI and live mode alike; `deliverOpeningMessage` only
|
|
51
|
+
* sends it once the session is up.
|
|
52
|
+
*/
|
|
53
|
+
export declare function openingMessages(welcome: string, initialMessage?: string): Message[];
|
|
54
|
+
/**
|
|
55
|
+
* Echo's reply as a transcript message. `probe` is the visitor text the reply
|
|
56
|
+
* answers, scanned for an explicit request for a person.
|
|
57
|
+
*/
|
|
58
|
+
export declare function echoReplyMessage(reply: EchoReply, probe: string): Message;
|
|
59
|
+
/** What the visitor sees when Echo can't be reached. */
|
|
60
|
+
export declare function echoErrorMessage(): Message;
|
|
61
|
+
export interface EchoTurnDeps {
|
|
62
|
+
/** Send one visitor turn to Echo. */
|
|
63
|
+
send: (content: string) => Promise<EchoReply>;
|
|
64
|
+
/** Append to the transcript. */
|
|
65
|
+
append: (message: Message) => void;
|
|
66
|
+
setLoading: (loading: boolean) => void;
|
|
67
|
+
onError?: (error: unknown) => void;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* One visitor turn to Echo in AI mode: the single path the composer, the
|
|
71
|
+
* suggestion chips and the opening message all send through. It appends
|
|
72
|
+
* Echo's reply (or the error reply) and never the visitor's bubble; the
|
|
73
|
+
* caller drew that when the visitor acted.
|
|
74
|
+
*/
|
|
75
|
+
export declare function askEcho(content: string, deps: EchoTurnDeps): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Send the chat's opening message once the session is up: to Echo in AI
|
|
78
|
+
* mode, over the live-chat socket otherwise. Its bubble is already on screen
|
|
79
|
+
* (`openingMessages`), so neither route may draw it; this takes no way to.
|
|
80
|
+
*/
|
|
81
|
+
export declare function deliverOpeningMessage(pending: string, route: {
|
|
82
|
+
signalEnabled: boolean;
|
|
83
|
+
ask: (content: string) => Promise<void>;
|
|
84
|
+
emitLive: (content: string) => Promise<void>;
|
|
85
|
+
}): Promise<void>;
|
|
86
|
+
//# sourceMappingURL=chat-messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-messages.d.ts","sourceRoot":"","sources":["../../src/engage/chat-messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,CAAA;IAC/C,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACjC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,6FAA6F;IAC7F,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,kGAAkG;IAClG,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;CACvB;AAED,yFAAyF;AACzF,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;CACvB;AAED,+DAA+D;AAC/D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAY1D;AAED,yDAAyD;AACzD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,GAAE,iBAAiB,EAAO,GAAG,OAAO,CAQ9F;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE,CAInF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAUzE;AAED,wDAAwD;AACxD,wBAAgB,gBAAgB,IAAI,OAAO,CAS1C;AAED,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAA;IAC7C,gCAAgC;IAChC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAClC,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CACnC;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAWhF;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE;IAAE,aAAa,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,GACvH,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
package/dist/engage/index.js
CHANGED
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var chunkNJVU2DCX_js = require('../chunk-NJVU2DCX.js');
|
|
5
|
+
var chunkBYVAXSH5_js = require('../chunk-BYVAXSH5.js');
|
|
6
6
|
require('../chunk-ESP5RMB7.js');
|
|
7
7
|
require('../chunk-NBOBOYMT.js');
|
|
8
8
|
require('../chunk-G6WF4G3E.js');
|
|
9
|
-
require('../chunk-
|
|
9
|
+
require('../chunk-A4WTX36Y.js');
|
|
10
10
|
require('../chunk-5XFFUP6D.js');
|
|
11
|
-
require('../chunk-
|
|
11
|
+
require('../chunk-W6GQNGIM.js');
|
|
12
12
|
require('../chunk-KHPJ3CEL.js');
|
|
13
|
+
require('../chunk-M2N7NY3V.js');
|
|
13
14
|
require('../chunk-RC4WWQXR.js');
|
|
14
15
|
require('../chunk-P4Y75QSU.js');
|
|
15
16
|
require('../chunk-VJMPIRSD.js');
|
|
16
17
|
require('../chunk-5RNAUYWE.js');
|
|
17
|
-
require('../chunk-
|
|
18
|
-
require('../chunk-
|
|
19
|
-
require('../chunk-
|
|
18
|
+
require('../chunk-3NDDCSWR.js');
|
|
19
|
+
require('../chunk-T742S2CY.js');
|
|
20
|
+
require('../chunk-LGFRHT34.js');
|
|
20
21
|
require('../chunk-SNAQBZPT.js');
|
|
21
22
|
|
|
22
23
|
// src/engage/echo-config.ts
|
|
@@ -48,15 +49,15 @@ function getEchoWidgetProps(config = SONOR_PUBLIC_ECHO_DEFAULTS) {
|
|
|
48
49
|
|
|
49
50
|
Object.defineProperty(exports, "ChatWidget", {
|
|
50
51
|
enumerable: true,
|
|
51
|
-
get: function () { return
|
|
52
|
+
get: function () { return chunkNJVU2DCX_js.ChatWidget; }
|
|
52
53
|
});
|
|
53
54
|
Object.defineProperty(exports, "DesignRenderer", {
|
|
54
55
|
enumerable: true,
|
|
55
|
-
get: function () { return
|
|
56
|
+
get: function () { return chunkBYVAXSH5_js.DesignRenderer; }
|
|
56
57
|
});
|
|
57
58
|
Object.defineProperty(exports, "EngageWidget", {
|
|
58
59
|
enumerable: true,
|
|
59
|
-
get: function () { return
|
|
60
|
+
get: function () { return chunkBYVAXSH5_js.EngageWidget; }
|
|
60
61
|
});
|
|
61
62
|
exports.SONOR_PUBLIC_ECHO_DEFAULTS = SONOR_PUBLIC_ECHO_DEFAULTS;
|
|
62
63
|
exports.getEchoWidgetProps = getEchoWidgetProps;
|
package/dist/engage/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/engage/echo-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/engage/echo-config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAgBO,IAAM,0BAAA,GAA+C;AAAA,EAC1D,SAAA,EAAW,yBAAA;AAAA,EACX,cAAA,EACE,0KAAA;AAAA,EACF,kBAAA,EAAoB;AAAA,IAClB,qBAAA;AAAA,IACA,0BAAA;AAAA,IACA,6BAAA;AAAA,IACA,6BAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAY,SAAA;AAAA;AAAA,EACZ,aAAA,EAAe;AACjB;AAEO,SAAS,kBAAA,CAAmB,SAA2B,0BAAA,EAA4B;AACxF,EAAA,OAAO;AAAA,IACL,cAAA,EAAgB,IAAA;AAAA,IAChB,UAAA,EAAY,MAAA,CAAO,SAAA,IAAa,0BAAA,CAA2B,SAAA;AAAA,IAC3D,eAAA,EAAiB,MAAA,CAAO,cAAA,IAAkB,0BAAA,CAA2B,cAAA;AAAA,IACrE,mBAAA,EAAqB,MAAA,CAAO,kBAAA,IAAsB,0BAAA,CAA2B,kBAAA;AAAA,IAC7E,WAAA,EAAa,MAAA,CAAO,UAAA,IAAc,0BAAA,CAA2B,UAAA;AAAA,IAC7D,cAAA,EAAgB,MAAA,CAAO,aAAA,IAAiB,0BAAA,CAA2B,aAAA;AAAA,IACnE,kBAAkB,MAAA,CAAO;AAAA,GAC3B;AACF","file":"index.js","sourcesContent":["/**\n * @sonordev/site-kit/engage - Echo Public Configuration\n *\n * Helpers for configuring the ChatWidget with Echo-specific defaults\n * for the Sonor public site (sonor.io).\n */\n\nexport interface EchoPublicConfig {\n signalUrl?: string\n welcomeMessage?: string\n suggestedQuestions?: string[]\n brandColor?: string\n assistantName?: string\n assistantAvatar?: string\n}\n\nexport const SONOR_PUBLIC_ECHO_DEFAULTS: EchoPublicConfig = {\n signalUrl: 'https://signal.sonor.io',\n welcomeMessage:\n \"Hi! I'm Echo, Sonor's AI assistant. I can answer questions about our platform, help you understand pricing, or get you started with a demo. What would you like to know?\",\n suggestedQuestions: [\n 'What does Sonor do?',\n 'How does Signal AI work?',\n 'What are the pricing plans?',\n 'Can I migrate from HubSpot?',\n 'How does the SEO module work?',\n ],\n brandColor: '#2563eb', // blue-600 (~5.2:1 on white, AA); overridden by --sk-primary CSS var or API brand_primary\n assistantName: 'Echo',\n}\n\nexport function getEchoWidgetProps(config: EchoPublicConfig = SONOR_PUBLIC_ECHO_DEFAULTS) {\n return {\n signal_enabled: true,\n signal_url: config.signalUrl || SONOR_PUBLIC_ECHO_DEFAULTS.signalUrl,\n welcome_message: config.welcomeMessage || SONOR_PUBLIC_ECHO_DEFAULTS.welcomeMessage,\n suggested_questions: config.suggestedQuestions || SONOR_PUBLIC_ECHO_DEFAULTS.suggestedQuestions,\n brand_color: config.brandColor || SONOR_PUBLIC_ECHO_DEFAULTS.brandColor,\n assistant_name: config.assistantName || SONOR_PUBLIC_ECHO_DEFAULTS.assistantName,\n assistant_avatar: config.assistantAvatar,\n }\n}\n"]}
|
package/dist/engage/index.mjs
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { ChatWidget } from '../chunk-
|
|
3
|
-
export { DesignRenderer, EngageWidget } from '../chunk-
|
|
2
|
+
export { ChatWidget } from '../chunk-22WIVF4O.mjs';
|
|
3
|
+
export { DesignRenderer, EngageWidget } from '../chunk-3T74AR7S.mjs';
|
|
4
4
|
import '../chunk-4U5NCKQY.mjs';
|
|
5
5
|
import '../chunk-OBKS3CPP.mjs';
|
|
6
6
|
import '../chunk-NSWO43XW.mjs';
|
|
7
|
-
import '../chunk-
|
|
7
|
+
import '../chunk-EG3F5AHL.mjs';
|
|
8
8
|
import '../chunk-QRHVMTHF.mjs';
|
|
9
|
-
import '../chunk-
|
|
9
|
+
import '../chunk-RKWBC43M.mjs';
|
|
10
10
|
import '../chunk-TMVKRQGJ.mjs';
|
|
11
|
+
import '../chunk-NYXENHD2.mjs';
|
|
11
12
|
import '../chunk-ZZQAGCSI.mjs';
|
|
12
13
|
import '../chunk-5SANRSX3.mjs';
|
|
13
14
|
import '../chunk-6EDVCUAG.mjs';
|
|
14
15
|
import '../chunk-A6UYV475.mjs';
|
|
15
|
-
import '../chunk-
|
|
16
|
-
import '../chunk-
|
|
17
|
-
import '../chunk-
|
|
16
|
+
import '../chunk-ZZ6P27A5.mjs';
|
|
17
|
+
import '../chunk-TBAP7JNJ.mjs';
|
|
18
|
+
import '../chunk-SIHPFJ6C.mjs';
|
|
18
19
|
import '../chunk-BEXTDHO4.mjs';
|
|
19
20
|
|
|
20
21
|
// src/engage/echo-config.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/engage/echo-config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/engage/echo-config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAgBO,IAAM,0BAAA,GAA+C;AAAA,EAC1D,SAAA,EAAW,yBAAA;AAAA,EACX,cAAA,EACE,0KAAA;AAAA,EACF,kBAAA,EAAoB;AAAA,IAClB,qBAAA;AAAA,IACA,0BAAA;AAAA,IACA,6BAAA;AAAA,IACA,6BAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,UAAA,EAAY,SAAA;AAAA;AAAA,EACZ,aAAA,EAAe;AACjB;AAEO,SAAS,kBAAA,CAAmB,SAA2B,0BAAA,EAA4B;AACxF,EAAA,OAAO;AAAA,IACL,cAAA,EAAgB,IAAA;AAAA,IAChB,UAAA,EAAY,MAAA,CAAO,SAAA,IAAa,0BAAA,CAA2B,SAAA;AAAA,IAC3D,eAAA,EAAiB,MAAA,CAAO,cAAA,IAAkB,0BAAA,CAA2B,cAAA;AAAA,IACrE,mBAAA,EAAqB,MAAA,CAAO,kBAAA,IAAsB,0BAAA,CAA2B,kBAAA;AAAA,IAC7E,WAAA,EAAa,MAAA,CAAO,UAAA,IAAc,0BAAA,CAA2B,UAAA;AAAA,IAC7D,cAAA,EAAgB,MAAA,CAAO,aAAA,IAAiB,0BAAA,CAA2B,aAAA;AAAA,IACnE,kBAAkB,MAAA,CAAO;AAAA,GAC3B;AACF","file":"index.mjs","sourcesContent":["/**\n * @sonordev/site-kit/engage - Echo Public Configuration\n *\n * Helpers for configuring the ChatWidget with Echo-specific defaults\n * for the Sonor public site (sonor.io).\n */\n\nexport interface EchoPublicConfig {\n signalUrl?: string\n welcomeMessage?: string\n suggestedQuestions?: string[]\n brandColor?: string\n assistantName?: string\n assistantAvatar?: string\n}\n\nexport const SONOR_PUBLIC_ECHO_DEFAULTS: EchoPublicConfig = {\n signalUrl: 'https://signal.sonor.io',\n welcomeMessage:\n \"Hi! I'm Echo, Sonor's AI assistant. I can answer questions about our platform, help you understand pricing, or get you started with a demo. What would you like to know?\",\n suggestedQuestions: [\n 'What does Sonor do?',\n 'How does Signal AI work?',\n 'What are the pricing plans?',\n 'Can I migrate from HubSpot?',\n 'How does the SEO module work?',\n ],\n brandColor: '#2563eb', // blue-600 (~5.2:1 on white, AA); overridden by --sk-primary CSS var or API brand_primary\n assistantName: 'Echo',\n}\n\nexport function getEchoWidgetProps(config: EchoPublicConfig = SONOR_PUBLIC_ECHO_DEFAULTS) {\n return {\n signal_enabled: true,\n signal_url: config.signalUrl || SONOR_PUBLIC_ECHO_DEFAULTS.signalUrl,\n welcome_message: config.welcomeMessage || SONOR_PUBLIC_ECHO_DEFAULTS.welcomeMessage,\n suggested_questions: config.suggestedQuestions || SONOR_PUBLIC_ECHO_DEFAULTS.suggestedQuestions,\n brand_color: config.brandColor || SONOR_PUBLIC_ECHO_DEFAULTS.brandColor,\n assistant_name: config.assistantName || SONOR_PUBLIC_ECHO_DEFAULTS.assistantName,\n assistant_avatar: config.assistantAvatar,\n }\n}\n"]}
|
package/dist/fleet/index.js
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunk5IOMLUQS_js = require('../chunk-5IOMLUQS.js');
|
|
5
5
|
var chunk7THQ4UW3_js = require('../chunk-7THQ4UW3.js');
|
|
6
6
|
require('../chunk-HGNSJXWT.js');
|
|
7
7
|
require('../chunk-5RNAUYWE.js');
|
|
8
|
-
require('../chunk-
|
|
9
|
-
require('../chunk-
|
|
10
|
-
require('../chunk-
|
|
8
|
+
require('../chunk-3NDDCSWR.js');
|
|
9
|
+
require('../chunk-T742S2CY.js');
|
|
10
|
+
require('../chunk-LGFRHT34.js');
|
|
11
11
|
require('../chunk-SNAQBZPT.js');
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
Object.defineProperty(exports, "FLEET_HEARTBEAT_PATH", {
|
|
16
16
|
enumerable: true,
|
|
17
|
-
get: function () { return
|
|
17
|
+
get: function () { return chunk5IOMLUQS_js.FLEET_HEARTBEAT_PATH; }
|
|
18
18
|
});
|
|
19
19
|
Object.defineProperty(exports, "FleetHeartbeat", {
|
|
20
20
|
enumerable: true,
|
|
21
|
-
get: function () { return
|
|
21
|
+
get: function () { return chunk5IOMLUQS_js.FleetHeartbeat; }
|
|
22
22
|
});
|
|
23
23
|
Object.defineProperty(exports, "detectNextVersion", {
|
|
24
24
|
enumerable: true,
|
|
25
|
-
get: function () { return
|
|
25
|
+
get: function () { return chunk5IOMLUQS_js.detectNextVersion; }
|
|
26
26
|
});
|
|
27
27
|
Object.defineProperty(exports, "sendFleetHeartbeat", {
|
|
28
28
|
enumerable: true,
|
|
29
|
-
get: function () { return
|
|
29
|
+
get: function () { return chunk5IOMLUQS_js.sendFleetHeartbeat; }
|
|
30
30
|
});
|
|
31
31
|
Object.defineProperty(exports, "FLEET_CONTRACT_VERSION", {
|
|
32
32
|
enumerable: true,
|
package/dist/fleet/index.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { FLEET_HEARTBEAT_PATH, FleetHeartbeat, detectNextVersion, sendFleetHeartbeat } from '../chunk-
|
|
2
|
+
export { FLEET_HEARTBEAT_PATH, FleetHeartbeat, detectNextVersion, sendFleetHeartbeat } from '../chunk-EJTRU275.mjs';
|
|
3
3
|
export { FLEET_CONTRACT_VERSION, FLEET_MODULES, FLEET_MODULES_MAX, FLEET_SITE_MAX_LENGTH, FLEET_VERSION_MAX_LENGTH, FLEET_VERSION_PATTERN, buildFleetHeartbeatPayload, isFleetModule, normalizeFleetModules, normalizeFleetSite, sanitizeFleetVersion } from '../chunk-4WCA2HM6.mjs';
|
|
4
4
|
import '../chunk-ZVBLXXNJ.mjs';
|
|
5
5
|
import '../chunk-A6UYV475.mjs';
|
|
6
|
-
import '../chunk-
|
|
7
|
-
import '../chunk-
|
|
8
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-ZZ6P27A5.mjs';
|
|
7
|
+
import '../chunk-TBAP7JNJ.mjs';
|
|
8
|
+
import '../chunk-SIHPFJ6C.mjs';
|
|
9
9
|
import '../chunk-BEXTDHO4.mjs';
|
|
10
10
|
//# sourceMappingURL=index.mjs.map
|
|
11
11
|
//# sourceMappingURL=index.mjs.map
|
package/dist/forms/index.js
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkWI6RV2U4_js = require('../chunk-WI6RV2U4.js');
|
|
5
5
|
var chunkDVYYGHSG_js = require('../chunk-DVYYGHSG.js');
|
|
6
6
|
var chunkYVJASVVK_js = require('../chunk-YVJASVVK.js');
|
|
7
|
-
require('../chunk-
|
|
8
|
-
var
|
|
7
|
+
require('../chunk-ITJ5ZF33.js');
|
|
8
|
+
var chunkRKRCWQBU_js = require('../chunk-RKRCWQBU.js');
|
|
9
9
|
require('../chunk-HGNSJXWT.js');
|
|
10
|
-
require('../chunk-
|
|
10
|
+
require('../chunk-ZRCA5YGZ.js');
|
|
11
11
|
var chunkXA2GJFVM_js = require('../chunk-XA2GJFVM.js');
|
|
12
|
-
var
|
|
12
|
+
var chunkA4WTX36Y_js = require('../chunk-A4WTX36Y.js');
|
|
13
13
|
require('../chunk-5XFFUP6D.js');
|
|
14
|
-
var
|
|
14
|
+
var chunkW6GQNGIM_js = require('../chunk-W6GQNGIM.js');
|
|
15
15
|
require('../chunk-KHPJ3CEL.js');
|
|
16
16
|
require('../chunk-P4Y75QSU.js');
|
|
17
17
|
require('../chunk-VJMPIRSD.js');
|
|
18
|
-
var
|
|
19
|
-
require('../chunk-
|
|
20
|
-
require('../chunk-
|
|
18
|
+
var chunk3NDDCSWR_js = require('../chunk-3NDDCSWR.js');
|
|
19
|
+
require('../chunk-T742S2CY.js');
|
|
20
|
+
require('../chunk-LGFRHT34.js');
|
|
21
21
|
require('../chunk-SNAQBZPT.js');
|
|
22
22
|
|
|
23
23
|
// src/forms/formsApi.ts
|
|
@@ -49,7 +49,7 @@ async function apiRequest(method, path, body) {
|
|
|
49
49
|
const token = await getAuthToken();
|
|
50
50
|
headers["Authorization"] = `Bearer ${token}`;
|
|
51
51
|
}
|
|
52
|
-
const response = await
|
|
52
|
+
const response = await chunk3NDDCSWR_js.sonorFetch(`${baseUrl}${path}`, {
|
|
53
53
|
method,
|
|
54
54
|
headers,
|
|
55
55
|
body: body ? JSON.stringify(body) : void 0
|
|
@@ -340,11 +340,11 @@ async function initializeForms(forms) {
|
|
|
340
340
|
|
|
341
341
|
Object.defineProperty(exports, "FormClient", {
|
|
342
342
|
enumerable: true,
|
|
343
|
-
get: function () { return
|
|
343
|
+
get: function () { return chunkWI6RV2U4_js.FormClient; }
|
|
344
344
|
});
|
|
345
345
|
Object.defineProperty(exports, "ManagedForm", {
|
|
346
346
|
enumerable: true,
|
|
347
|
-
get: function () { return
|
|
347
|
+
get: function () { return chunkWI6RV2U4_js.ManagedForm; }
|
|
348
348
|
});
|
|
349
349
|
Object.defineProperty(exports, "DatePicker", {
|
|
350
350
|
enumerable: true,
|
|
@@ -356,7 +356,7 @@ Object.defineProperty(exports, "FormCelebration", {
|
|
|
356
356
|
});
|
|
357
357
|
Object.defineProperty(exports, "FormEnhancer", {
|
|
358
358
|
enumerable: true,
|
|
359
|
-
get: function () { return
|
|
359
|
+
get: function () { return chunkRKRCWQBU_js.FormEnhancer; }
|
|
360
360
|
});
|
|
361
361
|
Object.defineProperty(exports, "FormFieldComponent", {
|
|
362
362
|
enumerable: true,
|
|
@@ -364,15 +364,15 @@ Object.defineProperty(exports, "FormFieldComponent", {
|
|
|
364
364
|
});
|
|
365
365
|
Object.defineProperty(exports, "useForm", {
|
|
366
366
|
enumerable: true,
|
|
367
|
-
get: function () { return
|
|
367
|
+
get: function () { return chunkA4WTX36Y_js.useForm; }
|
|
368
368
|
});
|
|
369
369
|
Object.defineProperty(exports, "useFormTracking", {
|
|
370
370
|
enumerable: true,
|
|
371
|
-
get: function () { return
|
|
371
|
+
get: function () { return chunkA4WTX36Y_js.useFormTracking; }
|
|
372
372
|
});
|
|
373
373
|
Object.defineProperty(exports, "DEFAULT_FORM_SUCCESS_MESSAGE", {
|
|
374
374
|
enumerable: true,
|
|
375
|
-
get: function () { return
|
|
375
|
+
get: function () { return chunkW6GQNGIM_js.DEFAULT_FORM_SUCCESS_MESSAGE; }
|
|
376
376
|
});
|
|
377
377
|
exports.configureFormsApi = configureFormsApi;
|
|
378
378
|
exports.defineForm = defineForm;
|
package/dist/forms/index.mjs
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { FormClient, ManagedForm } from '../chunk-
|
|
2
|
+
export { FormClient, ManagedForm } from '../chunk-UPF6HX5C.mjs';
|
|
3
3
|
export { DatePicker } from '../chunk-MU3D5IO7.mjs';
|
|
4
4
|
export { FormCelebration } from '../chunk-54CARHDR.mjs';
|
|
5
|
-
import '../chunk-
|
|
6
|
-
export { FormEnhancer } from '../chunk-
|
|
5
|
+
import '../chunk-GSH4DBAD.mjs';
|
|
6
|
+
export { FormEnhancer } from '../chunk-7OOPIYLP.mjs';
|
|
7
7
|
import '../chunk-ZVBLXXNJ.mjs';
|
|
8
|
-
import '../chunk-
|
|
8
|
+
import '../chunk-ZRD75SE5.mjs';
|
|
9
9
|
export { FormField as FormFieldComponent } from '../chunk-VJV7WUR2.mjs';
|
|
10
|
-
export { useForm, useFormTracking } from '../chunk-
|
|
10
|
+
export { useForm, useFormTracking } from '../chunk-EG3F5AHL.mjs';
|
|
11
11
|
import '../chunk-QRHVMTHF.mjs';
|
|
12
|
-
export { DEFAULT_FORM_SUCCESS_MESSAGE } from '../chunk-
|
|
12
|
+
export { DEFAULT_FORM_SUCCESS_MESSAGE } from '../chunk-RKWBC43M.mjs';
|
|
13
13
|
import '../chunk-TMVKRQGJ.mjs';
|
|
14
14
|
import '../chunk-5SANRSX3.mjs';
|
|
15
15
|
import '../chunk-6EDVCUAG.mjs';
|
|
16
|
-
import { sonorFetch } from '../chunk-
|
|
17
|
-
import '../chunk-
|
|
18
|
-
import '../chunk-
|
|
16
|
+
import { sonorFetch } from '../chunk-ZZ6P27A5.mjs';
|
|
17
|
+
import '../chunk-TBAP7JNJ.mjs';
|
|
18
|
+
import '../chunk-SIHPFJ6C.mjs';
|
|
19
19
|
import '../chunk-BEXTDHO4.mjs';
|
|
20
20
|
|
|
21
21
|
// src/forms/formsApi.ts
|