@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
package/dist/blog/index.js
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
|
|
4
4
|
var chunkGQF6QAQS_js = require('../chunk-GQF6QAQS.js');
|
|
5
5
|
var chunkDO6ATNLN_js = require('../chunk-DO6ATNLN.js');
|
|
6
|
-
var
|
|
6
|
+
var chunkVWDT7H6L_js = require('../chunk-VWDT7H6L.js');
|
|
7
7
|
require('../chunk-HX6ZG3PP.js');
|
|
8
|
-
var
|
|
8
|
+
var chunkLC7AM4J5_js = require('../chunk-LC7AM4J5.js');
|
|
9
9
|
var chunkJ7QI3GDX_js = require('../chunk-J7QI3GDX.js');
|
|
10
10
|
require('../chunk-SNAQBZPT.js');
|
|
11
11
|
var React = require('react');
|
|
@@ -15,7 +15,7 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
15
15
|
|
|
16
16
|
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
17
17
|
|
|
18
|
-
var ManagedNewsletterForm = React__default.default.lazy(() => import('../ManagedNewsletterForm-
|
|
18
|
+
var ManagedNewsletterForm = React__default.default.lazy(() => import('../ManagedNewsletterForm-4LVJZROZ.js'));
|
|
19
19
|
function NewsletterWidget({
|
|
20
20
|
title = "Subscribe to Our Newsletter",
|
|
21
21
|
description = "Get the latest posts delivered straight to your inbox.",
|
|
@@ -206,7 +206,7 @@ function AuthorCard({ author, showBio = true, showSocial = true, showTrustBlock
|
|
|
206
206
|
author.company ? ` at ${author.company}` : ""
|
|
207
207
|
] }),
|
|
208
208
|
showBio && author.bio && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { margin: "4px 0", color: "var(--sk-text-secondary)", fontSize: 14 }, children: author.bio }),
|
|
209
|
-
showSocial &&
|
|
209
|
+
showSocial && chunkVWDT7H6L_js.getAuthorSocialLinks(author).length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", gap: 12, marginTop: 8 }, children: chunkVWDT7H6L_js.getAuthorSocialLinks(author).map((link) => /* @__PURE__ */ jsxRuntime.jsx("a", { href: link.href, target: "_blank", rel: "noopener noreferrer", children: link.label }, link.label)) })
|
|
210
210
|
] })
|
|
211
211
|
] }),
|
|
212
212
|
showTrustBlock && /* @__PURE__ */ jsxRuntime.jsx(TrustBlock, { author })
|
|
@@ -267,7 +267,7 @@ function AuthorHero({ author }) {
|
|
|
267
267
|
);
|
|
268
268
|
}
|
|
269
269
|
function SocialLinks({ author }) {
|
|
270
|
-
const links =
|
|
270
|
+
const links = chunkVWDT7H6L_js.getAuthorSocialLinks(author);
|
|
271
271
|
if (links.length === 0) return null;
|
|
272
272
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", gap: 16, marginTop: 16 }, children: links.map((link) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
273
273
|
"a",
|
|
@@ -293,8 +293,8 @@ function SocialLinks({ author }) {
|
|
|
293
293
|
link.label
|
|
294
294
|
)) });
|
|
295
295
|
}
|
|
296
|
-
function PostCard({ post,
|
|
297
|
-
const
|
|
296
|
+
function PostCard({ post, href }) {
|
|
297
|
+
const artwork = chunkLC7AM4J5_js.resolveBlogArtwork(post);
|
|
298
298
|
const date = post.published_at ? new Date(post.published_at).toLocaleDateString("en-US", { year: "numeric", month: "short", day: "numeric" }) : null;
|
|
299
299
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
300
300
|
"article",
|
|
@@ -309,12 +309,13 @@ function PostCard({ post, basePath }) {
|
|
|
309
309
|
flexDirection: "column"
|
|
310
310
|
},
|
|
311
311
|
children: [
|
|
312
|
-
|
|
312
|
+
artwork.src && /* @__PURE__ */ jsxRuntime.jsx("a", { href, style: { display: "block", overflow: "hidden", aspectRatio: artwork.composed ? void 0 : "16/9" }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
313
313
|
"img",
|
|
314
314
|
{
|
|
315
|
-
src:
|
|
316
|
-
alt:
|
|
317
|
-
|
|
315
|
+
src: artwork.src,
|
|
316
|
+
alt: artwork.alt,
|
|
317
|
+
"data-sk-composed-card": artwork.composed || void 0,
|
|
318
|
+
style: { width: "100%", height: "100%", objectFit: "cover", ...chunkLC7AM4J5_js.blogArtworkImageStyle(artwork) },
|
|
318
319
|
loading: "lazy"
|
|
319
320
|
}
|
|
320
321
|
) }),
|
|
@@ -322,8 +323,8 @@ function PostCard({ post, basePath }) {
|
|
|
322
323
|
date && /* @__PURE__ */ jsxRuntime.jsx("time", { style: { fontSize: 12, color: "var(--sk-text-tertiary, #6b7280)", marginBottom: 6 }, children: date }),
|
|
323
324
|
/* @__PURE__ */ jsxRuntime.jsx("a", { href, style: { textDecoration: "none", color: "inherit" }, children: /* @__PURE__ */ jsxRuntime.jsx("h3", { style: { margin: "0 0 8px", fontSize: 18, fontWeight: 600, lineHeight: 1.3, color: "var(--sk-text-primary, #111827)" }, children: post.title }) }),
|
|
324
325
|
post.excerpt && /* @__PURE__ */ jsxRuntime.jsx("p", { style: { margin: 0, fontSize: 14, lineHeight: 1.6, color: "var(--sk-text-secondary, #4b5563)", flex: 1 }, children: post.excerpt }),
|
|
325
|
-
|
|
326
|
-
|
|
326
|
+
chunkVWDT7H6L_js.readingTimeMinutes(post) && /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: 12, color: "var(--sk-text-tertiary, #6b7280)", marginTop: 12 }, children: [
|
|
327
|
+
chunkVWDT7H6L_js.readingTimeMinutes(post),
|
|
327
328
|
" min read"
|
|
328
329
|
] })
|
|
329
330
|
] })
|
|
@@ -331,8 +332,9 @@ function PostCard({ post, basePath }) {
|
|
|
331
332
|
}
|
|
332
333
|
);
|
|
333
334
|
}
|
|
334
|
-
function AuthorPage({ author, posts, basePath
|
|
335
|
-
const
|
|
335
|
+
function AuthorPage({ author, posts, basePath, routing }) {
|
|
336
|
+
const routes = chunkLC7AM4J5_js.createBlogRoutes({ basePath, ...routing });
|
|
337
|
+
const schema = chunkLC7AM4J5_js.generateAuthorSchema(author);
|
|
336
338
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sk-author-page", children: [
|
|
337
339
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
338
340
|
"script",
|
|
@@ -362,7 +364,7 @@ function AuthorPage({ author, posts, basePath = "/blog" }) {
|
|
|
362
364
|
gridTemplateColumns: "repeat(auto-fill, minmax(300px, 1fr))",
|
|
363
365
|
gap: 24
|
|
364
366
|
},
|
|
365
|
-
children: posts.map((post) => /* @__PURE__ */ jsxRuntime.jsx(PostCard, { post,
|
|
367
|
+
children: posts.map((post) => /* @__PURE__ */ jsxRuntime.jsx(PostCard, { post, href: routes.post(post) }, post.id))
|
|
366
368
|
}
|
|
367
369
|
)
|
|
368
370
|
] })
|
|
@@ -455,59 +457,79 @@ Object.defineProperty(exports, "BlogFAQ", {
|
|
|
455
457
|
});
|
|
456
458
|
Object.defineProperty(exports, "BlogLayout", {
|
|
457
459
|
enumerable: true,
|
|
458
|
-
get: function () { return
|
|
460
|
+
get: function () { return chunkVWDT7H6L_js.BlogLayout; }
|
|
459
461
|
});
|
|
460
462
|
Object.defineProperty(exports, "BlogList", {
|
|
461
463
|
enumerable: true,
|
|
462
|
-
get: function () { return
|
|
464
|
+
get: function () { return chunkVWDT7H6L_js.BlogList; }
|
|
463
465
|
});
|
|
464
466
|
Object.defineProperty(exports, "BlogPage", {
|
|
465
467
|
enumerable: true,
|
|
466
|
-
get: function () { return
|
|
468
|
+
get: function () { return chunkVWDT7H6L_js.BlogPage; }
|
|
467
469
|
});
|
|
468
470
|
Object.defineProperty(exports, "BlogPost", {
|
|
469
471
|
enumerable: true,
|
|
470
|
-
get: function () { return
|
|
472
|
+
get: function () { return chunkVWDT7H6L_js.BlogPost; }
|
|
471
473
|
});
|
|
472
474
|
Object.defineProperty(exports, "BlogPostPage", {
|
|
473
475
|
enumerable: true,
|
|
474
|
-
get: function () { return
|
|
476
|
+
get: function () { return chunkVWDT7H6L_js.BlogPostPage; }
|
|
475
477
|
});
|
|
476
478
|
Object.defineProperty(exports, "BlogSidebar", {
|
|
477
479
|
enumerable: true,
|
|
478
|
-
get: function () { return
|
|
480
|
+
get: function () { return chunkVWDT7H6L_js.BlogSidebar; }
|
|
479
481
|
});
|
|
480
482
|
Object.defineProperty(exports, "CategoryPage", {
|
|
481
483
|
enumerable: true,
|
|
482
|
-
get: function () { return
|
|
484
|
+
get: function () { return chunkVWDT7H6L_js.CategoryPage; }
|
|
483
485
|
});
|
|
484
486
|
Object.defineProperty(exports, "ClusterNavigation", {
|
|
485
487
|
enumerable: true,
|
|
486
|
-
get: function () { return
|
|
488
|
+
get: function () { return chunkVWDT7H6L_js.ClusterNavigation; }
|
|
487
489
|
});
|
|
488
490
|
Object.defineProperty(exports, "RelatedPosts", {
|
|
489
491
|
enumerable: true,
|
|
490
|
-
get: function () { return
|
|
492
|
+
get: function () { return chunkVWDT7H6L_js.RelatedPosts; }
|
|
491
493
|
});
|
|
492
494
|
Object.defineProperty(exports, "ServiceCallout", {
|
|
493
495
|
enumerable: true,
|
|
494
|
-
get: function () { return
|
|
496
|
+
get: function () { return chunkVWDT7H6L_js.ServiceCallout; }
|
|
495
497
|
});
|
|
496
498
|
Object.defineProperty(exports, "ServiceCallouts", {
|
|
497
499
|
enumerable: true,
|
|
498
|
-
get: function () { return
|
|
500
|
+
get: function () { return chunkVWDT7H6L_js.ServiceCallouts; }
|
|
499
501
|
});
|
|
500
502
|
Object.defineProperty(exports, "addExternalLinkTargets", {
|
|
501
503
|
enumerable: true,
|
|
502
|
-
get: function () { return
|
|
504
|
+
get: function () { return chunkVWDT7H6L_js.addExternalLinkTargets; }
|
|
503
505
|
});
|
|
504
506
|
Object.defineProperty(exports, "normalizeSiteHost", {
|
|
505
507
|
enumerable: true,
|
|
506
|
-
get: function () { return
|
|
508
|
+
get: function () { return chunkVWDT7H6L_js.normalizeSiteHost; }
|
|
507
509
|
});
|
|
508
510
|
Object.defineProperty(exports, "resolveBlogSiteUrl", {
|
|
509
511
|
enumerable: true,
|
|
510
|
-
get: function () { return
|
|
512
|
+
get: function () { return chunkVWDT7H6L_js.resolveBlogSiteUrl; }
|
|
513
|
+
});
|
|
514
|
+
Object.defineProperty(exports, "blogCategorySlug", {
|
|
515
|
+
enumerable: true,
|
|
516
|
+
get: function () { return chunkLC7AM4J5_js.blogCategorySlug; }
|
|
517
|
+
});
|
|
518
|
+
Object.defineProperty(exports, "createBlogRoutes", {
|
|
519
|
+
enumerable: true,
|
|
520
|
+
get: function () { return chunkLC7AM4J5_js.createBlogRoutes; }
|
|
521
|
+
});
|
|
522
|
+
Object.defineProperty(exports, "resolveBlogArtwork", {
|
|
523
|
+
enumerable: true,
|
|
524
|
+
get: function () { return chunkLC7AM4J5_js.resolveBlogArtwork; }
|
|
525
|
+
});
|
|
526
|
+
Object.defineProperty(exports, "resolveBlogPostUrl", {
|
|
527
|
+
enumerable: true,
|
|
528
|
+
get: function () { return chunkLC7AM4J5_js.resolveBlogPostUrl; }
|
|
529
|
+
});
|
|
530
|
+
Object.defineProperty(exports, "resolveBlogUrl", {
|
|
531
|
+
enumerable: true,
|
|
532
|
+
get: function () { return chunkLC7AM4J5_js.resolveBlogUrl; }
|
|
511
533
|
});
|
|
512
534
|
exports.AuthorCard = AuthorCard;
|
|
513
535
|
exports.AuthorPage = AuthorPage;
|
package/dist/blog/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/blog/NewsletterWidget.tsx","../../src/blog/AuthorCard.tsx","../../src/blog/AuthorPage.tsx","../../src/blog/TableOfContents.tsx"],"names":["React","useState","jsx","Suspense","NewsletterShell","jsxs","getAuthorSocialLinks","readingTimeMinutes","generateAuthorSchema","safeJsonLd","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["'use client'\n\n/**\n * @sonordev/site-kit blog — newsletter signup widget\n *\n * Two working modes (the old version rendered a form whose submit handler\n * discarded the email):\n *\n * - `onSubmit`: the site owns delivery — we await the callback.\n * - `formSlug`: the widget drives the managed-forms rail (useForm), so\n * submissions inherit Sonor's newsletter routing (email_subscribers),\n * honeypot, reCAPTCHA, and attribution for free.\n *\n * `onSubmit` wins when both are set. With neither, the widget renders\n * nothing and warns — a dead form that swallows emails must not resurrect.\n *\n * Lives in its own module (not BlogSidebar.tsx) on purpose: it needs hooks,\n * and BlogSidebar is also bundled into the un-stamped server entry\n * blog/server-ui, where hooks would enter the react-server graph.\n */\n\nimport React, { Suspense, useState } from 'react'\nimport { NewsletterShell } from './NewsletterShell'\n\n// Lazy: the managed-forms mode drags the whole forms engine (useForm,\n// submit rail, sonorFetch, site token) — ~10KB gzipped — which most blog\n// consumers never render. The dynamic import keeps it out of the eager\n// blog bundle; tsup stamps the split chunk 'use client'.\nconst ManagedNewsletterForm = React.lazy(() => import('./ManagedNewsletterForm'))\n\nexport interface NewsletterWidgetProps {\n title?: string\n description?: string\n buttonText?: string\n /** Site-owned delivery. Wins over formSlug when both are set. */\n onSubmit?: (email: string) => Promise<void>\n /** Slug of a managed Sonor form (newsletter routing) to submit through. */\n formSlug?: string\n successMessage?: string\n}\n\nexport function NewsletterWidget({\n title = 'Subscribe to Our Newsletter',\n description = 'Get the latest posts delivered straight to your inbox.',\n buttonText = 'Subscribe',\n onSubmit,\n formSlug,\n successMessage = \"You're subscribed — thanks!\",\n}: NewsletterWidgetProps) {\n const [email, setEmail] = useState('')\n const [status, setStatus] = useState<'idle' | 'submitting' | 'success' | 'error'>('idle')\n const [errorMessage, setErrorMessage] = useState<string | null>(null)\n\n if (!onSubmit && formSlug) {\n return (\n <Suspense fallback={null}>\n <ManagedNewsletterForm\n key={formSlug}\n formSlug={formSlug}\n title={title}\n description={description}\n buttonText={buttonText}\n successMessage={successMessage}\n />\n </Suspense>\n )\n }\n\n if (!onSubmit) {\n console.warn(\n '[Blog] NewsletterWidget needs an onSubmit callback or a formSlug — rendering nothing rather than a form that discards emails.'\n )\n return null\n }\n\n return (\n <NewsletterShell\n title={title}\n description={description}\n buttonText={buttonText}\n email={email}\n onEmailChange={setEmail}\n onFormSubmit={(e) => {\n e.preventDefault()\n setStatus('submitting')\n setErrorMessage(null)\n onSubmit(email)\n .then(() => setStatus('success'))\n .catch((err) => {\n setStatus('error')\n setErrorMessage(err instanceof Error ? err.message : null)\n })\n }}\n status={status}\n successMessage={successMessage}\n errorMessage={errorMessage}\n />\n )\n}\n","/**\n * @sonordev/site-kit/blog - Author Card Component\n */\n\nimport React from 'react'\nimport type { AuthorCardProps, BlogAuthor } from './types'\nimport { getAuthorSocialLinks } from './author-social'\n\n// ============================================================================\n// Trust Block (E-E-A-T)\n// ============================================================================\n\nfunction TrustBlock({ author }: { author: BlogAuthor }) {\n const hasYears = typeof author.years_experience === 'number' && author.years_experience > 0\n const hasCredentials = author.credentials && author.credentials.length > 0\n const hasExpertise = author.expertise_areas && author.expertise_areas.length > 0\n const hasPublications = author.featured_publications && author.featured_publications.length > 0\n const hasAwards = author.awards && author.awards.length > 0\n const isVerified = author.is_subject_matter_expert || author.has_verified_credentials\n\n const hasAnything = hasYears || hasCredentials || hasExpertise || hasPublications || hasAwards || isVerified\n if (!hasAnything) return null\n\n return (\n <div\n className=\"sk-author-trust\"\n style={{\n marginTop: 16,\n padding: 16,\n borderRadius: 10,\n border: '1px solid var(--sk-border, #e5e7eb)',\n background: 'var(--sk-surface, #f9fafb)',\n }}\n >\n <h5\n style={{\n margin: '0 0 12px',\n fontSize: 13,\n fontWeight: 600,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: 'var(--sk-text-tertiary, #6b7280)',\n }}\n >\n Why Trust This Author\n </h5>\n\n {/* Verified badge + years */}\n <div style={{ display: 'flex', flexWrap: 'wrap' as const, gap: 8, marginBottom: hasCredentials || hasExpertise || hasPublications || hasAwards ? 12 : 0 }}>\n {isVerified && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n padding: '4px 10px',\n borderRadius: 9999,\n fontSize: 12,\n fontWeight: 600,\n background: 'rgba(20, 184, 166, 0.1)',\n color: 'rgb(13, 148, 136)',\n border: '1px solid rgba(20, 184, 166, 0.2)',\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </svg>\n Verified Expert\n </span>\n )}\n {hasYears && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n padding: '4px 10px',\n borderRadius: 9999,\n fontSize: 12,\n fontWeight: 600,\n background: 'rgba(99, 102, 241, 0.1)',\n color: 'rgb(79, 70, 229)',\n border: '1px solid rgba(99, 102, 241, 0.2)',\n }}\n >\n {author.years_experience}+ Years Experience\n </span>\n )}\n </div>\n\n {/* Credentials */}\n {hasCredentials && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Credentials</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.credentials!.map((c, i) => (\n <li key={i}>{c}</li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Expertise pills */}\n {hasExpertise && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)', display: 'block', marginBottom: 6 }}>Expertise</span>\n <div style={{ display: 'flex', flexWrap: 'wrap' as const, gap: 6 }}>\n {author.expertise_areas!.map((area, i) => (\n <span\n key={i}\n style={{\n padding: '3px 10px',\n borderRadius: 9999,\n fontSize: 12,\n background: 'var(--sk-pill-bg, #e5e7eb)',\n color: 'var(--sk-text-secondary, #374151)',\n }}\n >\n {area}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {/* Featured publications */}\n {hasPublications && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Featured In</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.featured_publications!.map((pub, i) => (\n <li key={i}>{pub}</li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Awards */}\n {hasAwards && (\n <div>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Awards</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.awards!.map((award, i) => (\n <li key={i}>{award}</li>\n ))}\n </ul>\n </div>\n )}\n </div>\n )\n}\n\n// ============================================================================\n// AuthorCard\n// ============================================================================\n\nexport function AuthorCard({ author, showBio = true, showSocial = true, showTrustBlock = false, className }: AuthorCardProps) {\n return (\n <div className={className} style={{ display: 'flex', flexDirection: 'column' as const }}>\n <div style={{ display: 'flex', gap: 16, alignItems: 'flex-start' }}>\n {author.avatar_url && (\n <img\n src={author.avatar_url}\n alt={author.name}\n style={{\n width: 64,\n height: 64,\n borderRadius: '50%',\n objectFit: 'cover' as const,\n }}\n />\n )}\n <div>\n <h4 style={{ margin: 0 }}>{author.name}</h4>\n {author.title && (\n <p style={{ margin: '2px 0 0', fontSize: 13, color: 'var(--sk-text-tertiary, #6b7280)' }}>\n {author.title}{author.company ? ` at ${author.company}` : ''}\n </p>\n )}\n {showBio && author.bio && (\n <p style={{ margin: '4px 0', color: 'var(--sk-text-secondary)', fontSize: 14 }}>{author.bio}</p>\n )}\n {showSocial && getAuthorSocialLinks(author).length > 0 && (\n <div style={{ display: 'flex', gap: 12, marginTop: 8 }}>\n {getAuthorSocialLinks(author).map((link) => (\n <a key={link.label} href={link.href} target=\"_blank\" rel=\"noopener noreferrer\">\n {link.label}\n </a>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {showTrustBlock && <TrustBlock author={author} />}\n </div>\n )\n}\n\nexport { TrustBlock }\n","/**\n * @sonordev/site-kit/blog - Author Page Component (Server Component)\n *\n * Full author profile page with hero, trust block, social links, and articles grid.\n */\n\nimport React from 'react'\nimport type { AuthorPageProps, BlogAuthor, BlogPost } from './types'\nimport { TrustBlock } from './AuthorCard'\n// From './author-schema', NOT './server-core' — this component is exported from\n// the client-stamped `@sonordev/site-kit/blog` barrel, and server-core's fetches\n// carry the raw `x-api-key`. See ./author-schema for the full rationale.\nimport { generateAuthorSchema } from './author-schema'\nimport { readingTimeMinutes } from './reading-time'\nimport { getAuthorSocialLinks } from './author-social'\nimport { safeJsonLd } from '../seo/safeJsonLd'\n\n// ============================================================================\n// Sub-components\n// ============================================================================\n\nfunction AuthorHero({ author }: { author: BlogAuthor }) {\n return (\n <header\n className=\"sk-author-hero\"\n style={{\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n textAlign: 'center' as const,\n padding: '48px 24px 32px',\n }}\n >\n {author.avatar_url && (\n <img\n src={author.avatar_url}\n alt={author.name}\n width={120}\n height={120}\n style={{\n width: 120,\n height: 120,\n borderRadius: '50%',\n objectFit: 'cover' as const,\n marginBottom: 20,\n border: '3px solid var(--sk-border, #e5e7eb)',\n }}\n />\n )}\n <h1 style={{ margin: 0, fontSize: 32, fontWeight: 700, color: 'var(--sk-text-primary, #111827)' }}>\n {author.name}\n </h1>\n {(author.title || author.company) && (\n <p style={{ margin: '6px 0 0', fontSize: 16, color: 'var(--sk-text-secondary, #4b5563)' }}>\n {author.title}{author.title && author.company ? ' at ' : ''}{author.company}\n </p>\n )}\n {author.bio && (\n <p\n style={{\n margin: '16px auto 0',\n maxWidth: 640,\n fontSize: 15,\n lineHeight: 1.7,\n color: 'var(--sk-text-secondary, #4b5563)',\n }}\n >\n {author.bio}\n </p>\n )}\n\n {/* Social links */}\n <SocialLinks author={author} />\n </header>\n )\n}\n\nfunction SocialLinks({ author }: { author: BlogAuthor }) {\n const links = getAuthorSocialLinks(author)\n\n if (links.length === 0) return null\n\n return (\n <div style={{ display: 'flex', gap: 16, marginTop: 16 }}>\n {links.map((link) => (\n <a\n key={link.label}\n href={link.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '6px 14px',\n borderRadius: 8,\n fontSize: 13,\n fontWeight: 500,\n color: 'rgb(13, 148, 136)',\n background: 'rgba(20, 184, 166, 0.08)',\n border: '1px solid rgba(20, 184, 166, 0.15)',\n textDecoration: 'none',\n }}\n >\n {link.label}\n </a>\n ))}\n </div>\n )\n}\n\nfunction PostCard({ post, basePath }: { post: BlogPost; basePath: string }) {\n const href = `${basePath}/${post.slug}`\n const date = post.published_at\n ? new Date(post.published_at).toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' })\n : null\n\n return (\n <article\n className=\"sk-author-post-card\"\n style={{\n borderRadius: 12,\n border: '1px solid var(--sk-border, #e5e7eb)',\n overflow: 'hidden',\n background: 'var(--sk-card-bg, #fff)',\n display: 'flex',\n flexDirection: 'column' as const,\n }}\n >\n {post.featured_image && (\n <a href={href} style={{ display: 'block', overflow: 'hidden', aspectRatio: '16/9' }}>\n <img\n src={post.featured_image}\n alt={post.featured_image_alt || post.title}\n style={{ width: '100%', height: '100%', objectFit: 'cover' as const }}\n loading=\"lazy\"\n />\n </a>\n )}\n <div style={{ padding: 20, flex: 1, display: 'flex', flexDirection: 'column' as const }}>\n {date && (\n <time style={{ fontSize: 12, color: 'var(--sk-text-tertiary, #6b7280)', marginBottom: 6 }}>{date}</time>\n )}\n <a href={href} style={{ textDecoration: 'none', color: 'inherit' }}>\n <h3 style={{ margin: '0 0 8px', fontSize: 18, fontWeight: 600, lineHeight: 1.3, color: 'var(--sk-text-primary, #111827)' }}>\n {post.title}\n </h3>\n </a>\n {post.excerpt && (\n <p style={{ margin: 0, fontSize: 14, lineHeight: 1.6, color: 'var(--sk-text-secondary, #4b5563)', flex: 1 }}>\n {post.excerpt}\n </p>\n )}\n {readingTimeMinutes(post) && (\n <span style={{ fontSize: 12, color: 'var(--sk-text-tertiary, #6b7280)', marginTop: 12 }}>\n {readingTimeMinutes(post)} min read\n </span>\n )}\n </div>\n </article>\n )\n}\n\n// ============================================================================\n// AuthorPage\n// ============================================================================\n\nexport function AuthorPage({ author, posts, basePath = '/blog' }: AuthorPageProps) {\n const schema = generateAuthorSchema(author)\n\n return (\n <div className=\"sk-author-page\">\n {/* JSON-LD */}\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{ __html: safeJsonLd(schema) }}\n />\n\n {/* Hero */}\n <AuthorHero author={author} />\n\n {/* Trust block */}\n <div style={{ maxWidth: 640, margin: '0 auto', padding: '0 24px' }}>\n <TrustBlock author={author} />\n </div>\n\n {/* Articles */}\n {posts.length > 0 && (\n <section style={{ maxWidth: 1080, margin: '40px auto 0', padding: '0 24px 48px' }}>\n <h2 style={{ fontSize: 22, fontWeight: 600, marginBottom: 24, color: 'var(--sk-text-primary, #111827)' }}>\n Articles by {author.name}\n {typeof author.post_count === 'number' && (\n <span style={{ fontWeight: 400, fontSize: 15, color: 'var(--sk-text-tertiary, #6b7280)', marginLeft: 8 }}>\n ({author.post_count})\n </span>\n )}\n </h2>\n <div\n className=\"sk-author-posts-grid\"\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))',\n gap: 24,\n }}\n >\n {posts.map((post) => (\n <PostCard key={post.id} post={post} basePath={basePath} />\n ))}\n </div>\n </section>\n )}\n </div>\n )\n}\n","/**\n * @sonordev/site-kit/blog - Table of Contents Component\n */\n\n'use client'\n\nimport React, { useState, useEffect } from 'react'\nimport type { TableOfContentsProps } from './types'\n\ninterface TocItem {\n id: string\n text: string\n level: number\n}\n\nfunction parseHeadings(content: string): TocItem[] {\n // Extract headings from HTML content\n const headingRegex = /<h([2-4])[^>]*id=\"([^\"]*)\"[^>]*>(.*?)<\\/h[2-4]>/gi\n const items: TocItem[] = []\n let match\n\n while ((match = headingRegex.exec(content)) !== null) {\n items.push({\n level: parseInt(match[1]),\n id: match[2],\n text: match[3].replace(/<[^>]*>/g, ''), // Strip any nested HTML\n })\n }\n\n return items\n}\n\nexport function TableOfContents({\n content,\n className,\n maxDepth = 3,\n}: TableOfContentsProps) {\n const [activeId, setActiveId] = useState<string>('')\n const items = parseHeadings(content).filter((item) => item.level <= maxDepth)\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n setActiveId(entry.target.id)\n }\n })\n },\n {\n rootMargin: '-20% 0% -35% 0%',\n threshold: 0,\n }\n )\n\n // Observe all headings\n items.forEach((item) => {\n const element = document.getElementById(item.id)\n if (element) {\n observer.observe(element)\n }\n })\n\n return () => observer.disconnect()\n }, [items])\n\n if (items.length === 0) return null\n\n const handleClick = (id: string) => {\n const element = document.getElementById(id)\n if (element) {\n element.scrollIntoView({ behavior: 'smooth' })\n }\n }\n\n return (\n <nav className={className} aria-label=\"Table of contents\">\n <h4 style={{ margin: '0 0 12px', fontSize: 14, fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.05em' }}>\n On This Page\n </h4>\n <ul style={{ listStyle: 'none', margin: 0, padding: 0 }}>\n {items.map((item) => (\n <li\n key={item.id}\n style={{\n paddingLeft: (item.level - 2) * 12,\n marginBottom: 8,\n }}\n >\n <button\n onClick={() => handleClick(item.id)}\n style={{\n all: 'unset',\n cursor: 'pointer',\n fontSize: 14,\n color: activeId === item.id ? 'var(--sk-primary-hover)' : 'var(--sk-text-secondary)',\n fontWeight: activeId === item.id ? 500 : 400,\n transition: 'color 0.2s',\n }}\n >\n {item.text}\n </button>\n </li>\n ))}\n </ul>\n </nav>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/blog/NewsletterWidget.tsx","../../src/blog/AuthorCard.tsx","../../src/blog/AuthorPage.tsx","../../src/blog/TableOfContents.tsx"],"names":["React","useState","jsx","Suspense","NewsletterShell","jsxs","getAuthorSocialLinks","resolveBlogArtwork","blogArtworkImageStyle","readingTimeMinutes","createBlogRoutes","generateAuthorSchema","safeJsonLd","useEffect"],"mappings":"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","file":"index.js","sourcesContent":["'use client'\n\n/**\n * @sonordev/site-kit blog — newsletter signup widget\n *\n * Two working modes (the old version rendered a form whose submit handler\n * discarded the email):\n *\n * - `onSubmit`: the site owns delivery — we await the callback.\n * - `formSlug`: the widget drives the managed-forms rail (useForm), so\n * submissions inherit Sonor's newsletter routing (email_subscribers),\n * honeypot, reCAPTCHA, and attribution for free.\n *\n * `onSubmit` wins when both are set. With neither, the widget renders\n * nothing and warns — a dead form that swallows emails must not resurrect.\n *\n * Lives in its own module (not BlogSidebar.tsx) on purpose: it needs hooks,\n * and BlogSidebar is also bundled into the un-stamped server entry\n * blog/server-ui, where hooks would enter the react-server graph.\n */\n\nimport React, { Suspense, useState } from 'react'\nimport { NewsletterShell } from './NewsletterShell'\n\n// Lazy: the managed-forms mode drags the whole forms engine (useForm,\n// submit rail, sonorFetch, site token) — ~10KB gzipped — which most blog\n// consumers never render. The dynamic import keeps it out of the eager\n// blog bundle; tsup stamps the split chunk 'use client'.\nconst ManagedNewsletterForm = React.lazy(() => import('./ManagedNewsletterForm'))\n\nexport interface NewsletterWidgetProps {\n title?: string\n description?: string\n buttonText?: string\n /** Site-owned delivery. Wins over formSlug when both are set. */\n onSubmit?: (email: string) => Promise<void>\n /** Slug of a managed Sonor form (newsletter routing) to submit through. */\n formSlug?: string\n successMessage?: string\n}\n\nexport function NewsletterWidget({\n title = 'Subscribe to Our Newsletter',\n description = 'Get the latest posts delivered straight to your inbox.',\n buttonText = 'Subscribe',\n onSubmit,\n formSlug,\n successMessage = \"You're subscribed — thanks!\",\n}: NewsletterWidgetProps) {\n const [email, setEmail] = useState('')\n const [status, setStatus] = useState<'idle' | 'submitting' | 'success' | 'error'>('idle')\n const [errorMessage, setErrorMessage] = useState<string | null>(null)\n\n if (!onSubmit && formSlug) {\n return (\n <Suspense fallback={null}>\n <ManagedNewsletterForm\n key={formSlug}\n formSlug={formSlug}\n title={title}\n description={description}\n buttonText={buttonText}\n successMessage={successMessage}\n />\n </Suspense>\n )\n }\n\n if (!onSubmit) {\n console.warn(\n '[Blog] NewsletterWidget needs an onSubmit callback or a formSlug — rendering nothing rather than a form that discards emails.'\n )\n return null\n }\n\n return (\n <NewsletterShell\n title={title}\n description={description}\n buttonText={buttonText}\n email={email}\n onEmailChange={setEmail}\n onFormSubmit={(e) => {\n e.preventDefault()\n setStatus('submitting')\n setErrorMessage(null)\n onSubmit(email)\n .then(() => setStatus('success'))\n .catch((err) => {\n setStatus('error')\n setErrorMessage(err instanceof Error ? err.message : null)\n })\n }}\n status={status}\n successMessage={successMessage}\n errorMessage={errorMessage}\n />\n )\n}\n","/**\n * @sonordev/site-kit/blog - Author Card Component\n */\n\nimport React from 'react'\nimport type { AuthorCardProps, BlogAuthor } from './types'\nimport { getAuthorSocialLinks } from './author-social'\n\n// ============================================================================\n// Trust Block (E-E-A-T)\n// ============================================================================\n\nfunction TrustBlock({ author }: { author: BlogAuthor }) {\n const hasYears = typeof author.years_experience === 'number' && author.years_experience > 0\n const hasCredentials = author.credentials && author.credentials.length > 0\n const hasExpertise = author.expertise_areas && author.expertise_areas.length > 0\n const hasPublications = author.featured_publications && author.featured_publications.length > 0\n const hasAwards = author.awards && author.awards.length > 0\n const isVerified = author.is_subject_matter_expert || author.has_verified_credentials\n\n const hasAnything = hasYears || hasCredentials || hasExpertise || hasPublications || hasAwards || isVerified\n if (!hasAnything) return null\n\n return (\n <div\n className=\"sk-author-trust\"\n style={{\n marginTop: 16,\n padding: 16,\n borderRadius: 10,\n border: '1px solid var(--sk-border, #e5e7eb)',\n background: 'var(--sk-surface, #f9fafb)',\n }}\n >\n <h5\n style={{\n margin: '0 0 12px',\n fontSize: 13,\n fontWeight: 600,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: 'var(--sk-text-tertiary, #6b7280)',\n }}\n >\n Why Trust This Author\n </h5>\n\n {/* Verified badge + years */}\n <div style={{ display: 'flex', flexWrap: 'wrap' as const, gap: 8, marginBottom: hasCredentials || hasExpertise || hasPublications || hasAwards ? 12 : 0 }}>\n {isVerified && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n padding: '4px 10px',\n borderRadius: 9999,\n fontSize: 12,\n fontWeight: 600,\n background: 'rgba(20, 184, 166, 0.1)',\n color: 'rgb(13, 148, 136)',\n border: '1px solid rgba(20, 184, 166, 0.2)',\n }}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </svg>\n Verified Expert\n </span>\n )}\n {hasYears && (\n <span\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n padding: '4px 10px',\n borderRadius: 9999,\n fontSize: 12,\n fontWeight: 600,\n background: 'rgba(99, 102, 241, 0.1)',\n color: 'rgb(79, 70, 229)',\n border: '1px solid rgba(99, 102, 241, 0.2)',\n }}\n >\n {author.years_experience}+ Years Experience\n </span>\n )}\n </div>\n\n {/* Credentials */}\n {hasCredentials && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Credentials</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.credentials!.map((c, i) => (\n <li key={i}>{c}</li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Expertise pills */}\n {hasExpertise && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)', display: 'block', marginBottom: 6 }}>Expertise</span>\n <div style={{ display: 'flex', flexWrap: 'wrap' as const, gap: 6 }}>\n {author.expertise_areas!.map((area, i) => (\n <span\n key={i}\n style={{\n padding: '3px 10px',\n borderRadius: 9999,\n fontSize: 12,\n background: 'var(--sk-pill-bg, #e5e7eb)',\n color: 'var(--sk-text-secondary, #374151)',\n }}\n >\n {area}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {/* Featured publications */}\n {hasPublications && (\n <div style={{ marginBottom: 10 }}>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Featured In</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.featured_publications!.map((pub, i) => (\n <li key={i}>{pub}</li>\n ))}\n </ul>\n </div>\n )}\n\n {/* Awards */}\n {hasAwards && (\n <div>\n <span style={{ fontSize: 12, fontWeight: 600, color: 'var(--sk-text-secondary, #374151)' }}>Awards</span>\n <ul style={{ margin: '4px 0 0', padding: '0 0 0 18px', fontSize: 13, color: 'var(--sk-text-secondary, #4b5563)', lineHeight: 1.6 }}>\n {author.awards!.map((award, i) => (\n <li key={i}>{award}</li>\n ))}\n </ul>\n </div>\n )}\n </div>\n )\n}\n\n// ============================================================================\n// AuthorCard\n// ============================================================================\n\nexport function AuthorCard({ author, showBio = true, showSocial = true, showTrustBlock = false, className }: AuthorCardProps) {\n return (\n <div className={className} style={{ display: 'flex', flexDirection: 'column' as const }}>\n <div style={{ display: 'flex', gap: 16, alignItems: 'flex-start' }}>\n {author.avatar_url && (\n <img\n src={author.avatar_url}\n alt={author.name}\n style={{\n width: 64,\n height: 64,\n borderRadius: '50%',\n objectFit: 'cover' as const,\n }}\n />\n )}\n <div>\n <h4 style={{ margin: 0 }}>{author.name}</h4>\n {author.title && (\n <p style={{ margin: '2px 0 0', fontSize: 13, color: 'var(--sk-text-tertiary, #6b7280)' }}>\n {author.title}{author.company ? ` at ${author.company}` : ''}\n </p>\n )}\n {showBio && author.bio && (\n <p style={{ margin: '4px 0', color: 'var(--sk-text-secondary)', fontSize: 14 }}>{author.bio}</p>\n )}\n {showSocial && getAuthorSocialLinks(author).length > 0 && (\n <div style={{ display: 'flex', gap: 12, marginTop: 8 }}>\n {getAuthorSocialLinks(author).map((link) => (\n <a key={link.label} href={link.href} target=\"_blank\" rel=\"noopener noreferrer\">\n {link.label}\n </a>\n ))}\n </div>\n )}\n </div>\n </div>\n\n {showTrustBlock && <TrustBlock author={author} />}\n </div>\n )\n}\n\nexport { TrustBlock }\n","/**\n * @sonordev/site-kit/blog - Author Page Component (Server Component)\n *\n * Full author profile page with hero, trust block, social links, and articles grid.\n */\n\nimport React from 'react'\nimport type { AuthorPageProps, BlogAuthor, BlogPost } from './types'\nimport { TrustBlock } from './AuthorCard'\n// From './author-schema', NOT './server-core' — this component is exported from\n// the client-stamped `@sonordev/site-kit/blog` barrel, and server-core's fetches\n// carry the raw `x-api-key`. See ./author-schema for the full rationale.\nimport { generateAuthorSchema } from './author-schema'\nimport { readingTimeMinutes } from './reading-time'\nimport { getAuthorSocialLinks } from './author-social'\nimport { safeJsonLd } from '../seo/safeJsonLd'\nimport { blogArtworkImageStyle, resolveBlogArtwork } from './artwork'\nimport { createBlogRoutes } from './routes'\n\n// ============================================================================\n// Sub-components\n// ============================================================================\n\nfunction AuthorHero({ author }: { author: BlogAuthor }) {\n return (\n <header\n className=\"sk-author-hero\"\n style={{\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'center',\n textAlign: 'center' as const,\n padding: '48px 24px 32px',\n }}\n >\n {author.avatar_url && (\n <img\n src={author.avatar_url}\n alt={author.name}\n width={120}\n height={120}\n style={{\n width: 120,\n height: 120,\n borderRadius: '50%',\n objectFit: 'cover' as const,\n marginBottom: 20,\n border: '3px solid var(--sk-border, #e5e7eb)',\n }}\n />\n )}\n <h1 style={{ margin: 0, fontSize: 32, fontWeight: 700, color: 'var(--sk-text-primary, #111827)' }}>\n {author.name}\n </h1>\n {(author.title || author.company) && (\n <p style={{ margin: '6px 0 0', fontSize: 16, color: 'var(--sk-text-secondary, #4b5563)' }}>\n {author.title}{author.title && author.company ? ' at ' : ''}{author.company}\n </p>\n )}\n {author.bio && (\n <p\n style={{\n margin: '16px auto 0',\n maxWidth: 640,\n fontSize: 15,\n lineHeight: 1.7,\n color: 'var(--sk-text-secondary, #4b5563)',\n }}\n >\n {author.bio}\n </p>\n )}\n\n {/* Social links */}\n <SocialLinks author={author} />\n </header>\n )\n}\n\nfunction SocialLinks({ author }: { author: BlogAuthor }) {\n const links = getAuthorSocialLinks(author)\n\n if (links.length === 0) return null\n\n return (\n <div style={{ display: 'flex', gap: 16, marginTop: 16 }}>\n {links.map((link) => (\n <a\n key={link.label}\n href={link.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 6,\n padding: '6px 14px',\n borderRadius: 8,\n fontSize: 13,\n fontWeight: 500,\n color: 'rgb(13, 148, 136)',\n background: 'rgba(20, 184, 166, 0.08)',\n border: '1px solid rgba(20, 184, 166, 0.15)',\n textDecoration: 'none',\n }}\n >\n {link.label}\n </a>\n ))}\n </div>\n )\n}\n\nfunction PostCard({ post, href }: { post: BlogPost; href: string }) {\n const artwork = resolveBlogArtwork(post)\n const date = post.published_at\n ? new Date(post.published_at).toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' })\n : null\n\n return (\n <article\n className=\"sk-author-post-card\"\n style={{\n borderRadius: 12,\n border: '1px solid var(--sk-border, #e5e7eb)',\n overflow: 'hidden',\n background: 'var(--sk-card-bg, #fff)',\n display: 'flex',\n flexDirection: 'column' as const,\n }}\n >\n {artwork.src && (\n <a href={href} style={{ display: 'block', overflow: 'hidden', aspectRatio: artwork.composed ? undefined : '16/9' }}>\n <img\n src={artwork.src}\n alt={artwork.alt}\n data-sk-composed-card={artwork.composed || undefined}\n style={{ width: '100%', height: '100%', objectFit: 'cover' as const, ...blogArtworkImageStyle(artwork) }}\n loading=\"lazy\"\n />\n </a>\n )}\n <div style={{ padding: 20, flex: 1, display: 'flex', flexDirection: 'column' as const }}>\n {date && (\n <time style={{ fontSize: 12, color: 'var(--sk-text-tertiary, #6b7280)', marginBottom: 6 }}>{date}</time>\n )}\n <a href={href} style={{ textDecoration: 'none', color: 'inherit' }}>\n <h3 style={{ margin: '0 0 8px', fontSize: 18, fontWeight: 600, lineHeight: 1.3, color: 'var(--sk-text-primary, #111827)' }}>\n {post.title}\n </h3>\n </a>\n {post.excerpt && (\n <p style={{ margin: 0, fontSize: 14, lineHeight: 1.6, color: 'var(--sk-text-secondary, #4b5563)', flex: 1 }}>\n {post.excerpt}\n </p>\n )}\n {readingTimeMinutes(post) && (\n <span style={{ fontSize: 12, color: 'var(--sk-text-tertiary, #6b7280)', marginTop: 12 }}>\n {readingTimeMinutes(post)} min read\n </span>\n )}\n </div>\n </article>\n )\n}\n\n// ============================================================================\n// AuthorPage\n// ============================================================================\n\nexport function AuthorPage({ author, posts, basePath, routing }: AuthorPageProps) {\n const routes = createBlogRoutes({ basePath, ...routing })\n const schema = generateAuthorSchema(author)\n\n return (\n <div className=\"sk-author-page\">\n {/* JSON-LD */}\n <script\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{ __html: safeJsonLd(schema) }}\n />\n\n {/* Hero */}\n <AuthorHero author={author} />\n\n {/* Trust block */}\n <div style={{ maxWidth: 640, margin: '0 auto', padding: '0 24px' }}>\n <TrustBlock author={author} />\n </div>\n\n {/* Articles */}\n {posts.length > 0 && (\n <section style={{ maxWidth: 1080, margin: '40px auto 0', padding: '0 24px 48px' }}>\n <h2 style={{ fontSize: 22, fontWeight: 600, marginBottom: 24, color: 'var(--sk-text-primary, #111827)' }}>\n Articles by {author.name}\n {typeof author.post_count === 'number' && (\n <span style={{ fontWeight: 400, fontSize: 15, color: 'var(--sk-text-tertiary, #6b7280)', marginLeft: 8 }}>\n ({author.post_count})\n </span>\n )}\n </h2>\n <div\n className=\"sk-author-posts-grid\"\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))',\n gap: 24,\n }}\n >\n {posts.map((post) => (\n <PostCard key={post.id} post={post} href={routes.post(post)} />\n ))}\n </div>\n </section>\n )}\n </div>\n )\n}\n","/**\n * @sonordev/site-kit/blog - Table of Contents Component\n */\n\n'use client'\n\nimport React, { useState, useEffect } from 'react'\nimport type { TableOfContentsProps } from './types'\n\ninterface TocItem {\n id: string\n text: string\n level: number\n}\n\nfunction parseHeadings(content: string): TocItem[] {\n // Extract headings from HTML content\n const headingRegex = /<h([2-4])[^>]*id=\"([^\"]*)\"[^>]*>(.*?)<\\/h[2-4]>/gi\n const items: TocItem[] = []\n let match\n\n while ((match = headingRegex.exec(content)) !== null) {\n items.push({\n level: parseInt(match[1]),\n id: match[2],\n text: match[3].replace(/<[^>]*>/g, ''), // Strip any nested HTML\n })\n }\n\n return items\n}\n\nexport function TableOfContents({\n content,\n className,\n maxDepth = 3,\n}: TableOfContentsProps) {\n const [activeId, setActiveId] = useState<string>('')\n const items = parseHeadings(content).filter((item) => item.level <= maxDepth)\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n setActiveId(entry.target.id)\n }\n })\n },\n {\n rootMargin: '-20% 0% -35% 0%',\n threshold: 0,\n }\n )\n\n // Observe all headings\n items.forEach((item) => {\n const element = document.getElementById(item.id)\n if (element) {\n observer.observe(element)\n }\n })\n\n return () => observer.disconnect()\n }, [items])\n\n if (items.length === 0) return null\n\n const handleClick = (id: string) => {\n const element = document.getElementById(id)\n if (element) {\n element.scrollIntoView({ behavior: 'smooth' })\n }\n }\n\n return (\n <nav className={className} aria-label=\"Table of contents\">\n <h4 style={{ margin: '0 0 12px', fontSize: 14, fontWeight: 600, textTransform: 'uppercase', letterSpacing: '0.05em' }}>\n On This Page\n </h4>\n <ul style={{ listStyle: 'none', margin: 0, padding: 0 }}>\n {items.map((item) => (\n <li\n key={item.id}\n style={{\n paddingLeft: (item.level - 2) * 12,\n marginBottom: 8,\n }}\n >\n <button\n onClick={() => handleClick(item.id)}\n style={{\n all: 'unset',\n cursor: 'pointer',\n fontSize: 14,\n color: activeId === item.id ? 'var(--sk-primary-hover)' : 'var(--sk-text-secondary)',\n fontWeight: activeId === item.id ? 500 : 400,\n transition: 'color 0.2s',\n }}\n >\n {item.text}\n </button>\n </li>\n ))}\n </ul>\n </nav>\n )\n}\n"]}
|
package/dist/blog/index.mjs
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
export { BlogFAQ } from '../chunk-O237KKCX.mjs';
|
|
3
3
|
import { NewsletterShell } from '../chunk-AK6JZ3OE.mjs';
|
|
4
|
-
import { getAuthorSocialLinks, readingTimeMinutes } from '../chunk-
|
|
5
|
-
export { BlogLayout, BlogList, BlogPage, BlogPost, BlogPostPage, BlogSidebar, CategoryPage, ClusterNavigation, RelatedPosts, ServiceCallout, ServiceCallouts, addExternalLinkTargets, normalizeSiteHost, resolveBlogSiteUrl } from '../chunk-
|
|
4
|
+
import { getAuthorSocialLinks, readingTimeMinutes } from '../chunk-LIYSLNEK.mjs';
|
|
5
|
+
export { BlogLayout, BlogList, BlogPage, BlogPost, BlogPostPage, BlogSidebar, CategoryPage, ClusterNavigation, RelatedPosts, ServiceCallout, ServiceCallouts, addExternalLinkTargets, normalizeSiteHost, resolveBlogSiteUrl } from '../chunk-LIYSLNEK.mjs';
|
|
6
6
|
import '../chunk-YFX3Q56O.mjs';
|
|
7
|
-
import { generateAuthorSchema } from '../chunk-
|
|
7
|
+
import { createBlogRoutes, generateAuthorSchema, resolveBlogArtwork, blogArtworkImageStyle } from '../chunk-4B4S56WJ.mjs';
|
|
8
|
+
export { blogCategorySlug, createBlogRoutes, resolveBlogArtwork, resolveBlogPostUrl, resolveBlogUrl } from '../chunk-4B4S56WJ.mjs';
|
|
8
9
|
import { safeJsonLd } from '../chunk-662YHKWW.mjs';
|
|
9
10
|
import '../chunk-BEXTDHO4.mjs';
|
|
10
11
|
import React, { useState, Suspense, useEffect } from 'react';
|
|
11
12
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
12
13
|
|
|
13
|
-
var ManagedNewsletterForm = React.lazy(() => import('../ManagedNewsletterForm-
|
|
14
|
+
var ManagedNewsletterForm = React.lazy(() => import('../ManagedNewsletterForm-QJSVH23S.mjs'));
|
|
14
15
|
function NewsletterWidget({
|
|
15
16
|
title = "Subscribe to Our Newsletter",
|
|
16
17
|
description = "Get the latest posts delivered straight to your inbox.",
|
|
@@ -288,8 +289,8 @@ function SocialLinks({ author }) {
|
|
|
288
289
|
link.label
|
|
289
290
|
)) });
|
|
290
291
|
}
|
|
291
|
-
function PostCard({ post,
|
|
292
|
-
const
|
|
292
|
+
function PostCard({ post, href }) {
|
|
293
|
+
const artwork = resolveBlogArtwork(post);
|
|
293
294
|
const date = post.published_at ? new Date(post.published_at).toLocaleDateString("en-US", { year: "numeric", month: "short", day: "numeric" }) : null;
|
|
294
295
|
return /* @__PURE__ */ jsxs(
|
|
295
296
|
"article",
|
|
@@ -304,12 +305,13 @@ function PostCard({ post, basePath }) {
|
|
|
304
305
|
flexDirection: "column"
|
|
305
306
|
},
|
|
306
307
|
children: [
|
|
307
|
-
|
|
308
|
+
artwork.src && /* @__PURE__ */ jsx("a", { href, style: { display: "block", overflow: "hidden", aspectRatio: artwork.composed ? void 0 : "16/9" }, children: /* @__PURE__ */ jsx(
|
|
308
309
|
"img",
|
|
309
310
|
{
|
|
310
|
-
src:
|
|
311
|
-
alt:
|
|
312
|
-
|
|
311
|
+
src: artwork.src,
|
|
312
|
+
alt: artwork.alt,
|
|
313
|
+
"data-sk-composed-card": artwork.composed || void 0,
|
|
314
|
+
style: { width: "100%", height: "100%", objectFit: "cover", ...blogArtworkImageStyle(artwork) },
|
|
313
315
|
loading: "lazy"
|
|
314
316
|
}
|
|
315
317
|
) }),
|
|
@@ -326,7 +328,8 @@ function PostCard({ post, basePath }) {
|
|
|
326
328
|
}
|
|
327
329
|
);
|
|
328
330
|
}
|
|
329
|
-
function AuthorPage({ author, posts, basePath
|
|
331
|
+
function AuthorPage({ author, posts, basePath, routing }) {
|
|
332
|
+
const routes = createBlogRoutes({ basePath, ...routing });
|
|
330
333
|
const schema = generateAuthorSchema(author);
|
|
331
334
|
return /* @__PURE__ */ jsxs("div", { className: "sk-author-page", children: [
|
|
332
335
|
/* @__PURE__ */ jsx(
|
|
@@ -357,7 +360,7 @@ function AuthorPage({ author, posts, basePath = "/blog" }) {
|
|
|
357
360
|
gridTemplateColumns: "repeat(auto-fill, minmax(300px, 1fr))",
|
|
358
361
|
gap: 24
|
|
359
362
|
},
|
|
360
|
-
children: posts.map((post) => /* @__PURE__ */ jsx(PostCard, { post,
|
|
363
|
+
children: posts.map((post) => /* @__PURE__ */ jsx(PostCard, { post, href: routes.post(post) }, post.id))
|
|
361
364
|
}
|
|
362
365
|
)
|
|
363
366
|
] })
|