@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/engage/EchoUiActions.tsx","../src/engage/ChatWidget.tsx"],"names":["alpha","messages","jsx","jsxs"],"mappings":"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","file":"chunk-XLD6K3BV.mjs","sourcesContent":["/**\n * @sonordev/site-kit/engage - Echo UI Actions\n *\n * Renders the optional `uiActions` the visitor Echo concierge returns alongside\n * a chat reply (see signal-api echo.service.ts). Rendered beneath the assistant\n * message in ChatWidget, on-brand with the widget's primary-color tokens.\n *\n * - show_form → compact inline managed form (reuses the canonical\n * forms `useForm` fetch/validate/submit path) with optional prefill.\n * - suggest_action → clickable chip; sends the message as the next turn, or\n * navigates when the action is a path/URL.\n * - show_portfolio_item → intentionally ignored. Portfolio is Upforge-specific\n * and Upforge runs its own custom Echo chat, not this widget.\n */\n\n'use client'\n\nimport React from 'react'\nimport { useForm } from '../forms/useForm'\nimport type { FormField } from '../forms/types'\nimport type { UiAction } from './types'\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** rgba() from the widget's primary-color RGB triplet (mirrors ChatWidget.hexAlpha). */\nfunction alpha(rgb: string, a: number): string {\n return `rgba(var(--sk-primary-rgb, ${rgb}), ${a})`\n}\n\nfunction asString(v: unknown): string | undefined {\n return typeof v === 'string' && v.trim() ? v : undefined\n}\n\nfunction asRecord(v: unknown): Record<string, unknown> | undefined {\n return v && typeof v === 'object' && !Array.isArray(v) ? (v as Record<string, unknown>) : undefined\n}\n\n/** A path / URL / scheme we should navigate to rather than send as a chat turn. */\nfunction isNavigable(action: string): boolean {\n return /^(https?:\\/\\/|\\/|#|tel:|mailto:)/i.test(action.trim())\n}\n\n// ---------------------------------------------------------------------------\n// Inline managed form (show_form)\n// ---------------------------------------------------------------------------\n\ninterface InlineManagedFormProps {\n slug: string\n prefill?: Record<string, unknown>\n primaryColor: string\n primaryRgb: string\n}\n\nconst DISPLAY_ONLY: ReadonlyArray<string> = ['heading', 'section_header', 'paragraph']\n\nfunction InlineManagedForm({ slug, prefill, primaryColor, primaryRgb }: InlineManagedFormProps) {\n const {\n form,\n isLoading,\n fetchError,\n submitError,\n visibleFields,\n values,\n errors,\n setFieldValue,\n submit,\n isSubmitting,\n isComplete,\n } = useForm(slug, { initialValues: prefill || {} })\n\n const cardStyle: React.CSSProperties = {\n marginTop: 8,\n padding: 12,\n borderRadius: 12,\n border: `1px solid ${alpha(primaryRgb, 0.25)}`,\n backgroundColor: alpha(primaryRgb, 0.04),\n }\n\n if (isLoading) {\n return (\n <div style={cardStyle}>\n <p style={{ margin: 0, fontSize: 13, color: 'var(--sk-text-tertiary, #9ca3af)' }}>Loading form…</p>\n </div>\n )\n }\n\n if (fetchError || !form) {\n return (\n <div style={cardStyle}>\n <p style={{ margin: 0, fontSize: 13, color: 'var(--sk-text-tertiary, #9ca3af)' }}>\n This form is unavailable right now.\n </p>\n </div>\n )\n }\n\n if (isComplete) {\n return (\n <div style={cardStyle} role=\"status\" aria-live=\"polite\">\n <p style={{ margin: 0, fontSize: 13.5, color: 'var(--sk-text-primary, #111827)', lineHeight: 1.5 }}>\n {form.success_message}\n </p>\n </div>\n )\n }\n\n const inputBase: React.CSSProperties = {\n width: '100%',\n padding: '8px 10px',\n borderRadius: 8,\n // Longhand (not the `border` shorthand) so the error-state `borderColor`\n // override doesn't mix shorthand+longhand and trigger React's style warning.\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: 'var(--sk-border, #e5e7eb)',\n backgroundColor: 'var(--sk-bg, #ffffff)',\n color: 'var(--sk-text-primary, #111827)',\n fontSize: 13.5,\n boxSizing: 'border-box',\n outline: 'none',\n }\n\n const renderField = (field: FormField) => {\n const value = values[field.slug]\n const strValue = value == null ? '' : String(value)\n const err = errors[field.slug]\n const labelEl =\n !field.hide_label && field.label ? (\n <label\n htmlFor={`echo-form-${form.id}-${field.slug}`}\n style={{ display: 'block', fontSize: 12.5, fontWeight: 600, marginBottom: 4, color: 'var(--sk-text-secondary, #4b5563)' }}\n >\n {field.label}\n {field.is_required ? <span style={{ color: 'var(--sk-error, #dc2626)' }}> *</span> : null}\n </label>\n ) : null\n const id = `echo-form-${form.id}-${field.slug}`\n const common = {\n id,\n placeholder: field.placeholder || (field.hide_label ? field.label : undefined),\n 'aria-invalid': !!err,\n style: { ...inputBase, ...(err ? { borderColor: 'var(--sk-error, #dc2626)' } : {}) },\n } as const\n\n let control: React.ReactNode\n switch (field.field_type) {\n case 'textarea':\n control = (\n <textarea\n {...common}\n rows={3}\n value={strValue}\n onChange={(e) => setFieldValue(field.slug, e.target.value)}\n style={{ ...common.style, resize: 'vertical' as const }}\n />\n )\n break\n case 'select':\n control = (\n <select {...common} value={strValue} onChange={(e) => setFieldValue(field.slug, e.target.value)}>\n <option value=\"\">{field.placeholder || 'Select…'}</option>\n {(field.options || []).map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n )\n break\n case 'radio':\n control = (\n <div role=\"radiogroup\" style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {(field.options || []).map((opt) => (\n <label key={opt.value} style={{ display: 'flex', alignItems: 'center', gap: 6, fontSize: 13, cursor: 'pointer' }}>\n <input\n type=\"radio\"\n name={id}\n checked={strValue === opt.value}\n onChange={() => setFieldValue(field.slug, opt.value)}\n />\n {opt.label}\n </label>\n ))}\n </div>\n )\n break\n case 'checkbox':\n control = (\n <label style={{ display: 'flex', alignItems: 'center', gap: 6, fontSize: 13, cursor: 'pointer' }}>\n <input\n type=\"checkbox\"\n checked={value === true || value === 'true'}\n onChange={(e) => setFieldValue(field.slug, e.target.checked)}\n />\n {field.placeholder || field.label}\n </label>\n )\n break\n default: {\n const typeMap: Record<string, string> = {\n email: 'email',\n phone: 'tel',\n tel: 'tel',\n number: 'number',\n date: 'date',\n time: 'time',\n datetime: 'datetime-local',\n }\n control = (\n <input\n {...common}\n type={typeMap[field.field_type] || 'text'}\n value={strValue}\n onChange={(e) => setFieldValue(field.slug, e.target.value)}\n />\n )\n }\n }\n\n return (\n <div key={field.id || field.slug} style={{ marginBottom: 8 }}>\n {field.field_type === 'checkbox' ? null : labelEl}\n {control}\n {err ? <p style={{ margin: '4px 0 0', fontSize: 11.5, color: 'var(--sk-error, #dc2626)' }}>{err}</p> : null}\n </div>\n )\n }\n\n return (\n <form\n style={cardStyle}\n onSubmit={(e) => {\n e.preventDefault()\n void submit()\n }}\n >\n {form.name ? (\n <div style={{ fontSize: 13.5, fontWeight: 600, marginBottom: 8, color: 'var(--sk-text-primary, #111827)' }}>\n {form.name}\n </div>\n ) : null}\n\n {visibleFields.map((field) => {\n if (field.field_type === 'hidden') return null\n if (DISPLAY_ONLY.includes(field.field_type)) {\n return (\n <p key={field.id || field.slug} style={{ margin: '0 0 8px', fontSize: 12.5, color: 'var(--sk-text-secondary, #4b5563)' }}>\n {field.label}\n </p>\n )\n }\n return renderField(field)\n })}\n\n {submitError ? (\n <p role=\"alert\" style={{ margin: '0 0 8px', fontSize: 12, color: 'var(--sk-error, #dc2626)' }}>\n {submitError}\n </p>\n ) : null}\n\n <button\n type=\"submit\"\n disabled={isSubmitting}\n style={{\n width: '100%',\n padding: '9px 14px',\n borderRadius: 8,\n border: 'none',\n backgroundColor: primaryColor,\n color: '#fff',\n fontSize: 13.5,\n fontWeight: 600,\n cursor: isSubmitting ? 'default' : 'pointer',\n opacity: isSubmitting ? 0.7 : 1,\n }}\n >\n {isSubmitting ? 'Sending…' : form.submit_button_text || 'Submit'}\n </button>\n </form>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Suggestion-action chip (suggest_action)\n// ---------------------------------------------------------------------------\n\ninterface SuggestActionChipProps {\n action?: string\n message: string\n primaryColor: string\n primaryRgb: string\n onSuggest: (action: string | undefined, message: string) => void\n}\n\nfunction SuggestActionChip({ action, message, primaryColor, primaryRgb, onSuggest }: SuggestActionChipProps) {\n return (\n <button\n type=\"button\"\n onClick={() => onSuggest(action, message)}\n style={{\n padding: '6px 12px',\n borderRadius: 16,\n border: `1px solid ${primaryColor}`,\n backgroundColor: alpha(primaryRgb, 0.063),\n color: primaryColor,\n fontSize: 13,\n cursor: 'pointer',\n }}\n >\n {message}\n </button>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Dispatcher\n// ---------------------------------------------------------------------------\n\nexport interface EchoUiActionsProps {\n actions: UiAction[]\n primaryColor: string\n primaryRgb: string\n /** Called by a suggest_action chip — send the message as the next turn or navigate. */\n onSuggest: (action: string | undefined, message: string) => void\n}\n\nexport function EchoUiActions({ actions, primaryColor, primaryRgb, onSuggest }: EchoUiActionsProps) {\n if (!actions?.length) return null\n\n // Group the suggest_action chips so they flow together like the suggestion row.\n const chips = actions.filter((a) => a?.type === 'suggest_action')\n const forms = actions.filter((a) => a?.type === 'show_form')\n // show_portfolio_item (and any unknown type) is intentionally not rendered here.\n\n if (!chips.length && !forms.length) return null\n\n return (\n <div style={{ marginTop: 8, display: 'flex', flexDirection: 'column', gap: 8 }}>\n {forms.map((a, i) => {\n const slug = asString(a.data?.formSlug)\n if (!slug) return null\n return (\n <InlineManagedForm\n key={`form-${slug}-${i}`}\n slug={slug}\n prefill={asRecord(a.data?.prefill)}\n primaryColor={primaryColor}\n primaryRgb={primaryRgb}\n />\n )\n })}\n\n {chips.length ? (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 6 }}>\n {chips.map((a, i) => {\n const message = asString(a.data?.message)\n const action = asString(a.data?.action)\n // A chip needs a label — fall back to the action when no message is given.\n const label = message || action\n if (!label) return null\n return (\n <SuggestActionChip\n key={`chip-${i}`}\n action={action}\n message={label}\n primaryColor={primaryColor}\n primaryRgb={primaryRgb}\n onSuggest={onSuggest}\n />\n )\n })}\n </div>\n ) : null}\n </div>\n )\n}\n\nexport { isNavigable }\n","/**\n * @sonordev/site-kit/engage - Chat Widget (Redesigned)\n *\n * Features:\n * - Pulls brand colors (primary/secondary) + business info from project settings via API\n * - Welcome screen with quick-action chips before first message\n * - Echo (AI) chat when mode is ai / hybrid; gateway returns Echo responses\n * - Automated handoff to live agent (re-checks availability; if agents online, POST handoff)\n * - Managed offline form when nobody is online (configurable heading/subheading)\n * - Socket.io with auto-reconnect for real-time live chat\n * - Proper AI → Live → Offline sequence routing\n */\n\n'use client'\n\nimport React, { useState, useRef, useEffect, useCallback } from 'react'\nimport ReactMarkdown from 'react-markdown'\nimport type { ChatConfig, UiAction } from './types'\nimport { EchoUiActions, isNavigable } from './EchoUiActions'\n// Canonical transport — refreshes a stale minted token and retries once on 401.\n// The credential is passed via options.apiKey (NOT an x-api-key/Authorization\n// header) so sonorFetch injects the freshest token; a hand-set header would pin\n// the stale build-time seed and 401.\nimport { sonorFetch } from '../shared/sonorFetch'\n\n// Socket type — the actual library is lazy-loaded via socket-loader.ts\n// to keep socket.io-client out of the main bundle entirely.\ntype Socket = { connected: boolean; disconnect: () => void; on: (ev: string, fn: (...args: any[]) => void) => void; emit: (ev: string, data?: any) => void }\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface ChatWidgetProps {\n /** Optional: resolved from API key via project-info when not provided */\n projectId?: string\n config?: Partial<ChatConfig>\n apiUrl?: string\n /** Signal API base URL for direct AI chat (no Portal passthrough) */\n signalUrl?: string\n /** Clickable question chips shown in the welcome screen before the first message */\n suggested_questions?: string[]\n /** Name shown in the chat header for the AI assistant (overrides API config) */\n assistant_name?: string\n /** Welcome message shown when chat first opens (overrides API config) */\n welcome_message?: string\n /** Avatar URL for the assistant shown in the header */\n assistant_avatar?: string\n}\n\ninterface MessageAttachment {\n name: string\n url: string\n size?: number\n mimeType?: string\n}\n\ninterface Message {\n id: string\n role: 'user' | 'assistant' | 'agent' | 'system'\n content: string\n timestamp: Date\n agentName?: string\n attachments?: MessageAttachment[]\n suggestions?: string[]\n sendFailed?: boolean\n /** When true, show \"Talk to a person\" button (AI cannot answer or user requested handoff) */\n offerHandoff?: boolean\n /** Optional inline UI actions returned by the visitor Echo endpoint (forms, suggestion chips). */\n uiActions?: UiAction[]\n}\n\ninterface AvailabilityStatus {\n available: boolean\n mode: 'live' | 'ai' | 'offline'\n agentsOnline: number\n operatingHoursActive: boolean\n}\n\ninterface OfflineFormData {\n name: string\n email: string\n phone: string\n message: string\n}\n\n/** Enriched widget config from API (engage_chat_config + project settings) */\ninterface WidgetConfigFromApi {\n // Chat config fields\n is_enabled?: boolean\n position?: string\n initial_message?: string\n welcome_message?: string\n form_heading?: string\n form_description?: string\n offline_message?: string\n offlineFormSlug?: string\n chat_mode?: string\n signal_enabled?: boolean\n offline_mode?: string\n offline_heading?: string\n offline_subheading?: string\n welcome_screen_enabled?: boolean\n welcome_quick_actions?: string[]\n handoff_enabled?: boolean\n show_powered_by?: boolean\n business_hours?: any\n // Branding from Project Settings\n brand_primary?: string\n logo_url?: string\n project_name?: string\n // Business info from Project Settings\n business_info?: {\n name?: string\n phone?: string\n domain?: string\n address?: string\n hours?: any\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction getApiConfig() {\n const isDev = typeof process !== 'undefined' && process.env?.NODE_ENV === 'development'\n const defaultApiUrl = isDev && process.env?.SONOR_API_URL\n ? process.env.SONOR_API_URL\n : 'https://api.sonor.io'\n const defaultSignalUrl = isDev && (process.env?.SONOR_SIGNAL_URL || process.env?.NEXT_PUBLIC_SIGNAL_API_URL)\n ? (process.env.SONOR_SIGNAL_URL || process.env.NEXT_PUBLIC_SIGNAL_API_URL)\n : 'https://signal.sonor.io'\n const apiUrl =\n typeof window !== 'undefined'\n ? (window as any).__SITE_KIT_API_URL__ || defaultApiUrl\n : defaultApiUrl\n const apiKey = typeof window !== 'undefined' ? (window as any).__SITE_KIT_API_KEY__ : undefined\n const signalUrl =\n typeof window !== 'undefined'\n ? (window as any).__SITE_KIT_SIGNAL_URL__ || defaultSignalUrl\n : defaultSignalUrl\n return { apiUrl, apiKey, signalUrl }\n}\n\nfunction generateVisitorId(): string {\n const stored = typeof localStorage !== 'undefined' ? localStorage.getItem('engage_visitor_id') : null\n if (stored) return stored\n const id = `visitor_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\n if (typeof localStorage !== 'undefined') localStorage.setItem('engage_visitor_id', id)\n return id\n}\n\n/** Convert plain URLs in text to markdown links so they render as buttons. Skips URLs already inside markdown links. */\nfunction linkifyUrls(text: string): string {\n return text.replace(\n /(^|[^(\\]])(https?:\\/\\/[^\\s<>\"{}|\\\\^`[\\])]+)/g,\n (_, before, url) => `${before}[${url}](${url})`,\n )\n}\n\n/** Detect if text expresses intent to talk to a live person */\nfunction userRequestedHandoff(text: string): boolean {\n const lower = text.toLowerCase().trim()\n const patterns = [\n /\\b(talk|speak)\\s+(to|with)\\s+(a\\s+)?(person|human|agent|representative|someone)\\b/,\n /\\b(real|live)\\s+(person|human|agent|support)\\b/,\n /\\bconnect\\s+(me\\s+)?(with|to)\\s+(a\\s+)?(person|human|agent)\\b/,\n /\\b(need|want)\\s+(to\\s+)?(talk|speak)\\s+(to|with)\\s+(someone|a\\s+person)\\b/,\n /\\bhuman\\s+(support|agent|help)\\b/,\n /\\b(talk|speak)\\s+to\\s+(a\\s+)?person\\b/,\n /\\bget\\s+(a\\s+)?(person|human)\\b/,\n ]\n return patterns.some((p) => p.test(lower))\n}\n\n/** Darken / lighten a hex colour */\nfunction adjustColor(hex: string, amount: number): string {\n const num = parseInt(hex.replace('#', ''), 16)\n const r = Math.min(255, Math.max(0, (num >> 16) + amount))\n const g = Math.min(255, Math.max(0, ((num >> 8) & 0x00ff) + amount))\n const b = Math.min(255, Math.max(0, (num & 0x0000ff) + amount))\n return `#${((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1)}`\n}\n\n/** Determine if a hex colour is light enough to need dark text */\nfunction isLightColor(hex: string): boolean {\n const num = parseInt(hex.replace('#', ''), 16)\n const r = num >> 16\n const g = (num >> 8) & 0x00ff\n const b = num & 0x0000ff\n return (r * 299 + g * 587 + b * 114) / 1000 > 160\n}\n\n/**\n * SSR-safe brand color: same on server and first client render (hydration).\n * `--sk-primary` is applied after mount in useEffect — reading getComputedStyle during render\n * caused server (API/config hex) vs client (CSS rgb) mismatches on the launcher button.\n */\nfunction staticPrimaryColor(apiFallback: string | undefined, hardDefault: string): string {\n return apiFallback || hardDefault\n}\n\n/**\n * Convert a hex color to an \"r, g, b\" string for use in rgba().\n * Returns the fallback if the input is not a valid hex color.\n */\nfunction hexToRgbString(hex: string, fallback = '37, 99, 235'): string {\n const match = hex.replace('#', '').match(/^([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i)\n if (!match) return fallback\n return `${parseInt(match[1], 16)}, ${parseInt(match[2], 16)}, ${parseInt(match[3], 16)}`\n}\n\n/**\n * Generate an rgba() value from a CSS custom property holding an RGB triplet.\n * Usage: hexAlpha('--sk-primary-rgb', 0.125) → \"rgba(var(--sk-primary-rgb, 37, 99, 235), 0.125)\"\n */\nfunction hexAlpha(rgbVar: string, alpha: number, fallbackRgb = '37, 99, 235'): string {\n return `rgba(var(${rgbVar}, ${fallbackRgb}), ${alpha})`\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function ChatWidget({ projectId: propProjectId, config, apiUrl: propApiUrl, signalUrl: propSignalUrl, suggested_questions: propSuggestedQuestions, assistant_name: propAssistantName, welcome_message: propWelcomeMessage, assistant_avatar: propAssistantAvatar }: ChatWidgetProps) {\n // Resolve projectId from API key when not provided (backend derives project from key)\n const [resolvedProjectId, setResolvedProjectId] = useState<string | null>(propProjectId || null)\n const projectId = propProjectId || resolvedProjectId || ''\n\n // State -------------------------------------------------------------------\n const [isOpen, setIsOpen] = useState(false)\n const [messages, setMessages] = useState<Message[]>([])\n const [inputValue, setInputValue] = useState('')\n const [isLoading, setIsLoading] = useState(false)\n const [availability, setAvailability] = useState<AvailabilityStatus | null>(null)\n const [sessionId, setSessionId] = useState<string | null>(null)\n const [visitorId] = useState(generateVisitorId)\n const [agentTyping, setAgentTyping] = useState(false)\n const [showOfflineForm, setShowOfflineForm] = useState(false)\n const [offlineForm, setOfflineForm] = useState<OfflineFormData>({ name: '', email: '', phone: '', message: '' })\n const [offlineSubmitted, setOfflineSubmitted] = useState(false)\n const [connectionStatus, setConnectionStatus] = useState<'connecting' | 'connected' | 'disconnected'>('disconnected')\n const [widgetConfig, setWidgetConfig] = useState<WidgetConfigFromApi | null>(null)\n const [handoffOfflinePrompt, setHandoffOfflinePrompt] = useState<string | null>(null)\n const [pendingFiles, setPendingFiles] = useState<File[]>([])\n const [lastFailedSend, setLastFailedSend] = useState<{ content: string; attachments: MessageAttachment[] } | null>(null)\n const [showWelcome, setShowWelcome] = useState(true)\n const [checkingAvailability, setCheckingAvailability] = useState(false)\n const [checkingHandoff, setCheckingHandoff] = useState(false)\n const [isHandedOff, setIsHandedOff] = useState(false)\n const fileInputRef = useRef<HTMLInputElement>(null)\n const pendingInitialMessageRef = useRef<string | null>(null)\n const apiKeyMissingWarnedRef = useRef(false)\n const siteContextRef = useRef<string | null>(null)\n function ensureApiKey(): string | null {\n const { apiKey } = getApiConfig()\n if (apiKey) return apiKey\n if (!apiKeyMissingWarnedRef.current) {\n apiKeyMissingWarnedRef.current = true\n console.warn('[ChatWidget] API key is required for Engage widget. Set __SITE_KIT_API_KEY__ or pass apiKey via SiteKitProvider.')\n }\n return null\n }\n\n const messagesEndRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const socketRef = useRef<Socket | null>(null)\n const pollingIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null)\n\n // Derived values ----------------------------------------------------------\n const position = config?.position || widgetConfig?.position || 'bottom-right'\n const primaryFallback = staticPrimaryColor(widgetConfig?.brand_primary || config?.buttonColor, '#2563eb')\n const [primaryFromCssVar, setPrimaryFromCssVar] = useState<string | null>(null)\n const primaryColor = primaryFromCssVar ?? primaryFallback\n const primaryRgb = hexToRgbString(primaryColor)\n\n useEffect(() => {\n const cssValue = getComputedStyle(document.documentElement).getPropertyValue('--sk-primary').trim()\n setPrimaryFromCssVar(cssValue || null)\n }, [])\n // assistant_name prop overrides API config; falls back to project/business name\n const businessName = propAssistantName || widgetConfig?.project_name || widgetConfig?.business_info?.name || 'Chat with us'\n // assistant_avatar prop overrides logo from API config\n const logoUrl = propAssistantAvatar || widgetConfig?.logo_url || null\n const welcomeEnabled = widgetConfig?.welcome_screen_enabled !== false\n // suggested_questions prop overrides API welcome_quick_actions\n const quickActions: string[] = propSuggestedQuestions ?? (Array.isArray(widgetConfig?.welcome_quick_actions) ? widgetConfig.welcome_quick_actions : [])\n const showPoweredBy = widgetConfig?.show_powered_by !== false\n // welcome_message prop takes highest priority\n const welcomeMessage =\n propWelcomeMessage ?? widgetConfig?.initial_message ?? widgetConfig?.welcome_message ?? config?.welcomeMessage ?? 'Hi! How can I help you today?'\n const offlineHeading = widgetConfig?.offline_heading ?? 'No agents available right now'\n const offlineSubheading =\n handoffOfflinePrompt ?? widgetConfig?.offline_subheading ?? widgetConfig?.form_description ?? widgetConfig?.offline_message ?? config?.offlineMessage ?? \"Leave us a message and we'll get back to you!\"\n\n const baseUrl = propApiUrl || getApiConfig().apiUrl\n const signalUrl = propSignalUrl || getApiConfig().signalUrl\n\n // Resolve projectId from API key when not provided\n useEffect(() => {\n if (propProjectId || resolvedProjectId) return\n const { apiKey } = getApiConfig()\n if (!apiKey) return\n let cancelled = false\n sonorFetch(`${baseUrl}/api/public/seo/project-info`, {}, { apiKey, retries: 0 })\n .then((res) => (res.ok ? res.json() : null))\n .then((data) => {\n if (cancelled || !data?.valid || !data?.project_id) return\n setResolvedProjectId(data.project_id)\n })\n .catch(() => {})\n return () => { cancelled = true }\n }, [propProjectId, resolvedProjectId, baseUrl])\n\n // -------------------------------------------------------------------------\n // API calls\n // -------------------------------------------------------------------------\n\n const fetchWidgetConfig = useCallback(async () => {\n if (!projectId) return\n const apiKey = ensureApiKey()\n if (!apiKey) return\n try {\n const response = await sonorFetch(`${baseUrl}/engage/widget/config?projectId=${projectId}`, {}, { apiKey, retries: 0 })\n if (response.ok) {\n const { data } = await response.json()\n setWidgetConfig(data ?? null)\n }\n } catch (error) {\n if (process.env.NODE_ENV === 'development') {\n console.warn('[ChatWidget] Config fetch failed:', error instanceof Error ? error.message : error)\n }\n }\n }, [projectId, baseUrl])\n\n const checkAvailability = useCallback(async (): Promise<AvailabilityStatus | null> => {\n if (!projectId) return null\n const apiKey = ensureApiKey()\n if (!apiKey) return null\n try {\n const response = await sonorFetch(`${baseUrl}/engage/widget/availability?projectId=${projectId}`, {}, { apiKey, retries: 0 })\n if (response.ok) {\n const { data } = await response.json()\n setAvailability(data)\n return data\n }\n } catch (error) {\n if (process.env.NODE_ENV === 'development') {\n console.warn('[ChatWidget] Availability check failed:', error instanceof Error ? error.message : error)\n }\n }\n return null\n }, [projectId, baseUrl])\n\n const initSession = useCallback(async () => {\n const apiKey = ensureApiKey()\n if (!apiKey) return null\n try {\n const response = await sonorFetch(`${baseUrl}/engage/widget/session`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n projectId,\n visitorId,\n sourceUrl: typeof window !== 'undefined' ? window.location.href : '',\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : '',\n }),\n }, { apiKey, retries: 0 })\n if (response.ok) {\n const { data } = await response.json()\n const session = data.session ?? data\n const sid = session?.id ?? session?.session_id ?? data.id ?? data.session_id\n const signalEnabled = session?.chat_mode === 'ai' || session?.chat_mode === 'hybrid'\n setSessionId(sid)\n const messages = session?.messages ?? data.messages ?? []\n if (messages.length > 0) {\n setMessages(\n messages.map((m: any) => ({\n id: m.id,\n role: m.role === 'visitor' ? 'user' : m.role,\n content: m.content,\n timestamp: new Date(m.created_at),\n agentName: m.sender_name,\n })),\n )\n }\n return { id: sid, signalEnabled }\n }\n } catch (error) {\n console.error('[ChatWidget] Session init failed:', error)\n }\n return null\n }, [projectId, visitorId, baseUrl])\n\n /** Fetch llms.txt from same origin when chat opens (for site context in Echo) */\n const fetchSiteContext = useCallback(async () => {\n if (siteContextRef.current) return siteContextRef.current\n try {\n const base = typeof window !== 'undefined' ? window.location.origin : ''\n const res = await fetch(`${base}/llms.txt`, { cache: 'no-store' })\n if (res.ok) {\n const text = await res.text()\n if (text?.trim()) siteContextRef.current = text.trim()\n }\n } catch {\n // Ignore - Signal will fall back to fetching from project domain\n }\n return siteContextRef.current\n }, [])\n\n /** Send message directly to Signal API (no Portal passthrough). Auth via x-api-key. */\n const sendToSignalApi = useCallback(\n async (content: string, conversationId?: string | null) => {\n const apiKey = ensureApiKey()\n if (!apiKey) throw new Error('API key required for chat')\n\n const url = `${signalUrl.replace(/\\/$/, '')}/echo/public/chat`\n const siteContext = await fetchSiteContext()\n const body = {\n message: content,\n visitorId,\n ...(conversationId ? { conversationId } : {}),\n pageUrl: typeof window !== 'undefined' ? window.location.href : undefined,\n ...(siteContext ? { siteContext } : {}),\n }\n const res = await sonorFetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n }, { apiKey, retries: 0 })\n const json = await res.json()\n if (!res.ok) {\n throw new Error(json?.error?.message || json?.message || `Signal API error: ${res.status}`)\n }\n const data = json?.data ?? json\n const aiContent = data?.content ?? data?.response ?? data?.message ?? \"I'm sorry, I couldn't process that.\"\n const suggestions = data?.suggestions\n const offerHandoff = data?.offerHandoff === true || data?.offer_handoff === true\n // Optional inline UI actions (show_form / suggest_action / …) from the Echo concierge.\n const uiActions = Array.isArray(data?.uiActions)\n ? (data.uiActions as UiAction[]).filter((a) => a && typeof a === 'object' && typeof a.type === 'string' && a.data && typeof a.data === 'object')\n : undefined\n const newConversationId = data?.conversationId ?? conversationId\n return { content: aiContent, suggestions, offerHandoff, uiActions, conversationId: newConversationId }\n },\n [signalUrl, visitorId, fetchSiteContext],\n )\n\n /**\n * Single source of truth for appending an Echo (Signal) reply as an assistant\n * message. Suggestions, inline uiActions, and the handoff offer all attach\n * here so the three send paths (initial pending message, handleSubmit, and a\n * suggest_action chip) can never drift. `probeContent` is the user text we\n * scan for an explicit handoff request.\n */\n const pushEchoReply = useCallback(\n (\n reply: { content: string; suggestions?: string[]; offerHandoff?: boolean; uiActions?: UiAction[] },\n probeContent: string,\n ) => {\n setMessages((prev) => [\n ...prev,\n {\n id: `ai-${Date.now()}`,\n role: 'assistant',\n content: reply.content,\n timestamp: new Date(),\n ...(reply.suggestions?.length ? { suggestions: reply.suggestions } : {}),\n ...(reply.uiActions?.length ? { uiActions: reply.uiActions } : {}),\n ...(reply.offerHandoff || userRequestedHandoff(probeContent) ? { offerHandoff: true } : {}),\n },\n ])\n },\n [],\n )\n\n // -------------------------------------------------------------------------\n // Socket.io message handler\n // -------------------------------------------------------------------------\n\n const handleSocketMessage = useCallback((data: any) => {\n switch (data.type || data.event) {\n case 'message': {\n const role = data.role === 'visitor' ? 'user' : data.role === 'ai' ? 'assistant' : (data.role as Message['role'])\n const newMessage: Message = {\n id: data.id || `msg-${Date.now()}`,\n role,\n content: data.content ?? '',\n timestamp: new Date(),\n agentName: data.agentName,\n ...(data.attachments?.length ? { attachments: data.attachments } : {}),\n ...(data.suggestions?.length ? { suggestions: data.suggestions as string[] } : {}),\n }\n setMessages((prev) => [...prev, newMessage])\n if (role === 'assistant' || role === 'agent') {\n setAgentTyping(false)\n setIsLoading(false)\n }\n break\n }\n case 'agent:joined':\n setMessages((prev) => [\n ...prev,\n {\n id: `system-${Date.now()}`,\n role: 'system',\n content: data.agentName ? `${data.agentName} has joined the chat.` : 'An agent has joined the chat.',\n timestamp: new Date(),\n },\n ])\n break\n case 'typing':\n setAgentTyping(data.isTyping)\n break\n case 'handoff:initiated':\n setMessages((prev) => [\n ...prev,\n { id: `system-${Date.now()}`, role: 'system', content: data.message || 'Connecting you with a team member...', timestamp: new Date() },\n ])\n break\n case 'chat:closed':\n setMessages((prev) => [\n ...prev,\n { id: `system-${Date.now()}`, role: 'system', content: data.message || 'This chat has been closed.', timestamp: new Date() },\n ])\n break\n }\n }, [])\n\n // -------------------------------------------------------------------------\n // Socket.io connection (with auto-reconnect)\n // -------------------------------------------------------------------------\n\n const connectSocket = useCallback(\n async (currentSessionId: string) => {\n if (socketRef.current?.connected) return\n\n // Disconnect any stale socket first\n if (socketRef.current) {\n socketRef.current.disconnect()\n socketRef.current = null\n }\n\n // Lazy-load socket.io via separate module so bundlers never pull it\n // into the main engage chunk (avoids massive client bundle).\n const { createSocket } = await import('./socket-loader')\n\n const namespaceUrl = `${baseUrl.replace(/\\/$/, '')}/engage/chat`\n const socket = await createSocket(namespaceUrl, {\n query: { projectId, visitorId, sessionId: currentSessionId },\n transports: ['websocket', 'polling'],\n // Auto-reconnect config\n reconnection: true,\n reconnectionAttempts: 10,\n reconnectionDelay: 1000,\n reconnectionDelayMax: 10000,\n timeout: 15000,\n })\n\n socket.on('connect', () => {\n setConnectionStatus('connected')\n console.log('[ChatWidget] Socket.io connected')\n // Re-fetch messages to catch anything missed while disconnected\n if (currentSessionId) {\n const apiKey = ensureApiKey()\n if (apiKey) {\n sonorFetch(`${baseUrl}/engage/widget/messages?sessionId=${currentSessionId}`, {}, { apiKey, retries: 0 })\n .then((res) => (res.ok ? res.json() : null))\n .then((json) => {\n const data = json?.data ?? json\n if (Array.isArray(data) && data.length) {\n setMessages((prev) => {\n const byId = new Map(prev.map((m) => [m.id, m]))\n data.forEach((m: any) =>\n byId.set(m.id, {\n id: m.id,\n role: m.role === 'visitor' ? 'user' : m.role,\n content: m.content,\n timestamp: new Date(m.created_at),\n agentName: m.sender_name,\n attachments: m.attachments,\n }),\n )\n return Array.from(byId.values()).sort((a, b) => (a.timestamp as Date).getTime() - (b.timestamp as Date).getTime())\n })\n }\n })\n .catch((err) => console.warn('[ChatWidget] Refetch messages on reconnect failed', err))\n }\n }\n\n // Retry any buffered message\n if (lastFailedSend) {\n socket.emit('visitor:message', {\n content: lastFailedSend.content,\n attachments: lastFailedSend.attachments?.length ? lastFailedSend.attachments : undefined,\n })\n setLastFailedSend(null)\n setMessages((prev) => prev.filter((m) => !m.sendFailed))\n setIsLoading(true)\n }\n })\n\n socket.on('message', (data: any) => handleSocketMessage({ type: 'message', ...data }))\n socket.on('agent:joined', (data: any) => handleSocketMessage({ type: 'agent:joined', ...data }))\n socket.on('typing', (data: any) => handleSocketMessage({ type: 'typing', ...data }))\n socket.on('handoff:initiated', (data: any) => handleSocketMessage({ type: 'handoff:initiated', ...data }))\n socket.on('chat:closed', (data: any) => handleSocketMessage({ type: 'chat:closed', ...data }))\n\n socket.on('disconnect', (reason) => {\n setConnectionStatus('disconnected')\n console.log('[ChatWidget] Socket disconnected:', reason)\n })\n\n socket.on('reconnect_attempt', (attempt) => {\n setConnectionStatus('connecting')\n console.log(`[ChatWidget] Reconnect attempt #${attempt}`)\n })\n\n socket.on('reconnect_failed', () => {\n console.warn('[ChatWidget] All reconnect attempts failed, falling back to polling')\n if (isOpen && currentSessionId) startPolling(currentSessionId)\n })\n\n socket.on('connect_error', (err) => {\n console.error('[ChatWidget] Socket connect error:', err?.message || err, { baseUrl: namespaceUrl, projectId, visitorId })\n setConnectionStatus('connecting') // socket.io will auto-retry\n })\n\n socketRef.current = socket\n },\n [projectId, visitorId, baseUrl, isOpen, handleSocketMessage, lastFailedSend],\n )\n\n // Polling fallback\n const startPolling = useCallback(\n (currentSessionId: string) => {\n if (pollingIntervalRef.current) return\n pollingIntervalRef.current = setInterval(async () => {\n try {\n const apiKey = ensureApiKey()\n if (!apiKey) return\n const response = await sonorFetch(`${baseUrl}/engage/widget/messages?sessionId=${currentSessionId}`, {}, { apiKey, retries: 0 })\n if (response.ok) {\n const { data } = await response.json()\n setMessages((prev) => {\n const existingIds = new Set(prev.map((m) => m.id))\n const newMessages = data.filter((m: any) => !existingIds.has(m.id))\n if (newMessages.length > 0) {\n return [\n ...prev,\n ...newMessages.map((m: any) => ({\n id: m.id,\n role: m.role === 'visitor' ? 'user' : m.role,\n content: m.content,\n timestamp: new Date(m.created_at),\n agentName: m.sender_name,\n })),\n ]\n }\n return prev\n })\n }\n } catch (error) {\n console.error('[ChatWidget] Polling failed:', error)\n }\n }, 3000)\n },\n [baseUrl],\n )\n\n // -------------------------------------------------------------------------\n // Effects\n // -------------------------------------------------------------------------\n\n // Scroll to bottom on new messages\n useEffect(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' })\n }, [messages, agentTyping])\n\n // Focus input when chat opens and welcome screen is hidden\n useEffect(() => {\n if (isOpen && !showWelcome && inputRef.current) inputRef.current.focus()\n }, [isOpen, showWelcome])\n\n // Fetch config + availability on mount\n useEffect(() => {\n fetchWidgetConfig()\n checkAvailability()\n const interval = setInterval(checkAvailability, 60000)\n return () => {\n clearInterval(interval)\n if (socketRef.current) {\n socketRef.current.disconnect()\n socketRef.current = null\n }\n }\n }, [fetchWidgetConfig, checkAvailability])\n\n // Init session and connect when chat opens (after welcome dismissed and routing decided)\n useEffect(() => {\n if (isOpen && !showWelcome && !checkingAvailability && !showOfflineForm && !sessionId) {\n initSession().then(async (result) => {\n if (!result?.id) return\n const { id, signalEnabled } = result\n const pending = pendingInitialMessageRef.current\n if (pending) {\n pendingInitialMessageRef.current = null\n }\n\n // AI mode: send pending message directly to Signal API (no Portal passthrough)\n if (signalEnabled && pending) {\n setIsLoading(true)\n setMessages((prev) => [\n ...prev,\n { id: `u-${Date.now()}`, role: 'user', content: pending, timestamp: new Date() },\n ])\n try {\n const reply = await sendToSignalApi(pending, id)\n pushEchoReply(reply, pending)\n } catch (err) {\n console.error('[ChatWidget] Signal API error:', err)\n setMessages((prev) => [\n ...prev,\n {\n id: `err-${Date.now()}`,\n role: 'assistant',\n content: 'I apologize, but I encountered an error. Would you like to speak with a team member?',\n timestamp: new Date(),\n suggestions: ['Talk to a person', 'Try again'],\n offerHandoff: true,\n },\n ])\n } finally {\n setIsLoading(false)\n }\n }\n\n // Only connect socket for live-only (non-Signal) projects.\n // Signal projects stay socket-free during the AI phase — the socket\n // connects later if/when a handoff to a live agent is confirmed.\n if (!signalEnabled) {\n setConnectionStatus('connecting')\n await connectSocket(id)\n }\n\n // Live mode: send pending via socket once connected\n if (!signalEnabled && pending) {\n const waitForSocket = () => new Promise<void>((resolve) => {\n const check = (attempts = 0) => {\n if (socketRef.current?.connected || attempts > 20) { resolve(); return }\n setTimeout(() => check(attempts + 1), 150)\n }\n check()\n })\n await waitForSocket()\n if (socketRef.current?.connected) {\n socketRef.current.emit('visitor:message', { content: pending })\n }\n }\n })\n }\n return () => {\n if (pollingIntervalRef.current) clearInterval(pollingIntervalRef.current)\n }\n }, [isOpen, showWelcome, checkingAvailability, showOfflineForm, sessionId, initSession, connectSocket, sendToSignalApi, pushEchoReply])\n\n // -------------------------------------------------------------------------\n // Handlers\n // -------------------------------------------------------------------------\n\n const handleToggle = useCallback(() => {\n setIsOpen((prev) => !prev)\n }, [])\n\n /** Start chatting (dismiss welcome screen) with availability routing */\n const startChat = useCallback(\n async (initialMessage?: string) => {\n setShowWelcome(false)\n\n const beginChatSession = () => {\n setMessages([{ id: 'welcome', role: 'assistant', content: welcomeMessage, timestamp: new Date() }])\n if (initialMessage) {\n // Stash the initial message — the session-init effect will send it\n // once the socket is connected. This avoids duplicate messages.\n pendingInitialMessageRef.current = initialMessage\n const userMsg: Message = { id: `user-${Date.now()}`, role: 'user', content: initialMessage, timestamp: new Date() }\n setMessages((prev) => [...prev, userMsg])\n setIsLoading(true)\n }\n }\n\n // Signal/AI mode → go straight to chat (AI is always available)\n if (widgetConfig?.signal_enabled) {\n beginChatSession()\n return\n }\n\n // ─── Live-only mode: check agent availability ───────────────────\n // No Signal → live chat with human agents or offline form.\n setCheckingAvailability(true)\n\n // First real-time check\n const firstCheck = await checkAvailability()\n if (firstCheck?.available && firstCheck.agentsOnline > 0) {\n setCheckingAvailability(false)\n beginChatSession()\n return\n }\n\n // No agents online – wait ~5 seconds for push notification response.\n // Future: this is where we send a push notification to agents via\n // the Sonor Messenger app. Agents get 5-6 seconds to open the\n // notification and come online before we fall through to the offline form.\n await new Promise((resolve) => setTimeout(resolve, 5000))\n\n // Re-check after the grace period\n const secondCheck = await checkAvailability()\n setCheckingAvailability(false)\n\n if (secondCheck?.available && secondCheck.agentsOnline > 0) {\n // An agent responded – start live chat\n beginChatSession()\n } else {\n // Still no agents – show offline form\n setShowOfflineForm(true)\n }\n },\n [widgetConfig?.signal_enabled, welcomeMessage, checkAvailability],\n )\n\n const uploadWidgetFile = useCallback(\n async (file: File): Promise<MessageAttachment | null> => {\n if (!sessionId || !visitorId) return null\n const apiKey = ensureApiKey()\n if (!apiKey) return null\n const form = new FormData()\n form.append('file', file)\n form.append('sessionId', sessionId)\n form.append('visitorId', visitorId)\n const res = await sonorFetch(`${baseUrl}/engage/widget/upload`, {\n method: 'POST',\n body: form,\n }, { apiKey, retries: 0 })\n if (!res.ok) throw new Error('Upload failed')\n const json = await res.json()\n const d = json?.data ?? json\n return d?.url ? { name: d.name ?? file.name, url: d.url, size: d.size, mimeType: d.mimeType } : null\n },\n [sessionId, visitorId, baseUrl],\n )\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault()\n const hasText = !!inputValue.trim()\n const hasFiles = pendingFiles.length > 0\n if ((!hasText && !hasFiles) || isLoading) return\n\n const content = inputValue.trim() || ''\n let attachments: MessageAttachment[] = []\n if (pendingFiles.length) {\n try {\n for (const file of pendingFiles) {\n const att = await uploadWidgetFile(file)\n if (att) attachments.push(att)\n }\n setPendingFiles([])\n } catch (err) {\n console.error('[ChatWidget] File upload failed', err)\n setMessages((prev) => [...prev, { id: `err-${Date.now()}`, role: 'assistant', content: 'Failed to upload file. Please try again.', timestamp: new Date() }])\n return\n }\n }\n\n const userMessage: Message = {\n id: `user-${Date.now()}`,\n role: 'user',\n content,\n timestamp: new Date(),\n ...(attachments.length ? { attachments } : {}),\n }\n setMessages((prev) => [...prev, userMessage])\n setInputValue('')\n setIsLoading(true)\n\n // AI mode: call Signal API directly (no Portal passthrough)\n // Once handed off to a live agent, messages go through the socket instead.\n if (widgetConfig?.signal_enabled && !isHandedOff && hasText) {\n try {\n const reply = await sendToSignalApi(content, sessionId)\n const lastUserContent = messages.filter((m) => m.role === 'user').slice(-1)[0]?.content ?? ''\n pushEchoReply(reply, lastUserContent)\n } catch (err) {\n console.error('[ChatWidget] Signal API error:', err)\n setMessages((prev) => [\n ...prev,\n {\n id: `err-${Date.now()}`,\n role: 'assistant',\n content: 'I apologize, but I encountered an error. Would you like to speak with a team member?',\n timestamp: new Date(),\n suggestions: ['Talk to a person', 'Try again'],\n offerHandoff: true,\n },\n ])\n } finally {\n setIsLoading(false)\n }\n return\n }\n\n // Live mode: use socket\n const socket = socketRef.current\n if (socket?.connected) {\n socket.emit('visitor:message', { content: userMessage.content, attachments: attachments.length ? attachments : undefined })\n setLastFailedSend(null)\n return\n }\n\n // Buffer for retry on reconnect instead of showing error immediately\n setLastFailedSend({ content: userMessage.content, attachments })\n // Give socket.io a moment to reconnect before showing error\n setTimeout(() => {\n if (!socketRef.current?.connected) {\n setMessages((prev) => [\n ...prev,\n { id: `error-${Date.now()}`, role: 'system', content: 'Reconnecting...', timestamp: new Date(), sendFailed: true },\n ])\n setIsLoading(false)\n }\n }, 3000)\n },\n [inputValue, isLoading, pendingFiles, uploadWidgetFile, widgetConfig?.signal_enabled, isHandedOff, sendToSignalApi, sessionId, pushEchoReply],\n )\n\n /**\n * Send a plain text turn to Echo (used by suggest_action chips). AI-only —\n * uiActions only ever appear in Signal/AI mode, so this mirrors handleSubmit's\n * AI branch (routing through the same sendToSignalApi + pushEchoReply path).\n */\n const sendEchoText = useCallback(\n async (text: string) => {\n const content = text.trim()\n if (!content || isLoading) return\n setMessages((prev) => [\n ...prev,\n { id: `user-${Date.now()}`, role: 'user', content, timestamp: new Date() },\n ])\n setIsLoading(true)\n try {\n const reply = await sendToSignalApi(content, sessionId)\n pushEchoReply(reply, content)\n } catch (err) {\n console.error('[ChatWidget] Signal API error:', err)\n setMessages((prev) => [\n ...prev,\n {\n id: `err-${Date.now()}`,\n role: 'assistant',\n content: 'I apologize, but I encountered an error. Would you like to speak with a team member?',\n timestamp: new Date(),\n suggestions: ['Talk to a person', 'Try again'],\n offerHandoff: true,\n },\n ])\n } finally {\n setIsLoading(false)\n }\n },\n [isLoading, sessionId, sendToSignalApi, pushEchoReply],\n )\n\n /**\n * A suggest_action chip was clicked. Navigate when `action` is a path/URL\n * (internal path / hash same-tab, external URL new tab); otherwise send the\n * human-readable message as the next chat turn.\n */\n const handleSuggestAction = useCallback(\n (action: string | undefined, message: string) => {\n const a = (action || '').trim()\n if (a && isNavigable(a)) {\n if (typeof window !== 'undefined') {\n if (/^https?:\\/\\//i.test(a)) window.open(a, '_blank', 'noopener,noreferrer')\n else window.location.href = a\n }\n return\n }\n if (message?.trim()) void sendEchoText(message)\n },\n [sendEchoText],\n )\n\n const retryFailedSend = useCallback(() => {\n if (!lastFailedSend || !sessionId) return\n const socket = socketRef.current\n if (socket?.connected) {\n socket.emit('visitor:message', { content: lastFailedSend.content, attachments: lastFailedSend.attachments?.length ? lastFailedSend.attachments : undefined })\n setLastFailedSend(null)\n setMessages((prev) => prev.filter((m) => !m.sendFailed))\n setIsLoading(true)\n } else {\n connectSocket(sessionId)\n }\n }, [lastFailedSend, sessionId, connectSocket])\n\n const requestHandoff = useCallback(async () => {\n if (!sessionId) return\n const apiKey = ensureApiKey()\n if (!apiKey) return\n setCheckingHandoff(true)\n try {\n // Backend handles availability check (first check → 5s grace → second check)\n // and emits urgent notifications to agents if available.\n const res = await sonorFetch(`${baseUrl}/engage/widget/handoff`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ sessionId }),\n }, { apiKey, retries: 0 })\n const json = await res.json()\n const available = json?.data?.available === true\n setCheckingHandoff(false)\n\n if (available) {\n // Agents are online and notified — NOW connect the socket so the\n // visitor becomes visible in the agent's dashboard for the first time.\n setIsHandedOff(true)\n setConnectionStatus('connecting')\n await connectSocket(sessionId)\n setMessages((prev) => [\n ...prev,\n { id: `handoff-${Date.now()}`, role: 'system', content: 'Connecting you with a team member. Please hold on!', timestamp: new Date() },\n ])\n } else {\n // No agents online — show offline form\n setHandoffOfflinePrompt(widgetConfig?.offline_subheading ?? \"Nobody is online right now. Leave your details and we'll get back to you.\")\n setShowOfflineForm(true)\n setMessages((prev) => [\n ...prev,\n { id: `handoff-offline-${Date.now()}`, role: 'system', content: offlineHeading, timestamp: new Date() },\n ])\n }\n } catch (error) {\n setCheckingHandoff(false)\n console.error('[ChatWidget] Handoff request failed:', error)\n }\n }, [sessionId, baseUrl, widgetConfig, offlineHeading, connectSocket])\n\n const [offlineError, setOfflineError] = useState<string | null>(null)\n\n const handleOfflineSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault()\n if (!offlineForm.name || !offlineForm.email || !offlineForm.message) return\n const apiKey = ensureApiKey()\n if (!apiKey) return\n setIsLoading(true)\n setOfflineError(null)\n try {\n const response = await sonorFetch(`${baseUrl}/engage/widget/offline-form`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n projectId,\n visitorId,\n ...offlineForm,\n pageUrl: typeof window !== 'undefined' ? window.location.href : '',\n ...(widgetConfig?.offlineFormSlug && { formSlug: widgetConfig.offlineFormSlug }),\n }),\n }, { apiKey, retries: 0 })\n if (response.ok) {\n setOfflineSubmitted(true)\n } else {\n const errorBody = await response.text().catch(() => '')\n console.error(`[ChatWidget] Offline form returned ${response.status}:`, errorBody)\n setOfflineError('Something went wrong. Please try again.')\n }\n } catch (error) {\n console.error('[ChatWidget] Offline form submission failed:', error)\n setOfflineError('Unable to send message. Please check your connection and try again.')\n } finally {\n setIsLoading(false)\n }\n },\n [offlineForm, projectId, visitorId, baseUrl, widgetConfig],\n )\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSubmit(e as any)\n }\n }, [handleSubmit])\n\n const handleTyping = useCallback(() => {\n const socket = socketRef.current\n if (socket?.connected) {\n socket.emit('visitor:typing', { isTyping: true })\n setTimeout(() => {\n if (socketRef.current?.connected) socketRef.current.emit('visitor:typing', { isTyping: false })\n }, 2000)\n }\n }, [])\n\n // -------------------------------------------------------------------------\n // Status label\n // -------------------------------------------------------------------------\n\n const statusLabel = (() => {\n if (showOfflineForm) return null\n if (checkingAvailability) return { dot: '#f59e0b', text: 'Checking for a team member...' }\n if (widgetConfig?.signal_enabled) return { dot: null, text: 'Echo Intelligent Site Assistant' }\n if (availability && availability.agentsOnline > 0) return { dot: '#22c55e', text: 'Online' }\n return { dot: 'var(--sk-text-tertiary, #9ca3af)', text: \"We'll respond soon\" }\n })()\n\n // -------------------------------------------------------------------------\n // Render: Chat Button\n // -------------------------------------------------------------------------\n\n const ChatButton = (\n <button\n type=\"button\"\n data-sk-echo-launcher\n onClick={handleToggle}\n aria-label={isOpen ? 'Close chat' : 'Open chat'}\n style={{\n position: 'fixed',\n [position === 'bottom-left' ? 'left' : 'right']: '20px',\n bottom: 'calc(20px + env(safe-area-inset-bottom, 0px))',\n width: '60px',\n height: '60px',\n borderRadius: '50%',\n backgroundColor: primaryColor,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.25)',\n transition: 'transform 0.2s, box-shadow 0.2s',\n zIndex: 9999,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.transform = 'scale(1.05)'\n e.currentTarget.style.boxShadow = '0 6px 16px rgba(0, 0, 0, 0.3)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.transform = 'scale(1)'\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.25)'\n }}\n >\n {isOpen ? (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n ) : (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n )}\n </button>\n )\n\n // -------------------------------------------------------------------------\n // Render: Header (shared across all views)\n // -------------------------------------------------------------------------\n\n const Header = (\n <div\n style={{\n padding: '16px 20px',\n background: `linear-gradient(135deg, ${primaryColor}, ${adjustColor(primaryColor, -25)})`,\n color: isLightColor(primaryColor) ? '#1a1a1a' : 'white',\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n }}\n >\n {/* Logo or icon */}\n <div\n style={{\n width: 40,\n height: 40,\n borderRadius: '50%',\n backgroundColor: 'rgba(255,255,255,0.2)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n flexShrink: 0,\n }}\n >\n {logoUrl ? (\n <img src={logoUrl} alt=\"\" style={{ width: 28, height: 28, objectFit: 'contain', filter: isLightColor(primaryColor) ? 'none' : 'brightness(0) invert(1)' }} />\n ) : (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n )}\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontWeight: 600, fontSize: 16, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>\n {showOfflineForm ? offlineHeading : businessName}\n </div>\n {statusLabel && (\n <div style={{ fontSize: 13, opacity: 0.9, display: 'flex', alignItems: 'center', gap: 6, marginTop: 2 }}>\n {statusLabel.dot && (\n <span style={{ width: 8, height: 8, borderRadius: '50%', backgroundColor: statusLabel.dot, flexShrink: 0 }} />\n )}\n {statusLabel.text}\n </div>\n )}\n </div>\n\n {/* Connection status indicator */}\n {connectionStatus === 'connecting' && !showWelcome && !showOfflineForm && (\n <div style={{ fontSize: 11, opacity: 0.7, display: 'flex', alignItems: 'center', gap: 4 }}>\n <span style={{ animation: 'chatDot 1s infinite ease-in-out' }}>●</span>\n Connecting\n </div>\n )}\n </div>\n )\n\n // -------------------------------------------------------------------------\n // Render: Welcome Screen\n // -------------------------------------------------------------------------\n\n const WelcomeScreen = (\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', padding: 20, gap: 16 }}>\n <div style={{ textAlign: 'center', paddingTop: 8 }}>\n <div style={{ fontSize: 15, color: 'var(--sk-text-primary, #374151)', lineHeight: 1.5 }}>\n {welcomeMessage}\n </div>\n </div>\n\n {/* Quick action chips */}\n {quickActions.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {quickActions.map((action, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => startChat(action)}\n style={{\n padding: '12px 16px',\n borderRadius: 12,\n border: `1px solid ${hexAlpha('--sk-primary-rgb', 0.2, primaryRgb)}`,\n backgroundColor: hexAlpha('--sk-primary-rgb', 0.031, primaryRgb),\n color: primaryColor,\n fontSize: 14,\n cursor: 'pointer',\n textAlign: 'left',\n transition: 'background-color 0.15s, border-color 0.15s',\n lineHeight: 1.4,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = hexAlpha('--sk-primary-rgb', 0.082, primaryRgb)\n e.currentTarget.style.borderColor = hexAlpha('--sk-primary-rgb', 0.333, primaryRgb)\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = hexAlpha('--sk-primary-rgb', 0.031, primaryRgb)\n e.currentTarget.style.borderColor = hexAlpha('--sk-primary-rgb', 0.2, primaryRgb)\n }}\n >\n {action}\n </button>\n ))}\n </div>\n )}\n\n {/* Start chat button */}\n <button\n type=\"button\"\n onClick={() => startChat()}\n style={{\n padding: '12px 20px',\n borderRadius: 12,\n border: 'none',\n backgroundColor: primaryColor,\n color: isLightColor(primaryColor) ? '#1a1a1a' : 'white',\n fontSize: 14,\n fontWeight: 600,\n cursor: 'pointer',\n marginTop: 'auto',\n }}\n >\n Start a conversation\n </button>\n\n {/* Business phone */}\n {widgetConfig?.business_info?.phone && (\n <div style={{ textAlign: 'center', fontSize: 13, color: 'var(--sk-text-secondary, #6b7280)' }}>\n Or call us at{' '}\n <a href={`tel:${widgetConfig.business_info.phone}`} style={{ color: primaryColor, textDecoration: 'none', fontWeight: 500 }}>\n {widgetConfig.business_info.phone}\n </a>\n </div>\n )}\n </div>\n )\n\n // -------------------------------------------------------------------------\n // Render: Offline Form\n // -------------------------------------------------------------------------\n\n const OfflineFormView = (\n <div style={{ padding: 20, flex: 1, overflowY: 'auto' }}>\n {offlineSubmitted ? (\n <div style={{ textAlign: 'center', padding: 20 }}>\n <div style={{ width: 56, height: 56, borderRadius: '50%', backgroundColor: hexAlpha('--sk-primary-rgb', 0.082, primaryRgb), display: 'flex', alignItems: 'center', justifyContent: 'center', margin: '0 auto 16px' }}>\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={primaryColor} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </div>\n <h3 style={{ margin: '0 0 8px', fontSize: 18, fontWeight: 600, color: 'var(--sk-text-primary, #111827)' }}>Message Sent!</h3>\n <p style={{ margin: 0, color: 'var(--sk-text-secondary, #6b7280)', fontSize: 14 }}>{offlineSubheading}</p>\n </div>\n ) : (\n <form onSubmit={handleOfflineSubmit}>\n <p style={{ margin: '0 0 16px', color: 'var(--sk-text-secondary, #6b7280)', fontSize: 14 }}>{offlineSubheading}</p>\n {[\n { name: 'name' as const, type: 'text', placeholder: 'Your name *', required: true },\n { name: 'email' as const, type: 'email', placeholder: 'Your email *', required: true },\n { name: 'phone' as const, type: 'tel', placeholder: 'Phone (optional)', required: false },\n ].map((field) => (\n <div key={field.name} style={{ marginBottom: 12 }}>\n <input\n type={field.type}\n placeholder={field.placeholder}\n value={offlineForm[field.name]}\n onChange={(e) => setOfflineForm((prev) => ({ ...prev, [field.name]: e.target.value }))}\n required={field.required}\n style={{ width: '100%', padding: '10px 12px', borderRadius: 8, border: '1px solid var(--sk-border, #e5e7eb)', fontSize: 14, outline: 'none', boxSizing: 'border-box' }}\n onFocus={(e) => (e.currentTarget.style.borderColor = primaryColor)}\n onBlur={(e) => (e.currentTarget.style.borderColor = 'var(--sk-border, #e5e7eb)')}\n />\n </div>\n ))}\n <div style={{ marginBottom: 16 }}>\n <textarea\n placeholder=\"How can we help? *\"\n value={offlineForm.message}\n onChange={(e) => setOfflineForm((prev) => ({ ...prev, message: e.target.value }))}\n required\n rows={4}\n style={{ width: '100%', padding: '10px 12px', borderRadius: 8, border: '1px solid var(--sk-border, #e5e7eb)', fontSize: 14, outline: 'none', resize: 'vertical', boxSizing: 'border-box' }}\n onFocus={(e) => (e.currentTarget.style.borderColor = primaryColor)}\n onBlur={(e) => (e.currentTarget.style.borderColor = 'var(--sk-border, #e5e7eb)')}\n />\n </div>\n {offlineError && (\n <div style={{ padding: '8px 12px', borderRadius: 8, backgroundColor: 'var(--sk-error-bg, #fef2f2)', border: '1px solid var(--sk-error, #fecaca)', color: 'var(--sk-error, #dc2626)', fontSize: 13, marginBottom: 12 }}>\n {offlineError}\n </div>\n )}\n <button\n type=\"submit\"\n disabled={isLoading}\n style={{\n width: '100%',\n padding: '12px',\n borderRadius: 8,\n border: 'none',\n backgroundColor: primaryColor,\n color: isLightColor(primaryColor) ? '#1a1a1a' : 'white',\n fontSize: 14,\n fontWeight: 600,\n cursor: isLoading ? 'wait' : 'pointer',\n opacity: isLoading ? 0.7 : 1,\n }}\n >\n {isLoading ? 'Sending...' : 'Send Message'}\n </button>\n </form>\n )}\n </div>\n )\n\n // -------------------------------------------------------------------------\n // Render: Checking Availability Screen\n // -------------------------------------------------------------------------\n\n const CheckingScreen = (\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', padding: 32, gap: 20, textAlign: 'center' }}>\n {/* Pulsing radar icon */}\n <div style={{ position: 'relative', width: 64, height: 64 }}>\n <div\n style={{\n position: 'absolute',\n inset: 0,\n borderRadius: '50%',\n backgroundColor: hexAlpha('--sk-primary-rgb', 0.082, primaryRgb),\n animation: 'checkPulse 2s infinite ease-out',\n }}\n />\n <div\n style={{\n position: 'absolute',\n inset: 8,\n borderRadius: '50%',\n backgroundColor: hexAlpha('--sk-primary-rgb', 0.145, primaryRgb),\n animation: 'checkPulse 2s infinite ease-out 0.4s',\n }}\n />\n <div\n style={{\n position: 'absolute',\n inset: 16,\n borderRadius: '50%',\n backgroundColor: primaryColor,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={isLightColor(primaryColor) ? '#1a1a1a' : 'white'} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"8.5\" cy=\"7\" r=\"4\" />\n <line x1=\"20\" y1=\"8\" x2=\"20\" y2=\"14\" />\n <line x1=\"23\" y1=\"11\" x2=\"17\" y2=\"11\" />\n </svg>\n </div>\n </div>\n\n <div>\n <div style={{ fontSize: 16, fontWeight: 600, color: 'var(--sk-text-primary, #111827)', marginBottom: 6 }}>\n {checkingHandoff ? 'Looking for online support' : 'Checking for a team member'}\n </div>\n <div style={{ fontSize: 14, color: 'var(--sk-text-secondary, #6b7280)', lineHeight: 1.5 }}>\n One moment please\n <span style={{ display: 'inline-flex', width: 20 }}>\n <span style={{ animation: 'checkDots 1.5s infinite steps(4, end)' }}>...</span>\n </span>\n </div>\n </div>\n\n {/* Progress bar */}\n <div style={{ width: '80%', height: 3, backgroundColor: 'var(--sk-border, #e5e7eb)', borderRadius: 2, overflow: 'hidden' }}>\n <div\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: primaryColor,\n borderRadius: 2,\n animation: 'checkProgress 5s linear forwards',\n transformOrigin: 'left',\n }}\n />\n </div>\n\n <div style={{ fontSize: 12, color: 'var(--sk-text-tertiary, #9ca3af)' }}>\n This usually takes just a few seconds\n </div>\n </div>\n )\n\n // -------------------------------------------------------------------------\n // Render: Messages View\n // -------------------------------------------------------------------------\n\n const MessagesView = (\n <>\n {/* Messages area */}\n <div\n style={{ flex: 1, overflowY: 'auto', padding: 16, display: 'flex', flexDirection: 'column', gap: 12, backgroundColor: 'var(--sk-bg-elevated, #f9fafb)' }}\n >\n {messages.map((message) => {\n const isAssistant = message.role === 'assistant' || message.role === 'agent'\n return (\n <div key={message.id} style={{ display: 'flex', justifyContent: message.role === 'user' ? 'flex-end' : 'flex-start' }}>\n <div\n style={{\n maxWidth: '80%',\n padding: message.role === 'system' ? '8px 12px' : isAssistant ? '12px 16px' : '10px 14px',\n borderRadius: message.role === 'user' ? '16px 16px 4px 16px' : message.role === 'system' ? '8px' : '16px 16px 16px 4px',\n backgroundColor: message.role === 'user' ? primaryColor : message.role === 'system' ? 'var(--sk-border, #e5e7eb)' : 'var(--sk-bg, #ffffff)',\n color: message.role === 'user' ? (isLightColor(primaryColor) ? '#1a1a1a' : 'white') : message.role === 'system' ? 'var(--sk-text-secondary, #6b7280)' : 'var(--sk-text-primary, #111827)',\n boxShadow: message.role === 'system' ? 'none' : '0 1px 2px rgba(0,0,0,0.08)',\n fontSize: message.role === 'system' ? 13 : 14,\n fontStyle: message.role === 'system' ? 'italic' : 'normal',\n lineHeight: isAssistant ? 1.6 : 1.5,\n whiteSpace: isAssistant ? 'normal' : 'pre-wrap',\n wordBreak: 'break-word',\n textAlign: isAssistant ? 'left' : undefined,\n borderLeft: isAssistant ? `3px solid ${hexAlpha('--sk-primary-rgb', 0.2, primaryRgb)}` : undefined,\n }}\n >\n {message.agentName && message.role === 'agent' && (\n <div style={{ fontSize: 12, opacity: 0.6, marginBottom: 4 }}>{message.agentName}</div>\n )}\n {isAssistant ? (\n <div className=\"chatMessageContent\">\n <ReactMarkdown\n components={{\n p: ({ children }) => <p style={{ margin: '0 0 8px', lineHeight: 1.6 }}>{children}</p>,\n strong: ({ children }) => <strong style={{ fontWeight: 600 }}>{children}</strong>,\n ul: ({ children }) => <ul style={{ margin: '4px 0 8px', paddingLeft: 20 }}>{children}</ul>,\n ol: ({ children }) => <ol style={{ margin: '4px 0 8px', paddingLeft: 20 }}>{children}</ol>,\n li: ({ children }) => <li style={{ marginBottom: 4 }}>{children}</li>,\n h3: ({ children }) => <h3 style={{ margin: '12px 0 6px', fontSize: 15, fontWeight: 600 }}>{children}</h3>,\n h4: ({ children }) => <h4 style={{ margin: '8px 0 4px', fontSize: 14, fontWeight: 600 }}>{children}</h4>,\n a: ({ href, children }) => (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'inline-block',\n marginTop: 6,\n marginRight: 6,\n padding: '8px 14px',\n borderRadius: 8,\n backgroundColor: hexAlpha('--sk-primary-rgb', 0.082, primaryRgb),\n color: primaryColor,\n fontWeight: 600,\n fontSize: 13,\n textDecoration: 'none',\n border: `1px solid ${hexAlpha('--sk-primary-rgb', 0.25, primaryRgb)}`,\n boxShadow: '0 1px 2px rgba(0,0,0,0.06)',\n transition: 'background-color 0.15s, transform 0.1s',\n }}\n onMouseOver={(e) => {\n e.currentTarget.style.backgroundColor = hexAlpha('--sk-primary-rgb', 0.145, primaryRgb)\n e.currentTarget.style.transform = 'translateY(-1px)'\n }}\n onMouseOut={(e) => {\n e.currentTarget.style.backgroundColor = hexAlpha('--sk-primary-rgb', 0.082, primaryRgb)\n e.currentTarget.style.transform = 'translateY(0)'\n }}\n >\n {children}\n </a>\n ),\n }}\n >\n {linkifyUrls(message.content)}\n </ReactMarkdown>\n </div>\n ) : (\n message.content\n )}\n {/* Attachments */}\n {message.attachments?.length ? (\n <div style={{ marginTop: 8, display: 'flex', flexDirection: 'column', gap: 6 }}>\n {message.attachments.map((att, i) =>\n att.mimeType?.startsWith('image/') ? (\n <a key={i} href={att.url} target=\"_blank\" rel=\"noopener noreferrer\" style={{ display: 'block' }}>\n <img src={att.url} alt={att.name} style={{ maxWidth: '100%', maxHeight: 200, borderRadius: 8, objectFit: 'contain' }} />\n </a>\n ) : (\n <a key={i} href={att.url} target=\"_blank\" rel=\"noopener noreferrer\" style={{ fontSize: 13, wordBreak: 'break-all', display: 'flex', alignItems: 'center', gap: 6 }}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\" />\n </svg>\n {att.name}\n </a>\n ),\n )}\n </div>\n ) : null}\n {/* Suggestion chips */}\n {message.suggestions?.length ? (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 6, marginTop: 8 }}>\n {message.suggestions.map((s, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => {\n if (/talk\\s+to\\s+(a\\s+)?person/i.test(s)) {\n requestHandoff()\n } else {\n setInputValue(s)\n inputRef.current?.focus()\n }\n }}\n style={{\n padding: '6px 12px',\n borderRadius: 16,\n border: `1px solid ${primaryColor}`,\n backgroundColor: hexAlpha('--sk-primary-rgb', 0.063, primaryRgb),\n color: primaryColor,\n fontSize: 13,\n cursor: 'pointer',\n }}\n >\n {s}\n </button>\n ))}\n </div>\n ) : null}\n {/* Inline Echo UI actions (managed form / suggestion chips) */}\n {message.uiActions?.length ? (\n <EchoUiActions\n actions={message.uiActions}\n primaryColor={primaryColor}\n primaryRgb={primaryRgb}\n onSuggest={handleSuggestAction}\n />\n ) : null}\n {/* Retry on failed send */}\n {message.sendFailed && lastFailedSend && (\n <div style={{ marginTop: 8 }}>\n <button\n type=\"button\"\n onClick={retryFailedSend}\n style={{ padding: '6px 12px', borderRadius: 6, border: '1px solid var(--sk-error, #dc2626)', backgroundColor: 'var(--sk-error-bg, #fef2f2)', color: 'var(--sk-error, #dc2626)', fontSize: 13, cursor: 'pointer' }}\n >\n Retry send\n </button>\n </div>\n )}\n {/* Handoff button — only when user requested it or AI cannot answer (hide if \"Talk to a person\" chip already shown) */}\n {widgetConfig?.signal_enabled && message.role === 'assistant' && widgetConfig?.handoff_enabled !== false && message.offerHandoff && !message.suggestions?.some((s) => /talk\\s+to\\s+(a\\s+)?person/i.test(s)) && message.id === messages.filter((m) => m.role === 'assistant').slice(-1)[0]?.id && (\n <button\n onClick={requestHandoff}\n style={{\n display: 'inline-block',\n marginTop: 8,\n padding: '6px 12px',\n borderRadius: 6,\n border: `1px solid ${primaryColor}`,\n backgroundColor: 'transparent',\n color: primaryColor,\n fontSize: 13,\n cursor: 'pointer',\n }}\n >\n Talk to a person\n </button>\n )}\n </div>\n </div>\n )\n })}\n\n {/* Typing indicator */}\n {(isLoading || agentTyping) && (\n <div style={{ display: 'flex', justifyContent: 'flex-start' }}>\n <div\n style={{\n padding: '10px 14px',\n borderRadius: '16px 16px 16px 4px',\n backgroundColor: 'var(--sk-bg, #ffffff)',\n boxShadow: '0 1px 2px rgba(0,0,0,0.08)',\n display: 'flex',\n gap: 4,\n color: 'var(--sk-text-tertiary, #9ca3af)',\n }}\n >\n <span style={{ animation: 'chatDot 1.4s infinite ease-in-out', animationDelay: '0s' }}>●</span>\n <span style={{ animation: 'chatDot 1.4s infinite ease-in-out', animationDelay: '0.2s' }}>●</span>\n <span style={{ animation: 'chatDot 1.4s infinite ease-in-out', animationDelay: '0.4s' }}>●</span>\n </div>\n </div>\n )}\n\n <div ref={messagesEndRef} />\n </div>\n\n {/* Failed send bar */}\n {lastFailedSend && (\n <div style={{ padding: '8px 12px', backgroundColor: 'var(--sk-error-bg, #fef2f2)', borderTop: '1px solid var(--sk-error, #fecaca)', display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 8 }}>\n <span style={{ fontSize: 13, color: 'var(--sk-error, #dc2626)' }}>Failed to send</span>\n <button type=\"button\" onClick={retryFailedSend} style={{ padding: '4px 10px', borderRadius: 6, border: '1px solid var(--sk-error, #dc2626)', background: 'var(--sk-bg, #fff)', color: 'var(--sk-error, #dc2626)', fontSize: 12, cursor: 'pointer' }}>\n Retry\n </button>\n </div>\n )}\n\n {/* Input */}\n <form onSubmit={handleSubmit} style={{ padding: 12, borderTop: '1px solid var(--sk-border, #e5e7eb)', backgroundColor: 'var(--sk-bg, #ffffff)' }}>\n <div style={{ display: 'flex', gap: 8 }}>\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={(e) => {\n setInputValue(e.target.value)\n handleTyping()\n }}\n onKeyDown={handleKeyDown}\n placeholder=\"Type a message...\"\n disabled={isLoading}\n style={{\n flex: 1,\n padding: '10px 14px',\n borderRadius: 24,\n border: '1px solid var(--sk-border, #e5e7eb)',\n fontSize: 14,\n outline: 'none',\n transition: 'border-color 0.2s',\n }}\n onFocus={(e) => (e.currentTarget.style.borderColor = primaryColor)}\n onBlur={(e) => (e.currentTarget.style.borderColor = 'var(--sk-border, #e5e7eb)')}\n />\n <button\n type=\"submit\"\n disabled={!inputValue.trim() || isLoading}\n style={{\n width: 40,\n height: 40,\n borderRadius: '50%',\n border: 'none',\n backgroundColor: (inputValue.trim() || pendingFiles.length) && !isLoading ? primaryColor : 'var(--sk-border, #e5e7eb)',\n color: (inputValue.trim() || pendingFiles.length) && !isLoading && isLightColor(primaryColor) ? '#1a1a1a' : 'white',\n cursor: inputValue.trim() && !isLoading ? 'pointer' : 'not-allowed',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'background-color 0.2s',\n flexShrink: 0,\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\" />\n </svg>\n </button>\n </div>\n </form>\n </>\n )\n\n // -------------------------------------------------------------------------\n // Render: Popup\n // -------------------------------------------------------------------------\n\n const ChatPopup = isOpen && (\n <div\n style={{\n position: 'fixed',\n [position === 'bottom-left' ? 'left' : 'right']: '20px',\n bottom: 'calc(90px + env(safe-area-inset-bottom, 0px))',\n width: '380px',\n maxWidth: 'calc(100vw - 40px)',\n height: '520px',\n maxHeight: 'calc(100dvh - 120px)',\n backgroundColor: 'var(--sk-bg, #ffffff)',\n borderRadius: '16px',\n boxShadow: '0 8px 32px rgba(0, 0, 0, 0.2)',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n zIndex: 9998,\n animation: 'chatSlideUp 0.3s ease-out',\n }}\n >\n {Header}\n\n {/* Content: Welcome → Checking → Chat → Offline */}\n {checkingAvailability || checkingHandoff ? CheckingScreen : showOfflineForm ? OfflineFormView : showWelcome && welcomeEnabled && messages.length === 0 ? WelcomeScreen : MessagesView}\n\n {/* Powered by */}\n {showPoweredBy && (\n <div style={{ padding: '6px 0', textAlign: 'center', fontSize: 11, color: 'var(--sk-text-tertiary, #9ca3af)', backgroundColor: 'var(--sk-bg, #ffffff)', borderTop: '1px solid var(--sk-bg-elevated, #f3f4f6)' }}>\n Powered by{' '}\n <a href=\"https://sonor.io\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: 'var(--sk-text-secondary, #6b7280)', textDecoration: 'none', fontWeight: 500 }}>\n Sonor\n </a>\n </div>\n )}\n\n {/* CSS animations and markdown styles */}\n <style>{`\n @keyframes chatSlideUp {\n from { opacity: 0; transform: translateY(20px); }\n to { opacity: 1; transform: translateY(0); }\n }\n @keyframes chatDot {\n 0%, 80%, 100% { opacity: 0.3; }\n 40% { opacity: 1; }\n }\n @keyframes checkPulse {\n 0% { transform: scale(1); opacity: 1; }\n 100% { transform: scale(1.8); opacity: 0; }\n }\n @keyframes checkDots {\n 0% { content: ''; }\n 25% { content: '.'; }\n 50% { content: '..'; }\n 75% { content: '...'; }\n }\n @keyframes checkProgress {\n from { transform: scaleX(0); }\n to { transform: scaleX(1); }\n }\n .chatMessageContent p:first-child { margin-top: 0; }\n .chatMessageContent p:last-child { margin-bottom: 0; }\n `}</style>\n </div>\n )\n\n // Show button immediately; popup content needs projectId (resolved from API key via project-info)\n return (\n <>\n {ChatPopup}\n {ChatButton}\n </>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/engage/EchoUiActions.tsx","../src/engage/ChatWidget.tsx"],"names":["alpha","messages","jsx","jsxs"],"mappings":"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","file":"chunk-BW6DSJEJ.mjs","sourcesContent":["/**\n * @sonordev/site-kit/engage - Echo UI Actions\n *\n * Renders the optional `uiActions` the visitor Echo concierge returns alongside\n * a chat reply (see signal-api echo.service.ts). Rendered beneath the assistant\n * message in ChatWidget, on-brand with the widget's primary-color tokens.\n *\n * - show_form → compact inline managed form (reuses the canonical\n * forms `useForm` fetch/validate/submit path) with optional prefill.\n * - suggest_action → clickable chip; sends the message as the next turn, or\n * navigates when the action is a path/URL.\n * - show_portfolio_item → intentionally ignored. Portfolio is Upforge-specific\n * and Upforge runs its own custom Echo chat, not this widget.\n */\n\n'use client'\n\nimport React from 'react'\nimport { useForm } from '../forms/useForm'\nimport type { FormField } from '../forms/types'\nimport type { UiAction } from './types'\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** rgba() from the widget's primary-color RGB triplet (mirrors ChatWidget.hexAlpha). */\nfunction alpha(rgb: string, a: number): string {\n return `rgba(var(--sk-primary-rgb, ${rgb}), ${a})`\n}\n\nfunction asString(v: unknown): string | undefined {\n return typeof v === 'string' && v.trim() ? v : undefined\n}\n\nfunction asRecord(v: unknown): Record<string, unknown> | undefined {\n return v && typeof v === 'object' && !Array.isArray(v) ? (v as Record<string, unknown>) : undefined\n}\n\n/** A path / URL / scheme we should navigate to rather than send as a chat turn. */\nfunction isNavigable(action: string): boolean {\n return /^(https?:\\/\\/|\\/|#|tel:|mailto:)/i.test(action.trim())\n}\n\n// ---------------------------------------------------------------------------\n// Inline managed form (show_form)\n// ---------------------------------------------------------------------------\n\ninterface InlineManagedFormProps {\n slug: string\n prefill?: Record<string, unknown>\n primaryColor: string\n primaryRgb: string\n}\n\nconst DISPLAY_ONLY: ReadonlyArray<string> = ['heading', 'section_header', 'paragraph']\n\nfunction InlineManagedForm({ slug, prefill, primaryColor, primaryRgb }: InlineManagedFormProps) {\n const {\n form,\n isLoading,\n fetchError,\n submitError,\n visibleFields,\n values,\n errors,\n setFieldValue,\n submit,\n isSubmitting,\n isComplete,\n } = useForm(slug, { initialValues: prefill || {} })\n\n const cardStyle: React.CSSProperties = {\n marginTop: 8,\n padding: 12,\n borderRadius: 12,\n border: `1px solid ${alpha(primaryRgb, 0.25)}`,\n backgroundColor: alpha(primaryRgb, 0.04),\n }\n\n if (isLoading) {\n return (\n <div style={cardStyle}>\n <p style={{ margin: 0, fontSize: 13, color: 'var(--sk-text-tertiary, #9ca3af)' }}>Loading form…</p>\n </div>\n )\n }\n\n if (fetchError || !form) {\n return (\n <div style={cardStyle}>\n <p style={{ margin: 0, fontSize: 13, color: 'var(--sk-text-tertiary, #9ca3af)' }}>\n This form is unavailable right now.\n </p>\n </div>\n )\n }\n\n if (isComplete) {\n return (\n <div style={cardStyle} role=\"status\" aria-live=\"polite\">\n <p style={{ margin: 0, fontSize: 13.5, color: 'var(--sk-text-primary, #111827)', lineHeight: 1.5 }}>\n {form.success_message}\n </p>\n </div>\n )\n }\n\n const inputBase: React.CSSProperties = {\n width: '100%',\n padding: '8px 10px',\n borderRadius: 8,\n // Longhand (not the `border` shorthand) so the error-state `borderColor`\n // override doesn't mix shorthand+longhand and trigger React's style warning.\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: 'var(--sk-border, #e5e7eb)',\n backgroundColor: 'var(--sk-bg, #ffffff)',\n color: 'var(--sk-text-primary, #111827)',\n fontSize: 13.5,\n boxSizing: 'border-box',\n outline: 'none',\n }\n\n const renderField = (field: FormField) => {\n const value = values[field.slug]\n const strValue = value == null ? '' : String(value)\n const err = errors[field.slug]\n const labelEl =\n !field.hide_label && field.label ? (\n <label\n htmlFor={`echo-form-${form.id}-${field.slug}`}\n style={{ display: 'block', fontSize: 12.5, fontWeight: 600, marginBottom: 4, color: 'var(--sk-text-secondary, #4b5563)' }}\n >\n {field.label}\n {field.is_required ? <span style={{ color: 'var(--sk-error, #dc2626)' }}> *</span> : null}\n </label>\n ) : null\n const id = `echo-form-${form.id}-${field.slug}`\n const common = {\n id,\n placeholder: field.placeholder || (field.hide_label ? field.label : undefined),\n 'aria-invalid': !!err,\n style: { ...inputBase, ...(err ? { borderColor: 'var(--sk-error, #dc2626)' } : {}) },\n } as const\n\n let control: React.ReactNode\n switch (field.field_type) {\n case 'textarea':\n control = (\n <textarea\n {...common}\n rows={3}\n value={strValue}\n onChange={(e) => setFieldValue(field.slug, e.target.value)}\n style={{ ...common.style, resize: 'vertical' as const }}\n />\n )\n break\n case 'select':\n control = (\n <select {...common} value={strValue} onChange={(e) => setFieldValue(field.slug, e.target.value)}>\n <option value=\"\">{field.placeholder || 'Select…'}</option>\n {(field.options || []).map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>\n )\n break\n case 'radio':\n control = (\n <div role=\"radiogroup\" style={{ display: 'flex', flexDirection: 'column', gap: 4 }}>\n {(field.options || []).map((opt) => (\n <label key={opt.value} style={{ display: 'flex', alignItems: 'center', gap: 6, fontSize: 13, cursor: 'pointer' }}>\n <input\n type=\"radio\"\n name={id}\n checked={strValue === opt.value}\n onChange={() => setFieldValue(field.slug, opt.value)}\n />\n {opt.label}\n </label>\n ))}\n </div>\n )\n break\n case 'checkbox':\n control = (\n <label style={{ display: 'flex', alignItems: 'center', gap: 6, fontSize: 13, cursor: 'pointer' }}>\n <input\n type=\"checkbox\"\n checked={value === true || value === 'true'}\n onChange={(e) => setFieldValue(field.slug, e.target.checked)}\n />\n {field.placeholder || field.label}\n </label>\n )\n break\n default: {\n const typeMap: Record<string, string> = {\n email: 'email',\n phone: 'tel',\n tel: 'tel',\n number: 'number',\n date: 'date',\n time: 'time',\n datetime: 'datetime-local',\n }\n control = (\n <input\n {...common}\n type={typeMap[field.field_type] || 'text'}\n value={strValue}\n onChange={(e) => setFieldValue(field.slug, e.target.value)}\n />\n )\n }\n }\n\n return (\n <div key={field.id || field.slug} style={{ marginBottom: 8 }}>\n {field.field_type === 'checkbox' ? null : labelEl}\n {control}\n {err ? <p style={{ margin: '4px 0 0', fontSize: 11.5, color: 'var(--sk-error, #dc2626)' }}>{err}</p> : null}\n </div>\n )\n }\n\n return (\n <form\n style={cardStyle}\n onSubmit={(e) => {\n e.preventDefault()\n void submit()\n }}\n >\n {form.name ? (\n <div style={{ fontSize: 13.5, fontWeight: 600, marginBottom: 8, color: 'var(--sk-text-primary, #111827)' }}>\n {form.name}\n </div>\n ) : null}\n\n {visibleFields.map((field) => {\n if (field.field_type === 'hidden') return null\n if (DISPLAY_ONLY.includes(field.field_type)) {\n return (\n <p key={field.id || field.slug} style={{ margin: '0 0 8px', fontSize: 12.5, color: 'var(--sk-text-secondary, #4b5563)' }}>\n {field.label}\n </p>\n )\n }\n return renderField(field)\n })}\n\n {submitError ? (\n <p role=\"alert\" style={{ margin: '0 0 8px', fontSize: 12, color: 'var(--sk-error, #dc2626)' }}>\n {submitError}\n </p>\n ) : null}\n\n <button\n type=\"submit\"\n disabled={isSubmitting}\n style={{\n width: '100%',\n padding: '9px 14px',\n borderRadius: 8,\n border: 'none',\n backgroundColor: primaryColor,\n color: '#fff',\n fontSize: 13.5,\n fontWeight: 600,\n cursor: isSubmitting ? 'default' : 'pointer',\n opacity: isSubmitting ? 0.7 : 1,\n }}\n >\n {isSubmitting ? 'Sending…' : form.submit_button_text || 'Submit'}\n </button>\n </form>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Suggestion-action chip (suggest_action)\n// ---------------------------------------------------------------------------\n\ninterface SuggestActionChipProps {\n action?: string\n message: string\n primaryColor: string\n primaryRgb: string\n onSuggest: (action: string | undefined, message: string) => void\n}\n\nfunction SuggestActionChip({ action, message, primaryColor, primaryRgb, onSuggest }: SuggestActionChipProps) {\n return (\n <button\n type=\"button\"\n onClick={() => onSuggest(action, message)}\n style={{\n padding: '6px 12px',\n borderRadius: 16,\n border: `1px solid ${primaryColor}`,\n backgroundColor: alpha(primaryRgb, 0.063),\n color: primaryColor,\n fontSize: 13,\n cursor: 'pointer',\n }}\n >\n {message}\n </button>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Dispatcher\n// ---------------------------------------------------------------------------\n\nexport interface EchoUiActionsProps {\n actions: UiAction[]\n primaryColor: string\n primaryRgb: string\n /** Called by a suggest_action chip — send the message as the next turn or navigate. */\n onSuggest: (action: string | undefined, message: string) => void\n}\n\nexport function EchoUiActions({ actions, primaryColor, primaryRgb, onSuggest }: EchoUiActionsProps) {\n if (!actions?.length) return null\n\n // Group the suggest_action chips so they flow together like the suggestion row.\n const chips = actions.filter((a) => a?.type === 'suggest_action')\n const forms = actions.filter((a) => a?.type === 'show_form')\n // show_portfolio_item (and any unknown type) is intentionally not rendered here.\n\n if (!chips.length && !forms.length) return null\n\n return (\n <div style={{ marginTop: 8, display: 'flex', flexDirection: 'column', gap: 8 }}>\n {forms.map((a, i) => {\n const slug = asString(a.data?.formSlug)\n if (!slug) return null\n return (\n <InlineManagedForm\n key={`form-${slug}-${i}`}\n slug={slug}\n prefill={asRecord(a.data?.prefill)}\n primaryColor={primaryColor}\n primaryRgb={primaryRgb}\n />\n )\n })}\n\n {chips.length ? (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 6 }}>\n {chips.map((a, i) => {\n const message = asString(a.data?.message)\n const action = asString(a.data?.action)\n // A chip needs a label — fall back to the action when no message is given.\n const label = message || action\n if (!label) return null\n return (\n <SuggestActionChip\n key={`chip-${i}`}\n action={action}\n message={label}\n primaryColor={primaryColor}\n primaryRgb={primaryRgb}\n onSuggest={onSuggest}\n />\n )\n })}\n </div>\n ) : null}\n </div>\n )\n}\n\nexport { isNavigable }\n","/**\n * @sonordev/site-kit/engage - Chat Widget (Redesigned)\n *\n * Features:\n * - Pulls brand colors (primary/secondary) + business info from project settings via API\n * - Welcome screen with quick-action chips before first message\n * - Echo (AI) chat when mode is ai / hybrid; gateway returns Echo responses\n * - Automated handoff to live agent (re-checks availability; if agents online, POST handoff)\n * - Managed offline form when nobody is online (configurable heading/subheading)\n * - Socket.io with auto-reconnect for real-time live chat\n * - Proper AI → Live → Offline sequence routing\n */\n\n'use client'\n\nimport React, { useState, useRef, useEffect, useCallback } from 'react'\nimport ReactMarkdown from 'react-markdown'\nimport type { ChatConfig, UiAction } from './types'\nimport { EchoUiActions, isNavigable } from './EchoUiActions'\n// Canonical transport — refreshes a stale minted token and retries once on 401.\n// The credential is passed via options.apiKey (NOT an x-api-key/Authorization\n// header) so sonorFetch injects the freshest token; a hand-set header would pin\n// the stale build-time seed and 401.\nimport { sonorFetch } from '../shared/sonorFetch'\n\n// Socket type — the actual library is lazy-loaded via socket-loader.ts\n// to keep socket.io-client out of the main bundle entirely.\ntype Socket = { connected: boolean; disconnect: () => void; on: (ev: string, fn: (...args: any[]) => void) => void; emit: (ev: string, data?: any) => void }\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface ChatWidgetProps {\n /** Optional: resolved from API key via project-info when not provided */\n projectId?: string\n config?: Partial<ChatConfig>\n apiUrl?: string\n /** Signal API base URL for direct AI chat (no Portal passthrough) */\n signalUrl?: string\n /** Clickable question chips shown in the welcome screen before the first message */\n suggested_questions?: string[]\n /** Name shown in the chat header for the AI assistant (overrides API config) */\n assistant_name?: string\n /** Welcome message shown when chat first opens (overrides API config) */\n welcome_message?: string\n /** Avatar URL for the assistant shown in the header */\n assistant_avatar?: string\n}\n\ninterface MessageAttachment {\n name: string\n url: string\n size?: number\n mimeType?: string\n}\n\ninterface Message {\n id: string\n role: 'user' | 'assistant' | 'agent' | 'system'\n content: string\n timestamp: Date\n agentName?: string\n attachments?: MessageAttachment[]\n suggestions?: string[]\n sendFailed?: boolean\n /** When true, show \"Talk to a person\" button (AI cannot answer or user requested handoff) */\n offerHandoff?: boolean\n /** Optional inline UI actions returned by the visitor Echo endpoint (forms, suggestion chips). */\n uiActions?: UiAction[]\n}\n\ninterface AvailabilityStatus {\n available: boolean\n mode: 'live' | 'ai' | 'offline'\n agentsOnline: number\n operatingHoursActive: boolean\n}\n\ninterface OfflineFormData {\n name: string\n email: string\n phone: string\n message: string\n}\n\n/** Enriched widget config from API (engage_chat_config + project settings) */\ninterface WidgetConfigFromApi {\n // Chat config fields\n is_enabled?: boolean\n position?: string\n initial_message?: string\n welcome_message?: string\n form_heading?: string\n form_description?: string\n offline_message?: string\n offlineFormSlug?: string\n chat_mode?: string\n signal_enabled?: boolean\n offline_mode?: string\n offline_heading?: string\n offline_subheading?: string\n welcome_screen_enabled?: boolean\n welcome_quick_actions?: string[]\n handoff_enabled?: boolean\n show_powered_by?: boolean\n business_hours?: any\n // Branding from Project Settings\n brand_primary?: string\n logo_url?: string\n project_name?: string\n // Business info from Project Settings\n business_info?: {\n name?: string\n phone?: string\n domain?: string\n address?: string\n hours?: any\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction getApiConfig() {\n const isDev = typeof process !== 'undefined' && process.env?.NODE_ENV === 'development'\n const defaultApiUrl = isDev && process.env?.SONOR_API_URL\n ? process.env.SONOR_API_URL\n : 'https://api.sonor.io'\n const defaultSignalUrl = isDev && (process.env?.SONOR_SIGNAL_URL || process.env?.NEXT_PUBLIC_SIGNAL_API_URL)\n ? (process.env.SONOR_SIGNAL_URL || process.env.NEXT_PUBLIC_SIGNAL_API_URL)\n : 'https://signal.sonor.io'\n const apiUrl =\n typeof window !== 'undefined'\n ? (window as any).__SITE_KIT_API_URL__ || defaultApiUrl\n : defaultApiUrl\n const apiKey = typeof window !== 'undefined' ? (window as any).__SITE_KIT_API_KEY__ : undefined\n const signalUrl =\n typeof window !== 'undefined'\n ? (window as any).__SITE_KIT_SIGNAL_URL__ || defaultSignalUrl\n : defaultSignalUrl\n return { apiUrl, apiKey, signalUrl }\n}\n\nfunction generateVisitorId(): string {\n const stored = typeof localStorage !== 'undefined' ? localStorage.getItem('engage_visitor_id') : null\n if (stored) return stored\n const id = `visitor_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\n if (typeof localStorage !== 'undefined') localStorage.setItem('engage_visitor_id', id)\n return id\n}\n\n/** Convert plain URLs in text to markdown links so they render as buttons. Skips URLs already inside markdown links. */\nfunction linkifyUrls(text: string): string {\n return text.replace(\n /(^|[^(\\]])(https?:\\/\\/[^\\s<>\"{}|\\\\^`[\\])]+)/g,\n (_, before, url) => `${before}[${url}](${url})`,\n )\n}\n\n/** Detect if text expresses intent to talk to a live person */\nfunction userRequestedHandoff(text: string): boolean {\n const lower = text.toLowerCase().trim()\n const patterns = [\n /\\b(talk|speak)\\s+(to|with)\\s+(a\\s+)?(person|human|agent|representative|someone)\\b/,\n /\\b(real|live)\\s+(person|human|agent|support)\\b/,\n /\\bconnect\\s+(me\\s+)?(with|to)\\s+(a\\s+)?(person|human|agent)\\b/,\n /\\b(need|want)\\s+(to\\s+)?(talk|speak)\\s+(to|with)\\s+(someone|a\\s+person)\\b/,\n /\\bhuman\\s+(support|agent|help)\\b/,\n /\\b(talk|speak)\\s+to\\s+(a\\s+)?person\\b/,\n /\\bget\\s+(a\\s+)?(person|human)\\b/,\n ]\n return patterns.some((p) => p.test(lower))\n}\n\n/** Darken / lighten a hex colour */\nfunction adjustColor(hex: string, amount: number): string {\n const num = parseInt(hex.replace('#', ''), 16)\n const r = Math.min(255, Math.max(0, (num >> 16) + amount))\n const g = Math.min(255, Math.max(0, ((num >> 8) & 0x00ff) + amount))\n const b = Math.min(255, Math.max(0, (num & 0x0000ff) + amount))\n return `#${((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1)}`\n}\n\n/** Determine if a hex colour is light enough to need dark text */\nfunction isLightColor(hex: string): boolean {\n const num = parseInt(hex.replace('#', ''), 16)\n const r = num >> 16\n const g = (num >> 8) & 0x00ff\n const b = num & 0x0000ff\n return (r * 299 + g * 587 + b * 114) / 1000 > 160\n}\n\n/**\n * SSR-safe brand color: same on server and first client render (hydration).\n * `--sk-primary` is applied after mount in useEffect — reading getComputedStyle during render\n * caused server (API/config hex) vs client (CSS rgb) mismatches on the launcher button.\n */\nfunction staticPrimaryColor(apiFallback: string | undefined, hardDefault: string): string {\n return apiFallback || hardDefault\n}\n\n/**\n * Convert a hex color to an \"r, g, b\" string for use in rgba().\n * Returns the fallback if the input is not a valid hex color.\n */\nfunction hexToRgbString(hex: string, fallback = '37, 99, 235'): string {\n const match = hex.replace('#', '').match(/^([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i)\n if (!match) return fallback\n return `${parseInt(match[1], 16)}, ${parseInt(match[2], 16)}, ${parseInt(match[3], 16)}`\n}\n\n/**\n * Generate an rgba() value from a CSS custom property holding an RGB triplet.\n * Usage: hexAlpha('--sk-primary-rgb', 0.125) → \"rgba(var(--sk-primary-rgb, 37, 99, 235), 0.125)\"\n */\nfunction hexAlpha(rgbVar: string, alpha: number, fallbackRgb = '37, 99, 235'): string {\n return `rgba(var(${rgbVar}, ${fallbackRgb}), ${alpha})`\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function ChatWidget({ projectId: propProjectId, config, apiUrl: propApiUrl, signalUrl: propSignalUrl, suggested_questions: propSuggestedQuestions, assistant_name: propAssistantName, welcome_message: propWelcomeMessage, assistant_avatar: propAssistantAvatar }: ChatWidgetProps) {\n // Resolve projectId from API key when not provided (backend derives project from key)\n const [resolvedProjectId, setResolvedProjectId] = useState<string | null>(propProjectId || null)\n const projectId = propProjectId || resolvedProjectId || ''\n\n // State -------------------------------------------------------------------\n const [isOpen, setIsOpen] = useState(false)\n const [messages, setMessages] = useState<Message[]>([])\n const [inputValue, setInputValue] = useState('')\n const [isLoading, setIsLoading] = useState(false)\n const [availability, setAvailability] = useState<AvailabilityStatus | null>(null)\n const [sessionId, setSessionId] = useState<string | null>(null)\n const [visitorId] = useState(generateVisitorId)\n const [agentTyping, setAgentTyping] = useState(false)\n const [showOfflineForm, setShowOfflineForm] = useState(false)\n const [offlineForm, setOfflineForm] = useState<OfflineFormData>({ name: '', email: '', phone: '', message: '' })\n const [offlineSubmitted, setOfflineSubmitted] = useState(false)\n const [connectionStatus, setConnectionStatus] = useState<'connecting' | 'connected' | 'disconnected'>('disconnected')\n const [widgetConfig, setWidgetConfig] = useState<WidgetConfigFromApi | null>(null)\n const [handoffOfflinePrompt, setHandoffOfflinePrompt] = useState<string | null>(null)\n const [pendingFiles, setPendingFiles] = useState<File[]>([])\n const [lastFailedSend, setLastFailedSend] = useState<{ content: string; attachments: MessageAttachment[] } | null>(null)\n const [showWelcome, setShowWelcome] = useState(true)\n const [checkingAvailability, setCheckingAvailability] = useState(false)\n const [checkingHandoff, setCheckingHandoff] = useState(false)\n const [isHandedOff, setIsHandedOff] = useState(false)\n const fileInputRef = useRef<HTMLInputElement>(null)\n const pendingInitialMessageRef = useRef<string | null>(null)\n const apiKeyMissingWarnedRef = useRef(false)\n const siteContextRef = useRef<string | null>(null)\n function ensureApiKey(): string | null {\n const { apiKey } = getApiConfig()\n if (apiKey) return apiKey\n if (!apiKeyMissingWarnedRef.current) {\n apiKeyMissingWarnedRef.current = true\n console.warn('[ChatWidget] API key is required for Engage widget. Set __SITE_KIT_API_KEY__ or pass apiKey via SiteKitProvider.')\n }\n return null\n }\n\n const messagesEndRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n const socketRef = useRef<Socket | null>(null)\n const pollingIntervalRef = useRef<ReturnType<typeof setInterval> | null>(null)\n\n // Derived values ----------------------------------------------------------\n const position = config?.position || widgetConfig?.position || 'bottom-right'\n const primaryFallback = staticPrimaryColor(widgetConfig?.brand_primary || config?.buttonColor, '#2563eb')\n const [primaryFromCssVar, setPrimaryFromCssVar] = useState<string | null>(null)\n const primaryColor = primaryFromCssVar ?? primaryFallback\n const primaryRgb = hexToRgbString(primaryColor)\n\n useEffect(() => {\n const cssValue = getComputedStyle(document.documentElement).getPropertyValue('--sk-primary').trim()\n setPrimaryFromCssVar(cssValue || null)\n }, [])\n // assistant_name prop overrides API config; falls back to project/business name\n const businessName = propAssistantName || widgetConfig?.project_name || widgetConfig?.business_info?.name || 'Chat with us'\n // assistant_avatar prop overrides logo from API config\n const logoUrl = propAssistantAvatar || widgetConfig?.logo_url || null\n const welcomeEnabled = widgetConfig?.welcome_screen_enabled !== false\n // suggested_questions prop overrides API welcome_quick_actions\n const quickActions: string[] = propSuggestedQuestions ?? (Array.isArray(widgetConfig?.welcome_quick_actions) ? widgetConfig.welcome_quick_actions : [])\n const showPoweredBy = widgetConfig?.show_powered_by !== false\n // welcome_message prop takes highest priority\n const welcomeMessage =\n propWelcomeMessage ?? widgetConfig?.initial_message ?? widgetConfig?.welcome_message ?? config?.welcomeMessage ?? 'Hi! How can I help you today?'\n const offlineHeading = widgetConfig?.offline_heading ?? 'No agents available right now'\n const offlineSubheading =\n handoffOfflinePrompt ?? widgetConfig?.offline_subheading ?? widgetConfig?.form_description ?? widgetConfig?.offline_message ?? config?.offlineMessage ?? \"Leave us a message and we'll get back to you!\"\n\n const baseUrl = propApiUrl || getApiConfig().apiUrl\n const signalUrl = propSignalUrl || getApiConfig().signalUrl\n\n // Resolve projectId from API key when not provided\n useEffect(() => {\n if (propProjectId || resolvedProjectId) return\n const { apiKey } = getApiConfig()\n if (!apiKey) return\n let cancelled = false\n sonorFetch(`${baseUrl}/api/public/seo/project-info`, {}, { apiKey, retries: 0 })\n .then((res) => (res.ok ? res.json() : null))\n .then((data) => {\n if (cancelled || !data?.valid || !data?.project_id) return\n setResolvedProjectId(data.project_id)\n })\n .catch(() => {})\n return () => { cancelled = true }\n }, [propProjectId, resolvedProjectId, baseUrl])\n\n // -------------------------------------------------------------------------\n // API calls\n // -------------------------------------------------------------------------\n\n const fetchWidgetConfig = useCallback(async () => {\n if (!projectId) return\n const apiKey = ensureApiKey()\n if (!apiKey) return\n try {\n const response = await sonorFetch(`${baseUrl}/engage/widget/config?projectId=${projectId}`, {}, { apiKey, retries: 0 })\n if (response.ok) {\n const { data } = await response.json()\n setWidgetConfig(data ?? null)\n }\n } catch (error) {\n if (process.env.NODE_ENV === 'development') {\n console.warn('[ChatWidget] Config fetch failed:', error instanceof Error ? error.message : error)\n }\n }\n }, [projectId, baseUrl])\n\n const checkAvailability = useCallback(async (): Promise<AvailabilityStatus | null> => {\n if (!projectId) return null\n const apiKey = ensureApiKey()\n if (!apiKey) return null\n try {\n const response = await sonorFetch(`${baseUrl}/engage/widget/availability?projectId=${projectId}`, {}, { apiKey, retries: 0 })\n if (response.ok) {\n const { data } = await response.json()\n setAvailability(data)\n return data\n }\n } catch (error) {\n if (process.env.NODE_ENV === 'development') {\n console.warn('[ChatWidget] Availability check failed:', error instanceof Error ? error.message : error)\n }\n }\n return null\n }, [projectId, baseUrl])\n\n const initSession = useCallback(async () => {\n const apiKey = ensureApiKey()\n if (!apiKey) return null\n try {\n const response = await sonorFetch(`${baseUrl}/engage/widget/session`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n projectId,\n visitorId,\n sourceUrl: typeof window !== 'undefined' ? window.location.href : '',\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : '',\n }),\n }, { apiKey, retries: 0 })\n if (response.ok) {\n const { data } = await response.json()\n const session = data.session ?? data\n const sid = session?.id ?? session?.session_id ?? data.id ?? data.session_id\n const signalEnabled = session?.chat_mode === 'ai' || session?.chat_mode === 'hybrid'\n setSessionId(sid)\n const messages = session?.messages ?? data.messages ?? []\n if (messages.length > 0) {\n setMessages(\n messages.map((m: any) => ({\n id: m.id,\n role: m.role === 'visitor' ? 'user' : m.role,\n content: m.content,\n timestamp: new Date(m.created_at),\n agentName: m.sender_name,\n })),\n )\n }\n return { id: sid, signalEnabled }\n }\n } catch (error) {\n console.error('[ChatWidget] Session init failed:', error)\n }\n return null\n }, [projectId, visitorId, baseUrl])\n\n /** Fetch llms.txt from same origin when chat opens (for site context in Echo) */\n const fetchSiteContext = useCallback(async () => {\n if (siteContextRef.current) return siteContextRef.current\n try {\n const base = typeof window !== 'undefined' ? window.location.origin : ''\n const res = await fetch(`${base}/llms.txt`, { cache: 'no-store' })\n if (res.ok) {\n const text = await res.text()\n if (text?.trim()) siteContextRef.current = text.trim()\n }\n } catch {\n // Ignore - Signal will fall back to fetching from project domain\n }\n return siteContextRef.current\n }, [])\n\n /** Send message directly to Signal API (no Portal passthrough). Auth via x-api-key. */\n const sendToSignalApi = useCallback(\n async (content: string, conversationId?: string | null) => {\n const apiKey = ensureApiKey()\n if (!apiKey) throw new Error('API key required for chat')\n\n const url = `${signalUrl.replace(/\\/$/, '')}/echo/public/chat`\n const siteContext = await fetchSiteContext()\n const body = {\n message: content,\n visitorId,\n ...(conversationId ? { conversationId } : {}),\n pageUrl: typeof window !== 'undefined' ? window.location.href : undefined,\n ...(siteContext ? { siteContext } : {}),\n }\n const res = await sonorFetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n }, { apiKey, retries: 0 })\n const json = await res.json()\n if (!res.ok) {\n throw new Error(json?.error?.message || json?.message || `Signal API error: ${res.status}`)\n }\n const data = json?.data ?? json\n const aiContent = data?.content ?? data?.response ?? data?.message ?? \"I'm sorry, I couldn't process that.\"\n const suggestions = data?.suggestions\n const offerHandoff = data?.offerHandoff === true || data?.offer_handoff === true\n // Optional inline UI actions (show_form / suggest_action / …) from the Echo concierge.\n const uiActions = Array.isArray(data?.uiActions)\n ? (data.uiActions as UiAction[]).filter((a) => a && typeof a === 'object' && typeof a.type === 'string' && a.data && typeof a.data === 'object')\n : undefined\n const newConversationId = data?.conversationId ?? conversationId\n return { content: aiContent, suggestions, offerHandoff, uiActions, conversationId: newConversationId }\n },\n [signalUrl, visitorId, fetchSiteContext],\n )\n\n /**\n * Single source of truth for appending an Echo (Signal) reply as an assistant\n * message. Suggestions, inline uiActions, and the handoff offer all attach\n * here so the three send paths (initial pending message, handleSubmit, and a\n * suggest_action chip) can never drift. `probeContent` is the user text we\n * scan for an explicit handoff request.\n */\n const pushEchoReply = useCallback(\n (\n reply: { content: string; suggestions?: string[]; offerHandoff?: boolean; uiActions?: UiAction[] },\n probeContent: string,\n ) => {\n setMessages((prev) => [\n ...prev,\n {\n id: `ai-${Date.now()}`,\n role: 'assistant',\n content: reply.content,\n timestamp: new Date(),\n ...(reply.suggestions?.length ? { suggestions: reply.suggestions } : {}),\n ...(reply.uiActions?.length ? { uiActions: reply.uiActions } : {}),\n ...(reply.offerHandoff || userRequestedHandoff(probeContent) ? { offerHandoff: true } : {}),\n },\n ])\n },\n [],\n )\n\n // -------------------------------------------------------------------------\n // Socket.io message handler\n // -------------------------------------------------------------------------\n\n const handleSocketMessage = useCallback((data: any) => {\n switch (data.type || data.event) {\n case 'message': {\n const role = data.role === 'visitor' ? 'user' : data.role === 'ai' ? 'assistant' : (data.role as Message['role'])\n const newMessage: Message = {\n id: data.id || `msg-${Date.now()}`,\n role,\n content: data.content ?? '',\n timestamp: new Date(),\n agentName: data.agentName,\n ...(data.attachments?.length ? { attachments: data.attachments } : {}),\n ...(data.suggestions?.length ? { suggestions: data.suggestions as string[] } : {}),\n }\n setMessages((prev) => [...prev, newMessage])\n if (role === 'assistant' || role === 'agent') {\n setAgentTyping(false)\n setIsLoading(false)\n }\n break\n }\n case 'agent:joined':\n setMessages((prev) => [\n ...prev,\n {\n id: `system-${Date.now()}`,\n role: 'system',\n content: data.agentName ? `${data.agentName} has joined the chat.` : 'An agent has joined the chat.',\n timestamp: new Date(),\n },\n ])\n break\n case 'typing':\n setAgentTyping(data.isTyping)\n break\n case 'handoff:initiated':\n setMessages((prev) => [\n ...prev,\n { id: `system-${Date.now()}`, role: 'system', content: data.message || 'Connecting you with a team member...', timestamp: new Date() },\n ])\n break\n case 'chat:closed':\n setMessages((prev) => [\n ...prev,\n { id: `system-${Date.now()}`, role: 'system', content: data.message || 'This chat has been closed.', timestamp: new Date() },\n ])\n break\n }\n }, [])\n\n // -------------------------------------------------------------------------\n // Socket.io connection (with auto-reconnect)\n // -------------------------------------------------------------------------\n\n const connectSocket = useCallback(\n async (currentSessionId: string) => {\n if (socketRef.current?.connected) return\n\n // Disconnect any stale socket first\n if (socketRef.current) {\n socketRef.current.disconnect()\n socketRef.current = null\n }\n\n // Lazy-load socket.io via separate module so bundlers never pull it\n // into the main engage chunk (avoids massive client bundle).\n const { createSocket } = await import('./socket-loader')\n\n const namespaceUrl = `${baseUrl.replace(/\\/$/, '')}/engage/chat`\n const socket = await createSocket(namespaceUrl, {\n query: { projectId, visitorId, sessionId: currentSessionId },\n transports: ['websocket', 'polling'],\n // Auto-reconnect config\n reconnection: true,\n reconnectionAttempts: 10,\n reconnectionDelay: 1000,\n reconnectionDelayMax: 10000,\n timeout: 15000,\n })\n\n socket.on('connect', () => {\n setConnectionStatus('connected')\n console.log('[ChatWidget] Socket.io connected')\n // Re-fetch messages to catch anything missed while disconnected\n if (currentSessionId) {\n const apiKey = ensureApiKey()\n if (apiKey) {\n sonorFetch(`${baseUrl}/engage/widget/messages?sessionId=${currentSessionId}`, {}, { apiKey, retries: 0 })\n .then((res) => (res.ok ? res.json() : null))\n .then((json) => {\n const data = json?.data ?? json\n if (Array.isArray(data) && data.length) {\n setMessages((prev) => {\n const byId = new Map(prev.map((m) => [m.id, m]))\n data.forEach((m: any) =>\n byId.set(m.id, {\n id: m.id,\n role: m.role === 'visitor' ? 'user' : m.role,\n content: m.content,\n timestamp: new Date(m.created_at),\n agentName: m.sender_name,\n attachments: m.attachments,\n }),\n )\n return Array.from(byId.values()).sort((a, b) => (a.timestamp as Date).getTime() - (b.timestamp as Date).getTime())\n })\n }\n })\n .catch((err) => console.warn('[ChatWidget] Refetch messages on reconnect failed', err))\n }\n }\n\n // Retry any buffered message\n if (lastFailedSend) {\n socket.emit('visitor:message', {\n content: lastFailedSend.content,\n attachments: lastFailedSend.attachments?.length ? lastFailedSend.attachments : undefined,\n })\n setLastFailedSend(null)\n setMessages((prev) => prev.filter((m) => !m.sendFailed))\n setIsLoading(true)\n }\n })\n\n socket.on('message', (data: any) => handleSocketMessage({ type: 'message', ...data }))\n socket.on('agent:joined', (data: any) => handleSocketMessage({ type: 'agent:joined', ...data }))\n socket.on('typing', (data: any) => handleSocketMessage({ type: 'typing', ...data }))\n socket.on('handoff:initiated', (data: any) => handleSocketMessage({ type: 'handoff:initiated', ...data }))\n socket.on('chat:closed', (data: any) => handleSocketMessage({ type: 'chat:closed', ...data }))\n\n socket.on('disconnect', (reason) => {\n setConnectionStatus('disconnected')\n console.log('[ChatWidget] Socket disconnected:', reason)\n })\n\n socket.on('reconnect_attempt', (attempt) => {\n setConnectionStatus('connecting')\n console.log(`[ChatWidget] Reconnect attempt #${attempt}`)\n })\n\n socket.on('reconnect_failed', () => {\n console.warn('[ChatWidget] All reconnect attempts failed, falling back to polling')\n if (isOpen && currentSessionId) startPolling(currentSessionId)\n })\n\n socket.on('connect_error', (err) => {\n console.error('[ChatWidget] Socket connect error:', err?.message || err, { baseUrl: namespaceUrl, projectId, visitorId })\n setConnectionStatus('connecting') // socket.io will auto-retry\n })\n\n socketRef.current = socket\n },\n [projectId, visitorId, baseUrl, isOpen, handleSocketMessage, lastFailedSend],\n )\n\n // Polling fallback\n const startPolling = useCallback(\n (currentSessionId: string) => {\n if (pollingIntervalRef.current) return\n pollingIntervalRef.current = setInterval(async () => {\n try {\n const apiKey = ensureApiKey()\n if (!apiKey) return\n const response = await sonorFetch(`${baseUrl}/engage/widget/messages?sessionId=${currentSessionId}`, {}, { apiKey, retries: 0 })\n if (response.ok) {\n const { data } = await response.json()\n setMessages((prev) => {\n const existingIds = new Set(prev.map((m) => m.id))\n const newMessages = data.filter((m: any) => !existingIds.has(m.id))\n if (newMessages.length > 0) {\n return [\n ...prev,\n ...newMessages.map((m: any) => ({\n id: m.id,\n role: m.role === 'visitor' ? 'user' : m.role,\n content: m.content,\n timestamp: new Date(m.created_at),\n agentName: m.sender_name,\n })),\n ]\n }\n return prev\n })\n }\n } catch (error) {\n console.error('[ChatWidget] Polling failed:', error)\n }\n }, 3000)\n },\n [baseUrl],\n )\n\n // -------------------------------------------------------------------------\n // Effects\n // -------------------------------------------------------------------------\n\n // Scroll to bottom on new messages\n useEffect(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' })\n }, [messages, agentTyping])\n\n // Focus input when chat opens and welcome screen is hidden\n useEffect(() => {\n if (isOpen && !showWelcome && inputRef.current) inputRef.current.focus()\n }, [isOpen, showWelcome])\n\n // Fetch config + availability on mount\n useEffect(() => {\n fetchWidgetConfig()\n checkAvailability()\n const interval = setInterval(checkAvailability, 60000)\n return () => {\n clearInterval(interval)\n if (socketRef.current) {\n socketRef.current.disconnect()\n socketRef.current = null\n }\n }\n }, [fetchWidgetConfig, checkAvailability])\n\n // Init session and connect when chat opens (after welcome dismissed and routing decided)\n useEffect(() => {\n if (isOpen && !showWelcome && !checkingAvailability && !showOfflineForm && !sessionId) {\n initSession().then(async (result) => {\n if (!result?.id) return\n const { id, signalEnabled } = result\n const pending = pendingInitialMessageRef.current\n if (pending) {\n pendingInitialMessageRef.current = null\n }\n\n // AI mode: send pending message directly to Signal API (no Portal passthrough)\n if (signalEnabled && pending) {\n setIsLoading(true)\n setMessages((prev) => [\n ...prev,\n { id: `u-${Date.now()}`, role: 'user', content: pending, timestamp: new Date() },\n ])\n try {\n const reply = await sendToSignalApi(pending, id)\n pushEchoReply(reply, pending)\n } catch (err) {\n console.error('[ChatWidget] Signal API error:', err)\n setMessages((prev) => [\n ...prev,\n {\n id: `err-${Date.now()}`,\n role: 'assistant',\n content: 'I apologize, but I encountered an error. Would you like to speak with a team member?',\n timestamp: new Date(),\n suggestions: ['Talk to a person', 'Try again'],\n offerHandoff: true,\n },\n ])\n } finally {\n setIsLoading(false)\n }\n }\n\n // Only connect socket for live-only (non-Signal) projects.\n // Signal projects stay socket-free during the AI phase — the socket\n // connects later if/when a handoff to a live agent is confirmed.\n if (!signalEnabled) {\n setConnectionStatus('connecting')\n await connectSocket(id)\n }\n\n // Live mode: send pending via socket once connected\n if (!signalEnabled && pending) {\n const waitForSocket = () => new Promise<void>((resolve) => {\n const check = (attempts = 0) => {\n if (socketRef.current?.connected || attempts > 20) { resolve(); return }\n setTimeout(() => check(attempts + 1), 150)\n }\n check()\n })\n await waitForSocket()\n if (socketRef.current?.connected) {\n socketRef.current.emit('visitor:message', { content: pending })\n }\n }\n })\n }\n return () => {\n if (pollingIntervalRef.current) clearInterval(pollingIntervalRef.current)\n }\n }, [isOpen, showWelcome, checkingAvailability, showOfflineForm, sessionId, initSession, connectSocket, sendToSignalApi, pushEchoReply])\n\n // -------------------------------------------------------------------------\n // Handlers\n // -------------------------------------------------------------------------\n\n const handleToggle = useCallback(() => {\n setIsOpen((prev) => !prev)\n }, [])\n\n /** Start chatting (dismiss welcome screen) with availability routing */\n const startChat = useCallback(\n async (initialMessage?: string) => {\n setShowWelcome(false)\n\n const beginChatSession = () => {\n setMessages([{ id: 'welcome', role: 'assistant', content: welcomeMessage, timestamp: new Date() }])\n if (initialMessage) {\n // Stash the initial message — the session-init effect will send it\n // once the socket is connected. This avoids duplicate messages.\n pendingInitialMessageRef.current = initialMessage\n const userMsg: Message = { id: `user-${Date.now()}`, role: 'user', content: initialMessage, timestamp: new Date() }\n setMessages((prev) => [...prev, userMsg])\n setIsLoading(true)\n }\n }\n\n // Signal/AI mode → go straight to chat (AI is always available)\n if (widgetConfig?.signal_enabled) {\n beginChatSession()\n return\n }\n\n // ─── Live-only mode: check agent availability ───────────────────\n // No Signal → live chat with human agents or offline form.\n setCheckingAvailability(true)\n\n // First real-time check\n const firstCheck = await checkAvailability()\n if (firstCheck?.available && firstCheck.agentsOnline > 0) {\n setCheckingAvailability(false)\n beginChatSession()\n return\n }\n\n // No agents online – wait ~5 seconds for push notification response.\n // Future: this is where we send a push notification to agents via\n // the Sonor Messenger app. Agents get 5-6 seconds to open the\n // notification and come online before we fall through to the offline form.\n await new Promise((resolve) => setTimeout(resolve, 5000))\n\n // Re-check after the grace period\n const secondCheck = await checkAvailability()\n setCheckingAvailability(false)\n\n if (secondCheck?.available && secondCheck.agentsOnline > 0) {\n // An agent responded – start live chat\n beginChatSession()\n } else {\n // Still no agents – show offline form\n setShowOfflineForm(true)\n }\n },\n [widgetConfig?.signal_enabled, welcomeMessage, checkAvailability],\n )\n\n const uploadWidgetFile = useCallback(\n async (file: File): Promise<MessageAttachment | null> => {\n if (!sessionId || !visitorId) return null\n const apiKey = ensureApiKey()\n if (!apiKey) return null\n const form = new FormData()\n form.append('file', file)\n form.append('sessionId', sessionId)\n form.append('visitorId', visitorId)\n const res = await sonorFetch(`${baseUrl}/engage/widget/upload`, {\n method: 'POST',\n body: form,\n }, { apiKey, retries: 0 })\n if (!res.ok) throw new Error('Upload failed')\n const json = await res.json()\n const d = json?.data ?? json\n return d?.url ? { name: d.name ?? file.name, url: d.url, size: d.size, mimeType: d.mimeType } : null\n },\n [sessionId, visitorId, baseUrl],\n )\n\n const handleSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault()\n const hasText = !!inputValue.trim()\n const hasFiles = pendingFiles.length > 0\n if ((!hasText && !hasFiles) || isLoading) return\n\n const content = inputValue.trim() || ''\n let attachments: MessageAttachment[] = []\n if (pendingFiles.length) {\n try {\n for (const file of pendingFiles) {\n const att = await uploadWidgetFile(file)\n if (att) attachments.push(att)\n }\n setPendingFiles([])\n } catch (err) {\n console.error('[ChatWidget] File upload failed', err)\n setMessages((prev) => [...prev, { id: `err-${Date.now()}`, role: 'assistant', content: 'Failed to upload file. Please try again.', timestamp: new Date() }])\n return\n }\n }\n\n const userMessage: Message = {\n id: `user-${Date.now()}`,\n role: 'user',\n content,\n timestamp: new Date(),\n ...(attachments.length ? { attachments } : {}),\n }\n setMessages((prev) => [...prev, userMessage])\n setInputValue('')\n setIsLoading(true)\n\n // AI mode: call Signal API directly (no Portal passthrough)\n // Once handed off to a live agent, messages go through the socket instead.\n if (widgetConfig?.signal_enabled && !isHandedOff && hasText) {\n try {\n const reply = await sendToSignalApi(content, sessionId)\n const lastUserContent = messages.filter((m) => m.role === 'user').slice(-1)[0]?.content ?? ''\n pushEchoReply(reply, lastUserContent)\n } catch (err) {\n console.error('[ChatWidget] Signal API error:', err)\n setMessages((prev) => [\n ...prev,\n {\n id: `err-${Date.now()}`,\n role: 'assistant',\n content: 'I apologize, but I encountered an error. Would you like to speak with a team member?',\n timestamp: new Date(),\n suggestions: ['Talk to a person', 'Try again'],\n offerHandoff: true,\n },\n ])\n } finally {\n setIsLoading(false)\n }\n return\n }\n\n // Live mode: use socket\n const socket = socketRef.current\n if (socket?.connected) {\n socket.emit('visitor:message', { content: userMessage.content, attachments: attachments.length ? attachments : undefined })\n setLastFailedSend(null)\n return\n }\n\n // Buffer for retry on reconnect instead of showing error immediately\n setLastFailedSend({ content: userMessage.content, attachments })\n // Give socket.io a moment to reconnect before showing error\n setTimeout(() => {\n if (!socketRef.current?.connected) {\n setMessages((prev) => [\n ...prev,\n { id: `error-${Date.now()}`, role: 'system', content: 'Reconnecting...', timestamp: new Date(), sendFailed: true },\n ])\n setIsLoading(false)\n }\n }, 3000)\n },\n [inputValue, isLoading, pendingFiles, uploadWidgetFile, widgetConfig?.signal_enabled, isHandedOff, sendToSignalApi, sessionId, pushEchoReply],\n )\n\n /**\n * Send a plain text turn to Echo (used by suggest_action chips). AI-only —\n * uiActions only ever appear in Signal/AI mode, so this mirrors handleSubmit's\n * AI branch (routing through the same sendToSignalApi + pushEchoReply path).\n */\n const sendEchoText = useCallback(\n async (text: string) => {\n const content = text.trim()\n if (!content || isLoading) return\n setMessages((prev) => [\n ...prev,\n { id: `user-${Date.now()}`, role: 'user', content, timestamp: new Date() },\n ])\n setIsLoading(true)\n try {\n const reply = await sendToSignalApi(content, sessionId)\n pushEchoReply(reply, content)\n } catch (err) {\n console.error('[ChatWidget] Signal API error:', err)\n setMessages((prev) => [\n ...prev,\n {\n id: `err-${Date.now()}`,\n role: 'assistant',\n content: 'I apologize, but I encountered an error. Would you like to speak with a team member?',\n timestamp: new Date(),\n suggestions: ['Talk to a person', 'Try again'],\n offerHandoff: true,\n },\n ])\n } finally {\n setIsLoading(false)\n }\n },\n [isLoading, sessionId, sendToSignalApi, pushEchoReply],\n )\n\n /**\n * A suggest_action chip was clicked. Navigate when `action` is a path/URL\n * (internal path / hash same-tab, external URL new tab); otherwise send the\n * human-readable message as the next chat turn.\n */\n const handleSuggestAction = useCallback(\n (action: string | undefined, message: string) => {\n const a = (action || '').trim()\n if (a && isNavigable(a)) {\n if (typeof window !== 'undefined') {\n if (/^https?:\\/\\//i.test(a)) window.open(a, '_blank', 'noopener,noreferrer')\n else window.location.href = a\n }\n return\n }\n if (message?.trim()) void sendEchoText(message)\n },\n [sendEchoText],\n )\n\n const retryFailedSend = useCallback(() => {\n if (!lastFailedSend || !sessionId) return\n const socket = socketRef.current\n if (socket?.connected) {\n socket.emit('visitor:message', { content: lastFailedSend.content, attachments: lastFailedSend.attachments?.length ? lastFailedSend.attachments : undefined })\n setLastFailedSend(null)\n setMessages((prev) => prev.filter((m) => !m.sendFailed))\n setIsLoading(true)\n } else {\n connectSocket(sessionId)\n }\n }, [lastFailedSend, sessionId, connectSocket])\n\n const requestHandoff = useCallback(async () => {\n if (!sessionId) return\n const apiKey = ensureApiKey()\n if (!apiKey) return\n setCheckingHandoff(true)\n try {\n // Backend handles availability check (first check → 5s grace → second check)\n // and emits urgent notifications to agents if available.\n const res = await sonorFetch(`${baseUrl}/engage/widget/handoff`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ sessionId }),\n }, { apiKey, retries: 0 })\n const json = await res.json()\n const available = json?.data?.available === true\n setCheckingHandoff(false)\n\n if (available) {\n // Agents are online and notified — NOW connect the socket so the\n // visitor becomes visible in the agent's dashboard for the first time.\n setIsHandedOff(true)\n setConnectionStatus('connecting')\n await connectSocket(sessionId)\n setMessages((prev) => [\n ...prev,\n { id: `handoff-${Date.now()}`, role: 'system', content: 'Connecting you with a team member. Please hold on!', timestamp: new Date() },\n ])\n } else {\n // No agents online — show offline form\n setHandoffOfflinePrompt(widgetConfig?.offline_subheading ?? \"Nobody is online right now. Leave your details and we'll get back to you.\")\n setShowOfflineForm(true)\n setMessages((prev) => [\n ...prev,\n { id: `handoff-offline-${Date.now()}`, role: 'system', content: offlineHeading, timestamp: new Date() },\n ])\n }\n } catch (error) {\n setCheckingHandoff(false)\n console.error('[ChatWidget] Handoff request failed:', error)\n }\n }, [sessionId, baseUrl, widgetConfig, offlineHeading, connectSocket])\n\n const [offlineError, setOfflineError] = useState<string | null>(null)\n\n const handleOfflineSubmit = useCallback(\n async (e: React.FormEvent) => {\n e.preventDefault()\n if (!offlineForm.name || !offlineForm.email || !offlineForm.message) return\n const apiKey = ensureApiKey()\n if (!apiKey) return\n setIsLoading(true)\n setOfflineError(null)\n try {\n const response = await sonorFetch(`${baseUrl}/engage/widget/offline-form`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n projectId,\n visitorId,\n ...offlineForm,\n pageUrl: typeof window !== 'undefined' ? window.location.href : '',\n ...(widgetConfig?.offlineFormSlug && { formSlug: widgetConfig.offlineFormSlug }),\n }),\n }, { apiKey, retries: 0 })\n if (response.ok) {\n setOfflineSubmitted(true)\n } else {\n const errorBody = await response.text().catch(() => '')\n console.error(`[ChatWidget] Offline form returned ${response.status}:`, errorBody)\n setOfflineError('Something went wrong. Please try again.')\n }\n } catch (error) {\n console.error('[ChatWidget] Offline form submission failed:', error)\n setOfflineError('Unable to send message. Please check your connection and try again.')\n } finally {\n setIsLoading(false)\n }\n },\n [offlineForm, projectId, visitorId, baseUrl, widgetConfig],\n )\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSubmit(e as any)\n }\n }, [handleSubmit])\n\n const handleTyping = useCallback(() => {\n const socket = socketRef.current\n if (socket?.connected) {\n socket.emit('visitor:typing', { isTyping: true })\n setTimeout(() => {\n if (socketRef.current?.connected) socketRef.current.emit('visitor:typing', { isTyping: false })\n }, 2000)\n }\n }, [])\n\n // -------------------------------------------------------------------------\n // Status label\n // -------------------------------------------------------------------------\n\n const statusLabel = (() => {\n if (showOfflineForm) return null\n if (checkingAvailability) return { dot: '#f59e0b', text: 'Checking for a team member...' }\n if (widgetConfig?.signal_enabled) return { dot: null, text: 'Echo Intelligent Site Assistant' }\n if (availability && availability.agentsOnline > 0) return { dot: '#22c55e', text: 'Online' }\n return { dot: 'var(--sk-text-tertiary, #9ca3af)', text: \"We'll respond soon\" }\n })()\n\n // -------------------------------------------------------------------------\n // Render: Chat Button\n // -------------------------------------------------------------------------\n\n const ChatButton = (\n <button\n type=\"button\"\n data-sk-echo-launcher\n onClick={handleToggle}\n aria-label={isOpen ? 'Close chat' : 'Open chat'}\n style={{\n position: 'fixed',\n [position === 'bottom-left' ? 'left' : 'right']: '20px',\n bottom: 'calc(20px + env(safe-area-inset-bottom, 0px))',\n width: '60px',\n height: '60px',\n borderRadius: '50%',\n backgroundColor: primaryColor,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n boxShadow: '0 4px 12px rgba(0, 0, 0, 0.25)',\n transition: 'transform 0.2s, box-shadow 0.2s',\n zIndex: 9999,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.transform = 'scale(1.05)'\n e.currentTarget.style.boxShadow = '0 6px 16px rgba(0, 0, 0, 0.3)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.transform = 'scale(1)'\n e.currentTarget.style.boxShadow = '0 4px 12px rgba(0, 0, 0, 0.25)'\n }}\n >\n {isOpen ? (\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n ) : (\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n )}\n </button>\n )\n\n // -------------------------------------------------------------------------\n // Render: Header (shared across all views)\n // -------------------------------------------------------------------------\n\n const Header = (\n <div\n style={{\n padding: '16px 20px',\n background: `linear-gradient(135deg, ${primaryColor}, ${adjustColor(primaryColor, -25)})`,\n color: isLightColor(primaryColor) ? '#1a1a1a' : 'white',\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n }}\n >\n {/* Logo or icon */}\n <div\n style={{\n width: 40,\n height: 40,\n borderRadius: '50%',\n backgroundColor: 'rgba(255,255,255,0.2)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'hidden',\n flexShrink: 0,\n }}\n >\n {logoUrl ? (\n <img src={logoUrl} alt=\"\" style={{ width: 28, height: 28, objectFit: 'contain', filter: isLightColor(primaryColor) ? 'none' : 'brightness(0) invert(1)' }} />\n ) : (\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\" />\n </svg>\n )}\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontWeight: 600, fontSize: 16, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>\n {showOfflineForm ? offlineHeading : businessName}\n </div>\n {statusLabel && (\n <div style={{ fontSize: 13, opacity: 0.9, display: 'flex', alignItems: 'center', gap: 6, marginTop: 2 }}>\n {statusLabel.dot && (\n <span style={{ width: 8, height: 8, borderRadius: '50%', backgroundColor: statusLabel.dot, flexShrink: 0 }} />\n )}\n {statusLabel.text}\n </div>\n )}\n </div>\n\n {/* Connection status indicator */}\n {connectionStatus === 'connecting' && !showWelcome && !showOfflineForm && (\n <div style={{ fontSize: 11, opacity: 0.7, display: 'flex', alignItems: 'center', gap: 4 }}>\n <span style={{ animation: 'chatDot 1s infinite ease-in-out' }}>●</span>\n Connecting\n </div>\n )}\n </div>\n )\n\n // -------------------------------------------------------------------------\n // Render: Welcome Screen\n // -------------------------------------------------------------------------\n\n const WelcomeScreen = (\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', padding: 20, gap: 16 }}>\n <div style={{ textAlign: 'center', paddingTop: 8 }}>\n <div style={{ fontSize: 15, color: 'var(--sk-text-primary, #374151)', lineHeight: 1.5 }}>\n {welcomeMessage}\n </div>\n </div>\n\n {/* Quick action chips */}\n {quickActions.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {quickActions.map((action, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => startChat(action)}\n style={{\n padding: '12px 16px',\n borderRadius: 12,\n border: `1px solid ${hexAlpha('--sk-primary-rgb', 0.2, primaryRgb)}`,\n backgroundColor: hexAlpha('--sk-primary-rgb', 0.031, primaryRgb),\n color: primaryColor,\n fontSize: 14,\n cursor: 'pointer',\n textAlign: 'left',\n transition: 'background-color 0.15s, border-color 0.15s',\n lineHeight: 1.4,\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = hexAlpha('--sk-primary-rgb', 0.082, primaryRgb)\n e.currentTarget.style.borderColor = hexAlpha('--sk-primary-rgb', 0.333, primaryRgb)\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = hexAlpha('--sk-primary-rgb', 0.031, primaryRgb)\n e.currentTarget.style.borderColor = hexAlpha('--sk-primary-rgb', 0.2, primaryRgb)\n }}\n >\n {action}\n </button>\n ))}\n </div>\n )}\n\n {/* Start chat button */}\n <button\n type=\"button\"\n onClick={() => startChat()}\n style={{\n padding: '12px 20px',\n borderRadius: 12,\n border: 'none',\n backgroundColor: primaryColor,\n color: isLightColor(primaryColor) ? '#1a1a1a' : 'white',\n fontSize: 14,\n fontWeight: 600,\n cursor: 'pointer',\n marginTop: 'auto',\n }}\n >\n Start a conversation\n </button>\n\n {/* Business phone */}\n {widgetConfig?.business_info?.phone && (\n <div style={{ textAlign: 'center', fontSize: 13, color: 'var(--sk-text-secondary, #6b7280)' }}>\n Or call us at{' '}\n <a href={`tel:${widgetConfig.business_info.phone}`} style={{ color: primaryColor, textDecoration: 'none', fontWeight: 500 }}>\n {widgetConfig.business_info.phone}\n </a>\n </div>\n )}\n </div>\n )\n\n // -------------------------------------------------------------------------\n // Render: Offline Form\n // -------------------------------------------------------------------------\n\n const OfflineFormView = (\n <div style={{ padding: 20, flex: 1, overflowY: 'auto' }}>\n {offlineSubmitted ? (\n <div style={{ textAlign: 'center', padding: 20 }}>\n <div style={{ width: 56, height: 56, borderRadius: '50%', backgroundColor: hexAlpha('--sk-primary-rgb', 0.082, primaryRgb), display: 'flex', alignItems: 'center', justifyContent: 'center', margin: '0 auto 16px' }}>\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={primaryColor} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n </div>\n <h3 style={{ margin: '0 0 8px', fontSize: 18, fontWeight: 600, color: 'var(--sk-text-primary, #111827)' }}>Message Sent!</h3>\n <p style={{ margin: 0, color: 'var(--sk-text-secondary, #6b7280)', fontSize: 14 }}>{offlineSubheading}</p>\n </div>\n ) : (\n <form onSubmit={handleOfflineSubmit}>\n <p style={{ margin: '0 0 16px', color: 'var(--sk-text-secondary, #6b7280)', fontSize: 14 }}>{offlineSubheading}</p>\n {[\n { name: 'name' as const, type: 'text', placeholder: 'Your name *', required: true },\n { name: 'email' as const, type: 'email', placeholder: 'Your email *', required: true },\n { name: 'phone' as const, type: 'tel', placeholder: 'Phone (optional)', required: false },\n ].map((field) => (\n <div key={field.name} style={{ marginBottom: 12 }}>\n <input\n type={field.type}\n placeholder={field.placeholder}\n value={offlineForm[field.name]}\n onChange={(e) => setOfflineForm((prev) => ({ ...prev, [field.name]: e.target.value }))}\n required={field.required}\n style={{ width: '100%', padding: '10px 12px', borderRadius: 8, border: '1px solid var(--sk-border, #e5e7eb)', fontSize: 14, outline: 'none', boxSizing: 'border-box' }}\n onFocus={(e) => (e.currentTarget.style.borderColor = primaryColor)}\n onBlur={(e) => (e.currentTarget.style.borderColor = 'var(--sk-border, #e5e7eb)')}\n />\n </div>\n ))}\n <div style={{ marginBottom: 16 }}>\n <textarea\n placeholder=\"How can we help? *\"\n value={offlineForm.message}\n onChange={(e) => setOfflineForm((prev) => ({ ...prev, message: e.target.value }))}\n required\n rows={4}\n style={{ width: '100%', padding: '10px 12px', borderRadius: 8, border: '1px solid var(--sk-border, #e5e7eb)', fontSize: 14, outline: 'none', resize: 'vertical', boxSizing: 'border-box' }}\n onFocus={(e) => (e.currentTarget.style.borderColor = primaryColor)}\n onBlur={(e) => (e.currentTarget.style.borderColor = 'var(--sk-border, #e5e7eb)')}\n />\n </div>\n {offlineError && (\n <div style={{ padding: '8px 12px', borderRadius: 8, backgroundColor: 'var(--sk-error-bg, #fef2f2)', border: '1px solid var(--sk-error, #fecaca)', color: 'var(--sk-error, #dc2626)', fontSize: 13, marginBottom: 12 }}>\n {offlineError}\n </div>\n )}\n <button\n type=\"submit\"\n disabled={isLoading}\n style={{\n width: '100%',\n padding: '12px',\n borderRadius: 8,\n border: 'none',\n backgroundColor: primaryColor,\n color: isLightColor(primaryColor) ? '#1a1a1a' : 'white',\n fontSize: 14,\n fontWeight: 600,\n cursor: isLoading ? 'wait' : 'pointer',\n opacity: isLoading ? 0.7 : 1,\n }}\n >\n {isLoading ? 'Sending...' : 'Send Message'}\n </button>\n </form>\n )}\n </div>\n )\n\n // -------------------------------------------------------------------------\n // Render: Checking Availability Screen\n // -------------------------------------------------------------------------\n\n const CheckingScreen = (\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', alignItems: 'center', justifyContent: 'center', padding: 32, gap: 20, textAlign: 'center' }}>\n {/* Pulsing radar icon */}\n <div style={{ position: 'relative', width: 64, height: 64 }}>\n <div\n style={{\n position: 'absolute',\n inset: 0,\n borderRadius: '50%',\n backgroundColor: hexAlpha('--sk-primary-rgb', 0.082, primaryRgb),\n animation: 'checkPulse 2s infinite ease-out',\n }}\n />\n <div\n style={{\n position: 'absolute',\n inset: 8,\n borderRadius: '50%',\n backgroundColor: hexAlpha('--sk-primary-rgb', 0.145, primaryRgb),\n animation: 'checkPulse 2s infinite ease-out 0.4s',\n }}\n />\n <div\n style={{\n position: 'absolute',\n inset: 16,\n borderRadius: '50%',\n backgroundColor: primaryColor,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke={isLightColor(primaryColor) ? '#1a1a1a' : 'white'} strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"8.5\" cy=\"7\" r=\"4\" />\n <line x1=\"20\" y1=\"8\" x2=\"20\" y2=\"14\" />\n <line x1=\"23\" y1=\"11\" x2=\"17\" y2=\"11\" />\n </svg>\n </div>\n </div>\n\n <div>\n <div style={{ fontSize: 16, fontWeight: 600, color: 'var(--sk-text-primary, #111827)', marginBottom: 6 }}>\n {checkingHandoff ? 'Looking for online support' : 'Checking for a team member'}\n </div>\n <div style={{ fontSize: 14, color: 'var(--sk-text-secondary, #6b7280)', lineHeight: 1.5 }}>\n One moment please\n <span style={{ display: 'inline-flex', width: 20 }}>\n <span style={{ animation: 'checkDots 1.5s infinite steps(4, end)' }}>...</span>\n </span>\n </div>\n </div>\n\n {/* Progress bar */}\n <div style={{ width: '80%', height: 3, backgroundColor: 'var(--sk-border, #e5e7eb)', borderRadius: 2, overflow: 'hidden' }}>\n <div\n style={{\n width: '100%',\n height: '100%',\n backgroundColor: primaryColor,\n borderRadius: 2,\n animation: 'checkProgress 5s linear forwards',\n transformOrigin: 'left',\n }}\n />\n </div>\n\n <div style={{ fontSize: 12, color: 'var(--sk-text-tertiary, #9ca3af)' }}>\n This usually takes just a few seconds\n </div>\n </div>\n )\n\n // -------------------------------------------------------------------------\n // Render: Messages View\n // -------------------------------------------------------------------------\n\n const MessagesView = (\n <>\n {/* Messages area */}\n <div\n style={{ flex: 1, overflowY: 'auto', padding: 16, display: 'flex', flexDirection: 'column', gap: 12, backgroundColor: 'var(--sk-bg-elevated, #f9fafb)' }}\n >\n {messages.map((message) => {\n const isAssistant = message.role === 'assistant' || message.role === 'agent'\n return (\n <div key={message.id} style={{ display: 'flex', justifyContent: message.role === 'user' ? 'flex-end' : 'flex-start' }}>\n <div\n style={{\n maxWidth: '80%',\n padding: message.role === 'system' ? '8px 12px' : isAssistant ? '12px 16px' : '10px 14px',\n borderRadius: message.role === 'user' ? '16px 16px 4px 16px' : message.role === 'system' ? '8px' : '16px 16px 16px 4px',\n backgroundColor: message.role === 'user' ? primaryColor : message.role === 'system' ? 'var(--sk-border, #e5e7eb)' : 'var(--sk-bg, #ffffff)',\n color: message.role === 'user' ? (isLightColor(primaryColor) ? '#1a1a1a' : 'white') : message.role === 'system' ? 'var(--sk-text-secondary, #6b7280)' : 'var(--sk-text-primary, #111827)',\n boxShadow: message.role === 'system' ? 'none' : '0 1px 2px rgba(0,0,0,0.08)',\n fontSize: message.role === 'system' ? 13 : 14,\n fontStyle: message.role === 'system' ? 'italic' : 'normal',\n lineHeight: isAssistant ? 1.6 : 1.5,\n whiteSpace: isAssistant ? 'normal' : 'pre-wrap',\n wordBreak: 'break-word',\n textAlign: isAssistant ? 'left' : undefined,\n borderLeft: isAssistant ? `3px solid ${hexAlpha('--sk-primary-rgb', 0.2, primaryRgb)}` : undefined,\n }}\n >\n {message.agentName && message.role === 'agent' && (\n <div style={{ fontSize: 12, opacity: 0.6, marginBottom: 4 }}>{message.agentName}</div>\n )}\n {isAssistant ? (\n <div className=\"chatMessageContent\">\n <ReactMarkdown\n components={{\n p: ({ children }) => <p style={{ margin: '0 0 8px', lineHeight: 1.6 }}>{children}</p>,\n strong: ({ children }) => <strong style={{ fontWeight: 600 }}>{children}</strong>,\n ul: ({ children }) => <ul style={{ margin: '4px 0 8px', paddingLeft: 20 }}>{children}</ul>,\n ol: ({ children }) => <ol style={{ margin: '4px 0 8px', paddingLeft: 20 }}>{children}</ol>,\n li: ({ children }) => <li style={{ marginBottom: 4 }}>{children}</li>,\n h3: ({ children }) => <h3 style={{ margin: '12px 0 6px', fontSize: 15, fontWeight: 600 }}>{children}</h3>,\n h4: ({ children }) => <h4 style={{ margin: '8px 0 4px', fontSize: 14, fontWeight: 600 }}>{children}</h4>,\n a: ({ href, children }) => (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'inline-block',\n marginTop: 6,\n marginRight: 6,\n padding: '8px 14px',\n borderRadius: 8,\n backgroundColor: hexAlpha('--sk-primary-rgb', 0.082, primaryRgb),\n color: primaryColor,\n fontWeight: 600,\n fontSize: 13,\n textDecoration: 'none',\n border: `1px solid ${hexAlpha('--sk-primary-rgb', 0.25, primaryRgb)}`,\n boxShadow: '0 1px 2px rgba(0,0,0,0.06)',\n transition: 'background-color 0.15s, transform 0.1s',\n }}\n onMouseOver={(e) => {\n e.currentTarget.style.backgroundColor = hexAlpha('--sk-primary-rgb', 0.145, primaryRgb)\n e.currentTarget.style.transform = 'translateY(-1px)'\n }}\n onMouseOut={(e) => {\n e.currentTarget.style.backgroundColor = hexAlpha('--sk-primary-rgb', 0.082, primaryRgb)\n e.currentTarget.style.transform = 'translateY(0)'\n }}\n >\n {children}\n </a>\n ),\n }}\n >\n {linkifyUrls(message.content)}\n </ReactMarkdown>\n </div>\n ) : (\n message.content\n )}\n {/* Attachments */}\n {message.attachments?.length ? (\n <div style={{ marginTop: 8, display: 'flex', flexDirection: 'column', gap: 6 }}>\n {message.attachments.map((att, i) =>\n att.mimeType?.startsWith('image/') ? (\n <a key={i} href={att.url} target=\"_blank\" rel=\"noopener noreferrer\" style={{ display: 'block' }}>\n <img src={att.url} alt={att.name} style={{ maxWidth: '100%', maxHeight: 200, borderRadius: 8, objectFit: 'contain' }} />\n </a>\n ) : (\n <a key={i} href={att.url} target=\"_blank\" rel=\"noopener noreferrer\" style={{ fontSize: 13, wordBreak: 'break-all', display: 'flex', alignItems: 'center', gap: 6 }}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\" />\n </svg>\n {att.name}\n </a>\n ),\n )}\n </div>\n ) : null}\n {/* Suggestion chips */}\n {message.suggestions?.length ? (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 6, marginTop: 8 }}>\n {message.suggestions.map((s, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={() => {\n if (/talk\\s+to\\s+(a\\s+)?person/i.test(s)) {\n requestHandoff()\n } else {\n setInputValue(s)\n inputRef.current?.focus()\n }\n }}\n style={{\n padding: '6px 12px',\n borderRadius: 16,\n border: `1px solid ${primaryColor}`,\n backgroundColor: hexAlpha('--sk-primary-rgb', 0.063, primaryRgb),\n color: primaryColor,\n fontSize: 13,\n cursor: 'pointer',\n }}\n >\n {s}\n </button>\n ))}\n </div>\n ) : null}\n {/* Inline Echo UI actions (managed form / suggestion chips) */}\n {message.uiActions?.length ? (\n <EchoUiActions\n actions={message.uiActions}\n primaryColor={primaryColor}\n primaryRgb={primaryRgb}\n onSuggest={handleSuggestAction}\n />\n ) : null}\n {/* Retry on failed send */}\n {message.sendFailed && lastFailedSend && (\n <div style={{ marginTop: 8 }}>\n <button\n type=\"button\"\n onClick={retryFailedSend}\n style={{ padding: '6px 12px', borderRadius: 6, border: '1px solid var(--sk-error, #dc2626)', backgroundColor: 'var(--sk-error-bg, #fef2f2)', color: 'var(--sk-error, #dc2626)', fontSize: 13, cursor: 'pointer' }}\n >\n Retry send\n </button>\n </div>\n )}\n {/* Handoff button — only when user requested it or AI cannot answer (hide if \"Talk to a person\" chip already shown) */}\n {widgetConfig?.signal_enabled && message.role === 'assistant' && widgetConfig?.handoff_enabled !== false && message.offerHandoff && !message.suggestions?.some((s) => /talk\\s+to\\s+(a\\s+)?person/i.test(s)) && message.id === messages.filter((m) => m.role === 'assistant').slice(-1)[0]?.id && (\n <button\n onClick={requestHandoff}\n style={{\n display: 'inline-block',\n marginTop: 8,\n padding: '6px 12px',\n borderRadius: 6,\n border: `1px solid ${primaryColor}`,\n backgroundColor: 'transparent',\n color: primaryColor,\n fontSize: 13,\n cursor: 'pointer',\n }}\n >\n Talk to a person\n </button>\n )}\n </div>\n </div>\n )\n })}\n\n {/* Typing indicator */}\n {(isLoading || agentTyping) && (\n <div style={{ display: 'flex', justifyContent: 'flex-start' }}>\n <div\n style={{\n padding: '10px 14px',\n borderRadius: '16px 16px 16px 4px',\n backgroundColor: 'var(--sk-bg, #ffffff)',\n boxShadow: '0 1px 2px rgba(0,0,0,0.08)',\n display: 'flex',\n gap: 4,\n color: 'var(--sk-text-tertiary, #9ca3af)',\n }}\n >\n <span style={{ animation: 'chatDot 1.4s infinite ease-in-out', animationDelay: '0s' }}>●</span>\n <span style={{ animation: 'chatDot 1.4s infinite ease-in-out', animationDelay: '0.2s' }}>●</span>\n <span style={{ animation: 'chatDot 1.4s infinite ease-in-out', animationDelay: '0.4s' }}>●</span>\n </div>\n </div>\n )}\n\n <div ref={messagesEndRef} />\n </div>\n\n {/* Failed send bar */}\n {lastFailedSend && (\n <div style={{ padding: '8px 12px', backgroundColor: 'var(--sk-error-bg, #fef2f2)', borderTop: '1px solid var(--sk-error, #fecaca)', display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 8 }}>\n <span style={{ fontSize: 13, color: 'var(--sk-error, #dc2626)' }}>Failed to send</span>\n <button type=\"button\" onClick={retryFailedSend} style={{ padding: '4px 10px', borderRadius: 6, border: '1px solid var(--sk-error, #dc2626)', background: 'var(--sk-bg, #fff)', color: 'var(--sk-error, #dc2626)', fontSize: 12, cursor: 'pointer' }}>\n Retry\n </button>\n </div>\n )}\n\n {/* Input */}\n <form onSubmit={handleSubmit} style={{ padding: 12, borderTop: '1px solid var(--sk-border, #e5e7eb)', backgroundColor: 'var(--sk-bg, #ffffff)' }}>\n <div style={{ display: 'flex', gap: 8 }}>\n <input\n ref={inputRef}\n type=\"text\"\n value={inputValue}\n onChange={(e) => {\n setInputValue(e.target.value)\n handleTyping()\n }}\n onKeyDown={handleKeyDown}\n placeholder=\"Type a message...\"\n disabled={isLoading}\n style={{\n flex: 1,\n padding: '10px 14px',\n borderRadius: 24,\n border: '1px solid var(--sk-border, #e5e7eb)',\n fontSize: 14,\n outline: 'none',\n transition: 'border-color 0.2s',\n }}\n onFocus={(e) => (e.currentTarget.style.borderColor = primaryColor)}\n onBlur={(e) => (e.currentTarget.style.borderColor = 'var(--sk-border, #e5e7eb)')}\n />\n <button\n type=\"submit\"\n disabled={!inputValue.trim() || isLoading}\n style={{\n width: 40,\n height: 40,\n borderRadius: '50%',\n border: 'none',\n backgroundColor: (inputValue.trim() || pendingFiles.length) && !isLoading ? primaryColor : 'var(--sk-border, #e5e7eb)',\n color: (inputValue.trim() || pendingFiles.length) && !isLoading && isLightColor(primaryColor) ? '#1a1a1a' : 'white',\n cursor: inputValue.trim() && !isLoading ? 'pointer' : 'not-allowed',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'background-color 0.2s',\n flexShrink: 0,\n }}\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M2.01 21L23 12 2.01 3 2 10l15 2-15 2z\" />\n </svg>\n </button>\n </div>\n </form>\n </>\n )\n\n // -------------------------------------------------------------------------\n // Render: Popup\n // -------------------------------------------------------------------------\n\n const ChatPopup = isOpen && (\n <div\n style={{\n position: 'fixed',\n [position === 'bottom-left' ? 'left' : 'right']: '20px',\n bottom: 'calc(90px + env(safe-area-inset-bottom, 0px))',\n width: '380px',\n maxWidth: 'calc(100vw - 40px)',\n height: '520px',\n maxHeight: 'calc(100dvh - 120px)',\n backgroundColor: 'var(--sk-bg, #ffffff)',\n borderRadius: '16px',\n boxShadow: '0 8px 32px rgba(0, 0, 0, 0.2)',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n zIndex: 9998,\n animation: 'chatSlideUp 0.3s ease-out',\n }}\n >\n {Header}\n\n {/* Content: Welcome → Checking → Chat → Offline */}\n {checkingAvailability || checkingHandoff ? CheckingScreen : showOfflineForm ? OfflineFormView : showWelcome && welcomeEnabled && messages.length === 0 ? WelcomeScreen : MessagesView}\n\n {/* Powered by */}\n {showPoweredBy && (\n <div style={{ padding: '6px 0', textAlign: 'center', fontSize: 11, color: 'var(--sk-text-tertiary, #9ca3af)', backgroundColor: 'var(--sk-bg, #ffffff)', borderTop: '1px solid var(--sk-bg-elevated, #f3f4f6)' }}>\n Powered by{' '}\n <a href=\"https://sonor.io\" target=\"_blank\" rel=\"noopener noreferrer\" style={{ color: 'var(--sk-text-secondary, #6b7280)', textDecoration: 'none', fontWeight: 500 }}>\n Sonor\n </a>\n </div>\n )}\n\n {/* CSS animations and markdown styles */}\n <style>{`\n @keyframes chatSlideUp {\n from { opacity: 0; transform: translateY(20px); }\n to { opacity: 1; transform: translateY(0); }\n }\n @keyframes chatDot {\n 0%, 80%, 100% { opacity: 0.3; }\n 40% { opacity: 1; }\n }\n @keyframes checkPulse {\n 0% { transform: scale(1); opacity: 1; }\n 100% { transform: scale(1.8); opacity: 0; }\n }\n @keyframes checkDots {\n 0% { content: ''; }\n 25% { content: '.'; }\n 50% { content: '..'; }\n 75% { content: '...'; }\n }\n @keyframes checkProgress {\n from { transform: scaleX(0); }\n to { transform: scaleX(1); }\n }\n .chatMessageContent p:first-child { margin-top: 0; }\n .chatMessageContent p:last-child { margin-bottom: 0; }\n `}</style>\n </div>\n )\n\n // Show button immediately; popup content needs projectId (resolved from API key via project-info)\n return (\n <>\n {ChatPopup}\n {ChatButton}\n </>\n )\n}\n"]}
|