@phcdevworks/spectre-tokens 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Design-token source of truth that powers Spectre UI, Spectre Blocks, Spectre Astro, Spectre 11ty, and every future Spectre surface.
4
4
 
5
+ > 📋 **[View Roadmap](ROADMAP.md)** | 🤝 **[Contributing Guide](CONTRIBUTING.md)** | 📝 **[Changelog](CHANGELOG.md)**
6
+
5
7
  ## Overview
6
8
 
7
9
  `@phcdevworks/spectre-tokens` defines Spectre's visual language—colors, typography, spacing, radii, shadows, breakpoints, z-index scales, transitions, and CRO-focused interaction states. The package turns the raw JSON tokens in `tokens/` into multiple consumption modes (JS, TS, Tailwind, CSS variables) so that teams can stay in sync regardless of framework. One token system runs the entire Spectre Suite; every other package simply consumes these values.
@@ -169,6 +171,12 @@ tokens.opacity.overlay; // 0.5
169
171
 
170
172
  Always re-run final UI implementations through tools like [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/).
171
173
 
174
+ ## Surface & Typography Roles
175
+
176
+ - `surface.page`, `surface.card`, `surface.input`, `surface.overlay`: semantic backgrounds for the app canvas, containers/tiles, form fields, and modal/dropdown layers.
177
+ - `text.onPage.*` vs `text.onSurface.*`: use `onPage` for copy sitting directly on the page canvas; use `onSurface` for text inside cards, tiles, inputs, overlays, and other elevated surfaces.
178
+ - `component.card.text`/`textMuted`, `component.input.text`/`placeholder`, and `component.button.textDefault`/`textOnPrimary` alias the underlying `text.onSurface` roles (with `textOnPrimary` pairing white against the primary button background) to keep component defaults aligned.
179
+
172
180
  ## Repository Layout
173
181
 
174
182
  | Folder | Responsibility |
@@ -188,6 +196,8 @@ npm run build
188
196
 
189
197
  `tsup` compiles the TypeScript library (ESM, CJS, `.d.ts`) and `scripts/build-css.js` emits `dist/index.css`. Because `dist/` is generated, releases are reproducible from `tokens/` + `src/`.
190
198
 
199
+ For release history and version notes, see the **[Changelog](CHANGELOG.md)**.
200
+
191
201
  ## Design Principles
192
202
 
193
203
  1. **Single source of truth** – Tokens originate in JSON and flow into every runtime surface.
@@ -221,10 +231,23 @@ const allTokens: SpectreTokens = tokens;
221
231
  - **Spectre Astro** – Astro integration
222
232
  - **Spectre 11ty** – Eleventy integration
223
233
 
234
+ For the project's future direction, see the **[Roadmap](ROADMAP.md)**.
235
+
224
236
  ## Contributing
225
237
 
226
238
  Issues and pull requests are welcome. If you are proposing token changes, update `tokens/` and include regenerated builds.
227
239
 
240
+ For detailed contribution guidelines, see **[CONTRIBUTING.md](CONTRIBUTING.md)**.
241
+
228
242
  ## License
229
243
 
230
- MIT © PHCDevworks
244
+ MIT © PHCDevworks — See **[LICENSE](LICENSE)** for details.
245
+
246
+ ---
247
+
248
+ ## ❤️ Support Spectre
249
+
250
+ If Spectre Tokens helps your workflow, consider sponsoring:
251
+
252
+ - [GitHub Sponsors](https://github.com/sponsors/phcdevworks)
253
+ - [Buy Me a Coffee](https://buymeacoffee.com/phcdevworks)
package/dist/index.cjs CHANGED
@@ -121,6 +121,60 @@ var core_default = {
121
121
  info: "#3b82f6"
122
122
  }
123
123
  },
124
+ surface: {
125
+ page: {
126
+ value: "#0f172a",
127
+ description: "primary app background"
128
+ },
129
+ card: {
130
+ value: "#1e293b",
131
+ description: "containers and tiles"
132
+ },
133
+ input: {
134
+ value: "#334155",
135
+ description: "form inputs, textareas"
136
+ },
137
+ overlay: {
138
+ value: "#1e293b",
139
+ description: "modals, dropdowns, flyouts"
140
+ }
141
+ },
142
+ text: {
143
+ onPage: {
144
+ default: "#f8fafc",
145
+ muted: "#cbd5f5",
146
+ subtle: "#94a3b8"
147
+ },
148
+ onSurface: {
149
+ default: "#f1f5f9",
150
+ muted: "#cbd5f5",
151
+ subtle: "#94a3b8"
152
+ }
153
+ },
154
+ component: {
155
+ card: {
156
+ text: "#f1f5f9",
157
+ textMuted: "#cbd5f5"
158
+ },
159
+ input: {
160
+ text: "#f1f5f9",
161
+ placeholder: "#94a3b8"
162
+ },
163
+ button: {
164
+ textDefault: "#f1f5f9",
165
+ textOnPrimary: "#ffffff"
166
+ }
167
+ },
168
+ modes: {
169
+ default: {
170
+ surface: {},
171
+ text: {}
172
+ },
173
+ dark: {
174
+ surface: {},
175
+ text: {}
176
+ }
177
+ },
124
178
  opacity: {
125
179
  disabled: "0.38",
126
180
  hover: "0.92",
@@ -231,6 +285,10 @@ var core_default = {
231
285
  lg: "8px",
232
286
  pill: "999px"
233
287
  },
288
+ borders: {
289
+ card: "#334155",
290
+ input: "#cbd5f5"
291
+ },
234
292
  typography: {
235
293
  families: {
236
294
  sans: "'Inter', 'Helvetica Neue', Arial, sans-serif",
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../tokens/core.json","../src/css.ts"],"sourcesContent":["import coreTokens from '../tokens/core.json';\n\nimport { generateCssVariables } from './css';\nimport type { SpectreTokens, TailwindTheme, Tokens } from './types';\n\nexport type { TailwindTheme, Tokens, SpectreTokens, ColorScale, TokenScale, TypographyTokens, TransitionTokens, AccessibilityTokens, ButtonStateTokens, FormStateTokens, AnimationEntry } from './types';\n\nconst tokens: SpectreTokens = coreTokens as SpectreTokens;\n\nconst sanitizeFontFamily = (value: string): string[] =>\n value\n .split(',')\n .map((segment) => segment.trim().replace(/^['\"]|['\"]$/g, ''))\n .filter(Boolean);\n\nconst createTailwindTheme = (source: Tokens = tokens as Tokens): TailwindTheme => {\n const colors: TailwindTheme['colors'] = {};\n Object.entries(source.colors).forEach(([group, scale]) => {\n colors[group] = { ...scale };\n });\n\n const fontFamily = Object.entries(source.typography.families).reduce<Record<string, string[]>>((acc, [key, value]) => {\n acc[key] = sanitizeFontFamily(value);\n return acc;\n }, {});\n\n const fontSize = Object.entries(source.typography.scale).reduce<TailwindTheme['fontSize']>((acc, [key, entry]) => {\n acc[key] = [\n entry.fontSize,\n {\n lineHeight: entry.lineHeight,\n ...(entry.fontWeight ? { fontWeight: entry.fontWeight } : {}),\n ...(entry.letterSpacing ? { letterSpacing: entry.letterSpacing } : {})\n }\n ];\n return acc;\n }, {});\n\n return {\n colors,\n spacing: { ...source.spacing },\n borderRadius: { ...source.radii },\n fontFamily,\n fontSize,\n boxShadow: { ...source.shadows },\n screens: { ...source.breakpoints },\n zIndex: { ...source.zIndex },\n transitionDuration: { ...source.transitions.duration },\n transitionTimingFunction: { ...source.transitions.easing },\n opacity: { ...source.opacity }\n };\n};\n\nexport const tailwindTheme = createTailwindTheme(tokens as Tokens);\nexport const tailwindPreset = {\n theme: tailwindTheme\n};\n\nexport { tokens, generateCssVariables };\nexport default tokens;\n","{\n \"colors\": {\n \"brand\": {\n \"50\": \"#f5f0ff\",\n \"100\": \"#ebe2ff\",\n \"200\": \"#d7c6ff\",\n \"300\": \"#bfa1ff\",\n \"400\": \"#a37aff\",\n \"500\": \"#8652ff\",\n \"600\": \"#6c32e6\",\n \"700\": \"#5626b4\",\n \"800\": \"#3d1b7f\",\n \"900\": \"#241147\"\n },\n \"neutral\": {\n \"50\": \"#f8fafc\",\n \"100\": \"#f1f5f9\",\n \"200\": \"#e2e8f0\",\n \"300\": \"#cbd5f5\",\n \"400\": \"#94a3b8\",\n \"500\": \"#64748b\",\n \"600\": \"#475569\",\n \"700\": \"#334155\",\n \"800\": \"#1e293b\",\n \"900\": \"#0f172a\"\n },\n \"accent\": {\n \"50\": \"#e5fff8\",\n \"100\": \"#b8ffed\",\n \"200\": \"#89ffe1\",\n \"300\": \"#59ffd6\",\n \"400\": \"#29ffca\",\n \"500\": \"#03e6b3\",\n \"600\": \"#00b389\",\n \"700\": \"#008060\",\n \"800\": \"#004d38\",\n \"900\": \"#002a20\"\n },\n \"success\": {\n \"50\": \"#f0fdf4\",\n \"100\": \"#dcfce7\",\n \"200\": \"#bbf7d0\",\n \"300\": \"#86efac\",\n \"400\": \"#4ade80\",\n \"500\": \"#22c55e\",\n \"600\": \"#16a34a\",\n \"700\": \"#15803d\",\n \"800\": \"#166534\",\n \"900\": \"#14532d\"\n },\n \"warning\": {\n \"50\": \"#fffbeb\",\n \"100\": \"#fef3c7\",\n \"200\": \"#fde68a\",\n \"300\": \"#fcd34d\",\n \"400\": \"#fbbf24\",\n \"500\": \"#f59e0b\",\n \"600\": \"#d97706\",\n \"700\": \"#b45309\",\n \"800\": \"#92400e\",\n \"900\": \"#78350f\"\n },\n \"error\": {\n \"50\": \"#fef2f2\",\n \"100\": \"#fee2e2\",\n \"200\": \"#fecaca\",\n \"300\": \"#fca5a5\",\n \"400\": \"#f87171\",\n \"500\": \"#ef4444\",\n \"600\": \"#dc2626\",\n \"700\": \"#b91c1c\",\n \"800\": \"#991b1b\",\n \"900\": \"#7f1d1d\"\n },\n \"info\": {\n \"50\": \"#eff6ff\",\n \"100\": \"#dbeafe\",\n \"200\": \"#bfdbfe\",\n \"300\": \"#93c5fd\",\n \"400\": \"#60a5fa\",\n \"500\": \"#3b82f6\",\n \"600\": \"#2563eb\",\n \"700\": \"#1d4ed8\",\n \"800\": \"#1e40af\",\n \"900\": \"#1e3a8a\"\n },\n \"focus\": {\n \"primary\": \"#8652ff\",\n \"error\": \"#ef4444\",\n \"info\": \"#3b82f6\"\n }\n },\n \"opacity\": {\n \"disabled\": \"0.38\",\n \"hover\": \"0.92\",\n \"active\": \"0.84\",\n \"focus\": \"1\",\n \"overlay\": \"0.5\",\n \"tooltip\": \"0.95\"\n },\n \"accessibility\": {\n \"focusRing\": {\n \"width\": \"2px\",\n \"offset\": \"2px\",\n \"style\": \"solid\"\n },\n \"minTouchTarget\": \"44px\",\n \"minTextSize\": \"16px\"\n },\n \"buttons\": {\n \"primary\": {\n \"bg\": \"#8652ff\",\n \"bgHover\": \"#6c32e6\",\n \"bgActive\": \"#5626b4\",\n \"bgDisabled\": \"#cbd5f5\",\n \"text\": \"#ffffff\",\n \"textDisabled\": \"#94a3b8\"\n },\n \"secondary\": {\n \"bg\": \"#ffffff\",\n \"bgHover\": \"#f1f5f9\",\n \"bgActive\": \"#e2e8f0\",\n \"bgDisabled\": \"#f8fafc\",\n \"text\": \"#8652ff\",\n \"textDisabled\": \"#94a3b8\",\n \"border\": \"#8652ff\",\n \"borderDisabled\": \"#cbd5f5\"\n },\n \"ghost\": {\n \"bg\": \"transparent\",\n \"bgHover\": \"#f5f0ff\",\n \"bgActive\": \"#ebe2ff\",\n \"bgDisabled\": \"transparent\",\n \"text\": \"#8652ff\",\n \"textDisabled\": \"#94a3b8\"\n },\n \"danger\": {\n \"bg\": \"#ef4444\",\n \"bgHover\": \"#dc2626\",\n \"bgActive\": \"#b91c1c\",\n \"bgDisabled\": \"#fecaca\",\n \"text\": \"#ffffff\",\n \"textDisabled\": \"#94a3b8\"\n },\n \"success\": {\n \"bg\": \"#22c55e\",\n \"bgHover\": \"#16a34a\",\n \"bgActive\": \"#15803d\",\n \"bgDisabled\": \"#bbf7d0\",\n \"text\": \"#ffffff\",\n \"textDisabled\": \"#94a3b8\"\n }\n },\n \"forms\": {\n \"default\": {\n \"bg\": \"#ffffff\",\n \"border\": \"#cbd5f5\",\n \"text\": \"#0f172a\",\n \"placeholder\": \"#94a3b8\"\n },\n \"hover\": {\n \"border\": \"#8652ff\"\n },\n \"focus\": {\n \"border\": \"#8652ff\",\n \"ring\": \"#8652ff\"\n },\n \"valid\": {\n \"border\": \"#22c55e\",\n \"bg\": \"#f0fdf4\",\n \"text\": \"#15803d\"\n },\n \"invalid\": {\n \"border\": \"#ef4444\",\n \"bg\": \"#fef2f2\",\n \"text\": \"#b91c1c\"\n },\n \"disabled\": {\n \"bg\": \"#f8fafc\",\n \"border\": \"#e2e8f0\",\n \"text\": \"#94a3b8\"\n }\n },\n \"spacing\": {\n \"none\": \"0rem\",\n \"3xs\": \"0.125rem\",\n \"2xs\": \"0.25rem\",\n \"xs\": \"0.5rem\",\n \"sm\": \"0.75rem\",\n \"md\": \"1rem\",\n \"lg\": \"1.5rem\",\n \"xl\": \"2rem\",\n \"2xl\": \"3rem\",\n \"3xl\": \"4rem\"\n },\n \"radii\": {\n \"none\": \"0\",\n \"sm\": \"2px\",\n \"md\": \"4px\",\n \"lg\": \"8px\",\n \"pill\": \"999px\"\n },\n \"typography\": {\n \"families\": {\n \"sans\": \"'Inter', 'Helvetica Neue', Arial, sans-serif\",\n \"serif\": \"'Spectre Serif', 'Georgia', serif\",\n \"mono\": \"'JetBrains Mono', 'SFMono-Regular', Consolas, monospace\"\n },\n \"scale\": {\n \"xs\": {\n \"fontSize\": \"0.75rem\",\n \"lineHeight\": \"1.25rem\",\n \"fontWeight\": 400,\n \"letterSpacing\": \"0.02em\"\n },\n \"sm\": {\n \"fontSize\": \"0.875rem\",\n \"lineHeight\": \"1.5rem\",\n \"fontWeight\": 400\n },\n \"md\": {\n \"fontSize\": \"1rem\",\n \"lineHeight\": \"1.75rem\",\n \"fontWeight\": 500\n },\n \"lg\": {\n \"fontSize\": \"1.25rem\",\n \"lineHeight\": \"2rem\",\n \"fontWeight\": 600\n },\n \"xl\": {\n \"fontSize\": \"1.5rem\",\n \"lineHeight\": \"2.125rem\",\n \"fontWeight\": 600\n },\n \"2xl\": {\n \"fontSize\": \"1.875rem\",\n \"lineHeight\": \"2.5rem\",\n \"fontWeight\": 700\n },\n \"3xl\": {\n \"fontSize\": \"2.25rem\",\n \"lineHeight\": \"2.75rem\",\n \"fontWeight\": 700\n }\n }\n },\n \"shadows\": {\n \"none\": \"none\",\n \"sm\": \"0 1px 2px 0 rgba(15, 23, 42, 0.08)\",\n \"md\": \"0 3px 8px -1px rgba(15, 23, 42, 0.1)\",\n \"lg\": \"0 8px 20px -4px rgba(15, 23, 42, 0.18)\"\n },\n \"breakpoints\": {\n \"sm\": \"640px\",\n \"md\": \"768px\",\n \"lg\": \"1024px\",\n \"xl\": \"1280px\",\n \"2xl\": \"1536px\"\n },\n \"zIndex\": {\n \"base\": \"0\",\n \"dropdown\": \"1000\",\n \"sticky\": \"1100\",\n \"fixed\": \"1200\",\n \"overlay\": \"1300\",\n \"modal\": \"1400\",\n \"popover\": \"1500\",\n \"tooltip\": \"1600\"\n },\n \"transitions\": {\n \"duration\": {\n \"instant\": \"75ms\",\n \"fast\": \"150ms\",\n \"base\": \"200ms\",\n \"moderate\": \"300ms\",\n \"slow\": \"500ms\",\n \"slower\": \"700ms\"\n },\n \"easing\": {\n \"linear\": \"linear\",\n \"in\": \"cubic-bezier(0.4, 0, 1, 1)\",\n \"out\": \"cubic-bezier(0, 0, 0.2, 1)\",\n \"inOut\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"spring\": \"cubic-bezier(0.34, 1.56, 0.64, 1)\"\n }\n },\n \"animations\": {\n \"fadeIn\": {\n \"duration\": \"200ms\",\n \"easing\": \"cubic-bezier(0, 0, 0.2, 1)\",\n \"keyframes\": \"fade-in\"\n },\n \"fadeOut\": {\n \"duration\": \"150ms\",\n \"easing\": \"cubic-bezier(0.4, 0, 1, 1)\",\n \"keyframes\": \"fade-out\"\n },\n \"slideUp\": {\n \"duration\": \"300ms\",\n \"easing\": \"cubic-bezier(0, 0, 0.2, 1)\",\n \"keyframes\": \"slide-up\"\n },\n \"slideDown\": {\n \"duration\": \"300ms\",\n \"easing\": \"cubic-bezier(0, 0, 0.2, 1)\",\n \"keyframes\": \"slide-down\"\n },\n \"scaleIn\": {\n \"duration\": \"200ms\",\n \"easing\": \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n \"keyframes\": \"scale-in\"\n },\n \"bounce\": {\n \"duration\": \"500ms\",\n \"easing\": \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n \"keyframes\": \"bounce\"\n },\n \"shake\": {\n \"duration\": \"400ms\",\n \"easing\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"keyframes\": \"shake\"\n },\n \"pulse\": {\n \"duration\": \"1500ms\",\n \"easing\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"keyframes\": \"pulse\"\n }\n }\n}\n","import type { CssVariableMap, CssVariableOptions, Tokens } from './types';\n\nconst DEFAULT_PREFIX = 'sp';\nexport const DEFAULT_SELECTOR = ':root';\n\nconst formatKey = (segment: string): string =>\n segment\n .replace(/[^a-z0-9]+/gi, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n\nconst toVariableName = (prefix: string, ...parts: string[]): string => {\n const filtered = parts.filter(Boolean).map(formatKey);\n return `--${prefix}-${filtered.join('-')}`;\n};\n\nexport const createCssVariableMap = (tokens: Tokens, options: CssVariableOptions = {}): CssVariableMap => {\n const prefix = options.prefix ?? DEFAULT_PREFIX;\n const map: CssVariableMap = {};\n\n const assign = (name: string, value: string | number | undefined) => {\n if (value === undefined) return;\n map[name] = String(value);\n };\n\n Object.entries(tokens.colors).forEach(([group, scale]) => {\n Object.entries(scale).forEach(([step, value]) => {\n assign(toVariableName(prefix, 'color', group, step), value);\n });\n });\n\n Object.entries(tokens.spacing).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'space', key), value);\n });\n\n Object.entries(tokens.radii).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'radius', key), value);\n });\n\n Object.entries(tokens.typography.families).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'font-family', key), value);\n });\n\n Object.entries(tokens.typography.scale).forEach(([key, entry]) => {\n assign(toVariableName(prefix, 'font', key, 'size'), entry.fontSize);\n assign(toVariableName(prefix, 'font', key, 'line-height'), entry.lineHeight);\n assign(toVariableName(prefix, 'font', key, 'weight'), entry.fontWeight);\n assign(toVariableName(prefix, 'font', key, 'letter-spacing'), entry.letterSpacing);\n });\n\n Object.entries(tokens.shadows).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'shadow', key), value);\n });\n\n Object.entries(tokens.breakpoints).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'breakpoint', key), value);\n });\n\n Object.entries(tokens.zIndex).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'z-index', key), value);\n });\n\n Object.entries(tokens.transitions.duration).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'duration', key), value);\n });\n\n Object.entries(tokens.transitions.easing).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'easing', key), value);\n });\n\n Object.entries(tokens.opacity).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'opacity', key), value);\n });\n\n // Accessibility tokens\n assign(toVariableName(prefix, 'focus-ring-width'), tokens.accessibility.focusRing.width);\n assign(toVariableName(prefix, 'focus-ring-offset'), tokens.accessibility.focusRing.offset);\n assign(toVariableName(prefix, 'focus-ring-style'), tokens.accessibility.focusRing.style);\n assign(toVariableName(prefix, 'min-touch-target'), tokens.accessibility.minTouchTarget);\n assign(toVariableName(prefix, 'min-text-size'), tokens.accessibility.minTextSize);\n\n // Button tokens\n Object.entries(tokens.buttons).forEach(([variant, states]) => {\n Object.entries(states).forEach(([state, value]) => {\n assign(toVariableName(prefix, 'button', variant, state), value);\n });\n });\n\n // Form tokens\n Object.entries(tokens.forms).forEach(([state, properties]) => {\n Object.entries(properties).forEach(([prop, value]) => {\n if (value) assign(toVariableName(prefix, 'form', state, prop), value);\n });\n });\n\n // Animation tokens\n Object.entries(tokens.animations).forEach(([name, animation]) => {\n assign(toVariableName(prefix, 'animation', name, 'duration'), animation.duration);\n assign(toVariableName(prefix, 'animation', name, 'easing'), animation.easing);\n assign(toVariableName(prefix, 'animation', name, 'keyframes'), animation.keyframes);\n });\n\n return map;\n};\n\nexport const generateCssVariables = (tokens: Tokens, options: CssVariableOptions = {}): string => {\n const selector = options.selector ?? DEFAULT_SELECTOR;\n const declarations = createCssVariableMap(tokens, options);\n const lines = Object.entries(declarations)\n .map(([name, value]) => ` ${name}: ${value};`)\n .join('\\n');\n\n return `${selector} {\\n${lines}\\n}\\n`;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA,EACE,QAAU;AAAA,IACR,OAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,SAAW;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,QAAU;AAAA,MACR,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,SAAW;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,SAAW;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,OAAS;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,MAAQ;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,OAAS;AAAA,MACP,SAAW;AAAA,MACX,OAAS;AAAA,MACT,MAAQ;AAAA,IACV;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,UAAY;AAAA,IACZ,OAAS;AAAA,IACT,QAAU;AAAA,IACV,OAAS;AAAA,IACT,SAAW;AAAA,IACX,SAAW;AAAA,EACb;AAAA,EACA,eAAiB;AAAA,IACf,WAAa;AAAA,MACX,OAAS;AAAA,MACT,QAAU;AAAA,MACV,OAAS;AAAA,IACX;AAAA,IACA,gBAAkB;AAAA,IAClB,aAAe;AAAA,EACjB;AAAA,EACA,SAAW;AAAA,IACT,SAAW;AAAA,MACT,IAAM;AAAA,MACN,SAAW;AAAA,MACX,UAAY;AAAA,MACZ,YAAc;AAAA,MACd,MAAQ;AAAA,MACR,cAAgB;AAAA,IAClB;AAAA,IACA,WAAa;AAAA,MACX,IAAM;AAAA,MACN,SAAW;AAAA,MACX,UAAY;AAAA,MACZ,YAAc;AAAA,MACd,MAAQ;AAAA,MACR,cAAgB;AAAA,MAChB,QAAU;AAAA,MACV,gBAAkB;AAAA,IACpB;AAAA,IACA,OAAS;AAAA,MACP,IAAM;AAAA,MACN,SAAW;AAAA,MACX,UAAY;AAAA,MACZ,YAAc;AAAA,MACd,MAAQ;AAAA,MACR,cAAgB;AAAA,IAClB;AAAA,IACA,QAAU;AAAA,MACR,IAAM;AAAA,MACN,SAAW;AAAA,MACX,UAAY;AAAA,MACZ,YAAc;AAAA,MACd,MAAQ;AAAA,MACR,cAAgB;AAAA,IAClB;AAAA,IACA,SAAW;AAAA,MACT,IAAM;AAAA,MACN,SAAW;AAAA,MACX,UAAY;AAAA,MACZ,YAAc;AAAA,MACd,MAAQ;AAAA,MACR,cAAgB;AAAA,IAClB;AAAA,EACF;AAAA,EACA,OAAS;AAAA,IACP,SAAW;AAAA,MACT,IAAM;AAAA,MACN,QAAU;AAAA,MACV,MAAQ;AAAA,MACR,aAAe;AAAA,IACjB;AAAA,IACA,OAAS;AAAA,MACP,QAAU;AAAA,IACZ;AAAA,IACA,OAAS;AAAA,MACP,QAAU;AAAA,MACV,MAAQ;AAAA,IACV;AAAA,IACA,OAAS;AAAA,MACP,QAAU;AAAA,MACV,IAAM;AAAA,MACN,MAAQ;AAAA,IACV;AAAA,IACA,SAAW;AAAA,MACT,QAAU;AAAA,MACV,IAAM;AAAA,MACN,MAAQ;AAAA,IACV;AAAA,IACA,UAAY;AAAA,MACV,IAAM;AAAA,MACN,QAAU;AAAA,MACV,MAAQ;AAAA,IACV;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,MAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,IACP,IAAM;AAAA,IACN,IAAM;AAAA,IACN,IAAM;AAAA,IACN,IAAM;AAAA,IACN,IAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,OAAS;AAAA,IACP,MAAQ;AAAA,IACR,IAAM;AAAA,IACN,IAAM;AAAA,IACN,IAAM;AAAA,IACN,MAAQ;AAAA,EACV;AAAA,EACA,YAAc;AAAA,IACZ,UAAY;AAAA,MACV,MAAQ;AAAA,MACR,OAAS;AAAA,MACT,MAAQ;AAAA,IACV;AAAA,IACA,OAAS;AAAA,MACP,IAAM;AAAA,QACJ,UAAY;AAAA,QACZ,YAAc;AAAA,QACd,YAAc;AAAA,QACd,eAAiB;AAAA,MACnB;AAAA,MACA,IAAM;AAAA,QACJ,UAAY;AAAA,QACZ,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,MACA,IAAM;AAAA,QACJ,UAAY;AAAA,QACZ,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,MACA,IAAM;AAAA,QACJ,UAAY;AAAA,QACZ,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,MACA,IAAM;AAAA,QACJ,UAAY;AAAA,QACZ,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,MACA,OAAO;AAAA,QACL,UAAY;AAAA,QACZ,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,MACA,OAAO;AAAA,QACL,UAAY;AAAA,QACZ,YAAc;AAAA,QACd,YAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,MAAQ;AAAA,IACR,IAAM;AAAA,IACN,IAAM;AAAA,IACN,IAAM;AAAA,EACR;AAAA,EACA,aAAe;AAAA,IACb,IAAM;AAAA,IACN,IAAM;AAAA,IACN,IAAM;AAAA,IACN,IAAM;AAAA,IACN,OAAO;AAAA,EACT;AAAA,EACA,QAAU;AAAA,IACR,MAAQ;AAAA,IACR,UAAY;AAAA,IACZ,QAAU;AAAA,IACV,OAAS;AAAA,IACT,SAAW;AAAA,IACX,OAAS;AAAA,IACT,SAAW;AAAA,IACX,SAAW;AAAA,EACb;AAAA,EACA,aAAe;AAAA,IACb,UAAY;AAAA,MACV,SAAW;AAAA,MACX,MAAQ;AAAA,MACR,MAAQ;AAAA,MACR,UAAY;AAAA,MACZ,MAAQ;AAAA,MACR,QAAU;AAAA,IACZ;AAAA,IACA,QAAU;AAAA,MACR,QAAU;AAAA,MACV,IAAM;AAAA,MACN,KAAO;AAAA,MACP,OAAS;AAAA,MACT,QAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,YAAc;AAAA,IACZ,QAAU;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,MACV,WAAa;AAAA,IACf;AAAA,IACA,SAAW;AAAA,MACT,UAAY;AAAA,MACZ,QAAU;AAAA,MACV,WAAa;AAAA,IACf;AAAA,IACA,SAAW;AAAA,MACT,UAAY;AAAA,MACZ,QAAU;AAAA,MACV,WAAa;AAAA,IACf;AAAA,IACA,WAAa;AAAA,MACX,UAAY;AAAA,MACZ,QAAU;AAAA,MACV,WAAa;AAAA,IACf;AAAA,IACA,SAAW;AAAA,MACT,UAAY;AAAA,MACZ,QAAU;AAAA,MACV,WAAa;AAAA,IACf;AAAA,IACA,QAAU;AAAA,MACR,UAAY;AAAA,MACZ,QAAU;AAAA,MACV,WAAa;AAAA,IACf;AAAA,IACA,OAAS;AAAA,MACP,UAAY;AAAA,MACZ,QAAU;AAAA,MACV,WAAa;AAAA,IACf;AAAA,IACA,OAAS;AAAA,MACP,UAAY;AAAA,MACZ,QAAU;AAAA,MACV,WAAa;AAAA,IACf;AAAA,EACF;AACF;;;ACvUA,IAAM,iBAAiB;AAChB,IAAM,mBAAmB;AAEhC,IAAM,YAAY,CAAC,YACjB,QACG,QAAQ,gBAAgB,GAAG,EAC3B,QAAQ,YAAY,EAAE,EACtB,YAAY;AAEjB,IAAM,iBAAiB,CAAC,WAAmB,UAA4B;AACrE,QAAM,WAAW,MAAM,OAAO,OAAO,EAAE,IAAI,SAAS;AACpD,SAAO,KAAK,MAAM,IAAI,SAAS,KAAK,GAAG,CAAC;AAC1C;AAEO,IAAM,uBAAuB,CAACA,SAAgB,UAA8B,CAAC,MAAsB;AACxG,QAAM,SAAS,QAAQ,UAAU;AACjC,QAAM,MAAsB,CAAC;AAE7B,QAAM,SAAS,CAAC,MAAc,UAAuC;AACnE,QAAI,UAAU,OAAW;AACzB,QAAI,IAAI,IAAI,OAAO,KAAK;AAAA,EAC1B;AAEA,SAAO,QAAQA,QAAO,MAAM,EAAE,QAAQ,CAAC,CAAC,OAAO,KAAK,MAAM;AACxD,WAAO,QAAQ,KAAK,EAAE,QAAQ,CAAC,CAAC,MAAM,KAAK,MAAM;AAC/C,aAAO,eAAe,QAAQ,SAAS,OAAO,IAAI,GAAG,KAAK;AAAA,IAC5D,CAAC;AAAA,EACH,CAAC;AAED,SAAO,QAAQA,QAAO,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACvD,WAAO,eAAe,QAAQ,SAAS,GAAG,GAAG,KAAK;AAAA,EACpD,CAAC;AAED,SAAO,QAAQA,QAAO,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACrD,WAAO,eAAe,QAAQ,UAAU,GAAG,GAAG,KAAK;AAAA,EACrD,CAAC;AAED,SAAO,QAAQA,QAAO,WAAW,QAAQ,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACnE,WAAO,eAAe,QAAQ,eAAe,GAAG,GAAG,KAAK;AAAA,EAC1D,CAAC;AAED,SAAO,QAAQA,QAAO,WAAW,KAAK,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAChE,WAAO,eAAe,QAAQ,QAAQ,KAAK,MAAM,GAAG,MAAM,QAAQ;AAClE,WAAO,eAAe,QAAQ,QAAQ,KAAK,aAAa,GAAG,MAAM,UAAU;AAC3E,WAAO,eAAe,QAAQ,QAAQ,KAAK,QAAQ,GAAG,MAAM,UAAU;AACtE,WAAO,eAAe,QAAQ,QAAQ,KAAK,gBAAgB,GAAG,MAAM,aAAa;AAAA,EACnF,CAAC;AAED,SAAO,QAAQA,QAAO,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACvD,WAAO,eAAe,QAAQ,UAAU,GAAG,GAAG,KAAK;AAAA,EACrD,CAAC;AAED,SAAO,QAAQA,QAAO,WAAW,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC3D,WAAO,eAAe,QAAQ,cAAc,GAAG,GAAG,KAAK;AAAA,EACzD,CAAC;AAED,SAAO,QAAQA,QAAO,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACtD,WAAO,eAAe,QAAQ,WAAW,GAAG,GAAG,KAAK;AAAA,EACtD,CAAC;AAED,SAAO,QAAQA,QAAO,YAAY,QAAQ,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACpE,WAAO,eAAe,QAAQ,YAAY,GAAG,GAAG,KAAK;AAAA,EACvD,CAAC;AAED,SAAO,QAAQA,QAAO,YAAY,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAClE,WAAO,eAAe,QAAQ,UAAU,GAAG,GAAG,KAAK;AAAA,EACrD,CAAC;AAED,SAAO,QAAQA,QAAO,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACvD,WAAO,eAAe,QAAQ,WAAW,GAAG,GAAG,KAAK;AAAA,EACtD,CAAC;AAGD,SAAO,eAAe,QAAQ,kBAAkB,GAAGA,QAAO,cAAc,UAAU,KAAK;AACvF,SAAO,eAAe,QAAQ,mBAAmB,GAAGA,QAAO,cAAc,UAAU,MAAM;AACzF,SAAO,eAAe,QAAQ,kBAAkB,GAAGA,QAAO,cAAc,UAAU,KAAK;AACvF,SAAO,eAAe,QAAQ,kBAAkB,GAAGA,QAAO,cAAc,cAAc;AACtF,SAAO,eAAe,QAAQ,eAAe,GAAGA,QAAO,cAAc,WAAW;AAGhF,SAAO,QAAQA,QAAO,OAAO,EAAE,QAAQ,CAAC,CAAC,SAAS,MAAM,MAAM;AAC5D,WAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,OAAO,KAAK,MAAM;AACjD,aAAO,eAAe,QAAQ,UAAU,SAAS,KAAK,GAAG,KAAK;AAAA,IAChE,CAAC;AAAA,EACH,CAAC;AAGD,SAAO,QAAQA,QAAO,KAAK,EAAE,QAAQ,CAAC,CAAC,OAAO,UAAU,MAAM;AAC5D,WAAO,QAAQ,UAAU,EAAE,QAAQ,CAAC,CAAC,MAAM,KAAK,MAAM;AACpD,UAAI,MAAO,QAAO,eAAe,QAAQ,QAAQ,OAAO,IAAI,GAAG,KAAK;AAAA,IACtE,CAAC;AAAA,EACH,CAAC;AAGD,SAAO,QAAQA,QAAO,UAAU,EAAE,QAAQ,CAAC,CAAC,MAAM,SAAS,MAAM;AAC/D,WAAO,eAAe,QAAQ,aAAa,MAAM,UAAU,GAAG,UAAU,QAAQ;AAChF,WAAO,eAAe,QAAQ,aAAa,MAAM,QAAQ,GAAG,UAAU,MAAM;AAC5E,WAAO,eAAe,QAAQ,aAAa,MAAM,WAAW,GAAG,UAAU,SAAS;AAAA,EACpF,CAAC;AAED,SAAO;AACT;AAEO,IAAM,uBAAuB,CAACA,SAAgB,UAA8B,CAAC,MAAc;AAChG,QAAM,WAAW,QAAQ,YAAY;AACrC,QAAM,eAAe,qBAAqBA,SAAQ,OAAO;AACzD,QAAM,QAAQ,OAAO,QAAQ,YAAY,EACtC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,IAAI,KAAK,KAAK,GAAG,EAC7C,KAAK,IAAI;AAEZ,SAAO,GAAG,QAAQ;AAAA,EAAO,KAAK;AAAA;AAAA;AAChC;;;AF1GA,IAAM,SAAwB;AAE9B,IAAM,qBAAqB,CAAC,UAC1B,MACG,MAAM,GAAG,EACT,IAAI,CAAC,YAAY,QAAQ,KAAK,EAAE,QAAQ,gBAAgB,EAAE,CAAC,EAC3D,OAAO,OAAO;AAEnB,IAAM,sBAAsB,CAAC,SAAiB,WAAoC;AAChF,QAAM,SAAkC,CAAC;AACzC,SAAO,QAAQ,OAAO,MAAM,EAAE,QAAQ,CAAC,CAAC,OAAO,KAAK,MAAM;AACxD,WAAO,KAAK,IAAI,EAAE,GAAG,MAAM;AAAA,EAC7B,CAAC;AAED,QAAM,aAAa,OAAO,QAAQ,OAAO,WAAW,QAAQ,EAAE,OAAiC,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AACpH,QAAI,GAAG,IAAI,mBAAmB,KAAK;AACnC,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEL,QAAM,WAAW,OAAO,QAAQ,OAAO,WAAW,KAAK,EAAE,OAAkC,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AAChH,QAAI,GAAG,IAAI;AAAA,MACT,MAAM;AAAA,MACN;AAAA,QACE,YAAY,MAAM;AAAA,QAClB,GAAI,MAAM,aAAa,EAAE,YAAY,MAAM,WAAW,IAAI,CAAC;AAAA,QAC3D,GAAI,MAAM,gBAAgB,EAAE,eAAe,MAAM,cAAc,IAAI,CAAC;AAAA,MACtE;AAAA,IACF;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACL;AAAA,IACA,SAAS,EAAE,GAAG,OAAO,QAAQ;AAAA,IAC7B,cAAc,EAAE,GAAG,OAAO,MAAM;AAAA,IAChC;AAAA,IACA;AAAA,IACA,WAAW,EAAE,GAAG,OAAO,QAAQ;AAAA,IAC/B,SAAS,EAAE,GAAG,OAAO,YAAY;AAAA,IACjC,QAAQ,EAAE,GAAG,OAAO,OAAO;AAAA,IAC3B,oBAAoB,EAAE,GAAG,OAAO,YAAY,SAAS;AAAA,IACrD,0BAA0B,EAAE,GAAG,OAAO,YAAY,OAAO;AAAA,IACzD,SAAS,EAAE,GAAG,OAAO,QAAQ;AAAA,EAC/B;AACF;AAEO,IAAM,gBAAgB,oBAAoB,MAAgB;AAC1D,IAAM,iBAAiB;AAAA,EAC5B,OAAO;AACT;AAGA,IAAO,gBAAQ;","names":["tokens"]}
1
+ {"version":3,"sources":["../src/index.ts","../tokens/core.json","../src/css.ts"],"sourcesContent":["import coreTokens from '../tokens/core.json';\n\nimport { generateCssVariables } from './css';\nimport type { SpectreTokens, TailwindTheme, Tokens } from './types';\n\nexport type { TailwindTheme, Tokens, SpectreTokens, ColorScale, TokenScale, TypographyTokens, TransitionTokens, AccessibilityTokens, ButtonStateTokens, FormStateTokens, AnimationEntry } from './types';\n\nconst tokens: SpectreTokens = coreTokens as SpectreTokens;\n\nconst sanitizeFontFamily = (value: string): string[] =>\n value\n .split(',')\n .map((segment) => segment.trim().replace(/^['\"]|['\"]$/g, ''))\n .filter(Boolean);\n\nconst createTailwindTheme = (source: Tokens = tokens as Tokens): TailwindTheme => {\n const colors: TailwindTheme['colors'] = {};\n Object.entries(source.colors).forEach(([group, scale]) => {\n colors[group] = { ...scale };\n });\n\n const fontFamily = Object.entries(source.typography.families).reduce<Record<string, string[]>>((acc, [key, value]) => {\n acc[key] = sanitizeFontFamily(value);\n return acc;\n }, {});\n\n const fontSize = Object.entries(source.typography.scale).reduce<TailwindTheme['fontSize']>((acc, [key, entry]) => {\n acc[key] = [\n entry.fontSize,\n {\n lineHeight: entry.lineHeight,\n ...(entry.fontWeight ? { fontWeight: entry.fontWeight } : {}),\n ...(entry.letterSpacing ? { letterSpacing: entry.letterSpacing } : {})\n }\n ];\n return acc;\n }, {});\n\n return {\n colors,\n spacing: { ...source.spacing },\n borderRadius: { ...source.radii },\n fontFamily,\n fontSize,\n boxShadow: { ...source.shadows },\n screens: { ...source.breakpoints },\n zIndex: { ...source.zIndex },\n transitionDuration: { ...source.transitions.duration },\n transitionTimingFunction: { ...source.transitions.easing },\n opacity: { ...source.opacity }\n };\n};\n\nexport const tailwindTheme = createTailwindTheme(tokens as Tokens);\nexport const tailwindPreset = {\n theme: tailwindTheme\n};\n\nexport { tokens, generateCssVariables };\nexport default tokens;\n","{\n \"colors\": {\n \"brand\": {\n \"50\": \"#f5f0ff\",\n \"100\": \"#ebe2ff\",\n \"200\": \"#d7c6ff\",\n \"300\": \"#bfa1ff\",\n \"400\": \"#a37aff\",\n \"500\": \"#8652ff\",\n \"600\": \"#6c32e6\",\n \"700\": \"#5626b4\",\n \"800\": \"#3d1b7f\",\n \"900\": \"#241147\"\n },\n \"neutral\": {\n \"50\": \"#f8fafc\",\n \"100\": \"#f1f5f9\",\n \"200\": \"#e2e8f0\",\n \"300\": \"#cbd5f5\",\n \"400\": \"#94a3b8\",\n \"500\": \"#64748b\",\n \"600\": \"#475569\",\n \"700\": \"#334155\",\n \"800\": \"#1e293b\",\n \"900\": \"#0f172a\"\n },\n \"accent\": {\n \"50\": \"#e5fff8\",\n \"100\": \"#b8ffed\",\n \"200\": \"#89ffe1\",\n \"300\": \"#59ffd6\",\n \"400\": \"#29ffca\",\n \"500\": \"#03e6b3\",\n \"600\": \"#00b389\",\n \"700\": \"#008060\",\n \"800\": \"#004d38\",\n \"900\": \"#002a20\"\n },\n \"success\": {\n \"50\": \"#f0fdf4\",\n \"100\": \"#dcfce7\",\n \"200\": \"#bbf7d0\",\n \"300\": \"#86efac\",\n \"400\": \"#4ade80\",\n \"500\": \"#22c55e\",\n \"600\": \"#16a34a\",\n \"700\": \"#15803d\",\n \"800\": \"#166534\",\n \"900\": \"#14532d\"\n },\n \"warning\": {\n \"50\": \"#fffbeb\",\n \"100\": \"#fef3c7\",\n \"200\": \"#fde68a\",\n \"300\": \"#fcd34d\",\n \"400\": \"#fbbf24\",\n \"500\": \"#f59e0b\",\n \"600\": \"#d97706\",\n \"700\": \"#b45309\",\n \"800\": \"#92400e\",\n \"900\": \"#78350f\"\n },\n \"error\": {\n \"50\": \"#fef2f2\",\n \"100\": \"#fee2e2\",\n \"200\": \"#fecaca\",\n \"300\": \"#fca5a5\",\n \"400\": \"#f87171\",\n \"500\": \"#ef4444\",\n \"600\": \"#dc2626\",\n \"700\": \"#b91c1c\",\n \"800\": \"#991b1b\",\n \"900\": \"#7f1d1d\"\n },\n \"info\": {\n \"50\": \"#eff6ff\",\n \"100\": \"#dbeafe\",\n \"200\": \"#bfdbfe\",\n \"300\": \"#93c5fd\",\n \"400\": \"#60a5fa\",\n \"500\": \"#3b82f6\",\n \"600\": \"#2563eb\",\n \"700\": \"#1d4ed8\",\n \"800\": \"#1e40af\",\n \"900\": \"#1e3a8a\"\n },\n \"focus\": {\n \"primary\": \"#8652ff\",\n \"error\": \"#ef4444\",\n \"info\": \"#3b82f6\"\n }\n },\n \"surface\": {\n \"page\": {\n \"value\": \"#0f172a\",\n \"description\": \"primary app background\"\n },\n \"card\": {\n \"value\": \"#1e293b\",\n \"description\": \"containers and tiles\"\n },\n \"input\": {\n \"value\": \"#334155\",\n \"description\": \"form inputs, textareas\"\n },\n \"overlay\": {\n \"value\": \"#1e293b\",\n \"description\": \"modals, dropdowns, flyouts\"\n }\n },\n \"text\": {\n \"onPage\": {\n \"default\": \"#f8fafc\",\n \"muted\": \"#cbd5f5\",\n \"subtle\": \"#94a3b8\"\n },\n \"onSurface\": {\n \"default\": \"#f1f5f9\",\n \"muted\": \"#cbd5f5\",\n \"subtle\": \"#94a3b8\"\n }\n },\n \"component\": {\n \"card\": {\n \"text\": \"#f1f5f9\",\n \"textMuted\": \"#cbd5f5\"\n },\n \"input\": {\n \"text\": \"#f1f5f9\",\n \"placeholder\": \"#94a3b8\"\n },\n \"button\": {\n \"textDefault\": \"#f1f5f9\",\n \"textOnPrimary\": \"#ffffff\"\n }\n },\n \"modes\": {\n \"default\": {\n \"surface\": {},\n \"text\": {}\n },\n \"dark\": {\n \"surface\": {},\n \"text\": {}\n }\n },\n \"opacity\": {\n \"disabled\": \"0.38\",\n \"hover\": \"0.92\",\n \"active\": \"0.84\",\n \"focus\": \"1\",\n \"overlay\": \"0.5\",\n \"tooltip\": \"0.95\"\n },\n \"accessibility\": {\n \"focusRing\": {\n \"width\": \"2px\",\n \"offset\": \"2px\",\n \"style\": \"solid\"\n },\n \"minTouchTarget\": \"44px\",\n \"minTextSize\": \"16px\"\n },\n \"buttons\": {\n \"primary\": {\n \"bg\": \"#8652ff\",\n \"bgHover\": \"#6c32e6\",\n \"bgActive\": \"#5626b4\",\n \"bgDisabled\": \"#cbd5f5\",\n \"text\": \"#ffffff\",\n \"textDisabled\": \"#94a3b8\"\n },\n \"secondary\": {\n \"bg\": \"#ffffff\",\n \"bgHover\": \"#f1f5f9\",\n \"bgActive\": \"#e2e8f0\",\n \"bgDisabled\": \"#f8fafc\",\n \"text\": \"#8652ff\",\n \"textDisabled\": \"#94a3b8\",\n \"border\": \"#8652ff\",\n \"borderDisabled\": \"#cbd5f5\"\n },\n \"ghost\": {\n \"bg\": \"transparent\",\n \"bgHover\": \"#f5f0ff\",\n \"bgActive\": \"#ebe2ff\",\n \"bgDisabled\": \"transparent\",\n \"text\": \"#8652ff\",\n \"textDisabled\": \"#94a3b8\"\n },\n \"danger\": {\n \"bg\": \"#ef4444\",\n \"bgHover\": \"#dc2626\",\n \"bgActive\": \"#b91c1c\",\n \"bgDisabled\": \"#fecaca\",\n \"text\": \"#ffffff\",\n \"textDisabled\": \"#94a3b8\"\n },\n \"success\": {\n \"bg\": \"#22c55e\",\n \"bgHover\": \"#16a34a\",\n \"bgActive\": \"#15803d\",\n \"bgDisabled\": \"#bbf7d0\",\n \"text\": \"#ffffff\",\n \"textDisabled\": \"#94a3b8\"\n }\n },\n \"forms\": {\n \"default\": {\n \"bg\": \"#ffffff\",\n \"border\": \"#cbd5f5\",\n \"text\": \"#0f172a\",\n \"placeholder\": \"#94a3b8\"\n },\n \"hover\": {\n \"border\": \"#8652ff\"\n },\n \"focus\": {\n \"border\": \"#8652ff\",\n \"ring\": \"#8652ff\"\n },\n \"valid\": {\n \"border\": \"#22c55e\",\n \"bg\": \"#f0fdf4\",\n \"text\": \"#15803d\"\n },\n \"invalid\": {\n \"border\": \"#ef4444\",\n \"bg\": \"#fef2f2\",\n \"text\": \"#b91c1c\"\n },\n \"disabled\": {\n \"bg\": \"#f8fafc\",\n \"border\": \"#e2e8f0\",\n \"text\": \"#94a3b8\"\n }\n },\n \"spacing\": {\n \"none\": \"0rem\",\n \"3xs\": \"0.125rem\",\n \"2xs\": \"0.25rem\",\n \"xs\": \"0.5rem\",\n \"sm\": \"0.75rem\",\n \"md\": \"1rem\",\n \"lg\": \"1.5rem\",\n \"xl\": \"2rem\",\n \"2xl\": \"3rem\",\n \"3xl\": \"4rem\"\n },\n \"radii\": {\n \"none\": \"0\",\n \"sm\": \"2px\",\n \"md\": \"4px\",\n \"lg\": \"8px\",\n \"pill\": \"999px\"\n },\n \"borders\": {\n \"card\": \"#334155\",\n \"input\": \"#cbd5f5\"\n },\n \"typography\": {\n \"families\": {\n \"sans\": \"'Inter', 'Helvetica Neue', Arial, sans-serif\",\n \"serif\": \"'Spectre Serif', 'Georgia', serif\",\n \"mono\": \"'JetBrains Mono', 'SFMono-Regular', Consolas, monospace\"\n },\n \"scale\": {\n \"xs\": {\n \"fontSize\": \"0.75rem\",\n \"lineHeight\": \"1.25rem\",\n \"fontWeight\": 400,\n \"letterSpacing\": \"0.02em\"\n },\n \"sm\": {\n \"fontSize\": \"0.875rem\",\n \"lineHeight\": \"1.5rem\",\n \"fontWeight\": 400\n },\n \"md\": {\n \"fontSize\": \"1rem\",\n \"lineHeight\": \"1.75rem\",\n \"fontWeight\": 500\n },\n \"lg\": {\n \"fontSize\": \"1.25rem\",\n \"lineHeight\": \"2rem\",\n \"fontWeight\": 600\n },\n \"xl\": {\n \"fontSize\": \"1.5rem\",\n \"lineHeight\": \"2.125rem\",\n \"fontWeight\": 600\n },\n \"2xl\": {\n \"fontSize\": \"1.875rem\",\n \"lineHeight\": \"2.5rem\",\n \"fontWeight\": 700\n },\n \"3xl\": {\n \"fontSize\": \"2.25rem\",\n \"lineHeight\": \"2.75rem\",\n \"fontWeight\": 700\n }\n }\n },\n \"shadows\": {\n \"none\": \"none\",\n \"sm\": \"0 1px 2px 0 rgba(15, 23, 42, 0.08)\",\n \"md\": \"0 3px 8px -1px rgba(15, 23, 42, 0.1)\",\n \"lg\": \"0 8px 20px -4px rgba(15, 23, 42, 0.18)\"\n },\n \"breakpoints\": {\n \"sm\": \"640px\",\n \"md\": \"768px\",\n \"lg\": \"1024px\",\n \"xl\": \"1280px\",\n \"2xl\": \"1536px\"\n },\n \"zIndex\": {\n \"base\": \"0\",\n \"dropdown\": \"1000\",\n \"sticky\": \"1100\",\n \"fixed\": \"1200\",\n \"overlay\": \"1300\",\n \"modal\": \"1400\",\n \"popover\": \"1500\",\n \"tooltip\": \"1600\"\n },\n \"transitions\": {\n \"duration\": {\n \"instant\": \"75ms\",\n \"fast\": \"150ms\",\n \"base\": \"200ms\",\n \"moderate\": \"300ms\",\n \"slow\": \"500ms\",\n \"slower\": \"700ms\"\n },\n \"easing\": {\n \"linear\": \"linear\",\n \"in\": \"cubic-bezier(0.4, 0, 1, 1)\",\n \"out\": \"cubic-bezier(0, 0, 0.2, 1)\",\n \"inOut\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"spring\": \"cubic-bezier(0.34, 1.56, 0.64, 1)\"\n }\n },\n \"animations\": {\n \"fadeIn\": {\n \"duration\": \"200ms\",\n \"easing\": \"cubic-bezier(0, 0, 0.2, 1)\",\n \"keyframes\": \"fade-in\"\n },\n \"fadeOut\": {\n \"duration\": \"150ms\",\n \"easing\": \"cubic-bezier(0.4, 0, 1, 1)\",\n \"keyframes\": \"fade-out\"\n },\n \"slideUp\": {\n \"duration\": \"300ms\",\n \"easing\": \"cubic-bezier(0, 0, 0.2, 1)\",\n \"keyframes\": \"slide-up\"\n },\n \"slideDown\": {\n \"duration\": \"300ms\",\n \"easing\": \"cubic-bezier(0, 0, 0.2, 1)\",\n \"keyframes\": \"slide-down\"\n },\n \"scaleIn\": {\n \"duration\": \"200ms\",\n \"easing\": \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n \"keyframes\": \"scale-in\"\n },\n \"bounce\": {\n \"duration\": \"500ms\",\n \"easing\": \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n \"keyframes\": \"bounce\"\n },\n \"shake\": {\n \"duration\": \"400ms\",\n \"easing\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"keyframes\": \"shake\"\n },\n \"pulse\": {\n \"duration\": \"1500ms\",\n \"easing\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"keyframes\": \"pulse\"\n }\n }\n}\n","import type { CssVariableMap, CssVariableOptions, Tokens } from './types';\n\nconst DEFAULT_PREFIX = 'sp';\nexport const DEFAULT_SELECTOR = ':root';\n\nconst formatKey = (segment: string): string =>\n segment\n .replace(/[^a-z0-9]+/gi, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n\nconst toVariableName = (prefix: string, ...parts: string[]): string => {\n const filtered = parts.filter(Boolean).map(formatKey);\n return `--${prefix}-${filtered.join('-')}`;\n};\n\nexport const createCssVariableMap = (tokens: Tokens, options: CssVariableOptions = {}): CssVariableMap => {\n const prefix = options.prefix ?? DEFAULT_PREFIX;\n const map: CssVariableMap = {};\n\n const assign = (name: string, value: string | number | undefined) => {\n if (value === undefined) return;\n map[name] = String(value);\n };\n\n Object.entries(tokens.colors).forEach(([group, scale]) => {\n Object.entries(scale).forEach(([step, value]) => {\n assign(toVariableName(prefix, 'color', group, step), value);\n });\n });\n\n Object.entries(tokens.spacing).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'space', key), value);\n });\n\n Object.entries(tokens.radii).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'radius', key), value);\n });\n\n Object.entries(tokens.typography.families).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'font-family', key), value);\n });\n\n Object.entries(tokens.typography.scale).forEach(([key, entry]) => {\n assign(toVariableName(prefix, 'font', key, 'size'), entry.fontSize);\n assign(toVariableName(prefix, 'font', key, 'line-height'), entry.lineHeight);\n assign(toVariableName(prefix, 'font', key, 'weight'), entry.fontWeight);\n assign(toVariableName(prefix, 'font', key, 'letter-spacing'), entry.letterSpacing);\n });\n\n Object.entries(tokens.shadows).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'shadow', key), value);\n });\n\n Object.entries(tokens.breakpoints).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'breakpoint', key), value);\n });\n\n Object.entries(tokens.zIndex).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'z-index', key), value);\n });\n\n Object.entries(tokens.transitions.duration).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'duration', key), value);\n });\n\n Object.entries(tokens.transitions.easing).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'easing', key), value);\n });\n\n Object.entries(tokens.opacity).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'opacity', key), value);\n });\n\n // Accessibility tokens\n assign(toVariableName(prefix, 'focus-ring-width'), tokens.accessibility.focusRing.width);\n assign(toVariableName(prefix, 'focus-ring-offset'), tokens.accessibility.focusRing.offset);\n assign(toVariableName(prefix, 'focus-ring-style'), tokens.accessibility.focusRing.style);\n assign(toVariableName(prefix, 'min-touch-target'), tokens.accessibility.minTouchTarget);\n assign(toVariableName(prefix, 'min-text-size'), tokens.accessibility.minTextSize);\n\n // Button tokens\n Object.entries(tokens.buttons).forEach(([variant, states]) => {\n Object.entries(states).forEach(([state, value]) => {\n assign(toVariableName(prefix, 'button', variant, state), value);\n });\n });\n\n // Form tokens\n Object.entries(tokens.forms).forEach(([state, properties]) => {\n Object.entries(properties).forEach(([prop, value]) => {\n if (value) assign(toVariableName(prefix, 'form', state, prop), value);\n });\n });\n\n // Animation tokens\n Object.entries(tokens.animations).forEach(([name, animation]) => {\n assign(toVariableName(prefix, 'animation', name, 'duration'), animation.duration);\n assign(toVariableName(prefix, 'animation', name, 'easing'), animation.easing);\n assign(toVariableName(prefix, 'animation', name, 'keyframes'), animation.keyframes);\n });\n\n return map;\n};\n\nexport const generateCssVariables = (tokens: Tokens, options: CssVariableOptions = {}): string => {\n const selector = options.selector ?? DEFAULT_SELECTOR;\n const declarations = createCssVariableMap(tokens, options);\n const lines = Object.entries(declarations)\n .map(([name, value]) => ` ${name}: ${value};`)\n .join('\\n');\n\n return `${selector} {\\n${lines}\\n}\\n`;\n};\n"],"mappings":"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","names":["tokens"]}
package/dist/index.d.cts CHANGED
@@ -59,6 +59,9 @@ interface SpectreTokens {
59
59
  accessibility?: any;
60
60
  opacity?: any;
61
61
  animations?: any;
62
+ surface?: any;
63
+ text?: any;
64
+ component?: any;
62
65
  }
63
66
  interface Tokens {
64
67
  colors: Record<string, ColorScale>;
package/dist/index.d.ts CHANGED
@@ -59,6 +59,9 @@ interface SpectreTokens {
59
59
  accessibility?: any;
60
60
  opacity?: any;
61
61
  animations?: any;
62
+ surface?: any;
63
+ text?: any;
64
+ component?: any;
62
65
  }
63
66
  interface Tokens {
64
67
  colors: Record<string, ColorScale>;
package/dist/index.js CHANGED
@@ -91,6 +91,60 @@ var core_default = {
91
91
  info: "#3b82f6"
92
92
  }
93
93
  },
94
+ surface: {
95
+ page: {
96
+ value: "#0f172a",
97
+ description: "primary app background"
98
+ },
99
+ card: {
100
+ value: "#1e293b",
101
+ description: "containers and tiles"
102
+ },
103
+ input: {
104
+ value: "#334155",
105
+ description: "form inputs, textareas"
106
+ },
107
+ overlay: {
108
+ value: "#1e293b",
109
+ description: "modals, dropdowns, flyouts"
110
+ }
111
+ },
112
+ text: {
113
+ onPage: {
114
+ default: "#f8fafc",
115
+ muted: "#cbd5f5",
116
+ subtle: "#94a3b8"
117
+ },
118
+ onSurface: {
119
+ default: "#f1f5f9",
120
+ muted: "#cbd5f5",
121
+ subtle: "#94a3b8"
122
+ }
123
+ },
124
+ component: {
125
+ card: {
126
+ text: "#f1f5f9",
127
+ textMuted: "#cbd5f5"
128
+ },
129
+ input: {
130
+ text: "#f1f5f9",
131
+ placeholder: "#94a3b8"
132
+ },
133
+ button: {
134
+ textDefault: "#f1f5f9",
135
+ textOnPrimary: "#ffffff"
136
+ }
137
+ },
138
+ modes: {
139
+ default: {
140
+ surface: {},
141
+ text: {}
142
+ },
143
+ dark: {
144
+ surface: {},
145
+ text: {}
146
+ }
147
+ },
94
148
  opacity: {
95
149
  disabled: "0.38",
96
150
  hover: "0.92",
@@ -201,6 +255,10 @@ var core_default = {
201
255
  lg: "8px",
202
256
  pill: "999px"
203
257
  },
258
+ borders: {
259
+ card: "#334155",
260
+ input: "#cbd5f5"
261
+ },
204
262
  typography: {
205
263
  families: {
206
264
  sans: "'Inter', 'Helvetica Neue', Arial, sans-serif",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../tokens/core.json","../src/css.ts","../src/index.ts"],"sourcesContent":["{\n \"colors\": {\n \"brand\": {\n \"50\": \"#f5f0ff\",\n \"100\": \"#ebe2ff\",\n \"200\": \"#d7c6ff\",\n \"300\": \"#bfa1ff\",\n \"400\": \"#a37aff\",\n \"500\": \"#8652ff\",\n \"600\": \"#6c32e6\",\n \"700\": \"#5626b4\",\n \"800\": \"#3d1b7f\",\n \"900\": \"#241147\"\n },\n \"neutral\": {\n \"50\": \"#f8fafc\",\n \"100\": \"#f1f5f9\",\n \"200\": \"#e2e8f0\",\n \"300\": \"#cbd5f5\",\n \"400\": \"#94a3b8\",\n \"500\": \"#64748b\",\n \"600\": \"#475569\",\n \"700\": \"#334155\",\n \"800\": \"#1e293b\",\n \"900\": \"#0f172a\"\n },\n \"accent\": {\n \"50\": \"#e5fff8\",\n \"100\": \"#b8ffed\",\n \"200\": \"#89ffe1\",\n \"300\": \"#59ffd6\",\n \"400\": \"#29ffca\",\n \"500\": \"#03e6b3\",\n \"600\": \"#00b389\",\n \"700\": \"#008060\",\n \"800\": \"#004d38\",\n \"900\": \"#002a20\"\n },\n \"success\": {\n \"50\": \"#f0fdf4\",\n \"100\": \"#dcfce7\",\n \"200\": \"#bbf7d0\",\n \"300\": \"#86efac\",\n \"400\": \"#4ade80\",\n \"500\": \"#22c55e\",\n \"600\": \"#16a34a\",\n \"700\": \"#15803d\",\n \"800\": \"#166534\",\n \"900\": \"#14532d\"\n },\n \"warning\": {\n \"50\": \"#fffbeb\",\n \"100\": \"#fef3c7\",\n \"200\": \"#fde68a\",\n \"300\": \"#fcd34d\",\n \"400\": \"#fbbf24\",\n \"500\": \"#f59e0b\",\n \"600\": \"#d97706\",\n \"700\": \"#b45309\",\n \"800\": \"#92400e\",\n \"900\": \"#78350f\"\n },\n \"error\": {\n \"50\": \"#fef2f2\",\n \"100\": \"#fee2e2\",\n \"200\": \"#fecaca\",\n \"300\": \"#fca5a5\",\n \"400\": \"#f87171\",\n \"500\": \"#ef4444\",\n \"600\": \"#dc2626\",\n \"700\": \"#b91c1c\",\n \"800\": \"#991b1b\",\n \"900\": \"#7f1d1d\"\n },\n \"info\": {\n \"50\": \"#eff6ff\",\n \"100\": \"#dbeafe\",\n \"200\": \"#bfdbfe\",\n \"300\": \"#93c5fd\",\n \"400\": \"#60a5fa\",\n \"500\": \"#3b82f6\",\n \"600\": \"#2563eb\",\n \"700\": \"#1d4ed8\",\n \"800\": \"#1e40af\",\n \"900\": \"#1e3a8a\"\n },\n \"focus\": {\n \"primary\": \"#8652ff\",\n \"error\": \"#ef4444\",\n \"info\": \"#3b82f6\"\n }\n },\n \"opacity\": {\n \"disabled\": \"0.38\",\n \"hover\": \"0.92\",\n \"active\": \"0.84\",\n \"focus\": \"1\",\n \"overlay\": \"0.5\",\n \"tooltip\": \"0.95\"\n },\n \"accessibility\": {\n \"focusRing\": {\n \"width\": \"2px\",\n \"offset\": \"2px\",\n \"style\": \"solid\"\n },\n \"minTouchTarget\": \"44px\",\n \"minTextSize\": \"16px\"\n },\n \"buttons\": {\n \"primary\": {\n \"bg\": \"#8652ff\",\n \"bgHover\": \"#6c32e6\",\n \"bgActive\": \"#5626b4\",\n \"bgDisabled\": \"#cbd5f5\",\n \"text\": \"#ffffff\",\n \"textDisabled\": \"#94a3b8\"\n },\n \"secondary\": {\n \"bg\": \"#ffffff\",\n \"bgHover\": \"#f1f5f9\",\n \"bgActive\": \"#e2e8f0\",\n \"bgDisabled\": \"#f8fafc\",\n \"text\": \"#8652ff\",\n \"textDisabled\": \"#94a3b8\",\n \"border\": \"#8652ff\",\n \"borderDisabled\": \"#cbd5f5\"\n },\n \"ghost\": {\n \"bg\": \"transparent\",\n \"bgHover\": \"#f5f0ff\",\n \"bgActive\": \"#ebe2ff\",\n \"bgDisabled\": \"transparent\",\n \"text\": \"#8652ff\",\n \"textDisabled\": \"#94a3b8\"\n },\n \"danger\": {\n \"bg\": \"#ef4444\",\n \"bgHover\": \"#dc2626\",\n \"bgActive\": \"#b91c1c\",\n \"bgDisabled\": \"#fecaca\",\n \"text\": \"#ffffff\",\n \"textDisabled\": \"#94a3b8\"\n },\n \"success\": {\n \"bg\": \"#22c55e\",\n \"bgHover\": \"#16a34a\",\n \"bgActive\": \"#15803d\",\n \"bgDisabled\": \"#bbf7d0\",\n \"text\": \"#ffffff\",\n \"textDisabled\": \"#94a3b8\"\n }\n },\n \"forms\": {\n \"default\": {\n \"bg\": \"#ffffff\",\n \"border\": \"#cbd5f5\",\n \"text\": \"#0f172a\",\n \"placeholder\": \"#94a3b8\"\n },\n \"hover\": {\n \"border\": \"#8652ff\"\n },\n \"focus\": {\n \"border\": \"#8652ff\",\n \"ring\": \"#8652ff\"\n },\n \"valid\": {\n \"border\": \"#22c55e\",\n \"bg\": \"#f0fdf4\",\n \"text\": \"#15803d\"\n },\n \"invalid\": {\n \"border\": \"#ef4444\",\n \"bg\": \"#fef2f2\",\n \"text\": \"#b91c1c\"\n },\n \"disabled\": {\n \"bg\": \"#f8fafc\",\n \"border\": \"#e2e8f0\",\n \"text\": \"#94a3b8\"\n }\n },\n \"spacing\": {\n \"none\": \"0rem\",\n \"3xs\": \"0.125rem\",\n \"2xs\": \"0.25rem\",\n \"xs\": \"0.5rem\",\n \"sm\": \"0.75rem\",\n \"md\": \"1rem\",\n \"lg\": \"1.5rem\",\n \"xl\": \"2rem\",\n \"2xl\": \"3rem\",\n \"3xl\": \"4rem\"\n },\n \"radii\": {\n \"none\": \"0\",\n \"sm\": \"2px\",\n \"md\": \"4px\",\n \"lg\": \"8px\",\n \"pill\": \"999px\"\n },\n \"typography\": {\n \"families\": {\n \"sans\": \"'Inter', 'Helvetica Neue', Arial, sans-serif\",\n \"serif\": \"'Spectre Serif', 'Georgia', serif\",\n \"mono\": \"'JetBrains Mono', 'SFMono-Regular', Consolas, monospace\"\n },\n \"scale\": {\n \"xs\": {\n \"fontSize\": \"0.75rem\",\n \"lineHeight\": \"1.25rem\",\n \"fontWeight\": 400,\n \"letterSpacing\": \"0.02em\"\n },\n \"sm\": {\n \"fontSize\": \"0.875rem\",\n \"lineHeight\": \"1.5rem\",\n \"fontWeight\": 400\n },\n \"md\": {\n \"fontSize\": \"1rem\",\n \"lineHeight\": \"1.75rem\",\n \"fontWeight\": 500\n },\n \"lg\": {\n \"fontSize\": \"1.25rem\",\n \"lineHeight\": \"2rem\",\n \"fontWeight\": 600\n },\n \"xl\": {\n \"fontSize\": \"1.5rem\",\n \"lineHeight\": \"2.125rem\",\n \"fontWeight\": 600\n },\n \"2xl\": {\n \"fontSize\": \"1.875rem\",\n \"lineHeight\": \"2.5rem\",\n \"fontWeight\": 700\n },\n \"3xl\": {\n \"fontSize\": \"2.25rem\",\n \"lineHeight\": \"2.75rem\",\n \"fontWeight\": 700\n }\n }\n },\n \"shadows\": {\n \"none\": \"none\",\n \"sm\": \"0 1px 2px 0 rgba(15, 23, 42, 0.08)\",\n \"md\": \"0 3px 8px -1px rgba(15, 23, 42, 0.1)\",\n \"lg\": \"0 8px 20px -4px rgba(15, 23, 42, 0.18)\"\n },\n \"breakpoints\": {\n \"sm\": \"640px\",\n \"md\": \"768px\",\n \"lg\": \"1024px\",\n \"xl\": \"1280px\",\n \"2xl\": \"1536px\"\n },\n \"zIndex\": {\n \"base\": \"0\",\n \"dropdown\": \"1000\",\n \"sticky\": \"1100\",\n \"fixed\": \"1200\",\n \"overlay\": \"1300\",\n \"modal\": \"1400\",\n \"popover\": \"1500\",\n \"tooltip\": \"1600\"\n },\n \"transitions\": {\n \"duration\": {\n \"instant\": \"75ms\",\n \"fast\": \"150ms\",\n \"base\": \"200ms\",\n \"moderate\": \"300ms\",\n \"slow\": \"500ms\",\n \"slower\": \"700ms\"\n },\n \"easing\": {\n \"linear\": \"linear\",\n \"in\": \"cubic-bezier(0.4, 0, 1, 1)\",\n \"out\": \"cubic-bezier(0, 0, 0.2, 1)\",\n \"inOut\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"spring\": \"cubic-bezier(0.34, 1.56, 0.64, 1)\"\n }\n },\n \"animations\": {\n \"fadeIn\": {\n \"duration\": \"200ms\",\n \"easing\": \"cubic-bezier(0, 0, 0.2, 1)\",\n \"keyframes\": \"fade-in\"\n },\n \"fadeOut\": {\n \"duration\": \"150ms\",\n \"easing\": \"cubic-bezier(0.4, 0, 1, 1)\",\n \"keyframes\": \"fade-out\"\n },\n \"slideUp\": {\n \"duration\": \"300ms\",\n \"easing\": \"cubic-bezier(0, 0, 0.2, 1)\",\n \"keyframes\": \"slide-up\"\n },\n \"slideDown\": {\n \"duration\": \"300ms\",\n \"easing\": \"cubic-bezier(0, 0, 0.2, 1)\",\n \"keyframes\": \"slide-down\"\n },\n \"scaleIn\": {\n \"duration\": \"200ms\",\n \"easing\": \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n \"keyframes\": \"scale-in\"\n },\n \"bounce\": {\n \"duration\": \"500ms\",\n \"easing\": \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n \"keyframes\": \"bounce\"\n },\n \"shake\": {\n \"duration\": \"400ms\",\n \"easing\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"keyframes\": \"shake\"\n },\n \"pulse\": {\n \"duration\": \"1500ms\",\n \"easing\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"keyframes\": \"pulse\"\n }\n }\n}\n","import type { CssVariableMap, CssVariableOptions, Tokens } from './types';\n\nconst DEFAULT_PREFIX = 'sp';\nexport const DEFAULT_SELECTOR = ':root';\n\nconst formatKey = (segment: string): string =>\n segment\n .replace(/[^a-z0-9]+/gi, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n\nconst toVariableName = (prefix: string, ...parts: string[]): string => {\n const filtered = parts.filter(Boolean).map(formatKey);\n return `--${prefix}-${filtered.join('-')}`;\n};\n\nexport const createCssVariableMap = (tokens: Tokens, options: CssVariableOptions = {}): CssVariableMap => {\n const prefix = options.prefix ?? DEFAULT_PREFIX;\n const map: CssVariableMap = {};\n\n const assign = (name: string, value: string | number | undefined) => {\n if (value === undefined) return;\n map[name] = String(value);\n };\n\n Object.entries(tokens.colors).forEach(([group, scale]) => {\n Object.entries(scale).forEach(([step, value]) => {\n assign(toVariableName(prefix, 'color', group, step), value);\n });\n });\n\n Object.entries(tokens.spacing).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'space', key), value);\n });\n\n Object.entries(tokens.radii).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'radius', key), value);\n });\n\n Object.entries(tokens.typography.families).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'font-family', key), value);\n });\n\n Object.entries(tokens.typography.scale).forEach(([key, entry]) => {\n assign(toVariableName(prefix, 'font', key, 'size'), entry.fontSize);\n assign(toVariableName(prefix, 'font', key, 'line-height'), entry.lineHeight);\n assign(toVariableName(prefix, 'font', key, 'weight'), entry.fontWeight);\n assign(toVariableName(prefix, 'font', key, 'letter-spacing'), entry.letterSpacing);\n });\n\n Object.entries(tokens.shadows).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'shadow', key), value);\n });\n\n Object.entries(tokens.breakpoints).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'breakpoint', key), value);\n });\n\n Object.entries(tokens.zIndex).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'z-index', key), value);\n });\n\n Object.entries(tokens.transitions.duration).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'duration', key), value);\n });\n\n Object.entries(tokens.transitions.easing).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'easing', key), value);\n });\n\n Object.entries(tokens.opacity).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'opacity', key), value);\n });\n\n // Accessibility tokens\n assign(toVariableName(prefix, 'focus-ring-width'), tokens.accessibility.focusRing.width);\n assign(toVariableName(prefix, 'focus-ring-offset'), tokens.accessibility.focusRing.offset);\n assign(toVariableName(prefix, 'focus-ring-style'), tokens.accessibility.focusRing.style);\n assign(toVariableName(prefix, 'min-touch-target'), tokens.accessibility.minTouchTarget);\n assign(toVariableName(prefix, 'min-text-size'), tokens.accessibility.minTextSize);\n\n // Button tokens\n Object.entries(tokens.buttons).forEach(([variant, states]) => {\n Object.entries(states).forEach(([state, value]) => {\n assign(toVariableName(prefix, 'button', variant, state), value);\n });\n });\n\n // Form tokens\n Object.entries(tokens.forms).forEach(([state, properties]) => {\n Object.entries(properties).forEach(([prop, value]) => {\n if (value) assign(toVariableName(prefix, 'form', state, prop), value);\n });\n });\n\n // Animation tokens\n Object.entries(tokens.animations).forEach(([name, animation]) => {\n assign(toVariableName(prefix, 'animation', name, 'duration'), animation.duration);\n assign(toVariableName(prefix, 'animation', name, 'easing'), animation.easing);\n assign(toVariableName(prefix, 'animation', name, 'keyframes'), animation.keyframes);\n });\n\n return map;\n};\n\nexport const generateCssVariables = (tokens: Tokens, options: CssVariableOptions = {}): string => {\n const selector = options.selector ?? DEFAULT_SELECTOR;\n const declarations = createCssVariableMap(tokens, options);\n const lines = Object.entries(declarations)\n .map(([name, value]) => ` ${name}: ${value};`)\n .join('\\n');\n\n return `${selector} {\\n${lines}\\n}\\n`;\n};\n","import coreTokens from '../tokens/core.json';\n\nimport { generateCssVariables } from './css';\nimport type { SpectreTokens, TailwindTheme, Tokens } from './types';\n\nexport type { TailwindTheme, Tokens, SpectreTokens, ColorScale, TokenScale, TypographyTokens, TransitionTokens, AccessibilityTokens, ButtonStateTokens, FormStateTokens, AnimationEntry } from './types';\n\nconst tokens: SpectreTokens = coreTokens as SpectreTokens;\n\nconst sanitizeFontFamily = (value: string): string[] =>\n value\n .split(',')\n .map((segment) => segment.trim().replace(/^['\"]|['\"]$/g, ''))\n .filter(Boolean);\n\nconst createTailwindTheme = (source: Tokens = tokens as Tokens): TailwindTheme => {\n const colors: TailwindTheme['colors'] = {};\n Object.entries(source.colors).forEach(([group, scale]) => {\n colors[group] = { ...scale };\n });\n\n const fontFamily = Object.entries(source.typography.families).reduce<Record<string, string[]>>((acc, [key, value]) => {\n acc[key] = sanitizeFontFamily(value);\n return acc;\n }, {});\n\n const fontSize = Object.entries(source.typography.scale).reduce<TailwindTheme['fontSize']>((acc, [key, entry]) => {\n acc[key] = [\n entry.fontSize,\n {\n lineHeight: entry.lineHeight,\n ...(entry.fontWeight ? { fontWeight: entry.fontWeight } : {}),\n ...(entry.letterSpacing ? { letterSpacing: entry.letterSpacing } : {})\n }\n ];\n return acc;\n }, {});\n\n return {\n colors,\n spacing: { ...source.spacing },\n borderRadius: { ...source.radii },\n fontFamily,\n fontSize,\n boxShadow: { ...source.shadows },\n screens: { ...source.breakpoints },\n zIndex: { ...source.zIndex },\n transitionDuration: { ...source.transitions.duration },\n transitionTimingFunction: { ...source.transitions.easing },\n opacity: { ...source.opacity }\n };\n};\n\nexport const tailwindTheme = createTailwindTheme(tokens as Tokens);\nexport const tailwindPreset = {\n theme: tailwindTheme\n};\n\nexport { tokens, generateCssVariables };\nexport default tokens;\n"],"mappings":"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","names":["tokens"]}
1
+ {"version":3,"sources":["../tokens/core.json","../src/css.ts","../src/index.ts"],"sourcesContent":["{\n \"colors\": {\n \"brand\": {\n \"50\": \"#f5f0ff\",\n \"100\": \"#ebe2ff\",\n \"200\": \"#d7c6ff\",\n \"300\": \"#bfa1ff\",\n \"400\": \"#a37aff\",\n \"500\": \"#8652ff\",\n \"600\": \"#6c32e6\",\n \"700\": \"#5626b4\",\n \"800\": \"#3d1b7f\",\n \"900\": \"#241147\"\n },\n \"neutral\": {\n \"50\": \"#f8fafc\",\n \"100\": \"#f1f5f9\",\n \"200\": \"#e2e8f0\",\n \"300\": \"#cbd5f5\",\n \"400\": \"#94a3b8\",\n \"500\": \"#64748b\",\n \"600\": \"#475569\",\n \"700\": \"#334155\",\n \"800\": \"#1e293b\",\n \"900\": \"#0f172a\"\n },\n \"accent\": {\n \"50\": \"#e5fff8\",\n \"100\": \"#b8ffed\",\n \"200\": \"#89ffe1\",\n \"300\": \"#59ffd6\",\n \"400\": \"#29ffca\",\n \"500\": \"#03e6b3\",\n \"600\": \"#00b389\",\n \"700\": \"#008060\",\n \"800\": \"#004d38\",\n \"900\": \"#002a20\"\n },\n \"success\": {\n \"50\": \"#f0fdf4\",\n \"100\": \"#dcfce7\",\n \"200\": \"#bbf7d0\",\n \"300\": \"#86efac\",\n \"400\": \"#4ade80\",\n \"500\": \"#22c55e\",\n \"600\": \"#16a34a\",\n \"700\": \"#15803d\",\n \"800\": \"#166534\",\n \"900\": \"#14532d\"\n },\n \"warning\": {\n \"50\": \"#fffbeb\",\n \"100\": \"#fef3c7\",\n \"200\": \"#fde68a\",\n \"300\": \"#fcd34d\",\n \"400\": \"#fbbf24\",\n \"500\": \"#f59e0b\",\n \"600\": \"#d97706\",\n \"700\": \"#b45309\",\n \"800\": \"#92400e\",\n \"900\": \"#78350f\"\n },\n \"error\": {\n \"50\": \"#fef2f2\",\n \"100\": \"#fee2e2\",\n \"200\": \"#fecaca\",\n \"300\": \"#fca5a5\",\n \"400\": \"#f87171\",\n \"500\": \"#ef4444\",\n \"600\": \"#dc2626\",\n \"700\": \"#b91c1c\",\n \"800\": \"#991b1b\",\n \"900\": \"#7f1d1d\"\n },\n \"info\": {\n \"50\": \"#eff6ff\",\n \"100\": \"#dbeafe\",\n \"200\": \"#bfdbfe\",\n \"300\": \"#93c5fd\",\n \"400\": \"#60a5fa\",\n \"500\": \"#3b82f6\",\n \"600\": \"#2563eb\",\n \"700\": \"#1d4ed8\",\n \"800\": \"#1e40af\",\n \"900\": \"#1e3a8a\"\n },\n \"focus\": {\n \"primary\": \"#8652ff\",\n \"error\": \"#ef4444\",\n \"info\": \"#3b82f6\"\n }\n },\n \"surface\": {\n \"page\": {\n \"value\": \"#0f172a\",\n \"description\": \"primary app background\"\n },\n \"card\": {\n \"value\": \"#1e293b\",\n \"description\": \"containers and tiles\"\n },\n \"input\": {\n \"value\": \"#334155\",\n \"description\": \"form inputs, textareas\"\n },\n \"overlay\": {\n \"value\": \"#1e293b\",\n \"description\": \"modals, dropdowns, flyouts\"\n }\n },\n \"text\": {\n \"onPage\": {\n \"default\": \"#f8fafc\",\n \"muted\": \"#cbd5f5\",\n \"subtle\": \"#94a3b8\"\n },\n \"onSurface\": {\n \"default\": \"#f1f5f9\",\n \"muted\": \"#cbd5f5\",\n \"subtle\": \"#94a3b8\"\n }\n },\n \"component\": {\n \"card\": {\n \"text\": \"#f1f5f9\",\n \"textMuted\": \"#cbd5f5\"\n },\n \"input\": {\n \"text\": \"#f1f5f9\",\n \"placeholder\": \"#94a3b8\"\n },\n \"button\": {\n \"textDefault\": \"#f1f5f9\",\n \"textOnPrimary\": \"#ffffff\"\n }\n },\n \"modes\": {\n \"default\": {\n \"surface\": {},\n \"text\": {}\n },\n \"dark\": {\n \"surface\": {},\n \"text\": {}\n }\n },\n \"opacity\": {\n \"disabled\": \"0.38\",\n \"hover\": \"0.92\",\n \"active\": \"0.84\",\n \"focus\": \"1\",\n \"overlay\": \"0.5\",\n \"tooltip\": \"0.95\"\n },\n \"accessibility\": {\n \"focusRing\": {\n \"width\": \"2px\",\n \"offset\": \"2px\",\n \"style\": \"solid\"\n },\n \"minTouchTarget\": \"44px\",\n \"minTextSize\": \"16px\"\n },\n \"buttons\": {\n \"primary\": {\n \"bg\": \"#8652ff\",\n \"bgHover\": \"#6c32e6\",\n \"bgActive\": \"#5626b4\",\n \"bgDisabled\": \"#cbd5f5\",\n \"text\": \"#ffffff\",\n \"textDisabled\": \"#94a3b8\"\n },\n \"secondary\": {\n \"bg\": \"#ffffff\",\n \"bgHover\": \"#f1f5f9\",\n \"bgActive\": \"#e2e8f0\",\n \"bgDisabled\": \"#f8fafc\",\n \"text\": \"#8652ff\",\n \"textDisabled\": \"#94a3b8\",\n \"border\": \"#8652ff\",\n \"borderDisabled\": \"#cbd5f5\"\n },\n \"ghost\": {\n \"bg\": \"transparent\",\n \"bgHover\": \"#f5f0ff\",\n \"bgActive\": \"#ebe2ff\",\n \"bgDisabled\": \"transparent\",\n \"text\": \"#8652ff\",\n \"textDisabled\": \"#94a3b8\"\n },\n \"danger\": {\n \"bg\": \"#ef4444\",\n \"bgHover\": \"#dc2626\",\n \"bgActive\": \"#b91c1c\",\n \"bgDisabled\": \"#fecaca\",\n \"text\": \"#ffffff\",\n \"textDisabled\": \"#94a3b8\"\n },\n \"success\": {\n \"bg\": \"#22c55e\",\n \"bgHover\": \"#16a34a\",\n \"bgActive\": \"#15803d\",\n \"bgDisabled\": \"#bbf7d0\",\n \"text\": \"#ffffff\",\n \"textDisabled\": \"#94a3b8\"\n }\n },\n \"forms\": {\n \"default\": {\n \"bg\": \"#ffffff\",\n \"border\": \"#cbd5f5\",\n \"text\": \"#0f172a\",\n \"placeholder\": \"#94a3b8\"\n },\n \"hover\": {\n \"border\": \"#8652ff\"\n },\n \"focus\": {\n \"border\": \"#8652ff\",\n \"ring\": \"#8652ff\"\n },\n \"valid\": {\n \"border\": \"#22c55e\",\n \"bg\": \"#f0fdf4\",\n \"text\": \"#15803d\"\n },\n \"invalid\": {\n \"border\": \"#ef4444\",\n \"bg\": \"#fef2f2\",\n \"text\": \"#b91c1c\"\n },\n \"disabled\": {\n \"bg\": \"#f8fafc\",\n \"border\": \"#e2e8f0\",\n \"text\": \"#94a3b8\"\n }\n },\n \"spacing\": {\n \"none\": \"0rem\",\n \"3xs\": \"0.125rem\",\n \"2xs\": \"0.25rem\",\n \"xs\": \"0.5rem\",\n \"sm\": \"0.75rem\",\n \"md\": \"1rem\",\n \"lg\": \"1.5rem\",\n \"xl\": \"2rem\",\n \"2xl\": \"3rem\",\n \"3xl\": \"4rem\"\n },\n \"radii\": {\n \"none\": \"0\",\n \"sm\": \"2px\",\n \"md\": \"4px\",\n \"lg\": \"8px\",\n \"pill\": \"999px\"\n },\n \"borders\": {\n \"card\": \"#334155\",\n \"input\": \"#cbd5f5\"\n },\n \"typography\": {\n \"families\": {\n \"sans\": \"'Inter', 'Helvetica Neue', Arial, sans-serif\",\n \"serif\": \"'Spectre Serif', 'Georgia', serif\",\n \"mono\": \"'JetBrains Mono', 'SFMono-Regular', Consolas, monospace\"\n },\n \"scale\": {\n \"xs\": {\n \"fontSize\": \"0.75rem\",\n \"lineHeight\": \"1.25rem\",\n \"fontWeight\": 400,\n \"letterSpacing\": \"0.02em\"\n },\n \"sm\": {\n \"fontSize\": \"0.875rem\",\n \"lineHeight\": \"1.5rem\",\n \"fontWeight\": 400\n },\n \"md\": {\n \"fontSize\": \"1rem\",\n \"lineHeight\": \"1.75rem\",\n \"fontWeight\": 500\n },\n \"lg\": {\n \"fontSize\": \"1.25rem\",\n \"lineHeight\": \"2rem\",\n \"fontWeight\": 600\n },\n \"xl\": {\n \"fontSize\": \"1.5rem\",\n \"lineHeight\": \"2.125rem\",\n \"fontWeight\": 600\n },\n \"2xl\": {\n \"fontSize\": \"1.875rem\",\n \"lineHeight\": \"2.5rem\",\n \"fontWeight\": 700\n },\n \"3xl\": {\n \"fontSize\": \"2.25rem\",\n \"lineHeight\": \"2.75rem\",\n \"fontWeight\": 700\n }\n }\n },\n \"shadows\": {\n \"none\": \"none\",\n \"sm\": \"0 1px 2px 0 rgba(15, 23, 42, 0.08)\",\n \"md\": \"0 3px 8px -1px rgba(15, 23, 42, 0.1)\",\n \"lg\": \"0 8px 20px -4px rgba(15, 23, 42, 0.18)\"\n },\n \"breakpoints\": {\n \"sm\": \"640px\",\n \"md\": \"768px\",\n \"lg\": \"1024px\",\n \"xl\": \"1280px\",\n \"2xl\": \"1536px\"\n },\n \"zIndex\": {\n \"base\": \"0\",\n \"dropdown\": \"1000\",\n \"sticky\": \"1100\",\n \"fixed\": \"1200\",\n \"overlay\": \"1300\",\n \"modal\": \"1400\",\n \"popover\": \"1500\",\n \"tooltip\": \"1600\"\n },\n \"transitions\": {\n \"duration\": {\n \"instant\": \"75ms\",\n \"fast\": \"150ms\",\n \"base\": \"200ms\",\n \"moderate\": \"300ms\",\n \"slow\": \"500ms\",\n \"slower\": \"700ms\"\n },\n \"easing\": {\n \"linear\": \"linear\",\n \"in\": \"cubic-bezier(0.4, 0, 1, 1)\",\n \"out\": \"cubic-bezier(0, 0, 0.2, 1)\",\n \"inOut\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"spring\": \"cubic-bezier(0.34, 1.56, 0.64, 1)\"\n }\n },\n \"animations\": {\n \"fadeIn\": {\n \"duration\": \"200ms\",\n \"easing\": \"cubic-bezier(0, 0, 0.2, 1)\",\n \"keyframes\": \"fade-in\"\n },\n \"fadeOut\": {\n \"duration\": \"150ms\",\n \"easing\": \"cubic-bezier(0.4, 0, 1, 1)\",\n \"keyframes\": \"fade-out\"\n },\n \"slideUp\": {\n \"duration\": \"300ms\",\n \"easing\": \"cubic-bezier(0, 0, 0.2, 1)\",\n \"keyframes\": \"slide-up\"\n },\n \"slideDown\": {\n \"duration\": \"300ms\",\n \"easing\": \"cubic-bezier(0, 0, 0.2, 1)\",\n \"keyframes\": \"slide-down\"\n },\n \"scaleIn\": {\n \"duration\": \"200ms\",\n \"easing\": \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n \"keyframes\": \"scale-in\"\n },\n \"bounce\": {\n \"duration\": \"500ms\",\n \"easing\": \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n \"keyframes\": \"bounce\"\n },\n \"shake\": {\n \"duration\": \"400ms\",\n \"easing\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"keyframes\": \"shake\"\n },\n \"pulse\": {\n \"duration\": \"1500ms\",\n \"easing\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n \"keyframes\": \"pulse\"\n }\n }\n}\n","import type { CssVariableMap, CssVariableOptions, Tokens } from './types';\n\nconst DEFAULT_PREFIX = 'sp';\nexport const DEFAULT_SELECTOR = ':root';\n\nconst formatKey = (segment: string): string =>\n segment\n .replace(/[^a-z0-9]+/gi, '-')\n .replace(/^-+|-+$/g, '')\n .toLowerCase();\n\nconst toVariableName = (prefix: string, ...parts: string[]): string => {\n const filtered = parts.filter(Boolean).map(formatKey);\n return `--${prefix}-${filtered.join('-')}`;\n};\n\nexport const createCssVariableMap = (tokens: Tokens, options: CssVariableOptions = {}): CssVariableMap => {\n const prefix = options.prefix ?? DEFAULT_PREFIX;\n const map: CssVariableMap = {};\n\n const assign = (name: string, value: string | number | undefined) => {\n if (value === undefined) return;\n map[name] = String(value);\n };\n\n Object.entries(tokens.colors).forEach(([group, scale]) => {\n Object.entries(scale).forEach(([step, value]) => {\n assign(toVariableName(prefix, 'color', group, step), value);\n });\n });\n\n Object.entries(tokens.spacing).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'space', key), value);\n });\n\n Object.entries(tokens.radii).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'radius', key), value);\n });\n\n Object.entries(tokens.typography.families).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'font-family', key), value);\n });\n\n Object.entries(tokens.typography.scale).forEach(([key, entry]) => {\n assign(toVariableName(prefix, 'font', key, 'size'), entry.fontSize);\n assign(toVariableName(prefix, 'font', key, 'line-height'), entry.lineHeight);\n assign(toVariableName(prefix, 'font', key, 'weight'), entry.fontWeight);\n assign(toVariableName(prefix, 'font', key, 'letter-spacing'), entry.letterSpacing);\n });\n\n Object.entries(tokens.shadows).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'shadow', key), value);\n });\n\n Object.entries(tokens.breakpoints).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'breakpoint', key), value);\n });\n\n Object.entries(tokens.zIndex).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'z-index', key), value);\n });\n\n Object.entries(tokens.transitions.duration).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'duration', key), value);\n });\n\n Object.entries(tokens.transitions.easing).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'easing', key), value);\n });\n\n Object.entries(tokens.opacity).forEach(([key, value]) => {\n assign(toVariableName(prefix, 'opacity', key), value);\n });\n\n // Accessibility tokens\n assign(toVariableName(prefix, 'focus-ring-width'), tokens.accessibility.focusRing.width);\n assign(toVariableName(prefix, 'focus-ring-offset'), tokens.accessibility.focusRing.offset);\n assign(toVariableName(prefix, 'focus-ring-style'), tokens.accessibility.focusRing.style);\n assign(toVariableName(prefix, 'min-touch-target'), tokens.accessibility.minTouchTarget);\n assign(toVariableName(prefix, 'min-text-size'), tokens.accessibility.minTextSize);\n\n // Button tokens\n Object.entries(tokens.buttons).forEach(([variant, states]) => {\n Object.entries(states).forEach(([state, value]) => {\n assign(toVariableName(prefix, 'button', variant, state), value);\n });\n });\n\n // Form tokens\n Object.entries(tokens.forms).forEach(([state, properties]) => {\n Object.entries(properties).forEach(([prop, value]) => {\n if (value) assign(toVariableName(prefix, 'form', state, prop), value);\n });\n });\n\n // Animation tokens\n Object.entries(tokens.animations).forEach(([name, animation]) => {\n assign(toVariableName(prefix, 'animation', name, 'duration'), animation.duration);\n assign(toVariableName(prefix, 'animation', name, 'easing'), animation.easing);\n assign(toVariableName(prefix, 'animation', name, 'keyframes'), animation.keyframes);\n });\n\n return map;\n};\n\nexport const generateCssVariables = (tokens: Tokens, options: CssVariableOptions = {}): string => {\n const selector = options.selector ?? DEFAULT_SELECTOR;\n const declarations = createCssVariableMap(tokens, options);\n const lines = Object.entries(declarations)\n .map(([name, value]) => ` ${name}: ${value};`)\n .join('\\n');\n\n return `${selector} {\\n${lines}\\n}\\n`;\n};\n","import coreTokens from '../tokens/core.json';\n\nimport { generateCssVariables } from './css';\nimport type { SpectreTokens, TailwindTheme, Tokens } from './types';\n\nexport type { TailwindTheme, Tokens, SpectreTokens, ColorScale, TokenScale, TypographyTokens, TransitionTokens, AccessibilityTokens, ButtonStateTokens, FormStateTokens, AnimationEntry } from './types';\n\nconst tokens: SpectreTokens = coreTokens as SpectreTokens;\n\nconst sanitizeFontFamily = (value: string): string[] =>\n value\n .split(',')\n .map((segment) => segment.trim().replace(/^['\"]|['\"]$/g, ''))\n .filter(Boolean);\n\nconst createTailwindTheme = (source: Tokens = tokens as Tokens): TailwindTheme => {\n const colors: TailwindTheme['colors'] = {};\n Object.entries(source.colors).forEach(([group, scale]) => {\n colors[group] = { ...scale };\n });\n\n const fontFamily = Object.entries(source.typography.families).reduce<Record<string, string[]>>((acc, [key, value]) => {\n acc[key] = sanitizeFontFamily(value);\n return acc;\n }, {});\n\n const fontSize = Object.entries(source.typography.scale).reduce<TailwindTheme['fontSize']>((acc, [key, entry]) => {\n acc[key] = [\n entry.fontSize,\n {\n lineHeight: entry.lineHeight,\n ...(entry.fontWeight ? { fontWeight: entry.fontWeight } : {}),\n ...(entry.letterSpacing ? { letterSpacing: entry.letterSpacing } : {})\n }\n ];\n return acc;\n }, {});\n\n return {\n colors,\n spacing: { ...source.spacing },\n borderRadius: { ...source.radii },\n fontFamily,\n fontSize,\n boxShadow: { ...source.shadows },\n screens: { ...source.breakpoints },\n zIndex: { ...source.zIndex },\n transitionDuration: { ...source.transitions.duration },\n transitionTimingFunction: { ...source.transitions.easing },\n opacity: { ...source.opacity }\n };\n};\n\nexport const tailwindTheme = createTailwindTheme(tokens as Tokens);\nexport const tailwindPreset = {\n theme: tailwindTheme\n};\n\nexport { tokens, generateCssVariables };\nexport default tokens;\n"],"mappings":"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","names":["tokens"]}
package/package.json CHANGED
@@ -1,15 +1,46 @@
1
1
  {
2
2
  "name": "@phcdevworks/spectre-tokens",
3
- "version": "0.0.2",
3
+ "version": "0.0.3",
4
4
  "description": "Spectre design tokens with JS, TS, Tailwind, and CSS variable outputs.",
5
+ "keywords": [
6
+ "phcdevworks",
7
+ "spectre",
8
+ "spectre-tokens",
9
+ "design-tokens",
10
+ "tokens",
11
+ "css-variables",
12
+ "css-custom-properties",
13
+ "tailwindcss",
14
+ "tailwind-theme",
15
+ "theming",
16
+ "ui-design",
17
+ "typescript",
18
+ "javascript"
19
+ ],
20
+ "author": "PHCDevworks",
21
+ "license": "MIT",
22
+ "funding": [
23
+ {
24
+ "type": "github",
25
+ "url": "https://github.com/sponsors/phcdevworks"
26
+ },
27
+ {
28
+ "type": "buymeacoffee",
29
+ "url": "https://buymeacoffee.com/phcdevworks"
30
+ }
31
+ ],
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/phcdevworks/spectre-tokens.git"
35
+ },
36
+ "bugs": {
37
+ "url": "https://github.com/phcdevworks/spectre-tokens/issues"
38
+ },
39
+ "homepage": "https://github.com/phcdevworks/spectre-tokens#readme",
40
+ "type": "module",
5
41
  "main": "./dist/index.cjs",
6
42
  "module": "./dist/index.js",
7
43
  "types": "./dist/index.d.ts",
8
- "scripts": {
9
- "build": "npm run build:ts && npm run build:css",
10
- "build:ts": "tsup",
11
- "build:css": "node scripts/build-css.js"
12
- },
13
44
  "exports": {
14
45
  ".": {
15
46
  "import": "./dist/index.js",
@@ -23,19 +54,18 @@
23
54
  "tokens"
24
55
  ],
25
56
  "sideEffects": false,
26
- "repository": {
27
- "type": "git",
28
- "url": "git+https://github.com/phcdevworks/spectre-tokens.git"
57
+ "scripts": {
58
+ "build": "npm run build:ts && npm run build:css",
59
+ "build:ts": "tsup",
60
+ "build:css": "node scripts/build-css.js",
61
+ "check:tokens": "tsx scripts/check-tokens-regression.ts"
29
62
  },
30
- "keywords": [],
31
- "author": "",
32
- "license": "MIT",
33
- "bugs": {
34
- "url": "https://github.com/phcdevworks/spectre-tokens/issues"
63
+ "publishConfig": {
64
+ "access": "public"
35
65
  },
36
- "homepage": "https://github.com/phcdevworks/spectre-tokens#readme",
37
- "type": "module",
38
66
  "devDependencies": {
67
+ "ts-node": "^10.9.2",
68
+ "tsx": "^4.16.2",
39
69
  "tsup": "^8.5.1",
40
70
  "typescript": "^5.9.3"
41
71
  }
package/tokens/core.json CHANGED
@@ -90,6 +90,60 @@
90
90
  "info": "#3b82f6"
91
91
  }
92
92
  },
93
+ "surface": {
94
+ "page": {
95
+ "value": "#0f172a",
96
+ "description": "primary app background"
97
+ },
98
+ "card": {
99
+ "value": "#1e293b",
100
+ "description": "containers and tiles"
101
+ },
102
+ "input": {
103
+ "value": "#334155",
104
+ "description": "form inputs, textareas"
105
+ },
106
+ "overlay": {
107
+ "value": "#1e293b",
108
+ "description": "modals, dropdowns, flyouts"
109
+ }
110
+ },
111
+ "text": {
112
+ "onPage": {
113
+ "default": "#f8fafc",
114
+ "muted": "#cbd5f5",
115
+ "subtle": "#94a3b8"
116
+ },
117
+ "onSurface": {
118
+ "default": "#f1f5f9",
119
+ "muted": "#cbd5f5",
120
+ "subtle": "#94a3b8"
121
+ }
122
+ },
123
+ "component": {
124
+ "card": {
125
+ "text": "#f1f5f9",
126
+ "textMuted": "#cbd5f5"
127
+ },
128
+ "input": {
129
+ "text": "#f1f5f9",
130
+ "placeholder": "#94a3b8"
131
+ },
132
+ "button": {
133
+ "textDefault": "#f1f5f9",
134
+ "textOnPrimary": "#ffffff"
135
+ }
136
+ },
137
+ "modes": {
138
+ "default": {
139
+ "surface": {},
140
+ "text": {}
141
+ },
142
+ "dark": {
143
+ "surface": {},
144
+ "text": {}
145
+ }
146
+ },
93
147
  "opacity": {
94
148
  "disabled": "0.38",
95
149
  "hover": "0.92",
@@ -200,6 +254,10 @@
200
254
  "lg": "8px",
201
255
  "pill": "999px"
202
256
  },
257
+ "borders": {
258
+ "card": "#334155",
259
+ "input": "#cbd5f5"
260
+ },
203
261
  "typography": {
204
262
  "families": {
205
263
  "sans": "'Inter', 'Helvetica Neue', Arial, sans-serif",