anentrypoint-design 0.0.388 → 0.0.390
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 +12 -4
- package/chat.css +14 -3
- package/colors_and_type.css +16 -0
- package/dist/247420.css +40 -4
- package/dist/247420.js +26 -26
- package/package.json +6 -2
- package/src/components/chat/message.js +10 -2
- package/src/components/chat/threads.js +6 -1
- package/src/components/community/navigation.js +14 -3
- package/src/components/shell/app-shell.js +16 -4
- package/src/components/shell/icons.js +1 -0
- package/src/components/shell/workspace-columns.js +25 -4
- package/src/css/app-shell/chat-polish.css +10 -1
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ filename `dist/247420.js`/`dist/247420.css` and in a few package.json fields;
|
|
|
6
6
|
the published npm package name is `anentrypoint-design`. Both names refer to
|
|
7
7
|
the same single system.)
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Acid Editorial: one electric lime lead on near-black ink or warm newsprint paper, system-font stack (no web-font request), monospace only on real code, tonal surfaces over borders, indicator rails for color-coded separation, asymmetric grid tension, print texture over glow.
|
|
10
10
|
|
|
11
11
|
we fart in its general direction.
|
|
12
12
|
|
|
@@ -58,7 +58,7 @@ mount(document.getElementById('app'), () => C.AppShell({
|
|
|
58
58
|
- **chat** — `Chat`, `ChatMessage`, `ChatComposer`, `AICat`, `AICatPortrait`
|
|
59
59
|
- **multi-agent chat shell** — `WorkspaceShell`, `WorkspaceRail`, `ConversationList`, `AgentChat`, `SessionDashboard` — the flagship desktop-class chat-agent product surface (persistent rail + resizable columns + full turn/tool-call thread + live multi-session dashboard). See `COMPONENT_API.md` for the full prop contract; a runnable mock-data demo lives at `ui_kits/workspace/`; the canonical real-world wiring ships at [`agentgui`](https://github.com/AnEntrypoint/agentgui).
|
|
60
60
|
- **file browser** — `FileRow`, `FileGrid`, `FileToolbar`, `FileIcon`, `DropZone`, `UploadProgress`, `EmptyState`, `BreadcrumbPath`, plus modal pieces `FileViewer`, `FilePreviewMedia`, `FilePreviewCode`, `FilePreviewText`, `ConfirmDialog`, `PromptDialog`
|
|
61
|
-
- **ui_kits** — `homepage`, `project_page`, `docs`, `blog`, `chat`, `aicat`, `file_browser`. Each is
|
|
61
|
+
- **ui_kits** — 21 fully-working buildless examples loading the SDK from this repo: `homepage`, `project_page`, `docs`, `blog`, `chat`, `aicat`, `file_browser`, `dashboard`, `settings`, `search`, `terminal`, `gm_inspector`, `workspace`, `community`, `community-app`, `gallery`, `signin`, `error_404`, `slide_deck`, `system_primer`, plus `_template`. Each kit's stylesheet `<link>` set is declared in `ui_kits/kits.config.mjs` and emitted by the scaffold generator (`npm run generate:ui-kits`) — never hand-edit a kit's generated `index.html`; `npm run lint:ui-kits` checks them against generated output.
|
|
62
62
|
|
|
63
63
|
The file-browser surface (rails by file type, drop-zone upload, modal preview) ships its canonical real-world wiring at [`fsbrowse`](https://github.com/AnEntrypoint/fsbrowse) — Express + busboy backend, the SDK frontend.
|
|
64
64
|
|
|
@@ -162,7 +162,7 @@ Pages: `Hero`, `WorksList`, `WritingList`, `Manifesto`, `HomeView`, `ProjectView
|
|
|
162
162
|
Chat: `Chat`, `ChatMessage`, `ChatComposer`, `AICat`, `AICatPortrait`. Helpers: `renderInline`, `fmtBytes`.
|
|
163
163
|
Files: `FileIcon`, `FileRow`, `FileGrid`, `FileToolbar`, `DropZone`, `UploadProgress`, `EmptyState`, `BreadcrumbPath`, `FileViewer` (+ `ConfirmDialog` / `PromptDialog` / `FilePreviewMedia` / `FilePreviewCode` / `FilePreviewText`). Helpers: `fileGlyph`, `fmtFileSize`.
|
|
164
164
|
|
|
165
|
-
All factories are pure: props in, WebJSX tree out. Component source is split per group under `src/components/<
|
|
165
|
+
All factories are pure: props in, WebJSX tree out. Component source is split per group under `src/components/<group>.js`; `src/components.js` is a re-export barrel. A group that outgrows the 200-line-per-module cap becomes a thin barrel of its own over single-responsibility submodules in a sibling directory of the same name (`src/components/editor-primitives.js` over `src/components/editor-primitives/*.js`) — the public export surface never moves, so no consumer import changes. `COMPONENT_API.md` and `docs/component-props.md` (regenerate with `npm run docs:components`) are the generated prop reference.
|
|
166
166
|
|
|
167
167
|
## chat stack layering
|
|
168
168
|
|
|
@@ -245,7 +245,15 @@ The system runs entirely on CSS custom properties under `.ds-247420`. To rebrand
|
|
|
245
245
|
</div>
|
|
246
246
|
```
|
|
247
247
|
|
|
248
|
-
The full token list lives in `colors_and_type.css
|
|
248
|
+
The full token list lives in `colors_and_type.css`; `THEME.md` documents the taxonomy and the `data-theme`/`data-accent`/`data-density`/`data-typescale` attribute contract. The voice rules and the storytelling pass live in `SKILL.md`.
|
|
249
|
+
|
|
250
|
+
Layout primitives worth knowing: `.ds-app-surface` is the Operate-mode page root that switches a kit onto the app typescale (without it, page titles render at the marketing display ceiling), and `.ds-panel-trio` / `.ds-panel-duo` / `.ds-panel-flush` are panel-row grids that step down on container width.
|
|
251
|
+
|
|
252
|
+
## lint gates
|
|
253
|
+
|
|
254
|
+
`npm run lint` runs 13 gates over 30 component sheets. Four are hard zero-tolerance — no raw color literal (`lint-tokens`), no raw `border-radius` (`lint-radius`), no raw `z-index` (`lint-zindex`), no `transition: all` (`lint-transition-all`). Three are ratchets frozen against a baseline file that may only move down — `lint-spacing`, `lint-fontsize`, `lint-important`. The rest guard decorative glyphs, unfiltered conditional children, class prefixes, inline layout styles and duplicated selectors.
|
|
255
|
+
|
|
256
|
+
The scanned set is computed, not listed: `COMPONENT_SHEETS` in `scripts/lint-tokens.mjs` names entry points and `expandSheets()` resolves each one's `@import` graph transitively, because the root `app-shell.css` is a barrel with no declarations of its own. A companion guard requires every `.css` file under `src/css/app-shell/` to appear in that expanded set, so a split sheet cannot be bundled into `dist/247420.css` while remaining invisible to both the linters and any consumer that `<link>`s `app-shell.css` directly.
|
|
249
257
|
|
|
250
258
|
## why scope-prefixed
|
|
251
259
|
|
package/chat.css
CHANGED
|
@@ -428,8 +428,15 @@
|
|
|
428
428
|
would otherwise share a hue. Mirrors the rail-tone shape differentiation. */
|
|
429
429
|
/* One canonical stale tone (disc + word + rail share it) — a muted grey-warn,
|
|
430
430
|
deliberately desaturated so it is NOT the saturated --amber used by
|
|
431
|
-
connecting/connecting-stream (which would re-collide hues).
|
|
432
|
-
|
|
431
|
+
connecting/connecting-stream (which would re-collide hues).
|
|
432
|
+
|
|
433
|
+
The mix is grey-dominant, NOT warn-dominant: at 70% --warn this measured
|
|
434
|
+
1.09:1 against --bg in dark theme (and 1.28:1 on a panel) as the `idle` word
|
|
435
|
+
in .ds-dash-status and .seg.is-idle — text that is present but effectively
|
|
436
|
+
unreadable. --fg-3 is the tier-3 TEXT tone and already carries a legible
|
|
437
|
+
contrast, so leading with it keeps the warn hue as a tint while restoring
|
|
438
|
+
readability. Measured after the change in a live browser. */
|
|
439
|
+
:root { --stale: color-mix(in oklab, var(--fg-3) 78%, var(--warn)); }
|
|
433
440
|
/* Live: a persistent faint concentric ring (resting shape channel, independent
|
|
434
441
|
of motion) with the pulse layered on top — so even at the pulse trough the
|
|
435
442
|
disc reads as solid-fill + ring, never a bare solid that aliases stale. */
|
|
@@ -595,7 +602,11 @@
|
|
|
595
602
|
.ds-dash-header .btn-primary.danger:hover {
|
|
596
603
|
background: color-mix(in oklab, var(--warn) 12%, transparent); color: var(--warn);
|
|
597
604
|
}
|
|
598
|
-
|
|
605
|
+
/* --ink, not --paper, on the armed fill: --warn (#FF5A52) is a light-ish red,
|
|
606
|
+
so paper-on-warn measures 2.72:1 (below the 4.5:1 floor) while ink-on-warn
|
|
607
|
+
measures 6.27:1. This is the same --accent/--accent-ink split the token layer
|
|
608
|
+
documents -- a saturated fill needs the dark text tone, not the light one. */
|
|
609
|
+
.ds-dash-header .btn-primary.danger.is-armed { background: var(--warn); color: var(--ink); border-color: var(--warn); }
|
|
599
610
|
.ds-dash-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: var(--space-2); padding: var(--space-3); }
|
|
600
611
|
@media (min-width: 1500px) { .ds-dash-grid { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); } }
|
|
601
612
|
.ds-dash-card { display: flex; flex-direction: column; gap: var(--space-2); padding: var(--space-3); background: var(--bg-2); border: var(--bw-hair) solid var(--bg-3); border-radius: var(--r-2); }
|
package/colors_and_type.css
CHANGED
|
@@ -422,6 +422,17 @@ select:focus-visible {
|
|
|
422
422
|
(#E0241A / #3A6EFF) are too dark on ink; these clear AA 4.5:1 on --ink. */
|
|
423
423
|
--warn: #FF5A52;
|
|
424
424
|
--sky: #6E9BFF;
|
|
425
|
+
/* Category/heritage dark-tuned pairs (same convention as flame/amber/warn/
|
|
426
|
+
sky above): the :root values are the PAPER tones and go dark-on-dark here.
|
|
427
|
+
Measured on --ink (#0E0E12) / --bg-2 (#1F1F26): mascot-deep #B81F63 was
|
|
428
|
+
3.13:1 / 2.66:1, purple-2 #7F18A4 2.36:1 / 2.00:1, green #247420 3.30:1 /
|
|
429
|
+
2.80:1 — all failing AA for the text roles they carry (aicat/community
|
|
430
|
+
author names, kpi deltas, stamps, rails). The replacements clear 4.5:1 on
|
|
431
|
+
BOTH ink surfaces: #FF5C9E 6.67/5.67, #C277FF 6.77/5.75, #5CBF52 8.28/7.04.
|
|
432
|
+
These are text-tone retunes only — the paper values are untouched. */
|
|
433
|
+
--mascot-deep: #FF5C9E;
|
|
434
|
+
--purple-2: #C277FF;
|
|
435
|
+
--green: #5CBF52;
|
|
425
436
|
--code-string: var(--green-2);
|
|
426
437
|
--code-keyword: var(--sky);
|
|
427
438
|
--code-fn: var(--flame);
|
|
@@ -470,6 +481,11 @@ select:focus-visible {
|
|
|
470
481
|
--amber: #D9A93A;
|
|
471
482
|
--warn: #FF5A52;
|
|
472
483
|
--sky: #6E9BFF;
|
|
484
|
+
/* Mirrors the [data-theme="ink"] category retune above token-for-token —
|
|
485
|
+
see that block for the measured before/after ratios. */
|
|
486
|
+
--mascot-deep: #FF5C9E;
|
|
487
|
+
--purple-2: #C277FF;
|
|
488
|
+
--green: #5CBF52;
|
|
473
489
|
--code-string: var(--green-2);
|
|
474
490
|
--code-keyword: var(--sky);
|
|
475
491
|
--code-fn: var(--flame);
|
package/dist/247420.css
CHANGED
|
@@ -424,6 +424,17 @@
|
|
|
424
424
|
(#E0241A / #3A6EFF) are too dark on ink; these clear AA 4.5:1 on --ink. */
|
|
425
425
|
--warn: #FF5A52;
|
|
426
426
|
--sky: #6E9BFF;
|
|
427
|
+
/* Category/heritage dark-tuned pairs (same convention as flame/amber/warn/
|
|
428
|
+
sky above): the :root values are the PAPER tones and go dark-on-dark here.
|
|
429
|
+
Measured on --ink (#0E0E12) / --bg-2 (#1F1F26): mascot-deep #B81F63 was
|
|
430
|
+
3.13:1 / 2.66:1, purple-2 #7F18A4 2.36:1 / 2.00:1, green #247420 3.30:1 /
|
|
431
|
+
2.80:1 — all failing AA for the text roles they carry (aicat/community
|
|
432
|
+
author names, kpi deltas, stamps, rails). The replacements clear 4.5:1 on
|
|
433
|
+
BOTH ink surfaces: #FF5C9E 6.67/5.67, #C277FF 6.77/5.75, #5CBF52 8.28/7.04.
|
|
434
|
+
These are text-tone retunes only — the paper values are untouched. */
|
|
435
|
+
--mascot-deep: #FF5C9E;
|
|
436
|
+
--purple-2: #C277FF;
|
|
437
|
+
--green: #5CBF52;
|
|
427
438
|
--code-string: var(--green-2);
|
|
428
439
|
--code-keyword: var(--sky);
|
|
429
440
|
--code-fn: var(--flame);
|
|
@@ -472,6 +483,11 @@
|
|
|
472
483
|
--amber: #D9A93A;
|
|
473
484
|
--warn: #FF5A52;
|
|
474
485
|
--sky: #6E9BFF;
|
|
486
|
+
/* Mirrors the [data-theme="ink"] category retune above token-for-token —
|
|
487
|
+
see that block for the measured before/after ratios. */
|
|
488
|
+
--mascot-deep: #FF5C9E;
|
|
489
|
+
--purple-2: #C277FF;
|
|
490
|
+
--green: #5CBF52;
|
|
475
491
|
--code-string: var(--green-2);
|
|
476
492
|
--code-keyword: var(--sky);
|
|
477
493
|
--code-fn: var(--flame);
|
|
@@ -3762,10 +3778,19 @@
|
|
|
3762
3778
|
display: inline-flex; align-items: center; justify-content: center;
|
|
3763
3779
|
background: color-mix(in oklab, var(--mascot) 22%, var(--bg-2));
|
|
3764
3780
|
border-radius: 50%; flex-shrink: 0;
|
|
3781
|
+
/* Cancels the global `pre { overflow-x: auto }`. This is a fixed 32px
|
|
3782
|
+
decorative chip, so the art overflowing its own box made it an
|
|
3783
|
+
unreachable keyboard scroll container (WCAG scrollable-region-focusable)
|
|
3784
|
+
rather than something a user could ever usefully scroll. */
|
|
3785
|
+
overflow: hidden;
|
|
3765
3786
|
}
|
|
3766
3787
|
.ds-247420 .aicat-meta { display: flex; flex-direction: column; font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3); }
|
|
3788
|
+
/* --mascot-deep is now theme-tuned at the token layer (paper #B81F63 /
|
|
3789
|
+
ink #FF5C9E), so this needs no per-theme override. The previous
|
|
3790
|
+
[data-theme="dark"],[data-theme="ink"] override missed data-theme="auto"
|
|
3791
|
+
under OS-dark, which is how the kits actually render — the author name
|
|
3792
|
+
fell back to the paper tone at 3.13:1 on ink. */
|
|
3767
3793
|
.ds-247420 .aicat-meta .name { color: var(--mascot-deep, var(--mascot)); font-weight: 600; }
|
|
3768
|
-
.ds-247420[data-theme="dark"] .aicat-meta .name, .ds-247420[data-theme="ink"] .aicat-meta .name { color: var(--mascot); }
|
|
3769
3794
|
|
|
3770
3795
|
/* ============================================================
|
|
3771
3796
|
Sidebar polish: hide zero-count badges; tonal active state;
|
|
@@ -8781,8 +8806,15 @@
|
|
|
8781
8806
|
would otherwise share a hue. Mirrors the rail-tone shape differentiation. */
|
|
8782
8807
|
/* One canonical stale tone (disc + word + rail share it) — a muted grey-warn,
|
|
8783
8808
|
deliberately desaturated so it is NOT the saturated --amber used by
|
|
8784
|
-
connecting/connecting-stream (which would re-collide hues).
|
|
8785
|
-
|
|
8809
|
+
connecting/connecting-stream (which would re-collide hues).
|
|
8810
|
+
|
|
8811
|
+
The mix is grey-dominant, NOT warn-dominant: at 70% --warn this measured
|
|
8812
|
+
1.09:1 against --bg in dark theme (and 1.28:1 on a panel) as the `idle` word
|
|
8813
|
+
in .ds-dash-status and .seg.is-idle — text that is present but effectively
|
|
8814
|
+
unreadable. --fg-3 is the tier-3 TEXT tone and already carries a legible
|
|
8815
|
+
contrast, so leading with it keeps the warn hue as a tint while restoring
|
|
8816
|
+
readability. Measured after the change in a live browser. */
|
|
8817
|
+
.ds-247420 { --stale: color-mix(in oklab, var(--fg-3) 78%, var(--warn)); }
|
|
8786
8818
|
/* Live: a persistent faint concentric ring (resting shape channel, independent
|
|
8787
8819
|
of motion) with the pulse layered on top — so even at the pulse trough the
|
|
8788
8820
|
disc reads as solid-fill + ring, never a bare solid that aliases stale. */
|
|
@@ -8948,7 +8980,11 @@
|
|
|
8948
8980
|
.ds-247420 .ds-dash-header .btn-primary.danger:hover {
|
|
8949
8981
|
background: color-mix(in oklab, var(--warn) 12%, transparent); color: var(--warn);
|
|
8950
8982
|
}
|
|
8951
|
-
|
|
8983
|
+
/* --ink, not --paper, on the armed fill: --warn (#FF5A52) is a light-ish red,
|
|
8984
|
+
so paper-on-warn measures 2.72:1 (below the 4.5:1 floor) while ink-on-warn
|
|
8985
|
+
measures 6.27:1. This is the same --accent/--accent-ink split the token layer
|
|
8986
|
+
documents -- a saturated fill needs the dark text tone, not the light one. */
|
|
8987
|
+
.ds-247420 .ds-dash-header .btn-primary.danger.is-armed { background: var(--warn); color: var(--ink); border-color: var(--warn); }
|
|
8952
8988
|
.ds-247420 .ds-dash-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: var(--space-2); padding: var(--space-3); }
|
|
8953
8989
|
@media (min-width: 1500px) { .ds-247420 .ds-dash-grid { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); } }
|
|
8954
8990
|
.ds-247420 .ds-dash-card { display: flex; flex-direction: column; gap: var(--space-2); padding: var(--space-3); background: var(--bg-2); border: var(--bw-hair) solid var(--bg-3); border-radius: var(--r-2); }
|