@usableapp/cardds 0.2.2 → 0.4.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.
Files changed (103) hide show
  1. package/README.md +35 -107
  2. package/cardds.js +6 -449
  3. package/css/actions.css +41 -35
  4. package/css/base.css +9 -9
  5. package/css/card.css +26 -25
  6. package/css/choice.css +50 -50
  7. package/css/forms.css +18 -18
  8. package/css/journey.css +16 -16
  9. package/css/layover.css +45 -45
  10. package/css/lists.css +43 -43
  11. package/css/media.css +33 -33
  12. package/css/numbers.css +25 -25
  13. package/css/people.css +11 -11
  14. package/css/sheet.css +29 -29
  15. package/css/step.css +6 -6
  16. package/css/theme.template.css +6 -3
  17. package/css/tokens.css +2 -0
  18. package/dist/actions/Btn.d.ts +109 -108
  19. package/dist/actions/BtnRow.d.ts +2 -2
  20. package/dist/actions/Chip.d.ts +102 -101
  21. package/dist/actions/Dot.d.ts +2 -2
  22. package/dist/actions/Dropdown.d.ts +36 -19
  23. package/dist/actions/Dropdown.js +41 -11
  24. package/dist/actions/Fab.d.ts +2 -2
  25. package/dist/actions/IconBtn.d.ts +298 -10
  26. package/dist/actions/IconBtn.js +6 -8
  27. package/dist/actions/Link.d.ts +105 -104
  28. package/dist/actions/Segment.d.ts +3 -3
  29. package/dist/cardds.css +354 -345
  30. package/dist/cards/Card.d.ts +99 -98
  31. package/dist/cards/CardFoot.d.ts +2 -2
  32. package/dist/cards/CardHead.d.ts +2 -2
  33. package/dist/cards/CardParts.d.ts +7 -7
  34. package/dist/cards/Placeholder.d.ts +2 -2
  35. package/dist/cards/Stat.d.ts +7 -5
  36. package/dist/cards/Stat.js +2 -2
  37. package/dist/choice/Calendar.d.ts +17 -6
  38. package/dist/choice/Calendar.js +9 -3
  39. package/dist/choice/Check.d.ts +3 -3
  40. package/dist/choice/DayStrip.d.ts +3 -3
  41. package/dist/choice/Mood.d.ts +2 -2
  42. package/dist/choice/Slider.d.ts +3 -3
  43. package/dist/choice/Slider.js +12 -8
  44. package/dist/forms/AddRow.d.ts +2 -2
  45. package/dist/forms/Composer.d.ts +2 -2
  46. package/dist/forms/Field.d.ts +2 -2
  47. package/dist/forms/FileBtn.d.ts +2 -2
  48. package/dist/forms/Pin.d.ts +10 -7
  49. package/dist/forms/Pin.js +47 -18
  50. package/dist/journey/NoteRow.d.ts +2 -2
  51. package/dist/journey/Route.d.ts +2 -2
  52. package/dist/journey/TileBadge.d.ts +2 -2
  53. package/dist/layover/Banner.d.ts +2 -2
  54. package/dist/layover/Callout.d.ts +2 -2
  55. package/dist/layover/Deck.d.ts +3 -3
  56. package/dist/lists/Bubble.d.ts +3 -3
  57. package/dist/lists/Kv.d.ts +5 -5
  58. package/dist/lists/Legend.d.ts +3 -3
  59. package/dist/lists/Row.d.ts +5 -4
  60. package/dist/lists/Timeline.d.ts +3 -3
  61. package/dist/media/MapArea.d.ts +2 -2
  62. package/dist/media/Mosaic.d.ts +3 -3
  63. package/dist/media/Postcard.d.ts +9 -5
  64. package/dist/media/Postcard.js +8 -3
  65. package/dist/media/Quote.d.ts +2 -2
  66. package/dist/media/Tile.d.ts +5 -4
  67. package/dist/numbers/Badge.d.ts +2 -2
  68. package/dist/numbers/Band.d.ts +3 -3
  69. package/dist/numbers/Bars.d.ts +3 -3
  70. package/dist/numbers/DotGrid.d.ts +2 -2
  71. package/dist/numbers/Picker.d.ts +20 -8
  72. package/dist/numbers/Picker.js +51 -13
  73. package/dist/numbers/Ring.d.ts +2 -2
  74. package/dist/numbers/Track.d.ts +3 -3
  75. package/dist/people/Avatar.d.ts +100 -99
  76. package/dist/people/AvatarPick.d.ts +3 -3
  77. package/dist/scaffold/ActionBar.d.ts +3 -3
  78. package/dist/scaffold/AppBar.d.ts +2 -2
  79. package/dist/scaffold/BaseContent.d.ts +7 -7
  80. package/dist/scaffold/BaseContent.js +4 -4
  81. package/dist/scaffold/Centre.d.ts +3 -3
  82. package/dist/scaffold/EmptyState.d.ts +2 -2
  83. package/dist/scaffold/FilterRow.d.ts +2 -2
  84. package/dist/scaffold/FloatBar.d.ts +105 -104
  85. package/dist/scaffold/PagerAt.d.ts +2 -2
  86. package/dist/scaffold/Screen.d.ts +100 -99
  87. package/dist/scaffold/TopBar.d.ts +2 -2
  88. package/dist/sheets/CardBack.d.ts +2 -2
  89. package/dist/sheets/Drawer.d.ts +19 -8
  90. package/dist/sheets/Drawer.js +29 -5
  91. package/dist/sheets/Sheet.d.ts +29 -16
  92. package/dist/sheets/Sheet.js +157 -11
  93. package/dist/sheets/SheetBody.d.ts +2 -2
  94. package/dist/sheets/SheetHead.d.ts +2 -2
  95. package/dist/sheets/SheetStack.d.ts +15 -3
  96. package/dist/sheets/SheetStack.js +74 -2
  97. package/dist/sheets/SheetStage.d.ts +2 -2
  98. package/dist/sheets/Step.d.ts +2 -2
  99. package/dist/type/Icon.d.ts +22 -7
  100. package/dist/type/Icon.js +27 -4
  101. package/dist/type/Text.d.ts +7 -1
  102. package/dist/type/Text.js +2 -2
  103. package/package.json +3 -2
@@ -1,6 +1,6 @@
1
- import { type ComponentPropsWithoutRef, type ReactNode } from 'react';
1
+ import { type ComponentProps, type ReactNode } from 'react';
2
2
  import { type IconName } from '../type/Icon.js';
3
- export interface AvatarProps extends ComponentPropsWithoutRef<'span'> {
3
+ export interface AvatarProps extends ComponentProps<'span'> {
4
4
  /** sm 32px · default 40px · lg 56px · xl 72px (a sheet head's icon ring) */
5
5
  size?: 'sm' | 'lg' | 'xl';
6
6
  /** no fill, an edge — an icon in a ring */
@@ -25,73 +25,118 @@ export interface AvatarProps extends ComponentPropsWithoutRef<'span'> {
25
25
  }
26
26
  /** Avatar — initials by default, a photo or an Icon when there is one; sizes are the tokens. */
27
27
  export declare function Avatar({ size, outline, add, on, halo, center, src, alt, icon, as, href, className, children, ...rest }: AvatarProps): import("react").DetailedReactHTMLElement<{
28
- slot?: string | undefined | undefined;
28
+ ref?: import("react").Ref<HTMLSpanElement> | undefined;
29
+ key?: import("react").Key | null | undefined;
30
+ defaultChecked?: boolean | undefined;
31
+ defaultValue?: string | number | readonly string[] | undefined;
32
+ suppressContentEditableWarning?: boolean | undefined;
33
+ suppressHydrationWarning?: boolean | undefined;
34
+ accessKey?: string | undefined;
35
+ autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {});
36
+ autoFocus?: boolean | undefined;
37
+ contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
38
+ contextMenu?: string | undefined;
39
+ dir?: string | undefined;
40
+ draggable?: (boolean | "true" | "false") | undefined;
41
+ enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
42
+ hidden?: boolean | undefined;
43
+ id?: string | undefined;
44
+ lang?: string | undefined;
45
+ nonce?: string | undefined;
46
+ slot?: string | undefined;
47
+ spellCheck?: (boolean | "true" | "false") | undefined;
29
48
  style?: import("react").CSSProperties | undefined;
30
- title?: string | undefined | undefined;
31
- suppressHydrationWarning?: boolean | undefined | undefined;
32
- color?: string | undefined | undefined;
33
- id?: string | undefined | undefined;
34
- lang?: string | undefined | undefined;
35
- nonce?: string | undefined | undefined;
36
- part?: string | undefined | undefined;
49
+ tabIndex?: number | undefined;
50
+ title?: string | undefined;
51
+ translate?: "yes" | "no" | undefined;
52
+ radioGroup?: string | undefined;
37
53
  role?: import("react").AriaRole | undefined;
38
- tabIndex?: number | undefined | undefined;
39
- "aria-activedescendant"?: string | undefined | undefined;
54
+ about?: string | undefined;
55
+ content?: string | undefined;
56
+ datatype?: string | undefined;
57
+ inlist?: any;
58
+ prefix?: string | undefined;
59
+ property?: string | undefined;
60
+ rel?: string | undefined;
61
+ resource?: string | undefined;
62
+ rev?: string | undefined;
63
+ typeof?: string | undefined;
64
+ vocab?: string | undefined;
65
+ autoCorrect?: string | undefined;
66
+ autoSave?: string | undefined;
67
+ color?: string | undefined;
68
+ itemProp?: string | undefined;
69
+ itemScope?: boolean | undefined;
70
+ itemType?: string | undefined;
71
+ itemID?: string | undefined;
72
+ itemRef?: string | undefined;
73
+ results?: number | undefined;
74
+ security?: string | undefined;
75
+ unselectable?: "on" | "off" | undefined;
76
+ popover?: "" | "auto" | "manual" | "hint" | undefined;
77
+ popoverTargetAction?: "toggle" | "show" | "hide" | undefined;
78
+ popoverTarget?: string | undefined;
79
+ inert?: boolean | undefined;
80
+ inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined;
81
+ is?: string | undefined;
82
+ exportparts?: string | undefined;
83
+ part?: string | undefined;
84
+ "aria-activedescendant"?: string | undefined;
40
85
  "aria-atomic"?: (boolean | "true" | "false") | undefined;
41
- "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined | undefined;
42
- "aria-braillelabel"?: string | undefined | undefined;
43
- "aria-brailleroledescription"?: string | undefined | undefined;
86
+ "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined;
87
+ "aria-braillelabel"?: string | undefined;
88
+ "aria-brailleroledescription"?: string | undefined;
44
89
  "aria-busy"?: (boolean | "true" | "false") | undefined;
45
- "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
46
- "aria-colcount"?: number | undefined | undefined;
47
- "aria-colindex"?: number | undefined | undefined;
48
- "aria-colindextext"?: string | undefined | undefined;
49
- "aria-colspan"?: number | undefined | undefined;
50
- "aria-controls"?: string | undefined | undefined;
51
- "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined | undefined;
52
- "aria-describedby"?: string | undefined | undefined;
53
- "aria-description"?: string | undefined | undefined;
54
- "aria-details"?: string | undefined | undefined;
90
+ "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined;
91
+ "aria-colcount"?: number | undefined;
92
+ "aria-colindex"?: number | undefined;
93
+ "aria-colindextext"?: string | undefined;
94
+ "aria-colspan"?: number | undefined;
95
+ "aria-controls"?: string | undefined;
96
+ "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined;
97
+ "aria-describedby"?: string | undefined;
98
+ "aria-description"?: string | undefined;
99
+ "aria-details"?: string | undefined;
55
100
  "aria-disabled"?: (boolean | "true" | "false") | undefined;
56
- "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined | undefined;
57
- "aria-errormessage"?: string | undefined | undefined;
101
+ "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined;
102
+ "aria-errormessage"?: string | undefined;
58
103
  "aria-expanded"?: (boolean | "true" | "false") | undefined;
59
- "aria-flowto"?: string | undefined | undefined;
104
+ "aria-flowto"?: string | undefined;
60
105
  "aria-grabbed"?: (boolean | "true" | "false") | undefined;
61
- "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined | undefined;
106
+ "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined;
62
107
  "aria-hidden"?: (boolean | "true" | "false") | undefined;
63
- "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined | undefined;
64
- "aria-keyshortcuts"?: string | undefined | undefined;
65
- "aria-label"?: string | undefined | undefined;
66
- "aria-labelledby"?: string | undefined | undefined;
67
- "aria-level"?: number | undefined | undefined;
68
- "aria-live"?: "off" | "assertive" | "polite" | undefined | undefined;
108
+ "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined;
109
+ "aria-keyshortcuts"?: string | undefined;
110
+ "aria-label"?: string | undefined;
111
+ "aria-labelledby"?: string | undefined;
112
+ "aria-level"?: number | undefined;
113
+ "aria-live"?: "off" | "assertive" | "polite" | undefined;
69
114
  "aria-modal"?: (boolean | "true" | "false") | undefined;
70
115
  "aria-multiline"?: (boolean | "true" | "false") | undefined;
71
116
  "aria-multiselectable"?: (boolean | "true" | "false") | undefined;
72
- "aria-orientation"?: "horizontal" | "vertical" | undefined | undefined;
73
- "aria-owns"?: string | undefined | undefined;
74
- "aria-placeholder"?: string | undefined | undefined;
75
- "aria-posinset"?: number | undefined | undefined;
76
- "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
117
+ "aria-orientation"?: "horizontal" | "vertical" | undefined;
118
+ "aria-owns"?: string | undefined;
119
+ "aria-placeholder"?: string | undefined;
120
+ "aria-posinset"?: number | undefined;
121
+ "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined;
77
122
  "aria-readonly"?: (boolean | "true" | "false") | undefined;
78
- "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined | undefined;
123
+ "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined;
79
124
  "aria-required"?: (boolean | "true" | "false") | undefined;
80
- "aria-roledescription"?: string | undefined | undefined;
81
- "aria-rowcount"?: number | undefined | undefined;
82
- "aria-rowindex"?: number | undefined | undefined;
83
- "aria-rowindextext"?: string | undefined | undefined;
84
- "aria-rowspan"?: number | undefined | undefined;
125
+ "aria-roledescription"?: string | undefined;
126
+ "aria-rowcount"?: number | undefined;
127
+ "aria-rowindex"?: number | undefined;
128
+ "aria-rowindextext"?: string | undefined;
129
+ "aria-rowspan"?: number | undefined;
85
130
  "aria-selected"?: (boolean | "true" | "false") | undefined;
86
- "aria-setsize"?: number | undefined | undefined;
87
- "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined | undefined;
88
- "aria-valuemax"?: number | undefined | undefined;
89
- "aria-valuemin"?: number | undefined | undefined;
90
- "aria-valuenow"?: number | undefined | undefined;
91
- "aria-valuetext"?: string | undefined | undefined;
131
+ "aria-setsize"?: number | undefined;
132
+ "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined;
133
+ "aria-valuemax"?: number | undefined;
134
+ "aria-valuemin"?: number | undefined;
135
+ "aria-valuenow"?: number | undefined;
136
+ "aria-valuetext"?: string | undefined;
92
137
  dangerouslySetInnerHTML?: {
93
138
  __html: string | TrustedHTML;
94
- } | undefined | undefined;
139
+ } | undefined;
95
140
  onCopy?: import("react").ClipboardEventHandler<HTMLSpanElement> | undefined;
96
141
  onCopyCapture?: import("react").ClipboardEventHandler<HTMLSpanElement> | undefined;
97
142
  onCut?: import("react").ClipboardEventHandler<HTMLSpanElement> | undefined;
@@ -260,55 +305,11 @@ export declare function Avatar({ size, outline, add, on, halo, center, src, alt,
260
305
  onTransitionRunCapture?: import("react").TransitionEventHandler<HTMLSpanElement> | undefined;
261
306
  onTransitionStart?: import("react").TransitionEventHandler<HTMLSpanElement> | undefined;
262
307
  onTransitionStartCapture?: import("react").TransitionEventHandler<HTMLSpanElement> | undefined;
263
- key?: import("react").Key | null | undefined;
264
- defaultChecked?: boolean | undefined | undefined;
265
- defaultValue?: string | number | readonly string[] | undefined;
266
- suppressContentEditableWarning?: boolean | undefined | undefined;
267
- accessKey?: string | undefined | undefined;
268
- autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {}) | undefined;
269
- autoFocus?: boolean | undefined | undefined;
270
- contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
271
- contextMenu?: string | undefined | undefined;
272
- dir?: string | undefined | undefined;
273
- draggable?: (boolean | "true" | "false") | undefined;
274
- enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
275
- hidden?: boolean | undefined | undefined;
276
- spellCheck?: (boolean | "true" | "false") | undefined;
277
- translate?: "yes" | "no" | undefined | undefined;
278
- radioGroup?: string | undefined | undefined;
279
- about?: string | undefined | undefined;
280
- content?: string | undefined | undefined;
281
- datatype?: string | undefined | undefined;
282
- inlist?: any;
283
- prefix?: string | undefined | undefined;
284
- property?: string | undefined | undefined;
285
- rel?: string | undefined | undefined;
286
- resource?: string | undefined | undefined;
287
- rev?: string | undefined | undefined;
288
- typeof?: string | undefined | undefined;
289
- vocab?: string | undefined | undefined;
290
- autoCorrect?: string | undefined | undefined;
291
- autoSave?: string | undefined | undefined;
292
- itemProp?: string | undefined | undefined;
293
- itemScope?: boolean | undefined | undefined;
294
- itemType?: string | undefined | undefined;
295
- itemID?: string | undefined | undefined;
296
- itemRef?: string | undefined | undefined;
297
- results?: number | undefined | undefined;
298
- security?: string | undefined | undefined;
299
- unselectable?: "on" | "off" | undefined | undefined;
300
- popover?: "" | "auto" | "manual" | "hint" | undefined | undefined;
301
- popoverTargetAction?: "toggle" | "show" | "hide" | undefined | undefined;
302
- popoverTarget?: string | undefined | undefined;
303
- inert?: boolean | undefined | undefined;
304
- inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined | undefined;
305
- is?: string | undefined | undefined;
306
- exportparts?: string | undefined | undefined;
307
308
  href: string | undefined;
308
309
  type: string | undefined;
309
310
  className: string;
310
- }, HTMLElement>;
311
- export interface AvatarStackProps extends ComponentPropsWithoutRef<'span'> {
311
+ }, HTMLSpanElement>;
312
+ export interface AvatarStackProps extends ComponentProps<'span'> {
312
313
  }
313
314
  /** AvatarStack — overlapping small Avatars with an optional `on` "+N" tail. */
314
315
  export declare function AvatarStack({ className, ...rest }: AvatarStackProps): import("react").JSX.Element;
@@ -1,12 +1,12 @@
1
- import type { ComponentPropsWithoutRef, ReactNode } from 'react';
2
- export interface AvatarPickProps extends ComponentPropsWithoutRef<'div'> {
1
+ import type { ComponentProps, ReactNode } from 'react';
2
+ export interface AvatarPickProps extends ComponentProps<'div'> {
3
3
  /** run the strip to the card's edges */
4
4
  bleed?: boolean;
5
5
  label?: string;
6
6
  }
7
7
  /** AvatarPick — the chooser row: big heads with name and role under, scrolling sideways; children are AvatarPickItems. */
8
8
  export declare function AvatarPick({ bleed, label, className, ...rest }: AvatarPickProps): import("react").JSX.Element;
9
- export interface AvatarPickItemProps extends Omit<ComponentPropsWithoutRef<'button'>, 'name' | 'role'> {
9
+ export interface AvatarPickItemProps extends Omit<ComponentProps<'button'>, 'name' | 'role'> {
10
10
  /** the name under the head */
11
11
  name: ReactNode;
12
12
  /** the role under the name */
@@ -1,5 +1,5 @@
1
- import type { ComponentPropsWithoutRef } from 'react';
2
- export interface ActionBarProps extends ComponentPropsWithoutRef<'div'> {
1
+ import type { ComponentProps } from 'react';
2
+ export interface ActionBarProps extends ComponentProps<'div'> {
3
3
  /** `pager`: previous / next as two equal buttons at the edges (a Link may sit between them; the PagerAt dots never do — they go under the card) · `tiers`: rows stacked — a control tier above the buttons */
4
4
  variant?: 'pager' | 'tiers';
5
5
  /** render in flow instead of fixed to the viewport bottom (for a preview or a mock frame); the real bar is fixed */
@@ -13,7 +13,7 @@ export interface ActionBarProps extends ComponentPropsWithoutRef<'div'> {
13
13
  * The parent hosting the bar reserves its room (`--bar-reserve`); never pad a screen for it by hand.
14
14
  */
15
15
  export declare function ActionBar({ variant, inline, className, style, ...rest }: ActionBarProps): import("react").JSX.Element;
16
- export interface ActionBarTierProps extends ComponentPropsWithoutRef<'div'> {
16
+ export interface ActionBarTierProps extends ComponentProps<'div'> {
17
17
  /** the tier that holds the round pager (two IconBtns at the edges) */
18
18
  pager?: boolean;
19
19
  }
@@ -1,5 +1,5 @@
1
- import type { ComponentPropsWithoutRef, ReactNode } from 'react';
2
- export interface AppBarProps extends Omit<ComponentPropsWithoutRef<'header'>, 'title'> {
1
+ import type { ComponentProps, ReactNode } from 'react';
2
+ export interface AppBarProps extends Omit<ComponentProps<'header'>, 'title'> {
3
3
  /** the app or brand mark on the left (an Icon) */
4
4
  icon?: ReactNode;
5
5
  /** the context: which app, which place, which account */
@@ -1,17 +1,17 @@
1
- import type { ComponentPropsWithoutRef } from 'react';
2
- export interface BaseContentProps extends ComponentPropsWithoutRef<'section'> {
1
+ import type { ComponentProps } from 'react';
2
+ export interface BaseContentProps extends ComponentProps<'section'> {
3
3
  }
4
4
  /**
5
5
  * BaseContent — words straight on the base, no card around them: an overline, a heading, a paragraph,
6
6
  * maybe a CtaPack. Content has three homes (Card · Sheet · the base); this is the third one, named.
7
7
  * Was Section (and, inside a Step, StepCard) until 2026-09-16 — one block, one name.
8
8
  * In a Step it is the reading block (first child; the step's MOVE goes to the ActionBar, never here). It can move two ways
9
- * (Lh 2026-09-20): several of them in a `Pages` = a walk of words the round pager turns (slideTo); or a CtaPack of CALLERS —
10
- * `Btn aria-controls={a Sheet's id}` — WAYS IN (sign in · new phone · join), each calling a `Sheet state="away"` that holds that way's
11
- * whole form and its submit. The base itself carries no control; a form is never taken apart across it. Never both: a pager never works beside a sheet.
9
+ * (Lh 2026-09-20): several of them in a `Pages` = a walk of words the round pager turns (slideTo); or a CtaPack of WAYS IN
10
+ * (sign in · new phone · join) — plain `Btn`s; what each one opens (a `Sheet` holding that way's whole form) is the APP's wiring, not
11
+ * cardds's. The base itself carries no control; a form is never taken apart across it. Never both: a pager never works beside a sheet.
12
12
  */
13
13
  export declare function BaseContent({ className, ...rest }: BaseContentProps): import("react").JSX.Element;
14
- export interface CtaPackProps extends ComponentPropsWithoutRef<'div'> {
14
+ export interface CtaPackProps extends ComponentProps<'div'> {
15
15
  }
16
- /** CtaPack — the buttons under a BaseContent's words, wrapping on one line. In a Step it holds CALLERS only (buttons that call a sheet, `aria-controls`) — the Step's move is its ActionBar. */
16
+ /** CtaPack — the buttons under a BaseContent's words, wrapping on one line. In a Step it holds ways in (each opens a sheet — the app wires that); the Step's own move is never here. */
17
17
  export declare function CtaPack({ className, ...rest }: CtaPackProps): import("react").JSX.Element;
@@ -5,14 +5,14 @@ import { cx } from '../cx.js';
5
5
  * maybe a CtaPack. Content has three homes (Card · Sheet · the base); this is the third one, named.
6
6
  * Was Section (and, inside a Step, StepCard) until 2026-09-16 — one block, one name.
7
7
  * In a Step it is the reading block (first child; the step's MOVE goes to the ActionBar, never here). It can move two ways
8
- * (Lh 2026-09-20): several of them in a `Pages` = a walk of words the round pager turns (slideTo); or a CtaPack of CALLERS —
9
- * `Btn aria-controls={a Sheet's id}` — WAYS IN (sign in · new phone · join), each calling a `Sheet state="away"` that holds that way's
10
- * whole form and its submit. The base itself carries no control; a form is never taken apart across it. Never both: a pager never works beside a sheet.
8
+ * (Lh 2026-09-20): several of them in a `Pages` = a walk of words the round pager turns (slideTo); or a CtaPack of WAYS IN
9
+ * (sign in · new phone · join) — plain `Btn`s; what each one opens (a `Sheet` holding that way's whole form) is the APP's wiring, not
10
+ * cardds's. The base itself carries no control; a form is never taken apart across it. Never both: a pager never works beside a sheet.
11
11
  */
12
12
  export function BaseContent({ className, ...rest }) {
13
13
  return _jsx("section", { className: cx('base-content', className), ...rest });
14
14
  }
15
- /** CtaPack — the buttons under a BaseContent's words, wrapping on one line. In a Step it holds CALLERS only (buttons that call a sheet, `aria-controls`) — the Step's move is its ActionBar. */
15
+ /** CtaPack — the buttons under a BaseContent's words, wrapping on one line. In a Step it holds ways in (each opens a sheet — the app wires that); the Step's own move is never here. */
16
16
  export function CtaPack({ className, ...rest }) {
17
17
  return _jsx("div", { className: cx('cta-pack', className), ...rest });
18
18
  }
@@ -1,5 +1,5 @@
1
- import type { ComponentPropsWithoutRef } from 'react';
2
- export interface CentreProps extends ComponentPropsWithoutRef<'div'> {
1
+ import type { ComponentProps } from 'react';
2
+ export interface CentreProps extends ComponentProps<'div'> {
3
3
  }
4
4
  /**
5
5
  * Centre — the centred group: ONE thing to read at the human centre of the screen, when that thing is not a lone
@@ -11,7 +11,7 @@ export interface CentreProps extends ComponentPropsWithoutRef<'div'> {
11
11
  * Put it after the TopBar; the ActionBar, if any, stays outside the Screen.
12
12
  */
13
13
  export declare function Centre({ className, ...rest }: CentreProps): import("react").JSX.Element;
14
- export interface PagesProps extends ComponentPropsWithoutRef<'div'> {
14
+ export interface PagesProps extends ComponentProps<'div'> {
15
15
  }
16
16
  /**
17
17
  * Pages — the pages of a walk, all one height: every page is rendered, stacked in one cell as tall as the
@@ -1,5 +1,5 @@
1
- import type { ComponentPropsWithoutRef, ReactNode } from 'react';
2
- export interface EmptyStateProps extends Omit<ComponentPropsWithoutRef<'div'>, 'title'> {
1
+ import type { ComponentProps, ReactNode } from 'react';
2
+ export interface EmptyStateProps extends Omit<ComponentProps<'div'>, 'title'> {
3
3
  /** the big icon above the words (an `<Icon size="lg" />`) */
4
4
  icon?: ReactNode;
5
5
  /** the heading */
@@ -1,5 +1,5 @@
1
- import type { ComponentPropsWithoutRef } from 'react';
2
- export interface FilterRowProps extends ComponentPropsWithoutRef<'div'> {
1
+ import type { ComponentProps } from 'react';
2
+ export interface FilterRowProps extends ComponentProps<'div'> {
3
3
  }
4
4
  /** FilterRow — a row of Dropdowns sharing the width, under the TopBar (this week · USD). */
5
5
  export declare function FilterRow({ className, ...rest }: FilterRowProps): import("react").JSX.Element;
@@ -1,5 +1,5 @@
1
- import { type ComponentPropsWithoutRef, type ReactNode } from 'react';
2
- export interface FloatBarProps extends ComponentPropsWithoutRef<'nav'> {
1
+ import { type ComponentProps, type ReactNode } from 'react';
2
+ export interface FloatBarProps extends ComponentProps<'nav'> {
3
3
  /** the detached round button beside the pill (an IconBtn — search, add) */
4
4
  action?: ReactNode;
5
5
  }
@@ -9,7 +9,7 @@ export interface FloatBarProps extends ComponentPropsWithoutRef<'nav'> {
9
9
  * on a browsing screen (home, map) — never both.
10
10
  */
11
11
  export declare function FloatBar({ action, className, children, ...rest }: FloatBarProps): import("react").JSX.Element;
12
- export interface FloatBarItemProps extends ComponentPropsWithoutRef<'a'> {
12
+ export interface FloatBarItemProps extends ComponentProps<'a'> {
13
13
  /** the destination; without one it renders as a button */
14
14
  href?: string;
15
15
  /** this is the screen the member is on */
@@ -19,76 +19,125 @@ export interface FloatBarItemProps extends ComponentPropsWithoutRef<'a'> {
19
19
  }
20
20
  /** FloatBarItem — one tab in the FloatBar pill: icon over a caption; the current one is filled. */
21
21
  export declare function FloatBarItem({ href, current, icon, className, children, ...rest }: FloatBarItemProps): import("react").DetailedReactHTMLElement<{
22
- slot?: string | undefined | undefined;
23
- style?: import("react").CSSProperties | undefined;
24
- title?: string | undefined | undefined;
25
- suppressHydrationWarning?: boolean | undefined | undefined;
26
- color?: string | undefined | undefined;
27
- id?: string | undefined | undefined;
28
- lang?: string | undefined | undefined;
29
- media?: string | undefined | undefined;
30
- nonce?: string | undefined | undefined;
31
- part?: string | undefined | undefined;
22
+ ref?: import("react").Ref<HTMLAnchorElement> | undefined;
23
+ key?: import("react").Key | null | undefined;
24
+ download?: any;
25
+ hrefLang?: string | undefined;
26
+ media?: string | undefined;
27
+ ping?: string | undefined;
32
28
  target?: import("react").HTMLAttributeAnchorTarget | undefined;
33
29
  type: string | undefined;
30
+ referrerPolicy?: import("react").HTMLAttributeReferrerPolicy | undefined;
31
+ defaultChecked?: boolean | undefined;
32
+ defaultValue?: string | number | readonly string[] | undefined;
33
+ suppressContentEditableWarning?: boolean | undefined;
34
+ suppressHydrationWarning?: boolean | undefined;
35
+ accessKey?: string | undefined;
36
+ autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {});
37
+ autoFocus?: boolean | undefined;
38
+ contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
39
+ contextMenu?: string | undefined;
40
+ dir?: string | undefined;
41
+ draggable?: (boolean | "true" | "false") | undefined;
42
+ enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
43
+ hidden?: boolean | undefined;
44
+ id?: string | undefined;
45
+ lang?: string | undefined;
46
+ nonce?: string | undefined;
47
+ slot?: string | undefined;
48
+ spellCheck?: (boolean | "true" | "false") | undefined;
49
+ style?: import("react").CSSProperties | undefined;
50
+ tabIndex?: number | undefined;
51
+ title?: string | undefined;
52
+ translate?: "yes" | "no" | undefined;
53
+ radioGroup?: string | undefined;
34
54
  role?: import("react").AriaRole | undefined;
35
- tabIndex?: number | undefined | undefined;
36
- "aria-activedescendant"?: string | undefined | undefined;
55
+ about?: string | undefined;
56
+ content?: string | undefined;
57
+ datatype?: string | undefined;
58
+ inlist?: any;
59
+ prefix?: string | undefined;
60
+ property?: string | undefined;
61
+ rel?: string | undefined;
62
+ resource?: string | undefined;
63
+ rev?: string | undefined;
64
+ typeof?: string | undefined;
65
+ vocab?: string | undefined;
66
+ autoCorrect?: string | undefined;
67
+ autoSave?: string | undefined;
68
+ color?: string | undefined;
69
+ itemProp?: string | undefined;
70
+ itemScope?: boolean | undefined;
71
+ itemType?: string | undefined;
72
+ itemID?: string | undefined;
73
+ itemRef?: string | undefined;
74
+ results?: number | undefined;
75
+ security?: string | undefined;
76
+ unselectable?: "on" | "off" | undefined;
77
+ popover?: "" | "auto" | "manual" | "hint" | undefined;
78
+ popoverTargetAction?: "toggle" | "show" | "hide" | undefined;
79
+ popoverTarget?: string | undefined;
80
+ inert?: boolean | undefined;
81
+ inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined;
82
+ is?: string | undefined;
83
+ exportparts?: string | undefined;
84
+ part?: string | undefined;
85
+ "aria-activedescendant"?: string | undefined;
37
86
  "aria-atomic"?: (boolean | "true" | "false") | undefined;
38
- "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined | undefined;
39
- "aria-braillelabel"?: string | undefined | undefined;
40
- "aria-brailleroledescription"?: string | undefined | undefined;
87
+ "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined;
88
+ "aria-braillelabel"?: string | undefined;
89
+ "aria-brailleroledescription"?: string | undefined;
41
90
  "aria-busy"?: (boolean | "true" | "false") | undefined;
42
- "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
43
- "aria-colcount"?: number | undefined | undefined;
44
- "aria-colindex"?: number | undefined | undefined;
45
- "aria-colindextext"?: string | undefined | undefined;
46
- "aria-colspan"?: number | undefined | undefined;
47
- "aria-controls"?: string | undefined | undefined;
91
+ "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined;
92
+ "aria-colcount"?: number | undefined;
93
+ "aria-colindex"?: number | undefined;
94
+ "aria-colindextext"?: string | undefined;
95
+ "aria-colspan"?: number | undefined;
96
+ "aria-controls"?: string | undefined;
48
97
  "aria-current": boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined;
49
- "aria-describedby"?: string | undefined | undefined;
50
- "aria-description"?: string | undefined | undefined;
51
- "aria-details"?: string | undefined | undefined;
98
+ "aria-describedby"?: string | undefined;
99
+ "aria-description"?: string | undefined;
100
+ "aria-details"?: string | undefined;
52
101
  "aria-disabled"?: (boolean | "true" | "false") | undefined;
53
- "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined | undefined;
54
- "aria-errormessage"?: string | undefined | undefined;
102
+ "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined;
103
+ "aria-errormessage"?: string | undefined;
55
104
  "aria-expanded"?: (boolean | "true" | "false") | undefined;
56
- "aria-flowto"?: string | undefined | undefined;
105
+ "aria-flowto"?: string | undefined;
57
106
  "aria-grabbed"?: (boolean | "true" | "false") | undefined;
58
- "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined | undefined;
107
+ "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined;
59
108
  "aria-hidden"?: (boolean | "true" | "false") | undefined;
60
- "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined | undefined;
61
- "aria-keyshortcuts"?: string | undefined | undefined;
62
- "aria-label"?: string | undefined | undefined;
63
- "aria-labelledby"?: string | undefined | undefined;
64
- "aria-level"?: number | undefined | undefined;
65
- "aria-live"?: "off" | "assertive" | "polite" | undefined | undefined;
109
+ "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined;
110
+ "aria-keyshortcuts"?: string | undefined;
111
+ "aria-label"?: string | undefined;
112
+ "aria-labelledby"?: string | undefined;
113
+ "aria-level"?: number | undefined;
114
+ "aria-live"?: "off" | "assertive" | "polite" | undefined;
66
115
  "aria-modal"?: (boolean | "true" | "false") | undefined;
67
116
  "aria-multiline"?: (boolean | "true" | "false") | undefined;
68
117
  "aria-multiselectable"?: (boolean | "true" | "false") | undefined;
69
- "aria-orientation"?: "horizontal" | "vertical" | undefined | undefined;
70
- "aria-owns"?: string | undefined | undefined;
71
- "aria-placeholder"?: string | undefined | undefined;
72
- "aria-posinset"?: number | undefined | undefined;
73
- "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
118
+ "aria-orientation"?: "horizontal" | "vertical" | undefined;
119
+ "aria-owns"?: string | undefined;
120
+ "aria-placeholder"?: string | undefined;
121
+ "aria-posinset"?: number | undefined;
122
+ "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined;
74
123
  "aria-readonly"?: (boolean | "true" | "false") | undefined;
75
- "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined | undefined;
124
+ "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined;
76
125
  "aria-required"?: (boolean | "true" | "false") | undefined;
77
- "aria-roledescription"?: string | undefined | undefined;
78
- "aria-rowcount"?: number | undefined | undefined;
79
- "aria-rowindex"?: number | undefined | undefined;
80
- "aria-rowindextext"?: string | undefined | undefined;
81
- "aria-rowspan"?: number | undefined | undefined;
126
+ "aria-roledescription"?: string | undefined;
127
+ "aria-rowcount"?: number | undefined;
128
+ "aria-rowindex"?: number | undefined;
129
+ "aria-rowindextext"?: string | undefined;
130
+ "aria-rowspan"?: number | undefined;
82
131
  "aria-selected"?: (boolean | "true" | "false") | undefined;
83
- "aria-setsize"?: number | undefined | undefined;
84
- "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined | undefined;
85
- "aria-valuemax"?: number | undefined | undefined;
86
- "aria-valuemin"?: number | undefined | undefined;
87
- "aria-valuenow"?: number | undefined | undefined;
88
- "aria-valuetext"?: string | undefined | undefined;
132
+ "aria-setsize"?: number | undefined;
133
+ "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined;
134
+ "aria-valuemax"?: number | undefined;
135
+ "aria-valuemin"?: number | undefined;
136
+ "aria-valuenow"?: number | undefined;
137
+ "aria-valuetext"?: string | undefined;
89
138
  dangerouslySetInnerHTML?: {
90
139
  __html: string | TrustedHTML;
91
- } | undefined | undefined;
140
+ } | undefined;
92
141
  onCopy?: import("react").ClipboardEventHandler<HTMLAnchorElement> | undefined;
93
142
  onCopyCapture?: import("react").ClipboardEventHandler<HTMLAnchorElement> | undefined;
94
143
  onCut?: import("react").ClipboardEventHandler<HTMLAnchorElement> | undefined;
@@ -257,54 +306,6 @@ export declare function FloatBarItem({ href, current, icon, className, children,
257
306
  onTransitionRunCapture?: import("react").TransitionEventHandler<HTMLAnchorElement> | undefined;
258
307
  onTransitionStart?: import("react").TransitionEventHandler<HTMLAnchorElement> | undefined;
259
308
  onTransitionStartCapture?: import("react").TransitionEventHandler<HTMLAnchorElement> | undefined;
260
- key?: import("react").Key | null | undefined;
261
- defaultChecked?: boolean | undefined | undefined;
262
- defaultValue?: string | number | readonly string[] | undefined;
263
- suppressContentEditableWarning?: boolean | undefined | undefined;
264
- accessKey?: string | undefined | undefined;
265
- autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {}) | undefined;
266
- autoFocus?: boolean | undefined | undefined;
267
- contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
268
- contextMenu?: string | undefined | undefined;
269
- dir?: string | undefined | undefined;
270
- draggable?: (boolean | "true" | "false") | undefined;
271
- enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
272
- hidden?: boolean | undefined | undefined;
273
- spellCheck?: (boolean | "true" | "false") | undefined;
274
- translate?: "yes" | "no" | undefined | undefined;
275
- radioGroup?: string | undefined | undefined;
276
- about?: string | undefined | undefined;
277
- content?: string | undefined | undefined;
278
- datatype?: string | undefined | undefined;
279
- inlist?: any;
280
- prefix?: string | undefined | undefined;
281
- property?: string | undefined | undefined;
282
- rel?: string | undefined | undefined;
283
- resource?: string | undefined | undefined;
284
- rev?: string | undefined | undefined;
285
- typeof?: string | undefined | undefined;
286
- vocab?: string | undefined | undefined;
287
- autoCorrect?: string | undefined | undefined;
288
- autoSave?: string | undefined | undefined;
289
- itemProp?: string | undefined | undefined;
290
- itemScope?: boolean | undefined | undefined;
291
- itemType?: string | undefined | undefined;
292
- itemID?: string | undefined | undefined;
293
- itemRef?: string | undefined | undefined;
294
- results?: number | undefined | undefined;
295
- security?: string | undefined | undefined;
296
- unselectable?: "on" | "off" | undefined | undefined;
297
- popover?: "" | "auto" | "manual" | "hint" | undefined | undefined;
298
- popoverTargetAction?: "toggle" | "show" | "hide" | undefined | undefined;
299
- popoverTarget?: string | undefined | undefined;
300
- inert?: boolean | undefined | undefined;
301
- inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined | undefined;
302
- is?: string | undefined | undefined;
303
- exportparts?: string | undefined | undefined;
304
- download?: any;
305
- hrefLang?: string | undefined | undefined;
306
- ping?: string | undefined | undefined;
307
- referrerPolicy?: import("react").HTMLAttributeReferrerPolicy | undefined;
308
309
  href: string | undefined;
309
310
  className: string;
310
- }, HTMLElement>;
311
+ }, HTMLAnchorElement>;
@@ -1,5 +1,5 @@
1
- import type { ComponentPropsWithoutRef } from 'react';
2
- export interface PagerAtProps extends Omit<ComponentPropsWithoutRef<'span'>, 'children'> {
1
+ import type { ComponentProps } from 'react';
2
+ export interface PagerAtProps extends Omit<ComponentProps<'span'>, 'children'> {
3
3
  /** the current page, 1-based */
4
4
  at: number;
5
5
  /** how many pages */