baseline-kit 5.0.0 → 5.2.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/CHANGELOG.md +243 -0
- package/README.md +227 -353
- package/dist/baseline-kit.css +5 -2
- package/dist/core.cjs +1 -1
- package/dist/core.d.ts +25 -9
- package/dist/core.mjs +1 -1
- package/dist/guide.cjs +1 -1
- package/dist/guide.cjs.map +1 -1
- package/dist/guide.css +1 -1
- package/dist/guide.d.ts +16 -16
- package/dist/guide.mjs +147 -150
- package/dist/guide.mjs.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +22 -12
- package/dist/index.mjs +169 -158
- package/dist/index.mjs.map +1 -1
- package/dist/remix-server.d.ts +8 -0
- package/dist/remix-server.mjs +15 -0
- package/dist/remix-server.mjs.map +1 -0
- package/dist/remix.css +2 -0
- package/dist/remix.d.ts +191 -0
- package/dist/remix.mjs +984 -0
- package/dist/remix.mjs.map +1 -0
- package/dist/{src-QHaSfgVe.js → src-D0nL1BwZ.js} +96 -165
- package/dist/src-D0nL1BwZ.js.map +1 -0
- package/dist/src-R5usYJol.cjs +2 -0
- package/dist/src-R5usYJol.cjs.map +1 -0
- package/dist/styles.css +1 -1
- package/dist/theme/default.css +0 -1
- package/dist/theme/tokens.css +0 -1
- package/dist/theme.css +4 -1
- package/package.json +86 -37
- package/dist/README.md +0 -468
- package/dist/core/src/config/defaults.d.ts +0 -2
- package/dist/core/src/config/index.d.ts +0 -3
- package/dist/core/src/config/merge.d.ts +0 -21
- package/dist/core/src/config/schema.d.ts +0 -33
- package/dist/core/src/descriptors/baseline.d.ts +0 -26
- package/dist/core/src/descriptors/box.d.ts +0 -20
- package/dist/core/src/descriptors/guide.d.ts +0 -44
- package/dist/core/src/descriptors/index.d.ts +0 -5
- package/dist/core/src/descriptors/padder.d.ts +0 -19
- package/dist/core/src/descriptors/spacer.d.ts +0 -24
- package/dist/core/src/index.d.ts +0 -10
- package/dist/core/src/types.d.ts +0 -62
- package/dist/core/src/utils/convert.d.ts +0 -10
- package/dist/core/src/utils/grid.d.ts +0 -18
- package/dist/core/src/utils/index.d.ts +0 -8
- package/dist/core/src/utils/math.d.ts +0 -9
- package/dist/core/src/utils/merge.d.ts +0 -28
- package/dist/core/src/utils/normalize.d.ts +0 -13
- package/dist/core/src/utils/padding.d.ts +0 -2
- package/dist/core/src/utils/parse.d.ts +0 -5
- package/dist/core/src/utils/snapping.d.ts +0 -2
- package/dist/core/src/validation/guide.d.ts +0 -3
- package/dist/core/src/validation/index.d.ts +0 -1
- package/dist/dom/src/index.d.ts +0 -11
- package/dist/dom/src/measure.d.ts +0 -18
- package/dist/dom/src/observers.d.ts +0 -5
- package/dist/dom/src/ssr.d.ts +0 -20
- package/dist/dom/src/timing.d.ts +0 -2
- package/dist/dom/src/viewport.d.ts +0 -7
- package/dist/dom/src/virtual.d.ts +0 -23
- package/dist/react/src/components/Baseline/Baseline.d.ts +0 -13
- package/dist/react/src/components/Baseline/index.d.ts +0 -1
- package/dist/react/src/components/Box/Box.d.ts +0 -26
- package/dist/react/src/components/Box/index.d.ts +0 -1
- package/dist/react/src/components/Config/Config.d.ts +0 -20
- package/dist/react/src/components/Config/index.d.ts +0 -2
- package/dist/react/src/components/Guide/Guide.d.ts +0 -16
- package/dist/react/src/components/Guide/index.d.ts +0 -1
- package/dist/react/src/components/Padder/Padder.d.ts +0 -20
- package/dist/react/src/components/Padder/index.d.ts +0 -1
- package/dist/react/src/components/Spacer/Spacer.d.ts +0 -14
- package/dist/react/src/components/Spacer/index.d.ts +0 -1
- package/dist/react/src/components/index.d.ts +0 -12
- package/dist/react/src/components/types.d.ts +0 -29
- package/dist/react/src/guide.d.ts +0 -10
- package/dist/react/src/hooks/index.d.ts +0 -10
- package/dist/react/src/hooks/useBaseline.d.ts +0 -26
- package/dist/react/src/hooks/useConfig.d.ts +0 -9
- package/dist/react/src/hooks/useDebug.d.ts +0 -6
- package/dist/react/src/hooks/useGuide.d.ts +0 -7
- package/dist/react/src/hooks/useIsClient.d.ts +0 -4
- package/dist/react/src/hooks/useMeasure.d.ts +0 -10
- package/dist/react/src/hooks/useVirtual.d.ts +0 -14
- package/dist/react/src/index.d.ts +0 -21
- package/dist/react/src/utils/index.d.ts +0 -9
- package/dist/react/src/utils/merge.d.ts +0 -10
- package/dist/react/src/utils/ssr.d.ts +0 -1
- package/dist/src-CMjyHjX5.cjs +0 -2
- package/dist/src-CMjyHjX5.cjs.map +0 -1
- package/dist/src-QHaSfgVe.js.map +0 -1
package/dist/src-CMjyHjX5.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var e={base:8,baseline:{variant:`line`,debugging:`hidden`,colors:{line:`var(--bk-baseline-color-line-theme)`,flat:`var(--bk-baseline-color-flat-theme)`}},guide:{variant:`line`,debugging:`hidden`,colors:{line:`var(--bk-guide-color-line-theme)`,pattern:`var(--bk-guide-color-pattern-theme)`,auto:`var(--bk-guide-color-auto-theme)`,fixed:`var(--bk-guide-color-fixed-theme)`}},spacer:{variant:`line`,debugging:`hidden`,colors:{line:`var(--bk-spacer-color-line-theme)`,flat:`var(--bk-spacer-color-flat-theme)`,text:`var(--bk-spacer-color-text-theme)`}},box:{debugging:`hidden`,colors:{line:`var(--bk-box-color-line-theme)`,flat:`var(--bk-box-color-flat-theme)`,text:`var(--bk-box-color-text-theme)`}},padder:{debugging:`hidden`,color:`var(--bk-padder-color-theme)`}},t=[`baseline`,`guide`,`spacer`,`box`,`padder`],n=e=>{let{parentConfig:n,base:r}=e,i={};for(let r of t)i[r]={...n[r],...e[r]};return{base:r??n.base,...i}},r=e=>{let{base:t,baseline:n,guide:r,spacer:i,box:a,padder:o}=e;return{"--bk-base":`${t}px`,"--bkbl-cl":n.colors.line,"--bkbl-cf":n.colors.flat,"--bkgd-cl":r.colors.line,"--bkgd-cp":r.colors.pattern,"--bkgd-ca":r.colors.auto,"--bkgd-cf":r.colors.fixed,"--bksp-cl":i.colors.line,"--bksp-cf":i.colors.flat,"--bksp-ct":i.colors.text,"--bkbx-cl":a.colors.line,"--bkbx-cf":a.colors.flat,"--bkbx-ct":a.colors.text,"--bkpd-c":o.color}},i=[`start`,`center`,`end`],a=[`line`,`flat`];function o(e){let t=e.trim().match(/^([+-]?[\d.]+)([a-zA-Z%]+)$/);return t?{value:parseFloat(t[1]),unit:t[2]}:null}function s(e,t){return e===void 0&&t!==void 0?`${t}px`:e===`auto`||typeof e==`string`&&/^(auto|100%|0|.*(fr|vh|vw|vmin|vmax|rem))$/.test(e)?String(e):typeof e==`number`?`${e}px`:e??``}var c={parentSize:0,viewportWidth:1920,viewportHeight:1080,rootFontSize:16,parentFontSize:16},l={px:1,in:96,cm:37.8,mm:3.78,pt:1.33,pc:16},u=[`em`,`rem`,`vh`,`vw`,`vmin`,`vmax`,`%`],d={em:e=>e.parentFontSize,rem:e=>e.rootFontSize,vh:e=>e.viewportHeight/100,vw:e=>e.viewportWidth/100,vmin:e=>Math.min(e.viewportWidth,e.viewportHeight)/100,vmax:e=>Math.max(e.viewportWidth,e.viewportHeight)/100,"%":e=>e.parentSize/100};function f(e,t){if(typeof e==`number`)return e;if(typeof e!=`string`)return null;let n=o(e);if(!n)return null;let{value:r,unit:i}=n;if(i in l)return r*l[i];if(i===`auto`)return null;let a=d[i];return a?r*a({...c,...t}):null}function p(e,t,n){return Math.min(Math.max(e,t),n)}function m(e){let{height:t,top:n,bottom:r,base:i}=e,a=(t??0)-(n+r);return Math.max(1,Math.floor(a/i))}function h(e,t={}){let{base:n=8,round:r=!0,clamp:i,context:a}=t;if(e===`auto`)return n;let o=null;if(typeof e==`number`?o=e:typeof e==`string`&&(o=f(e,a)??n),o===null&&(o=n),n<=0)return o;let s=r?Math.round(o/n)*n:o;return i===void 0?s:p(s,i.min??-1/0,i.max??1/0)}function g(e,t,n){return!e||e[0]===void 0&&e[1]===void 0?t:[e[0]===void 0?t[0]:h(e[0],n),e[1]===void 0?t[1]:h(e[1],n)]}function _(e){if(`padding`in e&&e.padding!=null)return v(e.padding);let t=`block`in e&&e.block!=null?y(e.block):{top:0,bottom:0},n=`inline`in e&&e.inline!=null?b(e.inline):{left:0,right:0};return{top:t.top,right:n.right,bottom:t.bottom,left:n.left}}function v(e){if(typeof e==`number`)return{top:e,right:e,bottom:e,left:e};if(Array.isArray(e)){let[t=0,n=0,r,i]=e;return{top:t,right:n,bottom:r??t,left:i??n}}return typeof e==`object`?{top:e.top??0,right:e.right??0,bottom:e.bottom??0,left:e.left??0}:{top:0,right:0,bottom:0,left:0}}function y(e){if(typeof e==`number`)return{top:e,bottom:e};if(Array.isArray(e)){let[t,n]=e;return{top:t??0,bottom:n??0}}return typeof e==`object`?{top:e.start??0,bottom:e.end??0}:{top:0,bottom:0}}function b(e){if(typeof e==`number`)return{left:e,right:e};if(Array.isArray(e)){let[t,n]=e;return{left:t??0,right:n??0}}return typeof e==`object`?{left:e.start??0,right:e.end??0}:{left:0,right:0}}function x(e,t,n,r){let i=_({padding:n});if(r===`none`)return i;if(r===`height`){let n=e%t;n!==0&&(i.bottom+=t-n)}if(r===`clamp`){i.top%=t;let n=e%t;n!==0&&(i.bottom+=t-n),i.bottom%=t}return i}var S=(...e)=>e.filter(Boolean).join(` `).trim();function C(e,t){let n=e??t;return{isShown:n===`visible`,isHidden:n===`hidden`,isNone:n===`none`,debugging:n}}function w(e,t,n){let r=typeof e==`string`?e:e.key,i=typeof e==`string`?t:e.value,a=typeof e==`string`?n:e.defaultStyles,o=typeof e==`object`?e.skipDimensions:void 0;return o&&(o.fitContent?.includes(r)&&i===`fit-content`||o.auto?.includes(r)&&i===`auto`||o.fullSize?.includes(r)&&(i===`100%`||i===`100vh`||i===`100vw`))||i===a[r]?{}:{[r]:i}}var T=/^\d*\.?\d+(?:fr|px|%|em|rem|vh|vw|vmin|vmax|pt|pc|in|cm|mm)$/,E=e=>typeof e==`number`?Number.isFinite(e)&&e>=0:typeof e==`string`?e===`auto`||e===`100%`||T.test(e):!1,D=e=>Array.isArray(e)&&e.length>0&&e.every(E),O={template:`none`,columnsCount:0,calculatedGap:0,isValid:!1};function k(e,t,n){let r=t.variant??`line`,i=t.base??8,a=h(t.gap??0,{base:i,context:n});if(!e)return O;switch(r){case`line`:{let t=a===0?0:a-1,n=t+1,r=t===0?Math.max(1,Math.floor(e)+1):Math.max(1,Math.floor((e+1)/n)+1);return{template:`repeat(${r}, 1px)`,columnsCount:r,calculatedGap:a>0?a-1:a,isValid:!0}}case`pattern`:{if(!t.columns||!Array.isArray(t.columns)||!D(t.columns))return O;let e=t.columns.map(e=>typeof e==`number`?`${e}px`:e);return e.some(e=>e===`0`||e===`0px`)?O:{template:e.join(` `),columnsCount:e.length,calculatedGap:a,isValid:!0}}case`fixed`:{let e=typeof t.columns==`number`?t.columns:0;return e<1?O:{template:`repeat(${e}, ${t.columnWidth?s(t.columnWidth):`1fr`})`,columnsCount:e,calculatedGap:a,isValid:!0}}case`auto`:{let r=t.columnWidth??`auto`;if(r===`auto`)return{template:`repeat(auto-fill, minmax(0, 1fr))`,columnsCount:1,calculatedGap:a,isValid:!0};let i=typeof r==`number`?`${r}px`:r.toString(),o=f(i,n)??0,s=o>0?Math.max(1,Math.floor((e+a)/(o+a))):1;return{template:`repeat(auto-fill, ${i})`,columnsCount:s,calculatedGap:a,isValid:!0}}default:{let t=Math.max(1,Math.floor(e/(a+1))+1);return{template:`repeat(${t}, 1px)`,columnsCount:t,calculatedGap:a,isValid:!0}}}}var A=(e,t,n)=>{let r={};return e===void 0?(t!==void 0&&(r.gridColumn=`span ${t}`),n!==void 0&&(r.gridRow=`span ${n}`)):(r.gridColumn=`span ${e}`,r.gridRow=`span ${e}`),r};function j({variant:e,base:t,gap:n,columns:r,columnWidth:i}){switch(e){case`line`:return{variant:`line`,gap:n,base:t};case`pattern`:if(r&&Array.isArray(r))return{variant:`pattern`,columns:r,gap:n,base:t};break;case`fixed`:if(r!==void 0){let e=typeof r==`number`?r:parseInt(String(r),10);return{variant:`fixed`,columns:isNaN(e)?12:e,columnWidth:i||`60px`,gap:n,base:t}}break}return{variant:`auto`,columnWidth:i||`1fr`,gap:n,base:t}}var M=(e,t)=>({"--bkgd-w":`100%`,"--bkgd-h":`100%`,"--bkgd-mw":`none`,"--bkgd-cw":`60px`,"--bkgd-gw":`24px`,"--bkgd-n":`12`,"--bkgd-b":`${e}px`,"--bkgd-cl":t,"--bkgd-g":`0`});function N(e){let{base:t,colors:n,variant:r,align:i,width:a,height:o,columnWidth:c,maxWidth:l,color:u,template:d,columnsCount:f,calculatedGap:p,isVisible:m}=e,h=M(t,n.line),g=[`--bkgd-w`,`--bkgd-h`],_=s(a??`100%`),v=s(o??`100%`),y={...w({key:`--bkgd-w`,value:_,defaultStyles:h,skipDimensions:{fullSize:g}}),...w({key:`--bkgd-h`,value:v,defaultStyles:h,skipDimensions:{fullSize:g}}),...w({key:`--bkgd-mw`,value:s(l||`none`),defaultStyles:h}),...w({key:`--bkgd-cw`,value:s(c||`60px`),defaultStyles:h}),...w({key:`--bkgd-n`,value:`${f}`,defaultStyles:h}),...w({key:`--bkgd-b`,value:`0`,defaultStyles:h}),...w({key:`--bkgd-cl`,value:u??n.line,defaultStyles:h}),...w({key:`--bkgd-g`,value:`${p}px`,defaultStyles:h}),...w({key:`--bkgd-j`,value:i||`center`,defaultStyles:h}),...d&&d!==`none`?{"--bkgd-t":d}:{}},b=(r&&r in n?n[r]:void 0)??n.line,x=r===`line`,S=[`gde`,m?`v`:`h`];return x&&S.push(`line`),x&&(y[`--bkgd-line-color`]=u??n.line,y[`--bkgd-line-period`]=`${p+1}px`),{containerStyle:y,columnColor:b,columnsCount:f,calculatedGap:p,template:d,isVisible:m,isLineVariant:x,classTokens:S}}var P=(e,t,n)=>({"--bkbl-w":`100%`,"--bkbl-h":`100%`,"--bkbl-b":`${e}px`,"--bkbl-cl":t,"--bkbl-cf":n});function F(e){let{base:t,colors:n,variant:r,width:i,height:a,color:o,containerWidth:c,containerHeight:l,spacing:u,isVisible:d}=e,[,f]=g([i,a],[c,l]),{top:p,right:h,bottom:v,left:y}=_(u),b=[p,h,v,y].map(e=>e?`${e}px`:`0`).join(` `),x=b===`0 0 0 0`?void 0:b,S=m({height:f,top:p,bottom:v,base:t}),C=o||(r===`line`?n.line:n.flat),T=P(t,n.line,n.flat),E=[`--bkbl-w`,`--bkbl-h`];return{containerStyle:{...w({key:`--bkbl-w`,value:s(i||`100%`),defaultStyles:T,skipDimensions:{fullSize:E}}),...w({key:`--bkbl-h`,value:s(a||`100%`),defaultStyles:T,skipDimensions:{fullSize:E}}),...w({key:`--bkbl-cl`,value:o||n.line,defaultStyles:T}),...w({key:`--bkbl-cf`,value:o||n.flat,defaultStyles:T}),...x?{padding:x}:{}},rowCount:S,getRowStyle:e=>({"--bkbl-rt":e===0?`0px`:`${e*t}px`,"--bkbl-rh":r===`line`?`1px`:`${t}px`,"--bkbl-c":C}),padding:x,isVisible:d,classTokens:[`bas`,d?`v`:`h`]}}var I=(e,t)=>({"--bkbx-w":`auto`,"--bkbx-h":`auto`,"--bkbx-cl":t,"--bkbx-b":`${e}px`});function L(e){let{base:t,lineColor:n,width:r,height:i,span:a,colSpan:o,rowSpan:c,isVisible:l}=e,u=I(t,n),d=[`--bkbx-w`,`--bkbx-h`],f={...w({key:`--bkbx-w`,value:s(r||`fit-content`),defaultStyles:u,skipDimensions:{fitContent:d}}),...w({key:`--bkbx-h`,value:s(i||`fit-content`),defaultStyles:u,skipDimensions:{fitContent:d}})},p=A(a,o,c),m=[`box`];return l&&m.push(`v`),{boxStyle:f,gridSpanStyle:p,classTokens:m}}var R=(e,t,n,r)=>({"--bksp-w":`100%`,"--bksp-h":`100%`,"--bksp-b":`${e}px`,"--bksp-ct":t,"--bksp-cf":n,"--bksp-cl":r});function z(e){let{base:t,colors:n,width:r,height:i,color:a,variant:o,isVisible:c}=e,[l,u]=g([r,i],[0,0],{base:t,suppressWarnings:!0}),d=R(t,n.text,n.flat,n.line),f=[`--bksp-w`,`--bksp-h`],p={...w({key:`--bksp-h`,value:s(u||`100%`),defaultStyles:d,skipDimensions:{fullSize:f}}),...w({key:`--bksp-w`,value:s(l||`100%`),defaultStyles:d,skipDimensions:{fullSize:f}}),"--bksp-b":`${t}px`,...w({key:`--bksp-ct`,value:a??n.text,defaultStyles:d}),...w({key:`--bksp-cl`,value:a??n.line,defaultStyles:d}),...w({key:`--bksp-cf`,value:a??n.flat,defaultStyles:d})},m=[`spr`];return c&&m.push(o),{style:p,normWidth:l,normHeight:u,classTokens:m}}function B(e){let{base:t,color:n,width:r,height:i,padding:a,enableSpacers:o,isVisible:c}=e,l={};if(r!==void 0&&r!==`fit-content`&&(l[`--bkpd-w`]=s(r)),i!==void 0&&i!==`fit-content`&&(l[`--bkpd-h`]=s(i)),l[`--bkpd-b`]=`${t}px`,l[`--bkpd-c`]=n,!o){let{top:e,right:t,bottom:n,left:r}=a;(e>0||n>0)&&(l.paddingBlock=`${e}px ${n}px`),(r>0||t>0)&&(l.paddingInline=`${r}px ${t}px`)}let u=[`pad`];return c&&o&&u.push(`v`),{containerStyle:l,classTokens:u}}Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return p}});
|
|
2
|
-
//# sourceMappingURL=src-CMjyHjX5.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"src-CMjyHjX5.cjs","names":[],"sources":["../packages/core/src/config/defaults.ts","../packages/core/src/config/merge.ts","../packages/core/src/types.ts","../packages/core/src/utils/parse.ts","../packages/core/src/utils/convert.ts","../packages/core/src/utils/math.ts","../packages/core/src/utils/normalize.ts","../packages/core/src/utils/padding.ts","../packages/core/src/utils/snapping.ts","../packages/core/src/utils/merge.ts","../packages/core/src/validation/guide.ts","../packages/core/src/utils/grid.ts","../packages/core/src/descriptors/guide.ts","../packages/core/src/descriptors/baseline.ts","../packages/core/src/descriptors/box.ts","../packages/core/src/descriptors/spacer.ts","../packages/core/src/descriptors/padder.ts"],"sourcesContent":["import type { ConfigSchema } from './schema'\n\nexport const DEFAULT_CONFIG: ConfigSchema = {\n base: 8,\n baseline: {\n variant: 'line',\n debugging: 'hidden',\n colors: {\n line: 'var(--bk-baseline-color-line-theme)',\n flat: 'var(--bk-baseline-color-flat-theme)',\n },\n },\n guide: {\n variant: 'line',\n debugging: 'hidden',\n colors: {\n line: 'var(--bk-guide-color-line-theme)',\n pattern: 'var(--bk-guide-color-pattern-theme)',\n auto: 'var(--bk-guide-color-auto-theme)',\n fixed: 'var(--bk-guide-color-fixed-theme)',\n },\n },\n spacer: {\n variant: 'line',\n debugging: 'hidden',\n colors: {\n line: 'var(--bk-spacer-color-line-theme)',\n flat: 'var(--bk-spacer-color-flat-theme)',\n text: 'var(--bk-spacer-color-text-theme)',\n },\n },\n box: {\n debugging: 'hidden',\n colors: {\n line: 'var(--bk-box-color-line-theme)',\n flat: 'var(--bk-box-color-flat-theme)',\n text: 'var(--bk-box-color-text-theme)',\n },\n },\n padder: {\n debugging: 'hidden',\n color: 'var(--bk-padder-color-theme)',\n },\n} as const\n","import type { ConfigSchema } from './schema'\n\ntype MergeConfigParams = {\n parentConfig: ConfigSchema\n base?: number\n baseline?: Partial<ConfigSchema['baseline']>\n guide?: Partial<ConfigSchema['guide']>\n spacer?: Partial<ConfigSchema['spacer']>\n box?: Partial<ConfigSchema['box']>\n padder?: Partial<ConfigSchema['padder']>\n}\n\nconst COMPONENT_KEYS = ['baseline', 'guide', 'spacer', 'box', 'padder'] as const\n\nexport const mergeConfig = (params: MergeConfigParams): ConfigSchema => {\n const { parentConfig, base } = params\n const merged = {} as Record<string, unknown>\n\n for (const key of COMPONENT_KEYS) {\n merged[key] = { ...parentConfig[key], ...params[key] }\n }\n\n return { base: base ?? parentConfig.base, ...merged } as ConfigSchema\n}\n\ntype CSSVariablesParams = {\n base: number\n baseline: ConfigSchema['baseline']\n guide: ConfigSchema['guide']\n spacer: ConfigSchema['spacer']\n box: ConfigSchema['box']\n padder: ConfigSchema['padder']\n}\n\nexport const createCSSVariables = (\n params: CSSVariablesParams\n): Record<string, string> => {\n const { base, baseline, guide, spacer, box, padder } = params\n return {\n '--bk-base': `${base}px`,\n '--bkbl-cl': baseline.colors.line,\n '--bkbl-cf': baseline.colors.flat,\n '--bkgd-cl': guide.colors.line,\n '--bkgd-cp': guide.colors.pattern,\n '--bkgd-ca': guide.colors.auto,\n '--bkgd-cf': guide.colors.fixed,\n '--bksp-cl': spacer.colors.line,\n '--bksp-cf': spacer.colors.flat,\n '--bksp-ct': spacer.colors.text,\n '--bkbx-cl': box.colors.line,\n '--bkbx-cf': box.colors.flat,\n '--bkbx-ct': box.colors.text,\n '--bkpd-c': padder.color,\n }\n}\n","/**\n * @baseline-kit/core - Pure type definitions\n * Framework-agnostic types for the baseline-kit system\n */\n\n// Spacing Types\nexport type Spacing =\n | number\n | [number, number]\n | { start?: number; end?: number }\n\nexport type PaddingValue =\n | number\n | [number, number]\n | [number, number, number]\n | [number, number, number, number]\n | { top?: number; bottom?: number; left?: number; right?: number }\n\nexport type Padding = {\n top: number\n right: number\n bottom: number\n left: number\n}\n\nexport type SpacingProps = {\n padding?: PaddingValue\n block?: Spacing\n inline?: Spacing\n}\n\n// Grid Types\nexport type GuideVariant = 'line' | 'pattern' | 'fixed' | 'auto'\nexport type GuideColumnValue = string | number | undefined | 'auto'\nexport type GuideColumnsPattern = readonly GuideColumnValue[]\n\nexport const GRID_ALIGNMENTS = ['start', 'center', 'end'] as const\nexport type GridAlignment = (typeof GRID_ALIGNMENTS)[number]\n\nexport const PADD_VARIANTS = ['line', 'flat'] as const\nexport type PaddedVariant = (typeof PADD_VARIANTS)[number]\n\n// Component Types\nexport type Variant = 'line' | 'flat' | 'pattern'\nexport type BaselineVariant = Exclude<Variant, 'pattern'>\nexport type SnappingMode = 'none' | 'height' | 'clamp'\nexport type DebuggingMode = 'none' | 'hidden' | 'visible'\n\n// Guide Config Types (framework-agnostic)\ntype BaseGuideConfig = {\n gap?: number | string\n base?: number\n}\n\nexport type PatternConfig = BaseGuideConfig & {\n variant: 'pattern'\n columns: GuideColumnsPattern\n columnWidth?: never\n}\n\nexport type FixedConfig = BaseGuideConfig & {\n variant: 'fixed'\n columns: number\n columnWidth?: number | string\n}\n\nexport type AutoConfig = BaseGuideConfig & {\n variant: 'auto'\n columnWidth: number | string\n columns?: never\n}\n\nexport type LineConfig = BaseGuideConfig & {\n variant?: 'line'\n columns?: never\n columnWidth?: never\n}\n\nexport type GuideConfig = PatternConfig | AutoConfig | FixedConfig | LineConfig\n","export function parseUnit(\n value: string\n): { value: number; unit: string } | null {\n const match = value.trim().match(/^([+-]?[\\d.]+)([a-zA-Z%]+)$/)\n if (!match) return null\n const num = parseFloat(match[1])\n const unit = match[2]\n return { value: num, unit }\n}\n\nexport function formatValue(\n value: string | number | undefined,\n defaultValue?: number\n): string {\n if (value === undefined && defaultValue !== undefined)\n return `${defaultValue}px`\n if (\n value === 'auto' ||\n (typeof value === 'string' &&\n /^(auto|100%|0|.*(fr|vh|vw|vmin|vmax|rem))$/.test(value))\n ) {\n return String(value)\n }\n if (typeof value === 'number') return `${value}px`\n return value ?? ''\n}\n","import { parseUnit } from './parse'\n\nexport interface ConversionContext {\n parentSize?: number\n viewportWidth?: number\n viewportHeight?: number\n rootFontSize?: number\n parentFontSize?: number\n}\n\nconst DEFAULT_CONTEXT: Required<ConversionContext> = {\n parentSize: 0,\n viewportWidth: 1920,\n viewportHeight: 1080,\n rootFontSize: 16,\n parentFontSize: 16,\n}\n\nexport const ABSOLUTE_UNIT_CONVERSIONS: Record<string, number> = {\n px: 1,\n in: 96,\n cm: 37.8,\n mm: 3.78,\n pt: 1.33,\n pc: 16,\n}\n\nexport const RELATIVE_UNITS: string[] = [\n 'em',\n 'rem',\n 'vh',\n 'vw',\n 'vmin',\n 'vmax',\n '%',\n]\n\nconst RELATIVE_UNIT_RESOLVERS: Record<\n string,\n (ctx: Required<ConversionContext>) => number\n> = {\n em: (ctx) => ctx.parentFontSize,\n rem: (ctx) => ctx.rootFontSize,\n vh: (ctx) => ctx.viewportHeight / 100,\n vw: (ctx) => ctx.viewportWidth / 100,\n vmin: (ctx) => Math.min(ctx.viewportWidth, ctx.viewportHeight) / 100,\n vmax: (ctx) => Math.max(ctx.viewportWidth, ctx.viewportHeight) / 100,\n '%': (ctx) => ctx.parentSize / 100,\n}\n\nexport function convertValue(\n value: number | string | undefined,\n context?: ConversionContext\n): number | null {\n if (typeof value === 'number') return value\n if (typeof value !== 'string') return null\n\n const parsed = parseUnit(value)\n if (!parsed) return null\n\n const { value: num, unit } = parsed\n\n if (unit in ABSOLUTE_UNIT_CONVERSIONS) {\n return num * ABSOLUTE_UNIT_CONVERSIONS[unit]\n }\n\n if (unit === 'auto') return null\n\n const resolver = RELATIVE_UNIT_RESOLVERS[unit]\n if (resolver) {\n const ctx = { ...DEFAULT_CONTEXT, ...context }\n return num * resolver(ctx)\n }\n\n return null\n}\n","export function clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max)\n}\n\ntype RowCountParams = {\n height?: number\n top: number\n bottom: number\n base: number\n}\n\nexport function calculateRowCount(params: RowCountParams): number {\n const { height, top, bottom, base } = params\n const totalHeight = (height ?? 0) - (top + bottom)\n return Math.max(1, Math.floor(totalHeight / base))\n}\n","import { convertValue, type ConversionContext } from './convert'\nimport { clamp } from './math'\n\nexport interface NormalizationOptions {\n base?: number\n round?: boolean\n clamp?: { min?: number; max?: number }\n suppressWarnings?: boolean\n context?: ConversionContext\n}\n\nexport function normalizeValue(\n value: string | number | undefined,\n options: NormalizationOptions = {}\n): number {\n const {\n base = 8,\n round: doRound = true,\n clamp: clampOptions,\n context,\n } = options\n\n if (value === 'auto') return base\n\n let num: number | null = null\n if (typeof value === 'number') {\n num = value\n } else if (typeof value === 'string') {\n num = convertValue(value, context) ?? base\n }\n if (num === null) num = base\n\n if (base <= 0) return num\n\n const normalized = doRound ? Math.round(num / base) * base : num\n\n return clampOptions !== undefined\n ? clamp(\n normalized,\n clampOptions.min ?? -Infinity,\n clampOptions.max ?? Infinity\n )\n : normalized\n}\n\nexport function normalizeValuePair(\n values:\n | [string | number | undefined, string | number | undefined]\n | undefined,\n defaults: [number, number],\n options?: NormalizationOptions\n): [number, number] {\n if (!values) return defaults\n\n if (values[0] === undefined && values[1] === undefined) {\n return defaults\n }\n\n const first =\n values[0] !== undefined ? normalizeValue(values[0], options) : defaults[0]\n const second =\n values[1] !== undefined ? normalizeValue(values[1], options) : defaults[1]\n return [first, second]\n}\n","import type { Padding, PaddingValue, Spacing, SpacingProps } from '../types'\n\nexport function parsePadding(spacing: SpacingProps): Padding {\n if ('padding' in spacing && spacing.padding != null) {\n return parsePaddingValue(spacing.padding)\n }\n\n const blockEdges =\n 'block' in spacing && spacing.block != null\n ? parseBlock(spacing.block)\n : { top: 0, bottom: 0 }\n const inlineEdges =\n 'inline' in spacing && spacing.inline != null\n ? parseInline(spacing.inline)\n : { left: 0, right: 0 }\n\n return {\n top: blockEdges.top,\n right: inlineEdges.right,\n bottom: blockEdges.bottom,\n left: inlineEdges.left,\n }\n}\n\nfunction parsePaddingValue(padding: PaddingValue): Padding {\n if (typeof padding === 'number') {\n return { top: padding, right: padding, bottom: padding, left: padding }\n }\n\n if (Array.isArray(padding)) {\n const [a = 0, b = 0, c, d] = padding\n return { top: a, right: b, bottom: c ?? a, left: d ?? b }\n }\n\n if (typeof padding === 'object') {\n return {\n top: padding.top ?? 0,\n right: padding.right ?? 0,\n bottom: padding.bottom ?? 0,\n left: padding.left ?? 0,\n }\n }\n\n return { top: 0, right: 0, bottom: 0, left: 0 }\n}\n\nfunction parseBlock(block: Spacing): Pick<Padding, 'top' | 'bottom'> {\n if (typeof block === 'number') {\n return { top: block, bottom: block }\n }\n if (Array.isArray(block)) {\n const [top, bottom] = block\n return { top: top ?? 0, bottom: bottom ?? 0 }\n }\n if (typeof block === 'object') {\n return { top: block.start ?? 0, bottom: block.end ?? 0 }\n }\n return { top: 0, bottom: 0 }\n}\n\nfunction parseInline(inline: Spacing): Pick<Padding, 'left' | 'right'> {\n if (typeof inline === 'number') {\n return { left: inline, right: inline }\n }\n if (Array.isArray(inline)) {\n const [left, right] = inline\n return { left: left ?? 0, right: right ?? 0 }\n }\n if (typeof inline === 'object') {\n return { left: inline.start ?? 0, right: inline.end ?? 0 }\n }\n return { left: 0, right: 0 }\n}\n","import type { SnappingMode, Padding, PaddingValue } from '../types'\nimport { parsePadding } from './padding'\n\nexport function calculateSnappedSpacing(\n height: number,\n base: number,\n initial: PaddingValue,\n snapping: SnappingMode\n): Padding {\n const pad: Padding = parsePadding({ padding: initial })\n\n if (snapping === 'none') {\n return pad\n }\n\n if (snapping === 'height') {\n const remainder = height % base\n if (remainder !== 0) {\n pad.bottom += base - remainder\n }\n }\n\n if (snapping === 'clamp') {\n pad.top = pad.top % base\n const remainder = height % base\n if (remainder !== 0) {\n pad.bottom += base - remainder\n }\n pad.bottom = pad.bottom % base\n }\n\n return pad\n}\n","import type { DebuggingMode } from '../types'\n\n/**\n * Combines class names, filtering out falsy values.\n * Lightweight alternative to clsx/classnames.\n */\nexport const cx = (\n ...classes: Array<string | boolean | undefined | null>\n): string => classes.filter(Boolean).join(' ').trim()\n\n/**\n * Resolves component debug/visibility state from prop and config.\n * Pure function — framework-agnostic.\n */\nexport interface DebugState {\n isShown: boolean\n isHidden: boolean\n isNone: boolean\n debugging: DebuggingMode | undefined\n}\n\nexport function resolveDebugState(\n debuggingProp?: DebuggingMode,\n debuggingConfig?: DebuggingMode\n): DebugState {\n const effective = debuggingProp ?? debuggingConfig\n return {\n isShown: effective === 'visible',\n isHidden: effective === 'hidden',\n isNone: effective === 'none',\n debugging: effective,\n }\n}\n\nexport type StyleOverrideParams = {\n key: string\n value: string\n defaultStyles: Record<string, string>\n skipDimensions?: {\n fitContent?: string[]\n auto?: string[]\n fullSize?: string[]\n }\n}\n\nexport function createStyleOverride(\n params: StyleOverrideParams | string,\n value?: string,\n defaultStyles?: Record<string, string>\n): Record<string, string> {\n const key = typeof params === 'string' ? params : params.key\n const val = typeof params === 'string' ? value! : params.value\n const defaults =\n typeof params === 'string' ? defaultStyles! : params.defaultStyles\n const skipDimensions =\n typeof params === 'object' ? params.skipDimensions : undefined\n\n if (skipDimensions) {\n if (skipDimensions.fitContent?.includes(key) && val === 'fit-content') {\n return {}\n }\n if (skipDimensions.auto?.includes(key) && val === 'auto') {\n return {}\n }\n if (\n skipDimensions.fullSize?.includes(key) &&\n (val === '100%' || val === '100vh' || val === '100vw')\n ) {\n return {}\n }\n }\n\n return val !== defaults[key] ? { [key]: val } : {}\n}\n","import type { GuideColumnsPattern, GuideColumnValue } from '../types'\n\nconst UNIT_PATTERN =\n /^\\d*\\.?\\d+(?:fr|px|%|em|rem|vh|vw|vmin|vmax|pt|pc|in|cm|mm)$/\n\nexport const isValidGuideColumnValue = (\n value: unknown\n): value is GuideColumnValue => {\n if (typeof value === 'number') return Number.isFinite(value) && value >= 0\n if (typeof value !== 'string') return false\n return value === 'auto' || value === '100%' || UNIT_PATTERN.test(value)\n}\n\nexport const isValidGuidePattern = (\n pattern: unknown\n): pattern is GuideColumnsPattern =>\n Array.isArray(pattern) &&\n pattern.length > 0 &&\n pattern.every(isValidGuideColumnValue)\n","import type { GuideConfig, GuideColumnsPattern } from '../types'\nimport { isValidGuidePattern } from '../validation/guide'\nimport { normalizeValue } from './normalize'\nimport { formatValue } from './parse'\nimport { convertValue, type ConversionContext } from './convert'\n\nexport interface GuideResult {\n template: string\n columnsCount: number\n calculatedGap: number\n isValid: boolean\n}\n\nconst INVALID_RESULT: GuideResult = {\n template: 'none',\n columnsCount: 0,\n calculatedGap: 0,\n isValid: false,\n}\n\n/**\n * Pure calculation of grid template from container width and guide config.\n * Framework-agnostic — can be used outside React.\n *\n * Sizing note: the `line` variant still reports the number of pixel tracks as\n * metadata, but React renders line guides with a CSS gradient so dense grids do\n * not allocate one DOM node per line.\n */\nexport function calculateGuideTemplate(\n width: number,\n config: GuideConfig,\n context?: ConversionContext\n): GuideResult {\n const variant = config.variant ?? 'line'\n const base = config.base ?? 8\n const gap = normalizeValue(config.gap ?? 0, { base, context })\n\n if (!width) return INVALID_RESULT\n\n switch (variant) {\n case 'line': {\n const finalGap = gap === 0 ? 0 : gap - 1\n const actualGapWithLine = finalGap + 1\n\n const columns =\n finalGap === 0\n ? Math.max(1, Math.floor(width) + 1)\n : Math.max(1, Math.floor((width + 1) / actualGapWithLine) + 1)\n\n return {\n template: `repeat(${columns}, 1px)`,\n columnsCount: columns,\n calculatedGap: gap > 0 ? gap - 1 : gap,\n isValid: true,\n }\n }\n\n case 'pattern': {\n if (!config.columns || !Array.isArray(config.columns)) {\n return INVALID_RESULT\n }\n\n if (!isValidGuidePattern(config.columns)) {\n return INVALID_RESULT\n }\n\n const columnsArr = (config.columns as GuideColumnsPattern).map((col) =>\n typeof col === 'number' ? `${col}px` : col\n )\n\n if (columnsArr.some((c) => c === '0' || c === '0px')) {\n return INVALID_RESULT\n }\n\n return {\n template: columnsArr.join(' '),\n columnsCount: columnsArr.length,\n calculatedGap: gap,\n isValid: true,\n }\n }\n\n case 'fixed': {\n const colCount = typeof config.columns === 'number' ? config.columns : 0\n if (colCount < 1) return INVALID_RESULT\n\n const colWidth = config.columnWidth\n ? formatValue(config.columnWidth)\n : '1fr'\n\n return {\n template: `repeat(${colCount}, ${colWidth})`,\n columnsCount: colCount,\n calculatedGap: gap,\n isValid: true,\n }\n }\n\n case 'auto': {\n const colWidth = config.columnWidth ?? 'auto'\n if (colWidth === 'auto') {\n return {\n template: 'repeat(auto-fill, minmax(0, 1fr))',\n columnsCount: 1,\n calculatedGap: gap,\n isValid: true,\n }\n }\n\n const colWidthStr =\n typeof colWidth === 'number' ? `${colWidth}px` : colWidth.toString()\n const pxVal = convertValue(colWidthStr, context) ?? 0\n const columns =\n pxVal > 0 ? Math.max(1, Math.floor((width + gap) / (pxVal + gap))) : 1\n\n return {\n template: `repeat(auto-fill, ${colWidthStr})`,\n columnsCount: columns,\n calculatedGap: gap,\n isValid: true,\n }\n }\n\n default: {\n const columns = Math.max(1, Math.floor(width / (gap + 1)) + 1)\n return {\n template: `repeat(${columns}, 1px)`,\n columnsCount: columns,\n calculatedGap: gap,\n isValid: true,\n }\n }\n }\n}\n\nexport const createGridSpanStyles = (\n span?: number,\n colSpan?: number,\n rowSpan?: number\n): Record<string, string> => {\n const gridStyles: Record<string, string> = {}\n\n if (span !== undefined) {\n gridStyles.gridColumn = `span ${span}`\n gridStyles.gridRow = `span ${span}`\n } else {\n if (colSpan !== undefined) {\n gridStyles.gridColumn = `span ${colSpan}`\n }\n if (rowSpan !== undefined) {\n gridStyles.gridRow = `span ${rowSpan}`\n }\n }\n\n return gridStyles\n}\n","import type { GuideVariant, GuideConfig } from '../types'\nimport { formatValue, createStyleOverride } from '../utils'\n\nexport interface GuideDescriptorParams {\n base: number\n colors: Record<GuideVariant, string>\n variant: GuideVariant\n align: string\n width?: number | string\n height?: number | string\n columnWidth?: number | string\n maxWidth?: number | string\n color?: string\n /** Pre-computed guide template result (from useGuide or calculateGuideTemplate) */\n template: string\n columnsCount: number\n calculatedGap: number\n isVisible: boolean\n}\n\nexport interface GuideDescriptor {\n containerStyle: Record<string, string>\n columnColor: string\n columnsCount: number\n calculatedGap: number\n template: string\n isVisible: boolean\n isLineVariant: boolean\n classTokens: string[]\n}\n\nexport interface GuideConfigParams {\n variant: GuideVariant\n base: number\n gap: number\n columns?: number | readonly (string | number | undefined | 'auto')[]\n columnWidth?: number | string\n}\n\n/**\n * Creates a GuideConfig from component props.\n * Pure function — no React or DOM dependency.\n */\nexport function createGuideConfig({\n variant,\n base,\n gap,\n columns,\n columnWidth,\n}: GuideConfigParams): GuideConfig {\n switch (variant) {\n case 'line':\n return { variant: 'line', gap, base }\n case 'pattern':\n if (columns && Array.isArray(columns)) {\n return {\n variant: 'pattern',\n columns: columns as readonly (string | number)[],\n gap,\n base,\n }\n }\n break\n case 'fixed':\n if (columns !== undefined) {\n const parsed =\n typeof columns === 'number' ? columns : parseInt(String(columns), 10)\n return {\n variant: 'fixed',\n columns: !isNaN(parsed) ? parsed : 12,\n columnWidth: columnWidth || '60px',\n gap,\n base,\n }\n }\n break\n }\n return { variant: 'auto', columnWidth: columnWidth || '1fr', gap, base }\n}\n\nconst GUIDE_DEFAULTS = (\n base: number,\n lineColor: string\n): Record<string, string> => ({\n '--bkgd-w': '100%',\n '--bkgd-h': '100%',\n '--bkgd-mw': 'none',\n '--bkgd-cw': '60px',\n '--bkgd-gw': '24px',\n '--bkgd-n': '12',\n '--bkgd-b': `${base}px`,\n '--bkgd-cl': lineColor,\n '--bkgd-g': '0',\n})\n\n/**\n * Computes all styles and data needed to render a Guide component.\n * Pure function — framework-agnostic.\n */\nexport function createGuideDescriptor(\n params: GuideDescriptorParams\n): GuideDescriptor {\n const {\n base,\n colors,\n variant,\n align,\n width,\n height,\n columnWidth,\n maxWidth,\n color,\n template,\n columnsCount,\n calculatedGap,\n isVisible,\n } = params\n\n const defaultStyles = GUIDE_DEFAULTS(base, colors.line)\n const fullDimensions = ['--bkgd-w', '--bkgd-h']\n\n const widthValue = formatValue(width ?? '100%')\n const heightValue = formatValue(height ?? '100%')\n\n const containerStyle: Record<string, string> = {\n ...createStyleOverride({\n key: '--bkgd-w',\n value: widthValue,\n defaultStyles,\n skipDimensions: { fullSize: fullDimensions },\n }),\n ...createStyleOverride({\n key: '--bkgd-h',\n value: heightValue,\n defaultStyles,\n skipDimensions: { fullSize: fullDimensions },\n }),\n ...createStyleOverride({\n key: '--bkgd-mw',\n value: formatValue(maxWidth || 'none'),\n defaultStyles,\n }),\n ...createStyleOverride({\n key: '--bkgd-cw',\n value: formatValue(columnWidth || '60px'),\n defaultStyles,\n }),\n ...createStyleOverride({\n key: '--bkgd-n',\n value: `${columnsCount}`,\n defaultStyles,\n }),\n ...createStyleOverride({ key: '--bkgd-b', value: '0', defaultStyles }),\n ...createStyleOverride({\n key: '--bkgd-cl',\n value: color ?? colors.line,\n defaultStyles,\n }),\n ...createStyleOverride({\n key: '--bkgd-g',\n value: `${calculatedGap}px`,\n defaultStyles,\n }),\n ...createStyleOverride({\n key: '--bkgd-j',\n value: align || 'center',\n defaultStyles,\n }),\n // CSS module resolves grid-template-columns from --bkgd-t, so the inline\n // gridTemplateColumns property would be redundant.\n ...(template && template !== 'none' ? { '--bkgd-t': template } : {}),\n }\n\n const columnColor =\n (variant && variant in colors\n ? colors[variant as keyof typeof colors]\n : undefined) ?? colors.line\n\n const isLineVariant = variant === 'line'\n const classTokens = ['gde', isVisible ? 'v' : 'h']\n if (isLineVariant) classTokens.push('line')\n\n if (isLineVariant) {\n containerStyle['--bkgd-line-color'] = color ?? colors.line\n containerStyle['--bkgd-line-period'] = `${calculatedGap + 1}px`\n }\n\n return {\n containerStyle,\n columnColor,\n columnsCount,\n calculatedGap,\n template,\n isVisible,\n isLineVariant,\n classTokens,\n }\n}\n","import type { BaselineVariant } from '../types'\nimport {\n formatValue,\n createStyleOverride,\n normalizeValuePair,\n parsePadding,\n calculateRowCount,\n} from '../utils'\n\nexport interface BaselineDescriptorParams {\n base: number\n colors: Record<BaselineVariant, string>\n variant: BaselineVariant\n width?: number | string\n height?: number | string\n color?: string\n containerWidth: number\n containerHeight: number\n spacing: Record<string, unknown>\n isVisible: boolean\n}\n\nexport interface BaselineDescriptor {\n containerStyle: Record<string, string>\n rowCount: number\n getRowStyle: (index: number) => Record<string, string>\n padding: string | undefined\n isVisible: boolean\n classTokens: string[]\n}\n\nconst BASELINE_DEFAULTS = (\n base: number,\n lineColor: string,\n flatColor: string\n): Record<string, string> => ({\n '--bkbl-w': '100%',\n '--bkbl-h': '100%',\n '--bkbl-b': `${base}px`,\n '--bkbl-cl': lineColor,\n '--bkbl-cf': flatColor,\n})\n\n/**\n * Computes all styles and data needed to render a Baseline component.\n * Pure function — framework-agnostic.\n */\nexport function createBaselineDescriptor(\n params: BaselineDescriptorParams\n): BaselineDescriptor {\n const {\n base,\n colors,\n variant,\n width,\n height,\n color,\n containerWidth,\n containerHeight,\n spacing,\n isVisible,\n } = params\n\n const [, normHeight] = normalizeValuePair(\n [width, height],\n [containerWidth, containerHeight]\n )\n const { top, right, bottom, left } = parsePadding(spacing)\n\n const paddingValues = [top, right, bottom, left]\n .map((v) => (v ? `${v}px` : '0'))\n .join(' ')\n const padding = paddingValues !== '0 0 0 0' ? paddingValues : undefined\n\n const rowCount = calculateRowCount({ height: normHeight, top, bottom, base })\n\n const chosenColor = color || (variant === 'line' ? colors.line : colors.flat)\n\n const defaultStyles = BASELINE_DEFAULTS(base, colors.line, colors.flat)\n const dimensionVars = ['--bkbl-w', '--bkbl-h']\n\n const containerStyle: Record<string, string> = {\n ...createStyleOverride({\n key: '--bkbl-w',\n value: formatValue(width || '100%'),\n defaultStyles,\n skipDimensions: { fullSize: dimensionVars },\n }),\n ...createStyleOverride({\n key: '--bkbl-h',\n value: formatValue(height || '100%'),\n defaultStyles,\n skipDimensions: { fullSize: dimensionVars },\n }),\n // --bkbl-b omitted: value `${base}px` always equals the BASELINE_DEFAULTS\n // entry, so the override would never emit. CSS layer carries the default.\n ...createStyleOverride({\n key: '--bkbl-cl',\n value: color || colors.line,\n defaultStyles,\n }),\n ...createStyleOverride({\n key: '--bkbl-cf',\n value: color || colors.flat,\n defaultStyles,\n }),\n ...(padding ? { padding } : {}),\n }\n\n const getRowStyle = (index: number): Record<string, string> => ({\n '--bkbl-rt': index === 0 ? '0px' : `${index * base}px`,\n '--bkbl-rh': variant === 'line' ? '1px' : `${base}px`,\n '--bkbl-c': chosenColor,\n })\n\n const classTokens = ['bas', isVisible ? 'v' : 'h']\n\n return {\n containerStyle,\n rowCount,\n getRowStyle,\n padding,\n isVisible,\n classTokens,\n }\n}\n","import {\n formatValue,\n createStyleOverride,\n createGridSpanStyles,\n} from '../utils'\n\nexport interface BoxDescriptorParams {\n base: number\n lineColor: string\n width?: number | string\n height?: number | string\n span?: number\n colSpan?: number\n rowSpan?: number\n isVisible: boolean\n}\n\nexport interface BoxDescriptor {\n boxStyle: Record<string, string>\n gridSpanStyle: Record<string, string>\n classTokens: string[]\n}\n\nconst BOX_DEFAULTS = (\n base: number,\n lineColor: string\n): Record<string, string> => ({\n '--bkbx-w': 'auto',\n '--bkbx-h': 'auto',\n '--bkbx-cl': lineColor,\n '--bkbx-b': `${base}px`,\n})\n\n/**\n * Computes styles needed to render a Box component.\n * Pure function — framework-agnostic.\n */\nexport function createBoxDescriptor(\n params: BoxDescriptorParams\n): BoxDescriptor {\n const { base, lineColor, width, height, span, colSpan, rowSpan, isVisible } =\n params\n\n const defaultStyles = BOX_DEFAULTS(base, lineColor)\n const dimensionVars = ['--bkbx-w', '--bkbx-h']\n\n // --bkbx-b and --bkbx-cl intentionally omitted: their runtime value\n // always equals the default (both are derived from the same base/lineColor\n // inputs that seed BOX_DEFAULTS), so inline overrides would never emit.\n // Styling happens at the CSS layer via the module's declared defaults.\n const boxStyle: Record<string, string> = {\n ...createStyleOverride({\n key: '--bkbx-w',\n value: formatValue(width || 'fit-content'),\n defaultStyles,\n skipDimensions: { fitContent: dimensionVars },\n }),\n ...createStyleOverride({\n key: '--bkbx-h',\n value: formatValue(height || 'fit-content'),\n defaultStyles,\n skipDimensions: { fitContent: dimensionVars },\n }),\n }\n\n const gridSpanStyle = createGridSpanStyles(span, colSpan, rowSpan)\n\n const classTokens = ['box']\n if (isVisible) classTokens.push('v')\n\n return { boxStyle, gridSpanStyle, classTokens }\n}\n","import { formatValue, createStyleOverride, normalizeValuePair } from '../utils'\n\nexport interface SpacerDescriptorParams {\n base: number\n colors: { line: string; flat: string; text: string }\n width?: number | string\n height?: number | string\n color?: string\n variant: string\n isVisible: boolean\n}\n\nexport interface SpacerDescriptor {\n style: Record<string, string>\n normWidth: number\n normHeight: number\n classTokens: string[]\n}\n\nconst SPACER_DEFAULTS = (\n base: number,\n textColor: string,\n flatColor: string,\n lineColor: string\n): Record<string, string> => ({\n '--bksp-w': '100%',\n '--bksp-h': '100%',\n '--bksp-b': `${base}px`,\n '--bksp-ct': textColor,\n '--bksp-cf': flatColor,\n '--bksp-cl': lineColor,\n})\n\n/**\n * Computes styles needed to render a Spacer component.\n * Pure function — framework-agnostic.\n */\nexport function createSpacerDescriptor(\n params: SpacerDescriptorParams\n): SpacerDescriptor {\n const { base, colors, width, height, color, variant, isVisible } = params\n\n const [normWidth, normHeight] = normalizeValuePair([width, height], [0, 0], {\n base,\n suppressWarnings: true,\n })\n\n const defaultStyles = SPACER_DEFAULTS(\n base,\n colors.text,\n colors.flat,\n colors.line\n )\n const dimensionVars = ['--bksp-w', '--bksp-h']\n\n const style: Record<string, string> = {\n ...createStyleOverride({\n key: '--bksp-h',\n value: formatValue(normHeight || '100%'),\n defaultStyles,\n skipDimensions: { fullSize: dimensionVars },\n }),\n ...createStyleOverride({\n key: '--bksp-w',\n value: formatValue(normWidth || '100%'),\n defaultStyles,\n skipDimensions: { fullSize: dimensionVars },\n }),\n '--bksp-b': `${base}px`,\n ...createStyleOverride({\n key: '--bksp-ct',\n value: color ?? colors.text,\n defaultStyles,\n }),\n ...createStyleOverride({\n key: '--bksp-cl',\n value: color ?? colors.line,\n defaultStyles,\n }),\n ...createStyleOverride({\n key: '--bksp-cf',\n value: color ?? colors.flat,\n defaultStyles,\n }),\n }\n\n const classTokens = ['spr']\n if (isVisible) classTokens.push(variant)\n\n return { style, normWidth, normHeight, classTokens }\n}\n","import { formatValue } from '../utils'\nimport type { Padding } from '../types'\n\nexport interface PadderDescriptorParams {\n base: number\n color: string\n width?: number | string\n height?: number | string\n padding: Padding\n enableSpacers: boolean\n isVisible: boolean\n}\n\nexport interface PadderDescriptor {\n containerStyle: Record<string, string>\n classTokens: string[]\n}\n\n/**\n * Computes styles needed to render a Padder component.\n * Pure function — framework-agnostic.\n */\nexport function createPadderDescriptor(\n params: PadderDescriptorParams\n): PadderDescriptor {\n const { base, color, width, height, padding, enableSpacers, isVisible } =\n params\n\n const containerStyle: Record<string, string> = {}\n\n if (width !== undefined && width !== 'fit-content') {\n containerStyle['--bkpd-w'] = formatValue(width)\n }\n if (height !== undefined && height !== 'fit-content') {\n containerStyle['--bkpd-h'] = formatValue(height)\n }\n\n containerStyle['--bkpd-b'] = `${base}px`\n containerStyle['--bkpd-c'] = color\n\n if (!enableSpacers) {\n const { top, right, bottom, left } = padding\n if (top > 0 || bottom > 0) {\n containerStyle.paddingBlock = `${top}px ${bottom}px`\n }\n if (left > 0 || right > 0) {\n containerStyle.paddingInline = `${left}px ${right}px`\n }\n }\n\n const classTokens = ['pad']\n if (isVisible && enableSpacers) classTokens.push('v')\n\n return { containerStyle, classTokens }\n}\n"],"mappings":"AAEA,IAAa,EAA+B,CAC1C,KAAM,EACN,SAAU,CACR,QAAS,OACT,UAAW,SACX,OAAQ,CACN,KAAM,sCACN,KAAM,sCACP,CACF,CACD,MAAO,CACL,QAAS,OACT,UAAW,SACX,OAAQ,CACN,KAAM,mCACN,QAAS,sCACT,KAAM,mCACN,MAAO,oCACR,CACF,CACD,OAAQ,CACN,QAAS,OACT,UAAW,SACX,OAAQ,CACN,KAAM,oCACN,KAAM,oCACN,KAAM,oCACP,CACF,CACD,IAAK,CACH,UAAW,SACX,OAAQ,CACN,KAAM,iCACN,KAAM,iCACN,KAAM,iCACP,CACF,CACD,OAAQ,CACN,UAAW,SACX,MAAO,+BACR,CACF,CC/BK,EAAiB,CAAC,WAAY,QAAS,SAAU,MAAO,SAAS,CAE1D,EAAe,GAA4C,CACtE,GAAM,CAAE,eAAc,QAAS,EACzB,EAAS,EAAE,CAEjB,IAAK,IAAM,KAAO,EAChB,EAAO,GAAO,CAAE,GAAG,EAAa,GAAM,GAAG,EAAO,GAAM,CAGxD,MAAO,CAAE,KAAM,GAAQ,EAAa,KAAM,GAAG,EAAQ,EAY1C,EACX,GAC2B,CAC3B,GAAM,CAAE,OAAM,WAAU,QAAO,SAAQ,MAAK,UAAW,EACvD,MAAO,CACL,YAAa,GAAG,EAAK,IACrB,YAAa,EAAS,OAAO,KAC7B,YAAa,EAAS,OAAO,KAC7B,YAAa,EAAM,OAAO,KAC1B,YAAa,EAAM,OAAO,QAC1B,YAAa,EAAM,OAAO,KAC1B,YAAa,EAAM,OAAO,MAC1B,YAAa,EAAO,OAAO,KAC3B,YAAa,EAAO,OAAO,KAC3B,YAAa,EAAO,OAAO,KAC3B,YAAa,EAAI,OAAO,KACxB,YAAa,EAAI,OAAO,KACxB,YAAa,EAAI,OAAO,KACxB,WAAY,EAAO,MACpB,ECjBU,EAAkB,CAAC,QAAS,SAAU,MAAM,CAG5C,EAAgB,CAAC,OAAQ,OAAO,CCvC7C,SAAgB,EACd,EACwC,CACxC,IAAM,EAAQ,EAAM,MAAM,CAAC,MAAM,8BAA8B,CAI/D,OAHK,EAGE,CAAE,MAFG,WAAW,EAAM,GAEb,CAAK,KADR,EAAM,GACQ,CAHR,KAMrB,SAAgB,EACd,EACA,EACQ,CAWR,OAVI,IAAU,IAAA,IAAa,IAAiB,IAAA,GACnC,GAAG,EAAa,IAEvB,IAAU,QACT,OAAO,GAAU,UAChB,6CAA6C,KAAK,EAAM,CAEnD,OAAO,EAAM,CAElB,OAAO,GAAU,SAAiB,GAAG,EAAM,IACxC,GAAS,GCdlB,IAAM,EAA+C,CACnD,WAAY,EACZ,cAAe,KACf,eAAgB,KAChB,aAAc,GACd,eAAgB,GACjB,CAEY,EAAoD,CAC/D,GAAI,EACJ,GAAI,GACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,GACL,CAEY,EAA2B,CACtC,KACA,MACA,KACA,KACA,OACA,OACA,IACD,CAEK,EAGF,CACF,GAAK,GAAQ,EAAI,eACjB,IAAM,GAAQ,EAAI,aAClB,GAAK,GAAQ,EAAI,eAAiB,IAClC,GAAK,GAAQ,EAAI,cAAgB,IACjC,KAAO,GAAQ,KAAK,IAAI,EAAI,cAAe,EAAI,eAAe,CAAG,IACjE,KAAO,GAAQ,KAAK,IAAI,EAAI,cAAe,EAAI,eAAe,CAAG,IACjE,IAAM,GAAQ,EAAI,WAAa,IAChC,CAED,SAAgB,EACd,EACA,EACe,CACf,GAAI,OAAO,GAAU,SAAU,OAAO,EACtC,GAAI,OAAO,GAAU,SAAU,OAAO,KAEtC,IAAM,EAAS,EAAU,EAAM,CAC/B,GAAI,CAAC,EAAQ,OAAO,KAEpB,GAAM,CAAE,MAAO,EAAK,QAAS,EAE7B,GAAI,KAAQ,EACV,OAAO,EAAM,EAA0B,GAGzC,GAAI,IAAS,OAAQ,OAAO,KAE5B,IAAM,EAAW,EAAwB,GAMzC,OALI,EAEK,EAAM,EAAS,CADR,GAAG,EAAiB,GAAG,EACf,CAAI,CAGrB,KC1ET,SAAgB,EAAM,EAAe,EAAa,EAAqB,CACrE,OAAO,KAAK,IAAI,KAAK,IAAI,EAAO,EAAI,CAAE,EAAI,CAU5C,SAAgB,EAAkB,EAAgC,CAChE,GAAM,CAAE,SAAQ,MAAK,SAAQ,QAAS,EAChC,GAAe,GAAU,IAAM,EAAM,GAC3C,OAAO,KAAK,IAAI,EAAG,KAAK,MAAM,EAAc,EAAK,CAAC,CCHpD,SAAgB,EACd,EACA,EAAgC,EAAE,CAC1B,CACR,GAAM,CACJ,OAAO,EACP,MAAO,EAAU,GACjB,MAAO,EACP,WACE,EAEJ,GAAI,IAAU,OAAQ,OAAO,EAE7B,IAAI,EAAqB,KAQzB,GAPI,OAAO,GAAU,SACnB,EAAM,EACG,OAAO,GAAU,WAC1B,EAAM,EAAa,EAAO,EAAQ,EAAI,GAEpC,IAAQ,OAAM,EAAM,GAEpB,GAAQ,EAAG,OAAO,EAEtB,IAAM,EAAa,EAAU,KAAK,MAAM,EAAM,EAAK,CAAG,EAAO,EAE7D,OAAO,IAAiB,IAAA,GAMpB,EALA,EACE,EACA,EAAa,KAAO,KACpB,EAAa,KAAO,IACrB,CAIP,SAAgB,EACd,EAGA,EACA,EACkB,CAWlB,MAVI,CAAC,GAED,EAAO,KAAO,IAAA,IAAa,EAAO,KAAO,IAAA,GACpC,EAOF,CAHL,EAAO,KAAO,IAAA,GAAiD,EAAS,GAA9C,EAAe,EAAO,GAAI,EAAQ,CAE5D,EAAO,KAAO,IAAA,GAAiD,EAAS,GAA9C,EAAe,EAAO,GAAI,EAAQ,CACxC,CC5DxB,SAAgB,EAAa,EAAgC,CAC3D,GAAI,YAAa,GAAW,EAAQ,SAAW,KAC7C,OAAO,EAAkB,EAAQ,QAAQ,CAG3C,IAAM,EACJ,UAAW,GAAW,EAAQ,OAAS,KACnC,EAAW,EAAQ,MAAM,CACzB,CAAE,IAAK,EAAG,OAAQ,EAAG,CACrB,EACJ,WAAY,GAAW,EAAQ,QAAU,KACrC,EAAY,EAAQ,OAAO,CAC3B,CAAE,KAAM,EAAG,MAAO,EAAG,CAE3B,MAAO,CACL,IAAK,EAAW,IAChB,MAAO,EAAY,MACnB,OAAQ,EAAW,OACnB,KAAM,EAAY,KACnB,CAGH,SAAS,EAAkB,EAAgC,CACzD,GAAI,OAAO,GAAY,SACrB,MAAO,CAAE,IAAK,EAAS,MAAO,EAAS,OAAQ,EAAS,KAAM,EAAS,CAGzE,GAAI,MAAM,QAAQ,EAAQ,CAAE,CAC1B,GAAM,CAAC,EAAI,EAAG,EAAI,EAAG,EAAG,GAAK,EAC7B,MAAO,CAAE,IAAK,EAAG,MAAO,EAAG,OAAQ,GAAK,EAAG,KAAM,GAAK,EAAG,CAY3D,OATI,OAAO,GAAY,SACd,CACL,IAAK,EAAQ,KAAO,EACpB,MAAO,EAAQ,OAAS,EACxB,OAAQ,EAAQ,QAAU,EAC1B,KAAM,EAAQ,MAAQ,EACvB,CAGI,CAAE,IAAK,EAAG,MAAO,EAAG,OAAQ,EAAG,KAAM,EAAG,CAGjD,SAAS,EAAW,EAAiD,CACnE,GAAI,OAAO,GAAU,SACnB,MAAO,CAAE,IAAK,EAAO,OAAQ,EAAO,CAEtC,GAAI,MAAM,QAAQ,EAAM,CAAE,CACxB,GAAM,CAAC,EAAK,GAAU,EACtB,MAAO,CAAE,IAAK,GAAO,EAAG,OAAQ,GAAU,EAAG,CAK/C,OAHI,OAAO,GAAU,SACZ,CAAE,IAAK,EAAM,OAAS,EAAG,OAAQ,EAAM,KAAO,EAAG,CAEnD,CAAE,IAAK,EAAG,OAAQ,EAAG,CAG9B,SAAS,EAAY,EAAkD,CACrE,GAAI,OAAO,GAAW,SACpB,MAAO,CAAE,KAAM,EAAQ,MAAO,EAAQ,CAExC,GAAI,MAAM,QAAQ,EAAO,CAAE,CACzB,GAAM,CAAC,EAAM,GAAS,EACtB,MAAO,CAAE,KAAM,GAAQ,EAAG,MAAO,GAAS,EAAG,CAK/C,OAHI,OAAO,GAAW,SACb,CAAE,KAAM,EAAO,OAAS,EAAG,MAAO,EAAO,KAAO,EAAG,CAErD,CAAE,KAAM,EAAG,MAAO,EAAG,CCpE9B,SAAgB,EACd,EACA,EACA,EACA,EACS,CACT,IAAM,EAAe,EAAa,CAAE,QAAS,EAAS,CAAC,CAEvD,GAAI,IAAa,OACf,OAAO,EAGT,GAAI,IAAa,SAAU,CACzB,IAAM,EAAY,EAAS,EACvB,IAAc,IAChB,EAAI,QAAU,EAAO,GAIzB,GAAI,IAAa,QAAS,CACxB,EAAI,KAAgB,EACpB,IAAM,EAAY,EAAS,EACvB,IAAc,IAChB,EAAI,QAAU,EAAO,GAEvB,EAAI,QAAsB,EAG5B,OAAO,ECzBT,IAAa,GACX,GAAG,IACQ,EAAQ,OAAO,QAAQ,CAAC,KAAK,IAAI,CAAC,MAAM,CAarD,SAAgB,EACd,EACA,EACY,CACZ,IAAM,EAAY,GAAiB,EACnC,MAAO,CACL,QAAS,IAAc,UACvB,SAAU,IAAc,SACxB,OAAQ,IAAc,OACtB,UAAW,EACZ,CAcH,SAAgB,EACd,EACA,EACA,EACwB,CACxB,IAAM,EAAM,OAAO,GAAW,SAAW,EAAS,EAAO,IACnD,EAAM,OAAO,GAAW,SAAW,EAAS,EAAO,MACnD,EACJ,OAAO,GAAW,SAAW,EAAiB,EAAO,cACjD,EACJ,OAAO,GAAW,SAAW,EAAO,eAAiB,IAAA,GAiBvD,OAfI,IACE,EAAe,YAAY,SAAS,EAAI,EAAI,IAAQ,eAGpD,EAAe,MAAM,SAAS,EAAI,EAAI,IAAQ,QAIhD,EAAe,UAAU,SAAS,EAAI,GACrC,IAAQ,QAAU,IAAQ,SAAW,IAAQ,WAM3C,IAAQ,EAAS,GAJb,EAAE,CAIkB,EAAG,GAAM,EAAK,CCtE/C,IAAM,EACJ,+DAEW,EACX,GAEI,OAAO,GAAU,SAAiB,OAAO,SAAS,EAAM,EAAI,GAAS,EACrE,OAAO,GAAU,SACd,IAAU,QAAU,IAAU,QAAU,EAAa,KAAK,EAAM,CADjC,GAI3B,EACX,GAEA,MAAM,QAAQ,EAAQ,EACtB,EAAQ,OAAS,GACjB,EAAQ,MAAM,EAAwB,CCLlC,EAA8B,CAClC,SAAU,OACV,aAAc,EACd,cAAe,EACf,QAAS,GACV,CAUD,SAAgB,EACd,EACA,EACA,EACa,CACb,IAAM,EAAU,EAAO,SAAW,OAC5B,EAAO,EAAO,MAAQ,EACtB,EAAM,EAAe,EAAO,KAAO,EAAG,CAAE,OAAM,UAAS,CAAC,CAE9D,GAAI,CAAC,EAAO,OAAO,EAEnB,OAAQ,EAAR,CACE,IAAK,OAAQ,CACX,IAAM,EAAW,IAAQ,EAAI,EAAI,EAAM,EACjC,EAAoB,EAAW,EAE/B,EACJ,IAAa,EACT,KAAK,IAAI,EAAG,KAAK,MAAM,EAAM,CAAG,EAAE,CAClC,KAAK,IAAI,EAAG,KAAK,OAAO,EAAQ,GAAK,EAAkB,CAAG,EAAE,CAElE,MAAO,CACL,SAAU,UAAU,EAAQ,QAC5B,aAAc,EACd,cAAe,EAAM,EAAI,EAAM,EAAI,EACnC,QAAS,GACV,CAGH,IAAK,UAAW,CAKd,GAJI,CAAC,EAAO,SAAW,CAAC,MAAM,QAAQ,EAAO,QAAQ,EAIjD,CAAC,EAAoB,EAAO,QAAQ,CACtC,OAAO,EAGT,IAAM,EAAc,EAAO,QAAgC,IAAK,GAC9D,OAAO,GAAQ,SAAW,GAAG,EAAI,IAAM,EACxC,CAMD,OAJI,EAAW,KAAM,GAAM,IAAM,KAAO,IAAM,MAAM,CAC3C,EAGF,CACL,SAAU,EAAW,KAAK,IAAI,CAC9B,aAAc,EAAW,OACzB,cAAe,EACf,QAAS,GACV,CAGH,IAAK,QAAS,CACZ,IAAM,EAAW,OAAO,EAAO,SAAY,SAAW,EAAO,QAAU,EAOvE,OANI,EAAW,EAAU,EAMlB,CACL,SAAU,UAAU,EAAS,IALd,EAAO,YACpB,EAAY,EAAO,YAAY,CAC/B,MAGwC,GAC1C,aAAc,EACd,cAAe,EACf,QAAS,GACV,CAGH,IAAK,OAAQ,CACX,IAAM,EAAW,EAAO,aAAe,OACvC,GAAI,IAAa,OACf,MAAO,CACL,SAAU,oCACV,aAAc,EACd,cAAe,EACf,QAAS,GACV,CAGH,IAAM,EACJ,OAAO,GAAa,SAAW,GAAG,EAAS,IAAM,EAAS,UAAU,CAChE,EAAQ,EAAa,EAAa,EAAQ,EAAI,EAC9C,EACJ,EAAQ,EAAI,KAAK,IAAI,EAAG,KAAK,OAAO,EAAQ,IAAQ,EAAQ,GAAK,CAAC,CAAG,EAEvE,MAAO,CACL,SAAU,qBAAqB,EAAY,GAC3C,aAAc,EACd,cAAe,EACf,QAAS,GACV,CAGH,QAAS,CACP,IAAM,EAAU,KAAK,IAAI,EAAG,KAAK,MAAM,GAAS,EAAM,GAAG,CAAG,EAAE,CAC9D,MAAO,CACL,SAAU,UAAU,EAAQ,QAC5B,aAAc,EACd,cAAe,EACf,QAAS,GACV,GAKP,IAAa,GACX,EACA,EACA,IAC2B,CAC3B,IAAM,EAAqC,EAAE,CAc7C,OAZI,IAAS,IAAA,IAIP,IAAY,IAAA,KACd,EAAW,WAAa,QAAQ,KAE9B,IAAY,IAAA,KACd,EAAW,QAAU,QAAQ,OAP/B,EAAW,WAAa,QAAQ,IAChC,EAAW,QAAU,QAAQ,KAUxB,GC/GT,SAAgB,EAAkB,CAChC,UACA,OACA,MACA,UACA,eACiC,CACjC,OAAQ,EAAR,CACE,IAAK,OACH,MAAO,CAAE,QAAS,OAAQ,MAAK,OAAM,CACvC,IAAK,UACH,GAAI,GAAW,MAAM,QAAQ,EAAQ,CACnC,MAAO,CACL,QAAS,UACA,UACT,MACA,OACD,CAEH,MACF,IAAK,QACH,GAAI,IAAY,IAAA,GAAW,CACzB,IAAM,EACJ,OAAO,GAAY,SAAW,EAAU,SAAS,OAAO,EAAQ,CAAE,GAAG,CACvE,MAAO,CACL,QAAS,QACT,QAAU,MAAM,EAAO,CAAY,GAAT,EAC1B,YAAa,GAAe,OAC5B,MACA,OACD,CAEH,MAEJ,MAAO,CAAE,QAAS,OAAQ,YAAa,GAAe,MAAO,MAAK,OAAM,CAG1E,IAAM,GACJ,EACA,KAC4B,CAC5B,WAAY,OACZ,WAAY,OACZ,YAAa,OACb,YAAa,OACb,YAAa,OACb,WAAY,KACZ,WAAY,GAAG,EAAK,IACpB,YAAa,EACb,WAAY,IACb,EAMD,SAAgB,EACd,EACiB,CACjB,GAAM,CACJ,OACA,SACA,UACA,QACA,QACA,SACA,cACA,WACA,QACA,WACA,eACA,gBACA,aACE,EAEE,EAAgB,EAAe,EAAM,EAAO,KAAK,CACjD,EAAiB,CAAC,WAAY,WAAW,CAEzC,EAAa,EAAY,GAAS,OAAO,CACzC,EAAc,EAAY,GAAU,OAAO,CAE3C,EAAyC,CAC7C,GAAG,EAAoB,CACrB,IAAK,WACL,MAAO,EACP,gBACA,eAAgB,CAAE,SAAU,EAAgB,CAC7C,CAAC,CACF,GAAG,EAAoB,CACrB,IAAK,WACL,MAAO,EACP,gBACA,eAAgB,CAAE,SAAU,EAAgB,CAC7C,CAAC,CACF,GAAG,EAAoB,CACrB,IAAK,YACL,MAAO,EAAY,GAAY,OAAO,CACtC,gBACD,CAAC,CACF,GAAG,EAAoB,CACrB,IAAK,YACL,MAAO,EAAY,GAAe,OAAO,CACzC,gBACD,CAAC,CACF,GAAG,EAAoB,CACrB,IAAK,WACL,MAAO,GAAG,IACV,gBACD,CAAC,CACF,GAAG,EAAoB,CAAE,IAAK,WAAY,MAAO,IAAK,gBAAe,CAAC,CACtE,GAAG,EAAoB,CACrB,IAAK,YACL,MAAO,GAAS,EAAO,KACvB,gBACD,CAAC,CACF,GAAG,EAAoB,CACrB,IAAK,WACL,MAAO,GAAG,EAAc,IACxB,gBACD,CAAC,CACF,GAAG,EAAoB,CACrB,IAAK,WACL,MAAO,GAAS,SAChB,gBACD,CAAC,CAGF,GAAI,GAAY,IAAa,OAAS,CAAE,WAAY,EAAU,CAAG,EAAE,CACpE,CAEK,GACH,GAAW,KAAW,EACnB,EAAO,GACP,IAAA,KAAc,EAAO,KAErB,EAAgB,IAAY,OAC5B,EAAc,CAAC,MAAO,EAAY,IAAM,IAAI,CAQlD,OAPI,GAAe,EAAY,KAAK,OAAO,CAEvC,IACF,EAAe,qBAAuB,GAAS,EAAO,KACtD,EAAe,sBAAwB,GAAG,EAAgB,EAAE,KAGvD,CACL,iBACA,cACA,eACA,gBACA,WACA,YACA,gBACA,cACD,CCrKH,IAAM,GACJ,EACA,EACA,KAC4B,CAC5B,WAAY,OACZ,WAAY,OACZ,WAAY,GAAG,EAAK,IACpB,YAAa,EACb,YAAa,EACd,EAMD,SAAgB,EACd,EACoB,CACpB,GAAM,CACJ,OACA,SACA,UACA,QACA,SACA,QACA,iBACA,kBACA,UACA,aACE,EAEE,EAAG,GAAc,EACrB,CAAC,EAAO,EAAO,CACf,CAAC,EAAgB,EAAgB,CAClC,CACK,CAAE,MAAK,QAAO,SAAQ,QAAS,EAAa,EAAQ,CAEpD,EAAgB,CAAC,EAAK,EAAO,EAAQ,EAAK,CAC7C,IAAK,GAAO,EAAI,GAAG,EAAE,IAAM,IAAK,CAChC,KAAK,IAAI,CACN,EAAU,IAAkB,UAA4B,IAAA,GAAhB,EAExC,EAAW,EAAkB,CAAE,OAAQ,EAAY,MAAK,SAAQ,OAAM,CAAC,CAEvE,EAAc,IAAU,IAAY,OAAS,EAAO,KAAO,EAAO,MAElE,EAAgB,EAAkB,EAAM,EAAO,KAAM,EAAO,KAAK,CACjE,EAAgB,CAAC,WAAY,WAAW,CAsC9C,MAAO,CACL,gBApCA,GAAG,EAAoB,CACrB,IAAK,WACL,MAAO,EAAY,GAAS,OAAO,CACnC,gBACA,eAAgB,CAAE,SAAU,EAAe,CAC5C,CAAC,CACF,GAAG,EAAoB,CACrB,IAAK,WACL,MAAO,EAAY,GAAU,OAAO,CACpC,gBACA,eAAgB,CAAE,SAAU,EAAe,CAC5C,CAAC,CAGF,GAAG,EAAoB,CACrB,IAAK,YACL,MAAO,GAAS,EAAO,KACvB,gBACD,CAAC,CACF,GAAG,EAAoB,CACrB,IAAK,YACL,MAAO,GAAS,EAAO,KACvB,gBACD,CAAC,CACF,GAAI,EAAU,CAAE,UAAS,CAAG,EAAE,CAY9B,CACA,WACA,YAXmB,IAA2C,CAC9D,YAAa,IAAU,EAAI,MAAQ,GAAG,EAAQ,EAAK,IACnD,YAAa,IAAY,OAAS,MAAQ,GAAG,EAAK,IAClD,WAAY,EACb,EAQC,UACA,YACA,YAAA,CARmB,MAAO,EAAY,IAAM,IAQ5C,CACD,CCrGH,IAAM,GACJ,EACA,KAC4B,CAC5B,WAAY,OACZ,WAAY,OACZ,YAAa,EACb,WAAY,GAAG,EAAK,IACrB,EAMD,SAAgB,EACd,EACe,CACf,GAAM,CAAE,OAAM,YAAW,QAAO,SAAQ,OAAM,UAAS,UAAS,aAC9D,EAEI,EAAgB,EAAa,EAAM,EAAU,CAC7C,EAAgB,CAAC,WAAY,WAAW,CAMxC,EAAmC,CACvC,GAAG,EAAoB,CACrB,IAAK,WACL,MAAO,EAAY,GAAS,cAAc,CAC1C,gBACA,eAAgB,CAAE,WAAY,EAAe,CAC9C,CAAC,CACF,GAAG,EAAoB,CACrB,IAAK,WACL,MAAO,EAAY,GAAU,cAAc,CAC3C,gBACA,eAAgB,CAAE,WAAY,EAAe,CAC9C,CAAC,CACH,CAEK,EAAgB,EAAqB,EAAM,EAAS,EAAQ,CAE5D,EAAc,CAAC,MAAM,CAG3B,OAFI,GAAW,EAAY,KAAK,IAAI,CAE7B,CAAE,WAAU,gBAAe,cAAa,CCnDjD,IAAM,GACJ,EACA,EACA,EACA,KAC4B,CAC5B,WAAY,OACZ,WAAY,OACZ,WAAY,GAAG,EAAK,IACpB,YAAa,EACb,YAAa,EACb,YAAa,EACd,EAMD,SAAgB,EACd,EACkB,CAClB,GAAM,CAAE,OAAM,SAAQ,QAAO,SAAQ,QAAO,UAAS,aAAc,EAE7D,CAAC,EAAW,GAAc,EAAmB,CAAC,EAAO,EAAO,CAAE,CAAC,EAAG,EAAE,CAAE,CAC1E,OACA,iBAAkB,GACnB,CAAC,CAEI,EAAgB,EACpB,EACA,EAAO,KACP,EAAO,KACP,EAAO,KACR,CACK,EAAgB,CAAC,WAAY,WAAW,CAExC,EAAgC,CACpC,GAAG,EAAoB,CACrB,IAAK,WACL,MAAO,EAAY,GAAc,OAAO,CACxC,gBACA,eAAgB,CAAE,SAAU,EAAe,CAC5C,CAAC,CACF,GAAG,EAAoB,CACrB,IAAK,WACL,MAAO,EAAY,GAAa,OAAO,CACvC,gBACA,eAAgB,CAAE,SAAU,EAAe,CAC5C,CAAC,CACF,WAAY,GAAG,EAAK,IACpB,GAAG,EAAoB,CACrB,IAAK,YACL,MAAO,GAAS,EAAO,KACvB,gBACD,CAAC,CACF,GAAG,EAAoB,CACrB,IAAK,YACL,MAAO,GAAS,EAAO,KACvB,gBACD,CAAC,CACF,GAAG,EAAoB,CACrB,IAAK,YACL,MAAO,GAAS,EAAO,KACvB,gBACD,CAAC,CACH,CAEK,EAAc,CAAC,MAAM,CAG3B,OAFI,GAAW,EAAY,KAAK,EAAQ,CAEjC,CAAE,QAAO,YAAW,aAAY,cAAa,CCnEtD,SAAgB,EACd,EACkB,CAClB,GAAM,CAAE,OAAM,QAAO,QAAO,SAAQ,UAAS,gBAAe,aAC1D,EAEI,EAAyC,EAAE,CAYjD,GAVI,IAAU,IAAA,IAAa,IAAU,gBACnC,EAAe,YAAc,EAAY,EAAM,EAE7C,IAAW,IAAA,IAAa,IAAW,gBACrC,EAAe,YAAc,EAAY,EAAO,EAGlD,EAAe,YAAc,GAAG,EAAK,IACrC,EAAe,YAAc,EAEzB,CAAC,EAAe,CAClB,GAAM,CAAE,MAAK,QAAO,SAAQ,QAAS,GACjC,EAAM,GAAK,EAAS,KACtB,EAAe,aAAe,GAAG,EAAI,KAAK,EAAO,MAE/C,EAAO,GAAK,EAAQ,KACtB,EAAe,cAAgB,GAAG,EAAK,KAAK,EAAM,KAItD,IAAM,EAAc,CAAC,MAAM,CAG3B,OAFI,GAAa,GAAe,EAAY,KAAK,IAAI,CAE9C,CAAE,iBAAgB,cAAa"}
|
package/dist/src-QHaSfgVe.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"src-QHaSfgVe.js","names":[],"sources":["../packages/core/src/config/defaults.ts","../packages/core/src/config/merge.ts","../packages/core/src/types.ts","../packages/core/src/utils/parse.ts","../packages/core/src/utils/convert.ts","../packages/core/src/utils/math.ts","../packages/core/src/utils/normalize.ts","../packages/core/src/utils/padding.ts","../packages/core/src/utils/snapping.ts","../packages/core/src/utils/merge.ts","../packages/core/src/validation/guide.ts","../packages/core/src/utils/grid.ts","../packages/core/src/descriptors/guide.ts","../packages/core/src/descriptors/baseline.ts","../packages/core/src/descriptors/box.ts","../packages/core/src/descriptors/spacer.ts","../packages/core/src/descriptors/padder.ts"],"sourcesContent":["import type { ConfigSchema } from './schema'\n\nexport const DEFAULT_CONFIG: ConfigSchema = {\n base: 8,\n baseline: {\n variant: 'line',\n debugging: 'hidden',\n colors: {\n line: 'var(--bk-baseline-color-line-theme)',\n flat: 'var(--bk-baseline-color-flat-theme)',\n },\n },\n guide: {\n variant: 'line',\n debugging: 'hidden',\n colors: {\n line: 'var(--bk-guide-color-line-theme)',\n pattern: 'var(--bk-guide-color-pattern-theme)',\n auto: 'var(--bk-guide-color-auto-theme)',\n fixed: 'var(--bk-guide-color-fixed-theme)',\n },\n },\n spacer: {\n variant: 'line',\n debugging: 'hidden',\n colors: {\n line: 'var(--bk-spacer-color-line-theme)',\n flat: 'var(--bk-spacer-color-flat-theme)',\n text: 'var(--bk-spacer-color-text-theme)',\n },\n },\n box: {\n debugging: 'hidden',\n colors: {\n line: 'var(--bk-box-color-line-theme)',\n flat: 'var(--bk-box-color-flat-theme)',\n text: 'var(--bk-box-color-text-theme)',\n },\n },\n padder: {\n debugging: 'hidden',\n color: 'var(--bk-padder-color-theme)',\n },\n} as const\n","import type { ConfigSchema } from './schema'\n\ntype MergeConfigParams = {\n parentConfig: ConfigSchema\n base?: number\n baseline?: Partial<ConfigSchema['baseline']>\n guide?: Partial<ConfigSchema['guide']>\n spacer?: Partial<ConfigSchema['spacer']>\n box?: Partial<ConfigSchema['box']>\n padder?: Partial<ConfigSchema['padder']>\n}\n\nconst COMPONENT_KEYS = ['baseline', 'guide', 'spacer', 'box', 'padder'] as const\n\nexport const mergeConfig = (params: MergeConfigParams): ConfigSchema => {\n const { parentConfig, base } = params\n const merged = {} as Record<string, unknown>\n\n for (const key of COMPONENT_KEYS) {\n merged[key] = { ...parentConfig[key], ...params[key] }\n }\n\n return { base: base ?? parentConfig.base, ...merged } as ConfigSchema\n}\n\ntype CSSVariablesParams = {\n base: number\n baseline: ConfigSchema['baseline']\n guide: ConfigSchema['guide']\n spacer: ConfigSchema['spacer']\n box: ConfigSchema['box']\n padder: ConfigSchema['padder']\n}\n\nexport const createCSSVariables = (\n params: CSSVariablesParams\n): Record<string, string> => {\n const { base, baseline, guide, spacer, box, padder } = params\n return {\n '--bk-base': `${base}px`,\n '--bkbl-cl': baseline.colors.line,\n '--bkbl-cf': baseline.colors.flat,\n '--bkgd-cl': guide.colors.line,\n '--bkgd-cp': guide.colors.pattern,\n '--bkgd-ca': guide.colors.auto,\n '--bkgd-cf': guide.colors.fixed,\n '--bksp-cl': spacer.colors.line,\n '--bksp-cf': spacer.colors.flat,\n '--bksp-ct': spacer.colors.text,\n '--bkbx-cl': box.colors.line,\n '--bkbx-cf': box.colors.flat,\n '--bkbx-ct': box.colors.text,\n '--bkpd-c': padder.color,\n }\n}\n","/**\n * @baseline-kit/core - Pure type definitions\n * Framework-agnostic types for the baseline-kit system\n */\n\n// Spacing Types\nexport type Spacing =\n | number\n | [number, number]\n | { start?: number; end?: number }\n\nexport type PaddingValue =\n | number\n | [number, number]\n | [number, number, number]\n | [number, number, number, number]\n | { top?: number; bottom?: number; left?: number; right?: number }\n\nexport type Padding = {\n top: number\n right: number\n bottom: number\n left: number\n}\n\nexport type SpacingProps = {\n padding?: PaddingValue\n block?: Spacing\n inline?: Spacing\n}\n\n// Grid Types\nexport type GuideVariant = 'line' | 'pattern' | 'fixed' | 'auto'\nexport type GuideColumnValue = string | number | undefined | 'auto'\nexport type GuideColumnsPattern = readonly GuideColumnValue[]\n\nexport const GRID_ALIGNMENTS = ['start', 'center', 'end'] as const\nexport type GridAlignment = (typeof GRID_ALIGNMENTS)[number]\n\nexport const PADD_VARIANTS = ['line', 'flat'] as const\nexport type PaddedVariant = (typeof PADD_VARIANTS)[number]\n\n// Component Types\nexport type Variant = 'line' | 'flat' | 'pattern'\nexport type BaselineVariant = Exclude<Variant, 'pattern'>\nexport type SnappingMode = 'none' | 'height' | 'clamp'\nexport type DebuggingMode = 'none' | 'hidden' | 'visible'\n\n// Guide Config Types (framework-agnostic)\ntype BaseGuideConfig = {\n gap?: number | string\n base?: number\n}\n\nexport type PatternConfig = BaseGuideConfig & {\n variant: 'pattern'\n columns: GuideColumnsPattern\n columnWidth?: never\n}\n\nexport type FixedConfig = BaseGuideConfig & {\n variant: 'fixed'\n columns: number\n columnWidth?: number | string\n}\n\nexport type AutoConfig = BaseGuideConfig & {\n variant: 'auto'\n columnWidth: number | string\n columns?: never\n}\n\nexport type LineConfig = BaseGuideConfig & {\n variant?: 'line'\n columns?: never\n columnWidth?: never\n}\n\nexport type GuideConfig = PatternConfig | AutoConfig | FixedConfig | LineConfig\n","export function parseUnit(\n value: string\n): { value: number; unit: string } | null {\n const match = value.trim().match(/^([+-]?[\\d.]+)([a-zA-Z%]+)$/)\n if (!match) return null\n const num = parseFloat(match[1])\n const unit = match[2]\n return { value: num, unit }\n}\n\nexport function formatValue(\n value: string | number | undefined,\n defaultValue?: number\n): string {\n if (value === undefined && defaultValue !== undefined)\n return `${defaultValue}px`\n if (\n value === 'auto' ||\n (typeof value === 'string' &&\n /^(auto|100%|0|.*(fr|vh|vw|vmin|vmax|rem))$/.test(value))\n ) {\n return String(value)\n }\n if (typeof value === 'number') return `${value}px`\n return value ?? ''\n}\n","import { parseUnit } from './parse'\n\nexport interface ConversionContext {\n parentSize?: number\n viewportWidth?: number\n viewportHeight?: number\n rootFontSize?: number\n parentFontSize?: number\n}\n\nconst DEFAULT_CONTEXT: Required<ConversionContext> = {\n parentSize: 0,\n viewportWidth: 1920,\n viewportHeight: 1080,\n rootFontSize: 16,\n parentFontSize: 16,\n}\n\nexport const ABSOLUTE_UNIT_CONVERSIONS: Record<string, number> = {\n px: 1,\n in: 96,\n cm: 37.8,\n mm: 3.78,\n pt: 1.33,\n pc: 16,\n}\n\nexport const RELATIVE_UNITS: string[] = [\n 'em',\n 'rem',\n 'vh',\n 'vw',\n 'vmin',\n 'vmax',\n '%',\n]\n\nconst RELATIVE_UNIT_RESOLVERS: Record<\n string,\n (ctx: Required<ConversionContext>) => number\n> = {\n em: (ctx) => ctx.parentFontSize,\n rem: (ctx) => ctx.rootFontSize,\n vh: (ctx) => ctx.viewportHeight / 100,\n vw: (ctx) => ctx.viewportWidth / 100,\n vmin: (ctx) => Math.min(ctx.viewportWidth, ctx.viewportHeight) / 100,\n vmax: (ctx) => Math.max(ctx.viewportWidth, ctx.viewportHeight) / 100,\n '%': (ctx) => ctx.parentSize / 100,\n}\n\nexport function convertValue(\n value: number | string | undefined,\n context?: ConversionContext\n): number | null {\n if (typeof value === 'number') return value\n if (typeof value !== 'string') return null\n\n const parsed = parseUnit(value)\n if (!parsed) return null\n\n const { value: num, unit } = parsed\n\n if (unit in ABSOLUTE_UNIT_CONVERSIONS) {\n return num * ABSOLUTE_UNIT_CONVERSIONS[unit]\n }\n\n if (unit === 'auto') return null\n\n const resolver = RELATIVE_UNIT_RESOLVERS[unit]\n if (resolver) {\n const ctx = { ...DEFAULT_CONTEXT, ...context }\n return num * resolver(ctx)\n }\n\n return null\n}\n","export function clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max)\n}\n\ntype RowCountParams = {\n height?: number\n top: number\n bottom: number\n base: number\n}\n\nexport function calculateRowCount(params: RowCountParams): number {\n const { height, top, bottom, base } = params\n const totalHeight = (height ?? 0) - (top + bottom)\n return Math.max(1, Math.floor(totalHeight / base))\n}\n","import { convertValue, type ConversionContext } from './convert'\nimport { clamp } from './math'\n\nexport interface NormalizationOptions {\n base?: number\n round?: boolean\n clamp?: { min?: number; max?: number }\n suppressWarnings?: boolean\n context?: ConversionContext\n}\n\nexport function normalizeValue(\n value: string | number | undefined,\n options: NormalizationOptions = {}\n): number {\n const {\n base = 8,\n round: doRound = true,\n clamp: clampOptions,\n context,\n } = options\n\n if (value === 'auto') return base\n\n let num: number | null = null\n if (typeof value === 'number') {\n num = value\n } else if (typeof value === 'string') {\n num = convertValue(value, context) ?? base\n }\n if (num === null) num = base\n\n if (base <= 0) return num\n\n const normalized = doRound ? Math.round(num / base) * base : num\n\n return clampOptions !== undefined\n ? clamp(\n normalized,\n clampOptions.min ?? -Infinity,\n clampOptions.max ?? Infinity\n )\n : normalized\n}\n\nexport function normalizeValuePair(\n values:\n | [string | number | undefined, string | number | undefined]\n | undefined,\n defaults: [number, number],\n options?: NormalizationOptions\n): [number, number] {\n if (!values) return defaults\n\n if (values[0] === undefined && values[1] === undefined) {\n return defaults\n }\n\n const first =\n values[0] !== undefined ? normalizeValue(values[0], options) : defaults[0]\n const second =\n values[1] !== undefined ? normalizeValue(values[1], options) : defaults[1]\n return [first, second]\n}\n","import type { Padding, PaddingValue, Spacing, SpacingProps } from '../types'\n\nexport function parsePadding(spacing: SpacingProps): Padding {\n if ('padding' in spacing && spacing.padding != null) {\n return parsePaddingValue(spacing.padding)\n }\n\n const blockEdges =\n 'block' in spacing && spacing.block != null\n ? parseBlock(spacing.block)\n : { top: 0, bottom: 0 }\n const inlineEdges =\n 'inline' in spacing && spacing.inline != null\n ? parseInline(spacing.inline)\n : { left: 0, right: 0 }\n\n return {\n top: blockEdges.top,\n right: inlineEdges.right,\n bottom: blockEdges.bottom,\n left: inlineEdges.left,\n }\n}\n\nfunction parsePaddingValue(padding: PaddingValue): Padding {\n if (typeof padding === 'number') {\n return { top: padding, right: padding, bottom: padding, left: padding }\n }\n\n if (Array.isArray(padding)) {\n const [a = 0, b = 0, c, d] = padding\n return { top: a, right: b, bottom: c ?? a, left: d ?? b }\n }\n\n if (typeof padding === 'object') {\n return {\n top: padding.top ?? 0,\n right: padding.right ?? 0,\n bottom: padding.bottom ?? 0,\n left: padding.left ?? 0,\n }\n }\n\n return { top: 0, right: 0, bottom: 0, left: 0 }\n}\n\nfunction parseBlock(block: Spacing): Pick<Padding, 'top' | 'bottom'> {\n if (typeof block === 'number') {\n return { top: block, bottom: block }\n }\n if (Array.isArray(block)) {\n const [top, bottom] = block\n return { top: top ?? 0, bottom: bottom ?? 0 }\n }\n if (typeof block === 'object') {\n return { top: block.start ?? 0, bottom: block.end ?? 0 }\n }\n return { top: 0, bottom: 0 }\n}\n\nfunction parseInline(inline: Spacing): Pick<Padding, 'left' | 'right'> {\n if (typeof inline === 'number') {\n return { left: inline, right: inline }\n }\n if (Array.isArray(inline)) {\n const [left, right] = inline\n return { left: left ?? 0, right: right ?? 0 }\n }\n if (typeof inline === 'object') {\n return { left: inline.start ?? 0, right: inline.end ?? 0 }\n }\n return { left: 0, right: 0 }\n}\n","import type { SnappingMode, Padding, PaddingValue } from '../types'\nimport { parsePadding } from './padding'\n\nexport function calculateSnappedSpacing(\n height: number,\n base: number,\n initial: PaddingValue,\n snapping: SnappingMode\n): Padding {\n const pad: Padding = parsePadding({ padding: initial })\n\n if (snapping === 'none') {\n return pad\n }\n\n if (snapping === 'height') {\n const remainder = height % base\n if (remainder !== 0) {\n pad.bottom += base - remainder\n }\n }\n\n if (snapping === 'clamp') {\n pad.top = pad.top % base\n const remainder = height % base\n if (remainder !== 0) {\n pad.bottom += base - remainder\n }\n pad.bottom = pad.bottom % base\n }\n\n return pad\n}\n","import type { DebuggingMode } from '../types'\n\n/**\n * Combines class names, filtering out falsy values.\n * Lightweight alternative to clsx/classnames.\n */\nexport const cx = (\n ...classes: Array<string | boolean | undefined | null>\n): string => classes.filter(Boolean).join(' ').trim()\n\n/**\n * Resolves component debug/visibility state from prop and config.\n * Pure function — framework-agnostic.\n */\nexport interface DebugState {\n isShown: boolean\n isHidden: boolean\n isNone: boolean\n debugging: DebuggingMode | undefined\n}\n\nexport function resolveDebugState(\n debuggingProp?: DebuggingMode,\n debuggingConfig?: DebuggingMode\n): DebugState {\n const effective = debuggingProp ?? debuggingConfig\n return {\n isShown: effective === 'visible',\n isHidden: effective === 'hidden',\n isNone: effective === 'none',\n debugging: effective,\n }\n}\n\nexport type StyleOverrideParams = {\n key: string\n value: string\n defaultStyles: Record<string, string>\n skipDimensions?: {\n fitContent?: string[]\n auto?: string[]\n fullSize?: string[]\n }\n}\n\nexport function createStyleOverride(\n params: StyleOverrideParams | string,\n value?: string,\n defaultStyles?: Record<string, string>\n): Record<string, string> {\n const key = typeof params === 'string' ? params : params.key\n const val = typeof params === 'string' ? value! : params.value\n const defaults =\n typeof params === 'string' ? defaultStyles! : params.defaultStyles\n const skipDimensions =\n typeof params === 'object' ? params.skipDimensions : undefined\n\n if (skipDimensions) {\n if (skipDimensions.fitContent?.includes(key) && val === 'fit-content') {\n return {}\n }\n if (skipDimensions.auto?.includes(key) && val === 'auto') {\n return {}\n }\n if (\n skipDimensions.fullSize?.includes(key) &&\n (val === '100%' || val === '100vh' || val === '100vw')\n ) {\n return {}\n }\n }\n\n return val !== defaults[key] ? { [key]: val } : {}\n}\n","import type { GuideColumnsPattern, GuideColumnValue } from '../types'\n\nconst UNIT_PATTERN =\n /^\\d*\\.?\\d+(?:fr|px|%|em|rem|vh|vw|vmin|vmax|pt|pc|in|cm|mm)$/\n\nexport const isValidGuideColumnValue = (\n value: unknown\n): value is GuideColumnValue => {\n if (typeof value === 'number') return Number.isFinite(value) && value >= 0\n if (typeof value !== 'string') return false\n return value === 'auto' || value === '100%' || UNIT_PATTERN.test(value)\n}\n\nexport const isValidGuidePattern = (\n pattern: unknown\n): pattern is GuideColumnsPattern =>\n Array.isArray(pattern) &&\n pattern.length > 0 &&\n pattern.every(isValidGuideColumnValue)\n","import type { GuideConfig, GuideColumnsPattern } from '../types'\nimport { isValidGuidePattern } from '../validation/guide'\nimport { normalizeValue } from './normalize'\nimport { formatValue } from './parse'\nimport { convertValue, type ConversionContext } from './convert'\n\nexport interface GuideResult {\n template: string\n columnsCount: number\n calculatedGap: number\n isValid: boolean\n}\n\nconst INVALID_RESULT: GuideResult = {\n template: 'none',\n columnsCount: 0,\n calculatedGap: 0,\n isValid: false,\n}\n\n/**\n * Pure calculation of grid template from container width and guide config.\n * Framework-agnostic — can be used outside React.\n *\n * Sizing note: the `line` variant still reports the number of pixel tracks as\n * metadata, but React renders line guides with a CSS gradient so dense grids do\n * not allocate one DOM node per line.\n */\nexport function calculateGuideTemplate(\n width: number,\n config: GuideConfig,\n context?: ConversionContext\n): GuideResult {\n const variant = config.variant ?? 'line'\n const base = config.base ?? 8\n const gap = normalizeValue(config.gap ?? 0, { base, context })\n\n if (!width) return INVALID_RESULT\n\n switch (variant) {\n case 'line': {\n const finalGap = gap === 0 ? 0 : gap - 1\n const actualGapWithLine = finalGap + 1\n\n const columns =\n finalGap === 0\n ? Math.max(1, Math.floor(width) + 1)\n : Math.max(1, Math.floor((width + 1) / actualGapWithLine) + 1)\n\n return {\n template: `repeat(${columns}, 1px)`,\n columnsCount: columns,\n calculatedGap: gap > 0 ? gap - 1 : gap,\n isValid: true,\n }\n }\n\n case 'pattern': {\n if (!config.columns || !Array.isArray(config.columns)) {\n return INVALID_RESULT\n }\n\n if (!isValidGuidePattern(config.columns)) {\n return INVALID_RESULT\n }\n\n const columnsArr = (config.columns as GuideColumnsPattern).map((col) =>\n typeof col === 'number' ? `${col}px` : col\n )\n\n if (columnsArr.some((c) => c === '0' || c === '0px')) {\n return INVALID_RESULT\n }\n\n return {\n template: columnsArr.join(' '),\n columnsCount: columnsArr.length,\n calculatedGap: gap,\n isValid: true,\n }\n }\n\n case 'fixed': {\n const colCount = typeof config.columns === 'number' ? config.columns : 0\n if (colCount < 1) return INVALID_RESULT\n\n const colWidth = config.columnWidth\n ? formatValue(config.columnWidth)\n : '1fr'\n\n return {\n template: `repeat(${colCount}, ${colWidth})`,\n columnsCount: colCount,\n calculatedGap: gap,\n isValid: true,\n }\n }\n\n case 'auto': {\n const colWidth = config.columnWidth ?? 'auto'\n if (colWidth === 'auto') {\n return {\n template: 'repeat(auto-fill, minmax(0, 1fr))',\n columnsCount: 1,\n calculatedGap: gap,\n isValid: true,\n }\n }\n\n const colWidthStr =\n typeof colWidth === 'number' ? `${colWidth}px` : colWidth.toString()\n const pxVal = convertValue(colWidthStr, context) ?? 0\n const columns =\n pxVal > 0 ? Math.max(1, Math.floor((width + gap) / (pxVal + gap))) : 1\n\n return {\n template: `repeat(auto-fill, ${colWidthStr})`,\n columnsCount: columns,\n calculatedGap: gap,\n isValid: true,\n }\n }\n\n default: {\n const columns = Math.max(1, Math.floor(width / (gap + 1)) + 1)\n return {\n template: `repeat(${columns}, 1px)`,\n columnsCount: columns,\n calculatedGap: gap,\n isValid: true,\n }\n }\n }\n}\n\nexport const createGridSpanStyles = (\n span?: number,\n colSpan?: number,\n rowSpan?: number\n): Record<string, string> => {\n const gridStyles: Record<string, string> = {}\n\n if (span !== undefined) {\n gridStyles.gridColumn = `span ${span}`\n gridStyles.gridRow = `span ${span}`\n } else {\n if (colSpan !== undefined) {\n gridStyles.gridColumn = `span ${colSpan}`\n }\n if (rowSpan !== undefined) {\n gridStyles.gridRow = `span ${rowSpan}`\n }\n }\n\n return gridStyles\n}\n","import type { GuideVariant, GuideConfig } from '../types'\nimport { formatValue, createStyleOverride } from '../utils'\n\nexport interface GuideDescriptorParams {\n base: number\n colors: Record<GuideVariant, string>\n variant: GuideVariant\n align: string\n width?: number | string\n height?: number | string\n columnWidth?: number | string\n maxWidth?: number | string\n color?: string\n /** Pre-computed guide template result (from useGuide or calculateGuideTemplate) */\n template: string\n columnsCount: number\n calculatedGap: number\n isVisible: boolean\n}\n\nexport interface GuideDescriptor {\n containerStyle: Record<string, string>\n columnColor: string\n columnsCount: number\n calculatedGap: number\n template: string\n isVisible: boolean\n isLineVariant: boolean\n classTokens: string[]\n}\n\nexport interface GuideConfigParams {\n variant: GuideVariant\n base: number\n gap: number\n columns?: number | readonly (string | number | undefined | 'auto')[]\n columnWidth?: number | string\n}\n\n/**\n * Creates a GuideConfig from component props.\n * Pure function — no React or DOM dependency.\n */\nexport function createGuideConfig({\n variant,\n base,\n gap,\n columns,\n columnWidth,\n}: GuideConfigParams): GuideConfig {\n switch (variant) {\n case 'line':\n return { variant: 'line', gap, base }\n case 'pattern':\n if (columns && Array.isArray(columns)) {\n return {\n variant: 'pattern',\n columns: columns as readonly (string | number)[],\n gap,\n base,\n }\n }\n break\n case 'fixed':\n if (columns !== undefined) {\n const parsed =\n typeof columns === 'number' ? columns : parseInt(String(columns), 10)\n return {\n variant: 'fixed',\n columns: !isNaN(parsed) ? parsed : 12,\n columnWidth: columnWidth || '60px',\n gap,\n base,\n }\n }\n break\n }\n return { variant: 'auto', columnWidth: columnWidth || '1fr', gap, base }\n}\n\nconst GUIDE_DEFAULTS = (\n base: number,\n lineColor: string\n): Record<string, string> => ({\n '--bkgd-w': '100%',\n '--bkgd-h': '100%',\n '--bkgd-mw': 'none',\n '--bkgd-cw': '60px',\n '--bkgd-gw': '24px',\n '--bkgd-n': '12',\n '--bkgd-b': `${base}px`,\n '--bkgd-cl': lineColor,\n '--bkgd-g': '0',\n})\n\n/**\n * Computes all styles and data needed to render a Guide component.\n * Pure function — framework-agnostic.\n */\nexport function createGuideDescriptor(\n params: GuideDescriptorParams\n): GuideDescriptor {\n const {\n base,\n colors,\n variant,\n align,\n width,\n height,\n columnWidth,\n maxWidth,\n color,\n template,\n columnsCount,\n calculatedGap,\n isVisible,\n } = params\n\n const defaultStyles = GUIDE_DEFAULTS(base, colors.line)\n const fullDimensions = ['--bkgd-w', '--bkgd-h']\n\n const widthValue = formatValue(width ?? '100%')\n const heightValue = formatValue(height ?? '100%')\n\n const containerStyle: Record<string, string> = {\n ...createStyleOverride({\n key: '--bkgd-w',\n value: widthValue,\n defaultStyles,\n skipDimensions: { fullSize: fullDimensions },\n }),\n ...createStyleOverride({\n key: '--bkgd-h',\n value: heightValue,\n defaultStyles,\n skipDimensions: { fullSize: fullDimensions },\n }),\n ...createStyleOverride({\n key: '--bkgd-mw',\n value: formatValue(maxWidth || 'none'),\n defaultStyles,\n }),\n ...createStyleOverride({\n key: '--bkgd-cw',\n value: formatValue(columnWidth || '60px'),\n defaultStyles,\n }),\n ...createStyleOverride({\n key: '--bkgd-n',\n value: `${columnsCount}`,\n defaultStyles,\n }),\n ...createStyleOverride({ key: '--bkgd-b', value: '0', defaultStyles }),\n ...createStyleOverride({\n key: '--bkgd-cl',\n value: color ?? colors.line,\n defaultStyles,\n }),\n ...createStyleOverride({\n key: '--bkgd-g',\n value: `${calculatedGap}px`,\n defaultStyles,\n }),\n ...createStyleOverride({\n key: '--bkgd-j',\n value: align || 'center',\n defaultStyles,\n }),\n // CSS module resolves grid-template-columns from --bkgd-t, so the inline\n // gridTemplateColumns property would be redundant.\n ...(template && template !== 'none' ? { '--bkgd-t': template } : {}),\n }\n\n const columnColor =\n (variant && variant in colors\n ? colors[variant as keyof typeof colors]\n : undefined) ?? colors.line\n\n const isLineVariant = variant === 'line'\n const classTokens = ['gde', isVisible ? 'v' : 'h']\n if (isLineVariant) classTokens.push('line')\n\n if (isLineVariant) {\n containerStyle['--bkgd-line-color'] = color ?? colors.line\n containerStyle['--bkgd-line-period'] = `${calculatedGap + 1}px`\n }\n\n return {\n containerStyle,\n columnColor,\n columnsCount,\n calculatedGap,\n template,\n isVisible,\n isLineVariant,\n classTokens,\n }\n}\n","import type { BaselineVariant } from '../types'\nimport {\n formatValue,\n createStyleOverride,\n normalizeValuePair,\n parsePadding,\n calculateRowCount,\n} from '../utils'\n\nexport interface BaselineDescriptorParams {\n base: number\n colors: Record<BaselineVariant, string>\n variant: BaselineVariant\n width?: number | string\n height?: number | string\n color?: string\n containerWidth: number\n containerHeight: number\n spacing: Record<string, unknown>\n isVisible: boolean\n}\n\nexport interface BaselineDescriptor {\n containerStyle: Record<string, string>\n rowCount: number\n getRowStyle: (index: number) => Record<string, string>\n padding: string | undefined\n isVisible: boolean\n classTokens: string[]\n}\n\nconst BASELINE_DEFAULTS = (\n base: number,\n lineColor: string,\n flatColor: string\n): Record<string, string> => ({\n '--bkbl-w': '100%',\n '--bkbl-h': '100%',\n '--bkbl-b': `${base}px`,\n '--bkbl-cl': lineColor,\n '--bkbl-cf': flatColor,\n})\n\n/**\n * Computes all styles and data needed to render a Baseline component.\n * Pure function — framework-agnostic.\n */\nexport function createBaselineDescriptor(\n params: BaselineDescriptorParams\n): BaselineDescriptor {\n const {\n base,\n colors,\n variant,\n width,\n height,\n color,\n containerWidth,\n containerHeight,\n spacing,\n isVisible,\n } = params\n\n const [, normHeight] = normalizeValuePair(\n [width, height],\n [containerWidth, containerHeight]\n )\n const { top, right, bottom, left } = parsePadding(spacing)\n\n const paddingValues = [top, right, bottom, left]\n .map((v) => (v ? `${v}px` : '0'))\n .join(' ')\n const padding = paddingValues !== '0 0 0 0' ? paddingValues : undefined\n\n const rowCount = calculateRowCount({ height: normHeight, top, bottom, base })\n\n const chosenColor = color || (variant === 'line' ? colors.line : colors.flat)\n\n const defaultStyles = BASELINE_DEFAULTS(base, colors.line, colors.flat)\n const dimensionVars = ['--bkbl-w', '--bkbl-h']\n\n const containerStyle: Record<string, string> = {\n ...createStyleOverride({\n key: '--bkbl-w',\n value: formatValue(width || '100%'),\n defaultStyles,\n skipDimensions: { fullSize: dimensionVars },\n }),\n ...createStyleOverride({\n key: '--bkbl-h',\n value: formatValue(height || '100%'),\n defaultStyles,\n skipDimensions: { fullSize: dimensionVars },\n }),\n // --bkbl-b omitted: value `${base}px` always equals the BASELINE_DEFAULTS\n // entry, so the override would never emit. CSS layer carries the default.\n ...createStyleOverride({\n key: '--bkbl-cl',\n value: color || colors.line,\n defaultStyles,\n }),\n ...createStyleOverride({\n key: '--bkbl-cf',\n value: color || colors.flat,\n defaultStyles,\n }),\n ...(padding ? { padding } : {}),\n }\n\n const getRowStyle = (index: number): Record<string, string> => ({\n '--bkbl-rt': index === 0 ? '0px' : `${index * base}px`,\n '--bkbl-rh': variant === 'line' ? '1px' : `${base}px`,\n '--bkbl-c': chosenColor,\n })\n\n const classTokens = ['bas', isVisible ? 'v' : 'h']\n\n return {\n containerStyle,\n rowCount,\n getRowStyle,\n padding,\n isVisible,\n classTokens,\n }\n}\n","import {\n formatValue,\n createStyleOverride,\n createGridSpanStyles,\n} from '../utils'\n\nexport interface BoxDescriptorParams {\n base: number\n lineColor: string\n width?: number | string\n height?: number | string\n span?: number\n colSpan?: number\n rowSpan?: number\n isVisible: boolean\n}\n\nexport interface BoxDescriptor {\n boxStyle: Record<string, string>\n gridSpanStyle: Record<string, string>\n classTokens: string[]\n}\n\nconst BOX_DEFAULTS = (\n base: number,\n lineColor: string\n): Record<string, string> => ({\n '--bkbx-w': 'auto',\n '--bkbx-h': 'auto',\n '--bkbx-cl': lineColor,\n '--bkbx-b': `${base}px`,\n})\n\n/**\n * Computes styles needed to render a Box component.\n * Pure function — framework-agnostic.\n */\nexport function createBoxDescriptor(\n params: BoxDescriptorParams\n): BoxDescriptor {\n const { base, lineColor, width, height, span, colSpan, rowSpan, isVisible } =\n params\n\n const defaultStyles = BOX_DEFAULTS(base, lineColor)\n const dimensionVars = ['--bkbx-w', '--bkbx-h']\n\n // --bkbx-b and --bkbx-cl intentionally omitted: their runtime value\n // always equals the default (both are derived from the same base/lineColor\n // inputs that seed BOX_DEFAULTS), so inline overrides would never emit.\n // Styling happens at the CSS layer via the module's declared defaults.\n const boxStyle: Record<string, string> = {\n ...createStyleOverride({\n key: '--bkbx-w',\n value: formatValue(width || 'fit-content'),\n defaultStyles,\n skipDimensions: { fitContent: dimensionVars },\n }),\n ...createStyleOverride({\n key: '--bkbx-h',\n value: formatValue(height || 'fit-content'),\n defaultStyles,\n skipDimensions: { fitContent: dimensionVars },\n }),\n }\n\n const gridSpanStyle = createGridSpanStyles(span, colSpan, rowSpan)\n\n const classTokens = ['box']\n if (isVisible) classTokens.push('v')\n\n return { boxStyle, gridSpanStyle, classTokens }\n}\n","import { formatValue, createStyleOverride, normalizeValuePair } from '../utils'\n\nexport interface SpacerDescriptorParams {\n base: number\n colors: { line: string; flat: string; text: string }\n width?: number | string\n height?: number | string\n color?: string\n variant: string\n isVisible: boolean\n}\n\nexport interface SpacerDescriptor {\n style: Record<string, string>\n normWidth: number\n normHeight: number\n classTokens: string[]\n}\n\nconst SPACER_DEFAULTS = (\n base: number,\n textColor: string,\n flatColor: string,\n lineColor: string\n): Record<string, string> => ({\n '--bksp-w': '100%',\n '--bksp-h': '100%',\n '--bksp-b': `${base}px`,\n '--bksp-ct': textColor,\n '--bksp-cf': flatColor,\n '--bksp-cl': lineColor,\n})\n\n/**\n * Computes styles needed to render a Spacer component.\n * Pure function — framework-agnostic.\n */\nexport function createSpacerDescriptor(\n params: SpacerDescriptorParams\n): SpacerDescriptor {\n const { base, colors, width, height, color, variant, isVisible } = params\n\n const [normWidth, normHeight] = normalizeValuePair([width, height], [0, 0], {\n base,\n suppressWarnings: true,\n })\n\n const defaultStyles = SPACER_DEFAULTS(\n base,\n colors.text,\n colors.flat,\n colors.line\n )\n const dimensionVars = ['--bksp-w', '--bksp-h']\n\n const style: Record<string, string> = {\n ...createStyleOverride({\n key: '--bksp-h',\n value: formatValue(normHeight || '100%'),\n defaultStyles,\n skipDimensions: { fullSize: dimensionVars },\n }),\n ...createStyleOverride({\n key: '--bksp-w',\n value: formatValue(normWidth || '100%'),\n defaultStyles,\n skipDimensions: { fullSize: dimensionVars },\n }),\n '--bksp-b': `${base}px`,\n ...createStyleOverride({\n key: '--bksp-ct',\n value: color ?? colors.text,\n defaultStyles,\n }),\n ...createStyleOverride({\n key: '--bksp-cl',\n value: color ?? colors.line,\n defaultStyles,\n }),\n ...createStyleOverride({\n key: '--bksp-cf',\n value: color ?? colors.flat,\n defaultStyles,\n }),\n }\n\n const classTokens = ['spr']\n if (isVisible) classTokens.push(variant)\n\n return { style, normWidth, normHeight, classTokens }\n}\n","import { formatValue } from '../utils'\nimport type { Padding } from '../types'\n\nexport interface PadderDescriptorParams {\n base: number\n color: string\n width?: number | string\n height?: number | string\n padding: Padding\n enableSpacers: boolean\n isVisible: boolean\n}\n\nexport interface PadderDescriptor {\n containerStyle: Record<string, string>\n classTokens: string[]\n}\n\n/**\n * Computes styles needed to render a Padder component.\n * Pure function — framework-agnostic.\n */\nexport function createPadderDescriptor(\n params: PadderDescriptorParams\n): PadderDescriptor {\n const { base, color, width, height, padding, enableSpacers, isVisible } =\n params\n\n const containerStyle: Record<string, string> = {}\n\n if (width !== undefined && width !== 'fit-content') {\n containerStyle['--bkpd-w'] = formatValue(width)\n }\n if (height !== undefined && height !== 'fit-content') {\n containerStyle['--bkpd-h'] = formatValue(height)\n }\n\n containerStyle['--bkpd-b'] = `${base}px`\n containerStyle['--bkpd-c'] = color\n\n if (!enableSpacers) {\n const { top, right, bottom, left } = padding\n if (top > 0 || bottom > 0) {\n containerStyle.paddingBlock = `${top}px ${bottom}px`\n }\n if (left > 0 || right > 0) {\n containerStyle.paddingInline = `${left}px ${right}px`\n }\n }\n\n const classTokens = ['pad']\n if (isVisible && enableSpacers) classTokens.push('v')\n\n return { containerStyle, classTokens }\n}\n"],"mappings":"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"}
|