eidotter 0.19.3 → 0.20.1
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 +133 -186
- package/dist/components/Brand/components/BrandLockup.d.ts +20 -0
- package/dist/components/Brand/components/Logo.d.ts +25 -0
- package/dist/components/Brand/components/Wordmark.d.ts +16 -0
- package/dist/components/Brand/components/index.d.ts +6 -0
- package/dist/components/Brand/index.d.ts +1 -0
- 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 +9 -1
- package/dist/index.es.js +7200 -6958
- package/dist/index.umd.js +14 -14
- package/guidelines/README.md +5 -1
- package/package.json +10 -2
- package/src/styles/dos-utilities.css +197 -0
- package/src/styles/theme.amber-mono.css +1 -0
- package/src/styles/theme.cga-amber.css +1 -0
- package/src/styles/theme.cga-mode4-p0.css +1 -0
- package/src/styles/theme.cga-mode4-p1.css +1 -0
- package/src/styles/theme.cga-mode5.css +1 -0
- package/src/styles/tokens.css +1 -0
- package/tailwind.preset.cjs +1 -0
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
|
|
@@ -18,6 +18,7 @@ eidotter provides 33 ready-to-use components with consistent DOS terminal stylin
|
|
|
18
18
|
```tsx
|
|
19
19
|
import { Button, Card, Input } from 'eidotter';
|
|
20
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
|
|
21
22
|
|
|
22
23
|
function App() {
|
|
23
24
|
return (
|
|
@@ -44,12 +45,15 @@ function App() {
|
|
|
44
45
|
| ChatInput | Multiline textarea with Enter-to-send |
|
|
45
46
|
| ChatContainer | Composes ChatHistory + ChatInput |
|
|
46
47
|
| Checkbox | Boolean form inputs with DOS bracket indicator |
|
|
48
|
+
| CmdPalette | ⌘K / Ctrl+K command palette overlay with scored search + keyboard nav |
|
|
47
49
|
| CommandPrompt | DOS command line display |
|
|
50
|
+
| DosFigure | Demoscene-style painted-screen media placeholder with scanline sweep |
|
|
48
51
|
| FilterBar | Multi-select toggle group |
|
|
49
52
|
| Footer | Site footer with legal links |
|
|
50
53
|
| Header | Sticky site header with branding + Nav |
|
|
51
54
|
| Icon | SVG icons backed by pixelarticons (MIT) — authentic DOS pixel art |
|
|
52
55
|
| InlineExpand | Inline disclosure widget |
|
|
56
|
+
| InlineLink | In-flow navigational anchor — dotted underline, phosphor-invert hover, external variant |
|
|
53
57
|
| Input | Text entry fields with label and error support |
|
|
54
58
|
| Modal | Dialog overlays |
|
|
55
59
|
| Nav | Responsive navigation (desktop + mobile) |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eidotter",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A DOS Themed Design System",
|
|
6
6
|
"main": "./dist/index.umd.js",
|
|
@@ -12,7 +12,13 @@
|
|
|
12
12
|
"import": "./dist/index.es.js",
|
|
13
13
|
"require": "./dist/index.umd.js"
|
|
14
14
|
},
|
|
15
|
+
"./brand": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"import": "./dist/index.es.js",
|
|
18
|
+
"require": "./dist/index.umd.js"
|
|
19
|
+
},
|
|
15
20
|
"./styles": "./dist/eidotter.css",
|
|
21
|
+
"./utilities": "./src/styles/dos-utilities.css",
|
|
16
22
|
"./tailwind.preset": "./tailwind.preset.cjs",
|
|
17
23
|
"./tailwind.preset.enhanced": "./tailwind.preset.enhanced.cjs",
|
|
18
24
|
"./fonts.css": "./src/styles/fonts.css",
|
|
@@ -36,6 +42,7 @@
|
|
|
36
42
|
"src/styles/fonts/Flexi_IBM_VGA_LICENSE.txt",
|
|
37
43
|
"src/styles/tokens.css",
|
|
38
44
|
"src/styles/theme.*.css",
|
|
45
|
+
"src/styles/dos-utilities.css",
|
|
39
46
|
"guidelines"
|
|
40
47
|
],
|
|
41
48
|
"scripts": {
|
|
@@ -44,6 +51,7 @@
|
|
|
44
51
|
"prepublishOnly": "npm run build",
|
|
45
52
|
"build-tokens": "node style-dictionary.config.mjs",
|
|
46
53
|
"lint": "eslint src/ --report-unused-disable-directives --max-warnings 0",
|
|
54
|
+
"lint-tokens": "node scripts/lint-token-refs.mjs",
|
|
47
55
|
"preview": "vite preview",
|
|
48
56
|
"storybook": "storybook dev -p 6006",
|
|
49
57
|
"build-storybook": "storybook build -o docs",
|
|
@@ -133,7 +141,7 @@
|
|
|
133
141
|
"vite": "^6.2.0"
|
|
134
142
|
},
|
|
135
143
|
"dependencies": {
|
|
136
|
-
"pixelarticons": "^2.0
|
|
144
|
+
"pixelarticons": "^2.1.0",
|
|
137
145
|
"react-aria": "^3.47.0",
|
|
138
146
|
"react-aria-components": "^1.16.0",
|
|
139
147
|
"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
|
+
}
|
|
@@ -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);
|
|
@@ -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;
|
|
@@ -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;
|
|
@@ -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;
|
package/src/styles/tokens.css
CHANGED
|
@@ -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
|
@@ -67,6 +67,7 @@ const preset = {
|
|
|
67
67
|
"dos-text-secondary": "var(--color-semantic-text-secondary)",
|
|
68
68
|
"dos-text-accent": "var(--color-semantic-text-accent)",
|
|
69
69
|
"dos-text-disabled": "var(--color-semantic-text-disabled)",
|
|
70
|
+
"dos-text-muted": "var(--color-semantic-text-muted)",
|
|
70
71
|
"dos-border-default": "var(--color-semantic-border-default)",
|
|
71
72
|
"dos-border-focus": "var(--color-semantic-border-focus)",
|
|
72
73
|
"dos-border-hover": "var(--color-semantic-border-hover)",
|