eidotter 0.19.1 → 0.20.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.
@@ -4,7 +4,7 @@ A DOS-themed React component library with authentic CGA/amber phosphor aesthetic
4
4
 
5
5
  ## Overview
6
6
 
7
- eidotter provides 33 ready-to-use components with consistent DOS terminal styling:
7
+ eidotter provides 36 ready-to-use components with consistent DOS terminal styling:
8
8
 
9
9
  - **Dark theme only** - Amber-on-black phosphor CRT aesthetic
10
10
  - **CGA color palette** - 16 authentic CGA colors + amber extensions
@@ -17,9 +17,8 @@ eidotter provides 33 ready-to-use components with consistent DOS terminal stylin
17
17
 
18
18
  ```tsx
19
19
  import { Button, Card, Input } from 'eidotter';
20
- import 'eidotter/fonts.css'; // Flexi IBM VGA True @font-face (required)
21
- import 'eidotter/styles'; // Component CSS (includes Tailwind utilities)
22
- import 'eidotter/tokens.css'; // CSS variable definitions (required)
20
+ import 'eidotter/styles'; // All styles: fonts, tokens, components, Tailwind utilities
21
+ // Optional (v0.19.4+): import 'eidotter/utilities'; // .dos-* classes for raw HTML / MDX / prose
23
22
 
24
23
  function App() {
25
24
  return (
@@ -46,12 +45,15 @@ function App() {
46
45
  | ChatInput | Multiline textarea with Enter-to-send |
47
46
  | ChatContainer | Composes ChatHistory + ChatInput |
48
47
  | Checkbox | Boolean form inputs with DOS bracket indicator |
48
+ | CmdPalette | ⌘K / Ctrl+K command palette overlay with scored search + keyboard nav |
49
49
  | CommandPrompt | DOS command line display |
50
+ | DosFigure | Demoscene-style painted-screen media placeholder with scanline sweep |
50
51
  | FilterBar | Multi-select toggle group |
51
52
  | Footer | Site footer with legal links |
52
53
  | Header | Sticky site header with branding + Nav |
53
54
  | Icon | SVG icons backed by pixelarticons (MIT) — authentic DOS pixel art |
54
55
  | InlineExpand | Inline disclosure widget |
56
+ | InlineLink | In-flow navigational anchor — dotted underline, phosphor-invert hover, external variant |
55
57
  | Input | Text entry fields with label and error support |
56
58
  | Modal | Dialog overlays |
57
59
  | Nav | Responsive navigation (desktop + mobile) |
@@ -90,14 +92,20 @@ function App() {
90
92
  ### CSS Import (required)
91
93
 
92
94
  ```tsx
93
- import 'eidotter/fonts.css'; // Flexi IBM VGA True @font-face (required)
94
- import 'eidotter/styles'; // Component CSS (includes compiled Tailwind utilities)
95
- import 'eidotter/tokens.css'; // Design token CSS variables
95
+ import 'eidotter/styles'; // All styles: fonts, tokens, components, Tailwind utilities
96
96
 
97
97
  // Optional: import a theme
98
98
  import 'eidotter/themes/amber-mono.css';
99
99
  ```
100
100
 
101
+ Individual imports are still available if you need granular control (e.g., providing your own font or overriding tokens):
102
+
103
+ ```tsx
104
+ import 'eidotter/fonts.css'; // Flexi IBM VGA True @font-face
105
+ import 'eidotter/tokens.css'; // Design token CSS variables
106
+ import 'eidotter/styles'; // Component CSS + Tailwind utilities
107
+ ```
108
+
101
109
  ### Tailwind Preset (optional)
102
110
 
103
111
  Use eidotter tokens as Tailwind classes in your own code:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eidotter",
3
- "version": "0.19.1",
3
+ "version": "0.20.0",
4
4
  "type": "module",
5
5
  "description": "A DOS Themed Design System",
6
6
  "main": "./dist/index.umd.js",
@@ -13,6 +13,7 @@
13
13
  "require": "./dist/index.umd.js"
14
14
  },
15
15
  "./styles": "./dist/eidotter.css",
16
+ "./utilities": "./src/styles/dos-utilities.css",
16
17
  "./tailwind.preset": "./tailwind.preset.cjs",
17
18
  "./tailwind.preset.enhanced": "./tailwind.preset.enhanced.cjs",
18
19
  "./fonts.css": "./src/styles/fonts.css",
@@ -36,6 +37,7 @@
36
37
  "src/styles/fonts/Flexi_IBM_VGA_LICENSE.txt",
37
38
  "src/styles/tokens.css",
38
39
  "src/styles/theme.*.css",
40
+ "src/styles/dos-utilities.css",
39
41
  "guidelines"
40
42
  ],
41
43
  "scripts": {
@@ -88,7 +90,7 @@
88
90
  "devDependencies": {
89
91
  "@eslint/js": "^10.0.1",
90
92
  "@figma/plugin-typings": "^1.107.0-beta.2",
91
- "@figma/rest-api-spec": "^0.36.0",
93
+ "@figma/rest-api-spec": "^0.37.0",
92
94
  "@storybook/addon-a11y": "^10.2.7",
93
95
  "@storybook/addon-designs": "^11.1.2",
94
96
  "@storybook/addon-docs": "^10.2.7",
@@ -106,7 +108,7 @@
106
108
  "@types/react-dom": "^19.0.0",
107
109
  "@vitejs/plugin-react": "^5.1.2",
108
110
  "autoprefixer": "^10.4.27",
109
- "chromatic": "^15.2.0",
111
+ "chromatic": "^16.2.0",
110
112
  "cross-env": "^10.1.0",
111
113
  "dotenv": "^17.3.1",
112
114
  "eslint": "^10.0.3",
@@ -133,7 +135,7 @@
133
135
  "vite": "^6.2.0"
134
136
  },
135
137
  "dependencies": {
136
- "pixelarticons": "^2.0.2",
138
+ "pixelarticons": "^2.1.0",
137
139
  "react-aria": "^3.47.0",
138
140
  "react-aria-components": "^1.16.0",
139
141
  "react-stately": "^3.45.0"
@@ -0,0 +1,197 @@
1
+ /* =============================================================================
2
+ * eidotter — .dos-* typography utilities (opt-in)
3
+ *
4
+ * Apply DOS typography to raw HTML in prose, MDX, or CMS output when wrapping
5
+ * every element in a component is overkill.
6
+ *
7
+ * Usage:
8
+ * import 'eidotter/utilities'; // opt-in; not in the default 'eidotter/styles' bundle
9
+ *
10
+ * <div class="dos-page">
11
+ * <h1 class="dos-h1">MAIN TITLE</h1>
12
+ * <p class="dos-body">Body copy.</p>
13
+ * <code class="dos-code">DIR /W</code>
14
+ * </div>
15
+ *
16
+ * All classes resolve through the repo's existing semantic + primitive tokens,
17
+ * so they track the active theme (amber-mono, cga-amber, cga-mode4-*, cga-mode5)
18
+ * automatically.
19
+ *
20
+ * Requires `eidotter/tokens.css` (or the bundled `eidotter/styles`) to be
21
+ * imported at the consumer root so the referenced custom properties resolve.
22
+ * Without tokens.css, every `var()` fallback kicks in and the utilities lose
23
+ * theme tracking.
24
+ *
25
+ * T11 handoff adoption — see CHANGELOG.md for rationale.
26
+ * ========================================================================== */
27
+
28
+ /* Shared font-family + weight, applied at zero specificity via :where() so
29
+ * consumer overrides win without !important. */
30
+ :where(
31
+ .dos-page,
32
+ .dos-hero,
33
+ .dos-h1,
34
+ .dos-h2,
35
+ .dos-h3,
36
+ .dos-h4,
37
+ .dos-h5,
38
+ .dos-body,
39
+ .dos-body-lg,
40
+ .dos-caption,
41
+ .dos-micro,
42
+ .dos-label,
43
+ .dos-code
44
+ ) {
45
+ font-family: var(--typography-font-family-primary), var(--typography-font-family-fallback);
46
+ font-weight: var(--typography-font-weight-regular, 400);
47
+ font-synthesis: none;
48
+ }
49
+
50
+ /* ---- Page shell --------------------------------------------------------- */
51
+
52
+ .dos-page {
53
+ background-color: var(--color-semantic-background-primary);
54
+ color: var(--color-semantic-text-primary);
55
+ font-size: var(--typography-font-size-text-md, 1.375rem);
56
+ line-height: var(--typography-line-height-text-md, 1.5rem);
57
+ -webkit-font-smoothing: none;
58
+ -moz-osx-font-smoothing: grayscale;
59
+ }
60
+
61
+ /* ---- Display tier (display-* tokens) ------------------------------------ */
62
+
63
+ .dos-hero {
64
+ font-size: var(--typography-font-size-display-2xl, 4.875rem);
65
+ line-height: var(--typography-line-height-display-2xl, 5.625rem);
66
+ color: var(--color-semantic-text-accent);
67
+ text-shadow: 0 0 14px var(--color-cga-amber-glow);
68
+ text-transform: uppercase;
69
+ letter-spacing: 0;
70
+ }
71
+
72
+ .dos-h1 {
73
+ font-size: var(--typography-font-size-display-xl, 4.125rem);
74
+ line-height: var(--typography-line-height-display-xl, 4.5rem);
75
+ color: var(--color-semantic-text-accent);
76
+ text-shadow: 0 0 8px var(--color-cga-amber-glow);
77
+ text-transform: uppercase;
78
+ }
79
+
80
+ .dos-h2 {
81
+ font-size: var(--typography-font-size-display-lg, 3.5rem);
82
+ line-height: var(--typography-line-height-display-lg, 3.75rem);
83
+ color: var(--color-semantic-text-accent);
84
+ text-shadow: 0 0 8px var(--color-cga-amber-glow);
85
+ text-transform: uppercase;
86
+ }
87
+
88
+ .dos-h3 {
89
+ font-size: var(--typography-font-size-display-md, 2.625rem);
90
+ line-height: var(--typography-line-height-display-md, 2.75rem);
91
+ color: var(--color-semantic-text-accent);
92
+ text-shadow: 0 0 4px var(--color-cga-amber-glow);
93
+ text-transform: uppercase;
94
+ }
95
+
96
+ .dos-h4 {
97
+ font-size: var(--typography-font-size-display-sm, 2.25rem);
98
+ line-height: var(--typography-line-height-display-sm, 2.375rem);
99
+ color: var(--color-semantic-text-primary);
100
+ text-transform: uppercase;
101
+ }
102
+
103
+ .dos-h5 {
104
+ font-size: var(--typography-font-size-display-xs, 1.875rem);
105
+ line-height: var(--typography-line-height-display-xs, 2rem);
106
+ color: var(--color-semantic-text-primary);
107
+ text-transform: uppercase;
108
+ }
109
+
110
+ /* ---- Body (text-* tokens) ---------------------------------------------- */
111
+
112
+ .dos-body {
113
+ font-size: var(--typography-font-size-text-md, 1.375rem);
114
+ line-height: var(--typography-line-height-text-md, 1.5rem);
115
+ color: var(--color-semantic-text-primary);
116
+ }
117
+
118
+ .dos-body-lg {
119
+ font-size: var(--typography-font-size-text-lg, 1.5rem);
120
+ line-height: var(--typography-line-height-text-lg, 1.75rem);
121
+ color: var(--color-semantic-text-primary);
122
+ }
123
+
124
+ /* ---- Meta rows --------------------------------------------------------- */
125
+
126
+ .dos-caption {
127
+ font-size: var(--typography-font-size-text-sm, 1.25rem);
128
+ line-height: var(--typography-line-height-text-sm, 1.25rem);
129
+ color: var(--color-semantic-text-muted);
130
+ text-transform: uppercase;
131
+ letter-spacing: 0.05em;
132
+ }
133
+
134
+ .dos-micro {
135
+ font-size: var(--typography-font-size-text-xs, 1.125rem);
136
+ line-height: var(--typography-line-height-text-xs, 1.125rem);
137
+ color: var(--color-semantic-text-muted);
138
+ }
139
+
140
+ .dos-label {
141
+ font-size: var(--typography-font-size-text-sm, 1.25rem);
142
+ line-height: var(--typography-line-height-text-sm, 1.25rem);
143
+ color: var(--color-semantic-text-accent);
144
+ text-transform: uppercase;
145
+ letter-spacing: 0.1em;
146
+ }
147
+
148
+ .dos-code {
149
+ font-size: var(--typography-font-size-text-sm, 1.25rem);
150
+ line-height: var(--typography-line-height-text-sm, 1.25rem);
151
+ color: var(--color-semantic-text-accent);
152
+ background-color: var(--color-semantic-background-secondary);
153
+ padding: 0 var(--spacing-1, 4px);
154
+ border: 1px solid var(--color-semantic-border-default);
155
+ border-radius: var(--border-radius-sm, 2px);
156
+ }
157
+
158
+ /* ---- Scanlines overlay -------------------------------------------------- */
159
+
160
+ /* Intended for dark-surface overlays (e.g., `.dos-page` or components on
161
+ * `bg-primary`). `mix-blend-mode: overlay` inverts over light surfaces —
162
+ * document this constraint when consuming. */
163
+ .dos-scanlines {
164
+ position: relative;
165
+ }
166
+
167
+ .dos-scanlines::after {
168
+ content: "";
169
+ position: absolute;
170
+ inset: 0;
171
+ pointer-events: none;
172
+ background: repeating-linear-gradient(
173
+ 0deg,
174
+ var(--effects-scanline-dark, rgba(255,176,0,0.02)) 0px,
175
+ var(--effects-scanline-dark, rgba(255,176,0,0.02)) 1px,
176
+ var(--effects-scanline-light, rgba(255,176,0,0.05)) 1px,
177
+ var(--effects-scanline-light, rgba(255,176,0,0.05)) 3px
178
+ );
179
+ mix-blend-mode: overlay;
180
+ opacity: 0.6;
181
+ }
182
+
183
+ /* =============================================================================
184
+ * Accessibility
185
+ * ========================================================================== */
186
+
187
+ @media (prefers-contrast: high) {
188
+ .dos-hero,
189
+ .dos-h1,
190
+ .dos-h2,
191
+ .dos-h3 {
192
+ text-shadow: none;
193
+ }
194
+ .dos-code {
195
+ border-width: 2px;
196
+ }
197
+ }
@@ -29,8 +29,8 @@
29
29
  --color-cga-magenta-glow: rgba(255, 85, 255, 0.5); /** Magenta glow at 50% opacity */
30
30
  --color-cga-blue-glow: rgba(85, 85, 255, 0.5); /** Blue glow at 50% opacity */
31
31
  --color-cga-white-glow: rgba(255, 245, 224, 0.5); /** Warm white glow at 50% opacity */
32
- --typography-font-family-primary: 'Flexi IBM VGA True'; /** Flexi IBM VGA True v2 — vector remake of IBM VGA BIOS font, aspect-corrected (CC BY-SA 4.0) */
33
- --typography-font-family-fallback: monospace; /** Generic monospace fallback — intentionally bare to surface missing font-face */
32
+ --typography-font-family-primary: 'Flexi IBM VGA True', monospace; /** Flexi IBM VGA True v2 (CC BY-SA 4.0) with a `monospace` fallback that preserves DOS aesthetic on @font-face failure. */
33
+ --typography-font-family-fallback: monospace; /** Bare `monospace` stack — fail-loud diagnostic counterpart to `primary`. Compose with `primary` when consumers want strict Flexi-or-nothing rendering. */
34
34
  --typography-font-size-text-xs: 1.125rem; /** 18px — smallest body text */
35
35
  --typography-font-size-text-sm: 1.25rem; /** 20px — secondary body text */
36
36
  --typography-font-size-text-md: 1.375rem; /** 22px — default body text */
@@ -144,6 +144,7 @@
144
144
  --color-semantic-text-secondary: var(--color-cga-black);
145
145
  --color-semantic-text-accent: var(--color-cga-yellow);
146
146
  --color-semantic-text-disabled: var(--color-cga-amber-dim);
147
+ --color-semantic-text-muted: var(--color-cga-light-gray);
147
148
  --color-semantic-border-default: var(--color-cga-amber);
148
149
  --color-semantic-border-focus: var(--color-cga-amber-bright);
149
150
  --color-semantic-border-hover: var(--color-cga-yellow);
@@ -33,8 +33,8 @@
33
33
  --color-semantic-alert-success: #122010;
34
34
  --color-semantic-alert-warning: #352800;
35
35
  --color-semantic-alert-error: #430500;
36
- --typography-font-family-primary: 'Flexi IBM VGA True'; /** Flexi IBM VGA True v2 — vector remake of IBM VGA BIOS font, aspect-corrected (CC BY-SA 4.0) */
37
- --typography-font-family-fallback: monospace; /** Generic monospace fallback — intentionally bare to surface missing font-face */
36
+ --typography-font-family-primary: 'Flexi IBM VGA True', monospace; /** Flexi IBM VGA True v2 (CC BY-SA 4.0) with a `monospace` fallback that preserves DOS aesthetic on @font-face failure. */
37
+ --typography-font-family-fallback: monospace; /** Bare `monospace` stack — fail-loud diagnostic counterpart to `primary`. Compose with `primary` when consumers want strict Flexi-or-nothing rendering. */
38
38
  --typography-font-size-text-xs: 1.125rem; /** 18px — smallest body text */
39
39
  --typography-font-size-text-sm: 1.25rem; /** 20px — secondary body text */
40
40
  --typography-font-size-text-md: 1.375rem; /** 22px — default body text */
@@ -148,6 +148,7 @@
148
148
  --color-semantic-text-secondary: var(--color-cga-black);
149
149
  --color-semantic-text-accent: var(--color-cga-amber);
150
150
  --color-semantic-text-disabled: var(--color-cga-dark-gray);
151
+ --color-semantic-text-muted: var(--color-cga-brown);
151
152
  --color-semantic-border-default: var(--color-cga-light-gray);
152
153
  --color-semantic-border-focus: var(--color-cga-amber);
153
154
  --color-semantic-border-hover: var(--color-cga-amber-bright);
@@ -36,6 +36,7 @@
36
36
  --color-semantic-text-secondary: #050300;
37
37
  --color-semantic-text-accent: #00ff00;
38
38
  --color-semantic-text-disabled: #ff0000;
39
+ --color-semantic-text-muted: rgba(255, 255, 0, 0.65);
39
40
  --color-semantic-border-default: #00ff00;
40
41
  --color-semantic-border-focus: #ffff00;
41
42
  --color-semantic-border-hover: #ff0000;
@@ -52,8 +53,8 @@
52
53
  --color-semantic-alert-success: #050300;
53
54
  --color-semantic-alert-warning: #050300;
54
55
  --color-semantic-alert-error: #050300;
55
- --typography-font-family-primary: 'Flexi IBM VGA True'; /** Flexi IBM VGA True v2 — vector remake of IBM VGA BIOS font, aspect-corrected (CC BY-SA 4.0) */
56
- --typography-font-family-fallback: monospace; /** Generic monospace fallback — intentionally bare to surface missing font-face */
56
+ --typography-font-family-primary: 'Flexi IBM VGA True', monospace; /** Flexi IBM VGA True v2 (CC BY-SA 4.0) with a `monospace` fallback that preserves DOS aesthetic on @font-face failure. */
57
+ --typography-font-family-fallback: monospace; /** Bare `monospace` stack — fail-loud diagnostic counterpart to `primary`. Compose with `primary` when consumers want strict Flexi-or-nothing rendering. */
57
58
  --typography-font-size-text-xs: 1.125rem; /** 18px — smallest body text */
58
59
  --typography-font-size-text-sm: 1.25rem; /** 20px — secondary body text */
59
60
  --typography-font-size-text-md: 1.375rem; /** 22px — default body text */
@@ -36,6 +36,7 @@
36
36
  --color-semantic-text-secondary: #050300;
37
37
  --color-semantic-text-accent: #00ffff;
38
38
  --color-semantic-text-disabled: #ff00ff;
39
+ --color-semantic-text-muted: rgba(255, 252, 247, 0.65);
39
40
  --color-semantic-border-default: #00ffff;
40
41
  --color-semantic-border-focus: #fffcf7;
41
42
  --color-semantic-border-hover: #ff00ff;
@@ -52,8 +53,8 @@
52
53
  --color-semantic-alert-success: #050300;
53
54
  --color-semantic-alert-warning: #050300;
54
55
  --color-semantic-alert-error: #050300;
55
- --typography-font-family-primary: 'Flexi IBM VGA True'; /** Flexi IBM VGA True v2 — vector remake of IBM VGA BIOS font, aspect-corrected (CC BY-SA 4.0) */
56
- --typography-font-family-fallback: monospace; /** Generic monospace fallback — intentionally bare to surface missing font-face */
56
+ --typography-font-family-primary: 'Flexi IBM VGA True', monospace; /** Flexi IBM VGA True v2 (CC BY-SA 4.0) with a `monospace` fallback that preserves DOS aesthetic on @font-face failure. */
57
+ --typography-font-family-fallback: monospace; /** Bare `monospace` stack — fail-loud diagnostic counterpart to `primary`. Compose with `primary` when consumers want strict Flexi-or-nothing rendering. */
57
58
  --typography-font-size-text-xs: 1.125rem; /** 18px — smallest body text */
58
59
  --typography-font-size-text-sm: 1.25rem; /** 20px — secondary body text */
59
60
  --typography-font-size-text-md: 1.375rem; /** 22px — default body text */
@@ -36,6 +36,7 @@
36
36
  --color-semantic-text-secondary: #050300;
37
37
  --color-semantic-text-accent: #00ffff;
38
38
  --color-semantic-text-disabled: #ff0000;
39
+ --color-semantic-text-muted: rgba(255, 252, 247, 0.65);
39
40
  --color-semantic-border-default: #00ffff;
40
41
  --color-semantic-border-focus: #fffcf7;
41
42
  --color-semantic-border-hover: #ff0000;
@@ -52,8 +53,8 @@
52
53
  --color-semantic-alert-success: #050300;
53
54
  --color-semantic-alert-warning: #050300;
54
55
  --color-semantic-alert-error: #050300;
55
- --typography-font-family-primary: 'Flexi IBM VGA True'; /** Flexi IBM VGA True v2 — vector remake of IBM VGA BIOS font, aspect-corrected (CC BY-SA 4.0) */
56
- --typography-font-family-fallback: monospace; /** Generic monospace fallback — intentionally bare to surface missing font-face */
56
+ --typography-font-family-primary: 'Flexi IBM VGA True', monospace; /** Flexi IBM VGA True v2 (CC BY-SA 4.0) with a `monospace` fallback that preserves DOS aesthetic on @font-face failure. */
57
+ --typography-font-family-fallback: monospace; /** Bare `monospace` stack — fail-loud diagnostic counterpart to `primary`. Compose with `primary` when consumers want strict Flexi-or-nothing rendering. */
57
58
  --typography-font-size-text-xs: 1.125rem; /** 18px — smallest body text */
58
59
  --typography-font-size-text-sm: 1.25rem; /** 20px — secondary body text */
59
60
  --typography-font-size-text-md: 1.375rem; /** 22px — default body text */
@@ -33,8 +33,8 @@
33
33
  --color-semantic-alert-success: #122010; /** Warm dark green for success alerts */
34
34
  --color-semantic-alert-warning: #352800; /** Dark amber for warning alerts */
35
35
  --color-semantic-alert-error: #430500; /** Warm dark red for error alerts */
36
- --typography-font-family-primary: 'Flexi IBM VGA True'; /** Flexi IBM VGA True v2 — vector remake of IBM VGA BIOS font, aspect-corrected (CC BY-SA 4.0) */
37
- --typography-font-family-fallback: monospace; /** Generic monospace fallback — intentionally bare to surface missing font-face */
36
+ --typography-font-family-primary: 'Flexi IBM VGA True', monospace; /** Flexi IBM VGA True v2 (CC BY-SA 4.0) with a `monospace` fallback that preserves DOS aesthetic on @font-face failure. */
37
+ --typography-font-family-fallback: monospace; /** Bare `monospace` stack — fail-loud diagnostic counterpart to `primary`. Compose with `primary` when consumers want strict Flexi-or-nothing rendering. */
38
38
  --typography-font-size-text-xs: 1.125rem; /** 18px — smallest body text */
39
39
  --typography-font-size-text-sm: 1.25rem; /** 20px — secondary body text */
40
40
  --typography-font-size-text-md: 1.375rem; /** 22px — default body text */
@@ -148,6 +148,7 @@
148
148
  --color-semantic-text-secondary: var(--color-cga-black);
149
149
  --color-semantic-text-accent: var(--color-cga-yellow);
150
150
  --color-semantic-text-disabled: var(--color-cga-dark-gray);
151
+ --color-semantic-text-muted: var(--color-cga-amber-dim); /** Muted supplementary text — timestamps, counts, footnotes. T10 handoff: dedicated amber-dim hex (in-family with primary), not brown; no opacity coupling. */
151
152
  --color-semantic-border-default: var(--color-cga-light-gray);
152
153
  --color-semantic-border-focus: var(--color-cga-yellow);
153
154
  --color-semantic-border-hover: var(--color-cga-white);
@@ -5,6 +5,8 @@
5
5
  * Generated from: src/tokens/base.tokens.json
6
6
  * Run: npm run build-tokens
7
7
  *
8
+ * Includes all design tokens plus optional React Aria and animate plugins.
9
+ *
8
10
  * Usage:
9
11
  * // tailwind.config.js
10
12
  * module.exports = {
@@ -12,7 +14,23 @@
12
14
  * }
13
15
  */
14
16
 
15
- module.exports = {
17
+ let reactAriaPlugin;
18
+ try {
19
+ reactAriaPlugin = require('tailwindcss-react-aria-components');
20
+ } catch {
21
+ // tailwindcss-react-aria-components not installed — skip
22
+ reactAriaPlugin = null;
23
+ }
24
+
25
+ let animatePlugin;
26
+ try {
27
+ animatePlugin = require('tailwindcss-animate');
28
+ } catch {
29
+ // tailwindcss-animate not installed — skip
30
+ animatePlugin = null;
31
+ }
32
+
33
+ const preset = {
16
34
  "theme": {
17
35
  "extend": {
18
36
  "colors": {
@@ -36,6 +54,12 @@ module.exports = {
36
54
  "cga-amber-bright": "#fdca9f",
37
55
  "cga-amber-dim": "#9a5700",
38
56
  "cga-amber-glow": "#ffb00080",
57
+ "cga-red-glow": "#ff555580",
58
+ "cga-green-glow": "#55ff5580",
59
+ "cga-cyan-glow": "#55ffff80",
60
+ "cga-magenta-glow": "#ff55ff80",
61
+ "cga-blue-glow": "#5555ff80",
62
+ "cga-white-glow": "#fff5e080",
39
63
  "dos-bg-primary": "var(--color-semantic-background-primary)",
40
64
  "dos-bg-secondary": "var(--color-semantic-background-secondary)",
41
65
  "dos-bg-accent": "var(--color-semantic-background-accent)",
@@ -43,6 +67,7 @@ module.exports = {
43
67
  "dos-text-secondary": "var(--color-semantic-text-secondary)",
44
68
  "dos-text-accent": "var(--color-semantic-text-accent)",
45
69
  "dos-text-disabled": "var(--color-semantic-text-disabled)",
70
+ "dos-text-muted": "var(--color-semantic-text-muted)",
46
71
  "dos-border-default": "var(--color-semantic-border-default)",
47
72
  "dos-border-focus": "var(--color-semantic-border-focus)",
48
73
  "dos-border-hover": "var(--color-semantic-border-hover)",
@@ -64,9 +89,6 @@ module.exports = {
64
89
  "monospace"
65
90
  ],
66
91
  "dos-fallback": [
67
- "Consolas",
68
- "Monaco",
69
- "\"Courier New\"",
70
92
  "monospace"
71
93
  ]
72
94
  },
@@ -96,19 +118,12 @@ module.exports = {
96
118
  "dos-display-xl": "4.5rem",
97
119
  "dos-display-2xl": "5.625rem"
98
120
  },
99
- // Flexi IBM VGA True is a single-weight bitmap-style font. Authentic
100
- // DOS had no bold variant — emphasis is expressed via color, uppercase,
101
- // or inverse video. The dos-regular/semibold/bold utilities are kept
102
- // as aliases all resolving to 400 so existing consumer code using
103
- // font-dos-bold / font-dos-semibold keeps working without visual change.
104
- // Mirrors the generated tailwind.preset.js.
105
121
  "fontWeight": {
106
122
  "dos-regular": "400",
107
123
  "dos-semibold": "400",
108
124
  "dos-bold": "400"
109
125
  },
110
126
  "spacing": {
111
- "dos-0": "0px",
112
127
  "dos-1": "4px",
113
128
  "dos-2": "8px",
114
129
  "dos-3": "12px",
@@ -121,7 +136,6 @@ module.exports = {
121
136
  "dos-16": "64px"
122
137
  },
123
138
  "borderRadius": {
124
- "dos-none": "0px",
125
139
  "dos-sm": "2px",
126
140
  "dos-base": "4px"
127
141
  },
@@ -131,8 +145,40 @@ module.exports = {
131
145
  "dos-glowXs": "0px 0px 8px 0px #FFB00080",
132
146
  "dos-glowSm": "0px 0px 10px 0px #FFB00080",
133
147
  "dos-glowMd": "0px 0px 20px 0px #FFB00080",
134
- "dos-glowLg": "0px 0px 30px 0px #FFB00080"
148
+ "dos-glowLg": "0px 0px 30px 0px #FFB00080",
149
+ "dos-glowXsRed": "0px 0px 8px 0px #FF555580",
150
+ "dos-glowSmRed": "0px 0px 10px 0px #FF555580",
151
+ "dos-glowMdRed": "0px 0px 20px 0px #FF555580",
152
+ "dos-glowLgRed": "0px 0px 30px 0px #FF555580",
153
+ "dos-glowXsGreen": "0px 0px 8px 0px #55FF5580",
154
+ "dos-glowSmGreen": "0px 0px 10px 0px #55FF5580",
155
+ "dos-glowMdGreen": "0px 0px 20px 0px #55FF5580",
156
+ "dos-glowLgGreen": "0px 0px 30px 0px #55FF5580",
157
+ "dos-glowXsCyan": "0px 0px 8px 0px #55FFFF80",
158
+ "dos-glowSmCyan": "0px 0px 10px 0px #55FFFF80",
159
+ "dos-glowMdCyan": "0px 0px 20px 0px #55FFFF80",
160
+ "dos-glowLgCyan": "0px 0px 30px 0px #55FFFF80",
161
+ "dos-glowXsMagenta": "0px 0px 8px 0px #FF55FF80",
162
+ "dos-glowSmMagenta": "0px 0px 10px 0px #FF55FF80",
163
+ "dos-glowMdMagenta": "0px 0px 20px 0px #FF55FF80",
164
+ "dos-glowLgMagenta": "0px 0px 30px 0px #FF55FF80",
165
+ "dos-glowXsBlue": "0px 0px 8px 0px #5555FF80",
166
+ "dos-glowSmBlue": "0px 0px 10px 0px #5555FF80",
167
+ "dos-glowMdBlue": "0px 0px 20px 0px #5555FF80",
168
+ "dos-glowLgBlue": "0px 0px 30px 0px #5555FF80",
169
+ "dos-glowXsWhite": "0px 0px 8px 0px #FFFFFF80",
170
+ "dos-glowSmWhite": "0px 0px 10px 0px #FFFFFF80",
171
+ "dos-glowMdWhite": "0px 0px 20px 0px #FFFFFF80",
172
+ "dos-glowLgWhite": "0px 0px 30px 0px #FFFFFF80"
135
173
  }
136
174
  }
137
175
  }
138
176
  };
177
+
178
+ preset.plugins = [
179
+ ...(preset.plugins || []),
180
+ ...(reactAriaPlugin ? [reactAriaPlugin] : []),
181
+ ...(animatePlugin ? [animatePlugin] : []),
182
+ ];
183
+
184
+ module.exports = preset;
@@ -1,44 +1,29 @@
1
1
  /**
2
- * Eidotter Enhanced Tailwind CSS Preset
2
+ * Deprecated alias for `eidotter/tailwind.preset`.
3
3
  *
4
- * Extends the base token preset with React Aria state variants
5
- * and utility plugins for component development.
4
+ * REMOVE-IN-0.21.0 — grep this marker when preparing the 0.21.0 release to
5
+ * delete this file, the `./tailwind.preset.enhanced` entry in `package.json`
6
+ * `exports`, and the matching entry in `files`.
6
7
  *
7
- * Usage:
8
- * // tailwind.config.js
9
- * module.exports = {
10
- * presets: [require('eidotter/tailwind.preset.enhanced')],
11
- * }
8
+ * @note Hand-written — NOT generated by `style-dictionary.config.mjs`.
9
+ * The sibling `tailwind.preset.cjs` IS generated; do not confuse them.
12
10
  *
13
- * Or use the base preset without React Aria:
14
- * module.exports = {
15
- * presets: [require('eidotter/tailwind.preset')],
16
- * }
11
+ * In v0.19.2, the base and enhanced presets were merged (#282). The single
12
+ * `tailwind.preset` now includes all design tokens plus React Aria state
13
+ * variants and the animate plugin. This file is a shim so existing consumers
14
+ * don't break on upgrade.
15
+ *
16
+ * Migration:
17
+ * - presets: [require('eidotter/tailwind.preset.enhanced')]
18
+ * + presets: [require('eidotter/tailwind.preset')]
17
19
  */
18
20
 
19
- const basePreset = require('./tailwind.preset.cjs');
20
-
21
- let reactAriaPlugin;
22
- try {
23
- reactAriaPlugin = require('tailwindcss-react-aria-components');
24
- } catch {
25
- // tailwindcss-react-aria-components not installed — skip
26
- reactAriaPlugin = null;
27
- }
28
-
29
- let animatePlugin;
30
- try {
31
- animatePlugin = require('tailwindcss-animate');
32
- } catch {
33
- // tailwindcss-animate not installed — skip
34
- animatePlugin = null;
21
+ if (!globalThis.__eidotterEnhancedPresetDeprecationWarned) {
22
+ globalThis.__eidotterEnhancedPresetDeprecationWarned = true;
23
+ console.warn(
24
+ "[eidotter] 'eidotter/tailwind.preset.enhanced' is deprecated since 0.19.2 " +
25
+ "and will be removed in 0.21.0. Use 'eidotter/tailwind.preset' instead."
26
+ );
35
27
  }
36
28
 
37
- module.exports = {
38
- ...basePreset,
39
- plugins: [
40
- ...(basePreset.plugins || []),
41
- ...(reactAriaPlugin ? [reactAriaPlugin] : []),
42
- ...(animatePlugin ? [animatePlugin] : []),
43
- ],
44
- };
29
+ module.exports = require('./tailwind.preset.cjs');