@aginies/tokens 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -35,6 +35,19 @@ The preset provides the design-system names (`bg-panel`, `text-mute`, `border-li
35
35
  `green`, `blue`, `gray`, …) onto the token ramps, and keeps the shadcn/ui semantic names
36
36
  (`bg-background`, `text-muted-foreground`, …) working.
37
37
 
38
+ ## Motion and stacking
39
+
40
+ `--duration-*` / `--ease-enter` cover UI transitions. The brand loader in `@aginies/webuikit`
41
+ runs on its own tokens so a product can retune it without touching the UI timings:
42
+ `--motion-loader-spin` (6s, one revolution of the ring), `--motion-loader-pulse` (1.8s, one
43
+ heartbeat), `--motion-loader-breathe` (2.6s, one breath) and `--ease-loader`. In Tailwind:
44
+ `duration-loader-spin`, `ease-loader`.
45
+
46
+ The z scale is `base 0 · raised 10 · sticky 50 · panel 60 · dropdown 100 · modal 200 ·
47
+ toast 300`. `panel` is for side panels (artifact, inspector): above sticky bars, under
48
+ menus and popovers so a dropdown opened from the page still floats over the panel.
49
+ `z-panel` in Tailwind.
50
+
38
51
  ## JavaScript
39
52
 
40
53
  ```ts
package/dist/index.cjs CHANGED
@@ -341,7 +341,15 @@ var motion = {
341
341
  "duration-base": "200ms",
342
342
  "duration-slow": "300ms",
343
343
  "duration-enter": "600ms",
344
- "ease-enter": "cubic-bezier(0.2, 0.7, 0.2, 1)"
344
+ "ease-enter": "cubic-bezier(0.2, 0.7, 0.2, 1)",
345
+ /** Brand loader: one revolution of the outer ring. */
346
+ "motion-loader-spin": "6s",
347
+ /** Brand loader: one heartbeat of the halo. */
348
+ "motion-loader-pulse": "1.8s",
349
+ /** Brand loader: one breath of the crescent. */
350
+ "motion-loader-breathe": "2.6s",
351
+ /** Brand loader easing: quick start, long settle. */
352
+ "ease-loader": "cubic-bezier(0.45, 0, 0.2, 1)"
345
353
  };
346
354
  var layout = {
347
355
  max: "1200px",
@@ -363,6 +371,8 @@ var z = {
363
371
  base: 0,
364
372
  raised: 10,
365
373
  sticky: 50,
374
+ /** Side panels (artifact, inspector): above sticky bars, under menus and popovers. */
375
+ panel: 60,
366
376
  dropdown: 100,
367
377
  modal: 200,
368
378
  toast: 300
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/color.ts","../src/tokens.ts","../src/build-ramp.ts"],"sourcesContent":["/**\n * `@aginies/tokens` — JavaScript entry.\n *\n * Exposes the token source (for tooling, docs and runtime theming) and the colour helpers\n * used to derive ramps, so a whitelabel layer can compute the same values the CSS ships.\n */\n\nexport { buildRamp } from './build-ramp.ts'\nexport {\n contrast,\n hexToRgb,\n hslTriplet,\n luminance,\n oklchToHex,\n rgbChannels,\n rgbToHex,\n rgbToOklch,\n} from './color.ts'\nexport * from './tokens.ts'\n","/**\n * Small colour utilities: sRGB ⇄ OKLCH, hex parsing, HSL triplets.\n * Dependency-free so the token build can run under plain Node.\n */\n\nexport interface Rgb {\n r: number\n g: number\n b: number\n}\n\nexport interface Oklch {\n l: number\n c: number\n h: number\n}\n\nexport function hexToRgb(hex: string): Rgb {\n const h = hex.replace('#', '')\n const n =\n h.length === 3\n ? h\n .split('')\n .map((ch) => ch + ch)\n .join('')\n : h\n const v = Number.parseInt(n, 16)\n return { r: (v >> 16) & 255, g: (v >> 8) & 255, b: v & 255 }\n}\n\nexport function rgbToHex({ r, g, b }: Rgb): string {\n const to = (x: number) =>\n Math.round(clamp(x, 0, 255))\n .toString(16)\n .padStart(2, '0')\n return `#${to(r)}${to(g)}${to(b)}`.toUpperCase()\n}\n\n/** \"95 200 255\" — the channel form Tailwind's `<alpha-value>` colours need. */\nexport function rgbChannels(hex: string): string {\n const { r, g, b } = hexToRgb(hex)\n return `${r} ${g} ${b}`\n}\n\n/** \"204 100% 68.6%\" — the HSL triplet form the shadcn-era variables used. */\nexport function hslTriplet(hex: string): string {\n const { r, g, b } = hexToRgb(hex)\n const rn = r / 255\n const gn = g / 255\n const bn = b / 255\n const max = Math.max(rn, gn, bn)\n const min = Math.min(rn, gn, bn)\n const l = (max + min) / 2\n let h = 0\n let s = 0\n if (max !== min) {\n const d = max - min\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n if (max === rn) h = (gn - bn) / d + (gn < bn ? 6 : 0)\n else if (max === gn) h = (bn - rn) / d + 2\n else h = (rn - gn) / d + 4\n h *= 60\n }\n const f = (x: number) => Number(x.toFixed(1)).toString()\n return `${f(h)} ${f(s * 100)}% ${f(l * 100)}%`\n}\n\nfunction clamp(x: number, lo: number, hi: number): number {\n return Math.min(hi, Math.max(lo, x))\n}\n\nfunction srgbToLinear(c: number): number {\n const x = c / 255\n return x <= 0.04045 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4\n}\n\nfunction linearToSrgb(c: number): number {\n const x = c <= 0.0031308 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055\n return x * 255\n}\n\nexport function rgbToOklch(rgb: Rgb): Oklch {\n const r = srgbToLinear(rgb.r)\n const g = srgbToLinear(rgb.g)\n const b = srgbToLinear(rgb.b)\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b)\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b)\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b)\n const L = 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s\n const A = 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s\n const B = 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\n const c = Math.hypot(A, B)\n let h = (Math.atan2(B, A) * 180) / Math.PI\n if (h < 0) h += 360\n return { l: L, c, h }\n}\n\nfunction oklchToLinearRgb({ l: L, c, h }: Oklch): Rgb {\n const A = c * Math.cos((h * Math.PI) / 180)\n const B = c * Math.sin((h * Math.PI) / 180)\n const l = (L + 0.3963377774 * A + 0.2158037573 * B) ** 3\n const m = (L - 0.1055613458 * A - 0.0638541728 * B) ** 3\n const s = (L - 0.0894841775 * A - 1.291485548 * B) ** 3\n return {\n r: 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n g: -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n b: -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,\n }\n}\n\nfunction inGamut({ r, g, b }: Rgb): boolean {\n const eps = 1e-4\n return r >= -eps && r <= 1 + eps && g >= -eps && g <= 1 + eps && b >= -eps && b <= 1 + eps\n}\n\n/**\n * OKLCH → sRGB hex. If the colour is out of gamut the chroma is reduced until it fits,\n * which keeps lightness and hue (what the eye keys on) intact.\n */\nexport function oklchToHex(color: Oklch): string {\n let c = color.c\n let lin = oklchToLinearRgb({ ...color, c })\n while (!inGamut(lin) && c > 0.0005) {\n c *= 0.97\n lin = oklchToLinearRgb({ ...color, c })\n }\n return rgbToHex({ r: linearToSrgb(lin.r), g: linearToSrgb(lin.g), b: linearToSrgb(lin.b) })\n}\n\n/** Relative luminance (WCAG). */\nexport function luminance(hex: string): number {\n const { r, g, b } = hexToRgb(hex)\n return 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b)\n}\n\n/** WCAG contrast ratio between two hex colours. */\nexport function contrast(a: string, b: string): number {\n const la = luminance(a)\n const lb = luminance(b)\n const [hi, lo] = la > lb ? [la, lb] : [lb, la]\n return (hi + 0.05) / (lo + 0.05)\n}\n","/**\n * Aginies design tokens — the single source of truth.\n *\n * Values mirror the aginies.com design system (\"Control Room\", dark-first, one signal\n * colour) and extend it with what an application UI needs on top of a marketing site:\n * a third panel level, a strong border, status inks and soft washes, canvas tokens,\n * a data palette for charts, a spacing scale and dense UI type sizes.\n *\n * Everything under `dist/` is generated from this file by `src/build.ts`.\n */\n\nexport type ThemeName = 'dark' | 'light'\n\n/** Theme-dependent colour values. Hex unless noted. */\nexport interface Palette {\n /** Page ground. */\n bg: string\n /** Secondary ground: inputs, inside screens. */\n 'bg-2': string\n /** Card / panel. */\n panel: string\n /** Raised panel: popovers, active rows. */\n 'panel-2': string\n /** Hover / pressed surface on a panel. */\n 'panel-3': string\n /** Divider. */\n line: string\n /** Border. */\n 'line-2': string\n /** Strong border: focused or selected outlines that are not the signal colour. */\n 'line-3': string\n /** Primary text. */\n text: string\n /** Secondary text. */\n 'text-2': string\n /** Labels, quiet text. */\n mute: string\n /** The single accent. */\n signal: string\n /** Signal hover / pressed. */\n 'signal-2': string\n /** Ink on a signal fill. */\n 'signal-ink': string\n /** Soft signal wash (rgba). */\n 'signal-soft': string\n ok: string\n 'ok-ink': string\n 'ok-soft': string\n warn: string\n 'warn-ink': string\n 'warn-soft': string\n bad: string\n 'bad-ink': string\n 'bad-soft': string\n /** The one large shadow: floating shells. */\n shadow: string\n /** Popovers and menus. */\n 'shadow-sm': string\n /** Modal scrim (rgba). */\n overlay: string\n}\n\nexport const palettes: Record<ThemeName, Palette> = {\n dark: {\n bg: '#070A14',\n 'bg-2': '#0B1020',\n panel: '#0E1426',\n 'panel-2': '#121A30',\n 'panel-3': '#182240',\n line: '#1B2238',\n 'line-2': '#2A3350',\n 'line-3': '#3C4560',\n text: '#E7ECF7',\n 'text-2': '#A9B2CC',\n mute: '#7F8AA8',\n signal: '#5FC8FF',\n 'signal-2': '#01B1F7',\n 'signal-ink': '#06111F',\n 'signal-soft': 'rgba(95, 200, 255, 0.12)',\n ok: '#4FD1A0',\n 'ok-ink': '#06111F',\n 'ok-soft': 'rgba(79, 209, 160, 0.14)',\n warn: '#F2B35B',\n 'warn-ink': '#06111F',\n 'warn-soft': 'rgba(242, 179, 91, 0.14)',\n bad: '#FF7A7A',\n 'bad-ink': '#06111F',\n 'bad-soft': 'rgba(255, 122, 122, 0.14)',\n shadow: '0 20px 60px rgba(0, 0, 0, 0.45)',\n 'shadow-sm': '0 8px 24px rgba(0, 0, 0, 0.35)',\n overlay: 'rgba(7, 10, 20, 0.6)',\n },\n light: {\n bg: '#F4F6FA',\n 'bg-2': '#FFFFFF',\n panel: '#FFFFFF',\n 'panel-2': '#EEF1F7',\n 'panel-3': '#E4E9F2',\n line: '#DCE1EC',\n 'line-2': '#C5CCDB',\n 'line-3': '#A9B2CC',\n text: '#0B1220',\n 'text-2': '#3C4560',\n mute: '#6B7590',\n signal: '#0077C2',\n 'signal-2': '#005E9A',\n 'signal-ink': '#FFFFFF',\n 'signal-soft': 'rgba(0, 119, 194, 0.10)',\n // The site's light values (#0E8A5F, #A8661A) sit just under 4.5:1 as ink carriers; the\n // app fills buttons and badges with these, so they are shaded a step darker here.\n ok: '#0B7F57',\n 'ok-ink': '#FFFFFF',\n 'ok-soft': 'rgba(11, 127, 87, 0.12)',\n warn: '#9C5A12',\n 'warn-ink': '#FFFFFF',\n 'warn-soft': 'rgba(156, 90, 18, 0.12)',\n bad: '#B3261E',\n 'bad-ink': '#FFFFFF',\n 'bad-soft': 'rgba(179, 38, 30, 0.10)',\n shadow: '0 20px 50px rgba(11, 18, 32, 0.10)',\n 'shadow-sm': '0 8px 20px rgba(11, 18, 32, 0.08)',\n overlay: 'rgba(11, 18, 32, 0.45)',\n },\n}\n\n/** Status colours that get a generated 50–950 ramp per theme. */\nexport const rampedColors = ['signal', 'ok', 'warn', 'bad'] as const\nexport type RampedColor = (typeof rampedColors)[number]\n\nexport const rampSteps = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950] as const\nexport type RampStep = (typeof rampSteps)[number]\n\n/**\n * Lightness targets (OKLCH L) and chroma factors for each ramp step. The hue is taken\n * from the theme's base colour; chroma peaks around the middle and falls off at the ends\n * so tints and shades stay in gamut and read as the same colour.\n */\nexport const rampShape: Record<RampStep, { l: number; c: number }> = {\n 50: { l: 0.97, c: 0.18 },\n 100: { l: 0.935, c: 0.32 },\n 200: { l: 0.875, c: 0.52 },\n 300: { l: 0.795, c: 0.78 },\n 400: { l: 0.715, c: 0.95 },\n 500: { l: 0.635, c: 1 },\n 600: { l: 0.555, c: 0.95 },\n 700: { l: 0.475, c: 0.85 },\n 800: { l: 0.395, c: 0.7 },\n 900: { l: 0.315, c: 0.55 },\n 950: { l: 0.245, c: 0.45 },\n}\n\n/**\n * Fixed neutral ramp, identical in both themes. It is the site's own set of surfaces and\n * text colours laid out as a scale, so `neutral-*` utilities always land on a real token.\n */\nexport const neutral: Record<RampStep, string> = {\n 50: '#F4F6FA',\n 100: '#EEF1F7',\n 200: '#DCE1EC',\n 300: '#C5CCDB',\n 400: '#A9B2CC',\n 500: '#7F8AA8',\n 600: '#6B7590',\n 700: '#3C4560',\n 800: '#2A3350',\n 900: '#1B2238',\n 950: '#0B1020',\n}\n\n/** Chart / category palette. References semantic tokens so it follows the theme. */\nexport const data = ['signal', 'ok', 'warn', 'bad', 'text-2', 'mute'] as const\n\n/** Workflow canvas tokens, expressed as references to semantic tokens. */\nexport const canvas = {\n 'canvas-bg': 'bg',\n 'canvas-grid': 'line',\n 'canvas-node': 'panel',\n 'canvas-node-line': 'line-2',\n edge: 'line-2',\n 'edge-hover': 'text-2',\n 'edge-active': 'signal',\n execution: 'ok',\n} as const\n\nexport const fonts = {\n display:\n \"'Bricolage Grotesque Variable', 'Instrument Sans Variable', ui-sans-serif, system-ui, sans-serif\",\n body: \"'Instrument Sans Variable', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Helvetica, Arial, sans-serif\",\n mono: \"'JetBrains Mono Variable', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace\",\n} as const\n\nexport const radius = {\n sm: '4px',\n md: '6px',\n lg: '10px',\n xl: '14px',\n '2xl': '20px',\n full: '9999px',\n} as const\n\n/** 4-point spacing scale. */\nexport const space = {\n 1: '4px',\n 2: '8px',\n 3: '12px',\n 4: '16px',\n 5: '24px',\n 6: '32px',\n 7: '48px',\n 8: '64px',\n} as const\n\nexport interface TypeStyle {\n size: string\n lineHeight: string\n letterSpacing?: string\n family?: keyof typeof fonts\n weight?: number\n transform?: 'uppercase'\n /** Bricolage optical size axis. */\n opsz?: number\n}\n\n/** The type scale. Marketing sizes come from the site; `ui-*` are the dense app sizes. */\nexport const type: Record<string, TypeStyle> = {\n display: {\n size: 'clamp(40px, 6.4vw, 88px)',\n lineHeight: '0.96',\n letterSpacing: '-0.04em',\n family: 'display',\n weight: 600,\n opsz: 96,\n },\n h1: {\n size: 'clamp(36px, 5.2vw, 68px)',\n lineHeight: '1',\n letterSpacing: '-0.035em',\n family: 'display',\n weight: 600,\n opsz: 96,\n },\n h2: {\n size: 'clamp(28px, 3.8vw, 50px)',\n lineHeight: '1.04',\n letterSpacing: '-0.03em',\n family: 'display',\n weight: 600,\n opsz: 72,\n },\n h3: {\n size: 'clamp(20px, 2vw, 26px)',\n lineHeight: '1.2',\n letterSpacing: '-0.02em',\n family: 'display',\n weight: 600,\n },\n h4: { size: '17px', lineHeight: '1.3', letterSpacing: '-0.01em', family: 'display', weight: 600 },\n stat: {\n size: 'clamp(30px, 3.4vw, 44px)',\n lineHeight: '1',\n letterSpacing: '-0.03em',\n family: 'display',\n weight: 600,\n },\n lede: { size: 'clamp(17px, 1.4vw, 20px)', lineHeight: '1.5' },\n body: { size: '16px', lineHeight: '1.55' },\n 'body-2': { size: '15px', lineHeight: '1.5' },\n small: { size: '13.5px', lineHeight: '1.45' },\n eyebrow: {\n size: '11.5px',\n lineHeight: '1',\n letterSpacing: '0.14em',\n family: 'mono',\n weight: 500,\n transform: 'uppercase',\n },\n label: {\n size: '11px',\n lineHeight: '1',\n letterSpacing: '0.1em',\n family: 'mono',\n weight: 500,\n transform: 'uppercase',\n },\n tag: { size: '11.5px', lineHeight: '1', letterSpacing: '0.04em', family: 'mono' },\n ui: { size: '13px', lineHeight: '1.4' },\n 'ui-sm': { size: '12px', lineHeight: '1.35' },\n 'ui-xs': { size: '11px', lineHeight: '1.3' },\n}\n\nexport const motion = {\n 'duration-fast': '150ms',\n 'duration-base': '200ms',\n 'duration-slow': '300ms',\n 'duration-enter': '600ms',\n 'ease-enter': 'cubic-bezier(0.2, 0.7, 0.2, 1)',\n} as const\n\nexport const layout = {\n max: '1200px',\n gutter: 'clamp(20px, 4vw, 40px)',\n 'section-y': 'clamp(64px, 9vw, 128px)',\n 'section-y-tight': 'clamp(40px, 6vw, 80px)',\n} as const\n\nexport const breakpoints = {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n '2xl': '1536px',\n /** Site nav collapses here. */\n nav: '1180px',\n wide: '1340px',\n} as const\n\nexport const z = {\n base: 0,\n raised: 10,\n sticky: 50,\n dropdown: 100,\n modal: 200,\n toast: 300,\n} as const\n\nexport const focus = {\n /** Keyboard focus ring on any element. */\n ring: '2px solid var(--signal)',\n 'ring-offset': '3px',\n /** Form controls: soft halo instead of an outline. */\n 'field-ring': '0 0 0 3px var(--signal-soft)',\n} as const\n","import { hexToRgb, oklchToHex, rgbToOklch } from './color.ts'\nimport { type RampStep, rampShape, rampSteps } from './tokens.ts'\n\nexport type Ramp = Record<RampStep, string>\n\n/** Derives the 50–950 ramp for a base colour: hue from the base, lightness from the shape. */\nexport function buildRamp(baseHex: string): Ramp {\n const base = rgbToOklch(hexToRgb(baseHex))\n const out = {} as Ramp\n for (const step of rampSteps) {\n const { l, c } = rampShape[step]\n out[step] = oklchToHex({ l, c: base.c * c, h: base.h })\n }\n return out\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACiBO,SAAS,SAAS,KAAkB;AACzC,QAAM,IAAI,IAAI,QAAQ,KAAK,EAAE;AAC7B,QAAM,IACJ,EAAE,WAAW,IACT,EACG,MAAM,EAAE,EACR,IAAI,CAAC,OAAO,KAAK,EAAE,EACnB,KAAK,EAAE,IACV;AACN,QAAM,IAAI,OAAO,SAAS,GAAG,EAAE;AAC/B,SAAO,EAAE,GAAI,KAAK,KAAM,KAAK,GAAI,KAAK,IAAK,KAAK,GAAG,IAAI,IAAI;AAC7D;AAEO,SAAS,SAAS,EAAE,GAAG,GAAG,EAAE,GAAgB;AACjD,QAAM,KAAK,CAAC,MACV,KAAK,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,EACxB,SAAS,EAAE,EACX,SAAS,GAAG,GAAG;AACpB,SAAO,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,YAAY;AACjD;AAGO,SAAS,YAAY,KAAqB;AAC/C,QAAM,EAAE,GAAG,GAAG,EAAE,IAAI,SAAS,GAAG;AAChC,SAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACvB;AAGO,SAAS,WAAW,KAAqB;AAC9C,QAAM,EAAE,GAAG,GAAG,EAAE,IAAI,SAAS,GAAG;AAChC,QAAM,KAAK,IAAI;AACf,QAAM,KAAK,IAAI;AACf,QAAM,KAAK,IAAI;AACf,QAAM,MAAM,KAAK,IAAI,IAAI,IAAI,EAAE;AAC/B,QAAM,MAAM,KAAK,IAAI,IAAI,IAAI,EAAE;AAC/B,QAAM,KAAK,MAAM,OAAO;AACxB,MAAI,IAAI;AACR,MAAI,IAAI;AACR,MAAI,QAAQ,KAAK;AACf,UAAM,IAAI,MAAM;AAChB,QAAI,IAAI,MAAM,KAAK,IAAI,MAAM,OAAO,KAAK,MAAM;AAC/C,QAAI,QAAQ,GAAI,MAAK,KAAK,MAAM,KAAK,KAAK,KAAK,IAAI;AAAA,aAC1C,QAAQ,GAAI,MAAK,KAAK,MAAM,IAAI;AAAA,QACpC,MAAK,KAAK,MAAM,IAAI;AACzB,SAAK;AAAA,EACP;AACA,QAAM,IAAI,CAAC,MAAc,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE,SAAS;AACvD,SAAO,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC;AAC7C;AAEA,SAAS,MAAM,GAAW,IAAY,IAAoB;AACxD,SAAO,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC;AACrC;AAEA,SAAS,aAAa,GAAmB;AACvC,QAAM,IAAI,IAAI;AACd,SAAO,KAAK,UAAU,IAAI,UAAU,IAAI,SAAS,UAAU;AAC7D;AAEA,SAAS,aAAa,GAAmB;AACvC,QAAM,IAAI,KAAK,WAAY,IAAI,QAAQ,QAAQ,MAAM,IAAI,OAAO;AAChE,SAAO,IAAI;AACb;AAEO,SAAS,WAAW,KAAiB;AAC1C,QAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,QAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,QAAM,IAAI,aAAa,IAAI,CAAC;AAC5B,QAAM,IAAI,KAAK,KAAK,eAAe,IAAI,eAAe,IAAI,eAAe,CAAC;AAC1E,QAAM,IAAI,KAAK,KAAK,eAAe,IAAI,eAAe,IAAI,eAAe,CAAC;AAC1E,QAAM,IAAI,KAAK,KAAK,eAAe,IAAI,eAAe,IAAI,eAAe,CAAC;AAC1E,QAAM,IAAI,eAAe,IAAI,cAAc,IAAI,eAAe;AAC9D,QAAM,IAAI,eAAe,IAAI,cAAc,IAAI,eAAe;AAC9D,QAAM,IAAI,eAAe,IAAI,eAAe,IAAI,cAAc;AAC9D,QAAM,IAAI,KAAK,MAAM,GAAG,CAAC;AACzB,MAAI,IAAK,KAAK,MAAM,GAAG,CAAC,IAAI,MAAO,KAAK;AACxC,MAAI,IAAI,EAAG,MAAK;AAChB,SAAO,EAAE,GAAG,GAAG,GAAG,EAAE;AACtB;AAEA,SAAS,iBAAiB,EAAE,GAAG,GAAG,GAAG,EAAE,GAAe;AACpD,QAAM,IAAI,IAAI,KAAK,IAAK,IAAI,KAAK,KAAM,GAAG;AAC1C,QAAM,IAAI,IAAI,KAAK,IAAK,IAAI,KAAK,KAAM,GAAG;AAC1C,QAAM,KAAK,IAAI,eAAe,IAAI,eAAe,MAAM;AACvD,QAAM,KAAK,IAAI,eAAe,IAAI,eAAe,MAAM;AACvD,QAAM,KAAK,IAAI,eAAe,IAAI,cAAc,MAAM;AACtD,SAAO;AAAA,IACL,GAAG,eAAe,IAAI,eAAe,IAAI,eAAe;AAAA,IACxD,GAAG,gBAAgB,IAAI,eAAe,IAAI,eAAe;AAAA,IACzD,GAAG,gBAAgB,IAAI,eAAe,IAAI,cAAc;AAAA,EAC1D;AACF;AAEA,SAAS,QAAQ,EAAE,GAAG,GAAG,EAAE,GAAiB;AAC1C,QAAM,MAAM;AACZ,SAAO,KAAK,CAAC,OAAO,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,IAAI;AACzF;AAMO,SAAS,WAAW,OAAsB;AAC/C,MAAI,IAAI,MAAM;AACd,MAAI,MAAM,iBAAiB,EAAE,GAAG,OAAO,EAAE,CAAC;AAC1C,SAAO,CAAC,QAAQ,GAAG,KAAK,IAAI,MAAQ;AAClC,SAAK;AACL,UAAM,iBAAiB,EAAE,GAAG,OAAO,EAAE,CAAC;AAAA,EACxC;AACA,SAAO,SAAS,EAAE,GAAG,aAAa,IAAI,CAAC,GAAG,GAAG,aAAa,IAAI,CAAC,GAAG,GAAG,aAAa,IAAI,CAAC,EAAE,CAAC;AAC5F;AAGO,SAAS,UAAU,KAAqB;AAC7C,QAAM,EAAE,GAAG,GAAG,EAAE,IAAI,SAAS,GAAG;AAChC,SAAO,SAAS,aAAa,CAAC,IAAI,SAAS,aAAa,CAAC,IAAI,SAAS,aAAa,CAAC;AACtF;AAGO,SAAS,SAAS,GAAW,GAAmB;AACrD,QAAM,KAAK,UAAU,CAAC;AACtB,QAAM,KAAK,UAAU,CAAC;AACtB,QAAM,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AAC7C,UAAQ,KAAK,SAAS,KAAK;AAC7B;;;AC/EO,IAAM,WAAuC;AAAA,EAClD,MAAM;AAAA,IACJ,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,IACX,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,eAAe;AAAA,IACf,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,KAAK;AAAA,IACL,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,IACX,MAAM;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM;AAAA,IACN,UAAU;AAAA,IACV,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,eAAe;AAAA;AAAA;AAAA,IAGf,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,KAAK;AAAA,IACL,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AACF;AAGO,IAAM,eAAe,CAAC,UAAU,MAAM,QAAQ,KAAK;AAGnD,IAAM,YAAY,CAAC,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAQvE,IAAM,YAAwD;AAAA,EACnE,IAAI,EAAE,GAAG,MAAM,GAAG,KAAK;AAAA,EACvB,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK;AAAA,EACzB,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK;AAAA,EACzB,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK;AAAA,EACzB,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK;AAAA,EACzB,KAAK,EAAE,GAAG,OAAO,GAAG,EAAE;AAAA,EACtB,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK;AAAA,EACzB,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK;AAAA,EACzB,KAAK,EAAE,GAAG,OAAO,GAAG,IAAI;AAAA,EACxB,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK;AAAA,EACzB,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK;AAC3B;AAMO,IAAM,UAAoC;AAAA,EAC/C,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;AAGO,IAAM,OAAO,CAAC,UAAU,MAAM,QAAQ,OAAO,UAAU,MAAM;AAG7D,IAAM,SAAS;AAAA,EACpB,aAAa;AAAA,EACb,eAAe;AAAA,EACf,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,MAAM;AAAA,EACN,cAAc;AAAA,EACd,eAAe;AAAA,EACf,WAAW;AACb;AAEO,IAAM,QAAQ;AAAA,EACnB,SACE;AAAA,EACF,MAAM;AAAA,EACN,MAAM;AACR;AAEO,IAAM,SAAS;AAAA,EACpB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,MAAM;AACR;AAGO,IAAM,QAAQ;AAAA,EACnB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL;AAcO,IAAM,OAAkC;AAAA,EAC7C,SAAS;AAAA,IACP,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,IAAI;AAAA,IACF,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA,IAAI,EAAE,MAAM,QAAQ,YAAY,OAAO,eAAe,WAAW,QAAQ,WAAW,QAAQ,IAAI;AAAA,EAChG,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAAA,EACA,MAAM,EAAE,MAAM,4BAA4B,YAAY,MAAM;AAAA,EAC5D,MAAM,EAAE,MAAM,QAAQ,YAAY,OAAO;AAAA,EACzC,UAAU,EAAE,MAAM,QAAQ,YAAY,MAAM;AAAA,EAC5C,OAAO,EAAE,MAAM,UAAU,YAAY,OAAO;AAAA,EAC5C,SAAS;AAAA,IACP,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,EACb;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,EACb;AAAA,EACA,KAAK,EAAE,MAAM,UAAU,YAAY,KAAK,eAAe,UAAU,QAAQ,OAAO;AAAA,EAChF,IAAI,EAAE,MAAM,QAAQ,YAAY,MAAM;AAAA,EACtC,SAAS,EAAE,MAAM,QAAQ,YAAY,OAAO;AAAA,EAC5C,SAAS,EAAE,MAAM,QAAQ,YAAY,MAAM;AAC7C;AAEO,IAAM,SAAS;AAAA,EACpB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,cAAc;AAChB;AAEO,IAAM,SAAS;AAAA,EACpB,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,mBAAmB;AACrB;AAEO,IAAM,cAAc;AAAA,EACzB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,OAAO;AAAA;AAAA,EAEP,KAAK;AAAA,EACL,MAAM;AACR;AAEO,IAAM,IAAI;AAAA,EACf,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,OAAO;AACT;AAEO,IAAM,QAAQ;AAAA;AAAA,EAEnB,MAAM;AAAA,EACN,eAAe;AAAA;AAAA,EAEf,cAAc;AAChB;;;ACrUO,SAAS,UAAU,SAAuB;AAC/C,QAAM,OAAO,WAAW,SAAS,OAAO,CAAC;AACzC,QAAM,MAAM,CAAC;AACb,aAAW,QAAQ,WAAW;AAC5B,UAAM,EAAE,GAAG,EAAE,IAAI,UAAU,IAAI;AAC/B,QAAI,IAAI,IAAI,WAAW,EAAE,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;AAAA,EACxD;AACA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/color.ts","../src/tokens.ts","../src/build-ramp.ts"],"sourcesContent":["/**\n * `@aginies/tokens` — JavaScript entry.\n *\n * Exposes the token source (for tooling, docs and runtime theming) and the colour helpers\n * used to derive ramps, so a whitelabel layer can compute the same values the CSS ships.\n */\n\nexport { buildRamp } from './build-ramp.ts'\nexport {\n contrast,\n hexToRgb,\n hslTriplet,\n luminance,\n oklchToHex,\n rgbChannels,\n rgbToHex,\n rgbToOklch,\n} from './color.ts'\nexport * from './tokens.ts'\n","/**\n * Small colour utilities: sRGB ⇄ OKLCH, hex parsing, HSL triplets.\n * Dependency-free so the token build can run under plain Node.\n */\n\nexport interface Rgb {\n r: number\n g: number\n b: number\n}\n\nexport interface Oklch {\n l: number\n c: number\n h: number\n}\n\nexport function hexToRgb(hex: string): Rgb {\n const h = hex.replace('#', '')\n const n =\n h.length === 3\n ? h\n .split('')\n .map((ch) => ch + ch)\n .join('')\n : h\n const v = Number.parseInt(n, 16)\n return { r: (v >> 16) & 255, g: (v >> 8) & 255, b: v & 255 }\n}\n\nexport function rgbToHex({ r, g, b }: Rgb): string {\n const to = (x: number) =>\n Math.round(clamp(x, 0, 255))\n .toString(16)\n .padStart(2, '0')\n return `#${to(r)}${to(g)}${to(b)}`.toUpperCase()\n}\n\n/** \"95 200 255\" — the channel form Tailwind's `<alpha-value>` colours need. */\nexport function rgbChannels(hex: string): string {\n const { r, g, b } = hexToRgb(hex)\n return `${r} ${g} ${b}`\n}\n\n/** \"204 100% 68.6%\" — the HSL triplet form the shadcn-era variables used. */\nexport function hslTriplet(hex: string): string {\n const { r, g, b } = hexToRgb(hex)\n const rn = r / 255\n const gn = g / 255\n const bn = b / 255\n const max = Math.max(rn, gn, bn)\n const min = Math.min(rn, gn, bn)\n const l = (max + min) / 2\n let h = 0\n let s = 0\n if (max !== min) {\n const d = max - min\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n if (max === rn) h = (gn - bn) / d + (gn < bn ? 6 : 0)\n else if (max === gn) h = (bn - rn) / d + 2\n else h = (rn - gn) / d + 4\n h *= 60\n }\n const f = (x: number) => Number(x.toFixed(1)).toString()\n return `${f(h)} ${f(s * 100)}% ${f(l * 100)}%`\n}\n\nfunction clamp(x: number, lo: number, hi: number): number {\n return Math.min(hi, Math.max(lo, x))\n}\n\nfunction srgbToLinear(c: number): number {\n const x = c / 255\n return x <= 0.04045 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4\n}\n\nfunction linearToSrgb(c: number): number {\n const x = c <= 0.0031308 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055\n return x * 255\n}\n\nexport function rgbToOklch(rgb: Rgb): Oklch {\n const r = srgbToLinear(rgb.r)\n const g = srgbToLinear(rgb.g)\n const b = srgbToLinear(rgb.b)\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b)\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b)\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b)\n const L = 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s\n const A = 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s\n const B = 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\n const c = Math.hypot(A, B)\n let h = (Math.atan2(B, A) * 180) / Math.PI\n if (h < 0) h += 360\n return { l: L, c, h }\n}\n\nfunction oklchToLinearRgb({ l: L, c, h }: Oklch): Rgb {\n const A = c * Math.cos((h * Math.PI) / 180)\n const B = c * Math.sin((h * Math.PI) / 180)\n const l = (L + 0.3963377774 * A + 0.2158037573 * B) ** 3\n const m = (L - 0.1055613458 * A - 0.0638541728 * B) ** 3\n const s = (L - 0.0894841775 * A - 1.291485548 * B) ** 3\n return {\n r: 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n g: -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n b: -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,\n }\n}\n\nfunction inGamut({ r, g, b }: Rgb): boolean {\n const eps = 1e-4\n return r >= -eps && r <= 1 + eps && g >= -eps && g <= 1 + eps && b >= -eps && b <= 1 + eps\n}\n\n/**\n * OKLCH → sRGB hex. If the colour is out of gamut the chroma is reduced until it fits,\n * which keeps lightness and hue (what the eye keys on) intact.\n */\nexport function oklchToHex(color: Oklch): string {\n let c = color.c\n let lin = oklchToLinearRgb({ ...color, c })\n while (!inGamut(lin) && c > 0.0005) {\n c *= 0.97\n lin = oklchToLinearRgb({ ...color, c })\n }\n return rgbToHex({ r: linearToSrgb(lin.r), g: linearToSrgb(lin.g), b: linearToSrgb(lin.b) })\n}\n\n/** Relative luminance (WCAG). */\nexport function luminance(hex: string): number {\n const { r, g, b } = hexToRgb(hex)\n return 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b)\n}\n\n/** WCAG contrast ratio between two hex colours. */\nexport function contrast(a: string, b: string): number {\n const la = luminance(a)\n const lb = luminance(b)\n const [hi, lo] = la > lb ? [la, lb] : [lb, la]\n return (hi + 0.05) / (lo + 0.05)\n}\n","/**\n * Aginies design tokens — the single source of truth.\n *\n * Values mirror the aginies.com design system (\"Control Room\", dark-first, one signal\n * colour) and extend it with what an application UI needs on top of a marketing site:\n * a third panel level, a strong border, status inks and soft washes, canvas tokens,\n * a data palette for charts, a spacing scale and dense UI type sizes.\n *\n * Everything under `dist/` is generated from this file by `src/build.ts`.\n */\n\nexport type ThemeName = 'dark' | 'light'\n\n/** Theme-dependent colour values. Hex unless noted. */\nexport interface Palette {\n /** Page ground. */\n bg: string\n /** Secondary ground: inputs, inside screens. */\n 'bg-2': string\n /** Card / panel. */\n panel: string\n /** Raised panel: popovers, active rows. */\n 'panel-2': string\n /** Hover / pressed surface on a panel. */\n 'panel-3': string\n /** Divider. */\n line: string\n /** Border. */\n 'line-2': string\n /** Strong border: focused or selected outlines that are not the signal colour. */\n 'line-3': string\n /** Primary text. */\n text: string\n /** Secondary text. */\n 'text-2': string\n /** Labels, quiet text. */\n mute: string\n /** The single accent. */\n signal: string\n /** Signal hover / pressed. */\n 'signal-2': string\n /** Ink on a signal fill. */\n 'signal-ink': string\n /** Soft signal wash (rgba). */\n 'signal-soft': string\n ok: string\n 'ok-ink': string\n 'ok-soft': string\n warn: string\n 'warn-ink': string\n 'warn-soft': string\n bad: string\n 'bad-ink': string\n 'bad-soft': string\n /** The one large shadow: floating shells. */\n shadow: string\n /** Popovers and menus. */\n 'shadow-sm': string\n /** Modal scrim (rgba). */\n overlay: string\n}\n\nexport const palettes: Record<ThemeName, Palette> = {\n dark: {\n bg: '#070A14',\n 'bg-2': '#0B1020',\n panel: '#0E1426',\n 'panel-2': '#121A30',\n 'panel-3': '#182240',\n line: '#1B2238',\n 'line-2': '#2A3350',\n 'line-3': '#3C4560',\n text: '#E7ECF7',\n 'text-2': '#A9B2CC',\n mute: '#7F8AA8',\n signal: '#5FC8FF',\n 'signal-2': '#01B1F7',\n 'signal-ink': '#06111F',\n 'signal-soft': 'rgba(95, 200, 255, 0.12)',\n ok: '#4FD1A0',\n 'ok-ink': '#06111F',\n 'ok-soft': 'rgba(79, 209, 160, 0.14)',\n warn: '#F2B35B',\n 'warn-ink': '#06111F',\n 'warn-soft': 'rgba(242, 179, 91, 0.14)',\n bad: '#FF7A7A',\n 'bad-ink': '#06111F',\n 'bad-soft': 'rgba(255, 122, 122, 0.14)',\n shadow: '0 20px 60px rgba(0, 0, 0, 0.45)',\n 'shadow-sm': '0 8px 24px rgba(0, 0, 0, 0.35)',\n overlay: 'rgba(7, 10, 20, 0.6)',\n },\n light: {\n bg: '#F4F6FA',\n 'bg-2': '#FFFFFF',\n panel: '#FFFFFF',\n 'panel-2': '#EEF1F7',\n 'panel-3': '#E4E9F2',\n line: '#DCE1EC',\n 'line-2': '#C5CCDB',\n 'line-3': '#A9B2CC',\n text: '#0B1220',\n 'text-2': '#3C4560',\n mute: '#6B7590',\n signal: '#0077C2',\n 'signal-2': '#005E9A',\n 'signal-ink': '#FFFFFF',\n 'signal-soft': 'rgba(0, 119, 194, 0.10)',\n // The site's light values (#0E8A5F, #A8661A) sit just under 4.5:1 as ink carriers; the\n // app fills buttons and badges with these, so they are shaded a step darker here.\n ok: '#0B7F57',\n 'ok-ink': '#FFFFFF',\n 'ok-soft': 'rgba(11, 127, 87, 0.12)',\n warn: '#9C5A12',\n 'warn-ink': '#FFFFFF',\n 'warn-soft': 'rgba(156, 90, 18, 0.12)',\n bad: '#B3261E',\n 'bad-ink': '#FFFFFF',\n 'bad-soft': 'rgba(179, 38, 30, 0.10)',\n shadow: '0 20px 50px rgba(11, 18, 32, 0.10)',\n 'shadow-sm': '0 8px 20px rgba(11, 18, 32, 0.08)',\n overlay: 'rgba(11, 18, 32, 0.45)',\n },\n}\n\n/** Status colours that get a generated 50–950 ramp per theme. */\nexport const rampedColors = ['signal', 'ok', 'warn', 'bad'] as const\nexport type RampedColor = (typeof rampedColors)[number]\n\nexport const rampSteps = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950] as const\nexport type RampStep = (typeof rampSteps)[number]\n\n/**\n * Lightness targets (OKLCH L) and chroma factors for each ramp step. The hue is taken\n * from the theme's base colour; chroma peaks around the middle and falls off at the ends\n * so tints and shades stay in gamut and read as the same colour.\n */\nexport const rampShape: Record<RampStep, { l: number; c: number }> = {\n 50: { l: 0.97, c: 0.18 },\n 100: { l: 0.935, c: 0.32 },\n 200: { l: 0.875, c: 0.52 },\n 300: { l: 0.795, c: 0.78 },\n 400: { l: 0.715, c: 0.95 },\n 500: { l: 0.635, c: 1 },\n 600: { l: 0.555, c: 0.95 },\n 700: { l: 0.475, c: 0.85 },\n 800: { l: 0.395, c: 0.7 },\n 900: { l: 0.315, c: 0.55 },\n 950: { l: 0.245, c: 0.45 },\n}\n\n/**\n * Fixed neutral ramp, identical in both themes. It is the site's own set of surfaces and\n * text colours laid out as a scale, so `neutral-*` utilities always land on a real token.\n */\nexport const neutral: Record<RampStep, string> = {\n 50: '#F4F6FA',\n 100: '#EEF1F7',\n 200: '#DCE1EC',\n 300: '#C5CCDB',\n 400: '#A9B2CC',\n 500: '#7F8AA8',\n 600: '#6B7590',\n 700: '#3C4560',\n 800: '#2A3350',\n 900: '#1B2238',\n 950: '#0B1020',\n}\n\n/** Chart / category palette. References semantic tokens so it follows the theme. */\nexport const data = ['signal', 'ok', 'warn', 'bad', 'text-2', 'mute'] as const\n\n/** Workflow canvas tokens, expressed as references to semantic tokens. */\nexport const canvas = {\n 'canvas-bg': 'bg',\n 'canvas-grid': 'line',\n 'canvas-node': 'panel',\n 'canvas-node-line': 'line-2',\n edge: 'line-2',\n 'edge-hover': 'text-2',\n 'edge-active': 'signal',\n execution: 'ok',\n} as const\n\nexport const fonts = {\n display:\n \"'Bricolage Grotesque Variable', 'Instrument Sans Variable', ui-sans-serif, system-ui, sans-serif\",\n body: \"'Instrument Sans Variable', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Helvetica, Arial, sans-serif\",\n mono: \"'JetBrains Mono Variable', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace\",\n} as const\n\nexport const radius = {\n sm: '4px',\n md: '6px',\n lg: '10px',\n xl: '14px',\n '2xl': '20px',\n full: '9999px',\n} as const\n\n/** 4-point spacing scale. */\nexport const space = {\n 1: '4px',\n 2: '8px',\n 3: '12px',\n 4: '16px',\n 5: '24px',\n 6: '32px',\n 7: '48px',\n 8: '64px',\n} as const\n\nexport interface TypeStyle {\n size: string\n lineHeight: string\n letterSpacing?: string\n family?: keyof typeof fonts\n weight?: number\n transform?: 'uppercase'\n /** Bricolage optical size axis. */\n opsz?: number\n}\n\n/** The type scale. Marketing sizes come from the site; `ui-*` are the dense app sizes. */\nexport const type: Record<string, TypeStyle> = {\n display: {\n size: 'clamp(40px, 6.4vw, 88px)',\n lineHeight: '0.96',\n letterSpacing: '-0.04em',\n family: 'display',\n weight: 600,\n opsz: 96,\n },\n h1: {\n size: 'clamp(36px, 5.2vw, 68px)',\n lineHeight: '1',\n letterSpacing: '-0.035em',\n family: 'display',\n weight: 600,\n opsz: 96,\n },\n h2: {\n size: 'clamp(28px, 3.8vw, 50px)',\n lineHeight: '1.04',\n letterSpacing: '-0.03em',\n family: 'display',\n weight: 600,\n opsz: 72,\n },\n h3: {\n size: 'clamp(20px, 2vw, 26px)',\n lineHeight: '1.2',\n letterSpacing: '-0.02em',\n family: 'display',\n weight: 600,\n },\n h4: { size: '17px', lineHeight: '1.3', letterSpacing: '-0.01em', family: 'display', weight: 600 },\n stat: {\n size: 'clamp(30px, 3.4vw, 44px)',\n lineHeight: '1',\n letterSpacing: '-0.03em',\n family: 'display',\n weight: 600,\n },\n lede: { size: 'clamp(17px, 1.4vw, 20px)', lineHeight: '1.5' },\n body: { size: '16px', lineHeight: '1.55' },\n 'body-2': { size: '15px', lineHeight: '1.5' },\n small: { size: '13.5px', lineHeight: '1.45' },\n eyebrow: {\n size: '11.5px',\n lineHeight: '1',\n letterSpacing: '0.14em',\n family: 'mono',\n weight: 500,\n transform: 'uppercase',\n },\n label: {\n size: '11px',\n lineHeight: '1',\n letterSpacing: '0.1em',\n family: 'mono',\n weight: 500,\n transform: 'uppercase',\n },\n tag: { size: '11.5px', lineHeight: '1', letterSpacing: '0.04em', family: 'mono' },\n ui: { size: '13px', lineHeight: '1.4' },\n 'ui-sm': { size: '12px', lineHeight: '1.35' },\n 'ui-xs': { size: '11px', lineHeight: '1.3' },\n}\n\nexport const motion = {\n 'duration-fast': '150ms',\n 'duration-base': '200ms',\n 'duration-slow': '300ms',\n 'duration-enter': '600ms',\n 'ease-enter': 'cubic-bezier(0.2, 0.7, 0.2, 1)',\n /** Brand loader: one revolution of the outer ring. */\n 'motion-loader-spin': '6s',\n /** Brand loader: one heartbeat of the halo. */\n 'motion-loader-pulse': '1.8s',\n /** Brand loader: one breath of the crescent. */\n 'motion-loader-breathe': '2.6s',\n /** Brand loader easing: quick start, long settle. */\n 'ease-loader': 'cubic-bezier(0.45, 0, 0.2, 1)',\n} as const\n\nexport const layout = {\n max: '1200px',\n gutter: 'clamp(20px, 4vw, 40px)',\n 'section-y': 'clamp(64px, 9vw, 128px)',\n 'section-y-tight': 'clamp(40px, 6vw, 80px)',\n} as const\n\nexport const breakpoints = {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n '2xl': '1536px',\n /** Site nav collapses here. */\n nav: '1180px',\n wide: '1340px',\n} as const\n\nexport const z = {\n base: 0,\n raised: 10,\n sticky: 50,\n /** Side panels (artifact, inspector): above sticky bars, under menus and popovers. */\n panel: 60,\n dropdown: 100,\n modal: 200,\n toast: 300,\n} as const\n\nexport const focus = {\n /** Keyboard focus ring on any element. */\n ring: '2px solid var(--signal)',\n 'ring-offset': '3px',\n /** Form controls: soft halo instead of an outline. */\n 'field-ring': '0 0 0 3px var(--signal-soft)',\n} as const\n","import { hexToRgb, oklchToHex, rgbToOklch } from './color.ts'\nimport { type RampStep, rampShape, rampSteps } from './tokens.ts'\n\nexport type Ramp = Record<RampStep, string>\n\n/** Derives the 50–950 ramp for a base colour: hue from the base, lightness from the shape. */\nexport function buildRamp(baseHex: string): Ramp {\n const base = rgbToOklch(hexToRgb(baseHex))\n const out = {} as Ramp\n for (const step of rampSteps) {\n const { l, c } = rampShape[step]\n out[step] = oklchToHex({ l, c: base.c * c, h: base.h })\n }\n return out\n}\n"],"mappings":"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","names":[]}
package/dist/index.d.cts CHANGED
@@ -132,6 +132,14 @@ declare const motion: {
132
132
  readonly 'duration-slow': "300ms";
133
133
  readonly 'duration-enter': "600ms";
134
134
  readonly 'ease-enter': "cubic-bezier(0.2, 0.7, 0.2, 1)";
135
+ /** Brand loader: one revolution of the outer ring. */
136
+ readonly 'motion-loader-spin': "6s";
137
+ /** Brand loader: one heartbeat of the halo. */
138
+ readonly 'motion-loader-pulse': "1.8s";
139
+ /** Brand loader: one breath of the crescent. */
140
+ readonly 'motion-loader-breathe': "2.6s";
141
+ /** Brand loader easing: quick start, long settle. */
142
+ readonly 'ease-loader': "cubic-bezier(0.45, 0, 0.2, 1)";
135
143
  };
136
144
  declare const layout: {
137
145
  readonly max: "1200px";
@@ -153,6 +161,8 @@ declare const z: {
153
161
  readonly base: 0;
154
162
  readonly raised: 10;
155
163
  readonly sticky: 50;
164
+ /** Side panels (artifact, inspector): above sticky bars, under menus and popovers. */
165
+ readonly panel: 60;
156
166
  readonly dropdown: 100;
157
167
  readonly modal: 200;
158
168
  readonly toast: 300;
package/dist/index.d.ts CHANGED
@@ -132,6 +132,14 @@ declare const motion: {
132
132
  readonly 'duration-slow': "300ms";
133
133
  readonly 'duration-enter': "600ms";
134
134
  readonly 'ease-enter': "cubic-bezier(0.2, 0.7, 0.2, 1)";
135
+ /** Brand loader: one revolution of the outer ring. */
136
+ readonly 'motion-loader-spin': "6s";
137
+ /** Brand loader: one heartbeat of the halo. */
138
+ readonly 'motion-loader-pulse': "1.8s";
139
+ /** Brand loader: one breath of the crescent. */
140
+ readonly 'motion-loader-breathe': "2.6s";
141
+ /** Brand loader easing: quick start, long settle. */
142
+ readonly 'ease-loader': "cubic-bezier(0.45, 0, 0.2, 1)";
135
143
  };
136
144
  declare const layout: {
137
145
  readonly max: "1200px";
@@ -153,6 +161,8 @@ declare const z: {
153
161
  readonly base: 0;
154
162
  readonly raised: 10;
155
163
  readonly sticky: 50;
164
+ /** Side panels (artifact, inspector): above sticky bars, under menus and popovers. */
165
+ readonly panel: 60;
156
166
  readonly dropdown: 100;
157
167
  readonly modal: 200;
158
168
  readonly toast: 300;
package/dist/index.js CHANGED
@@ -291,7 +291,15 @@ var motion = {
291
291
  "duration-base": "200ms",
292
292
  "duration-slow": "300ms",
293
293
  "duration-enter": "600ms",
294
- "ease-enter": "cubic-bezier(0.2, 0.7, 0.2, 1)"
294
+ "ease-enter": "cubic-bezier(0.2, 0.7, 0.2, 1)",
295
+ /** Brand loader: one revolution of the outer ring. */
296
+ "motion-loader-spin": "6s",
297
+ /** Brand loader: one heartbeat of the halo. */
298
+ "motion-loader-pulse": "1.8s",
299
+ /** Brand loader: one breath of the crescent. */
300
+ "motion-loader-breathe": "2.6s",
301
+ /** Brand loader easing: quick start, long settle. */
302
+ "ease-loader": "cubic-bezier(0.45, 0, 0.2, 1)"
295
303
  };
296
304
  var layout = {
297
305
  max: "1200px",
@@ -313,6 +321,8 @@ var z = {
313
321
  base: 0,
314
322
  raised: 10,
315
323
  sticky: 50,
324
+ /** Side panels (artifact, inspector): above sticky bars, under menus and popovers. */
325
+ panel: 60,
316
326
  dropdown: 100,
317
327
  modal: 200,
318
328
  toast: 300
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/color.ts","../src/tokens.ts","../src/build-ramp.ts"],"sourcesContent":["/**\n * Small colour utilities: sRGB ⇄ OKLCH, hex parsing, HSL triplets.\n * Dependency-free so the token build can run under plain Node.\n */\n\nexport interface Rgb {\n r: number\n g: number\n b: number\n}\n\nexport interface Oklch {\n l: number\n c: number\n h: number\n}\n\nexport function hexToRgb(hex: string): Rgb {\n const h = hex.replace('#', '')\n const n =\n h.length === 3\n ? h\n .split('')\n .map((ch) => ch + ch)\n .join('')\n : h\n const v = Number.parseInt(n, 16)\n return { r: (v >> 16) & 255, g: (v >> 8) & 255, b: v & 255 }\n}\n\nexport function rgbToHex({ r, g, b }: Rgb): string {\n const to = (x: number) =>\n Math.round(clamp(x, 0, 255))\n .toString(16)\n .padStart(2, '0')\n return `#${to(r)}${to(g)}${to(b)}`.toUpperCase()\n}\n\n/** \"95 200 255\" — the channel form Tailwind's `<alpha-value>` colours need. */\nexport function rgbChannels(hex: string): string {\n const { r, g, b } = hexToRgb(hex)\n return `${r} ${g} ${b}`\n}\n\n/** \"204 100% 68.6%\" — the HSL triplet form the shadcn-era variables used. */\nexport function hslTriplet(hex: string): string {\n const { r, g, b } = hexToRgb(hex)\n const rn = r / 255\n const gn = g / 255\n const bn = b / 255\n const max = Math.max(rn, gn, bn)\n const min = Math.min(rn, gn, bn)\n const l = (max + min) / 2\n let h = 0\n let s = 0\n if (max !== min) {\n const d = max - min\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n if (max === rn) h = (gn - bn) / d + (gn < bn ? 6 : 0)\n else if (max === gn) h = (bn - rn) / d + 2\n else h = (rn - gn) / d + 4\n h *= 60\n }\n const f = (x: number) => Number(x.toFixed(1)).toString()\n return `${f(h)} ${f(s * 100)}% ${f(l * 100)}%`\n}\n\nfunction clamp(x: number, lo: number, hi: number): number {\n return Math.min(hi, Math.max(lo, x))\n}\n\nfunction srgbToLinear(c: number): number {\n const x = c / 255\n return x <= 0.04045 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4\n}\n\nfunction linearToSrgb(c: number): number {\n const x = c <= 0.0031308 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055\n return x * 255\n}\n\nexport function rgbToOklch(rgb: Rgb): Oklch {\n const r = srgbToLinear(rgb.r)\n const g = srgbToLinear(rgb.g)\n const b = srgbToLinear(rgb.b)\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b)\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b)\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b)\n const L = 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s\n const A = 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s\n const B = 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\n const c = Math.hypot(A, B)\n let h = (Math.atan2(B, A) * 180) / Math.PI\n if (h < 0) h += 360\n return { l: L, c, h }\n}\n\nfunction oklchToLinearRgb({ l: L, c, h }: Oklch): Rgb {\n const A = c * Math.cos((h * Math.PI) / 180)\n const B = c * Math.sin((h * Math.PI) / 180)\n const l = (L + 0.3963377774 * A + 0.2158037573 * B) ** 3\n const m = (L - 0.1055613458 * A - 0.0638541728 * B) ** 3\n const s = (L - 0.0894841775 * A - 1.291485548 * B) ** 3\n return {\n r: 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n g: -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n b: -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,\n }\n}\n\nfunction inGamut({ r, g, b }: Rgb): boolean {\n const eps = 1e-4\n return r >= -eps && r <= 1 + eps && g >= -eps && g <= 1 + eps && b >= -eps && b <= 1 + eps\n}\n\n/**\n * OKLCH → sRGB hex. If the colour is out of gamut the chroma is reduced until it fits,\n * which keeps lightness and hue (what the eye keys on) intact.\n */\nexport function oklchToHex(color: Oklch): string {\n let c = color.c\n let lin = oklchToLinearRgb({ ...color, c })\n while (!inGamut(lin) && c > 0.0005) {\n c *= 0.97\n lin = oklchToLinearRgb({ ...color, c })\n }\n return rgbToHex({ r: linearToSrgb(lin.r), g: linearToSrgb(lin.g), b: linearToSrgb(lin.b) })\n}\n\n/** Relative luminance (WCAG). */\nexport function luminance(hex: string): number {\n const { r, g, b } = hexToRgb(hex)\n return 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b)\n}\n\n/** WCAG contrast ratio between two hex colours. */\nexport function contrast(a: string, b: string): number {\n const la = luminance(a)\n const lb = luminance(b)\n const [hi, lo] = la > lb ? [la, lb] : [lb, la]\n return (hi + 0.05) / (lo + 0.05)\n}\n","/**\n * Aginies design tokens — the single source of truth.\n *\n * Values mirror the aginies.com design system (\"Control Room\", dark-first, one signal\n * colour) and extend it with what an application UI needs on top of a marketing site:\n * a third panel level, a strong border, status inks and soft washes, canvas tokens,\n * a data palette for charts, a spacing scale and dense UI type sizes.\n *\n * Everything under `dist/` is generated from this file by `src/build.ts`.\n */\n\nexport type ThemeName = 'dark' | 'light'\n\n/** Theme-dependent colour values. Hex unless noted. */\nexport interface Palette {\n /** Page ground. */\n bg: string\n /** Secondary ground: inputs, inside screens. */\n 'bg-2': string\n /** Card / panel. */\n panel: string\n /** Raised panel: popovers, active rows. */\n 'panel-2': string\n /** Hover / pressed surface on a panel. */\n 'panel-3': string\n /** Divider. */\n line: string\n /** Border. */\n 'line-2': string\n /** Strong border: focused or selected outlines that are not the signal colour. */\n 'line-3': string\n /** Primary text. */\n text: string\n /** Secondary text. */\n 'text-2': string\n /** Labels, quiet text. */\n mute: string\n /** The single accent. */\n signal: string\n /** Signal hover / pressed. */\n 'signal-2': string\n /** Ink on a signal fill. */\n 'signal-ink': string\n /** Soft signal wash (rgba). */\n 'signal-soft': string\n ok: string\n 'ok-ink': string\n 'ok-soft': string\n warn: string\n 'warn-ink': string\n 'warn-soft': string\n bad: string\n 'bad-ink': string\n 'bad-soft': string\n /** The one large shadow: floating shells. */\n shadow: string\n /** Popovers and menus. */\n 'shadow-sm': string\n /** Modal scrim (rgba). */\n overlay: string\n}\n\nexport const palettes: Record<ThemeName, Palette> = {\n dark: {\n bg: '#070A14',\n 'bg-2': '#0B1020',\n panel: '#0E1426',\n 'panel-2': '#121A30',\n 'panel-3': '#182240',\n line: '#1B2238',\n 'line-2': '#2A3350',\n 'line-3': '#3C4560',\n text: '#E7ECF7',\n 'text-2': '#A9B2CC',\n mute: '#7F8AA8',\n signal: '#5FC8FF',\n 'signal-2': '#01B1F7',\n 'signal-ink': '#06111F',\n 'signal-soft': 'rgba(95, 200, 255, 0.12)',\n ok: '#4FD1A0',\n 'ok-ink': '#06111F',\n 'ok-soft': 'rgba(79, 209, 160, 0.14)',\n warn: '#F2B35B',\n 'warn-ink': '#06111F',\n 'warn-soft': 'rgba(242, 179, 91, 0.14)',\n bad: '#FF7A7A',\n 'bad-ink': '#06111F',\n 'bad-soft': 'rgba(255, 122, 122, 0.14)',\n shadow: '0 20px 60px rgba(0, 0, 0, 0.45)',\n 'shadow-sm': '0 8px 24px rgba(0, 0, 0, 0.35)',\n overlay: 'rgba(7, 10, 20, 0.6)',\n },\n light: {\n bg: '#F4F6FA',\n 'bg-2': '#FFFFFF',\n panel: '#FFFFFF',\n 'panel-2': '#EEF1F7',\n 'panel-3': '#E4E9F2',\n line: '#DCE1EC',\n 'line-2': '#C5CCDB',\n 'line-3': '#A9B2CC',\n text: '#0B1220',\n 'text-2': '#3C4560',\n mute: '#6B7590',\n signal: '#0077C2',\n 'signal-2': '#005E9A',\n 'signal-ink': '#FFFFFF',\n 'signal-soft': 'rgba(0, 119, 194, 0.10)',\n // The site's light values (#0E8A5F, #A8661A) sit just under 4.5:1 as ink carriers; the\n // app fills buttons and badges with these, so they are shaded a step darker here.\n ok: '#0B7F57',\n 'ok-ink': '#FFFFFF',\n 'ok-soft': 'rgba(11, 127, 87, 0.12)',\n warn: '#9C5A12',\n 'warn-ink': '#FFFFFF',\n 'warn-soft': 'rgba(156, 90, 18, 0.12)',\n bad: '#B3261E',\n 'bad-ink': '#FFFFFF',\n 'bad-soft': 'rgba(179, 38, 30, 0.10)',\n shadow: '0 20px 50px rgba(11, 18, 32, 0.10)',\n 'shadow-sm': '0 8px 20px rgba(11, 18, 32, 0.08)',\n overlay: 'rgba(11, 18, 32, 0.45)',\n },\n}\n\n/** Status colours that get a generated 50–950 ramp per theme. */\nexport const rampedColors = ['signal', 'ok', 'warn', 'bad'] as const\nexport type RampedColor = (typeof rampedColors)[number]\n\nexport const rampSteps = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950] as const\nexport type RampStep = (typeof rampSteps)[number]\n\n/**\n * Lightness targets (OKLCH L) and chroma factors for each ramp step. The hue is taken\n * from the theme's base colour; chroma peaks around the middle and falls off at the ends\n * so tints and shades stay in gamut and read as the same colour.\n */\nexport const rampShape: Record<RampStep, { l: number; c: number }> = {\n 50: { l: 0.97, c: 0.18 },\n 100: { l: 0.935, c: 0.32 },\n 200: { l: 0.875, c: 0.52 },\n 300: { l: 0.795, c: 0.78 },\n 400: { l: 0.715, c: 0.95 },\n 500: { l: 0.635, c: 1 },\n 600: { l: 0.555, c: 0.95 },\n 700: { l: 0.475, c: 0.85 },\n 800: { l: 0.395, c: 0.7 },\n 900: { l: 0.315, c: 0.55 },\n 950: { l: 0.245, c: 0.45 },\n}\n\n/**\n * Fixed neutral ramp, identical in both themes. It is the site's own set of surfaces and\n * text colours laid out as a scale, so `neutral-*` utilities always land on a real token.\n */\nexport const neutral: Record<RampStep, string> = {\n 50: '#F4F6FA',\n 100: '#EEF1F7',\n 200: '#DCE1EC',\n 300: '#C5CCDB',\n 400: '#A9B2CC',\n 500: '#7F8AA8',\n 600: '#6B7590',\n 700: '#3C4560',\n 800: '#2A3350',\n 900: '#1B2238',\n 950: '#0B1020',\n}\n\n/** Chart / category palette. References semantic tokens so it follows the theme. */\nexport const data = ['signal', 'ok', 'warn', 'bad', 'text-2', 'mute'] as const\n\n/** Workflow canvas tokens, expressed as references to semantic tokens. */\nexport const canvas = {\n 'canvas-bg': 'bg',\n 'canvas-grid': 'line',\n 'canvas-node': 'panel',\n 'canvas-node-line': 'line-2',\n edge: 'line-2',\n 'edge-hover': 'text-2',\n 'edge-active': 'signal',\n execution: 'ok',\n} as const\n\nexport const fonts = {\n display:\n \"'Bricolage Grotesque Variable', 'Instrument Sans Variable', ui-sans-serif, system-ui, sans-serif\",\n body: \"'Instrument Sans Variable', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Helvetica, Arial, sans-serif\",\n mono: \"'JetBrains Mono Variable', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace\",\n} as const\n\nexport const radius = {\n sm: '4px',\n md: '6px',\n lg: '10px',\n xl: '14px',\n '2xl': '20px',\n full: '9999px',\n} as const\n\n/** 4-point spacing scale. */\nexport const space = {\n 1: '4px',\n 2: '8px',\n 3: '12px',\n 4: '16px',\n 5: '24px',\n 6: '32px',\n 7: '48px',\n 8: '64px',\n} as const\n\nexport interface TypeStyle {\n size: string\n lineHeight: string\n letterSpacing?: string\n family?: keyof typeof fonts\n weight?: number\n transform?: 'uppercase'\n /** Bricolage optical size axis. */\n opsz?: number\n}\n\n/** The type scale. Marketing sizes come from the site; `ui-*` are the dense app sizes. */\nexport const type: Record<string, TypeStyle> = {\n display: {\n size: 'clamp(40px, 6.4vw, 88px)',\n lineHeight: '0.96',\n letterSpacing: '-0.04em',\n family: 'display',\n weight: 600,\n opsz: 96,\n },\n h1: {\n size: 'clamp(36px, 5.2vw, 68px)',\n lineHeight: '1',\n letterSpacing: '-0.035em',\n family: 'display',\n weight: 600,\n opsz: 96,\n },\n h2: {\n size: 'clamp(28px, 3.8vw, 50px)',\n lineHeight: '1.04',\n letterSpacing: '-0.03em',\n family: 'display',\n weight: 600,\n opsz: 72,\n },\n h3: {\n size: 'clamp(20px, 2vw, 26px)',\n lineHeight: '1.2',\n letterSpacing: '-0.02em',\n family: 'display',\n weight: 600,\n },\n h4: { size: '17px', lineHeight: '1.3', letterSpacing: '-0.01em', family: 'display', weight: 600 },\n stat: {\n size: 'clamp(30px, 3.4vw, 44px)',\n lineHeight: '1',\n letterSpacing: '-0.03em',\n family: 'display',\n weight: 600,\n },\n lede: { size: 'clamp(17px, 1.4vw, 20px)', lineHeight: '1.5' },\n body: { size: '16px', lineHeight: '1.55' },\n 'body-2': { size: '15px', lineHeight: '1.5' },\n small: { size: '13.5px', lineHeight: '1.45' },\n eyebrow: {\n size: '11.5px',\n lineHeight: '1',\n letterSpacing: '0.14em',\n family: 'mono',\n weight: 500,\n transform: 'uppercase',\n },\n label: {\n size: '11px',\n lineHeight: '1',\n letterSpacing: '0.1em',\n family: 'mono',\n weight: 500,\n transform: 'uppercase',\n },\n tag: { size: '11.5px', lineHeight: '1', letterSpacing: '0.04em', family: 'mono' },\n ui: { size: '13px', lineHeight: '1.4' },\n 'ui-sm': { size: '12px', lineHeight: '1.35' },\n 'ui-xs': { size: '11px', lineHeight: '1.3' },\n}\n\nexport const motion = {\n 'duration-fast': '150ms',\n 'duration-base': '200ms',\n 'duration-slow': '300ms',\n 'duration-enter': '600ms',\n 'ease-enter': 'cubic-bezier(0.2, 0.7, 0.2, 1)',\n} as const\n\nexport const layout = {\n max: '1200px',\n gutter: 'clamp(20px, 4vw, 40px)',\n 'section-y': 'clamp(64px, 9vw, 128px)',\n 'section-y-tight': 'clamp(40px, 6vw, 80px)',\n} as const\n\nexport const breakpoints = {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n '2xl': '1536px',\n /** Site nav collapses here. */\n nav: '1180px',\n wide: '1340px',\n} as const\n\nexport const z = {\n base: 0,\n raised: 10,\n sticky: 50,\n dropdown: 100,\n modal: 200,\n toast: 300,\n} as const\n\nexport const focus = {\n /** Keyboard focus ring on any element. */\n ring: '2px solid var(--signal)',\n 'ring-offset': '3px',\n /** Form controls: soft halo instead of an outline. */\n 'field-ring': '0 0 0 3px var(--signal-soft)',\n} as const\n","import { hexToRgb, oklchToHex, rgbToOklch } from './color.ts'\nimport { type RampStep, rampShape, rampSteps } from './tokens.ts'\n\nexport type Ramp = Record<RampStep, string>\n\n/** Derives the 50–950 ramp for a base colour: hue from the base, lightness from the shape. */\nexport function buildRamp(baseHex: string): Ramp {\n const base = rgbToOklch(hexToRgb(baseHex))\n const out = {} as Ramp\n for (const step of rampSteps) {\n const { l, c } = rampShape[step]\n out[step] = oklchToHex({ l, c: base.c * c, h: base.h })\n }\n return out\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/color.ts","../src/tokens.ts","../src/build-ramp.ts"],"sourcesContent":["/**\n * Small colour utilities: sRGB ⇄ OKLCH, hex parsing, HSL triplets.\n * Dependency-free so the token build can run under plain Node.\n */\n\nexport interface Rgb {\n r: number\n g: number\n b: number\n}\n\nexport interface Oklch {\n l: number\n c: number\n h: number\n}\n\nexport function hexToRgb(hex: string): Rgb {\n const h = hex.replace('#', '')\n const n =\n h.length === 3\n ? h\n .split('')\n .map((ch) => ch + ch)\n .join('')\n : h\n const v = Number.parseInt(n, 16)\n return { r: (v >> 16) & 255, g: (v >> 8) & 255, b: v & 255 }\n}\n\nexport function rgbToHex({ r, g, b }: Rgb): string {\n const to = (x: number) =>\n Math.round(clamp(x, 0, 255))\n .toString(16)\n .padStart(2, '0')\n return `#${to(r)}${to(g)}${to(b)}`.toUpperCase()\n}\n\n/** \"95 200 255\" — the channel form Tailwind's `<alpha-value>` colours need. */\nexport function rgbChannels(hex: string): string {\n const { r, g, b } = hexToRgb(hex)\n return `${r} ${g} ${b}`\n}\n\n/** \"204 100% 68.6%\" — the HSL triplet form the shadcn-era variables used. */\nexport function hslTriplet(hex: string): string {\n const { r, g, b } = hexToRgb(hex)\n const rn = r / 255\n const gn = g / 255\n const bn = b / 255\n const max = Math.max(rn, gn, bn)\n const min = Math.min(rn, gn, bn)\n const l = (max + min) / 2\n let h = 0\n let s = 0\n if (max !== min) {\n const d = max - min\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n if (max === rn) h = (gn - bn) / d + (gn < bn ? 6 : 0)\n else if (max === gn) h = (bn - rn) / d + 2\n else h = (rn - gn) / d + 4\n h *= 60\n }\n const f = (x: number) => Number(x.toFixed(1)).toString()\n return `${f(h)} ${f(s * 100)}% ${f(l * 100)}%`\n}\n\nfunction clamp(x: number, lo: number, hi: number): number {\n return Math.min(hi, Math.max(lo, x))\n}\n\nfunction srgbToLinear(c: number): number {\n const x = c / 255\n return x <= 0.04045 ? x / 12.92 : ((x + 0.055) / 1.055) ** 2.4\n}\n\nfunction linearToSrgb(c: number): number {\n const x = c <= 0.0031308 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055\n return x * 255\n}\n\nexport function rgbToOklch(rgb: Rgb): Oklch {\n const r = srgbToLinear(rgb.r)\n const g = srgbToLinear(rgb.g)\n const b = srgbToLinear(rgb.b)\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b)\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b)\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b)\n const L = 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s\n const A = 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s\n const B = 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\n const c = Math.hypot(A, B)\n let h = (Math.atan2(B, A) * 180) / Math.PI\n if (h < 0) h += 360\n return { l: L, c, h }\n}\n\nfunction oklchToLinearRgb({ l: L, c, h }: Oklch): Rgb {\n const A = c * Math.cos((h * Math.PI) / 180)\n const B = c * Math.sin((h * Math.PI) / 180)\n const l = (L + 0.3963377774 * A + 0.2158037573 * B) ** 3\n const m = (L - 0.1055613458 * A - 0.0638541728 * B) ** 3\n const s = (L - 0.0894841775 * A - 1.291485548 * B) ** 3\n return {\n r: 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n g: -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n b: -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,\n }\n}\n\nfunction inGamut({ r, g, b }: Rgb): boolean {\n const eps = 1e-4\n return r >= -eps && r <= 1 + eps && g >= -eps && g <= 1 + eps && b >= -eps && b <= 1 + eps\n}\n\n/**\n * OKLCH → sRGB hex. If the colour is out of gamut the chroma is reduced until it fits,\n * which keeps lightness and hue (what the eye keys on) intact.\n */\nexport function oklchToHex(color: Oklch): string {\n let c = color.c\n let lin = oklchToLinearRgb({ ...color, c })\n while (!inGamut(lin) && c > 0.0005) {\n c *= 0.97\n lin = oklchToLinearRgb({ ...color, c })\n }\n return rgbToHex({ r: linearToSrgb(lin.r), g: linearToSrgb(lin.g), b: linearToSrgb(lin.b) })\n}\n\n/** Relative luminance (WCAG). */\nexport function luminance(hex: string): number {\n const { r, g, b } = hexToRgb(hex)\n return 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b)\n}\n\n/** WCAG contrast ratio between two hex colours. */\nexport function contrast(a: string, b: string): number {\n const la = luminance(a)\n const lb = luminance(b)\n const [hi, lo] = la > lb ? [la, lb] : [lb, la]\n return (hi + 0.05) / (lo + 0.05)\n}\n","/**\n * Aginies design tokens — the single source of truth.\n *\n * Values mirror the aginies.com design system (\"Control Room\", dark-first, one signal\n * colour) and extend it with what an application UI needs on top of a marketing site:\n * a third panel level, a strong border, status inks and soft washes, canvas tokens,\n * a data palette for charts, a spacing scale and dense UI type sizes.\n *\n * Everything under `dist/` is generated from this file by `src/build.ts`.\n */\n\nexport type ThemeName = 'dark' | 'light'\n\n/** Theme-dependent colour values. Hex unless noted. */\nexport interface Palette {\n /** Page ground. */\n bg: string\n /** Secondary ground: inputs, inside screens. */\n 'bg-2': string\n /** Card / panel. */\n panel: string\n /** Raised panel: popovers, active rows. */\n 'panel-2': string\n /** Hover / pressed surface on a panel. */\n 'panel-3': string\n /** Divider. */\n line: string\n /** Border. */\n 'line-2': string\n /** Strong border: focused or selected outlines that are not the signal colour. */\n 'line-3': string\n /** Primary text. */\n text: string\n /** Secondary text. */\n 'text-2': string\n /** Labels, quiet text. */\n mute: string\n /** The single accent. */\n signal: string\n /** Signal hover / pressed. */\n 'signal-2': string\n /** Ink on a signal fill. */\n 'signal-ink': string\n /** Soft signal wash (rgba). */\n 'signal-soft': string\n ok: string\n 'ok-ink': string\n 'ok-soft': string\n warn: string\n 'warn-ink': string\n 'warn-soft': string\n bad: string\n 'bad-ink': string\n 'bad-soft': string\n /** The one large shadow: floating shells. */\n shadow: string\n /** Popovers and menus. */\n 'shadow-sm': string\n /** Modal scrim (rgba). */\n overlay: string\n}\n\nexport const palettes: Record<ThemeName, Palette> = {\n dark: {\n bg: '#070A14',\n 'bg-2': '#0B1020',\n panel: '#0E1426',\n 'panel-2': '#121A30',\n 'panel-3': '#182240',\n line: '#1B2238',\n 'line-2': '#2A3350',\n 'line-3': '#3C4560',\n text: '#E7ECF7',\n 'text-2': '#A9B2CC',\n mute: '#7F8AA8',\n signal: '#5FC8FF',\n 'signal-2': '#01B1F7',\n 'signal-ink': '#06111F',\n 'signal-soft': 'rgba(95, 200, 255, 0.12)',\n ok: '#4FD1A0',\n 'ok-ink': '#06111F',\n 'ok-soft': 'rgba(79, 209, 160, 0.14)',\n warn: '#F2B35B',\n 'warn-ink': '#06111F',\n 'warn-soft': 'rgba(242, 179, 91, 0.14)',\n bad: '#FF7A7A',\n 'bad-ink': '#06111F',\n 'bad-soft': 'rgba(255, 122, 122, 0.14)',\n shadow: '0 20px 60px rgba(0, 0, 0, 0.45)',\n 'shadow-sm': '0 8px 24px rgba(0, 0, 0, 0.35)',\n overlay: 'rgba(7, 10, 20, 0.6)',\n },\n light: {\n bg: '#F4F6FA',\n 'bg-2': '#FFFFFF',\n panel: '#FFFFFF',\n 'panel-2': '#EEF1F7',\n 'panel-3': '#E4E9F2',\n line: '#DCE1EC',\n 'line-2': '#C5CCDB',\n 'line-3': '#A9B2CC',\n text: '#0B1220',\n 'text-2': '#3C4560',\n mute: '#6B7590',\n signal: '#0077C2',\n 'signal-2': '#005E9A',\n 'signal-ink': '#FFFFFF',\n 'signal-soft': 'rgba(0, 119, 194, 0.10)',\n // The site's light values (#0E8A5F, #A8661A) sit just under 4.5:1 as ink carriers; the\n // app fills buttons and badges with these, so they are shaded a step darker here.\n ok: '#0B7F57',\n 'ok-ink': '#FFFFFF',\n 'ok-soft': 'rgba(11, 127, 87, 0.12)',\n warn: '#9C5A12',\n 'warn-ink': '#FFFFFF',\n 'warn-soft': 'rgba(156, 90, 18, 0.12)',\n bad: '#B3261E',\n 'bad-ink': '#FFFFFF',\n 'bad-soft': 'rgba(179, 38, 30, 0.10)',\n shadow: '0 20px 50px rgba(11, 18, 32, 0.10)',\n 'shadow-sm': '0 8px 20px rgba(11, 18, 32, 0.08)',\n overlay: 'rgba(11, 18, 32, 0.45)',\n },\n}\n\n/** Status colours that get a generated 50–950 ramp per theme. */\nexport const rampedColors = ['signal', 'ok', 'warn', 'bad'] as const\nexport type RampedColor = (typeof rampedColors)[number]\n\nexport const rampSteps = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950] as const\nexport type RampStep = (typeof rampSteps)[number]\n\n/**\n * Lightness targets (OKLCH L) and chroma factors for each ramp step. The hue is taken\n * from the theme's base colour; chroma peaks around the middle and falls off at the ends\n * so tints and shades stay in gamut and read as the same colour.\n */\nexport const rampShape: Record<RampStep, { l: number; c: number }> = {\n 50: { l: 0.97, c: 0.18 },\n 100: { l: 0.935, c: 0.32 },\n 200: { l: 0.875, c: 0.52 },\n 300: { l: 0.795, c: 0.78 },\n 400: { l: 0.715, c: 0.95 },\n 500: { l: 0.635, c: 1 },\n 600: { l: 0.555, c: 0.95 },\n 700: { l: 0.475, c: 0.85 },\n 800: { l: 0.395, c: 0.7 },\n 900: { l: 0.315, c: 0.55 },\n 950: { l: 0.245, c: 0.45 },\n}\n\n/**\n * Fixed neutral ramp, identical in both themes. It is the site's own set of surfaces and\n * text colours laid out as a scale, so `neutral-*` utilities always land on a real token.\n */\nexport const neutral: Record<RampStep, string> = {\n 50: '#F4F6FA',\n 100: '#EEF1F7',\n 200: '#DCE1EC',\n 300: '#C5CCDB',\n 400: '#A9B2CC',\n 500: '#7F8AA8',\n 600: '#6B7590',\n 700: '#3C4560',\n 800: '#2A3350',\n 900: '#1B2238',\n 950: '#0B1020',\n}\n\n/** Chart / category palette. References semantic tokens so it follows the theme. */\nexport const data = ['signal', 'ok', 'warn', 'bad', 'text-2', 'mute'] as const\n\n/** Workflow canvas tokens, expressed as references to semantic tokens. */\nexport const canvas = {\n 'canvas-bg': 'bg',\n 'canvas-grid': 'line',\n 'canvas-node': 'panel',\n 'canvas-node-line': 'line-2',\n edge: 'line-2',\n 'edge-hover': 'text-2',\n 'edge-active': 'signal',\n execution: 'ok',\n} as const\n\nexport const fonts = {\n display:\n \"'Bricolage Grotesque Variable', 'Instrument Sans Variable', ui-sans-serif, system-ui, sans-serif\",\n body: \"'Instrument Sans Variable', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Helvetica, Arial, sans-serif\",\n mono: \"'JetBrains Mono Variable', ui-monospace, SFMono-Regular, Menlo, Consolas, monospace\",\n} as const\n\nexport const radius = {\n sm: '4px',\n md: '6px',\n lg: '10px',\n xl: '14px',\n '2xl': '20px',\n full: '9999px',\n} as const\n\n/** 4-point spacing scale. */\nexport const space = {\n 1: '4px',\n 2: '8px',\n 3: '12px',\n 4: '16px',\n 5: '24px',\n 6: '32px',\n 7: '48px',\n 8: '64px',\n} as const\n\nexport interface TypeStyle {\n size: string\n lineHeight: string\n letterSpacing?: string\n family?: keyof typeof fonts\n weight?: number\n transform?: 'uppercase'\n /** Bricolage optical size axis. */\n opsz?: number\n}\n\n/** The type scale. Marketing sizes come from the site; `ui-*` are the dense app sizes. */\nexport const type: Record<string, TypeStyle> = {\n display: {\n size: 'clamp(40px, 6.4vw, 88px)',\n lineHeight: '0.96',\n letterSpacing: '-0.04em',\n family: 'display',\n weight: 600,\n opsz: 96,\n },\n h1: {\n size: 'clamp(36px, 5.2vw, 68px)',\n lineHeight: '1',\n letterSpacing: '-0.035em',\n family: 'display',\n weight: 600,\n opsz: 96,\n },\n h2: {\n size: 'clamp(28px, 3.8vw, 50px)',\n lineHeight: '1.04',\n letterSpacing: '-0.03em',\n family: 'display',\n weight: 600,\n opsz: 72,\n },\n h3: {\n size: 'clamp(20px, 2vw, 26px)',\n lineHeight: '1.2',\n letterSpacing: '-0.02em',\n family: 'display',\n weight: 600,\n },\n h4: { size: '17px', lineHeight: '1.3', letterSpacing: '-0.01em', family: 'display', weight: 600 },\n stat: {\n size: 'clamp(30px, 3.4vw, 44px)',\n lineHeight: '1',\n letterSpacing: '-0.03em',\n family: 'display',\n weight: 600,\n },\n lede: { size: 'clamp(17px, 1.4vw, 20px)', lineHeight: '1.5' },\n body: { size: '16px', lineHeight: '1.55' },\n 'body-2': { size: '15px', lineHeight: '1.5' },\n small: { size: '13.5px', lineHeight: '1.45' },\n eyebrow: {\n size: '11.5px',\n lineHeight: '1',\n letterSpacing: '0.14em',\n family: 'mono',\n weight: 500,\n transform: 'uppercase',\n },\n label: {\n size: '11px',\n lineHeight: '1',\n letterSpacing: '0.1em',\n family: 'mono',\n weight: 500,\n transform: 'uppercase',\n },\n tag: { size: '11.5px', lineHeight: '1', letterSpacing: '0.04em', family: 'mono' },\n ui: { size: '13px', lineHeight: '1.4' },\n 'ui-sm': { size: '12px', lineHeight: '1.35' },\n 'ui-xs': { size: '11px', lineHeight: '1.3' },\n}\n\nexport const motion = {\n 'duration-fast': '150ms',\n 'duration-base': '200ms',\n 'duration-slow': '300ms',\n 'duration-enter': '600ms',\n 'ease-enter': 'cubic-bezier(0.2, 0.7, 0.2, 1)',\n /** Brand loader: one revolution of the outer ring. */\n 'motion-loader-spin': '6s',\n /** Brand loader: one heartbeat of the halo. */\n 'motion-loader-pulse': '1.8s',\n /** Brand loader: one breath of the crescent. */\n 'motion-loader-breathe': '2.6s',\n /** Brand loader easing: quick start, long settle. */\n 'ease-loader': 'cubic-bezier(0.45, 0, 0.2, 1)',\n} as const\n\nexport const layout = {\n max: '1200px',\n gutter: 'clamp(20px, 4vw, 40px)',\n 'section-y': 'clamp(64px, 9vw, 128px)',\n 'section-y-tight': 'clamp(40px, 6vw, 80px)',\n} as const\n\nexport const breakpoints = {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n '2xl': '1536px',\n /** Site nav collapses here. */\n nav: '1180px',\n wide: '1340px',\n} as const\n\nexport const z = {\n base: 0,\n raised: 10,\n sticky: 50,\n /** Side panels (artifact, inspector): above sticky bars, under menus and popovers. */\n panel: 60,\n dropdown: 100,\n modal: 200,\n toast: 300,\n} as const\n\nexport const focus = {\n /** Keyboard focus ring on any element. */\n ring: '2px solid var(--signal)',\n 'ring-offset': '3px',\n /** Form controls: soft halo instead of an outline. */\n 'field-ring': '0 0 0 3px var(--signal-soft)',\n} as const\n","import { hexToRgb, oklchToHex, rgbToOklch } from './color.ts'\nimport { type RampStep, rampShape, rampSteps } from './tokens.ts'\n\nexport type Ramp = Record<RampStep, string>\n\n/** Derives the 50–950 ramp for a base colour: hue from the base, lightness from the shape. */\nexport function buildRamp(baseHex: string): Ramp {\n const base = rgbToOklch(hexToRgb(baseHex))\n const out = {} as Ramp\n for (const step of rampSteps) {\n const { l, c } = rampShape[step]\n out[step] = oklchToHex({ l, c: base.c * c, h: base.h })\n }\n return out\n}\n"],"mappings":"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","names":[]}
@@ -1,4 +1,4 @@
1
- /* @aginies/tokens v0.1.0 — generated from src/tokens.ts. Do not edit by hand. */
1
+ /* @aginies/tokens v0.2.0 — generated from src/tokens.ts. Do not edit by hand. */
2
2
 
3
3
  /* Pre-design-system variable names mapped onto the new tokens. Remove after migration. */
4
4
  :root {
package/dist/preset.cjs CHANGED
@@ -205,6 +205,7 @@ var preset = {
205
205
  zIndex: {
206
206
  raised: "var(--z-raised)",
207
207
  sticky: "var(--z-sticky)",
208
+ panel: "var(--z-panel)",
208
209
  dropdown: "var(--z-dropdown)",
209
210
  modal: "var(--z-modal)",
210
211
  toast: "var(--z-toast)"
@@ -214,10 +215,14 @@ var preset = {
214
215
  fast: "var(--duration-fast)",
215
216
  base: "var(--duration-base)",
216
217
  slow: "var(--duration-slow)",
217
- enter: "var(--duration-enter)"
218
+ enter: "var(--duration-enter)",
219
+ "loader-spin": "var(--motion-loader-spin)",
220
+ "loader-pulse": "var(--motion-loader-pulse)",
221
+ "loader-breathe": "var(--motion-loader-breathe)"
218
222
  },
219
223
  transitionTimingFunction: {
220
- enter: "var(--ease-enter)"
224
+ enter: "var(--ease-enter)",
225
+ loader: "var(--ease-loader)"
221
226
  },
222
227
  keyframes: {
223
228
  "fade-up": {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/preset.ts"],"sourcesContent":["/**\n * Tailwind CSS v3 preset for the Aginies design system.\n *\n * Every colour resolves to a CSS custom property from `tokens.css`, so the same utilities\n * follow the theme (`.dark` / `.light` / `[data-theme]`) and the `.room` inversion.\n *\n * Two families of names are provided:\n * - the design-system names (`bg-panel`, `text-mute`, `border-line-2`, `bg-signal`, …)\n * - the standard Tailwind palettes (`red`, `amber`, `gray`, `blue`, …) remapped onto the\n * status ramps, so existing utility classes keep working without ever leaving the tokens\n * - the shadcn/ui semantic names (`bg-background`, `text-muted-foreground`, …)\n *\n * No dependencies beyond Tailwind's own types; usable without the JS entry.\n */\nimport type { Config } from 'tailwindcss'\n\ntype Steps = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 950\nconst STEPS: Steps[] = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950]\n\n/** Semantic token with alpha-modifier support: `bg-panel/50`. */\nconst t = (name: string) => `rgb(var(--${name}-rgb) / <alpha-value>)`\n\n/** Generated status ramp: `text-signal-300`, `bg-bad-50/40`. */\nconst ramp = (name: string, extra: Record<string, string> = {}) => ({\n DEFAULT: t(name),\n ink: t(`${name}-ink`),\n soft: `var(--${name}-soft)`,\n ...Object.fromEntries(STEPS.map((s) => [s, `rgb(var(--${name}-${s}) / <alpha-value>)`])),\n ...extra,\n})\n\nconst neutral = Object.fromEntries(STEPS.map((s) => [s, t(`neutral-${s}`)]))\n\nconst signal = ramp('signal', { 2: t('signal-2') })\nconst ok = ramp('ok')\nconst warn = ramp('warn')\nconst bad = ramp('bad')\n\nconst fontSize: NonNullable<NonNullable<Config['theme']>['fontSize']> = {\n // dense UI sizes (Tailwind's default names, retuned)\n xs: ['var(--fs-ui-xs)', { lineHeight: 'var(--lh-ui-xs)' }],\n sm: ['var(--fs-ui)', { lineHeight: 'var(--lh-ui)' }],\n base: ['var(--fs-body-2)', { lineHeight: 'var(--lh-body-2)' }],\n lg: ['var(--fs-h4)', { lineHeight: 'var(--lh-h4)', letterSpacing: 'var(--ls-h4)' }],\n xl: ['20px', { lineHeight: '1.3', letterSpacing: '-0.015em' }],\n // design-system scale\n display: [\n 'var(--fs-display)',\n { lineHeight: 'var(--lh-display)', letterSpacing: 'var(--ls-display)', fontWeight: '600' },\n ],\n h1: [\n 'var(--fs-h1)',\n { lineHeight: 'var(--lh-h1)', letterSpacing: 'var(--ls-h1)', fontWeight: '600' },\n ],\n h2: [\n 'var(--fs-h2)',\n { lineHeight: 'var(--lh-h2)', letterSpacing: 'var(--ls-h2)', fontWeight: '600' },\n ],\n h3: [\n 'var(--fs-h3)',\n { lineHeight: 'var(--lh-h3)', letterSpacing: 'var(--ls-h3)', fontWeight: '600' },\n ],\n h4: [\n 'var(--fs-h4)',\n { lineHeight: 'var(--lh-h4)', letterSpacing: 'var(--ls-h4)', fontWeight: '600' },\n ],\n stat: [\n 'var(--fs-stat)',\n { lineHeight: 'var(--lh-stat)', letterSpacing: 'var(--ls-stat)', fontWeight: '600' },\n ],\n lede: ['var(--fs-lede)', { lineHeight: 'var(--lh-lede)' }],\n body: ['var(--fs-body)', { lineHeight: 'var(--lh-body)' }],\n 'body-2': ['var(--fs-body-2)', { lineHeight: 'var(--lh-body-2)' }],\n small: ['var(--fs-small)', { lineHeight: 'var(--lh-small)' }],\n eyebrow: [\n 'var(--fs-eyebrow)',\n { lineHeight: 'var(--lh-eyebrow)', letterSpacing: 'var(--ls-eyebrow)', fontWeight: '500' },\n ],\n label: [\n 'var(--fs-label)',\n { lineHeight: 'var(--lh-label)', letterSpacing: 'var(--ls-label)', fontWeight: '500' },\n ],\n tag: ['var(--fs-tag)', { lineHeight: 'var(--lh-tag)', letterSpacing: 'var(--ls-tag)' }],\n ui: ['var(--fs-ui)', { lineHeight: 'var(--lh-ui)' }],\n 'ui-sm': ['var(--fs-ui-sm)', { lineHeight: 'var(--lh-ui-sm)' }],\n 'ui-xs': ['var(--fs-ui-xs)', { lineHeight: 'var(--lh-ui-xs)' }],\n}\n\nconst preset = {\n darkMode: ['class'],\n theme: {\n extend: {\n colors: {\n // ── design-system names ──\n bg: { DEFAULT: t('bg'), 2: t('bg-2') },\n panel: { DEFAULT: t('panel'), 2: t('panel-2'), 3: t('panel-3') },\n line: { DEFAULT: t('line'), 2: t('line-2'), 3: t('line-3') },\n text: { DEFAULT: t('text'), 2: t('text-2') },\n mute: t('mute'),\n signal,\n ok,\n warn,\n bad,\n overlay: 'var(--overlay)',\n data: Object.fromEntries([1, 2, 3, 4, 5, 6].map((i) => [i, `var(--data-${i})`])),\n canvas: {\n DEFAULT: 'var(--canvas-bg)',\n grid: 'var(--canvas-grid)',\n node: 'var(--canvas-node)',\n 'node-line': 'var(--canvas-node-line)',\n },\n edge: { DEFAULT: 'var(--edge)', hover: 'var(--edge-hover)', active: 'var(--edge-active)' },\n execution: 'var(--execution)',\n\n // ── standard palettes, remapped onto tokens ──\n neutral,\n gray: neutral,\n slate: neutral,\n zinc: neutral,\n stone: neutral,\n red: bad,\n rose: bad,\n pink: bad,\n amber: warn,\n orange: warn,\n yellow: warn,\n green: ok,\n emerald: ok,\n teal: ok,\n lime: ok,\n blue: signal,\n sky: signal,\n cyan: signal,\n indigo: signal,\n violet: signal,\n purple: signal,\n fuchsia: signal,\n\n // ── shadcn/ui semantic names ──\n background: t('bg'),\n foreground: t('text'),\n card: { DEFAULT: t('panel'), foreground: t('text') },\n popover: { DEFAULT: t('panel-2'), foreground: t('text') },\n primary: { DEFAULT: t('text'), foreground: t('bg') },\n secondary: { DEFAULT: t('panel-2'), foreground: t('text') },\n muted: { DEFAULT: t('panel-2'), foreground: t('mute') },\n accent: { DEFAULT: t('panel-3'), foreground: t('text') },\n destructive: { DEFAULT: t('bad'), foreground: t('bad-ink') },\n border: t('line'),\n input: { DEFAULT: t('line-2'), background: t('bg-2') },\n ring: t('signal'),\n chart: Object.fromEntries([1, 2, 3, 4, 5].map((i) => [i, `var(--data-${i})`])),\n },\n fontFamily: {\n display: ['var(--font-display)'],\n sans: ['var(--font-body)'],\n body: ['var(--font-body)'],\n mono: ['var(--font-mono)'],\n },\n fontSize,\n fontWeight: {\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n },\n letterSpacing: {\n tighter: '-0.04em',\n tight: '-0.025em',\n snug: '-0.01em',\n normal: '0',\n wide: '0.04em',\n wider: '0.1em',\n widest: '0.14em',\n },\n borderRadius: {\n none: '0',\n sm: 'var(--radius-sm)',\n DEFAULT: 'var(--radius-md)',\n md: 'var(--radius-md)',\n lg: 'var(--radius-lg)',\n xl: 'var(--radius-xl)',\n '2xl': 'var(--radius-2xl)',\n full: 'var(--radius-full)',\n },\n boxShadow: {\n sm: 'var(--shadow-sm)',\n DEFAULT: 'var(--shadow-sm)',\n md: 'var(--shadow-sm)',\n lg: 'var(--shadow)',\n xl: 'var(--shadow)',\n '2xl': 'var(--shadow)',\n field: 'var(--focus-field-ring)',\n none: 'none',\n },\n ringColor: { DEFAULT: t('signal') },\n ringOffsetColor: { DEFAULT: t('bg') },\n outlineColor: { DEFAULT: t('signal') },\n spacing: {\n gutter: 'var(--gutter)',\n 'section-y': 'var(--section-y)',\n 'section-y-tight': 'var(--section-y-tight)',\n },\n maxWidth: { wrap: 'var(--max)' },\n screens: { nav: '1180px', wide: '1340px' },\n zIndex: {\n raised: 'var(--z-raised)',\n sticky: 'var(--z-sticky)',\n dropdown: 'var(--z-dropdown)',\n modal: 'var(--z-modal)',\n toast: 'var(--z-toast)',\n },\n transitionDuration: {\n DEFAULT: 'var(--duration-fast)',\n fast: 'var(--duration-fast)',\n base: 'var(--duration-base)',\n slow: 'var(--duration-slow)',\n enter: 'var(--duration-enter)',\n },\n transitionTimingFunction: {\n enter: 'var(--ease-enter)',\n },\n keyframes: {\n 'fade-up': {\n from: { opacity: '0', transform: 'translateY(10px)' },\n to: { opacity: '1', transform: 'none' },\n },\n },\n animation: {\n 'fade-up': 'fade-up var(--duration-enter) var(--ease-enter) both',\n },\n },\n },\n} satisfies Partial<Config>\n\nexport default preset\nexport { preset as aginiesPreset }\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/preset.ts"],"sourcesContent":["/**\n * Tailwind CSS v3 preset for the Aginies design system.\n *\n * Every colour resolves to a CSS custom property from `tokens.css`, so the same utilities\n * follow the theme (`.dark` / `.light` / `[data-theme]`) and the `.room` inversion.\n *\n * Two families of names are provided:\n * - the design-system names (`bg-panel`, `text-mute`, `border-line-2`, `bg-signal`, …)\n * - the standard Tailwind palettes (`red`, `amber`, `gray`, `blue`, …) remapped onto the\n * status ramps, so existing utility classes keep working without ever leaving the tokens\n * - the shadcn/ui semantic names (`bg-background`, `text-muted-foreground`, …)\n *\n * No dependencies beyond Tailwind's own types; usable without the JS entry.\n */\nimport type { Config } from 'tailwindcss'\n\ntype Steps = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 950\nconst STEPS: Steps[] = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950]\n\n/** Semantic token with alpha-modifier support: `bg-panel/50`. */\nconst t = (name: string) => `rgb(var(--${name}-rgb) / <alpha-value>)`\n\n/** Generated status ramp: `text-signal-300`, `bg-bad-50/40`. */\nconst ramp = (name: string, extra: Record<string, string> = {}) => ({\n DEFAULT: t(name),\n ink: t(`${name}-ink`),\n soft: `var(--${name}-soft)`,\n ...Object.fromEntries(STEPS.map((s) => [s, `rgb(var(--${name}-${s}) / <alpha-value>)`])),\n ...extra,\n})\n\nconst neutral = Object.fromEntries(STEPS.map((s) => [s, t(`neutral-${s}`)]))\n\nconst signal = ramp('signal', { 2: t('signal-2') })\nconst ok = ramp('ok')\nconst warn = ramp('warn')\nconst bad = ramp('bad')\n\nconst fontSize: NonNullable<NonNullable<Config['theme']>['fontSize']> = {\n // dense UI sizes (Tailwind's default names, retuned)\n xs: ['var(--fs-ui-xs)', { lineHeight: 'var(--lh-ui-xs)' }],\n sm: ['var(--fs-ui)', { lineHeight: 'var(--lh-ui)' }],\n base: ['var(--fs-body-2)', { lineHeight: 'var(--lh-body-2)' }],\n lg: ['var(--fs-h4)', { lineHeight: 'var(--lh-h4)', letterSpacing: 'var(--ls-h4)' }],\n xl: ['20px', { lineHeight: '1.3', letterSpacing: '-0.015em' }],\n // design-system scale\n display: [\n 'var(--fs-display)',\n { lineHeight: 'var(--lh-display)', letterSpacing: 'var(--ls-display)', fontWeight: '600' },\n ],\n h1: [\n 'var(--fs-h1)',\n { lineHeight: 'var(--lh-h1)', letterSpacing: 'var(--ls-h1)', fontWeight: '600' },\n ],\n h2: [\n 'var(--fs-h2)',\n { lineHeight: 'var(--lh-h2)', letterSpacing: 'var(--ls-h2)', fontWeight: '600' },\n ],\n h3: [\n 'var(--fs-h3)',\n { lineHeight: 'var(--lh-h3)', letterSpacing: 'var(--ls-h3)', fontWeight: '600' },\n ],\n h4: [\n 'var(--fs-h4)',\n { lineHeight: 'var(--lh-h4)', letterSpacing: 'var(--ls-h4)', fontWeight: '600' },\n ],\n stat: [\n 'var(--fs-stat)',\n { lineHeight: 'var(--lh-stat)', letterSpacing: 'var(--ls-stat)', fontWeight: '600' },\n ],\n lede: ['var(--fs-lede)', { lineHeight: 'var(--lh-lede)' }],\n body: ['var(--fs-body)', { lineHeight: 'var(--lh-body)' }],\n 'body-2': ['var(--fs-body-2)', { lineHeight: 'var(--lh-body-2)' }],\n small: ['var(--fs-small)', { lineHeight: 'var(--lh-small)' }],\n eyebrow: [\n 'var(--fs-eyebrow)',\n { lineHeight: 'var(--lh-eyebrow)', letterSpacing: 'var(--ls-eyebrow)', fontWeight: '500' },\n ],\n label: [\n 'var(--fs-label)',\n { lineHeight: 'var(--lh-label)', letterSpacing: 'var(--ls-label)', fontWeight: '500' },\n ],\n tag: ['var(--fs-tag)', { lineHeight: 'var(--lh-tag)', letterSpacing: 'var(--ls-tag)' }],\n ui: ['var(--fs-ui)', { lineHeight: 'var(--lh-ui)' }],\n 'ui-sm': ['var(--fs-ui-sm)', { lineHeight: 'var(--lh-ui-sm)' }],\n 'ui-xs': ['var(--fs-ui-xs)', { lineHeight: 'var(--lh-ui-xs)' }],\n}\n\nconst preset = {\n darkMode: ['class'],\n theme: {\n extend: {\n colors: {\n // ── design-system names ──\n bg: { DEFAULT: t('bg'), 2: t('bg-2') },\n panel: { DEFAULT: t('panel'), 2: t('panel-2'), 3: t('panel-3') },\n line: { DEFAULT: t('line'), 2: t('line-2'), 3: t('line-3') },\n text: { DEFAULT: t('text'), 2: t('text-2') },\n mute: t('mute'),\n signal,\n ok,\n warn,\n bad,\n overlay: 'var(--overlay)',\n data: Object.fromEntries([1, 2, 3, 4, 5, 6].map((i) => [i, `var(--data-${i})`])),\n canvas: {\n DEFAULT: 'var(--canvas-bg)',\n grid: 'var(--canvas-grid)',\n node: 'var(--canvas-node)',\n 'node-line': 'var(--canvas-node-line)',\n },\n edge: { DEFAULT: 'var(--edge)', hover: 'var(--edge-hover)', active: 'var(--edge-active)' },\n execution: 'var(--execution)',\n\n // ── standard palettes, remapped onto tokens ──\n neutral,\n gray: neutral,\n slate: neutral,\n zinc: neutral,\n stone: neutral,\n red: bad,\n rose: bad,\n pink: bad,\n amber: warn,\n orange: warn,\n yellow: warn,\n green: ok,\n emerald: ok,\n teal: ok,\n lime: ok,\n blue: signal,\n sky: signal,\n cyan: signal,\n indigo: signal,\n violet: signal,\n purple: signal,\n fuchsia: signal,\n\n // ── shadcn/ui semantic names ──\n background: t('bg'),\n foreground: t('text'),\n card: { DEFAULT: t('panel'), foreground: t('text') },\n popover: { DEFAULT: t('panel-2'), foreground: t('text') },\n primary: { DEFAULT: t('text'), foreground: t('bg') },\n secondary: { DEFAULT: t('panel-2'), foreground: t('text') },\n muted: { DEFAULT: t('panel-2'), foreground: t('mute') },\n accent: { DEFAULT: t('panel-3'), foreground: t('text') },\n destructive: { DEFAULT: t('bad'), foreground: t('bad-ink') },\n border: t('line'),\n input: { DEFAULT: t('line-2'), background: t('bg-2') },\n ring: t('signal'),\n chart: Object.fromEntries([1, 2, 3, 4, 5].map((i) => [i, `var(--data-${i})`])),\n },\n fontFamily: {\n display: ['var(--font-display)'],\n sans: ['var(--font-body)'],\n body: ['var(--font-body)'],\n mono: ['var(--font-mono)'],\n },\n fontSize,\n fontWeight: {\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n },\n letterSpacing: {\n tighter: '-0.04em',\n tight: '-0.025em',\n snug: '-0.01em',\n normal: '0',\n wide: '0.04em',\n wider: '0.1em',\n widest: '0.14em',\n },\n borderRadius: {\n none: '0',\n sm: 'var(--radius-sm)',\n DEFAULT: 'var(--radius-md)',\n md: 'var(--radius-md)',\n lg: 'var(--radius-lg)',\n xl: 'var(--radius-xl)',\n '2xl': 'var(--radius-2xl)',\n full: 'var(--radius-full)',\n },\n boxShadow: {\n sm: 'var(--shadow-sm)',\n DEFAULT: 'var(--shadow-sm)',\n md: 'var(--shadow-sm)',\n lg: 'var(--shadow)',\n xl: 'var(--shadow)',\n '2xl': 'var(--shadow)',\n field: 'var(--focus-field-ring)',\n none: 'none',\n },\n ringColor: { DEFAULT: t('signal') },\n ringOffsetColor: { DEFAULT: t('bg') },\n outlineColor: { DEFAULT: t('signal') },\n spacing: {\n gutter: 'var(--gutter)',\n 'section-y': 'var(--section-y)',\n 'section-y-tight': 'var(--section-y-tight)',\n },\n maxWidth: { wrap: 'var(--max)' },\n screens: { nav: '1180px', wide: '1340px' },\n zIndex: {\n raised: 'var(--z-raised)',\n sticky: 'var(--z-sticky)',\n panel: 'var(--z-panel)',\n dropdown: 'var(--z-dropdown)',\n modal: 'var(--z-modal)',\n toast: 'var(--z-toast)',\n },\n transitionDuration: {\n DEFAULT: 'var(--duration-fast)',\n fast: 'var(--duration-fast)',\n base: 'var(--duration-base)',\n slow: 'var(--duration-slow)',\n enter: 'var(--duration-enter)',\n 'loader-spin': 'var(--motion-loader-spin)',\n 'loader-pulse': 'var(--motion-loader-pulse)',\n 'loader-breathe': 'var(--motion-loader-breathe)',\n },\n transitionTimingFunction: {\n enter: 'var(--ease-enter)',\n loader: 'var(--ease-loader)',\n },\n keyframes: {\n 'fade-up': {\n from: { opacity: '0', transform: 'translateY(10px)' },\n to: { opacity: '1', transform: 'none' },\n },\n },\n animation: {\n 'fade-up': 'fade-up var(--duration-enter) var(--ease-enter) both',\n },\n },\n },\n} satisfies Partial<Config>\n\nexport default preset\nexport { preset as aginiesPreset }\n"],"mappings":"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","names":[]}
package/dist/preset.d.cts CHANGED
@@ -270,6 +270,7 @@ declare const preset: {
270
270
  zIndex: {
271
271
  raised: string;
272
272
  sticky: string;
273
+ panel: string;
273
274
  dropdown: string;
274
275
  modal: string;
275
276
  toast: string;
@@ -280,9 +281,13 @@ declare const preset: {
280
281
  base: string;
281
282
  slow: string;
282
283
  enter: string;
284
+ 'loader-spin': string;
285
+ 'loader-pulse': string;
286
+ 'loader-breathe': string;
283
287
  };
284
288
  transitionTimingFunction: {
285
289
  enter: string;
290
+ loader: string;
286
291
  };
287
292
  keyframes: {
288
293
  'fade-up': {
package/dist/preset.d.ts CHANGED
@@ -270,6 +270,7 @@ declare const preset: {
270
270
  zIndex: {
271
271
  raised: string;
272
272
  sticky: string;
273
+ panel: string;
273
274
  dropdown: string;
274
275
  modal: string;
275
276
  toast: string;
@@ -280,9 +281,13 @@ declare const preset: {
280
281
  base: string;
281
282
  slow: string;
282
283
  enter: string;
284
+ 'loader-spin': string;
285
+ 'loader-pulse': string;
286
+ 'loader-breathe': string;
283
287
  };
284
288
  transitionTimingFunction: {
285
289
  enter: string;
290
+ loader: string;
286
291
  };
287
292
  keyframes: {
288
293
  'fade-up': {
package/dist/preset.js CHANGED
@@ -180,6 +180,7 @@ var preset = {
180
180
  zIndex: {
181
181
  raised: "var(--z-raised)",
182
182
  sticky: "var(--z-sticky)",
183
+ panel: "var(--z-panel)",
183
184
  dropdown: "var(--z-dropdown)",
184
185
  modal: "var(--z-modal)",
185
186
  toast: "var(--z-toast)"
@@ -189,10 +190,14 @@ var preset = {
189
190
  fast: "var(--duration-fast)",
190
191
  base: "var(--duration-base)",
191
192
  slow: "var(--duration-slow)",
192
- enter: "var(--duration-enter)"
193
+ enter: "var(--duration-enter)",
194
+ "loader-spin": "var(--motion-loader-spin)",
195
+ "loader-pulse": "var(--motion-loader-pulse)",
196
+ "loader-breathe": "var(--motion-loader-breathe)"
193
197
  },
194
198
  transitionTimingFunction: {
195
- enter: "var(--ease-enter)"
199
+ enter: "var(--ease-enter)",
200
+ loader: "var(--ease-loader)"
196
201
  },
197
202
  keyframes: {
198
203
  "fade-up": {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/preset.ts"],"sourcesContent":["/**\n * Tailwind CSS v3 preset for the Aginies design system.\n *\n * Every colour resolves to a CSS custom property from `tokens.css`, so the same utilities\n * follow the theme (`.dark` / `.light` / `[data-theme]`) and the `.room` inversion.\n *\n * Two families of names are provided:\n * - the design-system names (`bg-panel`, `text-mute`, `border-line-2`, `bg-signal`, …)\n * - the standard Tailwind palettes (`red`, `amber`, `gray`, `blue`, …) remapped onto the\n * status ramps, so existing utility classes keep working without ever leaving the tokens\n * - the shadcn/ui semantic names (`bg-background`, `text-muted-foreground`, …)\n *\n * No dependencies beyond Tailwind's own types; usable without the JS entry.\n */\nimport type { Config } from 'tailwindcss'\n\ntype Steps = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 950\nconst STEPS: Steps[] = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950]\n\n/** Semantic token with alpha-modifier support: `bg-panel/50`. */\nconst t = (name: string) => `rgb(var(--${name}-rgb) / <alpha-value>)`\n\n/** Generated status ramp: `text-signal-300`, `bg-bad-50/40`. */\nconst ramp = (name: string, extra: Record<string, string> = {}) => ({\n DEFAULT: t(name),\n ink: t(`${name}-ink`),\n soft: `var(--${name}-soft)`,\n ...Object.fromEntries(STEPS.map((s) => [s, `rgb(var(--${name}-${s}) / <alpha-value>)`])),\n ...extra,\n})\n\nconst neutral = Object.fromEntries(STEPS.map((s) => [s, t(`neutral-${s}`)]))\n\nconst signal = ramp('signal', { 2: t('signal-2') })\nconst ok = ramp('ok')\nconst warn = ramp('warn')\nconst bad = ramp('bad')\n\nconst fontSize: NonNullable<NonNullable<Config['theme']>['fontSize']> = {\n // dense UI sizes (Tailwind's default names, retuned)\n xs: ['var(--fs-ui-xs)', { lineHeight: 'var(--lh-ui-xs)' }],\n sm: ['var(--fs-ui)', { lineHeight: 'var(--lh-ui)' }],\n base: ['var(--fs-body-2)', { lineHeight: 'var(--lh-body-2)' }],\n lg: ['var(--fs-h4)', { lineHeight: 'var(--lh-h4)', letterSpacing: 'var(--ls-h4)' }],\n xl: ['20px', { lineHeight: '1.3', letterSpacing: '-0.015em' }],\n // design-system scale\n display: [\n 'var(--fs-display)',\n { lineHeight: 'var(--lh-display)', letterSpacing: 'var(--ls-display)', fontWeight: '600' },\n ],\n h1: [\n 'var(--fs-h1)',\n { lineHeight: 'var(--lh-h1)', letterSpacing: 'var(--ls-h1)', fontWeight: '600' },\n ],\n h2: [\n 'var(--fs-h2)',\n { lineHeight: 'var(--lh-h2)', letterSpacing: 'var(--ls-h2)', fontWeight: '600' },\n ],\n h3: [\n 'var(--fs-h3)',\n { lineHeight: 'var(--lh-h3)', letterSpacing: 'var(--ls-h3)', fontWeight: '600' },\n ],\n h4: [\n 'var(--fs-h4)',\n { lineHeight: 'var(--lh-h4)', letterSpacing: 'var(--ls-h4)', fontWeight: '600' },\n ],\n stat: [\n 'var(--fs-stat)',\n { lineHeight: 'var(--lh-stat)', letterSpacing: 'var(--ls-stat)', fontWeight: '600' },\n ],\n lede: ['var(--fs-lede)', { lineHeight: 'var(--lh-lede)' }],\n body: ['var(--fs-body)', { lineHeight: 'var(--lh-body)' }],\n 'body-2': ['var(--fs-body-2)', { lineHeight: 'var(--lh-body-2)' }],\n small: ['var(--fs-small)', { lineHeight: 'var(--lh-small)' }],\n eyebrow: [\n 'var(--fs-eyebrow)',\n { lineHeight: 'var(--lh-eyebrow)', letterSpacing: 'var(--ls-eyebrow)', fontWeight: '500' },\n ],\n label: [\n 'var(--fs-label)',\n { lineHeight: 'var(--lh-label)', letterSpacing: 'var(--ls-label)', fontWeight: '500' },\n ],\n tag: ['var(--fs-tag)', { lineHeight: 'var(--lh-tag)', letterSpacing: 'var(--ls-tag)' }],\n ui: ['var(--fs-ui)', { lineHeight: 'var(--lh-ui)' }],\n 'ui-sm': ['var(--fs-ui-sm)', { lineHeight: 'var(--lh-ui-sm)' }],\n 'ui-xs': ['var(--fs-ui-xs)', { lineHeight: 'var(--lh-ui-xs)' }],\n}\n\nconst preset = {\n darkMode: ['class'],\n theme: {\n extend: {\n colors: {\n // ── design-system names ──\n bg: { DEFAULT: t('bg'), 2: t('bg-2') },\n panel: { DEFAULT: t('panel'), 2: t('panel-2'), 3: t('panel-3') },\n line: { DEFAULT: t('line'), 2: t('line-2'), 3: t('line-3') },\n text: { DEFAULT: t('text'), 2: t('text-2') },\n mute: t('mute'),\n signal,\n ok,\n warn,\n bad,\n overlay: 'var(--overlay)',\n data: Object.fromEntries([1, 2, 3, 4, 5, 6].map((i) => [i, `var(--data-${i})`])),\n canvas: {\n DEFAULT: 'var(--canvas-bg)',\n grid: 'var(--canvas-grid)',\n node: 'var(--canvas-node)',\n 'node-line': 'var(--canvas-node-line)',\n },\n edge: { DEFAULT: 'var(--edge)', hover: 'var(--edge-hover)', active: 'var(--edge-active)' },\n execution: 'var(--execution)',\n\n // ── standard palettes, remapped onto tokens ──\n neutral,\n gray: neutral,\n slate: neutral,\n zinc: neutral,\n stone: neutral,\n red: bad,\n rose: bad,\n pink: bad,\n amber: warn,\n orange: warn,\n yellow: warn,\n green: ok,\n emerald: ok,\n teal: ok,\n lime: ok,\n blue: signal,\n sky: signal,\n cyan: signal,\n indigo: signal,\n violet: signal,\n purple: signal,\n fuchsia: signal,\n\n // ── shadcn/ui semantic names ──\n background: t('bg'),\n foreground: t('text'),\n card: { DEFAULT: t('panel'), foreground: t('text') },\n popover: { DEFAULT: t('panel-2'), foreground: t('text') },\n primary: { DEFAULT: t('text'), foreground: t('bg') },\n secondary: { DEFAULT: t('panel-2'), foreground: t('text') },\n muted: { DEFAULT: t('panel-2'), foreground: t('mute') },\n accent: { DEFAULT: t('panel-3'), foreground: t('text') },\n destructive: { DEFAULT: t('bad'), foreground: t('bad-ink') },\n border: t('line'),\n input: { DEFAULT: t('line-2'), background: t('bg-2') },\n ring: t('signal'),\n chart: Object.fromEntries([1, 2, 3, 4, 5].map((i) => [i, `var(--data-${i})`])),\n },\n fontFamily: {\n display: ['var(--font-display)'],\n sans: ['var(--font-body)'],\n body: ['var(--font-body)'],\n mono: ['var(--font-mono)'],\n },\n fontSize,\n fontWeight: {\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n },\n letterSpacing: {\n tighter: '-0.04em',\n tight: '-0.025em',\n snug: '-0.01em',\n normal: '0',\n wide: '0.04em',\n wider: '0.1em',\n widest: '0.14em',\n },\n borderRadius: {\n none: '0',\n sm: 'var(--radius-sm)',\n DEFAULT: 'var(--radius-md)',\n md: 'var(--radius-md)',\n lg: 'var(--radius-lg)',\n xl: 'var(--radius-xl)',\n '2xl': 'var(--radius-2xl)',\n full: 'var(--radius-full)',\n },\n boxShadow: {\n sm: 'var(--shadow-sm)',\n DEFAULT: 'var(--shadow-sm)',\n md: 'var(--shadow-sm)',\n lg: 'var(--shadow)',\n xl: 'var(--shadow)',\n '2xl': 'var(--shadow)',\n field: 'var(--focus-field-ring)',\n none: 'none',\n },\n ringColor: { DEFAULT: t('signal') },\n ringOffsetColor: { DEFAULT: t('bg') },\n outlineColor: { DEFAULT: t('signal') },\n spacing: {\n gutter: 'var(--gutter)',\n 'section-y': 'var(--section-y)',\n 'section-y-tight': 'var(--section-y-tight)',\n },\n maxWidth: { wrap: 'var(--max)' },\n screens: { nav: '1180px', wide: '1340px' },\n zIndex: {\n raised: 'var(--z-raised)',\n sticky: 'var(--z-sticky)',\n dropdown: 'var(--z-dropdown)',\n modal: 'var(--z-modal)',\n toast: 'var(--z-toast)',\n },\n transitionDuration: {\n DEFAULT: 'var(--duration-fast)',\n fast: 'var(--duration-fast)',\n base: 'var(--duration-base)',\n slow: 'var(--duration-slow)',\n enter: 'var(--duration-enter)',\n },\n transitionTimingFunction: {\n enter: 'var(--ease-enter)',\n },\n keyframes: {\n 'fade-up': {\n from: { opacity: '0', transform: 'translateY(10px)' },\n to: { opacity: '1', transform: 'none' },\n },\n },\n animation: {\n 'fade-up': 'fade-up var(--duration-enter) var(--ease-enter) both',\n },\n },\n },\n} satisfies Partial<Config>\n\nexport default preset\nexport { preset as aginiesPreset }\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/preset.ts"],"sourcesContent":["/**\n * Tailwind CSS v3 preset for the Aginies design system.\n *\n * Every colour resolves to a CSS custom property from `tokens.css`, so the same utilities\n * follow the theme (`.dark` / `.light` / `[data-theme]`) and the `.room` inversion.\n *\n * Two families of names are provided:\n * - the design-system names (`bg-panel`, `text-mute`, `border-line-2`, `bg-signal`, …)\n * - the standard Tailwind palettes (`red`, `amber`, `gray`, `blue`, …) remapped onto the\n * status ramps, so existing utility classes keep working without ever leaving the tokens\n * - the shadcn/ui semantic names (`bg-background`, `text-muted-foreground`, …)\n *\n * No dependencies beyond Tailwind's own types; usable without the JS entry.\n */\nimport type { Config } from 'tailwindcss'\n\ntype Steps = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | 950\nconst STEPS: Steps[] = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950]\n\n/** Semantic token with alpha-modifier support: `bg-panel/50`. */\nconst t = (name: string) => `rgb(var(--${name}-rgb) / <alpha-value>)`\n\n/** Generated status ramp: `text-signal-300`, `bg-bad-50/40`. */\nconst ramp = (name: string, extra: Record<string, string> = {}) => ({\n DEFAULT: t(name),\n ink: t(`${name}-ink`),\n soft: `var(--${name}-soft)`,\n ...Object.fromEntries(STEPS.map((s) => [s, `rgb(var(--${name}-${s}) / <alpha-value>)`])),\n ...extra,\n})\n\nconst neutral = Object.fromEntries(STEPS.map((s) => [s, t(`neutral-${s}`)]))\n\nconst signal = ramp('signal', { 2: t('signal-2') })\nconst ok = ramp('ok')\nconst warn = ramp('warn')\nconst bad = ramp('bad')\n\nconst fontSize: NonNullable<NonNullable<Config['theme']>['fontSize']> = {\n // dense UI sizes (Tailwind's default names, retuned)\n xs: ['var(--fs-ui-xs)', { lineHeight: 'var(--lh-ui-xs)' }],\n sm: ['var(--fs-ui)', { lineHeight: 'var(--lh-ui)' }],\n base: ['var(--fs-body-2)', { lineHeight: 'var(--lh-body-2)' }],\n lg: ['var(--fs-h4)', { lineHeight: 'var(--lh-h4)', letterSpacing: 'var(--ls-h4)' }],\n xl: ['20px', { lineHeight: '1.3', letterSpacing: '-0.015em' }],\n // design-system scale\n display: [\n 'var(--fs-display)',\n { lineHeight: 'var(--lh-display)', letterSpacing: 'var(--ls-display)', fontWeight: '600' },\n ],\n h1: [\n 'var(--fs-h1)',\n { lineHeight: 'var(--lh-h1)', letterSpacing: 'var(--ls-h1)', fontWeight: '600' },\n ],\n h2: [\n 'var(--fs-h2)',\n { lineHeight: 'var(--lh-h2)', letterSpacing: 'var(--ls-h2)', fontWeight: '600' },\n ],\n h3: [\n 'var(--fs-h3)',\n { lineHeight: 'var(--lh-h3)', letterSpacing: 'var(--ls-h3)', fontWeight: '600' },\n ],\n h4: [\n 'var(--fs-h4)',\n { lineHeight: 'var(--lh-h4)', letterSpacing: 'var(--ls-h4)', fontWeight: '600' },\n ],\n stat: [\n 'var(--fs-stat)',\n { lineHeight: 'var(--lh-stat)', letterSpacing: 'var(--ls-stat)', fontWeight: '600' },\n ],\n lede: ['var(--fs-lede)', { lineHeight: 'var(--lh-lede)' }],\n body: ['var(--fs-body)', { lineHeight: 'var(--lh-body)' }],\n 'body-2': ['var(--fs-body-2)', { lineHeight: 'var(--lh-body-2)' }],\n small: ['var(--fs-small)', { lineHeight: 'var(--lh-small)' }],\n eyebrow: [\n 'var(--fs-eyebrow)',\n { lineHeight: 'var(--lh-eyebrow)', letterSpacing: 'var(--ls-eyebrow)', fontWeight: '500' },\n ],\n label: [\n 'var(--fs-label)',\n { lineHeight: 'var(--lh-label)', letterSpacing: 'var(--ls-label)', fontWeight: '500' },\n ],\n tag: ['var(--fs-tag)', { lineHeight: 'var(--lh-tag)', letterSpacing: 'var(--ls-tag)' }],\n ui: ['var(--fs-ui)', { lineHeight: 'var(--lh-ui)' }],\n 'ui-sm': ['var(--fs-ui-sm)', { lineHeight: 'var(--lh-ui-sm)' }],\n 'ui-xs': ['var(--fs-ui-xs)', { lineHeight: 'var(--lh-ui-xs)' }],\n}\n\nconst preset = {\n darkMode: ['class'],\n theme: {\n extend: {\n colors: {\n // ── design-system names ──\n bg: { DEFAULT: t('bg'), 2: t('bg-2') },\n panel: { DEFAULT: t('panel'), 2: t('panel-2'), 3: t('panel-3') },\n line: { DEFAULT: t('line'), 2: t('line-2'), 3: t('line-3') },\n text: { DEFAULT: t('text'), 2: t('text-2') },\n mute: t('mute'),\n signal,\n ok,\n warn,\n bad,\n overlay: 'var(--overlay)',\n data: Object.fromEntries([1, 2, 3, 4, 5, 6].map((i) => [i, `var(--data-${i})`])),\n canvas: {\n DEFAULT: 'var(--canvas-bg)',\n grid: 'var(--canvas-grid)',\n node: 'var(--canvas-node)',\n 'node-line': 'var(--canvas-node-line)',\n },\n edge: { DEFAULT: 'var(--edge)', hover: 'var(--edge-hover)', active: 'var(--edge-active)' },\n execution: 'var(--execution)',\n\n // ── standard palettes, remapped onto tokens ──\n neutral,\n gray: neutral,\n slate: neutral,\n zinc: neutral,\n stone: neutral,\n red: bad,\n rose: bad,\n pink: bad,\n amber: warn,\n orange: warn,\n yellow: warn,\n green: ok,\n emerald: ok,\n teal: ok,\n lime: ok,\n blue: signal,\n sky: signal,\n cyan: signal,\n indigo: signal,\n violet: signal,\n purple: signal,\n fuchsia: signal,\n\n // ── shadcn/ui semantic names ──\n background: t('bg'),\n foreground: t('text'),\n card: { DEFAULT: t('panel'), foreground: t('text') },\n popover: { DEFAULT: t('panel-2'), foreground: t('text') },\n primary: { DEFAULT: t('text'), foreground: t('bg') },\n secondary: { DEFAULT: t('panel-2'), foreground: t('text') },\n muted: { DEFAULT: t('panel-2'), foreground: t('mute') },\n accent: { DEFAULT: t('panel-3'), foreground: t('text') },\n destructive: { DEFAULT: t('bad'), foreground: t('bad-ink') },\n border: t('line'),\n input: { DEFAULT: t('line-2'), background: t('bg-2') },\n ring: t('signal'),\n chart: Object.fromEntries([1, 2, 3, 4, 5].map((i) => [i, `var(--data-${i})`])),\n },\n fontFamily: {\n display: ['var(--font-display)'],\n sans: ['var(--font-body)'],\n body: ['var(--font-body)'],\n mono: ['var(--font-mono)'],\n },\n fontSize,\n fontWeight: {\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n },\n letterSpacing: {\n tighter: '-0.04em',\n tight: '-0.025em',\n snug: '-0.01em',\n normal: '0',\n wide: '0.04em',\n wider: '0.1em',\n widest: '0.14em',\n },\n borderRadius: {\n none: '0',\n sm: 'var(--radius-sm)',\n DEFAULT: 'var(--radius-md)',\n md: 'var(--radius-md)',\n lg: 'var(--radius-lg)',\n xl: 'var(--radius-xl)',\n '2xl': 'var(--radius-2xl)',\n full: 'var(--radius-full)',\n },\n boxShadow: {\n sm: 'var(--shadow-sm)',\n DEFAULT: 'var(--shadow-sm)',\n md: 'var(--shadow-sm)',\n lg: 'var(--shadow)',\n xl: 'var(--shadow)',\n '2xl': 'var(--shadow)',\n field: 'var(--focus-field-ring)',\n none: 'none',\n },\n ringColor: { DEFAULT: t('signal') },\n ringOffsetColor: { DEFAULT: t('bg') },\n outlineColor: { DEFAULT: t('signal') },\n spacing: {\n gutter: 'var(--gutter)',\n 'section-y': 'var(--section-y)',\n 'section-y-tight': 'var(--section-y-tight)',\n },\n maxWidth: { wrap: 'var(--max)' },\n screens: { nav: '1180px', wide: '1340px' },\n zIndex: {\n raised: 'var(--z-raised)',\n sticky: 'var(--z-sticky)',\n panel: 'var(--z-panel)',\n dropdown: 'var(--z-dropdown)',\n modal: 'var(--z-modal)',\n toast: 'var(--z-toast)',\n },\n transitionDuration: {\n DEFAULT: 'var(--duration-fast)',\n fast: 'var(--duration-fast)',\n base: 'var(--duration-base)',\n slow: 'var(--duration-slow)',\n enter: 'var(--duration-enter)',\n 'loader-spin': 'var(--motion-loader-spin)',\n 'loader-pulse': 'var(--motion-loader-pulse)',\n 'loader-breathe': 'var(--motion-loader-breathe)',\n },\n transitionTimingFunction: {\n enter: 'var(--ease-enter)',\n loader: 'var(--ease-loader)',\n },\n keyframes: {\n 'fade-up': {\n from: { opacity: '0', transform: 'translateY(10px)' },\n to: { opacity: '1', transform: 'none' },\n },\n },\n animation: {\n 'fade-up': 'fade-up var(--duration-enter) var(--ease-enter) both',\n },\n },\n },\n} satisfies Partial<Config>\n\nexport default preset\nexport { preset as aginiesPreset }\n"],"mappings":"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","names":[]}
package/dist/tokens.css CHANGED
@@ -1,4 +1,4 @@
1
- /* @aginies/tokens v0.1.0 — generated from src/tokens.ts. Do not edit by hand. */
1
+ /* @aginies/tokens v0.2.0 — generated from src/tokens.ts. Do not edit by hand. */
2
2
 
3
3
  /* Static tokens: type, shape, spacing, motion, layout. */
4
4
  :root {
@@ -66,6 +66,10 @@
66
66
  --duration-slow: 300ms;
67
67
  --duration-enter: 600ms;
68
68
  --ease-enter: cubic-bezier(0.2, 0.7, 0.2, 1);
69
+ --motion-loader-spin: 6s;
70
+ --motion-loader-pulse: 1.8s;
71
+ --motion-loader-breathe: 2.6s;
72
+ --ease-loader: cubic-bezier(0.45, 0, 0.2, 1);
69
73
  --max: 1200px;
70
74
  --gutter: clamp(20px, 4vw, 40px);
71
75
  --section-y: clamp(64px, 9vw, 128px);
@@ -80,6 +84,7 @@
80
84
  --z-base: 0;
81
85
  --z-raised: 10;
82
86
  --z-sticky: 50;
87
+ --z-panel: 60;
83
88
  --z-dropdown: 100;
84
89
  --z-modal: 200;
85
90
  --z-toast: 300;
package/dist/tokens.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.0",
2
+ "version": "0.2.0",
3
3
  "color": {
4
4
  "dark": {
5
5
  "bg": "#070A14",
@@ -324,7 +324,11 @@
324
324
  "duration-base": "200ms",
325
325
  "duration-slow": "300ms",
326
326
  "duration-enter": "600ms",
327
- "ease-enter": "cubic-bezier(0.2, 0.7, 0.2, 1)"
327
+ "ease-enter": "cubic-bezier(0.2, 0.7, 0.2, 1)",
328
+ "motion-loader-spin": "6s",
329
+ "motion-loader-pulse": "1.8s",
330
+ "motion-loader-breathe": "2.6s",
331
+ "ease-loader": "cubic-bezier(0.45, 0, 0.2, 1)"
328
332
  },
329
333
  "layout": {
330
334
  "max": "1200px",
@@ -345,6 +349,7 @@
345
349
  "base": 0,
346
350
  "raised": 10,
347
351
  "sticky": 50,
352
+ "panel": 60,
348
353
  "dropdown": 100,
349
354
  "modal": 200,
350
355
  "toast": 300
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aginies/tokens",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Aginies design tokens: CSS custom properties, JSON and a Tailwind CSS preset",
5
5
  "license": "MIT",
6
6
  "author": "Abra Partners",
@@ -47,8 +47,7 @@
47
47
  "generate": "node --experimental-strip-types --no-warnings src/build.ts",
48
48
  "build": "tsup && node --experimental-strip-types --no-warnings src/build.ts",
49
49
  "type-check": "tsc --noEmit",
50
- "test": "vitest run --passWithNoTests",
51
- "sync:platform": "node --experimental-strip-types --no-warnings scripts/sync-platform.ts"
50
+ "test": "vitest run --passWithNoTests"
52
51
  },
53
52
  "publishConfig": {
54
53
  "access": "public"