@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 +13 -0
- package/dist/index.cjs +11 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/legacy-bridge.css +1 -1
- package/dist/preset.cjs +7 -2
- package/dist/preset.cjs.map +1 -1
- package/dist/preset.d.cts +5 -0
- package/dist/preset.d.ts +5 -0
- package/dist/preset.js +7 -2
- package/dist/preset.js.map +1 -1
- package/dist/tokens.css +6 -1
- package/dist/tokens.json +7 -2
- package/package.json +2 -3
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
|
package/dist/index.cjs.map
CHANGED
|
@@ -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":"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","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":[]}
|
package/dist/legacy-bridge.css
CHANGED
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": {
|
package/dist/preset.cjs.map
CHANGED
|
@@ -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": {
|
package/dist/preset.js.map
CHANGED
|
@@ -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
|
+
/* @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.
|
|
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.
|
|
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"
|