@apollion-dsi/tokens 5.9.0 → 6.0.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 +10 -10
- package/lib/build.esm.js +10 -10
- package/lib/cli.mjs +12 -12
- package/package.json +2 -2
- package/src/builders/motion.ts +95 -0
- package/src/ir.ts +93 -2
- package/src/renderers/dtcg-project.ts +37 -2
- package/src/renderers/resolver.ts +5 -2
- package/src/renderers/tailwind.ts +7 -2
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 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
|
-
`)}
|
|
3
|
-
`)}
|
|
4
|
-
`)}
|
|
5
|
-
`)}
|
|
1
|
+
"use strict";var Y=Object.defineProperty;var qn=Object.getOwnPropertyDescriptor;var Xn=Object.getOwnPropertyNames;var Un=Object.prototype.hasOwnProperty;var i=(e,n)=>Y(e,"name",{value:n,configurable:!0});var Yn=(e,n)=>{for(var o in n)Y(e,o,{get:n[o],enumerable:!0})},Zn=(e,n,o,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of Xn(n))!Un.call(e,t)&&t!==o&&Y(e,t,{get:()=>n[t],enumerable:!(r=qn(n,t))||r.enumerable});return e};var Qn=e=>Zn(Y({},"__esModule",{value:!0}),e);var Ko={};Yn(Ko,{build:()=>Bo,check:()=>zo});module.exports=Qn(Ko);var x=require("node:fs/promises"),Jn=require("node:os"),A=require("node:path");var te=require("culori");var H=require("@apollion-dsi/core/themes/border"),Fe=require("@apollion-dsi/core/themes/colors"),oe=require("@apollion-dsi/core/themes/depth"),C=require("@apollion-dsi/core/themes/font"),he=require("@apollion-dsi/core/themes/spacing"),_=require("culori");var Ve=require("@apollion-dsi/core/themes/breakpoints");function Me(e=Ve.defaultInputBreakpoints){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Me,"breakpointEntries");var Z=require("@apollion-dsi/core/themes/layout");function Ee(e=Z.defaultInputContainerSizes){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Ee,"containerSizeEntries");function Ae(e=Z.defaultInputLayout){return[["page-max-width",`${e.pageMaxWidth}px`]]}i(Ae,"layoutEntries");var $=require("@apollion-dsi/core/themes/motion");function Le(e=$.defaultInputMotion){let n=(0,$.createMotion)(e);return Object.keys(e.duration).map(o=>[o,{ms:e.duration[o],css:n.duration[o]}])}i(Le,"motionDurationEntries");function Oe(e=$.defaultInputMotion){let n=(0,$.createMotion)(e);return Object.keys(e.easing).map(o=>[o,{points:e.easing[o],css:n.easing[o]}])}i(Oe,"motionEasingEntries");function Ge(e=$.defaultInputMotion){let n=(0,$.createMotion)(e);return Object.keys(e.indicator).map(o=>[o,{ms:e.indicator[o],css:n.indicator[o]}])}i(Ge,"motionIndicatorEntries");function Ne(e=$.defaultInputMotion){let n=(0,$.createMotion)(e);return Object.keys(e.intent).map(o=>{let r=e.intent[o],t=typeof r.duration=="number"?null:r.duration,s=typeof r.duration=="number"?r.duration:e.duration[r.duration];return[o,{durationRef:t,duration:{ms:s,css:n.intent[o].duration},easingRef:r.easing,easing:{points:e.easing[r.easing],css:n.intent[o].easing}}]})}i(Ne,"motionIntentEntries");var je=require("@apollion-dsi/core/themes/dimension");function Q({multiplier:e=.25,alias:n},o){let r=o!==void 0?je.DIMENSION_MULTIPLIERS[o]:e;return(...t)=>t.map(s=>{let a=typeof s=="string"?n[s]:s;return`${r*a}rem`}).join(" ")}i(Q,"createSpacing");var ge={"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 ye(e){let n=Object.keys(ge).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(ye,"assertTokenMetaResolves");var eo=(0,_.converter)("oklch");function R(e){return typeof e.type=="string"&&"value"in e}i(R,"isToken");function v(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}i(v,"kebab");function Pe(e){return e.split(".").map(v).join(".")}i(Pe,"kebabPath");function E(e){return e.kind==="ref"?e.resolved.raw:e.raw}i(E,"rawValue");function ee(e,n){return Number(e.toFixed(n))||0}i(ee,"round");function be(e){let n=eo((0,_.parse)(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[ee(n.l,4),ee(n.c,4),ee(n.h??0,2)],r=(0,_.formatHex)(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:ee(n.alpha,4),hex:r}:{kind:"color",raw:e,components:o,hex:r}}i(be,"toColorValue");var _e=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function V(e){let n=_e.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(V,"toDimensionValue");function S(e){return{type:"color",value:be(e)}}i(S,"colorToken");function j(e){let n={};for(let[o,r]of Object.entries(e))n[o]=S(r);return n}i(j,"recordColorGroup");function Be(e){let n=(0,Fe.createReadableTextLayer)(e),o={};for(let[r,t]of Object.entries(n.palettes))o[r]=S(t);return o.neutral=j(n.neutral),o}i(Be,"buildReadableTextGroup");var no=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function ze(e){let n={};for(let o of no){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=j(e.grayscale),n.neutral=j(e.neutral),n.surface=j(e.surface),n.ink=j(e.ink),n.edge=j(e.edge),n.wash=j(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}i(ze,"buildColorPrimitives");function He(e){let n=Q(he.defaultInputSpacing,e),o={};for(let r of Object.keys(he.defaultInputSpacing.alias))o[r]={type:"dimension",value:V(n(r))};return o}i(He,"buildSpacePrimitives");function Ke(){let e={};for(let[n,o]of Object.entries(H.defaultInputBorder.borderWidth))e[n]={type:"dimension",value:V(o)};return e}i(Ke,"buildBorderWidthPrimitives");function oo(e,n){return{color:ze(e),space:He(n),borderWidth:Ke()}}i(oo,"buildPrimitives");var We={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"},qe={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}i(ro,"lookupPrimitive");function P(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=o[t],c=a?ro(n,a):void 0;r[t]=a&&c===s?{type:"color",value:{kind:"ref",path:a,resolved:be(s)}}:S(s)}return r}i(P,"colorRefGroup");var Xe={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 s of o.slice(1))if(t&&!R(t)&&s in t)t=t[s];else return;return t&&R(t)&&t.value.kind==="dimension"?t.value.raw:void 0}i(io,"lookupDimensionPrimitive");function Re(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=o[t],c=a?io(n,a):void 0;r[t]=a&&c===s?{type:"dimension",value:{kind:"ref",path:a,resolved:V(s)}}:{type:"dimension",value:V(s)}}return r}i(Re,"dimensionRefGroup");function Ue(e){let n={},o={};for(let[s,a]of Object.entries(H.defaultInputBorder.borderRadius))_e.test(a)?n[s]={type:"dimension",value:V(a)}:o[s]=a;let r=Re(H.defaultInputBorder.borderWidth,e,to),t={};for(let[s,a]of Object.entries(H.defaultInputBorder.borderStyle))t[s]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:r,style:t},extensions:o}}i(Ue,"buildBorder");function Ye(e){let n=(0,C.createFont)(C.defaultInputFont,e),o={};for(let[c,u]of Object.entries(C.defaultInputFont.fontFamily)){let g=u.replace(/;\s*$/,"").trim();o[c]={type:"fontFamily",value:{kind:"fontFamily",raw:g,family:g}}}let r={};for(let[c,u]of Object.entries(n.fontSize))r[c]={type:"dimension",value:V(u)};let t={};for(let[c,u]of Object.entries(C.defaultInputFont.fontWeight))t[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${u}`,weight:u}};let s={};for(let[c,u]of Object.entries(C.defaultInputFont.lineHeight))s[c]={type:"number",value:{kind:"number",raw:`${u}`,number:u}};let a={letterSpacing:C.defaultInputFont.letterSpacing,textTransform:C.defaultInputFont.textTransform,fontStyle:C.defaultInputFont.fontStyle};return{group:{family:o,size:r,weight:t,lineHeight:s},extensions:a}}i(Ye,"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=i(u=>V(a[u]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:be(t),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}i(ao,"parseShadow");function Ze(e){let n=(0,oe.createDeth)(e),o={};for(let r of Object.keys(oe.levelValues))o[r]={type:"shadow",value:ao(n(r))};return o}i(Ze,"buildShadow");function ne(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=n?`${n}.${v(t)}`:v(t);if(R(s)){o.add(a);let c=ge[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]=ne(s,a,o)}return r}i(ne,"decorateGroup");function co(e){let n=new Set,o=ne(e.primitives,"",n),r=ne(e.groups,"",n);return ye(n),{...e,primitives:o,groups:r}}i(co,"decorateMeta");function re(e,n){return ne(e,"",n)}i(re,"decorateSlice");function Qe(e,n,o){for(let[r,t]of Object.entries(e)){let s=n?`${n}.${v(r)}`:v(r);R(t)?o.add(s):Qe(t,s,o)}}i(Qe,"collectPaths");function en(e){let n=new Set;for(let o of e)Qe(o.groups,"",n);ye(n)}i(en,"assertSlicesMetaComplete");function nn(){let e={};for(let[n,o]of Me())e[n]={type:"dimension",value:V(o)};return e}i(nn,"buildBreakpoints");function on(){let e={};for(let[n,o]of Ee())e[n]={type:"dimension",value:V(o)};return e}i(on,"buildContainerSizes");function rn(){let e={};for(let[n,o]of Ae())e[n]={type:"dimension",value:V(o)};return e}i(rn,"buildLayoutConstants");function tn(){let e=i(a=>({type:"duration",value:{kind:"duration",raw:a.css,value:a.ms,unit:"ms"}}),"durationToken"),n=i(a=>({type:"cubicBezier",value:{kind:"cubicBezier",raw:a.css,points:a.points}}),"easingToken"),o={};for(let[a,c]of Le())o[a]=e(c);let r={};for(let[a,c]of Oe())r[a]=n(c);let t={};for(let[a,c]of Ge())t[a]=e(c);let s={};for(let[a,c]of Ne()){let u=e(c.duration).value;s[a]={duration:c.durationRef?{type:"duration",value:{kind:"ref",path:`motion.duration.${c.durationRef}`,resolved:u}}:e(c.duration),easing:{type:"cubicBezier",value:{kind:"ref",path:`motion.easing.${c.easingRef}`,resolved:n(c.easing).value}}}}return{duration:o,easing:r,indicator:t,intent:s}}i(tn,"buildMotion");var sn={unit:"px",interval:"half-open [value, next) \u2014 min-width sets, ascending",cssVarsUsage:"informational only \u2014 var() is invalid inside a @media prelude"};function an(){let e=Ke(),o=Ue({borderWidth:e}),r={"com.apollion.breakpoint":sn};Object.keys(o.extensions).length>0&&(r["com.apollion.border"]={radius:o.extensions});let t=new Set;return{groups:re({"border-width":e,border:o.group,breakpoint:nn(),"container-size":on(),layout:rn(),motion:tn()},t),extensions:r}}i(an,"buildBaseIR");function cn(e){let n=Ye(e),o=new Set;return{groups:re({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}i(cn,"buildFontIR");function un(e,n){let o=ze(n),r=new Set;return{groups:re({color:o,bg:P(e.bg,n,We),text:P(e.text,n,Je),edge:P(e.edge,n,qe),tx:Be(n),shadow:Ze(n)},r),extensions:{}}}i(un,"buildColorIR");function ln(e,n){let o=He(n),r={space:o},t=new Set;return{groups:re({space:o,spacing:Re(e.spacing,r,Xe)},t),extensions:{}}}i(ln,"buildSpacingIR");function uo(e,n,o){let r={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},t=oo(n,o.dimension),s=Ue(t),a=Ye(o.dimension),c={"com.apollion.variant":r,"com.apollion.font":a.extensions,"com.apollion.breakpoint":sn};Object.keys(s.extensions).length>0&&(c["com.apollion.border"]={radius:s.extensions});let u={description:`Apollion DS tokens \u2014 DTCG 2025.10. Variant: ${r.brand}/${r.mode}/${r.surface}/${r.dimension}.`,meta:r,primitives:t,groups:{bg:P(e.bg,n,We),text:P(e.text,n,Je),edge:P(e.edge,n,qe),tx:Be(n),spacing:Re(e.spacing,t,Xe),border:s.group,breakpoint:nn(),"container-size":on(),layout:rn(),motion:tn(),font:a.group,shadow:Ze(n)},extensions:c};return co(u)}i(uo,"buildIR");var B=uo;var lo=(0,te.converter)("rgb"),dn="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function ke(e){if(e.value.kind==="color")return e.value;if(e.value.kind==="ref"&&e.value.resolved.kind==="color")return e.value.resolved}i(ke,"colorPayload");function Ie(e){return e.alpha===void 0}i(Ie,"isOpaqueColor");function pn(e){let n=lo((0,te.parse)(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(pn,"rgbTriplet");function K(e,n=[]){let o=new Map;for(let[r,t]of Object.entries(e)){let s=[...n,v(r)];if(R(t))o.set(s.join("-"),t);else for(let[a,c]of K(t,s))o.set(a,c)}return o}i(K,"flatTokens");function h(e,...n){let o=e[n[0]];for(let r of n.slice(1)){if(!o||R(o))return{};o=o[r]}return o&&!R(o)?o:{}}i(h,"groupAt");function fn(e){let n=[];for(let o of["bg","text","edge","tx"])for(let[r,t]of K(h(e.groups,o),[o])){let s=ke(t);s&&n.push({key:r,cssVar:`--apollion-${r}`,opaque:Ie(s)})}return n}i(fn,"colorEntries");function M(e,n){return[...K(e)].map(([o])=>[o,`var(--apollion-${[...n,o].join("-")})`])}i(M,"varEntries");function w(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(w,"pushScale");function mn(e){let n=[dn,"// Tailwind preset over the Apollion foundation tokens \u2014 requires dist/css/ vars in scope.","","const preset = {"," theme: {"," extend: {"],o=fn(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(" },"),w(n,"screens",[...K(h(e.groups,"breakpoint"))].filter(([r])=>r!=="xs").map(([r,t])=>[r,E(t.value)])),w(n,"spacing",M(h(e.groups,"spacing"),["spacing"])),w(n,"borderRadius",M(h(e.groups,"border","radius"),["border","radius"])),w(n,"borderWidth",M(h(e.groups,"border","width"),["border","width"])),w(n,"fontFamily",M(h(e.groups,"font","family"),["font","family"])),w(n,"fontSize",M(h(e.groups,"font","size"),["font","size"])),w(n,"fontWeight",M(h(e.groups,"font","weight"),["font","weight"])),w(n,"lineHeight",M(h(e.groups,"font","lineHeight"),["font","line-height"])),w(n,"boxShadow",M(h(e.groups,"shadow"),["shadow"])),w(n,"transitionDuration",M(h(e.groups,"motion","duration"),["motion","duration"])),w(n,"transitionTimingFunction",M(h(e.groups,"motion","easing"),["motion","easing"])),n.push(" },"," },","};","","export default preset;",""),n.join(`
|
|
2
|
+
`)}i(mn,"renderTailwindPreset");function gn(e){let n=i(t=>[...K(t).keys()],"keys"),o=i(t=>`[${t.map(s=>JSON.stringify(s)).join(", ")}]`,"list");return[dn,"// tailwind-merge extension for the generated preset \u2014 pass to extendTailwindMerge().","","export const twMergeExtension = {"," extend: {"," theme: {",` colors: ${o(fn(e).map(t=>t.key))},`,` spacing: ${o(n(h(e.groups,"spacing")))},`,` borderRadius: ${o(n(h(e.groups,"border","radius")))},`,` borderWidth: ${o(n(h(e.groups,"border","width")))},`," },"," classGroups: {",` 'font-family': [{ font: ${o(n(h(e.groups,"font","family")))} }],`,` 'font-size': [{ text: ${o(n(h(e.groups,"font","size")))} }],`,` 'font-weight': [{ font: ${o(n(h(e.groups,"font","weight")))} }],`,` leading: [{ leading: ${o(n(h(e.groups,"font","lineHeight")))} }],`,` shadow: [{ shadow: ${o(n(h(e.groups,"shadow")))} }],`," },"," },","};",""].join(`
|
|
3
|
+
`)}i(gn,"renderTwMergeExtension");var yn="/* 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,v(r)];R(t)?o.push(` --apollion-${s.join("-")}: ${E(t.value)};`):ie(t,s,o)}}i(ie,"emitVars");function se(e,n,o){for(let[r,t]of Object.entries(e)){let s=[...n,v(r)];if(!R(t)){se(t,s,o);continue}let a=ke(t);a&&Ie(a)&&o.push(` --apollion-${s.join("-")}-rgb: ${pn(a)};`)}}i(se,"emitRgbVars");function xe(e,n,o){for(let[r,t]of Object.entries(e)){let s=[...n,v(r)];R(t)?t.type==="color"&&o.push(` @property --apollion-${s.join("-")} { syntax: '<color>'; inherits: true; initial-value: ${E(t.value)}; }`):xe(t,s,o)}}i(xe,"emitProperties");function hn(e,n={}){let{brand:o,mode:r,surface:t,dimension:s}=e.meta,a=[yn,""];return a.push(`/* Variant: brand=${o} mode=${r} surface=${t} dimension=${s} */`,"",":root {"),ie(e.groups,[],a),n.rgbCompanions&&(a.push(""," /* -rgb channel triplets \u2014 Tailwind <alpha-value> companions (opaque colour tokens only). */"),se(e.groups,[],a)),a.push("}",""),a.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),xe(e.groups,[],a),a.push("}",""),a.join(`
|
|
4
|
+
`)}i(hn,"renderCss");function bn(e,n,o={}){let{attribute:r="data-apollion-mode",rgbCompanions:t}=o,{brand:s,surface:a,dimension:c}=e.meta,u=[yn,""],g=i((D,l,d)=>{u.push(`${D} {`,` color-scheme: ${d};`),ie(l.groups,[],u),t&&se(l.groups,[],u),u.push("}","")},"block");u.push(`/* Variant: brand=${s} surface=${a} dimension=${c} modes=light+dark (attribute ${r}) */`,""),g(`:root, html[${r}="light"]`,e,"light"),g(`html[${r}="dark"]`,n,"dark"),u.push("@media (prefers-color-scheme: dark) {"),u.push(` html:not([${r}]) {`," color-scheme: dark;");let k=[];ie(n.groups,[],k),t&&se(n.groups,[],k);for(let D of k)u.push(` ${D}`);return u.push(" }","}",""),u.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),xe(e.groups,[],u),u.push("}",""),u.join(`
|
|
5
|
+
`)}i(bn,"renderCssModes");var po="<!-- Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. -->";function Se(e,n,o){for(let[r,t]of Object.entries(e)){let s=n?`${n}.${r}`:r;R(t)?o.push([s,E(t.value)]):Se(t,s,o)}}i(Se,"flatten");function fo(e){return typeof e=="number"?String(e):`'${String(e).replace(/'/g,"''")}'`}i(fo,"yamlEscape");function mo(e){let{mode:n,surface:o,dimension:r}=e.meta;return`${n}.${o}.${r}`}i(mo,"variantKey");function Rn(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=[];Se(t.groups,"",s),o.push(` ${mo(t)}:`);for(let[a,c]of s)o.push(` ${a}: ${fo(c)}`)}o.push("---");let r=["",po,"",`# 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 u=[];Se(t.groups,"",u);let g=new Map;for(let[k,D]of u){let l=k.split(".")[0]??k,d=g.get(l)??[];d.push([k,D]),g.set(l,d)}for(let[k,D]of g){r.push(`### ${k}`,"","| Token | Value |","| --- | --- |");for(let[l,d]of D)r.push(`| \`${l}\` | \`${d}\` |`);r.push("")}}return`${o.join(`
|
|
6
6
|
`)}
|
|
7
7
|
${r.join(`
|
|
8
|
-
`)}`}
|
|
9
|
-
`}
|
|
10
|
-
`}
|
|
11
|
-
`)}
|
|
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});
|
|
8
|
+
`)}`}i(Rn,"renderDesignMd");function kn(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(kn,"colorValue");function W(e){return{value:e.value,unit:e.unit}}i(W,"dimensionValue");function go(e){return{value:e.value,unit:e.unit}}i(go,"durationValue");function yo(e){return[...e.points]}i(yo,"cubicBezierValue");function ho(e){let n=e.shadow,o={color:kn(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(ho,"shadowValue");function bo(e){switch(e.kind){case"ref":return`{${Pe(e.path)}}`;case"color":return kn(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 ho(e);case"duration":return go(e);case"cubicBezier":return yo(e)}}i(bo,"projectValue");function Ro(e){let n={$value:bo(e.value),$type:e.type};return e.description!==void 0&&(n.$description=e.description),e.deprecated!==void 0&&(n.$deprecated=e.deprecated),n}i(Ro,"projectToken");function ve(e){let n={};for(let[o,r]of Object.entries(e))n[v(o)]=R(r)?Ro(r):ve(r);return n}i(ve,"projectGroup");function ae(e,n){let o={$description:n,...ve(e.groups)};return Object.keys(e.extensions).length>0&&(o.$extensions=e.extensions),`${JSON.stringify(o,null,2)}
|
|
9
|
+
`}i(ae,"renderSet");function In(e){return ae(e,"Apollion DS \u2014 base set (axis-invariant: border, breakpoints, container sizes, layout, motion). DTCG 2025.10.")}i(In,"renderBaseSet");function xn(e,n,o,r){return ae(e,`Apollion DS \u2014 colour set. brand=${n} mode=${o} surface=${r}. DTCG 2025.10.`)}i(xn,"renderColorSet");function Sn(e,n){return ae(e,`Apollion DS \u2014 spacing set. dimension=${n}. DTCG 2025.10.`)}i(Sn,"renderSpacingSet");function vn(e,n){return ae(e,`Apollion DS \u2014 font set. dimension=${n}. DTCG 2025.10.`)}i(vn,"renderFontSet");function Dn(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)}
|
|
10
|
+
`}i(Dn,"renderResolver");var ko="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function Io(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(Io,"emitDoc");function wn(e,n,o){let r=" ".repeat(n);for(let[t,s]of Object.entries(e))R(s)?(Io(s,r,o),o.push(`${r}${JSON.stringify(t)}: ${JSON.stringify(E(s.value))},`)):(o.push(`${r}${t}: {`),wn(s,n+1,o),o.push(`${r}},`))}i(wn,"emitGroup");function Tn(e){let{brand:n,mode:o,surface:r,dimension:t}=e.meta,s=[ko,`// Variant: brand=${n} mode=${o} surface=${r} dimension=${t}`,"","export const tokens = {"];return wn(e.groups,1,s),s.push("} as const;","","export type Tokens = typeof tokens;",""),s.join(`
|
|
11
|
+
`)}i(Tn,"renderTs");var xo=["light","dark"],So=["positive","negative"],vo=["compact","normal","spacious"];function ce(e){let n=e.modes??xo,o=e.surfaces??So,r=e.dimensions??vo,t=Object.entries(e.brands).sort(([a],[c])=>a.localeCompare(c)),s=[];for(let[a,c]of t)for(let u of n)for(let g of o)for(let k of r)s.push({brand:a,colors:c,mode:u,surface:g,dimension:k});return s}i(ce,"expandVariants");function $n(e){return`${e.brand}.${e.mode}.${e.surface}.${e.dimension}`}i($n,"variantName");var Cn=require("node:crypto");function ue(e){return(0,Cn.createHash)("sha256").update(e).digest("hex")}i(ue,"sha256");function we(e){return ue(De(e))}i(we,"hashConfig");function De(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(De).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${De(e[r])}`).join(",")}}`}i(De,"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""}}i(Vn,"detectGitCommit");function Mn(){return{node:process.version,platform:`${process.platform}-${process.arch}`}}i(Mn,"buildEnv");function En(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
|
+
`}i(En,"serializeManifest");var Do="json/sets",An="json/resolver.json";function le(e){return`${Do}/${e}.json`}i(le,"setFile");function wo(e,n,o){return`${e}.color.${n}.${o}`}i(wo,"colorSetName");function To(e){return`spacing.${e}`}i(To,"spacingSetName");function $o(e){return`font.${e}`}i($o,"fontSetName");function de(e,n){e.includes(n)||e.push(n)}i(de,"pushUnique");function Ln(e){let n=ce(e),o=[],r=[],t=[],s=[],a=new Set,c=[],u=new Set,g=[],k=new Set,D=[];for(let l of n){de(o,l.brand),de(r,l.mode),de(t,l.surface),de(s,l.dimension);let d=wo(l.brand,l.mode,l.surface);a.has(d)||(a.add(d),c.push({kind:"color",name:d,file:le(d),brand:l.brand,mode:l.mode,surface:l.surface}));let b=To(l.dimension);u.has(b)||(u.add(b),g.push({kind:"spacing",name:b,file:le(b),dimension:l.dimension}));let f=$o(l.dimension);k.has(f)||(k.add(f),D.push({kind:"font",name:f,file:le(f),dimension:l.dimension}))}return{base:{kind:"base",name:"base",file:le("base")},spacing:g,font:D,color:c,modifiers:{brand:o,mode:r,surface:t,dimension:s}}}i(Ln,"planSets");var zn=require("@apollion-dsi/core/themes/colors"),Ce=require("@apollion-dsi/core/themes/foundation"),Hn=require("@apollion-dsi/core/themes/semantic"),Kn=require("@apollion-dsi/core/themes/spacing"),Wn=require("@apollion-dsi/core/themes/surface");var y=require("culori");var X=(0,y.converter)("oklch"),Co=(0,y.converter)("rgb");function p(e,n,o){let r=(0,y.parse)(e),t=(0,y.parse)(n);if(!r||!t)return e;let s=(0,y.interpolate)([r,t],"oklch");return(0,y.formatHex)(s(o))??e}i(p,"mixOklch");function Vo(e){return e?typeof e=="string"?e:e.base:"#000"}i(Vo,"coerceToHex");var pe=1.3,Mo=.05,On=.04,G=i((e,n)=>{let o=(0,y.parse)(e),r=(0,y.parse)(n);return!o||!r?1:(0,y.wcagContrast)(o,r)},"contrastRatio"),J=i(e=>{let n=X((0,y.parse)(e));return n?n.l??0:null},"oklchLightness"),Eo=4.5;function q(e,n,o=Eo){let r=(0,y.parse)(n),t=X((0,y.parse)(e));if(!r||!t)return e;let s=G("#fff",n)>=G("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=(0,y.formatHex)(t)??e,u=(0,y.parse)(c);if(u&&(0,y.wcagContrast)(u,r)>=o)return c;let g=Math.min(1,Math.max(0,(t.l??0)+s));if(g===(t.l??0))break;t={...t,l:g}}return(0,y.formatHex)(t)??e}i(q,"readableColor");var Gn=i((e,n)=>{if(G(e,n)>=pe)return!0;let o=J(e),r=J(n);return o!==null&&r!==null&&Math.abs(o-r)>=Mo},"isPerceptibleState"),Te=i(e=>e?G("#fff",e)>G("#000",e):!1,"isDarkSurface");function Nn(e,n,o){let r=X((0,y.parse)(e));if(!r)return null;let t={...r,l:o??r.l??0},s=n?On:-On;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 u=(0,y.formatHex)(t);if(u&&G(e,u)>=pe)return u}return(0,y.formatHex)(t)??null}i(Nn,"derivePerceptibleState");function jn(e,n,o){let r=Nn(e,n,o);if(r&&G(e,r)>=pe)return r;let t=Nn(e,!n);return t&&G(e,t)>=pe?t:r??t}i(jn,"perceptibleStateFor");function T(e,n){let o=typeof e=="object"&&e!==null?e:void 0,r=Vo(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((0,y.parse)(r)){let c=Te(n.baseLight),u=Gn(r,a.action);if(u||(a.action=jn(r,c)??a.action),!Gn(r,a.active)){let g=u?void 0:J(a.action)??void 0;a.active=jn(r,c,g)??a.active}}if(a.onLight=q(a.action,a.light),o){let c=o.action??a.action,u=o.light??a.light;return{base:r,dark:o.dark??a.dark,action:c,active:o.active??a.active,light:u,onLight:o.onLight??q(c,u)}}return a}i(T,"mountSingleColor");function Fn(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(Fn,"mountGreyscaleColors");function Pn(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(Pn,"mountNeutralColors");function z(e,n){let o=X((0,y.parse)(e));if(!o)return e;let r=Math.min(1,Math.max(0,(o.l??0)+n));return(0,y.formatHex)({...o,l:r})??e}i(z,"shiftLightness");function fe(e,n){let o=X((0,y.parse)(e));if(!o)return e;let r=o.l??0,t=n.min??0,s=n.max??1;return r>=t&&r<=s?e:(0,y.formatHex)({...o,l:Math.min(s,Math.max(t,r))})??e}i(fe,"clampLightness");function F(e,n){let o=Co((0,y.parse)(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(F,"toRgbaString");var m=require("@apollion-dsi/core/themes/colors");var Ao="#FFFFFF",$e="#000000";function Lo(e){return Te(e.baseLight)?"dark":"light"}i(Lo,"resolvePolarity");function Oo(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)}i(Oo,"darkElevationBoostFactor");function _n(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 s=0;s<40;s+=1){let a=z(t,r?.02:-.02);if(a===t||(t=a,Math.abs((0,m.apcaContrast)(t,n))>=o))break}return t}i(_n,"ensureApca");function Go(e,n){let o=e.baseLight??Ao,r=n==="dark",t=r?fe(o,{min:m.HALATION_FLOORS.CANVAS_MIN_L}):o,s=z(t,m.LADDER_DELTAS.sunken),a=r?Oo(J(t)??0):0,c=i(u=>m.LADDER_DELTAS[u]+a*m.DARK_ELEVATION_BOOST[u],"delta");return{canvas:t,sunken:r?fe(s,{min:m.HALATION_FLOORS.CANVAS_MIN_L}):s,paper:z(t,c("paper")),raised:z(t,c("raised")),overlay:z(t,c("overlay")),scrim:r?e.deepLight??$e:e.neutral?.["180"]??e.baseDark??$e}}i(Go,"deriveSurface");function No(e,n){let o=e.baseDark??$e,r=fe(_n(q(o,n.paper,m.MIN_CONTRAST_AA),n.paper,m.INK_APCA_MIN.primary),{max:m.HALATION_FLOORS.INK_MAX_L}),t=i((s,a)=>_n(q(p(r,n.canvas,s),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)}}i(No,"deriveInk");function jo(e){return{hairline:F(e.primary,m.EDGE_ALPHA.hairline),border:F(e.primary,m.EDGE_ALPHA.border),strong:F(e.primary,m.EDGE_ALPHA.strong)}}i(jo,"deriveEdge");function Fo(e,n){let o=m.WASH_ALPHA[n];return{hover:F(e.primary,o.hover),pressed:F(e.primary,o.pressed),selected:F(e.primary,o.selected)}}i(Fo,"deriveWash");function Po(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(Po,"applyOverride");function Bn(e,n){let o=Lo(e),r=Go(e,o),t=No(e,r),s={surface:r,ink:t,edge:jo(t),wash:Fo(t,o)};return Po(s,n?.[o])}i(Bn,"resolveSurfaceLadder");function _o(e){let n=Pn(e);return{baseDark:e.baseDark,baseLight:e.baseLight,deepDark:e.deepDark,deepLight:e.deepLight,transparent:e.transparent??"transparent",neutral:n,grayscale:Fn(e),...Bn({...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)}}i(_o,"composeColors");function N(e,n=Kn.defaultInputSpacing){let o=e.mode==="dark"?(0,zn.toDarkColors)(e.colors):e.colors,r=_o(o),t=Q(n,e.dimension),s=(0,Hn.createSemantic)({colors:r,spacing:t}),a=(0,Ce.createFoundation)(s);return e.surface==="negative"&&(a=(0,Ce.createFoundation)((0,Wn.invertForSurface)({semantic:s,colors:r},"negative").semantic)),{foundation:a,colors:r}}i(N,"buildVariantThemes");async function Bo(e){let{config:n,outDir:o,cwd:r=process.cwd(),verbose:t=!1}=e,s=ce(n),a=n.output??{};if(s.length===0)throw new Error("apollion-tokens build: no variants (config.brands is empty)");let c=await(0,x.mkdtemp)((0,A.join)((0,Jn.tmpdir)(),"apollion-tokens-"));try{let u=[],g=i(async(l,d)=>{await Ho(c,l,d),u.push({path:l,sha256:ue(d)}),t&&console.log(` \u2713 ${l}`)},"emit");if(a.json){let l=Ln(n),d=[],b=an();d.push(b),await g(l.base.file,In(b));for(let f of l.spacing){let I=s.find(U=>U.dimension===f.dimension),{foundation:L}=N(I),O=ln(L,f.dimension);d.push(O),await g(f.file,Sn(O,f.dimension))}for(let f of l.font){let I=cn(f.dimension);d.push(I),await g(f.file,vn(I,f.dimension))}for(let f of l.color){let I=s.find(me=>me.brand===f.brand&&me.mode===f.mode&&me.surface===f.surface),{foundation:L,colors:O}=N(I),U=un(L,O);d.push(U),await g(f.file,xn(U,f.brand,f.mode,f.surface))}en(d),await g(An,Dn(n,l))}if(a.css||a.ts)for(let l of s){let{foundation:d,colors:b}=N(l),f=B(d,b,l),I=$n(l);a.css&&await g(`css/${I}.css`,hn(f,{rgbCompanions:a.tailwind})),a.ts&&await g(`ts/${I}.d.ts`,Tn(f))}if(a.cssModes){let l=new Map;for(let d of s){let b=`${d.brand}.${d.surface}.${d.dimension}`,f=l.get(b)??{};f[d.mode]=d,l.set(b,f)}for(let[d,{light:b,dark:f}]of l){if(!b||!f)throw new Error(`apollion-tokens build: output.cssModes needs both modes for ${d} (config.modes)`);let I=N(b),L=N(f),O=bn(B(I.foundation,I.colors,b),B(L.foundation,L.colors,f),{rgbCompanions:a.tailwind});await g(`css/${d}.modes.css`,O)}}if(a.tailwind){let l=s[0],{foundation:d,colors:b}=N(l),f=B(d,b,l);await g("tailwind/preset.mjs",mn(f)),await g("tailwind/tw-merge.mjs",gn(f))}if(a.designMd){let l=[...new Set(s.map(d=>d.brand))];for(let d of l){let f=s.filter(I=>I.brand===d).map(I=>{let{foundation:L,colors:O}=N(I);return B(L,O,I)});await g(`design/${d}.design.md`,Rn(d,f))}}let k={configHash:we(n),files:u,gitCommit:Vn(r),buildEnv:Mn()},D=En(k);return await(0,x.writeFile)((0,A.join)(c,"manifest.json"),D),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 ${u.length} files \u2192 ${o}`),{manifest:k,outDir:o}}catch(u){throw await(0,x.rm)(c,{recursive:!0,force:!0}).catch(()=>{}),u}}i(Bo,"build");async function zo(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 s;try{s=await(0,x.readFile)((0,A.join)(o,t.path))}catch{return!1}if(ue(s)!==t.sha256)return!1}return!0}i(zo,"check");async function Ho(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)}i(Ho,"writeAt");0&&(module.exports={build,check});
|
package/lib/build.esm.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
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
|
-
`)}
|
|
3
|
-
`)}
|
|
4
|
-
`)}
|
|
5
|
-
`)}
|
|
1
|
+
var Xn=Object.defineProperty;var i=(e,n)=>Xn(e,"name",{value:n,configurable:!0}),Un=(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 Wn,mkdtemp as sr,readFile as Hn,rename as ar,rm as Kn,writeFile as Jn}from"node:fs/promises";import{tmpdir as cr}from"node:os";import{dirname as qn,join as K}from"node:path";import{converter as Ro,parse as ko}from"culori";import{defaultInputBorder as Y}from"@apollion-dsi/core/themes/border";import{createReadableTextLayer as no}from"@apollion-dsi/core/themes/colors";import{createDeth as oo,levelValues as ro}from"@apollion-dsi/core/themes/depth";import{createFont as to,defaultInputFont as A}from"@apollion-dsi/core/themes/font";import{defaultInputSpacing as Ge}from"@apollion-dsi/core/themes/spacing";import{converter as io,formatHex as so,parse as ao}from"culori";import{defaultInputBreakpoints as Yn}from"@apollion-dsi/core/themes/breakpoints";function Ce(e=Yn){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Ce,"breakpointEntries");import{defaultInputContainerSizes as Zn,defaultInputLayout as Qn}from"@apollion-dsi/core/themes/layout";function Ve(e=Zn){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Ve,"containerSizeEntries");function Me(e=Qn){return[["page-max-width",`${e.pageMaxWidth}px`]]}i(Me,"layoutEntries");import{createMotion as J,defaultInputMotion as q}from"@apollion-dsi/core/themes/motion";function Ee(e=q){let n=J(e);return Object.keys(e.duration).map(o=>[o,{ms:e.duration[o],css:n.duration[o]}])}i(Ee,"motionDurationEntries");function Ae(e=q){let n=J(e);return Object.keys(e.easing).map(o=>[o,{points:e.easing[o],css:n.easing[o]}])}i(Ae,"motionEasingEntries");function Le(e=q){let n=J(e);return Object.keys(e.indicator).map(o=>[o,{ms:e.indicator[o],css:n.indicator[o]}])}i(Le,"motionIndicatorEntries");function Oe(e=q){let n=J(e);return Object.keys(e.intent).map(o=>{let r=e.intent[o],t=typeof r.duration=="number"?null:r.duration,s=typeof r.duration=="number"?r.duration:e.duration[r.duration];return[o,{durationRef:t,duration:{ms:s,css:n.intent[o].duration},easingRef:r.easing,easing:{points:e.easing[r.easing],css:n.intent[o].easing}}]})}i(Oe,"motionIntentEntries");import{DIMENSION_MULTIPLIERS as eo}from"@apollion-dsi/core/themes/dimension";function X({multiplier:e=.25,alias:n},o){let r=o!==void 0?eo[o]:e;return(...t)=>t.map(s=>{let a=typeof s=="string"?n[s]:s;return`${r*a}rem`}).join(" ")}i(X,"createSpacing");var pe={"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 fe(e){let n=Object.keys(pe).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(fe,"assertTokenMetaResolves");var co=io("oklch");function h(e){return typeof e.type=="string"&&"value"in e}i(h,"isToken");function I(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}i(I,"kebab");function Ne(e){return e.split(".").map(I).join(".")}i(Ne,"kebabPath");function $(e){return e.kind==="ref"?e.resolved.raw:e.raw}i($,"rawValue");function U(e,n){return Number(e.toFixed(n))||0}i(U,"round");function me(e){let n=co(ao(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[U(n.l,4),U(n.c,4),U(n.h??0,2)],r=so(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:U(n.alpha,4),hex:r}:{kind:"color",raw:e,components:o,hex:r}}i(me,"toColorValue");var je=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function w(e){let n=je.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(w,"toDimensionValue");function k(e){return{type:"color",value:me(e)}}i(k,"colorToken");function L(e){let n={};for(let[o,r]of Object.entries(e))n[o]=k(r);return n}i(L,"recordColorGroup");function Fe(e){let n=no(e),o={};for(let[r,t]of Object.entries(n.palettes))o[r]=k(t);return o.neutral=L(n.neutral),o}i(Fe,"buildReadableTextGroup");var uo=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function Pe(e){let n={};for(let o of uo){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=L(e.grayscale),n.neutral=L(e.neutral),n.surface=L(e.surface),n.ink=L(e.ink),n.edge=L(e.edge),n.wash=L(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}i(Pe,"buildColorPrimitives");function _e(e){let n=X(Ge,e),o={};for(let r of Object.keys(Ge.alias))o[r]={type:"dimension",value:w(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:w(o)};return e}i(Be,"buildBorderWidthPrimitives");function lo(e,n){return{color:Pe(e),space:_e(n),borderWidth:Be()}}i(lo,"buildPrimitives");var ze={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"},He={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"},Ke={hairline:"color.edge.hairline",border:"color.edge.border",strong:"color.edge.strong"};function po(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(po,"lookupPrimitive");function N(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=o[t],c=a?po(n,a):void 0;r[t]=a&&c===s?{type:"color",value:{kind:"ref",path:a,resolved:me(s)}}:k(s)}return r}i(N,"colorRefGroup");var We={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},fo={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function mo(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&&!h(t)&&s in t)t=t[s];else return;return t&&h(t)&&t.value.kind==="dimension"?t.value.raw:void 0}i(mo,"lookupDimensionPrimitive");function ge(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:"dimension",value:{kind:"ref",path:a,resolved:w(s)}}:{type:"dimension",value:w(s)}}return r}i(ge,"dimensionRefGroup");function Je(e){let n={},o={};for(let[s,a]of Object.entries(Y.borderRadius))je.test(a)?n[s]={type:"dimension",value:w(a)}:o[s]=a;let r=ge(Y.borderWidth,e,fo),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(Je,"buildBorder");function qe(e){let n=to(A,e),o={};for(let[c,u]of Object.entries(A.fontFamily)){let m=u.replace(/;\s*$/,"").trim();o[c]={type:"fontFamily",value:{kind:"fontFamily",raw:m,family:m}}}let r={};for(let[c,u]of Object.entries(n.fontSize))r[c]={type:"dimension",value:w(u)};let t={};for(let[c,u]of Object.entries(A.fontWeight))t[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${u}`,weight:u}};let s={};for(let[c,u]of Object.entries(A.lineHeight))s[c]={type:"number",value:{kind:"number",raw:`${u}`,number:u}};let a={letterSpacing:A.letterSpacing,textTransform:A.textTransform,fontStyle:A.fontStyle};return{group:{family:o,size:r,weight:t,lineHeight:s},extensions:a}}i(qe,"buildFont");var go=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function yo(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let r=n.match(go),t=r?r[0]:"#000000",a=(r?n.slice(0,r.index).trim():n).split(/\s+/).filter(Boolean),c=i(u=>w(a[u]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:me(t),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}i(yo,"parseShadow");function Xe(e){let n=oo(e),o={};for(let r of Object.keys(ro))o[r]={type:"shadow",value:yo(n(r))};return o}i(Xe,"buildShadow");function Z(e,n,o){let r={};for(let[t,s]of Object.entries(e)){let a=n?`${n}.${I(t)}`:I(t);if(h(s)){o.add(a);let c=pe[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 ho(e){let n=new Set,o=Z(e.primitives,"",n),r=Z(e.groups,"",n);return fe(n),{...e,primitives:o,groups:r}}i(ho,"decorateMeta");function Q(e,n){return Z(e,"",n)}i(Q,"decorateSlice");function Ue(e,n,o){for(let[r,t]of Object.entries(e)){let s=n?`${n}.${I(r)}`:I(r);h(t)?o.add(s):Ue(t,s,o)}}i(Ue,"collectPaths");function Ye(e){let n=new Set;for(let o of e)Ue(o.groups,"",n);fe(n)}i(Ye,"assertSlicesMetaComplete");function Ze(){let e={};for(let[n,o]of Ce())e[n]={type:"dimension",value:w(o)};return e}i(Ze,"buildBreakpoints");function Qe(){let e={};for(let[n,o]of Ve())e[n]={type:"dimension",value:w(o)};return e}i(Qe,"buildContainerSizes");function en(){let e={};for(let[n,o]of Me())e[n]={type:"dimension",value:w(o)};return e}i(en,"buildLayoutConstants");function nn(){let e=i(a=>({type:"duration",value:{kind:"duration",raw:a.css,value:a.ms,unit:"ms"}}),"durationToken"),n=i(a=>({type:"cubicBezier",value:{kind:"cubicBezier",raw:a.css,points:a.points}}),"easingToken"),o={};for(let[a,c]of Ee())o[a]=e(c);let r={};for(let[a,c]of Ae())r[a]=n(c);let t={};for(let[a,c]of Le())t[a]=e(c);let s={};for(let[a,c]of Oe()){let u=e(c.duration).value;s[a]={duration:c.durationRef?{type:"duration",value:{kind:"ref",path:`motion.duration.${c.durationRef}`,resolved:u}}:e(c.duration),easing:{type:"cubicBezier",value:{kind:"ref",path:`motion.easing.${c.easingRef}`,resolved:n(c.easing).value}}}}return{duration:o,easing:r,indicator:t,intent:s}}i(nn,"buildMotion");var on={unit:"px",interval:"half-open [value, next) \u2014 min-width sets, ascending",cssVarsUsage:"informational only \u2014 var() is invalid inside a @media prelude"};function rn(){let e=Be(),o=Je({borderWidth:e}),r={"com.apollion.breakpoint":on};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(),motion:nn()},t),extensions:r}}i(rn,"buildBaseIR");function tn(e){let n=qe(e),o=new Set;return{groups:Q({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}i(tn,"buildFontIR");function sn(e,n){let o=Pe(n),r=new Set;return{groups:Q({color:o,bg:N(e.bg,n,ze),text:N(e.text,n,He),edge:N(e.edge,n,Ke),tx:Fe(n),shadow:Xe(n)},r),extensions:{}}}i(sn,"buildColorIR");function an(e,n){let o=_e(n),r={space:o},t=new Set;return{groups:Q({space:o,spacing:ge(e.spacing,r,We)},t),extensions:{}}}i(an,"buildSpacingIR");function bo(e,n,o){let r={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},t=lo(n,o.dimension),s=Je(t),a=qe(o.dimension),c={"com.apollion.variant":r,"com.apollion.font":a.extensions,"com.apollion.breakpoint":on};Object.keys(s.extensions).length>0&&(c["com.apollion.border"]={radius:s.extensions});let u={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,ze),text:N(e.text,n,He),edge:N(e.edge,n,Ke),tx:Fe(n),spacing:ge(e.spacing,t,We),border:s.group,breakpoint:Ze(),"container-size":Qe(),layout:en(),motion:nn(),font:a.group,shadow:Xe(n)},extensions:c};return ho(u)}i(bo,"buildIR");var j=bo;var Io=Ro("rgb"),cn="// 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 he(e){return e.alpha===void 0}i(he,"isOpaqueColor");function un(e){let n=Io(ko(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(un,"rgbTriplet");function P(e,n=[]){let o=new Map;for(let[r,t]of Object.entries(e)){let s=[...n,I(r)];if(h(t))o.set(s.join("-"),t);else for(let[a,c]of P(t,s))o.set(a,c)}return o}i(P,"flatTokens");function g(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:{}}i(g,"groupAt");function ln(e){let n=[];for(let o of["bg","text","edge","tx"])for(let[r,t]of P(g(e.groups,o),[o])){let s=ye(t);s&&n.push({key:r,cssVar:`--apollion-${r}`,opaque:he(s)})}return n}i(ln,"colorEntries");function T(e,n){return[...P(e)].map(([o])=>[o,`var(--apollion-${[...n,o].join("-")})`])}i(T,"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(" },")}}i(v,"pushScale");function dn(e){let n=[cn,"// 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(" },"),v(n,"screens",[...P(g(e.groups,"breakpoint"))].filter(([r])=>r!=="xs").map(([r,t])=>[r,$(t.value)])),v(n,"spacing",T(g(e.groups,"spacing"),["spacing"])),v(n,"borderRadius",T(g(e.groups,"border","radius"),["border","radius"])),v(n,"borderWidth",T(g(e.groups,"border","width"),["border","width"])),v(n,"fontFamily",T(g(e.groups,"font","family"),["font","family"])),v(n,"fontSize",T(g(e.groups,"font","size"),["font","size"])),v(n,"fontWeight",T(g(e.groups,"font","weight"),["font","weight"])),v(n,"lineHeight",T(g(e.groups,"font","lineHeight"),["font","line-height"])),v(n,"boxShadow",T(g(e.groups,"shadow"),["shadow"])),v(n,"transitionDuration",T(g(e.groups,"motion","duration"),["motion","duration"])),v(n,"transitionTimingFunction",T(g(e.groups,"motion","easing"),["motion","easing"])),n.push(" },"," },","};","","export default preset;",""),n.join(`
|
|
2
|
+
`)}i(dn,"renderTailwindPreset");function pn(e){let n=i(t=>[...P(t).keys()],"keys"),o=i(t=>`[${t.map(s=>JSON.stringify(s)).join(", ")}]`,"list");return[cn,"// 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(g(e.groups,"spacing")))},`,` borderRadius: ${o(n(g(e.groups,"border","radius")))},`,` borderWidth: ${o(n(g(e.groups,"border","width")))},`," },"," classGroups: {",` 'font-family': [{ font: ${o(n(g(e.groups,"font","family")))} }],`,` 'font-size': [{ text: ${o(n(g(e.groups,"font","size")))} }],`,` 'font-weight': [{ font: ${o(n(g(e.groups,"font","weight")))} }],`,` leading: [{ leading: ${o(n(g(e.groups,"font","lineHeight")))} }],`,` shadow: [{ shadow: ${o(n(g(e.groups,"shadow")))} }],`," },"," },","};",""].join(`
|
|
3
|
+
`)}i(pn,"renderTwMergeExtension");var fn="/* Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. */";function ee(e,n,o){for(let[r,t]of Object.entries(e)){let s=[...n,I(r)];h(t)?o.push(` --apollion-${s.join("-")}: ${$(t.value)};`):ee(t,s,o)}}i(ee,"emitVars");function ne(e,n,o){for(let[r,t]of Object.entries(e)){let s=[...n,I(r)];if(!h(t)){ne(t,s,o);continue}let a=ye(t);a&&he(a)&&o.push(` --apollion-${s.join("-")}-rgb: ${un(a)};`)}}i(ne,"emitRgbVars");function be(e,n,o){for(let[r,t]of Object.entries(e)){let s=[...n,I(r)];h(t)?t.type==="color"&&o.push(` @property --apollion-${s.join("-")} { syntax: '<color>'; inherits: true; initial-value: ${$(t.value)}; }`):be(t,s,o)}}i(be,"emitProperties");function mn(e,n={}){let{brand:o,mode:r,surface:t,dimension:s}=e.meta,a=[fn,""];return a.push(`/* Variant: brand=${o} mode=${r} surface=${t} dimension=${s} */`,"",":root {"),ee(e.groups,[],a),n.rgbCompanions&&(a.push(""," /* -rgb channel triplets \u2014 Tailwind <alpha-value> companions (opaque colour tokens only). */"),ne(e.groups,[],a)),a.push("}",""),a.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),be(e.groups,[],a),a.push("}",""),a.join(`
|
|
4
|
+
`)}i(mn,"renderCss");function gn(e,n,o={}){let{attribute:r="data-apollion-mode",rgbCompanions:t}=o,{brand:s,surface:a,dimension:c}=e.meta,u=[fn,""],m=i((S,l,d)=>{u.push(`${S} {`,` color-scheme: ${d};`),ee(l.groups,[],u),t&&ne(l.groups,[],u),u.push("}","")},"block");u.push(`/* Variant: brand=${s} surface=${a} dimension=${c} modes=light+dark (attribute ${r}) */`,""),m(`:root, html[${r}="light"]`,e,"light"),m(`html[${r}="dark"]`,n,"dark"),u.push("@media (prefers-color-scheme: dark) {"),u.push(` html:not([${r}]) {`," color-scheme: dark;");let b=[];ee(n.groups,[],b),t&&ne(n.groups,[],b);for(let S of b)u.push(` ${S}`);return u.push(" }","}",""),u.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),be(e.groups,[],u),u.push("}",""),u.join(`
|
|
5
|
+
`)}i(gn,"renderCssModes");var xo="<!-- Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. -->";function Re(e,n,o){for(let[r,t]of Object.entries(e)){let s=n?`${n}.${r}`:r;h(t)?o.push([s,$(t.value)]):Re(t,s,o)}}i(Re,"flatten");function So(e){return typeof e=="number"?String(e):`'${String(e).replace(/'/g,"''")}'`}i(So,"yamlEscape");function vo(e){let{mode:n,surface:o,dimension:r}=e.meta;return`${n}.${o}.${r}`}i(vo,"variantKey");function yn(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=[];Re(t.groups,"",s),o.push(` ${vo(t)}:`);for(let[a,c]of s)o.push(` ${a}: ${So(c)}`)}o.push("---");let r=["",xo,"",`# 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 u=[];Re(t.groups,"",u);let m=new Map;for(let[b,S]of u){let l=b.split(".")[0]??b,d=m.get(l)??[];d.push([b,S]),m.set(l,d)}for(let[b,S]of m){r.push(`### ${b}`,"","| Token | Value |","| --- | --- |");for(let[l,d]of S)r.push(`| \`${l}\` | \`${d}\` |`);r.push("")}}return`${o.join(`
|
|
6
6
|
`)}
|
|
7
7
|
${r.join(`
|
|
8
|
-
`)}`}
|
|
9
|
-
`}
|
|
10
|
-
`}
|
|
11
|
-
`)}
|
|
12
|
-
`}
|
|
8
|
+
`)}`}i(yn,"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 _(e){return{value:e.value,unit:e.unit}}i(_,"dimensionValue");function Do(e){return{value:e.value,unit:e.unit}}i(Do,"durationValue");function wo(e){return[...e.points]}i(wo,"cubicBezierValue");function To(e){let n=e.shadow,o={color:hn(n.color),offsetX:_(n.offsetX),offsetY:_(n.offsetY),blur:_(n.blur),spread:_(n.spread)};return n.inset&&(o.inset=!0),o}i(To,"shadowValue");function $o(e){switch(e.kind){case"ref":return`{${Ne(e.path)}}`;case"color":return hn(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 To(e);case"duration":return Do(e);case"cubicBezier":return wo(e)}}i($o,"projectValue");function Co(e){let n={$value:$o(e.value),$type:e.type};return e.description!==void 0&&(n.$description=e.description),e.deprecated!==void 0&&(n.$deprecated=e.deprecated),n}i(Co,"projectToken");function ke(e){let n={};for(let[o,r]of Object.entries(e))n[I(o)]=h(r)?Co(r):ke(r);return n}i(ke,"projectGroup");function oe(e,n){let o={$description:n,...ke(e.groups)};return Object.keys(e.extensions).length>0&&(o.$extensions=e.extensions),`${JSON.stringify(o,null,2)}
|
|
9
|
+
`}i(oe,"renderSet");function bn(e){return oe(e,"Apollion DS \u2014 base set (axis-invariant: border, breakpoints, container sizes, layout, motion). DTCG 2025.10.")}i(bn,"renderBaseSet");function Rn(e,n,o,r){return oe(e,`Apollion DS \u2014 colour set. brand=${n} mode=${o} surface=${r}. DTCG 2025.10.`)}i(Rn,"renderColorSet");function kn(e,n){return oe(e,`Apollion DS \u2014 spacing set. dimension=${n}. DTCG 2025.10.`)}i(kn,"renderSpacingSet");function In(e,n){return oe(e,`Apollion DS \u2014 font set. dimension=${n}. DTCG 2025.10.`)}i(In,"renderFontSet");function xn(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)}
|
|
10
|
+
`}i(xn,"renderResolver");var Vo="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function Mo(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(Mo,"emitDoc");function Sn(e,n,o){let r=" ".repeat(n);for(let[t,s]of Object.entries(e))h(s)?(Mo(s,r,o),o.push(`${r}${JSON.stringify(t)}: ${JSON.stringify($(s.value))},`)):(o.push(`${r}${t}: {`),Sn(s,n+1,o),o.push(`${r}},`))}i(Sn,"emitGroup");function vn(e){let{brand:n,mode:o,surface:r,dimension:t}=e.meta,s=[Vo,`// Variant: brand=${n} mode=${o} surface=${r} dimension=${t}`,"","export const tokens = {"];return Sn(e.groups,1,s),s.push("} as const;","","export type Tokens = typeof tokens;",""),s.join(`
|
|
11
|
+
`)}i(vn,"renderTs");var Eo=["light","dark"],Ao=["positive","negative"],Lo=["compact","normal","spacious"];function re(e){let n=e.modes??Eo,o=e.surfaces??Ao,r=e.dimensions??Lo,t=Object.entries(e.brands).sort(([a],[c])=>a.localeCompare(c)),s=[];for(let[a,c]of t)for(let u of n)for(let m of o)for(let b of r)s.push({brand:a,colors:c,mode:u,surface:m,dimension:b});return s}i(re,"expandVariants");function Dn(e){return`${e.brand}.${e.mode}.${e.surface}.${e.dimension}`}i(Dn,"variantName");import{createHash as Oo}from"node:crypto";function te(e){return Oo("sha256").update(e).digest("hex")}i(te,"sha256");function xe(e){return te(Ie(e))}i(xe,"hashConfig");function Ie(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Ie).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${Ie(e[r])}`).join(",")}}`}i(Ie,"stableStringify");function wn(e){try{let{execSync:n}=Un("node:child_process");return n("git rev-parse --short HEAD",{cwd:e,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim()}catch{return""}}i(wn,"detectGitCommit");function Tn(){return{node:process.version,platform:`${process.platform}-${process.arch}`}}i(Tn,"buildEnv");function $n(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
|
+
`}i($n,"serializeManifest");var Go="json/sets",Cn="json/resolver.json";function ie(e){return`${Go}/${e}.json`}i(ie,"setFile");function No(e,n,o){return`${e}.color.${n}.${o}`}i(No,"colorSetName");function jo(e){return`spacing.${e}`}i(jo,"spacingSetName");function Fo(e){return`font.${e}`}i(Fo,"fontSetName");function se(e,n){e.includes(n)||e.push(n)}i(se,"pushUnique");function Vn(e){let n=re(e),o=[],r=[],t=[],s=[],a=new Set,c=[],u=new Set,m=[],b=new Set,S=[];for(let l of n){se(o,l.brand),se(r,l.mode),se(t,l.surface),se(s,l.dimension);let d=No(l.brand,l.mode,l.surface);a.has(d)||(a.add(d),c.push({kind:"color",name:d,file:ie(d),brand:l.brand,mode:l.mode,surface:l.surface}));let y=jo(l.dimension);u.has(y)||(u.add(y),m.push({kind:"spacing",name:y,file:ie(y),dimension:l.dimension}));let f=Fo(l.dimension);b.has(f)||(b.add(f),S.push({kind:"font",name:f,file:ie(f),dimension:l.dimension}))}return{base:{kind:"base",name:"base",file:ie("base")},spacing:m,font:S,color:c,modifiers:{brand:o,mode:r,surface:t,dimension:s}}}i(Vn,"planSets");import{toDarkColors as nr}from"@apollion-dsi/core/themes/colors";import{createFoundation as zn}from"@apollion-dsi/core/themes/foundation";import{createSemantic as or}from"@apollion-dsi/core/themes/semantic";import{defaultInputSpacing as rr}from"@apollion-dsi/core/themes/spacing";import{invertForSurface as tr}from"@apollion-dsi/core/themes/surface";import{converter as On,formatHex as O,interpolate as Po,parse as x,wcagContrast as Gn}from"culori";var H=On("oklch"),_o=On("rgb");function p(e,n,o){let r=x(e),t=x(n);if(!r||!t)return e;let s=Po([r,t],"oklch");return O(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,zo=.05,Mn=.04,M=i((e,n)=>{let o=x(e),r=x(n);return!o||!r?1:Gn(o,r)},"contrastRatio"),B=i(e=>{let n=H(x(e));return n?n.l??0:null},"oklchLightness"),Ho=4.5;function z(e,n,o=Ho){let r=x(n),t=H(x(e));if(!r||!t)return e;let s=M("#fff",n)>=M("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=O(t)??e,u=x(c);if(u&&Gn(u,r)>=o)return c;let m=Math.min(1,Math.max(0,(t.l??0)+s));if(m===(t.l??0))break;t={...t,l:m}}return O(t)??e}i(z,"readableColor");var En=i((e,n)=>{if(M(e,n)>=ae)return!0;let o=B(e),r=B(n);return o!==null&&r!==null&&Math.abs(o-r)>=zo},"isPerceptibleState"),Se=i(e=>e?M("#fff",e)>M("#000",e):!1,"isDarkSurface");function An(e,n,o){let r=H(x(e));if(!r)return null;let t={...r,l:o??r.l??0},s=n?Mn:-Mn;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 u=O(t);if(u&&M(e,u)>=ae)return u}return O(t)??null}i(An,"derivePerceptibleState");function Ln(e,n,o){let r=An(e,n,o);if(r&&M(e,r)>=ae)return r;let t=An(e,!n);return t&&M(e,t)>=ae?t:r??t}i(Ln,"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(x(r)){let c=Se(n.baseLight),u=En(r,a.action);if(u||(a.action=Ln(r,c)??a.action),!En(r,a.active)){let m=u?void 0:B(a.action)??void 0;a.active=Ln(r,c,m)??a.active}}if(a.onLight=z(a.action,a.light),o){let c=o.action??a.action,u=o.light??a.light;return{base:r,dark:o.dark??a.dark,action:c,active:o.active??a.active,light:u,onLight:o.onLight??z(c,u)}}return a}i(D,"mountSingleColor");function Nn(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(Nn,"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 F(e,n){let o=H(x(e));if(!o)return e;let r=Math.min(1,Math.max(0,(o.l??0)+n));return O({...o,l:r})??e}i(F,"shiftLightness");function ce(e,n){let o=H(x(e));if(!o)return e;let r=o.l??0,t=n.min??0,s=n.max??1;return r>=t&&r<=s?e:O({...o,l:Math.min(s,Math.max(t,r))})??e}i(ce,"clampLightness");function G(e,n){let o=_o(x(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(G,"toRgbaString");import{apcaContrast as ue,DARK_BOOST_TAPER_MAX_L as ve,DARK_ELEVATION_BOOST as Ko,EDGE_ALPHA as De,HALATION_FLOORS as le,INK_APCA_MIN as we,INK_MIX as Te,LADDER_DELTAS as Fn,MIN_CONTRAST_AA as Pn,WASH_ALPHA as Wo}from"@apollion-dsi/core/themes/colors";var Jo="#FFFFFF",$e="#000000";function qo(e){return Se(e.baseLight)?"dark":"light"}i(qo,"resolvePolarity");function Xo(e){let n=le.CANVAS_MIN_L;return e<=n?1:e>=ve?0:(ve-e)/(ve-n)}i(Xo,"darkElevationBoostFactor");function _n(e,n,o){if(Math.abs(ue(e,n))>=o)return e;let r=Math.abs(ue("#ffffff",n))>=Math.abs(ue("#000000",n)),t=e;for(let s=0;s<40;s+=1){let a=F(t,r?.02:-.02);if(a===t||(t=a,Math.abs(ue(t,n))>=o))break}return t}i(_n,"ensureApca");function Uo(e,n){let o=e.baseLight??Jo,r=n==="dark",t=r?ce(o,{min:le.CANVAS_MIN_L}):o,s=F(t,Fn.sunken),a=r?Xo(B(t)??0):0,c=i(u=>Fn[u]+a*Ko[u],"delta");return{canvas:t,sunken:r?ce(s,{min:le.CANVAS_MIN_L}):s,paper:F(t,c("paper")),raised:F(t,c("raised")),overlay:F(t,c("overlay")),scrim:r?e.deepLight??$e:e.neutral?.["180"]??e.baseDark??$e}}i(Uo,"deriveSurface");function Yo(e,n){let o=e.baseDark??$e,r=ce(_n(z(o,n.paper,Pn),n.paper,we.primary),{max:le.INK_MAX_L}),t=i((s,a)=>_n(z(p(r,n.canvas,s),n.paper,Pn),n.paper,a),"tier");return{primary:r,secondary:t(Te.secondary,we.secondary),muted:t(Te.muted,we.muted),disabled:p(r,n.canvas,Te.disabled)}}i(Yo,"deriveInk");function Zo(e){return{hairline:G(e.primary,De.hairline),border:G(e.primary,De.border),strong:G(e.primary,De.strong)}}i(Zo,"deriveEdge");function Qo(e,n){let o=Wo[n];return{hover:G(e.primary,o.hover),pressed:G(e.primary,o.pressed),selected:G(e.primary,o.selected)}}i(Qo,"deriveWash");function er(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(er,"applyOverride");function Bn(e,n){let o=qo(e),r=Uo(e,o),t=Yo(e,r),s={surface:r,ink:t,edge:Zo(t),wash:Qo(t,o)};return er(s,n?.[o])}i(Bn,"resolveSurfaceLadder");function ir(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:Nn(e),...Bn({...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(ir,"composeColors");function E(e,n=rr){let o=e.mode==="dark"?nr(e.colors):e.colors,r=ir(o),t=X(n,e.dimension),s=or({colors:r,spacing:t}),a=zn(s);return e.surface==="negative"&&(a=zn(tr({semantic:s,colors:r},"negative").semantic)),{foundation:a,colors:r}}i(E,"buildVariantThemes");async function Bt(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 sr(K(cr(),"apollion-tokens-"));try{let u=[],m=i(async(l,d)=>{await ur(c,l,d),u.push({path:l,sha256:te(d)}),t&&console.log(` \u2713 ${l}`)},"emit");if(a.json){let l=Vn(n),d=[],y=rn();d.push(y),await m(l.base.file,bn(y));for(let f of l.spacing){let R=s.find(W=>W.dimension===f.dimension),{foundation:C}=E(R),V=an(C,f.dimension);d.push(V),await m(f.file,kn(V,f.dimension))}for(let f of l.font){let R=tn(f.dimension);d.push(R),await m(f.file,In(R,f.dimension))}for(let f of l.color){let R=s.find(de=>de.brand===f.brand&&de.mode===f.mode&&de.surface===f.surface),{foundation:C,colors:V}=E(R),W=sn(C,V);d.push(W),await m(f.file,Rn(W,f.brand,f.mode,f.surface))}Ye(d),await m(Cn,xn(n,l))}if(a.css||a.ts)for(let l of s){let{foundation:d,colors:y}=E(l),f=j(d,y,l),R=Dn(l);a.css&&await m(`css/${R}.css`,mn(f,{rgbCompanions:a.tailwind})),a.ts&&await m(`ts/${R}.d.ts`,vn(f))}if(a.cssModes){let l=new Map;for(let d of s){let y=`${d.brand}.${d.surface}.${d.dimension}`,f=l.get(y)??{};f[d.mode]=d,l.set(y,f)}for(let[d,{light:y,dark:f}]of l){if(!y||!f)throw new Error(`apollion-tokens build: output.cssModes needs both modes for ${d} (config.modes)`);let R=E(y),C=E(f),V=gn(j(R.foundation,R.colors,y),j(C.foundation,C.colors,f),{rgbCompanions:a.tailwind});await m(`css/${d}.modes.css`,V)}}if(a.tailwind){let l=s[0],{foundation:d,colors:y}=E(l),f=j(d,y,l);await m("tailwind/preset.mjs",dn(f)),await m("tailwind/tw-merge.mjs",pn(f))}if(a.designMd){let l=[...new Set(s.map(d=>d.brand))];for(let d of l){let f=s.filter(R=>R.brand===d).map(R=>{let{foundation:C,colors:V}=E(R);return j(C,V,R)});await m(`design/${d}.design.md`,yn(d,f))}}let b={configHash:xe(n),files:u,gitCommit:wn(r),buildEnv:Tn()},S=$n(b);return await Jn(K(c,"manifest.json"),S),await Kn(o,{recursive:!0,force:!0}),await Wn(qn(o),{recursive:!0}),await ar(c,o),t&&console.log(`\u2713 ${u.length} files \u2192 ${o}`),{manifest:b,outDir:o}}catch(u){throw await Kn(c,{recursive:!0,force:!0}).catch(()=>{}),u}}i(Bt,"build");async function zt(e){let{config:n,outDir:o}=e,r;try{r=JSON.parse(await Hn(K(o,"manifest.json"),"utf8"))}catch{return!1}if(r.configHash!==xe(n))return!1;for(let t of r.files){let s;try{s=await Hn(K(o,t.path))}catch{return!1}if(te(s)!==t.sha256)return!1}return!0}i(zt,"check");async function ur(e,n,o){let r=K(e,n);await Wn(qn(r),{recursive:!0}),await Jn(r,o)}i(ur,"writeAt");export{Bt as build,zt as check};
|
package/lib/cli.mjs
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
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
|
-
`)}i(
|
|
4
|
-
`)}i(
|
|
5
|
-
`)}i(
|
|
6
|
-
`)}i(
|
|
2
|
+
var io=Object.defineProperty;var i=(e,n)=>io(e,"name",{value:n,configurable:!0}),so=(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 $t}from"node:fs/promises";import{resolve as Oe}from"node:path";import{mkdir as Zn,mkdtemp as ht,readFile as Xn,rename as yt,rm as Yn,writeFile as Qn}from"node:fs/promises";import{tmpdir as bt}from"node:os";import{dirname as eo,join as q}from"node:path";import{converter as Co,parse as Vo}from"culori";import{defaultInputBorder as ee}from"@apollion-dsi/core/themes/border";import{createReadableTextLayer as po}from"@apollion-dsi/core/themes/colors";import{createDeth as fo,levelValues as mo}from"@apollion-dsi/core/themes/depth";import{createFont as go,defaultInputFont as L}from"@apollion-dsi/core/themes/font";import{defaultInputSpacing as Be}from"@apollion-dsi/core/themes/spacing";import{converter as ho,formatHex as yo,parse as bo}from"culori";import{defaultInputBreakpoints as ao}from"@apollion-dsi/core/themes/breakpoints";function Le(e=ao){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Le,"breakpointEntries");import{defaultInputContainerSizes as co,defaultInputLayout as lo}from"@apollion-dsi/core/themes/layout";function Ge(e=co){return Object.entries(e.values).map(([n,o])=>[n,`${o}px`])}i(Ge,"containerSizeEntries");function je(e=lo){return[["page-max-width",`${e.pageMaxWidth}px`]]}i(je,"layoutEntries");import{createMotion as X,defaultInputMotion as Y}from"@apollion-dsi/core/themes/motion";function Pe(e=Y){let n=X(e);return Object.keys(e.duration).map(o=>[o,{ms:e.duration[o],css:n.duration[o]}])}i(Pe,"motionDurationEntries");function Ne(e=Y){let n=X(e);return Object.keys(e.easing).map(o=>[o,{points:e.easing[o],css:n.easing[o]}])}i(Ne,"motionEasingEntries");function Fe(e=Y){let n=X(e);return Object.keys(e.indicator).map(o=>[o,{ms:e.indicator[o],css:n.indicator[o]}])}i(Fe,"motionIndicatorEntries");function _e(e=Y){let n=X(e);return Object.keys(e.intent).map(o=>{let t=e.intent[o],r=typeof t.duration=="number"?null:t.duration,s=typeof t.duration=="number"?t.duration:e.duration[t.duration];return[o,{durationRef:r,duration:{ms:s,css:n.intent[o].duration},easingRef:t.easing,easing:{points:e.easing[t.easing],css:n.intent[o].easing}}]})}i(_e,"motionIntentEntries");import{DIMENSION_MULTIPLIERS as uo}from"@apollion-dsi/core/themes/dimension";function Z({multiplier:e=.25,alias:n},o){let t=o!==void 0?uo[o]:e;return(...r)=>r.map(s=>{let a=typeof s=="string"?n[s]:s;return`${t*a}rem`}).join(" ")}i(Z,"createSpacing");var he={"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 ye(e){let n=Object.keys(he).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(ye,"assertTokenMetaResolves");var Ro=ho("oklch");function b(e){return typeof e.type=="string"&&"value"in e}i(b,"isToken");function x(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}i(x,"kebab");function ze(e){return e.split(".").map(x).join(".")}i(ze,"kebabPath");function V(e){return e.kind==="ref"?e.resolved.raw:e.raw}i(V,"rawValue");function Q(e,n){return Number(e.toFixed(n))||0}i(Q,"round");function be(e){let n=Ro(bo(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)],t=yo(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:Q(n.alpha,4),hex:t}:{kind:"color",raw:e,components:o,hex:t}}i(be,"toColorValue");var He=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function $(e){let n=He.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:be(e)}}i(I,"colorToken");function G(e){let n={};for(let[o,t]of Object.entries(e))n[o]=I(t);return n}i(G,"recordColorGroup");function Ke(e){let n=po(e),o={};for(let[t,r]of Object.entries(n.palettes))o[t]=I(r);return o.neutral=G(n.neutral),o}i(Ke,"buildReadableTextGroup");var ko=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function We(e){let n={};for(let o of ko){let t=e[o];n[o]={base:I(t.base),dark:I(t.dark),action:I(t.action),active:I(t.active),light:I(t.light),onLight:I(t.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(We,"buildColorPrimitives");function Je(e){let n=Z(Be,e),o={};for(let t of Object.keys(Be.alias))o[t]={type:"dimension",value:$(n(t))};return o}i(Je,"buildSpacePrimitives");function qe(){let e={};for(let[n,o]of Object.entries(ee.borderWidth))e[n]={type:"dimension",value:$(o)};return e}i(qe,"buildBorderWidthPrimitives");function Io(e,n){return{color:We(e),space:Je(n),borderWidth:qe()}}i(Io,"buildPrimitives");var Ue={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"},Xe={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"},Ye={hairline:"color.edge.hairline",border:"color.edge.border",strong:"color.edge.strong"};function xo(e,n){let o=e;for(let t of n.split(".").slice(1))if(o&&typeof o=="object"&&t in o)o=o[t];else return;return typeof o=="string"?o:void 0}i(xo,"lookupPrimitive");function F(e,n,o){let t={};for(let[r,s]of Object.entries(e)){let a=o[r],c=a?xo(n,a):void 0;t[r]=a&&c===s?{type:"color",value:{kind:"ref",path:a,resolved:be(s)}}:I(s)}return t}i(F,"colorRefGroup");var Ze={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},So={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function wo(e,n){let o=n.split("."),t=o[0]==="border-width"?"borderWidth":o[0],r=e[t];for(let s of o.slice(1))if(r&&!b(r)&&s in r)r=r[s];else return;return r&&b(r)&&r.value.kind==="dimension"?r.value.raw:void 0}i(wo,"lookupDimensionPrimitive");function Re(e,n,o){let t={};for(let[r,s]of Object.entries(e)){let a=o[r],c=a?wo(n,a):void 0;t[r]=a&&c===s?{type:"dimension",value:{kind:"ref",path:a,resolved:$(s)}}:{type:"dimension",value:$(s)}}return t}i(Re,"dimensionRefGroup");function Qe(e){let n={},o={};for(let[s,a]of Object.entries(ee.borderRadius))He.test(a)?n[s]={type:"dimension",value:$(a)}:o[s]=a;let t=Re(ee.borderWidth,e,So),r={};for(let[s,a]of Object.entries(ee.borderStyle))r[s]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:t,style:r},extensions:o}}i(Qe,"buildBorder");function en(e){let n=go(L,e),o={};for(let[c,l]of Object.entries(L.fontFamily)){let f=l.replace(/;\s*$/,"").trim();o[c]={type:"fontFamily",value:{kind:"fontFamily",raw:f,family:f}}}let t={};for(let[c,l]of Object.entries(n.fontSize))t[c]={type:"dimension",value:$(l)};let r={};for(let[c,l]of Object.entries(L.fontWeight))r[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${l}`,weight:l}};let s={};for(let[c,l]of Object.entries(L.lineHeight))s[c]={type:"number",value:{kind:"number",raw:`${l}`,number:l}};let a={letterSpacing:L.letterSpacing,textTransform:L.textTransform,fontStyle:L.fontStyle};return{group:{family:o,size:t,weight:r,lineHeight:s},extensions:a}}i(en,"buildFont");var vo=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function Do(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let t=n.match(vo),r=t?t[0]:"#000000",a=(t?n.slice(0,t.index).trim():n).split(/\s+/).filter(Boolean),c=i(l=>$(a[l]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:be(r),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}i(Do,"parseShadow");function nn(e){let n=fo(e),o={};for(let t of Object.keys(mo))o[t]={type:"shadow",value:Do(n(t))};return o}i(nn,"buildShadow");function ne(e,n,o){let t={};for(let[r,s]of Object.entries(e)){let a=n?`${n}.${x(r)}`:x(r);if(b(s)){o.add(a);let c=he[a];t[r]=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 t[r]=ne(s,a,o)}return t}i(ne,"decorateGroup");function To(e){let n=new Set,o=ne(e.primitives,"",n),t=ne(e.groups,"",n);return ye(n),{...e,primitives:o,groups:t}}i(To,"decorateMeta");function oe(e,n){return ne(e,"",n)}i(oe,"decorateSlice");function on(e,n,o){for(let[t,r]of Object.entries(e)){let s=n?`${n}.${x(t)}`:x(t);b(r)?o.add(s):on(r,s,o)}}i(on,"collectPaths");function tn(e){let n=new Set;for(let o of e)on(o.groups,"",n);ye(n)}i(tn,"assertSlicesMetaComplete");function rn(){let e={};for(let[n,o]of Le())e[n]={type:"dimension",value:$(o)};return e}i(rn,"buildBreakpoints");function sn(){let e={};for(let[n,o]of Ge())e[n]={type:"dimension",value:$(o)};return e}i(sn,"buildContainerSizes");function an(){let e={};for(let[n,o]of je())e[n]={type:"dimension",value:$(o)};return e}i(an,"buildLayoutConstants");function cn(){let e=i(a=>({type:"duration",value:{kind:"duration",raw:a.css,value:a.ms,unit:"ms"}}),"durationToken"),n=i(a=>({type:"cubicBezier",value:{kind:"cubicBezier",raw:a.css,points:a.points}}),"easingToken"),o={};for(let[a,c]of Pe())o[a]=e(c);let t={};for(let[a,c]of Ne())t[a]=n(c);let r={};for(let[a,c]of Fe())r[a]=e(c);let s={};for(let[a,c]of _e()){let l=e(c.duration).value;s[a]={duration:c.durationRef?{type:"duration",value:{kind:"ref",path:`motion.duration.${c.durationRef}`,resolved:l}}:e(c.duration),easing:{type:"cubicBezier",value:{kind:"ref",path:`motion.easing.${c.easingRef}`,resolved:n(c.easing).value}}}}return{duration:o,easing:t,indicator:r,intent:s}}i(cn,"buildMotion");var ln={unit:"px",interval:"half-open [value, next) \u2014 min-width sets, ascending",cssVarsUsage:"informational only \u2014 var() is invalid inside a @media prelude"};function un(){let e=qe(),o=Qe({borderWidth:e}),t={"com.apollion.breakpoint":ln};Object.keys(o.extensions).length>0&&(t["com.apollion.border"]={radius:o.extensions});let r=new Set;return{groups:oe({"border-width":e,border:o.group,breakpoint:rn(),"container-size":sn(),layout:an(),motion:cn()},r),extensions:t}}i(un,"buildBaseIR");function dn(e){let n=en(e),o=new Set;return{groups:oe({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}i(dn,"buildFontIR");function pn(e,n){let o=We(n),t=new Set;return{groups:oe({color:o,bg:F(e.bg,n,Ue),text:F(e.text,n,Xe),edge:F(e.edge,n,Ye),tx:Ke(n),shadow:nn(n)},t),extensions:{}}}i(pn,"buildColorIR");function fn(e,n){let o=Je(n),t={space:o},r=new Set;return{groups:oe({space:o,spacing:Re(e.spacing,t,Ze)},r),extensions:{}}}i(fn,"buildSpacingIR");function $o(e,n,o){let t={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},r=Io(n,o.dimension),s=Qe(r),a=en(o.dimension),c={"com.apollion.variant":t,"com.apollion.font":a.extensions,"com.apollion.breakpoint":ln};Object.keys(s.extensions).length>0&&(c["com.apollion.border"]={radius:s.extensions});let l={description:`Apollion DS tokens \u2014 DTCG 2025.10. Variant: ${t.brand}/${t.mode}/${t.surface}/${t.dimension}.`,meta:t,primitives:r,groups:{bg:F(e.bg,n,Ue),text:F(e.text,n,Xe),edge:F(e.edge,n,Ye),tx:Ke(n),spacing:Re(e.spacing,r,Ze),border:s.group,breakpoint:rn(),"container-size":sn(),layout:an(),motion:cn(),font:a.group,shadow:nn(n)},extensions:c};return To(l)}i($o,"buildIR");var _=$o;var Mo=Co("rgb"),mn="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function ke(e){if(e.value.kind==="color")return e.value;if(e.value.kind==="ref"&&e.value.resolved.kind==="color")return e.value.resolved}i(ke,"colorPayload");function Ie(e){return e.alpha===void 0}i(Ie,"isOpaqueColor");function gn(e){let n=Mo(Vo(e.hex));if(!n)return"0 0 0";let o=i(t=>Math.min(255,Math.max(0,Math.round(t*255))),"channel");return`${o(n.r)} ${o(n.g)} ${o(n.b)}`}i(gn,"rgbTriplet");function z(e,n=[]){let o=new Map;for(let[t,r]of Object.entries(e)){let s=[...n,x(t)];if(b(r))o.set(s.join("-"),r);else for(let[a,c]of z(r,s))o.set(a,c)}return o}i(z,"flatTokens");function h(e,...n){let o=e[n[0]];for(let t of n.slice(1)){if(!o||b(o))return{};o=o[t]}return o&&!b(o)?o:{}}i(h,"groupAt");function hn(e){let n=[];for(let o of["bg","text","edge","tx"])for(let[t,r]of z(h(e.groups,o),[o])){let s=ke(r);s&&n.push({key:t,cssVar:`--apollion-${t}`,opaque:Ie(s)})}return n}i(hn,"colorEntries");function C(e,n){return[...z(e)].map(([o])=>[o,`var(--apollion-${[...n,o].join("-")})`])}i(C,"varEntries");function D(e,n,o){if(o.length!==0){e.push(` ${n}: {`);for(let[t,r]of o)e.push(` ${JSON.stringify(t)}: ${JSON.stringify(r)},`);e.push(" },")}}i(D,"pushScale");function yn(e){let n=[mn,"// Tailwind preset over the Apollion foundation tokens \u2014 requires dist/css/ vars in scope.","","const preset = {"," theme: {"," extend: {"],o=hn(e);n.push(" colors: {");for(let{key:t,cssVar:r,opaque:s}of o)s?n.push(` ${JSON.stringify(t)}: ${JSON.stringify(`rgb(var(${r}-rgb) / <alpha-value>)`)},`):(n.push(` // ${t} carries its own alpha \u2014 excluded from the <alpha-value> modifier form.`),n.push(` ${JSON.stringify(t)}: ${JSON.stringify(`var(${r})`)},`));return n.push(" },"),D(n,"screens",[...z(h(e.groups,"breakpoint"))].filter(([t])=>t!=="xs").map(([t,r])=>[t,V(r.value)])),D(n,"spacing",C(h(e.groups,"spacing"),["spacing"])),D(n,"borderRadius",C(h(e.groups,"border","radius"),["border","radius"])),D(n,"borderWidth",C(h(e.groups,"border","width"),["border","width"])),D(n,"fontFamily",C(h(e.groups,"font","family"),["font","family"])),D(n,"fontSize",C(h(e.groups,"font","size"),["font","size"])),D(n,"fontWeight",C(h(e.groups,"font","weight"),["font","weight"])),D(n,"lineHeight",C(h(e.groups,"font","lineHeight"),["font","line-height"])),D(n,"boxShadow",C(h(e.groups,"shadow"),["shadow"])),D(n,"transitionDuration",C(h(e.groups,"motion","duration"),["motion","duration"])),D(n,"transitionTimingFunction",C(h(e.groups,"motion","easing"),["motion","easing"])),n.push(" },"," },","};","","export default preset;",""),n.join(`
|
|
3
|
+
`)}i(yn,"renderTailwindPreset");function bn(e){let n=i(r=>[...z(r).keys()],"keys"),o=i(r=>`[${r.map(s=>JSON.stringify(s)).join(", ")}]`,"list");return[mn,"// tailwind-merge extension for the generated preset \u2014 pass to extendTailwindMerge().","","export const twMergeExtension = {"," extend: {"," theme: {",` colors: ${o(hn(e).map(r=>r.key))},`,` spacing: ${o(n(h(e.groups,"spacing")))},`,` borderRadius: ${o(n(h(e.groups,"border","radius")))},`,` borderWidth: ${o(n(h(e.groups,"border","width")))},`," },"," classGroups: {",` 'font-family': [{ font: ${o(n(h(e.groups,"font","family")))} }],`,` 'font-size': [{ text: ${o(n(h(e.groups,"font","size")))} }],`,` 'font-weight': [{ font: ${o(n(h(e.groups,"font","weight")))} }],`,` leading: [{ leading: ${o(n(h(e.groups,"font","lineHeight")))} }],`,` shadow: [{ shadow: ${o(n(h(e.groups,"shadow")))} }],`," },"," },","};",""].join(`
|
|
4
|
+
`)}i(bn,"renderTwMergeExtension");var Rn="/* Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. */";function te(e,n,o){for(let[t,r]of Object.entries(e)){let s=[...n,x(t)];b(r)?o.push(` --apollion-${s.join("-")}: ${V(r.value)};`):te(r,s,o)}}i(te,"emitVars");function re(e,n,o){for(let[t,r]of Object.entries(e)){let s=[...n,x(t)];if(!b(r)){re(r,s,o);continue}let a=ke(r);a&&Ie(a)&&o.push(` --apollion-${s.join("-")}-rgb: ${gn(a)};`)}}i(re,"emitRgbVars");function xe(e,n,o){for(let[t,r]of Object.entries(e)){let s=[...n,x(t)];b(r)?r.type==="color"&&o.push(` @property --apollion-${s.join("-")} { syntax: '<color>'; inherits: true; initial-value: ${V(r.value)}; }`):xe(r,s,o)}}i(xe,"emitProperties");function kn(e,n={}){let{brand:o,mode:t,surface:r,dimension:s}=e.meta,a=[Rn,""];return a.push(`/* Variant: brand=${o} mode=${t} surface=${r} dimension=${s} */`,"",":root {"),te(e.groups,[],a),n.rgbCompanions&&(a.push(""," /* -rgb channel triplets \u2014 Tailwind <alpha-value> companions (opaque colour tokens only). */"),re(e.groups,[],a)),a.push("}",""),a.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),xe(e.groups,[],a),a.push("}",""),a.join(`
|
|
5
|
+
`)}i(kn,"renderCss");function In(e,n,o={}){let{attribute:t="data-apollion-mode",rgbCompanions:r}=o,{brand:s,surface:a,dimension:c}=e.meta,l=[Rn,""],f=i((w,u,d)=>{l.push(`${w} {`,` color-scheme: ${d};`),te(u.groups,[],l),r&&re(u.groups,[],l),l.push("}","")},"block");l.push(`/* Variant: brand=${s} surface=${a} dimension=${c} modes=light+dark (attribute ${t}) */`,""),f(`:root, html[${t}="light"]`,e,"light"),f(`html[${t}="dark"]`,n,"dark"),l.push("@media (prefers-color-scheme: dark) {"),l.push(` html:not([${t}]) {`," color-scheme: dark;");let R=[];te(n.groups,[],R),r&&re(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)) {"),xe(e.groups,[],l),l.push("}",""),l.join(`
|
|
6
|
+
`)}i(In,"renderCssModes");var Eo="<!-- Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. -->";function Se(e,n,o){for(let[t,r]of Object.entries(e)){let s=n?`${n}.${t}`:t;b(r)?o.push([s,V(r.value)]):Se(r,s,o)}}i(Se,"flatten");function Ao(e){return typeof e=="number"?String(e):`'${String(e).replace(/'/g,"''")}'`}i(Ao,"yamlEscape");function Oo(e){let{mode:n,surface:o,dimension:t}=e.meta;return`${n}.${o}.${t}`}i(Oo,"variantKey");function xn(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 r of n){let s=[];Se(r.groups,"",s),o.push(` ${Oo(r)}:`);for(let[a,c]of s)o.push(` ${a}: ${Ao(c)}`)}o.push("---");let t=["",Eo,"",`# 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 r of n){let{mode:s,surface:a,dimension:c}=r.meta;t.push(`## Variant \`${s} \xB7 ${a} \xB7 ${c}\``,"");let l=[];Se(r.groups,"",l);let f=new Map;for(let[R,w]of l){let u=R.split(".")[0]??R,d=f.get(u)??[];d.push([R,w]),f.set(u,d)}for(let[R,w]of f){t.push(`### ${R}`,"","| Token | Value |","| --- | --- |");for(let[u,d]of w)t.push(`| \`${u}\` | \`${d}\` |`);t.push("")}}return`${o.join(`
|
|
7
7
|
`)}
|
|
8
|
-
${
|
|
9
|
-
`)}`}i(
|
|
10
|
-
`}i(
|
|
11
|
-
`}i(
|
|
12
|
-
`)}i(
|
|
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(`
|
|
8
|
+
${t.join(`
|
|
9
|
+
`)}`}i(xn,"renderDesignMd");function Sn(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(Sn,"colorValue");function H(e){return{value:e.value,unit:e.unit}}i(H,"dimensionValue");function Lo(e){return{value:e.value,unit:e.unit}}i(Lo,"durationValue");function Go(e){return[...e.points]}i(Go,"cubicBezierValue");function jo(e){let n=e.shadow,o={color:Sn(n.color),offsetX:H(n.offsetX),offsetY:H(n.offsetY),blur:H(n.blur),spread:H(n.spread)};return n.inset&&(o.inset=!0),o}i(jo,"shadowValue");function Po(e){switch(e.kind){case"ref":return`{${ze(e.path)}}`;case"color":return Sn(e);case"dimension":return H(e);case"fontFamily":return e.family;case"fontWeight":return e.weight;case"number":return e.number;case"strokeStyle":return e.style;case"shadow":return jo(e);case"duration":return Lo(e);case"cubicBezier":return Go(e)}}i(Po,"projectValue");function No(e){let n={$value:Po(e.value),$type:e.type};return e.description!==void 0&&(n.$description=e.description),e.deprecated!==void 0&&(n.$deprecated=e.deprecated),n}i(No,"projectToken");function we(e){let n={};for(let[o,t]of Object.entries(e))n[x(o)]=b(t)?No(t):we(t);return n}i(we,"projectGroup");function ie(e,n){let o={$description:n,...we(e.groups)};return Object.keys(e.extensions).length>0&&(o.$extensions=e.extensions),`${JSON.stringify(o,null,2)}
|
|
10
|
+
`}i(ie,"renderSet");function wn(e){return ie(e,"Apollion DS \u2014 base set (axis-invariant: border, breakpoints, container sizes, layout, motion). DTCG 2025.10.")}i(wn,"renderBaseSet");function vn(e,n,o,t){return ie(e,`Apollion DS \u2014 colour set. brand=${n} mode=${o} surface=${t}. DTCG 2025.10.`)}i(vn,"renderColorSet");function Dn(e,n){return ie(e,`Apollion DS \u2014 spacing set. dimension=${n}. DTCG 2025.10.`)}i(Dn,"renderSpacingSet");function Tn(e,n){return ie(e,`Apollion DS \u2014 font set. dimension=${n}. DTCG 2025.10.`)}i(Tn,"renderFontSet");function $n(e,n){let{modifiers:o}=n,t=[{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:t,$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($n,"renderResolver");var Fo="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function _o(e,n,o){let t=[];if(e.description!==void 0&&t.push(e.description),e.deprecated===!0?t.push("@deprecated"):typeof e.deprecated=="string"&&t.push(`@deprecated ${e.deprecated}`),t.length!==0){o.push(`${n}/**`);for(let r of t)o.push(`${n} * ${r.replace(/\*\//g,"*\\/")}`);o.push(`${n} */`)}}i(_o,"emitDoc");function Cn(e,n,o){let t=" ".repeat(n);for(let[r,s]of Object.entries(e))b(s)?(_o(s,t,o),o.push(`${t}${JSON.stringify(r)}: ${JSON.stringify(V(s.value))},`)):(o.push(`${t}${r}: {`),Cn(s,n+1,o),o.push(`${t}},`))}i(Cn,"emitGroup");function Vn(e){let{brand:n,mode:o,surface:t,dimension:r}=e.meta,s=[Fo,`// Variant: brand=${n} mode=${o} surface=${t} dimension=${r}`,"","export const tokens = {"];return Cn(e.groups,1,s),s.push("} as const;","","export type Tokens = typeof tokens;",""),s.join(`
|
|
12
|
+
`)}i(Vn,"renderTs");var Bo=["light","dark"],zo=["positive","negative"],Ho=["compact","normal","spacious"];function se(e){let n=e.modes??Bo,o=e.surfaces??zo,t=e.dimensions??Ho,r=Object.entries(e.brands).sort(([a],[c])=>a.localeCompare(c)),s=[];for(let[a,c]of r)for(let l of n)for(let f of o)for(let R of t)s.push({brand:a,colors:c,mode:l,surface:f,dimension:R});return s}i(se,"expandVariants");function Mn(e){return`${e.brand}.${e.mode}.${e.surface}.${e.dimension}`}i(Mn,"variantName");import{createHash as Ko}from"node:crypto";function ae(e){return Ko("sha256").update(e).digest("hex")}i(ae,"sha256");function De(e){return ae(ve(e))}i(De,"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(t=>`${JSON.stringify(t)}:${ve(e[t])}`).join(",")}}`}i(ve,"stableStringify");function En(e){try{let{execSync:n}=so("node:child_process");return n("git rev-parse --short HEAD",{cwd:e,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim()}catch{return""}}i(En,"detectGitCommit");function An(){return{node:process.version,platform:`${process.platform}-${process.arch}`}}i(An,"buildEnv");function On(e){let n=[...e.files].sort((t,r)=>t.path.localeCompare(r.path)),o={configHash:e.configHash,files:n,gitCommit:e.gitCommit,buildEnv:e.buildEnv};return`${JSON.stringify(o,null,2)}
|
|
13
|
+
`}i(On,"serializeManifest");var Wo="json/sets",Ln="json/resolver.json";function ce(e){return`${Wo}/${e}.json`}i(ce,"setFile");function Jo(e,n,o){return`${e}.color.${n}.${o}`}i(Jo,"colorSetName");function qo(e){return`spacing.${e}`}i(qo,"spacingSetName");function Uo(e){return`font.${e}`}i(Uo,"fontSetName");function le(e,n){e.includes(n)||e.push(n)}i(le,"pushUnique");function Gn(e){let n=se(e),o=[],t=[],r=[],s=[],a=new Set,c=[],l=new Set,f=[],R=new Set,w=[];for(let u of n){le(o,u.brand),le(t,u.mode),le(r,u.surface),le(s,u.dimension);let d=Jo(u.brand,u.mode,u.surface);a.has(d)||(a.add(d),c.push({kind:"color",name:d,file:ce(d),brand:u.brand,mode:u.mode,surface:u.surface}));let y=qo(u.dimension);l.has(y)||(l.add(y),f.push({kind:"spacing",name:y,file:ce(y),dimension:u.dimension}));let m=Uo(u.dimension);R.has(m)||(R.add(m),w.push({kind:"font",name:m,file:ce(m),dimension:u.dimension}))}return{base:{kind:"base",name:"base",file:ce("base")},spacing:f,font:w,color:c,modifiers:{brand:o,mode:t,surface:r,dimension:s}}}i(Gn,"planSets");import{toDarkColors as dt}from"@apollion-dsi/core/themes/colors";import{createFoundation as Un}from"@apollion-dsi/core/themes/foundation";import{createSemantic as pt}from"@apollion-dsi/core/themes/semantic";import{defaultInputSpacing as ft}from"@apollion-dsi/core/themes/spacing";import{invertForSurface as mt}from"@apollion-dsi/core/themes/surface";import{converter as _n,formatHex as j,interpolate as Xo,parse as S,wcagContrast as Bn}from"culori";var J=_n("oklch"),Yo=_n("rgb");function p(e,n,o){let t=S(e),r=S(n);if(!t||!r)return e;let s=Xo([t,r],"oklch");return j(s(o))??e}i(p,"mixOklch");function Zo(e){return e?typeof e=="string"?e:e.base:"#000"}i(Zo,"coerceToHex");var ue=1.3,Qo=.05,jn=.04,A=i((e,n)=>{let o=S(e),t=S(n);return!o||!t?1:Bn(o,t)},"contrastRatio"),K=i(e=>{let n=J(S(e));return n?n.l??0:null},"oklchLightness"),et=4.5;function W(e,n,o=et){let t=S(n),r=J(S(e));if(!t||!r)return e;let s=A("#fff",n)>=A("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=j(r)??e,l=S(c);if(l&&Bn(l,t)>=o)return c;let f=Math.min(1,Math.max(0,(r.l??0)+s));if(f===(r.l??0))break;r={...r,l:f}}return j(r)??e}i(W,"readableColor");var Pn=i((e,n)=>{if(A(e,n)>=ue)return!0;let o=K(e),t=K(n);return o!==null&&t!==null&&Math.abs(o-t)>=Qo},"isPerceptibleState"),Te=i(e=>e?A("#fff",e)>A("#000",e):!1,"isDarkSurface");function Nn(e,n,o){let t=J(S(e));if(!t)return null;let r={...t,l:o??t.l??0},s=n?jn:-jn;for(let a=0;a<25;a+=1){let c=Math.min(1,Math.max(0,(r.l??0)+s));if(c===(r.l??0))break;r={...r,l:c};let l=j(r);if(l&&A(e,l)>=ue)return l}return j(r)??null}i(Nn,"derivePerceptibleState");function Fn(e,n,o){let t=Nn(e,n,o);if(t&&A(e,t)>=ue)return t;let r=Nn(e,!n);return r&&A(e,r)>=ue?r:t??r}i(Fn,"perceptibleStateFor");function T(e,n){let o=typeof e=="object"&&e!==null?e:void 0,t=Zo(e),r=n.deepDark,s=n.deepLight,a={base:t,dark:p(t,r,.6),action:p(t,r,.2),active:p(t,s,.6),light:p(t,s,.9),onLight:t};if(S(t)){let c=Te(n.baseLight),l=Pn(t,a.action);if(l||(a.action=Fn(t,c)??a.action),!Pn(t,a.active)){let f=l?void 0:K(a.action)??void 0;a.active=Fn(t,c,f)??a.active}}if(a.onLight=W(a.action,a.light),o){let c=o.action??a.action,l=o.light??a.light;return{base:t,dark:o.dark??a.dark,action:c,active:o.active??a.active,light:l,onLight:o.onLight??W(c,l)}}return a}i(T,"mountSingleColor");function zn(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(zn,"mountGreyscaleColors");function Hn(e){let n=e.deepLight,o=e.deepDark,t=typeof e.primary=="object"&&e.primary?e.primary.base:e.primary,r=i(a=>1/17*(a-1),"interpolation"),s=p(t,o,.5);return{0:p(s,n,r(18)),5:p(s,n,r(17.5)),10:p(s,n,r(17)),20:p(s,n,r(16)),30:p(s,n,r(15)),40:p(s,n,r(14)),50:p(s,n,r(13)),60:p(s,n,r(12)),70:p(s,n,r(11)),80:p(s,n,r(10)),90:p(s,n,r(9)),100:p(s,n,r(8)),110:p(s,n,r(7)),120:p(s,n,r(6)),130:p(s,n,r(5)),140:p(s,n,r(4)),150:p(s,n,r(3)),160:p(s,n,r(2)),170:s,180:p(s,o,.25)}}i(Hn,"mountNeutralColors");function B(e,n){let o=J(S(e));if(!o)return e;let t=Math.min(1,Math.max(0,(o.l??0)+n));return j({...o,l:t})??e}i(B,"shiftLightness");function de(e,n){let o=J(S(e));if(!o)return e;let t=o.l??0,r=n.min??0,s=n.max??1;return t>=r&&t<=s?e:j({...o,l:Math.min(s,Math.max(r,t))})??e}i(de,"clampLightness");function P(e,n){let o=Yo(S(e));if(!o)return e;let t=Math.min(1,Math.max(0,n)),r=i(s=>Math.round((s??0)*255),"channel");return`rgba(${r(o.r)}, ${r(o.g)}, ${r(o.b)}, ${t})`}i(P,"toRgbaString");import{apcaContrast as pe,DARK_BOOST_TAPER_MAX_L as $e,DARK_ELEVATION_BOOST as nt,EDGE_ALPHA as Ce,HALATION_FLOORS as fe,INK_APCA_MIN as Ve,INK_MIX as Me,LADDER_DELTAS as Kn,MIN_CONTRAST_AA as Wn,WASH_ALPHA as ot}from"@apollion-dsi/core/themes/colors";var tt="#FFFFFF",Ee="#000000";function rt(e){return Te(e.baseLight)?"dark":"light"}i(rt,"resolvePolarity");function it(e){let n=fe.CANVAS_MIN_L;return e<=n?1:e>=$e?0:($e-e)/($e-n)}i(it,"darkElevationBoostFactor");function Jn(e,n,o){if(Math.abs(pe(e,n))>=o)return e;let t=Math.abs(pe("#ffffff",n))>=Math.abs(pe("#000000",n)),r=e;for(let s=0;s<40;s+=1){let a=B(r,t?.02:-.02);if(a===r||(r=a,Math.abs(pe(r,n))>=o))break}return r}i(Jn,"ensureApca");function st(e,n){let o=e.baseLight??tt,t=n==="dark",r=t?de(o,{min:fe.CANVAS_MIN_L}):o,s=B(r,Kn.sunken),a=t?it(K(r)??0):0,c=i(l=>Kn[l]+a*nt[l],"delta");return{canvas:r,sunken:t?de(s,{min:fe.CANVAS_MIN_L}):s,paper:B(r,c("paper")),raised:B(r,c("raised")),overlay:B(r,c("overlay")),scrim:t?e.deepLight??Ee:e.neutral?.["180"]??e.baseDark??Ee}}i(st,"deriveSurface");function at(e,n){let o=e.baseDark??Ee,t=de(Jn(W(o,n.paper,Wn),n.paper,Ve.primary),{max:fe.INK_MAX_L}),r=i((s,a)=>Jn(W(p(t,n.canvas,s),n.paper,Wn),n.paper,a),"tier");return{primary:t,secondary:r(Me.secondary,Ve.secondary),muted:r(Me.muted,Ve.muted),disabled:p(t,n.canvas,Me.disabled)}}i(at,"deriveInk");function ct(e){return{hairline:P(e.primary,Ce.hairline),border:P(e.primary,Ce.border),strong:P(e.primary,Ce.strong)}}i(ct,"deriveEdge");function lt(e,n){let o=ot[n];return{hover:P(e.primary,o.hover),pressed:P(e.primary,o.pressed),selected:P(e.primary,o.selected)}}i(lt,"deriveWash");function ut(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(ut,"applyOverride");function qn(e,n){let o=rt(e),t=st(e,o),r=at(e,t),s={surface:t,ink:r,edge:ct(r),wash:lt(r,o)};return ut(s,n?.[o])}i(qn,"resolveSurfaceLadder");function gt(e){let n=Hn(e);return{baseDark:e.baseDark,baseLight:e.baseLight,deepDark:e.deepDark,deepLight:e.deepLight,transparent:e.transparent??"transparent",neutral:n,grayscale:zn(e),...qn({...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)}}i(gt,"composeColors");function O(e,n=ft){let o=e.mode==="dark"?dt(e.colors):e.colors,t=gt(o),r=Z(n,e.dimension),s=pt({colors:t,spacing:r}),a=Un(s);return e.surface==="negative"&&(a=Un(mt({semantic:s,colors:t},"negative").semantic)),{foundation:a,colors:t}}i(O,"buildVariantThemes");async function no(e){let{config:n,outDir:o,cwd:t=process.cwd(),verbose:r=!1}=e,s=se(n),a=n.output??{};if(s.length===0)throw new Error("apollion-tokens build: no variants (config.brands is empty)");let c=await ht(q(bt(),"apollion-tokens-"));try{let l=[],f=i(async(u,d)=>{await Rt(c,u,d),l.push({path:u,sha256:ae(d)}),r&&console.log(` \u2713 ${u}`)},"emit");if(a.json){let u=Gn(n),d=[],y=un();d.push(y),await f(u.base.file,wn(y));for(let m of u.spacing){let k=s.find(U=>U.dimension===m.dimension),{foundation:M}=O(k),E=fn(M,m.dimension);d.push(E),await f(m.file,Dn(E,m.dimension))}for(let m of u.font){let k=dn(m.dimension);d.push(k),await f(m.file,Tn(k,m.dimension))}for(let m of u.color){let k=s.find(ge=>ge.brand===m.brand&&ge.mode===m.mode&&ge.surface===m.surface),{foundation:M,colors:E}=O(k),U=pn(M,E);d.push(U),await f(m.file,vn(U,m.brand,m.mode,m.surface))}tn(d),await f(Ln,$n(n,u))}if(a.css||a.ts)for(let u of s){let{foundation:d,colors:y}=O(u),m=_(d,y,u),k=Mn(u);a.css&&await f(`css/${k}.css`,kn(m,{rgbCompanions:a.tailwind})),a.ts&&await f(`ts/${k}.d.ts`,Vn(m))}if(a.cssModes){let u=new Map;for(let d of s){let y=`${d.brand}.${d.surface}.${d.dimension}`,m=u.get(y)??{};m[d.mode]=d,u.set(y,m)}for(let[d,{light:y,dark:m}]of u){if(!y||!m)throw new Error(`apollion-tokens build: output.cssModes needs both modes for ${d} (config.modes)`);let k=O(y),M=O(m),E=In(_(k.foundation,k.colors,y),_(M.foundation,M.colors,m),{rgbCompanions:a.tailwind});await f(`css/${d}.modes.css`,E)}}if(a.tailwind){let u=s[0],{foundation:d,colors:y}=O(u),m=_(d,y,u);await f("tailwind/preset.mjs",yn(m)),await f("tailwind/tw-merge.mjs",bn(m))}if(a.designMd){let u=[...new Set(s.map(d=>d.brand))];for(let d of u){let m=s.filter(k=>k.brand===d).map(k=>{let{foundation:M,colors:E}=O(k);return _(M,E,k)});await f(`design/${d}.design.md`,xn(d,m))}}let R={configHash:De(n),files:l,gitCommit:En(t),buildEnv:An()},w=On(R);return await Qn(q(c,"manifest.json"),w),await Yn(o,{recursive:!0,force:!0}),await Zn(eo(o),{recursive:!0}),await yt(c,o),r&&console.log(`\u2713 ${l.length} files \u2192 ${o}`),{manifest:R,outDir:o}}catch(l){throw await Yn(c,{recursive:!0,force:!0}).catch(()=>{}),l}}i(no,"build");async function oo(e){let{config:n,outDir:o}=e,t;try{t=JSON.parse(await Xn(q(o,"manifest.json"),"utf8"))}catch{return!1}if(t.configHash!==De(n))return!1;for(let r of t.files){let s;try{s=await Xn(q(o,r.path))}catch{return!1}if(ae(s)!==r.sha256)return!1}return!0}i(oo,"check");async function Rt(e,n,o){let t=q(e,n);await Zn(eo(t),{recursive:!0}),await Qn(t,o)}i(Rt,"writeAt");import{readFile as It}from"node:fs/promises";import{resolve as xt}from"node:path";import{createContext as St,Script as wt}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"'}),kt=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(),to=g.object({brands:g.record(g.string(),kt).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 vt=[/\brequire\s*\(/,/\bimport\s*\(/,/^\s*import\s+/m],Dt=1e3;var Ae=class Ae extends Error{constructor(o,t){super(o);this.configPath=t;this.name="ConfigLoadError"}};i(Ae,"ConfigLoadError");var N=Ae;async function ro(e){let n=xt(e.configPath),o=await It(n,"utf8");for(let l of vt)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 t=o.replace(/(^|\n)\s*export\s+default\s+/,(l,f)=>`${f}__apollion_config_export = `);if(t===o)throw new N("apollion.config: missing `export default <object>;` \u2014 config must export a default object literal.",n);let r={__apollion_config_export:void 0,console:Tt(),Symbol,Number,String,Boolean,Array,Object,JSON,Math,defineConfig:i(l=>l,"defineConfig")},s=St(r);try{new wt(t,{filename:n}).runInContext(s,{timeout:Dt})}catch(l){throw new N(`apollion.config: evaluation failed \u2014 ${l instanceof Error?l.message:String(l)}`,n)}let a=r.__apollion_config_export;if(a===void 0)throw new N("apollion.config: `export default` produced undefined.",n);let c=to.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(ro,"loadConfig");function Tt(){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(Tt,"makeReadOnlyConsole");function Ct(e){let n=e.slice(2),o=n[0];o!=="build"&&me(`Unknown command "${o??""}". Usage: apollion-tokens build [--check] [--verbose] --config <path> [--out <dir>]`);let t="apollion.config.mjs",r="dist",s=!1,a=!1;for(let c=1;c<n.length;c++){let l=n[c];switch(l){case"--config":t=n[++c]??me("--config needs a path");break;case"--out":r=n[++c]??me("--out needs a path");break;case"--check":s=!0;break;case"--verbose":a=!0;break;default:me(`Unknown flag "${l}"`)}}return{command:o,configPath:t,outDir:r,check:s,verbose:a}}i(Ct,"parseArgs");function me(e){console.error(`apollion-tokens: ${e}`),process.exit(2)}i(me,"fail");async function Vt(e){let n=Oe(e);if(n.endsWith(".json")){let o=await $t(n,"utf8");return JSON.parse(o)}return ro({configPath:n})}i(Vt,"loadConfigFromPath");async function Mt(){let e=Ct(process.argv),n=await Vt(e.configPath);if(e.check){await oo({config:n,outDir:Oe(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 no({config:n,outDir:Oe(e.outDir),verbose:e.verbose});console.log(`apollion-tokens: wrote ${o.files.length} file(s) \u2014 configHash=${o.configHash.slice(0,12)}\u2026`)}i(Mt,"main");Mt().catch(e=>{console.error(`apollion-tokens: ${e instanceof Error?e.message:String(e)}`),process.exit(1)});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@apollion-dsi/tokens",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0",
|
|
4
4
|
"description": "Apollion Design System — Framework-agnostic design tokens",
|
|
5
5
|
"homepage": "https://www.apollion.com.br",
|
|
6
6
|
"license": "MIT",
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
69
|
"@apollion-dsi/core": "workspace:*",
|
|
70
|
-
"@apollion-dsi/eslint-config": "0.
|
|
70
|
+
"@apollion-dsi/eslint-config": "0.10.0",
|
|
71
71
|
"@types/culori": "4.0.1",
|
|
72
72
|
"@types/jest": "30.0.0",
|
|
73
73
|
"@types/node": "25.7.0",
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Motion builder — **Strangler Fig duplicate** of
|
|
3
|
+
* `@apollion-dsi/core/themes/motion` (ADR-027).
|
|
4
|
+
*
|
|
5
|
+
* Mirrors the Tier-1 duration/easing scales, the reduced-motion-exempt
|
|
6
|
+
* indicator channel, and the Tier-2 intents. Axis-invariant (identical for
|
|
7
|
+
* every brand/mode/surface/dimension). Formatting is delegated to core's
|
|
8
|
+
* `createMotion`, so raw CSS strings are byte-equal by construction; the
|
|
9
|
+
* parity suite pins the mirror.
|
|
10
|
+
*
|
|
11
|
+
* @see ./colors.ts (Strangler Fig contract notes)
|
|
12
|
+
*/
|
|
13
|
+
import type {
|
|
14
|
+
MotionDurationKey,
|
|
15
|
+
MotionEasingKey,
|
|
16
|
+
MotionEasingPoints,
|
|
17
|
+
MotionIndicatorKey,
|
|
18
|
+
MotionInput,
|
|
19
|
+
MotionIntentKey,
|
|
20
|
+
} from '@apollion-dsi/core/themes/motion';
|
|
21
|
+
import { createMotion, defaultInputMotion } from '@apollion-dsi/core/themes/motion';
|
|
22
|
+
|
|
23
|
+
/** A resolved duration: the numeric ms plus the CSS string core emits. */
|
|
24
|
+
export interface MotionDurationEntryValue {
|
|
25
|
+
readonly ms: number;
|
|
26
|
+
readonly css: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** A resolved easing: the bezier control points plus the CSS string core emits. */
|
|
30
|
+
export interface MotionEasingEntryValue {
|
|
31
|
+
readonly points: MotionEasingPoints;
|
|
32
|
+
readonly css: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** A resolved Tier-2 intent, with reference targets for DTCG aliasing. */
|
|
36
|
+
export interface MotionIntentEntryValue {
|
|
37
|
+
/** Tier-1 duration key the intent references, or `null` for a direct value
|
|
38
|
+
* (the `settle` 2750ms outlier). */
|
|
39
|
+
readonly durationRef: MotionDurationKey | null;
|
|
40
|
+
readonly duration: MotionDurationEntryValue;
|
|
41
|
+
/** Tier-1 easing key the intent references (always a reference). */
|
|
42
|
+
readonly easingRef: MotionEasingKey;
|
|
43
|
+
readonly easing: MotionEasingEntryValue;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Resolved `[key, { ms, css }]` pairs of the Tier-1 duration scale, ascending. */
|
|
47
|
+
export function motionDurationEntries(
|
|
48
|
+
input: MotionInput = defaultInputMotion,
|
|
49
|
+
): ReadonlyArray<readonly [MotionDurationKey, MotionDurationEntryValue]> {
|
|
50
|
+
const resolved = createMotion(input);
|
|
51
|
+
return (Object.keys(input.duration) as MotionDurationKey[]).map(
|
|
52
|
+
(key) => [key, { ms: input.duration[key], css: resolved.duration[key] }] as const,
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Resolved `[key, { points, css }]` pairs of the Tier-1 easing scale. */
|
|
57
|
+
export function motionEasingEntries(
|
|
58
|
+
input: MotionInput = defaultInputMotion,
|
|
59
|
+
): ReadonlyArray<readonly [MotionEasingKey, MotionEasingEntryValue]> {
|
|
60
|
+
const resolved = createMotion(input);
|
|
61
|
+
return (Object.keys(input.easing) as MotionEasingKey[]).map(
|
|
62
|
+
(key) => [key, { points: input.easing[key], css: resolved.easing[key] }] as const,
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Resolved `[key, { ms, css }]` pairs of the indicator channel. */
|
|
67
|
+
export function motionIndicatorEntries(
|
|
68
|
+
input: MotionInput = defaultInputMotion,
|
|
69
|
+
): ReadonlyArray<readonly [MotionIndicatorKey, MotionDurationEntryValue]> {
|
|
70
|
+
const resolved = createMotion(input);
|
|
71
|
+
return (Object.keys(input.indicator) as MotionIndicatorKey[]).map(
|
|
72
|
+
(key) => [key, { ms: input.indicator[key], css: resolved.indicator[key] }] as const,
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Resolved `[key, intent]` pairs of the Tier-2 intents, with reference targets. */
|
|
77
|
+
export function motionIntentEntries(
|
|
78
|
+
input: MotionInput = defaultInputMotion,
|
|
79
|
+
): ReadonlyArray<readonly [MotionIntentKey, MotionIntentEntryValue]> {
|
|
80
|
+
const resolved = createMotion(input);
|
|
81
|
+
return (Object.keys(input.intent) as MotionIntentKey[]).map((key) => {
|
|
82
|
+
const intent = input.intent[key];
|
|
83
|
+
const durationRef = typeof intent.duration === 'number' ? null : intent.duration;
|
|
84
|
+
const ms = typeof intent.duration === 'number' ? intent.duration : input.duration[intent.duration];
|
|
85
|
+
return [
|
|
86
|
+
key,
|
|
87
|
+
{
|
|
88
|
+
durationRef,
|
|
89
|
+
duration: { ms, css: resolved.intent[key].duration },
|
|
90
|
+
easingRef: intent.easing,
|
|
91
|
+
easing: { points: input.easing[intent.easing], css: resolved.intent[key].easing },
|
|
92
|
+
},
|
|
93
|
+
] as const;
|
|
94
|
+
});
|
|
95
|
+
}
|
package/src/ir.ts
CHANGED
|
@@ -40,6 +40,12 @@ import { converter, formatHex, parse } from 'culori';
|
|
|
40
40
|
|
|
41
41
|
import { breakpointEntries } from './builders/breakpoints';
|
|
42
42
|
import { containerSizeEntries, layoutEntries } from './builders/layout';
|
|
43
|
+
import {
|
|
44
|
+
motionDurationEntries,
|
|
45
|
+
motionEasingEntries,
|
|
46
|
+
motionIndicatorEntries,
|
|
47
|
+
motionIntentEntries,
|
|
48
|
+
} from './builders/motion';
|
|
43
49
|
import { createSpacing } from './builders/spacing';
|
|
44
50
|
import type { Variant } from './config-schema';
|
|
45
51
|
import type { ColorsThemeInterface } from './theme-factory';
|
|
@@ -47,7 +53,16 @@ import { assertTokenMetaResolves, TOKEN_META } from './token-meta';
|
|
|
47
53
|
|
|
48
54
|
const toOklch = converter('oklch');
|
|
49
55
|
|
|
50
|
-
export type IRTokenType =
|
|
56
|
+
export type IRTokenType =
|
|
57
|
+
| 'color'
|
|
58
|
+
| 'dimension'
|
|
59
|
+
| 'fontFamily'
|
|
60
|
+
| 'fontWeight'
|
|
61
|
+
| 'number'
|
|
62
|
+
| 'strokeStyle'
|
|
63
|
+
| 'shadow'
|
|
64
|
+
| 'duration'
|
|
65
|
+
| 'cubicBezier';
|
|
51
66
|
|
|
52
67
|
export interface IRColorValue {
|
|
53
68
|
readonly kind: 'color';
|
|
@@ -91,6 +106,23 @@ export interface IRStrokeStyleValue {
|
|
|
91
106
|
readonly style: string;
|
|
92
107
|
}
|
|
93
108
|
|
|
109
|
+
/** DTCG `duration` — milliseconds by contract (ADR-027 motion scales). */
|
|
110
|
+
export interface IRDurationValue {
|
|
111
|
+
readonly kind: 'duration';
|
|
112
|
+
readonly raw: string;
|
|
113
|
+
readonly value: number;
|
|
114
|
+
readonly unit: 'ms';
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** DTCG `cubicBezier` — the four control points `[x1, y1, x2, y2]`. `raw` is
|
|
118
|
+
* always the functional `cubic-bezier(…)` form, never keywords (deterministic
|
|
119
|
+
* emission, parity-pinned against core). */
|
|
120
|
+
export interface IRCubicBezierValue {
|
|
121
|
+
readonly kind: 'cubicBezier';
|
|
122
|
+
readonly raw: string;
|
|
123
|
+
readonly points: readonly [number, number, number, number];
|
|
124
|
+
}
|
|
125
|
+
|
|
94
126
|
export interface IRShadowLayer {
|
|
95
127
|
readonly color: IRColorValue;
|
|
96
128
|
readonly offsetX: IRDimensionValue;
|
|
@@ -111,7 +143,7 @@ export interface IRShadowValue {
|
|
|
111
143
|
export interface IRReference {
|
|
112
144
|
readonly kind: 'ref';
|
|
113
145
|
readonly path: string;
|
|
114
|
-
readonly resolved: IRColorValue | IRDimensionValue;
|
|
146
|
+
readonly resolved: IRColorValue | IRDimensionValue | IRDurationValue | IRCubicBezierValue;
|
|
115
147
|
}
|
|
116
148
|
|
|
117
149
|
export type IRValue =
|
|
@@ -122,6 +154,8 @@ export type IRValue =
|
|
|
122
154
|
| IRNumberValue
|
|
123
155
|
| IRStrokeStyleValue
|
|
124
156
|
| IRShadowValue
|
|
157
|
+
| IRDurationValue
|
|
158
|
+
| IRCubicBezierValue
|
|
125
159
|
| IRReference;
|
|
126
160
|
|
|
127
161
|
export interface IRToken {
|
|
@@ -697,6 +731,61 @@ function buildLayoutConstants(): IRGroup {
|
|
|
697
731
|
return out;
|
|
698
732
|
}
|
|
699
733
|
|
|
734
|
+
/**
|
|
735
|
+
* Motion scales (ADR-027) — axis-invariant mirror of `theme.motion` via the
|
|
736
|
+
* Strangler Fig builder. Tier-1 `duration`/`easing` primitives, the
|
|
737
|
+
* reduced-motion-exempt `indicator` channel, and Tier-2 `intent` pairs whose
|
|
738
|
+
* members alias the Tier-1 tokens (DTCG references) — the `settle` duration
|
|
739
|
+
* is the one documented direct value (a component-tuned outlier kept out of
|
|
740
|
+
* the clean primitive scale).
|
|
741
|
+
*
|
|
742
|
+
* CSS emission (`--apollion-motion-*`) is byte-identical to what core's
|
|
743
|
+
* `GlobalStyle` emits at runtime (`motionVars`) — one canonical emitter per
|
|
744
|
+
* consumer class; the parity suite pins the values.
|
|
745
|
+
*/
|
|
746
|
+
function buildMotion(): IRGroup {
|
|
747
|
+
const durationToken = (entry: { ms: number; css: string }): IRToken => ({
|
|
748
|
+
type: 'duration',
|
|
749
|
+
value: { kind: 'duration', raw: entry.css, value: entry.ms, unit: 'ms' },
|
|
750
|
+
});
|
|
751
|
+
const easingToken = (entry: { points: readonly [number, number, number, number]; css: string }): IRToken => ({
|
|
752
|
+
type: 'cubicBezier',
|
|
753
|
+
value: { kind: 'cubicBezier', raw: entry.css, points: entry.points },
|
|
754
|
+
});
|
|
755
|
+
|
|
756
|
+
const duration: Record<string, IRToken> = {};
|
|
757
|
+
for (const [key, entry] of motionDurationEntries()) duration[key] = durationToken(entry);
|
|
758
|
+
|
|
759
|
+
const easing: Record<string, IRToken> = {};
|
|
760
|
+
for (const [key, entry] of motionEasingEntries()) easing[key] = easingToken(entry);
|
|
761
|
+
|
|
762
|
+
const indicator: Record<string, IRToken> = {};
|
|
763
|
+
for (const [key, entry] of motionIndicatorEntries()) indicator[key] = durationToken(entry);
|
|
764
|
+
|
|
765
|
+
const intent: Record<string, IRGroup> = {};
|
|
766
|
+
for (const [key, entry] of motionIntentEntries()) {
|
|
767
|
+
const durationValue = durationToken(entry.duration).value as IRDurationValue;
|
|
768
|
+
intent[key] = {
|
|
769
|
+
duration: entry.durationRef
|
|
770
|
+
? {
|
|
771
|
+
type: 'duration',
|
|
772
|
+
value: { kind: 'ref', path: `motion.duration.${entry.durationRef}`, resolved: durationValue },
|
|
773
|
+
}
|
|
774
|
+
: durationToken(entry.duration),
|
|
775
|
+
easing: {
|
|
776
|
+
type: 'cubicBezier',
|
|
777
|
+
value: {
|
|
778
|
+
kind: 'ref',
|
|
779
|
+
path: `motion.easing.${entry.easingRef}`,
|
|
780
|
+
resolved: easingToken(entry.easing).value as IRCubicBezierValue,
|
|
781
|
+
},
|
|
782
|
+
},
|
|
783
|
+
};
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
return { duration, easing, indicator, intent };
|
|
787
|
+
}
|
|
788
|
+
|
|
700
789
|
/** `$extensions` payload documenting the breakpoint interval contract. */
|
|
701
790
|
const BREAKPOINT_EXTENSION = {
|
|
702
791
|
unit: 'px',
|
|
@@ -732,6 +821,7 @@ export function buildBaseIR(): IRSlice {
|
|
|
732
821
|
breakpoint: buildBreakpoints(),
|
|
733
822
|
'container-size': buildContainerSizes(),
|
|
734
823
|
layout: buildLayoutConstants(),
|
|
824
|
+
motion: buildMotion(),
|
|
735
825
|
},
|
|
736
826
|
seen,
|
|
737
827
|
);
|
|
@@ -835,6 +925,7 @@ export function buildIR(foundation: FoundationLayer, colors: ColorsThemeInterfac
|
|
|
835
925
|
breakpoint: buildBreakpoints(),
|
|
836
926
|
'container-size': buildContainerSizes(),
|
|
837
927
|
layout: buildLayoutConstants(),
|
|
928
|
+
motion: buildMotion(),
|
|
838
929
|
font: font.group,
|
|
839
930
|
shadow: buildShadow(colors),
|
|
840
931
|
},
|
|
@@ -11,7 +11,16 @@
|
|
|
11
11
|
* @see https://www.designtokens.org/TR/drafts/format/ (DTCG 2025.10)
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import type {
|
|
14
|
+
import type {
|
|
15
|
+
IRColorValue,
|
|
16
|
+
IRCubicBezierValue,
|
|
17
|
+
IRDimensionValue,
|
|
18
|
+
IRDurationValue,
|
|
19
|
+
IRGroup,
|
|
20
|
+
IRShadowValue,
|
|
21
|
+
IRToken,
|
|
22
|
+
IRValue,
|
|
23
|
+
} from '../ir';
|
|
15
24
|
import { isToken, kebab, kebabPath } from '../ir';
|
|
16
25
|
|
|
17
26
|
export interface DtcgColorValue {
|
|
@@ -35,7 +44,20 @@ export interface DtcgShadowValue {
|
|
|
35
44
|
inset?: boolean;
|
|
36
45
|
}
|
|
37
46
|
|
|
38
|
-
|
|
47
|
+
/** DTCG `duration` composite value — `{ value, unit }`, ms by contract. */
|
|
48
|
+
export interface DtcgDurationValue {
|
|
49
|
+
value: number;
|
|
50
|
+
unit: 'ms';
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export type DtcgTokenValue =
|
|
54
|
+
| DtcgColorValue
|
|
55
|
+
| DtcgDimensionValue
|
|
56
|
+
| DtcgShadowValue
|
|
57
|
+
| DtcgDurationValue
|
|
58
|
+
| number[]
|
|
59
|
+
| string
|
|
60
|
+
| number;
|
|
39
61
|
|
|
40
62
|
export interface DtcgToken {
|
|
41
63
|
$value: DtcgTokenValue;
|
|
@@ -58,6 +80,15 @@ function dimensionValue(v: IRDimensionValue): DtcgDimensionValue {
|
|
|
58
80
|
return { value: v.value, unit: v.unit };
|
|
59
81
|
}
|
|
60
82
|
|
|
83
|
+
function durationValue(v: IRDurationValue): DtcgDurationValue {
|
|
84
|
+
return { value: v.value, unit: v.unit };
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** DTCG `cubicBezier` — the bare four-point array `[x1, y1, x2, y2]`. */
|
|
88
|
+
function cubicBezierValue(v: IRCubicBezierValue): number[] {
|
|
89
|
+
return [...v.points];
|
|
90
|
+
}
|
|
91
|
+
|
|
61
92
|
function shadowValue(v: IRShadowValue): DtcgShadowValue {
|
|
62
93
|
const s = v.shadow;
|
|
63
94
|
const out: DtcgShadowValue = {
|
|
@@ -89,6 +120,10 @@ export function projectValue(value: IRValue): DtcgTokenValue {
|
|
|
89
120
|
return value.style;
|
|
90
121
|
case 'shadow':
|
|
91
122
|
return shadowValue(value);
|
|
123
|
+
case 'duration':
|
|
124
|
+
return durationValue(value);
|
|
125
|
+
case 'cubicBezier':
|
|
126
|
+
return cubicBezierValue(value);
|
|
92
127
|
}
|
|
93
128
|
}
|
|
94
129
|
|
|
@@ -60,9 +60,12 @@ function renderSet(slice: IRSlice, description: string): string {
|
|
|
60
60
|
return `${JSON.stringify(doc, null, 2)}\n`;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
-
/** Axis-invariant base set (border). */
|
|
63
|
+
/** Axis-invariant base set (border, breakpoints, container sizes, layout, motion). */
|
|
64
64
|
export function renderBaseSet(slice: IRSlice): string {
|
|
65
|
-
return renderSet(
|
|
65
|
+
return renderSet(
|
|
66
|
+
slice,
|
|
67
|
+
'Apollion DS — base set (axis-invariant: border, breakpoints, container sizes, layout, motion). DTCG 2025.10.',
|
|
68
|
+
);
|
|
66
69
|
}
|
|
67
70
|
|
|
68
71
|
/** Colour set for one (brand × mode × surface). */
|
|
@@ -20,8 +20,11 @@
|
|
|
20
20
|
* **Scope (v1):** foundation groups only — `bg`/`text`/`tx` → `colors`,
|
|
21
21
|
* `spacing` → `spacing`, `border.radius`/`border.width` → `borderRadius`/
|
|
22
22
|
* `borderWidth`, `font.*` → `fontFamily`/`fontSize`/`fontWeight`/`lineHeight`,
|
|
23
|
-
* `shadow` → `boxShadow
|
|
24
|
-
*
|
|
23
|
+
* `shadow` → `boxShadow`, `motion.duration`/`motion.easing` →
|
|
24
|
+
* `transitionDuration`/`transitionTimingFunction` (ADR-027; Tier-1 only —
|
|
25
|
+
* the `intent` pairs and the `indicator` channel have no composite Tailwind
|
|
26
|
+
* scale and stay var-informational). `border.style` has no Tailwind theme
|
|
27
|
+
* scale — deliberately unmapped. No dependency on the component-token tier.
|
|
25
28
|
*
|
|
26
29
|
* @see ../ir.ts (source of truth) · css.ts (`-rgb` companions) ·
|
|
27
30
|
* docs/plans/tailwind-preset-renderer.md (divergence-matrix row 6)
|
|
@@ -164,6 +167,8 @@ export function renderTailwindPreset(ir: IRDocument): string {
|
|
|
164
167
|
pushScale(out, 'fontWeight', varEntries(groupAt(ir.groups, 'font', 'weight'), ['font', 'weight']));
|
|
165
168
|
pushScale(out, 'lineHeight', varEntries(groupAt(ir.groups, 'font', 'lineHeight'), ['font', 'line-height']));
|
|
166
169
|
pushScale(out, 'boxShadow', varEntries(groupAt(ir.groups, 'shadow'), ['shadow']));
|
|
170
|
+
pushScale(out, 'transitionDuration', varEntries(groupAt(ir.groups, 'motion', 'duration'), ['motion', 'duration']));
|
|
171
|
+
pushScale(out, 'transitionTimingFunction', varEntries(groupAt(ir.groups, 'motion', 'easing'), ['motion', 'easing']));
|
|
167
172
|
|
|
168
173
|
out.push(' },', ' },', '};', '', 'export default preset;', '');
|
|
169
174
|
return out.join('\n');
|