@cloudgrid-io/ui 0.22.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,23 +176,62 @@ 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, openDisabledReason, 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
236
  // The reveal owns the preview, so `seed` is what it needs and all it needs: a
170
237
  // panel over nothing is not a panel. It deliberately does NOT ask for an
@@ -197,6 +264,19 @@ function EntityCard({ title, slug, description, size = "default", titleLines = 2
197
264
  // One line on compact and on row, whatever the caller asked for. See the note
198
265
  // on the prop: this is a height rule, not a preference.
199
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;
200
280
  /**
201
281
  * THE TWO ACTIONS. One pair, written once, used by the reveal panel and by the
202
282
  * row alike — because #182's premise is that every entity card offers the same
@@ -235,61 +315,125 @@ function EntityCard({ title, slug, description, size = "default", titleLines = 2
235
315
  * above the overlay: a control that reads as disabled has to be inert when it
236
316
  * is tapped, not a second way to reach Dashboard.
237
317
  */
238
- const actionPair = (_jsxs(_Fragment, { children: [openLive ? (_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"] })) : (_jsxs("a", { "data-slot": "entity-card-open", "data-disabled": "true", role: "link", "aria-disabled": "true",
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",
239
325
  // opacity-50 and a not-allowed cursor: this library's own disabled
240
326
  // convention, and the one every other block here uses. It takes the
241
- // label under the panel's AA floor on purpose — WCAG 1.4.3 exempts an
327
+ // mark under the panel's AA floor on purpose — WCAG 1.4.3 exempts an
242
328
  // inactive control, and a disabled action that reads at full strength
243
329
  // is the failure this state exists to prevent.
244
330
  //
245
- // relative z-10 so a tap on the pill lands on the pill. With Open
331
+ // relative z-10 so a tap on the mark lands on the mark. With Open
246
332
  // disabled the panel's stretched layer is Dashboard's, and it covers
247
333
  // this pill along with everything else.
248
- className: "relative z-10 inline-flex cursor-not-allowed items-center gap-1 rounded-pill border border-hairline px-2 py-1 text-caption no-underline opacity-50", children: [_jsx(OpenLiveIcon, { className: "size-3.5" }), "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 items-center gap-1 rounded-pill border border-hairline px-2 py-1 text-caption no-underline focus-visible:ring-3 focus-visible:ring-ring focus-visible:outline-none", openLive
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
249
335
  ? // Lifted above Open's overlay, and therefore dead until the panel
250
336
  // can be seen (#171).
251
337
  "pointer-events-none relative group-hover/card:pointer-events-auto group-focus-within/card:pointer-events-auto"
252
338
  : // Open is disabled, so this is the card's one door: it takes
253
339
  // Open's hit model wholesale — unpositioned, stretched, never
254
340
  // gated, which is what makes it work on a phone.
255
- "after:absolute after:inset-0 after:content-['']"), children: [_jsx(EntityDashboardIcon, { className: "size-3.5" }), "Dashboard"] })) : null] }));
256
- const body = children ??
257
- (_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",
258
- // items-center against the title's first line, and -mt-1 to pull an
259
- // icon button's own padding back so the glyph optically lines up
260
- // with the title rather than sitting a couple of pixels low.
261
- 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] }));
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).
348
+ */
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] }));
262
367
  /**
263
368
  * The preview region, shared by all three sizes.
264
369
  *
265
- * A function rather than a second copy, because the two things that differ
266
- * between the stacked sizes and the row are its shape and whether a panel goes
267
- * over it. Everything that is easy to get wrong — the capture painting over
268
- * the identity rather than instead of it, the badge sitting after the panel so
269
- * the scrim does not smudge it, the badge not eating a click meant for the
270
- * 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.
271
379
  */
272
- 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",
273
381
  // A background image, not an <img>: a URL that 404s paints nothing
274
382
  // and the identity tile below shows through, with no state and no
275
383
  // client boundary. The URL goes out exactly as the caller wrote it —
276
384
  // `cssUrlString` escapes only the quote and backslash that would
277
385
  // break out of url("..."), and never re-encodes an already-encoded
278
386
  // URL (ui#178).
279
- 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;
280
388
  /**
281
- * 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`.
282
415
  *
283
- * Extracted to a variable rather than left inline because `previewRegion`
284
- * above is now shared with the row, and the row deliberately has no panel to
285
- * pass it. The alternative a boolean the region branches on would put the
286
- * 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).
287
422
  */
288
- 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",
289
- // The only thing compact changes about this panel is its
290
- // measurements. Same scrim, same ink surface, same two
291
- // foregrounds a panel that got smaller AND paler would be
292
- // 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
293
437
  // guardrail exists to stop.
294
438
  sized.reveal,
295
439
  // opacity-0, not hidden: the panel is in the tab order at all
@@ -298,18 +442,24 @@ function EntityCard({ title, slug, description, size = "default", titleLines = 2
298
442
  "opacity-0 transition-opacity duration-[var(--cg-duration)] ease-out", "group-hover/card:opacity-100 group-focus-within/card:opacity-100",
299
443
  // Reduced motion removes the FADE, not the panel. Someone who
300
444
  // has asked for less movement still needs the actions.
301
- "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",
302
- // text-body, never text-faint. The secondary measures 6.18:1
303
- // on this scrim and the guardrail holds it there; the muted
304
- // rung measures 4.06:1, under AA, and is deliberately outside
305
- // that assertion because it is documented as non-essential
306
- // text. So there is no muted tier available on this panel.
307
- 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, !openLive && openDisabledReason ? (_jsx("p", { "data-slot": "entity-card-reveal-reason", dir: "auto", "aria-hidden": "true",
308
- // text-body, never text-faint. Same rung as the description above and
309
- // for the same measured reason: the muted tier is 4.06:1 on this
310
- // scrim, under AA, and this line is the one thing on the panel a
311
- // reader most needs to be able to read.
312
- className: "m-0 truncate text-caption text-body", children: openDisabledReason })) : 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;
313
463
  /**
314
464
  * THE ROW. The same card, running across instead of down.
315
465
  *
@@ -346,11 +496,16 @@ function EntityCard({ title, slug, description, size = "default", titleLines = 2
346
496
  * `stats` and `footer` are not rendered here — see the size note at the top.
347
497
  */
348
498
  if (size === "row") {
349
- 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(
350
504
  // A left thumbnail, so it rounds on all four corners rather than
351
- // sharing the card's top edge, and it carries a full hairline rather
352
- // than the media card's single bottom rule.
353
- 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, _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",
354
509
  // The row's whole hover behaviour, and all of it: the
355
510
  // information is already on screen, so what arrives is the two
356
511
  // actions and nothing else.
@@ -358,26 +513,37 @@ function EntityCard({ title, slug, description, size = "default", titleLines = 2
358
513
  // Reduced motion removes the FADE, not the actions.
359
514
  "motion-reduce:transition-none"), children: actionPair })] })] }));
360
515
  }
361
- const card = (_jsxs(Card, { "data-slot": "entity-card", "data-entity-size": size,
362
- // gap-0 py-0: `Card` pads itself for a header/content/footer stack, and
363
- // this card's preview is full bleed to the top edge. The padding moves
364
- // inside, onto the body, so the preview can touch the corners.
365
- // No hover lift, shadow, scale or colour change, even when the whole card
366
- // is a link. That is the console's founder card spec (2026-08-16) carried
367
- // across rather than re-decided here, and it matches this system's own
368
- // canon: containment is a hairline, not elevation. The reveal panel is
369
- // this rule's one exception, and only on the media variant: see the note
370
- // 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,
371
538
  // `h-full` only inside the link wrapper, where the card has to fill the
372
539
  // anchor. As a direct grid item it must NOT be h-full: a grid area has a
373
- // definite height, so height:100% pins the card to the tallest card in the
374
- // row even when the grid was told `items-start`.
375
- className: cn("gap-0 py-0", sized.cardSpacing, href && !revealed && "h-full", className), ...props, children: [previewRegion(
376
- // rounded-t-xl is the same --cg-radius-xl the card rounds to, and
377
- // overflow-hidden is what keeps the reveal panel inside it. The card
378
- // already clips; stating it here means the panel can never paint a
379
- // corner the card does not have.
380
- "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] }));
381
547
  // A revealed card is never wrapped: the panel's Open action is already an
382
548
  // anchor, and an anchor inside an anchor is invalid HTML that browsers repair
383
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":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAE1E,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,YAAY,GACb,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAA;AA+UvC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,CAAU,CAAA;AAIzE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAoE;IAC/F,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,mBAAmB;IAChC,GAAG,EAAE,WAAW;CACjB,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA+B;IAC3D,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,aAAa;IAC1B,GAAG,EAAE,KAAK;CACX,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA+B;IAC1D,KAAK,EAAE,eAAe;IACtB,WAAW,EAAE,qBAAqB;IAClC,GAAG,EAAE,aAAa;CACnB,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAU,CAAA;AAI5E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,GAeZ;IACF,OAAO,EAAE;QACP,WAAW,EAAE,EAAE;QACf,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,cAAc;QAC3B,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,2BAA2B;QACpC,MAAM,EAAE,qCAAqC;QAC7C,WAAW,EAAE,cAAc;KAC5B;IACD,OAAO,EAAE;QACP,WAAW,EAAE,+BAA+B;QAC5C,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,cAAc;QAC3B,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,mBAAmB;QAC5B,MAAM,EAAE,sBAAsB;QAC9B,WAAW,EAAE,cAAc;KAC5B;IACD,GAAG,EAAE;QACH,WAAW,EAAE,+BAA+B;QAC5C,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,cAAc;QAC3B,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,WAAW,EAAE,EAAE;KAChB;CACF,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,aAAa,GAAG,MAAM,CAAA;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE;QACvC,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,MAAM,CAAA;QAC7B,IAAI,CAAC,KAAK,GAAG;YAAE,OAAO,KAAK,CAAA;QAC3B,yEAAyE;QACzE,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAA;IAC7C,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,SAAS,eAAe,CAAC,EACvB,IAAI,EACJ,IAAI,GAAG,IAAI,EACX,SAAS,EACT,GAAG,KAAK,EAIT;IACC,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IAEnC,OAAO,CACL,6BACY,kBAAkB,eACjB,IAAI,EACf,SAAS,EAAE,EAAE,CACX,yFAAyF,EACzF,gBAAgB,CAAC,IAAI,CAAC,EACtB,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EACnC,SAAS,CACV,KACG,KAAK,aAKT,KAAC,IAAI,IAAC,SAAS,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAI,EAKxD,eAAM,SAAS,EAAC,SAAS,YAAE,iBAAiB,CAAC,IAAI,CAAC,GAAQ,IACrD,CACR,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,aAAa,CAAC,MAAuB;IAC5C,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAA;IAC9C,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,IAAI,CAAA;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAA+D,CAAA;IACpF,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAC9B,OAAO,KAAC,cAAc,IAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAI,CAAA;AACrE,CAAC;AAED,SAAS,UAAU,CAAC,EAClB,KAAK,EACL,IAAI,EACJ,WAAW,EACX,IAAI,GAAG,SAAS,EAChB,UAAU,GAAG,CAAC,EACd,gBAAgB,GAAG,CAAC,EACpB,MAAM,EACN,SAAS,EACT,aAAa,EACb,KAAK,EACL,IAAI,EACJ,UAAU,EACV,IAAI,EACJ,MAAM,GAAG,KAAK,EACd,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,OAAO,EACP,IAAI,EACJ,SAAS,EACT,IAAI,EACJ,MAAM,EACN,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EA4IT;IACC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;IAE9B,8EAA8E;IAC9E,yEAAyE;IACzE,6EAA6E;IAC7E,4EAA4E;IAC5E,EAAE;IACF,+EAA+E;IAC/E,8EAA8E;IAC9E,+EAA+E;IAC/E,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,KAAK,CAAA;IAE1D,yEAAyE;IACzE,8EAA8E;IAC9E,iEAAiE;IACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE9B,4EAA4E;IAC5E,8EAA8E;IAC9E,8EAA8E;IAC9E,4EAA4E;IAC5E,4EAA4E;IAC5E,+EAA+E;IAC/E,sCAAsC;IACtC,MAAM,eAAe,GAAG,aAAa,IAAI,YAAY,CAAA;IAErD,4EAA4E;IAC5E,+EAA+E;IAC/E,wEAAwE;IACxE,6EAA6E;IAC7E,sDAAsD;IACtD,MAAM,UAAU,GAAG,KAAK,IAAI,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAE1E,8EAA8E;IAC9E,wDAAwD;IACxD,MAAM,gBAAgB,GACpB,IAAI,KAAK,SAAS,IAAI,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAA;IAE5E,8EAA8E;IAC9E,yEAAyE;IACzE,MAAM,GAAG,GAAG,SAAS,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;IAE9C,4EAA4E;IAC5E,6EAA6E;IAC7E,8EAA8E;IAC9E,yDAAyD;IACzD,EAAE;IACF,4EAA4E;IAC5E,6EAA6E;IAC7E,+EAA+E;IAC/E,sCAAsC;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAA;IAExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqCG;IACH,MAAM,UAAU,GAAG,CACjB,8BACG,QAAQ,CAAC,CAAC,CAAC,CACV,aACE,IAAI,EAAE,IAAI,eACA,kBAAkB;gBAC5B,oEAAoE;gBACpE,qEAAqE;gBACrE,kEAAkE;gBAClE,oEAAoE;gBACpE,iDAAiD;gBACjD,SAAS,EAAC,oNAAoN,aAE9N,KAAC,YAAY,IAAC,SAAS,EAAC,QAAQ,GAAG,EACnC,eAAM,SAAS,EAAC,SAAS,qBAAY,IACnC,CACL,CAAC,CAAC,CAAC,CACF,0BAUY,kBAAkB,mBACd,MAAM,EACpB,IAAI,EAAC,MAAM,mBACG,MAAM;gBACpB,mEAAmE;gBACnE,oEAAoE;gBACpE,qEAAqE;gBACrE,sEAAsE;gBACtE,+CAA+C;gBAC/C,EAAE;gBACF,kEAAkE;gBAClE,qEAAqE;gBACrE,wCAAwC;gBACxC,SAAS,EAAC,wIAAwI,aAElJ,KAAC,YAAY,IAAC,SAAS,EAAC,QAAQ,GAAG,EACnC,eAAM,SAAS,EAAC,SAAS,qBAAY,EAMpC,kBAAkB,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,SAAS,YAAE,kBAAkB,GAAQ,CAAC,CAAC,CAAC,IAAI,IAChF,CACL,EACA,eAAe,CAAC,CAAC,CAAC,CACjB,aACE,IAAI,EAAE,eAAe,eACX,uBAAuB,oBAIjB,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAC7C,SAAS,EAAE,EAAE,CACX,oKAAoK,EACpK,QAAQ;oBACN,CAAC,CAAC,kEAAkE;wBAClE,sBAAsB;wBACtB,+GAA+G;oBACjH,CAAC,CAAC,6DAA6D;wBAC7D,8DAA8D;wBAC9D,iDAAiD;wBACjD,iDAAiD,CACtD,aAKD,KAAC,mBAAmB,IAAC,SAAS,EAAC,QAAQ,GAAG,EAC1C,eAAM,SAAS,EAAC,SAAS,0BAAiB,IACxC,CACL,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,CAAA;IAED;;;;;;OAMG;IACH,MAAM,QAAQ,GAAG,CACb,8BACE,eAAK,SAAS,EAAC,wCAAwC,aACrD,eAAK,SAAS,EAAC,gBAAgB,aAC7B,gBACE,GAAG,EAAC,MAAM,eACA,mBAAmB,EAC7B,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,EAAE,CACX,wCAAwC,EACxC,KAAK,CAAC,KAAK,EACX,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAC/C,aAMA,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CACf,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,uBAAuB,GAAG,CAC5E,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,IACD,EACN,IAAI,CAAC,CAAC,CAAC,CACN,eACE,GAAG,EAAC,MAAM,eACA,kBAAkB,EAC5B,KAAK,EAAE,IAAI,EACX,SAAS,EAAC,yDAAyD,YAElE,IAAI,GACA,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,EACL,MAAM,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,UAAU,YAAE,MAAM,GAAO,CAAC,CAAC,CAAC,IAAI,EAKxD,aAAa,CAAC,CAAC,CAAC,CACf,2BACY,qBAAqB;wBAC/B,oEAAoE;wBACpE,iEAAiE;wBACjE,6DAA6D;wBAC7D,SAAS,EAAC,wCAAwC,YAEjD,aAAa,GACV,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,EAEL,WAAW,CAAC,CAAC,CAAC,CACb,YACE,GAAG,EAAC,MAAM,eACA,yBAAyB,EACnC,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,KAAK,CAAC,WAAW,EAAE,gBAAgB,CAAC,YAElE,WAAW,GACV,CACL,CAAC,CAAC,CAAC,IAAI,EAEP,IAAI,EAKL,6BAAiB,MAAM,EAAC,SAAS,EAAC,MAAM,GAAG,EAE1C,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACrC,2BACY,mBAAmB,EAC7B,SAAS,EAAE,EAAE,CACX,6EAA6E,EAC7E,KAAK,CAAC,KAAK,CACZ,YAEA,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACxB,gBAAuB,SAAS,EAAC,kCAAkC,aAChE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CACX,8BAAkB,MAAM,EAAC,SAAS,EAAC,4BAA4B,YAC5D,IAAI,CAAC,IAAI,GACL,CACR,CAAC,CAAC,CAAC,IAAI,EACP,IAAI,CAAC,KAAK,EAKX,eAAM,SAAS,EAAC,SAAS,YAAE,IAAI,CAAC,KAAK,GAAQ,KAXpC,IAAI,CAAC,KAAK,CAYd,CACR,CAAC,GACE,CACP,CAAC,CAAC,CAAC,IAAI,EAEP,MAAM,IACN,CACJ,CAAA;IAEH;;;;;;;;;;;OAWG;IACH,MAAM,OAAO,GAAG,CACd,eAAK,SAAS,EAAE,EAAE,CAAC,kCAAkC,EAAE,KAAK,CAAC,OAAO,CAAC,aACnE,eACE,GAAG,EAAC,MAAM,eACA,mBAAmB,EAC7B,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,EAAE,CAAC,8CAA8C,EAAE,KAAK,CAAC,KAAK,CAAC,YAEzE,KAAK,GACD,EAKN,GAAG,CAAC,CAAC,CAAC,CACL,4BAAgB,mBAAmB,EAAC,SAAS,EAAC,4BAA4B,YACvE,GAAG,GACC,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAA;IAED;;;;;;;;;;;;OAYG;IACH,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,SAAsB,EAAE,EAAE,CAC9D,IAAI,CAAC,CAAC,CAAC,CACL,4BAAe,qBAAqB,EAAC,SAAS,EAAE,EAAE,CAAC,mBAAmB,EAAE,KAAK,CAAC,aAC5E,KAAC,cAAc,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,GAAI,EAC1C,UAAU,CAAC,CAAC,CAAC,CACZ,2BACY,qBAAqB,iBACnB,MAAM,EAClB,SAAS,EAAC,qCAAqC;gBAC/C,mEAAmE;gBACnE,kEAAkE;gBAClE,qEAAqE;gBACrE,iEAAiE;gBACjE,mEAAmE;gBACnE,gBAAgB;gBAChB,KAAK,EAAE,EAAE,eAAe,EAAE,QAAQ,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,GAChE,CACH,CAAC,CAAC,CAAC,IAAI,EASP,IAAI,CAAC,CAAC,CAAC,CACN,KAAC,eAAe,IACd,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,EAAE,CACX,8BAA8B,EAC9B,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,eAAe,CAC/D,GACD,CACH,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC,CAAC,CAAC,IAAI,CAAA;IAEV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAC7B,4BACY,oBAAoB,gBAanB,SAAS,EACpB,SAAS,EAAE,EAAE;QACX,uEAAuE;QACvE,oEAAoE;QACpE,yEAAyE;QACzE,yDAAyD;QACzD,oEAAoE;QACpE,qEAAqE;QACrE,sEAAsE;QACtE,iEAAiE;QACjE,+DAA+D;QAC/D,iIAAiI;QACjI,uEAAuE;QACvE,mEAAmE;QACnE,wEAAwE;QACxE,4BAA4B;QAC5B,KAAK,CAAC,MAAM;QACZ,8DAA8D;QAC9D,8DAA8D;QAC9D,kDAAkD;QAClD,qEAAqE,EACrE,kEAAkE;QAClE,8DAA8D;QAC9D,uDAAuD;QACvD,+BAA+B,CAChC,aAKD,eAAK,SAAS,EAAC,iCAAiC,aAC9C,4BACY,0BAA0B,EACpC,GAAG,EAAC,MAAM,EACV,SAAS,EAAE,EAAE,CAAC,8CAA8C,EAAE,KAAK,CAAC,WAAW,CAAC,YAE/E,KAAK,GACD,EACN,GAAG,CAAC,CAAC,CAAC,CACL,4BAAgB,0BAA0B,EAAC,SAAS,EAAC,4BAA4B,YAC9E,GAAG,GACC,CACR,CAAC,CAAC,CAAC;oBACF,sEAAsE;oBACtE,mEAAmE;oBACnE,yBAAyB;oBACzB,MAAM,IAAI,IAAI,CACf,EACD,eAAM,SAAS,EAAC,kCAAkC,YAAE,UAAU,GAAQ,IAClE,EAEL,WAAW,CAAC,CAAC,CAAC,CACb,yBACY,gCAAgC,EAC1C,GAAG,EAAC,MAAM;gBACV,qEAAqE;gBACrE,sEAAsE;gBACtE,sEAAsE;gBACtE,mEAAmE;gBACnE,UAAU;gBACV,SAAS,EAAE,EAAE,CAAC,4BAA4B,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,YAE5F,WAAW,GACV,CACL,CAAC,CAAC,CAAC,IAAI,EAWP,CAAC,QAAQ,IAAI,kBAAkB,CAAC,CAAC,CAAC,CACjC,yBACY,2BAA2B,EACrC,GAAG,EAAC,MAAM,iBACE,MAAM,EAClB,SAAS,EAAC,qCAAqC,YAE9C,kBAAkB,GACjB,CACL,CAAC,CAAC,CAAC,IAAI,EAGP,OAAO,IAAI,aAAa,CAAC,CAAC,CAAC,CAC1B,eAAK,SAAS,EAAC,iDAAiD,aAC7D,OAAO,CAAC,CAAC,CAAC,CACT,6BACY,4BAA4B,EACtC,SAAS,EAAC,uDAAuD,aAEhE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAChB,8BACc,MAAM,EAClB,SAAS,EAAC,0EAA0E,YAEnF,OAAO,CAAC,MAAM,GACV,CACR,CAAC,CAAC,CAAC,IAAI,EACR,eAAM,SAAS,EAAC,UAAU,YAAE,OAAO,CAAC,IAAI,GAAQ,IAC3C,CACR,CAAC,CAAC,CAAC,CACF,gBAAQ,CACT,EACA,aAAa,CAAC,CAAC,CAAC,CACf,2BACY,qBAAqB,EAC/B,SAAS,EAAE,EAAE;wBACX,iEAAiE;wBACjE,sCAAsC;wBACtC,gDAAgD;wBAChD,gEAAgE;wBAChE,iEAAiE;wBACjE,2DAA2D;wBAC3D,sGAAsG,CACvG,YAEA,aAAa,GACV,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC,CAAC,CAAC,IAAI,CAAA;IAER;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,OAAO,CACL,MAAC,IAAI,iBACO,aAAa,sBACN,KAAK,EACtB,SAAS,EAAE,EAAE;YACX,sEAAsE;YACtE,oEAAoE;YACpE,4DAA4D;YAC5D,8GAA8G,EAC9G,KAAK,CAAC,WAAW,EACjB,SAAS,CACV,KACG,KAAK,aAER,aAAa;gBACZ,iEAAiE;gBACjE,iEAAiE;gBACjE,mEAAmE;gBACnE,WAAW;gBACX,EAAE,CAAC,4CAA4C,EAAE,aAAa,CAAC,EAC/D,IAAI,CACL,EAwBD,cAAK,SAAS,EAAE,EAAE,CAAC,kCAAkC,EAAE,KAAK,CAAC,IAAI,CAAC,YAC/D,QAAQ,IAAI,CACX,8BACE,gBACE,GAAG,EAAC,MAAM,eACA,mBAAmB,EAC7B,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,EAAE,CAAC,qCAAqC,EAAE,KAAK,CAAC,KAAK,CAAC,aAIhE,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CACf,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAC,IAAI,EAAC,SAAS,EAAC,uBAAuB,GAAG,CAC5E,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,IACD,EAEN,IAAI,CAAC,CAAC,CAAC,CACN,eACE,GAAG,EAAC,MAAM,eACA,kBAAkB,EAC5B,KAAK,EAAE,IAAI,EACX,SAAS,EAAC,kDAAkD,YAE3D,IAAI,GACA,CACR,CAAC,CAAC,CAAC,IAAI,EAEP,WAAW,CAAC,CAAC,CAAC,CACb,YACE,GAAG,EAAC,MAAM,eACA,yBAAyB,EACnC,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,EAAE,CAAC,wBAAwB,EAAE,KAAK,CAAC,WAAW,CAAC,YAEzD,WAAW,GACV,CACL,CAAC,CAAC,CAAC,IAAI,EAEP,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CACjB,eAAK,SAAS,EAAC,wDAAwD,aACpE,OAAO,CAAC,CAAC,CAAC,CACT,6BACY,qBAAqB,EAC/B,SAAS,EAAC,mCAAmC,aAE5C,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAChB,8BACc,MAAM,EAClB,SAAS,EAAC,0EAA0E,YAEnF,OAAO,CAAC,MAAM,GACV,CACR,CAAC,CAAC,CAAC,IAAI,EACR,eAAM,SAAS,EAAC,UAAU,YAAE,OAAO,CAAC,IAAI,GAAQ,IAC3C,CACR,CAAC,CAAC,CAAC,IAAI,EACP,IAAI,IACD,CACP,CAAC,CAAC,CAAC,IAAI,IACP,CACJ,GACG,EAEN,eAAK,SAAS,EAAC,kCAAkC,aAC9C,MAAM,CAAC,CAAC,CAAC,eAAM,SAAS,EAAC,UAAU,YAAE,MAAM,GAAQ,CAAC,CAAC,CAAC,IAAI,EAC1D,aAAa,CAAC,CAAC,CAAC,CACf,2BACY,qBAAqB,EAC/B,SAAS,EAAC,gDAAgD,YAEzD,aAAa,GACV,CACP,CAAC,CAAC,CAAC,IAAI,EAQR,2BACY,yBAAyB,EACnC,SAAS,EAAE,EAAE,CACX,kCAAkC;4BAClC,sDAAsD;4BACtD,+DAA+D;4BAC/D,4BAA4B;4BAC5B,qEAAqE,EACrE,kEAAkE;4BAClE,oDAAoD;4BACpD,+BAA+B,CAChC,YAEA,UAAU,GACP,IACF,IACD,CACR,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAG,CACX,MAAC,IAAI,iBACO,aAAa,sBAOL,IAAI,EACtB,SAAS,EAAE,EAAE;QACX,wEAAwE;QACxE,mEAAmE;QACnE,uEAAuE;QACvE,wEAAwE;QACxE,yBAAyB;QACzB,EAAE;QACF,uEAAuE;QACvE,sEAAsE;QACtE,uEAAuE;QACvE,wEAAwE;QACxE,sBAAsB;QACtB,EAAE;QACF,iEAAiE;QACjE,sEAAsE;QACtE,wEAAwE;QACxE,wEAAwE;QACxE,EAAE;QACF,sEAAsE;QACtE,kEAAkE;QAClE,wCAAwC;QACxC,oEAAoE,EACpE,KAAK,CAAC,IAAI;QACV,wEAAwE;QACxE,yEAAyE;QACzE,uEAAuE;QACvE,qDAAqD;QACrD,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAC7B,KAAK,CAAC,WAAW,EACjB,SAAS,CACV,KACG,KAAK,aAER,aAAa;YACZ,wEAAwE;YACxE,uEAAuE;YACvE,kDAAkD;YAClD,yEAAyE,EACzE,IAAI,CACL,EAIA,QAAQ,CAAC,CAAC,CAAC,CACV,cAAK,SAAS,EAAE,EAAE,CAAC,iDAAiD,EAAE,KAAK,CAAC,IAAI,CAAC,YAC9E,QAAQ,GACL,CACP,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CACZ,OAAO,CACR,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAE,EAAE,CAAC,iDAAiD,EAAE,KAAK,CAAC,IAAI,CAAC,YAC9E,QAAQ,GACL,CACP,EAEA,WAAW,IACP,CACR,CAAA;IAED,0EAA0E;IAC1E,8EAA8E;IAC9E,4BAA4B;IAC5B,IAAI,CAAC,IAAI,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAA;IAElC,OAAO,CACL,YACE,IAAI,EAAE,IAAI,gBACE,SAAS,IAAI,KAAK;QAC9B,wEAAwE;QACxE,yEAAyE;QACzE,gEAAgE;QAChE,SAAS,EAAC,6GAA6G,YAEtH,IAAI,GACH,CACL,CAAA;AACH,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,CAAA"}
@@ -101,5 +101,36 @@ declare function EntityStatus({ status, label, className, ...props }: Omit<React
101
101
  /** Overrides the default word. The word always renders; there is no dot-only form. */
102
102
  label?: React.ReactNode;
103
103
  }): import("react").JSX.Element;
104
- export { EntityStatus };
104
+ /**
105
+ * THE SAME STATE, AS A DOT. No chip, no word on screen (#196).
106
+ *
107
+ * The founder's 2026-09-09 draft puts a 10px dot at the end of an entity card's
108
+ * name row and nothing else: at rest a card carries its picture, its name and
109
+ * its state, and a chip's ground, hairline and word are three more things
110
+ * competing with the picture for a reader's attention.
111
+ *
112
+ * Three things about it.
113
+ *
114
+ * **The word is still there, and it is the whole reason this is a component
115
+ * rather than a `<span className="size-2.5 bg-online" />` in the card.** Colour
116
+ * alone conveys nothing to a screen reader and nothing to a reader who cannot
117
+ * separate the hues, so the state rides along as `sr-only` text. WCAG 1.4.1: a
118
+ * dot is a supplementary indicator, never the only carrier.
119
+ *
120
+ * **The tone table is `EntityStatus`'s, unchanged.** Ten statuses, six tones,
121
+ * one mapping — a second table would be a second vocabulary, and the two would
122
+ * drift the first time a status was added.
123
+ *
124
+ * **An offline state still gets a dot.** The draft draws green and draws nothing
125
+ * else, and this deliberately does not follow it there: the platform's own rule
126
+ * is that state is signalled with an indicator rather than by disappearing, and
127
+ * a card with no dot is indistinguishable from a card whose state nobody
128
+ * passed. Grey is a state; absent is a gap.
129
+ */
130
+ declare function EntityStateDot({ status, label, className, ...props }: Omit<React.ComponentProps<"span">, "children"> & {
131
+ status: EntityStatusName;
132
+ /** Overrides the announced word. There is no visible word to override. */
133
+ label?: React.ReactNode;
134
+ }): import("react").JSX.Element;
135
+ export { EntityStatus, EntityStateDot };
105
136
  //# sourceMappingURL=entity-status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity-status.d.ts","sourceRoot":"","sources":["../../src/blocks/entity-status.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,qHAWtB,CAAA;AAEV,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnE,kEAAkE;AAClE,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,WAAW,GACX,SAAS,GACT,SAAS,GACT,SAAS,GACT,QAAQ,CAAA;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,gBAAgB,CAWzE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAehE,CAAA;AAmBD,iBAAS,YAAY,CAAC,EACpB,MAAM,EACN,KAAK,EACL,SAAS,EACT,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG;IAClD,MAAM,EAAE,gBAAgB,CAAA;IACxB,sFAAsF;IACtF,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACxB,+BAqCA;AAED,OAAO,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"entity-status.d.ts","sourceRoot":"","sources":["../../src/blocks/entity-status.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,qHAWtB,CAAA;AAEV,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAA;AAEnE,kEAAkE;AAClE,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,WAAW,GACX,SAAS,GACT,SAAS,GACT,SAAS,GACT,QAAQ,CAAA;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,gBAAgB,CAWzE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAehE,CAAA;AAmBD,iBAAS,YAAY,CAAC,EACpB,MAAM,EACN,KAAK,EACL,SAAS,EACT,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG;IAClD,MAAM,EAAE,gBAAgB,CAAA;IACxB,sFAAsF;IACtF,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACxB,+BAqCA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,iBAAS,cAAc,CAAC,EACtB,MAAM,EACN,KAAK,EACL,SAAS,EACT,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG;IAClD,MAAM,EAAE,gBAAgB,CAAA;IACxB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACxB,+BAwBA;AAED,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,CAAA"}