@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,299 @@
1
+ import { type ComponentPropsWithoutRef } from 'react';
2
+ export type Palette = 'clay' | 'shine' | 'field' | 'roast' | 'hydro';
3
+ export interface ScreenProps extends ComponentPropsWithoutRef<'div'> {
4
+ /** exactly one phone height (100dvh), clipped: the box a Step or a SheetStack fills — an app screen, not a scrolling page */
5
+ fill?: boolean;
6
+ /** a colour preset from palette.css; omit for the black-and-white wireframe */
7
+ palette?: Palette;
8
+ as?: 'div' | 'main' | 'section';
9
+ }
10
+ /**
11
+ * Screen — the mobile screen column: max 25rem wide, the standard horizontal inset, NO vertical padding
12
+ * (bars reserve their own room). Every screen is base · top menu · bottom menu · content.
13
+ * `fill` makes it one phone height for a Step or a SheetStack; a plain Screen scrolls.
14
+ * Put an AppBar/TopBar first, the content next, and an ActionBar AFTER the screen (outside it).
15
+ */
16
+ export declare function Screen({ fill, palette, as, className, ...rest }: ScreenProps): import("react").DetailedReactHTMLElement<{
17
+ slot?: string | undefined | undefined;
18
+ style?: import("react").CSSProperties | undefined;
19
+ title?: string | undefined | undefined;
20
+ suppressHydrationWarning?: boolean | undefined | undefined;
21
+ color?: string | undefined | undefined;
22
+ id?: string | undefined | undefined;
23
+ lang?: string | undefined | undefined;
24
+ nonce?: string | undefined | undefined;
25
+ part?: string | undefined | undefined;
26
+ role?: import("react").AriaRole | undefined;
27
+ tabIndex?: number | undefined | undefined;
28
+ "aria-activedescendant"?: string | undefined | undefined;
29
+ "aria-atomic"?: (boolean | "true" | "false") | undefined;
30
+ "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined | undefined;
31
+ "aria-braillelabel"?: string | undefined | undefined;
32
+ "aria-brailleroledescription"?: string | undefined | undefined;
33
+ "aria-busy"?: (boolean | "true" | "false") | undefined;
34
+ "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
35
+ "aria-colcount"?: number | undefined | undefined;
36
+ "aria-colindex"?: number | undefined | undefined;
37
+ "aria-colindextext"?: string | undefined | undefined;
38
+ "aria-colspan"?: number | undefined | undefined;
39
+ "aria-controls"?: string | undefined | undefined;
40
+ "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined | undefined;
41
+ "aria-describedby"?: string | undefined | undefined;
42
+ "aria-description"?: string | undefined | undefined;
43
+ "aria-details"?: string | undefined | undefined;
44
+ "aria-disabled"?: (boolean | "true" | "false") | undefined;
45
+ "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined | undefined;
46
+ "aria-errormessage"?: string | undefined | undefined;
47
+ "aria-expanded"?: (boolean | "true" | "false") | undefined;
48
+ "aria-flowto"?: string | undefined | undefined;
49
+ "aria-grabbed"?: (boolean | "true" | "false") | undefined;
50
+ "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined | undefined;
51
+ "aria-hidden"?: (boolean | "true" | "false") | undefined;
52
+ "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined | undefined;
53
+ "aria-keyshortcuts"?: string | undefined | undefined;
54
+ "aria-label"?: string | undefined | undefined;
55
+ "aria-labelledby"?: string | undefined | undefined;
56
+ "aria-level"?: number | undefined | undefined;
57
+ "aria-live"?: "off" | "assertive" | "polite" | undefined | undefined;
58
+ "aria-modal"?: (boolean | "true" | "false") | undefined;
59
+ "aria-multiline"?: (boolean | "true" | "false") | undefined;
60
+ "aria-multiselectable"?: (boolean | "true" | "false") | undefined;
61
+ "aria-orientation"?: "horizontal" | "vertical" | undefined | undefined;
62
+ "aria-owns"?: string | undefined | undefined;
63
+ "aria-placeholder"?: string | undefined | undefined;
64
+ "aria-posinset"?: number | undefined | undefined;
65
+ "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
66
+ "aria-readonly"?: (boolean | "true" | "false") | undefined;
67
+ "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined | undefined;
68
+ "aria-required"?: (boolean | "true" | "false") | undefined;
69
+ "aria-roledescription"?: string | undefined | undefined;
70
+ "aria-rowcount"?: number | undefined | undefined;
71
+ "aria-rowindex"?: number | undefined | undefined;
72
+ "aria-rowindextext"?: string | undefined | undefined;
73
+ "aria-rowspan"?: number | undefined | undefined;
74
+ "aria-selected"?: (boolean | "true" | "false") | undefined;
75
+ "aria-setsize"?: number | undefined | undefined;
76
+ "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined | undefined;
77
+ "aria-valuemax"?: number | undefined | undefined;
78
+ "aria-valuemin"?: number | undefined | undefined;
79
+ "aria-valuenow"?: number | undefined | undefined;
80
+ "aria-valuetext"?: string | undefined | undefined;
81
+ children?: import("react").ReactNode;
82
+ dangerouslySetInnerHTML?: {
83
+ __html: string | TrustedHTML;
84
+ } | undefined | undefined;
85
+ onCopy?: import("react").ClipboardEventHandler<HTMLDivElement> | undefined;
86
+ onCopyCapture?: import("react").ClipboardEventHandler<HTMLDivElement> | undefined;
87
+ onCut?: import("react").ClipboardEventHandler<HTMLDivElement> | undefined;
88
+ onCutCapture?: import("react").ClipboardEventHandler<HTMLDivElement> | undefined;
89
+ onPaste?: import("react").ClipboardEventHandler<HTMLDivElement> | undefined;
90
+ onPasteCapture?: import("react").ClipboardEventHandler<HTMLDivElement> | undefined;
91
+ onCompositionEnd?: import("react").CompositionEventHandler<HTMLDivElement> | undefined;
92
+ onCompositionEndCapture?: import("react").CompositionEventHandler<HTMLDivElement> | undefined;
93
+ onCompositionStart?: import("react").CompositionEventHandler<HTMLDivElement> | undefined;
94
+ onCompositionStartCapture?: import("react").CompositionEventHandler<HTMLDivElement> | undefined;
95
+ onCompositionUpdate?: import("react").CompositionEventHandler<HTMLDivElement> | undefined;
96
+ onCompositionUpdateCapture?: import("react").CompositionEventHandler<HTMLDivElement> | undefined;
97
+ onFocus?: import("react").FocusEventHandler<HTMLDivElement> | undefined;
98
+ onFocusCapture?: import("react").FocusEventHandler<HTMLDivElement> | undefined;
99
+ onBlur?: import("react").FocusEventHandler<HTMLDivElement> | undefined;
100
+ onBlurCapture?: import("react").FocusEventHandler<HTMLDivElement> | undefined;
101
+ onChange?: import("react").ChangeEventHandler<HTMLDivElement, Element> | undefined;
102
+ onChangeCapture?: import("react").ChangeEventHandler<HTMLDivElement, Element> | undefined;
103
+ onBeforeInput?: import("react").InputEventHandler<HTMLDivElement> | undefined;
104
+ onBeforeInputCapture?: import("react").InputEventHandler<HTMLDivElement> | undefined;
105
+ onInput?: import("react").InputEventHandler<HTMLDivElement> | undefined;
106
+ onInputCapture?: import("react").InputEventHandler<HTMLDivElement> | undefined;
107
+ onReset?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
108
+ onResetCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
109
+ onSubmit?: import("react").SubmitEventHandler<HTMLDivElement> | undefined;
110
+ onSubmitCapture?: import("react").SubmitEventHandler<HTMLDivElement> | undefined;
111
+ onInvalid?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
112
+ onInvalidCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
113
+ onLoad?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
114
+ onLoadCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
115
+ onError?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
116
+ onErrorCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
117
+ onKeyDown?: import("react").KeyboardEventHandler<HTMLDivElement> | undefined;
118
+ onKeyDownCapture?: import("react").KeyboardEventHandler<HTMLDivElement> | undefined;
119
+ onKeyPress?: import("react").KeyboardEventHandler<HTMLDivElement> | undefined;
120
+ onKeyPressCapture?: import("react").KeyboardEventHandler<HTMLDivElement> | undefined;
121
+ onKeyUp?: import("react").KeyboardEventHandler<HTMLDivElement> | undefined;
122
+ onKeyUpCapture?: import("react").KeyboardEventHandler<HTMLDivElement> | undefined;
123
+ onAbort?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
124
+ onAbortCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
125
+ onCanPlay?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
126
+ onCanPlayCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
127
+ onCanPlayThrough?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
128
+ onCanPlayThroughCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
129
+ onDurationChange?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
130
+ onDurationChangeCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
131
+ onEmptied?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
132
+ onEmptiedCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
133
+ onEncrypted?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
134
+ onEncryptedCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
135
+ onEnded?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
136
+ onEndedCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
137
+ onLoadedData?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
138
+ onLoadedDataCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
139
+ onLoadedMetadata?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
140
+ onLoadedMetadataCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
141
+ onLoadStart?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
142
+ onLoadStartCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
143
+ onPause?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
144
+ onPauseCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
145
+ onPlay?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
146
+ onPlayCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
147
+ onPlaying?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
148
+ onPlayingCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
149
+ onProgress?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
150
+ onProgressCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
151
+ onRateChange?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
152
+ onRateChangeCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
153
+ onSeeked?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
154
+ onSeekedCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
155
+ onSeeking?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
156
+ onSeekingCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
157
+ onStalled?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
158
+ onStalledCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
159
+ onSuspend?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
160
+ onSuspendCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
161
+ onTimeUpdate?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
162
+ onTimeUpdateCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
163
+ onVolumeChange?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
164
+ onVolumeChangeCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
165
+ onWaiting?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
166
+ onWaitingCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
167
+ onAuxClick?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
168
+ onAuxClickCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
169
+ onClick?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
170
+ onClickCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
171
+ onContextMenu?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
172
+ onContextMenuCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
173
+ onDoubleClick?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
174
+ onDoubleClickCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
175
+ onDrag?: import("react").DragEventHandler<HTMLDivElement> | undefined;
176
+ onDragCapture?: import("react").DragEventHandler<HTMLDivElement> | undefined;
177
+ onDragEnd?: import("react").DragEventHandler<HTMLDivElement> | undefined;
178
+ onDragEndCapture?: import("react").DragEventHandler<HTMLDivElement> | undefined;
179
+ onDragEnter?: import("react").DragEventHandler<HTMLDivElement> | undefined;
180
+ onDragEnterCapture?: import("react").DragEventHandler<HTMLDivElement> | undefined;
181
+ onDragExit?: import("react").DragEventHandler<HTMLDivElement> | undefined;
182
+ onDragExitCapture?: import("react").DragEventHandler<HTMLDivElement> | undefined;
183
+ onDragLeave?: import("react").DragEventHandler<HTMLDivElement> | undefined;
184
+ onDragLeaveCapture?: import("react").DragEventHandler<HTMLDivElement> | undefined;
185
+ onDragOver?: import("react").DragEventHandler<HTMLDivElement> | undefined;
186
+ onDragOverCapture?: import("react").DragEventHandler<HTMLDivElement> | undefined;
187
+ onDragStart?: import("react").DragEventHandler<HTMLDivElement> | undefined;
188
+ onDragStartCapture?: import("react").DragEventHandler<HTMLDivElement> | undefined;
189
+ onDrop?: import("react").DragEventHandler<HTMLDivElement> | undefined;
190
+ onDropCapture?: import("react").DragEventHandler<HTMLDivElement> | undefined;
191
+ onMouseDown?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
192
+ onMouseDownCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
193
+ onMouseEnter?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
194
+ onMouseLeave?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
195
+ onMouseMove?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
196
+ onMouseMoveCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
197
+ onMouseOut?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
198
+ onMouseOutCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
199
+ onMouseOver?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
200
+ onMouseOverCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
201
+ onMouseUp?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
202
+ onMouseUpCapture?: import("react").MouseEventHandler<HTMLDivElement> | undefined;
203
+ onSelect?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
204
+ onSelectCapture?: import("react").ReactEventHandler<HTMLDivElement> | undefined;
205
+ onTouchCancel?: import("react").TouchEventHandler<HTMLDivElement> | undefined;
206
+ onTouchCancelCapture?: import("react").TouchEventHandler<HTMLDivElement> | undefined;
207
+ onTouchEnd?: import("react").TouchEventHandler<HTMLDivElement> | undefined;
208
+ onTouchEndCapture?: import("react").TouchEventHandler<HTMLDivElement> | undefined;
209
+ onTouchMove?: import("react").TouchEventHandler<HTMLDivElement> | undefined;
210
+ onTouchMoveCapture?: import("react").TouchEventHandler<HTMLDivElement> | undefined;
211
+ onTouchStart?: import("react").TouchEventHandler<HTMLDivElement> | undefined;
212
+ onTouchStartCapture?: import("react").TouchEventHandler<HTMLDivElement> | undefined;
213
+ onPointerDown?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
214
+ onPointerDownCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
215
+ onPointerMove?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
216
+ onPointerMoveCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
217
+ onPointerUp?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
218
+ onPointerUpCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
219
+ onPointerCancel?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
220
+ onPointerCancelCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
221
+ onPointerEnter?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
222
+ onPointerLeave?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
223
+ onPointerOver?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
224
+ onPointerOverCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
225
+ onPointerOut?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
226
+ onPointerOutCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
227
+ onGotPointerCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
228
+ onGotPointerCaptureCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
229
+ onLostPointerCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
230
+ onLostPointerCaptureCapture?: import("react").PointerEventHandler<HTMLDivElement> | undefined;
231
+ onScroll?: import("react").UIEventHandler<HTMLDivElement> | undefined;
232
+ onScrollCapture?: import("react").UIEventHandler<HTMLDivElement> | undefined;
233
+ onScrollEnd?: import("react").UIEventHandler<HTMLDivElement> | undefined;
234
+ onScrollEndCapture?: import("react").UIEventHandler<HTMLDivElement> | undefined;
235
+ onWheel?: import("react").WheelEventHandler<HTMLDivElement> | undefined;
236
+ onWheelCapture?: import("react").WheelEventHandler<HTMLDivElement> | undefined;
237
+ onAnimationStart?: import("react").AnimationEventHandler<HTMLDivElement> | undefined;
238
+ onAnimationStartCapture?: import("react").AnimationEventHandler<HTMLDivElement> | undefined;
239
+ onAnimationEnd?: import("react").AnimationEventHandler<HTMLDivElement> | undefined;
240
+ onAnimationEndCapture?: import("react").AnimationEventHandler<HTMLDivElement> | undefined;
241
+ onAnimationIteration?: import("react").AnimationEventHandler<HTMLDivElement> | undefined;
242
+ onAnimationIterationCapture?: import("react").AnimationEventHandler<HTMLDivElement> | undefined;
243
+ onToggle?: import("react").ToggleEventHandler<HTMLDivElement> | undefined;
244
+ onBeforeToggle?: import("react").ToggleEventHandler<HTMLDivElement> | undefined;
245
+ onTransitionCancel?: import("react").TransitionEventHandler<HTMLDivElement> | undefined;
246
+ onTransitionCancelCapture?: import("react").TransitionEventHandler<HTMLDivElement> | undefined;
247
+ onTransitionEnd?: import("react").TransitionEventHandler<HTMLDivElement> | undefined;
248
+ onTransitionEndCapture?: import("react").TransitionEventHandler<HTMLDivElement> | undefined;
249
+ onTransitionRun?: import("react").TransitionEventHandler<HTMLDivElement> | undefined;
250
+ onTransitionRunCapture?: import("react").TransitionEventHandler<HTMLDivElement> | undefined;
251
+ onTransitionStart?: import("react").TransitionEventHandler<HTMLDivElement> | undefined;
252
+ onTransitionStartCapture?: import("react").TransitionEventHandler<HTMLDivElement> | undefined;
253
+ key?: import("react").Key | null | undefined;
254
+ defaultChecked?: boolean | undefined | undefined;
255
+ defaultValue?: string | number | readonly string[] | undefined;
256
+ suppressContentEditableWarning?: boolean | undefined | undefined;
257
+ accessKey?: string | undefined | undefined;
258
+ autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {}) | undefined;
259
+ autoFocus?: boolean | undefined | undefined;
260
+ contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
261
+ contextMenu?: string | undefined | undefined;
262
+ dir?: string | undefined | undefined;
263
+ draggable?: (boolean | "true" | "false") | undefined;
264
+ enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
265
+ hidden?: boolean | undefined | undefined;
266
+ spellCheck?: (boolean | "true" | "false") | undefined;
267
+ translate?: "yes" | "no" | undefined | undefined;
268
+ radioGroup?: string | undefined | undefined;
269
+ about?: string | undefined | undefined;
270
+ content?: string | undefined | undefined;
271
+ datatype?: string | undefined | undefined;
272
+ inlist?: any;
273
+ prefix?: string | undefined | undefined;
274
+ property?: string | undefined | undefined;
275
+ rel?: string | undefined | undefined;
276
+ resource?: string | undefined | undefined;
277
+ rev?: string | undefined | undefined;
278
+ typeof?: string | undefined | undefined;
279
+ vocab?: string | undefined | undefined;
280
+ autoCorrect?: string | undefined | undefined;
281
+ autoSave?: string | undefined | undefined;
282
+ itemProp?: string | undefined | undefined;
283
+ itemScope?: boolean | undefined | undefined;
284
+ itemType?: string | undefined | undefined;
285
+ itemID?: string | undefined | undefined;
286
+ itemRef?: string | undefined | undefined;
287
+ results?: number | undefined | undefined;
288
+ security?: string | undefined | undefined;
289
+ unselectable?: "on" | "off" | undefined | undefined;
290
+ popover?: "" | "auto" | "manual" | "hint" | undefined | undefined;
291
+ popoverTargetAction?: "toggle" | "show" | "hide" | undefined | undefined;
292
+ popoverTarget?: string | undefined | undefined;
293
+ inert?: boolean | undefined | undefined;
294
+ inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined | undefined;
295
+ is?: string | undefined | undefined;
296
+ exportparts?: string | undefined | undefined;
297
+ className: string;
298
+ 'data-palette': Palette | undefined;
299
+ }, HTMLElement>;
@@ -0,0 +1,11 @@
1
+ import { createElement } from 'react';
2
+ import { cx } from '../cx';
3
+ /**
4
+ * Screen — the mobile screen column: max 25rem wide, the standard horizontal inset, NO vertical padding
5
+ * (bars reserve their own room). Every screen is base · top menu · bottom menu · content.
6
+ * `fill` makes it one phone height for a Step or a SheetStack; a plain Screen scrolls.
7
+ * Put an AppBar/TopBar first, the content next, and an ActionBar AFTER the screen (outside it).
8
+ */
9
+ export function Screen({ fill, palette, as = 'div', className, ...rest }) {
10
+ return createElement(as, { className: cx('screen', fill && 'screen--fill', className), 'data-palette': palette, ...rest });
11
+ }
@@ -0,0 +1,12 @@
1
+ import type { ComponentPropsWithoutRef } from 'react';
2
+ export interface SectionProps extends ComponentPropsWithoutRef<'section'> {
3
+ }
4
+ /**
5
+ * Section — frameless on-surface content + a CTA: an overline, a display heading, a paragraph, a CtaPack.
6
+ * NEVER a card: sections are what the base says; cards are content the system offers.
7
+ */
8
+ export declare function Section({ className, ...rest }: SectionProps): import("react").JSX.Element;
9
+ export interface CtaPackProps extends ComponentPropsWithoutRef<'div'> {
10
+ }
11
+ /** CtaPack — the buttons under a Section's words, wrapping on one line. */
12
+ export declare function CtaPack({ className, ...rest }: CtaPackProps): import("react").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cx } from '../cx';
3
+ /**
4
+ * Section — frameless on-surface content + a CTA: an overline, a display heading, a paragraph, a CtaPack.
5
+ * NEVER a card: sections are what the base says; cards are content the system offers.
6
+ */
7
+ export function Section({ className, ...rest }) {
8
+ return _jsx("section", { className: cx('section', className), ...rest });
9
+ }
10
+ /** CtaPack — the buttons under a Section's words, wrapping on one line. */
11
+ export function CtaPack({ className, ...rest }) {
12
+ return _jsx("div", { className: cx('cta-pack', className), ...rest });
13
+ }
@@ -0,0 +1,15 @@
1
+ import type { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ export interface TopBarProps extends Omit<ComponentPropsWithoutRef<'header'>, 'title'> {
3
+ /** the screen title (uppercase, ellipsised on one line) */
4
+ title: ReactNode;
5
+ /** a leading control — usually `<IconBtn sm icon="arrow-left" label="Back" />` */
6
+ back?: ReactNode;
7
+ /** trailing controls, right-aligned: chips, small icon buttons, a Dropdown — or the screen's one big move as a
8
+ * `Btn primary` (home's ขอความช่วยเหลือ, --tap-lg tall there; Lh 2026-09-09: no bottom bar on home) */
9
+ actions?: ReactNode;
10
+ }
11
+ /**
12
+ * TopBar — the screen's title bar: back · TITLE · actions. Same 60px floor as the AppBar.
13
+ * One per screen, first child of the Screen; a Step that follows it touches it.
14
+ */
15
+ export declare function TopBar({ title, back, actions, className, children, ...rest }: TopBarProps): import("react").JSX.Element;
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from '../cx';
3
+ /**
4
+ * TopBar — the screen's title bar: back · TITLE · actions. Same 60px floor as the AppBar.
5
+ * One per screen, first child of the Screen; a Step that follows it touches it.
6
+ */
7
+ export function TopBar({ title, back, actions, className, children, ...rest }) {
8
+ return (_jsxs("header", { className: cx('topbar', className), ...rest, children: [back, _jsx("h1", { className: "t-h1", children: title }), children, actions != null && _jsx("div", { className: "topbar__actions", children: actions })] }));
9
+ }
@@ -0,0 +1,7 @@
1
+ import type { ComponentPropsWithoutRef } from 'react';
2
+ export interface CardBackProps extends ComponentPropsWithoutRef<'button'> {
3
+ /** accessible name */
4
+ label?: string;
5
+ }
6
+ /** CardBack — the back button a tapped stack sheet reveals in its head; first child of that sheet's CardHead. Hidden until the sheet is open. */
7
+ export declare function CardBack({ label, className, ...rest }: CardBackProps): import("react").JSX.Element;
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cx } from '../cx';
3
+ import { Icon } from '../type/Icon';
4
+ /** CardBack — the back button a tapped stack sheet reveals in its head; first child of that sheet's CardHead. Hidden until the sheet is open. */
5
+ export function CardBack({ label = 'Back', className, ...rest }) {
6
+ return (_jsx("button", { type: "button", className: cx('icon-btn icon-btn--sm card__back', className), "aria-label": label, ...rest, children: _jsx(Icon, { name: "arrow-left" }) }));
7
+ }
@@ -0,0 +1,17 @@
1
+ import { type ComponentPropsWithoutRef, type ReactNode } from 'react';
2
+ export interface LiftProps extends ComponentPropsWithoutRef<'article'> {
3
+ }
4
+ /** Lift — the page content card lifted above a Drawer on an `SheetStage ask`. */
5
+ export declare function Lift({ className, ...rest }: LiftProps): import("react").JSX.Element;
6
+ export interface DrawerProps extends Omit<ComponentPropsWithoutRef<'div'>, 'title'> {
7
+ /** the question */
8
+ title: ReactNode;
9
+ /** the fine print under it */
10
+ caption?: ReactNode;
11
+ }
12
+ /** Drawer — the dark strip at the bottom of an ask stage: a question, a caption, a BtnTrio (no · ask · yes). */
13
+ export declare function Drawer({ title, caption, className, children, ...rest }: DrawerProps): import("react").JSX.Element;
14
+ export interface BtnTrioProps extends ComponentPropsWithoutRef<'div'> {
15
+ }
16
+ /** BtnTrio — three round buttons with dotted connectors between them (× · ? · ✓); the middle one inverted. */
17
+ export declare function BtnTrio({ className, children, ...rest }: BtnTrioProps): import("react").JSX.Element;
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Children, Fragment } from 'react';
3
+ import { cx } from '../cx';
4
+ /** Lift — the page content card lifted above a Drawer on an `SheetStage ask`. */
5
+ export function Lift({ className, ...rest }) {
6
+ return _jsx("article", { className: cx('card lift', className), ...rest });
7
+ }
8
+ /** Drawer — the dark strip at the bottom of an ask stage: a question, a caption, a BtnTrio (no · ask · yes). */
9
+ export function Drawer({ title, caption, className, children, ...rest }) {
10
+ return (_jsxs("div", { className: cx('drawer', className), ...rest, children: [_jsx("h2", { className: "t-h2", children: title }), caption != null && _jsx("p", { className: "t-caption", children: caption }), children] }));
11
+ }
12
+ /** BtnTrio — three round buttons with dotted connectors between them (× · ? · ✓); the middle one inverted. */
13
+ export function BtnTrio({ className, children, ...rest }) {
14
+ const items = Children.toArray(children);
15
+ return (_jsx("div", { className: cx('btn-trio', className), ...rest, children: items.map((child, i) => (_jsxs(Fragment, { children: [i > 0 && _jsx("span", { className: "btn-trio__dots" }), child] }, i))) }));
16
+ }
@@ -0,0 +1,21 @@
1
+ import type { ComponentPropsWithoutRef } from 'react';
2
+ export type SheetState = 'peek' | 'half' | 'full';
3
+ export interface SheetProps extends ComponentPropsWithoutRef<'article'> {
4
+ /** how far the sheet slid: `peek` (handle + title row) · `half` (default) · `full` (its top edge at the top bar) — a class, never a height */
5
+ state?: SheetState;
6
+ /** floats above a footnote strip on a dim stage (bottom corners and border back) */
7
+ raised?: boolean;
8
+ /** the grab handle (tap / drag / keyboard via cardds.js); `false` for a sheet with no handle, a string sets its accessible name */
9
+ handle?: boolean | string;
10
+ /** which states the handle cycles through, e.g. "peek half full" (default all three) */
11
+ states?: string;
12
+ }
13
+ /**
14
+ * Sheet — the SINGLE sheet: one card as a bottom sheet holding what the member ACTS on (controls, or small `Card sm`
15
+ * content cards). Always the full height of its box — a Step or a SheetStage — a state is only how far it slid.
16
+ * Shape: handle · head (a CardHead, a SheetHead — or ONE label Row carrying a Check/Toggle, when the sheet's
17
+ * whole ask is that switch and peek must show it) · SheetBody (the only part that scrolls). Written top-down.
18
+ * Inside a Step it never carries the step's action (the ActionBar is the one move); its own buttons only on a
19
+ * screen with no bar (the map sheet). This is the single sheet; the menu of stacked sheets is `SheetStack`.
20
+ */
21
+ export declare function Sheet({ state, raised, handle, states, className, children, ...rest }: SheetProps): import("react").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from '../cx';
3
+ /**
4
+ * Sheet — the SINGLE sheet: one card as a bottom sheet holding what the member ACTS on (controls, or small `Card sm`
5
+ * content cards). Always the full height of its box — a Step or a SheetStage — a state is only how far it slid.
6
+ * Shape: handle · head (a CardHead, a SheetHead — or ONE label Row carrying a Check/Toggle, when the sheet's
7
+ * whole ask is that switch and peek must show it) · SheetBody (the only part that scrolls). Written top-down.
8
+ * Inside a Step it never carries the step's action (the ActionBar is the one move); its own buttons only on a
9
+ * screen with no bar (the map sheet). This is the single sheet; the menu of stacked sheets is `SheetStack`.
10
+ */
11
+ export function Sheet({ state = 'half', raised, handle = true, states, className, children, ...rest }) {
12
+ return (_jsxs("article", { className: cx('card sheet', `sheet--${state}`, raised && 'sheet--raised', className), "data-sheet-states": states, ...rest, children: [handle !== false && _jsx("button", { className: "sheet__handle", type: "button", "aria-label": typeof handle === 'string' ? handle : 'Resize' }), children] }));
13
+ }
@@ -0,0 +1,5 @@
1
+ import type { ComponentPropsWithoutRef } from 'react';
2
+ export interface SheetBodyProps extends ComponentPropsWithoutRef<'div'> {
3
+ }
4
+ /** SheetBody — everything under a Sheet's head: the one thing that scrolls; its scroll padding keeps a focused control above the cut. Content never goes straight into the Sheet. */
5
+ export declare function SheetBody({ className, ...rest }: SheetBodyProps): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cx } from '../cx';
3
+ /** SheetBody — everything under a Sheet's head: the one thing that scrolls; its scroll padding keeps a focused control above the cut. Content never goes straight into the Sheet. */
4
+ export function SheetBody({ className, ...rest }) {
5
+ return _jsx("div", { className: cx('sheet__body', className), ...rest });
6
+ }
@@ -0,0 +1,13 @@
1
+ import type { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ export interface SheetHeadProps extends Omit<ComponentPropsWithoutRef<'div'>, 'title'> {
3
+ /** the round button on the left (an IconBtn sm) */
4
+ lead?: ReactNode;
5
+ /** the centred title */
6
+ title: ReactNode;
7
+ /** the caption under the title */
8
+ sub?: ReactNode;
9
+ /** the round button on the right */
10
+ trail?: ReactNode;
11
+ }
12
+ /** SheetHead — the stage sheet's three-column head: round button · centred title + sub · round button. A step sheet uses a CardHead instead. */
13
+ export declare function SheetHead({ lead, title, sub, trail, className, ...rest }: SheetHeadProps): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from '../cx';
3
+ /** SheetHead — the stage sheet's three-column head: round button · centred title + sub · round button. A step sheet uses a CardHead instead. */
4
+ export function SheetHead({ lead, title, sub, trail, className, ...rest }) {
5
+ return (_jsxs("div", { className: cx('sheet__head', className), ...rest, children: [lead ?? _jsx("span", {}), _jsxs("div", { children: [_jsx("h2", { className: "sheet__title", children: title }), sub != null && _jsx("span", { className: "sheet__sub", children: sub })] }), trail ?? _jsx("span", {})] }));
6
+ }
@@ -0,0 +1,21 @@
1
+ import type { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ export interface SheetStackProps extends ComponentPropsWithoutRef<'div'> {
3
+ /** `tap` (default): a tapped head brings its sheet to the front, its back button returns it · `display`: the giant title is the peek (recents, a library) · `static`: peeks only, the last sheet open */
4
+ mode?: 'tap' | 'display' | 'static';
5
+ /** wider peeks so more of each title shows (display stacks) */
6
+ fanned?: boolean;
7
+ /** nothing open on arrival (tap mode): every sheet, the front one too, peeks at the stack's bottom; the room above is the base's (`base`). A tap opens any sheet over it */
8
+ closed?: boolean;
9
+ /** what the base shows in a closed stack's headroom, behind the sheets, laid out against the peeks (a picture, a greeting) */
10
+ base?: ReactNode;
11
+ }
12
+ /**
13
+ * SheetStack — the MENU: sheets stacked like paper at the middle of the home screen, every one a main section.
14
+ * Children are Cards, direct children only, at most five: first = the back of the stack, last = the front (open) sheet.
15
+ * Every sheet is the stack's full height; a peek is the strip the next sheet doesn't cover. A stack head is a CardHead
16
+ * with CHILDREN, in this order: `<CardBack />` (tap mode), `<Text level="h2" caps>Shopping</Text>`, an `<IconRow>` of Icons —
17
+ * never the `heading` prop (it wraps the h2 in a div; the stack's one-line peek needs the bare h2). Put it last in a `Screen fill`, it bleeds
18
+ * off the bottom. `closed`: nothing open on arrival — every head peeks at the bottom and the base above shows `base` (a home screen
19
+ * with a picture over the menu); the `base` slot is rendered after the sheets, so it never takes a sheet's slot. This is the sheet STACK; a single bottom sheet is `Sheet`.
20
+ */
21
+ export declare function SheetStack({ mode, fanned, closed, base, className, children, ...rest }: SheetStackProps): import("react").JSX.Element;
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from '../cx';
3
+ /**
4
+ * SheetStack — the MENU: sheets stacked like paper at the middle of the home screen, every one a main section.
5
+ * Children are Cards, direct children only, at most five: first = the back of the stack, last = the front (open) sheet.
6
+ * Every sheet is the stack's full height; a peek is the strip the next sheet doesn't cover. A stack head is a CardHead
7
+ * with CHILDREN, in this order: `<CardBack />` (tap mode), `<Text level="h2" caps>Shopping</Text>`, an `<IconRow>` of Icons —
8
+ * never the `heading` prop (it wraps the h2 in a div; the stack's one-line peek needs the bare h2). Put it last in a `Screen fill`, it bleeds
9
+ * off the bottom. `closed`: nothing open on arrival — every head peeks at the bottom and the base above shows `base` (a home screen
10
+ * with a picture over the menu); the `base` slot is rendered after the sheets, so it never takes a sheet's slot. This is the sheet STACK; a single bottom sheet is `Sheet`.
11
+ */
12
+ export function SheetStack({ mode = 'tap', fanned, closed, base, className, children, ...rest }) {
13
+ return (_jsxs("div", { className: cx('sheet-stack', mode !== 'static' && `sheet-stack--${mode}`, fanned && 'sheet-stack--fanned', closed && 'sheet-stack--closed', className), ...rest, children: [children, base != null && _jsx("div", { className: "sheet-stack__base", children: base })] }));
14
+ }
@@ -0,0 +1,20 @@
1
+ import type { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ export interface SheetStageProps extends ComponentPropsWithoutRef<'div'> {
3
+ /** what sits behind the sheet: a map, previous cards, page copy */
4
+ bg?: ReactNode;
5
+ /** ONE thing shown in the band a half sheet leaves open (a postcard being made), centred there */
6
+ hero?: ReactNode;
7
+ /** blur and darken the background (the dim page sheet) */
8
+ dim?: boolean;
9
+ /** the ask drawer stage: a Lift card over a dark Drawer */
10
+ ask?: boolean;
11
+ /** a footnote strip on the scrim under a raised sheet */
12
+ foot?: ReactNode;
13
+ }
14
+ /**
15
+ * SheetStage — a page-level overlay stage, its own 100dvh page: a Sheet over a map (or over a `hero` — one
16
+ * thing centred in the band a half sheet leaves open), the dim page sheet
17
+ * (`dim` + `Sheet raised`), the ask drawer (`ask` + Lift + Drawer). Full stops under the top bar's line.
18
+ * NEVER inside a Step — an app screen where the member acts is a Step.
19
+ */
20
+ export declare function SheetStage({ bg, hero, dim, ask, foot, className, children, ...rest }: SheetStageProps): import("react").JSX.Element;
@@ -0,0 +1,11 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { cx } from '../cx';
3
+ /**
4
+ * SheetStage — a page-level overlay stage, its own 100dvh page: a Sheet over a map (or over a `hero` — one
5
+ * thing centred in the band a half sheet leaves open), the dim page sheet
6
+ * (`dim` + `Sheet raised`), the ask drawer (`ask` + Lift + Drawer). Full stops under the top bar's line.
7
+ * NEVER inside a Step — an app screen where the member acts is a Step.
8
+ */
9
+ export function SheetStage({ bg, hero, dim, ask, foot, className, children, ...rest }) {
10
+ return (_jsxs("div", { className: cx('sheet-stage', dim && 'sheet-stage--dim', ask && 'sheet-stage--ask', className), ...rest, children: [bg != null && _jsx("div", { className: "sheet-stage__bg", children: bg }), hero != null && _jsx("div", { className: "sheet-stage__hero", children: hero }), children, foot != null && _jsx("p", { className: "sheet-stage__foot", children: foot })] }));
11
+ }
@@ -0,0 +1,15 @@
1
+ import type { ComponentPropsWithoutRef } from 'react';
2
+ export interface StepProps extends ComponentPropsWithoutRef<'section'> {
3
+ }
4
+ /**
5
+ * Step — one screen, one task. Children: a StepCard first (what the member READS), an optional Sheet last
6
+ * (what the member DOES); the ActionBar goes OUTSIDE, after the Step. It fills a `Screen fill` between the top bar
7
+ * and the bar's room, bleeds to the screen's edges (the sheet is full-width), and follows its TopBar/AppBar directly.
8
+ * Reads → StepCard only. Acts → StepCard + Sheet. Never hand-lay a step, never write a sheet height.
9
+ */
10
+ export declare function Step({ className, ...rest }: StepProps): import("react").JSX.Element;
11
+ export interface StepCardProps extends ComponentPropsWithoutRef<'article'> {
12
+ tone?: 1 | 2 | 3;
13
+ }
14
+ /** StepCard — the reading card of a Step: a normal Card (CardHead · content) that hugs its words and scrolls inside itself when the column runs out. */
15
+ export declare function StepCard({ tone, className, ...rest }: StepCardProps): import("react").JSX.Element;
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cx } from '../cx';
3
+ /**
4
+ * Step — one screen, one task. Children: a StepCard first (what the member READS), an optional Sheet last
5
+ * (what the member DOES); the ActionBar goes OUTSIDE, after the Step. It fills a `Screen fill` between the top bar
6
+ * and the bar's room, bleeds to the screen's edges (the sheet is full-width), and follows its TopBar/AppBar directly.
7
+ * Reads → StepCard only. Acts → StepCard + Sheet. Never hand-lay a step, never write a sheet height.
8
+ */
9
+ export function Step({ className, ...rest }) {
10
+ return _jsx("section", { className: cx('step', className), ...rest });
11
+ }
12
+ /** StepCard — the reading card of a Step: a normal Card (CardHead · content) that hugs its words and scrolls inside itself when the column runs out. */
13
+ export function StepCard({ tone, className, ...rest }) {
14
+ return _jsx("article", { className: cx('card step__card', tone && tone !== 1 && `card--${tone}`, className), ...rest });
15
+ }