@usableapp/cardds 0.7.74 → 0.7.75

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.
Files changed (45) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +9 -9
  3. package/css/layover.css +1 -1
  4. package/css/lists.css +1 -1
  5. package/dist/actions/{ActionNote.d.ts → BarNote.d.ts} +3 -3
  6. package/dist/actions/{ActionNote.js → BarNote.js} +2 -2
  7. package/dist/actions/BtnGroup.d.ts +11 -0
  8. package/dist/actions/{Segment.js → BtnGroup.js} +4 -4
  9. package/dist/actions/{WaitLink.d.ts → Countdown.d.ts} +3 -3
  10. package/dist/actions/{WaitLink.js → Countdown.js} +2 -2
  11. package/dist/actions/Link.d.ts +2 -2
  12. package/dist/cardds.css +2 -2
  13. package/dist/cards/Card.d.ts +1 -1
  14. package/dist/cards/CardParts.d.ts +1 -1
  15. package/dist/cards/CardParts.js +1 -1
  16. package/dist/catalog.json +1 -1
  17. package/dist/index.d.ts +7 -7
  18. package/dist/index.js +7 -7
  19. package/dist/journey/{TileBadge.d.ts → JourneyBadge.d.ts} +3 -3
  20. package/dist/journey/{TileBadge.js → JourneyBadge.js} +2 -2
  21. package/dist/numbers/NumberBand.d.ts +18 -0
  22. package/dist/numbers/{Band.js → NumberBand.js} +4 -4
  23. package/dist/scaffold/ActionBar.d.ts +2 -2
  24. package/dist/scaffold/ActionBar.js +1 -1
  25. package/dist/scaffold/Centre.d.ts +3 -3
  26. package/dist/scaffold/Centre.js +3 -3
  27. package/dist/scaffold/Page.d.ts +1 -1
  28. package/dist/scaffold/Page.js +1 -1
  29. package/dist/scaffold/Pager.d.ts +11 -0
  30. package/dist/scaffold/Pager.js +6 -0
  31. package/dist/scaffold/Panes.d.ts +2 -2
  32. package/dist/scaffold/Panes.js +3 -3
  33. package/dist/scaffold/Screen.d.ts +1 -1
  34. package/dist/scaffold/Screen.js +1 -1
  35. package/dist/sheets/{Drawer.d.ts → Modal.d.ts} +12 -12
  36. package/dist/sheets/{Drawer.js → Modal.js} +9 -9
  37. package/dist/templates/Walkthrough.d.ts +4 -4
  38. package/dist/templates/Walkthrough.js +2 -2
  39. package/lib/mcp.mjs +1 -1
  40. package/lint/rules.mjs +5 -4
  41. package/package.json +1 -1
  42. package/dist/actions/Segment.d.ts +0 -11
  43. package/dist/numbers/Band.d.ts +0 -18
  44. package/dist/scaffold/PagerAt.d.ts +0 -11
  45. package/dist/scaffold/PagerAt.js +0 -6
package/CHANGELOG.md CHANGED
@@ -2,6 +2,27 @@
2
2
 
3
3
  > For: a project that consumes `@usableapp/cardds` and its AI — what changed between versions, written as before → after, so a screen can be brought up to date without reading the source. Newest first. A consumer never edits cardds; if something here leaves you without a way to do what you did before, report the gap.
4
4
 
5
+ ## 0.7.75 — 2026-10-09
6
+
7
+ ### Changed — ten names say what the component is for (BREAKING: the old names are gone)
8
+ A name that said a shape now says a function (Lh 2026-10-08). The CSS classes and every knob are UNCHANGED, so a project's `theme.css` and its `--segment-*` / `--band-*` / `--wait-link-*` knobs keep working; only the import changes. Nothing of the old names is exported any more — update the import or the build fails (Lh 2026-10-09: a clean cut, no alias).
9
+
10
+ | was | is | what it is for |
11
+ |---|---|---|
12
+ | `Segment`, `SegmentItem` | `BtnGroup`, `BtnGroupItem` | a panel of buttons, one on at a time (a grouped button; "segment" is kept for a divider of content) |
13
+ | `WaitLink` | `Countdown` | a link that counts down and takes no tap until the time has passed |
14
+ | `PagerAt` | `Pager` | the dots that say where one is in a walk (the bar is still `ActionBar variant="pager"`) |
15
+ | `TileBadge` | `JourneyBadge` | the small badge on a journey's tile |
16
+ | `Band`, `BandStack` | `NumberBand`, `NumberBandStack` | one number as a band; several stacked |
17
+ | `Lift` | `ModalBody` | the part of a Modal that lifts: what is shown above the question |
18
+ | `Drawer` | `ModalAsk` | the question and its answers at the Modal's foot (`ModalAsk light` as before) |
19
+ | `ActionNote` | `BarNote` | words standing where the bar's button would be |
20
+
21
+ Their Props types follow (`BtnGroupProps`, `ModalAskProps`…). `Centre`, `CtaPack`, `ActionBarTier`, `BtnTrio`, `IconBtnGroup` keep their names.
22
+
23
+ ### Changed — fewer stories, one per prop axis
24
+ Ten gallery stories that differed from a sibling only by a tone, a side or an on/off are folded into that sibling (values of one axis stand side by side in one story): `Mood/Default` (was Picked + Unpicked), `Sticky/Looks` (was Tones + Flat + Tilt), `AvatarPick/Inset` (+ OnDark), `Modal/Confirm` (+ ConfirmLight), `Sheet/Half` (+ Look), `Field/Plain` (+ WithIcon); `StickyWelcome/WelcomeRight`, `SheetStack/ClosedOpened` and `SheetStack/StackBackBackOfStack` are gone. 419 → 409 stories; the catalog's `scaffold` ids change with them. The rendered html of every other story is byte-identical.
25
+
5
26
  ## 0.7.74 — 2026-10-08
6
27
 
7
28
  ### Added
package/README.md CHANGED
@@ -239,16 +239,16 @@ of `Screen`:
239
239
  |---|---|---|
240
240
  | **top** | `top` | `TopBar` · `AppBar` · `"lead"` (no bar: the content starts `--screen-lead`, 15% of the screen, down) |
241
241
  | **content** | children | a `Step` (`Pages` · `Page` · `Page` + `Sheet`) · `Centre` · `SheetStack` … |
242
- | **bottom** | `bottom` | `ActionBar` (rows: `controls` · the one `cta` row — the pager ← → or one wide button · a `ctaLink`) · `FloatBar` · nothing |
242
+ | **bottom** | `bottom` | `ActionBar` (rows: `controls` · the one `cta` row — the pager bar ← → or one wide button · a `ctaLink`) · `FloatBar` · nothing |
243
243
 
244
244
  ```tsx
245
245
  <Screen fill top="lead" bottom={<ActionBar variant="pager">…</ActionBar>}>
246
- <Step><Pages>…</Pages><PagerAt at={1} of={3} /></Step>
246
+ <Step><Pages>…</Pages><Pager at={1} of={3} /></Step>
247
247
  </Screen>
248
248
  ```
249
249
 
250
250
  - **Top and content are one flex column; the bottom is a LAYER** (Lh 2026-09-23). In `Screen fill` the content runs to the
251
- screen's bottom edge; the bottom (`ActionBar`, with the walk's `PagerAt` as its first row) lies over it at the foot and
251
+ screen's bottom edge; the bottom (`ActionBar`, with the walk's `Pager` as its first row) lies over it at the foot and
252
252
  covers what is under it — on purpose, nothing is added to the content to make room. The keyboard lifts the layer (`--kb`).
253
253
  - **The bar is INSIDE the screen** — `bottom`, never a sibling after `</Screen>`, never pinned with a hand-set `position`.
254
254
  A `FloatBar` in `bottom` floats the same way.
@@ -339,7 +339,7 @@ whose markup has rules, because the sheet's box is the step itself:
339
339
  needs to: the body's bottom padding is the part that slid under (`--_cover`), so the last row comes up to
340
340
  the button at half and 3q as it does at full.
341
341
  - **Layers: the base, the sheet over it, the top bar** (Lh 2026-09-20). The `.action-bar` belongs to the
342
- BASE — the move of a page of words (a pager, or one wide button). It is never in front of a sheet. A
342
+ BASE — the move of a page of words (a pager bar, or one wide button). It is never in front of a sheet. A
343
343
  screen with a sheet finishes ON the sheet: a `.card__foot`, the sheet's last child — ONE row, the page's
344
344
  conclusion. The foot stands on the screen's bottom edge at half, 3q and full alike (a layer as tall as
345
345
  the sheet, slid up by the share the sheet slid down — `sheet.css`), and is gone at peek. Nothing inside
@@ -404,19 +404,19 @@ between at 40% down the screen (see *Anatomy*, "Where the centre is"):
404
404
  above the centre (2 × (40% − the title bar)): a card taller than that is
405
405
  not a centred card — it is a plain scrolling `.screen` (the detail view).
406
406
  - **A small group at the same centre** — an empty state; a card with its quiet
407
- second button and the pager dots under it — is `.screen__centre` (React: `Centre`), a block in the fill
407
+ second button and the `Pager` dots under it — is `.screen__centre` (React: `Centre`), a block in the fill
408
408
  screen after the topbar. Same placement and cap; it runs edge to edge with
409
409
  the inset as padding, and stacks its children at the
410
410
  screen's gap. Never hand-lay `top: 40%` on a screen.
411
411
  - **The bar is the screen's bottom.** Plain `.action-bar` for one move; with a
412
412
  control that belongs to the screen (a slider), `.action-bar--tiers` stacks a
413
413
  control tier above the buttons (it publishes the taller `--bar-reserve` the centred card still reads for its cap).
414
- - **The round pager** is `.action-bar--pager` (or an `.action-bar__tier--pager`)
414
+ - **The round pager bar** is `.action-bar--pager` (or an `.action-bar__tier--pager`)
415
415
  holding two `.icon-btn`s and nothing else: they stand at the two edges. The
416
416
  step that commits still goes back to one wide button (rule 3).
417
417
  - **Page that moves** (Lh 2026-09-20) — two ways, never both on one screen:
418
418
  - *Pages of words:* `.step > .pages > .page` (one `aria-current="step"`, the rest `inert`) — every page
419
- one height, the round pager turns them (`slideTo()`), the words slide like a page. No sheet there.
419
+ one height, the round pager bar turns them (`slideTo()`), the words slide like a page. No sheet there.
420
420
  ONE SCREEN TO THE NEXT (a route change) slides the WHOLE screen the same way: `slideScreen(() => navigate(to), 'next' | 'back')`,
421
421
  and `installScreenSlide()` once at app start for the back button (story `Step · WalksOn`). `data-slide="off"` on a Screen = no slide.
422
422
  ONE OUTCOME, DRAWN ONCE (Lh 2026-10-01): a screen that can come out more than one way (signed in or not, a list or
@@ -449,7 +449,7 @@ between at 40% down the screen (see *Anatomy*, "Where the centre is"):
449
449
  it scroll clear.
450
450
  **Never a form taken apart** — one sheet per field, a "send" left on the base: a form lives whole in ONE sheet.
451
451
  Fixture `tests/fixtures/calls.html`, tests `tests/calls.spec.js`, stories `Step · Walks` / `Step · Calls`.
452
- - **A pager turns pages of words, never a screen with a sheet** (Lh 2026-09-20). A
452
+ - **A pager bar turns pages of words, never a screen with a sheet** (Lh 2026-09-20). A
453
453
  sheet means this screen has work that cannot be walked past: no ← →, no bar at all — the sheet's
454
454
  own foot finishes it. (Guidance — not enforced.)
455
455
  - A screen is **top · content · bottom** on the base (*Screen: top · content · bottom*). The base is the
@@ -700,7 +700,7 @@ question and hunts for its answer. Rules 11–13 serve that:
700
700
  not filled with more content; a new edge is made instead (line the buttons
701
701
  up with the avatar).
702
702
  12. **Show, don't explain.** Where a known picture carries it — an avatar for a
703
- person, an icon, a `Ring`/`Track`/`Band`, a `Chip` for a category — use it
703
+ person, an icon, a `Ring`/`Track`/`NumberBand`, a `Chip` for a category — use it
704
704
  instead of words. Never add a label, a caption line, a comparison or a
705
705
  tooltip to explain what the picture already says (the retired overline was
706
706
  that mistake). Long lists are differentiated, not spaced out: group them
package/css/layover.css CHANGED
@@ -79,7 +79,7 @@
79
79
  --accent: var(--card-ink);
80
80
  --on-accent: var(--card-bg);
81
81
  }
82
- /* the CONFIRM: a Modal with no Lift — the drawer IS the card, as tall as its words (no fixed band, no second beat) */
82
+ /* the CONFIRM: a Modal with no ModalBody: the ModalAsk IS the card, as tall as its words (no fixed band, no second beat) */
83
83
  .modal:not(:has(> .modal__lift)) > .modal__drawer { height: auto; padding-block: var(--modal-confirm-pad-y, var(--sp-6)); animation: none; }
84
84
  .modal__drawer .t-caption { opacity: var(--dim); }
85
85
  .modal__drawer > h2:focus { outline: none; } /* the question takes the cursor when the modal arrives (for a screen reader, the keyboard's way in) — it is not a control: no ring */
package/css/lists.css CHANGED
@@ -201,7 +201,7 @@
201
201
  .link--sm { position: relative; font-size: var(--link-sm-font-size, var(--fs-2xs)); min-height: var(--link-sm-min-h, calc(var(--tap-base) * 7 / 12)); }
202
202
  .link--sm::after { content: ""; position: absolute; inset: calc((var(--link-sm-min-h, calc(var(--tap-base) * 7 / 12)) - var(--tap-sm)) / 2) 0; }
203
203
  .link--muted { color: var(--link-muted-ink, var(--card-muted)); }
204
- .link:disabled { color: var(--link-disabled-ink, var(--card-muted)); cursor: default; } /* inactive = muted (a WaitLink counting down) */
204
+ .link:disabled { color: var(--link-disabled-ink, var(--card-muted)); cursor: default; } /* inactive = muted (a Countdown) */
205
205
  .link--wait { font-variant-numeric: tabular-nums; } /* the countdown's digits keep their width: the words do not jiggle each second */
206
206
  .card--3 .link--muted { color: var(--card-3-muted); }
207
207
 
@@ -1,11 +1,11 @@
1
1
  import type { ComponentProps } from 'react';
2
- export interface ActionNoteProps extends ComponentProps<'div'> {
2
+ export interface BarNoteProps extends ComponentProps<'div'> {
3
3
  }
4
4
  /**
5
- * ActionNote — the words that stand WHERE THE MAIN BUTTON WOULD BE when there is nothing to press: a block exactly the main button's
5
+ * BarNote — the words that stand WHERE THE MAIN BUTTON WOULD BE when there is nothing to press: a block exactly the main button's
6
6
  * size (full width, `--btn-h` tall), lying on the ground — no fill, no border, no rounding — holding one line of muted words, an
7
7
  * inline `Icon` allowed ("กดที่ <Icon name="share" /> ด้านล่างนี้" — the member does the thing elsewhere). It does nothing on a tap.
8
8
  * A member of the BOTTOM: a `CardFoot`'s row or an `ActionBar`'s, in place of the button, never beside one; a `link` still goes under
9
9
  * it (CardFoot `link`, ActionBar `ctaLink`). One fixed shape — never styled per use (Lh 2026-09-24).
10
10
  */
11
- export declare function ActionNote({ className, children, ...rest }: ActionNoteProps): import("react").JSX.Element;
11
+ export declare function BarNote({ className, children, ...rest }: BarNoteProps): import("react").JSX.Element;
@@ -1,12 +1,12 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { cx } from '../cx.js';
3
3
  /**
4
- * ActionNote — the words that stand WHERE THE MAIN BUTTON WOULD BE when there is nothing to press: a block exactly the main button's
4
+ * BarNote — the words that stand WHERE THE MAIN BUTTON WOULD BE when there is nothing to press: a block exactly the main button's
5
5
  * size (full width, `--btn-h` tall), lying on the ground — no fill, no border, no rounding — holding one line of muted words, an
6
6
  * inline `Icon` allowed ("กดที่ <Icon name="share" /> ด้านล่างนี้" — the member does the thing elsewhere). It does nothing on a tap.
7
7
  * A member of the BOTTOM: a `CardFoot`'s row or an `ActionBar`'s, in place of the button, never beside one; a `link` still goes under
8
8
  * it (CardFoot `link`, ActionBar `ctaLink`). One fixed shape — never styled per use (Lh 2026-09-24).
9
9
  */
10
- export function ActionNote({ className, children, ...rest }) {
10
+ export function BarNote({ className, children, ...rest }) {
11
11
  return _jsx("div", { role: "note", className: cx('action-note', className), ...rest, children: _jsx("span", { className: "action-note__words", children: children }) });
12
12
  }
@@ -0,0 +1,11 @@
1
+ import type { ComponentProps } from 'react';
2
+ export interface BtnGroupProps extends ComponentProps<'div'> {
3
+ }
4
+ /** BtnGroup — a panel of buttons, one on at a time (a tab strip, a day picker): its items share the width; children are BtnGroupItems. */
5
+ export declare function BtnGroup({ className, ...rest }: BtnGroupProps): import("react").JSX.Element;
6
+ export interface BtnGroupItemProps extends ComponentProps<'button'> {
7
+ /** the selected tab (filled) */
8
+ selected?: boolean;
9
+ }
10
+ /** BtnGroupItem — one tab in a BtnGroup. */
11
+ export declare function BtnGroupItem({ selected, className, ...rest }: BtnGroupItemProps): import("react").JSX.Element;
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { cx } from '../cx.js';
3
- /** Segment — a tab strip / day picker whose items share the width; children are SegmentItems. */
4
- export function Segment({ className, ...rest }) {
3
+ /** BtnGroup — a panel of buttons, one on at a time (a tab strip, a day picker): its items share the width; children are BtnGroupItems. */
4
+ export function BtnGroup({ className, ...rest }) {
5
5
  return _jsx("div", { className: cx('segment', className), role: "tablist", ...rest });
6
6
  }
7
- /** SegmentItem — one tab in a Segment. */
8
- export function SegmentItem({ selected, className, ...rest }) {
7
+ /** BtnGroupItem — one tab in a BtnGroup. */
8
+ export function BtnGroupItem({ selected, className, ...rest }) {
9
9
  return _jsx("button", { type: "button", role: "tab", "aria-selected": selected ? 'true' : undefined, className: cx('segment__item', className), ...rest });
10
10
  }
@@ -1,6 +1,6 @@
1
1
  import { type ReactNode } from 'react';
2
2
  import { type LinkProps } from './Link.js';
3
- export interface WaitLinkProps extends Omit<LinkProps, 'href'> {
3
+ export interface CountdownProps extends Omit<LinkProps, 'href'> {
4
4
  /** CONTROLLED: when it may be pressed again (a time in ms, `Date.now()` based). Before that it counts down and takes no taps;
5
5
  * null / past = ready. The APP owns the rule — 30 s, +30 s each time — and sets a new `until` in its onClick. */
6
6
  until?: number | null;
@@ -8,7 +8,7 @@ export interface WaitLinkProps extends Omit<LinkProps, 'href'> {
8
8
  waiting?: (left: string) => ReactNode;
9
9
  }
10
10
  /**
11
- * WaitLink — a Link that waits: "ขอรหัสใหม่ได้ใน 0:27", counting down each second, then "ขอรหัสใหม่" to press (a new OTP, a retry).
11
+ * Countdown — a Link that waits: "ขอรหัสใหม่ได้ใน 0:27", counting down each second, then "ขอรหัสใหม่" to press (a new OTP, a retry).
12
12
  * A link, not a button: it is the step's second way, under its control; in a SheetStep it stands centred on its own row.
13
13
  */
14
- export declare function WaitLink({ until, waiting, children, className, disabled, ...rest }: WaitLinkProps): import("react").JSX.Element;
14
+ export declare function Countdown({ until, waiting, children, className, disabled, ...rest }: CountdownProps): import("react").JSX.Element;
@@ -3,10 +3,10 @@ import { useEffect, useState } from 'react';
3
3
  import { cx } from '../cx.js';
4
4
  import { Link } from './Link.js';
5
5
  /**
6
- * WaitLink — a Link that waits: "ขอรหัสใหม่ได้ใน 0:27", counting down each second, then "ขอรหัสใหม่" to press (a new OTP, a retry).
6
+ * Countdown — a Link that waits: "ขอรหัสใหม่ได้ใน 0:27", counting down each second, then "ขอรหัสใหม่" to press (a new OTP, a retry).
7
7
  * A link, not a button: it is the step's second way, under its control; in a SheetStep it stands centred on its own row.
8
8
  */
9
- export function WaitLink({ until, waiting, children, className, disabled, ...rest }) {
9
+ export function Countdown({ until, waiting, children, className, disabled, ...rest }) {
10
10
  const [now, setNow] = useState(() => Date.now());
11
11
  const left = until != null ? Math.ceil((until - now) / 1000) : 0;
12
12
  useEffect(() => {
@@ -9,12 +9,12 @@ export interface LinkProps extends ComponentProps<'a'> {
9
9
  sm?: boolean;
10
10
  /** without an href it renders as a button */
11
11
  href?: string;
12
- /** a button link that takes no taps now (reads inactive: muted) — `WaitLink` while it counts down */
12
+ /** a button link that takes no taps now (reads inactive: muted) — `Countdown` while it counts down */
13
13
  disabled?: boolean;
14
14
  }
15
15
  /** Link — an inline text action big enough to tap (40px): "See all ↗" in a card head, "Skip" between pager buttons. */
16
16
  export declare function Link({ muted, sm, icon, href, className, children, ...rest }: LinkProps): import("react").DetailedReactHTMLElement<{
17
- /** a button link that takes no taps now (reads inactive: muted) — `WaitLink` while it counts down */
17
+ /** a button link that takes no taps now (reads inactive: muted) — `Countdown` while it counts down */
18
18
  disabled?: boolean;
19
19
  ref?: import("react").Ref<HTMLAnchorElement> | undefined;
20
20
  key?: import("react").Key | null | undefined;
package/dist/cardds.css CHANGED
@@ -3662,7 +3662,7 @@ button:enabled { cursor: pointer; } /* a disabled one keeps the arrow */
3662
3662
  .link--sm { position: relative; font-size: var(--link-sm-font-size, var(--fs-2xs)); min-height: var(--link-sm-min-h, calc(var(--tap-base) * 7 / 12)); }
3663
3663
  .link--sm::after { content: ""; position: absolute; inset: calc((var(--link-sm-min-h, calc(var(--tap-base) * 7 / 12)) - var(--tap-sm)) / 2) 0; }
3664
3664
  .link--muted { color: var(--link-muted-ink, var(--card-muted)); }
3665
- .link:disabled { color: var(--link-disabled-ink, var(--card-muted)); cursor: default; } /* inactive = muted (a WaitLink counting down) */
3665
+ .link:disabled { color: var(--link-disabled-ink, var(--card-muted)); cursor: default; } /* inactive = muted (a Countdown) */
3666
3666
  .link--wait { font-variant-numeric: tabular-nums; } /* the countdown's digits keep their width: the words do not jiggle each second */
3667
3667
  .card--3 .link--muted { color: var(--card-3-muted); }
3668
3668
 
@@ -4785,7 +4785,7 @@ button:enabled { cursor: pointer; } /* a disabled one keeps the arrow */
4785
4785
  --accent: var(--card-ink);
4786
4786
  --on-accent: var(--card-bg);
4787
4787
  }
4788
- /* the CONFIRM: a Modal with no Lift — the drawer IS the card, as tall as its words (no fixed band, no second beat) */
4788
+ /* the CONFIRM: a Modal with no ModalBody: the ModalAsk IS the card, as tall as its words (no fixed band, no second beat) */
4789
4789
  .modal:not(:has(> .modal__lift)) > .modal__drawer { height: auto; padding-block: var(--modal-confirm-pad-y, var(--sp-6)); animation: none; }
4790
4790
  .modal__drawer .t-caption { opacity: var(--dim); }
4791
4791
  .modal__drawer > h2:focus { outline: none; } /* the question takes the cursor when the modal arrives (for a screen reader, the keyboard's way in) — it is not a control: no ring */
@@ -19,7 +19,7 @@ export interface CardProps extends ComponentProps<'article'> {
19
19
  fold?: boolean;
20
20
  /** one card at the human centre of a `Screen fill` (the introduction screens) */
21
21
  centre?: boolean;
22
- /** a data band: label · giant number · footnote — see Band */
22
+ /** a data band: label · giant number · footnote — see NumberBand */
23
23
  band?: boolean;
24
24
  /** the element: article (default), a when it links, label when it wraps an input, div/section */
25
25
  as?: 'article' | 'div' | 'a' | 'label' | 'section' | 'li';
@@ -1,7 +1,7 @@
1
1
  import type { ComponentProps } from 'react';
2
2
  export interface CardMediaProps extends ComponentProps<'div'> {
3
3
  }
4
- /** CardMedia — rounded media inside a card (a Placeholder or img); a corner TileBadge pins to it. */
4
+ /** CardMedia — rounded media inside a card (a Placeholder or img); a corner JourneyBadge pins to it. */
5
5
  export declare function CardMedia({ className, ...rest }: CardMediaProps): import("react").JSX.Element;
6
6
  export interface CardBodyProps extends ComponentProps<'div'> {
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { cx } from '../cx.js';
3
- /** CardMedia — rounded media inside a card (a Placeholder or img); a corner TileBadge pins to it. */
3
+ /** CardMedia — rounded media inside a card (a Placeholder or img); a corner JourneyBadge pins to it. */
4
4
  export function CardMedia({ className, ...rest }) {
5
5
  return _jsx("div", { className: cx('card__media', className), ...rest });
6
6
  }