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 CHANGED
@@ -1,23 +1,42 @@
1
- # eiDotter - DOS Terminal Design System
1
+ # eiDotter
2
2
 
3
- A DOS-themed React component library with authentic CGA terminal aesthetics.
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
+ [![npm](https://img.shields.io/npm/v/eidotter.svg?color=ffb000&labelColor=020003&label=npm)](https://www.npmjs.com/package/eidotter)
14
+ [![CI](https://img.shields.io/github/actions/workflow/status/CinimoDY/eiDotter/build.yml?branch=main&color=ffb000&labelColor=020003&label=CI)](https://github.com/CinimoDY/eiDotter/actions/workflows/build.yml)
15
+ [![license](https://img.shields.io/badge/license-CC--BY--NC--4.0-ffb000?labelColor=020003)](./LICENSE.md)
16
+ [![React](https://img.shields.io/badge/React-18%20%7C%2019-ffb000?labelColor=020003)](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
- ## Installation
24
+ ## Install
6
25
 
7
26
  ```bash
8
27
  npm install eidotter
9
28
  ```
10
29
 
11
- ## Quick Start
30
+ ## Quick start
12
31
 
13
32
  ```tsx
14
- import { Terminal, Button, Alert } from 'eidotter';
15
- import 'eidotter/styles'; // All styles: fonts, tokens, components
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 type="info" title="Welcome">
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
- ## Setup
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
- // Optional (v0.19.4+): DOS typography utility classes for raw HTML / MDX / prose
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
- Individual imports are still available for granular control:
52
+ ### Styles
48
53
 
49
54
  ```tsx
50
- import 'eidotter/fonts.css'; // Flexi IBM VGA True @font-face
51
- import 'eidotter/tokens.css'; // CSS variable definitions
52
- import 'eidotter/styles'; // Component CSS + Tailwind utilities
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
- **Font:** eiDotter uses [Flexi IBM VGA True v2](https://int10h.org/blog/2018/05/flexi-ibm-vga-scalable-truetype-font/) — an aspect-corrected vector remake of the IBM VGA BIOS font (CC BY-SA 4.0). The "True" variant matches authentic 4:3 VGA proportions with an extended character set (Greek, Cyrillic, Hebrew, Latin). The `fonts.css` import loads the bundled TTF via `@font-face`.
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
- Two fontFamily tokens are exported, with distinct intent:
62
+ ### With Tailwind
59
63
 
60
- - **`font-dos`** → `"Flexi IBM VGA True", monospace` — the default. Preserves the terminal aesthetic on degraded `@font-face` loads (strict CSP, web-fonts disabled, reader mode).
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/**/*.{js,jsx,ts,tsx}'],
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` via require-if-available. Consumers who already list either plugin in their own Tailwind config may see duplicate-variant warnings from Tailwind — either rely on the preset's registration alone, or pass those plugins explicitly in your config (they're idempotent, but the duplicate registration is noisy).
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
- #### Migration from 0.19.1 and earlier
82
+ ## Documentation
89
83
 
90
- In 0.19.2 the two older presets (`eidotter/tailwind.preset` and `eidotter/tailwind.preset.enhanced`) were merged into a single `eidotter/tailwind.preset` that includes all tokens plus the React Aria + animate plugins. The enhanced subpath is now a deprecated alias that logs a one-time `console.warn` on load and will be removed in 0.21.0:
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
- ```diff
93
- - presets: [require('eidotter/tailwind.preset.enhanced')]
94
- + presets: [require('eidotter/tailwind.preset')]
95
- ```
93
+ ## Components
96
94
 
97
- No behavior change — the merged preset already carries everything the enhanced preset used to add.
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
- ```tsx
145
- <Header brandName="DMNC.TECH" items={navItems} variant="retro">
146
- {/* or use children for custom branding */}
147
- </Header>
148
- ```
97
+ <details>
98
+ <summary><strong>Windowing &amp; shell</strong> — Terminal, Modal, CommandPrompt, CmdPalette, Header, Footer, Nav</summary>
149
99
 
150
- ### Terminal
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
- ```tsx
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
- ### Button
112
+ <details>
113
+ <summary><strong>Content surfaces</strong> — Card, Accordion, Alert, Badge, Tag, Notification, Stat, Progress, Separator, Breadcrumb</summary>
164
114
 
165
- ```tsx
166
- <Button variant="primary" size="md">
167
- Click Me
168
- </Button>
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
- <Button variant="ghost" loading>
171
- Processing...
172
- </Button>
173
- ```
128
+ </details>
174
129
 
175
- ### Alert
130
+ <details>
131
+ <summary><strong>Input</strong> — Button, Input, Checkbox, Switch, Tabs, FilterBar</summary>
176
132
 
177
- ```tsx
178
- <Alert
179
- type="warning"
180
- title="Low Disk Space"
181
- onClose={() => {}}
182
- >
183
- Drive C: has only 640KB remaining.
184
- </Alert>
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
- ### Input
142
+ </details>
188
143
 
189
- ```tsx
190
- <Input
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 &amp; media</strong> — ChatMessage, ChatHistory, ChatInput, ChatContainer, DosFigure, Icon, InlineLink, InlineExpand</summary>
201
146
 
202
- ### Checkbox
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
- ```tsx
205
- <Checkbox label="Remember me" />
206
- <Checkbox label="Accept terms" checked />
207
- <Checkbox label="Select all" indeterminate />
208
- ```
158
+ </details>
209
159
 
210
- ### CommandPrompt
160
+ <details>
161
+ <summary><strong>Time &amp; effects</strong> — TimelineContainer, TimelineNode, TextScramble, RetroEffects, Tokens</summary>
211
162
 
212
- ```tsx
213
- <CommandPrompt
214
- prompt="C:\>"
215
- onCommand={(cmd) => console.log('Executing:', cmd)}
216
- autoFocus
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 Tokens
173
+ ## Design tokens
221
174
 
222
- The library uses authentic CGA colors via CSS custom properties:
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; /* Primary accent */
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; /* Background */
229
- /* ... full 16-color CGA palette */
181
+ --color-cga-black: #020003; /* Background */
182
+ /* …16-color CGA palette + semantic tokens */
230
183
  ```
231
184
 
232
- ### Theming
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
- Apply themes via `data-theme` attribute:
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 # Install dependencies
260
- npm run storybook # Launch Storybook on port 6006
261
- npm run build # Production build
262
- npm run test # Run test suite
263
- npm run lint # ESLint
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 Philosophy
267
-
268
- The DOS aesthetic represents values we've lost in modern software:
204
+ ## Design notes
269
205
 
270
- - **Control** - Every command is explicit and intentional
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
- eiDotter brings these values to modern interfaces while maintaining accessibility (WCAG AA) and usability standards. The authentic 16-color CGA palette plus amber phosphor variants creates that terminal feel without sacrificing readability.
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
- Part of the **Timeline OS** ecosystem - a vision for personal data management along temporal, thematic, and social axes.
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 (Creative Commons Attribution-NonCommercial 4.0 International)
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,6 @@
1
+ export { Logo } from './Logo';
2
+ export type { LogoProps } from './Logo';
3
+ export { Wordmark } from './Wordmark';
4
+ export type { WordmarkProps } from './Wordmark';
5
+ export { BrandLockup } from './BrandLockup';
6
+ export type { BrandLockupProps } from './BrandLockup';
@@ -0,0 +1 @@
1
+ export * from './components';