@cloudgrid-io/ui 0.21.0 → 0.23.0

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.
@@ -1,6 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import * as React from "react";
2
3
  import { Card } from "../ui/card.js";
3
4
  import { EntityIdentity } from "./entity-identity.js";
5
+ import { EntityStateDot, EntityStatus } from "./entity-status.js";
4
6
  import { EntityDashboardIcon, KindAgentIcon, KindAppIcon, KindInspirationIcon, OpenLiveIcon, } from "./icons.js";
5
7
  import { cn } from "../lib/cloudgrid-cn.js";
6
8
  /**
@@ -34,6 +36,29 @@ export const ENTITY_KIND_LABEL = {
34
36
  inspiration: "Inspiration",
35
37
  app: "App",
36
38
  };
39
+ /**
40
+ * THE TINTS. What a kind's badge sits on.
41
+ *
42
+ * A third table beside the marks and the words, added with the founder's
43
+ * 2026-09-09 draft (#196): the badge used to be one neutral disc for all three
44
+ * kinds, so the mark was the only thing telling them apart and it is 16px wide.
45
+ * A tint is legible from across a listing; a glyph is not.
46
+ *
47
+ * Every entry is a utility over a `--cg-kind-*` token, and those three are
48
+ * declared at `:root` ONLY. That is the identity tile's rule applied to a mark:
49
+ * the badge sits on a screenshot, and a picture does not flip. The glyph stays
50
+ * `--cg-text-on-accent`, which is ink at every scope, and it measures 12.74:1,
51
+ * 14.65:1 and 10.24:1 on the three grounds.
52
+ *
53
+ * `agent` is a PROPOSAL. The draft never draws an agent badge; #d1c9ff is its
54
+ * own "Secondary2 30" style, which is the nearest thing in the same set to the
55
+ * two it does draw. Founder may veto, and a veto is one value in tokens.
56
+ */
57
+ export const ENTITY_KIND_TINT = {
58
+ agent: "bg-kind-agent",
59
+ inspiration: "bg-kind-inspiration",
60
+ app: "bg-kind-app",
61
+ };
37
62
  /**
38
63
  * The sizes, in the order they get smaller. Read from the console census
39
64
  * (2026-09-08) rather than invented: `default` is the 360px track, `compact`
@@ -58,10 +83,10 @@ export const ENTITY_CARD_SIZE_ORDER = ["default", "compact", "row"];
58
83
  * whole point of the axis is that the sizes stay comparable. Three ternaries in
59
84
  * three places is how one of them silently stops matching the other two.
60
85
  *
61
- * `row` builds its own composition below, so its `stats`, `reveal` and
62
- * `revealTitle` entries are empty: a row has no stat rule and no reveal panel.
63
- * They are present rather than omitted so the record stays total and a fourth
64
- * size cannot be half-added.
86
+ * `row` builds its own composition below, so its `nameRow`, `stats`, `reveal`
87
+ * and `revealTitle` entries are empty: a row has no stat rule, no reveal panel
88
+ * and no name row of its own. They are present rather than omitted so the record
89
+ * stays total and a fourth size cannot be half-added.
65
90
  */
66
91
  const SIZE_STYLE = {
67
92
  default: {
@@ -70,7 +95,8 @@ const SIZE_STYLE = {
70
95
  title: "text-body-sm",
71
96
  description: "text-body-sm",
72
97
  stats: "gap-4 pt-3",
73
- reveal: "gap-1.5 p-3",
98
+ nameRow: "gap-2 px-[11px] pb-[11px]",
99
+ reveal: "gap-3 px-[15px] pt-[15px] pb-[11px]",
74
100
  revealTitle: "text-body-sm",
75
101
  },
76
102
  compact: {
@@ -79,7 +105,8 @@ const SIZE_STYLE = {
79
105
  title: "text-caption",
80
106
  description: "text-caption",
81
107
  stats: "gap-3 pt-2",
82
- reveal: "gap-1 p-2",
108
+ nameRow: "gap-1.5 px-2 pb-2",
109
+ reveal: "gap-2 px-3 pt-3 pb-2",
83
110
  revealTitle: "text-caption",
84
111
  },
85
112
  row: {
@@ -88,6 +115,7 @@ const SIZE_STYLE = {
88
115
  title: "text-body-sm",
89
116
  description: "text-caption",
90
117
  stats: "",
118
+ nameRow: "",
91
119
  reveal: "",
92
120
  revealTitle: "",
93
121
  },
@@ -98,9 +126,9 @@ const SIZE_STYLE = {
98
126
  * scannable, and what a percentage width would lose the moment the column
99
127
  * resized.
100
128
  *
101
- * 128px against the 1200/630 ratio is a 67px picture, so a row is a little over
102
- * 90px tall with its padding. A 28px kind badge would cover a fifth of that
103
- * thumbnail, which is why the row uses the small one.
129
+ * 128px against the 159/92 ratio is a 74px picture, so a row is a little under
130
+ * 100px tall with its padding. Even a 20px kind badge would take a sixth of that
131
+ * thumbnail, which is why the row uses the 16px one.
104
132
  */
105
133
  const ROW_THUMBNAIL = "w-32";
106
134
  /**
@@ -148,35 +176,77 @@ function cssUrlString(url) {
148
176
  * The kind badge on its own, exported because a listing header, a detail page or
149
177
  * a row may want the same mark without a card around it.
150
178
  *
151
- * `size` is the only variant: `md` is the 28px disc that sits on a preview,
152
- * `sm` the 20px one that sits beside a title. Both render a 16px-class glyph,
153
- * which is what the marks were picked to survive.
179
+ * 20 x 20 at a 6px corner with a 16px glyph, tinted per kind, lifted off the
180
+ * picture by `shadow-mark` the founder's 2026-09-09 draft (#196). It was a
181
+ * 28px neutral disc with a mixed hairline; what changed is that the ground now
182
+ * says which kind it is and the mark is small enough to stop competing with the
183
+ * thumbnail it sits on.
184
+ *
185
+ * `size` is the only variant: `md` is the badge that sits on a preview, `sm` the
186
+ * 16px one that sits beside a title, where a 20px disc leads the line rather
187
+ * than following it.
188
+ *
189
+ * The badge does NOT flip per surface, and that is the identity tile's rule
190
+ * applied to a mark. Its ground is a `--cg-kind-*` tint and its glyph is
191
+ * `--cg-text-on-accent`, all four declared at `:root` only, so a tinted square
192
+ * with an ink glyph is what renders on white, on the purple panel and on ink
193
+ * alike. The alternative — a badge painted with `--cg-surface-card` and
194
+ * `--cg-text-primary` — inverts to white-on-white the moment the card sits
195
+ * inside `data-cg-surface="ink"`, because half of what it reads flips and the
196
+ * picture under it does not.
197
+ *
198
+ * The hairline is gone with the neutral disc: an edge existed to separate a
199
+ * white disc from a light screenshot, and a tint plus a drop shadow does that
200
+ * job without drawing a line the draft does not have.
201
+ *
202
+ * The kind is announced. The glyph is `aria-hidden` and the word rides along in
203
+ * an `sr-only` span, because "agent" is information and a decorative mark is not
204
+ * a way to convey it.
154
205
  */
155
206
  function EntityKindBadge({ kind, size = "md", className, ...props }) {
156
207
  const Icon = ENTITY_KIND_ICON[kind];
157
- return (_jsxs("span", { "data-slot": "entity-card-kind", "data-kind": kind, className: cn("inline-flex shrink-0 items-center justify-center rounded-pill bg-raised text-on-accent", size === "md" ? "size-7" : "size-5", className), style: {
158
- // Mixed from --cg-ink rather than taken from --cg-border-hairline, and
159
- // for the same reason the ground and the glyph are pinned: the hairline
160
- // is a white wash on both dark surfaces, so a badge inside
161
- // data-cg-surface="ink" would lose its edge while the disc under it
162
- // stayed light. The mesh in EntityIdentity mixes its own line the same
163
- // way, at 8%.
164
- border: "1px solid color-mix(in srgb, var(--cg-ink) 12%, transparent)",
165
- }, ...props, children: [_jsx(Icon, { className: size === "md" ? "size-4" : "size-3.5" }), _jsx("span", { className: "sr-only", children: ENTITY_KIND_LABEL[kind] })] }));
208
+ return (_jsxs("span", { "data-slot": "entity-card-kind", "data-kind": kind, className: cn("inline-flex shrink-0 items-center justify-center rounded-2xs text-on-accent shadow-mark", ENTITY_KIND_TINT[kind], size === "md" ? "size-5" : "size-4", className), ...props, children: [_jsx(Icon, { className: size === "md" ? "size-4" : "size-3" }), _jsx("span", { className: "sr-only", children: ENTITY_KIND_LABEL[kind] })] }));
209
+ }
210
+ /**
211
+ * The state as a dot, when the caller has not supplied one.
212
+ *
213
+ * `status` is a node and stays a node: this card does not know the wire status
214
+ * vocabulary and is not learning it here. What this does is recognise the
215
+ * library's OWN chip and take the state off it, so a caller who already passes
216
+ * `<EntityStatus status="live" />` gets the draft's dot with no edit at all
217
+ * (#196). Anything else — a console chip, a bare string, a fragment — returns
218
+ * null, and the card falls back to rendering the node it was given.
219
+ *
220
+ * Deliberately not a `state="live"` prop. That would be the vocabulary itself,
221
+ * in the props table, on a card whose whole design is that the product's words
222
+ * stay in the product.
223
+ */
224
+ function statusDotFrom(status) {
225
+ if (!React.isValidElement(status))
226
+ return null;
227
+ if (status.type !== EntityStatus)
228
+ return null;
229
+ const props = status.props;
230
+ if (!props.status)
231
+ return null;
232
+ return _jsx(EntityStateDot, { status: props.status, label: props.label });
166
233
  }
167
- function EntityCard({ title, slug, description, size = "default", titleLines = 2, descriptionLines = 1, status, headerActions, stats, seed, previewUrl, kind, reveal = false, dashboardHref, settingsHref, creator, href, ariaLabel, meta, footer, className, children, ...props }) {
234
+ function EntityCard({ title, slug, description, size = "default", titleLines = 2, descriptionLines = 1, status, statusDot, headerActions, stats, seed, previewUrl, kind, reveal = false, openDisabledReason, dashboardHref, settingsHref, creator, href, ariaLabel, meta, footer, className, children, ...props }) {
168
235
  const sized = SIZE_STYLE[size];
169
- // The reveal owns the preview and spends the `href`, so it only exists when
170
- // both are there. Asked for without a `seed` it would be a panel over nothing;
171
- // asked for without an `href` its Open action would be an anchor with no
172
- // target, which renders as a link, is not focusable, and does nothing when
173
- // clicked. Silently off in both cases rather than half-built.
236
+ // The reveal owns the preview, so `seed` is what it needs and all it needs: a
237
+ // panel over nothing is not a panel. It deliberately does NOT ask for an
238
+ // `href` see "the reveal never depends on data" above (#193). A card whose
239
+ // entity is not being served still reveals, and Open is disabled inside it.
174
240
  //
175
241
  // A `row` never reveals, whatever the caller passed. Not a limitation: the row
176
242
  // already shows everything the panel carries, so there is nothing to reveal —
177
243
  // see the size note at the top. Its two actions are rendered at the end of the
178
244
  // row and appear on hover, which is the half of the behaviour that survives.
179
- const revealed = reveal && Boolean(seed) && Boolean(href) && size !== "row";
245
+ const revealed = reveal && Boolean(seed) && size !== "row";
246
+ // Whether the Open action has anywhere to go. One boolean, read in three
247
+ // places — Open's own markup, Dashboard's hit model, and the reason line — so
248
+ // the three can never disagree about which state the card is in.
249
+ const openLive = Boolean(href);
180
250
  // One target, two prop names, for one minor. `settingsHref` is the old name
181
251
  // (#182 renamed the action to Dashboard, because the console page it opens is
182
252
  // a dashboard and not a settings screen), and it is resolved here rather than
@@ -194,6 +264,19 @@ function EntityCard({ title, slug, description, size = "default", titleLines = 2
194
264
  // One line on compact and on row, whatever the caller asked for. See the note
195
265
  // on the prop: this is a height rule, not a preference.
196
266
  const clampDescription = size === "default" && descriptionLines === 2 ? "line-clamp-2" : "truncate";
267
+ // The dot, and the one place it is resolved. Explicit first, derived from the
268
+ // library's own chip second, nothing third — see `statusDotFrom` (#196).
269
+ const dot = statusDot ?? statusDotFrom(status);
270
+ // A card with a panel keeps its rest state to the picture, the name and the
271
+ // dot (#196). Everything else the caller passed — the line, the creator, the
272
+ // state, the stats, the controls — is what the panel is FOR, and rendering it
273
+ // twice is how a listing turns back into a wall of text.
274
+ //
275
+ // Tied to `revealed` rather than to `size`, and that is the whole safety of
276
+ // this change: a card with no panel has nowhere to move that information TO,
277
+ // so it keeps the body it always had. Every existing caller that does not pass
278
+ // `reveal` renders exactly as it did.
279
+ const minimal = revealed;
197
280
  /**
198
281
  * THE TWO ACTIONS. One pair, written once, used by the reveal panel and by the
199
282
  * row alike — because #182's premise is that every entity card offers the same
@@ -214,45 +297,143 @@ function EntityCard({ title, slug, description, size = "default", titleLines = 2
214
297
  * a region of the card that went somewhere different from every pixel around
215
298
  * it, with nothing to see (#171). `pointer-events-none` until hover or
216
299
  * focus-within, and Open's overlay untouched, is the whole fix.
300
+ *
301
+ * **With no `href`, the pair keeps its shape and swaps which half is the
302
+ * stretched one** (#193). Open becomes a disabled control, and the panel's
303
+ * single stretched hit area moves to Dashboard — so the card is still one tap
304
+ * target on a phone, still going to exactly one place, and that place is the
305
+ * only door the entity actually has. The alternative, a panel with nothing
306
+ * stretched, leaves a touch reader no way in at all: Dashboard's
307
+ * `pointer-events-none` needs a hover to lift, and a device with no hover
308
+ * never lifts it.
309
+ *
310
+ * That swap does not reopen #171. What that defect was about is a PILL-sized
311
+ * invisible region behaving differently from every pixel around it. A
312
+ * stretched Dashboard is the whole panel, uniformly, which is Open's own model
313
+ * and has always been correct on touch. The one pixel-region that must NOT
314
+ * follow it is the disabled Open itself, which carries `relative z-10` to stay
315
+ * above the overlay: a control that reads as disabled has to be inert when it
316
+ * is tapped, not a second way to reach Dashboard.
317
+ */
318
+ const actionPair = (_jsxs(_Fragment, { children: [openLive ? (_jsxs("a", { href: href, "data-slot": "entity-card-open",
319
+ // The word is not drawn. The founder's draft puts one 20px arrow at
320
+ // the top right of the panel and no label, and a pill with "Open" in
321
+ // it would be the widest thing on a 260px card. `sr-only` is what
322
+ // keeps the action named: an icon link with no accessible name is a
323
+ // link a screen reader announces as its own URL.
324
+ className: "inline-flex size-7 shrink-0 items-center justify-center rounded-pill text-ink no-underline after:absolute after:inset-0 after:content-[''] focus-visible:ring-3 focus-visible:ring-ring focus-visible:outline-none", children: [_jsx(OpenLiveIcon, { className: "size-5" }), _jsx("span", { className: "sr-only", children: "Open" })] })) : (_jsxs("a", { "data-slot": "entity-card-open", "data-disabled": "true", role: "link", "aria-disabled": "true",
325
+ // opacity-50 and a not-allowed cursor: this library's own disabled
326
+ // convention, and the one every other block here uses. It takes the
327
+ // mark under the panel's AA floor on purpose — WCAG 1.4.3 exempts an
328
+ // inactive control, and a disabled action that reads at full strength
329
+ // is the failure this state exists to prevent.
330
+ //
331
+ // relative z-10 so a tap on the mark lands on the mark. With Open
332
+ // disabled the panel's stretched layer is Dashboard's, and it covers
333
+ // this pill along with everything else.
334
+ className: "relative z-10 inline-flex size-7 shrink-0 cursor-not-allowed items-center justify-center rounded-pill text-ink no-underline opacity-50", children: [_jsx(OpenLiveIcon, { className: "size-5" }), _jsx("span", { className: "sr-only", children: "Open" }), openDisabledReason ? _jsx("span", { className: "sr-only", children: openDisabledReason }) : null] })), dashboardTarget ? (_jsxs("a", { href: dashboardTarget, "data-slot": "entity-card-dashboard", "data-stretched": openLive ? undefined : "true", className: cn("inline-flex size-7 shrink-0 items-center justify-center rounded-pill text-ink no-underline focus-visible:ring-3 focus-visible:ring-ring focus-visible:outline-none", openLive
335
+ ? // Lifted above Open's overlay, and therefore dead until the panel
336
+ // can be seen (#171).
337
+ "pointer-events-none relative group-hover/card:pointer-events-auto group-focus-within/card:pointer-events-auto"
338
+ : // Open is disabled, so this is the card's one door: it takes
339
+ // Open's hit model wholesale — unpositioned, stretched, never
340
+ // gated, which is what makes it work on a phone.
341
+ "after:absolute after:inset-0 after:content-['']"), children: [_jsx(EntityDashboardIcon, { className: "size-5" }), _jsx("span", { className: "sr-only", children: "Dashboard" })] })) : null] }));
342
+ /**
343
+ * THE FULL BODY: the card as it was before the panel existed.
344
+ *
345
+ * Rendered by a card with no reveal panel — a text card, a card whose caller
346
+ * did not ask for one — because there is nowhere else for any of it to go.
347
+ * A card WITH a panel renders `nameRow` below instead (#196).
217
348
  */
218
- const actionPair = (_jsxs(_Fragment, { children: [_jsxs("a", { href: href, "data-slot": "entity-card-open", className: "inline-flex items-center gap-1 rounded-pill border border-hairline px-2 py-1 text-caption no-underline after:absolute after:inset-0 after:content-[''] focus-visible:ring-3 focus-visible:ring-ring focus-visible:outline-none", children: [_jsx(OpenLiveIcon, { className: "size-3.5" }), "Open"] }), dashboardTarget ? (_jsxs("a", { href: dashboardTarget, "data-slot": "entity-card-dashboard", className: "pointer-events-none relative inline-flex items-center gap-1 rounded-pill border border-hairline px-2 py-1 text-caption no-underline group-hover/card:pointer-events-auto group-focus-within/card:pointer-events-auto focus-visible:ring-3 focus-visible:ring-ring focus-visible:outline-none", children: [_jsx(EntityDashboardIcon, { className: "size-3.5" }), "Dashboard"] })) : null] }));
219
- const body = children ??
220
- (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("span", { dir: "auto", "data-slot": "entity-card-title", title: title, className: cn("block font-medium break-words text-ink", sized.title, titleLines === 1 ? "truncate" : "line-clamp-2"), children: [kind && !seed ? (_jsx(EntityKindBadge, { kind: kind, size: "sm", className: "mr-1.5 align-[-0.2em]" })) : null, title] }), slug ? (_jsx("span", { dir: "auto", "data-slot": "entity-card-slug", title: slug, className: "mt-0.5 block truncate font-mono text-caption text-faint", children: slug })) : null] }), status ? _jsx("div", { className: "shrink-0", children: status }) : null, headerActions ? (_jsx("div", { "data-slot": "entity-card-actions",
221
- // items-center against the title's first line, and -mt-1 to pull an
222
- // icon button's own padding back so the glyph optically lines up
223
- // with the title rather than sitting a couple of pixels low.
224
- className: "-mt-1 flex shrink-0 items-center gap-1", children: headerActions })) : null] }), description ? (_jsx("p", { dir: "auto", "data-slot": "entity-card-description", title: description, className: cn("m-0 text-body", sized.description, clampDescription), children: description })) : null, meta, _jsx("div", { "aria-hidden": "true", className: "grow" }), shownStats && shownStats.length > 0 ? (_jsx("div", { "data-slot": "entity-card-stats", className: cn("flex flex-wrap items-center border-t border-hairline text-caption text-body", sized.stats), children: shownStats.map((stat) => (_jsxs("span", { className: "inline-flex items-center gap-1.5", children: [stat.icon ? (_jsx("span", { "aria-hidden": "true", className: "inline-flex [&>svg]:size-4", children: stat.icon })) : null, stat.value, _jsx("span", { className: "sr-only", children: stat.label })] }, stat.label))) })) : null, footer] }));
349
+ const fullBody = (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-start justify-between gap-3", children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("span", { dir: "auto", "data-slot": "entity-card-title", title: title, className: cn("block font-medium break-words text-ink", sized.title, titleLines === 1 ? "truncate" : "line-clamp-2"), children: [kind && !seed ? (_jsx(EntityKindBadge, { kind: kind, size: "sm", className: "mr-1.5 align-[-0.2em]" })) : null, title] }), slug ? (_jsx("span", { dir: "auto", "data-slot": "entity-card-slug", title: slug, className: "mt-0.5 block truncate font-mono text-caption text-faint", children: slug })) : null] }), status ? _jsx("div", { className: "shrink-0", children: status }) : null, headerActions ? (_jsx("div", { "data-slot": "entity-card-actions",
350
+ // items-center against the title's first line, and -mt-1 to pull an
351
+ // icon button's own padding back so the glyph optically lines up
352
+ // with the title rather than sitting a couple of pixels low.
353
+ className: "-mt-1 flex shrink-0 items-center gap-1", children: headerActions })) : null] }), description ? (_jsx("p", { dir: "auto", "data-slot": "entity-card-description", title: description, className: cn("m-0 text-body", sized.description, clampDescription), children: description })) : null, meta, _jsx("div", { "aria-hidden": "true", className: "grow" }), shownStats && shownStats.length > 0 ? (_jsx("div", { "data-slot": "entity-card-stats", className: cn("flex flex-wrap items-center border-t border-hairline text-caption text-body", sized.stats), children: shownStats.map((stat) => (_jsxs("span", { className: "inline-flex items-center gap-1.5", children: [stat.icon ? (_jsx("span", { "aria-hidden": "true", className: "inline-flex [&>svg]:size-4", children: stat.icon })) : null, stat.value, _jsx("span", { className: "sr-only", children: stat.label })] }, stat.label))) })) : null, footer] }));
354
+ /**
355
+ * THE REST STATE of a card that has a panel: the name, and the dot (#196).
356
+ *
357
+ * The founder's draft is one picture, one name and one 10px dot, and it is not
358
+ * a smaller version of the body above — it is the body above with everything
359
+ * that belongs in the panel taken out of it. A listing of these reads as a
360
+ * wall of PICTURES, which is what a listing of somebody's work should be.
361
+ *
362
+ * The name keeps `data-slot="entity-card-title"`, because it is the title.
363
+ * `truncate`, always: this row is one line by construction, and `titleLines`
364
+ * is the body's rule, not this one's.
365
+ */
366
+ const nameRow = (_jsxs("div", { className: cn("flex w-full min-w-0 items-center", sized.nameRow), children: [_jsx("span", { dir: "auto", "data-slot": "entity-card-title", title: title, className: cn("min-w-0 flex-1 truncate font-medium text-ink", sized.title), children: title }), dot ? (_jsx("span", { "data-slot": "entity-card-state", className: "flex shrink-0 items-center", children: dot })) : null] }));
225
367
  /**
226
368
  * The preview region, shared by all three sizes.
227
369
  *
228
- * A function rather than a second copy, because the two things that differ
229
- * between the stacked sizes and the row are its shape and whether a panel goes
230
- * over it. Everything that is easy to get wrong — the capture painting over
231
- * the identity rather than instead of it, the badge sitting after the panel so
232
- * the scrim does not smudge it, the badge not eating a click meant for the
233
- * link — is written once and is the same picture in every size.
370
+ * A function rather than a second copy, because the only thing that differs
371
+ * between the stacked sizes and the row is its shape. Everything that is easy
372
+ * to get wrong — the capture painting over the identity rather than instead of
373
+ * it, the badge not eating a click meant for the link is written once and is
374
+ * the same picture in every size.
375
+ *
376
+ * The panel is no longer passed in here (#196). It is anchored to the CARD's
377
+ * bottom edge now, because it covers the name row as well as the lower half of
378
+ * the picture, and a child of the preview cannot reach outside it.
234
379
  */
235
- const previewRegion = (shape, badgeSize, panel) => seed ? (_jsxs("div", { "data-slot": "entity-card-preview", className: cn("relative shrink-0", shape), children: [_jsx(EntityIdentity, { seed: seed, name: title }), previewUrl ? (_jsx("div", { "data-slot": "entity-card-capture", "aria-hidden": "true", className: "absolute inset-0 bg-cover bg-center",
380
+ const previewRegion = (shape, badgeSize) => seed ? (_jsxs("div", { "data-slot": "entity-card-preview", className: cn("relative shrink-0", shape), children: [_jsx(EntityIdentity, { seed: seed, name: title }), previewUrl ? (_jsx("div", { "data-slot": "entity-card-capture", "aria-hidden": "true", className: "absolute inset-0 bg-cover bg-center",
236
381
  // A background image, not an <img>: a URL that 404s paints nothing
237
382
  // and the identity tile below shows through, with no state and no
238
383
  // client boundary. The URL goes out exactly as the caller wrote it —
239
384
  // `cssUrlString` escapes only the quote and backslash that would
240
385
  // break out of url("..."), and never re-encodes an already-encoded
241
386
  // URL (ui#178).
242
- style: { backgroundImage: `url("${cssUrlString(previewUrl)}")` } })) : null, panel, kind ? (_jsx(EntityKindBadge, { kind: kind, size: badgeSize, className: cn("pointer-events-none absolute", badgeSize === "md" ? "top-2 right-2" : "top-1 right-1") })) : null] })) : null;
387
+ style: { backgroundImage: `url("${cssUrlString(previewUrl)}")` } })) : null, kind ? (_jsx(EntityKindBadge, { kind: kind, size: badgeSize, className: cn("pointer-events-none absolute", badgeSize === "md" ? "top-[7px] right-[7px]" : "top-1 right-1") })) : null] })) : null;
243
388
  /**
244
- * The reveal panel, which belongs to the stacked sizes only.
389
+ * THE PANEL which IS the open state (#196).
390
+ *
391
+ * The founder's ruling of 2026-09-09: the panel is not a hover affordance over
392
+ * a card, it is the card open. So it carries what the rest state gave up — the
393
+ * line about the thing, who made it, the controls — and the rest state is
394
+ * lighter for it.
395
+ *
396
+ * Four things changed, and each one had a reason on the old side too:
397
+ *
398
+ * **It is white, not a scrim, and the ink surface is gone.** A dark wash over
399
+ * a screenshot made the picture a texture behind grey text, and every entity's
400
+ * panel looked like every other entity's. On white the panel is a piece of
401
+ * paper laid over the lower half of the picture: the type is the page's own
402
+ * ink at the page's own contrast, and the picture above it stays a picture.
403
+ * The scrim treatment is retired for this card — `--cg-scrim-strong` is still
404
+ * a token, and nothing else here reaches for it.
405
+ *
406
+ * **It is anchored to the card's bottom edge, not to the preview's box.** It
407
+ * covers the name row as well as the lower picture, which is what lets the
408
+ * title stay in the same place when the panel arrives instead of jumping up
409
+ * into the thumbnail.
410
+ *
411
+ * **The state is the same dot the rest row shows**, in the same place at the
412
+ * end of the title. A chip here and a dot there would be two vocabularies for
413
+ * one fact. A caller whose state this card cannot read still gets its node
414
+ * rendered — see `statusDot`.
245
415
  *
246
- * Extracted to a variable rather than left inline because `previewRegion`
247
- * above is now shared with the row, and the row deliberately has no panel to
248
- * pass it. The alternative a boolean the region branches on would put the
249
- * decision in two places instead of one.
416
+ * **`headerActions` moved INTO it** (#196, and it supersedes only the
417
+ * PLACEMENT half of #176). The rule #176 exists for is that a control renders
418
+ * once and never twice; that is unchanged. What changed is which single place:
419
+ * the rest state no longer has a header row to put a save toggle in, and the
420
+ * panel's creator line has a right edge that is empty. They sit there, gated
421
+ * exactly like Dashboard is — invisible at rest means inert at rest (#171).
250
422
  */
251
- const revealPanel = revealed ? (_jsxs("div", { "data-slot": "entity-card-reveal", "data-cg-surface": "ink", className: cn("absolute inset-0 flex flex-col justify-end bg-scrim-strong text-ink",
252
- // The only thing compact changes about this panel is its
253
- // measurements. Same scrim, same ink surface, same two
254
- // foregrounds a panel that got smaller AND paler would be
255
- // trading contrast for space, which is the one thing the
423
+ const revealPanel = revealed ? (_jsxs("div", { "data-slot": "entity-card-reveal", "data-theme": "default", className: cn(
424
+ // inset-x-px / bottom-px, not inset-x-0: the card carries a 1px pad so
425
+ // its hairline is never painted over, and the panel's radius is the
426
+ // card's less that pixel. Same arithmetic as the preview above it, which
427
+ // is what keeps the two from disagreeing about a corner.
428
+ // bg-(--cg-surface-card), not `bg-card`: the shadcn bridge declares
429
+ // `--card` per surface too, and a bridged name is NOT re-declared by
430
+ // data-theme="default" — so `bg-card` here stays transparent inside a
431
+ // purple panel however the CloudGrid token resolves. Reading the
432
+ // --cg- token directly is what makes the attribute above work.
433
+ "absolute inset-x-px bottom-px flex flex-col justify-end rounded-[calc(var(--cg-radius-md)-1px)] bg-(--cg-surface-card) text-ink",
434
+ // The only thing compact changes about this panel is its measurements.
435
+ // Same ground, same two foregrounds — a panel that got smaller AND
436
+ // paler would be trading contrast for space, which is the one thing the
256
437
  // guardrail exists to stop.
257
438
  sized.reveal,
258
439
  // opacity-0, not hidden: the panel is in the tab order at all
@@ -261,13 +442,24 @@ function EntityCard({ title, slug, description, size = "default", titleLines = 2
261
442
  "opacity-0 transition-opacity duration-[var(--cg-duration)] ease-out", "group-hover/card:opacity-100 group-focus-within/card:opacity-100",
262
443
  // Reduced motion removes the FADE, not the panel. Someone who
263
444
  // has asked for less movement still needs the actions.
264
- "motion-reduce:transition-none"), children: [_jsx("span", { "data-slot": "entity-card-reveal-title", dir: "auto", className: cn("truncate font-medium", sized.revealTitle), children: title }), description ? (_jsx("p", { "data-slot": "entity-card-reveal-description", dir: "auto",
265
- // text-body, never text-faint. The secondary measures 6.18:1
266
- // on this scrim and the guardrail holds it there; the muted
267
- // rung measures 4.06:1, under AA, and is deliberately outside
268
- // that assertion because it is documented as non-essential
269
- // text. So there is no muted tier available on this panel.
270
- className: "m-0 truncate text-caption text-body", children: description })) : null, creator || status ? (_jsxs("div", { className: "flex min-w-0 items-center justify-between gap-2", children: [creator ? (_jsxs("span", { "data-slot": "entity-card-reveal-creator", className: "flex min-w-0 items-center gap-1.5 text-caption text-body", children: [creator.avatar ? (_jsx("span", { "aria-hidden": "true", className: "inline-flex size-4 shrink-0 overflow-hidden rounded-pill [&>*]:size-full", children: creator.avatar })) : null, _jsx("span", { className: "truncate", children: creator.name })] })) : (_jsx("span", {})), status ? _jsx("span", { className: "shrink-0", children: status }) : null] })) : null, _jsx("div", { className: "flex items-center gap-2 pt-0.5", children: actionPair })] })) : null;
445
+ "motion-reduce:transition-none"), children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsx("span", { "data-slot": "entity-card-reveal-title", dir: "auto", className: cn("min-w-0 flex-1 truncate font-medium text-ink", sized.revealTitle), children: title }), dot ? (_jsx("span", { "data-slot": "entity-card-reveal-state", className: "flex shrink-0 items-center", children: dot })) : (
446
+ // The fallback, and the only place a caller's own chip still lands on
447
+ // a card that reveals: better a chip in the panel than a state the
448
+ // card silently dropped.
449
+ status ?? null), _jsx("span", { className: "flex shrink-0 items-center gap-1", children: actionPair })] }), description ? (_jsx("p", { "data-slot": "entity-card-reveal-description", dir: "auto",
450
+ // text-body, the page's secondary rung: 7:1 on this white panel. The
451
+ // draft's own #828c98 measures 3.41:1 there, under the 4.5:1 AA floor
452
+ // for normal text, so the value is deliberately NOT adopted — see the
453
+ // note in the PR. The muted rung is 3.69:1 and is out for the same
454
+ // reason.
455
+ className: cn("m-0 text-caption text-body", size === "compact" ? "truncate" : "line-clamp-2"), children: description })) : null, !openLive && openDisabledReason ? (_jsx("p", { "data-slot": "entity-card-reveal-reason", dir: "auto", "aria-hidden": "true", className: "m-0 truncate text-caption text-body", children: openDisabledReason })) : null, creator || headerActions ? (_jsxs("div", { className: "flex min-w-0 items-center justify-between gap-2", children: [creator ? (_jsxs("span", { "data-slot": "entity-card-reveal-creator", className: "flex min-w-0 items-center gap-1 text-caption text-ink", children: [creator.avatar ? (_jsx("span", { "aria-hidden": "true", className: "inline-flex size-6 shrink-0 overflow-hidden rounded-pill [&>*]:size-full", children: creator.avatar })) : null, _jsx("span", { className: "truncate", children: creator.name })] })) : (_jsx("span", {})), headerActions ? (_jsx("div", { "data-slot": "entity-card-actions", className: cn(
456
+ // relative z-10 to sit above Open's stretched layer, so a tap on
457
+ // the save toggle reaches the toggle.
458
+ "relative z-10 flex shrink-0 items-center gap-1",
459
+ // And dead while the panel cannot be seen, which is Dashboard's
460
+ // rule and #171's: an invisible control that behaves differently
461
+ // from the pixels around it is a trap a reader cannot see.
462
+ "pointer-events-none group-hover/card:pointer-events-auto group-focus-within/card:pointer-events-auto"), children: headerActions })) : null] })) : null] })) : null;
271
463
  /**
272
464
  * THE ROW. The same card, running across instead of down.
273
465
  *
@@ -304,38 +496,54 @@ function EntityCard({ title, slug, description, size = "default", titleLines = 2
304
496
  * `stats` and `footer` are not rendered here — see the size note at the top.
305
497
  */
306
498
  if (size === "row") {
307
- return (_jsxs(Card, { "data-slot": "entity-card", "data-entity-size": "row", className: cn("relative flex-row items-center gap-3 p-(--card-spacing)", sized.cardSpacing, className), ...props, children: [previewRegion(
499
+ return (_jsxs(Card, { "data-slot": "entity-card", "data-entity-size": "row", className: cn(
500
+ // The same chrome the media card takes (#196): the hairline, the 12px
501
+ // corner and Elevation 1, in place of Card's own ring. A list and a
502
+ // grid of the same thing must not be two different objects.
503
+ "relative flex-row items-center gap-3 rounded-md border border-hairline p-(--card-spacing) shadow-card ring-0", sized.cardSpacing, className), ...props, children: [previewRegion(
308
504
  // A left thumbnail, so it rounds on all four corners rather than
309
- // sharing the card's top edge, and it carries a full hairline rather
310
- // than the media card's single bottom rule.
311
- cn("overflow-hidden rounded-lg border border-hairline", ROW_THUMBNAIL), "sm", null), _jsx("div", { className: cn("flex w-0 min-w-0 flex-1 flex-col", sized.body), children: children ?? (_jsxs(_Fragment, { children: [_jsxs("span", { dir: "auto", "data-slot": "entity-card-title", title: title, className: cn("block truncate font-medium text-ink", sized.title), children: [kind && !seed ? (_jsx(EntityKindBadge, { kind: kind, size: "sm", className: "mr-1.5 align-[-0.2em]" })) : null, title] }), slug ? (_jsx("span", { dir: "auto", "data-slot": "entity-card-slug", title: slug, className: "block truncate font-mono text-caption text-faint", children: slug })) : null, description ? (_jsx("p", { dir: "auto", "data-slot": "entity-card-description", title: description, className: cn("m-0 truncate text-body", sized.description), children: description })) : null, creator || meta ? (_jsxs("div", { className: "flex min-w-0 items-center gap-2 text-caption text-body", children: [creator ? (_jsxs("span", { "data-slot": "entity-card-creator", className: "flex min-w-0 items-center gap-1.5", children: [creator.avatar ? (_jsx("span", { "aria-hidden": "true", className: "inline-flex size-4 shrink-0 overflow-hidden rounded-pill [&>*]:size-full", children: creator.avatar })) : null, _jsx("span", { className: "truncate", children: creator.name })] })) : null, meta] })) : null] })) }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [status ? _jsx("span", { className: "shrink-0", children: status }) : null, headerActions ? (_jsx("div", { "data-slot": "entity-card-actions", className: "relative z-10 flex shrink-0 items-center gap-1", children: headerActions })) : null, href ? (_jsx("div", { "data-slot": "entity-card-row-actions", className: cn("flex shrink-0 items-center gap-2",
505
+ // sharing the card's top edge. Its own hairline is gone with the
506
+ // restyle: the card has one now, and two lines 3px apart read as a
507
+ // mistake.
508
+ cn("aspect-[159/92] overflow-hidden rounded-sm", ROW_THUMBNAIL), "sm"), _jsx("div", { className: cn("flex w-0 min-w-0 flex-1 flex-col", sized.body), children: children ?? (_jsxs(_Fragment, { children: [_jsxs("span", { dir: "auto", "data-slot": "entity-card-title", title: title, className: cn("block truncate font-medium text-ink", sized.title), children: [kind && !seed ? (_jsx(EntityKindBadge, { kind: kind, size: "sm", className: "mr-1.5 align-[-0.2em]" })) : null, title] }), slug ? (_jsx("span", { dir: "auto", "data-slot": "entity-card-slug", title: slug, className: "block truncate font-mono text-caption text-faint", children: slug })) : null, description ? (_jsx("p", { dir: "auto", "data-slot": "entity-card-description", title: description, className: cn("m-0 truncate text-body", sized.description), children: description })) : null, creator || meta ? (_jsxs("div", { className: "flex min-w-0 items-center gap-2 text-caption text-body", children: [creator ? (_jsxs("span", { "data-slot": "entity-card-creator", className: "flex min-w-0 items-center gap-1.5", children: [creator.avatar ? (_jsx("span", { "aria-hidden": "true", className: "inline-flex size-4 shrink-0 overflow-hidden rounded-pill [&>*]:size-full", children: creator.avatar })) : null, _jsx("span", { className: "truncate", children: creator.name })] })) : null, meta] })) : null] })) }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [status ? _jsx("span", { className: "shrink-0", children: status }) : null, headerActions ? (_jsx("div", { "data-slot": "entity-card-actions", className: "relative z-10 flex shrink-0 items-center gap-1", children: headerActions })) : null, _jsx("div", { "data-slot": "entity-card-row-actions", className: cn("flex shrink-0 items-center gap-2",
312
509
  // The row's whole hover behaviour, and all of it: the
313
510
  // information is already on screen, so what arrives is the two
314
511
  // actions and nothing else.
315
512
  "opacity-0 transition-opacity duration-[var(--cg-duration)] ease-out", "group-hover/card:opacity-100 group-focus-within/card:opacity-100",
316
513
  // Reduced motion removes the FADE, not the actions.
317
- "motion-reduce:transition-none"), children: actionPair })) : null] })] }));
514
+ "motion-reduce:transition-none"), children: actionPair })] })] }));
318
515
  }
319
- const card = (_jsxs(Card, { "data-slot": "entity-card", "data-entity-size": size,
320
- // gap-0 py-0: `Card` pads itself for a header/content/footer stack, and
321
- // this card's preview is full bleed to the top edge. The padding moves
322
- // inside, onto the body, so the preview can touch the corners.
323
- // No hover lift, shadow, scale or colour change, even when the whole card
324
- // is a link. That is the console's founder card spec (2026-08-16) carried
325
- // across rather than re-decided here, and it matches this system's own
326
- // canon: containment is a hairline, not elevation. The reveal panel is
327
- // this rule's one exception, and only on the media variant: see the note
328
- // at the top of this file.
516
+ const card = (_jsxs(Card, { "data-slot": "entity-card", "data-entity-size": size, className: cn(
517
+ // THE CHROME, to the founder's 2026-09-09 draft (#196): a white card at
518
+ // a 12px corner, a 1px hairline, Elevation 1, and a 1px pad so the
519
+ // picture inside sits at 11px and never paints over the line. `ring-0`
520
+ // because `Card` contains itself with a ring by default and a ring plus
521
+ // a border is two edges.
522
+ //
523
+ // The shadow is the one departure from "containment is a hairline, not
524
+ // elevation", and the page ground is why: on white a card had nothing
525
+ // but its own line, and at 4% over 16px this is a lift you read rather
526
+ // than see. There is still no hover lift, no scale and no colour change
527
+ // on the card itself.
528
+ //
529
+ // p-px and the gap from the size table: `Card` pads itself for a
530
+ // header/content/footer stack, and this card's preview is full bleed.
531
+ // The padding moves inside, onto the body or the name row, and the 12px
532
+ // between the picture and the name is the card's own gap — the draft's.
533
+ //
534
+ // relative, and it is load-bearing now: the panel is anchored to THIS
535
+ // element rather than to the preview (#196), and Open's stretched
536
+ // ::after sizes to the panel inside it.
537
+ "relative rounded-md border border-hairline p-px shadow-card ring-0", sized.body,
329
538
  // `h-full` only inside the link wrapper, where the card has to fill the
330
539
  // anchor. As a direct grid item it must NOT be h-full: a grid area has a
331
- // definite height, so height:100% pins the card to the tallest card in the
332
- // row even when the grid was told `items-start`.
333
- className: cn("gap-0 py-0", sized.cardSpacing, href && !revealed && "h-full", className), ...props, children: [previewRegion(
334
- // rounded-t-xl is the same --cg-radius-xl the card rounds to, and
335
- // overflow-hidden is what keeps the reveal panel inside it. The card
336
- // already clips; stating it here means the panel can never paint a
337
- // corner the card does not have.
338
- "overflow-hidden rounded-t-xl border-b border-hairline", "md", revealPanel), _jsx("div", { className: cn("flex min-h-0 flex-1 flex-col p-(--card-spacing)", sized.body), children: body })] }));
540
+ // definite height, so height:100% pins the card to the tallest card in
541
+ // the row even when the grid was told `items-start`.
542
+ href && !revealed && "h-full", sized.cardSpacing, className), ...props, children: [previewRegion(
543
+ // 159/92, the draft's ratio, and an 11px corner: the card's 12 less the
544
+ // 1px pad around it. Written as the arithmetic rather than as a second
545
+ // radius token, so the two can never drift apart.
546
+ "aspect-[159/92] overflow-hidden rounded-[calc(var(--cg-radius-md)-1px)]", "md"), children ? (_jsx("div", { className: cn("flex min-h-0 flex-1 flex-col p-(--card-spacing)", sized.body), children: children })) : minimal ? (nameRow) : (_jsx("div", { className: cn("flex min-h-0 flex-1 flex-col p-(--card-spacing)", sized.body), children: fullBody })), revealPanel] }));
339
547
  // A revealed card is never wrapped: the panel's Open action is already an
340
548
  // anchor, and an anchor inside an anchor is invalid HTML that browsers repair
341
549
  // by closing the outer one.
@@ -1 +1 @@
1
- {"version":3,"file":"entity-card.js","sourceRoot":"","sources":["../../src/blocks/entity-card.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity-card.js","sourceRoot":"","sources":["../../src/blocks/entity-card.tsx"],"names":[],"mappings":"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"}