@riverbankcms/sdk 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +4840 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/client/bookings.d.mts +82 -2
- package/dist/client/bookings.d.ts +82 -2
- package/dist/client/bookings.js +1623 -3
- package/dist/client/bookings.js.map +1 -1
- package/dist/client/bookings.mjs +1610 -5
- package/dist/client/bookings.mjs.map +1 -1
- package/dist/client/client.d.mts +8 -5
- package/dist/client/client.d.ts +8 -5
- package/dist/client/client.js +16873 -322
- package/dist/client/client.js.map +1 -1
- package/dist/client/client.mjs +16855 -307
- package/dist/client/client.mjs.map +1 -1
- package/dist/client/hooks.d.mts +10 -7
- package/dist/client/hooks.d.ts +10 -7
- package/dist/client/hooks.js +5074 -4
- package/dist/client/hooks.js.map +1 -1
- package/dist/client/hooks.mjs +5074 -4
- package/dist/client/hooks.mjs.map +1 -1
- package/dist/client/rendering/client.d.mts +7 -1
- package/dist/client/rendering/client.d.ts +7 -1
- package/dist/client/rendering/client.js +17388 -2
- package/dist/client/rendering/client.js.map +1 -1
- package/dist/client/rendering/client.mjs +17382 -2
- package/dist/client/rendering/client.mjs.map +1 -1
- package/dist/client/resolver-BhueZVxZ.d.mts +61 -0
- package/dist/client/resolver-BhueZVxZ.d.ts +61 -0
- package/dist/client/usePage-BBcFCxOU.d.ts +6297 -0
- package/dist/client/usePage-BydHcMYB.d.mts +6297 -0
- package/dist/client/usePage-CrKw1H6Y.d.ts +6338 -0
- package/dist/client/usePage-DMI8ImsU.d.mts +6338 -0
- package/dist/server/Layout-BM_KmCxO.d.ts +44 -0
- package/dist/server/Layout-CsAQ-0Fv.d.mts +44 -0
- package/dist/server/{chunk-JB4LIEFS.js → chunk-5R4NMVXA.js} +15 -8
- package/dist/server/chunk-5R4NMVXA.js.map +1 -0
- package/dist/server/{chunk-ADREPXFU.js → chunk-62ZJI564.js} +3 -3
- package/dist/server/{chunk-ADREPXFU.js.map → chunk-62ZJI564.js.map} +1 -1
- package/dist/server/chunk-7DS4Q3GA.mjs +333 -0
- package/dist/server/chunk-7DS4Q3GA.mjs.map +1 -0
- package/dist/server/chunk-BJTO5JO5.mjs +11 -0
- package/dist/server/{chunk-4Z5FBFRL.mjs → chunk-BPKYRPCQ.mjs} +7 -3
- package/dist/server/{chunk-4Z5FBFRL.mjs.map → chunk-BPKYRPCQ.mjs.map} +1 -1
- package/dist/server/chunk-DGUM43GV.js +11 -0
- package/dist/server/chunk-DGUM43GV.js.map +1 -0
- package/dist/server/chunk-EGTDJ4PL.js +5461 -0
- package/dist/server/chunk-EGTDJ4PL.js.map +1 -0
- package/dist/server/chunk-FK64TZBT.mjs +831 -0
- package/dist/server/chunk-FK64TZBT.mjs.map +1 -0
- package/dist/server/chunk-HOY77YBF.js +333 -0
- package/dist/server/chunk-HOY77YBF.js.map +1 -0
- package/dist/server/chunk-INWKF3IC.js +831 -0
- package/dist/server/chunk-INWKF3IC.js.map +1 -0
- package/dist/server/{chunk-2RW5HAQQ.mjs → chunk-JTAERCX2.mjs} +2 -2
- package/dist/server/chunk-O5DC7MYW.mjs +9606 -0
- package/dist/server/chunk-O5DC7MYW.mjs.map +1 -0
- package/dist/server/{chunk-PEAXKTDU.mjs → chunk-OP2GHK27.mjs} +2 -2
- package/dist/server/{chunk-WKG57P2H.mjs → chunk-PN3CHDVX.mjs} +10 -3
- package/dist/server/{chunk-WKG57P2H.mjs.map → chunk-PN3CHDVX.mjs.map} +1 -1
- package/dist/server/chunk-QFFQTOY3.mjs +2128 -0
- package/dist/server/chunk-QFFQTOY3.mjs.map +1 -0
- package/dist/server/chunk-SF63XAX7.js +9606 -0
- package/dist/server/chunk-SF63XAX7.js.map +1 -0
- package/dist/server/{chunk-F472SMKX.js → chunk-TO7FD6TQ.js} +4 -4
- package/dist/server/{chunk-F472SMKX.js.map → chunk-TO7FD6TQ.js.map} +1 -1
- package/dist/server/chunk-UFVCBGBY.js +2128 -0
- package/dist/server/chunk-UFVCBGBY.js.map +1 -0
- package/dist/server/chunk-USQF2XTU.mjs +5461 -0
- package/dist/server/chunk-USQF2XTU.mjs.map +1 -0
- package/dist/server/{chunk-SW7LE4M3.js → chunk-XLVL5WPH.js} +12 -8
- package/dist/server/chunk-XLVL5WPH.js.map +1 -0
- package/dist/server/components-CI3JiOYA.d.mts +305 -0
- package/dist/server/components-DJBLu_yc.d.ts +305 -0
- package/dist/server/components.d.mts +14 -49
- package/dist/server/components.d.ts +14 -49
- package/dist/server/components.js +7 -4
- package/dist/server/components.js.map +1 -1
- package/dist/server/components.mjs +9 -6
- package/dist/server/components.mjs.map +1 -1
- package/dist/server/config-validation.d.mts +2 -2
- package/dist/server/config-validation.d.ts +2 -2
- package/dist/server/config-validation.js +6 -3
- package/dist/server/config-validation.js.map +1 -1
- package/dist/server/config-validation.mjs +5 -2
- package/dist/server/config.d.mts +3 -3
- package/dist/server/config.d.ts +3 -3
- package/dist/server/config.js +6 -3
- package/dist/server/config.js.map +1 -1
- package/dist/server/config.mjs +5 -2
- package/dist/server/config.mjs.map +1 -1
- package/dist/server/data.d.mts +10 -8
- package/dist/server/data.d.ts +10 -8
- package/dist/server/data.js +4 -2
- package/dist/server/data.js.map +1 -1
- package/dist/server/data.mjs +3 -1
- package/dist/server/{index-B0yI_V6Z.d.mts → index-DoX3ELQn.d.mts} +1 -1
- package/dist/server/{index-C6M0Wfjq.d.ts → index-Dus2gkY6.d.ts} +1 -1
- package/dist/server/index.d.mts +1568 -5
- package/dist/server/index.d.ts +1568 -5
- package/dist/server/index.js +4 -4
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +4 -4
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/{loadContent-CJcbYF3J.d.ts → loadContent-CdXDGsJM.d.ts} +5 -4
- package/dist/server/{loadContent-zhlL4YSE.d.mts → loadContent-v2n6pOlO.d.mts} +5 -4
- package/dist/server/loadPage-3ECPF426.js +11 -0
- package/dist/server/loadPage-3ECPF426.js.map +1 -0
- package/dist/server/loadPage-LW273NYO.mjs +11 -0
- package/dist/server/loadPage-LW273NYO.mjs.map +1 -0
- package/dist/server/{loadPage-CCf15nt8.d.mts → loadPage-bejlajm9.d.ts} +147 -5
- package/dist/server/{loadPage-BYmVMk0V.d.ts → loadPage-en10WQrt.d.mts} +147 -5
- package/dist/server/metadata.d.mts +10 -6
- package/dist/server/metadata.d.ts +10 -6
- package/dist/server/metadata.js +3 -1
- package/dist/server/metadata.js.map +1 -1
- package/dist/server/metadata.mjs +2 -0
- package/dist/server/metadata.mjs.map +1 -1
- package/dist/server/navigation.d.mts +100 -0
- package/dist/server/navigation.d.ts +100 -0
- package/dist/server/navigation.js +44 -0
- package/dist/server/navigation.js.map +1 -0
- package/dist/server/navigation.mjs +44 -0
- package/dist/server/navigation.mjs.map +1 -0
- package/dist/server/rendering/server.d.mts +10 -7
- package/dist/server/rendering/server.d.ts +10 -7
- package/dist/server/rendering/server.js +7 -4
- package/dist/server/rendering/server.js.map +1 -1
- package/dist/server/rendering/server.mjs +6 -3
- package/dist/server/rendering.d.mts +173 -9
- package/dist/server/rendering.d.ts +173 -9
- package/dist/server/rendering.js +12 -9
- package/dist/server/rendering.js.map +1 -1
- package/dist/server/rendering.mjs +14 -11
- package/dist/server/rendering.mjs.map +1 -1
- package/dist/server/routing.d.mts +10 -6
- package/dist/server/routing.d.ts +10 -6
- package/dist/server/routing.js +4 -2
- package/dist/server/routing.js.map +1 -1
- package/dist/server/routing.mjs +3 -1
- package/dist/server/routing.mjs.map +1 -1
- package/dist/server/schema-Bpy9N5ZI.d.mts +1870 -0
- package/dist/server/schema-Bpy9N5ZI.d.ts +1870 -0
- package/dist/server/server.d.mts +12 -8
- package/dist/server/server.d.ts +12 -8
- package/dist/server/server.js +7 -5
- package/dist/server/server.js.map +1 -1
- package/dist/server/server.mjs +6 -4
- package/dist/server/theme-bridge.js +13 -10
- package/dist/server/theme-bridge.js.map +1 -1
- package/dist/server/theme-bridge.mjs +10 -7
- package/dist/server/theme-bridge.mjs.map +1 -1
- package/dist/server/theme.js +3 -1
- package/dist/server/theme.js.map +1 -1
- package/dist/server/theme.mjs +2 -0
- package/dist/server/theme.mjs.map +1 -1
- package/dist/server/{types-BCeqWtI2.d.mts → types-Bq3520hK.d.mts} +3 -3
- package/dist/server/{types-C6gmRHLe.d.mts → types-CLusapsM.d.mts} +1 -1
- package/dist/server/types-Cc7lyPkN.d.ts +4043 -0
- package/dist/server/{types-BCeqWtI2.d.ts → types-D-rqOU5I.d.ts} +3 -3
- package/dist/server/{types-C6gmRHLe.d.ts → types-Ls6BkLKg.d.ts} +1 -1
- package/dist/server/{types-Bbo01M7P.d.mts → types-_nDnPHpv.d.mts} +27 -1
- package/dist/server/{types-Bbo01M7P.d.ts → types-_nDnPHpv.d.ts} +27 -1
- package/dist/server/types-nVerjjdv.d.mts +4043 -0
- package/package.json +22 -17
- package/dist/server/chunk-3KKZVGH4.mjs +0 -179
- package/dist/server/chunk-3KKZVGH4.mjs.map +0 -1
- package/dist/server/chunk-4Z3GPTCS.js +0 -179
- package/dist/server/chunk-4Z3GPTCS.js.map +0 -1
- package/dist/server/chunk-JB4LIEFS.js.map +0 -1
- package/dist/server/chunk-QQ6U4QX6.js +0 -120
- package/dist/server/chunk-QQ6U4QX6.js.map +0 -1
- package/dist/server/chunk-R5YGLRUG.mjs +0 -122
- package/dist/server/chunk-R5YGLRUG.mjs.map +0 -1
- package/dist/server/chunk-SW7LE4M3.js.map +0 -1
- package/dist/server/chunk-W3K7LVPS.mjs +0 -120
- package/dist/server/chunk-W3K7LVPS.mjs.map +0 -1
- package/dist/server/chunk-YHEZMVTS.js +0 -122
- package/dist/server/chunk-YHEZMVTS.js.map +0 -1
- package/dist/server/loadPage-DVH3DW6E.js +0 -9
- package/dist/server/loadPage-DVH3DW6E.js.map +0 -1
- package/dist/server/loadPage-PHQZ6XQZ.mjs +0 -9
- /package/dist/server/{loadPage-PHQZ6XQZ.mjs.map → chunk-BJTO5JO5.mjs.map} +0 -0
- /package/dist/server/{chunk-2RW5HAQQ.mjs.map → chunk-JTAERCX2.mjs.map} +0 -0
- /package/dist/server/{chunk-PEAXKTDU.mjs.map → chunk-OP2GHK27.mjs.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../../media-core/src/types.ts","../../../media-core/src/url.ts","../../../blocks/src/system/runtime/nodes/media.tsx","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/limit.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/clip_rgb.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/type.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/unpack.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/last.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/input.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/Color.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/version.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/chroma.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/colors/w3cx11.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hex/hex2rgb.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hex/rgb2hex.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/named/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/alpha.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/clipped.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lab/lab-constants.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lab/lab2rgb.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lab/rgb2lab.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lab/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/darken.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/get.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/luminance.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/generator/mix.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/mix.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/premultiply.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lch/lch2lab.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lch/lch2rgb.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lch/hcl2rgb.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lch/lab2lch.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lch/rgb2lch.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/lch/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/saturate.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/set.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/ops/shade.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/rgb.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/lrgb.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/lab.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/_hsx.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/lch.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/num/num2rgb.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/num/rgb2num.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/num/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/num.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hcg/hcg2rgb.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hcg/rgb2hcg.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hcg/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/hcg.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsi/hsi2rgb.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsi/rgb2hsi.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsi/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/hsi.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsl/hsl2rgb.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsl/rgb2hsl.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsl/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/hsl.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsv/hsv2rgb.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsv/rgb2hsv.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hsv/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/hsv.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/multiply-matrices.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/oklab/oklab2rgb.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/oklab/rgb2oklab.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/oklab/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/oklab.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/interpolator/oklch.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/generator/average.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/generator/scale.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/generator/bezier.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/rgb/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/generator/blend.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/generator/cubehelix.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/generator/random.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/analyze.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/contrast.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/contrastAPCA.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/delta-e.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/distance.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/valid.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/utils/scales.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/colors/colorbrewer.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/cmyk/cmyk2rgb.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/cmyk/rgb2cmyk.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/cmyk/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/css/hsl2css.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/css/lab2css.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/css/lch2css.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/css/oklab2css.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/oklch/rgb2oklch.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/css/oklch2css.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/css/rgb2css.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/oklch/oklch2rgb.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/css/css2rgb.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/css/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/gl/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/hex/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/temp/temperature2rgb.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/temp/rgb2temperature.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/temp/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/src/io/oklch/index.js","../../../../node_modules/.pnpm/chroma-js@3.1.2/node_modules/chroma-js/index.js","../../../blocks/src/theme/palette/generateShades.ts","../../../blocks/src/theme/palette/neutralScale.ts","../../../blocks/src/theme/palette/expandPalette.ts","../../../blocks/src/theme/palette/generateCssVars.ts","../../../blocks/src/theme/styles/shadow.ts","../../../blocks/src/theme/buttons/effects/presets/background.ts","../../../blocks/src/theme/buttons/effects/presets/shadow.ts","../../../blocks/src/theme/buttons/effects/presets/transform.ts","../../../blocks/src/theme/buttons/effects/presets/overlay.ts","../../../blocks/src/theme/buttons/effects/presets/text.ts","../../../blocks/src/theme/buttons/effects/presets/border.ts","../../../blocks/src/theme/buttons/effects/presets/animation.ts","../../../blocks/src/theme/buttons/effects/registry.ts","../../../blocks/src/theme/tokens/resolver.ts","../../../blocks/src/theme/buttons/constants.ts","../../../blocks/src/theme/buttons/utils/contrast.ts","../../../blocks/src/theme/buttons/generateDefaultButtonSystem.ts","../../../blocks/src/theme/buttons/generateButtonCss.ts","../../../blocks/src/theme/cards/constants.ts","../../../blocks/src/theme/cards/generateDefaultCardSystem.ts","../../../blocks/src/theme/cards/generateCardCss.ts","../../../blocks/src/theme/accordions/types.ts","../../../blocks/src/theme/styles/border.ts","../../../blocks/src/theme/accordions/generateAccordionCss.ts","../../../blocks/src/theme/accordions/defaults.ts","../../../blocks/src/theme/inputs/types.ts","../../../blocks/src/theme/inputs/generateInputCss.ts","../../../blocks/src/theme/inputs/defaults.ts","../../../blocks/src/theme/header/generateHeaderCss.ts","../../../blocks/src/theme/layout/generateLayoutCss.ts","../../../blocks/src/theme/status/generateStatusCss.ts","../../../blocks/src/theme/progress/generateProgressCss.ts","../../../blocks/src/system/theme/tokens.ts","../../../blocks/src/theme/runtime/buildThemeRuntime.ts","../../../blocks/src/PageRenderer.tsx","../../../blocks/src/system/manifest/validation.ts","../../../blocks/src/system/manifest/richTextSchema.ts","../../../blocks/src/system/fragments/library/headerCta.ts","../../../blocks/src/system/fragments/library/singleButton.ts","../../../blocks/src/system/fragments/lazyInit.ts","../../../blocks/src/system/fragments/registry.ts","../../../blocks/src/system/transforms/registry/core.ts","../../../blocks/src/system/transforms/registry/background.ts","../../../blocks/src/system/transforms/registry/links.ts","../../../blocks/src/system/transforms/registry/boxStyles.ts","../../../blocks/src/system/transforms/registry/index.ts","../../../blocks/src/system/runtime/resolver.ts","../../../blocks/src/primitives/layout/Section.tsx","../../../blocks/src/primitives/layout/Stack.tsx","../../../blocks/src/primitives/layout/Inline.tsx","../../../blocks/src/primitives/layout/Grid.tsx","../../../blocks/src/system/runtime/nodes/layout.tsx","../../../blocks/src/primitives/content/components/RichText.tsx","../../../blocks/src/primitives/content/components/Text.tsx","../../../blocks/src/system/runtime/nodes/basic.tsx","../../../blocks/src/system/runtime/nodes/form.server.tsx","../../../blocks/src/system/runtime/nodes/carousel.server.tsx","../../../blocks/src/system/runtime/nodes/accordion.server.tsx","../../../blocks/src/system/runtime/nodes/header-section.server.tsx","../../../blocks/src/system/runtime/nodes/event-list.server.tsx","../../../blocks/src/system/runtime/nodes/booking-form.server.tsx","../../../blocks/src/system/runtime/nodes/event-registration.server.tsx","../../../blocks/src/system/runtime/nodes/events/shared/utils.ts","../../../blocks/src/system/runtime/nodes/events/shared/EventCard.tsx","../../../blocks/src/system/runtime/nodes/events/shared/EmptyState.tsx","../../../blocks/src/system/runtime/nodes/events/EventSpotlight.tsx","../../../blocks/src/system/runtime/nodes/events/EventListing.server.tsx","../../../blocks/src/system/runtime/components/registry.server.ts","../../../blocks/src/system/runtime/components/index.ts","../../../blocks/src/system/componentFactory.ts","../../../blocks/src/system/manifest/hydrateLinks.ts","../../../blocks/src/sdkBlockTransform.ts","../../../blocks/src/primitives/content/primitives.tsx","../../../blocks/src/system/helpers/resolveBackground.tsx","../../../blocks/src/theme/buttons/core.ts","../../../blocks/src/theme/cards/core.ts","../../../blocks/src/theme/inputs/core.ts"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","export type MediaSource = 'upload' | 'instagram'\n\nexport type MediaAsset = {\n id: string\n siteId: string\n storageBucket: string\n storagePath: string\n filename: string\n mimeType: string\n width?: number\n height?: number\n bytes?: number\n checksumSha256?: string\n source: MediaSource\n altText?: string\n caption?: string\n exif?: Record<string, unknown>\n createdBy?: string\n createdAt: string\n updatedAt: string\n classifiedAt?: string\n labelsCached?: string[]\n // Video metadata\n durationSeconds?: number\n thumbnailAssetId?: string\n isThumbnail?: boolean\n}\n\nexport type TransformFit =\n | 'clip'\n | 'crop'\n | 'fill'\n | 'fillmax'\n | 'max'\n | 'scale'\n | 'min'\n\nexport type TransformCrop =\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'center'\n | 'focalpoint'\n | 'entropy'\n\nexport type TransformFormat = 'jpg' | 'pjpg' | 'png' | 'webp' | 'avif' | 'json'\n\nexport type TransformFlip = 'h' | 'v' | 'hv'\n\nexport type TransformColorSpace = 'srgb' | 'cmyk' | 'b-w' | 'origin'\n\nexport type TransformRect = [number, number, number, number]\n\nexport type TransformParams = {\n w?: number\n h?: number\n dpr?: number\n fit?: TransformFit\n crop?: TransformCrop\n fpX?: number\n fpY?: number\n rect?: TransformRect\n q?: number\n fm?: TransformFormat\n autoFormat?: boolean\n bg?: string\n flip?: TransformFlip\n or?: 0 | 90 | 180 | 270\n pad?: number\n blur?: number\n sharp?: number\n invert?: boolean\n sat?: number\n cs?: TransformColorSpace\n}\n\nexport type ParamKey = keyof TransformParams\n\n// SVG detection utilities\nexport const SVG_MIME_TYPE = 'image/svg+xml'\n\nexport function isSvgMimeType(mimeType: string | undefined): boolean {\n return mimeType === SVG_MIME_TYPE\n}\n","import type { MediaAsset, ParamKey, TransformParams } from './types'\n\nconst DEFAULT_BASE_PATH = '/api/img'\n\nconst formatNumber = (value: number) =>\n Number.isInteger(value)\n ? value.toString()\n : value.toFixed(6).replace(/0+$/, '').replace(/\\.$/, '')\n\nconst addParam = <T extends ParamKey>(\n search: URLSearchParams,\n key: T,\n value: TransformParams[T] | undefined\n) => {\n if (value === undefined) return\n\n switch (key) {\n case 'fpX':\n search.set('fp-x', formatNumber(value as number))\n break\n case 'fpY':\n search.set('fp-y', formatNumber(value as number))\n break\n case 'rect': {\n const rect = value as TransformParams['rect'] | undefined\n if (!rect) break\n search.set('rect', rect.map(formatNumber).join(','))\n break\n }\n case 'autoFormat':\n if (value) {\n search.append('auto', 'format')\n }\n break\n case 'invert':\n search.set('invert', (value as boolean) ? 'true' : 'false')\n break\n default:\n search.set(\n key,\n typeof value === 'number' ? formatNumber(value) : String(value)\n )\n }\n}\n\nconst ORDER: ParamKey[] = [\n 'w',\n 'h',\n 'dpr',\n 'fit',\n 'crop',\n 'fpX',\n 'fpY',\n 'rect',\n 'q',\n 'fm',\n 'autoFormat',\n 'bg',\n 'flip',\n 'or',\n 'pad',\n 'blur',\n 'sharp',\n 'invert',\n 'sat',\n 'cs'\n]\n\nexport const getImageUrl = (\n asset: Pick<MediaAsset, 'id'>,\n params: TransformParams = {},\n basePath: string = DEFAULT_BASE_PATH\n) => {\n const trimmedBase = basePath.endsWith('/')\n ? basePath.slice(0, Math.max(basePath.length - 1, 0))\n : basePath\n const path = `${trimmedBase}/${encodeURIComponent(asset.id)}`\n const searchParams = new URLSearchParams()\n\n ORDER.forEach((key) => {\n addParam(searchParams, key, params[key])\n })\n\n const query = searchParams.toString()\n return query ? `${path}?${query}` : path\n}\n","import React from 'react'\nimport clsx from 'clsx'\nimport { getImageUrl } from '@riverbankcms/media-core'\nimport type { Media } from '../../../lib/media'\nimport {\n backgroundColorStyle,\n mergeStyles,\n textColorStyle,\n} from '../../../theme/utils/colorStyles'\n\n// Inline getCmsApiUrl to avoid circular dependency with @riverbankcms/api\nfunction getCmsApiUrl(): string {\n const dashboardUrl = process.env.NEXT_PUBLIC_DASHBOARD_URL\n if (dashboardUrl) {\n const base = dashboardUrl.replace(/\\/$/, '')\n return `${base}/api`\n }\n\n const legacyApiUrl = process.env.NEXT_PUBLIC_CMS_API_URL\n if (legacyApiUrl) {\n return legacyApiUrl.replace(/\\/$/, '')\n }\n\n throw new Error(\n 'NEXT_PUBLIC_DASHBOARD_URL is not configured. ' +\n 'Set it to your dashboard URL (e.g., http://dashboard.local:4000)'\n )\n}\n\nconst debugMediaNodeLog = (...args: Array<unknown>) => {\n if (typeof window !== 'undefined' && (window as any).__DEBUG_MEDIA_NODE__) {\n console.log('[MediaNode]', ...args)\n }\n}\n\nexport type MediaNodeProps = {\n value?: Media | null\n className?: string\n style?: React.CSSProperties\n children?: React.ReactNode\n /**\n * Preview API key for accessing unpublished images.\n * Pass this when rendering preview/draft content on SDK sites.\n */\n previewKey?: string | null\n}\n\nexport const MediaNode: React.FC<MediaNodeProps> = ({ value, className, style, previewKey }) => {\n if (!value) return null\n\n if (value.type === 'video') {\n const src = value.src\n if (!src) return null\n return (\n <video className={className} style={style} src={src} autoPlay muted loop playsInline aria-label={value.alt ?? ''} />\n )\n }\n\n const imageUrl = resolveImageUrl(value, { previewKey })\n if (!imageUrl) {\n return (\n <div\n className={clsx('flex h-48 w-full items-center justify-center', className)}\n style={mergeStyles(backgroundColorStyle('neutral-200'), style)}\n >\n <span className=\"text-sm\" style={textColorStyle('neutral-600')}>\n Image unavailable\n </span>\n </div>\n )\n }\n\n // Check if image URL is cross-origin (different domain than current page)\n const isCrossOrigin = typeof window !== 'undefined' && imageUrl.startsWith('http') && !imageUrl.startsWith(window.location.origin)\n\n // For cross-origin images:\n // - Signed URLs from storage: use 'anonymous' (auth is in URL token)\n // - API routes (/api/img, /api/public/img): use 'use-credentials' to send cookies\n const isApiRoute = imageUrl.includes('/api/img') || imageUrl.includes('/api/public/img')\n const crossOriginMode = isCrossOrigin && isApiRoute ? 'use-credentials' : (isCrossOrigin ? 'anonymous' : undefined)\n\n return (\n <img\n src={imageUrl}\n alt={value.alt ?? ''}\n className={className}\n style={style}\n loading=\"lazy\"\n crossOrigin={crossOriginMode}\n />\n )\n}\n\nexport type ResolveImageUrlOptions = {\n /**\n * Preview API key for accessing unpublished images.\n * When provided, appended as ?preview_key=xxx to the image URL.\n */\n previewKey?: string | null\n}\n\nexport function resolveImageUrl(value: Media, options: ResolveImageUrlOptions = {}): string | undefined {\n if (value.type !== 'image') return undefined\n const params: Record<string, unknown> = {}\n const rect = value.transform?.rect\n const hotspot = value.transform?.hotspot\n\n if (rect && Array.isArray(rect) && rect.length === 4) {\n params.rect = rect.join(',')\n }\n if (hotspot && typeof hotspot.x === 'number' && typeof hotspot.y === 'number') {\n const x = clamp(hotspot.x)\n const y = clamp(hotspot.y)\n params.hotspot = `${x.toFixed(4)},${y.toFixed(4)}`\n }\n\n debugMediaNodeLog('resolveImageUrl input', {\n assetId: value.assetId,\n src: value.src,\n type: value.type,\n hasPreviewKey: !!options.previewKey,\n })\n\n // 1) Asset ID - route through the public image proxy\n // This handles media library assets from the private 'media' bucket\n // - Published assets: accessible without authentication\n // - Unpublished assets: require preview_key query param\n if (value.assetId) {\n const cmsApiBase = getCmsApiUrl()\n const basePath = `${cmsApiBase}/public/img`\n\n let resolved = getImageUrl({ id: value.assetId }, params, basePath)\n\n // Append preview key for accessing unpublished images\n if (options.previewKey) {\n const separator = resolved.includes('?') ? '&' : '?'\n resolved = `${resolved}${separator}preview_key=${encodeURIComponent(options.previewKey)}`\n }\n\n debugMediaNodeLog('resolve:asset-id', {\n assetId: value.assetId,\n cmsApiBase,\n basePath,\n resolvedUrl: resolved,\n hasPreviewKey: !!options.previewKey,\n })\n return resolved\n }\n\n // 2) Explicit src - used when there's no assetId (e.g., external URLs, site logos from public buckets)\n if (typeof value.src === 'string' && value.src.length > 0) {\n debugMediaNodeLog('resolve:explicit-src', { src: value.src })\n return value.src\n }\n\n // 3) Loose fallback for legacy shapes\n debugMediaNodeLog('resolve:fallback-url', { fallbackUrl: (value as any).url ?? null })\n return (value as any).url ?? undefined\n}\n\nfunction clamp(v: number, min = 0, max = 1) {\n return Math.min(Math.max(v, min), max)\n}\n","const { min, max } = Math;\n\nexport default (x, low = 0, high = 1) => {\n return min(max(low, x), high);\n};\n","import limit from './limit.js';\n\nexport default (rgb) => {\n rgb._clipped = false;\n rgb._unclipped = rgb.slice(0);\n for (let i = 0; i <= 3; i++) {\n if (i < 3) {\n if (rgb[i] < 0 || rgb[i] > 255) rgb._clipped = true;\n rgb[i] = limit(rgb[i], 0, 255);\n } else if (i === 3) {\n rgb[i] = limit(rgb[i], 0, 1);\n }\n }\n return rgb;\n};\n","// ported from jQuery's $.type\nconst classToType = {};\nfor (let name of [\n 'Boolean',\n 'Number',\n 'String',\n 'Function',\n 'Array',\n 'Date',\n 'RegExp',\n 'Undefined',\n 'Null'\n]) {\n classToType[`[object ${name}]`] = name.toLowerCase();\n}\nexport default function (obj) {\n return classToType[Object.prototype.toString.call(obj)] || 'object';\n}\n","import type from './type.js';\n\nexport default (args, keyOrder = null) => {\n // if called with more than 3 arguments, we return the arguments\n if (args.length >= 3) return Array.prototype.slice.call(args);\n // with less than 3 args we check if first arg is object\n // and use the keyOrder string to extract and sort properties\n if (type(args[0]) == 'object' && keyOrder) {\n return keyOrder\n .split('')\n .filter((k) => args[0][k] !== undefined)\n .map((k) => args[0][k]);\n }\n // otherwise we just return the first argument\n // (which we suppose is an array of args)\n return args[0].slice(0);\n};\n","import type from './type.js';\n\nexport default (args) => {\n if (args.length < 2) return null;\n const l = args.length - 1;\n if (type(args[l]) == 'string') return args[l].toLowerCase();\n return null;\n};\n","const { PI, min, max } = Math;\n\nconst rnd2 = (a) => Math.round(a * 100) / 100;\nconst rnd3 = (a) => Math.round(a * 100) / 100;\n\nexport { default as clip_rgb } from './clip_rgb.js';\nexport { default as limit } from './limit.js';\nexport { default as type } from './type.js';\nexport { default as unpack } from './unpack.js';\nexport { default as last } from './last.js';\n\nconst TWOPI = PI * 2;\nconst PITHIRD = PI / 3;\nconst DEG2RAD = PI / 180;\nconst RAD2DEG = 180 / PI;\n\n/**\n * Reverse the first three elements of an array\n *\n * @param {any[]} arr\n * @returns {any[]}\n */\nfunction reverse3(arr) {\n return [...arr.slice(0, 3).reverse(), ...arr.slice(3)];\n}\n\nexport { PI, TWOPI, PITHIRD, DEG2RAD, RAD2DEG, min, max, rnd2, rnd3, reverse3 };\n","export default {\n format: {},\n autodetect: []\n};\n","import { last, clip_rgb, type } from './utils/index.js';\nimport _input from './io/input.js';\n\nclass Color {\n constructor(...args) {\n const me = this;\n if (\n type(args[0]) === 'object' &&\n args[0].constructor &&\n args[0].constructor === this.constructor\n ) {\n // the argument is already a Color instance\n return args[0];\n }\n // last argument could be the mode\n let mode = last(args);\n let autodetect = false;\n if (!mode) {\n autodetect = true;\n\n if (!_input.sorted) {\n _input.autodetect = _input.autodetect.sort((a, b) => b.p - a.p);\n _input.sorted = true;\n }\n\n // auto-detect format\n for (let chk of _input.autodetect) {\n mode = chk.test(...args);\n if (mode) break;\n }\n }\n if (_input.format[mode]) {\n const rgb = _input.format[mode].apply(\n null,\n autodetect ? args : args.slice(0, -1)\n );\n me._rgb = clip_rgb(rgb);\n } else {\n throw new Error('unknown format: ' + args);\n }\n // add alpha channel\n if (me._rgb.length === 3) me._rgb.push(1);\n }\n toString() {\n if (type(this.hex) == 'function') return this.hex();\n return `[${this._rgb.join(',')}]`;\n }\n}\nexport default Color;\n","// this gets updated automatically\nexport const version = '3.1.2';\n","import Color from './Color.js';\nimport { version } from './version.js';\n\nconst chroma = (...args) => {\n return new Color(...args);\n};\n\nchroma.version = version;\n\nexport default chroma;\n","/**\n\tX11 color names\n\n\thttp://www.w3.org/TR/css3-color/#svg-color\n*/\n\nconst w3cx11 = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n laserlemon: '#ffff54',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrod: '#fafad2',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n maroon2: '#7f0000',\n maroon3: '#b03060',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n purple2: '#7f007f',\n purple3: '#a020f0',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32'\n};\n\nexport default w3cx11;\n","const RE_HEX = /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\nconst RE_HEXA = /^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/;\n\nconst hex2rgb = (hex) => {\n if (hex.match(RE_HEX)) {\n // remove optional leading #\n if (hex.length === 4 || hex.length === 7) {\n hex = hex.substr(1);\n }\n // expand short-notation to full six-digit\n if (hex.length === 3) {\n hex = hex.split('');\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n const u = parseInt(hex, 16);\n const r = u >> 16;\n const g = (u >> 8) & 0xff;\n const b = u & 0xff;\n return [r, g, b, 1];\n }\n\n // match rgba hex format, eg #FF000077\n if (hex.match(RE_HEXA)) {\n if (hex.length === 5 || hex.length === 9) {\n // remove optional leading #\n hex = hex.substr(1);\n }\n // expand short-notation to full eight-digit\n if (hex.length === 4) {\n hex = hex.split('');\n hex =\n hex[0] +\n hex[0] +\n hex[1] +\n hex[1] +\n hex[2] +\n hex[2] +\n hex[3] +\n hex[3];\n }\n const u = parseInt(hex, 16);\n const r = (u >> 24) & 0xff;\n const g = (u >> 16) & 0xff;\n const b = (u >> 8) & 0xff;\n const a = Math.round(((u & 0xff) / 0xff) * 100) / 100;\n return [r, g, b, a];\n }\n\n // we used to check for css colors here\n // if _input.css? and rgb = _input.css hex\n // return rgb\n\n throw new Error(`unknown hex color: ${hex}`);\n};\n\nexport default hex2rgb;\n","import { unpack, last } from '../../utils/index.js';\nconst { round } = Math;\n\nconst rgb2hex = (...args) => {\n let [r, g, b, a] = unpack(args, 'rgba');\n let mode = last(args) || 'auto';\n if (a === undefined) a = 1;\n if (mode === 'auto') {\n mode = a < 1 ? 'rgba' : 'rgb';\n }\n r = round(r);\n g = round(g);\n b = round(b);\n const u = (r << 16) | (g << 8) | b;\n let str = '000000' + u.toString(16); //#.toUpperCase();\n str = str.substr(str.length - 6);\n let hxa = '0' + round(a * 255).toString(16);\n hxa = hxa.substr(hxa.length - 2);\n switch (mode.toLowerCase()) {\n case 'rgba':\n return `#${str}${hxa}`;\n case 'argb':\n return `#${hxa}${str}`;\n default:\n return `#${str}`;\n }\n};\n\nexport default rgb2hex;\n","import Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\n\nimport w3cx11 from '../../colors/w3cx11.js';\nimport hex2rgb from '../hex/hex2rgb.js';\nimport rgb2hex from '../hex/rgb2hex.js';\n\nColor.prototype.name = function () {\n const hex = rgb2hex(this._rgb, 'rgb');\n for (let n of Object.keys(w3cx11)) {\n if (w3cx11[n] === hex) return n.toLowerCase();\n }\n return hex;\n};\n\ninput.format.named = (name) => {\n name = name.toLowerCase();\n if (w3cx11[name]) return hex2rgb(w3cx11[name]);\n throw new Error('unknown color name: ' + name);\n};\n\ninput.autodetect.push({\n p: 5,\n test: (h, ...rest) => {\n if (!rest.length && type(h) === 'string' && w3cx11[h.toLowerCase()]) {\n return 'named';\n }\n }\n});\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\n\nColor.prototype.alpha = function (a, mutate = false) {\n if (a !== undefined && type(a) === 'number') {\n if (mutate) {\n this._rgb[3] = a;\n return this;\n }\n return new Color([this._rgb[0], this._rgb[1], this._rgb[2], a], 'rgb');\n }\n return this._rgb[3];\n};\n","import Color from '../Color.js';\n\nColor.prototype.clipped = function () {\n return this._rgb._clipped || false;\n};\n","const labConstants = {\n // Corresponds roughly to RGB brighter/darker\n Kn: 18,\n\n // D65 standard referent\n labWhitePoint: 'd65',\n Xn: 0.95047,\n Yn: 1,\n Zn: 1.08883,\n\n t0: 0.137931034, // 4 / 29\n t1: 0.206896552, // 6 / 29\n t2: 0.12841855, // 3 * t1 * t1\n t3: 0.008856452, // t1 * t1 * t1,\n\n kE: 216.0 / 24389.0,\n kKE: 8.0,\n kK: 24389.0 / 27.0,\n\n RefWhiteRGB: {\n // sRGB\n X: 0.95047,\n Y: 1,\n Z: 1.08883\n },\n\n MtxRGB2XYZ: {\n m00: 0.4124564390896922,\n m01: 0.21267285140562253,\n m02: 0.0193338955823293,\n m10: 0.357576077643909,\n m11: 0.715152155287818,\n m12: 0.11919202588130297,\n m20: 0.18043748326639894,\n m21: 0.07217499330655958,\n m22: 0.9503040785363679\n },\n\n MtxXYZ2RGB: {\n m00: 3.2404541621141045,\n m01: -0.9692660305051868,\n m02: 0.055643430959114726,\n m10: -1.5371385127977166,\n m11: 1.8760108454466942,\n m12: -0.2040259135167538,\n m20: -0.498531409556016,\n m21: 0.041556017530349834,\n m22: 1.0572251882231791\n },\n\n // used in rgb2xyz\n As: 0.9414285350000001,\n Bs: 1.040417467,\n Cs: 1.089532651,\n\n MtxAdaptMa: {\n m00: 0.8951,\n m01: -0.7502,\n m02: 0.0389,\n m10: 0.2664,\n m11: 1.7135,\n m12: -0.0685,\n m20: -0.1614,\n m21: 0.0367,\n m22: 1.0296\n },\n\n MtxAdaptMaI: {\n m00: 0.9869929054667123,\n m01: 0.43230526972339456,\n m02: -0.008528664575177328,\n m10: -0.14705425642099013,\n m11: 0.5183602715367776,\n m12: 0.04004282165408487,\n m20: 0.15996265166373125,\n m21: 0.0492912282128556,\n m22: 0.9684866957875502\n }\n};\n\nexport default labConstants;\n\n// taken from https://de.mathworks.com/help/images/ref/whitepoint.html\nconst ILLUMINANTS = new Map([\n // ASTM E308-01\n ['a', [1.0985, 0.35585]],\n // Wyszecki & Stiles, p. 769\n ['b', [1.0985, 0.35585]],\n // C ASTM E308-01\n ['c', [0.98074, 1.18232]],\n // D50 (ASTM E308-01)\n ['d50', [0.96422, 0.82521]],\n // D55 (ASTM E308-01)\n ['d55', [0.95682, 0.92149]],\n // D65 (ASTM E308-01)\n ['d65', [0.95047, 1.08883]],\n // E (ASTM E308-01)\n ['e', [1, 1, 1]],\n // F2 (ASTM E308-01)\n ['f2', [0.99186, 0.67393]],\n // F7 (ASTM E308-01)\n ['f7', [0.95041, 1.08747]],\n // F11 (ASTM E308-01)\n ['f11', [1.00962, 0.6435]],\n ['icc', [0.96422, 0.82521]]\n]);\n\nexport function setLabWhitePoint(name) {\n const ill = ILLUMINANTS.get(String(name).toLowerCase());\n if (!ill) {\n throw new Error('unknown Lab illuminant ' + name);\n }\n labConstants.labWhitePoint = name;\n labConstants.Xn = ill[0];\n labConstants.Zn = ill[1];\n}\n\nexport function getLabWhitePoint() {\n return labConstants.labWhitePoint;\n}\n","import LAB_CONSTANTS from './lab-constants.js';\nimport { unpack } from '../../utils/index.js';\n\n/*\n * L* [0..100]\n * a [-100..100]\n * b [-100..100]\n */\nconst lab2rgb = (...args) => {\n args = unpack(args, 'lab');\n const [L, a, b] = args;\n const [x, y, z] = lab2xyz(L, a, b);\n const [r, g, b_] = xyz2rgb(x, y, z);\n return [r, g, b_, args.length > 3 ? args[3] : 1];\n};\n\nconst lab2xyz = (L, a, b) => {\n const { kE, kK, kKE, Xn, Yn, Zn } = LAB_CONSTANTS;\n\n const fy = (L + 16.0) / 116.0;\n const fx = 0.002 * a + fy;\n const fz = fy - 0.005 * b;\n\n const fx3 = fx * fx * fx;\n const fz3 = fz * fz * fz;\n\n const xr = fx3 > kE ? fx3 : (116.0 * fx - 16.0) / kK;\n const yr = L > kKE ? Math.pow((L + 16.0) / 116.0, 3.0) : L / kK;\n const zr = fz3 > kE ? fz3 : (116.0 * fz - 16.0) / kK;\n\n const x = xr * Xn;\n const y = yr * Yn;\n const z = zr * Zn;\n\n return [x, y, z];\n};\n\nconst compand = (linear) => {\n /* sRGB */\n const sign = Math.sign(linear);\n linear = Math.abs(linear);\n return (\n (linear <= 0.0031308\n ? linear * 12.92\n : 1.055 * Math.pow(linear, 1.0 / 2.4) - 0.055) * sign\n );\n};\n\nconst xyz2rgb = (x, y, z) => {\n const { MtxAdaptMa, MtxAdaptMaI, MtxXYZ2RGB, RefWhiteRGB, Xn, Yn, Zn } =\n LAB_CONSTANTS;\n\n const As = Xn * MtxAdaptMa.m00 + Yn * MtxAdaptMa.m10 + Zn * MtxAdaptMa.m20;\n const Bs = Xn * MtxAdaptMa.m01 + Yn * MtxAdaptMa.m11 + Zn * MtxAdaptMa.m21;\n const Cs = Xn * MtxAdaptMa.m02 + Yn * MtxAdaptMa.m12 + Zn * MtxAdaptMa.m22;\n\n const Ad =\n RefWhiteRGB.X * MtxAdaptMa.m00 +\n RefWhiteRGB.Y * MtxAdaptMa.m10 +\n RefWhiteRGB.Z * MtxAdaptMa.m20;\n const Bd =\n RefWhiteRGB.X * MtxAdaptMa.m01 +\n RefWhiteRGB.Y * MtxAdaptMa.m11 +\n RefWhiteRGB.Z * MtxAdaptMa.m21;\n const Cd =\n RefWhiteRGB.X * MtxAdaptMa.m02 +\n RefWhiteRGB.Y * MtxAdaptMa.m12 +\n RefWhiteRGB.Z * MtxAdaptMa.m22;\n\n const X1 =\n (x * MtxAdaptMa.m00 + y * MtxAdaptMa.m10 + z * MtxAdaptMa.m20) *\n (Ad / As);\n const Y1 =\n (x * MtxAdaptMa.m01 + y * MtxAdaptMa.m11 + z * MtxAdaptMa.m21) *\n (Bd / Bs);\n const Z1 =\n (x * MtxAdaptMa.m02 + y * MtxAdaptMa.m12 + z * MtxAdaptMa.m22) *\n (Cd / Cs);\n\n const X2 =\n X1 * MtxAdaptMaI.m00 + Y1 * MtxAdaptMaI.m10 + Z1 * MtxAdaptMaI.m20;\n const Y2 =\n X1 * MtxAdaptMaI.m01 + Y1 * MtxAdaptMaI.m11 + Z1 * MtxAdaptMaI.m21;\n const Z2 =\n X1 * MtxAdaptMaI.m02 + Y1 * MtxAdaptMaI.m12 + Z1 * MtxAdaptMaI.m22;\n\n const r = compand(\n X2 * MtxXYZ2RGB.m00 + Y2 * MtxXYZ2RGB.m10 + Z2 * MtxXYZ2RGB.m20\n );\n const g = compand(\n X2 * MtxXYZ2RGB.m01 + Y2 * MtxXYZ2RGB.m11 + Z2 * MtxXYZ2RGB.m21\n );\n const b = compand(\n X2 * MtxXYZ2RGB.m02 + Y2 * MtxXYZ2RGB.m12 + Z2 * MtxXYZ2RGB.m22\n );\n\n return [r * 255, g * 255, b * 255];\n};\n\nexport default lab2rgb;\nexport { xyz2rgb };\n","import LAB_CONSTANTS from './lab-constants.js';\nimport { unpack } from '../../utils/index.js';\n\nconst rgb2lab = (...args) => {\n const [r, g, b, ...rest] = unpack(args, 'rgb');\n const [x, y, z] = rgb2xyz(r, g, b);\n const [L, a, b_] = xyz2lab(x, y, z);\n return [L, a, b_, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\nfunction xyz2lab(x, y, z) {\n const { Xn, Yn, Zn, kE, kK } = LAB_CONSTANTS;\n const xr = x / Xn;\n const yr = y / Yn;\n const zr = z / Zn;\n\n const fx = xr > kE ? Math.pow(xr, 1.0 / 3.0) : (kK * xr + 16.0) / 116.0;\n const fy = yr > kE ? Math.pow(yr, 1.0 / 3.0) : (kK * yr + 16.0) / 116.0;\n const fz = zr > kE ? Math.pow(zr, 1.0 / 3.0) : (kK * zr + 16.0) / 116.0;\n\n return [116.0 * fy - 16.0, 500.0 * (fx - fy), 200.0 * (fy - fz)];\n}\n\nfunction gammaAdjustSRGB(companded) {\n const sign = Math.sign(companded);\n companded = Math.abs(companded);\n const linear =\n companded <= 0.04045\n ? companded / 12.92\n : Math.pow((companded + 0.055) / 1.055, 2.4);\n return linear * sign;\n}\n\nconst rgb2xyz = (r, g, b) => {\n // normalize and gamma adjust\n r = gammaAdjustSRGB(r / 255);\n g = gammaAdjustSRGB(g / 255);\n b = gammaAdjustSRGB(b / 255);\n\n const { MtxRGB2XYZ, MtxAdaptMa, MtxAdaptMaI, Xn, Yn, Zn, As, Bs, Cs } =\n LAB_CONSTANTS;\n\n let x = r * MtxRGB2XYZ.m00 + g * MtxRGB2XYZ.m10 + b * MtxRGB2XYZ.m20;\n let y = r * MtxRGB2XYZ.m01 + g * MtxRGB2XYZ.m11 + b * MtxRGB2XYZ.m21;\n let z = r * MtxRGB2XYZ.m02 + g * MtxRGB2XYZ.m12 + b * MtxRGB2XYZ.m22;\n\n const Ad = Xn * MtxAdaptMa.m00 + Yn * MtxAdaptMa.m10 + Zn * MtxAdaptMa.m20;\n const Bd = Xn * MtxAdaptMa.m01 + Yn * MtxAdaptMa.m11 + Zn * MtxAdaptMa.m21;\n const Cd = Xn * MtxAdaptMa.m02 + Yn * MtxAdaptMa.m12 + Zn * MtxAdaptMa.m22;\n\n let X = x * MtxAdaptMa.m00 + y * MtxAdaptMa.m10 + z * MtxAdaptMa.m20;\n let Y = x * MtxAdaptMa.m01 + y * MtxAdaptMa.m11 + z * MtxAdaptMa.m21;\n let Z = x * MtxAdaptMa.m02 + y * MtxAdaptMa.m12 + z * MtxAdaptMa.m22;\n\n X *= Ad / As;\n Y *= Bd / Bs;\n Z *= Cd / Cs;\n\n x = X * MtxAdaptMaI.m00 + Y * MtxAdaptMaI.m10 + Z * MtxAdaptMaI.m20;\n y = X * MtxAdaptMaI.m01 + Y * MtxAdaptMaI.m11 + Z * MtxAdaptMaI.m21;\n z = X * MtxAdaptMaI.m02 + Y * MtxAdaptMaI.m12 + Z * MtxAdaptMaI.m22;\n\n return [x, y, z];\n};\n\nexport default rgb2lab;\nexport { rgb2xyz };\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport lab2rgb from './lab2rgb.js';\nimport rgb2lab from './rgb2lab.js';\nimport { getLabWhitePoint, setLabWhitePoint } from './lab-constants.js';\n\nColor.prototype.lab = function () {\n return rgb2lab(this._rgb);\n};\n\nconst lab = (...args) => new Color(...args, 'lab');\nObject.assign(chroma, { lab, getLabWhitePoint, setLabWhitePoint });\n\ninput.format.lab = lab2rgb;\n\ninput.autodetect.push({\n p: 2,\n test: (...args) => {\n args = unpack(args, 'lab');\n if (type(args) === 'array' && args.length === 3) {\n return 'lab';\n }\n }\n});\n\nexport { lab, getLabWhitePoint, setLabWhitePoint };\n","import '../io/lab/index.js';\nimport Color from '../Color.js';\nimport LAB_CONSTANTS from '../io/lab/lab-constants.js';\n\nColor.prototype.darken = function (amount = 1) {\n const me = this;\n const lab = me.lab();\n lab[0] -= LAB_CONSTANTS.Kn * amount;\n return new Color(lab, 'lab').alpha(me.alpha(), true);\n};\n\nColor.prototype.brighten = function (amount = 1) {\n return this.darken(-amount);\n};\n\nColor.prototype.darker = Color.prototype.darken;\nColor.prototype.brighter = Color.prototype.brighten;\n","import Color from '../Color.js';\n\nColor.prototype.get = function (mc) {\n const [mode, channel] = mc.split('.');\n const src = this[mode]();\n if (channel) {\n const i = mode.indexOf(channel) - (mode.substr(0, 2) === 'ok' ? 2 : 0);\n if (i > -1) return src[i];\n throw new Error(`unknown channel ${channel} in mode ${mode}`);\n } else {\n return src;\n }\n};\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\nconst { pow } = Math;\n\nconst EPS = 1e-7;\nconst MAX_ITER = 20;\n\nColor.prototype.luminance = function (lum, mode = 'rgb') {\n if (lum !== undefined && type(lum) === 'number') {\n if (lum === 0) {\n // return pure black\n return new Color([0, 0, 0, this._rgb[3]], 'rgb');\n }\n if (lum === 1) {\n // return pure white\n return new Color([255, 255, 255, this._rgb[3]], 'rgb');\n }\n // compute new color using...\n let cur_lum = this.luminance();\n let max_iter = MAX_ITER;\n\n const test = (low, high) => {\n const mid = low.interpolate(high, 0.5, mode);\n const lm = mid.luminance();\n if (Math.abs(lum - lm) < EPS || !max_iter--) {\n // close enough\n return mid;\n }\n return lm > lum ? test(low, mid) : test(mid, high);\n };\n\n const rgb = (\n cur_lum > lum\n ? test(new Color([0, 0, 0]), this)\n : test(this, new Color([255, 255, 255]))\n ).rgb();\n return new Color([...rgb, this._rgb[3]]);\n }\n return rgb2luminance(...this._rgb.slice(0, 3));\n};\n\nconst rgb2luminance = (r, g, b) => {\n // relative luminance\n // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n r = luminance_x(r);\n g = luminance_x(g);\n b = luminance_x(b);\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n};\n\nconst luminance_x = (x) => {\n x /= 255;\n return x <= 0.03928 ? x / 12.92 : pow((x + 0.055) / 1.055, 2.4);\n};\n","export default {};\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\nimport interpolator from '../interpolator/index.js';\n\nexport default (col1, col2, f = 0.5, ...rest) => {\n let mode = rest[0] || 'lrgb';\n if (!interpolator[mode] && !rest.length) {\n // fall back to the first supported mode\n mode = Object.keys(interpolator)[0];\n }\n if (!interpolator[mode]) {\n throw new Error(`interpolation mode ${mode} is not defined`);\n }\n if (type(col1) !== 'object') col1 = new Color(col1);\n if (type(col2) !== 'object') col2 = new Color(col2);\n return interpolator[mode](col1, col2, f).alpha(\n col1.alpha() + f * (col2.alpha() - col1.alpha())\n );\n};\n","import Color from '../Color.js';\nimport mix from '../generator/mix.js';\n\nColor.prototype.mix = Color.prototype.interpolate = function (\n col2,\n f = 0.5,\n ...rest\n) {\n return mix(this, col2, f, ...rest);\n};\n","import Color from '../Color.js';\n\nColor.prototype.premultiply = function (mutate = false) {\n const rgb = this._rgb;\n const a = rgb[3];\n if (mutate) {\n this._rgb = [rgb[0] * a, rgb[1] * a, rgb[2] * a, a];\n return this;\n } else {\n return new Color([rgb[0] * a, rgb[1] * a, rgb[2] * a, a], 'rgb');\n }\n};\n","import { unpack, DEG2RAD } from '../../utils/index.js';\nconst { sin, cos } = Math;\n\nconst lch2lab = (...args) => {\n /*\n Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel.\n These formulas were invented by David Dalrymple to obtain maximum contrast without going\n out of gamut if the parameters are in the range 0-1.\n\n A saturation multiplier was added by Gregor Aisch\n */\n let [l, c, h] = unpack(args, 'lch');\n if (isNaN(h)) h = 0;\n h = h * DEG2RAD;\n return [l, cos(h) * c, sin(h) * c];\n};\n\nexport default lch2lab;\n","import { unpack } from '../../utils/index.js';\nimport lch2lab from './lch2lab.js';\nimport lab2rgb from '../lab/lab2rgb.js';\n\nconst lch2rgb = (...args) => {\n args = unpack(args, 'lch');\n const [l, c, h] = args;\n const [L, a, b_] = lch2lab(l, c, h);\n const [r, g, b] = lab2rgb(L, a, b_);\n return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default lch2rgb;\n","import { unpack, reverse3 } from '../../utils/index.js';\nimport lch2rgb from './lch2rgb.js';\n\nconst hcl2rgb = (...args) => {\n const hcl = reverse3(unpack(args, 'hcl'));\n return lch2rgb(...hcl);\n};\n\nexport default hcl2rgb;\n","import { unpack, RAD2DEG } from '../../utils/index.js';\nconst { sqrt, atan2, round } = Math;\n\nconst lab2lch = (...args) => {\n const [l, a, b] = unpack(args, 'lab');\n const c = sqrt(a * a + b * b);\n let h = (atan2(b, a) * RAD2DEG + 360) % 360;\n if (round(c * 10000) === 0) h = Number.NaN;\n return [l, c, h];\n};\n\nexport default lab2lch;\n","import { unpack } from '../../utils/index.js';\nimport rgb2lab from '../lab/rgb2lab.js';\nimport lab2lch from './lab2lch.js';\n\nconst rgb2lch = (...args) => {\n const [r, g, b, ...rest] = unpack(args, 'rgb');\n const [l, a, b_] = rgb2lab(r, g, b);\n const [L, c, h] = lab2lch(l, a, b_);\n return [L, c, h, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\nexport default rgb2lch;\n","import { unpack, type, reverse3 } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport lch2rgb from './lch2rgb.js';\nimport hcl2rgb from './hcl2rgb.js';\nimport rgb2lch from './rgb2lch.js';\n\nColor.prototype.lch = function () {\n return rgb2lch(this._rgb);\n};\nColor.prototype.hcl = function () {\n return reverse3(rgb2lch(this._rgb));\n};\n\nconst lch = (...args) => new Color(...args, 'lch');\nconst hcl = (...args) => new Color(...args, 'hcl');\n\nObject.assign(chroma, { lch, hcl });\n\ninput.format.lch = lch2rgb;\ninput.format.hcl = hcl2rgb;\n['lch', 'hcl'].forEach((m) =>\n input.autodetect.push({\n p: 2,\n test: (...args) => {\n args = unpack(args, m);\n if (type(args) === 'array' && args.length === 3) {\n return m;\n }\n }\n })\n);\n\nexport { lch, hcl };\n","import '../io/lch/index.js';\nimport Color from '../Color.js';\nimport LAB_CONSTANTS from '../io/lab/lab-constants.js';\n\nColor.prototype.saturate = function (amount = 1) {\n const me = this;\n const lch = me.lch();\n lch[1] += LAB_CONSTANTS.Kn * amount;\n if (lch[1] < 0) lch[1] = 0;\n return new Color(lch, 'lch').alpha(me.alpha(), true);\n};\n\nColor.prototype.desaturate = function (amount = 1) {\n return this.saturate(-amount);\n};\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\n\nColor.prototype.set = function (mc, value, mutate = false) {\n const [mode, channel] = mc.split('.');\n const src = this[mode]();\n if (channel) {\n const i = mode.indexOf(channel) - (mode.substr(0, 2) === 'ok' ? 2 : 0);\n if (i > -1) {\n if (type(value) == 'string') {\n switch (value.charAt(0)) {\n case '+':\n src[i] += +value;\n break;\n case '-':\n src[i] += +value;\n break;\n case '*':\n src[i] *= +value.substr(1);\n break;\n case '/':\n src[i] /= +value.substr(1);\n break;\n default:\n src[i] = +value;\n }\n } else if (type(value) === 'number') {\n src[i] = value;\n } else {\n throw new Error(`unsupported value for Color.set`);\n }\n const out = new Color(src, mode);\n if (mutate) {\n this._rgb = out._rgb;\n return this;\n }\n return out;\n }\n throw new Error(`unknown channel ${channel} in mode ${mode}`);\n } else {\n return src;\n }\n};\n","import '../io/lab/index.js';\nimport Color from '../Color.js';\nimport mix from '../generator/mix.js';\n\nColor.prototype.tint = function (f = 0.5, ...rest) {\n return mix(this, 'white', f, ...rest);\n};\n\nColor.prototype.shade = function (f = 0.5, ...rest) {\n return mix(this, 'black', f, ...rest);\n};\n","import Color from '../Color.js';\nimport index from './index.js';\n\nconst rgb = (col1, col2, f) => {\n const xyz0 = col1._rgb;\n const xyz1 = col2._rgb;\n return new Color(\n xyz0[0] + f * (xyz1[0] - xyz0[0]),\n xyz0[1] + f * (xyz1[1] - xyz0[1]),\n xyz0[2] + f * (xyz1[2] - xyz0[2]),\n 'rgb'\n );\n};\n\n// register interpolator\nindex.rgb = rgb;\n\nexport default rgb;\n","import Color from '../Color.js';\nconst { sqrt, pow } = Math;\nimport index from './index.js';\n\nconst lrgb = (col1, col2, f) => {\n const [x1, y1, z1] = col1._rgb;\n const [x2, y2, z2] = col2._rgb;\n return new Color(\n sqrt(pow(x1, 2) * (1 - f) + pow(x2, 2) * f),\n sqrt(pow(y1, 2) * (1 - f) + pow(y2, 2) * f),\n sqrt(pow(z1, 2) * (1 - f) + pow(z2, 2) * f),\n 'rgb'\n );\n};\n\n// register interpolator\nindex.lrgb = lrgb;\n\nexport default lrgb;\n","import '../io/lab/index.js';\nimport index from './index.js';\nimport Color from '../Color.js';\n\nconst lab = (col1, col2, f) => {\n const xyz0 = col1.lab();\n const xyz1 = col2.lab();\n return new Color(\n xyz0[0] + f * (xyz1[0] - xyz0[0]),\n xyz0[1] + f * (xyz1[1] - xyz0[1]),\n xyz0[2] + f * (xyz1[2] - xyz0[2]),\n 'lab'\n );\n};\n\n// register interpolator\nindex.lab = lab;\n\nexport default lab;\n","import Color from '../Color.js';\n\nexport default (col1, col2, f, m) => {\n let xyz0, xyz1;\n if (m === 'hsl') {\n xyz0 = col1.hsl();\n xyz1 = col2.hsl();\n } else if (m === 'hsv') {\n xyz0 = col1.hsv();\n xyz1 = col2.hsv();\n } else if (m === 'hcg') {\n xyz0 = col1.hcg();\n xyz1 = col2.hcg();\n } else if (m === 'hsi') {\n xyz0 = col1.hsi();\n xyz1 = col2.hsi();\n } else if (m === 'lch' || m === 'hcl') {\n m = 'hcl';\n xyz0 = col1.hcl();\n xyz1 = col2.hcl();\n } else if (m === 'oklch') {\n xyz0 = col1.oklch().reverse();\n xyz1 = col2.oklch().reverse();\n }\n\n let hue0, hue1, sat0, sat1, lbv0, lbv1;\n if (m.substr(0, 1) === 'h' || m === 'oklch') {\n [hue0, sat0, lbv0] = xyz0;\n [hue1, sat1, lbv1] = xyz1;\n }\n\n let sat, hue, lbv, dh;\n\n if (!isNaN(hue0) && !isNaN(hue1)) {\n // both colors have hue\n if (hue1 > hue0 && hue1 - hue0 > 180) {\n dh = hue1 - (hue0 + 360);\n } else if (hue1 < hue0 && hue0 - hue1 > 180) {\n dh = hue1 + 360 - hue0;\n } else {\n dh = hue1 - hue0;\n }\n hue = hue0 + f * dh;\n } else if (!isNaN(hue0)) {\n hue = hue0;\n if ((lbv1 == 1 || lbv1 == 0) && m != 'hsv') sat = sat0;\n } else if (!isNaN(hue1)) {\n hue = hue1;\n if ((lbv0 == 1 || lbv0 == 0) && m != 'hsv') sat = sat1;\n } else {\n hue = Number.NaN;\n }\n\n if (sat === undefined) sat = sat0 + f * (sat1 - sat0);\n lbv = lbv0 + f * (lbv1 - lbv0);\n return m === 'oklch'\n ? new Color([lbv, sat, hue], m)\n : new Color([hue, sat, lbv], m);\n};\n","import '../io/lch/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst lch = (col1, col2, f) => {\n return interpolate_hsx(col1, col2, f, 'lch');\n};\n\n// register interpolator\nindex.lch = lch;\nindex.hcl = lch;\n\nexport default lch;\n","import { type } from '../../utils/index.js';\n\nconst num2rgb = (num) => {\n if (type(num) == 'number' && num >= 0 && num <= 0xffffff) {\n const r = num >> 16;\n const g = (num >> 8) & 0xff;\n const b = num & 0xff;\n return [r, g, b, 1];\n }\n throw new Error('unknown num color: ' + num);\n};\n\nexport default num2rgb;\n","import { unpack } from '../../utils/index.js';\n\nconst rgb2num = (...args) => {\n const [r, g, b] = unpack(args, 'rgb');\n return (r << 16) + (g << 8) + b;\n};\n\nexport default rgb2num;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\nimport num2rgb from './num2rgb.js';\nimport rgb2num from './rgb2num.js';\n\nColor.prototype.num = function () {\n return rgb2num(this._rgb);\n};\n\nconst num = (...args) => new Color(...args, 'num');\n\nObject.assign(chroma, { num });\n\ninput.format.num = num2rgb;\n\ninput.autodetect.push({\n p: 5,\n test: (...args) => {\n if (\n args.length === 1 &&\n type(args[0]) === 'number' &&\n args[0] >= 0 &&\n args[0] <= 0xffffff\n ) {\n return 'num';\n }\n }\n});\n\nexport { num };\n","import '../io/num/index.js';\nimport index from './index.js';\n\nimport Color from '../Color.js';\n\nconst num = (col1, col2, f) => {\n const c1 = col1.num();\n const c2 = col2.num();\n return new Color(c1 + f * (c2 - c1), 'num');\n};\n\n// register interpolator\nindex.num = num;\n\nexport default num;\n","import { unpack } from '../../utils/index.js';\nconst { floor } = Math;\n\n/*\n * this is basically just HSV with some minor tweaks\n *\n * hue.. [0..360]\n * chroma .. [0..1]\n * grayness .. [0..1]\n */\n\nconst hcg2rgb = (...args) => {\n args = unpack(args, 'hcg');\n let [h, c, _g] = args;\n let r, g, b;\n _g = _g * 255;\n const _c = c * 255;\n if (c === 0) {\n r = g = b = _g;\n } else {\n if (h === 360) h = 0;\n if (h > 360) h -= 360;\n if (h < 0) h += 360;\n h /= 60;\n const i = floor(h);\n const f = h - i;\n const p = _g * (1 - c);\n const q = p + _c * (1 - f);\n const t = p + _c * f;\n const v = p + _c;\n switch (i) {\n case 0:\n [r, g, b] = [v, t, p];\n break;\n case 1:\n [r, g, b] = [q, v, p];\n break;\n case 2:\n [r, g, b] = [p, v, t];\n break;\n case 3:\n [r, g, b] = [p, q, v];\n break;\n case 4:\n [r, g, b] = [t, p, v];\n break;\n case 5:\n [r, g, b] = [v, p, q];\n break;\n }\n }\n return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default hcg2rgb;\n","import { unpack, max, min } from '../../utils/index.js';\n\nconst rgb2hcg = (...args) => {\n const [r, g, b] = unpack(args, 'rgb');\n const minRgb = min(r, g, b);\n const maxRgb = max(r, g, b);\n const delta = maxRgb - minRgb;\n const c = (delta * 100) / 255;\n const _g = (minRgb / (255 - delta)) * 100;\n let h;\n if (delta === 0) {\n h = Number.NaN;\n } else {\n if (r === maxRgb) h = (g - b) / delta;\n if (g === maxRgb) h = 2 + (b - r) / delta;\n if (b === maxRgb) h = 4 + (r - g) / delta;\n h *= 60;\n if (h < 0) h += 360;\n }\n return [h, c, _g];\n};\n\nexport default rgb2hcg;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hcg2rgb from './hcg2rgb.js';\nimport rgb2hcg from './rgb2hcg.js';\n\nColor.prototype.hcg = function () {\n return rgb2hcg(this._rgb);\n};\n\nconst hcg = (...args) => new Color(...args, 'hcg');\nchroma.hcg = hcg;\n\ninput.format.hcg = hcg2rgb;\n\ninput.autodetect.push({\n p: 1,\n test: (...args) => {\n args = unpack(args, 'hcg');\n if (type(args) === 'array' && args.length === 3) {\n return 'hcg';\n }\n }\n});\n\nexport { hcg };\n","import '../io/hcg/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hcg = (col1, col2, f) => {\n return interpolate_hsx(col1, col2, f, 'hcg');\n};\n\n// register interpolator\nindex.hcg = hcg;\n\nexport default hcg;\n","import { unpack, limit, TWOPI, PITHIRD } from '../../utils/index.js';\nconst { cos } = Math;\n\n/*\n * hue [0..360]\n * saturation [0..1]\n * intensity [0..1]\n */\nconst hsi2rgb = (...args) => {\n /*\n borrowed from here:\n http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/hsi2rgb.cpp\n */\n args = unpack(args, 'hsi');\n let [h, s, i] = args;\n let r, g, b;\n\n if (isNaN(h)) h = 0;\n if (isNaN(s)) s = 0;\n // normalize hue\n if (h > 360) h -= 360;\n if (h < 0) h += 360;\n h /= 360;\n if (h < 1 / 3) {\n b = (1 - s) / 3;\n r = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n g = 1 - (b + r);\n } else if (h < 2 / 3) {\n h -= 1 / 3;\n r = (1 - s) / 3;\n g = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n b = 1 - (r + g);\n } else {\n h -= 2 / 3;\n g = (1 - s) / 3;\n b = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n r = 1 - (g + b);\n }\n r = limit(i * r * 3);\n g = limit(i * g * 3);\n b = limit(i * b * 3);\n return [r * 255, g * 255, b * 255, args.length > 3 ? args[3] : 1];\n};\n\nexport default hsi2rgb;\n","import { unpack, TWOPI } from '../../utils/index.js';\nconst { min, sqrt, acos } = Math;\n\nconst rgb2hsi = (...args) => {\n /*\n borrowed from here:\n http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/rgb2hsi.cpp\n */\n let [r, g, b] = unpack(args, 'rgb');\n r /= 255;\n g /= 255;\n b /= 255;\n let h;\n const min_ = min(r, g, b);\n const i = (r + g + b) / 3;\n const s = i > 0 ? 1 - min_ / i : 0;\n if (s === 0) {\n h = NaN;\n } else {\n h = (r - g + (r - b)) / 2;\n h /= sqrt((r - g) * (r - g) + (r - b) * (g - b));\n h = acos(h);\n if (b > g) {\n h = TWOPI - h;\n }\n h /= TWOPI;\n }\n return [h * 360, s, i];\n};\n\nexport default rgb2hsi;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsi2rgb from './hsi2rgb.js';\nimport rgb2hsi from './rgb2hsi.js';\n\nColor.prototype.hsi = function () {\n return rgb2hsi(this._rgb);\n};\n\nconst hsi = (...args) => new Color(...args, 'hsi');\nchroma.hsi = hsi;\n\ninput.format.hsi = hsi2rgb;\n\ninput.autodetect.push({\n p: 2,\n test: (...args) => {\n args = unpack(args, 'hsi');\n if (type(args) === 'array' && args.length === 3) {\n return 'hsi';\n }\n }\n});\n\nexport { hsi };\n","import '../io/hsi/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsi = (col1, col2, f) => {\n return interpolate_hsx(col1, col2, f, 'hsi');\n};\n\n// register interpolator\nindex.hsi = hsi;\n\nexport default hsi;\n","import { unpack } from '../../utils/index.js';\n\nconst hsl2rgb = (...args) => {\n args = unpack(args, 'hsl');\n const [h, s, l] = args;\n let r, g, b;\n if (s === 0) {\n r = g = b = l * 255;\n } else {\n const t3 = [0, 0, 0];\n const c = [0, 0, 0];\n const t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const t1 = 2 * l - t2;\n const h_ = h / 360;\n t3[0] = h_ + 1 / 3;\n t3[1] = h_;\n t3[2] = h_ - 1 / 3;\n for (let i = 0; i < 3; i++) {\n if (t3[i] < 0) t3[i] += 1;\n if (t3[i] > 1) t3[i] -= 1;\n if (6 * t3[i] < 1) c[i] = t1 + (t2 - t1) * 6 * t3[i];\n else if (2 * t3[i] < 1) c[i] = t2;\n else if (3 * t3[i] < 2) c[i] = t1 + (t2 - t1) * (2 / 3 - t3[i]) * 6;\n else c[i] = t1;\n }\n [r, g, b] = [c[0] * 255, c[1] * 255, c[2] * 255];\n }\n if (args.length > 3) {\n // keep alpha channel\n return [r, g, b, args[3]];\n }\n return [r, g, b, 1];\n};\n\nexport default hsl2rgb;\n","import { unpack, min, max } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - rgb2hsl(r,g,b)\n * - rgb2hsl(r,g,b,a)\n * - rgb2hsl([r,g,b])\n * - rgb2hsl([r,g,b,a])\n * - rgb2hsl({r,g,b,a})\n */\nconst rgb2hsl = (...args) => {\n args = unpack(args, 'rgba');\n let [r, g, b] = args;\n\n r /= 255;\n g /= 255;\n b /= 255;\n\n const minRgb = min(r, g, b);\n const maxRgb = max(r, g, b);\n\n const l = (maxRgb + minRgb) / 2;\n let s, h;\n\n if (maxRgb === minRgb) {\n s = 0;\n h = Number.NaN;\n } else {\n s =\n l < 0.5\n ? (maxRgb - minRgb) / (maxRgb + minRgb)\n : (maxRgb - minRgb) / (2 - maxRgb - minRgb);\n }\n\n if (r == maxRgb) h = (g - b) / (maxRgb - minRgb);\n else if (g == maxRgb) h = 2 + (b - r) / (maxRgb - minRgb);\n else if (b == maxRgb) h = 4 + (r - g) / (maxRgb - minRgb);\n\n h *= 60;\n if (h < 0) h += 360;\n if (args.length > 3 && args[3] !== undefined) return [h, s, l, args[3]];\n return [h, s, l];\n};\n\nexport default rgb2hsl;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsl2rgb from './hsl2rgb.js';\nimport rgb2hsl from './rgb2hsl.js';\n\nColor.prototype.hsl = function () {\n return rgb2hsl(this._rgb);\n};\n\nconst hsl = (...args) => new Color(...args, 'hsl');\nchroma.hsl = hsl;\n\ninput.format.hsl = hsl2rgb;\n\ninput.autodetect.push({\n p: 2,\n test: (...args) => {\n args = unpack(args, 'hsl');\n if (type(args) === 'array' && args.length === 3) {\n return 'hsl';\n }\n }\n});\n\nexport { hsl };\n","import '../io/hsl/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsl = (col1, col2, f) => {\n return interpolate_hsx(col1, col2, f, 'hsl');\n};\n\n// register interpolator\nindex.hsl = hsl;\n\nexport default hsl;\n","import { unpack } from '../../utils/index.js';\nconst { floor } = Math;\n\nconst hsv2rgb = (...args) => {\n args = unpack(args, 'hsv');\n let [h, s, v] = args;\n let r, g, b;\n v *= 255;\n if (s === 0) {\n r = g = b = v;\n } else {\n if (h === 360) h = 0;\n if (h > 360) h -= 360;\n if (h < 0) h += 360;\n h /= 60;\n\n const i = floor(h);\n const f = h - i;\n const p = v * (1 - s);\n const q = v * (1 - s * f);\n const t = v * (1 - s * (1 - f));\n\n switch (i) {\n case 0:\n [r, g, b] = [v, t, p];\n break;\n case 1:\n [r, g, b] = [q, v, p];\n break;\n case 2:\n [r, g, b] = [p, v, t];\n break;\n case 3:\n [r, g, b] = [p, q, v];\n break;\n case 4:\n [r, g, b] = [t, p, v];\n break;\n case 5:\n [r, g, b] = [v, p, q];\n break;\n }\n }\n return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default hsv2rgb;\n","import { unpack } from '../../utils/index.js';\nconst { min, max } = Math;\n\n/*\n * supported arguments:\n * - rgb2hsv(r,g,b)\n * - rgb2hsv([r,g,b])\n * - rgb2hsv({r,g,b})\n */\nconst rgb2hsl = (...args) => {\n args = unpack(args, 'rgb');\n let [r, g, b] = args;\n const min_ = min(r, g, b);\n const max_ = max(r, g, b);\n const delta = max_ - min_;\n let h, s, v;\n v = max_ / 255.0;\n if (max_ === 0) {\n h = Number.NaN;\n s = 0;\n } else {\n s = delta / max_;\n if (r === max_) h = (g - b) / delta;\n if (g === max_) h = 2 + (b - r) / delta;\n if (b === max_) h = 4 + (r - g) / delta;\n h *= 60;\n if (h < 0) h += 360;\n }\n return [h, s, v];\n};\n\nexport default rgb2hsl;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsv2rgb from './hsv2rgb.js';\nimport rgb2hsv from './rgb2hsv.js';\n\nColor.prototype.hsv = function () {\n return rgb2hsv(this._rgb);\n};\n\nconst hsv = (...args) => new Color(...args, 'hsv');\nchroma.hsv = hsv;\n\ninput.format.hsv = hsv2rgb;\n\ninput.autodetect.push({\n p: 2,\n test: (...args) => {\n args = unpack(args, 'hsv');\n if (type(args) === 'array' && args.length === 3) {\n return 'hsv';\n }\n }\n});\n\nexport { hsv };\n","import '../io/hsv/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsv = (col1, col2, f) => {\n return interpolate_hsx(col1, col2, f, 'hsv');\n};\n\n// register interpolator\nindex.hsv = hsv;\n\nexport default hsv;\n","// from https://www.w3.org/TR/css-color-4/multiply-matrices.js\nexport default function multiplyMatrices(A, B) {\n let m = A.length;\n\n if (!Array.isArray(A[0])) {\n // A is vector, convert to [[a, b, c, ...]]\n A = [A];\n }\n\n if (!Array.isArray(B[0])) {\n // B is vector, convert to [[a], [b], [c], ...]]\n B = B.map((x) => [x]);\n }\n\n let p = B[0].length;\n let B_cols = B[0].map((_, i) => B.map((x) => x[i])); // transpose B\n let product = A.map((row) =>\n B_cols.map((col) => {\n if (!Array.isArray(row)) {\n return col.reduce((a, c) => a + c * row, 0);\n }\n\n return row.reduce((a, c, i) => a + c * (col[i] || 0), 0);\n })\n );\n\n if (m === 1) {\n product = product[0]; // Avoid [[a, b, c, ...]]\n }\n\n if (p === 1) {\n return product.map((x) => x[0]); // Avoid [[a], [b], [c], ...]]\n }\n\n return product;\n}\n","import { unpack } from '../../utils/index.js';\nimport multiplyMatrices from '../../utils/multiply-matrices.js';\nimport { xyz2rgb } from '../lab/lab2rgb.js';\n\nconst oklab2rgb = (...args) => {\n args = unpack(args, 'lab');\n const [L, a, b, ...rest] = args;\n const [X, Y, Z] = OKLab_to_XYZ([L, a, b]);\n const [r, g, b_] = xyz2rgb(X, Y, Z);\n return [r, g, b_, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\n// from https://www.w3.org/TR/css-color-4/#color-conversion-code\nfunction OKLab_to_XYZ(OKLab) {\n // Given OKLab, convert to XYZ relative to D65\n var LMStoXYZ = [\n [1.2268798758459243, -0.5578149944602171, 0.2813910456659647],\n [-0.0405757452148008, 1.112286803280317, -0.0717110580655164],\n [-0.0763729366746601, -0.4214933324022432, 1.5869240198367816]\n ];\n var OKLabtoLMS = [\n [1.0, 0.3963377773761749, 0.2158037573099136],\n [1.0, -0.1055613458156586, -0.0638541728258133],\n [1.0, -0.0894841775298119, -1.2914855480194092]\n ];\n\n var LMSnl = multiplyMatrices(OKLabtoLMS, OKLab);\n return multiplyMatrices(\n LMStoXYZ,\n LMSnl.map((c) => c ** 3)\n );\n}\n\nexport default oklab2rgb;\n","import { unpack } from '../../utils/index.js';\nimport multiplyMatrices from '../../utils/multiply-matrices.js';\nimport { rgb2xyz } from '../lab/rgb2lab.js';\n\nconst rgb2oklab = (...args) => {\n const [r, g, b, ...rest] = unpack(args, 'rgb');\n const xyz = rgb2xyz(r, g, b);\n const oklab = XYZ_to_OKLab(xyz);\n return [...oklab, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\n// from https://www.w3.org/TR/css-color-4/#color-conversion-code\nfunction XYZ_to_OKLab(XYZ) {\n // Given XYZ relative to D65, convert to OKLab\n const XYZtoLMS = [\n [0.819022437996703, 0.3619062600528904, -0.1288737815209879],\n [0.0329836539323885, 0.9292868615863434, 0.0361446663506424],\n [0.0481771893596242, 0.2642395317527308, 0.6335478284694309]\n ];\n const LMStoOKLab = [\n [0.210454268309314, 0.7936177747023054, -0.0040720430116193],\n [1.9779985324311684, -2.4285922420485799, 0.450593709617411],\n [0.0259040424655478, 0.7827717124575296, -0.8086757549230774]\n ];\n\n const LMS = multiplyMatrices(XYZtoLMS, XYZ);\n // JavaScript Math.cbrt returns a sign-matched cube root\n // beware if porting to other languages\n // especially if tempted to use a general power function\n return multiplyMatrices(\n LMStoOKLab,\n LMS.map((c) => Math.cbrt(c))\n );\n // L in range [0,1]. For use in CSS, multiply by 100 and add a percent\n}\n\nexport default rgb2oklab;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport oklab2rgb from './oklab2rgb.js';\nimport rgb2oklab from './rgb2oklab.js';\n\nColor.prototype.oklab = function () {\n return rgb2oklab(this._rgb);\n};\n\nconst oklab = (...args) => new Color(...args, 'oklab');\nObject.assign(chroma, { oklab });\n\ninput.format.oklab = oklab2rgb;\n\ninput.autodetect.push({\n p: 2,\n test: (...args) => {\n args = unpack(args, 'oklab');\n if (type(args) === 'array' && args.length === 3) {\n return 'oklab';\n }\n }\n});\n\nexport { oklab };\n","import '../io/oklab/index.js';\nimport index from './index.js';\nimport Color from '../Color.js';\n\nconst oklab = (col1, col2, f) => {\n const xyz0 = col1.oklab();\n const xyz1 = col2.oklab();\n return new Color(\n xyz0[0] + f * (xyz1[0] - xyz0[0]),\n xyz0[1] + f * (xyz1[1] - xyz0[1]),\n xyz0[2] + f * (xyz1[2] - xyz0[2]),\n 'oklab'\n );\n};\n\n// register interpolator\nindex.oklab = oklab;\n\nexport default oklab;\n","import '../io/lch/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst oklch = (col1, col2, f) => {\n return interpolate_hsx(col1, col2, f, 'oklch');\n};\n\n// register interpolator\nindex.oklch = oklch;\n\nexport default oklch;\n","import Color from '../Color.js';\nimport { clip_rgb } from '../utils/index.js';\n\nconst { pow, sqrt, PI, cos, sin, atan2 } = Math;\n\nexport default (colors, mode = 'lrgb', weights = null) => {\n const l = colors.length;\n if (!weights) weights = Array.from(new Array(l)).map(() => 1);\n // normalize weights\n const k =\n l /\n weights.reduce(function (a, b) {\n return a + b;\n });\n weights.forEach((w, i) => {\n weights[i] *= k;\n });\n // convert colors to Color objects\n colors = colors.map((c) => new Color(c));\n if (mode === 'lrgb') {\n return _average_lrgb(colors, weights);\n }\n const first = colors.shift();\n const xyz = first.get(mode);\n const cnt = [];\n let dx = 0;\n let dy = 0;\n // initial color\n for (let i = 0; i < xyz.length; i++) {\n xyz[i] = (xyz[i] || 0) * weights[0];\n cnt.push(isNaN(xyz[i]) ? 0 : weights[0]);\n if (mode.charAt(i) === 'h' && !isNaN(xyz[i])) {\n const A = (xyz[i] / 180) * PI;\n dx += cos(A) * weights[0];\n dy += sin(A) * weights[0];\n }\n }\n\n let alpha = first.alpha() * weights[0];\n colors.forEach((c, ci) => {\n const xyz2 = c.get(mode);\n alpha += c.alpha() * weights[ci + 1];\n for (let i = 0; i < xyz.length; i++) {\n if (!isNaN(xyz2[i])) {\n cnt[i] += weights[ci + 1];\n if (mode.charAt(i) === 'h') {\n const A = (xyz2[i] / 180) * PI;\n dx += cos(A) * weights[ci + 1];\n dy += sin(A) * weights[ci + 1];\n } else {\n xyz[i] += xyz2[i] * weights[ci + 1];\n }\n }\n }\n });\n\n for (let i = 0; i < xyz.length; i++) {\n if (mode.charAt(i) === 'h') {\n let A = (atan2(dy / cnt[i], dx / cnt[i]) / PI) * 180;\n while (A < 0) A += 360;\n while (A >= 360) A -= 360;\n xyz[i] = A;\n } else {\n xyz[i] = xyz[i] / cnt[i];\n }\n }\n alpha /= l;\n return new Color(xyz, mode).alpha(alpha > 0.99999 ? 1 : alpha, true);\n};\n\nconst _average_lrgb = (colors, weights) => {\n const l = colors.length;\n const xyz = [0, 0, 0, 0];\n for (let i = 0; i < colors.length; i++) {\n const col = colors[i];\n const f = weights[i] / l;\n const rgb = col._rgb;\n xyz[0] += pow(rgb[0], 2) * f;\n xyz[1] += pow(rgb[1], 2) * f;\n xyz[2] += pow(rgb[2], 2) * f;\n xyz[3] += rgb[3] * f;\n }\n xyz[0] = sqrt(xyz[0]);\n xyz[1] = sqrt(xyz[1]);\n xyz[2] = sqrt(xyz[2]);\n if (xyz[3] > 0.9999999) xyz[3] = 1;\n return new Color(clip_rgb(xyz));\n};\n","// minimal multi-purpose interface\n\n// @requires utils color analyze\nimport chroma from '../chroma.js';\nimport { limit, type } from '../utils/index.js';\n\nconst { pow } = Math;\n\nexport default function (colors) {\n // constructor\n let _mode = 'rgb';\n let _nacol = chroma('#ccc');\n let _spread = 0;\n // const _fixed = false;\n let _domain = [0, 1];\n let _pos = [];\n let _padding = [0, 0];\n let _classes = false;\n let _colors = [];\n let _out = false;\n let _min = 0;\n let _max = 1;\n let _correctLightness = false;\n let _colorCache = {};\n let _useCache = true;\n let _gamma = 1;\n\n // private methods\n\n const setColors = function (colors) {\n colors = colors || ['#fff', '#000'];\n if (\n colors &&\n type(colors) === 'string' &&\n chroma.brewer &&\n chroma.brewer[colors.toLowerCase()]\n ) {\n colors = chroma.brewer[colors.toLowerCase()];\n }\n if (type(colors) === 'array') {\n // handle single color\n if (colors.length === 1) {\n colors = [colors[0], colors[0]];\n }\n // make a copy of the colors\n colors = colors.slice(0);\n // convert to chroma classes\n for (let c = 0; c < colors.length; c++) {\n colors[c] = chroma(colors[c]);\n }\n // auto-fill color position\n _pos.length = 0;\n for (let c = 0; c < colors.length; c++) {\n _pos.push(c / (colors.length - 1));\n }\n }\n resetCache();\n return (_colors = colors);\n };\n\n const getClass = function (value) {\n if (_classes != null) {\n const n = _classes.length - 1;\n let i = 0;\n while (i < n && value >= _classes[i]) {\n i++;\n }\n return i - 1;\n }\n return 0;\n };\n\n let tMapLightness = (t) => t;\n let tMapDomain = (t) => t;\n\n // const classifyValue = function(value) {\n // let val = value;\n // if (_classes.length > 2) {\n // const n = _classes.length-1;\n // const i = getClass(value);\n // const minc = _classes[0] + ((_classes[1]-_classes[0]) * (0 + (_spread * 0.5))); // center of 1st class\n // const maxc = _classes[n-1] + ((_classes[n]-_classes[n-1]) * (1 - (_spread * 0.5))); // center of last class\n // val = _min + ((((_classes[i] + ((_classes[i+1] - _classes[i]) * 0.5)) - minc) / (maxc-minc)) * (_max - _min));\n // }\n // return val;\n // };\n\n const getColor = function (val, bypassMap) {\n let col, t;\n if (bypassMap == null) {\n bypassMap = false;\n }\n if (isNaN(val) || val === null) {\n return _nacol;\n }\n if (!bypassMap) {\n if (_classes && _classes.length > 2) {\n // find the class\n const c = getClass(val);\n t = c / (_classes.length - 2);\n } else if (_max !== _min) {\n // just interpolate between min/max\n t = (val - _min) / (_max - _min);\n } else {\n t = 1;\n }\n } else {\n t = val;\n }\n\n // domain map\n t = tMapDomain(t);\n\n if (!bypassMap) {\n t = tMapLightness(t); // lightness correction\n }\n\n if (_gamma !== 1) {\n t = pow(t, _gamma);\n }\n\n t = _padding[0] + t * (1 - _padding[0] - _padding[1]);\n\n t = limit(t, 0, 1);\n\n const k = Math.floor(t * 10000);\n\n if (_useCache && _colorCache[k]) {\n col = _colorCache[k];\n } else {\n if (type(_colors) === 'array') {\n //for i in [0.._pos.length-1]\n for (let i = 0; i < _pos.length; i++) {\n const p = _pos[i];\n if (t <= p) {\n col = _colors[i];\n break;\n }\n if (t >= p && i === _pos.length - 1) {\n col = _colors[i];\n break;\n }\n if (t > p && t < _pos[i + 1]) {\n t = (t - p) / (_pos[i + 1] - p);\n col = chroma.interpolate(\n _colors[i],\n _colors[i + 1],\n t,\n _mode\n );\n break;\n }\n }\n } else if (type(_colors) === 'function') {\n col = _colors(t);\n }\n if (_useCache) {\n _colorCache[k] = col;\n }\n }\n return col;\n };\n\n var resetCache = () => (_colorCache = {});\n\n setColors(colors);\n\n // public interface\n\n const f = function (v) {\n const c = chroma(getColor(v));\n if (_out && c[_out]) {\n return c[_out]();\n } else {\n return c;\n }\n };\n\n f.classes = function (classes) {\n if (classes != null) {\n if (type(classes) === 'array') {\n _classes = classes;\n _domain = [classes[0], classes[classes.length - 1]];\n } else {\n const d = chroma.analyze(_domain);\n if (classes === 0) {\n _classes = [d.min, d.max];\n } else {\n _classes = chroma.limits(d, 'e', classes);\n }\n }\n return f;\n }\n return _classes;\n };\n\n f.domain = function (domain) {\n if (!arguments.length) {\n return _domain;\n }\n _min = domain[0];\n _max = domain[domain.length - 1];\n _pos = [];\n const k = _colors.length;\n if (domain.length === k && _min !== _max) {\n // update positions\n for (let d of Array.from(domain)) {\n _pos.push((d - _min) / (_max - _min));\n }\n } else {\n for (let c = 0; c < k; c++) {\n _pos.push(c / (k - 1));\n }\n if (domain.length > 2) {\n // set domain map\n const tOut = domain.map((d, i) => i / (domain.length - 1));\n const tBreaks = domain.map((d) => (d - _min) / (_max - _min));\n if (!tBreaks.every((val, i) => tOut[i] === val)) {\n tMapDomain = (t) => {\n if (t <= 0 || t >= 1) return t;\n let i = 0;\n while (t >= tBreaks[i + 1]) i++;\n const f =\n (t - tBreaks[i]) / (tBreaks[i + 1] - tBreaks[i]);\n const out = tOut[i] + f * (tOut[i + 1] - tOut[i]);\n return out;\n };\n }\n }\n }\n _domain = [_min, _max];\n return f;\n };\n\n f.mode = function (_m) {\n if (!arguments.length) {\n return _mode;\n }\n _mode = _m;\n resetCache();\n return f;\n };\n\n f.range = function (colors, _pos) {\n setColors(colors, _pos);\n return f;\n };\n\n f.out = function (_o) {\n _out = _o;\n return f;\n };\n\n f.spread = function (val) {\n if (!arguments.length) {\n return _spread;\n }\n _spread = val;\n return f;\n };\n\n f.correctLightness = function (v) {\n if (v == null) {\n v = true;\n }\n _correctLightness = v;\n resetCache();\n if (_correctLightness) {\n tMapLightness = function (t) {\n const L0 = getColor(0, true).lab()[0];\n const L1 = getColor(1, true).lab()[0];\n const pol = L0 > L1;\n let L_actual = getColor(t, true).lab()[0];\n const L_ideal = L0 + (L1 - L0) * t;\n let L_diff = L_actual - L_ideal;\n let t0 = 0;\n let t1 = 1;\n let max_iter = 20;\n while (Math.abs(L_diff) > 1e-2 && max_iter-- > 0) {\n (function () {\n if (pol) {\n L_diff *= -1;\n }\n if (L_diff < 0) {\n t0 = t;\n t += (t1 - t) * 0.5;\n } else {\n t1 = t;\n t += (t0 - t) * 0.5;\n }\n L_actual = getColor(t, true).lab()[0];\n return (L_diff = L_actual - L_ideal);\n })();\n }\n return t;\n };\n } else {\n tMapLightness = (t) => t;\n }\n return f;\n };\n\n f.padding = function (p) {\n if (p != null) {\n if (type(p) === 'number') {\n p = [p, p];\n }\n _padding = p;\n return f;\n } else {\n return _padding;\n }\n };\n\n f.colors = function (numColors, out) {\n // If no arguments are given, return the original colors that were provided\n if (arguments.length < 2) {\n out = 'hex';\n }\n let result = [];\n\n if (arguments.length === 0) {\n result = _colors.slice(0);\n } else if (numColors === 1) {\n result = [f(0.5)];\n } else if (numColors > 1) {\n const dm = _domain[0];\n const dd = _domain[1] - dm;\n result = __range__(0, numColors, false).map((i) =>\n f(dm + (i / (numColors - 1)) * dd)\n );\n } else {\n // returns all colors based on the defined classes\n colors = [];\n let samples = [];\n if (_classes && _classes.length > 2) {\n for (\n let i = 1, end = _classes.length, asc = 1 <= end;\n asc ? i < end : i > end;\n asc ? i++ : i--\n ) {\n samples.push((_classes[i - 1] + _classes[i]) * 0.5);\n }\n } else {\n samples = _domain;\n }\n result = samples.map((v) => f(v));\n }\n\n if (chroma[out]) {\n result = result.map((c) => c[out]());\n }\n return result;\n };\n\n f.cache = function (c) {\n if (c != null) {\n _useCache = c;\n return f;\n } else {\n return _useCache;\n }\n };\n\n f.gamma = function (g) {\n if (g != null) {\n _gamma = g;\n return f;\n } else {\n return _gamma;\n }\n };\n\n f.nodata = function (d) {\n if (d != null) {\n _nacol = chroma(d);\n return f;\n } else {\n return _nacol;\n }\n };\n\n return f;\n}\n\nfunction __range__(left, right, inclusive) {\n let range = [];\n let ascending = left < right;\n let end = !inclusive ? right : ascending ? right + 1 : right - 1;\n for (let i = left; ascending ? i < end : i > end; ascending ? i++ : i--) {\n range.push(i);\n }\n return range;\n}\n","//\n// interpolates between a set of colors uzing a bezier spline\n//\n\n// @requires utils lab\nimport Color from '../Color.js';\nimport '../io/lab/index.js';\nimport scale from './scale.js';\n\n// nth row of the pascal triangle\nconst binom_row = function (n) {\n let row = [1, 1];\n for (let i = 1; i < n; i++) {\n let newrow = [1];\n for (let j = 1; j <= row.length; j++) {\n newrow[j] = (row[j] || 0) + row[j - 1];\n }\n row = newrow;\n }\n return row;\n};\n\nconst bezier = function (colors) {\n let I, lab0, lab1, lab2;\n colors = colors.map((c) => new Color(c));\n if (colors.length === 2) {\n // linear interpolation\n [lab0, lab1] = colors.map((c) => c.lab());\n I = function (t) {\n const lab = [0, 1, 2].map((i) => lab0[i] + t * (lab1[i] - lab0[i]));\n return new Color(lab, 'lab');\n };\n } else if (colors.length === 3) {\n // quadratic bezier interpolation\n [lab0, lab1, lab2] = colors.map((c) => c.lab());\n I = function (t) {\n const lab = [0, 1, 2].map(\n (i) =>\n (1 - t) * (1 - t) * lab0[i] +\n 2 * (1 - t) * t * lab1[i] +\n t * t * lab2[i]\n );\n return new Color(lab, 'lab');\n };\n } else if (colors.length === 4) {\n // cubic bezier interpolation\n let lab3;\n [lab0, lab1, lab2, lab3] = colors.map((c) => c.lab());\n I = function (t) {\n const lab = [0, 1, 2].map(\n (i) =>\n (1 - t) * (1 - t) * (1 - t) * lab0[i] +\n 3 * (1 - t) * (1 - t) * t * lab1[i] +\n 3 * (1 - t) * t * t * lab2[i] +\n t * t * t * lab3[i]\n );\n return new Color(lab, 'lab');\n };\n } else if (colors.length >= 5) {\n // general case (degree n bezier)\n let labs, row, n;\n labs = colors.map((c) => c.lab());\n n = colors.length - 1;\n row = binom_row(n);\n I = function (t) {\n const u = 1 - t;\n const lab = [0, 1, 2].map((i) =>\n labs.reduce(\n (sum, el, j) =>\n sum + row[j] * u ** (n - j) * t ** j * el[i],\n 0\n )\n );\n return new Color(lab, 'lab');\n };\n } else {\n throw new RangeError('No point in running bezier with only one color.');\n }\n return I;\n};\n\nexport default (colors) => {\n const f = bezier(colors);\n f.scale = () => scale(f);\n return f;\n};\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { unpack, type } from '../../utils/index.js';\nconst { round } = Math;\n\nColor.prototype.rgb = function (rnd = true) {\n if (rnd === false) return this._rgb.slice(0, 3);\n return this._rgb.slice(0, 3).map(round);\n};\n\nColor.prototype.rgba = function (rnd = true) {\n return this._rgb.slice(0, 4).map((v, i) => {\n return i < 3 ? (rnd === false ? v : round(v)) : v;\n });\n};\n\nconst rgb = (...args) => new Color(...args, 'rgb');\nObject.assign(chroma, { rgb });\n\ninput.format.rgb = (...args) => {\n const rgba = unpack(args, 'rgba');\n if (rgba[3] === undefined) rgba[3] = 1;\n return rgba;\n};\n\ninput.autodetect.push({\n p: 3,\n test: (...args) => {\n args = unpack(args, 'rgba');\n if (\n type(args) === 'array' &&\n (args.length === 3 ||\n (args.length === 4 &&\n type(args[3]) == 'number' &&\n args[3] >= 0 &&\n args[3] <= 1))\n ) {\n return 'rgb';\n }\n }\n});\n\nexport { rgb };\n","/*\n * interpolates between a set of colors uzing a bezier spline\n * blend mode formulas taken from https://web.archive.org/web/20180110014946/http://www.venture-ware.com/kevin/coding/lets-learn-math-photoshop-blend-modes/\n */\n\nimport '../io/rgb/index.js';\nimport chroma from '../chroma.js';\n\nconst blend = (bottom, top, mode) => {\n if (!blend[mode]) {\n throw new Error('unknown blend mode ' + mode);\n }\n return blend[mode](bottom, top);\n};\n\nconst blend_f = (f) => (bottom, top) => {\n const c0 = chroma(top).rgb();\n const c1 = chroma(bottom).rgb();\n return chroma.rgb(f(c0, c1));\n};\n\nconst each = (f) => (c0, c1) => {\n const out = [];\n out[0] = f(c0[0], c1[0]);\n out[1] = f(c0[1], c1[1]);\n out[2] = f(c0[2], c1[2]);\n return out;\n};\n\nconst normal = (a) => a;\nconst multiply = (a, b) => (a * b) / 255;\nconst darken = (a, b) => (a > b ? b : a);\nconst lighten = (a, b) => (a > b ? a : b);\nconst screen = (a, b) => 255 * (1 - (1 - a / 255) * (1 - b / 255));\nconst overlay = (a, b) =>\n b < 128 ? (2 * a * b) / 255 : 255 * (1 - 2 * (1 - a / 255) * (1 - b / 255));\nconst burn = (a, b) => 255 * (1 - (1 - b / 255) / (a / 255));\nconst dodge = (a, b) => {\n if (a === 255) return 255;\n a = (255 * (b / 255)) / (1 - a / 255);\n return a > 255 ? 255 : a;\n};\n\n// # add = (a,b) ->\n// # if (a + b > 255) then 255 else a + b\n\nblend.normal = blend_f(each(normal));\nblend.multiply = blend_f(each(multiply));\nblend.screen = blend_f(each(screen));\nblend.overlay = blend_f(each(overlay));\nblend.darken = blend_f(each(darken));\nblend.lighten = blend_f(each(lighten));\nblend.dodge = blend_f(each(dodge));\nblend.burn = blend_f(each(burn));\n// blend.add = blend_f(each(add));\n\nexport default blend;\n","// cubehelix interpolation\n// based on D.A. Green \"A colour scheme for the display of astronomical intensity images\"\n// http://astron-soc.in/bulletin/11June/289392011.pdf\nimport { type, clip_rgb, TWOPI } from '../utils/index.js';\nimport chroma from '../chroma.js';\nconst { pow, sin, cos } = Math;\n\nexport default function (\n start = 300,\n rotations = -1.5,\n hue = 1,\n gamma = 1,\n lightness = [0, 1]\n) {\n let dh = 0,\n dl;\n if (type(lightness) === 'array') {\n dl = lightness[1] - lightness[0];\n } else {\n dl = 0;\n lightness = [lightness, lightness];\n }\n const f = function (fract) {\n const a = TWOPI * ((start + 120) / 360 + rotations * fract);\n const l = pow(lightness[0] + dl * fract, gamma);\n const h = dh !== 0 ? hue[0] + fract * dh : hue;\n const amp = (h * l * (1 - l)) / 2;\n const cos_a = cos(a);\n const sin_a = sin(a);\n const r = l + amp * (-0.14861 * cos_a + 1.78277 * sin_a);\n const g = l + amp * (-0.29227 * cos_a - 0.90649 * sin_a);\n const b = l + amp * (+1.97294 * cos_a);\n return chroma(clip_rgb([r * 255, g * 255, b * 255, 1]));\n };\n f.start = function (s) {\n if (s == null) {\n return start;\n }\n start = s;\n return f;\n };\n f.rotations = function (r) {\n if (r == null) {\n return rotations;\n }\n rotations = r;\n return f;\n };\n f.gamma = function (g) {\n if (g == null) {\n return gamma;\n }\n gamma = g;\n return f;\n };\n f.hue = function (h) {\n if (h == null) {\n return hue;\n }\n hue = h;\n if (type(hue) === 'array') {\n dh = hue[1] - hue[0];\n if (dh === 0) {\n hue = hue[1];\n }\n } else {\n dh = 0;\n }\n return f;\n };\n f.lightness = function (h) {\n if (h == null) {\n return lightness;\n }\n if (type(h) === 'array') {\n lightness = h;\n dl = h[1] - h[0];\n } else {\n lightness = [h, h];\n dl = 0;\n }\n return f;\n };\n f.scale = () => chroma.scale(f);\n f.hue(hue);\n return f;\n}\n","import Color from '../Color.js';\nconst digits = '0123456789abcdef';\n\nconst { floor, random } = Math;\n\nexport default () => {\n let code = '#';\n for (let i = 0; i < 6; i++) {\n code += digits.charAt(floor(random() * 16));\n }\n return new Color(code, 'hex');\n};\n","import type from './type.js';\n\nconst { log, pow, floor, abs } = Math;\n\nexport function analyze(data, key = null) {\n const r = {\n min: Number.MAX_VALUE,\n max: Number.MAX_VALUE * -1,\n sum: 0,\n values: [],\n count: 0\n };\n if (type(data) === 'object') {\n data = Object.values(data);\n }\n data.forEach((val) => {\n if (key && type(val) === 'object') val = val[key];\n if (val !== undefined && val !== null && !isNaN(val)) {\n r.values.push(val);\n r.sum += val;\n if (val < r.min) r.min = val;\n if (val > r.max) r.max = val;\n r.count += 1;\n }\n });\n\n r.domain = [r.min, r.max];\n\n r.limits = (mode, num) => limits(r, mode, num);\n\n return r;\n}\n\nexport function limits(data, mode = 'equal', num = 7) {\n if (type(data) == 'array') {\n data = analyze(data);\n }\n const { min, max } = data;\n const values = data.values.sort((a, b) => a - b);\n\n if (num === 1) {\n return [min, max];\n }\n\n const limits = [];\n\n if (mode.substr(0, 1) === 'c') {\n // continuous\n limits.push(min);\n limits.push(max);\n }\n\n if (mode.substr(0, 1) === 'e') {\n // equal interval\n limits.push(min);\n for (let i = 1; i < num; i++) {\n limits.push(min + (i / num) * (max - min));\n }\n limits.push(max);\n } else if (mode.substr(0, 1) === 'l') {\n // log scale\n if (min <= 0) {\n throw new Error(\n 'Logarithmic scales are only possible for values > 0'\n );\n }\n const min_log = Math.LOG10E * log(min);\n const max_log = Math.LOG10E * log(max);\n limits.push(min);\n for (let i = 1; i < num; i++) {\n limits.push(pow(10, min_log + (i / num) * (max_log - min_log)));\n }\n limits.push(max);\n } else if (mode.substr(0, 1) === 'q') {\n // quantile scale\n limits.push(min);\n for (let i = 1; i < num; i++) {\n const p = ((values.length - 1) * i) / num;\n const pb = floor(p);\n if (pb === p) {\n limits.push(values[pb]);\n } else {\n // p > pb\n const pr = p - pb;\n limits.push(values[pb] * (1 - pr) + values[pb + 1] * pr);\n }\n }\n limits.push(max);\n } else if (mode.substr(0, 1) === 'k') {\n // k-means clustering\n /*\n implementation based on\n http://code.google.com/p/figue/source/browse/trunk/figue.js#336\n simplified for 1-d input values\n */\n let cluster;\n const n = values.length;\n const assignments = new Array(n);\n const clusterSizes = new Array(num);\n let repeat = true;\n let nb_iters = 0;\n let centroids = null;\n\n // get seed values\n centroids = [];\n centroids.push(min);\n for (let i = 1; i < num; i++) {\n centroids.push(min + (i / num) * (max - min));\n }\n centroids.push(max);\n\n while (repeat) {\n // assignment step\n for (let j = 0; j < num; j++) {\n clusterSizes[j] = 0;\n }\n for (let i = 0; i < n; i++) {\n const value = values[i];\n let mindist = Number.MAX_VALUE;\n let best;\n for (let j = 0; j < num; j++) {\n const dist = abs(centroids[j] - value);\n if (dist < mindist) {\n mindist = dist;\n best = j;\n }\n clusterSizes[best]++;\n assignments[i] = best;\n }\n }\n\n // update centroids step\n const newCentroids = new Array(num);\n for (let j = 0; j < num; j++) {\n newCentroids[j] = null;\n }\n for (let i = 0; i < n; i++) {\n cluster = assignments[i];\n if (newCentroids[cluster] === null) {\n newCentroids[cluster] = values[i];\n } else {\n newCentroids[cluster] += values[i];\n }\n }\n for (let j = 0; j < num; j++) {\n newCentroids[j] *= 1 / clusterSizes[j];\n }\n\n // check convergence\n repeat = false;\n for (let j = 0; j < num; j++) {\n if (newCentroids[j] !== centroids[j]) {\n repeat = true;\n break;\n }\n }\n\n centroids = newCentroids;\n nb_iters++;\n\n if (nb_iters > 200) {\n repeat = false;\n }\n }\n\n // finished k-means clustering\n // the next part is borrowed from gabrielflor.it\n const kClusters = {};\n for (let j = 0; j < num; j++) {\n kClusters[j] = [];\n }\n for (let i = 0; i < n; i++) {\n cluster = assignments[i];\n kClusters[cluster].push(values[i]);\n }\n let tmpKMeansBreaks = [];\n for (let j = 0; j < num; j++) {\n tmpKMeansBreaks.push(kClusters[j][0]);\n tmpKMeansBreaks.push(kClusters[j][kClusters[j].length - 1]);\n }\n tmpKMeansBreaks = tmpKMeansBreaks.sort((a, b) => a - b);\n limits.push(tmpKMeansBreaks[0]);\n for (let i = 1; i < tmpKMeansBreaks.length; i += 2) {\n const v = tmpKMeansBreaks[i];\n if (!isNaN(v) && limits.indexOf(v) === -1) {\n limits.push(v);\n }\n }\n }\n return limits;\n}\n","import Color from '../Color.js';\nimport '../ops/luminance.js';\n\nexport default (a, b) => {\n // WCAG contrast ratio\n // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n a = new Color(a);\n b = new Color(b);\n const l1 = a.luminance();\n const l2 = b.luminance();\n return l1 > l2 ? (l1 + 0.05) / (l2 + 0.05) : (l2 + 0.05) / (l1 + 0.05);\n};\n","import Color from '../Color.js';\nimport mix from '../generator/mix.js';\n\n/**\n * @license\n *\n * The APCA contrast prediction algorithm is based of the formulas published\n * in the APCA-1.0.98G specification by Myndex. The specification is available at:\n * https://raw.githubusercontent.com/Myndex/apca-w3/master/images/APCAw3_0.1.17_APCA0.0.98G.svg\n *\n * Note that the APCA implementation is still beta, so please update to\n * future versions of chroma.js when they become available.\n *\n * You can read more about the APCA Readability Criterion at\n * https://readtech.org/ARC/\n */\n\n// constants\nconst W_offset = 0.027;\nconst P_in = 0.0005;\nconst P_out = 0.1;\nconst R_scale = 1.14;\nconst B_threshold = 0.022;\nconst B_exp = 1.414;\n\nexport default (text, bg) => {\n // parse input colors\n text = new Color(text);\n bg = new Color(bg);\n // if text color has alpha, blend against background\n if (text.alpha() < 1) {\n text = mix(bg, text, text.alpha(), 'rgb');\n }\n const l_text = lum(...text.rgb());\n const l_bg = lum(...bg.rgb());\n\n // soft clamp black levels\n const Y_text =\n l_text >= B_threshold\n ? l_text\n : l_text + Math.pow(B_threshold - l_text, B_exp);\n const Y_bg =\n l_bg >= B_threshold ? l_bg : l_bg + Math.pow(B_threshold - l_bg, B_exp);\n\n // normal polarity (dark text on light background)\n const S_norm = Math.pow(Y_bg, 0.56) - Math.pow(Y_text, 0.57);\n // reverse polarity (light text on dark background)\n const S_rev = Math.pow(Y_bg, 0.65) - Math.pow(Y_text, 0.62);\n // clamp noise then scale\n const C =\n Math.abs(Y_bg - Y_text) < P_in\n ? 0\n : Y_text < Y_bg\n ? S_norm * R_scale\n : S_rev * R_scale;\n // clamp minimum contrast then offset\n const S_apc = Math.abs(C) < P_out ? 0 : C > 0 ? C - W_offset : C + W_offset;\n // scale to 100\n return S_apc * 100;\n};\n\nfunction lum(r, g, b) {\n return (\n 0.2126729 * Math.pow(r / 255, 2.4) +\n 0.7151522 * Math.pow(g / 255, 2.4) +\n 0.072175 * Math.pow(b / 255, 2.4)\n );\n}\n","import Color from '../Color.js';\nconst { sqrt, pow, min, max, atan2, abs, cos, sin, exp, PI } = Math;\n\nexport default function (a, b, Kl = 1, Kc = 1, Kh = 1) {\n // Delta E (CIE 2000)\n // see http://www.brucelindbloom.com/index.html?Eqn_DeltaE_CIE2000.html\n var rad2deg = function (rad) {\n return (360 * rad) / (2 * PI);\n };\n var deg2rad = function (deg) {\n return (2 * PI * deg) / 360;\n };\n a = new Color(a);\n b = new Color(b);\n const [L1, a1, b1] = Array.from(a.lab());\n const [L2, a2, b2] = Array.from(b.lab());\n const avgL = (L1 + L2) / 2;\n const C1 = sqrt(pow(a1, 2) + pow(b1, 2));\n const C2 = sqrt(pow(a2, 2) + pow(b2, 2));\n const avgC = (C1 + C2) / 2;\n const G = 0.5 * (1 - sqrt(pow(avgC, 7) / (pow(avgC, 7) + pow(25, 7))));\n const a1p = a1 * (1 + G);\n const a2p = a2 * (1 + G);\n const C1p = sqrt(pow(a1p, 2) + pow(b1, 2));\n const C2p = sqrt(pow(a2p, 2) + pow(b2, 2));\n const avgCp = (C1p + C2p) / 2;\n const arctan1 = rad2deg(atan2(b1, a1p));\n const arctan2 = rad2deg(atan2(b2, a2p));\n const h1p = arctan1 >= 0 ? arctan1 : arctan1 + 360;\n const h2p = arctan2 >= 0 ? arctan2 : arctan2 + 360;\n const avgHp =\n abs(h1p - h2p) > 180 ? (h1p + h2p + 360) / 2 : (h1p + h2p) / 2;\n const T =\n 1 -\n 0.17 * cos(deg2rad(avgHp - 30)) +\n 0.24 * cos(deg2rad(2 * avgHp)) +\n 0.32 * cos(deg2rad(3 * avgHp + 6)) -\n 0.2 * cos(deg2rad(4 * avgHp - 63));\n let deltaHp = h2p - h1p;\n deltaHp =\n abs(deltaHp) <= 180\n ? deltaHp\n : h2p <= h1p\n ? deltaHp + 360\n : deltaHp - 360;\n deltaHp = 2 * sqrt(C1p * C2p) * sin(deg2rad(deltaHp) / 2);\n const deltaL = L2 - L1;\n const deltaCp = C2p - C1p;\n const sl = 1 + (0.015 * pow(avgL - 50, 2)) / sqrt(20 + pow(avgL - 50, 2));\n const sc = 1 + 0.045 * avgCp;\n const sh = 1 + 0.015 * avgCp * T;\n const deltaTheta = 30 * exp(-pow((avgHp - 275) / 25, 2));\n const Rc = 2 * sqrt(pow(avgCp, 7) / (pow(avgCp, 7) + pow(25, 7)));\n const Rt = -Rc * sin(2 * deg2rad(deltaTheta));\n const result = sqrt(\n pow(deltaL / (Kl * sl), 2) +\n pow(deltaCp / (Kc * sc), 2) +\n pow(deltaHp / (Kh * sh), 2) +\n Rt * (deltaCp / (Kc * sc)) * (deltaHp / (Kh * sh))\n );\n return max(0, min(100, result));\n}\n","import Color from '../Color.js';\n\n// simple Euclidean distance\nexport default function (a, b, mode = 'lab') {\n // Delta E (CIE 1976)\n // see http://www.brucelindbloom.com/index.html?Equations.html\n a = new Color(a);\n b = new Color(b);\n const l1 = a.get(mode);\n const l2 = b.get(mode);\n let sum_sq = 0;\n for (let i in l1) {\n const d = (l1[i] || 0) - (l2[i] || 0);\n sum_sq += d * d;\n }\n return Math.sqrt(sum_sq);\n}\n","import Color from '../Color.js';\n\nexport default (...args) => {\n try {\n new Color(...args);\n return true;\n // eslint-disable-next-line\n } catch (e) {\n return false;\n }\n};\n","// some pre-defined color scales:\nimport chroma from '../chroma.js';\nimport '../io/hsl/index.js';\nimport scale from '../generator/scale.js';\n\nexport default {\n cool() {\n return scale([chroma.hsl(180, 1, 0.9), chroma.hsl(250, 0.7, 0.4)]);\n },\n hot() {\n return scale(['#000', '#f00', '#ff0', '#fff'], [0, 0.25, 0.75, 1]).mode(\n 'rgb'\n );\n }\n};\n","/**\n ColorBrewer colors for chroma.js\n\n Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The\n Pennsylvania State University.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software distributed\n under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n CONDITIONS OF ANY KIND, either express or implied. See the License for the\n specific language governing permissions and limitations under the License.\n*/\n\nconst colorbrewer = {\n // sequential\n OrRd: ['#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f', '#b30000', '#7f0000'],\n PuBu: ['#fff7fb', '#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0', '#045a8d', '#023858'],\n BuPu: ['#f7fcfd', '#e0ecf4', '#bfd3e6', '#9ebcda', '#8c96c6', '#8c6bb1', '#88419d', '#810f7c', '#4d004b'],\n Oranges: ['#fff5eb', '#fee6ce', '#fdd0a2', '#fdae6b', '#fd8d3c', '#f16913', '#d94801', '#a63603', '#7f2704'],\n BuGn: ['#f7fcfd', '#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45', '#006d2c', '#00441b'],\n YlOrBr: ['#ffffe5', '#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02', '#993404', '#662506'],\n YlGn: ['#ffffe5', '#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443', '#006837', '#004529'],\n Reds: ['#fff5f0', '#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a', '#ef3b2c', '#cb181d', '#a50f15', '#67000d'],\n RdPu: ['#fff7f3', '#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e', '#7a0177', '#49006a'],\n Greens: ['#f7fcf5', '#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45', '#006d2c', '#00441b'],\n YlGnBu: ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0', '#225ea8', '#253494', '#081d58'],\n Purples: ['#fcfbfd', '#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d'],\n GnBu: ['#f7fcf0', '#e0f3db', '#ccebc5', '#a8ddb5', '#7bccc4', '#4eb3d3', '#2b8cbe', '#0868ac', '#084081'],\n Greys: ['#ffffff', '#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252', '#252525', '#000000'],\n YlOrRd: ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a', '#e31a1c', '#bd0026', '#800026'],\n PuRd: ['#f7f4f9', '#e7e1ef', '#d4b9da', '#c994c7', '#df65b0', '#e7298a', '#ce1256', '#980043', '#67001f'],\n Blues: ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b'],\n PuBuGn: ['#fff7fb', '#ece2f0', '#d0d1e6', '#a6bddb', '#67a9cf', '#3690c0', '#02818a', '#016c59', '#014636'],\n Viridis: ['#440154', '#482777', '#3f4a8a', '#31678e', '#26838f', '#1f9d8a', '#6cce5a', '#b6de2b', '#fee825'],\n\n // diverging\n Spectral: ['#9e0142', '#d53e4f', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#e6f598', '#abdda4', '#66c2a5', '#3288bd', '#5e4fa2'],\n RdYlGn: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#d9ef8b', '#a6d96a', '#66bd63', '#1a9850', '#006837'],\n RdBu: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#f7f7f7', '#d1e5f0', '#92c5de', '#4393c3', '#2166ac', '#053061'],\n PiYG: ['#8e0152', '#c51b7d', '#de77ae', '#f1b6da', '#fde0ef', '#f7f7f7', '#e6f5d0', '#b8e186', '#7fbc41', '#4d9221', '#276419'],\n PRGn: ['#40004b', '#762a83', '#9970ab', '#c2a5cf', '#e7d4e8', '#f7f7f7', '#d9f0d3', '#a6dba0', '#5aae61', '#1b7837', '#00441b'],\n RdYlBu: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4', '#313695'],\n BrBG: ['#543005', '#8c510a', '#bf812d', '#dfc27d', '#f6e8c3', '#f5f5f5', '#c7eae5', '#80cdc1', '#35978f', '#01665e', '#003c30'],\n RdGy: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#ffffff', '#e0e0e0', '#bababa', '#878787', '#4d4d4d', '#1a1a1a'],\n PuOr: ['#7f3b08', '#b35806', '#e08214', '#fdb863', '#fee0b6', '#f7f7f7', '#d8daeb', '#b2abd2', '#8073ac', '#542788', '#2d004b'],\n\n // qualitative\n Set2: ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f', '#e5c494', '#b3b3b3'],\n Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666'],\n Set1: ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf', '#999999'],\n Set3: ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#ccebc5', '#ffed6f'],\n Dark2: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'],\n Paired: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'],\n Pastel2: ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae', '#f1e2cc', '#cccccc'],\n Pastel1: ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4', '#fed9a6', '#ffffcc', '#e5d8bd', '#fddaec', '#f2f2f2']\n};\n\nconst colorbrewerTypes = Object.keys(colorbrewer);\nconst typeMap = new Map(colorbrewerTypes.map((key) => [key.toLowerCase(), key]));\n\n// use Proxy to allow case-insensitive access to palettes\nconst colorbrewerProxy =\n typeof Proxy === 'function'\n ? new Proxy(colorbrewer, {\n get(target, prop) {\n const lower = prop.toLowerCase();\n if (typeMap.has(lower)) {\n return target[typeMap.get(lower)];\n }\n },\n getOwnPropertyNames() {\n return Object.getOwnPropertyNames(colorbrewerTypes);\n }\n })\n : colorbrewer;\n\nexport default colorbrewerProxy;\n","import { unpack } from '../../utils/index.js';\n\nconst cmyk2rgb = (...args) => {\n args = unpack(args, 'cmyk');\n const [c, m, y, k] = args;\n const alpha = args.length > 4 ? args[4] : 1;\n if (k === 1) return [0, 0, 0, alpha];\n return [\n c >= 1 ? 0 : 255 * (1 - c) * (1 - k), // r\n m >= 1 ? 0 : 255 * (1 - m) * (1 - k), // g\n y >= 1 ? 0 : 255 * (1 - y) * (1 - k), // b\n alpha\n ];\n};\n\nexport default cmyk2rgb;\n","import { unpack } from '../../utils/index.js';\nconst { max } = Math;\n\nconst rgb2cmyk = (...args) => {\n let [r, g, b] = unpack(args, 'rgb');\n r = r / 255;\n g = g / 255;\n b = b / 255;\n const k = 1 - max(r, max(g, b));\n const f = k < 1 ? 1 / (1 - k) : 0;\n const c = (1 - r - k) * f;\n const m = (1 - g - k) * f;\n const y = (1 - b - k) * f;\n return [c, m, y, k];\n};\n\nexport default rgb2cmyk;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { unpack, type } from '../../utils/index.js';\nimport cmyk2rgb from './cmyk2rgb.js';\nimport rgb2cmyk from './rgb2cmyk.js';\n\nColor.prototype.cmyk = function () {\n return rgb2cmyk(this._rgb);\n};\n\nconst cmyk = (...args) => new Color(...args, 'cmyk');\nObject.assign(chroma, { cmyk });\n\ninput.format.cmyk = cmyk2rgb;\n\ninput.autodetect.push({\n p: 2,\n test: (...args) => {\n args = unpack(args, 'cmyk');\n if (type(args) === 'array' && args.length === 4) {\n return 'cmyk';\n }\n }\n});\n\nexport { cmyk };\n","import { unpack, last, rnd2 } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - hsl2css(h,s,l)\n * - hsl2css(h,s,l,a)\n * - hsl2css([h,s,l], mode)\n * - hsl2css([h,s,l,a], mode)\n * - hsl2css({h,s,l,a}, mode)\n */\nconst hsl2css = (...args) => {\n const hsla = unpack(args, 'hsla');\n let mode = last(args) || 'lsa';\n hsla[0] = rnd2(hsla[0] || 0) + 'deg';\n hsla[1] = rnd2(hsla[1] * 100) + '%';\n hsla[2] = rnd2(hsla[2] * 100) + '%';\n if (mode === 'hsla' || (hsla.length > 3 && hsla[3] < 1)) {\n hsla[3] = '/ ' + (hsla.length > 3 ? hsla[3] : 1);\n mode = 'hsla';\n } else {\n hsla.length = 3;\n }\n return `${mode.substr(0, 3)}(${hsla.join(' ')})`;\n};\n\nexport default hsl2css;\n","import { unpack, last, rnd2 } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - lab2css(l,a,b)\n * - lab2css(l,a,b,alpha)\n * - lab2css([l,a,b], mode)\n * - lab2css([l,a,b,alpha], mode)\n */\nconst lab2css = (...args) => {\n const laba = unpack(args, 'lab');\n let mode = last(args) || 'lab';\n laba[0] = rnd2(laba[0]) + '%';\n laba[1] = rnd2(laba[1]);\n laba[2] = rnd2(laba[2]);\n if (mode === 'laba' || (laba.length > 3 && laba[3] < 1)) {\n laba[3] = '/ ' + (laba.length > 3 ? laba[3] : 1);\n } else {\n laba.length = 3;\n }\n return `lab(${laba.join(' ')})`;\n};\n\nexport default lab2css;\n","import { unpack, last, rnd2 } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - lab2css(l,a,b)\n * - lab2css(l,a,b,alpha)\n * - lab2css([l,a,b], mode)\n * - lab2css([l,a,b,alpha], mode)\n */\nconst lch2css = (...args) => {\n const lcha = unpack(args, 'lch');\n let mode = last(args) || 'lab';\n lcha[0] = rnd2(lcha[0]) + '%';\n lcha[1] = rnd2(lcha[1]);\n lcha[2] = isNaN(lcha[2]) ? 'none' : rnd2(lcha[2]) + 'deg'; // add deg unit to hue\n if (mode === 'lcha' || (lcha.length > 3 && lcha[3] < 1)) {\n lcha[3] = '/ ' + (lcha.length > 3 ? lcha[3] : 1);\n } else {\n lcha.length = 3;\n }\n return `lch(${lcha.join(' ')})`;\n};\n\nexport default lch2css;\n","import { unpack, rnd2, rnd3 } from '../../utils/index.js';\n\nconst oklab2css = (...args) => {\n const laba = unpack(args, 'lab');\n laba[0] = rnd2(laba[0] * 100) + '%';\n laba[1] = rnd3(laba[1]);\n laba[2] = rnd3(laba[2]);\n if (laba.length > 3 && laba[3] < 1) {\n laba[3] = '/ ' + (laba.length > 3 ? laba[3] : 1);\n } else {\n laba.length = 3;\n }\n return `oklab(${laba.join(' ')})`;\n};\n\nexport default oklab2css;\n","import { unpack } from '../../utils/index.js';\nimport rgb2oklab from '../oklab/rgb2oklab.js';\nimport lab2lch from '../lch/lab2lch.js';\n\nconst rgb2oklch = (...args) => {\n const [r, g, b, ...rest] = unpack(args, 'rgb');\n const [l, a, b_] = rgb2oklab(r, g, b);\n const [L, c, h] = lab2lch(l, a, b_);\n return [L, c, h, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\nexport default rgb2oklch;\n","import { unpack, rnd2, rnd3 } from '../../utils/index.js';\n\nconst oklch2css = (...args) => {\n const lcha = unpack(args, 'lch');\n lcha[0] = rnd2(lcha[0] * 100) + '%';\n lcha[1] = rnd3(lcha[1]);\n lcha[2] = isNaN(lcha[2]) ? 'none' : rnd2(lcha[2]) + 'deg'; // add deg unit to hue\n if (lcha.length > 3 && lcha[3] < 1) {\n lcha[3] = '/ ' + (lcha.length > 3 ? lcha[3] : 1);\n } else {\n lcha.length = 3;\n }\n return `oklch(${lcha.join(' ')})`;\n};\n\nexport default oklch2css;\n","import { unpack, last } from '../../utils/index.js';\nimport hsl2css from './hsl2css.js';\nimport rgb2hsl from '../hsl/rgb2hsl.js';\nimport lab2css from './lab2css.js';\nimport rgb2lab from '../lab/rgb2lab.js';\nimport lch2css from './lch2css.js';\nimport rgb2lch from '../lch/rgb2lch.js';\nimport rgb2oklab from '../oklab/rgb2oklab.js';\nimport oklab2css from './oklab2css.js';\nimport rgb2oklch from '../oklch/rgb2oklch.js';\nimport oklch2css from './oklch2css.js';\nimport { getLabWhitePoint, setLabWhitePoint } from '../lab/lab-constants.js';\nconst { round } = Math;\n\n/*\n * supported arguments:\n * - rgb2css(r,g,b)\n * - rgb2css(r,g,b,a)\n * - rgb2css([r,g,b], mode)\n * - rgb2css([r,g,b,a], mode)\n * - rgb2css({r,g,b,a}, mode)\n */\nconst rgb2css = (...args) => {\n const rgba = unpack(args, 'rgba');\n let mode = last(args) || 'rgb';\n if (mode.substr(0, 3) === 'hsl') {\n return hsl2css(rgb2hsl(rgba), mode);\n }\n if (mode.substr(0, 3) === 'lab') {\n // change to D50 lab whitepoint since this is what W3C is using for CSS Lab colors\n const prevWhitePoint = getLabWhitePoint();\n setLabWhitePoint('d50');\n const cssColor = lab2css(rgb2lab(rgba), mode);\n setLabWhitePoint(prevWhitePoint);\n return cssColor;\n }\n if (mode.substr(0, 3) === 'lch') {\n // change to D50 lab whitepoint since this is what W3C is using for CSS Lab colors\n const prevWhitePoint = getLabWhitePoint();\n setLabWhitePoint('d50');\n const cssColor = lch2css(rgb2lch(rgba), mode);\n setLabWhitePoint(prevWhitePoint);\n return cssColor;\n }\n if (mode.substr(0, 5) === 'oklab') {\n return oklab2css(rgb2oklab(rgba));\n }\n if (mode.substr(0, 5) === 'oklch') {\n return oklch2css(rgb2oklch(rgba));\n }\n rgba[0] = round(rgba[0]);\n rgba[1] = round(rgba[1]);\n rgba[2] = round(rgba[2]);\n if (mode === 'rgba' || (rgba.length > 3 && rgba[3] < 1)) {\n rgba[3] = '/ ' + (rgba.length > 3 ? rgba[3] : 1);\n mode = 'rgba';\n }\n return `${mode.substr(0, 3)}(${rgba.slice(0, mode === 'rgb' ? 3 : 4).join(' ')})`;\n};\n\nexport default rgb2css;\n","import { unpack } from '../../utils/index.js';\nimport lch2lab from '../lch/lch2lab.js';\nimport oklab2rgb from '../oklab/oklab2rgb.js';\n\nconst oklch2rgb = (...args) => {\n args = unpack(args, 'lch');\n const [l, c, h, ...rest] = args;\n const [L, a, b_] = lch2lab(l, c, h);\n const [r, g, b] = oklab2rgb(L, a, b_);\n return [r, g, b, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\nexport default oklch2rgb;\n","import hsl2rgb from '../hsl/hsl2rgb.js';\nimport lab2rgb from '../lab/lab2rgb.js';\nimport lch2rgb from '../lch/lch2rgb.js';\nimport oklab2rgb from '../oklab/oklab2rgb.js';\nimport oklch2rgb from '../oklch/oklch2rgb.js';\nimport input from '../input.js';\nimport limit from '../../utils/limit.js';\nimport { getLabWhitePoint, setLabWhitePoint } from '../lab/lab-constants.js';\n\nconst INT_OR_PCT = /((?:-?\\d+)|(?:-?\\d+(?:\\.\\d+)?)%|none)/.source;\nconst FLOAT_OR_PCT = /((?:-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)%?)|none)/.source;\nconst PCT = /((?:-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)%)|none)/.source;\nconst RE_S = /\\s*/.source;\nconst SEP = /\\s+/.source;\nconst COMMA = /\\s*,\\s*/.source;\nconst ANLGE = /((?:-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:deg)?)|none)/.source;\nconst ALPHA = /\\s*(?:\\/\\s*((?:[01]|[01]?\\.\\d+)|\\d+(?:\\.\\d+)?%))?/.source;\n\n// e.g. rgb(250 20 0), rgb(100% 50% 20%), rgb(100% 50% 20% / 0.5)\nconst RE_RGB = new RegExp(\n '^rgba?\\\\(' +\n RE_S +\n [INT_OR_PCT, INT_OR_PCT, INT_OR_PCT].join(SEP) +\n ALPHA +\n '\\\\)$'\n);\nconst RE_RGB_LEGACY = new RegExp(\n '^rgb\\\\(' +\n RE_S +\n [INT_OR_PCT, INT_OR_PCT, INT_OR_PCT].join(COMMA) +\n RE_S +\n '\\\\)$'\n);\nconst RE_RGBA_LEGACY = new RegExp(\n '^rgba\\\\(' +\n RE_S +\n [INT_OR_PCT, INT_OR_PCT, INT_OR_PCT, FLOAT_OR_PCT].join(COMMA) +\n RE_S +\n '\\\\)$'\n);\n\nconst RE_HSL = new RegExp(\n '^hsla?\\\\(' + RE_S + [ANLGE, PCT, PCT].join(SEP) + ALPHA + '\\\\)$'\n);\nconst RE_HSL_LEGACY = new RegExp(\n '^hsl?\\\\(' + RE_S + [ANLGE, PCT, PCT].join(COMMA) + RE_S + '\\\\)$'\n);\nconst RE_HSLA_LEGACY =\n /^hsla\\(\\s*(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\n\nconst RE_LAB = new RegExp(\n '^lab\\\\(' +\n RE_S +\n [FLOAT_OR_PCT, FLOAT_OR_PCT, FLOAT_OR_PCT].join(SEP) +\n ALPHA +\n '\\\\)$'\n);\nconst RE_LCH = new RegExp(\n '^lch\\\\(' +\n RE_S +\n [FLOAT_OR_PCT, FLOAT_OR_PCT, ANLGE].join(SEP) +\n ALPHA +\n '\\\\)$'\n);\nconst RE_OKLAB = new RegExp(\n '^oklab\\\\(' +\n RE_S +\n [FLOAT_OR_PCT, FLOAT_OR_PCT, FLOAT_OR_PCT].join(SEP) +\n ALPHA +\n '\\\\)$'\n);\nconst RE_OKLCH = new RegExp(\n '^oklch\\\\(' +\n RE_S +\n [FLOAT_OR_PCT, FLOAT_OR_PCT, ANLGE].join(SEP) +\n ALPHA +\n '\\\\)$'\n);\n\nconst { round } = Math;\n\nconst roundRGB = (rgb) => {\n return rgb.map((v, i) => (i <= 2 ? limit(round(v), 0, 255) : v));\n};\n\nconst percentToAbsolute = (pct, min = 0, max = 100, signed = false) => {\n if (typeof pct === 'string' && pct.endsWith('%')) {\n pct = parseFloat(pct.substring(0, pct.length - 1)) / 100;\n if (signed) {\n // signed percentages are in the range -100% to 100%\n pct = min + (pct + 1) * 0.5 * (max - min);\n } else {\n pct = min + pct * (max - min);\n }\n }\n return +pct;\n};\n\nconst noneToValue = (v, noneValue) => {\n return v === 'none' ? noneValue : v;\n};\n\nconst css2rgb = (css) => {\n css = css.toLowerCase().trim();\n\n if (css === 'transparent') {\n return [0, 0, 0, 0];\n }\n\n let m;\n\n if (input.format.named) {\n try {\n return input.format.named(css);\n // eslint-disable-next-line\n } catch (e) {}\n }\n\n // rgb(250 20 0) or rgb(250,20,0)\n if ((m = css.match(RE_RGB)) || (m = css.match(RE_RGB_LEGACY))) {\n let rgb = m.slice(1, 4);\n for (let i = 0; i < 3; i++) {\n rgb[i] = +percentToAbsolute(noneToValue(rgb[i], 0), 0, 255);\n }\n rgb = roundRGB(rgb);\n const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n rgb[3] = alpha; // default alpha\n return rgb;\n }\n\n // rgba(250,20,0,0.4)\n if ((m = css.match(RE_RGBA_LEGACY))) {\n const rgb = m.slice(1, 5);\n for (let i = 0; i < 4; i++) {\n rgb[i] = +percentToAbsolute(rgb[i], 0, 255);\n }\n return rgb;\n }\n\n // hsl(0,100%,50%)\n if ((m = css.match(RE_HSL)) || (m = css.match(RE_HSL_LEGACY))) {\n const hsl = m.slice(1, 4);\n hsl[0] = +noneToValue(hsl[0].replace('deg', ''), 0);\n hsl[1] = +percentToAbsolute(noneToValue(hsl[1], 0), 0, 100) * 0.01;\n hsl[2] = +percentToAbsolute(noneToValue(hsl[2], 0), 0, 100) * 0.01;\n const rgb = roundRGB(hsl2rgb(hsl));\n const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n rgb[3] = alpha;\n return rgb;\n }\n\n // hsla(0,100%,50%,0.5)\n if ((m = css.match(RE_HSLA_LEGACY))) {\n const hsl = m.slice(1, 4);\n hsl[1] *= 0.01;\n hsl[2] *= 0.01;\n const rgb = hsl2rgb(hsl);\n for (let i = 0; i < 3; i++) {\n rgb[i] = round(rgb[i]);\n }\n rgb[3] = +m[4]; // default alpha = 1\n return rgb;\n }\n\n if ((m = css.match(RE_LAB))) {\n const lab = m.slice(1, 4);\n lab[0] = percentToAbsolute(noneToValue(lab[0], 0), 0, 100);\n lab[1] = percentToAbsolute(noneToValue(lab[1], 0), -125, 125, true);\n lab[2] = percentToAbsolute(noneToValue(lab[2], 0), -125, 125, true);\n // convert to D50 Lab whitepoint\n const wp = getLabWhitePoint();\n setLabWhitePoint('d50');\n const rgb = roundRGB(lab2rgb(lab));\n // convert back to original Lab whitepoint\n setLabWhitePoint(wp);\n const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n rgb[3] = alpha;\n return rgb;\n }\n\n if ((m = css.match(RE_LCH))) {\n const lch = m.slice(1, 4);\n lch[0] = percentToAbsolute(lch[0], 0, 100);\n lch[1] = percentToAbsolute(noneToValue(lch[1], 0), 0, 150, false);\n lch[2] = +noneToValue(lch[2].replace('deg', ''), 0);\n // convert to D50 Lab whitepoint\n const wp = getLabWhitePoint();\n setLabWhitePoint('d50');\n const rgb = roundRGB(lch2rgb(lch));\n // convert back to original Lab whitepoint\n setLabWhitePoint(wp);\n const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n rgb[3] = alpha;\n return rgb;\n }\n\n if ((m = css.match(RE_OKLAB))) {\n const oklab = m.slice(1, 4);\n oklab[0] = percentToAbsolute(noneToValue(oklab[0], 0), 0, 1);\n oklab[1] = percentToAbsolute(noneToValue(oklab[1], 0), -0.4, 0.4, true);\n oklab[2] = percentToAbsolute(noneToValue(oklab[2], 0), -0.4, 0.4, true);\n const rgb = roundRGB(oklab2rgb(oklab));\n const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n rgb[3] = alpha;\n return rgb;\n }\n\n if ((m = css.match(RE_OKLCH))) {\n const oklch = m.slice(1, 4);\n oklch[0] = percentToAbsolute(noneToValue(oklch[0], 0), 0, 1);\n oklch[1] = percentToAbsolute(noneToValue(oklch[1], 0), 0, 0.4, false);\n oklch[2] = +noneToValue(oklch[2].replace('deg', ''), 0);\n const rgb = roundRGB(oklch2rgb(oklch));\n const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n rgb[3] = alpha;\n return rgb;\n }\n};\n\ncss2rgb.test = (s) => {\n return (\n // modern\n RE_RGB.test(s) ||\n RE_HSL.test(s) ||\n RE_LAB.test(s) ||\n RE_LCH.test(s) ||\n RE_OKLAB.test(s) ||\n RE_OKLCH.test(s) ||\n // legacy\n RE_RGB_LEGACY.test(s) ||\n RE_RGBA_LEGACY.test(s) ||\n RE_HSL_LEGACY.test(s) ||\n RE_HSLA_LEGACY.test(s) ||\n s === 'transparent'\n );\n};\n\nexport default css2rgb;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\n\nimport rgb2css from './rgb2css.js';\nimport css2rgb from './css2rgb.js';\n\nColor.prototype.css = function (mode) {\n return rgb2css(this._rgb, mode);\n};\n\nconst css = (...args) => new Color(...args, 'css');\nchroma.css = css;\n\ninput.format.css = css2rgb;\n\ninput.autodetect.push({\n p: 5,\n test: (h, ...rest) => {\n if (!rest.length && type(h) === 'string' && css2rgb.test(h)) {\n return 'css';\n }\n }\n});\n\nexport { css };\n","import Color from '../../Color.js';\nimport chroma from '../../chroma.js';\nimport input from '../input.js';\nimport { unpack } from '../../utils/index.js';\n\ninput.format.gl = (...args) => {\n const rgb = unpack(args, 'rgba');\n rgb[0] *= 255;\n rgb[1] *= 255;\n rgb[2] *= 255;\n return rgb;\n};\n\nconst gl = (...args) => new Color(...args, 'gl');\nchroma.gl = gl;\n\nColor.prototype.gl = function () {\n const rgb = this._rgb;\n return [rgb[0] / 255, rgb[1] / 255, rgb[2] / 255, rgb[3]];\n};\n\nexport { gl };\n","import Color from '../../Color.js';\nimport chroma from '../../chroma.js';\nimport { type } from '../../utils/index.js';\nimport input from '../input.js';\nimport hex2rgb from './hex2rgb.js';\nimport rgb2hex from './rgb2hex.js';\n\nColor.prototype.hex = function (mode) {\n return rgb2hex(this._rgb, mode);\n};\n\nconst hex = (...args) => new Color(...args, 'hex');\nchroma.hex = hex;\n\ninput.format.hex = hex2rgb;\ninput.autodetect.push({\n p: 4,\n test: (h, ...rest) => {\n if (\n !rest.length &&\n type(h) === 'string' &&\n [3, 4, 5, 6, 7, 8, 9].indexOf(h.length) >= 0\n ) {\n return 'hex';\n }\n }\n});\n\nexport { hex };\n","/*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n */\n\nconst { log } = Math;\n\nconst temperature2rgb = (kelvin) => {\n const temp = kelvin / 100;\n let r, g, b;\n if (temp < 66) {\n r = 255;\n g =\n temp < 6\n ? 0\n : -155.25485562709179 -\n 0.44596950469579133 * (g = temp - 2) +\n 104.49216199393888 * log(g);\n b =\n temp < 20\n ? 0\n : -254.76935184120902 +\n 0.8274096064007395 * (b = temp - 10) +\n 115.67994401066147 * log(b);\n } else {\n r =\n 351.97690566805693 +\n 0.114206453784165 * (r = temp - 55) -\n 40.25366309332127 * log(r);\n g =\n 325.4494125711974 +\n 0.07943456536662342 * (g = temp - 50) -\n 28.0852963507957 * log(g);\n b = 255;\n }\n return [r, g, b, 1];\n};\n\nexport default temperature2rgb;\n","/*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n **/\n\nimport temperature2rgb from './temperature2rgb.js';\nimport { unpack } from '../../utils/index.js';\nconst { round } = Math;\n\nconst rgb2temperature = (...args) => {\n const rgb = unpack(args, 'rgb');\n const r = rgb[0],\n b = rgb[2];\n let minTemp = 1000;\n let maxTemp = 40000;\n const eps = 0.4;\n let temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n const rgb = temperature2rgb(temp);\n if (rgb[2] / rgb[0] >= b / r) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return round(temp);\n};\n\nexport default rgb2temperature;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport temperature2rgb from './temperature2rgb.js';\nimport rgb2temperature from './rgb2temperature.js';\n\nColor.prototype.temp =\n Color.prototype.kelvin =\n Color.prototype.temperature =\n function () {\n return rgb2temperature(this._rgb);\n };\n\nconst temp = (...args) => new Color(...args, 'temp');\nObject.assign(chroma, { temp, kelvin: temp, temperature: temp });\n\ninput.format.temp =\n input.format.kelvin =\n input.format.temperature =\n temperature2rgb;\n\nexport { temp, temp as kelvin, temp as temperature };\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport oklch2rgb from './oklch2rgb.js';\nimport rgb2oklch from './rgb2oklch.js';\n\nColor.prototype.oklch = function () {\n return rgb2oklch(this._rgb);\n};\n\nconst oklch = (...args) => new Color(...args, 'oklch');\nObject.assign(chroma, { oklch });\n\ninput.format.oklch = oklch2rgb;\n\ninput.autodetect.push({\n p: 2,\n test: (...args) => {\n args = unpack(args, 'oklch');\n if (type(args) === 'array' && args.length === 3) {\n return 'oklch';\n }\n }\n});\n\nexport { oklch };\n","// feel free to comment out anything to rollup\n// a smaller chroma.js bundle\nimport chroma from './src/chroma.js';\n\n// io --> convert colors\nimport './src/io/named/index.js';\n\n// operators --> modify existing Colors\nimport './src/ops/alpha.js';\nimport './src/ops/clipped.js';\nimport './src/ops/darken.js';\nimport './src/ops/get.js';\nimport './src/ops/luminance.js';\nimport './src/ops/mix.js';\nimport './src/ops/premultiply.js';\nimport './src/ops/saturate.js';\nimport './src/ops/set.js';\nimport './src/ops/shade.js';\n\n// interpolators\nimport './src/interpolator/rgb.js';\nimport './src/interpolator/lrgb.js';\nimport './src/interpolator/lab.js';\nimport './src/interpolator/lch.js';\nimport './src/interpolator/num.js';\nimport './src/interpolator/hcg.js';\nimport './src/interpolator/hsi.js';\nimport './src/interpolator/hsl.js';\nimport './src/interpolator/hsv.js';\nimport './src/interpolator/oklab.js';\nimport './src/interpolator/oklch.js';\n\n// generators -- > create new colors\nimport average from './src/generator/average.js';\nimport bezier from './src/generator/bezier.js';\nimport blend from './src/generator/blend.js';\nimport cubehelix from './src/generator/cubehelix.js';\nimport mix from './src/generator/mix.js';\nimport random from './src/generator/random.js';\nimport scale from './src/generator/scale.js';\n\n// other utility methods\nimport { analyze } from './src/utils/analyze.js';\nimport contrast from './src/utils/contrast.js';\nimport contrastAPCA from './src/utils/contrastAPCA.js';\nimport deltaE from './src/utils/delta-e.js';\nimport distance from './src/utils/distance.js';\nimport { limits } from './src/utils/analyze.js';\nimport valid from './src/utils/valid.js';\nimport input from './src/io/input.js';\n\n// scale\nimport scales from './src/utils/scales.js';\n\n// colors\nimport colors from './src/colors/w3cx11.js';\nimport brewer from './src/colors/colorbrewer.js';\nimport Color from './src/Color.js';\n\nObject.assign(chroma, {\n analyze,\n average,\n bezier,\n blend,\n brewer,\n Color,\n colors,\n contrast,\n contrastAPCA,\n cubehelix,\n deltaE,\n distance,\n input,\n interpolate: mix,\n limits,\n mix,\n random,\n scale,\n scales,\n valid\n});\n\nexport default chroma;\n\nexport {\n analyze,\n average,\n bezier,\n blend,\n brewer,\n Color,\n colors,\n contrast,\n contrastAPCA,\n cubehelix,\n deltaE,\n distance,\n input,\n limits,\n mix,\n mix as interpolate,\n random,\n scale,\n scales,\n valid\n};\n\nexport * from './src/io/cmyk/index.js';\nexport * from './src/io/css/index.js';\nexport * from './src/io/gl/index.js';\nexport * from './src/io/hcg/index.js';\nexport * from './src/io/hex/index.js';\nexport * from './src/io/hsi/index.js';\nexport * from './src/io/hsl/index.js';\nexport * from './src/io/hsv/index.js';\nexport * from './src/io/lab/index.js';\nexport * from './src/io/lch/index.js';\nexport * from './src/io/num/index.js';\nexport * from './src/io/rgb/index.js';\nexport * from './src/io/temp/index.js';\nexport * from './src/io/oklab/index.js';\nexport * from './src/io/oklch/index.js';\n","\nimport chroma from 'chroma-js';\n\ntype Shade = {\n hex: string;\n name: string;\n}\nexport function generateShades(hexColor: string, name: string): Shade[] {\n const shades = {\n \"50\": 50,\n \"100\": 100,\n \"200\": 200,\n \"300\": 300,\n \"400\": 400,\n \"500\": 500,\n \"600\": 600,\n \"700\": 700,\n \"800\": 800,\n \"900\": 900,\n \"950\": 950\n };\n\n const base = chroma(hexColor);\n \n const shadeDefs = Object.keys(shades).map(shade => {\n const shadeNumber = shades[shade.toString() as keyof typeof shades];\n const shadeName = `${name}-${shadeNumber}`;\n \n // Generate shade based on lightness adjustment\n const lightnessMap: Record<number, number> = {\n 50: 0.95,\n 100: 0.9,\n 200: 0.8,\n 300: 0.7,\n 400: 0.6,\n 500: 0.5,\n 600: 0.4,\n 700: 0.3,\n 800: 0.2,\n 900: 0.1,\n 950: 0.05\n };\n \n const lightness = lightnessMap[shadeNumber];\n const shadeColor = base.luminance(lightness).hex();\n \n return {\n name: shadeName,\n hex: shadeColor\n };\n });\n shadeDefs.push({\n name,\n hex: hexColor\n })\n return shadeDefs;\n}","/* ============================================================================\n * Neutral scale generation utilities\n * ========================================================================== */\n\nimport { oklchToHexGamut } from './utils/colorConversion';\n\n\nexport type NeutralScaleStep = {\n name: string;\n hex: string;\n};\n\nexport function generateNeutralScale({\n background,\n steps = 11,\n warm = false,\n}: {\n background: string;\n steps?: number;\n warm?: boolean;\n}): NeutralScaleStep[] {\n const isDark = background === \"#000000\" || background.startsWith(\"#0\") || background.startsWith(\"#1\");\n // Target Tailwind shade names 50..900 plus 950\n const shadeNames = [50,100,200,300,400,500,600,700,800,900,950];\n const count = Math.min(steps, shadeNames.length);\n\n const scale: NeutralScaleStep[] = [];\n for (let i = 0; i < count; i++) {\n const t = i / (count - 1);\n const tone = isDark ? mix(0.06, 0.92, t) : mix(0.98, 0.1, t);\n const hex = oklchToHexGamut(tone, 0.02, warm ? 85 : 250);\n const name = `neutral-${shadeNames[i]}`;\n scale.push({ name, hex });\n }\n return scale;\n}\n\n// Helper function for mixing values\nfunction mix(a: number, b: number, t: number) {\n return a + (b - a) * Math.max(0, Math.min(1, t));\n}\n","import { Palette, PaletteMeta } from \"../schema\";\nimport { generateShades } from \"./generateShades\";\nimport { generateNeutralScale } from \"./neutralScale\";\nimport { featuresFromHex } from \"./utils/colorConversion\";\n\nexport type ExpandedPalette = {\n meta: PaletteMeta;\n [token: string]: any;\n}\n\nfunction colorsToMap(palette: Palette): Record<string,string> {\n const map: Record<string,string> = {};\n for (const c of palette.colors) {\n map[c.name] = c.hex;\n }\n return map;\n}\n\nfunction isBackgroundDark(hex: string): boolean {\n try {\n // Y is relative luminance (0-1). Values < 0.5 are considered dark.\n return featuresFromHex(hex).Y < 0.5;\n } catch {\n // If hex parsing fails, default to light background assumption\n return false;\n }\n}\n\nexport function expandPalette(palette: Palette) {\n const base = colorsToMap(palette);\n const expanded: Record<string,string> = { ...base };\n\n const background = base.background || base.surface || '#ffffff';\n const neutral = generateNeutralScale({ background, steps: 11, warm: false });\n neutral.forEach(n => {\n expanded[n.name] = n.hex;\n });\n\n // Generate shades for each defined role color in the colors array\n for (const [name, hex] of Object.entries(base)) {\n if (hex) {\n const shades = generateShades(hex, name);\n shades.forEach(shade => {\n expanded[shade.name] = shade.hex;\n });\n }\n }\n\n // Derived tokens\n if (base.text) expanded.body = base.text;\n\n // Check if dark mode via palette meta or luminance calculation\n const isDark = base.background ? isBackgroundDark(base.background) : false;\n const isDarkMode = palette.meta?.mode === 'dark' || isDark;\n\n // In dark mode, neutral-50 is dark (bg) and neutral-950 is light (text)\n // So we want a higher number for muted text (closer to white)\n expanded.mutedText = isDarkMode ? expanded['neutral-600'] : expanded['neutral-500'];\n\n return expanded as ExpandedPalette;\n}\n","import { ExpandedPalette } from \"./expandPalette\";\nimport { hexToRgb } from \"./utils/colorConversion\";\n\n/**\n * Generates CSS variables for a palette\n * \n * @param palette - The palette to generate CSS variables for\n * @returns \n */\nexport default function generateCssVars(palette: ExpandedPalette): Record<string, string> {\n const cssVars: Record<string, string> = {};\n // Iterate over all palette properties and generate channel values for non-null entries\n Object.entries(palette).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n const { r, g, b } = hexToRgb(value);\n // Expose CSS variables as raw channels: \"r g b\"\n cssVars[`--tb-${key}`] = `${r} ${g} ${b}`;\n }\n });\n return cssVars;\n}\n","import { HydratedTheme, Shadow } from \"../schema\";\n\nexport function generateShadowCssVars(theme: { shadow: Shadow }): Record<string, string> {\n const level = theme.shadow.elevation;\n const soft = theme.shadow.softness !== 'crisp';\n\n // Base definitions roughly inspired by Tailwind defaults\n const base = {\n sm: [{ y: 1, blur: 2, spread: 0, a: 0.08 }],\n md: [\n { y: 4, blur: 6, spread: -1, a: 0.10 },\n { y: 2, blur: 4, spread: -2, a: 0.10 },\n ],\n lg: [\n { y: 10, blur: 15, spread: -3, a: 0.10 },\n { y: 4, blur: 6, spread: -4, a: 0.10 },\n ],\n xl: [\n { y: 20, blur: 25, spread: -5, a: 0.10 },\n { y: 8, blur: 10, spread: -6, a: 0.10 },\n ],\n x2l: [{ y: 25, blur: 50, spread: -12, a: 0.25 }],\n } as const;\n\n // Elevation scaling: higher elevation → larger offset/blur\n const scale = ((): number => {\n switch (level) {\n case 'none': return 0.8;\n case 'low': return 1.0;\n case 'medium': return 1.25;\n case 'high': return 1.5;\n default: return 1.0;\n }\n })();\n\n // Softness adjustment: soft → larger blur, slightly lower alpha\n const blurMul = soft ? 1.2 : 1.0;\n const alphaMul = soft ? 0.9 : 1.05;\n\n const fmt = (layers: ReadonlyArray<{ y: number; blur: number; spread: number; a: number }>) =>\n layers\n .map(l => {\n const y = Math.round(l.y * scale);\n const blur = Math.round(l.blur * scale * blurMul);\n const spread = Math.round(l.spread * scale);\n const a = Math.max(0, Math.min(1, +(l.a * alphaMul).toFixed(3)));\n return `0 ${y}px ${blur}px ${spread}px rgba(0, 0, 0, ${a})`;\n })\n .join(\", \");\n\n return {\n \"--shadow-sm\": fmt(base.sm),\n \"--shadow-md\": fmt(base.md),\n \"--shadow-lg\": fmt(base.lg),\n \"--shadow-xl\": fmt(base.xl),\n \"--shadow-2xl\": fmt(base.x2l),\n };\n}\n\nexport function getShadowClass(theme: HydratedTheme): string {\n switch (theme.shadow.elevation) {\n case 'none':\n return '';\n case 'low':\n return 'shadow-sm';\n case 'medium':\n return 'shadow-md';\n case 'high':\n return 'shadow-lg';\n default:\n return '';\n }\n}\n","import type { EffectPreset } from '../types';\n\n/**\n * Darken background on hover\n *\n * Works with solid backgrounds only. Darkens the background color by adjusting the shade.\n */\nexport const darkenBackgroundEffect: EffectPreset = {\n id: 'darken-background',\n name: 'Darken on Hover',\n description: 'Darkens the background color on hover',\n category: 'background',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'amount',\n type: 'number',\n label: 'Darken Amount (shade step)',\n default: 100,\n },\n\n isApplicable: (buttonConfig) => {\n return buttonConfig.background.type === 'solid';\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options, tokens, buttonConfig } = ctx;\n\n // Only works with solid backgrounds\n if (buttonConfig.background.type !== 'solid') {\n return '';\n }\n\n const amount = (options.amount as number) || 100;\n const baseToken = buttonConfig.background.colorToken;\n const darkerToken = tokens.adjustShade(baseToken, amount);\n const darkerColor = tokens.getColor(darkerToken);\n\n return `\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover {\n background-color: ${darkerColor};\n }\n `;\n },\n};\n\n/**\n * Lighten background on hover\n *\n * Works with solid backgrounds only. Lightens the background color by adjusting the shade.\n */\nexport const lightenBackgroundEffect: EffectPreset = {\n id: 'lighten-background',\n name: 'Lighten on Hover',\n description: 'Lightens the background color on hover',\n category: 'background',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'amount',\n type: 'number',\n label: 'Lighten Amount (shade step)',\n default: 100,\n },\n\n isApplicable: (buttonConfig) => {\n return buttonConfig.background.type === 'solid';\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options, tokens, buttonConfig } = ctx;\n\n // Only works with solid backgrounds\n if (buttonConfig.background.type !== 'solid') {\n return '';\n }\n\n const amount = (options.amount as number) || 100;\n const baseToken = buttonConfig.background.colorToken;\n const lighterToken = tokens.adjustShade(baseToken, -amount);\n const lighterColor = tokens.getColor(lighterToken);\n\n return `\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover {\n background-color: ${lighterColor};\n }\n `;\n },\n};\n\n/**\n * Fade background on hover (reduce opacity)\n *\n * Works with all background types.\n */\nexport const fadeBackgroundEffect: EffectPreset = {\n id: 'fade-background',\n name: 'Fade on Hover',\n description: 'Reduces background opacity on hover',\n category: 'background',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'opacity',\n type: 'percentage',\n label: 'Hover Opacity',\n default: 80,\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options } = ctx;\n const opacity = ((options.opacity as number) || 80) / 100;\n\n return `\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover {\n opacity: ${opacity};\n }\n `;\n },\n};\n\n/**\n * Reduce opacity on hover (simple opacity reduction)\n *\n * Works with all background types. Reduces opacity by a percentage (default 15%).\n * This is useful for default button styles that need simple hover feedback.\n */\nexport const opacityReduceEffect: EffectPreset = {\n id: 'opacity-reduce',\n name: 'Reduce Opacity',\n description: 'Reduces button opacity on hover by a percentage',\n category: 'background',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'reduction',\n type: 'percentage',\n label: 'Opacity Reduction',\n default: 15,\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options } = ctx;\n const reduction = ((options.reduction as number) || 15) / 100;\n const hoverOpacity = 1 - reduction;\n\n return `\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover {\n opacity: ${hoverOpacity};\n }\n `;\n },\n};\n\n/**\n * Animated gradient background\n *\n * Animates a gradient background by shifting its position on hover.\n * Works with gradient backgrounds only.\n *\n * Sets background-size to 200% and animates background-position from left to right.\n */\nexport const animatedGradientEffect: EffectPreset = {\n id: 'animated-gradient',\n name: 'Animated Gradient',\n description: 'Animates gradient position on hover',\n category: 'background',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'direction',\n type: 'select',\n label: 'Animation Direction',\n default: 'horizontal',\n options: ['horizontal', 'vertical'],\n },\n\n isApplicable: (buttonConfig) => {\n return buttonConfig.background.type === 'gradient';\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options, buttonConfig } = ctx;\n\n // Only works with gradient backgrounds\n if (buttonConfig.background.type !== 'gradient') {\n return '';\n }\n\n const direction = (options.direction as string) || 'horizontal';\n const backgroundSize = direction === 'horizontal' ? '200% auto' : 'auto 200%';\n const hoverPosition = direction === 'horizontal' ? 'right center' : 'center bottom';\n\n return `\n /* Setup animated gradient */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId} {\n background-size: ${backgroundSize};\n background-position: left center;\n transition: background-position 0.3s ease;\n }\n\n /* Animate gradient on hover */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover {\n background-position: ${hoverPosition};\n }\n `;\n },\n};\n\n/**\n * Add background color on hover\n *\n * Works best with transparent backgrounds. Adds a solid background color on hover.\n */\nexport const backgroundOnHoverEffect: EffectPreset = {\n id: 'background-on-hover',\n name: 'Background on Hover',\n description: 'Adds background color on hover',\n category: 'background',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'colorToken',\n type: 'select',\n label: 'Background Color',\n default: 'neutral-800',\n options: ['neutral-700', 'neutral-800', 'neutral-900', 'primary'],\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options, tokens } = ctx;\n const colorToken = (options.colorToken as string) || 'neutral-800';\n const color = tokens.getColor(colorToken);\n\n return `\n /* Add background on hover */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover {\n background-color: ${color};\n }\n `;\n },\n};\n\n/**\n * Add semi-transparent background color on hover\n *\n * Adds a background with opacity/alpha channel. Perfect for retro/arcade styles.\n */\nexport const backgroundOnHoverAlphaEffect: EffectPreset = {\n id: 'background-on-hover-alpha',\n name: 'Background on Hover (Transparent)',\n description: 'Adds semi-transparent background on hover',\n category: 'background',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'opacity',\n type: 'percentage',\n label: 'Opacity',\n default: 50,\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, stateGroup, options } = ctx;\n const colorToken = (options.colorToken as string) || 'neutral-800';\n const opacity = (options.opacity as number) || 50; // Percentage (0-100)\n\n // Use CSS variable directly with rgb() and slash syntax for alpha\n // CSS variables are stored as RGB channels (e.g., \"22 78 99\")\n // Modern CSS syntax: rgb(var(--color) / opacity) where opacity is 0-100\n const cssVar = `var(--tb-${colorToken})`;\n\n // Generate appropriate selector based on state group\n const stateSuffix = stateGroup === 'base' ? '' : `:${stateGroup}`;\n\n return `\n /* Add semi-transparent background (${stateGroup}) */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}${stateSuffix} {\n background-color: rgb(${cssVar} / ${opacity});\n }\n `;\n },\n};\n","import type { EffectPreset } from '../types';\n\n/**\n * Border glow on hover\n *\n * Adds a glowing box-shadow on hover using a customizable color.\n */\nexport const borderGlowEffect: EffectPreset = {\n id: 'border-glow',\n name: 'Border Glow',\n description: 'Adds a glowing shadow on hover',\n category: 'shadow',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'glowColorToken',\n type: 'colorToken',\n label: 'Glow Color',\n default: 'primary-400',\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options, tokens } = ctx;\n const glowToken = (options.glowColorToken as string) || 'primary-400';\n const glowColor = tokens.getColor(glowToken);\n\n return `\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover {\n box-shadow: 0 0 15px ${glowColor};\n }\n `;\n },\n};\n\n/**\n * Drop shadow on hover\n *\n * Adds an elevated drop shadow on hover.\n */\nexport const dropShadowEffect: EffectPreset = {\n id: 'drop-shadow',\n name: 'Drop Shadow',\n description: 'Adds an elevated shadow on hover',\n category: 'shadow',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'intensity',\n type: 'select',\n label: 'Shadow Intensity',\n default: 'medium',\n options: ['subtle', 'medium', 'strong'],\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options } = ctx;\n const intensity = (options.intensity as string) || 'medium';\n\n const shadows = {\n subtle: '0 4px 6px rgba(0, 0, 0, 0.1)',\n medium: '0 10px 15px rgba(0, 0, 0, 0.15)',\n strong: '0 20px 25px rgba(0, 0, 0, 0.2)',\n };\n\n return `\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover {\n box-shadow: ${shadows[intensity as keyof typeof shadows]};\n }\n `;\n },\n};\n\n/**\n * Inner shadow (pressed effect)\n *\n * Adds an inset shadow to create a pressed/depressed appearance.\n */\nexport const innerShadowEffect: EffectPreset = {\n id: 'inner-shadow',\n name: 'Inner Shadow',\n description: 'Adds an inset shadow for a pressed appearance',\n category: 'shadow',\n pseudoElement: 'none',\n\n generateCSS: (ctx) => {\n const { themeId, variantId } = ctx;\n\n return `\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:active {\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2);\n }\n `;\n },\n};\n\n/**\n * Neumorphic shadow effect\n *\n * Creates dual shadows (light and dark) for soft UI / neumorphic design.\n * Supports both raised (outer shadows) and pressed (inset shadows) states.\n *\n * Options:\n * - mode: 'raised' (outer shadows) or 'pressed' (inset shadows)\n * - intensity: 'subtle', 'medium', 'strong'\n */\nexport const neumorphicShadowEffect: EffectPreset = {\n id: 'neumorphic-shadow',\n name: 'Neumorphic Shadow',\n description: 'Dual shadows for soft UI design (raised or pressed)',\n category: 'shadow',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'mode',\n type: 'select',\n label: 'Shadow Mode',\n default: 'raised',\n options: ['raised', 'pressed'],\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, stateGroup, options } = ctx;\n const mode = (options.mode as string) || 'raised';\n const intensity = (options.intensity as string) || 'medium';\n\n // Shadow configurations for different intensities\n // Using neumorphic-appropriate colors: darker shadow (#a3b1c6) and light shadow (#ffffff)\n const shadows = {\n subtle: {\n raised: '3px 3px 6px #a3b1c6, -3px -3px 6px #ffffff',\n pressed: 'inset 3px 3px 6px #a3b1c6, inset -3px -3px 6px #ffffff',\n },\n medium: {\n raised: '6px 6px 12px #a3b1c6, -6px -6px 12px #ffffff',\n pressed: 'inset 6px 6px 12px #a3b1c6, inset -6px -6px 12px #ffffff',\n },\n strong: {\n raised: '9px 9px 18px #a3b1c6, -9px -9px 18px #ffffff',\n pressed: 'inset 9px 9px 18px #a3b1c6, inset -9px -9px 18px #ffffff',\n },\n };\n\n const shadowValue = shadows[intensity as keyof typeof shadows][mode as 'raised' | 'pressed'];\n\n // Generate appropriate selector based on state group\n const stateSuffix = stateGroup === 'base' ? '' : `:${stateGroup}`;\n\n return `\n /* Neumorphic shadow (${mode}, ${stateGroup}) */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}${stateSuffix} {\n box-shadow: ${shadowValue};\n transition: box-shadow 0.15s ease;\n }\n `;\n },\n};\n\n/**\n * Outer glow effect\n *\n * Creates an outer glow using box-shadow with no offset.\n * Can be used in base, hover, or active states for retro/neon aesthetics.\n */\nexport const outerGlowEffect: EffectPreset = {\n id: 'outer-glow',\n name: 'Outer Glow',\n description: 'Creates an outer glow around the button',\n category: 'shadow',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'spread',\n type: 'number',\n label: 'Glow Spread (px)',\n default: 10,\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, stateGroup, options, tokens, buttonConfig } = ctx;\n const spread = (options.spread as number) || 10;\n\n // Derive glow color from button config or options\n let glowColor: string;\n if (options.glowColorToken && typeof options.glowColorToken === 'string') {\n glowColor = tokens.getColor(options.glowColorToken);\n } else if (buttonConfig.border?.colorToken) {\n // Use border color for glow\n glowColor = tokens.getColor(buttonConfig.border.colorToken);\n } else if (buttonConfig.background.type === 'solid') {\n // Use background color for glow\n glowColor = tokens.getColor(buttonConfig.background.colorToken);\n } else {\n // Default to primary\n glowColor = tokens.getColor('primary-400');\n }\n\n // Generate appropriate selector based on state group\n const stateSuffix = stateGroup === 'base' ? '' : `:${stateGroup}`;\n\n return `\n /* Outer glow (${stateGroup}) */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}${stateSuffix} {\n box-shadow: 0 0 ${spread}px ${glowColor};\n }\n `;\n },\n};\n\n/**\n * Retro 3D pressed shadow effect\n *\n * Creates a thick hard-edged bottom shadow that reduces as the button is pressed,\n * combined with vertical translation for a 3D pressed effect.\n */\nexport const retro3DShadowEffect: EffectPreset = {\n id: 'retro-3d-shadow',\n name: 'Retro 3D Shadow',\n description: '3D pressed shadow with vertical movement (retro style)',\n category: 'shadow',\n pseudoElement: 'none',\n\n generateCSS: (ctx) => {\n const { themeId, variantId } = ctx;\n\n return `\n /* Base: thick bottom shadow */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId} {\n box-shadow: 0 4px 0 0 rgba(0, 0, 0, 0.25);\n transform: translateY(0);\n transition: all 0.15s ease;\n }\n\n /* Hover: reduced shadow + slight downward movement */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover {\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.25);\n transform: translateY(1px);\n }\n\n /* Active: no shadow + full downward movement */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:active {\n box-shadow: none;\n transform: translateY(2px);\n }\n `;\n },\n};\n","import type { EffectPreset } from '../types';\n\n/**\n * Scale up on hover\n *\n * Slightly enlarges the button on hover.\n */\nexport const scaleUpEffect: EffectPreset = {\n id: 'scale-up',\n name: 'Scale Up',\n description: 'Slightly enlarges the button on hover',\n category: 'transform',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'scale',\n type: 'select',\n label: 'Scale Amount',\n default: '1.05',\n options: ['1.02', '1.05', '1.10'],\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options } = ctx;\n const scale = (options.scale as string) || '1.05';\n\n return `\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover {\n transform: scale(${scale});\n }\n `;\n },\n};\n\n/**\n * Scale down on active (press effect)\n *\n * Slightly shrinks the button when clicked.\n */\nexport const scaleDownEffect: EffectPreset = {\n id: 'scale-down',\n name: 'Scale Down',\n description: 'Slightly shrinks the button when clicked',\n category: 'transform',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'scale',\n type: 'select',\n label: 'Scale Amount',\n default: '0.95',\n options: ['0.90', '0.95', '0.98'],\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options } = ctx;\n const scale = (options.scale as string) || '0.95';\n\n return `\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:active {\n transform: scale(${scale});\n }\n `;\n },\n};\n\n/**\n * Lift on hover (translate up)\n *\n * Moves the button upward on hover, creating a lifting effect.\n */\nexport const liftEffect: EffectPreset = {\n id: 'lift',\n name: 'Lift',\n description: 'Lifts the button upward on hover',\n category: 'transform',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'amount',\n type: 'select',\n label: 'Lift Amount',\n default: '0.5',\n options: ['0.25', '0.5', '1'],\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options } = ctx;\n const amount = (options.amount as string) || '0.5';\n\n return `\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover {\n transform: translateY(-${amount}rem);\n }\n `;\n },\n};\n\n/**\n * Press down on hover (neo-brutalist effect)\n *\n * Translates the button down and right while removing shadow to simulate a physical button press.\n * The translate amount automatically matches the shadow offset, creating a perfect \"press into shadow\" effect.\n * Commonly used with hard shadows in neo-brutalist/Block style designs.\n */\nexport const pressDownEffect: EffectPreset = {\n id: 'press-down',\n name: 'Press Down',\n description: 'Translates button to shadow position and removes shadow on hover',\n category: 'transform',\n pseudoElement: 'none',\n\n generateCSS: (ctx) => {\n const { themeId, variantId, theme } = ctx;\n\n // Use theme shadow configuration\n const shadowConfig = theme.shadow;\n\n // Calculate offset based on shadow elevation and position\n const elevationOffsets = {\n none: 0,\n low: 2,\n medium: 4,\n high: 6,\n } as const;\n\n const offset = elevationOffsets[shadowConfig.elevation];\n const xOffset = (shadowConfig.position || 'bottom') === 'bottom-right' ? offset : 0;\n const yOffset = offset;\n\n return `\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover {\n transform: translate(${xOffset}px, ${yOffset}px);\n box-shadow: none;\n }\n `;\n },\n};\n\n/**\n * Pop effect on hover (scale + tilt)\n *\n * Scales up and tilts the button clockwise for a playful, eye-catching pop effect.\n * Great for energetic, fun designs.\n */\nexport const popEffect: EffectPreset = {\n id: 'pop',\n name: 'Pop',\n description: 'Scales up and tilts the button on hover for a playful pop effect',\n category: 'transform',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'intensity',\n type: 'select',\n label: 'Intensity',\n default: 'medium',\n options: ['subtle', 'medium', 'dramatic'],\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options } = ctx;\n const intensity = (options.intensity as string) || 'medium';\n\n // Define scale and rotation for each intensity level\n const intensityConfig = {\n subtle: { scale: 1.02, rotate: 1 },\n medium: { scale: 1.05, rotate: 2 },\n dramatic: { scale: 1.08, rotate: 3 },\n } as const;\n\n const config = intensityConfig[intensity as keyof typeof intensityConfig] || intensityConfig.medium;\n\n return `\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover {\n transform: scale(${config.scale}) rotate(${config.rotate}deg);\n }\n `;\n },\n};\n","import type { EffectPreset } from '../types';\n\n/**\n * Aurora glow effect\n *\n * Creates a blurred gradient glow behind the button that appears on hover.\n * Uses ::before pseudo-element.\n *\n * This is a persistent effect (should be placed in effects.base) because it sets up\n * the ::before element structure, even though the glow only appears on hover.\n */\nexport const auroraGlowEffect: EffectPreset = {\n id: 'aurora-glow',\n name: 'Aurora Glow',\n description: 'Blurred gradient glow that appears on hover',\n category: 'overlay',\n pseudoElement: 'before',\n\n customizableOption: {\n name: 'intensity',\n type: 'percentage',\n label: 'Glow Intensity',\n default: 75,\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options, tokens, buttonConfig } = ctx;\n\n // Derive gradient colors from button config\n let fromColor: string;\n let toColor: string;\n\n if (buttonConfig.background.type === 'gradient') {\n // Use the button's gradient colors (first and last from stops array)\n const stops = buttonConfig.background.stops;\n fromColor = tokens.getColor(stops[0]);\n toColor = tokens.getColor(stops[stops.length - 1]);\n } else if (buttonConfig.background.type === 'solid') {\n // Create a gradient from the button's color to a lighter shade\n fromColor = tokens.getColor(buttonConfig.background.colorToken);\n const lighterToken = tokens.adjustShade(buttonConfig.background.colorToken, -200);\n toColor = tokens.getColor(lighterToken);\n } else {\n // Transparent background - use primary theme colors\n fromColor = tokens.getColor('primary-500');\n toColor = tokens.getColor('primary-300');\n }\n\n const intensity = ((options.intensity as number) || 75) / 100;\n\n return `\n /* Setup isolation for z-index stacking */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId} {\n position: relative;\n isolation: isolate;\n }\n\n /* Glow layer */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}::before {\n content: '';\n position: absolute;\n inset: -2px;\n background: linear-gradient(to right, ${fromColor}, ${toColor});\n border-radius: inherit;\n filter: blur(8px);\n opacity: 0;\n transition: opacity 1s;\n z-index: -1;\n }\n\n /* Show glow on hover */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover::before {\n opacity: ${intensity};\n }\n `;\n },\n};\n\n/**\n * Cosmic stardust effect\n *\n * Creates a rotating rainbow gradient glow behind the button.\n * Uses ::before pseudo-element with CSS @property animation.\n *\n * This is a persistent effect that is always visible (base opacity 0.5) and\n * intensifies on hover (opacity 1.0).\n */\nexport const cosmicStardustEffect: EffectPreset = {\n id: 'cosmic-stardust',\n name: 'Cosmic Stardust',\n description: 'Rotating rainbow gradient glow (always visible, intensifies on hover)',\n category: 'overlay',\n pseudoElement: 'before',\n\n customizableOption: {\n name: 'speed',\n type: 'select',\n label: 'Animation Speed',\n default: '4s',\n options: ['2s', '4s', '6s', '8s'],\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options } = ctx;\n const speed = (options.speed as string) || '4s';\n\n // Rainbow gradient using theme brand colors\n // Uses primary, secondary, accent from theme\n // CSS variables are stored as RGB channels, so wrap in rgb()\n const colors = [\n 'rgb(var(--tb-primary-400))',\n 'rgb(var(--tb-secondary-500))',\n 'rgb(var(--tb-accent-600))',\n 'rgb(var(--tb-primary-500))',\n ].join(', ');\n\n return `\n /* CSS @property for angle animation */\n @property --angle-${variantId} {\n syntax: '<angle>';\n initial-value: 0deg;\n inherits: false;\n }\n\n /* Keyframe animation for rotating gradient */\n @keyframes rotate-gradient-${variantId} {\n to {\n --angle-${variantId}: 360deg;\n }\n }\n\n /* Setup button for pseudo-element positioning */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId} {\n position: relative;\n }\n\n /* Rotating glow - always visible, behind button */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}::before {\n content: '';\n position: absolute;\n inset: -2px;\n background: linear-gradient(var(--angle-${variantId}), ${colors});\n border-radius: inherit;\n filter: blur(8px);\n opacity: 0.5;\n animation: rotate-gradient-${variantId} ${speed} linear infinite;\n z-index: -1;\n }\n\n /* Intensify glow on hover */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover::before {\n opacity: 1;\n }\n `;\n },\n};\n\n/**\n * Gradient border fill effect\n *\n * Creates a gradient border using a ::before pseudo-element with border-box/padding-box technique.\n * Base state: Button shows interior background color with gradient border visible\n * Hover state: Interior becomes transparent, revealing full gradient (filled appearance)\n *\n * Uses ::before pseudo-element so the main element's background is free for other effects\n * like gradient-text (which needs background-clip: text).\n *\n * Options:\n * - borderWidth: Width of the border in pixels (default: 2)\n * - gradientColors: Comma-separated color tokens for the gradient (optional)\n * - interiorColor: Color token for the button interior in base state (default: neutral-900)\n */\nexport const gradientBorderFillEffect: EffectPreset = {\n id: 'gradient-border-fill',\n name: 'Gradient Border Fill',\n description: 'Gradient border that fills on hover using ::before pseudo-element',\n category: 'overlay',\n pseudoElement: 'before',\n\n customizableOption: {\n name: 'borderWidth',\n type: 'number',\n label: 'Border Width (px)',\n default: 2,\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options, tokens } = ctx;\n const borderWidth = (options.borderWidth as number) || 2;\n\n // Build gradient colors from options or default\n let gradientColors: string;\n if (options.gradientColors && typeof options.gradientColors === 'string') {\n const colorTokens = options.gradientColors.split(',').map((t: string) => t.trim());\n const resolvedColors = colorTokens.map((token: string) => tokens.getColor(token));\n gradientColors = resolvedColors.join(', ');\n } else {\n // Default to primary-secondary-accent gradient\n const primary = tokens.getColor('primary-600');\n const secondary = tokens.getColor('secondary-600');\n const accent = tokens.getColor('accent-600');\n gradientColors = `${primary}, ${secondary}, ${accent}`;\n }\n\n // Interior color for base state\n const interiorColor = options.interiorColor\n ? tokens.getColor(options.interiorColor as string)\n : tokens.getColor('neutral-900');\n\n return `\n /* Setup button for pseudo-element */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId} {\n position: relative;\n border: none !important;\n }\n\n /* Gradient border layer using ::before */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}::before {\n content: '';\n position: absolute;\n inset: 0;\n border: ${borderWidth}px solid transparent;\n border-radius: inherit;\n background:\n linear-gradient(${interiorColor}, ${interiorColor}) padding-box,\n linear-gradient(90deg, ${gradientColors}) border-box;\n z-index: -1;\n }\n\n /* Fill with gradient on hover */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover::before {\n background:\n linear-gradient(transparent, transparent) padding-box,\n linear-gradient(90deg, ${gradientColors}) border-box;\n }\n `;\n },\n};\n\n/**\n * Animated gradient border fill effect\n *\n * Creates a rotating animated gradient border using ::before pseudo-element.\n * Base state: Button shows interior background color with animated gradient border\n * Hover state: Interior becomes transparent, revealing full animated gradient (filled appearance)\n *\n * Combines CSS @property animation with padding-box/border-box technique.\n *\n * Options:\n * - borderWidth: Width of the border in pixels (default: 2)\n * - gradientColors: Comma-separated color tokens for the gradient (optional)\n * - interiorColor: Color token for the button interior in base state (default: neutral-950)\n * - speed: Animation speed (default: '4s')\n */\nexport const animatedGradientBorderFillEffect: EffectPreset = {\n id: 'animated-gradient-border-fill',\n name: 'Animated Gradient Border Fill',\n description: 'Rotating gradient border that fills on hover',\n category: 'overlay',\n pseudoElement: 'before',\n\n customizableOption: {\n name: 'speed',\n type: 'select',\n label: 'Animation Speed',\n default: '4s',\n options: ['2s', '4s', '6s', '8s'],\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options, tokens } = ctx;\n const borderWidth = (options.borderWidth as number) || 2;\n const speed = (options.speed as string) || '4s';\n\n // Build gradient colors from options or default\n let gradientColors: string;\n if (options.gradientColors && typeof options.gradientColors === 'string') {\n const colorTokens = options.gradientColors.split(',').map((t: string) => t.trim());\n const resolvedColors = colorTokens.map((token: string) => tokens.getColor(token));\n gradientColors = resolvedColors.join(', ');\n } else {\n // Default to theme brand color gradient (primary, secondary, accent)\n const primary = tokens.getColor('primary-400');\n const secondary = tokens.getColor('secondary-500');\n const accent = tokens.getColor('accent-600');\n const primaryDark = tokens.getColor('primary-600');\n const accentLight = tokens.getColor('accent-400');\n gradientColors = `${primary}, ${secondary}, ${accent}, ${primaryDark}, ${accentLight}`;\n }\n\n // Interior color for base state\n const interiorColor = options.interiorColor\n ? tokens.getColor(options.interiorColor as string)\n : tokens.getColor('neutral-950');\n\n return `\n /* CSS @property for angle animation */\n @property --angle-${variantId} {\n syntax: '<angle>';\n initial-value: 0deg;\n inherits: false;\n }\n\n /* Keyframe animation for rotating gradient */\n @keyframes rotate-gradient-border-${variantId} {\n to {\n --angle-${variantId}: 360deg;\n }\n }\n\n /* Setup button for pseudo-element */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId} {\n position: relative;\n border: none !important;\n }\n\n /* Animated gradient border layer using ::before */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}::before {\n content: '';\n position: absolute;\n inset: 0;\n border: ${borderWidth}px solid transparent;\n border-radius: inherit;\n background:\n linear-gradient(${interiorColor}, ${interiorColor}) padding-box,\n linear-gradient(var(--angle-${variantId}), ${gradientColors}) border-box;\n animation: rotate-gradient-border-${variantId} ${speed} linear infinite;\n z-index: -1;\n }\n\n /* Fill with gradient on hover */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover::before {\n background:\n linear-gradient(transparent, transparent) padding-box,\n linear-gradient(var(--angle-${variantId}), ${gradientColors}) border-box;\n }\n `;\n },\n};\n\n/**\n * Border bottom grow effect\n *\n * Creates an animated underline that grows from one side on hover.\n * Uses ::after pseudo-element positioned at the bottom of the button.\n *\n * Options:\n * - colorToken: Color token for the border (default: neutral-400)\n * - height: Height of the border in pixels (default: 1)\n * - origin: Transform origin - 'left', 'center', or 'right' (default: left)\n */\nexport const borderBottomGrowEffect: EffectPreset = {\n id: 'border-bottom-grow',\n name: 'Border Bottom Grow',\n description: 'Animated underline that grows on hover',\n category: 'overlay',\n pseudoElement: 'after',\n\n customizableOption: {\n name: 'height',\n type: 'number',\n label: 'Border Height (px)',\n default: 1,\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options, tokens } = ctx;\n const height = (options.height as number) || 1;\n const colorToken = (options.colorToken as string) || 'neutral-400';\n const origin = (options.origin as string) || 'left';\n\n const color = tokens.getColor(colorToken);\n\n return `\n /* Setup button for pseudo-element */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId} {\n position: relative;\n }\n\n /* Bottom border using ::after */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}::after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: ${height}px;\n background: ${color};\n transform: scaleX(0);\n transform-origin: ${origin};\n transition: transform 300ms ease-in-out;\n }\n\n /* Grow border on hover */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover::after {\n transform: scaleX(1);\n }\n `;\n },\n};\n","import type { EffectPreset } from '../types';\n\n/**\n * Gradient text effect\n *\n * Applies a gradient to text using background-clip: text.\n * The gradient can use button's gradient colors or theme colors.\n *\n * Options:\n * - solidOnHover: If true, text becomes solid white on hover (default: false)\n */\nexport const gradientTextEffect: EffectPreset = {\n id: 'gradient-text',\n name: 'Gradient Text',\n description: 'Gradient text using background-clip',\n category: 'text',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'solidOnHover',\n type: 'select',\n label: 'Hover Behavior',\n default: 'false',\n options: ['false', 'true'],\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options, tokens, buttonConfig } = ctx;\n const solidOnHover = options.solidOnHover === 'true' || options.solidOnHover === true;\n\n // Build gradient colors from options or defaults\n let gradientColors: string;\n\n // Check if gradient colors are specified in options (comma-separated color tokens)\n if (options.gradientColors && typeof options.gradientColors === 'string') {\n // Parse comma-separated color tokens\n const colorTokens = options.gradientColors.split(',').map((t: string) => t.trim());\n const resolvedColors = colorTokens.map((token: string) => tokens.getColor(token));\n gradientColors = resolvedColors.join(', ');\n } else if (buttonConfig.background.type === 'gradient') {\n // Fall back to button's gradient colors if no gradientColors option\n const stops = buttonConfig.background.stops;\n const resolvedColors = stops.map((stop: string) => tokens.getColor(stop));\n gradientColors = resolvedColors.join(', ');\n } else {\n // Default to primary-secondary-accent gradient (theme brand colors)\n const primary = tokens.getColor('primary-400');\n const secondary = tokens.getColor('secondary-400');\n const accent = tokens.getColor('accent-400');\n gradientColors = `${primary}, ${secondary}, ${accent}`;\n }\n\n let css = `\n /* Gradient text */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId} {\n background: linear-gradient(90deg, ${gradientColors});\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n }\n `;\n\n // On hover, switch to solid text\n if (solidOnHover) {\n css += `\n /* Solid text on hover */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover {\n -webkit-text-fill-color: rgb(var(--tb-neutral-50));\n }\n `;\n }\n\n return css;\n },\n};\n\n/**\n * Text color change on hover\n *\n * Changes text color on hover. Useful for simple ghost/text buttons.\n *\n * Options:\n * - hoverColorToken: Color token for hover state (default: white)\n */\nexport const textColorChangeEffect: EffectPreset = {\n id: 'text-color-change',\n name: 'Text Color Change',\n description: 'Changes text color on hover',\n category: 'text',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'hoverColorToken',\n type: 'select',\n label: 'Hover Text Color',\n default: 'neutral-50',\n options: ['neutral-50', 'neutral-100', 'neutral-200', 'neutral-300', 'primary-400'],\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options, tokens } = ctx;\n const hoverColorToken = (options.hoverColorToken as string) || 'neutral-50';\n const hoverColor = tokens.getColor(hoverColorToken);\n\n return `\n /* Change text color on hover */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover {\n color: ${hoverColor};\n }\n `;\n },\n};\n","import type { EffectPreset } from '../types';\n\n/**\n * Border color change on hover\n *\n * Changes the border color on hover. Useful for outline/bordered buttons.\n */\nexport const borderColorChangeEffect: EffectPreset = {\n id: 'border-color-change',\n name: 'Border Color Change',\n description: 'Changes border color on hover',\n category: 'border',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'hoverColorToken',\n type: 'select',\n label: 'Hover Border Color',\n default: 'neutral-200',\n options: ['neutral-200', 'neutral-300', 'neutral-400', 'primary-400', 'neutral-50'],\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options, tokens } = ctx;\n const hoverColorToken = (options.hoverColorToken as string) || 'neutral-200';\n const hoverColor = tokens.getColor(hoverColorToken);\n\n return `\n /* Change border color on hover */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover {\n border-color: ${hoverColor};\n }\n `;\n },\n};\n\n/**\n * Sketchy/hand-drawn border effect\n *\n * Creates an imperfect, hand-drawn appearance using multiple shadows,\n * filters, and slight rotation to simulate hand-drawn lines.\n */\nexport const sketchyBorderEffect: EffectPreset = {\n id: 'sketchy-border',\n name: 'Sketchy Border',\n description: 'Hand-drawn style with imperfect edges',\n category: 'border',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'intensity',\n type: 'select',\n label: 'Sketch Intensity',\n default: 'medium',\n options: ['subtle', 'medium', 'strong'],\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options } = ctx;\n const intensity = (options.intensity as string) || 'medium';\n\n // Different rotation and skew values for varying intensities\n const transforms = {\n subtle: 'rotate(-0.5deg)',\n medium: 'rotate(-1deg)',\n strong: 'rotate(-1.5deg)',\n };\n\n const hoverTransforms = {\n subtle: 'rotate(0.5deg)',\n medium: 'rotate(1deg)',\n strong: 'rotate(1.5deg)',\n };\n\n return `\n /* Hand-drawn/sketchy appearance */\n :where([data-theme-scope=\"${themeId}\"]) .${variantId} {\n transform: ${transforms[intensity as keyof typeof transforms]};\n filter: contrast(0.95) brightness(1.02);\n transition: transform 0.2s ease, filter 0.2s ease;\n }\n\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:hover {\n transform: ${hoverTransforms[intensity as keyof typeof hoverTransforms]} scale(1.02);\n filter: contrast(1) brightness(1);\n }\n\n :where([data-theme-scope=\"${themeId}\"]) .${variantId}:active {\n transform: rotate(0deg) scale(0.98);\n }\n `;\n },\n};\n","import type { EffectPreset } from '../types';\n\n/**\n * Pulse animation\n *\n * Adds a continuous pulse animation (opacity fade in/out).\n * Perfect for call-to-action or \"press start\" style buttons.\n */\nexport const pulseAnimationEffect: EffectPreset = {\n id: 'pulse-animation',\n name: 'Pulse Animation',\n description: 'Continuous pulse animation (opacity fade)',\n category: 'animation',\n pseudoElement: 'none',\n\n customizableOption: {\n name: 'speed',\n type: 'select',\n label: 'Animation Speed',\n default: '2s',\n options: ['1s', '2s', '3s', '4s'],\n },\n\n generateCSS: (ctx) => {\n const { themeId, variantId, options } = ctx;\n const speed = (options.speed as string) || '2s';\n\n return `\n /* Pulse animation */\n @keyframes pulse-${variantId} {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n }\n\n :where([data-theme-scope=\"${themeId}\"]) .${variantId} {\n animation: pulse-${variantId} ${speed} cubic-bezier(0.4, 0, 0.6, 1) infinite;\n }\n `;\n },\n};\n","import type { EffectPreset } from './types';\nimport { darkenBackgroundEffect, lightenBackgroundEffect, fadeBackgroundEffect, opacityReduceEffect, animatedGradientEffect, backgroundOnHoverEffect, backgroundOnHoverAlphaEffect } from './presets/background';\nimport { borderGlowEffect, dropShadowEffect, innerShadowEffect, neumorphicShadowEffect, outerGlowEffect, retro3DShadowEffect } from './presets/shadow';\nimport { scaleUpEffect, scaleDownEffect, liftEffect, pressDownEffect, popEffect } from './presets/transform';\nimport { auroraGlowEffect, cosmicStardustEffect, gradientBorderFillEffect, animatedGradientBorderFillEffect, borderBottomGrowEffect } from './presets/overlay';\nimport { gradientTextEffect, textColorChangeEffect } from './presets/text';\nimport { borderColorChangeEffect, sketchyBorderEffect } from './presets/border';\nimport { pulseAnimationEffect } from './presets/animation';\n\n/**\n * Registry of all available effect presets\n */\nexport const EFFECT_PRESETS: EffectPreset[] = [\n // Background effects\n darkenBackgroundEffect,\n lightenBackgroundEffect,\n fadeBackgroundEffect,\n opacityReduceEffect,\n animatedGradientEffect,\n backgroundOnHoverEffect,\n backgroundOnHoverAlphaEffect,\n\n // Shadow effects\n borderGlowEffect,\n dropShadowEffect,\n innerShadowEffect,\n neumorphicShadowEffect,\n outerGlowEffect,\n retro3DShadowEffect,\n\n // Transform effects\n scaleUpEffect,\n scaleDownEffect,\n liftEffect,\n pressDownEffect,\n popEffect,\n\n // Overlay effects\n auroraGlowEffect,\n cosmicStardustEffect,\n gradientBorderFillEffect,\n animatedGradientBorderFillEffect,\n borderBottomGrowEffect,\n\n // Text effects\n gradientTextEffect,\n textColorChangeEffect,\n\n // Border effects\n borderColorChangeEffect,\n sketchyBorderEffect,\n\n // Animation effects\n pulseAnimationEffect,\n];\n\n/**\n * Get an effect preset by ID\n *\n * @param id - Effect preset ID\n * @returns Effect preset or undefined if not found\n */\nexport function getEffectPreset(id: string): EffectPreset | undefined {\n return EFFECT_PRESETS.find((preset) => preset.id === id);\n}\n\n/**\n * Get all effect presets in a category\n *\n * @param category - Effect category\n * @returns Array of effect presets in that category\n */\nexport function getEffectPresetsByCategory(category: string): EffectPreset[] {\n return EFFECT_PRESETS.filter((preset) => preset.category === category);\n}\n\n/**\n * Get all effect presets (for UI selection)\n *\n * @returns Array of all effect presets\n */\nexport function getAllEffectPresets(): EffectPreset[] {\n return EFFECT_PRESETS;\n}\n","import type { Theme } from '../schema';\n\n/**\n * Resolves theme tokens to CSS variables\n *\n * This resolver ensures all button styles use theme tokens (not hardcoded colors)\n * so that changing the palette automatically updates all buttons.\n */\nexport class TokenResolver {\n constructor(private theme: Theme) {}\n\n /**\n * Resolve a color token to a CSS variable reference wrapped in rgb()\n *\n * @param token - Token name (e.g., 'primary-500', 'white', 'text-900')\n * @returns CSS rgb() function with var reference (e.g., 'rgb(var(--tb-primary-500))')\n *\n * Note: CSS variables are stored as RGB channels (e.g., \"37 99 235\") following Tailwind convention,\n * so we must wrap them with rgb() to create a valid color value.\n *\n * @example\n * resolver.getColor('primary-500') // => 'rgb(var(--tb-primary-500))'\n * resolver.getColor('white') // => 'rgb(var(--tb-white))'\n */\n getColor(token: string): string {\n // Log warning if token doesn't exist in theme palette\n if (!this.tokenExists(token)) {\n console.warn(\n `[TokenResolver] Color token \"${token}\" not found in theme palette. Button may render incorrectly.`\n );\n }\n\n return `rgb(var(--tb-${token}))`;\n }\n\n /**\n * Adjust a color token's shade by a given amount\n *\n * @param token - Base token (e.g., 'primary-500')\n * @param amount - Shade adjustment (+100 = darker, -100 = lighter)\n * @returns Adjusted token name (e.g., 'primary-600')\n *\n * @example\n * resolver.adjustShade('primary-500', 100) // => 'primary-600' (darker)\n * resolver.adjustShade('primary-500', -100) // => 'primary-400' (lighter)\n */\n adjustShade(token: string, amount: number): string {\n // Parse token (e.g., 'primary-500' → ['primary', '500'])\n const parts = token.split('-');\n\n if (parts.length < 2) {\n // No shade specified, assume 500\n const newShade = Math.max(100, Math.min(900, 500 + amount));\n return `${token}-${newShade}`;\n }\n\n const base = parts.slice(0, -1).join('-');\n const shade = parseInt(parts[parts.length - 1], 10);\n\n if (isNaN(shade)) {\n // Not a shade token (e.g., 'white'), return as-is\n console.warn(\n `[TokenResolver] Cannot adjust shade for non-shade token \"${token}\". Returning original token.`\n );\n return token;\n }\n\n // Adjust shade, clamping to 100-900 range\n const newShade = Math.max(100, Math.min(900, shade + amount));\n return `${base}-${newShade}`;\n }\n\n /**\n * Check if a token exists in the theme palette\n *\n * @param token - Token name to check\n * @returns True if token exists in theme\n */\n private tokenExists(token: string): boolean {\n // For now, we'll assume tokens exist if they follow standard patterns\n // In the future, this could validate against theme.palette\n\n // Common non-shade tokens that should always exist\n const commonTokens = ['white', 'black', 'transparent'];\n if (commonTokens.includes(token)) {\n return true;\n }\n\n // Check if it's a shade token (e.g., 'primary-500', 'gray-800')\n const parts = token.split('-');\n if (parts.length >= 2) {\n const lastPart = parts[parts.length - 1];\n const shade = parseInt(lastPart, 10);\n if (!isNaN(shade) && shade >= 100 && shade <= 900 && shade % 100 === 0) {\n return true; // Valid shade token format\n }\n }\n\n // Could add validation against theme.palette here\n // For now, assume it exists\n return true;\n }\n}\n","import type { GradientDirection } from './types'\n\n/**\n * Shared constants for button CSS generation\n *\n * These mappings convert Tailwind-style tokens to actual CSS values.\n * Centralized here to eliminate duplication across multiple files.\n */\n\n/**\n * Map Tailwind-style gradient direction tokens to CSS gradient directions\n */\nexport const GRADIENT_DIRECTION_MAP: Record<GradientDirection, string> = {\n 'to-r': 'to right',\n 'to-l': 'to left',\n 'to-t': 'to top',\n 'to-b': 'to bottom',\n 'to-br': 'to bottom right',\n 'to-bl': 'to bottom left',\n 'to-tr': 'to top right',\n 'to-tl': 'to top left',\n}\n\n/**\n * Map Tailwind border-radius tokens to CSS values\n */\nexport const BORDER_RADIUS_MAP: Record<string, string> = {\n 'rounded-none': '0',\n 'rounded-sm': '0.125rem',\n 'rounded': '0.25rem',\n 'rounded-md': '0.375rem',\n 'rounded-lg': '0.5rem',\n 'rounded-xl': '0.75rem',\n 'rounded-2xl': '1rem',\n 'rounded-3xl': '1.5rem',\n 'rounded-full': '9999px',\n}\n\n/**\n * Generate shadow CSS value dynamically based on elevation, softness, and position\n *\n * This replaces the static shadow maps with a single dynamic function.\n * Benefits: single source of truth, easy to adjust algorithm, no redundancy.\n *\n * @param elevation - Shadow elevation level\n * @param softness - Shadow softness/blur style\n * @param position - Shadow position (bottom or bottom-right diagonal)\n * @returns CSS box-shadow value\n */\nexport function generateShadowValue(\n elevation: 'none' | 'low' | 'medium' | 'high',\n softness: 'crisp' | 'soft' | 'hard' | null,\n position: 'bottom' | 'bottom-right' = 'bottom'\n): string {\n if (elevation === 'none') return 'none'\n\n // Define base offset and blur per elevation level\n const elevationConfig = {\n low: { offset: 2, blur: 4, spread: 0 },\n medium: { offset: 4, blur: 8, spread: -1 },\n high: { offset: 6, blur: 12, spread: -2 },\n }\n\n const config = elevationConfig[elevation]\n\n // Calculate x and y offsets based on position\n const xOffset = position === 'bottom-right' ? config.offset : 0\n const yOffset = config.offset\n\n // Adjust based on softness\n switch (softness) {\n case 'hard':\n // Zero blur, opacity 1.0 for flat, hard-edged shadows\n return `${xOffset}px ${yOffset}px 0 0 rgb(0 0 0 / 1)`\n\n case 'crisp':\n // Minimal blur, higher opacity for sharp shadows\n return `${xOffset}px ${yOffset}px ${config.offset}px ${config.spread}px rgb(0 0 0 / 0.4)`\n\n case 'soft':\n default:\n // Large blur, moderate opacity for diffused shadows\n return `${xOffset}px ${yOffset}px ${config.blur}px ${config.spread}px rgb(0 0 0 / 0.3)`\n }\n}\n\n/**\n * Map Tailwind border-width tokens to CSS values\n */\nexport const BORDER_WIDTH_MAP: Record<string, string> = {\n 'border-0': '0px',\n 'border': '1px',\n 'border-2': '2px',\n 'border-4': '4px',\n 'border-8': '8px',\n}\n\n/**\n * Map Tailwind font-size tokens to CSS values\n */\nexport const FONT_SIZE_MAP: Record<string, string> = {\n 'text-xs': '0.75rem',\n 'text-sm': '0.875rem',\n 'text-base': '1rem',\n 'text-lg': '1.125rem',\n 'text-xl': '1.25rem',\n 'text-2xl': '1.5rem',\n}\n","import type { Theme } from '../../schema'\n\n/**\n * Convert hex color to RGB values\n */\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex)\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : null\n}\n\n/**\n * Calculate relative luminance of a color\n * https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\nfunction getLuminance(r: number, g: number, b: number): number {\n const [rs, gs, bs] = [r, g, b].map((c) => {\n const sRGB = c / 255\n return sRGB <= 0.03928 ? sRGB / 12.92 : Math.pow((sRGB + 0.055) / 1.055, 2.4)\n })\n return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs\n}\n\n/**\n * Calculate contrast ratio between two colors\n * https://www.w3.org/TR/WCAG20/#contrast-ratiodef\n *\n * Returns a ratio from 1:1 (no contrast) to 21:1 (maximum contrast)\n * WCAG AA requires 4.5:1 for normal text, 3:1 for large text\n */\nexport function getContrastRatio(hex1: string, hex2: string): number {\n const rgb1 = hexToRgb(hex1)\n const rgb2 = hexToRgb(hex2)\n\n if (!rgb1 || !rgb2) {\n return 0\n }\n\n const lum1 = getLuminance(rgb1.r, rgb1.g, rgb1.b)\n const lum2 = getLuminance(rgb2.r, rgb2.g, rgb2.b)\n\n const lighter = Math.max(lum1, lum2)\n const darker = Math.min(lum1, lum2)\n\n return (lighter + 0.05) / (darker + 0.05)\n}\n\n/**\n * Check if contrast ratio meets WCAG AA standard (4.5:1)\n */\nexport function hasGoodContrast(hex1: string, hex2: string): boolean {\n return getContrastRatio(hex1, hex2) >= 4.5\n}\n\n/**\n * Get a color token from the theme palette by name\n * Returns the hex value or null if not found\n */\nfunction getColorHexFromTheme(theme: Theme, tokenName: string): string | null {\n // Check direct palette colors\n const color = theme.palette.colors.find((c) => c.name === tokenName)\n if (color) {\n return color.hex\n }\n\n // Handle special cases\n if (tokenName === 'white') return '#ffffff'\n if (tokenName === 'black') return '#000000'\n\n // For now, return null for shade tokens (e.g., 'primary-500', 'text-900')\n // These would need to be resolved from the expanded palette\n // which isn't available at the time we're generating default buttons\n return null\n}\n\n/**\n * Select appropriate text color based on background color and theme mode\n *\n * Logic:\n * - Light theme: Try white → text color → black\n * - Dark theme: Try background → text color → white\n *\n * Returns the color token name that has sufficient contrast\n */\nexport function selectTextColorToken(\n backgroundHex: string,\n theme: Theme,\n isLightTheme: boolean\n): string {\n const candidates = isLightTheme\n ? ['white', 'text', 'black']\n : ['background', 'text', 'white']\n\n for (const candidate of candidates) {\n const candidateHex = getColorHexFromTheme(theme, candidate)\n\n // If we can't resolve the hex, skip this candidate\n if (!candidateHex) continue\n\n if (hasGoodContrast(backgroundHex, candidateHex)) {\n return candidate\n }\n }\n\n // Fallback to last option if nothing has good contrast\n return candidates[candidates.length - 1]\n}\n\n/**\n * Get contrasting text color for a button background\n *\n * This function returns theme-aware text colors using the neutral scale,\n * which is guaranteed to exist in every theme and harmonizes with the design.\n *\n * Uses neutral-50 (lightest) for dark backgrounds and neutral-950 (darkest)\n * for light backgrounds. This ensures excellent contrast while respecting\n * the theme's neutral palette (warm/cool tinting).\n *\n * For solid backgrounds with primary/secondary/neutral colors:\n * - Dark backgrounds (shade >= 500): neutral-50 (very light)\n * - Light backgrounds (shade < 500): neutral-950 (very dark)\n */\nexport function getContrastingTextColorToken(\n backgroundToken: string,\n theme: Theme\n): string {\n const isLightTheme = theme.palette.meta.mode === 'light'\n\n // For common background tokens, return sensible defaults\n if (backgroundToken.startsWith('primary-') || backgroundToken.startsWith('secondary-')) {\n // Primary/secondary colors are usually vivid, so lightest neutral works well\n return 'neutral-50'\n }\n\n if (backgroundToken.startsWith('neutral-')) {\n // Neutral colors depend on shade\n const match = backgroundToken.match(/neutral-(\\d+)/)\n if (match) {\n const shade = parseInt(match[1], 10)\n // 500 is the middle - darker than 500 needs light text, lighter needs dark text\n return shade >= 500 ? 'neutral-50' : 'neutral-950'\n }\n }\n\n // Default fallback based on theme mode\n return isLightTheme ? 'neutral-50' : 'neutral-950'\n}\n","import type { Theme, Corners } from '../schema'\nimport type { ButtonSystem, ButtonVariant } from './types'\nimport { getContrastingTextColorToken } from './utils/contrast'\n\n/**\n * Map theme corners to border-radius tokens\n */\nconst CORNERS_TO_RADIUS_MAP: Record<Corners, string> = {\n square: 'rounded-none', // 0px - sharp corners\n soft: 'rounded-md', // 6px - subtle rounding\n rounded: 'rounded-md', // 6px - standard rounded (same as soft for buttons)\n pill: 'rounded-full', // 9999px - full pill shape\n}\n\n/**\n * Map border width to border width class\n */\nconst BORDER_WIDTH_TO_CLASS_MAP: Record<string, string> = {\n none: 'border-0', // 0px\n hairline: 'border', // 1px - barely visible\n thin: 'border', // 1px - standard thin border\n thick: 'border-4', // 4px - clearly thick\n}\n\n/**\n * Map motion level to transition duration (milliseconds)\n * Used in effect generation\n */\nexport const MOTION_TO_DURATION_MAP: Record<string, string> = {\n off: '0ms',\n low: '150ms',\n medium: '200ms',\n high: '300ms',\n}\n\n/**\n * Map motion easing to CSS easing function\n */\nexport const MOTION_TO_EASING_MAP: Record<string, string> = {\n standard: 'ease-in-out',\n snappy: 'cubic-bezier(0.4, 0, 0.2, 1)',\n gentle: 'cubic-bezier(0.25, 0.1, 0.25, 1)',\n}\n\n/**\n * Generate default button system from theme settings\n *\n * Creates 4 standard button variants when theme.buttons is not defined:\n * 1. Primary - primary color background with opacity-reduce hover effect\n * 2. Secondary - neutral-700 background with opacity-reduce hover effect\n * 3. Outline - transparent background with primary border and opacity-reduce hover effect\n * 4. Ghost - transparent background, no border, with opacity-reduce hover effect\n *\n * All variants use theme settings for:\n * - Border radius (from theme.components.button.shape / theme.corners)\n * - Shadow (from theme.shadow.elevation)\n * - Border width for outline (from theme.border.width)\n * - Transitions (from theme.motion)\n *\n * @param theme - Theme configuration\n * @returns ButtonSystem with 4 default variants\n */\nexport function generateDefaultButtonSystem(theme: Theme): ButtonSystem {\n // Extract theme settings\n // Use theme.corners (global setting) for default buttons, not components.button.shape\n // This ensures default buttons respect the overall theme aesthetic\n const borderRadius = CORNERS_TO_RADIUS_MAP[theme.corners] || 'rounded-lg'\n const borderWidthClass = BORDER_WIDTH_TO_CLASS_MAP[theme.border.width] || 'border-2'\n\n const variants: ButtonVariant[] = []\n\n // 1. Primary button\n const primaryVariant: ButtonVariant = {\n id: 'primary',\n name: 'Primary',\n enabled: true,\n priority: 1,\n background: {\n type: 'solid',\n colorToken: 'primary-500',\n },\n textColorToken: getContrastingTextColorToken('primary-500', theme),\n borderRadius,\n // Inherits shadow from theme\n effects: {\n hover: [\n {\n effectId: 'opacity-reduce',\n options: { reduction: 15 },\n },\n ],\n },\n }\n variants.push(primaryVariant)\n\n // 2. Secondary button\n // Use neutral-700 as fallback if secondary doesn't exist\n const secondaryVariant: ButtonVariant = {\n id: 'secondary',\n name: 'Secondary',\n enabled: true,\n priority: 2,\n background: {\n type: 'solid',\n colorToken: 'neutral-700',\n },\n textColorToken: getContrastingTextColorToken('neutral-700', theme),\n borderRadius,\n // Inherits shadow from theme\n effects: {\n hover: [\n {\n effectId: 'opacity-reduce',\n options: { reduction: 15 },\n },\n ],\n },\n }\n variants.push(secondaryVariant)\n\n // 3. Outline button\n const outlineVariant: ButtonVariant = {\n id: 'outline',\n name: 'Outline',\n enabled: true,\n priority: 3,\n background: {\n type: 'transparent',\n },\n textColorToken: 'primary-600',\n borderRadius,\n shadow: { elevation: 'none', softness: null, position: 'bottom' }, // Outline buttons typically don't have shadows\n border: {\n colorToken: 'primary-500',\n widthClass: borderWidthClass,\n },\n effects: {\n hover: [\n {\n effectId: 'opacity-reduce',\n options: { reduction: 15 },\n },\n ],\n },\n }\n variants.push(outlineVariant)\n\n // 4. Ghost button\n const ghostVariant: ButtonVariant = {\n id: 'ghost',\n name: 'Ghost',\n enabled: true,\n priority: 3,\n background: {\n type: 'transparent',\n },\n textColorToken: 'primary-600',\n borderRadius,\n shadow: { elevation: 'none', softness: null, position: 'bottom' }, // Ghost buttons have no shadow\n // No border for ghost buttons\n effects: {\n hover: [\n {\n effectId: 'opacity-reduce',\n options: { reduction: 15 },\n },\n ],\n },\n }\n variants.push(ghostVariant)\n\n return {\n global: {\n // Use global theme.corners, not components.button.shape\n cornerStyle: theme.corners as 'square' | 'rounded' | 'pill',\n shadow: theme.shadow.elevation as 'none' | 'low' | 'medium' | 'high',\n textTransform: 'none',\n fontWeight: 500,\n borderWidth: theme.border.width === 'none' ? 1 : theme.border.width === 'thick' ? 3 : 2,\n hoverTransform: 'none',\n hoverColor: 'none',\n },\n variants,\n }\n}\n","import type { Theme } from '../schema'\nimport type { ButtonSystem, ButtonVariant, ButtonGlobalSettings, ButtonSizes, ButtonSizeName } from './types'\nimport type { StateGroup, EffectContext } from './effects/types'\nimport { getEffectPreset } from './effects/registry'\nimport { TokenResolver } from '../tokens/resolver'\nimport {\n GRADIENT_DIRECTION_MAP,\n BORDER_RADIUS_MAP,\n generateShadowValue,\n BORDER_WIDTH_MAP,\n FONT_SIZE_MAP,\n} from './constants'\nimport { generateDefaultButtonSystem } from './generateDefaultButtonSystem'\nimport type { ShadowSize, Shadow } from './types'\n\n/**\n * Default button sizes when not specified in theme\n */\nconst DEFAULT_BUTTON_SIZES: ButtonSizes = {\n sm: { padding: '0.375rem 0.75rem', fontSize: 'text-sm' },\n md: { padding: '0.5rem 1rem' },\n lg: { padding: '0.75rem 1.5rem', fontSize: 'text-lg' },\n}\n\n/**\n * Convert legacy ShadowSize to Shadow object\n *\n * Global settings use ShadowSize ('none' | 'low' | 'medium' | 'high')\n * but the CSS generator needs Shadow objects with { elevation, softness, position }\n *\n * Uses the elevation from the size, but preserves softness and position from the theme\n */\nfunction shadowSizeToShadow(size: ShadowSize, theme: Theme): Shadow {\n const elevationMap: Record<ShadowSize, Shadow['elevation']> = {\n 'none': 'none',\n 'low': 'low',\n 'medium': 'medium',\n 'high': 'high',\n }\n\n return {\n elevation: elevationMap[size],\n softness: theme.shadow.softness,\n position: theme.shadow.position,\n }\n}\n\n/**\n * Structural base styles for all buttons\n * These can be moved to ButtonGlobalSettings in the future if per-theme customization is needed\n */\nconst STRUCTURAL_BASE_STYLES = {\n padding: '0.5rem 1rem',\n fontWeight: 500,\n cursor: 'pointer',\n transition: 'all 200ms ease-in-out',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n} as const\n\n/**\n * Generate complete CSS for button system from theme config\n *\n * This function:\n * 1. Reads button variants from theme.buttons\n * 2. Generates CSS for each variant\n * 3. Returns scoped CSS string\n *\n * Runs SERVER-SIDE during theme loading.\n * NOTE: Renderer only knows about theme config, NOT presets.\n */\nexport interface GenerateButtonCssOptions {\n themeId: string\n theme: Theme\n buttonSystem?: ButtonSystem\n}\n\nexport function generateButtonCss(options: GenerateButtonCssOptions): string {\n const { themeId, theme, buttonSystem: providedButtonSystem } = options\n const tokens = new TokenResolver(theme)\n\n // Use provided button system, or generate defaults from theme\n const buttonSystem = providedButtonSystem ?? generateDefaultButtonSystem(theme)\n\n const cssChunks: string[] = []\n\n for (const variant of buttonSystem.variants) {\n if (!variant.enabled) continue\n\n // Generate base variant CSS (background, colors, shape)\n const baseCSS = generateVariantBaseCSS(variant, buttonSystem.global, themeId, tokens, theme)\n cssChunks.push(baseCSS)\n\n // Generate effect CSS for each state group\n const effectCSS = generateVariantEffectCSS(variant, themeId, tokens, theme)\n if (effectCSS) {\n cssChunks.push(effectCSS)\n }\n\n // Generate disabled state CSS\n const disabledCSS = generateDisabledCSS(variant, themeId)\n cssChunks.push(disabledCSS)\n }\n\n // Generate button size classes\n const sizesCSS = generateButtonSizeCSS(themeId, buttonSystem.sizes)\n if (sizesCSS) {\n cssChunks.push(sizesCSS)\n }\n\n return cssChunks.filter(Boolean).join('\\n\\n')\n}\n\n/**\n * Generate base CSS for a button variant\n *\n * Generates all styles (colors, structure, transitions) in pure CSS.\n * No Tailwind utility classes needed - everything is in the generated CSS.\n */\nfunction generateVariantBaseCSS(\n variant: ButtonVariant,\n global: ButtonGlobalSettings,\n themeId: string,\n tokens: TokenResolver,\n theme: Theme\n): string {\n // Wrap scope selector in :where() for zero specificity\n const selector = `:where([data-theme-scope=\"${themeId}\"]) .${variant.id}`\n const rules: string[] = []\n\n // Calculate padding adjustment for borders\n // If button has a border, reduce padding by border width to keep consistent button size\n const borderWidth = variant.border ? (BORDER_WIDTH_MAP[variant.border.widthClass] || '1px') : '0px'\n const hasBorder = borderWidth !== '0px'\n\n // Structural base styles (always applied)\n // Use variant padding if provided, otherwise default\n const padding = variant.padding || STRUCTURAL_BASE_STYLES.padding\n // Parse padding shorthand (e.g., \"0.5rem 1rem\" -> top/bottom: 0.5rem, left/right: 1rem)\n // and adjust if border is present to maintain consistent size\n const paddingParts = padding.split(' ')\n const verticalPadding = paddingParts[0] || '0.5rem'\n const horizontalPadding = paddingParts[1] || paddingParts[0] || '1rem'\n\n if (hasBorder) {\n // Use longhand properties with calc to subtract border width\n // Add extra 1px optical compensation on vertical padding to balance visual weight of border\n rules.push(`padding-top: calc(${verticalPadding} - ${borderWidth} - 1px);`)\n rules.push(`padding-bottom: calc(${verticalPadding} - ${borderWidth} - 1px);`)\n rules.push(`padding-left: calc(${horizontalPadding} - ${borderWidth});`)\n rules.push(`padding-right: calc(${horizontalPadding} - ${borderWidth});`)\n } else {\n // Use shorthand for cleaner CSS\n rules.push(`padding: ${padding};`)\n }\n // Font weight (use global setting as default)\n rules.push(`font-weight: ${global.fontWeight};`)\n\n // Font size (if variant specifies it)\n if (variant.fontSize) {\n const fontSize = FONT_SIZE_MAP[variant.fontSize] || '1rem'\n rules.push(`font-size: ${fontSize};`)\n }\n\n // Text transform (from global settings)\n if (global.textTransform !== 'none') {\n rules.push(`text-transform: ${global.textTransform};`)\n }\n\n rules.push(`cursor: ${STRUCTURAL_BASE_STYLES.cursor};`)\n rules.push(`transition: ${STRUCTURAL_BASE_STYLES.transition};`)\n rules.push(`display: ${STRUCTURAL_BASE_STYLES.display};`)\n rules.push(`align-items: ${STRUCTURAL_BASE_STYLES.alignItems};`)\n rules.push(`justify-content: ${STRUCTURAL_BASE_STYLES.justifyContent};`)\n\n // Border radius (from variant config, with fallback to global cornerStyle)\n let borderRadius: string\n if (variant.borderRadius) {\n borderRadius = BORDER_RADIUS_MAP[variant.borderRadius] || BORDER_RADIUS_MAP['rounded']\n } else {\n // Fallback to global cornerStyle\n const cornerStyleMap: Record<string, string> = {\n 'square': 'rounded-none',\n 'rounded': 'rounded-md',\n 'pill': 'rounded-full',\n }\n const fallbackRadius = cornerStyleMap[global.cornerStyle] || 'rounded-md'\n borderRadius = BORDER_RADIUS_MAP[fallbackRadius] || BORDER_RADIUS_MAP['rounded']\n }\n rules.push(`border-radius: ${borderRadius};`)\n\n // Shadow fallback hierarchy: variant.shadow -> global.shadow -> theme.shadow\n const shadowConfig = variant.shadow || shadowSizeToShadow(global.shadow, theme) || theme.shadow\n const shadow = generateShadowValue(\n shadowConfig.elevation,\n shadowConfig.softness,\n shadowConfig.position || 'bottom'\n )\n rules.push(`box-shadow: ${shadow};`)\n\n // Background\n if (variant.background.type === 'solid') {\n const bgColor = tokens.getColor(variant.background.colorToken)\n rules.push(`background-color: ${bgColor};`)\n } else if (variant.background.type === 'gradient') {\n const colors = variant.background.stops.map((stop) => tokens.getColor(stop)).join(', ')\n const direction = GRADIENT_DIRECTION_MAP[variant.background.direction] || 'to right'\n rules.push(`background-image: linear-gradient(${direction}, ${colors});`)\n } else if (variant.background.type === 'transparent') {\n rules.push(`background-color: transparent;`)\n }\n\n // Text color\n const textColor = tokens.getColor(variant.textColorToken)\n rules.push(`color: ${textColor};`)\n\n // Border\n if (variant.border) {\n const borderColor = tokens.getColor(variant.border.colorToken)\n const borderWidth = BORDER_WIDTH_MAP[variant.border.widthClass] || '1px'\n rules.push(`border: ${borderWidth} solid ${borderColor};`)\n }\n // Note: If no border is defined, we don't set border: none to allow effects\n // like gradient-border-fill to set their own borders\n\n if (rules.length === 0) return ''\n\n return `\n${selector} {\n ${rules.join('\\n ')}\n}\n `.trim()\n}\n\n/**\n * Generate CSS for all effects in a button variant\n */\nfunction generateVariantEffectCSS(\n variant: ButtonVariant,\n themeId: string,\n tokens: TokenResolver,\n theme: Theme\n): string {\n if (!variant.effects) return ''\n\n const cssChunks: string[] = []\n\n // Process each state group (base, hover, active, focus)\n for (const [stateGroup, effectApps] of Object.entries(variant.effects)) {\n if (!effectApps || effectApps.length === 0) continue\n\n for (const effectApp of effectApps) {\n const effectPreset = getEffectPreset(effectApp.effectId)\n\n if (!effectPreset) {\n console.warn(`[generateVariantEffectCSS] Unknown effect: ${effectApp.effectId}`)\n continue\n }\n\n // Build effect context\n const ctx: EffectContext = {\n themeId,\n variantId: variant.id,\n stateGroup: stateGroup as StateGroup,\n options: effectApp.options || {},\n buttonConfig: variant,\n tokens,\n theme,\n }\n\n // Generate CSS from effect preset\n const css = effectPreset.generateCSS(ctx)\n if (css) {\n cssChunks.push(css)\n }\n }\n }\n\n return cssChunks.join('\\n\\n')\n}\n\n/**\n * Generate disabled state CSS\n *\n * Hardcoded: reduces opacity, removes pointer events, removes hover effects.\n */\nfunction generateDisabledCSS(variant: ButtonVariant, themeId: string): string {\n // Wrap scope selector in :where() for zero specificity\n const selector = `:where([data-theme-scope=\"${themeId}\"]) .${variant.id}:disabled`\n\n return `\n${selector},\n${selector}:hover,\n${selector}:active,\n${selector}:focus {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n transform: none;\n box-shadow: none;\n}\n\n/* Remove pseudo-element effects when disabled */\n${selector}::before,\n${selector}::after {\n opacity: 0;\n animation: none;\n pointer-events: none;\n}\n `.trim()\n}\n\n/**\n * Generate CSS classes for button sizes (btn-sm, btn-md, btn-lg)\n *\n * These classes can be combined with variant classes to adjust button sizing.\n * Uses !important to override variant padding/font-size.\n */\nfunction generateButtonSizeCSS(themeId: string, sizes?: ButtonSizes): string {\n const effectiveSizes = sizes ?? DEFAULT_BUTTON_SIZES\n const cssChunks: string[] = []\n\n for (const [sizeName, config] of Object.entries(effectiveSizes) as [ButtonSizeName, typeof effectiveSizes.sm][]) {\n // Wrap scope selector in :where() for zero specificity\n const selector = `:where([data-theme-scope=\"${themeId}\"]) .btn-${sizeName}`\n const rules: string[] = []\n\n // Padding with !important to override variant defaults\n rules.push(`padding: ${config.padding} !important;`)\n\n // Font size if specified\n if (config.fontSize) {\n const fontSize = FONT_SIZE_MAP[config.fontSize] || config.fontSize\n rules.push(`font-size: ${fontSize} !important;`)\n }\n\n cssChunks.push(`\n${selector} {\n ${rules.join('\\n ')}\n}`.trim())\n }\n\n return cssChunks.join('\\n\\n')\n}\n","import type { Corners } from '../schema'\n\n/**\n * Corner style to border-radius value map\n */\nexport const CORNER_RADIUS_MAP: Record<Corners, string> = {\n square: '0px',\n soft: '8px',\n rounded: '16px',\n pill: '9999px',\n}\n\n/**\n * Border width class to actual width map\n */\nexport const BORDER_WIDTH_MAP: Record<string, string> = {\n 'border': '1px',\n 'border-2': '2px',\n 'border-4': '4px',\n}\n\n/**\n * Gradient direction to CSS direction map\n */\nexport const GRADIENT_DIRECTION_MAP: Record<string, string> = {\n 'to-r': 'to right',\n 'to-l': 'to left',\n 'to-t': 'to top',\n 'to-b': 'to bottom',\n 'to-tr': 'to top right',\n 'to-tl': 'to top left',\n 'to-br': 'to bottom right',\n 'to-bl': 'to bottom left',\n}\n\n/**\n * Generate CSS box-shadow value from Shadow object\n */\nexport function generateShadowValue(shadow: {\n elevation: 'none' | 'low' | 'medium' | 'high'\n softness: 'crisp' | 'soft' | 'hard' | null\n position: 'bottom' | 'bottom-right'\n}): string {\n if (shadow.elevation === 'none') return 'none'\n\n const offsets = {\n low: 2,\n medium: 4,\n high: 6,\n }\n\n const offset = offsets[shadow.elevation]\n const xOffset = shadow.position === 'bottom-right' ? offset : 0\n\n // Hard shadows: zero blur, full opacity\n if (shadow.softness === 'hard') {\n return `${xOffset}px ${offset}px 0 0 rgba(0,0,0,1)`\n }\n\n // Soft vs crisp shadows\n const soft = shadow.softness !== 'crisp'\n\n switch (shadow.elevation) {\n case 'low':\n return soft\n ? `${xOffset}px 1px 2px rgba(0,0,0,.06)`\n : `${xOffset}px 1px 1px rgba(0,0,0,.12)`\n case 'medium':\n return soft\n ? `${xOffset}px 10px 20px rgba(0,0,0,.08)`\n : `${xOffset}px 6px 12px rgba(0,0,0,.16)`\n case 'high':\n return soft\n ? `${xOffset}px 25px 50px rgba(0,0,0,.18)`\n : `${xOffset}px 20px 30px rgba(0,0,0,.28)`\n }\n}\n","import type { Theme } from '../schema'\nimport type { CardSystem } from './types'\n\n/**\n * Generate a default card system from theme settings\n *\n * Creates a single \"default\" variant that intelligently uses theme settings:\n * - Explicitly sets theme.shadow and theme.corners (for runtime transform access)\n * - Uses theme.border if defined and has meaningful width\n *\n * This ensures cards have sensible defaults even when theme.cards is undefined.\n *\n * Note: We explicitly set corners and shadow (rather than leaving undefined)\n * so that runtime transforms can access them without needing the full theme config.\n */\nexport function generateDefaultCardSystem(theme: Theme): CardSystem {\n const variant: any = {\n id: 'default',\n name: 'Default',\n enabled: true,\n priority: 1,\n background: { type: 'solid', colorToken: 'surface' },\n spacing: 'comfortable',\n // Explicitly set corners and shadow from theme for runtime access\n corners: theme.corners,\n shadow: theme.shadow,\n }\n\n // If theme defines a border with meaningful width, add it to cards\n if (theme.border && theme.border.width !== 'none') {\n const widthClassMap: Record<string, string> = {\n 'hairline': 'border',\n 'thin': 'border',\n 'thick': 'border-4',\n }\n variant.border = {\n widthClass: widthClassMap[theme.border.width] || 'border',\n colorToken: 'border',\n }\n }\n\n return {\n variants: [variant],\n }\n}\n","import type { Theme } from '../schema'\nimport type { CardSystem, CardVariant } from './types'\nimport { TokenResolver } from '../tokens/resolver'\nimport {\n CORNER_RADIUS_MAP,\n GRADIENT_DIRECTION_MAP,\n generateShadowValue,\n} from './constants'\nimport { generateDefaultCardSystem } from './generateDefaultCardSystem'\n\n/**\n * Generate complete CSS for card system from theme config\n *\n * This function:\n * 1. Reads card variants from theme.cards\n * 2. Generates CSS for each variant\n * 3. Returns scoped CSS string\n *\n * Runs SERVER-SIDE during theme loading.\n */\nexport interface GenerateCardCssOptions {\n themeId: string\n theme: Theme\n cardSystem?: CardSystem\n}\n\nexport function generateCardCss(options: GenerateCardCssOptions): string {\n const { themeId, theme, cardSystem: providedCardSystem } = options\n const tokens = new TokenResolver(theme)\n\n // Use provided card system, or generate defaults from theme\n const cardSystem = providedCardSystem ?? generateDefaultCardSystem(theme)\n\n const cssChunks: string[] = []\n\n for (const variant of cardSystem.variants) {\n if (!variant.enabled) continue\n\n const css = generateVariantCSS(variant, themeId, tokens, theme)\n cssChunks.push(css)\n }\n\n return cssChunks.filter(Boolean).join('\\n\\n')\n}\n\n/**\n * Padding map for card content based on spacing semantic values\n */\nconst CONTENT_PADDING_MAP: Record<CardVariant['spacing'], string> = {\n none: '0',\n compact: '0.75rem',\n cozy: '1rem',\n medium: '1.25rem',\n comfortable: '1.5rem',\n spacious: '2rem',\n}\n\n/**\n * Corner radius map for card media (top corners only)\n */\nconst MEDIA_CORNER_MAP: Record<Theme['corners'], string> = {\n square: '0',\n soft: '0.5rem',\n rounded: '1rem',\n pill: '9999px',\n}\n\n/**\n * Generate CSS for a single card variant\n *\n * Generates complete CSS for card containers and their children:\n * - Container: background, shadow, corners, border\n * - .card-media: top corners matching container\n * - .card-content: padding based on spacing\n *\n * This CSS-first approach eliminates runtime transforms for styling,\n * keeping transforms only for data normalization and dynamic layout.\n */\nfunction generateVariantCSS(\n variant: CardVariant,\n themeId: string,\n tokens: TokenResolver,\n theme: Theme\n): string {\n const containerSelector = `:where([data-theme-scope=\"${themeId}\"]) .card-${variant.id}`\n const mediaSelector = `${containerSelector} .card-media`\n const contentSelector = `${containerSelector} .card-content`\n\n const rules: string[] = []\n\n // === Container Styles ===\n\n // Background\n if (variant.background.type === 'solid') {\n const bgColor = tokens.getColor(variant.background.colorToken)\n rules.push(`background: ${bgColor}`)\n } else if (variant.background.type === 'gradient') {\n const fromColor = tokens.getColor(variant.background.fromToken)\n const toColor = tokens.getColor(variant.background.toToken)\n const direction = GRADIENT_DIRECTION_MAP[variant.background.direction] || 'to right'\n rules.push(`background: linear-gradient(${direction}, ${fromColor}, ${toColor})`)\n } else {\n rules.push(`background: transparent`)\n }\n\n // Border\n if (variant.border) {\n const borderColor = tokens.getColor(variant.border.colorToken)\n const borderWidth = variant.border.widthClass === 'border-4' ? '4px' :\n variant.border.widthClass === 'border-2' ? '2px' :\n variant.border.widthClass === 'border' ? '1px' : '1px'\n rules.push(`border: ${borderWidth} solid ${borderColor}`)\n }\n\n // Border radius (use variant override or theme default)\n const corners = variant.corners ?? theme.corners\n const radius = CORNER_RADIUS_MAP[corners]\n rules.push(`border-radius: ${radius}`)\n\n // Shadow (use variant override or theme default)\n const shadow = variant.shadow ?? theme.shadow\n if (shadow.elevation !== 'none') {\n const shadowValue = generateShadowValue(shadow)\n rules.push(`box-shadow: ${shadowValue}`)\n }\n\n // Structural styles for flex layout\n rules.push(`display: flex`)\n rules.push(`flex-direction: column`)\n rules.push(`position: relative`)\n rules.push(`overflow: hidden`)\n\n // === Media Styles ===\n const mediaRadius = MEDIA_CORNER_MAP[corners]\n const mediaRules: string[] = [\n `border-top-left-radius: ${mediaRadius}`,\n `border-top-right-radius: ${mediaRadius}`,\n ]\n\n // === Content Styles ===\n const padding = CONTENT_PADDING_MAP[variant.spacing] || CONTENT_PADDING_MAP.comfortable\n const contentRules: string[] = [\n `padding: ${padding}`,\n ]\n\n // Build the complete CSS rules\n return [\n `${containerSelector} {\\n ${rules.join(';\\n ')};\\n}`,\n `${mediaSelector} {\\n ${mediaRules.join(';\\n ')};\\n}`,\n `${contentSelector} {\\n ${contentRules.join(';\\n ')};\\n}`,\n ].join('\\n\\n')\n}\n","import { z } from 'zod';\n\n/**\n * Accordion icon styles for expand/collapse indicators\n */\nexport const accordionIconSchema = z.enum([\n 'plus-minus', // + becomes - (swap or rotate 90°)\n 'chevron', // › becomes ⌄ (rotate 90° or 180°)\n 'caret', // ▸ becomes ▾ (rotate 90° or 180°)\n 'arrow', // → becomes ↓ (rotate 90° or 180°)\n 'circle-plus-minus', // ⊕ becomes ⊖ (swap with fade)\n]);\n\nexport type AccordionIcon = z.infer<typeof accordionIconSchema>;\n\n/**\n * Accordion icon names used in ICON_CONFIG\n * These are the only Lucide icons bundled for accordions\n */\nexport type AccordionLucideIcon = 'Plus' | 'Minus' | 'ChevronDown' | 'ArrowDown' | 'CirclePlus' | 'CircleMinus';\n\n/**\n * Accordion configuration for a theme\n * Single style per theme (no variants needed)\n */\nexport const accordionSystemSchema = z.object({\n // Visual styling (solid color only - gradients can be added later if needed)\n background: z.object({\n type: z.literal('solid'),\n colorToken: z.string(),\n }),\n\n // Spacing (padding inside items)\n spacing: z.enum(['none', 'compact', 'cozy', 'medium', 'comfortable', 'spacious']),\n\n // Border radius (null = inherit from theme.corners)\n corners: z.enum(['square', 'soft', 'rounded', 'pill']).nullable(),\n\n // Border styling (null = inherit from theme.border)\n border: z.object({\n widthClass: z.string(), // e.g., 'border', 'border-2', 'border-0'\n colorToken: z.string(),\n }).nullable(),\n\n // Shadow (null = inherit from theme.shadow)\n shadow: z.object({\n elevation: z.enum(['none', 'low', 'medium', 'high']),\n softness: z.enum(['soft', 'crisp', 'hard']).nullable(),\n position: z.enum(['bottom', 'bottom-right']),\n }).nullable(),\n\n // Icon style and animation\n icon: z.object({\n style: accordionIconSchema,\n position: z.enum(['left', 'right']),\n size: z.enum(['sm', 'md', 'lg']),\n }),\n\n // Trigger (question) styling\n trigger: z.object({\n textColorToken: z.string(),\n fontWeight: z.enum(['regular', 'medium', 'semibold', 'bold']).nullable(), // null = inherit from theme\n }),\n\n // Hover state styling\n hover: z.object({\n backgroundColorToken: z.string().optional(),\n textColorToken: z.string().optional(),\n borderColorToken: z.string().optional(),\n scale: z.number().min(1.0).max(1.1).optional(), // e.g., 1.02 for subtle lift\n shadowElevation: z.enum(['low', 'medium', 'high']).optional(),\n }),\n\n // Content (answer) styling\n content: z.object({\n textColorToken: z.string(),\n }),\n});\n\nexport type AccordionSystem = z.infer<typeof accordionSystemSchema>;\n\n/**\n * Icon configuration mapping icon styles to Lucide icons and behavior\n * Used by both CSS generation (for rotation) and component rendering (for icon selection)\n */\nexport const ICON_CONFIG: Record<AccordionIcon, {\n closedIcon: AccordionLucideIcon;\n openIcon?: AccordionLucideIcon;\n rotation: 0 | 90 | 180; // Degrees to rotate icon on open (0 = swap instead of rotate)\n}> = {\n 'plus-minus': { closedIcon: 'Plus', openIcon: 'Minus', rotation: 0 },\n 'chevron': { closedIcon: 'ChevronDown', rotation: 180 },\n 'caret': { closedIcon: 'ChevronDown', rotation: 180 }, // Using ChevronDown as caret equivalent\n 'arrow': { closedIcon: 'ArrowDown', rotation: 180 },\n 'circle-plus-minus': { closedIcon: 'CirclePlus', openIcon: 'CircleMinus', rotation: 0 },\n};\n\n/**\n * Icon size mapping (px values for CSS and Lucide React)\n */\nexport const ICON_SIZE_PX: Record<AccordionSystem['icon']['size'], string> = {\n sm: '16px',\n md: '20px',\n lg: '24px',\n};\n\n/**\n * Spacing map for accordion content padding\n */\nexport const ACCORDION_SPACING_MAP: Record<AccordionSystem['spacing'], string> = {\n none: '0',\n compact: '0.75rem', // 12px\n cozy: '1rem', // 16px\n medium: '1.25rem', // 20px\n comfortable: '1.5rem', // 24px\n spacious: '2rem', // 32px\n};\n","/**\n * Border width mapping from Tailwind class names to px values\n * Used by CSS generators for cards, accordions, and other components\n */\nexport const BORDER_WIDTH_TO_PX: Record<string, string> = {\n 'border-0': '0',\n 'border': '1px',\n 'border-2': '2px',\n 'border-3': '3px',\n 'border-4': '4px',\n 'border-8': '8px',\n};\n\n/**\n * Parse a Tailwind border width class to px value\n * Falls back to 1px if class is not recognized\n */\nexport function parseBorderWidth(widthClass: string): string {\n return BORDER_WIDTH_TO_PX[widthClass] ?? '1px';\n}\n","import type { Theme } from '../schema';\nimport type { AccordionSystem } from './types';\nimport { ACCORDION_SPACING_MAP, ICON_CONFIG, ICON_SIZE_PX } from './types';\nimport { generateShadowValue } from '../buttons/constants';\nimport { parseBorderWidth } from '../styles/border';\n\n/**\n * Corner radius map (reused from card/button systems)\n */\nconst CORNER_MAP: Record<Theme['corners'], string> = {\n square: '0',\n soft: '0.5rem',\n rounded: '1rem',\n pill: '9999px',\n};\n\n/**\n * Generate CSS for accordion styling based on theme configuration\n *\n * Creates scoped CSS classes that apply theme-aware styling to accordions:\n * - .accordion-root: Container styles (background, border, corners, shadow)\n * - .accordion-item: Individual item borders\n * - .accordion-trigger: Question/trigger text styling\n * - .accordion-content: Answer/content text styling\n * - .accordion-icon: Icon sizing and transitions\n */\nexport function generateAccordionCss({\n themeId,\n theme,\n accordionSystem,\n}: {\n themeId: string;\n theme: Theme;\n accordionSystem: AccordionSystem;\n}): string {\n // Wrap scope selector in :where() for zero specificity\n const rootSelector = `:where([data-theme-scope=\"${themeId}\"]) .accordion-root`;\n const itemSelector = `${rootSelector} .accordion-item`;\n const triggerSelector = `${itemSelector} .accordion-trigger`;\n const contentSelector = `${itemSelector} .accordion-content`;\n const iconSelector = `${triggerSelector} .accordion-icon`;\n\n // === Root Container Styles ===\n const rootRules: string[] = [];\n\n // Background (solid color)\n rootRules.push(`background-color: rgb(var(--tb-${accordionSystem.background.colorToken}))`);\n\n\n // Border radius (use accordion setting or fall back to theme)\n const corners = accordionSystem.corners ?? theme.corners;\n const borderRadius = CORNER_MAP[corners];\n rootRules.push(`border-radius: ${borderRadius}`);\n\n // Border\n if (accordionSystem.border) {\n const borderPx = parseBorderWidth(accordionSystem.border.widthClass);\n rootRules.push(`border: ${borderPx} solid rgb(var(--tb-${accordionSystem.border.colorToken}))`);\n }\n\n // Shadow\n if (accordionSystem.shadow && accordionSystem.shadow.elevation !== 'none') {\n const shadowValue = generateShadowValue(\n accordionSystem.shadow.elevation,\n accordionSystem.shadow.softness ?? 'soft',\n accordionSystem.shadow.position\n );\n rootRules.push(`box-shadow: ${shadowValue}`);\n }\n\n rootRules.push('overflow: hidden');\n\n // === Item Styles ===\n const itemRules: string[] = [];\n\n // Bottom border between items\n if (accordionSystem.border) {\n itemRules.push(`border-bottom: 1px solid rgb(var(--tb-${accordionSystem.border.colorToken}))`);\n } else {\n itemRules.push(`border-bottom: 1px solid rgb(var(--tb-border))`);\n }\n\n // Remove border from last item\n const lastItemSelector = `${itemSelector}:last-child`;\n const lastItemRules = ['border-bottom: none'];\n\n // === Trigger (Question) Styles ===\n const triggerRules: string[] = [];\n\n const padding = ACCORDION_SPACING_MAP[accordionSystem.spacing];\n triggerRules.push(`padding: ${padding}`);\n triggerRules.push(`color: rgb(var(--tb-${accordionSystem.trigger.textColorToken}))`);\n\n // Font weight (inherit from theme if not specified)\n if (accordionSystem.trigger.fontWeight) {\n const fontWeightMap = {\n regular: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n };\n triggerRules.push(`font-weight: ${fontWeightMap[accordionSystem.trigger.fontWeight]}`);\n }\n\n // Essential structural/layout properties\n triggerRules.push('cursor: pointer');\n triggerRules.push('display: flex');\n triggerRules.push('flex: 1');\n triggerRules.push('align-items: center');\n triggerRules.push('justify-content: space-between');\n triggerRules.push('width: 100%');\n triggerRules.push('text-align: left');\n triggerRules.push('gap: 1rem');\n\n // Focus styles (accessibility)\n triggerRules.push('outline: none');\n\n // Build transition properties based on what hover effects are configured\n const transitionProps: string[] = ['color 0.2s ease'];\n if (accordionSystem.hover.backgroundColorToken) {\n transitionProps.push('background-color 0.2s ease');\n }\n if (accordionSystem.hover.borderColorToken) {\n transitionProps.push('border-color 0.2s ease');\n }\n if (accordionSystem.hover.scale) {\n transitionProps.push('transform 0.2s ease');\n }\n if (accordionSystem.hover.shadowElevation) {\n transitionProps.push('box-shadow 0.2s ease');\n }\n triggerRules.push(`transition: ${transitionProps.join(', ')}`);\n\n // === Hover State ===\n const triggerHoverSelector = `${triggerSelector}:hover`;\n const triggerHoverRules: string[] = [];\n\n if (accordionSystem.hover.backgroundColorToken) {\n triggerHoverRules.push(`background-color: rgb(var(--tb-${accordionSystem.hover.backgroundColorToken}))`);\n }\n\n if (accordionSystem.hover.textColorToken) {\n triggerHoverRules.push(`color: rgb(var(--tb-${accordionSystem.hover.textColorToken}))`);\n }\n\n if (accordionSystem.hover.borderColorToken) {\n triggerHoverRules.push(`border-color: rgb(var(--tb-${accordionSystem.hover.borderColorToken}))`);\n }\n\n if (accordionSystem.hover.scale) {\n triggerHoverRules.push(`transform: scale(${accordionSystem.hover.scale})`);\n }\n\n if (accordionSystem.hover.shadowElevation) {\n const hoverShadowValue = generateShadowValue(\n accordionSystem.hover.shadowElevation,\n accordionSystem.shadow?.softness ?? 'soft',\n accordionSystem.shadow?.position ?? 'bottom'\n );\n triggerHoverRules.push(`box-shadow: ${hoverShadowValue}`);\n }\n\n // === Focus-Visible State (Accessibility) ===\n const triggerFocusSelector = `${triggerSelector}:focus-visible`;\n const triggerFocusRules: string[] = [];\n triggerFocusRules.push('outline: 2px solid rgb(var(--tb-primary))');\n triggerFocusRules.push('outline-offset: 2px');\n\n // === Content (Answer) Styles ===\n const contentRules: string[] = [];\n\n contentRules.push('overflow: hidden'); // Required for Radix accordion animation\n contentRules.push(`padding: 0 ${padding} ${padding} ${padding}`);\n contentRules.push(`color: rgb(var(--tb-${accordionSystem.content.textColorToken}))`);\n\n // === Icon Styles ===\n const iconRules: string[] = [];\n\n // Icon size based on configuration\n const iconSize = ICON_SIZE_PX[accordionSystem.icon.size];\n iconRules.push(`width: ${iconSize}`);\n iconRules.push(`height: ${iconSize}`);\n iconRules.push('flex-shrink: 0');\n iconRules.push('display: inline-flex');\n iconRules.push('align-items: center');\n iconRules.push('justify-content: center');\n\n const iconConfig = ICON_CONFIG[accordionSystem.icon.style];\n\n // Icon behavior: swap (show/hide different icons) vs rotate (transform single icon)\n const iconSwapBlocks: string[] = [];\n const iconRotateBlock: string[] = [];\n\n if (iconConfig.openIcon) {\n // Swap pattern: Show closed icon by default, hide open icon\n const iconClosedSelector = `${iconSelector} .accordion-icon-closed`;\n const iconOpenHiddenSelector = `${iconSelector} .accordion-icon-open`;\n const itemOpenIconClosedSelector = `[data-state=\"open\"] ${iconSelector} .accordion-icon-closed`;\n const itemOpenIconOpenSelector = `[data-state=\"open\"] ${iconSelector} .accordion-icon-open`;\n\n iconSwapBlocks.push(`${iconClosedSelector} {\\n display: block;\\n transition: opacity 0.2s ease;\\n}`);\n iconSwapBlocks.push(`${iconOpenHiddenSelector} {\\n display: none;\\n}`);\n iconSwapBlocks.push(`${itemOpenIconClosedSelector} {\\n display: none;\\n}`);\n iconSwapBlocks.push(`${itemOpenIconOpenSelector} {\\n display: block;\\n}`);\n } else {\n // Rotate pattern: Single icon that rotates\n iconRules.push('transition: transform 0.2s ease');\n\n if (iconConfig.rotation > 0) {\n const iconOpenSelector = `[data-state=\"open\"] ${iconSelector}`;\n const iconOpenRules: string[] = [];\n iconOpenRules.push(`transform: rotate(${iconConfig.rotation}deg)`);\n iconRotateBlock.push(`${iconOpenSelector} {\\n ${iconOpenRules.join(';\\n ')};\\n}`);\n }\n }\n\n // Build the complete CSS\n const cssBlocks: string[] = [];\n\n cssBlocks.push(`${rootSelector} {\\n ${rootRules.join(';\\n ')};\\n}`);\n cssBlocks.push(`${itemSelector} {\\n ${itemRules.join(';\\n ')};\\n}`);\n cssBlocks.push(`${lastItemSelector} {\\n ${lastItemRules.join(';\\n ')};\\n}`);\n cssBlocks.push(`${triggerSelector} {\\n ${triggerRules.join(';\\n ')};\\n}`);\n\n if (triggerHoverRules.length > 0) {\n cssBlocks.push(`${triggerHoverSelector} {\\n ${triggerHoverRules.join(';\\n ')};\\n}`);\n }\n\n if (triggerFocusRules.length > 0) {\n cssBlocks.push(`${triggerFocusSelector} {\\n ${triggerFocusRules.join(';\\n ')};\\n}`);\n }\n\n cssBlocks.push(`${contentSelector} {\\n ${contentRules.join(';\\n ')};\\n}`);\n cssBlocks.push(`${iconSelector} {\\n ${iconRules.join(';\\n ')};\\n}`);\n\n // Add icon swap or rotate rules\n if (iconSwapBlocks.length > 0) {\n cssBlocks.push(...iconSwapBlocks);\n }\n if (iconRotateBlock.length > 0) {\n cssBlocks.push(...iconRotateBlock);\n }\n\n return cssBlocks.join('\\n\\n');\n}\n","import type { Theme } from '../schema';\nimport type { AccordionSystem } from './types';\n\n/**\n * Generate default accordion system based on theme configuration\n *\n * Creates a single accordion style that harmonizes with the theme's\n * visual language (spacing, borders, shadows, colors).\n */\nexport function generateDefaultAccordionSystem(theme: Theme): AccordionSystem {\n const { axes, space, border, shadow } = theme;\n\n // Determine icon style based on theme tone\n let iconStyle: AccordionSystem['icon']['style'];\n if (axes.tone === 'bold') {\n iconStyle = 'plus-minus'; // Bold, clear icon\n } else if (axes.tone === 'minimal') {\n iconStyle = 'chevron'; // Subtle, modern\n } else {\n iconStyle = 'chevron'; // Default for most themes\n }\n\n // Icon position: always right (most common pattern)\n const iconPosition: AccordionSystem['icon']['position'] = 'right';\n\n // Determine icon size based on theme density\n const iconSize: AccordionSystem['icon']['size'] =\n axes.density === 'airy' ? 'md' :\n axes.density === 'compact' ? 'sm' : 'md';\n\n // Determine spacing based on theme space setting\n const spacing: AccordionSystem['spacing'] =\n space === 'comfortable' ? 'comfortable' :\n space === 'standard' ? 'medium' :\n space === 'dense' ? 'compact' : 'medium';\n\n // Determine font weight based on tone\n const fontWeight: AccordionSystem['trigger']['fontWeight'] =\n axes.tone === 'bold' ? 'bold' :\n axes.tone === 'minimal' ? 'medium' :\n 'semibold';\n\n // For high conversion sites, use more prominent styling\n const useBorder = axes.conversionBias === 'high' || border.width !== 'none';\n const useShadow = axes.conversionBias === 'high' || shadow.elevation !== 'none';\n\n return {\n background: {\n type: 'solid',\n colorToken: 'surface',\n },\n\n spacing,\n\n // Inherit theme corners unless theme is bold (then force square)\n corners: axes.tone === 'bold' ? 'square' : null,\n\n // Use border if theme has borders or conversion bias is high\n border: useBorder ? {\n widthClass: border.width === 'thick' ? 'border-2' : 'border',\n colorToken: 'border',\n } : null,\n\n // Use shadow if theme has shadows or conversion bias is high\n shadow: useShadow ? {\n elevation: shadow.elevation === 'none' ? 'low' : shadow.elevation,\n softness: shadow.softness === 'crisp' || shadow.softness === null ? 'soft' : shadow.softness,\n position: shadow.position,\n } : null,\n\n icon: {\n style: iconStyle,\n position: iconPosition,\n size: iconSize,\n },\n\n trigger: {\n textColorToken: 'text',\n fontWeight,\n },\n\n // Hover effects based on theme axes\n hover: generateHoverEffects(axes, space),\n\n content: {\n textColorToken: 'neutral-700',\n },\n };\n}\n\n/**\n * Generate hover effects based on theme characteristics\n *\n * Strategy:\n * - Minimal/calm themes: subtle text color change only\n * - Bold/vibrant themes: background + text color\n * - High conversion themes: background + shadow elevation\n */\nfunction generateHoverEffects(\n axes: Theme['axes'],\n _space: Theme['space']\n): AccordionSystem['hover'] {\n const { tone, energy, conversionBias } = axes;\n\n // Minimal themes: just text color change\n if (tone === 'minimal' && energy === 'calm') {\n return {\n textColorToken: 'primary',\n };\n }\n\n // Bold or high-conversion themes: background + optional shadow\n if (tone === 'bold' || conversionBias === 'high') {\n return {\n backgroundColorToken: 'primary/10',\n textColorToken: 'primary',\n shadowElevation: conversionBias === 'high' ? 'low' : undefined,\n };\n }\n\n // Vibrant themes: background + scale\n if (energy === 'vibrant') {\n return {\n backgroundColorToken: 'primary/5',\n textColorToken: 'primary',\n scale: 1.01,\n };\n }\n\n // Default: subtle background change\n return {\n backgroundColorToken: 'primary/5',\n textColorToken: 'primary',\n };\n}\n","import { z } from 'zod';\n\n/**\n * Input styling configuration for a theme\n *\n * Provides comprehensive control over form input appearance including:\n * - Base styling (background, borders, spacing)\n * - Label styling\n * - Focus, error, and disabled states\n *\n * Single configuration per theme (no variants needed for inputs)\n */\nexport const inputSystemSchema = z.object({\n // Base styling (applied to all inputs)\n base: z.object({\n background: z.object({\n type: z.literal('solid'),\n colorToken: z.string(),\n }),\n textColorToken: z.string(),\n border: z.object({\n widthClass: z.string(), // e.g., 'border', 'border-2'\n colorToken: z.string(),\n }),\n corners: z.enum(['square', 'soft', 'rounded', 'pill']).nullable(), // null = inherit from theme.corners\n shadow: z.object({\n elevation: z.enum(['none', 'low', 'medium']),\n softness: z.enum(['soft', 'crisp', 'hard']).nullable(),\n }).nullable(),\n spacing: z.enum(['compact', 'cozy', 'medium', 'comfortable']), // padding inside inputs\n fontSize: z.enum(['sm', 'base', 'lg']),\n }),\n\n // Label styling\n label: z.object({\n textColorToken: z.string(),\n fontWeight: z.enum(['regular', 'medium', 'semibold', 'bold']),\n fontSize: z.enum(['xs', 'sm', 'base']),\n }),\n\n // Focus state\n focus: z.object({\n ringColorToken: z.string(),\n ringWidth: z.enum(['1', '2', '3']),\n borderColorToken: z.string().optional(), // Change border color on focus\n }),\n\n // Error state (for validation feedback)\n error: z.object({\n borderColorToken: z.string(),\n textColorToken: z.string(),\n }),\n\n // Disabled state\n disabled: z.object({\n backgroundColorToken: z.string(),\n textColorToken: z.string(),\n opacity: z.number().min(0.3).max(0.7),\n }),\n});\n\nexport type InputSystem = z.infer<typeof inputSystemSchema>;\n\n/**\n * Spacing map for input padding\n */\nexport const INPUT_SPACING_MAP: Record<InputSystem['base']['spacing'], string> = {\n compact: '0.5rem 0.75rem', // py-2 px-3\n cozy: '0.625rem 0.875rem', // py-2.5 px-3.5\n medium: '0.75rem 1rem', // py-3 px-4\n comfortable: '0.875rem 1.25rem', // py-3.5 px-5\n};\n\n/**\n * Font size map for inputs\n */\nexport const INPUT_FONT_SIZE_MAP: Record<InputSystem['base']['fontSize'], string> = {\n sm: '0.875rem', // 14px\n base: '1rem', // 16px\n lg: '1.125rem', // 18px\n};\n\n/**\n * Label font size map\n */\nexport const LABEL_FONT_SIZE_MAP: Record<InputSystem['label']['fontSize'], string> = {\n xs: '0.75rem', // 12px\n sm: '0.875rem', // 14px\n base: '1rem', // 16px\n};\n\n/**\n * Font weight map\n */\nexport const FONT_WEIGHT_MAP: Record<InputSystem['label']['fontWeight'], string> = {\n regular: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n};\n","import type { Theme } from '../schema';\nimport type { InputSystem } from './types';\nimport {\n INPUT_SPACING_MAP,\n INPUT_FONT_SIZE_MAP,\n LABEL_FONT_SIZE_MAP,\n FONT_WEIGHT_MAP,\n} from './types';\nimport { generateShadowValue } from '../buttons/constants';\nimport { parseBorderWidth } from '../styles/border';\n\n/**\n * Corner radius map (reused from other systems)\n */\nconst CORNER_MAP: Record<Theme['corners'], string> = {\n square: '0',\n soft: '0.5rem',\n rounded: '1rem',\n pill: '9999px',\n};\n\n/**\n * Generate CSS for form input styling based on theme configuration\n *\n * Creates scoped CSS classes that apply theme-aware styling to form inputs:\n * - .form-label: Label styling\n * - .form-input: Text inputs (text, email, url, tel, number)\n * - .form-textarea: Textarea styling\n * - .form-select: Select dropdown styling\n * - .form-checkbox: Checkbox styling\n * - .form-radio: Radio button styling\n * - Focus states (:focus-visible)\n * - Error states ([aria-invalid=\"true\"])\n * - Disabled states (:disabled)\n */\nexport function generateInputCss({\n themeId,\n theme,\n inputSystem,\n}: {\n themeId: string;\n theme: Theme;\n inputSystem: InputSystem;\n}): string {\n const rootSelector = `:where([data-theme-scope=\"${themeId}\"])`;\n\n // === Shared Input Styles ===\n const baseInputRules: string[] = [];\n\n // Background\n baseInputRules.push(`background-color: rgb(var(--tb-${inputSystem.base.background.colorToken}))`);\n\n // Text color\n baseInputRules.push(`color: rgb(var(--tb-${inputSystem.base.textColorToken}))`);\n\n // Border\n const borderPx = parseBorderWidth(inputSystem.base.border.widthClass);\n baseInputRules.push(`border: ${borderPx} solid rgb(var(--tb-${inputSystem.base.border.colorToken}))`);\n\n // Corner radius\n const corners = inputSystem.base.corners ?? theme.corners;\n const borderRadius = CORNER_MAP[corners];\n baseInputRules.push(`border-radius: ${borderRadius}`);\n\n // Shadow\n if (inputSystem.base.shadow && inputSystem.base.shadow.elevation !== 'none') {\n const shadowValue = generateShadowValue(\n inputSystem.base.shadow.elevation,\n inputSystem.base.shadow.softness ?? 'soft',\n 'bottom'\n );\n baseInputRules.push(`box-shadow: ${shadowValue}`);\n }\n\n // Padding\n const padding = INPUT_SPACING_MAP[inputSystem.base.spacing];\n baseInputRules.push(`padding: ${padding}`);\n\n // Font size\n const fontSize = INPUT_FONT_SIZE_MAP[inputSystem.base.fontSize];\n baseInputRules.push(`font-size: ${fontSize}`);\n\n // Essential structural properties\n baseInputRules.push('width: 100%');\n baseInputRules.push('outline: none');\n baseInputRules.push('transition: border-color 0.2s ease, box-shadow 0.2s ease');\n\n // === Label Styles ===\n const labelSelector = `${rootSelector} .form-label`;\n const labelRules: string[] = [];\n\n labelRules.push(`color: rgb(var(--tb-${inputSystem.label.textColorToken}))`);\n labelRules.push(`font-weight: ${FONT_WEIGHT_MAP[inputSystem.label.fontWeight]}`);\n labelRules.push(`font-size: ${LABEL_FONT_SIZE_MAP[inputSystem.label.fontSize]}`);\n labelRules.push('display: block');\n labelRules.push('margin-bottom: 0.25rem');\n\n // === Text Input Styles ===\n const inputSelector = `${rootSelector} .form-input`;\n const inputRules = [...baseInputRules];\n\n // === Textarea Styles ===\n const textareaSelector = `${rootSelector} .form-textarea`;\n const textareaRules = [...baseInputRules];\n textareaRules.push('resize: vertical');\n textareaRules.push('min-height: 5rem');\n\n // === Select Styles ===\n const selectSelector = `${rootSelector} .form-select`;\n const selectRules = [...baseInputRules];\n selectRules.push('appearance: none');\n selectRules.push('background-image: url(\"data:image/svg+xml,%3csvg xmlns=\\'http://www.w3.org/2000/svg\\' fill=\\'none\\' viewBox=\\'0 0 20 20\\'%3e%3cpath stroke=\\'%236b7280\\' stroke-linecap=\\'round\\' stroke-linejoin=\\'round\\' stroke-width=\\'1.5\\' d=\\'M6 8l4 4 4-4\\'/%3e%3c/svg%3e\")');\n selectRules.push('background-position: right 0.5rem center');\n selectRules.push('background-repeat: no-repeat');\n selectRules.push('background-size: 1.5em 1.5em');\n selectRules.push('padding-right: 2.5rem');\n\n // === Focus State (all inputs) ===\n const focusSelectors = [\n `${inputSelector}:focus-visible`,\n `${textareaSelector}:focus-visible`,\n `${selectSelector}:focus-visible`,\n ];\n const focusRules: string[] = [];\n\n focusRules.push('outline: none');\n focusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);\n\n if (inputSystem.focus.borderColorToken) {\n focusRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.borderColorToken}))`);\n }\n\n // === Error State (all inputs) ===\n const errorSelectors = [\n `${inputSelector}[aria-invalid=\"true\"]`,\n `${textareaSelector}[aria-invalid=\"true\"]`,\n `${selectSelector}[aria-invalid=\"true\"]`,\n ];\n const errorRules: string[] = [];\n\n errorRules.push(`border-color: rgb(var(--tb-${inputSystem.error.borderColorToken}))`);\n errorRules.push(`color: rgb(var(--tb-${inputSystem.error.textColorToken}))`);\n\n // === Disabled State (all inputs) ===\n const disabledSelectors = [\n `${inputSelector}:disabled`,\n `${textareaSelector}:disabled`,\n `${selectSelector}:disabled`,\n ];\n const disabledRules: string[] = [];\n\n disabledRules.push(`background-color: rgb(var(--tb-${inputSystem.disabled.backgroundColorToken}))`);\n disabledRules.push(`color: rgb(var(--tb-${inputSystem.disabled.textColorToken}))`);\n disabledRules.push(`opacity: ${inputSystem.disabled.opacity}`);\n disabledRules.push('cursor: not-allowed');\n\n // === Checkbox and Radio Styles ===\n const checkboxSelector = `${rootSelector} .form-checkbox`;\n const radioSelector = `${rootSelector} .form-radio`;\n const checkableRules: string[] = [];\n\n checkableRules.push('appearance: none');\n checkableRules.push('width: 1rem');\n checkableRules.push('height: 1rem');\n checkableRules.push('flex-shrink: 0');\n checkableRules.push(`border: ${borderPx} solid rgb(var(--tb-${inputSystem.base.border.colorToken}))`);\n checkableRules.push(`background-color: rgb(var(--tb-${inputSystem.base.background.colorToken}))`);\n checkableRules.push('cursor: pointer');\n checkableRules.push('transition: background-color 0.2s ease, border-color 0.2s ease');\n\n // Checkbox specific (square)\n const checkboxSpecificRules = [...checkableRules];\n checkboxSpecificRules.push(`border-radius: ${CORNER_MAP.soft}`);\n\n // Radio specific (circle)\n const radioSpecificRules = [...checkableRules];\n radioSpecificRules.push('border-radius: 9999px');\n\n // Checked state for checkbox\n const checkboxCheckedSelector = `${checkboxSelector}:checked`;\n const checkboxCheckedRules: string[] = [];\n checkboxCheckedRules.push(`background-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);\n checkboxCheckedRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);\n checkboxCheckedRules.push('background-image: url(\"data:image/svg+xml,%3csvg viewBox=\\'0 0 16 16\\' fill=\\'white\\' xmlns=\\'http://www.w3.org/2000/svg\\'%3e%3cpath d=\\'M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z\\'/%3e%3c/svg%3e\")');\n checkboxCheckedRules.push('background-size: 100% 100%');\n checkboxCheckedRules.push('background-position: center');\n checkboxCheckedRules.push('background-repeat: no-repeat');\n\n // Checked state for radio\n const radioCheckedSelector = `${radioSelector}:checked`;\n const radioCheckedRules: string[] = [];\n radioCheckedRules.push(`background-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);\n radioCheckedRules.push(`border-color: rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);\n radioCheckedRules.push('background-image: radial-gradient(circle, white 40%, transparent 40%)');\n\n // Focus state for checkbox/radio\n const checkboxFocusSelector = `${checkboxSelector}:focus-visible`;\n const radioFocusSelector = `${radioSelector}:focus-visible`;\n const checkableFocusRules: string[] = [];\n checkableFocusRules.push('outline: none');\n checkableFocusRules.push(`box-shadow: 0 0 0 ${inputSystem.focus.ringWidth}px rgb(var(--tb-${inputSystem.focus.ringColorToken}))`);\n\n // Build the complete CSS\n const cssBlocks: string[] = [];\n\n cssBlocks.push(`${labelSelector} {\\n ${labelRules.join(';\\n ')};\\n}`);\n cssBlocks.push(`${inputSelector} {\\n ${inputRules.join(';\\n ')};\\n}`);\n cssBlocks.push(`${textareaSelector} {\\n ${textareaRules.join(';\\n ')};\\n}`);\n cssBlocks.push(`${selectSelector} {\\n ${selectRules.join(';\\n ')};\\n}`);\n cssBlocks.push(`${focusSelectors.join(',\\n')} {\\n ${focusRules.join(';\\n ')};\\n}`);\n cssBlocks.push(`${errorSelectors.join(',\\n')} {\\n ${errorRules.join(';\\n ')};\\n}`);\n cssBlocks.push(`${disabledSelectors.join(',\\n')} {\\n ${disabledRules.join(';\\n ')};\\n}`);\n cssBlocks.push(`${checkboxSelector} {\\n ${checkboxSpecificRules.join(';\\n ')};\\n}`);\n cssBlocks.push(`${radioSelector} {\\n ${radioSpecificRules.join(';\\n ')};\\n}`);\n cssBlocks.push(`${checkboxCheckedSelector} {\\n ${checkboxCheckedRules.join(';\\n ')};\\n}`);\n cssBlocks.push(`${radioCheckedSelector} {\\n ${radioCheckedRules.join(';\\n ')};\\n}`);\n cssBlocks.push(`${checkboxFocusSelector},\\n${radioFocusSelector} {\\n ${checkableFocusRules.join(';\\n ')};\\n}`);\n\n return cssBlocks.join('\\n\\n');\n}\n","import type { Theme } from '../schema';\nimport type { InputSystem } from './types';\n\n/**\n * Generate default input system based on theme configuration\n *\n * Creates input styling that harmonizes with the theme's visual language:\n * - Spacing adapts to theme density\n * - Border thickness matches theme border style\n * - Focus states reflect theme energy level\n * - Colors coordinate with theme palette\n */\nexport function generateDefaultInputSystem(theme: Theme): InputSystem {\n const { axes, space, border, shadow } = theme;\n\n // Determine spacing based on theme space/density\n let spacing: InputSystem['base']['spacing'];\n if (axes.density === 'compact') {\n spacing = 'compact';\n } else if (axes.density === 'airy') {\n spacing = 'comfortable';\n } else if (space === 'comfortable') {\n spacing = 'comfortable';\n } else if (space === 'dense') {\n spacing = 'compact';\n } else {\n spacing = 'medium';\n }\n\n // Determine font size based on theme density and readability\n let fontSize: InputSystem['base']['fontSize'];\n if (axes.density === 'compact') {\n fontSize = 'sm';\n } else if (axes.density === 'airy') {\n fontSize = 'lg';\n } else {\n fontSize = 'base';\n }\n\n // Determine border width based on theme border style\n let borderWidthClass: string;\n if (border.width === 'thick') {\n borderWidthClass = 'border-2';\n } else if (border.width === 'thin') {\n borderWidthClass = 'border';\n } else {\n borderWidthClass = 'border';\n }\n\n // Determine corner radius (null = inherit from theme)\n const inputCorners: InputSystem['base']['corners'] =\n axes.tone === 'bold' ? 'square' : null;\n\n // Determine shadow (inputs usually have subtle or no shadow)\n const inputShadow: InputSystem['base']['shadow'] =\n shadow.elevation !== 'none' && axes.conversionBias === 'high'\n ? { elevation: 'low', softness: shadow.softness }\n : null;\n\n // Label styling based on theme tone\n let labelFontWeight: InputSystem['label']['fontWeight'];\n if (axes.tone === 'bold') {\n labelFontWeight = 'semibold';\n } else if (axes.tone === 'minimal') {\n labelFontWeight = 'regular';\n } else {\n labelFontWeight = 'medium';\n }\n\n const labelFontSize: InputSystem['label']['fontSize'] =\n axes.density === 'compact' ? 'xs' : 'sm';\n\n // Focus ring based on theme energy\n let focusRingWidth: InputSystem['focus']['ringWidth'];\n if (axes.energy === 'vibrant' || axes.conversionBias === 'high') {\n focusRingWidth = '2';\n } else {\n focusRingWidth = '1';\n }\n\n return {\n base: {\n background: {\n type: 'solid',\n colorToken: 'surface',\n },\n textColorToken: 'text',\n border: {\n widthClass: borderWidthClass,\n colorToken: 'border',\n },\n corners: inputCorners,\n shadow: inputShadow,\n spacing,\n fontSize,\n },\n\n label: {\n textColorToken: 'text',\n fontWeight: labelFontWeight,\n fontSize: labelFontSize,\n },\n\n focus: {\n ringColorToken: 'primary',\n ringWidth: focusRingWidth,\n borderColorToken: 'primary', // Change border color on focus\n },\n\n error: {\n borderColorToken: 'error',\n textColorToken: 'error',\n },\n\n disabled: {\n backgroundColorToken: 'neutral-100',\n textColorToken: 'neutral-400',\n opacity: 0.6,\n },\n };\n}\n","import type {\n Theme,\n ThemeHeader,\n LogoStyle,\n HeaderContainer,\n} from '../schema'\nimport { TokenResolver } from '../tokens/resolver'\n\nexport interface GenerateHeaderCssOptions {\n themeId: string\n theme: Theme\n}\n\n/**\n * Generate complete CSS for header system from theme config\n *\n * Similar to button system - generates theme-scoped CSS using [data-theme-scope] selector\n */\nexport function generateHeaderCss(options: GenerateHeaderCssOptions): string {\n const { themeId, theme } = options\n const tokens = new TokenResolver(theme)\n const header = theme.header\n\n const cssChunks: string[] = []\n\n // Generate root header styles\n cssChunks.push(generateHeaderRootStyles(header, themeId, tokens, theme))\n\n // Generate logo styles\n if (header.logo) {\n cssChunks.push(generateLogoStyles(header.logo, themeId, tokens))\n }\n\n // Generate nav link styles\n cssChunks.push(generateNavLinkStyles(header, themeId, tokens))\n\n // Generate floating container styles\n if (header.variant === 'floating' && header.container) {\n cssChunks.push(generateFloatingContainerStyles(header.container, themeId, tokens))\n }\n\n // Generate nav container styles\n cssChunks.push(generateNavContainerStyles(header, themeId, tokens))\n\n\n return cssChunks.filter(Boolean).join('\\n\\n')\n}\n\n// Export for testing\nexport const _testExports = {\n generateHeaderRootStyles\n}\n\n/**\n * Generate root header container styles\n */\nfunction generateHeaderRootStyles(\n header: ThemeHeader,\n themeId: string,\n tokens: TokenResolver,\n _theme: Theme\n): string {\n const selector = `:where([data-theme-scope=\"${themeId}\"]) .header-root`\n const rules: string[] = []\n\n // Check if we should skip root styles (for contained nav)\n const navContainerType = header.navContainer?.type ?? 'none'\n const isContainedNav = navContainerType === 'pill' || navContainerType === 'glass'\n\n if (isContainedNav) {\n // For contained nav, we want the root to be transparent\n // We might still want positioning styles, but definitely not background/border\n } else {\n // Background\n const bg = header.background\n if (bg.type === 'color') {\n const bgColor = tokens.getColor(bg.color || 'surface')\n rules.push(`background-color: ${bgColor};`)\n } else if (bg.type === 'gradient' && bg.gradient) {\n // Generate gradient CSS\n const stops = bg.gradient.stops.map(s => tokens.getColor(s.color)).join(', ')\n const angle = bg.gradient.angle ?? 180 // default to 180deg (top to bottom)\n rules.push(`background-image: linear-gradient(${angle}deg, ${stops});`)\n }\n\n // Backdrop blur\n // Only apply if not transparent variant? Or always?\n // The user wants \"transparent\" variant to be truly transparent.\n // If variant is transparent, we probably shouldn't apply blur either unless specified?\n // But for now, let's just stick to the contained nav fix.\n rules.push(`backdrop-filter: blur(12px);`)\n rules.push(`-webkit-backdrop-filter: blur(12px);`)\n\n // Border\n if (header.border) {\n const borderWidth = {\n 'none': '0',\n 'thin': '1px',\n 'medium': '2px',\n 'thick': '4px',\n }[header.border.width]\n\n if (borderWidth !== '0') {\n const borderToken = header.border?.color?.trim() || 'border'\n const borderColor = tokens.getColor(borderToken)\n const borderStyle = header.border.style === 'dashed' ? 'dashed' : 'solid'\n\n if (header.border.position === 'bottom') {\n rules.push(`border-bottom: ${borderWidth} ${borderStyle} ${borderColor};`)\n } else if (header.border.position === 'top') {\n rules.push(`border-top: ${borderWidth} ${borderStyle} ${borderColor};`)\n } else if (header.border.position === 'both') {\n rules.push(`border-top: ${borderWidth} ${borderStyle} ${borderColor};`)\n rules.push(`border-bottom: ${borderWidth} ${borderStyle} ${borderColor};`)\n }\n }\n }\n }\n\n // Positioning-specific styles\n if (header.positioning === 'sticky') {\n rules.push(`box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);`)\n }\n\n return `\\n${selector} {\\n ${rules.join('\\n ')}\\n}\\n`\n}\n\n/**\n * Generate logo typography styles\n */\nfunction generateLogoStyles(logo: LogoStyle | undefined, themeId: string, tokens: TokenResolver): string {\n if (!logo) return ''\n\n const selector = `:where([data-theme-scope=\"${themeId}\"]) .header-logo-text`\n const rules: string[] = []\n const primaryColor = tokens.getColor('primary')\n const accentColor = tokens.getColor('accent')\n\n // Font family\n if (logo.fontFamily === 'mono') {\n rules.push(`font-family: ui-monospace, monospace;`)\n } else if (logo.fontFamily === 'serif') {\n rules.push(`font-family: ui-serif, serif;`)\n }\n\n // Letter spacing\n if (logo.letterSpacing && logo.letterSpacing !== 'normal') {\n const spacingMap = {\n 'normal': '0em',\n 'wide': '0.05em',\n 'wider': '0.1em',\n 'widest': '0.15em',\n } as const\n rules.push(`letter-spacing: ${spacingMap[logo.letterSpacing]};`)\n }\n\n // Gradient text\n if (logo.gradient) {\n rules.push(`background: linear-gradient(to right, ${primaryColor}, ${accentColor});`)\n rules.push(`-webkit-background-clip: text;`)\n rules.push(`-webkit-text-fill-color: transparent;`)\n rules.push(`background-clip: text;`)\n rules.push(`color: transparent;`)\n }\n\n if (rules.length === 0) return ''\n\n return `\\n${selector} {\\n ${rules.join('\\n ')}\\n}\\n`\n}\n\n/**\n * Generate navigation link styles based on navStyle and effects\n */\nfunction generateNavLinkStyles(\n header: ThemeHeader,\n themeId: string,\n tokens: TokenResolver\n): string {\n const selector = `:where([data-theme-scope=\"${themeId}\"]) .header-nav-link`\n const hoverSelector = `${selector}:hover`\n const activeSelector = `${selector}[data-active=\"true\"]`\n\n const cssChunks: string[] = []\n const baseRules: string[] = []\n const hoverRules: string[] = []\n const activeRules: string[] = []\n const navContainerType = header.navContainer?.type ?? 'none'\n const usesGlassNavContainer = navContainerType === 'glass'\n const navColorToken = header.navColor?.trim()\n const primaryColor = tokens.getColor('primary')\n const navWeight = header.navWeight ?? 'medium'\n const navWeightMap = {\n regular: 400,\n medium: 500,\n semibold: 600,\n bold: 700,\n } as const\n\n if (navColorToken) {\n baseRules.push(`color: ${tokens.getColor(navColorToken)};`)\n }\n\n if (navWeight) {\n baseRules.push(`font-weight: ${navWeightMap[navWeight]};`)\n }\n\n // Add uppercase text transform for bold nav items (brutalist/block style)\n if (navWeight === 'bold' && header.navStyle === 'solid') {\n baseRules.push(`text-transform: uppercase;`)\n }\n\n // Base nav styles (from navStyle)\n switch (header.navStyle) {\n case 'minimal':\n baseRules.push(`transition: color 200ms ease;`)\n hoverRules.push(`color: ${primaryColor};`)\n activeRules.push(`color: ${primaryColor};`)\n break\n\n case 'underline':\n baseRules.push(`transition: all 200ms ease;`)\n hoverRules.push(`text-decoration: underline;`)\n hoverRules.push(`text-underline-offset: 4px;`)\n activeRules.push(`text-decoration: underline;`)\n activeRules.push(`text-underline-offset: 4px;`)\n break\n\n case 'underline-grow':\n baseRules.push(`position: relative;`)\n baseRules.push(`transition: color 200ms ease;`)\n hoverRules.push(`color: ${primaryColor};`)\n activeRules.push(`color: ${primaryColor};`)\n // Add ::after pseudo element CSS\n cssChunks.push(generateUnderlineGrowCSS(themeId))\n break\n\n case 'capsule':\n baseRules.push(`border-radius: 9999px;`)\n baseRules.push(`transition: background-color 200ms ease;`)\n hoverRules.push(`background-color: color-mix(in srgb, ${primaryColor} 10%, transparent);`)\n activeRules.push(`background-color: color-mix(in srgb, ${primaryColor} 15%, transparent);`)\n break\n\n case 'solid':\n baseRules.push(`border-radius: 0;`)\n baseRules.push(`transition: background-color 200ms ease, color 200ms ease;`)\n hoverRules.push(`background-color: ${primaryColor};`)\n // Preserve text color on hover to ensure contrast with solid background\n if (navColorToken) {\n hoverRules.push(`color: ${tokens.getColor(navColorToken)};`)\n }\n activeRules.push(`background-color: ${primaryColor};`)\n if (navColorToken) {\n activeRules.push(`color: ${tokens.getColor(navColorToken)};`)\n }\n break\n\n case 'scale':\n baseRules.push(`transition: all 200ms ease;`)\n hoverRules.push(`transform: scale(1.05);`)\n break\n\n case 'frosted':\n baseRules.push(`border-radius: 0.5rem;`)\n baseRules.push(`background-color: rgb(255 255 255 / 0.1);`)\n baseRules.push(`backdrop-filter: blur(8px);`)\n baseRules.push(`transition: background-color 200ms ease;`)\n hoverRules.push(`background-color: rgb(255 255 255 / 0.2);`)\n activeRules.push(`background-color: rgb(255 255 255 / 0.25);`)\n break\n }\n\n // Contained nav designs rely on the nav container for background treatment.\n if (usesGlassNavContainer && header.navStyle === 'minimal') {\n baseRules.push(`border-radius: 9999px;`)\n hoverRules.push(`background-color: rgba(255, 255, 255, 0.1);`)\n activeRules.push(`background-color: rgba(255, 255, 255, 0.18);`)\n hoverRules.push(`color: #fff;`)\n activeRules.push(`color: #fff;`)\n }\n\n // Apply nav effects\n if (header.navEffects) {\n if (header.navEffects.glow) {\n hoverRules.push(`filter: drop-shadow(0 0 5px currentColor);`)\n }\n\n if (header.navEffects.neumorphic) {\n console.log('[generateHeaderCss] Generating neumorphic styles for theme:', themeId);\n // Add base styles for neumorphic effect\n baseRules.push(`transition: all 200ms ease;`)\n baseRules.push(`border-radius: 0.5rem;`) // rounded-lg\n hoverRules.push(`box-shadow: inset 4px 4px 8px #c7c7c7, inset -4px -4px 8px #ffffff;`)\n hoverRules.push(`color: ${primaryColor};`) // hover:text-indigo-600 equivalent\n }\n\n if (header.navEffects.underlineGradient) {\n cssChunks.push(generateGradientUnderlineCSS(themeId, tokens))\n }\n }\n\n // Build CSS\n if (baseRules.length > 0) {\n cssChunks.push(`\\n${selector} {\\n ${baseRules.join('\\n ')}\\n}\\n`)\n }\n if (hoverRules.length > 0) {\n cssChunks.push(`\\n${hoverSelector} {\\n ${hoverRules.join('\\n ')}\\n}\\n`)\n }\n if (activeRules.length > 0) {\n cssChunks.push(`\\n${activeSelector} {\\n ${activeRules.join('\\n ')}\\n}\\n`)\n }\n\n return cssChunks.join('')\n}\n\n/**\n * Generate nav container styles (pill/glass)\n */\nfunction generateNavContainerStyles(\n header: ThemeHeader,\n themeId: string,\n tokens: TokenResolver\n): string {\n const navContainer = header.navContainer\n const navContainerType = navContainer?.type ?? 'none'\n if (!navContainer || navContainerType === 'none') return ''\n\n const selector = `:where([data-theme-scope=\"${themeId}\"]) .header-nav-row`\n const rules: string[] = []\n\n if (navContainerType === 'pill' || navContainerType === 'glass') {\n rules.push('padding: 0.5rem 0.75rem;') // px-3 py-2\n rules.push('border-radius: 9999px;') // rounded-full\n rules.push('display: inline-flex;')\n rules.push('align-items: center;')\n rules.push('gap: 1.5rem;') // gap-6\n }\n\n if (navContainerType === 'glass') {\n const opacity = clampOpacity(navContainer.opacity, 0.15)\n const background = navContainer.tint\n ? buildTint(tokens.getColor(navContainer.tint), opacity)\n : buildRgbWhite(opacity)\n\n rules.push(`background-color: ${background};`)\n rules.push('backdrop-filter: blur(12px);')\n rules.push('-webkit-backdrop-filter: blur(12px);')\n rules.push('border: 1px solid rgba(255, 255, 255, 0.2);')\n rules.push('box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);')\n } else if (navContainerType === 'pill') {\n const opacity = clampOpacity(navContainer.opacity, 0.15)\n if (navContainer.tint) {\n rules.push(`background-color: ${buildTint(tokens.getColor(navContainer.tint), opacity)};`)\n } else {\n rules.push(`background-color: ${tokens.getColor('surface')};`)\n }\n rules.push(`border: 1px solid ${tokens.getColor('border')};`)\n }\n\n if (rules.length > 0) {\n return `${selector} { ${rules.join(' ')} }`\n }\n\n return ''\n}\n\n/**\n * Generate gradient underline effect using CSS variables\n */\nfunction generateGradientUnderlineCSS(themeId: string, tokens: TokenResolver): string {\n const selector = `:where([data-theme-scope=\"${themeId}\"]) .header-nav-link`\n const primaryColor = tokens.getColor('primary')\n const accentColor = tokens.getColor('accent')\n\n return `\n${selector}::after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 2px;\n background: linear-gradient(to right, ${primaryColor}, ${accentColor});\n transform: scaleX(0);\n transform-origin: center;\n transition: transform 0.3s ease;\n}\n\n${selector}:hover::after,\n${selector}[data-active=\"true\"]::after {\n transform: scaleX(1);\n}\n `.trim()\n}\n\n/**\n * Generate underline-grow effect\n */\nfunction generateUnderlineGrowCSS(themeId: string): string {\n const selector = `:where([data-theme-scope=\"${themeId}\"]) .header-nav-link`\n\n return `\n${selector}::after {\n content: '';\n position: absolute;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 2px;\n background: currentColor;\n transform: scaleX(0);\n transform-origin: center;\n transition: transform 0.3s ease;\n}\n\n${selector}:hover::after,\n${selector}[data-active=\"true\"]::after {\n transform: scaleX(1);\n}\n `.trim()\n}\n\n/**\n * Generate floating container styles\n */\nfunction generateFloatingContainerStyles(\n container: HeaderContainer | undefined,\n themeId: string,\n tokens: TokenResolver\n): string {\n if (!container) return ''\n\n const selector = `:where([data-theme-scope=\"${themeId}\"]) .header-floating-container`\n const rules: string[] = []\n\n // Background with backdrop blur\n const opacity = clampOpacity(container.opacity, 0.12)\n if (container.tint) {\n rules.push(`background-color: ${buildTint(tokens.getColor(container.tint), opacity)};`)\n } else {\n rules.push(`background-color: ${buildRgbWhite(opacity)};`)\n }\n rules.push(`backdrop-filter: blur(16px);`)\n rules.push(`-webkit-backdrop-filter: blur(16px);`)\n\n // Border\n if (container.border) {\n rules.push(`border: 1px solid rgb(255 255 255 / 0.2);`)\n }\n\n // Border radius\n const radiusMap = {\n 'none': '0',\n 'sm': '0.375rem',\n 'md': '0.5rem',\n 'lg': '0.75rem',\n 'xl': '1rem',\n '2xl': '1.5rem',\n }\n rules.push(`border-radius: ${radiusMap[container.rounded]};`)\n\n // Shadow\n if (container.shadow) {\n rules.push(`box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);`)\n }\n\n // Padding\n const paddingMap = {\n 'sm': '1rem 1.5rem',\n 'md': '1.5rem 2rem',\n 'lg': '2rem 2.5rem',\n }\n rules.push(`padding: ${paddingMap[container.padding]};`)\n\n return `\\n${selector} {\\n ${rules.join('\\n ')}\\n}\\n`\n}\n\nfunction clampOpacity(value: number | undefined | null, fallback: number) {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return fallback\n }\n return Math.min(Math.max(value, 0), 1)\n}\n\nfunction buildTint(color: string, opacity: number) {\n return applyAlpha(color, opacity)\n}\n\nfunction buildRgbWhite(opacity: number) {\n const clamped = clampOpacity(opacity, 1)\n return `rgb(255 255 255 / ${clamped})`\n}\n\nfunction applyAlpha(color: string, opacity: number) {\n const clamped = clampOpacity(opacity, 1)\n if (color.startsWith('rgb(') && color.endsWith(')')) {\n const inner = color.slice(4, -1).trim()\n const channels = inner.includes('/') ? inner.split('/')[0].trim() : inner\n return `rgb(${channels} / ${clamped})`\n }\n return color\n}\n","import type { Theme } from '../schema'\n\nexport interface GenerateLayoutCssOptions {\n themeId: string\n theme: Theme\n}\n\n/**\n * Generate layout CSS for theme scope (background, text color)\n *\n * This applies base layout styles to the theme-scope container using the\n * --tb-* CSS variables (not Tailwind color classes, to avoid conflicts with SDK sites).\n */\nexport function generateLayoutCss(options: GenerateLayoutCssOptions): string {\n const { themeId } = options\n const selector = `:where([data-theme-scope=\"${themeId}\"])`\n const rules: string[] = []\n\n // Site background and text color from theme palette\n rules.push(`background-color: rgb(var(--tb-background));`)\n rules.push(`color: rgb(var(--tb-text));`)\n\n // Ensure the theme scope fills available space\n rules.push(`min-height: 100%;`)\n\n return `${selector} {\\n ${rules.join('\\n ')}\\n}`\n}\n","/**\n * Status/Alert CSS Generator\n *\n * Generates CSS for status indicators, alerts, and feedback messages.\n * Uses theme colors via --tb-* CSS variables.\n */\n\nimport type { Theme } from '../schema';\n\n/**\n * Corner radius map - derives alert border-radius from theme.corners\n */\nconst CORNER_MAP: Record<Theme['corners'], string> = {\n square: '0',\n soft: '0.375rem',\n rounded: '0.5rem',\n pill: '1rem',\n};\n\nexport interface GenerateStatusCssParams {\n themeId: string;\n theme: Theme;\n}\n\n/**\n * Generate status and alert CSS from theme settings.\n *\n * Creates scoped CSS classes for:\n * - .status-error, .status-success, .status-warning, .status-info, .status-muted (text colors)\n * - .alert, .alert-error, .alert-success, .alert-warning, .alert-info (styled containers)\n * - .required-marker (required field indicator)\n * - .button-link (text-styled button)\n *\n * Selectors use :where() for zero specificity, allowing site styles to override easily.\n */\nexport function generateStatusCss({ themeId, theme }: GenerateStatusCssParams): string {\n const root = `:where([data-theme-scope=\"${themeId}\"])`;\n const borderRadius = CORNER_MAP[theme.corners];\n\n const cssBlocks: string[] = [];\n\n // Status text colors (inline indicators)\n cssBlocks.push(`/* Status text indicators */\n${root} .status-error { color: rgb(var(--tb-destructive)); }\n${root} .status-success { color: rgb(var(--tb-success)); }\n${root} .status-warning { color: rgb(var(--tb-warning)); }\n${root} .status-info { color: rgb(var(--tb-info)); }\n${root} .status-muted { color: rgb(var(--tb-mutedText)); }`);\n\n // Alert boxes (styled containers)\n cssBlocks.push(`/* Alert containers */\n${root} .alert {\n padding: 1rem;\n border-radius: ${borderRadius};\n border-width: 1px;\n border-style: solid;\n}\n\n${root} .alert-error {\n border-color: rgb(var(--tb-destructive));\n background-color: rgba(var(--tb-destructive), 0.1);\n color: rgb(var(--tb-destructive));\n}\n\n${root} .alert-success {\n border-color: rgb(var(--tb-success));\n background-color: rgba(var(--tb-success), 0.1);\n color: rgb(var(--tb-success));\n}\n\n${root} .alert-warning {\n border-color: rgb(var(--tb-warning));\n background-color: rgba(var(--tb-warning), 0.1);\n color: rgb(var(--tb-warning));\n}\n\n${root} .alert-info {\n border-color: rgb(var(--tb-info));\n background-color: rgba(var(--tb-info), 0.1);\n color: rgb(var(--tb-info));\n}`);\n\n // Required field indicator\n cssBlocks.push(`/* Required field indicator */\n${root} .required-marker {\n color: rgb(var(--tb-destructive));\n margin-left: 0.25rem;\n}`);\n\n // Link button (text-only button styled like a link)\n cssBlocks.push(`/* Link button */\n${root} .button-link {\n color: rgb(var(--tb-primary));\n background: transparent;\n border: none;\n padding: 0;\n cursor: pointer;\n text-decoration: none;\n transition: color 0.15s ease;\n}\n\n${root} .button-link:hover {\n text-decoration: underline;\n}`);\n\n return cssBlocks.join('\\n\\n');\n}\n","/**\n * Progress Indicator CSS Generator\n *\n * Generates CSS for progress bars, step indicators, and multi-step navigation.\n * Uses theme colors via --tb-* CSS variables and respects theme.motion settings.\n */\n\nimport type { Theme } from '../schema';\n\nexport interface GenerateProgressCssParams {\n themeId: string;\n theme: Theme;\n}\n\n/**\n * Generate progress indicator CSS from theme settings.\n *\n * Creates scoped CSS classes for:\n * - .progress-bar, .progress-fill (bar-style progress)\n * - .step-dot, .step-dot-active, .step-dot-complete (dot indicators)\n * - .step-circle, .step-circle-active, .step-circle-complete (numbered steps)\n * - .step-connector (line between steps)\n *\n * Selectors use :where() for zero specificity, allowing site styles to override easily.\n * Progress indicators always use pill/rounded shapes for visual consistency.\n * Transitions respect theme.motion.level settings.\n */\nexport function generateProgressCss({ themeId, theme }: GenerateProgressCssParams): string {\n const root = `:where([data-theme-scope=\"${themeId}\"])`;\n\n // Respect theme motion settings for transitions\n const hasMotion = theme.motion.level !== 'off';\n const fillTransition = hasMotion ? 'transition: width 0.3s ease-out' : 'transition: none';\n const elementTransition = hasMotion ? 'transition: all 0.2s ease' : 'transition: none';\n\n const cssBlocks: string[] = [];\n\n // Progress bar\n cssBlocks.push(`/* Progress bar */\n${root} .progress-bar {\n height: 0.5rem;\n background-color: rgb(var(--tb-muted));\n border-radius: 9999px;\n overflow: hidden;\n}\n\n${root} .progress-fill {\n height: 100%;\n background-color: rgb(var(--tb-primary));\n ${fillTransition};\n}`);\n\n // Step dots (for dot-style progress)\n cssBlocks.push(`/* Step dots */\n${root} .step-dot {\n width: 0.5rem;\n height: 0.5rem;\n border-radius: 9999px;\n background-color: rgb(var(--tb-muted));\n ${elementTransition};\n}\n\n${root} .step-dot-active {\n width: 2rem;\n background-color: rgb(var(--tb-primary));\n}\n\n${root} .step-dot-complete {\n background-color: rgba(var(--tb-primary), 0.6);\n}`);\n\n // Step circles (for numbered step indicators)\n cssBlocks.push(`/* Step circles (numbered) */\n${root} .step-circle {\n width: 2rem;\n height: 2rem;\n border-radius: 9999px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 0.875rem;\n font-weight: 500;\n background-color: rgb(var(--tb-muted));\n color: rgb(var(--tb-mutedText));\n ${elementTransition};\n}\n\n${root} .step-circle-active {\n background-color: rgb(var(--tb-primary));\n color: rgb(var(--tb-primaryForeground));\n}\n\n${root} .step-circle-complete {\n background-color: rgba(var(--tb-primary), 0.6);\n color: rgb(var(--tb-primaryForeground));\n}`);\n\n // Step connector line\n cssBlocks.push(`/* Step connector */\n${root} .step-connector {\n height: 1px;\n background-color: rgb(var(--tb-border));\n flex: 1;\n}`);\n\n return cssBlocks.join('\\n\\n');\n}\n","export const colorTokens = [\n \"background/base\",\n \"background/elevated\",\n \"surface/base\",\n \"surface/subtle\",\n \"surface/inverted\",\n \"content/primary\",\n \"content/secondary\",\n \"accent/primary\",\n \"accent/secondary\",\n \"border/base\",\n] as const;\n\nexport const typographyTokens = [\n \"display/hero\",\n \"display/section\",\n \"heading/large\",\n \"heading/medium\",\n \"heading/small\",\n \"body/normal\",\n \"body/small\",\n \"caption\",\n] as const;\n\nexport const spacingTokens = [\"none\", \"3xs\", \"2xs\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\", \"2xl\", \"3xl\"] as const;\nexport const radiusTokens = [\"none\", \"xs\", \"sm\", \"md\", \"lg\", \"pill\", \"full\"] as const;\nexport const shadowTokens = [\"none\", \"soft\", \"medium\", \"strong\"] as const;\n\nexport type ThemeTokens = {\n color: Record<(typeof colorTokens)[number], string>;\n typography: Record<(typeof typographyTokens)[number], { fontSize: string; lineHeight: string; fontWeight?: string }>;\n spacing: Record<(typeof spacingTokens)[number], string>;\n radius: Record<(typeof radiusTokens)[number], string>;\n shadow: Record<(typeof shadowTokens)[number], string>;\n palette: Record<string, string>;\n // Note: buttons and cards removed - only needed for CSS generation, not runtime transforms\n};\n\nexport const defaultThemeTokens: ThemeTokens = {\n color: {\n \"background/base\": \"#ffffff\",\n \"background/elevated\": \"#f5f5f5\",\n \"surface/base\": \"#ffffff\",\n \"surface/subtle\": \"#f9f9fb\",\n \"surface/inverted\": \"#111111\",\n \"content/primary\": \"#111111\",\n \"content/secondary\": \"#3f3f46\",\n \"accent/primary\": \"#2563eb\",\n \"accent/secondary\": \"#1d4ed8\",\n \"border/base\": \"#e5e7eb\",\n },\n typography: {\n \"display/hero\": { fontSize: \"clamp(48px, 8vw, 96px)\", lineHeight: \"1.05\", fontWeight: \"700\" },\n \"display/section\": { fontSize: \"clamp(40px, 6vw, 72px)\", lineHeight: \"1.1\", fontWeight: \"700\" },\n \"heading/large\": { fontSize: \"clamp(32px, 4vw, 48px)\", lineHeight: \"1.2\", fontWeight: \"600\" },\n \"heading/medium\": { fontSize: \"clamp(24px, 3vw, 32px)\", lineHeight: \"1.25\", fontWeight: \"600\" },\n \"heading/small\": { fontSize: \"20px\", lineHeight: \"1.3\", fontWeight: \"600\" },\n \"body/normal\": { fontSize: \"16px\", lineHeight: \"1.6\", fontWeight: \"400\" },\n \"body/small\": { fontSize: \"14px\", lineHeight: \"1.5\", fontWeight: \"400\" },\n caption: { fontSize: \"12px\", lineHeight: \"1.4\", fontWeight: \"500\" },\n },\n spacing: {\n none: \"0px\",\n \"3xs\": \"4px\",\n \"2xs\": \"8px\",\n xs: \"12px\",\n sm: \"16px\",\n md: \"24px\",\n lg: \"32px\",\n xl: \"40px\",\n \"2xl\": \"56px\",\n \"3xl\": \"72px\",\n },\n radius: {\n none: \"0px\",\n xs: \"2px\",\n sm: \"4px\",\n md: \"8px\",\n lg: \"12px\",\n pill: \"999px\",\n full: \"9999px\",\n },\n shadow: {\n none: \"none\",\n soft: \"0px 2px 8px rgba(15, 23, 42, 0.08)\",\n medium: \"0px 6px 18px rgba(15, 23, 42, 0.12)\",\n strong: \"0px 12px 36px rgba(15, 23, 42, 0.16)\",\n },\n palette: {\n surface: \"#ffffff\",\n \"neutral-50\": \"#f9fafb\",\n \"neutral-900\": \"#111827\",\n primary: \"#2563eb\",\n \"primary-50\": \"#eff6ff\",\n \"primary-500\": \"#2563eb\",\n \"primary-900\": \"#1d4ed8\",\n secondary: \"#9333ea\",\n \"secondary-50\": \"#f3e8ff\",\n \"secondary-500\": \"#9333ea\",\n \"secondary-900\": \"#4c1d95\",\n accent: \"#f97316\",\n \"accent-50\": \"#fff7ed\",\n \"accent-500\": \"#f97316\",\n \"accent-900\": \"#7c2d12\",\n },\n};\n","import type { HydratedTheme, Theme } from \"../schema\";\nimport { expandPalette, type ExpandedPalette } from \"../palette/expandPalette\";\nimport generateCssVars from \"../palette/generateCssVars\";\nimport { generateShadowCssVars } from \"../styles/shadow\";\nimport { generateButtonCss } from \"../buttons/generateButtonCss\";\nimport { generateCardCss } from \"../cards/generateCardCss\";\nimport { generateAccordionCss } from \"../accordions/generateAccordionCss\";\nimport { generateDefaultAccordionSystem } from \"../accordions/defaults\";\nimport { generateInputCss } from \"../inputs/generateInputCss\";\nimport { generateDefaultInputSystem } from \"../inputs/defaults\";\nimport { generateHeaderCss } from \"../header\";\nimport { generateLayoutCss } from \"../layout\";\nimport { generateStatusCss } from \"../status\";\nimport { generateProgressCss } from \"../progress\";\nimport { defaultThemeTokens, type ThemeTokens } from \"../../system/theme\";\n\nexport type ThemeCssVars = Record<string, string | number>;\n\nexport type ThemeRuntime = {\n hydrated: HydratedTheme;\n cssVars: ThemeCssVars;\n tokens: ThemeTokens;\n paletteTokens: ExpandedPalette;\n buttonCss?: string;\n headerCss?: string;\n cardCss?: string;\n accordionCss?: string;\n inputCss?: string;\n layoutCss?: string;\n statusCss?: string;\n progressCss?: string;\n};\n\nexport function buildThemeRuntime(\n theme: Theme,\n options?: {\n themeId?: string;\n }\n): ThemeRuntime {\n const hydrated = hydrateTheme(theme);\n const cssVars = buildThemeCssVars(hydrated);\n const themeId = options?.themeId ?? 'theme-default';\n\n // Generate button CSS (will use defaults if theme.buttons is undefined)\n const buttonCss = generateButtonCss({\n themeId,\n theme,\n buttonSystem: theme.buttons,\n });\n\n // Generate header CSS\n const headerCss = generateHeaderCss({\n themeId,\n theme,\n });\n\n // Generate card CSS (will use defaults if theme.cards is undefined)\n const cardCss = generateCardCss({\n themeId,\n theme,\n cardSystem: theme.cards,\n });\n\n // Generate accordion CSS (will use defaults if theme.accordions is undefined)\n const accordionSystem = theme.accordions ?? generateDefaultAccordionSystem(theme);\n const accordionCss = generateAccordionCss({\n themeId,\n theme,\n accordionSystem,\n });\n\n // Generate input CSS (will use defaults if theme.inputs is undefined)\n const inputSystem = theme.inputs ?? generateDefaultInputSystem(theme);\n const inputCss = generateInputCss({\n themeId,\n theme,\n inputSystem,\n });\n\n // Generate layout CSS (background, text color for theme scope)\n const layoutCss = generateLayoutCss({\n themeId,\n theme,\n });\n\n // Generate status CSS (alerts, status indicators)\n const statusCss = generateStatusCss({\n themeId,\n theme,\n });\n\n // Generate progress CSS (progress bars, step indicators)\n const progressCss = generateProgressCss({\n themeId,\n theme,\n });\n\n // Build tokens with button system (including defaults if needed)\n // Pass original theme (not hydrated) for default button system generation\n const tokens = buildThemeTokens(hydrated, theme);\n\n return { hydrated, cssVars, tokens, paletteTokens: hydrated.palette, buttonCss, headerCss, cardCss, accordionCss, inputCss, layoutCss, statusCss, progressCss };\n}\n\nexport function hydrateTheme(theme: Theme): HydratedTheme {\n return {\n ...theme,\n palette: expandPalette(theme.palette),\n };\n}\n\nexport function buildThemeCssVars(theme: HydratedTheme): ThemeCssVars {\n const { typography, space, shadow, motion } = theme;\n\n const baseSizes = computeTypeScale(typography.scale, typography.body.size);\n const sized = applyHeadingSizeOverrides(baseSizes, typography);\n\n return {\n ...generateCssVars(theme.palette),\n\n ...generateShadowCssVars(theme),\n\n [\"--font-heading\" as const]: formatFontFamily(typography.headings.default.family),\n [\"--font-body\" as const]: formatFontFamily(typography.body.family),\n [\"--font-weight-heading\" as const]: mapWeight(typography.headings.default.weight),\n [\"--font-weight-body\" as const]: mapWeight(typography.body.weight),\n ...(typography.headings.h1.weight ? ({ [\"--fw-h1\" as const]: mapWeight(typography.headings.h1.weight) }) : {}),\n ...(typography.headings.h2.weight ? ({ [\"--fw-h2\" as const]: mapWeight(typography.headings.h2.weight) }) : {}),\n ...(typography.headings.h3.weight ? ({ [\"--fw-h3\" as const]: mapWeight(typography.headings.h3.weight) }) : {}),\n ...(typography.headings.h4?.weight ? ({ [\"--fw-h4\" as const]: mapWeight(typography.headings.h4.weight) }) : {}),\n ...(typography.headings.h5?.weight ? ({ [\"--fw-h5\" as const]: mapWeight(typography.headings.h5.weight) }) : {}),\n ...(typography.headings.h6?.weight ? ({ [\"--fw-h6\" as const]: mapWeight(typography.headings.h6.weight) }) : {}),\n\n [\"--ls-heading\" as const]: mapLetterSpacing(typography.headings.default.letterSpacing),\n [\"--ls-body\" as const]: mapLetterSpacing(typography.body.letterSpacing),\n ...(typography.headings.h1.letterSpacing\n ? ({ [\"--ls-h1\" as const]: mapLetterSpacing(typography.headings.h1.letterSpacing) })\n : {}),\n ...(typography.headings.h2.letterSpacing\n ? ({ [\"--ls-h2\" as const]: mapLetterSpacing(typography.headings.h2.letterSpacing) })\n : {}),\n ...(typography.headings.h3.letterSpacing\n ? ({ [\"--ls-h3\" as const]: mapLetterSpacing(typography.headings.h3.letterSpacing) })\n : {}),\n\n [\"--lh-heading\" as const]: mapLineHeight(typography.headings.default.lineHeight),\n [\"--lh-body\" as const]: mapLineHeight(typography.body.lineHeight),\n ...(typography.headings.h1.lineHeight\n ? ({ [\"--lh-h1\" as const]: mapLineHeight(typography.headings.h1.lineHeight) })\n : {}),\n ...(typography.headings.h2.lineHeight\n ? ({ [\"--lh-h2\" as const]: mapLineHeight(typography.headings.h2.lineHeight) })\n : {}),\n ...(typography.headings.h3.lineHeight\n ? ({ [\"--lh-h3\" as const]: mapLineHeight(typography.headings.h3.lineHeight) })\n : {}),\n\n [\"--tt-heading\" as const]: mapTextTransform(typography.headings.default.case),\n [\"--fv-heading\" as const]: mapFontVariant(typography.headings.default.case),\n\n [\"--fs-body\" as const]: sized.body,\n [\"--fs-h3\" as const]: sized.h3,\n [\"--fs-h2\" as const]: sized.h2,\n [\"--fs-h1\" as const]: sized.h1,\n\n [\"--shadow-elev\" as const]: mapShadow(shadow.elevation, shadow.softness, shadow.position || 'bottom'),\n\n [\"--space-mult\" as const]: mapSpaceMult(space),\n\n [\"--motion-duration\" as const]: mapMotionDuration(motion.level),\n [\"--motion-ease\" as const]: mapMotionEasing(motion.easing ?? \"standard\"),\n\n [\"--rt-space-y\" as const]: mapRhythm(space),\n };\n}\n\nexport function buildThemeTokens(hydratedTheme: HydratedTheme, _originalTheme: Theme): ThemeTokens {\n const tokens = cloneThemeTokens(defaultThemeTokens);\n const palette = hydratedTheme.palette as Record<string, unknown> | undefined;\n const paletteStrings: Record<string, string> = {};\n if (palette) {\n for (const [key, value] of Object.entries(palette)) {\n if (typeof value === \"string\" && value.trim().length > 0) {\n paletteStrings[key] = value;\n }\n }\n }\n tokens.palette = paletteStrings;\n\n const resolveColor = (...keys: string[]): string | undefined => {\n for (const key of keys) {\n const value = paletteStrings[key];\n if (value) {\n return value;\n }\n }\n return undefined;\n };\n\n const assignColor = (token: keyof ThemeTokens[\"color\"], ...keys: string[]) => {\n const value = resolveColor(...keys);\n if (value) {\n tokens.color[token] = value;\n }\n };\n\n assignColor(\"background/base\", \"background\", \"surface\", \"primary-50\");\n assignColor(\"background/elevated\", \"surface\", \"background\");\n assignColor(\"surface/base\", \"surface\", \"background\");\n assignColor(\"surface/subtle\", \"neutral-100\", \"surface\", \"background\");\n assignColor(\"surface/inverted\", \"neutral-900\", \"text\", \"primary-900\");\n assignColor(\"content/primary\", \"text\", \"body\", \"neutral-900\");\n assignColor(\"content/secondary\", \"mutedText\", \"secondary\", \"neutral-600\");\n assignColor(\"accent/primary\", \"primary\", \"accent\");\n assignColor(\"accent/secondary\", \"accent\", \"secondary\", \"primary-400\");\n assignColor(\"border/base\", \"border\", \"neutral-300\");\n\n // Note: buttons and cards removed from tokens - only needed for CSS generation, not runtime transforms\n // Button and card systems are still generated and used by CSS generators at build time\n\n return tokens;\n}\n\nfunction cloneThemeTokens(source: ThemeTokens): ThemeTokens {\n return JSON.parse(JSON.stringify(source)) as ThemeTokens;\n}\n\nfunction mapWeight(w: \"light\" | \"regular\" | \"medium\" | \"semibold\" | \"bold\") {\n return ({ light: 300, regular: 400, medium: 500, semibold: 600, bold: 700 } as const)[w];\n}\n\nfunction formatFontFamily(family: string, fallback: string = \"sans-serif\") {\n const trimmed = (family || \"\").trim();\n if (!trimmed) return fallback;\n const needsQuotes = /[^a-zA-Z0-9_-]/.test(trimmed);\n const primary = needsQuotes ? `\"${trimmed.replace(/\"/g, '\\\\\"')}\"` : trimmed;\n return `${primary}, ${fallback}`;\n}\n\nfunction _mapRadius(c: \"square\" | \"soft\" | \"rounded\" | \"pill\") {\n return ({ square: \"0px\", soft: \"8px\", rounded: \"16px\", pill: \"9999px\" } as const)[c];\n}\n\nfunction mapShadow(\n level: \"none\" | \"low\" | \"medium\" | \"high\",\n softness: \"crisp\" | \"soft\" | \"hard\" | null,\n position: \"bottom\" | \"bottom-right\" = \"bottom\"\n) {\n if (level === \"none\") return \"none\";\n\n // Define base offsets per elevation level\n const offsets = {\n low: 2,\n medium: 4,\n high: 6,\n };\n\n const offset = offsets[level];\n const xOffset = position === 'bottom-right' ? offset : 0;\n\n // Hard shadows: zero blur, full opacity\n if (softness === \"hard\") {\n return `${xOffset}px ${offset}px 0 0 rgba(0,0,0,1)`;\n }\n\n // Soft vs crisp shadows\n const soft = softness !== \"crisp\";\n\n // For soft/crisp shadows, position affects x-offset similarly\n switch (level) {\n case \"low\":\n return soft\n ? `${xOffset}px 1px 2px rgba(0,0,0,.06)`\n : `${xOffset}px 1px 1px rgba(0,0,0,.12)`;\n case \"medium\":\n return soft\n ? `${xOffset}px 10px 20px rgba(0,0,0,.08)`\n : `${xOffset}px 6px 12px rgba(0,0,0,.16)`;\n case \"high\":\n return soft\n ? `${xOffset}px 25px 50px rgba(0,0,0,.18)`\n : `${xOffset}px 20px 30px rgba(0,0,0,.28)`;\n }\n}\n\nfunction mapSpaceMult(space: \"comfortable\" | \"standard\" | \"dense\") {\n return ({ comfortable: 1.15, standard: 1.0, dense: 0.88 } as const)[space];\n}\n\nfunction mapRhythm(space: \"comfortable\" | \"standard\" | \"dense\") {\n switch (space) {\n case \"comfortable\":\n return \"1.2rem\";\n case \"dense\":\n return \"0.75rem\";\n case \"standard\":\n default:\n return \"1rem\";\n }\n}\n\nfunction mapMotionDuration(level: \"off\" | \"low\" | \"medium\" | \"high\") {\n return ({ off: \"0ms\", low: \"120ms\", medium: \"180ms\", high: \"250ms\" } as const)[level];\n}\n\nfunction mapMotionEasing(e: \"standard\" | \"snappy\" | \"gentle\") {\n return (\n {\n standard: \"cubic-bezier(.2,.8,.2,1)\",\n snappy: \"cubic-bezier(.2,1,.2,1)\",\n gentle: \"cubic-bezier(.15,.85,.15,1)\",\n } as const\n )[e];\n}\n\nfunction computeTypeScale(\n scale: \"minorThird\" | \"majorThird\" | \"perfectFourth\",\n bodySize: \"md\" | \"lg\" | \"xl\"\n) {\n const base = ({ md: 16, lg: 17, xl: 18 } as const)[bodySize];\n const ratio = ({ minorThird: 1.2, majorThird: 1.25, perfectFourth: 1.333 } as const)[scale];\n const h3 = Math.round(base * ratio);\n const h2 = Math.round(h3 * ratio);\n const h1 = Math.round(h2 * ratio);\n return {\n [\"--fs-body\" as const]: `${base}px`,\n [\"--fs-h3\" as const]: `${h3}px`,\n [\"--fs-h2\" as const]: `${h2}px`,\n [\"--fs-h1\" as const]: `${h1}px`,\n };\n}\n\nfunction applyHeadingSizeOverrides(\n base: Record<\"--fs-body\" | \"--fs-h1\" | \"--fs-h2\" | \"--fs-h3\", string>,\n typography: Theme[\"typography\"]\n) {\n const body = base[\"--fs-body\"];\n const h1Base = parseFloat(base[\"--fs-h1\"].replace(\"px\", \"\"));\n const h2Base = parseFloat(base[\"--fs-h2\"].replace(\"px\", \"\"));\n const h3Base = parseFloat(base[\"--fs-h3\"].replace(\"px\", \"\"));\n\n const scaleMap: Record<\"md\" | \"lg\" | \"xl\", number> = { md: 1.0, lg: 1.1, xl: 1.2 };\n\n const h1Scale = typography.headings.h1.size ? scaleMap[typography.headings.h1.size] : 1.0;\n const h2Scale = typography.headings.h2.size ? scaleMap[typography.headings.h2.size] : 1.0;\n const h3Scale = typography.headings.h3.size ? scaleMap[typography.headings.h3.size] : 1.0;\n\n return {\n body,\n h1: `${Math.round(h1Base * h1Scale)}px`,\n h2: `${Math.round(h2Base * h2Scale)}px`,\n h3: `${Math.round(h3Base * h3Scale)}px`,\n } as const;\n}\n\nfunction mapLetterSpacing(s: \"tight\" | \"normal\" | \"loose\") {\n return ({ tight: \"-0.01em\", normal: \"0em\", loose: \"0.02em\" } as const)[s];\n}\n\nfunction mapLineHeight(s: \"normal\" | \"relaxed\" | \"loose\") {\n return ({ normal: \"1.5\", relaxed: \"1.65\", loose: \"1.8\" } as const)[s];\n}\n\nfunction mapTextTransform(c: \"uppercase\" | \"normal\" | \"smallCaps\" | null) {\n if (c === \"uppercase\") return \"uppercase\";\n return \"none\";\n}\n\nfunction mapFontVariant(c: \"uppercase\" | \"normal\" | \"smallCaps\" | null) {\n if (c === \"smallCaps\") return \"small-caps\";\n return \"normal\";\n}\n","import * as React from \"react\";\nimport { getBlockDefinition } from \"./system\";\nimport { makeDefaultBlockComponent } from \"./system/componentFactory\";\n// No React context required; block metadata is passed directly to registry components via resolver.\nimport type { ResolverContext, SystemBlockComponent } from \"./system\";\nimport type { Block, PageOutline } from \"./structure/schema\";\nimport type { Theme } from \"./theme/schema\";\nimport type { SdkCustomBlock } from \"./system/manifest/schema\";\nimport { createManifestValidator } from \"./system/manifest/validation\";\nimport { buildThemeRuntime } from \"./theme/runtime/buildThemeRuntime\";\nimport type { ThemeTokens } from \"./system/theme\";\nimport type { RouteMap } from \"./system/transforms\";\nimport { hydrateManifestLinks } from \"./system/manifest/hydrateLinks\";\nimport { getFragmentRegistry } from \"./system/fragments\";\nimport { getDefaultComponentRegistry } from \"./system/runtime\";\nimport { textColorStyle } from \"./theme/utils/colorStyles\";\nimport { transformSdkBlockToDefinition } from \"./sdkBlockTransform\";\n\n/**\n * Occurrence context for event pages.\n * Passed through to blocks that need occurrence information (e.g., event-registration).\n */\nexport type OccurrenceContextData = {\n id: string;\n seriesId: string;\n startsAt: string;\n endsAt: string;\n capacityOverride?: number | null;\n overrides?: Record<string, unknown> | null;\n};\n\ntype PageRendererDataContext = {\n siteId?: string;\n pageId?: string;\n // Optional pre-resolved data for blocks, keyed by block ID\n resolvedData?: Record<string, Record<string, unknown>>;\n previewStage?: 'published' | 'preview';\n routes?: RouteMap;\n // Occurrence context for event pages (from URL like /events/yoga/2025-01-15)\n occurrenceContext?: OccurrenceContextData | null;\n // Content entry data for template pages\n contentEntry?: Record<string, unknown> | null;\n};\n\n/**\n * Block override component type.\n * Override components receive the same props as default block components.\n *\n * Uses `any` for content type to allow typed components (e.g., SystemBlockComponentProps<HeroContent>)\n * to be used as overrides without type errors. The actual content type is validated at runtime\n * based on the block kind.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type BlockOverrideComponent = SystemBlockComponent<any>;\n\n/**\n * Map of block kinds to custom override components.\n * Keys can be either:\n * - Full block kind: \"block.hero\"\n * - Short form: \"hero\" (will match \"block.hero\")\n *\n * @example\n * ```tsx\n * const overrides: BlockOverrides = {\n * 'hero': CustomHero, // CustomHero: SystemBlockComponentProps<HeroContent>\n * 'bodyText': CustomBodyText, // CustomBodyText: SystemBlockComponentProps<BodyTextContent>\n * };\n * ```\n */\nexport type BlockOverrides = Record<string, BlockOverrideComponent>;\n\n/**\n * SDK site configuration for custom block rendering.\n * Minimal type containing only what PageRenderer needs.\n */\nexport type SdkConfigForRenderer = {\n customBlocks?: SdkCustomBlock[];\n};\n\ninterface PageRendererProps {\n theme: Theme;\n page: PageOutline | null;\n usePlaceholders?: boolean;\n dataContext?: PageRendererDataContext;\n routeMap?: RouteMap;\n // Optional: wrap rendered block output (e.g., for EditableBlockProvider)\n wrapBlock?: (blockId: string, rendered: React.ReactNode) => React.ReactNode;\n // Optional: pass a custom component registry into block components (e.g., editor-aware primitives)\n registry?: ResolverContext[\"registry\"];\n themeTokens?: ThemeTokens;\n // Optional: custom components to override default block rendering (SSR-safe, no context needed)\n blockOverrides?: BlockOverrides;\n // Optional: SDK site configuration for custom block definitions\n sdkConfig?: SdkConfigForRenderer | null;\n}\n\nexport default function PageRenderer({\n theme,\n page,\n usePlaceholders = false,\n dataContext,\n wrapBlock,\n registry,\n themeTokens: providedThemeTokens,\n routeMap,\n blockOverrides,\n sdkConfig,\n}: PageRendererProps) {\n if (!page || page.blocks.length === 0) {\n return (\n <div className=\"p-6 text-sm\" style={textColorStyle('mutedText')}>\n No blocks found.\n </div>\n );\n }\n\n const themeTokens = providedThemeTokens ?? buildThemeRuntime(theme).tokens;\n\n // Resolve a default component registry when one isn't explicitly provided\n const resolvedRegistry = registry ?? getDefaultComponentRegistry();\n\n return (\n <div>\n {page.blocks.map((block, index) => {\n const blockKey = block.id ?? `${block.kind}-${index}`;\n // Clean block kind: \"block.hero\" → \"hero\"\n const cleanKind = block.kind.replace(/^block\\./, '');\n return (\n <section\n key={blockKey}\n className={`block-${cleanKind}`}\n data-block={cleanKind}\n data-block-id={block.id ?? undefined}\n data-block-kind={block.kind}\n >\n <MemoBlockSection\n themeTokens={themeTokens}\n themeConfig={theme}\n block={block}\n usePlaceholders={usePlaceholders}\n dataContext={dataContext}\n blockKey={blockKey}\n registry={resolvedRegistry}\n routeMap={routeMap}\n wrapBlock={wrapBlock}\n blockOverrides={blockOverrides}\n sdkConfig={sdkConfig}\n />\n </section>\n );\n })}\n </div>\n );\n}\n\ntype MemoSectionProps = {\n themeTokens: ThemeTokens;\n themeConfig: Theme;\n block: Block;\n usePlaceholders: boolean;\n dataContext?: PageRendererDataContext;\n blockKey: string;\n registry?: ResolverContext[\"registry\"];\n routeMap?: RouteMap;\n wrapBlock?: (blockId: string, rendered: React.ReactNode) => React.ReactNode;\n blockOverrides?: BlockOverrides;\n sdkConfig?: SdkConfigForRenderer | null;\n};\n\n/**\n * Look up a block override component by block kind.\n * Supports both full (\"block.hero\") and short (\"hero\") keys.\n */\nfunction getBlockOverride(\n blockKind: string,\n overrides?: BlockOverrides\n): BlockOverrideComponent | undefined {\n if (!overrides) return undefined;\n\n // Try exact match first (e.g., \"block.hero\")\n if (overrides[blockKind]) {\n return overrides[blockKind];\n }\n\n // Try short form (e.g., \"hero\" for \"block.hero\")\n const shortKind = blockKind.replace(/^block\\./, '');\n if (overrides[shortKind]) {\n return overrides[shortKind];\n }\n\n return undefined;\n}\n\nconst blockComponentCache = new Map<string, SystemBlockComponent<Record<string, unknown>>>();\n\nfunction getCachedBlockComponent(\n manifest: NonNullable<ReturnType<typeof getBlockDefinition>>['manifest']\n): SystemBlockComponent<Record<string, unknown>> {\n const key = `${manifest.name}`;\n const cached = blockComponentCache.get(key);\n if (cached) return cached;\n const created = makeDefaultBlockComponent({ manifest });\n blockComponentCache.set(key, created);\n return created;\n}\n\n/**\n * Memoized block section component.\n *\n * Custom memoization prevents render loops during editing by explicitly checking\n * referential equality of all props that affect rendering. Standard React.memo\n * wouldn't catch all the render triggers from the editor store.\n */\nconst MemoBlockSection = React.memo(function MemoBlockSection({\n themeTokens,\n themeConfig,\n block,\n usePlaceholders,\n dataContext,\n registry,\n routeMap,\n wrapBlock,\n blockOverrides,\n sdkConfig,\n}: MemoSectionProps) {\n // Check for custom override component first\n const OverrideComponent = getBlockOverride(block.kind, blockOverrides);\n\n // Get definition - check SDK custom blocks if system lookup fails\n let definition = getBlockDefinition(block.kind);\n if (!definition && block.kind.startsWith('custom.') && sdkConfig?.customBlocks) {\n const sdkBlock = sdkConfig.customBlocks.find(b => b.id === block.kind);\n if (sdkBlock) {\n definition = transformSdkBlockToDefinition(sdkBlock);\n }\n }\n\n if (!definition) {\n const rendered = fallback(`No renderer available for block kind \"${block.kind}\".`);\n return wrapBlock && block.id ? <>{wrapBlock(block.id, rendered)}</> : <>{rendered}</>;\n }\n\n const content = getRenderableContent(block);\n\n const validator = createManifestValidator(definition.manifest, { allowNull: false });\n const parsed = validator.safeParse(content);\n // Dev logging for manifest validation issues before fallback kicks in\n try {\n const env = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env?.NODE_ENV;\n if (env !== 'production' && !parsed.success && !usePlaceholders) {\n console.warn('[blocks:PageRenderer] manifest validation failed', {\n blockId: block.id ?? null,\n blockKind: block.kind,\n content: summarizeValue(content),\n expectedFields: (definition.manifest.fields ?? []).map((f: any) => ({ id: f.id, type: f.type, required: !!f.required })),\n issues: (parsed as any)?.error?.issues ?? null,\n });\n }\n } catch {}\n\n let data: Record<string, unknown>;\n if (parsed.success) {\n data = parsed.data;\n } else if (usePlaceholders) {\n const placeholder = validator.safeParse({});\n if (placeholder.success) {\n data = placeholder.data;\n } else {\n const rendered = fallback(`Unable to render block kind \"${block.kind}\".`);\n return wrapBlock && block.id ? <>{wrapBlock(block.id, rendered)}</> : <>{rendered}</>;\n }\n } else {\n const rendered = fallback(`Invalid content for block kind \"${block.kind}\".`);\n return wrapBlock && block.id ? <>{wrapBlock(block.id, rendered)}</> : <>{rendered}</>;\n }\n\n try {\n // Use override component if provided, otherwise use manifest-based default\n const BlockComponent = OverrideComponent ?? getCachedBlockComponent(definition.manifest);\n const pathBase = typeof block.id === 'string' && block.id.length > 0 ? `blocks.${block.id}.` : undefined;\n const routes = routeMap ?? dataContext?.routes;\n const hydratedContent = routes\n ? hydrateManifestLinks(definition.manifest, data, routes)\n : data;\n\n const resolved = resolveBlockData({\n block,\n definition,\n dataContext,\n });\n\n const rootContext = {\n $root: {\n siteId: dataContext?.siteId ?? null,\n pageId: dataContext?.pageId ?? null,\n previewStage: dataContext?.previewStage ?? 'published',\n ...(routes ? { routes } : {}),\n // Occurrence and content entry context for template pages\n occurrenceContext: dataContext?.occurrenceContext ?? null,\n contentEntry: dataContext?.contentEntry ?? null,\n },\n };\n\n const blockBindings = (block as any).bindings ?? undefined;\n const fragmentRegistry = getFragmentRegistry();\n\n const rendered = (\n <BlockComponent\n content={hydratedContent}\n theme={themeTokens}\n themeConfig={themeConfig}\n registry={registry}\n pathBase={pathBase}\n data={resolved}\n blockId={block.id ?? null}\n blockKind={block.kind}\n blockBindings={blockBindings}\n viewModelOverrides={rootContext}\n fragmentRegistry={fragmentRegistry}\n />\n );\n\n // Apply wrapper if provided (e.g., EditableBlockProvider)\n if (wrapBlock && block.id) {\n return <>{wrapBlock(block.id, rendered)}</>;\n }\n\n return <>{rendered}</>;\n } catch {\n const rendered = usePlaceholders\n ? fallback(`Unable to render block kind \"${block.kind}\".`)\n : fallback(`Invalid content for block kind \"${block.kind}\".`);\n return wrapBlock && block.id ? <>{wrapBlock(block.id, rendered)}</> : <>{rendered}</>;\n }\n}, (prev, next) => {\n return (\n prev.block === next.block &&\n prev.registry === next.registry &&\n prev.dataContext === next.dataContext &&\n prev.themeTokens === next.themeTokens &&\n prev.themeConfig === next.themeConfig &&\n prev.routeMap === next.routeMap &&\n prev.usePlaceholders === next.usePlaceholders &&\n prev.wrapBlock === next.wrapBlock &&\n prev.blockOverrides === next.blockOverrides &&\n prev.sdkConfig === next.sdkConfig\n );\n});\n\nfunction fallback(message: string) {\n return (\n <div className=\"p-6 text-sm\" style={textColorStyle('mutedText')}>\n {message}\n </div>\n );\n}\n\ntype ResolveBlockDataArgs = {\n block: Block;\n definition: NonNullable<ReturnType<typeof getBlockDefinition>>;\n dataContext?: PageRendererDataContext;\n};\n\nfunction resolveBlockData({ block, definition, dataContext }: ResolveBlockDataArgs) {\n if (!definition.dataLoaders || Object.keys(definition.dataLoaders).length === 0) {\n return undefined;\n }\n const blockId = block.id ?? null;\n if (!blockId) return undefined;\n const raw = dataContext?.resolvedData?.[blockId];\n if (!raw || typeof raw !== 'object') {\n return {};\n }\n return { ...(raw as Record<string, unknown>) };\n}\n\n/**\n * Resolves block content based on stage priority.\n * For draft/preview: draftContent takes priority over content.\n * For published: content is the source of truth.\n * Returns empty object if no content exists (validator will handle placeholders if needed).\n */\nfunction getRenderableContent(block: Block): Record<string, unknown> {\n // Priority: draftContent > content (publishedContent is legacy and unused)\n const source = (block as any).draftContent ?? (block as any).content ?? {};\n\n if (!isRecord(source)) {\n return {};\n }\n\n return source;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\n// Dev-only: summarize content to avoid huge console logs\nfunction summarizeValue(value: unknown): unknown {\n try {\n if (value === null || value === undefined) return value;\n if (typeof value === 'string') return value.length > 160 ? `${value.slice(0, 160)}…` : value;\n if (typeof value === 'number' || typeof value === 'boolean') return value;\n if (Array.isArray(value)) return `[array(${value.length})]`;\n if (typeof value === 'object') {\n const rec = value as Record<string, unknown>;\n const keys = Object.keys(rec);\n const preview: Record<string, unknown> = {};\n for (const k of keys.slice(0, 8)) {\n const v = (rec as any)[k];\n if (k === 'body' || k === 'content') {\n const isDocWrapper = !!(v && typeof v === 'object' && 'doc' in (v as any));\n const isDoc = !!(v && typeof v === 'object' && (v as any).type === 'doc');\n preview[k] = isDocWrapper ? '{doc}' : isDoc ? '{type:doc}' : summarizeValue(v);\n } else {\n preview[k] = summarizeValue(v);\n }\n }\n return { keys, preview };\n }\n return String(value);\n } catch {\n return '[uninspectable]';\n }\n}\n","import { z } from \"zod\";\n\nimport {\n fieldSchema,\n type BlockManifest,\n type FieldDefinition,\n type TextFieldDefinition,\n type SelectFieldDefinition,\n type ReferenceFieldDefinition,\n type RepeaterFieldDefinition,\n type SlugFieldDefinition,\n type UrlFieldDefinition,\n} from \"./schema\";\nimport { buildRichTextSchema as buildSharedRichTextSchema } from \"./richTextSchema\";\n\ntype FieldShape = Record<string, z.ZodTypeAny>;\n\ntype ValidatorOptions = {\n allowNull?: boolean;\n /**\n * When true, required fields can be missing (undefined).\n * Use for autosave scenarios where content may be incomplete.\n */\n allowIncomplete?: boolean;\n};\n\nexport function createManifestValidator(\n manifestOrFields: BlockManifest | FieldDefinition[],\n options: ValidatorOptions = {},\n): z.ZodType<Record<string, unknown>> {\n const allowNull = options.allowNull ?? true;\n const allowIncomplete = options.allowIncomplete ?? false;\n const shape: FieldShape = {};\n\n const fields: FieldDefinition[] = Array.isArray(manifestOrFields)\n ? (manifestOrFields as FieldDefinition[])\n : (((manifestOrFields as BlockManifest).fields as FieldDefinition[] | undefined) ?? []);\n\n for (const field of fields) {\n shape[field.id] = buildFieldSchema(field, allowNull, allowIncomplete);\n }\n\n return z.object(shape).catchall(z.unknown()).passthrough();\n}\n\nfunction buildFieldSchema(field: FieldDefinition, allowNull: boolean, allowIncomplete: boolean = false): z.ZodTypeAny {\n const required = Boolean(field.required);\n let schema: z.ZodTypeAny;\n\n switch (field.type) {\n case \"text\":\n schema = buildTextSchema(field);\n break;\n case \"richText\":\n schema = buildRichTextSchema();\n break;\n case \"media\": {\n // Media fields use record schema for the media object\n const baseMediaSchema = z.record(z.string(), z.unknown());\n // For optional media fields, null is ALWAYS valid (represents \"no media selected\")\n // regardless of allowNull flag. For required fields, null is controlled by allowNull.\n const isRequired = Boolean(field.required);\n schema = isRequired ? baseMediaSchema : baseMediaSchema.nullable();\n break;\n }\n case \"boolean\":\n schema = z.boolean();\n break;\n case \"slug\":\n schema = buildSlugSchema(field);\n break;\n case \"url\":\n schema = buildUrlSchema(field);\n break;\n case \"link\":\n schema = buildLinkSchema();\n break;\n case \"select\":\n schema = buildSelectSchema(field);\n break;\n case \"reference\":\n schema = buildReferenceSchema(field);\n break;\n case \"repeater\":\n schema = buildRepeaterSchema(field, allowNull, allowIncomplete);\n break;\n case \"group\":\n schema = buildGroupSchema(field, allowNull, allowIncomplete);\n break;\n default:\n schema = z.unknown();\n break;\n }\n\n return finalizeSchema(schema, required, allowNull, allowIncomplete);\n}\n\nfunction buildTextSchema(field: TextFieldDefinition) {\n const ui = (field as any)?.ui ?? {}\n const inputType: 'text' | 'email' | 'tel' | 'number' | undefined = ui?.inputType\n let schema: z.ZodTypeAny\n\n if (inputType === 'number') {\n schema = z.coerce.number()\n if (typeof ui?.min === 'number') schema = (schema as z.ZodNumber).min(ui.min)\n if (typeof ui?.max === 'number') schema = (schema as z.ZodNumber).max(ui.max)\n } else {\n schema = z.string()\n if (inputType === 'email') {\n schema = (schema as z.ZodString).email(`${field.label} must be a valid email`)\n }\n if (inputType === 'tel') {\n const TEL_RE = /^[+()0-9\\s\\-]{3,}$/\n schema = (schema as z.ZodString).regex(TEL_RE, `${field.label} must be a valid phone number`)\n }\n if (ui?.pattern) {\n try {\n const re = new RegExp(ui.pattern)\n schema = (schema as z.ZodString).regex(re, `${field.label} is not in the correct format`)\n } catch {}\n }\n if (field.maxLength) {\n schema = (schema as z.ZodString).max(field.maxLength, `${field.label} must have at most ${field.maxLength} characters`)\n }\n if (field.required) {\n schema = (schema as z.ZodString).min(1, `${field.label} is required`)\n }\n }\n\n return schema\n}\n\nfunction buildRichTextSchema() {\n // Use shared rich text schema for consistency across packages\n return buildSharedRichTextSchema();\n}\n\nconst SLUG_PATTERN = /^(?:[a-z0-9]+(?:-[a-z0-9]+)*)(?:\\/(?:[a-z0-9]+(?:-[a-z0-9]+)*))*$/;\n\nfunction buildSlugSchema(field: SlugFieldDefinition) {\n const message = `${field.label} must contain lowercase letters, numbers, and dashes`;\n let schema = z.string().regex(SLUG_PATTERN, message);\n\n if (field.maxLength) {\n schema = schema.max(field.maxLength, `${field.label} must be at most ${field.maxLength} characters`);\n }\n\n if (field.required) {\n schema = schema.min(1, `${field.label} is required`);\n }\n\n return schema;\n}\n\nconst ALLOWED_URL_PROTOCOLS = [\"http:\", \"https:\"] as const;\n\nfunction buildUrlSchema(field: UrlFieldDefinition) {\n const message = `${field.label} must be a valid URL`;\n\n const validate = (value: string) => {\n if (!value) {\n return !field.required;\n }\n if (field.allowRelative && value.startsWith(\"/\")) {\n return true;\n }\n try {\n const parsed = new URL(value);\n return ALLOWED_URL_PROTOCOLS.includes(parsed.protocol as (typeof ALLOWED_URL_PROTOCOLS)[number]);\n } catch {\n return false;\n }\n };\n\n let schema = z.string().trim().refine(validate, message);\n\n if (field.required) {\n schema = schema.min(1, `${field.label} is required`);\n }\n\n return schema;\n}\n\nfunction buildLinkSchema() {\n const nullableString = z.union([z.string().min(1), z.null()]);\n\n const internal = z\n .object({\n kind: z.literal(\"internal\"),\n routeId: z.string().min(1),\n entityId: z.string().min(1).optional(),\n entityType: z.enum([\"page\", \"content\"]).optional(),\n href: nullableString.optional(),\n title: nullableString.optional(),\n typeLabel: nullableString.optional(),\n contentTypeKey: nullableString.optional(),\n contentTypeName: nullableString.optional(),\n updatedAt: nullableString.optional(),\n })\n .passthrough();\n\n const external = z\n .object({\n kind: z.literal(\"external\"),\n href: z.string().min(1),\n })\n .passthrough();\n\n const custom = z\n .object({\n kind: z.literal(\"url\"),\n href: z.string().min(1),\n })\n .passthrough();\n\n return z.union([internal, external, custom]);\n}\n\nfunction buildSelectSchema(field: SelectFieldDefinition) {\n // If the field uses sdkSelect widget, options come from SDK config at runtime\n // and aren't known to the blocks package - accept any string value.\n // Validation is handled by the CMS editor which has access to SDK options.\n const ui = field.ui as { widget?: string } | undefined;\n if (ui?.widget === 'sdkSelect') {\n const anyStringSchema = z.string();\n if (field.multiple) {\n const arraySchema = z.array(anyStringSchema);\n return field.required ? arraySchema : arraySchema.nullable();\n }\n return field.required ? anyStringSchema : anyStringSchema.nullable();\n }\n\n const values = field.options.map((option) => option.value);\n const valueSchema = z\n .string()\n .refine((value) => values.includes(value), `${field.label} must be one of: ${values.join(\", \")}`);\n\n if (field.multiple) {\n const arraySchema = z.array(valueSchema);\n return field.required ? arraySchema : arraySchema.nullable();\n }\n\n return field.required ? valueSchema : valueSchema.nullable();\n}\n\nfunction buildReferenceSchema(field: ReferenceFieldDefinition) {\n let schema = z.string();\n if (field.required) {\n schema = schema.min(1, `${field.label} is required`);\n }\n return schema;\n}\n\nfunction buildRepeaterSchema(field: RepeaterFieldDefinition, allowNull: boolean, allowIncomplete: boolean) {\n const parsed = fieldSchema.array().parse(field.schema?.fields ?? []) as FieldDefinition[];\n const childShape: FieldShape = {};\n\n for (const child of parsed) {\n if (child.type === 'group' && (child.ui as any)?.flattenInRepeater) {\n const groupParsed = fieldSchema.array().parse(child.schema?.fields ?? []) as FieldDefinition[];\n for (const gc of groupParsed) {\n childShape[gc.id] = buildFieldSchema(gc, allowNull, allowIncomplete);\n }\n } else {\n childShape[child.id] = buildFieldSchema(child, allowNull, allowIncomplete);\n }\n }\n\n let schema = z.object(childShape).catchall(z.unknown()).passthrough();\n let arraySchema = z.array(schema);\n\n if (typeof field.minItems === \"number\") {\n arraySchema = arraySchema.min(field.minItems);\n }\n if (typeof field.maxItems === \"number\") {\n arraySchema = arraySchema.max(field.maxItems);\n }\n\n return arraySchema;\n}\n\nfunction buildGroupSchema(field: any, allowNull: boolean, allowIncomplete: boolean) {\n const parsed = fieldSchema.array().parse(field.schema?.fields ?? []) as FieldDefinition[];\n const childShape: FieldShape = {};\n for (const child of parsed) {\n childShape[child.id] = buildFieldSchema(child, allowNull, allowIncomplete);\n }\n return z.object(childShape).catchall(z.unknown()).passthrough();\n}\n\nfunction finalizeSchema(\n schema: z.ZodTypeAny,\n required: boolean,\n allowNull: boolean,\n allowIncomplete: boolean = false,\n): z.ZodTypeAny {\n if (required) {\n if (allowIncomplete) {\n // For autosave scenarios: accept value, null, OR undefined (missing)\n return allowNull ? schema.or(z.null()).optional() : schema.optional();\n }\n // Normal required field: accept value, and optionally null (but NOT undefined)\n return allowNull ? schema.or(z.null()) : schema;\n }\n return allowNull ? schema.optional().nullable() : schema.optional();\n}\n","import { z } from 'zod'\n\n/**\n * Shared Rich Text Schema\n *\n * This module provides a single source of truth for TipTap rich text validation\n * across both the block-form editor and the block rendering system.\n *\n * Format compatibility:\n * - Unwrapped format (new): { type: 'doc', content: [...] }\n * - Wrapped format (legacy): { doc: { type: 'doc', content: [...] } }\n *\n * Both formats are supported for backward compatibility during migration.\n */\n\n/**\n * TipTap document node schema (recursive structure)\n *\n * Supports the full TipTap document structure including:\n * - type: Node type (e.g., 'doc', 'paragraph', 'text')\n * - content: Nested array of child nodes\n * - text: Text content for text nodes\n * - attrs: Node attributes (e.g., alignment, color)\n * - marks: Text formatting marks (e.g., bold, italic)\n */\nexport const TipTapNodeSchema: z.ZodType<any> = z.lazy(() =>\n z.object({\n type: z.string(),\n content: z.array(TipTapNodeSchema).optional(),\n text: z.string().optional(),\n attrs: z.record(z.string(), z.any()).optional(),\n marks: z.array(z.any()).optional(),\n }),\n)\n\n/**\n * Rich text value schema\n *\n * Accepts both wrapped { doc: {...} } and unwrapped { type: 'doc', ... } formats\n * for backward compatibility during migration from wrapped to unwrapped format.\n *\n * Unwrapped format is preferred going forward as it's more direct and matches\n * TipTap's native structure.\n */\nexport const RichTextValueSchema = z.union([\n // New format: TipTap document directly\n TipTapNodeSchema,\n // Legacy format: wrapped in { doc: {...} }\n z.object({\n doc: TipTapNodeSchema,\n }),\n])\n\n/**\n * Build Zod validation schema for rich text fields\n *\n * @param options - Optional configuration\n * @param options.required - If true, validates that content is not empty\n * @param options.label - Field label for error messages (defaults to 'This field')\n * @returns Zod schema for rich text validation\n *\n * @example\n * // Basic usage\n * const schema = buildRichTextSchema()\n *\n * @example\n * // Required field with custom label\n * const schema = buildRichTextSchema({ required: true, label: 'Description' })\n */\n/**\n * TypeScript type for a TipTap document node\n *\n * Use this type for rich text content fields in block definitions.\n * Defined explicitly (rather than inferred) because recursive Zod schemas\n * require `z.ZodType<any>` which loses type information.\n */\nexport type TipTapNode = {\n type: string;\n content?: TipTapNode[];\n text?: string;\n attrs?: Record<string, unknown>;\n marks?: Array<{ type: string; attrs?: Record<string, unknown> }>;\n};\n\nexport function buildRichTextSchema(options?: { required?: boolean; label?: string }) {\n let schema = RichTextValueSchema\n\n if (options?.required) {\n const label = options.label ?? 'This field'\n // For required fields, ensure doc has actual content (not just empty paragraph)\n schema = schema.refine(\n (val) => {\n // Handle both wrapped { doc: {...} } and unwrapped { type: 'doc', ... } formats\n const doc = (val as any).doc ?? val\n const content = doc?.content\n if (!content || content.length === 0) return false\n // Check if it's just an empty paragraph\n if (content.length === 1 && content[0].type === 'paragraph' && !content[0].content) {\n return false\n }\n return true\n },\n {\n message: `${label} is required`,\n },\n )\n }\n\n return schema\n}\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { ctaButton } from \"../../node/fragments\";\n\nexport const headerCtaFragment: FragmentDefinition = defineFragment({\n id: \"headerCta\",\n title: \"Header CTA\",\n description: \"Single call-to-action button for the site header.\",\n fields: [\n {\n id: \"cta\",\n type: \"group\",\n label: \"Call to action\",\n description: \"Primary action button displayed on CTA variant layouts.\",\n schema: {\n fields: [\n {\n id: \"label\",\n type: \"text\",\n label: \"Label\",\n description: \"Button label shown in the header.\",\n },\n {\n id: \"link\",\n type: \"link\",\n label: \"Link\",\n description: \"Select an internal page or provide a custom destination.\",\n },\n {\n id: \"variant\",\n type: \"select\",\n label: \"Style\",\n defaultValue: \"primary\",\n options: [\n { value: \"primary\", label: \"Primary\" },\n { value: \"secondary\", label: \"Secondary\" },\n { value: \"outline\", label: \"Outline\" },\n ],\n },\n ],\n },\n },\n ],\n layout: [\n ctaButton({\n basePath: \"cta\", // Relative path\n whenPath: \"cta.label\", // Relative path\n }),\n ],\n});\n","import { defineFragment, type FragmentDefinition } from \"../types\";\nimport { headingGroup, ctaButton } from \"../../node/fragments\";\nimport { createButtonGroup } from \"../../fields/button\";\n\nexport const singleButtonFragment: FragmentDefinition = defineFragment({\n id: \"singleButton\",\n title: \"Single Button Content\",\n description: \"Heading and primary button for the single button block.\",\n fields: [\n {\n id: \"title\",\n type: \"text\",\n label: \"Title\",\n required: true,\n maxLength: 120,\n },\n createButtonGroup({\n showGroupLabel: true,\n groupId: \"button\",\n groupLabel: \"Button\",\n flattenInRepeater: false,\n }),\n ],\n layout: [\n headingGroup({ titlePath: \"title\" }), // Relative path\n ctaButton({ basePath: \"button\" }), // Relative path\n ],\n});\n","/**\n * Lazy fragment registration.\n * This module provides a synchronous lazy initialization mechanism\n * that registers all fragments on first access.\n */\n\nimport type { FragmentDefinition } from './types';\n\n// Import all fragment definitions at module load time\nimport { bodyCopyFragment } from './library/bodyCopy';\nimport { heroCopyFragment } from './library/heroCopy';\nimport { ctaRowFragment } from './library/ctaRow';\nimport { ctaCopyFragment } from './library/ctaCopy';\nimport { testimonialsHeadingFragment } from './library/testimonialsHeading';\nimport { testimonialsCarouselFragment } from './library/testimonialsCarousel';\nimport { formCopyFragment } from './library/formCopy';\nimport { formEmbedFragment } from './library/formEmbed';\nimport { footerBottomTextFragment } from './library/footerBottomText';\nimport { footerLinkGroupsFragment } from './library/footerLinkGroups';\nimport { headerCtaFragment } from './library/headerCta';\nimport { singleButtonFragment } from './library/singleButton';\nimport { blogFeaturedPostFragment } from './library/blogFeaturedPost';\nimport { blogListGridFragment } from './library/blogListGrid';\nimport { blogListStackFragment } from './library/blogListStack';\nimport { faqHeadingFragment } from './library/faqHeading';\nimport { faqAccordionFragment } from './library/faqAccordion';\nimport { cardFragment } from './library/card';\nimport { headingFragment } from './library/heading';\nimport { richTextFragment } from './library/richText';\n\n// Track initialization state\nlet initialized = false;\n\n// All fragments to register\nconst ALL_FRAGMENTS: FragmentDefinition[] = [\n bodyCopyFragment,\n heroCopyFragment,\n ctaRowFragment,\n ctaCopyFragment,\n testimonialsHeadingFragment,\n testimonialsCarouselFragment,\n formCopyFragment,\n formEmbedFragment,\n footerBottomTextFragment,\n footerLinkGroupsFragment,\n headerCtaFragment,\n singleButtonFragment,\n blogFeaturedPostFragment,\n blogListGridFragment,\n blogListStackFragment,\n faqHeadingFragment,\n faqAccordionFragment,\n cardFragment,\n headingFragment,\n richTextFragment,\n];\n\n/**\n * Register all fragment definitions lazily.\n * This function is called by the registry on first access.\n *\n * @param registerFn - Function to register a single fragment\n */\nexport function lazyRegisterFragments(registerFn: (fragment: FragmentDefinition) => void): void {\n if (initialized) return;\n\n // Register each fragment\n ALL_FRAGMENTS.forEach(registerFn);\n\n initialized = true;\n}\n\n/**\n * Reset the initialization flag.\n * Used by clearFragmentRegistry() to allow re-initialization.\n */\nexport function resetLazyInit(): void {\n initialized = false;\n}\n","import type { FragmentDefinition } from './types';\nimport { lazyRegisterFragments, resetLazyInit } from './lazyInit';\n\n/**\n * Central registry of all available fragments.\n * Fragments are registered lazily on first access.\n */\nexport type FragmentRegistry = Record<string, FragmentDefinition>;\n\n// Global fragment registry\nconst fragmentRegistry: FragmentRegistry = {};\n\n/**\n * Ensure all fragments are registered.\n * This is called automatically by getFragmentRegistry() and getFragment().\n * Can also be called explicitly to force registration.\n */\nfunction ensureInitialized(): void {\n lazyRegisterFragments((fragment) => {\n if (!fragmentRegistry[fragment.id]) {\n fragmentRegistry[fragment.id] = fragment;\n }\n });\n}\n\n/**\n * Register a fragment definition in the global registry.\n * Fragments should be registered at module load time (not runtime).\n *\n * @param fragment - The fragment definition to register\n * @throws Error if fragment ID is already registered\n */\nexport function registerFragment(fragment: FragmentDefinition): void {\n if (fragmentRegistry[fragment.id]) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`[fragments] Fragment \"${fragment.id}\" already registered, skipping duplicate`);\n }\n return;\n }\n fragmentRegistry[fragment.id] = fragment;\n}\n\n/**\n * Get a fragment definition by ID.\n *\n * @param id - The fragment ID to look up\n * @returns The fragment definition, or undefined if not found\n */\nexport function getFragment(id: string): FragmentDefinition | undefined {\n ensureInitialized();\n return fragmentRegistry[id];\n}\n\n/**\n * List all registered fragments, optionally filtered by category.\n *\n * @param category - Optional category filter ('content', 'media', 'interactive', 'layout')\n * @returns Array of fragment definitions\n */\nexport function listFragments(category?: string): FragmentDefinition[] {\n ensureInitialized();\n const all = Object.values(fragmentRegistry);\n return category ? all.filter(f => f.category === category) : all;\n}\n\n/**\n * Get the full fragment registry.\n * Useful for passing to runtime components.\n *\n * @returns The complete fragment registry\n */\nexport function getFragmentRegistry(): FragmentRegistry {\n ensureInitialized();\n return fragmentRegistry;\n}\n\n/**\n * Clear all registered fragments.\n * Primarily used for testing.\n */\nexport function clearFragmentRegistry(): void {\n Object.keys(fragmentRegistry).forEach(key => {\n delete fragmentRegistry[key];\n });\n // Reset lazy initialization flag so fragments can be re-registered\n resetLazyInit();\n}\n","import type { z } from \"zod\";\nimport type { ThemeTokens } from \"../../theme\";\n\nexport type RouteMapEntry =\n | string\n | {\n path?: string | null;\n href?: string | null;\n url?: string | null;\n draftPath?: string | null;\n [key: string]: unknown;\n };\n\nexport type RouteMap = Record<string, RouteMapEntry>;\n\nexport type TransformContext = {\n theme: ThemeTokens;\n locale?: string;\n routes?: RouteMap;\n};\n\nexport type TransformHandler<TOptions = unknown> = (\n value: unknown,\n options: TOptions,\n context: TransformContext\n) => unknown;\n\nexport type TransformDefinition<TOptions = unknown> = {\n id: string;\n summary?: string;\n kind: \"formatter\" | \"collection\" | \"string\" | \"html\";\n schema?: z.ZodType<TOptions>;\n run: TransformHandler<TOptions>;\n};\n\nexport type TransformRegistry = Map<string, TransformDefinition<any>>;\n\nexport function runTransforms(\n value: unknown,\n transforms: Array<{ id: string; options?: unknown }> | undefined,\n context: TransformContext,\n registry: TransformRegistry\n) {\n if (!transforms?.length) return value;\n return transforms.reduce((acc, step) => {\n const transform = registry.get(step.id);\n if (!transform) {\n throw new Error(`Unknown transform: ${step.id}`);\n }\n const options = transform.schema ? transform.schema.parse(step.options ?? {}) : (step.options ?? {});\n return transform.run(acc, options, context);\n }, value);\n}\n\nexport function createTransformRegistry(\n definitions: Iterable<TransformDefinition<any>>\n): TransformRegistry {\n const registry: TransformRegistry = new Map();\n for (const definition of definitions) {\n if (registry.has(definition.id)) continue;\n registry.set(definition.id, definition);\n }\n return registry;\n}\n\nexport function mergeTransformRegistries(\n ...registries: TransformRegistry[]\n): TransformRegistry {\n const merged: TransformRegistry = new Map();\n for (const registry of registries) {\n for (const [id, definition] of registry.entries()) {\n if (merged.has(id)) continue;\n merged.set(id, definition);\n }\n }\n return merged;\n}\n","import { BACKGROUND_POSITION_PRESET_VALUES, getAnchorClasses } from '../../constants/background';\nimport type { TransformDefinition } from \"./core\";\n\nconst isString = (value: unknown): value is string => typeof value === \"string\" && value.trim().length > 0;\nconst isNumber = (value: unknown): value is number => typeof value === \"number\" && !isNaN(value);\n\n/**\n * Transform for resolving inline styles on <img> elements from background data.\n * Converts advanced image options to object-fit, object-position, opacity, and scale (width/height).\n * Note: Preset positions are handled via className (anchor positioning), but custom values are applied as object-position.\n */\nconst resolveImageStyleTransform: TransformDefinition = {\n id: \"background.resolveImageStyle\",\n kind: \"formatter\",\n summary: \"Resolve inline styles for background image elements\",\n run: (value, _options, _context) => {\n if (!value || typeof value !== \"object\") return {};\n const input = value as Record<string, unknown>;\n const objectFit = isString(input.objectFit) ? input.objectFit.trim() : null;\n const opacity = isNumber(input.opacity) ? input.opacity : isString(input.opacity) ? parseFloat(input.opacity) : null;\n const position = isString(input.position) ? input.position.trim() : null;\n\n // Parse scale - supports \"150%\", \"200px\", \"50vh\", or plain \"150\"\n // Only applies when objectFit is 'custom' or 'original'\n let scaleValue: string | null = null;\n if (objectFit === 'custom' || objectFit === 'original') {\n if (isString(input.scale)) {\n const scaleStr = input.scale.trim();\n if (scaleStr) {\n // If it has units (%, px, vh, etc), use as-is\n if (/\\d+(%|px|vh|vw|rem|em)$/.test(scaleStr)) {\n scaleValue = scaleStr;\n } else {\n // Plain number - treat as percentage\n const num = parseFloat(scaleStr);\n if (!isNaN(num)) {\n scaleValue = `${num}%`;\n }\n }\n }\n }\n }\n\n const style: Record<string, string> = {};\n\n // Map objectFit values to CSS object-fit\n if (objectFit) {\n switch (objectFit) {\n case 'fill':\n style.objectFit = 'cover';\n break;\n case 'fit':\n style.objectFit = 'contain';\n break;\n case 'original':\n case 'custom':\n style.objectFit = 'none';\n break;\n default:\n // Fallback for legacy values (cover, contain, none)\n style.objectFit = objectFit;\n }\n }\n\n // Apply opacity\n if (opacity !== null && opacity >= 0 && opacity <= 100) {\n style.opacity = String(opacity / 100);\n }\n\n // Apply scale via width/height (only for custom/original sizing)\n if (scaleValue) {\n style.width = scaleValue;\n style.height = scaleValue;\n }\n\n // Apply object-position for custom values\n if (position && !BACKGROUND_POSITION_PRESET_VALUES.includes(position as any)) {\n style.objectPosition = position;\n }\n\n return style;\n },\n};\n\n/**\n * Transform for resolving className on <img> elements based on objectFit, scale, and position.\n * - 'fill' (cover) and 'fit' (contain): uses inset-0 to fill container\n * - 'original' and 'custom': uses anchor positioning when scale is set\n */\nconst resolveImageClassNameTransform: TransformDefinition<{ baseClass?: string }> = {\n id: \"background.resolveImageClassName\",\n kind: \"string\",\n summary: \"Resolve className for background image based on objectFit, scale and position\",\n run: (value, options, _context) => {\n const baseClass = (options as any)?.baseClass ?? 'absolute -z-10';\n if (!value || typeof value !== \"object\") return `${baseClass} inset-0 h-full w-full`;\n\n const input = value as Record<string, unknown>;\n const objectFit = isString(input.objectFit) ? input.objectFit.trim() : null;\n const position = isString(input.position) ? input.position.trim() : null;\n\n // For 'fill' (cover) and 'fit' (contain), always use inset-0\n if (objectFit === 'fill' || objectFit === 'fit') {\n return `${baseClass} inset-0 h-full w-full object-${objectFit === 'fill' ? 'cover' : 'contain'}`;\n }\n\n // For 'original' and 'custom', check if scale is set\n let needsAnchoring = false;\n if (objectFit === 'custom' || objectFit === 'original') {\n if (isString(input.scale)) {\n const scaleStr = input.scale.trim();\n if (scaleStr) {\n needsAnchoring = true;\n }\n }\n }\n\n // If no scale set for original/custom, still fill container\n if (!needsAnchoring) {\n return `${baseClass} inset-0 h-full w-full`;\n }\n\n // Scale is set: use anchor positioning based on position field\n const isPreset = position && BACKGROUND_POSITION_PRESET_VALUES.includes(position as any);\n const isCustom = position && !isPreset;\n\n if (isCustom) {\n // If position is custom, no anchor classes are needed as object-position is used.\n return baseClass;\n }\n\n // Otherwise, it's a preset or null, so apply anchor classes (getAnchorClasses handles null by defaulting to center)\n const anchorClasses = getAnchorClasses(position);\n return `${baseClass} ${anchorClasses}`;\n }\n};\n\nexport const backgroundTransforms: TransformDefinition<any>[] = [\n {\n id: \"background.resolveStyle\",\n kind: \"formatter\",\n summary: \"Resolve inline styles for background color/gradient layers\",\n run: (value, _options, context) => {\n if (!value || typeof value !== \"object\") return {};\n const input = value as Record<string, unknown>;\n const color = isString(input.color) ? input.color.trim() : null;\n const gradient = isString(input.gradient) ? input.gradient.trim() : null;\n const opacity = isNumber(input.opacity) ? input.opacity : isString(input.opacity) ? parseFloat(input.opacity) : null;\n\n const style: Record<string, string> = {};\n\n // Only apply backgroundColor inline when a raw hex/custom value is used.\n // If a token is present (recognized by presence in theme tokens or known keywords),\n // rely on the class produced by background.resolveClass instead.\n if (color) {\n const isToken = Boolean(context?.theme?.palette?.[color] || color === 'transparent' || color === 'surface');\n if (!isToken) {\n style.backgroundColor = color;\n }\n }\n\n if (gradient) {\n style.backgroundImage = gradient;\n }\n\n if (opacity !== null && opacity >= 0 && opacity <= 100) {\n style.opacity = String(opacity / 100);\n }\n\n return style;\n },\n },\n {\n id: \"background.resolveClass\",\n kind: \"string\",\n summary: \"Map background color token to Tailwind class with auto-overflow for custom sizing\",\n run: (value, options, context) => {\n const baseClass = (options as any)?.baseClass;\n const base = typeof baseClass === 'string' && baseClass.trim().length > 0 ? baseClass.trim() : '';\n if (!value || typeof value !== 'object') return base;\n const input = value as Record<string, unknown>;\n const color = isString(input.color) ? input.color.trim() : '';\n const objectFit = isString(input.objectFit) ? input.objectFit.trim() : null;\n\n const classes: string[] = [];\n\n // Add base class if provided\n if (base) classes.push(base);\n\n // Add color class if it's a theme token\n if (color) {\n const isToken = Boolean(context?.theme?.palette?.[color] || color === 'transparent' || color === 'surface');\n if (isToken) {\n classes.push(`bg-${color}`);\n }\n }\n\n // Auto-enable overflow for custom/original sizing when scale is set\n const needsOverflow = (objectFit === 'custom' || objectFit === 'original') && isString(input.scale) && input.scale.trim().length > 0;\n if (needsOverflow) {\n classes.push('overflow-visible');\n }\n\n return classes.join(' ').trim();\n },\n },\n resolveImageStyleTransform,\n resolveImageClassNameTransform,\n];\n","import type { TransformDefinition } from \"./core\";\n\nfunction extractHref(candidate: unknown): string | null {\n if (typeof candidate === \"string\") {\n const trimmed = candidate.trim();\n return trimmed.length > 0 ? trimmed : null;\n }\n if (!candidate || typeof candidate !== \"object\") {\n return null;\n }\n const record = candidate as Record<string, unknown>;\n const fields = [\"path\", \"href\", \"url\", \"draftPath\"];\n for (const field of fields) {\n const value = record[field];\n if (typeof value === \"string\" && value.trim().length > 0) {\n return value.trim();\n }\n }\n return null;\n}\n\nexport const resolveLinkTransform: TransformDefinition = {\n id: \"links.resolve\",\n kind: \"formatter\",\n summary: \"Resolve LinkValue objects to href strings using the route map\",\n run: (value, _options, context) => {\n if (!value || typeof value !== \"object\") {\n return null;\n }\n\n const link = value as Record<string, unknown>;\n const kind = typeof link.kind === \"string\" ? link.kind : null;\n\n if (kind === \"internal\") {\n const routeId = typeof link.routeId === \"string\" ? link.routeId : null;\n const routes = context.routes ?? {};\n if (routeId && routes && typeof routes === \"object\") {\n const match = (routes as Record<string, unknown>)[routeId];\n const resolved = extractHref(match);\n if (resolved) {\n return resolved;\n }\n }\n const href = typeof link.href === \"string\" ? link.href.trim() : \"\";\n return href.length > 0 ? href : null;\n }\n\n if ((kind === \"external\" || kind === \"url\") && typeof link.href === \"string\") {\n const href = link.href.trim();\n return href.length > 0 ? href : null;\n }\n\n return null;\n },\n};\n\nexport const linksTransforms = [resolveLinkTransform] satisfies ReadonlyArray<TransformDefinition<any>>;\n","import type { TransformDefinition } from './core'\nimport type { SemanticSpacing } from '../../spacing'\nimport { resolveSpacing, isSemanticSpacing } from '../../spacing'\n\n/**\n * Maps semantic spacing values to Tailwind padding classes.\n *\n * Semantic values: none, compact, cozy, medium, comfortable, spacious\n * These are defined centrally in system/spacing.ts\n *\n * For sections (axis: 'y'), only vertical padding is applied (py-*).\n * For containers/cards (axis: 'all'), padding is applied to all sides (p-*).\n *\n * Runtime validation ensures invalid spacing values are caught early.\n */\nexport const spacingTransform: TransformDefinition<{ axis?: 'y' | 'all'; baseClass?: string }> = {\n id: 'boxStyles.spacing',\n kind: 'string',\n summary: 'Map semantic spacing value to Tailwind padding classes',\n run: (value, options, _context) => {\n const axis = options?.axis ?? 'all'\n const baseClass = options?.baseClass ?? ''\n\n // Handle null/undefined/empty values\n if (!value || typeof value !== 'string') {\n return baseClass.trim() || ''\n }\n\n const trimmed = value.trim();\n\n // Validate spacing value at runtime\n if (!isSemanticSpacing(trimmed)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(`[spacing] Invalid spacing value: \"${trimmed}\". Expected one of: none, compact, cozy, medium, comfortable, spacious.`);\n }\n return baseClass.trim() || ''\n }\n\n // TypeScript now knows trimmed is SemanticSpacing\n const spacingClass = resolveSpacing(trimmed, axis)\n\n // Combine base class with spacing class\n return baseClass ? `${baseClass.trim()} ${spacingClass}` : spacingClass\n },\n}\n\n/**\n * Applies theme shadow class when raised is true.\n *\n * Uses the theme's 'medium' shadow token by default.\n */\nexport const raisedTransform: TransformDefinition<{ baseClass?: string }> = {\n id: 'boxStyles.raised',\n kind: 'string',\n summary: 'Apply shadow class when raised is true',\n run: (value, options, context) => {\n const baseClass = options.baseClass ?? ''\n\n // Only apply shadow if value is explicitly true\n if (value !== true) {\n return baseClass.trim() || ''\n }\n\n // Get shadow from theme (default to 'medium')\n const shadowValue = context.theme?.shadow?.medium\n if (!shadowValue || shadowValue === 'none') {\n return baseClass.trim() || ''\n }\n\n // Use Tailwind's shadow-md class for medium shadow\n // (We could make this configurable in the future)\n const shadowClass = 'shadow-md'\n\n return baseClass ? `${baseClass.trim()} ${shadowClass}` : shadowClass\n },\n}\n\n/**\n * Maps rounded corner values to Tailwind border radius classes.\n *\n * Rounded values:\n * - 'none' → no border radius\n * - 'sm' → rounded-sm\n * - 'md' → rounded-md\n * - 'lg' → rounded-lg\n * - 'xl' → rounded-xl\n * - '2xl' → rounded-2xl\n * - 'full' → rounded-full\n */\nexport const roundedTransform: TransformDefinition<{ baseClass?: string }> = {\n id: 'boxStyles.rounded',\n kind: 'string',\n summary: 'Map rounded value to Tailwind border radius class',\n run: (value, options, _context) => {\n const baseClass = options.baseClass ?? ''\n\n // Handle null/undefined/empty/'none' values\n if (!value || value === 'none') {\n return baseClass.trim() || ''\n }\n\n if (typeof value !== 'string') {\n return baseClass.trim() || ''\n }\n\n const rounded = value.trim()\n\n // Map rounded values to Tailwind classes\n const roundedMap: Record<string, string> = {\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n '2xl': 'rounded-2xl',\n full: 'rounded-full',\n }\n\n const roundedClass = roundedMap[rounded]\n if (!roundedClass) {\n // Unknown rounded value - return base class only\n return baseClass.trim() || ''\n }\n\n // Combine base class with rounded class\n return baseClass ? `${baseClass.trim()} ${roundedClass}` : roundedClass\n },\n}\n\n/**\n * Composite transform that handles all box style properties at once.\n *\n * Takes a box styles object like:\n * ```\n * {\n * spacing: 'comfortable',\n * raised: true,\n * rounded: 'lg'\n * }\n * ```\n *\n * And outputs combined Tailwind classes.\n */\nexport const boxStylesCompositeTransform: TransformDefinition<{ axis?: 'y' | 'all'; baseClass?: string }> = {\n id: 'boxStyles.all',\n kind: 'string',\n summary: 'Composite transform for all box style properties',\n run: (value, options, context) => {\n if (!value || typeof value !== 'object') {\n return options.baseClass?.trim() || ''\n }\n\n const input = value as Record<string, unknown>\n const axis = options.axis ?? 'all'\n const baseClass = options.baseClass ?? ''\n\n const classes: string[] = []\n\n // Add base class if provided\n if (baseClass) classes.push(baseClass)\n\n // Apply spacing transform\n const spacing = typeof input.spacing === 'string' ? input.spacing.trim() : null\n if (spacing) {\n const spacingResult = spacingTransform.run(spacing, { axis, baseClass: '' }, context)\n if (typeof spacingResult === 'string' && spacingResult) {\n classes.push(spacingResult)\n }\n }\n\n // Apply raised transform\n if (input.raised === true) {\n const raisedResult = raisedTransform.run(true, { baseClass: '' }, context)\n if (typeof raisedResult === 'string' && raisedResult) {\n classes.push(raisedResult)\n }\n }\n\n // Apply rounded transform\n const rounded = typeof input.rounded === 'string' ? input.rounded.trim() : null\n if (rounded && rounded !== 'none') {\n const roundedResult = roundedTransform.run(rounded, { baseClass: '' }, context)\n if (typeof roundedResult === 'string' && roundedResult) {\n classes.push(roundedResult)\n }\n }\n\n return classes.join(' ').trim() || ''\n },\n}\n\ntype SectionClassNameOptions = {\n baseClass?: string;\n containerStylesPath?: string;\n defaultSpacing?: SemanticSpacing;\n};\n\n/**\n * Composite transform for section className.\n *\n * Responsibilities:\n * 1. Extracts spacing from _sectionStyles or uses defaultSpacing\n * 2. Converts semantic spacing to CSS classes via resolveSpacing()\n * 3. Respects fullWidth setting from containerStyles (removes px-* classes)\n * 4. Combines base class with spacing classes\n *\n * This transform ensures sections always have proper padding even when:\n * - _sectionStyles doesn't exist (uses defaultSpacing)\n * - _sectionStyles exists but spacing is undefined (uses defaultSpacing)\n * - _sectionStyles.spacing is explicitly set (uses that value)\n */\nexport const sectionClassNameTransform: TransformDefinition<SectionClassNameOptions> = {\n id: 'sectionStyles.resolveClassName',\n kind: 'string',\n summary: 'Resolve section className from spacing and fullWidth setting',\n run: (value, options, context) => {\n const baseClass = options?.baseClass ?? '';\n const containerStylesPath = options?.containerStylesPath ?? '_containerStyles';\n const defaultSpacing = options?.defaultSpacing;\n\n // Check if fullWidth is enabled in containerStyles\n // The data property is added at runtime during block rendering\n const contextData = (context as { data?: Record<string, unknown> }).data;\n const containerStyles = contextData?.[containerStylesPath] as { fullWidth?: boolean } | undefined;\n const fullWidth = containerStyles?.fullWidth === true;\n\n // If fullWidth is true, remove horizontal padding classes from baseClass\n let adjustedBaseClass = baseClass;\n if (fullWidth && baseClass) {\n // Remove px-* classes when fullWidth is enabled\n adjustedBaseClass = baseClass.split(' ')\n .filter((cls: string) => !cls.startsWith('px-'))\n .join(' ')\n .trim();\n }\n\n const classes: string[] = [];\n\n // Extract spacing from _sectionStyles if it exists\n let spacing: SemanticSpacing | null = null;\n if (value && typeof value === 'object') {\n const input = value as Record<string, unknown>;\n if (typeof input.spacing === 'string') {\n // Validate spacing value at runtime\n if (isSemanticSpacing(input.spacing)) {\n spacing = input.spacing;\n } else if (process.env.NODE_ENV !== 'production') {\n console.warn(`[sectionStyles] Invalid spacing value in _sectionStyles: \"${input.spacing}\". Expected one of: none, compact, cozy, medium, comfortable, spacious.`);\n }\n }\n }\n\n // Add adjusted base class (e.g., 'px-6' or '' if fullWidth)\n if (adjustedBaseClass) classes.push(adjustedBaseClass);\n\n // Determine effective spacing:\n // 1. Use explicit spacing from _sectionStyles if set and valid\n // 2. Otherwise use defaultSpacing from config\n // 3. If neither, no spacing classes are added\n const effectiveSpacing = spacing ?? defaultSpacing;\n\n if (effectiveSpacing) {\n // Convert semantic spacing to CSS classes\n // TypeScript knows effectiveSpacing is SemanticSpacing\n const spacingClass = resolveSpacing(effectiveSpacing, 'y');\n classes.push(spacingClass);\n }\n\n return classes.join(' ').trim();\n }\n};\n\ntype ContainerClassNameOptions = {\n baseClass?: string;\n};\n\n/**\n * Composite transform for container className.\n * Determines whether to use Tailwind container class (centered with max-width)\n * or full-width mode (edge-to-edge).\n *\n * Used for dynamically building container element className based on fullWidth setting.\n */\nexport const containerStylesResolveClassName: TransformDefinition<ContainerClassNameOptions> = {\n id: 'containerStyles.resolveClassName',\n kind: 'string',\n summary: 'Resolve container className based on fullWidth setting',\n run: (value, options, _context) => {\n const baseClass = options?.baseClass ?? '';\n\n // If no _containerStyles object exists, use default container behavior\n if (!value || typeof value !== 'object') {\n const defaultClass = 'container mx-auto';\n return baseClass ? `${baseClass} ${defaultClass}`.trim() : defaultClass;\n }\n\n const input = value as Record<string, unknown>;\n const fullWidth = input.fullWidth === true;\n\n const classes: string[] = [];\n\n // Add base class if provided\n if (baseClass) classes.push(baseClass);\n\n // Add container or full-width class\n if (fullWidth) {\n // Full-width mode: no max-width constraint\n classes.push('w-full');\n } else {\n // Default mode: responsive container with max-width\n classes.push('container mx-auto');\n }\n\n return classes.join(' ').trim();\n }\n};\n\nexport const boxStylesTransforms: TransformDefinition<any>[] = [\n spacingTransform as TransformDefinition<any>,\n raisedTransform as TransformDefinition<any>,\n roundedTransform as TransformDefinition<any>,\n boxStylesCompositeTransform as TransformDefinition<any>,\n sectionClassNameTransform as TransformDefinition<any>,\n containerStylesResolveClassName as TransformDefinition<any>,\n]\n","import { createTransformRegistry } from \"./core\";\nimport { formattingTransforms } from \"./formatting\";\nimport { layoutTransforms } from \"./layout\";\nimport { uiTransforms } from \"./ui\";\nimport { mediaTransforms } from \"./media\";\nimport { backgroundTransforms } from \"./background\";\nimport { linksTransforms } from \"./links\";\nimport { boxStylesTransforms } from \"./boxStyles\";\n\nexport const builtinTransformDefinitions = [\n ...formattingTransforms,\n ...layoutTransforms,\n ...uiTransforms,\n ...mediaTransforms,\n ...backgroundTransforms,\n ...linksTransforms,\n ...boxStylesTransforms,\n];\n\nexport const defaultTransforms = createTransformRegistry(builtinTransformDefinitions);\n\nexport {\n formattingTransforms,\n layoutTransforms,\n uiTransforms,\n mediaTransforms,\n backgroundTransforms,\n linksTransforms,\n boxStylesTransforms,\n};\n","import React from \"react\";\nimport type { NodeDefinition } from \"../node\";\nimport { bindingSchema } from \"../node\";\nimport { defaultThemeTokens, type ThemeTokens } from \"../theme\";\nimport type { TransformRegistry, RouteMap, RouteMapEntry } from \"../transforms\";\nimport { runTransforms, defaultTransforms } from \"../transforms\";\nimport { serverComponentRegistry } from \"./components/registry.server\";\nimport { SectionNode } from \"./nodes/layout\";\n\n/**\n * Maps meta binding paths to their actual store keys.\n * The metadata store uses 'draft' prefixed keys (e.g., draftTitle, draftSlug)\n * while template bindings use simple paths (e.g., title, slug).\n */\nconst META_PATH_TO_STORE_KEY: Record<string, string> = {\n title: 'draftTitle',\n slug: 'draftSlug',\n status: 'draftStatus',\n publishedAt: 'publishedAt',\n metaTitle: 'draftMetaTitle',\n metaDescription: 'draftMetaDescription',\n};\n\nfunction mapMetaPathToStoreKey(path: string): string {\n return META_PATH_TO_STORE_KEY[path] ?? path;\n}\n\nexport type ViewModel = Record<string, unknown>;\n\nexport type ComponentRegistry = Record<string, React.ComponentType<any>>;\n\nexport type ResolverContext = {\n viewModel: ViewModel;\n registry: ComponentRegistry;\n transforms?: TransformRegistry;\n theme?: ThemeTokens;\n routes?: RouteMap;\n // Optional base for building editor paths, e.g., `blocks.<blockId>.`\n pathBase?: string;\n // Optional block metadata for editor-aware registries\n blockId?: string | null;\n blockKind?: string;\n blockContent?: unknown;\n // Optional template bindings for reverse field mapping (entry editing)\n blockBindings?: Record<string, unknown>;\n // Optional fragment registry for fragment renderer nodes\n fragmentRegistry?: Record<string, any>;\n};\n\n/** @internal Exported for testing */\nexport type ScopeEntry = {\n name: string;\n value: unknown;\n basePathSegments?: Array<string | number>;\n};\n\n/** @internal Exported for testing */\nexport type InternalContext = ResolverContext & { scopes: ScopeEntry[] };\n\nconst PATH_SEPARATOR_REGEX = /\\./g;\nconst BRACKET_ACCESS_REGEX = /\\[(?<token>[^\\]]+)\\]/g;\n\n/**\n * Parses a bracket notation token into a segment.\n * Handles quoted strings, numeric indices, and plain keys.\n */\nfunction parseBracketToken(token: string): string | number {\n if (token.startsWith(\"\\\"\") || token.startsWith(\"'\")) {\n return token.slice(1, -1);\n }\n if (/^\\d+$/.test(token)) {\n return Number(token);\n }\n return token;\n}\n\n/**\n * Extracts segments from a path part containing brackets.\n * E.g., \"items[0]\" -> [\"items\", 0]\n */\nfunction extractSegmentsFromPart(part: string): Array<string | number> {\n if (!part) return [];\n\n const segments: Array<string | number> = [];\n\n // Extract base property before brackets\n const baseMatch = part.match(/^([^\\[]+)/);\n if (baseMatch) {\n segments.push(baseMatch[1]);\n }\n\n // Extract all bracket notations\n const bracketMatches = Array.from(part.matchAll(BRACKET_ACCESS_REGEX));\n const bracketSegments = bracketMatches\n .map((match) => match.groups?.token ?? \"\")\n .filter((token) => token.length > 0)\n .map(parseBracketToken);\n\n segments.push(...bracketSegments);\n\n // Handle plain part without base match or brackets\n if (!baseMatch && !part.includes(\"[\")) {\n return [part];\n }\n\n return segments;\n}\n\n/**\n * Splits a path string into an array of segments.\n * Supports dot notation (a.b.c), bracket notation (a[0]), and mixed (a.b[0].c).\n */\nfunction splitPath(path: string): Array<string | number> {\n return path\n .split(PATH_SEPARATOR_REGEX)\n .flatMap(extractSegmentsFromPart)\n .filter((segment) => segment !== \"\");\n}\n\n/**\n * Converts path segments back to a dot-notation string.\n */\nfunction segmentsToPath(segments: Array<string | number>): string | undefined {\n if (!segments.length) return undefined;\n return segments.map((s) => String(s)).join('.');\n}\n\n/**\n * Resolves a binding path to absolute segments for editor path injection.\n * Returns segments starting with 'content' or undefined if not applicable.\n */\nfunction getAbsoluteSegments(fromPath: string, context: InternalContext): Array<string | number> | undefined {\n const segments = splitPath(fromPath);\n if (!segments.length) return undefined;\n\n const [first, ...rest] = segments;\n if (typeof first !== 'string') return undefined;\n\n // Direct content or $root access\n if (first === '$root' || first === 'content') {\n return [first === '$root' ? '$root' : 'content', ...rest];\n }\n\n // Check if first segment is a scoped variable with a base path\n const scoped = context.scopes.find((entry) => entry.name === first);\n if (scoped?.basePathSegments && scoped.basePathSegments.length > 0) {\n return [...scoped.basePathSegments, ...rest];\n }\n\n return undefined;\n}\n\n/**\n * Reads a value from a source object using an array of path segments.\n * Handles both object property access and array indexing.\n */\nfunction readFromSource(source: unknown, segments: Array<string | number>): unknown {\n return segments.reduce<unknown>((current, segment) => {\n if (current === undefined || current === null) return undefined;\n\n if (typeof segment === \"number\") {\n return Array.isArray(current) ? current[segment] : undefined;\n }\n\n if (typeof current === \"object\" && current !== null && segment in (current as Record<string, unknown>)) {\n return (current as Record<string, unknown>)[segment];\n }\n\n return undefined;\n }, source);\n}\n\n/**\n * Type guard for plain objects.\n */\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Validates and converts a route entry from the viewModel.\n */\nfunction parseRouteEntry(routeId: string, value: unknown): [string, string | RouteMapEntry] | null {\n if (typeof routeId !== \"string\" || routeId.length === 0) {\n return null;\n }\n if (typeof value === \"string\") {\n return [routeId, value];\n }\n if (isPlainObject(value)) {\n return [routeId, value as RouteMapEntry];\n }\n return null;\n}\n\n/**\n * Extracts route map from $root.routes in the viewModel.\n */\nfunction extractRouteMapFromViewModel(viewModel: ViewModel): RouteMap | undefined {\n if (!isPlainObject(viewModel)) return undefined;\n\n const root = viewModel.$root;\n if (!isPlainObject(root)) return undefined;\n\n const routes = (root as Record<string, unknown>).routes;\n if (!isPlainObject(routes)) return undefined;\n\n const entries = Object.entries(routes)\n .map(([routeId, value]) => parseRouteEntry(routeId, value))\n .filter((entry): entry is [string, string | RouteMapEntry] => entry !== null);\n\n if (entries.length === 0) return undefined;\n\n return Object.fromEntries(entries);\n}\n\n/**\n * Parses and validates a binding object using the binding schema.\n */\nfunction parseBinding(raw: unknown, origin: string) {\n try {\n return bindingSchema.parse(raw);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to parse binding (${origin}): ${message}`);\n }\n}\n\n/**\n * Applies transforms and fallback to a resolved value.\n */\nfunction applyTransformsAndFallback(\n value: unknown,\n binding: ReturnType<typeof bindingSchema.parse>,\n context: InternalContext\n): unknown {\n const transforms = context.transforms ?? defaultTransforms;\n const routeMap = context.routes ?? extractRouteMapFromViewModel(context.viewModel);\n\n const transformed = runTransforms(\n value,\n binding.transforms?.map((step) => ({ id: step.id, options: step.options })) ?? [],\n { theme: context.theme ?? defaultThemeTokens, routes: routeMap },\n transforms\n );\n\n if (transformed === undefined && binding.fallback !== undefined) {\n return binding.fallback;\n }\n\n if (binding.pick === \"collection\") {\n return Array.isArray(transformed) ? transformed : [];\n }\n\n return transformed;\n}\n\n/**\n * Resolves a binding to its value from the viewModel or scopes.\n * Applies transforms and fallback handling.\n *\n * Path resolution rules (scope-relative):\n * - $root.* → resolves to viewModel root\n * - scopeName.* → resolves to named scope (e.g., item.title, content.heading)\n * - path → resolves relative to innermost (current) scope\n *\n * @internal Exported for testing\n */\nexport function resolveBindingValue(binding: ReturnType<typeof bindingSchema.parse>, context: InternalContext): unknown {\n const fullPath = binding.from;\n const segments = splitPath(fullPath);\n if (!segments.length) return undefined;\n\n const [first, ...rest] = segments;\n let source: unknown;\n\n if (typeof first === \"string\") {\n // Special case: $root always resolves to viewModel.$root\n if (first === \"$root\") {\n const rootObj = (context.viewModel as Record<string, unknown>).$root;\n source = rootObj ?? {};\n const value = readFromSource(source, rest);\n return applyTransformsAndFallback(value, binding, context);\n }\n\n // Relative path: resolve to innermost (current) scope FIRST\n // This allows fragments with field names like 'content' to work correctly\n // even when a 'content' scope exists\n if (context.scopes.length > 0) {\n // Find the innermost scope that's an object or array (skip primitives like index numbers)\n let currentScope = context.scopes[context.scopes.length - 1];\n const scopeValue = currentScope.value;\n const isPrimitive = scopeValue === null || scopeValue === undefined ||\n typeof scopeValue === 'number' || typeof scopeValue === 'string' || typeof scopeValue === 'boolean';\n\n // If innermost scope is primitive (e.g., index), use the next scope up\n if (isPrimitive && context.scopes.length > 1) {\n currentScope = context.scopes[context.scopes.length - 2];\n }\n\n source = currentScope.value;\n const value = readFromSource(source, segments);\n\n // If found in current scope, return it\n if (value !== undefined) {\n return applyTransformsAndFallback(value, binding, context);\n }\n\n // Not found in current scope - check if first segment is a named scope\n const namedScope = context.scopes.find((entry) => entry.name === first);\n if (namedScope) {\n // Scope-qualified path: item.title, content.heading, etc.\n source = namedScope.value;\n const namedValue = readFromSource(source, rest);\n if (namedValue !== undefined) {\n return applyTransformsAndFallback(namedValue, binding, context);\n }\n }\n\n // Fall back to viewModel (allows accessing parent data from repeaters)\n const viewModelValue = readFromSource(context.viewModel, segments);\n return applyTransformsAndFallback(viewModelValue, binding, context);\n }\n\n // No scopes: check for named scope before falling back to viewModel\n const namedScope = context.scopes.find((entry) => entry.name === first);\n if (namedScope) {\n source = namedScope.value;\n const value = readFromSource(source, rest);\n return applyTransformsAndFallback(value, binding, context);\n }\n\n // No scopes: fall back to viewModel\n source = context.viewModel;\n } else {\n source = context.viewModel;\n }\n\n const value = readFromSource(source, segments);\n return applyTransformsAndFallback(value, binding, context);\n}\n\n/**\n * Determines whether a node should be rendered based on its $when condition.\n */\nfunction shouldRenderNode(node: NodeDefinition, context: InternalContext): boolean {\n if (!node.$when) return true;\n\n // Defensive check: if $when.when is undefined, render the node by default\n if (!node.$when.when) {\n console.warn('Block has $when condition but missing \"when\" property:', node);\n return true;\n }\n\n const binding = parseBinding(node.$when.when, \"$when\");\n const value = resolveBindingValue(binding, context);\n const equals = node.$when.equals;\n\n const matches = typeof equals === \"undefined\" ? Boolean(value) : value === equals;\n const shouldRender = node.$when.not ? !matches : matches;\n\n return shouldRender;\n}\n\n/**\n * Applies $scopes to the context, adding named bindings to the scope stack.\n */\nfunction applyScopes(node: NodeDefinition, context: InternalContext): InternalContext {\n if (!node.$scopes) return context;\n\n const scopeContext: InternalContext = { ...context, scopes: [...context.scopes] };\n for (const scope of node.$scopes) {\n const binding = bindingSchema.parse(scope.from);\n const value = resolveBindingValue(binding, scopeContext);\n scopeContext.scopes.push({ name: scope.name, value });\n }\n return scopeContext;\n}\n\n/**\n * Resolves a repeated node, creating an array of elements.\n */\nfunction resolveRepeater(\n node: NodeDefinition,\n context: InternalContext\n): React.ReactNode[] | null {\n if (!node.$repeat) return null;\n\n const binding = parseBinding(node.$repeat.collection, \"$repeat.collection\");\n const collection = resolveBindingValue(binding, context);\n\n if (!Array.isArray(collection)) return null;\n\n const limit = node.$repeat.limit ?? collection.length;\n const items = collection.slice(0, limit);\n const itemName = node.$repeat.itemName ?? \"item\";\n const indexName = node.$repeat.indexName ?? \"index\";\n\n return items\n .map((item, idx) => {\n const scopes = [...context.scopes];\n\n // Compute base path for repeated items rooted at content.*\n const absolute = getAbsoluteSegments(binding.from, context);\n const basePathSegments = absolute ? [...absolute, idx] : undefined;\n\n scopes.push({ name: itemName, value: item, basePathSegments });\n scopes.push({ name: indexName, value: idx });\n\n const repeatedContext: InternalContext = { ...context, scopes };\n const nodeWithoutRepeat = { ...node, $repeat: undefined };\n\n return resolveNode(nodeWithoutRepeat, repeatedContext, idx);\n })\n .filter((child): child is React.ReactNode => child !== null);\n}\n\n/**\n * Helper to walk a nested path through a bindings object.\n * Example: getNestedBinding({ ctas: { primary: { label: 'text' } } }, 'ctas.primary.label') → 'text'\n */\nfunction getNestedBinding(bindings: Record<string, unknown>, path: string): unknown {\n const segments = path.split('.');\n let current: unknown = bindings;\n\n for (const segment of segments) {\n if (!isPlainObject(current)) return undefined;\n current = (current as Record<string, unknown>)[segment];\n }\n\n return current;\n}\n\n/**\n * Resolves a block field binding back to its source entry path for editing.\n * Returns the path for editor injection (content.* or metadata.*), or null if read-only.\n *\n * Supports:\n * - Flat bindings: bindings['headline'] → 'title'\n * - Nested bindings: bindings.ctas.primary.label → 'ctaText'\n * - Fallback bindings: Makes first editable option in chain editable\n */\nfunction resolveBindingToEditorPath(\n fieldName: string,\n bindings: Record<string, unknown> | undefined\n): string | null {\n if (!bindings) return null;\n\n // Try both flat key lookup and nested path walking\n // This supports both bindings['ctas.primary.label'] and bindings.ctas.primary.label\n const binding = bindings[fieldName] ?? getNestedBinding(bindings, fieldName);\n if (!binding) return null;\n\n // Handle explicit binding descriptors\n if (isPlainObject(binding) && 'source' in binding) {\n const source = (binding as Record<string, unknown>).source;\n\n if (source === 'field' && 'path' in binding) {\n // Field binding: content.<path>\n const path = (binding as Record<string, unknown>).path;\n return typeof path === 'string' ? `content.${path}` : null;\n }\n\n if (source === 'meta' && 'path' in binding) {\n // Metadata binding: metadata.<mappedPath>\n // Map meta paths to their actual store keys (draft prefix convention)\n const path = (binding as Record<string, unknown>).path;\n if (typeof path !== 'string') return null;\n const mappedPath = mapMetaPathToStoreKey(path);\n return `metadata.${mappedPath}`;\n }\n\n // Fallback binding: Make first editable option in chain editable\n if (source === 'fallback' && 'options' in binding) {\n const options = (binding as Record<string, unknown>).options;\n if (!Array.isArray(options)) return null;\n\n // Find first editable option (field or meta binding)\n for (const option of options) {\n // String shorthand defaults to field binding\n if (typeof option === 'string') {\n return `content.${option}`;\n }\n\n // Check for field/meta descriptors\n if (isPlainObject(option) && 'source' in option) {\n const optSource = (option as Record<string, unknown>).source;\n\n if (optSource === 'field' && 'path' in option) {\n const path = (option as Record<string, unknown>).path;\n return typeof path === 'string' ? `content.${path}` : null;\n }\n\n if (optSource === 'meta' && 'path' in option) {\n const path = (option as Record<string, unknown>).path;\n if (typeof path !== 'string') return null;\n const mappedPath = mapMetaPathToStoreKey(path);\n return `metadata.${mappedPath}`;\n }\n\n // Skip literal, transform - they're computed/static, continue to next option\n }\n }\n\n // No editable option found in fallback chain\n return null;\n }\n\n // Literal, transform: read-only\n return null;\n }\n\n // Handle string shorthand (defaults to field binding)\n if (typeof binding === 'string') {\n return `content.${binding}`;\n }\n\n // Unknown format\n return null;\n}\n\n/**\n * Injects editor path into props for text/richText nodes bound to content fields.\n */\nfunction injectEditorPath(\n props: Record<string, unknown>,\n node: NodeDefinition,\n parsedBinding: ReturnType<typeof bindingSchema.parse> | undefined,\n context: InternalContext\n): Record<string, unknown> {\n if (!parsedBinding) return props;\n if (node.type !== 'text' && node.type !== 'richText') return props;\n\n const abs = getAbsoluteSegments(parsedBinding.from, context);\n const absolutePath = abs ? segmentsToPath(abs) : undefined;\n\n if (!absolutePath) return props;\n\n // Early exit for non-content bindings\n if (absolutePath !== 'content' && !absolutePath.startsWith('content.')) {\n return props;\n }\n\n const fieldPath = absolutePath === 'content' ? '' : absolutePath.slice('content.'.length);\n if (!fieldPath) return props;\n\n // CASE 1: Template binding resolution (entry blocks)\n // Check for template bindings FIRST - entry editing takes priority over block editing\n // Example: block field \"headline\" with binding {source:'meta', path:'title'} → inject \"metadata.title\"\n if (context.blockBindings) {\n const entryPath = resolveBindingToEditorPath(fieldPath, context.blockBindings);\n\n if (entryPath) {\n return { ...props, path: entryPath };\n }\n // If no template binding found, fall through to direct block editing\n }\n\n // CASE 2: Direct content binding (page/block editing)\n // Example: binding is \"content.title\" → inject \"blocks.<blockId>.title\"\n const prefix = context.pathBase ?? '';\n const injectedPath = `${prefix}${fieldPath}`;\n\n return {\n ...props,\n path: injectedPath,\n };\n}\n\n/**\n * Resolves children nodes, flattening arrays and filtering nulls.\n */\nfunction resolveChildren(\n nodes: NodeDefinition[] | undefined,\n context: InternalContext\n): React.ReactNode[] {\n if (!nodes?.length) return [];\n\n return nodes.flatMap((child, index) => {\n const childContext: InternalContext = { ...context, scopes: [...context.scopes] };\n const resolved = resolveNode(child, childContext, index);\n\n if (Array.isArray(resolved)) {\n return resolved.filter((item) => item !== null && item !== undefined);\n }\n\n return resolved !== null && resolved !== undefined ? [resolved] : [];\n });\n}\n\n/**\n * Resolves a node definition into a React element.\n * Handles conditionals ($when), scopes ($scopes), repeaters ($repeat), bindings ($bind), and children.\n */\nexport function resolveNode(\n node: NodeDefinition,\n context: InternalContext,\n indexFallback?: number\n): React.ReactNode | null {\n // Early exit for conditional rendering\n if (!shouldRenderNode(node, context)) {\n return null;\n }\n\n // Apply any $scopes to create a new scope context\n const scopeContext = applyScopes(node, context);\n\n // Handle repeaters\n if (node.$repeat) {\n return resolveRepeater(node, scopeContext);\n }\n\n // Resolve component from server registry (not passed as prop to maintain SSR compatibility)\n const registry = scopeContext.registry ?? serverComponentRegistry;\n const normalizedType = node.type.toLowerCase();\n const component =\n registry[node.type] ??\n registry[normalizedType] ??\n (normalizedType === \"section\" ? (SectionNode as any) : undefined);\n if (!component) {\n if ((globalThis as any)?.process?.env?.NODE_ENV !== \"production\") {\n console.warn(`[block-system] Missing renderer for node type: ${node.type}`);\n }\n return null;\n }\n\n // Resolve node binding\n const parsedBinding = node.$bind ? parseBinding(node.$bind, \"$bind\") : undefined;\n const bindingValue = parsedBinding ? resolveBindingValue(parsedBinding, scopeContext) : undefined;\n\n // Resolve props with potential bindings\n let props = resolveProps(node.props ?? {}, scopeContext, bindingValue);\n\n // Inject editor path for content-bound text/richText nodes\n props = injectEditorPath(props, node, parsedBinding, scopeContext);\n\n // Resolve children\n const children = resolveChildren(node.children, scopeContext);\n\n // Create element with merged props\n // Note: registry is NOT passed as a prop to maintain SSR compatibility\n // Components that need the registry should import serverComponentRegistry directly\n const elementProps = {\n ...props,\n key: node.key ?? indexFallback,\n pathBase: context.pathBase,\n blockId: context.blockId,\n blockKind: context.blockKind,\n blockContent: context.blockContent,\n fragmentRegistry: context.fragmentRegistry,\n };\n\n return React.createElement(component, elementProps, ...children);\n}\n\n/**\n * Recursively resolves a value, handling bindings, objects, and arrays.\n *\n * This function enables nested bindings like:\n * ```typescript\n * style: {\n * aspectRatio: { $bind: { from: 'content.aspectRatio' } }\n * }\n * ```\n *\n * It also supports $prepend and $append for string composition:\n * ```typescript\n * className: {\n * $bind: { from: 'variant' },\n * $prepend: 'card-',\n * $append: ' extra-class'\n * }\n * ```\n *\n * @param value - The value to resolve (may contain nested bindings)\n * @param context - The resolution context containing viewModel, transforms, etc.\n * @returns The resolved value with all bindings evaluated\n */\nfunction resolveValue(value: unknown, context: InternalContext): unknown {\n // Handle binding directives at any nesting level\n if (value && typeof value === \"object\" && \"$bind\" in (value as Record<string, unknown>)) {\n try {\n const valueObj = value as Record<string, unknown>;\n const parsed = parseBinding(valueObj.$bind, 'nested-binding');\n let resolved = resolveBindingValue(parsed, context);\n\n // Apply $prepend and $append for string composition\n if (typeof resolved === 'string') {\n if ('$prepend' in valueObj && typeof valueObj.$prepend === 'string') {\n resolved = valueObj.$prepend + resolved;\n }\n if ('$append' in valueObj && typeof valueObj.$append === 'string') {\n resolved = resolved + valueObj.$append;\n }\n }\n\n return resolved;\n } catch {\n // Preserve original value on parse failure\n return value;\n }\n }\n\n // Recursively handle plain objects (like `style: { aspectRatio: ... }`)\n // Exclude arrays, Dates, and other special object types from recursion\n if (\n value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n !(value instanceof Date) &&\n Object.getPrototypeOf(value) === Object.prototype\n ) {\n const resolved: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n resolved[k] = resolveValue(v, context);\n }\n return resolved;\n }\n\n // Recursively handle arrays\n if (Array.isArray(value)) {\n return value.map(item => resolveValue(item, context));\n }\n\n // Return primitives and special objects as-is\n return value;\n}\n\n/**\n * Resolves props, handling both static values and bound props (with $bind).\n * Also injects the node's binding value as the 'value' prop if present.\n *\n * This function now recursively resolves nested bindings in objects and arrays,\n * enabling complex binding patterns like style objects with multiple bound properties.\n */\nfunction resolveProps(\n props: Record<string, unknown>,\n context: InternalContext,\n bindingValue: unknown\n): Record<string, unknown> {\n const resolved: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(props)) {\n // Recursively resolve the value (handles nested objects/arrays with bindings)\n resolved[key] = resolveValue(value, context);\n }\n\n // Inject node binding value as 'value' prop\n if (bindingValue !== undefined) {\n resolved.value = bindingValue;\n }\n\n return resolved;\n}\n\n/**\n * Main entry point for resolving node definitions into React elements.\n * Accepts a single node or array of nodes and returns React elements.\n */\nexport function resolveTree(\n node: NodeDefinition | NodeDefinition[],\n options: ResolverContext\n): React.ReactNode {\n if (!options.registry) {\n throw new Error(\"Component registry is required for node resolution\");\n }\n\n // Auto-create content scope for block contexts\n // When viewModel has 'content' property and we're starting with no scopes,\n // automatically push a 'content' scope so fragments can use relative paths\n const scopes: ScopeEntry[] = [];\n const viewModel = options.viewModel || {};\n const hasContentInViewModel = 'content' in viewModel && viewModel.content !== undefined;\n\n if (hasContentInViewModel) {\n scopes.push({\n name: 'content',\n value: viewModel.content\n });\n }\n\n const scopedContext: InternalContext = {\n ...options,\n transforms: options.transforms ?? defaultTransforms,\n theme: options.theme ?? defaultThemeTokens,\n scopes,\n };\n\n if (Array.isArray(node)) {\n return node\n .map((child, idx) => resolveNode(child, scopedContext, idx))\n .filter((child): child is React.ReactNode => child !== null);\n }\n\n return resolveNode(node, scopedContext);\n}\n","import React from \"react\";\nimport clsx from \"clsx\";\nimport { backgroundColorStyle, mergeStyles } from \"../../theme/utils/colorStyles\";\nimport { PrimitiveProps } from \"../types\";\n\ntype SectionProps = PrimitiveProps & {\n background: string,\n allowOverflow?: boolean,\n /** Data slot attribute for CSS targeting */\n 'data-slot'?: string,\n}\nexport default function Section({\n as: Comp = \"section\",\n children,\n background = 'background',\n className = '',\n allowOverflow = false,\n style,\n 'data-slot': dataSlot,\n}: SectionProps) {\n const overflowClass = allowOverflow ? 'overflow-visible' : 'overflow-hidden';\n const alwaysClass = clsx('relative isolate', overflowClass, className);\n const backgroundStyle = background ? backgroundColorStyle(background) : undefined;\n\n return <Comp className={alwaysClass} style={mergeStyles(backgroundStyle, style)} data-slot={dataSlot ?? 'section'}>\n {children}\n </Comp>;\n}\n","// primitives/stack.tsx\nimport React from \"react\";\nimport clsx from \"clsx\"\nimport { PrimitiveProps } from \"../types\"\n\ntype StackProps = PrimitiveProps & {\n gap?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\"\n align?: \"start\" | \"center\" | \"end\" | \"stretch\"\n justify?: \"start\" | \"center\" | \"end\" | \"between\"\n /** Data slot attribute for CSS targeting */\n 'data-slot'?: string\n}\n\nexport function Stack({\n as: Comp = \"div\",\n gap = \"md\",\n align = \"stretch\",\n justify = \"start\",\n className,\n children,\n 'data-slot': dataSlot,\n}: StackProps) {\n return (\n <Comp\n className={clsx(\n \"flex flex-col\",\n {\n \"gap-0\": gap === \"none\",\n \"gap-1\": gap === \"xs\",\n \"gap-2\": gap === \"sm\",\n \"gap-4\": gap === \"md\",\n \"gap-6\": gap === \"lg\",\n \"items-start\": align === \"start\",\n \"items-center\": align === \"center\",\n \"items-end\": align === \"end\",\n \"items-stretch\": align === \"stretch\",\n \"justify-start\": justify === \"start\",\n \"justify-center\": justify === \"center\",\n \"justify-end\": justify === \"end\",\n \"justify-between\": justify === \"between\",\n },\n className\n )}\n data-slot={dataSlot ?? 'stack'}\n >\n {children}\n </Comp>\n )\n}\n","// primitives/inline.tsx\nimport React from \"react\";\nimport clsx from \"clsx\";\nimport { PrimitiveProps } from \"../types\";\n\ntype InlineProps = PrimitiveProps & {\n gap?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\"\n align?: \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\"\n justify?: \"start\" | \"center\" | \"end\" | \"between\"\n wrap?: boolean\n /** Data slot attribute for CSS targeting */\n 'data-slot'?: string\n}\n\nexport function Inline({\n as: Comp = \"div\",\n gap = \"md\",\n align = \"center\",\n justify = \"start\",\n wrap = false,\n className,\n children,\n 'data-slot': dataSlot,\n}: InlineProps) {\n return (\n <Comp\n className={clsx(\n \"flex\",\n wrap && \"flex-wrap\",\n {\n \"gap-0\": gap === \"none\",\n \"gap-1\": gap === \"xs\",\n \"gap-2\": gap === \"sm\",\n \"gap-4\": gap === \"md\",\n \"gap-6\": gap === \"lg\",\n \"items-start\": align === \"start\",\n \"items-center\": align === \"center\",\n \"items-end\": align === \"end\",\n \"items-stretch\": align === \"stretch\",\n \"items-baseline\": align === \"baseline\",\n \"justify-start\": justify === \"start\",\n \"justify-center\": justify === \"center\",\n \"justify-end\": justify === \"end\",\n \"justify-between\": justify === \"between\",\n },\n className\n )}\n data-slot={dataSlot ?? 'inline'}\n >\n {children}\n </Comp>\n )\n}\n","// primitives/grid.tsx\nimport React from \"react\";\nimport clsx from \"clsx\";\nimport { PrimitiveProps } from \"../types\";\n\ntype GridProps = PrimitiveProps & {\n cols?: number | { base?: number; sm?: number; md?: number; lg?: number; xl?: number }\n gap?: \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\"\n /** Data slot attribute for CSS targeting */\n 'data-slot'?: string\n}\n\nexport function Grid({\n as: Comp = \"div\",\n cols = { base: 1, md: 2 },\n gap = \"md\",\n className,\n children,\n 'data-slot': dataSlot,\n}: GridProps) {\n // Normalize cols to object format\n // If cols is a number, convert it to { base: cols }\n const colsObj = typeof cols === 'number' ? { base: cols } : cols;\n\n const colClasses = [\n colsObj.base && `grid-cols-${colsObj.base}`,\n colsObj.sm && `sm:grid-cols-${colsObj.sm}`,\n colsObj.md && `md:grid-cols-${colsObj.md}`,\n colsObj.lg && `lg:grid-cols-${colsObj.lg}`,\n colsObj.xl && `xl:grid-cols-${colsObj.xl}`,\n ]\n\n return (\n <Comp\n className={clsx(\n \"grid\",\n colClasses,\n {\n \"gap-0\": gap === \"none\",\n \"gap-1\": gap === \"xs\",\n \"gap-2\": gap === \"sm\",\n \"gap-4\": gap === \"md\",\n \"gap-6\": gap === \"lg\",\n },\n className\n )}\n data-slot={dataSlot ?? 'grid'}\n >\n {children}\n </Comp>\n )\n}\n","import React from 'react'\n\nimport Section from '../../../primitives/layout/Section'\nimport { Stack as StackPrimitive } from '../../../primitives/layout/Stack'\nimport { Inline as InlinePrimitive } from '../../../primitives/layout/Inline'\nimport { Grid as GridPrimitive } from '../../../primitives/layout/Grid'\n\nexport const SectionNode: React.FC<any> = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, allowOverflow, ...props }) => <Section {...props} allowOverflow={allowOverflow} />\nexport const StackNode: React.FC<any> = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => <StackPrimitive {...props} />\nexport const InlineNode: React.FC<any> = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => <InlinePrimitive {...props} />\nexport const GridNode: React.FC<any> = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => <GridPrimitive {...props} />\nexport const DivNode: React.FC<any> = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...props }) => (\n <div {...props} />\n)\n","import React from 'react';\nimport type { RichTextPrimitiveProps } from \"../primitives\";\nimport type { TipTapNode } from \"../../../system/manifest/richTextSchema\";\n\nfunction renderMarks(text: string, marks: Array<{ type: string }> | null | undefined, key: string) {\n if (!marks || marks.length === 0) return text;\n return marks.reduce<React.ReactNode>((acc, mark) => {\n switch (mark.type) {\n case 'bold':\n case 'strong':\n return <strong key={`${key}-b`}>{acc}</strong>;\n case 'italic':\n case 'em':\n return <em key={`${key}-i`}>{acc}</em>;\n default:\n return acc;\n }\n }, text);\n}\n\nfunction renderDoc(node: TipTapNode | null | undefined, key: string): React.ReactNode {\n if (!node || !node.type) return null;\n const children = node.content?.map((child, index) => renderDoc(child, `${key}-${index}`));\n\n switch (node.type) {\n case 'doc':\n return <>{children}</>;\n case 'paragraph':\n if (!children && !node.text) return <p key={key} />;\n return <p key={key}>{children ?? renderMarks(node.text ?? '', node.marks, key)}</p>;\n case 'heading': {\n const level = Math.min(Math.max((node.attrs?.level as number) ?? 2, 1), 6);\n const headingTag = `h${level}`;\n return React.createElement(headingTag, { key }, children);\n }\n case 'bulletList':\n return <ul key={key}>{children}</ul>;\n case 'orderedList':\n return <ol key={key}>{children}</ol>;\n case 'listItem':\n return <li key={key}>{children}</li>;\n case 'blockquote':\n return <blockquote key={key}>{children}</blockquote>;\n case 'horizontalRule':\n return <hr key={key} />;\n case 'text':\n return renderMarks(node.text ?? '', node.marks, key);\n default:\n return null;\n }\n}\n\nexport default function RichText({ as: Comp = 'div', className = '', doc, path }: RichTextPrimitiveProps) {\n const content = doc ? renderDoc(doc, 'doc') : null;\n const dataAttributes = path ? { 'data-builder-richtext': path } : undefined;\n return (\n <Comp className={`${className}`} {...dataAttributes}>\n {content}\n </Comp>\n );\n}\n","import React from \"react\";\nimport type { TextProps } from \"../primitives\";\n\nexport default function Text({ as: Comp = \"span\", children, className = \"\", path }: TextProps) {\n const dataAttributes = path ? { 'data-builder-text': path } : undefined;\n return <Comp className={className} {...dataAttributes}>{children}</Comp>;\n}\n","import React from 'react'\n\nimport RichTextPrimitive from '../../../primitives/content/components/RichText'\nimport TextPrimitive from '../../../primitives/content/components/Text'\n\nexport type TextNodeProps = {\n value?: React.ReactNode\n className?: string\n path?: string\n children?: React.ReactNode\n}\n\nexport const TextNode: React.FC<TextNodeProps & { blockId?: string; blockKind?: string; blockContent?: unknown; fragmentRegistry?: unknown; pathBase?: string }> = ({ value, children, blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...rest }) => {\n return <TextPrimitive {...rest}>{value ?? children}</TextPrimitive>\n}\n\nexport type RichTextNodeProps = {\n value?: unknown\n path?: string\n className?: string\n children?: React.ReactNode\n}\n\nexport const RichTextNode: React.FC<RichTextNodeProps & { blockId?: string; blockKind?: string; blockContent?: unknown; fragmentRegistry?: unknown; pathBase?: string }> = ({ value, blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, ...rest }) => {\n // Unwrap legacy { doc: {...} } format for backward compatibility\n const doc = (value as any)?.doc ?? value\n return <RichTextPrimitive doc={doc as any} {...rest} />\n}\n\nexport type ButtonNodeProps = {\n value?: React.ReactNode\n href?: string\n className?: string\n target?: string\n rel?: string\n children?: React.ReactNode\n /** Button variant ID (reads from theme.buttons.variants) */\n variantId?: string\n /** Disabled state */\n disabled?: boolean\n /** Button type (for form buttons) */\n type?: 'button' | 'submit' | 'reset'\n}\n\nexport const ButtonNode: React.FC<\n ButtonNodeProps & { blockId?: string; blockKind?: string; blockContent?: unknown; fragmentRegistry?: unknown; pathBase?: string }\n> = ({\n value,\n children,\n href,\n variantId = 'primary',\n disabled,\n type = 'button',\n blockId: _blockId,\n blockKind: _blockKind,\n blockContent: _blockContent,\n fragmentRegistry: _fragmentRegistry,\n pathBase: _pathBase,\n className,\n ...rest\n}) => {\n const content = value ?? children\n\n if (!content) {\n console.warn('[ButtonNode] No content to render - value and children are both empty')\n return null\n }\n\n // Simple class application - variant ID plus any custom classes\n // All styling is in generated CSS (no Tailwind utility classes needed)\n const combinedClassName = [variantId, className].filter(Boolean).join(' ')\n\n // If href is provided, render as link\n if (href) {\n return (\n <a\n href={href}\n className={combinedClassName}\n {...rest}\n >\n {content}\n </a>\n )\n }\n\n // Otherwise render as button\n return (\n <button\n type={type}\n disabled={disabled}\n className={combinedClassName}\n {...rest}\n >\n {content}\n </button>\n )\n}\n\nexport type LinkNodeProps = {\n href?: string\n className?: string\n target?: string\n rel?: string\n children?: React.ReactNode\n}\n\nexport const LinkNode: React.FC<\n LinkNodeProps & { blockId?: string; blockKind?: string; blockContent?: unknown; fragmentRegistry?: unknown; pathBase?: string }\n> = ({\n href = '#',\n children,\n blockId: _blockId,\n blockKind: _blockKind,\n blockContent: _blockContent,\n fragmentRegistry: _fragmentRegistry,\n pathBase: _pathBase,\n ...rest\n}) => {\n if (!children) return null\n return (\n <a href={href} {...rest}>\n {children}\n </a>\n )\n}\n","import React from 'react'\nimport clsx from 'clsx'\nimport {\n backgroundColorStyle,\n borderColorStyle,\n mergeStyles,\n textColorStyle,\n} from '../../../theme/utils/colorStyles'\n\ntype FormNodeProps = {\n value?: any\n submitLabel?: string\n successMessage?: string | null\n className?: string\n}\n\n// Server-safe, non-interactive form rendering\nexport const FormNodeSSR: React.FC<FormNodeProps> = ({ value, submitLabel, successMessage: _successMessage, className }) => {\n const form = value\n if (!form) {\n return (\n <div\n className={clsx('rounded-md border border-dashed p-6 text-sm', className)}\n style={mergeStyles(\n backgroundColorStyle('surface'),\n borderColorStyle('border'),\n textColorStyle('mutedText'),\n )}\n >\n Missing or unknown form.\n </div>\n )\n }\n\n const fields = (form as any)?.schemaJson?.fields\n return (\n <form method=\"POST\" action=\"/api/forms/submit\" className={clsx('space-y-4', className)}>\n <input type=\"hidden\" name=\"form_id\" value={form.id} />\n {/* Honeypot */}\n <input type=\"text\" name=\"company\" className=\"hidden\" tabIndex={-1} autoComplete=\"off\" />\n\n {Array.isArray(fields)\n ? fields.map((field: any) => {\n const inputId = `f_${field.id}`\n const label = String(field.label ?? field.id)\n const required = Boolean(field.required)\n const type = String(field.type ?? 'text')\n if (type === 'textarea') {\n return (\n <div key={field.id} className=\"space-y-1\">\n <label htmlFor={inputId} className=\"form-label\">\n {label}\n </label>\n <textarea\n id={inputId}\n name={field.id}\n required={required}\n placeholder={field.placeholder}\n rows={field.rows}\n className=\"form-textarea\"\n />\n </div>\n )\n }\n if (type === 'select') {\n const options: Array<{ value: string; label: string }> = field.options ?? []\n const multiple = Boolean(field.multiple)\n return (\n <div key={field.id} className=\"space-y-1\">\n <label htmlFor={inputId} className=\"form-label\">\n {label}\n </label>\n <select\n id={inputId}\n name={field.id}\n multiple={multiple}\n required={required}\n className=\"form-select\"\n >\n {!multiple && <option value=\"\">Select…</option>}\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>{opt.label}</option>\n ))}\n </select>\n </div>\n )\n }\n if (type === 'radio') {\n const options: Array<{ value: string; label: string }> = field.options ?? []\n return (\n <fieldset key={field.id} className=\"space-y-2\">\n <legend className=\"form-label\">\n {label}\n </legend>\n {options.map((opt) => (\n <label\n key={opt.value}\n className=\"flex items-center gap-2 form-label\"\n >\n <input type=\"radio\" name={field.id} value={opt.value} required={required} className=\"form-radio\" />\n <span>{opt.label}</span>\n </label>\n ))}\n </fieldset>\n )\n }\n if (type === 'checkbox' || type === 'consent') {\n return (\n <label\n key={field.id}\n className=\"flex items-center gap-2 form-label\"\n >\n <input type=\"checkbox\" name={field.id} required={required} className=\"form-checkbox\" />\n <span>{label}</span>\n </label>\n )\n }\n const inputType = type === 'email' || type === 'url' || type === 'tel' || type === 'number' ? type : 'text'\n const extra: Record<string, any> = {}\n if (inputType === 'text' || inputType === 'email' || inputType === 'url' || inputType === 'tel') {\n if (typeof field.minLength === 'number') extra.minLength = field.minLength\n if (typeof field.maxLength === 'number') extra.maxLength = field.maxLength\n if (typeof field.pattern === 'string' && field.pattern) extra.pattern = field.pattern\n }\n if (inputType === 'number') {\n if (typeof field.min === 'number') extra.min = field.min\n if (typeof field.max === 'number') extra.max = field.max\n }\n return (\n <div key={field.id} className=\"space-y-1\">\n <label htmlFor={inputId} className=\"form-label\">\n {label}\n </label>\n <input\n id={inputId}\n name={field.id}\n type={inputType}\n required={required}\n placeholder={field.placeholder}\n {...extra}\n className=\"form-input\"\n />\n </div>\n )\n })\n : null}\n\n <div>\n <button\n type=\"submit\"\n className=\"primary\"\n >\n {submitLabel || 'Submit'}\n </button>\n </div>\n </form>\n )\n}\n\n","import React from 'react';\nimport clsx from 'clsx';\n\ntype CarouselNodeProps = {\n children?: React.ReactNode;\n className?: string;\n slidesToShow?: number | string;\n transition?: 'slide' | 'fade';\n showControls?: boolean | string;\n};\n\n/**\n * Server-safe carousel shell.\n * Renders static markup with controls; client counterpart hydrates behavior.\n */\nexport const CarouselNodeSSR: React.FC<CarouselNodeProps> = ({\n children,\n className,\n slidesToShow = 1,\n transition = 'slide',\n showControls = true,\n}) => {\n const slides = React.Children.toArray(children).filter(Boolean);\n const resolvedSlides = normalizeSlidesToShow(slidesToShow);\n const basis = `${100 / resolvedSlides}%`;\n const controlsEnabled = normalizeBoolean(showControls);\n const showNav = controlsEnabled && slides.length > resolvedSlides;\n\n return (\n <div\n className={clsx('relative', className)}\n data-slides-to-show={resolvedSlides}\n data-transition={transition}\n data-show-controls={controlsEnabled ? 'true' : 'false'}\n >\n <div className=\"overflow-hidden\">\n <div className=\"flex\">\n {slides.map((slide, index) => (\n <div\n key={index}\n className={clsx(\n 'shrink-0',\n transition === 'fade' && 'transition-opacity duration-500 ease-in-out',\n )}\n style={{ flex: `0 0 ${basis}` }}\n >\n {slide}\n </div>\n ))}\n </div>\n </div>\n {showNav ? (\n <div className=\"absolute inset-y-0 left-0 flex items-center px-2\">\n <span className=\"inline-flex h-9 w-9 items-center justify-center rounded-full bg-black/60 text-white\">\n ‹\n </span>\n </div>\n ) : null}\n {showNav ? (\n <div className=\"absolute inset-y-0 right-0 flex items-center px-2\">\n <span className=\"inline-flex h-9 w-9 items-center justify-center rounded-full bg-black/60 text-white\">\n ›\n </span>\n </div>\n ) : null}\n </div>\n );\n};\n\nfunction normalizeSlidesToShow(value: number | string | undefined): number {\n const parsed =\n typeof value === 'string'\n ? Number.parseInt(value, 10)\n : typeof value === 'number'\n ? value\n : 1;\n if (!Number.isFinite(parsed) || parsed <= 0) return 1;\n return Math.max(1, Math.min(4, parsed));\n}\n\nfunction normalizeBoolean(value: boolean | string | undefined): boolean {\n if (typeof value === 'string') {\n return value !== 'false';\n }\n return Boolean(value);\n}\n\nexport default CarouselNodeSSR;\n","import React from 'react';\nimport clsx from 'clsx';\nimport RichTextPrimitive from '../../../primitives/content/components/RichText';\n\ntype AccordionNodeProps = {\n children?: React.ReactNode;\n className?: string;\n type?: 'single' | 'multiple';\n defaultValue?: string | string[];\n collapsible?: boolean;\n};\n\nexport const AccordionNodeSSR: React.FC<AccordionNodeProps> = ({\n children,\n className,\n type = 'single',\n defaultValue,\n}) => {\n return (\n <div\n className={clsx('w-full accordion-root', className)}\n data-accordion-type={type}\n data-default-value={Array.isArray(defaultValue) ? defaultValue.join(',') : defaultValue}\n >\n {children}\n </div>\n );\n};\n\ntype AccordionItemNodeProps = {\n className?: string;\n value?: string | number | null;\n trigger?: unknown;\n content?: unknown;\n question?: unknown;\n answer?: unknown;\n};\n\nexport const AccordionItemNodeSSR: React.FC<AccordionItemNodeProps> = ({\n className,\n value,\n trigger,\n content,\n question,\n answer,\n}) => {\n const resolvedValue =\n value !== undefined && value !== null ? String(value) : undefined;\n const triggerSource = trigger ?? question;\n const contentSource = content ?? answer;\n\n return (\n <div className={clsx('border-b accordion-item', className)} data-accordion-value={resolvedValue}>\n <div className=\"flex w-full items-center justify-between py-3 accordion-trigger\">\n <span className=\"flex-1\">{resolveNode(triggerSource)}</span>\n <span aria-hidden=\"true\">+</span>\n </div>\n <div className=\"pb-3 accordion-content\">{resolveNode(contentSource)}</div>\n </div>\n );\n};\n\nfunction resolveNode(value: unknown): React.ReactNode {\n if (typeof value === 'string' || typeof value === 'number') return String(value);\n if (isDocNode(value)) {\n return <RichTextPrimitive doc={value as any} />;\n }\n return value as React.ReactNode;\n}\n\nfunction isDocNode(value: unknown): value is { type?: string; content?: unknown } {\n return Boolean(value && typeof value === 'object' && 'type' in (value as Record<string, unknown>));\n}\n\nexport default AccordionNodeSSR;\n","import React from 'react';\nimport Section from '../../../primitives/layout/Section';\n\ntype HeaderSectionNodeProps = React.PropsWithChildren<{\n className?: string;\n [key: string]: unknown;\n}>;\n\n/**\n * Server-safe header section without scroll effects.\n * Client counterpart adds scroll-aware behavior.\n */\nconst HeaderSectionNode: React.FC<HeaderSectionNodeProps> = ({ children, className, ...rest }) => {\n return (\n <Section {...(rest as any)} className={className}>\n {children}\n </Section>\n );\n};\n\nexport default HeaderSectionNode;\n","import React from 'react';\nimport clsx from 'clsx';\nimport type { PublicEvent } from '../../blocks/events/shared/types';\n\ntype EventListProps = {\n events?: PublicEvent[] | null;\n /** Layout mode: grid (cards) or stack (vertical list) */\n layout?: 'grid' | 'stack';\n /** Number of columns in grid layout (2, 3, or 4) */\n columns?: '2' | '3' | '4';\n /** Card variant from theme (default, variant1, variant2) */\n cardVariant?: 'default' | 'variant1' | 'variant2';\n /** Button variant from theme (primary, secondary, outline, link) */\n buttonVariant?: 'primary' | 'secondary' | 'outline' | 'link';\n /** Button text (default: 'View event') */\n buttonText?: string;\n showVenue?: boolean;\n showCapacity?: boolean;\n emptyMessage?: string;\n /** Base path for event registration URLs (default: '/events') */\n basePath?: string;\n className?: string;\n};\n\n/** Default base path for event URLs */\nconst DEFAULT_EVENT_BASE_PATH = '/events';\n\n/** Column class mappings for grid layout */\nconst COLUMN_CLASSES: Record<string, string> = {\n '2': 'sm:grid-cols-2',\n '3': 'sm:grid-cols-2 lg:grid-cols-3',\n '4': 'sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4',\n};\n\n/**\n * Extract the date portion from an ISO timestamp for URL building\n */\nfunction formatDateForUrl(isoTimestamp: string): string {\n return isoTimestamp.split('T')[0];\n}\n\n/**\n * Build the registration URL for an event occurrence\n */\nfunction buildEventUrl(basePath: string, slug: string, startsAt: string): string {\n const date = formatDateForUrl(startsAt);\n const normalizedPath = basePath.startsWith('/') ? basePath : `/${basePath}`;\n const cleanPath = normalizedPath.endsWith('/') ? normalizedPath.slice(0, -1) : normalizedPath;\n return `${cleanPath}/${slug}/${date}`;\n}\n\n/**\n * Format date for display (server-safe, no Intl)\n * Returns: \"Monday, January 15, 2025\"\n */\nfunction formatDate(isoTimestamp: string): string {\n const date = new Date(isoTimestamp);\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n const months = ['January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'];\n return `${days[date.getDay()]}, ${months[date.getMonth()]} ${date.getDate()}, ${date.getFullYear()}`;\n}\n\n/**\n * Format time for display (server-safe, no Intl)\n * Returns: \"10:00 AM\"\n */\nfunction formatTime(isoTimestamp: string): string {\n const date = new Date(isoTimestamp);\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const ampm = hours >= 12 ? 'PM' : 'AM';\n const displayHours = hours % 12 || 12;\n const displayMinutes = minutes.toString().padStart(2, '0');\n return `${displayHours}:${displayMinutes} ${ampm}`;\n}\n\n/**\n * EventCard Component (Server-safe)\n */\nconst EventCardSSR: React.FC<{\n event: PublicEvent;\n cardVariant?: 'default' | 'variant1' | 'variant2';\n buttonVariant?: 'primary' | 'secondary' | 'outline' | 'link';\n buttonText?: string;\n showVenue?: boolean;\n showCapacity?: boolean;\n basePath: string;\n}> = ({\n event,\n cardVariant = 'default',\n buttonVariant = 'primary',\n buttonText = 'View event',\n showVenue = true,\n showCapacity = true,\n basePath,\n}) => {\n const formattedDate = formatDate(event.startsAt);\n const formattedTime = `${formatTime(event.startsAt)} - ${formatTime(event.endsAt)}`;\n\n const isSoldOut = event.capacity !== null && event.availableSpots === 0;\n const spotsLeft = event.availableSpots;\n\n const cardClass = `card-${cardVariant}`;\n const buttonClass = `button-${buttonVariant}`;\n\n return (\n <article className={`${cardClass} group flex flex-col`}>\n <div className=\"card-content flex flex-col h-full\">\n <div className=\"mb-3\">\n <time className=\"text-sm font-medium opacity-60\">\n {formattedDate}\n </time>\n <p className=\"text-sm opacity-70\">{formattedTime}</p>\n </div>\n\n <h3 className=\"card-title mb-2 text-lg font-semibold\">\n {event.title}\n </h3>\n\n {event.description && (\n <p className=\"card-body mb-3 line-clamp-2 text-sm opacity-70\">\n {event.description}\n </p>\n )}\n\n {showVenue && event.venue && (\n <div className=\"mb-3 text-sm opacity-60\">\n <span className=\"font-medium\">{event.venue.name}</span>\n {event.venue.address && (\n <span className=\"ml-1 opacity-70\">\n · {event.venue.address}\n </span>\n )}\n </div>\n )}\n\n <div className=\"mt-auto flex items-center justify-between pt-4\">\n {showCapacity && event.capacity !== null && (\n <div>\n {isSoldOut ? (\n <span className=\"badge-status badge-status-sold-out\">\n Sold Out\n </span>\n ) : spotsLeft !== null && spotsLeft <= 5 ? (\n <span className=\"badge-status badge-status-low\">\n {spotsLeft} {spotsLeft === 1 ? 'spot' : 'spots'} left\n </span>\n ) : (\n <span className=\"badge-status badge-status-available\">\n {spotsLeft} spots available\n </span>\n )}\n </div>\n )}\n\n {!isSoldOut && (\n <a\n href={buildEventUrl(basePath, event.slug, event.startsAt)}\n className={buttonClass}\n >\n {buttonText}\n </a>\n )}\n </div>\n </div>\n </article>\n );\n};\n\n/**\n * EventListSSR Component\n *\n * Server-safe version of EventListClient for SSR rendering.\n * Renders the same HTML structure for proper hydration.\n */\nexport const EventListSSR: React.FC<EventListProps> = ({\n events,\n layout = 'grid',\n columns = '3',\n cardVariant = 'default',\n buttonVariant = 'primary',\n buttonText = 'View event',\n showVenue = true,\n showCapacity = true,\n emptyMessage = 'No upcoming events scheduled.',\n basePath = DEFAULT_EVENT_BASE_PATH,\n className,\n}) => {\n const normalizedEvents = events ?? [];\n\n if (normalizedEvents.length === 0) {\n return (\n <div className={clsx('event-list event-list-empty rounded-xl border border-dashed p-12 text-center', className)}>\n <p className=\"text-base opacity-60\">{emptyMessage}</p>\n </div>\n );\n }\n\n const containerClass = layout === 'stack'\n ? 'flex flex-col gap-6'\n : `grid gap-6 ${COLUMN_CLASSES[columns] || COLUMN_CLASSES['3']}`;\n\n return (\n <div className={clsx('event-list', containerClass, className)}>\n {normalizedEvents.map((event) => (\n <EventCardSSR\n key={event.id}\n event={event}\n cardVariant={cardVariant}\n buttonVariant={buttonVariant}\n buttonText={buttonText}\n showVenue={showVenue}\n showCapacity={showCapacity}\n basePath={basePath}\n />\n ))}\n </div>\n );\n};\n\nexport default EventListSSR;\n","import React from 'react';\n\ntype BookingFormProps = {\n siteId?: string;\n formId?: string;\n serviceId?: string | null;\n resourceId?: string | null;\n submitLabel?: string | null;\n successMessage?: string | null;\n className?: string | null;\n children?: React.ReactNode;\n};\n\n/**\n * Server-safe placeholder for booking form.\n * Renders a container with identifying data attributes so hydration can attach\n * to a stable shell without pulling client hooks into the server graph.\n */\nexport function BookingFormSSR({\n siteId,\n formId,\n serviceId,\n resourceId,\n submitLabel,\n successMessage,\n className,\n children,\n}: BookingFormProps) {\n return (\n <div\n className={`booking-form-ssr ${className ?? ''}`.trim()}\n data-booking-form\n data-site-id={siteId ?? undefined}\n data-form-id={formId ?? undefined}\n data-service-id={serviceId ?? undefined}\n data-resource-id={resourceId ?? undefined}\n >\n <div className=\"booking-form-ssr__summary\">\n <strong>{submitLabel ?? 'Book now'}</strong>\n {successMessage ? <p className=\"booking-form-ssr__success\">{successMessage}</p> : null}\n </div>\n {children}\n </div>\n );\n}\n\nexport default BookingFormSSR;\n","import React from 'react';\n\ntype EventRegistrationProps = {\n siteId?: string;\n className?: string | null;\n buttonText?: string | null;\n maxTickets?: string | null;\n children?: React.ReactNode;\n};\n\n/**\n * Server-safe placeholder for event registration.\n * Provides a static container for island hydration without importing client hooks.\n */\nexport function EventRegistrationSSR({ siteId, className, buttonText, maxTickets, children }: EventRegistrationProps) {\n return (\n <div\n className={`event-registration ${className ?? ''}`.trim()}\n data-event-registration\n data-site-id={siteId ?? undefined}\n data-max-tickets={maxTickets ?? undefined}\n >\n <div className=\"event-registration__summary\">\n <strong>{buttonText ?? 'Register'}</strong>\n </div>\n {children}\n </div>\n );\n}\n\nexport default EventRegistrationSSR;\n","/**\n * Shared utility functions for event blocks\n */\n\n/** Default base path for event URLs */\nexport const DEFAULT_EVENT_BASE_PATH = '/events';\n\n/** Column class mappings for grid layouts */\nexport const COLUMN_CLASSES: Record<string, string> = {\n '2': 'sm:grid-cols-2',\n '3': 'sm:grid-cols-2 lg:grid-cols-3',\n '4': 'sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4',\n};\n\n/**\n * Build container class based on layout mode\n * @param layout - 'grid' or 'stack'\n * @param columns - Number of columns for grid layout ('2', '3', '4')\n * @returns Tailwind class string for the container\n */\nexport function getContainerClass(layout: 'grid' | 'stack', columns: string): string {\n if (layout === 'stack') {\n return 'flex flex-col gap-6';\n }\n return `grid gap-6 ${COLUMN_CLASSES[columns] || COLUMN_CLASSES['3']}`;\n}\n\n\n/** Day names starting from Sunday */\nexport const DAY_NAMES = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n/** Month names */\nexport const MONTH_NAMES = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n];\n\n/**\n * Extract the date portion from an ISO timestamp for URL building\n * @example formatDateForUrl('2025-01-15T10:00:00Z') => '2025-01-15'\n */\nexport function formatDateForUrl(isoTimestamp: string): string {\n return isoTimestamp.split('T')[0];\n}\n\n/**\n * Build the registration URL for an event occurrence\n * Pattern: /:basePath/:slug/:date\n */\nexport function buildEventUrl(basePath: string, slug: string, startsAt: string): string {\n const date = formatDateForUrl(startsAt);\n const normalizedPath = basePath.startsWith('/') ? basePath : `/${basePath}`;\n const cleanPath = normalizedPath.endsWith('/') ? normalizedPath.slice(0, -1) : normalizedPath;\n return `${cleanPath}/${slug}/${date}`;\n}\n\n/**\n * Format date for display (server-safe, no Intl)\n * Returns: \"Monday, January 15, 2025\"\n */\nexport function formatDate(isoTimestamp: string): string {\n const date = new Date(isoTimestamp);\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n const months = ['January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'];\n return `${days[date.getDay()]}, ${months[date.getMonth()]} ${date.getDate()}, ${date.getFullYear()}`;\n}\n\n/**\n * Format time for display (server-safe, no Intl)\n * Returns: \"10:00 AM\"\n */\nexport function formatTime(isoTimestamp: string): string {\n const date = new Date(isoTimestamp);\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const ampm = hours >= 12 ? 'PM' : 'AM';\n const displayHours = hours % 12 || 12;\n const displayMinutes = minutes.toString().padStart(2, '0');\n return `${displayHours}:${displayMinutes} ${ampm}`;\n}\n\n/**\n * Format a date as YYYY-MM-DD for use as a map key\n */\nexport function formatDateKey(date: Date): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\n/**\n * Check if a date is today\n */\nexport function isToday(date: Date): boolean {\n const today = new Date();\n return date.getDate() === today.getDate() &&\n date.getMonth() === today.getMonth() &&\n date.getFullYear() === today.getFullYear();\n}\n\n/**\n * Get the start of month for a given date\n */\nexport function getStartOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n}\n\n/**\n * Get the end of month for a given date\n */\nexport function getEndOfMonth(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0);\n}\n\n/**\n * Add months to a date\n */\nexport function addMonths(date: Date, months: number): Date {\n const result = new Date(date);\n result.setMonth(result.getMonth() + months);\n return result;\n}\n\n/**\n * Get date range for 3 months centered on a given date\n * @param date Reference date\n * @returns Date range spanning previous, current, and next months (ISO strings)\n */\nexport function getThreeMonthRange(date: Date): { from: string; to: string } {\n const year = date.getFullYear();\n const month = date.getMonth();\n // Previous month start\n const prevStart = new Date(year, month - 1, 1);\n // Next month end\n const nextEnd = new Date(year, month + 2, 0);\n return {\n from: `${formatDateKey(prevStart)}T00:00:00Z`,\n to: `${formatDateKey(nextEnd)}T23:59:59Z`,\n };\n}\n","import React from 'react';\nimport type { PublicEvent, CardVariant, ButtonVariant } from '../../../../blocks/events/shared/types';\nimport { buildEventUrl, formatDate, formatTime, DEFAULT_EVENT_BASE_PATH } from './utils';\n\ntype EventCardProps = {\n event: PublicEvent;\n cardVariant?: CardVariant;\n buttonVariant?: ButtonVariant;\n buttonText?: string;\n showVenue?: boolean;\n showCapacity?: boolean;\n basePath?: string;\n};\n\n/**\n * EventCard Component\n *\n * Displays a single event with title, date, venue, and capacity.\n * Uses theme card and button variant classes for styling.\n *\n * This component is server-safe (uses no client APIs like Intl).\n */\nexport const EventCard: React.FC<EventCardProps> = ({\n event,\n cardVariant = 'default',\n buttonVariant = 'primary',\n buttonText = 'View event',\n showVenue = true,\n showCapacity = true,\n basePath = DEFAULT_EVENT_BASE_PATH,\n}) => {\n const formattedDate = formatDate(event.startsAt);\n const formattedTime = `${formatTime(event.startsAt)} - ${formatTime(event.endsAt)}`;\n\n const isSoldOut = event.capacity !== null && event.availableSpots === 0;\n const spotsLeft = event.availableSpots;\n\n const cardClass = `card-${cardVariant}`;\n const buttonClass = `button-${buttonVariant}`;\n\n return (\n <article className={`${cardClass} group flex flex-col`}>\n <div className=\"card-content flex flex-col h-full\">\n {/* Date and time header */}\n <div className=\"mb-3\">\n <time className=\"text-sm font-medium opacity-60\">\n {formattedDate}\n </time>\n <p className=\"text-sm opacity-70\">{formattedTime}</p>\n </div>\n\n {/* Event title */}\n <h3 className=\"card-title mb-2 text-lg font-semibold\">\n {event.title}\n </h3>\n\n {/* Description */}\n {event.description && (\n <p className=\"card-body mb-3 line-clamp-2 text-sm opacity-70\">\n {event.description}\n </p>\n )}\n\n {/* Venue */}\n {showVenue && event.venue && (\n <div className=\"mb-3 text-sm opacity-60\">\n <span className=\"font-medium\">{event.venue.name}</span>\n {event.venue.address && (\n <span className=\"ml-1 opacity-70\">\n · {event.venue.address}\n </span>\n )}\n </div>\n )}\n\n {/* Footer with capacity and register button */}\n <div className=\"mt-auto flex items-center justify-between pt-4\">\n {/* Capacity indicator */}\n {showCapacity && event.capacity !== null && (\n <div>\n {isSoldOut ? (\n <span className=\"badge-status badge-status-sold-out\">\n Sold Out\n </span>\n ) : spotsLeft !== null && spotsLeft <= 5 ? (\n <span className=\"badge-status badge-status-low\">\n {spotsLeft} {spotsLeft === 1 ? 'spot' : 'spots'} left\n </span>\n ) : (\n <span className=\"badge-status badge-status-available\">\n {spotsLeft} spots available\n </span>\n )}\n </div>\n )}\n\n {/* Action button */}\n {!isSoldOut && (\n <a\n href={buildEventUrl(basePath, event.slug, event.startsAt)}\n className={buttonClass}\n >\n {buttonText}\n </a>\n )}\n </div>\n </div>\n </article>\n );\n};\n\nexport default EventCard;\n","import React from 'react';\n\ntype EmptyStateProps = {\n message?: string;\n className?: string;\n};\n\n/**\n * EmptyState Component\n * Displays when no events are available\n */\nexport const EmptyState: React.FC<EmptyStateProps> = ({\n message = 'No upcoming events scheduled.',\n className,\n}) => {\n return (\n <div className={`event-list-empty rounded-xl border border-dashed p-12 text-center ${className || ''}`}>\n <p className=\"text-base opacity-60\">{message}</p>\n </div>\n );\n};\n\nexport default EmptyState;\n","import React from 'react';\nimport type { PublicEvent, CardVariant, ButtonVariant, EventLayout } from '../../../blocks/events/shared/types';\nimport { EventCard, EmptyState, getContainerClass } from './shared';\n\ntype EventSpotlightProps = {\n events?: PublicEvent[] | null;\n layout?: EventLayout;\n columns?: '2' | '3';\n cardVariant?: CardVariant;\n buttonVariant?: ButtonVariant;\n buttonText?: string;\n showVenue?: boolean;\n showCapacity?: boolean;\n emptyMessage?: string;\n className?: string;\n};\n\n/**\n * EventSpotlight Component\n *\n * Displays a simple list of featured upcoming events.\n * This is a server-safe component with no client-side interactivity.\n *\n * Designed for homepages and landing pages to highlight 1-6 events.\n */\nexport const EventSpotlight: React.FC<EventSpotlightProps> = ({\n events,\n layout = 'grid',\n columns = '3',\n cardVariant = 'default',\n buttonVariant = 'primary',\n buttonText = 'View event',\n showVenue = true,\n showCapacity = true,\n emptyMessage = 'No upcoming events scheduled.',\n className,\n}) => {\n const normalizedEvents = events ?? [];\n\n // Empty state\n if (normalizedEvents.length === 0) {\n return <EmptyState message={emptyMessage} className={className} />;\n }\n\n // Build container class based on layout\n const containerClass = getContainerClass(layout, columns);\n\n return (\n <div className={`event-spotlight ${containerClass} ${className || ''}`}>\n {normalizedEvents.map((event) => (\n <EventCard\n key={event.id}\n event={event}\n cardVariant={cardVariant}\n buttonVariant={buttonVariant}\n buttonText={buttonText}\n showVenue={showVenue}\n showCapacity={showCapacity}\n />\n ))}\n </div>\n );\n};\n\nexport default EventSpotlight;\n","import React from 'react';\nimport type { PublicEvent, CardVariant, ButtonVariant, EventLayout, ColumnOption } from '../../../blocks/events/shared/types';\nimport { EventCard, EmptyState, getContainerClass } from './shared';\n\ntype EventListingProps = {\n events?: PublicEvent[] | null;\n siteId: string;\n layout?: EventLayout;\n columns?: ColumnOption;\n eventsPerPage?: string;\n loadMoreText?: string;\n cardVariant?: CardVariant;\n buttonVariant?: ButtonVariant;\n buttonText?: string;\n showVenue?: boolean;\n showCapacity?: boolean;\n emptyMessage?: string;\n className?: string;\n};\n\n/**\n * EventListing SSR Component\n *\n * Server-safe version for SSR rendering.\n * Renders initial events without pagination (client handles that).\n */\nexport const EventListingSSR: React.FC<EventListingProps> = ({\n events,\n layout = 'grid',\n columns = '3',\n cardVariant = 'default',\n buttonVariant = 'primary',\n buttonText = 'View event',\n showVenue = true,\n showCapacity = true,\n emptyMessage = 'No upcoming events scheduled.',\n className,\n}) => {\n const normalizedEvents = events ?? [];\n\n // Empty state\n if (normalizedEvents.length === 0) {\n return <EmptyState message={emptyMessage} className={className} />;\n }\n\n // Build container class based on layout\n const containerClass = getContainerClass(layout, columns);\n\n return (\n <div className={`event-listing ${className || ''}`}>\n <div className={containerClass}>\n {normalizedEvents.map((event) => (\n <EventCard\n key={event.id}\n event={event}\n cardVariant={cardVariant}\n buttonVariant={buttonVariant}\n buttonText={buttonText}\n showVenue={showVenue}\n showCapacity={showCapacity}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport default EventListingSSR;\n","import type { ComponentRegistry } from '../resolver'\nimport { SectionNode, StackNode, InlineNode, GridNode, DivNode } from '../nodes/layout'\nimport { TextNode, RichTextNode, ButtonNode, LinkNode } from '../nodes/basic'\nimport { MediaNode } from '../nodes/media'\nimport { FormNodeSSR } from '../nodes/form.server'\nimport { CarouselNodeSSR } from '../nodes/carousel.server'\nimport { AccordionNodeSSR, AccordionItemNodeSSR } from '../nodes/accordion.server'\nimport HeaderSectionNode from '../nodes/header-section.server'\nimport { EventListSSR } from '../nodes/event-list.server'\nimport BookingFormSSR from '../nodes/booking-form.server'\nimport EventRegistrationSSR from '../nodes/event-registration.server'\nimport { EventSpotlight, EventListingSSR } from '../nodes/events'\n\nexport const serverComponentRegistry: ComponentRegistry = {\n div: DivNode,\n section: SectionNode,\n headerSection: HeaderSectionNode,\n stack: StackNode,\n inline: InlineNode,\n grid: GridNode,\n text: TextNode,\n richText: RichTextNode,\n button: ButtonNode,\n media: MediaNode,\n link: LinkNode,\n form: FormNodeSSR,\n carousel: CarouselNodeSSR,\n accordion: AccordionNodeSSR,\n accordionItem: AccordionItemNodeSSR,\n 'event-list': EventListSSR,\n 'booking-form': BookingFormSSR,\n 'event-registration': EventRegistrationSSR,\n // New event blocks\n 'event-spotlight': EventSpotlight,\n 'event-listing': EventListingSSR,\n 'event-calendar': EventSpotlight, // SSR fallback - calendar renders events as spotlight\n}\n","import type { ComponentRegistry } from '../resolver'\nimport { serverComponentRegistry } from './registry.server'\n\nexport function getDefaultComponentRegistry(): ComponentRegistry {\n // Server-safe by default. Client-side apps that need enhanced components\n // should import from '@riverbankcms/blocks/client' instead.\n return serverComponentRegistry\n}\n\nexport { serverComponentRegistry } from './registry.server'\n// Note: clientComponentRegistry is NOT exported here to keep this module server-safe.\n// For client components, import from '@riverbankcms/blocks/client' instead.\n\n// Convenience alias for direct access\nexport const defaultComponentRegistry: ComponentRegistry = getDefaultComponentRegistry()\n","import React, { type ReactNode } from 'react'\nimport type { BlockManifest } from './manifest'\nimport type { SystemBlockComponent } from './registry'\nimport { resolveTree, getDefaultComponentRegistry } from './runtime'\nimport type { Theme } from '../theme/schema'\nimport type { NodeDefinition } from './node'\nimport { defaultThemeTokens } from './theme'\n\ntype RenderOptions = {\n registry?: Parameters<typeof resolveTree>[1][\"registry\"];\n theme?: Parameters<typeof resolveTree>[1][\"theme\"];\n themeConfig?: Theme;\n transforms?: Parameters<typeof resolveTree>[1][\"transforms\"];\n viewModelOverrides?: Record<string, unknown>;\n data?: Record<string, unknown>;\n pathBase?: string;\n};\n\n/**\n * Resolves the layout definition for a block based on its manifest and content.\n *\n * Fallback chain:\n * 1. content.variant (if manifest.variants exists and contains the key)\n * 2. content.layout (legacy blog listing support)\n * 3. manifest.defaultVariant (if manifest.variants exists)\n * 4. First key in manifest.variants\n * 5. manifest.layout\n *\n * @param manifest - The block manifest\n * @param content - The block content object\n * @returns The resolved NodeDefinition layout or null if none found\n */\nexport function resolveBlockLayout(\n manifest: BlockManifest,\n content: Record<string, unknown>\n): NodeDefinition | null {\n // If no variants system, use manifest.layout directly\n if (!manifest.variants) {\n return manifest.layout ?? null;\n }\n\n // Try content.variant first\n const contentVariant = (content as any)?.variant;\n if (typeof contentVariant === 'string' && manifest.variants[contentVariant]) {\n return manifest.variants[contentVariant]!;\n }\n\n // Try content.layout for legacy blog listing blocks\n const contentLayout = (content as any)?.layout;\n if (typeof contentLayout === 'string' && manifest.variants[contentLayout]) {\n return manifest.variants[contentLayout]!;\n }\n\n // Try manifest.defaultVariant\n if (manifest.defaultVariant && manifest.variants[manifest.defaultVariant]) {\n return manifest.variants[manifest.defaultVariant]!;\n }\n\n // Use first variant key\n const variantKeys = Object.keys(manifest.variants);\n if (variantKeys.length > 0 && variantKeys[0]) {\n return manifest.variants[variantKeys[0]]!;\n }\n\n // Fall back to manifest.layout\n return manifest.layout ?? null;\n}\n\nexport function makeDefaultBlockComponent<TContent = Record<string, unknown>>(args: {\n manifest: BlockManifest;\n}): SystemBlockComponent<TContent> {\n const { manifest } = args;\n return function DefaultBlockComponent({\n content,\n data,\n registry,\n theme,\n themeConfig,\n transforms,\n viewModelOverrides,\n pathBase,\n blockId,\n blockKind,\n blockBindings,\n fragmentRegistry,\n }) {\n if (!theme) {\n throw new Error('Block rendering requires theme tokens; none were provided to makeDefaultBlockComponent');\n }\n if (!registry) {\n throw new Error('Block rendering requires a component registry; none was provided');\n }\n // Resolve layout from content (variant-aware)\n const layout = resolveBlockLayout(manifest, content as Record<string, unknown>);\n if (!layout) {\n throw new Error(`Block manifest \"${manifest.name}\" requires a layout definition`);\n }\n const baseVm: Record<string, unknown> = { content };\n if (data) {\n const normalizedData = { ...(data as Record<string, unknown>) };\n baseVm.data = {\n ...(typeof baseVm.data === 'object' && baseVm.data !== null\n ? (baseVm.data as Record<string, unknown>)\n : {}),\n ...normalizedData,\n };\n }\n // Merge viewModelOverrides and add theme to $root for bindings like $root.theme.header.variant\n const mergedOverrides = viewModelOverrides ?? {};\n const existingRoot = (mergedOverrides as Record<string, unknown>).$root as Record<string, unknown> | undefined;\n const viewModel = {\n ...baseVm,\n ...mergedOverrides,\n $root: {\n ...(existingRoot ?? {}),\n ...(typeof themeConfig !== 'undefined' ? { theme: themeConfig } : {}),\n },\n } as Record<string, unknown>;\n // Augment theme tokens with button system for transforms (required by ui.buttonClass)\n const themeForTransforms = themeConfig?.buttons\n ? ({ ...(theme as any), buttons: themeConfig.buttons } as typeof theme)\n : theme;\n\n return resolveTree(layout, {\n registry,\n viewModel,\n transforms,\n theme: themeForTransforms,\n pathBase,\n blockId,\n blockKind,\n blockContent: content,\n blockBindings,\n fragmentRegistry,\n });\n } as SystemBlockComponent<TContent>;\n}\n\nexport function renderBlock<TContent>(\n manifest: BlockManifest,\n content: TContent,\n options: RenderOptions = {},\n): ReactNode {\n // Validate that layout is resolvable\n const layout = resolveBlockLayout(manifest, content as Record<string, unknown>);\n if (!layout) {\n throw new Error(`Block manifest \"${manifest.name}\" requires a layout definition`);\n }\n\n // Use makeDefaultBlockComponent for consistent behavior with PageRenderer\n const Component = makeDefaultBlockComponent<TContent>({ manifest });\n\n // Resolve a registry explicitly for this render path\n const resolvedRegistry = options.registry ?? getDefaultComponentRegistry();\n\n // Use default theme tokens if none provided (for tests and standalone rendering)\n const resolvedTheme = options.theme ?? defaultThemeTokens;\n\n return React.createElement(Component, {\n content,\n data: options.data,\n registry: resolvedRegistry,\n theme: resolvedTheme,\n themeConfig: options.themeConfig,\n transforms: options.transforms,\n viewModelOverrides: options.viewModelOverrides,\n pathBase: options.pathBase,\n blockId: null,\n blockKind: manifest.name,\n });\n}\n","import type { RouteMap, RouteMapEntry } from \"../transforms\";\nimport type { BlockManifest } from \"./schema\";\n\ntype JsonRecord = Record<string, unknown>;\n\n/**\n * Hydrates link objects within block content using the provided route map. Returns\n * the original content reference when no mutations are required to avoid unnecessary renders.\n */\nexport function hydrateManifestLinks(\n manifest: BlockManifest | undefined,\n content: Record<string, unknown>,\n routes: RouteMap | undefined,\n): Record<string, unknown> {\n if (!routes || !manifest?.fields?.length) {\n return content;\n }\n\n const hydrated = hydrateValue(content, routes);\n return hydrated as Record<string, unknown>;\n}\n\nfunction hydrateValue(value: unknown, routes: RouteMap): unknown {\n if (Array.isArray(value)) {\n const resolvedItems = value.map((item) => hydrateValue(item, routes));\n const isUnchanged = resolvedItems.every((item, index) => item === value[index]);\n return isUnchanged ? value : resolvedItems;\n }\n\n if (isRecord(value)) {\n if (isInternalLink(value)) {\n return hydrateInternalLink(value, routes);\n }\n\n const resolvedEntries = Object.entries(value).map(([key, entry]) => [key, hydrateValue(entry, routes)] as const);\n const isUnchanged = resolvedEntries.every(([key, entry]) => entry === value[key]);\n return isUnchanged ? value : Object.fromEntries(resolvedEntries);\n }\n\n return value;\n}\n\nfunction hydrateInternalLink(link: JsonRecord, routes: RouteMap): JsonRecord {\n const routeId = typeof link.routeId === \"string\" && link.routeId.length > 0 ? link.routeId : null;\n if (!routeId) {\n return link;\n }\n\n const routeEntry = routes[routeId];\n if (!routeEntry) {\n return link;\n }\n\n const nextHref = resolveRouteHref(routeEntry);\n const currentHref = typeof link.href === \"string\" && link.href.length > 0 ? link.href : null;\n\n const nextUpdatedAt = resolveRouteUpdatedAt(routeEntry);\n\n const updates: JsonRecord = {};\n if (nextHref && nextHref !== currentHref) {\n updates.href = nextHref;\n }\n if (nextUpdatedAt && link.updatedAt !== nextUpdatedAt) {\n updates.updatedAt = nextUpdatedAt;\n }\n\n return Object.keys(updates).length > 0 ? { ...link, ...updates } : link;\n}\n\nfunction resolveRouteHref(entry: RouteMapEntry): string | null {\n if (typeof entry === \"string\") {\n return entry.length > 0 ? entry : null;\n }\n\n if (!isRecord(entry)) {\n return null;\n }\n\n const candidates = [entry.path, entry.href, entry.url, entry.draftPath];\n for (const candidate of candidates) {\n if (typeof candidate === \"string\" && candidate.length > 0) {\n return candidate;\n }\n }\n\n return null;\n}\n\nfunction resolveRouteUpdatedAt(entry: RouteMapEntry): string | null {\n if (!isRecord(entry)) {\n return null;\n }\n const candidates = [\n entry.updatedAt,\n entry.updated_at,\n entry.publishedAt,\n entry.published_at,\n entry.modifiedAt,\n entry.modified_at,\n ];\n for (const candidate of candidates) {\n if (typeof candidate === \"string\" && candidate.length > 0) {\n return candidate;\n }\n }\n return null;\n}\n\nfunction isInternalLink(value: JsonRecord): value is JsonRecord & { kind: \"internal\"; routeId: string } {\n if (value.kind !== \"internal\") {\n return false;\n }\n\n if (typeof value.routeId !== \"string\" || value.routeId.length === 0) {\n return false;\n }\n\n return true;\n}\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","/**\n * SDK Custom Block Transform Utilities\n *\n * Transforms SDK custom block definitions into BlockManifest and SystemBlockDefinition\n * for use in PageRenderer and editor-blocks.\n *\n * This is the single source of truth for SDK block transformation - both PageRenderer\n * and editor-blocks should import from here to avoid drift.\n */\n\nimport type { SdkCustomBlock, BlockManifest } from './system/manifest/schema';\nimport type { SystemBlockDefinition } from './system/registry';\n\n/**\n * Transforms an SDK custom block into a BlockManifest.\n *\n * SDK blocks don't have layouts (they MUST use blockOverrides), so we create\n * a minimal manifest with just the fields and metadata.\n */\nexport function transformSdkBlockToManifest(sdkBlock: SdkCustomBlock): BlockManifest {\n return {\n name: sdkBlock.id,\n version: '1.0.0',\n title: sdkBlock.title,\n titleSource: sdkBlock.titleSource,\n description: sdkBlock.description,\n component: sdkBlock.id, // Not used for SDK blocks but required by type\n fields: sdkBlock.fields,\n slots: [],\n category: sdkBlock.category,\n tags: sdkBlock.tags,\n icon: sdkBlock.icon,\n // SDK blocks have fixed behaviours because they MUST be rendered via blockOverrides.\n // They don't support inline editing or animation in the CMS since there's no\n // layout definition - rendering is entirely handled by the SDK site's component.\n behaviours: {\n supportsThemeSwitching: true, // SDK blocks receive theme context\n inlineEditing: false, // No CMS inline editing - SDK handles rendering\n animation: false, // Animation is SDK site's responsibility\n paletteHidden: false, // Visible in block picker\n },\n };\n}\n\n/**\n * Transforms an SDK custom block into a SystemBlockDefinition.\n *\n * This creates a minimal definition with just the manifest - no data loaders\n * or content normalizers since SDK blocks handle their own rendering.\n */\nexport function transformSdkBlockToDefinition(\n sdkBlock: SdkCustomBlock\n): SystemBlockDefinition<Record<string, unknown>> {\n return {\n manifest: transformSdkBlockToManifest(sdkBlock),\n // SDK custom blocks may have dataLoaders defined in their config\n dataLoaders: sdkBlock.dataLoaders,\n // No content normalizer - SDK blocks use raw content\n };\n}\n","import type React from \"react\";\nimport type { PrimitiveProps } from \"../types\";\nimport type { TipTapNode } from \"../../system/manifest/richTextSchema\";\nimport TextView from \"./components/Text\";\nimport RichTextView from \"./components/RichText\";\n\n// Text keeps the classic primitive contract (children required)\nexport type TextProps = PrimitiveProps & {\n path?: string;\n blockData?: Record<string, unknown> | null;\n};\n\n// RichText renders provided html/doc; children is not required here\nexport type RichTextPrimitiveProps = {\n as?: React.ElementType;\n className?: string;\n path?: string;\n doc?: TipTapNode | null;\n variant?: RichTextVariant;\n blockData?: Record<string, unknown> | null;\n};\n\nexport type RichTextVariant = \"full\" | \"inline\" | \"limited\" | \"media\";\n\nexport type PrimitiveAPI = {\n Text: React.ComponentType<TextProps>;\n RichText: React.ComponentType<RichTextPrimitiveProps>;\n};\n\nexport const Text = TextView;\nexport const RichText = RichTextView;\n","/**\n * Helper utilities for resolving background data in custom block components.\n *\n * These helpers allow custom block overrides to apply section backgrounds\n * (color, gradient, image) with full theme token support, matching the\n * behavior of the default declarative block system.\n */\n\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport { BACKGROUND_POSITION_PRESET_VALUES, getAnchorClasses } from '../constants/background';\nimport type { ThemeTokens } from '../theme';\nimport type { Media } from '../../lib/media';\nimport { resolveImageUrl } from '../runtime/nodes/media';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Raw background data from CMS content fields.\n * This is the shape of `_sectionStyles.background`, `_containerStyles.background`, etc.\n */\nexport type BackgroundInput = {\n /** Color token name (e.g., \"primary\") or raw hex value */\n color?: string | null;\n /** CSS gradient string */\n gradient?: string | null;\n /** Background image media object */\n image?: Media | null;\n /** Image sizing mode: 'fill' (cover), 'fit' (contain), 'original', 'custom' */\n objectFit?: string | null;\n /** Image position: preset keyword or custom CSS value */\n position?: string | null;\n /** Image scale value (e.g., \"150%\", \"200px\") - only for 'custom'/'original' modes */\n scale?: string | null;\n /** Background opacity (0-100) */\n opacity?: number | null;\n /** Whether background should overflow container bounds */\n overflow?: boolean | null;\n};\n\n/**\n * Resolved background ready for rendering.\n * Token names are converted to actual hex values.\n */\nexport type ResolvedBackground = {\n /** Resolved background color (hex value or null) */\n color: string | null;\n /** CSS gradient string */\n gradient: string | null;\n /** Opacity value (0-1) */\n opacity: number | null;\n /** Whether background should overflow */\n overflow: boolean;\n /** Resolved image data */\n image: {\n /** Image URL */\n url: string;\n /** Alt text */\n alt: string;\n /** Original width */\n width?: number;\n /** Original height */\n height?: number;\n } | null;\n /** Inline styles for the image element */\n imageStyle: React.CSSProperties;\n /** CSS classes for the image element */\n imageClassName: string;\n};\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nconst isString = (value: unknown): value is string =>\n typeof value === 'string' && value.trim().length > 0;\n\nconst isNumber = (value: unknown): value is number =>\n typeof value === 'number' && !isNaN(value);\n\n/**\n * Resolves a background color value.\n * - If the color is a token name found in theme.palette, returns the hex value\n * - If the color is a raw hex/CSS color, returns it as-is\n * - Returns null if no color or invalid\n */\nfunction resolveColor(color: string | null | undefined, theme?: ThemeTokens): string | null {\n if (!color || !isString(color)) return null;\n const trimmed = color.trim();\n\n // Check if it's a theme token\n if (theme?.palette?.[trimmed]) {\n return theme.palette[trimmed];\n }\n\n // Special token keywords\n if (trimmed === 'transparent') return 'transparent';\n if (trimmed === 'surface' && theme?.palette?.surface) {\n return theme.palette.surface;\n }\n\n // Return as-is (assumed to be raw hex/CSS color)\n return trimmed;\n}\n\n/**\n * Parses and normalizes a scale value.\n * - \"150%\" -> \"150%\"\n * - \"200px\" -> \"200px\"\n * - \"150\" -> \"150%\" (plain number treated as percentage)\n */\nfunction parseScale(scale: string | null | undefined): string | null {\n if (!scale || !isString(scale)) return null;\n const trimmed = scale.trim();\n if (!trimmed) return null;\n\n // If it has units, use as-is\n if (/\\d+(%|px|vh|vw|rem|em)$/.test(trimmed)) {\n return trimmed;\n }\n\n // Plain number - treat as percentage\n const num = parseFloat(trimmed);\n if (!isNaN(num)) {\n return `${num}%`;\n }\n\n return null;\n}\n\n/**\n * Resolves background data from CMS content to render-ready values.\n *\n * This helper converts raw background field data (with token names like \"primary\")\n * into resolved values (with actual hex colors from the theme palette).\n *\n * @param background - Raw background data from content (e.g., content._sectionStyles?.background)\n * @param theme - Theme tokens containing the palette for token resolution\n * @returns Resolved background with all values ready for rendering\n *\n * @example\n * ```tsx\n * import { resolveBackground } from '@riverbankcms/blocks';\n * // or from SDK: import { resolveBackground } from '@riverbankcms/sdk/rendering';\n *\n * function CustomBlock({ content, theme }: CustomBlockProps) {\n * const bg = resolveBackground(content._sectionStyles?.background, theme);\n *\n * return (\n * <section\n * className=\"relative\"\n * style={{ backgroundColor: bg.color ?? undefined }}\n * >\n * {bg.image && (\n * <img\n * src={bg.image.url}\n * alt={bg.image.alt}\n * className={bg.imageClassName}\n * style={bg.imageStyle}\n * />\n * )}\n * {content.heading}\n * </section>\n * );\n * }\n * ```\n */\nexport function resolveBackground(\n background: BackgroundInput | null | undefined,\n theme?: ThemeTokens\n): ResolvedBackground {\n if (!background) {\n return {\n color: null,\n gradient: null,\n opacity: null,\n overflow: false,\n image: null,\n imageStyle: {},\n imageClassName: 'absolute inset-0 -z-10 h-full w-full object-cover',\n };\n }\n\n // Resolve color token to hex\n const color = resolveColor(background.color, theme);\n\n // Gradient passthrough\n const gradient = isString(background.gradient) ? background.gradient.trim() : null;\n\n // Opacity (convert 0-100 to 0-1)\n const rawOpacity = isNumber(background.opacity) ? background.opacity : null;\n const opacity = rawOpacity !== null && rawOpacity >= 0 && rawOpacity <= 100\n ? rawOpacity / 100\n : null;\n\n // Overflow\n const overflow = background.overflow === true;\n\n // Image resolution\n let image: ResolvedBackground['image'] = null;\n let imageStyle: React.CSSProperties = {};\n let imageClassName = 'absolute inset-0 -z-10 h-full w-full object-cover';\n\n if (background.image) {\n const url = resolveImageUrl(background.image);\n if (url) {\n image = {\n url,\n alt: background.image.alt ?? '',\n width: background.image.width,\n height: background.image.height,\n };\n\n // Resolve image styles\n const objectFit = isString(background.objectFit) ? background.objectFit.trim() : null;\n const position = isString(background.position) ? background.position.trim() : null;\n const scaleValue = (objectFit === 'custom' || objectFit === 'original')\n ? parseScale(background.scale)\n : null;\n\n // Build image style\n imageStyle = {};\n\n // Map objectFit to CSS\n if (objectFit) {\n switch (objectFit) {\n case 'fill':\n imageStyle.objectFit = 'cover';\n break;\n case 'fit':\n imageStyle.objectFit = 'contain';\n break;\n case 'original':\n case 'custom':\n imageStyle.objectFit = 'none';\n break;\n default:\n imageStyle.objectFit = objectFit as React.CSSProperties['objectFit'];\n }\n }\n\n // Apply image opacity\n if (rawOpacity !== null && rawOpacity >= 0 && rawOpacity <= 100) {\n imageStyle.opacity = rawOpacity / 100;\n }\n\n // Apply scale\n if (scaleValue) {\n imageStyle.width = scaleValue;\n imageStyle.height = scaleValue;\n }\n\n // Apply object-position for custom values\n const isPresetPosition = position && BACKGROUND_POSITION_PRESET_VALUES.includes(position as any);\n if (position && !isPresetPosition) {\n imageStyle.objectPosition = position;\n }\n\n // Build image className\n imageClassName = buildImageClassName(objectFit, position, scaleValue);\n }\n }\n\n return {\n color,\n gradient,\n opacity,\n overflow,\n image,\n imageStyle,\n imageClassName,\n };\n}\n\n/**\n * Builds the className for a background image based on sizing and position.\n */\nfunction buildImageClassName(\n objectFit: string | null,\n position: string | null,\n scaleValue: string | null\n): string {\n const baseClass = 'absolute -z-10';\n\n // For 'fill' (cover) and 'fit' (contain), use inset-0\n if (objectFit === 'fill' || objectFit === 'fit') {\n const fitClass = objectFit === 'fill' ? 'object-cover' : 'object-contain';\n return `${baseClass} inset-0 h-full w-full ${fitClass}`;\n }\n\n // For 'original' and 'custom' with scale, use anchor positioning\n if ((objectFit === 'custom' || objectFit === 'original') && scaleValue) {\n const isPresetPosition = position && BACKGROUND_POSITION_PRESET_VALUES.includes(position as any);\n\n // Custom position uses object-position instead of anchor classes\n if (position && !isPresetPosition) {\n return baseClass;\n }\n\n // Preset or null position uses anchor classes\n const anchorClasses = getAnchorClasses(position);\n return `${baseClass} ${anchorClasses}`;\n }\n\n // Default: fill container\n return `${baseClass} inset-0 h-full w-full`;\n}\n\n\n// ============================================================================\n// SectionBackground Component\n// ============================================================================\n\nexport type SectionBackgroundProps = {\n /** Raw background data from content (e.g., content._sectionStyles?.background) */\n background: BackgroundInput | null | undefined;\n /** Theme tokens for resolving color tokens to hex values */\n theme?: ThemeTokens;\n /**\n * Additional className applied to background layers.\n *\n * **Note**: This className is applied to BOTH the color/gradient layer AND the\n * image layer when both exist. If you need different classes for each layer,\n * use the `resolveBackground()` helper directly for more control.\n */\n className?: string;\n};\n\n/**\n * Renders a complete background layer (color, gradient, and/or image).\n *\n * This component handles all the complexity of rendering backgrounds from\n * CMS content, including theme token resolution, image positioning, and opacity.\n *\n * Use this component in custom block overrides to easily apply section backgrounds.\n *\n * @example\n * ```tsx\n * import { SectionBackground } from '@riverbankcms/blocks';\n * // or from SDK: import { SectionBackground } from '@riverbankcms/sdk/rendering';\n *\n * function CustomBlock({ content, theme }: CustomBlockProps) {\n * return (\n * <section className=\"relative py-16\">\n * <SectionBackground\n * background={content._sectionStyles?.background}\n * theme={theme}\n * />\n * <div className=\"container mx-auto relative z-10\">\n * {content.heading}\n * </div>\n * </section>\n * );\n * }\n * ```\n */\nexport function SectionBackground({\n background,\n theme,\n className,\n}: SectionBackgroundProps): React.ReactElement | null {\n const resolved = resolveBackground(background, theme);\n\n // Nothing to render\n if (!resolved.color && !resolved.gradient && !resolved.image) {\n return null;\n }\n\n return (\n <>\n {/* Color/Gradient layer */}\n {(resolved.color || resolved.gradient) && (\n <div\n className={clsx(\n 'absolute inset-0 -z-10 h-full w-full pointer-events-none',\n className\n )}\n style={{\n backgroundColor: resolved.color ?? undefined,\n backgroundImage: resolved.gradient ?? undefined,\n opacity: resolved.opacity ?? undefined,\n }}\n />\n )}\n\n {/* Image layer */}\n {resolved.image && (\n <img\n src={resolved.image.url}\n alt={resolved.image.alt}\n width={resolved.image.width}\n height={resolved.image.height}\n className={clsx(resolved.imageClassName, 'pointer-events-none', className)}\n style={resolved.imageStyle}\n />\n )}\n </>\n );\n}\n","/**\n * Core Button CSS Generator\n *\n * Pure functions for generating button CSS without requiring the full Theme type.\n * Used by both the full CMS theme system and the SDK theme bridge.\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type ButtonBackgroundType = 'solid' | 'transparent' | 'gradient';\n\nexport interface ButtonVariantCore {\n /** Unique variant identifier (e.g., 'primary', 'secondary') */\n id: string;\n /** Background style */\n background: ButtonBackgroundType;\n /** Background color token for solid backgrounds (e.g., 'primary') */\n backgroundToken?: string;\n /** Gradient stops for gradient backgrounds */\n gradientStops?: string[];\n /** Gradient direction for gradient backgrounds */\n gradientDirection?: 'to-r' | 'to-l' | 'to-t' | 'to-b' | 'to-tr' | 'to-tl' | 'to-br' | 'to-bl';\n /** Text color token */\n textToken: string;\n /** Border color token (for outline style) */\n borderToken?: string;\n /** Border width */\n borderWidth?: 'none' | 'thin' | 'medium' | 'thick';\n}\n\nexport interface ButtonCoreSettings {\n /** Corner radius style */\n corners: 'square' | 'soft' | 'rounded' | 'pill';\n /** Shadow intensity */\n shadow: 'none' | 'low' | 'medium' | 'high';\n /** Default border width for variants with borders */\n borderWidth: 'none' | 'thin' | 'medium' | 'thick';\n /** Font weight */\n fontWeight?: number;\n /** Text transform */\n textTransform?: 'none' | 'uppercase' | 'lowercase' | 'capitalize';\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst CORNER_RADIUS_MAP: Record<ButtonCoreSettings['corners'], string> = {\n square: '0',\n soft: '0.375rem',\n rounded: '0.5rem',\n pill: '9999px',\n};\n\nconst BORDER_WIDTH_MAP: Record<NonNullable<ButtonCoreSettings['borderWidth']>, string> = {\n none: '0',\n thin: '1px',\n medium: '2px',\n thick: '4px',\n};\n\nconst GRADIENT_DIRECTION_MAP: Record<NonNullable<ButtonVariantCore['gradientDirection']>, string> = {\n 'to-r': 'to right',\n 'to-l': 'to left',\n 'to-t': 'to top',\n 'to-b': 'to bottom',\n 'to-tr': 'to top right',\n 'to-tl': 'to top left',\n 'to-br': 'to bottom right',\n 'to-bl': 'to bottom left',\n};\n\nconst SHADOW_VALUES: Record<ButtonCoreSettings['shadow'], string> = {\n none: 'none',\n low: '0 1px 2px rgba(0,0,0,0.06)',\n medium: '0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)',\n high: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)',\n};\n\n// ============================================================================\n// Core Generator\n// ============================================================================\n\n/**\n * Generate button CSS from core variant definitions.\n *\n * This is a pure function with no dependencies on Theme type.\n * It generates CSS that uses rgb(var(--tb-{token})) for colors.\n *\n * @param scopeId - Theme scope ID for selector (e.g., 'sdk' -> [data-theme-scope=\"sdk\"])\n * @param variants - Button variant definitions\n * @param settings - Global button settings\n * @returns CSS string\n */\nexport function generateButtonCoreCss(\n scopeId: string,\n variants: ButtonVariantCore[],\n settings: ButtonCoreSettings\n): string {\n const cssChunks: string[] = [];\n\n for (const variant of variants) {\n const css = generateVariantCss(scopeId, variant, settings);\n cssChunks.push(css);\n }\n\n return cssChunks.join('\\n\\n');\n}\n\n/**\n * Generate CSS for a single button variant\n *\n * Selectors use :where() for zero specificity, allowing site styles to override easily.\n */\nfunction generateVariantCss(\n scopeId: string,\n variant: ButtonVariantCore,\n settings: ButtonCoreSettings\n): string {\n // Wrap scope selector in :where() for zero specificity\n const selector = `:where([data-theme-scope=\"${scopeId}\"]) .button-${variant.id}`;\n const rules: string[] = [];\n\n // Structural base styles\n const borderWidthValue = variant.borderWidth\n ? BORDER_WIDTH_MAP[variant.borderWidth]\n : (variant.borderToken ? BORDER_WIDTH_MAP[settings.borderWidth] : '0');\n const hasBorder = borderWidthValue !== '0';\n\n // Padding (with border adjustment)\n const basePadding = { vertical: '0.5rem', horizontal: '1rem' };\n if (hasBorder) {\n rules.push(`padding-top: calc(${basePadding.vertical} - ${borderWidthValue});`);\n rules.push(`padding-bottom: calc(${basePadding.vertical} - ${borderWidthValue});`);\n rules.push(`padding-left: calc(${basePadding.horizontal} - ${borderWidthValue});`);\n rules.push(`padding-right: calc(${basePadding.horizontal} - ${borderWidthValue});`);\n } else {\n rules.push(`padding: ${basePadding.vertical} ${basePadding.horizontal};`);\n }\n\n // Font weight\n rules.push(`font-weight: ${settings.fontWeight ?? 500};`);\n\n // Text transform\n if (settings.textTransform && settings.textTransform !== 'none') {\n rules.push(`text-transform: ${settings.textTransform};`);\n }\n\n // Cursor and transition\n rules.push('cursor: pointer;');\n rules.push('transition: all 200ms ease-in-out;');\n\n // Flexbox layout\n rules.push('display: inline-flex;');\n rules.push('align-items: center;');\n rules.push('justify-content: center;');\n\n // Border radius\n rules.push(`border-radius: ${CORNER_RADIUS_MAP[settings.corners]};`);\n\n // Shadow\n rules.push(`box-shadow: ${SHADOW_VALUES[settings.shadow]};`);\n\n // Background\n if (variant.background === 'solid' && variant.backgroundToken) {\n rules.push(`background-color: rgb(var(--tb-${variant.backgroundToken}));`);\n } else if (variant.background === 'gradient' && variant.gradientStops) {\n const colors = variant.gradientStops.map(token => `rgb(var(--tb-${token}))`).join(', ');\n const direction = GRADIENT_DIRECTION_MAP[variant.gradientDirection ?? 'to-r'];\n rules.push(`background-image: linear-gradient(${direction}, ${colors});`);\n } else {\n rules.push('background-color: transparent;');\n }\n\n // Text color\n rules.push(`color: rgb(var(--tb-${variant.textToken}));`);\n\n // Border\n if (variant.borderToken) {\n rules.push(`border: ${borderWidthValue} solid rgb(var(--tb-${variant.borderToken}));`);\n } else {\n rules.push('border: none;');\n }\n\n // Base CSS\n const baseCss = `${selector} {\\n ${rules.join('\\n ')}\\n}`;\n\n // Hover state (simple opacity reduce)\n const hoverCss = `${selector}:hover {\\n opacity: 0.9;\\n}`;\n\n // Active state\n const activeCss = `${selector}:active {\\n opacity: 0.8;\\n transform: scale(0.98);\\n}`;\n\n // Disabled state\n const disabledCss = `${selector}:disabled,\n${selector}:disabled:hover,\n${selector}:disabled:active {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n transform: none;\n}`;\n\n return [baseCss, hoverCss, activeCss, disabledCss].join('\\n\\n');\n}\n\n/**\n * Get default button variants for SDK usage.\n * These create primary, secondary, outline, and ghost buttons.\n */\nexport function getDefaultButtonVariants(): ButtonVariantCore[] {\n return [\n {\n id: 'primary',\n background: 'solid',\n backgroundToken: 'primary',\n textToken: 'white',\n },\n {\n id: 'secondary',\n background: 'solid',\n backgroundToken: 'secondary',\n textToken: 'white',\n },\n {\n id: 'outline',\n background: 'transparent',\n borderToken: 'primary',\n textToken: 'primary',\n borderWidth: 'thin',\n },\n {\n id: 'ghost',\n background: 'transparent',\n textToken: 'primary',\n },\n ];\n}\n","/**\n * Core Card CSS Generator\n *\n * Pure functions for generating card CSS without requiring the full Theme type.\n * Used by both the full CMS theme system and the SDK theme bridge.\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type CardBackgroundType = 'solid' | 'transparent' | 'gradient';\nexport type CardSpacingCore = 'none' | 'compact' | 'cozy' | 'medium' | 'comfortable' | 'spacious';\n\nexport interface CardVariantCore {\n /** Unique variant identifier (e.g., 'default', 'elevated') */\n id: string;\n /** Background style */\n background: CardBackgroundType;\n /** Background color token for solid backgrounds */\n backgroundToken?: string;\n /** Gradient from token */\n gradientFromToken?: string;\n /** Gradient to token */\n gradientToToken?: string;\n /** Gradient direction */\n gradientDirection?: 'to-r' | 'to-l' | 'to-t' | 'to-b' | 'to-tr' | 'to-tl' | 'to-br' | 'to-bl';\n /** Content padding */\n spacing: CardSpacingCore;\n /** Border color token */\n borderToken?: string;\n /** Border width */\n borderWidth?: 'none' | 'thin' | 'medium' | 'thick';\n}\n\nexport interface CardCoreSettings {\n /** Corner radius style */\n corners: 'square' | 'soft' | 'rounded' | 'pill';\n /** Shadow intensity */\n shadow: 'none' | 'low' | 'medium' | 'high';\n /** Default border width */\n borderWidth: 'none' | 'thin' | 'medium' | 'thick';\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst CORNER_RADIUS_MAP: Record<CardCoreSettings['corners'], string> = {\n square: '0',\n soft: '0.5rem',\n rounded: '1rem',\n pill: '1.5rem',\n};\n\nconst BORDER_WIDTH_MAP: Record<NonNullable<CardCoreSettings['borderWidth']>, string> = {\n none: '0',\n thin: '1px',\n medium: '2px',\n thick: '4px',\n};\n\nconst GRADIENT_DIRECTION_MAP: Record<NonNullable<CardVariantCore['gradientDirection']>, string> = {\n 'to-r': 'to right',\n 'to-l': 'to left',\n 'to-t': 'to top',\n 'to-b': 'to bottom',\n 'to-tr': 'to top right',\n 'to-tl': 'to top left',\n 'to-br': 'to bottom right',\n 'to-bl': 'to bottom left',\n};\n\nconst SHADOW_VALUES: Record<CardCoreSettings['shadow'], string> = {\n none: 'none',\n low: '0 1px 2px rgba(0,0,0,0.06)',\n medium: '0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1)',\n high: '0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1)',\n};\n\nconst SPACING_MAP: Record<CardSpacingCore, string> = {\n none: '0',\n compact: '0.75rem',\n cozy: '1rem',\n medium: '1.25rem',\n comfortable: '1.5rem',\n spacious: '2rem',\n};\n\n// ============================================================================\n// Core Generator\n// ============================================================================\n\n/**\n * Generate card CSS from core variant definitions.\n *\n * This is a pure function with no dependencies on Theme type.\n * It generates CSS that uses rgb(var(--tb-{token})) for colors.\n *\n * @param scopeId - Theme scope ID for selector\n * @param variants - Card variant definitions\n * @param settings - Global card settings\n * @returns CSS string\n */\nexport function generateCardCoreCss(\n scopeId: string,\n variants: CardVariantCore[],\n settings: CardCoreSettings\n): string {\n const cssChunks: string[] = [];\n\n for (const variant of variants) {\n const css = generateVariantCss(scopeId, variant, settings);\n cssChunks.push(css);\n }\n\n return cssChunks.join('\\n\\n');\n}\n\n/**\n * Generate CSS for a single card variant\n *\n * Selectors use :where() for zero specificity, allowing site styles to override easily.\n */\nfunction generateVariantCss(\n scopeId: string,\n variant: CardVariantCore,\n settings: CardCoreSettings\n): string {\n // Wrap scope selector in :where() for zero specificity\n const containerSelector = `:where([data-theme-scope=\"${scopeId}\"]) .card-${variant.id}`;\n const mediaSelector = `${containerSelector} .card-media`;\n const contentSelector = `${containerSelector} .card-content`;\n\n const containerRules: string[] = [];\n\n // Background\n if (variant.background === 'solid' && variant.backgroundToken) {\n containerRules.push(`background: rgb(var(--tb-${variant.backgroundToken}))`);\n } else if (variant.background === 'gradient' && variant.gradientFromToken && variant.gradientToToken) {\n const fromColor = `rgb(var(--tb-${variant.gradientFromToken}))`;\n const toColor = `rgb(var(--tb-${variant.gradientToToken}))`;\n const direction = GRADIENT_DIRECTION_MAP[variant.gradientDirection ?? 'to-r'];\n containerRules.push(`background: linear-gradient(${direction}, ${fromColor}, ${toColor})`);\n } else {\n containerRules.push('background: transparent');\n }\n\n // Border\n const borderWidth = variant.borderWidth\n ? BORDER_WIDTH_MAP[variant.borderWidth]\n : (variant.borderToken ? BORDER_WIDTH_MAP[settings.borderWidth] : '0');\n\n if (variant.borderToken && borderWidth !== '0') {\n containerRules.push(`border: ${borderWidth} solid rgb(var(--tb-${variant.borderToken}))`);\n }\n\n // Border radius\n containerRules.push(`border-radius: ${CORNER_RADIUS_MAP[settings.corners]}`);\n\n // Shadow\n if (settings.shadow !== 'none') {\n containerRules.push(`box-shadow: ${SHADOW_VALUES[settings.shadow]}`);\n }\n\n // Structural styles\n containerRules.push('display: flex');\n containerRules.push('flex-direction: column');\n containerRules.push('position: relative');\n containerRules.push('overflow: hidden');\n\n // Media styles (top corners match container)\n const mediaRadius = CORNER_RADIUS_MAP[settings.corners];\n const mediaRules = [\n `border-top-left-radius: ${mediaRadius}`,\n `border-top-right-radius: ${mediaRadius}`,\n ];\n\n // Content styles\n const contentRules = [\n `padding: ${SPACING_MAP[variant.spacing]}`,\n ];\n\n // Build CSS\n return [\n `${containerSelector} {\\n ${containerRules.join(';\\n ')};\\n}`,\n `${mediaSelector} {\\n ${mediaRules.join(';\\n ')};\\n}`,\n `${contentSelector} {\\n ${contentRules.join(';\\n ')};\\n}`,\n ].join('\\n\\n');\n}\n\n/**\n * Get default card variants for SDK usage.\n */\nexport function getDefaultCardVariants(): CardVariantCore[] {\n return [\n {\n id: 'default',\n background: 'solid',\n backgroundToken: 'surface',\n spacing: 'comfortable',\n borderToken: 'border',\n borderWidth: 'thin',\n },\n {\n id: 'elevated',\n background: 'solid',\n backgroundToken: 'surface',\n spacing: 'comfortable',\n },\n {\n id: 'outlined',\n background: 'transparent',\n spacing: 'comfortable',\n borderToken: 'border',\n borderWidth: 'thin',\n },\n ];\n}\n","/**\n * Core Input CSS Generator\n *\n * Pure functions for generating form input CSS without requiring the full Theme type.\n * Used by both the full CMS theme system and the SDK theme bridge.\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface InputCoreSettings {\n /** Corner radius style */\n corners: 'square' | 'soft' | 'rounded' | 'pill';\n /** Shadow intensity */\n shadow: 'none' | 'low' | 'medium' | 'high';\n /** Border width */\n borderWidth: 'none' | 'thin' | 'medium' | 'thick';\n /** Focus ring color token */\n focusRingToken: string;\n /** Focus ring width in pixels */\n focusRingWidth: number;\n /** Background color token */\n backgroundToken: string;\n /** Text color token */\n textToken: string;\n /** Border color token */\n borderToken: string;\n /** Label text color token */\n labelToken: string;\n /** Error border color token */\n errorBorderToken: string;\n /** Error text color token */\n errorTextToken: string;\n /** Disabled background token */\n disabledBackgroundToken: string;\n /** Disabled text token */\n disabledTextToken: string;\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst CORNER_RADIUS_MAP: Record<InputCoreSettings['corners'], string> = {\n square: '0',\n soft: '0.25rem',\n rounded: '0.5rem',\n pill: '9999px',\n};\n\nconst BORDER_WIDTH_MAP: Record<NonNullable<InputCoreSettings['borderWidth']>, string> = {\n none: '0',\n thin: '1px',\n medium: '2px',\n thick: '4px',\n};\n\nconst SHADOW_VALUES: Record<InputCoreSettings['shadow'], string> = {\n none: 'none',\n low: '0 1px 2px rgba(0,0,0,0.04)',\n medium: '0 1px 3px rgba(0,0,0,0.08)',\n high: '0 2px 6px rgba(0,0,0,0.12)',\n};\n\n// ============================================================================\n// Core Generator\n// ============================================================================\n\n/**\n * Generate input CSS from core settings.\n *\n * This is a pure function with no dependencies on Theme type.\n * Selectors use :where() for zero specificity, allowing site styles to override easily.\n *\n * @param scopeId - Theme scope ID for selector\n * @param settings - Input style settings\n * @returns CSS string\n */\nexport function generateInputCoreCss(\n scopeId: string,\n settings: InputCoreSettings\n): string {\n // Wrap scope selector in :where() for zero specificity\n const root = `:where([data-theme-scope=\"${scopeId}\"])`;\n const borderWidth = BORDER_WIDTH_MAP[settings.borderWidth];\n const borderRadius = CORNER_RADIUS_MAP[settings.corners];\n\n const cssBlocks: string[] = [];\n\n // Label styles\n cssBlocks.push(`${root} .form-label {\n color: rgb(var(--tb-${settings.labelToken}));\n font-weight: 600;\n font-size: 0.875rem;\n display: block;\n margin-bottom: 0.25rem;\n}`);\n\n // Shared input styles\n const sharedInputRules = `\n background-color: rgb(var(--tb-${settings.backgroundToken}));\n color: rgb(var(--tb-${settings.textToken}));\n border: ${borderWidth} solid rgb(var(--tb-${settings.borderToken}));\n border-radius: ${borderRadius};\n padding: 0.5rem 0.75rem;\n font-size: 1rem;\n width: 100%;\n outline: none;\n transition: border-color 0.2s ease, box-shadow 0.2s ease;\n ${settings.shadow !== 'none' ? `box-shadow: ${SHADOW_VALUES[settings.shadow]};` : ''}\n`.trim();\n\n // Text input\n cssBlocks.push(`${root} .form-input {\n ${sharedInputRules}\n}`);\n\n // Textarea\n cssBlocks.push(`${root} .form-textarea {\n ${sharedInputRules}\n resize: vertical;\n min-height: 5rem;\n}`);\n\n // Select\n cssBlocks.push(`${root} .form-select {\n ${sharedInputRules}\n appearance: none;\n background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e\");\n background-position: right 0.5rem center;\n background-repeat: no-repeat;\n background-size: 1.5em 1.5em;\n padding-right: 2.5rem;\n}`);\n\n // Focus states\n cssBlocks.push(`${root} .form-input:focus-visible,\n${root} .form-textarea:focus-visible,\n${root} .form-select:focus-visible {\n outline: none;\n box-shadow: 0 0 0 ${settings.focusRingWidth}px rgb(var(--tb-${settings.focusRingToken}));\n border-color: rgb(var(--tb-${settings.focusRingToken}));\n}`);\n\n // Error states\n cssBlocks.push(`${root} .form-input[aria-invalid=\"true\"],\n${root} .form-textarea[aria-invalid=\"true\"],\n${root} .form-select[aria-invalid=\"true\"] {\n border-color: rgb(var(--tb-${settings.errorBorderToken}));\n color: rgb(var(--tb-${settings.errorTextToken}));\n}`);\n\n // Disabled states\n cssBlocks.push(`${root} .form-input:disabled,\n${root} .form-textarea:disabled,\n${root} .form-select:disabled {\n background-color: rgb(var(--tb-${settings.disabledBackgroundToken}));\n color: rgb(var(--tb-${settings.disabledTextToken}));\n opacity: 0.6;\n cursor: not-allowed;\n}`);\n\n // Checkbox base\n cssBlocks.push(`${root} .form-checkbox {\n appearance: none;\n width: 1rem;\n height: 1rem;\n flex-shrink: 0;\n border: ${borderWidth} solid rgb(var(--tb-${settings.borderToken}));\n border-radius: 0.25rem;\n background-color: rgb(var(--tb-${settings.backgroundToken}));\n cursor: pointer;\n transition: background-color 0.2s ease, border-color 0.2s ease;\n}`);\n\n // Radio base\n cssBlocks.push(`${root} .form-radio {\n appearance: none;\n width: 1rem;\n height: 1rem;\n flex-shrink: 0;\n border: ${borderWidth} solid rgb(var(--tb-${settings.borderToken}));\n border-radius: 9999px;\n background-color: rgb(var(--tb-${settings.backgroundToken}));\n cursor: pointer;\n transition: background-color 0.2s ease, border-color 0.2s ease;\n}`);\n\n // Checkbox checked\n cssBlocks.push(`${root} .form-checkbox:checked {\n background-color: rgb(var(--tb-${settings.focusRingToken}));\n border-color: rgb(var(--tb-${settings.focusRingToken}));\n background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\");\n background-size: 100% 100%;\n background-position: center;\n background-repeat: no-repeat;\n}`);\n\n // Radio checked\n cssBlocks.push(`${root} .form-radio:checked {\n background-color: rgb(var(--tb-${settings.focusRingToken}));\n border-color: rgb(var(--tb-${settings.focusRingToken}));\n background-image: radial-gradient(circle, white 40%, transparent 40%);\n}`);\n\n // Checkbox/Radio focus\n cssBlocks.push(`${root} .form-checkbox:focus-visible,\n${root} .form-radio:focus-visible {\n outline: none;\n box-shadow: 0 0 0 ${settings.focusRingWidth}px rgb(var(--tb-${settings.focusRingToken}));\n}`);\n\n return cssBlocks.join('\\n\\n');\n}\n\n/**\n * Get default input settings for SDK usage.\n */\nexport function getDefaultInputSettings(): InputCoreSettings {\n return {\n corners: 'rounded',\n shadow: 'none',\n borderWidth: 'thin',\n focusRingToken: 'primary',\n focusRingWidth: 3,\n backgroundToken: 'surface',\n textToken: 'text',\n borderToken: 'border',\n labelToken: 'text',\n errorBorderToken: 'danger',\n errorTextToken: 'danger',\n disabledBackgroundToken: 'neutral-100',\n disabledTextToken: 'neutral-400',\n };\n}\n"],"mappings":"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","names":["min","max","rgb","min","max","rgb","hex","r","r","hex","z","r","r","z","lab","lum","rgb","r","rgb","r","hcl","round","r","lch","sqrt","pow","z2","lab","lch","num","r","r","num","r","r","min","max","hcg","cos","r","min","sqrt","r","hsi","r","r","min","max","hsl","floor","r","min","max","rgb2hsl","r","hsv","r","r","oklab","oklab","pow","sqrt","PI","cos","sin","atan2","rgb","pow","colors","f","_pos","lab2","lab","round","rgb","pow","sin","cos","r","floor","pow","floor","r","num","min","max","limits","r","sqrt","pow","min","max","atan2","abs","cos","sin","PI","max","r","r","round","r","round","rgb","min","max","css","hsl","lab","lch","oklab","oklch","rgb","log","temp","r","round","rgb","r","temp","oklch","hex","hex","r","css","newShade","borderWidth","css","GRADIENT_DIRECTION_MAP","generateShadowValue","css","GRADIENT_DIRECTION_MAP","generateShadowValue","z","CORNER_MAP","fallback","CORNER_MAP","resolveColor","fallback","React","z","z","z","buildRichTextSchema","num","React","jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsx","jsx","React","jsx","jsxs","React","jsx","jsxs","jsx","jsx","jsxs","jsx","jsxs","jsx","jsxs","DEFAULT_EVENT_BASE_PATH","COLUMN_CLASSES","formatDateForUrl","buildEventUrl","formatDate","formatTime","jsx","jsxs","DEFAULT_EVENT_BASE_PATH","formatDate","formatTime","buildEventUrl","jsx","jsx","jsx","value","namedScope","resolveNode","abs","React","React","fragmentRegistry","React","Fragment","jsx","MemoBlockSection","fragmentRegistry","isRecord","RichText","Fragment","jsx","jsxs","isString","isNumber","num","CORNER_RADIUS_MAP","BORDER_WIDTH_MAP","GRADIENT_DIRECTION_MAP","css","CORNER_RADIUS_MAP","BORDER_WIDTH_MAP","GRADIENT_DIRECTION_MAP","SHADOW_VALUES","css","generateVariantCss","CORNER_RADIUS_MAP","BORDER_WIDTH_MAP","SHADOW_VALUES"]}
|