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.
- package/README.md +37 -12
- package/dist/components/CmdPalette/components/CmdPalette.d.ts +54 -0
- package/dist/components/CmdPalette/components/index.d.ts +2 -0
- package/dist/components/CmdPalette/index.d.ts +2 -0
- package/dist/components/DosFigure/components/DosFigure.d.ts +41 -0
- package/dist/components/DosFigure/components/index.d.ts +2 -0
- package/dist/components/DosFigure/index.d.ts +2 -0
- package/dist/components/InlineLink/components/InlineLink.d.ts +36 -0
- package/dist/components/InlineLink/components/index.d.ts +2 -0
- package/dist/components/InlineLink/index.d.ts +2 -0
- package/dist/eidotter.css +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.es.js +2628 -2321
- package/dist/index.umd.js +6 -6
- package/guidelines/README.md +15 -7
- package/package.json +6 -4
- package/src/styles/dos-utilities.css +197 -0
- package/src/styles/theme.amber-mono.css +3 -2
- package/src/styles/theme.cga-amber.css +3 -2
- package/src/styles/theme.cga-mode4-p0.css +3 -2
- package/src/styles/theme.cga-mode4-p1.css +3 -2
- package/src/styles/theme.cga-mode5.css +3 -2
- package/src/styles/tokens.css +3 -2
- package/tailwind.preset.cjs +59 -13
- package/tailwind.preset.enhanced.cjs +21 -36
package/guidelines/README.md
CHANGED
|
@@ -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
|
|
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/
|
|
21
|
-
import 'eidotter/
|
|
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/
|
|
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.
|
|
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.
|
|
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": "^
|
|
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
|
|
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
|
|
33
|
-
--typography-font-family-fallback: monospace; /**
|
|
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
|
|
37
|
-
--typography-font-family-fallback: monospace; /**
|
|
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
|
|
56
|
-
--typography-font-family-fallback: monospace; /**
|
|
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
|
|
56
|
-
--typography-font-family-fallback: monospace; /**
|
|
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
|
|
56
|
-
--typography-font-family-fallback: monospace; /**
|
|
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 */
|
package/src/styles/tokens.css
CHANGED
|
@@ -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
|
|
37
|
-
--typography-font-family-fallback: monospace; /**
|
|
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);
|
package/tailwind.preset.cjs
CHANGED
|
@@ -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
|
-
|
|
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
|
-
*
|
|
2
|
+
* Deprecated alias for `eidotter/tailwind.preset`.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
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
|
-
*
|
|
8
|
-
*
|
|
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
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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');
|