anentrypoint-design 1.0.26 → 1.0.28

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "anentrypoint-design",
3
- "version": "1.0.26",
3
+ "version": "1.0.28",
4
4
  "description": "247420 design system SDK — webjsx + modified ripple-ui, single-file ESM bundle for reproducible use of the AnEntrypoint design.",
5
5
  "type": "module",
6
6
  "main": "./dist/247420.js",
@@ -91,7 +91,7 @@ export function AICatPortrait({ name = 'aicat', status, face } = {}) {
91
91
  );
92
92
  }
93
93
 
94
- export function AICat({ name = 'aicat', messages = [], thinking, composer, status = 'online · purring' } = {}) {
94
+ export function AICat({ name = 'aicat', messages = [], thinking, composer, status = 'online · purring', header } = {}) {
95
95
  ensureCachesInit();
96
96
  const annotated = messages.map((m) =>
97
97
  m.who === 'them' ? { ...m, aicat: true, avatar: m.avatar || '=^.^=' } : m);
@@ -100,7 +100,7 @@ export function AICat({ name = 'aicat', messages = [], thinking, composer, statu
100
100
  : annotated;
101
101
  const threadRef = makeThreadAutoScroll(() => all.length);
102
102
  return h('div', { class: 'chat' },
103
- h('div', { class: 'chat-head', role: 'banner' },
103
+ header || h('div', { class: 'chat-head', role: 'banner' },
104
104
  h('span', { class: 'dot', 'aria-hidden': 'true' }),
105
105
  h('h2', { class: 'ds-chat-title' }, name),
106
106
  h('span', { class: 'sub', 'aria-label': `status: ${status}` }, ' · ' + status),
@@ -55,7 +55,7 @@
55
55
  width: 36px; height: 36px; flex-shrink: 0;
56
56
  border-radius: 50%; background: var(--bg-3); color: var(--fg);
57
57
  display: inline-flex; align-items: center; justify-content: center;
58
- font-family: var(--ff-body); font-size: var(--fs-micro); font-weight: 600;
58
+ font-family: var(--ff-body); font-size: var(--fs-micro); font-weight: var(--fw-medium, 500);
59
59
  text-transform: lowercase; letter-spacing: 0.02em; user-select: none;
60
60
  transition: transform 0.12s ease, box-shadow 0.12s ease;
61
61
  position: relative;
@@ -364,7 +364,7 @@
364
364
  font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3);
365
365
  padding: 0 var(--space-1-75); letter-spacing: 0.02em;
366
366
  }
367
- .chat-meta .who { font-weight: 600; color: var(--fg-2); }
367
+ .chat-meta .who { font-weight: var(--fw-medium, 500); color: var(--fg-2); }
368
368
  .chat-meta .who::after { content: ' ·'; color: var(--fg-3); font-weight: 400; }
369
369
  .chat-meta .t { color: var(--fg-3); }
370
370
  .chat-meta .tick { color: var(--fg-3); margin-left: var(--space-hair); letter-spacing: -2px; font-family: var(--ff-body); }
@@ -390,7 +390,7 @@
390
390
  color: var(--accent-ink);
391
391
  }
392
392
  .chat-reactions .rxn .e { font-size: var(--fs-xs); line-height: 1; }
393
- .chat-reactions .rxn .n { font-family: var(--ff-mono); font-weight: 600; font-size: var(--fs-nano); color: var(--fg-2); }
393
+ .chat-reactions .rxn .n { font-family: var(--ff-mono); font-weight: var(--fw-medium, 500); font-size: var(--fs-nano); color: var(--fg-2); }
394
394
  .chat-reactions .rxn.you .n { color: var(--accent-ink); }
395
395
 
396
396
  /* Typing indicator renders through the same .chat-bubble container as a real
@@ -562,7 +562,27 @@
562
562
  [data-theme="dark"],[data-theme="ink"] override missed data-theme="auto"
563
563
  under OS-dark, which is how the kits actually render — the author name
564
564
  fell back to the paper tone at 3.13:1 on ink. */
565
- .aicat-meta .name { color: var(--mascot-deep, var(--mascot)); font-weight: 600; }
565
+ .aicat-meta .name { color: var(--mascot-deep, var(--mascot)); font-weight: var(--fw-medium, 500); }
566
+
567
+ /* Mascot identity folded into AICat's own .chat-head row (passed as its
568
+ `header` prop) instead of a standalone .aicat-portrait block stacked above
569
+ the chat panel -- reuses the existing 32px .aicat-face circle, just placed
570
+ inline before the title instead of above the whole surface. */
571
+ .aicat-portrait-head { gap: var(--space-2-5); }
572
+ .aicat-face-inline { margin-right: var(--space-1); }
573
+
574
+ /* Centers the transcript+composer as the page's dominant focal surface
575
+ (hero-composer framing): a bounded column with generous top margin so the
576
+ chat panel reads as the first thing the eye lands on, not one card in a
577
+ top-aligned marketing stack. Docs/heading content is demoted into
578
+ .ds-kit-controls below it (see kits-appended.css) so nothing above the
579
+ panel competes with it. */
580
+ .aicat-focus-col {
581
+ max-width: 720px;
582
+ margin-left: auto;
583
+ margin-right: auto;
584
+ padding-top: var(--space-6);
585
+ }
566
586
 
567
587
  /* ============================================================
568
588
  Composer attachment-detected badge, context line, hint, toolbar,
@@ -158,7 +158,7 @@
158
158
  @media (max-width: 640px) {
159
159
  .ds-session-row-span { flex-basis: 100%; }
160
160
  }
161
- .ds-session-row-devcnt { color: var(--warn); font-weight: 600; }
161
+ .ds-session-row-devcnt { color: var(--warn); font-weight: var(--fw-medium, 500); }
162
162
  .ds-session-row-span { font-size: var(--fs-micro); color: var(--fg-3); }
163
163
 
164
164
  /* DevRow */
@@ -220,7 +220,7 @@
220
220
  padding: var(--space-1) var(--space-2);
221
221
  background: var(--bg-2); border: var(--bw-hair) solid var(--rule); border-radius: var(--r-2);
222
222
  }
223
- .ds-bulkbar-count { font-size: var(--fs-sm); font-weight: 600; color: var(--fg-2); }
223
+ .ds-bulkbar-count { font-size: var(--fs-sm); font-weight: var(--fw-medium, 500); color: var(--fg-2); }
224
224
  /* BulkBar is a toolbar (it even declares role=toolbar): compact rect buttons,
225
225
  quiet destructive outline - the app arm-confirms destructive bulk actions
226
226
  via ConfirmDialog, so the strip never needs a loud CTA. */
@@ -445,7 +445,7 @@
445
445
  design; dashed was this system's OTHER "drop target" vocabulary
446
446
  (.panel-docs, kits-appended.css) leaking in here by copy-paste. */
447
447
  .ds-dropzone {
448
- border: var(--bw-rule) solid var(--rule);
448
+ border: var(--bw-hair) solid var(--rule);
449
449
  border-radius: var(--r-3); background: var(--bg);
450
450
  transition: border-color var(--dur-base) var(--ease), background var(--dur-base) var(--ease);
451
451
  }
@@ -10,30 +10,21 @@
10
10
  and each part's own layout (aside becomes a full-width card below the body
11
11
  instead of a right-column card) changed. Centered text, capped measure.
12
12
 
13
- DE-CENTERED 2026-07-31: the flex-stack architecture from the restyle above
14
- is kept as-is (still a single-column stack, still the oversized display
15
- lead, still the full-width aside card) -- this is NOT a revert to the old
16
- two-column grid. What changed is alignment only: `align-items: center` /
17
- `text-align: center` read as the textbook dead-centered "AI portfolio"
18
- hero the moment the oversized display type is involved, regardless of
19
- architecture. Swapping to flex-start + left text-align, plus a
20
- --space-6 left inset inside the unchanged --stage-wide container, pushes
21
- the whole block toward the left edge so the oversized title crops against
22
- real whitespace on the right instead of sitting symmetric in the middle --
23
- editorial tension from a one-axis asymmetry, no grid architecture
24
- reintroduced. */
13
+ RE-CENTERED 2026-08-09: reverted the 2026-07-31 de-centering (flex-start +
14
+ left text-align + left inset) back to a centered stack -- the airy,
15
+ dead-centered arrangement is the intended house look after all, matching
16
+ the plain centered-lead reference this hero is now aligned to. Aside card
17
+ dropped its filled background/accent bar for a plain top-rule divider. */
25
18
  .ds-hero {
26
19
  padding: var(--space-9) 0 var(--space-8);
27
- display: flex; flex-direction: column; align-items: flex-start;
20
+ display: flex; flex-direction: column; align-items: center;
28
21
  gap: var(--space-5);
29
22
  max-width: var(--stage-wide);
30
- margin-inline-start: 0;
31
- padding-inline-start: var(--space-6);
32
- text-align: left;
23
+ text-align: center;
33
24
  position: relative; isolation: isolate;
34
25
  }
35
- .ds-hero-head { display: grid; gap: var(--space-3); justify-items: start; }
36
- .ds-hero-body { margin-inline: 0; }
26
+ .ds-hero-head { display: grid; gap: var(--space-3); justify-items: center; margin-inline: auto; }
27
+ .ds-hero-body { margin-inline: auto; }
37
28
  /* The stat/badge/CTA cluster now sits as a full-width card BELOW the body
38
29
  copy, left-aligned with the rest of the stack, rather than a right-offset
39
30
  column -- still carries its own visual weight via the top accent bar
@@ -42,18 +33,14 @@
42
33
  .ds-hero-aside {
43
34
  position: relative; isolation: isolate;
44
35
  width: 100%; max-width: 46ch;
36
+ margin-inline: auto;
45
37
  display: flex; flex-direction: column;
46
38
  justify-content: space-between; gap: var(--space-5);
47
- background: var(--bg-2);
48
- border-radius: var(--r-2);
49
- padding: calc(var(--space-4) + var(--bw-chunk)) var(--space-5) var(--space-5);
39
+ background: transparent;
40
+ border-top: var(--bw-hair, 1px) solid var(--rule);
41
+ padding: var(--space-4) var(--space-5) var(--space-5);
50
42
  text-align: left;
51
43
  }
52
- .ds-hero-aside::before {
53
- content: ''; position: absolute; left: 0; right: 0; top: 0;
54
- height: var(--bw-chunk); background: var(--accent);
55
- border-radius: var(--bw-chunk) var(--bw-chunk) 0 0;
56
- }
57
44
  .ds-hero-stats { display: flex; flex-direction: column; gap: var(--space-2); }
58
45
  .ds-hero-stat {
59
46
  font-family: var(--ff-mono); font-size: var(--fs-sm);
@@ -81,7 +68,7 @@
81
68
  feel this title wants while clearing enough vertical room that letters
82
69
  stop colliding. */
83
70
  line-height: 1.02; letter-spacing: var(--tr-tighter);
84
- margin: 0; max-width: 20ch; text-wrap: balance;
71
+ margin: 0; max-width: 16ch; margin-inline: auto; text-wrap: balance;
85
72
  }
86
73
  .ds-hero-body {
87
74
  font-family: var(--ff-body); font-size: var(--fs-xl);
@@ -175,7 +162,7 @@
175
162
  ============================================================ */
176
163
  .ds-marquee {
177
164
  overflow: hidden; width: 100%;
178
- border-block: var(--bw-rule) solid var(--fg);
165
+ border-block: var(--bw-hair) solid var(--rule-strong);
179
166
  padding: var(--space-2) 0;
180
167
  font-family: var(--ff-display); font-weight: 600;
181
168
  text-transform: uppercase; letter-spacing: var(--tr-caps);
@@ -10,7 +10,7 @@
10
10
  font-weight: 600;
11
11
  color: var(--fg);
12
12
  background: var(--bg-2);
13
- border: var(--bw-rule) solid var(--rule);
13
+ border: var(--bw-hair) solid var(--rule);
14
14
  border-radius: var(--r-1);
15
15
  transition: border-color var(--dur-snap) var(--ease), background var(--dur-snap) var(--ease), box-shadow var(--dur-snap) var(--ease);
16
16
  }
@@ -19,7 +19,7 @@
19
19
  padding: var(--space-3) var(--space-4);
20
20
  border-bottom: var(--bw-hair) solid var(--rule); flex: 0 0 auto;
21
21
  }
22
- .ds-plugins-title { font-size: var(--fs-md); font-weight: 700; color: var(--fg); }
22
+ .ds-plugins-title { font-size: var(--fs-md); font-weight: 600; color: var(--fg); }
23
23
  .ds-plugins-close {
24
24
  background: none; border: none; color: var(--fg-3); cursor: pointer;
25
25
  font-size: 20px; line-height: 1; padding: 2px 6px; border-radius: var(--r-1);
@@ -18,7 +18,7 @@
18
18
  .btn:hover { background: var(--bg-3); color: var(--fg); transform: translateY(-1px); box-shadow: var(--shadow-1); }
19
19
  .btn-primary {
20
20
  background: var(--accent); color: var(--accent-fg);
21
- font-weight: 700;
21
+ font-weight: 600;
22
22
  }
23
23
  .btn-primary:hover { background: var(--fg); color: var(--bg); transform: translateY(-1px); box-shadow: var(--shadow-2); }
24
24
  .btn-ghost { background: transparent; color: var(--fg); box-shadow: inset 0 0 0 var(--bw-hair) var(--fg); }
@@ -27,6 +27,50 @@
27
27
  .app-side a .glyph { font-family: var(--ff-body); font-size: 13px; font-weight: 600; color: var(--fg-3); text-align: center; }
28
28
  .app-side a.active .glyph { color: var(--accent-ink); }
29
29
 
30
+ /* .ds-side-tree — two-level project-tree group (parent <details> + nested
31
+ child rows), the sidebar's hierarchy primitive. Sits alongside Side()'s
32
+ own flat .app-side-group rows but carries genuine nesting: a summary row
33
+ (parent) disclosing child conversation rows, closer to a project-tree
34
+ sidebar than a single flat list. */
35
+ .ds-side-tree { border: 0; }
36
+ .ds-side-tree-summary {
37
+ display: flex; align-items: center; gap: var(--space-2);
38
+ padding: var(--space-1-5) var(--space-2);
39
+ border-radius: var(--r-1);
40
+ font-family: var(--ff-mono); font-size: var(--fs-sm); color: var(--fg-2);
41
+ cursor: pointer; list-style: none;
42
+ }
43
+ .ds-side-tree-summary::-webkit-details-marker { display: none; }
44
+ .ds-side-tree-summary:hover { background: var(--bg-2); color: var(--fg); }
45
+ .ds-side-tree-summary:focus-visible {
46
+ outline: var(--focus-w) solid var(--focus-color);
47
+ outline-offset: var(--focus-offset);
48
+ }
49
+ .ds-side-tree-summary .glyph { font-family: var(--ff-body); font-size: 13px; font-weight: 600; color: var(--fg-3); }
50
+ .ds-side-tree-summary .count {
51
+ margin-left: auto; padding: 1px 8px; font-size: var(--fs-micro); font-weight: 700;
52
+ font-family: var(--ff-body); letter-spacing: 0.04em; min-width: 18px; text-align: center;
53
+ color: var(--fg-3); background: var(--bg-2); border-radius: var(--r-pill, 999px);
54
+ }
55
+ .ds-side-tree-children {
56
+ display: flex; flex-direction: column;
57
+ padding-left: var(--space-4);
58
+ gap: var(--space-hair);
59
+ }
60
+ .ds-side-tree-child {
61
+ display: flex; align-items: center; gap: var(--space-2);
62
+ padding: var(--space-1) var(--space-2);
63
+ border-radius: var(--r-1);
64
+ font-family: var(--ff-mono); font-size: var(--fs-xs); color: var(--fg-3);
65
+ text-decoration: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
66
+ }
67
+ .ds-side-tree-child:hover, .ds-side-tree-child:focus-visible { background: var(--bg-2); color: var(--fg); }
68
+ .ds-side-tree-child:focus-visible {
69
+ outline: var(--focus-w) solid var(--focus-color);
70
+ outline-offset: var(--focus-offset);
71
+ }
72
+ .ds-side-tree-child .glyph { font-family: var(--ff-body); color: var(--fg-3); }
73
+
30
74
  /* -- select primitive --------------------------------------------------- */
31
75
  .ds-select {
32
76
  width: 100%;
@@ -27,7 +27,7 @@
27
27
  width: 18px; height: 18px;
28
28
  border-radius: var(--r-pill);
29
29
  background: var(--bg-1);
30
- border: var(--bw-rule) solid var(--accent);
30
+ border: var(--bw-hair) solid var(--accent);
31
31
  box-shadow: var(--shadow-1);
32
32
  transform: translate(-50%, -50%);
33
33
  pointer-events: none;
@@ -41,8 +41,8 @@ body.canvas-host { background: transparent !important; }
41
41
 
42
42
  :root {
43
43
  --app-status-h: 26px;
44
- --app-topbar-h: var(--size-lg);
45
- --app-crumb-h: var(--size-sm);
44
+ --app-topbar-h: 64px;
45
+ --app-crumb-h: 56px;
46
46
  }
47
47
 
48
48
  .app-topbar {
@@ -51,7 +51,7 @@ body.canvas-host { background: transparent !important; }
51
51
  align-items: center; gap: var(--space-4);
52
52
  min-height: var(--app-topbar-h);
53
53
  padding: var(--space-2-5) var(--pad-x);
54
- background: color-mix(in oklab, var(--bg) 97%, transparent);
54
+ border-bottom: var(--bw-hair, 1px) solid var(--rule);
55
55
  }
56
56
 
57
57
  /* Merged chrome: when AppShell gets both a topbar and a crumb it wraps them
@@ -64,7 +64,7 @@ body.canvas-host { background: transparent !important; }
64
64
  display: flex; flex-wrap: wrap; align-items: center;
65
65
  gap: var(--space-2) var(--space-4);
66
66
  padding: var(--space-2) var(--pad-x);
67
- background: color-mix(in oklab, var(--bg) 97%, transparent);
67
+ border-bottom: var(--bw-hair, 1px) solid var(--rule);
68
68
  }
69
69
  .app-chrome > .app-topbar,
70
70
  .app-chrome > .app-crumb {
@@ -134,7 +134,6 @@ body.canvas-host { background: transparent !important; }
134
134
  change. */
135
135
  .app-topbar nav a.active {
136
136
  color: var(--accent-ink);
137
- background: color-mix(in oklab, var(--accent) 16%, transparent);
138
137
  box-shadow: inset 0 -2px 0 0 var(--accent);
139
138
  font-weight: 600;
140
139
  }
@@ -926,6 +926,7 @@ export interface AICatProps {
926
926
  composer?: any;
927
927
  /** @default 'online · purring' */
928
928
  status?: string;
929
+ header?: any;
929
930
  }
930
931
  export declare function AICat(props?: AICatProps): VNode;
931
932