eidotter 0.20.0 → 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 -195
- 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/eidotter.css +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.es.js +6972 -7039
- package/dist/index.umd.js +14 -14
- package/package.json +7 -1
package/README.md
CHANGED
|
@@ -1,23 +1,42 @@
|
|
|
1
|
-
# eiDotter
|
|
1
|
+
# eiDotter
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
```
|
|
4
|
+
┌──────────────────────────────────────────────┐
|
|
5
|
+
│ C:\> EIDOTTER_ │
|
|
6
|
+
│ │
|
|
7
|
+
│ DOS terminal design system for React. │
|
|
8
|
+
│ Authentic CGA phosphor. WCAG AA. │
|
|
9
|
+
│ Tree-shakable. No CSS-in-JS runtime. │
|
|
10
|
+
└──────────────────────────────────────────────┘
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
[](https://www.npmjs.com/package/eidotter)
|
|
14
|
+
[](https://github.com/CinimoDY/eiDotter/actions/workflows/build.yml)
|
|
15
|
+
[](./LICENSE.md)
|
|
16
|
+
[](https://react.dev/)
|
|
17
|
+
|
|
18
|
+
**eiDotter** is a React component library that takes the DOS/CGA terminal aesthetic seriously: authentic 16-color palette, bitmap-accurate typography, phosphor glow physics, keyboard-first interactions. 36 components across forms, navigation, windowing, timelines, and terminal chrome — shipped as ES modules with a prebuilt stylesheet so consumers don't need Tailwind to use it.
|
|
19
|
+
|
|
20
|
+
→ **[Storybook](https://cinimody.github.io/eiDotter/)** · **[CHANGELOG](./CHANGELOG.md)** · **[Issues](https://github.com/CinimoDY/eiDotter/issues)** · **[npm](https://www.npmjs.com/package/eidotter)**
|
|
21
|
+
|
|
22
|
+
---
|
|
4
23
|
|
|
5
|
-
##
|
|
24
|
+
## Install
|
|
6
25
|
|
|
7
26
|
```bash
|
|
8
27
|
npm install eidotter
|
|
9
28
|
```
|
|
10
29
|
|
|
11
|
-
## Quick
|
|
30
|
+
## Quick start
|
|
12
31
|
|
|
13
32
|
```tsx
|
|
14
|
-
import { Terminal,
|
|
15
|
-
import 'eidotter/styles';
|
|
33
|
+
import { Terminal, Alert, Button } from 'eidotter';
|
|
34
|
+
import 'eidotter/styles';
|
|
16
35
|
|
|
17
36
|
function App() {
|
|
18
37
|
return (
|
|
19
38
|
<Terminal title="MY-APP.EXE">
|
|
20
|
-
<Alert
|
|
39
|
+
<Alert color="success" title="System Ready">
|
|
21
40
|
DOS interface loaded successfully.
|
|
22
41
|
</Alert>
|
|
23
42
|
<Button variant="primary">Execute</Button>
|
|
@@ -26,255 +45,174 @@ function App() {
|
|
|
26
45
|
}
|
|
27
46
|
```
|
|
28
47
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
### Basic (no Tailwind needed)
|
|
32
|
-
|
|
33
|
-
Import the styles. All component styling, fonts, and design tokens are pre-compiled — no build tools required.
|
|
34
|
-
|
|
35
|
-
```tsx
|
|
36
|
-
import 'eidotter/styles'; // Fonts, tokens, components, Tailwind utilities
|
|
37
|
-
|
|
38
|
-
// Optional: import a theme
|
|
39
|
-
import 'eidotter/themes/amber-mono.css';
|
|
48
|
+
A single CSS import pulls everything: font, tokens, component styles, and compiled Tailwind utilities. Tailwind is **not** required to use eiDotter — consume it as plain React + one stylesheet.
|
|
40
49
|
|
|
41
|
-
|
|
42
|
-
// 12 classes: .dos-page, .dos-hero, .dos-h1–.dos-h5, .dos-body, .dos-body-lg,
|
|
43
|
-
// .dos-caption, .dos-micro, .dos-label, .dos-code, .dos-scanlines
|
|
44
|
-
import 'eidotter/utilities';
|
|
45
|
-
```
|
|
50
|
+
## Setup
|
|
46
51
|
|
|
47
|
-
|
|
52
|
+
### Styles
|
|
48
53
|
|
|
49
54
|
```tsx
|
|
50
|
-
import 'eidotter/
|
|
51
|
-
import 'eidotter/
|
|
52
|
-
import 'eidotter/
|
|
53
|
-
import 'eidotter/utilities'; // Opt-in .dos-* typography classes (v0.19.4+)
|
|
55
|
+
import 'eidotter/styles'; // Everything: font + tokens + components + utilities
|
|
56
|
+
import 'eidotter/themes/amber-mono.css'; // Optional: theme override
|
|
57
|
+
import 'eidotter/utilities'; // Optional: .dos-* typography classes for raw HTML
|
|
54
58
|
```
|
|
55
59
|
|
|
56
|
-
|
|
60
|
+
Granular imports are still available (`eidotter/fonts.css`, `eidotter/tokens.css`) if you want to override the font or tokens independently.
|
|
57
61
|
|
|
58
|
-
|
|
62
|
+
### With Tailwind
|
|
59
63
|
|
|
60
|
-
|
|
61
|
-
- **`font-dos-fallback`** → `monospace` only — intentionally bare, as a **fail-loud diagnostic** utility for surfaces that want to surface font-loading failures explicitly. Compose `font-dos font-dos-fallback` when you want strict Flexi-or-nothing behavior.
|
|
62
|
-
|
|
63
|
-
### With Tailwind CSS
|
|
64
|
-
|
|
65
|
-
Use eidotter's design tokens as Tailwind utility classes in your own code.
|
|
66
|
-
|
|
67
|
-
```bash
|
|
68
|
-
npm install tailwindcss
|
|
69
|
-
```
|
|
64
|
+
If you already use Tailwind, register eiDotter's preset and drop the `eidotter/styles` import (the preset compiles utilities in your build):
|
|
70
65
|
|
|
71
66
|
```js
|
|
72
67
|
// tailwind.config.js
|
|
73
68
|
module.exports = {
|
|
74
69
|
presets: [require('eidotter/tailwind.preset')],
|
|
75
|
-
content: ['./src/**/*.{
|
|
70
|
+
content: ['./src/**/*.{ts,tsx,jsx}'],
|
|
76
71
|
};
|
|
77
72
|
```
|
|
78
73
|
|
|
79
74
|
```tsx
|
|
80
|
-
// Now use eidotter tokens as Tailwind classes
|
|
81
75
|
<div className="bg-dos-bg-primary text-dos-text-accent font-dos">
|
|
82
76
|
DOS terminal content
|
|
83
77
|
</div>
|
|
84
78
|
```
|
|
85
79
|
|
|
86
|
-
The preset auto-registers `tailwindcss-react-aria-components` and `tailwindcss-animate`
|
|
80
|
+
The preset auto-registers `tailwindcss-react-aria-components` and `tailwindcss-animate` if they resolve. Migrating from the pre-0.19.2 dual-preset split? See [CHANGELOG → 0.19.2](./CHANGELOG.md#0192--2026-04-18).
|
|
87
81
|
|
|
88
|
-
|
|
82
|
+
## Documentation
|
|
89
83
|
|
|
90
|
-
|
|
84
|
+
| | |
|
|
85
|
+
|---|---|
|
|
86
|
+
| **Live docs** | [Storybook](https://cinimody.github.io/eiDotter/) — every component with stories, controls, and source |
|
|
87
|
+
| **Design tokens** | `src/tokens/*.json` (DTCG format) → `tokens.css` via Style Dictionary |
|
|
88
|
+
| **Themes** | `amber-mono` (default), `cga-amber`, `cga-mode4-p0/p1`, `cga-mode5` |
|
|
89
|
+
| **Font** | [Flexi IBM VGA True v2](https://int10h.org/blog/2018/05/flexi-ibm-vga-scalable-truetype-font/) — aspect-corrected vector remake of the IBM VGA BIOS, CC BY-SA 4.0. Bitmap-authentic single-weight; all `fontWeight` tokens resolve to 400 |
|
|
90
|
+
| **Icons** | [pixelarticons](https://github.com/halfmage/pixelarticons) (MIT) — DOS pixel-art glyphs |
|
|
91
|
+
| **Accessibility** | WCAG AA, React Aria primitives under interactive components, `prefers-reduced-motion` + `prefers-contrast` honored throughout |
|
|
91
92
|
|
|
92
|
-
|
|
93
|
-
- presets: [require('eidotter/tailwind.preset.enhanced')]
|
|
94
|
-
+ presets: [require('eidotter/tailwind.preset')]
|
|
95
|
-
```
|
|
93
|
+
## Components
|
|
96
94
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
## Available Components (36)
|
|
100
|
-
|
|
101
|
-
| Component | Description |
|
|
102
|
-
|-----------|-------------|
|
|
103
|
-
| Accordion | Collapsible content sections (Section, AccordionFill) |
|
|
104
|
-
| Alert | Inline alert banner with featured icon, actions, and 6 color variants |
|
|
105
|
-
| Badge | Status indicators with variant support |
|
|
106
|
-
| Breadcrumb | Navigation path display |
|
|
107
|
-
| Button | DOS-style buttons (primary, secondary, ghost, link) |
|
|
108
|
-
| Card | Content container with variants (elevated, bordered, glow, interactive, minimal, callout) |
|
|
109
|
-
| ChatMessage | Chat message with role-based DOS styling and streaming cursor |
|
|
110
|
-
| ChatHistory | Scrollable message list with auto-scroll and `role="log"` |
|
|
111
|
-
| ChatInput | Multiline textarea with Enter-to-send |
|
|
112
|
-
| ChatContainer | Composes ChatHistory + ChatInput — place inside Terminal for DOS chat |
|
|
113
|
-
| Checkbox | DOS-style checkbox with `[X]` bracket indicator |
|
|
114
|
-
| CmdPalette | ⌘K / Ctrl+K command palette overlay with scored search + keyboard navigation |
|
|
115
|
-
| CommandPrompt | Interactive command-line input with blinking cursor |
|
|
116
|
-
| DosFigure | Demoscene-style painted-screen media placeholder with scanline sweep + optional pins |
|
|
117
|
-
| FilterBar | Multi-select toggle group for faceted filtering |
|
|
118
|
-
| Footer | Site footer with legal links (Impressum + Datenschutz) |
|
|
119
|
-
| Header | Sticky site header composing branding + Nav — retro/modern variants |
|
|
120
|
-
| Icon | SVG icons backed by pixelarticons (MIT) — authentic DOS pixel art |
|
|
121
|
-
| InlineExpand | Inline disclosure widget for expanding text within prose |
|
|
122
|
-
| InlineLink | In-flow navigational anchor — dotted underline, phosphor-invert hover, external variant |
|
|
123
|
-
| Input | Text input with DOS styling and error variant |
|
|
124
|
-
| Modal | Dialog overlay with title bar and close button |
|
|
125
|
-
| Nav | Responsive navigation with desktop/mobile variants |
|
|
126
|
-
| Notification | Toast popup with layered amber glow, auto-dismiss, and progress variant |
|
|
127
|
-
| Progress | DOS-style progress bar with block characters |
|
|
128
|
-
| RetroEffects | CRT effects (scanlines, noise, phosphor glow) |
|
|
129
|
-
| Separator | Horizontal/vertical divider |
|
|
130
|
-
| Stat | Key-value display for metrics and statistics |
|
|
131
|
-
| Switch | Toggle switch for on/off states |
|
|
132
|
-
| Tabs | Tabbed interface navigation |
|
|
133
|
-
| Tag | Interactive labels for tags, categories, and filter chips |
|
|
134
|
-
| Terminal | DOS window with title bar and content area |
|
|
135
|
-
| TextScramble | DOS text decode/scramble animation effect |
|
|
136
|
-
| TimelineContainer | Multi-zoom timeline with year/month/day/hour views |
|
|
137
|
-
| TimelineNode | Timeline/stepper axis markers with shapes and glow |
|
|
138
|
-
| Tokens | Design token reference display (Storybook only) |
|
|
139
|
-
|
|
140
|
-
## Component Examples
|
|
141
|
-
|
|
142
|
-
### Header
|
|
95
|
+
36 components across five families — [complete catalog in Storybook](https://cinimody.github.io/eiDotter/).
|
|
143
96
|
|
|
144
|
-
|
|
145
|
-
<Header
|
|
146
|
-
{/* or use children for custom branding */}
|
|
147
|
-
</Header>
|
|
148
|
-
```
|
|
97
|
+
<details>
|
|
98
|
+
<summary><strong>Windowing & shell</strong> — Terminal, Modal, CommandPrompt, CmdPalette, Header, Footer, Nav</summary>
|
|
149
99
|
|
|
150
|
-
|
|
100
|
+
| Component | Purpose |
|
|
101
|
+
|---|---|
|
|
102
|
+
| `Terminal` | DOS window with title bar, minimize/maximize/close controls |
|
|
103
|
+
| `Modal` | Dialog overlay on React Aria primitives (ModalOverlay + Modal + Dialog) |
|
|
104
|
+
| `CommandPrompt` | Interactive command-line input with blinking cursor |
|
|
105
|
+
| `CmdPalette` | ⌘K overlay with scored search, keyboard nav, configurable hotkey |
|
|
106
|
+
| `Header` | Sticky site header (retro / modern variants), composes branding + Nav |
|
|
107
|
+
| `Footer` | Site footer with default legal links (Impressum + Datenschutz) |
|
|
108
|
+
| `Nav` | Responsive navigation with desktop + mobile variants |
|
|
151
109
|
|
|
152
|
-
|
|
153
|
-
<Terminal
|
|
154
|
-
title="PROGRAM.EXE"
|
|
155
|
-
size="medium"
|
|
156
|
-
closeable
|
|
157
|
-
onClose={() => console.log('closed')}
|
|
158
|
-
>
|
|
159
|
-
<p>Terminal content here</p>
|
|
160
|
-
</Terminal>
|
|
161
|
-
```
|
|
110
|
+
</details>
|
|
162
111
|
|
|
163
|
-
|
|
112
|
+
<details>
|
|
113
|
+
<summary><strong>Content surfaces</strong> — Card, Accordion, Alert, Badge, Tag, Notification, Stat, Progress, Separator, Breadcrumb</summary>
|
|
164
114
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
115
|
+
| Component | Purpose |
|
|
116
|
+
|---|---|
|
|
117
|
+
| `Card` | Content container (elevated, bordered, glow, interactive, minimal, callout) |
|
|
118
|
+
| `Accordion` | Collapsible content sections (Section + AccordionFill) |
|
|
119
|
+
| `Alert` | Inline alert banner with featured icon, actions, 6 color variants |
|
|
120
|
+
| `Badge` | Status indicator chips |
|
|
121
|
+
| `Tag` | Interactive labels for tags, categories, filter chips |
|
|
122
|
+
| `Notification` | Toast popup with layered amber glow, auto-dismiss, progress variant |
|
|
123
|
+
| `Stat` | Key-value display for metrics |
|
|
124
|
+
| `Progress` | DOS-style progress bar with block characters |
|
|
125
|
+
| `Separator` | Horizontal / vertical divider |
|
|
126
|
+
| `Breadcrumb` | Navigation path display |
|
|
169
127
|
|
|
170
|
-
|
|
171
|
-
Processing...
|
|
172
|
-
</Button>
|
|
173
|
-
```
|
|
128
|
+
</details>
|
|
174
129
|
|
|
175
|
-
|
|
130
|
+
<details>
|
|
131
|
+
<summary><strong>Input</strong> — Button, Input, Checkbox, Switch, Tabs, FilterBar</summary>
|
|
176
132
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
```
|
|
133
|
+
| Component | Purpose |
|
|
134
|
+
|---|---|
|
|
135
|
+
| `Button` | DOS-style buttons (primary, secondary, ghost, link) on React Aria `Button` |
|
|
136
|
+
| `Input` | Text input with error variant, React Aria `TextField` |
|
|
137
|
+
| `Checkbox` | `[X]`-bracket indicator, React Aria `Checkbox` |
|
|
138
|
+
| `Switch` | Toggle on/off, React Aria `Switch` |
|
|
139
|
+
| `Tabs` | Tabbed navigation on React Aria `TabList/Tab/TabPanel` |
|
|
140
|
+
| `FilterBar` | Multi-select toggle group for faceted filtering |
|
|
186
141
|
|
|
187
|
-
|
|
142
|
+
</details>
|
|
188
143
|
|
|
189
|
-
|
|
190
|
-
<
|
|
191
|
-
label="Filename"
|
|
192
|
-
placeholder="Enter filename..."
|
|
193
|
-
/>
|
|
194
|
-
|
|
195
|
-
<Input
|
|
196
|
-
variant="error"
|
|
197
|
-
errorMessage="File not found"
|
|
198
|
-
placeholder="Invalid path"
|
|
199
|
-
/>
|
|
200
|
-
```
|
|
144
|
+
<details>
|
|
145
|
+
<summary><strong>Chat & media</strong> — ChatMessage, ChatHistory, ChatInput, ChatContainer, DosFigure, Icon, InlineLink, InlineExpand</summary>
|
|
201
146
|
|
|
202
|
-
|
|
147
|
+
| Component | Purpose |
|
|
148
|
+
|---|---|
|
|
149
|
+
| `ChatMessage` | Chat message with role-based DOS styling and streaming cursor |
|
|
150
|
+
| `ChatHistory` | Scrollable message list with auto-scroll + `role="log"` |
|
|
151
|
+
| `ChatInput` | Multiline textarea with Enter-to-send |
|
|
152
|
+
| `ChatContainer` | Composes ChatHistory + ChatInput — drop inside Terminal |
|
|
153
|
+
| `DosFigure` | Demoscene painted-screen media placeholder with scanline sweep |
|
|
154
|
+
| `Icon` | SVG icons backed by pixelarticons |
|
|
155
|
+
| `InlineLink` | In-flow anchor with dotted underline + `▸` / `↗` glyph |
|
|
156
|
+
| `InlineExpand` | Inline disclosure widget for prose |
|
|
203
157
|
|
|
204
|
-
|
|
205
|
-
<Checkbox label="Remember me" />
|
|
206
|
-
<Checkbox label="Accept terms" checked />
|
|
207
|
-
<Checkbox label="Select all" indeterminate />
|
|
208
|
-
```
|
|
158
|
+
</details>
|
|
209
159
|
|
|
210
|
-
|
|
160
|
+
<details>
|
|
161
|
+
<summary><strong>Time & effects</strong> — TimelineContainer, TimelineNode, TextScramble, RetroEffects, Tokens</summary>
|
|
211
162
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
163
|
+
| Component | Purpose |
|
|
164
|
+
|---|---|
|
|
165
|
+
| `TimelineContainer` | Multi-zoom timeline (year / month / day / hour views) |
|
|
166
|
+
| `TimelineNode` | Axis markers with shape variants and glow |
|
|
167
|
+
| `TextScramble` | DOS text decode animation |
|
|
168
|
+
| `RetroEffects` | CRT scanlines, noise, phosphor glow |
|
|
169
|
+
| `Tokens` | Design-token reference display (Storybook only) |
|
|
170
|
+
|
|
171
|
+
</details>
|
|
219
172
|
|
|
220
|
-
## Design
|
|
173
|
+
## Design tokens
|
|
221
174
|
|
|
222
|
-
|
|
175
|
+
Authentic 16-color CGA palette plus amber/phosphor variants, exposed as CSS custom properties:
|
|
223
176
|
|
|
224
177
|
```css
|
|
225
|
-
--color-cga-amber: #FFB000;
|
|
178
|
+
--color-cga-amber: #FFB000; /* Primary accent */
|
|
226
179
|
--color-cga-amber-bright: #FDCA9F;
|
|
227
180
|
--color-cga-amber-dim: #9A5700;
|
|
228
|
-
--color-cga-black: #020003;
|
|
229
|
-
/*
|
|
181
|
+
--color-cga-black: #020003; /* Background */
|
|
182
|
+
/* …16-color CGA palette + semantic tokens */
|
|
230
183
|
```
|
|
231
184
|
|
|
232
|
-
|
|
185
|
+
Semantic tokens (`--color-semantic-*`) and Tailwind classes (`bg-dos-*`, `text-dos-*`, `border-dos-*`) are the preferred surface — the raw CGA names are primitives. Full reference in [`src/styles/tokens.css`](./src/styles/tokens.css) or in Storybook's Tokens page.
|
|
233
186
|
|
|
234
|
-
|
|
187
|
+
**Theming** is attribute-driven:
|
|
235
188
|
|
|
236
189
|
```html
|
|
237
|
-
<div data-theme="amber-mono">
|
|
238
|
-
<!-- Amber-on-black terminal aesthetic -->
|
|
239
|
-
</div>
|
|
190
|
+
<div data-theme="amber-mono">…</div>
|
|
240
191
|
```
|
|
241
192
|
|
|
242
|
-
Available themes: `amber-mono`, `cga-amber`, `cga-mode4-p0`, `cga-mode4-p1`, `cga-mode5`.
|
|
243
|
-
|
|
244
|
-
### Tailwind Token Classes
|
|
245
|
-
|
|
246
|
-
**CGA Colors:** `cga-black`, `cga-blue`, `cga-green`, `cga-cyan`, `cga-red`, `cga-magenta`, `cga-brown`, `cga-light-gray`, `cga-dark-gray`, `cga-bright-blue`, `cga-bright-green`, `cga-bright-cyan`, `cga-bright-red`, `cga-bright-magenta`, `cga-yellow`, `cga-white`, `cga-amber`, `cga-amber-bright`, `cga-amber-dim`
|
|
247
|
-
|
|
248
|
-
**Semantic Colors:** `dos-bg-primary`, `dos-bg-secondary`, `dos-text-primary`, `dos-text-accent`, `dos-border-default`, `dos-border-focus`, `dos-success`, `dos-warning`, `dos-error`, `dos-info`
|
|
249
|
-
|
|
250
|
-
**Typography:** `font-dos` (Flexi IBM VGA True v2), `text-dos-text-xs` through `text-dos-display-2xl`, `leading-dos-text-xs` through `leading-dos-display-2xl`
|
|
251
|
-
|
|
252
|
-
**Spacing:** 4px grid via design tokens
|
|
253
|
-
|
|
254
|
-
**Border Radius:** `rounded-dos-sm` (2px), `rounded-dos-base` (4px max)
|
|
255
|
-
|
|
256
193
|
## Development
|
|
257
194
|
|
|
258
195
|
```bash
|
|
259
|
-
npm install
|
|
260
|
-
npm run storybook
|
|
261
|
-
npm run build
|
|
262
|
-
npm run test
|
|
263
|
-
npm run lint
|
|
196
|
+
npm install
|
|
197
|
+
npm run storybook # Launch Storybook on :6006
|
|
198
|
+
npm run build # Production build (tsup + tsc)
|
|
199
|
+
npm run test # Jest + React Testing Library
|
|
200
|
+
npm run lint # ESLint
|
|
201
|
+
npm run build-tokens # Rebuild tokens from src/tokens/*.json
|
|
264
202
|
```
|
|
265
203
|
|
|
266
|
-
## Design
|
|
267
|
-
|
|
268
|
-
The DOS aesthetic represents values we've lost in modern software:
|
|
204
|
+
## Design notes
|
|
269
205
|
|
|
270
|
-
|
|
271
|
-
- **Clarity** - Information presented without distraction
|
|
272
|
-
- **Personal Sovereignty** - Your tools, your way
|
|
206
|
+
eiDotter commits to the constraints that other "DOS-inspired" systems relax:
|
|
273
207
|
|
|
274
|
-
|
|
208
|
+
- **16 colors, no more.** The palette is a historical fact, not a starting point. Extensions (amber, green, phosphor variants) are declared themes, not ad-hoc hex codes.
|
|
209
|
+
- **Single-weight typography.** Flexi IBM VGA True is a bitmap font; there's no bold. All `fontWeight` tokens resolve to `400` and `font-synthesis: none` blocks browser faux-bold. Emphasis comes from color, uppercase on labels, or inverse video — never weight.
|
|
210
|
+
- **Phosphor as physics, not decoration.** Warmup animations, glow layers, and scanline effects are wired into component states; consumers don't opt in per-component.
|
|
211
|
+
- **Keyboard-first.** React Aria powers every interactive component. Focus rings are loud amber on amber-dim. `prefers-reduced-motion` and `prefers-contrast` are honored across the board.
|
|
212
|
+
- **Tree-shakable, no CSS-in-JS.** Runtime deps are minimal and on-purpose: [React Aria](https://react-spectrum.adobe.com/react-aria/) + [pixelarticons](https://github.com/halfmage/pixelarticons), both MIT. Component CSS ships compiled; you pay no CSS-in-JS cost at runtime.
|
|
275
213
|
|
|
276
|
-
|
|
214
|
+
The aesthetic is a constraint the system holds itself to — not a theme that can be turned off.
|
|
277
215
|
|
|
278
216
|
## License
|
|
279
217
|
|
|
280
|
-
CC-BY-NC-4.0
|
|
218
|
+
[CC-BY-NC-4.0](./LICENSE.md) — Creative Commons Attribution-NonCommercial 4.0 International. Bundled third-party licenses (pixelarticons MIT, Flexi IBM VGA True CC BY-SA 4.0) attributed in `LICENSE.md`.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { HTMLAttributes } from 'react';
|
|
3
|
+
export interface BrandLockupProps extends HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
/** Logo size in pixels. Defaults to 32. */
|
|
5
|
+
logoSize?: number | string;
|
|
6
|
+
/** Render only the logo (no wordmark). */
|
|
7
|
+
iconOnly?: boolean;
|
|
8
|
+
/** Render only the wordmark (no logo). */
|
|
9
|
+
wordmarkOnly?: boolean;
|
|
10
|
+
/** Add amber phosphor glow on both logo + wordmark. Defaults to true. */
|
|
11
|
+
glow?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* eiDotter brand lockup — Logo + Wordmark composed horizontally.
|
|
15
|
+
*
|
|
16
|
+
* The canonical public-facing brand mark. Scales by setting the host's
|
|
17
|
+
* `font-size` (wordmark) and `logoSize` prop (icon). The two should stay
|
|
18
|
+
* proportional: roughly `logoSize ≈ font-size × 1.75`.
|
|
19
|
+
*/
|
|
20
|
+
export declare const BrandLockup: React.ForwardRefExoticComponent<BrandLockupProps & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SVGProps } from 'react';
|
|
3
|
+
import './Brand.css';
|
|
4
|
+
export interface LogoProps extends Omit<SVGProps<SVGSVGElement>, 'viewBox' | 'children'> {
|
|
5
|
+
/** Icon size in pixels. Defaults to 32. Pass a number or CSS-valid string. */
|
|
6
|
+
size?: number | string;
|
|
7
|
+
/** Add the amber phosphor drop-shadow glow. Defaults to true. */
|
|
8
|
+
glow?: boolean;
|
|
9
|
+
/** Accessible label. Defaults to "eiDotter". Set to empty string for decorative use. */
|
|
10
|
+
title?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* eiDotter brand mark — V2 yolk (pure, no legs).
|
|
14
|
+
*
|
|
15
|
+
* The "payload" of the eiDotter identity — a bright CGA amber yolk with a soft
|
|
16
|
+
* highlight and specular, no shell or drip ornamentation. Scales cleanly from
|
|
17
|
+
* 16px (favicon) to hero sizes without the 1px shell outline collapsing into
|
|
18
|
+
* mush at small sizes.
|
|
19
|
+
*
|
|
20
|
+
* Fill colors are brand-locked (explicit amber hexes) rather than themed so the
|
|
21
|
+
* mark reads identically across themes. Consumers who need a non-amber treatment
|
|
22
|
+
* can override the SVG fills via the `style` prop or by recoloring the child
|
|
23
|
+
* `<circle>` elements through a CSS selector.
|
|
24
|
+
*/
|
|
25
|
+
export declare const Logo: React.ForwardRefExoticComponent<Omit<LogoProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { HTMLAttributes } from 'react';
|
|
3
|
+
import './Brand.css';
|
|
4
|
+
export interface WordmarkProps extends HTMLAttributes<HTMLSpanElement> {
|
|
5
|
+
/** Add the amber phosphor text-shadow glow. Defaults to true. */
|
|
6
|
+
glow?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* eiDotter wordmark — "eiDotter" with the "ei" prefix dimmed against the full-bright "Dotter".
|
|
10
|
+
*
|
|
11
|
+
* Uses the primary DOS font (Flexi IBM VGA True) and the amber phosphor palette.
|
|
12
|
+
* Sized via `font-size` on the host; the component does not set its own size by
|
|
13
|
+
* default so it inherits from the surrounding type scale. Wrap in a heading
|
|
14
|
+
* element if you need semantic weight.
|
|
15
|
+
*/
|
|
16
|
+
export declare const Wordmark: React.ForwardRefExoticComponent<WordmarkProps & React.RefAttributes<HTMLSpanElement>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './components';
|