@usableapp/cardds 0.1.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 (170) hide show
  1. package/README.md +562 -0
  2. package/cardds.css +18 -0
  3. package/cardds.js +473 -0
  4. package/css/actions.css +292 -0
  5. package/css/base.css +128 -0
  6. package/css/card.css +283 -0
  7. package/css/choice.css +297 -0
  8. package/css/fonts.css +37 -0
  9. package/css/forms.css +64 -0
  10. package/css/journey.css +61 -0
  11. package/css/layover.css +243 -0
  12. package/css/lists.css +142 -0
  13. package/css/media.css +232 -0
  14. package/css/numbers.css +258 -0
  15. package/css/palette.css +112 -0
  16. package/css/people.css +79 -0
  17. package/css/sheet.css +295 -0
  18. package/css/stack.css +262 -0
  19. package/css/step.css +71 -0
  20. package/css/tokens.css +177 -0
  21. package/dist/actions/Btn.d.ts +311 -0
  22. package/dist/actions/Btn.js +14 -0
  23. package/dist/actions/BtnRow.d.ts +5 -0
  24. package/dist/actions/BtnRow.js +6 -0
  25. package/dist/actions/Chip.d.ts +328 -0
  26. package/dist/actions/Chip.js +25 -0
  27. package/dist/actions/Dot.d.ts +7 -0
  28. package/dist/actions/Dot.js +6 -0
  29. package/dist/actions/Dropdown.d.ts +34 -0
  30. package/dist/actions/Dropdown.js +19 -0
  31. package/dist/actions/Fab.d.ts +9 -0
  32. package/dist/actions/Fab.js +7 -0
  33. package/dist/actions/IconBtn.d.ts +308 -0
  34. package/dist/actions/IconBtn.js +8 -0
  35. package/dist/actions/Link.d.ts +301 -0
  36. package/dist/actions/Link.js +8 -0
  37. package/dist/actions/Segment.d.ts +11 -0
  38. package/dist/actions/Segment.js +10 -0
  39. package/dist/cardds.css +3068 -0
  40. package/dist/cards/Card.d.ts +310 -0
  41. package/dist/cards/Card.js +14 -0
  42. package/dist/cards/CardFoot.d.ts +5 -0
  43. package/dist/cards/CardFoot.js +6 -0
  44. package/dist/cards/CardHead.d.ts +21 -0
  45. package/dist/cards/CardHead.js +11 -0
  46. package/dist/cards/CardParts.d.ts +25 -0
  47. package/dist/cards/CardParts.js +26 -0
  48. package/dist/cards/Placeholder.d.ts +9 -0
  49. package/dist/cards/Placeholder.js +6 -0
  50. package/dist/cards/Stat.d.ts +17 -0
  51. package/dist/cards/Stat.js +14 -0
  52. package/dist/choice/Calendar.d.ts +23 -0
  53. package/dist/choice/Calendar.js +7 -0
  54. package/dist/choice/Check.d.ts +14 -0
  55. package/dist/choice/Check.js +10 -0
  56. package/dist/choice/DayStrip.d.ts +16 -0
  57. package/dist/choice/DayStrip.js +10 -0
  58. package/dist/choice/Mood.d.ts +11 -0
  59. package/dist/choice/Mood.js +6 -0
  60. package/dist/choice/Slider.d.ts +11 -0
  61. package/dist/choice/Slider.js +14 -0
  62. package/dist/cx.d.ts +2 -0
  63. package/dist/cx.js +2 -0
  64. package/dist/forms/AddRow.d.ts +5 -0
  65. package/dist/forms/AddRow.js +7 -0
  66. package/dist/forms/Composer.d.ts +13 -0
  67. package/dist/forms/Composer.js +6 -0
  68. package/dist/forms/Field.d.ts +17 -0
  69. package/dist/forms/Field.js +10 -0
  70. package/dist/forms/FileBtn.d.ts +18 -0
  71. package/dist/forms/FileBtn.js +10 -0
  72. package/dist/forms/Pin.d.ts +19 -0
  73. package/dist/forms/Pin.js +27 -0
  74. package/dist/index.d.ts +72 -0
  75. package/dist/index.js +75 -0
  76. package/dist/journey/NoteRow.d.ts +7 -0
  77. package/dist/journey/NoteRow.js +7 -0
  78. package/dist/journey/Route.d.ts +18 -0
  79. package/dist/journey/Route.js +8 -0
  80. package/dist/journey/TileBadge.d.ts +15 -0
  81. package/dist/journey/TileBadge.js +6 -0
  82. package/dist/layover/Banner.d.ts +9 -0
  83. package/dist/layover/Banner.js +6 -0
  84. package/dist/layover/Callout.d.ts +10 -0
  85. package/dist/layover/Callout.js +6 -0
  86. package/dist/layover/Deck.d.ts +9 -0
  87. package/dist/layover/Deck.js +10 -0
  88. package/dist/lists/Kv.d.ts +27 -0
  89. package/dist/lists/Kv.js +19 -0
  90. package/dist/lists/Legend.d.ts +11 -0
  91. package/dist/lists/Legend.js +11 -0
  92. package/dist/lists/Row.d.ts +319 -0
  93. package/dist/lists/Row.js +17 -0
  94. package/dist/lists/Timeline.d.ts +11 -0
  95. package/dist/lists/Timeline.js +10 -0
  96. package/dist/media/MapArea.d.ts +20 -0
  97. package/dist/media/MapArea.js +11 -0
  98. package/dist/media/Mosaic.d.ts +11 -0
  99. package/dist/media/Mosaic.js +10 -0
  100. package/dist/media/Postcard.d.ts +20 -0
  101. package/dist/media/Postcard.js +10 -0
  102. package/dist/media/Quote.d.ts +11 -0
  103. package/dist/media/Quote.js +6 -0
  104. package/dist/media/Tile.d.ts +320 -0
  105. package/dist/media/Tile.js +16 -0
  106. package/dist/numbers/Badge.d.ts +7 -0
  107. package/dist/numbers/Badge.js +6 -0
  108. package/dist/numbers/Band.d.ts +16 -0
  109. package/dist/numbers/Band.js +10 -0
  110. package/dist/numbers/Bars.d.ts +14 -0
  111. package/dist/numbers/Bars.js +10 -0
  112. package/dist/numbers/DotGrid.d.ts +12 -0
  113. package/dist/numbers/DotGrid.js +6 -0
  114. package/dist/numbers/Picker.d.ts +13 -0
  115. package/dist/numbers/Picker.js +18 -0
  116. package/dist/numbers/Ring.d.ts +15 -0
  117. package/dist/numbers/Ring.js +6 -0
  118. package/dist/numbers/Track.d.ts +12 -0
  119. package/dist/numbers/Track.js +10 -0
  120. package/dist/people/Avatar.d.ts +314 -0
  121. package/dist/people/Avatar.js +13 -0
  122. package/dist/people/AvatarPick.d.ts +18 -0
  123. package/dist/people/AvatarPick.js +10 -0
  124. package/dist/scaffold/ActionBar.d.ts +21 -0
  125. package/dist/scaffold/ActionBar.js +16 -0
  126. package/dist/scaffold/AppBar.d.ts +18 -0
  127. package/dist/scaffold/AppBar.js +10 -0
  128. package/dist/scaffold/Centre.d.ts +30 -0
  129. package/dist/scaffold/Centre.js +41 -0
  130. package/dist/scaffold/EmptyState.d.ts +14 -0
  131. package/dist/scaffold/EmptyState.js +8 -0
  132. package/dist/scaffold/FilterRow.d.ts +5 -0
  133. package/dist/scaffold/FilterRow.js +6 -0
  134. package/dist/scaffold/FloatBar.d.ts +310 -0
  135. package/dist/scaffold/FloatBar.js +15 -0
  136. package/dist/scaffold/PagerAt.d.ts +11 -0
  137. package/dist/scaffold/PagerAt.js +6 -0
  138. package/dist/scaffold/Screen.d.ts +299 -0
  139. package/dist/scaffold/Screen.js +11 -0
  140. package/dist/scaffold/Section.d.ts +12 -0
  141. package/dist/scaffold/Section.js +13 -0
  142. package/dist/scaffold/TopBar.d.ts +15 -0
  143. package/dist/scaffold/TopBar.js +9 -0
  144. package/dist/sheets/CardBack.d.ts +7 -0
  145. package/dist/sheets/CardBack.js +7 -0
  146. package/dist/sheets/Drawer.d.ts +17 -0
  147. package/dist/sheets/Drawer.js +16 -0
  148. package/dist/sheets/Sheet.d.ts +21 -0
  149. package/dist/sheets/Sheet.js +13 -0
  150. package/dist/sheets/SheetBody.d.ts +5 -0
  151. package/dist/sheets/SheetBody.js +6 -0
  152. package/dist/sheets/SheetHead.d.ts +13 -0
  153. package/dist/sheets/SheetHead.js +6 -0
  154. package/dist/sheets/SheetStack.d.ts +21 -0
  155. package/dist/sheets/SheetStack.js +14 -0
  156. package/dist/sheets/SheetStage.d.ts +20 -0
  157. package/dist/sheets/SheetStage.js +11 -0
  158. package/dist/sheets/Step.d.ts +15 -0
  159. package/dist/sheets/Step.js +15 -0
  160. package/dist/type/Icon.d.ts +16 -0
  161. package/dist/type/Icon.js +12 -0
  162. package/dist/type/Text.d.ts +302 -0
  163. package/dist/type/Text.js +16 -0
  164. package/dist/type/icons.d.ts +6 -0
  165. package/dist/type/icons.js +2 -0
  166. package/fonts/LICENSES.md +44 -0
  167. package/fonts/fc-pride-medium.otf +0 -0
  168. package/fonts/pk-nonthaburi-demo.ttf +0 -0
  169. package/icons.svg +61 -0
  170. package/package.json +62 -0
@@ -0,0 +1,314 @@
1
+ import { type ComponentPropsWithoutRef, type ReactNode } from 'react';
2
+ import { type IconName } from '../type/Icon';
3
+ export interface AvatarProps extends ComponentPropsWithoutRef<'span'> {
4
+ /** sm 32px · default 40px · lg 56px · xl 72px (a sheet head's icon ring) */
5
+ size?: 'sm' | 'lg' | 'xl';
6
+ /** no fill, an edge — an icon in a ring */
7
+ outline?: boolean;
8
+ /** the dashed "add" slot */
9
+ add?: boolean;
10
+ /** accent: the "+7" tail, the selected person */
11
+ on?: boolean;
12
+ /** faint concentric rings behind a hero avatar */
13
+ halo?: boolean;
14
+ /** centred in a sheet head */
15
+ center?: boolean;
16
+ /** a photo instead of initials */
17
+ src?: string;
18
+ alt?: string;
19
+ /** an icon instead of initials */
20
+ icon?: IconName;
21
+ as?: 'span' | 'a' | 'button';
22
+ href?: string;
23
+ /** the initials */
24
+ children?: ReactNode;
25
+ }
26
+ /** Avatar — initials by default, a photo or an Icon when there is one; sizes are the tokens. */
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;
29
+ 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;
37
+ role?: import("react").AriaRole | undefined;
38
+ tabIndex?: number | undefined | undefined;
39
+ "aria-activedescendant"?: string | undefined | undefined;
40
+ "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;
44
+ "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;
55
+ "aria-disabled"?: (boolean | "true" | "false") | undefined;
56
+ "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined | undefined;
57
+ "aria-errormessage"?: string | undefined | undefined;
58
+ "aria-expanded"?: (boolean | "true" | "false") | undefined;
59
+ "aria-flowto"?: string | undefined | undefined;
60
+ "aria-grabbed"?: (boolean | "true" | "false") | undefined;
61
+ "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined | undefined;
62
+ "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;
69
+ "aria-modal"?: (boolean | "true" | "false") | undefined;
70
+ "aria-multiline"?: (boolean | "true" | "false") | undefined;
71
+ "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;
77
+ "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;
79
+ "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;
85
+ "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;
92
+ dangerouslySetInnerHTML?: {
93
+ __html: string | TrustedHTML;
94
+ } | undefined | undefined;
95
+ onCopy?: import("react").ClipboardEventHandler<HTMLSpanElement> | undefined;
96
+ onCopyCapture?: import("react").ClipboardEventHandler<HTMLSpanElement> | undefined;
97
+ onCut?: import("react").ClipboardEventHandler<HTMLSpanElement> | undefined;
98
+ onCutCapture?: import("react").ClipboardEventHandler<HTMLSpanElement> | undefined;
99
+ onPaste?: import("react").ClipboardEventHandler<HTMLSpanElement> | undefined;
100
+ onPasteCapture?: import("react").ClipboardEventHandler<HTMLSpanElement> | undefined;
101
+ onCompositionEnd?: import("react").CompositionEventHandler<HTMLSpanElement> | undefined;
102
+ onCompositionEndCapture?: import("react").CompositionEventHandler<HTMLSpanElement> | undefined;
103
+ onCompositionStart?: import("react").CompositionEventHandler<HTMLSpanElement> | undefined;
104
+ onCompositionStartCapture?: import("react").CompositionEventHandler<HTMLSpanElement> | undefined;
105
+ onCompositionUpdate?: import("react").CompositionEventHandler<HTMLSpanElement> | undefined;
106
+ onCompositionUpdateCapture?: import("react").CompositionEventHandler<HTMLSpanElement> | undefined;
107
+ onFocus?: import("react").FocusEventHandler<HTMLSpanElement> | undefined;
108
+ onFocusCapture?: import("react").FocusEventHandler<HTMLSpanElement> | undefined;
109
+ onBlur?: import("react").FocusEventHandler<HTMLSpanElement> | undefined;
110
+ onBlurCapture?: import("react").FocusEventHandler<HTMLSpanElement> | undefined;
111
+ onChange?: import("react").ChangeEventHandler<HTMLSpanElement, Element> | undefined;
112
+ onChangeCapture?: import("react").ChangeEventHandler<HTMLSpanElement, Element> | undefined;
113
+ onBeforeInput?: import("react").InputEventHandler<HTMLSpanElement> | undefined;
114
+ onBeforeInputCapture?: import("react").InputEventHandler<HTMLSpanElement> | undefined;
115
+ onInput?: import("react").InputEventHandler<HTMLSpanElement> | undefined;
116
+ onInputCapture?: import("react").InputEventHandler<HTMLSpanElement> | undefined;
117
+ onReset?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
118
+ onResetCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
119
+ onSubmit?: import("react").SubmitEventHandler<HTMLSpanElement> | undefined;
120
+ onSubmitCapture?: import("react").SubmitEventHandler<HTMLSpanElement> | undefined;
121
+ onInvalid?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
122
+ onInvalidCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
123
+ onLoad?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
124
+ onLoadCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
125
+ onError?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
126
+ onErrorCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
127
+ onKeyDown?: import("react").KeyboardEventHandler<HTMLSpanElement> | undefined;
128
+ onKeyDownCapture?: import("react").KeyboardEventHandler<HTMLSpanElement> | undefined;
129
+ onKeyPress?: import("react").KeyboardEventHandler<HTMLSpanElement> | undefined;
130
+ onKeyPressCapture?: import("react").KeyboardEventHandler<HTMLSpanElement> | undefined;
131
+ onKeyUp?: import("react").KeyboardEventHandler<HTMLSpanElement> | undefined;
132
+ onKeyUpCapture?: import("react").KeyboardEventHandler<HTMLSpanElement> | undefined;
133
+ onAbort?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
134
+ onAbortCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
135
+ onCanPlay?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
136
+ onCanPlayCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
137
+ onCanPlayThrough?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
138
+ onCanPlayThroughCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
139
+ onDurationChange?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
140
+ onDurationChangeCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
141
+ onEmptied?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
142
+ onEmptiedCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
143
+ onEncrypted?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
144
+ onEncryptedCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
145
+ onEnded?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
146
+ onEndedCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
147
+ onLoadedData?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
148
+ onLoadedDataCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
149
+ onLoadedMetadata?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
150
+ onLoadedMetadataCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
151
+ onLoadStart?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
152
+ onLoadStartCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
153
+ onPause?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
154
+ onPauseCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
155
+ onPlay?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
156
+ onPlayCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
157
+ onPlaying?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
158
+ onPlayingCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
159
+ onProgress?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
160
+ onProgressCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
161
+ onRateChange?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
162
+ onRateChangeCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
163
+ onSeeked?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
164
+ onSeekedCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
165
+ onSeeking?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
166
+ onSeekingCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
167
+ onStalled?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
168
+ onStalledCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
169
+ onSuspend?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
170
+ onSuspendCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
171
+ onTimeUpdate?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
172
+ onTimeUpdateCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
173
+ onVolumeChange?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
174
+ onVolumeChangeCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
175
+ onWaiting?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
176
+ onWaitingCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
177
+ onAuxClick?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
178
+ onAuxClickCapture?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
179
+ onClick?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
180
+ onClickCapture?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
181
+ onContextMenu?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
182
+ onContextMenuCapture?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
183
+ onDoubleClick?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
184
+ onDoubleClickCapture?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
185
+ onDrag?: import("react").DragEventHandler<HTMLSpanElement> | undefined;
186
+ onDragCapture?: import("react").DragEventHandler<HTMLSpanElement> | undefined;
187
+ onDragEnd?: import("react").DragEventHandler<HTMLSpanElement> | undefined;
188
+ onDragEndCapture?: import("react").DragEventHandler<HTMLSpanElement> | undefined;
189
+ onDragEnter?: import("react").DragEventHandler<HTMLSpanElement> | undefined;
190
+ onDragEnterCapture?: import("react").DragEventHandler<HTMLSpanElement> | undefined;
191
+ onDragExit?: import("react").DragEventHandler<HTMLSpanElement> | undefined;
192
+ onDragExitCapture?: import("react").DragEventHandler<HTMLSpanElement> | undefined;
193
+ onDragLeave?: import("react").DragEventHandler<HTMLSpanElement> | undefined;
194
+ onDragLeaveCapture?: import("react").DragEventHandler<HTMLSpanElement> | undefined;
195
+ onDragOver?: import("react").DragEventHandler<HTMLSpanElement> | undefined;
196
+ onDragOverCapture?: import("react").DragEventHandler<HTMLSpanElement> | undefined;
197
+ onDragStart?: import("react").DragEventHandler<HTMLSpanElement> | undefined;
198
+ onDragStartCapture?: import("react").DragEventHandler<HTMLSpanElement> | undefined;
199
+ onDrop?: import("react").DragEventHandler<HTMLSpanElement> | undefined;
200
+ onDropCapture?: import("react").DragEventHandler<HTMLSpanElement> | undefined;
201
+ onMouseDown?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
202
+ onMouseDownCapture?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
203
+ onMouseEnter?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
204
+ onMouseLeave?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
205
+ onMouseMove?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
206
+ onMouseMoveCapture?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
207
+ onMouseOut?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
208
+ onMouseOutCapture?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
209
+ onMouseOver?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
210
+ onMouseOverCapture?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
211
+ onMouseUp?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
212
+ onMouseUpCapture?: import("react").MouseEventHandler<HTMLSpanElement> | undefined;
213
+ onSelect?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
214
+ onSelectCapture?: import("react").ReactEventHandler<HTMLSpanElement> | undefined;
215
+ onTouchCancel?: import("react").TouchEventHandler<HTMLSpanElement> | undefined;
216
+ onTouchCancelCapture?: import("react").TouchEventHandler<HTMLSpanElement> | undefined;
217
+ onTouchEnd?: import("react").TouchEventHandler<HTMLSpanElement> | undefined;
218
+ onTouchEndCapture?: import("react").TouchEventHandler<HTMLSpanElement> | undefined;
219
+ onTouchMove?: import("react").TouchEventHandler<HTMLSpanElement> | undefined;
220
+ onTouchMoveCapture?: import("react").TouchEventHandler<HTMLSpanElement> | undefined;
221
+ onTouchStart?: import("react").TouchEventHandler<HTMLSpanElement> | undefined;
222
+ onTouchStartCapture?: import("react").TouchEventHandler<HTMLSpanElement> | undefined;
223
+ onPointerDown?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
224
+ onPointerDownCapture?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
225
+ onPointerMove?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
226
+ onPointerMoveCapture?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
227
+ onPointerUp?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
228
+ onPointerUpCapture?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
229
+ onPointerCancel?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
230
+ onPointerCancelCapture?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
231
+ onPointerEnter?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
232
+ onPointerLeave?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
233
+ onPointerOver?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
234
+ onPointerOverCapture?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
235
+ onPointerOut?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
236
+ onPointerOutCapture?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
237
+ onGotPointerCapture?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
238
+ onGotPointerCaptureCapture?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
239
+ onLostPointerCapture?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
240
+ onLostPointerCaptureCapture?: import("react").PointerEventHandler<HTMLSpanElement> | undefined;
241
+ onScroll?: import("react").UIEventHandler<HTMLSpanElement> | undefined;
242
+ onScrollCapture?: import("react").UIEventHandler<HTMLSpanElement> | undefined;
243
+ onScrollEnd?: import("react").UIEventHandler<HTMLSpanElement> | undefined;
244
+ onScrollEndCapture?: import("react").UIEventHandler<HTMLSpanElement> | undefined;
245
+ onWheel?: import("react").WheelEventHandler<HTMLSpanElement> | undefined;
246
+ onWheelCapture?: import("react").WheelEventHandler<HTMLSpanElement> | undefined;
247
+ onAnimationStart?: import("react").AnimationEventHandler<HTMLSpanElement> | undefined;
248
+ onAnimationStartCapture?: import("react").AnimationEventHandler<HTMLSpanElement> | undefined;
249
+ onAnimationEnd?: import("react").AnimationEventHandler<HTMLSpanElement> | undefined;
250
+ onAnimationEndCapture?: import("react").AnimationEventHandler<HTMLSpanElement> | undefined;
251
+ onAnimationIteration?: import("react").AnimationEventHandler<HTMLSpanElement> | undefined;
252
+ onAnimationIterationCapture?: import("react").AnimationEventHandler<HTMLSpanElement> | undefined;
253
+ onToggle?: import("react").ToggleEventHandler<HTMLSpanElement> | undefined;
254
+ onBeforeToggle?: import("react").ToggleEventHandler<HTMLSpanElement> | undefined;
255
+ onTransitionCancel?: import("react").TransitionEventHandler<HTMLSpanElement> | undefined;
256
+ onTransitionCancelCapture?: import("react").TransitionEventHandler<HTMLSpanElement> | undefined;
257
+ onTransitionEnd?: import("react").TransitionEventHandler<HTMLSpanElement> | undefined;
258
+ onTransitionEndCapture?: import("react").TransitionEventHandler<HTMLSpanElement> | undefined;
259
+ onTransitionRun?: import("react").TransitionEventHandler<HTMLSpanElement> | undefined;
260
+ onTransitionRunCapture?: import("react").TransitionEventHandler<HTMLSpanElement> | undefined;
261
+ onTransitionStart?: import("react").TransitionEventHandler<HTMLSpanElement> | undefined;
262
+ 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
+ href: string | undefined;
308
+ type: string | undefined;
309
+ className: string;
310
+ }, HTMLElement>;
311
+ export interface AvatarStackProps extends ComponentPropsWithoutRef<'span'> {
312
+ }
313
+ /** AvatarStack — overlapping small Avatars with an optional `on` "+N" tail. */
314
+ export declare function AvatarStack({ className, ...rest }: AvatarStackProps): import("react").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createElement } from 'react';
3
+ import { cx } from '../cx';
4
+ import { Icon } from '../type/Icon';
5
+ /** Avatar — initials by default, a photo or an Icon when there is one; sizes are the tokens. */
6
+ export function Avatar({ size, outline, add, on, halo, center, src, alt = '', icon, as, href, className, children, ...rest }) {
7
+ const el = as ?? (href ? 'a' : 'span');
8
+ return createElement(el, { href, type: el === 'button' ? 'button' : undefined, className: cx('avatar', size && `avatar--${size}`, outline && 'avatar--outline', add && 'avatar--add', on && 'avatar--on', halo && 'avatar--halo', center && 'avatar--center', className), ...rest }, src ? _jsx("img", { src: src, alt: alt }) : icon ? _jsx(Icon, { name: icon }) : children);
9
+ }
10
+ /** AvatarStack — overlapping small Avatars with an optional `on` "+N" tail. */
11
+ export function AvatarStack({ className, ...rest }) {
12
+ return _jsx("span", { className: cx('avatar-stack', className), ...rest });
13
+ }
@@ -0,0 +1,18 @@
1
+ import type { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ export interface AvatarPickProps extends ComponentPropsWithoutRef<'div'> {
3
+ /** run the strip to the card's edges */
4
+ bleed?: boolean;
5
+ label?: string;
6
+ }
7
+ /** AvatarPick — the chooser row: big heads with name and role under, scrolling sideways; children are AvatarPickItems. */
8
+ export declare function AvatarPick({ bleed, label, className, ...rest }: AvatarPickProps): import("react").JSX.Element;
9
+ export interface AvatarPickItemProps extends Omit<ComponentPropsWithoutRef<'button'>, 'name' | 'role'> {
10
+ /** the name under the head */
11
+ name: ReactNode;
12
+ /** the role under the name */
13
+ role?: ReactNode;
14
+ /** the Avatar (lg) */
15
+ children?: ReactNode;
16
+ }
17
+ /** AvatarPickItem — one person in an AvatarPick: an `Avatar size="lg"`, a name, a role. */
18
+ export declare function AvatarPickItem({ name, role, className, children, ...rest }: AvatarPickItemProps): import("react").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from '../cx';
3
+ /** AvatarPick — the chooser row: big heads with name and role under, scrolling sideways; children are AvatarPickItems. */
4
+ export function AvatarPick({ bleed, label, className, ...rest }) {
5
+ return _jsx("div", { className: cx('avatar-pick', bleed && 'bleed', className), "aria-label": label, ...rest });
6
+ }
7
+ /** AvatarPickItem — one person in an AvatarPick: an `Avatar size="lg"`, a name, a role. */
8
+ export function AvatarPickItem({ name, role, className, children, ...rest }) {
9
+ return (_jsxs("button", { type: "button", className: cx('avatar-pick__item', className), ...rest, children: [children, _jsx("span", { className: "avatar-pick__name", children: name }), role != null && _jsx("span", { className: "avatar-pick__role", children: role })] }));
10
+ }
@@ -0,0 +1,21 @@
1
+ import type { ComponentPropsWithoutRef } from 'react';
2
+ export interface ActionBarProps extends ComponentPropsWithoutRef<'div'> {
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
+ variant?: 'pager' | 'tiers';
5
+ /** render in flow instead of fixed to the viewport bottom (for a preview or a mock frame); the real bar is fixed */
6
+ inline?: boolean;
7
+ }
8
+ /**
9
+ * ActionBar — the screen's ONE move, fixed at the bottom, OUTSIDE the Screen/Step (a sibling after it).
10
+ * Plain: one wide primary Btn (the step that commits). `pager`: Back + Next as peers — buttons only; where you are is the
11
+ * PagerAt under the card in a Centre group, never in the bar (Lh, 2026-09-12).
12
+ * `tiers`: an ActionBarTier with a control (a Slider) above the button tier.
13
+ * The parent hosting the bar reserves its room (`--bar-reserve`); never pad a screen for it by hand.
14
+ */
15
+ export declare function ActionBar({ variant, inline, className, style, ...rest }: ActionBarProps): import("react").JSX.Element;
16
+ export interface ActionBarTierProps extends ComponentPropsWithoutRef<'div'> {
17
+ /** the tier that holds the round pager (two IconBtns at the edges) */
18
+ pager?: boolean;
19
+ }
20
+ /** ActionBarTier — one row inside an `ActionBar variant="tiers"`: a control row, or the pager row. */
21
+ export declare function ActionBarTier({ pager, className, ...rest }: ActionBarTierProps): import("react").JSX.Element;
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cx } from '../cx';
3
+ /**
4
+ * ActionBar — the screen's ONE move, fixed at the bottom, OUTSIDE the Screen/Step (a sibling after it).
5
+ * Plain: one wide primary Btn (the step that commits). `pager`: Back + Next as peers — buttons only; where you are is the
6
+ * PagerAt under the card in a Centre group, never in the bar (Lh, 2026-09-12).
7
+ * `tiers`: an ActionBarTier with a control (a Slider) above the button tier.
8
+ * The parent hosting the bar reserves its room (`--bar-reserve`); never pad a screen for it by hand.
9
+ */
10
+ export function ActionBar({ variant, inline, className, style, ...rest }) {
11
+ return (_jsx("div", { className: cx('action-bar', variant && `action-bar--${variant}`, className), style: inline ? { position: 'static', width: '100%', maxWidth: 'none', paddingInline: 0, ...style } : style, ...rest }));
12
+ }
13
+ /** ActionBarTier — one row inside an `ActionBar variant="tiers"`: a control row, or the pager row. */
14
+ export function ActionBarTier({ pager, className, ...rest }) {
15
+ return _jsx("div", { className: cx('action-bar__tier', pager && 'action-bar__tier--pager', className), ...rest });
16
+ }
@@ -0,0 +1,18 @@
1
+ import type { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ export interface AppBarProps extends Omit<ComponentPropsWithoutRef<'header'>, 'title'> {
3
+ /** the app or brand mark on the left (an Icon) */
4
+ icon?: ReactNode;
5
+ /** the context: which app, which place, which account */
6
+ title: ReactNode;
7
+ /** the second line under the title */
8
+ sub?: ReactNode;
9
+ /** the trailing control(s) — an IconBtn with a chevron-down to switch context; on the home bar a labelled
10
+ * switch chip (ChipToggle, --tap tall here) and the wallet Btn, side by side (Lh 2026-09-13) */
11
+ action?: ReactNode;
12
+ }
13
+ /**
14
+ * AppBar — the app-context bar fixed at the very top: logo · two-line label · switcher.
15
+ * It is fixed, so the Screen it sits in reserves its height (`--header-h`, 60px) automatically.
16
+ * Use a TopBar for a screen title; use both when the app context matters (home).
17
+ */
18
+ export declare function AppBar({ icon, title, sub, action, className, children, ...rest }: AppBarProps): import("react").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from '../cx';
3
+ /**
4
+ * AppBar — the app-context bar fixed at the very top: logo · two-line label · switcher.
5
+ * It is fixed, so the Screen it sits in reserves its height (`--header-h`, 60px) automatically.
6
+ * Use a TopBar for a screen title; use both when the app context matters (home).
7
+ */
8
+ export function AppBar({ icon, title, sub, action, className, children, ...rest }) {
9
+ return (_jsxs("header", { className: cx('appbar', className), ...rest, children: [_jsxs("div", { className: "appbar__brand", children: [icon, _jsxs("span", { className: "appbar__text", children: [_jsx("span", { className: "appbar__title", children: title }), sub != null && _jsx("span", { className: "appbar__sub", children: sub })] }), action] }), children] }));
10
+ }
@@ -0,0 +1,30 @@
1
+ import type { ComponentPropsWithoutRef } from 'react';
2
+ export interface CentreProps extends ComponentPropsWithoutRef<'div'> {
3
+ }
4
+ /**
5
+ * Centre — the centred group: ONE thing to read at the human centre of the screen, when that thing is not a lone
6
+ * card: an EmptyState; a Card with its quiet second Btn and the PagerAt under it; a Deck with its DeckActions.
7
+ * On a plain `Screen` (the usual case, Lh 2026-09-12) it is in flow: the column is one phone tall, the group takes
8
+ * the room after the TopBar and centres a short card; a long card makes the page longer and scrolls up under the
9
+ * bar — nothing is capped, nothing shrinks. On a `Screen fill` it floats at 40% down (`--screen-centre`), capped
10
+ * and scrolling inside, for a screen that must never scroll. Its children stack at the screen's rhythm.
11
+ * Put it after the TopBar; the ActionBar, if any, stays outside the Screen.
12
+ */
13
+ export declare function Centre({ className, ...rest }: CentreProps): import("react").JSX.Element;
14
+ export interface PagesProps extends ComponentPropsWithoutRef<'div'> {
15
+ }
16
+ /**
17
+ * Pages — the cards of a walk, all one height: every Card is rendered, stacked in one cell as tall as the
18
+ * tallest at any text size. Give the current one `aria-current="step"` and every other one `inert`
19
+ * (hidden in place, out of the tab order). Goes inside a Centre, above the PagerAt; turn with slideTo().
20
+ */
21
+ export declare function Pages({ className, ...rest }: PagesProps): import("react").JSX.Element;
22
+ /** the direction a Centre's card slides: `next` — out to the left, the new one in from the right; `back` — the reverse */
23
+ export type SlideDirection = 'next' | 'back';
24
+ /**
25
+ * slideTo — turn the page of a `Centre`: run `update` (the state change that swaps the card) inside a view
26
+ * transition with `data-slide` on the root, so the old card slides out and the new one slides in
27
+ * (card.css, `--motion-slide`); the heading and the dots stay still. Without view transitions (the browser
28
+ * floor) it just runs the update.
29
+ */
30
+ export declare function slideTo(direction: SlideDirection, update: () => void): void;
@@ -0,0 +1,41 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { flushSync } from 'react-dom';
3
+ import { cx } from '../cx';
4
+ /**
5
+ * Centre — the centred group: ONE thing to read at the human centre of the screen, when that thing is not a lone
6
+ * card: an EmptyState; a Card with its quiet second Btn and the PagerAt under it; a Deck with its DeckActions.
7
+ * On a plain `Screen` (the usual case, Lh 2026-09-12) it is in flow: the column is one phone tall, the group takes
8
+ * the room after the TopBar and centres a short card; a long card makes the page longer and scrolls up under the
9
+ * bar — nothing is capped, nothing shrinks. On a `Screen fill` it floats at 40% down (`--screen-centre`), capped
10
+ * and scrolling inside, for a screen that must never scroll. Its children stack at the screen's rhythm.
11
+ * Put it after the TopBar; the ActionBar, if any, stays outside the Screen.
12
+ */
13
+ export function Centre({ className, ...rest }) {
14
+ return _jsx("div", { className: cx('screen__centre', className), ...rest });
15
+ }
16
+ /**
17
+ * Pages — the cards of a walk, all one height: every Card is rendered, stacked in one cell as tall as the
18
+ * tallest at any text size. Give the current one `aria-current="step"` and every other one `inert`
19
+ * (hidden in place, out of the tab order). Goes inside a Centre, above the PagerAt; turn with slideTo().
20
+ */
21
+ export function Pages({ className, ...rest }) {
22
+ return _jsx("div", { className: cx('pages', className), ...rest });
23
+ }
24
+ /**
25
+ * slideTo — turn the page of a `Centre`: run `update` (the state change that swaps the card) inside a view
26
+ * transition with `data-slide` on the root, so the old card slides out and the new one slides in
27
+ * (card.css, `--motion-slide`); the heading and the dots stay still. Without view transitions (the browser
28
+ * floor) it just runs the update.
29
+ */
30
+ export function slideTo(direction, update) {
31
+ const root = document.documentElement;
32
+ if (typeof document.startViewTransition !== 'function') {
33
+ update();
34
+ return;
35
+ }
36
+ root.dataset.slide = direction;
37
+ const transition = document.startViewTransition(() => flushSync(update));
38
+ void transition.finished.finally(() => {
39
+ delete root.dataset.slide;
40
+ });
41
+ }
@@ -0,0 +1,14 @@
1
+ import type { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ export interface EmptyStateProps extends Omit<ComponentPropsWithoutRef<'div'>, 'title'> {
3
+ /** the big icon above the words (an `<Icon size="lg" />`) */
4
+ icon?: ReactNode;
5
+ /** the heading */
6
+ title?: ReactNode;
7
+ /** the button under the words */
8
+ action?: ReactNode;
9
+ /** the heading's level: h2 on a surface (default) · h3 inside a card's section, under its h3 heading */
10
+ level?: 'h2' | 'h3';
11
+ }
12
+ /** EmptyState — centred: a large icon, a heading, a line of body text, an optional CTA. On the surface (in a `Centre`)
13
+ * or inside a card's section ("nothing here yet" under a heading) — the ink follows the card it sits in. */
14
+ export declare function EmptyState({ icon, title, action, level, className, children, ...rest }: EmptyStateProps): import("react").JSX.Element;
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from '../cx';
3
+ /** EmptyState — centred: a large icon, a heading, a line of body text, an optional CTA. On the surface (in a `Centre`)
4
+ * or inside a card's section ("nothing here yet" under a heading) — the ink follows the card it sits in. */
5
+ export function EmptyState({ icon, title, action, level = 'h2', className, children, ...rest }) {
6
+ const H = level;
7
+ return (_jsxs("div", { className: cx('empty-state', className), ...rest, children: [icon, title != null && _jsx(H, { className: "t-h2", children: title }), typeof children === 'string' ? _jsx("p", { className: "t-body", children: children }) : children, action != null && _jsx("div", { className: "empty-state__action", children: action })] }));
8
+ }
@@ -0,0 +1,5 @@
1
+ import type { ComponentPropsWithoutRef } from 'react';
2
+ export interface FilterRowProps extends ComponentPropsWithoutRef<'div'> {
3
+ }
4
+ /** FilterRow — a row of Dropdowns sharing the width, under the TopBar (this week · USD). */
5
+ export declare function FilterRow({ className, ...rest }: FilterRowProps): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cx } from '../cx';
3
+ /** FilterRow — a row of Dropdowns sharing the width, under the TopBar (this week · USD). */
4
+ export function FilterRow({ className, ...rest }) {
5
+ return _jsx("div", { className: cx('filter-row', className), ...rest });
6
+ }