@apollion-dsi/tokens 5.3.0 → 5.5.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/README.md CHANGED
@@ -1,46 +1,67 @@
1
- # `@apollion-dsi/tokens`
1
+ # @apollion-dsi/tokens
2
2
 
3
- Framework-agnostic design tokens for Apollion Design System v4+.
3
+ Framework-agnostic design tokens for the **Apollion Design System** — an
4
+ OKLch-based build pipeline that emits CSS variables, structured JSON,
5
+ TypeScript types, and an optional Tailwind preset, in light and dark
6
+ variants.
4
7
 
5
8
  [![npm](https://img.shields.io/npm/v/@apollion-dsi/tokens.svg)](https://www.npmjs.com/package/@apollion-dsi/tokens)
6
9
 
7
- **Status:** ✅ GA since 4.2.0 (v4). Versioned in lockstep with `@apollion-dsi/core`.
10
+ Versioned in lockstep with
11
+ [`@apollion-dsi/core`](https://www.npmjs.com/package/@apollion-dsi/core) —
12
+ both packages always release the same version number.
8
13
 
9
- ## Versioned API
14
+ ## Installation
10
15
 
11
- Single public entry: `@apollion-dsi/tokens/runtime/v1`.
16
+ React consumers normally get this package automatically:
17
+ `@apollion-dsi/core` declares it as an optional dependency. For
18
+ non-React stacks (or standalone token builds), install it directly:
12
19
 
13
- Future major surface changes go to `runtime/v2`, `runtime/v3`, etc. — `v1` is preserved indefinitely (Strangler Fig).
14
-
15
- ```ts
16
- import { TOKENS_RUNTIME_API_VERSION } from '@apollion-dsi/tokens/runtime/v1';
20
+ ```bash
21
+ yarn add @apollion-dsi/tokens
17
22
  ```
18
23
 
19
- ## Scope
20
-
21
- - **In:** OKLch palette derivation (S2/S4), Dimension axis (S3), Foundation/Surface builders (S4), build-time CSS/JSON/TS variant emission (S5), Config-First loader (S6).
22
- - **Out:** Runtime React components (lives in `@apollion-dsi/core`), framework adapters (Vue/Flutter consumers consume `dist/json/*.json` directly).
23
-
24
- ## JSON output (`dist/json/*.json`)
24
+ ## Versioned runtime API
25
25
 
26
- Tokens em JSON estruturado — values are **structured objects**, not shorthand strings:
26
+ Single public runtime entry: `@apollion-dsi/tokens/runtime/v1`.
27
27
 
28
- - `color` → `{ "colorSpace": "oklch", "components": [L, C, H], "hex": "#rrggbb" }` — OKLch working space + sRGB `hex` fallback. `alpha` emitted only when below 1.
29
- - `dimension` → `{ "value": <number>, "unit": "rem" }`.
28
+ Future breaking surface changes go to `runtime/v2`, `runtime/v3`, etc. —
29
+ `v1` is preserved indefinitely, so consumers migrate on their own schedule.
30
30
 
31
- `dist/css/*.css` and `dist/ts/*.d.ts` stay string-based (hex / `rem`) — JSON is the interop surface; CSS/TS are the resolved consumer surfaces.
32
-
33
- ## Coupling to `@apollion-dsi/core`
31
+ ```ts
32
+ import { TOKENS_RUNTIME_API_VERSION } from '@apollion-dsi/tokens/runtime/v1';
33
+ ```
34
34
 
35
- Hard rule:
35
+ ## Scope
36
36
 
37
- - `core` declares `@apollion-dsi/tokens` in `optionalDependencies` (NOT `dependencies`).
38
- - Consumer that does not opt into `apollion.config.mjs#output.runtime: true` never installs tokens.
39
- - Lockstep version enforced via the `.changeset/config.json#fixed` array from `4.0.0`.
37
+ - **In:** OKLch palette derivation, dimension scales, Foundation/Surface
38
+ builders, build-time emission of CSS/JSON/TS variants (light **and**
39
+ dark), config-first loader (`apollion.config.mjs`).
40
+ - **Out:** runtime React components (those live in `@apollion-dsi/core`);
41
+ framework adapters — Vue/Flutter/other consumers read `dist/json/*.json`
42
+ directly.
43
+
44
+ ## Build outputs (`dist/*`)
45
+
46
+ The build step emits, per variant (light/dark):
47
+
48
+ - **`dist/css/*.css`** — fully resolved CSS custom properties.
49
+ - **`dist/json/*.json`** — tokens as structured JSON, the cross-framework
50
+ interop surface. Values are **structured objects**, not shorthand strings:
51
+ - `color` → `{ "colorSpace": "oklch", "components": [L, C, H], "hex": "#rrggbb" }`
52
+ — OKLch working space + sRGB `hex` fallback (`alpha` emitted only when
53
+ below 1).
54
+ - `dimension` → `{ "value": <number>, "unit": "rem" }`.
55
+ - **`dist/ts/*.d.ts`** — typed token surfaces (string-based, hex / `rem`).
56
+ - **`dist/tailwind/preset.mjs` + `dist/tailwind/tw-merge.mjs`** — opt-in via
57
+ the `output.tailwind` config flag: a generated Tailwind preset mapping
58
+ foundation tokens to theme keys over `var(--apollion-*)`, plus a
59
+ tailwind-merge extension derived from the same source.
40
60
 
41
61
  ## Documentation
42
62
 
43
- Official docs: <https://www.apollion.com.br>
63
+ - **Official documentation:** <https://www.apollion.com.br>
64
+ - **Changelog:** <https://www.apollion.com.br/changelog>
44
65
 
45
66
  ## License
46
67
 
package/lib/build.cjs CHANGED
@@ -1,6 +1,11 @@
1
- "use strict";var F=Object.defineProperty;var sn=Object.getOwnPropertyDescriptor;var an=Object.getOwnPropertyNames;var cn=Object.prototype.hasOwnProperty;var s=(e,n)=>F(e,"name",{value:n,configurable:!0});var ln=(e,n)=>{for(var o in n)F(e,o,{get:n[o],enumerable:!0})},dn=(e,n,o,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of an(n))!cn.call(e,r)&&r!==o&&F(e,r,{get:()=>n[r],enumerable:!(t=sn(n,r))||t.enumerable});return e};var un=e=>dn(F({},"__esModule",{value:!0}),e);var Bn={};ln(Bn,{build:()=>Pn,check:()=>Nn});module.exports=un(Bn);var y=require("node:fs/promises"),rn=require("node:os"),D=require("node:path");var V=require("@apollion-dsi/core/themes/border"),de=require("@apollion-dsi/core/themes/colors"),N=require("@apollion-dsi/core/themes/depth"),I=require("@apollion-dsi/core/themes/font"),Z=require("@apollion-dsi/core/themes/spacing"),C=require("culori");var le=require("@apollion-dsi/core/themes/dimension");function M({multiplier:e=.25,alias:n},o){let t=o!==void 0?le.DIMENSION_MULTIPLIERS[o]:e;return(...r)=>r.map(i=>{let a=typeof i=="string"?n[i]:i;return`${t*a}rem`}).join(" ")}s(M,"createSpacing");var q={"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)."},"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 K(e){let n=Object.keys(q).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(K,"assertTokenMetaResolves");var pn=(0,C.converter)("oklch");function b(e){return typeof e.type=="string"&&"value"in e}s(b,"isToken");function k(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}s(k,"kebab");function ue(e){return e.split(".").map(k).join(".")}s(ue,"kebabPath");function $(e){return e.kind==="ref"?e.resolved.raw:e.raw}s($,"rawValue");function L(e,n){return Number(e.toFixed(n))||0}s(L,"round");function ee(e){let n=pn((0,C.parse)(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[L(n.l,4),L(n.c,4),L(n.h??0,2)],t=(0,C.formatHex)(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:L(n.alpha,4),hex:t}:{kind:"color",raw:e,components:o,hex:t}}s(ee,"toColorValue");var pe=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function w(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"}}s(w,"toDimensionValue");function h(e){return{type:"color",value:ee(e)}}s(h,"colorToken");function Q(e){let n={};for(let[o,t]of Object.entries(e))n[o]=h(t);return n}s(Q,"recordColorGroup");function fe(e){let n=(0,de.createReadableTextLayer)(e),o={};for(let[t,r]of Object.entries(n.palettes))o[t]=h(r);return o.neutral=Q(n.neutral),o}s(fe,"buildReadableTextGroup");var fn=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function me(e){let n={};for(let o of fn){let t=e[o];n[o]={base:h(t.base),dark:h(t.dark),action:h(t.action),active:h(t.active),light:h(t.light),onLight:h(t.onLight)}}return n.grayscale=Q(e.grayscale),n.neutral=Q(e.neutral),n.baseDark=h(e.baseDark??"#000000"),n.baseLight=h(e.baseLight??"#ffffff"),n.deepDark=h(e.deepDark??"#000000"),n.deepLight=h(e.deepLight??"#ffffff"),n}s(me,"buildColorPrimitives");function ge(e){let n=M(Z.defaultInputSpacing,e),o={};for(let t of Object.keys(Z.defaultInputSpacing.alias))o[t]={type:"dimension",value:w(n(t))};return o}s(ge,"buildSpacePrimitives");function ye(){let e={};for(let[n,o]of Object.entries(V.defaultInputBorder.borderWidth))e[n]={type:"dimension",value:w(o)};return e}s(ye,"buildBorderWidthPrimitives");function mn(e,n){return{color:me(e),space:ge(n),borderWidth:ye()}}s(mn,"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"},be={onPrimary:"color.baseLight",onSecondary:"color.baseLight",onTertiary:"color.baseDark",onSuccess:"color.baseLight",onDanger:"color.baseLight",onWarning:"color.baseDark",onInfo:"color.baseLight"};function gn(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}s(gn,"lookupPrimitive");function j(e,n,o){let t={};for(let[r,i]of Object.entries(e)){let a=o[r],c=a?gn(n,a):void 0;t[r]=a&&c===i?{type:"color",value:{kind:"ref",path:a,resolved:ee(i)}}:h(i)}return t}s(j,"colorRefGroup");var Re={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},yn={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function hn(e,n){let o=n.split("."),t=o[0]==="border-width"?"borderWidth":o[0],r=e[t];for(let i of o.slice(1))if(r&&!b(r)&&i in r)r=r[i];else return;return r&&b(r)&&r.value.kind==="dimension"?r.value.raw:void 0}s(hn,"lookupDimensionPrimitive");function ne(e,n,o){let t={};for(let[r,i]of Object.entries(e)){let a=o[r],c=a?hn(n,a):void 0;t[r]=a&&c===i?{type:"dimension",value:{kind:"ref",path:a,resolved:w(i)}}:{type:"dimension",value:w(i)}}return t}s(ne,"dimensionRefGroup");function Ie(e){let n={},o={};for(let[i,a]of Object.entries(V.defaultInputBorder.borderRadius))pe.test(a)?n[i]={type:"dimension",value:w(a)}:o[i]=a;let t=ne(V.defaultInputBorder.borderWidth,e,yn),r={};for(let[i,a]of Object.entries(V.defaultInputBorder.borderStyle))r[i]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:t,style:r},extensions:o}}s(Ie,"buildBorder");function ke(e){let n=(0,I.createFont)(I.defaultInputFont,e),o={};for(let[c,l]of Object.entries(I.defaultInputFont.fontFamily)){let m=l.replace(/;\s*$/,"").trim();o[c]={type:"fontFamily",value:{kind:"fontFamily",raw:m,family:m}}}let t={};for(let[c,l]of Object.entries(n.fontSize))t[c]={type:"dimension",value:w(l)};let r={};for(let[c,l]of Object.entries(I.defaultInputFont.fontWeight))r[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${l}`,weight:l}};let i={};for(let[c,l]of Object.entries(I.defaultInputFont.lineHeight))i[c]={type:"number",value:{kind:"number",raw:`${l}`,number:l}};let a={letterSpacing:I.defaultInputFont.letterSpacing,textTransform:I.defaultInputFont.textTransform,fontStyle:I.defaultInputFont.fontStyle};return{group:{family:o,size:t,weight:r,lineHeight:i},extensions:a}}s(ke,"buildFont");var bn=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function Rn(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let t=n.match(bn),r=t?t[0]:"#000000",a=(t?n.slice(0,t.index).trim():n).split(/\s+/).filter(Boolean),c=s(l=>w(a[l]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:ee(r),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}s(Rn,"parseShadow");function Se(e){let n=(0,N.createDeth)(e),o={};for(let t of Object.keys(N.levelValues))o[t]={type:"shadow",value:Rn(n(t))};return o}s(Se,"buildShadow");function P(e,n,o){let t={};for(let[r,i]of Object.entries(e)){let a=n?`${n}.${k(r)}`:k(r);if(b(i)){o.add(a);let c=q[a];t[r]=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 t[r]=P(i,a,o)}return t}s(P,"decorateGroup");function In(e){let n=new Set,o=P(e.primitives,"",n),t=P(e.groups,"",n);return K(n),{...e,primitives:o,groups:t}}s(In,"decorateMeta");function _(e,n){return P(e,"",n)}s(_,"decorateSlice");function xe(e,n,o){for(let[t,r]of Object.entries(e)){let i=n?`${n}.${k(t)}`:k(t);b(r)?o.add(i):xe(r,i,o)}}s(xe,"collectPaths");function Te(e){let n=new Set;for(let o of e)xe(o.groups,"",n);K(n)}s(Te,"assertSlicesMetaComplete");function De(){let e=ye(),o=Ie({borderWidth:e}),t={};Object.keys(o.extensions).length>0&&(t["com.apollion.border"]={radius:o.extensions});let r=new Set;return{groups:_({"border-width":e,border:o.group},r),extensions:t}}s(De,"buildBaseIR");function ve(e){let n=ke(e),o=new Set;return{groups:_({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}s(ve,"buildFontIR");function we(e,n){let o=me(n),t=new Set;return{groups:_({color:o,bg:j(e.bg,n,he),text:j(e.text,n,be),tx:fe(n),shadow:Se(n)},t),extensions:{}}}s(we,"buildColorIR");function Ce(e,n){let o=ge(n),t={space:o},r=new Set;return{groups:_({space:o,spacing:ne(e.spacing,t,Re)},r),extensions:{}}}s(Ce,"buildSpacingIR");function kn(e,n,o){let t={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},r=mn(n,o.dimension),i=Ie(r),a=ke(o.dimension),c={"com.apollion.variant":t,"com.apollion.font":a.extensions};Object.keys(i.extensions).length>0&&(c["com.apollion.border"]={radius:i.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:j(e.bg,n,he),text:j(e.text,n,be),tx:fe(n),spacing:ne(e.spacing,r,Re),border:i.group,font:a.group,shadow:Se(n)},extensions:c};return In(l)}s(kn,"buildIR");var Ve=kn;var Sn="/* Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. */";function $e(e,n,o){for(let[t,r]of Object.entries(e)){let i=[...n,k(t)];b(r)?o.push(` --apollion-${i.join("-")}: ${$(r.value)};`):$e(r,i,o)}}s($e,"emitVars");function Ge(e,n,o){for(let[t,r]of Object.entries(e)){let i=[...n,k(t)];b(r)?r.type==="color"&&o.push(` @property --apollion-${i.join("-")} { syntax: '<color>'; inherits: true; initial-value: ${$(r.value)}; }`):Ge(r,i,o)}}s(Ge,"emitProperties");function Oe(e){let{brand:n,mode:o,surface:t,dimension:r}=e.meta,i=[Sn,""];return i.push(`/* Variant: brand=${n} mode=${o} surface=${t} dimension=${r} */`,"",":root {"),$e(e.groups,[],i),i.push("}",""),i.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),Ge(e.groups,[],i),i.push("}",""),i.join(`
2
- `)}s(Oe,"renderCss");function Ee(e){return e.alpha!==void 0?{colorSpace:"oklch",components:[...e.components],alpha:e.alpha,hex:e.hex}:{colorSpace:"oklch",components:[...e.components],hex:e.hex}}s(Ee,"colorValue");function G(e){return{value:e.value,unit:e.unit}}s(G,"dimensionValue");function xn(e){let n=e.shadow,o={color:Ee(n.color),offsetX:G(n.offsetX),offsetY:G(n.offsetY),blur:G(n.blur),spread:G(n.spread)};return n.inset&&(o.inset=!0),o}s(xn,"shadowValue");function Tn(e){switch(e.kind){case"ref":return`{${ue(e.path)}}`;case"color":return Ee(e);case"dimension":return G(e);case"fontFamily":return e.family;case"fontWeight":return e.weight;case"number":return e.number;case"strokeStyle":return e.style;case"shadow":return xn(e)}}s(Tn,"projectValue");function Dn(e){let n={$value:Tn(e.value),$type:e.type};return e.description!==void 0&&(n.$description=e.description),e.deprecated!==void 0&&(n.$deprecated=e.deprecated),n}s(Dn,"projectToken");function oe(e){let n={};for(let[o,t]of Object.entries(e))n[k(o)]=b(t)?Dn(t):oe(t);return n}s(oe,"projectGroup");function B(e,n){let o={$description:n,...oe(e.groups)};return Object.keys(e.extensions).length>0&&(o.$extensions=e.extensions),`${JSON.stringify(o,null,2)}
3
- `}s(B,"renderSet");function Ae(e){return B(e,"Apollion DS \u2014 base set (axis-invariant: border). DTCG 2025.10.")}s(Ae,"renderBaseSet");function Fe(e,n,o,t){return B(e,`Apollion DS \u2014 colour set. brand=${n} mode=${o} surface=${t}. DTCG 2025.10.`)}s(Fe,"renderColorSet");function Me(e,n){return B(e,`Apollion DS \u2014 spacing set. dimension=${n}. DTCG 2025.10.`)}s(Me,"renderSpacingSet");function Le(e,n){return B(e,`Apollion DS \u2014 font set. dimension=${n}. DTCG 2025.10.`)}s(Le,"renderFontSet");function je(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]}],i={name:"apollion-tokens",description:"Apollion DS token resolver \u2014 DTCG 2025.10. Compose the base set with the colour set for the chosen brand/mode/surface and the spacing + font sets for the chosen dimension. NOTE: mode is a topology placeholder in this release (dark resolves identically to light until S6).",sets:[{name:n.base.name,source:n.base.file},...n.spacing.map(a=>({name:a.name,source:a.file})),...n.font.map(a=>({name:a.name,source:a.file})),...n.color.map(a=>({name:a.name,source:a.file}))],modifiers: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(i,null,2)}
4
- `}s(je,"renderResolver");var vn="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function Pe(e,n,o){let t=" ".repeat(n);for(let[r,i]of Object.entries(e))b(i)?o.push(`${t}${JSON.stringify(r)}: ${JSON.stringify($(i.value))},`):(o.push(`${t}${r}: {`),Pe(i,n+1,o),o.push(`${t}},`))}s(Pe,"emitGroup");function Ne(e){let{brand:n,mode:o,surface:t,dimension:r}=e.meta,i=[vn,`// Variant: brand=${n} mode=${o} surface=${t} dimension=${r}`,"","export const tokens = {"];return Pe(e.groups,1,i),i.push("} as const;","","export type Tokens = typeof tokens;",""),i.join(`
5
- `)}s(Ne,"renderTs");var wn=["light","dark"],Cn=["positive","negative"],Vn=["compact","normal","spacious"];function H(e){let n=e.modes??wn,o=e.surfaces??Cn,t=e.dimensions??Vn,r=Object.entries(e.brands).sort(([a],[c])=>a.localeCompare(c)),i=[];for(let[a,c]of r)for(let l of n)for(let m of o)for(let v of t)i.push({brand:a,colors:c,mode:l,surface:m,dimension:v});return i}s(H,"expandVariants");function _e(e){return`${e.brand}.${e.mode}.${e.surface}.${e.dimension}`}s(_e,"variantName");var Be=require("node:crypto");function re(e){return(0,Be.createHash)("sha256").update(e).digest("hex")}s(re,"sha256");function ie(e){return re(te(e))}s(ie,"hashConfig");function te(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(te).join(",")}]`:`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${te(e[t])}`).join(",")}}`}s(te,"stableStringify");function He(e){try{let{execSync:n}=require("node:child_process");return n("git rev-parse --short HEAD",{cwd:e,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim()}catch{return""}}s(He,"detectGitCommit");function We(){return{node:process.version,platform:`${process.platform}-${process.arch}`}}s(We,"buildEnv");function Je(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)}
6
- `}s(Je,"serializeManifest");var $n="json/sets",Ue="json/resolver.json";function W(e){return`${$n}/${e}.json`}s(W,"setFile");function Gn(e,n,o){return`${e}.color.${n}.${o}`}s(Gn,"colorSetName");function On(e){return`spacing.${e}`}s(On,"spacingSetName");function En(e){return`font.${e}`}s(En,"fontSetName");function J(e,n){e.includes(n)||e.push(n)}s(J,"pushUnique");function ze(e){let n=H(e),o=[],t=[],r=[],i=[],a=new Set,c=[],l=new Set,m=[],v=new Set,O=[];for(let u of n){J(o,u.brand),J(t,u.mode),J(r,u.surface),J(i,u.dimension);let g=Gn(u.brand,u.mode,u.surface);a.has(g)||(a.add(g),c.push({kind:"color",name:g,file:W(g),brand:u.brand,mode:u.mode,surface:u.surface}));let S=On(u.dimension);l.has(S)||(l.add(S),m.push({kind:"spacing",name:S,file:W(S),dimension:u.dimension}));let p=En(u.dimension);v.has(p)||(v.add(p),O.push({kind:"font",name:p,file:W(p),dimension:u.dimension}))}return{base:{kind:"base",name:"base",file:W("base")},spacing:m,font:O,color:c,modifiers:{brand:o,mode:t,surface:r,dimension:i}}}s(ze,"planSets");var ce=require("@apollion-dsi/core/themes/foundation"),nn=require("@apollion-dsi/core/themes/semantic"),on=require("@apollion-dsi/core/themes/spacing"),tn=require("@apollion-dsi/core/themes/surface");var f=require("culori");var ae=(0,f.converter)("oklch");function d(e,n,o){let t=(0,f.parse)(e),r=(0,f.parse)(n);if(!t||!r)return e;let i=(0,f.interpolate)([t,r],"oklch");return(0,f.formatHex)(i(o))??e}s(d,"mixOklch");function An(e){return e?typeof e=="string"?e:e.base:"#000"}s(An,"coerceToHex");var U=1.3,Fn=.05,Xe=.04,T=s((e,n)=>{let o=(0,f.parse)(e),t=(0,f.parse)(n);return!o||!t?1:(0,f.wcagContrast)(o,t)},"contrastRatio"),se=s(e=>{let n=ae((0,f.parse)(e));return n?n.l??0:null},"oklchLightness"),Mn=4.5;function Ye(e,n,o=Mn){let t=(0,f.parse)(n),r=ae((0,f.parse)(e));if(!t||!r)return e;let i=T("#fff",n)>=T("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=(0,f.formatHex)(r)??e,l=(0,f.parse)(c);if(l&&(0,f.wcagContrast)(l,t)>=o)return c;let m=Math.min(1,Math.max(0,(r.l??0)+i));if(m===(r.l??0))break;r={...r,l:m}}return(0,f.formatHex)(r)??e}s(Ye,"readableColor");var qe=s((e,n)=>{if(T(e,n)>=U)return!0;let o=se(e),t=se(n);return o!==null&&t!==null&&Math.abs(o-t)>=Fn},"isPerceptibleState"),Ln=s(e=>e?T("#fff",e)>T("#000",e):!1,"isDarkSurface");function Ke(e,n,o){let t=ae((0,f.parse)(e));if(!t)return null;let r={...t,l:o??t.l??0},i=n?Xe:-Xe;for(let a=0;a<25;a+=1){let c=Math.min(1,Math.max(0,(r.l??0)+i));if(c===(r.l??0))break;r={...r,l:c};let l=(0,f.formatHex)(r);if(l&&T(e,l)>=U)return l}return(0,f.formatHex)(r)??null}s(Ke,"derivePerceptibleState");function Ze(e,n,o){let t=Ke(e,n,o);if(t&&T(e,t)>=U)return t;let r=Ke(e,!n);return r&&T(e,r)>=U?r:t??r}s(Ze,"perceptibleStateFor");function R(e,n){let o=typeof e=="object"&&e!==null?e:void 0,t=An(e),r=n.deepDark,i=n.deepLight,a={base:t,dark:d(t,r,.6),action:d(t,r,.2),active:d(t,i,.6),light:d(t,i,.9),onLight:t};if((0,f.parse)(t)){let c=Ln(n.baseLight),l=qe(t,a.action);if(l||(a.action=Ze(t,c)??a.action),!qe(t,a.active)){let m=l?void 0:se(a.action)??void 0;a.active=Ze(t,c,m)??a.active}}if(a.onLight=Ye(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??Ye(c,l)}}return a}s(R,"mountSingleColor");function Qe(e){let n=e.deepLight,o=e.deepDark;return{0:n,5:d(n,o,.05),10:d(n,o,.1),20:d(n,o,.2),30:d(n,o,.3),40:d(n,o,.4),50:d(n,o,.5),60:d(n,o,.6),70:d(n,o,.7),80:d(n,o,.8),90:d(n,o,.9),100:d(n,o,1)}}s(Qe,"mountGreyscaleColors");function en(e){let n=e.deepLight,o=e.deepDark,t=typeof e.primary=="object"&&e.primary?e.primary.base:e.primary,r=s(a=>1/17*(a-1),"interpolation"),i=d(t,o,.5);return{0:d(i,n,r(18)),5:d(i,n,r(17.5)),10:d(i,n,r(17)),20:d(i,n,r(16)),30:d(i,n,r(15)),40:d(i,n,r(14)),50:d(i,n,r(13)),60:d(i,n,r(12)),70:d(i,n,r(11)),80:d(i,n,r(10)),90:d(i,n,r(9)),100:d(i,n,r(8)),110:d(i,n,r(7)),120:d(i,n,r(6)),130:d(i,n,r(5)),140:d(i,n,r(4)),150:d(i,n,r(3)),160:d(i,n,r(2)),170:i,180:d(i,o,.25)}}s(en,"mountNeutralColors");function jn(e){return{baseDark:e.baseDark,baseLight:e.baseLight,deepDark:e.deepDark,deepLight:e.deepLight,transparent:e.transparent??"transparent",neutral:en(e),grayscale:Qe(e),main:R(e.main,e),opposite:R(e.opposite,e),complementary:R(e.complementary,e),danger:R(e.danger,e),information:R(e.information,e),success:R(e.success,e),warning:R(e.warning,e),primary:R(e.primary,e),secondary:R(e.secondary,e),tertiary:R(e.tertiary,e)}}s(jn,"composeColors");function z(e,n=on.defaultInputSpacing){let o=jn(e.colors),t=M(n,e.dimension),r=(0,nn.createSemantic)({colors:o,spacing:t}),i=(0,ce.createFoundation)(r);return e.surface==="negative"&&(i=(0,ce.createFoundation)((0,tn.invertForSurface)({semantic:r,colors:o},"negative").semantic)),{foundation:i,colors:o}}s(z,"buildVariantThemes");async function Pn(e){let{config:n,outDir:o,cwd:t=process.cwd(),verbose:r=!1}=e,i=H(n),a=n.output??{};if(i.length===0)throw new Error("apollion-tokens build: no variants (config.brands is empty)");let c=await(0,y.mkdtemp)((0,D.join)((0,rn.tmpdir)(),"apollion-tokens-"));try{let l=[],m=s(async(u,g)=>{await _n(c,u,g),l.push({path:u,sha256:re(g)}),r&&console.log(` \u2713 ${u}`)},"emit");if(a.json){let u=ze(n),g=[],S=De();g.push(S),await m(u.base.file,Ae(S));for(let p of u.spacing){let x=i.find(A=>A.dimension===p.dimension),{foundation:X}=z(x),E=Ce(X,p.dimension);g.push(E),await m(p.file,Me(E,p.dimension))}for(let p of u.font){let x=ve(p.dimension);g.push(x),await m(p.file,Le(x,p.dimension))}for(let p of u.color){let x=i.find(Y=>Y.brand===p.brand&&Y.mode===p.mode&&Y.surface===p.surface),{foundation:X,colors:E}=z(x),A=we(X,E);g.push(A),await m(p.file,Fe(A,p.brand,p.mode,p.surface))}Te(g),await m(Ue,je(n,u))}if(a.css||a.ts)for(let u of i){let{foundation:g,colors:S}=z(u),p=Ve(g,S,u),x=_e(u);a.css&&await m(`css/${x}.css`,Oe(p)),a.ts&&await m(`ts/${x}.d.ts`,Ne(p))}let v={configHash:ie(n),files:l,gitCommit:He(t),buildEnv:We()},O=Je(v);return await(0,y.writeFile)((0,D.join)(c,"manifest.json"),O),await(0,y.rm)(o,{recursive:!0,force:!0}),await(0,y.mkdir)((0,D.dirname)(o),{recursive:!0}),await(0,y.rename)(c,o),r&&console.log(`\u2713 ${l.length} files \u2192 ${o}`),{manifest:v,outDir:o}}catch(l){throw await(0,y.rm)(c,{recursive:!0,force:!0}).catch(()=>{}),l}}s(Pn,"build");async function Nn(e){let{config:n,outDir:o}=e,t;try{t=JSON.parse(await(0,y.readFile)((0,D.join)(o,"manifest.json"),"utf8"))}catch{return!1}return t.configHash===ie(n)}s(Nn,"check");async function _n(e,n,o){let t=(0,D.join)(e,n);await(0,y.mkdir)((0,D.dirname)(t),{recursive:!0}),await(0,y.writeFile)(t,o)}s(_n,"writeAt");0&&(module.exports={build,check});
1
+ "use strict";var P=Object.defineProperty;var kn=Object.getOwnPropertyDescriptor;var Sn=Object.getOwnPropertyNames;var xn=Object.prototype.hasOwnProperty;var s=(e,n)=>P(e,"name",{value:n,configurable:!0});var wn=(e,n)=>{for(var o in n)P(e,o,{get:n[o],enumerable:!0})},Tn=(e,n,o,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of Sn(n))!xn.call(e,t)&&t!==o&&P(e,t,{get:()=>n[t],enumerable:!(r=kn(n,t))||r.enumerable});return e};var vn=e=>Tn(P({},"__esModule",{value:!0}),e);var lo={};wn(lo,{build:()=>so,check:()=>ao});module.exports=vn(lo);var b=require("node:fs/promises"),In=require("node:os"),v=require("node:path");var U=require("culori");var L=require("@apollion-dsi/core/themes/border"),Re=require("@apollion-dsi/core/themes/colors"),J=require("@apollion-dsi/core/themes/depth"),T=require("@apollion-dsi/core/themes/font"),ie=require("@apollion-dsi/core/themes/spacing"),M=require("culori");var be=require("@apollion-dsi/core/themes/dimension");function _({multiplier:e=.25,alias:n},o){let r=o!==void 0?be.DIMENSION_MULTIPLIERS[o]:e;return(...t)=>t.map(i=>{let a=typeof i=="string"?n[i]:i;return`${r*a}rem`}).join(" ")}s(_,"createSpacing");var re={"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)."},"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 te(e){let n=Object.keys(re).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(te,"assertTokenMetaResolves");var Dn=(0,M.converter)("oklch");function h(e){return typeof e.type=="string"&&"value"in e}s(h,"isToken");function S(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}s(S,"kebab");function Ie(e){return e.split(".").map(S).join(".")}s(Ie,"kebabPath");function E(e){return e.kind==="ref"?e.resolved.raw:e.raw}s(E,"rawValue");function B(e,n){return Number(e.toFixed(n))||0}s(B,"round");function ae(e){let n=Dn((0,M.parse)(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[B(n.l,4),B(n.c,4),B(n.h??0,2)],r=(0,M.formatHex)(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:B(n.alpha,4),hex:r}:{kind:"color",raw:e,components:o,hex:r}}s(ae,"toColorValue");var ke=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function O(e){let n=ke.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(O,"toDimensionValue");function k(e){return{type:"color",value:ae(e)}}s(k,"colorToken");function se(e){let n={};for(let[o,r]of Object.entries(e))n[o]=k(r);return n}s(se,"recordColorGroup");function Se(e){let n=(0,Re.createReadableTextLayer)(e),o={};for(let[r,t]of Object.entries(n.palettes))o[r]=k(t);return o.neutral=se(n.neutral),o}s(Se,"buildReadableTextGroup");var $n=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function xe(e){let n={};for(let o of $n){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=se(e.grayscale),n.neutral=se(e.neutral),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(xe,"buildColorPrimitives");function we(e){let n=_(ie.defaultInputSpacing,e),o={};for(let r of Object.keys(ie.defaultInputSpacing.alias))o[r]={type:"dimension",value:O(n(r))};return o}s(we,"buildSpacePrimitives");function Te(){let e={};for(let[n,o]of Object.entries(L.defaultInputBorder.borderWidth))e[n]={type:"dimension",value:O(o)};return e}s(Te,"buildBorderWidthPrimitives");function Cn(e,n){return{color:xe(e),space:we(n),borderWidth:Te()}}s(Cn,"buildPrimitives");var ve={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"},De={onPrimary:"color.baseLight",onSecondary:"color.baseLight",onTertiary:"color.baseDark",onSuccess:"color.baseLight",onDanger:"color.baseLight",onWarning:"color.baseDark",onInfo:"color.baseLight"};function Vn(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(Vn,"lookupPrimitive");function H(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=o[t],c=a?Vn(n,a):void 0;r[t]=a&&c===i?{type:"color",value:{kind:"ref",path:a,resolved:ae(i)}}:k(i)}return r}s(H,"colorRefGroup");var $e={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},On={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function En(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(En,"lookupDimensionPrimitive");function ce(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=o[t],c=a?En(n,a):void 0;r[t]=a&&c===i?{type:"dimension",value:{kind:"ref",path:a,resolved:O(i)}}:{type:"dimension",value:O(i)}}return r}s(ce,"dimensionRefGroup");function Ce(e){let n={},o={};for(let[i,a]of Object.entries(L.defaultInputBorder.borderRadius))ke.test(a)?n[i]={type:"dimension",value:O(a)}:o[i]=a;let r=ce(L.defaultInputBorder.borderWidth,e,On),t={};for(let[i,a]of Object.entries(L.defaultInputBorder.borderStyle))t[i]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:r,style:t},extensions:o}}s(Ce,"buildBorder");function Ve(e){let n=(0,T.createFont)(T.defaultInputFont,e),o={};for(let[c,l]of Object.entries(T.defaultInputFont.fontFamily)){let m=l.replace(/;\s*$/,"").trim();o[c]={type:"fontFamily",value:{kind:"fontFamily",raw:m,family:m}}}let r={};for(let[c,l]of Object.entries(n.fontSize))r[c]={type:"dimension",value:O(l)};let t={};for(let[c,l]of Object.entries(T.defaultInputFont.fontWeight))t[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${l}`,weight:l}};let i={};for(let[c,l]of Object.entries(T.defaultInputFont.lineHeight))i[c]={type:"number",value:{kind:"number",raw:`${l}`,number:l}};let a={letterSpacing:T.defaultInputFont.letterSpacing,textTransform:T.defaultInputFont.textTransform,fontStyle:T.defaultInputFont.fontStyle};return{group:{family:o,size:r,weight:t,lineHeight:i},extensions:a}}s(Ve,"buildFont");var Gn=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function Mn(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let r=n.match(Gn),t=r?r[0]:"#000000",a=(r?n.slice(0,r.index).trim():n).split(/\s+/).filter(Boolean),c=s(l=>O(a[l]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:ae(t),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}s(Mn,"parseShadow");function Oe(e){let n=(0,J.createDeth)(e),o={};for(let r of Object.keys(J.levelValues))o[r]={type:"shadow",value:Mn(n(r))};return o}s(Oe,"buildShadow");function W(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=n?`${n}.${S(t)}`:S(t);if(h(i)){o.add(a);let c=re[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]=W(i,a,o)}return r}s(W,"decorateGroup");function jn(e){let n=new Set,o=W(e.primitives,"",n),r=W(e.groups,"",n);return te(n),{...e,primitives:o,groups:r}}s(jn,"decorateMeta");function z(e,n){return W(e,"",n)}s(z,"decorateSlice");function Ee(e,n,o){for(let[r,t]of Object.entries(e)){let i=n?`${n}.${S(r)}`:S(r);h(t)?o.add(i):Ee(t,i,o)}}s(Ee,"collectPaths");function Ge(e){let n=new Set;for(let o of e)Ee(o.groups,"",n);te(n)}s(Ge,"assertSlicesMetaComplete");function Me(){let e=Te(),o=Ce({borderWidth:e}),r={};Object.keys(o.extensions).length>0&&(r["com.apollion.border"]={radius:o.extensions});let t=new Set;return{groups:z({"border-width":e,border:o.group},t),extensions:r}}s(Me,"buildBaseIR");function je(e){let n=Ve(e),o=new Set;return{groups:z({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}s(je,"buildFontIR");function Ae(e,n){let o=xe(n),r=new Set;return{groups:z({color:o,bg:H(e.bg,n,ve),text:H(e.text,n,De),tx:Se(n),shadow:Oe(n)},r),extensions:{}}}s(Ae,"buildColorIR");function Le(e,n){let o=we(n),r={space:o},t=new Set;return{groups:z({space:o,spacing:ce(e.spacing,r,$e)},t),extensions:{}}}s(Le,"buildSpacingIR");function An(e,n,o){let r={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},t=Cn(n,o.dimension),i=Ce(t),a=Ve(o.dimension),c={"com.apollion.variant":r,"com.apollion.font":a.extensions};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:H(e.bg,n,ve),text:H(e.text,n,De),tx:Se(n),spacing:ce(e.spacing,t,$e),border:i.group,font:a.group,shadow:Oe(n)},extensions:c};return jn(l)}s(An,"buildIR");var q=An;var Ln=(0,U.converter)("rgb"),Ne="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function le(e){if(e.value.kind==="color")return e.value;if(e.value.kind==="ref"&&e.value.resolved.kind==="color")return e.value.resolved}s(le,"colorPayload");function de(e){return e.alpha===void 0}s(de,"isOpaqueColor");function Fe(e){let n=Ln((0,U.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(Fe,"rgbTriplet");function X(e,n=[]){let o=new Map;for(let[r,t]of Object.entries(e)){let i=[...n,S(r)];if(h(t))o.set(i.join("-"),t);else for(let[a,c]of X(t,i))o.set(a,c)}return o}s(X,"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 Pe(e){let n=[];for(let o of["bg","text","tx"])for(let[r,t]of X(y(e.groups,o),[o])){let i=le(t);i&&n.push({key:r,cssVar:`--apollion-${r}`,opaque:de(i)})}return n}s(Pe,"colorEntries");function $(e,n){return[...X(e)].map(([o])=>[o,`var(--apollion-${[...n,o].join("-")})`])}s($,"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(" },")}}s(C,"pushScale");function _e(e){let n=[Ne,"// Tailwind preset over the Apollion foundation tokens \u2014 requires dist/css/ vars in scope.","","const preset = {"," theme: {"," extend: {"],o=Pe(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(" },"),C(n,"spacing",$(y(e.groups,"spacing"),["spacing"])),C(n,"borderRadius",$(y(e.groups,"border","radius"),["border","radius"])),C(n,"borderWidth",$(y(e.groups,"border","width"),["border","width"])),C(n,"fontFamily",$(y(e.groups,"font","family"),["font","family"])),C(n,"fontSize",$(y(e.groups,"font","size"),["font","size"])),C(n,"fontWeight",$(y(e.groups,"font","weight"),["font","weight"])),C(n,"lineHeight",$(y(e.groups,"font","lineHeight"),["font","line-height"])),C(n,"boxShadow",$(y(e.groups,"shadow"),["shadow"])),n.push(" },"," },","};","","export default preset;",""),n.join(`
2
+ `)}s(_e,"renderTailwindPreset");function Be(e){let n=s(t=>[...X(t).keys()],"keys"),o=s(t=>`[${t.map(i=>JSON.stringify(i)).join(", ")}]`,"list");return[Ne,"// tailwind-merge extension for the generated preset \u2014 pass to extendTailwindMerge().","","export const twMergeExtension = {"," extend: {"," theme: {",` colors: ${o(Pe(e).map(t=>t.key))},`,` spacing: ${o(n(y(e.groups,"spacing")))},`,` borderRadius: ${o(n(y(e.groups,"border","radius")))},`,` borderWidth: ${o(n(y(e.groups,"border","width")))},`," },"," classGroups: {",` 'font-family': [{ font: ${o(n(y(e.groups,"font","family")))} }],`,` 'font-size': [{ text: ${o(n(y(e.groups,"font","size")))} }],`,` 'font-weight': [{ font: ${o(n(y(e.groups,"font","weight")))} }],`,` leading: [{ leading: ${o(n(y(e.groups,"font","lineHeight")))} }],`,` shadow: [{ shadow: ${o(n(y(e.groups,"shadow")))} }],`," },"," },","};",""].join(`
3
+ `)}s(Be,"renderTwMergeExtension");var Nn="/* Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. */";function He(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,S(r)];h(t)?o.push(` --apollion-${i.join("-")}: ${E(t.value)};`):He(t,i,o)}}s(He,"emitVars");function We(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,S(r)];if(!h(t)){We(t,i,o);continue}let a=le(t);a&&de(a)&&o.push(` --apollion-${i.join("-")}-rgb: ${Fe(a)};`)}}s(We,"emitRgbVars");function Je(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,S(r)];h(t)?t.type==="color"&&o.push(` @property --apollion-${i.join("-")} { syntax: '<color>'; inherits: true; initial-value: ${E(t.value)}; }`):Je(t,i,o)}}s(Je,"emitProperties");function ze(e,n={}){let{brand:o,mode:r,surface:t,dimension:i}=e.meta,a=[Nn,""];return a.push(`/* Variant: brand=${o} mode=${r} surface=${t} dimension=${i} */`,"",":root {"),He(e.groups,[],a),n.rgbCompanions&&(a.push(""," /* -rgb channel triplets \u2014 Tailwind <alpha-value> companions (opaque colour tokens only). */"),We(e.groups,[],a)),a.push("}",""),a.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),Je(e.groups,[],a),a.push("}",""),a.join(`
4
+ `)}s(ze,"renderCss");var Fn="<!-- Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. -->";function ue(e,n,o){for(let[r,t]of Object.entries(e)){let i=n?`${n}.${r}`:r;h(t)?o.push([i,E(t.value)]):ue(t,i,o)}}s(ue,"flatten");function Pn(e){return typeof e=="number"?String(e):`'${String(e).replace(/'/g,"''")}'`}s(Pn,"yamlEscape");function _n(e){let{mode:n,surface:o,dimension:r}=e.meta;return`${n}.${o}.${r}`}s(_n,"variantKey");function qe(e,n){if(n.length===0)throw new Error(`renderDesignMd: no variants for brand "${e}"`);let o=["---",`brand: '${e}'`,"generator: apollion-tokens","variants:"];for(let t of n){let i=[];ue(t.groups,"",i),o.push(` ${_n(t)}:`);for(let[a,c]of i)o.push(` ${a}: ${Pn(c)}`)}o.push("---");let r=["",Fn,"",`# Design.md \u2014 ${e}`,"","Resolved design-token values for this brand, one section per variant.","Consumption rules (which token to reach for, layer boundaries) live in the","package `llms.txt`; this file carries the values those rules reference.","Regenerate with `apollion-tokens build` \u2014 never edit.",""];for(let t of n){let{mode:i,surface:a,dimension:c}=t.meta;r.push(`## Variant \`${i} \xB7 ${a} \xB7 ${c}\``,"");let l=[];ue(t.groups,"",l);let m=new Map;for(let[I,D]of l){let d=I.split(".")[0]??I,f=m.get(d)??[];f.push([I,D]),m.set(d,f)}for(let[I,D]of m){r.push(`### ${I}`,"","| Token | Value |","| --- | --- |");for(let[d,f]of D)r.push(`| \`${d}\` | \`${f}\` |`);r.push("")}}return`${o.join(`
5
+ `)}
6
+ ${r.join(`
7
+ `)}`}s(qe,"renderDesignMd");function Ue(e){return e.alpha!==void 0?{colorSpace:"oklch",components:[...e.components],alpha:e.alpha,hex:e.hex}:{colorSpace:"oklch",components:[...e.components],hex:e.hex}}s(Ue,"colorValue");function N(e){return{value:e.value,unit:e.unit}}s(N,"dimensionValue");function Bn(e){let n=e.shadow,o={color:Ue(n.color),offsetX:N(n.offsetX),offsetY:N(n.offsetY),blur:N(n.blur),spread:N(n.spread)};return n.inset&&(o.inset=!0),o}s(Bn,"shadowValue");function Hn(e){switch(e.kind){case"ref":return`{${Ie(e.path)}}`;case"color":return Ue(e);case"dimension":return N(e);case"fontFamily":return e.family;case"fontWeight":return e.weight;case"number":return e.number;case"strokeStyle":return e.style;case"shadow":return Bn(e)}}s(Hn,"projectValue");function Wn(e){let n={$value:Hn(e.value),$type:e.type};return e.description!==void 0&&(n.$description=e.description),e.deprecated!==void 0&&(n.$deprecated=e.deprecated),n}s(Wn,"projectToken");function pe(e){let n={};for(let[o,r]of Object.entries(e))n[S(o)]=h(r)?Wn(r):pe(r);return n}s(pe,"projectGroup");function Y(e,n){let o={$description:n,...pe(e.groups)};return Object.keys(e.extensions).length>0&&(o.$extensions=e.extensions),`${JSON.stringify(o,null,2)}
8
+ `}s(Y,"renderSet");function Xe(e){return Y(e,"Apollion DS \u2014 base set (axis-invariant: border). DTCG 2025.10.")}s(Xe,"renderBaseSet");function Ye(e,n,o,r){return Y(e,`Apollion DS \u2014 colour set. brand=${n} mode=${o} surface=${r}. DTCG 2025.10.`)}s(Ye,"renderColorSet");function Ke(e,n){return Y(e,`Apollion DS \u2014 spacing set. dimension=${n}. DTCG 2025.10.`)}s(Ke,"renderSpacingSet");function Ze(e,n){return Y(e,`Apollion DS \u2014 font set. dimension=${n}. DTCG 2025.10.`)}s(Ze,"renderFontSet");function Qe(e,n){let{modifiers:o}=n,r=[{name:"brand",values:[...o.brand],default:o.brand[0]},{name:"mode",values:[...o.mode],default:o.mode[0]},{name:"surface",values:[...o.surface],default:o.surface[0]},{name:"dimension",values:[...o.dimension],default:o.dimension[0]}],i={name:"apollion-tokens",description:"Apollion DS token resolver \u2014 DTCG 2025.10. Compose the base set with the colour set for the chosen brand/mode/surface and the spacing + font sets for the chosen dimension. NOTE: mode is a topology placeholder in this release (dark resolves identically to light until S6).",sets:[{name:n.base.name,source:n.base.file},...n.spacing.map(a=>({name:a.name,source:a.file})),...n.font.map(a=>({name:a.name,source:a.file})),...n.color.map(a=>({name:a.name,source:a.file}))],modifiers:r,$extensions:{"com.apollion.resolver":{composition:{always:[n.base.name],byModifier:{color:"${brand}.color.${mode}.${surface}",spacing:"spacing.${dimension}",font:"font.${dimension}"}},modeIsPlaceholder:!0}}};return`${JSON.stringify(i,null,2)}
9
+ `}s(Qe,"renderResolver");var Jn="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function zn(e,n,o){let r=[];if(e.description!==void 0&&r.push(e.description),e.deprecated===!0?r.push("@deprecated"):typeof e.deprecated=="string"&&r.push(`@deprecated ${e.deprecated}`),r.length!==0){o.push(`${n}/**`);for(let t of r)o.push(`${n} * ${t.replace(/\*\//g,"*\\/")}`);o.push(`${n} */`)}}s(zn,"emitDoc");function en(e,n,o){let r=" ".repeat(n);for(let[t,i]of Object.entries(e))h(i)?(zn(i,r,o),o.push(`${r}${JSON.stringify(t)}: ${JSON.stringify(E(i.value))},`)):(o.push(`${r}${t}: {`),en(i,n+1,o),o.push(`${r}},`))}s(en,"emitGroup");function nn(e){let{brand:n,mode:o,surface:r,dimension:t}=e.meta,i=[Jn,`// Variant: brand=${n} mode=${o} surface=${r} dimension=${t}`,"","export const tokens = {"];return en(e.groups,1,i),i.push("} as const;","","export type Tokens = typeof tokens;",""),i.join(`
10
+ `)}s(nn,"renderTs");var qn=["light","dark"],Un=["positive","negative"],Xn=["compact","normal","spacious"];function K(e){let n=e.modes??qn,o=e.surfaces??Un,r=e.dimensions??Xn,t=Object.entries(e.brands).sort(([a],[c])=>a.localeCompare(c)),i=[];for(let[a,c]of t)for(let l of n)for(let m of o)for(let I of r)i.push({brand:a,colors:c,mode:l,surface:m,dimension:I});return i}s(K,"expandVariants");function on(e){return`${e.brand}.${e.mode}.${e.surface}.${e.dimension}`}s(on,"variantName");var rn=require("node:crypto");function Z(e){return(0,rn.createHash)("sha256").update(e).digest("hex")}s(Z,"sha256");function me(e){return Z(fe(e))}s(me,"hashConfig");function fe(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(fe).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${fe(e[r])}`).join(",")}}`}s(fe,"stableStringify");function tn(e){try{let{execSync:n}=require("node:child_process");return n("git rev-parse --short HEAD",{cwd:e,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim()}catch{return""}}s(tn,"detectGitCommit");function sn(){return{node:process.version,platform:`${process.platform}-${process.arch}`}}s(sn,"buildEnv");function an(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)}
11
+ `}s(an,"serializeManifest");var Yn="json/sets",cn="json/resolver.json";function Q(e){return`${Yn}/${e}.json`}s(Q,"setFile");function Kn(e,n,o){return`${e}.color.${n}.${o}`}s(Kn,"colorSetName");function Zn(e){return`spacing.${e}`}s(Zn,"spacingSetName");function Qn(e){return`font.${e}`}s(Qn,"fontSetName");function ee(e,n){e.includes(n)||e.push(n)}s(ee,"pushUnique");function ln(e){let n=K(e),o=[],r=[],t=[],i=[],a=new Set,c=[],l=new Set,m=[],I=new Set,D=[];for(let d of n){ee(o,d.brand),ee(r,d.mode),ee(t,d.surface),ee(i,d.dimension);let f=Kn(d.brand,d.mode,d.surface);a.has(f)||(a.add(f),c.push({kind:"color",name:f,file:Q(f),brand:d.brand,mode:d.mode,surface:d.surface}));let x=Zn(d.dimension);l.has(x)||(l.add(x),m.push({kind:"spacing",name:x,file:Q(x),dimension:d.dimension}));let p=Qn(d.dimension);I.has(p)||(I.add(p),D.push({kind:"font",name:p,file:Q(p),dimension:d.dimension}))}return{base:{kind:"base",name:"base",file:Q("base")},spacing:m,font:D,color:c,modifiers:{brand:o,mode:r,surface:t,dimension:i}}}s(ln,"planSets");var ye=require("@apollion-dsi/core/themes/foundation"),yn=require("@apollion-dsi/core/themes/semantic"),bn=require("@apollion-dsi/core/themes/spacing"),Rn=require("@apollion-dsi/core/themes/surface");var g=require("culori");var he=(0,g.converter)("oklch");function u(e,n,o){let r=(0,g.parse)(e),t=(0,g.parse)(n);if(!r||!t)return e;let i=(0,g.interpolate)([r,t],"oklch");return(0,g.formatHex)(i(o))??e}s(u,"mixOklch");function eo(e){return e?typeof e=="string"?e:e.base:"#000"}s(eo,"coerceToHex");var ne=1.3,no=.05,dn=.04,V=s((e,n)=>{let o=(0,g.parse)(e),r=(0,g.parse)(n);return!o||!r?1:(0,g.wcagContrast)(o,r)},"contrastRatio"),ge=s(e=>{let n=he((0,g.parse)(e));return n?n.l??0:null},"oklchLightness"),oo=4.5;function un(e,n,o=oo){let r=(0,g.parse)(n),t=he((0,g.parse)(e));if(!r||!t)return e;let i=V("#fff",n)>=V("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=(0,g.formatHex)(t)??e,l=(0,g.parse)(c);if(l&&(0,g.wcagContrast)(l,r)>=o)return c;let m=Math.min(1,Math.max(0,(t.l??0)+i));if(m===(t.l??0))break;t={...t,l:m}}return(0,g.formatHex)(t)??e}s(un,"readableColor");var pn=s((e,n)=>{if(V(e,n)>=ne)return!0;let o=ge(e),r=ge(n);return o!==null&&r!==null&&Math.abs(o-r)>=no},"isPerceptibleState"),ro=s(e=>e?V("#fff",e)>V("#000",e):!1,"isDarkSurface");function fn(e,n,o){let r=he((0,g.parse)(e));if(!r)return null;let t={...r,l:o??r.l??0},i=n?dn:-dn;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,g.formatHex)(t);if(l&&V(e,l)>=ne)return l}return(0,g.formatHex)(t)??null}s(fn,"derivePerceptibleState");function mn(e,n,o){let r=fn(e,n,o);if(r&&V(e,r)>=ne)return r;let t=fn(e,!n);return t&&V(e,t)>=ne?t:r??t}s(mn,"perceptibleStateFor");function w(e,n){let o=typeof e=="object"&&e!==null?e:void 0,r=eo(e),t=n.deepDark,i=n.deepLight,a={base:r,dark:u(r,t,.6),action:u(r,t,.2),active:u(r,i,.6),light:u(r,i,.9),onLight:r};if((0,g.parse)(r)){let c=ro(n.baseLight),l=pn(r,a.action);if(l||(a.action=mn(r,c)??a.action),!pn(r,a.active)){let m=l?void 0:ge(a.action)??void 0;a.active=mn(r,c,m)??a.active}}if(a.onLight=un(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??un(c,l)}}return a}s(w,"mountSingleColor");function gn(e){let n=e.deepLight,o=e.deepDark;return{0:n,5:u(n,o,.05),10:u(n,o,.1),20:u(n,o,.2),30:u(n,o,.3),40:u(n,o,.4),50:u(n,o,.5),60:u(n,o,.6),70:u(n,o,.7),80:u(n,o,.8),90:u(n,o,.9),100:u(n,o,1)}}s(gn,"mountGreyscaleColors");function hn(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=u(r,o,.5);return{0:u(i,n,t(18)),5:u(i,n,t(17.5)),10:u(i,n,t(17)),20:u(i,n,t(16)),30:u(i,n,t(15)),40:u(i,n,t(14)),50:u(i,n,t(13)),60:u(i,n,t(12)),70:u(i,n,t(11)),80:u(i,n,t(10)),90:u(i,n,t(9)),100:u(i,n,t(8)),110:u(i,n,t(7)),120:u(i,n,t(6)),130:u(i,n,t(5)),140:u(i,n,t(4)),150:u(i,n,t(3)),160:u(i,n,t(2)),170:i,180:u(i,o,.25)}}s(hn,"mountNeutralColors");function to(e){return{...e,baseDark:e.baseLight,baseLight:e.baseDark,deepDark:e.deepLight,deepLight:e.deepDark}}s(to,"toCanonicalDarkInput");function io(e){return{baseDark:e.baseDark,baseLight:e.baseLight,deepDark:e.deepDark,deepLight:e.deepLight,transparent:e.transparent??"transparent",neutral:hn(e),grayscale:gn(e),main:w(e.main,e),opposite:w(e.opposite,e),complementary:w(e.complementary,e),danger:w(e.danger,e),information:w(e.information,e),success:w(e.success,e),warning:w(e.warning,e),primary:w(e.primary,e),secondary:w(e.secondary,e),tertiary:w(e.tertiary,e)}}s(io,"composeColors");function j(e,n=bn.defaultInputSpacing){let o=e.mode==="dark"?to(e.colors):e.colors,r=io(o),t=_(n,e.dimension),i=(0,yn.createSemantic)({colors:r,spacing:t}),a=(0,ye.createFoundation)(i);return e.surface==="negative"&&(a=(0,ye.createFoundation)((0,Rn.invertForSurface)({semantic:i,colors:r},"negative").semantic)),{foundation:a,colors:r}}s(j,"buildVariantThemes");async function so(e){let{config:n,outDir:o,cwd:r=process.cwd(),verbose:t=!1}=e,i=K(n),a=n.output??{};if(i.length===0)throw new Error("apollion-tokens build: no variants (config.brands is empty)");let c=await(0,b.mkdtemp)((0,v.join)((0,In.tmpdir)(),"apollion-tokens-"));try{let l=[],m=s(async(d,f)=>{await co(c,d,f),l.push({path:d,sha256:Z(f)}),t&&console.log(` \u2713 ${d}`)},"emit");if(a.json){let d=ln(n),f=[],x=Me();f.push(x),await m(d.base.file,Xe(x));for(let p of d.spacing){let R=i.find(F=>F.dimension===p.dimension),{foundation:A}=j(R),G=Le(A,p.dimension);f.push(G),await m(p.file,Ke(G,p.dimension))}for(let p of d.font){let R=je(p.dimension);f.push(R),await m(p.file,Ze(R,p.dimension))}for(let p of d.color){let R=i.find(oe=>oe.brand===p.brand&&oe.mode===p.mode&&oe.surface===p.surface),{foundation:A,colors:G}=j(R),F=Ae(A,G);f.push(F),await m(p.file,Ye(F,p.brand,p.mode,p.surface))}Ge(f),await m(cn,Qe(n,d))}if(a.css||a.ts)for(let d of i){let{foundation:f,colors:x}=j(d),p=q(f,x,d),R=on(d);a.css&&await m(`css/${R}.css`,ze(p,{rgbCompanions:a.tailwind})),a.ts&&await m(`ts/${R}.d.ts`,nn(p))}if(a.tailwind){let d=i[0],{foundation:f,colors:x}=j(d),p=q(f,x,d);await m("tailwind/preset.mjs",_e(p)),await m("tailwind/tw-merge.mjs",Be(p))}if(a.designMd){let d=[...new Set(i.map(f=>f.brand))];for(let f of d){let p=i.filter(R=>R.brand===f).map(R=>{let{foundation:A,colors:G}=j(R);return q(A,G,R)});await m(`design/${f}.design.md`,qe(f,p))}}let I={configHash:me(n),files:l,gitCommit:tn(r),buildEnv:sn()},D=an(I);return await(0,b.writeFile)((0,v.join)(c,"manifest.json"),D),await(0,b.rm)(o,{recursive:!0,force:!0}),await(0,b.mkdir)((0,v.dirname)(o),{recursive:!0}),await(0,b.rename)(c,o),t&&console.log(`\u2713 ${l.length} files \u2192 ${o}`),{manifest:I,outDir:o}}catch(l){throw await(0,b.rm)(c,{recursive:!0,force:!0}).catch(()=>{}),l}}s(so,"build");async function ao(e){let{config:n,outDir:o}=e,r;try{r=JSON.parse(await(0,b.readFile)((0,v.join)(o,"manifest.json"),"utf8"))}catch{return!1}if(r.configHash!==me(n))return!1;for(let t of r.files){let i;try{i=await(0,b.readFile)((0,v.join)(o,t.path))}catch{return!1}if(Z(i)!==t.sha256)return!1}return!0}s(ao,"check");async function co(e,n,o){let r=(0,v.join)(e,n);await(0,b.mkdir)((0,v.dirname)(r),{recursive:!0}),await(0,b.writeFile)(r,o)}s(co,"writeAt");0&&(module.exports={build,check});
package/lib/build.esm.js CHANGED
@@ -1,6 +1,11 @@
1
- var en=Object.defineProperty;var s=(e,n)=>en(e,"name",{value:n,configurable:!0}),nn=(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 Ke,mkdtemp as Wn,readFile as Jn,rename as Un,rm as qe,writeFile as Ze}from"node:fs/promises";import{tmpdir as zn}from"node:os";import{dirname as Qe,join as W}from"node:path";import{defaultInputBorder as A}from"@apollion-dsi/core/themes/border";import{createReadableTextLayer as tn}from"@apollion-dsi/core/themes/colors";import{createDeth as rn,levelValues as sn}from"@apollion-dsi/core/themes/depth";import{createFont as an,defaultInputFont as T}from"@apollion-dsi/core/themes/font";import{defaultInputSpacing as re}from"@apollion-dsi/core/themes/spacing";import{converter as cn,formatHex as ln,parse as dn}from"culori";import{DIMENSION_MULTIPLIERS as on}from"@apollion-dsi/core/themes/dimension";function O({multiplier:e=.25,alias:n},o){let t=o!==void 0?on[o]:e;return(...r)=>r.map(i=>{let a=typeof i=="string"?n[i]:i;return`${t*a}rem`}).join(" ")}s(O,"createSpacing");var z={"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)."},"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 X(e){let n=Object.keys(z).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(X,"assertTokenMetaResolves");var un=cn("oklch");function y(e){return typeof e.type=="string"&&"value"in e}s(y,"isToken");function b(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}s(b,"kebab");function ie(e){return e.split(".").map(b).join(".")}s(ie,"kebabPath");function v(e){return e.kind==="ref"?e.resolved.raw:e.raw}s(v,"rawValue");function E(e,n){return Number(e.toFixed(n))||0}s(E,"round");function q(e){let n=un(dn(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[E(n.l,4),E(n.c,4),E(n.h??0,2)],t=ln(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:E(n.alpha,4),hex:t}:{kind:"color",raw:e,components:o,hex:t}}s(q,"toColorValue");var se=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function D(e){let n=se.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(D,"toDimensionValue");function g(e){return{type:"color",value:q(e)}}s(g,"colorToken");function Y(e){let n={};for(let[o,t]of Object.entries(e))n[o]=g(t);return n}s(Y,"recordColorGroup");function ae(e){let n=tn(e),o={};for(let[t,r]of Object.entries(n.palettes))o[t]=g(r);return o.neutral=Y(n.neutral),o}s(ae,"buildReadableTextGroup");var pn=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function ce(e){let n={};for(let o of pn){let t=e[o];n[o]={base:g(t.base),dark:g(t.dark),action:g(t.action),active:g(t.active),light:g(t.light),onLight:g(t.onLight)}}return n.grayscale=Y(e.grayscale),n.neutral=Y(e.neutral),n.baseDark=g(e.baseDark??"#000000"),n.baseLight=g(e.baseLight??"#ffffff"),n.deepDark=g(e.deepDark??"#000000"),n.deepLight=g(e.deepLight??"#ffffff"),n}s(ce,"buildColorPrimitives");function le(e){let n=O(re,e),o={};for(let t of Object.keys(re.alias))o[t]={type:"dimension",value:D(n(t))};return o}s(le,"buildSpacePrimitives");function de(){let e={};for(let[n,o]of Object.entries(A.borderWidth))e[n]={type:"dimension",value:D(o)};return e}s(de,"buildBorderWidthPrimitives");function fn(e,n){return{color:ce(e),space:le(n),borderWidth:de()}}s(fn,"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"},pe={onPrimary:"color.baseLight",onSecondary:"color.baseLight",onTertiary:"color.baseDark",onSuccess:"color.baseLight",onDanger:"color.baseLight",onWarning:"color.baseDark",onInfo:"color.baseLight"};function mn(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}s(mn,"lookupPrimitive");function F(e,n,o){let t={};for(let[r,i]of Object.entries(e)){let a=o[r],c=a?mn(n,a):void 0;t[r]=a&&c===i?{type:"color",value:{kind:"ref",path:a,resolved:q(i)}}:g(i)}return t}s(F,"colorRefGroup");var fe={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},gn={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function yn(e,n){let o=n.split("."),t=o[0]==="border-width"?"borderWidth":o[0],r=e[t];for(let i of o.slice(1))if(r&&!y(r)&&i in r)r=r[i];else return;return r&&y(r)&&r.value.kind==="dimension"?r.value.raw:void 0}s(yn,"lookupDimensionPrimitive");function K(e,n,o){let t={};for(let[r,i]of Object.entries(e)){let a=o[r],c=a?yn(n,a):void 0;t[r]=a&&c===i?{type:"dimension",value:{kind:"ref",path:a,resolved:D(i)}}:{type:"dimension",value:D(i)}}return t}s(K,"dimensionRefGroup");function me(e){let n={},o={};for(let[i,a]of Object.entries(A.borderRadius))se.test(a)?n[i]={type:"dimension",value:D(a)}:o[i]=a;let t=K(A.borderWidth,e,gn),r={};for(let[i,a]of Object.entries(A.borderStyle))r[i]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:t,style:r},extensions:o}}s(me,"buildBorder");function ge(e){let n=an(T,e),o={};for(let[c,l]of Object.entries(T.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:D(l)};let r={};for(let[c,l]of Object.entries(T.fontWeight))r[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${l}`,weight:l}};let i={};for(let[c,l]of Object.entries(T.lineHeight))i[c]={type:"number",value:{kind:"number",raw:`${l}`,number:l}};let a={letterSpacing:T.letterSpacing,textTransform:T.textTransform,fontStyle:T.fontStyle};return{group:{family:o,size:t,weight:r,lineHeight:i},extensions:a}}s(ge,"buildFont");var hn=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function bn(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let t=n.match(hn),r=t?t[0]:"#000000",a=(t?n.slice(0,t.index).trim():n).split(/\s+/).filter(Boolean),c=s(l=>D(a[l]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:q(r),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}s(bn,"parseShadow");function ye(e){let n=rn(e),o={};for(let t of Object.keys(sn))o[t]={type:"shadow",value:bn(n(t))};return o}s(ye,"buildShadow");function M(e,n,o){let t={};for(let[r,i]of Object.entries(e)){let a=n?`${n}.${b(r)}`:b(r);if(y(i)){o.add(a);let c=z[a];t[r]=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 t[r]=M(i,a,o)}return t}s(M,"decorateGroup");function Rn(e){let n=new Set,o=M(e.primitives,"",n),t=M(e.groups,"",n);return X(n),{...e,primitives:o,groups:t}}s(Rn,"decorateMeta");function L(e,n){return M(e,"",n)}s(L,"decorateSlice");function he(e,n,o){for(let[t,r]of Object.entries(e)){let i=n?`${n}.${b(t)}`:b(t);y(r)?o.add(i):he(r,i,o)}}s(he,"collectPaths");function be(e){let n=new Set;for(let o of e)he(o.groups,"",n);X(n)}s(be,"assertSlicesMetaComplete");function Re(){let e=de(),o=me({borderWidth:e}),t={};Object.keys(o.extensions).length>0&&(t["com.apollion.border"]={radius:o.extensions});let r=new Set;return{groups:L({"border-width":e,border:o.group},r),extensions:t}}s(Re,"buildBaseIR");function Ie(e){let n=ge(e),o=new Set;return{groups:L({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}s(Ie,"buildFontIR");function ke(e,n){let o=ce(n),t=new Set;return{groups:L({color:o,bg:F(e.bg,n,ue),text:F(e.text,n,pe),tx:ae(n),shadow:ye(n)},t),extensions:{}}}s(ke,"buildColorIR");function Se(e,n){let o=le(n),t={space:o},r=new Set;return{groups:L({space:o,spacing:K(e.spacing,t,fe)},r),extensions:{}}}s(Se,"buildSpacingIR");function In(e,n,o){let t={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},r=fn(n,o.dimension),i=me(r),a=ge(o.dimension),c={"com.apollion.variant":t,"com.apollion.font":a.extensions};Object.keys(i.extensions).length>0&&(c["com.apollion.border"]={radius:i.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,pe),tx:ae(n),spacing:K(e.spacing,r,fe),border:i.group,font:a.group,shadow:ye(n)},extensions:c};return Rn(l)}s(In,"buildIR");var xe=In;var kn="/* 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 i=[...n,b(t)];y(r)?o.push(` --apollion-${i.join("-")}: ${v(r.value)};`):Te(r,i,o)}}s(Te,"emitVars");function De(e,n,o){for(let[t,r]of Object.entries(e)){let i=[...n,b(t)];y(r)?r.type==="color"&&o.push(` @property --apollion-${i.join("-")} { syntax: '<color>'; inherits: true; initial-value: ${v(r.value)}; }`):De(r,i,o)}}s(De,"emitProperties");function ve(e){let{brand:n,mode:o,surface:t,dimension:r}=e.meta,i=[kn,""];return i.push(`/* Variant: brand=${n} mode=${o} surface=${t} dimension=${r} */`,"",":root {"),Te(e.groups,[],i),i.push("}",""),i.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),De(e.groups,[],i),i.push("}",""),i.join(`
2
- `)}s(ve,"renderCss");function we(e){return e.alpha!==void 0?{colorSpace:"oklch",components:[...e.components],alpha:e.alpha,hex:e.hex}:{colorSpace:"oklch",components:[...e.components],hex:e.hex}}s(we,"colorValue");function w(e){return{value:e.value,unit:e.unit}}s(w,"dimensionValue");function Sn(e){let n=e.shadow,o={color:we(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}s(Sn,"shadowValue");function xn(e){switch(e.kind){case"ref":return`{${ie(e.path)}}`;case"color":return we(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 Sn(e)}}s(xn,"projectValue");function Tn(e){let n={$value:xn(e.value),$type:e.type};return e.description!==void 0&&(n.$description=e.description),e.deprecated!==void 0&&(n.$deprecated=e.deprecated),n}s(Tn,"projectToken");function Z(e){let n={};for(let[o,t]of Object.entries(e))n[b(o)]=y(t)?Tn(t):Z(t);return n}s(Z,"projectGroup");function j(e,n){let o={$description:n,...Z(e.groups)};return Object.keys(e.extensions).length>0&&(o.$extensions=e.extensions),`${JSON.stringify(o,null,2)}
3
- `}s(j,"renderSet");function Ce(e){return j(e,"Apollion DS \u2014 base set (axis-invariant: border). DTCG 2025.10.")}s(Ce,"renderBaseSet");function Ve(e,n,o,t){return j(e,`Apollion DS \u2014 colour set. brand=${n} mode=${o} surface=${t}. DTCG 2025.10.`)}s(Ve,"renderColorSet");function $e(e,n){return j(e,`Apollion DS \u2014 spacing set. dimension=${n}. DTCG 2025.10.`)}s($e,"renderSpacingSet");function Ge(e,n){return j(e,`Apollion DS \u2014 font set. dimension=${n}. DTCG 2025.10.`)}s(Ge,"renderFontSet");function Oe(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]}],i={name:"apollion-tokens",description:"Apollion DS token resolver \u2014 DTCG 2025.10. Compose the base set with the colour set for the chosen brand/mode/surface and the spacing + font sets for the chosen dimension. NOTE: mode is a topology placeholder in this release (dark resolves identically to light until S6).",sets:[{name:n.base.name,source:n.base.file},...n.spacing.map(a=>({name:a.name,source:a.file})),...n.font.map(a=>({name:a.name,source:a.file})),...n.color.map(a=>({name:a.name,source:a.file}))],modifiers: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(i,null,2)}
4
- `}s(Oe,"renderResolver");var Dn="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function Ee(e,n,o){let t=" ".repeat(n);for(let[r,i]of Object.entries(e))y(i)?o.push(`${t}${JSON.stringify(r)}: ${JSON.stringify(v(i.value))},`):(o.push(`${t}${r}: {`),Ee(i,n+1,o),o.push(`${t}},`))}s(Ee,"emitGroup");function Ae(e){let{brand:n,mode:o,surface:t,dimension:r}=e.meta,i=[Dn,`// Variant: brand=${n} mode=${o} surface=${t} dimension=${r}`,"","export const tokens = {"];return Ee(e.groups,1,i),i.push("} as const;","","export type Tokens = typeof tokens;",""),i.join(`
5
- `)}s(Ae,"renderTs");var vn=["light","dark"],wn=["positive","negative"],Cn=["compact","normal","spacious"];function P(e){let n=e.modes??vn,o=e.surfaces??wn,t=e.dimensions??Cn,r=Object.entries(e.brands).sort(([a],[c])=>a.localeCompare(c)),i=[];for(let[a,c]of r)for(let l of n)for(let f of o)for(let x of t)i.push({brand:a,colors:c,mode:l,surface:f,dimension:x});return i}s(P,"expandVariants");function Fe(e){return`${e.brand}.${e.mode}.${e.surface}.${e.dimension}`}s(Fe,"variantName");import{createHash as Vn}from"node:crypto";function ee(e){return Vn("sha256").update(e).digest("hex")}s(ee,"sha256");function ne(e){return ee(Q(e))}s(ne,"hashConfig");function Q(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(Q).join(",")}]`:`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Q(e[t])}`).join(",")}}`}s(Q,"stableStringify");function Me(e){try{let{execSync:n}=nn("node:child_process");return n("git rev-parse --short HEAD",{cwd:e,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim()}catch{return""}}s(Me,"detectGitCommit");function Le(){return{node:process.version,platform:`${process.platform}-${process.arch}`}}s(Le,"buildEnv");function je(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)}
6
- `}s(je,"serializeManifest");var $n="json/sets",Pe="json/resolver.json";function N(e){return`${$n}/${e}.json`}s(N,"setFile");function Gn(e,n,o){return`${e}.color.${n}.${o}`}s(Gn,"colorSetName");function On(e){return`spacing.${e}`}s(On,"spacingSetName");function En(e){return`font.${e}`}s(En,"fontSetName");function _(e,n){e.includes(n)||e.push(n)}s(_,"pushUnique");function Ne(e){let n=P(e),o=[],t=[],r=[],i=[],a=new Set,c=[],l=new Set,f=[],x=new Set,V=[];for(let u of n){_(o,u.brand),_(t,u.mode),_(r,u.surface),_(i,u.dimension);let m=Gn(u.brand,u.mode,u.surface);a.has(m)||(a.add(m),c.push({kind:"color",name:m,file:N(m),brand:u.brand,mode:u.mode,surface:u.surface}));let I=On(u.dimension);l.has(I)||(l.add(I),f.push({kind:"spacing",name:I,file:N(I),dimension:u.dimension}));let p=En(u.dimension);x.has(p)||(x.add(p),V.push({kind:"font",name:p,file:N(p),dimension:u.dimension}))}return{base:{kind:"base",name:"base",file:N("base")},spacing:f,font:V,color:c,modifiers:{brand:o,mode:t,surface:r,dimension:i}}}s(Ne,"planSets");import{createFoundation as Ye}from"@apollion-dsi/core/themes/foundation";import{createSemantic as Nn}from"@apollion-dsi/core/themes/semantic";import{defaultInputSpacing as _n}from"@apollion-dsi/core/themes/spacing";import{invertForSurface as Bn}from"@apollion-dsi/core/themes/surface";import{converter as An,formatHex as C,interpolate as Fn,parse as R,wcagContrast as Ue}from"culori";var te=An("oklch");function d(e,n,o){let t=R(e),r=R(n);if(!t||!r)return e;let i=Fn([t,r],"oklch");return C(i(o))??e}s(d,"mixOklch");function Mn(e){return e?typeof e=="string"?e:e.base:"#000"}s(Mn,"coerceToHex");var B=1.3,Ln=.05,_e=.04,S=s((e,n)=>{let o=R(e),t=R(n);return!o||!t?1:Ue(o,t)},"contrastRatio"),oe=s(e=>{let n=te(R(e));return n?n.l??0:null},"oklchLightness"),jn=4.5;function Be(e,n,o=jn){let t=R(n),r=te(R(e));if(!t||!r)return e;let i=S("#fff",n)>=S("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=C(r)??e,l=R(c);if(l&&Ue(l,t)>=o)return c;let f=Math.min(1,Math.max(0,(r.l??0)+i));if(f===(r.l??0))break;r={...r,l:f}}return C(r)??e}s(Be,"readableColor");var He=s((e,n)=>{if(S(e,n)>=B)return!0;let o=oe(e),t=oe(n);return o!==null&&t!==null&&Math.abs(o-t)>=Ln},"isPerceptibleState"),Pn=s(e=>e?S("#fff",e)>S("#000",e):!1,"isDarkSurface");function We(e,n,o){let t=te(R(e));if(!t)return null;let r={...t,l:o??t.l??0},i=n?_e:-_e;for(let a=0;a<25;a+=1){let c=Math.min(1,Math.max(0,(r.l??0)+i));if(c===(r.l??0))break;r={...r,l:c};let l=C(r);if(l&&S(e,l)>=B)return l}return C(r)??null}s(We,"derivePerceptibleState");function Je(e,n,o){let t=We(e,n,o);if(t&&S(e,t)>=B)return t;let r=We(e,!n);return r&&S(e,r)>=B?r:t??r}s(Je,"perceptibleStateFor");function h(e,n){let o=typeof e=="object"&&e!==null?e:void 0,t=Mn(e),r=n.deepDark,i=n.deepLight,a={base:t,dark:d(t,r,.6),action:d(t,r,.2),active:d(t,i,.6),light:d(t,i,.9),onLight:t};if(R(t)){let c=Pn(n.baseLight),l=He(t,a.action);if(l||(a.action=Je(t,c)??a.action),!He(t,a.active)){let f=l?void 0:oe(a.action)??void 0;a.active=Je(t,c,f)??a.active}}if(a.onLight=Be(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??Be(c,l)}}return a}s(h,"mountSingleColor");function ze(e){let n=e.deepLight,o=e.deepDark;return{0:n,5:d(n,o,.05),10:d(n,o,.1),20:d(n,o,.2),30:d(n,o,.3),40:d(n,o,.4),50:d(n,o,.5),60:d(n,o,.6),70:d(n,o,.7),80:d(n,o,.8),90:d(n,o,.9),100:d(n,o,1)}}s(ze,"mountGreyscaleColors");function Xe(e){let n=e.deepLight,o=e.deepDark,t=typeof e.primary=="object"&&e.primary?e.primary.base:e.primary,r=s(a=>1/17*(a-1),"interpolation"),i=d(t,o,.5);return{0:d(i,n,r(18)),5:d(i,n,r(17.5)),10:d(i,n,r(17)),20:d(i,n,r(16)),30:d(i,n,r(15)),40:d(i,n,r(14)),50:d(i,n,r(13)),60:d(i,n,r(12)),70:d(i,n,r(11)),80:d(i,n,r(10)),90:d(i,n,r(9)),100:d(i,n,r(8)),110:d(i,n,r(7)),120:d(i,n,r(6)),130:d(i,n,r(5)),140:d(i,n,r(4)),150:d(i,n,r(3)),160:d(i,n,r(2)),170:i,180:d(i,o,.25)}}s(Xe,"mountNeutralColors");function Hn(e){return{baseDark:e.baseDark,baseLight:e.baseLight,deepDark:e.deepDark,deepLight:e.deepLight,transparent:e.transparent??"transparent",neutral:Xe(e),grayscale:ze(e),main:h(e.main,e),opposite:h(e.opposite,e),complementary:h(e.complementary,e),danger:h(e.danger,e),information:h(e.information,e),success:h(e.success,e),warning:h(e.warning,e),primary:h(e.primary,e),secondary:h(e.secondary,e),tertiary:h(e.tertiary,e)}}s(Hn,"composeColors");function H(e,n=_n){let o=Hn(e.colors),t=O(n,e.dimension),r=Nn({colors:o,spacing:t}),i=Ye(r);return e.surface==="negative"&&(i=Ye(Bn({semantic:r,colors:o},"negative").semantic)),{foundation:i,colors:o}}s(H,"buildVariantThemes");async function et(e){let{config:n,outDir:o,cwd:t=process.cwd(),verbose:r=!1}=e,i=P(n),a=n.output??{};if(i.length===0)throw new Error("apollion-tokens build: no variants (config.brands is empty)");let c=await Wn(W(zn(),"apollion-tokens-"));try{let l=[],f=s(async(u,m)=>{await Xn(c,u,m),l.push({path:u,sha256:ee(m)}),r&&console.log(` \u2713 ${u}`)},"emit");if(a.json){let u=Ne(n),m=[],I=Re();m.push(I),await f(u.base.file,Ce(I));for(let p of u.spacing){let k=i.find(G=>G.dimension===p.dimension),{foundation:J}=H(k),$=Se(J,p.dimension);m.push($),await f(p.file,$e($,p.dimension))}for(let p of u.font){let k=Ie(p.dimension);m.push(k),await f(p.file,Ge(k,p.dimension))}for(let p of u.color){let k=i.find(U=>U.brand===p.brand&&U.mode===p.mode&&U.surface===p.surface),{foundation:J,colors:$}=H(k),G=ke(J,$);m.push(G),await f(p.file,Ve(G,p.brand,p.mode,p.surface))}be(m),await f(Pe,Oe(n,u))}if(a.css||a.ts)for(let u of i){let{foundation:m,colors:I}=H(u),p=xe(m,I,u),k=Fe(u);a.css&&await f(`css/${k}.css`,ve(p)),a.ts&&await f(`ts/${k}.d.ts`,Ae(p))}let x={configHash:ne(n),files:l,gitCommit:Me(t),buildEnv:Le()},V=je(x);return await Ze(W(c,"manifest.json"),V),await qe(o,{recursive:!0,force:!0}),await Ke(Qe(o),{recursive:!0}),await Un(c,o),r&&console.log(`\u2713 ${l.length} files \u2192 ${o}`),{manifest:x,outDir:o}}catch(l){throw await qe(c,{recursive:!0,force:!0}).catch(()=>{}),l}}s(et,"build");async function nt(e){let{config:n,outDir:o}=e,t;try{t=JSON.parse(await Jn(W(o,"manifest.json"),"utf8"))}catch{return!1}return t.configHash===ne(n)}s(nt,"check");async function Xn(e,n,o){let t=W(e,n);await Ke(Qe(t),{recursive:!0}),await Ze(t,o)}s(Xn,"writeAt");export{et as build,nt as check};
1
+ var hn=Object.defineProperty;var s=(e,n)=>hn(e,"name",{value:n,configurable:!0}),yn=(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 mo,readFile as un,rename as go,rm as pn,writeFile as mn}from"node:fs/promises";import{tmpdir as ho}from"node:os";import{dirname as gn,join as A}from"node:path";import{converter as An,parse as Ln}from"culori";import{defaultInputBorder as P}from"@apollion-dsi/core/themes/border";import{createReadableTextLayer as Rn}from"@apollion-dsi/core/themes/colors";import{createDeth as In,levelValues as kn}from"@apollion-dsi/core/themes/depth";import{createFont as Sn,defaultInputFont as $}from"@apollion-dsi/core/themes/font";import{defaultInputSpacing as pe}from"@apollion-dsi/core/themes/spacing";import{converter as xn,formatHex as wn,parse as Tn}from"culori";import{DIMENSION_MULTIPLIERS as bn}from"@apollion-dsi/core/themes/dimension";function N({multiplier:e=.25,alias:n},o){let r=o!==void 0?bn[o]:e;return(...t)=>t.map(i=>{let a=typeof i=="string"?n[i]:i;return`${r*a}rem`}).join(" ")}s(N,"createSpacing");var Q={"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)."},"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 ee(e){let n=Object.keys(Q).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(ee,"assertTokenMetaResolves");var vn=xn("oklch");function g(e){return typeof e.type=="string"&&"value"in e}s(g,"isToken");function I(e){return e.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}s(I,"kebab");function fe(e){return e.split(".").map(I).join(".")}s(fe,"kebabPath");function V(e){return e.kind==="ref"?e.resolved.raw:e.raw}s(V,"rawValue");function F(e,n){return Number(e.toFixed(n))||0}s(F,"round");function oe(e){let n=vn(Tn(e));if(!n)return{kind:"color",raw:e,components:[0,0,0],hex:"#000000"};let o=[F(n.l,4),F(n.c,4),F(n.h??0,2)],r=wn(n)??"#000000";return n.alpha!==void 0&&n.alpha!==1?{kind:"color",raw:e,components:o,alpha:F(n.alpha,4),hex:r}:{kind:"color",raw:e,components:o,hex:r}}s(oe,"toColorValue");var me=/^(-?(?:\d+\.?\d*|\.\d+))(px|rem)$/;function C(e){let n=me.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(C,"toDimensionValue");function R(e){return{type:"color",value:oe(e)}}s(R,"colorToken");function ne(e){let n={};for(let[o,r]of Object.entries(e))n[o]=R(r);return n}s(ne,"recordColorGroup");function ge(e){let n=Rn(e),o={};for(let[r,t]of Object.entries(n.palettes))o[r]=R(t);return o.neutral=ne(n.neutral),o}s(ge,"buildReadableTextGroup");var Dn=["main","opposite","complementary","primary","secondary","tertiary","success","danger","warning","information"];function he(e){let n={};for(let o of Dn){let r=e[o];n[o]={base:R(r.base),dark:R(r.dark),action:R(r.action),active:R(r.active),light:R(r.light),onLight:R(r.onLight)}}return n.grayscale=ne(e.grayscale),n.neutral=ne(e.neutral),n.baseDark=R(e.baseDark??"#000000"),n.baseLight=R(e.baseLight??"#ffffff"),n.deepDark=R(e.deepDark??"#000000"),n.deepLight=R(e.deepLight??"#ffffff"),n}s(he,"buildColorPrimitives");function ye(e){let n=N(pe,e),o={};for(let r of Object.keys(pe.alias))o[r]={type:"dimension",value:C(n(r))};return o}s(ye,"buildSpacePrimitives");function be(){let e={};for(let[n,o]of Object.entries(P.borderWidth))e[n]={type:"dimension",value:C(o)};return e}s(be,"buildBorderWidthPrimitives");function $n(e,n){return{color:he(e),space:ye(n),borderWidth:be()}}s($n,"buildPrimitives");var Re={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"},Ie={onPrimary:"color.baseLight",onSecondary:"color.baseLight",onTertiary:"color.baseDark",onSuccess:"color.baseLight",onDanger:"color.baseLight",onWarning:"color.baseDark",onInfo:"color.baseLight"};function Cn(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(Cn,"lookupPrimitive");function _(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=o[t],c=a?Cn(n,a):void 0;r[t]=a&&c===i?{type:"color",value:{kind:"ref",path:a,resolved:oe(i)}}:R(i)}return r}s(_,"colorRefGroup");var ke={xs:"space.xs",sm:"space.small",md:"space.medium",lg:"space.large",xl:"space.xl",xxl:"space.xxl"},Vn={none:"border-width.none",thin:"border-width.thin",regular:"border-width.regular",great:"border-width.great",bold:"border-width.bold"};function On(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&&!g(t)&&i in t)t=t[i];else return;return t&&g(t)&&t.value.kind==="dimension"?t.value.raw:void 0}s(On,"lookupDimensionPrimitive");function re(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=o[t],c=a?On(n,a):void 0;r[t]=a&&c===i?{type:"dimension",value:{kind:"ref",path:a,resolved:C(i)}}:{type:"dimension",value:C(i)}}return r}s(re,"dimensionRefGroup");function Se(e){let n={},o={};for(let[i,a]of Object.entries(P.borderRadius))me.test(a)?n[i]={type:"dimension",value:C(a)}:o[i]=a;let r=re(P.borderWidth,e,Vn),t={};for(let[i,a]of Object.entries(P.borderStyle))t[i]={type:"strokeStyle",value:{kind:"strokeStyle",raw:a,style:a}};return{group:{radius:n,width:r,style:t},extensions:o}}s(Se,"buildBorder");function xe(e){let n=Sn($,e),o={};for(let[c,l]of Object.entries($.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:C(l)};let t={};for(let[c,l]of Object.entries($.fontWeight))t[c]={type:"fontWeight",value:{kind:"fontWeight",raw:`${l}`,weight:l}};let i={};for(let[c,l]of Object.entries($.lineHeight))i[c]={type:"number",value:{kind:"number",raw:`${l}`,number:l}};let a={letterSpacing:$.letterSpacing,textTransform:$.textTransform,fontStyle:$.fontStyle};return{group:{family:o,size:r,weight:t,lineHeight:i},extensions:a}}s(xe,"buildFont");var En=/rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z]+$/;function Gn(e){let n=e.trim(),o=n.startsWith("inset");o&&(n=n.slice(5).trim());let r=n.match(En),t=r?r[0]:"#000000",a=(r?n.slice(0,r.index).trim():n).split(/\s+/).filter(Boolean),c=s(l=>C(a[l]??"0px"),"dim");return{kind:"shadow",raw:e,shadow:{color:oe(t),offsetX:c(0),offsetY:c(1),blur:c(2),spread:c(3),inset:o}}}s(Gn,"parseShadow");function we(e){let n=In(e),o={};for(let r of Object.keys(kn))o[r]={type:"shadow",value:Gn(n(r))};return o}s(we,"buildShadow");function B(e,n,o){let r={};for(let[t,i]of Object.entries(e)){let a=n?`${n}.${I(t)}`:I(t);if(g(i)){o.add(a);let c=Q[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]=B(i,a,o)}return r}s(B,"decorateGroup");function Mn(e){let n=new Set,o=B(e.primitives,"",n),r=B(e.groups,"",n);return ee(n),{...e,primitives:o,groups:r}}s(Mn,"decorateMeta");function H(e,n){return B(e,"",n)}s(H,"decorateSlice");function Te(e,n,o){for(let[r,t]of Object.entries(e)){let i=n?`${n}.${I(r)}`:I(r);g(t)?o.add(i):Te(t,i,o)}}s(Te,"collectPaths");function ve(e){let n=new Set;for(let o of e)Te(o.groups,"",n);ee(n)}s(ve,"assertSlicesMetaComplete");function De(){let e=be(),o=Se({borderWidth:e}),r={};Object.keys(o.extensions).length>0&&(r["com.apollion.border"]={radius:o.extensions});let t=new Set;return{groups:H({"border-width":e,border:o.group},t),extensions:r}}s(De,"buildBaseIR");function $e(e){let n=xe(e),o=new Set;return{groups:H({font:n.group},o),extensions:{"com.apollion.font":n.extensions}}}s($e,"buildFontIR");function Ce(e,n){let o=he(n),r=new Set;return{groups:H({color:o,bg:_(e.bg,n,Re),text:_(e.text,n,Ie),tx:ge(n),shadow:we(n)},r),extensions:{}}}s(Ce,"buildColorIR");function Ve(e,n){let o=ye(n),r={space:o},t=new Set;return{groups:H({space:o,spacing:re(e.spacing,r,ke)},t),extensions:{}}}s(Ve,"buildSpacingIR");function jn(e,n,o){let r={brand:o.brand,mode:o.mode,surface:o.surface,dimension:o.dimension},t=$n(n,o.dimension),i=Se(t),a=xe(o.dimension),c={"com.apollion.variant":r,"com.apollion.font":a.extensions};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:_(e.bg,n,Re),text:_(e.text,n,Ie),tx:ge(n),spacing:re(e.spacing,t,ke),border:i.group,font:a.group,shadow:we(n)},extensions:c};return Mn(l)}s(jn,"buildIR");var W=jn;var Nn=An("rgb"),Oe="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function te(e){if(e.value.kind==="color")return e.value;if(e.value.kind==="ref"&&e.value.resolved.kind==="color")return e.value.resolved}s(te,"colorPayload");function ie(e){return e.alpha===void 0}s(ie,"isOpaqueColor");function Ee(e){let n=Nn(Ln(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(Ee,"rgbTriplet");function J(e,n=[]){let o=new Map;for(let[r,t]of Object.entries(e)){let i=[...n,I(r)];if(g(t))o.set(i.join("-"),t);else for(let[a,c]of J(t,i))o.set(a,c)}return o}s(J,"flatTokens");function h(e,...n){let o=e[n[0]];for(let r of n.slice(1)){if(!o||g(o))return{};o=o[r]}return o&&!g(o)?o:{}}s(h,"groupAt");function Ge(e){let n=[];for(let o of["bg","text","tx"])for(let[r,t]of J(h(e.groups,o),[o])){let i=te(t);i&&n.push({key:r,cssVar:`--apollion-${r}`,opaque:ie(i)})}return n}s(Ge,"colorEntries");function T(e,n){return[...J(e)].map(([o])=>[o,`var(--apollion-${[...n,o].join("-")})`])}s(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(" },")}}s(v,"pushScale");function Me(e){let n=[Oe,"// Tailwind preset over the Apollion foundation tokens \u2014 requires dist/css/ vars in scope.","","const preset = {"," theme: {"," extend: {"],o=Ge(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,"spacing",T(h(e.groups,"spacing"),["spacing"])),v(n,"borderRadius",T(h(e.groups,"border","radius"),["border","radius"])),v(n,"borderWidth",T(h(e.groups,"border","width"),["border","width"])),v(n,"fontFamily",T(h(e.groups,"font","family"),["font","family"])),v(n,"fontSize",T(h(e.groups,"font","size"),["font","size"])),v(n,"fontWeight",T(h(e.groups,"font","weight"),["font","weight"])),v(n,"lineHeight",T(h(e.groups,"font","lineHeight"),["font","line-height"])),v(n,"boxShadow",T(h(e.groups,"shadow"),["shadow"])),n.push(" },"," },","};","","export default preset;",""),n.join(`
2
+ `)}s(Me,"renderTailwindPreset");function je(e){let n=s(t=>[...J(t).keys()],"keys"),o=s(t=>`[${t.map(i=>JSON.stringify(i)).join(", ")}]`,"list");return[Oe,"// tailwind-merge extension for the generated preset \u2014 pass to extendTailwindMerge().","","export const twMergeExtension = {"," extend: {"," theme: {",` colors: ${o(Ge(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
+ `)}s(je,"renderTwMergeExtension");var Fn="/* Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs. */";function Ae(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,I(r)];g(t)?o.push(` --apollion-${i.join("-")}: ${V(t.value)};`):Ae(t,i,o)}}s(Ae,"emitVars");function Le(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,I(r)];if(!g(t)){Le(t,i,o);continue}let a=te(t);a&&ie(a)&&o.push(` --apollion-${i.join("-")}-rgb: ${Ee(a)};`)}}s(Le,"emitRgbVars");function Ne(e,n,o){for(let[r,t]of Object.entries(e)){let i=[...n,I(r)];g(t)?t.type==="color"&&o.push(` @property --apollion-${i.join("-")} { syntax: '<color>'; inherits: true; initial-value: ${V(t.value)}; }`):Ne(t,i,o)}}s(Ne,"emitProperties");function Fe(e,n={}){let{brand:o,mode:r,surface:t,dimension:i}=e.meta,a=[Fn,""];return a.push(`/* Variant: brand=${o} mode=${r} surface=${t} dimension=${i} */`,"",":root {"),Ae(e.groups,[],a),n.rgbCompanions&&(a.push(""," /* -rgb channel triplets \u2014 Tailwind <alpha-value> companions (opaque colour tokens only). */"),Le(e.groups,[],a)),a.push("}",""),a.push("@supports (background: paint(squircle)) or (color: oklch(0% 0 0)) {"),Ne(e.groups,[],a),a.push("}",""),a.join(`
4
+ `)}s(Fe,"renderCss");var Pn="<!-- 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 i=n?`${n}.${r}`:r;g(t)?o.push([i,V(t.value)]):se(t,i,o)}}s(se,"flatten");function _n(e){return typeof e=="number"?String(e):`'${String(e).replace(/'/g,"''")}'`}s(_n,"yamlEscape");function Bn(e){let{mode:n,surface:o,dimension:r}=e.meta;return`${n}.${o}.${r}`}s(Bn,"variantKey");function Pe(e,n){if(n.length===0)throw new Error(`renderDesignMd: no variants for brand "${e}"`);let o=["---",`brand: '${e}'`,"generator: apollion-tokens","variants:"];for(let t of n){let i=[];se(t.groups,"",i),o.push(` ${Bn(t)}:`);for(let[a,c]of i)o.push(` ${a}: ${_n(c)}`)}o.push("---");let r=["",Pn,"",`# Design.md \u2014 ${e}`,"","Resolved design-token values for this brand, one section per variant.","Consumption rules (which token to reach for, layer boundaries) live in the","package `llms.txt`; this file carries the values those rules reference.","Regenerate with `apollion-tokens build` \u2014 never edit.",""];for(let t of n){let{mode:i,surface:a,dimension:c}=t.meta;r.push(`## Variant \`${i} \xB7 ${a} \xB7 ${c}\``,"");let l=[];se(t.groups,"",l);let m=new Map;for(let[b,w]of l){let d=b.split(".")[0]??b,f=m.get(d)??[];f.push([b,w]),m.set(d,f)}for(let[b,w]of m){r.push(`### ${b}`,"","| Token | Value |","| --- | --- |");for(let[d,f]of w)r.push(`| \`${d}\` | \`${f}\` |`);r.push("")}}return`${o.join(`
5
+ `)}
6
+ ${r.join(`
7
+ `)}`}s(Pe,"renderDesignMd");function _e(e){return e.alpha!==void 0?{colorSpace:"oklch",components:[...e.components],alpha:e.alpha,hex:e.hex}:{colorSpace:"oklch",components:[...e.components],hex:e.hex}}s(_e,"colorValue");function M(e){return{value:e.value,unit:e.unit}}s(M,"dimensionValue");function Hn(e){let n=e.shadow,o={color:_e(n.color),offsetX:M(n.offsetX),offsetY:M(n.offsetY),blur:M(n.blur),spread:M(n.spread)};return n.inset&&(o.inset=!0),o}s(Hn,"shadowValue");function Wn(e){switch(e.kind){case"ref":return`{${fe(e.path)}}`;case"color":return _e(e);case"dimension":return M(e);case"fontFamily":return e.family;case"fontWeight":return e.weight;case"number":return e.number;case"strokeStyle":return e.style;case"shadow":return Hn(e)}}s(Wn,"projectValue");function Jn(e){let n={$value:Wn(e.value),$type:e.type};return e.description!==void 0&&(n.$description=e.description),e.deprecated!==void 0&&(n.$deprecated=e.deprecated),n}s(Jn,"projectToken");function ae(e){let n={};for(let[o,r]of Object.entries(e))n[I(o)]=g(r)?Jn(r):ae(r);return n}s(ae,"projectGroup");function z(e,n){let o={$description:n,...ae(e.groups)};return Object.keys(e.extensions).length>0&&(o.$extensions=e.extensions),`${JSON.stringify(o,null,2)}
8
+ `}s(z,"renderSet");function Be(e){return z(e,"Apollion DS \u2014 base set (axis-invariant: border). DTCG 2025.10.")}s(Be,"renderBaseSet");function He(e,n,o,r){return z(e,`Apollion DS \u2014 colour set. brand=${n} mode=${o} surface=${r}. DTCG 2025.10.`)}s(He,"renderColorSet");function We(e,n){return z(e,`Apollion DS \u2014 spacing set. dimension=${n}. DTCG 2025.10.`)}s(We,"renderSpacingSet");function Je(e,n){return z(e,`Apollion DS \u2014 font set. dimension=${n}. DTCG 2025.10.`)}s(Je,"renderFontSet");function ze(e,n){let{modifiers:o}=n,r=[{name:"brand",values:[...o.brand],default:o.brand[0]},{name:"mode",values:[...o.mode],default:o.mode[0]},{name:"surface",values:[...o.surface],default:o.surface[0]},{name:"dimension",values:[...o.dimension],default:o.dimension[0]}],i={name:"apollion-tokens",description:"Apollion DS token resolver \u2014 DTCG 2025.10. Compose the base set with the colour set for the chosen brand/mode/surface and the spacing + font sets for the chosen dimension. NOTE: mode is a topology placeholder in this release (dark resolves identically to light until S6).",sets:[{name:n.base.name,source:n.base.file},...n.spacing.map(a=>({name:a.name,source:a.file})),...n.font.map(a=>({name:a.name,source:a.file})),...n.color.map(a=>({name:a.name,source:a.file}))],modifiers:r,$extensions:{"com.apollion.resolver":{composition:{always:[n.base.name],byModifier:{color:"${brand}.color.${mode}.${surface}",spacing:"spacing.${dimension}",font:"font.${dimension}"}},modeIsPlaceholder:!0}}};return`${JSON.stringify(i,null,2)}
9
+ `}s(ze,"renderResolver");var zn="// Generated by apollion-tokens build \u2014 DO NOT EDIT. See apollion.config.mjs.";function qn(e,n,o){let r=[];if(e.description!==void 0&&r.push(e.description),e.deprecated===!0?r.push("@deprecated"):typeof e.deprecated=="string"&&r.push(`@deprecated ${e.deprecated}`),r.length!==0){o.push(`${n}/**`);for(let t of r)o.push(`${n} * ${t.replace(/\*\//g,"*\\/")}`);o.push(`${n} */`)}}s(qn,"emitDoc");function qe(e,n,o){let r=" ".repeat(n);for(let[t,i]of Object.entries(e))g(i)?(qn(i,r,o),o.push(`${r}${JSON.stringify(t)}: ${JSON.stringify(V(i.value))},`)):(o.push(`${r}${t}: {`),qe(i,n+1,o),o.push(`${r}},`))}s(qe,"emitGroup");function Ue(e){let{brand:n,mode:o,surface:r,dimension:t}=e.meta,i=[zn,`// Variant: brand=${n} mode=${o} surface=${r} dimension=${t}`,"","export const tokens = {"];return qe(e.groups,1,i),i.push("} as const;","","export type Tokens = typeof tokens;",""),i.join(`
10
+ `)}s(Ue,"renderTs");var Un=["light","dark"],Xn=["positive","negative"],Yn=["compact","normal","spacious"];function q(e){let n=e.modes??Un,o=e.surfaces??Xn,r=e.dimensions??Yn,t=Object.entries(e.brands).sort(([a],[c])=>a.localeCompare(c)),i=[];for(let[a,c]of t)for(let l of n)for(let m of o)for(let b of r)i.push({brand:a,colors:c,mode:l,surface:m,dimension:b});return i}s(q,"expandVariants");function Xe(e){return`${e.brand}.${e.mode}.${e.surface}.${e.dimension}`}s(Xe,"variantName");import{createHash as Kn}from"node:crypto";function U(e){return Kn("sha256").update(e).digest("hex")}s(U,"sha256");function le(e){return U(ce(e))}s(le,"hashConfig");function ce(e){return e===null||typeof e!="object"?JSON.stringify(e):Array.isArray(e)?`[${e.map(ce).join(",")}]`:`{${Object.keys(e).sort().map(r=>`${JSON.stringify(r)}:${ce(e[r])}`).join(",")}}`}s(ce,"stableStringify");function Ye(e){try{let{execSync:n}=yn("node:child_process");return n("git rev-parse --short HEAD",{cwd:e,stdio:["ignore","pipe","ignore"],encoding:"utf8"}).trim()}catch{return""}}s(Ye,"detectGitCommit");function Ke(){return{node:process.version,platform:`${process.platform}-${process.arch}`}}s(Ke,"buildEnv");function Ze(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)}
11
+ `}s(Ze,"serializeManifest");var Zn="json/sets",Qe="json/resolver.json";function X(e){return`${Zn}/${e}.json`}s(X,"setFile");function Qn(e,n,o){return`${e}.color.${n}.${o}`}s(Qn,"colorSetName");function eo(e){return`spacing.${e}`}s(eo,"spacingSetName");function no(e){return`font.${e}`}s(no,"fontSetName");function Y(e,n){e.includes(n)||e.push(n)}s(Y,"pushUnique");function en(e){let n=q(e),o=[],r=[],t=[],i=[],a=new Set,c=[],l=new Set,m=[],b=new Set,w=[];for(let d of n){Y(o,d.brand),Y(r,d.mode),Y(t,d.surface),Y(i,d.dimension);let f=Qn(d.brand,d.mode,d.surface);a.has(f)||(a.add(f),c.push({kind:"color",name:f,file:X(f),brand:d.brand,mode:d.mode,surface:d.surface}));let k=eo(d.dimension);l.has(k)||(l.add(k),m.push({kind:"spacing",name:k,file:X(k),dimension:d.dimension}));let p=no(d.dimension);b.has(p)||(b.add(p),w.push({kind:"font",name:p,file:X(p),dimension:d.dimension}))}return{base:{kind:"base",name:"base",file:X("base")},spacing:m,font:w,color:c,modifiers:{brand:o,mode:r,surface:t,dimension:i}}}s(en,"planSets");import{createFoundation as dn}from"@apollion-dsi/core/themes/foundation";import{createSemantic as co}from"@apollion-dsi/core/themes/semantic";import{defaultInputSpacing as lo}from"@apollion-dsi/core/themes/spacing";import{invertForSurface as uo}from"@apollion-dsi/core/themes/surface";import{converter as oo,formatHex as j,interpolate as ro,parse as x,wcagContrast as an}from"culori";var ue=oo("oklch");function u(e,n,o){let r=x(e),t=x(n);if(!r||!t)return e;let i=ro([r,t],"oklch");return j(i(o))??e}s(u,"mixOklch");function to(e){return e?typeof e=="string"?e:e.base:"#000"}s(to,"coerceToHex");var K=1.3,io=.05,nn=.04,D=s((e,n)=>{let o=x(e),r=x(n);return!o||!r?1:an(o,r)},"contrastRatio"),de=s(e=>{let n=ue(x(e));return n?n.l??0:null},"oklchLightness"),so=4.5;function on(e,n,o=so){let r=x(n),t=ue(x(e));if(!r||!t)return e;let i=D("#fff",n)>=D("#000",n)?.04:-.04;for(let a=0;a<25;a+=1){let c=j(t)??e,l=x(c);if(l&&an(l,r)>=o)return c;let m=Math.min(1,Math.max(0,(t.l??0)+i));if(m===(t.l??0))break;t={...t,l:m}}return j(t)??e}s(on,"readableColor");var rn=s((e,n)=>{if(D(e,n)>=K)return!0;let o=de(e),r=de(n);return o!==null&&r!==null&&Math.abs(o-r)>=io},"isPerceptibleState"),ao=s(e=>e?D("#fff",e)>D("#000",e):!1,"isDarkSurface");function tn(e,n,o){let r=ue(x(e));if(!r)return null;let t={...r,l:o??r.l??0},i=n?nn:-nn;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=j(t);if(l&&D(e,l)>=K)return l}return j(t)??null}s(tn,"derivePerceptibleState");function sn(e,n,o){let r=tn(e,n,o);if(r&&D(e,r)>=K)return r;let t=tn(e,!n);return t&&D(e,t)>=K?t:r??t}s(sn,"perceptibleStateFor");function S(e,n){let o=typeof e=="object"&&e!==null?e:void 0,r=to(e),t=n.deepDark,i=n.deepLight,a={base:r,dark:u(r,t,.6),action:u(r,t,.2),active:u(r,i,.6),light:u(r,i,.9),onLight:r};if(x(r)){let c=ao(n.baseLight),l=rn(r,a.action);if(l||(a.action=sn(r,c)??a.action),!rn(r,a.active)){let m=l?void 0:de(a.action)??void 0;a.active=sn(r,c,m)??a.active}}if(a.onLight=on(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??on(c,l)}}return a}s(S,"mountSingleColor");function cn(e){let n=e.deepLight,o=e.deepDark;return{0:n,5:u(n,o,.05),10:u(n,o,.1),20:u(n,o,.2),30:u(n,o,.3),40:u(n,o,.4),50:u(n,o,.5),60:u(n,o,.6),70:u(n,o,.7),80:u(n,o,.8),90:u(n,o,.9),100:u(n,o,1)}}s(cn,"mountGreyscaleColors");function ln(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=u(r,o,.5);return{0:u(i,n,t(18)),5:u(i,n,t(17.5)),10:u(i,n,t(17)),20:u(i,n,t(16)),30:u(i,n,t(15)),40:u(i,n,t(14)),50:u(i,n,t(13)),60:u(i,n,t(12)),70:u(i,n,t(11)),80:u(i,n,t(10)),90:u(i,n,t(9)),100:u(i,n,t(8)),110:u(i,n,t(7)),120:u(i,n,t(6)),130:u(i,n,t(5)),140:u(i,n,t(4)),150:u(i,n,t(3)),160:u(i,n,t(2)),170:i,180:u(i,o,.25)}}s(ln,"mountNeutralColors");function po(e){return{...e,baseDark:e.baseLight,baseLight:e.baseDark,deepDark:e.deepLight,deepLight:e.deepDark}}s(po,"toCanonicalDarkInput");function fo(e){return{baseDark:e.baseDark,baseLight:e.baseLight,deepDark:e.deepDark,deepLight:e.deepLight,transparent:e.transparent??"transparent",neutral:ln(e),grayscale:cn(e),main:S(e.main,e),opposite:S(e.opposite,e),complementary:S(e.complementary,e),danger:S(e.danger,e),information:S(e.information,e),success:S(e.success,e),warning:S(e.warning,e),primary:S(e.primary,e),secondary:S(e.secondary,e),tertiary:S(e.tertiary,e)}}s(fo,"composeColors");function E(e,n=lo){let o=e.mode==="dark"?po(e.colors):e.colors,r=fo(o),t=N(n,e.dimension),i=co({colors:r,spacing:t}),a=dn(i);return e.surface==="negative"&&(a=dn(uo({semantic:i,colors:r},"negative").semantic)),{foundation:a,colors:r}}s(E,"buildVariantThemes");async function Er(e){let{config:n,outDir:o,cwd:r=process.cwd(),verbose:t=!1}=e,i=q(n),a=n.output??{};if(i.length===0)throw new Error("apollion-tokens build: no variants (config.brands is empty)");let c=await mo(A(ho(),"apollion-tokens-"));try{let l=[],m=s(async(d,f)=>{await yo(c,d,f),l.push({path:d,sha256:U(f)}),t&&console.log(` \u2713 ${d}`)},"emit");if(a.json){let d=en(n),f=[],k=De();f.push(k),await m(d.base.file,Be(k));for(let p of d.spacing){let y=i.find(L=>L.dimension===p.dimension),{foundation:G}=E(y),O=Ve(G,p.dimension);f.push(O),await m(p.file,We(O,p.dimension))}for(let p of d.font){let y=$e(p.dimension);f.push(y),await m(p.file,Je(y,p.dimension))}for(let p of d.color){let y=i.find(Z=>Z.brand===p.brand&&Z.mode===p.mode&&Z.surface===p.surface),{foundation:G,colors:O}=E(y),L=Ce(G,O);f.push(L),await m(p.file,He(L,p.brand,p.mode,p.surface))}ve(f),await m(Qe,ze(n,d))}if(a.css||a.ts)for(let d of i){let{foundation:f,colors:k}=E(d),p=W(f,k,d),y=Xe(d);a.css&&await m(`css/${y}.css`,Fe(p,{rgbCompanions:a.tailwind})),a.ts&&await m(`ts/${y}.d.ts`,Ue(p))}if(a.tailwind){let d=i[0],{foundation:f,colors:k}=E(d),p=W(f,k,d);await m("tailwind/preset.mjs",Me(p)),await m("tailwind/tw-merge.mjs",je(p))}if(a.designMd){let d=[...new Set(i.map(f=>f.brand))];for(let f of d){let p=i.filter(y=>y.brand===f).map(y=>{let{foundation:G,colors:O}=E(y);return W(G,O,y)});await m(`design/${f}.design.md`,Pe(f,p))}}let b={configHash:le(n),files:l,gitCommit:Ye(r),buildEnv:Ke()},w=Ze(b);return await mn(A(c,"manifest.json"),w),await pn(o,{recursive:!0,force:!0}),await fn(gn(o),{recursive:!0}),await go(c,o),t&&console.log(`\u2713 ${l.length} files \u2192 ${o}`),{manifest:b,outDir:o}}catch(l){throw await pn(c,{recursive:!0,force:!0}).catch(()=>{}),l}}s(Er,"build");async function Gr(e){let{config:n,outDir:o}=e,r;try{r=JSON.parse(await un(A(o,"manifest.json"),"utf8"))}catch{return!1}if(r.configHash!==le(n))return!1;for(let t of r.files){let i;try{i=await un(A(o,t.path))}catch{return!1}if(U(i)!==t.sha256)return!1}return!0}s(Gr,"check");async function yo(e,n,o){let r=A(e,n);await fn(gn(r),{recursive:!0}),await mn(r,o)}s(yo,"writeAt");export{Er as build,Gr as check};
@@ -28,9 +28,9 @@ import type { AcceptColorType, ColorPalleteInterface, ColorPalleteOverrideInterf
28
28
  /** Rotate hue 180° in OKLch space. Semantic shift vs HSL — see core for details. */
29
29
  export declare function getOppositeColor(color: AcceptColorType): string;
30
30
  /**
31
- * Derive `{ base, dark, action, active, light }` via OKLch lerp, com piso
32
- * perceptual mode-aware nos estados de interação — espelho byte-a-byte do
33
- * core (ADR-012; parity.test.ts). Overrides por slot passam verbatim.
31
+ * Derive `{ base, dark, action, active, light }` via OKLch lerp, with a
32
+ * mode-aware perceptual state floor on the interaction states — byte-for-byte
33
+ * mirror of the core (ADR-012; parity.test.ts). Per-slot overrides pass through verbatim.
34
34
  */
35
35
  export declare function mountSingleColor(color: AcceptColorType | ColorPalleteOverrideInterface, colors: ColorsInput): ColorPalleteInterface;
36
36
  /** 12-step greyscale ramp — perceptually uniform via OKLch lerp. */