@sonordev/site-kit 5.3.1 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -0
- package/agent-manifest.json +5 -4
- package/dist/AnalyticsProvider-2XIOMRCN.mjs +11 -0
- package/dist/{AnalyticsProvider-NA7EMJCA.mjs.map → AnalyticsProvider-2XIOMRCN.mjs.map} +1 -1
- package/dist/AnalyticsProvider-Y2P2BPOI.js +32 -0
- package/dist/{AnalyticsProvider-XE3ADUUH.js.map → AnalyticsProvider-Y2P2BPOI.js.map} +1 -1
- package/dist/{BlogViewTracker-DVJHZ7CM.js → BlogViewTracker-6EGEDPP3.js} +6 -6
- package/dist/{BlogViewTracker-DVJHZ7CM.js.map → BlogViewTracker-6EGEDPP3.js.map} +1 -1
- package/dist/{BlogViewTracker-MKJYTTJQ.mjs → BlogViewTracker-R4YQ76WP.mjs} +5 -5
- package/dist/{BlogViewTracker-MKJYTTJQ.mjs.map → BlogViewTracker-R4YQ76WP.mjs.map} +1 -1
- package/dist/ChatWidget-2OFWPCWF.js +20 -0
- package/dist/{ChatWidget-BZ3KOSXG.js.map → ChatWidget-2OFWPCWF.js.map} +1 -1
- package/dist/ChatWidget-4AOGHYXQ.mjs +11 -0
- package/dist/{ChatWidget-BD4F4XLD.mjs.map → ChatWidget-4AOGHYXQ.mjs.map} +1 -1
- package/dist/EngageWidget-SFO2XRNG.mjs +9 -0
- package/dist/{EngageWidget-L7B6PCM3.mjs.map → EngageWidget-SFO2XRNG.mjs.map} +1 -1
- package/dist/EngageWidget-T4KAAD3G.js +18 -0
- package/dist/{EngageWidget-JPP6EDCJ.js.map → EngageWidget-T4KAAD3G.js.map} +1 -1
- package/dist/{FileField-7WPRONDS.mjs → FileField-7DF2SLPF.mjs} +5 -5
- package/dist/{FileField-7WPRONDS.mjs.map → FileField-7DF2SLPF.mjs.map} +1 -1
- package/dist/{FileField-GHT7444Y.js → FileField-CE2XNBBG.js} +6 -6
- package/dist/{FileField-GHT7444Y.js.map → FileField-CE2XNBBG.js.map} +1 -1
- package/dist/{FormSpotlight-WZVS6HHR.mjs → FormSpotlight-IRLKSZGV.mjs} +3 -3
- package/dist/{FormSpotlight-WZVS6HHR.mjs.map → FormSpotlight-IRLKSZGV.mjs.map} +1 -1
- package/dist/{FormSpotlight-BB2IB7IX.js → FormSpotlight-ZD3WR5BC.js} +15 -15
- package/dist/{FormSpotlight-BB2IB7IX.js.map → FormSpotlight-ZD3WR5BC.js.map} +1 -1
- package/dist/{FormStage-Y3NHHMV2.mjs → FormStage-2OSRNQJL.mjs} +3 -3
- package/dist/{FormStage-Y3NHHMV2.mjs.map → FormStage-2OSRNQJL.mjs.map} +1 -1
- package/dist/{FormStage-FLBLXENZ.js → FormStage-OSPXOUQE.js} +13 -13
- package/dist/{FormStage-FLBLXENZ.js.map → FormStage-OSPXOUQE.js.map} +1 -1
- package/dist/ManagedForm-5G37EDJT.mjs +14 -0
- package/dist/{ManagedForm-AJM6D4SK.mjs.map → ManagedForm-5G37EDJT.mjs.map} +1 -1
- package/dist/ManagedForm-JCHGBBQW.js +23 -0
- package/dist/{ManagedForm-2OPCHDNJ.js.map → ManagedForm-JCHGBBQW.js.map} +1 -1
- package/dist/{ManagedNewsletterForm-L2ZHJ7F4.js → ManagedNewsletterForm-4LVJZROZ.js} +8 -8
- package/dist/{ManagedNewsletterForm-L2ZHJ7F4.js.map → ManagedNewsletterForm-4LVJZROZ.js.map} +1 -1
- package/dist/{ManagedNewsletterForm-MJI2JXIB.mjs → ManagedNewsletterForm-QJSVH23S.mjs} +7 -7
- package/dist/{ManagedNewsletterForm-MJI2JXIB.mjs.map → ManagedNewsletterForm-QJSVH23S.mjs.map} +1 -1
- package/dist/{SignalCore-23YDDSWO.mjs → SignalCore-L6Z3YTCF.mjs} +5 -5
- package/dist/{SignalCore-23YDDSWO.mjs.map → SignalCore-L6Z3YTCF.mjs.map} +1 -1
- package/dist/{SignalCore-G2VM7NUP.js → SignalCore-NQ4YEOI7.js} +11 -11
- package/dist/{SignalCore-G2VM7NUP.js.map → SignalCore-NQ4YEOI7.js.map} +1 -1
- package/dist/SitemapSync-3LUZWBTB.js +18 -0
- package/dist/{SitemapSync-T2N3TCWF.js.map → SitemapSync-3LUZWBTB.js.map} +1 -1
- package/dist/SitemapSync-MYSTLJOM.mjs +9 -0
- package/dist/{SitemapSync-YLWMU6J3.mjs.map → SitemapSync-MYSTLJOM.mjs.map} +1 -1
- package/dist/SitemapSync.d.ts.map +1 -1
- package/dist/analytics/AnalyticsProvider.d.ts +11 -1
- package/dist/analytics/AnalyticsProvider.d.ts.map +1 -1
- package/dist/analytics/WebVitals.d.ts +7 -1
- package/dist/analytics/WebVitals.d.ts.map +1 -1
- package/dist/analytics/index.d.ts +1 -0
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +25 -12
- package/dist/analytics/index.mjs +6 -5
- package/dist/analytics/send-gate.d.ts +119 -0
- package/dist/analytics/send-gate.d.ts.map +1 -0
- package/dist/analytics/send-gate.test.d.ts +20 -0
- package/dist/analytics/send-gate.test.d.ts.map +1 -0
- package/dist/blog/AuthorPage.d.ts +1 -1
- package/dist/blog/AuthorPage.d.ts.map +1 -1
- package/dist/blog/BlogLayout.d.ts +3 -1
- package/dist/blog/BlogLayout.d.ts.map +1 -1
- package/dist/blog/BlogList.d.ts +3 -1
- package/dist/blog/BlogList.d.ts.map +1 -1
- package/dist/blog/BlogPost.d.ts +3 -1
- package/dist/blog/BlogPost.d.ts.map +1 -1
- package/dist/blog/BlogSidebar.d.ts +3 -1
- package/dist/blog/BlogSidebar.d.ts.map +1 -1
- package/dist/blog/ClusterLandingPage.d.ts +3 -1
- package/dist/blog/ClusterLandingPage.d.ts.map +1 -1
- package/dist/blog/ClusterNavigation.d.ts +3 -1
- package/dist/blog/ClusterNavigation.d.ts.map +1 -1
- package/dist/blog/RelatedPosts.d.ts +4 -1
- package/dist/blog/RelatedPosts.d.ts.map +1 -1
- package/dist/blog/artwork-components.test.d.ts +2 -0
- package/dist/blog/artwork-components.test.d.ts.map +1 -0
- package/dist/blog/artwork.d.ts +14 -0
- package/dist/blog/artwork.d.ts.map +1 -0
- package/dist/blog/artwork.test.d.ts +2 -0
- package/dist/blog/artwork.test.d.ts.map +1 -0
- package/dist/blog/blog-styles.d.ts.map +1 -1
- package/dist/blog/blog-tables.d.ts +13 -0
- package/dist/blog/blog-tables.d.ts.map +1 -0
- package/dist/blog/blog-tables.test.d.ts +2 -0
- package/dist/blog/blog-tables.test.d.ts.map +1 -0
- package/dist/blog/index.d.ts +3 -0
- package/dist/blog/index.d.ts.map +1 -1
- package/dist/blog/index.js +52 -30
- package/dist/blog/index.js.map +1 -1
- package/dist/blog/index.mjs +15 -12
- package/dist/blog/index.mjs.map +1 -1
- package/dist/blog/publication-render.test.d.ts +2 -0
- package/dist/blog/publication-render.test.d.ts.map +1 -0
- package/dist/blog/publication-routes.test.d.ts +2 -0
- package/dist/blog/publication-routes.test.d.ts.map +1 -0
- package/dist/blog/routes.d.ts +40 -0
- package/dist/blog/routes.d.ts.map +1 -0
- package/dist/blog/server-core.d.ts +28 -21
- package/dist/blog/server-core.d.ts.map +1 -1
- package/dist/blog/server-ui.d.ts +4 -0
- package/dist/blog/server-ui.d.ts.map +1 -1
- package/dist/blog/server-ui.js +49 -28
- package/dist/blog/server-ui.js.map +1 -1
- package/dist/blog/server-ui.mjs +9 -15
- package/dist/blog/server-ui.mjs.map +1 -1
- package/dist/blog/server.d.ts +28 -21
- package/dist/blog/server.d.ts.map +1 -1
- package/dist/blog/server.js +71 -42
- package/dist/blog/server.mjs +3 -2
- package/dist/blog/types.d.ts +11 -1
- package/dist/blog/types.d.ts.map +1 -1
- package/dist/blog-styles-6EY3BS5Y.js +595 -0
- package/dist/blog-styles-6EY3BS5Y.js.map +1 -0
- package/dist/blog-styles-7AKRUMV7.mjs +592 -0
- package/dist/blog-styles-7AKRUMV7.mjs.map +1 -0
- package/dist/blog-tables-DWDEWA3S.js +17 -0
- package/dist/blog-tables-DWDEWA3S.js.map +1 -0
- package/dist/blog-tables-QGIHOESZ.mjs +4 -0
- package/dist/blog-tables-QGIHOESZ.mjs.map +1 -0
- package/dist/{chunk-KP56C66Z.js → chunk-2KIGFOPM.js} +126 -188
- package/dist/chunk-2KIGFOPM.js.map +1 -0
- package/dist/{chunk-EDZWNCSE.js → chunk-3EPMDPWI.js} +2 -2
- package/dist/{chunk-EDZWNCSE.js.map → chunk-3EPMDPWI.js.map} +1 -1
- package/dist/chunk-4B4S56WJ.mjs +110 -0
- package/dist/chunk-4B4S56WJ.mjs.map +1 -0
- package/dist/{chunk-47566YF4.js → chunk-4WQB2ORG.js} +14 -14
- package/dist/{chunk-47566YF4.js.map → chunk-4WQB2ORG.js.map} +1 -1
- package/dist/{chunk-5TGSM5EQ.js → chunk-5737U6DI.js} +14 -14
- package/dist/{chunk-5TGSM5EQ.js.map → chunk-5737U6DI.js.map} +1 -1
- package/dist/{chunk-DN6A6KXH.mjs → chunk-6CUBSQMD.mjs} +3 -3
- package/dist/{chunk-DN6A6KXH.mjs.map → chunk-6CUBSQMD.mjs.map} +1 -1
- package/dist/{chunk-JBGRXICL.js → chunk-746RKQHA.js} +75 -70
- package/dist/chunk-746RKQHA.js.map +1 -0
- package/dist/{chunk-GTK3CGWF.js → chunk-7IPSQ5JR.js} +6 -6
- package/dist/{chunk-GTK3CGWF.js.map → chunk-7IPSQ5JR.js.map} +1 -1
- package/dist/{chunk-4S7BHFGT.js → chunk-7PLH3H3W.js} +3 -3
- package/dist/{chunk-4S7BHFGT.js.map → chunk-7PLH3H3W.js.map} +1 -1
- package/dist/chunk-7U7C6XRI.mjs +6 -0
- package/dist/{chunk-HRQ4367C.mjs.map → chunk-7U7C6XRI.mjs.map} +1 -1
- package/dist/{chunk-X4PL7R63.mjs → chunk-7Y2UPFSY.mjs} +3 -3
- package/dist/{chunk-X4PL7R63.mjs.map → chunk-7Y2UPFSY.mjs.map} +1 -1
- package/dist/{chunk-XR47TOGW.mjs → chunk-A2VLEORI.mjs} +3 -3
- package/dist/{chunk-XR47TOGW.mjs.map → chunk-A2VLEORI.mjs.map} +1 -1
- package/dist/{chunk-PA5ZVCW2.mjs → chunk-ACTLQ2RH.mjs} +3 -3
- package/dist/{chunk-PA5ZVCW2.mjs.map → chunk-ACTLQ2RH.mjs.map} +1 -1
- package/dist/{chunk-VLR2UYO4.js → chunk-AWFZIXCT.js} +12 -11
- package/dist/chunk-AWFZIXCT.js.map +1 -0
- package/dist/{chunk-COAVBUMS.mjs → chunk-B36PTS7B.mjs} +413 -94
- package/dist/chunk-B36PTS7B.mjs.map +1 -0
- package/dist/{chunk-LFJRMY4V.js → chunk-DPDV5Z4G.js} +12 -12
- package/dist/{chunk-LFJRMY4V.js.map → chunk-DPDV5Z4G.js.map} +1 -1
- package/dist/{chunk-W47J6ZZG.mjs → chunk-DQM5GR2P.mjs} +4 -4
- package/dist/{chunk-W47J6ZZG.mjs.map → chunk-DQM5GR2P.mjs.map} +1 -1
- package/dist/{chunk-VGX6G3TA.mjs → chunk-EBMPXFOP.mjs} +3 -3
- package/dist/{chunk-VGX6G3TA.mjs.map → chunk-EBMPXFOP.mjs.map} +1 -1
- package/dist/{chunk-DHXQBTXE.mjs → chunk-EEQYKMGH.mjs} +75 -70
- package/dist/chunk-EEQYKMGH.mjs.map +1 -0
- package/dist/{chunk-77HT6TYK.mjs → chunk-G5I3XEQS.mjs} +3 -3
- package/dist/{chunk-77HT6TYK.mjs.map → chunk-G5I3XEQS.mjs.map} +1 -1
- package/dist/chunk-GHECYDSZ.mjs +134 -0
- package/dist/chunk-GHECYDSZ.mjs.map +1 -0
- package/dist/{chunk-UJOEN4X6.js → chunk-GQ6CUOLA.js} +15 -15
- package/dist/{chunk-UJOEN4X6.js.map → chunk-GQ6CUOLA.js.map} +1 -1
- package/dist/{chunk-DTX4R45S.js → chunk-HBMF3M5F.js} +4 -4
- package/dist/{chunk-DTX4R45S.js.map → chunk-HBMF3M5F.js.map} +1 -1
- package/dist/{chunk-NW5CBNRU.mjs → chunk-HDDV63XJ.mjs} +3 -3
- package/dist/{chunk-NW5CBNRU.mjs.map → chunk-HDDV63XJ.mjs.map} +1 -1
- package/dist/{chunk-DBJRJ2Q2.mjs → chunk-HH5KGXTK.mjs} +4 -4
- package/dist/{chunk-DBJRJ2Q2.mjs.map → chunk-HH5KGXTK.mjs.map} +1 -1
- package/dist/{chunk-AKQA5ZYZ.mjs → chunk-I4PDSDVE.mjs} +3 -3
- package/dist/{chunk-AKQA5ZYZ.mjs.map → chunk-I4PDSDVE.mjs.map} +1 -1
- package/dist/{chunk-2MPOO6QJ.js → chunk-ITFZZ6YT.js} +3 -3
- package/dist/{chunk-2MPOO6QJ.js.map → chunk-ITFZZ6YT.js.map} +1 -1
- package/dist/{chunk-WZZYTFDV.mjs → chunk-JJ26JKBJ.mjs} +8 -3
- package/dist/chunk-JJ26JKBJ.mjs.map +1 -0
- package/dist/{chunk-Z33JXJTJ.js → chunk-KMGGAL2X.js} +2 -2
- package/dist/{chunk-Z33JXJTJ.js.map → chunk-KMGGAL2X.js.map} +1 -1
- package/dist/{chunk-4IMZ45YA.mjs → chunk-KQ3VAOAF.mjs} +4 -4
- package/dist/{chunk-4IMZ45YA.mjs.map → chunk-KQ3VAOAF.mjs.map} +1 -1
- package/dist/{chunk-GPH3VVLP.js → chunk-LBS4PRC7.js} +3 -3
- package/dist/{chunk-GPH3VVLP.js.map → chunk-LBS4PRC7.js.map} +1 -1
- package/dist/chunk-LC7AM4J5.js +118 -0
- package/dist/chunk-LC7AM4J5.js.map +1 -0
- package/dist/{chunk-5HMN3FXL.js → chunk-LF4L3ZP5.js} +8 -8
- package/dist/{chunk-5HMN3FXL.js.map → chunk-LF4L3ZP5.js.map} +1 -1
- package/dist/{chunk-LHD45PGP.js → chunk-LHYVFWHL.js} +8 -8
- package/dist/{chunk-LHD45PGP.js.map → chunk-LHYVFWHL.js.map} +1 -1
- package/dist/{chunk-I72AUITZ.mjs → chunk-LIYSLNEK.mjs} +96 -644
- package/dist/chunk-LIYSLNEK.mjs.map +1 -0
- package/dist/{chunk-HIV5YK5G.js → chunk-LUYUFILE.js} +4 -4
- package/dist/{chunk-HIV5YK5G.js.map → chunk-LUYUFILE.js.map} +1 -1
- package/dist/{chunk-4HL6CAZ7.mjs → chunk-MIFP6QEQ.mjs} +4 -4
- package/dist/{chunk-4HL6CAZ7.mjs.map → chunk-MIFP6QEQ.mjs.map} +1 -1
- package/dist/{chunk-SI7R3IJX.mjs → chunk-MTANHZKJ.mjs} +7 -7
- package/dist/{chunk-SI7R3IJX.mjs.map → chunk-MTANHZKJ.mjs.map} +1 -1
- package/dist/{chunk-R4PFWVGZ.mjs → chunk-N6AVWMIB.mjs} +4 -4
- package/dist/{chunk-R4PFWVGZ.mjs.map → chunk-N6AVWMIB.mjs.map} +1 -1
- package/dist/{chunk-WD57YWY5.mjs → chunk-N6X76QUF.mjs} +3 -3
- package/dist/{chunk-WD57YWY5.mjs.map → chunk-N6X76QUF.mjs.map} +1 -1
- package/dist/{chunk-7UPPYERC.mjs → chunk-NUH245XK.mjs} +4 -4
- package/dist/{chunk-7UPPYERC.mjs.map → chunk-NUH245XK.mjs.map} +1 -1
- package/dist/chunk-NVSWTDWU.mjs +25 -0
- package/dist/chunk-NVSWTDWU.mjs.map +1 -0
- package/dist/chunk-OL2QBWAU.js +29 -0
- package/dist/chunk-OL2QBWAU.js.map +1 -0
- package/dist/{chunk-UYR22S67.js → chunk-OXZYP32B.js} +7 -7
- package/dist/{chunk-UYR22S67.js.map → chunk-OXZYP32B.js.map} +1 -1
- package/dist/{chunk-QG7WHAGD.js → chunk-QWLL3B6U.js} +15 -15
- package/dist/{chunk-QG7WHAGD.js.map → chunk-QWLL3B6U.js.map} +1 -1
- package/dist/{chunk-26JXNW7B.mjs → chunk-RO55G3OA.mjs} +2 -2
- package/dist/{chunk-26JXNW7B.mjs.map → chunk-RO55G3OA.mjs.map} +1 -1
- package/dist/{chunk-FH4LLJFL.mjs → chunk-SJXGIUHP.mjs} +9 -8
- package/dist/chunk-SJXGIUHP.mjs.map +1 -0
- package/dist/{chunk-4TU246Q4.mjs → chunk-SZHKNGNR.mjs} +2 -2
- package/dist/{chunk-4TU246Q4.mjs.map → chunk-SZHKNGNR.mjs.map} +1 -1
- package/dist/{chunk-GQTSQR63.js → chunk-U53KN4SA.js} +10 -5
- package/dist/chunk-U53KN4SA.js.map +1 -0
- package/dist/{chunk-AJBJH3BA.mjs → chunk-UOLY4NXK.mjs} +127 -189
- package/dist/chunk-UOLY4NXK.mjs.map +1 -0
- package/dist/{chunk-AVPMSJCQ.js → chunk-URVGBWCP.js} +4 -4
- package/dist/{chunk-AVPMSJCQ.js.map → chunk-URVGBWCP.js.map} +1 -1
- package/dist/chunk-UTOHMK52.js +8 -0
- package/dist/{chunk-TMQKZ4DO.js.map → chunk-UTOHMK52.js.map} +1 -1
- package/dist/{chunk-SHZXSIRH.js → chunk-VA36CJRV.js} +4 -4
- package/dist/{chunk-SHZXSIRH.js.map → chunk-VA36CJRV.js.map} +1 -1
- package/dist/{chunk-ZMFJXFUY.js → chunk-VWDT7H6L.js} +96 -644
- package/dist/chunk-VWDT7H6L.js.map +1 -0
- package/dist/{chunk-2VQ5YXOD.js → chunk-WSUQ76LN.js} +18 -18
- package/dist/{chunk-2VQ5YXOD.js.map → chunk-WSUQ76LN.js.map} +1 -1
- package/dist/{chunk-GM5E6R5W.mjs → chunk-XWF7QPIP.mjs} +3 -3
- package/dist/{chunk-GM5E6R5W.mjs.map → chunk-XWF7QPIP.mjs.map} +1 -1
- package/dist/chunk-YQTE32QK.js +137 -0
- package/dist/chunk-YQTE32QK.js.map +1 -0
- package/dist/{chunk-ISKJLXB4.mjs → chunk-ZDFVYSKK.mjs} +4 -4
- package/dist/{chunk-ISKJLXB4.mjs.map → chunk-ZDFVYSKK.mjs.map} +1 -1
- package/dist/{chunk-APL44ZVK.js → chunk-ZLPXFV5Y.js} +5 -5
- package/dist/{chunk-APL44ZVK.js.map → chunk-ZLPXFV5Y.js.map} +1 -1
- package/dist/{chunk-TAIGHH5J.js → chunk-ZY5AVC4P.js} +418 -98
- package/dist/chunk-ZY5AVC4P.js.map +1 -0
- package/dist/cli/index.js +3 -3
- package/dist/cli/index.mjs +1 -1
- package/dist/client/index.js +4 -4
- package/dist/client/index.mjs +3 -3
- package/dist/commerce/index.js +58 -57
- package/dist/commerce/index.mjs +7 -6
- package/dist/engage/index.js +10 -10
- package/dist/engage/index.mjs +7 -7
- package/dist/fleet/index.js +8 -8
- package/dist/fleet/index.mjs +4 -4
- package/dist/forms/index.js +16 -16
- package/dist/forms/index.mjs +9 -9
- package/dist/forms/server.js +10 -10
- package/dist/forms/server.mjs +8 -8
- package/dist/forms/static.js +7 -7
- package/dist/forms/static.mjs +6 -6
- package/dist/images/index.js +11 -11
- package/dist/images/index.mjs +4 -4
- package/dist/index.js +65 -64
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +11 -10
- package/dist/index.mjs.map +1 -1
- package/dist/layout/SiteKitClientProviders.d.ts.map +1 -1
- package/dist/layout/client.d.ts.map +1 -1
- package/dist/layout/client.js +8 -8
- package/dist/layout/client.mjs +7 -7
- package/dist/layout/index.js +10 -10
- package/dist/layout/index.mjs +8 -8
- package/dist/layout/types.d.ts +16 -0
- package/dist/layout/types.d.ts.map +1 -1
- 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/search/index.js +4 -4
- package/dist/search/index.mjs +3 -3
- package/dist/seo/client.js +6 -5
- package/dist/seo/client.mjs +5 -4
- package/dist/seo/index.js +6 -5
- package/dist/seo/index.js.map +1 -1
- package/dist/seo/index.mjs +5 -4
- package/dist/seo/index.mjs.map +1 -1
- package/dist/server/index.js +3 -3
- package/dist/server/index.mjs +2 -2
- package/dist/shared/frame.d.ts +71 -0
- package/dist/shared/frame.d.ts.map +1 -0
- package/dist/shared/version.d.ts +1 -1
- package/dist/signal/index.js +11 -11
- package/dist/signal/index.mjs +2 -2
- package/dist/sitemap/index.js +2 -2
- package/dist/sitemap/index.mjs +1 -1
- package/dist/sync/BookingWidget.d.ts +0 -23
- package/dist/sync/BookingWidget.d.ts.map +1 -1
- package/dist/sync/MeetingFormatStep.d.ts +13 -0
- package/dist/sync/MeetingFormatStep.d.ts.map +1 -0
- package/dist/sync/api.d.ts +9 -10
- package/dist/sync/api.d.ts.map +1 -1
- package/dist/sync/booking-flow.d.ts +7 -0
- package/dist/sync/booking-flow.d.ts.map +1 -0
- package/dist/sync/booking-flow.test.d.ts +2 -0
- package/dist/sync/booking-flow.test.d.ts.map +1 -0
- package/dist/sync/index.d.ts +2 -2
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +20 -16
- package/dist/sync/index.mjs +4 -4
- package/dist/sync/types.d.ts +34 -0
- package/dist/sync/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/AnalyticsProvider-NA7EMJCA.mjs +0 -10
- package/dist/AnalyticsProvider-XE3ADUUH.js +0 -31
- package/dist/ChatWidget-BD4F4XLD.mjs +0 -11
- package/dist/ChatWidget-BZ3KOSXG.js +0 -20
- package/dist/EngageWidget-JPP6EDCJ.js +0 -18
- package/dist/EngageWidget-L7B6PCM3.mjs +0 -9
- package/dist/ManagedForm-2OPCHDNJ.js +0 -23
- package/dist/ManagedForm-AJM6D4SK.mjs +0 -14
- package/dist/SitemapSync-T2N3TCWF.js +0 -17
- package/dist/SitemapSync-YLWMU6J3.mjs +0 -8
- package/dist/chunk-AJBJH3BA.mjs.map +0 -1
- package/dist/chunk-CGCYZJYX.mjs +0 -41
- package/dist/chunk-CGCYZJYX.mjs.map +0 -1
- package/dist/chunk-COAVBUMS.mjs.map +0 -1
- package/dist/chunk-DHXQBTXE.mjs.map +0 -1
- package/dist/chunk-FH4LLJFL.mjs.map +0 -1
- package/dist/chunk-GQTSQR63.js.map +0 -1
- package/dist/chunk-HRQ4367C.mjs +0 -6
- package/dist/chunk-I72AUITZ.mjs.map +0 -1
- package/dist/chunk-JBGRXICL.js.map +0 -1
- package/dist/chunk-KP56C66Z.js.map +0 -1
- package/dist/chunk-TAIGHH5J.js.map +0 -1
- package/dist/chunk-TMQKZ4DO.js +0 -8
- package/dist/chunk-TPL2IHFI.js +0 -43
- package/dist/chunk-TPL2IHFI.js.map +0 -1
- package/dist/chunk-VLR2UYO4.js.map +0 -1
- package/dist/chunk-WZZYTFDV.mjs.map +0 -1
- package/dist/chunk-ZMFJXFUY.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commerce/utils.ts","../src/commerce/api.ts","../src/commerce/OfferingCard.tsx","../src/commerce/OfferingList.tsx","../src/commerce/EventTile.tsx","../src/commerce/UpcomingEvents.tsx","../src/commerce/ProductEmbed.tsx","../src/commerce/SizeChart.tsx","../src/commerce/ProductDetail.tsx","../src/commerce/ProductGrid.tsx","../src/commerce/ProductPage.tsx","../src/commerce/EventEmbed.tsx","../src/commerce/CheckoutForm.tsx","../src/commerce/EventCheckout.tsx","../src/commerce/RegistrationForm.tsx","../src/commerce/CalendarView.tsx","../src/commerce/EventsAgenda.tsx","../src/commerce/EventModal.tsx","../src/commerce/useEventModal.ts","../src/commerce/EventCalendar.tsx","../src/commerce/EventsWidget.tsx","../src/commerce/events-extras.tsx"],"names":["body","jsxs","jsx","useState","useEffect","Fragment","React","useMemo","loadSquareSDK","useRef","formatTime","useCallback","getApiUrl","getApiKey"],"mappings":"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","file":"chunk-ISKJLXB4.mjs","sourcesContent":["/**\n * @sonordev/site-kit/commerce - Utility functions\n */\n\nexport function formatPrice(amount: number, currency: string = 'USD'): string {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n }).format(amount)\n}\n\nexport function formatDate(dateString: string): string {\n const date = new Date(dateString)\n return new Intl.DateTimeFormat('en-US', {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n }).format(date)\n}\n\nexport function formatDateTime(dateString: string): string {\n const date = new Date(dateString)\n return new Intl.DateTimeFormat('en-US', {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n }).format(date)\n}\n\nexport function formatTime(dateString: string): string {\n const date = new Date(dateString)\n return new Intl.DateTimeFormat('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n }).format(date)\n}\n\nexport function formatDateRange(startDate: string, endDate?: string): string {\n const start = new Date(startDate)\n const end = endDate ? new Date(endDate) : null\n \n const startFormatted = formatDateTime(startDate)\n \n if (!end) return startFormatted\n \n // Same day\n if (start.toDateString() === end.toDateString()) {\n return `${startFormatted} - ${formatTime(endDate!)}`\n }\n \n return `${startFormatted} - ${formatDateTime(endDate!)}`\n}\n\nexport function getRelativeTimeUntil(dateString: string): string {\n const date = new Date(dateString)\n const now = new Date()\n const diffMs = date.getTime() - now.getTime()\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24))\n \n if (diffDays < 0) return 'Past'\n if (diffDays === 0) return 'Today'\n if (diffDays === 1) return 'Tomorrow'\n if (diffDays < 7) return `In ${diffDays} days`\n if (diffDays < 30) {\n const weeks = Math.floor(diffDays / 7)\n return `In ${weeks} week${weeks > 1 ? 's' : ''}`\n }\n if (diffDays < 365) {\n const months = Math.floor(diffDays / 30)\n return `In ${months} month${months > 1 ? 's' : ''}`\n }\n return formatDate(dateString)\n}\n\nexport function getSpotsRemaining(\n capacity: number | null | undefined,\n registrations: number = 0\n): number | null {\n if (capacity == null) return null\n return Math.max(0, capacity - registrations)\n}\n\nexport function isEventSoldOut(\n capacity: number | null | undefined,\n registrations: number = 0\n): boolean {\n const remaining = getSpotsRemaining(capacity, registrations)\n return remaining !== null && remaining <= 0\n}\n\nexport function getOfferingUrl(\n slug: string, \n type: string,\n basePaths?: {\n product?: string\n service?: string\n event?: string\n class?: string\n }\n): string {\n const defaults = {\n product: '/shop',\n service: '/services',\n event: '/events',\n class: '/classes',\n }\n const paths = { ...defaults, ...basePaths }\n const base = paths[type as keyof typeof paths] || '/offerings'\n return `${base}/${slug}`\n}\n","/**\n * @sonordev/site-kit/commerce - Commerce API\n * \n * API functions for fetching offerings, submitting orders, and registrations.\n * All data goes through Portal API with API key auth - never Supabase directly.\n */\n\nimport type {\n CommerceOffering,\n FetchOfferingsOptions,\n FetchEventsOptions,\n CheckoutCustomer,\n CheckoutResult,\n} from './types'\nimport { sonorFetch } from '../shared/sonorFetch'\n\n// ============================================\n// API Config Helpers\n// ============================================\n\nfunction getApiConfig() {\n const apiUrl = typeof window !== 'undefined' \n ? (window as any).__SITE_KIT_API_URL__ || 'https://api.sonor.io'\n : 'https://api.sonor.io'\n const apiKey = typeof window !== 'undefined' \n ? (window as any).__SITE_KIT_API_KEY__ || ''\n : ''\n return { apiUrl, apiKey }\n}\n\nfunction getApiUrl(): string {\n return getApiConfig().apiUrl\n}\n\nfunction getApiKey(): string {\n return getApiConfig().apiKey\n}\n\nasync function apiPost<T>(endpoint: string, body: Record<string, any> = {}): Promise<T | null> {\n const { apiUrl, apiKey } = getApiConfig()\n \n if (!apiKey) {\n console.warn('[Commerce] No API key configured')\n return null\n }\n \n try {\n // Read-shaped endpoints only (offerings/products/rates) — safe to retry.\n const response = await sonorFetch(`${apiUrl}${endpoint}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n }, { apiKey })\n\n if (!response.ok) {\n const text = await response.text()\n let body: unknown = null\n try {\n body = text ? JSON.parse(text) : null\n } catch {\n body = text\n }\n console.warn(`[Commerce] API error:`, response.status, response.statusText || 'Unknown', body)\n return null\n }\n \n return await response.json()\n } catch (error) {\n console.warn('[Commerce] Network error:', error)\n return null\n }\n}\n\n// ============================================\n// Fetch Offerings\n// ============================================\n\nexport async function fetchOfferings(\n options: FetchOfferingsOptions = {}\n): Promise<CommerceOffering[]> {\n const result = await apiPost<{ offerings: CommerceOffering[]; total: number }>(\n '/api/public/commerce/offerings',\n {\n type: options.type,\n category: options.category,\n status: options.status || 'active',\n limit: options.limit,\n offset: options.offset,\n orderBy: options.orderBy || 'sort_order',\n order: options.order || 'asc',\n }\n )\n \n return result?.offerings || []\n}\n\nexport async function fetchOffering(slug: string): Promise<CommerceOffering | null> {\n const result = await apiPost<{ offering?: CommerceOffering } | CommerceOffering>(\n '/api/public/commerce/offering',\n { slug }\n )\n if (!result) return null\n // Portal returns offering spread at top level; some APIs return { offering }\n const offering = (result as { offering?: CommerceOffering }).offering ?? result\n return (offering as CommerceOffering)?.id ? (offering as CommerceOffering) : null\n}\n\nexport async function fetchLatestOffering(\n type?: string,\n category?: string\n): Promise<CommerceOffering | null> {\n if (type === 'product') {\n const { products } = await fetchProductsPublic({\n category,\n limit: 1,\n orderBy: 'created_at',\n order: 'desc',\n })\n return products[0] || null\n }\n const result = await apiPost<{ offerings: CommerceOffering[] }>(\n '/api/public/commerce/offerings',\n {\n type,\n category,\n status: 'active',\n limit: 1,\n orderBy: 'created_at',\n order: 'desc',\n }\n )\n return result?.offerings?.[0] || null\n}\n\n// ============================================\n// Fetch Events (with schedules)\n// ============================================\n\nexport async function fetchUpcomingEvents(\n options: FetchEventsOptions = {}\n): Promise<CommerceOffering[]> {\n const result = await apiPost<{ events: CommerceOffering[]; total: number }>(\n '/api/public/commerce/events',\n {\n type: 'event',\n category: options.category,\n limit: options.limit,\n includePast: options.past,\n }\n )\n \n return result?.events || []\n}\n\nexport async function fetchNextEvent(category?: string): Promise<CommerceOffering | null> {\n const events = await fetchUpcomingEvents({ limit: 1, category })\n return events[0] || null\n}\n\n// ============================================\n// Products\n// ============================================\n\nexport async function fetchProducts(\n options: Omit<FetchOfferingsOptions, 'type'> = {}\n): Promise<CommerceOffering[]> {\n const { products } = await fetchProductsPublic({\n category: options.category,\n limit: options.limit,\n offset: options.offset,\n orderBy: options.orderBy || 'sort_order',\n order: options.order || 'asc',\n search: (options as any).search,\n })\n return products\n}\n\nexport async function fetchServices(\n options: Omit<FetchOfferingsOptions, 'type'> = {}\n): Promise<CommerceOffering[]> {\n return fetchOfferings({ ...options, type: 'service' })\n}\n\n/**\n * Fetch products via public API\n */\nexport async function fetchProductsPublic(\n options: {\n category?: string\n limit?: number\n offset?: number\n orderBy?: 'name' | 'price' | 'created_at' | 'sort_order'\n order?: 'asc' | 'desc'\n search?: string\n } = {}\n): Promise<{ products: CommerceOffering[]; total: number }> {\n const result = await apiPost<{ products: CommerceOffering[]; total: number }>(\n '/api/public/commerce/products',\n options\n )\n \n return {\n products: result?.products || [],\n total: result?.total || 0,\n }\n}\n\n/**\n * Fetch single product by slug\n */\nexport async function fetchProductBySlug(slug: string): Promise<CommerceOffering | null> {\n const result = await apiPost<{ product: CommerceOffering }>(\n '/api/public/commerce/product',\n { slug }\n )\n \n return result?.product || null\n}\n\n/**\n * Fetch product categories\n */\nexport async function fetchCategories(): Promise<{ id: string; name: string; slug: string }[]> {\n const result = await apiPost<{ categories: { id: string; name: string; slug: string }[] }>(\n '/api/public/commerce/categories',\n {}\n )\n \n return result?.categories || []\n}\n\n// ============================================\n// Shipping (Shippo)\n// ============================================\n\nexport interface ShippingAddress {\n street1: string\n street2?: string\n city: string\n state: string\n zip: string\n country?: string\n name?: string\n phone?: string\n}\n\nexport interface ShippingRate {\n carrier: string\n service: string\n amount: string\n currency: string\n estimatedDays?: number\n objectId?: string\n}\n\nexport interface ValidateAddressResult {\n isValid: boolean\n normalized?: { street1: string; street2?: string; city: string; state: string; zip: string; country: string }\n messages?: string[]\n}\n\n/**\n * Fetch shipping rates for checkout (when shipping is enabled)\n */\nexport async function fetchShippingRates(\n shippingAddress: ShippingAddress,\n offerings: Array<{ offering_id: string; quantity?: number }>\n): Promise<ShippingRate[]> {\n const result = await apiPost<ShippingRate[]>(\n '/api/public/commerce/shipping-rates',\n {\n shippingAddress: {\n street1: shippingAddress.street1,\n street2: shippingAddress.street2,\n city: shippingAddress.city,\n state: shippingAddress.state,\n zip: shippingAddress.zip,\n country: shippingAddress.country || 'US',\n },\n offerings,\n }\n )\n return Array.isArray(result) ? result : []\n}\n\n/**\n * Validate a shipping address before checkout\n */\nexport async function validateAddress(address: Omit<ShippingAddress, 'name' | 'phone'>): Promise<ValidateAddressResult> {\n const result = await apiPost<ValidateAddressResult>(\n '/api/public/commerce/validate-address',\n {\n street1: address.street1,\n street2: address.street2,\n city: address.city,\n state: address.state,\n zip: address.zip,\n country: address.country || 'US',\n }\n )\n return result || { isValid: true, messages: [] }\n}\n\n// ============================================\n// Payment Processor Info\n// ============================================\n\n/**\n * Fetch the active payment processor for the current project.\n * Returns 'stripe' | 'square' | null.\n */\nexport async function fetchActiveProcessor(): Promise<'stripe' | 'square' | null> {\n const { apiUrl, apiKey } = getApiConfig()\n \n if (!apiKey) return null\n \n try {\n const response = await sonorFetch(`${apiUrl}/api/public/commerce/processor`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({}),\n }, { apiKey })\n \n if (!response.ok) return null\n const data = await response.json()\n return data?.processor || null\n } catch {\n return null\n }\n}\n\n// ============================================\n// Checkout & Registration\n// ============================================\n\nexport async function registerForEvent(\n eventId: string,\n scheduleId: string | undefined,\n customer: CheckoutCustomer\n): Promise<CheckoutResult> {\n const { apiUrl, apiKey } = getApiConfig()\n \n // Get analytics session ID for conversion tracking\n const analyticsSessionId = typeof sessionStorage !== 'undefined'\n ? sessionStorage.getItem('_sk_sid')\n : null\n\n try {\n // retries: 0 — creates a sale; a retried timeout could double-register.\n const response = await sonorFetch(`${apiUrl}/api/public/commerce/register`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n offeringId: eventId,\n scheduleId,\n customer,\n analyticsSessionId, // Pass for conversion tracking\n }),\n }, { apiKey, retries: 0 })\n \n if (!response.ok) {\n const error = await response.json()\n return { success: false, error: error.message || 'Registration failed' }\n }\n \n const result = await response.json()\n \n // Note: Conversion is auto-logged via database trigger when commerce_sales is created\n \n return { \n success: true, \n sale_id: result.sale_id,\n confirmation_number: result.confirmation_number,\n }\n } catch (error) {\n return { success: false, error: 'Network error. Please try again.' }\n }\n}\n\nexport interface CheckoutLineItem {\n offeringId: string\n variantId?: string\n scheduleId?: string\n quantity: number\n}\n\nexport interface CreateCheckoutOptions {\n offeringId?: string\n variantId?: string\n scheduleId?: string\n quantity?: number\n /**\n * Multi-line cart (v1: events only, all items must share offeringId + scheduleId).\n * When provided, takes precedence over offeringId/variantId/quantity. Requires\n * `sourceId` (Square Web Payments SDK nonce) — Square inline only in v1.\n */\n lineItems?: CheckoutLineItem[]\n customer?: CheckoutCustomer\n successUrl?: string\n cancelUrl?: string\n /** Square card nonce from Web Payments SDK for inline card collection (no redirect) */\n sourceId?: string\n /** Shipping address (required for physical products when shipping_enabled) */\n shippingAddress?: ShippingAddress\n /** Selected shipping carrier from rates */\n shippingCarrier?: string\n /** Selected shipping service from rates */\n shippingService?: string\n /** Shipping cost in dollars (from selected rate) */\n shippingCost?: number\n /** Discount/promo code to apply */\n discountCode?: string\n}\n\nexport interface DiscountValidationResult {\n valid: boolean\n discount_amount?: number\n discount_type?: 'percentage' | 'fixed_amount' | 'free_shipping'\n discount_value?: number\n code?: string\n name?: string\n message?: string\n}\n\n/**\n * Validate a discount code against the current order.\n * Returns the discount amount if valid, or an error message if not.\n */\nexport async function validateDiscountCode(\n code: string,\n subtotal: number,\n offeringIds: string[] = [],\n): Promise<DiscountValidationResult> {\n const { apiUrl, apiKey } = getApiConfig()\n\n try {\n const response = await sonorFetch(`${apiUrl}/api/public/commerce/discount/validate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ code, subtotal, offeringIds }),\n }, { apiKey })\n\n if (!response.ok) {\n const body = await response.json().catch(() => ({}))\n return { valid: false, message: body?.message || 'Invalid discount code' }\n }\n\n return await response.json()\n } catch {\n return { valid: false, message: 'Could not validate discount code' }\n }\n}\n\nexport interface ProcessorConfig {\n processor: 'stripe' | 'square' | null\n squareAppId?: string\n squareLocationId?: string\n squareEnvironment?: string\n stripePublishableKey?: string\n /** Whether shipping is enabled for this project */\n shipping_enabled?: boolean\n}\n\n/**\n * Fetch client-side SDK config for the active payment processor.\n * Returns public-safe values (app IDs, location IDs) for SDK initialization.\n */\nexport async function fetchProcessorConfig(): Promise<ProcessorConfig | null> {\n const { apiUrl, apiKey } = getApiConfig()\n if (!apiKey) return null\n\n try {\n const response = await sonorFetch(`${apiUrl}/api/public/commerce/processor-config`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({}),\n }, { apiKey })\n if (!response.ok) return null\n return await response.json()\n } catch {\n return null\n }\n}\n\n/**\n * Create a Stripe PaymentIntent for inline card payment (no redirect).\n * Use with Stripe Elements on the frontend to collect and confirm card details directly.\n * The existing payment_intent.succeeded webhook handles marking the sale as paid.\n */\nexport async function createPaymentIntent(options: CreateCheckoutOptions): Promise<{\n success: boolean\n clientSecret?: string\n saleId?: string\n confirmationNumber?: string\n error?: string\n}> {\n const apiUrl = getApiUrl()\n const apiKey = getApiKey()\n const sessionId = typeof sessionStorage !== 'undefined'\n ? sessionStorage.getItem('_sk_sid')\n : null\n\n try {\n // retries: 0 — creates a PaymentIntent + sale; never auto-retry money paths.\n const response = await sonorFetch(`${apiUrl}/api/public/commerce/create-payment-intent`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n ...options,\n analyticsSessionId: sessionId,\n }),\n }, { apiKey, retries: 0 })\n\n const data = await response.json()\n if (!response.ok) throw new Error(data.message || 'Failed to create payment intent')\n return data\n } catch (error: any) {\n return { success: false, error: error?.message || 'Network error. Please try again.' }\n }\n}\n\n/**\n * Create a checkout session for a product or service\n * Supports both Stripe and Square based on project configuration\n */\nexport async function createCheckoutSession(\n optionsOrOfferingId: CreateCheckoutOptions | string,\n legacyOptions?: Omit<CreateCheckoutOptions, 'offeringId'>\n): Promise<CheckoutResult> {\n const { apiUrl, apiKey } = getApiConfig()\n\n // Support both calling conventions\n const options: CreateCheckoutOptions = typeof optionsOrOfferingId === 'string'\n ? { offeringId: optionsOrOfferingId, ...legacyOptions }\n : optionsOrOfferingId\n \n // Get analytics session ID for conversion tracking\n const analyticsSessionId = typeof sessionStorage !== 'undefined'\n ? sessionStorage.getItem('_sk_sid')\n : null\n\n try {\n // retries: 0 — creates a checkout session/sale; never auto-retry money paths.\n const response = await sonorFetch(`${apiUrl}/api/public/commerce/checkout`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n ...options,\n analyticsSessionId, // Pass for conversion tracking\n successUrl: options.successUrl || (typeof window !== 'undefined' ? window.location.href : ''),\n cancelUrl: options.cancelUrl || (typeof window !== 'undefined' ? window.location.href : ''),\n }),\n }, { apiKey, retries: 0 })\n \n if (!response.ok) {\n const text = await response.text()\n let body: Record<string, unknown> = {}\n try {\n body = JSON.parse(text) as Record<string, unknown>\n } catch {\n // non-JSON response (e.g. HTML error page)\n }\n // Nest: { message } or { statusCode, message }; or wrapped: { success, error: { message } }\n const errObj = body?.error && typeof body.error === 'object' ? (body.error as Record<string, unknown>) : body\n const message =\n (typeof body?.message === 'string' ? body.message : null) ||\n (typeof errObj?.message === 'string' ? errObj.message : null) ||\n (typeof errObj?.detail === 'string' ? errObj.detail : null) ||\n (typeof body?.error === 'string' ? body.error : null) ||\n 'Payment could not be processed. Please try again or use a different card.'\n if (typeof console !== 'undefined') {\n console.warn('[Commerce] Checkout failed:', response.status, message, body)\n }\n return { success: false, error: message }\n }\n \n const result = await response.json()\n \n // Note: Conversion is auto-logged via database trigger when commerce_sales is created\n \n return { \n success: true, \n payment_url: result.checkout_url,\n checkout_url: result.checkout_url,\n sale_id: result.sale_id,\n confirmation_number: result.confirmation_number,\n }\n } catch (error) {\n return { success: false, error: 'Network error. Please try again.' }\n }\n}\n","/**\n * @sonordev/site-kit/commerce - OfferingCard\n * \n * Displays a single product, service, event, or class with image, title, price, and CTA.\n */\n\n'use client'\n\nimport React from 'react'\nimport type { OfferingCardProps } from './types'\nimport { formatPrice, formatDate } from './utils'\n\nexport function OfferingCard({\n offering,\n variant = 'card',\n showImage = true,\n showPrice = true,\n showDescription = true,\n showCta = true,\n ctaText,\n onCtaClick,\n className = '',\n imageClassName = '',\n titleClassName = '',\n priceClassName = '',\n descriptionClassName = '',\n ctaClassName = '',\n}: OfferingCardProps) {\n const isEvent = offering.type === 'event' || offering.type === 'class'\n const nextSchedule = offering.schedules?.[0] || (offering as any).next_schedule\n\n // Public styling hooks: consuming sites theme cards per category/type via CSS\n // attribute selectors, e.g. .site-kit-offering-card[data-category=\"pto\"]\n const dataAttrs = {\n 'data-sk-part': 'offering-card',\n 'data-category': offering.category?.slug,\n 'data-offering-type': offering.type,\n }\n \n // Default CTA text based on type\n const defaultCtaText = {\n product: 'Buy Now',\n service: 'Book Now',\n class: 'Register',\n event: 'Get Tickets',\n subscription: 'Subscribe',\n }[offering.type] || 'View Details'\n \n const handleClick = () => {\n // External URL — open in new tab, bypass internal routing\n if (offering.external_url && typeof window !== 'undefined') {\n window.open(offering.external_url, '_blank', 'noopener,noreferrer')\n return\n }\n\n if (onCtaClick) {\n onCtaClick(offering)\n } else if (typeof window !== 'undefined') {\n // Default: navigate to offering page\n const basePath = offering.type === 'event' ? '/events' :\n offering.type === 'product' ? '/shop' :\n '/services'\n window.location.href = `${basePath}/${offering.slug}`\n }\n }\n \n if (variant === 'minimal') {\n return (\n <div className={`site-kit-offering-minimal ${className}`} {...dataAttrs}>\n <h3 className={`site-kit-offering-title ${titleClassName}`}>\n {offering.name}\n </h3>\n {showPrice && offering.price_is_public && offering.price != null && (\n <span className={`site-kit-offering-price ${priceClassName}`}>\n {formatPrice(offering.price, offering.currency)}\n </span>\n )}\n {showCta && (\n <button\n onClick={handleClick}\n className={`site-kit-offering-cta ${ctaClassName}`}\n >\n {ctaText || defaultCtaText}\n </button>\n )}\n </div>\n )\n }\n \n if (variant === 'horizontal') {\n return (\n <div className={`site-kit-offering-horizontal ${className}`} {...dataAttrs} style={{\n display: 'flex',\n gap: '1rem',\n alignItems: 'flex-start',\n }}>\n {showImage && offering.featured_image_url && (\n <img\n src={offering.featured_image_url}\n alt={offering.name}\n className={`site-kit-offering-image ${imageClassName}`}\n style={{\n width: '120px',\n height: '120px',\n objectFit: 'cover',\n borderRadius: '8px',\n }}\n />\n )}\n <div style={{ flex: 1 }}>\n <h3 className={`site-kit-offering-title ${titleClassName}`} style={{\n margin: 0,\n fontSize: '1.125rem',\n fontWeight: 600,\n }}>\n {offering.name}\n </h3>\n \n {isEvent && nextSchedule && (\n <div className=\"site-kit-offering-date\" style={{\n color: 'var(--sk-text-secondary)',\n fontSize: '0.875rem',\n marginTop: '0.25rem',\n }}>\n {formatDate(nextSchedule.starts_at)}\n {offering.location && ` • ${offering.location}`}\n </div>\n )}\n \n {showDescription && offering.short_description && (\n <p className={`site-kit-offering-description ${descriptionClassName}`} style={{\n color: 'var(--sk-text-secondary)',\n margin: '0.5rem 0',\n fontSize: '0.875rem',\n }}>\n {offering.short_description}\n </p>\n )}\n \n <div style={{ display: 'flex', alignItems: 'center', gap: '1rem', marginTop: '0.5rem' }}>\n {showPrice && offering.price_is_public && offering.price != null && (\n <span className={`site-kit-offering-price ${priceClassName}`} style={{\n fontWeight: 600,\n color: 'var(--sk-text-primary)',\n }}>\n {formatPrice(offering.price, offering.currency)}\n {offering.compare_at_price && (\n <span style={{\n textDecoration: 'line-through',\n color: 'var(--sk-text-secondary)',\n marginLeft: '0.5rem',\n fontWeight: 400,\n }}>\n {formatPrice(offering.compare_at_price, offering.currency)}\n </span>\n )}\n </span>\n )}\n\n {showCta && (\n <button\n onClick={handleClick}\n className={`site-kit-offering-cta ${ctaClassName}`}\n style={{\n padding: '0.5rem 1rem',\n borderRadius: '6px',\n border: 'none',\n background: 'var(--sk-primary)',\n color: 'var(--sk-bg)',\n cursor: 'pointer',\n fontWeight: 500,\n }}\n >\n {ctaText || defaultCtaText}\n </button>\n )}\n </div>\n </div>\n </div>\n )\n }\n \n // Default: card variant\n return (\n <div className={`site-kit-offering-card ${className}`} {...dataAttrs} style={{\n borderRadius: '12px',\n overflow: 'hidden',\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\n background: 'var(--sk-bg)',\n }}>\n {showImage && offering.featured_image_url && (\n <div style={{ position: 'relative' }}>\n <img\n src={offering.featured_image_url}\n alt={offering.name}\n className={`site-kit-offering-image ${imageClassName}`}\n style={{\n width: '100%',\n height: '200px',\n objectFit: 'cover',\n }}\n />\n {offering.compare_at_price && offering.price_is_public && (\n <span style={{\n position: 'absolute',\n top: '12px',\n right: '12px',\n background: 'var(--sk-error)',\n color: 'var(--sk-bg)',\n padding: '4px 8px',\n borderRadius: '4px',\n fontSize: '0.75rem',\n fontWeight: 600,\n }}>\n Sale\n </span>\n )}\n </div>\n )}\n \n <div style={{ padding: '1rem' }}>\n {isEvent && nextSchedule && (\n <div className=\"site-kit-offering-date\" style={{\n color: 'var(--sk-primary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n marginBottom: '0.25rem',\n }}>\n {formatDate(nextSchedule.starts_at)}\n </div>\n )}\n \n <h3 className={`site-kit-offering-title ${titleClassName}`} style={{\n margin: 0,\n fontSize: '1.125rem',\n fontWeight: 600,\n color: 'var(--sk-text-primary)',\n }}>\n {offering.name}\n </h3>\n \n {isEvent && offering.location && (\n <div style={{ color: 'var(--sk-text-secondary)', fontSize: '0.875rem', marginTop: '0.25rem' }}>\n 📍 {offering.location}\n </div>\n )}\n \n {showDescription && offering.short_description && (\n <p className={`site-kit-offering-description ${descriptionClassName}`} style={{\n color: 'var(--sk-text-secondary)',\n margin: '0.75rem 0',\n fontSize: '0.875rem',\n lineHeight: 1.5,\n }}>\n {offering.short_description}\n </p>\n )}\n \n <div style={{ \n display: 'flex', \n alignItems: 'center', \n justifyContent: 'space-between',\n marginTop: '1rem',\n }}>\n {showPrice && offering.price_is_public && offering.price != null ? (\n <div className={`site-kit-offering-price ${priceClassName}`}>\n <span style={{ fontWeight: 600, fontSize: '1.25rem', color: 'var(--sk-text-primary)' }}>\n {formatPrice(offering.price, offering.currency)}\n </span>\n {offering.compare_at_price && (\n <span style={{\n textDecoration: 'line-through',\n color: 'var(--sk-text-secondary)',\n marginLeft: '0.5rem',\n fontSize: '0.875rem',\n }}>\n {formatPrice(offering.compare_at_price, offering.currency)}\n </span>\n )}\n </div>\n ) : (\n <div /> // spacer\n )}\n\n {showCta && (\n <button\n onClick={handleClick}\n className={`site-kit-offering-cta ${ctaClassName}`}\n style={{\n padding: '0.625rem 1.25rem',\n borderRadius: '6px',\n border: 'none',\n background: 'var(--sk-primary)',\n color: 'var(--sk-bg)',\n cursor: 'pointer',\n fontWeight: 500,\n fontSize: '0.875rem',\n }}\n >\n {ctaText || defaultCtaText}\n </button>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport default OfferingCard\n","/**\n * @sonordev/site-kit/commerce - OfferingList\n * \n * Displays a grid or list of offerings with optional filtering.\n */\n\n'use client'\n\nimport React, { useEffect, useState, useMemo } from 'react'\nimport type { OfferingListProps } from './types'\nimport type { CommerceOffering } from './types'\nimport { OfferingCard } from './OfferingCard'\nimport { fetchOfferings, fetchProductsPublic, fetchUpcomingEvents } from './api'\n\nexport function OfferingList({\n // Data options\n offerings: propOfferings,\n type,\n category,\n limit,\n status = 'active',\n \n // Display options\n layout = 'grid',\n columns = 3,\n cardVariant = 'card',\n showFilters = false,\n emptyMessage = 'No items found.',\n \n // Card options\n showImage = true,\n showPrice = true,\n showDescription = true,\n showCta = true,\n ctaText,\n onCtaClick,\n \n // Styling\n className = '',\n cardClassName = '',\n filterClassName = '',\n \n // Custom render\n renderCard,\n renderEmpty,\n}: OfferingListProps) {\n const [offerings, setOfferings] = useState<CommerceOffering[]>(propOfferings || [])\n const [loading, setLoading] = useState(!propOfferings)\n const [error, setError] = useState<string | null>(null)\n const [activeFilter, setActiveFilter] = useState<string | null>(null)\n \n // Fetch offerings if not provided\n useEffect(() => {\n if (propOfferings) {\n setOfferings(propOfferings)\n return\n }\n \n async function load() {\n setLoading(true)\n setError(null)\n \n try {\n let data: CommerceOffering[]\n \n if (type === 'product' || (Array.isArray(type) && type.includes('product'))) {\n const { products } = await fetchProductsPublic({ category, limit, orderBy: 'sort_order', order: 'asc' })\n data = products\n } else if (type === 'event') {\n data = await fetchUpcomingEvents({ category, limit })\n } else {\n data = await fetchOfferings({ type, category, limit, status })\n }\n \n setOfferings(data)\n } catch (e) {\n console.warn('Failed to load offerings:', e)\n setError('Failed to load items.')\n } finally {\n setLoading(false)\n }\n }\n \n load()\n }, [propOfferings, type, category, limit, status])\n \n // Get unique categories for filtering\n const categories = useMemo(() => {\n const cats = offerings\n .filter(o => o.category)\n .map(o => o.category!)\n \n // Unique by ID\n return Array.from(new Map(cats.map(c => [c.id, c])).values())\n }, [offerings])\n \n // Filtered offerings\n const filteredOfferings = useMemo(() => {\n if (!activeFilter) return offerings\n return offerings.filter(o => o.category?.id === activeFilter)\n }, [offerings, activeFilter])\n \n if (loading) {\n return (\n <div className={`site-kit-offerings-loading ${className}`} style={{\n display: 'flex',\n justifyContent: 'center',\n padding: '2rem',\n }}>\n <div style={{\n width: '40px',\n height: '40px',\n border: '3px solid var(--sk-border)',\n borderTopColor: 'var(--sk-primary)',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }} />\n <style>{`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n )\n }\n \n if (error) {\n return (\n <div className={`site-kit-offerings-error ${className}`} style={{\n textAlign: 'center',\n padding: '2rem',\n color: 'var(--sk-error)',\n }}>\n {error}\n </div>\n )\n }\n \n if (filteredOfferings.length === 0) {\n if (renderEmpty) {\n return <>{renderEmpty()}</>\n }\n \n return (\n <div className={`site-kit-offerings-empty ${className}`} style={{\n textAlign: 'center',\n padding: '2rem',\n color: 'var(--sk-text-secondary)',\n }}>\n {emptyMessage}\n </div>\n )\n }\n \n const gridStyles = layout === 'grid' ? {\n display: 'grid',\n gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`,\n gap: '1.5rem',\n } : {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '1rem',\n }\n \n return (\n <div className={`site-kit-offerings ${className}`}>\n {showFilters && categories.length > 1 && (\n <div \n className={`site-kit-offerings-filters ${filterClassName}`}\n style={{\n display: 'flex',\n gap: '0.5rem',\n marginBottom: '1.5rem',\n flexWrap: 'wrap',\n }}\n >\n <button\n onClick={() => setActiveFilter(null)}\n style={{\n padding: '0.5rem 1rem',\n borderRadius: '9999px',\n border: '1px solid',\n borderColor: activeFilter === null ? 'var(--sk-primary)' : 'var(--sk-border)',\n background: activeFilter === null ? 'var(--sk-primary)' : 'var(--sk-bg)',\n color: activeFilter === null ? 'var(--sk-bg)' : 'var(--sk-text-primary)',\n cursor: 'pointer',\n fontSize: '0.875rem',\n }}\n >\n All\n </button>\n {categories.map(cat => (\n <button\n key={cat.id}\n onClick={() => setActiveFilter(cat.id)}\n style={{\n padding: '0.5rem 1rem',\n borderRadius: '9999px',\n border: '1px solid',\n borderColor: activeFilter === cat.id ? 'var(--sk-primary)' : 'var(--sk-border)',\n background: activeFilter === cat.id ? 'var(--sk-primary)' : 'var(--sk-bg)',\n color: activeFilter === cat.id ? 'var(--sk-bg)' : 'var(--sk-text-primary)',\n cursor: 'pointer',\n fontSize: '0.875rem',\n }}\n >\n {cat.name}\n </button>\n ))}\n </div>\n )}\n \n <div className=\"site-kit-offerings-grid\" style={gridStyles}>\n {filteredOfferings.map(offering => (\n renderCard ? renderCard(offering) : (\n <OfferingCard\n key={offering.id}\n offering={offering}\n variant={layout === 'list' ? 'horizontal' : cardVariant}\n showImage={showImage}\n showPrice={showPrice}\n showDescription={showDescription}\n showCta={showCta}\n ctaText={ctaText}\n onCtaClick={onCtaClick}\n className={cardClassName}\n />\n )\n ))}\n </div>\n </div>\n )\n}\n\nexport default OfferingList\n","/**\n * @sonordev/site-kit/commerce - EventTile\n * \n * Compact tile for displaying an event with date, title, and registration button.\n * Great for embedding on homepages or sidebars.\n */\n\n'use client'\n\nimport React, { useState } from 'react'\nimport type { EventTileProps, CommerceOffering } from './types'\nimport { formatDate, formatTime, getRelativeTimeUntil, getSpotsRemaining, isEventSoldOut } from './utils'\nimport { registerForEvent, createCheckoutSession } from './api'\n\nexport function EventTile({\n event,\n variant = 'standard',\n showDate = true,\n showTime = true,\n showLocation = true,\n showCapacity = true,\n showPrice = true,\n showCta = true,\n ctaText,\n onRegister,\n onCtaClick,\n className = '',\n dateClassName = '',\n titleClassName = '',\n ctaClassName = '',\n}: EventTileProps) {\n const [loading, setLoading] = useState(false)\n \n const schedule = event.schedules?.[0] || (event as any).next_schedule\n const soldOut = schedule ? isEventSoldOut(schedule.capacity, schedule.current_registrations) : false\n const spotsRemaining = schedule ? getSpotsRemaining(schedule.capacity, schedule.current_registrations) : null\n \n const defaultCtaText = event.price && event.price > 0 ? 'Get Tickets' : 'Register Free'\n\n // Public styling hooks: consuming sites theme tiles per category/type via CSS\n // attribute selectors, e.g. .site-kit-event-tile[data-category=\"pto\"]\n const dataAttrs = {\n 'data-sk-part': 'event-tile',\n 'data-category': event.category?.slug,\n 'data-offering-type': event.type,\n }\n \n const handleClick = async () => {\n // External URL — open in new tab, bypass internal checkout\n if (event.external_url) {\n window.open(event.external_url, '_blank', 'noopener,noreferrer')\n return\n }\n\n if (onCtaClick) {\n onCtaClick(event)\n return\n }\n\n // If no schedule, go to event page\n if (!schedule) {\n window.location.href = `/events/${event.slug}`\n return\n }\n \n // If custom onRegister handler\n if (onRegister) {\n onRegister(event, schedule.id)\n return\n }\n \n // Default: create checkout session for paid, or go to registration page\n setLoading(true)\n try {\n if (event.price && event.price > 0) {\n const result = await createCheckoutSession(event.id, { scheduleId: schedule.id })\n if (result.payment_url) {\n window.location.href = result.payment_url\n }\n } else {\n // Free event - go to registration page\n window.location.href = `/events/${event.slug}/register`\n }\n } catch (e) {\n console.error('Registration error:', e)\n } finally {\n setLoading(false)\n }\n }\n \n if (variant === 'compact') {\n return (\n <div className={`site-kit-event-tile-compact ${className}`} {...dataAttrs} style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n padding: '0.75rem',\n background: 'var(--sk-bg)',\n borderRadius: '8px',\n boxShadow: '0 1px 2px rgba(0,0,0,0.05)',\n }}>\n {showDate && schedule && (\n <div className={`site-kit-event-date ${dateClassName}`} style={{\n minWidth: '48px',\n textAlign: 'center',\n padding: '0.5rem',\n background: 'var(--sk-surface)',\n borderRadius: '6px',\n }}>\n <div style={{ fontSize: '0.75rem', color: 'var(--sk-text-secondary)', textTransform: 'uppercase' }}>\n {new Date(schedule.starts_at).toLocaleDateString('en-US', { month: 'short' })}\n </div>\n <div style={{ fontSize: '1.25rem', fontWeight: 700, color: 'var(--sk-text-primary)' }}>\n {new Date(schedule.starts_at).getDate()}\n </div>\n </div>\n )}\n \n <div style={{ flex: 1, minWidth: 0 }}>\n <h4 className={`site-kit-event-title ${titleClassName}`} style={{\n margin: 0,\n fontSize: '0.875rem',\n fontWeight: 600,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}>\n {event.name}\n </h4>\n {showTime && schedule && (\n <div style={{ fontSize: '0.75rem', color: 'var(--sk-text-secondary)' }}>\n {formatTime(schedule.starts_at)}\n {showLocation && event.location && ` • ${event.location}`}\n </div>\n )}\n </div>\n \n {showCta && (\n <button\n onClick={handleClick}\n disabled={soldOut || loading}\n className={`site-kit-event-cta ${ctaClassName}`}\n style={{\n padding: '0.375rem 0.75rem',\n fontSize: '0.75rem',\n borderRadius: '4px',\n border: 'none',\n background: soldOut ? 'var(--sk-border)' : 'var(--sk-primary)',\n color: soldOut ? 'var(--sk-text-secondary)' : 'var(--sk-bg)',\n cursor: soldOut ? 'not-allowed' : 'pointer',\n fontWeight: 500,\n whiteSpace: 'nowrap',\n }}\n >\n {soldOut ? 'Sold Out' : (loading ? '...' : (ctaText || defaultCtaText))}\n </button>\n )}\n </div>\n )\n }\n \n // Standard variant\n return (\n <div className={`site-kit-event-tile ${className}`} {...dataAttrs} style={{\n background: 'var(--sk-bg)',\n borderRadius: '12px',\n overflow: 'hidden',\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\n }}>\n {event.featured_image_url && (\n <img\n src={event.featured_image_url}\n alt={event.name}\n style={{\n width: '100%',\n height: '140px',\n objectFit: 'cover',\n }}\n />\n )}\n \n <div style={{ padding: '1rem' }}>\n {showDate && schedule && (\n <div className={`site-kit-event-date ${dateClassName}`} style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n marginBottom: '0.5rem',\n }}>\n <span style={{\n background: 'rgba(var(--sk-primary-rgb), 0.125)',\n color: 'var(--sk-primary)',\n padding: '0.25rem 0.5rem',\n borderRadius: '4px',\n fontSize: '0.75rem',\n fontWeight: 600,\n }}>\n {getRelativeTimeUntil(schedule.starts_at)}\n </span>\n <span style={{ fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>\n {formatDate(schedule.starts_at)}\n </span>\n </div>\n )}\n \n <h3 className={`site-kit-event-title ${titleClassName}`} style={{\n margin: '0 0 0.5rem',\n fontSize: '1.125rem',\n fontWeight: 600,\n color: 'var(--sk-text-primary)',\n }}>\n {event.name}\n </h3>\n \n {showLocation && event.location && (\n <div style={{ fontSize: '0.875rem', color: 'var(--sk-text-secondary)', marginBottom: '0.5rem' }}>\n 📍 {event.location}\n </div>\n )}\n \n {showTime && schedule && (\n <div style={{ fontSize: '0.875rem', color: 'var(--sk-text-secondary)', marginBottom: '0.75rem' }}>\n 🕐 {formatTime(schedule.starts_at)}\n {schedule.ends_at && ` - ${formatTime(schedule.ends_at)}`}\n </div>\n )}\n \n <div style={{ \n display: 'flex', \n justifyContent: 'space-between', \n alignItems: 'center',\n marginTop: '0.75rem',\n }}>\n <div>\n {showPrice && event.price_is_public && event.price != null && (\n <span style={{ fontWeight: 600, color: 'var(--sk-text-primary)' }}>\n {event.price === 0 ? 'Free' : `$${event.price}`}\n </span>\n )}\n {showCapacity && spotsRemaining !== null && spotsRemaining <= 10 && !soldOut && (\n <span style={{ \n fontSize: '0.75rem', \n color: 'var(--sk-error)',\n marginLeft: '0.5rem',\n }}>\n Only {spotsRemaining} spots left!\n </span>\n )}\n </div>\n \n {showCta && (\n <button\n onClick={handleClick}\n disabled={soldOut || loading}\n className={`site-kit-event-cta ${ctaClassName}`}\n style={{\n padding: '0.5rem 1rem',\n borderRadius: '6px',\n border: 'none',\n background: soldOut ? 'var(--sk-border)' : 'var(--sk-primary)',\n color: soldOut ? 'var(--sk-text-secondary)' : 'var(--sk-bg)',\n cursor: soldOut ? 'not-allowed' : 'pointer',\n fontWeight: 500,\n fontSize: '0.875rem',\n }}\n >\n {soldOut ? 'Sold Out' : (loading ? 'Loading...' : (ctaText || defaultCtaText))}\n </button>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport default EventTile\n","/**\n * @sonordev/site-kit/commerce - UpcomingEvents\n * \n * Displays a list of upcoming events with date, title, and registration buttons.\n */\n\n'use client'\n\nimport React, { useEffect, useState } from 'react'\nimport type { UpcomingEventsProps, CommerceOffering } from './types'\nimport { EventTile } from './EventTile'\nimport { fetchUpcomingEvents } from './api'\n\nexport function UpcomingEvents({\n events: propEvents,\n limit = 3,\n category,\n variant = 'standard',\n layout = 'vertical',\n showViewAll = true,\n viewAllUrl = '/events',\n viewAllText = 'View All Events',\n emptyMessage = 'No upcoming events.',\n title,\n onRegister,\n onCtaClick,\n className = '',\n titleClassName = '',\n eventClassName = '',\n}: UpcomingEventsProps) {\n const [events, setEvents] = useState<CommerceOffering[]>(propEvents || [])\n const [loading, setLoading] = useState(!propEvents)\n \n useEffect(() => {\n if (propEvents) {\n setEvents(propEvents)\n return\n }\n \n async function load() {\n setLoading(true)\n try {\n const data = await fetchUpcomingEvents({ limit, category })\n setEvents(data)\n } catch (e) {\n console.error('Failed to load events:', e)\n } finally {\n setLoading(false)\n }\n }\n \n load()\n }, [propEvents, limit, category])\n \n if (loading) {\n return (\n <div className={`site-kit-upcoming-events ${className}`}>\n <div style={{ padding: '2rem', textAlign: 'center', color: 'var(--sk-text-secondary)' }}>\n Loading events...\n </div>\n </div>\n )\n }\n \n if (events.length === 0) {\n return (\n <div className={`site-kit-upcoming-events ${className}`}>\n {title && (\n <h2 className={`site-kit-upcoming-events-title ${titleClassName}`} style={{\n margin: '0 0 1rem',\n fontSize: '1.5rem',\n fontWeight: 600,\n }}>\n {title}\n </h2>\n )}\n <div style={{ padding: '2rem', textAlign: 'center', color: 'var(--sk-text-secondary)' }}>\n {emptyMessage}\n </div>\n </div>\n )\n }\n \n const layoutStyles = layout === 'horizontal' ? {\n display: 'flex',\n gap: '1rem',\n overflowX: 'auto' as const,\n } : {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '1rem',\n }\n \n return (\n <div className={`site-kit-upcoming-events ${className}`}>\n {title && (\n <div style={{ \n display: 'flex', \n justifyContent: 'space-between', \n alignItems: 'center',\n marginBottom: '1rem',\n }}>\n <h2 className={`site-kit-upcoming-events-title ${titleClassName}`} style={{\n margin: 0,\n fontSize: '1.5rem',\n fontWeight: 600,\n }}>\n {title}\n </h2>\n \n {showViewAll && events.length >= limit && (\n <a\n href={viewAllUrl}\n style={{\n color: 'var(--sk-primary)',\n textDecoration: 'none',\n fontSize: '0.875rem',\n fontWeight: 500,\n }}\n >\n {viewAllText} →\n </a>\n )}\n </div>\n )}\n \n <div style={layoutStyles}>\n {events.map(event => (\n <div \n key={event.id} \n className={eventClassName}\n style={layout === 'horizontal' ? { minWidth: '280px', flex: '0 0 auto' } : undefined}\n >\n <EventTile\n event={event}\n variant={variant}\n onRegister={onRegister}\n onCtaClick={onCtaClick}\n />\n </div>\n ))}\n </div>\n \n {showViewAll && events.length >= limit && !title && (\n <div style={{ textAlign: 'center', marginTop: '1.5rem' }}>\n <a\n href={viewAllUrl}\n style={{\n display: 'inline-block',\n padding: '0.75rem 1.5rem',\n background: 'var(--sk-surface)',\n color: 'var(--sk-text-primary)',\n borderRadius: '8px',\n textDecoration: 'none',\n fontWeight: 500,\n }}\n >\n {viewAllText}\n </a>\n </div>\n )}\n </div>\n )\n}\n\nexport default UpcomingEvents\n","/**\n * @sonordev/site-kit/commerce - ProductEmbed\n * \n * Embeddable widget for displaying a single product on a homepage or landing page.\n * Supports showing latest product, specific product by slug, or a random featured product.\n */\n\n'use client'\n\nimport React, { useEffect, useState } from 'react'\nimport type { ProductEmbedProps, CommerceOffering } from './types'\nimport { OfferingCard } from './OfferingCard'\nimport { fetchProductBySlug, fetchLatestOffering } from './api'\n\nexport function ProductEmbed({\n product: propProduct,\n slug,\n mode = 'specific', // 'specific', 'latest', 'featured'\n category,\n variant = 'card',\n showImage = true,\n showPrice = true,\n showDescription = true,\n showCta = true,\n ctaText = 'Shop Now',\n onCtaClick,\n className = '',\n}: ProductEmbedProps) {\n const [product, setProduct] = useState<CommerceOffering | null>(propProduct || null)\n const [loading, setLoading] = useState(!propProduct && !!slug)\n \n useEffect(() => {\n if (propProduct) {\n setProduct(propProduct)\n return\n }\n \n async function load() {\n setLoading(true)\n try {\n let data: CommerceOffering | null = null\n \n if (mode === 'specific' && slug) {\n data = await fetchProductBySlug(slug)\n } else if (mode === 'latest' || mode === 'featured') {\n data = await fetchLatestOffering('product', category)\n }\n \n setProduct(data)\n } catch (e) {\n console.warn('Failed to load product:', e)\n } finally {\n setLoading(false)\n }\n }\n \n load()\n }, [propProduct, slug, mode, category])\n \n if (loading) {\n return (\n <div className={`site-kit-product-embed ${className}`} style={{\n padding: '2rem',\n textAlign: 'center',\n background: 'var(--sk-bg-elevated)',\n borderRadius: '12px',\n }}>\n <div style={{\n width: '40px',\n height: '40px',\n margin: '0 auto',\n border: '3px solid var(--sk-border)',\n borderTopColor: 'var(--sk-primary)',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }} />\n <style>{`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n )\n }\n \n if (!product) {\n return null // Silent fail - don't show anything if no product\n }\n \n return (\n <div className={`site-kit-product-embed ${className}`}>\n <OfferingCard\n offering={product}\n variant={variant}\n showImage={showImage}\n showPrice={showPrice}\n showDescription={showDescription}\n showCta={showCta}\n ctaText={ctaText}\n onCtaClick={onCtaClick}\n />\n </div>\n )\n}\n\nexport default ProductEmbed\n","'use client'\n\nimport { useState } from 'react'\nimport type { SizeChart as SizeChartType } from './types'\n\ninterface SizeChartProps {\n chart: SizeChartType\n selectedSize?: string\n className?: string\n}\n\nconst CM_PER_INCH = 2.54\n\nfunction convertValue(value: number, fromUnit: 'inches' | 'cm'): number {\n if (fromUnit === 'inches') return Math.round(value * CM_PER_INCH * 10) / 10\n return Math.round((value / CM_PER_INCH) * 10) / 10\n}\n\nexport function SizeChart({ chart, selectedSize, className }: SizeChartProps) {\n const [isOpen, setIsOpen] = useState(false)\n // showAlt: true means display the alternate unit (not the chart's primary unit)\n const [showAlt, setShowAlt] = useState(false)\n\n if (!chart?.measurements?.length || !chart?.rows?.length) return null\n\n // The display unit when showAlt is active is the opposite of the primary unit\n const primaryUnit = chart.unit\n const altUnit: 'inches' | 'cm' = primaryUnit === 'inches' ? 'cm' : 'inches'\n const activeUnit = showAlt ? altUnit : primaryUnit\n const unitLabel = activeUnit === 'cm' ? 'cm' : 'in'\n\n function getDisplayValues(row: SizeChartType['rows'][number]): (number | string)[] {\n if (!showAlt) return row.values\n\n // Use stored alt values if present, otherwise compute on the fly\n if (row.values_alt && row.values_alt.length === row.values.length) {\n return row.values_alt\n }\n\n return row.values.map((v) => convertValue(v, primaryUnit))\n }\n\n return (\n <div className={className}>\n {/* Toggle row: \"View Size Chart\" link + unit pill */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n style={{\n background: 'none',\n border: 'none',\n padding: 0,\n cursor: 'pointer',\n fontSize: '14px',\n color: 'inherit',\n opacity: 0.7,\n textDecoration: 'underline',\n textUnderlineOffset: '2px',\n }}\n >\n {isOpen ? 'Hide Size Chart' : 'View Size Chart'}\n </button>\n\n {isOpen && (\n <button\n type=\"button\"\n onClick={() => setShowAlt(!showAlt)}\n style={{\n background: 'none',\n border: '1px solid rgba(128,128,128,0.25)',\n borderRadius: '999px',\n padding: '2px 8px',\n cursor: 'pointer',\n fontSize: '11px',\n lineHeight: 1.4,\n display: 'flex',\n alignItems: 'center',\n gap: 0,\n }}\n >\n <span style={{ fontWeight: activeUnit === 'inches' ? 700 : 400, opacity: activeUnit === 'inches' ? 1 : 0.45 }}>in</span>\n <span style={{ margin: '0 3px', opacity: 0.3 }}>/</span>\n <span style={{ fontWeight: activeUnit === 'cm' ? 700 : 400, opacity: activeUnit === 'cm' ? 1 : 0.45 }}>cm</span>\n </button>\n )}\n </div>\n\n {isOpen && (\n <div style={{ marginTop: '12px', overflowX: 'auto' }}>\n <table\n style={{\n width: '100%',\n borderCollapse: 'collapse',\n fontSize: '13px',\n lineHeight: 1.5,\n }}\n >\n <thead>\n <tr>\n <th style={thStyle}>Size</th>\n {chart.measurements.map((m) => (\n <th key={m} style={thStyle}>\n {m} <span style={{ opacity: 0.5, fontWeight: 400 }}>({unitLabel})</span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {chart.rows.map((row) => {\n const isSelected = selectedSize === row.size\n const displayValues = getDisplayValues(row)\n return (\n <tr\n key={row.size}\n style={{\n backgroundColor: isSelected ? 'rgba(57, 191, 176, 0.08)' : undefined,\n }}\n >\n <td style={{ ...tdStyle, fontWeight: 600 }}>{row.size}</td>\n {displayValues.map((v, i) => (\n <td key={i} style={tdStyle}>{v}</td>\n ))}\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )}\n </div>\n )\n}\n\nconst thStyle: React.CSSProperties = {\n padding: '8px 12px',\n textAlign: 'left',\n fontWeight: 600,\n borderBottom: '1px solid rgba(128, 128, 128, 0.2)',\n whiteSpace: 'nowrap',\n}\n\nconst tdStyle: React.CSSProperties = {\n padding: '8px 12px',\n borderBottom: '1px solid rgba(128, 128, 128, 0.1)',\n whiteSpace: 'nowrap',\n}\n","'use client'\n\n/**\n * @sonordev/site-kit/commerce - ProductDetail\n *\n * World-class product detail component with full inline checkout.\n * Supports products, services, events, and subscriptions.\n * Zero external dependencies — Square and Stripe SDKs loaded dynamically.\n */\n\nimport React, { useState, useEffect, useRef, useCallback, useMemo } from 'react'\nimport type {\n CommerceOffering,\n CommerceVariant,\n CommerceSchedule,\n CheckoutCustomer,\n CheckoutResult,\n} from './types'\nimport {\n fetchProductBySlug,\n fetchProcessorConfig,\n fetchShippingRates,\n createCheckoutSession,\n createPaymentIntent,\n registerForEvent,\n} from './api'\nimport type { ShippingAddress, ShippingRate, ProcessorConfig, CreateCheckoutOptions } from './api'\nimport { formatPrice, formatDate, formatTime, getSpotsRemaining, isEventSoldOut } from './utils'\nimport { SizeChart } from './SizeChart'\nimport { useAnalyticsOptional } from '../analytics'\n\n// ============================================\n// Style Block\n// ============================================\n\nconst STYLE_BLOCK = `\n@keyframes skc-spin {\n to { transform: rotate(360deg); }\n}\n@keyframes skc-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.6; }\n}\n@keyframes skc-fadeIn {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n@keyframes skc-slideUp {\n from { opacity: 0; transform: translateY(100%); }\n to { opacity: 1; transform: translateY(0); }\n}\n@keyframes skc-scaleIn {\n from { opacity: 0; transform: scale(0.95); }\n to { opacity: 1; transform: scale(1); }\n}\n@keyframes skc-checkmark {\n 0% { stroke-dashoffset: 24; }\n 100% { stroke-dashoffset: 0; }\n}\n\n.skc-detail {\n animation: skc-fadeIn 0.3s ease-out;\n}\n\n/*\n * Commerce uses --sk-* CSS custom properties inherited from the host site's :root.\n * Host sites define their design tokens via the site-kit theme system.\n */\n\n.skc-detail *, .skc-detail *::before, .skc-detail *::after {\n box-sizing: border-box;\n}\n\n.skc-detail-layout {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 2.5rem;\n align-items: start;\n max-width: 1200px;\n margin: 0 auto;\n padding: 1.5rem;\n}\n\n@media (max-width: 768px) {\n .skc-detail-layout {\n grid-template-columns: 1fr;\n gap: 1.5rem;\n }\n .skc-detail-layout.skc-stacked {\n grid-template-columns: 1fr;\n }\n}\n\n.skc-detail-layout.skc-stacked {\n grid-template-columns: 1fr;\n max-width: 640px;\n}\n\n/* Gallery */\n.skc-gallery-main {\n position: relative;\n overflow: hidden;\n border-radius: var(--sk-radius, 12px);\n background: var(--sk-bg-elevated);\n cursor: crosshair;\n aspect-ratio: 1;\n}\n.skc-gallery-main img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n transition: transform 0.15s ease-out;\n will-change: transform;\n}\n.skc-gallery-thumbs {\n display: flex;\n gap: 0.5rem;\n margin-top: 0.75rem;\n overflow-x: auto;\n scrollbar-width: thin;\n -webkit-overflow-scrolling: touch;\n padding-bottom: 4px;\n}\n.skc-gallery-thumb {\n flex: 0 0 auto;\n width: 64px;\n height: 64px;\n border-radius: var(--sk-radius-sm, 8px);\n overflow: hidden;\n border: 2px solid transparent;\n padding: 0;\n cursor: pointer;\n background: var(--sk-bg-elevated);\n transition: border-color 0.15s ease;\n}\n.skc-gallery-thumb:hover {\n border-color: var(--sk-text-secondary);\n}\n.skc-gallery-thumb.skc-active {\n border-color: var(--sk-primary);\n}\n.skc-gallery-thumb img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n/* Sticky buy bar */\n.skc-sticky-bar {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 999;\n background: var(--sk-bg);\n border-top: 1px solid var(--sk-border);\n padding: 0.75rem 1rem;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 1rem;\n animation: skc-slideUp 0.25s ease-out;\n box-shadow: 0 -4px 20px rgba(0,0,0,0.08);\n}\n@media (min-width: 769px) {\n .skc-sticky-bar { display: none; }\n}\n\n/* Tabs */\n.skc-tabs-list {\n display: flex;\n border-bottom: 1px solid var(--sk-border);\n gap: 0;\n overflow-x: auto;\n scrollbar-width: none;\n}\n.skc-tabs-list::-webkit-scrollbar { display: none; }\n.skc-tab-btn {\n padding: 0.75rem 1.25rem;\n border: none;\n background: none;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--sk-text-secondary);\n cursor: pointer;\n border-bottom: 2px solid transparent;\n white-space: nowrap;\n transition: color 0.15s ease, border-color 0.15s ease;\n}\n.skc-tab-btn:hover {\n color: var(--sk-text-primary);\n}\n.skc-tab-btn.skc-active {\n color: var(--sk-primary);\n border-bottom-color: var(--sk-primary);\n}\n\n/* Checkout overlay */\n.skc-checkout-overlay {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: rgba(0,0,0,0.5);\n backdrop-filter: blur(4px);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1rem;\n animation: skc-fadeIn 0.2s ease-out;\n}\n.skc-checkout-panel {\n position: relative;\n width: 100%;\n max-width: 480px;\n max-height: 90vh;\n overflow-y: auto;\n background: var(--sk-bg);\n border-radius: calc(var(--sk-radius, 12px) + 4px);\n box-shadow: 0 25px 50px -12px rgba(0,0,0,0.25);\n animation: skc-scaleIn 0.25s ease-out;\n}\n\n/* Form inputs */\n.skc-input {\n width: 100%;\n padding: 0.625rem 0.75rem;\n border-radius: var(--sk-radius-sm, 8px);\n border: 1px solid var(--sk-border);\n font-size: 0.9375rem;\n color: var(--sk-text-primary);\n background: var(--sk-bg);\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n outline: none;\n}\n.skc-input:focus {\n border-color: var(--sk-primary);\n box-shadow: 0 0 0 3px rgba(var(--sk-primary-rgb), 0.1);\n}\n.skc-input::placeholder {\n color: var(--sk-text-secondary);\n}\n\n/* Primary button */\n.skc-btn-primary {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n width: 100%;\n padding: 0.875rem 1.5rem;\n border-radius: var(--sk-radius-sm, 8px);\n border: none;\n background: var(--sk-primary);\n color: var(--sk-bg);\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: background-color 0.15s ease, transform 0.1s ease;\n}\n.skc-btn-primary:hover:not(:disabled) {\n background: var(--sk-primary-hover);\n}\n.skc-btn-primary:active:not(:disabled) {\n transform: scale(0.98);\n}\n.skc-btn-primary:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n/* Secondary button */\n.skc-btn-secondary {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n width: 100%;\n padding: 0.875rem 1.5rem;\n border-radius: var(--sk-radius-sm, 8px);\n border: 2px solid var(--sk-primary);\n background: transparent;\n color: var(--sk-primary);\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n.skc-btn-secondary:hover:not(:disabled) {\n background: rgba(var(--sk-primary-rgb), 0.05);\n}\n.skc-btn-secondary:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n/* Low-stock pulse */\n.skc-pulse {\n animation: skc-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n\n/* Step indicator */\n.skc-step-dots {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n padding: 1rem 0 0.5rem;\n}\n.skc-step-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--sk-border);\n transition: background 0.2s ease, transform 0.2s ease;\n}\n.skc-step-dot.skc-active {\n background: var(--sk-primary);\n transform: scale(1.3);\n}\n.skc-step-dot.skc-done {\n background: var(--sk-success);\n}\n.skc-step-connector {\n width: 24px;\n height: 2px;\n background: var(--sk-border);\n transition: background 0.2s ease;\n}\n.skc-step-connector.skc-done {\n background: var(--sk-success);\n}\n`\n\n// ============================================\n// SDK Loaders\n// ============================================\n\nfunction loadSquareSDK(env: string): Promise<void> {\n return new Promise((resolve, reject) => {\n if (typeof window === 'undefined') return reject(new Error('No window'))\n if ((window as any).Square) return resolve()\n const script = document.createElement('script')\n script.src =\n env === 'sandbox'\n ? 'https://sandbox.web.squarecdn.com/v1/square.js'\n : 'https://web.squarecdn.com/v1/square.js'\n script.onload = () => resolve()\n script.onerror = () => reject(new Error('Failed to load Square SDK'))\n document.head.appendChild(script)\n })\n}\n\nfunction loadStripeSDK(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (typeof window === 'undefined') return reject(new Error('No window'))\n if ((window as any).Stripe) return resolve()\n const script = document.createElement('script')\n script.src = 'https://js.stripe.com/v3/'\n script.onload = () => resolve()\n script.onerror = () => reject(new Error('Failed to load Stripe'))\n document.head.appendChild(script)\n })\n}\n\n// ============================================\n// Inline SVG Icons\n// ============================================\n\nconst IconLock = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </svg>\n)\n\nconst IconTruck = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"1\" y=\"3\" width=\"15\" height=\"13\" />\n <polygon points=\"16 8 20 8 23 11 23 16 16 16 16 8\" />\n <circle cx=\"5.5\" cy=\"18.5\" r=\"2.5\" />\n <circle cx=\"18.5\" cy=\"18.5\" r=\"2.5\" />\n </svg>\n)\n\nconst IconReturn = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"1 4 1 10 7 10\" />\n <path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\" />\n </svg>\n)\n\nconst IconShield = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n </svg>\n)\n\nconst IconChevronLeft = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n)\n\nconst IconChevronRight = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n)\n\nconst IconCheck = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n)\n\nconst IconAlert = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n)\n\nconst IconCalendar = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n)\n\nconst IconMapPin = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\" />\n <circle cx=\"12\" cy=\"10\" r=\"3\" />\n </svg>\n)\n\nconst IconUsers = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </svg>\n)\n\nconst IconExternalLink = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n <polyline points=\"15 3 21 3 21 9\" />\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n </svg>\n)\n\nconst IconX = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" 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\nconst ICON_MAP: Record<string, React.FC> = {\n lock: IconLock,\n truck: IconTruck,\n return: IconReturn,\n shield: IconShield,\n}\n\n// ============================================\n// Checkout State Machine\n// ============================================\n\ntype CheckoutState =\n | 'browsing'\n | 'customer-info'\n | 'shipping'\n | 'rates'\n | 'payment'\n | 'processing'\n | 'success'\n\n// ============================================\n// Sub-Components\n// ============================================\n\n// ---------- ProductGallery ----------\n\ninterface ModelInfo {\n model_name?: string\n height?: string\n weight?: string\n wearing_size?: string\n}\n\ninterface GalleryProps {\n images: string[]\n productName: string\n selectedIndex: number\n onSelect: (index: number) => void\n /** Image IDs in same order as images, for model info lookup */\n imageIds?: (string | undefined)[]\n /** Model info keyed by image ID */\n imageModelInfo?: Record<string, ModelInfo>\n}\n\nfunction ProductGallery({ images, productName, selectedIndex, onSelect, imageIds, imageModelInfo }: GalleryProps) {\n const [zoomStyle, setZoomStyle] = useState<React.CSSProperties | null>(null)\n const [isHovering, setIsHovering] = useState(false)\n\n const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n const rect = e.currentTarget.getBoundingClientRect()\n const x = ((e.clientX - rect.left) / rect.width) * 100\n const y = ((e.clientY - rect.top) / rect.height) * 100\n setZoomStyle({ transformOrigin: `${x}% ${y}%`, transform: 'scale(2)' })\n }\n\n const handlePrev = (e: React.MouseEvent) => {\n e.stopPropagation()\n onSelect(selectedIndex === 0 ? images.length - 1 : selectedIndex - 1)\n }\n\n const handleNext = (e: React.MouseEvent) => {\n e.stopPropagation()\n onSelect(selectedIndex === images.length - 1 ? 0 : selectedIndex + 1)\n }\n\n if (!images.length) return null\n\n return (\n <div>\n <div\n className=\"skc-gallery-main\"\n onMouseMove={handleMouseMove}\n onMouseEnter={() => setIsHovering(true)}\n onMouseLeave={() => { setIsHovering(false); setZoomStyle(null) }}\n role=\"img\"\n aria-label={`${productName} image ${selectedIndex + 1} of ${images.length}`}\n >\n <img\n src={images[selectedIndex]}\n alt={`${productName} - Image ${selectedIndex + 1}`}\n style={isHovering && zoomStyle ? zoomStyle : undefined}\n draggable={false}\n />\n {(() => {\n const currentImgId = imageIds?.[selectedIndex]\n const modelInfo = currentImgId && imageModelInfo?.[currentImgId]\n if (!modelInfo) return null\n const parts: string[] = []\n if (modelInfo.height) parts.push(modelInfo.height)\n if (modelInfo.weight) parts.push(modelInfo.weight)\n const line1 = parts.length ? `Model: ${parts.join(', ')}` : modelInfo.model_name ? `Model: ${modelInfo.model_name}` : null\n const line2 = modelInfo.wearing_size ? `Wearing size ${modelInfo.wearing_size}` : null\n if (!line1 && !line2) return null\n return (\n <div\n style={{\n position: 'absolute',\n bottom: 0,\n left: 0,\n right: 0,\n background: 'linear-gradient(transparent, rgba(0,0,0,0.65))',\n padding: '1.5rem 1rem 0.75rem',\n color: '#fff',\n fontSize: '0.8125rem',\n lineHeight: 1.4,\n pointerEvents: 'none',\n zIndex: 2,\n }}\n >\n {line1 && <div style={{ fontWeight: 600 }}>{line1}</div>}\n {line2 && <div style={{ fontWeight: 400, opacity: 0.9 }}>{line2}</div>}\n </div>\n )\n })()}\n {images.length > 1 && (\n <>\n <button\n onClick={handlePrev}\n aria-label=\"Previous image\"\n style={{\n position: 'absolute',\n left: 8,\n top: '50%',\n transform: 'translateY(-50%)',\n width: 36,\n height: 36,\n borderRadius: '50%',\n border: 'none',\n background: 'rgba(255,255,255,0.9)',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n opacity: isHovering ? 1 : 0,\n transition: 'opacity 0.2s ease',\n boxShadow: '0 2px 8px rgba(0,0,0,0.1)',\n }}\n >\n <IconChevronLeft />\n </button>\n <button\n onClick={handleNext}\n aria-label=\"Next image\"\n style={{\n position: 'absolute',\n right: 8,\n top: '50%',\n transform: 'translateY(-50%)',\n width: 36,\n height: 36,\n borderRadius: '50%',\n border: 'none',\n background: 'rgba(255,255,255,0.9)',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n opacity: isHovering ? 1 : 0,\n transition: 'opacity 0.2s ease',\n boxShadow: '0 2px 8px rgba(0,0,0,0.1)',\n }}\n >\n <IconChevronRight />\n </button>\n </>\n )}\n {/* Image counter badge */}\n {images.length > 1 && (\n <div\n style={{\n position: 'absolute',\n bottom: 8,\n right: 8,\n background: 'rgba(0,0,0,0.6)',\n color: 'white',\n fontSize: '0.75rem',\n padding: '2px 8px',\n borderRadius: 12,\n }}\n >\n {selectedIndex + 1} / {images.length}\n </div>\n )}\n </div>\n\n {images.length > 1 && (\n <div className=\"skc-gallery-thumbs\" role=\"listbox\" aria-label=\"Image thumbnails\">\n {images.map((img, idx) => (\n <button\n key={idx}\n className={`skc-gallery-thumb${idx === selectedIndex ? ' skc-active' : ''}`}\n onClick={() => onSelect(idx)}\n role=\"option\"\n aria-selected={idx === selectedIndex}\n aria-label={`View image ${idx + 1}`}\n >\n <img src={img} alt={`${productName} thumbnail ${idx + 1}`} draggable={false} />\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n\n// ---------- VariantSelector ----------\n\ninterface VariantSelectorProps {\n variants: CommerceVariant[]\n selected?: CommerceVariant\n isClothing: boolean\n showInventory: boolean\n onSelect: (variant: CommerceVariant) => void\n}\n\nfunction VariantSelector({ variants, selected, isClothing, showInventory, onSelect }: VariantSelectorProps) {\n if (!variants.length) return null\n\n const label = isClothing ? 'Size' : 'Options'\n\n return (\n <div style={{ marginTop: '1.25rem' }}>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: '0.5rem' }}>\n <label\n style={{\n fontSize: '0.875rem',\n fontWeight: 600,\n color: 'var(--sk-text-primary)',\n }}\n >\n {label}\n {selected && (\n <span style={{ fontWeight: 400, color: 'var(--sk-text-secondary)', marginLeft: 6 }}>\n — {(selected.options as Record<string, string>)?.Size || selected.name}\n </span>\n )}\n </label>\n </div>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '0.5rem' }} role=\"radiogroup\" aria-label={label}>\n {variants.map((variant) => {\n const isSelected = selected?.id === variant.id\n const variantOutOfStock =\n variant.track_inventory !== false && (variant.inventory_count ?? 0) <= 0\n const isLow =\n variant.track_inventory !== false &&\n variant.inventory_count != null &&\n variant.inventory_count > 0 &&\n variant.inventory_count <= 5\n\n return (\n <button\n key={variant.id}\n role=\"radio\"\n aria-checked={isSelected}\n aria-label={`${(variant.options as Record<string, string>)?.Size || variant.name}${variantOutOfStock ? ' - Out of stock' : ''}`}\n onClick={() => !variantOutOfStock && onSelect(variant)}\n disabled={variantOutOfStock}\n style={{\n position: 'relative',\n padding: variantOutOfStock ? '0.375rem 1rem 0.25rem' : '0.5rem 1rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n border: isSelected\n ? '2px solid var(--sk-primary)'\n : variantOutOfStock\n ? '1px solid var(--sk-border)'\n : '1px solid var(--sk-border)',\n backgroundColor: isSelected\n ? 'color-mix(in srgb, var(--sk-primary) 8%, transparent)'\n : variantOutOfStock\n ? 'var(--sk-bg-elevated)'\n : 'var(--sk-bg-elevated)',\n color: variantOutOfStock\n ? 'var(--sk-text-secondary)'\n : 'var(--sk-text-primary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: variantOutOfStock ? 'not-allowed' : 'pointer',\n opacity: variantOutOfStock ? 0.6 : 1,\n transition: 'all 0.15s ease',\n textDecoration: 'none',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: variantOutOfStock ? '1px' : 0,\n minWidth: 48,\n }}\n >\n <span style={{ textDecoration: variantOutOfStock ? 'line-through' : 'none' }}>\n {(variant.options as Record<string, string>)?.Size || variant.name}\n </span>\n {variantOutOfStock && (\n <span style={{\n fontSize: '0.5625rem',\n fontWeight: 600,\n color: 'var(--sk-error)',\n textTransform: 'uppercase',\n letterSpacing: '0.03em',\n lineHeight: 1,\n }}>\n Sold Out\n </span>\n )}\n {showInventory && !variantOutOfStock && (\n <span\n style={{\n position: 'absolute',\n top: -3,\n right: -3,\n width: 8,\n height: 8,\n borderRadius: '50%',\n backgroundColor: isLow\n ? 'var(--sk-warning)'\n : 'var(--sk-success)',\n border: '2px solid var(--sk-bg-elevated)',\n }}\n title={\n isLow\n ? `Only ${variant.inventory_count} left`\n : 'In stock'\n }\n />\n )}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n\n// ---------- QuantitySelector ----------\n\ninterface QuantitySelectorProps {\n quantity: number\n max: number\n onChange: (qty: number) => void\n}\n\nfunction QuantitySelector({ quantity, max, onChange }: QuantitySelectorProps) {\n return (\n <div style={{ marginTop: '1.25rem' }}>\n <label\n style={{\n display: 'block',\n fontSize: '0.875rem',\n fontWeight: 600,\n color: 'var(--sk-text-primary)',\n marginBottom: '0.5rem',\n }}\n >\n Quantity\n </label>\n <div\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n border: '1px solid var(--sk-border)',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n overflow: 'hidden',\n }}\n >\n <button\n onClick={() => onChange(Math.max(1, quantity - 1))}\n disabled={quantity <= 1}\n aria-label=\"Decrease quantity\"\n style={{\n width: 40,\n height: 40,\n border: 'none',\n background: 'var(--sk-bg-elevated)',\n fontSize: '1.125rem',\n cursor: quantity <= 1 ? 'not-allowed' : 'pointer',\n opacity: quantity <= 1 ? 0.4 : 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--sk-text-primary)',\n }}\n >\n -\n </button>\n <input\n type=\"number\"\n min={1}\n max={max}\n value={quantity}\n onChange={(e) => {\n const val = parseInt(e.target.value) || 1\n onChange(Math.max(1, Math.min(max, val)))\n }}\n aria-label=\"Quantity\"\n style={{\n width: 48,\n height: 40,\n textAlign: 'center',\n border: 'none',\n borderLeft: '1px solid var(--sk-border)',\n borderRight: '1px solid var(--sk-border)',\n fontSize: '0.9375rem',\n fontWeight: 500,\n color: 'var(--sk-text-primary)',\n outline: 'none',\n MozAppearance: 'textfield',\n appearance: 'textfield' as any,\n }}\n />\n <button\n onClick={() => onChange(Math.min(max, quantity + 1))}\n disabled={quantity >= max}\n aria-label=\"Increase quantity\"\n style={{\n width: 40,\n height: 40,\n border: 'none',\n background: 'var(--sk-bg-elevated)',\n fontSize: '1.125rem',\n cursor: quantity >= max ? 'not-allowed' : 'pointer',\n opacity: quantity >= max ? 0.4 : 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--sk-text-primary)',\n }}\n >\n +\n </button>\n </div>\n </div>\n )\n}\n\n// ---------- TrustBadges ----------\n\ninterface TrustBadge {\n icon?: 'lock' | 'truck' | 'return' | 'shield'\n label: string\n sublabel?: string\n}\n\nconst DEFAULT_TRUST_BADGES: TrustBadge[] = [\n { icon: 'lock', label: 'Secure Checkout', sublabel: 'SSL encrypted' },\n { icon: 'truck', label: 'Fast Shipping', sublabel: 'Free over $50' },\n { icon: 'return', label: 'Easy Returns', sublabel: '30-day policy' },\n]\n\nfunction TrustBadges({ badges = DEFAULT_TRUST_BADGES }: { badges?: TrustBadge[] }) {\n return (\n <div\n style={{\n marginTop: '1.5rem',\n display: 'grid',\n gridTemplateColumns: `repeat(${Math.min(badges.length, 3)}, 1fr)`,\n gap: '0.75rem',\n }}\n >\n {badges.map((badge, idx) => {\n const Icon = badge.icon ? ICON_MAP[badge.icon] : IconShield\n return (\n <div\n key={idx}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n textAlign: 'center',\n padding: '0.75rem 0.5rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n background: 'var(--sk-bg-elevated)',\n }}\n >\n <span style={{ color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n {Icon && <Icon />}\n </span>\n <span\n style={{\n fontSize: '0.75rem',\n fontWeight: 600,\n color: 'var(--sk-text-primary)',\n lineHeight: 1.3,\n }}\n >\n {badge.label}\n </span>\n {badge.sublabel && (\n <span\n style={{\n fontSize: '0.6875rem',\n color: 'var(--sk-text-secondary)',\n lineHeight: 1.3,\n }}\n >\n {badge.sublabel}\n </span>\n )}\n </div>\n )\n })}\n </div>\n )\n}\n\n// ---------- ProductTabs ----------\n\ninterface ProductTabsProps {\n features?: string[]\n specifications?: Record<string, string>\n description?: string\n showFeatures: boolean\n showSpecifications: boolean\n showDescription: boolean\n}\n\nfunction ProductTabs({\n features,\n specifications,\n description,\n showFeatures,\n showSpecifications,\n showDescription,\n}: ProductTabsProps) {\n const tabs: Array<{ id: string; label: string }> = []\n if (showFeatures && features?.length) tabs.push({ id: 'features', label: 'Features' })\n if (showSpecifications && specifications && Object.keys(specifications).length)\n tabs.push({ id: 'specs', label: 'Specifications' })\n if (showDescription && description) tabs.push({ id: 'description', label: 'Description' })\n\n const [active, setActive] = useState(tabs[0]?.id || '')\n\n useEffect(() => {\n if (tabs.length && !tabs.find((t) => t.id === active)) {\n setActive(tabs[0].id)\n }\n }, [tabs.length])\n\n if (!tabs.length) return null\n\n return (\n <div style={{ marginTop: '2rem' }}>\n <div className=\"skc-tabs-list\" role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n className={`skc-tab-btn${active === tab.id ? ' skc-active' : ''}`}\n role=\"tab\"\n aria-selected={active === tab.id}\n aria-controls={`skc-tabpanel-${tab.id}`}\n onClick={() => setActive(tab.id)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n <div style={{ padding: '1.25rem 0', animation: 'skc-fadeIn 0.2s ease-out' }}>\n {active === 'features' && features && (\n <div id=\"skc-tabpanel-features\" role=\"tabpanel\">\n <ul\n style={{\n margin: 0,\n paddingLeft: '1.25rem',\n display: 'flex',\n flexDirection: 'column',\n gap: '0.5rem',\n }}\n >\n {features.map((f, i) => (\n <li\n key={i}\n style={{\n color: 'var(--sk-text-secondary)',\n fontSize: '0.9375rem',\n lineHeight: 1.6,\n }}\n >\n {f}\n </li>\n ))}\n </ul>\n </div>\n )}\n {active === 'specs' && specifications && (\n <div id=\"skc-tabpanel-specs\" role=\"tabpanel\">\n <dl\n style={{\n margin: 0,\n display: 'grid',\n gridTemplateColumns: 'minmax(120px, auto) 1fr',\n gap: '0.625rem 1.5rem',\n }}\n >\n {Object.entries(specifications).map(([key, value]) => (\n <React.Fragment key={key}>\n <dt\n style={{\n fontSize: '0.875rem',\n color: 'var(--sk-text-secondary)',\n fontWeight: 500,\n }}\n >\n {key}\n </dt>\n <dd\n style={{\n margin: 0,\n fontSize: '0.875rem',\n color: 'var(--sk-text-primary)',\n }}\n >\n {value}\n </dd>\n </React.Fragment>\n ))}\n </dl>\n </div>\n )}\n {active === 'description' && description && (\n <div\n id=\"skc-tabpanel-description\"\n role=\"tabpanel\"\n style={{\n color: 'var(--sk-text-secondary)',\n lineHeight: 1.7,\n fontSize: '0.9375rem',\n }}\n dangerouslySetInnerHTML={{ __html: description }}\n />\n )}\n </div>\n </div>\n )\n}\n\n// ---------- EventInfoBlock ----------\n\ninterface EventInfoBlockProps {\n product: CommerceOffering\n schedule?: CommerceSchedule\n}\n\nfunction EventInfoBlock({ product, schedule }: EventInfoBlockProps) {\n const spotsRemaining = schedule\n ? getSpotsRemaining(schedule.capacity, (schedule as any).current_registrations ?? (schedule.capacity != null ? (schedule.capacity - (schedule.spots_remaining ?? schedule.capacity)) : 0))\n : null\n const soldOut = schedule\n ? isEventSoldOut(schedule.capacity, (schedule as any).current_registrations ?? (schedule.capacity != null ? (schedule.capacity - (schedule.spots_remaining ?? schedule.capacity)) : 0))\n : false\n\n return (\n <div\n style={{\n marginTop: '1.25rem',\n padding: '1rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n background: 'var(--sk-bg-elevated)',\n display: 'flex',\n flexDirection: 'column',\n gap: '0.5rem',\n }}\n >\n {schedule && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>\n <IconCalendar />\n <span>{formatDate(schedule.starts_at)} at {formatTime(schedule.starts_at)}</span>\n </div>\n )}\n {product.location && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>\n <IconMapPin />\n <span>{product.location}</span>\n </div>\n )}\n {product.is_virtual && product.virtual_meeting_url && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, fontSize: '0.875rem', color: 'var(--sk-primary)' }}>\n <IconExternalLink />\n <span>Virtual Event</span>\n </div>\n )}\n {schedule?.capacity != null && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>\n <IconUsers />\n <span>\n {soldOut ? (\n <span style={{ color: 'var(--sk-error)', fontWeight: 600 }}>Sold Out</span>\n ) : schedule.spots_remaining != null && schedule.spots_remaining <= 10 ? (\n <span className=\"skc-pulse\" style={{ color: 'var(--sk-warning)', fontWeight: 600 }}>\n Only {schedule.spots_remaining} spot{schedule.spots_remaining !== 1 ? 's' : ''} left!\n </span>\n ) : (\n <span>{schedule.spots_remaining ?? schedule.capacity} spots available</span>\n )}\n </span>\n </div>\n )}\n </div>\n )\n}\n\n// ---------- CheckoutStepIndicator ----------\n\nconst STEP_ORDER: CheckoutState[] = ['customer-info', 'shipping', 'rates', 'payment']\n\nfunction CheckoutStepIndicator({ current, steps }: { current: CheckoutState; steps: CheckoutState[] }) {\n const currentIdx = steps.indexOf(current)\n\n return (\n <div className=\"skc-step-dots\">\n {steps.map((step, idx) => (\n <React.Fragment key={step}>\n {idx > 0 && (\n <div className={`skc-step-connector${idx <= currentIdx ? ' skc-done' : ''}`} />\n )}\n <div\n className={`skc-step-dot${\n idx === currentIdx ? ' skc-active' : idx < currentIdx ? ' skc-done' : ''\n }`}\n title={step.replace('-', ' ')}\n />\n </React.Fragment>\n ))}\n </div>\n )\n}\n\n// ---------- CustomerInfoStep ----------\n\ninterface CustomerInfoStepProps {\n customer: CheckoutCustomer\n onChange: (c: CheckoutCustomer) => void\n onNext: () => void\n onBack: () => void\n}\n\nfunction CustomerInfoStep({ customer, onChange, onNext, onBack }: CustomerInfoStepProps) {\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n onNext()\n }\n\n return (\n <form onSubmit={handleSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '0.875rem' }}>\n <h3 style={{ margin: 0, fontSize: '1.125rem', fontWeight: 600, color: 'var(--sk-text-primary)' }}>\n Contact Information\n </h3>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n Full Name *\n </label>\n <input\n className=\"skc-input\"\n type=\"text\"\n required\n value={customer.name}\n onChange={(e) => onChange({ ...customer, name: e.target.value })}\n placeholder=\"Jane Smith\"\n autoFocus\n />\n </div>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n Email Address *\n </label>\n <input\n className=\"skc-input\"\n type=\"email\"\n required\n value={customer.email}\n onChange={(e) => onChange({ ...customer, email: e.target.value })}\n placeholder=\"jane@example.com\"\n />\n </div>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n Phone Number\n </label>\n <input\n className=\"skc-input\"\n type=\"tel\"\n value={customer.phone || ''}\n onChange={(e) => onChange({ ...customer, phone: e.target.value })}\n placeholder=\"(555) 123-4567\"\n />\n </div>\n <div style={{ display: 'flex', gap: '0.75rem', marginTop: '0.5rem' }}>\n <button\n type=\"button\"\n onClick={onBack}\n style={{\n padding: '0.75rem 1.25rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n border: '1px solid var(--sk-border)',\n background: 'var(--sk-bg)',\n color: 'var(--sk-text-secondary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n Back\n </button>\n <button type=\"submit\" className=\"skc-btn-primary\" style={{ flex: 1 }}>\n Continue\n </button>\n </div>\n </form>\n )\n}\n\n// ---------- ShippingAddressStep ----------\n\ninterface ShippingAddressStepProps {\n address: ShippingAddress\n onChange: (a: ShippingAddress) => void\n onNext: () => void\n onBack: () => void\n loading: boolean\n}\n\nfunction ShippingAddressStep({ address, onChange, onNext, onBack, loading }: ShippingAddressStepProps) {\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n onNext()\n }\n\n const update = (field: keyof ShippingAddress, value: string) => {\n onChange({ ...address, [field]: value })\n }\n\n return (\n <form onSubmit={handleSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '0.875rem' }}>\n <h3 style={{ margin: 0, fontSize: '1.125rem', fontWeight: 600, color: 'var(--sk-text-primary)' }}>\n Shipping Address\n </h3>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n Street Address *\n </label>\n <input\n className=\"skc-input\"\n type=\"text\"\n required\n value={address.street1}\n onChange={(e) => update('street1', e.target.value)}\n placeholder=\"123 Main St\"\n autoFocus\n />\n </div>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n Apt / Suite\n </label>\n <input\n className=\"skc-input\"\n type=\"text\"\n value={address.street2 || ''}\n onChange={(e) => update('street2', e.target.value)}\n placeholder=\"Apt 4B\"\n />\n </div>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '0.75rem' }}>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n City *\n </label>\n <input\n className=\"skc-input\"\n type=\"text\"\n required\n value={address.city}\n onChange={(e) => update('city', e.target.value)}\n placeholder=\"New York\"\n />\n </div>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n State *\n </label>\n <input\n className=\"skc-input\"\n type=\"text\"\n required\n value={address.state}\n onChange={(e) => update('state', e.target.value)}\n placeholder=\"NY\"\n />\n </div>\n </div>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '0.75rem' }}>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n ZIP Code *\n </label>\n <input\n className=\"skc-input\"\n type=\"text\"\n required\n value={address.zip}\n onChange={(e) => update('zip', e.target.value)}\n placeholder=\"10001\"\n />\n </div>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n Country\n </label>\n <input\n className=\"skc-input\"\n type=\"text\"\n value={address.country || 'US'}\n onChange={(e) => update('country', e.target.value)}\n placeholder=\"US\"\n />\n </div>\n </div>\n <div style={{ display: 'flex', gap: '0.75rem', marginTop: '0.5rem' }}>\n <button\n type=\"button\"\n onClick={onBack}\n style={{\n padding: '0.75rem 1.25rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n border: '1px solid var(--sk-border)',\n background: 'var(--sk-bg)',\n color: 'var(--sk-text-secondary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n Back\n </button>\n <button type=\"submit\" className=\"skc-btn-primary\" style={{ flex: 1 }} disabled={loading}>\n {loading ? 'Getting rates...' : 'Continue to Shipping'}\n </button>\n </div>\n </form>\n )\n}\n\n// ---------- ShippingRatesStep ----------\n\ninterface ShippingRatesStepProps {\n rates: ShippingRate[]\n selected: ShippingRate | null\n onSelect: (rate: ShippingRate) => void\n onNext: () => void\n onBack: () => void\n loading: boolean\n currency: string\n}\n\nfunction ShippingRatesStep({ rates, selected, onSelect, onNext, onBack, loading, currency }: ShippingRatesStepProps) {\n if (loading) {\n return (\n <div style={{ textAlign: 'center', padding: '2rem 0' }}>\n <div\n style={{\n width: 32,\n height: 32,\n border: '3px solid var(--sk-border)',\n borderTopColor: 'var(--sk-primary)',\n borderRadius: '50%',\n animation: 'skc-spin 1s linear infinite',\n margin: '0 auto 1rem',\n }}\n />\n <p style={{ color: 'var(--sk-text-secondary)', fontSize: '0.875rem', margin: 0 }}>\n Calculating shipping rates...\n </p>\n </div>\n )\n }\n\n if (!rates.length) {\n return (\n <div style={{ textAlign: 'center', padding: '1.5rem 0' }}>\n <p style={{ color: 'var(--sk-text-secondary)', fontSize: '0.875rem', margin: '0 0 1rem' }}>\n No shipping rates available for this address. Please check your address and try again.\n </p>\n <button\n type=\"button\"\n onClick={onBack}\n style={{\n padding: '0.75rem 1.5rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n border: '1px solid var(--sk-border)',\n background: 'var(--sk-bg)',\n color: 'var(--sk-text-secondary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n Edit Address\n </button>\n </div>\n )\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.875rem' }}>\n <h3 style={{ margin: 0, fontSize: '1.125rem', fontWeight: 600, color: 'var(--sk-text-primary)' }}>\n Shipping Method\n </h3>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.5rem' }} role=\"radiogroup\" aria-label=\"Shipping options\">\n {rates.map((rate, idx) => {\n const isSelected = selected?.objectId === rate.objectId || (selected === null && idx === 0)\n return (\n <button\n key={rate.objectId || idx}\n role=\"radio\"\n aria-checked={isSelected}\n onClick={() => onSelect(rate)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0.875rem 1rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n border: isSelected\n ? '2px solid var(--sk-primary)'\n : '1px solid var(--sk-border)',\n background: isSelected ? 'rgba(var(--sk-primary-rgb), 0.03)' : 'var(--sk-bg)',\n cursor: 'pointer',\n textAlign: 'left',\n width: '100%',\n }}\n >\n <div>\n <div style={{ fontSize: '0.875rem', fontWeight: 600, color: 'var(--sk-text-primary)' }}>\n {rate.carrier} — {rate.service}\n </div>\n {rate.estimatedDays != null && (\n <div style={{ fontSize: '0.8125rem', color: 'var(--sk-text-secondary)', marginTop: 2 }}>\n {rate.estimatedDays === 1\n ? '1 business day'\n : `${rate.estimatedDays} business days`}\n </div>\n )}\n </div>\n <span style={{ fontSize: '0.9375rem', fontWeight: 600, color: 'var(--sk-text-primary)' }}>\n {formatPrice(parseFloat(rate.amount), rate.currency || currency)}\n </span>\n </button>\n )\n })}\n </div>\n <div style={{ display: 'flex', gap: '0.75rem', marginTop: '0.5rem' }}>\n <button\n type=\"button\"\n onClick={onBack}\n style={{\n padding: '0.75rem 1.25rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n border: '1px solid var(--sk-border)',\n background: 'var(--sk-bg)',\n color: 'var(--sk-text-secondary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n Back\n </button>\n <button type=\"button\" className=\"skc-btn-primary\" style={{ flex: 1 }} onClick={onNext}>\n Continue to Payment\n </button>\n </div>\n </div>\n )\n}\n\n// ---------- PaymentStep ----------\n\ninterface PaymentStepProps {\n processor: 'stripe' | 'square' | null\n config: ProcessorConfig | null\n product: CommerceOffering\n variant?: CommerceVariant\n quantity: number\n customer: CheckoutCustomer\n shippingRate: ShippingRate | null\n shippingAddress: ShippingAddress | null\n needsShipping: boolean\n onBack: () => void\n onSuccess: (result: CheckoutResult) => void\n onError: (error: string) => void\n onProcessing: (processing: boolean) => void\n successUrl?: string\n cancelUrl?: string\n}\n\nfunction PaymentStep({\n processor,\n config,\n product,\n variant,\n quantity,\n customer,\n shippingRate,\n shippingAddress,\n needsShipping,\n onBack,\n onSuccess,\n onError,\n onProcessing,\n successUrl,\n cancelUrl,\n}: PaymentStepProps) {\n const [cardElement, setCardElement] = useState<any>(null)\n const [stripeInstance, setStripeInstance] = useState<any>(null)\n const [stripeElements, setStripeElements] = useState<any>(null)\n const [cardReady, setCardReady] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [submitting, setSubmitting] = useState(false)\n const cardContainerRef = useRef<HTMLDivElement>(null)\n\n const currentPrice = variant?.price ?? product.price ?? 0\n const subtotal = currentPrice * quantity\n const shippingCost = shippingRate ? parseFloat(shippingRate.amount) : 0\n const total = subtotal + shippingCost\n\n // Mount Square card\n useEffect(() => {\n if (processor !== 'square' || !config?.squareAppId) return\n\n let destroyed = false\n let card: any = null\n\n loadSquareSDK(config.squareEnvironment || 'production')\n .then(async () => {\n if (destroyed) return\n const payments = (window as any).Square.payments(\n config.squareAppId,\n config.squareLocationId\n )\n card = await payments.card({\n style: {\n '.input-container': { borderRadius: '8px' },\n '.input-container.is-focus': { borderColor: '#2563eb' },\n '.input-container.is-error': { borderColor: '#dc2626' },\n },\n })\n if (destroyed) { card.destroy?.(); return }\n await card.attach('#skc-card-container')\n setCardElement(card)\n setCardReady(true)\n })\n .catch((err) => {\n console.error('[Commerce] Square card init failed:', err)\n setError('Failed to load payment form. Please refresh and try again.')\n })\n\n return () => {\n destroyed = true\n if (card) card.destroy?.().catch(() => {})\n setCardElement(null)\n setCardReady(false)\n }\n }, [processor, config?.squareAppId])\n\n // Mount Stripe Payment Element\n useEffect(() => {\n if (processor !== 'stripe' || !config?.stripePublishableKey) return\n\n let destroyed = false\n\n ;(async () => {\n try {\n await loadStripeSDK()\n if (destroyed) return\n\n // Create PaymentIntent to get clientSecret\n const checkoutOpts: CreateCheckoutOptions = {\n offeringId: product.id,\n variantId: variant?.id,\n quantity,\n customer,\n successUrl: successUrl || window.location.href,\n cancelUrl: cancelUrl || window.location.href,\n }\n if (needsShipping && shippingAddress) {\n checkoutOpts.shippingAddress = shippingAddress\n checkoutOpts.shippingCarrier = shippingRate?.carrier\n checkoutOpts.shippingService = shippingRate?.service\n checkoutOpts.shippingCost = shippingCost\n }\n\n const piResult = await createPaymentIntent(checkoutOpts)\n if (destroyed) return\n if (!piResult.success || !piResult.clientSecret) {\n setError(piResult.error || 'Failed to initialize payment. Please try again.')\n return\n }\n\n const stripe = (window as any).Stripe(config.stripePublishableKey)\n const elements = stripe.elements({ clientSecret: piResult.clientSecret })\n const paymentElement = elements.create('payment', {\n layout: 'tabs',\n })\n if (destroyed) return\n paymentElement.mount('#skc-card-container')\n paymentElement.on('ready', () => {\n if (!destroyed) setCardReady(true)\n })\n\n setStripeInstance(stripe)\n setStripeElements(elements)\n setCardElement(paymentElement)\n\n // Stash saleId/confirmation for success handling\n ;(cardContainerRef.current as any)?.__saleId && delete (cardContainerRef.current as any).__saleId\n if (cardContainerRef.current) {\n ;(cardContainerRef.current as any).__saleId = piResult.saleId\n ;(cardContainerRef.current as any).__confirmationNumber = piResult.confirmationNumber\n }\n } catch (err) {\n console.error('[Commerce] Stripe init failed:', err)\n if (!destroyed) setError('Failed to load payment form. Please refresh and try again.')\n }\n })()\n\n return () => {\n destroyed = true\n setCardElement(null)\n setStripeInstance(null)\n setStripeElements(null)\n setCardReady(false)\n }\n }, [processor, config?.stripePublishableKey])\n\n const handleSubmit = async () => {\n if (!cardReady || submitting) return\n setSubmitting(true)\n setError(null)\n onProcessing(true)\n\n try {\n if (processor === 'square' && cardElement) {\n const tokenResult = await cardElement.tokenize()\n if (tokenResult.status !== 'OK') {\n throw new Error(\n tokenResult.errors?.[0]?.message || 'Card verification failed. Please check your card details.'\n )\n }\n\n const checkoutOpts: CreateCheckoutOptions = {\n offeringId: product.id,\n variantId: variant?.id,\n quantity,\n customer,\n sourceId: tokenResult.token,\n successUrl: successUrl || window.location.href,\n cancelUrl: cancelUrl || window.location.href,\n }\n if (needsShipping && shippingAddress) {\n checkoutOpts.shippingAddress = shippingAddress\n checkoutOpts.shippingCarrier = shippingRate?.carrier\n checkoutOpts.shippingService = shippingRate?.service\n checkoutOpts.shippingCost = shippingCost\n }\n\n const result = await createCheckoutSession(checkoutOpts)\n\n if (result.success && !result.payment_url) {\n onSuccess(result)\n } else if (result.success && result.payment_url) {\n window.location.href = result.payment_url\n } else {\n throw new Error(result.error || 'Payment failed. Please try again.')\n }\n } else if (processor === 'stripe' && stripeInstance && stripeElements) {\n const { error: stripeError, paymentIntent } = await stripeInstance.confirmPayment({\n elements: stripeElements,\n confirmParams: {\n return_url: successUrl || window.location.href,\n },\n redirect: 'if_required',\n })\n\n if (stripeError) {\n throw new Error(stripeError.message || 'Payment failed. Please try again.')\n }\n\n if (paymentIntent && paymentIntent.status === 'succeeded') {\n const saleId = (cardContainerRef.current as any)?.__saleId\n const confirmationNumber = (cardContainerRef.current as any)?.__confirmationNumber\n onSuccess({\n success: true,\n sale_id: saleId,\n confirmation_number: confirmationNumber,\n })\n }\n } else {\n // Fallback: redirect checkout\n const checkoutOpts: CreateCheckoutOptions = {\n offeringId: product.id,\n variantId: variant?.id,\n quantity,\n customer,\n successUrl: successUrl || `${window.location.origin}/checkout/success`,\n cancelUrl: cancelUrl || window.location.href,\n }\n if (needsShipping && shippingAddress) {\n checkoutOpts.shippingAddress = shippingAddress\n checkoutOpts.shippingCarrier = shippingRate?.carrier\n checkoutOpts.shippingService = shippingRate?.service\n checkoutOpts.shippingCost = shippingCost\n }\n\n const result = await createCheckoutSession(checkoutOpts)\n if (result.success && result.checkout_url) {\n window.location.href = result.checkout_url\n } else {\n throw new Error(result.error || 'Checkout failed.')\n }\n }\n } catch (err: any) {\n const msg = err?.message || 'Payment failed. Please try again.'\n setError(msg)\n onError(msg)\n } finally {\n setSubmitting(false)\n onProcessing(false)\n }\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n <h3 style={{ margin: 0, fontSize: '1.125rem', fontWeight: 600, color: 'var(--sk-text-primary)' }}>\n Payment\n </h3>\n\n {/* Order Summary */}\n <div\n style={{\n padding: '1rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n background: 'var(--sk-bg-elevated)',\n display: 'flex',\n flexDirection: 'column',\n gap: '0.375rem',\n fontSize: '0.875rem',\n }}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between', color: 'var(--sk-text-secondary)' }}>\n <span>{product.name} {variant ? `(${(variant.options as Record<string, string>)?.Size || variant.name})` : ''} x {quantity}</span>\n <span>{formatPrice(subtotal, product.currency)}</span>\n </div>\n {shippingRate && (\n <div style={{ display: 'flex', justifyContent: 'space-between', color: 'var(--sk-text-secondary)' }}>\n <span>Shipping ({shippingRate.carrier} {shippingRate.service})</span>\n <span>{formatPrice(shippingCost, shippingRate.currency || product.currency)}</span>\n </div>\n )}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n fontWeight: 700,\n color: 'var(--sk-text-primary)',\n fontSize: '1rem',\n paddingTop: '0.5rem',\n borderTop: '1px solid var(--sk-border)',\n marginTop: '0.25rem',\n }}\n >\n <span>Total</span>\n <span>{formatPrice(total, product.currency)}</span>\n </div>\n </div>\n\n {/* Card container */}\n <div>\n <label\n style={{\n display: 'block',\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: 'var(--sk-text-secondary)',\n marginBottom: 6,\n }}\n >\n Card Details\n </label>\n <div\n id=\"skc-card-container\"\n ref={cardContainerRef}\n style={{\n minHeight: processor === 'stripe' ? 80 : 44,\n border: '1px solid var(--sk-border)',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n padding: processor === 'stripe' ? '0.75rem' : '0.5rem 0.75rem',\n background: 'var(--sk-bg)',\n }}\n />\n {!cardReady && !error && (\n <p style={{ fontSize: '0.75rem', color: 'var(--sk-text-secondary)', marginTop: 4, marginBottom: 0 }}>\n Loading secure payment form...\n </p>\n )}\n </div>\n\n {error && (\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: 8,\n padding: '0.75rem',\n background: 'rgba(var(--sk-error-rgb, 239,68,68), 0.06)',\n border: '1px solid rgba(var(--sk-error-rgb, 239,68,68), 0.2)',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n color: 'var(--sk-error)',\n fontSize: '0.875rem',\n }}\n >\n <IconAlert />\n <span>{error}</span>\n </div>\n )}\n\n <div style={{ display: 'flex', gap: '0.75rem' }}>\n <button\n type=\"button\"\n onClick={onBack}\n disabled={submitting}\n style={{\n padding: '0.75rem 1.25rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n border: '1px solid var(--sk-border)',\n background: 'var(--sk-bg)',\n color: 'var(--sk-text-secondary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: submitting ? 'not-allowed' : 'pointer',\n opacity: submitting ? 0.5 : 1,\n }}\n >\n Back\n </button>\n <button\n type=\"button\"\n className=\"skc-btn-primary\"\n style={{ flex: 1 }}\n onClick={handleSubmit}\n disabled={!cardReady || submitting}\n >\n {submitting ? (\n <>\n <span\n style={{\n width: 16,\n height: 16,\n border: '2px solid rgba(255,255,255,0.3)',\n borderTopColor: 'white',\n borderRadius: '50%',\n animation: 'skc-spin 0.8s linear infinite',\n display: 'inline-block',\n }}\n />\n Processing...\n </>\n ) : (\n <>\n <IconLock />\n Pay {formatPrice(total, product.currency)}\n </>\n )}\n </button>\n </div>\n\n {/* Powered by badge */}\n {processor && (\n <p\n style={{\n textAlign: 'center',\n fontSize: '0.6875rem',\n color: 'var(--sk-text-secondary)',\n margin: '0.25rem 0 0',\n }}\n >\n Powered by {processor === 'stripe' ? 'Stripe' : 'Square'}\n </p>\n )}\n </div>\n )\n}\n\n// ---------- SuccessStep ----------\n\ninterface SuccessStepProps {\n result: CheckoutResult\n product: CommerceOffering\n onClose: () => void\n}\n\nfunction SuccessStep({ result, product, onClose }: SuccessStepProps) {\n return (\n <div\n style={{\n textAlign: 'center',\n padding: '2rem 1rem',\n animation: 'skc-fadeIn 0.3s ease-out',\n }}\n >\n <div\n style={{\n width: 64,\n height: 64,\n borderRadius: '50%',\n background: 'rgba(5,150,105,0.1)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '0 auto 1rem',\n }}\n >\n <svg\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"var(--sk-success)\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline\n points=\"20 6 9 17 4 12\"\n style={{ strokeDasharray: 24, strokeDashoffset: 0, animation: 'skc-checkmark 0.5s ease-out' }}\n />\n </svg>\n </div>\n <h3\n style={{\n margin: '0 0 0.5rem',\n fontSize: '1.375rem',\n fontWeight: 700,\n color: 'var(--sk-success)',\n }}\n >\n Order Confirmed!\n </h3>\n <p style={{ color: 'var(--sk-text-secondary)', margin: '0 0 0.5rem', fontSize: '0.9375rem' }}>\n Thank you for your purchase of {product.name}.\n </p>\n {result.confirmation_number && (\n <p style={{ color: 'var(--sk-text-secondary)', margin: '0 0 1rem', fontSize: '0.8125rem' }}>\n Confirmation: <strong style={{ color: 'var(--sk-text-primary)' }}>{result.confirmation_number}</strong>\n </p>\n )}\n <p style={{ color: 'var(--sk-text-secondary)', margin: '0 0 1.5rem', fontSize: '0.875rem' }}>\n A confirmation email has been sent to your inbox.\n </p>\n <button className=\"skc-btn-primary\" onClick={onClose} style={{ maxWidth: 240 }}>\n Done\n </button>\n </div>\n )\n}\n\n// ============================================\n// ProductDetail — Main Component\n// ============================================\n\nexport interface ProductDetailProps {\n product?: CommerceOffering\n slug?: string\n successUrl?: string\n cancelUrl?: string\n showGallery?: boolean\n showVariants?: boolean\n showQuantity?: boolean\n showSizeChart?: boolean\n showFeatures?: boolean\n showSpecifications?: boolean\n showDescription?: boolean\n showTrustBadges?: boolean\n showInventory?: boolean\n trustBadges?: TrustBadge[]\n onAddToCart?: (product: CommerceOffering, variant?: CommerceVariant, quantity?: number) => void\n onCheckoutSuccess?: (result: CheckoutResult) => void\n onCheckoutError?: (error: string) => void\n className?: string\n style?: React.CSSProperties\n layout?: 'horizontal' | 'stacked'\n}\n\nexport function ProductDetail({\n product: propProduct,\n slug,\n successUrl,\n cancelUrl,\n showGallery = true,\n showVariants = true,\n showQuantity = true,\n showSizeChart = true,\n showFeatures = true,\n showSpecifications = true,\n showDescription = true,\n showTrustBadges = true,\n showInventory = true,\n trustBadges,\n onAddToCart,\n onCheckoutSuccess,\n onCheckoutError,\n className = '',\n style: customStyle,\n layout = 'horizontal',\n}: ProductDetailProps) {\n // Core state\n const [product, setProduct] = useState<CommerceOffering | null>(propProduct || null)\n const [loading, setLoading] = useState(!propProduct && !!slug)\n const [selectedVariant, setSelectedVariant] = useState<CommerceVariant | undefined>()\n const [quantity, setQuantity] = useState(1)\n const [selectedImage, setSelectedImage] = useState(0)\n\n // Checkout state machine\n const [checkoutState, setCheckoutState] = useState<CheckoutState>('browsing')\n const [customer, setCustomer] = useState<CheckoutCustomer>({ name: '', email: '', phone: '' })\n const [shippingAddress, setShippingAddress] = useState<ShippingAddress>({\n street1: '',\n city: '',\n state: '',\n zip: '',\n country: 'US',\n })\n const [shippingRates, setShippingRates] = useState<ShippingRate[]>([])\n const [selectedShippingRate, setSelectedShippingRate] = useState<ShippingRate | null>(null)\n const [ratesLoading, setRatesLoading] = useState(false)\n const [processorConfig, setProcessorConfig] = useState<ProcessorConfig | null>(null)\n const [checkoutResult, setCheckoutResult] = useState<CheckoutResult | null>(null)\n const [checkoutError, setCheckoutError] = useState<string | null>(null)\n\n // Sticky bar\n const [showStickyBar, setShowStickyBar] = useState(false)\n const buyButtonRef = useRef<HTMLButtonElement>(null)\n\n const analytics = useAnalyticsOptional()\n\n // ---------- Product Loading ----------\n\n useEffect(() => {\n if (propProduct) {\n setProduct(propProduct)\n const dv = propProduct.variants?.find((v) => v.is_default) || propProduct.variants?.[0]\n setSelectedVariant(dv)\n return\n }\n if (!slug) return\n\n let cancelled = false\n setLoading(true)\n\n fetchProductBySlug(slug).then((data) => {\n if (cancelled) return\n setProduct(data)\n if (data?.variants?.length) {\n setSelectedVariant(data.variants.find((v) => v.is_default) || data.variants[0])\n }\n setLoading(false)\n }).catch(() => {\n if (!cancelled) setLoading(false)\n })\n\n return () => { cancelled = true }\n }, [propProduct, slug])\n\n // ---------- Analytics: product view ----------\n\n useEffect(() => {\n if (!product || !analytics) return\n analytics.trackEvent({\n name: 'product_view',\n properties: {\n offering_id: product.id,\n name: product.name,\n price: product.price,\n type: product.type,\n category: product.category?.name,\n },\n })\n }, [product?.id])\n\n // ---------- Processor Config ----------\n\n useEffect(() => {\n if (!product) return\n fetchProcessorConfig().then((c) => {\n if (c) setProcessorConfig(c)\n })\n }, [product?.id])\n\n // ---------- Sticky Buy Bar (mobile) ----------\n\n useEffect(() => {\n if (!buyButtonRef.current) return\n const observer = new IntersectionObserver(\n ([entry]) => setShowStickyBar(!entry.isIntersecting),\n { threshold: 0 }\n )\n observer.observe(buyButtonRef.current)\n return () => observer.disconnect()\n }, [product?.id, checkoutState])\n\n // ---------- Escape key to close checkout ----------\n\n useEffect(() => {\n if (checkoutState === 'browsing') return\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setCheckoutState('browsing')\n }\n document.addEventListener('keydown', handleKey)\n return () => document.removeEventListener('keydown', handleKey)\n }, [checkoutState])\n\n // ---------- Body scroll lock during checkout ----------\n\n useEffect(() => {\n if (checkoutState !== 'browsing' && checkoutState !== 'success') {\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = ''\n }\n return () => { document.body.style.overflow = '' }\n }, [checkoutState])\n\n // ---------- Derived State ----------\n\n const allImages = useMemo(() => {\n if (!product) return []\n return [\n product.featured_image_url,\n ...(product.gallery_images || []),\n ...(product.variants?.map((v) => v.image_url).filter(Boolean) || []),\n ].filter(Boolean) as string[]\n }, [product])\n\n // Build image ID array matching allImages order (for model info lookup)\n const allImageIds = useMemo(() => {\n if (!product) return []\n const ids: (string | undefined)[] = [\n product.featured_image_id,\n ...(product.gallery_image_ids || []),\n ...(product.variants?.map((v) => v.id) || []), // variant images don't have separate IDs for model info\n ]\n // Only keep IDs for images that were included (filter(Boolean) on URLs)\n const urls = [\n product.featured_image_url,\n ...(product.gallery_images || []),\n ...(product.variants?.map((v) => v.image_url).filter(Boolean) || []),\n ]\n return urls.map((url, i) => url ? ids[i] : undefined).filter((_id, i) => urls[i]) as (string | undefined)[]\n }, [product])\n\n // --- Derived values (must be before any early return to keep hook count stable) ---\n\n const currentPrice = product ? (selectedVariant?.price ?? product.price ?? 0) : 0\n const compareAtPrice = product?.compare_at_price\n const hasDiscount = compareAtPrice != null && compareAtPrice > currentPrice\n const discountPercent = hasDiscount ? Math.round(((compareAtPrice! - currentPrice) / compareAtPrice!) * 100) : 0\n\n const inventoryCount = selectedVariant?.inventory_count ?? product?.inventory_count\n const isOutOfStock = !!product?.track_inventory && inventoryCount != null && inventoryCount <= 0\n const isLowStock = !!product?.track_inventory && inventoryCount != null && inventoryCount > 0 && inventoryCount <= 5\n const needsVariantSelection = product ? (product.is_clothing || (product.variants?.length ?? 0) > 1) && !selectedVariant : false\n const hasExternalUrl = !!product?.external_url\n const isEvent = product?.type === 'event' || product?.type === 'class'\n const isService = product?.type === 'service'\n const isFree = !currentPrice || currentPrice === 0\n const needsShipping = !!processorConfig?.shipping_enabled && product?.type === 'product'\n const schedule = product?.schedules?.[0] || product?.next_schedule\n\n const checkoutSteps = useMemo<CheckoutState[]>(() => {\n const steps: CheckoutState[] = ['customer-info']\n if (needsShipping) steps.push('shipping', 'rates')\n if (!isFree) steps.push('payment')\n return steps\n }, [needsShipping, isFree])\n\n const ctaLabel = useMemo(() => {\n if (isOutOfStock) return 'Out of Stock'\n if (needsVariantSelection) return product?.is_clothing ? 'Select Size' : 'Select Option'\n if (hasExternalUrl) return product?.type === 'event' ? 'Get Tickets' : 'Learn More'\n if (isEvent) return isFree ? 'Register Free' : 'Get Tickets'\n if (isService) return 'Book Now'\n return isFree ? 'Get It Free' : 'Buy Now'\n }, [isOutOfStock, needsVariantSelection, hasExternalUrl, isEvent, isService, isFree, product?.is_clothing, product?.type])\n\n // --- Early returns (all hooks called above) ---\n\n if (!product) {\n if (loading) {\n return (\n <div className={`skc-detail ${className}`} style={customStyle}>\n <style>{STYLE_BLOCK}</style>\n <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', minHeight: 400 }}>\n <div\n style={{\n width: 48,\n height: 48,\n border: '3px solid var(--sk-border)',\n borderTopColor: 'var(--sk-primary)',\n borderRadius: '50%',\n animation: 'skc-spin 1s linear infinite',\n }}\n />\n </div>\n </div>\n )\n }\n return (\n <div className={`skc-detail ${className}`} style={customStyle}>\n <style>{STYLE_BLOCK}</style>\n <div style={{ textAlign: 'center', padding: '4rem 2rem', color: 'var(--sk-text-secondary)' }}>\n <h2 style={{ margin: 0, fontSize: '1.5rem', color: 'var(--sk-text-primary)' }}>Product Not Found</h2>\n <p style={{ marginTop: '0.5rem' }}>The product you are looking for does not exist or has been removed.</p>\n </div>\n </div>\n )\n }\n\n // ---------- Handlers ----------\n\n const handleVariantChange = (variant: CommerceVariant) => {\n setSelectedVariant(variant)\n if (variant.image_url) {\n const idx = allImages.indexOf(variant.image_url)\n if (idx >= 0) setSelectedImage(idx)\n }\n }\n\n const handleAddToCart = () => {\n analytics?.trackEvent({\n name: 'add_to_cart',\n properties: {\n offering_id: product.id,\n variant_id: selectedVariant?.id,\n quantity,\n price: currentPrice,\n name: product.name,\n },\n })\n onAddToCart?.(product, selectedVariant, quantity)\n }\n\n const handleBuyNow = () => {\n if (hasExternalUrl) {\n window.open(product.external_url!, '_blank', 'noopener')\n return\n }\n\n analytics?.trackEvent({\n name: 'begin_checkout',\n properties: {\n offering_id: product.id,\n variant_id: selectedVariant?.id,\n quantity,\n price: currentPrice,\n name: product.name,\n },\n })\n\n setCheckoutError(null)\n setCheckoutState('customer-info')\n }\n\n const handleCheckoutBack = () => {\n const currentIdx = checkoutSteps.indexOf(checkoutState)\n if (currentIdx <= 0) {\n setCheckoutState('browsing')\n } else {\n setCheckoutState(checkoutSteps[currentIdx - 1])\n }\n }\n\n const handleCustomerNext = async () => {\n if (isFree && isEvent && schedule) {\n // Free event registration — skip straight to registration\n setCheckoutState('processing')\n try {\n const result = await registerForEvent(product.id, schedule.id, customer)\n if (result.success) {\n setCheckoutResult(result)\n setCheckoutState('success')\n onCheckoutSuccess?.(result)\n } else {\n setCheckoutError(result.error || 'Registration failed')\n setCheckoutState('customer-info')\n }\n } catch (err: any) {\n setCheckoutError(err?.message || 'Registration failed')\n setCheckoutState('customer-info')\n }\n return\n }\n\n if (needsShipping) {\n setCheckoutState('shipping')\n } else if (!isFree) {\n setCheckoutState('payment')\n } else {\n // Free non-event — attempt direct checkout\n setCheckoutState('processing')\n try {\n const result = await createCheckoutSession({\n offeringId: product.id,\n variantId: selectedVariant?.id,\n quantity,\n customer,\n successUrl: successUrl || window.location.href,\n cancelUrl: cancelUrl || window.location.href,\n })\n if (result.success) {\n setCheckoutResult(result)\n setCheckoutState('success')\n onCheckoutSuccess?.(result)\n } else {\n setCheckoutError(result.error || 'Checkout failed')\n setCheckoutState('customer-info')\n }\n } catch (err: any) {\n setCheckoutError(err?.message || 'Checkout failed')\n setCheckoutState('customer-info')\n }\n }\n }\n\n const handleShippingNext = async () => {\n setRatesLoading(true)\n setCheckoutState('rates')\n try {\n const rates = await fetchShippingRates(shippingAddress, [\n { offering_id: product.id, quantity },\n ])\n setShippingRates(rates)\n if (rates.length) setSelectedShippingRate(rates[0])\n } catch {\n setShippingRates([])\n } finally {\n setRatesLoading(false)\n }\n }\n\n const handleRatesNext = () => {\n if (!isFree) {\n setCheckoutState('payment')\n }\n }\n\n const handlePaymentSuccess = (result: CheckoutResult) => {\n setCheckoutResult(result)\n setCheckoutState('success')\n analytics?.trackEvent({\n name: 'purchase',\n properties: {\n offering_id: product.id,\n variant_id: selectedVariant?.id,\n quantity,\n price: currentPrice,\n name: product.name,\n sale_id: result.sale_id,\n },\n })\n onCheckoutSuccess?.(result)\n }\n\n const handlePaymentError = (error: string) => {\n setCheckoutError(error)\n onCheckoutError?.(error)\n }\n\n const handleCloseCheckout = () => {\n setCheckoutState('browsing')\n if (checkoutResult) {\n // Reset form after successful purchase\n setCustomer({ name: '', email: '', phone: '' })\n setShippingAddress({ street1: '', city: '', state: '', zip: '', country: 'US' })\n setShippingRates([])\n setSelectedShippingRate(null)\n setCheckoutResult(null)\n }\n }\n\n // ---------- Render ----------\n\n return (\n <div className={`skc-detail ${className}`} style={customStyle}>\n <style>{STYLE_BLOCK}</style>\n\n <div className={`skc-detail-layout${layout === 'stacked' ? ' skc-stacked' : ''}`}>\n {/* Left: Gallery */}\n {showGallery && allImages.length > 0 && (\n <ProductGallery\n images={allImages}\n productName={product.name}\n selectedIndex={selectedImage}\n onSelect={setSelectedImage}\n imageIds={allImageIds}\n imageModelInfo={product.metadata?.image_model_info}\n />\n )}\n\n {/* Right: Info */}\n <div>\n {/* Category badge */}\n {product.category && (\n <div\n style={{\n fontSize: '0.75rem',\n fontWeight: 600,\n color: 'var(--sk-primary)',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n marginBottom: '0.375rem',\n }}\n >\n {product.category.name}\n </div>\n )}\n\n {/* Title */}\n <h1\n style={{\n margin: 0,\n fontSize: '1.875rem',\n fontWeight: 700,\n color: 'var(--sk-text-primary)',\n lineHeight: 1.2,\n }}\n >\n {product.name}\n </h1>\n\n {/* Short description */}\n {product.short_description && (\n <p\n style={{\n marginTop: '0.625rem',\n marginBottom: 0,\n fontSize: '1rem',\n color: 'var(--sk-text-secondary)',\n lineHeight: 1.6,\n }}\n >\n {product.short_description}\n </p>\n )}\n\n {/* Price */}\n {product.price_is_public && currentPrice != null && (\n <div\n style={{\n marginTop: '1rem',\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n flexWrap: 'wrap',\n }}\n >\n <span\n style={{\n fontSize: '1.75rem',\n fontWeight: 700,\n color: hasDiscount ? 'var(--sk-error)' : 'var(--sk-text-primary)',\n }}\n >\n {formatPrice(currentPrice, product.currency)}\n </span>\n {hasDiscount && (\n <>\n <span\n style={{\n fontSize: '1.125rem',\n color: 'var(--sk-text-secondary)',\n textDecoration: 'line-through',\n }}\n >\n {formatPrice(compareAtPrice!, product.currency)}\n </span>\n <span\n style={{\n fontSize: '0.75rem',\n fontWeight: 700,\n color: 'var(--sk-bg)',\n background: 'var(--sk-error)',\n padding: '2px 8px',\n borderRadius: 4,\n }}\n >\n -{discountPercent}%\n </span>\n </>\n )}\n {product.billing_period && (\n <span style={{ fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>\n / {product.billing_period}\n </span>\n )}\n </div>\n )}\n\n {/* Stock / Urgency */}\n {product.track_inventory && (\n <div style={{ marginTop: '0.75rem', display: 'flex', alignItems: 'center', gap: 6 }}>\n {isOutOfStock ? (\n <span\n style={{\n fontSize: '0.8125rem',\n fontWeight: 600,\n color: 'var(--sk-error)',\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n }}\n >\n <IconAlert /> Out of Stock\n </span>\n ) : isLowStock ? (\n <span\n className=\"skc-pulse\"\n style={{\n fontSize: '0.8125rem',\n fontWeight: 600,\n color: 'var(--sk-warning)',\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n }}\n >\n <IconAlert /> Only {inventoryCount} left!\n </span>\n ) : (\n <span\n style={{\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: 'var(--sk-success)',\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n }}\n >\n <IconCheck /> In Stock\n </span>\n )}\n </div>\n )}\n\n {/* Event info */}\n {isEvent && schedule && <EventInfoBlock product={product} schedule={schedule} />}\n\n {/* Variants */}\n {showVariants && product.variants && (product.variants.length > 1 || product.is_clothing) && (\n <VariantSelector\n variants={product.variants}\n selected={selectedVariant}\n isClothing={!!product.is_clothing}\n showInventory={showInventory}\n onSelect={handleVariantChange}\n />\n )}\n\n {/* Sizing notes */}\n {product.metadata?.sizing_notes && (\n <div\n style={{\n marginTop: '0.5rem',\n fontSize: '0.8125rem',\n color: 'var(--sk-text-secondary)',\n fontStyle: 'italic',\n }}\n >\n {product.metadata.sizing_notes}\n </div>\n )}\n\n {/* Fit note warning */}\n {product.size_chart?.fit_note && (\n <div\n style={{\n marginTop: '0.75rem',\n padding: '0.625rem 0.875rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n backgroundColor: 'color-mix(in srgb, var(--sk-warning) 10%, transparent)',\n border: '1px solid color-mix(in srgb, var(--sk-warning) 25%, transparent)',\n display: 'flex',\n alignItems: 'flex-start',\n gap: '0.5rem',\n fontSize: '0.8125rem',\n color: 'var(--sk-warning)',\n fontWeight: 500,\n lineHeight: 1.4,\n }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ flexShrink: 0, marginTop: 1 }}>\n <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"/>\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/>\n </svg>\n {product.size_chart.fit_note}\n </div>\n )}\n\n {/* Product notices */}\n {product.metadata?.notices?.map((notice, idx) => (\n <div\n key={idx}\n style={{\n marginTop: '0.75rem',\n padding: '0.625rem 0.875rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n backgroundColor: 'color-mix(in srgb, var(--sk-warning) 10%, transparent)',\n border: '1px solid color-mix(in srgb, var(--sk-warning) 25%, transparent)',\n display: 'flex',\n alignItems: 'flex-start',\n gap: '0.5rem',\n fontSize: '0.8125rem',\n color: 'var(--sk-warning)',\n fontWeight: 500,\n lineHeight: 1.4,\n }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ flexShrink: 0, marginTop: 1 }}>\n <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"/>\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/>\n </svg>\n {notice}\n </div>\n ))}\n\n {/* Size chart */}\n {showSizeChart && product.is_clothing && product.size_chart && (\n <div style={{ marginTop: '0.625rem' }}>\n <SizeChart\n chart={product.size_chart}\n selectedSize={(selectedVariant?.options as Record<string, string>)?.Size || selectedVariant?.name}\n />\n </div>\n )}\n\n {/* Quantity */}\n {showQuantity && !isOutOfStock && !isEvent && !isService && (\n <QuantitySelector\n quantity={quantity}\n max={product.track_inventory && inventoryCount != null ? inventoryCount : 99}\n onChange={setQuantity}\n />\n )}\n\n {/* Action Buttons */}\n <div style={{ marginTop: '1.5rem', display: 'flex', flexDirection: 'column', gap: '0.625rem' }}>\n <button\n ref={buyButtonRef}\n className=\"skc-btn-primary\"\n onClick={handleBuyNow}\n disabled={isOutOfStock || needsVariantSelection}\n aria-label={ctaLabel}\n >\n {hasExternalUrl && <IconExternalLink />}\n {ctaLabel}\n </button>\n {onAddToCart && !isEvent && !isService && !hasExternalUrl && (\n <button\n className=\"skc-btn-secondary\"\n onClick={handleAddToCart}\n disabled={isOutOfStock || needsVariantSelection}\n >\n Add to Cart\n </button>\n )}\n </div>\n\n {/* Checkout error (inline) */}\n {checkoutError && checkoutState === 'browsing' && (\n <div\n style={{\n marginTop: '0.75rem',\n padding: '0.75rem',\n background: 'rgba(var(--sk-error-rgb, 239,68,68), 0.06)',\n border: '1px solid rgba(var(--sk-error-rgb, 239,68,68), 0.2)',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n color: 'var(--sk-error)',\n fontSize: '0.875rem',\n display: 'flex',\n alignItems: 'flex-start',\n gap: 8,\n }}\n >\n <IconAlert />\n <span>{checkoutError}</span>\n </div>\n )}\n\n {/* Trust badges */}\n {showTrustBadges && <TrustBadges badges={trustBadges} />}\n\n {/* Care instructions */}\n {product.metadata?.care_instructions && (\n <div\n style={{\n marginTop: '1rem',\n padding: '0.75rem 1rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n backgroundColor: 'color-mix(in srgb, var(--sk-primary) 6%, transparent)',\n border: '1px solid color-mix(in srgb, var(--sk-primary) 18%, transparent)',\n display: 'flex',\n alignItems: 'flex-start',\n gap: '0.625rem',\n fontSize: '0.8125rem',\n color: 'var(--sk-text-secondary)',\n lineHeight: 1.5,\n }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--sk-primary)\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ flexShrink: 0, marginTop: 2 }}>\n <path d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z\"/>\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"/><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"/>\n </svg>\n <div>\n <div style={{ fontWeight: 600, color: 'var(--sk-text-primary)', marginBottom: 2 }}>Care Instructions</div>\n {product.metadata.care_instructions}\n </div>\n </div>\n )}\n\n {/* Product tabs */}\n <ProductTabs\n features={product.features}\n specifications={product.specifications}\n description={product.long_description}\n showFeatures={showFeatures}\n showSpecifications={showSpecifications}\n showDescription={showDescription}\n />\n </div>\n </div>\n\n {/* Mobile sticky buy bar */}\n {showStickyBar && checkoutState === 'browsing' && !isOutOfStock && !needsVariantSelection && (\n <div className=\"skc-sticky-bar\">\n <div>\n <div style={{ fontWeight: 600, fontSize: '0.875rem', color: 'var(--sk-text-primary)', lineHeight: 1.2 }}>\n {product.name}\n </div>\n {product.price_is_public && currentPrice != null && (\n <div style={{ fontWeight: 700, fontSize: '1rem', color: hasDiscount ? 'var(--sk-error)' : 'var(--sk-text-primary)' }}>\n {formatPrice(currentPrice, product.currency)}\n </div>\n )}\n </div>\n <button\n className=\"skc-btn-primary\"\n onClick={handleBuyNow}\n style={{ width: 'auto', padding: '0.625rem 1.5rem', fontSize: '0.875rem' }}\n >\n {ctaLabel}\n </button>\n </div>\n )}\n\n {/* Checkout Overlay */}\n {checkoutState !== 'browsing' && (\n <div\n className=\"skc-checkout-overlay\"\n onClick={(e) => {\n if (e.target === e.currentTarget && checkoutState !== 'processing') {\n handleCloseCheckout()\n }\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Checkout\"\n >\n <div\n className=\"skc-checkout-panel\"\n onClick={(e) => e.stopPropagation()}\n >\n {/* Close button */}\n {checkoutState !== 'processing' && (\n <button\n onClick={handleCloseCheckout}\n aria-label=\"Close checkout\"\n style={{\n position: 'absolute',\n top: 12,\n right: 12,\n width: 32,\n height: 32,\n borderRadius: '50%',\n border: 'none',\n background: 'var(--sk-bg-elevated)',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10,\n color: 'var(--sk-text-secondary)',\n }}\n >\n <IconX />\n </button>\n )}\n\n <div style={{ padding: '1.5rem' }}>\n {/* Step indicator */}\n {checkoutState !== 'success' && checkoutState !== 'processing' && (\n <CheckoutStepIndicator current={checkoutState} steps={checkoutSteps} />\n )}\n\n {/* Processing state */}\n {checkoutState === 'processing' && (\n <div style={{ textAlign: 'center', padding: '3rem 0' }}>\n <div\n style={{\n width: 48,\n height: 48,\n border: '3px solid var(--sk-border)',\n borderTopColor: 'var(--sk-primary)',\n borderRadius: '50%',\n animation: 'skc-spin 0.8s linear infinite',\n margin: '0 auto 1.5rem',\n }}\n />\n <p style={{ color: 'var(--sk-text-secondary)', fontSize: '0.9375rem', margin: 0 }}>\n Processing your order...\n </p>\n </div>\n )}\n\n {/* Success */}\n {checkoutState === 'success' && checkoutResult && (\n <SuccessStep result={checkoutResult} product={product} onClose={handleCloseCheckout} />\n )}\n\n {/* Customer Info */}\n {checkoutState === 'customer-info' && (\n <CustomerInfoStep\n customer={customer}\n onChange={setCustomer}\n onNext={handleCustomerNext}\n onBack={handleCloseCheckout}\n />\n )}\n\n {/* Shipping Address */}\n {checkoutState === 'shipping' && (\n <ShippingAddressStep\n address={shippingAddress}\n onChange={setShippingAddress}\n onNext={handleShippingNext}\n onBack={handleCheckoutBack}\n loading={ratesLoading}\n />\n )}\n\n {/* Shipping Rates */}\n {checkoutState === 'rates' && (\n <ShippingRatesStep\n rates={shippingRates}\n selected={selectedShippingRate}\n onSelect={setSelectedShippingRate}\n onNext={handleRatesNext}\n onBack={handleCheckoutBack}\n loading={ratesLoading}\n currency={product.currency}\n />\n )}\n\n {/* Payment */}\n {checkoutState === 'payment' && (\n <PaymentStep\n processor={processorConfig?.processor || null}\n config={processorConfig}\n product={product}\n variant={selectedVariant}\n quantity={quantity}\n customer={customer}\n shippingRate={selectedShippingRate}\n shippingAddress={needsShipping ? shippingAddress : null}\n needsShipping={needsShipping}\n onBack={handleCheckoutBack}\n onSuccess={handlePaymentSuccess}\n onError={handlePaymentError}\n onProcessing={(p) => { if (p) setCheckoutState('processing') }}\n successUrl={successUrl}\n cancelUrl={cancelUrl}\n />\n )}\n\n {/* Inline error display */}\n {checkoutError && checkoutState !== 'payment' && checkoutState !== 'processing' && checkoutState !== 'success' && (\n <div\n style={{\n marginTop: '0.75rem',\n padding: '0.75rem',\n background: 'rgba(var(--sk-error-rgb, 239,68,68), 0.06)',\n border: '1px solid rgba(var(--sk-error-rgb, 239,68,68), 0.2)',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n color: 'var(--sk-error)',\n fontSize: '0.875rem',\n display: 'flex',\n alignItems: 'flex-start',\n gap: 8,\n }}\n >\n <IconAlert />\n <span>{checkoutError}</span>\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport default ProductDetail\n","/**\n * @sonordev/site-kit/commerce - ProductGrid\n * \n * Grid layout for displaying multiple products with filtering and sorting.\n * Ideal for shop pages, category pages, and product listings.\n */\n\n'use client'\n\nimport React, { useState, useEffect, useMemo } from 'react'\nimport type { CommerceOffering, CommerceCategory } from './types'\nimport { OfferingCard } from './OfferingCard'\nimport { fetchProductsPublic } from './api'\n\nexport interface ProductGridProps {\n /** Pre-loaded products (for SSR) */\n products?: CommerceOffering[]\n /** Limit number of products */\n limit?: number\n /** Category to filter by */\n category?: string\n /** Show category filter */\n showCategoryFilter?: boolean\n /** Show sort dropdown */\n showSort?: boolean\n /** Show search input */\n showSearch?: boolean\n /** Number of columns (responsive) */\n columns?: 2 | 3 | 4\n /** Loading skeleton count */\n skeletonCount?: number\n /** Custom empty state message */\n emptyMessage?: string\n /** Callback when product is clicked */\n onProductClick?: (product: CommerceOffering) => void\n /** Navigate to product page on click */\n linkToProduct?: boolean\n /** Base path for product links */\n productBasePath?: string\n /** Additional class names */\n className?: string\n /** Card variant style */\n cardVariant?: 'card' | 'minimal' | 'horizontal'\n /** Custom styles */\n style?: React.CSSProperties\n}\n\ntype SortOption = 'newest' | 'oldest' | 'price-low' | 'price-high' | 'name-az' | 'name-za'\n\nexport function ProductGrid({\n products: propProducts,\n limit,\n category: propCategory,\n showCategoryFilter = false,\n showSort = true,\n showSearch = true,\n columns = 3,\n skeletonCount = 6,\n emptyMessage = 'No products found',\n onProductClick,\n linkToProduct = true,\n productBasePath = '/shop',\n className = '',\n cardVariant = 'card',\n style,\n}: ProductGridProps) {\n const [products, setProducts] = useState<CommerceOffering[]>(propProducts || [])\n const [total, setTotal] = useState(0)\n const [loading, setLoading] = useState(!propProducts)\n const [searchQuery, setSearchQuery] = useState('')\n const [selectedCategory, setSelectedCategory] = useState<string | undefined>(propCategory)\n const [sortBy, setSortBy] = useState<SortOption>('newest')\n\n // Extract unique categories from products\n const categories = useMemo(() => {\n const categoryMap = new Map<string, CommerceCategory>()\n products.forEach(p => {\n if (p.category) {\n categoryMap.set(p.category.id, p.category)\n }\n })\n return Array.from(categoryMap.values())\n }, [products])\n\n // Fetch products\n useEffect(() => {\n if (propProducts) {\n setProducts(propProducts)\n setTotal(propProducts.length)\n return\n }\n\n async function load() {\n setLoading(true)\n try {\n const { products: data, total: count } = await fetchProductsPublic({\n category: selectedCategory,\n limit,\n orderBy: 'created_at',\n order: 'desc',\n })\n setProducts(data)\n setTotal(count)\n } catch (e) {\n console.warn('Failed to load products:', e)\n } finally {\n setLoading(false)\n }\n }\n\n load()\n }, [propProducts, selectedCategory, limit])\n\n // Filter and sort products\n const filteredProducts = useMemo(() => {\n let filtered = [...products]\n\n // Search filter\n if (searchQuery) {\n const query = searchQuery.toLowerCase()\n filtered = filtered.filter(p => \n p.name.toLowerCase().includes(query) ||\n p.short_description?.toLowerCase().includes(query) ||\n p.tags?.some(tag => tag.toLowerCase().includes(query))\n )\n }\n\n // Category filter (if not already filtered by fetch)\n if (selectedCategory && !propCategory) {\n filtered = filtered.filter(p => p.category_id === selectedCategory)\n }\n\n // Sort\n switch (sortBy) {\n case 'newest':\n filtered.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime())\n break\n case 'oldest':\n filtered.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime())\n break\n case 'price-low':\n filtered.sort((a, b) => (a.price || 0) - (b.price || 0))\n break\n case 'price-high':\n filtered.sort((a, b) => (b.price || 0) - (a.price || 0))\n break\n case 'name-az':\n filtered.sort((a, b) => a.name.localeCompare(b.name))\n break\n case 'name-za':\n filtered.sort((a, b) => b.name.localeCompare(a.name))\n break\n }\n\n return filtered\n }, [products, searchQuery, selectedCategory, sortBy, propCategory])\n\n const handleProductClick = (product: CommerceOffering) => {\n if (onProductClick) {\n onProductClick(product)\n } else if (linkToProduct && typeof window !== 'undefined') {\n window.location.href = `${productBasePath}/${product.slug}`\n }\n }\n\n // Grid column styles\n const gridColumns = {\n 2: 'repeat(auto-fill, minmax(280px, 1fr))',\n 3: 'repeat(auto-fill, minmax(240px, 1fr))',\n 4: 'repeat(auto-fill, minmax(200px, 1fr))',\n }\n\n return (\n <div className={`site-kit-product-grid ${className}`} style={style}>\n {/* Filters & Controls */}\n {(showSearch || showSort || showCategoryFilter) && (\n <div className=\"site-kit-product-grid__controls\" style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '1rem',\n marginBottom: '1.5rem',\n alignItems: 'center',\n }}>\n {/* Search */}\n {showSearch && (\n <div className=\"site-kit-product-grid__search\" style={{ flex: '1 1 200px' }}>\n <input\n type=\"search\"\n placeholder=\"Search products...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n style={{\n width: '100%',\n padding: '0.625rem 1rem',\n borderRadius: '8px',\n border: '1px solid var(--sk-border)',\n fontSize: '0.9375rem',\n }}\n />\n </div>\n )}\n\n {/* Category Filter */}\n {showCategoryFilter && categories.length > 0 && (\n <select\n value={selectedCategory || ''}\n onChange={(e) => setSelectedCategory(e.target.value || undefined)}\n className=\"site-kit-product-grid__category-filter\"\n style={{\n padding: '0.625rem 1rem',\n borderRadius: '8px',\n border: '1px solid var(--sk-border)',\n fontSize: '0.9375rem',\n backgroundColor: 'var(--sk-bg)',\n minWidth: '150px',\n }}\n >\n <option value=\"\">All Categories</option>\n {categories.map(cat => (\n <option key={cat.id} value={cat.id}>{cat.name}</option>\n ))}\n </select>\n )}\n\n {/* Sort */}\n {showSort && (\n <select\n value={sortBy}\n onChange={(e) => setSortBy(e.target.value as SortOption)}\n className=\"site-kit-product-grid__sort\"\n style={{\n padding: '0.625rem 1rem',\n borderRadius: '8px',\n border: '1px solid var(--sk-border)',\n fontSize: '0.9375rem',\n backgroundColor: 'var(--sk-bg)',\n }}\n >\n <option value=\"newest\">Newest First</option>\n <option value=\"oldest\">Oldest First</option>\n <option value=\"price-low\">Price: Low to High</option>\n <option value=\"price-high\">Price: High to Low</option>\n <option value=\"name-az\">Name: A-Z</option>\n <option value=\"name-za\">Name: Z-A</option>\n </select>\n )}\n\n {/* Results count */}\n <div className=\"site-kit-product-grid__count\" style={{\n marginLeft: 'auto',\n fontSize: '0.875rem',\n color: 'var(--sk-text-secondary)',\n }}>\n {searchQuery ? filteredProducts.length : total} product{(searchQuery ? filteredProducts.length : total) !== 1 ? 's' : ''}\n </div>\n </div>\n )}\n\n {/* Loading Skeletons */}\n {loading && (\n <div className=\"site-kit-product-grid__grid\" style={{\n display: 'grid',\n gridTemplateColumns: gridColumns[columns],\n gap: '1.5rem',\n }}>\n {Array.from({ length: skeletonCount }).map((_, i) => (\n <div key={i} className=\"site-kit-product-grid__skeleton\" style={{\n aspectRatio: '1',\n backgroundColor: 'var(--sk-surface)',\n borderRadius: '12px',\n animation: 'pulse 2s infinite',\n }} />\n ))}\n <style>{`\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n `}</style>\n </div>\n )}\n\n {/* Products Grid */}\n {!loading && filteredProducts.length > 0 && (\n <div className=\"site-kit-product-grid__grid\" style={{\n display: 'grid',\n gridTemplateColumns: gridColumns[columns],\n gap: '1.5rem',\n }}>\n {filteredProducts.map(product => (\n <OfferingCard\n key={product.id}\n offering={product}\n variant={cardVariant}\n showImage\n showPrice\n showDescription\n showCta\n ctaText=\"View Product\"\n onCtaClick={() => handleProductClick(product)}\n />\n ))}\n </div>\n )}\n\n {/* Empty State */}\n {!loading && filteredProducts.length === 0 && (\n <div className=\"site-kit-product-grid__empty\" style={{\n textAlign: 'center',\n padding: '4rem 2rem',\n backgroundColor: 'var(--sk-bg-elevated)',\n borderRadius: '12px',\n }}>\n <div style={{ fontSize: '3rem', marginBottom: '1rem' }}>🛍️</div>\n <p style={{ \n margin: 0, \n color: 'var(--sk-text-secondary)',\n fontSize: '1rem',\n }}>\n {searchQuery ? `No products match \"${searchQuery}\"` : emptyMessage}\n </p>\n {searchQuery && (\n <button\n onClick={() => setSearchQuery('')}\n style={{\n marginTop: '1rem',\n padding: '0.5rem 1rem',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: 'var(--sk-primary)',\n color: 'var(--sk-bg)',\n fontSize: '0.875rem',\n cursor: 'pointer',\n }}\n >\n Clear Search\n </button>\n )}\n </div>\n )}\n </div>\n )\n}\n","/**\n * @sonordev/site-kit/commerce - ProductPage\n * \n * Complete product page component with SEO metadata, breadcrumbs, and related products.\n * Use this as a drop-in for dynamic [slug] routes.\n */\n\n'use client'\n\nimport React, { useEffect, useState } from 'react'\nimport type { CommerceOffering, CommerceVariant, CheckoutResult } from './types'\nimport { ProductDetail } from './ProductDetail'\nimport { ProductGrid } from './ProductGrid'\nimport { fetchProductBySlug, fetchProductsPublic } from './api'\n\nexport interface ProductPageProps {\n /** Pre-loaded product data (for SSR) */\n product?: CommerceOffering\n /** Product slug to fetch (if not pre-loaded) */\n slug?: string\n /** Show breadcrumbs navigation */\n showBreadcrumbs?: boolean\n /** Show related products section */\n showRelatedProducts?: boolean\n /** Number of related products to show */\n relatedProductsLimit?: number\n /** Show back to shop link */\n showBackLink?: boolean\n /** Base path for shop */\n shopBasePath?: string\n /** Success URL after checkout */\n successUrl?: string\n /** Cancel URL if checkout cancelled */\n cancelUrl?: string\n /** Callback when added to cart */\n onAddToCart?: (product: CommerceOffering, variant?: CommerceVariant, quantity?: number) => void\n /** Custom breadcrumb renderer */\n renderBreadcrumbs?: (product: CommerceOffering) => React.ReactNode\n /** Custom SEO head renderer (for Next.js Head or similar) */\n renderHead?: (product: CommerceOffering) => React.ReactNode\n /** Additional class names */\n className?: string\n /** Custom styles */\n style?: React.CSSProperties\n}\n\nexport function ProductPage({\n product: propProduct,\n slug,\n showBreadcrumbs = true,\n showRelatedProducts = true,\n relatedProductsLimit = 4,\n showBackLink = true,\n shopBasePath = '/shop',\n successUrl,\n cancelUrl,\n onAddToCart,\n renderBreadcrumbs,\n renderHead,\n className = '',\n style,\n}: ProductPageProps) {\n const [product, setProduct] = useState<CommerceOffering | null>(propProduct || null)\n const [relatedProducts, setRelatedProducts] = useState<CommerceOffering[]>([])\n const [loading, setLoading] = useState(!propProduct && !!slug)\n\n // Fetch product if not provided\n useEffect(() => {\n if (propProduct) {\n setProduct(propProduct)\n return\n }\n\n if (!slug) return\n\n async function load() {\n setLoading(true)\n try {\n const data = await fetchProductBySlug(slug!)\n setProduct(data)\n } catch (e) {\n console.error('Failed to load product:', e)\n } finally {\n setLoading(false)\n }\n }\n\n load()\n }, [propProduct, slug])\n\n // Fetch related products\n useEffect(() => {\n if (!product || !showRelatedProducts) return\n\n async function loadRelated() {\n try {\n const { products } = await fetchProductsPublic({\n category: product?.category_id,\n limit: relatedProductsLimit + 1, // Fetch one extra to exclude current\n })\n // Exclude current product\n const filtered = products.filter(p => p.id !== product?.id).slice(0, relatedProductsLimit)\n setRelatedProducts(filtered)\n } catch (e) {\n console.error('Failed to load related products:', e)\n }\n }\n\n loadRelated()\n }, [product, showRelatedProducts, relatedProductsLimit])\n\n // Update document title for SEO\n useEffect(() => {\n if (product && typeof document !== 'undefined') {\n document.title = product.seo_title || `${product.name} | Shop`\n \n // Update meta description\n const metaDesc = document.querySelector('meta[name=\"description\"]')\n if (metaDesc && (product.seo_description || product.short_description)) {\n metaDesc.setAttribute('content', product.seo_description || product.short_description || '')\n }\n }\n }, [product])\n\n if (loading) {\n return (\n <div className={`site-kit-product-page site-kit-product-page--loading ${className}`} style={style}>\n <div style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n minHeight: '60vh',\n }}>\n <div style={{\n width: '48px',\n height: '48px',\n border: '3px solid var(--sk-border)',\n borderTopColor: 'var(--sk-primary)',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }} />\n </div>\n <style>{`@keyframes spin { to { transform: rotate(360deg); } }`}</style>\n </div>\n )\n }\n\n if (!product) {\n return (\n <div className={`site-kit-product-page site-kit-product-page--not-found ${className}`} style={style}>\n <div style={{\n textAlign: 'center',\n padding: '6rem 2rem',\n }}>\n <div style={{ fontSize: '4rem', marginBottom: '1rem' }}>🔍</div>\n <h1 style={{ margin: 0, fontSize: '2rem', color: 'var(--sk-text-primary)' }}>Product Not Found</h1>\n <p style={{ marginTop: '0.75rem', color: 'var(--sk-text-secondary)' }}>\n The product you're looking for doesn't exist or has been removed.\n </p>\n <a\n href={shopBasePath}\n style={{\n display: 'inline-block',\n marginTop: '1.5rem',\n padding: '0.75rem 1.5rem',\n borderRadius: '8px',\n backgroundColor: 'var(--sk-primary)',\n color: 'var(--sk-bg)',\n textDecoration: 'none',\n fontWeight: 600,\n }}\n >\n Back to Shop\n </a>\n </div>\n </div>\n )\n }\n\n // Default breadcrumbs\n const defaultBreadcrumbs = (\n <nav className=\"site-kit-product-page__breadcrumbs\" aria-label=\"Breadcrumb\" style={{\n marginBottom: '1.5rem',\n fontSize: '0.875rem',\n }}>\n <ol style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: '0.5rem',\n listStyle: 'none',\n margin: 0,\n padding: 0,\n }}>\n <li>\n <a href=\"/\" style={{ color: 'var(--sk-text-secondary)', textDecoration: 'none' }}>Home</a>\n </li>\n <li style={{ color: 'var(--sk-text-secondary)' }}>/</li>\n <li>\n <a href={shopBasePath} style={{ color: 'var(--sk-text-secondary)', textDecoration: 'none' }}>Shop</a>\n </li>\n {product.category && (\n <>\n <li style={{ color: 'var(--sk-text-secondary)' }}>/</li>\n <li>\n <a \n href={`${shopBasePath}?category=${product.category.id}`} \n style={{ color: 'var(--sk-text-secondary)', textDecoration: 'none' }}\n >\n {product.category.name}\n </a>\n </li>\n </>\n )}\n <li style={{ color: 'var(--sk-text-secondary)' }}>/</li>\n <li style={{ color: 'var(--sk-text-primary)', fontWeight: 500 }}>{product.name}</li>\n </ol>\n </nav>\n )\n\n return (\n <div className={`site-kit-product-page ${className}`} style={style}>\n {/* Custom head for SEO */}\n {renderHead?.(product)}\n\n {/* Back Link */}\n {showBackLink && (\n <div className=\"site-kit-product-page__back\" style={{ marginBottom: '1rem' }}>\n <a\n href={shopBasePath}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.5rem',\n color: 'var(--sk-text-secondary)',\n textDecoration: 'none',\n fontSize: '0.875rem',\n }}\n >\n <span>←</span>\n <span>Back to Shop</span>\n </a>\n </div>\n )}\n\n {/* Breadcrumbs */}\n {showBreadcrumbs && (\n renderBreadcrumbs ? renderBreadcrumbs(product) : defaultBreadcrumbs\n )}\n\n {/* Product Detail */}\n <ProductDetail\n product={product}\n showQuantity\n showVariants\n showGallery\n showFeatures\n showSpecifications\n successUrl={successUrl}\n cancelUrl={cancelUrl}\n onAddToCart={onAddToCart}\n />\n\n {/* Related Products */}\n {showRelatedProducts && relatedProducts.length > 0 && (\n <section className=\"site-kit-product-page__related\" style={{ marginTop: '4rem' }}>\n <h2 style={{\n fontSize: '1.5rem',\n fontWeight: 600,\n color: 'var(--sk-text-primary)',\n marginBottom: '1.5rem',\n }}>\n {product.category ? `More ${product.category.name}` : 'Related Products'}\n </h2>\n <ProductGrid\n products={relatedProducts}\n showSearch={false}\n showSort={false}\n showCategoryFilter={false}\n columns={4}\n productBasePath={shopBasePath}\n />\n </section>\n )}\n </div>\n )\n}\n","/**\n * @sonordev/site-kit/commerce - EventEmbed\n * \n * Embeddable widget for displaying an event on a homepage or landing page.\n * Great for featuring the next upcoming event.\n */\n\n'use client'\n\nimport React, { useEffect, useState } from 'react'\nimport type { EventEmbedProps, CommerceOffering } from './types'\nimport { EventTile } from './EventTile'\nimport { fetchOffering, fetchNextEvent } from './api'\n\nexport function EventEmbed({\n event: propEvent,\n slug,\n mode = 'next', // 'specific', 'next'\n category,\n variant = 'standard',\n showDate = true,\n showTime = true,\n showLocation = true,\n showCapacity = true,\n showPrice = true,\n showCta = true,\n ctaText,\n onRegister,\n onCtaClick,\n className = '',\n}: EventEmbedProps) {\n const [event, setEvent] = useState<CommerceOffering | null>(propEvent || null)\n const [loading, setLoading] = useState(!propEvent && (!!slug || mode === 'next'))\n \n useEffect(() => {\n if (propEvent) {\n setEvent(propEvent)\n return\n }\n \n async function load() {\n setLoading(true)\n try {\n let data: CommerceOffering | null = null\n \n if (mode === 'specific' && slug) {\n data = await fetchOffering(slug)\n } else if (mode === 'next') {\n data = await fetchNextEvent(category)\n }\n \n setEvent(data)\n } catch (e) {\n console.error('Failed to load event:', e)\n } finally {\n setLoading(false)\n }\n }\n \n load()\n }, [propEvent, slug, mode, category])\n \n if (loading) {\n return (\n <div className={`site-kit-event-embed ${className}`} style={{\n padding: '2rem',\n textAlign: 'center',\n background: 'var(--sk-bg-elevated)',\n borderRadius: '12px',\n }}>\n <div style={{\n width: '40px',\n height: '40px',\n margin: '0 auto',\n border: '3px solid var(--sk-border)',\n borderTopColor: 'var(--sk-primary)',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }} />\n <style>{`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n )\n }\n \n if (!event) {\n return null // Silent fail - don't show anything if no event\n }\n \n return (\n <div className={`site-kit-event-embed ${className}`}>\n <EventTile\n event={event}\n variant={variant}\n showDate={showDate}\n showTime={showTime}\n showLocation={showLocation}\n showCapacity={showCapacity}\n showPrice={showPrice}\n showCta={showCta}\n ctaText={ctaText}\n onRegister={onRegister}\n onCtaClick={onCtaClick}\n />\n </div>\n )\n}\n\nexport default EventEmbed\n","/**\n * @sonordev/site-kit/commerce - CheckoutForm\n * \n * Checkout/registration form for purchasing products or registering for events.\n * Supports shipping flow when shipping_enabled and product type.\n */\n\n'use client'\n\nimport React, { useState, useEffect } from 'react'\nimport type { CheckoutFormProps, CommerceOffering, CheckoutCustomer } from './types'\nimport type { ShippingAddress, ShippingRate, CreateCheckoutOptions, DiscountValidationResult } from './api'\nimport {\n createCheckoutSession,\n registerForEvent,\n fetchActiveProcessor,\n fetchProcessorConfig,\n fetchShippingRates,\n validateDiscountCode,\n} from './api'\nimport { formatPrice } from './utils'\nimport { useAnalyticsOptional } from '../analytics'\n\ntype ShippingStep = 'address' | 'rates'\n\nexport function CheckoutForm({\n offering,\n scheduleId,\n variantId,\n quantity: initialQuantity = 1,\n mode = 'checkout', // 'checkout' | 'register'\n showQuantity = true,\n submitText,\n onSuccess,\n onError,\n className = '',\n formClassName = '',\n inputClassName = '',\n buttonClassName = '',\n}: CheckoutFormProps) {\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [success, setSuccess] = useState(false)\n const [quantity, setQuantity] = useState(initialQuantity)\n const [processor, setProcessor] = useState<'stripe' | 'square' | null>(null)\n const [shippingEnabled, setShippingEnabled] = useState(false)\n const [shippingStep, setShippingStep] = useState<ShippingStep>('address')\n const [shippingAddress, setShippingAddress] = useState<ShippingAddress>({\n street1: '',\n street2: '',\n city: '',\n state: '',\n zip: '',\n country: 'US',\n })\n const [shippingRates, setShippingRates] = useState<ShippingRate[]>([])\n const [selectedRate, setSelectedRate] = useState<ShippingRate | null>(null)\n const [loadingRates, setLoadingRates] = useState(false)\n\n const [customer, setCustomer] = useState<CheckoutCustomer>({\n email: '',\n name: '',\n phone: '',\n })\n const [discountCode, setDiscountCode] = useState('')\n const [discountResult, setDiscountResult] = useState<DiscountValidationResult | null>(null)\n const [applyingDiscount, setApplyingDiscount] = useState(false)\n\n const isProduct = offering.type === 'product'\n\n const analytics = useAnalyticsOptional()\n\n // Fetch processor config (includes shipping_enabled)\n useEffect(() => {\n fetchProcessorConfig().then((config) => {\n if (config?.processor) setProcessor(config.processor)\n if (config?.shipping_enabled && isProduct) setShippingEnabled(true)\n })\n }, [isProduct])\n \n const isEvent = offering.type === 'event' || offering.type === 'class'\n const isFree = !offering.price || offering.price === 0\n const actualMode = isEvent && isFree ? 'register' : mode\n \n const defaultSubmitText = actualMode === 'register' \n ? 'Register' \n : isFree \n ? 'Complete Order' \n : 'Continue to Payment'\n \n const subtotal = offering.price ? offering.price * quantity : 0\n const shippingCost = selectedRate ? parseFloat(selectedRate.amount) : 0\n const discountAmount = discountResult?.valid ? (discountResult.discount_amount ?? 0) : 0\n const total = Math.max(0, subtotal + shippingCost - discountAmount)\n\n const handleApplyDiscount = async () => {\n if (!discountCode.trim()) return\n setApplyingDiscount(true)\n try {\n const result = await validateDiscountCode(discountCode.trim(), subtotal, [offering.id])\n setDiscountResult(result)\n if (!result.valid) {\n setError(result.message || 'Invalid discount code')\n } else {\n setError(null)\n }\n } catch {\n setDiscountResult(null)\n setError('Could not validate discount code')\n } finally {\n setApplyingDiscount(false)\n }\n }\n\n const handleRemoveDiscount = () => {\n setDiscountCode('')\n setDiscountResult(null)\n }\n\n const updateShippingAddress = (field: keyof ShippingAddress, value: string) => {\n setShippingAddress((prev) => ({ ...prev, [field]: value }))\n }\n\n const handleGetShippingRates = async () => {\n if (!shippingAddress.street1 || !shippingAddress.city || !shippingAddress.state || !shippingAddress.zip) {\n setError('Please fill in all required address fields.')\n return\n }\n setLoadingRates(true)\n setError(null)\n try {\n const rates = await fetchShippingRates(\n { ...shippingAddress, name: customer.name, phone: customer.phone },\n [{ offering_id: offering.id, quantity }]\n )\n setShippingRates(rates)\n if (rates.length > 0) setSelectedRate(rates[0])\n setShippingStep('rates')\n } catch (e) {\n setError('Failed to get shipping rates. Please check your address.')\n } finally {\n setLoadingRates(false)\n }\n }\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setLoading(true)\n setError(null)\n\n analytics?.trackEvent({\n name: 'checkout_start',\n properties: {\n offering_id: offering.id,\n total,\n quantity,\n },\n })\n\n try {\n if (actualMode === 'register' && isEvent && scheduleId) {\n // Free event registration\n const result = await registerForEvent(offering.id, scheduleId, customer)\n \n if (result.success) {\n setSuccess(true)\n onSuccess?.(result)\n } else {\n setError(result.error || 'Registration failed')\n onError?.(result.error || 'Registration failed')\n }\n } else {\n // Paid checkout - redirect to Stripe/Square\n const checkoutOptions: Omit<CreateCheckoutOptions, 'offeringId'> = {\n variantId,\n scheduleId,\n quantity,\n customer,\n discountCode: discountResult?.valid ? discountCode.trim() : undefined,\n }\n if (shippingEnabled && shippingAddress.street1 && selectedRate) {\n checkoutOptions.shippingAddress = {\n ...shippingAddress,\n name: customer.name,\n phone: customer.phone,\n }\n checkoutOptions.shippingCarrier = selectedRate.carrier\n checkoutOptions.shippingService = selectedRate.service\n checkoutOptions.shippingCost = parseFloat(selectedRate.amount)\n }\n const result = await createCheckoutSession(offering.id, checkoutOptions)\n \n if (result.success && result.payment_url) {\n // Redirect to payment\n window.location.href = result.payment_url\n } else {\n setError(result.error || 'Checkout failed')\n onError?.(result.error || 'Checkout failed')\n }\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : 'An error occurred'\n setError(message)\n onError?.(message)\n } finally {\n setLoading(false)\n }\n }\n \n const updateCustomer = (field: keyof CheckoutCustomer, value: string) => {\n setCustomer((prev) => ({ ...prev, [field]: value }))\n }\n\n const canProceedToPayment = !shippingEnabled || (shippingStep === 'rates' && selectedRate)\n \n if (success) {\n return (\n <div className={`site-kit-checkout-success ${className}`} style={{\n padding: '2rem',\n textAlign: 'center',\n background: 'rgba(var(--sk-success-rgb, 16,185,129), 0.06)',\n borderRadius: '12px',\n border: '1px solid rgba(var(--sk-success-rgb, 16,185,129), 0.2)',\n }}>\n <div style={{ fontSize: '3rem', marginBottom: '1rem' }}>🎉</div>\n <h3 style={{ margin: '0 0 0.5rem', color: 'var(--sk-success)' }}>\n {actualMode === 'register' ? 'Registration Complete!' : 'Order Confirmed!'}\n </h3>\n <p style={{ color: 'var(--sk-success)', margin: 0 }}>\n {actualMode === 'register' \n ? `You're registered for ${offering.name}. Check your email for confirmation.`\n : `Thank you for your order! Check your email for details.`\n }\n </p>\n </div>\n )\n }\n \n return (\n <div className={`site-kit-checkout ${className}`}>\n <form onSubmit={handleSubmit} className={formClassName}>\n {/* Order Summary */}\n <div style={{\n padding: '1rem',\n background: 'var(--sk-bg-elevated)',\n borderRadius: '8px',\n marginBottom: '1.5rem',\n }}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start' }}>\n <div>\n <h4 style={{ margin: '0 0 0.25rem', fontSize: '1rem' }}>{offering.name}</h4>\n {offering.short_description && (\n <p style={{ margin: 0, fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>\n {offering.short_description}\n </p>\n )}\n </div>\n {offering.price_is_public && offering.price != null && (\n <div style={{ fontWeight: 600, fontSize: '1.125rem' }}>\n {offering.price === 0 ? 'Free' : formatPrice(offering.price, offering.currency)}\n </div>\n )}\n </div>\n \n {showQuantity && !isEvent && offering.price && offering.price > 0 && (\n <div style={{ marginTop: '1rem', display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <label style={{ fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>Quantity:</label>\n <select\n value={quantity}\n onChange={(e) => setQuantity(Number(e.target.value))}\n className={inputClassName}\n style={{\n padding: '0.375rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n background: 'var(--sk-bg)',\n }}\n >\n {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(n => (\n <option key={n} value={n}>{n}</option>\n ))}\n </select>\n <span style={{ marginLeft: 'auto', fontWeight: 600 }}>\n {shippingEnabled && selectedRate ? `Subtotal: ${formatPrice(subtotal, offering.currency)}` : `Total: ${formatPrice(total, offering.currency)}`}\n </span>\n </div>\n )}\n </div>\n \n {/* Discount Code */}\n {!isFree && (\n <div style={{ marginBottom: '1.5rem' }}>\n {discountResult?.valid ? (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0.625rem 0.875rem',\n background: 'rgba(var(--sk-success-rgb, 16,185,129), 0.06)',\n border: '1px solid rgba(var(--sk-success-rgb, 16,185,129), 0.2)',\n borderRadius: '6px',\n }}>\n <div>\n <span style={{ fontSize: '0.875rem', fontWeight: 500, color: 'var(--sk-success)' }}>\n {discountResult.name || discountCode}\n </span>\n <span style={{ fontSize: '0.875rem', color: 'var(--sk-success)', marginLeft: '0.5rem' }}>\n −{formatPrice(discountAmount, offering.currency)}\n </span>\n </div>\n <button\n type=\"button\"\n onClick={handleRemoveDiscount}\n style={{\n background: 'none',\n border: 'none',\n color: 'var(--sk-error)',\n cursor: 'pointer',\n fontSize: '0.75rem',\n fontWeight: 500,\n }}\n >\n Remove\n </button>\n </div>\n ) : (\n <div style={{ display: 'flex', gap: '0.5rem' }}>\n <input\n type=\"text\"\n value={discountCode}\n onChange={(e) => setDiscountCode(e.target.value.toUpperCase())}\n placeholder=\"Discount code\"\n className={inputClassName}\n style={{\n flex: 1,\n padding: '0.5rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '0.875rem',\n }}\n />\n <button\n type=\"button\"\n onClick={handleApplyDiscount}\n disabled={applyingDiscount || !discountCode.trim()}\n style={{\n padding: '0.5rem 1rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n background: 'var(--sk-bg)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: applyingDiscount || !discountCode.trim() ? 'not-allowed' : 'pointer',\n opacity: applyingDiscount || !discountCode.trim() ? 0.5 : 1,\n }}\n >\n {applyingDiscount ? '...' : 'Apply'}\n </button>\n </div>\n )}\n </div>\n )}\n\n {/* Order Total (when discount applied) */}\n {discountResult?.valid && !isFree && (\n <div style={{\n padding: '0.75rem 1rem',\n background: 'var(--sk-bg-elevated)',\n borderRadius: '6px',\n marginBottom: '1.5rem',\n fontSize: '0.875rem',\n }}>\n <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '0.25rem' }}>\n <span style={{ color: 'var(--sk-text-secondary)' }}>Subtotal</span>\n <span>{formatPrice(subtotal, offering.currency)}</span>\n </div>\n <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '0.25rem', color: 'var(--sk-success)' }}>\n <span>Discount</span>\n <span>−{formatPrice(discountAmount, offering.currency)}</span>\n </div>\n {shippingCost > 0 && (\n <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '0.25rem' }}>\n <span style={{ color: 'var(--sk-text-secondary)' }}>Shipping</span>\n <span>{formatPrice(shippingCost, offering.currency)}</span>\n </div>\n )}\n <div style={{ display: 'flex', justifyContent: 'space-between', borderTop: '1px solid var(--sk-border)', paddingTop: '0.5rem', marginTop: '0.25rem', fontWeight: 600 }}>\n <span>Total</span>\n <span>{formatPrice(total, offering.currency)}</span>\n </div>\n </div>\n )}\n\n {/* Customer Info */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Full Name *\n </label>\n <input\n type=\"text\"\n required\n value={customer.name}\n onChange={(e) => updateCustomer('name', e.target.value)}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n \n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Email Address *\n </label>\n <input\n type=\"email\"\n required\n value={customer.email}\n onChange={(e) => updateCustomer('email', e.target.value)}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n \n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Phone Number\n </label>\n <input\n type=\"tel\"\n value={customer.phone || ''}\n onChange={(e) => updateCustomer('phone', e.target.value)}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n </div>\n\n {/* Shipping Address (when shipping enabled) */}\n {shippingEnabled && !isEvent && (\n <div style={{ marginTop: '1.5rem', paddingTop: '1.5rem', borderTop: '1px solid var(--sk-border)' }}>\n <h4 style={{ margin: '0 0 1rem', fontSize: '1rem' }}>Shipping Address</h4>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>Street Address *</label>\n <input\n type=\"text\"\n required={shippingEnabled}\n value={shippingAddress.street1}\n onChange={(e) => updateShippingAddress('street1', e.target.value)}\n className={inputClassName}\n placeholder=\"123 Main St\"\n style={{ width: '100%', padding: '0.625rem 0.75rem', borderRadius: '6px', border: '1px solid var(--sk-border)', fontSize: '1rem' }}\n />\n </div>\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>Apartment, suite, etc.</label>\n <input\n type=\"text\"\n value={shippingAddress.street2 || ''}\n onChange={(e) => updateShippingAddress('street2', e.target.value)}\n className={inputClassName}\n style={{ width: '100%', padding: '0.625rem 0.75rem', borderRadius: '6px', border: '1px solid var(--sk-border)', fontSize: '1rem' }}\n />\n </div>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '1rem' }}>\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>City *</label>\n <input\n type=\"text\"\n required={shippingEnabled}\n value={shippingAddress.city}\n onChange={(e) => updateShippingAddress('city', e.target.value)}\n className={inputClassName}\n style={{ width: '100%', padding: '0.625rem 0.75rem', borderRadius: '6px', border: '1px solid var(--sk-border)', fontSize: '1rem' }}\n />\n </div>\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>State *</label>\n <input\n type=\"text\"\n required={shippingEnabled}\n value={shippingAddress.state}\n onChange={(e) => updateShippingAddress('state', e.target.value)}\n className={inputClassName}\n style={{ width: '100%', padding: '0.625rem 0.75rem', borderRadius: '6px', border: '1px solid var(--sk-border)', fontSize: '1rem' }}\n />\n </div>\n </div>\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>ZIP Code *</label>\n <input\n type=\"text\"\n required={shippingEnabled}\n value={shippingAddress.zip}\n onChange={(e) => updateShippingAddress('zip', e.target.value)}\n className={inputClassName}\n style={{ width: '100%', maxWidth: '120px', padding: '0.625rem 0.75rem', borderRadius: '6px', border: '1px solid var(--sk-border)', fontSize: '1rem' }}\n />\n </div>\n </div>\n {shippingStep === 'address' && (\n <button\n type=\"button\"\n onClick={handleGetShippingRates}\n disabled={loadingRates || !shippingAddress.street1 || !shippingAddress.city || !shippingAddress.state || !shippingAddress.zip}\n style={{\n marginTop: '1rem',\n padding: '0.625rem 1.25rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-primary)',\n background: 'var(--sk-bg)',\n color: 'var(--sk-primary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: loadingRates ? 'not-allowed' : 'pointer',\n }}\n >\n {loadingRates ? 'Getting rates...' : 'Get shipping options'}\n </button>\n )}\n {shippingStep === 'rates' && shippingRates.length > 0 && (\n <div style={{ marginTop: '1rem' }}>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.5rem' }}>Select shipping method</label>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.5rem' }}>\n {shippingRates.map((rate) => (\n <label\n key={rate.objectId || `${rate.carrier}-${rate.service}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n padding: '0.75rem',\n borderRadius: '6px',\n border: `2px solid ${selectedRate === rate ? 'var(--sk-primary)' : 'var(--sk-border)'}`,\n background: selectedRate === rate ? 'rgba(var(--sk-primary-rgb), 0.06)' : 'var(--sk-bg)',\n cursor: 'pointer',\n }}\n >\n <input\n type=\"radio\"\n name=\"shipping-rate\"\n checked={selectedRate === rate}\n onChange={() => setSelectedRate(rate)}\n />\n <span style={{ flex: 1 }}>{rate.carrier} - {rate.service}</span>\n <span style={{ fontWeight: 600 }}>{formatPrice(parseFloat(rate.amount), rate.currency || 'USD')}</span>\n {rate.estimatedDays && (\n <span style={{ fontSize: '0.75rem', color: 'var(--sk-text-secondary)' }}>({rate.estimatedDays} days)</span>\n )}\n </label>\n ))}\n </div>\n <button\n type=\"button\"\n onClick={() => setShippingStep('address')}\n style={{\n marginTop: '0.75rem',\n fontSize: '0.875rem',\n color: 'var(--sk-text-secondary)',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n textDecoration: 'underline',\n }}\n >\n Change address\n </button>\n </div>\n )}\n </div>\n )}\n \n {error && (\n <div style={{\n marginTop: '1rem',\n padding: '0.75rem',\n background: 'rgba(var(--sk-error-rgb, 239,68,68), 0.06)',\n border: '1px solid rgba(var(--sk-error-rgb, 239,68,68), 0.2)',\n borderRadius: '6px',\n color: 'var(--sk-error)',\n fontSize: '0.875rem',\n }}>\n {error}\n </div>\n )}\n \n <button\n type=\"submit\"\n disabled={loading || (!isEvent && !isFree && !canProceedToPayment)}\n className={buttonClassName}\n style={{\n width: '100%',\n marginTop: '1.5rem',\n padding: '0.875rem',\n fontSize: '1rem',\n fontWeight: 600,\n borderRadius: '8px',\n border: 'none',\n background: loading ? 'var(--sk-primary-hover)' : 'var(--sk-primary)',\n color: 'white',\n cursor: loading ? 'not-allowed' : 'pointer',\n }}\n >\n {loading ? 'Processing...' : (submitText || defaultSubmitText)}\n </button>\n \n {!isFree && (\n <p style={{ \n textAlign: 'center', \n fontSize: '0.75rem', \n color: 'var(--sk-text-secondary)',\n marginTop: '0.75rem',\n }}>\n You'll be redirected to our secure payment page\n </p>\n )}\n \n {/* Powered by Stripe / Square badge */}\n {processor && !isFree && (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '0.375rem',\n marginTop: '0.5rem',\n opacity: 0.5,\n }}>\n {processor === 'stripe' ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13.976 9.15c-2.172-.806-3.356-1.426-3.356-2.409 0-.831.683-1.305 1.901-1.305 2.227 0 4.515.858 6.09 1.631l.89-5.494C18.252.975 15.697 0 12.165 0 9.667 0 7.589.654 6.104 1.872 4.56 3.147 3.757 4.992 3.757 7.218c0 4.039 2.467 5.76 6.476 7.219 2.585.92 3.445 1.574 3.445 2.583 0 .98-.84 1.545-2.354 1.545-1.875 0-4.965-.921-6.99-2.109l-.9 5.555C5.175 22.99 8.385 24 11.714 24c2.641 0 4.843-.624 6.328-1.813 1.664-1.305 2.525-3.236 2.525-5.732 0-4.128-2.524-5.851-6.591-7.305z\" fill=\"#635BFF\"/>\n </svg>\n ) : (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"24\" height=\"24\" rx=\"4\" fill=\"#3E4348\"/>\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\" fill=\"white\"/>\n </svg>\n )}\n <span style={{ fontSize: '0.625rem', color: 'var(--sk-text-secondary)', letterSpacing: '0.02em' }}>\n Powered by {processor === 'stripe' ? 'Stripe' : 'Square'}\n </span>\n </div>\n )}\n </form>\n </div>\n )\n}\n\nexport default CheckoutForm\n","/**\n * @sonordev/site-kit/commerce - EventCheckout\n *\n * Multi-variant inline event checkout. Renders a tier selector (one row per variant\n * with qty controls), customer info, and a Square card element. Submits a single\n * lineItems[] payload to the Portal multi-line checkout endpoint — one charge for\n * the aggregate total, no redirect.\n *\n * v1: Square inline only. For single-tier events without variants, the component\n * gracefully falls back to a single \"ticket\" row using the offering's base price.\n */\n\n'use client'\n\nimport React, { useEffect, useMemo, useRef, useState } from 'react'\nimport type {\n CommerceOffering,\n CommerceSchedule,\n CommerceVariant,\n CheckoutCustomer,\n CheckoutResult,\n} from './types'\nimport {\n createCheckoutSession,\n fetchProcessorConfig,\n type CheckoutLineItem,\n type ProcessorConfig,\n} from './api'\nimport {\n formatDate,\n formatTime,\n formatPrice,\n getSpotsRemaining,\n isEventSoldOut,\n} from './utils'\n\nfunction loadSquareSDK(environment: string): Promise<void> {\n return new Promise((resolve, reject) => {\n if (typeof window === 'undefined') return reject(new Error('No window'))\n if ((window as any).Square) return resolve()\n const script = document.createElement('script')\n script.src =\n environment === 'sandbox'\n ? 'https://sandbox.web.squarecdn.com/v1/square.js'\n : 'https://web.squarecdn.com/v1/square.js'\n script.onload = () => resolve()\n script.onerror = () => reject(new Error('Failed to load Square SDK'))\n document.head.appendChild(script)\n })\n}\n\n/**\n * Resolve a CSS custom property from :root to its computed value so it can be\n * passed to Square's Web Payments SDK, which runs the card form in an iframe\n * and rejects `var(...)` references in its `style` config. Square's color\n * validator only accepts 6-digit hex and standard rgb()/named colors — it\n * rejects 8-digit hex (alpha) and rgba/hsla. We normalize anything with an\n * alpha channel down to its 6-digit hex equivalent before handing it over.\n */\nfunction resolveCssVar(name: string, fallback: string): string {\n if (typeof window === 'undefined') return fallback\n const raw = getComputedStyle(document.documentElement)\n .getPropertyValue(name)\n .trim()\n if (!raw) return fallback\n return normalizeColorForSquare(raw) ?? fallback\n}\n\nfunction normalizeColorForSquare(value: string): string | null {\n const v = value.trim()\n if (!v) return null\n if (/^#[0-9a-f]{6}$/i.test(v)) return v\n const eightDigit = /^(#[0-9a-f]{6})[0-9a-f]{2}$/i.exec(v)\n if (eightDigit) return eightDigit[1]\n const threeDigit = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(v)\n if (threeDigit) {\n const [, r, g, b] = threeDigit\n return `#${r}${r}${g}${g}${b}${b}`\n }\n const rgb = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i.exec(v)\n if (rgb) {\n const [, r, g, b] = rgb\n const toHex = (n: string) => Number(n).toString(16).padStart(2, '0')\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`\n }\n return null\n}\n\nexport interface EventCheckoutProps {\n /** Event offering — must include `variants` (multi-tier) or have a base price (single-tier). */\n event: CommerceOffering\n /** Specific schedule to book. Defaults to first upcoming schedule on the event. */\n schedule?: CommerceSchedule\n /** Collect a phone number (defaults to true; tickets often need contact). */\n collectPhone?: boolean\n /** Maximum quantity per individual variant row (default 10). */\n maxPerVariant?: number\n /**\n * Seed per-variant quantities on mount, keyed by variant id — lets a tier\n * card or deep link open checkout with that tier already selected. Values\n * clamp to [0, maxPerVariant]; unknown ids are ignored. Multi-tier events\n * only (single-ticket events already start at 1). Initial state only: to\n * re-seed an already-mounted checkout, remount it (e.g. `key={variantId}`).\n */\n initialQuantities?: Record<string, number>\n /** Card label override (e.g. \"Card details\" vs \"Payment\"). */\n cardLabel?: string\n /** Submit button text override. Falls back to \"Buy {total}\". */\n submitText?: string\n /** Success callback after a successful charge. */\n onSuccess?: (result: CheckoutResult) => void\n /** Error callback. */\n onError?: (error: string) => void\n className?: string\n}\n\ninterface QtyByVariant {\n [variantId: string]: number\n}\n\nconst SINGLE_TICKET_KEY = '__single__'\n\nexport function EventCheckout({\n event,\n schedule: propSchedule,\n collectPhone = true,\n maxPerVariant = 10,\n initialQuantities,\n cardLabel = 'Card Details',\n submitText,\n onSuccess,\n onError,\n className = '',\n}: EventCheckoutProps) {\n const schedule = propSchedule || event.schedules?.[0] || (event as any)?.next_schedule\n const variants: CommerceVariant[] = useMemo(\n () => event.variants ?? [],\n [event.variants],\n )\n const hasVariants = variants.length > 0\n const currency = event.currency || 'USD'\n\n // Map each variant ID (or SINGLE_TICKET_KEY) to current quantity\n const [qty, setQty] = useState<QtyByVariant>(() => {\n if (hasVariants) {\n return Object.fromEntries(\n variants.map((v) => {\n const seed = initialQuantities?.[v.id]\n const n =\n typeof seed === 'number' && Number.isFinite(seed)\n ? Math.floor(seed)\n : 0\n return [v.id, Math.max(0, Math.min(maxPerVariant, n))]\n }),\n ) as QtyByVariant\n }\n return { [SINGLE_TICKET_KEY]: 1 }\n })\n\n const [customer, setCustomer] = useState<CheckoutCustomer>({\n email: '',\n name: '',\n phone: '',\n })\n\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [success, setSuccess] = useState<CheckoutResult | null>(null)\n\n const [processorConfig, setProcessorConfig] = useState<ProcessorConfig | null>(null)\n const [squareCard, setSquareCard] = useState<any>(null)\n const [cardReady, setCardReady] = useState(false)\n const cardContainerRef = useRef<HTMLDivElement>(null)\n\n // Compute totals\n const totalQuantity = useMemo(\n () => Object.values(qty).reduce((sum, n) => sum + (n || 0), 0),\n [qty],\n )\n\n const lineBreakdown = useMemo(() => {\n if (!hasVariants) {\n const q = qty[SINGLE_TICKET_KEY] || 0\n const price = event.price ?? 0\n return [\n {\n key: SINGLE_TICKET_KEY,\n name: 'Ticket',\n unitPrice: price,\n quantity: q,\n subtotal: price * q,\n variantId: null as string | null,\n },\n ]\n }\n return variants.map((v) => {\n const q = qty[v.id] || 0\n const price = v.price ?? event.price ?? 0\n return {\n key: v.id,\n name: v.name,\n unitPrice: price,\n quantity: q,\n subtotal: price * q,\n variantId: v.id,\n }\n })\n }, [variants, qty, hasVariants, event.price])\n\n const subtotal = lineBreakdown.reduce((s, l) => s + l.subtotal, 0)\n\n // Capacity awareness\n const spotsRemaining = schedule\n ? getSpotsRemaining(schedule.capacity, (schedule as any).current_registrations ?? undefined) ??\n schedule.spots_remaining ??\n null\n : null\n const soldOut = schedule\n ? isEventSoldOut(schedule.capacity, (schedule as any).current_registrations ?? undefined)\n : false\n const overCapacity =\n spotsRemaining !== null && totalQuantity > spotsRemaining\n\n // Load Square SDK + mount card element\n useEffect(() => {\n let cancelled = false\n let attachedCard: any = null\n\n fetchProcessorConfig().then(async (config) => {\n if (cancelled) return\n setProcessorConfig(config)\n if (config?.processor !== 'square' || !config.squareAppId || !config.squareLocationId) {\n return\n }\n try {\n await loadSquareSDK(config.squareEnvironment || 'production')\n if (cancelled) return\n const Square = (window as any).Square\n const payments = Square.payments(config.squareAppId, config.squareLocationId)\n const card = await payments.card({\n style: {\n '.input-container': {\n borderColor: resolveCssVar('--sk-border', '#d1d5db'),\n borderRadius: '6px',\n },\n '.input-container.is-focus': {\n borderColor: resolveCssVar('--sk-primary', '#2563eb'),\n },\n '.input-container.is-error': {\n borderColor: '#dc2626',\n },\n },\n })\n if (cancelled) {\n await card.destroy?.().catch(() => {})\n return\n }\n await card.attach('#sk-event-checkout-card')\n attachedCard = card\n setSquareCard(card)\n setCardReady(true)\n } catch (err) {\n console.error('[EventCheckout] Square card init failed:', err)\n }\n })\n\n return () => {\n cancelled = true\n if (attachedCard) {\n attachedCard.destroy?.().catch(() => {})\n }\n setSquareCard(null)\n setCardReady(false)\n }\n }, [])\n\n const updateQty = (key: string, delta: number) => {\n setQty((prev) => {\n const current = prev[key] ?? 0\n const next = Math.max(0, Math.min(maxPerVariant, current + delta))\n return { ...prev, [key]: next }\n })\n setError(null)\n }\n\n const updateCustomer = (field: keyof CheckoutCustomer, value: string) => {\n setCustomer((prev) => ({ ...prev, [field]: value }))\n }\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setError(null)\n\n if (!schedule) {\n setError('No event date available')\n return\n }\n if (totalQuantity === 0) {\n setError('Select at least one ticket')\n return\n }\n if (overCapacity) {\n setError(\n `Only ${spotsRemaining} spot${spotsRemaining === 1 ? '' : 's'} remaining. Please reduce quantity.`,\n )\n return\n }\n if (!customer.name || !customer.email) {\n setError('Name and email are required')\n return\n }\n if (processorConfig?.processor !== 'square') {\n setError('Inline checkout requires Square. Please contact support.')\n return\n }\n if (!squareCard || !cardReady) {\n setError('Card form is still loading. Please wait a moment and try again.')\n return\n }\n\n setLoading(true)\n try {\n const tokenResult = await squareCard.tokenize()\n if (tokenResult.status !== 'OK') {\n const msg =\n tokenResult.errors?.[0]?.message ||\n 'Card verification failed. Please check your card details.'\n setError(msg)\n onError?.(msg)\n setLoading(false)\n return\n }\n\n const lineItems: CheckoutLineItem[] = lineBreakdown\n .filter((l) => l.quantity > 0)\n .map((l) => ({\n offeringId: event.id,\n variantId: l.variantId ?? undefined,\n scheduleId: schedule.id,\n quantity: l.quantity,\n }))\n\n const result = await createCheckoutSession({\n offeringId: event.id,\n lineItems,\n customer,\n sourceId: tokenResult.token,\n successUrl: typeof window !== 'undefined' ? window.location.href + '?registration=success' : undefined,\n cancelUrl: typeof window !== 'undefined' ? window.location.href : undefined,\n })\n\n if (result.success) {\n setSuccess(result)\n onSuccess?.(result)\n } else {\n setError(result.error || 'Checkout failed')\n onError?.(result.error || 'Checkout failed')\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : 'An error occurred'\n setError(message)\n onError?.(message)\n } finally {\n setLoading(false)\n }\n }\n\n if (success) {\n return (\n <div\n className={`site-kit-event-checkout-success ${className}`}\n style={{\n padding: '2rem',\n textAlign: 'center',\n background: 'var(--sk-bg, #fff)',\n border: '1px solid var(--sk-border, #e5e7eb)',\n borderRadius: '12px',\n }}\n >\n <div style={{ fontSize: '3rem', marginBottom: '0.75rem' }}>🎟️</div>\n <h3\n style={{\n margin: '0 0 0.5rem',\n fontSize: '1.5rem',\n color: 'var(--sk-text-primary, #111)',\n }}\n >\n You're booked!\n </h3>\n <p\n style={{\n margin: '0 0 0.5rem',\n color: 'var(--sk-text-secondary, #555)',\n }}\n >\n Confirmation #{success.confirmation_number || success.sale_id}\n </p>\n <p\n style={{\n margin: 0,\n color: 'var(--sk-text-secondary, #555)',\n fontSize: '0.9rem',\n }}\n >\n Check your email for ticket details.\n </p>\n </div>\n )\n }\n\n if (soldOut) {\n return (\n <div\n className={`site-kit-event-checkout-soldout ${className}`}\n style={{\n padding: '2rem',\n textAlign: 'center',\n background: 'var(--sk-surface, #f9fafb)',\n border: '1px solid var(--sk-border, #e5e7eb)',\n borderRadius: '12px',\n }}\n >\n <p style={{ margin: 0, fontWeight: 600, fontSize: '1.125rem' }}>\n This cruise is sold out\n </p>\n <p style={{ margin: '0.5rem 0 0', color: 'var(--sk-text-secondary, #555)' }}>\n Check back soon for additional dates.\n </p>\n </div>\n )\n }\n\n return (\n <div\n className={`site-kit-event-checkout ${className}`}\n style={{\n background: 'var(--sk-bg, #fff)',\n border: '1px solid var(--sk-border, #e5e7eb)',\n borderRadius: '12px',\n padding: '1.5rem',\n }}\n >\n {schedule && (\n <div style={{ marginBottom: '1.25rem' }}>\n <div\n style={{\n fontSize: '0.75rem',\n textTransform: 'uppercase',\n letterSpacing: '0.08em',\n color: 'var(--sk-text-secondary, #555)',\n marginBottom: '0.25rem',\n }}\n >\n Date & Time\n </div>\n <div\n style={{\n fontSize: '1.125rem',\n fontWeight: 600,\n color: 'var(--sk-text-primary, #111)',\n }}\n >\n {formatDate(schedule.starts_at)} · {formatTime(schedule.starts_at)}\n </div>\n {spotsRemaining !== null && spotsRemaining <= 10 && spotsRemaining > 0 && (\n <div\n style={{\n marginTop: '0.5rem',\n fontSize: '0.875rem',\n color: 'var(--sk-warning, #b45309)',\n fontWeight: 500,\n }}\n >\n Only {spotsRemaining} spot{spotsRemaining === 1 ? '' : 's'} left\n </div>\n )}\n </div>\n )}\n\n <form onSubmit={handleSubmit}>\n {/* Tier selector */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '0.75rem',\n marginBottom: '1.25rem',\n }}\n >\n {lineBreakdown.map((line) => (\n <div\n key={line.key}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '1rem',\n padding: '0.875rem 1rem',\n background: 'var(--sk-surface, #f9fafb)',\n borderRadius: '8px',\n border: '1px solid var(--sk-border, #e5e7eb)',\n }}\n >\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontWeight: 600,\n color: 'var(--sk-text-primary, #111)',\n }}\n >\n {line.name}\n </div>\n <div\n style={{\n fontSize: '0.875rem',\n color: 'var(--sk-text-secondary, #555)',\n }}\n >\n {formatPrice(line.unitPrice, currency)} each\n </div>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <button\n type=\"button\"\n onClick={() => updateQty(line.key, -1)}\n disabled={line.quantity === 0}\n aria-label={`Decrease ${line.name} quantity`}\n style={{\n width: '32px',\n height: '32px',\n borderRadius: '50%',\n border: '1px solid var(--sk-border, #d1d5db)',\n background: 'var(--sk-bg, #fff)',\n color: 'var(--sk-text-primary, #111)',\n cursor: line.quantity === 0 ? 'not-allowed' : 'pointer',\n opacity: line.quantity === 0 ? 0.4 : 1,\n fontSize: '1.25rem',\n lineHeight: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n −\n </button>\n <div\n style={{\n minWidth: '2.5rem',\n textAlign: 'center',\n fontWeight: 600,\n fontSize: '1.125rem',\n }}\n >\n {line.quantity}\n </div>\n <button\n type=\"button\"\n onClick={() => updateQty(line.key, 1)}\n disabled={line.quantity >= maxPerVariant}\n aria-label={`Increase ${line.name} quantity`}\n style={{\n width: '32px',\n height: '32px',\n borderRadius: '50%',\n border: '1px solid var(--sk-border, #d1d5db)',\n background: 'var(--sk-bg, #fff)',\n color: 'var(--sk-text-primary, #111)',\n cursor: line.quantity >= maxPerVariant ? 'not-allowed' : 'pointer',\n opacity: line.quantity >= maxPerVariant ? 0.4 : 1,\n fontSize: '1.25rem',\n lineHeight: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n +\n </button>\n </div>\n </div>\n ))}\n </div>\n\n {/* Total */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n padding: '0.75rem 0',\n borderTop: '1px solid var(--sk-border, #e5e7eb)',\n borderBottom: '1px solid var(--sk-border, #e5e7eb)',\n marginBottom: '1.25rem',\n }}\n >\n <span\n style={{\n fontSize: '0.875rem',\n color: 'var(--sk-text-secondary, #555)',\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n }}\n >\n Total ({totalQuantity} {totalQuantity === 1 ? 'ticket' : 'tickets'})\n </span>\n <span\n style={{\n fontSize: '1.5rem',\n fontWeight: 700,\n color: 'var(--sk-text-primary, #111)',\n }}\n >\n {formatPrice(subtotal, currency)}\n </span>\n </div>\n\n {/* Customer info */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '0.75rem',\n marginBottom: '1rem',\n }}\n >\n <div>\n <label\n style={{\n display: 'block',\n fontSize: '0.75rem',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n color: 'var(--sk-text-secondary, #555)',\n marginBottom: '0.25rem',\n }}\n >\n Full Name\n </label>\n <input\n type=\"text\"\n required\n value={customer.name}\n onChange={(e) => updateCustomer('name', e.target.value)}\n placeholder=\"John Smith\"\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border, #d1d5db)',\n fontSize: '1rem',\n background: 'var(--sk-bg, #fff)',\n color: 'var(--sk-text-primary, #111)',\n }}\n />\n </div>\n\n <div>\n <label\n style={{\n display: 'block',\n fontSize: '0.75rem',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n color: 'var(--sk-text-secondary, #555)',\n marginBottom: '0.25rem',\n }}\n >\n Email Address\n </label>\n <input\n type=\"email\"\n required\n value={customer.email}\n onChange={(e) => updateCustomer('email', e.target.value)}\n placeholder=\"john@example.com\"\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border, #d1d5db)',\n fontSize: '1rem',\n background: 'var(--sk-bg, #fff)',\n color: 'var(--sk-text-primary, #111)',\n }}\n />\n </div>\n\n {collectPhone && (\n <div>\n <label\n style={{\n display: 'block',\n fontSize: '0.75rem',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n color: 'var(--sk-text-secondary, #555)',\n marginBottom: '0.25rem',\n }}\n >\n Phone Number\n </label>\n <input\n type=\"tel\"\n value={customer.phone || ''}\n onChange={(e) => updateCustomer('phone', e.target.value)}\n placeholder=\"(555) 123-4567\"\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border, #d1d5db)',\n fontSize: '1rem',\n background: 'var(--sk-bg, #fff)',\n color: 'var(--sk-text-primary, #111)',\n }}\n />\n </div>\n )}\n </div>\n\n {/* Card */}\n <div style={{ marginBottom: '1rem' }}>\n <label\n style={{\n display: 'block',\n fontSize: '0.75rem',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n color: 'var(--sk-text-secondary, #555)',\n marginBottom: '0.25rem',\n }}\n >\n {cardLabel}\n </label>\n <div\n id=\"sk-event-checkout-card\"\n ref={cardContainerRef}\n style={{\n minHeight: '44px',\n border: '1px solid var(--sk-border, #d1d5db)',\n borderRadius: '6px',\n padding: '0.5rem 0.75rem',\n background: 'var(--sk-bg, #fff)',\n }}\n />\n {!cardReady && (\n <p\n style={{\n fontSize: '0.75rem',\n color: 'var(--sk-text-secondary, #555)',\n marginTop: '0.25rem',\n }}\n >\n Loading card form...\n </p>\n )}\n </div>\n\n {error && (\n <div\n role=\"alert\"\n style={{\n marginBottom: '1rem',\n padding: '0.75rem 1rem',\n background: 'rgba(220, 38, 38, 0.06)',\n border: '1px solid rgba(220, 38, 38, 0.25)',\n borderRadius: '6px',\n color: '#b91c1c',\n fontSize: '0.875rem',\n }}\n >\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={loading || totalQuantity === 0 || !cardReady || overCapacity}\n style={{\n width: '100%',\n padding: '0.875rem 1rem',\n fontSize: '1rem',\n fontWeight: 600,\n borderRadius: '8px',\n border: 'none',\n background:\n loading || totalQuantity === 0 || !cardReady || overCapacity\n ? 'var(--sk-primary-hover, #94a3b8)'\n : 'var(--sk-primary, #2563eb)',\n color: 'var(--sk-primary-text, #fff)',\n cursor:\n loading || totalQuantity === 0 || !cardReady || overCapacity\n ? 'not-allowed'\n : 'pointer',\n transition: 'background 0.15s ease',\n }}\n >\n {loading\n ? 'Processing...'\n : submitText\n ? submitText\n : totalQuantity === 0\n ? 'Select tickets'\n : `Buy ${formatPrice(subtotal, currency)}`}\n </button>\n\n <p\n style={{\n textAlign: 'center',\n fontSize: '0.75rem',\n color: 'var(--sk-text-secondary, #888)',\n margin: '0.75rem 0 0',\n }}\n >\n 🔒 Secure checkout powered by Square\n </p>\n </form>\n </div>\n )\n}\n\nexport default EventCheckout\n","/**\n * @sonordev/site-kit/commerce - RegistrationForm\n * \n * Simplified registration form for free events/classes.\n */\n\n'use client'\n\nimport React, { useState } from 'react'\nimport type { RegistrationFormProps, CheckoutCustomer, AdditionalField, AdditionalFieldOption } from './types'\nimport { registerForEvent } from './api'\n\nexport function RegistrationForm({\n event,\n scheduleId,\n title = 'Register for Event',\n submitText = 'Register',\n successMessage,\n collectPhone = false,\n additionalFields = [],\n onSuccess,\n onError,\n className = '',\n formClassName = '',\n inputClassName = '',\n buttonClassName = '',\n}: RegistrationFormProps) {\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [success, setSuccess] = useState(false)\n \n const [customer, setCustomer] = useState<CheckoutCustomer>({\n email: '',\n name: '',\n phone: '',\n })\n \n const [additionalData, setAdditionalData] = useState<Record<string, string>>({})\n \n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setLoading(true)\n setError(null)\n \n try {\n const result = await registerForEvent(event.id, scheduleId, {\n ...customer,\n ...additionalData,\n })\n \n if (result.success) {\n setSuccess(true)\n onSuccess?.(result)\n } else {\n setError(result.error || 'Registration failed')\n onError?.(result.error || 'Registration failed')\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : 'An error occurred'\n setError(message)\n onError?.(message)\n } finally {\n setLoading(false)\n }\n }\n \n if (success) {\n return (\n <div className={`site-kit-registration-success ${className}`} style={{\n padding: '2rem',\n textAlign: 'center',\n background: 'rgba(var(--sk-success-rgb, 16,185,129), 0.06)',\n borderRadius: '12px',\n border: '1px solid rgba(var(--sk-success-rgb, 16,185,129), 0.2)',\n }}>\n <div style={{ fontSize: '3rem', marginBottom: '1rem' }}>🎉</div>\n <h3 style={{ margin: '0 0 0.5rem', color: 'var(--sk-success)' }}>\n You're Registered!\n </h3>\n <p style={{ color: 'var(--sk-success)', margin: 0 }}>\n {successMessage || `You've been registered for ${event.name}. Check your email for confirmation.`}\n </p>\n </div>\n )\n }\n \n return (\n <div className={`site-kit-registration ${className}`}>\n {title && (\n <h3 style={{ margin: '0 0 1.5rem', fontSize: '1.25rem', fontWeight: 600 }}>\n {title}\n </h3>\n )}\n \n <form onSubmit={handleSubmit} className={formClassName}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Full Name *\n </label>\n <input\n type=\"text\"\n required\n value={customer.name}\n onChange={(e) => setCustomer(prev => ({ ...prev, name: e.target.value }))}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n \n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Email Address *\n </label>\n <input\n type=\"email\"\n required\n value={customer.email}\n onChange={(e) => setCustomer(prev => ({ ...prev, email: e.target.value }))}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n \n {collectPhone && (\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Phone Number\n </label>\n <input\n type=\"tel\"\n value={customer.phone || ''}\n onChange={(e) => setCustomer(prev => ({ ...prev, phone: e.target.value }))}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n )}\n \n {additionalFields.map((field: AdditionalField) => (\n <div key={field.name}>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n {field.label} {field.required && '*'}\n </label>\n {field.type === 'textarea' ? (\n <textarea\n required={field.required}\n placeholder={field.placeholder}\n value={additionalData[field.name] || ''}\n onChange={(e) => setAdditionalData(prev => ({ ...prev, [field.name]: e.target.value }))}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n minHeight: '80px',\n }}\n />\n ) : field.type === 'select' && field.options ? (\n <select\n required={field.required}\n value={additionalData[field.name] || ''}\n onChange={(e) => setAdditionalData(prev => ({ ...prev, [field.name]: e.target.value }))}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n background: 'var(--sk-bg)',\n }}\n >\n <option value=\"\">Select...</option>\n {field.options.map((opt: AdditionalFieldOption) => (\n <option key={opt.value} value={opt.value}>{opt.label}</option>\n ))}\n </select>\n ) : (\n <input\n type={field.type || 'text'}\n required={field.required}\n placeholder={field.placeholder}\n value={additionalData[field.name] || ''}\n onChange={(e) => setAdditionalData(prev => ({ ...prev, [field.name]: e.target.value }))}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n )}\n </div>\n ))}\n </div>\n \n {error && (\n <div style={{\n marginTop: '1rem',\n padding: '0.75rem',\n background: 'rgba(var(--sk-error-rgb, 239,68,68), 0.06)',\n border: '1px solid rgba(var(--sk-error-rgb, 239,68,68), 0.2)',\n borderRadius: '6px',\n color: 'var(--sk-error)',\n fontSize: '0.875rem',\n }}>\n {error}\n </div>\n )}\n \n <button\n type=\"submit\"\n disabled={loading}\n className={buttonClassName}\n style={{\n width: '100%',\n marginTop: '1.5rem',\n padding: '0.875rem',\n fontSize: '1rem',\n fontWeight: 600,\n borderRadius: '8px',\n border: 'none',\n background: loading ? 'var(--sk-primary-hover)' : 'var(--sk-primary)',\n color: 'white',\n cursor: loading ? 'not-allowed' : 'pointer',\n }}\n >\n {loading ? 'Registering...' : submitText}\n </button>\n </form>\n </div>\n )\n}\n\nexport default RegistrationForm\n","/**\n * @sonordev/site-kit/commerce - CalendarView\n * \n * Monthly calendar view for displaying events.\n */\n\n'use client'\n\nimport React, { useEffect, useState, useMemo } from 'react'\nimport type { CommerceOffering, CommerceSchedule } from './types'\nimport { fetchUpcomingEvents } from './api'\nimport { formatTime } from './utils'\n\nexport interface CalendarViewProps {\n /** Pre-loaded events (optional - will fetch if not provided) */\n events?: CommerceOffering[]\n /** Initial month to display (defaults to current) */\n initialDate?: Date\n /** Category filter */\n category?: string\n /** Callback when event is clicked */\n onEventClick?: (event: CommerceOffering, schedule: CommerceSchedule) => void\n /** Callback when day is clicked */\n onDayClick?: (date: Date, events: EventOnDay[]) => void\n /** Show navigation arrows */\n showNavigation?: boolean\n /** Show month/year header */\n showHeader?: boolean\n /** First day of week (0 = Sunday, 1 = Monday) */\n weekStartsOn?: 0 | 1\n /** Minimum date to show */\n minDate?: Date\n /** Maximum date to show */\n maxDate?: Date\n /** How to display events in cells: 'title' = text, 'image' = thumbnail with details on hover */\n eventDisplay?: 'title' | 'image'\n /** Custom class names */\n className?: string\n headerClassName?: string\n dayClassName?: string\n eventClassName?: string\n todayClassName?: string\n}\n\nexport interface EventOnDay {\n event: CommerceOffering\n schedule: CommerceSchedule\n}\n\ninterface DayData {\n date: Date\n isCurrentMonth: boolean\n isToday: boolean\n events: EventOnDay[]\n}\n\nconst DAYS_SHORT = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\nconst MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n]\n\nfunction formatDateForTooltip(dateStr: string): string {\n const d = new Date(dateStr)\n return d.toLocaleDateString('en-US', { weekday: 'short', month: 'short', day: 'numeric', year: 'numeric' })\n}\n\nfunction CalendarEventCell({\n item,\n eventDisplay,\n eventClassName,\n onEventClick,\n formatTime,\n}: {\n item: EventOnDay\n eventDisplay: 'title' | 'image'\n eventClassName: string\n onEventClick: (e: React.MouseEvent) => void\n formatTime: (dateStr: string) => string\n}) {\n const [hover, setHover] = React.useState(false)\n const { event, schedule } = item\n const imageUrl = event.featured_image_url\n // Public styling hooks: consuming sites theme chips per category/type via CSS\n // attribute selectors, e.g. .site-kit-calendar-event[data-category=\"pto\"]\n const dataAttrs = {\n 'data-category': event.category?.slug,\n 'data-offering-type': event.type,\n }\n\n if (eventDisplay === 'image') {\n return (\n <div\n className={`site-kit-calendar-event-image-wrapper ${eventClassName}`}\n {...dataAttrs}\n style={{ position: 'relative' }}\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n >\n <button\n onClick={onEventClick}\n className={`site-kit-calendar-event site-kit-calendar-event-image ${eventClassName}`}\n {...dataAttrs}\n style={{\n display: 'block',\n width: '100%',\n height: '28px',\n padding: 0,\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n overflow: 'hidden',\n background: imageUrl ? 'transparent' : 'rgba(var(--sk-primary-rgb), 0.125)',\n }}\n >\n {imageUrl ? (\n <img\n src={imageUrl}\n alt={event.name}\n style={{\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n }}\n />\n ) : (\n <span style={{\n fontSize: '0.65rem',\n color: 'var(--sk-primary)',\n fontWeight: 500,\n padding: '2px 4px',\n display: 'block',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}>\n {event.name}\n </span>\n )}\n </button>\n {/* Hover tooltip with event details */}\n <div\n className=\"site-kit-calendar-event-tooltip\"\n style={{\n position: 'absolute',\n bottom: '100%',\n left: '50%',\n transform: 'translateX(-50%) translateY(-4px)',\n padding: '8px 12px',\n background: 'var(--sk-text-primary)',\n color: 'var(--sk-bg)',\n borderRadius: '8px',\n fontSize: '0.75rem',\n minWidth: '180px',\n maxWidth: '220px',\n boxShadow: '0 4px 12px rgba(0,0,0,0.2)',\n pointerEvents: 'none',\n opacity: hover ? 1 : 0,\n visibility: hover ? 'visible' : 'hidden',\n transition: 'opacity 0.15s, visibility 0.15s',\n zIndex: 50,\n }}\n >\n <div style={{ fontWeight: 600, marginBottom: '4px' }}>{event.name}</div>\n <div style={{ opacity: 0.9, fontSize: '0.7rem' }}>\n {formatDateForTooltip(schedule.starts_at)} • {formatTime(schedule.starts_at)}\n </div>\n {event.location && (\n <div style={{ opacity: 0.8, fontSize: '0.65rem', marginTop: '2px' }}>{event.location}</div>\n )}\n </div>\n </div>\n )\n }\n\n // Title mode (default fallback)\n return (\n <button\n onClick={onEventClick}\n className={`site-kit-calendar-event ${eventClassName}`}\n {...dataAttrs}\n style={{\n display: 'block',\n width: '100%',\n padding: '2px 4px',\n fontSize: '0.7rem',\n fontWeight: 500,\n textAlign: 'left',\n border: 'none',\n borderRadius: '3px',\n background: 'rgba(var(--sk-primary-rgb), 0.125)',\n color: 'var(--sk-primary)',\n cursor: 'pointer',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n }}\n title={`${event.name} - ${formatTime(schedule.starts_at)}`}\n >\n {event.name}\n </button>\n )\n}\n\nexport function CalendarView({\n events: propEvents,\n initialDate,\n category,\n onEventClick,\n onDayClick,\n showNavigation = true,\n showHeader = true,\n weekStartsOn = 0,\n minDate,\n maxDate,\n eventDisplay = 'image',\n className = '',\n headerClassName = '',\n dayClassName = '',\n eventClassName = '',\n todayClassName = '',\n}: CalendarViewProps) {\n const [currentDate, setCurrentDate] = useState(initialDate || new Date())\n const [events, setEvents] = useState<CommerceOffering[]>(propEvents || [])\n const [loading, setLoading] = useState(!propEvents)\n \n // Fetch events if not provided\n useEffect(() => {\n if (propEvents) {\n setEvents(propEvents)\n return\n }\n \n async function load() {\n setLoading(true)\n try {\n // Fetch events for a reasonable range (6 months)\n const data = await fetchUpcomingEvents({ limit: 100, category })\n setEvents(data)\n } catch (e) {\n console.error('Failed to load events:', e)\n } finally {\n setLoading(false)\n }\n }\n \n load()\n }, [propEvents, category])\n \n // Build calendar grid\n const calendarDays = useMemo(() => {\n const year = currentDate.getFullYear()\n const month = currentDate.getMonth()\n \n // First day of the month\n const firstDay = new Date(year, month, 1)\n // Last day of the month\n const lastDay = new Date(year, month + 1, 0)\n \n // Start from the first day of the week containing the first of the month\n const startDate = new Date(firstDay)\n const dayOfWeek = startDate.getDay()\n const daysToSubtract = (dayOfWeek - weekStartsOn + 7) % 7\n startDate.setDate(startDate.getDate() - daysToSubtract)\n \n // End on the last day of the week containing the last of the month\n const endDate = new Date(lastDay)\n const endDayOfWeek = endDate.getDay()\n const daysToAdd = (6 - endDayOfWeek + weekStartsOn) % 7\n endDate.setDate(endDate.getDate() + daysToAdd)\n \n // Build event lookup by date\n const eventsByDate = new Map<string, EventOnDay[]>()\n \n events.forEach(event => {\n const schedules = event.schedules || []\n schedules.forEach(schedule => {\n const scheduleDate = new Date(schedule.starts_at)\n const dateKey = `${scheduleDate.getFullYear()}-${scheduleDate.getMonth()}-${scheduleDate.getDate()}`\n \n if (!eventsByDate.has(dateKey)) {\n eventsByDate.set(dateKey, [])\n }\n eventsByDate.get(dateKey)!.push({ event, schedule })\n })\n })\n \n // Generate days\n const days: DayData[] = []\n const today = new Date()\n const todayKey = `${today.getFullYear()}-${today.getMonth()}-${today.getDate()}`\n \n const current = new Date(startDate)\n while (current <= endDate) {\n const dateKey = `${current.getFullYear()}-${current.getMonth()}-${current.getDate()}`\n \n days.push({\n date: new Date(current),\n isCurrentMonth: current.getMonth() === month,\n isToday: dateKey === todayKey,\n events: eventsByDate.get(dateKey) || [],\n })\n \n current.setDate(current.getDate() + 1)\n }\n \n return days\n }, [currentDate, events, weekStartsOn])\n \n // Navigation\n const goToPreviousMonth = () => {\n const newDate = new Date(currentDate)\n newDate.setMonth(newDate.getMonth() - 1)\n if (!minDate || newDate >= minDate) {\n setCurrentDate(newDate)\n }\n }\n \n const goToNextMonth = () => {\n const newDate = new Date(currentDate)\n newDate.setMonth(newDate.getMonth() + 1)\n if (!maxDate || newDate <= maxDate) {\n setCurrentDate(newDate)\n }\n }\n \n const goToToday = () => {\n setCurrentDate(new Date())\n }\n \n // Day headers adjusted for week start\n const dayHeaders = weekStartsOn === 1\n ? [...DAYS_SHORT.slice(1), DAYS_SHORT[0]]\n : DAYS_SHORT\n \n const handleEventClick = (e: React.MouseEvent, event: CommerceOffering, schedule: CommerceSchedule) => {\n e.stopPropagation()\n if (onEventClick) {\n onEventClick(event, schedule)\n } else {\n window.location.href = `/events/${event.slug}`\n }\n }\n \n const handleDayClick = (day: DayData) => {\n if (onDayClick) {\n onDayClick(day.date, day.events)\n }\n }\n \n return (\n <div className={`site-kit-calendar ${className}`} style={{\n background: 'var(--sk-bg)',\n borderRadius: '12px',\n overflow: 'hidden',\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\n }}>\n {/* Header */}\n {showHeader && (\n <div \n className={`site-kit-calendar-header ${headerClassName}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '1rem 1.25rem',\n borderBottom: '1px solid var(--sk-border)',\n }}\n >\n {showNavigation && (\n <button\n onClick={goToPreviousMonth}\n style={{\n padding: '0.5rem',\n border: 'none',\n background: 'var(--sk-surface)',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '1.25rem',\n lineHeight: 1,\n }}\n aria-label=\"Previous month\" data-sk-part=\"calendar-nav-prev\"\n >\n ←\n </button>\n )}\n \n <div style={{ textAlign: 'center' }}>\n <h2 data-sk-part=\"calendar-month-title\" style={{ margin: 0, fontSize: '1.25rem', fontWeight: 600 }}>\n {MONTHS[currentDate.getMonth()]} {currentDate.getFullYear()}\n </h2>\n {showNavigation && (\n <button\n onClick={goToToday}\n style={{\n marginTop: '0.25rem',\n padding: '0.25rem 0.5rem',\n fontSize: '0.75rem',\n border: 'none',\n background: 'transparent',\n color: 'var(--sk-primary)',\n cursor: 'pointer',\n }}\n >\n Today\n </button>\n )}\n </div>\n \n {showNavigation && (\n <button\n onClick={goToNextMonth}\n style={{\n padding: '0.5rem',\n border: 'none',\n background: 'var(--sk-surface)',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '1.25rem',\n lineHeight: 1,\n }}\n aria-label=\"Next month\" data-sk-part=\"calendar-nav-next\"\n >\n →\n </button>\n )}\n </div>\n )}\n \n {/* Day headers */}\n <div style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n borderBottom: '1px solid var(--sk-border)',\n }}>\n {dayHeaders.map(day => (\n <div\n key={day}\n style={{\n padding: '0.75rem 0.5rem',\n textAlign: 'center',\n fontSize: '0.75rem',\n fontWeight: 600,\n color: 'var(--sk-text-secondary)',\n textTransform: 'uppercase',\n }}\n >\n {day}\n </div>\n ))}\n </div>\n \n {/* Calendar grid */}\n <div style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n }}>\n {calendarDays.map((day, index) => (\n <div\n key={index}\n onClick={() => handleDayClick(day)}\n className={`site-kit-calendar-day ${dayClassName} ${day.isToday ? `site-kit-calendar-today ${todayClassName}` : ''}`}\n style={{\n minHeight: '100px',\n padding: '0.5rem',\n borderRight: (index + 1) % 7 !== 0 ? '1px solid var(--sk-border)' : 'none',\n borderBottom: '1px solid var(--sk-border)',\n background: day.isCurrentMonth ? 'var(--sk-bg)' : 'var(--sk-bg-elevated)',\n cursor: day.events.length > 0 || onDayClick ? 'pointer' : 'default',\n }}\n >\n <div style={{\n display: 'flex',\n justifyContent: 'flex-end',\n marginBottom: '0.25rem',\n }}>\n <span style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: '50%',\n fontSize: '0.875rem',\n fontWeight: day.isToday ? 600 : 400,\n color: day.isToday ? 'var(--sk-bg)' : (day.isCurrentMonth ? 'var(--sk-text-primary)' : 'var(--sk-text-secondary)'),\n background: day.isToday ? 'var(--sk-primary)' : 'transparent',\n }}>\n {day.date.getDate()}\n </span>\n </div>\n \n {/* Events */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '2px' }}>\n {day.events.slice(0, 3).map((item) => (\n <CalendarEventCell\n key={`${item.event.id}-${item.schedule.id}`}\n item={item}\n eventDisplay={eventDisplay}\n eventClassName={eventClassName}\n onEventClick={(e) => handleEventClick(e, item.event, item.schedule)}\n formatTime={formatTime}\n />\n ))}\n {day.events.length > 3 && (\n <span style={{\n fontSize: '0.65rem',\n color: 'var(--sk-text-secondary)',\n textAlign: 'center',\n }}>\n +{day.events.length - 3} more\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n \n {loading && (\n <div style={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'rgba(255,255,255,0.8)',\n }}>\n Loading...\n </div>\n )}\n </div>\n )\n}\n\nexport default CalendarView\n","/**\n * EventsAgenda — month-grouped event list (the Ludlow calendar generalized).\n *\n * For sparse community/event calendars an agenda reads far better than a\n * month grid, especially on phones — this is the layout Ludlow PTO shipped\n * after forking the grid. Headless-first: every element carries\n * data-sk-part, rows carry data-category / data-offering-type (same contract\n * as CalendarView chips), so two-scheme coloring is site CSS:\n *\n * [data-sk-part=\"agenda-date\"][data-category=\"pto\"] { background: red }\n *\n * Handles what the grid historically couldn't: multi-day ranges (an event\n * appears once per month it overlaps, \"Sep 21-25\"), and all-day events\n * (schedule.all_day when the API provides it, falling back to the\n * offering-level metadata.all_day convention).\n *\n * No hooks, no browser APIs — renders fully at SSR. Interactivity\n * (filter pills etc.) belongs to the site around it.\n */\n\nimport React from 'react'\nimport type { CommerceOffering, CommerceSchedule } from './types'\n\nexport interface AgendaItem {\n offering: CommerceOffering\n schedule: CommerceSchedule\n}\n\nexport interface EventsAgendaProps {\n events: CommerceOffering[]\n /** IANA zone for grouping/formatting. Default: each schedule's own timezone, else UTC. */\n timeZone?: string\n locale?: string\n /** Hide events that already ended. Default true. */\n upcomingOnly?: boolean\n className?: string\n emptyLabel?: string\n /** Replace a row's meta line (time · location · blurb). */\n renderMeta?: (item: AgendaItem) => React.ReactNode\n}\n\ninterface Parts {\n y: number\n m: number\n d: number\n}\n\nfunction isAllDay(offering: CommerceOffering, schedule: CommerceSchedule): boolean {\n const sched = schedule as CommerceSchedule & { all_day?: boolean }\n if (typeof sched.all_day === 'boolean') return sched.all_day\n return Boolean((offering.metadata as { all_day?: boolean } | undefined)?.all_day)\n}\n\nfunction zoneFor(schedule: CommerceSchedule, override?: string): string {\n return override || (schedule as CommerceSchedule & { timezone?: string }).timezone || 'UTC'\n}\n\nfunction dateParts(iso: string, timeZone: string): Parts {\n const [y, m, d] = new Intl.DateTimeFormat('en-CA', {\n timeZone,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n })\n .format(new Date(iso))\n .split('-')\n .map(Number)\n return { y, m, d }\n}\n\nfunction fmt(iso: string, timeZone: string, locale: string, opts: Intl.DateTimeFormatOptions): string {\n return new Intl.DateTimeFormat(locale, { timeZone, ...opts }).format(new Date(iso))\n}\n\n/** \"Aug 26\" / \"Sep 21-25\" / \"Dec 21 - Jan 1\" */\nfunction span(item: AgendaItem, timeZone: string, locale: string): string {\n const start = fmt(item.schedule.starts_at, timeZone, locale, { month: 'short', day: 'numeric' })\n const endsAt = item.schedule.ends_at\n if (!endsAt) return start\n const end = fmt(endsAt, timeZone, locale, { month: 'short', day: 'numeric' })\n if (end === start) return start\n const sameMonth = start.split(' ')[0] === end.split(' ')[0]\n return sameMonth ? `${start}-${end.split(' ')[1]}` : `${start} - ${end}`\n}\n\nexport function EventsAgenda({\n events,\n timeZone,\n locale = 'en-US',\n upcomingOnly = true,\n className,\n emptyLabel = 'Nothing scheduled yet. Check back soon.',\n renderMeta,\n}: EventsAgendaProps) {\n const now = Date.now()\n\n const items: AgendaItem[] = []\n for (const offering of events) {\n for (const schedule of offering.schedules || []) {\n const end = new Date(schedule.ends_at || schedule.starts_at).getTime()\n if (upcomingOnly && end < now) continue\n items.push({ offering, schedule })\n }\n }\n items.sort((a, b) => a.schedule.starts_at.localeCompare(b.schedule.starts_at))\n\n // Group by every month an item OVERLAPS (a Dec 21 - Jan 1 break shows in both).\n const months = new Map<string, { label: string; items: AgendaItem[] }>()\n for (const item of items) {\n const zone = zoneFor(item.schedule, timeZone)\n const start = dateParts(item.schedule.starts_at, zone)\n const end = item.schedule.ends_at ? dateParts(item.schedule.ends_at, zone) : start\n for (let idx = start.y * 12 + start.m - 1; idx <= end.y * 12 + end.m - 1; idx++) {\n const y = Math.floor(idx / 12)\n const m = (idx % 12) + 1\n const key = `${y}-${String(m).padStart(2, '0')}`\n if (!months.has(key)) {\n const label = new Intl.DateTimeFormat(locale, {\n timeZone: zone,\n month: 'long',\n year: 'numeric',\n }).format(new Date(Date.UTC(y, m - 1, 15)))\n months.set(key, { label, items: [] })\n }\n months.get(key)!.items.push(item)\n }\n }\n\n if (items.length === 0) {\n return (\n <div className={className} data-sk-part=\"agenda\">\n <p data-sk-part=\"agenda-empty\">{emptyLabel}</p>\n </div>\n )\n }\n\n return (\n <div className={className} data-sk-part=\"agenda\">\n {[...months.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, month]) => (\n <section key={key} data-sk-part=\"agenda-month\" aria-label={month.label}>\n <h3 data-sk-part=\"agenda-month-title\">{month.label}</h3>\n {month.items.map(item => {\n const zone = zoneFor(item.schedule, timeZone)\n const allDay = isAllDay(item.offering, item.schedule)\n const category = item.offering.category?.slug\n return (\n <div\n key={`${key}-${item.offering.id}-${item.schedule.id}`}\n data-sk-part=\"agenda-row\"\n {...(category ? { 'data-category': category } : {})}\n data-offering-type={item.offering.type}\n >\n <div\n data-sk-part=\"agenda-date\"\n {...(category ? { 'data-category': category } : {})}\n >\n <span data-sk-part=\"agenda-weekday\">\n {fmt(item.schedule.starts_at, zone, locale, { weekday: 'short' })}\n </span>\n <span data-sk-part=\"agenda-span\">{span(item, zone, locale)}</span>\n </div>\n <div data-sk-part=\"agenda-body\">\n <p data-sk-part=\"agenda-name\">{item.offering.name}</p>\n <p data-sk-part=\"agenda-meta\">\n {renderMeta\n ? renderMeta(item)\n : [\n allDay\n ? null\n : fmt(item.schedule.starts_at, zone, locale, {\n hour: 'numeric',\n minute: '2-digit',\n }).replace(':00', ''),\n item.offering.location,\n item.offering.short_description,\n ]\n .filter(Boolean)\n .join(' · ')}\n </p>\n </div>\n </div>\n )\n })}\n </section>\n ))}\n </div>\n )\n}\n","/**\n * @sonordev/site-kit/commerce - EventModal\n * \n * Modal popup for event registration and checkout.\n * Handles both free registration and paid tickets via Stripe/Square.\n */\n\n'use client'\n\nimport React, { useState, useEffect, useCallback, useRef } from 'react'\nimport type { CommerceOffering, CommerceSchedule, CheckoutCustomer, CheckoutResult } from './types'\nimport type { ProcessorConfig } from './api'\nimport { registerForEvent, createCheckoutSession, fetchProcessorConfig } from './api'\n\nfunction loadSquareSDK(environment: string): Promise<void> {\n return new Promise((resolve, reject) => {\n if (typeof window === 'undefined') return reject(new Error('No window'))\n if ((window as any).Square) return resolve()\n const script = document.createElement('script')\n script.src = environment === 'sandbox'\n ? 'https://sandbox.web.squarecdn.com/v1/square.js'\n : 'https://web.squarecdn.com/v1/square.js'\n script.onload = () => resolve()\n script.onerror = () => reject(new Error('Failed to load Square SDK'))\n document.head.appendChild(script)\n })\n}\nimport { formatDate, formatTime, formatPrice, getSpotsRemaining, isEventSoldOut } from './utils'\n\nexport interface EventModalProps {\n /** Event to display */\n event: CommerceOffering | null\n /** Specific schedule (optional - uses first upcoming if not provided) */\n schedule?: CommerceSchedule | null\n /** Whether modal is open */\n isOpen: boolean\n /** Close modal callback */\n onClose: () => void\n /** Success callback */\n onSuccess?: (result: CheckoutResult) => void\n /** Error callback */\n onError?: (error: string) => void\n /** Collect phone number */\n collectPhone?: boolean\n /** Additional form fields */\n additionalFields?: AdditionalField[]\n /** Custom class names */\n className?: string\n overlayClassName?: string\n contentClassName?: string\n}\n\nexport interface AdditionalField {\n name: string\n label: string\n type?: 'text' | 'email' | 'tel' | 'textarea' | 'select' | 'number'\n required?: boolean\n placeholder?: string\n options?: { value: string; label: string }[]\n}\n\nexport function EventModal({\n event,\n schedule: propSchedule,\n isOpen,\n onClose,\n onSuccess,\n onError,\n collectPhone = false,\n additionalFields = [],\n className = '',\n overlayClassName = '',\n contentClassName = '',\n}: EventModalProps) {\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [success, setSuccess] = useState(false)\n const [quantity, setQuantity] = useState(1)\n \n const [customer, setCustomer] = useState<CheckoutCustomer>({\n email: '',\n name: '',\n phone: '',\n })\n \n const [additionalData, setAdditionalData] = useState<Record<string, string>>({})\n const [processor, setProcessor] = useState<'stripe' | 'square' | null>(null)\n const [processorConfig, setProcessorConfig] = useState<ProcessorConfig | null>(null)\n const [squareCard, setSquareCard] = useState<any>(null)\n const [cardReady, setCardReady] = useState(false)\n const cardContainerRef = useRef<HTMLDivElement>(null)\n\n // Get schedule\n const schedule = propSchedule || event?.schedules?.[0] || (event as any)?.next_schedule\n \n // Fetch processor config when modal opens for a paid event, then mount Square card element\n useEffect(() => {\n if (!isOpen) return\n\n fetchProcessorConfig().then(async (config) => {\n setProcessorConfig(config)\n if (config?.processor) setProcessor(config.processor)\n\n if (config?.processor === 'square' && config.squareAppId && config.squareLocationId) {\n try {\n await loadSquareSDK(config.squareEnvironment || 'production')\n const Square = (window as any).Square\n const payments = Square.payments(config.squareAppId, config.squareLocationId)\n const card = await payments.card({\n style: {\n '.input-container': {\n borderColor: '#d1d5db',\n borderRadius: '6px',\n },\n '.input-container.is-focus': {\n borderColor: '#2563eb',\n },\n '.input-container.is-error': {\n borderColor: '#dc2626',\n },\n },\n })\n await card.attach('#sq-card-container')\n setSquareCard(card)\n setCardReady(true)\n } catch (err) {\n console.error('[Commerce] Square card init failed:', err)\n }\n }\n })\n\n return () => {\n // Destroy card element on close so it re-mounts cleanly next time\n setSquareCard((prev: any) => {\n if (prev) {\n prev.destroy?.().catch(() => {})\n }\n return null\n })\n setCardReady(false)\n setProcessorConfig(null)\n }\n }, [isOpen])\n\n // Reset state when modal opens with new event\n useEffect(() => {\n if (isOpen && event) {\n setError(null)\n setSuccess(false)\n setQuantity(1)\n setCustomer({ email: '', name: '', phone: '' })\n setAdditionalData({})\n }\n }, [isOpen, event?.id])\n \n // Handle escape key\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose()\n }\n }\n \n document.addEventListener('keydown', handleEscape)\n return () => document.removeEventListener('keydown', handleEscape)\n }, [isOpen, onClose])\n \n // Prevent body scroll when open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = ''\n }\n return () => {\n document.body.style.overflow = ''\n }\n }, [isOpen])\n \n const handleOverlayClick = useCallback((e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n onClose()\n }\n }, [onClose])\n \n if (!isOpen || !event) return null\n \n const isFree = !event.price || event.price === 0\n const soldOut = schedule ? isEventSoldOut(schedule.capacity, schedule.current_registrations) : false\n const spotsRemaining = schedule ? getSpotsRemaining(schedule.capacity, schedule.current_registrations) : null\n const total = event.price ? event.price * quantity : 0\n \n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n \n if (!schedule) {\n setError('No schedule available for this event')\n return\n }\n \n setLoading(true)\n setError(null)\n \n try {\n if (isFree) {\n // Free event registration\n const result = await registerForEvent(event.id, schedule.id, {\n ...customer,\n ...additionalData,\n })\n \n if (result.success) {\n setSuccess(true)\n onSuccess?.(result)\n } else {\n setError(result.error || 'Registration failed')\n onError?.(result.error || 'Registration failed')\n }\n } else {\n // Paid checkout — inline card if Square card is mounted, otherwise redirect\n let sourceId: string | undefined\n\n if (squareCard && cardReady) {\n const tokenResult = await squareCard.tokenize()\n if (tokenResult.status !== 'OK') {\n const msg = tokenResult.errors?.[0]?.message || 'Card verification failed. Please check your card details.'\n setError(msg)\n onError?.(msg)\n setLoading(false)\n return\n }\n sourceId = tokenResult.token\n }\n\n const result = await createCheckoutSession({\n offeringId: event.id,\n scheduleId: schedule.id,\n quantity,\n customer: {\n ...customer,\n ...additionalData,\n },\n sourceId,\n successUrl: window.location.href + '?registration=success',\n cancelUrl: window.location.href,\n })\n\n if (result.success && !result.payment_url) {\n // Inline payment completed — no redirect needed\n setSuccess(true)\n onSuccess?.(result)\n } else if (result.success && result.payment_url) {\n // Fallback: redirect to hosted payment page\n window.location.href = result.payment_url\n } else {\n setError(result.error || 'Checkout failed')\n onError?.(result.error || 'Checkout failed')\n }\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : 'An error occurred'\n setError(message)\n onError?.(message)\n } finally {\n setLoading(false)\n }\n }\n \n const updateCustomer = (field: keyof CheckoutCustomer, value: string) => {\n setCustomer(prev => ({ ...prev, [field]: value }))\n }\n \n return (\n <div\n className={`site-kit-modal-overlay ${overlayClassName}`}\n onClick={handleOverlayClick}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 9999,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '1rem',\n background: 'rgba(0, 0, 0, 0.5)',\n backdropFilter: 'blur(4px)',\n }}\n >\n <div\n className={`site-kit-modal ${className}`}\n style={{\n position: 'relative',\n width: '100%',\n maxWidth: '500px',\n maxHeight: '90vh',\n overflow: 'auto',\n background: 'var(--sk-bg)',\n borderRadius: '16px',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n }}\n onClick={e => e.stopPropagation()}\n >\n {/* Close button */}\n <button\n onClick={onClose}\n style={{\n position: 'absolute',\n top: '1rem',\n right: '1rem',\n padding: '0.5rem',\n border: 'none',\n background: 'var(--sk-surface)',\n borderRadius: '50%',\n cursor: 'pointer',\n fontSize: '1.25rem',\n lineHeight: 1,\n width: '36px',\n height: '36px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10,\n }}\n aria-label=\"Close\"\n >\n ×\n </button>\n \n {/* Event header */}\n {event.featured_image_url && (\n <div style={{ position: 'relative' }}>\n <img\n src={event.featured_image_url}\n alt={event.name}\n style={{\n width: '100%',\n height: '180px',\n objectFit: 'cover',\n borderRadius: '16px 16px 0 0',\n }}\n />\n {soldOut && (\n <div style={{\n position: 'absolute',\n top: '1rem',\n left: '1rem',\n background: 'var(--sk-error)',\n color: 'var(--sk-bg)',\n padding: '0.25rem 0.75rem',\n borderRadius: '4px',\n fontSize: '0.875rem',\n fontWeight: 600,\n }}>\n Sold Out\n </div>\n )}\n </div>\n )}\n \n <div className={`site-kit-modal-content ${contentClassName}`} style={{ padding: '1.5rem' }}>\n {/* Success state */}\n {success ? (\n <div style={{ textAlign: 'center', padding: '2rem 0' }}>\n <div style={{ fontSize: '4rem', marginBottom: '1rem' }}>🎉</div>\n <h2 style={{ margin: '0 0 0.5rem', color: 'var(--sk-success)' }}>\n You're Registered!\n </h2>\n <p style={{ color: 'var(--sk-success)', margin: '0 0 1.5rem' }}>\n Check your email for confirmation details.\n </p>\n <button\n onClick={onClose}\n style={{\n padding: '0.75rem 2rem',\n fontSize: '1rem',\n fontWeight: 500,\n border: 'none',\n borderRadius: '8px',\n background: 'var(--sk-primary)',\n color: 'var(--sk-bg)',\n cursor: 'pointer',\n }}\n >\n Done\n </button>\n </div>\n ) : (\n <>\n {/* Event info */}\n <div style={{ marginBottom: '1.5rem' }}>\n <h2 style={{ margin: '0 0 0.5rem', fontSize: '1.5rem', fontWeight: 600, paddingRight: '2rem' }}>\n {event.name}\n </h2>\n \n {schedule && (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '1rem', color: 'var(--sk-text-secondary)', fontSize: '0.9rem' }}>\n <span>📅 {formatDate(schedule.starts_at)}</span>\n <span>🕐 {formatTime(schedule.starts_at)}</span>\n {event.location && <span>📍 {event.location}</span>}\n </div>\n )}\n \n {event.short_description && (\n <p style={{ margin: '0.75rem 0 0', color: 'var(--sk-text-secondary)', fontSize: '0.9rem' }}>\n {event.short_description}\n </p>\n )}\n \n {/* Capacity warning */}\n {spotsRemaining !== null && spotsRemaining <= 10 && spotsRemaining > 0 && (\n <div style={{\n marginTop: '0.75rem',\n padding: '0.5rem 0.75rem',\n background: 'rgba(var(--sk-warning-rgb, 245,158,11), 0.1)',\n borderRadius: '6px',\n color: 'var(--sk-warning)',\n fontSize: '0.875rem',\n }}>\n ⚠️ Only {spotsRemaining} spot{spotsRemaining > 1 ? 's' : ''} remaining!\n </div>\n )}\n </div>\n \n {soldOut ? (\n <div style={{\n padding: '2rem',\n textAlign: 'center',\n background: 'var(--sk-surface)',\n borderRadius: '8px',\n }}>\n <p style={{ margin: 0, color: 'var(--sk-text-secondary)' }}>\n This event is sold out. Check back for future dates!\n </p>\n </div>\n ) : (\n <form onSubmit={handleSubmit}>\n {/* Price / Quantity */}\n {!isFree && event.price_is_public && (\n <div style={{\n padding: '1rem',\n background: 'var(--sk-bg-elevated)',\n borderRadius: '8px',\n marginBottom: '1rem',\n }}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <div>\n <span style={{ fontWeight: 600, fontSize: '1.25rem' }}>\n {formatPrice(event.price!, event.currency)}\n </span>\n <span style={{ color: 'var(--sk-text-secondary)', fontSize: '0.875rem' }}> per ticket</span>\n </div>\n \n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <label style={{ fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>Qty:</label>\n <select\n value={quantity}\n onChange={(e) => setQuantity(Number(e.target.value))}\n style={{\n padding: '0.5rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n background: 'var(--sk-bg)',\n fontSize: '1rem',\n }}\n >\n {[...Array(Math.min(10, spotsRemaining || 10))].map((_, i) => (\n <option key={i + 1} value={i + 1}>{i + 1}</option>\n ))}\n </select>\n </div>\n </div>\n \n {quantity > 1 && (\n <div style={{ \n marginTop: '0.75rem', \n paddingTop: '0.75rem', \n borderTop: '1px solid var(--sk-border)',\n display: 'flex',\n justifyContent: 'space-between',\n }}>\n <span style={{ fontWeight: 500 }}>Total</span>\n <span style={{ fontWeight: 600, fontSize: '1.125rem' }}>\n {formatPrice(total, event.currency)}\n </span>\n </div>\n )}\n </div>\n )}\n \n {/* Customer info */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.875rem' }}>\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Full Name *\n </label>\n <input\n type=\"text\"\n required\n value={customer.name}\n onChange={(e) => updateCustomer('name', e.target.value)}\n placeholder=\"John Smith\"\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n \n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Email Address *\n </label>\n <input\n type=\"email\"\n required\n value={customer.email}\n onChange={(e) => updateCustomer('email', e.target.value)}\n placeholder=\"john@example.com\"\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n \n {collectPhone && (\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Phone Number\n </label>\n <input\n type=\"tel\"\n value={customer.phone || ''}\n onChange={(e) => updateCustomer('phone', e.target.value)}\n placeholder=\"(555) 123-4567\"\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n )}\n \n {/* Additional fields */}\n {additionalFields.map(field => (\n <div key={field.name}>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n {field.label} {field.required && '*'}\n </label>\n {field.type === 'textarea' ? (\n <textarea\n required={field.required}\n placeholder={field.placeholder}\n value={additionalData[field.name] || ''}\n onChange={(e) => setAdditionalData(prev => ({ ...prev, [field.name]: e.target.value }))}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n minHeight: '80px',\n resize: 'vertical',\n }}\n />\n ) : field.type === 'select' && field.options ? (\n <select\n required={field.required}\n value={additionalData[field.name] || ''}\n onChange={(e) => setAdditionalData(prev => ({ ...prev, [field.name]: e.target.value }))}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n background: 'var(--sk-bg)',\n }}\n >\n <option value=\"\">Select...</option>\n {field.options.map(opt => (\n <option key={opt.value} value={opt.value}>{opt.label}</option>\n ))}\n </select>\n ) : (\n <input\n type={field.type || 'text'}\n required={field.required}\n placeholder={field.placeholder}\n value={additionalData[field.name] || ''}\n onChange={(e) => setAdditionalData(prev => ({ ...prev, [field.name]: e.target.value }))}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n )}\n </div>\n ))}\n </div>\n \n {/* Inline Square card element */}\n {!isFree && processor === 'square' && (\n <div style={{ marginTop: '1rem' }}>\n <label style={{\n display: 'block',\n fontSize: '0.875rem',\n fontWeight: 500,\n color: 'var(--sk-text-primary)',\n marginBottom: '0.375rem',\n }}>\n Card Details *\n </label>\n <div\n id=\"sq-card-container\"\n ref={cardContainerRef}\n style={{\n minHeight: '42px',\n border: '1px solid var(--sk-border)',\n borderRadius: '6px',\n padding: '0.5rem 0.75rem',\n background: 'var(--sk-bg)',\n }}\n />\n {!cardReady && (\n <p style={{ fontSize: '0.75rem', color: 'var(--sk-text-secondary)', marginTop: '0.25rem' }}>\n Loading card form...\n </p>\n )}\n </div>\n )}\n\n {error && (\n <div style={{\n marginTop: '1rem',\n padding: '0.75rem',\n background: 'rgba(var(--sk-error-rgb, 239,68,68), 0.06)',\n border: '1px solid rgba(var(--sk-error-rgb, 239,68,68), 0.2)',\n borderRadius: '6px',\n color: 'var(--sk-error)',\n fontSize: '0.875rem',\n }}>\n {error}\n </div>\n )}\n \n <button\n type=\"submit\"\n disabled={loading || (!isFree && processor === 'square' && !cardReady)}\n style={{\n width: '100%',\n marginTop: '1.25rem',\n padding: '0.875rem',\n fontSize: '1rem',\n fontWeight: 600,\n borderRadius: '8px',\n border: 'none',\n background: (loading || (!isFree && processor === 'square' && !cardReady)) ? 'var(--sk-primary-hover)' : 'var(--sk-primary)',\n color: 'var(--sk-bg)',\n cursor: (loading || (!isFree && processor === 'square' && !cardReady)) ? 'not-allowed' : 'pointer',\n }}\n >\n {loading ? 'Processing...' : (\n isFree ? 'Register Free' : `Pay ${formatPrice(total, event.currency)}`\n )}\n </button>\n \n {!isFree && (\n <p style={{ \n textAlign: 'center', \n fontSize: '0.75rem', \n color: 'var(--sk-text-secondary)',\n margin: '0.75rem 0 0',\n }}>\n 🔒 Secure checkout via {processor === 'square' ? 'Square' : processor === 'stripe' ? 'Stripe' : 'secure payment'}\n </p>\n )}\n {!isFree && processor && (\n <p style={{ fontSize: '0.625rem', color: 'var(--sk-text-secondary)', margin: '0.25rem 0 0', textAlign: 'center' }}>\n Powered by {processor === 'stripe' ? 'Stripe' : 'Square'}\n </p>\n )}\n </form>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport default EventModal\n","/**\n * @sonordev/site-kit/commerce - useEventModal hook\n * \n * Hook for managing event modal state.\n */\n\n'use client'\n\nimport { useState, useCallback } from 'react'\nimport type { CommerceOffering, CommerceSchedule } from './types'\n\nexport interface UseEventModalReturn {\n /** Currently selected event */\n event: CommerceOffering | null\n /** Currently selected schedule */\n schedule: CommerceSchedule | null\n /** Whether modal is open */\n isOpen: boolean\n /** Open modal with event */\n openModal: (event: CommerceOffering, schedule?: CommerceSchedule) => void\n /** Close modal */\n closeModal: () => void\n}\n\nexport function useEventModal(): UseEventModalReturn {\n const [event, setEvent] = useState<CommerceOffering | null>(null)\n const [schedule, setSchedule] = useState<CommerceSchedule | null>(null)\n const [isOpen, setIsOpen] = useState(false)\n \n const openModal = useCallback((newEvent: CommerceOffering, newSchedule?: CommerceSchedule) => {\n setEvent(newEvent)\n setSchedule(newSchedule || newEvent.schedules?.[0] || null)\n setIsOpen(true)\n }, [])\n \n const closeModal = useCallback(() => {\n setIsOpen(false)\n // Delay clearing event data for exit animation\n setTimeout(() => {\n setEvent(null)\n setSchedule(null)\n }, 200)\n }, [])\n \n return {\n event,\n schedule,\n isOpen,\n openModal,\n closeModal,\n }\n}\n\nexport default useEventModal\n","/**\n * @sonordev/site-kit/commerce - EventCalendar\n * \n * Calendar view with built-in registration modal.\n * Clicking an event opens a popup for registration/checkout.\n */\n\n'use client'\n\nimport React from 'react'\nimport type { CommerceOffering, CommerceSchedule, CheckoutResult } from './types'\nimport type { CalendarViewProps } from './CalendarView'\nimport type { AdditionalField } from './EventModal'\nimport { CalendarView } from './CalendarView'\nimport { EventModal } from './EventModal'\nimport { useEventModal } from './useEventModal'\n\nexport interface EventCalendarProps extends Omit<CalendarViewProps, 'onEventClick'> {\n /** Callback when registration/checkout succeeds */\n onRegistrationSuccess?: (result: CheckoutResult) => void\n /** Callback when registration/checkout fails */\n onRegistrationError?: (error: string) => void\n /** Collect phone number in registration form */\n collectPhone?: boolean\n /** Additional form fields for registration */\n additionalFields?: AdditionalField[]\n /** Custom modal class names */\n modalClassName?: string\n modalOverlayClassName?: string\n modalContentClassName?: string\n}\n\nexport function EventCalendar({\n onRegistrationSuccess,\n onRegistrationError,\n collectPhone = false,\n additionalFields = [],\n modalClassName,\n modalOverlayClassName,\n modalContentClassName,\n ...calendarProps\n}: EventCalendarProps) {\n const { event, schedule, isOpen, openModal, closeModal } = useEventModal()\n \n const handleEventClick = (clickedEvent: CommerceOffering, clickedSchedule: CommerceSchedule) => {\n openModal(clickedEvent, clickedSchedule)\n }\n \n const handleSuccess = (result: CheckoutResult) => {\n onRegistrationSuccess?.(result)\n // Keep modal open to show success state\n }\n \n const handleError = (error: string) => {\n onRegistrationError?.(error)\n }\n \n return (\n <>\n <CalendarView\n {...calendarProps}\n onEventClick={handleEventClick}\n />\n \n <EventModal\n event={event}\n schedule={schedule}\n isOpen={isOpen}\n onClose={closeModal}\n onSuccess={handleSuccess}\n onError={handleError}\n collectPhone={collectPhone}\n additionalFields={additionalFields}\n className={modalClassName}\n overlayClassName={modalOverlayClassName}\n contentClassName={modalContentClassName}\n />\n </>\n )\n}\n\nexport default EventCalendar\n","/**\n * @sonordev/site-kit/commerce - EventsWidget\n * \n * Comprehensive events widget with calendar/list toggle and integrated booking.\n * Plug-and-play component for displaying commerce events.\n * \n * @example\n * ```tsx\n * // Basic usage - automatically fetches events\n * <EventsWidget />\n * \n * // With calendar view as default\n * <EventsWidget defaultView=\"calendar\" />\n * \n * // Custom styling\n * <EventsWidget\n * className=\"my-events-section\"\n * title=\"Upcoming Events\"\n * showViewToggle={true}\n * onRegistrationSuccess={(result) => console.log('Registered!', result)}\n * />\n * ```\n */\n\n'use client'\n\nimport React, { useState, useEffect, useCallback } from 'react'\nimport type { CommerceOffering, CommerceSchedule, CheckoutResult } from './types'\nimport { sonorFetch } from '../shared/sonorFetch'\nimport { CalendarView } from './CalendarView'\nimport { EventModal } from './EventModal'\nimport { useEventModal } from './useEventModal'\nimport { formatDate, formatTime, formatPrice } from './utils'\n\nexport type EventsViewMode = 'list' | 'grid' | 'calendar'\n\nexport interface EventsWidgetProps {\n /** Pre-loaded events (optional - will fetch if not provided) */\n events?: CommerceOffering[]\n /** Initial view mode */\n defaultView?: EventsViewMode\n /** Which view modes to show in the toggle (e.g. ['list', 'grid'] when calendar is embedded above) */\n availableViews?: EventsViewMode[]\n /** Show view toggle buttons */\n showViewToggle?: boolean\n /** Section title */\n title?: string\n /** Subtitle or description */\n subtitle?: string\n /** Category filter */\n category?: string\n /** Maximum events to show in list view */\n limit?: number\n /** Show \"View All\" link */\n showViewAll?: boolean\n /** URL for \"View All\" link */\n viewAllUrl?: string\n /** Text for \"View All\" link */\n viewAllText?: string\n /** Message when no events */\n emptyMessage?: string\n /** Show empty state with icon */\n showEmptyIcon?: boolean\n \n // Registration options\n /** Collect phone number in registration */\n collectPhone?: boolean\n /** Additional form fields */\n additionalFields?: AdditionalField[]\n \n // Callbacks\n /** Called when registration/checkout succeeds */\n onRegistrationSuccess?: (result: CheckoutResult) => void\n /** Called when registration/checkout fails */\n onRegistrationError?: (error: string) => void\n /** Called when event is clicked (before modal opens) */\n onEventClick?: (event: CommerceOffering, schedule: CommerceSchedule) => void\n \n // Styling\n className?: string\n headerClassName?: string\n toggleClassName?: string\n listClassName?: string\n calendarClassName?: string\n eventCardClassName?: string\n modalClassName?: string\n}\n\nexport interface AdditionalField {\n name: string\n label: string\n type?: 'text' | 'email' | 'tel' | 'textarea' | 'select' | 'number'\n required?: boolean\n placeholder?: string\n options?: { value: string; label: string }[]\n}\n\n// Icons\nconst CalendarIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n)\n\nconst ListIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"></line>\n <line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"></line>\n <line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"></line>\n <line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"></line>\n </svg>\n)\n\nconst GridIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"></rect>\n <rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"></rect>\n <rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"></rect>\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"></rect>\n </svg>\n)\n\nconst ClockIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <polyline points=\"12 6 12 12 16 14\"></polyline>\n </svg>\n)\n\nconst LocationIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"></path>\n <circle cx=\"12\" cy=\"10\" r=\"3\"></circle>\n </svg>\n)\n\nconst DEFAULT_VIEWS: EventsViewMode[] = ['list', 'grid', 'calendar']\n\nexport function EventsWidget({\n events: propEvents,\n defaultView = 'list',\n availableViews = DEFAULT_VIEWS,\n showViewToggle = true,\n title,\n subtitle,\n category,\n limit = 10,\n showViewAll = false,\n viewAllUrl = '/events',\n viewAllText = 'View All Events',\n emptyMessage = 'No upcoming events scheduled.',\n showEmptyIcon = true,\n collectPhone = false,\n additionalFields = [],\n onRegistrationSuccess,\n onRegistrationError,\n onEventClick,\n className = '',\n headerClassName = '',\n toggleClassName = '',\n listClassName = '',\n calendarClassName = '',\n eventCardClassName = '',\n modalClassName = '',\n}: EventsWidgetProps) {\n const views = availableViews.length > 0 ? availableViews : DEFAULT_VIEWS\n const resolvedDefault = views.includes(defaultView) ? defaultView : views[0]\n const [viewMode, setViewMode] = useState<EventsViewMode>(resolvedDefault)\n const effectiveView = views.includes(viewMode) ? viewMode : views[0]\n const [events, setEvents] = useState<CommerceOffering[]>(propEvents || [])\n const [loading, setLoading] = useState(!propEvents)\n const [error, setError] = useState<string | null>(null)\n const [retryCount, setRetryCount] = useState(0)\n \n const { event, schedule, isOpen, openModal, closeModal } = useEventModal()\n \n // Fetch events from API\n useEffect(() => {\n if (propEvents) {\n setEvents(propEvents)\n return\n }\n \n async function loadEvents() {\n const apiUrl = getApiUrl()\n const apiKey = getApiKey()\n \n // Wait for API key to be available (set by SiteKitLayout)\n // If not available after a short delay, retry up to 3 times\n if (!apiKey) {\n if (retryCount < 3) {\n setTimeout(() => setRetryCount(c => c + 1), 100)\n return\n }\n console.warn('[EventsWidget] No API key configured. Make sure SiteKitProvider is wrapping your app.')\n setError(null) // Don't show error, just show empty state\n setEvents([])\n setLoading(false)\n return\n }\n \n setLoading(true)\n setError(null)\n \n try {\n const response = await sonorFetch(`${apiUrl}/api/public/commerce/events`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n type: 'event',\n category,\n limit: limit * 2, // Fetch extra for calendar view\n }),\n }, { apiKey })\n\n if (!response.ok) {\n throw new Error('Failed to fetch events')\n }\n\n const data = await response.json()\n setEvents(data.events || [])\n } catch (err) {\n console.warn('Error loading events:', err)\n setError('Unable to load events. Please try again later.')\n } finally {\n setLoading(false)\n }\n }\n \n loadEvents()\n }, [propEvents, category, limit, retryCount])\n \n const handleEventClick = useCallback((clickedEvent: CommerceOffering, clickedSchedule: CommerceSchedule) => {\n onEventClick?.(clickedEvent, clickedSchedule)\n openModal(clickedEvent, clickedSchedule)\n }, [onEventClick, openModal])\n \n const handleSuccess = useCallback((result: CheckoutResult) => {\n onRegistrationSuccess?.(result)\n }, [onRegistrationSuccess])\n \n const handleError = useCallback((err: string) => {\n onRegistrationError?.(err)\n }, [onRegistrationError])\n \n // Loading state\n if (loading) {\n return (\n <div className={`site-kit-events-widget ${className}`}>\n {(title || subtitle) && (\n <div className={`site-kit-events-header ${headerClassName}`} style={{ marginBottom: '1.5rem' }}>\n {title && <h2 style={{ margin: 0, fontSize: '1.5rem', fontWeight: 600 }}>{title}</h2>}\n {subtitle && <p style={{ margin: '0.5rem 0 0', color: 'var(--sk-text-secondary)' }}>{subtitle}</p>}\n </div>\n )}\n <div style={{ textAlign: 'center', padding: '3rem 1rem', color: 'var(--sk-text-secondary)' }}>\n <div style={{\n width: '40px',\n height: '40px',\n margin: '0 auto 1rem',\n border: '3px solid var(--sk-border)',\n borderTopColor: 'var(--sk-primary)',\n borderRadius: '50%',\n animation: 'site-kit-spin 1s linear infinite',\n }} />\n <p>Loading events...</p>\n </div>\n <style>{`\n @keyframes site-kit-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n )\n }\n \n // Error state\n if (error) {\n return (\n <div className={`site-kit-events-widget ${className}`}>\n {(title || subtitle) && (\n <div className={`site-kit-events-header ${headerClassName}`} style={{ marginBottom: '1.5rem' }}>\n {title && <h2 style={{ margin: 0, fontSize: '1.5rem', fontWeight: 600 }}>{title}</h2>}\n {subtitle && <p style={{ margin: '0.5rem 0 0', color: 'var(--sk-text-secondary)' }}>{subtitle}</p>}\n </div>\n )}\n <div style={{ textAlign: 'center', padding: '3rem 1rem', color: 'var(--sk-error)' }}>\n <p>{error}</p>\n </div>\n </div>\n )\n }\n \n // Empty state\n if (events.length === 0) {\n return (\n <div className={`site-kit-events-widget ${className}`}>\n {(title || subtitle) && (\n <div className={`site-kit-events-header ${headerClassName}`} style={{ marginBottom: '1.5rem' }}>\n {title && <h2 style={{ margin: 0, fontSize: '1.5rem', fontWeight: 600 }}>{title}</h2>}\n {subtitle && <p style={{ margin: '0.5rem 0 0', color: 'var(--sk-text-secondary)' }}>{subtitle}</p>}\n </div>\n )}\n <div style={{ textAlign: 'center', padding: '3rem 1rem', color: 'var(--sk-text-secondary)' }}>\n {showEmptyIcon && (\n <svg\n style={{ width: '64px', height: '64px', margin: '0 auto 1rem', color: 'var(--sk-border)' }}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n )}\n <p style={{ fontSize: '1.125rem', fontWeight: 500, margin: 0 }}>{emptyMessage}</p>\n </div>\n </div>\n )\n }\n \n // Group expanded events (one-per-schedule) back into one-per-offering with all schedules.\n // The API expands each schedule into its own event entry for calendar-friendly output;\n // list view re-groups so multi-date events render as a single card with a date selector.\n const groupedList = groupEventsByOffering(events).slice(0, limit)\n // Limit events for grid/calendar view (expansion is correct there)\n const displayEvents = effectiveView === 'grid' ? events.slice(0, limit) : events\n \n return (\n <div className={`site-kit-events-widget ${className}`}>\n {/* Header */}\n {(title || subtitle || showViewToggle) && (\n <div \n className={`site-kit-events-header ${headerClassName}`}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n marginBottom: '1.5rem',\n flexWrap: 'wrap',\n gap: '1rem',\n }}\n >\n <div>\n {title && <h2 style={{ margin: 0, fontSize: '1.5rem', fontWeight: 600 }}>{title}</h2>}\n {subtitle && <p style={{ margin: '0.5rem 0 0', color: 'var(--sk-text-secondary)' }}>{subtitle}</p>}\n </div>\n \n {showViewToggle && (\n <div \n className={`site-kit-events-toggle ${toggleClassName}`}\n style={{\n display: 'flex',\n gap: '0.25rem',\n background: 'var(--sk-surface)',\n padding: '0.25rem',\n borderRadius: '0.5rem',\n }}\n >\n {views.includes('list') && (\n <button\n onClick={() => setViewMode('list')}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n padding: '0.5rem 1rem',\n border: 'none',\n borderRadius: '0.375rem',\n background: viewMode === 'list' ? 'var(--sk-bg)' : 'transparent',\n color: viewMode === 'list' ? 'var(--sk-text-primary)' : 'var(--sk-text-secondary)',\n fontWeight: 500,\n fontSize: '0.875rem',\n cursor: 'pointer',\n boxShadow: viewMode === 'list' ? '0 1px 2px rgba(0,0,0,0.05)' : 'none',\n transition: 'all 150ms',\n }}\n >\n <ListIcon />\n List\n </button>\n )}\n {views.includes('grid') && (\n <button\n onClick={() => setViewMode('grid')}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n padding: '0.5rem 1rem',\n border: 'none',\n borderRadius: '0.375rem',\n background: viewMode === 'grid' ? 'var(--sk-bg)' : 'transparent',\n color: viewMode === 'grid' ? 'var(--sk-text-primary)' : 'var(--sk-text-secondary)',\n fontWeight: 500,\n fontSize: '0.875rem',\n cursor: 'pointer',\n boxShadow: viewMode === 'grid' ? '0 1px 2px rgba(0,0,0,0.05)' : 'none',\n transition: 'all 150ms',\n }}\n >\n <GridIcon />\n Grid\n </button>\n )}\n {views.includes('calendar') && (\n <button\n onClick={() => setViewMode('calendar')}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n padding: '0.5rem 1rem',\n border: 'none',\n borderRadius: '0.375rem',\n background: viewMode === 'calendar' ? 'var(--sk-bg)' : 'transparent',\n color: viewMode === 'calendar' ? 'var(--sk-text-primary)' : 'var(--sk-text-secondary)',\n fontWeight: 500,\n fontSize: '0.875rem',\n cursor: 'pointer',\n boxShadow: viewMode === 'calendar' ? '0 1px 2px rgba(0,0,0,0.05)' : 'none',\n transition: 'all 150ms',\n }}\n >\n <CalendarIcon />\n Calendar\n </button>\n )}\n </div>\n )}\n </div>\n )}\n \n {/* Content */}\n {effectiveView === 'list' ? (\n <div className={`site-kit-events-list ${listClassName}`}>\n <style>{`\n .sk-date-pills { display: flex; flex-wrap: wrap; gap: 0.375rem; }\n .sk-date-select-wrap { display: none; }\n @media (max-width: 640px) {\n .sk-date-pills { display: none; }\n .sk-date-select-wrap { display: block; }\n .site-kit-event-card { flex-direction: column !important; }\n .site-kit-event-card-image { width: 100% !important; min-width: 0 !important; min-height: 140px !important; }\n }\n `}</style>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {groupedList.map(({ event: eventItem, schedules: allSchedules }) => {\n const schedules = allSchedules.length > 0 ? allSchedules : (eventItem.next_schedule ? [eventItem.next_schedule] : [])\n const isMulti = schedules.length > 1\n const primarySchedule = schedules[0] || eventItem.next_schedule || eventItem.schedules?.[0]\n const isFree = !eventItem.price || eventItem.price === 0\n const imageUrl = eventItem.featured_image_url\n const uniqueKey = eventItem.id\n\n return (\n <div\n key={uniqueKey}\n className={`site-kit-event-card ${eventCardClassName}`}\n data-sk-part=\"events-widget-card\" data-category={eventItem.category?.slug}\n data-offering-type={eventItem.type}\n onClick={(e) => {\n // Avoid triggering when interacting with date selector\n if ((e.target as HTMLElement).closest('[data-sk-date-selector]')) return\n if (!isMulti && primarySchedule) handleEventClick(eventItem, primarySchedule)\n }}\n style={{\n display: 'flex',\n flexDirection: 'row',\n gap: 0,\n padding: 0,\n background: 'var(--sk-bg)',\n border: '1px solid var(--sk-border)',\n borderRadius: '0.75rem',\n cursor: (!isMulti && primarySchedule) ? 'pointer' : 'default',\n transition: 'all 150ms',\n overflow: 'hidden',\n }}\n onMouseEnter={(e) => {\n if (!isMulti && primarySchedule) {\n e.currentTarget.style.borderColor = 'var(--sk-primary)'\n e.currentTarget.style.boxShadow = '0 4px 6px -1px rgba(0, 0, 0, 0.1)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.borderColor = 'var(--sk-border)'\n e.currentTarget.style.boxShadow = 'none'\n }}\n >\n {/* Image on the left */}\n <div className=\"site-kit-event-card-image\" style={{\n width: '160px',\n minWidth: '160px',\n flexShrink: 0,\n background: 'var(--sk-surface)',\n }}>\n {imageUrl ? (\n <img\n src={imageUrl}\n alt={eventItem.name}\n crossOrigin=\"anonymous\"\n referrerPolicy=\"no-referrer\"\n onError={(e) => {\n const el = e.currentTarget\n el.style.display = 'none'\n const placeholder = el.nextElementSibling as HTMLElement\n if (placeholder) placeholder.style.display = 'flex'\n }}\n style={{\n width: '100%',\n height: '100%',\n minHeight: '120px',\n objectFit: 'cover',\n display: 'block',\n }}\n />\n ) : null}\n <div\n style={{\n width: '100%',\n minHeight: '120px',\n display: imageUrl ? 'none' : 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--sk-text-secondary)',\n }}\n aria-hidden\n >\n <CalendarIcon />\n </div>\n </div>\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', gap: '0.75rem', padding: '1.25rem' }}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start', gap: '1rem' }}>\n <div style={{ flex: 1 }}>\n <h3 style={{ margin: 0, fontSize: '1.125rem', fontWeight: 600, color: 'var(--sk-text-primary)' }}>\n {eventItem.name}\n </h3>\n {eventItem.short_description && (\n <p style={{ margin: '0.5rem 0 0', color: 'var(--sk-text-secondary)', fontSize: '0.875rem', lineHeight: 1.5 }}>\n {eventItem.short_description}\n </p>\n )}\n </div>\n\n {eventItem.price_is_public && (\n <div style={{\n padding: '0.375rem 0.75rem',\n background: isFree ? 'rgba(var(--sk-success-rgb, 16,185,129), 0.1)' : 'rgba(var(--sk-primary-rgb), 0.125)',\n color: isFree ? 'var(--sk-success)' : 'var(--sk-primary)',\n borderRadius: '9999px',\n fontSize: '0.875rem',\n fontWeight: 600,\n whiteSpace: 'nowrap',\n }}>\n {isFree ? 'Free' : formatPrice(eventItem.price ?? 0, eventItem.currency)}\n </div>\n )}\n </div>\n\n {/* Single-date metadata row */}\n {!isMulti && primarySchedule && (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '1rem', fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.375rem' }}>\n <CalendarIcon />\n {formatDate(primarySchedule.starts_at)}\n </span>\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.375rem' }}>\n <ClockIcon />\n {formatTime(primarySchedule.starts_at)}\n </span>\n {eventItem.location && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.375rem' }}>\n <LocationIcon />\n {eventItem.location}\n </span>\n )}\n {primarySchedule.spots_remaining !== null && primarySchedule.spots_remaining !== undefined && (\n <span style={{\n color: primarySchedule.spots_remaining < 5 ? 'var(--sk-error)' : 'var(--sk-text-secondary)',\n fontWeight: primarySchedule.spots_remaining < 5 ? 500 : 400,\n }}>\n {primarySchedule.spots_remaining === 0\n ? 'Sold Out'\n : `${primarySchedule.spots_remaining} spots left`}\n </span>\n )}\n </div>\n )}\n\n {/* Multi-date: overview + date selector */}\n {isMulti && (\n <div data-sk-date-selector onClick={(e) => e.stopPropagation()}>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '1rem', fontSize: '0.875rem', color: 'var(--sk-text-secondary)', marginBottom: '0.625rem' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.375rem', fontWeight: 500, color: 'var(--sk-text-primary)' }}>\n <CalendarIcon />\n {schedules.length} dates available\n </span>\n {eventItem.location && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.375rem' }}>\n <LocationIcon />\n {eventItem.location}\n </span>\n )}\n <span>\n {formatDate(schedules[0].starts_at)} – {formatDate(schedules[schedules.length - 1].starts_at)}\n </span>\n </div>\n\n {/* Desktop: pill row */}\n <div className=\"sk-date-pills\">\n {schedules.map((s) => {\n const soldOut = s.spots_remaining === 0\n const low = !soldOut && s.spots_remaining !== null && s.spots_remaining !== undefined && s.spots_remaining < 5\n return (\n <button\n key={s.id}\n type=\"button\"\n onClick={() => !soldOut && handleEventClick(eventItem, s)}\n disabled={soldOut}\n title={`${formatDate(s.starts_at)} • ${formatTime(s.starts_at)}${soldOut ? ' (Sold Out)' : low ? ` (${s.spots_remaining} left)` : ''}`}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.375rem',\n padding: '0.5rem 0.875rem',\n borderRadius: '9999px',\n border: '1.5px solid var(--sk-primary)',\n background: soldOut ? 'var(--sk-surface)' : 'var(--sk-bg)',\n color: soldOut ? 'var(--sk-text-secondary)' : 'var(--sk-primary)',\n fontSize: '0.8125rem',\n fontWeight: 600,\n letterSpacing: '0.01em',\n cursor: soldOut ? 'not-allowed' : 'pointer',\n textDecoration: soldOut ? 'line-through' : 'none',\n transition: 'all 150ms ease',\n whiteSpace: 'nowrap',\n boxShadow: soldOut ? 'none' : '0 1px 2px rgba(0,0,0,0.04)',\n }}\n onMouseEnter={(e) => {\n if (!soldOut) {\n e.currentTarget.style.background = 'var(--sk-primary)'\n e.currentTarget.style.color = 'var(--sk-bg)'\n e.currentTarget.style.transform = 'translateY(-1px)'\n e.currentTarget.style.boxShadow = '0 4px 10px -2px rgba(0,0,0,0.15)'\n }\n }}\n onMouseLeave={(e) => {\n if (!soldOut) {\n e.currentTarget.style.background = 'var(--sk-bg)'\n e.currentTarget.style.color = 'var(--sk-primary)'\n e.currentTarget.style.transform = 'none'\n e.currentTarget.style.boxShadow = '0 1px 2px rgba(0,0,0,0.04)'\n }\n }}\n >\n {formatDate(s.starts_at)} · {formatTime(s.starts_at)}\n {low && (\n <span style={{\n marginLeft: '0.125rem',\n padding: '0.0625rem 0.375rem',\n borderRadius: '9999px',\n background: 'var(--sk-error)',\n color: 'var(--sk-bg)',\n fontWeight: 700,\n fontSize: '0.6875rem',\n }}>\n {s.spots_remaining} left\n </span>\n )}\n </button>\n )\n })}\n </div>\n\n {/* Mobile: dropdown */}\n <div className=\"sk-date-select-wrap\">\n <select\n defaultValue=\"\"\n onChange={(e) => {\n const scheduleId = e.target.value\n const s = schedules.find(x => x.id === scheduleId)\n if (s) handleEventClick(eventItem, s)\n e.currentTarget.value = ''\n }}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n border: '1px solid var(--sk-border)',\n borderRadius: '0.5rem',\n background: 'var(--sk-bg)',\n color: 'var(--sk-text-primary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n <option value=\"\" disabled>Select a date to register…</option>\n {schedules.map((s) => {\n const soldOut = s.spots_remaining === 0\n const low = !soldOut && s.spots_remaining !== null && s.spots_remaining !== undefined && s.spots_remaining < 5\n return (\n <option key={s.id} value={s.id} disabled={soldOut}>\n {formatDate(s.starts_at)} · {formatTime(s.starts_at)}\n {soldOut ? ' — Sold Out' : low ? ` — ${s.spots_remaining} left` : ''}\n </option>\n )\n })}\n </select>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n })}\n </div>\n\n {showViewAll && groupedList.length >= limit && (\n <div style={{ textAlign: 'center', marginTop: '1.5rem' }}>\n <a\n href={viewAllUrl}\n style={{\n display: 'inline-block',\n padding: '0.75rem 1.5rem',\n background: 'var(--sk-surface)',\n color: 'var(--sk-text-primary)',\n borderRadius: '0.5rem',\n textDecoration: 'none',\n fontWeight: 500,\n fontSize: '0.875rem',\n transition: 'all 150ms',\n }}\n >\n {viewAllText}\n </a>\n </div>\n )}\n </div>\n ) : effectiveView === 'grid' ? (\n <div className={`site-kit-events-grid ${listClassName}`}>\n <div style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(280px, 1fr))',\n gap: '1.25rem',\n }}>\n {displayEvents.map((eventItem, index) => {\n const nextSchedule = eventItem.next_schedule || eventItem.schedules?.[0]\n const isFree = !eventItem.price || eventItem.price === 0\n const imageUrl = eventItem.featured_image_url\n const uniqueKey = nextSchedule\n ? `${eventItem.id}-${nextSchedule.id}`\n : `${eventItem.id}-${index}`\n \n return (\n <div\n key={uniqueKey}\n className={`site-kit-event-card site-kit-event-card--grid ${eventCardClassName}`}\n data-sk-part=\"events-widget-card\" data-category={eventItem.category?.slug}\n data-offering-type={eventItem.type}\n onClick={() => nextSchedule && handleEventClick(eventItem, nextSchedule)}\n style={{\n position: 'relative',\n minHeight: '220px',\n borderRadius: '0.75rem',\n overflow: 'hidden',\n cursor: nextSchedule ? 'pointer' : 'default',\n transition: 'all 150ms',\n border: '1px solid var(--sk-border)',\n }}\n onMouseEnter={(e) => {\n if (nextSchedule) {\n e.currentTarget.style.boxShadow = '0 10px 25px -5px rgba(0, 0, 0, 0.15)'\n e.currentTarget.style.transform = 'translateY(-2px)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.boxShadow = 'none'\n e.currentTarget.style.transform = 'none'\n }}\n >\n {/* Background image */}\n <div style={{\n position: 'absolute',\n inset: 0,\n background: imageUrl\n ? `linear-gradient(to top, rgba(0,0,0,0.75) 0%, rgba(0,0,0,0.35) 45%, rgba(0,0,0,0.15) 70%), url(${imageUrl}) center/cover`\n : 'linear-gradient(135deg, #4b5563 0%, #6b7280 100%)',\n }} />\n {/* Content overlay */}\n <div style={{\n position: 'relative',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-end',\n padding: '1.25rem',\n color: 'var(--sk-bg)',\n }}>\n <h3 style={{ margin: 0, fontSize: '1.125rem', fontWeight: 600, color: 'var(--sk-bg)', textShadow: '0 1px 2px rgba(0,0,0,0.5)' }}>\n {eventItem.name}\n </h3>\n {eventItem.short_description && (\n <p style={{ margin: '0.25rem 0 0', fontSize: '0.8125rem', opacity: 0.95, lineHeight: 1.4, overflow: 'hidden', textOverflow: 'ellipsis', maxHeight: '2.8em' }}>\n {eventItem.short_description}\n </p>\n )}\n {nextSchedule && (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '0.75rem', marginTop: '0.75rem', fontSize: '0.8125rem', opacity: 0.95 }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.25rem' }}>\n <CalendarIcon />\n {formatDate(nextSchedule.starts_at)}\n </span>\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.25rem' }}>\n <ClockIcon />\n {formatTime(nextSchedule.starts_at)}\n </span>\n {nextSchedule.spots_remaining !== null && nextSchedule.spots_remaining !== undefined && (\n <span>\n {nextSchedule.spots_remaining === 0 ? 'Sold Out' : `${nextSchedule.spots_remaining} spots left`}\n </span>\n )}\n </div>\n )}\n {eventItem.price_is_public && (\n <div style={{\n marginTop: '0.5rem',\n display: 'inline-block',\n padding: '0.25rem 0.5rem',\n background: 'rgba(255,255,255,0.2)',\n borderRadius: '9999px',\n fontSize: '0.875rem',\n fontWeight: 600,\n }}>\n {isFree ? 'Free' : formatPrice(eventItem.price ?? 0, eventItem.currency)}\n </div>\n )}\n </div>\n </div>\n )\n })}\n </div>\n \n {showViewAll && events.length > limit && (\n <div style={{ textAlign: 'center', marginTop: '1.5rem' }}>\n <a\n href={viewAllUrl}\n style={{\n display: 'inline-block',\n padding: '0.75rem 1.5rem',\n background: 'var(--sk-surface)',\n color: 'var(--sk-text-primary)',\n borderRadius: '0.5rem',\n textDecoration: 'none',\n fontWeight: 500,\n fontSize: '0.875rem',\n transition: 'all 150ms',\n }}\n >\n {viewAllText}\n </a>\n </div>\n )}\n </div>\n ) : (\n <div className={`site-kit-events-calendar ${calendarClassName}`}>\n <CalendarView\n events={events}\n onEventClick={handleEventClick}\n showNavigation={true}\n showHeader={true}\n />\n </div>\n )}\n \n {/* Registration Modal */}\n <EventModal\n event={event}\n schedule={schedule}\n isOpen={isOpen}\n onClose={closeModal}\n onSuccess={handleSuccess}\n onError={handleError}\n collectPhone={collectPhone}\n additionalFields={additionalFields}\n className={modalClassName}\n />\n </div>\n )\n}\n\n// ============================================\n// Helpers\n// ============================================\n\nfunction getApiUrl(): string {\n if (typeof window !== 'undefined') {\n return (window as any).__SITE_KIT_API_URL__ || 'https://api.sonor.io'\n }\n return 'https://api.sonor.io'\n}\n\nfunction getApiKey(): string {\n if (typeof window !== 'undefined') {\n return (window as any).__SITE_KIT_API_KEY__ || ''\n }\n return ''\n}\n\n// Re-group events expanded one-per-schedule (by the public events API) back into\n// one-per-offering with all schedules merged. Sorts schedules and groups chronologically.\nfunction groupEventsByOffering(\n events: CommerceOffering[],\n): Array<{ event: CommerceOffering; schedules: CommerceSchedule[] }> {\n const groups = new Map<string, { event: CommerceOffering; schedules: CommerceSchedule[] }>()\n for (const ev of events) {\n const incoming = (ev.schedules || []).filter(Boolean) as CommerceSchedule[]\n const existing = groups.get(ev.id)\n if (existing) {\n for (const s of incoming) {\n if (!existing.schedules.some((x) => x.id === s.id)) {\n existing.schedules.push(s)\n }\n }\n } else {\n groups.set(ev.id, { event: ev, schedules: [...incoming] })\n }\n }\n for (const g of groups.values()) {\n g.schedules.sort(\n (a, b) => new Date(a.starts_at).getTime() - new Date(b.starts_at).getTime(),\n )\n }\n return Array.from(groups.values()).sort((a, b) => {\n const aFirst = a.schedules[0]?.starts_at\n const bFirst = b.schedules[0]?.starts_at\n if (!aFirst && !bFirst) return 0\n if (!aFirst) return 1\n if (!bFirst) return -1\n return new Date(aFirst).getTime() - new Date(bFirst).getTime()\n })\n}\n\nexport default EventsWidget\n","/**\n * Events polish: calendar links, structured data, honest capacity.\n *\n * - icsForEvent / googleCalendarUrl / createIcsRoute: \"Add to calendar\"\n * without a third-party service.\n * - EventJsonLd: schema.org/Event emitted from the offering the site already\n * fetched — free rich results.\n * - CapacityBadge: renders from spots_remaining/capacity. Per the QCR\n * oversell incident, the seat count is the ONLY honest sold-out signal\n * (status can stay 'active' during an emergency shutdown), so this badge\n * never derives fullness from status.\n *\n * Server-safe: no hooks, no browser APIs — usable from RSC pages directly.\n */\n\nimport React from 'react'\nimport type { CommerceOffering, CommerceSchedule } from './types'\n\n// ── ICS ─────────────────────────────────────────────────────────────────────\n\n/** Escape per RFC 5545 (comma, semicolon, backslash, newline). */\nfunction icsEscape(value: string): string {\n return value.replace(/\\\\/g, '\\\\\\\\').replace(/;/g, '\\\\;').replace(/,/g, '\\\\,').replace(/\\r?\\n/g, '\\\\n')\n}\n\nfunction icsDate(iso: string): string {\n // UTC basic format: 20261026T220000Z\n return new Date(iso).toISOString().replace(/[-:]/g, '').replace(/\\.\\d{3}/, '')\n}\n\n/** All-day events use VALUE=DATE and an exclusive end date per RFC 5545. */\nfunction icsAllDayDate(iso: string, addDays = 0): string {\n const d = new Date(iso)\n d.setUTCDate(d.getUTCDate() + addDays)\n return d.toISOString().slice(0, 10).replace(/-/g, '')\n}\n\nexport interface IcsEventInput {\n offering: CommerceOffering\n schedule: CommerceSchedule\n /** Absolute URL of the event page, for the ICS URL property. */\n url?: string\n}\n\n/** Build a single-event .ics document. */\nexport function icsForEvent({ offering, schedule, url }: IcsEventInput): string {\n const allDay = Boolean((offering.metadata as { all_day?: boolean } | undefined)?.all_day)\n const uid = `${offering.id}-${schedule.id}@sonor.io`\n const lines = [\n 'BEGIN:VCALENDAR',\n 'VERSION:2.0',\n 'PRODID:-//Sonor//site-kit//EN',\n 'BEGIN:VEVENT',\n `UID:${uid}`,\n `DTSTAMP:${icsDate(new Date().toISOString())}`,\n allDay\n ? `DTSTART;VALUE=DATE:${icsAllDayDate(schedule.starts_at)}`\n : `DTSTART:${icsDate(schedule.starts_at)}`,\n allDay\n ? `DTEND;VALUE=DATE:${icsAllDayDate(schedule.ends_at || schedule.starts_at, 1)}`\n : schedule.ends_at\n ? `DTEND:${icsDate(schedule.ends_at)}`\n : null,\n `SUMMARY:${icsEscape(offering.name)}`,\n offering.short_description ? `DESCRIPTION:${icsEscape(offering.short_description)}` : null,\n offering.location ? `LOCATION:${icsEscape(offering.location)}` : null,\n url ? `URL:${url}` : null,\n 'END:VEVENT',\n 'END:VCALENDAR',\n ].filter((l): l is string => l !== null)\n // RFC 5545 requires CRLF line endings.\n return lines.join('\\r\\n') + '\\r\\n'\n}\n\n/** Google Calendar \"add event\" URL for the same data. */\nexport function googleCalendarUrl({ offering, schedule }: IcsEventInput): string {\n const allDay = Boolean((offering.metadata as { all_day?: boolean } | undefined)?.all_day)\n const dates = allDay\n ? `${icsAllDayDate(schedule.starts_at)}/${icsAllDayDate(schedule.ends_at || schedule.starts_at, 1)}`\n : `${icsDate(schedule.starts_at)}/${icsDate(schedule.ends_at || schedule.starts_at)}`\n const params = new URLSearchParams({ action: 'TEMPLATE', text: offering.name, dates })\n if (offering.short_description) params.set('details', offering.short_description)\n if (offering.location) params.set('location', offering.location)\n return `https://calendar.google.com/calendar/render?${params.toString()}`\n}\n\n/**\n * Route handler factory: app/events/[slug]/calendar.ics/route.ts (or any\n * route) — resolve the event yourself, delegate the response here.\n */\nexport function icsResponse(input: IcsEventInput): Response {\n return new Response(icsForEvent(input), {\n headers: {\n 'Content-Type': 'text/calendar; charset=utf-8',\n 'Content-Disposition': `attachment; filename=\"${input.offering.slug || 'event'}.ics\"`,\n },\n })\n}\n\n// ── JSON-LD ─────────────────────────────────────────────────────────────────\n\nexport interface EventJsonLdProps {\n offering: CommerceOffering\n schedule: CommerceSchedule\n /** Absolute page URL. */\n url?: string\n /** Site origin for offer URLs, e.g. https://example.com */\n origin?: string\n}\n\n/** schema.org/Event structured data from data the page already fetched. */\nexport function EventJsonLd({ offering, schedule, url, origin }: EventJsonLdProps) {\n const spots = schedule.spots_remaining\n const soldOut = typeof spots === 'number' && spots <= 0\n\n const data: Record<string, unknown> = {\n '@context': 'https://schema.org',\n '@type': 'Event',\n name: offering.name,\n startDate: schedule.starts_at,\n ...(schedule.ends_at ? { endDate: schedule.ends_at } : {}),\n ...(offering.short_description || offering.description\n ? { description: offering.short_description || offering.description }\n : {}),\n ...(offering.location\n ? { location: { '@type': 'Place', name: offering.location } }\n : {}),\n ...(offering.featured_image_url ? { image: [offering.featured_image_url] } : {}),\n ...(url ? { url } : {}),\n eventStatus: 'https://schema.org/EventScheduled',\n ...(offering.price_is_public && offering.price_type !== 'quote'\n ? {\n offers: {\n '@type': 'Offer',\n price: offering.price_type === 'free' ? 0 : offering.price ?? 0,\n priceCurrency: offering.currency || 'USD',\n // Honest availability: derived from the seat count, never status.\n availability: soldOut\n ? 'https://schema.org/SoldOut'\n : 'https://schema.org/InStock',\n ...(url || origin ? { url: url || origin } : {}),\n },\n }\n : {}),\n }\n\n return (\n <script\n type=\"application/ld+json\"\n data-sk-part=\"event-jsonld\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }}\n />\n )\n}\n\n// ── Capacity ────────────────────────────────────────────────────────────────\n\nexport interface CapacityBadgeProps {\n schedule: CommerceSchedule\n className?: string\n /** Show \"N of M spots left\" instead of just \"N spots left\" when capacity known. */\n showTotal?: boolean\n /** Below this count the badge gets data-sk-urgency=\"low-spots\". Default 5. */\n lowThreshold?: number\n labels?: {\n soldOut?: string\n spotsLeft?: (n: number, total?: number | null) => string\n }\n}\n\n/**\n * Honest capacity, styled by the site via data attributes:\n * [data-sk-part=\"capacity-badge\"][data-sk-availability=\"sold-out\" | \"open\"]\n * [data-sk-urgency=\"low-spots\"]\n * Renders nothing when the schedule doesn't track capacity.\n */\nexport function CapacityBadge({\n schedule,\n className,\n showTotal = false,\n lowThreshold = 5,\n labels,\n}: CapacityBadgeProps) {\n const spots = schedule.spots_remaining\n if (typeof spots !== 'number') return null\n\n const soldOut = spots <= 0\n const total = schedule.capacity ?? null\n const text = soldOut\n ? labels?.soldOut ?? 'Sold out'\n : labels?.spotsLeft?.(spots, total) ??\n (showTotal && total ? `${spots} of ${total} spots left` : `${spots} spots left`)\n\n return (\n <span\n className={className}\n data-sk-part=\"capacity-badge\"\n data-sk-availability={soldOut ? 'sold-out' : 'open'}\n {...(!soldOut && spots <= lowThreshold ? { 'data-sk-urgency': 'low-spots' } : {})}\n >\n {text}\n </span>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/commerce/utils.ts","../src/commerce/api.ts","../src/commerce/OfferingCard.tsx","../src/commerce/OfferingList.tsx","../src/commerce/EventTile.tsx","../src/commerce/UpcomingEvents.tsx","../src/commerce/ProductEmbed.tsx","../src/commerce/SizeChart.tsx","../src/commerce/ProductDetail.tsx","../src/commerce/ProductGrid.tsx","../src/commerce/ProductPage.tsx","../src/commerce/EventEmbed.tsx","../src/commerce/CheckoutForm.tsx","../src/commerce/EventCheckout.tsx","../src/commerce/RegistrationForm.tsx","../src/commerce/CalendarView.tsx","../src/commerce/EventsAgenda.tsx","../src/commerce/EventModal.tsx","../src/commerce/useEventModal.ts","../src/commerce/EventCalendar.tsx","../src/commerce/EventsWidget.tsx","../src/commerce/events-extras.tsx"],"names":["body","jsxs","jsx","useState","useEffect","Fragment","React","useMemo","loadSquareSDK","useRef","formatTime","useCallback","getApiUrl","getApiKey"],"mappings":"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","file":"chunk-ZDFVYSKK.mjs","sourcesContent":["/**\n * @sonordev/site-kit/commerce - Utility functions\n */\n\nexport function formatPrice(amount: number, currency: string = 'USD'): string {\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency,\n }).format(amount)\n}\n\nexport function formatDate(dateString: string): string {\n const date = new Date(dateString)\n return new Intl.DateTimeFormat('en-US', {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n }).format(date)\n}\n\nexport function formatDateTime(dateString: string): string {\n const date = new Date(dateString)\n return new Intl.DateTimeFormat('en-US', {\n weekday: 'short',\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n }).format(date)\n}\n\nexport function formatTime(dateString: string): string {\n const date = new Date(dateString)\n return new Intl.DateTimeFormat('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n }).format(date)\n}\n\nexport function formatDateRange(startDate: string, endDate?: string): string {\n const start = new Date(startDate)\n const end = endDate ? new Date(endDate) : null\n \n const startFormatted = formatDateTime(startDate)\n \n if (!end) return startFormatted\n \n // Same day\n if (start.toDateString() === end.toDateString()) {\n return `${startFormatted} - ${formatTime(endDate!)}`\n }\n \n return `${startFormatted} - ${formatDateTime(endDate!)}`\n}\n\nexport function getRelativeTimeUntil(dateString: string): string {\n const date = new Date(dateString)\n const now = new Date()\n const diffMs = date.getTime() - now.getTime()\n const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24))\n \n if (diffDays < 0) return 'Past'\n if (diffDays === 0) return 'Today'\n if (diffDays === 1) return 'Tomorrow'\n if (diffDays < 7) return `In ${diffDays} days`\n if (diffDays < 30) {\n const weeks = Math.floor(diffDays / 7)\n return `In ${weeks} week${weeks > 1 ? 's' : ''}`\n }\n if (diffDays < 365) {\n const months = Math.floor(diffDays / 30)\n return `In ${months} month${months > 1 ? 's' : ''}`\n }\n return formatDate(dateString)\n}\n\nexport function getSpotsRemaining(\n capacity: number | null | undefined,\n registrations: number = 0\n): number | null {\n if (capacity == null) return null\n return Math.max(0, capacity - registrations)\n}\n\nexport function isEventSoldOut(\n capacity: number | null | undefined,\n registrations: number = 0\n): boolean {\n const remaining = getSpotsRemaining(capacity, registrations)\n return remaining !== null && remaining <= 0\n}\n\nexport function getOfferingUrl(\n slug: string, \n type: string,\n basePaths?: {\n product?: string\n service?: string\n event?: string\n class?: string\n }\n): string {\n const defaults = {\n product: '/shop',\n service: '/services',\n event: '/events',\n class: '/classes',\n }\n const paths = { ...defaults, ...basePaths }\n const base = paths[type as keyof typeof paths] || '/offerings'\n return `${base}/${slug}`\n}\n","/**\n * @sonordev/site-kit/commerce - Commerce API\n * \n * API functions for fetching offerings, submitting orders, and registrations.\n * All data goes through Portal API with API key auth - never Supabase directly.\n */\n\nimport type {\n CommerceOffering,\n FetchOfferingsOptions,\n FetchEventsOptions,\n CheckoutCustomer,\n CheckoutResult,\n} from './types'\nimport { sonorFetch } from '../shared/sonorFetch'\n\n// ============================================\n// API Config Helpers\n// ============================================\n\nfunction getApiConfig() {\n const apiUrl = typeof window !== 'undefined' \n ? (window as any).__SITE_KIT_API_URL__ || 'https://api.sonor.io'\n : 'https://api.sonor.io'\n const apiKey = typeof window !== 'undefined' \n ? (window as any).__SITE_KIT_API_KEY__ || ''\n : ''\n return { apiUrl, apiKey }\n}\n\nfunction getApiUrl(): string {\n return getApiConfig().apiUrl\n}\n\nfunction getApiKey(): string {\n return getApiConfig().apiKey\n}\n\nasync function apiPost<T>(endpoint: string, body: Record<string, any> = {}): Promise<T | null> {\n const { apiUrl, apiKey } = getApiConfig()\n \n if (!apiKey) {\n console.warn('[Commerce] No API key configured')\n return null\n }\n \n try {\n // Read-shaped endpoints only (offerings/products/rates) — safe to retry.\n const response = await sonorFetch(`${apiUrl}${endpoint}`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n }, { apiKey })\n\n if (!response.ok) {\n const text = await response.text()\n let body: unknown = null\n try {\n body = text ? JSON.parse(text) : null\n } catch {\n body = text\n }\n console.warn(`[Commerce] API error:`, response.status, response.statusText || 'Unknown', body)\n return null\n }\n \n return await response.json()\n } catch (error) {\n console.warn('[Commerce] Network error:', error)\n return null\n }\n}\n\n// ============================================\n// Fetch Offerings\n// ============================================\n\nexport async function fetchOfferings(\n options: FetchOfferingsOptions = {}\n): Promise<CommerceOffering[]> {\n const result = await apiPost<{ offerings: CommerceOffering[]; total: number }>(\n '/api/public/commerce/offerings',\n {\n type: options.type,\n category: options.category,\n status: options.status || 'active',\n limit: options.limit,\n offset: options.offset,\n orderBy: options.orderBy || 'sort_order',\n order: options.order || 'asc',\n }\n )\n \n return result?.offerings || []\n}\n\nexport async function fetchOffering(slug: string): Promise<CommerceOffering | null> {\n const result = await apiPost<{ offering?: CommerceOffering } | CommerceOffering>(\n '/api/public/commerce/offering',\n { slug }\n )\n if (!result) return null\n // Portal returns offering spread at top level; some APIs return { offering }\n const offering = (result as { offering?: CommerceOffering }).offering ?? result\n return (offering as CommerceOffering)?.id ? (offering as CommerceOffering) : null\n}\n\nexport async function fetchLatestOffering(\n type?: string,\n category?: string\n): Promise<CommerceOffering | null> {\n if (type === 'product') {\n const { products } = await fetchProductsPublic({\n category,\n limit: 1,\n orderBy: 'created_at',\n order: 'desc',\n })\n return products[0] || null\n }\n const result = await apiPost<{ offerings: CommerceOffering[] }>(\n '/api/public/commerce/offerings',\n {\n type,\n category,\n status: 'active',\n limit: 1,\n orderBy: 'created_at',\n order: 'desc',\n }\n )\n return result?.offerings?.[0] || null\n}\n\n// ============================================\n// Fetch Events (with schedules)\n// ============================================\n\nexport async function fetchUpcomingEvents(\n options: FetchEventsOptions = {}\n): Promise<CommerceOffering[]> {\n const result = await apiPost<{ events: CommerceOffering[]; total: number }>(\n '/api/public/commerce/events',\n {\n type: 'event',\n category: options.category,\n limit: options.limit,\n includePast: options.past,\n }\n )\n \n return result?.events || []\n}\n\nexport async function fetchNextEvent(category?: string): Promise<CommerceOffering | null> {\n const events = await fetchUpcomingEvents({ limit: 1, category })\n return events[0] || null\n}\n\n// ============================================\n// Products\n// ============================================\n\nexport async function fetchProducts(\n options: Omit<FetchOfferingsOptions, 'type'> = {}\n): Promise<CommerceOffering[]> {\n const { products } = await fetchProductsPublic({\n category: options.category,\n limit: options.limit,\n offset: options.offset,\n orderBy: options.orderBy || 'sort_order',\n order: options.order || 'asc',\n search: (options as any).search,\n })\n return products\n}\n\nexport async function fetchServices(\n options: Omit<FetchOfferingsOptions, 'type'> = {}\n): Promise<CommerceOffering[]> {\n return fetchOfferings({ ...options, type: 'service' })\n}\n\n/**\n * Fetch products via public API\n */\nexport async function fetchProductsPublic(\n options: {\n category?: string\n limit?: number\n offset?: number\n orderBy?: 'name' | 'price' | 'created_at' | 'sort_order'\n order?: 'asc' | 'desc'\n search?: string\n } = {}\n): Promise<{ products: CommerceOffering[]; total: number }> {\n const result = await apiPost<{ products: CommerceOffering[]; total: number }>(\n '/api/public/commerce/products',\n options\n )\n \n return {\n products: result?.products || [],\n total: result?.total || 0,\n }\n}\n\n/**\n * Fetch single product by slug\n */\nexport async function fetchProductBySlug(slug: string): Promise<CommerceOffering | null> {\n const result = await apiPost<{ product: CommerceOffering }>(\n '/api/public/commerce/product',\n { slug }\n )\n \n return result?.product || null\n}\n\n/**\n * Fetch product categories\n */\nexport async function fetchCategories(): Promise<{ id: string; name: string; slug: string }[]> {\n const result = await apiPost<{ categories: { id: string; name: string; slug: string }[] }>(\n '/api/public/commerce/categories',\n {}\n )\n \n return result?.categories || []\n}\n\n// ============================================\n// Shipping (Shippo)\n// ============================================\n\nexport interface ShippingAddress {\n street1: string\n street2?: string\n city: string\n state: string\n zip: string\n country?: string\n name?: string\n phone?: string\n}\n\nexport interface ShippingRate {\n carrier: string\n service: string\n amount: string\n currency: string\n estimatedDays?: number\n objectId?: string\n}\n\nexport interface ValidateAddressResult {\n isValid: boolean\n normalized?: { street1: string; street2?: string; city: string; state: string; zip: string; country: string }\n messages?: string[]\n}\n\n/**\n * Fetch shipping rates for checkout (when shipping is enabled)\n */\nexport async function fetchShippingRates(\n shippingAddress: ShippingAddress,\n offerings: Array<{ offering_id: string; quantity?: number }>\n): Promise<ShippingRate[]> {\n const result = await apiPost<ShippingRate[]>(\n '/api/public/commerce/shipping-rates',\n {\n shippingAddress: {\n street1: shippingAddress.street1,\n street2: shippingAddress.street2,\n city: shippingAddress.city,\n state: shippingAddress.state,\n zip: shippingAddress.zip,\n country: shippingAddress.country || 'US',\n },\n offerings,\n }\n )\n return Array.isArray(result) ? result : []\n}\n\n/**\n * Validate a shipping address before checkout\n */\nexport async function validateAddress(address: Omit<ShippingAddress, 'name' | 'phone'>): Promise<ValidateAddressResult> {\n const result = await apiPost<ValidateAddressResult>(\n '/api/public/commerce/validate-address',\n {\n street1: address.street1,\n street2: address.street2,\n city: address.city,\n state: address.state,\n zip: address.zip,\n country: address.country || 'US',\n }\n )\n return result || { isValid: true, messages: [] }\n}\n\n// ============================================\n// Payment Processor Info\n// ============================================\n\n/**\n * Fetch the active payment processor for the current project.\n * Returns 'stripe' | 'square' | null.\n */\nexport async function fetchActiveProcessor(): Promise<'stripe' | 'square' | null> {\n const { apiUrl, apiKey } = getApiConfig()\n \n if (!apiKey) return null\n \n try {\n const response = await sonorFetch(`${apiUrl}/api/public/commerce/processor`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({}),\n }, { apiKey })\n \n if (!response.ok) return null\n const data = await response.json()\n return data?.processor || null\n } catch {\n return null\n }\n}\n\n// ============================================\n// Checkout & Registration\n// ============================================\n\nexport async function registerForEvent(\n eventId: string,\n scheduleId: string | undefined,\n customer: CheckoutCustomer\n): Promise<CheckoutResult> {\n const { apiUrl, apiKey } = getApiConfig()\n \n // Get analytics session ID for conversion tracking\n const analyticsSessionId = typeof sessionStorage !== 'undefined'\n ? sessionStorage.getItem('_sk_sid')\n : null\n\n try {\n // retries: 0 — creates a sale; a retried timeout could double-register.\n const response = await sonorFetch(`${apiUrl}/api/public/commerce/register`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n offeringId: eventId,\n scheduleId,\n customer,\n analyticsSessionId, // Pass for conversion tracking\n }),\n }, { apiKey, retries: 0 })\n \n if (!response.ok) {\n const error = await response.json()\n return { success: false, error: error.message || 'Registration failed' }\n }\n \n const result = await response.json()\n \n // Note: Conversion is auto-logged via database trigger when commerce_sales is created\n \n return { \n success: true, \n sale_id: result.sale_id,\n confirmation_number: result.confirmation_number,\n }\n } catch (error) {\n return { success: false, error: 'Network error. Please try again.' }\n }\n}\n\nexport interface CheckoutLineItem {\n offeringId: string\n variantId?: string\n scheduleId?: string\n quantity: number\n}\n\nexport interface CreateCheckoutOptions {\n offeringId?: string\n variantId?: string\n scheduleId?: string\n quantity?: number\n /**\n * Multi-line cart (v1: events only, all items must share offeringId + scheduleId).\n * When provided, takes precedence over offeringId/variantId/quantity. Requires\n * `sourceId` (Square Web Payments SDK nonce) — Square inline only in v1.\n */\n lineItems?: CheckoutLineItem[]\n customer?: CheckoutCustomer\n successUrl?: string\n cancelUrl?: string\n /** Square card nonce from Web Payments SDK for inline card collection (no redirect) */\n sourceId?: string\n /** Shipping address (required for physical products when shipping_enabled) */\n shippingAddress?: ShippingAddress\n /** Selected shipping carrier from rates */\n shippingCarrier?: string\n /** Selected shipping service from rates */\n shippingService?: string\n /** Shipping cost in dollars (from selected rate) */\n shippingCost?: number\n /** Discount/promo code to apply */\n discountCode?: string\n}\n\nexport interface DiscountValidationResult {\n valid: boolean\n discount_amount?: number\n discount_type?: 'percentage' | 'fixed_amount' | 'free_shipping'\n discount_value?: number\n code?: string\n name?: string\n message?: string\n}\n\n/**\n * Validate a discount code against the current order.\n * Returns the discount amount if valid, or an error message if not.\n */\nexport async function validateDiscountCode(\n code: string,\n subtotal: number,\n offeringIds: string[] = [],\n): Promise<DiscountValidationResult> {\n const { apiUrl, apiKey } = getApiConfig()\n\n try {\n const response = await sonorFetch(`${apiUrl}/api/public/commerce/discount/validate`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ code, subtotal, offeringIds }),\n }, { apiKey })\n\n if (!response.ok) {\n const body = await response.json().catch(() => ({}))\n return { valid: false, message: body?.message || 'Invalid discount code' }\n }\n\n return await response.json()\n } catch {\n return { valid: false, message: 'Could not validate discount code' }\n }\n}\n\nexport interface ProcessorConfig {\n processor: 'stripe' | 'square' | null\n squareAppId?: string\n squareLocationId?: string\n squareEnvironment?: string\n stripePublishableKey?: string\n /** Whether shipping is enabled for this project */\n shipping_enabled?: boolean\n}\n\n/**\n * Fetch client-side SDK config for the active payment processor.\n * Returns public-safe values (app IDs, location IDs) for SDK initialization.\n */\nexport async function fetchProcessorConfig(): Promise<ProcessorConfig | null> {\n const { apiUrl, apiKey } = getApiConfig()\n if (!apiKey) return null\n\n try {\n const response = await sonorFetch(`${apiUrl}/api/public/commerce/processor-config`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({}),\n }, { apiKey })\n if (!response.ok) return null\n return await response.json()\n } catch {\n return null\n }\n}\n\n/**\n * Create a Stripe PaymentIntent for inline card payment (no redirect).\n * Use with Stripe Elements on the frontend to collect and confirm card details directly.\n * The existing payment_intent.succeeded webhook handles marking the sale as paid.\n */\nexport async function createPaymentIntent(options: CreateCheckoutOptions): Promise<{\n success: boolean\n clientSecret?: string\n saleId?: string\n confirmationNumber?: string\n error?: string\n}> {\n const apiUrl = getApiUrl()\n const apiKey = getApiKey()\n const sessionId = typeof sessionStorage !== 'undefined'\n ? sessionStorage.getItem('_sk_sid')\n : null\n\n try {\n // retries: 0 — creates a PaymentIntent + sale; never auto-retry money paths.\n const response = await sonorFetch(`${apiUrl}/api/public/commerce/create-payment-intent`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n ...options,\n analyticsSessionId: sessionId,\n }),\n }, { apiKey, retries: 0 })\n\n const data = await response.json()\n if (!response.ok) throw new Error(data.message || 'Failed to create payment intent')\n return data\n } catch (error: any) {\n return { success: false, error: error?.message || 'Network error. Please try again.' }\n }\n}\n\n/**\n * Create a checkout session for a product or service\n * Supports both Stripe and Square based on project configuration\n */\nexport async function createCheckoutSession(\n optionsOrOfferingId: CreateCheckoutOptions | string,\n legacyOptions?: Omit<CreateCheckoutOptions, 'offeringId'>\n): Promise<CheckoutResult> {\n const { apiUrl, apiKey } = getApiConfig()\n\n // Support both calling conventions\n const options: CreateCheckoutOptions = typeof optionsOrOfferingId === 'string'\n ? { offeringId: optionsOrOfferingId, ...legacyOptions }\n : optionsOrOfferingId\n \n // Get analytics session ID for conversion tracking\n const analyticsSessionId = typeof sessionStorage !== 'undefined'\n ? sessionStorage.getItem('_sk_sid')\n : null\n\n try {\n // retries: 0 — creates a checkout session/sale; never auto-retry money paths.\n const response = await sonorFetch(`${apiUrl}/api/public/commerce/checkout`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n ...options,\n analyticsSessionId, // Pass for conversion tracking\n successUrl: options.successUrl || (typeof window !== 'undefined' ? window.location.href : ''),\n cancelUrl: options.cancelUrl || (typeof window !== 'undefined' ? window.location.href : ''),\n }),\n }, { apiKey, retries: 0 })\n \n if (!response.ok) {\n const text = await response.text()\n let body: Record<string, unknown> = {}\n try {\n body = JSON.parse(text) as Record<string, unknown>\n } catch {\n // non-JSON response (e.g. HTML error page)\n }\n // Nest: { message } or { statusCode, message }; or wrapped: { success, error: { message } }\n const errObj = body?.error && typeof body.error === 'object' ? (body.error as Record<string, unknown>) : body\n const message =\n (typeof body?.message === 'string' ? body.message : null) ||\n (typeof errObj?.message === 'string' ? errObj.message : null) ||\n (typeof errObj?.detail === 'string' ? errObj.detail : null) ||\n (typeof body?.error === 'string' ? body.error : null) ||\n 'Payment could not be processed. Please try again or use a different card.'\n if (typeof console !== 'undefined') {\n console.warn('[Commerce] Checkout failed:', response.status, message, body)\n }\n return { success: false, error: message }\n }\n \n const result = await response.json()\n \n // Note: Conversion is auto-logged via database trigger when commerce_sales is created\n \n return { \n success: true, \n payment_url: result.checkout_url,\n checkout_url: result.checkout_url,\n sale_id: result.sale_id,\n confirmation_number: result.confirmation_number,\n }\n } catch (error) {\n return { success: false, error: 'Network error. Please try again.' }\n }\n}\n","/**\n * @sonordev/site-kit/commerce - OfferingCard\n * \n * Displays a single product, service, event, or class with image, title, price, and CTA.\n */\n\n'use client'\n\nimport React from 'react'\nimport type { OfferingCardProps } from './types'\nimport { formatPrice, formatDate } from './utils'\n\nexport function OfferingCard({\n offering,\n variant = 'card',\n showImage = true,\n showPrice = true,\n showDescription = true,\n showCta = true,\n ctaText,\n onCtaClick,\n className = '',\n imageClassName = '',\n titleClassName = '',\n priceClassName = '',\n descriptionClassName = '',\n ctaClassName = '',\n}: OfferingCardProps) {\n const isEvent = offering.type === 'event' || offering.type === 'class'\n const nextSchedule = offering.schedules?.[0] || (offering as any).next_schedule\n\n // Public styling hooks: consuming sites theme cards per category/type via CSS\n // attribute selectors, e.g. .site-kit-offering-card[data-category=\"pto\"]\n const dataAttrs = {\n 'data-sk-part': 'offering-card',\n 'data-category': offering.category?.slug,\n 'data-offering-type': offering.type,\n }\n \n // Default CTA text based on type\n const defaultCtaText = {\n product: 'Buy Now',\n service: 'Book Now',\n class: 'Register',\n event: 'Get Tickets',\n subscription: 'Subscribe',\n }[offering.type] || 'View Details'\n \n const handleClick = () => {\n // External URL — open in new tab, bypass internal routing\n if (offering.external_url && typeof window !== 'undefined') {\n window.open(offering.external_url, '_blank', 'noopener,noreferrer')\n return\n }\n\n if (onCtaClick) {\n onCtaClick(offering)\n } else if (typeof window !== 'undefined') {\n // Default: navigate to offering page\n const basePath = offering.type === 'event' ? '/events' :\n offering.type === 'product' ? '/shop' :\n '/services'\n window.location.href = `${basePath}/${offering.slug}`\n }\n }\n \n if (variant === 'minimal') {\n return (\n <div className={`site-kit-offering-minimal ${className}`} {...dataAttrs}>\n <h3 className={`site-kit-offering-title ${titleClassName}`}>\n {offering.name}\n </h3>\n {showPrice && offering.price_is_public && offering.price != null && (\n <span className={`site-kit-offering-price ${priceClassName}`}>\n {formatPrice(offering.price, offering.currency)}\n </span>\n )}\n {showCta && (\n <button\n onClick={handleClick}\n className={`site-kit-offering-cta ${ctaClassName}`}\n >\n {ctaText || defaultCtaText}\n </button>\n )}\n </div>\n )\n }\n \n if (variant === 'horizontal') {\n return (\n <div className={`site-kit-offering-horizontal ${className}`} {...dataAttrs} style={{\n display: 'flex',\n gap: '1rem',\n alignItems: 'flex-start',\n }}>\n {showImage && offering.featured_image_url && (\n <img\n src={offering.featured_image_url}\n alt={offering.name}\n className={`site-kit-offering-image ${imageClassName}`}\n style={{\n width: '120px',\n height: '120px',\n objectFit: 'cover',\n borderRadius: '8px',\n }}\n />\n )}\n <div style={{ flex: 1 }}>\n <h3 className={`site-kit-offering-title ${titleClassName}`} style={{\n margin: 0,\n fontSize: '1.125rem',\n fontWeight: 600,\n }}>\n {offering.name}\n </h3>\n \n {isEvent && nextSchedule && (\n <div className=\"site-kit-offering-date\" style={{\n color: 'var(--sk-text-secondary)',\n fontSize: '0.875rem',\n marginTop: '0.25rem',\n }}>\n {formatDate(nextSchedule.starts_at)}\n {offering.location && ` • ${offering.location}`}\n </div>\n )}\n \n {showDescription && offering.short_description && (\n <p className={`site-kit-offering-description ${descriptionClassName}`} style={{\n color: 'var(--sk-text-secondary)',\n margin: '0.5rem 0',\n fontSize: '0.875rem',\n }}>\n {offering.short_description}\n </p>\n )}\n \n <div style={{ display: 'flex', alignItems: 'center', gap: '1rem', marginTop: '0.5rem' }}>\n {showPrice && offering.price_is_public && offering.price != null && (\n <span className={`site-kit-offering-price ${priceClassName}`} style={{\n fontWeight: 600,\n color: 'var(--sk-text-primary)',\n }}>\n {formatPrice(offering.price, offering.currency)}\n {offering.compare_at_price && (\n <span style={{\n textDecoration: 'line-through',\n color: 'var(--sk-text-secondary)',\n marginLeft: '0.5rem',\n fontWeight: 400,\n }}>\n {formatPrice(offering.compare_at_price, offering.currency)}\n </span>\n )}\n </span>\n )}\n\n {showCta && (\n <button\n onClick={handleClick}\n className={`site-kit-offering-cta ${ctaClassName}`}\n style={{\n padding: '0.5rem 1rem',\n borderRadius: '6px',\n border: 'none',\n background: 'var(--sk-primary)',\n color: 'var(--sk-bg)',\n cursor: 'pointer',\n fontWeight: 500,\n }}\n >\n {ctaText || defaultCtaText}\n </button>\n )}\n </div>\n </div>\n </div>\n )\n }\n \n // Default: card variant\n return (\n <div className={`site-kit-offering-card ${className}`} {...dataAttrs} style={{\n borderRadius: '12px',\n overflow: 'hidden',\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\n background: 'var(--sk-bg)',\n }}>\n {showImage && offering.featured_image_url && (\n <div style={{ position: 'relative' }}>\n <img\n src={offering.featured_image_url}\n alt={offering.name}\n className={`site-kit-offering-image ${imageClassName}`}\n style={{\n width: '100%',\n height: '200px',\n objectFit: 'cover',\n }}\n />\n {offering.compare_at_price && offering.price_is_public && (\n <span style={{\n position: 'absolute',\n top: '12px',\n right: '12px',\n background: 'var(--sk-error)',\n color: 'var(--sk-bg)',\n padding: '4px 8px',\n borderRadius: '4px',\n fontSize: '0.75rem',\n fontWeight: 600,\n }}>\n Sale\n </span>\n )}\n </div>\n )}\n \n <div style={{ padding: '1rem' }}>\n {isEvent && nextSchedule && (\n <div className=\"site-kit-offering-date\" style={{\n color: 'var(--sk-primary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n marginBottom: '0.25rem',\n }}>\n {formatDate(nextSchedule.starts_at)}\n </div>\n )}\n \n <h3 className={`site-kit-offering-title ${titleClassName}`} style={{\n margin: 0,\n fontSize: '1.125rem',\n fontWeight: 600,\n color: 'var(--sk-text-primary)',\n }}>\n {offering.name}\n </h3>\n \n {isEvent && offering.location && (\n <div style={{ color: 'var(--sk-text-secondary)', fontSize: '0.875rem', marginTop: '0.25rem' }}>\n 📍 {offering.location}\n </div>\n )}\n \n {showDescription && offering.short_description && (\n <p className={`site-kit-offering-description ${descriptionClassName}`} style={{\n color: 'var(--sk-text-secondary)',\n margin: '0.75rem 0',\n fontSize: '0.875rem',\n lineHeight: 1.5,\n }}>\n {offering.short_description}\n </p>\n )}\n \n <div style={{ \n display: 'flex', \n alignItems: 'center', \n justifyContent: 'space-between',\n marginTop: '1rem',\n }}>\n {showPrice && offering.price_is_public && offering.price != null ? (\n <div className={`site-kit-offering-price ${priceClassName}`}>\n <span style={{ fontWeight: 600, fontSize: '1.25rem', color: 'var(--sk-text-primary)' }}>\n {formatPrice(offering.price, offering.currency)}\n </span>\n {offering.compare_at_price && (\n <span style={{\n textDecoration: 'line-through',\n color: 'var(--sk-text-secondary)',\n marginLeft: '0.5rem',\n fontSize: '0.875rem',\n }}>\n {formatPrice(offering.compare_at_price, offering.currency)}\n </span>\n )}\n </div>\n ) : (\n <div /> // spacer\n )}\n\n {showCta && (\n <button\n onClick={handleClick}\n className={`site-kit-offering-cta ${ctaClassName}`}\n style={{\n padding: '0.625rem 1.25rem',\n borderRadius: '6px',\n border: 'none',\n background: 'var(--sk-primary)',\n color: 'var(--sk-bg)',\n cursor: 'pointer',\n fontWeight: 500,\n fontSize: '0.875rem',\n }}\n >\n {ctaText || defaultCtaText}\n </button>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport default OfferingCard\n","/**\n * @sonordev/site-kit/commerce - OfferingList\n * \n * Displays a grid or list of offerings with optional filtering.\n */\n\n'use client'\n\nimport React, { useEffect, useState, useMemo } from 'react'\nimport type { OfferingListProps } from './types'\nimport type { CommerceOffering } from './types'\nimport { OfferingCard } from './OfferingCard'\nimport { fetchOfferings, fetchProductsPublic, fetchUpcomingEvents } from './api'\n\nexport function OfferingList({\n // Data options\n offerings: propOfferings,\n type,\n category,\n limit,\n status = 'active',\n \n // Display options\n layout = 'grid',\n columns = 3,\n cardVariant = 'card',\n showFilters = false,\n emptyMessage = 'No items found.',\n \n // Card options\n showImage = true,\n showPrice = true,\n showDescription = true,\n showCta = true,\n ctaText,\n onCtaClick,\n \n // Styling\n className = '',\n cardClassName = '',\n filterClassName = '',\n \n // Custom render\n renderCard,\n renderEmpty,\n}: OfferingListProps) {\n const [offerings, setOfferings] = useState<CommerceOffering[]>(propOfferings || [])\n const [loading, setLoading] = useState(!propOfferings)\n const [error, setError] = useState<string | null>(null)\n const [activeFilter, setActiveFilter] = useState<string | null>(null)\n \n // Fetch offerings if not provided\n useEffect(() => {\n if (propOfferings) {\n setOfferings(propOfferings)\n return\n }\n \n async function load() {\n setLoading(true)\n setError(null)\n \n try {\n let data: CommerceOffering[]\n \n if (type === 'product' || (Array.isArray(type) && type.includes('product'))) {\n const { products } = await fetchProductsPublic({ category, limit, orderBy: 'sort_order', order: 'asc' })\n data = products\n } else if (type === 'event') {\n data = await fetchUpcomingEvents({ category, limit })\n } else {\n data = await fetchOfferings({ type, category, limit, status })\n }\n \n setOfferings(data)\n } catch (e) {\n console.warn('Failed to load offerings:', e)\n setError('Failed to load items.')\n } finally {\n setLoading(false)\n }\n }\n \n load()\n }, [propOfferings, type, category, limit, status])\n \n // Get unique categories for filtering\n const categories = useMemo(() => {\n const cats = offerings\n .filter(o => o.category)\n .map(o => o.category!)\n \n // Unique by ID\n return Array.from(new Map(cats.map(c => [c.id, c])).values())\n }, [offerings])\n \n // Filtered offerings\n const filteredOfferings = useMemo(() => {\n if (!activeFilter) return offerings\n return offerings.filter(o => o.category?.id === activeFilter)\n }, [offerings, activeFilter])\n \n if (loading) {\n return (\n <div className={`site-kit-offerings-loading ${className}`} style={{\n display: 'flex',\n justifyContent: 'center',\n padding: '2rem',\n }}>\n <div style={{\n width: '40px',\n height: '40px',\n border: '3px solid var(--sk-border)',\n borderTopColor: 'var(--sk-primary)',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }} />\n <style>{`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n )\n }\n \n if (error) {\n return (\n <div className={`site-kit-offerings-error ${className}`} style={{\n textAlign: 'center',\n padding: '2rem',\n color: 'var(--sk-error)',\n }}>\n {error}\n </div>\n )\n }\n \n if (filteredOfferings.length === 0) {\n if (renderEmpty) {\n return <>{renderEmpty()}</>\n }\n \n return (\n <div className={`site-kit-offerings-empty ${className}`} style={{\n textAlign: 'center',\n padding: '2rem',\n color: 'var(--sk-text-secondary)',\n }}>\n {emptyMessage}\n </div>\n )\n }\n \n const gridStyles = layout === 'grid' ? {\n display: 'grid',\n gridTemplateColumns: `repeat(${columns}, minmax(0, 1fr))`,\n gap: '1.5rem',\n } : {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '1rem',\n }\n \n return (\n <div className={`site-kit-offerings ${className}`}>\n {showFilters && categories.length > 1 && (\n <div \n className={`site-kit-offerings-filters ${filterClassName}`}\n style={{\n display: 'flex',\n gap: '0.5rem',\n marginBottom: '1.5rem',\n flexWrap: 'wrap',\n }}\n >\n <button\n onClick={() => setActiveFilter(null)}\n style={{\n padding: '0.5rem 1rem',\n borderRadius: '9999px',\n border: '1px solid',\n borderColor: activeFilter === null ? 'var(--sk-primary)' : 'var(--sk-border)',\n background: activeFilter === null ? 'var(--sk-primary)' : 'var(--sk-bg)',\n color: activeFilter === null ? 'var(--sk-bg)' : 'var(--sk-text-primary)',\n cursor: 'pointer',\n fontSize: '0.875rem',\n }}\n >\n All\n </button>\n {categories.map(cat => (\n <button\n key={cat.id}\n onClick={() => setActiveFilter(cat.id)}\n style={{\n padding: '0.5rem 1rem',\n borderRadius: '9999px',\n border: '1px solid',\n borderColor: activeFilter === cat.id ? 'var(--sk-primary)' : 'var(--sk-border)',\n background: activeFilter === cat.id ? 'var(--sk-primary)' : 'var(--sk-bg)',\n color: activeFilter === cat.id ? 'var(--sk-bg)' : 'var(--sk-text-primary)',\n cursor: 'pointer',\n fontSize: '0.875rem',\n }}\n >\n {cat.name}\n </button>\n ))}\n </div>\n )}\n \n <div className=\"site-kit-offerings-grid\" style={gridStyles}>\n {filteredOfferings.map(offering => (\n renderCard ? renderCard(offering) : (\n <OfferingCard\n key={offering.id}\n offering={offering}\n variant={layout === 'list' ? 'horizontal' : cardVariant}\n showImage={showImage}\n showPrice={showPrice}\n showDescription={showDescription}\n showCta={showCta}\n ctaText={ctaText}\n onCtaClick={onCtaClick}\n className={cardClassName}\n />\n )\n ))}\n </div>\n </div>\n )\n}\n\nexport default OfferingList\n","/**\n * @sonordev/site-kit/commerce - EventTile\n * \n * Compact tile for displaying an event with date, title, and registration button.\n * Great for embedding on homepages or sidebars.\n */\n\n'use client'\n\nimport React, { useState } from 'react'\nimport type { EventTileProps, CommerceOffering } from './types'\nimport { formatDate, formatTime, getRelativeTimeUntil, getSpotsRemaining, isEventSoldOut } from './utils'\nimport { registerForEvent, createCheckoutSession } from './api'\n\nexport function EventTile({\n event,\n variant = 'standard',\n showDate = true,\n showTime = true,\n showLocation = true,\n showCapacity = true,\n showPrice = true,\n showCta = true,\n ctaText,\n onRegister,\n onCtaClick,\n className = '',\n dateClassName = '',\n titleClassName = '',\n ctaClassName = '',\n}: EventTileProps) {\n const [loading, setLoading] = useState(false)\n \n const schedule = event.schedules?.[0] || (event as any).next_schedule\n const soldOut = schedule ? isEventSoldOut(schedule.capacity, schedule.current_registrations) : false\n const spotsRemaining = schedule ? getSpotsRemaining(schedule.capacity, schedule.current_registrations) : null\n \n const defaultCtaText = event.price && event.price > 0 ? 'Get Tickets' : 'Register Free'\n\n // Public styling hooks: consuming sites theme tiles per category/type via CSS\n // attribute selectors, e.g. .site-kit-event-tile[data-category=\"pto\"]\n const dataAttrs = {\n 'data-sk-part': 'event-tile',\n 'data-category': event.category?.slug,\n 'data-offering-type': event.type,\n }\n \n const handleClick = async () => {\n // External URL — open in new tab, bypass internal checkout\n if (event.external_url) {\n window.open(event.external_url, '_blank', 'noopener,noreferrer')\n return\n }\n\n if (onCtaClick) {\n onCtaClick(event)\n return\n }\n\n // If no schedule, go to event page\n if (!schedule) {\n window.location.href = `/events/${event.slug}`\n return\n }\n \n // If custom onRegister handler\n if (onRegister) {\n onRegister(event, schedule.id)\n return\n }\n \n // Default: create checkout session for paid, or go to registration page\n setLoading(true)\n try {\n if (event.price && event.price > 0) {\n const result = await createCheckoutSession(event.id, { scheduleId: schedule.id })\n if (result.payment_url) {\n window.location.href = result.payment_url\n }\n } else {\n // Free event - go to registration page\n window.location.href = `/events/${event.slug}/register`\n }\n } catch (e) {\n console.error('Registration error:', e)\n } finally {\n setLoading(false)\n }\n }\n \n if (variant === 'compact') {\n return (\n <div className={`site-kit-event-tile-compact ${className}`} {...dataAttrs} style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n padding: '0.75rem',\n background: 'var(--sk-bg)',\n borderRadius: '8px',\n boxShadow: '0 1px 2px rgba(0,0,0,0.05)',\n }}>\n {showDate && schedule && (\n <div className={`site-kit-event-date ${dateClassName}`} style={{\n minWidth: '48px',\n textAlign: 'center',\n padding: '0.5rem',\n background: 'var(--sk-surface)',\n borderRadius: '6px',\n }}>\n <div style={{ fontSize: '0.75rem', color: 'var(--sk-text-secondary)', textTransform: 'uppercase' }}>\n {new Date(schedule.starts_at).toLocaleDateString('en-US', { month: 'short' })}\n </div>\n <div style={{ fontSize: '1.25rem', fontWeight: 700, color: 'var(--sk-text-primary)' }}>\n {new Date(schedule.starts_at).getDate()}\n </div>\n </div>\n )}\n \n <div style={{ flex: 1, minWidth: 0 }}>\n <h4 className={`site-kit-event-title ${titleClassName}`} style={{\n margin: 0,\n fontSize: '0.875rem',\n fontWeight: 600,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}>\n {event.name}\n </h4>\n {showTime && schedule && (\n <div style={{ fontSize: '0.75rem', color: 'var(--sk-text-secondary)' }}>\n {formatTime(schedule.starts_at)}\n {showLocation && event.location && ` • ${event.location}`}\n </div>\n )}\n </div>\n \n {showCta && (\n <button\n onClick={handleClick}\n disabled={soldOut || loading}\n className={`site-kit-event-cta ${ctaClassName}`}\n style={{\n padding: '0.375rem 0.75rem',\n fontSize: '0.75rem',\n borderRadius: '4px',\n border: 'none',\n background: soldOut ? 'var(--sk-border)' : 'var(--sk-primary)',\n color: soldOut ? 'var(--sk-text-secondary)' : 'var(--sk-bg)',\n cursor: soldOut ? 'not-allowed' : 'pointer',\n fontWeight: 500,\n whiteSpace: 'nowrap',\n }}\n >\n {soldOut ? 'Sold Out' : (loading ? '...' : (ctaText || defaultCtaText))}\n </button>\n )}\n </div>\n )\n }\n \n // Standard variant\n return (\n <div className={`site-kit-event-tile ${className}`} {...dataAttrs} style={{\n background: 'var(--sk-bg)',\n borderRadius: '12px',\n overflow: 'hidden',\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\n }}>\n {event.featured_image_url && (\n <img\n src={event.featured_image_url}\n alt={event.name}\n style={{\n width: '100%',\n height: '140px',\n objectFit: 'cover',\n }}\n />\n )}\n \n <div style={{ padding: '1rem' }}>\n {showDate && schedule && (\n <div className={`site-kit-event-date ${dateClassName}`} style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n marginBottom: '0.5rem',\n }}>\n <span style={{\n background: 'rgba(var(--sk-primary-rgb), 0.125)',\n color: 'var(--sk-primary)',\n padding: '0.25rem 0.5rem',\n borderRadius: '4px',\n fontSize: '0.75rem',\n fontWeight: 600,\n }}>\n {getRelativeTimeUntil(schedule.starts_at)}\n </span>\n <span style={{ fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>\n {formatDate(schedule.starts_at)}\n </span>\n </div>\n )}\n \n <h3 className={`site-kit-event-title ${titleClassName}`} style={{\n margin: '0 0 0.5rem',\n fontSize: '1.125rem',\n fontWeight: 600,\n color: 'var(--sk-text-primary)',\n }}>\n {event.name}\n </h3>\n \n {showLocation && event.location && (\n <div style={{ fontSize: '0.875rem', color: 'var(--sk-text-secondary)', marginBottom: '0.5rem' }}>\n 📍 {event.location}\n </div>\n )}\n \n {showTime && schedule && (\n <div style={{ fontSize: '0.875rem', color: 'var(--sk-text-secondary)', marginBottom: '0.75rem' }}>\n 🕐 {formatTime(schedule.starts_at)}\n {schedule.ends_at && ` - ${formatTime(schedule.ends_at)}`}\n </div>\n )}\n \n <div style={{ \n display: 'flex', \n justifyContent: 'space-between', \n alignItems: 'center',\n marginTop: '0.75rem',\n }}>\n <div>\n {showPrice && event.price_is_public && event.price != null && (\n <span style={{ fontWeight: 600, color: 'var(--sk-text-primary)' }}>\n {event.price === 0 ? 'Free' : `$${event.price}`}\n </span>\n )}\n {showCapacity && spotsRemaining !== null && spotsRemaining <= 10 && !soldOut && (\n <span style={{ \n fontSize: '0.75rem', \n color: 'var(--sk-error)',\n marginLeft: '0.5rem',\n }}>\n Only {spotsRemaining} spots left!\n </span>\n )}\n </div>\n \n {showCta && (\n <button\n onClick={handleClick}\n disabled={soldOut || loading}\n className={`site-kit-event-cta ${ctaClassName}`}\n style={{\n padding: '0.5rem 1rem',\n borderRadius: '6px',\n border: 'none',\n background: soldOut ? 'var(--sk-border)' : 'var(--sk-primary)',\n color: soldOut ? 'var(--sk-text-secondary)' : 'var(--sk-bg)',\n cursor: soldOut ? 'not-allowed' : 'pointer',\n fontWeight: 500,\n fontSize: '0.875rem',\n }}\n >\n {soldOut ? 'Sold Out' : (loading ? 'Loading...' : (ctaText || defaultCtaText))}\n </button>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport default EventTile\n","/**\n * @sonordev/site-kit/commerce - UpcomingEvents\n * \n * Displays a list of upcoming events with date, title, and registration buttons.\n */\n\n'use client'\n\nimport React, { useEffect, useState } from 'react'\nimport type { UpcomingEventsProps, CommerceOffering } from './types'\nimport { EventTile } from './EventTile'\nimport { fetchUpcomingEvents } from './api'\n\nexport function UpcomingEvents({\n events: propEvents,\n limit = 3,\n category,\n variant = 'standard',\n layout = 'vertical',\n showViewAll = true,\n viewAllUrl = '/events',\n viewAllText = 'View All Events',\n emptyMessage = 'No upcoming events.',\n title,\n onRegister,\n onCtaClick,\n className = '',\n titleClassName = '',\n eventClassName = '',\n}: UpcomingEventsProps) {\n const [events, setEvents] = useState<CommerceOffering[]>(propEvents || [])\n const [loading, setLoading] = useState(!propEvents)\n \n useEffect(() => {\n if (propEvents) {\n setEvents(propEvents)\n return\n }\n \n async function load() {\n setLoading(true)\n try {\n const data = await fetchUpcomingEvents({ limit, category })\n setEvents(data)\n } catch (e) {\n console.error('Failed to load events:', e)\n } finally {\n setLoading(false)\n }\n }\n \n load()\n }, [propEvents, limit, category])\n \n if (loading) {\n return (\n <div className={`site-kit-upcoming-events ${className}`}>\n <div style={{ padding: '2rem', textAlign: 'center', color: 'var(--sk-text-secondary)' }}>\n Loading events...\n </div>\n </div>\n )\n }\n \n if (events.length === 0) {\n return (\n <div className={`site-kit-upcoming-events ${className}`}>\n {title && (\n <h2 className={`site-kit-upcoming-events-title ${titleClassName}`} style={{\n margin: '0 0 1rem',\n fontSize: '1.5rem',\n fontWeight: 600,\n }}>\n {title}\n </h2>\n )}\n <div style={{ padding: '2rem', textAlign: 'center', color: 'var(--sk-text-secondary)' }}>\n {emptyMessage}\n </div>\n </div>\n )\n }\n \n const layoutStyles = layout === 'horizontal' ? {\n display: 'flex',\n gap: '1rem',\n overflowX: 'auto' as const,\n } : {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '1rem',\n }\n \n return (\n <div className={`site-kit-upcoming-events ${className}`}>\n {title && (\n <div style={{ \n display: 'flex', \n justifyContent: 'space-between', \n alignItems: 'center',\n marginBottom: '1rem',\n }}>\n <h2 className={`site-kit-upcoming-events-title ${titleClassName}`} style={{\n margin: 0,\n fontSize: '1.5rem',\n fontWeight: 600,\n }}>\n {title}\n </h2>\n \n {showViewAll && events.length >= limit && (\n <a\n href={viewAllUrl}\n style={{\n color: 'var(--sk-primary)',\n textDecoration: 'none',\n fontSize: '0.875rem',\n fontWeight: 500,\n }}\n >\n {viewAllText} →\n </a>\n )}\n </div>\n )}\n \n <div style={layoutStyles}>\n {events.map(event => (\n <div \n key={event.id} \n className={eventClassName}\n style={layout === 'horizontal' ? { minWidth: '280px', flex: '0 0 auto' } : undefined}\n >\n <EventTile\n event={event}\n variant={variant}\n onRegister={onRegister}\n onCtaClick={onCtaClick}\n />\n </div>\n ))}\n </div>\n \n {showViewAll && events.length >= limit && !title && (\n <div style={{ textAlign: 'center', marginTop: '1.5rem' }}>\n <a\n href={viewAllUrl}\n style={{\n display: 'inline-block',\n padding: '0.75rem 1.5rem',\n background: 'var(--sk-surface)',\n color: 'var(--sk-text-primary)',\n borderRadius: '8px',\n textDecoration: 'none',\n fontWeight: 500,\n }}\n >\n {viewAllText}\n </a>\n </div>\n )}\n </div>\n )\n}\n\nexport default UpcomingEvents\n","/**\n * @sonordev/site-kit/commerce - ProductEmbed\n * \n * Embeddable widget for displaying a single product on a homepage or landing page.\n * Supports showing latest product, specific product by slug, or a random featured product.\n */\n\n'use client'\n\nimport React, { useEffect, useState } from 'react'\nimport type { ProductEmbedProps, CommerceOffering } from './types'\nimport { OfferingCard } from './OfferingCard'\nimport { fetchProductBySlug, fetchLatestOffering } from './api'\n\nexport function ProductEmbed({\n product: propProduct,\n slug,\n mode = 'specific', // 'specific', 'latest', 'featured'\n category,\n variant = 'card',\n showImage = true,\n showPrice = true,\n showDescription = true,\n showCta = true,\n ctaText = 'Shop Now',\n onCtaClick,\n className = '',\n}: ProductEmbedProps) {\n const [product, setProduct] = useState<CommerceOffering | null>(propProduct || null)\n const [loading, setLoading] = useState(!propProduct && !!slug)\n \n useEffect(() => {\n if (propProduct) {\n setProduct(propProduct)\n return\n }\n \n async function load() {\n setLoading(true)\n try {\n let data: CommerceOffering | null = null\n \n if (mode === 'specific' && slug) {\n data = await fetchProductBySlug(slug)\n } else if (mode === 'latest' || mode === 'featured') {\n data = await fetchLatestOffering('product', category)\n }\n \n setProduct(data)\n } catch (e) {\n console.warn('Failed to load product:', e)\n } finally {\n setLoading(false)\n }\n }\n \n load()\n }, [propProduct, slug, mode, category])\n \n if (loading) {\n return (\n <div className={`site-kit-product-embed ${className}`} style={{\n padding: '2rem',\n textAlign: 'center',\n background: 'var(--sk-bg-elevated)',\n borderRadius: '12px',\n }}>\n <div style={{\n width: '40px',\n height: '40px',\n margin: '0 auto',\n border: '3px solid var(--sk-border)',\n borderTopColor: 'var(--sk-primary)',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }} />\n <style>{`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n )\n }\n \n if (!product) {\n return null // Silent fail - don't show anything if no product\n }\n \n return (\n <div className={`site-kit-product-embed ${className}`}>\n <OfferingCard\n offering={product}\n variant={variant}\n showImage={showImage}\n showPrice={showPrice}\n showDescription={showDescription}\n showCta={showCta}\n ctaText={ctaText}\n onCtaClick={onCtaClick}\n />\n </div>\n )\n}\n\nexport default ProductEmbed\n","'use client'\n\nimport { useState } from 'react'\nimport type { SizeChart as SizeChartType } from './types'\n\ninterface SizeChartProps {\n chart: SizeChartType\n selectedSize?: string\n className?: string\n}\n\nconst CM_PER_INCH = 2.54\n\nfunction convertValue(value: number, fromUnit: 'inches' | 'cm'): number {\n if (fromUnit === 'inches') return Math.round(value * CM_PER_INCH * 10) / 10\n return Math.round((value / CM_PER_INCH) * 10) / 10\n}\n\nexport function SizeChart({ chart, selectedSize, className }: SizeChartProps) {\n const [isOpen, setIsOpen] = useState(false)\n // showAlt: true means display the alternate unit (not the chart's primary unit)\n const [showAlt, setShowAlt] = useState(false)\n\n if (!chart?.measurements?.length || !chart?.rows?.length) return null\n\n // The display unit when showAlt is active is the opposite of the primary unit\n const primaryUnit = chart.unit\n const altUnit: 'inches' | 'cm' = primaryUnit === 'inches' ? 'cm' : 'inches'\n const activeUnit = showAlt ? altUnit : primaryUnit\n const unitLabel = activeUnit === 'cm' ? 'cm' : 'in'\n\n function getDisplayValues(row: SizeChartType['rows'][number]): (number | string)[] {\n if (!showAlt) return row.values\n\n // Use stored alt values if present, otherwise compute on the fly\n if (row.values_alt && row.values_alt.length === row.values.length) {\n return row.values_alt\n }\n\n return row.values.map((v) => convertValue(v, primaryUnit))\n }\n\n return (\n <div className={className}>\n {/* Toggle row: \"View Size Chart\" link + unit pill */}\n <div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>\n <button\n type=\"button\"\n onClick={() => setIsOpen(!isOpen)}\n style={{\n background: 'none',\n border: 'none',\n padding: 0,\n cursor: 'pointer',\n fontSize: '14px',\n color: 'inherit',\n opacity: 0.7,\n textDecoration: 'underline',\n textUnderlineOffset: '2px',\n }}\n >\n {isOpen ? 'Hide Size Chart' : 'View Size Chart'}\n </button>\n\n {isOpen && (\n <button\n type=\"button\"\n onClick={() => setShowAlt(!showAlt)}\n style={{\n background: 'none',\n border: '1px solid rgba(128,128,128,0.25)',\n borderRadius: '999px',\n padding: '2px 8px',\n cursor: 'pointer',\n fontSize: '11px',\n lineHeight: 1.4,\n display: 'flex',\n alignItems: 'center',\n gap: 0,\n }}\n >\n <span style={{ fontWeight: activeUnit === 'inches' ? 700 : 400, opacity: activeUnit === 'inches' ? 1 : 0.45 }}>in</span>\n <span style={{ margin: '0 3px', opacity: 0.3 }}>/</span>\n <span style={{ fontWeight: activeUnit === 'cm' ? 700 : 400, opacity: activeUnit === 'cm' ? 1 : 0.45 }}>cm</span>\n </button>\n )}\n </div>\n\n {isOpen && (\n <div style={{ marginTop: '12px', overflowX: 'auto' }}>\n <table\n style={{\n width: '100%',\n borderCollapse: 'collapse',\n fontSize: '13px',\n lineHeight: 1.5,\n }}\n >\n <thead>\n <tr>\n <th style={thStyle}>Size</th>\n {chart.measurements.map((m) => (\n <th key={m} style={thStyle}>\n {m} <span style={{ opacity: 0.5, fontWeight: 400 }}>({unitLabel})</span>\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {chart.rows.map((row) => {\n const isSelected = selectedSize === row.size\n const displayValues = getDisplayValues(row)\n return (\n <tr\n key={row.size}\n style={{\n backgroundColor: isSelected ? 'rgba(57, 191, 176, 0.08)' : undefined,\n }}\n >\n <td style={{ ...tdStyle, fontWeight: 600 }}>{row.size}</td>\n {displayValues.map((v, i) => (\n <td key={i} style={tdStyle}>{v}</td>\n ))}\n </tr>\n )\n })}\n </tbody>\n </table>\n </div>\n )}\n </div>\n )\n}\n\nconst thStyle: React.CSSProperties = {\n padding: '8px 12px',\n textAlign: 'left',\n fontWeight: 600,\n borderBottom: '1px solid rgba(128, 128, 128, 0.2)',\n whiteSpace: 'nowrap',\n}\n\nconst tdStyle: React.CSSProperties = {\n padding: '8px 12px',\n borderBottom: '1px solid rgba(128, 128, 128, 0.1)',\n whiteSpace: 'nowrap',\n}\n","'use client'\n\n/**\n * @sonordev/site-kit/commerce - ProductDetail\n *\n * World-class product detail component with full inline checkout.\n * Supports products, services, events, and subscriptions.\n * Zero external dependencies — Square and Stripe SDKs loaded dynamically.\n */\n\nimport React, { useState, useEffect, useRef, useCallback, useMemo } from 'react'\nimport type {\n CommerceOffering,\n CommerceVariant,\n CommerceSchedule,\n CheckoutCustomer,\n CheckoutResult,\n} from './types'\nimport {\n fetchProductBySlug,\n fetchProcessorConfig,\n fetchShippingRates,\n createCheckoutSession,\n createPaymentIntent,\n registerForEvent,\n} from './api'\nimport type { ShippingAddress, ShippingRate, ProcessorConfig, CreateCheckoutOptions } from './api'\nimport { formatPrice, formatDate, formatTime, getSpotsRemaining, isEventSoldOut } from './utils'\nimport { SizeChart } from './SizeChart'\nimport { useAnalyticsOptional } from '../analytics'\n\n// ============================================\n// Style Block\n// ============================================\n\nconst STYLE_BLOCK = `\n@keyframes skc-spin {\n to { transform: rotate(360deg); }\n}\n@keyframes skc-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.6; }\n}\n@keyframes skc-fadeIn {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n}\n@keyframes skc-slideUp {\n from { opacity: 0; transform: translateY(100%); }\n to { opacity: 1; transform: translateY(0); }\n}\n@keyframes skc-scaleIn {\n from { opacity: 0; transform: scale(0.95); }\n to { opacity: 1; transform: scale(1); }\n}\n@keyframes skc-checkmark {\n 0% { stroke-dashoffset: 24; }\n 100% { stroke-dashoffset: 0; }\n}\n\n.skc-detail {\n animation: skc-fadeIn 0.3s ease-out;\n}\n\n/*\n * Commerce uses --sk-* CSS custom properties inherited from the host site's :root.\n * Host sites define their design tokens via the site-kit theme system.\n */\n\n.skc-detail *, .skc-detail *::before, .skc-detail *::after {\n box-sizing: border-box;\n}\n\n.skc-detail-layout {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 2.5rem;\n align-items: start;\n max-width: 1200px;\n margin: 0 auto;\n padding: 1.5rem;\n}\n\n@media (max-width: 768px) {\n .skc-detail-layout {\n grid-template-columns: 1fr;\n gap: 1.5rem;\n }\n .skc-detail-layout.skc-stacked {\n grid-template-columns: 1fr;\n }\n}\n\n.skc-detail-layout.skc-stacked {\n grid-template-columns: 1fr;\n max-width: 640px;\n}\n\n/* Gallery */\n.skc-gallery-main {\n position: relative;\n overflow: hidden;\n border-radius: var(--sk-radius, 12px);\n background: var(--sk-bg-elevated);\n cursor: crosshair;\n aspect-ratio: 1;\n}\n.skc-gallery-main img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n transition: transform 0.15s ease-out;\n will-change: transform;\n}\n.skc-gallery-thumbs {\n display: flex;\n gap: 0.5rem;\n margin-top: 0.75rem;\n overflow-x: auto;\n scrollbar-width: thin;\n -webkit-overflow-scrolling: touch;\n padding-bottom: 4px;\n}\n.skc-gallery-thumb {\n flex: 0 0 auto;\n width: 64px;\n height: 64px;\n border-radius: var(--sk-radius-sm, 8px);\n overflow: hidden;\n border: 2px solid transparent;\n padding: 0;\n cursor: pointer;\n background: var(--sk-bg-elevated);\n transition: border-color 0.15s ease;\n}\n.skc-gallery-thumb:hover {\n border-color: var(--sk-text-secondary);\n}\n.skc-gallery-thumb.skc-active {\n border-color: var(--sk-primary);\n}\n.skc-gallery-thumb img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n/* Sticky buy bar */\n.skc-sticky-bar {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 999;\n background: var(--sk-bg);\n border-top: 1px solid var(--sk-border);\n padding: 0.75rem 1rem;\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 1rem;\n animation: skc-slideUp 0.25s ease-out;\n box-shadow: 0 -4px 20px rgba(0,0,0,0.08);\n}\n@media (min-width: 769px) {\n .skc-sticky-bar { display: none; }\n}\n\n/* Tabs */\n.skc-tabs-list {\n display: flex;\n border-bottom: 1px solid var(--sk-border);\n gap: 0;\n overflow-x: auto;\n scrollbar-width: none;\n}\n.skc-tabs-list::-webkit-scrollbar { display: none; }\n.skc-tab-btn {\n padding: 0.75rem 1.25rem;\n border: none;\n background: none;\n font-size: 0.875rem;\n font-weight: 500;\n color: var(--sk-text-secondary);\n cursor: pointer;\n border-bottom: 2px solid transparent;\n white-space: nowrap;\n transition: color 0.15s ease, border-color 0.15s ease;\n}\n.skc-tab-btn:hover {\n color: var(--sk-text-primary);\n}\n.skc-tab-btn.skc-active {\n color: var(--sk-primary);\n border-bottom-color: var(--sk-primary);\n}\n\n/* Checkout overlay */\n.skc-checkout-overlay {\n position: fixed;\n inset: 0;\n z-index: 10000;\n background: rgba(0,0,0,0.5);\n backdrop-filter: blur(4px);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1rem;\n animation: skc-fadeIn 0.2s ease-out;\n}\n.skc-checkout-panel {\n position: relative;\n width: 100%;\n max-width: 480px;\n max-height: 90vh;\n overflow-y: auto;\n background: var(--sk-bg);\n border-radius: calc(var(--sk-radius, 12px) + 4px);\n box-shadow: 0 25px 50px -12px rgba(0,0,0,0.25);\n animation: skc-scaleIn 0.25s ease-out;\n}\n\n/* Form inputs */\n.skc-input {\n width: 100%;\n padding: 0.625rem 0.75rem;\n border-radius: var(--sk-radius-sm, 8px);\n border: 1px solid var(--sk-border);\n font-size: 0.9375rem;\n color: var(--sk-text-primary);\n background: var(--sk-bg);\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n outline: none;\n}\n.skc-input:focus {\n border-color: var(--sk-primary);\n box-shadow: 0 0 0 3px rgba(var(--sk-primary-rgb), 0.1);\n}\n.skc-input::placeholder {\n color: var(--sk-text-secondary);\n}\n\n/* Primary button */\n.skc-btn-primary {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n width: 100%;\n padding: 0.875rem 1.5rem;\n border-radius: var(--sk-radius-sm, 8px);\n border: none;\n background: var(--sk-primary);\n color: var(--sk-bg);\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: background-color 0.15s ease, transform 0.1s ease;\n}\n.skc-btn-primary:hover:not(:disabled) {\n background: var(--sk-primary-hover);\n}\n.skc-btn-primary:active:not(:disabled) {\n transform: scale(0.98);\n}\n.skc-btn-primary:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n/* Secondary button */\n.skc-btn-secondary {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n width: 100%;\n padding: 0.875rem 1.5rem;\n border-radius: var(--sk-radius-sm, 8px);\n border: 2px solid var(--sk-primary);\n background: transparent;\n color: var(--sk-primary);\n font-size: 1rem;\n font-weight: 600;\n cursor: pointer;\n transition: background-color 0.15s ease;\n}\n.skc-btn-secondary:hover:not(:disabled) {\n background: rgba(var(--sk-primary-rgb), 0.05);\n}\n.skc-btn-secondary:disabled {\n opacity: 0.55;\n cursor: not-allowed;\n}\n\n/* Low-stock pulse */\n.skc-pulse {\n animation: skc-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n}\n\n/* Step indicator */\n.skc-step-dots {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n padding: 1rem 0 0.5rem;\n}\n.skc-step-dot {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: var(--sk-border);\n transition: background 0.2s ease, transform 0.2s ease;\n}\n.skc-step-dot.skc-active {\n background: var(--sk-primary);\n transform: scale(1.3);\n}\n.skc-step-dot.skc-done {\n background: var(--sk-success);\n}\n.skc-step-connector {\n width: 24px;\n height: 2px;\n background: var(--sk-border);\n transition: background 0.2s ease;\n}\n.skc-step-connector.skc-done {\n background: var(--sk-success);\n}\n`\n\n// ============================================\n// SDK Loaders\n// ============================================\n\nfunction loadSquareSDK(env: string): Promise<void> {\n return new Promise((resolve, reject) => {\n if (typeof window === 'undefined') return reject(new Error('No window'))\n if ((window as any).Square) return resolve()\n const script = document.createElement('script')\n script.src =\n env === 'sandbox'\n ? 'https://sandbox.web.squarecdn.com/v1/square.js'\n : 'https://web.squarecdn.com/v1/square.js'\n script.onload = () => resolve()\n script.onerror = () => reject(new Error('Failed to load Square SDK'))\n document.head.appendChild(script)\n })\n}\n\nfunction loadStripeSDK(): Promise<void> {\n return new Promise((resolve, reject) => {\n if (typeof window === 'undefined') return reject(new Error('No window'))\n if ((window as any).Stripe) return resolve()\n const script = document.createElement('script')\n script.src = 'https://js.stripe.com/v3/'\n script.onload = () => resolve()\n script.onerror = () => reject(new Error('Failed to load Stripe'))\n document.head.appendChild(script)\n })\n}\n\n// ============================================\n// Inline SVG Icons\n// ============================================\n\nconst IconLock = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </svg>\n)\n\nconst IconTruck = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"1\" y=\"3\" width=\"15\" height=\"13\" />\n <polygon points=\"16 8 20 8 23 11 23 16 16 16 16 8\" />\n <circle cx=\"5.5\" cy=\"18.5\" r=\"2.5\" />\n <circle cx=\"18.5\" cy=\"18.5\" r=\"2.5\" />\n </svg>\n)\n\nconst IconReturn = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"1 4 1 10 7 10\" />\n <path d=\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\" />\n </svg>\n)\n\nconst IconShield = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n </svg>\n)\n\nconst IconChevronLeft = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n)\n\nconst IconChevronRight = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n)\n\nconst IconCheck = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n)\n\nconst IconAlert = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n)\n\nconst IconCalendar = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\" />\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\" />\n </svg>\n)\n\nconst IconMapPin = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\" />\n <circle cx=\"12\" cy=\"10\" r=\"3\" />\n </svg>\n)\n\nconst IconUsers = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </svg>\n)\n\nconst IconExternalLink = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\" />\n <polyline points=\"15 3 21 3 21 9\" />\n <line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\" />\n </svg>\n)\n\nconst IconX = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" 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\nconst ICON_MAP: Record<string, React.FC> = {\n lock: IconLock,\n truck: IconTruck,\n return: IconReturn,\n shield: IconShield,\n}\n\n// ============================================\n// Checkout State Machine\n// ============================================\n\ntype CheckoutState =\n | 'browsing'\n | 'customer-info'\n | 'shipping'\n | 'rates'\n | 'payment'\n | 'processing'\n | 'success'\n\n// ============================================\n// Sub-Components\n// ============================================\n\n// ---------- ProductGallery ----------\n\ninterface ModelInfo {\n model_name?: string\n height?: string\n weight?: string\n wearing_size?: string\n}\n\ninterface GalleryProps {\n images: string[]\n productName: string\n selectedIndex: number\n onSelect: (index: number) => void\n /** Image IDs in same order as images, for model info lookup */\n imageIds?: (string | undefined)[]\n /** Model info keyed by image ID */\n imageModelInfo?: Record<string, ModelInfo>\n}\n\nfunction ProductGallery({ images, productName, selectedIndex, onSelect, imageIds, imageModelInfo }: GalleryProps) {\n const [zoomStyle, setZoomStyle] = useState<React.CSSProperties | null>(null)\n const [isHovering, setIsHovering] = useState(false)\n\n const handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n const rect = e.currentTarget.getBoundingClientRect()\n const x = ((e.clientX - rect.left) / rect.width) * 100\n const y = ((e.clientY - rect.top) / rect.height) * 100\n setZoomStyle({ transformOrigin: `${x}% ${y}%`, transform: 'scale(2)' })\n }\n\n const handlePrev = (e: React.MouseEvent) => {\n e.stopPropagation()\n onSelect(selectedIndex === 0 ? images.length - 1 : selectedIndex - 1)\n }\n\n const handleNext = (e: React.MouseEvent) => {\n e.stopPropagation()\n onSelect(selectedIndex === images.length - 1 ? 0 : selectedIndex + 1)\n }\n\n if (!images.length) return null\n\n return (\n <div>\n <div\n className=\"skc-gallery-main\"\n onMouseMove={handleMouseMove}\n onMouseEnter={() => setIsHovering(true)}\n onMouseLeave={() => { setIsHovering(false); setZoomStyle(null) }}\n role=\"img\"\n aria-label={`${productName} image ${selectedIndex + 1} of ${images.length}`}\n >\n <img\n src={images[selectedIndex]}\n alt={`${productName} - Image ${selectedIndex + 1}`}\n style={isHovering && zoomStyle ? zoomStyle : undefined}\n draggable={false}\n />\n {(() => {\n const currentImgId = imageIds?.[selectedIndex]\n const modelInfo = currentImgId && imageModelInfo?.[currentImgId]\n if (!modelInfo) return null\n const parts: string[] = []\n if (modelInfo.height) parts.push(modelInfo.height)\n if (modelInfo.weight) parts.push(modelInfo.weight)\n const line1 = parts.length ? `Model: ${parts.join(', ')}` : modelInfo.model_name ? `Model: ${modelInfo.model_name}` : null\n const line2 = modelInfo.wearing_size ? `Wearing size ${modelInfo.wearing_size}` : null\n if (!line1 && !line2) return null\n return (\n <div\n style={{\n position: 'absolute',\n bottom: 0,\n left: 0,\n right: 0,\n background: 'linear-gradient(transparent, rgba(0,0,0,0.65))',\n padding: '1.5rem 1rem 0.75rem',\n color: '#fff',\n fontSize: '0.8125rem',\n lineHeight: 1.4,\n pointerEvents: 'none',\n zIndex: 2,\n }}\n >\n {line1 && <div style={{ fontWeight: 600 }}>{line1}</div>}\n {line2 && <div style={{ fontWeight: 400, opacity: 0.9 }}>{line2}</div>}\n </div>\n )\n })()}\n {images.length > 1 && (\n <>\n <button\n onClick={handlePrev}\n aria-label=\"Previous image\"\n style={{\n position: 'absolute',\n left: 8,\n top: '50%',\n transform: 'translateY(-50%)',\n width: 36,\n height: 36,\n borderRadius: '50%',\n border: 'none',\n background: 'rgba(255,255,255,0.9)',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n opacity: isHovering ? 1 : 0,\n transition: 'opacity 0.2s ease',\n boxShadow: '0 2px 8px rgba(0,0,0,0.1)',\n }}\n >\n <IconChevronLeft />\n </button>\n <button\n onClick={handleNext}\n aria-label=\"Next image\"\n style={{\n position: 'absolute',\n right: 8,\n top: '50%',\n transform: 'translateY(-50%)',\n width: 36,\n height: 36,\n borderRadius: '50%',\n border: 'none',\n background: 'rgba(255,255,255,0.9)',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n opacity: isHovering ? 1 : 0,\n transition: 'opacity 0.2s ease',\n boxShadow: '0 2px 8px rgba(0,0,0,0.1)',\n }}\n >\n <IconChevronRight />\n </button>\n </>\n )}\n {/* Image counter badge */}\n {images.length > 1 && (\n <div\n style={{\n position: 'absolute',\n bottom: 8,\n right: 8,\n background: 'rgba(0,0,0,0.6)',\n color: 'white',\n fontSize: '0.75rem',\n padding: '2px 8px',\n borderRadius: 12,\n }}\n >\n {selectedIndex + 1} / {images.length}\n </div>\n )}\n </div>\n\n {images.length > 1 && (\n <div className=\"skc-gallery-thumbs\" role=\"listbox\" aria-label=\"Image thumbnails\">\n {images.map((img, idx) => (\n <button\n key={idx}\n className={`skc-gallery-thumb${idx === selectedIndex ? ' skc-active' : ''}`}\n onClick={() => onSelect(idx)}\n role=\"option\"\n aria-selected={idx === selectedIndex}\n aria-label={`View image ${idx + 1}`}\n >\n <img src={img} alt={`${productName} thumbnail ${idx + 1}`} draggable={false} />\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\n\n// ---------- VariantSelector ----------\n\ninterface VariantSelectorProps {\n variants: CommerceVariant[]\n selected?: CommerceVariant\n isClothing: boolean\n showInventory: boolean\n onSelect: (variant: CommerceVariant) => void\n}\n\nfunction VariantSelector({ variants, selected, isClothing, showInventory, onSelect }: VariantSelectorProps) {\n if (!variants.length) return null\n\n const label = isClothing ? 'Size' : 'Options'\n\n return (\n <div style={{ marginTop: '1.25rem' }}>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: '0.5rem' }}>\n <label\n style={{\n fontSize: '0.875rem',\n fontWeight: 600,\n color: 'var(--sk-text-primary)',\n }}\n >\n {label}\n {selected && (\n <span style={{ fontWeight: 400, color: 'var(--sk-text-secondary)', marginLeft: 6 }}>\n — {(selected.options as Record<string, string>)?.Size || selected.name}\n </span>\n )}\n </label>\n </div>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '0.5rem' }} role=\"radiogroup\" aria-label={label}>\n {variants.map((variant) => {\n const isSelected = selected?.id === variant.id\n const variantOutOfStock =\n variant.track_inventory !== false && (variant.inventory_count ?? 0) <= 0\n const isLow =\n variant.track_inventory !== false &&\n variant.inventory_count != null &&\n variant.inventory_count > 0 &&\n variant.inventory_count <= 5\n\n return (\n <button\n key={variant.id}\n role=\"radio\"\n aria-checked={isSelected}\n aria-label={`${(variant.options as Record<string, string>)?.Size || variant.name}${variantOutOfStock ? ' - Out of stock' : ''}`}\n onClick={() => !variantOutOfStock && onSelect(variant)}\n disabled={variantOutOfStock}\n style={{\n position: 'relative',\n padding: variantOutOfStock ? '0.375rem 1rem 0.25rem' : '0.5rem 1rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n border: isSelected\n ? '2px solid var(--sk-primary)'\n : variantOutOfStock\n ? '1px solid var(--sk-border)'\n : '1px solid var(--sk-border)',\n backgroundColor: isSelected\n ? 'color-mix(in srgb, var(--sk-primary) 8%, transparent)'\n : variantOutOfStock\n ? 'var(--sk-bg-elevated)'\n : 'var(--sk-bg-elevated)',\n color: variantOutOfStock\n ? 'var(--sk-text-secondary)'\n : 'var(--sk-text-primary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: variantOutOfStock ? 'not-allowed' : 'pointer',\n opacity: variantOutOfStock ? 0.6 : 1,\n transition: 'all 0.15s ease',\n textDecoration: 'none',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: variantOutOfStock ? '1px' : 0,\n minWidth: 48,\n }}\n >\n <span style={{ textDecoration: variantOutOfStock ? 'line-through' : 'none' }}>\n {(variant.options as Record<string, string>)?.Size || variant.name}\n </span>\n {variantOutOfStock && (\n <span style={{\n fontSize: '0.5625rem',\n fontWeight: 600,\n color: 'var(--sk-error)',\n textTransform: 'uppercase',\n letterSpacing: '0.03em',\n lineHeight: 1,\n }}>\n Sold Out\n </span>\n )}\n {showInventory && !variantOutOfStock && (\n <span\n style={{\n position: 'absolute',\n top: -3,\n right: -3,\n width: 8,\n height: 8,\n borderRadius: '50%',\n backgroundColor: isLow\n ? 'var(--sk-warning)'\n : 'var(--sk-success)',\n border: '2px solid var(--sk-bg-elevated)',\n }}\n title={\n isLow\n ? `Only ${variant.inventory_count} left`\n : 'In stock'\n }\n />\n )}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n\n// ---------- QuantitySelector ----------\n\ninterface QuantitySelectorProps {\n quantity: number\n max: number\n onChange: (qty: number) => void\n}\n\nfunction QuantitySelector({ quantity, max, onChange }: QuantitySelectorProps) {\n return (\n <div style={{ marginTop: '1.25rem' }}>\n <label\n style={{\n display: 'block',\n fontSize: '0.875rem',\n fontWeight: 600,\n color: 'var(--sk-text-primary)',\n marginBottom: '0.5rem',\n }}\n >\n Quantity\n </label>\n <div\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n border: '1px solid var(--sk-border)',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n overflow: 'hidden',\n }}\n >\n <button\n onClick={() => onChange(Math.max(1, quantity - 1))}\n disabled={quantity <= 1}\n aria-label=\"Decrease quantity\"\n style={{\n width: 40,\n height: 40,\n border: 'none',\n background: 'var(--sk-bg-elevated)',\n fontSize: '1.125rem',\n cursor: quantity <= 1 ? 'not-allowed' : 'pointer',\n opacity: quantity <= 1 ? 0.4 : 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--sk-text-primary)',\n }}\n >\n -\n </button>\n <input\n type=\"number\"\n min={1}\n max={max}\n value={quantity}\n onChange={(e) => {\n const val = parseInt(e.target.value) || 1\n onChange(Math.max(1, Math.min(max, val)))\n }}\n aria-label=\"Quantity\"\n style={{\n width: 48,\n height: 40,\n textAlign: 'center',\n border: 'none',\n borderLeft: '1px solid var(--sk-border)',\n borderRight: '1px solid var(--sk-border)',\n fontSize: '0.9375rem',\n fontWeight: 500,\n color: 'var(--sk-text-primary)',\n outline: 'none',\n MozAppearance: 'textfield',\n appearance: 'textfield' as any,\n }}\n />\n <button\n onClick={() => onChange(Math.min(max, quantity + 1))}\n disabled={quantity >= max}\n aria-label=\"Increase quantity\"\n style={{\n width: 40,\n height: 40,\n border: 'none',\n background: 'var(--sk-bg-elevated)',\n fontSize: '1.125rem',\n cursor: quantity >= max ? 'not-allowed' : 'pointer',\n opacity: quantity >= max ? 0.4 : 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--sk-text-primary)',\n }}\n >\n +\n </button>\n </div>\n </div>\n )\n}\n\n// ---------- TrustBadges ----------\n\ninterface TrustBadge {\n icon?: 'lock' | 'truck' | 'return' | 'shield'\n label: string\n sublabel?: string\n}\n\nconst DEFAULT_TRUST_BADGES: TrustBadge[] = [\n { icon: 'lock', label: 'Secure Checkout', sublabel: 'SSL encrypted' },\n { icon: 'truck', label: 'Fast Shipping', sublabel: 'Free over $50' },\n { icon: 'return', label: 'Easy Returns', sublabel: '30-day policy' },\n]\n\nfunction TrustBadges({ badges = DEFAULT_TRUST_BADGES }: { badges?: TrustBadge[] }) {\n return (\n <div\n style={{\n marginTop: '1.5rem',\n display: 'grid',\n gridTemplateColumns: `repeat(${Math.min(badges.length, 3)}, 1fr)`,\n gap: '0.75rem',\n }}\n >\n {badges.map((badge, idx) => {\n const Icon = badge.icon ? ICON_MAP[badge.icon] : IconShield\n return (\n <div\n key={idx}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n textAlign: 'center',\n padding: '0.75rem 0.5rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n background: 'var(--sk-bg-elevated)',\n }}\n >\n <span style={{ color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n {Icon && <Icon />}\n </span>\n <span\n style={{\n fontSize: '0.75rem',\n fontWeight: 600,\n color: 'var(--sk-text-primary)',\n lineHeight: 1.3,\n }}\n >\n {badge.label}\n </span>\n {badge.sublabel && (\n <span\n style={{\n fontSize: '0.6875rem',\n color: 'var(--sk-text-secondary)',\n lineHeight: 1.3,\n }}\n >\n {badge.sublabel}\n </span>\n )}\n </div>\n )\n })}\n </div>\n )\n}\n\n// ---------- ProductTabs ----------\n\ninterface ProductTabsProps {\n features?: string[]\n specifications?: Record<string, string>\n description?: string\n showFeatures: boolean\n showSpecifications: boolean\n showDescription: boolean\n}\n\nfunction ProductTabs({\n features,\n specifications,\n description,\n showFeatures,\n showSpecifications,\n showDescription,\n}: ProductTabsProps) {\n const tabs: Array<{ id: string; label: string }> = []\n if (showFeatures && features?.length) tabs.push({ id: 'features', label: 'Features' })\n if (showSpecifications && specifications && Object.keys(specifications).length)\n tabs.push({ id: 'specs', label: 'Specifications' })\n if (showDescription && description) tabs.push({ id: 'description', label: 'Description' })\n\n const [active, setActive] = useState(tabs[0]?.id || '')\n\n useEffect(() => {\n if (tabs.length && !tabs.find((t) => t.id === active)) {\n setActive(tabs[0].id)\n }\n }, [tabs.length])\n\n if (!tabs.length) return null\n\n return (\n <div style={{ marginTop: '2rem' }}>\n <div className=\"skc-tabs-list\" role=\"tablist\">\n {tabs.map((tab) => (\n <button\n key={tab.id}\n className={`skc-tab-btn${active === tab.id ? ' skc-active' : ''}`}\n role=\"tab\"\n aria-selected={active === tab.id}\n aria-controls={`skc-tabpanel-${tab.id}`}\n onClick={() => setActive(tab.id)}\n >\n {tab.label}\n </button>\n ))}\n </div>\n <div style={{ padding: '1.25rem 0', animation: 'skc-fadeIn 0.2s ease-out' }}>\n {active === 'features' && features && (\n <div id=\"skc-tabpanel-features\" role=\"tabpanel\">\n <ul\n style={{\n margin: 0,\n paddingLeft: '1.25rem',\n display: 'flex',\n flexDirection: 'column',\n gap: '0.5rem',\n }}\n >\n {features.map((f, i) => (\n <li\n key={i}\n style={{\n color: 'var(--sk-text-secondary)',\n fontSize: '0.9375rem',\n lineHeight: 1.6,\n }}\n >\n {f}\n </li>\n ))}\n </ul>\n </div>\n )}\n {active === 'specs' && specifications && (\n <div id=\"skc-tabpanel-specs\" role=\"tabpanel\">\n <dl\n style={{\n margin: 0,\n display: 'grid',\n gridTemplateColumns: 'minmax(120px, auto) 1fr',\n gap: '0.625rem 1.5rem',\n }}\n >\n {Object.entries(specifications).map(([key, value]) => (\n <React.Fragment key={key}>\n <dt\n style={{\n fontSize: '0.875rem',\n color: 'var(--sk-text-secondary)',\n fontWeight: 500,\n }}\n >\n {key}\n </dt>\n <dd\n style={{\n margin: 0,\n fontSize: '0.875rem',\n color: 'var(--sk-text-primary)',\n }}\n >\n {value}\n </dd>\n </React.Fragment>\n ))}\n </dl>\n </div>\n )}\n {active === 'description' && description && (\n <div\n id=\"skc-tabpanel-description\"\n role=\"tabpanel\"\n style={{\n color: 'var(--sk-text-secondary)',\n lineHeight: 1.7,\n fontSize: '0.9375rem',\n }}\n dangerouslySetInnerHTML={{ __html: description }}\n />\n )}\n </div>\n </div>\n )\n}\n\n// ---------- EventInfoBlock ----------\n\ninterface EventInfoBlockProps {\n product: CommerceOffering\n schedule?: CommerceSchedule\n}\n\nfunction EventInfoBlock({ product, schedule }: EventInfoBlockProps) {\n const spotsRemaining = schedule\n ? getSpotsRemaining(schedule.capacity, (schedule as any).current_registrations ?? (schedule.capacity != null ? (schedule.capacity - (schedule.spots_remaining ?? schedule.capacity)) : 0))\n : null\n const soldOut = schedule\n ? isEventSoldOut(schedule.capacity, (schedule as any).current_registrations ?? (schedule.capacity != null ? (schedule.capacity - (schedule.spots_remaining ?? schedule.capacity)) : 0))\n : false\n\n return (\n <div\n style={{\n marginTop: '1.25rem',\n padding: '1rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n background: 'var(--sk-bg-elevated)',\n display: 'flex',\n flexDirection: 'column',\n gap: '0.5rem',\n }}\n >\n {schedule && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>\n <IconCalendar />\n <span>{formatDate(schedule.starts_at)} at {formatTime(schedule.starts_at)}</span>\n </div>\n )}\n {product.location && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>\n <IconMapPin />\n <span>{product.location}</span>\n </div>\n )}\n {product.is_virtual && product.virtual_meeting_url && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, fontSize: '0.875rem', color: 'var(--sk-primary)' }}>\n <IconExternalLink />\n <span>Virtual Event</span>\n </div>\n )}\n {schedule?.capacity != null && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>\n <IconUsers />\n <span>\n {soldOut ? (\n <span style={{ color: 'var(--sk-error)', fontWeight: 600 }}>Sold Out</span>\n ) : schedule.spots_remaining != null && schedule.spots_remaining <= 10 ? (\n <span className=\"skc-pulse\" style={{ color: 'var(--sk-warning)', fontWeight: 600 }}>\n Only {schedule.spots_remaining} spot{schedule.spots_remaining !== 1 ? 's' : ''} left!\n </span>\n ) : (\n <span>{schedule.spots_remaining ?? schedule.capacity} spots available</span>\n )}\n </span>\n </div>\n )}\n </div>\n )\n}\n\n// ---------- CheckoutStepIndicator ----------\n\nconst STEP_ORDER: CheckoutState[] = ['customer-info', 'shipping', 'rates', 'payment']\n\nfunction CheckoutStepIndicator({ current, steps }: { current: CheckoutState; steps: CheckoutState[] }) {\n const currentIdx = steps.indexOf(current)\n\n return (\n <div className=\"skc-step-dots\">\n {steps.map((step, idx) => (\n <React.Fragment key={step}>\n {idx > 0 && (\n <div className={`skc-step-connector${idx <= currentIdx ? ' skc-done' : ''}`} />\n )}\n <div\n className={`skc-step-dot${\n idx === currentIdx ? ' skc-active' : idx < currentIdx ? ' skc-done' : ''\n }`}\n title={step.replace('-', ' ')}\n />\n </React.Fragment>\n ))}\n </div>\n )\n}\n\n// ---------- CustomerInfoStep ----------\n\ninterface CustomerInfoStepProps {\n customer: CheckoutCustomer\n onChange: (c: CheckoutCustomer) => void\n onNext: () => void\n onBack: () => void\n}\n\nfunction CustomerInfoStep({ customer, onChange, onNext, onBack }: CustomerInfoStepProps) {\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n onNext()\n }\n\n return (\n <form onSubmit={handleSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '0.875rem' }}>\n <h3 style={{ margin: 0, fontSize: '1.125rem', fontWeight: 600, color: 'var(--sk-text-primary)' }}>\n Contact Information\n </h3>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n Full Name *\n </label>\n <input\n className=\"skc-input\"\n type=\"text\"\n required\n value={customer.name}\n onChange={(e) => onChange({ ...customer, name: e.target.value })}\n placeholder=\"Jane Smith\"\n autoFocus\n />\n </div>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n Email Address *\n </label>\n <input\n className=\"skc-input\"\n type=\"email\"\n required\n value={customer.email}\n onChange={(e) => onChange({ ...customer, email: e.target.value })}\n placeholder=\"jane@example.com\"\n />\n </div>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n Phone Number\n </label>\n <input\n className=\"skc-input\"\n type=\"tel\"\n value={customer.phone || ''}\n onChange={(e) => onChange({ ...customer, phone: e.target.value })}\n placeholder=\"(555) 123-4567\"\n />\n </div>\n <div style={{ display: 'flex', gap: '0.75rem', marginTop: '0.5rem' }}>\n <button\n type=\"button\"\n onClick={onBack}\n style={{\n padding: '0.75rem 1.25rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n border: '1px solid var(--sk-border)',\n background: 'var(--sk-bg)',\n color: 'var(--sk-text-secondary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n Back\n </button>\n <button type=\"submit\" className=\"skc-btn-primary\" style={{ flex: 1 }}>\n Continue\n </button>\n </div>\n </form>\n )\n}\n\n// ---------- ShippingAddressStep ----------\n\ninterface ShippingAddressStepProps {\n address: ShippingAddress\n onChange: (a: ShippingAddress) => void\n onNext: () => void\n onBack: () => void\n loading: boolean\n}\n\nfunction ShippingAddressStep({ address, onChange, onNext, onBack, loading }: ShippingAddressStepProps) {\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault()\n onNext()\n }\n\n const update = (field: keyof ShippingAddress, value: string) => {\n onChange({ ...address, [field]: value })\n }\n\n return (\n <form onSubmit={handleSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '0.875rem' }}>\n <h3 style={{ margin: 0, fontSize: '1.125rem', fontWeight: 600, color: 'var(--sk-text-primary)' }}>\n Shipping Address\n </h3>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n Street Address *\n </label>\n <input\n className=\"skc-input\"\n type=\"text\"\n required\n value={address.street1}\n onChange={(e) => update('street1', e.target.value)}\n placeholder=\"123 Main St\"\n autoFocus\n />\n </div>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n Apt / Suite\n </label>\n <input\n className=\"skc-input\"\n type=\"text\"\n value={address.street2 || ''}\n onChange={(e) => update('street2', e.target.value)}\n placeholder=\"Apt 4B\"\n />\n </div>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '0.75rem' }}>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n City *\n </label>\n <input\n className=\"skc-input\"\n type=\"text\"\n required\n value={address.city}\n onChange={(e) => update('city', e.target.value)}\n placeholder=\"New York\"\n />\n </div>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n State *\n </label>\n <input\n className=\"skc-input\"\n type=\"text\"\n required\n value={address.state}\n onChange={(e) => update('state', e.target.value)}\n placeholder=\"NY\"\n />\n </div>\n </div>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '0.75rem' }}>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n ZIP Code *\n </label>\n <input\n className=\"skc-input\"\n type=\"text\"\n required\n value={address.zip}\n onChange={(e) => update('zip', e.target.value)}\n placeholder=\"10001\"\n />\n </div>\n <div>\n <label style={{ display: 'block', fontSize: '0.8125rem', fontWeight: 500, color: 'var(--sk-text-secondary)', marginBottom: 4 }}>\n Country\n </label>\n <input\n className=\"skc-input\"\n type=\"text\"\n value={address.country || 'US'}\n onChange={(e) => update('country', e.target.value)}\n placeholder=\"US\"\n />\n </div>\n </div>\n <div style={{ display: 'flex', gap: '0.75rem', marginTop: '0.5rem' }}>\n <button\n type=\"button\"\n onClick={onBack}\n style={{\n padding: '0.75rem 1.25rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n border: '1px solid var(--sk-border)',\n background: 'var(--sk-bg)',\n color: 'var(--sk-text-secondary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n Back\n </button>\n <button type=\"submit\" className=\"skc-btn-primary\" style={{ flex: 1 }} disabled={loading}>\n {loading ? 'Getting rates...' : 'Continue to Shipping'}\n </button>\n </div>\n </form>\n )\n}\n\n// ---------- ShippingRatesStep ----------\n\ninterface ShippingRatesStepProps {\n rates: ShippingRate[]\n selected: ShippingRate | null\n onSelect: (rate: ShippingRate) => void\n onNext: () => void\n onBack: () => void\n loading: boolean\n currency: string\n}\n\nfunction ShippingRatesStep({ rates, selected, onSelect, onNext, onBack, loading, currency }: ShippingRatesStepProps) {\n if (loading) {\n return (\n <div style={{ textAlign: 'center', padding: '2rem 0' }}>\n <div\n style={{\n width: 32,\n height: 32,\n border: '3px solid var(--sk-border)',\n borderTopColor: 'var(--sk-primary)',\n borderRadius: '50%',\n animation: 'skc-spin 1s linear infinite',\n margin: '0 auto 1rem',\n }}\n />\n <p style={{ color: 'var(--sk-text-secondary)', fontSize: '0.875rem', margin: 0 }}>\n Calculating shipping rates...\n </p>\n </div>\n )\n }\n\n if (!rates.length) {\n return (\n <div style={{ textAlign: 'center', padding: '1.5rem 0' }}>\n <p style={{ color: 'var(--sk-text-secondary)', fontSize: '0.875rem', margin: '0 0 1rem' }}>\n No shipping rates available for this address. Please check your address and try again.\n </p>\n <button\n type=\"button\"\n onClick={onBack}\n style={{\n padding: '0.75rem 1.5rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n border: '1px solid var(--sk-border)',\n background: 'var(--sk-bg)',\n color: 'var(--sk-text-secondary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n Edit Address\n </button>\n </div>\n )\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.875rem' }}>\n <h3 style={{ margin: 0, fontSize: '1.125rem', fontWeight: 600, color: 'var(--sk-text-primary)' }}>\n Shipping Method\n </h3>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.5rem' }} role=\"radiogroup\" aria-label=\"Shipping options\">\n {rates.map((rate, idx) => {\n const isSelected = selected?.objectId === rate.objectId || (selected === null && idx === 0)\n return (\n <button\n key={rate.objectId || idx}\n role=\"radio\"\n aria-checked={isSelected}\n onClick={() => onSelect(rate)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0.875rem 1rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n border: isSelected\n ? '2px solid var(--sk-primary)'\n : '1px solid var(--sk-border)',\n background: isSelected ? 'rgba(var(--sk-primary-rgb), 0.03)' : 'var(--sk-bg)',\n cursor: 'pointer',\n textAlign: 'left',\n width: '100%',\n }}\n >\n <div>\n <div style={{ fontSize: '0.875rem', fontWeight: 600, color: 'var(--sk-text-primary)' }}>\n {rate.carrier} — {rate.service}\n </div>\n {rate.estimatedDays != null && (\n <div style={{ fontSize: '0.8125rem', color: 'var(--sk-text-secondary)', marginTop: 2 }}>\n {rate.estimatedDays === 1\n ? '1 business day'\n : `${rate.estimatedDays} business days`}\n </div>\n )}\n </div>\n <span style={{ fontSize: '0.9375rem', fontWeight: 600, color: 'var(--sk-text-primary)' }}>\n {formatPrice(parseFloat(rate.amount), rate.currency || currency)}\n </span>\n </button>\n )\n })}\n </div>\n <div style={{ display: 'flex', gap: '0.75rem', marginTop: '0.5rem' }}>\n <button\n type=\"button\"\n onClick={onBack}\n style={{\n padding: '0.75rem 1.25rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n border: '1px solid var(--sk-border)',\n background: 'var(--sk-bg)',\n color: 'var(--sk-text-secondary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n Back\n </button>\n <button type=\"button\" className=\"skc-btn-primary\" style={{ flex: 1 }} onClick={onNext}>\n Continue to Payment\n </button>\n </div>\n </div>\n )\n}\n\n// ---------- PaymentStep ----------\n\ninterface PaymentStepProps {\n processor: 'stripe' | 'square' | null\n config: ProcessorConfig | null\n product: CommerceOffering\n variant?: CommerceVariant\n quantity: number\n customer: CheckoutCustomer\n shippingRate: ShippingRate | null\n shippingAddress: ShippingAddress | null\n needsShipping: boolean\n onBack: () => void\n onSuccess: (result: CheckoutResult) => void\n onError: (error: string) => void\n onProcessing: (processing: boolean) => void\n successUrl?: string\n cancelUrl?: string\n}\n\nfunction PaymentStep({\n processor,\n config,\n product,\n variant,\n quantity,\n customer,\n shippingRate,\n shippingAddress,\n needsShipping,\n onBack,\n onSuccess,\n onError,\n onProcessing,\n successUrl,\n cancelUrl,\n}: PaymentStepProps) {\n const [cardElement, setCardElement] = useState<any>(null)\n const [stripeInstance, setStripeInstance] = useState<any>(null)\n const [stripeElements, setStripeElements] = useState<any>(null)\n const [cardReady, setCardReady] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [submitting, setSubmitting] = useState(false)\n const cardContainerRef = useRef<HTMLDivElement>(null)\n\n const currentPrice = variant?.price ?? product.price ?? 0\n const subtotal = currentPrice * quantity\n const shippingCost = shippingRate ? parseFloat(shippingRate.amount) : 0\n const total = subtotal + shippingCost\n\n // Mount Square card\n useEffect(() => {\n if (processor !== 'square' || !config?.squareAppId) return\n\n let destroyed = false\n let card: any = null\n\n loadSquareSDK(config.squareEnvironment || 'production')\n .then(async () => {\n if (destroyed) return\n const payments = (window as any).Square.payments(\n config.squareAppId,\n config.squareLocationId\n )\n card = await payments.card({\n style: {\n '.input-container': { borderRadius: '8px' },\n '.input-container.is-focus': { borderColor: '#2563eb' },\n '.input-container.is-error': { borderColor: '#dc2626' },\n },\n })\n if (destroyed) { card.destroy?.(); return }\n await card.attach('#skc-card-container')\n setCardElement(card)\n setCardReady(true)\n })\n .catch((err) => {\n console.error('[Commerce] Square card init failed:', err)\n setError('Failed to load payment form. Please refresh and try again.')\n })\n\n return () => {\n destroyed = true\n if (card) card.destroy?.().catch(() => {})\n setCardElement(null)\n setCardReady(false)\n }\n }, [processor, config?.squareAppId])\n\n // Mount Stripe Payment Element\n useEffect(() => {\n if (processor !== 'stripe' || !config?.stripePublishableKey) return\n\n let destroyed = false\n\n ;(async () => {\n try {\n await loadStripeSDK()\n if (destroyed) return\n\n // Create PaymentIntent to get clientSecret\n const checkoutOpts: CreateCheckoutOptions = {\n offeringId: product.id,\n variantId: variant?.id,\n quantity,\n customer,\n successUrl: successUrl || window.location.href,\n cancelUrl: cancelUrl || window.location.href,\n }\n if (needsShipping && shippingAddress) {\n checkoutOpts.shippingAddress = shippingAddress\n checkoutOpts.shippingCarrier = shippingRate?.carrier\n checkoutOpts.shippingService = shippingRate?.service\n checkoutOpts.shippingCost = shippingCost\n }\n\n const piResult = await createPaymentIntent(checkoutOpts)\n if (destroyed) return\n if (!piResult.success || !piResult.clientSecret) {\n setError(piResult.error || 'Failed to initialize payment. Please try again.')\n return\n }\n\n const stripe = (window as any).Stripe(config.stripePublishableKey)\n const elements = stripe.elements({ clientSecret: piResult.clientSecret })\n const paymentElement = elements.create('payment', {\n layout: 'tabs',\n })\n if (destroyed) return\n paymentElement.mount('#skc-card-container')\n paymentElement.on('ready', () => {\n if (!destroyed) setCardReady(true)\n })\n\n setStripeInstance(stripe)\n setStripeElements(elements)\n setCardElement(paymentElement)\n\n // Stash saleId/confirmation for success handling\n ;(cardContainerRef.current as any)?.__saleId && delete (cardContainerRef.current as any).__saleId\n if (cardContainerRef.current) {\n ;(cardContainerRef.current as any).__saleId = piResult.saleId\n ;(cardContainerRef.current as any).__confirmationNumber = piResult.confirmationNumber\n }\n } catch (err) {\n console.error('[Commerce] Stripe init failed:', err)\n if (!destroyed) setError('Failed to load payment form. Please refresh and try again.')\n }\n })()\n\n return () => {\n destroyed = true\n setCardElement(null)\n setStripeInstance(null)\n setStripeElements(null)\n setCardReady(false)\n }\n }, [processor, config?.stripePublishableKey])\n\n const handleSubmit = async () => {\n if (!cardReady || submitting) return\n setSubmitting(true)\n setError(null)\n onProcessing(true)\n\n try {\n if (processor === 'square' && cardElement) {\n const tokenResult = await cardElement.tokenize()\n if (tokenResult.status !== 'OK') {\n throw new Error(\n tokenResult.errors?.[0]?.message || 'Card verification failed. Please check your card details.'\n )\n }\n\n const checkoutOpts: CreateCheckoutOptions = {\n offeringId: product.id,\n variantId: variant?.id,\n quantity,\n customer,\n sourceId: tokenResult.token,\n successUrl: successUrl || window.location.href,\n cancelUrl: cancelUrl || window.location.href,\n }\n if (needsShipping && shippingAddress) {\n checkoutOpts.shippingAddress = shippingAddress\n checkoutOpts.shippingCarrier = shippingRate?.carrier\n checkoutOpts.shippingService = shippingRate?.service\n checkoutOpts.shippingCost = shippingCost\n }\n\n const result = await createCheckoutSession(checkoutOpts)\n\n if (result.success && !result.payment_url) {\n onSuccess(result)\n } else if (result.success && result.payment_url) {\n window.location.href = result.payment_url\n } else {\n throw new Error(result.error || 'Payment failed. Please try again.')\n }\n } else if (processor === 'stripe' && stripeInstance && stripeElements) {\n const { error: stripeError, paymentIntent } = await stripeInstance.confirmPayment({\n elements: stripeElements,\n confirmParams: {\n return_url: successUrl || window.location.href,\n },\n redirect: 'if_required',\n })\n\n if (stripeError) {\n throw new Error(stripeError.message || 'Payment failed. Please try again.')\n }\n\n if (paymentIntent && paymentIntent.status === 'succeeded') {\n const saleId = (cardContainerRef.current as any)?.__saleId\n const confirmationNumber = (cardContainerRef.current as any)?.__confirmationNumber\n onSuccess({\n success: true,\n sale_id: saleId,\n confirmation_number: confirmationNumber,\n })\n }\n } else {\n // Fallback: redirect checkout\n const checkoutOpts: CreateCheckoutOptions = {\n offeringId: product.id,\n variantId: variant?.id,\n quantity,\n customer,\n successUrl: successUrl || `${window.location.origin}/checkout/success`,\n cancelUrl: cancelUrl || window.location.href,\n }\n if (needsShipping && shippingAddress) {\n checkoutOpts.shippingAddress = shippingAddress\n checkoutOpts.shippingCarrier = shippingRate?.carrier\n checkoutOpts.shippingService = shippingRate?.service\n checkoutOpts.shippingCost = shippingCost\n }\n\n const result = await createCheckoutSession(checkoutOpts)\n if (result.success && result.checkout_url) {\n window.location.href = result.checkout_url\n } else {\n throw new Error(result.error || 'Checkout failed.')\n }\n }\n } catch (err: any) {\n const msg = err?.message || 'Payment failed. Please try again.'\n setError(msg)\n onError(msg)\n } finally {\n setSubmitting(false)\n onProcessing(false)\n }\n }\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n <h3 style={{ margin: 0, fontSize: '1.125rem', fontWeight: 600, color: 'var(--sk-text-primary)' }}>\n Payment\n </h3>\n\n {/* Order Summary */}\n <div\n style={{\n padding: '1rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n background: 'var(--sk-bg-elevated)',\n display: 'flex',\n flexDirection: 'column',\n gap: '0.375rem',\n fontSize: '0.875rem',\n }}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between', color: 'var(--sk-text-secondary)' }}>\n <span>{product.name} {variant ? `(${(variant.options as Record<string, string>)?.Size || variant.name})` : ''} x {quantity}</span>\n <span>{formatPrice(subtotal, product.currency)}</span>\n </div>\n {shippingRate && (\n <div style={{ display: 'flex', justifyContent: 'space-between', color: 'var(--sk-text-secondary)' }}>\n <span>Shipping ({shippingRate.carrier} {shippingRate.service})</span>\n <span>{formatPrice(shippingCost, shippingRate.currency || product.currency)}</span>\n </div>\n )}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n fontWeight: 700,\n color: 'var(--sk-text-primary)',\n fontSize: '1rem',\n paddingTop: '0.5rem',\n borderTop: '1px solid var(--sk-border)',\n marginTop: '0.25rem',\n }}\n >\n <span>Total</span>\n <span>{formatPrice(total, product.currency)}</span>\n </div>\n </div>\n\n {/* Card container */}\n <div>\n <label\n style={{\n display: 'block',\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: 'var(--sk-text-secondary)',\n marginBottom: 6,\n }}\n >\n Card Details\n </label>\n <div\n id=\"skc-card-container\"\n ref={cardContainerRef}\n style={{\n minHeight: processor === 'stripe' ? 80 : 44,\n border: '1px solid var(--sk-border)',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n padding: processor === 'stripe' ? '0.75rem' : '0.5rem 0.75rem',\n background: 'var(--sk-bg)',\n }}\n />\n {!cardReady && !error && (\n <p style={{ fontSize: '0.75rem', color: 'var(--sk-text-secondary)', marginTop: 4, marginBottom: 0 }}>\n Loading secure payment form...\n </p>\n )}\n </div>\n\n {error && (\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: 8,\n padding: '0.75rem',\n background: 'rgba(var(--sk-error-rgb, 239,68,68), 0.06)',\n border: '1px solid rgba(var(--sk-error-rgb, 239,68,68), 0.2)',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n color: 'var(--sk-error)',\n fontSize: '0.875rem',\n }}\n >\n <IconAlert />\n <span>{error}</span>\n </div>\n )}\n\n <div style={{ display: 'flex', gap: '0.75rem' }}>\n <button\n type=\"button\"\n onClick={onBack}\n disabled={submitting}\n style={{\n padding: '0.75rem 1.25rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n border: '1px solid var(--sk-border)',\n background: 'var(--sk-bg)',\n color: 'var(--sk-text-secondary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: submitting ? 'not-allowed' : 'pointer',\n opacity: submitting ? 0.5 : 1,\n }}\n >\n Back\n </button>\n <button\n type=\"button\"\n className=\"skc-btn-primary\"\n style={{ flex: 1 }}\n onClick={handleSubmit}\n disabled={!cardReady || submitting}\n >\n {submitting ? (\n <>\n <span\n style={{\n width: 16,\n height: 16,\n border: '2px solid rgba(255,255,255,0.3)',\n borderTopColor: 'white',\n borderRadius: '50%',\n animation: 'skc-spin 0.8s linear infinite',\n display: 'inline-block',\n }}\n />\n Processing...\n </>\n ) : (\n <>\n <IconLock />\n Pay {formatPrice(total, product.currency)}\n </>\n )}\n </button>\n </div>\n\n {/* Powered by badge */}\n {processor && (\n <p\n style={{\n textAlign: 'center',\n fontSize: '0.6875rem',\n color: 'var(--sk-text-secondary)',\n margin: '0.25rem 0 0',\n }}\n >\n Powered by {processor === 'stripe' ? 'Stripe' : 'Square'}\n </p>\n )}\n </div>\n )\n}\n\n// ---------- SuccessStep ----------\n\ninterface SuccessStepProps {\n result: CheckoutResult\n product: CommerceOffering\n onClose: () => void\n}\n\nfunction SuccessStep({ result, product, onClose }: SuccessStepProps) {\n return (\n <div\n style={{\n textAlign: 'center',\n padding: '2rem 1rem',\n animation: 'skc-fadeIn 0.3s ease-out',\n }}\n >\n <div\n style={{\n width: 64,\n height: 64,\n borderRadius: '50%',\n background: 'rgba(5,150,105,0.1)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '0 auto 1rem',\n }}\n >\n <svg\n width=\"32\"\n height=\"32\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"var(--sk-success)\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline\n points=\"20 6 9 17 4 12\"\n style={{ strokeDasharray: 24, strokeDashoffset: 0, animation: 'skc-checkmark 0.5s ease-out' }}\n />\n </svg>\n </div>\n <h3\n style={{\n margin: '0 0 0.5rem',\n fontSize: '1.375rem',\n fontWeight: 700,\n color: 'var(--sk-success)',\n }}\n >\n Order Confirmed!\n </h3>\n <p style={{ color: 'var(--sk-text-secondary)', margin: '0 0 0.5rem', fontSize: '0.9375rem' }}>\n Thank you for your purchase of {product.name}.\n </p>\n {result.confirmation_number && (\n <p style={{ color: 'var(--sk-text-secondary)', margin: '0 0 1rem', fontSize: '0.8125rem' }}>\n Confirmation: <strong style={{ color: 'var(--sk-text-primary)' }}>{result.confirmation_number}</strong>\n </p>\n )}\n <p style={{ color: 'var(--sk-text-secondary)', margin: '0 0 1.5rem', fontSize: '0.875rem' }}>\n A confirmation email has been sent to your inbox.\n </p>\n <button className=\"skc-btn-primary\" onClick={onClose} style={{ maxWidth: 240 }}>\n Done\n </button>\n </div>\n )\n}\n\n// ============================================\n// ProductDetail — Main Component\n// ============================================\n\nexport interface ProductDetailProps {\n product?: CommerceOffering\n slug?: string\n successUrl?: string\n cancelUrl?: string\n showGallery?: boolean\n showVariants?: boolean\n showQuantity?: boolean\n showSizeChart?: boolean\n showFeatures?: boolean\n showSpecifications?: boolean\n showDescription?: boolean\n showTrustBadges?: boolean\n showInventory?: boolean\n trustBadges?: TrustBadge[]\n onAddToCart?: (product: CommerceOffering, variant?: CommerceVariant, quantity?: number) => void\n onCheckoutSuccess?: (result: CheckoutResult) => void\n onCheckoutError?: (error: string) => void\n className?: string\n style?: React.CSSProperties\n layout?: 'horizontal' | 'stacked'\n}\n\nexport function ProductDetail({\n product: propProduct,\n slug,\n successUrl,\n cancelUrl,\n showGallery = true,\n showVariants = true,\n showQuantity = true,\n showSizeChart = true,\n showFeatures = true,\n showSpecifications = true,\n showDescription = true,\n showTrustBadges = true,\n showInventory = true,\n trustBadges,\n onAddToCart,\n onCheckoutSuccess,\n onCheckoutError,\n className = '',\n style: customStyle,\n layout = 'horizontal',\n}: ProductDetailProps) {\n // Core state\n const [product, setProduct] = useState<CommerceOffering | null>(propProduct || null)\n const [loading, setLoading] = useState(!propProduct && !!slug)\n const [selectedVariant, setSelectedVariant] = useState<CommerceVariant | undefined>()\n const [quantity, setQuantity] = useState(1)\n const [selectedImage, setSelectedImage] = useState(0)\n\n // Checkout state machine\n const [checkoutState, setCheckoutState] = useState<CheckoutState>('browsing')\n const [customer, setCustomer] = useState<CheckoutCustomer>({ name: '', email: '', phone: '' })\n const [shippingAddress, setShippingAddress] = useState<ShippingAddress>({\n street1: '',\n city: '',\n state: '',\n zip: '',\n country: 'US',\n })\n const [shippingRates, setShippingRates] = useState<ShippingRate[]>([])\n const [selectedShippingRate, setSelectedShippingRate] = useState<ShippingRate | null>(null)\n const [ratesLoading, setRatesLoading] = useState(false)\n const [processorConfig, setProcessorConfig] = useState<ProcessorConfig | null>(null)\n const [checkoutResult, setCheckoutResult] = useState<CheckoutResult | null>(null)\n const [checkoutError, setCheckoutError] = useState<string | null>(null)\n\n // Sticky bar\n const [showStickyBar, setShowStickyBar] = useState(false)\n const buyButtonRef = useRef<HTMLButtonElement>(null)\n\n const analytics = useAnalyticsOptional()\n\n // ---------- Product Loading ----------\n\n useEffect(() => {\n if (propProduct) {\n setProduct(propProduct)\n const dv = propProduct.variants?.find((v) => v.is_default) || propProduct.variants?.[0]\n setSelectedVariant(dv)\n return\n }\n if (!slug) return\n\n let cancelled = false\n setLoading(true)\n\n fetchProductBySlug(slug).then((data) => {\n if (cancelled) return\n setProduct(data)\n if (data?.variants?.length) {\n setSelectedVariant(data.variants.find((v) => v.is_default) || data.variants[0])\n }\n setLoading(false)\n }).catch(() => {\n if (!cancelled) setLoading(false)\n })\n\n return () => { cancelled = true }\n }, [propProduct, slug])\n\n // ---------- Analytics: product view ----------\n\n useEffect(() => {\n if (!product || !analytics) return\n analytics.trackEvent({\n name: 'product_view',\n properties: {\n offering_id: product.id,\n name: product.name,\n price: product.price,\n type: product.type,\n category: product.category?.name,\n },\n })\n }, [product?.id])\n\n // ---------- Processor Config ----------\n\n useEffect(() => {\n if (!product) return\n fetchProcessorConfig().then((c) => {\n if (c) setProcessorConfig(c)\n })\n }, [product?.id])\n\n // ---------- Sticky Buy Bar (mobile) ----------\n\n useEffect(() => {\n if (!buyButtonRef.current) return\n const observer = new IntersectionObserver(\n ([entry]) => setShowStickyBar(!entry.isIntersecting),\n { threshold: 0 }\n )\n observer.observe(buyButtonRef.current)\n return () => observer.disconnect()\n }, [product?.id, checkoutState])\n\n // ---------- Escape key to close checkout ----------\n\n useEffect(() => {\n if (checkoutState === 'browsing') return\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') setCheckoutState('browsing')\n }\n document.addEventListener('keydown', handleKey)\n return () => document.removeEventListener('keydown', handleKey)\n }, [checkoutState])\n\n // ---------- Body scroll lock during checkout ----------\n\n useEffect(() => {\n if (checkoutState !== 'browsing' && checkoutState !== 'success') {\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = ''\n }\n return () => { document.body.style.overflow = '' }\n }, [checkoutState])\n\n // ---------- Derived State ----------\n\n const allImages = useMemo(() => {\n if (!product) return []\n return [\n product.featured_image_url,\n ...(product.gallery_images || []),\n ...(product.variants?.map((v) => v.image_url).filter(Boolean) || []),\n ].filter(Boolean) as string[]\n }, [product])\n\n // Build image ID array matching allImages order (for model info lookup)\n const allImageIds = useMemo(() => {\n if (!product) return []\n const ids: (string | undefined)[] = [\n product.featured_image_id,\n ...(product.gallery_image_ids || []),\n ...(product.variants?.map((v) => v.id) || []), // variant images don't have separate IDs for model info\n ]\n // Only keep IDs for images that were included (filter(Boolean) on URLs)\n const urls = [\n product.featured_image_url,\n ...(product.gallery_images || []),\n ...(product.variants?.map((v) => v.image_url).filter(Boolean) || []),\n ]\n return urls.map((url, i) => url ? ids[i] : undefined).filter((_id, i) => urls[i]) as (string | undefined)[]\n }, [product])\n\n // --- Derived values (must be before any early return to keep hook count stable) ---\n\n const currentPrice = product ? (selectedVariant?.price ?? product.price ?? 0) : 0\n const compareAtPrice = product?.compare_at_price\n const hasDiscount = compareAtPrice != null && compareAtPrice > currentPrice\n const discountPercent = hasDiscount ? Math.round(((compareAtPrice! - currentPrice) / compareAtPrice!) * 100) : 0\n\n const inventoryCount = selectedVariant?.inventory_count ?? product?.inventory_count\n const isOutOfStock = !!product?.track_inventory && inventoryCount != null && inventoryCount <= 0\n const isLowStock = !!product?.track_inventory && inventoryCount != null && inventoryCount > 0 && inventoryCount <= 5\n const needsVariantSelection = product ? (product.is_clothing || (product.variants?.length ?? 0) > 1) && !selectedVariant : false\n const hasExternalUrl = !!product?.external_url\n const isEvent = product?.type === 'event' || product?.type === 'class'\n const isService = product?.type === 'service'\n const isFree = !currentPrice || currentPrice === 0\n const needsShipping = !!processorConfig?.shipping_enabled && product?.type === 'product'\n const schedule = product?.schedules?.[0] || product?.next_schedule\n\n const checkoutSteps = useMemo<CheckoutState[]>(() => {\n const steps: CheckoutState[] = ['customer-info']\n if (needsShipping) steps.push('shipping', 'rates')\n if (!isFree) steps.push('payment')\n return steps\n }, [needsShipping, isFree])\n\n const ctaLabel = useMemo(() => {\n if (isOutOfStock) return 'Out of Stock'\n if (needsVariantSelection) return product?.is_clothing ? 'Select Size' : 'Select Option'\n if (hasExternalUrl) return product?.type === 'event' ? 'Get Tickets' : 'Learn More'\n if (isEvent) return isFree ? 'Register Free' : 'Get Tickets'\n if (isService) return 'Book Now'\n return isFree ? 'Get It Free' : 'Buy Now'\n }, [isOutOfStock, needsVariantSelection, hasExternalUrl, isEvent, isService, isFree, product?.is_clothing, product?.type])\n\n // --- Early returns (all hooks called above) ---\n\n if (!product) {\n if (loading) {\n return (\n <div className={`skc-detail ${className}`} style={customStyle}>\n <style>{STYLE_BLOCK}</style>\n <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', minHeight: 400 }}>\n <div\n style={{\n width: 48,\n height: 48,\n border: '3px solid var(--sk-border)',\n borderTopColor: 'var(--sk-primary)',\n borderRadius: '50%',\n animation: 'skc-spin 1s linear infinite',\n }}\n />\n </div>\n </div>\n )\n }\n return (\n <div className={`skc-detail ${className}`} style={customStyle}>\n <style>{STYLE_BLOCK}</style>\n <div style={{ textAlign: 'center', padding: '4rem 2rem', color: 'var(--sk-text-secondary)' }}>\n <h2 style={{ margin: 0, fontSize: '1.5rem', color: 'var(--sk-text-primary)' }}>Product Not Found</h2>\n <p style={{ marginTop: '0.5rem' }}>The product you are looking for does not exist or has been removed.</p>\n </div>\n </div>\n )\n }\n\n // ---------- Handlers ----------\n\n const handleVariantChange = (variant: CommerceVariant) => {\n setSelectedVariant(variant)\n if (variant.image_url) {\n const idx = allImages.indexOf(variant.image_url)\n if (idx >= 0) setSelectedImage(idx)\n }\n }\n\n const handleAddToCart = () => {\n analytics?.trackEvent({\n name: 'add_to_cart',\n properties: {\n offering_id: product.id,\n variant_id: selectedVariant?.id,\n quantity,\n price: currentPrice,\n name: product.name,\n },\n })\n onAddToCart?.(product, selectedVariant, quantity)\n }\n\n const handleBuyNow = () => {\n if (hasExternalUrl) {\n window.open(product.external_url!, '_blank', 'noopener')\n return\n }\n\n analytics?.trackEvent({\n name: 'begin_checkout',\n properties: {\n offering_id: product.id,\n variant_id: selectedVariant?.id,\n quantity,\n price: currentPrice,\n name: product.name,\n },\n })\n\n setCheckoutError(null)\n setCheckoutState('customer-info')\n }\n\n const handleCheckoutBack = () => {\n const currentIdx = checkoutSteps.indexOf(checkoutState)\n if (currentIdx <= 0) {\n setCheckoutState('browsing')\n } else {\n setCheckoutState(checkoutSteps[currentIdx - 1])\n }\n }\n\n const handleCustomerNext = async () => {\n if (isFree && isEvent && schedule) {\n // Free event registration — skip straight to registration\n setCheckoutState('processing')\n try {\n const result = await registerForEvent(product.id, schedule.id, customer)\n if (result.success) {\n setCheckoutResult(result)\n setCheckoutState('success')\n onCheckoutSuccess?.(result)\n } else {\n setCheckoutError(result.error || 'Registration failed')\n setCheckoutState('customer-info')\n }\n } catch (err: any) {\n setCheckoutError(err?.message || 'Registration failed')\n setCheckoutState('customer-info')\n }\n return\n }\n\n if (needsShipping) {\n setCheckoutState('shipping')\n } else if (!isFree) {\n setCheckoutState('payment')\n } else {\n // Free non-event — attempt direct checkout\n setCheckoutState('processing')\n try {\n const result = await createCheckoutSession({\n offeringId: product.id,\n variantId: selectedVariant?.id,\n quantity,\n customer,\n successUrl: successUrl || window.location.href,\n cancelUrl: cancelUrl || window.location.href,\n })\n if (result.success) {\n setCheckoutResult(result)\n setCheckoutState('success')\n onCheckoutSuccess?.(result)\n } else {\n setCheckoutError(result.error || 'Checkout failed')\n setCheckoutState('customer-info')\n }\n } catch (err: any) {\n setCheckoutError(err?.message || 'Checkout failed')\n setCheckoutState('customer-info')\n }\n }\n }\n\n const handleShippingNext = async () => {\n setRatesLoading(true)\n setCheckoutState('rates')\n try {\n const rates = await fetchShippingRates(shippingAddress, [\n { offering_id: product.id, quantity },\n ])\n setShippingRates(rates)\n if (rates.length) setSelectedShippingRate(rates[0])\n } catch {\n setShippingRates([])\n } finally {\n setRatesLoading(false)\n }\n }\n\n const handleRatesNext = () => {\n if (!isFree) {\n setCheckoutState('payment')\n }\n }\n\n const handlePaymentSuccess = (result: CheckoutResult) => {\n setCheckoutResult(result)\n setCheckoutState('success')\n analytics?.trackEvent({\n name: 'purchase',\n properties: {\n offering_id: product.id,\n variant_id: selectedVariant?.id,\n quantity,\n price: currentPrice,\n name: product.name,\n sale_id: result.sale_id,\n },\n })\n onCheckoutSuccess?.(result)\n }\n\n const handlePaymentError = (error: string) => {\n setCheckoutError(error)\n onCheckoutError?.(error)\n }\n\n const handleCloseCheckout = () => {\n setCheckoutState('browsing')\n if (checkoutResult) {\n // Reset form after successful purchase\n setCustomer({ name: '', email: '', phone: '' })\n setShippingAddress({ street1: '', city: '', state: '', zip: '', country: 'US' })\n setShippingRates([])\n setSelectedShippingRate(null)\n setCheckoutResult(null)\n }\n }\n\n // ---------- Render ----------\n\n return (\n <div className={`skc-detail ${className}`} style={customStyle}>\n <style>{STYLE_BLOCK}</style>\n\n <div className={`skc-detail-layout${layout === 'stacked' ? ' skc-stacked' : ''}`}>\n {/* Left: Gallery */}\n {showGallery && allImages.length > 0 && (\n <ProductGallery\n images={allImages}\n productName={product.name}\n selectedIndex={selectedImage}\n onSelect={setSelectedImage}\n imageIds={allImageIds}\n imageModelInfo={product.metadata?.image_model_info}\n />\n )}\n\n {/* Right: Info */}\n <div>\n {/* Category badge */}\n {product.category && (\n <div\n style={{\n fontSize: '0.75rem',\n fontWeight: 600,\n color: 'var(--sk-primary)',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n marginBottom: '0.375rem',\n }}\n >\n {product.category.name}\n </div>\n )}\n\n {/* Title */}\n <h1\n style={{\n margin: 0,\n fontSize: '1.875rem',\n fontWeight: 700,\n color: 'var(--sk-text-primary)',\n lineHeight: 1.2,\n }}\n >\n {product.name}\n </h1>\n\n {/* Short description */}\n {product.short_description && (\n <p\n style={{\n marginTop: '0.625rem',\n marginBottom: 0,\n fontSize: '1rem',\n color: 'var(--sk-text-secondary)',\n lineHeight: 1.6,\n }}\n >\n {product.short_description}\n </p>\n )}\n\n {/* Price */}\n {product.price_is_public && currentPrice != null && (\n <div\n style={{\n marginTop: '1rem',\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n flexWrap: 'wrap',\n }}\n >\n <span\n style={{\n fontSize: '1.75rem',\n fontWeight: 700,\n color: hasDiscount ? 'var(--sk-error)' : 'var(--sk-text-primary)',\n }}\n >\n {formatPrice(currentPrice, product.currency)}\n </span>\n {hasDiscount && (\n <>\n <span\n style={{\n fontSize: '1.125rem',\n color: 'var(--sk-text-secondary)',\n textDecoration: 'line-through',\n }}\n >\n {formatPrice(compareAtPrice!, product.currency)}\n </span>\n <span\n style={{\n fontSize: '0.75rem',\n fontWeight: 700,\n color: 'var(--sk-bg)',\n background: 'var(--sk-error)',\n padding: '2px 8px',\n borderRadius: 4,\n }}\n >\n -{discountPercent}%\n </span>\n </>\n )}\n {product.billing_period && (\n <span style={{ fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>\n / {product.billing_period}\n </span>\n )}\n </div>\n )}\n\n {/* Stock / Urgency */}\n {product.track_inventory && (\n <div style={{ marginTop: '0.75rem', display: 'flex', alignItems: 'center', gap: 6 }}>\n {isOutOfStock ? (\n <span\n style={{\n fontSize: '0.8125rem',\n fontWeight: 600,\n color: 'var(--sk-error)',\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n }}\n >\n <IconAlert /> Out of Stock\n </span>\n ) : isLowStock ? (\n <span\n className=\"skc-pulse\"\n style={{\n fontSize: '0.8125rem',\n fontWeight: 600,\n color: 'var(--sk-warning)',\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n }}\n >\n <IconAlert /> Only {inventoryCount} left!\n </span>\n ) : (\n <span\n style={{\n fontSize: '0.8125rem',\n fontWeight: 500,\n color: 'var(--sk-success)',\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n }}\n >\n <IconCheck /> In Stock\n </span>\n )}\n </div>\n )}\n\n {/* Event info */}\n {isEvent && schedule && <EventInfoBlock product={product} schedule={schedule} />}\n\n {/* Variants */}\n {showVariants && product.variants && (product.variants.length > 1 || product.is_clothing) && (\n <VariantSelector\n variants={product.variants}\n selected={selectedVariant}\n isClothing={!!product.is_clothing}\n showInventory={showInventory}\n onSelect={handleVariantChange}\n />\n )}\n\n {/* Sizing notes */}\n {product.metadata?.sizing_notes && (\n <div\n style={{\n marginTop: '0.5rem',\n fontSize: '0.8125rem',\n color: 'var(--sk-text-secondary)',\n fontStyle: 'italic',\n }}\n >\n {product.metadata.sizing_notes}\n </div>\n )}\n\n {/* Fit note warning */}\n {product.size_chart?.fit_note && (\n <div\n style={{\n marginTop: '0.75rem',\n padding: '0.625rem 0.875rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n backgroundColor: 'color-mix(in srgb, var(--sk-warning) 10%, transparent)',\n border: '1px solid color-mix(in srgb, var(--sk-warning) 25%, transparent)',\n display: 'flex',\n alignItems: 'flex-start',\n gap: '0.5rem',\n fontSize: '0.8125rem',\n color: 'var(--sk-warning)',\n fontWeight: 500,\n lineHeight: 1.4,\n }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ flexShrink: 0, marginTop: 1 }}>\n <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"/>\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/>\n </svg>\n {product.size_chart.fit_note}\n </div>\n )}\n\n {/* Product notices */}\n {product.metadata?.notices?.map((notice, idx) => (\n <div\n key={idx}\n style={{\n marginTop: '0.75rem',\n padding: '0.625rem 0.875rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n backgroundColor: 'color-mix(in srgb, var(--sk-warning) 10%, transparent)',\n border: '1px solid color-mix(in srgb, var(--sk-warning) 25%, transparent)',\n display: 'flex',\n alignItems: 'flex-start',\n gap: '0.5rem',\n fontSize: '0.8125rem',\n color: 'var(--sk-warning)',\n fontWeight: 500,\n lineHeight: 1.4,\n }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ flexShrink: 0, marginTop: 1 }}>\n <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\"/>\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\"/><line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\"/>\n </svg>\n {notice}\n </div>\n ))}\n\n {/* Size chart */}\n {showSizeChart && product.is_clothing && product.size_chart && (\n <div style={{ marginTop: '0.625rem' }}>\n <SizeChart\n chart={product.size_chart}\n selectedSize={(selectedVariant?.options as Record<string, string>)?.Size || selectedVariant?.name}\n />\n </div>\n )}\n\n {/* Quantity */}\n {showQuantity && !isOutOfStock && !isEvent && !isService && (\n <QuantitySelector\n quantity={quantity}\n max={product.track_inventory && inventoryCount != null ? inventoryCount : 99}\n onChange={setQuantity}\n />\n )}\n\n {/* Action Buttons */}\n <div style={{ marginTop: '1.5rem', display: 'flex', flexDirection: 'column', gap: '0.625rem' }}>\n <button\n ref={buyButtonRef}\n className=\"skc-btn-primary\"\n onClick={handleBuyNow}\n disabled={isOutOfStock || needsVariantSelection}\n aria-label={ctaLabel}\n >\n {hasExternalUrl && <IconExternalLink />}\n {ctaLabel}\n </button>\n {onAddToCart && !isEvent && !isService && !hasExternalUrl && (\n <button\n className=\"skc-btn-secondary\"\n onClick={handleAddToCart}\n disabled={isOutOfStock || needsVariantSelection}\n >\n Add to Cart\n </button>\n )}\n </div>\n\n {/* Checkout error (inline) */}\n {checkoutError && checkoutState === 'browsing' && (\n <div\n style={{\n marginTop: '0.75rem',\n padding: '0.75rem',\n background: 'rgba(var(--sk-error-rgb, 239,68,68), 0.06)',\n border: '1px solid rgba(var(--sk-error-rgb, 239,68,68), 0.2)',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n color: 'var(--sk-error)',\n fontSize: '0.875rem',\n display: 'flex',\n alignItems: 'flex-start',\n gap: 8,\n }}\n >\n <IconAlert />\n <span>{checkoutError}</span>\n </div>\n )}\n\n {/* Trust badges */}\n {showTrustBadges && <TrustBadges badges={trustBadges} />}\n\n {/* Care instructions */}\n {product.metadata?.care_instructions && (\n <div\n style={{\n marginTop: '1rem',\n padding: '0.75rem 1rem',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n backgroundColor: 'color-mix(in srgb, var(--sk-primary) 6%, transparent)',\n border: '1px solid color-mix(in srgb, var(--sk-primary) 18%, transparent)',\n display: 'flex',\n alignItems: 'flex-start',\n gap: '0.625rem',\n fontSize: '0.8125rem',\n color: 'var(--sk-text-secondary)',\n lineHeight: 1.5,\n }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--sk-primary)\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" style={{ flexShrink: 0, marginTop: 2 }}>\n <path d=\"M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z\"/>\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\"/><line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\"/>\n </svg>\n <div>\n <div style={{ fontWeight: 600, color: 'var(--sk-text-primary)', marginBottom: 2 }}>Care Instructions</div>\n {product.metadata.care_instructions}\n </div>\n </div>\n )}\n\n {/* Product tabs */}\n <ProductTabs\n features={product.features}\n specifications={product.specifications}\n description={product.long_description}\n showFeatures={showFeatures}\n showSpecifications={showSpecifications}\n showDescription={showDescription}\n />\n </div>\n </div>\n\n {/* Mobile sticky buy bar */}\n {showStickyBar && checkoutState === 'browsing' && !isOutOfStock && !needsVariantSelection && (\n <div className=\"skc-sticky-bar\">\n <div>\n <div style={{ fontWeight: 600, fontSize: '0.875rem', color: 'var(--sk-text-primary)', lineHeight: 1.2 }}>\n {product.name}\n </div>\n {product.price_is_public && currentPrice != null && (\n <div style={{ fontWeight: 700, fontSize: '1rem', color: hasDiscount ? 'var(--sk-error)' : 'var(--sk-text-primary)' }}>\n {formatPrice(currentPrice, product.currency)}\n </div>\n )}\n </div>\n <button\n className=\"skc-btn-primary\"\n onClick={handleBuyNow}\n style={{ width: 'auto', padding: '0.625rem 1.5rem', fontSize: '0.875rem' }}\n >\n {ctaLabel}\n </button>\n </div>\n )}\n\n {/* Checkout Overlay */}\n {checkoutState !== 'browsing' && (\n <div\n className=\"skc-checkout-overlay\"\n onClick={(e) => {\n if (e.target === e.currentTarget && checkoutState !== 'processing') {\n handleCloseCheckout()\n }\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Checkout\"\n >\n <div\n className=\"skc-checkout-panel\"\n onClick={(e) => e.stopPropagation()}\n >\n {/* Close button */}\n {checkoutState !== 'processing' && (\n <button\n onClick={handleCloseCheckout}\n aria-label=\"Close checkout\"\n style={{\n position: 'absolute',\n top: 12,\n right: 12,\n width: 32,\n height: 32,\n borderRadius: '50%',\n border: 'none',\n background: 'var(--sk-bg-elevated)',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10,\n color: 'var(--sk-text-secondary)',\n }}\n >\n <IconX />\n </button>\n )}\n\n <div style={{ padding: '1.5rem' }}>\n {/* Step indicator */}\n {checkoutState !== 'success' && checkoutState !== 'processing' && (\n <CheckoutStepIndicator current={checkoutState} steps={checkoutSteps} />\n )}\n\n {/* Processing state */}\n {checkoutState === 'processing' && (\n <div style={{ textAlign: 'center', padding: '3rem 0' }}>\n <div\n style={{\n width: 48,\n height: 48,\n border: '3px solid var(--sk-border)',\n borderTopColor: 'var(--sk-primary)',\n borderRadius: '50%',\n animation: 'skc-spin 0.8s linear infinite',\n margin: '0 auto 1.5rem',\n }}\n />\n <p style={{ color: 'var(--sk-text-secondary)', fontSize: '0.9375rem', margin: 0 }}>\n Processing your order...\n </p>\n </div>\n )}\n\n {/* Success */}\n {checkoutState === 'success' && checkoutResult && (\n <SuccessStep result={checkoutResult} product={product} onClose={handleCloseCheckout} />\n )}\n\n {/* Customer Info */}\n {checkoutState === 'customer-info' && (\n <CustomerInfoStep\n customer={customer}\n onChange={setCustomer}\n onNext={handleCustomerNext}\n onBack={handleCloseCheckout}\n />\n )}\n\n {/* Shipping Address */}\n {checkoutState === 'shipping' && (\n <ShippingAddressStep\n address={shippingAddress}\n onChange={setShippingAddress}\n onNext={handleShippingNext}\n onBack={handleCheckoutBack}\n loading={ratesLoading}\n />\n )}\n\n {/* Shipping Rates */}\n {checkoutState === 'rates' && (\n <ShippingRatesStep\n rates={shippingRates}\n selected={selectedShippingRate}\n onSelect={setSelectedShippingRate}\n onNext={handleRatesNext}\n onBack={handleCheckoutBack}\n loading={ratesLoading}\n currency={product.currency}\n />\n )}\n\n {/* Payment */}\n {checkoutState === 'payment' && (\n <PaymentStep\n processor={processorConfig?.processor || null}\n config={processorConfig}\n product={product}\n variant={selectedVariant}\n quantity={quantity}\n customer={customer}\n shippingRate={selectedShippingRate}\n shippingAddress={needsShipping ? shippingAddress : null}\n needsShipping={needsShipping}\n onBack={handleCheckoutBack}\n onSuccess={handlePaymentSuccess}\n onError={handlePaymentError}\n onProcessing={(p) => { if (p) setCheckoutState('processing') }}\n successUrl={successUrl}\n cancelUrl={cancelUrl}\n />\n )}\n\n {/* Inline error display */}\n {checkoutError && checkoutState !== 'payment' && checkoutState !== 'processing' && checkoutState !== 'success' && (\n <div\n style={{\n marginTop: '0.75rem',\n padding: '0.75rem',\n background: 'rgba(var(--sk-error-rgb, 239,68,68), 0.06)',\n border: '1px solid rgba(var(--sk-error-rgb, 239,68,68), 0.2)',\n borderRadius: 'var(--sk-radius-sm, 8px)',\n color: 'var(--sk-error)',\n fontSize: '0.875rem',\n display: 'flex',\n alignItems: 'flex-start',\n gap: 8,\n }}\n >\n <IconAlert />\n <span>{checkoutError}</span>\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport default ProductDetail\n","/**\n * @sonordev/site-kit/commerce - ProductGrid\n * \n * Grid layout for displaying multiple products with filtering and sorting.\n * Ideal for shop pages, category pages, and product listings.\n */\n\n'use client'\n\nimport React, { useState, useEffect, useMemo } from 'react'\nimport type { CommerceOffering, CommerceCategory } from './types'\nimport { OfferingCard } from './OfferingCard'\nimport { fetchProductsPublic } from './api'\n\nexport interface ProductGridProps {\n /** Pre-loaded products (for SSR) */\n products?: CommerceOffering[]\n /** Limit number of products */\n limit?: number\n /** Category to filter by */\n category?: string\n /** Show category filter */\n showCategoryFilter?: boolean\n /** Show sort dropdown */\n showSort?: boolean\n /** Show search input */\n showSearch?: boolean\n /** Number of columns (responsive) */\n columns?: 2 | 3 | 4\n /** Loading skeleton count */\n skeletonCount?: number\n /** Custom empty state message */\n emptyMessage?: string\n /** Callback when product is clicked */\n onProductClick?: (product: CommerceOffering) => void\n /** Navigate to product page on click */\n linkToProduct?: boolean\n /** Base path for product links */\n productBasePath?: string\n /** Additional class names */\n className?: string\n /** Card variant style */\n cardVariant?: 'card' | 'minimal' | 'horizontal'\n /** Custom styles */\n style?: React.CSSProperties\n}\n\ntype SortOption = 'newest' | 'oldest' | 'price-low' | 'price-high' | 'name-az' | 'name-za'\n\nexport function ProductGrid({\n products: propProducts,\n limit,\n category: propCategory,\n showCategoryFilter = false,\n showSort = true,\n showSearch = true,\n columns = 3,\n skeletonCount = 6,\n emptyMessage = 'No products found',\n onProductClick,\n linkToProduct = true,\n productBasePath = '/shop',\n className = '',\n cardVariant = 'card',\n style,\n}: ProductGridProps) {\n const [products, setProducts] = useState<CommerceOffering[]>(propProducts || [])\n const [total, setTotal] = useState(0)\n const [loading, setLoading] = useState(!propProducts)\n const [searchQuery, setSearchQuery] = useState('')\n const [selectedCategory, setSelectedCategory] = useState<string | undefined>(propCategory)\n const [sortBy, setSortBy] = useState<SortOption>('newest')\n\n // Extract unique categories from products\n const categories = useMemo(() => {\n const categoryMap = new Map<string, CommerceCategory>()\n products.forEach(p => {\n if (p.category) {\n categoryMap.set(p.category.id, p.category)\n }\n })\n return Array.from(categoryMap.values())\n }, [products])\n\n // Fetch products\n useEffect(() => {\n if (propProducts) {\n setProducts(propProducts)\n setTotal(propProducts.length)\n return\n }\n\n async function load() {\n setLoading(true)\n try {\n const { products: data, total: count } = await fetchProductsPublic({\n category: selectedCategory,\n limit,\n orderBy: 'created_at',\n order: 'desc',\n })\n setProducts(data)\n setTotal(count)\n } catch (e) {\n console.warn('Failed to load products:', e)\n } finally {\n setLoading(false)\n }\n }\n\n load()\n }, [propProducts, selectedCategory, limit])\n\n // Filter and sort products\n const filteredProducts = useMemo(() => {\n let filtered = [...products]\n\n // Search filter\n if (searchQuery) {\n const query = searchQuery.toLowerCase()\n filtered = filtered.filter(p => \n p.name.toLowerCase().includes(query) ||\n p.short_description?.toLowerCase().includes(query) ||\n p.tags?.some(tag => tag.toLowerCase().includes(query))\n )\n }\n\n // Category filter (if not already filtered by fetch)\n if (selectedCategory && !propCategory) {\n filtered = filtered.filter(p => p.category_id === selectedCategory)\n }\n\n // Sort\n switch (sortBy) {\n case 'newest':\n filtered.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime())\n break\n case 'oldest':\n filtered.sort((a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime())\n break\n case 'price-low':\n filtered.sort((a, b) => (a.price || 0) - (b.price || 0))\n break\n case 'price-high':\n filtered.sort((a, b) => (b.price || 0) - (a.price || 0))\n break\n case 'name-az':\n filtered.sort((a, b) => a.name.localeCompare(b.name))\n break\n case 'name-za':\n filtered.sort((a, b) => b.name.localeCompare(a.name))\n break\n }\n\n return filtered\n }, [products, searchQuery, selectedCategory, sortBy, propCategory])\n\n const handleProductClick = (product: CommerceOffering) => {\n if (onProductClick) {\n onProductClick(product)\n } else if (linkToProduct && typeof window !== 'undefined') {\n window.location.href = `${productBasePath}/${product.slug}`\n }\n }\n\n // Grid column styles\n const gridColumns = {\n 2: 'repeat(auto-fill, minmax(280px, 1fr))',\n 3: 'repeat(auto-fill, minmax(240px, 1fr))',\n 4: 'repeat(auto-fill, minmax(200px, 1fr))',\n }\n\n return (\n <div className={`site-kit-product-grid ${className}`} style={style}>\n {/* Filters & Controls */}\n {(showSearch || showSort || showCategoryFilter) && (\n <div className=\"site-kit-product-grid__controls\" style={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: '1rem',\n marginBottom: '1.5rem',\n alignItems: 'center',\n }}>\n {/* Search */}\n {showSearch && (\n <div className=\"site-kit-product-grid__search\" style={{ flex: '1 1 200px' }}>\n <input\n type=\"search\"\n placeholder=\"Search products...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n style={{\n width: '100%',\n padding: '0.625rem 1rem',\n borderRadius: '8px',\n border: '1px solid var(--sk-border)',\n fontSize: '0.9375rem',\n }}\n />\n </div>\n )}\n\n {/* Category Filter */}\n {showCategoryFilter && categories.length > 0 && (\n <select\n value={selectedCategory || ''}\n onChange={(e) => setSelectedCategory(e.target.value || undefined)}\n className=\"site-kit-product-grid__category-filter\"\n style={{\n padding: '0.625rem 1rem',\n borderRadius: '8px',\n border: '1px solid var(--sk-border)',\n fontSize: '0.9375rem',\n backgroundColor: 'var(--sk-bg)',\n minWidth: '150px',\n }}\n >\n <option value=\"\">All Categories</option>\n {categories.map(cat => (\n <option key={cat.id} value={cat.id}>{cat.name}</option>\n ))}\n </select>\n )}\n\n {/* Sort */}\n {showSort && (\n <select\n value={sortBy}\n onChange={(e) => setSortBy(e.target.value as SortOption)}\n className=\"site-kit-product-grid__sort\"\n style={{\n padding: '0.625rem 1rem',\n borderRadius: '8px',\n border: '1px solid var(--sk-border)',\n fontSize: '0.9375rem',\n backgroundColor: 'var(--sk-bg)',\n }}\n >\n <option value=\"newest\">Newest First</option>\n <option value=\"oldest\">Oldest First</option>\n <option value=\"price-low\">Price: Low to High</option>\n <option value=\"price-high\">Price: High to Low</option>\n <option value=\"name-az\">Name: A-Z</option>\n <option value=\"name-za\">Name: Z-A</option>\n </select>\n )}\n\n {/* Results count */}\n <div className=\"site-kit-product-grid__count\" style={{\n marginLeft: 'auto',\n fontSize: '0.875rem',\n color: 'var(--sk-text-secondary)',\n }}>\n {searchQuery ? filteredProducts.length : total} product{(searchQuery ? filteredProducts.length : total) !== 1 ? 's' : ''}\n </div>\n </div>\n )}\n\n {/* Loading Skeletons */}\n {loading && (\n <div className=\"site-kit-product-grid__grid\" style={{\n display: 'grid',\n gridTemplateColumns: gridColumns[columns],\n gap: '1.5rem',\n }}>\n {Array.from({ length: skeletonCount }).map((_, i) => (\n <div key={i} className=\"site-kit-product-grid__skeleton\" style={{\n aspectRatio: '1',\n backgroundColor: 'var(--sk-surface)',\n borderRadius: '12px',\n animation: 'pulse 2s infinite',\n }} />\n ))}\n <style>{`\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n `}</style>\n </div>\n )}\n\n {/* Products Grid */}\n {!loading && filteredProducts.length > 0 && (\n <div className=\"site-kit-product-grid__grid\" style={{\n display: 'grid',\n gridTemplateColumns: gridColumns[columns],\n gap: '1.5rem',\n }}>\n {filteredProducts.map(product => (\n <OfferingCard\n key={product.id}\n offering={product}\n variant={cardVariant}\n showImage\n showPrice\n showDescription\n showCta\n ctaText=\"View Product\"\n onCtaClick={() => handleProductClick(product)}\n />\n ))}\n </div>\n )}\n\n {/* Empty State */}\n {!loading && filteredProducts.length === 0 && (\n <div className=\"site-kit-product-grid__empty\" style={{\n textAlign: 'center',\n padding: '4rem 2rem',\n backgroundColor: 'var(--sk-bg-elevated)',\n borderRadius: '12px',\n }}>\n <div style={{ fontSize: '3rem', marginBottom: '1rem' }}>🛍️</div>\n <p style={{ \n margin: 0, \n color: 'var(--sk-text-secondary)',\n fontSize: '1rem',\n }}>\n {searchQuery ? `No products match \"${searchQuery}\"` : emptyMessage}\n </p>\n {searchQuery && (\n <button\n onClick={() => setSearchQuery('')}\n style={{\n marginTop: '1rem',\n padding: '0.5rem 1rem',\n borderRadius: '6px',\n border: 'none',\n backgroundColor: 'var(--sk-primary)',\n color: 'var(--sk-bg)',\n fontSize: '0.875rem',\n cursor: 'pointer',\n }}\n >\n Clear Search\n </button>\n )}\n </div>\n )}\n </div>\n )\n}\n","/**\n * @sonordev/site-kit/commerce - ProductPage\n * \n * Complete product page component with SEO metadata, breadcrumbs, and related products.\n * Use this as a drop-in for dynamic [slug] routes.\n */\n\n'use client'\n\nimport React, { useEffect, useState } from 'react'\nimport type { CommerceOffering, CommerceVariant, CheckoutResult } from './types'\nimport { ProductDetail } from './ProductDetail'\nimport { ProductGrid } from './ProductGrid'\nimport { fetchProductBySlug, fetchProductsPublic } from './api'\n\nexport interface ProductPageProps {\n /** Pre-loaded product data (for SSR) */\n product?: CommerceOffering\n /** Product slug to fetch (if not pre-loaded) */\n slug?: string\n /** Show breadcrumbs navigation */\n showBreadcrumbs?: boolean\n /** Show related products section */\n showRelatedProducts?: boolean\n /** Number of related products to show */\n relatedProductsLimit?: number\n /** Show back to shop link */\n showBackLink?: boolean\n /** Base path for shop */\n shopBasePath?: string\n /** Success URL after checkout */\n successUrl?: string\n /** Cancel URL if checkout cancelled */\n cancelUrl?: string\n /** Callback when added to cart */\n onAddToCart?: (product: CommerceOffering, variant?: CommerceVariant, quantity?: number) => void\n /** Custom breadcrumb renderer */\n renderBreadcrumbs?: (product: CommerceOffering) => React.ReactNode\n /** Custom SEO head renderer (for Next.js Head or similar) */\n renderHead?: (product: CommerceOffering) => React.ReactNode\n /** Additional class names */\n className?: string\n /** Custom styles */\n style?: React.CSSProperties\n}\n\nexport function ProductPage({\n product: propProduct,\n slug,\n showBreadcrumbs = true,\n showRelatedProducts = true,\n relatedProductsLimit = 4,\n showBackLink = true,\n shopBasePath = '/shop',\n successUrl,\n cancelUrl,\n onAddToCart,\n renderBreadcrumbs,\n renderHead,\n className = '',\n style,\n}: ProductPageProps) {\n const [product, setProduct] = useState<CommerceOffering | null>(propProduct || null)\n const [relatedProducts, setRelatedProducts] = useState<CommerceOffering[]>([])\n const [loading, setLoading] = useState(!propProduct && !!slug)\n\n // Fetch product if not provided\n useEffect(() => {\n if (propProduct) {\n setProduct(propProduct)\n return\n }\n\n if (!slug) return\n\n async function load() {\n setLoading(true)\n try {\n const data = await fetchProductBySlug(slug!)\n setProduct(data)\n } catch (e) {\n console.error('Failed to load product:', e)\n } finally {\n setLoading(false)\n }\n }\n\n load()\n }, [propProduct, slug])\n\n // Fetch related products\n useEffect(() => {\n if (!product || !showRelatedProducts) return\n\n async function loadRelated() {\n try {\n const { products } = await fetchProductsPublic({\n category: product?.category_id,\n limit: relatedProductsLimit + 1, // Fetch one extra to exclude current\n })\n // Exclude current product\n const filtered = products.filter(p => p.id !== product?.id).slice(0, relatedProductsLimit)\n setRelatedProducts(filtered)\n } catch (e) {\n console.error('Failed to load related products:', e)\n }\n }\n\n loadRelated()\n }, [product, showRelatedProducts, relatedProductsLimit])\n\n // Update document title for SEO\n useEffect(() => {\n if (product && typeof document !== 'undefined') {\n document.title = product.seo_title || `${product.name} | Shop`\n \n // Update meta description\n const metaDesc = document.querySelector('meta[name=\"description\"]')\n if (metaDesc && (product.seo_description || product.short_description)) {\n metaDesc.setAttribute('content', product.seo_description || product.short_description || '')\n }\n }\n }, [product])\n\n if (loading) {\n return (\n <div className={`site-kit-product-page site-kit-product-page--loading ${className}`} style={style}>\n <div style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n minHeight: '60vh',\n }}>\n <div style={{\n width: '48px',\n height: '48px',\n border: '3px solid var(--sk-border)',\n borderTopColor: 'var(--sk-primary)',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }} />\n </div>\n <style>{`@keyframes spin { to { transform: rotate(360deg); } }`}</style>\n </div>\n )\n }\n\n if (!product) {\n return (\n <div className={`site-kit-product-page site-kit-product-page--not-found ${className}`} style={style}>\n <div style={{\n textAlign: 'center',\n padding: '6rem 2rem',\n }}>\n <div style={{ fontSize: '4rem', marginBottom: '1rem' }}>🔍</div>\n <h1 style={{ margin: 0, fontSize: '2rem', color: 'var(--sk-text-primary)' }}>Product Not Found</h1>\n <p style={{ marginTop: '0.75rem', color: 'var(--sk-text-secondary)' }}>\n The product you're looking for doesn't exist or has been removed.\n </p>\n <a\n href={shopBasePath}\n style={{\n display: 'inline-block',\n marginTop: '1.5rem',\n padding: '0.75rem 1.5rem',\n borderRadius: '8px',\n backgroundColor: 'var(--sk-primary)',\n color: 'var(--sk-bg)',\n textDecoration: 'none',\n fontWeight: 600,\n }}\n >\n Back to Shop\n </a>\n </div>\n </div>\n )\n }\n\n // Default breadcrumbs\n const defaultBreadcrumbs = (\n <nav className=\"site-kit-product-page__breadcrumbs\" aria-label=\"Breadcrumb\" style={{\n marginBottom: '1.5rem',\n fontSize: '0.875rem',\n }}>\n <ol style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: '0.5rem',\n listStyle: 'none',\n margin: 0,\n padding: 0,\n }}>\n <li>\n <a href=\"/\" style={{ color: 'var(--sk-text-secondary)', textDecoration: 'none' }}>Home</a>\n </li>\n <li style={{ color: 'var(--sk-text-secondary)' }}>/</li>\n <li>\n <a href={shopBasePath} style={{ color: 'var(--sk-text-secondary)', textDecoration: 'none' }}>Shop</a>\n </li>\n {product.category && (\n <>\n <li style={{ color: 'var(--sk-text-secondary)' }}>/</li>\n <li>\n <a \n href={`${shopBasePath}?category=${product.category.id}`} \n style={{ color: 'var(--sk-text-secondary)', textDecoration: 'none' }}\n >\n {product.category.name}\n </a>\n </li>\n </>\n )}\n <li style={{ color: 'var(--sk-text-secondary)' }}>/</li>\n <li style={{ color: 'var(--sk-text-primary)', fontWeight: 500 }}>{product.name}</li>\n </ol>\n </nav>\n )\n\n return (\n <div className={`site-kit-product-page ${className}`} style={style}>\n {/* Custom head for SEO */}\n {renderHead?.(product)}\n\n {/* Back Link */}\n {showBackLink && (\n <div className=\"site-kit-product-page__back\" style={{ marginBottom: '1rem' }}>\n <a\n href={shopBasePath}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.5rem',\n color: 'var(--sk-text-secondary)',\n textDecoration: 'none',\n fontSize: '0.875rem',\n }}\n >\n <span>←</span>\n <span>Back to Shop</span>\n </a>\n </div>\n )}\n\n {/* Breadcrumbs */}\n {showBreadcrumbs && (\n renderBreadcrumbs ? renderBreadcrumbs(product) : defaultBreadcrumbs\n )}\n\n {/* Product Detail */}\n <ProductDetail\n product={product}\n showQuantity\n showVariants\n showGallery\n showFeatures\n showSpecifications\n successUrl={successUrl}\n cancelUrl={cancelUrl}\n onAddToCart={onAddToCart}\n />\n\n {/* Related Products */}\n {showRelatedProducts && relatedProducts.length > 0 && (\n <section className=\"site-kit-product-page__related\" style={{ marginTop: '4rem' }}>\n <h2 style={{\n fontSize: '1.5rem',\n fontWeight: 600,\n color: 'var(--sk-text-primary)',\n marginBottom: '1.5rem',\n }}>\n {product.category ? `More ${product.category.name}` : 'Related Products'}\n </h2>\n <ProductGrid\n products={relatedProducts}\n showSearch={false}\n showSort={false}\n showCategoryFilter={false}\n columns={4}\n productBasePath={shopBasePath}\n />\n </section>\n )}\n </div>\n )\n}\n","/**\n * @sonordev/site-kit/commerce - EventEmbed\n * \n * Embeddable widget for displaying an event on a homepage or landing page.\n * Great for featuring the next upcoming event.\n */\n\n'use client'\n\nimport React, { useEffect, useState } from 'react'\nimport type { EventEmbedProps, CommerceOffering } from './types'\nimport { EventTile } from './EventTile'\nimport { fetchOffering, fetchNextEvent } from './api'\n\nexport function EventEmbed({\n event: propEvent,\n slug,\n mode = 'next', // 'specific', 'next'\n category,\n variant = 'standard',\n showDate = true,\n showTime = true,\n showLocation = true,\n showCapacity = true,\n showPrice = true,\n showCta = true,\n ctaText,\n onRegister,\n onCtaClick,\n className = '',\n}: EventEmbedProps) {\n const [event, setEvent] = useState<CommerceOffering | null>(propEvent || null)\n const [loading, setLoading] = useState(!propEvent && (!!slug || mode === 'next'))\n \n useEffect(() => {\n if (propEvent) {\n setEvent(propEvent)\n return\n }\n \n async function load() {\n setLoading(true)\n try {\n let data: CommerceOffering | null = null\n \n if (mode === 'specific' && slug) {\n data = await fetchOffering(slug)\n } else if (mode === 'next') {\n data = await fetchNextEvent(category)\n }\n \n setEvent(data)\n } catch (e) {\n console.error('Failed to load event:', e)\n } finally {\n setLoading(false)\n }\n }\n \n load()\n }, [propEvent, slug, mode, category])\n \n if (loading) {\n return (\n <div className={`site-kit-event-embed ${className}`} style={{\n padding: '2rem',\n textAlign: 'center',\n background: 'var(--sk-bg-elevated)',\n borderRadius: '12px',\n }}>\n <div style={{\n width: '40px',\n height: '40px',\n margin: '0 auto',\n border: '3px solid var(--sk-border)',\n borderTopColor: 'var(--sk-primary)',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n }} />\n <style>{`\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n )\n }\n \n if (!event) {\n return null // Silent fail - don't show anything if no event\n }\n \n return (\n <div className={`site-kit-event-embed ${className}`}>\n <EventTile\n event={event}\n variant={variant}\n showDate={showDate}\n showTime={showTime}\n showLocation={showLocation}\n showCapacity={showCapacity}\n showPrice={showPrice}\n showCta={showCta}\n ctaText={ctaText}\n onRegister={onRegister}\n onCtaClick={onCtaClick}\n />\n </div>\n )\n}\n\nexport default EventEmbed\n","/**\n * @sonordev/site-kit/commerce - CheckoutForm\n * \n * Checkout/registration form for purchasing products or registering for events.\n * Supports shipping flow when shipping_enabled and product type.\n */\n\n'use client'\n\nimport React, { useState, useEffect } from 'react'\nimport type { CheckoutFormProps, CommerceOffering, CheckoutCustomer } from './types'\nimport type { ShippingAddress, ShippingRate, CreateCheckoutOptions, DiscountValidationResult } from './api'\nimport {\n createCheckoutSession,\n registerForEvent,\n fetchActiveProcessor,\n fetchProcessorConfig,\n fetchShippingRates,\n validateDiscountCode,\n} from './api'\nimport { formatPrice } from './utils'\nimport { useAnalyticsOptional } from '../analytics'\n\ntype ShippingStep = 'address' | 'rates'\n\nexport function CheckoutForm({\n offering,\n scheduleId,\n variantId,\n quantity: initialQuantity = 1,\n mode = 'checkout', // 'checkout' | 'register'\n showQuantity = true,\n submitText,\n onSuccess,\n onError,\n className = '',\n formClassName = '',\n inputClassName = '',\n buttonClassName = '',\n}: CheckoutFormProps) {\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [success, setSuccess] = useState(false)\n const [quantity, setQuantity] = useState(initialQuantity)\n const [processor, setProcessor] = useState<'stripe' | 'square' | null>(null)\n const [shippingEnabled, setShippingEnabled] = useState(false)\n const [shippingStep, setShippingStep] = useState<ShippingStep>('address')\n const [shippingAddress, setShippingAddress] = useState<ShippingAddress>({\n street1: '',\n street2: '',\n city: '',\n state: '',\n zip: '',\n country: 'US',\n })\n const [shippingRates, setShippingRates] = useState<ShippingRate[]>([])\n const [selectedRate, setSelectedRate] = useState<ShippingRate | null>(null)\n const [loadingRates, setLoadingRates] = useState(false)\n\n const [customer, setCustomer] = useState<CheckoutCustomer>({\n email: '',\n name: '',\n phone: '',\n })\n const [discountCode, setDiscountCode] = useState('')\n const [discountResult, setDiscountResult] = useState<DiscountValidationResult | null>(null)\n const [applyingDiscount, setApplyingDiscount] = useState(false)\n\n const isProduct = offering.type === 'product'\n\n const analytics = useAnalyticsOptional()\n\n // Fetch processor config (includes shipping_enabled)\n useEffect(() => {\n fetchProcessorConfig().then((config) => {\n if (config?.processor) setProcessor(config.processor)\n if (config?.shipping_enabled && isProduct) setShippingEnabled(true)\n })\n }, [isProduct])\n \n const isEvent = offering.type === 'event' || offering.type === 'class'\n const isFree = !offering.price || offering.price === 0\n const actualMode = isEvent && isFree ? 'register' : mode\n \n const defaultSubmitText = actualMode === 'register' \n ? 'Register' \n : isFree \n ? 'Complete Order' \n : 'Continue to Payment'\n \n const subtotal = offering.price ? offering.price * quantity : 0\n const shippingCost = selectedRate ? parseFloat(selectedRate.amount) : 0\n const discountAmount = discountResult?.valid ? (discountResult.discount_amount ?? 0) : 0\n const total = Math.max(0, subtotal + shippingCost - discountAmount)\n\n const handleApplyDiscount = async () => {\n if (!discountCode.trim()) return\n setApplyingDiscount(true)\n try {\n const result = await validateDiscountCode(discountCode.trim(), subtotal, [offering.id])\n setDiscountResult(result)\n if (!result.valid) {\n setError(result.message || 'Invalid discount code')\n } else {\n setError(null)\n }\n } catch {\n setDiscountResult(null)\n setError('Could not validate discount code')\n } finally {\n setApplyingDiscount(false)\n }\n }\n\n const handleRemoveDiscount = () => {\n setDiscountCode('')\n setDiscountResult(null)\n }\n\n const updateShippingAddress = (field: keyof ShippingAddress, value: string) => {\n setShippingAddress((prev) => ({ ...prev, [field]: value }))\n }\n\n const handleGetShippingRates = async () => {\n if (!shippingAddress.street1 || !shippingAddress.city || !shippingAddress.state || !shippingAddress.zip) {\n setError('Please fill in all required address fields.')\n return\n }\n setLoadingRates(true)\n setError(null)\n try {\n const rates = await fetchShippingRates(\n { ...shippingAddress, name: customer.name, phone: customer.phone },\n [{ offering_id: offering.id, quantity }]\n )\n setShippingRates(rates)\n if (rates.length > 0) setSelectedRate(rates[0])\n setShippingStep('rates')\n } catch (e) {\n setError('Failed to get shipping rates. Please check your address.')\n } finally {\n setLoadingRates(false)\n }\n }\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setLoading(true)\n setError(null)\n\n analytics?.trackEvent({\n name: 'checkout_start',\n properties: {\n offering_id: offering.id,\n total,\n quantity,\n },\n })\n\n try {\n if (actualMode === 'register' && isEvent && scheduleId) {\n // Free event registration\n const result = await registerForEvent(offering.id, scheduleId, customer)\n \n if (result.success) {\n setSuccess(true)\n onSuccess?.(result)\n } else {\n setError(result.error || 'Registration failed')\n onError?.(result.error || 'Registration failed')\n }\n } else {\n // Paid checkout - redirect to Stripe/Square\n const checkoutOptions: Omit<CreateCheckoutOptions, 'offeringId'> = {\n variantId,\n scheduleId,\n quantity,\n customer,\n discountCode: discountResult?.valid ? discountCode.trim() : undefined,\n }\n if (shippingEnabled && shippingAddress.street1 && selectedRate) {\n checkoutOptions.shippingAddress = {\n ...shippingAddress,\n name: customer.name,\n phone: customer.phone,\n }\n checkoutOptions.shippingCarrier = selectedRate.carrier\n checkoutOptions.shippingService = selectedRate.service\n checkoutOptions.shippingCost = parseFloat(selectedRate.amount)\n }\n const result = await createCheckoutSession(offering.id, checkoutOptions)\n \n if (result.success && result.payment_url) {\n // Redirect to payment\n window.location.href = result.payment_url\n } else {\n setError(result.error || 'Checkout failed')\n onError?.(result.error || 'Checkout failed')\n }\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : 'An error occurred'\n setError(message)\n onError?.(message)\n } finally {\n setLoading(false)\n }\n }\n \n const updateCustomer = (field: keyof CheckoutCustomer, value: string) => {\n setCustomer((prev) => ({ ...prev, [field]: value }))\n }\n\n const canProceedToPayment = !shippingEnabled || (shippingStep === 'rates' && selectedRate)\n \n if (success) {\n return (\n <div className={`site-kit-checkout-success ${className}`} style={{\n padding: '2rem',\n textAlign: 'center',\n background: 'rgba(var(--sk-success-rgb, 16,185,129), 0.06)',\n borderRadius: '12px',\n border: '1px solid rgba(var(--sk-success-rgb, 16,185,129), 0.2)',\n }}>\n <div style={{ fontSize: '3rem', marginBottom: '1rem' }}>🎉</div>\n <h3 style={{ margin: '0 0 0.5rem', color: 'var(--sk-success)' }}>\n {actualMode === 'register' ? 'Registration Complete!' : 'Order Confirmed!'}\n </h3>\n <p style={{ color: 'var(--sk-success)', margin: 0 }}>\n {actualMode === 'register' \n ? `You're registered for ${offering.name}. Check your email for confirmation.`\n : `Thank you for your order! Check your email for details.`\n }\n </p>\n </div>\n )\n }\n \n return (\n <div className={`site-kit-checkout ${className}`}>\n <form onSubmit={handleSubmit} className={formClassName}>\n {/* Order Summary */}\n <div style={{\n padding: '1rem',\n background: 'var(--sk-bg-elevated)',\n borderRadius: '8px',\n marginBottom: '1.5rem',\n }}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start' }}>\n <div>\n <h4 style={{ margin: '0 0 0.25rem', fontSize: '1rem' }}>{offering.name}</h4>\n {offering.short_description && (\n <p style={{ margin: 0, fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>\n {offering.short_description}\n </p>\n )}\n </div>\n {offering.price_is_public && offering.price != null && (\n <div style={{ fontWeight: 600, fontSize: '1.125rem' }}>\n {offering.price === 0 ? 'Free' : formatPrice(offering.price, offering.currency)}\n </div>\n )}\n </div>\n \n {showQuantity && !isEvent && offering.price && offering.price > 0 && (\n <div style={{ marginTop: '1rem', display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <label style={{ fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>Quantity:</label>\n <select\n value={quantity}\n onChange={(e) => setQuantity(Number(e.target.value))}\n className={inputClassName}\n style={{\n padding: '0.375rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n background: 'var(--sk-bg)',\n }}\n >\n {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].map(n => (\n <option key={n} value={n}>{n}</option>\n ))}\n </select>\n <span style={{ marginLeft: 'auto', fontWeight: 600 }}>\n {shippingEnabled && selectedRate ? `Subtotal: ${formatPrice(subtotal, offering.currency)}` : `Total: ${formatPrice(total, offering.currency)}`}\n </span>\n </div>\n )}\n </div>\n \n {/* Discount Code */}\n {!isFree && (\n <div style={{ marginBottom: '1.5rem' }}>\n {discountResult?.valid ? (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0.625rem 0.875rem',\n background: 'rgba(var(--sk-success-rgb, 16,185,129), 0.06)',\n border: '1px solid rgba(var(--sk-success-rgb, 16,185,129), 0.2)',\n borderRadius: '6px',\n }}>\n <div>\n <span style={{ fontSize: '0.875rem', fontWeight: 500, color: 'var(--sk-success)' }}>\n {discountResult.name || discountCode}\n </span>\n <span style={{ fontSize: '0.875rem', color: 'var(--sk-success)', marginLeft: '0.5rem' }}>\n −{formatPrice(discountAmount, offering.currency)}\n </span>\n </div>\n <button\n type=\"button\"\n onClick={handleRemoveDiscount}\n style={{\n background: 'none',\n border: 'none',\n color: 'var(--sk-error)',\n cursor: 'pointer',\n fontSize: '0.75rem',\n fontWeight: 500,\n }}\n >\n Remove\n </button>\n </div>\n ) : (\n <div style={{ display: 'flex', gap: '0.5rem' }}>\n <input\n type=\"text\"\n value={discountCode}\n onChange={(e) => setDiscountCode(e.target.value.toUpperCase())}\n placeholder=\"Discount code\"\n className={inputClassName}\n style={{\n flex: 1,\n padding: '0.5rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '0.875rem',\n }}\n />\n <button\n type=\"button\"\n onClick={handleApplyDiscount}\n disabled={applyingDiscount || !discountCode.trim()}\n style={{\n padding: '0.5rem 1rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n background: 'var(--sk-bg)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: applyingDiscount || !discountCode.trim() ? 'not-allowed' : 'pointer',\n opacity: applyingDiscount || !discountCode.trim() ? 0.5 : 1,\n }}\n >\n {applyingDiscount ? '...' : 'Apply'}\n </button>\n </div>\n )}\n </div>\n )}\n\n {/* Order Total (when discount applied) */}\n {discountResult?.valid && !isFree && (\n <div style={{\n padding: '0.75rem 1rem',\n background: 'var(--sk-bg-elevated)',\n borderRadius: '6px',\n marginBottom: '1.5rem',\n fontSize: '0.875rem',\n }}>\n <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '0.25rem' }}>\n <span style={{ color: 'var(--sk-text-secondary)' }}>Subtotal</span>\n <span>{formatPrice(subtotal, offering.currency)}</span>\n </div>\n <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '0.25rem', color: 'var(--sk-success)' }}>\n <span>Discount</span>\n <span>−{formatPrice(discountAmount, offering.currency)}</span>\n </div>\n {shippingCost > 0 && (\n <div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '0.25rem' }}>\n <span style={{ color: 'var(--sk-text-secondary)' }}>Shipping</span>\n <span>{formatPrice(shippingCost, offering.currency)}</span>\n </div>\n )}\n <div style={{ display: 'flex', justifyContent: 'space-between', borderTop: '1px solid var(--sk-border)', paddingTop: '0.5rem', marginTop: '0.25rem', fontWeight: 600 }}>\n <span>Total</span>\n <span>{formatPrice(total, offering.currency)}</span>\n </div>\n </div>\n )}\n\n {/* Customer Info */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Full Name *\n </label>\n <input\n type=\"text\"\n required\n value={customer.name}\n onChange={(e) => updateCustomer('name', e.target.value)}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n \n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Email Address *\n </label>\n <input\n type=\"email\"\n required\n value={customer.email}\n onChange={(e) => updateCustomer('email', e.target.value)}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n \n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Phone Number\n </label>\n <input\n type=\"tel\"\n value={customer.phone || ''}\n onChange={(e) => updateCustomer('phone', e.target.value)}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n </div>\n\n {/* Shipping Address (when shipping enabled) */}\n {shippingEnabled && !isEvent && (\n <div style={{ marginTop: '1.5rem', paddingTop: '1.5rem', borderTop: '1px solid var(--sk-border)' }}>\n <h4 style={{ margin: '0 0 1rem', fontSize: '1rem' }}>Shipping Address</h4>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>Street Address *</label>\n <input\n type=\"text\"\n required={shippingEnabled}\n value={shippingAddress.street1}\n onChange={(e) => updateShippingAddress('street1', e.target.value)}\n className={inputClassName}\n placeholder=\"123 Main St\"\n style={{ width: '100%', padding: '0.625rem 0.75rem', borderRadius: '6px', border: '1px solid var(--sk-border)', fontSize: '1rem' }}\n />\n </div>\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>Apartment, suite, etc.</label>\n <input\n type=\"text\"\n value={shippingAddress.street2 || ''}\n onChange={(e) => updateShippingAddress('street2', e.target.value)}\n className={inputClassName}\n style={{ width: '100%', padding: '0.625rem 0.75rem', borderRadius: '6px', border: '1px solid var(--sk-border)', fontSize: '1rem' }}\n />\n </div>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '1rem' }}>\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>City *</label>\n <input\n type=\"text\"\n required={shippingEnabled}\n value={shippingAddress.city}\n onChange={(e) => updateShippingAddress('city', e.target.value)}\n className={inputClassName}\n style={{ width: '100%', padding: '0.625rem 0.75rem', borderRadius: '6px', border: '1px solid var(--sk-border)', fontSize: '1rem' }}\n />\n </div>\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>State *</label>\n <input\n type=\"text\"\n required={shippingEnabled}\n value={shippingAddress.state}\n onChange={(e) => updateShippingAddress('state', e.target.value)}\n className={inputClassName}\n style={{ width: '100%', padding: '0.625rem 0.75rem', borderRadius: '6px', border: '1px solid var(--sk-border)', fontSize: '1rem' }}\n />\n </div>\n </div>\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>ZIP Code *</label>\n <input\n type=\"text\"\n required={shippingEnabled}\n value={shippingAddress.zip}\n onChange={(e) => updateShippingAddress('zip', e.target.value)}\n className={inputClassName}\n style={{ width: '100%', maxWidth: '120px', padding: '0.625rem 0.75rem', borderRadius: '6px', border: '1px solid var(--sk-border)', fontSize: '1rem' }}\n />\n </div>\n </div>\n {shippingStep === 'address' && (\n <button\n type=\"button\"\n onClick={handleGetShippingRates}\n disabled={loadingRates || !shippingAddress.street1 || !shippingAddress.city || !shippingAddress.state || !shippingAddress.zip}\n style={{\n marginTop: '1rem',\n padding: '0.625rem 1.25rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-primary)',\n background: 'var(--sk-bg)',\n color: 'var(--sk-primary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: loadingRates ? 'not-allowed' : 'pointer',\n }}\n >\n {loadingRates ? 'Getting rates...' : 'Get shipping options'}\n </button>\n )}\n {shippingStep === 'rates' && shippingRates.length > 0 && (\n <div style={{ marginTop: '1rem' }}>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.5rem' }}>Select shipping method</label>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.5rem' }}>\n {shippingRates.map((rate) => (\n <label\n key={rate.objectId || `${rate.carrier}-${rate.service}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n padding: '0.75rem',\n borderRadius: '6px',\n border: `2px solid ${selectedRate === rate ? 'var(--sk-primary)' : 'var(--sk-border)'}`,\n background: selectedRate === rate ? 'rgba(var(--sk-primary-rgb), 0.06)' : 'var(--sk-bg)',\n cursor: 'pointer',\n }}\n >\n <input\n type=\"radio\"\n name=\"shipping-rate\"\n checked={selectedRate === rate}\n onChange={() => setSelectedRate(rate)}\n />\n <span style={{ flex: 1 }}>{rate.carrier} - {rate.service}</span>\n <span style={{ fontWeight: 600 }}>{formatPrice(parseFloat(rate.amount), rate.currency || 'USD')}</span>\n {rate.estimatedDays && (\n <span style={{ fontSize: '0.75rem', color: 'var(--sk-text-secondary)' }}>({rate.estimatedDays} days)</span>\n )}\n </label>\n ))}\n </div>\n <button\n type=\"button\"\n onClick={() => setShippingStep('address')}\n style={{\n marginTop: '0.75rem',\n fontSize: '0.875rem',\n color: 'var(--sk-text-secondary)',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n textDecoration: 'underline',\n }}\n >\n Change address\n </button>\n </div>\n )}\n </div>\n )}\n \n {error && (\n <div style={{\n marginTop: '1rem',\n padding: '0.75rem',\n background: 'rgba(var(--sk-error-rgb, 239,68,68), 0.06)',\n border: '1px solid rgba(var(--sk-error-rgb, 239,68,68), 0.2)',\n borderRadius: '6px',\n color: 'var(--sk-error)',\n fontSize: '0.875rem',\n }}>\n {error}\n </div>\n )}\n \n <button\n type=\"submit\"\n disabled={loading || (!isEvent && !isFree && !canProceedToPayment)}\n className={buttonClassName}\n style={{\n width: '100%',\n marginTop: '1.5rem',\n padding: '0.875rem',\n fontSize: '1rem',\n fontWeight: 600,\n borderRadius: '8px',\n border: 'none',\n background: loading ? 'var(--sk-primary-hover)' : 'var(--sk-primary)',\n color: 'white',\n cursor: loading ? 'not-allowed' : 'pointer',\n }}\n >\n {loading ? 'Processing...' : (submitText || defaultSubmitText)}\n </button>\n \n {!isFree && (\n <p style={{ \n textAlign: 'center', \n fontSize: '0.75rem', \n color: 'var(--sk-text-secondary)',\n marginTop: '0.75rem',\n }}>\n You'll be redirected to our secure payment page\n </p>\n )}\n \n {/* Powered by Stripe / Square badge */}\n {processor && !isFree && (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '0.375rem',\n marginTop: '0.5rem',\n opacity: 0.5,\n }}>\n {processor === 'stripe' ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13.976 9.15c-2.172-.806-3.356-1.426-3.356-2.409 0-.831.683-1.305 1.901-1.305 2.227 0 4.515.858 6.09 1.631l.89-5.494C18.252.975 15.697 0 12.165 0 9.667 0 7.589.654 6.104 1.872 4.56 3.147 3.757 4.992 3.757 7.218c0 4.039 2.467 5.76 6.476 7.219 2.585.92 3.445 1.574 3.445 2.583 0 .98-.84 1.545-2.354 1.545-1.875 0-4.965-.921-6.99-2.109l-.9 5.555C5.175 22.99 8.385 24 11.714 24c2.641 0 4.843-.624 6.328-1.813 1.664-1.305 2.525-3.236 2.525-5.732 0-4.128-2.524-5.851-6.591-7.305z\" fill=\"#635BFF\"/>\n </svg>\n ) : (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"24\" height=\"24\" rx=\"4\" fill=\"#3E4348\"/>\n <rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\" fill=\"white\"/>\n </svg>\n )}\n <span style={{ fontSize: '0.625rem', color: 'var(--sk-text-secondary)', letterSpacing: '0.02em' }}>\n Powered by {processor === 'stripe' ? 'Stripe' : 'Square'}\n </span>\n </div>\n )}\n </form>\n </div>\n )\n}\n\nexport default CheckoutForm\n","/**\n * @sonordev/site-kit/commerce - EventCheckout\n *\n * Multi-variant inline event checkout. Renders a tier selector (one row per variant\n * with qty controls), customer info, and a Square card element. Submits a single\n * lineItems[] payload to the Portal multi-line checkout endpoint — one charge for\n * the aggregate total, no redirect.\n *\n * v1: Square inline only. For single-tier events without variants, the component\n * gracefully falls back to a single \"ticket\" row using the offering's base price.\n */\n\n'use client'\n\nimport React, { useEffect, useMemo, useRef, useState } from 'react'\nimport type {\n CommerceOffering,\n CommerceSchedule,\n CommerceVariant,\n CheckoutCustomer,\n CheckoutResult,\n} from './types'\nimport {\n createCheckoutSession,\n fetchProcessorConfig,\n type CheckoutLineItem,\n type ProcessorConfig,\n} from './api'\nimport {\n formatDate,\n formatTime,\n formatPrice,\n getSpotsRemaining,\n isEventSoldOut,\n} from './utils'\n\nfunction loadSquareSDK(environment: string): Promise<void> {\n return new Promise((resolve, reject) => {\n if (typeof window === 'undefined') return reject(new Error('No window'))\n if ((window as any).Square) return resolve()\n const script = document.createElement('script')\n script.src =\n environment === 'sandbox'\n ? 'https://sandbox.web.squarecdn.com/v1/square.js'\n : 'https://web.squarecdn.com/v1/square.js'\n script.onload = () => resolve()\n script.onerror = () => reject(new Error('Failed to load Square SDK'))\n document.head.appendChild(script)\n })\n}\n\n/**\n * Resolve a CSS custom property from :root to its computed value so it can be\n * passed to Square's Web Payments SDK, which runs the card form in an iframe\n * and rejects `var(...)` references in its `style` config. Square's color\n * validator only accepts 6-digit hex and standard rgb()/named colors — it\n * rejects 8-digit hex (alpha) and rgba/hsla. We normalize anything with an\n * alpha channel down to its 6-digit hex equivalent before handing it over.\n */\nfunction resolveCssVar(name: string, fallback: string): string {\n if (typeof window === 'undefined') return fallback\n const raw = getComputedStyle(document.documentElement)\n .getPropertyValue(name)\n .trim()\n if (!raw) return fallback\n return normalizeColorForSquare(raw) ?? fallback\n}\n\nfunction normalizeColorForSquare(value: string): string | null {\n const v = value.trim()\n if (!v) return null\n if (/^#[0-9a-f]{6}$/i.test(v)) return v\n const eightDigit = /^(#[0-9a-f]{6})[0-9a-f]{2}$/i.exec(v)\n if (eightDigit) return eightDigit[1]\n const threeDigit = /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(v)\n if (threeDigit) {\n const [, r, g, b] = threeDigit\n return `#${r}${r}${g}${g}${b}${b}`\n }\n const rgb = /^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/i.exec(v)\n if (rgb) {\n const [, r, g, b] = rgb\n const toHex = (n: string) => Number(n).toString(16).padStart(2, '0')\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`\n }\n return null\n}\n\nexport interface EventCheckoutProps {\n /** Event offering — must include `variants` (multi-tier) or have a base price (single-tier). */\n event: CommerceOffering\n /** Specific schedule to book. Defaults to first upcoming schedule on the event. */\n schedule?: CommerceSchedule\n /** Collect a phone number (defaults to true; tickets often need contact). */\n collectPhone?: boolean\n /** Maximum quantity per individual variant row (default 10). */\n maxPerVariant?: number\n /**\n * Seed per-variant quantities on mount, keyed by variant id — lets a tier\n * card or deep link open checkout with that tier already selected. Values\n * clamp to [0, maxPerVariant]; unknown ids are ignored. Multi-tier events\n * only (single-ticket events already start at 1). Initial state only: to\n * re-seed an already-mounted checkout, remount it (e.g. `key={variantId}`).\n */\n initialQuantities?: Record<string, number>\n /** Card label override (e.g. \"Card details\" vs \"Payment\"). */\n cardLabel?: string\n /** Submit button text override. Falls back to \"Buy {total}\". */\n submitText?: string\n /** Success callback after a successful charge. */\n onSuccess?: (result: CheckoutResult) => void\n /** Error callback. */\n onError?: (error: string) => void\n className?: string\n}\n\ninterface QtyByVariant {\n [variantId: string]: number\n}\n\nconst SINGLE_TICKET_KEY = '__single__'\n\nexport function EventCheckout({\n event,\n schedule: propSchedule,\n collectPhone = true,\n maxPerVariant = 10,\n initialQuantities,\n cardLabel = 'Card Details',\n submitText,\n onSuccess,\n onError,\n className = '',\n}: EventCheckoutProps) {\n const schedule = propSchedule || event.schedules?.[0] || (event as any)?.next_schedule\n const variants: CommerceVariant[] = useMemo(\n () => event.variants ?? [],\n [event.variants],\n )\n const hasVariants = variants.length > 0\n const currency = event.currency || 'USD'\n\n // Map each variant ID (or SINGLE_TICKET_KEY) to current quantity\n const [qty, setQty] = useState<QtyByVariant>(() => {\n if (hasVariants) {\n return Object.fromEntries(\n variants.map((v) => {\n const seed = initialQuantities?.[v.id]\n const n =\n typeof seed === 'number' && Number.isFinite(seed)\n ? Math.floor(seed)\n : 0\n return [v.id, Math.max(0, Math.min(maxPerVariant, n))]\n }),\n ) as QtyByVariant\n }\n return { [SINGLE_TICKET_KEY]: 1 }\n })\n\n const [customer, setCustomer] = useState<CheckoutCustomer>({\n email: '',\n name: '',\n phone: '',\n })\n\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [success, setSuccess] = useState<CheckoutResult | null>(null)\n\n const [processorConfig, setProcessorConfig] = useState<ProcessorConfig | null>(null)\n const [squareCard, setSquareCard] = useState<any>(null)\n const [cardReady, setCardReady] = useState(false)\n const cardContainerRef = useRef<HTMLDivElement>(null)\n\n // Compute totals\n const totalQuantity = useMemo(\n () => Object.values(qty).reduce((sum, n) => sum + (n || 0), 0),\n [qty],\n )\n\n const lineBreakdown = useMemo(() => {\n if (!hasVariants) {\n const q = qty[SINGLE_TICKET_KEY] || 0\n const price = event.price ?? 0\n return [\n {\n key: SINGLE_TICKET_KEY,\n name: 'Ticket',\n unitPrice: price,\n quantity: q,\n subtotal: price * q,\n variantId: null as string | null,\n },\n ]\n }\n return variants.map((v) => {\n const q = qty[v.id] || 0\n const price = v.price ?? event.price ?? 0\n return {\n key: v.id,\n name: v.name,\n unitPrice: price,\n quantity: q,\n subtotal: price * q,\n variantId: v.id,\n }\n })\n }, [variants, qty, hasVariants, event.price])\n\n const subtotal = lineBreakdown.reduce((s, l) => s + l.subtotal, 0)\n\n // Capacity awareness\n const spotsRemaining = schedule\n ? getSpotsRemaining(schedule.capacity, (schedule as any).current_registrations ?? undefined) ??\n schedule.spots_remaining ??\n null\n : null\n const soldOut = schedule\n ? isEventSoldOut(schedule.capacity, (schedule as any).current_registrations ?? undefined)\n : false\n const overCapacity =\n spotsRemaining !== null && totalQuantity > spotsRemaining\n\n // Load Square SDK + mount card element\n useEffect(() => {\n let cancelled = false\n let attachedCard: any = null\n\n fetchProcessorConfig().then(async (config) => {\n if (cancelled) return\n setProcessorConfig(config)\n if (config?.processor !== 'square' || !config.squareAppId || !config.squareLocationId) {\n return\n }\n try {\n await loadSquareSDK(config.squareEnvironment || 'production')\n if (cancelled) return\n const Square = (window as any).Square\n const payments = Square.payments(config.squareAppId, config.squareLocationId)\n const card = await payments.card({\n style: {\n '.input-container': {\n borderColor: resolveCssVar('--sk-border', '#d1d5db'),\n borderRadius: '6px',\n },\n '.input-container.is-focus': {\n borderColor: resolveCssVar('--sk-primary', '#2563eb'),\n },\n '.input-container.is-error': {\n borderColor: '#dc2626',\n },\n },\n })\n if (cancelled) {\n await card.destroy?.().catch(() => {})\n return\n }\n await card.attach('#sk-event-checkout-card')\n attachedCard = card\n setSquareCard(card)\n setCardReady(true)\n } catch (err) {\n console.error('[EventCheckout] Square card init failed:', err)\n }\n })\n\n return () => {\n cancelled = true\n if (attachedCard) {\n attachedCard.destroy?.().catch(() => {})\n }\n setSquareCard(null)\n setCardReady(false)\n }\n }, [])\n\n const updateQty = (key: string, delta: number) => {\n setQty((prev) => {\n const current = prev[key] ?? 0\n const next = Math.max(0, Math.min(maxPerVariant, current + delta))\n return { ...prev, [key]: next }\n })\n setError(null)\n }\n\n const updateCustomer = (field: keyof CheckoutCustomer, value: string) => {\n setCustomer((prev) => ({ ...prev, [field]: value }))\n }\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setError(null)\n\n if (!schedule) {\n setError('No event date available')\n return\n }\n if (totalQuantity === 0) {\n setError('Select at least one ticket')\n return\n }\n if (overCapacity) {\n setError(\n `Only ${spotsRemaining} spot${spotsRemaining === 1 ? '' : 's'} remaining. Please reduce quantity.`,\n )\n return\n }\n if (!customer.name || !customer.email) {\n setError('Name and email are required')\n return\n }\n if (processorConfig?.processor !== 'square') {\n setError('Inline checkout requires Square. Please contact support.')\n return\n }\n if (!squareCard || !cardReady) {\n setError('Card form is still loading. Please wait a moment and try again.')\n return\n }\n\n setLoading(true)\n try {\n const tokenResult = await squareCard.tokenize()\n if (tokenResult.status !== 'OK') {\n const msg =\n tokenResult.errors?.[0]?.message ||\n 'Card verification failed. Please check your card details.'\n setError(msg)\n onError?.(msg)\n setLoading(false)\n return\n }\n\n const lineItems: CheckoutLineItem[] = lineBreakdown\n .filter((l) => l.quantity > 0)\n .map((l) => ({\n offeringId: event.id,\n variantId: l.variantId ?? undefined,\n scheduleId: schedule.id,\n quantity: l.quantity,\n }))\n\n const result = await createCheckoutSession({\n offeringId: event.id,\n lineItems,\n customer,\n sourceId: tokenResult.token,\n successUrl: typeof window !== 'undefined' ? window.location.href + '?registration=success' : undefined,\n cancelUrl: typeof window !== 'undefined' ? window.location.href : undefined,\n })\n\n if (result.success) {\n setSuccess(result)\n onSuccess?.(result)\n } else {\n setError(result.error || 'Checkout failed')\n onError?.(result.error || 'Checkout failed')\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : 'An error occurred'\n setError(message)\n onError?.(message)\n } finally {\n setLoading(false)\n }\n }\n\n if (success) {\n return (\n <div\n className={`site-kit-event-checkout-success ${className}`}\n style={{\n padding: '2rem',\n textAlign: 'center',\n background: 'var(--sk-bg, #fff)',\n border: '1px solid var(--sk-border, #e5e7eb)',\n borderRadius: '12px',\n }}\n >\n <div style={{ fontSize: '3rem', marginBottom: '0.75rem' }}>🎟️</div>\n <h3\n style={{\n margin: '0 0 0.5rem',\n fontSize: '1.5rem',\n color: 'var(--sk-text-primary, #111)',\n }}\n >\n You're booked!\n </h3>\n <p\n style={{\n margin: '0 0 0.5rem',\n color: 'var(--sk-text-secondary, #555)',\n }}\n >\n Confirmation #{success.confirmation_number || success.sale_id}\n </p>\n <p\n style={{\n margin: 0,\n color: 'var(--sk-text-secondary, #555)',\n fontSize: '0.9rem',\n }}\n >\n Check your email for ticket details.\n </p>\n </div>\n )\n }\n\n if (soldOut) {\n return (\n <div\n className={`site-kit-event-checkout-soldout ${className}`}\n style={{\n padding: '2rem',\n textAlign: 'center',\n background: 'var(--sk-surface, #f9fafb)',\n border: '1px solid var(--sk-border, #e5e7eb)',\n borderRadius: '12px',\n }}\n >\n <p style={{ margin: 0, fontWeight: 600, fontSize: '1.125rem' }}>\n This cruise is sold out\n </p>\n <p style={{ margin: '0.5rem 0 0', color: 'var(--sk-text-secondary, #555)' }}>\n Check back soon for additional dates.\n </p>\n </div>\n )\n }\n\n return (\n <div\n className={`site-kit-event-checkout ${className}`}\n style={{\n background: 'var(--sk-bg, #fff)',\n border: '1px solid var(--sk-border, #e5e7eb)',\n borderRadius: '12px',\n padding: '1.5rem',\n }}\n >\n {schedule && (\n <div style={{ marginBottom: '1.25rem' }}>\n <div\n style={{\n fontSize: '0.75rem',\n textTransform: 'uppercase',\n letterSpacing: '0.08em',\n color: 'var(--sk-text-secondary, #555)',\n marginBottom: '0.25rem',\n }}\n >\n Date & Time\n </div>\n <div\n style={{\n fontSize: '1.125rem',\n fontWeight: 600,\n color: 'var(--sk-text-primary, #111)',\n }}\n >\n {formatDate(schedule.starts_at)} · {formatTime(schedule.starts_at)}\n </div>\n {spotsRemaining !== null && spotsRemaining <= 10 && spotsRemaining > 0 && (\n <div\n style={{\n marginTop: '0.5rem',\n fontSize: '0.875rem',\n color: 'var(--sk-warning, #b45309)',\n fontWeight: 500,\n }}\n >\n Only {spotsRemaining} spot{spotsRemaining === 1 ? '' : 's'} left\n </div>\n )}\n </div>\n )}\n\n <form onSubmit={handleSubmit}>\n {/* Tier selector */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '0.75rem',\n marginBottom: '1.25rem',\n }}\n >\n {lineBreakdown.map((line) => (\n <div\n key={line.key}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '1rem',\n padding: '0.875rem 1rem',\n background: 'var(--sk-surface, #f9fafb)',\n borderRadius: '8px',\n border: '1px solid var(--sk-border, #e5e7eb)',\n }}\n >\n <div style={{ flex: 1, minWidth: 0 }}>\n <div\n style={{\n fontWeight: 600,\n color: 'var(--sk-text-primary, #111)',\n }}\n >\n {line.name}\n </div>\n <div\n style={{\n fontSize: '0.875rem',\n color: 'var(--sk-text-secondary, #555)',\n }}\n >\n {formatPrice(line.unitPrice, currency)} each\n </div>\n </div>\n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <button\n type=\"button\"\n onClick={() => updateQty(line.key, -1)}\n disabled={line.quantity === 0}\n aria-label={`Decrease ${line.name} quantity`}\n style={{\n width: '32px',\n height: '32px',\n borderRadius: '50%',\n border: '1px solid var(--sk-border, #d1d5db)',\n background: 'var(--sk-bg, #fff)',\n color: 'var(--sk-text-primary, #111)',\n cursor: line.quantity === 0 ? 'not-allowed' : 'pointer',\n opacity: line.quantity === 0 ? 0.4 : 1,\n fontSize: '1.25rem',\n lineHeight: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n −\n </button>\n <div\n style={{\n minWidth: '2.5rem',\n textAlign: 'center',\n fontWeight: 600,\n fontSize: '1.125rem',\n }}\n >\n {line.quantity}\n </div>\n <button\n type=\"button\"\n onClick={() => updateQty(line.key, 1)}\n disabled={line.quantity >= maxPerVariant}\n aria-label={`Increase ${line.name} quantity`}\n style={{\n width: '32px',\n height: '32px',\n borderRadius: '50%',\n border: '1px solid var(--sk-border, #d1d5db)',\n background: 'var(--sk-bg, #fff)',\n color: 'var(--sk-text-primary, #111)',\n cursor: line.quantity >= maxPerVariant ? 'not-allowed' : 'pointer',\n opacity: line.quantity >= maxPerVariant ? 0.4 : 1,\n fontSize: '1.25rem',\n lineHeight: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n +\n </button>\n </div>\n </div>\n ))}\n </div>\n\n {/* Total */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n padding: '0.75rem 0',\n borderTop: '1px solid var(--sk-border, #e5e7eb)',\n borderBottom: '1px solid var(--sk-border, #e5e7eb)',\n marginBottom: '1.25rem',\n }}\n >\n <span\n style={{\n fontSize: '0.875rem',\n color: 'var(--sk-text-secondary, #555)',\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n }}\n >\n Total ({totalQuantity} {totalQuantity === 1 ? 'ticket' : 'tickets'})\n </span>\n <span\n style={{\n fontSize: '1.5rem',\n fontWeight: 700,\n color: 'var(--sk-text-primary, #111)',\n }}\n >\n {formatPrice(subtotal, currency)}\n </span>\n </div>\n\n {/* Customer info */}\n <div\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '0.75rem',\n marginBottom: '1rem',\n }}\n >\n <div>\n <label\n style={{\n display: 'block',\n fontSize: '0.75rem',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n color: 'var(--sk-text-secondary, #555)',\n marginBottom: '0.25rem',\n }}\n >\n Full Name\n </label>\n <input\n type=\"text\"\n required\n value={customer.name}\n onChange={(e) => updateCustomer('name', e.target.value)}\n placeholder=\"John Smith\"\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border, #d1d5db)',\n fontSize: '1rem',\n background: 'var(--sk-bg, #fff)',\n color: 'var(--sk-text-primary, #111)',\n }}\n />\n </div>\n\n <div>\n <label\n style={{\n display: 'block',\n fontSize: '0.75rem',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n color: 'var(--sk-text-secondary, #555)',\n marginBottom: '0.25rem',\n }}\n >\n Email Address\n </label>\n <input\n type=\"email\"\n required\n value={customer.email}\n onChange={(e) => updateCustomer('email', e.target.value)}\n placeholder=\"john@example.com\"\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border, #d1d5db)',\n fontSize: '1rem',\n background: 'var(--sk-bg, #fff)',\n color: 'var(--sk-text-primary, #111)',\n }}\n />\n </div>\n\n {collectPhone && (\n <div>\n <label\n style={{\n display: 'block',\n fontSize: '0.75rem',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n color: 'var(--sk-text-secondary, #555)',\n marginBottom: '0.25rem',\n }}\n >\n Phone Number\n </label>\n <input\n type=\"tel\"\n value={customer.phone || ''}\n onChange={(e) => updateCustomer('phone', e.target.value)}\n placeholder=\"(555) 123-4567\"\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border, #d1d5db)',\n fontSize: '1rem',\n background: 'var(--sk-bg, #fff)',\n color: 'var(--sk-text-primary, #111)',\n }}\n />\n </div>\n )}\n </div>\n\n {/* Card */}\n <div style={{ marginBottom: '1rem' }}>\n <label\n style={{\n display: 'block',\n fontSize: '0.75rem',\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n color: 'var(--sk-text-secondary, #555)',\n marginBottom: '0.25rem',\n }}\n >\n {cardLabel}\n </label>\n <div\n id=\"sk-event-checkout-card\"\n ref={cardContainerRef}\n style={{\n minHeight: '44px',\n border: '1px solid var(--sk-border, #d1d5db)',\n borderRadius: '6px',\n padding: '0.5rem 0.75rem',\n background: 'var(--sk-bg, #fff)',\n }}\n />\n {!cardReady && (\n <p\n style={{\n fontSize: '0.75rem',\n color: 'var(--sk-text-secondary, #555)',\n marginTop: '0.25rem',\n }}\n >\n Loading card form...\n </p>\n )}\n </div>\n\n {error && (\n <div\n role=\"alert\"\n style={{\n marginBottom: '1rem',\n padding: '0.75rem 1rem',\n background: 'rgba(220, 38, 38, 0.06)',\n border: '1px solid rgba(220, 38, 38, 0.25)',\n borderRadius: '6px',\n color: '#b91c1c',\n fontSize: '0.875rem',\n }}\n >\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={loading || totalQuantity === 0 || !cardReady || overCapacity}\n style={{\n width: '100%',\n padding: '0.875rem 1rem',\n fontSize: '1rem',\n fontWeight: 600,\n borderRadius: '8px',\n border: 'none',\n background:\n loading || totalQuantity === 0 || !cardReady || overCapacity\n ? 'var(--sk-primary-hover, #94a3b8)'\n : 'var(--sk-primary, #2563eb)',\n color: 'var(--sk-primary-text, #fff)',\n cursor:\n loading || totalQuantity === 0 || !cardReady || overCapacity\n ? 'not-allowed'\n : 'pointer',\n transition: 'background 0.15s ease',\n }}\n >\n {loading\n ? 'Processing...'\n : submitText\n ? submitText\n : totalQuantity === 0\n ? 'Select tickets'\n : `Buy ${formatPrice(subtotal, currency)}`}\n </button>\n\n <p\n style={{\n textAlign: 'center',\n fontSize: '0.75rem',\n color: 'var(--sk-text-secondary, #888)',\n margin: '0.75rem 0 0',\n }}\n >\n 🔒 Secure checkout powered by Square\n </p>\n </form>\n </div>\n )\n}\n\nexport default EventCheckout\n","/**\n * @sonordev/site-kit/commerce - RegistrationForm\n * \n * Simplified registration form for free events/classes.\n */\n\n'use client'\n\nimport React, { useState } from 'react'\nimport type { RegistrationFormProps, CheckoutCustomer, AdditionalField, AdditionalFieldOption } from './types'\nimport { registerForEvent } from './api'\n\nexport function RegistrationForm({\n event,\n scheduleId,\n title = 'Register for Event',\n submitText = 'Register',\n successMessage,\n collectPhone = false,\n additionalFields = [],\n onSuccess,\n onError,\n className = '',\n formClassName = '',\n inputClassName = '',\n buttonClassName = '',\n}: RegistrationFormProps) {\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [success, setSuccess] = useState(false)\n \n const [customer, setCustomer] = useState<CheckoutCustomer>({\n email: '',\n name: '',\n phone: '',\n })\n \n const [additionalData, setAdditionalData] = useState<Record<string, string>>({})\n \n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setLoading(true)\n setError(null)\n \n try {\n const result = await registerForEvent(event.id, scheduleId, {\n ...customer,\n ...additionalData,\n })\n \n if (result.success) {\n setSuccess(true)\n onSuccess?.(result)\n } else {\n setError(result.error || 'Registration failed')\n onError?.(result.error || 'Registration failed')\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : 'An error occurred'\n setError(message)\n onError?.(message)\n } finally {\n setLoading(false)\n }\n }\n \n if (success) {\n return (\n <div className={`site-kit-registration-success ${className}`} style={{\n padding: '2rem',\n textAlign: 'center',\n background: 'rgba(var(--sk-success-rgb, 16,185,129), 0.06)',\n borderRadius: '12px',\n border: '1px solid rgba(var(--sk-success-rgb, 16,185,129), 0.2)',\n }}>\n <div style={{ fontSize: '3rem', marginBottom: '1rem' }}>🎉</div>\n <h3 style={{ margin: '0 0 0.5rem', color: 'var(--sk-success)' }}>\n You're Registered!\n </h3>\n <p style={{ color: 'var(--sk-success)', margin: 0 }}>\n {successMessage || `You've been registered for ${event.name}. Check your email for confirmation.`}\n </p>\n </div>\n )\n }\n \n return (\n <div className={`site-kit-registration ${className}`}>\n {title && (\n <h3 style={{ margin: '0 0 1.5rem', fontSize: '1.25rem', fontWeight: 600 }}>\n {title}\n </h3>\n )}\n \n <form onSubmit={handleSubmit} className={formClassName}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Full Name *\n </label>\n <input\n type=\"text\"\n required\n value={customer.name}\n onChange={(e) => setCustomer(prev => ({ ...prev, name: e.target.value }))}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n \n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Email Address *\n </label>\n <input\n type=\"email\"\n required\n value={customer.email}\n onChange={(e) => setCustomer(prev => ({ ...prev, email: e.target.value }))}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n \n {collectPhone && (\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Phone Number\n </label>\n <input\n type=\"tel\"\n value={customer.phone || ''}\n onChange={(e) => setCustomer(prev => ({ ...prev, phone: e.target.value }))}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n )}\n \n {additionalFields.map((field: AdditionalField) => (\n <div key={field.name}>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n {field.label} {field.required && '*'}\n </label>\n {field.type === 'textarea' ? (\n <textarea\n required={field.required}\n placeholder={field.placeholder}\n value={additionalData[field.name] || ''}\n onChange={(e) => setAdditionalData(prev => ({ ...prev, [field.name]: e.target.value }))}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n minHeight: '80px',\n }}\n />\n ) : field.type === 'select' && field.options ? (\n <select\n required={field.required}\n value={additionalData[field.name] || ''}\n onChange={(e) => setAdditionalData(prev => ({ ...prev, [field.name]: e.target.value }))}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n background: 'var(--sk-bg)',\n }}\n >\n <option value=\"\">Select...</option>\n {field.options.map((opt: AdditionalFieldOption) => (\n <option key={opt.value} value={opt.value}>{opt.label}</option>\n ))}\n </select>\n ) : (\n <input\n type={field.type || 'text'}\n required={field.required}\n placeholder={field.placeholder}\n value={additionalData[field.name] || ''}\n onChange={(e) => setAdditionalData(prev => ({ ...prev, [field.name]: e.target.value }))}\n className={inputClassName}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n )}\n </div>\n ))}\n </div>\n \n {error && (\n <div style={{\n marginTop: '1rem',\n padding: '0.75rem',\n background: 'rgba(var(--sk-error-rgb, 239,68,68), 0.06)',\n border: '1px solid rgba(var(--sk-error-rgb, 239,68,68), 0.2)',\n borderRadius: '6px',\n color: 'var(--sk-error)',\n fontSize: '0.875rem',\n }}>\n {error}\n </div>\n )}\n \n <button\n type=\"submit\"\n disabled={loading}\n className={buttonClassName}\n style={{\n width: '100%',\n marginTop: '1.5rem',\n padding: '0.875rem',\n fontSize: '1rem',\n fontWeight: 600,\n borderRadius: '8px',\n border: 'none',\n background: loading ? 'var(--sk-primary-hover)' : 'var(--sk-primary)',\n color: 'white',\n cursor: loading ? 'not-allowed' : 'pointer',\n }}\n >\n {loading ? 'Registering...' : submitText}\n </button>\n </form>\n </div>\n )\n}\n\nexport default RegistrationForm\n","/**\n * @sonordev/site-kit/commerce - CalendarView\n * \n * Monthly calendar view for displaying events.\n */\n\n'use client'\n\nimport React, { useEffect, useState, useMemo } from 'react'\nimport type { CommerceOffering, CommerceSchedule } from './types'\nimport { fetchUpcomingEvents } from './api'\nimport { formatTime } from './utils'\n\nexport interface CalendarViewProps {\n /** Pre-loaded events (optional - will fetch if not provided) */\n events?: CommerceOffering[]\n /** Initial month to display (defaults to current) */\n initialDate?: Date\n /** Category filter */\n category?: string\n /** Callback when event is clicked */\n onEventClick?: (event: CommerceOffering, schedule: CommerceSchedule) => void\n /** Callback when day is clicked */\n onDayClick?: (date: Date, events: EventOnDay[]) => void\n /** Show navigation arrows */\n showNavigation?: boolean\n /** Show month/year header */\n showHeader?: boolean\n /** First day of week (0 = Sunday, 1 = Monday) */\n weekStartsOn?: 0 | 1\n /** Minimum date to show */\n minDate?: Date\n /** Maximum date to show */\n maxDate?: Date\n /** How to display events in cells: 'title' = text, 'image' = thumbnail with details on hover */\n eventDisplay?: 'title' | 'image'\n /** Custom class names */\n className?: string\n headerClassName?: string\n dayClassName?: string\n eventClassName?: string\n todayClassName?: string\n}\n\nexport interface EventOnDay {\n event: CommerceOffering\n schedule: CommerceSchedule\n}\n\ninterface DayData {\n date: Date\n isCurrentMonth: boolean\n isToday: boolean\n events: EventOnDay[]\n}\n\nconst DAYS_SHORT = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\nconst MONTHS = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n]\n\nfunction formatDateForTooltip(dateStr: string): string {\n const d = new Date(dateStr)\n return d.toLocaleDateString('en-US', { weekday: 'short', month: 'short', day: 'numeric', year: 'numeric' })\n}\n\nfunction CalendarEventCell({\n item,\n eventDisplay,\n eventClassName,\n onEventClick,\n formatTime,\n}: {\n item: EventOnDay\n eventDisplay: 'title' | 'image'\n eventClassName: string\n onEventClick: (e: React.MouseEvent) => void\n formatTime: (dateStr: string) => string\n}) {\n const [hover, setHover] = React.useState(false)\n const { event, schedule } = item\n const imageUrl = event.featured_image_url\n // Public styling hooks: consuming sites theme chips per category/type via CSS\n // attribute selectors, e.g. .site-kit-calendar-event[data-category=\"pto\"]\n const dataAttrs = {\n 'data-category': event.category?.slug,\n 'data-offering-type': event.type,\n }\n\n if (eventDisplay === 'image') {\n return (\n <div\n className={`site-kit-calendar-event-image-wrapper ${eventClassName}`}\n {...dataAttrs}\n style={{ position: 'relative' }}\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n >\n <button\n onClick={onEventClick}\n className={`site-kit-calendar-event site-kit-calendar-event-image ${eventClassName}`}\n {...dataAttrs}\n style={{\n display: 'block',\n width: '100%',\n height: '28px',\n padding: 0,\n border: 'none',\n borderRadius: '4px',\n cursor: 'pointer',\n overflow: 'hidden',\n background: imageUrl ? 'transparent' : 'rgba(var(--sk-primary-rgb), 0.125)',\n }}\n >\n {imageUrl ? (\n <img\n src={imageUrl}\n alt={event.name}\n style={{\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n }}\n />\n ) : (\n <span style={{\n fontSize: '0.65rem',\n color: 'var(--sk-primary)',\n fontWeight: 500,\n padding: '2px 4px',\n display: 'block',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}>\n {event.name}\n </span>\n )}\n </button>\n {/* Hover tooltip with event details */}\n <div\n className=\"site-kit-calendar-event-tooltip\"\n style={{\n position: 'absolute',\n bottom: '100%',\n left: '50%',\n transform: 'translateX(-50%) translateY(-4px)',\n padding: '8px 12px',\n background: 'var(--sk-text-primary)',\n color: 'var(--sk-bg)',\n borderRadius: '8px',\n fontSize: '0.75rem',\n minWidth: '180px',\n maxWidth: '220px',\n boxShadow: '0 4px 12px rgba(0,0,0,0.2)',\n pointerEvents: 'none',\n opacity: hover ? 1 : 0,\n visibility: hover ? 'visible' : 'hidden',\n transition: 'opacity 0.15s, visibility 0.15s',\n zIndex: 50,\n }}\n >\n <div style={{ fontWeight: 600, marginBottom: '4px' }}>{event.name}</div>\n <div style={{ opacity: 0.9, fontSize: '0.7rem' }}>\n {formatDateForTooltip(schedule.starts_at)} • {formatTime(schedule.starts_at)}\n </div>\n {event.location && (\n <div style={{ opacity: 0.8, fontSize: '0.65rem', marginTop: '2px' }}>{event.location}</div>\n )}\n </div>\n </div>\n )\n }\n\n // Title mode (default fallback)\n return (\n <button\n onClick={onEventClick}\n className={`site-kit-calendar-event ${eventClassName}`}\n {...dataAttrs}\n style={{\n display: 'block',\n width: '100%',\n padding: '2px 4px',\n fontSize: '0.7rem',\n fontWeight: 500,\n textAlign: 'left',\n border: 'none',\n borderRadius: '3px',\n background: 'rgba(var(--sk-primary-rgb), 0.125)',\n color: 'var(--sk-primary)',\n cursor: 'pointer',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n }}\n title={`${event.name} - ${formatTime(schedule.starts_at)}`}\n >\n {event.name}\n </button>\n )\n}\n\nexport function CalendarView({\n events: propEvents,\n initialDate,\n category,\n onEventClick,\n onDayClick,\n showNavigation = true,\n showHeader = true,\n weekStartsOn = 0,\n minDate,\n maxDate,\n eventDisplay = 'image',\n className = '',\n headerClassName = '',\n dayClassName = '',\n eventClassName = '',\n todayClassName = '',\n}: CalendarViewProps) {\n const [currentDate, setCurrentDate] = useState(initialDate || new Date())\n const [events, setEvents] = useState<CommerceOffering[]>(propEvents || [])\n const [loading, setLoading] = useState(!propEvents)\n \n // Fetch events if not provided\n useEffect(() => {\n if (propEvents) {\n setEvents(propEvents)\n return\n }\n \n async function load() {\n setLoading(true)\n try {\n // Fetch events for a reasonable range (6 months)\n const data = await fetchUpcomingEvents({ limit: 100, category })\n setEvents(data)\n } catch (e) {\n console.error('Failed to load events:', e)\n } finally {\n setLoading(false)\n }\n }\n \n load()\n }, [propEvents, category])\n \n // Build calendar grid\n const calendarDays = useMemo(() => {\n const year = currentDate.getFullYear()\n const month = currentDate.getMonth()\n \n // First day of the month\n const firstDay = new Date(year, month, 1)\n // Last day of the month\n const lastDay = new Date(year, month + 1, 0)\n \n // Start from the first day of the week containing the first of the month\n const startDate = new Date(firstDay)\n const dayOfWeek = startDate.getDay()\n const daysToSubtract = (dayOfWeek - weekStartsOn + 7) % 7\n startDate.setDate(startDate.getDate() - daysToSubtract)\n \n // End on the last day of the week containing the last of the month\n const endDate = new Date(lastDay)\n const endDayOfWeek = endDate.getDay()\n const daysToAdd = (6 - endDayOfWeek + weekStartsOn) % 7\n endDate.setDate(endDate.getDate() + daysToAdd)\n \n // Build event lookup by date\n const eventsByDate = new Map<string, EventOnDay[]>()\n \n events.forEach(event => {\n const schedules = event.schedules || []\n schedules.forEach(schedule => {\n const scheduleDate = new Date(schedule.starts_at)\n const dateKey = `${scheduleDate.getFullYear()}-${scheduleDate.getMonth()}-${scheduleDate.getDate()}`\n \n if (!eventsByDate.has(dateKey)) {\n eventsByDate.set(dateKey, [])\n }\n eventsByDate.get(dateKey)!.push({ event, schedule })\n })\n })\n \n // Generate days\n const days: DayData[] = []\n const today = new Date()\n const todayKey = `${today.getFullYear()}-${today.getMonth()}-${today.getDate()}`\n \n const current = new Date(startDate)\n while (current <= endDate) {\n const dateKey = `${current.getFullYear()}-${current.getMonth()}-${current.getDate()}`\n \n days.push({\n date: new Date(current),\n isCurrentMonth: current.getMonth() === month,\n isToday: dateKey === todayKey,\n events: eventsByDate.get(dateKey) || [],\n })\n \n current.setDate(current.getDate() + 1)\n }\n \n return days\n }, [currentDate, events, weekStartsOn])\n \n // Navigation\n const goToPreviousMonth = () => {\n const newDate = new Date(currentDate)\n newDate.setMonth(newDate.getMonth() - 1)\n if (!minDate || newDate >= minDate) {\n setCurrentDate(newDate)\n }\n }\n \n const goToNextMonth = () => {\n const newDate = new Date(currentDate)\n newDate.setMonth(newDate.getMonth() + 1)\n if (!maxDate || newDate <= maxDate) {\n setCurrentDate(newDate)\n }\n }\n \n const goToToday = () => {\n setCurrentDate(new Date())\n }\n \n // Day headers adjusted for week start\n const dayHeaders = weekStartsOn === 1\n ? [...DAYS_SHORT.slice(1), DAYS_SHORT[0]]\n : DAYS_SHORT\n \n const handleEventClick = (e: React.MouseEvent, event: CommerceOffering, schedule: CommerceSchedule) => {\n e.stopPropagation()\n if (onEventClick) {\n onEventClick(event, schedule)\n } else {\n window.location.href = `/events/${event.slug}`\n }\n }\n \n const handleDayClick = (day: DayData) => {\n if (onDayClick) {\n onDayClick(day.date, day.events)\n }\n }\n \n return (\n <div className={`site-kit-calendar ${className}`} style={{\n background: 'var(--sk-bg)',\n borderRadius: '12px',\n overflow: 'hidden',\n boxShadow: '0 1px 3px rgba(0,0,0,0.1)',\n }}>\n {/* Header */}\n {showHeader && (\n <div \n className={`site-kit-calendar-header ${headerClassName}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '1rem 1.25rem',\n borderBottom: '1px solid var(--sk-border)',\n }}\n >\n {showNavigation && (\n <button\n onClick={goToPreviousMonth}\n style={{\n padding: '0.5rem',\n border: 'none',\n background: 'var(--sk-surface)',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '1.25rem',\n lineHeight: 1,\n }}\n aria-label=\"Previous month\" data-sk-part=\"calendar-nav-prev\"\n >\n ←\n </button>\n )}\n \n <div style={{ textAlign: 'center' }}>\n <h2 data-sk-part=\"calendar-month-title\" style={{ margin: 0, fontSize: '1.25rem', fontWeight: 600 }}>\n {MONTHS[currentDate.getMonth()]} {currentDate.getFullYear()}\n </h2>\n {showNavigation && (\n <button\n onClick={goToToday}\n style={{\n marginTop: '0.25rem',\n padding: '0.25rem 0.5rem',\n fontSize: '0.75rem',\n border: 'none',\n background: 'transparent',\n color: 'var(--sk-primary)',\n cursor: 'pointer',\n }}\n >\n Today\n </button>\n )}\n </div>\n \n {showNavigation && (\n <button\n onClick={goToNextMonth}\n style={{\n padding: '0.5rem',\n border: 'none',\n background: 'var(--sk-surface)',\n borderRadius: '6px',\n cursor: 'pointer',\n fontSize: '1.25rem',\n lineHeight: 1,\n }}\n aria-label=\"Next month\" data-sk-part=\"calendar-nav-next\"\n >\n →\n </button>\n )}\n </div>\n )}\n \n {/* Day headers */}\n <div style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n borderBottom: '1px solid var(--sk-border)',\n }}>\n {dayHeaders.map(day => (\n <div\n key={day}\n style={{\n padding: '0.75rem 0.5rem',\n textAlign: 'center',\n fontSize: '0.75rem',\n fontWeight: 600,\n color: 'var(--sk-text-secondary)',\n textTransform: 'uppercase',\n }}\n >\n {day}\n </div>\n ))}\n </div>\n \n {/* Calendar grid */}\n <div style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n }}>\n {calendarDays.map((day, index) => (\n <div\n key={index}\n onClick={() => handleDayClick(day)}\n className={`site-kit-calendar-day ${dayClassName} ${day.isToday ? `site-kit-calendar-today ${todayClassName}` : ''}`}\n style={{\n minHeight: '100px',\n padding: '0.5rem',\n borderRight: (index + 1) % 7 !== 0 ? '1px solid var(--sk-border)' : 'none',\n borderBottom: '1px solid var(--sk-border)',\n background: day.isCurrentMonth ? 'var(--sk-bg)' : 'var(--sk-bg-elevated)',\n cursor: day.events.length > 0 || onDayClick ? 'pointer' : 'default',\n }}\n >\n <div style={{\n display: 'flex',\n justifyContent: 'flex-end',\n marginBottom: '0.25rem',\n }}>\n <span style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '28px',\n height: '28px',\n borderRadius: '50%',\n fontSize: '0.875rem',\n fontWeight: day.isToday ? 600 : 400,\n color: day.isToday ? 'var(--sk-bg)' : (day.isCurrentMonth ? 'var(--sk-text-primary)' : 'var(--sk-text-secondary)'),\n background: day.isToday ? 'var(--sk-primary)' : 'transparent',\n }}>\n {day.date.getDate()}\n </span>\n </div>\n \n {/* Events */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '2px' }}>\n {day.events.slice(0, 3).map((item) => (\n <CalendarEventCell\n key={`${item.event.id}-${item.schedule.id}`}\n item={item}\n eventDisplay={eventDisplay}\n eventClassName={eventClassName}\n onEventClick={(e) => handleEventClick(e, item.event, item.schedule)}\n formatTime={formatTime}\n />\n ))}\n {day.events.length > 3 && (\n <span style={{\n fontSize: '0.65rem',\n color: 'var(--sk-text-secondary)',\n textAlign: 'center',\n }}>\n +{day.events.length - 3} more\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n \n {loading && (\n <div style={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'rgba(255,255,255,0.8)',\n }}>\n Loading...\n </div>\n )}\n </div>\n )\n}\n\nexport default CalendarView\n","/**\n * EventsAgenda — month-grouped event list (the Ludlow calendar generalized).\n *\n * For sparse community/event calendars an agenda reads far better than a\n * month grid, especially on phones — this is the layout Ludlow PTO shipped\n * after forking the grid. Headless-first: every element carries\n * data-sk-part, rows carry data-category / data-offering-type (same contract\n * as CalendarView chips), so two-scheme coloring is site CSS:\n *\n * [data-sk-part=\"agenda-date\"][data-category=\"pto\"] { background: red }\n *\n * Handles what the grid historically couldn't: multi-day ranges (an event\n * appears once per month it overlaps, \"Sep 21-25\"), and all-day events\n * (schedule.all_day when the API provides it, falling back to the\n * offering-level metadata.all_day convention).\n *\n * No hooks, no browser APIs — renders fully at SSR. Interactivity\n * (filter pills etc.) belongs to the site around it.\n */\n\nimport React from 'react'\nimport type { CommerceOffering, CommerceSchedule } from './types'\n\nexport interface AgendaItem {\n offering: CommerceOffering\n schedule: CommerceSchedule\n}\n\nexport interface EventsAgendaProps {\n events: CommerceOffering[]\n /** IANA zone for grouping/formatting. Default: each schedule's own timezone, else UTC. */\n timeZone?: string\n locale?: string\n /** Hide events that already ended. Default true. */\n upcomingOnly?: boolean\n className?: string\n emptyLabel?: string\n /** Replace a row's meta line (time · location · blurb). */\n renderMeta?: (item: AgendaItem) => React.ReactNode\n}\n\ninterface Parts {\n y: number\n m: number\n d: number\n}\n\nfunction isAllDay(offering: CommerceOffering, schedule: CommerceSchedule): boolean {\n const sched = schedule as CommerceSchedule & { all_day?: boolean }\n if (typeof sched.all_day === 'boolean') return sched.all_day\n return Boolean((offering.metadata as { all_day?: boolean } | undefined)?.all_day)\n}\n\nfunction zoneFor(schedule: CommerceSchedule, override?: string): string {\n return override || (schedule as CommerceSchedule & { timezone?: string }).timezone || 'UTC'\n}\n\nfunction dateParts(iso: string, timeZone: string): Parts {\n const [y, m, d] = new Intl.DateTimeFormat('en-CA', {\n timeZone,\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n })\n .format(new Date(iso))\n .split('-')\n .map(Number)\n return { y, m, d }\n}\n\nfunction fmt(iso: string, timeZone: string, locale: string, opts: Intl.DateTimeFormatOptions): string {\n return new Intl.DateTimeFormat(locale, { timeZone, ...opts }).format(new Date(iso))\n}\n\n/** \"Aug 26\" / \"Sep 21-25\" / \"Dec 21 - Jan 1\" */\nfunction span(item: AgendaItem, timeZone: string, locale: string): string {\n const start = fmt(item.schedule.starts_at, timeZone, locale, { month: 'short', day: 'numeric' })\n const endsAt = item.schedule.ends_at\n if (!endsAt) return start\n const end = fmt(endsAt, timeZone, locale, { month: 'short', day: 'numeric' })\n if (end === start) return start\n const sameMonth = start.split(' ')[0] === end.split(' ')[0]\n return sameMonth ? `${start}-${end.split(' ')[1]}` : `${start} - ${end}`\n}\n\nexport function EventsAgenda({\n events,\n timeZone,\n locale = 'en-US',\n upcomingOnly = true,\n className,\n emptyLabel = 'Nothing scheduled yet. Check back soon.',\n renderMeta,\n}: EventsAgendaProps) {\n const now = Date.now()\n\n const items: AgendaItem[] = []\n for (const offering of events) {\n for (const schedule of offering.schedules || []) {\n const end = new Date(schedule.ends_at || schedule.starts_at).getTime()\n if (upcomingOnly && end < now) continue\n items.push({ offering, schedule })\n }\n }\n items.sort((a, b) => a.schedule.starts_at.localeCompare(b.schedule.starts_at))\n\n // Group by every month an item OVERLAPS (a Dec 21 - Jan 1 break shows in both).\n const months = new Map<string, { label: string; items: AgendaItem[] }>()\n for (const item of items) {\n const zone = zoneFor(item.schedule, timeZone)\n const start = dateParts(item.schedule.starts_at, zone)\n const end = item.schedule.ends_at ? dateParts(item.schedule.ends_at, zone) : start\n for (let idx = start.y * 12 + start.m - 1; idx <= end.y * 12 + end.m - 1; idx++) {\n const y = Math.floor(idx / 12)\n const m = (idx % 12) + 1\n const key = `${y}-${String(m).padStart(2, '0')}`\n if (!months.has(key)) {\n const label = new Intl.DateTimeFormat(locale, {\n timeZone: zone,\n month: 'long',\n year: 'numeric',\n }).format(new Date(Date.UTC(y, m - 1, 15)))\n months.set(key, { label, items: [] })\n }\n months.get(key)!.items.push(item)\n }\n }\n\n if (items.length === 0) {\n return (\n <div className={className} data-sk-part=\"agenda\">\n <p data-sk-part=\"agenda-empty\">{emptyLabel}</p>\n </div>\n )\n }\n\n return (\n <div className={className} data-sk-part=\"agenda\">\n {[...months.entries()]\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, month]) => (\n <section key={key} data-sk-part=\"agenda-month\" aria-label={month.label}>\n <h3 data-sk-part=\"agenda-month-title\">{month.label}</h3>\n {month.items.map(item => {\n const zone = zoneFor(item.schedule, timeZone)\n const allDay = isAllDay(item.offering, item.schedule)\n const category = item.offering.category?.slug\n return (\n <div\n key={`${key}-${item.offering.id}-${item.schedule.id}`}\n data-sk-part=\"agenda-row\"\n {...(category ? { 'data-category': category } : {})}\n data-offering-type={item.offering.type}\n >\n <div\n data-sk-part=\"agenda-date\"\n {...(category ? { 'data-category': category } : {})}\n >\n <span data-sk-part=\"agenda-weekday\">\n {fmt(item.schedule.starts_at, zone, locale, { weekday: 'short' })}\n </span>\n <span data-sk-part=\"agenda-span\">{span(item, zone, locale)}</span>\n </div>\n <div data-sk-part=\"agenda-body\">\n <p data-sk-part=\"agenda-name\">{item.offering.name}</p>\n <p data-sk-part=\"agenda-meta\">\n {renderMeta\n ? renderMeta(item)\n : [\n allDay\n ? null\n : fmt(item.schedule.starts_at, zone, locale, {\n hour: 'numeric',\n minute: '2-digit',\n }).replace(':00', ''),\n item.offering.location,\n item.offering.short_description,\n ]\n .filter(Boolean)\n .join(' · ')}\n </p>\n </div>\n </div>\n )\n })}\n </section>\n ))}\n </div>\n )\n}\n","/**\n * @sonordev/site-kit/commerce - EventModal\n * \n * Modal popup for event registration and checkout.\n * Handles both free registration and paid tickets via Stripe/Square.\n */\n\n'use client'\n\nimport React, { useState, useEffect, useCallback, useRef } from 'react'\nimport type { CommerceOffering, CommerceSchedule, CheckoutCustomer, CheckoutResult } from './types'\nimport type { ProcessorConfig } from './api'\nimport { registerForEvent, createCheckoutSession, fetchProcessorConfig } from './api'\n\nfunction loadSquareSDK(environment: string): Promise<void> {\n return new Promise((resolve, reject) => {\n if (typeof window === 'undefined') return reject(new Error('No window'))\n if ((window as any).Square) return resolve()\n const script = document.createElement('script')\n script.src = environment === 'sandbox'\n ? 'https://sandbox.web.squarecdn.com/v1/square.js'\n : 'https://web.squarecdn.com/v1/square.js'\n script.onload = () => resolve()\n script.onerror = () => reject(new Error('Failed to load Square SDK'))\n document.head.appendChild(script)\n })\n}\nimport { formatDate, formatTime, formatPrice, getSpotsRemaining, isEventSoldOut } from './utils'\n\nexport interface EventModalProps {\n /** Event to display */\n event: CommerceOffering | null\n /** Specific schedule (optional - uses first upcoming if not provided) */\n schedule?: CommerceSchedule | null\n /** Whether modal is open */\n isOpen: boolean\n /** Close modal callback */\n onClose: () => void\n /** Success callback */\n onSuccess?: (result: CheckoutResult) => void\n /** Error callback */\n onError?: (error: string) => void\n /** Collect phone number */\n collectPhone?: boolean\n /** Additional form fields */\n additionalFields?: AdditionalField[]\n /** Custom class names */\n className?: string\n overlayClassName?: string\n contentClassName?: string\n}\n\nexport interface AdditionalField {\n name: string\n label: string\n type?: 'text' | 'email' | 'tel' | 'textarea' | 'select' | 'number'\n required?: boolean\n placeholder?: string\n options?: { value: string; label: string }[]\n}\n\nexport function EventModal({\n event,\n schedule: propSchedule,\n isOpen,\n onClose,\n onSuccess,\n onError,\n collectPhone = false,\n additionalFields = [],\n className = '',\n overlayClassName = '',\n contentClassName = '',\n}: EventModalProps) {\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [success, setSuccess] = useState(false)\n const [quantity, setQuantity] = useState(1)\n \n const [customer, setCustomer] = useState<CheckoutCustomer>({\n email: '',\n name: '',\n phone: '',\n })\n \n const [additionalData, setAdditionalData] = useState<Record<string, string>>({})\n const [processor, setProcessor] = useState<'stripe' | 'square' | null>(null)\n const [processorConfig, setProcessorConfig] = useState<ProcessorConfig | null>(null)\n const [squareCard, setSquareCard] = useState<any>(null)\n const [cardReady, setCardReady] = useState(false)\n const cardContainerRef = useRef<HTMLDivElement>(null)\n\n // Get schedule\n const schedule = propSchedule || event?.schedules?.[0] || (event as any)?.next_schedule\n \n // Fetch processor config when modal opens for a paid event, then mount Square card element\n useEffect(() => {\n if (!isOpen) return\n\n fetchProcessorConfig().then(async (config) => {\n setProcessorConfig(config)\n if (config?.processor) setProcessor(config.processor)\n\n if (config?.processor === 'square' && config.squareAppId && config.squareLocationId) {\n try {\n await loadSquareSDK(config.squareEnvironment || 'production')\n const Square = (window as any).Square\n const payments = Square.payments(config.squareAppId, config.squareLocationId)\n const card = await payments.card({\n style: {\n '.input-container': {\n borderColor: '#d1d5db',\n borderRadius: '6px',\n },\n '.input-container.is-focus': {\n borderColor: '#2563eb',\n },\n '.input-container.is-error': {\n borderColor: '#dc2626',\n },\n },\n })\n await card.attach('#sq-card-container')\n setSquareCard(card)\n setCardReady(true)\n } catch (err) {\n console.error('[Commerce] Square card init failed:', err)\n }\n }\n })\n\n return () => {\n // Destroy card element on close so it re-mounts cleanly next time\n setSquareCard((prev: any) => {\n if (prev) {\n prev.destroy?.().catch(() => {})\n }\n return null\n })\n setCardReady(false)\n setProcessorConfig(null)\n }\n }, [isOpen])\n\n // Reset state when modal opens with new event\n useEffect(() => {\n if (isOpen && event) {\n setError(null)\n setSuccess(false)\n setQuantity(1)\n setCustomer({ email: '', name: '', phone: '' })\n setAdditionalData({})\n }\n }, [isOpen, event?.id])\n \n // Handle escape key\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose()\n }\n }\n \n document.addEventListener('keydown', handleEscape)\n return () => document.removeEventListener('keydown', handleEscape)\n }, [isOpen, onClose])\n \n // Prevent body scroll when open\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = ''\n }\n return () => {\n document.body.style.overflow = ''\n }\n }, [isOpen])\n \n const handleOverlayClick = useCallback((e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n onClose()\n }\n }, [onClose])\n \n if (!isOpen || !event) return null\n \n const isFree = !event.price || event.price === 0\n const soldOut = schedule ? isEventSoldOut(schedule.capacity, schedule.current_registrations) : false\n const spotsRemaining = schedule ? getSpotsRemaining(schedule.capacity, schedule.current_registrations) : null\n const total = event.price ? event.price * quantity : 0\n \n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n \n if (!schedule) {\n setError('No schedule available for this event')\n return\n }\n \n setLoading(true)\n setError(null)\n \n try {\n if (isFree) {\n // Free event registration\n const result = await registerForEvent(event.id, schedule.id, {\n ...customer,\n ...additionalData,\n })\n \n if (result.success) {\n setSuccess(true)\n onSuccess?.(result)\n } else {\n setError(result.error || 'Registration failed')\n onError?.(result.error || 'Registration failed')\n }\n } else {\n // Paid checkout — inline card if Square card is mounted, otherwise redirect\n let sourceId: string | undefined\n\n if (squareCard && cardReady) {\n const tokenResult = await squareCard.tokenize()\n if (tokenResult.status !== 'OK') {\n const msg = tokenResult.errors?.[0]?.message || 'Card verification failed. Please check your card details.'\n setError(msg)\n onError?.(msg)\n setLoading(false)\n return\n }\n sourceId = tokenResult.token\n }\n\n const result = await createCheckoutSession({\n offeringId: event.id,\n scheduleId: schedule.id,\n quantity,\n customer: {\n ...customer,\n ...additionalData,\n },\n sourceId,\n successUrl: window.location.href + '?registration=success',\n cancelUrl: window.location.href,\n })\n\n if (result.success && !result.payment_url) {\n // Inline payment completed — no redirect needed\n setSuccess(true)\n onSuccess?.(result)\n } else if (result.success && result.payment_url) {\n // Fallback: redirect to hosted payment page\n window.location.href = result.payment_url\n } else {\n setError(result.error || 'Checkout failed')\n onError?.(result.error || 'Checkout failed')\n }\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : 'An error occurred'\n setError(message)\n onError?.(message)\n } finally {\n setLoading(false)\n }\n }\n \n const updateCustomer = (field: keyof CheckoutCustomer, value: string) => {\n setCustomer(prev => ({ ...prev, [field]: value }))\n }\n \n return (\n <div\n className={`site-kit-modal-overlay ${overlayClassName}`}\n onClick={handleOverlayClick}\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 9999,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '1rem',\n background: 'rgba(0, 0, 0, 0.5)',\n backdropFilter: 'blur(4px)',\n }}\n >\n <div\n className={`site-kit-modal ${className}`}\n style={{\n position: 'relative',\n width: '100%',\n maxWidth: '500px',\n maxHeight: '90vh',\n overflow: 'auto',\n background: 'var(--sk-bg)',\n borderRadius: '16px',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n }}\n onClick={e => e.stopPropagation()}\n >\n {/* Close button */}\n <button\n onClick={onClose}\n style={{\n position: 'absolute',\n top: '1rem',\n right: '1rem',\n padding: '0.5rem',\n border: 'none',\n background: 'var(--sk-surface)',\n borderRadius: '50%',\n cursor: 'pointer',\n fontSize: '1.25rem',\n lineHeight: 1,\n width: '36px',\n height: '36px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10,\n }}\n aria-label=\"Close\"\n >\n ×\n </button>\n \n {/* Event header */}\n {event.featured_image_url && (\n <div style={{ position: 'relative' }}>\n <img\n src={event.featured_image_url}\n alt={event.name}\n style={{\n width: '100%',\n height: '180px',\n objectFit: 'cover',\n borderRadius: '16px 16px 0 0',\n }}\n />\n {soldOut && (\n <div style={{\n position: 'absolute',\n top: '1rem',\n left: '1rem',\n background: 'var(--sk-error)',\n color: 'var(--sk-bg)',\n padding: '0.25rem 0.75rem',\n borderRadius: '4px',\n fontSize: '0.875rem',\n fontWeight: 600,\n }}>\n Sold Out\n </div>\n )}\n </div>\n )}\n \n <div className={`site-kit-modal-content ${contentClassName}`} style={{ padding: '1.5rem' }}>\n {/* Success state */}\n {success ? (\n <div style={{ textAlign: 'center', padding: '2rem 0' }}>\n <div style={{ fontSize: '4rem', marginBottom: '1rem' }}>🎉</div>\n <h2 style={{ margin: '0 0 0.5rem', color: 'var(--sk-success)' }}>\n You're Registered!\n </h2>\n <p style={{ color: 'var(--sk-success)', margin: '0 0 1.5rem' }}>\n Check your email for confirmation details.\n </p>\n <button\n onClick={onClose}\n style={{\n padding: '0.75rem 2rem',\n fontSize: '1rem',\n fontWeight: 500,\n border: 'none',\n borderRadius: '8px',\n background: 'var(--sk-primary)',\n color: 'var(--sk-bg)',\n cursor: 'pointer',\n }}\n >\n Done\n </button>\n </div>\n ) : (\n <>\n {/* Event info */}\n <div style={{ marginBottom: '1.5rem' }}>\n <h2 style={{ margin: '0 0 0.5rem', fontSize: '1.5rem', fontWeight: 600, paddingRight: '2rem' }}>\n {event.name}\n </h2>\n \n {schedule && (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '1rem', color: 'var(--sk-text-secondary)', fontSize: '0.9rem' }}>\n <span>📅 {formatDate(schedule.starts_at)}</span>\n <span>🕐 {formatTime(schedule.starts_at)}</span>\n {event.location && <span>📍 {event.location}</span>}\n </div>\n )}\n \n {event.short_description && (\n <p style={{ margin: '0.75rem 0 0', color: 'var(--sk-text-secondary)', fontSize: '0.9rem' }}>\n {event.short_description}\n </p>\n )}\n \n {/* Capacity warning */}\n {spotsRemaining !== null && spotsRemaining <= 10 && spotsRemaining > 0 && (\n <div style={{\n marginTop: '0.75rem',\n padding: '0.5rem 0.75rem',\n background: 'rgba(var(--sk-warning-rgb, 245,158,11), 0.1)',\n borderRadius: '6px',\n color: 'var(--sk-warning)',\n fontSize: '0.875rem',\n }}>\n ⚠️ Only {spotsRemaining} spot{spotsRemaining > 1 ? 's' : ''} remaining!\n </div>\n )}\n </div>\n \n {soldOut ? (\n <div style={{\n padding: '2rem',\n textAlign: 'center',\n background: 'var(--sk-surface)',\n borderRadius: '8px',\n }}>\n <p style={{ margin: 0, color: 'var(--sk-text-secondary)' }}>\n This event is sold out. Check back for future dates!\n </p>\n </div>\n ) : (\n <form onSubmit={handleSubmit}>\n {/* Price / Quantity */}\n {!isFree && event.price_is_public && (\n <div style={{\n padding: '1rem',\n background: 'var(--sk-bg-elevated)',\n borderRadius: '8px',\n marginBottom: '1rem',\n }}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>\n <div>\n <span style={{ fontWeight: 600, fontSize: '1.25rem' }}>\n {formatPrice(event.price!, event.currency)}\n </span>\n <span style={{ color: 'var(--sk-text-secondary)', fontSize: '0.875rem' }}> per ticket</span>\n </div>\n \n <div style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n <label style={{ fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>Qty:</label>\n <select\n value={quantity}\n onChange={(e) => setQuantity(Number(e.target.value))}\n style={{\n padding: '0.5rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n background: 'var(--sk-bg)',\n fontSize: '1rem',\n }}\n >\n {[...Array(Math.min(10, spotsRemaining || 10))].map((_, i) => (\n <option key={i + 1} value={i + 1}>{i + 1}</option>\n ))}\n </select>\n </div>\n </div>\n \n {quantity > 1 && (\n <div style={{ \n marginTop: '0.75rem', \n paddingTop: '0.75rem', \n borderTop: '1px solid var(--sk-border)',\n display: 'flex',\n justifyContent: 'space-between',\n }}>\n <span style={{ fontWeight: 500 }}>Total</span>\n <span style={{ fontWeight: 600, fontSize: '1.125rem' }}>\n {formatPrice(total, event.currency)}\n </span>\n </div>\n )}\n </div>\n )}\n \n {/* Customer info */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '0.875rem' }}>\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Full Name *\n </label>\n <input\n type=\"text\"\n required\n value={customer.name}\n onChange={(e) => updateCustomer('name', e.target.value)}\n placeholder=\"John Smith\"\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n \n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Email Address *\n </label>\n <input\n type=\"email\"\n required\n value={customer.email}\n onChange={(e) => updateCustomer('email', e.target.value)}\n placeholder=\"john@example.com\"\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n \n {collectPhone && (\n <div>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n Phone Number\n </label>\n <input\n type=\"tel\"\n value={customer.phone || ''}\n onChange={(e) => updateCustomer('phone', e.target.value)}\n placeholder=\"(555) 123-4567\"\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n </div>\n )}\n \n {/* Additional fields */}\n {additionalFields.map(field => (\n <div key={field.name}>\n <label style={{ display: 'block', fontSize: '0.875rem', fontWeight: 500, marginBottom: '0.25rem' }}>\n {field.label} {field.required && '*'}\n </label>\n {field.type === 'textarea' ? (\n <textarea\n required={field.required}\n placeholder={field.placeholder}\n value={additionalData[field.name] || ''}\n onChange={(e) => setAdditionalData(prev => ({ ...prev, [field.name]: e.target.value }))}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n minHeight: '80px',\n resize: 'vertical',\n }}\n />\n ) : field.type === 'select' && field.options ? (\n <select\n required={field.required}\n value={additionalData[field.name] || ''}\n onChange={(e) => setAdditionalData(prev => ({ ...prev, [field.name]: e.target.value }))}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n background: 'var(--sk-bg)',\n }}\n >\n <option value=\"\">Select...</option>\n {field.options.map(opt => (\n <option key={opt.value} value={opt.value}>{opt.label}</option>\n ))}\n </select>\n ) : (\n <input\n type={field.type || 'text'}\n required={field.required}\n placeholder={field.placeholder}\n value={additionalData[field.name] || ''}\n onChange={(e) => setAdditionalData(prev => ({ ...prev, [field.name]: e.target.value }))}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n borderRadius: '6px',\n border: '1px solid var(--sk-border)',\n fontSize: '1rem',\n }}\n />\n )}\n </div>\n ))}\n </div>\n \n {/* Inline Square card element */}\n {!isFree && processor === 'square' && (\n <div style={{ marginTop: '1rem' }}>\n <label style={{\n display: 'block',\n fontSize: '0.875rem',\n fontWeight: 500,\n color: 'var(--sk-text-primary)',\n marginBottom: '0.375rem',\n }}>\n Card Details *\n </label>\n <div\n id=\"sq-card-container\"\n ref={cardContainerRef}\n style={{\n minHeight: '42px',\n border: '1px solid var(--sk-border)',\n borderRadius: '6px',\n padding: '0.5rem 0.75rem',\n background: 'var(--sk-bg)',\n }}\n />\n {!cardReady && (\n <p style={{ fontSize: '0.75rem', color: 'var(--sk-text-secondary)', marginTop: '0.25rem' }}>\n Loading card form...\n </p>\n )}\n </div>\n )}\n\n {error && (\n <div style={{\n marginTop: '1rem',\n padding: '0.75rem',\n background: 'rgba(var(--sk-error-rgb, 239,68,68), 0.06)',\n border: '1px solid rgba(var(--sk-error-rgb, 239,68,68), 0.2)',\n borderRadius: '6px',\n color: 'var(--sk-error)',\n fontSize: '0.875rem',\n }}>\n {error}\n </div>\n )}\n \n <button\n type=\"submit\"\n disabled={loading || (!isFree && processor === 'square' && !cardReady)}\n style={{\n width: '100%',\n marginTop: '1.25rem',\n padding: '0.875rem',\n fontSize: '1rem',\n fontWeight: 600,\n borderRadius: '8px',\n border: 'none',\n background: (loading || (!isFree && processor === 'square' && !cardReady)) ? 'var(--sk-primary-hover)' : 'var(--sk-primary)',\n color: 'var(--sk-bg)',\n cursor: (loading || (!isFree && processor === 'square' && !cardReady)) ? 'not-allowed' : 'pointer',\n }}\n >\n {loading ? 'Processing...' : (\n isFree ? 'Register Free' : `Pay ${formatPrice(total, event.currency)}`\n )}\n </button>\n \n {!isFree && (\n <p style={{ \n textAlign: 'center', \n fontSize: '0.75rem', \n color: 'var(--sk-text-secondary)',\n margin: '0.75rem 0 0',\n }}>\n 🔒 Secure checkout via {processor === 'square' ? 'Square' : processor === 'stripe' ? 'Stripe' : 'secure payment'}\n </p>\n )}\n {!isFree && processor && (\n <p style={{ fontSize: '0.625rem', color: 'var(--sk-text-secondary)', margin: '0.25rem 0 0', textAlign: 'center' }}>\n Powered by {processor === 'stripe' ? 'Stripe' : 'Square'}\n </p>\n )}\n </form>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nexport default EventModal\n","/**\n * @sonordev/site-kit/commerce - useEventModal hook\n * \n * Hook for managing event modal state.\n */\n\n'use client'\n\nimport { useState, useCallback } from 'react'\nimport type { CommerceOffering, CommerceSchedule } from './types'\n\nexport interface UseEventModalReturn {\n /** Currently selected event */\n event: CommerceOffering | null\n /** Currently selected schedule */\n schedule: CommerceSchedule | null\n /** Whether modal is open */\n isOpen: boolean\n /** Open modal with event */\n openModal: (event: CommerceOffering, schedule?: CommerceSchedule) => void\n /** Close modal */\n closeModal: () => void\n}\n\nexport function useEventModal(): UseEventModalReturn {\n const [event, setEvent] = useState<CommerceOffering | null>(null)\n const [schedule, setSchedule] = useState<CommerceSchedule | null>(null)\n const [isOpen, setIsOpen] = useState(false)\n \n const openModal = useCallback((newEvent: CommerceOffering, newSchedule?: CommerceSchedule) => {\n setEvent(newEvent)\n setSchedule(newSchedule || newEvent.schedules?.[0] || null)\n setIsOpen(true)\n }, [])\n \n const closeModal = useCallback(() => {\n setIsOpen(false)\n // Delay clearing event data for exit animation\n setTimeout(() => {\n setEvent(null)\n setSchedule(null)\n }, 200)\n }, [])\n \n return {\n event,\n schedule,\n isOpen,\n openModal,\n closeModal,\n }\n}\n\nexport default useEventModal\n","/**\n * @sonordev/site-kit/commerce - EventCalendar\n * \n * Calendar view with built-in registration modal.\n * Clicking an event opens a popup for registration/checkout.\n */\n\n'use client'\n\nimport React from 'react'\nimport type { CommerceOffering, CommerceSchedule, CheckoutResult } from './types'\nimport type { CalendarViewProps } from './CalendarView'\nimport type { AdditionalField } from './EventModal'\nimport { CalendarView } from './CalendarView'\nimport { EventModal } from './EventModal'\nimport { useEventModal } from './useEventModal'\n\nexport interface EventCalendarProps extends Omit<CalendarViewProps, 'onEventClick'> {\n /** Callback when registration/checkout succeeds */\n onRegistrationSuccess?: (result: CheckoutResult) => void\n /** Callback when registration/checkout fails */\n onRegistrationError?: (error: string) => void\n /** Collect phone number in registration form */\n collectPhone?: boolean\n /** Additional form fields for registration */\n additionalFields?: AdditionalField[]\n /** Custom modal class names */\n modalClassName?: string\n modalOverlayClassName?: string\n modalContentClassName?: string\n}\n\nexport function EventCalendar({\n onRegistrationSuccess,\n onRegistrationError,\n collectPhone = false,\n additionalFields = [],\n modalClassName,\n modalOverlayClassName,\n modalContentClassName,\n ...calendarProps\n}: EventCalendarProps) {\n const { event, schedule, isOpen, openModal, closeModal } = useEventModal()\n \n const handleEventClick = (clickedEvent: CommerceOffering, clickedSchedule: CommerceSchedule) => {\n openModal(clickedEvent, clickedSchedule)\n }\n \n const handleSuccess = (result: CheckoutResult) => {\n onRegistrationSuccess?.(result)\n // Keep modal open to show success state\n }\n \n const handleError = (error: string) => {\n onRegistrationError?.(error)\n }\n \n return (\n <>\n <CalendarView\n {...calendarProps}\n onEventClick={handleEventClick}\n />\n \n <EventModal\n event={event}\n schedule={schedule}\n isOpen={isOpen}\n onClose={closeModal}\n onSuccess={handleSuccess}\n onError={handleError}\n collectPhone={collectPhone}\n additionalFields={additionalFields}\n className={modalClassName}\n overlayClassName={modalOverlayClassName}\n contentClassName={modalContentClassName}\n />\n </>\n )\n}\n\nexport default EventCalendar\n","/**\n * @sonordev/site-kit/commerce - EventsWidget\n * \n * Comprehensive events widget with calendar/list toggle and integrated booking.\n * Plug-and-play component for displaying commerce events.\n * \n * @example\n * ```tsx\n * // Basic usage - automatically fetches events\n * <EventsWidget />\n * \n * // With calendar view as default\n * <EventsWidget defaultView=\"calendar\" />\n * \n * // Custom styling\n * <EventsWidget\n * className=\"my-events-section\"\n * title=\"Upcoming Events\"\n * showViewToggle={true}\n * onRegistrationSuccess={(result) => console.log('Registered!', result)}\n * />\n * ```\n */\n\n'use client'\n\nimport React, { useState, useEffect, useCallback } from 'react'\nimport type { CommerceOffering, CommerceSchedule, CheckoutResult } from './types'\nimport { sonorFetch } from '../shared/sonorFetch'\nimport { CalendarView } from './CalendarView'\nimport { EventModal } from './EventModal'\nimport { useEventModal } from './useEventModal'\nimport { formatDate, formatTime, formatPrice } from './utils'\n\nexport type EventsViewMode = 'list' | 'grid' | 'calendar'\n\nexport interface EventsWidgetProps {\n /** Pre-loaded events (optional - will fetch if not provided) */\n events?: CommerceOffering[]\n /** Initial view mode */\n defaultView?: EventsViewMode\n /** Which view modes to show in the toggle (e.g. ['list', 'grid'] when calendar is embedded above) */\n availableViews?: EventsViewMode[]\n /** Show view toggle buttons */\n showViewToggle?: boolean\n /** Section title */\n title?: string\n /** Subtitle or description */\n subtitle?: string\n /** Category filter */\n category?: string\n /** Maximum events to show in list view */\n limit?: number\n /** Show \"View All\" link */\n showViewAll?: boolean\n /** URL for \"View All\" link */\n viewAllUrl?: string\n /** Text for \"View All\" link */\n viewAllText?: string\n /** Message when no events */\n emptyMessage?: string\n /** Show empty state with icon */\n showEmptyIcon?: boolean\n \n // Registration options\n /** Collect phone number in registration */\n collectPhone?: boolean\n /** Additional form fields */\n additionalFields?: AdditionalField[]\n \n // Callbacks\n /** Called when registration/checkout succeeds */\n onRegistrationSuccess?: (result: CheckoutResult) => void\n /** Called when registration/checkout fails */\n onRegistrationError?: (error: string) => void\n /** Called when event is clicked (before modal opens) */\n onEventClick?: (event: CommerceOffering, schedule: CommerceSchedule) => void\n \n // Styling\n className?: string\n headerClassName?: string\n toggleClassName?: string\n listClassName?: string\n calendarClassName?: string\n eventCardClassName?: string\n modalClassName?: string\n}\n\nexport interface AdditionalField {\n name: string\n label: string\n type?: 'text' | 'email' | 'tel' | 'textarea' | 'select' | 'number'\n required?: boolean\n placeholder?: string\n options?: { value: string; label: string }[]\n}\n\n// Icons\nconst CalendarIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect>\n <line x1=\"16\" y1=\"2\" x2=\"16\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"10\" x2=\"21\" y2=\"10\"></line>\n </svg>\n)\n\nconst ListIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\"></line>\n <line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\"></line>\n <line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\"></line>\n <line x1=\"3\" y1=\"6\" x2=\"3.01\" y2=\"6\"></line>\n <line x1=\"3\" y1=\"12\" x2=\"3.01\" y2=\"12\"></line>\n <line x1=\"3\" y1=\"18\" x2=\"3.01\" y2=\"18\"></line>\n </svg>\n)\n\nconst GridIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"></rect>\n <rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"></rect>\n <rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"></rect>\n <rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"></rect>\n </svg>\n)\n\nconst ClockIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <polyline points=\"12 6 12 12 16 14\"></polyline>\n </svg>\n)\n\nconst LocationIcon = () => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\"></path>\n <circle cx=\"12\" cy=\"10\" r=\"3\"></circle>\n </svg>\n)\n\nconst DEFAULT_VIEWS: EventsViewMode[] = ['list', 'grid', 'calendar']\n\nexport function EventsWidget({\n events: propEvents,\n defaultView = 'list',\n availableViews = DEFAULT_VIEWS,\n showViewToggle = true,\n title,\n subtitle,\n category,\n limit = 10,\n showViewAll = false,\n viewAllUrl = '/events',\n viewAllText = 'View All Events',\n emptyMessage = 'No upcoming events scheduled.',\n showEmptyIcon = true,\n collectPhone = false,\n additionalFields = [],\n onRegistrationSuccess,\n onRegistrationError,\n onEventClick,\n className = '',\n headerClassName = '',\n toggleClassName = '',\n listClassName = '',\n calendarClassName = '',\n eventCardClassName = '',\n modalClassName = '',\n}: EventsWidgetProps) {\n const views = availableViews.length > 0 ? availableViews : DEFAULT_VIEWS\n const resolvedDefault = views.includes(defaultView) ? defaultView : views[0]\n const [viewMode, setViewMode] = useState<EventsViewMode>(resolvedDefault)\n const effectiveView = views.includes(viewMode) ? viewMode : views[0]\n const [events, setEvents] = useState<CommerceOffering[]>(propEvents || [])\n const [loading, setLoading] = useState(!propEvents)\n const [error, setError] = useState<string | null>(null)\n const [retryCount, setRetryCount] = useState(0)\n \n const { event, schedule, isOpen, openModal, closeModal } = useEventModal()\n \n // Fetch events from API\n useEffect(() => {\n if (propEvents) {\n setEvents(propEvents)\n return\n }\n \n async function loadEvents() {\n const apiUrl = getApiUrl()\n const apiKey = getApiKey()\n \n // Wait for API key to be available (set by SiteKitLayout)\n // If not available after a short delay, retry up to 3 times\n if (!apiKey) {\n if (retryCount < 3) {\n setTimeout(() => setRetryCount(c => c + 1), 100)\n return\n }\n console.warn('[EventsWidget] No API key configured. Make sure SiteKitProvider is wrapping your app.')\n setError(null) // Don't show error, just show empty state\n setEvents([])\n setLoading(false)\n return\n }\n \n setLoading(true)\n setError(null)\n \n try {\n const response = await sonorFetch(`${apiUrl}/api/public/commerce/events`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n type: 'event',\n category,\n limit: limit * 2, // Fetch extra for calendar view\n }),\n }, { apiKey })\n\n if (!response.ok) {\n throw new Error('Failed to fetch events')\n }\n\n const data = await response.json()\n setEvents(data.events || [])\n } catch (err) {\n console.warn('Error loading events:', err)\n setError('Unable to load events. Please try again later.')\n } finally {\n setLoading(false)\n }\n }\n \n loadEvents()\n }, [propEvents, category, limit, retryCount])\n \n const handleEventClick = useCallback((clickedEvent: CommerceOffering, clickedSchedule: CommerceSchedule) => {\n onEventClick?.(clickedEvent, clickedSchedule)\n openModal(clickedEvent, clickedSchedule)\n }, [onEventClick, openModal])\n \n const handleSuccess = useCallback((result: CheckoutResult) => {\n onRegistrationSuccess?.(result)\n }, [onRegistrationSuccess])\n \n const handleError = useCallback((err: string) => {\n onRegistrationError?.(err)\n }, [onRegistrationError])\n \n // Loading state\n if (loading) {\n return (\n <div className={`site-kit-events-widget ${className}`}>\n {(title || subtitle) && (\n <div className={`site-kit-events-header ${headerClassName}`} style={{ marginBottom: '1.5rem' }}>\n {title && <h2 style={{ margin: 0, fontSize: '1.5rem', fontWeight: 600 }}>{title}</h2>}\n {subtitle && <p style={{ margin: '0.5rem 0 0', color: 'var(--sk-text-secondary)' }}>{subtitle}</p>}\n </div>\n )}\n <div style={{ textAlign: 'center', padding: '3rem 1rem', color: 'var(--sk-text-secondary)' }}>\n <div style={{\n width: '40px',\n height: '40px',\n margin: '0 auto 1rem',\n border: '3px solid var(--sk-border)',\n borderTopColor: 'var(--sk-primary)',\n borderRadius: '50%',\n animation: 'site-kit-spin 1s linear infinite',\n }} />\n <p>Loading events...</p>\n </div>\n <style>{`\n @keyframes site-kit-spin {\n to { transform: rotate(360deg); }\n }\n `}</style>\n </div>\n )\n }\n \n // Error state\n if (error) {\n return (\n <div className={`site-kit-events-widget ${className}`}>\n {(title || subtitle) && (\n <div className={`site-kit-events-header ${headerClassName}`} style={{ marginBottom: '1.5rem' }}>\n {title && <h2 style={{ margin: 0, fontSize: '1.5rem', fontWeight: 600 }}>{title}</h2>}\n {subtitle && <p style={{ margin: '0.5rem 0 0', color: 'var(--sk-text-secondary)' }}>{subtitle}</p>}\n </div>\n )}\n <div style={{ textAlign: 'center', padding: '3rem 1rem', color: 'var(--sk-error)' }}>\n <p>{error}</p>\n </div>\n </div>\n )\n }\n \n // Empty state\n if (events.length === 0) {\n return (\n <div className={`site-kit-events-widget ${className}`}>\n {(title || subtitle) && (\n <div className={`site-kit-events-header ${headerClassName}`} style={{ marginBottom: '1.5rem' }}>\n {title && <h2 style={{ margin: 0, fontSize: '1.5rem', fontWeight: 600 }}>{title}</h2>}\n {subtitle && <p style={{ margin: '0.5rem 0 0', color: 'var(--sk-text-secondary)' }}>{subtitle}</p>}\n </div>\n )}\n <div style={{ textAlign: 'center', padding: '3rem 1rem', color: 'var(--sk-text-secondary)' }}>\n {showEmptyIcon && (\n <svg\n style={{ width: '64px', height: '64px', margin: '0 auto 1rem', color: 'var(--sk-border)' }}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n )}\n <p style={{ fontSize: '1.125rem', fontWeight: 500, margin: 0 }}>{emptyMessage}</p>\n </div>\n </div>\n )\n }\n \n // Group expanded events (one-per-schedule) back into one-per-offering with all schedules.\n // The API expands each schedule into its own event entry for calendar-friendly output;\n // list view re-groups so multi-date events render as a single card with a date selector.\n const groupedList = groupEventsByOffering(events).slice(0, limit)\n // Limit events for grid/calendar view (expansion is correct there)\n const displayEvents = effectiveView === 'grid' ? events.slice(0, limit) : events\n \n return (\n <div className={`site-kit-events-widget ${className}`}>\n {/* Header */}\n {(title || subtitle || showViewToggle) && (\n <div \n className={`site-kit-events-header ${headerClassName}`}\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n marginBottom: '1.5rem',\n flexWrap: 'wrap',\n gap: '1rem',\n }}\n >\n <div>\n {title && <h2 style={{ margin: 0, fontSize: '1.5rem', fontWeight: 600 }}>{title}</h2>}\n {subtitle && <p style={{ margin: '0.5rem 0 0', color: 'var(--sk-text-secondary)' }}>{subtitle}</p>}\n </div>\n \n {showViewToggle && (\n <div \n className={`site-kit-events-toggle ${toggleClassName}`}\n style={{\n display: 'flex',\n gap: '0.25rem',\n background: 'var(--sk-surface)',\n padding: '0.25rem',\n borderRadius: '0.5rem',\n }}\n >\n {views.includes('list') && (\n <button\n onClick={() => setViewMode('list')}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n padding: '0.5rem 1rem',\n border: 'none',\n borderRadius: '0.375rem',\n background: viewMode === 'list' ? 'var(--sk-bg)' : 'transparent',\n color: viewMode === 'list' ? 'var(--sk-text-primary)' : 'var(--sk-text-secondary)',\n fontWeight: 500,\n fontSize: '0.875rem',\n cursor: 'pointer',\n boxShadow: viewMode === 'list' ? '0 1px 2px rgba(0,0,0,0.05)' : 'none',\n transition: 'all 150ms',\n }}\n >\n <ListIcon />\n List\n </button>\n )}\n {views.includes('grid') && (\n <button\n onClick={() => setViewMode('grid')}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n padding: '0.5rem 1rem',\n border: 'none',\n borderRadius: '0.375rem',\n background: viewMode === 'grid' ? 'var(--sk-bg)' : 'transparent',\n color: viewMode === 'grid' ? 'var(--sk-text-primary)' : 'var(--sk-text-secondary)',\n fontWeight: 500,\n fontSize: '0.875rem',\n cursor: 'pointer',\n boxShadow: viewMode === 'grid' ? '0 1px 2px rgba(0,0,0,0.05)' : 'none',\n transition: 'all 150ms',\n }}\n >\n <GridIcon />\n Grid\n </button>\n )}\n {views.includes('calendar') && (\n <button\n onClick={() => setViewMode('calendar')}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n padding: '0.5rem 1rem',\n border: 'none',\n borderRadius: '0.375rem',\n background: viewMode === 'calendar' ? 'var(--sk-bg)' : 'transparent',\n color: viewMode === 'calendar' ? 'var(--sk-text-primary)' : 'var(--sk-text-secondary)',\n fontWeight: 500,\n fontSize: '0.875rem',\n cursor: 'pointer',\n boxShadow: viewMode === 'calendar' ? '0 1px 2px rgba(0,0,0,0.05)' : 'none',\n transition: 'all 150ms',\n }}\n >\n <CalendarIcon />\n Calendar\n </button>\n )}\n </div>\n )}\n </div>\n )}\n \n {/* Content */}\n {effectiveView === 'list' ? (\n <div className={`site-kit-events-list ${listClassName}`}>\n <style>{`\n .sk-date-pills { display: flex; flex-wrap: wrap; gap: 0.375rem; }\n .sk-date-select-wrap { display: none; }\n @media (max-width: 640px) {\n .sk-date-pills { display: none; }\n .sk-date-select-wrap { display: block; }\n .site-kit-event-card { flex-direction: column !important; }\n .site-kit-event-card-image { width: 100% !important; min-width: 0 !important; min-height: 140px !important; }\n }\n `}</style>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>\n {groupedList.map(({ event: eventItem, schedules: allSchedules }) => {\n const schedules = allSchedules.length > 0 ? allSchedules : (eventItem.next_schedule ? [eventItem.next_schedule] : [])\n const isMulti = schedules.length > 1\n const primarySchedule = schedules[0] || eventItem.next_schedule || eventItem.schedules?.[0]\n const isFree = !eventItem.price || eventItem.price === 0\n const imageUrl = eventItem.featured_image_url\n const uniqueKey = eventItem.id\n\n return (\n <div\n key={uniqueKey}\n className={`site-kit-event-card ${eventCardClassName}`}\n data-sk-part=\"events-widget-card\" data-category={eventItem.category?.slug}\n data-offering-type={eventItem.type}\n onClick={(e) => {\n // Avoid triggering when interacting with date selector\n if ((e.target as HTMLElement).closest('[data-sk-date-selector]')) return\n if (!isMulti && primarySchedule) handleEventClick(eventItem, primarySchedule)\n }}\n style={{\n display: 'flex',\n flexDirection: 'row',\n gap: 0,\n padding: 0,\n background: 'var(--sk-bg)',\n border: '1px solid var(--sk-border)',\n borderRadius: '0.75rem',\n cursor: (!isMulti && primarySchedule) ? 'pointer' : 'default',\n transition: 'all 150ms',\n overflow: 'hidden',\n }}\n onMouseEnter={(e) => {\n if (!isMulti && primarySchedule) {\n e.currentTarget.style.borderColor = 'var(--sk-primary)'\n e.currentTarget.style.boxShadow = '0 4px 6px -1px rgba(0, 0, 0, 0.1)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.borderColor = 'var(--sk-border)'\n e.currentTarget.style.boxShadow = 'none'\n }}\n >\n {/* Image on the left */}\n <div className=\"site-kit-event-card-image\" style={{\n width: '160px',\n minWidth: '160px',\n flexShrink: 0,\n background: 'var(--sk-surface)',\n }}>\n {imageUrl ? (\n <img\n src={imageUrl}\n alt={eventItem.name}\n crossOrigin=\"anonymous\"\n referrerPolicy=\"no-referrer\"\n onError={(e) => {\n const el = e.currentTarget\n el.style.display = 'none'\n const placeholder = el.nextElementSibling as HTMLElement\n if (placeholder) placeholder.style.display = 'flex'\n }}\n style={{\n width: '100%',\n height: '100%',\n minHeight: '120px',\n objectFit: 'cover',\n display: 'block',\n }}\n />\n ) : null}\n <div\n style={{\n width: '100%',\n minHeight: '120px',\n display: imageUrl ? 'none' : 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: 'var(--sk-text-secondary)',\n }}\n aria-hidden\n >\n <CalendarIcon />\n </div>\n </div>\n <div style={{ flex: 1, display: 'flex', flexDirection: 'column', gap: '0.75rem', padding: '1.25rem' }}>\n <div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'flex-start', gap: '1rem' }}>\n <div style={{ flex: 1 }}>\n <h3 style={{ margin: 0, fontSize: '1.125rem', fontWeight: 600, color: 'var(--sk-text-primary)' }}>\n {eventItem.name}\n </h3>\n {eventItem.short_description && (\n <p style={{ margin: '0.5rem 0 0', color: 'var(--sk-text-secondary)', fontSize: '0.875rem', lineHeight: 1.5 }}>\n {eventItem.short_description}\n </p>\n )}\n </div>\n\n {eventItem.price_is_public && (\n <div style={{\n padding: '0.375rem 0.75rem',\n background: isFree ? 'rgba(var(--sk-success-rgb, 16,185,129), 0.1)' : 'rgba(var(--sk-primary-rgb), 0.125)',\n color: isFree ? 'var(--sk-success)' : 'var(--sk-primary)',\n borderRadius: '9999px',\n fontSize: '0.875rem',\n fontWeight: 600,\n whiteSpace: 'nowrap',\n }}>\n {isFree ? 'Free' : formatPrice(eventItem.price ?? 0, eventItem.currency)}\n </div>\n )}\n </div>\n\n {/* Single-date metadata row */}\n {!isMulti && primarySchedule && (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '1rem', fontSize: '0.875rem', color: 'var(--sk-text-secondary)' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.375rem' }}>\n <CalendarIcon />\n {formatDate(primarySchedule.starts_at)}\n </span>\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.375rem' }}>\n <ClockIcon />\n {formatTime(primarySchedule.starts_at)}\n </span>\n {eventItem.location && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.375rem' }}>\n <LocationIcon />\n {eventItem.location}\n </span>\n )}\n {primarySchedule.spots_remaining !== null && primarySchedule.spots_remaining !== undefined && (\n <span style={{\n color: primarySchedule.spots_remaining < 5 ? 'var(--sk-error)' : 'var(--sk-text-secondary)',\n fontWeight: primarySchedule.spots_remaining < 5 ? 500 : 400,\n }}>\n {primarySchedule.spots_remaining === 0\n ? 'Sold Out'\n : `${primarySchedule.spots_remaining} spots left`}\n </span>\n )}\n </div>\n )}\n\n {/* Multi-date: overview + date selector */}\n {isMulti && (\n <div data-sk-date-selector onClick={(e) => e.stopPropagation()}>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '1rem', fontSize: '0.875rem', color: 'var(--sk-text-secondary)', marginBottom: '0.625rem' }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.375rem', fontWeight: 500, color: 'var(--sk-text-primary)' }}>\n <CalendarIcon />\n {schedules.length} dates available\n </span>\n {eventItem.location && (\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.375rem' }}>\n <LocationIcon />\n {eventItem.location}\n </span>\n )}\n <span>\n {formatDate(schedules[0].starts_at)} – {formatDate(schedules[schedules.length - 1].starts_at)}\n </span>\n </div>\n\n {/* Desktop: pill row */}\n <div className=\"sk-date-pills\">\n {schedules.map((s) => {\n const soldOut = s.spots_remaining === 0\n const low = !soldOut && s.spots_remaining !== null && s.spots_remaining !== undefined && s.spots_remaining < 5\n return (\n <button\n key={s.id}\n type=\"button\"\n onClick={() => !soldOut && handleEventClick(eventItem, s)}\n disabled={soldOut}\n title={`${formatDate(s.starts_at)} • ${formatTime(s.starts_at)}${soldOut ? ' (Sold Out)' : low ? ` (${s.spots_remaining} left)` : ''}`}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '0.375rem',\n padding: '0.5rem 0.875rem',\n borderRadius: '9999px',\n border: '1.5px solid var(--sk-primary)',\n background: soldOut ? 'var(--sk-surface)' : 'var(--sk-bg)',\n color: soldOut ? 'var(--sk-text-secondary)' : 'var(--sk-primary)',\n fontSize: '0.8125rem',\n fontWeight: 600,\n letterSpacing: '0.01em',\n cursor: soldOut ? 'not-allowed' : 'pointer',\n textDecoration: soldOut ? 'line-through' : 'none',\n transition: 'all 150ms ease',\n whiteSpace: 'nowrap',\n boxShadow: soldOut ? 'none' : '0 1px 2px rgba(0,0,0,0.04)',\n }}\n onMouseEnter={(e) => {\n if (!soldOut) {\n e.currentTarget.style.background = 'var(--sk-primary)'\n e.currentTarget.style.color = 'var(--sk-bg)'\n e.currentTarget.style.transform = 'translateY(-1px)'\n e.currentTarget.style.boxShadow = '0 4px 10px -2px rgba(0,0,0,0.15)'\n }\n }}\n onMouseLeave={(e) => {\n if (!soldOut) {\n e.currentTarget.style.background = 'var(--sk-bg)'\n e.currentTarget.style.color = 'var(--sk-primary)'\n e.currentTarget.style.transform = 'none'\n e.currentTarget.style.boxShadow = '0 1px 2px rgba(0,0,0,0.04)'\n }\n }}\n >\n {formatDate(s.starts_at)} · {formatTime(s.starts_at)}\n {low && (\n <span style={{\n marginLeft: '0.125rem',\n padding: '0.0625rem 0.375rem',\n borderRadius: '9999px',\n background: 'var(--sk-error)',\n color: 'var(--sk-bg)',\n fontWeight: 700,\n fontSize: '0.6875rem',\n }}>\n {s.spots_remaining} left\n </span>\n )}\n </button>\n )\n })}\n </div>\n\n {/* Mobile: dropdown */}\n <div className=\"sk-date-select-wrap\">\n <select\n defaultValue=\"\"\n onChange={(e) => {\n const scheduleId = e.target.value\n const s = schedules.find(x => x.id === scheduleId)\n if (s) handleEventClick(eventItem, s)\n e.currentTarget.value = ''\n }}\n style={{\n width: '100%',\n padding: '0.625rem 0.75rem',\n border: '1px solid var(--sk-border)',\n borderRadius: '0.5rem',\n background: 'var(--sk-bg)',\n color: 'var(--sk-text-primary)',\n fontSize: '0.875rem',\n fontWeight: 500,\n cursor: 'pointer',\n }}\n >\n <option value=\"\" disabled>Select a date to register…</option>\n {schedules.map((s) => {\n const soldOut = s.spots_remaining === 0\n const low = !soldOut && s.spots_remaining !== null && s.spots_remaining !== undefined && s.spots_remaining < 5\n return (\n <option key={s.id} value={s.id} disabled={soldOut}>\n {formatDate(s.starts_at)} · {formatTime(s.starts_at)}\n {soldOut ? ' — Sold Out' : low ? ` — ${s.spots_remaining} left` : ''}\n </option>\n )\n })}\n </select>\n </div>\n </div>\n )}\n </div>\n </div>\n )\n })}\n </div>\n\n {showViewAll && groupedList.length >= limit && (\n <div style={{ textAlign: 'center', marginTop: '1.5rem' }}>\n <a\n href={viewAllUrl}\n style={{\n display: 'inline-block',\n padding: '0.75rem 1.5rem',\n background: 'var(--sk-surface)',\n color: 'var(--sk-text-primary)',\n borderRadius: '0.5rem',\n textDecoration: 'none',\n fontWeight: 500,\n fontSize: '0.875rem',\n transition: 'all 150ms',\n }}\n >\n {viewAllText}\n </a>\n </div>\n )}\n </div>\n ) : effectiveView === 'grid' ? (\n <div className={`site-kit-events-grid ${listClassName}`}>\n <div style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(280px, 1fr))',\n gap: '1.25rem',\n }}>\n {displayEvents.map((eventItem, index) => {\n const nextSchedule = eventItem.next_schedule || eventItem.schedules?.[0]\n const isFree = !eventItem.price || eventItem.price === 0\n const imageUrl = eventItem.featured_image_url\n const uniqueKey = nextSchedule\n ? `${eventItem.id}-${nextSchedule.id}`\n : `${eventItem.id}-${index}`\n \n return (\n <div\n key={uniqueKey}\n className={`site-kit-event-card site-kit-event-card--grid ${eventCardClassName}`}\n data-sk-part=\"events-widget-card\" data-category={eventItem.category?.slug}\n data-offering-type={eventItem.type}\n onClick={() => nextSchedule && handleEventClick(eventItem, nextSchedule)}\n style={{\n position: 'relative',\n minHeight: '220px',\n borderRadius: '0.75rem',\n overflow: 'hidden',\n cursor: nextSchedule ? 'pointer' : 'default',\n transition: 'all 150ms',\n border: '1px solid var(--sk-border)',\n }}\n onMouseEnter={(e) => {\n if (nextSchedule) {\n e.currentTarget.style.boxShadow = '0 10px 25px -5px rgba(0, 0, 0, 0.15)'\n e.currentTarget.style.transform = 'translateY(-2px)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.boxShadow = 'none'\n e.currentTarget.style.transform = 'none'\n }}\n >\n {/* Background image */}\n <div style={{\n position: 'absolute',\n inset: 0,\n background: imageUrl\n ? `linear-gradient(to top, rgba(0,0,0,0.75) 0%, rgba(0,0,0,0.35) 45%, rgba(0,0,0,0.15) 70%), url(${imageUrl}) center/cover`\n : 'linear-gradient(135deg, #4b5563 0%, #6b7280 100%)',\n }} />\n {/* Content overlay */}\n <div style={{\n position: 'relative',\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-end',\n padding: '1.25rem',\n color: 'var(--sk-bg)',\n }}>\n <h3 style={{ margin: 0, fontSize: '1.125rem', fontWeight: 600, color: 'var(--sk-bg)', textShadow: '0 1px 2px rgba(0,0,0,0.5)' }}>\n {eventItem.name}\n </h3>\n {eventItem.short_description && (\n <p style={{ margin: '0.25rem 0 0', fontSize: '0.8125rem', opacity: 0.95, lineHeight: 1.4, overflow: 'hidden', textOverflow: 'ellipsis', maxHeight: '2.8em' }}>\n {eventItem.short_description}\n </p>\n )}\n {nextSchedule && (\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: '0.75rem', marginTop: '0.75rem', fontSize: '0.8125rem', opacity: 0.95 }}>\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.25rem' }}>\n <CalendarIcon />\n {formatDate(nextSchedule.starts_at)}\n </span>\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.25rem' }}>\n <ClockIcon />\n {formatTime(nextSchedule.starts_at)}\n </span>\n {nextSchedule.spots_remaining !== null && nextSchedule.spots_remaining !== undefined && (\n <span>\n {nextSchedule.spots_remaining === 0 ? 'Sold Out' : `${nextSchedule.spots_remaining} spots left`}\n </span>\n )}\n </div>\n )}\n {eventItem.price_is_public && (\n <div style={{\n marginTop: '0.5rem',\n display: 'inline-block',\n padding: '0.25rem 0.5rem',\n background: 'rgba(255,255,255,0.2)',\n borderRadius: '9999px',\n fontSize: '0.875rem',\n fontWeight: 600,\n }}>\n {isFree ? 'Free' : formatPrice(eventItem.price ?? 0, eventItem.currency)}\n </div>\n )}\n </div>\n </div>\n )\n })}\n </div>\n \n {showViewAll && events.length > limit && (\n <div style={{ textAlign: 'center', marginTop: '1.5rem' }}>\n <a\n href={viewAllUrl}\n style={{\n display: 'inline-block',\n padding: '0.75rem 1.5rem',\n background: 'var(--sk-surface)',\n color: 'var(--sk-text-primary)',\n borderRadius: '0.5rem',\n textDecoration: 'none',\n fontWeight: 500,\n fontSize: '0.875rem',\n transition: 'all 150ms',\n }}\n >\n {viewAllText}\n </a>\n </div>\n )}\n </div>\n ) : (\n <div className={`site-kit-events-calendar ${calendarClassName}`}>\n <CalendarView\n events={events}\n onEventClick={handleEventClick}\n showNavigation={true}\n showHeader={true}\n />\n </div>\n )}\n \n {/* Registration Modal */}\n <EventModal\n event={event}\n schedule={schedule}\n isOpen={isOpen}\n onClose={closeModal}\n onSuccess={handleSuccess}\n onError={handleError}\n collectPhone={collectPhone}\n additionalFields={additionalFields}\n className={modalClassName}\n />\n </div>\n )\n}\n\n// ============================================\n// Helpers\n// ============================================\n\nfunction getApiUrl(): string {\n if (typeof window !== 'undefined') {\n return (window as any).__SITE_KIT_API_URL__ || 'https://api.sonor.io'\n }\n return 'https://api.sonor.io'\n}\n\nfunction getApiKey(): string {\n if (typeof window !== 'undefined') {\n return (window as any).__SITE_KIT_API_KEY__ || ''\n }\n return ''\n}\n\n// Re-group events expanded one-per-schedule (by the public events API) back into\n// one-per-offering with all schedules merged. Sorts schedules and groups chronologically.\nfunction groupEventsByOffering(\n events: CommerceOffering[],\n): Array<{ event: CommerceOffering; schedules: CommerceSchedule[] }> {\n const groups = new Map<string, { event: CommerceOffering; schedules: CommerceSchedule[] }>()\n for (const ev of events) {\n const incoming = (ev.schedules || []).filter(Boolean) as CommerceSchedule[]\n const existing = groups.get(ev.id)\n if (existing) {\n for (const s of incoming) {\n if (!existing.schedules.some((x) => x.id === s.id)) {\n existing.schedules.push(s)\n }\n }\n } else {\n groups.set(ev.id, { event: ev, schedules: [...incoming] })\n }\n }\n for (const g of groups.values()) {\n g.schedules.sort(\n (a, b) => new Date(a.starts_at).getTime() - new Date(b.starts_at).getTime(),\n )\n }\n return Array.from(groups.values()).sort((a, b) => {\n const aFirst = a.schedules[0]?.starts_at\n const bFirst = b.schedules[0]?.starts_at\n if (!aFirst && !bFirst) return 0\n if (!aFirst) return 1\n if (!bFirst) return -1\n return new Date(aFirst).getTime() - new Date(bFirst).getTime()\n })\n}\n\nexport default EventsWidget\n","/**\n * Events polish: calendar links, structured data, honest capacity.\n *\n * - icsForEvent / googleCalendarUrl / createIcsRoute: \"Add to calendar\"\n * without a third-party service.\n * - EventJsonLd: schema.org/Event emitted from the offering the site already\n * fetched — free rich results.\n * - CapacityBadge: renders from spots_remaining/capacity. Per the QCR\n * oversell incident, the seat count is the ONLY honest sold-out signal\n * (status can stay 'active' during an emergency shutdown), so this badge\n * never derives fullness from status.\n *\n * Server-safe: no hooks, no browser APIs — usable from RSC pages directly.\n */\n\nimport React from 'react'\nimport type { CommerceOffering, CommerceSchedule } from './types'\n\n// ── ICS ─────────────────────────────────────────────────────────────────────\n\n/** Escape per RFC 5545 (comma, semicolon, backslash, newline). */\nfunction icsEscape(value: string): string {\n return value.replace(/\\\\/g, '\\\\\\\\').replace(/;/g, '\\\\;').replace(/,/g, '\\\\,').replace(/\\r?\\n/g, '\\\\n')\n}\n\nfunction icsDate(iso: string): string {\n // UTC basic format: 20261026T220000Z\n return new Date(iso).toISOString().replace(/[-:]/g, '').replace(/\\.\\d{3}/, '')\n}\n\n/** All-day events use VALUE=DATE and an exclusive end date per RFC 5545. */\nfunction icsAllDayDate(iso: string, addDays = 0): string {\n const d = new Date(iso)\n d.setUTCDate(d.getUTCDate() + addDays)\n return d.toISOString().slice(0, 10).replace(/-/g, '')\n}\n\nexport interface IcsEventInput {\n offering: CommerceOffering\n schedule: CommerceSchedule\n /** Absolute URL of the event page, for the ICS URL property. */\n url?: string\n}\n\n/** Build a single-event .ics document. */\nexport function icsForEvent({ offering, schedule, url }: IcsEventInput): string {\n const allDay = Boolean((offering.metadata as { all_day?: boolean } | undefined)?.all_day)\n const uid = `${offering.id}-${schedule.id}@sonor.io`\n const lines = [\n 'BEGIN:VCALENDAR',\n 'VERSION:2.0',\n 'PRODID:-//Sonor//site-kit//EN',\n 'BEGIN:VEVENT',\n `UID:${uid}`,\n `DTSTAMP:${icsDate(new Date().toISOString())}`,\n allDay\n ? `DTSTART;VALUE=DATE:${icsAllDayDate(schedule.starts_at)}`\n : `DTSTART:${icsDate(schedule.starts_at)}`,\n allDay\n ? `DTEND;VALUE=DATE:${icsAllDayDate(schedule.ends_at || schedule.starts_at, 1)}`\n : schedule.ends_at\n ? `DTEND:${icsDate(schedule.ends_at)}`\n : null,\n `SUMMARY:${icsEscape(offering.name)}`,\n offering.short_description ? `DESCRIPTION:${icsEscape(offering.short_description)}` : null,\n offering.location ? `LOCATION:${icsEscape(offering.location)}` : null,\n url ? `URL:${url}` : null,\n 'END:VEVENT',\n 'END:VCALENDAR',\n ].filter((l): l is string => l !== null)\n // RFC 5545 requires CRLF line endings.\n return lines.join('\\r\\n') + '\\r\\n'\n}\n\n/** Google Calendar \"add event\" URL for the same data. */\nexport function googleCalendarUrl({ offering, schedule }: IcsEventInput): string {\n const allDay = Boolean((offering.metadata as { all_day?: boolean } | undefined)?.all_day)\n const dates = allDay\n ? `${icsAllDayDate(schedule.starts_at)}/${icsAllDayDate(schedule.ends_at || schedule.starts_at, 1)}`\n : `${icsDate(schedule.starts_at)}/${icsDate(schedule.ends_at || schedule.starts_at)}`\n const params = new URLSearchParams({ action: 'TEMPLATE', text: offering.name, dates })\n if (offering.short_description) params.set('details', offering.short_description)\n if (offering.location) params.set('location', offering.location)\n return `https://calendar.google.com/calendar/render?${params.toString()}`\n}\n\n/**\n * Route handler factory: app/events/[slug]/calendar.ics/route.ts (or any\n * route) — resolve the event yourself, delegate the response here.\n */\nexport function icsResponse(input: IcsEventInput): Response {\n return new Response(icsForEvent(input), {\n headers: {\n 'Content-Type': 'text/calendar; charset=utf-8',\n 'Content-Disposition': `attachment; filename=\"${input.offering.slug || 'event'}.ics\"`,\n },\n })\n}\n\n// ── JSON-LD ─────────────────────────────────────────────────────────────────\n\nexport interface EventJsonLdProps {\n offering: CommerceOffering\n schedule: CommerceSchedule\n /** Absolute page URL. */\n url?: string\n /** Site origin for offer URLs, e.g. https://example.com */\n origin?: string\n}\n\n/** schema.org/Event structured data from data the page already fetched. */\nexport function EventJsonLd({ offering, schedule, url, origin }: EventJsonLdProps) {\n const spots = schedule.spots_remaining\n const soldOut = typeof spots === 'number' && spots <= 0\n\n const data: Record<string, unknown> = {\n '@context': 'https://schema.org',\n '@type': 'Event',\n name: offering.name,\n startDate: schedule.starts_at,\n ...(schedule.ends_at ? { endDate: schedule.ends_at } : {}),\n ...(offering.short_description || offering.description\n ? { description: offering.short_description || offering.description }\n : {}),\n ...(offering.location\n ? { location: { '@type': 'Place', name: offering.location } }\n : {}),\n ...(offering.featured_image_url ? { image: [offering.featured_image_url] } : {}),\n ...(url ? { url } : {}),\n eventStatus: 'https://schema.org/EventScheduled',\n ...(offering.price_is_public && offering.price_type !== 'quote'\n ? {\n offers: {\n '@type': 'Offer',\n price: offering.price_type === 'free' ? 0 : offering.price ?? 0,\n priceCurrency: offering.currency || 'USD',\n // Honest availability: derived from the seat count, never status.\n availability: soldOut\n ? 'https://schema.org/SoldOut'\n : 'https://schema.org/InStock',\n ...(url || origin ? { url: url || origin } : {}),\n },\n }\n : {}),\n }\n\n return (\n <script\n type=\"application/ld+json\"\n data-sk-part=\"event-jsonld\"\n dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }}\n />\n )\n}\n\n// ── Capacity ────────────────────────────────────────────────────────────────\n\nexport interface CapacityBadgeProps {\n schedule: CommerceSchedule\n className?: string\n /** Show \"N of M spots left\" instead of just \"N spots left\" when capacity known. */\n showTotal?: boolean\n /** Below this count the badge gets data-sk-urgency=\"low-spots\". Default 5. */\n lowThreshold?: number\n labels?: {\n soldOut?: string\n spotsLeft?: (n: number, total?: number | null) => string\n }\n}\n\n/**\n * Honest capacity, styled by the site via data attributes:\n * [data-sk-part=\"capacity-badge\"][data-sk-availability=\"sold-out\" | \"open\"]\n * [data-sk-urgency=\"low-spots\"]\n * Renders nothing when the schedule doesn't track capacity.\n */\nexport function CapacityBadge({\n schedule,\n className,\n showTotal = false,\n lowThreshold = 5,\n labels,\n}: CapacityBadgeProps) {\n const spots = schedule.spots_remaining\n if (typeof spots !== 'number') return null\n\n const soldOut = spots <= 0\n const total = schedule.capacity ?? null\n const text = soldOut\n ? labels?.soldOut ?? 'Sold out'\n : labels?.spotsLeft?.(spots, total) ??\n (showTotal && total ? `${spots} of ${total} spots left` : `${spots} spots left`)\n\n return (\n <span\n className={className}\n data-sk-part=\"capacity-badge\"\n data-sk-availability={soldOut ? 'sold-out' : 'open'}\n {...(!soldOut && spots <= lowThreshold ? { 'data-sk-urgency': 'low-spots' } : {})}\n >\n {text}\n </span>\n )\n}\n"]}
|