@sonordev/site-kit 5.7.0 → 5.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/agent-manifest.json +14 -2
- package/dist/AnalyticsProvider-ERNSZ4DH.mjs +12 -0
- package/dist/{AnalyticsProvider-EWF7JN2X.mjs.map → AnalyticsProvider-ERNSZ4DH.mjs.map} +1 -1
- package/dist/AnalyticsProvider-HE6V5UJD.js +33 -0
- package/dist/{AnalyticsProvider-GJFG7YXA.js.map → AnalyticsProvider-HE6V5UJD.js.map} +1 -1
- package/dist/{BlogViewTracker-CKYG6MYU.mjs → BlogViewTracker-2NQ5LBVR.mjs} +13 -10
- package/dist/BlogViewTracker-2NQ5LBVR.mjs.map +1 -0
- package/dist/{BlogViewTracker-2D3IJPJK.js → BlogViewTracker-4OGWSC2Q.js} +14 -11
- package/dist/BlogViewTracker-4OGWSC2Q.js.map +1 -0
- package/dist/ChatWidget-67CHHONZ.js +24 -0
- package/dist/{ChatWidget-AWP6GBVW.js.map → ChatWidget-67CHHONZ.js.map} +1 -1
- package/dist/ChatWidget-T4RICLLT.mjs +15 -0
- package/dist/{ChatWidget-Z5QXDZP3.mjs.map → ChatWidget-T4RICLLT.mjs.map} +1 -1
- package/dist/EngageWidget-TDW2ZI3Q.js +21 -0
- package/dist/{EngageWidget-VT4DYXVO.js.map → EngageWidget-TDW2ZI3Q.js.map} +1 -1
- package/dist/EngageWidget-WXEQTV4X.mjs +12 -0
- package/dist/{EngageWidget-BKEY5TPO.mjs.map → EngageWidget-WXEQTV4X.mjs.map} +1 -1
- package/dist/{FileField-62ZWZMQK.js → FileField-DEVOXJSO.js} +6 -6
- package/dist/{FileField-62ZWZMQK.js.map → FileField-DEVOXJSO.js.map} +1 -1
- package/dist/{FileField-JJN5QKDL.mjs → FileField-Y5YM365S.mjs} +5 -5
- package/dist/{FileField-JJN5QKDL.mjs.map → FileField-Y5YM365S.mjs.map} +1 -1
- package/dist/{FormSpotlight-URS4XRS7.js → FormSpotlight-4Q5FM3YS.js} +25 -21
- package/dist/FormSpotlight-4Q5FM3YS.js.map +1 -0
- package/dist/{FormSpotlight-OTFB6QM5.mjs → FormSpotlight-T3ASGUYB.mjs} +11 -7
- package/dist/FormSpotlight-T3ASGUYB.mjs.map +1 -0
- package/dist/{FormStage-FVKMIV73.js → FormStage-PSAIPZBS.js} +20 -15
- package/dist/FormStage-PSAIPZBS.js.map +1 -0
- package/dist/{FormStage-VPGOCMAV.mjs → FormStage-U5V4MI5Q.mjs} +9 -4
- package/dist/FormStage-U5V4MI5Q.mjs.map +1 -0
- package/dist/ManagedForm-EAZOMNSL.mjs +16 -0
- package/dist/{ManagedForm-CXVDJMHN.mjs.map → ManagedForm-EAZOMNSL.mjs.map} +1 -1
- package/dist/ManagedForm-R6DJXU34.js +25 -0
- package/dist/{ManagedForm-FGNTDGED.js.map → ManagedForm-R6DJXU34.js.map} +1 -1
- package/dist/{ManagedNewsletterForm-SQYB4BZU.mjs → ManagedNewsletterForm-5RY3TWPQ.mjs} +9 -7
- package/dist/ManagedNewsletterForm-5RY3TWPQ.mjs.map +1 -0
- package/dist/{ManagedNewsletterForm-3O5L44AZ.js → ManagedNewsletterForm-VX6GMZXJ.js} +10 -8
- package/dist/ManagedNewsletterForm-VX6GMZXJ.js.map +1 -0
- package/dist/{SignalCore-RFBOBNLQ.js → SignalCore-MWHF2WG4.js} +14 -20
- package/dist/SignalCore-MWHF2WG4.js.map +1 -0
- package/dist/{SignalCore-M2PKKIGH.mjs → SignalCore-ZT6EQGV3.mjs} +8 -14
- package/dist/SignalCore-ZT6EQGV3.mjs.map +1 -0
- package/dist/SitemapSync-OG4TQLDB.mjs +9 -0
- package/dist/{SitemapSync-4OVMIIGC.mjs.map → SitemapSync-OG4TQLDB.mjs.map} +1 -1
- package/dist/SitemapSync-Z62BGZMV.js +18 -0
- package/dist/{SitemapSync-RK3SQ4M2.js.map → SitemapSync-Z62BGZMV.js.map} +1 -1
- package/dist/analytics/AnalyticsProvider.d.ts.map +1 -1
- package/dist/analytics/index.js +10 -9
- package/dist/analytics/index.mjs +5 -4
- package/dist/api-D745LGGU.mjs +0 -1
- package/dist/api-XR5APCH3.js +0 -1
- package/dist/blog/BlogLayout.d.ts +3 -1
- package/dist/blog/BlogLayout.d.ts.map +1 -1
- package/dist/blog/BlogList.d.ts +7 -1
- package/dist/blog/BlogList.d.ts.map +1 -1
- package/dist/blog/BlogPost.d.ts +20 -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/BlogViewTracker.d.ts +8 -2
- package/dist/blog/BlogViewTracker.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 +5 -2
- package/dist/blog/ClusterNavigation.d.ts.map +1 -1
- package/dist/blog/RelatedPosts.d.ts +3 -1
- package/dist/blog/RelatedPosts.d.ts.map +1 -1
- package/dist/blog/index.d.ts +1 -1
- package/dist/blog/index.d.ts.map +1 -1
- package/dist/blog/index.js +40 -31
- package/dist/blog/index.js.map +1 -1
- package/dist/blog/index.mjs +11 -6
- package/dist/blog/index.mjs.map +1 -1
- package/dist/blog/processBlogHtml.d.ts +19 -2
- package/dist/blog/processBlogHtml.d.ts.map +1 -1
- package/dist/blog/public-reads.d.ts +27 -0
- package/dist/blog/public-reads.d.ts.map +1 -0
- package/dist/blog/server-core.d.ts +76 -10
- package/dist/blog/server-core.d.ts.map +1 -1
- package/dist/blog/server-ui.js +29 -23
- package/dist/blog/server-ui.js.map +1 -1
- package/dist/blog/server-ui.mjs +12 -6
- package/dist/blog/server-ui.mjs.map +1 -1
- package/dist/blog/server.d.ts +76 -10
- package/dist/blog/server.d.ts.map +1 -1
- package/dist/blog/server.js +54 -47
- package/dist/blog/server.mjs +5 -2
- package/dist/brand/extract-brand-profile.d.ts +36 -2
- package/dist/brand/extract-brand-profile.d.ts.map +1 -1
- package/dist/{chunk-MW2M6O7A.mjs → chunk-26EKSVXM.mjs} +4 -4
- package/dist/{chunk-MW2M6O7A.mjs.map → chunk-26EKSVXM.mjs.map} +1 -1
- package/dist/{chunk-D553G64G.js → chunk-2HPQTRUB.js} +13 -13
- package/dist/{chunk-D553G64G.js.map → chunk-2HPQTRUB.js.map} +1 -1
- package/dist/{chunk-BFJOZ3MU.mjs → chunk-3EY5E35M.mjs} +36 -71
- package/dist/chunk-3EY5E35M.mjs.map +1 -0
- package/dist/{chunk-BUJWXSYZ.mjs → chunk-3TQUARVN.mjs} +4 -4
- package/dist/{chunk-BUJWXSYZ.mjs.map → chunk-3TQUARVN.mjs.map} +1 -1
- package/dist/{chunk-OYOO2OO5.js → chunk-3VRWKKTD.js} +10 -10
- package/dist/{chunk-OYOO2OO5.js.map → chunk-3VRWKKTD.js.map} +1 -1
- package/dist/{chunk-BFM5PEFV.js → chunk-43I7U5AI.js} +56 -177
- package/dist/chunk-43I7U5AI.js.map +1 -0
- package/dist/{chunk-ILNCUSXW.mjs → chunk-4L7OHRWB.mjs} +12 -9
- package/dist/chunk-4L7OHRWB.mjs.map +1 -0
- package/dist/chunk-4LYW6PMU.mjs +72 -0
- package/dist/chunk-4LYW6PMU.mjs.map +1 -0
- package/dist/chunk-4TLFZ6NR.mjs +16 -0
- package/dist/chunk-4TLFZ6NR.mjs.map +1 -0
- package/dist/{chunk-JQ7M6CVL.mjs → chunk-4VSDMNQU.mjs} +3 -3
- package/dist/{chunk-JQ7M6CVL.mjs.map → chunk-4VSDMNQU.mjs.map} +1 -1
- package/dist/{chunk-4B4S56WJ.mjs → chunk-5B4J3IBX.mjs} +75 -21
- package/dist/chunk-5B4J3IBX.mjs.map +1 -0
- package/dist/{chunk-M5GY2AI3.mjs → chunk-5K6B4LWV.mjs} +4 -10
- package/dist/chunk-5K6B4LWV.mjs.map +1 -0
- package/dist/chunk-5SANRSX3.mjs +17 -0
- package/dist/chunk-5SANRSX3.mjs.map +1 -0
- package/dist/chunk-5XFFUP6D.js +100 -0
- package/dist/chunk-5XFFUP6D.js.map +1 -0
- package/dist/chunk-5YA6SI4Z.mjs +0 -1
- package/dist/{chunk-TDJKGN5Q.mjs → chunk-62Y4W4LR.mjs} +216 -103
- package/dist/chunk-62Y4W4LR.mjs.map +1 -0
- package/dist/{chunk-3CLP35TT.mjs → chunk-6S3JE66D.mjs} +62 -97
- package/dist/chunk-6S3JE66D.mjs.map +1 -0
- package/dist/{chunk-4A5V73SR.mjs → chunk-6WEZWYRU.mjs} +9 -9
- package/dist/{chunk-4A5V73SR.mjs.map → chunk-6WEZWYRU.mjs.map} +1 -1
- package/dist/{chunk-JTF4DFUF.mjs → chunk-7AEVA667.mjs} +4 -4
- package/dist/{chunk-JTF4DFUF.mjs.map → chunk-7AEVA667.mjs.map} +1 -1
- package/dist/{chunk-H65OX263.js → chunk-7DV7Y7BZ.js} +15 -15
- package/dist/{chunk-H65OX263.js.map → chunk-7DV7Y7BZ.js.map} +1 -1
- package/dist/{chunk-7ZX6TO6C.mjs → chunk-7H4HB4UZ.mjs} +50 -26
- package/dist/chunk-7H4HB4UZ.mjs.map +1 -0
- package/dist/{chunk-FO4KGPGF.js → chunk-7TC3GRXQ.js} +73 -38
- package/dist/chunk-7TC3GRXQ.js.map +1 -0
- package/dist/{chunk-UQ5YULFU.mjs → chunk-AUHUEIBB.mjs} +4 -4
- package/dist/{chunk-UQ5YULFU.mjs.map → chunk-AUHUEIBB.mjs.map} +1 -1
- package/dist/{chunk-BQGEVMIR.mjs → chunk-AWF73RU2.mjs} +5 -5
- package/dist/{chunk-BQGEVMIR.mjs.map → chunk-AWF73RU2.mjs.map} +1 -1
- package/dist/{chunk-ELQ4SRRR.js → chunk-BHBW2SZF.js} +15 -15
- package/dist/{chunk-ELQ4SRRR.js.map → chunk-BHBW2SZF.js.map} +1 -1
- package/dist/{chunk-RNAGCAIB.js → chunk-BIGXEYKT.js} +7 -7
- package/dist/{chunk-RNAGCAIB.js.map → chunk-BIGXEYKT.js.map} +1 -1
- package/dist/chunk-BQP6JIE2.mjs +28 -0
- package/dist/chunk-BQP6JIE2.mjs.map +1 -0
- package/dist/{chunk-VFGEY6FJ.js → chunk-BY35X57A.js} +223 -110
- package/dist/chunk-BY35X57A.js.map +1 -0
- package/dist/{chunk-3YQILJKJ.js → chunk-CGCUHIAR.js} +60 -35
- package/dist/chunk-CGCUHIAR.js.map +1 -0
- package/dist/chunk-CUNZAD46.js +53 -0
- package/dist/chunk-CUNZAD46.js.map +1 -0
- package/dist/{chunk-FEWWGEQF.js → chunk-CWUYI6LI.js} +4 -4
- package/dist/{chunk-FEWWGEQF.js.map → chunk-CWUYI6LI.js.map} +1 -1
- package/dist/chunk-CXAXZFFW.js +157 -0
- package/dist/chunk-CXAXZFFW.js.map +1 -0
- package/dist/{chunk-H4OBGC43.mjs → chunk-DA7IANFG.mjs} +14 -3
- package/dist/chunk-DA7IANFG.mjs.map +1 -0
- package/dist/{chunk-57AFHENV.mjs → chunk-EHAUNF4V.mjs} +3 -3
- package/dist/{chunk-57AFHENV.mjs.map → chunk-EHAUNF4V.mjs.map} +1 -1
- package/dist/{chunk-2N27LCZH.js → chunk-FEKPEI2G.js} +9 -9
- package/dist/{chunk-2N27LCZH.js.map → chunk-FEKPEI2G.js.map} +1 -1
- package/dist/{chunk-LC7AM4J5.js → chunk-FHPW7XVH.js} +77 -20
- package/dist/chunk-FHPW7XVH.js.map +1 -0
- package/dist/{chunk-JNRHTZL4.js → chunk-FVW6FT6L.js} +73 -29
- package/dist/chunk-FVW6FT6L.js.map +1 -0
- package/dist/{chunk-YKUEFRZI.js → chunk-FWW4K6QP.js} +14 -14
- package/dist/{chunk-YKUEFRZI.js.map → chunk-FWW4K6QP.js.map} +1 -1
- package/dist/{chunk-JNAXDFC4.mjs → chunk-GF4LV5LX.mjs} +38 -156
- package/dist/chunk-GF4LV5LX.mjs.map +1 -0
- package/dist/{chunk-C563AHZZ.mjs → chunk-GKFTJ5AF.mjs} +3 -3
- package/dist/{chunk-C563AHZZ.mjs.map → chunk-GKFTJ5AF.mjs.map} +1 -1
- package/dist/{chunk-OZ3FU4BT.js → chunk-H5NBFNND.js} +2 -2
- package/dist/chunk-H5NBFNND.js.map +1 -0
- package/dist/chunk-HCN3IKMW.mjs +106 -0
- package/dist/chunk-HCN3IKMW.mjs.map +1 -0
- package/dist/{chunk-6FC5Q4KU.mjs → chunk-HOJ4J4X2.mjs} +30 -12
- package/dist/chunk-HOJ4J4X2.mjs.map +1 -0
- package/dist/{chunk-H6YVT3BL.js → chunk-I3ND4XYW.js} +12 -9
- package/dist/chunk-I3ND4XYW.js.map +1 -0
- package/dist/chunk-I7AZC5ZQ.js +0 -1
- package/dist/{chunk-V5THCFPG.mjs → chunk-JFJ7NHS3.mjs} +4 -4
- package/dist/{chunk-V5THCFPG.mjs.map → chunk-JFJ7NHS3.mjs.map} +1 -1
- package/dist/{chunk-KXGD4E7G.js → chunk-JI4EUPHB.js} +7 -7
- package/dist/{chunk-KXGD4E7G.js.map → chunk-JI4EUPHB.js.map} +1 -1
- package/dist/{chunk-GZJE23Y5.mjs → chunk-JLVCWC6A.mjs} +2 -2
- package/dist/chunk-JLVCWC6A.mjs.map +1 -0
- package/dist/chunk-JOYMIGR2.mjs +0 -1
- package/dist/chunk-JS75ORH7.js +0 -1
- package/dist/{chunk-Q7347KP6.mjs → chunk-JX5SM2MX.mjs} +6 -12
- package/dist/chunk-JX5SM2MX.mjs.map +1 -0
- package/dist/chunk-K4TCEAUX.js +52 -0
- package/dist/chunk-K4TCEAUX.js.map +1 -0
- package/dist/chunk-KV7XXLJV.mjs +30 -0
- package/dist/chunk-KV7XXLJV.mjs.map +1 -0
- package/dist/{chunk-JTCQJKJE.js → chunk-LIAISQUE.js} +76 -111
- package/dist/chunk-LIAISQUE.js.map +1 -0
- package/dist/{chunk-CPY74A4F.js → chunk-LMEUYRRR.js} +72 -106
- package/dist/chunk-LMEUYRRR.js.map +1 -0
- package/dist/{chunk-4WBTM6YE.js → chunk-LOEP76MQ.js} +4 -4
- package/dist/{chunk-4WBTM6YE.js.map → chunk-LOEP76MQ.js.map} +1 -1
- package/dist/chunk-LVGSOW2F.js +32 -0
- package/dist/chunk-LVGSOW2F.js.map +1 -0
- package/dist/{chunk-DOB37PV4.js → chunk-M45AL7EA.js} +37 -19
- package/dist/chunk-M45AL7EA.js.map +1 -0
- package/dist/{chunk-RCSTDJUH.js → chunk-M4UVFUFR.js} +8 -13
- package/dist/chunk-M4UVFUFR.js.map +1 -0
- package/dist/{chunk-R2SXXFXZ.mjs → chunk-MI2SRBCR.mjs} +3 -3
- package/dist/{chunk-R2SXXFXZ.mjs.map → chunk-MI2SRBCR.mjs.map} +1 -1
- package/dist/chunk-MLVHVKFT.mjs +148 -0
- package/dist/chunk-MLVHVKFT.mjs.map +1 -0
- package/dist/{chunk-L7ACQ6PC.js → chunk-MOAYT3KN.js} +4 -4
- package/dist/{chunk-L7ACQ6PC.js.map → chunk-MOAYT3KN.js.map} +1 -1
- package/dist/chunk-NG2TTI7D.js +8 -0
- package/dist/{chunk-5TXXTYXL.js.map → chunk-NG2TTI7D.js.map} +1 -1
- package/dist/{chunk-C4PZ2R3B.js → chunk-NLDN6PYM.js} +10 -10
- package/dist/{chunk-C4PZ2R3B.js.map → chunk-NLDN6PYM.js.map} +1 -1
- package/dist/chunk-NN2YE5WT.js +0 -1
- package/dist/chunk-NNZDWY3L.mjs +0 -1
- package/dist/chunk-NRBITVDK.js +114 -0
- package/dist/chunk-NRBITVDK.js.map +1 -0
- package/dist/{chunk-TSZIACRC.js → chunk-OBKYF4TP.js} +6 -12
- package/dist/chunk-OBKYF4TP.js.map +1 -0
- package/dist/{chunk-TP7H6BSK.mjs → chunk-OE7CTIOU.mjs} +73 -30
- package/dist/chunk-OE7CTIOU.mjs.map +1 -0
- package/dist/chunk-OESGRWI4.mjs +6 -0
- package/dist/{chunk-QRBPT6Z6.mjs.map → chunk-OESGRWI4.mjs.map} +1 -1
- package/dist/{chunk-UJ6CHZAI.mjs → chunk-OEW2LFOV.js} +169 -25
- package/dist/chunk-OEW2LFOV.js.map +1 -0
- package/dist/chunk-P4Y75QSU.js +19 -0
- package/dist/chunk-P4Y75QSU.js.map +1 -0
- package/dist/{chunk-47XQWV4S.mjs → chunk-PQVQAX67.mjs} +3 -3
- package/dist/{chunk-47XQWV4S.mjs.map → chunk-PQVQAX67.mjs.map} +1 -1
- package/dist/chunk-QRHVMTHF.mjs +94 -0
- package/dist/chunk-QRHVMTHF.mjs.map +1 -0
- package/dist/{chunk-FBDHKYNF.mjs → chunk-R4B3DFF4.mjs} +3 -3
- package/dist/{chunk-FBDHKYNF.mjs.map → chunk-R4B3DFF4.mjs.map} +1 -1
- package/dist/chunk-R7GHP3FY.js +81 -0
- package/dist/chunk-R7GHP3FY.js.map +1 -0
- package/dist/{chunk-4UVM7E2W.js → chunk-S5VL7AWW.js} +3 -3
- package/dist/{chunk-4UVM7E2W.js.map → chunk-S5VL7AWW.js.map} +1 -1
- package/dist/{chunk-P4TB4ROG.js → chunk-SEP5D4MI.js} +8 -2
- package/dist/chunk-SEP5D4MI.js.map +1 -0
- package/dist/{chunk-L4V6TKMJ.mjs → chunk-U2V542EO.mjs} +7 -3
- package/dist/chunk-U2V542EO.mjs.map +1 -0
- package/dist/{chunk-HBN4A2N4.mjs → chunk-U6H5ZY3B.mjs} +3 -3
- package/dist/{chunk-HBN4A2N4.mjs.map → chunk-U6H5ZY3B.mjs.map} +1 -1
- package/dist/{chunk-H7274TKR.mjs → chunk-VJV7WUR2.mjs} +12 -4
- package/dist/chunk-VJV7WUR2.mjs.map +1 -0
- package/dist/{chunk-F3AKYZOH.js → chunk-WED6ZDVS.js} +6 -13
- package/dist/chunk-WED6ZDVS.js.map +1 -0
- package/dist/{chunk-5B4FABFK.js → chunk-WS7MH3GD.js} +14 -2
- package/dist/chunk-WS7MH3GD.js.map +1 -0
- package/dist/{chunk-XLPU3TEE.mjs → chunk-X22BGNVL.mjs} +4 -4
- package/dist/{chunk-XLPU3TEE.mjs.map → chunk-X22BGNVL.mjs.map} +1 -1
- package/dist/{chunk-IPV2TUAT.js → chunk-XA2GJFVM.js} +12 -4
- package/dist/chunk-XA2GJFVM.js.map +1 -0
- package/dist/chunk-XBX2K3GA.js +33 -0
- package/dist/chunk-XBX2K3GA.js.map +1 -0
- package/dist/{chunk-ABZGEHTC.mjs → chunk-XSAHJ2BB.mjs} +3 -3
- package/dist/{chunk-ABZGEHTC.mjs.map → chunk-XSAHJ2BB.mjs.map} +1 -1
- package/dist/{chunk-6CJP7BFM.js → chunk-XZO5I4RS.mjs} +147 -20
- package/dist/chunk-XZO5I4RS.mjs.map +1 -0
- package/dist/chunk-Y5QZPUL3.mjs +47 -0
- package/dist/chunk-Y5QZPUL3.mjs.map +1 -0
- package/dist/{chunk-NOU3JQJK.js → chunk-Y6Z2W45H.js} +8 -8
- package/dist/{chunk-NOU3JQJK.js.map → chunk-Y6Z2W45H.js.map} +1 -1
- package/dist/{chunk-YYDZ2TYR.js → chunk-YCFYQN2Q.js} +3 -3
- package/dist/{chunk-YYDZ2TYR.js.map → chunk-YCFYQN2Q.js.map} +1 -1
- package/dist/chunk-YN7QHLWF.js +19 -0
- package/dist/chunk-YN7QHLWF.js.map +1 -0
- package/dist/{chunk-O2VJZOR2.mjs → chunk-YRNDASQY.mjs} +6 -11
- package/dist/chunk-YRNDASQY.mjs.map +1 -0
- package/dist/chunk-YU7QZ3PP.mjs +45 -0
- package/dist/chunk-YU7QZ3PP.mjs.map +1 -0
- package/dist/{chunk-3S5JN6KL.js → chunk-ZV6HIQRQ.js} +6 -6
- package/dist/{chunk-3S5JN6KL.js.map → chunk-ZV6HIQRQ.js.map} +1 -1
- package/dist/{chunk-RVRN5U7W.mjs → chunk-ZVI7MBVF.mjs} +73 -38
- package/dist/chunk-ZVI7MBVF.mjs.map +1 -0
- package/dist/cli/agent/checks.d.ts +15 -1
- package/dist/cli/agent/checks.d.ts.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/og.d.ts +26 -8
- package/dist/cli/commands/og.d.ts.map +1 -1
- package/dist/cli/index.js +683 -323
- package/dist/cli/index.mjs +604 -244
- package/dist/client/index.js +6 -6
- package/dist/client/index.mjs +5 -5
- package/dist/commerce/CheckoutForm.d.ts.map +1 -1
- package/dist/commerce/ProductDetail.d.ts.map +1 -1
- package/dist/commerce/api.d.ts +14 -0
- package/dist/commerce/api.d.ts.map +1 -1
- package/dist/commerce/index.d.ts +1 -1
- package/dist/commerce/index.d.ts.map +1 -1
- package/dist/commerce/index.js +61 -56
- package/dist/commerce/index.mjs +6 -5
- package/dist/config/index.js +3 -3
- package/dist/config/index.mjs +1 -1
- package/dist/discover-CYXYKHZ2.mjs +4 -0
- package/dist/{discover-FGTKWOL3.mjs.map → discover-CYXYKHZ2.mjs.map} +1 -1
- package/dist/discover-NGEPXZOD.js +21 -0
- package/dist/{discover-NJZPWTDL.js.map → discover-NGEPXZOD.js.map} +1 -1
- package/dist/engage/index.js +12 -10
- package/dist/engage/index.js.map +1 -1
- package/dist/engage/index.mjs +9 -7
- package/dist/engage/index.mjs.map +1 -1
- package/dist/fleet/index.js +8 -8
- package/dist/fleet/index.mjs +4 -4
- package/dist/forms/FormClient.d.ts.map +1 -1
- package/dist/forms/FormField.d.ts +7 -1
- package/dist/forms/FormField.d.ts.map +1 -1
- package/dist/forms/FormSpotlight.d.ts +1 -1
- package/dist/forms/FormSpotlight.d.ts.map +1 -1
- package/dist/forms/FormStage.d.ts +1 -1
- package/dist/forms/FormStage.d.ts.map +1 -1
- package/dist/forms/experience-plan.d.ts +0 -1
- package/dist/forms/experience-plan.d.ts.map +1 -1
- package/dist/forms/field-interactions.d.ts +63 -0
- package/dist/forms/field-interactions.d.ts.map +1 -0
- package/dist/forms/field-rules.d.ts +41 -0
- package/dist/forms/field-rules.d.ts.map +1 -0
- package/dist/forms/index.js +25 -23
- package/dist/forms/index.js.map +1 -1
- package/dist/forms/index.mjs +13 -11
- package/dist/forms/index.mjs.map +1 -1
- package/dist/forms/server.js +11 -11
- package/dist/forms/server.mjs +9 -9
- package/dist/forms/static.js +8 -8
- package/dist/forms/static.mjs +7 -7
- package/dist/forms/tracking-session.d.ts +48 -3
- package/dist/forms/tracking-session.d.ts.map +1 -1
- package/dist/forms/types.d.ts +11 -0
- package/dist/forms/types.d.ts.map +1 -1
- package/dist/forms/useForm.d.ts +8 -0
- package/dist/forms/useForm.d.ts.map +1 -1
- package/dist/forms/useFormTracking.d.ts +29 -4
- package/dist/forms/useFormTracking.d.ts.map +1 -1
- package/dist/images/index.js +11 -11
- package/dist/images/index.mjs +4 -4
- package/dist/index.js +72 -68
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +14 -10
- package/dist/index.mjs.map +1 -1
- package/dist/layout/client.js +10 -10
- package/dist/layout/client.mjs +9 -9
- package/dist/layout/index.js +13 -12
- package/dist/layout/index.js.map +1 -1
- package/dist/layout/index.mjs +11 -10
- package/dist/layout/index.mjs.map +1 -1
- package/dist/lib-6HOOMENJ.js +0 -1
- package/dist/lib-BGAWCSUH.js +0 -1
- package/dist/lib-R7IQ4ZHE.mjs +0 -1
- package/dist/lib-RSDMEKDQ.mjs +0 -1
- package/dist/llms/aiRobots.d.ts +20 -4
- package/dist/llms/aiRobots.d.ts.map +1 -1
- package/dist/llms/api.d.ts +8 -3
- package/dist/llms/api.d.ts.map +1 -1
- package/dist/llms/discovery-headers.d.ts +24 -0
- package/dist/llms/discovery-headers.d.ts.map +1 -1
- package/dist/llms/generateLLMsTxt.d.ts.map +1 -1
- package/dist/llms/index.d.ts +2 -2
- package/dist/llms/index.d.ts.map +1 -1
- package/dist/llms/index.js +45 -96
- package/dist/llms/index.js.map +1 -1
- package/dist/llms/index.mjs +11 -81
- package/dist/llms/index.mjs.map +1 -1
- package/dist/llms/links.d.ts +26 -0
- package/dist/llms/links.d.ts.map +1 -0
- package/dist/llms/types.d.ts +15 -0
- package/dist/llms/types.d.ts.map +1 -1
- package/dist/llms/wiring.d.ts +22 -0
- package/dist/llms/wiring.d.ts.map +1 -1
- package/dist/llms/writeLLMsTxt.d.ts +9 -0
- package/dist/llms/writeLLMsTxt.d.ts.map +1 -1
- package/dist/maps/index.js +5 -5
- package/dist/maps/index.mjs +3 -3
- package/dist/motion/gsap.d.ts +54 -0
- package/dist/motion/gsap.d.ts.map +1 -1
- package/dist/motion/gsap.js +34 -4
- package/dist/motion/gsap.js.map +1 -1
- package/dist/motion/gsap.mjs +33 -5
- package/dist/motion/gsap.mjs.map +1 -1
- package/dist/og/config.d.ts +6 -0
- package/dist/og/config.d.ts.map +1 -1
- package/dist/og/contrast.d.ts +33 -0
- package/dist/og/contrast.d.ts.map +1 -0
- package/dist/og/index.d.ts +2 -0
- package/dist/og/index.d.ts.map +1 -1
- package/dist/og/index.js +26 -8
- package/dist/og/index.mjs +3 -1
- package/dist/og/pages.d.ts +101 -0
- package/dist/og/pages.d.ts.map +1 -1
- package/dist/og/route-copy.d.ts +34 -0
- package/dist/og/route-copy.d.ts.map +1 -0
- package/dist/og/route-fit.d.ts +77 -0
- package/dist/og/route-fit.d.ts.map +1 -0
- package/dist/og/route.d.ts +80 -20
- package/dist/og/route.d.ts.map +1 -1
- package/dist/og/route.js +195 -25
- package/dist/og/route.js.map +1 -1
- package/dist/og/route.mjs +193 -26
- package/dist/og/route.mjs.map +1 -1
- package/dist/og/template.d.ts.map +1 -1
- package/dist/og/wiring.d.ts +43 -3
- package/dist/og/wiring.d.ts.map +1 -1
- package/dist/proxy/index.d.ts.map +1 -1
- package/dist/proxy/index.js +15 -10
- package/dist/proxy/index.js.map +1 -1
- package/dist/proxy/index.mjs +12 -7
- package/dist/proxy/index.mjs.map +1 -1
- package/dist/redirects/index.d.ts +24 -0
- package/dist/redirects/index.d.ts.map +1 -1
- package/dist/redirects/index.js +11 -8
- package/dist/redirects/index.mjs +4 -1
- package/dist/redirects/not-found.js +8 -5
- package/dist/redirects/not-found.js.map +1 -1
- package/dist/redirects/not-found.mjs +4 -1
- package/dist/redirects/not-found.mjs.map +1 -1
- package/dist/robots/index.d.ts +2 -0
- package/dist/robots/index.d.ts.map +1 -1
- package/dist/robots/index.js +23 -3
- package/dist/robots/index.js.map +1 -1
- package/dist/robots/index.mjs +2 -2
- package/dist/robots/index.mjs.map +1 -1
- package/dist/search/index.js +4 -4
- package/dist/search/index.mjs +3 -3
- package/dist/seo/ManagedContent.d.ts +4 -2
- package/dist/seo/ManagedContent.d.ts.map +1 -1
- package/dist/seo/ManagedFAQ.d.ts.map +1 -1
- package/dist/seo/ManagedInternalLinks.d.ts.map +1 -1
- package/dist/seo/ManagedSchema.d.ts.map +1 -1
- package/dist/seo/client.js +6 -6
- package/dist/seo/client.mjs +5 -5
- package/dist/seo/getManagedMetadata.d.ts.map +1 -1
- package/dist/seo/index.js +59 -49
- package/dist/seo/index.js.map +1 -1
- package/dist/seo/index.mjs +29 -19
- package/dist/seo/index.mjs.map +1 -1
- package/dist/seo/register-sitemap-cli-impl.d.ts +32 -0
- package/dist/seo/register-sitemap-cli-impl.d.ts.map +1 -1
- package/dist/seo/register-sitemap-cli.d.ts +7 -0
- package/dist/seo/register-sitemap-cli.d.ts.map +1 -1
- package/dist/seo/register-sitemap-cli.js +273 -57
- package/dist/seo/register-sitemap-cli.mjs +269 -53
- package/dist/seo/register-sitemap-request.d.ts +36 -0
- package/dist/seo/register-sitemap-request.d.ts.map +1 -0
- package/dist/seo/routing.d.ts +2 -0
- package/dist/seo/routing.d.ts.map +1 -1
- package/dist/seo/schema-filter.d.ts +43 -0
- package/dist/seo/schema-filter.d.ts.map +1 -0
- package/dist/seo/server-api.d.ts +15 -2
- package/dist/seo/server-api.d.ts.map +1 -1
- package/dist/seo/server.js +23 -18
- package/dist/seo/server.mjs +7 -2
- package/dist/seo/types.d.ts +30 -0
- package/dist/seo/types.d.ts.map +1 -1
- package/dist/seo-meta/contract.d.ts +60 -0
- package/dist/seo-meta/contract.d.ts.map +1 -0
- package/dist/seo-meta/contract.js +41 -0
- package/dist/seo-meta/contract.js.map +1 -0
- package/dist/seo-meta/contract.mjs +4 -0
- package/dist/seo-meta/contract.mjs.map +1 -0
- package/dist/server/index.js +4 -3
- package/dist/server/index.mjs +3 -2
- package/dist/server/mint-site-token.d.ts +2 -32
- package/dist/server/mint-site-token.d.ts.map +1 -1
- package/dist/{server-api-RG3ZL3DV.mjs → server-api-A2EFCTZX.mjs} +7 -3
- package/dist/{server-api-RG3ZL3DV.mjs.map → server-api-A2EFCTZX.mjs.map} +1 -1
- package/dist/{server-api-RYJQAUGO.js → server-api-IWTZ7C3O.js} +25 -21
- package/dist/{server-api-RYJQAUGO.js.map → server-api-IWTZ7C3O.js.map} +1 -1
- package/dist/shared/build-entries.d.ts +2 -0
- package/dist/shared/build-entries.d.ts.map +1 -1
- package/dist/shared/fresh-fetch.d.ts +64 -0
- package/dist/shared/fresh-fetch.d.ts.map +1 -0
- package/dist/shared/next-files.d.ts +7 -0
- package/dist/shared/next-files.d.ts.map +1 -1
- package/dist/shared/page-leave.d.ts +27 -0
- package/dist/shared/page-leave.d.ts.map +1 -0
- package/dist/shared/source-graph.d.ts +63 -0
- package/dist/shared/source-graph.d.ts.map +1 -0
- package/dist/shared/version.d.ts +1 -1
- package/dist/signal/SignalCore.d.ts.map +1 -1
- package/dist/signal/index.js +11 -11
- package/dist/signal/index.mjs +2 -2
- package/dist/sitemap/index.d.ts +19 -4
- package/dist/sitemap/index.d.ts.map +1 -1
- package/dist/sitemap/index.js +53 -43
- package/dist/sitemap/index.js.map +1 -1
- package/dist/sitemap/index.mjs +37 -27
- package/dist/sitemap/index.mjs.map +1 -1
- package/dist/sitemap/shared.d.ts +65 -0
- package/dist/sitemap/shared.d.ts.map +1 -1
- package/dist/sites/resolve.d.ts.map +1 -1
- package/dist/sites/site-param.d.ts +16 -0
- package/dist/sites/site-param.d.ts.map +1 -0
- package/dist/sync/index.js +17 -17
- package/dist/sync/index.mjs +4 -4
- package/dist/writeLLMsTxt-CQ7A4AAL.js +19 -0
- package/dist/writeLLMsTxt-NX5MSPYX.mjs +10 -0
- package/package.json +9 -4
- package/dist/AnalyticsProvider-EWF7JN2X.mjs +0 -11
- package/dist/AnalyticsProvider-GJFG7YXA.js +0 -32
- package/dist/BlogViewTracker-2D3IJPJK.js.map +0 -1
- package/dist/BlogViewTracker-CKYG6MYU.mjs.map +0 -1
- package/dist/ChatWidget-AWP6GBVW.js +0 -22
- package/dist/ChatWidget-Z5QXDZP3.mjs +0 -13
- package/dist/EngageWidget-BKEY5TPO.mjs +0 -12
- package/dist/EngageWidget-VT4DYXVO.js +0 -21
- package/dist/FormSpotlight-OTFB6QM5.mjs.map +0 -1
- package/dist/FormSpotlight-URS4XRS7.js.map +0 -1
- package/dist/FormStage-FVKMIV73.js.map +0 -1
- package/dist/FormStage-VPGOCMAV.mjs.map +0 -1
- package/dist/ManagedForm-CXVDJMHN.mjs +0 -14
- package/dist/ManagedForm-FGNTDGED.js +0 -23
- package/dist/ManagedNewsletterForm-3O5L44AZ.js.map +0 -1
- package/dist/ManagedNewsletterForm-SQYB4BZU.mjs.map +0 -1
- package/dist/SignalCore-M2PKKIGH.mjs.map +0 -1
- package/dist/SignalCore-RFBOBNLQ.js.map +0 -1
- package/dist/SitemapSync-4OVMIIGC.mjs +0 -9
- package/dist/SitemapSync-RK3SQ4M2.js +0 -18
- package/dist/analytics/send-gate.test.d.ts +0 -20
- package/dist/analytics/send-gate.test.d.ts.map +0 -1
- package/dist/api-D745LGGU.mjs.map +0 -1
- package/dist/api-XR5APCH3.js.map +0 -1
- package/dist/blog/artwork-components.test.d.ts +0 -2
- package/dist/blog/artwork-components.test.d.ts.map +0 -1
- package/dist/blog/artwork.test.d.ts +0 -2
- package/dist/blog/artwork.test.d.ts.map +0 -1
- package/dist/blog/author-social.test.d.ts +0 -2
- package/dist/blog/author-social.test.d.ts.map +0 -1
- package/dist/blog/blog-tables.test.d.ts +0 -2
- package/dist/blog/blog-tables.test.d.ts.map +0 -1
- package/dist/blog/blog-view-tracker.test.d.ts +0 -2
- package/dist/blog/blog-view-tracker.test.d.ts.map +0 -1
- package/dist/blog/category-metadata.test.d.ts +0 -2
- package/dist/blog/category-metadata.test.d.ts.map +0 -1
- package/dist/blog/metadata-images.test.d.ts +0 -2
- package/dist/blog/metadata-images.test.d.ts.map +0 -1
- package/dist/blog/newsletter-widget.test.d.ts +0 -2
- package/dist/blog/newsletter-widget.test.d.ts.map +0 -1
- package/dist/blog/publication-render.test.d.ts +0 -2
- package/dist/blog/publication-render.test.d.ts.map +0 -1
- package/dist/blog/publication-routes.test.d.ts +0 -2
- package/dist/blog/publication-routes.test.d.ts.map +0 -1
- package/dist/blog/reading-time.test.d.ts +0 -2
- package/dist/blog/reading-time.test.d.ts.map +0 -1
- package/dist/blog/sanitize-excerpt.test.d.ts +0 -2
- package/dist/blog/sanitize-excerpt.test.d.ts.map +0 -1
- package/dist/blog/server-core-contract.test.d.ts +0 -2
- package/dist/blog/server-core-contract.test.d.ts.map +0 -1
- package/dist/blog/static-params.test.d.ts +0 -2
- package/dist/blog/static-params.test.d.ts.map +0 -1
- package/dist/blog/tag-links.test.d.ts +0 -2
- package/dist/blog/tag-links.test.d.ts.map +0 -1
- package/dist/blog/types-wire-shape.test.d.ts +0 -2
- package/dist/blog/types-wire-shape.test.d.ts.map +0 -1
- package/dist/brand/status-contrast.test.d.ts +0 -2
- package/dist/brand/status-contrast.test.d.ts.map +0 -1
- package/dist/chunk-3CLP35TT.mjs.map +0 -1
- package/dist/chunk-3UC6JETG.js +0 -32
- package/dist/chunk-3UC6JETG.js.map +0 -1
- package/dist/chunk-3YQILJKJ.js.map +0 -1
- package/dist/chunk-4B4S56WJ.mjs.map +0 -1
- package/dist/chunk-5B4FABFK.js.map +0 -1
- package/dist/chunk-5TXXTYXL.js +0 -8
- package/dist/chunk-5YA6SI4Z.mjs.map +0 -1
- package/dist/chunk-6CJP7BFM.js.map +0 -1
- package/dist/chunk-6FC5Q4KU.mjs.map +0 -1
- package/dist/chunk-7ZX6TO6C.mjs.map +0 -1
- package/dist/chunk-AWK57R5S.mjs +0 -29
- package/dist/chunk-AWK57R5S.mjs.map +0 -1
- package/dist/chunk-BFJOZ3MU.mjs.map +0 -1
- package/dist/chunk-BFM5PEFV.js.map +0 -1
- package/dist/chunk-CPY74A4F.js.map +0 -1
- package/dist/chunk-DOB37PV4.js.map +0 -1
- package/dist/chunk-F3AKYZOH.js.map +0 -1
- package/dist/chunk-FO4KGPGF.js.map +0 -1
- package/dist/chunk-GZJE23Y5.mjs.map +0 -1
- package/dist/chunk-H4OBGC43.mjs.map +0 -1
- package/dist/chunk-H6YVT3BL.js.map +0 -1
- package/dist/chunk-H7274TKR.mjs.map +0 -1
- package/dist/chunk-I7AZC5ZQ.js.map +0 -1
- package/dist/chunk-ILNCUSXW.mjs.map +0 -1
- package/dist/chunk-IPV2TUAT.js.map +0 -1
- package/dist/chunk-JEOKDUPQ.js +0 -45
- package/dist/chunk-JEOKDUPQ.js.map +0 -1
- package/dist/chunk-JNAXDFC4.mjs.map +0 -1
- package/dist/chunk-JNRHTZL4.js.map +0 -1
- package/dist/chunk-JOYMIGR2.mjs.map +0 -1
- package/dist/chunk-JS75ORH7.js.map +0 -1
- package/dist/chunk-JTCQJKJE.js.map +0 -1
- package/dist/chunk-L4V6TKMJ.mjs.map +0 -1
- package/dist/chunk-LC7AM4J5.js.map +0 -1
- package/dist/chunk-M5GY2AI3.mjs.map +0 -1
- package/dist/chunk-NN2YE5WT.js.map +0 -1
- package/dist/chunk-NNZDWY3L.mjs.map +0 -1
- package/dist/chunk-O2VJZOR2.mjs.map +0 -1
- package/dist/chunk-OZ3FU4BT.js.map +0 -1
- package/dist/chunk-P4TB4ROG.js.map +0 -1
- package/dist/chunk-Q7347KP6.mjs.map +0 -1
- package/dist/chunk-QJU6HBSK.mjs +0 -39
- package/dist/chunk-QJU6HBSK.mjs.map +0 -1
- package/dist/chunk-QRBPT6Z6.mjs +0 -6
- package/dist/chunk-RCSTDJUH.js.map +0 -1
- package/dist/chunk-RVRN5U7W.mjs.map +0 -1
- package/dist/chunk-TDJKGN5Q.mjs.map +0 -1
- package/dist/chunk-TP7H6BSK.mjs.map +0 -1
- package/dist/chunk-TSZIACRC.js.map +0 -1
- package/dist/chunk-UJ6CHZAI.mjs.map +0 -1
- package/dist/chunk-VFGEY6FJ.js.map +0 -1
- package/dist/cli/agent/envelope.test.d.ts +0 -2
- package/dist/cli/agent/envelope.test.d.ts.map +0 -1
- package/dist/cli/agent/ssr-bailout.test.d.ts +0 -2
- package/dist/cli/agent/ssr-bailout.test.d.ts.map +0 -1
- package/dist/cli/codemod/diff.test.d.ts +0 -2
- package/dist/cli/codemod/diff.test.d.ts.map +0 -1
- package/dist/cli/codemod/transforms.test.d.ts +0 -2
- package/dist/cli/codemod/transforms.test.d.ts.map +0 -1
- package/dist/cli/commands/config-regression.test.d.ts +0 -2
- package/dist/cli/commands/config-regression.test.d.ts.map +0 -1
- package/dist/cli/commands/geo.test.d.ts +0 -2
- package/dist/cli/commands/geo.test.d.ts.map +0 -1
- package/dist/cli/commands/og.test.d.ts +0 -2
- package/dist/cli/commands/og.test.d.ts.map +0 -1
- package/dist/cli/config.test.d.ts +0 -2
- package/dist/cli/config.test.d.ts.map +0 -1
- package/dist/cli/generators/index.test.d.ts +0 -2
- package/dist/cli/generators/index.test.d.ts.map +0 -1
- package/dist/cli/index.js.map +0 -1
- package/dist/cli/index.mjs.map +0 -1
- package/dist/cli/state.test.d.ts +0 -2
- package/dist/cli/state.test.d.ts.map +0 -1
- package/dist/commerce/events-extras.test.d.ts +0 -2
- package/dist/commerce/events-extras.test.d.ts.map +0 -1
- package/dist/commerce/server-result.test.d.ts +0 -2
- package/dist/commerce/server-result.test.d.ts.map +0 -1
- package/dist/discover-FGTKWOL3.mjs +0 -4
- package/dist/discover-NJZPWTDL.js +0 -21
- package/dist/engage/chat-launcher.test.d.ts +0 -2
- package/dist/engage/chat-launcher.test.d.ts.map +0 -1
- package/dist/engage/dependency-contract.test.d.ts +0 -2
- package/dist/engage/dependency-contract.test.d.ts.map +0 -1
- package/dist/engage/launcher-placement.test.d.ts +0 -2
- package/dist/engage/launcher-placement.test.d.ts.map +0 -1
- package/dist/fleet/contract.test.d.ts +0 -2
- package/dist/fleet/contract.test.d.ts.map +0 -1
- package/dist/fleet/heartbeat.test.d.ts +0 -2
- package/dist/fleet/heartbeat.test.d.ts.map +0 -1
- package/dist/forms/contract.test.d.ts +0 -2
- package/dist/forms/contract.test.d.ts.map +0 -1
- package/dist/forms/ga4-identity.test.d.ts +0 -2
- package/dist/forms/ga4-identity.test.d.ts.map +0 -1
- package/dist/forms/native-fallback.test.d.ts +0 -2
- package/dist/forms/native-fallback.test.d.ts.map +0 -1
- package/dist/forms/stage.test.d.ts +0 -2
- package/dist/forms/stage.test.d.ts.map +0 -1
- package/dist/forms/static-form.test.d.ts +0 -2
- package/dist/forms/static-form.test.d.ts.map +0 -1
- package/dist/forms/tracking-session.test.d.ts +0 -22
- package/dist/forms/tracking-session.test.d.ts.map +0 -1
- package/dist/landing/contract.test.d.ts +0 -2
- package/dist/landing/contract.test.d.ts.map +0 -1
- package/dist/landing/server-entry.test.d.ts +0 -2
- package/dist/landing/server-entry.test.d.ts.map +0 -1
- package/dist/lib-6HOOMENJ.js.map +0 -1
- package/dist/lib-BGAWCSUH.js.map +0 -1
- package/dist/lib-R7IQ4ZHE.mjs.map +0 -1
- package/dist/lib-RSDMEKDQ.mjs.map +0 -1
- package/dist/llms/aiRobots.test.d.ts +0 -2
- package/dist/llms/aiRobots.test.d.ts.map +0 -1
- package/dist/llms/contract.test.d.ts +0 -2
- package/dist/llms/contract.test.d.ts.map +0 -1
- package/dist/llms/discovery-headers.test.d.ts +0 -2
- package/dist/llms/discovery-headers.test.d.ts.map +0 -1
- package/dist/llms/generateLLMsTxt.test.d.ts +0 -2
- package/dist/llms/generateLLMsTxt.test.d.ts.map +0 -1
- package/dist/llms/handlers.test.d.ts +0 -2
- package/dist/llms/handlers.test.d.ts.map +0 -1
- package/dist/llms/humanize-industry.test.d.ts +0 -2
- package/dist/llms/humanize-industry.test.d.ts.map +0 -1
- package/dist/llms/sourcedFacts.test.d.ts +0 -2
- package/dist/llms/sourcedFacts.test.d.ts.map +0 -1
- package/dist/llms/wiring.test.d.ts +0 -2
- package/dist/llms/wiring.test.d.ts.map +0 -1
- package/dist/llms/writeLLMsTxt.test.d.ts +0 -2
- package/dist/llms/writeLLMsTxt.test.d.ts.map +0 -1
- package/dist/mcp/protocol.test.d.ts +0 -2
- package/dist/mcp/protocol.test.d.ts.map +0 -1
- package/dist/motion/motion.test.d.ts +0 -16
- package/dist/motion/motion.test.d.ts.map +0 -1
- package/dist/og/pages.test.d.ts +0 -2
- package/dist/og/pages.test.d.ts.map +0 -1
- package/dist/og/template.test.d.ts +0 -2
- package/dist/og/template.test.d.ts.map +0 -1
- package/dist/og/wiring.test.d.ts +0 -2
- package/dist/og/wiring.test.d.ts.map +0 -1
- package/dist/portfolio/contract.test.d.ts +0 -2
- package/dist/portfolio/contract.test.d.ts.map +0 -1
- package/dist/proxy/securityHeaders.test.d.ts +0 -2
- package/dist/proxy/securityHeaders.test.d.ts.map +0 -1
- package/dist/proxy/segment.test.d.ts +0 -2
- package/dist/proxy/segment.test.d.ts.map +0 -1
- package/dist/robots/index.test.d.ts +0 -2
- package/dist/robots/index.test.d.ts.map +0 -1
- package/dist/seo/register-sitemap-cli-impl.test.d.ts +0 -2
- package/dist/seo/register-sitemap-cli-impl.test.d.ts.map +0 -1
- package/dist/seo/register-sitemap-cli.js.map +0 -1
- package/dist/seo/register-sitemap-cli.mjs.map +0 -1
- package/dist/seo-pages/contract.test.d.ts +0 -2
- package/dist/seo-pages/contract.test.d.ts.map +0 -1
- package/dist/server/mint-site-token.test.d.ts +0 -2
- package/dist/server/mint-site-token.test.d.ts.map +0 -1
- package/dist/server/server-fetch.test.d.ts +0 -2
- package/dist/server/server-fetch.test.d.ts.map +0 -1
- package/dist/shared/client-entry-boundary.test.d.ts +0 -2
- package/dist/shared/client-entry-boundary.test.d.ts.map +0 -1
- package/dist/shared/next-files.test.d.ts +0 -2
- package/dist/shared/next-files.test.d.ts.map +0 -1
- package/dist/shared/no-cjs-require.test.d.ts +0 -2
- package/dist/shared/no-cjs-require.test.d.ts.map +0 -1
- package/dist/shared/publishCredential.test.d.ts +0 -2
- package/dist/shared/publishCredential.test.d.ts.map +0 -1
- package/dist/shared/raw-browser-api-guard.test.d.ts +0 -15
- package/dist/shared/raw-browser-api-guard.test.d.ts.map +0 -1
- package/dist/shared/siteToken.test.d.ts +0 -2
- package/dist/shared/siteToken.test.d.ts.map +0 -1
- package/dist/shared/sonorFetch.test.d.ts +0 -2
- package/dist/shared/sonorFetch.test.d.ts.map +0 -1
- package/dist/shared/uuid.test.d.ts +0 -2
- package/dist/shared/uuid.test.d.ts.map +0 -1
- package/dist/shared/version.test.d.ts +0 -2
- package/dist/shared/version.test.d.ts.map +0 -1
- package/dist/shared/visual-viewport-gap.test.d.ts +0 -2
- package/dist/shared/visual-viewport-gap.test.d.ts.map +0 -1
- package/dist/sitemap/discover.test.d.ts +0 -2
- package/dist/sitemap/discover.test.d.ts.map +0 -1
- package/dist/sitemap/shared.test.d.ts +0 -2
- package/dist/sitemap/shared.test.d.ts.map +0 -1
- package/dist/sitemap/site-scope.test.d.ts +0 -2
- package/dist/sitemap/site-scope.test.d.ts.map +0 -1
- package/dist/sites/contract.test.d.ts +0 -2
- package/dist/sites/contract.test.d.ts.map +0 -1
- package/dist/slots/ManagedSlot.test.d.ts +0 -2
- package/dist/slots/ManagedSlot.test.d.ts.map +0 -1
- package/dist/slots/contract.test.d.ts +0 -2
- package/dist/slots/contract.test.d.ts.map +0 -1
- package/dist/slots/revalidate.test.d.ts +0 -2
- package/dist/slots/revalidate.test.d.ts.map +0 -1
- package/dist/slots/server-api.test.d.ts +0 -2
- package/dist/slots/server-api.test.d.ts.map +0 -1
- package/dist/sync/add-to-calendar.test.d.ts +0 -2
- package/dist/sync/add-to-calendar.test.d.ts.map +0 -1
- package/dist/sync/api-errors.test.d.ts +0 -2
- package/dist/sync/api-errors.test.d.ts.map +0 -1
- package/dist/sync/booking-flow.test.d.ts +0 -2
- package/dist/sync/booking-flow.test.d.ts.map +0 -1
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","resolveBlogArtwork","blogArtworkImageStyle","readingTimeMinutes","createBlogRoutes","generateAuthorSchema","safeJsonLd","useEffect"],"mappings":";;;;;;;;;;;;;;;;AA4BA,IAAM,wBAAwBA,sBAAA,CAAM,IAAA,CAAK,MAAM,OAAO,sCAAyB,CAAC,CAAA;AAazE,SAAS,gBAAA,CAAiB;AAAA,EAC/B,KAAA,GAAQ,6BAAA;AAAA,EACR,WAAA,GAAc,wDAAA;AAAA,EACd,UAAA,GAAa,WAAA;AAAA,EACb,QAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA,GAAiB;AACnB,CAAA,EAA0B;AACxB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,eAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAsD,MAAM,CAAA;AACxF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAEpE,EAAA,IAAI,CAAC,YAAY,QAAA,EAAU;AACzB,IAAA,uBACEC,cAAA,CAACC,cAAA,EAAA,EAAS,QAAA,EAAU,IAAA,EAClB,QAAA,kBAAAD,cAAA;AAAA,MAAC,qBAAA;AAAA,MAAA;AAAA,QAEC,QAAA;AAAA,QACA,KAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OAAA;AAAA,MALK;AAAA,KAMP,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEA,cAAA;AAAA,IAACE,gCAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,KAAA;AAAA,MACA,aAAA,EAAe,QAAA;AAAA,MACf,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,SAAA,CAAU,YAAY,CAAA;AACtB,QAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,QAAA,QAAA,CAAS,KAAK,CAAA,CACX,IAAA,CAAK,MAAM,SAAA,CAAU,SAAS,CAAC,CAAA,CAC/B,KAAA,CAAM,CAAC,GAAA,KAAQ;AACd,UAAA,SAAA,CAAU,OAAO,CAAA;AACjB,UAAA,eAAA,CAAgB,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,IAAI,CAAA;AAAA,QAC3D,CAAC,CAAA;AAAA,MACL,CAAA;AAAA,MACA,MAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;ACtFA,SAAS,UAAA,CAAW,EAAE,MAAA,EAAO,EAA2B;AACtD,EAAA,MAAM,WAAW,OAAO,MAAA,CAAO,gBAAA,KAAqB,QAAA,IAAY,OAAO,gBAAA,GAAmB,CAAA;AAC1F,EAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,YAAY,MAAA,GAAS,CAAA;AACzE,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,eAAA,IAAmB,MAAA,CAAO,gBAAgB,MAAA,GAAS,CAAA;AAC/E,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,qBAAA,IAAyB,MAAA,CAAO,sBAAsB,MAAA,GAAS,CAAA;AAC9F,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,OAAO,MAAA,GAAS,CAAA;AAC1D,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,wBAAA,IAA4B,MAAA,CAAO,wBAAA;AAE7D,EAAA,MAAM,WAAA,GAAc,QAAA,IAAY,cAAA,IAAkB,YAAA,IAAgB,mBAAmB,SAAA,IAAa,UAAA;AAClG,EAAA,IAAI,CAAC,aAAa,OAAO,IAAA;AAEzB,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,iBAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,QACX,OAAA,EAAS,EAAA;AAAA,QACT,YAAA,EAAc,EAAA;AAAA,QACd,MAAA,EAAQ,qCAAA;AAAA,QACR,UAAA,EAAY;AAAA,OACd;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAH,cAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,MAAA,EAAQ,UAAA;AAAA,cACR,QAAA,EAAU,EAAA;AAAA,cACV,UAAA,EAAY,GAAA;AAAA,cACZ,aAAA,EAAe,WAAA;AAAA,cACf,aAAA,EAAe,QAAA;AAAA,cACf,KAAA,EAAO;AAAA,aACT;AAAA,YACD,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,wCAGC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,QAAQ,QAAA,EAAU,MAAA,EAAiB,GAAA,EAAK,CAAA,EAAG,cAAc,cAAA,IAAkB,YAAA,IAAgB,mBAAmB,SAAA,GAAY,EAAA,GAAK,GAAE,EACrJ,QAAA,EAAA;AAAA,UAAA,UAAA,oBACCG,eAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,aAAA;AAAA,gBACT,UAAA,EAAY,QAAA;AAAA,gBACZ,GAAA,EAAK,CAAA;AAAA,gBACL,OAAA,EAAS,UAAA;AAAA,gBACT,YAAA,EAAc,IAAA;AAAA,gBACd,QAAA,EAAU,EAAA;AAAA,gBACV,UAAA,EAAY,GAAA;AAAA,gBACZ,UAAA,EAAY,yBAAA;AAAA,gBACZ,KAAA,EAAO,mBAAA;AAAA,gBACP,MAAA,EAAQ;AAAA,eACV;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAAA,eAAA,CAAC,SAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,SAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,gBAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,gBAAe,OAAA,EACvI,QAAA,EAAA;AAAA,kCAAAH,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oCAAA,EAAqC,CAAA;AAAA,kCAC7CA,cAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,uBAAA,EAAwB;AAAA,iBAAA,EAC3C,CAAA;AAAA,gBAAM;AAAA;AAAA;AAAA,WAER;AAAA,UAED,QAAA,oBACCG,eAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,aAAA;AAAA,gBACT,UAAA,EAAY,QAAA;AAAA,gBACZ,OAAA,EAAS,UAAA;AAAA,gBACT,YAAA,EAAc,IAAA;AAAA,gBACd,QAAA,EAAU,EAAA;AAAA,gBACV,UAAA,EAAY,GAAA;AAAA,gBACZ,UAAA,EAAY,yBAAA;AAAA,gBACZ,KAAA,EAAO,kBAAA;AAAA,gBACP,MAAA,EAAQ;AAAA,eACV;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,MAAA,CAAO,gBAAA;AAAA,gBAAiB;AAAA;AAAA;AAAA;AAC3B,SAAA,EAEJ,CAAA;AAAA,QAGC,kCACCA,eAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,YAAA,EAAc,IAAG,EAC7B,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,mCAAA,EAAoC,EAAG,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,0BACvGA,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,YAAA,EAAc,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,mCAAA,EAAqC,UAAA,EAAY,GAAA,EAAI,EAC9H,QAAA,EAAA,MAAA,CAAO,WAAA,CAAa,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBAC3BA,cAAAA,CAAC,IAAA,EAAA,EAAY,QAAA,EAAA,CAAA,EAAA,EAAJ,CAAM,CAChB,CAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,QAID,gCACCG,eAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,YAAA,EAAc,IAAG,EAC7B,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,UAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,qCAAqC,OAAA,EAAS,OAAA,EAAS,YAAA,EAAc,CAAA,IAAK,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,0BACxIA,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,OAAA,EAAS,QAAQ,QAAA,EAAU,MAAA,EAAiB,GAAA,EAAK,CAAA,IAC5D,QAAA,EAAA,MAAA,CAAO,eAAA,CAAiB,IAAI,CAAC,IAAA,EAAM,sBAClCA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,UAAA;AAAA,gBACT,YAAA,EAAc,IAAA;AAAA,gBACd,QAAA,EAAU,EAAA;AAAA,gBACV,UAAA,EAAY,4BAAA;AAAA,gBACZ,KAAA,EAAO;AAAA,eACT;AAAA,cAEC,QAAA,EAAA;AAAA,aAAA;AAAA,YATI;AAAA,WAWR,CAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,QAID,mCACCG,eAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,YAAA,EAAc,IAAG,EAC7B,QAAA,EAAA;AAAA,0BAAAH,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,mCAAA,EAAoC,EAAG,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,0BACvGA,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,YAAA,EAAc,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,mCAAA,EAAqC,UAAA,EAAY,GAAA,EAAI,EAC9H,QAAA,EAAA,MAAA,CAAO,qBAAA,CAAuB,GAAA,CAAI,CAAC,GAAA,EAAK,CAAA,qBACvCA,cAAAA,CAAC,IAAA,EAAA,EAAY,QAAA,EAAA,GAAA,EAAA,EAAJ,CAAQ,CAClB,CAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,QAID,SAAA,oCACE,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,mCAAA,EAAoC,EAAG,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,0BAClGA,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,YAAA,EAAc,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,mCAAA,EAAqC,UAAA,EAAY,GAAA,EAAI,EAC9H,QAAA,EAAA,MAAA,CAAO,MAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,qBAC1BA,cAAAA,CAAC,IAAA,EAAA,EAAY,QAAA,EAAA,KAAA,EAAA,EAAJ,CAAU,CACpB,CAAA,EACH;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAMO,SAAS,UAAA,CAAW,EAAE,MAAA,EAAQ,OAAA,GAAU,IAAA,EAAM,aAAa,IAAA,EAAM,cAAA,GAAiB,KAAA,EAAO,SAAA,EAAU,EAAoB;AAC5H,EAAA,uBACEG,eAAA,CAAC,SAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAkB,EACpF,QAAA,EAAA;AAAA,oBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,OAAA,EAAS,QAAQ,GAAA,EAAK,EAAA,EAAI,UAAA,EAAY,YAAA,EAAa,EAC9D,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,8BACNH,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAK,MAAA,CAAO,UAAA;AAAA,UACZ,KAAK,MAAA,CAAO,IAAA;AAAA,UACZ,KAAA,EAAO;AAAA,YACL,KAAA,EAAO,EAAA;AAAA,YACP,MAAA,EAAQ,EAAA;AAAA,YACR,YAAA,EAAc,KAAA;AAAA,YACd,SAAA,EAAW;AAAA;AACb;AAAA,OACF;AAAA,sCAED,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAA,cAAAA,CAAC,QAAG,KAAA,EAAO,EAAE,QAAQ,CAAA,EAAE,EAAI,iBAAO,IAAA,EAAK,CAAA;AAAA,QACtC,MAAA,CAAO,KAAA,oBACNG,eAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,kCAAA,EAAmC,EACpF,QAAA,EAAA;AAAA,UAAA,MAAA,CAAO,KAAA;AAAA,UAAO,MAAA,CAAO,OAAA,GAAU,CAAA,IAAA,EAAO,MAAA,CAAO,OAAO,CAAA,CAAA,GAAK;AAAA,SAAA,EAC5D,CAAA;AAAA,QAED,WAAW,MAAA,CAAO,GAAA,oBACjBH,cAAAA,CAAC,OAAE,KAAA,EAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAO,0BAAA,EAA4B,QAAA,EAAU,EAAA,EAAG,EAAI,iBAAO,GAAA,EAAI,CAAA;AAAA,QAE7F,cAAcI,qCAAA,CAAqB,MAAM,CAAA,CAAE,MAAA,GAAS,qBACnDJ,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,KAAK,EAAA,EAAI,SAAA,EAAW,GAAE,EAClD,QAAA,EAAAI,qCAAA,CAAqB,MAAM,CAAA,CAAE,IAAI,CAAC,IAAA,qBACjCJ,cAAAA,CAAC,GAAA,EAAA,EAAmB,MAAM,IAAA,CAAK,IAAA,EAAM,MAAA,EAAO,QAAA,EAAS,KAAI,qBAAA,EACtD,QAAA,EAAA,IAAA,CAAK,SADA,IAAA,CAAK,KAEb,CACD,CAAA,EACH;AAAA,OAAA,EAEJ;AAAA,KAAA,EACF,CAAA;AAAA,IAEC,cAAA,oBAAkBA,cAAAA,CAAC,UAAA,EAAA,EAAW,MAAA,EAAgB;AAAA,GAAA,EACjD,CAAA;AAEJ;AC9KA,SAAS,UAAA,CAAW,EAAE,MAAA,EAAO,EAA2B;AACtD,EAAA,uBACEG,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,gBAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,UAAA,EAAY,QAAA;AAAA,QACZ,SAAA,EAAW,QAAA;AAAA,QACX,OAAA,EAAS;AAAA,OACX;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,MAAA,CAAO,8BACNH,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAK,MAAA,CAAO,UAAA;AAAA,YACZ,KAAK,MAAA,CAAO,IAAA;AAAA,YACZ,KAAA,EAAO,GAAA;AAAA,YACP,MAAA,EAAQ,GAAA;AAAA,YACR,KAAA,EAAO;AAAA,cACL,KAAA,EAAO,GAAA;AAAA,cACP,MAAA,EAAQ,GAAA;AAAA,cACR,YAAA,EAAc,KAAA;AAAA,cACd,SAAA,EAAW,OAAA;AAAA,cACX,YAAA,EAAc,EAAA;AAAA,cACd,MAAA,EAAQ;AAAA;AACV;AAAA,SACF;AAAA,wBAEFA,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,QAAA,EAAU,EAAA,EAAI,YAAY,GAAA,EAAK,KAAA,EAAO,iCAAA,EAAkC,EAC7F,iBAAO,IAAA,EACV,CAAA;AAAA,QAAA,CACE,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,OAAA,qBACvBG,eAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,QAAQ,SAAA,EAAW,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,qCAAoC,EACrF,QAAA,EAAA;AAAA,UAAA,MAAA,CAAO,KAAA;AAAA,UAAO,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,OAAA,GAAU,MAAA,GAAS,EAAA;AAAA,UAAI,MAAA,CAAO;AAAA,SAAA,EACtE,CAAA;AAAA,QAED,MAAA,CAAO,uBACNH,cAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,MAAA,EAAQ,aAAA;AAAA,cACR,QAAA,EAAU,GAAA;AAAA,cACV,QAAA,EAAU,EAAA;AAAA,cACV,UAAA,EAAY,GAAA;AAAA,cACZ,KAAA,EAAO;AAAA,aACT;AAAA,YAEC,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,SACV;AAAA,wBAIFA,cAAAA,CAAC,WAAA,EAAA,EAAY,MAAA,EAAgB;AAAA;AAAA;AAAA,GAC/B;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,MAAA,EAAO,EAA2B;AACvD,EAAA,MAAM,KAAA,GAAQI,sCAAqB,MAAM,CAAA;AAEzC,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,EAAA,uBACEJ,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAQ,GAAA,EAAK,EAAA,EAAI,SAAA,EAAW,IAAG,EACnD,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,yBACVA,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MAEC,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,MAAA,EAAO,QAAA;AAAA,MACP,GAAA,EAAI,qBAAA;AAAA,MACJ,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,aAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,GAAA,EAAK,CAAA;AAAA,QACL,OAAA,EAAS,UAAA;AAAA,QACT,YAAA,EAAc,CAAA;AAAA,QACd,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,GAAA;AAAA,QACZ,KAAA,EAAO,mBAAA;AAAA,QACP,UAAA,EAAY,0BAAA;AAAA,QACZ,MAAA,EAAQ,oCAAA;AAAA,QACR,cAAA,EAAgB;AAAA,OAClB;AAAA,MAEC,QAAA,EAAA,IAAA,CAAK;AAAA,KAAA;AAAA,IAlBD,IAAA,CAAK;AAAA,GAoBb,CAAA,EACH,CAAA;AAEJ;AAEA,SAAS,QAAA,CAAS,EAAE,IAAA,EAAM,IAAA,EAAK,EAAqC;AAClE,EAAA,MAAM,OAAA,GAAUK,oCAAmB,IAAI,CAAA;AACvC,EAAA,MAAM,OAAO,IAAA,CAAK,YAAA,GACd,IAAI,IAAA,CAAK,IAAA,CAAK,YAAY,CAAA,CAAE,kBAAA,CAAmB,OAAA,EAAS,EAAE,MAAM,SAAA,EAAW,KAAA,EAAO,SAAS,GAAA,EAAK,SAAA,EAAW,CAAA,GAC3G,IAAA;AAEJ,EAAA,uBACEF,eAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,qBAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,YAAA,EAAc,EAAA;AAAA,QACd,MAAA,EAAQ,qCAAA;AAAA,QACR,QAAA,EAAU,QAAA;AAAA,QACV,UAAA,EAAY,yBAAA;AAAA,QACZ,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe;AAAA,OACjB;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,OAAA,CAAQ,uBACPH,cAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAY,OAAO,EAAE,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,UAAU,WAAA,EAAa,OAAA,CAAQ,WAAW,MAAA,GAAY,MAAA,IACxG,QAAA,kBAAAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAK,OAAA,CAAQ,GAAA;AAAA,YACb,KAAK,OAAA,CAAQ,GAAA;AAAA,YACb,uBAAA,EAAuB,QAAQ,QAAA,IAAY,MAAA;AAAA,YAC3C,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAkB,GAAGM,sCAAA,CAAsB,OAAO,CAAA,EAAE;AAAA,YACvG,OAAA,EAAQ;AAAA;AAAA,SACV,EACF,CAAA;AAAA,wBAEFH,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,EAAA,EAAI,IAAA,EAAM,CAAA,EAAG,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,UAAkB,EACnF,QAAA,EAAA;AAAA,UAAA,IAAA,oBACCH,cAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,kCAAA,EAAoC,YAAA,EAAc,CAAA,EAAE,EAAI,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,0BAEnGA,cAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAY,KAAA,EAAO,EAAE,cAAA,EAAgB,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU,EAC/D,QAAA,kBAAAA,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAK,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,iCAAA,EAAkC,EACtH,QAAA,EAAA,IAAA,CAAK,OACR,CAAA,EACF,CAAA;AAAA,UACC,KAAK,OAAA,oBACJA,eAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,UAAU,EAAA,EAAI,UAAA,EAAY,KAAK,KAAA,EAAO,mCAAA,EAAqC,MAAM,CAAA,EAAE,EACvG,eAAK,OAAA,EACR,CAAA;AAAA,UAEDO,mCAAA,CAAmB,IAAI,CAAA,oBACtBJ,gBAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,kCAAA,EAAoC,SAAA,EAAW,IAAG,EACnF,QAAA,EAAA;AAAA,YAAAI,mCAAA,CAAmB,IAAI,CAAA;AAAA,YAAE;AAAA,WAAA,EAC5B;AAAA,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ;AAMO,SAAS,WAAW,EAAE,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,SAAQ,EAAoB;AAChF,EAAA,MAAM,SAASC,iCAAA,CAAiB,EAAE,QAAA,EAAU,GAAG,SAAS,CAAA;AACxD,EAAA,MAAM,MAAA,GAASC,sCAAqB,MAAM,CAAA;AAE1C,EAAA,uBACEN,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAH,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,qBAAA;AAAA,QACL,uBAAA,EAAyB,EAAE,MAAA,EAAQU,2BAAA,CAAW,MAAM,CAAA;AAAE;AAAA,KACxD;AAAA,oBAGAV,cAAAA,CAAC,UAAA,EAAA,EAAW,MAAA,EAAgB,CAAA;AAAA,oBAG5BA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,UAAU,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,UAAS,EAC/D,QAAA,kBAAAA,cAAAA,CAAC,UAAA,EAAA,EAAW,QAAgB,CAAA,EAC9B,CAAA;AAAA,IAGC,KAAA,CAAM,MAAA,GAAS,CAAA,oBACdG,gBAAC,SAAA,EAAA,EAAQ,KAAA,EAAO,EAAE,QAAA,EAAU,IAAA,EAAM,MAAA,EAAQ,aAAA,EAAe,OAAA,EAAS,eAAc,EAC9E,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAK,YAAA,EAAc,EAAA,EAAI,KAAA,EAAO,iCAAA,EAAkC,EAAG,QAAA,EAAA;AAAA,QAAA,cAAA;AAAA,QAC3F,MAAA,CAAO,IAAA;AAAA,QACnB,OAAO,MAAA,CAAO,UAAA,KAAe,QAAA,oBAC5BA,gBAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,UAAA,EAAY,KAAK,QAAA,EAAU,EAAA,EAAI,OAAO,kCAAA,EAAoC,UAAA,EAAY,GAAE,EAAG,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UACtG,MAAA,CAAO,UAAA;AAAA,UAAW;AAAA,SAAA,EACtB;AAAA,OAAA,EAEJ,CAAA;AAAA,sBACAH,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,sBAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,mBAAA,EAAqB,uCAAA;AAAA,YACrB,GAAA,EAAK;AAAA,WACP;AAAA,UAEC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVA,cAAAA,CAAC,QAAA,EAAA,EAAuB,IAAA,EAAY,IAAA,EAAM,OAAO,IAAA,CAAK,IAAI,CAAA,EAAA,EAA3C,IAAA,CAAK,EAAyC,CAC9D;AAAA;AAAA;AACH,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AC1MA,SAAS,cAAc,OAAA,EAA4B;AAEjD,EAAA,MAAM,YAAA,GAAe,mDAAA;AACrB,EAAA,MAAM,QAAmB,EAAC;AAC1B,EAAA,IAAI,KAAA;AAEJ,EAAA,OAAA,CAAQ,KAAA,GAAQ,YAAA,CAAa,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AACpD,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,KAAA,EAAO,QAAA,CAAS,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,MACxB,EAAA,EAAI,MAAM,CAAC,CAAA;AAAA,MACX,MAAM,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,YAAY,EAAE;AAAA;AAAA,KACtC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,OAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,EAAyB;AACvB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAID,eAAiB,EAAE,CAAA;AACnD,EAAA,MAAM,KAAA,GAAQ,cAAc,OAAO,CAAA,CAAE,OAAO,CAAC,IAAA,KAAS,IAAA,CAAK,KAAA,IAAS,QAAQ,CAAA;AAE5E,EAAAY,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAEnC,IAAA,MAAM,WAAW,IAAI,oBAAA;AAAA,MACnB,CAAC,OAAA,KAAY;AACX,QAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,KAAU;AACzB,UAAA,IAAI,MAAM,cAAA,EAAgB;AACxB,YAAA,WAAA,CAAY,KAAA,CAAM,OAAO,EAAE,CAAA;AAAA,UAC7B;AAAA,QACF,CAAC,CAAA;AAAA,MACH,CAAA;AAAA,MACA;AAAA,QACE,UAAA,EAAY,iBAAA;AAAA,QACZ,SAAA,EAAW;AAAA;AACb,KACF;AAGA,IAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;AACtB,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,cAAA,CAAe,IAAA,CAAK,EAAE,CAAA;AAC/C,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,QAAA,CAAS,QAAQ,OAAO,CAAA;AAAA,MAC1B;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,EAAA,MAAM,WAAA,GAAc,CAAC,EAAA,KAAe;AAClC,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,cAAA,CAAe,EAAE,CAAA;AAC1C,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,CAAQ,cAAA,CAAe,EAAE,QAAA,EAAU,QAAA,EAAU,CAAA;AAAA,IAC/C;AAAA,EACF,CAAA;AAEA,EAAA,uBACER,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,cAAW,mBAAA,EACpC,QAAA,EAAA;AAAA,oBAAAH,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,QAAQ,UAAA,EAAY,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,KAAK,aAAA,EAAe,WAAA,EAAa,aAAA,EAAe,QAAA,IAAY,QAAA,EAAA,cAAA,EAEvH,CAAA;AAAA,oBACAA,cAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,WAAW,MAAA,EAAQ,MAAA,EAAQ,CAAA,EAAG,OAAA,EAAS,GAAE,EACnD,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,yBACVA,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,KAAA,EAAO;AAAA,UACL,WAAA,EAAA,CAAc,IAAA,CAAK,KAAA,GAAQ,CAAA,IAAK,EAAA;AAAA,UAChC,YAAA,EAAc;AAAA,SAChB;AAAA,QAEA,QAAA,kBAAAA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,WAAA,CAAY,IAAA,CAAK,EAAE,CAAA;AAAA,YAClC,KAAA,EAAO;AAAA,cACL,GAAA,EAAK,OAAA;AAAA,cACL,MAAA,EAAQ,SAAA;AAAA,cACR,QAAA,EAAU,EAAA;AAAA,cACV,KAAA,EAAO,QAAA,KAAa,IAAA,CAAK,EAAA,GAAK,yBAAA,GAA4B,0BAAA;AAAA,cAC1D,UAAA,EAAY,QAAA,KAAa,IAAA,CAAK,EAAA,GAAK,GAAA,GAAM,GAAA;AAAA,cACzC,UAAA,EAAY;AAAA,aACd;AAAA,YAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA;AACR,OAAA;AAAA,MAlBK,IAAA,CAAK;AAAA,KAoBb,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ","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"]}
|
|
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,17 +1,22 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { BlogFAQ } from '../chunk-O237KKCX.mjs';
|
|
3
2
|
import { NewsletterShell } from '../chunk-AK6JZ3OE.mjs';
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
export { BlogFAQ } from '../chunk-O237KKCX.mjs';
|
|
4
|
+
import { getAuthorSocialLinks, readingTimeMinutes } from '../chunk-GF4LV5LX.mjs';
|
|
5
|
+
export { BlogLayout, BlogList, BlogPage, BlogPost, BlogPostPage, BlogSidebar, CategoryPage, ClusterNavigation, RelatedPosts, ServiceCallout, ServiceCallouts } from '../chunk-GF4LV5LX.mjs';
|
|
6
6
|
import '../chunk-YFX3Q56O.mjs';
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
export { addExternalLinkTargets, linkClassificationHost, normalizeSiteHost, resolveBlogSiteUrl } from '../chunk-Y5QZPUL3.mjs';
|
|
8
|
+
import { createBlogRoutes, generateAuthorSchema, resolveBlogArtwork, blogArtworkImageStyle } from '../chunk-5B4J3IBX.mjs';
|
|
9
|
+
export { blogCategorySlug, createBlogRoutes, resolveBlogArtwork, resolveBlogPostUrl, resolveBlogUrl } from '../chunk-5B4J3IBX.mjs';
|
|
9
10
|
import { safeJsonLd } from '../chunk-662YHKWW.mjs';
|
|
11
|
+
import '../chunk-4TLFZ6NR.mjs';
|
|
12
|
+
import '../chunk-4LYW6PMU.mjs';
|
|
13
|
+
import '../chunk-JLVCWC6A.mjs';
|
|
14
|
+
import '../chunk-ZN4HBK5C.mjs';
|
|
10
15
|
import '../chunk-BEXTDHO4.mjs';
|
|
11
16
|
import React, { useState, Suspense, useEffect } from 'react';
|
|
12
17
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
13
18
|
|
|
14
|
-
var ManagedNewsletterForm = React.lazy(() => import('../ManagedNewsletterForm-
|
|
19
|
+
var ManagedNewsletterForm = React.lazy(() => import('../ManagedNewsletterForm-5RY3TWPQ.mjs'));
|
|
15
20
|
function NewsletterWidget({
|
|
16
21
|
title = "Subscribe to Our Newsletter",
|
|
17
22
|
description = "Get the latest posts delivered straight to your inbox.",
|
package/dist/blog/index.mjs.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":["jsx","jsxs","useState"],"mappings":";;;;;;;;;;;;AA4BA,IAAM,wBAAwB,KAAA,CAAM,IAAA,CAAK,MAAM,OAAO,uCAAyB,CAAC,CAAA;AAazE,SAAS,gBAAA,CAAiB;AAAA,EAC/B,KAAA,GAAQ,6BAAA;AAAA,EACR,WAAA,GAAc,wDAAA;AAAA,EACd,UAAA,GAAa,WAAA;AAAA,EACb,QAAA;AAAA,EACA,QAAA;AAAA,EACA,cAAA,GAAiB;AACnB,CAAA,EAA0B;AACxB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAsD,MAAM,CAAA;AACxF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAwB,IAAI,CAAA;AAEpE,EAAA,IAAI,CAAC,YAAY,QAAA,EAAU;AACzB,IAAA,uBACE,GAAA,CAAC,QAAA,EAAA,EAAS,QAAA,EAAU,IAAA,EAClB,QAAA,kBAAA,GAAA;AAAA,MAAC,qBAAA;AAAA,MAAA;AAAA,QAEC,QAAA;AAAA,QACA,KAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OAAA;AAAA,MALK;AAAA,KAMP,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAA,CAAQ,IAAA;AAAA,MACN;AAAA,KACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,KAAA;AAAA,MACA,aAAA,EAAe,QAAA;AAAA,MACf,YAAA,EAAc,CAAC,CAAA,KAAM;AACnB,QAAA,CAAA,CAAE,cAAA,EAAe;AACjB,QAAA,SAAA,CAAU,YAAY,CAAA;AACtB,QAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,QAAA,QAAA,CAAS,KAAK,CAAA,CACX,IAAA,CAAK,MAAM,SAAA,CAAU,SAAS,CAAC,CAAA,CAC/B,KAAA,CAAM,CAAC,GAAA,KAAQ;AACd,UAAA,SAAA,CAAU,OAAO,CAAA;AACjB,UAAA,eAAA,CAAgB,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,IAAI,CAAA;AAAA,QAC3D,CAAC,CAAA;AAAA,MACL,CAAA;AAAA,MACA,MAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;ACtFA,SAAS,UAAA,CAAW,EAAE,MAAA,EAAO,EAA2B;AACtD,EAAA,MAAM,WAAW,OAAO,MAAA,CAAO,gBAAA,KAAqB,QAAA,IAAY,OAAO,gBAAA,GAAmB,CAAA;AAC1F,EAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,YAAY,MAAA,GAAS,CAAA;AACzE,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,eAAA,IAAmB,MAAA,CAAO,gBAAgB,MAAA,GAAS,CAAA;AAC/E,EAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,qBAAA,IAAyB,MAAA,CAAO,sBAAsB,MAAA,GAAS,CAAA;AAC9F,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,OAAO,MAAA,GAAS,CAAA;AAC1D,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,wBAAA,IAA4B,MAAA,CAAO,wBAAA;AAE7D,EAAA,MAAM,WAAA,GAAc,QAAA,IAAY,cAAA,IAAkB,YAAA,IAAgB,mBAAmB,SAAA,IAAa,UAAA;AAClG,EAAA,IAAI,CAAC,aAAa,OAAO,IAAA;AAEzB,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,iBAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,QACX,OAAA,EAAS,EAAA;AAAA,QACT,YAAA,EAAc,EAAA;AAAA,QACd,MAAA,EAAQ,qCAAA;AAAA,QACR,UAAA,EAAY;AAAA,OACd;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAA,GAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,MAAA,EAAQ,UAAA;AAAA,cACR,QAAA,EAAU,EAAA;AAAA,cACV,UAAA,EAAY,GAAA;AAAA,cACZ,aAAA,EAAe,WAAA;AAAA,cACf,aAAA,EAAe,QAAA;AAAA,cACf,KAAA,EAAO;AAAA,aACT;AAAA,YACD,QAAA,EAAA;AAAA;AAAA,SAED;AAAA,6BAGC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,QAAQ,QAAA,EAAU,MAAA,EAAiB,GAAA,EAAK,CAAA,EAAG,cAAc,cAAA,IAAkB,YAAA,IAAgB,mBAAmB,SAAA,GAAY,EAAA,GAAK,GAAE,EACrJ,QAAA,EAAA;AAAA,UAAA,UAAA,oBACC,IAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,aAAA;AAAA,gBACT,UAAA,EAAY,QAAA;AAAA,gBACZ,GAAA,EAAK,CAAA;AAAA,gBACL,OAAA,EAAS,UAAA;AAAA,gBACT,YAAA,EAAc,IAAA;AAAA,gBACd,QAAA,EAAU,EAAA;AAAA,gBACV,UAAA,EAAY,GAAA;AAAA,gBACZ,UAAA,EAAY,yBAAA;AAAA,gBACZ,KAAA,EAAO,mBAAA;AAAA,gBACP,MAAA,EAAQ;AAAA,eACV;AAAA,cAEA,QAAA,EAAA;AAAA,gCAAA,IAAA,CAAC,SAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,SAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,MAAA,EAAO,gBAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,gBAAe,OAAA,EACvI,QAAA,EAAA;AAAA,kCAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oCAAA,EAAqC,CAAA;AAAA,kCAC7CA,GAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,uBAAA,EAAwB;AAAA,iBAAA,EAC3C,CAAA;AAAA,gBAAM;AAAA;AAAA;AAAA,WAER;AAAA,UAED,QAAA,oBACC,IAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,aAAA;AAAA,gBACT,UAAA,EAAY,QAAA;AAAA,gBACZ,OAAA,EAAS,UAAA;AAAA,gBACT,YAAA,EAAc,IAAA;AAAA,gBACd,QAAA,EAAU,EAAA;AAAA,gBACV,UAAA,EAAY,GAAA;AAAA,gBACZ,UAAA,EAAY,yBAAA;AAAA,gBACZ,KAAA,EAAO,kBAAA;AAAA,gBACP,MAAA,EAAQ;AAAA,eACV;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,MAAA,CAAO,gBAAA;AAAA,gBAAiB;AAAA;AAAA;AAAA;AAC3B,SAAA,EAEJ,CAAA;AAAA,QAGC,kCACC,IAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,YAAA,EAAc,IAAG,EAC7B,QAAA,EAAA;AAAA,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,mCAAA,EAAoC,EAAG,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,0BACvGA,GAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,YAAA,EAAc,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,mCAAA,EAAqC,UAAA,EAAY,GAAA,EAAI,EAC9H,QAAA,EAAA,MAAA,CAAO,WAAA,CAAa,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBAC3BA,GAAAA,CAAC,IAAA,EAAA,EAAY,QAAA,EAAA,CAAA,EAAA,EAAJ,CAAM,CAChB,CAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,QAID,gCACC,IAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,YAAA,EAAc,IAAG,EAC7B,QAAA,EAAA;AAAA,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,UAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,qCAAqC,OAAA,EAAS,OAAA,EAAS,YAAA,EAAc,CAAA,IAAK,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,0BACxIA,GAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,OAAA,EAAS,QAAQ,QAAA,EAAU,MAAA,EAAiB,GAAA,EAAK,CAAA,IAC5D,QAAA,EAAA,MAAA,CAAO,eAAA,CAAiB,IAAI,CAAC,IAAA,EAAM,sBAClCA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cAEC,KAAA,EAAO;AAAA,gBACL,OAAA,EAAS,UAAA;AAAA,gBACT,YAAA,EAAc,IAAA;AAAA,gBACd,QAAA,EAAU,EAAA;AAAA,gBACV,UAAA,EAAY,4BAAA;AAAA,gBACZ,KAAA,EAAO;AAAA,eACT;AAAA,cAEC,QAAA,EAAA;AAAA,aAAA;AAAA,YATI;AAAA,WAWR,CAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,QAID,mCACC,IAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,YAAA,EAAc,IAAG,EAC7B,QAAA,EAAA;AAAA,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,mCAAA,EAAoC,EAAG,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,0BACvGA,GAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,YAAA,EAAc,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,mCAAA,EAAqC,UAAA,EAAY,GAAA,EAAI,EAC9H,QAAA,EAAA,MAAA,CAAO,qBAAA,CAAuB,GAAA,CAAI,CAAC,GAAA,EAAK,CAAA,qBACvCA,GAAAA,CAAC,IAAA,EAAA,EAAY,QAAA,EAAA,GAAA,EAAA,EAAJ,CAAQ,CAClB,CAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,QAID,SAAA,yBACE,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,mCAAA,EAAoC,EAAG,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,0BAClGA,GAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,YAAA,EAAc,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,mCAAA,EAAqC,UAAA,EAAY,GAAA,EAAI,EAC9H,QAAA,EAAA,MAAA,CAAO,MAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,qBAC1BA,GAAAA,CAAC,IAAA,EAAA,EAAY,QAAA,EAAA,KAAA,EAAA,EAAJ,CAAU,CACpB,CAAA,EACH;AAAA,SAAA,EACF;AAAA;AAAA;AAAA,GAEJ;AAEJ;AAMO,SAAS,UAAA,CAAW,EAAE,MAAA,EAAQ,OAAA,GAAU,IAAA,EAAM,aAAa,IAAA,EAAM,cAAA,GAAiB,KAAA,EAAO,SAAA,EAAU,EAAoB;AAC5H,EAAA,uBACE,IAAA,CAAC,SAAI,SAAA,EAAsB,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAkB,EACpF,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,OAAA,EAAS,QAAQ,GAAA,EAAK,EAAA,EAAI,UAAA,EAAY,YAAA,EAAa,EAC9D,QAAA,EAAA;AAAA,MAAA,MAAA,CAAO,8BACNA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,KAAK,MAAA,CAAO,UAAA;AAAA,UACZ,KAAK,MAAA,CAAO,IAAA;AAAA,UACZ,KAAA,EAAO;AAAA,YACL,KAAA,EAAO,EAAA;AAAA,YACP,MAAA,EAAQ,EAAA;AAAA,YACR,YAAA,EAAc,KAAA;AAAA,YACd,SAAA,EAAW;AAAA;AACb;AAAA,OACF;AAAA,2BAED,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAA,GAAAA,CAAC,QAAG,KAAA,EAAO,EAAE,QAAQ,CAAA,EAAE,EAAI,iBAAO,IAAA,EAAK,CAAA;AAAA,QACtC,MAAA,CAAO,KAAA,oBACN,IAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,kCAAA,EAAmC,EACpF,QAAA,EAAA;AAAA,UAAA,MAAA,CAAO,KAAA;AAAA,UAAO,MAAA,CAAO,OAAA,GAAU,CAAA,IAAA,EAAO,MAAA,CAAO,OAAO,CAAA,CAAA,GAAK;AAAA,SAAA,EAC5D,CAAA;AAAA,QAED,WAAW,MAAA,CAAO,GAAA,oBACjBA,GAAAA,CAAC,OAAE,KAAA,EAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAO,0BAAA,EAA4B,QAAA,EAAU,EAAA,EAAG,EAAI,iBAAO,GAAA,EAAI,CAAA;AAAA,QAE7F,cAAc,oBAAA,CAAqB,MAAM,CAAA,CAAE,MAAA,GAAS,qBACnDA,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,KAAK,EAAA,EAAI,SAAA,EAAW,GAAE,EAClD,QAAA,EAAA,oBAAA,CAAqB,MAAM,CAAA,CAAE,IAAI,CAAC,IAAA,qBACjCA,GAAAA,CAAC,GAAA,EAAA,EAAmB,MAAM,IAAA,CAAK,IAAA,EAAM,MAAA,EAAO,QAAA,EAAS,KAAI,qBAAA,EACtD,QAAA,EAAA,IAAA,CAAK,SADA,IAAA,CAAK,KAEb,CACD,CAAA,EACH;AAAA,OAAA,EAEJ;AAAA,KAAA,EACF,CAAA;AAAA,IAEC,cAAA,oBAAkBA,GAAAA,CAAC,UAAA,EAAA,EAAW,MAAA,EAAgB;AAAA,GAAA,EACjD,CAAA;AAEJ;AC9KA,SAAS,UAAA,CAAW,EAAE,MAAA,EAAO,EAA2B;AACtD,EAAA,uBACEC,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,gBAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,UAAA,EAAY,QAAA;AAAA,QACZ,SAAA,EAAW,QAAA;AAAA,QACX,OAAA,EAAS;AAAA,OACX;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,MAAA,CAAO,8BACND,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAK,MAAA,CAAO,UAAA;AAAA,YACZ,KAAK,MAAA,CAAO,IAAA;AAAA,YACZ,KAAA,EAAO,GAAA;AAAA,YACP,MAAA,EAAQ,GAAA;AAAA,YACR,KAAA,EAAO;AAAA,cACL,KAAA,EAAO,GAAA;AAAA,cACP,MAAA,EAAQ,GAAA;AAAA,cACR,YAAA,EAAc,KAAA;AAAA,cACd,SAAA,EAAW,OAAA;AAAA,cACX,YAAA,EAAc,EAAA;AAAA,cACd,MAAA,EAAQ;AAAA;AACV;AAAA,SACF;AAAA,wBAEFA,GAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,QAAA,EAAU,EAAA,EAAI,YAAY,GAAA,EAAK,KAAA,EAAO,iCAAA,EAAkC,EAC7F,iBAAO,IAAA,EACV,CAAA;AAAA,QAAA,CACE,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,OAAA,qBACvBC,IAAAA,CAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,QAAQ,SAAA,EAAW,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,qCAAoC,EACrF,QAAA,EAAA;AAAA,UAAA,MAAA,CAAO,KAAA;AAAA,UAAO,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,OAAA,GAAU,MAAA,GAAS,EAAA;AAAA,UAAI,MAAA,CAAO;AAAA,SAAA,EACtE,CAAA;AAAA,QAED,MAAA,CAAO,uBACND,GAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,MAAA,EAAQ,aAAA;AAAA,cACR,QAAA,EAAU,GAAA;AAAA,cACV,QAAA,EAAU,EAAA;AAAA,cACV,UAAA,EAAY,GAAA;AAAA,cACZ,KAAA,EAAO;AAAA,aACT;AAAA,YAEC,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,SACV;AAAA,wBAIFA,GAAAA,CAAC,WAAA,EAAA,EAAY,MAAA,EAAgB;AAAA;AAAA;AAAA,GAC/B;AAEJ;AAEA,SAAS,WAAA,CAAY,EAAE,MAAA,EAAO,EAA2B;AACvD,EAAA,MAAM,KAAA,GAAQ,qBAAqB,MAAM,CAAA;AAEzC,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,EAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAQ,GAAA,EAAK,EAAA,EAAI,SAAA,EAAW,IAAG,EACnD,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,yBACVA,GAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MAEC,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,MAAA,EAAO,QAAA;AAAA,MACP,GAAA,EAAI,qBAAA;AAAA,MACJ,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,aAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,GAAA,EAAK,CAAA;AAAA,QACL,OAAA,EAAS,UAAA;AAAA,QACT,YAAA,EAAc,CAAA;AAAA,QACd,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,GAAA;AAAA,QACZ,KAAA,EAAO,mBAAA;AAAA,QACP,UAAA,EAAY,0BAAA;AAAA,QACZ,MAAA,EAAQ,oCAAA;AAAA,QACR,cAAA,EAAgB;AAAA,OAClB;AAAA,MAEC,QAAA,EAAA,IAAA,CAAK;AAAA,KAAA;AAAA,IAlBD,IAAA,CAAK;AAAA,GAoBb,CAAA,EACH,CAAA;AAEJ;AAEA,SAAS,QAAA,CAAS,EAAE,IAAA,EAAM,IAAA,EAAK,EAAqC;AAClE,EAAA,MAAM,OAAA,GAAU,mBAAmB,IAAI,CAAA;AACvC,EAAA,MAAM,OAAO,IAAA,CAAK,YAAA,GACd,IAAI,IAAA,CAAK,IAAA,CAAK,YAAY,CAAA,CAAE,kBAAA,CAAmB,OAAA,EAAS,EAAE,MAAM,SAAA,EAAW,KAAA,EAAO,SAAS,GAAA,EAAK,SAAA,EAAW,CAAA,GAC3G,IAAA;AAEJ,EAAA,uBACEC,IAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,qBAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,YAAA,EAAc,EAAA;AAAA,QACd,MAAA,EAAQ,qCAAA;AAAA,QACR,QAAA,EAAU,QAAA;AAAA,QACV,UAAA,EAAY,yBAAA;AAAA,QACZ,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe;AAAA,OACjB;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,OAAA,CAAQ,uBACPD,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAY,OAAO,EAAE,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,UAAU,WAAA,EAAa,OAAA,CAAQ,WAAW,MAAA,GAAY,MAAA,IACxG,QAAA,kBAAAA,GAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAK,OAAA,CAAQ,GAAA;AAAA,YACb,KAAK,OAAA,CAAQ,GAAA;AAAA,YACb,uBAAA,EAAuB,QAAQ,QAAA,IAAY,MAAA;AAAA,YAC3C,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAkB,GAAG,qBAAA,CAAsB,OAAO,CAAA,EAAE;AAAA,YACvG,OAAA,EAAQ;AAAA;AAAA,SACV,EACF,CAAA;AAAA,wBAEFC,IAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,EAAA,EAAI,IAAA,EAAM,CAAA,EAAG,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,UAAkB,EACnF,QAAA,EAAA;AAAA,UAAA,IAAA,oBACCD,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,kCAAA,EAAoC,YAAA,EAAc,CAAA,EAAE,EAAI,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,0BAEnGA,GAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAY,KAAA,EAAO,EAAE,cAAA,EAAgB,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAU,EAC/D,QAAA,kBAAAA,GAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAK,UAAA,EAAY,GAAA,EAAK,KAAA,EAAO,iCAAA,EAAkC,EACtH,QAAA,EAAA,IAAA,CAAK,OACR,CAAA,EACF,CAAA;AAAA,UACC,KAAK,OAAA,oBACJA,IAAC,GAAA,EAAA,EAAE,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,UAAU,EAAA,EAAI,UAAA,EAAY,KAAK,KAAA,EAAO,mCAAA,EAAqC,MAAM,CAAA,EAAE,EACvG,eAAK,OAAA,EACR,CAAA;AAAA,UAED,kBAAA,CAAmB,IAAI,CAAA,oBACtBC,KAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,KAAA,EAAO,kCAAA,EAAoC,SAAA,EAAW,IAAG,EACnF,QAAA,EAAA;AAAA,YAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,YAAE;AAAA,WAAA,EAC5B;AAAA,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ;AAMO,SAAS,WAAW,EAAE,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,SAAQ,EAAoB;AAChF,EAAA,MAAM,SAAS,gBAAA,CAAiB,EAAE,QAAA,EAAU,GAAG,SAAS,CAAA;AACxD,EAAA,MAAM,MAAA,GAAS,qBAAqB,MAAM,CAAA;AAE1C,EAAA,uBACEA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,qBAAA;AAAA,QACL,uBAAA,EAAyB,EAAE,MAAA,EAAQ,UAAA,CAAW,MAAM,CAAA;AAAE;AAAA,KACxD;AAAA,oBAGAA,GAAAA,CAAC,UAAA,EAAA,EAAW,MAAA,EAAgB,CAAA;AAAA,oBAG5BA,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,UAAU,GAAA,EAAK,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,UAAS,EAC/D,QAAA,kBAAAA,GAAAA,CAAC,UAAA,EAAA,EAAW,QAAgB,CAAA,EAC9B,CAAA;AAAA,IAGC,KAAA,CAAM,MAAA,GAAS,CAAA,oBACdC,KAAC,SAAA,EAAA,EAAQ,KAAA,EAAO,EAAE,QAAA,EAAU,IAAA,EAAM,MAAA,EAAQ,aAAA,EAAe,OAAA,EAAS,eAAc,EAC9E,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAK,YAAA,EAAc,EAAA,EAAI,KAAA,EAAO,iCAAA,EAAkC,EAAG,QAAA,EAAA;AAAA,QAAA,cAAA;AAAA,QAC3F,MAAA,CAAO,IAAA;AAAA,QACnB,OAAO,MAAA,CAAO,UAAA,KAAe,QAAA,oBAC5BA,KAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,UAAA,EAAY,KAAK,QAAA,EAAU,EAAA,EAAI,OAAO,kCAAA,EAAoC,UAAA,EAAY,GAAE,EAAG,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UACtG,MAAA,CAAO,UAAA;AAAA,UAAW;AAAA,SAAA,EACtB;AAAA,OAAA,EAEJ,CAAA;AAAA,sBACAD,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,sBAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,mBAAA,EAAqB,uCAAA;AAAA,YACrB,GAAA,EAAK;AAAA,WACP;AAAA,UAEC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACVA,GAAAA,CAAC,QAAA,EAAA,EAAuB,IAAA,EAAY,IAAA,EAAM,OAAO,IAAA,CAAK,IAAI,CAAA,EAAA,EAA3C,IAAA,CAAK,EAAyC,CAC9D;AAAA;AAAA;AACH,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AC1MA,SAAS,cAAc,OAAA,EAA4B;AAEjD,EAAA,MAAM,YAAA,GAAe,mDAAA;AACrB,EAAA,MAAM,QAAmB,EAAC;AAC1B,EAAA,IAAI,KAAA;AAEJ,EAAA,OAAA,CAAQ,KAAA,GAAQ,YAAA,CAAa,IAAA,CAAK,OAAO,OAAO,IAAA,EAAM;AACpD,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,KAAA,EAAO,QAAA,CAAS,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,MACxB,EAAA,EAAI,MAAM,CAAC,CAAA;AAAA,MACX,MAAM,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,YAAY,EAAE;AAAA;AAAA,KACtC,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,eAAA,CAAgB;AAAA,EAC9B,OAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,EAAyB;AACvB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIE,SAAiB,EAAE,CAAA;AACnD,EAAA,MAAM,KAAA,GAAQ,cAAc,OAAO,CAAA,CAAE,OAAO,CAAC,IAAA,KAAS,IAAA,CAAK,KAAA,IAAS,QAAQ,CAAA;AAE5E,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAEnC,IAAA,MAAM,WAAW,IAAI,oBAAA;AAAA,MACnB,CAAC,OAAA,KAAY;AACX,QAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,KAAU;AACzB,UAAA,IAAI,MAAM,cAAA,EAAgB;AACxB,YAAA,WAAA,CAAY,KAAA,CAAM,OAAO,EAAE,CAAA;AAAA,UAC7B;AAAA,QACF,CAAC,CAAA;AAAA,MACH,CAAA;AAAA,MACA;AAAA,QACE,UAAA,EAAY,iBAAA;AAAA,QACZ,SAAA,EAAW;AAAA;AACb,KACF;AAGA,IAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;AACtB,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,cAAA,CAAe,IAAA,CAAK,EAAE,CAAA;AAC/C,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,QAAA,CAAS,QAAQ,OAAO,CAAA;AAAA,MAC1B;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,EACnC,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,EAAA,MAAM,WAAA,GAAc,CAAC,EAAA,KAAe;AAClC,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,cAAA,CAAe,EAAE,CAAA;AAC1C,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,CAAQ,cAAA,CAAe,EAAE,QAAA,EAAU,QAAA,EAAU,CAAA;AAAA,IAC/C;AAAA,EACF,CAAA;AAEA,EAAA,uBACED,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAsB,cAAW,mBAAA,EACpC,QAAA,EAAA;AAAA,oBAAAD,GAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,QAAQ,UAAA,EAAY,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,KAAK,aAAA,EAAe,WAAA,EAAa,aAAA,EAAe,QAAA,IAAY,QAAA,EAAA,cAAA,EAEvH,CAAA;AAAA,oBACAA,GAAAA,CAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,WAAW,MAAA,EAAQ,MAAA,EAAQ,CAAA,EAAG,OAAA,EAAS,GAAE,EACnD,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,yBACVA,GAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,KAAA,EAAO;AAAA,UACL,WAAA,EAAA,CAAc,IAAA,CAAK,KAAA,GAAQ,CAAA,IAAK,EAAA;AAAA,UAChC,YAAA,EAAc;AAAA,SAChB;AAAA,QAEA,QAAA,kBAAAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,WAAA,CAAY,IAAA,CAAK,EAAE,CAAA;AAAA,YAClC,KAAA,EAAO;AAAA,cACL,GAAA,EAAK,OAAA;AAAA,cACL,MAAA,EAAQ,SAAA;AAAA,cACR,QAAA,EAAU,EAAA;AAAA,cACV,KAAA,EAAO,QAAA,KAAa,IAAA,CAAK,EAAA,GAAK,yBAAA,GAA4B,0BAAA;AAAA,cAC1D,UAAA,EAAY,QAAA,KAAa,IAAA,CAAK,EAAA,GAAK,GAAA,GAAM,GAAA;AAAA,cACzC,UAAA,EAAY;AAAA,aACd;AAAA,YAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA;AACR,OAAA;AAAA,MAlBK,IAAA,CAAK;AAAA,KAoBb,CAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ","file":"index.mjs","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"]}
|
|
1
|
+
{"version":3,"sources":["../../src/blog/NewsletterWidget.tsx","../../src/blog/AuthorCard.tsx","../../src/blog/AuthorPage.tsx","../../src/blog/TableOfContents.tsx"],"names":["jsx","jsxs","useState"],"mappings":"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","file":"index.mjs","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"]}
|
|
@@ -2,8 +2,25 @@
|
|
|
2
2
|
* Post-process Portal/blog HTML for safe, consistent link behavior.
|
|
3
3
|
* Server-safe string transforms only (no DOM).
|
|
4
4
|
*/
|
|
5
|
-
/**
|
|
6
|
-
|
|
5
|
+
/**
|
|
6
|
+
* The host `addExternalLinkTargets` compares links against to decide whether a
|
|
7
|
+
* link is internal (same tab) or external (`target="_blank"`). Lowercased,
|
|
8
|
+
* leading `www.` stripped, so `www.example.com` and `example.com` count as the
|
|
9
|
+
* same site; returns '' for anything unparseable.
|
|
10
|
+
*
|
|
11
|
+
* NOT the multi-site host normalizer. That is `normalizeSiteHost` in
|
|
12
|
+
* `sites/normalize`, which keeps `www.` because `www.example.com` and
|
|
13
|
+
* `example.com` can be different sub-sites of one Sonor project. This used to
|
|
14
|
+
* share that name, so the two were easy to swap by accident.
|
|
15
|
+
*/
|
|
16
|
+
export declare function linkClassificationHost(siteUrl: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* @deprecated Renamed to {@link linkClassificationHost} (same behavior: strips
|
|
19
|
+
* `www.`). It shared a name with the multi-site `normalizeSiteHost` from
|
|
20
|
+
* `sites/normalize`, which keeps `www.`. Kept so existing imports from
|
|
21
|
+
* `@sonordev/site-kit/blog` still work.
|
|
22
|
+
*/
|
|
23
|
+
export declare const normalizeSiteHost: typeof linkClassificationHost;
|
|
7
24
|
/**
|
|
8
25
|
* Resolve canonical site URL for link classification.
|
|
9
26
|
* Pass `explicit` from props when env vars are not set (e.g. non-Vercel hosts).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processBlogHtml.d.ts","sourceRoot":"","sources":["../../src/blog/processBlogHtml.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH
|
|
1
|
+
{"version":3,"file":"processBlogHtml.d.ts","sourceRoot":"","sources":["../../src/blog/processBlogHtml.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ9D;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,+BAAyB,CAAA;AAEvD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAU5D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAsB5E"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { BlogCategory, BlogPost } from './types';
|
|
2
|
+
export interface BlogReadConfig {
|
|
3
|
+
apiUrl: string;
|
|
4
|
+
apiKey: string;
|
|
5
|
+
/** Sub-site host override. Omit to resolve from NEXT_PUBLIC_SITE_URL. */
|
|
6
|
+
site?: string;
|
|
7
|
+
}
|
|
8
|
+
/** GET /public/blog/posts/:slug — null when missing or on any failure. */
|
|
9
|
+
export declare function fetchBlogPostBySlug({ apiUrl, apiKey, site }: BlogReadConfig, slug: string): Promise<BlogPost | null>;
|
|
10
|
+
/** GET /public/blog/categories — [] on any failure. */
|
|
11
|
+
export declare function fetchBlogCategories({ apiUrl, apiKey, site }: BlogReadConfig): Promise<BlogCategory[]>;
|
|
12
|
+
/**
|
|
13
|
+
* POST /public/blog/related — [] on any failure.
|
|
14
|
+
*
|
|
15
|
+
* `/public/blog/*`, not `/api/public/blog/*`: public-blog.controller is one of
|
|
16
|
+
* only two public controllers whose @Controller() omits the `api/` segment.
|
|
17
|
+
* The body is snake_case `current_post_id` (the controller looks the post up
|
|
18
|
+
* by id — there is no slug path), and `site` rides in the body because this is
|
|
19
|
+
* the one blog read that isn't a GET.
|
|
20
|
+
*
|
|
21
|
+
* `revalidate` is optional so <RelatedPosts>, which never set a fetch cache
|
|
22
|
+
* lifetime, keeps rendering exactly as it did.
|
|
23
|
+
*/
|
|
24
|
+
export declare function fetchRelatedBlogPosts({ apiUrl, apiKey, site }: BlogReadConfig, currentPostId: string, limit: number, cache?: {
|
|
25
|
+
revalidate?: number;
|
|
26
|
+
}): Promise<BlogPost[]>;
|
|
27
|
+
//# sourceMappingURL=public-reads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-reads.d.ts","sourceRoot":"","sources":["../../src/blog/public-reads.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAErD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,0EAA0E;AAC1E,wBAAsB,mBAAmB,CACvC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,cAAc,EACxC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAgB1B;AAED,uDAAuD;AACvD,wBAAsB,mBAAmB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAa3G;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,cAAc,EACxC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,KAAK,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAClC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAkBrB"}
|