@apollion-dsi/tokens 5.8.1 → 5.10.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/lib/build.cjs +8 -8
- package/lib/build.esm.js +9 -9
- package/lib/builders/colors.d.ts +2 -0
- package/lib/cli.mjs +10 -10
- package/package.json +1 -1
- package/src/builders/colors.ts +2 -1
- package/src/builders/ladder.ts +25 -4
- package/src/token-meta.ts +4 -1
package/lib/build.cjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
"use strict";var U=Object.defineProperty;var Bn=Object.getOwnPropertyDescriptor;var Hn=Object.getOwnPropertyNames;var Wn=Object.prototype.hasOwnProperty;var s=(e,n)=>U(e,"name",{value:n,configurable:!0});var zn=(e,n)=>{for(var o in n)U(e,o,{get:n[o],enumerable:!0})},Jn=(e,n,o,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of Hn(n))!Wn.call(e,t)&&t!==o&&U(e,t,{get:()=>n[t],enumerable:!(r=Bn(n,t))||r.enumerable});return e};var qn=e=>Jn(U({},"__esModule",{value:!0}),e);var Oo={};zn(Oo,{build:()=>Mo,check:()=>Eo});module.exports=qn(Oo);var x=require("node:fs/promises"),_n=require("node:os"),L=require("node:path");var oe=require("culori");var H=require("@apollion-dsi/core/themes/border"),Ee=require("@apollion-dsi/core/themes/colors"),ee=require("@apollion-dsi/core/themes/depth"),D=require("@apollion-dsi/core/themes/font"),ge=require("@apollion-dsi/core/themes/spacing"),P=require("culori");var Ce=require("@apollion-dsi/core/themes/breakpoints");function Ve(e=Ce.defaultInputBreakpoints){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}s(Ve,"breakpointEntries");var X=require("@apollion-dsi/core/themes/layout");function Le(e=X.defaultInputContainerSizes){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}s(Le,"containerSizeEntries");function Ae(e=X.defaultInputLayout){return[["page-max-width",`${e.pageMaxWidth}px`]]}s(Ae,"layoutEntries");var Me=require("@apollion-dsi/core/themes/dimension");function Y({multiplier:e=.25,alias:n},o){let r=o!==void 0?Me.DIMENSION_MULTIPLIERS[o]:e;return(...t)=>t.map(i=>{let a=typeof i=="string"?n[i]:i;return`${r*a}rem`}).join(" ")}s(Y,"createSpacing");var fe={"bg.primary":{description:"Primary action surface \u2014 the brand\u2019s dominant call-to-action background."},"bg.secondary":{description:"Secondary action surface \u2014 supporting actions paired with the primary."},"bg.danger":{description:"Destructive / error surface \u2014 irreversible or failing actions."},"bg.success":{description:"Positive confirmation surface \u2014 completed or healthy states."},"bg.info":{description:"Informational surface \u2014 neutral, non-blocking notices.",deprecated:"Use bg.information once the foundation role is renamed (tracked for S6)."},"bg.canvas":{description:"Page ground \u2014 the theme canvas (never pure black in dark)."},"bg.paper":{description:"Component ground (cards, inputs, tables) \u2014 lighter than the canvas in both modes."},"bg.overlay":{description:"Top of the elevation ladder \u2014 modal / dialog panels."},"text.primary":{description:"Primary neutral ink \u2014 AA + APCA Lc \u2265 75 over bg.paper and bg.canvas."},"text.muted":{description:"Muted neutral ink \u2014 AA + APCA Lc \u2265 45 over bg.paper."},"edge.border":{description:"Default control outline \u2014 primary ink at 20 % alpha, legible on any ground."},"edge.hairline":{description:"Dividers and card outlines \u2014 primary ink at 10 % alpha."},"text.on-primary":{description:"Text/icon colour with guaranteed contrast over bg.primary."},"text.on-danger":{description:"Text/icon colour with guaranteed contrast over bg.danger."},"space.medium":{description:"Base spacing step (1rem at normal density) \u2014 the layout rhythm unit."},"space.large":{description:"Comfortable spacing step \u2014 section padding and card gutters."},"spacing.md":{description:"Medium foundation spacing alias \u2014 references the space.medium primitive."},"spacing.lg":{description:"Large foundation spacing alias \u2014 references the space.large primitive."},"border.radius.md":{description:"Default card corner radius."},"border.width.thin":{description:"Hairline border \u2014 dividers and default input outlines."},"border.width.regular":{description:"Standard emphasis border \u2014 focused/active controls."}};function me(e){let n=Object.keys(fe).filter(o=>!e.has(o));if(n.length>0)throw new Error(`token-meta: ${n.length} stale TOKEN_META key(s) resolve to no IR node: ${n.join(", ")}. Update src/token-meta.ts to match the current IR paths.`)}s(me,"assertTokenMetaResolves");var Kn=(0,P.converter)("oklch");function b(e){return typeof e.type=="string"&&"value"in e}s(b,"isToken");function v(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}s(v,"kebab");function Ge(e){return e.split(".").map(v).join(".")}s(Ge,"kebabPath");function C(e){return e.kind==="ref"?e.resolved.raw:e.raw}s(C,"rawValue");function Z(e,n){return Number(e.toFixed(n))||0}s(Z,"round");function he(e){let n=Kn((0,P.parse)(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[Z(n.l,4),Z(n.c,4),Z(n.h??0,2)],r=(0,P.formatHex)(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:Z(n.alpha,4),hex:r}:{kind:"color",raw:e,components:o,hex:r}}s(he,"toColorValue");var Oe=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function $(e){let n=Oe.exec(e.trim());if(n)return{kind:"dimension",raw:e,value:Number(n[1]),unit:n[2]};let o=Number.parseFloat(e);return{kind:"dimension",raw:e,value:Number.isFinite(o)?o:0,unit:"rem"}}s($,"toDimensionValue");function S(e){return{type:"color",value:he(e)}}s(S,"colorToken");function N(e){let n={};for(let[o,r]of Object.entries(e))n[o]=S(r);return n}s(N,"recordColorGroup");function Ne(e){let n=(0,Ee.createReadableTextLayer)(e),o={};for(let[r,t]of Object.entries(n.palettes))o[r]=S(t);return o.neutral=N(n.neutral),o}s(Ne,"buildReadableTextGroup");var Un=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function je(e){let n={};for(let o of Un){let r=e[o];n[o]={base:S(r.base),dark:S(r.dark),action:S(r.action),active:S(r.active),light:S(r.light),onLight:S(r.onLight)}}return n.grayscale=N(e.grayscale),n.neutral=N(e.neutral),n.surface=N(e.surface),n.ink=N(e.ink),n.edge=N(e.edge),n.wash=N(e.wash),n.baseDark=S(e.baseDark??"#000000"),n.baseLight=S(e.baseLight??"#ffffff"),n.deepDark=S(e.deepDark??"#000000"),n.deepLight=S(e.deepLight??"#ffffff"),n}s(je,"buildColorPrimitives");function Fe(e){let n=Y(ge.defaultInputSpacing,e),o={};for(let r of Object.keys(ge.defaultInputSpacing.alias))o[r]={type:"dimension",value:$(n(r))};return o}s(Fe,"buildSpacePrimitives");function Pe(){let e={};for(let[n,o]of Object.entries(H.defaultInputBorder.borderWidth))e[n]={type:"dimension",value:$(o)};return e}s(Pe,"buildBorderWidthPrimitives");function Xn(e,n){return{color:je(e),space:Fe(n),borderWidth:Pe()}}s(Xn,"buildPrimitives");var _e={primary:"color.primary.base",secondary:"color.secondary.base",tertiary:"color.tertiary.base",success:"color.success.base",danger:"color.danger.base",warning:"color.warning.base",info:"color.information.base",canvas:"color.surface.canvas",sunken:"color.surface.sunken",paper:"color.surface.paper",raised:"color.surface.raised",overlay:"color.surface.overlay"},Be={onPrimary:"color.baseLight",onSecondary:"color.baseLight",onTertiary:"color.baseDark",onSuccess:"color.baseLight",onDanger:"color.baseLight",onWarning:"color.baseDark",onInfo:"color.baseLight",primary:"color.ink.primary",secondary:"color.ink.secondary",muted:"color.ink.muted",disabled:"color.ink.disabled"},He={hairline:"color.edge.hairline",border:"color.edge.border",strong:"color.edge.strong"};function Yn(e,n){let o=e;for(let r of n.split(".").slice(1))if(o&&typeof o=="object"&&r in o)o=o[r];else return;return typeof o=="string"?o:void 0}s(Yn,"lookupPrimitive");function F(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=o[t],c=a?Yn(n,a):void 0;r[t]=a&&c===i?{type:"color",value:{kind:"ref",path:a,resolved:he(i)}}:S(i)}return r}s(F,"colorRefGroup");var We={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},Zn={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function Qn(e,n){let o=n.split("."),r=o[0]==="border-width"?"borderWidth":o[0],t=e[r];for(let i of o.slice(1))if(t&&!b(t)&&i in t)t=t[i];else return;return t&&b(t)&&t.value.kind==="dimension"?t.value.raw:void 0}s(Qn,"lookupDimensionPrimitive");function ye(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=o[t],c=a?Qn(n,a):void 0;r[t]=a&&c===i?{type:"dimension",value:{kind:"ref",path:a,resolved:$(i)}}:{type:"dimension",value:$(i)}}return r}s(ye,"dimensionRefGroup");function ze(e){let n={},o={};for(let[i,a]of Object.entries(H.defaultInputBorder.borderRadius))Oe.test(a)?n[i]={type:"dimension",value:$(a)}:o[i]=a;let r=ye(H.defaultInputBorder.borderWidth,e,Zn),t={};for(let[i,a]of Object.entries(H.defaultInputBorder.borderStyle))t[i]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:r,style:t},extensions:o}}s(ze,"buildBorder");function Je(e){let n=(0,D.createFont)(D.defaultInputFont,e),o={};for(let[c,l]of Object.entries(D.defaultInputFont.fontFamily)){let m=l.replace(/;\s*$/,"").trim();o[c]={type:"fontFamily",value:{kind:"fontFamily",raw:m,family:m}}}let r={};for(let[c,l]of Object.entries(n.fontSize))r[c]={type:"dimension",value:$(l)};let t={};for(let[c,l]of Object.entries(D.defaultInputFont.fontWeight))t[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${l}`,weight:l}};let i={};for(let[c,l]of Object.entries(D.defaultInputFont.lineHeight))i[c]={type:"number",value:{kind:"number",raw:`${l}`,number:l}};let a={letterSpacing:D.defaultInputFont.letterSpacing,textTransform:D.defaultInputFont.textTransform,fontStyle:D.defaultInputFont.fontStyle};return{group:{family:o,size:r,weight:t,lineHeight:i},extensions:a}}s(Je,"buildFont");var eo=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function no(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let r=n.match(eo),t=r?r[0]:"#000000",a=(r?n.slice(0,r.index).trim():n).split(/\s+/).filter(Boolean),c=s(l=>$(a[l]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:he(t),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}s(no,"parseShadow");function qe(e){let n=(0,ee.createDeth)(e),o={};for(let r of Object.keys(ee.levelValues))o[r]={type:"shadow",value:no(n(r))};return o}s(qe,"buildShadow");function Q(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=n?`${n}.${v(t)}`:v(t);if(b(i)){o.add(a);let c=fe[a];r[t]=c&&(c.description!==void 0||c.deprecated!==void 0)?{...i,...c.description!==void 0?{description:c.description}:{},...c.deprecated!==void 0?{deprecated:c.deprecated}:{}}:i}else r[t]=Q(i,a,o)}return r}s(Q,"decorateGroup");function oo(e){let n=new Set,o=Q(e.primitives,"",n),r=Q(e.groups,"",n);return me(n),{...e,primitives:o,groups:r}}s(oo,"decorateMeta");function ne(e,n){return Q(e,"",n)}s(ne,"decorateSlice");function Ke(e,n,o){for(let[r,t]of Object.entries(e)){let i=n?`${n}.${v(r)}`:v(r);b(t)?o.add(i):Ke(t,i,o)}}s(Ke,"collectPaths");function Ue(e){let n=new Set;for(let o of e)Ke(o.groups,"",n);me(n)}s(Ue,"assertSlicesMetaComplete");function Xe(){let e={};for(let[n,o]of Ve())e[n]={type:"dimension",value:$(o)};return e}s(Xe,"buildBreakpoints");function Ye(){let e={};for(let[n,o]of Le())e[n]={type:"dimension",value:$(o)};return e}s(Ye,"buildContainerSizes");function Ze(){let e={};for(let[n,o]of Ae())e[n]={type:"dimension",value:$(o)};return e}s(Ze,"buildLayoutConstants");var Qe={unit:"px",interval:"half-open [value, next) \u2014 min-width sets, ascending",cssVarsUsage:"informational only \u2014 var() is invalid inside a @media prelude"};function en(){let e=Pe(),o=ze({borderWidth:e}),r={"com.apollion.breakpoint":Qe};Object.keys(o.extensions).length>0&&(r["com.apollion.border"]={radius:o.extensions});let t=new Set;return{groups:ne({"border-width":e,border:o.group,breakpoint:Xe(),"container-size":Ye(),layout:Ze()},t),extensions:r}}s(en,"buildBaseIR");function nn(e){let n=Je(e),o=new Set;return{groups:ne({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}s(nn,"buildFontIR");function on(e,n){let o=je(n),r=new Set;return{groups:ne({color:o,bg:F(e.bg,n,_e),text:F(e.text,n,Be),edge:F(e.edge,n,He),tx:Ne(n),shadow:qe(n)},r),extensions:{}}}s(on,"buildColorIR");function rn(e,n){let o=Fe(n),r={space:o},t=new Set;return{groups:ne({space:o,spacing:ye(e.spacing,r,We)},t),extensions:{}}}s(rn,"buildSpacingIR");function ro(e,n,o){let r={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},t=Xn(n,o.dimension),i=ze(t),a=Je(o.dimension),c={"com.apollion.variant":r,"com.apollion.font":a.extensions,"com.apollion.breakpoint":Qe};Object.keys(i.extensions).length>0&&(c["com.apollion.border"]={radius:i.extensions});let l={description:`Apollion DS tokens \u2014 DTCG 2025.10. Variant: ${r.brand}/${r.mode}/${r.surface}/${r.dimension}.`,meta:r,primitives:t,groups:{bg:F(e.bg,n,_e),text:F(e.text,n,Be),edge:F(e.edge,n,He),tx:Ne(n),spacing:ye(e.spacing,t,We),border:i.group,breakpoint:Xe(),"container-size":Ye(),layout:Ze(),font:a.group,shadow:qe(n)},extensions:c};return oo(l)}s(ro,"buildIR");var _=ro;var to=(0,oe.converter)("rgb"),tn="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function be(e){if(e.value.kind==="color")return e.value;if(e.value.kind==="ref"&&e.value.resolved.kind==="color")return e.value.resolved}s(be,"colorPayload");function Re(e){return e.alpha===void 0}s(Re,"isOpaqueColor");function sn(e){let n=to((0,oe.parse)(e.hex));if(!n)return"0 0 0";let o=s(r=>Math.min(255,Math.max(0,Math.round(r*255))),"channel");return`${o(n.r)} ${o(n.g)} ${o(n.b)}`}s(sn,"rgbTriplet");function W(e,n=[]){let o=new Map;for(let[r,t]of Object.entries(e)){let i=[...n,v(r)];if(b(t))o.set(i.join("-"),t);else for(let[a,c]of W(t,i))o.set(a,c)}return o}s(W,"flatTokens");function R(e,...n){let o=e[n[0]];for(let r of n.slice(1)){if(!o||b(o))return{};o=o[r]}return o&&!b(o)?o:{}}s(R,"groupAt");function an(e){let n=[];for(let o of["bg","text","edge","tx"])for(let[r,t]of W(R(e.groups,o),[o])){let i=be(t);i&&n.push({key:r,cssVar:`--apollion-${r}`,opaque:Re(i)})}return n}s(an,"colorEntries");function E(e,n){return[...W(e)].map(([o])=>[o,`var(--apollion-${[...n,o].join("-")})`])}s(E,"varEntries");function V(e,n,o){if(o.length!==0){e.push(` ${n}: {`);for(let[r,t]of o)e.push(` ${JSON.stringify(r)}: ${JSON.stringify(t)},`);e.push(" },")}}s(V,"pushScale");function cn(e){let n=[tn,"// Tailwind preset over the Apollion foundation tokens \u2014 requires dist/css/ vars in scope.","","const preset = {"," theme: {"," extend: {"],o=an(e);n.push(" colors: {");for(let{key:r,cssVar:t,opaque:i}of o)i?n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`rgb(var(${t}-rgb) / <alpha-value>)`)},`):(n.push(` // ${r} carries its own alpha \u2014 excluded from the <alpha-value> modifier form.`),n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`var(${t})`)},`));return n.push(" },"),V(n,"screens",[...W(R(e.groups,"breakpoint"))].filter(([r])=>r!=="xs").map(([r,t])=>[r,C(t.value)])),V(n,"spacing",E(R(e.groups,"spacing"),["spacing"])),V(n,"borderRadius",E(R(e.groups,"border","radius"),["border","radius"])),V(n,"borderWidth",E(R(e.groups,"border","width"),["border","width"])),V(n,"fontFamily",E(R(e.groups,"font","family"),["font","family"])),V(n,"fontSize",E(R(e.groups,"font","size"),["font","size"])),V(n,"fontWeight",E(R(e.groups,"font","weight"),["font","weight"])),V(n,"lineHeight",E(R(e.groups,"font","lineHeight"),["font","line-height"])),V(n,"boxShadow",E(R(e.groups,"shadow"),["shadow"])),n.push(" },"," },","};","","export default preset;",""),n.join(`
|
|
1
|
+
"use strict";var U=Object.defineProperty;var Bn=Object.getOwnPropertyDescriptor;var Hn=Object.getOwnPropertyNames;var Wn=Object.prototype.hasOwnProperty;var s=(e,n)=>U(e,"name",{value:n,configurable:!0});var zn=(e,n)=>{for(var o in n)U(e,o,{get:n[o],enumerable:!0})},Jn=(e,n,o,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of Hn(n))!Wn.call(e,t)&&t!==o&&U(e,t,{get:()=>n[t],enumerable:!(r=Bn(n,t))||r.enumerable});return e};var Kn=e=>Jn(U({},"__esModule",{value:!0}),e);var No={};zn(No,{build:()=>Eo,check:()=>Mo});module.exports=Kn(No);var x=require("node:fs/promises"),_n=require("node:os"),A=require("node:path");var re=require("culori");var H=require("@apollion-dsi/core/themes/border"),Ee=require("@apollion-dsi/core/themes/colors"),ne=require("@apollion-dsi/core/themes/depth"),D=require("@apollion-dsi/core/themes/font"),he=require("@apollion-dsi/core/themes/spacing"),P=require("culori");var Ce=require("@apollion-dsi/core/themes/breakpoints");function Ve(e=Ce.defaultInputBreakpoints){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}s(Ve,"breakpointEntries");var Y=require("@apollion-dsi/core/themes/layout");function Ae(e=Y.defaultInputContainerSizes){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}s(Ae,"containerSizeEntries");function Le(e=Y.defaultInputLayout){return[["page-max-width",`${e.pageMaxWidth}px`]]}s(Le,"layoutEntries");var Oe=require("@apollion-dsi/core/themes/dimension");function Z({multiplier:e=.25,alias:n},o){let r=o!==void 0?Oe.DIMENSION_MULTIPLIERS[o]:e;return(...t)=>t.map(i=>{let a=typeof i=="string"?n[i]:i;return`${r*a}rem`}).join(" ")}s(Z,"createSpacing");var me={"bg.primary":{description:"Primary action surface \u2014 the brand\u2019s dominant call-to-action background."},"bg.secondary":{description:"Secondary action surface \u2014 supporting actions paired with the primary."},"bg.danger":{description:"Destructive / error surface \u2014 irreversible or failing actions."},"bg.success":{description:"Positive confirmation surface \u2014 completed or healthy states."},"bg.info":{description:"Informational surface \u2014 neutral, non-blocking notices.",deprecated:"Use bg.information once the foundation role is renamed (tracked for S6)."},"bg.canvas":{description:"Page ground \u2014 the theme canvas (never pure black in dark)."},"bg.paper":{description:"Component ground (cards, inputs, tables) \u2014 lighter than the canvas in both modes; the dark step is widened for near-black grounds so cards stay separated on LCD/SDR panels (ADR-026)."},"bg.overlay":{description:"Top of the elevation ladder \u2014 modal / dialog panels."},"text.primary":{description:"Primary neutral ink \u2014 AA + APCA Lc \u2265 75 over bg.paper and bg.canvas."},"text.muted":{description:"Muted neutral ink \u2014 AA + APCA Lc \u2265 45 over bg.paper."},"edge.border":{description:"Default control outline \u2014 primary ink at 20 % alpha, legible on any ground."},"edge.hairline":{description:"Dividers and card outlines \u2014 primary ink at 10 % alpha."},"text.on-primary":{description:"Text/icon colour with guaranteed contrast over bg.primary."},"text.on-danger":{description:"Text/icon colour with guaranteed contrast over bg.danger."},"space.medium":{description:"Base spacing step (1rem at normal density) \u2014 the layout rhythm unit."},"space.large":{description:"Comfortable spacing step \u2014 section padding and card gutters."},"spacing.md":{description:"Medium foundation spacing alias \u2014 references the space.medium primitive."},"spacing.lg":{description:"Large foundation spacing alias \u2014 references the space.large primitive."},"border.radius.md":{description:"Default card corner radius."},"border.width.thin":{description:"Hairline border \u2014 dividers and default input outlines."},"border.width.regular":{description:"Standard emphasis border \u2014 focused/active controls."}};function ge(e){let n=Object.keys(me).filter(o=>!e.has(o));if(n.length>0)throw new Error(`token-meta: ${n.length} stale TOKEN_META key(s) resolve to no IR node: ${n.join(", ")}. Update src/token-meta.ts to match the current IR paths.`)}s(ge,"assertTokenMetaResolves");var qn=(0,P.converter)("oklch");function b(e){return typeof e.type=="string"&&"value"in e}s(b,"isToken");function v(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}s(v,"kebab");function Me(e){return e.split(".").map(v).join(".")}s(Me,"kebabPath");function C(e){return e.kind==="ref"?e.resolved.raw:e.raw}s(C,"rawValue");function Q(e,n){return Number(e.toFixed(n))||0}s(Q,"round");function ye(e){let n=qn((0,P.parse)(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[Q(n.l,4),Q(n.c,4),Q(n.h??0,2)],r=(0,P.formatHex)(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:Q(n.alpha,4),hex:r}:{kind:"color",raw:e,components:o,hex:r}}s(ye,"toColorValue");var Ge=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function $(e){let n=Ge.exec(e.trim());if(n)return{kind:"dimension",raw:e,value:Number(n[1]),unit:n[2]};let o=Number.parseFloat(e);return{kind:"dimension",raw:e,value:Number.isFinite(o)?o:0,unit:"rem"}}s($,"toDimensionValue");function S(e){return{type:"color",value:ye(e)}}s(S,"colorToken");function N(e){let n={};for(let[o,r]of Object.entries(e))n[o]=S(r);return n}s(N,"recordColorGroup");function Ne(e){let n=(0,Ee.createReadableTextLayer)(e),o={};for(let[r,t]of Object.entries(n.palettes))o[r]=S(t);return o.neutral=N(n.neutral),o}s(Ne,"buildReadableTextGroup");var Xn=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function je(e){let n={};for(let o of Xn){let r=e[o];n[o]={base:S(r.base),dark:S(r.dark),action:S(r.action),active:S(r.active),light:S(r.light),onLight:S(r.onLight)}}return n.grayscale=N(e.grayscale),n.neutral=N(e.neutral),n.surface=N(e.surface),n.ink=N(e.ink),n.edge=N(e.edge),n.wash=N(e.wash),n.baseDark=S(e.baseDark??"#000000"),n.baseLight=S(e.baseLight??"#ffffff"),n.deepDark=S(e.deepDark??"#000000"),n.deepLight=S(e.deepLight??"#ffffff"),n}s(je,"buildColorPrimitives");function Fe(e){let n=Z(he.defaultInputSpacing,e),o={};for(let r of Object.keys(he.defaultInputSpacing.alias))o[r]={type:"dimension",value:$(n(r))};return o}s(Fe,"buildSpacePrimitives");function Pe(){let e={};for(let[n,o]of Object.entries(H.defaultInputBorder.borderWidth))e[n]={type:"dimension",value:$(o)};return e}s(Pe,"buildBorderWidthPrimitives");function Un(e,n){return{color:je(e),space:Fe(n),borderWidth:Pe()}}s(Un,"buildPrimitives");var _e={primary:"color.primary.base",secondary:"color.secondary.base",tertiary:"color.tertiary.base",success:"color.success.base",danger:"color.danger.base",warning:"color.warning.base",info:"color.information.base",canvas:"color.surface.canvas",sunken:"color.surface.sunken",paper:"color.surface.paper",raised:"color.surface.raised",overlay:"color.surface.overlay"},Be={onPrimary:"color.baseLight",onSecondary:"color.baseLight",onTertiary:"color.baseDark",onSuccess:"color.baseLight",onDanger:"color.baseLight",onWarning:"color.baseDark",onInfo:"color.baseLight",primary:"color.ink.primary",secondary:"color.ink.secondary",muted:"color.ink.muted",disabled:"color.ink.disabled"},He={hairline:"color.edge.hairline",border:"color.edge.border",strong:"color.edge.strong"};function Yn(e,n){let o=e;for(let r of n.split(".").slice(1))if(o&&typeof o=="object"&&r in o)o=o[r];else return;return typeof o=="string"?o:void 0}s(Yn,"lookupPrimitive");function F(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=o[t],c=a?Yn(n,a):void 0;r[t]=a&&c===i?{type:"color",value:{kind:"ref",path:a,resolved:ye(i)}}:S(i)}return r}s(F,"colorRefGroup");var We={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},Zn={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function Qn(e,n){let o=n.split("."),r=o[0]==="border-width"?"borderWidth":o[0],t=e[r];for(let i of o.slice(1))if(t&&!b(t)&&i in t)t=t[i];else return;return t&&b(t)&&t.value.kind==="dimension"?t.value.raw:void 0}s(Qn,"lookupDimensionPrimitive");function be(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=o[t],c=a?Qn(n,a):void 0;r[t]=a&&c===i?{type:"dimension",value:{kind:"ref",path:a,resolved:$(i)}}:{type:"dimension",value:$(i)}}return r}s(be,"dimensionRefGroup");function ze(e){let n={},o={};for(let[i,a]of Object.entries(H.defaultInputBorder.borderRadius))Ge.test(a)?n[i]={type:"dimension",value:$(a)}:o[i]=a;let r=be(H.defaultInputBorder.borderWidth,e,Zn),t={};for(let[i,a]of Object.entries(H.defaultInputBorder.borderStyle))t[i]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:r,style:t},extensions:o}}s(ze,"buildBorder");function Je(e){let n=(0,D.createFont)(D.defaultInputFont,e),o={};for(let[c,l]of Object.entries(D.defaultInputFont.fontFamily)){let g=l.replace(/;\s*$/,"").trim();o[c]={type:"fontFamily",value:{kind:"fontFamily",raw:g,family:g}}}let r={};for(let[c,l]of Object.entries(n.fontSize))r[c]={type:"dimension",value:$(l)};let t={};for(let[c,l]of Object.entries(D.defaultInputFont.fontWeight))t[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${l}`,weight:l}};let i={};for(let[c,l]of Object.entries(D.defaultInputFont.lineHeight))i[c]={type:"number",value:{kind:"number",raw:`${l}`,number:l}};let a={letterSpacing:D.defaultInputFont.letterSpacing,textTransform:D.defaultInputFont.textTransform,fontStyle:D.defaultInputFont.fontStyle};return{group:{family:o,size:r,weight:t,lineHeight:i},extensions:a}}s(Je,"buildFont");var eo=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function no(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let r=n.match(eo),t=r?r[0]:"#000000",a=(r?n.slice(0,r.index).trim():n).split(/\s+/).filter(Boolean),c=s(l=>$(a[l]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:ye(t),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}s(no,"parseShadow");function Ke(e){let n=(0,ne.createDeth)(e),o={};for(let r of Object.keys(ne.levelValues))o[r]={type:"shadow",value:no(n(r))};return o}s(Ke,"buildShadow");function ee(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=n?`${n}.${v(t)}`:v(t);if(b(i)){o.add(a);let c=me[a];r[t]=c&&(c.description!==void 0||c.deprecated!==void 0)?{...i,...c.description!==void 0?{description:c.description}:{},...c.deprecated!==void 0?{deprecated:c.deprecated}:{}}:i}else r[t]=ee(i,a,o)}return r}s(ee,"decorateGroup");function oo(e){let n=new Set,o=ee(e.primitives,"",n),r=ee(e.groups,"",n);return ge(n),{...e,primitives:o,groups:r}}s(oo,"decorateMeta");function oe(e,n){return ee(e,"",n)}s(oe,"decorateSlice");function qe(e,n,o){for(let[r,t]of Object.entries(e)){let i=n?`${n}.${v(r)}`:v(r);b(t)?o.add(i):qe(t,i,o)}}s(qe,"collectPaths");function Xe(e){let n=new Set;for(let o of e)qe(o.groups,"",n);ge(n)}s(Xe,"assertSlicesMetaComplete");function Ue(){let e={};for(let[n,o]of Ve())e[n]={type:"dimension",value:$(o)};return e}s(Ue,"buildBreakpoints");function Ye(){let e={};for(let[n,o]of Ae())e[n]={type:"dimension",value:$(o)};return e}s(Ye,"buildContainerSizes");function Ze(){let e={};for(let[n,o]of Le())e[n]={type:"dimension",value:$(o)};return e}s(Ze,"buildLayoutConstants");var Qe={unit:"px",interval:"half-open [value, next) \u2014 min-width sets, ascending",cssVarsUsage:"informational only \u2014 var() is invalid inside a @media prelude"};function en(){let e=Pe(),o=ze({borderWidth:e}),r={"com.apollion.breakpoint":Qe};Object.keys(o.extensions).length>0&&(r["com.apollion.border"]={radius:o.extensions});let t=new Set;return{groups:oe({"border-width":e,border:o.group,breakpoint:Ue(),"container-size":Ye(),layout:Ze()},t),extensions:r}}s(en,"buildBaseIR");function nn(e){let n=Je(e),o=new Set;return{groups:oe({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}s(nn,"buildFontIR");function on(e,n){let o=je(n),r=new Set;return{groups:oe({color:o,bg:F(e.bg,n,_e),text:F(e.text,n,Be),edge:F(e.edge,n,He),tx:Ne(n),shadow:Ke(n)},r),extensions:{}}}s(on,"buildColorIR");function rn(e,n){let o=Fe(n),r={space:o},t=new Set;return{groups:oe({space:o,spacing:be(e.spacing,r,We)},t),extensions:{}}}s(rn,"buildSpacingIR");function ro(e,n,o){let r={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},t=Un(n,o.dimension),i=ze(t),a=Je(o.dimension),c={"com.apollion.variant":r,"com.apollion.font":a.extensions,"com.apollion.breakpoint":Qe};Object.keys(i.extensions).length>0&&(c["com.apollion.border"]={radius:i.extensions});let l={description:`Apollion DS tokens \u2014 DTCG 2025.10. Variant: ${r.brand}/${r.mode}/${r.surface}/${r.dimension}.`,meta:r,primitives:t,groups:{bg:F(e.bg,n,_e),text:F(e.text,n,Be),edge:F(e.edge,n,He),tx:Ne(n),spacing:be(e.spacing,t,We),border:i.group,breakpoint:Ue(),"container-size":Ye(),layout:Ze(),font:a.group,shadow:Ke(n)},extensions:c};return oo(l)}s(ro,"buildIR");var _=ro;var to=(0,re.converter)("rgb"),tn="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function Re(e){if(e.value.kind==="color")return e.value;if(e.value.kind==="ref"&&e.value.resolved.kind==="color")return e.value.resolved}s(Re,"colorPayload");function ke(e){return e.alpha===void 0}s(ke,"isOpaqueColor");function sn(e){let n=to((0,re.parse)(e.hex));if(!n)return"0 0 0";let o=s(r=>Math.min(255,Math.max(0,Math.round(r*255))),"channel");return`${o(n.r)} ${o(n.g)} ${o(n.b)}`}s(sn,"rgbTriplet");function W(e,n=[]){let o=new Map;for(let[r,t]of Object.entries(e)){let i=[...n,v(r)];if(b(t))o.set(i.join("-"),t);else for(let[a,c]of W(t,i))o.set(a,c)}return o}s(W,"flatTokens");function R(e,...n){let o=e[n[0]];for(let r of n.slice(1)){if(!o||b(o))return{};o=o[r]}return o&&!b(o)?o:{}}s(R,"groupAt");function an(e){let n=[];for(let o of["bg","text","edge","tx"])for(let[r,t]of W(R(e.groups,o),[o])){let i=Re(t);i&&n.push({key:r,cssVar:`--apollion-${r}`,opaque:ke(i)})}return n}s(an,"colorEntries");function E(e,n){return[...W(e)].map(([o])=>[o,`var(--apollion-${[...n,o].join("-")})`])}s(E,"varEntries");function V(e,n,o){if(o.length!==0){e.push(` ${n}: {`);for(let[r,t]of o)e.push(` ${JSON.stringify(r)}: ${JSON.stringify(t)},`);e.push(" },")}}s(V,"pushScale");function cn(e){let n=[tn,"// Tailwind preset over the Apollion foundation tokens \u2014 requires dist/css/ vars in scope.","","const preset = {"," theme: {"," extend: {"],o=an(e);n.push(" colors: {");for(let{key:r,cssVar:t,opaque:i}of o)i?n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`rgb(var(${t}-rgb) / <alpha-value>)`)},`):(n.push(` // ${r} carries its own alpha \u2014 excluded from the <alpha-value> modifier form.`),n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`var(${t})`)},`));return n.push(" },"),V(n,"screens",[...W(R(e.groups,"breakpoint"))].filter(([r])=>r!=="xs").map(([r,t])=>[r,C(t.value)])),V(n,"spacing",E(R(e.groups,"spacing"),["spacing"])),V(n,"borderRadius",E(R(e.groups,"border","radius"),["border","radius"])),V(n,"borderWidth",E(R(e.groups,"border","width"),["border","width"])),V(n,"fontFamily",E(R(e.groups,"font","family"),["font","family"])),V(n,"fontSize",E(R(e.groups,"font","size"),["font","size"])),V(n,"fontWeight",E(R(e.groups,"font","weight"),["font","weight"])),V(n,"lineHeight",E(R(e.groups,"font","lineHeight"),["font","line-height"])),V(n,"boxShadow",E(R(e.groups,"shadow"),["shadow"])),n.push(" },"," },","};","","export default preset;",""),n.join(`
|
|
2
2
|
`)}s(cn,"renderTailwindPreset");function ln(e){let n=s(t=>[...W(t).keys()],"keys"),o=s(t=>`[${t.map(i=>JSON.stringify(i)).join(", ")}]`,"list");return[tn,"// tailwind-merge extension for the generated preset \u2014 pass to extendTailwindMerge().","","export const twMergeExtension = {"," extend: {"," theme: {",` colors: ${o(an(e).map(t=>t.key))},`,` spacing: ${o(n(R(e.groups,"spacing")))},`,` borderRadius: ${o(n(R(e.groups,"border","radius")))},`,` borderWidth: ${o(n(R(e.groups,"border","width")))},`," },"," classGroups: {",` 'font-family': [{ font: ${o(n(R(e.groups,"font","family")))} }],`,` 'font-size': [{ text: ${o(n(R(e.groups,"font","size")))} }],`,` 'font-weight': [{ font: ${o(n(R(e.groups,"font","weight")))} }],`,` leading: [{ leading: ${o(n(R(e.groups,"font","lineHeight")))} }],`,` shadow: [{ shadow: ${o(n(R(e.groups,"shadow")))} }],`," },"," },","};",""].join(`
|
|
3
|
-
`)}s(ln,"renderTwMergeExtension");var dn="/* Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. */";function
|
|
4
|
-
`)}s(un,"renderCss");function pn(e,n,o={}){let{attribute:r="data-apollion-mode",rgbCompanions:t}=o,{brand:i,surface:a,dimension:c}=e.meta,l=[dn,""],
|
|
5
|
-
`)}s(pn,"renderCssModes");var io="<!-- Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. -->";function
|
|
3
|
+
`)}s(ln,"renderTwMergeExtension");var dn="/* Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. */";function te(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,v(r)];b(t)?o.push(` --apollion-${i.join("-")}: ${C(t.value)};`):te(t,i,o)}}s(te,"emitVars");function ie(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,v(r)];if(!b(t)){ie(t,i,o);continue}let a=Re(t);a&&ke(a)&&o.push(` --apollion-${i.join("-")}-rgb: ${sn(a)};`)}}s(ie,"emitRgbVars");function Ie(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,v(r)];b(t)?t.type==="color"&&o.push(` @property --apollion-${i.join("-")} { syntax: '<color>'; inherits: true; initial-value: ${C(t.value)}; }`):Ie(t,i,o)}}s(Ie,"emitProperties");function un(e,n={}){let{brand:o,mode:r,surface:t,dimension:i}=e.meta,a=[dn,""];return a.push(`/* Variant: brand=${o} mode=${r} surface=${t} dimension=${i} */`,"",":root {"),te(e.groups,[],a),n.rgbCompanions&&(a.push(""," /* -rgb channel triplets \u2014 Tailwind <alpha-value> companions (opaque colour tokens only). */"),ie(e.groups,[],a)),a.push("}",""),a.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),Ie(e.groups,[],a),a.push("}",""),a.join(`
|
|
4
|
+
`)}s(un,"renderCss");function pn(e,n,o={}){let{attribute:r="data-apollion-mode",rgbCompanions:t}=o,{brand:i,surface:a,dimension:c}=e.meta,l=[dn,""],g=s((w,d,u)=>{l.push(`${w} {`,` color-scheme: ${u};`),te(d.groups,[],l),t&&ie(d.groups,[],l),l.push("}","")},"block");l.push(`/* Variant: brand=${i} surface=${a} dimension=${c} modes=light+dark (attribute ${r}) */`,""),g(`:root, html[${r}="light"]`,e,"light"),g(`html[${r}="dark"]`,n,"dark"),l.push("@media (prefers-color-scheme: dark) {"),l.push(` html:not([${r}]) {`," color-scheme: dark;");let k=[];te(n.groups,[],k),t&&ie(n.groups,[],k);for(let w of k)l.push(` ${w}`);return l.push(" }","}",""),l.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),Ie(e.groups,[],l),l.push("}",""),l.join(`
|
|
5
|
+
`)}s(pn,"renderCssModes");var io="<!-- Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. -->";function xe(e,n,o){for(let[r,t]of Object.entries(e)){let i=n?`${n}.${r}`:r;b(t)?o.push([i,C(t.value)]):xe(t,i,o)}}s(xe,"flatten");function so(e){return typeof e=="number"?String(e):`'${String(e).replace(/'/g,"''")}'`}s(so,"yamlEscape");function ao(e){let{mode:n,surface:o,dimension:r}=e.meta;return`${n}.${o}.${r}`}s(ao,"variantKey");function fn(e,n){if(n.length===0)throw new Error(`renderDesignMd: no variants for brand "${e}"`);let o=["---",`brand: '${e}'`,"generator: apollion-tokens","variants:"];for(let t of n){let i=[];xe(t.groups,"",i),o.push(` ${ao(t)}:`);for(let[a,c]of i)o.push(` ${a}: ${so(c)}`)}o.push("---");let r=["",io,"",`# Design.md \u2014 ${e}`,"","Resolved design-token values for this brand, one section per variant.","Consumption rules (which token to reach for, layer boundaries) live in the","package `llms.txt`; this file carries the values those rules reference.","Regenerate with `apollion-tokens build` \u2014 never edit.",""];for(let t of n){let{mode:i,surface:a,dimension:c}=t.meta;r.push(`## Variant \`${i} \xB7 ${a} \xB7 ${c}\``,"");let l=[];xe(t.groups,"",l);let g=new Map;for(let[k,w]of l){let d=k.split(".")[0]??k,u=g.get(d)??[];u.push([k,w]),g.set(d,u)}for(let[k,w]of g){r.push(`### ${k}`,"","| Token | Value |","| --- | --- |");for(let[d,u]of w)r.push(`| \`${d}\` | \`${u}\` |`);r.push("")}}return`${o.join(`
|
|
6
6
|
`)}
|
|
7
7
|
${r.join(`
|
|
8
|
-
`)}`}s(fn,"renderDesignMd");function mn(e){return e.alpha!==void 0?{colorSpace:"oklch",components:[...e.components],alpha:e.alpha,hex:e.hex}:{colorSpace:"oklch",components:[...e.components],hex:e.hex}}s(mn,"colorValue");function z(e){return{value:e.value,unit:e.unit}}s(z,"dimensionValue");function co(e){let n=e.shadow,o={color:mn(n.color),offsetX:z(n.offsetX),offsetY:z(n.offsetY),blur:z(n.blur),spread:z(n.spread)};return n.inset&&(o.inset=!0),o}s(co,"shadowValue");function lo(e){switch(e.kind){case"ref":return`{${
|
|
9
|
-
`}s(
|
|
8
|
+
`)}`}s(fn,"renderDesignMd");function mn(e){return e.alpha!==void 0?{colorSpace:"oklch",components:[...e.components],alpha:e.alpha,hex:e.hex}:{colorSpace:"oklch",components:[...e.components],hex:e.hex}}s(mn,"colorValue");function z(e){return{value:e.value,unit:e.unit}}s(z,"dimensionValue");function co(e){let n=e.shadow,o={color:mn(n.color),offsetX:z(n.offsetX),offsetY:z(n.offsetY),blur:z(n.blur),spread:z(n.spread)};return n.inset&&(o.inset=!0),o}s(co,"shadowValue");function lo(e){switch(e.kind){case"ref":return`{${Me(e.path)}}`;case"color":return mn(e);case"dimension":return z(e);case"fontFamily":return e.family;case"fontWeight":return e.weight;case"number":return e.number;case"strokeStyle":return e.style;case"shadow":return co(e)}}s(lo,"projectValue");function uo(e){let n={$value:lo(e.value),$type:e.type};return e.description!==void 0&&(n.$description=e.description),e.deprecated!==void 0&&(n.$deprecated=e.deprecated),n}s(uo,"projectToken");function Se(e){let n={};for(let[o,r]of Object.entries(e))n[v(o)]=b(r)?uo(r):Se(r);return n}s(Se,"projectGroup");function se(e,n){let o={$description:n,...Se(e.groups)};return Object.keys(e.extensions).length>0&&(o.$extensions=e.extensions),`${JSON.stringify(o,null,2)}
|
|
9
|
+
`}s(se,"renderSet");function gn(e){return se(e,"Apollion DS \u2014 base set (axis-invariant: border). DTCG 2025.10.")}s(gn,"renderBaseSet");function hn(e,n,o,r){return se(e,`Apollion DS \u2014 colour set. brand=${n} mode=${o} surface=${r}. DTCG 2025.10.`)}s(hn,"renderColorSet");function yn(e,n){return se(e,`Apollion DS \u2014 spacing set. dimension=${n}. DTCG 2025.10.`)}s(yn,"renderSpacingSet");function bn(e,n){return se(e,`Apollion DS \u2014 font set. dimension=${n}. DTCG 2025.10.`)}s(bn,"renderFontSet");function Rn(e,n){let{modifiers:o}=n,r=[{name:"brand",values:[...o.brand],default:o.brand[0]},{name:"mode",values:[...o.mode],default:o.mode[0]},{name:"surface",values:[...o.surface],default:o.surface[0]},{name:"dimension",values:[...o.dimension],default:o.dimension[0]}],i={name:"apollion-tokens",description:"Apollion DS token resolver \u2014 DTCG 2025.10. Compose the base set with the colour set for the chosen brand/mode/surface and the spacing + font sets for the chosen dimension. NOTE: mode is a topology placeholder in this release (dark resolves identically to light until S6).",sets:[{name:n.base.name,source:n.base.file},...n.spacing.map(a=>({name:a.name,source:a.file})),...n.font.map(a=>({name:a.name,source:a.file})),...n.color.map(a=>({name:a.name,source:a.file}))],modifiers:r,$extensions:{"com.apollion.resolver":{composition:{always:[n.base.name],byModifier:{color:"${brand}.color.${mode}.${surface}",spacing:"spacing.${dimension}",font:"font.${dimension}"}},modeIsPlaceholder:!0}}};return`${JSON.stringify(i,null,2)}
|
|
10
10
|
`}s(Rn,"renderResolver");var po="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function fo(e,n,o){let r=[];if(e.description!==void 0&&r.push(e.description),e.deprecated===!0?r.push("@deprecated"):typeof e.deprecated=="string"&&r.push(`@deprecated ${e.deprecated}`),r.length!==0){o.push(`${n}/**`);for(let t of r)o.push(`${n} * ${t.replace(/\*\//g,"*\\/")}`);o.push(`${n} */`)}}s(fo,"emitDoc");function kn(e,n,o){let r=" ".repeat(n);for(let[t,i]of Object.entries(e))b(i)?(fo(i,r,o),o.push(`${r}${JSON.stringify(t)}: ${JSON.stringify(C(i.value))},`)):(o.push(`${r}${t}: {`),kn(i,n+1,o),o.push(`${r}},`))}s(kn,"emitGroup");function In(e){let{brand:n,mode:o,surface:r,dimension:t}=e.meta,i=[po,`// Variant: brand=${n} mode=${o} surface=${r} dimension=${t}`,"","export const tokens = {"];return kn(e.groups,1,i),i.push("} as const;","","export type Tokens = typeof tokens;",""),i.join(`
|
|
11
|
-
`)}s(In,"renderTs");var mo=["light","dark"],go=["positive","negative"],ho=["compact","normal","spacious"];function
|
|
12
|
-
`}s(Tn,"serializeManifest");var yo="json/sets",Dn="json/resolver.json";function ce(e){return`${yo}/${e}.json`}s(ce,"setFile");function bo(e,n,o){return`${e}.color.${n}.${o}`}s(bo,"colorSetName");function Ro(e){return`spacing.${e}`}s(Ro,"spacingSetName");function ko(e){return`font.${e}`}s(ko,"fontSetName");function le(e,n){e.includes(n)||e.push(n)}s(le,"pushUnique");function $n(e){let n=se(e),o=[],r=[],t=[],i=[],a=new Set,c=[],l=new Set,m=[],k=new Set,w=[];for(let d of n){le(o,d.brand),le(r,d.mode),le(t,d.surface),le(i,d.dimension);let u=bo(d.brand,d.mode,d.surface);a.has(u)||(a.add(u),c.push({kind:"color",name:u,file:ce(u),brand:d.brand,mode:d.mode,surface:d.surface}));let y=Ro(d.dimension);l.has(y)||(l.add(y),m.push({kind:"spacing",name:y,file:ce(y),dimension:d.dimension}));let f=ko(d.dimension);k.has(f)||(k.add(f),w.push({kind:"font",name:f,file:ce(f),dimension:d.dimension}))}return{base:{kind:"base",name:"base",file:ce("base")},spacing:m,font:w,color:c,modifiers:{brand:o,mode:r,surface:t,dimension:i}}}s($n,"planSets");var Nn=require("@apollion-dsi/core/themes/colors"),$e=require("@apollion-dsi/core/themes/foundation"),jn=require("@apollion-dsi/core/themes/semantic"),Fn=require("@apollion-dsi/core/themes/spacing"),Pn=require("@apollion-dsi/core/themes/surface");var h=require("culori");var q=(0,h.converter)("oklch"),Io=(0,h.converter)("rgb");function p(e,n,o){let r=(0,h.parse)(e),t=(0,h.parse)(n);if(!r||!t)return e;let i=(0,h.interpolate)([r,t],"oklch");return(0,h.formatHex)(i(o))??e}s(p,"mixOklch");function xo(e){return e?typeof e=="string"?e:e.base:"#000"}s(xo,"coerceToHex");var de=1.3,So=.05,Cn=.04,G=s((e,n)=>{let o=(0,h.parse)(e),r=(0,h.parse)(n);return!o||!r?1:(0,h.wcagContrast)(o,r)},"contrastRatio"),we=s(e=>{let n=q((0,h.parse)(e));return n?n.l??0:null},"oklchLightness"),vo=4.5;function J(e,n,o=vo){let r=(0,h.parse)(n),t=q((0,h.parse)(e));if(!r||!t)return e;let i=G("#fff",n)>=G("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=(0,h.formatHex)(t)??e,l=(0,h.parse)(c);if(l&&(0,h.wcagContrast)(l,r)>=o)return c;let m=Math.min(1,Math.max(0,(t.l??0)+i));if(m===(t.l??0))break;t={...t,l:m}}return(0,h.formatHex)(t)??e}s(J,"readableColor");var Vn=s((e,n)=>{if(G(e,n)>=de)return!0;let o=we(e),r=we(n);return o!==null&&r!==null&&Math.abs(o-r)>=So},"isPerceptibleState"),Te=s(e=>e?G("#fff",e)>G("#000",e):!1,"isDarkSurface");function Ln(e,n,o){let r=q((0,h.parse)(e));if(!r)return null;let t={...r,l:o??r.l??0},i=n?Cn:-Cn;for(let a=0;a<25;a+=1){let c=Math.min(1,Math.max(0,(t.l??0)+i));if(c===(t.l??0))break;t={...t,l:c};let l=(0,h.formatHex)(t);if(l&&G(e,l)>=de)return l}return(0,h.formatHex)(t)??null}s(Ln,"derivePerceptibleState");function An(e,n,o){let r=Ln(e,n,o);if(r&&G(e,r)>=de)return r;let t=Ln(e,!n);return t&&G(e,t)>=de?t:r??t}s(An,"perceptibleStateFor");function T(e,n){let o=typeof e=="object"&&e!==null?e:void 0,r=xo(e),t=n.deepDark,i=n.deepLight,a={base:r,dark:p(r,t,.6),action:p(r,t,.2),active:p(r,i,.6),light:p(r,i,.9),onLight:r};if((0,h.parse)(r)){let c=Te(n.baseLight),l=Vn(r,a.action);if(l||(a.action=An(r,c)??a.action),!Vn(r,a.active)){let m=l?void 0:we(a.action)??void 0;a.active=An(r,c,m)??a.active}}if(a.onLight=J(a.action,a.light),o){let c=o.action??a.action,l=o.light??a.light;return{base:r,dark:o.dark??a.dark,action:c,active:o.active??a.active,light:l,onLight:o.onLight??J(c,l)}}return a}s(T,"mountSingleColor");function Mn(e){let n=e.deepLight,o=e.deepDark;return{0:n,5:p(n,o,.05),10:p(n,o,.1),20:p(n,o,.2),30:p(n,o,.3),40:p(n,o,.4),50:p(n,o,.5),60:p(n,o,.6),70:p(n,o,.7),80:p(n,o,.8),90:p(n,o,.9),100:p(n,o,1)}}s(Mn,"mountGreyscaleColors");function En(e){let n=e.deepLight,o=e.deepDark,r=typeof e.primary=="object"&&e.primary?e.primary.base:e.primary,t=s(a=>1/17*(a-1),"interpolation"),i=p(r,o,.5);return{0:p(i,n,t(18)),5:p(i,n,t(17.5)),10:p(i,n,t(17)),20:p(i,n,t(16)),30:p(i,n,t(15)),40:p(i,n,t(14)),50:p(i,n,t(13)),60:p(i,n,t(12)),70:p(i,n,t(11)),80:p(i,n,t(10)),90:p(i,n,t(9)),100:p(i,n,t(8)),110:p(i,n,t(7)),120:p(i,n,t(6)),130:p(i,n,t(5)),140:p(i,n,t(4)),150:p(i,n,t(3)),160:p(i,n,t(2)),170:i,180:p(i,o,.25)}}s(En,"mountNeutralColors");function B(e,n){let o=q((0,h.parse)(e));if(!o)return e;let r=Math.min(1,Math.max(0,(o.l??0)+n));return(0,h.formatHex)({...o,l:r})??e}s(B,"shiftLightness");function ue(e,n){let o=q((0,h.parse)(e));if(!o)return e;let r=o.l??0,t=n.min??0,i=n.max??1;return r>=t&&r<=i?e:(0,h.formatHex)({...o,l:Math.min(i,Math.max(t,r))})??e}s(ue,"clampLightness");function j(e,n){let o=Io((0,h.parse)(e));if(!o)return e;let r=Math.min(1,Math.max(0,n)),t=s(i=>Math.round((i??0)*255),"channel");return`rgba(${t(o.r)}, ${t(o.g)}, ${t(o.b)}, ${r})`}s(j,"toRgbaString");var g=require("@apollion-dsi/core/themes/colors");var wo="#FFFFFF",De="#000000";function To(e){return Te(e.baseLight)?"dark":"light"}s(To,"resolvePolarity");function Gn(e,n,o){if(Math.abs((0,g.apcaContrast)(e,n))>=o)return e;let r=Math.abs((0,g.apcaContrast)("#ffffff",n))>=Math.abs((0,g.apcaContrast)("#000000",n)),t=e;for(let i=0;i<40;i+=1){let a=B(t,r?.02:-.02);if(a===t||(t=a,Math.abs((0,g.apcaContrast)(t,n))>=o))break}return t}s(Gn,"ensureApca");function Do(e,n){let o=e.baseLight??wo,r=n==="dark",t=r?ue(o,{min:g.HALATION_FLOORS.CANVAS_MIN_L}):o,i=B(t,g.LADDER_DELTAS.sunken);return{canvas:t,sunken:r?ue(i,{min:g.HALATION_FLOORS.CANVAS_MIN_L}):i,paper:B(t,g.LADDER_DELTAS.paper),raised:B(t,g.LADDER_DELTAS.raised),overlay:B(t,g.LADDER_DELTAS.overlay),scrim:r?e.deepLight??De:e.neutral?.["180"]??e.baseDark??De}}s(Do,"deriveSurface");function $o(e,n){let o=e.baseDark??De,r=ue(Gn(J(o,n.paper,g.MIN_CONTRAST_AA),n.paper,g.INK_APCA_MIN.primary),{max:g.HALATION_FLOORS.INK_MAX_L}),t=s((i,a)=>Gn(J(p(r,n.canvas,i),n.paper,g.MIN_CONTRAST_AA),n.paper,a),"tier");return{primary:r,secondary:t(g.INK_MIX.secondary,g.INK_APCA_MIN.secondary),muted:t(g.INK_MIX.muted,g.INK_APCA_MIN.muted),disabled:p(r,n.canvas,g.INK_MIX.disabled)}}s($o,"deriveInk");function Co(e){return{hairline:j(e.primary,g.EDGE_ALPHA.hairline),border:j(e.primary,g.EDGE_ALPHA.border),strong:j(e.primary,g.EDGE_ALPHA.strong)}}s(Co,"deriveEdge");function Vo(e,n){let o=g.WASH_ALPHA[n];return{hover:j(e.primary,o.hover),pressed:j(e.primary,o.pressed),selected:j(e.primary,o.selected)}}s(Vo,"deriveWash");function Lo(e,n){return n?{surface:{...e.surface,...n.surface},ink:{...e.ink,...n.ink},edge:{...e.edge,...n.edge},wash:{...e.wash,...n.wash}}:e}s(Lo,"applyOverride");function On(e,n){let o=To(e),r=Do(e,o),t=$o(e,r),i={surface:r,ink:t,edge:Co(t),wash:Vo(t,o)};return Lo(i,n?.[o])}s(On,"resolveSurfaceLadder");function Ao(e){let n=En(e);return{baseDark:e.baseDark,baseLight:e.baseLight,deepDark:e.deepDark,deepLight:e.deepLight,transparent:e.transparent??"transparent",neutral:n,grayscale:Mn(e),...On({...e,neutral:n},e.ladder),main:T(e.main,e),opposite:T(e.opposite,e),complementary:T(e.complementary,e),danger:T(e.danger,e),information:T(e.information,e),success:T(e.success,e),warning:T(e.warning,e),primary:T(e.primary,e),secondary:T(e.secondary,e),tertiary:T(e.tertiary,e)}}s(Ao,"composeColors");function O(e,n=Fn.defaultInputSpacing){let o=e.mode==="dark"?(0,Nn.toDarkColors)(e.colors):e.colors,r=Ao(o),t=Y(n,e.dimension),i=(0,jn.createSemantic)({colors:r,spacing:t}),a=(0,$e.createFoundation)(i);return e.surface==="negative"&&(a=(0,$e.createFoundation)((0,Pn.invertForSurface)({semantic:i,colors:r},"negative").semantic)),{foundation:a,colors:r}}s(O,"buildVariantThemes");async function Mo(e){let{config:n,outDir:o,cwd:r=process.cwd(),verbose:t=!1}=e,i=se(n),a=n.output??{};if(i.length===0)throw new Error("apollion-tokens build: no variants (config.brands is empty)");let c=await(0,x.mkdtemp)((0,L.join)((0,_n.tmpdir)(),"apollion-tokens-"));try{let l=[],m=s(async(d,u)=>{await Go(c,d,u),l.push({path:d,sha256:ae(u)}),t&&console.log(` \u2713 ${d}`)},"emit");if(a.json){let d=$n(n),u=[],y=en();u.push(y),await m(d.base.file,gn(y));for(let f of d.spacing){let I=i.find(K=>K.dimension===f.dimension),{foundation:A}=O(I),M=rn(A,f.dimension);u.push(M),await m(f.file,yn(M,f.dimension))}for(let f of d.font){let I=nn(f.dimension);u.push(I),await m(f.file,bn(I,f.dimension))}for(let f of d.color){let I=i.find(pe=>pe.brand===f.brand&&pe.mode===f.mode&&pe.surface===f.surface),{foundation:A,colors:M}=O(I),K=on(A,M);u.push(K),await m(f.file,hn(K,f.brand,f.mode,f.surface))}Ue(u),await m(Dn,Rn(n,d))}if(a.css||a.ts)for(let d of i){let{foundation:u,colors:y}=O(d),f=_(u,y,d),I=xn(d);a.css&&await m(`css/${I}.css`,un(f,{rgbCompanions:a.tailwind})),a.ts&&await m(`ts/${I}.d.ts`,In(f))}if(a.cssModes){let d=new Map;for(let u of i){let y=`${u.brand}.${u.surface}.${u.dimension}`,f=d.get(y)??{};f[u.mode]=u,d.set(y,f)}for(let[u,{light:y,dark:f}]of d){if(!y||!f)throw new Error(`apollion-tokens build: output.cssModes needs both modes for ${u} (config.modes)`);let I=O(y),A=O(f),M=pn(_(I.foundation,I.colors,y),_(A.foundation,A.colors,f),{rgbCompanions:a.tailwind});await m(`css/${u}.modes.css`,M)}}if(a.tailwind){let d=i[0],{foundation:u,colors:y}=O(d),f=_(u,y,d);await m("tailwind/preset.mjs",cn(f)),await m("tailwind/tw-merge.mjs",ln(f))}if(a.designMd){let d=[...new Set(i.map(u=>u.brand))];for(let u of d){let f=i.filter(I=>I.brand===u).map(I=>{let{foundation:A,colors:M}=O(I);return _(A,M,I)});await m(`design/${u}.design.md`,fn(u,f))}}let k={configHash:ve(n),files:l,gitCommit:vn(r),buildEnv:wn()},w=Tn(k);return await(0,x.writeFile)((0,L.join)(c,"manifest.json"),w),await(0,x.rm)(o,{recursive:!0,force:!0}),await(0,x.mkdir)((0,L.dirname)(o),{recursive:!0}),await(0,x.rename)(c,o),t&&console.log(`\u2713 ${l.length} files \u2192 ${o}`),{manifest:k,outDir:o}}catch(l){throw await(0,x.rm)(c,{recursive:!0,force:!0}).catch(()=>{}),l}}s(Mo,"build");async function Eo(e){let{config:n,outDir:o}=e,r;try{r=JSON.parse(await(0,x.readFile)((0,L.join)(o,"manifest.json"),"utf8"))}catch{return!1}if(r.configHash!==ve(n))return!1;for(let t of r.files){let i;try{i=await(0,x.readFile)((0,L.join)(o,t.path))}catch{return!1}if(ae(i)!==t.sha256)return!1}return!0}s(Eo,"check");async function Go(e,n,o){let r=(0,L.join)(e,n);await(0,x.mkdir)((0,L.dirname)(r),{recursive:!0}),await(0,x.writeFile)(r,o)}s(Go,"writeAt");0&&(module.exports={build,check});
|
|
11
|
+
`)}s(In,"renderTs");var mo=["light","dark"],go=["positive","negative"],ho=["compact","normal","spacious"];function ae(e){let n=e.modes??mo,o=e.surfaces??go,r=e.dimensions??ho,t=Object.entries(e.brands).sort(([a],[c])=>a.localeCompare(c)),i=[];for(let[a,c]of t)for(let l of n)for(let g of o)for(let k of r)i.push({brand:a,colors:c,mode:l,surface:g,dimension:k});return i}s(ae,"expandVariants");function xn(e){return`${e.brand}.${e.mode}.${e.surface}.${e.dimension}`}s(xn,"variantName");var Sn=require("node:crypto");function ce(e){return(0,Sn.createHash)("sha256").update(e).digest("hex")}s(ce,"sha256");function we(e){return ce(ve(e))}s(we,"hashConfig");function ve(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(ve).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${ve(e[r])}`).join(",")}}`}s(ve,"stableStringify");function vn(e){try{let{execSync:n}=require("node:child_process");return n("git rev-parse --short HEAD",{cwd:e,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim()}catch{return""}}s(vn,"detectGitCommit");function wn(){return{node:process.version,platform:`${process.platform}-${process.arch}`}}s(wn,"buildEnv");function Tn(e){let n=[...e.files].sort((r,t)=>r.path.localeCompare(t.path)),o={configHash:e.configHash,files:n,gitCommit:e.gitCommit,buildEnv:e.buildEnv};return`${JSON.stringify(o,null,2)}
|
|
12
|
+
`}s(Tn,"serializeManifest");var yo="json/sets",Dn="json/resolver.json";function le(e){return`${yo}/${e}.json`}s(le,"setFile");function bo(e,n,o){return`${e}.color.${n}.${o}`}s(bo,"colorSetName");function Ro(e){return`spacing.${e}`}s(Ro,"spacingSetName");function ko(e){return`font.${e}`}s(ko,"fontSetName");function de(e,n){e.includes(n)||e.push(n)}s(de,"pushUnique");function $n(e){let n=ae(e),o=[],r=[],t=[],i=[],a=new Set,c=[],l=new Set,g=[],k=new Set,w=[];for(let d of n){de(o,d.brand),de(r,d.mode),de(t,d.surface),de(i,d.dimension);let u=bo(d.brand,d.mode,d.surface);a.has(u)||(a.add(u),c.push({kind:"color",name:u,file:le(u),brand:d.brand,mode:d.mode,surface:d.surface}));let y=Ro(d.dimension);l.has(y)||(l.add(y),g.push({kind:"spacing",name:y,file:le(y),dimension:d.dimension}));let f=ko(d.dimension);k.has(f)||(k.add(f),w.push({kind:"font",name:f,file:le(f),dimension:d.dimension}))}return{base:{kind:"base",name:"base",file:le("base")},spacing:g,font:w,color:c,modifiers:{brand:o,mode:r,surface:t,dimension:i}}}s($n,"planSets");var Nn=require("@apollion-dsi/core/themes/colors"),$e=require("@apollion-dsi/core/themes/foundation"),jn=require("@apollion-dsi/core/themes/semantic"),Fn=require("@apollion-dsi/core/themes/spacing"),Pn=require("@apollion-dsi/core/themes/surface");var h=require("culori");var q=(0,h.converter)("oklch"),Io=(0,h.converter)("rgb");function p(e,n,o){let r=(0,h.parse)(e),t=(0,h.parse)(n);if(!r||!t)return e;let i=(0,h.interpolate)([r,t],"oklch");return(0,h.formatHex)(i(o))??e}s(p,"mixOklch");function xo(e){return e?typeof e=="string"?e:e.base:"#000"}s(xo,"coerceToHex");var ue=1.3,So=.05,Cn=.04,M=s((e,n)=>{let o=(0,h.parse)(e),r=(0,h.parse)(n);return!o||!r?1:(0,h.wcagContrast)(o,r)},"contrastRatio"),J=s(e=>{let n=q((0,h.parse)(e));return n?n.l??0:null},"oklchLightness"),vo=4.5;function K(e,n,o=vo){let r=(0,h.parse)(n),t=q((0,h.parse)(e));if(!r||!t)return e;let i=M("#fff",n)>=M("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=(0,h.formatHex)(t)??e,l=(0,h.parse)(c);if(l&&(0,h.wcagContrast)(l,r)>=o)return c;let g=Math.min(1,Math.max(0,(t.l??0)+i));if(g===(t.l??0))break;t={...t,l:g}}return(0,h.formatHex)(t)??e}s(K,"readableColor");var Vn=s((e,n)=>{if(M(e,n)>=ue)return!0;let o=J(e),r=J(n);return o!==null&&r!==null&&Math.abs(o-r)>=So},"isPerceptibleState"),Te=s(e=>e?M("#fff",e)>M("#000",e):!1,"isDarkSurface");function An(e,n,o){let r=q((0,h.parse)(e));if(!r)return null;let t={...r,l:o??r.l??0},i=n?Cn:-Cn;for(let a=0;a<25;a+=1){let c=Math.min(1,Math.max(0,(t.l??0)+i));if(c===(t.l??0))break;t={...t,l:c};let l=(0,h.formatHex)(t);if(l&&M(e,l)>=ue)return l}return(0,h.formatHex)(t)??null}s(An,"derivePerceptibleState");function Ln(e,n,o){let r=An(e,n,o);if(r&&M(e,r)>=ue)return r;let t=An(e,!n);return t&&M(e,t)>=ue?t:r??t}s(Ln,"perceptibleStateFor");function T(e,n){let o=typeof e=="object"&&e!==null?e:void 0,r=xo(e),t=n.deepDark,i=n.deepLight,a={base:r,dark:p(r,t,.6),action:p(r,t,.2),active:p(r,i,.6),light:p(r,i,.9),onLight:r};if((0,h.parse)(r)){let c=Te(n.baseLight),l=Vn(r,a.action);if(l||(a.action=Ln(r,c)??a.action),!Vn(r,a.active)){let g=l?void 0:J(a.action)??void 0;a.active=Ln(r,c,g)??a.active}}if(a.onLight=K(a.action,a.light),o){let c=o.action??a.action,l=o.light??a.light;return{base:r,dark:o.dark??a.dark,action:c,active:o.active??a.active,light:l,onLight:o.onLight??K(c,l)}}return a}s(T,"mountSingleColor");function On(e){let n=e.deepLight,o=e.deepDark;return{0:n,5:p(n,o,.05),10:p(n,o,.1),20:p(n,o,.2),30:p(n,o,.3),40:p(n,o,.4),50:p(n,o,.5),60:p(n,o,.6),70:p(n,o,.7),80:p(n,o,.8),90:p(n,o,.9),100:p(n,o,1)}}s(On,"mountGreyscaleColors");function En(e){let n=e.deepLight,o=e.deepDark,r=typeof e.primary=="object"&&e.primary?e.primary.base:e.primary,t=s(a=>1/17*(a-1),"interpolation"),i=p(r,o,.5);return{0:p(i,n,t(18)),5:p(i,n,t(17.5)),10:p(i,n,t(17)),20:p(i,n,t(16)),30:p(i,n,t(15)),40:p(i,n,t(14)),50:p(i,n,t(13)),60:p(i,n,t(12)),70:p(i,n,t(11)),80:p(i,n,t(10)),90:p(i,n,t(9)),100:p(i,n,t(8)),110:p(i,n,t(7)),120:p(i,n,t(6)),130:p(i,n,t(5)),140:p(i,n,t(4)),150:p(i,n,t(3)),160:p(i,n,t(2)),170:i,180:p(i,o,.25)}}s(En,"mountNeutralColors");function B(e,n){let o=q((0,h.parse)(e));if(!o)return e;let r=Math.min(1,Math.max(0,(o.l??0)+n));return(0,h.formatHex)({...o,l:r})??e}s(B,"shiftLightness");function pe(e,n){let o=q((0,h.parse)(e));if(!o)return e;let r=o.l??0,t=n.min??0,i=n.max??1;return r>=t&&r<=i?e:(0,h.formatHex)({...o,l:Math.min(i,Math.max(t,r))})??e}s(pe,"clampLightness");function j(e,n){let o=Io((0,h.parse)(e));if(!o)return e;let r=Math.min(1,Math.max(0,n)),t=s(i=>Math.round((i??0)*255),"channel");return`rgba(${t(o.r)}, ${t(o.g)}, ${t(o.b)}, ${r})`}s(j,"toRgbaString");var m=require("@apollion-dsi/core/themes/colors");var wo="#FFFFFF",De="#000000";function To(e){return Te(e.baseLight)?"dark":"light"}s(To,"resolvePolarity");function Do(e){let n=m.HALATION_FLOORS.CANVAS_MIN_L;return e<=n?1:e>=m.DARK_BOOST_TAPER_MAX_L?0:(m.DARK_BOOST_TAPER_MAX_L-e)/(m.DARK_BOOST_TAPER_MAX_L-n)}s(Do,"darkElevationBoostFactor");function Mn(e,n,o){if(Math.abs((0,m.apcaContrast)(e,n))>=o)return e;let r=Math.abs((0,m.apcaContrast)("#ffffff",n))>=Math.abs((0,m.apcaContrast)("#000000",n)),t=e;for(let i=0;i<40;i+=1){let a=B(t,r?.02:-.02);if(a===t||(t=a,Math.abs((0,m.apcaContrast)(t,n))>=o))break}return t}s(Mn,"ensureApca");function $o(e,n){let o=e.baseLight??wo,r=n==="dark",t=r?pe(o,{min:m.HALATION_FLOORS.CANVAS_MIN_L}):o,i=B(t,m.LADDER_DELTAS.sunken),a=r?Do(J(t)??0):0,c=s(l=>m.LADDER_DELTAS[l]+a*m.DARK_ELEVATION_BOOST[l],"delta");return{canvas:t,sunken:r?pe(i,{min:m.HALATION_FLOORS.CANVAS_MIN_L}):i,paper:B(t,c("paper")),raised:B(t,c("raised")),overlay:B(t,c("overlay")),scrim:r?e.deepLight??De:e.neutral?.["180"]??e.baseDark??De}}s($o,"deriveSurface");function Co(e,n){let o=e.baseDark??De,r=pe(Mn(K(o,n.paper,m.MIN_CONTRAST_AA),n.paper,m.INK_APCA_MIN.primary),{max:m.HALATION_FLOORS.INK_MAX_L}),t=s((i,a)=>Mn(K(p(r,n.canvas,i),n.paper,m.MIN_CONTRAST_AA),n.paper,a),"tier");return{primary:r,secondary:t(m.INK_MIX.secondary,m.INK_APCA_MIN.secondary),muted:t(m.INK_MIX.muted,m.INK_APCA_MIN.muted),disabled:p(r,n.canvas,m.INK_MIX.disabled)}}s(Co,"deriveInk");function Vo(e){return{hairline:j(e.primary,m.EDGE_ALPHA.hairline),border:j(e.primary,m.EDGE_ALPHA.border),strong:j(e.primary,m.EDGE_ALPHA.strong)}}s(Vo,"deriveEdge");function Ao(e,n){let o=m.WASH_ALPHA[n];return{hover:j(e.primary,o.hover),pressed:j(e.primary,o.pressed),selected:j(e.primary,o.selected)}}s(Ao,"deriveWash");function Lo(e,n){return n?{surface:{...e.surface,...n.surface},ink:{...e.ink,...n.ink},edge:{...e.edge,...n.edge},wash:{...e.wash,...n.wash}}:e}s(Lo,"applyOverride");function Gn(e,n){let o=To(e),r=$o(e,o),t=Co(e,r),i={surface:r,ink:t,edge:Vo(t),wash:Ao(t,o)};return Lo(i,n?.[o])}s(Gn,"resolveSurfaceLadder");function Oo(e){let n=En(e);return{baseDark:e.baseDark,baseLight:e.baseLight,deepDark:e.deepDark,deepLight:e.deepLight,transparent:e.transparent??"transparent",neutral:n,grayscale:On(e),...Gn({...e,neutral:n},e.ladder),main:T(e.main,e),opposite:T(e.opposite,e),complementary:T(e.complementary,e),danger:T(e.danger,e),information:T(e.information,e),success:T(e.success,e),warning:T(e.warning,e),primary:T(e.primary,e),secondary:T(e.secondary,e),tertiary:T(e.tertiary,e)}}s(Oo,"composeColors");function G(e,n=Fn.defaultInputSpacing){let o=e.mode==="dark"?(0,Nn.toDarkColors)(e.colors):e.colors,r=Oo(o),t=Z(n,e.dimension),i=(0,jn.createSemantic)({colors:r,spacing:t}),a=(0,$e.createFoundation)(i);return e.surface==="negative"&&(a=(0,$e.createFoundation)((0,Pn.invertForSurface)({semantic:i,colors:r},"negative").semantic)),{foundation:a,colors:r}}s(G,"buildVariantThemes");async function Eo(e){let{config:n,outDir:o,cwd:r=process.cwd(),verbose:t=!1}=e,i=ae(n),a=n.output??{};if(i.length===0)throw new Error("apollion-tokens build: no variants (config.brands is empty)");let c=await(0,x.mkdtemp)((0,A.join)((0,_n.tmpdir)(),"apollion-tokens-"));try{let l=[],g=s(async(d,u)=>{await Go(c,d,u),l.push({path:d,sha256:ce(u)}),t&&console.log(` \u2713 ${d}`)},"emit");if(a.json){let d=$n(n),u=[],y=en();u.push(y),await g(d.base.file,gn(y));for(let f of d.spacing){let I=i.find(X=>X.dimension===f.dimension),{foundation:L}=G(I),O=rn(L,f.dimension);u.push(O),await g(f.file,yn(O,f.dimension))}for(let f of d.font){let I=nn(f.dimension);u.push(I),await g(f.file,bn(I,f.dimension))}for(let f of d.color){let I=i.find(fe=>fe.brand===f.brand&&fe.mode===f.mode&&fe.surface===f.surface),{foundation:L,colors:O}=G(I),X=on(L,O);u.push(X),await g(f.file,hn(X,f.brand,f.mode,f.surface))}Xe(u),await g(Dn,Rn(n,d))}if(a.css||a.ts)for(let d of i){let{foundation:u,colors:y}=G(d),f=_(u,y,d),I=xn(d);a.css&&await g(`css/${I}.css`,un(f,{rgbCompanions:a.tailwind})),a.ts&&await g(`ts/${I}.d.ts`,In(f))}if(a.cssModes){let d=new Map;for(let u of i){let y=`${u.brand}.${u.surface}.${u.dimension}`,f=d.get(y)??{};f[u.mode]=u,d.set(y,f)}for(let[u,{light:y,dark:f}]of d){if(!y||!f)throw new Error(`apollion-tokens build: output.cssModes needs both modes for ${u} (config.modes)`);let I=G(y),L=G(f),O=pn(_(I.foundation,I.colors,y),_(L.foundation,L.colors,f),{rgbCompanions:a.tailwind});await g(`css/${u}.modes.css`,O)}}if(a.tailwind){let d=i[0],{foundation:u,colors:y}=G(d),f=_(u,y,d);await g("tailwind/preset.mjs",cn(f)),await g("tailwind/tw-merge.mjs",ln(f))}if(a.designMd){let d=[...new Set(i.map(u=>u.brand))];for(let u of d){let f=i.filter(I=>I.brand===u).map(I=>{let{foundation:L,colors:O}=G(I);return _(L,O,I)});await g(`design/${u}.design.md`,fn(u,f))}}let k={configHash:we(n),files:l,gitCommit:vn(r),buildEnv:wn()},w=Tn(k);return await(0,x.writeFile)((0,A.join)(c,"manifest.json"),w),await(0,x.rm)(o,{recursive:!0,force:!0}),await(0,x.mkdir)((0,A.dirname)(o),{recursive:!0}),await(0,x.rename)(c,o),t&&console.log(`\u2713 ${l.length} files \u2192 ${o}`),{manifest:k,outDir:o}}catch(l){throw await(0,x.rm)(c,{recursive:!0,force:!0}).catch(()=>{}),l}}s(Eo,"build");async function Mo(e){let{config:n,outDir:o}=e,r;try{r=JSON.parse(await(0,x.readFile)((0,A.join)(o,"manifest.json"),"utf8"))}catch{return!1}if(r.configHash!==we(n))return!1;for(let t of r.files){let i;try{i=await(0,x.readFile)((0,A.join)(o,t.path))}catch{return!1}if(ce(i)!==t.sha256)return!1}return!0}s(Mo,"check");async function Go(e,n,o){let r=(0,A.join)(e,n);await(0,x.mkdir)((0,A.dirname)(r),{recursive:!0}),await(0,x.writeFile)(r,o)}s(Go,"writeAt");0&&(module.exports={build,check});
|
package/lib/build.esm.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
var _n=Object.defineProperty;var s=(e,n)=>_n(e,"name",{value:n,configurable:!0}),Bn=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,o)=>(typeof require<"u"?require:n)[o]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});import{mkdir as jn,mkdtemp as Ko,readFile as On,rename as Uo,rm as Nn,writeFile as Fn}from"node:fs/promises";import{tmpdir as Xo}from"node:os";import{dirname as Pn,join as W}from"node:path";import{converter as uo,parse as po}from"culori";import{defaultInputBorder as K}from"@apollion-dsi/core/themes/border";import{createReadableTextLayer as qn}from"@apollion-dsi/core/themes/colors";import{createDeth as Kn,levelValues as Un}from"@apollion-dsi/core/themes/depth";import{createFont as Xn,defaultInputFont as M}from"@apollion-dsi/core/themes/font";import{defaultInputSpacing as Ve}from"@apollion-dsi/core/themes/spacing";import{converter as Yn,formatHex as Zn,parse as Qn}from"culori";import{defaultInputBreakpoints as Hn}from"@apollion-dsi/core/themes/breakpoints";function De(e=Hn){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}s(De,"breakpointEntries");import{defaultInputContainerSizes as Wn,defaultInputLayout as zn}from"@apollion-dsi/core/themes/layout";function $e(e=Wn){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}s($e,"containerSizeEntries");function Ce(e=zn){return[["page-max-width",`${e.pageMaxWidth}px`]]}s(Ce,"layoutEntries");import{DIMENSION_MULTIPLIERS as Jn}from"@apollion-dsi/core/themes/dimension";function J({multiplier:e=.25,alias:n},o){let r=o!==void 0?Jn[o]:e;return(...t)=>t.map(i=>{let a=typeof i=="string"?n[i]:i;return`${r*a}rem`}).join(" ")}s(J,"createSpacing");var le={"bg.primary":{description:"Primary action surface \u2014 the brand\u2019s dominant call-to-action background."},"bg.secondary":{description:"Secondary action surface \u2014 supporting actions paired with the primary."},"bg.danger":{description:"Destructive / error surface \u2014 irreversible or failing actions."},"bg.success":{description:"Positive confirmation surface \u2014 completed or healthy states."},"bg.info":{description:"Informational surface \u2014 neutral, non-blocking notices.",deprecated:"Use bg.information once the foundation role is renamed (tracked for S6)."},"bg.canvas":{description:"Page ground \u2014 the theme canvas (never pure black in dark)."},"bg.paper":{description:"Component ground (cards, inputs, tables) \u2014 lighter than the canvas in both modes."},"bg.overlay":{description:"Top of the elevation ladder \u2014 modal / dialog panels."},"text.primary":{description:"Primary neutral ink \u2014 AA + APCA Lc \u2265 75 over bg.paper and bg.canvas."},"text.muted":{description:"Muted neutral ink \u2014 AA + APCA Lc \u2265 45 over bg.paper."},"edge.border":{description:"Default control outline \u2014 primary ink at 20 % alpha, legible on any ground."},"edge.hairline":{description:"Dividers and card outlines \u2014 primary ink at 10 % alpha."},"text.on-primary":{description:"Text/icon colour with guaranteed contrast over bg.primary."},"text.on-danger":{description:"Text/icon colour with guaranteed contrast over bg.danger."},"space.medium":{description:"Base spacing step (1rem at normal density) \u2014 the layout rhythm unit."},"space.large":{description:"Comfortable spacing step \u2014 section padding and card gutters."},"spacing.md":{description:"Medium foundation spacing alias \u2014 references the space.medium primitive."},"spacing.lg":{description:"Large foundation spacing alias \u2014 references the space.large primitive."},"border.radius.md":{description:"Default card corner radius."},"border.width.thin":{description:"Hairline border \u2014 dividers and default input outlines."},"border.width.regular":{description:"Standard emphasis border \u2014 focused/active controls."}};function de(e){let n=Object.keys(le).filter(o=>!e.has(o));if(n.length>0)throw new Error(`token-meta: ${n.length} stale TOKEN_META key(s) resolve to no IR node: ${n.join(", ")}. Update src/token-meta.ts to match the current IR paths.`)}s(de,"assertTokenMetaResolves");var eo=Yn("oklch");function h(e){return typeof e.type=="string"&&"value"in e}s(h,"isToken");function I(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}s(I,"kebab");function Le(e){return e.split(".").map(I).join(".")}s(Le,"kebabPath");function T(e){return e.kind==="ref"?e.resolved.raw:e.raw}s(T,"rawValue");function q(e,n){return Number(e.toFixed(n))||0}s(q,"round");function ue(e){let n=eo(Qn(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[q(n.l,4),q(n.c,4),q(n.h??0,2)],r=Zn(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:q(n.alpha,4),hex:r}:{kind:"color",raw:e,components:o,hex:r}}s(ue,"toColorValue");var Ae=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function w(e){let n=Ae.exec(e.trim());if(n)return{kind:"dimension",raw:e,value:Number(n[1]),unit:n[2]};let o=Number.parseFloat(e);return{kind:"dimension",raw:e,value:Number.isFinite(o)?o:0,unit:"rem"}}s(w,"toDimensionValue");function k(e){return{type:"color",value:ue(e)}}s(k,"colorToken");function E(e){let n={};for(let[o,r]of Object.entries(e))n[o]=k(r);return n}s(E,"recordColorGroup");function Me(e){let n=qn(e),o={};for(let[r,t]of Object.entries(n.palettes))o[r]=k(t);return o.neutral=E(n.neutral),o}s(Me,"buildReadableTextGroup");var no=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function Ee(e){let n={};for(let o of no){let r=e[o];n[o]={base:k(r.base),dark:k(r.dark),action:k(r.action),active:k(r.active),light:k(r.light),onLight:k(r.onLight)}}return n.grayscale=E(e.grayscale),n.neutral=E(e.neutral),n.surface=E(e.surface),n.ink=E(e.ink),n.edge=E(e.edge),n.wash=E(e.wash),n.baseDark=k(e.baseDark??"#000000"),n.baseLight=k(e.baseLight??"#ffffff"),n.deepDark=k(e.deepDark??"#000000"),n.deepLight=k(e.deepLight??"#ffffff"),n}s(Ee,"buildColorPrimitives");function Ge(e){let n=J(Ve,e),o={};for(let r of Object.keys(Ve.alias))o[r]={type:"dimension",value:w(n(r))};return o}s(Ge,"buildSpacePrimitives");function Oe(){let e={};for(let[n,o]of Object.entries(K.borderWidth))e[n]={type:"dimension",value:w(o)};return e}s(Oe,"buildBorderWidthPrimitives");function oo(e,n){return{color:Ee(e),space:Ge(n),borderWidth:Oe()}}s(oo,"buildPrimitives");var Ne={primary:"color.primary.base",secondary:"color.secondary.base",tertiary:"color.tertiary.base",success:"color.success.base",danger:"color.danger.base",warning:"color.warning.base",info:"color.information.base",canvas:"color.surface.canvas",sunken:"color.surface.sunken",paper:"color.surface.paper",raised:"color.surface.raised",overlay:"color.surface.overlay"},je={onPrimary:"color.baseLight",onSecondary:"color.baseLight",onTertiary:"color.baseDark",onSuccess:"color.baseLight",onDanger:"color.baseLight",onWarning:"color.baseDark",onInfo:"color.baseLight",primary:"color.ink.primary",secondary:"color.ink.secondary",muted:"color.ink.muted",disabled:"color.ink.disabled"},Fe={hairline:"color.edge.hairline",border:"color.edge.border",strong:"color.edge.strong"};function ro(e,n){let o=e;for(let r of n.split(".").slice(1))if(o&&typeof o=="object"&&r in o)o=o[r];else return;return typeof o=="string"?o:void 0}s(ro,"lookupPrimitive");function N(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=o[t],c=a?ro(n,a):void 0;r[t]=a&&c===i?{type:"color",value:{kind:"ref",path:a,resolved:ue(i)}}:k(i)}return r}s(N,"colorRefGroup");var Pe={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},to={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function io(e,n){let o=n.split("."),r=o[0]==="border-width"?"borderWidth":o[0],t=e[r];for(let i of o.slice(1))if(t&&!h(t)&&i in t)t=t[i];else return;return t&&h(t)&&t.value.kind==="dimension"?t.value.raw:void 0}s(io,"lookupDimensionPrimitive");function pe(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=o[t],c=a?io(n,a):void 0;r[t]=a&&c===i?{type:"dimension",value:{kind:"ref",path:a,resolved:w(i)}}:{type:"dimension",value:w(i)}}return r}s(pe,"dimensionRefGroup");function _e(e){let n={},o={};for(let[i,a]of Object.entries(K.borderRadius))Ae.test(a)?n[i]={type:"dimension",value:w(a)}:o[i]=a;let r=pe(K.borderWidth,e,to),t={};for(let[i,a]of Object.entries(K.borderStyle))t[i]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:r,style:t},extensions:o}}s(_e,"buildBorder");function Be(e){let n=Xn(M,e),o={};for(let[c,l]of Object.entries(M.fontFamily)){let m=l.replace(/;\s*$/,"").trim();o[c]={type:"fontFamily",value:{kind:"fontFamily",raw:m,family:m}}}let r={};for(let[c,l]of Object.entries(n.fontSize))r[c]={type:"dimension",value:w(l)};let t={};for(let[c,l]of Object.entries(M.fontWeight))t[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${l}`,weight:l}};let i={};for(let[c,l]of Object.entries(M.lineHeight))i[c]={type:"number",value:{kind:"number",raw:`${l}`,number:l}};let a={letterSpacing:M.letterSpacing,textTransform:M.textTransform,fontStyle:M.fontStyle};return{group:{family:o,size:r,weight:t,lineHeight:i},extensions:a}}s(Be,"buildFont");var so=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function ao(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let r=n.match(so),t=r?r[0]:"#000000",a=(r?n.slice(0,r.index).trim():n).split(/\s+/).filter(Boolean),c=s(l=>w(a[l]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:ue(t),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}s(ao,"parseShadow");function He(e){let n=Kn(e),o={};for(let r of Object.keys(Un))o[r]={type:"shadow",value:ao(n(r))};return o}s(He,"buildShadow");function U(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=n?`${n}.${I(t)}`:I(t);if(h(i)){o.add(a);let c=le[a];r[t]=c&&(c.description!==void 0||c.deprecated!==void 0)?{...i,...c.description!==void 0?{description:c.description}:{},...c.deprecated!==void 0?{deprecated:c.deprecated}:{}}:i}else r[t]=U(i,a,o)}return r}s(U,"decorateGroup");function co(e){let n=new Set,o=U(e.primitives,"",n),r=U(e.groups,"",n);return de(n),{...e,primitives:o,groups:r}}s(co,"decorateMeta");function X(e,n){return U(e,"",n)}s(X,"decorateSlice");function We(e,n,o){for(let[r,t]of Object.entries(e)){let i=n?`${n}.${I(r)}`:I(r);h(t)?o.add(i):We(t,i,o)}}s(We,"collectPaths");function ze(e){let n=new Set;for(let o of e)We(o.groups,"",n);de(n)}s(ze,"assertSlicesMetaComplete");function Je(){let e={};for(let[n,o]of De())e[n]={type:"dimension",value:w(o)};return e}s(Je,"buildBreakpoints");function qe(){let e={};for(let[n,o]of $e())e[n]={type:"dimension",value:w(o)};return e}s(qe,"buildContainerSizes");function Ke(){let e={};for(let[n,o]of Ce())e[n]={type:"dimension",value:w(o)};return e}s(Ke,"buildLayoutConstants");var Ue={unit:"px",interval:"half-open [value, next) \u2014 min-width sets, ascending",cssVarsUsage:"informational only \u2014 var() is invalid inside a @media prelude"};function Xe(){let e=Oe(),o=_e({borderWidth:e}),r={"com.apollion.breakpoint":Ue};Object.keys(o.extensions).length>0&&(r["com.apollion.border"]={radius:o.extensions});let t=new Set;return{groups:X({"border-width":e,border:o.group,breakpoint:Je(),"container-size":qe(),layout:Ke()},t),extensions:r}}s(Xe,"buildBaseIR");function Ye(e){let n=Be(e),o=new Set;return{groups:X({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}s(Ye,"buildFontIR");function Ze(e,n){let o=Ee(n),r=new Set;return{groups:X({color:o,bg:N(e.bg,n,Ne),text:N(e.text,n,je),edge:N(e.edge,n,Fe),tx:Me(n),shadow:He(n)},r),extensions:{}}}s(Ze,"buildColorIR");function Qe(e,n){let o=Ge(n),r={space:o},t=new Set;return{groups:X({space:o,spacing:pe(e.spacing,r,Pe)},t),extensions:{}}}s(Qe,"buildSpacingIR");function lo(e,n,o){let r={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},t=oo(n,o.dimension),i=_e(t),a=Be(o.dimension),c={"com.apollion.variant":r,"com.apollion.font":a.extensions,"com.apollion.breakpoint":Ue};Object.keys(i.extensions).length>0&&(c["com.apollion.border"]={radius:i.extensions});let l={description:`Apollion DS tokens \u2014 DTCG 2025.10. Variant: ${r.brand}/${r.mode}/${r.surface}/${r.dimension}.`,meta:r,primitives:t,groups:{bg:N(e.bg,n,Ne),text:N(e.text,n,je),edge:N(e.edge,n,Fe),tx:Me(n),spacing:pe(e.spacing,t,Pe),border:i.group,breakpoint:Je(),"container-size":qe(),layout:Ke(),font:a.group,shadow:He(n)},extensions:c};return co(l)}s(lo,"buildIR");var j=lo;var fo=uo("rgb"),en="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function fe(e){if(e.value.kind==="color")return e.value;if(e.value.kind==="ref"&&e.value.resolved.kind==="color")return e.value.resolved}s(fe,"colorPayload");function me(e){return e.alpha===void 0}s(me,"isOpaqueColor");function nn(e){let n=fo(po(e.hex));if(!n)return"0 0 0";let o=s(r=>Math.min(255,Math.max(0,Math.round(r*255))),"channel");return`${o(n.r)} ${o(n.g)} ${o(n.b)}`}s(nn,"rgbTriplet");function P(e,n=[]){let o=new Map;for(let[r,t]of Object.entries(e)){let i=[...n,I(r)];if(h(t))o.set(i.join("-"),t);else for(let[a,c]of P(t,i))o.set(a,c)}return o}s(P,"flatTokens");function y(e,...n){let o=e[n[0]];for(let r of n.slice(1)){if(!o||h(o))return{};o=o[r]}return o&&!h(o)?o:{}}s(y,"groupAt");function on(e){let n=[];for(let o of["bg","text","edge","tx"])for(let[r,t]of P(y(e.groups,o),[o])){let i=fe(t);i&&n.push({key:r,cssVar:`--apollion-${r}`,opaque:me(i)})}return n}s(on,"colorEntries");function V(e,n){return[...P(e)].map(([o])=>[o,`var(--apollion-${[...n,o].join("-")})`])}s(V,"varEntries");function D(e,n,o){if(o.length!==0){e.push(` ${n}: {`);for(let[r,t]of o)e.push(` ${JSON.stringify(r)}: ${JSON.stringify(t)},`);e.push(" },")}}s(D,"pushScale");function rn(e){let n=[en,"// Tailwind preset over the Apollion foundation tokens \u2014 requires dist/css/ vars in scope.","","const preset = {"," theme: {"," extend: {"],o=on(e);n.push(" colors: {");for(let{key:r,cssVar:t,opaque:i}of o)i?n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`rgb(var(${t}-rgb) / <alpha-value>)`)},`):(n.push(` // ${r} carries its own alpha \u2014 excluded from the <alpha-value> modifier form.`),n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`var(${t})`)},`));return n.push(" },"),D(n,"screens",[...P(y(e.groups,"breakpoint"))].filter(([r])=>r!=="xs").map(([r,t])=>[r,T(t.value)])),D(n,"spacing",V(y(e.groups,"spacing"),["spacing"])),D(n,"borderRadius",V(y(e.groups,"border","radius"),["border","radius"])),D(n,"borderWidth",V(y(e.groups,"border","width"),["border","width"])),D(n,"fontFamily",V(y(e.groups,"font","family"),["font","family"])),D(n,"fontSize",V(y(e.groups,"font","size"),["font","size"])),D(n,"fontWeight",V(y(e.groups,"font","weight"),["font","weight"])),D(n,"lineHeight",V(y(e.groups,"font","lineHeight"),["font","line-height"])),D(n,"boxShadow",V(y(e.groups,"shadow"),["shadow"])),n.push(" },"," },","};","","export default preset;",""),n.join(`
|
|
1
|
+
var Bn=Object.defineProperty;var s=(e,n)=>Bn(e,"name",{value:n,configurable:!0}),Hn=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,o)=>(typeof require<"u"?require:n)[o]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});import{mkdir as Fn,mkdtemp as Yo,readFile as Nn,rename as Zo,rm as jn,writeFile as Pn}from"node:fs/promises";import{tmpdir as Qo}from"node:os";import{dirname as _n,join as z}from"node:path";import{converter as po,parse as fo}from"culori";import{defaultInputBorder as X}from"@apollion-dsi/core/themes/border";import{createReadableTextLayer as qn}from"@apollion-dsi/core/themes/colors";import{createDeth as Xn,levelValues as Un}from"@apollion-dsi/core/themes/depth";import{createFont as Yn,defaultInputFont as O}from"@apollion-dsi/core/themes/font";import{defaultInputSpacing as Ve}from"@apollion-dsi/core/themes/spacing";import{converter as Zn,formatHex as Qn,parse as eo}from"culori";import{defaultInputBreakpoints as Wn}from"@apollion-dsi/core/themes/breakpoints";function De(e=Wn){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}s(De,"breakpointEntries");import{defaultInputContainerSizes as zn,defaultInputLayout as Jn}from"@apollion-dsi/core/themes/layout";function $e(e=zn){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}s($e,"containerSizeEntries");function Ce(e=Jn){return[["page-max-width",`${e.pageMaxWidth}px`]]}s(Ce,"layoutEntries");import{DIMENSION_MULTIPLIERS as Kn}from"@apollion-dsi/core/themes/dimension";function K({multiplier:e=.25,alias:n},o){let r=o!==void 0?Kn[o]:e;return(...t)=>t.map(i=>{let a=typeof i=="string"?n[i]:i;return`${r*a}rem`}).join(" ")}s(K,"createSpacing");var de={"bg.primary":{description:"Primary action surface \u2014 the brand\u2019s dominant call-to-action background."},"bg.secondary":{description:"Secondary action surface \u2014 supporting actions paired with the primary."},"bg.danger":{description:"Destructive / error surface \u2014 irreversible or failing actions."},"bg.success":{description:"Positive confirmation surface \u2014 completed or healthy states."},"bg.info":{description:"Informational surface \u2014 neutral, non-blocking notices.",deprecated:"Use bg.information once the foundation role is renamed (tracked for S6)."},"bg.canvas":{description:"Page ground \u2014 the theme canvas (never pure black in dark)."},"bg.paper":{description:"Component ground (cards, inputs, tables) \u2014 lighter than the canvas in both modes; the dark step is widened for near-black grounds so cards stay separated on LCD/SDR panels (ADR-026)."},"bg.overlay":{description:"Top of the elevation ladder \u2014 modal / dialog panels."},"text.primary":{description:"Primary neutral ink \u2014 AA + APCA Lc \u2265 75 over bg.paper and bg.canvas."},"text.muted":{description:"Muted neutral ink \u2014 AA + APCA Lc \u2265 45 over bg.paper."},"edge.border":{description:"Default control outline \u2014 primary ink at 20 % alpha, legible on any ground."},"edge.hairline":{description:"Dividers and card outlines \u2014 primary ink at 10 % alpha."},"text.on-primary":{description:"Text/icon colour with guaranteed contrast over bg.primary."},"text.on-danger":{description:"Text/icon colour with guaranteed contrast over bg.danger."},"space.medium":{description:"Base spacing step (1rem at normal density) \u2014 the layout rhythm unit."},"space.large":{description:"Comfortable spacing step \u2014 section padding and card gutters."},"spacing.md":{description:"Medium foundation spacing alias \u2014 references the space.medium primitive."},"spacing.lg":{description:"Large foundation spacing alias \u2014 references the space.large primitive."},"border.radius.md":{description:"Default card corner radius."},"border.width.thin":{description:"Hairline border \u2014 dividers and default input outlines."},"border.width.regular":{description:"Standard emphasis border \u2014 focused/active controls."}};function ue(e){let n=Object.keys(de).filter(o=>!e.has(o));if(n.length>0)throw new Error(`token-meta: ${n.length} stale TOKEN_META key(s) resolve to no IR node: ${n.join(", ")}. Update src/token-meta.ts to match the current IR paths.`)}s(ue,"assertTokenMetaResolves");var no=Zn("oklch");function h(e){return typeof e.type=="string"&&"value"in e}s(h,"isToken");function I(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}s(I,"kebab");function Ae(e){return e.split(".").map(I).join(".")}s(Ae,"kebabPath");function T(e){return e.kind==="ref"?e.resolved.raw:e.raw}s(T,"rawValue");function q(e,n){return Number(e.toFixed(n))||0}s(q,"round");function pe(e){let n=no(eo(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[q(n.l,4),q(n.c,4),q(n.h??0,2)],r=Qn(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:q(n.alpha,4),hex:r}:{kind:"color",raw:e,components:o,hex:r}}s(pe,"toColorValue");var Le=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function w(e){let n=Le.exec(e.trim());if(n)return{kind:"dimension",raw:e,value:Number(n[1]),unit:n[2]};let o=Number.parseFloat(e);return{kind:"dimension",raw:e,value:Number.isFinite(o)?o:0,unit:"rem"}}s(w,"toDimensionValue");function k(e){return{type:"color",value:pe(e)}}s(k,"colorToken");function E(e){let n={};for(let[o,r]of Object.entries(e))n[o]=k(r);return n}s(E,"recordColorGroup");function Oe(e){let n=qn(e),o={};for(let[r,t]of Object.entries(n.palettes))o[r]=k(t);return o.neutral=E(n.neutral),o}s(Oe,"buildReadableTextGroup");var oo=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function Ee(e){let n={};for(let o of oo){let r=e[o];n[o]={base:k(r.base),dark:k(r.dark),action:k(r.action),active:k(r.active),light:k(r.light),onLight:k(r.onLight)}}return n.grayscale=E(e.grayscale),n.neutral=E(e.neutral),n.surface=E(e.surface),n.ink=E(e.ink),n.edge=E(e.edge),n.wash=E(e.wash),n.baseDark=k(e.baseDark??"#000000"),n.baseLight=k(e.baseLight??"#ffffff"),n.deepDark=k(e.deepDark??"#000000"),n.deepLight=k(e.deepLight??"#ffffff"),n}s(Ee,"buildColorPrimitives");function Me(e){let n=K(Ve,e),o={};for(let r of Object.keys(Ve.alias))o[r]={type:"dimension",value:w(n(r))};return o}s(Me,"buildSpacePrimitives");function Ge(){let e={};for(let[n,o]of Object.entries(X.borderWidth))e[n]={type:"dimension",value:w(o)};return e}s(Ge,"buildBorderWidthPrimitives");function ro(e,n){return{color:Ee(e),space:Me(n),borderWidth:Ge()}}s(ro,"buildPrimitives");var Ne={primary:"color.primary.base",secondary:"color.secondary.base",tertiary:"color.tertiary.base",success:"color.success.base",danger:"color.danger.base",warning:"color.warning.base",info:"color.information.base",canvas:"color.surface.canvas",sunken:"color.surface.sunken",paper:"color.surface.paper",raised:"color.surface.raised",overlay:"color.surface.overlay"},je={onPrimary:"color.baseLight",onSecondary:"color.baseLight",onTertiary:"color.baseDark",onSuccess:"color.baseLight",onDanger:"color.baseLight",onWarning:"color.baseDark",onInfo:"color.baseLight",primary:"color.ink.primary",secondary:"color.ink.secondary",muted:"color.ink.muted",disabled:"color.ink.disabled"},Fe={hairline:"color.edge.hairline",border:"color.edge.border",strong:"color.edge.strong"};function to(e,n){let o=e;for(let r of n.split(".").slice(1))if(o&&typeof o=="object"&&r in o)o=o[r];else return;return typeof o=="string"?o:void 0}s(to,"lookupPrimitive");function N(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=o[t],c=a?to(n,a):void 0;r[t]=a&&c===i?{type:"color",value:{kind:"ref",path:a,resolved:pe(i)}}:k(i)}return r}s(N,"colorRefGroup");var Pe={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},io={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function so(e,n){let o=n.split("."),r=o[0]==="border-width"?"borderWidth":o[0],t=e[r];for(let i of o.slice(1))if(t&&!h(t)&&i in t)t=t[i];else return;return t&&h(t)&&t.value.kind==="dimension"?t.value.raw:void 0}s(so,"lookupDimensionPrimitive");function fe(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=o[t],c=a?so(n,a):void 0;r[t]=a&&c===i?{type:"dimension",value:{kind:"ref",path:a,resolved:w(i)}}:{type:"dimension",value:w(i)}}return r}s(fe,"dimensionRefGroup");function _e(e){let n={},o={};for(let[i,a]of Object.entries(X.borderRadius))Le.test(a)?n[i]={type:"dimension",value:w(a)}:o[i]=a;let r=fe(X.borderWidth,e,io),t={};for(let[i,a]of Object.entries(X.borderStyle))t[i]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:r,style:t},extensions:o}}s(_e,"buildBorder");function Be(e){let n=Yn(O,e),o={};for(let[c,l]of Object.entries(O.fontFamily)){let m=l.replace(/;\s*$/,"").trim();o[c]={type:"fontFamily",value:{kind:"fontFamily",raw:m,family:m}}}let r={};for(let[c,l]of Object.entries(n.fontSize))r[c]={type:"dimension",value:w(l)};let t={};for(let[c,l]of Object.entries(O.fontWeight))t[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${l}`,weight:l}};let i={};for(let[c,l]of Object.entries(O.lineHeight))i[c]={type:"number",value:{kind:"number",raw:`${l}`,number:l}};let a={letterSpacing:O.letterSpacing,textTransform:O.textTransform,fontStyle:O.fontStyle};return{group:{family:o,size:r,weight:t,lineHeight:i},extensions:a}}s(Be,"buildFont");var ao=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function co(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let r=n.match(ao),t=r?r[0]:"#000000",a=(r?n.slice(0,r.index).trim():n).split(/\s+/).filter(Boolean),c=s(l=>w(a[l]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:pe(t),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}s(co,"parseShadow");function He(e){let n=Xn(e),o={};for(let r of Object.keys(Un))o[r]={type:"shadow",value:co(n(r))};return o}s(He,"buildShadow");function U(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=n?`${n}.${I(t)}`:I(t);if(h(i)){o.add(a);let c=de[a];r[t]=c&&(c.description!==void 0||c.deprecated!==void 0)?{...i,...c.description!==void 0?{description:c.description}:{},...c.deprecated!==void 0?{deprecated:c.deprecated}:{}}:i}else r[t]=U(i,a,o)}return r}s(U,"decorateGroup");function lo(e){let n=new Set,o=U(e.primitives,"",n),r=U(e.groups,"",n);return ue(n),{...e,primitives:o,groups:r}}s(lo,"decorateMeta");function Y(e,n){return U(e,"",n)}s(Y,"decorateSlice");function We(e,n,o){for(let[r,t]of Object.entries(e)){let i=n?`${n}.${I(r)}`:I(r);h(t)?o.add(i):We(t,i,o)}}s(We,"collectPaths");function ze(e){let n=new Set;for(let o of e)We(o.groups,"",n);ue(n)}s(ze,"assertSlicesMetaComplete");function Je(){let e={};for(let[n,o]of De())e[n]={type:"dimension",value:w(o)};return e}s(Je,"buildBreakpoints");function Ke(){let e={};for(let[n,o]of $e())e[n]={type:"dimension",value:w(o)};return e}s(Ke,"buildContainerSizes");function qe(){let e={};for(let[n,o]of Ce())e[n]={type:"dimension",value:w(o)};return e}s(qe,"buildLayoutConstants");var Xe={unit:"px",interval:"half-open [value, next) \u2014 min-width sets, ascending",cssVarsUsage:"informational only \u2014 var() is invalid inside a @media prelude"};function Ue(){let e=Ge(),o=_e({borderWidth:e}),r={"com.apollion.breakpoint":Xe};Object.keys(o.extensions).length>0&&(r["com.apollion.border"]={radius:o.extensions});let t=new Set;return{groups:Y({"border-width":e,border:o.group,breakpoint:Je(),"container-size":Ke(),layout:qe()},t),extensions:r}}s(Ue,"buildBaseIR");function Ye(e){let n=Be(e),o=new Set;return{groups:Y({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}s(Ye,"buildFontIR");function Ze(e,n){let o=Ee(n),r=new Set;return{groups:Y({color:o,bg:N(e.bg,n,Ne),text:N(e.text,n,je),edge:N(e.edge,n,Fe),tx:Oe(n),shadow:He(n)},r),extensions:{}}}s(Ze,"buildColorIR");function Qe(e,n){let o=Me(n),r={space:o},t=new Set;return{groups:Y({space:o,spacing:fe(e.spacing,r,Pe)},t),extensions:{}}}s(Qe,"buildSpacingIR");function uo(e,n,o){let r={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},t=ro(n,o.dimension),i=_e(t),a=Be(o.dimension),c={"com.apollion.variant":r,"com.apollion.font":a.extensions,"com.apollion.breakpoint":Xe};Object.keys(i.extensions).length>0&&(c["com.apollion.border"]={radius:i.extensions});let l={description:`Apollion DS tokens \u2014 DTCG 2025.10. Variant: ${r.brand}/${r.mode}/${r.surface}/${r.dimension}.`,meta:r,primitives:t,groups:{bg:N(e.bg,n,Ne),text:N(e.text,n,je),edge:N(e.edge,n,Fe),tx:Oe(n),spacing:fe(e.spacing,t,Pe),border:i.group,breakpoint:Je(),"container-size":Ke(),layout:qe(),font:a.group,shadow:He(n)},extensions:c};return lo(l)}s(uo,"buildIR");var j=uo;var mo=po("rgb"),en="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function me(e){if(e.value.kind==="color")return e.value;if(e.value.kind==="ref"&&e.value.resolved.kind==="color")return e.value.resolved}s(me,"colorPayload");function ge(e){return e.alpha===void 0}s(ge,"isOpaqueColor");function nn(e){let n=mo(fo(e.hex));if(!n)return"0 0 0";let o=s(r=>Math.min(255,Math.max(0,Math.round(r*255))),"channel");return`${o(n.r)} ${o(n.g)} ${o(n.b)}`}s(nn,"rgbTriplet");function P(e,n=[]){let o=new Map;for(let[r,t]of Object.entries(e)){let i=[...n,I(r)];if(h(t))o.set(i.join("-"),t);else for(let[a,c]of P(t,i))o.set(a,c)}return o}s(P,"flatTokens");function y(e,...n){let o=e[n[0]];for(let r of n.slice(1)){if(!o||h(o))return{};o=o[r]}return o&&!h(o)?o:{}}s(y,"groupAt");function on(e){let n=[];for(let o of["bg","text","edge","tx"])for(let[r,t]of P(y(e.groups,o),[o])){let i=me(t);i&&n.push({key:r,cssVar:`--apollion-${r}`,opaque:ge(i)})}return n}s(on,"colorEntries");function V(e,n){return[...P(e)].map(([o])=>[o,`var(--apollion-${[...n,o].join("-")})`])}s(V,"varEntries");function D(e,n,o){if(o.length!==0){e.push(` ${n}: {`);for(let[r,t]of o)e.push(` ${JSON.stringify(r)}: ${JSON.stringify(t)},`);e.push(" },")}}s(D,"pushScale");function rn(e){let n=[en,"// Tailwind preset over the Apollion foundation tokens \u2014 requires dist/css/ vars in scope.","","const preset = {"," theme: {"," extend: {"],o=on(e);n.push(" colors: {");for(let{key:r,cssVar:t,opaque:i}of o)i?n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`rgb(var(${t}-rgb) / <alpha-value>)`)},`):(n.push(` // ${r} carries its own alpha \u2014 excluded from the <alpha-value> modifier form.`),n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`var(${t})`)},`));return n.push(" },"),D(n,"screens",[...P(y(e.groups,"breakpoint"))].filter(([r])=>r!=="xs").map(([r,t])=>[r,T(t.value)])),D(n,"spacing",V(y(e.groups,"spacing"),["spacing"])),D(n,"borderRadius",V(y(e.groups,"border","radius"),["border","radius"])),D(n,"borderWidth",V(y(e.groups,"border","width"),["border","width"])),D(n,"fontFamily",V(y(e.groups,"font","family"),["font","family"])),D(n,"fontSize",V(y(e.groups,"font","size"),["font","size"])),D(n,"fontWeight",V(y(e.groups,"font","weight"),["font","weight"])),D(n,"lineHeight",V(y(e.groups,"font","lineHeight"),["font","line-height"])),D(n,"boxShadow",V(y(e.groups,"shadow"),["shadow"])),n.push(" },"," },","};","","export default preset;",""),n.join(`
|
|
2
2
|
`)}s(rn,"renderTailwindPreset");function tn(e){let n=s(t=>[...P(t).keys()],"keys"),o=s(t=>`[${t.map(i=>JSON.stringify(i)).join(", ")}]`,"list");return[en,"// tailwind-merge extension for the generated preset \u2014 pass to extendTailwindMerge().","","export const twMergeExtension = {"," extend: {"," theme: {",` colors: ${o(on(e).map(t=>t.key))},`,` spacing: ${o(n(y(e.groups,"spacing")))},`,` borderRadius: ${o(n(y(e.groups,"border","radius")))},`,` borderWidth: ${o(n(y(e.groups,"border","width")))},`," },"," classGroups: {",` 'font-family': [{ font: ${o(n(y(e.groups,"font","family")))} }],`,` 'font-size': [{ text: ${o(n(y(e.groups,"font","size")))} }],`,` 'font-weight': [{ font: ${o(n(y(e.groups,"font","weight")))} }],`,` leading: [{ leading: ${o(n(y(e.groups,"font","lineHeight")))} }],`,` shadow: [{ shadow: ${o(n(y(e.groups,"shadow")))} }],`," },"," },","};",""].join(`
|
|
3
|
-
`)}s(tn,"renderTwMergeExtension");var sn="/* Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. */";function
|
|
4
|
-
`)}s(an,"renderCss");function cn(e,n,o={}){let{attribute:r="data-apollion-mode",rgbCompanions:t}=o,{brand:i,surface:a,dimension:c}=e.meta,l=[sn,""],m=s((S,d,u)=>{l.push(`${S} {`,` color-scheme: ${u};`),
|
|
5
|
-
`)}s(cn,"renderCssModes");var
|
|
3
|
+
`)}s(tn,"renderTwMergeExtension");var sn="/* Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. */";function Z(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,I(r)];h(t)?o.push(` --apollion-${i.join("-")}: ${T(t.value)};`):Z(t,i,o)}}s(Z,"emitVars");function Q(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,I(r)];if(!h(t)){Q(t,i,o);continue}let a=me(t);a&&ge(a)&&o.push(` --apollion-${i.join("-")}-rgb: ${nn(a)};`)}}s(Q,"emitRgbVars");function he(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,I(r)];h(t)?t.type==="color"&&o.push(` @property --apollion-${i.join("-")} { syntax: '<color>'; inherits: true; initial-value: ${T(t.value)}; }`):he(t,i,o)}}s(he,"emitProperties");function an(e,n={}){let{brand:o,mode:r,surface:t,dimension:i}=e.meta,a=[sn,""];return a.push(`/* Variant: brand=${o} mode=${r} surface=${t} dimension=${i} */`,"",":root {"),Z(e.groups,[],a),n.rgbCompanions&&(a.push(""," /* -rgb channel triplets \u2014 Tailwind <alpha-value> companions (opaque colour tokens only). */"),Q(e.groups,[],a)),a.push("}",""),a.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),he(e.groups,[],a),a.push("}",""),a.join(`
|
|
4
|
+
`)}s(an,"renderCss");function cn(e,n,o={}){let{attribute:r="data-apollion-mode",rgbCompanions:t}=o,{brand:i,surface:a,dimension:c}=e.meta,l=[sn,""],m=s((S,d,u)=>{l.push(`${S} {`,` color-scheme: ${u};`),Z(d.groups,[],l),t&&Q(d.groups,[],l),l.push("}","")},"block");l.push(`/* Variant: brand=${i} surface=${a} dimension=${c} modes=light+dark (attribute ${r}) */`,""),m(`:root, html[${r}="light"]`,e,"light"),m(`html[${r}="dark"]`,n,"dark"),l.push("@media (prefers-color-scheme: dark) {"),l.push(` html:not([${r}]) {`," color-scheme: dark;");let b=[];Z(n.groups,[],b),t&&Q(n.groups,[],b);for(let S of b)l.push(` ${S}`);return l.push(" }","}",""),l.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),he(e.groups,[],l),l.push("}",""),l.join(`
|
|
5
|
+
`)}s(cn,"renderCssModes");var go="<!-- Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. -->";function ye(e,n,o){for(let[r,t]of Object.entries(e)){let i=n?`${n}.${r}`:r;h(t)?o.push([i,T(t.value)]):ye(t,i,o)}}s(ye,"flatten");function ho(e){return typeof e=="number"?String(e):`'${String(e).replace(/'/g,"''")}'`}s(ho,"yamlEscape");function yo(e){let{mode:n,surface:o,dimension:r}=e.meta;return`${n}.${o}.${r}`}s(yo,"variantKey");function ln(e,n){if(n.length===0)throw new Error(`renderDesignMd: no variants for brand "${e}"`);let o=["---",`brand: '${e}'`,"generator: apollion-tokens","variants:"];for(let t of n){let i=[];ye(t.groups,"",i),o.push(` ${yo(t)}:`);for(let[a,c]of i)o.push(` ${a}: ${ho(c)}`)}o.push("---");let r=["",go,"",`# Design.md \u2014 ${e}`,"","Resolved design-token values for this brand, one section per variant.","Consumption rules (which token to reach for, layer boundaries) live in the","package `llms.txt`; this file carries the values those rules reference.","Regenerate with `apollion-tokens build` \u2014 never edit.",""];for(let t of n){let{mode:i,surface:a,dimension:c}=t.meta;r.push(`## Variant \`${i} \xB7 ${a} \xB7 ${c}\``,"");let l=[];ye(t.groups,"",l);let m=new Map;for(let[b,S]of l){let d=b.split(".")[0]??b,u=m.get(d)??[];u.push([b,S]),m.set(d,u)}for(let[b,S]of m){r.push(`### ${b}`,"","| Token | Value |","| --- | --- |");for(let[d,u]of S)r.push(`| \`${d}\` | \`${u}\` |`);r.push("")}}return`${o.join(`
|
|
6
6
|
`)}
|
|
7
7
|
${r.join(`
|
|
8
|
-
`)}`}s(ln,"renderDesignMd");function dn(e){return e.alpha!==void 0?{colorSpace:"oklch",components:[...e.components],alpha:e.alpha,hex:e.hex}:{colorSpace:"oklch",components:[...e.components],hex:e.hex}}s(dn,"colorValue");function _(e){return{value:e.value,unit:e.unit}}s(_,"dimensionValue");function
|
|
9
|
-
`}s(
|
|
10
|
-
`}s(gn,"renderResolver");var
|
|
11
|
-
`)}s(yn,"renderTs");var
|
|
12
|
-
`}s(In,"serializeManifest");var
|
|
8
|
+
`)}`}s(ln,"renderDesignMd");function dn(e){return e.alpha!==void 0?{colorSpace:"oklch",components:[...e.components],alpha:e.alpha,hex:e.hex}:{colorSpace:"oklch",components:[...e.components],hex:e.hex}}s(dn,"colorValue");function _(e){return{value:e.value,unit:e.unit}}s(_,"dimensionValue");function bo(e){let n=e.shadow,o={color:dn(n.color),offsetX:_(n.offsetX),offsetY:_(n.offsetY),blur:_(n.blur),spread:_(n.spread)};return n.inset&&(o.inset=!0),o}s(bo,"shadowValue");function Ro(e){switch(e.kind){case"ref":return`{${Ae(e.path)}}`;case"color":return dn(e);case"dimension":return _(e);case"fontFamily":return e.family;case"fontWeight":return e.weight;case"number":return e.number;case"strokeStyle":return e.style;case"shadow":return bo(e)}}s(Ro,"projectValue");function ko(e){let n={$value:Ro(e.value),$type:e.type};return e.description!==void 0&&(n.$description=e.description),e.deprecated!==void 0&&(n.$deprecated=e.deprecated),n}s(ko,"projectToken");function be(e){let n={};for(let[o,r]of Object.entries(e))n[I(o)]=h(r)?ko(r):be(r);return n}s(be,"projectGroup");function ee(e,n){let o={$description:n,...be(e.groups)};return Object.keys(e.extensions).length>0&&(o.$extensions=e.extensions),`${JSON.stringify(o,null,2)}
|
|
9
|
+
`}s(ee,"renderSet");function un(e){return ee(e,"Apollion DS \u2014 base set (axis-invariant: border). DTCG 2025.10.")}s(un,"renderBaseSet");function pn(e,n,o,r){return ee(e,`Apollion DS \u2014 colour set. brand=${n} mode=${o} surface=${r}. DTCG 2025.10.`)}s(pn,"renderColorSet");function fn(e,n){return ee(e,`Apollion DS \u2014 spacing set. dimension=${n}. DTCG 2025.10.`)}s(fn,"renderSpacingSet");function mn(e,n){return ee(e,`Apollion DS \u2014 font set. dimension=${n}. DTCG 2025.10.`)}s(mn,"renderFontSet");function gn(e,n){let{modifiers:o}=n,r=[{name:"brand",values:[...o.brand],default:o.brand[0]},{name:"mode",values:[...o.mode],default:o.mode[0]},{name:"surface",values:[...o.surface],default:o.surface[0]},{name:"dimension",values:[...o.dimension],default:o.dimension[0]}],i={name:"apollion-tokens",description:"Apollion DS token resolver \u2014 DTCG 2025.10. Compose the base set with the colour set for the chosen brand/mode/surface and the spacing + font sets for the chosen dimension. NOTE: mode is a topology placeholder in this release (dark resolves identically to light until S6).",sets:[{name:n.base.name,source:n.base.file},...n.spacing.map(a=>({name:a.name,source:a.file})),...n.font.map(a=>({name:a.name,source:a.file})),...n.color.map(a=>({name:a.name,source:a.file}))],modifiers:r,$extensions:{"com.apollion.resolver":{composition:{always:[n.base.name],byModifier:{color:"${brand}.color.${mode}.${surface}",spacing:"spacing.${dimension}",font:"font.${dimension}"}},modeIsPlaceholder:!0}}};return`${JSON.stringify(i,null,2)}
|
|
10
|
+
`}s(gn,"renderResolver");var Io="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function xo(e,n,o){let r=[];if(e.description!==void 0&&r.push(e.description),e.deprecated===!0?r.push("@deprecated"):typeof e.deprecated=="string"&&r.push(`@deprecated ${e.deprecated}`),r.length!==0){o.push(`${n}/**`);for(let t of r)o.push(`${n} * ${t.replace(/\*\//g,"*\\/")}`);o.push(`${n} */`)}}s(xo,"emitDoc");function hn(e,n,o){let r=" ".repeat(n);for(let[t,i]of Object.entries(e))h(i)?(xo(i,r,o),o.push(`${r}${JSON.stringify(t)}: ${JSON.stringify(T(i.value))},`)):(o.push(`${r}${t}: {`),hn(i,n+1,o),o.push(`${r}},`))}s(hn,"emitGroup");function yn(e){let{brand:n,mode:o,surface:r,dimension:t}=e.meta,i=[Io,`// Variant: brand=${n} mode=${o} surface=${r} dimension=${t}`,"","export const tokens = {"];return hn(e.groups,1,i),i.push("} as const;","","export type Tokens = typeof tokens;",""),i.join(`
|
|
11
|
+
`)}s(yn,"renderTs");var So=["light","dark"],vo=["positive","negative"],wo=["compact","normal","spacious"];function ne(e){let n=e.modes??So,o=e.surfaces??vo,r=e.dimensions??wo,t=Object.entries(e.brands).sort(([a],[c])=>a.localeCompare(c)),i=[];for(let[a,c]of t)for(let l of n)for(let m of o)for(let b of r)i.push({brand:a,colors:c,mode:l,surface:m,dimension:b});return i}s(ne,"expandVariants");function bn(e){return`${e.brand}.${e.mode}.${e.surface}.${e.dimension}`}s(bn,"variantName");import{createHash as To}from"node:crypto";function oe(e){return To("sha256").update(e).digest("hex")}s(oe,"sha256");function ke(e){return oe(Re(e))}s(ke,"hashConfig");function Re(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Re).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${Re(e[r])}`).join(",")}}`}s(Re,"stableStringify");function Rn(e){try{let{execSync:n}=Hn("node:child_process");return n("git rev-parse --short HEAD",{cwd:e,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim()}catch{return""}}s(Rn,"detectGitCommit");function kn(){return{node:process.version,platform:`${process.platform}-${process.arch}`}}s(kn,"buildEnv");function In(e){let n=[...e.files].sort((r,t)=>r.path.localeCompare(t.path)),o={configHash:e.configHash,files:n,gitCommit:e.gitCommit,buildEnv:e.buildEnv};return`${JSON.stringify(o,null,2)}
|
|
12
|
+
`}s(In,"serializeManifest");var Do="json/sets",xn="json/resolver.json";function re(e){return`${Do}/${e}.json`}s(re,"setFile");function $o(e,n,o){return`${e}.color.${n}.${o}`}s($o,"colorSetName");function Co(e){return`spacing.${e}`}s(Co,"spacingSetName");function Vo(e){return`font.${e}`}s(Vo,"fontSetName");function te(e,n){e.includes(n)||e.push(n)}s(te,"pushUnique");function Sn(e){let n=ne(e),o=[],r=[],t=[],i=[],a=new Set,c=[],l=new Set,m=[],b=new Set,S=[];for(let d of n){te(o,d.brand),te(r,d.mode),te(t,d.surface),te(i,d.dimension);let u=$o(d.brand,d.mode,d.surface);a.has(u)||(a.add(u),c.push({kind:"color",name:u,file:re(u),brand:d.brand,mode:d.mode,surface:d.surface}));let g=Co(d.dimension);l.has(g)||(l.add(g),m.push({kind:"spacing",name:g,file:re(g),dimension:d.dimension}));let f=Vo(d.dimension);b.has(f)||(b.add(f),S.push({kind:"font",name:f,file:re(f),dimension:d.dimension}))}return{base:{kind:"base",name:"base",file:re("base")},spacing:m,font:S,color:c,modifiers:{brand:o,mode:r,surface:t,dimension:i}}}s(Sn,"planSets");import{toDarkColors as Jo}from"@apollion-dsi/core/themes/colors";import{createFoundation as Gn}from"@apollion-dsi/core/themes/foundation";import{createSemantic as Ko}from"@apollion-dsi/core/themes/semantic";import{defaultInputSpacing as qo}from"@apollion-dsi/core/themes/spacing";import{invertForSurface as Xo}from"@apollion-dsi/core/themes/surface";import{converter as $n,formatHex as M,interpolate as Ao,parse as x,wcagContrast as Cn}from"culori";var W=$n("oklch"),Lo=$n("rgb");function p(e,n,o){let r=x(e),t=x(n);if(!r||!t)return e;let i=Ao([r,t],"oklch");return M(i(o))??e}s(p,"mixOklch");function Oo(e){return e?typeof e=="string"?e:e.base:"#000"}s(Oo,"coerceToHex");var ie=1.3,Eo=.05,vn=.04,A=s((e,n)=>{let o=x(e),r=x(n);return!o||!r?1:Cn(o,r)},"contrastRatio"),B=s(e=>{let n=W(x(e));return n?n.l??0:null},"oklchLightness"),Mo=4.5;function H(e,n,o=Mo){let r=x(n),t=W(x(e));if(!r||!t)return e;let i=A("#fff",n)>=A("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=M(t)??e,l=x(c);if(l&&Cn(l,r)>=o)return c;let m=Math.min(1,Math.max(0,(t.l??0)+i));if(m===(t.l??0))break;t={...t,l:m}}return M(t)??e}s(H,"readableColor");var wn=s((e,n)=>{if(A(e,n)>=ie)return!0;let o=B(e),r=B(n);return o!==null&&r!==null&&Math.abs(o-r)>=Eo},"isPerceptibleState"),Ie=s(e=>e?A("#fff",e)>A("#000",e):!1,"isDarkSurface");function Tn(e,n,o){let r=W(x(e));if(!r)return null;let t={...r,l:o??r.l??0},i=n?vn:-vn;for(let a=0;a<25;a+=1){let c=Math.min(1,Math.max(0,(t.l??0)+i));if(c===(t.l??0))break;t={...t,l:c};let l=M(t);if(l&&A(e,l)>=ie)return l}return M(t)??null}s(Tn,"derivePerceptibleState");function Dn(e,n,o){let r=Tn(e,n,o);if(r&&A(e,r)>=ie)return r;let t=Tn(e,!n);return t&&A(e,t)>=ie?t:r??t}s(Dn,"perceptibleStateFor");function v(e,n){let o=typeof e=="object"&&e!==null?e:void 0,r=Oo(e),t=n.deepDark,i=n.deepLight,a={base:r,dark:p(r,t,.6),action:p(r,t,.2),active:p(r,i,.6),light:p(r,i,.9),onLight:r};if(x(r)){let c=Ie(n.baseLight),l=wn(r,a.action);if(l||(a.action=Dn(r,c)??a.action),!wn(r,a.active)){let m=l?void 0:B(a.action)??void 0;a.active=Dn(r,c,m)??a.active}}if(a.onLight=H(a.action,a.light),o){let c=o.action??a.action,l=o.light??a.light;return{base:r,dark:o.dark??a.dark,action:c,active:o.active??a.active,light:l,onLight:o.onLight??H(c,l)}}return a}s(v,"mountSingleColor");function Vn(e){let n=e.deepLight,o=e.deepDark;return{0:n,5:p(n,o,.05),10:p(n,o,.1),20:p(n,o,.2),30:p(n,o,.3),40:p(n,o,.4),50:p(n,o,.5),60:p(n,o,.6),70:p(n,o,.7),80:p(n,o,.8),90:p(n,o,.9),100:p(n,o,1)}}s(Vn,"mountGreyscaleColors");function An(e){let n=e.deepLight,o=e.deepDark,r=typeof e.primary=="object"&&e.primary?e.primary.base:e.primary,t=s(a=>1/17*(a-1),"interpolation"),i=p(r,o,.5);return{0:p(i,n,t(18)),5:p(i,n,t(17.5)),10:p(i,n,t(17)),20:p(i,n,t(16)),30:p(i,n,t(15)),40:p(i,n,t(14)),50:p(i,n,t(13)),60:p(i,n,t(12)),70:p(i,n,t(11)),80:p(i,n,t(10)),90:p(i,n,t(9)),100:p(i,n,t(8)),110:p(i,n,t(7)),120:p(i,n,t(6)),130:p(i,n,t(5)),140:p(i,n,t(4)),150:p(i,n,t(3)),160:p(i,n,t(2)),170:i,180:p(i,o,.25)}}s(An,"mountNeutralColors");function F(e,n){let o=W(x(e));if(!o)return e;let r=Math.min(1,Math.max(0,(o.l??0)+n));return M({...o,l:r})??e}s(F,"shiftLightness");function se(e,n){let o=W(x(e));if(!o)return e;let r=o.l??0,t=n.min??0,i=n.max??1;return r>=t&&r<=i?e:M({...o,l:Math.min(i,Math.max(t,r))})??e}s(se,"clampLightness");function G(e,n){let o=Lo(x(e));if(!o)return e;let r=Math.min(1,Math.max(0,n)),t=s(i=>Math.round((i??0)*255),"channel");return`rgba(${t(o.r)}, ${t(o.g)}, ${t(o.b)}, ${r})`}s(G,"toRgbaString");import{apcaContrast as ae,DARK_BOOST_TAPER_MAX_L as xe,DARK_ELEVATION_BOOST as Go,EDGE_ALPHA as Se,HALATION_FLOORS as ce,INK_APCA_MIN as ve,INK_MIX as we,LADDER_DELTAS as Ln,MIN_CONTRAST_AA as On,WASH_ALPHA as No}from"@apollion-dsi/core/themes/colors";var jo="#FFFFFF",Te="#000000";function Fo(e){return Ie(e.baseLight)?"dark":"light"}s(Fo,"resolvePolarity");function Po(e){let n=ce.CANVAS_MIN_L;return e<=n?1:e>=xe?0:(xe-e)/(xe-n)}s(Po,"darkElevationBoostFactor");function En(e,n,o){if(Math.abs(ae(e,n))>=o)return e;let r=Math.abs(ae("#ffffff",n))>=Math.abs(ae("#000000",n)),t=e;for(let i=0;i<40;i+=1){let a=F(t,r?.02:-.02);if(a===t||(t=a,Math.abs(ae(t,n))>=o))break}return t}s(En,"ensureApca");function _o(e,n){let o=e.baseLight??jo,r=n==="dark",t=r?se(o,{min:ce.CANVAS_MIN_L}):o,i=F(t,Ln.sunken),a=r?Po(B(t)??0):0,c=s(l=>Ln[l]+a*Go[l],"delta");return{canvas:t,sunken:r?se(i,{min:ce.CANVAS_MIN_L}):i,paper:F(t,c("paper")),raised:F(t,c("raised")),overlay:F(t,c("overlay")),scrim:r?e.deepLight??Te:e.neutral?.["180"]??e.baseDark??Te}}s(_o,"deriveSurface");function Bo(e,n){let o=e.baseDark??Te,r=se(En(H(o,n.paper,On),n.paper,ve.primary),{max:ce.INK_MAX_L}),t=s((i,a)=>En(H(p(r,n.canvas,i),n.paper,On),n.paper,a),"tier");return{primary:r,secondary:t(we.secondary,ve.secondary),muted:t(we.muted,ve.muted),disabled:p(r,n.canvas,we.disabled)}}s(Bo,"deriveInk");function Ho(e){return{hairline:G(e.primary,Se.hairline),border:G(e.primary,Se.border),strong:G(e.primary,Se.strong)}}s(Ho,"deriveEdge");function Wo(e,n){let o=No[n];return{hover:G(e.primary,o.hover),pressed:G(e.primary,o.pressed),selected:G(e.primary,o.selected)}}s(Wo,"deriveWash");function zo(e,n){return n?{surface:{...e.surface,...n.surface},ink:{...e.ink,...n.ink},edge:{...e.edge,...n.edge},wash:{...e.wash,...n.wash}}:e}s(zo,"applyOverride");function Mn(e,n){let o=Fo(e),r=_o(e,o),t=Bo(e,r),i={surface:r,ink:t,edge:Ho(t),wash:Wo(t,o)};return zo(i,n?.[o])}s(Mn,"resolveSurfaceLadder");function Uo(e){let n=An(e);return{baseDark:e.baseDark,baseLight:e.baseLight,deepDark:e.deepDark,deepLight:e.deepLight,transparent:e.transparent??"transparent",neutral:n,grayscale:Vn(e),...Mn({...e,neutral:n},e.ladder),main:v(e.main,e),opposite:v(e.opposite,e),complementary:v(e.complementary,e),danger:v(e.danger,e),information:v(e.information,e),success:v(e.success,e),warning:v(e.warning,e),primary:v(e.primary,e),secondary:v(e.secondary,e),tertiary:v(e.tertiary,e)}}s(Uo,"composeColors");function L(e,n=qo){let o=e.mode==="dark"?Jo(e.colors):e.colors,r=Uo(o),t=K(n,e.dimension),i=Ko({colors:r,spacing:t}),a=Gn(i);return e.surface==="negative"&&(a=Gn(Xo({semantic:i,colors:r},"negative").semantic)),{foundation:a,colors:r}}s(L,"buildVariantThemes");async function Ct(e){let{config:n,outDir:o,cwd:r=process.cwd(),verbose:t=!1}=e,i=ne(n),a=n.output??{};if(i.length===0)throw new Error("apollion-tokens build: no variants (config.brands is empty)");let c=await Yo(z(Qo(),"apollion-tokens-"));try{let l=[],m=s(async(d,u)=>{await er(c,d,u),l.push({path:d,sha256:oe(u)}),t&&console.log(` \u2713 ${d}`)},"emit");if(a.json){let d=Sn(n),u=[],g=Ue();u.push(g),await m(d.base.file,un(g));for(let f of d.spacing){let R=i.find(J=>J.dimension===f.dimension),{foundation:$}=L(R),C=Qe($,f.dimension);u.push(C),await m(f.file,fn(C,f.dimension))}for(let f of d.font){let R=Ye(f.dimension);u.push(R),await m(f.file,mn(R,f.dimension))}for(let f of d.color){let R=i.find(le=>le.brand===f.brand&&le.mode===f.mode&&le.surface===f.surface),{foundation:$,colors:C}=L(R),J=Ze($,C);u.push(J),await m(f.file,pn(J,f.brand,f.mode,f.surface))}ze(u),await m(xn,gn(n,d))}if(a.css||a.ts)for(let d of i){let{foundation:u,colors:g}=L(d),f=j(u,g,d),R=bn(d);a.css&&await m(`css/${R}.css`,an(f,{rgbCompanions:a.tailwind})),a.ts&&await m(`ts/${R}.d.ts`,yn(f))}if(a.cssModes){let d=new Map;for(let u of i){let g=`${u.brand}.${u.surface}.${u.dimension}`,f=d.get(g)??{};f[u.mode]=u,d.set(g,f)}for(let[u,{light:g,dark:f}]of d){if(!g||!f)throw new Error(`apollion-tokens build: output.cssModes needs both modes for ${u} (config.modes)`);let R=L(g),$=L(f),C=cn(j(R.foundation,R.colors,g),j($.foundation,$.colors,f),{rgbCompanions:a.tailwind});await m(`css/${u}.modes.css`,C)}}if(a.tailwind){let d=i[0],{foundation:u,colors:g}=L(d),f=j(u,g,d);await m("tailwind/preset.mjs",rn(f)),await m("tailwind/tw-merge.mjs",tn(f))}if(a.designMd){let d=[...new Set(i.map(u=>u.brand))];for(let u of d){let f=i.filter(R=>R.brand===u).map(R=>{let{foundation:$,colors:C}=L(R);return j($,C,R)});await m(`design/${u}.design.md`,ln(u,f))}}let b={configHash:ke(n),files:l,gitCommit:Rn(r),buildEnv:kn()},S=In(b);return await Pn(z(c,"manifest.json"),S),await jn(o,{recursive:!0,force:!0}),await Fn(_n(o),{recursive:!0}),await Zo(c,o),t&&console.log(`\u2713 ${l.length} files \u2192 ${o}`),{manifest:b,outDir:o}}catch(l){throw await jn(c,{recursive:!0,force:!0}).catch(()=>{}),l}}s(Ct,"build");async function Vt(e){let{config:n,outDir:o}=e,r;try{r=JSON.parse(await Nn(z(o,"manifest.json"),"utf8"))}catch{return!1}if(r.configHash!==ke(n))return!1;for(let t of r.files){let i;try{i=await Nn(z(o,t.path))}catch{return!1}if(oe(i)!==t.sha256)return!1}return!0}s(Vt,"check");async function er(e,n,o){let r=z(e,n);await Fn(_n(r),{recursive:!0}),await Pn(r,o)}s(er,"writeAt");export{Ct as build,Vt as check};
|
package/lib/builders/colors.d.ts
CHANGED
|
@@ -35,6 +35,8 @@ import type { AcceptColorType, ColorPalleteInterface, ColorPalleteOverrideInterf
|
|
|
35
35
|
export declare function mixOklch(a: string, b: string, t: number): string;
|
|
36
36
|
/** Rotate hue 180° in OKLch space. Semantic shift vs HSL — see core for details. */
|
|
37
37
|
export declare function getOppositeColor(color: AcceptColorType): string;
|
|
38
|
+
/** OKLch L of `color`, or `null` if it fails to parse. */
|
|
39
|
+
export declare const oklchLightness: (color: string) => number | null;
|
|
38
40
|
/**
|
|
39
41
|
* Adjusts the OKLch L of `color` until it passes `minRatio` against `background`,
|
|
40
42
|
* preserving hue/chroma — **byte-for-byte mirror** of the core's `readableColor`
|
package/lib/cli.mjs
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var Yn=Object.defineProperty;var i=(e,n)=>Yn(e,"name",{value:n,configurable:!0}),Zn=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,o)=>(typeof require<"u"?require:n)[o]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});import{readFile as hr}from"node:fs/promises";import{resolve as Le}from"node:path";import{mkdir as Wn,mkdtemp as tr,readFile as Bn,rename as ir,rm as Hn,writeFile as zn}from"node:fs/promises";import{tmpdir as sr}from"node:os";import{dirname as Jn,join as q}from"node:path";import{converter as Io,parse as xo}from"culori";import{defaultInputBorder as Y}from"@apollion-dsi/core/themes/border";import{createReadableTextLayer as ro}from"@apollion-dsi/core/themes/colors";import{createDeth as to,levelValues as io}from"@apollion-dsi/core/themes/depth";import{createFont as so,defaultInputFont as E}from"@apollion-dsi/core/themes/font";import{defaultInputSpacing as Ge}from"@apollion-dsi/core/themes/spacing";import{converter as ao,formatHex as co,parse as lo}from"culori";import{defaultInputBreakpoints as Qn}from"@apollion-dsi/core/themes/breakpoints";function Oe(e=Qn){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Oe,"breakpointEntries");import{defaultInputContainerSizes as eo,defaultInputLayout as no}from"@apollion-dsi/core/themes/layout";function Me(e=eo){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Me,"containerSizeEntries");function Ee(e=no){return[["page-max-width",`${e.pageMaxWidth}px`]]}i(Ee,"layoutEntries");import{DIMENSION_MULTIPLIERS as oo}from"@apollion-dsi/core/themes/dimension";function K({multiplier:e=.25,alias:n},o){let r=o!==void 0?oo[o]:e;return(...t)=>t.map(s=>{let a=typeof s=="string"?n[s]:s;return`${r*a}rem`}).join(" ")}i(K,"createSpacing");var fe={"bg.primary":{description:"Primary action surface \u2014 the brand\u2019s dominant call-to-action background."},"bg.secondary":{description:"Secondary action surface \u2014 supporting actions paired with the primary."},"bg.danger":{description:"Destructive / error surface \u2014 irreversible or failing actions."},"bg.success":{description:"Positive confirmation surface \u2014 completed or healthy states."},"bg.info":{description:"Informational surface \u2014 neutral, non-blocking notices.",deprecated:"Use bg.information once the foundation role is renamed (tracked for S6)."},"bg.canvas":{description:"Page ground \u2014 the theme canvas (never pure black in dark)."},"bg.paper":{description:"Component ground (cards, inputs, tables) \u2014 lighter than the canvas in both modes."},"bg.overlay":{description:"Top of the elevation ladder \u2014 modal / dialog panels."},"text.primary":{description:"Primary neutral ink \u2014 AA + APCA Lc \u2265 75 over bg.paper and bg.canvas."},"text.muted":{description:"Muted neutral ink \u2014 AA + APCA Lc \u2265 45 over bg.paper."},"edge.border":{description:"Default control outline \u2014 primary ink at 20 % alpha, legible on any ground."},"edge.hairline":{description:"Dividers and card outlines \u2014 primary ink at 10 % alpha."},"text.on-primary":{description:"Text/icon colour with guaranteed contrast over bg.primary."},"text.on-danger":{description:"Text/icon colour with guaranteed contrast over bg.danger."},"space.medium":{description:"Base spacing step (1rem at normal density) \u2014 the layout rhythm unit."},"space.large":{description:"Comfortable spacing step \u2014 section padding and card gutters."},"spacing.md":{description:"Medium foundation spacing alias \u2014 references the space.medium primitive."},"spacing.lg":{description:"Large foundation spacing alias \u2014 references the space.large primitive."},"border.radius.md":{description:"Default card corner radius."},"border.width.thin":{description:"Hairline border \u2014 dividers and default input outlines."},"border.width.regular":{description:"Standard emphasis border \u2014 focused/active controls."}};function me(e){let n=Object.keys(fe).filter(o=>!e.has(o));if(n.length>0)throw new Error(`token-meta: ${n.length} stale TOKEN_META key(s) resolve to no IR node: ${n.join(", ")}. Update src/token-meta.ts to match the current IR paths.`)}i(me,"assertTokenMetaResolves");var uo=ao("oklch");function y(e){return typeof e.type=="string"&&"value"in e}i(y,"isToken");function x(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}i(x,"kebab");function je(e){return e.split(".").map(x).join(".")}i(je,"kebabPath");function T(e){return e.kind==="ref"?e.resolved.raw:e.raw}i(T,"rawValue");function X(e,n){return Number(e.toFixed(n))||0}i(X,"round");function ge(e){let n=uo(lo(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[X(n.l,4),X(n.c,4),X(n.h??0,2)],r=co(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:X(n.alpha,4),hex:r}:{kind:"color",raw:e,components:o,hex:r}}i(ge,"toColorValue");var Pe=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function $(e){let n=Pe.exec(e.trim());if(n)return{kind:"dimension",raw:e,value:Number(n[1]),unit:n[2]};let o=Number.parseFloat(e);return{kind:"dimension",raw:e,value:Number.isFinite(o)?o:0,unit:"rem"}}i($,"toDimensionValue");function I(e){return{type:"color",value:ge(e)}}i(I,"colorToken");function G(e){let n={};for(let[o,r]of Object.entries(e))n[o]=I(r);return n}i(G,"recordColorGroup");function Ne(e){let n=ro(e),o={};for(let[r,t]of Object.entries(n.palettes))o[r]=I(t);return o.neutral=G(n.neutral),o}i(Ne,"buildReadableTextGroup");var po=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function Fe(e){let n={};for(let o of po){let r=e[o];n[o]={base:I(r.base),dark:I(r.dark),action:I(r.action),active:I(r.active),light:I(r.light),onLight:I(r.onLight)}}return n.grayscale=G(e.grayscale),n.neutral=G(e.neutral),n.surface=G(e.surface),n.ink=G(e.ink),n.edge=G(e.edge),n.wash=G(e.wash),n.baseDark=I(e.baseDark??"#000000"),n.baseLight=I(e.baseLight??"#ffffff"),n.deepDark=I(e.deepDark??"#000000"),n.deepLight=I(e.deepLight??"#ffffff"),n}i(Fe,"buildColorPrimitives");function _e(e){let n=K(Ge,e),o={};for(let r of Object.keys(Ge.alias))o[r]={type:"dimension",value:$(n(r))};return o}i(_e,"buildSpacePrimitives");function Be(){let e={};for(let[n,o]of Object.entries(Y.borderWidth))e[n]={type:"dimension",value:$(o)};return e}i(Be,"buildBorderWidthPrimitives");function fo(e,n){return{color:Fe(e),space:_e(n),borderWidth:Be()}}i(fo,"buildPrimitives");var He={primary:"color.primary.base",secondary:"color.secondary.base",tertiary:"color.tertiary.base",success:"color.success.base",danger:"color.danger.base",warning:"color.warning.base",info:"color.information.base",canvas:"color.surface.canvas",sunken:"color.surface.sunken",paper:"color.surface.paper",raised:"color.surface.raised",overlay:"color.surface.overlay"},We={onPrimary:"color.baseLight",onSecondary:"color.baseLight",onTertiary:"color.baseDark",onSuccess:"color.baseLight",onDanger:"color.baseLight",onWarning:"color.baseDark",onInfo:"color.baseLight",primary:"color.ink.primary",secondary:"color.ink.secondary",muted:"color.ink.muted",disabled:"color.ink.disabled"},ze={hairline:"color.edge.hairline",border:"color.edge.border",strong:"color.edge.strong"};function mo(e,n){let o=e;for(let r of n.split(".").slice(1))if(o&&typeof o=="object"&&r in o)o=o[r];else return;return typeof o=="string"?o:void 0}i(mo,"lookupPrimitive");function F(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=o[t],c=a?mo(n,a):void 0;r[t]=a&&c===s?{type:"color",value:{kind:"ref",path:a,resolved:ge(s)}}:I(s)}return r}i(F,"colorRefGroup");var Je={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},go={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function ho(e,n){let o=n.split("."),r=o[0]==="border-width"?"borderWidth":o[0],t=e[r];for(let s of o.slice(1))if(t&&!y(t)&&s in t)t=t[s];else return;return t&&y(t)&&t.value.kind==="dimension"?t.value.raw:void 0}i(ho,"lookupDimensionPrimitive");function he(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=o[t],c=a?ho(n,a):void 0;r[t]=a&&c===s?{type:"dimension",value:{kind:"ref",path:a,resolved:$(s)}}:{type:"dimension",value:$(s)}}return r}i(he,"dimensionRefGroup");function qe(e){let n={},o={};for(let[s,a]of Object.entries(Y.borderRadius))Pe.test(a)?n[s]={type:"dimension",value:$(a)}:o[s]=a;let r=he(Y.borderWidth,e,go),t={};for(let[s,a]of Object.entries(Y.borderStyle))t[s]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:r,style:t},extensions:o}}i(qe,"buildBorder");function Ue(e){let n=so(E,e),o={};for(let[c,l]of Object.entries(E.fontFamily)){let f=l.replace(/;\s*$/,"").trim();o[c]={type:"fontFamily",value:{kind:"fontFamily",raw:f,family:f}}}let r={};for(let[c,l]of Object.entries(n.fontSize))r[c]={type:"dimension",value:$(l)};let t={};for(let[c,l]of Object.entries(E.fontWeight))t[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${l}`,weight:l}};let s={};for(let[c,l]of Object.entries(E.lineHeight))s[c]={type:"number",value:{kind:"number",raw:`${l}`,number:l}};let a={letterSpacing:E.letterSpacing,textTransform:E.textTransform,fontStyle:E.fontStyle};return{group:{family:o,size:r,weight:t,lineHeight:s},extensions:a}}i(Ue,"buildFont");var yo=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function bo(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let r=n.match(yo),t=r?r[0]:"#000000",a=(r?n.slice(0,r.index).trim():n).split(/\s+/).filter(Boolean),c=i(l=>$(a[l]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:ge(t),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}i(bo,"parseShadow");function Ke(e){let n=to(e),o={};for(let r of Object.keys(io))o[r]={type:"shadow",value:bo(n(r))};return o}i(Ke,"buildShadow");function Z(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=n?`${n}.${x(t)}`:x(t);if(y(s)){o.add(a);let c=fe[a];r[t]=c&&(c.description!==void 0||c.deprecated!==void 0)?{...s,...c.description!==void 0?{description:c.description}:{},...c.deprecated!==void 0?{deprecated:c.deprecated}:{}}:s}else r[t]=Z(s,a,o)}return r}i(Z,"decorateGroup");function ko(e){let n=new Set,o=Z(e.primitives,"",n),r=Z(e.groups,"",n);return me(n),{...e,primitives:o,groups:r}}i(ko,"decorateMeta");function Q(e,n){return Z(e,"",n)}i(Q,"decorateSlice");function Xe(e,n,o){for(let[r,t]of Object.entries(e)){let s=n?`${n}.${x(r)}`:x(r);y(t)?o.add(s):Xe(t,s,o)}}i(Xe,"collectPaths");function Ye(e){let n=new Set;for(let o of e)Xe(o.groups,"",n);me(n)}i(Ye,"assertSlicesMetaComplete");function Ze(){let e={};for(let[n,o]of Oe())e[n]={type:"dimension",value:$(o)};return e}i(Ze,"buildBreakpoints");function Qe(){let e={};for(let[n,o]of Me())e[n]={type:"dimension",value:$(o)};return e}i(Qe,"buildContainerSizes");function en(){let e={};for(let[n,o]of Ee())e[n]={type:"dimension",value:$(o)};return e}i(en,"buildLayoutConstants");var nn={unit:"px",interval:"half-open [value, next) \u2014 min-width sets, ascending",cssVarsUsage:"informational only \u2014 var() is invalid inside a @media prelude"};function on(){let e=Be(),o=qe({borderWidth:e}),r={"com.apollion.breakpoint":nn};Object.keys(o.extensions).length>0&&(r["com.apollion.border"]={radius:o.extensions});let t=new Set;return{groups:Q({"border-width":e,border:o.group,breakpoint:Ze(),"container-size":Qe(),layout:en()},t),extensions:r}}i(on,"buildBaseIR");function rn(e){let n=Ue(e),o=new Set;return{groups:Q({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}i(rn,"buildFontIR");function tn(e,n){let o=Fe(n),r=new Set;return{groups:Q({color:o,bg:F(e.bg,n,He),text:F(e.text,n,We),edge:F(e.edge,n,ze),tx:Ne(n),shadow:Ke(n)},r),extensions:{}}}i(tn,"buildColorIR");function sn(e,n){let o=_e(n),r={space:o},t=new Set;return{groups:Q({space:o,spacing:he(e.spacing,r,Je)},t),extensions:{}}}i(sn,"buildSpacingIR");function Ro(e,n,o){let r={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},t=fo(n,o.dimension),s=qe(t),a=Ue(o.dimension),c={"com.apollion.variant":r,"com.apollion.font":a.extensions,"com.apollion.breakpoint":nn};Object.keys(s.extensions).length>0&&(c["com.apollion.border"]={radius:s.extensions});let l={description:`Apollion DS tokens \u2014 DTCG 2025.10. Variant: ${r.brand}/${r.mode}/${r.surface}/${r.dimension}.`,meta:r,primitives:t,groups:{bg:F(e.bg,n,He),text:F(e.text,n,We),edge:F(e.edge,n,ze),tx:Ne(n),spacing:he(e.spacing,t,Je),border:s.group,breakpoint:Ze(),"container-size":Qe(),layout:en(),font:a.group,shadow:Ke(n)},extensions:c};return ko(l)}i(Ro,"buildIR");var _=Ro;var So=Io("rgb"),an="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function ye(e){if(e.value.kind==="color")return e.value;if(e.value.kind==="ref"&&e.value.resolved.kind==="color")return e.value.resolved}i(ye,"colorPayload");function be(e){return e.alpha===void 0}i(be,"isOpaqueColor");function cn(e){let n=So(xo(e.hex));if(!n)return"0 0 0";let o=i(r=>Math.min(255,Math.max(0,Math.round(r*255))),"channel");return`${o(n.r)} ${o(n.g)} ${o(n.b)}`}i(cn,"rgbTriplet");function H(e,n=[]){let o=new Map;for(let[r,t]of Object.entries(e)){let s=[...n,x(r)];if(y(t))o.set(s.join("-"),t);else for(let[a,c]of H(t,s))o.set(a,c)}return o}i(H,"flatTokens");function b(e,...n){let o=e[n[0]];for(let r of n.slice(1)){if(!o||y(o))return{};o=o[r]}return o&&!y(o)?o:{}}i(b,"groupAt");function ln(e){let n=[];for(let o of["bg","text","edge","tx"])for(let[r,t]of H(b(e.groups,o),[o])){let s=ye(t);s&&n.push({key:r,cssVar:`--apollion-${r}`,opaque:be(s)})}return n}i(ln,"colorEntries");function L(e,n){return[...H(e)].map(([o])=>[o,`var(--apollion-${[...n,o].join("-")})`])}i(L,"varEntries");function C(e,n,o){if(o.length!==0){e.push(` ${n}: {`);for(let[r,t]of o)e.push(` ${JSON.stringify(r)}: ${JSON.stringify(t)},`);e.push(" },")}}i(C,"pushScale");function dn(e){let n=[an,"// Tailwind preset over the Apollion foundation tokens \u2014 requires dist/css/ vars in scope.","","const preset = {"," theme: {"," extend: {"],o=ln(e);n.push(" colors: {");for(let{key:r,cssVar:t,opaque:s}of o)s?n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`rgb(var(${t}-rgb) / <alpha-value>)`)},`):(n.push(` // ${r} carries its own alpha \u2014 excluded from the <alpha-value> modifier form.`),n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`var(${t})`)},`));return n.push(" },"),C(n,"screens",[...H(b(e.groups,"breakpoint"))].filter(([r])=>r!=="xs").map(([r,t])=>[r,T(t.value)])),C(n,"spacing",L(b(e.groups,"spacing"),["spacing"])),C(n,"borderRadius",L(b(e.groups,"border","radius"),["border","radius"])),C(n,"borderWidth",L(b(e.groups,"border","width"),["border","width"])),C(n,"fontFamily",L(b(e.groups,"font","family"),["font","family"])),C(n,"fontSize",L(b(e.groups,"font","size"),["font","size"])),C(n,"fontWeight",L(b(e.groups,"font","weight"),["font","weight"])),C(n,"lineHeight",L(b(e.groups,"font","lineHeight"),["font","line-height"])),C(n,"boxShadow",L(b(e.groups,"shadow"),["shadow"])),n.push(" },"," },","};","","export default preset;",""),n.join(`
|
|
2
|
+
var Zn=Object.defineProperty;var i=(e,n)=>Zn(e,"name",{value:n,configurable:!0}),Qn=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,o)=>(typeof require<"u"?require:n)[o]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});import{readFile as Rr}from"node:fs/promises";import{resolve as Ve}from"node:path";import{mkdir as zn,mkdtemp as ar,readFile as Hn,rename as cr,rm as Wn,writeFile as Jn}from"node:fs/promises";import{tmpdir as lr}from"node:os";import{dirname as Kn,join as q}from"node:path";import{converter as xo,parse as So}from"culori";import{defaultInputBorder as Z}from"@apollion-dsi/core/themes/border";import{createReadableTextLayer as to}from"@apollion-dsi/core/themes/colors";import{createDeth as io,levelValues as so}from"@apollion-dsi/core/themes/depth";import{createFont as ao,defaultInputFont as M}from"@apollion-dsi/core/themes/font";import{defaultInputSpacing as Ge}from"@apollion-dsi/core/themes/spacing";import{converter as co,formatHex as lo,parse as uo}from"culori";import{defaultInputBreakpoints as eo}from"@apollion-dsi/core/themes/breakpoints";function Le(e=eo){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Le,"breakpointEntries");import{defaultInputContainerSizes as no,defaultInputLayout as oo}from"@apollion-dsi/core/themes/layout";function Ee(e=no){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Ee,"containerSizeEntries");function Me(e=oo){return[["page-max-width",`${e.pageMaxWidth}px`]]}i(Me,"layoutEntries");import{DIMENSION_MULTIPLIERS as ro}from"@apollion-dsi/core/themes/dimension";function X({multiplier:e=.25,alias:n},o){let r=o!==void 0?ro[o]:e;return(...t)=>t.map(s=>{let a=typeof s=="string"?n[s]:s;return`${r*a}rem`}).join(" ")}i(X,"createSpacing");var me={"bg.primary":{description:"Primary action surface \u2014 the brand\u2019s dominant call-to-action background."},"bg.secondary":{description:"Secondary action surface \u2014 supporting actions paired with the primary."},"bg.danger":{description:"Destructive / error surface \u2014 irreversible or failing actions."},"bg.success":{description:"Positive confirmation surface \u2014 completed or healthy states."},"bg.info":{description:"Informational surface \u2014 neutral, non-blocking notices.",deprecated:"Use bg.information once the foundation role is renamed (tracked for S6)."},"bg.canvas":{description:"Page ground \u2014 the theme canvas (never pure black in dark)."},"bg.paper":{description:"Component ground (cards, inputs, tables) \u2014 lighter than the canvas in both modes; the dark step is widened for near-black grounds so cards stay separated on LCD/SDR panels (ADR-026)."},"bg.overlay":{description:"Top of the elevation ladder \u2014 modal / dialog panels."},"text.primary":{description:"Primary neutral ink \u2014 AA + APCA Lc \u2265 75 over bg.paper and bg.canvas."},"text.muted":{description:"Muted neutral ink \u2014 AA + APCA Lc \u2265 45 over bg.paper."},"edge.border":{description:"Default control outline \u2014 primary ink at 20 % alpha, legible on any ground."},"edge.hairline":{description:"Dividers and card outlines \u2014 primary ink at 10 % alpha."},"text.on-primary":{description:"Text/icon colour with guaranteed contrast over bg.primary."},"text.on-danger":{description:"Text/icon colour with guaranteed contrast over bg.danger."},"space.medium":{description:"Base spacing step (1rem at normal density) \u2014 the layout rhythm unit."},"space.large":{description:"Comfortable spacing step \u2014 section padding and card gutters."},"spacing.md":{description:"Medium foundation spacing alias \u2014 references the space.medium primitive."},"spacing.lg":{description:"Large foundation spacing alias \u2014 references the space.large primitive."},"border.radius.md":{description:"Default card corner radius."},"border.width.thin":{description:"Hairline border \u2014 dividers and default input outlines."},"border.width.regular":{description:"Standard emphasis border \u2014 focused/active controls."}};function ge(e){let n=Object.keys(me).filter(o=>!e.has(o));if(n.length>0)throw new Error(`token-meta: ${n.length} stale TOKEN_META key(s) resolve to no IR node: ${n.join(", ")}. Update src/token-meta.ts to match the current IR paths.`)}i(ge,"assertTokenMetaResolves");var po=co("oklch");function y(e){return typeof e.type=="string"&&"value"in e}i(y,"isToken");function x(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}i(x,"kebab");function je(e){return e.split(".").map(x).join(".")}i(je,"kebabPath");function $(e){return e.kind==="ref"?e.resolved.raw:e.raw}i($,"rawValue");function Y(e,n){return Number(e.toFixed(n))||0}i(Y,"round");function he(e){let n=po(uo(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[Y(n.l,4),Y(n.c,4),Y(n.h??0,2)],r=lo(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:Y(n.alpha,4),hex:r}:{kind:"color",raw:e,components:o,hex:r}}i(he,"toColorValue");var Pe=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function T(e){let n=Pe.exec(e.trim());if(n)return{kind:"dimension",raw:e,value:Number(n[1]),unit:n[2]};let o=Number.parseFloat(e);return{kind:"dimension",raw:e,value:Number.isFinite(o)?o:0,unit:"rem"}}i(T,"toDimensionValue");function I(e){return{type:"color",value:he(e)}}i(I,"colorToken");function G(e){let n={};for(let[o,r]of Object.entries(e))n[o]=I(r);return n}i(G,"recordColorGroup");function Ne(e){let n=to(e),o={};for(let[r,t]of Object.entries(n.palettes))o[r]=I(t);return o.neutral=G(n.neutral),o}i(Ne,"buildReadableTextGroup");var fo=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function _e(e){let n={};for(let o of fo){let r=e[o];n[o]={base:I(r.base),dark:I(r.dark),action:I(r.action),active:I(r.active),light:I(r.light),onLight:I(r.onLight)}}return n.grayscale=G(e.grayscale),n.neutral=G(e.neutral),n.surface=G(e.surface),n.ink=G(e.ink),n.edge=G(e.edge),n.wash=G(e.wash),n.baseDark=I(e.baseDark??"#000000"),n.baseLight=I(e.baseLight??"#ffffff"),n.deepDark=I(e.deepDark??"#000000"),n.deepLight=I(e.deepLight??"#ffffff"),n}i(_e,"buildColorPrimitives");function Fe(e){let n=X(Ge,e),o={};for(let r of Object.keys(Ge.alias))o[r]={type:"dimension",value:T(n(r))};return o}i(Fe,"buildSpacePrimitives");function Be(){let e={};for(let[n,o]of Object.entries(Z.borderWidth))e[n]={type:"dimension",value:T(o)};return e}i(Be,"buildBorderWidthPrimitives");function mo(e,n){return{color:_e(e),space:Fe(n),borderWidth:Be()}}i(mo,"buildPrimitives");var He={primary:"color.primary.base",secondary:"color.secondary.base",tertiary:"color.tertiary.base",success:"color.success.base",danger:"color.danger.base",warning:"color.warning.base",info:"color.information.base",canvas:"color.surface.canvas",sunken:"color.surface.sunken",paper:"color.surface.paper",raised:"color.surface.raised",overlay:"color.surface.overlay"},We={onPrimary:"color.baseLight",onSecondary:"color.baseLight",onTertiary:"color.baseDark",onSuccess:"color.baseLight",onDanger:"color.baseLight",onWarning:"color.baseDark",onInfo:"color.baseLight",primary:"color.ink.primary",secondary:"color.ink.secondary",muted:"color.ink.muted",disabled:"color.ink.disabled"},ze={hairline:"color.edge.hairline",border:"color.edge.border",strong:"color.edge.strong"};function go(e,n){let o=e;for(let r of n.split(".").slice(1))if(o&&typeof o=="object"&&r in o)o=o[r];else return;return typeof o=="string"?o:void 0}i(go,"lookupPrimitive");function _(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=o[t],c=a?go(n,a):void 0;r[t]=a&&c===s?{type:"color",value:{kind:"ref",path:a,resolved:he(s)}}:I(s)}return r}i(_,"colorRefGroup");var Je={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},ho={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function yo(e,n){let o=n.split("."),r=o[0]==="border-width"?"borderWidth":o[0],t=e[r];for(let s of o.slice(1))if(t&&!y(t)&&s in t)t=t[s];else return;return t&&y(t)&&t.value.kind==="dimension"?t.value.raw:void 0}i(yo,"lookupDimensionPrimitive");function ye(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=o[t],c=a?yo(n,a):void 0;r[t]=a&&c===s?{type:"dimension",value:{kind:"ref",path:a,resolved:T(s)}}:{type:"dimension",value:T(s)}}return r}i(ye,"dimensionRefGroup");function Ke(e){let n={},o={};for(let[s,a]of Object.entries(Z.borderRadius))Pe.test(a)?n[s]={type:"dimension",value:T(a)}:o[s]=a;let r=ye(Z.borderWidth,e,ho),t={};for(let[s,a]of Object.entries(Z.borderStyle))t[s]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:r,style:t},extensions:o}}i(Ke,"buildBorder");function qe(e){let n=ao(M,e),o={};for(let[c,l]of Object.entries(M.fontFamily)){let f=l.replace(/;\s*$/,"").trim();o[c]={type:"fontFamily",value:{kind:"fontFamily",raw:f,family:f}}}let r={};for(let[c,l]of Object.entries(n.fontSize))r[c]={type:"dimension",value:T(l)};let t={};for(let[c,l]of Object.entries(M.fontWeight))t[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${l}`,weight:l}};let s={};for(let[c,l]of Object.entries(M.lineHeight))s[c]={type:"number",value:{kind:"number",raw:`${l}`,number:l}};let a={letterSpacing:M.letterSpacing,textTransform:M.textTransform,fontStyle:M.fontStyle};return{group:{family:o,size:r,weight:t,lineHeight:s},extensions:a}}i(qe,"buildFont");var bo=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function Ro(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let r=n.match(bo),t=r?r[0]:"#000000",a=(r?n.slice(0,r.index).trim():n).split(/\s+/).filter(Boolean),c=i(l=>T(a[l]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:he(t),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}i(Ro,"parseShadow");function Ue(e){let n=io(e),o={};for(let r of Object.keys(so))o[r]={type:"shadow",value:Ro(n(r))};return o}i(Ue,"buildShadow");function Q(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=n?`${n}.${x(t)}`:x(t);if(y(s)){o.add(a);let c=me[a];r[t]=c&&(c.description!==void 0||c.deprecated!==void 0)?{...s,...c.description!==void 0?{description:c.description}:{},...c.deprecated!==void 0?{deprecated:c.deprecated}:{}}:s}else r[t]=Q(s,a,o)}return r}i(Q,"decorateGroup");function ko(e){let n=new Set,o=Q(e.primitives,"",n),r=Q(e.groups,"",n);return ge(n),{...e,primitives:o,groups:r}}i(ko,"decorateMeta");function ee(e,n){return Q(e,"",n)}i(ee,"decorateSlice");function Xe(e,n,o){for(let[r,t]of Object.entries(e)){let s=n?`${n}.${x(r)}`:x(r);y(t)?o.add(s):Xe(t,s,o)}}i(Xe,"collectPaths");function Ye(e){let n=new Set;for(let o of e)Xe(o.groups,"",n);ge(n)}i(Ye,"assertSlicesMetaComplete");function Ze(){let e={};for(let[n,o]of Le())e[n]={type:"dimension",value:T(o)};return e}i(Ze,"buildBreakpoints");function Qe(){let e={};for(let[n,o]of Ee())e[n]={type:"dimension",value:T(o)};return e}i(Qe,"buildContainerSizes");function en(){let e={};for(let[n,o]of Me())e[n]={type:"dimension",value:T(o)};return e}i(en,"buildLayoutConstants");var nn={unit:"px",interval:"half-open [value, next) \u2014 min-width sets, ascending",cssVarsUsage:"informational only \u2014 var() is invalid inside a @media prelude"};function on(){let e=Be(),o=Ke({borderWidth:e}),r={"com.apollion.breakpoint":nn};Object.keys(o.extensions).length>0&&(r["com.apollion.border"]={radius:o.extensions});let t=new Set;return{groups:ee({"border-width":e,border:o.group,breakpoint:Ze(),"container-size":Qe(),layout:en()},t),extensions:r}}i(on,"buildBaseIR");function rn(e){let n=qe(e),o=new Set;return{groups:ee({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}i(rn,"buildFontIR");function tn(e,n){let o=_e(n),r=new Set;return{groups:ee({color:o,bg:_(e.bg,n,He),text:_(e.text,n,We),edge:_(e.edge,n,ze),tx:Ne(n),shadow:Ue(n)},r),extensions:{}}}i(tn,"buildColorIR");function sn(e,n){let o=Fe(n),r={space:o},t=new Set;return{groups:ee({space:o,spacing:ye(e.spacing,r,Je)},t),extensions:{}}}i(sn,"buildSpacingIR");function Io(e,n,o){let r={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},t=mo(n,o.dimension),s=Ke(t),a=qe(o.dimension),c={"com.apollion.variant":r,"com.apollion.font":a.extensions,"com.apollion.breakpoint":nn};Object.keys(s.extensions).length>0&&(c["com.apollion.border"]={radius:s.extensions});let l={description:`Apollion DS tokens \u2014 DTCG 2025.10. Variant: ${r.brand}/${r.mode}/${r.surface}/${r.dimension}.`,meta:r,primitives:t,groups:{bg:_(e.bg,n,He),text:_(e.text,n,We),edge:_(e.edge,n,ze),tx:Ne(n),spacing:ye(e.spacing,t,Je),border:s.group,breakpoint:Ze(),"container-size":Qe(),layout:en(),font:a.group,shadow:Ue(n)},extensions:c};return ko(l)}i(Io,"buildIR");var F=Io;var wo=xo("rgb"),an="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function be(e){if(e.value.kind==="color")return e.value;if(e.value.kind==="ref"&&e.value.resolved.kind==="color")return e.value.resolved}i(be,"colorPayload");function Re(e){return e.alpha===void 0}i(Re,"isOpaqueColor");function cn(e){let n=wo(So(e.hex));if(!n)return"0 0 0";let o=i(r=>Math.min(255,Math.max(0,Math.round(r*255))),"channel");return`${o(n.r)} ${o(n.g)} ${o(n.b)}`}i(cn,"rgbTriplet");function H(e,n=[]){let o=new Map;for(let[r,t]of Object.entries(e)){let s=[...n,x(r)];if(y(t))o.set(s.join("-"),t);else for(let[a,c]of H(t,s))o.set(a,c)}return o}i(H,"flatTokens");function b(e,...n){let o=e[n[0]];for(let r of n.slice(1)){if(!o||y(o))return{};o=o[r]}return o&&!y(o)?o:{}}i(b,"groupAt");function ln(e){let n=[];for(let o of["bg","text","edge","tx"])for(let[r,t]of H(b(e.groups,o),[o])){let s=be(t);s&&n.push({key:r,cssVar:`--apollion-${r}`,opaque:Re(s)})}return n}i(ln,"colorEntries");function V(e,n){return[...H(e)].map(([o])=>[o,`var(--apollion-${[...n,o].join("-")})`])}i(V,"varEntries");function C(e,n,o){if(o.length!==0){e.push(` ${n}: {`);for(let[r,t]of o)e.push(` ${JSON.stringify(r)}: ${JSON.stringify(t)},`);e.push(" },")}}i(C,"pushScale");function dn(e){let n=[an,"// Tailwind preset over the Apollion foundation tokens \u2014 requires dist/css/ vars in scope.","","const preset = {"," theme: {"," extend: {"],o=ln(e);n.push(" colors: {");for(let{key:r,cssVar:t,opaque:s}of o)s?n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`rgb(var(${t}-rgb) / <alpha-value>)`)},`):(n.push(` // ${r} carries its own alpha \u2014 excluded from the <alpha-value> modifier form.`),n.push(` ${JSON.stringify(r)}: ${JSON.stringify(`var(${t})`)},`));return n.push(" },"),C(n,"screens",[...H(b(e.groups,"breakpoint"))].filter(([r])=>r!=="xs").map(([r,t])=>[r,$(t.value)])),C(n,"spacing",V(b(e.groups,"spacing"),["spacing"])),C(n,"borderRadius",V(b(e.groups,"border","radius"),["border","radius"])),C(n,"borderWidth",V(b(e.groups,"border","width"),["border","width"])),C(n,"fontFamily",V(b(e.groups,"font","family"),["font","family"])),C(n,"fontSize",V(b(e.groups,"font","size"),["font","size"])),C(n,"fontWeight",V(b(e.groups,"font","weight"),["font","weight"])),C(n,"lineHeight",V(b(e.groups,"font","lineHeight"),["font","line-height"])),C(n,"boxShadow",V(b(e.groups,"shadow"),["shadow"])),n.push(" },"," },","};","","export default preset;",""),n.join(`
|
|
3
3
|
`)}i(dn,"renderTailwindPreset");function un(e){let n=i(t=>[...H(t).keys()],"keys"),o=i(t=>`[${t.map(s=>JSON.stringify(s)).join(", ")}]`,"list");return[an,"// tailwind-merge extension for the generated preset \u2014 pass to extendTailwindMerge().","","export const twMergeExtension = {"," extend: {"," theme: {",` colors: ${o(ln(e).map(t=>t.key))},`,` spacing: ${o(n(b(e.groups,"spacing")))},`,` borderRadius: ${o(n(b(e.groups,"border","radius")))},`,` borderWidth: ${o(n(b(e.groups,"border","width")))},`," },"," classGroups: {",` 'font-family': [{ font: ${o(n(b(e.groups,"font","family")))} }],`,` 'font-size': [{ text: ${o(n(b(e.groups,"font","size")))} }],`,` 'font-weight': [{ font: ${o(n(b(e.groups,"font","weight")))} }],`,` leading: [{ leading: ${o(n(b(e.groups,"font","lineHeight")))} }],`,` shadow: [{ shadow: ${o(n(b(e.groups,"shadow")))} }],`," },"," },","};",""].join(`
|
|
4
|
-
`)}i(un,"renderTwMergeExtension");var pn="/* Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. */";function
|
|
5
|
-
`)}i(fn,"renderCss");function mn(e,n,o={}){let{attribute:r="data-apollion-mode",rgbCompanions:t}=o,{brand:s,surface:a,dimension:c}=e.meta,l=[pn,""],f=i((w,d,u)=>{l.push(`${w} {`,` color-scheme: ${u};`),
|
|
6
|
-
`)}i(mn,"renderCssModes");var
|
|
4
|
+
`)}i(un,"renderTwMergeExtension");var pn="/* Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. */";function ne(e,n,o){for(let[r,t]of Object.entries(e)){let s=[...n,x(r)];y(t)?o.push(` --apollion-${s.join("-")}: ${$(t.value)};`):ne(t,s,o)}}i(ne,"emitVars");function oe(e,n,o){for(let[r,t]of Object.entries(e)){let s=[...n,x(r)];if(!y(t)){oe(t,s,o);continue}let a=be(t);a&&Re(a)&&o.push(` --apollion-${s.join("-")}-rgb: ${cn(a)};`)}}i(oe,"emitRgbVars");function ke(e,n,o){for(let[r,t]of Object.entries(e)){let s=[...n,x(r)];y(t)?t.type==="color"&&o.push(` @property --apollion-${s.join("-")} { syntax: '<color>'; inherits: true; initial-value: ${$(t.value)}; }`):ke(t,s,o)}}i(ke,"emitProperties");function fn(e,n={}){let{brand:o,mode:r,surface:t,dimension:s}=e.meta,a=[pn,""];return a.push(`/* Variant: brand=${o} mode=${r} surface=${t} dimension=${s} */`,"",":root {"),ne(e.groups,[],a),n.rgbCompanions&&(a.push(""," /* -rgb channel triplets \u2014 Tailwind <alpha-value> companions (opaque colour tokens only). */"),oe(e.groups,[],a)),a.push("}",""),a.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),ke(e.groups,[],a),a.push("}",""),a.join(`
|
|
5
|
+
`)}i(fn,"renderCss");function mn(e,n,o={}){let{attribute:r="data-apollion-mode",rgbCompanions:t}=o,{brand:s,surface:a,dimension:c}=e.meta,l=[pn,""],f=i((w,d,u)=>{l.push(`${w} {`,` color-scheme: ${u};`),ne(d.groups,[],l),t&&oe(d.groups,[],l),l.push("}","")},"block");l.push(`/* Variant: brand=${s} surface=${a} dimension=${c} modes=light+dark (attribute ${r}) */`,""),f(`:root, html[${r}="light"]`,e,"light"),f(`html[${r}="dark"]`,n,"dark"),l.push("@media (prefers-color-scheme: dark) {"),l.push(` html:not([${r}]) {`," color-scheme: dark;");let R=[];ne(n.groups,[],R),t&&oe(n.groups,[],R);for(let w of R)l.push(` ${w}`);return l.push(" }","}",""),l.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),ke(e.groups,[],l),l.push("}",""),l.join(`
|
|
6
|
+
`)}i(mn,"renderCssModes");var vo="<!-- Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. -->";function Ie(e,n,o){for(let[r,t]of Object.entries(e)){let s=n?`${n}.${r}`:r;y(t)?o.push([s,$(t.value)]):Ie(t,s,o)}}i(Ie,"flatten");function Do(e){return typeof e=="number"?String(e):`'${String(e).replace(/'/g,"''")}'`}i(Do,"yamlEscape");function To(e){let{mode:n,surface:o,dimension:r}=e.meta;return`${n}.${o}.${r}`}i(To,"variantKey");function gn(e,n){if(n.length===0)throw new Error(`renderDesignMd: no variants for brand "${e}"`);let o=["---",`brand: '${e}'`,"generator: apollion-tokens","variants:"];for(let t of n){let s=[];Ie(t.groups,"",s),o.push(` ${To(t)}:`);for(let[a,c]of s)o.push(` ${a}: ${Do(c)}`)}o.push("---");let r=["",vo,"",`# Design.md \u2014 ${e}`,"","Resolved design-token values for this brand, one section per variant.","Consumption rules (which token to reach for, layer boundaries) live in the","package `llms.txt`; this file carries the values those rules reference.","Regenerate with `apollion-tokens build` \u2014 never edit.",""];for(let t of n){let{mode:s,surface:a,dimension:c}=t.meta;r.push(`## Variant \`${s} \xB7 ${a} \xB7 ${c}\``,"");let l=[];Ie(t.groups,"",l);let f=new Map;for(let[R,w]of l){let d=R.split(".")[0]??R,u=f.get(d)??[];u.push([R,w]),f.set(d,u)}for(let[R,w]of f){r.push(`### ${R}`,"","| Token | Value |","| --- | --- |");for(let[d,u]of w)r.push(`| \`${d}\` | \`${u}\` |`);r.push("")}}return`${o.join(`
|
|
7
7
|
`)}
|
|
8
8
|
${r.join(`
|
|
9
|
-
`)}`}i(gn,"renderDesignMd");function hn(e){return e.alpha!==void 0?{colorSpace:"oklch",components:[...e.components],alpha:e.alpha,hex:e.hex}:{colorSpace:"oklch",components:[...e.components],hex:e.hex}}i(hn,"colorValue");function W(e){return{value:e.value,unit:e.unit}}i(W,"dimensionValue");function $o(e){let n=e.shadow,o={color:hn(n.color),offsetX:W(n.offsetX),offsetY:W(n.offsetY),blur:W(n.blur),spread:W(n.spread)};return n.inset&&(o.inset=!0),o}i($o,"shadowValue");function
|
|
10
|
-
`}i(
|
|
11
|
-
`}i(In,"renderResolver");var
|
|
12
|
-
`)}i(Sn,"renderTs");var Lo=["light","dark"],
|
|
13
|
-
`}i($n,"serializeManifest");var Go="json/sets",Tn="json/resolver.json";function ie(e){return`${Go}/${e}.json`}i(ie,"setFile");function jo(e,n,o){return`${e}.color.${n}.${o}`}i(jo,"colorSetName");function Po(e){return`spacing.${e}`}i(Po,"spacingSetName");function No(e){return`font.${e}`}i(No,"fontSetName");function se(e,n){e.includes(n)||e.push(n)}i(se,"pushUnique");function Cn(e){let n=re(e),o=[],r=[],t=[],s=[],a=new Set,c=[],l=new Set,f=[],k=new Set,w=[];for(let d of n){se(o,d.brand),se(r,d.mode),se(t,d.surface),se(s,d.dimension);let u=jo(d.brand,d.mode,d.surface);a.has(u)||(a.add(u),c.push({kind:"color",name:u,file:ie(u),brand:d.brand,mode:d.mode,surface:d.surface}));let h=Po(d.dimension);l.has(h)||(l.add(h),f.push({kind:"spacing",name:h,file:ie(h),dimension:d.dimension}));let m=No(d.dimension);k.has(m)||(k.add(m),w.push({kind:"font",name:m,file:ie(m),dimension:d.dimension}))}return{base:{kind:"base",name:"base",file:ie("base")},spacing:f,font:w,color:c,modifiers:{brand:o,mode:r,surface:t,dimension:s}}}i(Cn,"planSets");import{toDarkColors as Qo}from"@apollion-dsi/core/themes/colors";import{createFoundation as _n}from"@apollion-dsi/core/themes/foundation";import{createSemantic as er}from"@apollion-dsi/core/themes/semantic";import{defaultInputSpacing as nr}from"@apollion-dsi/core/themes/spacing";import{invertForSurface as or}from"@apollion-dsi/core/themes/surface";import{converter as Mn,formatHex as j,interpolate as Fo,parse as S,wcagContrast as En}from"culori";var J=Mn("oklch"),_o=Mn("rgb");function p(e,n,o){let r=S(e),t=S(n);if(!r||!t)return e;let s=Fo([r,t],"oklch");return j(s(o))??e}i(p,"mixOklch");function Bo(e){return e?typeof e=="string"?e:e.base:"#000"}i(Bo,"coerceToHex");var ae=1.3,Ho=.05,An=.04,O=i((e,n)=>{let o=S(e),r=S(n);return!o||!r?1:En(o,r)},"contrastRatio"),we=i(e=>{let n=J(S(e));return n?n.l??0:null},"oklchLightness"),Wo=4.5;function z(e,n,o=Wo){let r=S(n),t=J(S(e));if(!r||!t)return e;let s=O("#fff",n)>=O("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=j(t)??e,l=S(c);if(l&&En(l,r)>=o)return c;let f=Math.min(1,Math.max(0,(t.l??0)+s));if(f===(t.l??0))break;t={...t,l:f}}return j(t)??e}i(z,"readableColor");var Vn=i((e,n)=>{if(O(e,n)>=ae)return!0;let o=we(e),r=we(n);return o!==null&&r!==null&&Math.abs(o-r)>=Ho},"isPerceptibleState"),ve=i(e=>e?O("#fff",e)>O("#000",e):!1,"isDarkSurface");function Ln(e,n,o){let r=J(S(e));if(!r)return null;let t={...r,l:o??r.l??0},s=n?An:-An;for(let a=0;a<25;a+=1){let c=Math.min(1,Math.max(0,(t.l??0)+s));if(c===(t.l??0))break;t={...t,l:c};let l=j(t);if(l&&O(e,l)>=ae)return l}return j(t)??null}i(Ln,"derivePerceptibleState");function On(e,n,o){let r=Ln(e,n,o);if(r&&O(e,r)>=ae)return r;let t=Ln(e,!n);return t&&O(e,t)>=ae?t:r??t}i(On,"perceptibleStateFor");function D(e,n){let o=typeof e=="object"&&e!==null?e:void 0,r=Bo(e),t=n.deepDark,s=n.deepLight,a={base:r,dark:p(r,t,.6),action:p(r,t,.2),active:p(r,s,.6),light:p(r,s,.9),onLight:r};if(S(r)){let c=ve(n.baseLight),l=Vn(r,a.action);if(l||(a.action=On(r,c)??a.action),!Vn(r,a.active)){let f=l?void 0:we(a.action)??void 0;a.active=On(r,c,f)??a.active}}if(a.onLight=z(a.action,a.light),o){let c=o.action??a.action,l=o.light??a.light;return{base:r,dark:o.dark??a.dark,action:c,active:o.active??a.active,light:l,onLight:o.onLight??z(c,l)}}return a}i(D,"mountSingleColor");function Gn(e){let n=e.deepLight,o=e.deepDark;return{0:n,5:p(n,o,.05),10:p(n,o,.1),20:p(n,o,.2),30:p(n,o,.3),40:p(n,o,.4),50:p(n,o,.5),60:p(n,o,.6),70:p(n,o,.7),80:p(n,o,.8),90:p(n,o,.9),100:p(n,o,1)}}i(Gn,"mountGreyscaleColors");function jn(e){let n=e.deepLight,o=e.deepDark,r=typeof e.primary=="object"&&e.primary?e.primary.base:e.primary,t=i(a=>1/17*(a-1),"interpolation"),s=p(r,o,.5);return{0:p(s,n,t(18)),5:p(s,n,t(17.5)),10:p(s,n,t(17)),20:p(s,n,t(16)),30:p(s,n,t(15)),40:p(s,n,t(14)),50:p(s,n,t(13)),60:p(s,n,t(12)),70:p(s,n,t(11)),80:p(s,n,t(10)),90:p(s,n,t(9)),100:p(s,n,t(8)),110:p(s,n,t(7)),120:p(s,n,t(6)),130:p(s,n,t(5)),140:p(s,n,t(4)),150:p(s,n,t(3)),160:p(s,n,t(2)),170:s,180:p(s,o,.25)}}i(jn,"mountNeutralColors");function B(e,n){let o=J(S(e));if(!o)return e;let r=Math.min(1,Math.max(0,(o.l??0)+n));return j({...o,l:r})??e}i(B,"shiftLightness");function ce(e,n){let o=J(S(e));if(!o)return e;let r=o.l??0,t=n.min??0,s=n.max??1;return r>=t&&r<=s?e:j({...o,l:Math.min(s,Math.max(t,r))})??e}i(ce,"clampLightness");function P(e,n){let o=_o(S(e));if(!o)return e;let r=Math.min(1,Math.max(0,n)),t=i(s=>Math.round((s??0)*255),"channel");return`rgba(${t(o.r)}, ${t(o.g)}, ${t(o.b)}, ${r})`}i(P,"toRgbaString");import{apcaContrast as le,EDGE_ALPHA as De,HALATION_FLOORS as Ce,INK_APCA_MIN as $e,INK_MIX as Te,LADDER_DELTAS as de,MIN_CONTRAST_AA as Pn,WASH_ALPHA as zo}from"@apollion-dsi/core/themes/colors";var Jo="#FFFFFF",Ae="#000000";function qo(e){return ve(e.baseLight)?"dark":"light"}i(qo,"resolvePolarity");function Nn(e,n,o){if(Math.abs(le(e,n))>=o)return e;let r=Math.abs(le("#ffffff",n))>=Math.abs(le("#000000",n)),t=e;for(let s=0;s<40;s+=1){let a=B(t,r?.02:-.02);if(a===t||(t=a,Math.abs(le(t,n))>=o))break}return t}i(Nn,"ensureApca");function Uo(e,n){let o=e.baseLight??Jo,r=n==="dark",t=r?ce(o,{min:Ce.CANVAS_MIN_L}):o,s=B(t,de.sunken);return{canvas:t,sunken:r?ce(s,{min:Ce.CANVAS_MIN_L}):s,paper:B(t,de.paper),raised:B(t,de.raised),overlay:B(t,de.overlay),scrim:r?e.deepLight??Ae:e.neutral?.["180"]??e.baseDark??Ae}}i(Uo,"deriveSurface");function Ko(e,n){let o=e.baseDark??Ae,r=ce(Nn(z(o,n.paper,Pn),n.paper,$e.primary),{max:Ce.INK_MAX_L}),t=i((s,a)=>Nn(z(p(r,n.canvas,s),n.paper,Pn),n.paper,a),"tier");return{primary:r,secondary:t(Te.secondary,$e.secondary),muted:t(Te.muted,$e.muted),disabled:p(r,n.canvas,Te.disabled)}}i(Ko,"deriveInk");function Xo(e){return{hairline:P(e.primary,De.hairline),border:P(e.primary,De.border),strong:P(e.primary,De.strong)}}i(Xo,"deriveEdge");function Yo(e,n){let o=zo[n];return{hover:P(e.primary,o.hover),pressed:P(e.primary,o.pressed),selected:P(e.primary,o.selected)}}i(Yo,"deriveWash");function Zo(e,n){return n?{surface:{...e.surface,...n.surface},ink:{...e.ink,...n.ink},edge:{...e.edge,...n.edge},wash:{...e.wash,...n.wash}}:e}i(Zo,"applyOverride");function Fn(e,n){let o=qo(e),r=Uo(e,o),t=Ko(e,r),s={surface:r,ink:t,edge:Xo(t),wash:Yo(t,o)};return Zo(s,n?.[o])}i(Fn,"resolveSurfaceLadder");function rr(e){let n=jn(e);return{baseDark:e.baseDark,baseLight:e.baseLight,deepDark:e.deepDark,deepLight:e.deepLight,transparent:e.transparent??"transparent",neutral:n,grayscale:Gn(e),...Fn({...e,neutral:n},e.ladder),main:D(e.main,e),opposite:D(e.opposite,e),complementary:D(e.complementary,e),danger:D(e.danger,e),information:D(e.information,e),success:D(e.success,e),warning:D(e.warning,e),primary:D(e.primary,e),secondary:D(e.secondary,e),tertiary:D(e.tertiary,e)}}i(rr,"composeColors");function M(e,n=nr){let o=e.mode==="dark"?Qo(e.colors):e.colors,r=rr(o),t=K(n,e.dimension),s=er({colors:r,spacing:t}),a=_n(s);return e.surface==="negative"&&(a=_n(or({semantic:s,colors:r},"negative").semantic)),{foundation:a,colors:r}}i(M,"buildVariantThemes");async function qn(e){let{config:n,outDir:o,cwd:r=process.cwd(),verbose:t=!1}=e,s=re(n),a=n.output??{};if(s.length===0)throw new Error("apollion-tokens build: no variants (config.brands is empty)");let c=await tr(q(sr(),"apollion-tokens-"));try{let l=[],f=i(async(d,u)=>{await ar(c,d,u),l.push({path:d,sha256:te(u)}),t&&console.log(` \u2713 ${d}`)},"emit");if(a.json){let d=Cn(n),u=[],h=on();u.push(h),await f(d.base.file,yn(h));for(let m of d.spacing){let R=s.find(U=>U.dimension===m.dimension),{foundation:A}=M(R),V=sn(A,m.dimension);u.push(V),await f(m.file,kn(V,m.dimension))}for(let m of d.font){let R=rn(m.dimension);u.push(R),await f(m.file,Rn(R,m.dimension))}for(let m of d.color){let R=s.find(pe=>pe.brand===m.brand&&pe.mode===m.mode&&pe.surface===m.surface),{foundation:A,colors:V}=M(R),U=tn(A,V);u.push(U),await f(m.file,bn(U,m.brand,m.mode,m.surface))}Ye(u),await f(Tn,In(n,d))}if(a.css||a.ts)for(let d of s){let{foundation:u,colors:h}=M(d),m=_(u,h,d),R=wn(d);a.css&&await f(`css/${R}.css`,fn(m,{rgbCompanions:a.tailwind})),a.ts&&await f(`ts/${R}.d.ts`,Sn(m))}if(a.cssModes){let d=new Map;for(let u of s){let h=`${u.brand}.${u.surface}.${u.dimension}`,m=d.get(h)??{};m[u.mode]=u,d.set(h,m)}for(let[u,{light:h,dark:m}]of d){if(!h||!m)throw new Error(`apollion-tokens build: output.cssModes needs both modes for ${u} (config.modes)`);let R=M(h),A=M(m),V=mn(_(R.foundation,R.colors,h),_(A.foundation,A.colors,m),{rgbCompanions:a.tailwind});await f(`css/${u}.modes.css`,V)}}if(a.tailwind){let d=s[0],{foundation:u,colors:h}=M(d),m=_(u,h,d);await f("tailwind/preset.mjs",dn(m)),await f("tailwind/tw-merge.mjs",un(m))}if(a.designMd){let d=[...new Set(s.map(u=>u.brand))];for(let u of d){let m=s.filter(R=>R.brand===u).map(R=>{let{foundation:A,colors:V}=M(R);return _(A,V,R)});await f(`design/${u}.design.md`,gn(u,m))}}let k={configHash:Se(n),files:l,gitCommit:vn(r),buildEnv:Dn()},w=$n(k);return await zn(q(c,"manifest.json"),w),await Hn(o,{recursive:!0,force:!0}),await Wn(Jn(o),{recursive:!0}),await ir(c,o),t&&console.log(`\u2713 ${l.length} files \u2192 ${o}`),{manifest:k,outDir:o}}catch(l){throw await Hn(c,{recursive:!0,force:!0}).catch(()=>{}),l}}i(qn,"build");async function Un(e){let{config:n,outDir:o}=e,r;try{r=JSON.parse(await Bn(q(o,"manifest.json"),"utf8"))}catch{return!1}if(r.configHash!==Se(n))return!1;for(let t of r.files){let s;try{s=await Bn(q(o,t.path))}catch{return!1}if(te(s)!==t.sha256)return!1}return!0}i(Un,"check");async function ar(e,n,o){let r=q(e,n);await Wn(Jn(r),{recursive:!0}),await zn(r,o)}i(ar,"writeAt");import{readFile as lr}from"node:fs/promises";import{resolve as dr}from"node:path";import{createContext as ur,Script as pr}from"node:vm";import{z as g}from"zod";var v=g.string().regex(/^#([0-9a-fA-F]{3}){1,2}$|^transparent$|^rgb\(.*\)$|^oklch\(.*\)$/,{message:'Must be hex, rgb(), oklch(), or "transparent"'}),cr=g.object({baseDark:g.string().optional(),baseLight:g.string().optional(),deepDark:v,deepLight:v,transparent:g.string().optional(),main:v.optional(),opposite:v.optional(),complementary:v.optional(),information:v.optional(),success:v.optional(),danger:v.optional(),warning:v.optional(),primary:v.optional(),secondary:v.optional(),tertiary:v.optional()}).passthrough(),Kn=g.object({brands:g.record(g.string(),cr).refine(e=>Object.keys(e).length>0,{message:"apollion.config.mjs: brands must contain at least 1 entry"}),modes:g.array(g.enum(["light","dark"])).optional(),surfaces:g.array(g.enum(["positive","negative"])).optional(),dimensions:g.array(g.enum(["compact","normal","spacious"])).optional(),output:g.object({runtime:g.boolean().optional(),css:g.boolean().optional(),json:g.boolean().optional(),ts:g.boolean().optional(),designMd:g.boolean().optional(),tailwind:g.boolean().optional(),cssModes:g.boolean().optional()}).passthrough().optional()}).passthrough();var fr=[/\brequire\s*\(/,/\bimport\s*\(/,/^\s*import\s+/m],mr=1e3;var Ve=class Ve extends Error{constructor(o,r){super(o);this.configPath=r;this.name="ConfigLoadError"}};i(Ve,"ConfigLoadError");var N=Ve;async function Xn(e){let n=dr(e.configPath),o=await lr(n,"utf8");for(let l of fr)if(l.test(o))throw new N(`apollion.config: dynamic require/import not allowed (matched ${l}). Declarative config only \u2014 see ADR-006 \xA73.8 B3.`,n);let r=o.replace(/(^|\n)\s*export\s+default\s+/,(l,f)=>`${f}__apollion_config_export = `);if(r===o)throw new N("apollion.config: missing `export default <object>;` \u2014 config must export a default object literal.",n);let t={__apollion_config_export:void 0,console:gr(),Symbol,Number,String,Boolean,Array,Object,JSON,Math,defineConfig:i(l=>l,"defineConfig")},s=ur(t);try{new pr(r,{filename:n}).runInContext(s,{timeout:mr})}catch(l){throw new N(`apollion.config: evaluation failed \u2014 ${l instanceof Error?l.message:String(l)}`,n)}let a=t.__apollion_config_export;if(a===void 0)throw new N("apollion.config: `export default` produced undefined.",n);let c=Kn.safeParse(a);if(!c.success){let l=c.error.issues.map(f=>` ${f.path.join(".")||"(root)"}: ${f.message}`).join(`
|
|
9
|
+
`)}`}i(gn,"renderDesignMd");function hn(e){return e.alpha!==void 0?{colorSpace:"oklch",components:[...e.components],alpha:e.alpha,hex:e.hex}:{colorSpace:"oklch",components:[...e.components],hex:e.hex}}i(hn,"colorValue");function W(e){return{value:e.value,unit:e.unit}}i(W,"dimensionValue");function $o(e){let n=e.shadow,o={color:hn(n.color),offsetX:W(n.offsetX),offsetY:W(n.offsetY),blur:W(n.blur),spread:W(n.spread)};return n.inset&&(o.inset=!0),o}i($o,"shadowValue");function Co(e){switch(e.kind){case"ref":return`{${je(e.path)}}`;case"color":return hn(e);case"dimension":return W(e);case"fontFamily":return e.family;case"fontWeight":return e.weight;case"number":return e.number;case"strokeStyle":return e.style;case"shadow":return $o(e)}}i(Co,"projectValue");function Ao(e){let n={$value:Co(e.value),$type:e.type};return e.description!==void 0&&(n.$description=e.description),e.deprecated!==void 0&&(n.$deprecated=e.deprecated),n}i(Ao,"projectToken");function xe(e){let n={};for(let[o,r]of Object.entries(e))n[x(o)]=y(r)?Ao(r):xe(r);return n}i(xe,"projectGroup");function re(e,n){let o={$description:n,...xe(e.groups)};return Object.keys(e.extensions).length>0&&(o.$extensions=e.extensions),`${JSON.stringify(o,null,2)}
|
|
10
|
+
`}i(re,"renderSet");function yn(e){return re(e,"Apollion DS \u2014 base set (axis-invariant: border). DTCG 2025.10.")}i(yn,"renderBaseSet");function bn(e,n,o,r){return re(e,`Apollion DS \u2014 colour set. brand=${n} mode=${o} surface=${r}. DTCG 2025.10.`)}i(bn,"renderColorSet");function Rn(e,n){return re(e,`Apollion DS \u2014 spacing set. dimension=${n}. DTCG 2025.10.`)}i(Rn,"renderSpacingSet");function kn(e,n){return re(e,`Apollion DS \u2014 font set. dimension=${n}. DTCG 2025.10.`)}i(kn,"renderFontSet");function In(e,n){let{modifiers:o}=n,r=[{name:"brand",values:[...o.brand],default:o.brand[0]},{name:"mode",values:[...o.mode],default:o.mode[0]},{name:"surface",values:[...o.surface],default:o.surface[0]},{name:"dimension",values:[...o.dimension],default:o.dimension[0]}],s={name:"apollion-tokens",description:"Apollion DS token resolver \u2014 DTCG 2025.10. Compose the base set with the colour set for the chosen brand/mode/surface and the spacing + font sets for the chosen dimension. NOTE: mode is a topology placeholder in this release (dark resolves identically to light until S6).",sets:[{name:n.base.name,source:n.base.file},...n.spacing.map(a=>({name:a.name,source:a.file})),...n.font.map(a=>({name:a.name,source:a.file})),...n.color.map(a=>({name:a.name,source:a.file}))],modifiers:r,$extensions:{"com.apollion.resolver":{composition:{always:[n.base.name],byModifier:{color:"${brand}.color.${mode}.${surface}",spacing:"spacing.${dimension}",font:"font.${dimension}"}},modeIsPlaceholder:!0}}};return`${JSON.stringify(s,null,2)}
|
|
11
|
+
`}i(In,"renderResolver");var Oo="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function Vo(e,n,o){let r=[];if(e.description!==void 0&&r.push(e.description),e.deprecated===!0?r.push("@deprecated"):typeof e.deprecated=="string"&&r.push(`@deprecated ${e.deprecated}`),r.length!==0){o.push(`${n}/**`);for(let t of r)o.push(`${n} * ${t.replace(/\*\//g,"*\\/")}`);o.push(`${n} */`)}}i(Vo,"emitDoc");function xn(e,n,o){let r=" ".repeat(n);for(let[t,s]of Object.entries(e))y(s)?(Vo(s,r,o),o.push(`${r}${JSON.stringify(t)}: ${JSON.stringify($(s.value))},`)):(o.push(`${r}${t}: {`),xn(s,n+1,o),o.push(`${r}},`))}i(xn,"emitGroup");function Sn(e){let{brand:n,mode:o,surface:r,dimension:t}=e.meta,s=[Oo,`// Variant: brand=${n} mode=${o} surface=${r} dimension=${t}`,"","export const tokens = {"];return xn(e.groups,1,s),s.push("} as const;","","export type Tokens = typeof tokens;",""),s.join(`
|
|
12
|
+
`)}i(Sn,"renderTs");var Lo=["light","dark"],Eo=["positive","negative"],Mo=["compact","normal","spacious"];function te(e){let n=e.modes??Lo,o=e.surfaces??Eo,r=e.dimensions??Mo,t=Object.entries(e.brands).sort(([a],[c])=>a.localeCompare(c)),s=[];for(let[a,c]of t)for(let l of n)for(let f of o)for(let R of r)s.push({brand:a,colors:c,mode:l,surface:f,dimension:R});return s}i(te,"expandVariants");function wn(e){return`${e.brand}.${e.mode}.${e.surface}.${e.dimension}`}i(wn,"variantName");import{createHash as Go}from"node:crypto";function ie(e){return Go("sha256").update(e).digest("hex")}i(ie,"sha256");function we(e){return ie(Se(e))}i(we,"hashConfig");function Se(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Se).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${Se(e[r])}`).join(",")}}`}i(Se,"stableStringify");function vn(e){try{let{execSync:n}=Qn("node:child_process");return n("git rev-parse --short HEAD",{cwd:e,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim()}catch{return""}}i(vn,"detectGitCommit");function Dn(){return{node:process.version,platform:`${process.platform}-${process.arch}`}}i(Dn,"buildEnv");function Tn(e){let n=[...e.files].sort((r,t)=>r.path.localeCompare(t.path)),o={configHash:e.configHash,files:n,gitCommit:e.gitCommit,buildEnv:e.buildEnv};return`${JSON.stringify(o,null,2)}
|
|
13
|
+
`}i(Tn,"serializeManifest");var jo="json/sets",$n="json/resolver.json";function se(e){return`${jo}/${e}.json`}i(se,"setFile");function Po(e,n,o){return`${e}.color.${n}.${o}`}i(Po,"colorSetName");function No(e){return`spacing.${e}`}i(No,"spacingSetName");function _o(e){return`font.${e}`}i(_o,"fontSetName");function ae(e,n){e.includes(n)||e.push(n)}i(ae,"pushUnique");function Cn(e){let n=te(e),o=[],r=[],t=[],s=[],a=new Set,c=[],l=new Set,f=[],R=new Set,w=[];for(let d of n){ae(o,d.brand),ae(r,d.mode),ae(t,d.surface),ae(s,d.dimension);let u=Po(d.brand,d.mode,d.surface);a.has(u)||(a.add(u),c.push({kind:"color",name:u,file:se(u),brand:d.brand,mode:d.mode,surface:d.surface}));let h=No(d.dimension);l.has(h)||(l.add(h),f.push({kind:"spacing",name:h,file:se(h),dimension:d.dimension}));let m=_o(d.dimension);R.has(m)||(R.add(m),w.push({kind:"font",name:m,file:se(m),dimension:d.dimension}))}return{base:{kind:"base",name:"base",file:se("base")},spacing:f,font:w,color:c,modifiers:{brand:o,mode:r,surface:t,dimension:s}}}i(Cn,"planSets");import{toDarkColors as or}from"@apollion-dsi/core/themes/colors";import{createFoundation as Bn}from"@apollion-dsi/core/themes/foundation";import{createSemantic as rr}from"@apollion-dsi/core/themes/semantic";import{defaultInputSpacing as tr}from"@apollion-dsi/core/themes/spacing";import{invertForSurface as ir}from"@apollion-dsi/core/themes/surface";import{converter as En,formatHex as j,interpolate as Fo,parse as S,wcagContrast as Mn}from"culori";var K=En("oklch"),Bo=En("rgb");function p(e,n,o){let r=S(e),t=S(n);if(!r||!t)return e;let s=Fo([r,t],"oklch");return j(s(o))??e}i(p,"mixOklch");function Ho(e){return e?typeof e=="string"?e:e.base:"#000"}i(Ho,"coerceToHex");var ce=1.3,Wo=.05,An=.04,L=i((e,n)=>{let o=S(e),r=S(n);return!o||!r?1:Mn(o,r)},"contrastRatio"),z=i(e=>{let n=K(S(e));return n?n.l??0:null},"oklchLightness"),zo=4.5;function J(e,n,o=zo){let r=S(n),t=K(S(e));if(!r||!t)return e;let s=L("#fff",n)>=L("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=j(t)??e,l=S(c);if(l&&Mn(l,r)>=o)return c;let f=Math.min(1,Math.max(0,(t.l??0)+s));if(f===(t.l??0))break;t={...t,l:f}}return j(t)??e}i(J,"readableColor");var On=i((e,n)=>{if(L(e,n)>=ce)return!0;let o=z(e),r=z(n);return o!==null&&r!==null&&Math.abs(o-r)>=Wo},"isPerceptibleState"),ve=i(e=>e?L("#fff",e)>L("#000",e):!1,"isDarkSurface");function Vn(e,n,o){let r=K(S(e));if(!r)return null;let t={...r,l:o??r.l??0},s=n?An:-An;for(let a=0;a<25;a+=1){let c=Math.min(1,Math.max(0,(t.l??0)+s));if(c===(t.l??0))break;t={...t,l:c};let l=j(t);if(l&&L(e,l)>=ce)return l}return j(t)??null}i(Vn,"derivePerceptibleState");function Ln(e,n,o){let r=Vn(e,n,o);if(r&&L(e,r)>=ce)return r;let t=Vn(e,!n);return t&&L(e,t)>=ce?t:r??t}i(Ln,"perceptibleStateFor");function D(e,n){let o=typeof e=="object"&&e!==null?e:void 0,r=Ho(e),t=n.deepDark,s=n.deepLight,a={base:r,dark:p(r,t,.6),action:p(r,t,.2),active:p(r,s,.6),light:p(r,s,.9),onLight:r};if(S(r)){let c=ve(n.baseLight),l=On(r,a.action);if(l||(a.action=Ln(r,c)??a.action),!On(r,a.active)){let f=l?void 0:z(a.action)??void 0;a.active=Ln(r,c,f)??a.active}}if(a.onLight=J(a.action,a.light),o){let c=o.action??a.action,l=o.light??a.light;return{base:r,dark:o.dark??a.dark,action:c,active:o.active??a.active,light:l,onLight:o.onLight??J(c,l)}}return a}i(D,"mountSingleColor");function Gn(e){let n=e.deepLight,o=e.deepDark;return{0:n,5:p(n,o,.05),10:p(n,o,.1),20:p(n,o,.2),30:p(n,o,.3),40:p(n,o,.4),50:p(n,o,.5),60:p(n,o,.6),70:p(n,o,.7),80:p(n,o,.8),90:p(n,o,.9),100:p(n,o,1)}}i(Gn,"mountGreyscaleColors");function jn(e){let n=e.deepLight,o=e.deepDark,r=typeof e.primary=="object"&&e.primary?e.primary.base:e.primary,t=i(a=>1/17*(a-1),"interpolation"),s=p(r,o,.5);return{0:p(s,n,t(18)),5:p(s,n,t(17.5)),10:p(s,n,t(17)),20:p(s,n,t(16)),30:p(s,n,t(15)),40:p(s,n,t(14)),50:p(s,n,t(13)),60:p(s,n,t(12)),70:p(s,n,t(11)),80:p(s,n,t(10)),90:p(s,n,t(9)),100:p(s,n,t(8)),110:p(s,n,t(7)),120:p(s,n,t(6)),130:p(s,n,t(5)),140:p(s,n,t(4)),150:p(s,n,t(3)),160:p(s,n,t(2)),170:s,180:p(s,o,.25)}}i(jn,"mountNeutralColors");function B(e,n){let o=K(S(e));if(!o)return e;let r=Math.min(1,Math.max(0,(o.l??0)+n));return j({...o,l:r})??e}i(B,"shiftLightness");function le(e,n){let o=K(S(e));if(!o)return e;let r=o.l??0,t=n.min??0,s=n.max??1;return r>=t&&r<=s?e:j({...o,l:Math.min(s,Math.max(t,r))})??e}i(le,"clampLightness");function P(e,n){let o=Bo(S(e));if(!o)return e;let r=Math.min(1,Math.max(0,n)),t=i(s=>Math.round((s??0)*255),"channel");return`rgba(${t(o.r)}, ${t(o.g)}, ${t(o.b)}, ${r})`}i(P,"toRgbaString");import{apcaContrast as de,DARK_BOOST_TAPER_MAX_L as De,DARK_ELEVATION_BOOST as Jo,EDGE_ALPHA as Te,HALATION_FLOORS as ue,INK_APCA_MIN as $e,INK_MIX as Ce,LADDER_DELTAS as Pn,MIN_CONTRAST_AA as Nn,WASH_ALPHA as Ko}from"@apollion-dsi/core/themes/colors";var qo="#FFFFFF",Ae="#000000";function Uo(e){return ve(e.baseLight)?"dark":"light"}i(Uo,"resolvePolarity");function Xo(e){let n=ue.CANVAS_MIN_L;return e<=n?1:e>=De?0:(De-e)/(De-n)}i(Xo,"darkElevationBoostFactor");function _n(e,n,o){if(Math.abs(de(e,n))>=o)return e;let r=Math.abs(de("#ffffff",n))>=Math.abs(de("#000000",n)),t=e;for(let s=0;s<40;s+=1){let a=B(t,r?.02:-.02);if(a===t||(t=a,Math.abs(de(t,n))>=o))break}return t}i(_n,"ensureApca");function Yo(e,n){let o=e.baseLight??qo,r=n==="dark",t=r?le(o,{min:ue.CANVAS_MIN_L}):o,s=B(t,Pn.sunken),a=r?Xo(z(t)??0):0,c=i(l=>Pn[l]+a*Jo[l],"delta");return{canvas:t,sunken:r?le(s,{min:ue.CANVAS_MIN_L}):s,paper:B(t,c("paper")),raised:B(t,c("raised")),overlay:B(t,c("overlay")),scrim:r?e.deepLight??Ae:e.neutral?.["180"]??e.baseDark??Ae}}i(Yo,"deriveSurface");function Zo(e,n){let o=e.baseDark??Ae,r=le(_n(J(o,n.paper,Nn),n.paper,$e.primary),{max:ue.INK_MAX_L}),t=i((s,a)=>_n(J(p(r,n.canvas,s),n.paper,Nn),n.paper,a),"tier");return{primary:r,secondary:t(Ce.secondary,$e.secondary),muted:t(Ce.muted,$e.muted),disabled:p(r,n.canvas,Ce.disabled)}}i(Zo,"deriveInk");function Qo(e){return{hairline:P(e.primary,Te.hairline),border:P(e.primary,Te.border),strong:P(e.primary,Te.strong)}}i(Qo,"deriveEdge");function er(e,n){let o=Ko[n];return{hover:P(e.primary,o.hover),pressed:P(e.primary,o.pressed),selected:P(e.primary,o.selected)}}i(er,"deriveWash");function nr(e,n){return n?{surface:{...e.surface,...n.surface},ink:{...e.ink,...n.ink},edge:{...e.edge,...n.edge},wash:{...e.wash,...n.wash}}:e}i(nr,"applyOverride");function Fn(e,n){let o=Uo(e),r=Yo(e,o),t=Zo(e,r),s={surface:r,ink:t,edge:Qo(t),wash:er(t,o)};return nr(s,n?.[o])}i(Fn,"resolveSurfaceLadder");function sr(e){let n=jn(e);return{baseDark:e.baseDark,baseLight:e.baseLight,deepDark:e.deepDark,deepLight:e.deepLight,transparent:e.transparent??"transparent",neutral:n,grayscale:Gn(e),...Fn({...e,neutral:n},e.ladder),main:D(e.main,e),opposite:D(e.opposite,e),complementary:D(e.complementary,e),danger:D(e.danger,e),information:D(e.information,e),success:D(e.success,e),warning:D(e.warning,e),primary:D(e.primary,e),secondary:D(e.secondary,e),tertiary:D(e.tertiary,e)}}i(sr,"composeColors");function E(e,n=tr){let o=e.mode==="dark"?or(e.colors):e.colors,r=sr(o),t=X(n,e.dimension),s=rr({colors:r,spacing:t}),a=Bn(s);return e.surface==="negative"&&(a=Bn(ir({semantic:s,colors:r},"negative").semantic)),{foundation:a,colors:r}}i(E,"buildVariantThemes");async function qn(e){let{config:n,outDir:o,cwd:r=process.cwd(),verbose:t=!1}=e,s=te(n),a=n.output??{};if(s.length===0)throw new Error("apollion-tokens build: no variants (config.brands is empty)");let c=await ar(q(lr(),"apollion-tokens-"));try{let l=[],f=i(async(d,u)=>{await dr(c,d,u),l.push({path:d,sha256:ie(u)}),t&&console.log(` \u2713 ${d}`)},"emit");if(a.json){let d=Cn(n),u=[],h=on();u.push(h),await f(d.base.file,yn(h));for(let m of d.spacing){let k=s.find(U=>U.dimension===m.dimension),{foundation:A}=E(k),O=sn(A,m.dimension);u.push(O),await f(m.file,Rn(O,m.dimension))}for(let m of d.font){let k=rn(m.dimension);u.push(k),await f(m.file,kn(k,m.dimension))}for(let m of d.color){let k=s.find(fe=>fe.brand===m.brand&&fe.mode===m.mode&&fe.surface===m.surface),{foundation:A,colors:O}=E(k),U=tn(A,O);u.push(U),await f(m.file,bn(U,m.brand,m.mode,m.surface))}Ye(u),await f($n,In(n,d))}if(a.css||a.ts)for(let d of s){let{foundation:u,colors:h}=E(d),m=F(u,h,d),k=wn(d);a.css&&await f(`css/${k}.css`,fn(m,{rgbCompanions:a.tailwind})),a.ts&&await f(`ts/${k}.d.ts`,Sn(m))}if(a.cssModes){let d=new Map;for(let u of s){let h=`${u.brand}.${u.surface}.${u.dimension}`,m=d.get(h)??{};m[u.mode]=u,d.set(h,m)}for(let[u,{light:h,dark:m}]of d){if(!h||!m)throw new Error(`apollion-tokens build: output.cssModes needs both modes for ${u} (config.modes)`);let k=E(h),A=E(m),O=mn(F(k.foundation,k.colors,h),F(A.foundation,A.colors,m),{rgbCompanions:a.tailwind});await f(`css/${u}.modes.css`,O)}}if(a.tailwind){let d=s[0],{foundation:u,colors:h}=E(d),m=F(u,h,d);await f("tailwind/preset.mjs",dn(m)),await f("tailwind/tw-merge.mjs",un(m))}if(a.designMd){let d=[...new Set(s.map(u=>u.brand))];for(let u of d){let m=s.filter(k=>k.brand===u).map(k=>{let{foundation:A,colors:O}=E(k);return F(A,O,k)});await f(`design/${u}.design.md`,gn(u,m))}}let R={configHash:we(n),files:l,gitCommit:vn(r),buildEnv:Dn()},w=Tn(R);return await Jn(q(c,"manifest.json"),w),await Wn(o,{recursive:!0,force:!0}),await zn(Kn(o),{recursive:!0}),await cr(c,o),t&&console.log(`\u2713 ${l.length} files \u2192 ${o}`),{manifest:R,outDir:o}}catch(l){throw await Wn(c,{recursive:!0,force:!0}).catch(()=>{}),l}}i(qn,"build");async function Un(e){let{config:n,outDir:o}=e,r;try{r=JSON.parse(await Hn(q(o,"manifest.json"),"utf8"))}catch{return!1}if(r.configHash!==we(n))return!1;for(let t of r.files){let s;try{s=await Hn(q(o,t.path))}catch{return!1}if(ie(s)!==t.sha256)return!1}return!0}i(Un,"check");async function dr(e,n,o){let r=q(e,n);await zn(Kn(r),{recursive:!0}),await Jn(r,o)}i(dr,"writeAt");import{readFile as pr}from"node:fs/promises";import{resolve as fr}from"node:path";import{createContext as mr,Script as gr}from"node:vm";import{z as g}from"zod";var v=g.string().regex(/^#([0-9a-fA-F]{3}){1,2}$|^transparent$|^rgb\(.*\)$|^oklch\(.*\)$/,{message:'Must be hex, rgb(), oklch(), or "transparent"'}),ur=g.object({baseDark:g.string().optional(),baseLight:g.string().optional(),deepDark:v,deepLight:v,transparent:g.string().optional(),main:v.optional(),opposite:v.optional(),complementary:v.optional(),information:v.optional(),success:v.optional(),danger:v.optional(),warning:v.optional(),primary:v.optional(),secondary:v.optional(),tertiary:v.optional()}).passthrough(),Xn=g.object({brands:g.record(g.string(),ur).refine(e=>Object.keys(e).length>0,{message:"apollion.config.mjs: brands must contain at least 1 entry"}),modes:g.array(g.enum(["light","dark"])).optional(),surfaces:g.array(g.enum(["positive","negative"])).optional(),dimensions:g.array(g.enum(["compact","normal","spacious"])).optional(),output:g.object({runtime:g.boolean().optional(),css:g.boolean().optional(),json:g.boolean().optional(),ts:g.boolean().optional(),designMd:g.boolean().optional(),tailwind:g.boolean().optional(),cssModes:g.boolean().optional()}).passthrough().optional()}).passthrough();var hr=[/\brequire\s*\(/,/\bimport\s*\(/,/^\s*import\s+/m],yr=1e3;var Oe=class Oe extends Error{constructor(o,r){super(o);this.configPath=r;this.name="ConfigLoadError"}};i(Oe,"ConfigLoadError");var N=Oe;async function Yn(e){let n=fr(e.configPath),o=await pr(n,"utf8");for(let l of hr)if(l.test(o))throw new N(`apollion.config: dynamic require/import not allowed (matched ${l}). Declarative config only \u2014 see ADR-006 \xA73.8 B3.`,n);let r=o.replace(/(^|\n)\s*export\s+default\s+/,(l,f)=>`${f}__apollion_config_export = `);if(r===o)throw new N("apollion.config: missing `export default <object>;` \u2014 config must export a default object literal.",n);let t={__apollion_config_export:void 0,console:br(),Symbol,Number,String,Boolean,Array,Object,JSON,Math,defineConfig:i(l=>l,"defineConfig")},s=mr(t);try{new gr(r,{filename:n}).runInContext(s,{timeout:yr})}catch(l){throw new N(`apollion.config: evaluation failed \u2014 ${l instanceof Error?l.message:String(l)}`,n)}let a=t.__apollion_config_export;if(a===void 0)throw new N("apollion.config: `export default` produced undefined.",n);let c=Xn.safeParse(a);if(!c.success){let l=c.error.issues.map(f=>` ${f.path.join(".")||"(root)"}: ${f.message}`).join(`
|
|
14
14
|
`);throw new N(`apollion.config: schema validation failed \u2014
|
|
15
|
-
${l}`,n)}return c.data}i(
|
|
15
|
+
${l}`,n)}return c.data}i(Yn,"loadConfig");function br(){return{log:i((...e)=>console.log("[apollion.config]",...e),"log"),warn:i((...e)=>console.warn("[apollion.config]",...e),"warn"),error:i((...e)=>console.error("[apollion.config]",...e),"error")}}i(br,"makeReadOnlyConsole");function kr(e){let n=e.slice(2),o=n[0];o!=="build"&&pe(`Unknown command "${o??""}". Usage: apollion-tokens build [--check] [--verbose] --config <path> [--out <dir>]`);let r="apollion.config.mjs",t="dist",s=!1,a=!1;for(let c=1;c<n.length;c++){let l=n[c];switch(l){case"--config":r=n[++c]??pe("--config needs a path");break;case"--out":t=n[++c]??pe("--out needs a path");break;case"--check":s=!0;break;case"--verbose":a=!0;break;default:pe(`Unknown flag "${l}"`)}}return{command:o,configPath:r,outDir:t,check:s,verbose:a}}i(kr,"parseArgs");function pe(e){console.error(`apollion-tokens: ${e}`),process.exit(2)}i(pe,"fail");async function Ir(e){let n=Ve(e);if(n.endsWith(".json")){let o=await Rr(n,"utf8");return JSON.parse(o)}return Yn({configPath:n})}i(Ir,"loadConfigFromPath");async function xr(){let e=kr(process.argv),n=await Ir(e.configPath);if(e.check){await Un({config:n,outDir:Ve(e.outDir)})||(console.error("apollion-tokens: dist/ is stale, missing, or has drifted from its manifest. Re-run `apollion-tokens build` without --check."),process.exit(1)),console.log("apollion-tokens: dist/ is up-to-date with config.");return}let{manifest:o}=await qn({config:n,outDir:Ve(e.outDir),verbose:e.verbose});console.log(`apollion-tokens: wrote ${o.files.length} file(s) \u2014 configHash=${o.configHash.slice(0,12)}\u2026`)}i(xr,"main");xr().catch(e=>{console.error(`apollion-tokens: ${e instanceof Error?e.message:String(e)}`),process.exit(1)});
|
package/package.json
CHANGED
package/src/builders/colors.ts
CHANGED
|
@@ -84,7 +84,8 @@ const contrastRatio = (a: string, b: string): number => {
|
|
|
84
84
|
return wcagContrast(parsedA, parsedB);
|
|
85
85
|
};
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
/** OKLch L of `color`, or `null` if it fails to parse. */
|
|
88
|
+
export const oklchLightness = (color: string): number | null => {
|
|
88
89
|
const parsed = toOklch(parse(color));
|
|
89
90
|
return parsed ? (parsed.l ?? 0) : null;
|
|
90
91
|
};
|
package/src/builders/ladder.ts
CHANGED
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
import type { LadderGroups, LadderInput, LadderOverride, Polarity } from '@apollion-dsi/core/themes/colors';
|
|
13
13
|
import {
|
|
14
14
|
apcaContrast,
|
|
15
|
+
DARK_BOOST_TAPER_MAX_L,
|
|
16
|
+
DARK_ELEVATION_BOOST,
|
|
15
17
|
EDGE_ALPHA,
|
|
16
18
|
HALATION_FLOORS,
|
|
17
19
|
INK_APCA_MIN,
|
|
@@ -21,7 +23,15 @@ import {
|
|
|
21
23
|
WASH_ALPHA,
|
|
22
24
|
} from '@apollion-dsi/core/themes/colors';
|
|
23
25
|
|
|
24
|
-
import {
|
|
26
|
+
import {
|
|
27
|
+
clampLightness,
|
|
28
|
+
isDarkSurface,
|
|
29
|
+
mixOklch,
|
|
30
|
+
oklchLightness,
|
|
31
|
+
readableColor,
|
|
32
|
+
shiftLightness,
|
|
33
|
+
toRgbaString,
|
|
34
|
+
} from './colors';
|
|
25
35
|
|
|
26
36
|
const FALLBACK_LIGHT = '#FFFFFF';
|
|
27
37
|
const FALLBACK_DARK = '#000000';
|
|
@@ -30,6 +40,14 @@ export function resolvePolarity(colors: LadderInput): Polarity {
|
|
|
30
40
|
return isDarkSurface(colors.baseLight) ? 'dark' : 'light';
|
|
31
41
|
}
|
|
32
42
|
|
|
43
|
+
/** Mirror of core `darkElevationBoostFactor` (Strangler Fig — see parity.test). */
|
|
44
|
+
function darkElevationBoostFactor(canvasL: number): number {
|
|
45
|
+
const floor = HALATION_FLOORS.CANVAS_MIN_L;
|
|
46
|
+
if (canvasL <= floor) return 1;
|
|
47
|
+
if (canvasL >= DARK_BOOST_TAPER_MAX_L) return 0;
|
|
48
|
+
return (DARK_BOOST_TAPER_MAX_L - canvasL) / (DARK_BOOST_TAPER_MAX_L - floor);
|
|
49
|
+
}
|
|
50
|
+
|
|
33
51
|
function ensureApca(ink: string, ground: string, minLc: number): string {
|
|
34
52
|
if (Math.abs(apcaContrast(ink, ground)) >= minLc) return ink;
|
|
35
53
|
const towardLight = Math.abs(apcaContrast('#ffffff', ground)) >= Math.abs(apcaContrast('#000000', ground));
|
|
@@ -48,13 +66,16 @@ function deriveSurface(colors: LadderInput, polarity: Polarity): LadderGroups['s
|
|
|
48
66
|
const isDark = polarity === 'dark';
|
|
49
67
|
const canvas = isDark ? clampLightness(baseLight, { min: HALATION_FLOORS.CANVAS_MIN_L }) : baseLight;
|
|
50
68
|
const sunkenRaw = shiftLightness(canvas, LADDER_DELTAS.sunken);
|
|
69
|
+
const boost = isDark ? darkElevationBoostFactor(oklchLightness(canvas) ?? 0) : 0;
|
|
70
|
+
const delta = (role: keyof typeof DARK_ELEVATION_BOOST): number =>
|
|
71
|
+
LADDER_DELTAS[role] + boost * DARK_ELEVATION_BOOST[role];
|
|
51
72
|
|
|
52
73
|
return {
|
|
53
74
|
canvas,
|
|
54
75
|
sunken: isDark ? clampLightness(sunkenRaw, { min: HALATION_FLOORS.CANVAS_MIN_L }) : sunkenRaw,
|
|
55
|
-
paper: shiftLightness(canvas,
|
|
56
|
-
raised: shiftLightness(canvas,
|
|
57
|
-
overlay: shiftLightness(canvas,
|
|
76
|
+
paper: shiftLightness(canvas, delta('paper')),
|
|
77
|
+
raised: shiftLightness(canvas, delta('raised')),
|
|
78
|
+
overlay: shiftLightness(canvas, delta('overlay')),
|
|
58
79
|
scrim: isDark ? (colors.deepLight ?? FALLBACK_DARK) : (colors.neutral?.['180'] ?? colors.baseDark ?? FALLBACK_DARK),
|
|
59
80
|
};
|
|
60
81
|
}
|
package/src/token-meta.ts
CHANGED
|
@@ -50,7 +50,10 @@ export const TOKEN_META: Readonly<Record<string, TokenMetaEntry>> = {
|
|
|
50
50
|
|
|
51
51
|
// ── Surface ladder (ADR-023 — mode-aware grounds, inks, edges) ───────────
|
|
52
52
|
'bg.canvas': { description: 'Page ground — the theme canvas (never pure black in dark).' },
|
|
53
|
-
'bg.paper': {
|
|
53
|
+
'bg.paper': {
|
|
54
|
+
description:
|
|
55
|
+
'Component ground (cards, inputs, tables) — lighter than the canvas in both modes; the dark step is widened for near-black grounds so cards stay separated on LCD/SDR panels (ADR-026).',
|
|
56
|
+
},
|
|
54
57
|
'bg.overlay': { description: 'Top of the elevation ladder — modal / dialog panels.' },
|
|
55
58
|
'text.primary': { description: 'Primary neutral ink — AA + APCA Lc ≥ 75 over bg.paper and bg.canvas.' },
|
|
56
59
|
'text.muted': { description: 'Muted neutral ink — AA + APCA Lc ≥ 45 over bg.paper.' },
|